From 1d2dae0251989b067908a7c06c0701a890b11580 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 11 Sep 2026 17:37:49 +0200 Subject: [PATCH 001/221] full training on ucloud post-mortem --- dev/ucloud/README.md | 5 + docs/roadmap.md | 16 +- docs/training-workflow-postmortem.md | 392 +++++++++++++++++++++++++++ 3 files changed, 410 insertions(+), 3 deletions(-) create mode 100644 docs/training-workflow-postmortem.md diff --git a/dev/ucloud/README.md b/dev/ucloud/README.md index 3d9cd5f..bf336df 100644 --- a/dev/ucloud/README.md +++ b/dev/ucloud/README.md @@ -1,5 +1,10 @@ # UCloud global_lepi training comparison +For findings from the completed production campaign and proposed next-run +improvements, see the [workflow post-mortem](../../docs/training-workflow-postmortem.md). +The commands below retain historical comparison profiles and pins; they are not +a newly qualified production recipe for every node. + Run inside **one allocated node**, with 1, 2, 4 or 8 visible GPUs. More than one GPU uses one `torchrun` process per GPU and the package's existing DDP trainer (including SyncBatchNorm). One GPU uses ordinary training. Do not invoke the diff --git a/docs/roadmap.md b/docs/roadmap.md index 6ca554b..374ae94 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,8 +1,18 @@ # Repository strengthening roadmap -The active quantization feature branch has a separate -[execution roadmap](quantization-roadmap.md) covering measured bottlenecks, -target-machine dependencies, integration gates and deferred work. +The quantization branch has been merged into master. Its +[execution roadmap](quantization-roadmap.md) remains the specialist backlog; +fully quantized training performance is not established by that merge. + +The completed four-GPU production campaign is assessed in the +[training workflow post-mortem and next-run plan](training-workflow-postmortem.md). +For the next training run, first deliver its bounded P0 workflow slice: durable +stage state and recovery, preallocated evaluation/export preparation, and separate +compute/storage qualification. Then measure concurrent staging before investing in +prepared shards. Preserve normal CLIs, operator overrides, figures and W&B. +These are proposed development priorities, not implemented capabilities. They fit +the safeguards, export, loading and evaluation boundaries below; defer another +large optimization matrix until it can change a specific production decision. This is the implementation order. Each increment should leave the existing default training and prediction interfaces working and include its own validation evidence. diff --git a/docs/training-workflow-postmortem.md b/docs/training-workflow-postmortem.md new file mode 100644 index 0000000..67ec9fc --- /dev/null +++ b/docs/training-workflow-postmortem.md @@ -0,0 +1,392 @@ +# Production training workflow: post-mortem and next-run plan + +Status: proposed development plan; no implementation is authorized by this document. +Campaign: 10–11 September 2026. The quant branch has since been merged into master. + +## Executive assessment + +The campaign produced a useful model, completed four-GPU training with figures and +W&B, evaluated in-domain and independent expert data, exported floating and PTQ +ONNX artifacts, and packaged the evidence with verified checksums. The original +objective of faster, memory-efficient fully quantized training was not established. +These are separate outcomes: merging useful improvements does not qualify every +experimental backend or prove absence of regressions against a full master run. + +The largest opportunity for the next run is operational reliability and data access, +not another optimization matrix. Small warmed trials selected a viable compute +configuration but substantially underestimated first-pass storage costs. Repeated +manual handoffs, opaque status and late preparation of evaluation/export consumed +scarce allocation time. Preserve the flexible CLI/API design and human decisions; +make the routine steps repeatable, inspectable and recoverable. + +This assessment uses the operator-provided logs, metric tables and command results +from the campaign, checked against the current repository interfaces. It is not an +independent audit of the downloaded archive or a replay of the experiments. The +archive checksum was reported as passing. Its final public URL and immutable model +hashes must be attached when available; do not invent them from version names. +Older notes that say production was incomplete, or retain four loader workers as +the production setting, are superseded by this campaign evidence. + +## Outcomes and strength of evidence + +| Area | Observed result | What it establishes / does not establish | +| --- | --- | --- | +| Production | EfficientNetV2-S, normalized hierarchical head, size 384; 4 full B200 GPUs; batch 256/rank; FP16 AMP; model compilation; 32 loader workers/rank in the successful run | A functional recipe on this allocation, not an optimum across precisions, machines or models | +| Optional features | Optimizer compilation, explicit CUDA prefetch, INT8 training and EMA disabled | Deliberate scope reduction; EMA and native INT8 DDP remain unsupported | +| Training | 30 epochs, 17:34:23 total; training 16:27:22, evaluation timer 43:33; best model reported at epoch 30 | Finished within allocation; phase timers do not cover every logging/teardown cost | +| Final metrics | Train species micro accuracy 98.1645%; validation species/genus/family 94.2353% / 97.6693% / 99.5047%; finite recorded losses | Strong completed-run result; not a controlled comparison with the old master model | +| In-domain test | 632,913 images; baseline micro accuracy 94.21% / 97.64% / 99.50%; macro accuracy 92.94% / 97.00% / 98.48% | Test agrees closely with validation; no dataset-leakage audit was completed here | +| Expert test | 58,640 images, 522 species; baseline species micro accuracy 57.59% all labels, 66.74% known only | Substantial domain/vocabulary shift remains despite strong in-domain results | +| Figures/W&B | Full-head diagnostics and distributed logging completed throughout production | Required product functionality worked; cost and summary semantics still need improvement | +| Resume probe | All 4 ranks reported identical checkpoint hash, start epoch 3 and restoration of model/optimizer/scheduler/scaler | Controlled restoration worked; arbitrary interrupted stochastic continuation is not proven bit-exact | +| FP32 ONNX | Dynamic batches 1, 2, 4 passed at rtol=1e-4, atol=1e-4; largest observed absolute error 3.84e-5 | Synthetic-input numerical parity, not real-image end-to-end parity or target-GPU performance | +| ONNX PTQ | 128 training images; Percentile 99.9; Q/DQ graph validation and finite runtime smoke passed | Quantized ONNX artifact exists; retained quality and native integer execution remain unqualified; no quantized .pt was created | +| Retention | 23.71 GiB before ZIP; ZIP integrity check and subsequent archive checksum passed | Evidence was preserved; size, discoverability and clean-environment reuse need refinement | + +### Allocation timeline and where time was exposed + +The four-GPU allocation began around 17:24. The successful production training +started around 19:01 (inferred from the final duration), about 97 minutes later. +Training finished around 12:35 the following day; test inference was reported +complete at 16:11, evaluation output around 16:44, and archive verification at +17:13, shortly before the 17:24 expiry. These are operational timestamps, not a +profile attributing every minute to a specific component. Qualification had value; +not all of this interval was avoidable waste. Nevertheless, hours of post-training +storage/evaluation and last-minute packaging were clearly on the critical path. + +The reported source split contained 5,063,857 training images, 633,224 validation +images and 632,913 test images. Thirty training epochs divided by the reported +training timer imply about 2,564 images/s aggregate, or 641/rank, consistent with +the observed roughly 650 training images/s/GPU. Use the training split rather than +all six-million-plus source rows for runtime planning, and budget validation and +diagnostics separately. This cross-check also illustrates why units belong in the +report rather than being reconstructed from ETA afterward. + +### Compute selection: useful, but deliberately bounded + +Reported aggregate warmed training throughput from four-GPU qualification: + +| Batch per GPU | Images/s | Peak allocated bytes per reported maximum | Peak reserved fraction | +| --- | ---: | ---: | ---: | +| 32 | 1,059.648 | 8,332,350,464 | 0.059 | +| 64 | 1,741.601 | 15,640,267,776 | 0.098 | +| 128 | 2,272.305 | 30,251,580,416 | 0.178 | +| 256 | 2,517.928 | 59,508,456,960 | 0.324 | + +Increasing batch 128 to 256 gained about 10.8% throughput with nearly twice the +allocated memory. Larger batches were not exhaustively tested. Spare memory is an +opportunity, not evidence that a further increase pays off. Use equal-memory-budget +and time-to-quality comparisons where appropriate, not just equal batch size. +Changing global batch also changes optimizer updates per epoch and schedule behavior. +The qualitative impression of improved prototypes/generalization at larger batches +is useful feedback, not a controlled convergence result. + +Earlier single-GPU trials repeatedly found model compilation reduced later-epoch +training time by roughly one third and allocated memory by roughly one third. +Optimizer compilation alone or combined with model compilation did not improve +those steady-state timings and added substantial cold startup. Explicit prefetch +showed no convincing additional gain. INT8 combined runs timed out and were not +qualified. Keep these negative results so that the next run does not repeat the +same matrix without a new hypothesis, implementation change or target requirement. +FP16 is the tested baseline; BF16 and other compiler modes were not eliminated by +a comprehensive comparison. + +## Failure modes and lessons + +### 1. Storage behavior invalidated small-subset extrapolation + +Full-data training and test inference initially stalled while data workers had low +CPU use and waited in `D` state / `folio_wait_bit_common`. A 32-step storage window +spent about 146–150 of 211 seconds waiting for the loader across ranks. Test +inference reached only 69/2,473 batches after 43 minutes. GPU utilization snapshots +sometimes looked high despite poor progress; they did not identify the bottleneck. + +The mounted filesystem was WEKA. Repeated reads of the same expert subset went +from hundreds of seconds to below one second. The operator observed improved cold +staging with 512 readers, and a later disjoint-sample read sweep favored 512 readers +(~117 images/s confirmation median) over lower concurrency. Another workload with +larger files provisionally favored 64. These are workload/cache-state results, not +universal worker defaults. Strong evidence supports cache-state-dependent storage +latency; the exact client/server cache or network mechanism was not instrumented. + +The successful production run used 32 loader workers/rank and eventually stabilized +near 650 training images/s/GPU and 2,000–2,500 evaluation images/s/GPU. The long +warmup within the run supports a cache-related explanation; it does not quantify a +separate causal percentage for each storage/concurrency effect. Practical mitigation +need not wait for a filesystem-internal diagnosis. + +Lessons: + +- Separate process workers for decode/augmentation from concurrent outstanding + encoded-byte reads. More processes are not the only way to hide blocking I/O. +- Measure first-pass and repeated-pass behavior. Disjoint paths avoid direct sample + reuse but cannot guarantee cold shared caches. Never drop global caches on a + shared allocation to manufacture a benchmark. +- Start with bounded but genuinely high concurrency candidates when latency is + evidenced; do not spend the allocation creeping from 4 to 8 to 16 threads. +- Separate reader startup, first result, steady work and drain/cancellation time. + Time-limited trials can be informative without completing their target file count. +- Report images/s and bytes/s, file-size distribution, errors, actual concurrency + and sample coverage. A sampled optimum is a provisional operating point. +- Prefer optional staging/encoded-byte preparation. Decoded caching of millions of + images is not a safe default even on a high-RAM node. + +### 2. Orchestration was too easy to interrupt and too hard to resume + +Examples included relative commands launched from the wrong directory, missing +inference YAML files, torchrun interpreting `--run` as its own abbreviated option, +preparation tied to historical commits, and cancelled stages refusing an existing +directory. A trial had final weights and finite metrics but was marked timed out +when the shared wall budget expired. This is neither evidence of failed training +nor permission to relabel the whole process successful: export, logging, teardown +or restore checks may still be incomplete. + +The package pin and checkout revision sometimes differed intentionally, while +`PYTHONPATH` overrides added a third possible source identity. Hand-built commands +made that hard to see. The late archive command also lost its terminal connection; +file descriptors could not recover previously lost stdout. Durable files and a +completion checksum, rather than terminal appearance, ultimately established success. + +The necessary response is a small extension to existing harness state and commands, +not a general workflow engine. Record phase completion separately from process exit, +retain partial results, and make retry/resume/archive-incomplete actions explicit. +A checkpoint's existence is not a replacement for a loss audit or clean shutdown. + +### 3. Qualification tested the right features, but not early enough in combination + +Figures were initially disabled to avoid expensive rendering, although they were a +required training diagnostic. At larger taxonomy size the dendrogram caused long +validation pauses and recursion warnings. Confusion/dendrogram improvements allowed +production diagnostics to remain on: at 12,632 species, confusion generation was +about 8–13 seconds and warmed dendrogram rendering about 12–13 seconds. First label +resolution added roughly a minute in one run; subsequent resolution was much faster. + +Whole-matrix confusion patterns and prototype organization matter to the operator. +Do not replace them with a few selected classes or disable them as the standard +performance fix. Preserve visual interpretation while bounding file/display costs. +Which hierarchy levels render must be an explicit option recorded in the resolved +configuration; the unexpected level-0-only output showed that defaults were opaque. + +The production smoke should exercise the actual CLI, full head dimensions, figures, +W&B, validation and save/reload on the intended topology. A small subset tests those +contracts; a separate bounded storage probe tests uncached access. Neither replaces +the other. Four GPUs passing does not establish eight-GPU behavior. + +### 4. Numerical and compiler warnings need a triage budget + +Early validation loss NaNs appeared in both branch baselines and optional-feature +runs; later epochs could be finite and the final production loss audit passed. +This weakens attribution to prefetch or quantization but does not prove the NaNs +were harmless. Keep a cheap first-occurrence record: phase/batch/sample identities, +input/output/loss finiteness, dtype and enabled features. Capture a bounded replay +only when triggered; avoid a permanent expensive debug path. + +Observed compiler issues were stochastic-depth specialization/recompile limits, +hierarchy initialization using `Tensor.item()`, and DDP gradient/bucket stride +mismatches. They are performance targets, not demonstrated model-quality failures. +Prioritize a change only after a representative trace shows repeated fallback, +recompilation or copy cost. Do not globally raise limits, suppress warnings or change +numerics merely to make the log clean. Keep EMA repair outside the next-run critical +path unless the operator explicitly needs EMA. + +### 5. Inference ingestion and evaluation preparation lagged behind training + +Folder inference unnecessarily depended on training-oriented index construction +and model-vocabulary membership. Valid expert species could be absent from the +model. A taxonomy rank-count/index mismatch was initially plausibly attributed to +network resolution. The bounded discovery fix was useful; broader ingestion should +keep discovery, taxonomy resolution, split policy and model indexing separate. + +A model-vocabulary filter restricts candidate predictions, not the validity of +ground-truth labels. Future source formats must reuse this separation for both +training and inference. External taxonomy access needs cache/provenance and clear +transport-versus-local-mapping errors; a hardcoded socket timeout is not a batch +or job deadline. + +Inference should normally require input, output and weights. Derive shape, +preprocessing and head/collector behavior from saved metadata, with explicit +operator overrides and actionable errors for ambiguous legacy metadata. Generate +resolved config for inspection; do not fill YAML with guessed defaults. + +Staging eventually made expert inference finish in 2:49 and full test inference in +30:02, after slow source reads had dominated. Prepare the evaluation plan before +training and overlap independent preparation where resource budgets allow. Do not +launch competing cold scans blindly. Pin mini_metrics in its own compatible Python +environment and preserve its pretty tables plus machine-readable outputs. + +### 6. Evaluation success and deployment readiness are different gates + +The expert set's 16 unseen species accounted for 8,042 images (13.71%) and errors; +five of those species contributed 84.3% of unseen-species errors. Error concentration +also existed among known species. This supports the operator's interpretation of +uneven domain/vocabulary effects. Geographic candidate lists are promising opt-in +priors, but their provenance/scope and excluded true labels must remain visible. +No regional-filter accuracy gain was established in the supplied results. + +Retain all-label/known-only and unfiltered/threshold-optimized reports. Clarify +micro versus macro, rank, aggregation period and abstention denominator. In-domain +optimized species accuracy was 95.73% at 97.46% coverage; expert known-only optimized +species accuracy was 92.25% at 53.66% coverage. These are not equivalent operating +points. Threshold search/split semantics and the distinction between an applied +threshold and a subsequently reported optimum must be documented before rollout. +Choose deployment thresholds using suitable calibration data and evaluate them +frozen; current optimized test reports remain exploratory. Empty-abstention summary +NaNs are distinct from nonfinite model outputs or loss. + +FP16 AMP training did not imply an FP16 ONNX export. FP32 export required an explicit +absolute-tolerance adjustment after small near-zero discrepancies; tolerances and +errors were retained. Do not silently weaken defaults. Add real-image parity and +rank/top-k changes alongside absolute errors, with predeclared acceptable limits. +PTQ happened directly on ONNX, so no quantized PyTorch artifact exists. Q/DQ node +counts and runtime loadability are not proof of integer kernel placement, target +speed or retained accuracy. These must be separate candidate acceptance checks. + +### 7. Packaging worked, but happened too late and bundled too much together + +The verified archive preserved a large set of results, logs and figures. Packaging +was improvised near expiry, and the chosen public bundle also contained a resume +checkpoint and extensive history. Use one relocatable directory but distinguish a +small deployment subset, reproducibility evidence and optional training archive. +Never omit ONNX external tensors. Retain omissions in the manifest; calibration +manifests referring to omitted tensors must not imply self-contained replay. + +A publication command should inventory intended files, sizes and public/private +scope before copying; omit credentials, caches and raw training images by default. +Record package revision, harness revision, weights hash, splits, preprocessing, +class mapping, evaluation versions, export tolerances and target qualification. +Write logs to disk from process start and publish completion atomically. Checksums +establish integrity, not accuracy, data provenance or deployment correctness. + +## Prioritized development plan + +Effort below is a planning estimate for implementation plus focused validation, +not a promise: S = roughly 1–2 developer days; M = several days; L = one or more +weeks with integration work. Re-estimate after inspecting the existing boundary. +Prefer the smallest vertical slice that removes an observed failure. + +| Priority | Increment | Value / effort | Done when | +| --- | --- | --- | --- | +| P0 | Durable stage state and resolved execution plan | High reliability, S–M | A fresh job can inspect, run, stop, retry and resume each existing stage; logs survive disconnect; completed stages are reused only after input/hash validation | +| P0 | Prepare evaluation/export/publication before allocation | High saved allocation time, S–M | One tiny installed-CLI fixture runs train → predict → metrics → export → package; commands, required paths and dependencies are checked before expensive work | +| P0 | Separate compute qualification from storage qualification | High decision value, S | A compact report distinguishes startup, warm training, first-pass I/O, validation/figures and teardown; it states scope and units and supplies a bounded next action | +| P1 | Reusable concurrent read/staging calibration | High on affected storage, M | Startup and work budgets are separate; incomplete trials remain informative; bounded cancellation/recovery, disjoint sampling, file sizes and actual concurrency are reported; operator override survives | +| P1 | Optional prepared encoded-byte dataset round trip | Potentially high recurring gain, L | Existing input compatibility matrix and sampler/DDP contracts pass; end-to-end savings exceed preparation/maintenance cost on representative data | +| P1 | Real-image export and candidate evaluation | High rollout confidence, M | Same preprocessed held-out inputs compare PyTorch, floating ONNX and optional PTQ; score/rank changes, quality, coverage, placement and target resource evidence are retained | +| P2 | Figure/metadata caching and explicit figure policy | Medium operational gain, S–M | Whole-matrix diagnostics and requested hierarchy levels remain inspectable; first/warm rendering and file sizes are recorded without repeated taxonomy resolution | +| P2 | Targeted compiler/numerical fixes | Conditional gain, M per demonstrated issue | A bounded reproducer demonstrates the cost/failure and a paired check verifies the fix without changing checkpoint or prediction contracts | +| Deferred | Native INT8 DDP, EMA, expanded precision/compiler matrices, automated allocation, universal inference CLI | Uncertain value, M–L | A concrete requirement or measured bottleneck justifies a separately reviewed experiment; none blocks the baseline run | + +### A. Next-run minimum: complete the P0 vertical slice first + +Build on `dev/ucloud/{setup.sh,compare.py,scaling.py,production.py}`, the evaluation +scripts and existing ONNX tools. Do not replace the public training/inference APIs. +A small shared run manifest should reference existing stage outputs rather than +copy their schemas into another database. Record stage input identities, resolved +command/config, start/end, output/log paths, exit cause and completion checks. +Differentiate preparation, compilation, training, validation/figures, checkpoint, +logger synchronization and teardown. Start with phases that are already observable. + +Use absolute paths in generated commands, explicit interpreter selection, package +and harness identities, and inspected CLI-over-YAML precedence. Keep W&B's existing +interactive authentication in the foreground. No secrets in manifests. Pin an +accepted master revision; do not embed a permanent dependency on the old quant +branch name or four-GPU topology in otherwise reusable planning helpers. + +Define an allocation deadline separately from stage limits, compilation allowance +and cleanup reserve. Human pauses consume allocation time but must not masquerade +as model regressions. Estimate feasible epochs from measured full-data throughput, +actual training split count, validation cost and reserve; do not silently alter the +learning-rate schedule to fit. At a supported checkpoint boundary, give the operator +an explicit continuation/stop decision. Do not promise exact arbitrary-batch resume +without the necessary RNG/sampler contract. + +Acceptance should include interruption after preparation, failed child exit, timeout +after checkpoint save, logger teardown failure and re-running a completed stage. +Use tiny fixtures and existing integration tests, not a second production matrix. +A single topology smoke on a changed target remains necessary. + +### B. Storage work: validate the cheap mitigation before building shards + +First improve the existing calibration/staging helper and, if needed, add bounded +encoded-byte read-ahead inside the current reader boundary. Bound requests and +bytes, preserve sample order, propagate failures with identities, and avoid repeating +large Python metadata per reader. Do not conflate read concurrency, DataLoader +processes and CUDA prefetch. Keep direct filesystem loading available. + +Only then implement the optional prepared-data backend already specified in the +[main roadmap](roadmap.md#optional-dataset-preparation-for-scalable-loading). +Start with byte-preserving indexed shards and explicit manifests. Defer distributed +cache eviction services and alternative shuffle policies until measured need. +Prepared formats must support all existing cases or explicitly remain an opt-in +partial prototype; they must never silently redefine splits, labels or sample order. + +Decision rule: report total preparation plus expected training/evaluation time and +break-even reuse count. Prefer a modest throughput gain delivered simply over a +complex backend that saves less than its preparation cost for the intended run. +Higher-concurrency staging may be enough for an immediate run; repeated campaigns +on the same corpus strengthen the case for persistent preparation. + +### C. Keep human decisions first-class + +The proposed workflow exposes `plan`, per-stage execution, compact `status`, and +explicit retry/resume actions; exact command spelling is an implementation choice. +Each stage can still be run through the normal CLI. The human can inspect figures, +change a proposed batch/worker count, select a candidate, pause or reject promotion. +Changes produce a new resolved configuration and identity; completed unrelated +stages are retained rather than overwritten or automatically rerun. + +Operator decisions are required at scientific boundaries: dataset/split choice, +global batch and schedule, geographic priors, thresholds, acceptable PTQ quality +loss and production promotion. Routine bounded retries and report generation do +not require repeated permission prompts. Do not turn every warning into a blocker. +Expose reason, scope and recovery command when intervention really is required. + +The next-run sequence is: prepare the plan and tiny end-to-end fixture before +allocation; inspect the actual node/storage; perform one production-feature smoke +and bounded storage calibration; choose a batch using existing evidence plus at +most a few useful candidates; verify save/reload; launch production in the same +allocation; evaluate and export at completion; finalize durable artifacts. Preserve +manual allocation and permit an explicit decision to skip optional experiments. + +## Experiment and validation budget + +- Every experiment states the decision it changes, baseline, measurement scope, + maximum elapsed/allocated GPU time, and stop criterion before launch. +- Reuse the qualified floating recipe unless hardware, code or workload changes + invalidate it. Run a full old-master training comparison only as a separately + funded scientific question, not a prerequisite for ordinary deployment. +- For the first batch/worker search, set a small candidate budget. Stop when gains + are within observed noise or too small to affect run completion. Expand only with + evidence and an operator decision; do not exhaust a Cartesian product. +- A single null measurement is not proof of equivalence. Repeat only close decisions + or unexpected failures that matter; multiple seeds are for quality claims, not + every operational smoke. Keep sample-cache caveats in the report. +- Preserve figures and W&B in qualification. Report end-to-end time as well as + compute-only timing so optimizations cannot hide costs in validation or shutdown. +- Default PR checks should exercise contracts with tiny fixtures. Report test + durations, consolidate duplicated behavior checks, and reserve real-backbone, + GPU, full-scale storage and performance experiments for the relevant changes. + Do not weaken numerical assertions simply to get green CI. +- Continuous benchmarks should use small representative jobs, not large nodes. + Allocation credentials remain separate from candidate code and publishing; + automatic cloud provisioning is not part of this next-run plan. + +## Success criteria and deliberately open questions + +The next campaign should require no hand-edited browser YAML, no reconstruction of +missing commands from chat, and no ambiguity about which stage finished. It should +produce a usable selected-model bundle even if optional PTQ or an upload fails. +Measure operator interventions, allocation time before first productive training, +first-pass/warm throughput, evaluation turnaround, failed/repeated stages and final +artifact size. Set concrete budgets from the next dataset/node plan; the current +record does not support a universal target percentage or preparation-time guarantee. + +Still open: unbiased convergence comparisons across batch sizes/precisions; exact +resume semantics under stochastic training; real-image exported-model parity; +PTQ quality and target performance; deployment threshold policy; regional prior +provenance; whether storage preparation amortizes for the next corpus; and the +published immutable artifact URL. None should be reported as solved by this plan. + +The existing [quantization roadmap](quantization-roadmap.md) remains the specialist +backlog for quantized performance and deployment work. This document supplies the +operational order for the next production campaign, not a competing feature matrix. From 268d294c5ede8b0193a275e50a3ee3ada1be7825 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 11 Sep 2026 18:56:08 +0200 Subject: [PATCH 002/221] agent: keep validation proportional to change risk --- AGENTS.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 40f50e1..c34819d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -52,6 +52,18 @@ Complete a bounded, validated increment before moving to the next priority. - Slow backbone tests require `RUN_SLOW_TESTS=1` and may need model downloads. The compatibility runner can update the backbone blacklist; use it only when that mutation is part of the task. +- Be economical with validation: choose the smallest set of checks that covers the + changed behavior and credible regressions, while satisfying the requirements above. + Before an expensive suite or benchmark, identify the unresolved question it answers. +- Reuse passing evidence for unchanged code and environments. Batch related edits + before expensive checks; do not rerun the same suite for documentation changes or + automatically repeat focused checks already covered by a passing broader run. + Repeat or broaden checks when new changes, failures, integration conflicts or a + concrete unresolved risk justify it, not merely for additional reassurance. +- Add tests for meaningful behavior and failure modes, not assertions that mirror + implementation details or low-impact presentation changes. Prefer existing + coverage and a focused browser/manual check where appropriate. Keep required CI + gates intact; report the limits of focused validation rather than implying full coverage. - Report checks run, failures, skips, and limits honestly. Do not weaken checks or alter expected results merely to make a refactor pass. From 86b92a4bf072307f563170a7a6fada7d0eb7bfbc Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 12:48:43 +0200 Subject: [PATCH 003/221] research: preserve prototype coordinate study and reproduction scripts --- docs/prototype-coordinate-study.md | 190 ++++++++++++++ .../prototype_linearization/README.md | 95 +++++++ .../prototype_linearization/advanced.py | 232 ++++++++++++++++++ .../prototype_linearization/benchmark.py | 206 ++++++++++++++++ .../prototype_linearization/followup.py | 98 ++++++++ .../prototype_linearization/selection.py | 78 ++++++ .../prototype_linearization/summarize.py | 98 ++++++++ .../test_coordinates.py | 36 +++ 8 files changed, 1033 insertions(+) create mode 100644 docs/prototype-coordinate-study.md create mode 100644 publication/experiments/prototype_linearization/README.md create mode 100644 publication/experiments/prototype_linearization/advanced.py create mode 100644 publication/experiments/prototype_linearization/benchmark.py create mode 100644 publication/experiments/prototype_linearization/followup.py create mode 100644 publication/experiments/prototype_linearization/selection.py create mode 100644 publication/experiments/prototype_linearization/summarize.py create mode 100644 publication/experiments/prototype_linearization/test_coordinates.py diff --git a/docs/prototype-coordinate-study.md b/docs/prototype-coordinate-study.md new file mode 100644 index 0000000..b83e319 --- /dev/null +++ b/docs/prototype-coordinate-study.md @@ -0,0 +1,190 @@ +# Prototype coordinates for classical statistical tools + +Status: bounded empirical study completed, 2026-09-15. This is a research result, +not a change to inference, classifier weights, or the prototype viewer. + +## Decision + +There is no universal winning “linearization” for this matrix. **Keep the original +weights as the general-purpose representation; offer PCA as task-specific +preprocessing, and full-rank PCA whitening as an optional metric transform.** +A stereographic export is convenient when an explicitly unconstrained spherical +chart and analytic inverse are required, but it did not generally improve the +classical tasks tested here. Its convenience should not be confused with an +empirical downstream advantage. + +The clearest improvement was **PCA before Gaussian naive Bayes**. Selecting the +number of components using validation data raised held-out family macro recall +from 73.89% to 81.00% on average. The three splits selected 256, 768 and 512 +components, respectively. This is evidence for task-specific decorrelation and +regularization, not a guarantee that a particular global dimension is optimal. + +## Data and evaluation + +The actual production classifier supplies 12,632 species prototypes, each with +1,280 effective FP32 weights. The export was extracted with mini_trainer's +`load_prototypes`, preserving class order, GBIF IDs and model hierarchy. Analysis +normalizes the tiny FP32 norm deviations and uses float64; it does not overwrite +the original matrix. Input SHA256 and exact commands are in the +[reproduction guide](../publication/experiments/prototype_linearization/README.md). + +Supervised evaluation includes 12,473 species from 57 families with at least ten +species each; the remaining 159 species in 47 smaller families are excluded. +There are three fixed species splits, stratified by family: 8,731 fit, 1,871 +validation and 1,871 test rows. All anchors, projections, whitening, radial maps, +kernel landmarks and downstream estimators are fitted using training rows only. +Ridge regularization is selected on validation macro recall. Genus 5-NN metrics +condition on the true genus being represented among training species; coverage +is recorded separately in the baseline results. + +These are **held-out species-prototype tasks**, not held-out image classification. +The original model learned with hierarchical supervision; its taxonomy is not an +independent property of how these vectors were constructed. Gaussian naive Bayes +is a concrete classical Gaussian-model task; no claim is made about arbitrary +GMMs, calibrated density likelihoods, regression or Kalman tracking. The study is +exploratory: the follow-up methods were chosen after inspecting initial results, +so it is not a preregistered independent model-selection benchmark. + +All table entries are percentages, mean ± sample SD across three splits. SD is +not a confidence interval; the splits overlap. Family “macro” means macro recall +(balanced accuracy), not mean one-vs-rest binary accuracy. + +| Representation | Linear family macro recall | Linear family micro accuracy | Gaussian NB family macro recall | Genus 5-NN accuracy | +|---|---:|---:|---:|---:| +| ambient | 79.81 ± 2.61 | 95.40 ± 0.33 | 73.89 ± 2.42 | 78.88 ± 0.23 | +| log_mean | 79.85 ± 1.82 | 95.24 ± 0.23 | 73.71 ± 2.06 | 78.89 ± 0.56 | +| log_intrinsic | 79.26 ± 2.60 | 95.23 ± 0.25 | 73.67 ± 2.13 | 78.96 ± 0.51 | +| stereographic | 80.15 ± 1.52 | 95.24 ± 0.19 | 73.70 ± 2.03 | 78.60 ± 0.66 | +| equal_area | 79.75 ± 1.88 | 95.23 ± 0.25 | 73.66 ± 2.16 | 79.07 ± 0.46 | +| log_radial | 79.85 ± 1.82 | 95.24 ± 0.23 | 73.71 ± 2.06 | 78.84 ± 0.55 | +| pca128 | 39.17 ± 1.77 | 87.42 ± 0.64 | 77.69 ± 1.55 | 66.00 ± 1.77 | +| pca512 | 63.98 ± 1.87 | 93.37 ± 0.33 | 81.07 ± 1.94 | 76.80 ± 0.25 | +| pca1280_whiten | 79.56 ± 2.18 | 95.35 ± 0.23 | 69.81 ± 1.82 | 79.77 ± 0.41 | +| fast_pns32 | 21.98 ± 0.96 | 71.16 ± 2.62 | 66.55 ± 2.07 | 47.69 ± 0.28 | +| fast_pns128 | 35.64 ± 1.53 | 84.95 ± 0.57 | 76.41 ± 2.30 | 66.49 ± 2.07 | +| nystrom512_gamma0.01 | 44.28 ± 1.76 | 81.26 ± 0.65 | 67.07 ± 1.61 | 74.79 ± 0.69 | + +The table's `equal_area` key means the Lambert radial formula extended to this +sphere; it **does not preserve high-dimensional volume**. `log_intrinsic` uses +40 mean-update iterations, not a certified global Fréchet mean. `log_radial` is +the proposed radial-warp idea implemented as a deliberately simple control. + +## What the downstream evidence supports + +1. **Linear family prediction:** original weights retain 95.40% micro accuracy. + Stereographic coordinates have the highest chart macro recall (80.15%), only + 0.34 percentage points above original weights, while losing micro accuracy. + This small, split-dependent trade-off does not justify declaring them superior. + Aggressive dimensional reduction loses discriminative information. +2. **Gaussian-model classification:** PCA is useful. Fixed 512-component PCA + reaches 81.07% macro recall; validation-selected PCA reaches 81.00%. Merely + applying log/stereographic coordinates leaves macro recall around 74%. + Whitening the PCA coordinates does not materially change Gaussian NB here: + its learned per-coordinate variances already absorb coordinate rescaling. +3. **Genus neighbour prediction:** full-rank whitening gives 79.77% versus 78.88% + for original weights. That modest improvement is a candidate for retrieval + workflows, not evidence that whitening preserves the original metric. Charts + remain around 79%; truncation and the tested kernel features generally lose. +4. **Clustering:** 32-PC mini-batch k-means gives mean held-out family ARI 0.170 + on original weights, 0.178 on log coordinates and 0.183 on stereographic + coordinates. This is a small coarse-clustering improvement, not an overall + winner or a validated species-clustering result. Cluster count is fixed to + the number of eligible families, not selected using test labels. +5. **Reconstruction and neighbourhoods:** original-space PCA at 128 dimensions + reconstructs at about 70° mean angular error; chart-PCA is roughly 78–81°. + Stereographic coordinates preserve about 84% of original ten-neighbour sets, + log coordinates about 89%, and the Lambert radial formula about 92%. + These are approximate coordinates, not geometry-preserving replacements. + +The covariance explains why simply removing a radial constraint does not rescue +low-dimensional PCA. On the first training split, two PCs explain **0.39%** of +variance, 32 explain **5.20%**, 128 explain **17.76%**, and 512 explain **54.42%**. +The information is spread across many dimensions. This does not mean that the +vectors lack useful taxonomic structure: the full-dimensional linear classifier +extracts it very well. A poor two-dimensional PCA picture and useful +high-dimensional linear prediction can coexist. + +## Principles, simplicity, cost and insertion/inversion + +| Method | Principle and practical complexity | New point / inverse | Evidence-based position | +|---|---|---|---| +| Original unit weights | Extrinsic spherical analysis; no fitted transform. Classical tools already accept these vectors. Normalize an average if a unit-direction estimate is needed. | O(d); no information loss in original export. | Best default for linear prediction and fidelity. | +| Sphere log map | Riemannian normal coordinates preserve distances from the anchor. Small implementation with a Householder vector. Curvature remains in the metric. | O(d); analytic exp inverse on the valid chart. Unique log domain excludes the antipode; radii are < π. | Useful local chart, no material general benefit on this dispersed matrix. | +| Stereographic | Conformal chart; arbitrary finite Euclidean coordinates, except one excluded sphere point. Does not preserve global dot products/distances. | O(d); analytic inverse, with numerical conditioning near the excluded pole. | Best simple invertible unrestricted chart if that is explicitly required. | +| PCA | Orthogonal covariance directions; dimension reduction regularizes classical models. Very standard implementation. | O(dk); new points use saved mean/loadings. Exact only when retaining the full basis; truncated inverse is approximate. | Strongest demonstrated preprocessing benefit for Gaussian NB. | +| Full PCA whitening | Invertible covariance rescaling; Euclidean distance becomes a fitted Mahalanobis distance. | O(d²); save mean/loadings/scales. Invertible with positive retained eigenvalues. | Modest genus-neighbour improvement, not best for Gaussian NB. | +| Fast PNS | Successive least-squares small subspheres; more fitting and state than a single chart. Scores retain a circular coordinate and bounded residuals. | O(dp + p²) after reduction; deterministic insertion. Inverse to reduced sphere passes roundtrip, but discarded dimensions cannot be recovered. | Tested p=32 and p=128 versions do not improve overall on matched PCA. | +| Nyström RBF features | Approximate nonlinear kernel feature space for linear tools; 512 training landmarks. | O(md + m²) with dense normalization; approximate learned preimage, no guaranteed inverse. | Five tested kernel widths give no overall advantage here. | +| Radial quantile warp | Distribution-specific heuristic; radial normality does not imply multivariate Gaussianity. | O(d) plus quantile lookup; our clamped interpolation loses extreme held-out radii. | No demonstrated gain; do not promote this control into an export default. | + +CPU observations on an Intel i7-12800H, with four BLAS threads: mean-anchor charts +fit in about 0.02 s and insert/invert one vector in roughly 11–23 μs. The 40-step +intrinsic-mean estimate takes about 5 s in a dedicated measurement and still has +mean-log residual norm 0.00034; it is not a converged global-mean claim. PCA fitting +ranges from about 0.4 s for this full-covariance solver to 2 s for the separate +randomized 512-component solver. Those timings use different algorithms and are +not a monotonic dimension-scaling comparison. PCA-512 insertion is about 0.2 ms. +Fast PNS-128 takes about 9.4 s including initial reduction and about 1.8 ms per +insertion. The narrow-kernel follow-up takes about 0.5 s including its fitted +preimage and about 1.1–1.2 ms per insertion. These are host-specific observations, +not deployment guarantees or carefully isolated throughput benchmarks. + +The PNS implementation follows the fast approximation in Monem, Dryden & George +(2025, §3.3), with three initializations and a bounded optimizer per subsphere. +All selected optimizer stages reported convergence, and held-out reduced-sphere +inversion passed. This does not certify globally optimal axes or establish how +full 1,279-dimensional PNS would perform. Its cost/state scales quadratically in +dimension, making it a higher-investment option than the demonstrated benefit +currently warrants. A known-small-circle numerical check validates the core +subsphere fit; this is not cross-validation against the authors' R package. + +Kernel widths 0.01, 0.1, 1, 5 and 20 were evaluated. Broad kernels were better; +narrow kernels largely failed to transfer beyond training landmarks. The table +shows γ=0.01 explicitly, not a claim of globally optimized kernels. At the same +512-coordinate count, PCA substantially outperforms this Nyström representation +for the linear family task. Approximate kernel preimages are not exact inverses. + +## Recommended next use + +- Retain the original matrix for linear classifiers, original angular similarity + and fidelity-sensitive work. +- For Gaussian or diagonal-covariance models, fit PCA on the analysis training + split and select the retained dimension using that task's validation data. + The tested 256–768 range is useful guidance, not a universal fixed setting. +- Consider full-rank whitening for an explicitly changed nearest-neighbour metric. +- Supply a stereographic companion only when consumers need its unrestricted chart + and analytic inverse. Save the anchor, row norms, transform conventions and + numerical error; do not label it a generally improved representation. +- Do not invest in full PNS, custom normalizing flows or autoencoders yet. The + reduced PNS experiment does not earn that escalation. Flows and autoencoders + are untested alternatives, not empirically rejected methods. +- Image embedding insertion, domain shift, calibrated densities and time-series + filtering need task-specific data before making performance claims. The present + evidence answers which approaches help the **available prototype tasks**. + +## Evidence and references + +The [research directory](../publication/experiments/prototype_linearization/README.md) +contains the protocol, source references and executable scripts. The local study +bundle `/tmp/prototype-linearization-study-20260915` originally contained raw per-split results, +split indices, executed source, environment information, a comparison figure and +checksums. No model, dataset or large generated matrices are added to Git. + +Repository consolidation on 2026-09-23 confirmed that this temporary bundle is +no longer present at that path. The results above are retained from the original +study and were not independently reverified during consolidation. Reproducing +them requires the original input matching the recorded checksum and a fresh run +of the four stages; the scripts alone do not archive the raw evidence. + +Numerical checks: three focused tests pass for chart inversion and single-point +insertion, a known small-circle PNS fit with held-out inversion, and the radial +control's endpoint failure. Every benchmark stage completed on the real matrix. +The same comparison is not rerun merely for formatting/documentation edits. + +Foundational sources: + +- [Fletcher et al., 2004: Principal Geodesic Analysis](https://doi.org/10.1109/TMI.2004.831793). +- [Jung, Dryden & Marron, 2012: Analysis of Principal Nested Spheres](https://www.statistics.pitt.edu/sungkyu/papers/Biometrika-2012-Jung-551-68.pdf). +- [Monem, Dryden & George, 2025: Principal Nested Spheres for High-Dimensional Data](https://arxiv.org/html/2511.08398v1). +- [Williams & Seeger, 2000: Nyström approximation](https://proceedings.neurips.cc/paper/2000/file/19de10adbaa1b2ee13f77f679fa1483a-Paper.pdf). +- [Mika et al., 1998: Kernel PCA and the preimage problem](https://proceedings.neurips.cc/paper/1998/hash/226d1f15ecd35f784d2a20c3ecf56d7f-Abstract.html). diff --git a/publication/experiments/prototype_linearization/README.md b/publication/experiments/prototype_linearization/README.md new file mode 100644 index 0000000..0c13d4d --- /dev/null +++ b/publication/experiments/prototype_linearization/README.md @@ -0,0 +1,95 @@ +# Classical-tool representations of production classifier prototypes + +Research scope: choose useful coordinates for existing classical statistical tools, +not storage compression or a replacement classifier. The immutable input is the +12,632 x 1,280 effective weight CSV exported through mini_trainer's prototype +loader, including original GBIF taxonomy. Input CSV SHA256: +`94b39070d891e87f129ae152a5754d8c4e5009cc843dffb0e0882911857eeb2f`. + +## Protocol + +- Three fixed 70/15/15 train/validation/test species splits (42, 43, 44), stratified + by model family. Families with fewer than ten species are excluded from this + supervised comparison; 12,473 rows remain. Original row indices are retained. +- Fit anchors, charts, PCA, radial warping, kernels and all predictors on training + rows only. Choose ridge regularization by validation macro recall over + `[0.01, 0.1, 1, 10, 100]`; report held-out micro accuracy and macro recall. +- Downstream tasks: family prediction with a classical ridge linear classifier + and Gaussian naive Bayes; genus prediction with weighted Euclidean 5-NN on + test genera represented in training; family clustering using mini-batch k-means + on 32 PCs; and PCA reconstruction at 2, 32 and 128 dimensions. +- Retrieval: ten-neighbour overlap against original-space Euclidean neighbours + (equivalent ordering to cosine/angular neighbours for unit vectors). +- One scalar RMS-radius normalization for ridge comparisons, not coordinate-wise + standardization that would erase geometric differences. Gaussian NB is + coordinate-dependent; PCA rotation itself can change its independence fit. +- Float64 analysis, four BLAS threads, CPU. Timing includes actual fit and batch + transform but not CSV parsing unless explicitly stated. Each method runs once + per split; timings are practical observations, not a performance guarantee. +- These are species-prototype tests, not image-level generalization, calibration, + tracking/Kalman filtering or density-likelihood validation. The model was trained + with taxonomy-aware objectives: taxonomy is useful external interpretation of + these rows, but it is not independent of how the prototypes were learned. + +## Methods and references + +- Original ambient unit weights are the required baseline: classical tools can + already operate on them; mean renormalization is an available extrinsic estimate. +- Sphere log map at normalized arithmetic mean, and at a 40-step local intrinsic + mean estimate. This is tangent-space preprocessing, not an exact global PGA + optimizer. See [Fletcher et al. 2004, DOI](https://doi.org/10.1109/TMI.2004.831793). +- Stereographic chart, with inverse and one excluded antipode. Conformal does not + mean dot-product preserving. [Reference implementation and mathematics](https://people.math.sc.edu/burkardt/f_src/sphere_stereograph/sphere_stereograph.html). +- `equal_area` in initial result files is the **Lambert radial formula extended to + high dimension**. It is area preserving on S², not volume preserving on S¹²⁷⁹; + do not interpret the historical method key as a high-dimensional Jacobian claim. + [USGS map projection reference](https://pubs.usgs.gov/pp/1395/report.pdf). +- `log_radial` is an explicitly experimental control inspired by the proposed + radial CDF transform: piecewise-linear empirical quantiles to the large-dimension + Gaussian-radius approximation. Endpoint clamping makes unseen extreme radii + noninvertible. It is not a normalizing flow or a published sphere-unrolling method. +- PCA and PCA whitening use the training covariance. Truncated PCA is lossy; + full-rank whitening is invertible with saved mean/loadings/scales. Whitening + changes distances and regularization, not just coordinates. +- [Jung, Dryden & Marron 2012, Principal Nested Spheres](https://www.statistics.pitt.edu/sungkyu/papers/Biometrika-2012-Jung-551-68.pdf). + The score space retains a circular coordinate and bounded residual intervals. + Our small-sphere least-squares solver is a bounded reference implementation, + with three initializations per stage, not the authors' R implementation. +- [Monem, Dryden & George 2025, fast PNS preprint](https://arxiv.org/html/2511.08398v1), + section 3.3: fit PCA to orthogonal tangent coordinates, project log coordinates, + exponentiate into a lower sphere, then fit PNS. Reducing to 32 dimensions is a + computationally useful but lossy approximation; full PNS at 1,279 dimensions + is not benchmarked. Check optimizer diagnostics and reduced-sphere roundtrip. +- [Williams & Seeger 2000, Nyström kernel approximation](https://proceedings.neurips.cc/paper/2000/file/19de10adbaa1b2ee13f77f679fa1483a-Paper.pdf). + RBF kernel features are a scalable nonlinear input to linear tools. An explicit + out-of-sample transform exists; the inverse is only an approximate ridge preimage. + [Mika et al. 1998 explain the preimage problem](https://proceedings.neurips.cc/paper/1998/hash/226d1f15ecd35f784d2a20c3ecf56d7f-Abstract.html). + +## Run + +Use the existing environment without synchronizing it. This research uses installed +NumPy, SciPy, scikit-learn and threadpoolctl; the summary plot also uses Matplotlib. +It adds no mini_trainer dependency. + +```bash +OPENBLAS_NUM_THREADS=4 .venv/bin/python publication/experiments/prototype_linearization/benchmark.py \ + --input /path/to/classifier_weights.csv.gz --output /tmp/prototype-linearization-baseline +OPENBLAS_NUM_THREADS=4 .venv/bin/python publication/experiments/prototype_linearization/advanced.py \ + --input /path/to/classifier_weights.csv.gz --baseline /tmp/prototype-linearization-baseline \ + --output /tmp/prototype-linearization-advanced +``` + +Output paths must be fresh. Each method saves results as it finishes. Split manifests +are local binary artifacts; the input, model and generated matrices are not committed. + +The follow-up extends PCA to 512 coordinates, RBF widths to 0.01 and 0.1, and +fast PNS to 128 coordinates. `selection.py` selects Gaussian-NB PCA dimension +on validation macro recall from 32, 128, 256, 512, 768, 1024, 1280 and measures +single-point chart insertion/inversion. Both accept the same `--input`, +`--baseline` and fresh `--output` arguments as advanced.py. + +Collect the four output directories as `baseline`, `advanced`, `followup` and +`selection` beneath a study directory, then run `summarize.py --study /path/to/study` +to generate the table, figure, summary and checksums. See +[the findings](../../../docs/prototype-coordinate-study.md) for conclusions, +limitations and recommendations. diff --git a/publication/experiments/prototype_linearization/advanced.py b/publication/experiments/prototype_linearization/advanced.py new file mode 100644 index 0000000..dbfbba0 --- /dev/null +++ b/publication/experiments/prototype_linearization/advanced.py @@ -0,0 +1,232 @@ +"""PCA/whitening, Nyström kernels and fast principal nested spheres follow-up. + +PNS uses Monem, Dryden & George (2025), section 3.3, for the initial +32-dimensional sphere. Least-squares subspheres use three starts with L-BFGS. +This is a bounded reference implementation, not the authors' R package. +""" + +import argparse +import json +import time +from pathlib import Path + +import numpy as np +from benchmark import Coordinates, load, scores, unit +from scipy.optimize import minimize, minimize_scalar +from sklearn.decomposition import PCA +from sklearn.kernel_approximation import Nystroem +from sklearn.linear_model import Ridge, RidgeClassifier +from sklearn.metrics import balanced_accuracy_score +from sklearn.naive_bayes import GaussianNB +from sklearn.neighbors import KNeighborsClassifier +from threadpoolctl import threadpool_limits + + +def wrap(a): + return (a + np.pi) % (2 * np.pi) - np.pi + + +class PNS: + def fit(self, x): + self.stages = [] + self.optimization = [] + scale = 1.0 + while x.shape[1] > 2: + _, eig = np.linalg.eigh(np.cov(x, rowvar=False)) + starts = [unit(x.mean(0)), eig[:, 0], eig[:, 1]] + + def objective(v): + nv = np.linalg.norm(v) + u = v / nv + c = np.clip(x @ u, -1 + 1e-12, 1 - 1e-12) + angles = np.arccos(c) + residual = angles - angles.mean() + grad = x.T @ (-2 * residual / np.sqrt(1 - c * c)) / len(x) + grad = (grad - u * np.dot(grad, u)) / nv + return np.mean(residual**2), grad + + fits = [ + minimize(objective, v, method="L-BFGS-B", jac=True, options={"maxiter": 100, "ftol": 1e-11, "gtol": 1e-7}) for v in starts + ] + best = min(fits, key=lambda f: f.fun) + axis = unit(best.x) + radius = np.arccos(np.clip(x @ axis, -1, 1)).mean() + if radius > np.pi / 2: + axis = -axis + radius = np.pi - radius + w = axis.copy() + w[0] -= 1 + w = unit(w) if np.linalg.norm(w) > 1e-12 else np.zeros_like(w) + self.stages.append((w, radius, scale)) + self.optimization.append( + {"dimension": x.shape[1] - 1, "success": bool(best.success), "iterations": int(best.nit), "objective": float(best.fun)} + ) + rotated = x - 2 * (x @ w)[:, None] * w + x = unit(rotated[:, 1:]) + scale *= np.sin(radius) + angles = np.arctan2(x[:, 1], x[:, 0]) + # Bounded scalar minimization in several intervals to address the seam. + candidates = [ + minimize_scalar(lambda m: np.mean(wrap(angles - m) ** 2), bounds=(left, left + np.pi / 2), method="bounded") + for left in np.linspace(-np.pi, np.pi, 4, endpoint=False) + ] + self.circle_mean = min(candidates, key=lambda f: f.fun).x + self.circle_scale = scale + return self + + def transform(self, x): + parts = [] + for w, radius, scale in self.stages: + y = x - 2 * (x @ w)[:, None] * w + parts.append((np.arctan2(np.linalg.norm(y[:, 1:], axis=1), y[:, 0]) - radius) * scale) + x = unit(y[:, 1:]) + parts.append(wrap(np.arctan2(x[:, 1], x[:, 0]) - self.circle_mean) * self.circle_scale) + return np.column_stack(parts[::-1]) + + def inverse(self, z): + angle = z[:, 0] / self.circle_scale + self.circle_mean + x = np.column_stack((np.cos(angle), np.sin(angle))) + for i, (w, radius, scale) in enumerate(self.stages[::-1], 1): + angle = z[:, i] / scale + radius + x = np.column_stack((np.cos(angle), np.sin(angle)[:, None] * x)) + x -= 2 * (x @ w)[:, None] * w + return x + + +def evaluate(features, family, genus, split): + tr, va, te = split + ztr, zva, zte = features + scale = np.sqrt(np.mean(np.sum((ztr - ztr.mean(0)) ** 2, axis=1))) + ztr, zva, zte = [z / scale for z in features] + best = None + for alpha in [0.01, 0.1, 1, 10, 100]: + clf = RidgeClassifier(alpha=alpha).fit(ztr, family[tr]) + v = balanced_accuracy_score(family[va], clf.predict(zva)) + if best is None or v > best[0]: + best = (v, alpha, clf) + row = {"ridge_family": scores(family[te], best[2].predict(zte)) | {"alpha": best[1], "validation_balanced_accuracy": float(best[0])}} + g = GaussianNB().fit(ztr, family[tr]) + row["gaussian_nb_family"] = scores(family[te], g.predict(zte)) + covered = np.isin(genus[te], genus[tr]) + knn = KNeighborsClassifier(n_neighbors=5, weights="distance").fit(ztr, genus[tr]) + row["knn_genus"] = scores(genus[te][covered], knn.predict(zte)[covered]) + return row + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + p.add_argument("--seeds", nargs="+", type=int, default=[42, 43, 44]) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, g = load(a.input) + results = [] + for seed in a.seeds: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x = full[keep] + family = f[keep] + genus = g[keep] + split = [s[k] for k in ["train", "validation", "test"]] + tr, va, te = split + + def record(name, features, fit_s, insert_s, inverse=None, extra=None): + row = { + "seed": seed, + "method": name, + "dimensions": features[0].shape[1], + "fit_seconds": fit_s, + "transform_seconds_all": insert_s, + } + row.update(evaluate(features, family, genus, split)) + if inverse: + restored = unit(inverse(features[2])) + row["reconstruction_degrees"] = float(np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))).mean()) + if extra: + row.update(extra) + results.append(row) + (a.output / "results.json").write_text(json.dumps(results, indent=2)) + print(seed, name, row["ridge_family"], row["gaussian_nb_family"], "fit", round(fit_s, 2), flush=True) + + start = time.perf_counter() + pca = PCA(n_components=None, svd_solver="covariance_eigh").fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + pc = [pca.transform(x[idx]) for idx in split] + insert_s = time.perf_counter() - start + for dim in [32, 128, 1280]: + for whiten in [False, True]: + if dim == 1280 and not whiten: + continue + scales = np.sqrt(np.maximum(pca.explained_variance_[:dim], 1e-12)) if whiten else np.ones(dim) + features = [z[:, :dim] / scales for z in pc] + record( + f"pca{dim}" + ("_whiten" if whiten else ""), + features, + fit_s, + insert_s, + lambda z: (z * scales) @ pca.components_[:dim] + pca.mean_, + ) + # Fast PNS: PCA of orthogonal tangent coordinates, log projection, + # exp onto S^32, then nested small-sphere least-squares fitting. + start = time.perf_counter() + chart = Coordinates("log_mean").fit(x[tr]) + rot = chart.rotate(x[tr]) + tangent = rot[:, 1:] + smallpca = PCA(n_components=32, svd_solver="randomized", random_state=seed).fit(tangent) + basis = smallpca.components_ + logs = [chart.transform(x[idx]) @ basis.T for idx in split] + + def sphere(z): + r = np.linalg.norm(z, axis=1) + return np.column_stack((np.cos(r), z * np.sinc(r[:, None] / np.pi))) + + spheres = [sphere(z) for z in logs] + preparation = time.perf_counter() - start + record("fast_pns_input_log32", logs, preparation, 0, lambda z: chart.inverse(z @ basis)) + start = time.perf_counter() + pns = PNS().fit(spheres[0]) + fit_s = time.perf_counter() - start + preparation + start = time.perf_counter() + features = [pns.transform(z) for z in spheres] + insert_s = time.perf_counter() - start + error = float(np.max(np.abs(pns.inverse(features[2]) - spheres[2]))) + assert error < 1e-8, error + + def invert_pns(z): + reduced = pns.inverse(z) + return chart.rotate(np.column_stack((reduced[:, 0], reduced[:, 1:] @ basis))) + + record( + "fast_pns32", + features, + fit_s, + insert_s, + invert_pns, + {"reduced_sphere_roundtrip_max_abs": error, "optimizer_stages": pns.optimization}, + ) + # Kernel features for classical linear models; no analytic inverse. + for gamma in [1.0, 5.0, 20.0]: + start = time.perf_counter() + kernel = Nystroem(kernel="rbf", gamma=gamma, n_components=512, random_state=seed).fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + features = [kernel.transform(x[idx]) for idx in split] + insert_s = time.perf_counter() - start + preimage = Ridge(alpha=0.01).fit(features[0], x[tr]) + record( + f"nystrom512_gamma{gamma}", + features, + fit_s, + insert_s, + preimage.predict, + {"inverse": "ridge preimage, fitted on training only; approximate"}, + ) + print("Complete", flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/benchmark.py b/publication/experiments/prototype_linearization/benchmark.py new file mode 100644 index 0000000..fa5aa28 --- /dev/null +++ b/publication/experiments/prototype_linearization/benchmark.py @@ -0,0 +1,206 @@ +"""Held-out prototype coordinate benchmark; research only, no training changes.""" + +import argparse +import csv +import gzip +import hashlib +import json +import platform +import time +from pathlib import Path + +import numpy as np +import scipy +import sklearn +from scipy.special import ndtri +from sklearn.cluster import MiniBatchKMeans +from sklearn.decomposition import PCA +from sklearn.linear_model import RidgeClassifier +from sklearn.metrics import accuracy_score, adjusted_rand_score, balanced_accuracy_score +from sklearn.model_selection import train_test_split +from sklearn.naive_bayes import GaussianNB +from sklearn.neighbors import KNeighborsClassifier, NearestNeighbors +from threadpoolctl import threadpool_limits + + +def unit(x): + return x / np.maximum(np.linalg.norm(x, axis=-1, keepdims=True), 1e-15) + + +class Coordinates: + def __init__(self, kind): + self.kind = kind + + def fit(self, x): + self.mu = unit(x.mean(0)) + if self.kind == "log_intrinsic": + for _ in range(40): + c = np.clip(x @ self.mu, -1, 1) + t = x - c[:, None] * self.mu + theta = np.arctan2(np.linalg.norm(t, axis=1), c) + delta = (unit(t) * theta[:, None]).mean(0) + r = np.linalg.norm(delta) + if r < 1e-8: + break + self.mu = unit(np.cos(r) * self.mu + np.sinc(r / np.pi) * delta) + v = self.mu.copy() + v[0] -= 1 + self.w = unit(v) if np.linalg.norm(v) > 1e-12 else np.zeros_like(v) + if self.kind == "log_radial": + radii = np.linalg.norm(self.base(x), axis=1) + self.radii = np.sort(radii) + # Smooth empirical-quantile interpolation, NOT an exact empirical CDF. + # Gaussian radial asymptotic approximation; deliberately a control. + n, d = x.shape + self.targets = np.sqrt(d - 1 - 0.5) + ndtri((np.arange(n) + 0.5) / n) / np.sqrt(2) + return self + + def rotate(self, x): + return x - 2 * (x @ self.w)[..., None] * self.w + + def base(self, x): + y = self.rotate(x) + c, tail = np.clip(y[:, 0], -1, 1), y[:, 1:] + r = np.linalg.norm(tail, axis=1) + if self.kind == "stereographic": + return tail / (1 + c[:, None]) + if self.kind == "equal_area": + return tail * np.sqrt(2 / (1 + c[:, None])) + return unit(tail) * np.arctan2(r, c)[:, None] + + def transform(self, x): + if self.kind == "ambient": + return x.copy() + z = self.base(x) + if self.kind == "log_radial": + z = unit(z) * np.interp(np.linalg.norm(z, axis=1), self.radii, self.targets)[:, None] + return z + + def inverse(self, z): + if self.kind == "ambient": + return unit(z) + if self.kind == "log_radial": + z = unit(z) * np.interp(np.linalg.norm(z, axis=1), self.targets, self.radii)[:, None] + r = np.linalg.norm(z, axis=1) + if self.kind == "stereographic": + s = r * r + return self.rotate(np.column_stack(((1 - s) / (1 + s), 2 * z / (1 + s[:, None])))) + if self.kind == "equal_area": + # Outside valid chart ball, clip for approximate PCA reconstruction. + r = np.minimum(r, 2) + z = unit(z) * r[:, None] + return self.rotate(np.column_stack((1 - r * r / 2, z * np.sqrt(np.maximum(0, 1 - r * r / 4))[:, None]))) + return self.rotate(np.column_stack((np.cos(r), z * np.sinc(r[:, None] / np.pi)))) + + +def scores(y, pred): + return {"accuracy": float(accuracy_score(y, pred)), "balanced_accuracy": float(balanced_accuracy_score(y, pred))} + + +def load(path): + with gzip.open(path, "rt", newline="") as f: + reader = csv.DictReader(f) + rows = list(reader) + cols = [c for c in reader.fieldnames if c.startswith("weight_")] + x = np.array([[r[c] for c in cols] for r in rows], dtype=np.float64) + return unit(x), np.array([r["family_gbif_id"] for r in rows]), np.array([r["genus_gbif_id"] for r in rows]) + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + p.add_argument("--seeds", type=int, nargs="+", default=[42, 43, 44]) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + x, family, genus = load(a.input) + _, counts = np.unique(family, return_counts=True) + labels, counts = np.unique(family, return_counts=True) + eligible = np.isin(family, labels[counts >= 10]) + x, family, genus = x[eligible], family[eligible], genus[eligible] + result = { + "input_sha256": hashlib.sha256(a.input.read_bytes()).hexdigest(), + "shape": list(x.shape), + "excluded_rare_family_rows": int((~eligible).sum()), + "numpy": np.__version__, + "scipy": scipy.__version__, + "sklearn": sklearn.__version__, + "platform": platform.platform(), + "threads": 4, + "rows": [], + } + for seed in a.seeds: + tr, rest = train_test_split(np.arange(len(x)), test_size=0.3, random_state=seed, stratify=family) + va, te = train_test_split(rest, test_size=0.5, random_state=seed, stratify=family[rest]) + np.savez(a.output / f"split-{seed}.npz", train=tr, validation=va, test=te, eligible_original_rows=np.flatnonzero(eligible)) + original_nn = NearestNeighbors(n_neighbors=10).fit(x[tr]).kneighbors(x[te], return_distance=False) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area", "log_radial"]: + start = time.perf_counter() + model = Coordinates(kind).fit(x[tr]) + fit_s = time.perf_counter() - start + start = time.perf_counter() + ztr, zva, zte = [model.transform(x[idx]) for idx in [tr, va, te]] + transform_s = time.perf_counter() - start + row = { + "seed": seed, + "method": kind, + "fit_seconds": fit_s, + "transform_seconds_all": transform_s, + "heldout_roundtrip_max_abs": float(np.max(np.abs(model.inverse(zte) - x[te]))), + } + norms = np.linalg.norm(zte, axis=1) + row["radius_mean_sd"] = [float(norms.mean()), float(norms.std())] + # One scalar scaling lets the same regularization grid cover all charts. + scale = np.sqrt(np.mean(np.sum((ztr - ztr.mean(0)) ** 2, axis=1))) + features = [z / scale for z in [ztr, zva, zte]] + best = None + for alpha in [0.01, 0.1, 1, 10, 100]: + clf = RidgeClassifier(alpha=alpha).fit(features[0], family[tr]) + val = balanced_accuracy_score(family[va], clf.predict(features[1])) + if best is None or val > best[0]: + best = (val, alpha, clf) + row["ridge_family"] = scores(family[te], best[2].predict(features[2])) | {"alpha": best[1]} + gnb = GaussianNB().fit(features[0], family[tr]) + row["gaussian_nb_family"] = scores(family[te], gnb.predict(features[2])) + nn = NearestNeighbors(n_neighbors=10).fit(ztr).kneighbors(zte, return_distance=False) + row["original_neighbor_recall10"] = float(np.mean([len(set(a) & set(b)) / 10 for a, b in zip(nn, original_nn)])) + for level, labels in [("family", family), ("genus", genus)]: + covered = np.isin(labels[te], labels[tr]) + clf = KNeighborsClassifier(n_neighbors=5, weights="distance").fit(ztr, labels[tr]) + pred = clf.predict(zte) + row["knn_" + level] = scores(labels[te][covered], pred[covered]) | {"test_coverage": float(covered.mean())} + pca = PCA(n_components=128, svd_solver="randomized", random_state=seed).fit(ztr) + row["pca"] = {} + for dim in [2, 32, 128]: + ptr, pte = pca.transform(ztr)[:, :dim], pca.transform(zte)[:, :dim] + restored = model.inverse(pte @ pca.components_[:dim] + pca.mean_) + angles = np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))) + row["pca"][str(dim)] = { + "mean_reconstruction_degrees": float(angles.mean()), + "test_coordinate_variance_explained": float( + 1 - np.sum((zte - (pte @ pca.components_[:dim] + pca.mean_)) ** 2) / np.sum((zte - ztr.mean(0)) ** 2) + ), + } + if dim == 32: + km = MiniBatchKMeans(n_clusters=len(np.unique(family)), n_init=3, random_state=seed, batch_size=1024).fit(ptr) + row["pca"]["32"]["kmeans_family_ari"] = float(adjusted_rand_score(family[te], km.predict(pte))) + row["total_seconds"] = time.perf_counter() - start + fit_s + result["rows"].append(row) + (a.output / "results.json").write_text(json.dumps(result, indent=2)) + print( + seed, + kind, + "ridge", + row["ridge_family"], + "knn", + row["knn_genus"]["accuracy"], + "roundtrip", + row["heldout_roundtrip_max_abs"], + flush=True, + ) + print("Complete", a.output, flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/followup.py b/publication/experiments/prototype_linearization/followup.py new file mode 100644 index 0000000..d61a9d8 --- /dev/null +++ b/publication/experiments/prototype_linearization/followup.py @@ -0,0 +1,98 @@ +"""Bounded follow-up: matched dimensions, broader RBF widths, PNS at 128D.""" + +import argparse +import json +import time +from pathlib import Path + +import numpy as np +from advanced import PNS, evaluate +from benchmark import Coordinates, load, unit +from sklearn.decomposition import PCA +from sklearn.kernel_approximation import Nystroem +from sklearn.linear_model import Ridge +from threadpoolctl import threadpool_limits + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, g = load(a.input) + rows = [] + for seed in [42, 43, 44]: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x, family, genus = full[keep], f[keep], g[keep] + split = [s[k] for k in ["train", "validation", "test"]] + tr, va, te = split + + def run(name, fit, transform, inverse): + t = time.perf_counter() + obj = fit() + fit_s = time.perf_counter() - t + t = time.perf_counter() + features = [transform(obj, x[idx]) for idx in split] + transform_s = time.perf_counter() - t + row = {"method": name, "seed": seed, "fit_seconds": fit_s, "transform_seconds_all": transform_s} + row.update(evaluate(features, family, genus, split)) + restored = unit(inverse(obj, features[2])) + row["reconstruction_degrees"] = float(np.degrees(np.arccos(np.clip(np.sum(restored * x[te], axis=1), -1, 1))).mean()) + if isinstance(obj, dict) and "pns" in obj: + row["optimizer_stages"] = obj["pns"].optimization + row["reduced_sphere_roundtrip_max_abs"] = float(np.max(np.abs(obj["pns"].inverse(features[2]) - obj["sphere"](x[te])))) + assert row["reduced_sphere_roundtrip_max_abs"] < 1e-8 + timings = [] + for _ in range(31): + t = time.perf_counter() + transform(obj, x[te[:1]]) + timings.append(time.perf_counter() - t) + row["one_point_median_us"] = float(np.median(timings) * 1e6) + rows.append(row) + (a.output / "results.json").write_text(json.dumps(rows, indent=2)) + print(seed, name, row["ridge_family"], row["gaussian_nb_family"], "fit", fit_s, flush=True) + + for dim in [512]: + for whiten in [False, True]: + run( + f"pca{dim}" + ("_whiten" if whiten else ""), + lambda: PCA(n_components=dim, whiten=whiten, svd_solver="randomized", random_state=seed).fit(x[tr]), + lambda m, z: m.transform(z), + lambda m, z: m.inverse_transform(z), + ) + for gamma in [0.01, 0.1]: + + def fit_kernel(): + k = Nystroem(kernel="rbf", gamma=gamma, n_components=512, random_state=seed).fit(x[tr]) + back = Ridge(alpha=0.01).fit(k.transform(x[tr]), x[tr]) + return k, back + + run(f"nystrom512_gamma{gamma}", fit_kernel, lambda m, z: m[0].transform(z), lambda m, z: m[1].predict(z)) + + def fit_pns(): + chart = Coordinates("log_mean").fit(x[tr]) + basis = PCA(n_components=128, svd_solver="randomized", random_state=seed).fit(chart.rotate(x[tr])[:, 1:]).components_ + + def sphere(z): + log = chart.transform(z) @ basis.T + r = np.linalg.norm(log, axis=1) + return np.column_stack((np.cos(r), log * np.sinc(r[:, None] / np.pi))) + + small = sphere(x[tr]) + pns = PNS().fit(small) + return {"chart": chart, "basis": basis, "sphere": sphere, "pns": pns} + + def inverse_pns(m, z): + small = m["pns"].inverse(z) + return m["chart"].rotate(np.column_stack((small[:, 0], small[:, 1:] @ m["basis"]))) + + run("fast_pns128", fit_pns, lambda m, z: m["pns"].transform(m["sphere"](z)), inverse_pns) + print("Complete", flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/selection.py b/publication/experiments/prototype_linearization/selection.py new file mode 100644 index 0000000..585e069 --- /dev/null +++ b/publication/experiments/prototype_linearization/selection.py @@ -0,0 +1,78 @@ +"""Validation-selected PCA/Gaussian-NB dimension and chart operation timings.""" + +import argparse +import json +import platform +import time +from pathlib import Path + +import numpy as np +from benchmark import Coordinates, load, scores +from sklearn.decomposition import PCA +from sklearn.metrics import balanced_accuracy_score +from sklearn.naive_bayes import GaussianNB +from threadpoolctl import threadpool_limits + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--input", type=Path, required=True) + p.add_argument("--baseline", type=Path, required=True) + p.add_argument("--output", type=Path, required=True) + a = p.parse_args() + a.output.mkdir(parents=True, exist_ok=False) + full, f, _ = load(a.input) + result = {"rows": [], "timings": {}, "cpu": platform.processor()} + for seed in [42, 43, 44]: + s = np.load(a.baseline / f"split-{seed}.npz") + keep = s["eligible_original_rows"] + x, y = full[keep], f[keep] + tr, va, te = [s[k] for k in ["train", "validation", "test"]] + pca = PCA(n_components=None, svd_solver="covariance_eigh").fit(x[tr]) + ztr, zva, zte = [pca.transform(x[idx]) for idx in [tr, va, te]] + candidates = [] + best = None + for d in [32, 128, 256, 512, 768, 1024, 1280]: + clf = GaussianNB().fit(ztr[:, :d], y[tr]) + v = float(balanced_accuracy_score(y[va], clf.predict(zva[:, :d]))) + candidates.append({"dimensions": d, "validation_macro_recall": v}) + if best is None or v > best[0]: + best = (v, d, clf) + v, d, clf = best + row = {"seed": seed, "selected_dimensions": d, "validation_candidates": candidates, "test": scores(y[te], clf.predict(zte[:, :d]))} + result["rows"].append(row) + if seed == 42: + result["training_pca_variance"] = { + str(d): float(pca.explained_variance_ratio_[:d].sum()) for d in [2, 32, 128, 256, 512, 768, 1024, 1280] + } + result["family_count"] = len(np.unique(y)) + result["train_validation_test_sizes"] = [len(tr), len(va), len(te)] + result["training_mean_norm"] = float(np.linalg.norm(x[tr].mean(0))) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area", "log_radial"]: + t = time.perf_counter() + chart = Coordinates(kind).fit(x[tr]) + fit = time.perf_counter() - t + q = x[te[:1]] + z = chart.transform(q) + item = {"fit_seconds": fit} + for op, fn in [("insert", lambda: chart.transform(q)), ("inverse", lambda: chart.inverse(z))]: + times = [] + for _ in range(101): + t = time.perf_counter() + fn() + times.append(time.perf_counter() - t) + item[op + "_median_us"] = float(np.median(times) * 1e6) + if kind == "log_intrinsic": + c = np.clip(x[tr] @ chart.mu, -1, 1) + tail = x[tr] - c[:, None] * chart.mu + angle = np.arctan2(np.linalg.norm(tail, axis=1), c) + grad = (tail * (angle / np.maximum(np.linalg.norm(tail, axis=1), 1e-15))[:, None]).mean(0) + item["mean_log_norm_after_40_steps"] = float(np.linalg.norm(grad)) + result["timings"][kind] = item + (a.output / "results.json").write_text(json.dumps(result, indent=2)) + print(row, flush=True) + + +if __name__ == "__main__": + with threadpool_limits(limits=4): + main() diff --git a/publication/experiments/prototype_linearization/summarize.py b/publication/experiments/prototype_linearization/summarize.py new file mode 100644 index 0000000..54baf91 --- /dev/null +++ b/publication/experiments/prototype_linearization/summarize.py @@ -0,0 +1,98 @@ +"""Collect the four benchmark stages and render a small comparison plot.""" + +import argparse +import hashlib +import json +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import numpy as np + +p = argparse.ArgumentParser(description=__doc__) +p.add_argument("--study", type=Path, required=True) +a = p.parse_args() +base = json.loads((a.study / "baseline/results.json").read_text()) +rows = base["rows"] +for name in ["advanced", "followup"]: + rows += json.loads((a.study / name / "results.json").read_text()) +selection = json.loads((a.study / "selection/results.json").read_text()) +fields = { + "ridge_macro": lambda r: r["ridge_family"]["balanced_accuracy"], + "ridge_micro": lambda r: r["ridge_family"]["accuracy"], + "gnb_macro": lambda r: r["gaussian_nb_family"]["balanced_accuracy"], + "genus_knn_micro": lambda r: r["knn_genus"]["accuracy"], +} +summary = {} +for method in dict.fromkeys(r["method"] for r in rows): + rr = [r for r in rows if r["method"] == method] + assert len(rr) == 3, (method, len(rr)) + summary[method] = { + name: {"mean": float(np.mean([fn(r) for r in rr])), "sd": float(np.std([fn(r) for r in rr], ddof=1))} for name, fn in fields.items() + } + summary[method]["fit_seconds_mean"] = float(np.mean([r["fit_seconds"] for r in rr])) +summary["validation_selected_pca_gnb"] = { + "mean": float(np.mean([r["test"]["balanced_accuracy"] for r in selection["rows"]])), + "sd": float(np.std([r["test"]["balanced_accuracy"] for r in selection["rows"]], ddof=1)), + "dimensions": [r["selected_dimensions"] for r in selection["rows"]], +} +(a.study / "summary.json").write_text(json.dumps(summary, indent=2)) +header = ( + "| Representation | Linear family macro recall | Linear family micro accuracy | " + "Gaussian NB family macro recall | Genus 5-NN accuracy |\n|---|---:|---:|---:|---:|\n" +) +for name in [ + "ambient", + "log_mean", + "log_intrinsic", + "stereographic", + "equal_area", + "log_radial", + "pca128", + "pca512", + "pca1280_whiten", + "fast_pns32", + "fast_pns128", + "nystrom512_gamma0.01", +]: + r = summary[name] + header += "| " + name + " | " + " | ".join(f"{100 * r[k]['mean']:.2f} ± {100 * r[k]['sd']:.2f}" for k in fields) + " |\n" +(a.study / "table.md").write_text(header) +methods = ["ambient", "log_mean", "stereographic", "pca128", "pca512", "pca1280_whiten", "fast_pns128", "nystrom512_gamma0.01"] +labels = [ + "Original weights", + "Sphere log map", + "Stereographic", + "PCA 128", + "PCA 512", + "Full PCA whitening", + "Fast PNS 128", + "Nyström 512 (γ=.01)", +] +fig, axes = plt.subplots(1, 2, figsize=(12, 5), layout="constrained") +for ax, key, title in zip(axes, ["ridge_macro", "gnb_macro"], ["Linear family classifier", "Gaussian naive Bayes family classifier"]): + y = np.arange(len(methods)) + vals = [100 * summary[m][key]["mean"] for m in methods] + err = [100 * summary[m][key]["sd"] for m in methods] + ax.barh(y, vals, xerr=err, color="#237f8e", alpha=0.85) + ax.set_yticks(y, labels) + ax.invert_yaxis() + ax.set_xlim(0, 100) + ax.set_xlabel("Held-out macro recall (%)") + ax.set_title(title) + ax.grid(axis="x", alpha=0.2) +fig.suptitle( + "Production prototypes: coordinate usefulness depends on the downstream model\n" + "Three species splits; error bars show split SD, not confidence intervals", + fontsize=12, +) +fig.savefig(a.study / "comparison.png", dpi=160) +fig.savefig(a.study / "comparison.svg") +plt.close(fig) +with (a.study / "SHA256SUMS").open("w") as f: + for item in sorted(a.study.rglob("*")): + if item.is_file() and item.name != "SHA256SUMS" and "__pycache__" not in str(item): + f.write(hashlib.sha256(item.read_bytes()).hexdigest() + " " + str(item.relative_to(a.study)) + "\n") +print(header) diff --git a/publication/experiments/prototype_linearization/test_coordinates.py b/publication/experiments/prototype_linearization/test_coordinates.py new file mode 100644 index 0000000..711c6df --- /dev/null +++ b/publication/experiments/prototype_linearization/test_coordinates.py @@ -0,0 +1,36 @@ +"""Focused numerical checks for the research transforms, not package APIs.""" + +import numpy as np +from advanced import PNS +from benchmark import Coordinates, unit +from numpy.testing import assert_allclose + + +def test_chart_roundtrip_and_batch_insertion(): + rng = np.random.default_rng(7) + train, query = unit(rng.normal(size=(100, 9))), unit(rng.normal(size=(12, 9))) + for kind in ["ambient", "log_mean", "log_intrinsic", "stereographic", "equal_area"]: + model = Coordinates(kind).fit(train) + z = model.transform(query) + assert_allclose(model.inverse(z), query, atol=2e-12) + assert_allclose(model.transform(query[:1]), z[:1], atol=2e-12) + assert_allclose(model.transform(model.mu[None]), 0 if kind != "ambient" else model.mu[None], atol=2e-12) + + +def test_pns_known_small_circle_and_heldout_roundtrip(): + angle = np.linspace(-np.pi, np.pi, 80, endpoint=False) + radius = 0.4 + x = np.column_stack((np.full(len(angle), np.cos(radius)), np.sin(radius) * np.cos(angle), np.sin(radius) * np.sin(angle))) + model = PNS().fit(x) + assert_allclose(model.stages[0][1], radius, atol=1e-5) + q = unit(np.random.default_rng(4).normal(size=(20, 3))) + assert_allclose(model.inverse(model.transform(q)), q, atol=1e-10) + + +def test_truncation_is_lossy_and_radial_endpoints_are_not_invertible(): + rng = np.random.default_rng(4) + x = unit(rng.normal(size=(100, 9))) + model = Coordinates("log_radial").fit(x) + q = model.mu[None] + # The clamped empirical radial mapping cannot encode unseen endpoint radii. + assert np.linalg.norm(model.inverse(model.transform(q)) - q) > 1e-3 From 45f9ee8c81055a1b6c74241df8f8dd9942dbf6a8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 12:48:59 +0200 Subject: [PATCH 004/221] docs: record deferred prototype viewer completion --- docs/roadmap.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/roadmap.md b/docs/roadmap.md index 374ae94..ae511b8 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -274,3 +274,41 @@ Follow-up from candidate-filter inference validation: `classification_module` caches an empty attribute name when passed a bare classifier head, causing a subsequent lookup to fail. Normal built backbone models are unaffected. Cover bare-head lookup separately rather than expanding the class-list CLI change. + +## Deferred portable prototype viewer completion + +The portable-viewer goal was paused for the prototype-coordinate research. The +[bounded study](prototype-coordinate-study.md) is now recorded; viewer completion +remains deferred. Resume the existing implementation; do not restart features already +present in `feature/prototype-browser-inference` (`b174426`). The implementation +plan and acceptance matrix currently live in that branch at +[`docs/prototype-explorer-implementation.md`](https://github.com/asgersvenning/mini_trainer/blob/b174426/docs/prototype-explorer-implementation.md), +with recorded qualification in `dev/prototype_space/portable-qualification.md`. +The versioned `global-lepi-viewer-20260915-rc2` candidate has been published for +manual inspection; candidate publication itself is no longer an outstanding task. + +Remaining TODOs: + +- [ ] Obtain and incorporate human desktop/mobile layout review of the live + candidate. Confirm physical-phone pinch zoom, camera capture, EXIF orientation, + large-image handling and actionable unsupported-format errors. Existing browser + checks are not a substitute for physical-device acceptance. +- [ ] Finish review and integration of PR #3 against the then-current master; + resolve review findings and validate only the affected combined behavior. +- [ ] Reconcile the implementation-plan status and qualification record with the + delivered candidate, actual review outcomes and any externally blocked checks. + Publish a new versioned candidate only if review requires changes; preserve the + original public production release. +- [ ] Preserve the single model-scoped GBIF setting, shared client-side GBIF + names/photos, attributed prediction thumbnails and Explore/Predict/Settings + organization. These are implemented on the feature branch, but their acceptance + and integration remain part of completion. +- [ ] Preserve class identity/order, numerical behavior, saved-view compatibility + and fixed-map t-SNE query placement through integration. Keep static hosting + independent of a Python/proxy taxonomy service. + +Use the existing architecture unless a framework has a demonstrated usability or +maintenance benefit with an explained migration cost. This deferred increment +must not change training/inference semantics or introduce new geometry. Broader +browser support and more complete cached taxonomy/media remain separate roadmap +work, not additional completion gates for this increment. From 9d92a9780e2e235cadcf7cc0d8977541ea8f33cb Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 12:55:05 +0200 Subject: [PATCH 005/221] docs: plan portable UCloud model release and MAMBO migration --- docs/roadmap.md | 7 + docs/ucloud-model-release-roadmap.md | 328 +++++++++++++++++++++++++++ 2 files changed, 335 insertions(+) create mode 100644 docs/ucloud-model-release-roadmap.md diff --git a/docs/roadmap.md b/docs/roadmap.md index ae511b8..9f42001 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -4,6 +4,13 @@ The quantization branch has been merged into master. Its [execution roadmap](quantization-roadmap.md) remains the specialist backlog; fully quantized training performance is not established by that merge. +The next delivery priority is releasing the already-trained September UCloud +model. Follow the [model release roadmap](ucloud-model-release-roadmap.md): freeze +candidate and prior-release identities, deliver an offline portable FP32 bundle, +preserve MAMBO consumer compatibility, qualify deployment profiles, then stage and +review publication. Start with its bounded increments A and B. This does not +require another training run or completion of the optional accelerator matrix. + The completed four-GPU production campaign is assessed in the [training workflow post-mortem and next-run plan](training-workflow-postmortem.md). For the next training run, first deliver its bounded P0 workflow slice: durable diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md new file mode 100644 index 0000000..2125f35 --- /dev/null +++ b/docs/ucloud-model-release-roadmap.md @@ -0,0 +1,328 @@ +# UCloud model release roadmap + +Status: proposed development roadmap, 2026-09-23. This document does not publish +artifacts or claim deployment qualification. Target: the completed 10–11 September +2026 UCloud model, not a new training campaign. + +## Release objective and scope + +Ship a versioned successor to the public MAMBO deployment release that is easy to +install, embed and operate without a GPU, internet access, administrator rights or +a writable installation directory. Preserve a clear migration path for existing +Python and CLI users. Add acceleration only through separately qualified profiles. + +The first release slice is an immutable FP32 ONNX deployment bundle, a small CPU +inference interface, legacy-interface compatibility, and measured release evidence. +Keep original PyTorch weights available for established workflows. Training resume +state and the large research archive are separate optional downloads. Hosting on +Hugging Face, browser integration and additional accelerators build on that same +bundle; they must not each invent preprocessing or taxonomy conventions. + +This release work takes precedence over the next-training-run improvements in the +[training post-mortem](training-workflow-postmortem.md). Retraining, loader redesign, +EMA repair, full INT8 training and prototype-coordinate research are not release +prerequisites. The [portable viewer work](roadmap.md#deferred-portable-prototype-viewer-completion) +remains a separate integration track; reuse its implementation where relevant. + +## Verified starting point + +The public GitHub releases API was read on 2026-09-23. Local tagged source was +inspected alongside it; a local tag alone does not establish a published release. + +| Published release | Established interface and behavior | Alignment required | +| --- | --- | --- | +| [MAMBO_v2](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v2), 17 April 2026 | Latest published release; BioCLIP-2 model; `mambo_predict`; `mini_trainer.deploy.Predictor`; `full`, `europe`, `north_europe` aliases; default region Europe; weights downloaded from ERDA | Primary migration baseline. Preserve old version pins, document architecture and vocabulary changes, and explicitly decide the successor's default | +| [MAMBO_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v0), 15 April 2026, prerelease | Earlier MAMBO deployment wrapper and northern-European model emphasis | Include older pinned consumers in the migration guide | +| [UKCEH_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/UKCEH_v0), 3 February 2026 | Northern-European EfficientNetV2-M model; `python predict.py`; automatic model download | Document migration from script invocation and its original regional vocabulary | + +None of these release records has attached binary assets. The MAMBO_v2 source +resolves weights through an ERDA URL template and an implicit cache. Its README +still points installation commands at MAMBO_v0; correct this in the new release's +instructions. MAMBO_v1 exists as a local tag but was absent from the public release +listing. Do not treat it as an independently published baseline without evidence. + +MAMBO_v2's `Predictor` defaults to CUDA, batches all supplied images together, and +supports class masks and embeddings. Current master has `mt_predict`/`mt_hpredict` +and the generic exporter, but no `mini_trainer.deploy` module or `mambo_predict` +entry point. Restoring compatibility therefore requires implementation and tests, +not just substituting a new weight URL. Audit exact return values and CSV schemas +from the tagged code before promising drop-in compatibility. + +The [campaign record](training-workflow-postmortem.md#outcomes-and-strength-of-evidence) +reports EfficientNetV2-S, a normalized hierarchical head, 384-pixel inputs, 30 epochs, +and floating training on four B200 GPUs. It reports completed evaluation and +verified archival checksums, but does not contain the final immutable artifact +identities. This planning pass has not independently opened the training archive. +FP32 ONNX parity was synthetic; PTQ loadability did not establish retained accuracy +or integer execution. The production checkpoint is not a native INT8 checkpoint. + +## 1. Freeze identity and the compatibility contract — P0 + +Produce a compact release inventory before changing inference behavior: + +- Locate the retained archive, verify its checksum, and identify the selected + inference checkpoint, training source revision, package/harness revisions, + resolved configuration, taxonomy, dataset split identities and evaluation files. + Confirm that the reported best epoch and the selected weights agree. Record + hashes and sizes, including every ONNX external tensor file. +- Retrieve the actual previous public weights and hash them. Record the baseline + as release tag plus weight hash: a historical URL alone is not an immutable model + identity. Keep original files and releases available for rollback. +- Diff species/genus/family IDs, output order, parent mappings, regional masks, + preprocessing and score semantics. Report additions, removals and remappings; + never align arrays by position across models. Do not assume the roughly similar + class counts mean identical vocabularies. +- Record the old wrapper's constructor/call arguments, accepted inputs, return + structure, rank/top-k behavior, embedding interface, errors and CLI/CSV fields. + Define preserved behavior and explicit migration exceptions in a compatibility + table with tiny fixtures before implementing adapters. +- Propose `MAMBO_v3` as the next model-release name, subject to checking tag + availability at publication. Give the package version, model ID, artifact + revision and manifest schema separate identities. An artifact repair may create + a new revision; it must not replace bytes behind a published version. + +Retain Europe as the proposed default for the successor's MAMBO compatibility +interface, matching MAMBO_v2; make `full` and `north_europe` explicit choices. +Version aliases within a release. Do not silently redirect old pinned consumers +to new weights. For the new deployment API, prefer explicit model-bundle selection. +Store regional lists with provenance and hashes, and disclose excluded true labels. + +**Done when:** immutable candidate and baseline inventories exist, compatibility +fixtures are specified, and release identity/default decisions are recorded. Missing +archive or weight access blocks certification, not drafting the remainder of the plan. + +## 2. Build a self-contained portable bundle — P0 + +Extend [the existing ONNX exporter](onnx.md) and its manifest rather than creating a +second exporter. A release-level manifest can reference its unchanged export +manifest and add deployment metadata with an explicit schema version. + +Proposed deployment contents: + +```text +release.json # identity, hashes, sizes, profiles, compatibility +model/model.onnx # plus ALL referenced external tensors +model/manifest.json # existing export metadata and numerical verification +preprocessing.json # complete machine-readable input recipe +classes.json # ordered stable IDs, ranks and parent mappings +regions/ # versioned candidate lists with provenance +conformance/ # redistributable inputs, tensors, expected outputs +examples/ # small Python and non-Python usage examples +MODEL_CARD.md +LICENSES/ # weights, code, runtime and bundled data notices +``` + +The bundle must describe tensor names/layout/dtype/range, supported batch sizes, +fixed spatial size, graph opset, output structure and actual score meaning. Specify +whether scores are logits, normalized values or probabilities per rank; never add +softmax by guesswork. Include threshold/abstention policy and candidate-filter order. +A bare `repr(preprocess)` or `requires_configuration: true` is insufficient for a +release claiming image-level interoperability. + +Specify and test decode, RGB conversion, alpha/grayscale handling, EXIF orientation, +resize geometry, interpolation, antialiasing, crop, scaling and normalization. +The current repository reader disables EXIF orientation; first recover the actual +campaign pipeline. Any changed orientation policy is an explicit versioned behavior +change, not an unnoticed browser/Python discrepancy. JPEG decoders and resize +implementations may differ: retain intermediate tensors and justified tolerances +rather than promising universal pixel identity. + +Keep local IDs and taxonomy names sufficient for prediction. GBIF name/photo lookup +is optional enrichment and must not be a hidden inference dependency. Record its +provenance separately from fixed model class identity. + +Use ONNX as the initial deployment path that does not require Python checkpoint +unpickling or model constructor downloads. Keep weights-only PyTorch loading for +compatible legacy workflows; do not enable unrestricted pickle loading as an +automatic fallback. Evaluate safetensors plus explicit construction metadata only +if consumers need a portable tensor checkpoint; that is not already implemented. + +**Done when:** the complete directory can be copied, relocated, checked for integrity +and used offline by a clean CPU process without the training repository, PyTorch, +backend downloads or a live taxonomy service. + +## 3. Deliver small integration interfaces — P0 + +Build on existing prediction, class-filtering and result-collection boundaries. +Keep deployment dependencies optional; do not force the training stack into an +ONNX-only consumer. Decide the smallest package boundary after inspecting those +imports, and validate its installed distribution outside the checkout. + +- Provide a documented Python image-to-prediction example using ONNX Runtime and + an explicit decoder, plus a tensor-in/tensor-out example. Add one non-Python + consumer, preferably JavaScript from the existing viewer work, using identical + conformance data. Additional language SDKs can follow demonstrated demand. +- Restore a thin `mini_trainer.deploy.Predictor`/`mambo_predict` compatibility layer + or ship an explicitly versioned migration package. Preserve documented result + contracts, masking and embedding access where promised; embedding dimensions + and coordinates from different backbones are not interchangeable. +- Bound batching and memory. Support explicit batch/thread limits, local bundle + paths and clear per-input error handling. Separate library results from logging; + expose model revision, active vocabulary and selected runtime in provenance. +- Make device selection predictable: portable API defaults to CPU or a documented + capability-based mode; explicit accelerator requests fail clearly when unmet. + Allow CPU fallback only under a declared policy and report its use. Do not + silently mutate existing core CLI defaults during this release work. +- Supply copy-pastable pinned installation and prediction commands for POSIX shells + and PowerShell. Test paths containing spaces and Unicode. Avoid requiring a + repository clone, shell bootstrap script or administrator install for inference. + +**Done when:** an existing MAMBO consumer has a tested migration example and a new +consumer can run one image, a bounded batch and an empty/error case from an installed +package or standalone example. Core package imports remain independent of optional +runtime integrations. + +## 4. Qualify deployment profiles and restricted operation — P0/P1 + +These are proposed test targets, not current support claims. Record exact hardware, +OS, architecture, runtime/provider versions, driver where applicable and evidence +for every claimed profile. “ONNX compatible” is not a qualification result. + +| Priority/profile | Initial target | Required evidence / fallback | +| --- | --- | --- | +| P0 portable CPU | Linux x86-64 and Windows x64, CPU FP32 | Clean install, real-image conformance, bounded threads/RAM, offline/read-only operation; record tested CPU instruction requirements | +| P0 desktop ARM | macOS arm64, CPU FP32 | Native hardware check with the same fixtures and resource measurements; do not infer support from Linux x86 | +| P1 edge ARM | Linux aarch64, CPU | Actual target RAM/latency and runtime wheel availability; reduced batch profile; exclude untested devices from support claims | +| P1 NVIDIA | Linux/Windows CUDA on selected supported driver/runtime combinations | Operator placement and transfer profiling, quality parity, cold/warm latency and VRAM; explicit CPU fallback policy | +| P1 browser | Existing static viewer, desktop Chromium first; then Safari/Firefox and physical phones | Self-hosted JS/WASM/model assets, fixed preprocessing, memory/startup, single-thread fallback; WebGPU separately qualified | +| P2 specialized accelerators | TensorRT, CoreML, OpenVINO, DirectML/WebNN or other requested provider | Add one at a time only for a consumer need and measured benefit; retain the portable baseline | + +The proposed first GA scope is the three P0 desktop/CPU targets. If hardware access +is unavailable, either complete qualification before claiming that target or narrow +the published support matrix explicitly. Experimental profiles do not hold up a +correctly scoped portable release. + +ONNX Runtime offers multiple [execution providers](https://onnxruntime.ai/docs/execution-providers/), +but availability and operator coverage must be checked against the pinned runtime. +Measure actual placement; selecting a provider name does not prove the whole graph +runs there. Build ordinary TensorRT engines for a declared target configuration and +retain ONNX as the interchange artifact; [TensorRT describes these as hardware-specific +engines](https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/quick-start-guide.html). +Any compatibility mode needs its own evidence and runtime constraints. + +Treat restrictions as independent test cases, not just another operating system: + +| Restriction | Required behavior and test | +| --- | --- | +| No outbound network / air gap | Explicit prefetch or manual transfer; verify locally before load; no automatic model, GBIF, font, CDN or telemetry requests; test with egress disabled | +| No root / no containers / no compiler | Prebuilt runtime installation in a user environment; offline dependency set for each claimed OS/architecture; container is an optional delivery format | +| Read-only installation and weights | Inference reads only; explicit writable cache/temp/output paths when needed; operation with caching disabled; never require writes beside weights | +| Proxy / internal mirror | Configurable approved artifact source and CA trust; serial-download fallback when HEAD/range requests fail; retain TLS verification | +| Interrupted or concurrent download | Hash and size verification, bounded retries, atomic cache publication and locking; incomplete files cannot count as valid cached models | +| No subprocesses / restricted threads | In-process path and explicit single-thread/zero-worker settings; resource limits reported rather than guessed from host core count | +| Restricted browser | Same-origin runtime assets and documented minimal CSP; test without cross-origin isolation, blocked GPU and denied storage; actionable unsupported-policy error | +| Integrity and supply-chain policy | Pinned dependencies, license inventory/SBOM, release manifest checksums and authenticated provenance; keep credentials/raw user images out of artifacts and logs | + +For browsers, WASM multithreading needs cross-origin isolation; single-thread mode +is available. The proxy worker uses Blob and can conflict with restrictive CSP; +qualify an external same-origin worker where needed. JS and WASM files must come +from the same build. See [runtime configuration](https://onnxruntime.ai/docs/tutorials/web/env-flags-and-session-options.html). +WebGPU requires a secure context, and deployment must include the required runtime +assets; see [web deployment](https://onnxruntime.ai/docs/tutorials/web/deploy.html). +Do not promise local `file://` execution. A policy forbidding WASM entirely cannot +be fixed by a WASM fallback: offer the native client or an explicitly chosen service. +Do not upload images to a service as an automatic fallback. + +Checksums detect corruption but do not authenticate a publisher. Define a trusted +release channel and, where required, signed provenance verifiable with offline +trust material. Review model/runtime inputs and archive paths before extraction; +keep ONNX external-data references inside the verified bundle. These are concrete +release-loader requirements, not a claim that any model format is risk-free. + +## 5. Establish quality and efficiency gates — P0, then P1 variants + +Use three distinct comparisons: previous public model versus the new model; the +selected new PyTorch checkpoint versus portable FP32 ONNX; portable FP32 versus +any optimized variant. Do not confuse export parity with model improvement. + +1. Retain supplied train/validation/test assignments and taxonomy. Freeze sample + identities and hashes. Recover the existing full test/expert predictions where + valid rather than rerunning expensive work without a question to answer. +2. Compare old/new models on matching images using stable taxon IDs. Report the + common-vocabulary slice and the full consumer workload, with excluded/unseen + labels visible. Stratify by rank, region and rare classes. Use the pinned + [mini_metrics workflow](../dev/ucloud/evaluate-results.md); preserve metric + definitions and distinguish macro recall from other “macro accuracy” measures. +3. Run raw-image conformance through decoding, preprocessing, graph and decoding of + outputs, including batches 1, 2, 4 and a declared upper bound, grayscale/alpha, + EXIF, unusual aspect ratios, and malformed/oversized inputs. Use redistributable + fixtures; keep private evaluation images outside the public bundle. +4. Predeclare per-profile score tolerances, top-1/top-k agreement, per-rank quality + limits, coverage and resource budgets before accepting a candidate. Record + max/percentile errors, near-tie changes, nonfinite outputs and threshold crossings. + The campaign used `rtol=1e-4, atol=1e-4` for synthetic FP32 parity; do not silently + replace exporter defaults or treat that result as end-to-end qualification. +5. Fit thresholds/calibration on suitable validation data, then freeze for test. + Previously optimized test thresholds remain exploratory. Regional filtering + changes scores, so global thresholds are not automatically transferable. +6. Measure download/bundle size, session creation, first image, warm p50/p95 latency, + throughput at stated batch/concurrency, peak RSS/VRAM and thread count. Use a + bounded representative workload on each target; compare on the same device. + +The expert-set result in the campaign record (57.59% species micro accuracy across +all labels versus 66.74% known-only) must remain visible in the model card. Strong +in-domain scores do not establish universal field accuracy or open-set rejection. +Audit overlap/leakage and dataset provenance before claiming improvement over older +releases; mark gaps explicitly when historical training identities are unavailable. + +FP16 and PTQ are optional named derivatives with their own hashes, recipe, quality +report and qualified profiles. The existing 128-image PTQ artifact is a candidate, +not the default. Quantization must earn inclusion through retained quality and a +measured latency/memory benefit; no requirement to ship INT8 merely because it exists. + +**Done when:** a release report records pass/fail/untested per gate and profile, +with thresholds and evidence attached. Numerical or resource failures are resolved +or the affected profile is excluded; no silent widening of tolerances. + +## 6. Package, stage and promote — P0 + +Keep the GitHub release as the primary discovery and migration entry point, +consistent with previous releases. Inventory artifact sizes before choosing GitHub +assets versus an immutable ERDA/object-store location; publish verified URLs and +hashes in either case. A Hugging Face mirror is useful for discoverability, but +must contain the same identified artifacts and must not become an inference-time +requirement. Follow its [model-card metadata format](https://huggingface.co/docs/hub/model-cards) +if using the Hub; hosting is separate from deploying an inference service. + +Publish separate portable runtime, optional PyTorch inference, evaluation evidence +and training-resume archives. Include license and redistribution review for the +weights, backbone, runtime, taxonomy and example images; do not infer a weight/data +license from the repository's code license. Preserve evaluation provenance without +shipping private paths, access tokens or the full 23.71-GiB campaign directory. + +Stage a prerelease with immutable versioned artifact names, migration guide, model +card, measured support matrix, known limitations, checksums/provenance and tested +installation commands. Download it as a consumer would, verify bytes, install in +clean target environments, and exercise offline prediction. Reuse unchanged +qualification evidence; repeat only packaging/readback and affected checks. + +Before public promotion, present the concrete candidate, compatibility changes, +quality comparison, supported targets and rollback instructions for release review. +Promotion changes only the declared release/default pointers after that review; +retain the old model and pinned installation path. Never overwrite MAMBO_v2 or the +existing public viewer. A later rollout problem should be recoverable by selecting +the previous model revision without changing the consumer's data or environment. + +**Done when:** published assets can be retrieved and verified, documented examples +run against them, the stable pointer identifies the reviewed candidate, and rollback +has been exercised. Release notes distinguish model changes from package/API changes. + +## Bounded implementation sequence + +| Increment | Concrete deliverable | Dependency / completion gate | +| --- | --- | --- | +| A — identity and migration | Candidate/baseline inventory; vocabulary and API diff; release/default decisions | Archive and historical weight access; section 1 | +| B — portable vertical slice | FP32 bundle, executable preprocessing, tiny CPU client and real-image fixtures | A; relocated offline inference in a clean Linux environment | +| C — consumer compatibility | MAMBO adapter, bounded batches, explicit cache/download policy, pinned installs | B; tagged-interface fixtures and clean installed-package checks | +| D — release qualification | Windows/macOS CPU checks, restriction matrix, old/new quality report and frozen gates | B/C; publish only evidenced support and quality claims | +| E — staged release | Versioned prerelease, readback, model card, migration and rollback; promotion review | A–D; concrete release checklist and evidence | +| F — optional acceleration | One selected GPU/browser/quantized profile at a time | Portable baseline; demonstrated demand and quality/resource benefit | + +Start with **A and B**. They resolve the main uncertainty—exactly which bytes and +input/output contract are being released—and produce a reviewable usable artifact. +The next-training-run orchestration plan is not on this release's critical path. + +Open decisions to resolve during A: retained archive location and checksum; exact +previous weight identities; target consumer examples; final release/package versions; +artifact host; numerical/quality/resource budgets; and access to Windows/macOS target +machines. This roadmap proposes defaults where possible but does not invent evidence. From b427483e26cc61a620b5fa2979c3529c320593a8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:19:57 +0200 Subject: [PATCH 006/221] docs: ground release roadmap in published production artifacts --- docs/ucloud-model-release-roadmap.md | 121 ++++++++++++++++++++++----- 1 file changed, 101 insertions(+), 20 deletions(-) diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 2125f35..19ed475 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -52,17 +52,94 @@ The [campaign record](training-workflow-postmortem.md#outcomes-and-strength-of-e reports EfficientNetV2-S, a normalized hierarchical head, 384-pixel inputs, 30 epochs, and floating training on four B200 GPUs. It reports completed evaluation and verified archival checksums, but does not contain the final immutable artifact -identities. This planning pass has not independently opened the training archive. -FP32 ONNX parity was synthetic; PTQ loadability did not establish retained accuracy -or integer execution. The production checkpoint is not a native INT8 checkpoint. +identities. The feature-branch follow-up below identifies the public distribution +and adds limited real-image evidence. The original FP32 ONNX parity was synthetic; +PTQ loadability did not establish retained accuracy or integer execution. The +production checkpoint is not a native INT8 checkpoint. + +### Located production artifacts and existing browser work + +Follow-up inspection on 2026-09-23 used `feature/prototype-browser-inference` at +`b174426a22e42618424fcb0345610ede4a415d01`, without switching or modifying its +worktree. Its [release integration record](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/docs/production-release-integration.md) +identifies an already-published production distribution. This release roadmap is +therefore about consolidating and qualifying a successor consumer release, not +locating or publishing those original files for the first time. + +Public root: [global-lepi-production-release-20260911T150236Z](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/index.html). +Paths below are relative to that directory: + +| Artifact | Identity / role | +| --- | --- | +| `models/pytorch/best.pt` | Final selected checkpoint; SHA-256 `174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a` | +| `models/onnx-fp32/model.onnx` | Original prediction graph; SHA-256 `aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d` | +| `models/onnx-fp32/model.onnx.data` | External tensors; SHA-256 `9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e` | +| `models/onnx-ptq/` | Experimental PTQ graph, external tensors and calibration report; qualification remains open | +| `training/`, `evaluation/`, `export/` | Retained configuration, logs, resume state, predictions and export/calibration evidence | +| `provenance.json`, `SHA256SUMS` | Packaging inventory and original file integrity records | +| `viewer/browser-model/model.onnx` | Separate prediction-plus-embedding graph; SHA-256 `70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44` | +| `viewer/verification.json`, `viewer/SHA256SUMS` | Browser verification and separate viewer integrity scope | + +The source record reports 1,224 original files totaling 25,455,849,324 bytes, +verified ZIP/internal checksums, remote size inventory and selected binary readback. +This follow-up retrieved the public index, README, provenance, original checksum +list, FP32 manifest, browser manifests and verification report. README, provenance +and FP32 manifest bytes matched their original checksum entries. The large weights, +full archive and browser execution were **not** downloaded/reverified in this pass; +the binary hashes above are recorded identities, not fresh binary hash checks. + +The FP32 manifest records opset 18, float32 NCHW input `[batch, 3, 384, 384]`, and +ordered outputs of 12,632 species, 4,476 genera and 104 families. Packaging provenance +records checkout `52954edae5dae31a62ecb639533e6f8573d57055` and mini-trainer `0.1.1`, +but explicitly warns these are packaging-time identities, not necessarily training +identities. Recover the latter from retained logs rather than copying this commit. +Earlier epoch-4/epoch-26 explorer checkpoints are not the release checkpoint. + +The [separate RC2 browser manifest](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-viewer-20260915-rc2/browser-model/manifest.json) +references the same final checkpoint, graph and tensor hashes as the production +browser bundle. UI publication and model release identity remain separate. +Reuse these implemented branch components after review/integration: + +| Existing component | Reuse and remaining boundary | +| --- | --- | +| `mt_export --include-embeddings`, export tests | Opt-in actual prediction outputs plus 1,280-dimensional preclassification embedding; preserve default export behavior and head restrictions | +| `mini_trainer/visualization/prototype_space/browser.py`, `tests/utils/test_browser_bundle.py` | Atomic packaging, checked source hashes/class order, external tensors, pinned ONNX Runtime Web 1.24.3 assets and license; adapt metadata instead of inventing another exporter | +| Browser inference worker and preprocessing | Single-thread CPU WASM and explicit `nearest-square-uint8-bilinear-center-imagenet-v1` recipe, size 384/resize 438; bounded existing contract, not arbitrary transforms | +| `check_inference.mjs`, `check_mobile.mjs`, `check_portable.mjs` | Existing numerical/image, orientation/transparency, touch and static-host checks; broaden evidence only for affected behavior and newly claimed targets | +| Shared GBIF client and packaged names | Optional network enrichment, IDs remain usable offline; packaged names are partial and remote photos are not offline assets | + +The public [browser verification report](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/verification.json) +records one real-image fixture: identical-input prediction max error about +`1.72e-5`, embedding error `1.80e-7`; end-to-end image prediction error about +`0.00552`, embedding error `0.000250`, with top predictions matching. This is useful +existing evidence, **not** strict end-to-end equality or broad accuracy acceptance. +Preserve that distinction when setting gates; do not restart browser inference as +if absent, or apply its evidence to the original prediction-only graph untested. + +The branch's newer image adapter applies EXIF rotation/mirroring and white alpha +compositing; the core reader disables EXIF orientation. Reconcile and version these +policies before claiming one shared image contract. The historical recipe name alone +does not encode this later adapter behavior. Also retain the actual hosting lesson: +ERDA previously lacked `.mjs`/`.wasm` MIME declarations and cross-origin permission; +the verified same-origin deployment uses an unchanged runtime module renamed `.js` +and explicit runtime paths. Current header behavior needs a targeted recheck before +new hosting claims. Model/runtime assets contain executable code; authoring hash +checks do not imply that the current browser worker validates every fetch. + +The branch's [qualification record](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/dev/prototype_space/portable-qualification.md) +already reports focused Python/browser and installed-wheel checks. Integration, +physical-device review, broader browsers/providers and complete offline installation +remain distinct work. Review/reuse the branch export and deployment changes for A/B; +do not require completion of all explorer UI or global-analysis milestones. ## 1. Freeze identity and the compatibility contract — P0 Produce a compact release inventory before changing inference behavior: -- Locate the retained archive, verify its checksum, and identify the selected - inference checkpoint, training source revision, package/harness revisions, - resolved configuration, taxonomy, dataset split identities and evaluation files. +- Start from the identified public distribution above; retrieve and verify the + required model files against its checksums. Complete the training source and + package/harness revision audit, and inventory the resolved configuration, + taxonomy, dataset split identities and evaluation files. Confirm that the reported best epoch and the selected weights agree. Record hashes and sizes, including every ONNX external tensor file. - Retrieve the actual previous public weights and hash them. Record the baseline @@ -88,14 +165,17 @@ to new weights. For the new deployment API, prefer explicit model-bundle selecti Store regional lists with provenance and hashes, and disclose excluded true labels. **Done when:** immutable candidate and baseline inventories exist, compatibility -fixtures are specified, and release identity/default decisions are recorded. Missing -archive or weight access blocks certification, not drafting the remainder of the plan. +fixtures are specified, and release identity/default decisions are recorded. The +public artifact location and candidate hash are now known; remaining binary +verification and historical-baseline access still gate certification. ## 2. Build a self-contained portable bundle — P0 -Extend [the existing ONNX exporter](onnx.md) and its manifest rather than creating a -second exporter. A release-level manifest can reference its unchanged export -manifest and add deployment metadata with an explicit schema version. +Reuse the existing public FP32 artifacts where unchanged, and review/integrate the +feature branch's export and browser packaging changes. Extend [the existing ONNX +exporter](onnx.md) and its manifest rather than creating a second exporter. A +release-level manifest can reference its unchanged export manifest and add +deployment metadata with an explicit schema version. Proposed deployment contents: @@ -150,8 +230,8 @@ imports, and validate its installed distribution outside the checkout. - Provide a documented Python image-to-prediction example using ONNX Runtime and an explicit decoder, plus a tensor-in/tensor-out example. Add one non-Python - consumer, preferably JavaScript from the existing viewer work, using identical - conformance data. Additional language SDKs can follow demonstrated demand. + consumer by reusing the existing JavaScript viewer inference, using identical + conformance data and an explicitly versioned image adapter. Additional language SDKs can follow demonstrated demand. - Restore a thin `mini_trainer.deploy.Predictor`/`mambo_predict` compatibility layer or ship an explicitly versioned migration package. Preserve documented result contracts, masking and embedding access where promised; embedding dimensions @@ -311,18 +391,19 @@ has been exercised. Release notes distinguish model changes from package/API cha | Increment | Concrete deliverable | Dependency / completion gate | | --- | --- | --- | -| A — identity and migration | Candidate/baseline inventory; vocabulary and API diff; release/default decisions | Archive and historical weight access; section 1 | -| B — portable vertical slice | FP32 bundle, executable preprocessing, tiny CPU client and real-image fixtures | A; relocated offline inference in a clean Linux environment | +| A — identity and migration | Complete known candidate inventory and baseline retrieval; vocabulary and API diff; release/default decisions | Archive and historical weight access; section 1 | +| B — portable vertical slice | Reuse FP32/browser artifacts and integrate relevant branch code; reconcile preprocessing; tiny CPU client and real-image fixtures | A; relocated offline inference in a clean Linux environment | | C — consumer compatibility | MAMBO adapter, bounded batches, explicit cache/download policy, pinned installs | B; tagged-interface fixtures and clean installed-package checks | | D — release qualification | Windows/macOS CPU checks, restriction matrix, old/new quality report and frozen gates | B/C; publish only evidenced support and quality claims | | E — staged release | Versioned prerelease, readback, model card, migration and rollback; promotion review | A–D; concrete release checklist and evidence | | F — optional acceleration | One selected GPU/browser/quantized profile at a time | Portable baseline; demonstrated demand and quality/resource benefit | -Start with **A and B**. They resolve the main uncertainty—exactly which bytes and -input/output contract are being released—and produce a reviewable usable artifact. +Start with **A and B**. Verify the identified model bytes, finish the migration +contract and reuse the delivered export/browser work to produce a small, reviewable +consumer bundle. The next-training-run orchestration plan is not on this release's critical path. -Open decisions to resolve during A: retained archive location and checksum; exact -previous weight identities; target consumer examples; final release/package versions; -artifact host; numerical/quality/resource budgets; and access to Windows/macOS target +Open work during A: verify the identified candidate binaries; recover exact training +revision and previous weight identities; choose target consumer examples, final +release/package versions and successor artifact hosting; set numerical/quality/resource budgets; and access to Windows/macOS target machines. This roadmap proposes defaults where possible but does not invent evidence. From 1d1eb3a508bb66081a7890aac6ba7e8e21011692 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:37:57 +0200 Subject: [PATCH 007/221] docs: focus release on MAMBO compatibility and paired inference qualification --- docs/roadmap.md | 10 +- docs/ucloud-model-release-roadmap.md | 388 ++++++++++++++++++--------- 2 files changed, 273 insertions(+), 125 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 9f42001..93eb899 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -6,10 +6,12 @@ fully quantized training performance is not established by that merge. The next delivery priority is releasing the already-trained September UCloud model. Follow the [model release roadmap](ucloud-model-release-roadmap.md): freeze -candidate and prior-release identities, deliver an offline portable FP32 bundle, -preserve MAMBO consumer compatibility, qualify deployment profiles, then stage and -review publication. Start with its bounded increments A and B. This does not -require another training run or completion of the optional accelerator matrix. +candidate and prior-release identities, preserve MAMBO_v2 compatibility across +native PyTorch and standard ONNX, support presets/custom class lists and predictions +with/without embeddings, then compare in-domain/Flemming quality and laptop CPU/GPU +speed before staging publication. Start with its bounded increments A and B. +Small ONNX numerical differences are acceptable; task-level quality and aligned +behavior matter. Retraining and experimental quantization are outside this release. The completed four-GPU production campaign is assessed in the [training workflow post-mortem and next-run plan](training-workflow-postmortem.md). diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 19ed475..9e247c3 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -11,12 +11,24 @@ install, embed and operate without a GPU, internet access, administrator rights a writable installation directory. Preserve a clear migration path for existing Python and CLI users. Add acceleration only through separately qualified profiles. -The first release slice is an immutable FP32 ONNX deployment bundle, a small CPU -inference interface, legacy-interface compatibility, and measured release evidence. -Keep original PyTorch weights available for established workflows. Training resume -state and the large research archive are separate optional downloads. Hosting on -Hugging Face, browser integration and additional accelerators build on that same -bundle; they must not each invent preprocessing or taxonomy conventions. +The release targets **backwards compatibility with MAMBO_v2**, with native PyTorch +and standard floating-point ONNX as equal supported paths. Use the existing raw +PyTorch weights, standard prediction-only ONNX, and tested floating-point +prediction-plus-embedding ONNX derivative. Preserve the original files and pipeline +identities. PTQ, new FP16 graph conversions, TensorRT and new model formats are +outside this release increment. + +Both backends must support `full`, `europe`, `north_europe`, custom class lists, +and predictions with or without embeddings through aligned interfaces. Compare +usefulness on the in-domain test set and out-of-domain **Flemming** expert dataset, +plus speed and memory on this laptop's CPU and GPU. Small ONNX score variations are +expected and acceptable: micro-numerical parity is not a release objective. Existing +export checks remain intact; new release gates concern behavior, task quality and +practical trade-offs. + +Training resume state and the research archive remain optional downloads. Additional +OS/browser/accelerator qualification and Hub hosting follow the core comparison; +they do not delay a release with an honestly scoped support matrix. This release work takes precedence over the next-training-run improvements in the [training post-mortem](training-workflow-postmortem.md). Retraining, loader redesign, @@ -31,9 +43,9 @@ inspected alongside it; a local tag alone does not establish a published release | Published release | Established interface and behavior | Alignment required | | --- | --- | --- | -| [MAMBO_v2](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v2), 17 April 2026 | Latest published release; BioCLIP-2 model; `mambo_predict`; `mini_trainer.deploy.Predictor`; `full`, `europe`, `north_europe` aliases; default region Europe; weights downloaded from ERDA | Primary migration baseline. Preserve old version pins, document architecture and vocabulary changes, and explicitly decide the successor's default | -| [MAMBO_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v0), 15 April 2026, prerelease | Earlier MAMBO deployment wrapper and northern-European model emphasis | Include older pinned consumers in the migration guide | -| [UKCEH_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/UKCEH_v0), 3 February 2026 | Northern-European EfficientNetV2-M model; `python predict.py`; automatic model download | Document migration from script invocation and its original regional vocabulary | +| [MAMBO_v2](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v2), 17 April 2026 | Latest published release; BioCLIP-2 model; `mambo_predict`; `mini_trainer.deploy.Predictor`; `full`, `europe`, `north_europe` aliases; default region Europe; weights downloaded from ERDA | Required backwards-compatibility baseline. Preserve old version pins, document architecture and vocabulary changes, and explicitly decide the successor's default | +| [MAMBO_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v0), 15 April 2026, prerelease | Earlier MAMBO deployment wrapper and northern-European model emphasis | Historical context; no additional backwards-compatibility gate | +| [UKCEH_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/UKCEH_v0), 3 February 2026 | Northern-European EfficientNetV2-M model; `python predict.py`; automatic model download | Historical context; MAMBO_v2 is the compatibility target | None of these release records has attached binary assets. The MAMBO_v2 source resolves weights through an ERDA URL template and an implicit cache. Its README @@ -158,7 +170,7 @@ Produce a compact release inventory before changing inference behavior: revision and manifest schema separate identities. An artifact repair may create a new revision; it must not replace bytes behind a published version. -Retain Europe as the proposed default for the successor's MAMBO compatibility +Retain Europe as the default for the successor's MAMBO compatibility interface, matching MAMBO_v2; make `full` and `north_europe` explicit choices. Version aliases within a release. Do not silently redirect old pinned consumers to new weights. For the new deployment API, prefer explicit model-bundle selection. @@ -181,8 +193,10 @@ Proposed deployment contents: ```text release.json # identity, hashes, sizes, profiles, compatibility -model/model.onnx # plus ALL referenced external tensors -model/manifest.json # existing export metadata and numerical verification +models/pytorch/best.pt # original inference weights +models/onnx/model.onnx # original prediction graph + external tensors +models/onnx-embedding/ # existing floating prediction+embedding derivative +models/*/manifest.json # source/export metadata for each artifact preprocessing.json # complete machine-readable input recipe classes.json # ordered stable IDs, ranks and parent mappings regions/ # versioned candidate lists with provenance @@ -204,8 +218,8 @@ resize geometry, interpolation, antialiasing, crop, scaling and normalization. The current repository reader disables EXIF orientation; first recover the actual campaign pipeline. Any changed orientation policy is an explicit versioned behavior change, not an unnoticed browser/Python discrepancy. JPEG decoders and resize -implementations may differ: retain intermediate tensors and justified tolerances -rather than promising universal pixel identity. +implementations may differ: preserve the recipe and inspect task-level effects +rather than making universal pixel identity a release gate. Keep local IDs and taxonomy names sufficient for prediction. GBIF name/photo lookup is optional enrichment and must not be a hidden inference dependency. Record its @@ -214,43 +228,85 @@ provenance separately from fixed model class identity. Use ONNX as the initial deployment path that does not require Python checkpoint unpickling or model constructor downloads. Keep weights-only PyTorch loading for compatible legacy workflows; do not enable unrestricted pickle loading as an -automatic fallback. Evaluate safetensors plus explicit construction metadata only -if consumers need a portable tensor checkpoint; that is not already implemented. +automatic fallback. New tensor formats are deferred; this increment retains the +tested raw PyTorch and standard ONNX artifacts. **Done when:** the complete directory can be copied, relocated, checked for integrity -and used offline by a clean CPU process without the training repository, PyTorch, -backend downloads or a live taxonomy service. - -## 3. Deliver small integration interfaces — P0 - -Build on existing prediction, class-filtering and result-collection boundaries. -Keep deployment dependencies optional; do not force the training stack into an -ONNX-only consumer. Decide the smallest package boundary after inspecting those -imports, and validate its installed distribution outside the checkout. - -- Provide a documented Python image-to-prediction example using ONNX Runtime and - an explicit decoder, plus a tensor-in/tensor-out example. Add one non-Python - consumer by reusing the existing JavaScript viewer inference, using identical - conformance data and an explicitly versioned image adapter. Additional language SDKs can follow demonstrated demand. -- Restore a thin `mini_trainer.deploy.Predictor`/`mambo_predict` compatibility layer - or ship an explicitly versioned migration package. Preserve documented result - contracts, masking and embedding access where promised; embedding dimensions - and coordinates from different backbones are not interchangeable. -- Bound batching and memory. Support explicit batch/thread limits, local bundle - paths and clear per-input error handling. Separate library results from logging; - expose model revision, active vocabulary and selected runtime in provenance. -- Make device selection predictable: portable API defaults to CPU or a documented - capability-based mode; explicit accelerator requests fail clearly when unmet. - Allow CPU fallback only under a declared policy and report its use. Do not - silently mutate existing core CLI defaults during this release work. -- Supply copy-pastable pinned installation and prediction commands for POSIX shells - and PowerShell. Test paths containing spaces and Unicode. Avoid requiring a - repository clone, shell bootstrap script or administrator install for inference. - -**Done when:** an existing MAMBO consumer has a tested migration example and a new -consumer can run one image, a bounded batch and an empty/error case from an installed -package or standalone example. Core package imports remain independent of optional -runtime integrations. +and used offline without the training checkout, constructor downloads or live +taxonomy. The ONNX path must work without PyTorch; the native path uses explicit +PyTorch/backend dependencies. Each backend has its own clean-install check. + +## 3. Align the MAMBO_v2 API across backends — P0 + +Restore `mini_trainer.deploy.Predictor` and `mambo_predict` with MAMBO_v2-compatible +calls and results. Preserve `Predictor()`, `Predictor(model="europe")`, `predict`, +`__call__`, `predict_with_embeddings`, local weight overrides, `class_mask`, top-k +and the existing hierarchy/result accessors. In particular, +`predict_with_embeddings` retains `(predictions, embeddings)`. Keep the native +PyTorch route as the compatibility default; backend selection is additive. Do not +silently change the legacy CUDA default or legacy output types. New portable usage +examples should explicitly select CPU. Document compatibility exceptions before +implementation if tagged fixtures expose a behavior that cannot be retained. + +Proposed additive controls (API/CLI spellings to finalize against existing arguments): +`backend="torch"|"onnx"`, `class_list=...`, explicit device, bounded batch size, +thread budget, cache directory and offline mode. Presets continue to work through +`model`/`-M`; keep model revision separate from vocabulary selection internally. +ONNX-only installation must avoid a mandatory PyTorch dependency; reuse a small +runtime-neutral result adapter while preserving the legacy public contract. + +| Backend / output mode | Artifact and behavior | Qualification target | +| --- | --- | --- | +| PyTorch, predictions | Original `best.pt`, actual evaluation head | CPU and local CUDA | +| PyTorch, predictions + embeddings | Same weights and preclassification embedding, one backbone pass | CPU and local CUDA | +| ONNX, predictions | Existing standard FP32 prediction graph | CPUExecutionProvider and local CUDAExecutionProvider | +| ONNX, predictions + embeddings | Existing floating prediction+embedding graph from browser work | CPUExecutionProvider and local CUDAExecutionProvider | + +Every row supports the same presets and custom lists. The prediction-only ONNX graph +has no embedding output: select the identified embedding-enabled graph explicitly +when requested, without silent PyTorch fallback or synthetic embeddings. Exporting a +replacement is necessary only if a recovered artifact cannot satisfy the contract. +Do not assume that omitting an output fetch removes its computation; benchmark the +actual graph chosen. Keep returned embedding stage, sample order, dimensions and +normalization consistent; do not add a second backbone pass. Expose conversion/copy +costs and output device/type policy while retaining legacy behavior. + +### One vocabulary and postprocessing contract + +Use stable species IDs and versioned preset files. Allow a custom UTF-8 class-list +file and an equivalent Python sequence. Define `full` as all classes in this +checkpoint; preserve old preset membership where available, report missing IDs and +version deliberate additions separately. Species absent from the model cannot be +added by a list. Deduplicate, preserve model order rather than caller order, report +unknown entries, and reject an empty overlap before processing images. + +A custom list explicitly replaces a named preset for the new `class_list` option; +record the resolved list and hash. Preserve legacy `class_mask` semantics separately, +including reset behavior, and reject simultaneous `class_mask` and `class_list` as +ambiguous. A pre-masked artifact cannot recover absent classes. Keep independent +predictors isolated so changing one filter cannot affect another. + +Filtering must precede ranking and confidence normalization, with genus/family +scores recomputed from retained leaves. In the current hierarchical head, parent +scores use grouped log-sum-exp. For standard ONNX, gather the retained leaf scores +and apply the same hierarchy aggregation and normalization in shared postprocessing; +slicing the existing full-vocabulary parent outputs is incorrect. Cover priors, +parent mappings, masks and ordering with small behavioral fixtures against native +PyTorch. Unsupported head semantics fail explicitly. This avoids exporting one +graph per custom list and keeps presets as metadata, without changing model weights. + +Use the tested campaign preprocessing for both Python backends. Browser EXIF/alpha +improvements stay an explicitly separate adapter until deliberately aligned; they +must not silently change this release's native/ONNX image pipeline. Share sample +identity, hierarchy metadata, top-k and score conventions, thresholds, errors and +collector schema. Different backends need not have bit-identical scores or ranking +for near ties. Reuse the JavaScript work later as another consumer of this contract. + +**Done when:** tagged MAMBO_v2 compatibility fixtures and tiny backend × output-mode +× class-list tests pass; all four rows run bounded batches and return aligned +results. Include custom/preset equivalence, unknown/empty/duplicate lists, mask +reset, prediction-only versus embedding-enabled behavior, and finite correctly +shaped embeddings. No new micro-numerical ONNX validation study is required. ## 4. Qualify deployment profiles and restricted operation — P0/P1 @@ -260,17 +316,22 @@ for every claimed profile. “ONNX compatible” is not a qualification result. | Priority/profile | Initial target | Required evidence / fallback | | --- | --- | --- | -| P0 portable CPU | Linux x86-64 and Windows x64, CPU FP32 | Clean install, real-image conformance, bounded threads/RAM, offline/read-only operation; record tested CPU instruction requirements | -| P0 desktop ARM | macOS arm64, CPU FP32 | Native hardware check with the same fixtures and resource measurements; do not infer support from Linux x86 | -| P1 edge ARM | Linux aarch64, CPU | Actual target RAM/latency and runtime wheel availability; reduced batch profile; exclude untested devices from support claims | -| P1 NVIDIA | Linux/Windows CUDA on selected supported driver/runtime combinations | Operator placement and transfer profiling, quality parity, cold/warm latency and VRAM; explicit CPU fallback policy | -| P1 browser | Existing static viewer, desktop Chromium first; then Safari/Firefox and physical phones | Self-hosted JS/WASM/model assets, fixed preprocessing, memory/startup, single-thread fallback; WebGPU separately qualified | -| P2 specialized accelerators | TensorRT, CoreML, OpenVINO, DirectML/WebNN or other requested provider | Add one at a time only for a consumer need and measured benefit; retain the portable baseline | - -The proposed first GA scope is the three P0 desktop/CPU targets. If hardware access -is unavailable, either complete qualification before claiming that target or narrow -the published support matrix explicitly. Experimental profiles do not hold up a -correctly scoped portable release. +| P0 local CPU | Laptop Intel Core i7-12800H, x86-64; PyTorch and ONNX | Both output modes, task metrics, clean install, offline/read-only behavior, fixed thread budgets and RAM | +| P0 local GPU | NVIDIA GeForce RTX 3080 Ti Laptop GPU, 16 GiB; PyTorch CUDA and ONNX CUDA provider | Both output modes, task metrics, latency/throughput/VRAM and actual provider placement | +| P1 other desktops | Windows x64 and macOS arm64 CPU | Same contracts and install/restriction fixtures on actual OS/hardware; support claims only after checks | +| P1 edge ARM | Linux aarch64 CPU | Target RAM/latency and runtime availability; reduced batch profile | +| P1 browser | Existing Chromium WASM implementation, then other browsers/devices | Reuse existing evidence; new preprocessing/hosting claims separately qualified | +| Deferred acceleration | PTQ, FP16 graph conversions, TensorRT and other providers | Outside this release's core variant matrix | + +The laptop GPU/CPU were queried on 2026-09-23; the GPU reports driver 610.47. +The ordinary sandbox blocked NVML, while the permitted host query succeeded. +This identifies the available hardware, not successful PyTorch/ONNX CUDA execution. +Preflight actual runtime/provider availability before benchmarking, using the +existing environment without implicit synchronization. Prepare an isolated GPU +runtime environment if needed; do not replace the working CUDA wheels. +Record actual OS/kernel/virtualization and effective CPU affinity in results; this +host is not evidence for every Linux or Windows deployment. Other OS targets remain +part of the portability roadmap, not prerequisites for this local comparison. ONNX Runtime offers multiple [execution providers](https://onnxruntime.ai/docs/execution-providers/), but availability and operator coverage must be checked against the pinned runtime. @@ -309,50 +370,136 @@ trust material. Review model/runtime inputs and archive paths before extraction; keep ONNX external-data references inside the verified bundle. These are concrete release-loader requirements, not a claim that any model format is risk-free. -## 5. Establish quality and efficiency gates — P0, then P1 variants - -Use three distinct comparisons: previous public model versus the new model; the -selected new PyTorch checkpoint versus portable FP32 ONNX; portable FP32 versus -any optimized variant. Do not confuse export parity with model improvement. - -1. Retain supplied train/validation/test assignments and taxonomy. Freeze sample - identities and hashes. Recover the existing full test/expert predictions where - valid rather than rerunning expensive work without a question to answer. -2. Compare old/new models on matching images using stable taxon IDs. Report the - common-vocabulary slice and the full consumer workload, with excluded/unseen - labels visible. Stratify by rank, region and rare classes. Use the pinned - [mini_metrics workflow](../dev/ucloud/evaluate-results.md); preserve metric - definitions and distinguish macro recall from other “macro accuracy” measures. -3. Run raw-image conformance through decoding, preprocessing, graph and decoding of - outputs, including batches 1, 2, 4 and a declared upper bound, grayscale/alpha, - EXIF, unusual aspect ratios, and malformed/oversized inputs. Use redistributable - fixtures; keep private evaluation images outside the public bundle. -4. Predeclare per-profile score tolerances, top-1/top-k agreement, per-rank quality - limits, coverage and resource budgets before accepting a candidate. Record - max/percentile errors, near-tie changes, nonfinite outputs and threshold crossings. - The campaign used `rtol=1e-4, atol=1e-4` for synthetic FP32 parity; do not silently - replace exporter defaults or treat that result as end-to-end qualification. -5. Fit thresholds/calibration on suitable validation data, then freeze for test. - Previously optimized test thresholds remain exploratory. Regional filtering - changes scores, so global thresholds are not automatically transferable. -6. Measure download/bundle size, session creation, first image, warm p50/p95 latency, - throughput at stated batch/concurrency, peak RSS/VRAM and thread count. Use a - bounded representative workload on each target; compare on the same device. - -The expert-set result in the campaign record (57.59% species micro accuracy across -all labels versus 66.74% known-only) must remain visible in the model card. Strong -in-domain scores do not establish universal field accuracy or open-set rejection. -Audit overlap/leakage and dataset provenance before claiming improvement over older -releases; mark gaps explicitly when historical training identities are unavailable. - -FP16 and PTQ are optional named derivatives with their own hashes, recipe, quality -report and qualified profiles. The existing 128-image PTQ artifact is a candidate, -not the default. Quantization must earn inclusion through retained quality and a -measured latency/memory benefit; no requirement to ship INT8 merely because it exists. - -**Done when:** a release report records pass/fail/untested per gate and profile, -with thresholds and evidence attached. Numerical or resource failures are resolved -or the affected profile is excluded; no silent widening of tolerances. +## 5. Measure in-domain/Flemming quality and local inference cost — P0 + +### Evaluation inputs and reusable machinery + +Use the supplied in-domain test split (632,913 images in the campaign) and the +Flemming camera-trap expert set (58,640 images, 522 species). Verify recovered +manifests/counts and identity before associating local paths with those datasets. +Preserve all labels and original splits; never drop excluded or unknown species +when applying a regional/custom candidate list. No random re-splitting or test-based +threshold selection. Existing archived PyTorch predictions are a reference only +when their weights, preprocessing, precision, list and sample identities match. + +Start with the published `evaluation/` reports/CSVs to establish the baseline and +locate the original image/staging manifests. Archived predictions can reproduce +metrics without image access, but cannot supply new ONNX predictions or end-to-end +speed. Resolve local data roots or explicitly stage a bounded selection before the +first run. Do not silently substitute a different dataset for missing Flemming data. + +Reuse [the inference benchmark modules](../dev/benchmarks/inference.md): +`prepare_inputs` for ordered identity-bearing batches, `dataset_inference` for ONNX +collection, and `quality_compare` for metric comparisons. The current collector +supports ONNX/TensorRT, **not native PyTorch**: add the small native adapter using the +release predictor and extend shared postprocessing for filters/embeddings. Preserve +raw-image streaming for large datasets instead of requiring all decoded images or +embeddings in RAM. Prepared tensors may isolate runtime costs but must not replace +the image-to-result benchmark. `quality_compare` currently requires identical class +mappings; use it for matched new-model variants, with separate ID-aligned reporting +for MAMBO_v2 or different-vocabulary comparisons. + +Keep the existing canonical `mini_metric.csv` output for compatibility. If using +benchmark modules' long-form tables, provide a tested conversion or their existing +metric route; do not assume the two schemas are interchangeable. Run metrics in a +separate prepared Python 3.13 environment at the campaign's mini_metrics revision +`70cc69adc05362863439277048e06386c1f885e1`, with resolved dependencies recorded. +The existing helper supports this concrete path once each variant has completed +both canonical prediction files: + +```bash +MT_TEST_CSV=/path/to/variant/indomain/mini_metric.csv \ +MT_EXPERT_CSV=/path/to/variant/flemming/mini_metric.csv \ + bash dev/ucloud/evaluate-results.sh all /path/to/fresh/variant-metrics +``` + +The helper calls the Flemming dataset `expert` and records all-label, known-only and +per-class reports, hashes and completion markers. Initial `uvx` dependency setup +needs networking; pre-provision/pin the metric environment for offline runs. It does +not change the training environment. Selected-prediction CSVs cannot establish top-5 +accuracy; retain top-k output explicitly if reporting that metric. + +### Bounded comparison matrix + +1. Run tiny contract checks across both backends, both output modes and all three + presets plus one representative custom list; include preset-as-custom-list + equivalence. Run on CPU and the laptop GPU. This is behavioral coverage, not + a full-dataset Cartesian product. +2. Freeze a reproducible, bounded qualification subset from each original test + dataset for all eight backend × embedding × device configurations, using `full` + and `europe` first. Select by a recorded seed/ID list, preserve unknown labels, + record class coverage and label subset metrics as such. Choose the count after + a brief throughput probe so this first comparison is practical on the laptop. +3. Collect full in-domain and full Flemming predictions for native PyTorch and + standard ONNX on one selected qualified device, initially `full` and `europe`. + Reuse matching completed native runs. Evaluate `north_europe` and the representative + custom list from retained full leaf scores through the shared reducer where + semantics permit; otherwise make explicit additional inference runs. Record + coverage, avoid choosing lists from test outcomes, and retain bounded score + shards only when their reuse justifies disk cost. +4. Check embedding-enabled and CPU/GPU variants on the same qualification samples. + Extend their quality run only if task-level differences or a changed pipeline + require it. Do not claim separate full-dataset evidence for a variant tested + only on the subset. Report the embedding mode's measured time/memory overhead. +5. Include MAMBO_v2 as the historical consumer/model reference, using matching images + and each model's own preprocessing. Report both common-vocabulary and all-label + results. A backbone change is not automatically an accuracy improvement. + +Report per-rank micro accuracy, Macro-F1, Macro-Recall, Macro-Precision, Coverage and +Theil's U, plus all-label/known-only and per-class results. Keep sample counts, +active-list coverage and abstention coverage separate. Preserve undefined metrics. +Flemming's archived species accuracy (57.59% all-label, 66.74% known-only) is context, +not an acceptance threshold for every list/variant. Keep raw/unthresholded results; +any operational thresholds are fixed from separate validation/calibration data. + +Accept small numerical differences. Compare aggregate task metrics, prediction +agreement and material threshold/coverage changes; investigate substantive regressions, +not every score delta. Keep finite-value, shape, sample-order, class-ID and hierarchy +checks. Do not demand identical scores or perfect top-1 agreement on near ties, and +do not create new max-absolute-error release gates. Preserve existing exporter tests +and record prior parity evidence without rerunning a micro-numerical study. + +### CPU/GPU speed and resource protocol + +Use the same laptop, inputs and declared list/output settings for paired measurements. +Measure PyTorch CPU/CUDA and ONNX CPU/CUDA, with and without embeddings. Begin with +FP32 for a matched baseline; additionally retain the MAMBO-compatible native CUDA +autocast behavior as a clearly labelled practical mode. Record actual dtype, +autocast/TF32 settings and runtime versions; do not compare mixed precision as if +precision were matched. No new FP16 ONNX conversion is required. + +- Separate model/session load, first prediction and steady-state work. Measure both + complete image-to-consumer-result time (decode, resize, transfer, postprocess, + embedding copies included) and prepared-tensor runtime time with its boundary + stated. Do not present only kernel timing as application speed. +- Start with batch 1 for interactive latency, then a small common batch sweep such + as 8 and 32, stopping at the memory budget. Report the best practical batch per + variant separately from matched-batch comparisons. OOM is a recorded capacity + result, not permission for a silent batch/provider change. +- Use explicit CPU thread counts (one and a fixed practical allocation), identical + decode-worker budgets and bounded streaming. For GPU timing wait for completed + work through correct synchronization or completed host outputs; include transfer + in end-to-end measurements. Verify ONNX provider placement/fallback. +- Use fresh processes for load and memory measurements. After explicit warmup, + collect repeated timings in at least three alternating-order trials; report + median/p95 latency, images/s, peak RSS, peak/observed VRAM with measurement method, + failures, and variance. Avoid concurrent heavy jobs; record power mode, plugged-in + status and thermal/throttling observations. These are laptop-specific results. +- Measure `full` versus a preset and embeddings on/off. A class list applied after + ONNX execution does not reduce backbone/graph work; any native head speed benefit + or ONNX postprocessing overhead must be measured rather than inferred. + +Write one comparison table keyed by artifact hash, backend, device, precision, +embedding mode, list hash and dataset/split hash. Include quality deltas, counts, +latency/throughput, resource cost and evidence scope. Retain commands/configs, +prediction files, metric reports, raw trial timings and completion/failure markers. +Recommend defaults from the measured quality/speed/memory trade-off, allowing users +to choose a slower compatible or more restricted-environment-friendly route. + +**Done when:** a reproducible runner and concise report cover in-domain and Flemming +metrics, CPU/GPU costs, both backends and both output modes, with preset/custom-list +behavior tested and subset/full-data evidence distinguished. Material quality or +behavioral failures are resolved; small ONNX numerical variation is accepted. ## 6. Package, stage and promote — P0 @@ -364,7 +511,7 @@ must contain the same identified artifacts and must not become an inference-time requirement. Follow its [model-card metadata format](https://huggingface.co/docs/hub/model-cards) if using the Hub; hosting is separate from deploying an inference service. -Publish separate portable runtime, optional PyTorch inference, evaluation evidence +Publish standard ONNX and native PyTorch inference assets, evaluation evidence and training-resume archives. Include license and redistribution review for the weights, backbone, runtime, taxonomy and example images; do not infer a weight/data license from the repository's code license. Preserve evaluation provenance without @@ -391,19 +538,18 @@ has been exercised. Release notes distinguish model changes from package/API cha | Increment | Concrete deliverable | Dependency / completion gate | | --- | --- | --- | -| A — identity and migration | Complete known candidate inventory and baseline retrieval; vocabulary and API diff; release/default decisions | Archive and historical weight access; section 1 | -| B — portable vertical slice | Reuse FP32/browser artifacts and integrate relevant branch code; reconcile preprocessing; tiny CPU client and real-image fixtures | A; relocated offline inference in a clean Linux environment | -| C — consumer compatibility | MAMBO adapter, bounded batches, explicit cache/download policy, pinned installs | B; tagged-interface fixtures and clean installed-package checks | -| D — release qualification | Windows/macOS CPU checks, restriction matrix, old/new quality report and frozen gates | B/C; publish only evidenced support and quality claims | -| E — staged release | Versioned prerelease, readback, model card, migration and rollback; promotion review | A–D; concrete release checklist and evidence | -| F — optional acceleration | One selected GPU/browser/quantized profile at a time | Portable baseline; demonstrated demand and quality/resource benefit | - -Start with **A and B**. Verify the identified model bytes, finish the migration -contract and reuse the delivered export/browser work to produce a small, reviewable -consumer bundle. -The next-training-run orchestration plan is not on this release's critical path. - -Open work during A: verify the identified candidate binaries; recover exact training -revision and previous weight identities; choose target consumer examples, final -release/package versions and successor artifact hosting; set numerical/quality/resource budgets; and access to Windows/macOS target -machines. This roadmap proposes defaults where possible but does not invent evidence. +| A — identity and compatibility | Verify existing artifacts; recover MAMBO_v2 API/preset fixtures and data identities | Known public distribution, tagged code and evaluation manifests | +| B — aligned inference | Native PyTorch + standard ONNX; presets/custom lists; predictions ± embeddings | A; shared preprocessing, hierarchy reduction and installed API checks | +| C — quality and local cost | Reusable variant runner; in-domain/Flemming metrics; laptop CPU/GPU speed and memory | B; bounded matrix first, then needed full-dataset comparisons | +| D — staged release | Consumer bundles, migration notes, measured trade-offs, offline checks and rollback | A–C; concrete reviewed candidate | +| E — broader portability | Additional OS/browser profiles and distribution channels | Core release preserved; qualify only new boundaries | + +Start with **A and B**, then use C to make the release recommendation concrete. +The next-training-run orchestration plan and experimental quantization are not on +this release's critical path. + +Open work during A: verify candidate binaries and historical weights; locate local +in-domain/Flemming images and manifests; recover training revision and actual preset +memberships; pin the compatible runtime/metric environments. Final package/version +and publication choices follow the measured candidate. CPU/GPU qualification uses +the identified laptop; additional machines are needed only for later support claims. From a3b82ac1813ea18515bfcf0e00cde1a9fb40cb40 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:41:13 +0200 Subject: [PATCH 008/221] docs: defer quantization to a later model release --- docs/roadmap.md | 3 ++- docs/ucloud-model-release-roadmap.md | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 93eb899..32f26e3 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -11,7 +11,8 @@ native PyTorch and standard ONNX, support presets/custom class lists and predict with/without embeddings, then compare in-domain/Flemming quality and laptop CPU/GPU speed before staging publication. Start with its bounded increments A and B. Small ONNX numerical differences are acceptable; task-level quality and aligned -behavior matter. Retraining and experimental quantization are outside this release. +behavior matter. Retraining is outside this release; quantization is reserved for +a later release and adds no packaging, benchmarking or acceptance work here. The completed four-GPU production campaign is assessed in the [training workflow post-mortem and next-run plan](training-workflow-postmortem.md). diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 9e247c3..495c718 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -15,8 +15,11 @@ The release targets **backwards compatibility with MAMBO_v2**, with native PyTor and standard floating-point ONNX as equal supported paths. Use the existing raw PyTorch weights, standard prediction-only ONNX, and tested floating-point prediction-plus-embedding ONNX derivative. Preserve the original files and pipeline -identities. PTQ, new FP16 graph conversions, TensorRT and new model formats are -outside this release increment. +identities. This release ships the native PyTorch and standard ONNX models with +the region-specific presets. Quantization is deferred to a later release: no PTQ +artifact packaging, calibration, quantized benchmarks or quantization acceptance +gates belong to this increment. New FP16 graph conversions, TensorRT and new model +formats are also outside its scope. Both backends must support `full`, `europe`, `north_europe`, custom class lists, and predictions with or without embeddings through aligned interfaces. Compare @@ -86,7 +89,7 @@ Paths below are relative to that directory: | `models/pytorch/best.pt` | Final selected checkpoint; SHA-256 `174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a` | | `models/onnx-fp32/model.onnx` | Original prediction graph; SHA-256 `aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d` | | `models/onnx-fp32/model.onnx.data` | External tensors; SHA-256 `9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e` | -| `models/onnx-ptq/` | Experimental PTQ graph, external tensors and calibration report; qualification remains open | +| `models/onnx-ptq/` | Historical experimental artifacts only; preserve in the original archive, exclude from this consumer release | | `training/`, `evaluation/`, `export/` | Retained configuration, logs, resume state, predictions and export/calibration evidence | | `provenance.json`, `SHA256SUMS` | Packaging inventory and original file integrity records | | `viewer/browser-model/model.onnx` | Separate prediction-plus-embedding graph; SHA-256 `70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44` | @@ -321,7 +324,7 @@ for every claimed profile. “ONNX compatible” is not a qualification result. | P1 other desktops | Windows x64 and macOS arm64 CPU | Same contracts and install/restriction fixtures on actual OS/hardware; support claims only after checks | | P1 edge ARM | Linux aarch64 CPU | Target RAM/latency and runtime availability; reduced batch profile | | P1 browser | Existing Chromium WASM implementation, then other browsers/devices | Reuse existing evidence; new preprocessing/hosting claims separately qualified | -| Deferred acceleration | PTQ, FP16 graph conversions, TensorRT and other providers | Outside this release's core variant matrix | +| Later release | Quantization, FP16 graph conversions, TensorRT and other providers | No implementation, packaging or qualification in this release | The laptop GPU/CPU were queried on 2026-09-23; the GPU reports driver 610.47. The ordinary sandbox blocked NVML, while the permitted host query succeeded. From e5e231d3772eae52ab9dda38c9adb77bc53f7ad0 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:49:55 +0200 Subject: [PATCH 009/221] chore: bump version to 0.3.0 --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 38b21a7..c4a7f07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "mini_trainer" -version = "0.2.0" +version = "0.3.0" default-optional-dependency-keys = ["recommended"] dependencies = [ "torch>=2.11", diff --git a/uv.lock b/uv.lock index 0165a65..3ff2b37 100644 --- a/uv.lock +++ b/uv.lock @@ -1417,7 +1417,7 @@ wheels = [ [[package]] name = "mini-trainer" -version = "0.2.0" +version = "0.3.0" source = { editable = "." } dependencies = [ { name = "diskcache" }, From dc0628131e526113d4320fa8cd1ca16a6832000a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:50:13 +0200 Subject: [PATCH 010/221] docs: define release branch scope and upstream integration --- docs/ucloud-model-release-roadmap.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 495c718..3450e6e 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -4,6 +4,26 @@ Status: proposed development roadmap, 2026-09-23. This document does not publish artifacts or claim deployment qualification. Target: the completed 10–11 September 2026 UCloud model, not a new training campaign. +## Branch and integration policy + +Release development takes place on `release/mambo-v3`, created after the package +minor-version bump from `0.2.0` to `0.3.0` on `master`. The package version is +separate from the proposed `MAMBO_v3` model release tag; no release tag or public +promotion is implied by creating this branch. + +Direct commits are limited to release assets, deployment adapters, presets, +packaging, documentation and release-specific compatibility/evaluation tooling. +Fixes or refactors to shared core code (including model loading, preprocessing, +prediction, hierarchy and export internals) must originate on `master` or a +dedicated feature/fix branch, pass their relevant checks, and then be merged into +the release branch. Review the merge scope and validate affected combined behavior. +Apply this rule to the existing browser/export branch too; integrate the required +reviewed work rather than reimplementing core changes directly here. + +Classify a change by its purpose and affected boundary, not just its filename: +release adapters may use existing core interfaces, but a prerequisite core fix +remains a separate upstream change. Keep unrelated improvements out of this branch. + ## Release objective and scope Ship a versioned successor to the public MAMBO deployment release that is easy to From de2c251700ace2903b7857946483de82c07cb122 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 13:50:19 +0200 Subject: [PATCH 011/221] agent: enforce release branch core-change boundary --- AGENTS.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index c34819d..884e126 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,6 +27,22 @@ ## Priorities +### Release branch scope + +On `release/mambo-v3`, restrict direct work to the MAMBO release: deployment +assets and adapters, presets, packaging, release documentation, and the associated +compatibility and quality/performance qualification. Follow +[the release roadmap](docs/ucloud-model-release-roadmap.md). + +Do not implement fixes or refactors to the shared core module on this branch. +Develop required core changes on a dedicated feature/fix branch or `master`, +validate them there, then merge the reviewed commits into the release branch and +validate the affected combined behavior. Release pressure does not override this +boundary. Existing feature-branch export work must follow the same integration +path; do not copy it into new direct core commits on the release branch. + +### Repository priorities + Follow the order in `docs/roadmap.md`: development safeguards; behavior-preserving simplification; ONNX export and Hugging Face packaging; training efficiency; `mini_metrics` and continuous evaluation; additional dataset formats. From 8f5a425d5fced24f7417cf08630ac6aa5e8a9852 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 14:01:57 +0200 Subject: [PATCH 012/221] release: pin MAMBO model inputs and document regional presets --- dev/releases/mambo_v3/README.md | 125 + dev/releases/mambo_v3/audit.py | 86 + dev/releases/mambo_v3/check_legacy_fixture.py | 48 + dev/releases/mambo_v3/compatibility.toml | 17 + dev/releases/mambo_v3/inventory.toml | 323 ++ dev/releases/mambo_v3/presets/europe.classes | 3014 +++++++++++++++++ .../mambo_v3/presets/north_europe.classes | 1977 +++++++++++ docs/ucloud-model-release-roadmap.md | 16 +- tests/releases/test_mambo_inventory.py | 34 + 9 files changed, 5637 insertions(+), 3 deletions(-) create mode 100644 dev/releases/mambo_v3/README.md create mode 100644 dev/releases/mambo_v3/audit.py create mode 100644 dev/releases/mambo_v3/check_legacy_fixture.py create mode 100644 dev/releases/mambo_v3/compatibility.toml create mode 100644 dev/releases/mambo_v3/inventory.toml create mode 100644 dev/releases/mambo_v3/presets/europe.classes create mode 100644 dev/releases/mambo_v3/presets/north_europe.classes create mode 100644 tests/releases/test_mambo_inventory.py diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md new file mode 100644 index 0000000..f77f532 --- /dev/null +++ b/dev/releases/mambo_v3/README.md @@ -0,0 +1,125 @@ +# MAMBO_v3 release inputs + +This is the first release preparation increment, verified 2026-09-23. It freezes +inputs and compatibility expectations; it does not qualify a deployment adapter. +Model files, predictions and raw data stay outside Git in ignored storage. + +## Reproduce the audit + +`inventory.toml` pins 44 downloaded files by URL, relative path, size and SHA-256. +Download each URL to its corresponding path beneath an evidence root. Keep both +ONNX graphs with their adjacent `model.onnx.data`; a graph alone is incomplete. +Production files were checked against the published checksums; historical MAMBO +weights have newly observed hashes, not independent historical signatures. +`metadata_readback` identifies metadata hashed during this retrieval. These pins +establish reproducible inputs, not publisher authenticity. + +From the repository root, using the existing environment without synchronization: + +```sh +.venv/bin/python dev/releases/mambo_v3/audit.py local-evidence/mambo-v3 \ + --flemming /home/asger/data/flemming +.venv/bin/python dev/releases/mambo_v3/check_legacy_fixture.py +bash dev/check.sh test tests/releases/test_mambo_inventory.py +``` + +The audit checks every pinned file, safely reads checkpoint state on CPU, compares +all three ordered class mappings and both parent maps, recovers the region masks +from legacy weights and checks the committed lists. The standard ONNX manifest +must agree with the candidate mapping. It does not execute ONNX or build a model. +The legacy fixture extracts only the prediction container classes from the pinned +Git commit; it needs local Git history, but no old dependencies or backbone download. + +Observed result: 44 files verified; all legacy/candidate class and parent mappings +identical; 12,632 species, 4,476 genera, 104 families. No additions, removals or +index remappings. This does not imply equal predictions: the backbone changes from +BioCLIP-2 to EfficientNetV2-S and preprocessing changes from 512 to 384 pixels. +The old files contain classifier weights and require a separately available +backbone; they are not standalone offline baseline bundles. + +## Regional scope and construction + +The presets restrict possible species predictions. They are not geographic +boundaries, exhaustive regional checklists, locality detection, or guarantees +that an excluded species cannot occur in the region. They inherit the coverage, +sampling and taxonomy of the training data. Changing the allowed classes also +changes score normalization; confidence is conditional on the selected list. + +| Preset | Species | Construction and evidence | Limits | +| --- | ---: | --- | --- | +| `full` | 12,632 | Every species in the pinned model mapping | Global training vocabulary, not every Lepidoptera species | +| `europe` | 3,014 | MAMBO_v2 README: species with **more than 25** training records in Europe. Recovered from `classifier.active_indices` in the legacy Europe weights. | The precise geographic boundary/country set, occurrence query, deduplication and counting unit are not established by the tagged README. | +| `north_europe` | 1,977 | Recovered from the northern legacy weights; exact membership equals `data/reduced.txt` at the pinned tag. A subset of `europe`. | The original geographic definition, source checklist/query and inclusion threshold have not been recovered. Do not describe it as a comprehensive northern-European checklist. | + +The ordered files in `presets/` contain GBIF species IDs, one per line. Their +source-weight paths and hashes are in `inventory.toml`. Extraction uses each +weight's `cls2idx` and active indices, preserving model order rather than sorting +IDs or inferring a list from the new evaluation data. Keep these release-versioned +memberships fixed for backwards compatibility. Custom lists should resolve IDs +explicitly and report missing/duplicate IDs and excluded truth labels. + +Additional local corroboration: `tmp/europe_gbif_id_list.txt` matches the Europe +membership exactly. Filtering `tmp/europe_training_data.csv` by +`europeFrequency > 25` reproduces all 3,014 IDs from 3,132 table rows; the minimum +included count is 26. Its SHA-256 is +`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`. +These unversioned local files corroborate the threshold but do not establish the +missing original geographic query. They are not required by the release audit. + +Before claiming independently reproducible geographic construction, recover and +publish the source dataset/checklist version, region geometry or country set, +query/filter code, counting unit, threshold, taxonomy version and retrieval date. +A future regenerated list should have its own revision and added/removed-ID report; +it must not silently replace these compatibility presets. Deployment documentation +and API preset metadata should expose count, membership, rule and provenance gaps. + +## Compatibility boundary + +Pinned baseline: MAMBO_v2, commit +`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, plus the observed weight hashes. +The tagged `mini_trainer/deploy.py`, `mini_trainer/classifier.py` and +`mini_trainer/hierarchical/model.py` establish these expectations: + +| Surface | Preserve / qualify | +| --- | --- | +| Python entry | `mini_trainer.deploy.Predictor(device="cuda", model=None, weights=None, class_mask=None, **kwargs)`; Europe default; `model` and `weights` mutually exclusive | +| Calls | `predict(x, **kwargs)` and `__call__`; path, NumPy, tensor or iterable; CHW/BCHW and grayscale handling; iterable stacked as one batch historically | +| Masks | Species ID lists or index masks; `-1` clears the mask; region selection is distinct from class ordering | +| Result | Iterable/indexable hierarchical prediction; top-1 item has native tuples `label`, `confidence`, `index`, ordered species/genus/family; `to_dict()` returns a list of dictionaries | +| Embeddings | `predict_with_embeddings` returns `(prediction, embeddings)`; new embedding dimension is model-specific, not BioCLIP-compatible | +| CLI | Restore `mambo_predict`, `--model`/`-M`, explicit weights and result-name convention; test parsing and exported rows before claiming compatibility | +| Top-k | Legacy ranks are independently ranked; they are not necessarily one ancestral path. `topk>1` warns as experimental; exceeding the smallest rank width raises. Legacy nested-result serialization is incomplete. Define supported behavior explicitly rather than perpetuating defects. | + +`compatibility.toml` contains a small captured top-1 fixture and archived evaluation +CSV columns. The executable fixture checks the original container behavior only. +Wrapper input/error, CLI, masking and both new backend integration tests remain to +be implemented. The archived CSV schema alone is not proof of legacy CLI equivalence. +The legacy probability-detection heuristic uses a batch-wide sum; do not enshrine +that defect as a new probability contract. Any shared core correction belongs on a +feature/master branch before merge into the release branch. + +## Evaluation handoff + +Local Flemming has **58,640 images / 522 species**. Species-directory and filename +identities match every archived expert species-level prediction, with no missing +or extra JPEGs. This is membership evidence, not image-content checksum equality. +Both regional presets exclude 16 truth species / 8,042 images here. Preserve them +in evaluation and report all-image and in-vocabulary metrics separately; do not +silently drop unknown labels to improve accuracy. + +The global in-domain dataset is intentionally absent locally. Run its comparison +on UCloud where `/work/global_lepi` is available, using the original supplied test +split and taxonomy. The pinned training config identifies the original Parquet; +`evaluation/in-domain/provenance/staging.json` maps staged filenames back to source +images. Keep that mapping when joining the archived predictions; numeric staged +names must not be treated as original image identities. Verify the supplied split, +source membership and expected 632,913 predictions before a full run, with a small +qualification first. Do not regenerate a random split from the training proportion. + +Next implementation: self-contained portable assets and aligned PyTorch/ONNX +adapters, followed by a small Flemming qualification, then full local task metrics +and CPU/laptop-GPU timings. Use the same versioned runner/config on UCloud for +in-domain results. Archived selected predictions support a historical baseline, +not new-backend top-k or embedding quality claims. No fresh inference or speed +benchmark was performed in this increment. Training-source revision and best-epoch +provenance remain unresolved; packaging checkout is not training provenance. diff --git a/dev/releases/mambo_v3/audit.py b/dev/releases/mambo_v3/audit.py new file mode 100644 index 0000000..d51a70d --- /dev/null +++ b/dev/releases/mambo_v3/audit.py @@ -0,0 +1,86 @@ +"""Offline audit of pinned release inputs; does not construct models or use CUDA.""" + +import argparse +import csv +import hashlib +import json +import tomllib +from pathlib import Path + +HERE = Path(__file__).resolve().parent + + +def sha256(path): + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def verify_files(root, inventory): + """Fail closed on absent, changed, or escaping artifact paths.""" + root = root.resolve() + for item in inventory["artifacts"]: + path = (root / item["path"]).resolve() + if not path.is_relative_to(root): + raise ValueError(f"Artifact escapes evidence root: {item['path']}") + if path.stat().st_size != item["size"] or sha256(path) != item["sha256"]: + raise ValueError(f"Artifact integrity mismatch: {item['path']}") + + +def recover_preset(state): + mapping = state["classifier._extra_state"]["cls2idx"]["0"] + reverse = {index: label for label, index in mapping.items()} + indices = state["classifier.active_indices"].tolist() + if len(indices) != len(set(indices)): + raise ValueError("Duplicate preset indices") + return [reverse[index] for index in indices] + + +def audit(root, flemming=None): + import torch + + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + verify_files(root, inventory) + production = root / inventory["production"] + candidate = torch.load(production / "models/pytorch/best.pt", map_location="cpu", weights_only=True) + metadata = candidate["classifier._extra_state"] + manifest = json.loads((production / "models/onnx-fp32/manifest.json").read_text()) + if manifest["classifiers"][0]["metadata"]["cls2idx"] != metadata["cls2idx"]: + raise ValueError("ONNX and PyTorch class ordering differs") + full = torch.load(root / "MAMBO/hierarchical_bioclip2_ft_v1.pt", map_location="cpu", weights_only=True) + states = [full] + counts = {"full": len(metadata["cls2idx"]["0"])} + for name, preset in inventory["presets"].items(): + state = torch.load(root / preset["source"], map_location="cpu", weights_only=True) + states.append(state) + path = HERE / preset["path"] + labels = path.read_text().splitlines() + if sha256(path) != preset["sha256"] or len(labels) != preset["count"] or labels != recover_preset(state): + raise ValueError(f"Preset mismatch: {name}") + counts[name] = len(labels) + for state in states: + if state["classifier._extra_state"]["cls2idx"] != metadata["cls2idx"]: + raise ValueError("Legacy and candidate mappings differ") + for rank in (0, 1): + key = f"classifier.mask_{rank}" + if not torch.equal(state[key], candidate[key]): + raise ValueError(f"Legacy and candidate parent mapping differs: {key}") + report = {"verified_files": len(inventory["artifacts"]), "presets": counts, "mapping_and_parent_order": "identical"} + if flemming is not None: + with (production / "evaluation/expert/predictions/mini_metric.csv").open() as stream: + rows = [row for row in csv.DictReader(stream) if row["level"] == "0"] + expected = {tuple(Path(row["filename"]).parts[-2:]) for row in rows} + actual = {tuple(path.parts[-2:]) for path in flemming.glob("*/*.jpg")} + if len(expected) != len(rows) or expected != actual: + raise ValueError(f"Flemming identity mismatch: missing={len(expected - actual)}, extra={len(actual - expected)}") + if any(row["label"] != Path(row["filename"]).parent.name for row in rows): + raise ValueError("Flemming labels differ from species directories") + report["flemming"] = {"images": len(expected), "species": len({key[0] for key in expected}), "identity": "species/path only"} + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("root", type=Path) + parser.add_argument("--flemming", type=Path) + args = parser.parse_args() + print(json.dumps(audit(args.root, args.flemming), indent=2)) diff --git a/dev/releases/mambo_v3/check_legacy_fixture.py b/dev/releases/mambo_v3/check_legacy_fixture.py new file mode 100644 index 0000000..3da7ef3 --- /dev/null +++ b/dev/releases/mambo_v3/check_legacy_fixture.py @@ -0,0 +1,48 @@ +"""Exercise isolated prediction containers from the pinned legacy Git commit.""" + +import ast +import json +import subprocess +import tomllib +import warnings +from dataclasses import dataclass +from functools import lru_cache +from pathlib import Path + +import torch + +HERE = Path(__file__).resolve().parent + + +def check(): + fixture = tomllib.loads((HERE / "compatibility.toml").read_text()) + namespace = dict(torch=torch, dataclass=dataclass, lru_cache=lru_cache, json=json, warnings=warnings) + for path, names in ( + ("mini_trainer/classifier.py", {"PredictionItem", "BasePrediction"}), + ("mini_trainer/hierarchical/model.py", {"HierarchicalPredictionItem", "HierarchicalPrediction"}), + ): + source = subprocess.check_output(["git", "show", f"{fixture['legacy_commit']}:{path}"], cwd=HERE, text=True) + tree = ast.parse(source) + tree.body = [node for node in tree.body if isinstance(node, ast.ClassDef) and node.name in names] + if {node.name for node in tree.body} != names: + raise ValueError(f"Legacy container definitions missing: {path}") + exec(compile(tree, path, "exec"), namespace) + case = fixture["top1"] + prediction = namespace["HierarchicalPrediction"]( + [torch.tensor([rank]) for rank in case["logits"]], + cls2idx={str(rank): {label: index for index, label in enumerate(labels)} for rank, labels in enumerate(case["classes"])}, + ) + assert len(prediction) == 1 + assert list(prediction.indices.shape) == case["array_shape"] + assert list(prediction.confidence.shape) == case["array_shape"] + item = prediction[0] + assert item.label == tuple(case["labels"]) + assert item.index == tuple(case["indices"]) + assert isinstance(item.confidence, tuple) + torch.testing.assert_close(torch.tensor(item.confidence), torch.tensor(case["confidence"])) + assert prediction.to_dict() == [{"label": item.label, "confidence": item.confidence, "index": item.index}] + print("Pinned MAMBO_v2 top-1 container fixture passed (CPU; no model inference).") + + +if __name__ == "__main__": + check() diff --git a/dev/releases/mambo_v3/compatibility.toml b/dev/releases/mambo_v3/compatibility.toml new file mode 100644 index 0000000..ff6c7f6 --- /dev/null +++ b/dev/releases/mambo_v3/compatibility.toml @@ -0,0 +1,17 @@ +legacy_commit = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" +default_preset = "europe" +rank_order = ["species", "genus", "family"] + +# A small output contract for future adapters, captured from tagged classes. +[top1] +logits = [[0.0, 0.0, 0.6931471805599453], [1.0986122886681098, 0.0], [0.0]] +classes = [["s0", "s1", "s2"], ["g0", "g1"], ["f0"]] +labels = ["s2", "g0", "f0"] +indices = [2, 0, 0] +confidence = [0.5, 0.75, 1.0] +array_shape = [1, 1, 3] +item_container = "tuple" + +[csv] +columns = ["instance_id", "filename", "level", "label", "prediction", "confidence", "threshold", "known_label", "prediction_made", "correct"] +# Recorded archive schema; establish CLI adapter equivalence before certification. diff --git a/dev/releases/mambo_v3/inventory.toml b/dev/releases/mambo_v3/inventory.toml new file mode 100644 index 0000000..da6f7a4 --- /dev/null +++ b/dev/releases/mambo_v3/inventory.toml @@ -0,0 +1,323 @@ +schema_version = 1 +production = "global-lepi-production-release-20260911T150236Z" +legacy_commit = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +size = 21151665 +sha256 = "da676e0389eedbfd9a798b6fc45b293905968313a46cf9be6ed53ea74f525df9" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +size = 21143364 +sha256 = "34fe04302877de5540ed847859efb6b676876d5efc9401cd3336905e10ead568" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "MAMBO/hierarchical_bioclip2_ft_v1.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/MAMBO/hierarchical_bioclip2_ft_v1.pt" +size = 21127207 +sha256 = "047cfdcb3162d09f2a32482b8e699de240095226400e90922866751d1b00d413" +status = "observed_unpinned_legacy" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/SHA256SUMS" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/SHA256SUMS" +size = 166421 +sha256 = "e608a584ec550df0bcdfc23df007a1d8fc42013756d1fa8bea5138933938586b" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/COMPLETED" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/COMPLETED" +size = 0 +sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.csv" +size = 578 +sha256 = "a19afb807c8d5e81800b6adaaaa1a19d99fd950ed6bf0fce408fc922a556cf07" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/all_labels.json" +size = 1121 +sha256 = "921e665d5a7140688d657e1d5a981e5961aabb17c0b7a0bfccd60266c5cd667f" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/commands.sh" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/commands.sh" +size = 848 +sha256 = "8884f48277175f780b544d6cb429e9c39259616f22ef87064986402058b5c91b" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/input.sha256" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/input.sha256" +size = 114 +sha256 = "5806c384780dbbfcf86e9f9151548b08e914ef63d0aba86aaf5e57dd879f269e" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.csv" +size = 577 +sha256 = "0befc063a4d475c29215160acdb2dc50594428273016b602a04dcce1ebca4868" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/known_labels.json" +size = 1120 +sha256 = "84d250b7fc35d38e549e192c98c542e4432f90701ca6bc45a0406b7e9282cc28" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/per_class.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/per_class.csv" +size = 82829 +sha256 = "e07abe5c7e64c1d47cb436d9c7d3199e0f1d1fffa074674554552de2ceab32f7" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/provenance.txt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/baseline/provenance.txt" +size = 117 +sha256 = "ef5a9c5a9e9876646d5cdc6db3d0eb5f18ae16a0a127dbecb0e18a564f0ab8fb" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.csv" +size = 471 +sha256 = "83498c86976160a83a0854cf2ea5aeef77456cf189e332b9978baf7529fdc6c9" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-all-labels/all_labels.json" +size = 1011 +sha256 = "0cc85fa7148b373bc1505d34502872367b94650000a6b9687f9116257a948642" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.csv" +size = 468 +sha256 = "6f9821fe61afcfd314f5684e6c923d21eafce35ea48c21b3be114dc676fec207" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/optimal-known-only/known.json" +size = 1008 +sha256 = "e7b8839408bd75e9d00b75d17ea3255d75878e928170c86431bc78a92e936827" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/predictions/mini_metric.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/predictions/mini_metric.csv" +size = 23694718 +sha256 = "7d7ecf27f82fb3aa048a63278072a81b428fcf5a1fd2cdefa136403b2b5a8d84" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/inference.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/inference.yaml" +size = 125 +sha256 = "7bf2573f5f179cdaf77cf20840f74cc5839c47b1fa123a2c20892677ef141afb" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/predictions-config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/predictions-config.yaml" +size = 472 +sha256 = "896b5332946e207d076c0f06fe770bdc9445ce02597e797bbd090e0caa334b40" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/staging.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/expert/provenance/staging.json" +size = 14986156 +sha256 = "e72de8fe8e67b51e9240e0f3533a23459bdc21b650b616e510331574c05ac53a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.csv" +size = 466 +sha256 = "7235ca63d8c31e76ebf881066008d9299575665b8781cbd05657d21a7ab87c77" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_optimal/metrics.json" +size = 1004 +sha256 = "c2a245e90cdbf8af8cef30cd48ea8a17540ddfa3efc9e713a0e492c2944c78ee" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.csv" +size = 446 +sha256 = "93f92970467610669fe842ce75bdba2ed9f692f5ad0fed026196dac551888615" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/all_labels_zero/metrics.json" +size = 966 +sha256 = "cc1b8a96aba102040307f5aa1f51623e54a77b30898e61b95dd46406ff2a7072" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.csv" +size = 466 +sha256 = "7235ca63d8c31e76ebf881066008d9299575665b8781cbd05657d21a7ab87c77" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_optimal/metrics.json" +size = 1004 +sha256 = "c2a245e90cdbf8af8cef30cd48ea8a17540ddfa3efc9e713a0e492c2944c78ee" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.csv" +size = 446 +sha256 = "93f92970467610669fe842ce75bdba2ed9f692f5ad0fed026196dac551888615" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/known_only_zero/metrics.json" +size = 966 +sha256 = "cc1b8a96aba102040307f5aa1f51623e54a77b30898e61b95dd46406ff2a7072" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/predictions/mini_metric.csv" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/predictions/mini_metric.csv" +size = 185880109 +sha256 = "9675f9f5a2f0a0e3f9f6b58fafe96af2fafb673dd1d8ee992ba34e984ccc7611" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/inference.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/inference.yaml" +size = 178 +sha256 = "19beb3fc39b75af3ee09c9c3de0bec1e918b49f1f171bd3d4ef9dbf5f70ab9fa" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/predictions-config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/predictions-config.yaml" +size = 516 +sha256 = "6562cca001d7b183a2a6f5106dda05f9861c09396b2a158a0597692a1abf0fd7" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/staging.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/evaluation/in-domain/provenance/staging.json" +size = 123661500 +sha256 = "fa07a494006ef3eb95a7201a66f23dd615cca62e35d3213c5c3860c039fde6ed" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/export/preprocessing.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/export/preprocessing.json" +size = 459 +sha256 = "5381bfa42a975a731641182a8a3e78f12b24c4842fe129da5b391253e3079e2a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json" +size = 1787397 +sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx" +size = 1527453 +sha256 = "aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data" +size = 151838720 +sha256 = "9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +size = 153951029 +sha256 = "174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/provenance.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/provenance.json" +size = 270678 +sha256 = "bf61291b2271a02d14c9043dbf54d97f2475df7c8f1ec27e41e39bd1f040b2dc" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/training/production-w32.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/production-w32.yaml" +size = 1435 +sha256 = "43a30581599230bc8482007eb2f7dbcff86c9c786e272539eb5b7c92450fa039" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +size = 1906 +sha256 = "a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json" +size = 294850 +sha256 = "d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d" +status = "metadata_readback" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx" +size = 1932003 +sha256 = "70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44" +status = "verified" + +[[artifacts]] +path = "global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data" +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data" +size = 151838720 +sha256 = "9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e" +status = "verified" + +[presets.europe] +path = "presets/europe.classes" +source = "MAMBO/hierarchical_bioclip2_ft_eu_v1.pt" +count = 3014 +sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + +[presets.north_europe] +path = "presets/north_europe.classes" +source = "MAMBO/hierarchical_bioclip2_ft_neu_v1.pt" +count = 1977 +sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" diff --git a/dev/releases/mambo_v3/presets/europe.classes b/dev/releases/mambo_v3/presets/europe.classes new file mode 100644 index 0000000..44d827b --- /dev/null +++ b/dev/releases/mambo_v3/presets/europe.classes @@ -0,0 +1,3014 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847111 +1847407 +4528547 +1847572 +9262981 +1847956 +9546514 +1848150 +1848202 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848741 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830221 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +8837162 +1772793 +4532500 +1777289 +8141741 +1777631 +1777695 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +9310626 +1792210 +1797178 +1797258 +1797276 +1797333 +1797349 +1797367 +1797374 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +1805110 +1805155 +4532608 +7874258 +1807969 +1808195 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532293 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8038357 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +1852831 +9473121 +4529630 +5125075 +5125104 +8416348 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +10787705 +1872848 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873780 +1873783 +4531237 +4531264 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +4531242 +1875631 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878470 +1878471 +1878490 +1878500 +1878586 +1890065 +5884888 +11728049 +1877035 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739151 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +4530424 +1741820 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745788 +1745816 +1745827 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +7588222 +9242559 +1748456 +1748720 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771255 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1920864 +1920892 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +10854079 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +12165672 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926861 +5882965 +1928248 +5139040 +5139156 +1928945 +1928960 +1929270 +1929659 +1929697 +5792092 +8356768 +1930110 +1930904 +4535106 +1931179 +1931509 +1931779 +1931788 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933649 +1933793 +1926166 +1926260 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535285 +7981372 +1919698 +1919706 +1919712 +1919716 +1919966 +1920237 +1920258 +1920259 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5137902 +5137903 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137595 +5137612 +5137636 +5137677 +5137682 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +1750326 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1855235 +1855241 +1954490 +1954563 +5143380 +5143453 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956710 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960617 +1961013 +1961037 +1961040 +1961068 +1961190 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +1963011 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146528 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +1975198 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982791 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983441 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4525034 +4524376 +4524822 +4524712 +4523522 +4522974 +4524541 +4523519 +4524070 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945877 +1946661 +7389824 +1947306 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +1950006 +5142394 +5142599 +7683096 +8109173 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762271 +1762383 +1762608 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764716 +1764986 +1764987 +1765010 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534252 +4534257 +4534275 +5109843 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +8150836 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +4532986 +1772013 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1773062 +1773163 +1773231 +1773309 +1773328 +1773377 +1773484 +1773572 +8222049 +1774272 +1774347 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +1776067 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778524 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786515 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787381 +1787400 +1787417 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10068024 +10113008 +10290084 +10312073 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1792645 +1792768 +5113370 +1792996 +1793212 +7918000 +1793877 +1793986 +1794102 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4534360 +4533123 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +9549172 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +4532203 +4532206 +4532216 +4532236 +4532239 +4532253 +4532260 +4532264 +4532266 +8103163 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824121 +1824131 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894268 +5882039 +7712938 +1894714 +4535614 +4535627 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +5128323 +5128357 +6231906 +1895875 +1896841 +1897852 +1898286 +1898290 +4299368 +1898521 +1898544 +5129378 +1901850 +1902533 +1902749 +8140883 +8189761 +4535689 +6221746 +1905383 +1906552 +8208583 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911461 +7728366 +8396242 +4535592 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299576 +4299597 +4299599 +5133990 +5772890 +7428726 +7799370 +8810143 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134667 +5134682 +5134686 +5134815 +5134837 +5134884 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916410 +1916412 +1916458 +1916554 +7854318 +1918632 +1918669 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1902143 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5976910 +1735193 +1941864 +5120465 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842097 +1842196 +5120396 +1842485 +1842542 +4301036 +1842690 +1842695 +4529738 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885931 +1885937 +1886084 +1886251 +1886320 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888743 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +1890187 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +11761541 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854259 +1854287 +1854347 +5122439 +1854615 +1854792 +1854824 +1854849 +1854237 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5123042 +5124512 +1866356 +1866568 +5124911 +1867820 +1867928 +7764232 +7734292 +1841460 +1841476 +1841616 +1841675 +1841706 +1841813 +1841821 +1841946 +1841989 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862572 +1862578 +1862580 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830534 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5105929 +5106115 +5106160 +5106249 +5106539 +5106894 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856384 +1856595 +1856620 +1856658 +1856663 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +9790007 +1857785 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +1858321 +1938050 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1835422 +1836899 +1837172 +4528702 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +5114409 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +4534762 +4534766 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/north_europe.classes b/dev/releases/mambo_v3/presets/north_europe.classes new file mode 100644 index 0000000..b6b931b --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_europe.classes @@ -0,0 +1,1977 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732416 +1732452 +1732565 +1732662 +1732685 +1733258 +1733484 +4525266 +4525273 +5101678 +5101745 +5769191 +1734453 +1734704 +1734826 +5102287 +1845270 +1845368 +1845565 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +1846916 +1847097 +1847407 +1847572 +9262981 +1847956 +1848150 +1848202 +10450501 +1848219 +1848273 +1848356 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850506 +4527903 +1850522 +1850533 +1850538 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +5769272 +5879654 +7448174 +4525610 +1861395 +1845866 +1845962 +1845965 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11571523 +1761111 +1764531 +1769103 +1769897 +1772793 +4532500 +1780150 +1790692 +1790816 +5113078 +5113084 +5113234 +1797178 +1797258 +1797276 +1797367 +1797479 +4532471 +8756768 +1798346 +1798408 +4532493 +1798449 +1798504 +1798594 +1798802 +1798807 +4532357 +1799708 +1804071 +1804906 +7874258 +1807969 +1808450 +1808752 +5115771 +5115777 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814630 +5117399 +5117400 +1819145 +4532293 +4532297 +1819268 +8407461 +1819873 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532516 +4532532 +12089608 +11962292 +12135372 +5115874 +5116475 +5116698 +1788635 +4532405 +4532408 +4532412 +8000103 +4532534 +4532508 +1760246 +5113036 +1821856 +1821911 +1812394 +8237987 +1820039 +1771772 +1860979 +1860983 +1860987 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522891 +1860768 +1860852 +7767114 +7851302 +7961640 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +9473121 +4529630 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869803 +1869852 +1869976 +1870202 +1870249 +1870250 +1870450 +1870988 +1871160 +1871252 +1871407 +4531402 +1871698 +1871826 +10787705 +1872901 +1873048 +1873079 +1873411 +1873776 +1873780 +1873783 +4531264 +5125689 +1874192 +1874204 +1874211 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +4531242 +1875631 +1875633 +4531284 +1875827 +1875865 +1875869 +1875918 +1875940 +1875952 +1876329 +1876409 +1876542 +1876623 +1876854 +1877310 +1877341 +1877368 +4531246 +5126052 +1877941 +1877988 +1878470 +1878490 +1878586 +11728049 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +1940807 +1940838 +1941377 +1941437 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +5102628 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737342 +1737368 +1737437 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1741056 +1741147 +1741253 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +4530424 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745787 +1745788 +1745816 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +6097234 +7588222 +9242559 +1748456 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5771227 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1922311 +1922343 +8016522 +1922584 +1922937 +5138543 +5138561 +5714680 +1923796 +1924097 +5138681 +1925221 +1925233 +4535172 +1925454 +1925918 +1925962 +1926324 +1926861 +5882965 +1928248 +5139156 +1928945 +1929270 +1929659 +1929697 +8356768 +1930110 +1931179 +1931779 +1932411 +1932960 +5140436 +7634721 +1933793 +1926260 +1933095 +1933138 +1924494 +4522322 +5105339 +1919712 +1920259 +1920491 +1920494 +1920496 +1920506 +4535307 +5137903 +5804895 +1920712 +5137582 +5137595 +5137612 +5137636 +5137695 +5137706 +8203812 +1920218 +1748890 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750143 +1750159 +1750288 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1954563 +5143380 +5143453 +5143477 +5143651 +5143675 +5143697 +1956440 +1956524 +1956599 +1956710 +4525068 +1957266 +1957300 +1957570 +1957572 +1957632 +1957718 +1957816 +1957845 +1957852 +1957854 +4524421 +4524426 +5143944 +5143947 +1958024 +1958323 +1959383 +1959395 +1959467 +1959682 +1959735 +1959914 +1959919 +1960617 +1961040 +1961068 +1961190 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +1962636 +1962860 +1962990 +1963011 +4302252 +1963306 +1963446 +1963463 +1964191 +1964195 +1964471 +1964637 +1964653 +1964657 +8361848 +5144426 +1965166 +1965208 +1965345 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966886 +5144534 +1967011 +5144543 +1967245 +1967273 +1967597 +1967815 +1967873 +7681733 +1968678 +1968867 +11598540 +1969291 +1969954 +1970213 +1970227 +1970284 +5144677 +5144721 +5144805 +5144900 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +7753668 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973414 +5146496 +5146510 +5146559 +5146611 +5146659 +5146677 +5146762 +5146837 +5146883 +5146946 +5146961 +5147038 +5147039 +5147062 +5147150 +5147171 +5147193 +5147208 +5147232 +5147245 +5147354 +5147478 +7988195 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +5769028 +5148247 +5148248 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +4524890 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +8421569 +1981696 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982791 +1982838 +1982885 +1983000 +1983052 +1983111 +1983170 +1983260 +1983288 +1983387 +1983441 +1983442 +1983525 +1983548 +1983558 +1983648 +1983705 +1983755 +1983888 +1983896 +1983922 +1983997 +1983999 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +1985522 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +5149315 +5768880 +1987527 +1987578 +1987744 +4524221 +1988593 +1988602 +1988684 +8388883 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990551 +5149474 +1991179 +1991371 +5149836 +5149839 +1992066 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9414984 +4524740 +4523556 +4523560 +4523564 +4524054 +4524376 +4524822 +4523522 +4524070 +4524072 +4524403 +4524793 +4524951 +4525078 +5144190 +5146412 +5149499 +7769543 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149746 +5149768 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +8277078 +8073674 +8133678 +8273661 +1945569 +7389824 +1947306 +1947335 +1949784 +1949794 +1949852 +1949938 +1950006 +8109173 +8270406 +7633472 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +4533952 +7972792 +1759153 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +1760593 +1794361 +4534225 +8708745 +1760857 +1760887 +1760891 +1761041 +1761438 +1761735 +1761865 +1762244 +1762608 +5109498 +5109506 +5109523 +5109599 +5109614 +5109661 +5109722 +1763610 +1764987 +1765011 +1765017 +1765044 +4534245 +4534257 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766741 +1766814 +1767597 +1767625 +1767655 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +1768117 +1768150 +5110200 +1768341 +5110213 +1768702 +1768729 +1768749 +1768771 +1768815 +1769057 +1769505 +1769519 +1769566 +1769958 +1770150 +1770307 +1770477 +4532696 +1771385 +1771391 +7725644 +1771509 +1771531 +1772013 +1772169 +1772179 +5772129 +1772940 +1772956 +1773163 +1773309 +1773328 +4534046 +4534052 +4534057 +5772269 +1775891 +4534719 +5110670 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111574 +8253467 +1779435 +1779641 +1779690 +1780378 +1780926 +1781008 +4533285 +1781694 +1782560 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +5112155 +5112254 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783855 +1784359 +1784812 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785888 +1785895 +1786007 +8292872 +1786902 +1786936 +1787064 +1787112 +1787267 +1787400 +1787504 +1787590 +1787610 +1787697 +1787751 +1787770 +1787841 +1787859 +1788425 +1788522 +4534011 +1788917 +1789076 +1789086 +1789267 +1789481 +1789553 +1789580 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +10068024 +10113008 +10312073 +10904813 +1789982 +1790002 +1790062 +1790072 +1790084 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1791422 +1791784 +1792061 +1792292 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792449 +1792475 +1793877 +1793986 +1794102 +1794590 +1795215 +1795282 +7869346 +1795854 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +7981386 +8742426 +4534389 +4534207 +10638451 +4532811 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4533128 +4533136 +4533661 +4533671 +4534408 +4534458 +4534533 +5883985 +11478679 +5110644 +1774285 +1779334 +5114198 +1763072 +5772063 +4534686 +1771634 +1771650 +1771678 +1771698 +8581601 +1770772 +1770869 +1770880 +1771040 +1771204 +1771214 +1771245 +4533714 +7940536 +5113847 +5772309 +5108761 +4534525 +4533347 +4533360 +4532239 +4532253 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823726 +1824113 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119245 +1827645 +1828162 +4534872 +1894268 +7712938 +1894714 +4535614 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +5128323 +5128357 +1895875 +1896841 +1898286 +4299368 +1898544 +1902533 +1902749 +8140883 +6221746 +1905383 +8208583 +1909398 +1911112 +1911168 +1911278 +1911461 +7728366 +7809779 +8078362 +1912325 +1912372 +1912470 +4299535 +4299576 +4299597 +4299599 +5772890 +7428726 +7799370 +8810143 +5134098 +1913175 +1913178 +1913328 +1913351 +5134469 +5134667 +5134682 +5134815 +5135191 +7738295 +7791190 +7791558 +7798382 +8298764 +8314088 +7854318 +1918868 +8176911 +7622059 +4535510 +5130587 +5130682 +7762841 +5132183 +5135513 +5131910 +8138711 +1902169 +1899433 +7768674 +7934873 +8168644 +8393082 +1951557 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1951713 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5120465 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842196 +5120396 +1842485 +1842542 +1842690 +1842695 +5101394 +1730978 +1731598 +1872368 +1878782 +1878862 +1878879 +1878895 +1878907 +1878939 +4531506 +4531517 +1879252 +1879452 +5126212 +5126217 +1879534 +1879630 +1879655 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1881151 +4531687 +1881603 +4531713 +1881834 +4531975 +1882158 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1883161 +1883386 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1886084 +1886320 +8223165 +1886579 +1886587 +1887290 +1887701 +4531968 +10922411 +1888579 +1888733 +1888743 +1888759 +1888826 +1889287 +1889942 +1890187 +1890522 +1890534 +1890576 +1890656 +1890699 +1890703 +1890772 +1891059 +1891326 +1891386 +1891426 +1891473 +1891493 +1891494 +4532022 +1892242 +9674732 +1884255 +1884273 +1884280 +1884312 +1884332 +1884370 +1884403 +5884851 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +4532160 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854287 +1854347 +5122439 +1854792 +1854849 +1854237 +4526050 +7717983 +1858637 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +1866568 +5124911 +1867820 +7734292 +1841616 +1841675 +1841813 +1841821 +1861644 +1861797 +1861862 +1862578 +1862580 +1862719 +1862837 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124233 +1864652 +1993419 +1939432 +4525189 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830537 +1830584 +1830632 +1830802 +4525364 +1754332 +5107128 +5107219 +5107644 +5107829 +7410701 +7674502 +7761138 +7778368 +7903078 +7955974 +8158342 +8201251 +8348761 +8426357 +4522753 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1856005 +1856289 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857577 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858113 +1858163 +8225376 +1938214 +1938520 +1938810 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +4528658 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1836899 +1837172 +1838969 +1839851 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +1801051 +1801896 +4534779 +4534782 +1802280 +1803012 +1803073 +4534762 +4534767 +5114327 +8244266 diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 3450e6e..84d4530 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -1,9 +1,18 @@ # UCloud model release roadmap -Status: proposed development roadmap, 2026-09-23. This document does not publish +Status: release preparation started, 2026-09-23. This document does not publish artifacts or claim deployment qualification. Target: the completed 10–11 September 2026 UCloud model, not a new training campaign. +The [first input-audit increment](../dev/releases/mambo_v3/README.md) now pins and +verifies 44 retrieved files, including candidate PyTorch/ONNX weights and historical +MAMBO weights. It recovers both regional presets, confirms identical old/new class +and parent mappings, and captures a small legacy output fixture. Its regional-scope +table distinguishes the established Europe threshold from unresolved geographic +provenance. Adapter compatibility and inference qualification remain outstanding. +Local evaluation will use Flemming; the large in-domain dataset remains on UCloud +and must be evaluated there using the original supplied split. + ## Branch and integration policy Release development takes place on `release/mambo-v3`, created after the package @@ -201,8 +210,9 @@ Store regional lists with provenance and hashes, and disclose excluded true labe **Done when:** immutable candidate and baseline inventories exist, compatibility fixtures are specified, and release identity/default decisions are recorded. The -public artifact location and candidate hash are now known; remaining binary -verification and historical-baseline access still gate certification. +public artifacts and historical weights have now been retrieved and hashed; see +the input-audit increment above. Training-revision/best-epoch provenance and full +wrapper/CLI fixtures remain outstanding before compatibility certification. ## 2. Build a self-contained portable bundle — P0 diff --git a/tests/releases/test_mambo_inventory.py b/tests/releases/test_mambo_inventory.py new file mode 100644 index 0000000..2f33757 --- /dev/null +++ b/tests/releases/test_mambo_inventory.py @@ -0,0 +1,34 @@ +"""Failure-mode coverage for the release input audit, without downloaded weights.""" + +import hashlib + +import pytest +import torch + +from dev.releases.mambo_v3.audit import recover_preset, verify_files + + +def test_integrity_rejects_same_size_corruption(tmp_path): + path = tmp_path / "model" + path.write_bytes(b"good") + inventory = {"artifacts": [{"path": "model", "size": 4, "sha256": hashlib.sha256(b"good").hexdigest()}]} + verify_files(tmp_path, inventory) + path.write_bytes(b"evil") + with pytest.raises(ValueError, match="integrity mismatch"): + verify_files(tmp_path, inventory) + + +def test_integrity_rejects_escape(tmp_path): + with pytest.raises(ValueError, match="escapes"): + verify_files(tmp_path, {"artifacts": [{"path": "../outside"}]}) + + +def test_preset_uses_explicit_indices_not_mapping_insertion_order(): + state = { + "classifier._extra_state": {"cls2idx": {"0": {"species-c": 2, "species-a": 0, "species-b": 1}}}, + "classifier.active_indices": torch.tensor([1, 0]), + } + assert recover_preset(state) == ["species-b", "species-a"] + state["classifier.active_indices"] = torch.tensor([1, 1]) + with pytest.raises(ValueError, match="Duplicate"): + recover_preset(state) From dde3734fb2665a07fc00fa180f1f4533e97a1c12 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:06:39 +0200 Subject: [PATCH 013/221] release: reconstruct regional presets from pinned metadata --- dev/releases/mambo_v3/README.md | 64 +++++++++++++++---- dev/releases/mambo_v3/construction.toml | 31 +++++++++ dev/releases/mambo_v3/reconstruct_presets.py | 67 ++++++++++++++++++++ docs/ucloud-model-release-roadmap.md | 6 +- tests/releases/test_mambo_construction.py | 39 ++++++++++++ 5 files changed, 193 insertions(+), 14 deletions(-) create mode 100644 dev/releases/mambo_v3/construction.toml create mode 100644 dev/releases/mambo_v3/reconstruct_presets.py create mode 100644 tests/releases/test_mambo_construction.py diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index f77f532..bf63c40 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -48,8 +48,8 @@ changes score normalization; confidence is conditional on the selected list. | Preset | Species | Construction and evidence | Limits | | --- | ---: | --- | --- | | `full` | 12,632 | Every species in the pinned model mapping | Global training vocabulary, not every Lepidoptera species | -| `europe` | 3,014 | MAMBO_v2 README: species with **more than 25** training records in Europe. Recovered from `classifier.active_indices` in the legacy Europe weights. | The precise geographic boundary/country set, occurrence query, deduplication and counting unit are not established by the tagged README. | -| `north_europe` | 1,977 | Recovered from the northern legacy weights; exact membership equals `data/reduced.txt` at the pinned tag. A subset of `europe`. | The original geographic definition, source checklist/query and inclusion threshold have not been recovered. Do not describe it as a comprehensive northern-European checklist. | +| `europe` | 3,014 | Filter the pinned metadata by `continent == "EUROPE"`, count rows per `speciesKey`, retain counts **> 25**. Exact membership and retained count-table match. | Uses the metadata's continent assignment, not a union of entire countries. The upstream method that assigned continents is not established here. | +| `north_europe` | 1,977 | Filter `countryCode` to `DE DK EE FI LT LV NL NO PL SE`, count rows per `speciesKey`, retain counts **> 25**. Exact membership match to the weights and tagged `data/reduced.txt`. | This reconstructs the list but does not uniquely establish the original country expression: several additional countries leave membership unchanged. | The ordered files in `presets/` contain GBIF species IDs, one per line. Their source-weight paths and hashes are in `inventory.toml`. Extraction uses each @@ -58,17 +58,57 @@ IDs or inferring a list from the new evaluation data. Keep these release-version memberships fixed for backwards compatibility. Custom lists should resolve IDs explicitly and report missing/duplicate IDs and excluded truth labels. -Additional local corroboration: `tmp/europe_gbif_id_list.txt` matches the Europe -membership exactly. Filtering `tmp/europe_training_data.csv` by -`europeFrequency > 25` reproduces all 3,014 IDs from 3,132 table rows; the minimum -included count is 26. Its SHA-256 is -`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`. -These unversioned local files corroborate the threshold but do not establish the -missing original geographic query. They are not required by the release audit. +### Reproduce construction from metadata + +The user-identified Parquet is available locally even though the full image dataset +is not. [construction.toml](construction.toml) pins its SHA-256, byte size, geography +filters, counting rule and expected totals. Using the existing environment with +PyArrow available, run from the repository root: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.reconstruct_presets \ + examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet +``` -Before claiming independently reproducible geographic construction, recover and -publish the source dataset/checklist version, region geometry or country set, -query/filter code, counting unit, threshold, taxonomy version and retrieval date. +This reads only the geography/species columns after verifying the source hash and +compares reconstructed membership to the frozen lists. It does not alter their +model ordering. Count **metadata rows**, with no additional occurrence/image +deduplication, across **all existing splits `0`–`9`**, including held-out records. +Thus the historical README's phrase "training data" means the overall metadata +corpus for this reconstruction, not just the training partition. Preserve that +disclosure when reporting held-out metrics; the historical vocabulary selection +used those rows too. The script neither changes nor regenerates splits. + +Europe selects 2,079,617 rows covering 3,132 species before the strict threshold. +All 3,132 per-species counts exactly match `tmp/europe_training_data.csv`; the +minimum included count is 26. That retained table's SHA-256 is +`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`. +The reconstruction no longer depends on those unversioned CSV/list files. +The world count table also matches all 12,632 species' metadata row counts. + +The Europe filter includes records coded `TR` (743), `GE` (361), `AZ` (242), +`RU` (110,277) and `KZ` (13) **only when their continent field is `EUROPE`**; +it does not include all records from Turkey or the Caucasus. No Armenian records +pass this filter. Country-only selection cannot reproduce the preset using the +same >25-row rule: species `11470119` has 595 rows, all `ES`, and is included; +species `5145842` has 194 `ES` rows and is excluded (192 are `AFRICA`, two have +blank continent). Including all Spain would therefore force an unwanted species. + +The northern reconstruction uses **Germany, Denmark, Estonia, Finland, Lithuania, +Latvia, Netherlands, Norway, Poland and Sweden**. These select 768,497 rows and +2,291 species before thresholding. Removing any one of those ten countries +changes membership. Adding the **UK (`GB`) adds 29 species** absent from the +frozen list. Adding Ireland (`IE`), Iceland (`IS`), Åland (`AX`), Faroe Islands +(`FO`), Guernsey (`GG`), Isle of Man (`IM`), Jersey (`JE`) and Svalbard/Jan Mayen +(`SJ`), individually or all together, changes no selected species. Consequently +the final list cannot tell us whether Ireland or Iceland was originally included. +These are tested equivalent additions, not an exhaustive enumeration of all +possible filters. No original generation script was recovered. + +The source Parquet hash identifies the exact taxonomy/metadata snapshot used for +reproduction; it does not establish the original GBIF taxonomy retrieval date or +the upstream continent-assignment geometry. Keep those remaining provenance +limits explicit. Neither preset is a comprehensive regional checklist. A future regenerated list should have its own revision and added/removed-ID report; it must not silently replace these compatibility presets. Deployment documentation and API preset metadata should expose count, membership, rule and provenance gaps. diff --git a/dev/releases/mambo_v3/construction.toml b/dev/releases/mambo_v3/construction.toml new file mode 100644 index 0000000..2c3f6ac --- /dev/null +++ b/dev/releases/mambo_v3/construction.toml @@ -0,0 +1,31 @@ +schema_version = 1 + +[source] +path = "examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet" +size = 1071961943 +sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" +rows = 6329994 +species_column = "speciesKey" +counting_unit = "metadata row; no additional deduplication" +splits = "all existing set values (0 through 9), including held-out rows" + +[europe] +column = "continent" +values = ["EUROPE"] +exclusive_minimum_rows = 25 +selected_rows = 2079617 +species_before_threshold = 3132 +species_after_threshold = 3014 +status = "Exact membership and retained per-species count-table match" + +[north_europe] +column = "countryCode" +values = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +exclusive_minimum_rows = 25 +selected_rows = 768497 +species_before_threshold = 2291 +species_after_threshold = 1977 +status = "Exact membership reconstruction; original country expression is not uniquely identifiable" +# Adding any subset of these codes, including all together, leaves membership unchanged. +membership_neutral_additions = ["IE", "IS", "AX", "FO", "GG", "IM", "JE", "SJ"] +# Adding GB to the reconstructed base introduces 29 species absent from the frozen preset. diff --git a/dev/releases/mambo_v3/reconstruct_presets.py b/dev/releases/mambo_v3/reconstruct_presets.py new file mode 100644 index 0000000..71168d9 --- /dev/null +++ b/dev/releases/mambo_v3/reconstruct_presets.py @@ -0,0 +1,67 @@ +"""Reconstruct frozen regional membership from the pinned local Parquet metadata.""" + +import argparse +import json +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 + + +def region_counts(table, column, values): + import pyarrow as pa + import pyarrow.compute as pc + + selected = table.filter(pc.is_in(table[column], value_set=pa.array(values))) + if selected["speciesKey"].null_count: + raise ValueError("Selected metadata contains null species IDs") + counts = selected["speciesKey"].value_counts().to_pylist() + return {row["values"]: row["counts"] for row in counts} + + +def membership(counts, threshold): + return {species for species, count in counts.items() if count > threshold} + + +def reconstruct(metadata): + import pyarrow.parquet as pq + + config = tomllib.loads((HERE / "construction.toml").read_text()) + source = config["source"] + if metadata.stat().st_size != source["size"] or sha256(metadata) != source["sha256"]: + raise ValueError("Source Parquet differs from pinned metadata") + table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent"]) + if table.num_rows != source["rows"]: + raise ValueError("Unexpected metadata row count") + report = {"source_sha256": source["sha256"], "rows": table.num_rows, "regions": {}} + for name in ("europe", "north_europe"): + rule = config[name] + counts = region_counts(table, rule["column"], rule["values"]) + actual = membership(counts, rule["exclusive_minimum_rows"]) + expected = set((HERE / "presets" / f"{name}.classes").read_text().splitlines()) + if actual != expected: + raise ValueError(f"{name} differs: missing={len(expected - actual)}, extra={len(actual - expected)}") + stats = { + "selected_rows": sum(counts.values()), + "species_before_threshold": len(counts), + "species_after_threshold": len(actual), + } + if any(value != rule[key] for key, value in stats.items()): + raise ValueError(f"{name} count totals differ from reconstruction record") + report["regions"][name] = stats + northern = config["north_europe"] + base = set((HERE / "presets/north_europe.classes").read_text().splitlines()) + for label, extra in (("neutral_additions", northern["membership_neutral_additions"]), ("with_GB", ["GB"])): + counts = region_counts(table, "countryCode", northern["values"] + extra) + actual = membership(counts, northern["exclusive_minimum_rows"]) + report["regions"]["north_europe"][label] = {"extra": len(actual - base), "missing": len(base - actual)} + if label == "neutral_additions" and actual != base: + raise ValueError("Documented neutral countries change membership") + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + args = parser.parse_args() + print(json.dumps(reconstruct(args.metadata), indent=2)) diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 84d4530..30554ba 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -8,8 +8,10 @@ The [first input-audit increment](../dev/releases/mambo_v3/README.md) now pins a verifies 44 retrieved files, including candidate PyTorch/ONNX weights and historical MAMBO weights. It recovers both regional presets, confirms identical old/new class and parent mappings, and captures a small legacy output fixture. Its regional-scope -table distinguishes the established Europe threshold from unresolved geographic -provenance. Adapter compatibility and inference qualification remain outstanding. +table now includes reproducible Parquet filters: Europe uses the metadata continent +field; northern Europe has an exact country-filter reconstruction with documented +ambiguity for membership-neutral additions such as Ireland. Adapter compatibility +and inference qualification remain outstanding. Local evaluation will use Flemming; the large in-domain dataset remains on UCloud and must be evaluated there using the original supplied split. diff --git a/tests/releases/test_mambo_construction.py b/tests/releases/test_mambo_construction.py new file mode 100644 index 0000000..7cb2b22 --- /dev/null +++ b/tests/releases/test_mambo_construction.py @@ -0,0 +1,39 @@ +"""Regional selection must preserve row counts and the source geography field.""" + +import pytest + +from dev.releases.mambo_v3.reconstruct_presets import membership, region_counts + +pa = pytest.importorskip("pyarrow") + + +def test_continent_is_not_inferred_from_country_and_threshold_is_strict(): + table = pa.table( + { + "speciesKey": ["continental"] * 26 + ["boundary"] * 25 + ["island"] * 30, + "countryCode": ["ES"] * 81, + "continent": ["EUROPE"] * 51 + ["AFRICA"] * 30, + } + ) + counts = region_counts(table, "continent", ["EUROPE"]) + assert counts == {"continental": 26, "boundary": 25} + assert membership(counts, 25) == {"continental"} + assert membership(region_counts(table, "countryCode", ["ES"]), 25) == {"continental", "island"} + + +def test_country_union_counts_rows_across_splits_without_deduplication(): + table = pa.table( + { + "speciesKey": ["shared", "shared", "shared", "outside"], + "countryCode": ["DE", "NL", "DE", "GB"], + "set": ["0", "1", "1", "0"], + "gbifID": ["same", "other", "same", "third"], + } + ) + assert region_counts(table, "countryCode", ["DE", "NL"]) == {"shared": 3} + + +def test_missing_species_identity_fails(): + table = pa.table({"speciesKey": pa.array([None], type=pa.string()), "countryCode": ["DE"]}) + with pytest.raises(ValueError, match="null species"): + region_counts(table, "countryCode", ["DE"]) From 636a84bdeb21395b52319ee18bb83f4df0f4c441 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:18:56 +0200 Subject: [PATCH 014/221] release: add transparent overlapping geographic presets --- dev/releases/mambo_v3/README.md | 21 +- dev/releases/mambo_v3/build_presets.py | 191 + dev/releases/mambo_v3/preset-definitions.toml | 108 + dev/releases/mambo_v3/preset-manifest.toml | 157 + dev/releases/mambo_v3/presets/africa.classes | 1129 +++ dev/releases/mambo_v3/presets/arctic.classes | 6096 +++++++++++++++++ dev/releases/mambo_v3/presets/asia.classes | 5336 +++++++++++++++ .../mambo_v3/presets/australia.classes | 1907 ++++++ .../mambo_v3/presets/caribbean.classes | 1092 +++ .../mambo_v3/presets/central_america.classes | 2022 ++++++ .../mambo_v3/presets/east_asia.classes | 4447 ++++++++++++ dev/releases/mambo_v3/presets/japan.classes | 974 +++ .../mambo_v3/presets/mediterranean.classes | 2874 ++++++++ .../mambo_v3/presets/middle_east.classes | 1330 ++++ .../mambo_v3/presets/north_america.classes | 4551 ++++++++++++ dev/releases/mambo_v3/presets/oceania.classes | 2337 +++++++ .../mambo_v3/presets/south_america.classes | 1683 +++++ .../mambo_v3/presets/south_asia.classes | 1929 ++++++ .../mambo_v3/presets/southeast_asia.classes | 2031 ++++++ .../presets/subsaharan_africa.classes | 904 +++ .../mambo_v3/presets/tasmania.classes | 401 ++ docs/model-presets.md | 74 + docs/ucloud-model-release-roadmap.md | 5 + tests/releases/test_mambo_presets.py | 58 + 24 files changed, 41652 insertions(+), 5 deletions(-) create mode 100644 dev/releases/mambo_v3/build_presets.py create mode 100644 dev/releases/mambo_v3/preset-definitions.toml create mode 100644 dev/releases/mambo_v3/preset-manifest.toml create mode 100644 dev/releases/mambo_v3/presets/africa.classes create mode 100644 dev/releases/mambo_v3/presets/arctic.classes create mode 100644 dev/releases/mambo_v3/presets/asia.classes create mode 100644 dev/releases/mambo_v3/presets/australia.classes create mode 100644 dev/releases/mambo_v3/presets/caribbean.classes create mode 100644 dev/releases/mambo_v3/presets/central_america.classes create mode 100644 dev/releases/mambo_v3/presets/east_asia.classes create mode 100644 dev/releases/mambo_v3/presets/japan.classes create mode 100644 dev/releases/mambo_v3/presets/mediterranean.classes create mode 100644 dev/releases/mambo_v3/presets/middle_east.classes create mode 100644 dev/releases/mambo_v3/presets/north_america.classes create mode 100644 dev/releases/mambo_v3/presets/oceania.classes create mode 100644 dev/releases/mambo_v3/presets/south_america.classes create mode 100644 dev/releases/mambo_v3/presets/south_asia.classes create mode 100644 dev/releases/mambo_v3/presets/southeast_asia.classes create mode 100644 dev/releases/mambo_v3/presets/subsaharan_africa.classes create mode 100644 dev/releases/mambo_v3/presets/tasmania.classes create mode 100644 docs/model-presets.md create mode 100644 tests/releases/test_mambo_presets.py diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index bf63c40..b6542f9 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -39,11 +39,22 @@ backbone; they are not standalone offline baseline bundles. ## Regional scope and construction -The presets restrict possible species predictions. They are not geographic -boundaries, exhaustive regional checklists, locality detection, or guarantees -that an excluded species cannot occur in the region. They inherit the coverage, -sampling and taxonomy of the training data. Changing the allowed classes also -changes score normalization; confidence is conditional on the selected list. +The release-facing [preset catalogue](../../../docs/model-presets.md) defines every +preset, its geographic filter, species count and evidence threshold. It includes +Australia (including Tasmania), Tasmania-only, the requested overlapping American, +Asian, African, Mediterranean and Arctic regions, plus Oceania, Southeast Asia, +East Asia and the Middle East. The northern-European scope lists ambiguous +historical additions in parentheses. + +Presets aim to avoid most geographically nonsensical predictions while allowing +species that **can be found** in a region. They do not describe natural/native +distributions or where a species should occur. Introduced species, migrants and +vagrants are eligible; no establishment-status filter is applied. Exclusion does +not prove absence. Lists inherit metadata coverage and errors, sampling and +taxonomy. Changing allowed classes changes score normalization; confidence is +conditional on the selected list. The reconstruction details below concern the +two unchanged legacy presets; new filters and thresholds are defined in +[preset-definitions.toml](preset-definitions.toml). | Preset | Species | Construction and evidence | Limits | | --- | ---: | --- | --- | diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py new file mode 100644 index 0000000..8b119a3 --- /dev/null +++ b/dev/releases/mambo_v3/build_presets.py @@ -0,0 +1,191 @@ +"""Build or verify release preset assets and their public scope catalogue.""" + +import argparse +import hashlib +import json +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 +from dev.releases.mambo_v3.reconstruct_presets import membership + +ROOT = HERE.parents[2] + + +def select_region(table, rule): + """Union continent/country predicates, then apply explicit restrictions.""" + import pyarrow as pa + import pyarrow.compute as pc + + permitted = {"label", "scope", "countries", "continents", "excluded_countries", "state_province", "exclusive_minimum_rows"} + if unknown := set(rule) - permitted: + raise ValueError(f"Unknown region fields: {sorted(unknown)}") + mask = None + for key, column in (("countries", "countryCode"), ("continents", "continent")): + if values := rule.get(key): + part = pc.fill_null(pc.is_in(table[column], value_set=pa.array(values)), False) + mask = part if mask is None else pc.or_(mask, part) + if mask is None: + raise ValueError("Region requires countries or continents") + if values := rule.get("excluded_countries"): + mask = pc.and_(mask, pc.invert(pc.is_in(table["countryCode"], value_set=pa.array(values)))) + if values := rule.get("state_province"): + mask = pc.and_(mask, pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(values)), False)) + return table.filter(mask) + + +def ordered_membership(counts, threshold, vocabulary): + chosen = membership(counts, threshold) + if unknown := chosen - set(vocabulary): + raise ValueError(f"Selected species missing from model: {sorted(unknown)}") + return [label for label in vocabulary if label in chosen] + + +def recipe(rule): + parts = [] + for key, column in (("continents", "continent"), ("countries", "countryCode")): + if rule.get(key): + parts.append(f"`{column}` in `{', '.join(rule[key])}`") + result = " OR ".join(parts) + if rule.get("excluded_countries"): + result = f"({result}) AND country NOT in `{', '.join(rule['excluded_countries'])}`" + if rule.get("state_province"): + result = f"({result}) AND `stateProvince` in `{', '.join(rule['state_province'])}`" + return result + + +def build(metadata, evidence_root, write=False): + import pyarrow.parquet as pq + + construction = tomllib.loads((HERE / "construction.toml").read_text()) + source = construction["source"] + if metadata.stat().st_size != source["size"] or sha256(metadata) != source["sha256"]: + raise ValueError("Source Parquet differs from pinned metadata") + definitions_path = HERE / "preset-definitions.toml" + definitions = tomllib.loads(definitions_path.read_text()) + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + manifest_item = next(item for item in inventory["artifacts"] if item["path"].endswith("models/onnx-fp32/manifest.json")) + model_manifest = evidence_root / manifest_item["path"] + if sha256(model_manifest) != manifest_item["sha256"]: + raise ValueError("Model manifest differs from pinned source") + mapping = json.loads(model_manifest.read_text())["classifiers"][0]["metadata"]["cls2idx"]["0"] + if sorted(mapping.values()) != list(range(len(mapping))): + raise ValueError("Model species indices are not contiguous") + vocabulary = sorted(mapping, key=mapping.get) + table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent", "stateProvince"]) + if table.num_rows != source["rows"] or table["speciesKey"].null_count: + raise ValueError("Unexpected metadata rows or null species IDs") + threshold = definitions["exclusive_minimum_rows"] + outputs = {} + manifest = [ + "schema_version = 1", + f'source_sha256 = "{source["sha256"]}"', + f'model_manifest_sha256 = "{manifest_item["sha256"]}"', + f'definitions_sha256 = "{sha256(definitions_path)}"', + f"exclusive_minimum_rows = {threshold}", + ] + documentation = [ + "# Model preset scope", + "", + "Generated release catalogue: edit `dev/releases/mambo_v3/preset-definitions.toml`, then use the build command below.", + "", + "These overlapping deployment presets aim to avoid most geographically nonsensical predictions while allowing species " + "that **can be found** in a region. They do not describe native or natural distributions, or where species should occur. " + "Recorded introduced species, migrants and vagrants are eligible: no native-status or establishment filter is applied. " + "Exclusion is not evidence that a species cannot occur there. Country codes are ISO alpha-2 metadata values.", + "", + "Each geographic preset applies the minimum row count shown below. " + "Counts use all existing splits, including held-out rows, without further deduplication. " + "Each row counts once even if it matches both a country and a continent predicate. " + "Full uses all model species without a regional threshold. Lists retain the model's species order.", + "", + "Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope " + "have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. " + "These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending.", + "", + "## Presets", + "", + "| ID | Species | Minimum rows per species | Selected rows | Geographic scope |", + "| --- | ---: | ---: | ---: | --- |", + f"| `full` | {len(vocabulary):,} | — | — | All species in the pinned model. |", + ] + summaries = {} + for name, rule in definitions["presets"].items(): + region_threshold = rule.get("exclusive_minimum_rows", threshold) + selected = select_region(table, rule) + counts = {row["values"]: row["counts"] for row in selected["speciesKey"].value_counts().to_pylist()} + labels = ordered_membership(counts, region_threshold, vocabulary) + if not labels: + raise ValueError(f"Empty preset: {name}") + data = ("\n".join(labels) + "\n").encode() + digest = hashlib.sha256(data).hexdigest() + if name in inventory["presets"] and digest != inventory["presets"][name]["sha256"]: + raise ValueError(f"Legacy preset changed: {name}") + outputs[HERE / "presets" / f"{name}.classes"] = data + manifest.extend( + [ + "", + f"[presets.{name}]", + f'path = "presets/{name}.classes"', + f"count = {len(labels)}", + f"exclusive_minimum_rows = {region_threshold}", + f"selected_rows = {selected.num_rows}", + f"species_before_threshold = {len(counts)}", + f'sha256 = "{digest}"', + ] + ) + documentation.append(f"| `{name}` | {len(labels):,} | {region_threshold + 1} | {selected.num_rows:,} | {rule['scope']} |") + summaries[name] = len(labels) + documentation.extend(["", "## Exact metadata filters", ""]) + for name, rule in definitions["presets"].items(): + documentation.extend([f"- **{name}** ({rule['label']}): {recipe(rule)}."]) + documentation.extend( + [ + "", + "## Interpretation and reproducibility", + "", + "Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. " + "Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. " + "Arctic is a broad northern-country proxy and includes southern records from those countries. " + "Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation.", + "", + "Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes " + "Australian records with blank or different state values. " + "Overlapping presets are expected; membership in one does not exclude another.", + "", + "Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest:", + "", + "```sh", + ".venv/bin/python -m dev.releases.mambo_v3.build_presets \\", + f" {source['path']} \\", + " --evidence-root local-evidence/mambo-v3", + "```", + "", + "The default checks committed assets, hashes, counts and this catalogue against fresh reconstruction. " + "Use `--write` after an intentional definition update to regenerate them. Legacy preset hashes must remain unchanged. " + "Published preset membership changes require a new release/revision and an added/removed-ID report.", + "", + "[Machine-readable definitions](../dev/releases/mambo_v3/preset-definitions.toml), " + "[generated hashes and counts](../dev/releases/mambo_v3/preset-manifest.toml), " + "[source provenance](../dev/releases/mambo_v3/construction.toml), " + "[legacy reconstruction details](../dev/releases/mambo_v3/README.md#regional-scope-and-construction).", + "", + ] + ) + outputs[HERE / "preset-manifest.toml"] = ("\n".join(manifest) + "\n").encode() + outputs[ROOT / "docs/model-presets.md"] = "\n".join(documentation).encode() + for path, data in outputs.items(): + if write: + path.write_bytes(data) + elif not path.exists() or path.read_bytes() != data: + raise ValueError(f"Preset output missing or stale: {path}") + return summaries + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + parser.add_argument("--evidence-root", type=Path, required=True) + parser.add_argument("--write", action="store_true") + args = parser.parse_args() + print(json.dumps(build(args.metadata, args.evidence_root, args.write), indent=2)) diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml new file mode 100644 index 0000000..8439c1c --- /dev/null +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -0,0 +1,108 @@ +schema_version = 1 +exclusive_minimum_rows = 0 +# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union. +# Counts include all metadata splits, without additional deduplication. + +[presets.europe] +exclusive_minimum_rows = 25 +label = "Europe (legacy)" +continents = ["EUROPE"] +scope = "Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries." + +[presets.north_europe] +exclusive_minimum_rows = 25 +label = "Northern Europe (legacy)" +countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged)." + +[presets.australia] +label = "Australia including Tasmania" +countries = ["AU"] +scope = "All Australian records, including Tasmania and other territories recorded under AU; not all Oceania." + +[presets.tasmania] +label = "Tasmania only" +countries = ["AU"] +state_province = ["Tasmania"] +scope = "Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded." + +[presets.north_america] +label = "North America" +countries = ["CA", "US", "MX", "GL", "BM", "PM"] +scope = "Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland." + +[presets.central_america] +label = "Central America" +countries = ["MX", "BZ", "GT", "HN", "SV", "NI", "CR", "PA"] +scope = "Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America." + +[presets.south_america] +label = "South America" +continents = ["SOUTH_AMERICA"] +countries = ["AR", "BO", "BR", "CL", "CO", "EC", "FK", "GF", "GY", "PY", "PE", "SR", "UY", "VE", "CR", "PA"] +scope = "All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America." + +[presets.caribbean] +label = "Caribbean" +countries = ["AG", "AI", "AW", "BB", "BL", "BQ", "BS", "CU", "CW", "DM", "DO", "GD", "GP", "HT", "JM", "KN", "KY", "LC", "MF", "MQ", "MS", "PR", "SX", "TC", "TT", "VC", "VG", "VI", "BM", "BZ", "GY", "SR", "GF"] +scope = "Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast." + +[presets.south_asia] +label = "South Asia" +countries = ["AF", "BD", "BT", "IN", "MV", "NP", "PK", "LK", "MM", "IR"] +scope = "Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap." + +[presets.asia] +label = "Asia" +continents = ["ASIA"] +countries = ["AF", "AM", "AZ", "BH", "BD", "BT", "BN", "KH", "CN", "CY", "GE", "HK", "IN", "ID", "IR", "IQ", "IL", "JP", "JO", "KZ", "KP", "KR", "KW", "KG", "LA", "LB", "MO", "MY", "MV", "MN", "MM", "NP", "OM", "PK", "PS", "PH", "QA", "RU", "SA", "SG", "LK", "SY", "TW", "TJ", "TH", "TL", "TR", "TM", "AE", "UZ", "VN", "YE"] +scope = "All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent." + +[presets.japan] +label = "Japan" +countries = ["JP"] +scope = "All records assigned countryCode JP, including islands." + +[presets.africa] +label = "Africa" +continents = ["AFRICA"] +countries = ["DZ", "AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", "CD", "CI", "DJ", "EG", "GQ", "ER", "SZ", "ET", "GA", "GM", "GH", "GN", "GW", "KE", "LS", "LR", "LY", "MG", "MW", "ML", "MR", "MU", "YT", "MA", "MZ", "NA", "NE", "NG", "RE", "RW", "SH", "ST", "SN", "SC", "SL", "SO", "ZA", "SS", "SD", "TZ", "TG", "TN", "UG", "EH", "ZM", "ZW"] +scope = "All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included." + +[presets.subsaharan_africa] +label = "Sub-Saharan Africa (broad)" +continents = ["AFRICA"] +countries = ["AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", "CD", "CI", "DJ", "GQ", "ER", "SZ", "ET", "GA", "GM", "GH", "GN", "GW", "KE", "LS", "LR", "MG", "MW", "ML", "MR", "MU", "YT", "MZ", "NA", "NE", "NG", "RE", "RW", "SH", "ST", "SN", "SC", "SL", "SO", "ZA", "SS", "SD", "TZ", "TG", "UG", "ZM", "ZW"] +excluded_countries = ["DZ", "EG", "LY", "MA", "TN", "EH"] +scope = "Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon." + +[presets.mediterranean] +label = "Mediterranean (broad)" +countries = ["AL", "DZ", "BA", "HR", "CY", "EG", "FR", "GR", "IL", "IT", "LB", "LY", "MT", "MC", "ME", "MA", "PS", "SI", "ES", "SY", "TN", "TR", "PT", "GI", "AD", "SM", "VA", "MK", "BG", "RS", "JO"] +scope = "Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones." + +[presets.arctic] +label = "Arctic / broad northern-country scope" +countries = ["CA", "US", "GL", "IS", "FO", "NO", "SJ", "SE", "FI", "AX", "RU"] +scope = "Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter." + +[presets.oceania] +label = "Oceania" +continents = ["OCEANIA"] +countries = ["AU", "NZ", "PG", "FJ", "SB", "VU", "NC", "PF", "WS", "AS", "TO", "TV", "KI", "NR", "FM", "MH", "PW", "GU", "MP", "CK", "NU", "TK", "WF", "PN", "NF"] +scope = "All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap." + +[presets.southeast_asia] +label = "Southeast Asia" +countries = ["BN", "KH", "ID", "LA", "MY", "MM", "PH", "SG", "TH", "TL", "VN", "PG"] +scope = "Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional." + +[presets.east_asia] +label = "East Asia" +countries = ["CN", "HK", "MO", "TW", "JP", "KP", "KR", "MN", "RU"] +scope = "China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters." + +[presets.middle_east] +label = "Middle East" +countries = ["TR", "CY", "SY", "LB", "IL", "PS", "JO", "IQ", "IR", "KW", "SA", "BH", "QA", "AE", "OM", "YE", "EG", "AM", "AZ", "GE", "AF", "PK"] +scope = "Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia." diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml new file mode 100644 index 0000000..5d5fc2f --- /dev/null +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -0,0 +1,157 @@ +schema_version = 1 +source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" +model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" +definitions_sha256 = "9aecb12cf91616a7fecba830f5d34bbed7decad1876a914a705e2b86663389b9" +exclusive_minimum_rows = 0 + +[presets.europe] +path = "presets/europe.classes" +count = 3014 +exclusive_minimum_rows = 25 +selected_rows = 2079617 +species_before_threshold = 3132 +sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + +[presets.north_europe] +path = "presets/north_europe.classes" +count = 1977 +exclusive_minimum_rows = 25 +selected_rows = 768497 +species_before_threshold = 2291 +sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + +[presets.australia] +path = "presets/australia.classes" +count = 1907 +exclusive_minimum_rows = 0 +selected_rows = 465726 +species_before_threshold = 1907 +sha256 = "438894723315284f8c855a22593bceec25018ffa2a7844f67f391fb9bef258e7" + +[presets.tasmania] +path = "presets/tasmania.classes" +count = 401 +exclusive_minimum_rows = 0 +selected_rows = 4457 +species_before_threshold = 401 +sha256 = "b3a80867c42949d95a4780092bf26b7ff094adf18bcc59f2de86d5993076eba8" + +[presets.north_america] +path = "presets/north_america.classes" +count = 4551 +exclusive_minimum_rows = 0 +selected_rows = 2300391 +species_before_threshold = 4551 +sha256 = "cd026fbfa8495f9da227044884fb544af0fb2126033274d171cb2d6a5a54b567" + +[presets.central_america] +path = "presets/central_america.classes" +count = 2022 +exclusive_minimum_rows = 0 +selected_rows = 210173 +species_before_threshold = 2022 +sha256 = "aa89d57e723b5acd33ce82323853a219a85534f40d7cc44e6ea3df9726fe8908" + +[presets.south_america] +path = "presets/south_america.classes" +count = 1683 +exclusive_minimum_rows = 0 +selected_rows = 257026 +species_before_threshold = 1683 +sha256 = "d43148782784345fb1ba4842edf1d95b1f85fd0440729028237c33d3faa17acf" + +[presets.caribbean] +path = "presets/caribbean.classes" +count = 1092 +exclusive_minimum_rows = 0 +selected_rows = 28652 +species_before_threshold = 1092 +sha256 = "3434f6ae528d1b03502ecb4a6aaadb6931f56d6158e950f3267c2160fd208523" + +[presets.south_asia] +path = "presets/south_asia.classes" +count = 1929 +exclusive_minimum_rows = 0 +selected_rows = 177926 +species_before_threshold = 1929 +sha256 = "760f92644af8612f4b534f78a89c758e90506c52f3c793562e14991314bfdf6f" + +[presets.asia] +path = "presets/asia.classes" +count = 5336 +exclusive_minimum_rows = 0 +selected_rows = 1033931 +species_before_threshold = 5336 +sha256 = "f64bc11f9ac7f6fc26b21b3d595f0643390cabd8411d1380040e117a3dec0ebf" + +[presets.japan] +path = "presets/japan.classes" +count = 974 +exclusive_minimum_rows = 0 +selected_rows = 30076 +species_before_threshold = 974 +sha256 = "013efd64ada461805a007c203f6dc5ce48827c1bc449b0772f390fef8a403b1b" + +[presets.africa] +path = "presets/africa.classes" +count = 1129 +exclusive_minimum_rows = 0 +selected_rows = 149267 +species_before_threshold = 1129 +sha256 = "7391792f70c42282eada6fabd74bbba239587d6d49a991117ee6ef7e05942cbf" + +[presets.subsaharan_africa] +path = "presets/subsaharan_africa.classes" +count = 904 +exclusive_minimum_rows = 0 +selected_rows = 144918 +species_before_threshold = 904 +sha256 = "b9fa770116df2265519d83634a2be05a694073b00d3cc89ff94880b1622752aa" + +[presets.mediterranean] +path = "presets/mediterranean.classes" +count = 2874 +exclusive_minimum_rows = 0 +selected_rows = 660065 +species_before_threshold = 2874 +sha256 = "2fd31151b358bb5c049184d756bd7719ed907fe6b209d1a625c42082ada3fa10" + +[presets.arctic] +path = "presets/arctic.classes" +count = 6096 +exclusive_minimum_rows = 0 +selected_rows = 2496358 +species_before_threshold = 6096 +sha256 = "e6307e5a7ea2899e5a98ebae976ce147a2870914bcccea7fcb14908f8dbec876" + +[presets.oceania] +path = "presets/oceania.classes" +count = 2337 +exclusive_minimum_rows = 0 +selected_rows = 584477 +species_before_threshold = 2337 +sha256 = "cb0ae7907166a0d594c3426795de8f50eaeba551f2b78a599e2c394fd65e61ff" + +[presets.southeast_asia] +path = "presets/southeast_asia.classes" +count = 2031 +exclusive_minimum_rows = 0 +selected_rows = 172424 +species_before_threshold = 2031 +sha256 = "5ee08bf46f253eecd7a99afe25d126c3c13ea46c118a1bdb6b5d7fac4834b1e9" + +[presets.east_asia] +path = "presets/east_asia.classes" +count = 4447 +exclusive_minimum_rows = 0 +selected_rows = 659767 +species_before_threshold = 4447 +sha256 = "f8c292f1a907747c2254c9122e234df8315d979d65d01031d877befa737fdb8d" + +[presets.middle_east] +path = "presets/middle_east.classes" +count = 1330 +exclusive_minimum_rows = 0 +selected_rows = 24805 +species_before_threshold = 1330 +sha256 = "796dbb7a2a99bea640e9ff67845ca89bd2ca59774c150090720b75caed05321b" diff --git a/dev/releases/mambo_v3/presets/africa.classes b/dev/releases/mambo_v3/presets/africa.classes new file mode 100644 index 0000000..3b5c832 --- /dev/null +++ b/dev/releases/mambo_v3/presets/africa.classes @@ -0,0 +1,1129 @@ +1992315 +6113873 +1732087 +5101590 +1732660 +1732955 +1733755 +1734704 +6113959 +11529292 +1845270 +1845574 +1845616 +4528100 +1846849 +1847111 +9546514 +1848219 +9868978 +1849477 +1849924 +1850184 +1850640 +1850781 +5122121 +1851347 +1852165 +5119338 +1845952 +1839146 +1841261 +1831458 +11513018 +1763976 +1766612 +1767883 +1769739 +1771455 +1772352 +1772447 +1772689 +4532500 +5110546 +8979264 +1776265 +1776268 +4687991 +1778430 +5111054 +1780149 +8193562 +1783882 +1786190 +1786980 +1786984 +1786985 +1787009 +1788553 +6116754 +1789057 +1789498 +1789805 +1790287 +1790692 +1790816 +1791715 +1792210 +5113330 +1795074 +5113925 +1796984 +1797276 +1797333 +1797349 +1797542 +4532473 +5884245 +6117055 +6117124 +1798449 +1798481 +1798504 +6115283 +1798802 +4301310 +4532352 +6115437 +8793873 +1803148 +1803163 +1803197 +1804337 +8865876 +1805110 +1806871 +1806913 +1807969 +1808172 +1808359 +1809158 +1809159 +5117189 +1814552 +1814653 +8916247 +5117776 +5117791 +5117805 +6122301 +1819050 +1819699 +9331464 +1819928 +6122092 +1820406 +6121912 +1820802 +1820948 +1821012 +1821436 +6122103 +10503495 +8881513 +4532549 +8148822 +12017078 +6112547 +6112472 +5115381 +5115854 +1774826 +5116504 +8723161 +5108808 +1788635 +1781413 +1780869 +1780897 +1794268 +1803590 +1803593 +1819320 +1772374 +6115388 +1816685 +1774600 +1768626 +1803544 +1803545 +1817973 +5111643 +1804532 +1813460 +1807634 +1782645 +1768459 +5113036 +1821547 +1821581 +1821684 +1821856 +1768212 +5118223 +1820573 +6116073 +1816775 +1803306 +4687933 +6116646 +6116659 +6116661 +6116669 +6116674 +4532453 +1814877 +11754729 +1781503 +6115504 +1785072 +1785105 +1765997 +4687389 +5884188 +1809585 +1807924 +1782310 +1777517 +6115973 +1860857 +1840483 +1831752 +1852831 +10308365 +5123339 +5123419 +5123474 +1869595 +1870450 +1870988 +1871252 +1871264 +1871407 +8766638 +1871451 +4531365 +1871754 +1871783 +7673242 +1872850 +1872873 +1872901 +1873051 +1873079 +1873215 +1873411 +4531237 +1873890 +1875409 +1875478 +1875687 +4531284 +1875940 +1875958 +1876542 +1876922 +9111961 +5126052 +1877788 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +1878470 +1878490 +1888454 +1890024 +5884888 +1877035 +5125780 +1871504 +4525777 +4525846 +1941330 +10309794 +12231385 +1736623 +1737131 +1737491 +1737509 +4530608 +7466487 +1739833 +1740524 +1740623 +8094357 +1740762 +1740797 +1741258 +1741341 +5103451 +11846897 +1744526 +1745781 +1921064 +10581870 +1921650 +10858809 +11374171 +11378618 +1922063 +1922064 +1922244 +1922291 +1922468 +1922572 +1922584 +1922679 +1922689 +1922694 +1922701 +1923465 +1923473 +1923796 +1923809 +1924082 +10656713 +1924392 +1924429 +8023645 +8951523 +1924713 +5138701 +1925410 +1925609 +1925615 +1925676 +1925693 +1925694 +1925801 +1925918 +1926324 +1926385 +1926530 +1926531 +1926539 +1926546 +1926550 +1926817 +1927313 +1927633 +11667997 +1927943 +1927955 +1927979 +1928070 +1928076 +5139040 +1928389 +5139188 +5139201 +1928746 +1929059 +1929697 +1930904 +1930916 +1930923 +1930931 +4535106 +1931046 +1931403 +1931437 +1931788 +1932172 +1932177 +1932302 +1932332 +1932354 +8833509 +1932393 +1932411 +7346444 +8177775 +1932580 +1932629 +5139954 +5140006 +1932751 +1932752 +1932753 +1932882 +1932976 +5140244 +7634721 +9954885 +1933583 +1933647 +1933649 +1926166 +5138841 +5138921 +7964910 +1933204 +1752327 +1752805 +5105584 +1919181 +1919194 +1919210 +1919213 +1919214 +1919223 +1919333 +4535280 +4535285 +7981372 +1919346 +1919660 +1919663 +1919665 +1919703 +1919924 +1919929 +1919930 +1919966 +1920181 +1920258 +5137790 +5137799 +5137827 +5137828 +5137849 +5805954 +1920348 +1920353 +1920356 +1920359 +1920362 +1920363 +1920369 +1920370 +1920374 +1920377 +1920378 +1920379 +1920381 +1920390 +1920395 +1920401 +1920404 +1920405 +4699245 +5137863 +1920496 +1920506 +1920509 +5137926 +5137946 +1920709 +4535271 +5137988 +5137996 +5137998 +1920795 +1920815 +1920816 +5137612 +5137663 +1920218 +1750326 +5104903 +1868884 +1869043 +1869238 +1869278 +1869286 +1955202 +1955694 +1956897 +1957266 +1957286 +1957611 +8172949 +1959799 +1959839 +1960105 +1961013 +1961025 +1962265 +10004969 +4302252 +1963168 +1964076 +1964189 +1964195 +1964836 +1966255 +1966351 +1967025 +1967209 +1967265 +1967324 +1967438 +1967606 +1969581 +1969958 +5144691 +5144805 +5144880 +5144900 +5144976 +5145075 +5145255 +5145396 +5145468 +5145502 +5145842 +8014296 +1971852 +1973171 +1973323 +1973393 +7996464 +5146510 +5146611 +5146693 +5146774 +5146837 +5146908 +5147039 +5147043 +5147046 +5147058 +5147071 +5147099 +5147212 +5147287 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147560 +8067894 +8160782 +1975903 +5147923 +1978017 +5148264 +1980521 +1980525 +1980533 +1981160 +1981202 +1982221 +1982267 +1982779 +1983039 +1983062 +1983393 +1983525 +1983528 +1983888 +1984033 +1985742 +1986157 +9137631 +4525093 +4525097 +6118530 +6214843 +4524223 +1988019 +1988064 +1991532 +1992066 +8180900 +5769062 +11654024 +7507369 +1989594 +4523461 +4525034 +4524376 +4524541 +4523519 +4524929 +6119299 +6119323 +6119359 +6119488 +9220953 +5149664 +5149787 +1987602 +1954382 +11794114 +1942762 +1942790 +1942793 +1943236 +8277078 +8073674 +1944234 +1944910 +1945535 +1945571 +1945587 +1945786 +1945877 +1945878 +1945980 +1946037 +1946660 +1946661 +1946738 +1947112 +1947113 +1947117 +5142130 +5142160 +1948371 +1948994 +5142338 +5142352 +1949784 +1949954 +1950156 +1950877 +7633472 +1948916 +1758839 +1759083 +5108619 +1761439 +1761735 +1762383 +5109646 +1764174 +4534245 +4534250 +4534275 +11797244 +5109843 +5109848 +5109855 +5109931 +8352161 +1766072 +4534691 +9105656 +5772169 +5772171 +5772172 +5772178 +5772206 +1768042 +1768048 +1768815 +1770416 +1774470 +1774797 +6115946 +1774878 +1775329 +5110818 +5110858 +4534299 +5111147 +5772222 +1779258 +1780049 +1780926 +1782560 +1783016 +1783777 +1784349 +1784591 +1785145 +1785181 +1785185 +1785329 +1785361 +1786360 +1787264 +1787279 +1787438 +1787610 +1787770 +1788734 +1789076 +4533882 +4534166 +4534194 +1789695 +1789957 +1790364 +1791758 +1792418 +1792996 +1793212 +1794507 +1794534 +1795068 +4532908 +1795483 +4532700 +9803522 +1796451 +1799135 +1800004 +7981386 +4532811 +4532269 +6116341 +6116368 +8021109 +6116899 +1763072 +5109259 +5109345 +5109407 +5772063 +4534675 +4534681 +4534683 +4534686 +6116440 +8108800 +1770772 +1770821 +1771040 +1771245 +4533714 +4533720 +1765751 +5113853 +5108660 +5108671 +11714235 +11819666 +1797793 +1797864 +1797942 +1797965 +4532203 +4532206 +4532216 +4532239 +4532264 +4532266 +6115772 +6115793 +6115822 +1782267 +1767302 +8363507 +10458175 +1824113 +1824131 +5118892 +5118996 +5119183 +1827775 +10023821 +1892544 +1892554 +1892555 +1892621 +11688586 +5806166 +10587253 +1892811 +1892814 +5127822 +1893558 +1893562 +1893901 +1894088 +4535632 +8049830 +4535827 +4535809 +4535819 +9519321 +1895956 +1896547 +1896600 +1896603 +5128545 +1897904 +1897946 +1897965 +1897970 +1897972 +1898002 +1898017 +10114575 +1898286 +1898290 +4299368 +4299370 +7346344 +1899071 +1899144 +1899164 +1899198 +1900053 +1900055 +1901781 +1901782 +1901850 +11546465 +11623814 +11726907 +11841763 +5130335 +5130347 +5130392 +5130393 +5130396 +5130448 +5130464 +5130467 +5130487 +5130502 +5130542 +1903009 +5130814 +1903661 +1904206 +1905383 +1906006 +1906014 +1906030 +1906063 +1906117 +5132523 +5132529 +5132540 +5132545 +5132550 +5132591 +5132713 +1906552 +8208583 +1906604 +1906621 +1906679 +10569879 +11378273 +5132839 +1907399 +4535754 +1908356 +8727750 +10656625 +1909398 +1909818 +1911461 +5133610 +10203260 +1912506 +8964866 +5134098 +5134301 +1915499 +11372793 +11375508 +12301192 +12357826 +12358748 +1909736 +5135573 +5135944 +5136059 +5136113 +5136200 +5136306 +1916352 +1916554 +1918207 +1918212 +1918632 +1918688 +1918776 +4535539 +5137397 +7988274 +8404037 +9902073 +7762841 +10717680 +5131347 +5131442 +5131540 +5133088 +7642610 +5135513 +10873137 +1896957 +5128597 +5128825 +5128984 +5129091 +5129190 +9087922 +1910496 +1910501 +1910628 +1910629 +1910663 +1899737 +6229058 +7934873 +8393082 +1952816 +1842097 +4301036 +4529738 +6122527 +1730978 +1731263 +1878656 +1878804 +1878951 +4531506 +1879001 +1879227 +1879340 +1879408 +1879427 +1879452 +5126204 +1879471 +1879490 +1879655 +1879691 +1880011 +5126637 +1880408 +1880865 +1880907 +1881089 +1881126 +1881147 +1881151 +5126668 +9819403 +1881303 +1881362 +1881418 +1882110 +1882210 +1882884 +1882905 +1882941 +1882960 +1882965 +1883067 +1883124 +1883386 +1883458 +5127094 +1884051 +1884061 +1884437 +1884449 +1884479 +6120980 +1884774 +1884844 +1884909 +4532146 +1885024 +1885262 +1885745 +1885764 +6120861 +1885836 +1885931 +1885994 +1886015 +1886088 +1886104 +1886251 +1886579 +1886648 +1886729 +7562564 +1887054 +8955839 +4531670 +1887694 +1888047 +1888346 +1888484 +1888915 +1889071 +1889074 +1889272 +1889277 +1889356 +1889370 +1889543 +9228024 +1890287 +1890335 +7543006 +1890346 +1890410 +1890534 +1890576 +1890670 +1890772 +1890898 +1891167 +1891171 +1891217 +4532022 +4532024 +1891583 +8986756 +1892242 +1892456 +1892476 +9181627 +5771877 +6133232 +6121010 +6121218 +6133158 +8876855 +5126680 +1886374 +1889833 +5127644 +5127656 +5127669 +5127675 +5802339 +6121184 +8218441 +1886207 +1883885 +4532150 +4532160 +1831136 +1858674 +1858930 +1859046 +1859285 +1859932 +1860063 +5123180 +6097269 +1866249 +1866252 +1866262 +1866421 +5124813 +1866980 +1867009 +1867014 +1867295 +1867312 +1867673 +1867744 +1867749 +1867750 +1867751 +1868014 +1868049 +1868060 +11414590 +11464362 +5120278 +1861433 +1861494 +1861510 +1861522 +1861544 +1861584 +1861592 +1861644 +5123636 +1861673 +1862293 +1862311 +1862394 +1862401 +1862433 +1862449 +1862580 +1862692 +1862719 +1862765 +1862989 +1863034 +1863282 +1863544 +1863640 +9178932 +5124071 +5124088 +5124093 +5124109 +1864329 +1864358 +1864576 +1864652 +5124352 +1992634 +1992956 +1992969 +6132725 +5119506 +1830437 +1830457 +1830459 +7761138 +8348761 +10055273 +1856105 +1857068 +1857143 +1857577 +1857581 +1857626 +1857829 +1858163 +1858283 +1937643 +1937667 +1937702 +1937711 +1937723 +1937849 +1937959 +1938069 +1938125 +1938166 +8225376 +5141170 +5141195 +5141216 +5141234 +5141248 +5141250 +4690079 +5141297 +1939314 +5770913 +4685980 +1800642 +5114409 +4534796 +4534757 +1801051 +6112634 +1802662 +1802850 +1802868 +1803022 +1803025 +1803060 +9485481 diff --git a/dev/releases/mambo_v3/presets/arctic.classes b/dev/releases/mambo_v3/presets/arctic.classes new file mode 100644 index 0000000..114f17f --- /dev/null +++ b/dev/releases/mambo_v3/presets/arctic.classes @@ -0,0 +1,6096 @@ +12170988 +1934693 +1868535 +10100176 +10517417 +1992315 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1860736 +1732063 +5101556 +5101559 +1732416 +1732452 +1732521 +1732565 +1732662 +1732685 +1732717 +5101640 +1732901 +1733154 +1733258 +1733484 +1733525 +4525266 +4525273 +5101678 +5101745 +5101763 +5101811 +5715280 +5715281 +5769191 +1734384 +1734453 +5102242 +5102304 +5102324 +5102335 +5102365 +5102396 +1734704 +1734826 +5102287 +1833475 +4302388 +1845270 +1845279 +1845314 +1845329 +1845335 +1845368 +1845385 +1845442 +1845448 +1845455 +1845502 +1845513 +1845548 +1845565 +1845604 +1845605 +1845607 +4529566 +4528100 +1846313 +1846351 +1846439 +5121847 +5121850 +1846604 +1846657 +1846715 +1846729 +1846849 +1846860 +1846914 +1846916 +1846941 +1846945 +1846971 +1846992 +1847013 +1847059 +1847061 +1847064 +1847068 +1847097 +1847111 +1847149 +1847225 +1847249 +1847274 +1847308 +1847343 +1847392 +1847407 +1847426 +1847457 +1847484 +1847498 +4528547 +1847568 +1847572 +9262981 +8559137 +1847919 +1847930 +1847944 +1847956 +10427568 +1848114 +1848150 +10450501 +1848219 +1848259 +1848272 +1848273 +1848274 +1848295 +1848312 +1848322 +1848325 +1848356 +1848378 +1848426 +4528539 +1848490 +1848505 +1848596 +1848610 +1848636 +1848639 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848753 +1848864 +1848868 +1849104 +9973217 +1849267 +1849273 +1849284 +1849294 +1849457 +1849470 +1849477 +11052757 +11080751 +1849531 +1849552 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850156 +1850184 +1850225 +1850238 +1850246 +11576787 +1850302 +1850321 +1850335 +1850386 +1850394 +1850450 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850575 +1850585 +1850589 +1850597 +4528529 +1850673 +1850690 +1850722 +1850729 +1850771 +1850773 +1850774 +1850781 +1850798 +1850868 +1850884 +1850908 +1850922 +1850923 +1850962 +1850971 +1851000 +1851002 +1851010 +1851011 +8986624 +5122037 +5122062 +5122086 +5122113 +5122121 +5122131 +1851203 +1851213 +1851220 +1851237 +1851243 +1851300 +1851337 +1851347 +1851453 +1851462 +1851555 +1851670 +1851714 +1851750 +5122206 +1851828 +1851845 +4527972 +1852150 +1852165 +1852177 +1852311 +1852320 +1852382 +1852430 +9123440 +11287091 +1848212 +1848213 +1848920 +1849498 +11430021 +1829533 +1829588 +1829659 +1829612 +1829776 +1829785 +1829799 +1829823 +1829974 +8779506 +4525354 +10508467 +12031071 +1828637 +11642411 +1829021 +1829029 +6097236 +5769272 +7623903 +10053809 +10176413 +10067382 +5879654 +7448174 +4525610 +1861395 +1835460 +1845793 +1845866 +1845962 +1845965 +1846035 +1846052 +9159662 +1846505 +10594478 +8503184 +1834710 +1839094 +1841261 +5119890 +1830838 +1830843 +1830122 +1830125 +1830131 +1830137 +1830144 +1830147 +1830152 +1830186 +1830191 +1830194 +1830202 +1830203 +1830207 +1830221 +1830229 +1830241 +1830243 +1830262 +1830266 +1830271 +1830284 +1830293 +4525476 +4525487 +9998920 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11571523 +7908344 +1758860 +1758861 +1758866 +1760384 +1760385 +1760396 +1760397 +1760398 +1760400 +5108951 +1760927 +1761101 +1761102 +1761110 +1761111 +1761838 +1762151 +1762286 +9553692 +1762474 +8331687 +8379616 +9354496 +9546910 +1764525 +1764531 +1765097 +1765182 +5110044 +1766839 +1766845 +1766880 +1767031 +1767320 +1767508 +9384861 +1768283 +1769000 +1769103 +1769336 +1769841 +1769897 +1770038 +1770044 +1770380 +1770383 +1770384 +1770385 +11728240 +7396517 +5110297 +5110299 +5110305 +7701550 +8837162 +8963926 +9256436 +9279670 +9283228 +9323382 +9327042 +9395422 +9399145 +9440644 +9560782 +9564612 +9607447 +9636442 +1771846 +1771848 +1771859 +5110326 +1772260 +1772427 +1772428 +1772716 +9237599 +9424441 +9534690 +1772793 +4532500 +5110492 +1774907 +9287097 +1775980 +1777024 +1777034 +1777052 +1777075 +8345991 +1777179 +1777631 +9257908 +1777695 +1777942 +1778548 +1778549 +1778551 +1778555 +9423248 +9610080 +1779740 +1780150 +1781029 +1781038 +7672864 +9305011 +9390065 +9630748 +1781944 +1781946 +5112051 +5112053 +5112060 +5112068 +5112078 +5112080 +9008379 +1782208 +1782214 +1783365 +1785913 +1785916 +9520799 +1786219 +1786912 +1786913 +1786980 +1786985 +10860091 +1787106 +11495556 +5112542 +1788278 +11890681 +7346446 +1788891 +1789190 +1789191 +1789193 +1789794 +1790230 +1790240 +1790246 +1790248 +1790257 +1790258 +1790268 +1790274 +1790281 +1790287 +5112798 +1790692 +1790787 +1790816 +1790832 +1790937 +1790945 +7785540 +9345545 +1791151 +5112892 +5112900 +5112908 +5112911 +5112915 +5112917 +5112923 +5112927 +5112940 +5112944 +5112947 +5112959 +5112960 +5112961 +5112963 +5112968 +5112990 +1791372 +1791698 +5113078 +5113084 +5113234 +1792276 +9382044 +1792831 +5884243 +1793566 +1794518 +10850929 +1795042 +1795045 +1795049 +9340452 +9622322 +1796257 +1796288 +1796338 +10600368 +1797111 +1797121 +1797122 +1797135 +1797137 +1797146 +1797178 +1797194 +1797198 +1797206 +1797210 +1797218 +1797252 +1797257 +1797258 +1797275 +1797276 +1797285 +1797290 +1797296 +1797300 +1797339 +1797344 +1797365 +1797367 +1797373 +1797374 +1797375 +1797379 +1797394 +1797409 +1797429 +1797432 +1797433 +1797436 +1797440 +1797445 +1797454 +1797464 +1797474 +1797475 +1797478 +1797479 +1797488 +1797507 +1797521 +1797556 +4532471 +8355390 +8756768 +8874140 +9022399 +9236138 +9240357 +9252524 +9273409 +9289908 +9310510 +9312545 +9340070 +9344456 +9350484 +9367471 +9406020 +9410076 +9416645 +9455404 +9468297 +9483647 +9547311 +9549475 +9554074 +9560404 +9604825 +9607036 +9611624 +9618068 +9622725 +5113950 +6117124 +7598729 +1798346 +1798393 +1798402 +1798408 +1798427 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +8150450 +8793873 +9238900 +9243875 +9292394 +9314022 +9353360 +9358521 +9425857 +9499599 +9527919 +9533271 +9545713 +9579730 +9608673 +9621113 +9626500 +1799183 +1799703 +1799708 +9249036 +1803127 +1803163 +1803218 +10033898 +5114892 +5114903 +11713970 +5114923 +5114930 +5114934 +5114946 +1803824 +1804071 +1804074 +1804331 +1804394 +1804398 +1804401 +1804404 +1804407 +1804409 +1804512 +1804513 +1804759 +1804906 +11508076 +11907485 +1804963 +1804969 +1804971 +1804974 +1805111 +1805197 +1805537 +1805540 +1805542 +1805549 +1805682 +1805691 +1806145 +1806170 +1806176 +1806702 +1806737 +1806740 +9235225 +9278398 +9394138 +9417594 +9491341 +9541734 +9565980 +9588105 +1806872 +7874258 +1807271 +1807273 +5115500 +1807881 +1808088 +1808195 +1808286 +1808348 +1808450 +1808590 +1808592 +1808752 +5115701 +5115771 +8929537 +5115777 +1809127 +1809135 +9463067 +1809210 +1809299 +1809305 +1809348 +1810025 +1810099 +1810469 +5116128 +5116293 +1810743 +9389851 +7535515 +1811019 +1811079 +1811122 +5116332 +5116338 +5116353 +5116358 +5116416 +1813114 +1813248 +5117189 +7656811 +1814336 +1814338 +1814357 +1814359 +1814365 +1814630 +1814653 +1814800 +1814827 +1814838 +1814843 +1814863 +5117399 +5117400 +9434954 +5117430 +1816881 +1817690 +1817693 +1817696 +1817727 +1817729 +1817732 +1817734 +1817749 +1817797 +1817940 +5118046 +11758730 +1818454 +1818463 +8326103 +1819145 +4532293 +4532297 +7346384 +1819268 +8407461 +1819873 +5118327 +5925317 +6122092 +7657803 +8361973 +8720118 +9391467 +9568710 +1820372 +1820406 +1820450 +1820711 +1820714 +1820722 +1820764 +1820791 +1820940 +1821051 +1821113 +8178238 +10551407 +12253343 +5884571 +7596232 +11873825 +5771982 +8872165 +9288386 +9291075 +9362560 +9480768 +9601788 +6097214 +4532544 +4532516 +4532532 +4532565 +12089608 +9400545 +8148822 +11962292 +8774985 +8908724 +9135886 +9247563 +9288596 +9290866 +9315577 +9334851 +9406984 +9432644 +9452274 +9526331 +9552703 +9555094 +9599150 +12135372 +5115854 +5115872 +5115874 +9530200 +5116475 +8038357 +6097254 +9359871 +9379595 +9387353 +9407200 +9432438 +9452497 +9460510 +9498206 +9552466 +9627917 +5114949 +5114950 +5114956 +5116698 +1788711 +1788717 +7560807 +9301336 +5114912 +5114915 +5114921 +1788635 +1781413 +1781420 +4532405 +4532408 +4532412 +9446902 +8000103 +4532534 +1796523 +6115388 +4532508 +8805966 +8905759 +9051758 +9254017 +9298735 +9324570 +9368974 +9443159 +9469928 +9488783 +9637664 +1793538 +1793542 +1813468 +1813413 +1813415 +1760233 +1760246 +1760257 +9235027 +5113030 +5113036 +9522383 +5109796 +1821479 +1821856 +1821940 +6122364 +1819170 +1775796 +1811814 +1811948 +1812026 +1812105 +1812207 +1812262 +1812339 +1812394 +8237987 +4532366 +5884258 +7716829 +8299504 +8968321 +9451320 +1820039 +1781531 +1784959 +1785024 +1785072 +5884188 +6117485 +6132916 +1771772 +1771779 +1780617 +1780646 +1780668 +1780676 +4301309 +1777463 +1777471 +1777517 +5112440 +1791735 +1791736 +1860974 +1860979 +1860983 +1860987 +1860989 +1860993 +1860996 +1861030 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +7767114 +7851302 +7961640 +1992378 +1992504 +7472845 +1852956 +1852978 +1835430 +1835432 +1835433 +1835436 +1835438 +1835449 +1835451 +1835456 +1835457 +9724183 +1835467 +1835819 +10610041 +1837343 +1837360 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +10017792 +1838360 +1838465 +1838512 +1838584 +1839293 +1839296 +1840297 +1840301 +1840311 +1840345 +1840346 +1840360 +1840371 +1840379 +1840380 +1840408 +1840441 +1840448 +1840478 +1840483 +1840485 +1840520 +1840543 +1840553 +1840555 +1840566 +1840570 +1840581 +1840592 +1840596 +1840621 +1840656 +4529186 +1841081 +1841084 +1841091 +10187154 +5119808 +1831752 +1852832 +9473121 +1852901 +4529630 +9851261 +5125075 +5125104 +1869359 +1751236 +1751290 +1751298 +1751299 +1751336 +1751368 +1751400 +1751457 +4535884 +4535904 +1939520 +1860184 +10165831 +1860408 +4525177 +1860443 +10308365 +5123339 +9913863 +5123394 +5123419 +5769164 +5123461 +5123474 +1735408 +4302389 +1751207 +1751216 +1869595 +8797666 +1869656 +1869666 +1869803 +1869825 +1869852 +1869976 +1870017 +1870037 +1870202 +1870249 +1870250 +1870267 +1870415 +1870426 +1870450 +1870607 +1870650 +1870721 +1870727 +1870733 +1870751 +1870777 +1870988 +1871160 +1871175 +1871212 +1871252 +1871379 +10246305 +10588642 +10817208 +1871407 +4531402 +8766638 +9944922 +1871414 +1871419 +1871457 +1871509 +1871560 +1871597 +1871683 +1871698 +1871763 +1871783 +1871826 +1871890 +1871923 +1871940 +1872200 +1872210 +10336328 +1872452 +1872456 +1872466 +1872514 +1872515 +10787705 +1872848 +1872873 +1872901 +1872904 +1873048 +1873079 +1873215 +1873267 +1873319 +5125545 +10807383 +1873376 +1873381 +1873383 +1873384 +1873411 +1873585 +7372375 +1873753 +4530947 +10143814 +10165457 +10366580 +10410048 +10518163 +10561589 +1873776 +1873780 +1873783 +4531264 +9971850 +1873890 +5125689 +1874158 +1874160 +1874179 +1874192 +1874204 +1874211 +1874248 +1874257 +1874274 +1874279 +1874295 +4531145 +4531147 +4531158 +1874317 +1874375 +1874513 +1874552 +10244305 +1874743 +9782192 +1874901 +1875008 +1875120 +8219149 +1875196 +1875319 +1875327 +1875376 +1875407 +1875429 +1875451 +4531242 +1875478 +1875483 +1875485 +1875606 +1875607 +1875631 +1875633 +1875682 +4531284 +1875827 +1875830 +1875865 +1875869 +1875914 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876548 +1876549 +1876623 +1876665 +1876854 +1876987 +10142569 +1877002 +1877038 +5125916 +5125917 +1877282 +1877310 +1877321 +1877338 +1877341 +1877345 +1877353 +1877364 +1877365 +1877368 +1877372 +4531246 +1877443 +1877492 +1877537 +5125939 +1877643 +5126000 +5126013 +5126052 +1877940 +1877941 +1877975 +1877988 +1877995 +4531417 +1878158 +1878370 +1878392 +1878470 +1878490 +1878586 +5976937 +5884888 +11728049 +1875885 +1873697 +1872315 +1748805 +11950325 +12018158 +12060941 +12087490 +1939962 +1939964 +1940110 +4525884 +11667300 +5131957 +5141493 +5141501 +5714558 +5714572 +5714575 +5714600 +10267561 +10286565 +10451589 +10509408 +1940504 +1940510 +1940517 +1940546 +1940575 +1940580 +1940601 +1940604 +1940609 +1940612 +1940639 +1940644 +1940694 +1940717 +1940744 +1940757 +1940768 +4525777 +8956729 +9930604 +10402067 +1940807 +1940838 +1941310 +1941348 +1941377 +1941437 +12211069 +10495733 +10584071 +12252570 +1941266 +1941294 +1941299 +1939833 +1939879 +9146244 +1736315 +1736377 +1736390 +1736412 +1736425 +10132596 +11645405 +1736484 +1736499 +1736511 +1736528 +1736560 +1736565 +1736601 +1736623 +10274976 +5102628 +5102635 +5102637 +5102642 +5102651 +5102666 +5102668 +5102671 +5102678 +1736727 +1736760 +1736800 +10355428 +1736803 +1736807 +1736809 +1736811 +1736821 +1736826 +1736836 +1736860 +10638589 +1736898 +1736904 +1736905 +1736906 +1736915 +1736918 +1736937 +1736939 +1736945 +4530406 +1736995 +1737015 +4529931 +1737072 +1737131 +1737231 +1737342 +1737368 +1737374 +1737403 +1737417 +1737491 +1737497 +4530608 +7350238 +7466487 +1737524 +1737526 +1737533 +1737542 +1737544 +1737551 +1737552 +1737650 +1737753 +1737768 +1737775 +1737776 +1737847 +1737893 +1737904 +1737924 +1737929 +1737964 +1737968 +1737973 +1737978 +4530002 +8186212 +8485254 +1738050 +1738218 +1738222 +1738245 +10090105 +10370026 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +5102693 +5102735 +5102773 +5102782 +5102807 +5102809 +5102830 +8420632 +8869900 +9953996 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738791 +1738794 +1738809 +1738839 +1738883 +1738888 +1739034 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739290 +1739337 +1739362 +1739364 +1739377 +1739381 +1739400 +5102982 +1739451 +1739461 +1739471 +10596756 +1739605 +1739612 +1739617 +1739629 +1739646 +1739656 +1739668 +1739677 +10229731 +1739727 +1739748 +1739767 +1739770 +1739797 +1739816 +1739819 +1739833 +1739867 +1739884 +1739919 +1739922 +1739924 +1739927 +1739931 +1739954 +1739956 +1739964 +1739973 +1739980 +1739983 +1739999 +1740003 +1740005 +1740037 +1740053 +1740060 +1740069 +1740116 +1740120 +1740133 +1740148 +1740155 +1740163 +1740174 +1740183 +1740185 +1740225 +1740246 +1740305 +1740370 +1740374 +1740389 +1740392 +1740400 +7797515 +8215326 +1740449 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1741056 +1741130 +1741131 +1741253 +1741324 +1741340 +1741341 +1741361 +1741368 +4530151 +8345820 +1741398 +1741400 +5103066 +5771357 +1741545 +1741551 +10709446 +10776625 +10838422 +10869347 +1741593 +1741615 +1741633 +1741634 +1741667 +1741719 +1741747 +1741752 +1741756 +1741765 +1741812 +1741818 +1741820 +1741823 +1741824 +1741826 +9880932 +10807169 +11093909 +1742081 +1742089 +1742091 +1742106 +1742121 +1742142 +1742150 +1742168 +1742178 +1742180 +1742185 +1742198 +1742203 +1742214 +1742239 +1742241 +1742260 +1742263 +1742268 +1742272 +1742273 +1742287 +1742293 +1742304 +1742310 +1742335 +1742346 +1742402 +10000103 +10044107 +10137001 +10194727 +10395101 +10695966 +11508404 +11899754 +5103394 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +9849625 +9885192 +1743196 +8313553 +10534945 +1743323 +10095278 +10134865 +11923027 +5103998 +7661023 +11846897 +1743453 +1743461 +1743475 +7877231 +10073044 +10295171 +10365884 +10388627 +10446580 +10539598 +12197284 +1743532 +1743588 +1743604 +5104056 +5104063 +5104088 +5104093 +5104116 +6097235 +9051888 +9958147 +9971153 +1743641 +1743643 +1743653 +1743657 +1743658 +1743663 +1743694 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743825 +1743828 +1743838 +1743855 +1743856 +1743862 +1743867 +1743898 +10205587 +10450442 +1744071 +10271464 +1744130 +1744136 +1744180 +5104157 +1744212 +1744224 +4530632 +1744416 +12276630 +1744498 +1744526 +1744542 +9860684 +9953708 +1744588 +1744593 +1744693 +1744699 +1744700 +1744709 +1744714 +1744724 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1744949 +1744953 +1745022 +1745079 +10844862 +1745131 +10483734 +1745558 +1745561 +1745579 +1745600 +1745606 +1745630 +1745634 +1745636 +1745643 +1745659 +1745666 +1745669 +1745675 +1745676 +1745678 +1745705 +1745724 +1745725 +1745729 +1745737 +1745746 +1745756 +1745761 +1745762 +1745771 +1745781 +1745787 +1745788 +1745814 +1745816 +1745830 +8162538 +8369868 +9991710 +1745925 +1746000 +10593489 +1746027 +1746068 +1746174 +1746413 +1746440 +1746586 +1746613 +1746644 +1746666 +1746689 +1746695 +1746751 +1746754 +1746763 +1746774 +1746775 +1746831 +1746832 +1746856 +1746859 +1746876 +1746881 +1746898 +1746910 +1746927 +1746949 +4302199 +4302202 +1747024 +1747050 +1747140 +1747141 +1747147 +1747150 +1747155 +1747160 +1747161 +1747163 +1747166 +1747171 +1747188 +1747189 +10046698 +10442122 +12066849 +12107129 +12126779 +1747196 +9040133 +9896144 +5104442 +10380465 +10445629 +10446898 +10481441 +10503464 +10547716 +10776919 +12223349 +1747523 +1747738 +1747740 +4530138 +5104558 +1748109 +1748148 +1748149 +1748151 +1748152 +1748203 +5104597 +6097234 +7588222 +9242559 +1748456 +9176043 +1748720 +5104641 +8691947 +10580256 +9911298 +9948031 +10002059 +8734154 +8843927 +10236521 +5103083 +5103100 +5103118 +5103121 +5103154 +5103166 +5103176 +5103181 +5103183 +5103185 +5103201 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771256 +5771258 +5771259 +9023222 +1743651 +10545267 +1831775 +1831780 +10310599 +10346267 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +4299071 +1920844 +1920851 +1920864 +1920889 +1920892 +1920900 +1920996 +1921053 +1921123 +1921239 +1921240 +1921247 +1921248 +1921255 +10556522 +7387466 +1921910 +1922038 +1922039 +1922041 +1922044 +1922049 +1922219 +1922223 +10442031 +1922311 +1922343 +8016522 +1922455 +1922584 +4535092 +1922676 +8782891 +1922851 +1922865 +1922889 +1922937 +5138298 +5138387 +5138543 +5138561 +5138602 +5714679 +5714680 +5714689 +9002107 +1923498 +1923505 +1923678 +1923679 +1923796 +1924044 +1924050 +1924057 +1924097 +1924106 +1924176 +12174634 +12185456 +12188086 +12205404 +12212066 +12222885 +12229400 +12233602 +12250854 +12257418 +12258984 +12265590 +1924223 +1924232 +5138681 +1924513 +1924518 +1924521 +1924713 +1924770 +1925221 +1925233 +4535172 +1925381 +1925429 +1925454 +1925458 +1925498 +1925500 +1925501 +1925509 +1925515 +4300384 +4300393 +4300399 +12195040 +1925918 +1925922 +4300000 +4300011 +4300012 +1925962 +12219036 +1926001 +1926009 +11797637 +1926054 +9816676 +1926324 +4300259 +1926823 +1926834 +1926861 +1927301 +1927302 +5139026 +5139029 +5714747 +5714755 +5714788 +5882965 +5139034 +1927909 +1927988 +4300406 +1928214 +1928215 +8846776 +1928248 +5139064 +5139156 +1928584 +1928945 +1928960 +1929129 +11720834 +1929270 +1929659 +1929697 +5139346 +5139540 +5139578 +5139700 +5714618 +8356768 +1929772 +1929962 +1930079 +1930110 +1930167 +1930178 +1930183 +1930263 +1930288 +1930331 +1930361 +1930391 +1930422 +1930481 +1930563 +1930581 +1930653 +1930660 +1930678 +1930728 +1930830 +4535106 +1931116 +1931126 +8643155 +1931179 +1931310 +1931509 +1931553 +1931561 +1931779 +1931784 +1931787 +5139909 +10113190 +10357476 +10570752 +11417741 +11802190 +1932056 +1932172 +1932175 +1932386 +1932406 +1932409 +1932411 +1932414 +1932417 +1932428 +4300277 +4300363 +7346444 +1932576 +1932879 +1932960 +5140033 +5140054 +5140063 +5140214 +5140244 +5140436 +7634721 +7664111 +1933583 +1933793 +1933998 +1935884 +1935899 +1935904 +1935931 +1926260 +4300268 +9469139 +11874998 +1933095 +1933138 +1924494 +1752111 +9776414 +1752281 +1752285 +1752286 +1752825 +1752832 +1752894 +1752923 +10376685 +1753105 +1753106 +1753111 +5105365 +5105369 +5105376 +5105469 +5105508 +5105560 +11014495 +1753636 +1753668 +5105588 +1753922 +1753929 +5105603 +10515719 +4522322 +10413588 +10514620 +5105336 +5105339 +5105344 +5105352 +5806127 +5137511 +5137512 +12226416 +1919128 +1919130 +1919145 +1919149 +5137540 +1919316 +1919320 +1919326 +1919327 +1919328 +1919338 +1919646 +1919652 +1919653 +1919656 +7661785 +1919700 +1919701 +1919702 +1919705 +1919711 +1919712 +1919716 +1919719 +1919720 +10703948 +1919939 +1919943 +1919947 +1919949 +1919966 +1920192 +1920237 +1920247 +1920259 +5137791 +5137800 +5137802 +5137803 +4701136 +5137817 +5137819 +5714819 +1920463 +1920494 +1920496 +1920506 +4535307 +5137882 +5137889 +5137890 +5137894 +1920552 +5137902 +5137903 +5137908 +5137912 +5804895 +1920571 +1920574 +1920581 +1920691 +1920711 +1920712 +1920803 +1920809 +1920810 +5714914 +5137573 +5137578 +5137582 +5137595 +5137601 +5137605 +5137612 +5137615 +5137626 +5137636 +5137659 +5137664 +5137672 +5137674 +5137677 +5137679 +5137682 +5137689 +5137693 +5137694 +5137700 +5137706 +5137708 +5137711 +5137714 +5803588 +8203812 +12191141 +12206386 +12236627 +1920621 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749287 +1749449 +1749661 +1749713 +1749744 +1749760 +1749846 +1749869 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1750051 +1750076 +1750097 +1750143 +1750166 +1750288 +5104772 +5104781 +5104797 +5104815 +5104829 +5104882 +5104891 +5104903 +5104940 +5104948 +5104986 +5105031 +5105054 +5105057 +5105068 +5105088 +5105106 +5105120 +5105124 +5105158 +5976947 +9942354 +1750924 +1751051 +1751146 +5104759 +1751163 +1749591 +1749596 +1749608 +1749635 +1749656 +8741260 +11840028 +1735532 +4527339 +4527342 +1758461 +1731826 +1731837 +1731860 +1731862 +1855241 +1992547 +1963096 +1954563 +5143380 +5143453 +5143477 +1954930 +1954933 +1954992 +1954993 +1955497 +1955498 +5143651 +1955694 +5143657 +5143675 +5143697 +5143703 +1956098 +1956215 +1956440 +1956462 +1956505 +1956510 +1956524 +1956597 +1956599 +1956626 +1956710 +1956716 +8793973 +1956904 +4525068 +1957266 +1957300 +1957441 +1957570 +1957572 +1957583 +1957632 +1957706 +1957718 +1957746 +1957791 +1957816 +1957845 +1957852 +1957854 +1957870 +4524421 +4524424 +4524426 +8775810 +5143947 +5143952 +1958024 +1958049 +1958065 +5143960 +5143964 +1958121 +1958323 +1958528 +1959383 +1959395 +1959461 +1959467 +1959543 +1959637 +1959682 +1959735 +1959858 +1959876 +1959890 +1959898 +1959914 +1959917 +1959919 +1959934 +9320916 +1960023 +1960503 +1960617 +1960632 +1960854 +1960951 +1961013 +1961037 +1961040 +1961068 +1961190 +4302240 +9468667 +1961361 +1961388 +1961718 +1962051 +1962076 +1962118 +9368382 +9592714 +1962204 +1962265 +1962268 +5144227 +5144318 +1962432 +1962434 +1962479 +1962490 +1962516 +9812211 +1962584 +1962636 +1962722 +1962727 +9264326 +1962860 +1962895 +1962900 +1962925 +1962990 +1963011 +4302252 +1963052 +1963168 +1963201 +1963207 +1963212 +12214993 +1963306 +1963433 +1963446 +1963463 +1963619 +1963709 +1963710 +1963848 +1963854 +1963874 +1963879 +1963892 +1964041 +1964113 +1964191 +1964195 +1964247 +1964437 +1964471 +1964585 +1964637 +1964653 +1964657 +8361848 +1964715 +5144424 +5144426 +1965024 +1965038 +1965058 +1965069 +1965078 +1965100 +5880367 +6214734 +1965166 +1965197 +1965208 +1965586 +1965640 +1965671 +1965697 +1965699 +1965763 +1965777 +1965794 +1965795 +1965797 +1965805 +1965807 +1965810 +1965823 +1965825 +1965831 +1965838 +1965841 +1965861 +1965865 +1965913 +1965996 +1966017 +5144457 +1966185 +1966195 +1966198 +1966351 +5144534 +1967006 +1967011 +1967127 +1967128 +5144543 +1967212 +1967226 +1967240 +1967245 +9277294 +9492499 +1967265 +1967273 +1967433 +1967597 +1967803 +1967815 +1967873 +1968205 +7681733 +5144564 +5144575 +8793278 +1968304 +1968315 +5144583 +5144588 +5144593 +5144596 +5144597 +1968678 +1968867 +1968942 +11598540 +1968990 +1969291 +1969954 +1969958 +1969961 +1969978 +1970119 +1970213 +1970227 +1970243 +1970284 +5144677 +5144721 +5144729 +5144782 +5144787 +5144805 +5144870 +5144900 +5144935 +5144953 +5145009 +5145078 +5145136 +5145139 +5145186 +5145238 +5145260 +5145269 +5145409 +5145466 +5145521 +5145522 +5145547 +5145560 +5145713 +5145729 +7700568 +9627567 +1971835 +1971847 +1971858 +1971888 +1971995 +1971998 +1971999 +1972010 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +5145998 +5146030 +5146082 +5146091 +7541913 +7960566 +1972434 +1972447 +1972449 +1972454 +9558845 +5146179 +1972691 +1973146 +1973147 +1973164 +1973165 +1973245 +1973414 +1973487 +1973493 +10404426 +5146496 +5146497 +5146559 +5146598 +5146599 +5146601 +5146611 +5146659 +5146677 +5146762 +5146820 +5146832 +5146833 +5146837 +5146862 +5146883 +5146946 +5146961 +5147018 +5147038 +5147039 +5147062 +5147114 +5147139 +5147150 +5147171 +5147179 +5147193 +5147208 +5147211 +5147232 +5147245 +5147354 +5147415 +5147441 +5147478 +5147492 +5147516 +9370933 +9469300 +9590066 +1975198 +5147608 +5147638 +1975341 +1975365 +1975546 +1975553 +1975571 +1975607 +9477531 +1975733 +1975741 +8329661 +1975793 +5715277 +5715278 +8160782 +1975892 +1975897 +1975903 +1975914 +1976073 +8793324 +1976163 +1976248 +1976333 +8820198 +5147681 +5147703 +5147713 +6097233 +7973517 +1976651 +1976993 +1977003 +1977007 +1977054 +1977068 +4523725 +5147827 +5147834 +5147838 +5147858 +5147868 +5147871 +5147879 +5147883 +5147894 +5147898 +5147899 +5147909 +8951618 +5148184 +5769028 +5148247 +9617496 +1977962 +1977967 +1978056 +1978065 +1978114 +1978375 +1978445 +9308082 +1978493 +1978494 +1978526 +4524636 +4524638 +4524890 +1978671 +1978751 +1978776 +1978821 +5148277 +5148280 +5806132 +1978977 +5148286 +1979255 +1979289 +1979308 +1979344 +1979358 +1979380 +1979427 +1979430 +1979473 +1979475 +1979501 +1979721 +1979726 +1979781 +1980025 +1980245 +1980247 +1980250 +1980290 +5148379 +5148436 +5148462 +5148486 +5148487 +1980505 +1980509 +1980521 +1980559 +8421569 +1981144 +1981160 +1981161 +1981162 +1981191 +1981202 +1981209 +1981210 +1981222 +1981258 +1981277 +1981280 +1981281 +1981284 +1981312 +1981696 +1981718 +10247981 +1981951 +1981959 +5148520 +1981998 +1982406 +1982447 +1982500 +1982525 +1982529 +1982533 +1982541 +1982542 +1982592 +1982613 +1982636 +1982671 +1982746 +1982770 +1982780 +1982791 +1982824 +1982838 +1982867 +1982885 +1982898 +1982924 +1982951 +1983000 +1983034 +1983052 +1983111 +1983170 +1983260 +1983263 +1983288 +1983387 +1983434 +1983441 +1983442 +1983491 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983709 +1983755 +1983799 +1983896 +1983922 +1983997 +1983999 +1984033 +1984073 +1984110 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +9577547 +5148531 +5148544 +5148576 +9237621 +9307713 +9370312 +9424464 +9488754 +9544337 +9610059 +5148719 +5148743 +5148753 +5148766 +5148850 +5148934 +5148952 +5148954 +1984654 +9382415 +1984734 +1984942 +1984949 +1984954 +1985405 +1985406 +1985409 +1985421 +1985423 +9332369 +1985487 +1985522 +5149237 +1985945 +1985952 +1985956 +1986004 +1986020 +1986040 +1986052 +1986056 +1986091 +1986113 +1986157 +1986166 +1986171 +1986191 +1986192 +1986220 +1986367 +1986452 +1986497 +1986522 +1986575 +1986623 +1986807 +5149307 +5149308 +5149315 +1986998 +4302274 +5149317 +1987145 +1987146 +5768880 +1987301 +1987527 +9538525 +1987633 +1987737 +1987744 +1987776 +4524221 +4524223 +11650277 +1988495 +1988593 +1988642 +1988684 +8388883 +5149414 +5149438 +1988881 +1989083 +1989084 +1989428 +1989538 +1989582 +1989903 +1990066 +1990150 +1990155 +1990198 +1990200 +1990270 +1990331 +1990335 +1990357 +1990551 +1990582 +1990594 +1990998 +1991012 +1991179 +1991280 +1991281 +1991289 +1991294 +1991295 +1991298 +1991299 +1991303 +5149630 +5149631 +1991371 +1991429 +1991783 +5149836 +5149843 +1992066 +1992172 +12010643 +12225687 +5880512 +5880533 +5880539 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +8941993 +9110918 +9243319 +9251088 +9259786 +9261296 +9272461 +9311081 +9330467 +9339487 +9366016 +9368398 +9392058 +9392076 +9400977 +9402536 +9413168 +9419734 +9428900 +9438677 +9454444 +9456004 +9474405 +9489399 +9502724 +9530135 +9532702 +9558873 +9574939 +9616438 +9624918 +9632824 +5769062 +5769068 +5769072 +7429212 +4524740 +5144381 +5144386 +5144407 +9533293 +7990739 +4302221 +9621086 +4302230 +4523556 +4523560 +4523564 +4524054 +4524998 +4524376 +4524822 +4524712 +10574156 +4523522 +9281181 +9352348 +9352978 +9403481 +9436173 +9448761 +9453490 +9494431 +9516038 +9516680 +9523379 +9534291 +9545331 +4524070 +4524072 +4524403 +4524951 +4524955 +4524962 +4525078 +9220953 +9249651 +9288979 +9307098 +9423863 +9497623 +9581695 +9619088 +9273963 +9479525 +7345819 +9237031 +9274899 +9321500 +9299326 +9309575 +6133540 +9415669 +5144190 +5144196 +5715276 +5146412 +5715275 +1978197 +9363893 +9391442 +5149499 +7769543 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149713 +5149746 +5149753 +5149768 +5149777 +5149780 +5149782 +5149819 +5149820 +7443518 +5146305 +5146326 +5146342 +5146379 +5146389 +1980462 +1972942 +4302268 +4524393 +9256786 +9291092 +12200261 +11654707 +11776315 +11834445 +11892494 +11670842 +12247340 +12252340 +12239491 +12258146 +1942141 +1942171 +12286003 +1942416 +1942509 +4301744 +4301749 +1942670 +5141662 +1942697 +5141677 +1942945 +1942947 +1942964 +1942967 +1942971 +1942980 +1942982 +1942994 +5141697 +1943054 +1943066 +4302008 +5141743 +5141763 +1943212 +1943397 +8178854 +8277078 +1943563 +1943571 +1943573 +1943588 +4301355 +1943631 +1943655 +1943673 +1943823 +1943824 +1943830 +1943832 +1943901 +12198522 +12233808 +1943942 +1943953 +1943954 +1943960 +1943962 +1943964 +1943990 +1944004 +8133678 +8273661 +1944273 +1944283 +1944286 +1944314 +1944324 +1944329 +1944574 +4301934 +1944815 +5141913 +9551544 +1945066 +1945081 +1945302 +1945312 +1945462 +1945476 +1945477 +1945569 +1945605 +4301942 +1945957 +1946074 +1946078 +1946079 +5142061 +5142062 +1946333 +1946469 +12223105 +12233838 +1946495 +1946500 +1946509 +4302101 +1946550 +1946577 +1946610 +1946612 +1946618 +1946628 +7346354 +1946737 +1946810 +1946853 +1946865 +7389824 +11753578 +1946980 +1946981 +1946983 +1946989 +1946991 +1946992 +1946995 +1946999 +1947037 +1947055 +1947282 +1947306 +1947333 +1947335 +1947507 +1947568 +1947577 +1947587 +1947597 +1947740 +1947842 +1947894 +1947915 +12208168 +1947976 +1948054 +1948158 +1948439 +1948446 +4301945 +1948826 +1949049 +1949285 +1949331 +1949449 +1949451 +1949466 +1949512 +1949520 +1949544 +1949545 +1949549 +7726809 +1949687 +1949697 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1950006 +5142372 +5142394 +5142424 +5142436 +5142499 +5142583 +5142599 +8109173 +1950017 +1950044 +1950047 +1950133 +1950197 +11967675 +1950384 +1950396 +1950408 +1950409 +1950567 +1950578 +1950654 +1950856 +1951116 +1951121 +1951125 +1951133 +1951217 +1951218 +4301897 +5715127 +12180041 +12206694 +1951340 +5977179 +5977185 +5977197 +5977203 +5977207 +5977208 +5977214 +5977216 +5977220 +5977235 +5977250 +5977251 +5977257 +5977259 +5977260 +5977261 +5977262 +8270406 +5142249 +5142254 +5142267 +5142269 +5142273 +5142278 +5142283 +5142298 +5142300 +5142314 +5142317 +5142319 +5142322 +5142328 +7633472 +1948771 +1948774 +1948779 +1948789 +1948799 +1948800 +1948802 +1948803 +1948804 +1948808 +1948809 +1948810 +1945374 +1945378 +5142006 +5142032 +5142042 +1869467 +1869478 +1869489 +1869512 +9359597 +1735844 +1735855 +9400895 +9245604 +10963226 +10982815 +5109821 +1758767 +1758771 +1758781 +1758783 +7911151 +9366762 +9445489 +5108416 +5108417 +5108419 +1758878 +1758879 +1758898 +1758906 +1758916 +1759037 +1759040 +1759041 +1759055 +1759069 +1759079 +1759083 +1759092 +1759097 +4533952 +7972792 +9447614 +1759153 +1759159 +1759338 +1759407 +1759553 +1759563 +1759573 +1759585 +1759597 +1759605 +1759610 +1759611 +1759620 +1759621 +1759624 +1759631 +1759632 +1759633 +1759634 +1759661 +1759667 +1759668 +1759671 +1759677 +1759678 +1759686 +1759688 +1759691 +1759694 +1759719 +1759799 +1759881 +9306367 +1760104 +1760261 +1760309 +1760361 +1760454 +1760455 +1760593 +1760682 +1794361 +4534225 +8708745 +1760887 +1760891 +1760893 +4533255 +5108957 +1761041 +1761143 +1761392 +1761438 +1761498 +1761553 +1761563 +1761735 +1761798 +1761865 +1761892 +9418549 +9616055 +1762244 +1762608 +1762609 +1762615 +1762680 +5109498 +5109506 +5109523 +5109535 +5109554 +5109566 +5109596 +5109599 +5109614 +5109651 +5109661 +5109670 +5109722 +9337858 +1763610 +9328683 +9438913 +1764238 +1764691 +1764693 +1764716 +1764917 +1764929 +1765010 +1765011 +1765017 +1765038 +1765044 +4534245 +4534257 +1765172 +5109829 +5109845 +5109848 +5109850 +5109852 +5109855 +5109881 +5109954 +5109958 +8352161 +1765733 +11487320 +1765767 +1765769 +1765779 +1765798 +1765954 +1765962 +1766128 +1766130 +1766131 +1766137 +1766193 +1766205 +1766210 +1766237 +1766274 +1766287 +1766392 +1766410 +1766489 +1766509 +1766510 +4301071 +4301081 +7895336 +9362190 +1766646 +1766650 +1766741 +1766773 +1766917 +1766919 +1766921 +1767052 +1767140 +1767142 +1767335 +1767336 +1767337 +1767338 +1767347 +7598945 +9062262 +1767484 +9471709 +1767511 +1767571 +1767579 +1767584 +9511345 +1767597 +1767602 +1767608 +1767612 +1767625 +1767628 +1767655 +5772169 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +5802396 +7388922 +8045644 +9381852 +1767719 +1768117 +1768132 +1768150 +1768172 +1768174 +5110200 +1768341 +5110213 +1768702 +1768749 +1768771 +1768815 +1768819 +8150836 +1769057 +1769505 +1769519 +1769543 +1769566 +1769592 +9373686 +1769814 +1769934 +1769947 +1769958 +1770132 +1770144 +1770150 +9148810 +1770307 +1770461 +1770477 +1770530 +1770573 +4532696 +8393221 +1770659 +1771385 +1771391 +1771441 +7725644 +1771509 +1771531 +1771872 +1771997 +1772013 +9242609 +9244973 +9254157 +9396755 +9463442 +9476708 +9495306 +9562175 +9616658 +9625112 +9630930 +9633562 +1772043 +1772169 +1772179 +5110333 +5110341 +5110356 +9539128 +5772129 +1772422 +1772462 +9605631 +1772940 +1772954 +1772956 +1772977 +1773002 +1773069 +1773081 +1773163 +1773231 +1773248 +1773309 +1773313 +1773315 +1773328 +1773484 +1773510 +1773572 +1773577 +1773662 +1773677 +1773728 +4301148 +9369576 +1773742 +1773743 +1773744 +1773746 +9367674 +9399288 +9593475 +1773783 +1773784 +9283948 +9560018 +1774092 +1774095 +9322646 +1774243 +1774253 +1774254 +1774262 +1774268 +9243117 +9409309 +9550265 +1774272 +1774314 +1774347 +1774358 +1774792 +4301304 +6115953 +1775046 +1775055 +9547676 +1775089 +1775112 +1775118 +4534046 +4534052 +4534057 +1775290 +1775291 +1775508 +1775509 +5110593 +5772269 +1775672 +1775680 +1775791 +1775866 +1775891 +4534719 +1775970 +1776067 +1776167 +5110670 +1776207 +1776330 +1776371 +5110723 +5110728 +5110752 +5110754 +5110756 +5772446 +1776397 +1776406 +1776415 +1776459 +1776462 +1776467 +1776470 +1776472 +1776473 +1776476 +1776618 +1776619 +1776861 +1776862 +1776871 +1776880 +4534463 +1777139 +1777253 +1777261 +5110818 +1777730 +9310286 +5110863 +5110871 +5110885 +5715009 +5715010 +5715013 +1777974 +1777976 +1777980 +1777982 +1777994 +1777996 +1778000 +1778006 +1778007 +1778013 +1778015 +1778024 +1778031 +1778033 +1778034 +1778037 +1778045 +1778049 +9456735 +1778074 +4534299 +1778127 +1778143 +1778337 +1778517 +1778534 +1778596 +1778688 +5111076 +5111139 +5111141 +5111195 +5111343 +5111360 +5111372 +5111397 +5111501 +5111513 +5111521 +5111528 +5111546 +5111568 +5111574 +5772222 +7593392 +8253467 +9175037 +9596498 +1779258 +1779430 +1779435 +1779633 +1779641 +1779643 +1779690 +1779709 +1779713 +1779959 +1780209 +1780213 +1780214 +1780215 +1780272 +1780309 +1780313 +1780326 +1780330 +1780344 +1780378 +1780390 +1780414 +1780437 +1780440 +1780450 +8802610 +9284849 +1780852 +1781008 +1781016 +4533285 +4533325 +7825945 +9374443 +9392614 +5111956 +1781692 +1781694 +1781819 +1782031 +1782319 +1782422 +1782424 +1782523 +1782542 +1782560 +1782579 +1782585 +1782595 +9289753 +9433772 +9525172 +1782615 +1782622 +1782627 +10441062 +1782672 +1782682 +1782689 +1782700 +1782705 +1782706 +1782707 +1782708 +1782709 +1782726 +1782727 +1782743 +1782744 +1782745 +1782747 +1782762 +1782763 +1782776 +1782777 +1782803 +1782808 +1782809 +1782819 +1782822 +1782826 +1782833 +1782837 +1782840 +1782841 +1782853 +1782870 +1782871 +1782872 +1782878 +1782921 +1782927 +1782928 +1782934 +1782948 +1782961 +1782972 +1782978 +1782993 +1783002 +1783008 +1783013 +1783016 +1783035 +1783037 +1783043 +1783045 +1783055 +1783059 +4301044 +9581976 +1783313 +9457757 +9500945 +1783371 +1783372 +1783373 +1783376 +1783378 +5112153 +5112155 +5112160 +5112191 +5112199 +5112229 +5112233 +5112283 +5112291 +5112302 +5112336 +5112345 +5112377 +5714951 +5714973 +5714984 +5714994 +5715004 +5772349 +5772351 +7921916 +8043500 +1783811 +9348210 +9465978 +9492640 +1783841 +1783842 +1783855 +1783861 +1783940 +1783971 +1784276 +1784278 +1784281 +1784282 +1784283 +1784349 +1784359 +1784422 +1784461 +1784582 +1784610 +9320776 +1784688 +5112414 +1784812 +1784826 +1784853 +4534290 +1784893 +1785145 +1785168 +1785185 +1785280 +1785286 +4532886 +4532888 +4532890 +9633615 +1785314 +1785331 +1785399 +1785403 +9636267 +1785728 +1785730 +1785732 +1785733 +7400814 +9250744 +9329292 +1785875 +1785883 +1785886 +1785887 +1785888 +1785895 +1785951 +1785955 +1785964 +1785982 +1785992 +1785997 +1786007 +1786017 +8292872 +1786035 +1786036 +1786308 +1786360 +1786455 +1786514 +1786515 +1786565 +1786566 +1786567 +1786619 +1786651 +1786664 +1786691 +1786733 +1786808 +1786902 +1786918 +1786936 +1787064 +1787112 +1787213 +1787267 +1787381 +4687681 +9305798 +1787400 +1787417 +1787438 +1787504 +1787506 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +4534086 +1788034 +1788037 +1788063 +1788070 +1788139 +9547140 +1788425 +9282469 +1788485 +1788522 +1788673 +1788677 +1788679 +1788680 +1788681 +1788720 +4301312 +9216200 +4534011 +1788917 +1788929 +1789071 +1789076 +1789086 +1789155 +9612009 +1789212 +1789267 +4533924 +9248329 +9449132 +1789481 +1789505 +1789553 +1789580 +4534162 +4534166 +4534198 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +10068024 +10113008 +10312073 +1789982 +1790002 +1790013 +1790062 +1790072 +1790084 +1790151 +1790160 +4533115 +8047343 +9092175 +9410414 +1790339 +1790343 +11693171 +1790359 +1790361 +1790362 +1790364 +1790369 +1790371 +9174377 +1790625 +1790737 +9297059 +1791384 +1791422 +1791590 +1791593 +1791680 +1791784 +1791862 +1792061 +1792072 +1792073 +1792087 +1792091 +1792095 +1792096 +1792097 +1792099 +9426771 +9622117 +1792292 +1792300 +1792318 +1792335 +1792377 +1792379 +1792383 +9241669 +9338769 +9530319 +9548726 +1792411 +1792414 +1792418 +1792426 +1792430 +1792431 +1792442 +1792449 +1792456 +1792465 +1792475 +1792478 +1792485 +1792497 +1792517 +5113365 +9240216 +1792817 +9233420 +9539292 +5113370 +1792996 +1793189 +1793192 +1793368 +1793369 +1793419 +1793453 +1793455 +4301052 +4301055 +7918000 +1793589 +1793699 +1793877 +1793983 +1793986 +1794102 +1794510 +1794590 +4301238 +11781335 +1795215 +1795282 +7869346 +7922810 +1795788 +1795802 +1795812 +1795854 +1795871 +1795930 +1795946 +1795983 +1796007 +1796032 +1796035 +1796040 +1796051 +1796100 +1796117 +1796139 +1796145 +1796154 +1796169 +1796180 +1796181 +1796188 +4534485 +4534486 +7438067 +8007222 +9377268 +9541908 +1796217 +7780930 +1796274 +1796276 +4688172 +7689966 +7882824 +8405656 +9256638 +9327259 +9589234 +1796310 +1796312 +1796423 +1796463 +8105817 +1796678 +1796686 +1796842 +1796958 +1797030 +1797587 +1797592 +1797593 +1797595 +1797601 +4301242 +4301249 +4301255 +4533431 +4533433 +4533442 +4533444 +4533446 +6133007 +1798288 +1798371 +1798372 +1798375 +1798419 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +5113985 +5114011 +5114021 +5114039 +5114043 +5114081 +5114083 +5114096 +5114107 +5114128 +5114151 +5114159 +9500553 +1799433 +1799675 +1799680 +1799701 +9368026 +9593098 +1799774 +9388726 +9571514 +1799799 +1799870 +1799877 +1799880 +1799884 +1799894 +1799900 +1799901 +1799911 +1799917 +1799925 +1799938 +1799944 +1799956 +1799957 +1799958 +1799967 +1799977 +1800004 +1800017 +1800024 +1800028 +1800032 +9496311 +6097260 +8729319 +7981386 +8742426 +4301068 +4534389 +4534207 +10638451 +4301282 +4301283 +4301306 +4301307 +8751100 +9395261 +9564779 +4532811 +12103087 +4534663 +4534669 +7558165 +8050639 +8440999 +8551997 +8562506 +8647523 +8761810 +8781370 +8998296 +9042018 +9163659 +9241105 +9247947 +9255102 +9261458 +9281907 +9288185 +9291297 +9362785 +9373309 +9390293 +9424681 +9452702 +9474256 +9481002 +9484411 +9485070 +9488551 +9530271 +9530928 +9533506 +9534429 +9544558 +9545480 +9552253 +9573163 +9577379 +9590907 +9591877 +9594509 +9595155 +9602019 +9634575 +4533273 +4534540 +11922580 +8890502 +9135821 +4534038 +4533202 +4534398 +9406822 +9432810 +6544687 +4534538 +4533123 +4533125 +4533128 +4533136 +4533661 +4533671 +4534408 +4534458 +4534533 +9248830 +9363692 +9556427 +9597741 +9503548 +9415435 +9424082 +9610447 +7589577 +7779226 +8818378 +8928353 +9538684 +9486411 +7717385 +8424964 +9511749 +5883985 +6132781 +10118643 +9875111 +9342344 +8021109 +9496896 +9629365 +11478679 +9478331 +5108640 +5110377 +5110644 +1779334 +5114189 +5114192 +5114198 +11452421 +11466090 +11470672 +11590674 +11615055 +11619030 +11626773 +11627464 +11660145 +11713256 +11749278 +11753804 +11781300 +11859640 +11887065 +1763072 +5109299 +5109369 +5109413 +5772063 +8755207 +8943174 +9038042 +9307254 +9334639 +9387782 +9404919 +9506719 +5112130 +5112131 +4534675 +4534681 +4534683 +4534685 +4534686 +9244066 +9551316 +7398419 +1792564 +8108800 +1800130 +1800140 +1771634 +1771650 +1771678 +1771698 +8581601 +9623131 +1774929 +1770772 +1770821 +1770828 +1770869 +1770880 +1770918 +1770955 +1771019 +1771040 +1771055 +1771067 +1771169 +1771204 +1771214 +1771245 +4533714 +7940536 +1765751 +5113847 +5113853 +5772309 +5108665 +5108670 +5108761 +9374637 +9586329 +1768196 +1768199 +1768201 +11783188 +4534525 +1773901 +1773904 +4533347 +4533360 +9490756 +1797903 +4532203 +4532206 +4532239 +4532253 +4532260 +6115793 +6115822 +8103163 +11501104 +1776094 +9354669 +10714961 +10867462 +1822346 +9253819 +9517291 +9561820 +11562243 +1822587 +1822610 +1822613 +5118459 +5118474 +5118509 +5118524 +1822667 +9778438 +1822784 +1822787 +1822788 +1822796 +1822805 +1822819 +1822830 +1822848 +1823294 +1823637 +1823726 +1824080 +7875265 +1824259 +1824390 +1824442 +1824449 +1824571 +5118828 +1825064 +5118859 +1825077 +1825083 +4534909 +4534914 +9426054 +1825156 +1825176 +1825218 +1825428 +1825430 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +5118934 +5118944 +5118949 +7345777 +1825967 +1825971 +1825983 +1826022 +1826033 +1826048 +1826058 +1826084 +1826108 +1826156 +1826163 +1826164 +1826167 +1826169 +1826172 +1826173 +1826175 +1826181 +5118996 +1826222 +5119009 +5119011 +5119013 +5119016 +5119026 +5119039 +5119046 +5119050 +10115073 +9807789 +1827103 +1827112 +1827113 +1827125 +1827132 +1827133 +1827161 +5119143 +4534869 +9883140 +5119223 +5119245 +1827645 +1827649 +1827716 +1828105 +1828162 +4534872 +1828268 +6201790 +9454052 +9255512 +1892729 +1892742 +4299095 +5127805 +1893137 +5128005 +5128007 +5128034 +1894102 +1894164 +1894268 +1894293 +1894298 +5882039 +1894329 +1894342 +7712938 +1894714 +4535614 +4535630 +4535632 +4535636 +8049830 +1894840 +1894896 +4535827 +1895138 +4535809 +4535817 +1895185 +5128232 +5128250 +5128266 +5128323 +5128326 +5128353 +5128357 +5128363 +5128380 +9804158 +8763986 +1895867 +1895875 +1895886 +1895904 +5128475 +5128488 +1896749 +1896841 +1896915 +1896932 +11701883 +8367663 +1897664 +1897977 +1898286 +4299368 +4299370 +5129293 +5714367 +5714369 +7346344 +1898402 +1898414 +1898416 +1898431 +1898521 +1898544 +5129374 +5129378 +5129387 +5129405 +5129417 +5129430 +5129432 +5129451 +5714356 +5714361 +5129481 +5129531 +5129535 +5129544 +1898686 +4299211 +4299213 +1900024 +8847500 +9208918 +1900131 +1900233 +1900872 +1901268 +8247566 +1901735 +1901832 +1901850 +11135155 +12258652 +5130400 +5130514 +5130528 +5130548 +9357385 +1902430 +1902533 +1902543 +5130559 +1902670 +1902676 +1902680 +1902699 +4299218 +1902749 +8140883 +8189761 +4535689 +1902880 +1903607 +1903683 +5131608 +1904382 +5131951 +1905161 +1905162 +1905172 +1905187 +1905189 +1905242 +1905257 +1905267 +1905281 +1905297 +1905299 +1905301 +1905310 +1905317 +6221746 +1905383 +1905396 +1906552 +8208583 +1907153 +1907235 +1907250 +1907272 +1907498 +1907580 +1907625 +1908011 +1908044 +1908052 +1908055 +1908123 +1909128 +1909170 +8727750 +12234977 +1909398 +1909800 +1909838 +5133265 +5133565 +5133568 +1911093 +1911112 +1911168 +1911178 +1911246 +1911278 +1911298 +1911461 +1911503 +7728366 +5133595 +5133621 +8548427 +1911633 +4535592 +7809779 +8078362 +1911939 +1912003 +1912119 +5133693 +1912325 +1912372 +1912428 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133864 +5133990 +5714410 +5772890 +7428726 +7799370 +8810143 +10638244 +4535581 +5134098 +8312017 +1913175 +1913178 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134687 +5134693 +5134759 +5134810 +5135191 +5135355 +5714507 +7738295 +8233062 +8314088 +9915028 +9967126 +1914410 +1914421 +1914435 +1914439 +1914458 +1914464 +1914465 +1914477 +1914484 +1914496 +1914498 +1914500 +1914501 +4299191 +8918036 +1915469 +1915470 +1915487 +1915492 +1915506 +1916410 +1916412 +1916509 +7854318 +1918094 +1918293 +1918395 +1918411 +4299802 +4299804 +1918627 +1918669 +1918733 +1918843 +1918854 +1918868 +8035998 +8176911 +1918964 +1918968 +1918972 +1918984 +1918986 +1918988 +5128045 +4535618 +4535510 +5130587 +5130682 +5130696 +7762841 +5131096 +5131142 +5131293 +5131585 +5131593 +5132079 +5132084 +5132183 +5132191 +5132238 +5132246 +5132317 +5132398 +5132461 +5132479 +5132505 +5714312 +5714333 +8001799 +5133088 +5714299 +5714302 +5135513 +5131910 +8138711 +8549720 +1910628 +1902143 +1902175 +1902182 +1899349 +1899433 +1899818 +5129913 +7768674 +7934873 +8168644 +8393082 +10662329 +4299778 +5132940 +5132956 +5132973 +5133009 +1914701 +1951412 +1951448 +1951557 +5142842 +5142870 +1951649 +1951657 +1951660 +1951784 +1952014 +5142903 +1952032 +1952043 +1952062 +1952093 +1952130 +1952229 +5143048 +1952449 +1952532 +1952730 +5143107 +5143129 +5143147 +1952806 +1952812 +1951713 +1832819 +1832853 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +10045595 +1853064 +4529248 +10597291 +5102424 +1941864 +5120465 +1843888 +1843889 +5120577 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121517 +5121613 +5121737 +8273859 +1842043 +1842097 +1842196 +5120396 +1842446 +1842485 +1842508 +1842542 +4301036 +1842690 +1842695 +4529738 +5120453 +1843444 +1843602 +10327658 +10619048 +8292351 +10304313 +10607329 +11484123 +9114044 +5101394 +1730978 +1731263 +10458960 +10469497 +4525641 +1731598 +1731750 +1731811 +1731812 +1872368 +7628188 +1878688 +1878705 +1878751 +1878753 +1878782 +1878789 +1878810 +1878837 +1878862 +1878879 +1878895 +1878904 +1878907 +1878937 +1878939 +1878958 +4531506 +4531517 +1879227 +1879252 +1879253 +1879272 +1879274 +1879348 +1879398 +1879408 +1879413 +1879427 +10366679 +10874932 +1879443 +1879452 +1879471 +5126212 +5126217 +10177508 +1879534 +1879630 +1879703 +1879731 +1879735 +1879765 +5126229 +5126352 +5126365 +5126404 +5126517 +5126533 +10915497 +10922201 +1879939 +1879970 +1879975 +1880013 +1880019 +1880025 +1880040 +1880044 +1880049 +1880062 +1880064 +1880078 +1880083 +1880088 +1880094 +1880104 +1880123 +1880132 +1880133 +1880138 +1880139 +1880140 +1880143 +1880156 +5126585 +5126637 +1880379 +1880381 +1880411 +4302319 +5126663 +1880907 +1880931 +1881094 +1881111 +1881122 +1881126 +1881139 +1881151 +1881166 +9819403 +4531687 +1881208 +5126697 +5126718 +5126721 +5126726 +5126729 +1881603 +4531713 +1881767 +1881834 +4531975 +5126751 +1881917 +1881955 +1882089 +1882158 +1882190 +1882195 +1882210 +1882218 +1882253 +1882316 +1882437 +1882459 +1882557 +1882729 +5126785 +5126834 +5126892 +5126958 +5126963 +8325294 +1882785 +1882786 +1882812 +1882816 +1882818 +1882819 +1882905 +10191785 +11891668 +1882927 +1882941 +1882958 +1882959 +1882960 +1882965 +1882977 +1882979 +8725248 +1883020 +1883038 +1883067 +1883161 +1883168 +1883386 +5127089 +5127107 +5127116 +5127118 +5127130 +5127132 +1883634 +1883829 +1883897 +1883968 +1883975 +8324720 +9864281 +1883993 +1884001 +4531690 +1884212 +1884213 +4531708 +1884428 +1884435 +1884439 +1884453 +1884464 +1884465 +1884479 +1884685 +9308930 +1884703 +1884774 +1884790 +4532122 +1884923 +1884970 +1884997 +1885001 +1885158 +1885202 +1885229 +1885642 +5127170 +1885937 +1885950 +1886084 +1886251 +1886262 +5127203 +1886292 +1886320 +8223165 +1886378 +1886398 +1886400 +1886419 +4302333 +1886490 +1886501 +1886579 +1886583 +1886587 +1886648 +1886650 +1886729 +10510138 +7562564 +1886868 +1886906 +1886929 +1886935 +5127222 +1886951 +1887004 +1887024 +1887031 +1887285 +1887290 +1887309 +1887341 +1887459 +10437872 +5127325 +5127335 +5127336 +5127337 +5127339 +5127350 +5127353 +5127354 +5127355 +5127357 +1887565 +1887634 +4531670 +1887701 +1888009 +1888047 +4531968 +1888306 +1888307 +1888336 +1888338 +1888410 +1888435 +10922411 +1888484 +5127378 +5127380 +1888579 +1888619 +1888646 +1888695 +1888733 +1888743 +1888759 +1888823 +1888826 +12106417 +1888946 +1888955 +1889028 +1889267 +1889287 +1889327 +1889536 +1889905 +1889939 +1889942 +5127521 +1890187 +1890247 +11044778 +7543006 +1890368 +1890374 +1890404 +1890410 +1890417 +1890487 +1890491 +1890508 +1890512 +1890520 +1890522 +1890534 +1890560 +1890576 +1890599 +1890622 +1890629 +1890654 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890730 +1890737 +1890772 +1890783 +1890794 +1890800 +1890802 +1890854 +1890876 +1890885 +1890898 +1890917 +1890934 +1890936 +1890957 +6207059 +7431428 +1891035 +10034831 +1891048 +1891059 +1891074 +1891167 +1891177 +1891190 +1891326 +1891366 +1891386 +1891426 +1891438 +1891453 +1891473 +1891484 +1891488 +1891493 +1891494 +4532022 +8411753 +10310835 +1891755 +1891758 +1891889 +9884308 +1891932 +1892131 +1892193 +1892242 +1892245 +1892301 +1892302 +1892311 +1892320 +1892355 +1892420 +1892427 +1892433 +9059564 +1892476 +1892477 +1892488 +9674732 +1884255 +1884273 +1884280 +1884312 +1884326 +1884332 +1884337 +1884370 +1884403 +10179389 +10259280 +10330376 +10482025 +10655790 +5884851 +9181627 +9935837 +5771877 +7864212 +8146570 +8425580 +6120803 +6133232 +6121218 +6133154 +8876855 +10106345 +10432184 +10444331 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +9530406 +1886374 +1889717 +1889721 +1889745 +1889760 +1889765 +1889828 +1889833 +1889838 +1889850 +1889870 +5127631 +5127656 +5127688 +5802339 +1887108 +1887119 +1887122 +1887125 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +1886123 +1886207 +4532160 +5771880 +1846099 +1846103 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846190 +1846210 +1846219 +1846229 +1846236 +4528818 +1846240 +1846259 +1846261 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +9958241 +1853312 +5122293 +1853587 +4526048 +1854143 +1854202 +1854347 +5122439 +1854792 +1854824 +1854849 +5880063 +12239445 +4526094 +4526050 +7717983 +1858615 +1858637 +9777614 +1858659 +1858660 +1858674 +1858698 +1858706 +9689122 +1858775 +1858778 +1858873 +1858930 +1859046 +1859100 +1859161 +1859177 +1859285 +1859287 +1859305 +9760511 +1859471 +1859480 +1859488 +9675743 +9686431 +9746673 +9748079 +6133397 +1859929 +1859932 +1859952 +9752950 +1860026 +1860063 +1860076 +4536472 +4536483 +9700261 +7642240 +8200050 +1973458 +1973466 +1973467 +5123221 +5123042 +5123046 +5124468 +8877458 +9240588 +9355107 +9531432 +9547535 +9606779 +1865102 +1865107 +11754954 +1865295 +1865299 +1865313 +1865319 +1865328 +1865333 +1865341 +1865345 +1865347 +1865348 +1865353 +5124557 +5124589 +1865555 +1865571 +1865590 +1865659 +1865668 +1865671 +1865839 +1865842 +1865853 +1865856 +1865862 +1866085 +1866123 +1866214 +1866336 +1866338 +1866341 +1866356 +1866550 +1866556 +1866568 +1866570 +1866601 +1867021 +1867022 +1867029 +1867032 +1867037 +5124880 +5124911 +10247309 +1867820 +1867928 +8439879 +9983244 +1867993 +1736271 +7734292 +1841675 +1841764 +1841782 +1841813 +1841821 +1841946 +10309331 +5123615 +1861456 +1861510 +1861559 +1861604 +1861644 +5123636 +1861665 +1861673 +1861705 +1861759 +1861773 +1861784 +1861797 +1861823 +1861834 +1861836 +1861842 +1861851 +1861862 +11529603 +1861887 +1861892 +1861893 +1861949 +1862072 +1862129 +1862181 +1862198 +5123676 +1862363 +1862401 +11907754 +1862475 +1862517 +1862547 +1862569 +1862572 +1862578 +1862580 +1862595 +1862624 +1862701 +1862719 +1862757 +1862765 +1862774 +1862837 +1862841 +1862916 +1862917 +1862923 +1862928 +1863021 +1863025 +1863075 +1863080 +1863088 +5123775 +5123922 +1863366 +1863405 +1863407 +4301348 +1863412 +1863584 +5124007 +5124029 +5124049 +1863757 +5124050 +1863829 +1863848 +1863856 +1864156 +1864161 +1864164 +1864165 +8956567 +1864204 +1864316 +1864320 +1864321 +1864329 +1864352 +1864358 +1864377 +11141784 +5124118 +5124119 +5124121 +5124136 +5124143 +5124147 +5124172 +5124199 +5124200 +5124208 +5124219 +5124232 +5124233 +5124250 +5124268 +1864652 +5124332 +5124442 +5124443 +5124448 +5124450 +1864793 +5885399 +5123954 +5123968 +5123971 +5123979 +5123983 +5123999 +5124000 +8849480 +9513830 +1863978 +1863982 +1864004 +1864008 +1864021 +1864046 +1864070 +1864090 +1992573 +1992634 +5150053 +1993419 +5150092 +1993643 +1992817 +1939432 +1939460 +4525189 +5143232 +9053308 +9424853 +1953998 +5143249 +1954084 +1860108 +1860118 +1830031 +10650211 +5119482 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830442 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830537 +1830584 +1830632 +1830802 +4525364 +1754270 +5105642 +1754332 +5105649 +5105656 +5105671 +5106115 +5106160 +5106249 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7674502 +7778368 +7903078 +7955974 +8158342 +8201251 +8426357 +1757839 +10174151 +10322104 +8964772 +4522753 +1830681 +10604375 +1953124 +1939658 +1939677 +1939680 +1939688 +7646066 +1751557 +1751572 +1751575 +1751670 +1751684 +1751690 +1829287 +1829322 +1829363 +1854920 +5122526 +5122538 +5122556 +5122571 +5122574 +5122581 +5122620 +5122646 +5122647 +5122668 +5122683 +5122691 +5122696 +5122702 +9015218 +1855358 +10055273 +1856005 +1856289 +1856384 +1856581 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856720 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857258 +1857380 +1857577 +1857626 +9790007 +1857809 +1857828 +1857829 +1857840 +1857856 +1857863 +1857878 +1857918 +1857924 +1857938 +1857945 +1857973 +1857978 +1858074 +1858100 +1858113 +1858163 +5122876 +5122969 +1858283 +1858321 +1856891 +10038125 +1937642 +1937655 +1937688 +1937691 +1937739 +1937751 +1937758 +1937803 +1937816 +1937819 +1937846 +1937974 +1938016 +1938022 +1938081 +1938104 +1938159 +1938168 +4299870 +4693382 +8225376 +10600208 +12200213 +1937167 +1937490 +1937556 +1938214 +1938233 +1938300 +1938446 +1938520 +1938612 +1938810 +1938955 +1938975 +1939056 +1939134 +1939136 +5141324 +5141342 +4694313 +11561676 +12219250 +12229940 +12247359 +12253844 +12262562 +5141262 +1856368 +1856394 +1856555 +1857690 +5123018 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833497 +1833499 +1833500 +1833626 +8546322 +1835031 +5770913 +1835156 +1835393 +1835396 +1835500 +5119905 +5119961 +5119969 +10304283 +1836899 +1837172 +1837900 +1838666 +1838960 +1838969 +9895629 +1839770 +1839851 +1839893 +1841159 +5770922 +5770942 +4529032 +10511237 +5119893 +5119895 +1800238 +4534796 +4534798 +1800963 +5114431 +5114435 +5114436 +5114439 +1801051 +1801896 +4534779 +4534782 +4534792 +9313634 +9385576 +9454291 +9574801 +9579309 +9626037 +1802113 +8924506 +1802280 +1803012 +1803065 +1803073 +10942408 +4534762 +4534767 +9239301 +9426252 +5114295 +5114311 +5114317 +5114327 +5114340 +8244266 diff --git a/dev/releases/mambo_v3/presets/asia.classes b/dev/releases/mambo_v3/presets/asia.classes new file mode 100644 index 0000000..e5be493 --- /dev/null +++ b/dev/releases/mambo_v3/presets/asia.classes @@ -0,0 +1,5336 @@ +1837646 +1934693 +1935614 +1935838 +1935849 +1992277 +1992283 +1992301 +1992315 +1860621 +1860628 +1860659 +1860664 +1860668 +1860688 +1860711 +4522933 +5123582 +1732063 +1732114 +1732115 +1732416 +1732452 +1732508 +1732521 +1732525 +1732565 +1732662 +1732685 +1732763 +1732830 +1732842 +5101640 +1733154 +1733155 +1733243 +1733258 +1733394 +1733412 +1733484 +4525266 +1733755 +5734897 +5101678 +5101717 +5101745 +5769191 +1734453 +5102207 +5102242 +1734496 +1734519 +1734690 +1734704 +1734826 +5734891 +5102287 +5102300 +1831890 +1832143 +5734640 +11453841 +1832235 +1832248 +1832254 +5734645 +1832612 +11505614 +8825467 +1845270 +1845368 +1845547 +1845548 +1845565 +1845607 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +10785815 +11730078 +1847061 +1847062 +1847097 +1847111 +1847157 +1847260 +1847392 +4528547 +1847572 +1847641 +9262981 +1847956 +9546514 +1848150 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848864 +1848868 +1849104 +5122013 +1849267 +1849284 +1849294 +9007213 +1849477 +11052757 +11080751 +1849531 +1849552 +1849630 +1849656 +1849924 +1850008 +1850076 +1850238 +1850246 +11576787 +1850302 +1850335 +1850386 +1850394 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850633 +1850640 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +1851203 +1851220 +1851337 +1851347 +1851543 +1851555 +5122206 +4527972 +1852165 +1852177 +6133343 +1852430 +11287091 +1829533 +1829588 +1829659 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +7623903 +5879654 +7448174 +4525610 +10835385 +10855556 +5125130 +1861395 +1868428 +1868527 +5734146 +1845866 +1845962 +1845965 +1834980 +8503184 +1839094 +1841261 +1830843 +1830122 +1830125 +1830131 +1830147 +1830152 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +4525476 +4525487 +1831458 +1831631 +1831643 +1831655 +9379855 +8834672 +1839625 +1841296 +4528593 +1853723 +5880147 +9734171 +10679326 +10746289 +11382064 +10698858 +11570545 +10701190 +11807833 +12199936 +11095591 +11418741 +11571523 +7908344 +12259113 +12208733 +12235234 +12217030 +1758625 +1759150 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +10889719 +1760970 +1761111 +1761213 +1761353 +1761387 +9257793 +1762151 +11562374 +1762219 +1762226 +1762298 +1763589 +5109766 +1763650 +1763782 +1763812 +1763976 +1763994 +1764021 +1764032 +1764043 +1764060 +9278311 +1764531 +1764640 +1764880 +1764886 +1765653 +1765863 +1766260 +1766558 +1766560 +1766570 +1766584 +1766601 +1766612 +1766618 +3257809 +6116699 +1766888 +1767044 +1767755 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +1768440 +5110232 +1768898 +10820762 +1769103 +1769168 +11467034 +10848620 +1769410 +1769425 +1769465 +1769737 +1769772 +10881384 +12148290 +1769823 +1769827 +1769840 +1769852 +1769897 +1769901 +6132966 +6132967 +7701550 +8837162 +1771839 +1771975 +1771977 +1772352 +1772793 +4532500 +5110397 +5110417 +5110447 +5110490 +1774575 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +1777289 +1777631 +5110837 +1777695 +9372988 +6132953 +4687991 +6133029 +5110981 +5110986 +5110993 +5111007 +5111044 +6133058 +9610080 +1779399 +1779456 +6132938 +1780150 +5111830 +10203499 +1780705 +1780716 +1782115 +1783302 +1783652 +1783882 +1784804 +10208792 +1785744 +1785832 +1786317 +1786711 +11368766 +5112500 +6132971 +6132974 +1786958 +1786980 +1786985 +1787009 +10860091 +6132805 +1788045 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +1790331 +1790692 +1790816 +10749137 +10766319 +1790876 +1790888 +1791010 +1791094 +1791097 +10743044 +6132950 +5112940 +1791514 +1791698 +1791715 +11016336 +11725043 +11971514 +5113078 +5113082 +5113084 +5113148 +5113234 +1792210 +5113330 +5113352 +1792541 +1792695 +5113385 +5884243 +9504222 +1793429 +1793610 +1793613 +1793631 +1793635 +1793646 +1793656 +1793892 +5113925 +1796984 +10108671 +6132979 +10600368 +1797178 +1797258 +1797259 +1797276 +1797299 +1797333 +1797344 +1797349 +1797367 +1797374 +1797429 +1797454 +1797479 +1797527 +4532461 +4532471 +4532473 +8016905 +8355390 +8756768 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +6117055 +1798346 +1798408 +4532493 +1798449 +1798481 +1798488 +1798504 +6115283 +6132841 +6132850 +11732472 +11976273 +1787072 +1787079 +1798523 +1798529 +1798580 +1798594 +1798687 +1798700 +1798794 +1798802 +1798807 +1798823 +1798863 +1798868 +4301310 +4532351 +4532352 +4532357 +6115426 +6115437 +6133046 +6133051 +8793873 +1799417 +1799708 +1799743 +1799751 +1799757 +6132824 +6132825 +10722110 +1803148 +1803163 +1803197 +1803302 +1803824 +1804071 +1804477 +9343385 +1804906 +1805044 +1805111 +11494627 +12229237 +1805580 +5115166 +5115167 +5115198 +9663271 +1806814 +1806871 +1806872 +1806936 +7874258 +1807969 +11453492 +1808140 +1808145 +1808161 +1808166 +1808180 +1808195 +1808221 +1808232 +1808236 +1808286 +1808340 +1808348 +1808381 +1808440 +1808450 +1808559 +6198302 +9219266 +1808752 +5115701 +5115771 +1809019 +5115777 +1809115 +1809210 +1809308 +10189965 +1809381 +1809387 +5116095 +10183056 +12006709 +1810099 +1810464 +10882244 +5116395 +5116412 +12176559 +12182061 +1811686 +1812500 +10671425 +10821201 +11736162 +12209759 +1813010 +1813036 +1813114 +1813263 +5117189 +5117200 +7656811 +1814538 +1814630 +1814653 +1814913 +1814928 +1814971 +5117399 +5117400 +1815260 +1815680 +10826443 +12249986 +1816029 +1816065 +1816138 +1816246 +1816276 +1816292 +1816299 +1816362 +1816881 +5117779 +1817797 +5734900 +11461056 +11860565 +1818413 +8326103 +1818659 +1818991 +1819050 +10822185 +1819128 +1819145 +4532293 +4532297 +6134023 +6134027 +6197200 +7346382 +7346384 +1819268 +1819270 +1819280 +11656384 +1819421 +8407461 +1819668 +6134035 +1819873 +1819928 +5118348 +6122092 +7657803 +8361973 +5118422 +10546538 +1820275 +1820282 +1820291 +1820318 +1820352 +1820372 +1820393 +1820401 +1820406 +1820414 +1820429 +1820440 +1820450 +1820451 +1820458 +1820477 +1820478 +5734655 +5734657 +7346381 +9420824 +1820565 +1820753 +1820888 +1821105 +1821260 +1822141 +1822142 +11731502 +12253343 +12037602 +9276279 +9347308 +5884571 +10503495 +8897869 +7596232 +5771982 +12176367 +7346231 +12183285 +6097214 +4532544 +4532516 +6133081 +6133083 +4532532 +4532565 +10864524 +12021153 +12021649 +12089608 +9673208 +10270464 +8741750 +9473918 +9400545 +9559336 +6133292 +11332355 +6133340 +10062933 +10717837 +8148822 +12216332 +12242422 +9852545 +10806460 +6133252 +10072380 +6133325 +9754232 +10972780 +11142432 +10629533 +10309234 +12171522 +9493317 +9315833 +11962292 +10004820 +10399906 +6133266 +6133269 +6133270 +6133271 +10754772 +10812069 +11232431 +6112449 +6133311 +6133312 +6133313 +6133315 +6133317 +8452092 +8526388 +8543494 +8624848 +9927378 +5734901 +6133262 +12257250 +10166724 +8831819 +12135372 +5115872 +5115874 +5116475 +8038357 +6133264 +6097254 +1774829 +10480609 +5116698 +5116843 +12171068 +9266866 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +6133033 +5116504 +1788635 +9336001 +1781413 +1781421 +1803461 +4532405 +4532408 +4532412 +10866411 +6133241 +6133242 +6133244 +6133248 +7346227 +8000103 +9478424 +1781598 +1794273 +4532534 +1772374 +1763761 +6115388 +1816648 +1816685 +6133297 +1774583 +1774598 +1774600 +1774604 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +1774682 +1774702 +1768626 +6132809 +1819852 +1780287 +1813174 +4532508 +1793515 +1793533 +5111643 +1804532 +9400916 +1768461 +1760246 +5113030 +5113036 +5109796 +1821455 +1821464 +1821478 +1821479 +1821505 +1821547 +1821651 +1821856 +1821863 +1821920 +1821934 +1821940 +1822017 +1819337 +1819362 +1804182 +1774997 +6122364 +1815315 +1819170 +1781446 +1781473 +6116073 +6116076 +1783713 +1783725 +1812394 +8237987 +4532366 +4687933 +4687935 +6116646 +6116661 +10926224 +11088003 +1820118 +1820137 +1819057 +4532453 +6116413 +1820039 +5118396 +1781531 +1798329 +1798331 +1798335 +1784947 +1785072 +1785105 +1765996 +1765999 +1766022 +6133069 +10272611 +10330198 +10598038 +11513188 +11612469 +1786597 +4687389 +5884188 +6132915 +6132916 +6132917 +9935660 +5110012 +1772822 +12185656 +1809594 +1781350 +1781353 +6133013 +1796943 +1819685 +10098436 +11717028 +1771772 +1771779 +1782310 +10094256 +6197138 +10765884 +9792270 +5108435 +5108440 +1771903 +1788813 +4301309 +10506164 +1777500 +1777517 +5112440 +1795542 +1860979 +1860983 +1860987 +1860994 +1861031 +4522916 +4522919 +4522922 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992489 +1992504 +1852956 +1852978 +1835432 +1835433 +1835457 +9724183 +1837343 +1837420 +1837429 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +5119808 +1831752 +1852751 +1852832 +4529630 +5125075 +5125104 +10371735 +1869359 +1869363 +9883856 +1751236 +1751298 +1751457 +4535884 +4535904 +1939510 +1939520 +5141344 +1860184 +1860259 +1860261 +1860274 +1860408 +4525177 +5123339 +10361029 +5123394 +5123419 +5769164 +5880040 +5880041 +6132546 +5123449 +5123461 +5123474 +5123485 +5123489 +1751207 +1751216 +1869595 +1869656 +1869706 +1869803 +1869852 +1869976 +1870202 +1870237 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871252 +1871407 +4531402 +4531409 +8766638 +1871451 +1871630 +1871683 +1871698 +1871783 +1871826 +1871988 +1872094 +1872169 +4531427 +7673242 +10787705 +1872848 +1872850 +1872873 +1872901 +1873048 +1873051 +1873079 +1873215 +1873411 +1873417 +4530947 +4530951 +1873776 +1873780 +1873783 +4531237 +4531264 +1873843 +1873890 +5125569 +5125591 +5125596 +5125602 +5125633 +5125635 +5125689 +1874168 +1874192 +1874204 +1874211 +1874269 +1874274 +1874280 +4531147 +1874375 +1874743 +9782192 +1874937 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +4531242 +1875633 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876168 +1876329 +1876357 +1876409 +1876512 +1876542 +1876592 +1876623 +1876854 +1876922 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +9111961 +1877498 +5126052 +1877788 +1877941 +1877988 +1878067 +4531417 +1878350 +1878406 +1878470 +1878471 +1878490 +1878500 +9835867 +1878586 +1883045 +1888454 +5884888 +6133441 +11728049 +1872315 +1871504 +1748805 +4525884 +5141493 +10451589 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736358 +1736377 +1736412 +1736425 +1736484 +1736499 +1736560 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736945 +4530406 +1736993 +1737015 +4529931 +10842267 +1737313 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738192 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8869900 +5102931 +5102951 +1738687 +1738700 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739151 +1739272 +1739337 +1739377 +1739381 +5102982 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739833 +1739919 +1739922 +1739980 +1739999 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740469 +1740482 +1740524 +1740567 +1740570 +1740623 +8094357 +1740797 +1740828 +1741056 +1741253 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103061 +5103066 +5771357 +1741545 +1741551 +10838422 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +5104056 +6097235 +1743641 +1743643 +1743710 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1743998 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744808 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745816 +1745830 +8162538 +8369868 +1745895 +1745925 +1745947 +1745952 +1745957 +1746027 +1746174 +1746327 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746714 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +10442122 +5104442 +1747738 +4530138 +5104558 +5104597 +6097234 +7588222 +9242559 +1748456 +1748605 +1748720 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525562 +1920851 +1920864 +1920892 +10159697 +10707501 +9916153 +1920957 +1920991 +1920996 +1921009 +1921010 +1921021 +1921040 +1921044 +7346426 +1921055 +10581870 +10825466 +1921092 +1921093 +1921150 +1921163 +1921262 +1921263 +1921300 +10556522 +1921466 +7387466 +1921633 +7346430 +5138069 +1921897 +1922057 +1922085 +1922111 +1922143 +1922163 +1922244 +1922285 +1922288 +10384044 +10442031 +9904499 +1922311 +1922343 +8016522 +5138200 +1922572 +1922584 +4535092 +1922689 +1922701 +8782891 +1922745 +1922771 +1922937 +5138257 +1922994 +1923019 +5138298 +5138543 +5138561 +5714680 +1923458 +1923491 +1923525 +1923649 +1923650 +1923651 +1923668 +1923744 +4708972 +4708977 +1923796 +1923809 +1923883 +1923917 +1924044 +1924057 +1924077 +1924097 +1924106 +1924193 +5138681 +1924298 +1924323 +10656713 +1924390 +1924417 +1924458 +1924558 +1924713 +1925221 +1925233 +4535172 +1925381 +1925454 +1925543 +1925609 +1925628 +1925679 +1925711 +1925731 +1925743 +1925877 +1925918 +1925962 +1926054 +9816676 +1926324 +1926436 +1926437 +1926446 +1926448 +1926456 +1926530 +1926546 +1926550 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926722 +1926800 +1926861 +10087308 +11008182 +11508257 +11543078 +1926972 +1927025 +1927034 +1927217 +1927219 +1927242 +1927272 +1927274 +1927284 +4709107 +4709111 +5883052 +7408690 +8322165 +9994384 +10517500 +1927348 +1927393 +1927439 +1927445 +1927707 +1927717 +5882965 +7680748 +1927897 +1928248 +5139040 +5139050 +1928349 +1928361 +1928376 +1928382 +1928419 +5139156 +1928628 +5139201 +1928754 +1928849 +1928908 +1928915 +4709030 +9856663 +1928960 +1929270 +1929402 +1929659 +1929697 +5139309 +5139339 +8356768 +1930110 +1930832 +1930904 +1930916 +1930935 +4535106 +1930954 +1930968 +1931109 +1931132 +8643155 +1931148 +1931179 +1931509 +1931561 +5734268 +7346434 +1931655 +1931656 +1931706 +1931729 +1931735 +1931779 +5139915 +1931889 +1931906 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +4709051 +1932043 +1932159 +1932166 +1932172 +1932189 +1932206 +1932246 +1932273 +1932287 +4709095 +4708995 +1932411 +1932551 +1932563 +7346444 +1932607 +5139990 +6132685 +1932752 +1932812 +1932814 +1932863 +1932960 +1932976 +5806412 +1933028 +1933044 +1933084 +4535162 +5140214 +5140244 +5140436 +5140443 +7634721 +7664111 +1933583 +1933647 +1933649 +7346407 +1933679 +1933793 +1933844 +1933845 +5140534 +5140561 +1934187 +1934188 +1934192 +1934211 +1934213 +1934221 +1935363 +1935372 +1935377 +1935405 +1935408 +1935410 +1935454 +1935459 +1926260 +5138929 +7346417 +10879371 +11874998 +4709102 +1933095 +1933138 +1924494 +11055981 +9623220 +1752161 +5734556 +1752373 +1752483 +1752492 +1752494 +1752603 +1752651 +1752749 +1752758 +1752849 +1752903 +1753081 +1753215 +1753395 +5105458 +5105467 +5105547 +5105560 +5105570 +1753432 +1753435 +11014495 +1753636 +5734560 +1753759 +5105588 +10955682 +10932946 +4522322 +7345843 +6133481 +10017342 +10203493 +5105339 +5105259 +10795141 +11673056 +1919151 +1919160 +1919161 +10988070 +1919176 +1919181 +1919213 +1919221 +1919223 +1919320 +1919328 +1919333 +1919340 +1919344 +1919346 +1919348 +1919407 +1919412 +1919438 +1919444 +1919534 +1919551 +1919564 +1919581 +1919589 +1919635 +1919697 +1919706 +1919712 +1919716 +1919720 +1919728 +1919731 +1919741 +1919744 +1919756 +1919758 +1919762 +1919951 +1919966 +5137747 +5137748 +1920181 +1920237 +1920247 +1920258 +1920259 +5137790 +5137808 +5137823 +5137828 +5137832 +5137833 +5137847 +5137849 +5137850 +5137854 +5137858 +5805954 +1920348 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +1920395 +1920401 +1920405 +5137861 +1920454 +1920467 +1920469 +1920472 +1920491 +1920494 +1920496 +1920502 +1920506 +1920512 +4535307 +5137889 +5137891 +5804932 +5805036 +5805407 +1920515 +5137902 +5137903 +5137908 +5137912 +5804895 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137949 +5137955 +1920707 +1920709 +1920711 +1920712 +1920718 +1920786 +5804166 +5714914 +5137573 +5137578 +5137582 +5137595 +5137605 +5137612 +5137636 +5137663 +5137677 +5137682 +5137689 +5137706 +5137708 +5803588 +8203812 +1920218 +5137763 +7207679 +1748922 +1748942 +1749050 +1749070 +1749449 +1749713 +1749744 +1749869 +1749921 +1749948 +1749954 +1750076 +1750097 +1750143 +1750166 +1750288 +1750326 +5104772 +5104797 +5104829 +5104882 +5104891 +5104903 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +8741260 +1758003 +1735532 +4527339 +4527342 +1758440 +1758441 +1758461 +1758602 +1731826 +1731837 +1731860 +1855241 +1868837 +1868952 +1869057 +1869178 +1869187 +11794362 +1992547 +1963095 +1963096 +1973530 +11826016 +5143303 +5143311 +5143315 +1954490 +1954496 +1954563 +5143338 +5143354 +5143368 +5143380 +5143384 +5143437 +5143453 +5143477 +5143506 +5143511 +5143525 +5143575 +5734335 +1954891 +1954911 +1955039 +6133648 +1955389 +5143651 +1955552 +1955581 +6133676 +1955694 +1955725 +1955806 +1955856 +5143675 +5143697 +1956309 +1956384 +5734542 +5734543 +1956440 +1956496 +1956524 +1956536 +1956599 +1956629 +1956710 +6133593 +4525068 +1957161 +1957174 +1957266 +1957300 +1957333 +1957368 +1957413 +1957460 +1957523 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957706 +1957718 +1957746 +1957791 +1957816 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143947 +1958024 +1958045 +1958065 +1958152 +1958158 +1958163 +1958241 +1958252 +1958255 +1958259 +1958260 +1958275 +1958282 +1958290 +1958305 +1958307 +1958323 +1958324 +6544637 +1958422 +1958454 +1958463 +1958483 +5144027 +1958515 +1958528 +1959383 +1959395 +1959461 +1959467 +1959494 +1959645 +1959652 +1959666 +1959667 +1959682 +1959735 +6133552 +1959876 +1959914 +1959919 +1959948 +1960002 +10694777 +1960023 +1960181 +1960182 +6133509 +1960484 +5144092 +5144093 +1960571 +1960595 +1960617 +6133518 +1960686 +1960854 +1960963 +1961013 +1961037 +1961040 +5734344 +1961052 +1961068 +1961126 +1961162 +7346236 +1961190 +1961252 +1961647 +1962204 +1962265 +1962268 +1962434 +1962447 +1962516 +9812211 +1962584 +1962636 +1962678 +1962839 +1962860 +1963011 +4302252 +5734349 +1963168 +1963306 +5144345 +1963446 +1963463 +1963629 +1963709 +1963710 +1963733 +1963827 +11644349 +1964024 +1964025 +1964029 +6133500 +1964113 +1964116 +1964189 +1964191 +1964195 +1964247 +1964305 +1964316 +1964331 +1964437 +1964471 +6133502 +1964637 +1964653 +1964657 +8361848 +1964702 +1964738 +5144426 +1965166 +1965197 +1965208 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +5144431 +5144438 +5144472 +9919915 +9370070 +5144499 +1966286 +1966302 +1966310 +5734448 +10670854 +1966351 +1966362 +1966367 +5144534 +1967003 +1967006 +1967011 +1967039 +5144543 +1967245 +1967265 +1967273 +1967445 +1967590 +1967595 +1967597 +1967672 +1967688 +7346240 +1967803 +1967815 +1967873 +1968147 +1968182 +1968193 +7681733 +1968304 +1968363 +1968730 +1968746 +1968837 +1968867 +1968951 +11598540 +1968990 +1969291 +1969357 +1969463 +1969491 +11858774 +1969581 +6133643 +1969621 +1969954 +1969958 +1970034 +1970136 +1970213 +1970227 +1970243 +1970284 +1970322 +1970436 +5734405 +6133513 +7346252 +5144677 +5144721 +5144782 +5144787 +5144805 +5144806 +5144864 +5144880 +5144900 +5144936 +5144942 +5145009 +5145075 +5145136 +5145139 +5145186 +5145255 +5145260 +5145269 +5145396 +5145409 +5145495 +5145502 +5145503 +5145522 +5145560 +5145624 +5145729 +5145735 +8014296 +9194811 +9627567 +1971847 +1971858 +1971888 +6133516 +1972094 +1972120 +1972185 +1972187 +1972234 +1972250 +1972342 +1972374 +1972377 +5145870 +5145965 +5146038 +5146062 +7541913 +7960566 +1972434 +1972443 +1972449 +1972613 +1972614 +1972616 +1972620 +1972631 +10732353 +1972754 +5146282 +1973242 +1973338 +1973358 +1973393 +1973397 +1973414 +5146434 +5146476 +5146483 +5146496 +5146508 +5146510 +5146559 +5146566 +5146567 +5146599 +5146601 +5146608 +5146611 +5146659 +5146677 +5146746 +5146752 +5146762 +5146763 +5146833 +5146837 +5146862 +5146883 +5146894 +5146946 +5146961 +5147030 +5147038 +5147039 +5147043 +5147058 +5147062 +5147150 +5147171 +5147193 +5147208 +5147214 +5147232 +5147245 +5147306 +5147319 +5147354 +5147415 +5147441 +5147478 +5147492 +5147498 +5147516 +8366158 +1975164 +1975198 +6133559 +9875420 +5147608 +5147638 +1975341 +11856219 +1975546 +1975553 +1975571 +1975583 +1975597 +1975711 +1975733 +8329661 +1975793 +8160782 +1975805 +1975806 +10835542 +1975892 +1975897 +1975903 +1975914 +1975964 +1975979 +5734539 +9356491 +9410573 +9548993 +1976163 +1976212 +1976213 +1976224 +1976228 +1976311 +1976462 +1976463 +1976469 +1976470 +1976483 +5147681 +6097233 +7973517 +1976928 +1977003 +1977007 +1977068 +4523725 +5147819 +5147827 +5147834 +1977182 +1977184 +1977297 +5734420 +6133548 +5147917 +5147968 +5148043 +5148055 +5148066 +5148097 +5148115 +5148214 +5769028 +1977813 +1977833 +1977863 +6133582 +1977962 +1977967 +1978010 +1978034 +1978045 +1978056 +1978065 +1978114 +1978375 +1978385 +1978398 +1978405 +1978407 +1978422 +1978424 +1978445 +5734388 +1978499 +1978524 +1978529 +4524636 +4524638 +5734519 +6133560 +4524890 +5148252 +10738407 +1978776 +1978789 +1978821 +5734396 +1978977 +1978996 +1978999 +6133546 +1979021 +5148286 +1979222 +1979229 +1979308 +1979430 +1979473 +1979521 +1979561 +1979562 +1979758 +1979781 +1979787 +1979801 +1979806 +1979822 +1980269 +5148436 +5148462 +5148486 +5148487 +1980521 +1980532 +11449815 +1980694 +1980811 +1980827 +1980917 +8421569 +1981063 +6133585 +1981357 +1981457 +1981696 +11173690 +10592969 +7345811 +7345813 +1981937 +1981938 +1981998 +1982007 +1982203 +1982221 +1982267 +1982291 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982790 +1982791 +1982838 +1982865 +1982885 +1982924 +1983034 +1983052 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983441 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983896 +1983922 +1983997 +1983999 +1984033 +1984117 +7752082 +8015895 +8026858 +8262357 +11121180 +5149012 +1984734 +5149081 +5149136 +5149174 +5149203 +1984942 +1984949 +1985061 +1985152 +1985158 +1985167 +1985181 +1985191 +1985192 +1985228 +1985230 +1985522 +1985573 +1985707 +6133659 +1985760 +1985926 +1985993 +1986009 +1986032 +1986052 +1986054 +1986056 +1986061 +5734345 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986508 +1986522 +1986575 +1986623 +1986650 +1986774 +1986779 +1986787 +1986936 +5149308 +5149315 +6133614 +1987203 +1987204 +5768880 +1987362 +1987377 +1987527 +9137631 +6118530 +1987629 +1987665 +1987737 +1987740 +1987744 +1987747 +1987766 +1987767 +1987775 +1987776 +1987785 +1987786 +1987787 +6133591 +4524221 +11650277 +6133534 +11190148 +1988002 +5734451 +1988225 +1988257 +1988306 +1988420 +1988487 +1988593 +1988642 +1988684 +8388883 +5149414 +5149438 +1988881 +5734528 +6133644 +1989355 +1989393 +1989428 +1989942 +1990043 +1990050 +1990066 +1990088 +1990105 +1990150 +5734390 +1990551 +1990582 +5149474 +1991123 +1991179 +6133501 +5149609 +1991277 +1991310 +1991371 +1991378 +1991394 +1991779 +1991783 +5149836 +5149843 +10155932 +11098546 +11869776 +1991945 +5734515 +11635419 +1992066 +5149929 +5149986 +6133619 +5734398 +5880512 +5880533 +5880539 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9442902 +9414984 +1989594 +4524740 +7990739 +4523560 +4523564 +4524054 +4523461 +4524998 +4525034 +4524376 +4524822 +11828714 +4524712 +10422582 +10574156 +10632124 +4523522 +5880392 +6133595 +6133596 +6133597 +9577234 +4523519 +4524070 +4524072 +4524403 +4524951 +4524955 +4524962 +10530208 +11555221 +4525078 +6133667 +6133670 +6133673 +6133674 +6133675 +7346249 +9220953 +9249651 +6133637 +6133620 +6133519 +11780161 +6133604 +6133607 +10629052 +7346237 +6133520 +6133562 +10864093 +5734379 +11548960 +7345819 +6133523 +6133525 +6133528 +6133542 +6133497 +6133498 +10477629 +6133575 +9962269 +6133517 +6133586 +6133635 +10175639 +9617411 +9932090 +7346256 +7345829 +11652557 +5734535 +7345801 +5734362 +11477039 +5880478 +6133540 +10755716 +5144190 +5146412 +5734482 +5149499 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149746 +5149768 +5149780 +5149784 +5149787 +5149819 +5734422 +7443518 +5146303 +5146335 +5146342 +5146379 +1991462 +1991466 +4302268 +4524393 +1942522 +1942060 +1942067 +1942244 +1942251 +5141643 +10773498 +1942378 +1942383 +1942618 +1942621 +1942636 +1942697 +1942715 +1942769 +1942790 +1942808 +1942836 +4689929 +5141677 +1942878 +1943212 +1943223 +1943236 +1943308 +1943397 +8178854 +8277078 +5141795 +1943505 +1943519 +1943619 +1943625 +1943757 +8073674 +8133678 +8273661 +1944462 +1944483 +1944503 +1944504 +1944521 +1944591 +1944619 +1944778 +5141924 +1945066 +9050611 +1945088 +1945122 +1945137 +1945143 +1945173 +1945225 +1945227 +1945270 +1945274 +1945286 +1945535 +1945569 +1945571 +1945589 +1945605 +1945694 +1945710 +1945715 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945877 +1945878 +5142001 +1946019 +1946051 +1946058 +1946067 +1946145 +5142067 +1946432 +1946486 +7346354 +1946661 +1946695 +1946731 +1946737 +1946738 +7389824 +1946916 +1946917 +1947117 +1947306 +1947335 +1947385 +1947409 +1947446 +1947449 +1947456 +1947491 +1947492 +1947496 +1947626 +1947661 +1947673 +1947703 +1947727 +1947740 +1947745 +1947753 +1947765 +1947775 +5734665 +1947805 +1947846 +1948061 +1948062 +1948073 +1948088 +5142213 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949404 +1949419 +7346351 +8828146 +9068968 +5142338 +5142352 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1950006 +5142394 +5142499 +5142599 +8109173 +1950013 +7346356 +1950156 +1950169 +1950171 +1950197 +1950302 +1950362 +1950521 +1950533 +1950879 +1950936 +1951157 +1951170 +5977247 +5977257 +8270406 +7633472 +5142725 +5142729 +5142730 +5142749 +4535396 +5142006 +5142032 +5142042 +1869467 +1869478 +1869489 +1869512 +1952878 +1952883 +1952909 +9359597 +9400895 +10744228 +1800191 +5109821 +1758613 +9355953 +5108419 +1758874 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +1759177 +1759407 +1759620 +1759661 +1759667 +1759668 +1759686 +5108636 +10329023 +1760104 +7444489 +1760593 +1760620 +1794361 +4534225 +1760857 +1760891 +1760893 +4533255 +1760939 +1760943 +1761041 +1761392 +1761438 +1761735 +1761778 +1761865 +1762244 +1762383 +6132749 +1762608 +1762657 +6132957 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763727 +1763741 +1764174 +1764553 +1764716 +1764791 +1765010 +1765011 +1765017 +1765038 +1765044 +4534245 +4534252 +4534257 +5109830 +5109843 +5109848 +5109855 +5109872 +5109882 +5109898 +5109931 +5109943 +8352161 +1765508 +1765658 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766410 +7895336 +1766646 +1766741 +1766773 +1766910 +11034779 +1767134 +1767368 +1767381 +1767393 +1767430 +1767511 +1767597 +1767608 +1767625 +10575632 +1767655 +1767674 +5110120 +5734744 +5772169 +5772171 +5772172 +5772176 +5772178 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +5802396 +5883914 +5883925 +6132943 +7345742 +7388922 +7768584 +8045644 +9356770 +1768117 +5110200 +1768341 +5110213 +1768568 +1768698 +1768702 +1768749 +1768771 +1768815 +1768819 +5110256 +5110258 +8150836 +1769057 +1769095 +1769194 +1769209 +1769505 +1769519 +1769543 +1769566 +1769958 +1769978 +1770150 +1770172 +1770307 +1770353 +1770461 +1770477 +1770530 +1770573 +4532696 +8393221 +1771357 +1771385 +1771391 +7725644 +1771509 +1771531 +1771555 +1771997 +1772013 +1772094 +6133806 +1772169 +1772179 +5772129 +1772940 +1772956 +1772977 +1773163 +1773328 +1773484 +1773572 +8222049 +1774272 +1774347 +1774470 +1774797 +4301304 +6115946 +6115953 +1774859 +1775112 +4534046 +4534052 +4534057 +5110593 +5772269 +5883881 +4534719 +1775962 +1775963 +1776067 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +6132861 +4534463 +1777253 +5110818 +5110871 +5110885 +1778074 +4534299 +1778109 +1778127 +1778143 +1778596 +5111481 +5111501 +5111513 +5111535 +5111574 +5772222 +8253467 +1779258 +1779276 +1779435 +1779633 +1779641 +1779690 +1780378 +1781016 +4533325 +1781233 +1781234 +5111974 +5111980 +1781694 +1781803 +1781841 +1782168 +1782177 +1782319 +1782341 +1782354 +1782457 +11763567 +1782543 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782757 +1782763 +1782777 +1782803 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +1783059 +6133026 +5112155 +5112160 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5734845 +5772349 +5772351 +8043500 +1783855 +1783861 +1783971 +1784349 +1784359 +1784513 +1784761 +1784812 +1784826 +1784853 +4534290 +1785145 +1785162 +1785181 +1785185 +1785286 +4532886 +4532888 +4532890 +1785314 +1785322 +1785329 +1785361 +1785367 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786448 +1786452 +1786515 +1786573 +1786619 +1786651 +1786664 +1786902 +1787064 +1787112 +1787213 +1787267 +1787279 +1787367 +1787373 +1787381 +4687681 +9268082 +1787400 +1787417 +1787504 +1787506 +1787590 +1787610 +1787631 +1787751 +1787770 +1787825 +1787841 +4534086 +1788425 +1788522 +9216200 +4534011 +1788846 +1788856 +1788917 +1789071 +1789076 +1789086 +1789267 +4533924 +1789553 +1789580 +4534162 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789849 +1789957 +1789982 +1790002 +1790062 +1790072 +1790084 +1790153 +4533115 +8047343 +1790361 +1790364 +1790376 +9174377 +1790625 +1791384 +1791422 +1791660 +1791784 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +10684776 +1792768 +5113370 +1792996 +1793238 +1793243 +1793246 +7918000 +1793661 +1793689 +1793877 +1793986 +1794534 +1794590 +1795065 +1795068 +4532908 +6133011 +1795215 +1795282 +7869346 +7922810 +1795597 +1795854 +1795900 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +4688166 +4688169 +4688172 +1796423 +1796451 +1796463 +8105817 +1796678 +1797030 +1797735 +1798060 +4533431 +4533433 +4533444 +4533446 +6133001 +6133002 +6133006 +6133007 +6133010 +1798090 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +5113951 +1799695 +1799701 +1799799 +1800004 +1800032 +1800149 +9536457 +6097260 +8742426 +9069966 +4534389 +4534207 +10638451 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4532269 +4533123 +4533125 +4533128 +4533136 +4533661 +4534408 +4534458 +4534533 +6132989 +6132762 +6133075 +5883985 +6132781 +8021109 +11478679 +10121804 +11311045 +5110644 +7654770 +6116899 +6132797 +1774285 +1779334 +5114198 +1763072 +5109385 +5109437 +5772063 +9038042 +8491927 +4534675 +4534681 +4534683 +4534685 +4534686 +1792555 +8108800 +1771634 +1771650 +1771675 +1771678 +1771698 +1770772 +1770821 +1770869 +1770880 +1771040 +1771169 +1771214 +1771245 +4533714 +4533720 +6132931 +7940536 +1765751 +10841562 +5113847 +5113853 +5772309 +5108660 +5108671 +5108705 +5108724 +5108737 +5108752 +5108761 +5108787 +5108794 +5108796 +5734817 +6132880 +9243764 +4534525 +1773901 +1773904 +1759394 +1789512 +1789530 +4533347 +4533360 +10933525 +5110282 +11437060 +11566649 +11615549 +11731155 +4532203 +4532206 +4532208 +4532216 +4532236 +4532239 +4532253 +4532260 +4532266 +6115772 +6115820 +6115822 +6115830 +8103163 +1782249 +1782273 +1782279 +1782289 +10063383 +1767293 +1767302 +8363507 +9325654 +10458175 +10683012 +10702885 +1822346 +1822487 +1822490 +1822493 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1822848 +1822852 +1823294 +1823444 +6133742 +1823573 +5118565 +7346263 +6133720 +1823706 +10996761 +1823726 +5118582 +1824113 +1824117 +1824131 +1824242 +5734235 +6133692 +7875265 +1824330 +1824338 +1824354 +1824390 +1824666 +1824751 +1824766 +1826020 +1824845 +1824997 +1825064 +5118859 +1825077 +1825082 +1825083 +4534909 +4534914 +1825156 +1825176 +1825336 +7346284 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +5118974 +5118978 +1825786 +7345777 +1825920 +1825956 +1825967 +1825971 +1825983 +1826022 +1826033 +1826108 +1826129 +11322712 +5118996 +5119000 +6133700 +10510959 +11059353 +6133750 +1827125 +5119143 +1827349 +1827408 +1827414 +1827484 +4534869 +6133691 +9883140 +5119181 +5119193 +5119211 +5119223 +5119239 +5119245 +1827645 +1827649 +1827650 +1827687 +1827711 +11435704 +1828162 +1828180 +4534872 +6201790 +7346286 +6133680 +6133681 +6133684 +6133687 +6133688 +7346276 +9921001 +5118837 +5118841 +7346271 +7346273 +9486293 +1822502 +1892554 +1892555 +5127748 +5806166 +11464595 +1892821 +5127835 +5127867 +5127893 +5127916 +5127932 +5127955 +5127971 +5127992 +5127998 +7346346 +9963153 +1893137 +1893177 +1893204 +1893241 +1893266 +5792081 +5128034 +1893329 +1893341 +10055104 +10477747 +12106975 +1893526 +1893538 +1893546 +1893551 +1893558 +1893612 +1893645 +1893660 +1893663 +1893699 +1893787 +1893793 +1893921 +1893923 +1893951 +4704279 +8832485 +8982591 +9136904 +10333787 +1893989 +1893993 +1893998 +1894002 +1894012 +1894057 +1894060 +1894164 +1894268 +5882039 +5128161 +5128169 +5128182 +7712938 +10398658 +1894714 +4535614 +4535630 +4535632 +4535636 +8049830 +10639484 +1894840 +4535827 +1895037 +4535809 +4535817 +1895159 +5128323 +5128326 +5128353 +5128357 +9804158 +1895448 +1895499 +1895527 +1895609 +1895667 +1895670 +1895867 +1895875 +1895956 +1895984 +1895992 +1896061 +1896063 +1896073 +1896105 +1896141 +1896142 +1896152 +1896304 +5128519 +1896841 +1896915 +1896922 +1897664 +1897677 +1897685 +1897692 +1897722 +1897747 +1897770 +5129266 +1897808 +1897814 +1897817 +1897834 +1897873 +10383968 +1898234 +1898250 +1898286 +4299368 +5129293 +7346344 +1898434 +1898441 +1898521 +1898544 +5129378 +5129417 +1898946 +1898958 +1898970 +1898988 +1899071 +1899187 +1899950 +1900093 +1900890 +1900897 +1900939 +1901001 +1901213 +5130277 +1901372 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901669 +1901832 +1901850 +11546465 +5130335 +5130369 +5130392 +5130439 +5130444 +5130456 +5130464 +5130471 +5130476 +5130521 +5130542 +1902533 +1902543 +1902560 +1902568 +1902572 +1902586 +1902749 +8140883 +8189761 +4535689 +10394962 +10577473 +5130748 +5130775 +5130813 +5130814 +5130851 +5130904 +5130908 +5130944 +5130971 +5131058 +9968404 +9999965 +1904272 +1904281 +1904282 +1904283 +1904701 +1904719 +1904728 +1904760 +1904764 +1904798 +1904884 +1904887 +1904888 +1904916 +1904921 +1904922 +1904932 +1904938 +1904943 +1904948 +1904996 +1905079 +1905142 +6221746 +1905383 +1905396 +1906552 +8208583 +1907430 +1907432 +1907436 +1907475 +1907498 +1907511 +1907534 +1907541 +1907547 +1907576 +1907580 +1907620 +1907625 +1907637 +1907666 +1907672 +1907683 +1907687 +4535754 +5881946 +7976131 +1908352 +1908367 +1908660 +1908700 +1908702 +1908707 +1908713 +1908775 +5133051 +11608942 +1908818 +1908840 +1908863 +1908871 +1908897 +1908929 +1908953 +1908962 +1909123 +1909216 +7346301 +8978362 +1909281 +1909319 +10656625 +1909398 +1909607 +1909649 +1909659 +1909810 +1909818 +1909838 +1909854 +1909865 +1909879 +1909884 +1910371 +1910706 +1910753 +6133858 +1910809 +1910812 +1911093 +1911112 +1911168 +1911198 +1911278 +1911298 +1911300 +1911461 +1911503 +7728366 +5133687 +5133689 +1911633 +4535592 +4535596 +1911736 +1911755 +7809779 +8078362 +5133693 +5133695 +1912325 +1912372 +1912395 +1912428 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133920 +5133990 +5772890 +7428726 +10097687 +10137350 +4535581 +5134098 +5134301 +8312017 +1913091 +1913105 +1913175 +1913178 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134693 +5134810 +5135026 +5135191 +5135355 +5714507 +7738295 +8233062 +8314088 +9915028 +9967126 +1915031 +1915079 +1915080 +1915110 +1915140 +1915144 +1915154 +1915160 +1915262 +1915270 +1915275 +1915325 +1915332 +8669164 +11372793 +11516142 +11535847 +5135643 +5135839 +5136306 +1916376 +1916410 +1916412 +1916509 +7854318 +1916758 +5136514 +5136594 +5136681 +5136713 +5136752 +5136790 +5136866 +5136868 +5136939 +5137022 +5137085 +5137086 +5137128 +5137156 +5137166 +5137291 +5137330 +5137388 +1918026 +1918321 +1918394 +1918406 +1918408 +1918411 +1918416 +1918467 +1918495 +1918497 +1918509 +1918517 +1918532 +1918533 +1918547 +1918553 +1918554 +1918627 +1918667 +1918669 +1918733 +1918736 +1918776 +1918789 +1918843 +1918854 +1918868 +8035998 +8176911 +11645316 +4535618 +4535620 +4535510 +10595994 +10000384 +10043827 +11419137 +11760688 +11840957 +4704316 +5130587 +5130682 +7762841 +10376507 +5131096 +5131142 +5131192 +5131256 +5131293 +5131339 +5131372 +5131407 +5131443 +5131467 +5131493 +5131495 +5131520 +5131540 +5131555 +5131565 +5131585 +5131593 +10228568 +10277877 +10508423 +11425145 +5132154 +5132183 +5132191 +5132238 +5132479 +7346328 +7346335 +8001799 +5806167 +5881397 +6100725 +6100726 +7642610 +5135513 +5135546 +11525418 +1896957 +5128569 +5128587 +5128644 +5128663 +5129000 +5129025 +5129091 +9087922 +10201273 +5131910 +5881551 +8138711 +8549720 +1910576 +1910628 +1910629 +1910648 +1910662 +1902143 +1902182 +1899349 +1899433 +1899818 +5129913 +7768674 +7934873 +8168644 +8393082 +1914701 +1914708 +1914734 +1914749 +7346340 +1918584 +1951370 +1951412 +1951462 +1951505 +1951507 +1951522 +1951529 +1951542 +1951557 +5142870 +1951631 +9512631 +1951649 +1951671 +1951675 +1951747 +9156165 +1951791 +5734305 +1951818 +1951840 +1951844 +1951859 +1951874 +1951881 +5734326 +1951919 +1952014 +1952034 +1952052 +1952062 +1952147 +1952175 +1952177 +1952229 +5142948 +1952281 +5143007 +5143048 +5143049 +5143076 +5143080 +1952449 +1952481 +1952532 +10782264 +1952551 +1952611 +1952685 +1952704 +5143116 +5143129 +5143147 +1952806 +1952816 +1952857 +1951713 +9502606 +5885428 +8604089 +1832819 +1832853 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +4529248 +1868211 +1868409 +4702564 +1868499 +6544581 +1868470 +5141581 +5141590 +1735121 +1941864 +5120465 +5120577 +5120668 +5120675 +5121177 +5121517 +5121613 +1842097 +5120396 +1842485 +1842508 +1842542 +4301036 +1842690 +1842695 +9755262 +1843564 +1843602 +1730519 +1730543 +8292351 +5101394 +1730948 +1730978 +1731263 +4525641 +1731598 +10450446 +8008237 +8130866 +8402212 +1872359 +1872361 +1872368 +1878626 +6133117 +7628188 +1878744 +1878782 +1878826 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +4531517 +1879001 +1879125 +1879141 +1879227 +1879337 +1879339 +1879340 +1879379 +5734212 +1879408 +1879427 +1879443 +1879452 +1879465 +1879471 +1879490 +5126212 +5126217 +1879630 +1879691 +1879731 +1879735 +1879765 +10915497 +1879970 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +5126635 +5126637 +1880353 +1880451 +1880464 +1880465 +9524458 +6133225 +1880852 +1880858 +1880907 +1880931 +1880968 +4531643 +1881089 +1881121 +1881126 +1881151 +1881170 +9819403 +4531687 +1881208 +1881293 +1881320 +1881329 +1881336 +1881340 +1881362 +1881515 +1881603 +4531713 +1881834 +4531975 +1881964 +1882021 +1882158 +1882210 +1882215 +1882253 +1882266 +1882272 +1882310 +1882437 +1882459 +1882557 +1882729 +5126834 +1882753 +1882767 +1882771 +1882773 +1882884 +1882901 +1882905 +10156181 +1882930 +1882941 +1882960 +1882965 +1883067 +1883161 +1883168 +1883386 +1883394 +5127097 +1883634 +1883873 +1883881 +1883943 +1883951 +1884051 +1884061 +4531690 +1884212 +4531708 +1884228 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884465 +1884479 +1884671 +6120980 +1884774 +1884816 +1884835 +1884844 +1884858 +1884877 +1884890 +4532122 +1884908 +1884909 +4532146 +1884970 +1885012 +1885262 +1885263 +1885569 +1885623 +1885630 +6133181 +1885745 +1885763 +1885764 +1885826 +1885836 +1885919 +1885937 +1885945 +1885994 +1886015 +1886084 +1886088 +1886241 +1886251 +1886320 +1886362 +8223165 +1886526 +1886579 +1886587 +1886648 +1886700 +1886720 +1886726 +1886729 +7562564 +1886929 +1886951 +1887054 +1887290 +1887509 +1887586 +4531670 +1887691 +1887701 +1888027 +1888040 +1888092 +4531968 +1888324 +1888346 +10922411 +1888484 +1888491 +1888537 +1888579 +5127394 +1888619 +1888733 +1888743 +1888759 +1888826 +1888891 +1888893 +1888906 +1888911 +1888913 +9535420 +1889039 +1889043 +1889050 +1889053 +1889071 +1889074 +1889239 +1889242 +1889249 +1889270 +1889272 +1889277 +1889287 +1889356 +1889358 +1889370 +1889531 +1889552 +1889563 +1889905 +1889942 +1890012 +1890031 +5127521 +1890097 +1890187 +9519191 +1890287 +1890320 +1890335 +1890343 +7543006 +10180624 +1890410 +1890487 +1890512 +1890522 +1890534 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890724 +1890772 +1890776 +1890898 +1890957 +1891013 +1891059 +1891129 +1891167 +1891177 +1891190 +1891217 +10071588 +1891308 +1891326 +1891339 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1891533 +1891583 +1891636 +1891758 +1891889 +1891932 +1891936 +1892153 +1892242 +1892245 +1892456 +1892476 +10141437 +11056379 +9674732 +1884255 +1884273 +1884280 +1884312 +1884332 +1884370 +1884403 +5884851 +6133139 +6133140 +6133141 +5771877 +7864212 +10117959 +10227418 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10513366 +10502505 +10397209 +6133154 +10959264 +6133158 +10375403 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +1886374 +1889716 +1889765 +1889833 +1889850 +5127562 +5127592 +5127595 +5127609 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127688 +5127698 +5802339 +1887108 +1887125 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +6121184 +1888638 +1888639 +1886123 +1883885 +4532150 +4532160 +5771880 +10410699 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528818 +1939597 +1830879 +1830937 +1830962 +1831002 +1831009 +1831136 +1831168 +4708183 +1853587 +4526048 +1854202 +1854347 +5122430 +5122439 +1854615 +1854792 +1854824 +1854849 +4526050 +7717983 +1858637 +1858674 +1858698 +1858775 +1858778 +1858873 +1858930 +1859046 +1859061 +1859100 +1859161 +1859177 +1859305 +9760511 +1859453 +1859471 +1859480 +9749806 +6133397 +1859932 +1859952 +1860026 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123180 +5123221 +5123042 +1864897 +1865593 +10014340 +1865650 +1865659 +1865660 +1865666 +1865671 +9914882 +9972403 +1865930 +1866237 +5734291 +1866356 +6106943 +1866491 +1866530 +1866549 +1866556 +1866568 +1866573 +9906979 +5124880 +5124911 +10047346 +1867820 +1867928 +7764232 +8439879 +9983244 +1867991 +1867993 +1868025 +11643393 +11670751 +11729388 +5124673 +5124716 +7734292 +1841460 +5120278 +1841813 +1841946 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861510 +1861644 +1861663 +1861665 +1861673 +1861697 +1861705 +1861714 +1861721 +1861797 +1861842 +1861862 +5123674 +1861933 +1861936 +1861937 +1861938 +1861949 +1861951 +6106744 +1861975 +1862008 +1862026 +1862061 +1862066 +1862072 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +1862414 +9836014 +10374414 +11907754 +1862430 +1862434 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862521 +1862526 +6106708 +5123707 +5123709 +1862572 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +1862837 +1863034 +5123922 +5734719 +1863354 +1863388 +1863394 +1863467 +1863646 +5124007 +5124029 +9310369 +1863829 +1863848 +1863880 +1863907 +1863909 +1863910 +1863924 +1863944 +9578319 +1864126 +1864135 +1864161 +8133328 +1864358 +1864377 +5124121 +5124143 +5124233 +11738734 +11954157 +1864652 +5124300 +5124304 +5124305 +5124332 +5124348 +5124374 +5124415 +5124433 +1864793 +1864796 +5734713 +5885399 +6099041 +6106759 +7346401 +10193618 +6106647 +5123815 +5123824 +5123837 +5123852 +5123870 +5123876 +5123884 +5123889 +5123890 +8810912 +10189661 +10191275 +10436020 +5123979 +1992634 +1992883 +10842838 +10994020 +1993036 +1993043 +1993419 +1993496 +6133769 +1993637 +1939432 +1953192 +1953196 +1953217 +1953326 +1953356 +6132711 +6132712 +6132715 +1953407 +1953423 +1953729 +11467944 +6132725 +6132726 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1860108 +5119513 +1830099 +1830372 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +1830632 +1830802 +4525364 +1754135 +1754263 +5105642 +1754332 +1754368 +1754380 +1754400 +1754465 +1754511 +1754516 +1754535 +11737872 +12075408 +11175615 +1754902 +1754919 +1754933 +1755131 +5734138 +1755237 +1755248 +1755253 +1755276 +5106115 +5106160 +5106249 +5107076 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7674502 +7778368 +7903078 +7955974 +8158342 +8201251 +8426357 +1757652 +5108318 +5108334 +5108335 +11140464 +11860016 +1757853 +5108346 +5108349 +8964772 +4522753 +1830669 +9004359 +1939658 +1939677 +1939680 +1939688 +7646066 +1829322 +1829363 +1855630 +1855747 +8734090 +1856005 +1856105 +1856289 +5122798 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1856971 +1857258 +1857267 +1857380 +1857577 +1857581 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857938 +1857978 +1858074 +1858100 +1858113 +1858163 +1858283 +1858321 +8178453 +1858557 +1937665 +1937699 +1937707 +1937712 +1937723 +1937745 +1937754 +1937769 +1937792 +1937819 +1937826 +1937847 +1937856 +1937892 +1937911 +1937931 +1937937 +1937966 +1937975 +1937988 +1938007 +1938029 +1938052 +1938058 +1938069 +1938074 +1938088 +1938114 +1938122 +1938125 +1938129 +1938131 +1938147 +1938156 +1938162 +1938168 +1938174 +4692485 +4692504 +4693382 +5734569 +8225376 +9017206 +1936969 +1936988 +1936993 +1937011 +1937037 +1937055 +5141144 +5141154 +5141163 +5141172 +5141177 +5141179 +5141185 +5141187 +5141188 +5141195 +5141197 +5141198 +5141199 +5141202 +5141207 +5141212 +5141215 +5141226 +5141229 +5141230 +5141233 +5141236 +5141242 +5141252 +5141254 +5803065 +1937444 +1937474 +1937490 +1937514 +1937530 +10761559 +1937556 +1937566 +1937570 +1937580 +1937582 +1937594 +1937613 +1937618 +1938214 +1938226 +1938230 +1938233 +1938300 +1938520 +1938612 +1938796 +1938810 +1938955 +1939056 +1939086 +1939156 +1939168 +1939180 +1939215 +1939225 +5141311 +5141317 +5141262 +5141291 +5141305 +1858531 +1838691 +1838905 +1838911 +4528692 +4528694 +1833500 +8546322 +8574752 +1835031 +5770913 +1835098 +1835156 +1835393 +1835396 +1837172 +1838969 +1839560 +1839770 +1839851 +1839893 +1841159 +5770922 +5770942 +4529032 +5119893 +12188993 +1800238 +10213314 +1800441 +6133777 +1800528 +1800539 +10737993 +1800562 +1800572 +1800642 +10010361 +1800686 +1800691 +1800696 +1800821 +5114394 +5114400 +5114409 +11873966 +4534796 +4534798 +9544823 +1800881 +5114425 +1800934 +6133780 +1801000 +1801001 +1801051 +1801073 +1801080 +1801084 +1801170 +1801196 +5114465 +5114515 +1801461 +1801490 +1801503 +1801519 +10066605 +10510325 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534788 +4534792 +6112606 +6112610 +6112613 +6112661 +6133809 +6133811 +6133813 +6133814 +9894093 +1801993 +1802090 +8883183 +1802113 +1802120 +1802229 +1802244 +1802280 +1802337 +1802702 +1802783 +1802827 +1802830 +1802833 +1802919 +1802939 +1803012 +1803022 +1803025 +1803035 +1803039 +1803060 +1803065 +1803073 +1803078 +1803108 +10942408 +4534762 +4534767 +4534769 +6133803 +5114303 +5114311 +5114327 +8244266 +10987178 diff --git a/dev/releases/mambo_v3/presets/australia.classes b/dev/releases/mambo_v3/presets/australia.classes new file mode 100644 index 0000000..546f6ae --- /dev/null +++ b/dev/releases/mambo_v3/presets/australia.classes @@ -0,0 +1,1907 @@ +1992268 +1992283 +1992301 +1992315 +10648791 +1758114 +1758146 +10083877 +9840570 +9960252 +10190647 +10341307 +10435406 +1732978 +1733504 +1733507 +1733511 +1733535 +10155026 +1734851 +10730270 +1831974 +1831999 +1832023 +1832518 +1832533 +1832553 +1832569 +1832649 +1845271 +1845503 +1845586 +1846858 +1847066 +1847111 +1847622 +1847639 +8797017 +5122013 +1850156 +1850633 +1850764 +1850798 +1851039 +1851543 +1852292 +10023115 +10498365 +11706893 +1850463 +9977181 +1829703 +1829866 +1828424 +1828455 +1828456 +6196939 +1828471 +1828491 +1828540 +1828543 +1828544 +10707366 +10833593 +10882997 +5119346 +5119349 +5119350 +5119353 +5119354 +5119361 +10288636 +10639943 +4695709 +1828976 +1837706 +1834428 +4684910 +4686897 +4686905 +4686907 +4686913 +1835848 +1835862 +1835874 +1835886 +1835897 +1835908 +1835928 +1838084 +1838978 +4685802 +1839600 +1839604 +4685468 +4684220 +4685557 +4685946 +1830812 +1830814 +1831458 +1831499 +1831508 +1831655 +5119868 +1839396 +10042504 +10094594 +10379915 +10531480 +10548275 +11919216 +9851221 +9985020 +6132868 +1760970 +1761572 +1761573 +1761751 +1761752 +1761820 +1762151 +5109196 +1762849 +1762852 +10256550 +1762887 +1763957 +1763976 +1763994 +1764060 +5109782 +5109784 +5109786 +5109787 +5109788 +1764886 +1765653 +10099906 +10647358 +1766558 +1766560 +1767215 +10340332 +1772543 +5110490 +1774069 +5110546 +1777165 +1777166 +5110837 +11457930 +11609422 +4687991 +5110981 +10403441 +9610080 +1779671 +1780716 +1780856 +1780860 +1780862 +10154280 +1782185 +1782326 +1782328 +1783173 +1783991 +10157400 +5112407 +5112410 +1784646 +1786317 +5112500 +1786958 +1786990 +1787003 +1787009 +1787010 +5112531 +1788553 +6132936 +7346446 +9494526 +1788881 +6132826 +1788986 +1789225 +10090168 +1789794 +1790450 +10598407 +1790900 +1790910 +9967251 +9983957 +5112940 +1791379 +1791514 +1791715 +9504222 +9860902 +10267570 +1795657 +10573746 +1796984 +10108671 +1797039 +6132979 +1798014 +1798018 +1798023 +1798025 +1798101 +5113950 +5884247 +11636323 +9440183 +9635978 +9923283 +10657151 +1798511 +10096855 +1787090 +1798529 +1798687 +1798768 +1798868 +4532352 +6115437 +8793873 +1799165 +1799167 +1799743 +1799757 +1803148 +1803197 +11909090 +1803781 +1803788 +1804246 +1804429 +1804430 +1804610 +10053130 +1804721 +1804727 +1804742 +10156470 +1805043 +1805505 +1805524 +1805806 +1806704 +1806814 +1807473 +1807477 +1807478 +1807479 +1807480 +1807483 +1807485 +1807488 +1807490 +1807491 +1807503 +11900897 +1808232 +6198302 +12214821 +1809244 +1809248 +1809381 +10010700 +1810752 +1810851 +5116397 +1812437 +1812453 +1812465 +1812658 +1814913 +10074808 +1815338 +1816029 +1816110 +1816434 +1817065 +11703980 +1817160 +1817171 +1817217 +1817810 +1818413 +5118171 +10556853 +5118291 +1819970 +1820383 +1820401 +1820435 +10274769 +1821448 +10503495 +10106475 +9956017 +10270464 +9473918 +9559336 +12180031 +12203022 +12216332 +9852545 +10496181 +10629533 +10004820 +10248689 +10454874 +10443878 +10637588 +10643533 +10166724 +10480609 +8363709 +10178326 +10469564 +8874633 +9621271 +5116504 +1818216 +9336001 +1781413 +1781428 +1781598 +1763761 +6115388 +1816634 +1816648 +1816673 +1774598 +1774604 +1774654 +1774691 +1774712 +1768630 +5111643 +1766892 +10164453 +1768190 +9400916 +1768462 +9989156 +5113001 +5109796 +1821464 +1821468 +1821542 +1822003 +1804120 +1804148 +6116076 +1782507 +1783715 +9918092 +4687933 +4687934 +4687935 +1820137 +1799821 +1781531 +1798331 +1798335 +1784936 +1785072 +1765999 +1766007 +10330198 +10598038 +11513188 +1786597 +4687389 +5884188 +9935660 +5110013 +10196956 +10392889 +1811455 +1811462 +1811465 +1796941 +1782310 +12266659 +5108421 +1771903 +10097776 +4301309 +5112440 +1795542 +1860849 +1992434 +1992489 +1731886 +1731890 +1731906 +1731923 +1731926 +1731927 +1731980 +1732001 +1732005 +1732031 +1732033 +1732044 +1732052 +10640865 +9950697 +1833779 +1833782 +1833794 +1834524 +1834547 +4685588 +4685595 +1834793 +1835086 +1835348 +1835814 +1837968 +1838058 +1838065 +1838071 +1839658 +1839721 +4684986 +1840346 +1831752 +1852832 +1852859 +1860259 +1860260 +5123339 +10361029 +10625116 +5123419 +5880040 +5880041 +10208422 +1853222 +10005632 +10433914 +11756119 +1869707 +1869714 +1870237 +1870450 +1870452 +1870459 +1870506 +1870509 +1870703 +1870988 +1871171 +1871333 +1872169 +9969513 +1872255 +1872470 +1872735 +1872812 +1872827 +1872850 +1872873 +1872901 +1873049 +1873079 +1873222 +1873285 +1873290 +1873291 +1873373 +1873620 +9858922 +1873773 +1873843 +1873890 +5125569 +5125591 +5125600 +5125602 +5125629 +1874146 +1875534 +1875554 +1875584 +1875844 +1876479 +1876542 +10356445 +1876876 +10442332 +1876922 +1876955 +1877406 +1877453 +5125943 +1877988 +1878173 +1878406 +1878470 +9835867 +1888454 +1890056 +1890065 +10211808 +5884888 +10526954 +10065676 +10129011 +10279983 +11591775 +9857679 +10423263 +1748780 +1836906 +1940575 +1941294 +1736623 +5102683 +1737015 +10146436 +10469532 +1737115 +1737131 +1737182 +1737187 +1737847 +1738045 +1738192 +1739051 +1739316 +1740586 +1740797 +1740828 +12259151 +1741074 +9826405 +1741084 +11906255 +10250474 +1741593 +1743319 +4707896 +4707900 +10073044 +1743680 +9867379 +1745019 +9586705 +1745957 +4707848 +6219423 +10021059 +10023049 +10080502 +10358334 +10476233 +1747639 +1747672 +1747914 +1747924 +10355898 +1748425 +1748442 +1748473 +1748486 +1748751 +10185271 +9952043 +10302660 +10530383 +9909775 +10606887 +10624577 +10153630 +10549715 +12057008 +10462612 +11688440 +5138967 +5138984 +1921010 +1921262 +1921263 +1921300 +5138069 +1922244 +1922745 +1923744 +1923782 +4708972 +4708973 +4708977 +1924362 +1924390 +1924558 +1924713 +1925555 +4708984 +1925628 +1925711 +5138732 +5138743 +5806391 +1926436 +1926448 +1926460 +1927274 +4709107 +1927707 +1927894 +1927895 +1927897 +1927900 +1928018 +4708927 +5139050 +1928382 +1928829 +4709030 +1928923 +1931189 +5139914 +1931889 +1931956 +1931958 +4709051 +1932159 +1932246 +4709095 +4708995 +1932563 +7346444 +1932908 +4709133 +5806412 +1933647 +5138929 +4709102 +4709147 +1752534 +1752536 +1752537 +1752539 +1752545 +1752547 +1752903 +1752946 +1752947 +1753461 +1753902 +1753906 +10368234 +9880359 +10203493 +9959898 +10560849 +10988070 +1919176 +1919340 +1919342 +1919344 +1919348 +1919381 +1919419 +1919421 +1919432 +1919444 +1919540 +1919626 +1919744 +5137828 +5137832 +5137833 +5137842 +5137849 +5137850 +5137854 +1920496 +1920534 +1920535 +1920538 +1920541 +5137929 +5137949 +1749124 +1749529 +1750131 +1750326 +5104822 +5104903 +5105081 +1750934 +1751024 +1828310 +1828317 +9882683 +9451208 +1758596 +1758602 +9943941 +10118678 +1962159 +1962162 +9875141 +1970460 +1970463 +1970473 +1970485 +1964995 +1964996 +10295646 +1954236 +1954522 +1954911 +10634980 +9213204 +10217455 +1955039 +1955093 +1955153 +1955199 +1955202 +1955318 +1955736 +1955737 +1955743 +1955745 +10560674 +11720357 +9593393 +10003902 +10048667 +10062202 +10075732 +10132475 +10177276 +10341059 +10363151 +10398979 +10434798 +10456933 +10457796 +10471477 +10528420 +10623003 +11451126 +11468089 +11638437 +1955899 +10078526 +10360329 +11690145 +1956384 +9234402 +10257899 +1956416 +1956955 +1956958 +1956963 +1956978 +1956983 +10167252 +1957058 +1957062 +1957333 +1957413 +1957523 +1958454 +1959341 +1959500 +1959595 +1959782 +1960106 +1960128 +1960201 +1960411 +5144115 +5144129 +1960521 +1960524 +1960940 +1960941 +1961180 +5144204 +1962829 +1962841 +1962842 +1962934 +1963297 +5144353 +1963782 +1964066 +1964305 +1964331 +1964565 +1964702 +10184940 +10523304 +1965643 +1965649 +1965650 +9952367 +9976926 +5144505 +1966977 +5144553 +1967703 +10174909 +10268303 +10379201 +1967716 +9833933 +1968115 +1968131 +5144633 +1969104 +1969568 +11858774 +1969581 +6133643 +1970093 +1970094 +1970108 +1970159 +1970265 +9939530 +10085335 +10109201 +10505033 +10054019 +5144806 +5144937 +5144942 +5144976 +5145079 +5145422 +5145495 +5145503 +1972407 +1972606 +9119710 +5146262 +11533770 +1972903 +5146294 +1973719 +5146426 +5146456 +5146472 +5146578 +5146719 +5146805 +5146880 +5146937 +5147046 +5147109 +5147121 +5147150 +5147160 +5147225 +5147522 +1975164 +1975212 +1975248 +1975249 +9975134 +10018221 +10572729 +9875420 +1975704 +1975722 +1976123 +1976142 +1976213 +1976243 +1976303 +1976341 +1976342 +1976345 +10118849 +9183738 +10089194 +1976890 +1976891 +1977350 +5147917 +5147923 +5147930 +5148066 +5148097 +5148214 +5148223 +10188228 +1978082 +10058263 +10626099 +10530515 +1978904 +1978915 +1978919 +1978937 +1979041 +1980035 +1980041 +1980044 +1980063 +1980491 +1980659 +10378314 +10571987 +1980821 +1980827 +10860751 +11660632 +1982024 +1982033 +1982043 +1982047 +1982055 +1982071 +1982072 +1982085 +1982100 +1982102 +1982103 +1982120 +1982148 +1982221 +12116722 +5149182 +10199372 +1984913 +1985167 +1985181 +1985228 +1985267 +1985490 +6133659 +1985809 +1985816 +1985826 +1985931 +1986223 +1986650 +1986693 +1986720 +1986774 +1986846 +1986942 +1987203 +1987747 +1987766 +1987775 +1987785 +6133591 +10533589 +5149369 +5149370 +5149371 +5149387 +9987116 +1988302 +1988354 +1988360 +1988361 +1988362 +1988370 +1988376 +1988382 +1988384 +1988820 +1988894 +1989170 +1989181 +1989282 +1989283 +1989377 +1989522 +1989538 +9906229 +1990164 +1990165 +1990167 +1990178 +11465014 +1990255 +1990256 +1990371 +1991394 +1991468 +10155932 +5149873 +5149880 +5149940 +5149941 +1992167 +5880539 +9577234 +10224300 +9830270 +11799357 +10864093 +4702878 +10078800 +8501203 +9629450 +6133635 +10175639 +9617411 +10438474 +10411202 +10146771 +10210935 +10263383 +1963532 +1942060 +1942067 +1942618 +1942621 +1942623 +1942636 +1942641 +5141650 +1942674 +1943089 +1943090 +1943096 +1943101 +4689912 +1943236 +1943250 +1944106 +1944113 +4689963 +1944456 +1944462 +1944520 +1944523 +1944618 +1944619 +1944627 +1944629 +1944631 +1944635 +1944638 +4689905 +1945122 +1945225 +1945715 +1945863 +1945893 +5142067 +1946695 +1946720 +1946763 +1947446 +1947449 +1947459 +1947491 +1947492 +1950272 +1950591 +1951157 +1951170 +5142749 +1758839 +1758850 +1760172 +1760175 +1761788 +1761789 +1762657 +1762900 +1762902 +1764178 +1764553 +5109848 +5109855 +5109870 +5109872 +5109882 +8352161 +1765508 +4687817 +4687827 +7800469 +1765898 +11034779 +1767368 +1767381 +1767430 +10575632 +10597823 +5883925 +9356770 +1768972 +1769095 +1769114 +1769209 +1769225 +1769245 +1769250 +1769260 +1769271 +1769272 +1769283 +1769293 +1769294 +1769298 +1769308 +1769310 +4688049 +4688075 +4688092 +4688098 +1771357 +1772668 +4687565 +1774797 +4301304 +6115946 +1774918 +10032003 +1775279 +1775631 +1777120 +5111064 +5111195 +5111214 +5111249 +5111535 +5111600 +5772222 +1779269 +1779276 +1779382 +1780072 +5111967 +1782354 +1782466 +4687661 +1784513 +1784761 +1785145 +1785149 +1785166 +1785181 +1785217 +1785220 +1785314 +1785329 +1785725 +1787165 +1787185 +1787226 +4687681 +10161728 +1789637 +1789957 +4687906 +1791793 +1791837 +4687930 +1791862 +5113394 +1793661 +1795068 +1795110 +4688166 +4688169 +4688172 +1798084 +1802776 +4532269 +10659737 +10378302 +9890366 +9910243 +10967713 +11054256 +10121804 +5109270 +5109349 +5109418 +5109437 +4688142 +1792555 +1792560 +8108800 +1770849 +1771203 +1771245 +1771296 +1771308 +1765752 +5113853 +5108671 +5108724 +5108737 +5108787 +1759351 +1789530 +10370112 +11437060 +11615549 +4532266 +6115772 +6115820 +6115822 +6115830 +8103163 +9893740 +1782277 +1781248 +1767259 +1792814 +9325654 +10458175 +10683012 +10658576 +1822257 +1822916 +1822917 +1823493 +5118798 +1824280 +1826020 +1825238 +1825336 +1825950 +1825956 +1826017 +1826823 +1827429 +1827507 +11905965 +1827802 +1827810 +1827826 +1827829 +10194663 +10551923 +5806166 +1892821 +1893699 +1893787 +4704279 +5128224 +5128225 +1895448 +1895956 +1895992 +1896304 +5806175 +5806177 +4704400 +4704401 +4704404 +4704407 +1899931 +1899932 +1899940 +1899943 +1899947 +1899950 +1899956 +1900939 +1901669 +5130456 +5130464 +5130476 +1902233 +1902244 +1902248 +1904728 +1904798 +1904996 +1907683 +1909216 +1909436 +1909453 +1909457 +4704352 +4704356 +1909854 +1910753 +1910809 +1910812 +1911755 +1913091 +1915031 +1915144 +11535847 +5135839 +5136594 +5136713 +5136868 +5136939 +5137128 +5137257 +4704500 +4704501 +5131493 +5133088 +5806167 +6100725 +7642610 +1910628 +1910629 +1910648 +1951492 +1951874 +10548683 +5102423 +1735273 +5102432 +1941683 +1941702 +1941713 +5121177 +1843313 +1843326 +1843331 +1843362 +1843370 +1843379 +5120341 +5120343 +5120357 +5120368 +5120379 +1842508 +11854390 +4529738 +9755262 +1843429 +1843485 +1843590 +1730543 +1731097 +1731221 +11431507 +10535684 +11563728 +11904618 +5101502 +10049887 +10134558 +10307487 +5806352 +5806353 +10629470 +8008237 +1878744 +1878826 +1879227 +1879339 +1879340 +1879405 +1879408 +1879465 +1879471 +12231152 +5126376 +10489219 +5126635 +5126637 +1880352 +1880353 +1880858 +1880982 +1880986 +1881018 +1881019 +1881031 +1881041 +1881089 +1881132 +1881157 +9819403 +1881228 +1881320 +1881329 +1881336 +1881340 +10046436 +10348110 +10441857 +1881424 +1881485 +1881504 +1881515 +10751438 +1882215 +1882266 +1882272 +1882355 +5126798 +5126843 +5126922 +5127020 +5127039 +5127044 +1882753 +1882767 +1882771 +1882773 +1882884 +1882905 +10156181 +10643403 +1882965 +10464411 +1883024 +1883028 +1883067 +4687288 +1883394 +5127097 +10069243 +1883775 +1883881 +1883943 +1883968 +1884228 +9294363 +10171108 +10209845 +1884434 +1884437 +1884449 +1884461 +1884479 +9837762 +1884531 +6120980 +1884816 +1884890 +1884909 +1885263 +1885569 +1885572 +1885605 +1885630 +6133182 +9957790 +1885702 +1885763 +1885836 +1885919 +1885945 +1886088 +1886251 +1886362 +1886526 +10610809 +1886720 +1886729 +10613467 +1887036 +1887052 +1887054 +1887462 +1887580 +1887585 +1887691 +1887894 +1888123 +1888537 +5127394 +1888906 +1888913 +1888926 +1889043 +1889050 +1889071 +1889074 +1889239 +1889242 +1889249 +1889272 +1889277 +1889356 +1889381 +1889552 +1889563 +1890031 +1890187 +10058481 +1890320 +1890335 +5127530 +10180624 +1890410 +1890670 +1891236 +1891299 +10071588 +1891308 +1891339 +1891533 +1891583 +10072800 +1892458 +1892462 +10446295 +6133140 +5771877 +10117959 +10227418 +4532125 +9967529 +9900218 +10145421 +10348945 +10521368 +10579230 +10594210 +6120803 +6133232 +6121010 +10257673 +10556366 +6121218 +10502505 +10397209 +6133154 +10462708 +6133158 +8876855 +10063575 +10375403 +1886374 +1889769 +1889875 +5127592 +5127595 +5127629 +5127638 +5127644 +5127669 +5127675 +5127698 +5802339 +1888638 +1888639 +1883885 +1831136 +4708183 +1731292 +5122307 +1853578 +10222583 +1853855 +1854019 +1854021 +10452421 +10546013 +11428453 +1854028 +1854249 +5122430 +5122455 +5806333 +1858637 +1858674 +1858718 +1858762 +1858930 +1858973 +1859061 +4536292 +9768621 +1859453 +9675743 +9749806 +6133397 +1859932 +1860026 +6097269 +9759340 +1864897 +1867788 +10883659 +1868025 +5124716 +1861457 +1861458 +1861644 +5123663 +1861951 +1861953 +1861958 +1862026 +1862293 +1862331 +1862363 +1862370 +1862401 +1862403 +9836014 +1862434 +1862441 +1862449 +1862455 +1862475 +1862516 +1862521 +1862526 +6106708 +1862757 +1863034 +1863051 +1863384 +9899724 +1863880 +1863955 +4703479 +5124080 +8133328 +11954157 +5124423 +5123852 +1992634 +9893936 +1992889 +1992907 +1992936 +1992938 +1993021 +1993045 +1993496 +6133769 +10022517 +1953217 +1953423 +10132811 +10644798 +11503857 +1954025 +5143279 +1954120 +1830419 +1830435 +1754619 +1754803 +1754806 +1754814 +4689394 +1830669 +8254441 +1855804 +1855807 +1855813 +1856005 +5122779 +1857020 +1857033 +1857097 +1857143 +1857180 +1857258 +1857315 +1857380 +1857626 +1857828 +1857829 +1857840 +1857882 +1857900 +1857935 +1857948 +1858100 +1858163 +1858283 +1858404 +1858411 +1858488 +1856893 +1937698 +1937712 +1937745 +1937769 +1937988 +1938069 +1938074 +5141177 +5141187 +5141254 +5803065 +1937444 +1937474 +4693675 +1937618 +1939131 +1939156 +1838251 +1838255 +1838276 +1838289 +1838297 +1838304 +1838308 +1838331 +4685893 +4685097 +1833477 +4685485 +1833562 +4686368 +1833600 +1833653 +1833834 +1834019 +1834078 +4685138 +4685219 +4685271 +1834497 +1834850 +1835082 +1835121 +1835123 +1835128 +1835345 +1835555 +1835609 +1835612 +1835635 +1835644 +4685116 +1835790 +1835821 +1835828 +4686483 +1836873 +1836899 +4685431 +4685448 +1837053 +1837057 +1837150 +1837159 +1837172 +1837569 +4686743 +1838034 +4685065 +1838218 +1838224 +4685299 +4685306 +1838333 +4686617 +4686620 +4686621 +4686628 +1838958 +1838960 +4528702 +4685566 +4685576 +1839317 +1839323 +1839325 +1839333 +1839494 +5120053 +5120058 +5120063 +4685645 +4685650 +4685653 +4685655 +4685662 +4685669 +4685678 +4685683 +1840258 +1840260 +1840726 +1840774 +1840776 +1840796 +1840812 +1840844 +1840974 +4686042 +4686055 +4686111 +4686133 +4686164 +4686190 +4686214 +4686264 +4686266 +1841101 +1841221 +1841302 +4685972 +5802248 +5802256 +5802257 +5802259 +4686039 +4686015 +4686016 +4686018 +4686022 +4686027 +4686029 +4684521 +4684591 +4684789 +4684888 +4684893 +4684925 +4684958 +4685629 +4685631 +4685778 +4685810 +4685980 +4685981 +4686355 +4686385 +4686386 +4686531 +4686532 +4686656 +4686697 +4686702 +4686844 +4686956 +10213314 +10225227 +1800441 +1800473 +1800522 +1800562 +10010361 +9859868 +9883274 +1800691 +1800843 +1800844 +5114394 +5114409 +9267364 +10240592 +1801170 +5114515 +1801303 +1801305 +1801316 +1801432 +1801461 +1801519 +10026605 +10066605 +10088502 +10372377 +10448500 +10573425 +11496990 +11508472 +11594541 +11596898 +11698552 +11836409 +11871044 +1801787 +1801903 +1801922 +1802978 +4534792 +6112610 +6112661 +6133811 +9960072 +1802090 +1802702 +1802830 +1802833 +1802888 +1802998 +1803014 +1803021 +1803035 +1803039 +1803078 +1803091 +9485481 +10942408 +10264193 +5114303 +5114353 diff --git a/dev/releases/mambo_v3/presets/caribbean.classes b/dev/releases/mambo_v3/presets/caribbean.classes new file mode 100644 index 0000000..04794bb --- /dev/null +++ b/dev/releases/mambo_v3/presets/caribbean.classes @@ -0,0 +1,1092 @@ +12170988 +1921992 +1921993 +1922015 +5140627 +1934570 +1934991 +1935078 +1935295 +1935301 +1935343 +5140969 +5140980 +1936161 +1936378 +1936388 +1936565 +1936566 +5141085 +1936649 +10331171 +9620499 +1868575 +1992315 +1846849 +1846860 +1850798 +5122121 +1851845 +5110390 +5108951 +1762286 +8331687 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +8028211 +5110044 +1766845 +1767307 +1767499 +1768283 +1769000 +1770038 +1770044 +1771859 +5110326 +5110327 +5110533 +1776163 +1777179 +1777737 +1777942 +5110891 +1781029 +9630748 +5112053 +5112080 +1782211 +8384839 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1790230 +1790240 +1790246 +1790248 +1790287 +1790308 +7785540 +5112843 +1792827 +1794637 +1795049 +1796338 +7598729 +1798427 +4532352 +8150450 +1803163 +1803218 +1803266 +1804331 +5115046 +1804759 +1804760 +1805271 +1805691 +1805717 +1806690 +1806702 +1806871 +1806872 +1806887 +1807553 +1807569 +1809066 +1809135 +1809491 +1809499 +1810145 +5116145 +5116198 +5116238 +5116252 +5116293 +9350900 +1810846 +1810866 +7535515 +1811019 +5116423 +1814182 +1814357 +1814359 +1814692 +1815373 +5117414 +5117462 +1815856 +1816570 +5117685 +1817086 +1817940 +1818252 +11904675 +10395440 +10214972 +10830546 +10851228 +12194283 +8429622 +1781420 +1793538 +8177591 +1775796 +5884258 +7716829 +8299504 +8968321 +1784959 +1785024 +1785072 +6117485 +7611914 +7924383 +1780646 +1780668 +1777463 +5123542 +1870308 +1870988 +8766638 +1872514 +1872873 +1873051 +1873079 +1873398 +7372375 +1873753 +1875478 +1875483 +1876542 +1877002 +1877282 +1877492 +5125525 +5143284 +5143285 +5131957 +1736623 +1739617 +1741400 +1741747 +1741823 +1741826 +1935498 +4299071 +8345567 +9457324 +9622955 +1936026 +1920844 +1920900 +1920923 +1921123 +8825450 +1922455 +10278292 +1922637 +1922849 +1922865 +1922868 +1922889 +8913017 +1923678 +1923679 +1923997 +8992718 +9157410 +10120854 +10307383 +4300384 +4300393 +4300399 +8389961 +8904480 +1927301 +1927302 +1927988 +1927996 +1928009 +4300406 +1928215 +1928589 +1929046 +1929129 +5139578 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930263 +1930270 +1930361 +1930391 +1930410 +1930422 +1930451 +1930563 +1930581 +1930621 +1930653 +1930654 +1930728 +1930772 +1930779 +1930830 +1931119 +5139864 +1931310 +5139897 +5139908 +5139909 +1932172 +1932175 +1932576 +5140033 +5140054 +1933260 +5140534 +1935853 +1935872 +1935888 +1935912 +1935916 +1935925 +1935935 +5139928 +4300268 +9469139 +9156458 +1751980 +1751986 +1752034 +1752109 +1752477 +1752775 +1752825 +5105367 +5105379 +5105447 +5105491 +5105553 +1753603 +1753604 +1753661 +1753833 +1753864 +1753871 +1919125 +1919128 +1919130 +1919146 +1919149 +1919239 +1919282 +1919287 +1919289 +5137540 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +7661785 +5137553 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +5137819 +5137851 +5714819 +1920463 +1920552 +1920571 +1920574 +1920581 +1920691 +1920803 +12234544 +12236627 +1920621 +1956099 +1956215 +1959637 +1961155 +10650351 +1962051 +1962086 +1962118 +1962120 +1963425 +1963433 +5144363 +1966088 +1966185 +1968313 +1968315 +1968321 +1968324 +1968942 +5145466 +5145560 +1973665 +5146497 +9590066 +1975287 +1976073 +1976255 +1976651 +1978464 +1978671 +9243264 +1981160 +1981973 +5148593 +5149237 +1985647 +1985952 +1989582 +1990331 +1990594 +1990998 +5880539 +9438677 +9581695 +9619088 +9237031 +10464824 +10288719 +5149753 +5149777 +5150002 +5150027 +12200261 +12252926 +11423843 +12239491 +1942098 +1942141 +1942170 +12286003 +1942416 +1942455 +1942509 +1942558 +5141662 +1942854 +5141763 +1943475 +1943563 +1943571 +1943588 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +1943942 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944421 +1944574 +1944769 +4301934 +1944815 +1944832 +5141913 +9551544 +1945302 +1945312 +1945462 +1945477 +1946074 +1946097 +4301426 +1946163 +1946167 +1946177 +1946310 +1946333 +1946469 +1946520 +1946544 +1946550 +1946577 +1946582 +5142086 +1947021 +1947037 +1947048 +1947049 +1947147 +5142176 +1947568 +1947577 +1947587 +1947597 +1947894 +12208168 +1947973 +1947979 +1947980 +1948042 +1948046 +1948158 +7603634 +1948446 +1948521 +1948630 +4301945 +1948823 +1948826 +1948858 +1948890 +1948947 +1949049 +1949105 +1949322 +1949331 +1949451 +1949512 +1949515 +1949592 +1949621 +7726809 +9395000 +5142424 +5142436 +1950017 +1950019 +1950044 +1950052 +1950133 +1950153 +1950197 +1950384 +1950654 +1951097 +1951121 +1951125 +5715127 +12180041 +5142829 +5977203 +1945374 +12175154 +12263736 +7911151 +9366762 +1761892 +1764686 +1764693 +1765155 +5109845 +5109850 +5109855 +5109881 +5109954 +5109958 +1767052 +1767571 +9511345 +1767719 +9550265 +6115953 +1777727 +1777728 +1777730 +5111141 +1780330 +1780390 +1780407 +1780440 +1782422 +1782424 +1783811 +5112414 +1785168 +1785331 +7400814 +1791331 +5113365 +1796274 +1796276 +7383338 +7689966 +7882824 +8405656 +9327259 +1796312 +1798288 +8729319 +8928353 +7717385 +10118643 +9629365 +11615055 +11626773 +9307254 +1774929 +1770955 +5108665 +1797903 +1824189 +1825373 +1825391 +1826772 +10043566 +1903598 +1892509 +1892729 +1892742 +1892770 +4299095 +1892851 +1892863 +5127805 +5127814 +5128005 +5128007 +5128011 +5128034 +1894076 +1894088 +1894329 +1895176 +1895185 +1895250 +1895709 +1895768 +1895789 +1895820 +9016382 +1895886 +1896087 +5128433 +5128475 +5128488 +5128491 +1896628 +1896749 +1896754 +10353400 +1896756 +1896774 +1896932 +5129251 +9590057 +11701883 +5925238 +1897977 +1897990 +1898077 +1898143 +1898174 +1898200 +1898286 +4299368 +4299370 +1898348 +1898350 +1898367 +1898374 +1898391 +1898424 +6228464 +5129473 +5129480 +5129481 +5129489 +5129496 +5129520 +5129524 +5129531 +5129535 +9255328 +1898686 +1899048 +4299211 +4299213 +1899893 +9446281 +1900024 +1900026 +1900131 +1900172 +1900175 +1900195 +1900197 +1900199 +1900233 +1900249 +1900303 +1900408 +1900485 +1900618 +1900632 +1900787 +1900830 +1900872 +9392084 +1901001 +9072828 +1901261 +8247566 +5130314 +5130322 +5130326 +5130330 +1901744 +1901794 +1901801 +1901804 +1901810 +5130369 +5130514 +5130528 +5130548 +9357385 +1902211 +1902378 +1902406 +1902451 +1902458 +1902479 +1902502 +1902620 +1902623 +1902642 +1902670 +1902676 +1902699 +1902814 +1902880 +5130562 +1903607 +5131608 +5131637 +1904382 +1904719 +5131951 +1905451 +1907190 +1907272 +1907395 +1908148 +1908168 +1908199 +1908203 +1908204 +1908256 +1908262 +1908299 +1908302 +1908577 +1908995 +1909019 +1909128 +1909170 +1909185 +1909191 +9851867 +8727750 +5133251 +5133255 +5133265 +5133451 +5133523 +5133565 +5133568 +1910773 +5133581 +1911076 +5133591 +5133595 +5133621 +5133622 +8548427 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +5133786 +10638244 +9277330 +1914416 +1914424 +1914465 +1914501 +1914697 +1915193 +1915339 +1915396 +1915401 +1915417 +1915427 +1915430 +1915456 +5136372 +1916701 +1917827 +1917830 +1917834 +1918077 +1918078 +1918082 +1918086 +1918094 +1918097 +1918149 +10250149 +1918220 +1918268 +1918269 +1918280 +1918596 +5137408 +1918972 +1918984 +1919010 +5128045 +5128067 +5128118 +5131982 +5132137 +5132221 +5132347 +5132360 +5132374 +5132429 +5132483 +5714312 +9541133 +5133088 +5714299 +5714302 +5130557 +1910628 +5132917 +5132940 +5133008 +9964857 +5125118 +1941570 +1941717 +1842508 +4529738 +5101371 +9114044 +5101527 +7628188 +1878837 +1879052 +1879160 +1879253 +1879398 +1879413 +10874932 +1879443 +1879471 +5126352 +5126494 +5126585 +5126637 +1880505 +1880623 +5126663 +10861282 +11968849 +1881079 +1881166 +5126721 +1881822 +5126751 +1881917 +5126756 +1882786 +10107015 +1882812 +1882818 +1882819 +1882941 +1882960 +1883038 +1883067 +10807787 +8981028 +5127090 +1883968 +8324720 +1884437 +1884479 +1884685 +1884774 +1884923 +1884997 +1885099 +1885158 +1885950 +1886251 +1886729 +10510138 +1886929 +1887004 +1887634 +1888047 +1888292 +1888306 +1888307 +1888336 +1888646 +1888955 +1889536 +1890089 +1890247 +11044778 +7543006 +1890368 +1890512 +1890876 +1891035 +1891755 +1891932 +1892131 +1892311 +1892477 +5771877 +7864212 +8146570 +8425580 +6120803 +6121010 +6121218 +8876855 +1886374 +1889721 +1889850 +5127631 +1886123 +1886207 +1853242 +7946946 +1858674 +1858706 +1858930 +9760511 +6133397 +1859932 +9700261 +10103570 +9547681 +1864905 +1865107 +1865108 +1865132 +5124557 +5124595 +5124598 +5806244 +1865547 +1865557 +1865572 +1865709 +1865764 +1865827 +1865837 +1865963 +1866003 +1866105 +1866201 +1866220 +1866311 +1866570 +1866902 +1867218 +1867224 +5124873 +1867773 +10591617 +9634178 +5123615 +1861479 +1861559 +5123636 +1861773 +1861783 +1861784 +1862033 +1862044 +1862047 +1862049 +1862078 +1862087 +1862088 +1862091 +1862094 +1862096 +1862123 +1862139 +1862163 +1862181 +1862198 +1862207 +9559671 +5123701 +5123704 +1862547 +1862551 +1862658 +1862765 +1862841 +1862923 +1862928 +1863109 +1863151 +5123784 +5123801 +7803585 +1863366 +1863412 +1863416 +1863426 +1863699 +1863701 +1863706 +1863714 +1863724 +1863732 +1863734 +1863742 +1863757 +1863856 +1863858 +1863864 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +5124249 +5124250 +5124268 +5124442 +5124443 +5124448 +5124450 +5124452 +5123954 +5123956 +5123961 +5123971 +5123979 +5123983 +5123991 +5123996 +1863978 +1863982 +1864004 +1864021 +1864046 +1864058 +1864068 +1864070 +1864084 +1864098 +1864103 +1864106 +1992634 +5150053 +1953499 +5143232 +5143234 +1953998 +1954084 +1830681 +1953166 +1751497 +1751524 +1751572 +1751588 +1751590 +1751625 +1751670 +5105193 +5105217 +5105218 +5105227 +5122538 +5122556 +5122581 +5122647 +1857068 +1857380 +1858283 +10038125 +1937655 +1937793 +1937885 +1938022 +1938069 +1938112 +1938159 +4299871 +10600208 +12200213 +12211009 +1937064 +1937090 +1937110 +1937136 +1937144 +1937162 +1937167 +1937530 +1939130 +1939136 +5141321 +5141324 +5141333 +1939336 +4694313 +1856555 +1857690 +4534796 +9385576 +8924506 diff --git a/dev/releases/mambo_v3/presets/central_america.classes b/dev/releases/mambo_v3/presets/central_america.classes new file mode 100644 index 0000000..1738701 --- /dev/null +++ b/dev/releases/mambo_v3/presets/central_america.classes @@ -0,0 +1,2022 @@ +12170988 +1934570 +1934715 +1934991 +1935301 +5140969 +5140980 +1936161 +1936378 +1936388 +1936391 +1936566 +5141085 +10331171 +1868535 +10100176 +10517417 +1868575 +1992315 +1732901 +1734384 +5102324 +1845314 +1845385 +1845442 +1845455 +1845513 +4528100 +1846439 +1846849 +1846860 +1846992 +1847249 +1847498 +1850673 +1850729 +1850771 +1850781 +1850798 +5122062 +5122121 +5122131 +1851845 +9123440 +1829612 +10508467 +5119890 +5110390 +1760384 +1760385 +1760397 +1760398 +1760400 +5108951 +1761101 +1761110 +1761838 +8331687 +8379616 +9354496 +9546910 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +1764525 +8028211 +5110044 +1766839 +1766845 +1766880 +1767031 +1767320 +1767499 +9384861 +1768283 +1769000 +1770038 +1770044 +1770263 +9256436 +9395422 +9440644 +1771859 +5110326 +5110327 +5110533 +1776163 +1777052 +1777075 +8345991 +1777179 +1777737 +1777942 +5110891 +9610080 +1779740 +1781029 +7672864 +9305011 +9390065 +9630748 +1781944 +1781946 +5112051 +5112060 +5112068 +5112080 +1782214 +8384839 +1783365 +1785913 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1788891 +1789193 +5112626 +1790230 +1790240 +1790246 +1790248 +1790257 +1790258 +1790268 +1790274 +1790281 +1790287 +1790308 +1790787 +1790832 +1790937 +1790945 +7785540 +9345545 +5112843 +1791151 +1791372 +9382044 +1792827 +1792831 +1793566 +10850929 +1794637 +1795042 +1795045 +1795049 +9622322 +1796288 +1797111 +1797121 +1797296 +1797521 +9022399 +9236138 +9410076 +7598729 +1798427 +4532352 +8150450 +8793873 +9314022 +1799183 +9249036 +1803218 +1803266 +10033898 +1804394 +1804401 +1804404 +1804407 +1804409 +1804522 +5115046 +1804759 +11907485 +1804974 +1805197 +1805271 +1805537 +1805542 +1805549 +1805691 +1805717 +1805938 +1805955 +1806687 +1806690 +1806702 +9394138 +9491341 +1806872 +5115500 +1807514 +1807881 +1808590 +1808592 +1808648 +8929537 +1809066 +1809127 +1809135 +1809294 +1809299 +1809348 +1809491 +1809499 +1810121 +1810172 +5116128 +5116134 +5116145 +5116198 +5116252 +5116293 +9350900 +1810743 +1810824 +1810846 +1810866 +9389851 +7535515 +1811019 +1811079 +1811122 +1811439 +5116332 +5116338 +5116358 +5116423 +1814182 +1814336 +1814359 +1814365 +5117348 +1814665 +1814692 +1814800 +1814863 +8933773 +5117414 +9434954 +5117430 +5117462 +1816570 +5117685 +1817086 +1817690 +1817693 +1817727 +1817734 +1817749 +1817797 +11725616 +1817864 +1818252 +5118046 +11758730 +1818454 +1819310 +9391467 +9568710 +1820940 +9362560 +10395440 +9247563 +9290866 +9315577 +9406984 +9599150 +10214972 +10830546 +10851228 +12194283 +8429622 +5114921 +1781420 +1793538 +1813413 +1813415 +8177591 +1775796 +1811948 +1812026 +5884258 +7716829 +8299504 +8968321 +9451320 +1784959 +1785024 +1785072 +5884188 +6117485 +7611914 +7924383 +1780646 +1780668 +1777463 +1777471 +1860974 +1860993 +1838360 +1838465 +1841091 +9473121 +1860184 +10165831 +1860443 +10308365 +5123419 +5123542 +4302389 +8797666 +1870037 +1870308 +1870450 +1870727 +1870988 +1871175 +10246305 +8766638 +1871597 +1871890 +1872210 +10336328 +1872452 +1872456 +1872514 +1872515 +1872873 +1872901 +1873079 +1873319 +5125545 +1873398 +7372375 +1873753 +10143814 +9971850 +1874552 +1875478 +1875914 +1876542 +1876665 +5125916 +5125917 +1877282 +1877443 +5126013 +5976937 +5125525 +5143284 +5143285 +11950325 +12018158 +12060941 +5131957 +5141493 +1940580 +1941294 +10132596 +1736623 +10274976 +1736860 +10638589 +4530608 +1737847 +1737904 +1737929 +1740246 +1741131 +1741324 +1741820 +1741823 +1741826 +9880932 +10095278 +11923027 +1743461 +10073044 +1745022 +1746000 +1747024 +1747140 +1747740 +9948031 +8734154 +1935498 +4299071 +9457324 +1936026 +1920844 +1920889 +1920900 +1920923 +1921053 +10657453 +1921123 +1921240 +1921247 +8825450 +1922038 +1922039 +1922041 +1922049 +1922219 +1922455 +10278292 +1922637 +1922676 +1922851 +1922865 +1922868 +1922889 +1922890 +1923505 +8913017 +1923678 +1923679 +1923997 +1924050 +1924106 +1924176 +1924518 +1924521 +8837974 +8840017 +8992718 +9157410 +9478718 +10120854 +1925429 +1925498 +1925501 +1925515 +4300384 +4300393 +8904480 +1925918 +1925922 +1926009 +1926834 +5139029 +5139034 +1927988 +1927996 +1928009 +4300406 +1928214 +1928215 +8846776 +1928584 +1928589 +1929046 +1929129 +5139578 +1929962 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930270 +1930288 +1930289 +1930331 +1930361 +1930410 +1930422 +1930451 +1930563 +1930653 +1930678 +1930728 +1930772 +1930830 +1931116 +1931119 +1931122 +1931126 +5139864 +1931310 +1931784 +5139897 +5139898 +5139908 +10113190 +11417741 +1932056 +1932172 +1932386 +1932576 +1932879 +5140033 +5140054 +5140063 +1933260 +1933998 +1935853 +1935872 +1935878 +1935884 +1935888 +1935899 +1935901 +1935912 +1935916 +1935925 +1935931 +1935935 +9867272 +5139928 +4300268 +9469139 +9975698 +9156458 +1751980 +1751986 +1752034 +1752109 +1752111 +9776414 +9941073 +1752775 +1752825 +1752832 +1752894 +11507608 +5105367 +5105369 +5105379 +5105380 +5105447 +5105491 +5105508 +1753603 +1753604 +1753661 +1753668 +1753833 +1753864 +1753871 +5105603 +10413588 +10514620 +5137512 +12181811 +12226416 +12251247 +1919125 +1919128 +1919130 +1919145 +1919146 +1919149 +1919173 +1919235 +1919239 +1919245 +1919282 +1919289 +5137540 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +4701336 +7661785 +5137553 +1919700 +1919705 +1919711 +10703948 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +1920192 +5137800 +5137802 +4701136 +5137817 +5137819 +5137851 +5714819 +1920426 +1920437 +1920461 +1920463 +1920496 +1920552 +1920571 +1920574 +1920581 +1920691 +1920803 +1920809 +5137615 +5137672 +5137694 +12191141 +12206386 +12234544 +12236627 +1920621 +5105068 +1954930 +1956098 +1956099 +1956215 +1958049 +5143964 +1958121 +1958528 +1959637 +1960090 +1960166 +1960255 +1960268 +1960315 +1960503 +1961155 +4302240 +9468667 +1961361 +10650351 +1962051 +1962076 +1962086 +1962118 +1962120 +9592714 +9264326 +1962895 +1962900 +4302252 +1963052 +1963207 +1963433 +1963619 +1963633 +1963848 +1963854 +5144363 +1964698 +1965586 +1965671 +1965697 +1965865 +1965887 +1966088 +1966185 +1967226 +1967346 +8793278 +1968313 +1968321 +1968324 +1968538 +5144583 +1968942 +10088253 +5144953 +5145078 +5145139 +5145466 +5145521 +5145560 +1972101 +5145998 +5146179 +1973147 +1973245 +1973665 +10404426 +5146497 +5146820 +5146832 +5147018 +5147139 +5147179 +5147211 +9469300 +9590066 +1975287 +1976073 +1976651 +1976746 +1977003 +9617496 +1978464 +1978671 +9243264 +5148277 +5148280 +5806132 +1978958 +1978959 +1979427 +1980245 +1980247 +1980250 +1981144 +1981160 +1981252 +1981277 +1981284 +1981951 +1981959 +1981973 +5148531 +5148544 +5148576 +5148593 +9307713 +9424464 +9488754 +9544337 +5148719 +5148743 +5148934 +5148952 +1985485 +5149222 +1985647 +1985952 +1986091 +1986192 +1986367 +1986906 +1987301 +1987330 +1989582 +1990200 +1990270 +1990331 +1990335 +1990357 +1990594 +1990998 +5149631 +12225687 +5880539 +9392058 +9438677 +4302221 +9621086 +9281181 +9403481 +9448761 +9494431 +9516038 +9534291 +9545331 +9497623 +9581695 +9619088 +9237031 +9299326 +10221195 +10288719 +1978197 +9363893 +9391442 +5149746 +5149753 +5149811 +5149819 +5146326 +1980462 +9256786 +9291092 +5150002 +5150027 +12200261 +11470872 +11654707 +11776315 +11892494 +12252926 +11423843 +11670842 +12173621 +12247340 +12252340 +12239491 +1942098 +1942141 +1942170 +1942171 +12286003 +1942341 +1942370 +1942372 +1942416 +1942455 +1942509 +4301744 +4301749 +1942558 +1942670 +5141662 +1942854 +1942982 +5141697 +1943054 +4302008 +5141743 +5141763 +1943475 +1943563 +1943571 +1943588 +4301355 +1943631 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +1943954 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944421 +1944574 +1944769 +4301934 +1944798 +1944815 +1944832 +5141913 +9551544 +1945081 +1945302 +1945312 +1945462 +1945476 +1945477 +4301942 +1945957 +1946074 +1946078 +1946079 +1946097 +1946163 +1946167 +1946177 +1946310 +1946327 +1946333 +1946469 +12233838 +1946495 +1946500 +1946509 +4302101 +1946520 +1946544 +1946550 +1946577 +1946582 +5142086 +1946853 +1946865 +1946901 +1946981 +1946983 +1946989 +1946992 +1946995 +1947021 +1947037 +1947048 +1947055 +1947147 +5142166 +5142175 +5142176 +1947402 +1947507 +1947568 +1947587 +1947588 +1947597 +1947842 +1947894 +12208168 +1947973 +1947976 +1947979 +1947980 +1948042 +1948046 +1948158 +7603634 +1948439 +1948446 +1948521 +1948826 +1948865 +1948890 +1948947 +1949049 +1949105 +12353663 +1949219 +1949285 +1949322 +1949449 +1949451 +1949466 +1949492 +10574663 +1949512 +1949515 +1949545 +1949592 +1949621 +7726809 +9395000 +1949687 +5142424 +5142436 +5142583 +1950017 +1950019 +4301876 +1950044 +1950052 +1950133 +1950153 +1950197 +1950567 +1950578 +1950654 +1950767 +1950856 +1951062 +1951097 +1951116 +1951121 +1951125 +1951133 +1951217 +1951218 +4301897 +5715127 +12180041 +12206694 +1951340 +5142829 +5977197 +5977207 +5977214 +5977235 +5977259 +5977260 +5977262 +5142267 +5142319 +5142328 +1948771 +1948779 +1948789 +1948799 +1948800 +1948802 +1948803 +1948810 +1945374 +1945378 +12175154 +12263736 +1758767 +1758771 +1758781 +1758783 +7911151 +9366762 +9445489 +1759799 +1759881 +1760309 +1760361 +1760455 +1761143 +1761892 +5109535 +9328683 +1764686 +1764693 +1764917 +1765155 +5109845 +5109850 +5109855 +5109881 +5109954 +5109958 +8352161 +1766237 +1766285 +1766287 +1767052 +1767571 +1767584 +9511345 +1767612 +5772169 +1767719 +1768172 +1768174 +1769814 +1770659 +1773783 +9283948 +1774243 +9550265 +1774792 +6115953 +1775509 +1776467 +1776473 +1777727 +1777728 +9310286 +5111141 +5111546 +5111568 +1780309 +1780390 +1780407 +1780437 +1780440 +8802610 +9374443 +9392614 +1781819 +1782422 +1782424 +1782595 +9289753 +1782705 +1783313 +9457757 +9500945 +1783376 +1783811 +9348210 +9465978 +9492640 +1783842 +1784422 +1784461 +1784582 +5112414 +4534290 +1785168 +1785331 +9636267 +7400814 +1786360 +1786733 +1786808 +1787438 +1788485 +1788673 +1788677 +9449132 +1790339 +1790343 +1791331 +1791680 +1791862 +1792318 +1792430 +5113365 +9240216 +1792817 +1792996 +11781335 +1796274 +1796276 +7383338 +7689966 +7882824 +9327259 +1796312 +1798288 +1799433 +1799675 +1799774 +9388726 +9571514 +1799877 +1799900 +1799911 +1799925 +10446574 +8729319 +8050639 +8440999 +8562506 +8647523 +9241105 +9390293 +9452702 +9484411 +9530271 +9552253 +9595155 +11922580 +9363692 +9556427 +9503548 +7779226 +8818378 +8928353 +9538684 +10118643 +9875111 +9342344 +9629365 +11452421 +11470672 +11615055 +11626773 +11627464 +11660145 +11713256 +11753804 +11781300 +11859640 +5109299 +5109369 +5109413 +8943174 +9038042 +9307254 +9387782 +9404919 +5112130 +5112131 +7398419 +1792564 +1774929 +1770955 +1771067 +1771245 +1765751 +5108665 +11783188 +1797903 +6115793 +1776094 +9354669 +5118474 +5118509 +1824259 +1825218 +1825373 +1825391 +1825428 +5118944 +1826156 +1826169 +1826172 +1826181 +1826222 +5119009 +5119046 +10115073 +1826772 +9807789 +1827716 +1828105 +1828268 +10043566 +1903598 +1892509 +1892729 +1892736 +1892742 +1892759 +4299095 +1892851 +1892858 +1892863 +5127805 +5128005 +5128007 +5128011 +5128034 +1893337 +1893480 +9113409 +10653980 +1894074 +1894087 +1894088 +1894329 +1894342 +1895176 +1895185 +1895203 +1895709 +1895733 +1895768 +1895820 +8763986 +9016382 +1895886 +1895904 +1896087 +5128398 +5128433 +5128438 +5128475 +5128488 +5128491 +1896614 +1896628 +1896658 +1896749 +1896754 +10353400 +1896763 +1896774 +1896876 +1896932 +5129251 +9590057 +11701883 +5925238 +8367663 +1897985 +1897990 +10073321 +10365587 +1898143 +1898174 +1898203 +10321900 +1898286 +4299368 +4299370 +5714369 +1898358 +1898367 +1898391 +1898402 +1898414 +1898416 +1898424 +1898431 +5129387 +5129451 +6228464 +5129473 +5129481 +5129489 +5129496 +5129515 +5129517 +5129520 +5129524 +5129531 +5129535 +9208233 +9255328 +1898686 +1898841 +1898865 +1899048 +4299211 +4299213 +1899873 +1899893 +9446281 +1899994 +1900024 +1900026 +8847500 +9208918 +9925669 +1900112 +1900131 +1900134 +1900175 +1900197 +1900199 +1900233 +1900249 +1900295 +1900303 +1900345 +1900485 +1900578 +1900618 +1900626 +1900632 +1900787 +1900825 +1900830 +1900872 +9190731 +9392084 +1901001 +1901189 +1901261 +1901268 +8247566 +5130277 +1901735 +1901744 +1901794 +1901801 +1901804 +1901810 +11135155 +11219489 +12258652 +5130400 +5130514 +5130528 +5130548 +9357385 +1902111 +1902211 +1902300 +1902378 +1902406 +1902430 +1902458 +1902479 +1902502 +5130559 +1902620 +1902642 +1902670 +1902676 +1902680 +1902692 +1902702 +1902703 +1902704 +4299218 +1902880 +1902885 +1903028 +1903607 +1903658 +1903683 +5131597 +5131608 +5131637 +1904382 +7776011 +5131951 +1905242 +1905451 +1907153 +1907190 +1907235 +1907250 +1908011 +1908055 +1908123 +1908144 +1908146 +1908148 +1908150 +1908199 +1908203 +1908204 +1908207 +1908256 +1908258 +1908302 +1908577 +5133035 +10542548 +1908995 +1909019 +1909064 +10046510 +1909070 +1909128 +1909170 +1909185 +1909191 +1909211 +9851867 +8727750 +5133142 +5133251 +5133255 +5133265 +5133451 +5133523 +10558140 +5133565 +5133568 +1910773 +5133581 +1911076 +5133595 +5133609 +5133621 +5133623 +5133634 +5133635 +5133637 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +10638244 +9277330 +1914410 +1914416 +1914420 +1914424 +1914433 +1914435 +1914440 +1914442 +1914465 +1914477 +1914496 +1914498 +1914500 +1914501 +1914511 +4299201 +1914697 +1915193 +9185656 +9988287 +1915339 +1915396 +1915401 +1915417 +1915427 +1915430 +1915456 +1915469 +1915506 +10487080 +1916700 +1916790 +1917827 +1917830 +1917834 +1918077 +1918078 +1918082 +1918086 +1918094 +1918097 +1918133 +1918149 +10250149 +1918220 +1918269 +1918280 +1918293 +1918596 +1918968 +1918972 +1918984 +1918988 +1919007 +5128045 +10415847 +5130682 +5130696 +10259880 +5131982 +5132003 +5132079 +5132084 +5132137 +5132225 +5132246 +5132254 +5132317 +5132346 +5132347 +5132360 +5132398 +5132429 +5132446 +5714312 +5714333 +9541133 +5133088 +5714299 +5714302 +5130557 +10662329 +12045866 +4299778 +5132917 +5132940 +5132956 +5133008 +9964857 +5142842 +1868334 +1868360 +5125118 +1941570 +1941717 +1941719 +5101371 +5101374 +10607329 +11484123 +9114044 +5101527 +1731812 +7628188 +1878688 +1878705 +1878751 +1878810 +1879052 +1879160 +1879253 +1879348 +1879398 +1879413 +10366679 +10874932 +1879443 +1879452 +1879471 +5126352 +5126494 +5126517 +5126533 +1880044 +1880133 +5126585 +5126637 +1880381 +1880505 +10056494 +1880537 +1880623 +5126663 +10861282 +11968849 +1881079 +1881111 +1881139 +1881166 +9819403 +1881404 +5126718 +5126721 +1881767 +1881822 +5126751 +1881917 +1882089 +1882190 +1882195 +5126963 +1882786 +10107015 +1882812 +1882816 +1882818 +10191785 +1882927 +1882941 +1882960 +1883067 +10807787 +8981028 +5127089 +5127090 +5127116 +5127130 +1883968 +1883975 +8324720 +9864281 +1884001 +1884479 +1884685 +9308930 +1884703 +1884774 +1884923 +1884997 +1885001 +1885099 +1885158 +1885642 +1885950 +1886251 +1886292 +8223165 +5127209 +1886501 +1886729 +10510138 +1886868 +1887004 +1887024 +1887341 +1887459 +5127335 +5127337 +5127339 +5127355 +5127357 +1887565 +1887634 +1888009 +1888047 +1888292 +1888306 +1888338 +1888435 +5127378 +1888646 +1888695 +1888823 +12106417 +1888946 +1888955 +1889028 +1889267 +1889327 +1889536 +1890089 +1890247 +7543006 +1890368 +1890374 +1890410 +1890417 +1890487 +1890512 +1890599 +1890670 +1890730 +1890737 +1890794 +1890876 +1890885 +6207059 +7431428 +1891035 +1891074 +1891167 +1891488 +10310835 +1891636 +1891755 +1891932 +1892131 +1892193 +1892230 +1892311 +1892320 +1892355 +1892420 +1892427 +1892433 +9059564 +1892477 +1892488 +5771877 +7864212 +8146570 +8425580 +6121010 +6121218 +8876855 +1886374 +1889721 +1889745 +1889850 +5127562 +5127631 +5127680 +5802339 +1887122 +1886123 +1886207 +1846103 +1831136 +1831168 +1853242 +1853312 +1854143 +11773446 +7946946 +1858615 +9777614 +1858659 +1858674 +1858706 +1858930 +1859046 +1859161 +8790054 +6133397 +9700261 +10103570 +1864905 +8877458 +9240588 +9355107 +9531432 +9547535 +9606779 +1865102 +1865107 +1865108 +1865132 +1865299 +1865333 +1865341 +1865353 +5124557 +5124589 +5124595 +5124598 +5806244 +1865557 +1865572 +1865590 +1865709 +1865764 +1865837 +1865842 +1865853 +1865963 +1866003 +1866085 +1866100 +1866105 +1866123 +1866201 +1866214 +1866311 +1866330 +1866496 +1866550 +1866570 +1866601 +1866838 +1866902 +1867037 +5124873 +1867515 +1867525 +1867535 +1867773 +10247309 +10591617 +9634178 +10248521 +1841813 +5123615 +1861479 +1861559 +1861604 +5123636 +1861773 +1861783 +1861784 +1861823 +1861887 +1862033 +1862044 +1862047 +1862049 +1862078 +1862083 +1862087 +1862088 +1862091 +1862094 +1862096 +1862123 +1862129 +1862139 +1862163 +1862181 +1862198 +1862207 +1862225 +5123701 +5123704 +1862547 +1862551 +1862595 +1862624 +1862658 +1862841 +1862923 +1862928 +1863021 +1863088 +5123775 +1863109 +1863151 +5123784 +5123801 +7803585 +1863366 +1863407 +1863412 +1863416 +1863426 +5124049 +1863699 +1863701 +1863706 +1863714 +1863724 +1863732 +1863734 +1863742 +1863757 +1863856 +1863858 +1863864 +1864164 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +5124118 +5124136 +5124147 +5124172 +5124200 +5124249 +5124250 +5124268 +5124442 +5124443 +5124450 +5124452 +5123954 +5123956 +5123961 +5123968 +5123971 +5123979 +5123980 +5123983 +5123991 +5123996 +5124000 +8849480 +9513830 +1863978 +1864004 +1864008 +1864021 +1864046 +1864058 +1864068 +1864070 +1864084 +1864098 +1864103 +1864106 +1992634 +5150092 +1993643 +1992817 +1953499 +5143232 +5143234 +9053308 +9424853 +1953970 +1953998 +1954084 +1754270 +5105649 +5105656 +5105671 +1757839 +10322104 +1830681 +10604375 +1953166 +1751497 +1751524 +1751572 +1751588 +1751590 +1751609 +1751625 +1751626 +9332550 +1751670 +1751684 +1751785 +5105193 +5105217 +5105218 +5105227 +1854920 +5122526 +5122538 +5122556 +5122571 +5122581 +5122620 +5122646 +5122647 +5122683 +5122696 +5122702 +1855358 +10055273 +1856581 +1857143 +1857380 +1857626 +1857829 +1858163 +5122969 +1858283 +10038125 +1937642 +1937655 +1937688 +1937691 +1937722 +1937751 +1937758 +1937793 +1937803 +1937816 +1937846 +1937885 +1938016 +1938022 +1938059 +1938069 +1938112 +4299871 +10600208 +12211009 +1937090 +1937109 +1937110 +1937124 +1937136 +1937144 +1937162 +1937167 +1937527 +1939130 +1939136 +5141321 +5141324 +5141333 +5141342 +1939336 +4694313 +12219250 +1856368 +1856555 +5119961 +5119969 +1836899 +1837172 +4534796 +1800963 +9385576 +8924506 +9426252 diff --git a/dev/releases/mambo_v3/presets/east_asia.classes b/dev/releases/mambo_v3/presets/east_asia.classes new file mode 100644 index 0000000..e59f3e3 --- /dev/null +++ b/dev/releases/mambo_v3/presets/east_asia.classes @@ -0,0 +1,4447 @@ +1837646 +1934693 +1935849 +1992277 +1992283 +1992315 +1860621 +1860628 +1860659 +1860664 +1860668 +1860688 +1860711 +4522933 +5123582 +1732063 +1732114 +1732115 +1732416 +1732452 +1732508 +1732521 +1732525 +1732565 +1732662 +1732685 +1732763 +1732830 +1732842 +5101640 +1733154 +1733155 +1733243 +1733258 +1733394 +1733412 +1733484 +4525266 +5734897 +5101745 +5769191 +1734453 +5102207 +5102242 +1734496 +1734519 +1734704 +1734826 +5734891 +5102287 +5102300 +1832143 +5734640 +11453841 +1832235 +1832248 +1832254 +5734645 +1832612 +11505614 +8825467 +1845270 +1845368 +1845547 +1845548 +1845565 +1845607 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +10785815 +11730078 +1847061 +1847062 +1847097 +1847111 +1847157 +1847260 +1847392 +4528547 +1847572 +1847641 +9262981 +1847956 +9546514 +1848150 +10450501 +1848219 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848864 +1848868 +1849104 +5122013 +1849267 +1849284 +1849294 +9007213 +1849477 +11052757 +11080751 +1849531 +1849552 +1849630 +1849924 +1850008 +1850076 +1850238 +1850246 +11576787 +1850302 +1850335 +1850386 +1850394 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850633 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +1851203 +1851220 +1851337 +1851347 +1851543 +1851555 +5122206 +4527972 +1852177 +6133343 +1852430 +11287091 +1829533 +1829588 +1829659 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +7623903 +5879654 +7448174 +4525610 +10835385 +10855556 +5125130 +1861395 +1868428 +1868527 +5734146 +1845962 +1845965 +1834980 +8503184 +1839094 +1830843 +1830122 +1830125 +1830131 +1830147 +1830152 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +4525476 +4525487 +1831458 +1831631 +1831643 +9379855 +8834672 +1839625 +1841296 +4528593 +1853723 +5880147 +9734171 +10679326 +10746289 +11382064 +10698858 +11570545 +10701190 +11807833 +12199936 +11095591 +11418741 +11571523 +7908344 +12235234 +12217030 +1758625 +1759150 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +10889719 +1760970 +1761111 +1761213 +1761353 +1761387 +9257793 +1762151 +11562374 +1762219 +1762226 +1762298 +1763589 +5109766 +1763650 +1763782 +1763812 +1763976 +1764021 +1764032 +1764043 +1764060 +9278311 +1764531 +1764880 +1764886 +1765653 +1765863 +1766260 +1766560 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767044 +1767755 +1767779 +1767780 +5110190 +11097510 +1767883 +1768440 +5110232 +1768898 +10820762 +1769103 +1769168 +11467034 +10848620 +1769410 +1769425 +1769465 +1769737 +1769772 +10881384 +12148290 +1769823 +1769827 +1769840 +1769852 +1769897 +1769901 +6132966 +6132967 +7701550 +8837162 +1771839 +1771975 +1771977 +1772793 +4532500 +5110397 +5110417 +5110447 +5110490 +1774575 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +1777631 +5110837 +1777695 +9372988 +6132953 +4687991 +6133029 +5110986 +5110993 +5111007 +5111044 +6133058 +9610080 +1779456 +6132938 +1780150 +5111830 +10203499 +1780705 +1780716 +1782115 +1783302 +1783652 +1784804 +10208792 +1785744 +1785832 +1786317 +1786711 +5112500 +6132971 +6132974 +1786980 +1786985 +1787009 +10860091 +6132805 +1788045 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +1790331 +1790692 +1790816 +10749137 +10766319 +1790876 +1790888 +1791010 +1791094 +1791097 +10743044 +6132950 +1791514 +1791698 +1791715 +11016336 +11725043 +11971514 +5113078 +5113082 +5113084 +5113148 +5113234 +5113330 +5113352 +1792541 +1792695 +5113385 +5884243 +9504222 +1793429 +1793610 +1793613 +1793631 +1793635 +1793646 +1793656 +1793892 +5113925 +1796984 +6132979 +10600368 +1797178 +1797258 +1797259 +1797276 +1797299 +1797344 +1797367 +1797374 +1797429 +1797454 +1797479 +4532471 +8355390 +8756768 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +1798346 +1798408 +1798449 +1798481 +1798488 +1798504 +6132841 +6132850 +11976273 +1787072 +1787079 +1798523 +1798580 +1798594 +1798687 +1798700 +1798794 +1798802 +1798807 +1798823 +1798863 +1798868 +4301310 +4532351 +4532352 +4532357 +6115426 +6115437 +6133046 +6133051 +8793873 +1799417 +1799708 +1799743 +1799751 +1799757 +6132824 +6132825 +10722110 +1803148 +1803163 +1803197 +1803824 +1804071 +1804477 +9343385 +1804906 +1805044 +1805111 +11494627 +12229237 +1805580 +5115166 +5115167 +5115198 +9663271 +1806936 +7874258 +11453492 +1808140 +1808145 +1808161 +1808195 +1808221 +1808236 +1808286 +1808348 +1808450 +1808559 +6198302 +9219266 +1808752 +5115701 +5115771 +1809019 +5115777 +1809115 +1809210 +1809308 +5116095 +10183056 +12006709 +1810099 +1810464 +10882244 +5116395 +5116412 +12176559 +12182061 +1811686 +1812500 +10671425 +10821201 +11736162 +12209759 +1813010 +1813114 +1813263 +5117189 +7656811 +1814630 +1814653 +1814913 +1814928 +1814971 +5117399 +5117400 +1815260 +10826443 +12249986 +1816065 +1816138 +1816246 +1816276 +1816292 +1816299 +1816362 +1816881 +5117779 +1817797 +5734900 +11461056 +11860565 +1818413 +8326103 +1818659 +1818991 +10822185 +1819128 +1819145 +4532293 +4532297 +6134023 +6134027 +7346382 +7346384 +1819268 +1819270 +1819280 +11656384 +8407461 +1819668 +6134035 +1819873 +5118348 +6122092 +7657803 +8361973 +5118422 +10546538 +1820275 +1820352 +1820372 +1820406 +1820414 +1820450 +1820451 +1820477 +1820478 +5734655 +5734657 +7346381 +9420824 +1820565 +1820753 +1820888 +1821105 +1821260 +1822141 +1822142 +11731502 +12253343 +12037602 +9276279 +9347308 +5884571 +10503495 +8897869 +7596232 +5771982 +12176367 +7346231 +6097214 +4532544 +4532516 +6133081 +6133083 +4532532 +4532565 +10864524 +12021153 +12021649 +12089608 +9673208 +10270464 +8741750 +9473918 +9400545 +9559336 +6133292 +11332355 +6133340 +10062933 +10717837 +8148822 +12242422 +10806460 +6133252 +10072380 +6133325 +9754232 +10972780 +11142432 +10309234 +12171522 +9493317 +9315833 +11962292 +10399906 +6133266 +6133269 +6133270 +6133271 +10754772 +11232431 +6133311 +6133312 +6133313 +6133315 +6133317 +8452092 +8526388 +8624848 +5734901 +6133262 +12257250 +8831819 +12135372 +5115872 +5115874 +5116475 +8038357 +6133264 +6097254 +1774829 +5116698 +5116843 +12171068 +9266866 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +6133033 +5116504 +1788635 +9336001 +1781413 +1781421 +1803461 +4532405 +4532408 +4532412 +10866411 +6133241 +6133242 +6133244 +6133248 +7346227 +8000103 +9478424 +1794273 +4532534 +6115388 +6133297 +1774583 +1774598 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +6132809 +1819852 +1780287 +4532508 +1793515 +1793533 +5111643 +1768461 +1760246 +5113030 +5113036 +5109796 +1821455 +1821464 +1821478 +1821479 +1821505 +1821651 +1821856 +1821863 +1821920 +1821934 +1821940 +1822017 +1819337 +1819362 +1804182 +1774997 +6122364 +1819170 +1781473 +1783713 +1783725 +1812394 +8237987 +4532366 +4687933 +6116646 +6116661 +10926224 +11088003 +1820118 +1820137 +1819057 +6116413 +1820039 +5118396 +1781531 +1798329 +1798335 +1784947 +1785072 +1765996 +1765999 +1766022 +6133069 +10598038 +11513188 +1786597 +5884188 +6132915 +6132916 +6132917 +5110012 +12185656 +1809594 +1781350 +1781353 +6133013 +1796943 +1819685 +10098436 +11717028 +1771772 +1771779 +1782310 +10094256 +10765884 +9792270 +5108435 +5108440 +1771903 +1788813 +4301309 +10506164 +1777500 +1777517 +5112440 +1795542 +1860979 +1860983 +1860987 +1861031 +4522916 +4522919 +4522922 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +7767114 +7851302 +7961640 +1992378 +1852956 +1852978 +1835432 +1835433 +1835457 +9724183 +1837343 +1837420 +1837429 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +5119808 +1831752 +4529630 +5125075 +5125104 +10371735 +1869359 +1869363 +9883856 +1751236 +1751298 +1751457 +4535884 +4535904 +1939510 +1939520 +5141344 +1860261 +1860274 +1860408 +4525177 +5123339 +10361029 +5123394 +5123419 +5769164 +5880040 +5880041 +6132546 +5123449 +5123461 +5123474 +5123485 +5123489 +1751207 +1751216 +1869595 +1869656 +1869706 +1869803 +1869852 +1869976 +1870202 +1870237 +1870249 +1870250 +1870450 +1870650 +1870988 +1871160 +1871212 +1871407 +4531402 +1871630 +1871683 +1871698 +1871783 +1871826 +1871988 +1872094 +1872169 +10787705 +1872848 +1872850 +1872873 +1872901 +1873048 +1873079 +1873215 +1873411 +1873417 +4530947 +1873776 +1873780 +1873783 +4531264 +1873843 +1873890 +5125569 +5125596 +5125602 +5125633 +5125635 +5125689 +1874192 +1874204 +1874211 +1874274 +4531147 +1874375 +1874743 +9782192 +1874937 +1875008 +1875120 +8219149 +1875327 +1875376 +1875429 +4531242 +1875633 +1875682 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876168 +1876329 +1876357 +1876409 +1876512 +1876542 +1876592 +1876623 +1876854 +1876922 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +1877498 +5126052 +1877788 +1877941 +1877988 +4531417 +1878406 +1878470 +9835867 +1878586 +1883045 +1888454 +5884888 +6133441 +11728049 +1872315 +1748805 +4525884 +5141493 +1940504 +1940510 +1940575 +1940639 +1940644 +1940744 +1940768 +4525777 +1940807 +1940838 +1941348 +1941377 +1941437 +12211069 +1939879 +1736358 +1736377 +1736412 +1736425 +1736484 +1736499 +1736560 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736945 +4530406 +1736993 +1737015 +4529931 +10842267 +1737313 +1737342 +1737368 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738192 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8869900 +5102931 +5102951 +1738687 +1738700 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739272 +1739337 +1739377 +1739381 +5102982 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739833 +1739919 +1739922 +1739980 +1739999 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740469 +1740482 +1740524 +1740567 +1740570 +1740623 +1740797 +1740828 +1741056 +1741253 +1741340 +1741341 +1741368 +4530151 +8345820 +5103061 +5103066 +5771357 +1741545 +1741551 +10838422 +1741593 +1741615 +1741633 +1741634 +1741667 +1741752 +1741756 +1741765 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +5104056 +6097235 +1743641 +1743643 +1743710 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1743998 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744808 +1744896 +1744901 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745816 +1745830 +8162538 +8369868 +1745895 +1745925 +1745947 +1745952 +1745957 +1746027 +1746174 +1746327 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746714 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +10442122 +5104442 +1747738 +4530138 +5104558 +5104597 +6097234 +7588222 +9242559 +1748456 +1748605 +1748720 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525562 +1920851 +1920864 +1920892 +10159697 +9916153 +1920957 +1920996 +1921009 +1921010 +1921040 +1921044 +7346426 +10581870 +1921092 +1921093 +1921150 +1921163 +1921263 +10556522 +7387466 +1921633 +7346430 +1921897 +1922111 +1922143 +1922244 +1922285 +10442031 +1922311 +1922343 +8016522 +5138200 +1922584 +4535092 +8782891 +1922745 +1922937 +5138298 +5138543 +5138561 +5714680 +1923491 +1923649 +1923651 +1923668 +1923796 +1923809 +1923917 +1924044 +1924057 +1924097 +1924106 +1924193 +5138681 +1924298 +1924323 +1924390 +1924458 +1924713 +1925221 +1925233 +4535172 +1925381 +1925454 +1925543 +1925731 +1925743 +1925877 +1925918 +1925962 +1926054 +9816676 +1926324 +1926436 +1926437 +1926448 +1926574 +5883255 +1926593 +1926611 +10116946 +10361239 +1926800 +1926861 +1927034 +1927217 +4709111 +5883052 +1927393 +1927439 +1927707 +1927717 +5882965 +1928248 +5139050 +1928349 +1928361 +1928419 +5139156 +1928849 +1928908 +1928915 +1928960 +1929270 +1929659 +1929697 +8356768 +1930110 +1930832 +4535106 +1930954 +1930968 +1931109 +1931132 +8643155 +1931148 +1931179 +1931509 +1931561 +5734268 +7346434 +1931706 +1931735 +1931779 +5139915 +1931956 +1931958 +1931997 +1932020 +1932043 +1932159 +1932166 +1932273 +4708995 +1932411 +1932551 +7346444 +1932607 +6132685 +1932814 +1932960 +5806412 +1933028 +1933044 +5140214 +5140244 +5140436 +7634721 +7664111 +1933583 +1933647 +7346407 +1933679 +1933793 +1933844 +1933845 +1934187 +1934188 +1934192 +1934211 +1934213 +1934221 +1935377 +1935410 +1935454 +1935459 +1926260 +5138929 +7346417 +11874998 +4709102 +1933095 +1933138 +1924494 +11055981 +9623220 +1752161 +5734556 +1752373 +1752483 +1752494 +1752603 +1752651 +1752749 +1752758 +1752849 +1753081 +1753215 +1753395 +5105458 +5105467 +5105547 +5105560 +5105570 +1753432 +1753435 +11014495 +1753636 +5734560 +1753759 +5105588 +10955682 +10932946 +4522322 +7345843 +6133481 +10017342 +5105339 +5105259 +10795141 +11673056 +1919151 +1919320 +1919328 +1919340 +1919344 +1919348 +1919438 +1919534 +1919551 +1919581 +1919589 +1919635 +1919697 +1919712 +1919716 +1919720 +1919728 +1919731 +1919741 +1919951 +1919966 +5137748 +1920237 +1920247 +1920259 +5137808 +5137823 +5137828 +5137832 +5137833 +5137849 +5805954 +5137861 +1920454 +1920467 +1920469 +1920494 +1920496 +1920506 +4535307 +5137889 +5137891 +5804932 +5805407 +1920515 +5137902 +5137903 +5137908 +5137912 +5804895 +5137920 +5137926 +5137932 +5137938 +5137945 +5137946 +5137949 +1920711 +1920712 +1920718 +5804166 +5714914 +5137573 +5137578 +5137582 +5137595 +5137605 +5137612 +5137636 +5137677 +5137682 +5137689 +5137706 +5137708 +5803588 +8203812 +1920218 +5137763 +1748922 +1748942 +1749050 +1749070 +1749449 +1749713 +1749744 +1749869 +1749921 +1749948 +1749954 +1750076 +1750097 +1750143 +1750166 +1750288 +5104772 +5104797 +5104829 +5104882 +5104891 +5104903 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +8741260 +1758003 +1735532 +4527339 +4527342 +1758440 +1758441 +1758461 +1731826 +1731837 +1731860 +1855241 +1868837 +1869057 +1869178 +1869187 +1992547 +1963096 +1973530 +11826016 +5143303 +5143311 +5143315 +1954496 +1954563 +5143338 +5143354 +5143368 +5143380 +5143384 +5143437 +5143453 +5143477 +5143506 +5143511 +5143525 +5143575 +5734335 +1954891 +1954911 +6133648 +1955389 +5143651 +1955552 +1955581 +6133676 +1955694 +1955725 +1955806 +5143675 +5143697 +1956309 +1956384 +5734542 +5734543 +1956440 +1956524 +1956536 +1956599 +1956629 +1956710 +6133593 +4525068 +1957161 +1957174 +1957266 +1957300 +1957333 +1957368 +1957460 +1957572 +1957583 +1957632 +1957706 +1957718 +1957746 +1957791 +1957816 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143947 +1958024 +1958045 +1958065 +1958152 +1958158 +1958163 +1958241 +1958252 +1958255 +1958259 +1958260 +1958275 +1958282 +1958290 +1958305 +1958323 +6544637 +1958454 +1958463 +1958483 +5144027 +1958528 +1959383 +1959395 +1959461 +1959467 +1959494 +1959645 +1959652 +1959666 +1959667 +1959682 +1959735 +6133552 +1959876 +1959914 +1959919 +1959948 +10694777 +1960023 +1960181 +1960182 +6133509 +5144092 +5144093 +1960571 +1960595 +1960617 +6133518 +1960686 +1960854 +1960963 +1961013 +1961037 +1961040 +5734344 +1961052 +1961068 +1961126 +1961162 +7346236 +1961190 +1961252 +1961647 +1962204 +1962265 +1962268 +1962434 +1962447 +1962516 +9812211 +1962584 +1962636 +1962678 +1962839 +1962860 +1963011 +4302252 +5734349 +1963168 +1963306 +5144345 +1963446 +1963463 +1963629 +1963709 +1963710 +1963733 +1963827 +11644349 +1964024 +1964025 +1964029 +6133500 +1964113 +1964116 +1964191 +1964195 +1964247 +1964316 +1964437 +1964471 +6133502 +1964637 +1964653 +1964657 +8361848 +1964738 +5144426 +1965166 +1965197 +1965208 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +5144431 +5144438 +9919915 +9370070 +5144499 +1966286 +1966302 +1966310 +5734448 +10670854 +1966362 +5144534 +1967006 +1967011 +1967039 +5144543 +1967245 +1967265 +1967273 +1967445 +1967590 +1967595 +1967597 +1967672 +1967688 +7346240 +1967803 +1967815 +1967873 +1968147 +1968182 +1968193 +7681733 +1968304 +1968363 +1968730 +1968746 +1968867 +1968951 +11598540 +1968990 +1969291 +1969357 +1969491 +6133643 +1969621 +1969954 +1969958 +1970034 +1970136 +1970213 +1970243 +1970284 +1970322 +1970436 +5734405 +6133513 +7346252 +5144677 +5144721 +5144782 +5144787 +5144805 +5144806 +5144864 +5144900 +5144936 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +5145522 +5145560 +5145624 +5145729 +5145735 +9194811 +9627567 +1971858 +1971888 +6133516 +1972094 +1972120 +1972185 +1972187 +1972234 +1972250 +1972342 +1972374 +1972377 +5145870 +5145965 +5146038 +5146062 +7541913 +7960566 +1972434 +1972443 +1972449 +1972613 +1972614 +1972616 +1972620 +1972631 +10732353 +1972754 +5146282 +1973242 +1973338 +1973358 +1973393 +1973397 +1973414 +5146434 +5146483 +5146496 +5146508 +5146559 +5146566 +5146567 +5146599 +5146601 +5146608 +5146611 +5146659 +5146677 +5146746 +5146752 +5146762 +5146763 +5146833 +5146837 +5146862 +5146883 +5146946 +5146961 +5147038 +5147039 +5147062 +5147150 +5147171 +5147193 +5147208 +5147214 +5147232 +5147245 +5147306 +5147354 +5147415 +5147441 +5147478 +5147492 +5147498 +5147516 +1975164 +1975198 +6133559 +5147608 +5147638 +1975341 +11856219 +1975546 +1975553 +1975571 +1975583 +1975597 +1975711 +1975733 +8329661 +1975793 +8160782 +1975805 +1975806 +1975892 +1975897 +1975903 +1975964 +1975979 +5734539 +9356491 +9410573 +9548993 +1976163 +1976212 +1976213 +1976224 +1976228 +1976311 +1976462 +1976463 +1976469 +1976470 +1976483 +5147681 +6097233 +7973517 +1976928 +1977003 +1977007 +1977068 +4523725 +5147819 +5147827 +5147834 +1977182 +1977184 +1977297 +5734420 +6133548 +5147917 +5147968 +5148043 +5148055 +5148115 +5769028 +1977813 +1977833 +1977863 +6133582 +1977962 +1977967 +1978010 +1978034 +1978045 +1978056 +1978065 +1978114 +1978375 +1978385 +1978398 +1978405 +1978407 +1978422 +1978424 +1978445 +5734388 +1978499 +1978524 +1978529 +4524636 +4524638 +5734519 +6133560 +4524890 +5148252 +10738407 +1978776 +1978789 +1978821 +5734396 +1978977 +1978996 +1978999 +6133546 +1979021 +5148286 +1979222 +1979229 +1979308 +1979430 +1979473 +1979521 +1979561 +1979562 +1979758 +1979781 +1979787 +1979801 +1979806 +1979822 +1980269 +5148436 +5148462 +5148486 +5148487 +1980521 +1980532 +11449815 +1980694 +1980811 +1980827 +1980917 +8421569 +1981063 +6133585 +1981357 +1981457 +1981696 +11173690 +10592969 +7345811 +7345813 +1981937 +1981938 +1981998 +1982007 +1982203 +1982221 +1982267 +1982291 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982791 +1982838 +1982865 +1982885 +1982924 +1983034 +1983052 +1983111 +1983170 +1983260 +1983288 +1983441 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983896 +1983922 +1983997 +1983999 +1984033 +7752082 +8015895 +8026858 +8262357 +11121180 +5149012 +1984734 +5149136 +5149174 +5149203 +1984942 +1984949 +1985061 +1985152 +1985158 +1985167 +1985191 +1985192 +1985230 +1985522 +1985707 +6133659 +1985926 +1985993 +1986009 +1986032 +1986052 +1986054 +1986056 +1986061 +5734345 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986508 +1986522 +1986575 +1986623 +1986779 +1986787 +1986936 +5149308 +5149315 +6133614 +1987204 +5768880 +1987362 +1987377 +1987527 +1987629 +1987665 +1987737 +1987740 +1987744 +1987766 +1987767 +1987775 +1987776 +1987786 +1987787 +6133591 +4524221 +11650277 +6133534 +11190148 +1988002 +5734451 +1988225 +1988257 +1988306 +1988420 +1988487 +1988593 +1988642 +1988684 +8388883 +5149414 +5149438 +1988881 +5734528 +6133644 +1989355 +1989393 +1989428 +1989942 +1990043 +1990050 +1990066 +1990088 +1990105 +1990150 +5734390 +1990551 +1990582 +1991123 +1991179 +6133501 +5149609 +1991277 +1991310 +1991371 +1991378 +1991779 +1991783 +5149836 +5149843 +10155932 +11098546 +11869776 +1991945 +5734515 +11635419 +1992066 +5149929 +5149986 +6133619 +5734398 +5880512 +5880533 +5880539 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9442902 +4524740 +7990739 +4523560 +4523564 +4524054 +4524998 +4524376 +4524822 +11828714 +4524712 +10422582 +10574156 +4523522 +5880392 +6133595 +6133596 +6133597 +4524070 +4524072 +4524403 +4524951 +4524955 +4524962 +10530208 +11555221 +4525078 +6133667 +6133670 +6133673 +6133674 +6133675 +7346249 +9220953 +9249651 +6133637 +6133620 +6133519 +11780161 +6133604 +6133607 +10629052 +7346237 +6133520 +6133562 +5734379 +11548960 +7345819 +6133523 +6133525 +6133528 +6133542 +6133497 +6133498 +10477629 +6133575 +6133517 +6133586 +6133635 +10175639 +9932090 +7346256 +7345829 +11652557 +5734535 +7345801 +5734362 +5880478 +6133540 +10755716 +5144190 +5146412 +5734482 +5149499 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149746 +5149768 +5149780 +5149819 +5734422 +7443518 +5146303 +5146342 +5146379 +1991462 +1991466 +4302268 +4524393 +10773498 +1942378 +1942383 +1942697 +1942808 +4689929 +5141677 +1942878 +1943212 +1943223 +1943236 +1943397 +8178854 +8277078 +5141795 +1943505 +1943619 +1943757 +8133678 +8273661 +1944503 +1944504 +1944591 +1944619 +1944778 +5141924 +1945066 +9050611 +1945088 +1945137 +1945143 +1945173 +1945225 +1945227 +1945569 +1945605 +1945694 +1945710 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945878 +1946051 +1946058 +5142067 +1946432 +7346354 +1946695 +1946738 +7389824 +1946917 +1947306 +1947335 +1947385 +1947409 +1947449 +1947456 +1947492 +1947626 +1947673 +1947703 +1947727 +1947740 +1947753 +1947765 +5734665 +1947805 +1947846 +1948062 +1948073 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949419 +7346351 +8828146 +9068968 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1950006 +5142394 +5142499 +5142599 +8109173 +1950013 +7346356 +1950171 +1950362 +1950521 +1950879 +5977257 +8270406 +7633472 +5142725 +5142729 +5142730 +5142006 +5142032 +5142042 +1869467 +1869478 +1869489 +1869512 +1952878 +1952883 +1952909 +9359597 +9400895 +10744228 +1800191 +5109821 +1758613 +9355953 +5108419 +1758874 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +1759177 +1759407 +1759620 +1759661 +1759667 +1759668 +1759686 +10329023 +1760104 +1760593 +1760620 +1794361 +4534225 +1760891 +1760893 +4533255 +1760939 +1760943 +1761041 +1761392 +1761438 +1761735 +1761778 +1761865 +1762244 +6132749 +1762608 +1762657 +6132957 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109661 +5109670 +5109722 +1763610 +1763727 +1763741 +1764716 +1764791 +1765010 +1765011 +1765017 +1765038 +1765044 +4534245 +4534257 +5109830 +5109843 +5109848 +5109855 +5109872 +5109882 +5109898 +5109943 +8352161 +1765658 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766410 +7895336 +1766646 +1766741 +1766773 +1766910 +11034779 +1767134 +1767368 +1767393 +1767511 +1767597 +1767608 +1767625 +10575632 +1767655 +5110120 +5734744 +5772169 +5772172 +5772176 +5772178 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +5802396 +5883914 +5883925 +6132943 +7345742 +7388922 +8045644 +1768117 +5110200 +1768341 +5110213 +1768568 +1768698 +1768702 +1768749 +1768771 +1768815 +1768819 +5110256 +5110258 +8150836 +1769057 +1769095 +1769194 +1769505 +1769519 +1769543 +1769566 +1769958 +1769978 +1770150 +1770172 +1770307 +1770461 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +1771555 +1771997 +1772013 +1772094 +6133806 +1772169 +1772179 +5772129 +1772940 +1772956 +1772977 +1773163 +1773328 +1773484 +1773572 +1774272 +1774347 +1774797 +4301304 +6115946 +1775112 +4534046 +4534052 +4534057 +5110593 +5772269 +4534719 +1775962 +1775963 +1776067 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +6132861 +4534463 +1777253 +5110818 +5110871 +5110885 +1778074 +4534299 +1778109 +1778127 +1778143 +1778596 +5111501 +5111513 +5111535 +5111574 +5772222 +8253467 +1779258 +1779435 +1779633 +1779641 +1779690 +1780378 +1781016 +4533325 +1781233 +1781234 +5111974 +5111980 +1781694 +1781803 +1781841 +1782168 +1782177 +1782319 +1782341 +1782354 +1782457 +11763567 +1782543 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782757 +1782763 +1782777 +1782803 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +6133026 +5112155 +5112160 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5734845 +5772349 +5772351 +8043500 +1783855 +1783861 +1783971 +1784349 +1784359 +1784513 +1784761 +1784812 +1784826 +1784853 +4534290 +1785145 +1785162 +1785181 +1785185 +1785286 +4532886 +4532888 +4532890 +1785314 +1785322 +1785329 +1785367 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786448 +1786452 +1786515 +1786573 +1786619 +1786651 +1786664 +1786902 +1787112 +1787213 +1787267 +1787367 +1787373 +1787381 +4687681 +9268082 +1787400 +1787417 +1787504 +1787506 +1787590 +1787610 +1787631 +1787751 +1787770 +1787825 +1787841 +4534086 +1788425 +1788522 +9216200 +4534011 +1788846 +1788856 +1788917 +1789071 +1789076 +1789086 +1789267 +4533924 +1789553 +1789580 +4534162 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789849 +1789957 +1789982 +1790002 +1790062 +1790072 +1790084 +4533115 +8047343 +1790361 +1790364 +1790376 +9174377 +1790625 +1791384 +1791422 +1791784 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +10684776 +5113370 +1792996 +1793238 +1793243 +1793246 +7918000 +1793689 +1793877 +1793986 +1794590 +1795065 +1795068 +4532908 +6133011 +1795215 +1795282 +7869346 +7922810 +1795854 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4688169 +4688172 +1796423 +1796463 +8105817 +1796678 +1797030 +1797735 +1798060 +4533431 +4533433 +4533444 +4533446 +6133001 +6133002 +6133006 +6133007 +6133010 +1798090 +1798372 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +5113951 +1799695 +1799701 +1799799 +1800004 +1800032 +1800149 +9536457 +6097260 +8742426 +4534389 +4534207 +10638451 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4532269 +4533123 +4533125 +4533128 +4533136 +4533661 +4534408 +4534458 +4534533 +6132989 +6132762 +6133075 +5883985 +6132781 +8021109 +11478679 +11311045 +5110644 +6132797 +1779334 +5114198 +1763072 +5109385 +5772063 +9038042 +8491927 +4534675 +4534681 +4534683 +4534685 +4534686 +1792555 +8108800 +1771634 +1771650 +1771678 +1771698 +1770821 +1770869 +1770880 +1771040 +1771169 +1771214 +1771245 +4533714 +6132931 +7940536 +10841562 +5113847 +5113853 +5772309 +5108671 +5108705 +5108724 +5108737 +5108752 +5108761 +5108787 +5108794 +5108796 +5734817 +6132880 +9243764 +4534525 +1773901 +1773904 +1759394 +1789512 +4533347 +4533360 +10933525 +5110282 +11566649 +11615549 +11731155 +4532203 +4532206 +4532208 +4532239 +4532253 +4532260 +4532266 +6115772 +6115820 +6115822 +6115830 +8103163 +1782249 +1782273 +1782279 +1782289 +10063383 +1767293 +9325654 +10458175 +10683012 +10702885 +1822346 +1822487 +1822490 +1822493 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1822848 +1822852 +1823294 +1823444 +6133742 +1823573 +5118565 +7346263 +6133720 +1823706 +10996761 +1823726 +5118582 +1824242 +5734235 +6133692 +7875265 +1824330 +1824338 +1824354 +1824390 +1824666 +1824751 +1824766 +1824845 +1824997 +1825064 +5118859 +1825077 +1825082 +1825083 +4534909 +4534914 +1825156 +1825176 +1825336 +7346284 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +5118974 +5118978 +1825786 +7345777 +1825920 +1825967 +1825971 +1825983 +1826022 +1826033 +1826108 +1826129 +11322712 +5118996 +5119000 +6133700 +10510959 +11059353 +6133750 +1827125 +5119143 +1827349 +1827408 +1827414 +1827484 +4534869 +6133691 +9883140 +5119181 +5119211 +5119223 +5119239 +5119245 +1827645 +1827649 +1827650 +1827687 +1827711 +11435704 +1828162 +1828180 +4534872 +6201790 +7346286 +6133680 +6133681 +6133684 +6133687 +6133688 +7346276 +9921001 +5118837 +5118841 +7346271 +7346273 +9486293 +1822502 +5806166 +11464595 +1892821 +5127867 +5127893 +5127932 +5127955 +7346346 +9963153 +1893137 +1893266 +1893329 +12106975 +1893546 +1893612 +1893793 +1893923 +1893951 +4704279 +8832485 +8982591 +1894002 +1894012 +1894164 +1894268 +5882039 +5128161 +5128182 +7712938 +1894714 +4535614 +4535630 +4535632 +4535636 +8049830 +10639484 +1894840 +4535827 +1895037 +4535809 +4535817 +1895159 +5128323 +5128326 +5128353 +5128357 +9804158 +1895499 +1895609 +1895667 +1895867 +1895875 +1895956 +1895992 +1896061 +1896105 +1896141 +1896152 +1896304 +5128519 +1896841 +1896915 +1896922 +1897664 +1897685 +1897747 +1897817 +1898250 +1898286 +4299368 +5129293 +7346344 +1898434 +1898441 +1898521 +1898544 +5129378 +5129417 +1898946 +1898970 +1898988 +1899950 +1900093 +1900890 +1900897 +1901213 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901832 +1901850 +5130369 +5130444 +5130464 +5130471 +5130476 +5130521 +5130542 +1902533 +1902543 +1902560 +1902568 +1902572 +1902586 +1902749 +8140883 +8189761 +4535689 +10577473 +5130775 +5130813 +5130814 +5130851 +5130904 +5130908 +5130944 +1904272 +1904701 +1904719 +1904887 +1904938 +1904943 +1904948 +1904996 +1905079 +6221746 +1905383 +1905396 +1906552 +8208583 +1907436 +1907498 +1907511 +1907534 +1907541 +1907547 +1907580 +1907620 +1907625 +1907687 +4535754 +1908352 +1908367 +1908660 +1908702 +1908840 +1908863 +1908871 +1908929 +1909123 +1909216 +7346301 +8978362 +1909281 +1909319 +10656625 +1909398 +1909607 +1909659 +1909810 +1909838 +1909854 +1909865 +1910706 +6133858 +1910809 +1911093 +1911112 +1911168 +1911198 +1911278 +1911298 +1911461 +1911503 +7728366 +5133687 +5133689 +1911633 +4535592 +1911736 +7809779 +8078362 +5133693 +5133695 +1912325 +1912372 +1912428 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133990 +5772890 +7428726 +4535581 +5134098 +8312017 +1913105 +1913175 +1913178 +1913328 +5134469 +5134517 +5134559 +5134661 +5134667 +5134682 +5134693 +5134810 +5135026 +5135191 +5135355 +5714507 +7738295 +8233062 +8314088 +9915028 +9967126 +1915079 +1915080 +1915140 +1915154 +1915262 +1915325 +11516142 +11535847 +1916410 +1916412 +1916509 +7854318 +1916758 +5136594 +5136681 +5136713 +5136752 +5136939 +5137085 +5137166 +1918321 +1918394 +1918406 +1918408 +1918411 +1918416 +1918467 +1918495 +1918497 +1918509 +1918533 +1918553 +1918554 +1918627 +1918669 +1918733 +1918843 +1918854 +1918868 +8035998 +8176911 +4535618 +4535510 +10000384 +10043827 +5130587 +5130682 +7762841 +5131096 +5131142 +5131192 +5131293 +5131339 +5131443 +5131467 +5131495 +5131520 +5131555 +5131585 +5131593 +10228568 +10277877 +10508423 +11425145 +5132154 +5132183 +5132191 +5132238 +5132479 +7346328 +7346335 +8001799 +5806167 +7642610 +5135513 +11525418 +5128644 +5129000 +10201273 +5131910 +5881551 +8138711 +8549720 +1910628 +1910629 +1910662 +1902143 +1902182 +1899349 +1899433 +1899818 +5129913 +7768674 +7934873 +8168644 +8393082 +1914701 +1914708 +1914734 +1914749 +7346340 +1918584 +1951370 +1951412 +1951462 +1951505 +1951507 +1951522 +1951529 +1951542 +1951557 +5142870 +1951631 +9512631 +1951649 +1951671 +1951675 +1951747 +9156165 +1951791 +5734305 +1951818 +1951840 +1951844 +1951859 +1951881 +5734326 +1951919 +1952014 +1952034 +1952052 +1952062 +1952147 +1952175 +1952177 +1952229 +5142948 +1952281 +5143007 +5143048 +5143049 +5143076 +5143080 +1952449 +1952481 +1952532 +10782264 +1952551 +1952611 +1952685 +5143116 +5143129 +5143147 +1952806 +1952857 +1951713 +9502606 +5885428 +8604089 +1832819 +1832853 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +4529248 +1868211 +1868409 +4702564 +1868499 +6544581 +1868470 +5141581 +5141590 +1735121 +1941864 +5120465 +5120577 +5120668 +5120675 +5121177 +5121517 +5121613 +1842097 +5120396 +1842485 +1842542 +1842690 +1842695 +9755262 +1843564 +1843602 +1730519 +1730543 +8292351 +5101394 +1730948 +1730978 +1731263 +4525641 +1731598 +10450446 +8130866 +8402212 +1872359 +1872361 +1872368 +1878626 +6133117 +1878744 +1878782 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1879125 +1879141 +1879227 +1879337 +1879339 +1879340 +1879379 +5734212 +1879408 +1879427 +1879452 +1879465 +1879471 +5126212 +5126217 +1879630 +1879731 +1879735 +1879765 +10915497 +1879970 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +5126635 +5126637 +1880353 +1880451 +1880464 +1880465 +9524458 +6133225 +1880852 +1880858 +1880907 +1880931 +1880968 +1881089 +1881121 +1881126 +1881151 +9819403 +4531687 +1881208 +1881293 +1881329 +1881336 +1881515 +4531713 +1881834 +4531975 +1881964 +1882021 +1882158 +1882210 +1882253 +1882266 +1882272 +1882437 +1882459 +1882557 +1882729 +5126834 +1882753 +1882767 +1882884 +1882901 +1882905 +10156181 +1882930 +1882965 +1883067 +1883161 +1883168 +1883386 +5127097 +1883873 +1883943 +1883951 +1884051 +1884061 +4531690 +1884212 +4531708 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884465 +1884479 +6120980 +1884774 +1884816 +1884835 +1884844 +1884858 +1884877 +1884890 +4532122 +1884908 +1884909 +4532146 +1884970 +1885012 +1885262 +1885263 +1885569 +1885623 +1885630 +6133181 +1885745 +1885763 +1885826 +1885836 +1885919 +1885937 +1885945 +1885994 +1886084 +1886251 +1886320 +1886362 +8223165 +1886526 +1886579 +1886587 +1886648 +1886700 +1886720 +1886726 +1886729 +7562564 +1886929 +1886951 +1887054 +1887290 +1887509 +1887586 +4531670 +1887691 +1887701 +1888027 +1888092 +4531968 +1888324 +1888346 +10922411 +1888484 +1888537 +1888579 +1888619 +1888733 +1888743 +1888759 +1888826 +1888891 +1888893 +1888906 +1888911 +1888913 +9535420 +1889039 +1889043 +1889053 +1889071 +1889074 +1889239 +1889249 +1889270 +1889272 +1889277 +1889287 +1889356 +1889358 +1889370 +1889552 +1889563 +1889905 +1889942 +1890012 +1890031 +5127521 +1890097 +1890187 +9519191 +1890287 +1890320 +1890335 +1890343 +10180624 +1890410 +1890487 +1890522 +1890534 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890724 +1890772 +1890898 +1890957 +1891059 +1891167 +1891177 +1891190 +1891326 +1891339 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +8411753 +1891533 +1891583 +1891636 +1891758 +1891889 +1892153 +1892242 +1892245 +1892476 +10141437 +11056379 +9674732 +1884255 +1884273 +1884280 +1884312 +1884332 +1884370 +1884403 +5884851 +6133139 +6133141 +5771877 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10513366 +10397209 +6133154 +10959264 +6133158 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +1886374 +1889716 +1889765 +1889833 +5127592 +5127609 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127688 +5127698 +5802339 +1887108 +1887125 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +6121184 +1888638 +1883885 +4532150 +4532160 +5771880 +10410699 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528818 +1939597 +1830879 +1830937 +1830962 +1831002 +1831009 +1831136 +1831168 +4708183 +1853587 +4526048 +1854202 +1854347 +5122430 +5122439 +1854792 +1854824 +1854849 +4526050 +7717983 +1858637 +1858674 +1858698 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +1859305 +9760511 +1859453 +1859471 +1859480 +9749806 +6133397 +1859932 +1859952 +1860026 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +1865593 +10014340 +1865650 +1865659 +1865660 +1865666 +1865671 +9914882 +9972403 +1865930 +1866237 +5734291 +1866356 +6106943 +1866491 +1866530 +1866549 +1866556 +1866568 +5124880 +5124911 +10047346 +1867820 +1867928 +8439879 +9983244 +1867991 +1867993 +11643393 +11670751 +11729388 +5124716 +7734292 +5120278 +1841813 +1841946 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861510 +1861644 +1861663 +1861665 +1861673 +1861697 +1861705 +1861714 +1861721 +1861797 +1861842 +1861862 +5123674 +1861933 +1861936 +1861937 +1861938 +1861949 +1861951 +6106744 +1861975 +1862008 +1862061 +1862066 +1862072 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +10374414 +11907754 +1862430 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +5123707 +5123709 +1862572 +1862578 +1862580 +1862701 +1862719 +1862765 +1862774 +1862837 +1863034 +5123922 +5734719 +1863354 +1863394 +1863467 +1863646 +5124007 +5124029 +9310369 +1863829 +1863848 +1863909 +1863910 +1863924 +1863944 +9578319 +1864126 +1864135 +1864161 +8133328 +1864358 +1864377 +5124121 +5124143 +5124233 +11738734 +11954157 +1864652 +5124300 +5124304 +5124305 +5124332 +5124348 +5124374 +5124415 +5124433 +1864793 +1864796 +5734713 +5885399 +6099041 +6106759 +7346401 +10193618 +6106647 +5123815 +5123837 +5123870 +5123876 +5123889 +5123890 +8810912 +10189661 +10191275 +10436020 +1992634 +1992883 +10842838 +10994020 +1993036 +1993043 +1993419 +6133769 +1993637 +1939432 +1953196 +1953326 +1953356 +6132711 +6132712 +6132715 +1953407 +1953423 +1953729 +11467944 +6132725 +6132726 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1860108 +5119513 +1830099 +1830372 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +1830632 +1830802 +4525364 +1754135 +5105642 +1754332 +1754368 +1754380 +1754400 +1754465 +1754511 +1754516 +1754535 +11737872 +12075408 +11175615 +1754902 +1754919 +1754933 +1755131 +5734138 +1755237 +1755248 +1755253 +1755276 +5106115 +5106160 +5106249 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7674502 +7778368 +7903078 +7955974 +8158342 +8201251 +8426357 +1757652 +5108318 +5108334 +11140464 +11860016 +1757853 +5108346 +5108349 +8964772 +4522753 +9004359 +1939658 +1939677 +1939680 +1939688 +7646066 +1829322 +1829363 +1855630 +1855747 +8734090 +1856005 +1856289 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1856971 +1857258 +1857267 +1857380 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857938 +1857978 +1858074 +1858100 +1858113 +1858163 +1858283 +1858321 +8178453 +1858557 +1937707 +1937723 +1937754 +1937819 +1937826 +1937892 +1937911 +1938007 +1938052 +1938058 +1938069 +1938088 +1938114 +1938162 +1938168 +1938174 +4692485 +4692504 +4693382 +5734569 +8225376 +1936988 +1936993 +5141144 +5141163 +5141177 +5141179 +5141185 +5141187 +5141199 +5141212 +5141215 +5141226 +5141229 +5141233 +5141242 +5141254 +5803065 +1937474 +1937490 +10761559 +1937556 +1937566 +1937570 +1937580 +1937582 +1937594 +1937613 +1938214 +1938226 +1938230 +1938233 +1938300 +1938520 +1938612 +1938796 +1938810 +1938955 +1939056 +1939086 +1939168 +5141311 +5141317 +5141262 +1858531 +1838691 +1838905 +1838911 +4528692 +4528694 +1833500 +8546322 +8574752 +1835031 +1835098 +1835156 +1835393 +1835396 +1837172 +1838969 +1839560 +1839770 +1839851 +1839893 +5770922 +5770942 +4529032 +5119893 +12188993 +1800238 +10213314 +6133777 +1800528 +1800539 +10737993 +1800572 +1800686 +1800696 +1800821 +5114394 +5114400 +11873966 +4534798 +9544823 +1800881 +5114425 +1800934 +6133780 +1801000 +1801001 +1801051 +1801073 +1801080 +1801084 +1801170 +1801196 +5114465 +1801461 +1801490 +1801503 +10066605 +10510325 +1801896 +4534779 +4534782 +4534792 +6112606 +6112613 +6112661 +6133809 +6133811 +6133813 +6133814 +1801993 +1802090 +8883183 +1802113 +1802120 +1802229 +1802244 +1802280 +1802337 +1802702 +1802783 +1802827 +1802919 +1802939 +1803012 +1803022 +1803025 +1803035 +1803039 +1803065 +1803073 +1803078 +1803108 +10942408 +4534762 +4534767 +6133803 +5114311 +5114327 +8244266 +10987178 diff --git a/dev/releases/mambo_v3/presets/japan.classes b/dev/releases/mambo_v3/presets/japan.classes new file mode 100644 index 0000000..651b18b --- /dev/null +++ b/dev/releases/mambo_v3/presets/japan.classes @@ -0,0 +1,974 @@ +1992315 +1732565 +1733154 +1733258 +1733412 +5101745 +1734453 +1734519 +5102287 +1832235 +1847097 +1847111 +1847392 +5122013 +1850570 +1851543 +1829659 +8503184 +1831458 +1831631 +9379855 +10679326 +12199936 +1759775 +1760927 +1760970 +1761353 +1762151 +1763782 +1763812 +1763976 +1764021 +1764032 +1764060 +1764531 +1766260 +1766570 +11097510 +5110232 +10820762 +1769103 +1769410 +1769772 +12148290 +1769897 +1769901 +6132967 +1775148 +5110546 +5110765 +5110769 +1777166 +1777695 +6132953 +4687991 +5111007 +5111044 +9610080 +1780705 +1780716 +1783652 +5112500 +6132974 +1787009 +10860091 +6132805 +1788553 +6132936 +6132826 +1788953 +1789225 +1789604 +1790888 +1791010 +1791698 +1791715 +5113082 +5113084 +5113330 +5113352 +5113385 +5884243 +5113925 +1796984 +10600368 +1797258 +1797259 +1797299 +1797479 +4532471 +8756768 +9332506 +5113950 +5884247 +1798346 +1798449 +1798488 +1787072 +1787079 +1798700 +1798823 +1798868 +4301310 +4532352 +6133046 +1799417 +1799751 +6132825 +10722110 +1803148 +1803824 +1805044 +5115167 +1808286 +9219266 +1808752 +5115771 +5116412 +12176559 +1813114 +1813263 +1814913 +1814928 +5117400 +1815260 +1816299 +1816362 +1817797 +1818413 +8326103 +1818991 +4532293 +6134023 +7346384 +1819268 +8407461 +5118348 +7657803 +1820372 +1820406 +1820450 +9420824 +1821260 +12037602 +5884571 +8897869 +4532516 +6133081 +6133083 +12089608 +10270464 +9400545 +6133292 +11142432 +11962292 +10399906 +6133271 +11232431 +8831819 +5115874 +10178326 +10907635 +10982648 +8874633 +9508913 +1783898 +1783906 +1781413 +1781421 +9478424 +6115388 +1774583 +1774598 +1774618 +1774626 +1774654 +4532508 +1768461 +5113036 +5109796 +1821934 +1821940 +6122364 +1783725 +8237987 +4687933 +6116646 +1781531 +1798329 +1784947 +1785072 +1765999 +1786597 +5884188 +6132915 +6132916 +1782310 +5108435 +5112440 +1860987 +9883856 +1939510 +1939520 +1860261 +1860274 +5123339 +5769164 +5880040 +5123489 +1869706 +1870237 +1870249 +4531402 +1872848 +1872850 +1872901 +1873079 +5125569 +5125596 +5125633 +1874274 +1874937 +1875120 +1875830 +1877038 +6133441 +1748805 +1736358 +1736499 +1736727 +1736993 +1737015 +10842267 +1738192 +8086347 +5102982 +1740482 +1740524 +1740797 +1741368 +5103451 +5103998 +1743532 +1743856 +1745952 +1746775 +1746876 +5771229 +1920851 +1920996 +10581870 +1921150 +1921163 +7346430 +1922244 +8782891 +5714680 +1924044 +1924057 +1924193 +1924298 +1924713 +4535172 +1925918 +1926324 +1926448 +5883255 +1927034 +5883052 +1927393 +5882965 +1928248 +5139050 +1928849 +1928908 +1929697 +1931132 +1931561 +7346434 +1931706 +1931956 +1932043 +1932159 +4708995 +7346444 +1933844 +1752603 +1752849 +1753215 +5105547 +5105560 +1753435 +11014495 +1753636 +5105588 +7345843 +6133481 +1919340 +1919712 +1919720 +1919951 +5137808 +5137832 +5137849 +5805954 +5137861 +1920496 +5137889 +5137908 +5137912 +5137949 +1920711 +5137582 +5803588 +1920218 +1749596 +1731837 +1992547 +11826016 +1954496 +5143477 +1954891 +1956309 +1956524 +1956536 +1956629 +6133593 +1957368 +1957854 +1958252 +1958454 +5144027 +1959645 +1959876 +1959914 +1959919 +1960023 +1960181 +5144093 +1960686 +1960854 +1961052 +1961162 +7346236 +1961252 +1961647 +1962265 +1964024 +6133500 +1964113 +1964247 +1964316 +8361848 +1965810 +1965913 +5144431 +5144534 +1967245 +1967445 +1967595 +1967815 +1967873 +1968147 +1968193 +7681733 +1968304 +1968363 +1968867 +6133643 +1970136 +7346252 +5144677 +5144806 +5145409 +9194811 +1972443 +1972613 +1973338 +5146434 +5146961 +5147062 +1975198 +8329661 +1975805 +1975806 +1975892 +1975897 +1975903 +1975964 +1975979 +9548993 +1976212 +1976213 +1976311 +5147827 +5147834 +1977184 +1977297 +5148115 +1977833 +1978056 +1978065 +1978422 +4524636 +4524638 +1979021 +1979473 +1979781 +1980521 +1980811 +8421569 +11173690 +1981937 +1981938 +1982267 +1982865 +1983705 +1985061 +1985152 +1985158 +1985167 +1985191 +1986009 +1986052 +1986054 +1986056 +1986508 +5149308 +1987377 +1987665 +1987776 +11650277 +1988225 +1988306 +5149414 +1989428 +1990050 +1990066 +1991123 +1991277 +1991371 +1991378 +1991783 +11635419 +5149929 +5149986 +6133619 +5880539 +9442902 +4524998 +11828714 +10574156 +5880392 +4524070 +6133670 +11548960 +7345819 +6133542 +6133498 +7345829 +5880478 +6133540 +5146412 +5146342 +5146379 +1991462 +1942697 +4689929 +1943212 +1944619 +5141924 +1945066 +1945225 +1945227 +1945694 +1945878 +5142067 +1946695 +1946738 +7389824 +1947306 +1947492 +1947626 +1947740 +1949336 +5142499 +5977257 +5142725 +1952883 +1952909 +1758874 +1758878 +7972792 +1759620 +1759667 +1759686 +10329023 +1760593 +1760939 +1761438 +1762680 +5109506 +1764791 +5109830 +5109843 +5109848 +5109872 +5109882 +5109898 +8352161 +1766130 +1766131 +1766137 +1766646 +1766741 +1767368 +1767655 +5772186 +5802396 +5883914 +1768698 +1769095 +1769505 +1769519 +1769566 +1769958 +1770150 +1770172 +1770477 +4532696 +1772179 +6115946 +1775962 +1776067 +5110871 +5110885 +1778127 +5111535 +5772222 +1779435 +1781233 +1781234 +1781694 +1782168 +1782177 +1782457 +1782543 +1782615 +1782627 +1782672 +1782726 +1782757 +5112291 +5714973 +5715004 +5772349 +1784513 +1784761 +1785145 +1785162 +4532890 +1785314 +1785367 +1785887 +1785888 +1785895 +1786017 +1786360 +1786448 +1787213 +1787267 +1787504 +1787590 +1788522 +1788846 +1788856 +1788917 +1789553 +1789957 +1790376 +9174377 +1791422 +1792292 +1792418 +1792996 +1793689 +1795065 +1795068 +4532908 +1795957 +1796117 +1796169 +4688172 +8105817 +1797030 +4533431 +6133007 +1798974 +5113951 +1799701 +1800004 +1800032 +1800149 +4534389 +6544687 +4532269 +4533123 +4534533 +6132989 +6132781 +5109385 +5772063 +4534685 +4534686 +8108800 +1771678 +1771698 +1771040 +1771214 +1771245 +5113853 +5108671 +5108705 +5108737 +5108761 +5108787 +5108794 +6132880 +9243764 +1759394 +4532208 +4532266 +6115822 +1767293 +9325654 +10458175 +1822490 +1822610 +1822613 +1822787 +1822830 +1822848 +1823294 +1824242 +1824390 +1824666 +5118859 +1825176 +1825539 +5118978 +1825786 +7345777 +1825967 +1826108 +5118996 +1827125 +1827408 +1827484 +4534869 +9883140 +5119181 +5119223 +1827649 +1827650 +11435704 +6133687 +6133688 +9921001 +5118837 +5118841 +9486293 +1893266 +1893546 +1893923 +7712938 +4535614 +4535630 +1894840 +4535827 +5128326 +1895499 +1895867 +1895875 +1895956 +1895992 +5128519 +1897664 +1897685 +4299368 +5129293 +7346344 +1898434 +1898441 +1898544 +5129378 +5129417 +1898988 +1899950 +1901399 +1901832 +5130464 +5130471 +5130476 +1902543 +1902749 +8140883 +1904948 +1905079 +6221746 +1907436 +1907498 +1907625 +1908702 +10656625 +1909398 +1909607 +1909865 +1911093 +1911168 +4299599 +7428726 +1913105 +1913328 +5134682 +5135026 +5136681 +5137085 +1918411 +1918467 +1918554 +4535510 +5130587 +5130682 +5131096 +5131142 +5131293 +5131339 +5131585 +5132183 +5806167 +7642610 +8138711 +1910629 +1910662 +1914701 +1951412 +1951462 +1951507 +1951529 +5142870 +1951791 +1952062 +1952175 +1952177 +1952229 +5143007 +5143080 +1952449 +5143147 +5885428 +4702564 +6544581 +5141590 +1843602 +1730948 +1872361 +1878626 +1879379 +1879408 +1879471 +5126635 +1880852 +1880858 +1880968 +1881121 +1881151 +1881329 +1881336 +1882253 +1882767 +1882884 +1882905 +10156181 +1882930 +1883943 +1884051 +9294363 +4532122 +1884908 +4532146 +1885012 +1885919 +1886251 +1886320 +1886726 +1886729 +1886929 +1887509 +1887691 +1887701 +1888027 +1888092 +4531968 +1888891 +1888913 +1889039 +1889074 +1889239 +1889277 +1889356 +1889370 +1890031 +1890187 +1890320 +1890410 +1890487 +1891326 +1891339 +4532022 +1891758 +1892153 +11056379 +6133141 +5771877 +4532125 +6120803 +6133232 +6121010 +10513366 +5126675 +5126680 +1886374 +1889765 +5127592 +5127609 +5127656 +5127669 +5127688 +5802339 +6121184 +1883885 +4532150 +1831136 +5122430 +1858698 +9749806 +1860026 +1973467 +1865659 +1866356 +1866568 +5124880 +8439879 +9983244 +1867993 +5124716 +1841946 +10005133 +1861456 +1861488 +1861494 +1861644 +1861665 +1861697 +5123674 +1861938 +1861949 +1862072 +5123685 +1862293 +1862363 +1862370 +1862401 +11907754 +1862430 +1862449 +1862475 +1862517 +1862578 +1862837 +1863034 +5124029 +1863829 +1863848 +1863944 +1864126 +1864377 +5124121 +5124143 +11954157 +1864652 +5124304 +5124305 +5124332 +5124348 +5124415 +5124433 +1864793 +5885399 +7346401 +5123815 +5123876 +5123890 +1992883 +6132711 +6132715 +6132726 +5143249 +5105642 +1754368 +1754535 +1754933 +1755237 +1757853 +5108346 +5108349 +1857380 +1857938 +1858557 +1937723 +1937819 +1937892 +1938052 +1938058 +1938088 +1938114 +1938162 +1938168 +4693382 +8225376 +5141212 +5141226 +5803065 +1937474 +1937490 +1937556 +1938230 +1938233 +1938612 +1938796 +1939056 +1939168 +8546322 +1839560 +1800238 +10213314 +1800528 +1800572 +1800696 +5114394 +9544823 +5114425 +1800934 +6133780 +1801080 +1801084 +1801490 +4534782 +6112661 +1802090 +1802113 +1802244 +1802280 +1802783 +1802939 +1803022 +1803065 +1803078 +1803108 +10942408 +4534767 +6133803 +5114311 +8244266 diff --git a/dev/releases/mambo_v3/presets/mediterranean.classes b/dev/releases/mambo_v3/presets/mediterranean.classes new file mode 100644 index 0000000..b51adcc --- /dev/null +++ b/dev/releases/mambo_v3/presets/mediterranean.classes @@ -0,0 +1,2874 @@ +1934693 +1860628 +4522795 +1860659 +1860664 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734690 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1847061 +1847097 +1847111 +1847407 +4528547 +1847572 +9262981 +1847956 +9546514 +1848150 +1848202 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +4528539 +1848596 +1848610 +1848636 +1848657 +1848690 +1848714 +1848741 +1848864 +1849104 +1849273 +1849294 +1849477 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849924 +1850008 +1850238 +1850246 +11576787 +1850335 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +1850781 +1851010 +5122037 +5122113 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830125 +1830131 +1830147 +1830152 +1830191 +1830207 +1830241 +1830243 +1830271 +4525476 +4525487 +1831458 +1831643 +1841296 +4528593 +5880147 +9734171 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +1772793 +4532500 +5110490 +1777289 +8141741 +1777631 +1777695 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +1792210 +1797178 +1797258 +1797276 +1797333 +1797349 +1797367 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803148 +1803163 +1803824 +1804071 +1804906 +1805110 +1805111 +1805155 +4532608 +7874258 +1807969 +1808166 +1808195 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814538 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532549 +4532516 +4532532 +4532565 +12089608 +10062933 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8038357 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +1780897 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821547 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +4687389 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522922 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835457 +9724183 +1837420 +1837429 +8015612 +1840297 +1840301 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840520 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +1831752 +1852751 +1852831 +1852832 +9473121 +4529630 +5125075 +5125104 +8416348 +1751236 +1751298 +1751368 +1751457 +4535884 +1860408 +4525177 +5123339 +5123419 +5769164 +5123461 +5123474 +1751207 +1751216 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +1872848 +1872873 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873783 +4531237 +1873890 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878370 +1878470 +1878471 +1878490 +1878500 +1878586 +5884888 +11728049 +1877035 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736425 +1736447 +1736499 +1736528 +1736560 +1736565 +1736601 +1736623 +5102628 +5102642 +5102651 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737847 +1737893 +1737924 +4530002 +8186212 +1738163 +1738222 +1738245 +1738317 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +8086347 +1739128 +1739151 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739461 +1739471 +1739605 +1739748 +1739797 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1740005 +1740053 +1740069 +1740120 +1740155 +1740174 +1740183 +1740185 +1740392 +1740482 +1740518 +1740533 +1740567 +1740623 +8094357 +1740762 +1741056 +1741147 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741667 +1741752 +1741756 +1741765 +4530424 +1741820 +11093909 +1742142 +1742185 +1742346 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +7877231 +1743532 +1743588 +1743604 +5104056 +6097235 +1743643 +1743710 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +4530632 +1744416 +1744498 +1744526 +1744588 +1744593 +1744714 +1744728 +1744731 +1744739 +1744763 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745762 +1745781 +1745816 +1745827 +1745830 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +7588222 +9242559 +1748456 +1748720 +5104641 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771243 +5771249 +5771255 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525557 +4525562 +1920851 +1920864 +1920892 +10581870 +10825466 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +1922291 +10384044 +10442031 +10854079 +9904499 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +10656713 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925609 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926546 +1926550 +1926722 +1926861 +5882965 +7680748 +1928248 +5139040 +5139156 +1928754 +1928945 +1928960 +1929270 +1929402 +1929659 +1929697 +5139339 +5792092 +8356768 +1930110 +1930904 +1930916 +4535106 +1931126 +1931179 +1931509 +1931779 +1931788 +1932172 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +4535162 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933647 +1933649 +1933793 +1926166 +1926260 +10879371 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919181 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535280 +4535285 +7981372 +1919346 +1919698 +1919703 +1919706 +1919712 +1919716 +1919966 +1920237 +1920247 +1920258 +1920259 +5137790 +1920357 +1920359 +1920369 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5805036 +5137902 +5137903 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137612 +5137682 +5137695 +5137706 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749449 +1749661 +1749713 +1749744 +1749869 +1749921 +1749929 +1749936 +1749948 +1749954 +1749975 +1750051 +1750076 +1750131 +1750143 +1750159 +1750326 +5104829 +5104882 +5104891 +5104903 +5104940 +5105088 +5105106 +1751051 +5104759 +1749596 +1749635 +8741260 +1735532 +4527339 +1731860 +1855235 +1954490 +1954563 +5143380 +5143453 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956897 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960002 +1960484 +1960617 +1961013 +1961037 +1961040 +1961068 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965825 +1965841 +1965913 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967324 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +5145842 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146528 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146894 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1976993 +1977003 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982533 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +7993353 +8015895 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +4524223 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +6133619 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4525034 +4524376 +4524822 +4524712 +4523522 +4522974 +4524541 +4523519 +4524070 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149664 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945589 +1945877 +1946661 +7389824 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +5142394 +5142599 +7683096 +8109173 +5977247 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +5142042 +1869467 +1869478 +1869512 +5769709 +1735855 +9530977 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759661 +1759667 +1759668 +1759673 +5108619 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762383 +1762608 +1762680 +5109498 +5109506 +5109523 +5109599 +5109614 +5109646 +5109661 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764716 +1764986 +1764987 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534250 +4534252 +4534257 +4534275 +5109843 +5109855 +5109882 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +9356770 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +7725644 +1771509 +1771531 +4532986 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1773062 +1773163 +1773231 +1773328 +1773377 +1773484 +1773572 +8222049 +1774272 +1774347 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784349 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785181 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786017 +8292872 +1786360 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787381 +1787400 +1787417 +1787438 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792645 +1792768 +1792996 +1793212 +7918000 +1793877 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +9803522 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +6544687 +4534538 +4534360 +4532269 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +6116899 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +11819666 +4532203 +4532206 +4532216 +4532236 +4532239 +4532253 +4532260 +4532264 +4532266 +8103163 +1767302 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824117 +1824121 +1824131 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894268 +7712938 +1894714 +4535614 +4535627 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +6231906 +1896841 +1896915 +1897852 +1898286 +1898290 +4299368 +4299370 +7346344 +1898521 +1898544 +5129378 +1900565 +1901850 +5130464 +5130542 +1902533 +1902749 +8140883 +8189761 +4535689 +5130814 +6221746 +1905383 +1906552 +8208583 +4535754 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911300 +1911461 +7728366 +8396242 +1911633 +4535592 +4535596 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299597 +5133990 +5772890 +7428726 +7799370 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134682 +5134686 +5134815 +5134837 +5134884 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916376 +1916410 +1916412 +1916458 +1916554 +7854318 +1918632 +1918667 +1918669 +1918688 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +4535539 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +5133088 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1910628 +1902143 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +5129913 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832853 +1833096 +6097228 +1853064 +1853079 +4529248 +5976910 +1735193 +1941864 +5120465 +5120577 +5120675 +5121040 +5121177 +5121613 +1842097 +5120396 +1842485 +1842508 +1842542 +4301036 +1842690 +1842695 +4529738 +1843602 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879443 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +1879970 +1880064 +1880094 +1880104 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +5126834 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +1884212 +4531708 +1884449 +1884465 +1884774 +4532122 +4532146 +1884970 +1885764 +1885931 +1885937 +1886084 +1886251 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +1888346 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888743 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +1890187 +1890335 +1890346 +1890487 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891129 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +5771877 +11761541 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +1889833 +5127656 +1887108 +1887173 +1887177 +1887178 +4532057 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +1830879 +1830937 +1831002 +1831009 +1831128 +1831136 +1831168 +5122293 +4526048 +1854202 +1854259 +1854347 +5122439 +1854615 +1854824 +1854849 +1854237 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858778 +1858873 +1858930 +1859046 +1859177 +1859285 +1859305 +1859932 +1860026 +1860063 +4536472 +7642240 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5123042 +5124512 +1866356 +1866556 +1866568 +5124911 +1867820 +1867928 +7764232 +5124716 +7734292 +1841460 +1841476 +1841616 +1841706 +1841813 +1841821 +1841946 +1841989 +1861494 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830372 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525425 +7976145 +1830534 +1830584 +1830632 +1830802 +4525364 +1754183 +5105642 +1754332 +5105929 +5106115 +5106249 +5106539 +5106894 +5107076 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856595 +1856620 +1856658 +1856663 +1856668 +1856686 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +9790007 +1857785 +1857828 +1857829 +1857863 +1857878 +1858074 +1858113 +1858163 +1858283 +1858321 +8178453 +1937723 +1938050 +1938069 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5141305 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1835422 +1836899 +1837172 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +4529032 +5119893 +5114409 +4534796 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +1803108 +9485481 +4534762 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/middle_east.classes b/dev/releases/mambo_v3/presets/middle_east.classes new file mode 100644 index 0000000..a9a3860 --- /dev/null +++ b/dev/releases/mambo_v3/presets/middle_east.classes @@ -0,0 +1,1330 @@ +1934693 +4522933 +1732115 +1732452 +1732565 +1732662 +1733484 +5101678 +5101717 +5101745 +5769191 +1734690 +1734704 +5102287 +1831890 +1845270 +1845368 +1845548 +1845607 +4528100 +1847097 +9546514 +1848219 +9868978 +1848378 +1848690 +1849477 +11052757 +1850640 +1850781 +1852165 +11287091 +6097236 +8871600 +1845866 +1845962 +1839094 +1841261 +1830131 +1830191 +1831458 +1841296 +1761111 +1762151 +1764531 +1766584 +6116699 +1769103 +1769897 +7701550 +8837162 +1772352 +4532500 +5110490 +1777289 +1777631 +1779399 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +1791715 +5113078 +5113084 +5113234 +1792210 +1797178 +1797258 +1797276 +1797333 +1797349 +1797367 +1797429 +1797454 +1797479 +1797527 +4532461 +4532473 +8016905 +8756768 +6117055 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798802 +1798807 +4532351 +4532352 +1803148 +1803163 +1804071 +1805111 +7874258 +1807969 +1808166 +1808195 +1808381 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +1813114 +5117200 +7656811 +1814538 +1814653 +1814913 +1814928 +5117400 +1816881 +1817797 +1819050 +1819145 +8407461 +1819928 +6122092 +1820372 +1820406 +1820477 +12253343 +5884571 +7596232 +6097214 +4532544 +4532516 +4532532 +4532565 +12089608 +10062933 +8148822 +11962292 +10399906 +6112449 +12135372 +5115874 +5116475 +6097254 +5116698 +1788635 +4532412 +8000103 +4532534 +6115388 +1774600 +1768626 +4532508 +1760246 +5113030 +1821547 +1821856 +1819337 +1804182 +1815315 +1812394 +8237987 +4687933 +4532453 +1820039 +4687389 +1772822 +1777517 +1860987 +1860994 +1861031 +4522890 +1860765 +1860857 +1992504 +1840371 +1840581 +1831752 +1852832 +5125075 +5123339 +5123419 +5123461 +5123474 +1869595 +1869976 +1870249 +1870250 +1870450 +1870650 +5125306 +1871212 +1871252 +1871407 +4531402 +4531409 +1871451 +1871783 +4531427 +7673242 +1872848 +1872901 +1873051 +1873079 +1873215 +4530951 +1873783 +4531237 +1873890 +5125689 +1874168 +1874269 +1874280 +4531147 +1875008 +1875120 +1875409 +1875687 +1875827 +1875869 +1875918 +1875958 +1876329 +1876512 +1876542 +1877345 +9111961 +5126052 +1877941 +1877988 +1878067 +4531417 +1878350 +1878470 +1878471 +1878490 +1878500 +5884888 +1871504 +4525884 +5141493 +1940510 +1940644 +1940717 +1940744 +4525777 +4525803 +1940838 +4525846 +12211069 +1939879 +1736601 +1736623 +1737368 +1737413 +1737437 +1737491 +1737497 +1737524 +1737526 +1737775 +1737776 +1737847 +8186212 +1738373 +1738422 +5102931 +5102951 +1739151 +1739748 +1739833 +1739922 +1740120 +1740623 +8094357 +1740797 +1741056 +1741258 +1741341 +4530151 +1742185 +8313553 +11846897 +1743532 +6097235 +1743768 +1743898 +4530632 +1744526 +1745013 +1745561 +1745630 +1745781 +1745925 +1746413 +1746440 +1746666 +1746832 +1746876 +5104442 +5104597 +1831780 +4525510 +1920851 +1920864 +1920892 +1921044 +7346426 +10581870 +10825466 +1921150 +10556522 +1921466 +7387466 +1922244 +1922288 +10384044 +10442031 +9904499 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922689 +1922701 +1923019 +5138298 +5138543 +5138561 +5714680 +1923650 +1924077 +1924097 +5138681 +10656713 +1924390 +1924713 +1925221 +1925233 +1925381 +1925454 +1925609 +1925918 +1925962 +9816676 +1926324 +1926436 +1926448 +1926530 +1926546 +1926550 +10606547 +1926722 +1926861 +5882965 +7680748 +1928248 +5139040 +5139050 +5139156 +5139201 +1928754 +1928960 +1929270 +1929402 +1929659 +1929697 +5139339 +8356768 +1930110 +1930904 +1930916 +1930935 +4535106 +1931179 +1931509 +1931779 +1932166 +1932172 +4708995 +1932411 +1932752 +1932976 +5806412 +4535162 +5140214 +5140244 +5140436 +5140443 +7634721 +7664111 +1933583 +1933647 +1933649 +1933793 +1934192 +1926260 +10879371 +11874998 +1933095 +1933138 +1924494 +4522322 +5105339 +1919181 +1919213 +1919221 +1919223 +1919320 +1919333 +1919340 +1919346 +1919348 +1919706 +1919712 +1919716 +1919966 +5137748 +1920181 +1920237 +1920247 +1920258 +1920259 +5137790 +5137849 +5137850 +1920348 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +1920395 +1920401 +1920405 +1920491 +1920496 +1920502 +1920506 +1920512 +4535307 +5137891 +5805036 +5137902 +5137903 +1920707 +1920709 +1920712 +5137578 +5137605 +5137612 +5137663 +5137682 +5137706 +8203812 +1920218 +7207679 +1750326 +1954490 +1954563 +5143380 +5143651 +1955552 +1955694 +1955856 +5143675 +1956440 +1956524 +4525068 +1957266 +1957300 +1957570 +1957572 +1957579 +1957583 +1957611 +1957706 +1957718 +1957746 +1957791 +1957816 +1957852 +4524421 +4524424 +1958323 +1958515 +1959383 +1959395 +1959461 +1959682 +1959735 +1959914 +1960002 +1960484 +1960617 +1961013 +1961037 +1961040 +1962204 +1962265 +1962268 +1962516 +1962584 +1962636 +1962860 +4302252 +1963168 +1963306 +1963709 +1963710 +1964189 +1964191 +1964195 +1964471 +1964637 +1964653 +1965197 +1965208 +1965841 +1965913 +5144534 +1967003 +1967006 +1967011 +5144543 +1967265 +1967815 +1967873 +7681733 +1968837 +1968867 +11598540 +1968990 +1969463 +1969581 +1970213 +1970227 +1970243 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145186 +5145255 +5145260 +5145502 +5145522 +5145624 +8014296 +1971847 +1972185 +1972250 +1972342 +1972449 +5146476 +5146599 +5146601 +5146611 +5146677 +5146762 +5146833 +5146837 +5146894 +5146946 +5147030 +5147043 +5147058 +5147062 +5147150 +5147171 +5147208 +5147232 +5147319 +5147354 +5147415 +5147441 +5147478 +5147492 +5147516 +8366158 +1975546 +8329661 +8160782 +1975892 +1975897 +5147681 +1977068 +4523725 +1977962 +4524636 +4524638 +1978776 +5148436 +5148487 +1980521 +1981998 +1982500 +1982541 +1982790 +1983034 +1983052 +1983393 +1983525 +1983648 +1984033 +1984117 +1984734 +1984942 +1985167 +1985573 +1985760 +1986157 +1986171 +1986220 +1986508 +1986575 +5768880 +9137631 +6118530 +1987744 +4524221 +1989428 +1990582 +5149474 +1991179 +1991371 +5149843 +1992066 +5880533 +5880545 +5880550 +5880563 +5769062 +7429212 +9414984 +1989594 +7990739 +4524054 +4523461 +4524998 +4525034 +4524376 +4524712 +4523522 +4523519 +4524403 +4524951 +4525078 +9220953 +9249651 +5149659 +5149665 +5149768 +5149784 +5149787 +7443518 +1942769 +1942790 +4689929 +5141677 +1943212 +1943223 +1943236 +1943397 +8178854 +8277078 +8073674 +8273661 +1944504 +1945225 +1945535 +1945569 +1945571 +1945589 +1945605 +1945877 +1945878 +1946661 +1946695 +7389824 +1947117 +1947335 +1947492 +1948941 +1949015 +1949404 +5142338 +5142352 +1949784 +1949794 +1949850 +1949877 +1949929 +5142394 +5142599 +8109173 +1950013 +1950156 +5977247 +8270406 +7633472 +4535396 +5142032 +1758878 +1759069 +1759079 +1759083 +1759153 +1759159 +1759667 +5108636 +1760104 +7444489 +1760593 +1794361 +1760857 +1760891 +4533255 +1761392 +1761438 +1761735 +1761865 +1762383 +6132957 +1762680 +5109498 +5109506 +5109599 +5109646 +5109661 +1763610 +1764174 +1765011 +1765017 +1765044 +4534245 +4534252 +5109843 +5109855 +5109882 +5109931 +8352161 +1765767 +1765954 +1766130 +1766137 +1766210 +1766646 +1767511 +1767625 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772186 +5772199 +5772206 +7768584 +1768117 +5110200 +5110213 +1768815 +1769057 +1769566 +1770353 +1770477 +1770530 +4532696 +1771509 +1772013 +1772956 +8222049 +1774470 +1774859 +4534052 +5883881 +5110670 +1776330 +1776619 +1776862 +1777253 +5110818 +5110885 +1778074 +5111481 +5111501 +5111513 +5111574 +5772222 +1779258 +1779641 +1780378 +1781016 +4533325 +1782543 +1782560 +1782579 +1782672 +1782726 +1782727 +1782763 +1782777 +1782948 +1783016 +1783043 +5112283 +5112291 +5112345 +5714973 +5772349 +1783971 +1784349 +1784359 +1784853 +1785185 +1785286 +4532890 +1785361 +1785888 +1786360 +1786619 +1786664 +1786902 +1787064 +1787112 +1787279 +1787590 +1787610 +1787751 +1787770 +1787825 +1787841 +4534086 +1788522 +9216200 +4534011 +1789071 +1789076 +1789086 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789785 +1789982 +1790002 +1790062 +1790072 +1790153 +4533115 +1790364 +1790625 +1791422 +1792061 +1792300 +1792418 +1792426 +1792768 +5113370 +1792996 +7918000 +1793877 +1794534 +1795068 +4532908 +1795215 +7922810 +1795854 +1795900 +1796145 +1796169 +7780930 +4532700 +1796423 +1796451 +1796463 +8105817 +11992983 +1798916 +1798971 +1798974 +1800004 +6097260 +8742426 +9069966 +10638451 +4532811 +8890502 +4533202 +4534538 +4533125 +5883985 +8021109 +11478679 +5110644 +7654770 +6116899 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534686 +8108800 +1771650 +1771698 +1770772 +1770821 +1770880 +1771040 +1771245 +4533714 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +1773904 +4533347 +4532203 +4532206 +4532216 +4532236 +4532239 +4532260 +4532266 +1767302 +8363507 +1822346 +1822610 +1822796 +1822830 +1823726 +1824113 +1824117 +1824131 +1824751 +1825064 +1825077 +4534909 +4534914 +1825156 +5118904 +7624468 +1825539 +5118996 +5119193 +5119245 +1827645 +4534872 +1892554 +1892555 +5806166 +1893137 +1893558 +1894268 +10398658 +1894714 +4535632 +4535636 +8049830 +10639484 +1894840 +4535827 +4535809 +1896915 +1897834 +1898286 +4299368 +5129293 +7346344 +1898434 +1898521 +1898544 +1898988 +1899071 +1901404 +1901463 +1901850 +11546465 +5130335 +5130392 +5130444 +5130464 +5130471 +5130521 +5130542 +1902749 +8140883 +8189761 +4535689 +5130814 +6221746 +1905383 +1906552 +8208583 +1907620 +1907637 +1907687 +4535754 +5881946 +7976131 +1908352 +7346301 +10656625 +1909398 +1909607 +1909810 +1909838 +1909865 +1911278 +1911298 +1911300 +1911461 +7728366 +5133687 +1911633 +4535596 +7809779 +8078362 +5133693 +1912395 +4299535 +5133990 +5772890 +10097687 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +5135191 +8233062 +8314088 +11372793 +5136306 +1916376 +1916410 +1916412 +7854318 +1918394 +1918497 +1918667 +1918736 +1918776 +1918789 +1918843 +1918854 +8035998 +11645316 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5131520 +5131540 +8001799 +5806167 +7642610 +5135513 +5135546 +1896957 +5129091 +9087922 +8138711 +1910628 +1910629 +1902143 +1899349 +1899433 +1899818 +5129913 +7934873 +8168644 +8393082 +1951557 +5142870 +1952062 +1952229 +5143048 +1952806 +1952816 +1941864 +5120577 +1842097 +1842485 +1842508 +4301036 +1843602 +8292351 +5101394 +1730978 +1731263 +1731598 +1872368 +1878862 +1878895 +1878904 +4531517 +1879001 +1879227 +1879408 +1879443 +1879452 +1879471 +1879731 +1879735 +1879765 +1879970 +1880064 +1880140 +1880143 +1880907 +1880931 +4531643 +1881089 +1881126 +1881151 +9819403 +1881362 +1882210 +1882884 +1882965 +1883067 +1883386 +1883634 +1884465 +1884479 +1884774 +4532122 +1885764 +1885826 +1885937 +1886084 +1886088 +1886251 +8223165 +1886579 +1886587 +1886729 +7562564 +1886951 +1887054 +4531670 +1887701 +4531968 +1888346 +10922411 +1888484 +1888491 +1888579 +1888619 +1888759 +1889287 +1890187 +1890320 +1890335 +1890534 +1890576 +1890670 +1890679 +1890772 +1890776 +1890898 +1891013 +1891129 +1891167 +1891177 +1891190 +1891217 +1891326 +1891366 +1891386 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884255 +1884370 +1884403 +5884851 +5771877 +6133232 +5126680 +8537359 +8858121 +9100030 +1889833 +5127656 +1887177 +4532095 +6121184 +1883885 +4532150 +4532160 +5771880 +1831136 +1854202 +5122439 +1854615 +4526050 +7717983 +1858674 +1858930 +1859046 +1860026 +1973467 +5123221 +1865660 +1866356 +1866568 +1867928 +7764232 +1841460 +5120278 +1841813 +1841946 +1861494 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +5123922 +5124007 +1864161 +1864358 +1864377 +5124143 +5124233 +1864652 +1993419 +1830380 +1830408 +5106115 +5106249 +5107076 +5107219 +7410701 +7674502 +7778368 +7903078 +8201251 +8426357 +4522753 +1829322 +1856289 +5122798 +1856701 +1857577 +1857581 +1857626 +1857829 +1858163 +1858283 +8178453 +1937723 +1938052 +1938069 +1938088 +1938125 +1938131 +8225376 +1936969 +1937570 +1938214 +1938520 +1938810 +1939215 +5141262 +5141291 +5141305 +1838911 +1835031 +5770913 +1841159 +4529032 +5114409 +4534796 +4534798 +1801051 +4534773 +4534776 +4534779 +4534788 +9894093 +1802280 +1803060 +1803073 +9485481 +4534769 diff --git a/dev/releases/mambo_v3/presets/north_america.classes b/dev/releases/mambo_v3/presets/north_america.classes new file mode 100644 index 0000000..ff6f61b --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_america.classes @@ -0,0 +1,4551 @@ +12170988 +1934991 +1935301 +5140969 +5140980 +1936378 +1936388 +5141085 +10331171 +1868535 +10100176 +10517417 +1992315 +1860664 +1860711 +5123582 +1860736 +5101556 +5101559 +1732717 +1732901 +1733525 +5101763 +5101811 +5715280 +5715281 +1734384 +5102304 +5102324 +5102335 +5102365 +5102396 +1833475 +4302388 +1845270 +1845279 +1845314 +1845329 +1845335 +1845385 +1845442 +1845448 +1845455 +1845502 +1845513 +1845604 +1845605 +4528100 +1846313 +1846351 +1846439 +5121847 +5121850 +1846849 +1846860 +1846914 +1846941 +1846945 +1846971 +1846992 +1847013 +1847059 +1847064 +1847068 +1847111 +1847149 +1847225 +1847249 +1847274 +1847308 +1847343 +1847392 +1847407 +1847426 +1847457 +1847484 +1847498 +1847568 +1847572 +8559137 +1847919 +1847930 +1847944 +10427568 +1848114 +1848259 +1848272 +1848274 +1848295 +1848312 +1848322 +1848325 +1848490 +1848505 +1848610 +1848639 +1848730 +1848864 +9973217 +1849294 +1849457 +1849470 +1850045 +1850156 +1850184 +1850225 +1850321 +1850450 +1850575 +1850585 +1850589 +1850597 +1850673 +1850690 +1850722 +1850729 +1850771 +1850773 +1850774 +1850781 +1850798 +1850868 +1850884 +1850908 +1850922 +1850923 +1850962 +1850971 +1851000 +1851002 +1851011 +8986624 +5122062 +5122086 +5122121 +5122131 +1851213 +1851237 +1851243 +1851300 +1851337 +1851347 +1851453 +1851462 +1851670 +1851714 +1851750 +5122206 +1851828 +1851845 +1852165 +1852320 +1852382 +9123440 +1848212 +1848213 +1848920 +1849498 +11430021 +1829533 +1829659 +1829612 +1829799 +8779506 +10508467 +12031071 +11642411 +1829021 +1829029 +10053809 +10176413 +10067382 +5879654 +1835460 +1845793 +1845866 +1845962 +1846035 +1846052 +9159662 +1846505 +10594478 +8503184 +1834710 +1841261 +5119890 +1830843 +1830125 +1830131 +1830137 +1830191 +1830194 +1830202 +1830203 +1830221 +1830229 +1830241 +1830243 +1830284 +1830293 +9998920 +5110390 +1758860 +1758861 +1758866 +1760384 +1760385 +1760396 +1760397 +1760398 +1760400 +5108951 +1760927 +1761101 +1761102 +1761110 +1761838 +1762151 +1762286 +9553692 +1762474 +8331687 +8379616 +9354496 +9546910 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +1764525 +1765097 +1765182 +8028211 +5110044 +1766839 +1766845 +1766880 +1767031 +1767320 +1767499 +1767508 +9384861 +1768283 +1769000 +1769336 +1769841 +1770038 +1770044 +1770263 +1770380 +1770383 +1770384 +1770385 +11728240 +7396517 +5110297 +5110299 +5110305 +8963926 +9256436 +9279670 +9283228 +9323382 +9327042 +9395422 +9399145 +9440644 +9560782 +9564612 +9607447 +9636442 +1771846 +1771848 +1771859 +5110326 +5110327 +1772260 +1772427 +1772428 +1772716 +9237599 +9424441 +9534690 +5110492 +5110533 +1774907 +9287097 +1775980 +1776163 +1777024 +1777034 +1777052 +1777075 +8345991 +1777179 +9257908 +1777737 +1777942 +5110891 +1778548 +1778549 +1778551 +1778555 +9423248 +9610080 +1779740 +1780150 +1781029 +1781038 +7672864 +9305011 +9390065 +9630748 +1781944 +1781946 +5112051 +5112053 +5112060 +5112068 +5112078 +5112080 +9008379 +1782208 +1782214 +8384839 +1783365 +1785913 +1785916 +9520799 +1786217 +1786219 +1786247 +7480993 +1786912 +1786913 +1787106 +1787464 +11495556 +5112542 +1788278 +11890681 +10295290 +7346446 +1788891 +1789190 +1789191 +1789193 +5112626 +1789794 +1790230 +1790240 +1790246 +1790248 +1790257 +1790258 +1790268 +1790274 +1790281 +1790287 +1790308 +5112798 +1790692 +1790787 +1790832 +1790937 +1790945 +7785540 +9345545 +5112843 +1791151 +5112892 +5112900 +5112908 +5112911 +5112915 +5112917 +5112923 +5112927 +5112940 +5112944 +5112947 +5112959 +5112960 +5112961 +5112963 +5112968 +5112990 +1791372 +1791698 +1792276 +9382044 +1792827 +1792831 +1793566 +1794518 +10850929 +1795042 +1795045 +1795049 +9340452 +9622322 +1796257 +1796288 +1796338 +1797111 +1797121 +1797122 +1797135 +1797137 +1797146 +1797194 +1797198 +1797206 +1797210 +1797218 +1797252 +1797257 +1797275 +1797285 +1797290 +1797296 +1797300 +1797339 +1797365 +1797373 +1797375 +1797379 +1797394 +1797409 +1797432 +1797433 +1797436 +1797440 +1797445 +1797464 +1797474 +1797475 +1797478 +1797488 +1797507 +1797521 +1797556 +8874140 +9022399 +9236138 +9240357 +9252524 +9273409 +9289908 +9310510 +9312545 +9340070 +9344456 +9350484 +9367471 +9406020 +9410076 +9416645 +9455404 +9468297 +9483647 +9547311 +9549475 +9554074 +9560404 +9604825 +9607036 +9611624 +9618068 +9622725 +5113950 +6117124 +7598729 +1798393 +1798402 +1798427 +1798449 +4532352 +8150450 +8793873 +9238900 +9243875 +9292394 +9314022 +9353360 +9358521 +9425857 +9499599 +9527919 +9533271 +9545713 +9579730 +9608673 +9621113 +9626500 +1799183 +1799703 +9249036 +1803127 +1803218 +10033898 +5114892 +5114903 +11713970 +5114923 +5114930 +5114934 +5114946 +1804071 +1804074 +1804331 +1804394 +1804398 +1804401 +1804404 +1804407 +1804409 +1804512 +1804513 +1804522 +5115046 +1804759 +11508076 +11907485 +1804963 +1804969 +1804971 +1804974 +1805197 +1805537 +1805540 +1805542 +1805549 +1805682 +1805691 +1805938 +1805955 +1806145 +1806170 +1806176 +1806687 +1806690 +1806702 +1806737 +1806740 +9235225 +9278398 +9394138 +9417594 +9491341 +9541734 +9565980 +9588105 +1806872 +1807271 +1807273 +5115500 +1807514 +1807881 +1808088 +1808590 +1808592 +1808752 +8929537 +1809066 +5115777 +1809127 +1809135 +9463067 +1809294 +1809299 +1809305 +1809348 +1809499 +1810025 +1810121 +1810469 +5116128 +5116134 +5116145 +5116198 +5116293 +1810743 +1810824 +1810846 +1810866 +9389851 +7535515 +1811019 +1811079 +1811122 +1811439 +5116332 +5116338 +5116353 +5116358 +5116423 +1813248 +1814182 +1814336 +1814338 +1814357 +1814359 +1814365 +1814665 +1814800 +1814827 +1814838 +1814843 +1814863 +5117414 +9434954 +5117430 +5117462 +1816570 +5117685 +1817086 +1817690 +1817693 +1817696 +1817727 +1817729 +1817732 +1817734 +1817749 +1817797 +11725616 +1817864 +1817940 +1818252 +5118046 +11758730 +1818454 +1818463 +1819310 +1819873 +5118327 +5925317 +8720118 +9391467 +9568710 +1820406 +1820711 +1820714 +1820722 +1820764 +1820791 +1820940 +1821051 +1821113 +8178238 +10551407 +11873825 +8872165 +9288386 +9291075 +9362560 +9480768 +9601788 +9400545 +10395440 +8774985 +8908724 +9135886 +9247563 +9288596 +9290866 +9315577 +9334851 +9406984 +9432644 +9452274 +9526331 +9552703 +9555094 +9599150 +10214972 +10830546 +10851228 +12194283 +5115854 +5115874 +9530200 +9359871 +9379595 +9387353 +9407200 +9432438 +9452497 +9460510 +9498206 +9552466 +9627917 +5114949 +5114950 +5114956 +8429622 +1788711 +1788717 +7560807 +9301336 +5114912 +5114915 +5114921 +1781413 +1781420 +9446902 +1796523 +8805966 +8905759 +9051758 +9254017 +9298735 +9324570 +9368974 +9443159 +9469928 +9488783 +9637664 +1793538 +1793542 +1813468 +1813413 +1813415 +1760233 +1760257 +9235027 +9522383 +8177591 +5109796 +1821856 +1775796 +1811814 +1811948 +1812026 +1812105 +1812207 +1812262 +1812339 +5884258 +7716829 +8299504 +8968321 +9451320 +1820039 +1781531 +1784959 +1785024 +1785072 +5884188 +6117485 +7611914 +7924383 +1780617 +1780646 +1780668 +1780676 +4301309 +1777463 +1777471 +5112440 +1791735 +1791736 +1860974 +1860989 +1860993 +1860996 +1861030 +7472845 +1852956 +1852978 +1835430 +1835436 +1835438 +1835449 +1835451 +1835467 +1835819 +10610041 +1837360 +1837420 +4529064 +10017792 +1838360 +1838465 +1838512 +1838584 +1839296 +1840311 +1840346 +1840360 +1840379 +1840408 +1840441 +1840448 +1840485 +1840520 +1840543 +1840553 +1840592 +1840656 +1841081 +1841084 +1841091 +10187154 +1831752 +1852832 +9473121 +1852901 +9851261 +1751299 +1751336 +1751400 +1860184 +10165831 +1860443 +10308365 +9913863 +5123394 +5123419 +5769164 +5123461 +1735408 +4302389 +8797666 +1869666 +1869825 +1869852 +1870017 +1870037 +1870202 +1870250 +1870267 +1870308 +1870415 +1870426 +1870450 +1870607 +1870721 +1870727 +1870733 +1870751 +1870777 +1870988 +1871175 +1871379 +10246305 +10588642 +10817208 +1871407 +8766638 +9944922 +1871414 +1871419 +1871457 +1871509 +1871560 +1871597 +1871698 +1871763 +1871890 +1871923 +1871940 +1872200 +1872210 +10336328 +1872452 +1872456 +1872466 +1872514 +1872515 +1872873 +1872901 +1873051 +1873079 +1873267 +1873319 +5125545 +10807383 +1873376 +1873381 +1873383 +1873384 +1873398 +1873585 +7372375 +1873753 +10143814 +10165457 +10366580 +10410048 +10518163 +10561589 +9971850 +1874158 +1874160 +1874179 +1874248 +1874257 +1874274 +1874279 +4531145 +1874317 +1874375 +1874513 +1874552 +10244305 +1874901 +1875196 +1875319 +1875407 +1875451 +1875478 +1875483 +1875485 +1875606 +1875607 +1875631 +1875914 +1876409 +1876542 +1876548 +1876549 +1876665 +1876987 +10142569 +1877002 +5125916 +5125917 +1877282 +1877321 +1877338 +1877353 +1877364 +1877365 +1877372 +1877443 +1877492 +1877537 +5125939 +1877643 +5126000 +5126013 +1877940 +1877941 +1877975 +1877988 +1877995 +1878158 +1878370 +1878392 +1878470 +1878490 +5976937 +5884888 +1875885 +5125525 +1873697 +5143284 +5143285 +11950325 +12018158 +12060941 +12087490 +1939962 +1939964 +1940110 +11667300 +5131957 +5141493 +5714558 +5714572 +5714575 +5714600 +10267561 +10286565 +10451589 +10509408 +1940517 +1940546 +1940575 +1940580 +1940601 +1940604 +1940609 +1940612 +1940694 +1940744 +1940757 +4525777 +8956729 +9930604 +10402067 +1941310 +1941377 +1941437 +10495733 +10584071 +12252570 +1941266 +1941294 +1941299 +1939833 +1939879 +9146244 +1736315 +1736390 +10132596 +11645405 +1736499 +1736623 +10274976 +5102635 +5102637 +5102651 +5102666 +5102668 +5102671 +5102678 +1736760 +10355428 +1736803 +1736807 +1736809 +1736811 +1736821 +1736826 +1736836 +1736860 +10638589 +1736915 +1736918 +1736937 +1736939 +1736995 +1737015 +4529931 +1737072 +1737131 +1737231 +1737374 +1737403 +1737417 +1737491 +4530608 +7350238 +7466487 +1737526 +1737542 +1737544 +1737551 +1737552 +1737753 +1737768 +1737847 +1737893 +1737904 +1737929 +1737964 +1737968 +1737973 +1737978 +8485254 +1738218 +10090105 +10370026 +1738422 +5102693 +5102735 +5102773 +5102782 +5102807 +5102809 +5102830 +8420632 +9953996 +5102931 +1738700 +1738791 +1738794 +1738809 +1738839 +1738888 +1739034 +8086347 +1739272 +1739284 +1739290 +1739362 +1739364 +1739381 +1739400 +10596756 +1739612 +1739617 +1739629 +1739646 +1739656 +1739668 +1739677 +10229731 +1739727 +1739767 +1739770 +1739797 +1739833 +1739867 +1739884 +1739922 +1739924 +1739927 +1739954 +1739956 +1739964 +1739973 +1739983 +1740003 +1740037 +1740060 +1740069 +1740116 +1740120 +1740133 +1740148 +1740155 +1740163 +1740225 +1740246 +1740305 +1740370 +1740389 +1740392 +1740400 +1740449 +1740533 +8094357 +1741056 +1741130 +1741131 +1741324 +1741361 +1741368 +4530151 +1741398 +1741400 +5103066 +5771357 +10709446 +10776625 +10869347 +1741633 +1741719 +1741747 +1741812 +1741818 +1741820 +1741823 +1741824 +1741826 +9880932 +11093909 +1742081 +1742089 +1742091 +1742106 +1742121 +1742150 +1742168 +1742178 +1742180 +1742198 +1742203 +1742214 +1742239 +1742241 +1742260 +1742263 +1742268 +1742272 +1742273 +1742287 +1742293 +1742304 +1742310 +1742335 +10000103 +10044107 +10137001 +10194727 +10395101 +10695966 +11508404 +11899754 +5103394 +5103451 +9849625 +9885192 +10534945 +1743323 +10095278 +10134865 +11923027 +1743461 +10073044 +10295171 +10365884 +10388627 +10446580 +10539598 +12197284 +5104063 +5104088 +5104093 +5104116 +9051888 +9958147 +9971153 +1743653 +1743657 +1743658 +1743663 +1743694 +1743768 +1743825 +1743828 +1743838 +1743855 +1743898 +10205587 +10450442 +1744071 +10271464 +1744130 +1744136 +5104157 +1744212 +1744416 +12276630 +9860684 +9953708 +1744593 +1744700 +1744709 +1744724 +1744731 +1744949 +1744953 +1745022 +10483734 +1745558 +1745606 +1745634 +1745659 +1745666 +1745669 +1745675 +1745724 +1745729 +1745746 +1745756 +1745761 +1745787 +1745814 +1745830 +9991710 +1746000 +10593489 +1746068 +1746586 +1746613 +1746666 +1746695 +1746751 +1746754 +1746763 +1746774 +1746775 +1746831 +1746832 +1746856 +1746859 +1746876 +1746881 +1746898 +1746927 +1746949 +4302199 +4302202 +1747024 +1747140 +1747147 +1747150 +1747155 +1747160 +1747161 +1747163 +1747166 +1747171 +1747188 +1747189 +10046698 +10442122 +12066849 +12107129 +12126779 +1747196 +9040133 +9896144 +10380465 +10445629 +10446898 +10481441 +10503464 +10547716 +10776919 +12223349 +1747523 +1747738 +1747740 +4530138 +1748109 +1748148 +1748149 +1748151 +1748152 +9176043 +10580256 +9911298 +9948031 +10002059 +8734154 +8843927 +10236521 +5103083 +5103100 +5103118 +5103154 +5103166 +5103183 +5103201 +5103227 +5771230 +5771232 +5771256 +9023222 +1743651 +10545267 +1831775 +10310599 +10346267 +4525540 +1935498 +4299071 +1920844 +1920889 +1920900 +1920923 +1921053 +10657453 +1921123 +1921239 +1921240 +1921247 +1921248 +1921255 +1921910 +8825450 +1922038 +1922039 +1922041 +1922044 +1922049 +1922219 +1922223 +1922455 +10278292 +1922676 +1922851 +1922865 +1922868 +1922889 +1922890 +1922937 +5138387 +5138602 +5714679 +5714689 +9002107 +1923498 +1923505 +8913017 +1923678 +1923679 +1923997 +1924050 +1924106 +1924176 +12174634 +12185456 +12188086 +12205404 +12212066 +12222885 +12229400 +12233602 +12250854 +12257418 +12258984 +12265590 +1924223 +1924232 +1924513 +1924518 +1924521 +1924713 +8992718 +9157410 +1924770 +10120854 +1925429 +1925458 +1925498 +1925500 +1925501 +1925509 +1925515 +4300384 +4300393 +4300399 +8904480 +12195040 +1925918 +1925922 +4300000 +4300011 +4300012 +12219036 +1926001 +1926009 +11797637 +1926054 +4300259 +1926823 +1926834 +1926861 +1927301 +1927302 +5139026 +5139029 +5714747 +5714755 +5714788 +5139034 +1927909 +1927988 +1928009 +4300406 +1928214 +1928215 +8846776 +5139064 +1928584 +1928589 +1929046 +1929129 +11720834 +5139346 +5139540 +5139578 +5139700 +5714618 +1929772 +1929962 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930183 +1930263 +1930270 +1930288 +1930289 +1930331 +1930361 +1930391 +1930410 +1930422 +1930451 +1930481 +1930563 +1930581 +1930653 +1930660 +1930678 +1930728 +1930772 +1930830 +1931116 +1931119 +1931122 +1931126 +5139864 +1931310 +1931553 +1931784 +1931787 +5139897 +5139908 +5139909 +10113190 +10357476 +10570752 +11417741 +11802190 +1932056 +1932172 +1932175 +1932386 +1932406 +1932409 +1932414 +1932417 +1932428 +4300277 +4300363 +7346444 +1932576 +1932879 +5140033 +5140054 +5140063 +1933260 +1933583 +1933998 +1935853 +1935872 +1935878 +1935884 +1935888 +1935899 +1935904 +1935912 +1935925 +1935931 +1935935 +5139928 +4300268 +9469139 +9975698 +1751980 +1752034 +1752109 +1752111 +9776414 +1752281 +1752285 +1752286 +1752825 +1752832 +1752894 +1752923 +10376685 +1753105 +1753106 +1753111 +11507608 +5105365 +5105367 +5105369 +5105376 +5105379 +5105380 +5105447 +5105469 +5105491 +5105508 +11014495 +1753603 +1753604 +1753661 +1753668 +5105588 +1753833 +1753922 +1753929 +5105603 +10515719 +10413588 +10514620 +5105336 +5105344 +5105352 +5806127 +5137511 +5137512 +12181811 +12226416 +12251247 +1919125 +1919128 +1919130 +1919145 +1919146 +1919149 +1919173 +1919235 +1919239 +1919245 +1919282 +1919289 +5137540 +1919316 +1919326 +1919327 +1919328 +1919338 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +4701336 +7661785 +5137553 +1919700 +1919701 +1919702 +1919705 +1919711 +1919719 +10703948 +1919939 +1919943 +1919947 +1919949 +1920192 +5137791 +5137800 +5137802 +5137803 +4701136 +5137817 +5137819 +5714819 +1920426 +1920461 +1920463 +1920496 +5137882 +5137890 +5137894 +1920552 +1920571 +1920574 +1920581 +1920691 +1920803 +1920809 +1920810 +5714914 +5137582 +5137595 +5137601 +5137615 +5137626 +5137636 +5137659 +5137664 +5137672 +5137674 +5137679 +5137689 +5137693 +5137694 +5137700 +5137711 +5137714 +12191141 +12206386 +12234544 +12236627 +1920621 +1748922 +1749050 +1749287 +1749713 +1749760 +1749929 +1749936 +5104815 +5104891 +5104903 +5104948 +5104986 +5105031 +5105057 +5105068 +5105088 +5105120 +5105124 +9942354 +1750924 +1751146 +1751163 +1749591 +1749656 +8741260 +11840028 +1758461 +1731826 +1731862 +1992547 +1954930 +1954933 +1954992 +1954993 +1955497 +1955498 +5143657 +5143675 +5143703 +1956098 +1956099 +1956215 +1956462 +1956505 +1956510 +1956597 +1956626 +1956716 +8793973 +1956904 +1957441 +1957845 +1957870 +8775810 +5143952 +1958049 +5143960 +5143964 +1958121 +1958528 +1959543 +1959637 +1959858 +1959890 +1959898 +1959917 +1959919 +1959934 +9320916 +1960090 +1960166 +1960255 +1960315 +1960503 +1960632 +1960951 +1961155 +4302240 +9468667 +1961361 +1961388 +1961718 +10650351 +1962051 +1962076 +1962086 +1962118 +1962120 +9368382 +9592714 +5144227 +5144318 +1962432 +1962434 +1962479 +1962490 +1962516 +1962722 +1962727 +9264326 +1962895 +1962900 +1962925 +4302252 +1963052 +1963201 +1963207 +1963212 +12214993 +1963433 +1963619 +1963633 +1963848 +1963854 +1963874 +1963879 +1963892 +1964041 +1964585 +8361848 +1964715 +5144424 +1965024 +1965038 +1965058 +1965069 +1965078 +1965100 +5880367 +6214734 +1965586 +1965671 +1965697 +1965699 +1965763 +1965794 +1965797 +1965805 +1965807 +1965823 +1965825 +1965831 +1965838 +1965861 +1965865 +1965887 +5144457 +1966088 +1966185 +1966195 +1966198 +1967127 +1967128 +1967212 +1967226 +1967240 +9277294 +9492499 +1967433 +1968205 +5144564 +5144575 +8793278 +1968313 +1968315 +1968321 +1968324 +1968538 +5144583 +5144588 +5144593 +5144596 +5144597 +1968942 +1969961 +1969978 +1970119 +5144729 +5144870 +5144935 +5144953 +5145078 +5145139 +5145238 +5145466 +5145521 +5145547 +5145560 +5145713 +7700568 +1971835 +1971995 +1971998 +1971999 +1972010 +1972101 +1972250 +5145998 +5146030 +5146082 +5146091 +1972447 +1972449 +1972454 +9558845 +5146179 +1972691 +1973146 +1973147 +1973164 +1973165 +1973245 +1973487 +1973493 +1973665 +10404426 +5146497 +5146598 +5146677 +5146820 +5146832 +5147018 +5147039 +5147114 +5147139 +5147179 +5147211 +9370933 +9469300 +9590066 +1975365 +1975607 +9477531 +1975741 +5715277 +5715278 +1975897 +1975914 +1976073 +8793324 +1976248 +1976333 +8820198 +5147703 +5147713 +1976651 +1977003 +1977007 +1977054 +1977068 +5147827 +5147838 +5147858 +5147868 +5147871 +5147879 +5147883 +5147894 +5147898 +5147899 +5147909 +8951618 +5148184 +9617496 +1978445 +9308082 +1978464 +1978493 +1978494 +1978526 +1978671 +9243264 +1978751 +5148277 +5148280 +5806132 +1978958 +1978959 +1978977 +1979255 +1979289 +1979344 +1979358 +1979380 +1979427 +1979430 +1979473 +1979475 +1979501 +1979721 +1979726 +1980025 +1980245 +1980247 +1980250 +1980290 +5148379 +5148462 +1980505 +1980509 +1980559 +8421569 +1981144 +1981160 +1981161 +1981162 +1981191 +1981202 +1981209 +1981210 +1981222 +1981252 +1981258 +1981277 +1981280 +1981281 +1981284 +1981312 +1981718 +10247981 +1981951 +1981959 +1981973 +5148520 +1982406 +1982447 +1982533 +1982613 +1982746 +1982780 +1982824 +1982898 +1982951 +1983260 +1983263 +1983288 +1983434 +1983441 +1983491 +1983705 +1983709 +1983799 +1983896 +1984073 +1984110 +9577547 +5148531 +5148544 +5148576 +9237621 +9307713 +9370312 +9424464 +9488754 +9544337 +9610059 +5148719 +5148743 +5148753 +5148766 +5148850 +5148934 +5148952 +5148954 +1984654 +9382415 +1984942 +1985405 +1985406 +1985409 +1985421 +1985423 +9332369 +1985485 +1985487 +5149222 +5149237 +1985945 +1985952 +1985956 +1986004 +1986020 +1986040 +1986091 +1986113 +1986166 +1986171 +1986192 +1986367 +1986497 +1986623 +1986807 +1986906 +5149307 +1986998 +4302274 +5149317 +1987145 +1987146 +1987301 +1987330 +9538525 +1987633 +4524223 +1988495 +1989083 +1989084 +1989538 +1989582 +1989903 +1990155 +1990198 +1990200 +1990270 +1990331 +1990335 +1990357 +1990594 +1990998 +1991012 +1991280 +1991281 +1991289 +1991294 +1991295 +1991298 +1991299 +1991303 +5149630 +5149631 +1991371 +1991429 +1992172 +12010643 +12225687 +5880539 +5880550 +5880552 +5880559 +5880563 +7657419 +8941993 +9110918 +9243319 +9251088 +9259786 +9261296 +9272461 +9311081 +9330467 +9339487 +9366016 +9368398 +9392058 +9392076 +9400977 +9402536 +9413168 +9419734 +9428900 +9438677 +9454444 +9456004 +9474405 +9489399 +9502724 +9530135 +9532702 +9558873 +9574939 +9616438 +9624918 +9632824 +5144381 +5144386 +5144407 +9533293 +4302221 +9621086 +4302230 +4523560 +9281181 +9352348 +9352978 +9403481 +9436173 +9448761 +9453490 +9494431 +9516038 +9516680 +9523379 +9534291 +9545331 +4524072 +9288979 +9307098 +9423863 +9497623 +9581695 +9619088 +9273963 +9479525 +9237031 +9274899 +9321500 +9299326 +9309575 +9415669 +5144196 +5715276 +5715275 +10221195 +1978197 +9363893 +9391442 +4523885 +5149713 +5149753 +5149777 +5149782 +5149811 +5149819 +5146305 +5146326 +5146389 +1980462 +1972942 +4302268 +9256786 +9291092 +5150027 +12200261 +11470872 +11654707 +11776315 +11834445 +11892494 +12252926 +11423843 +11670842 +12173621 +12247340 +12252340 +12239491 +12258146 +1942141 +1942170 +1942171 +12286003 +1942341 +1942416 +1942455 +1942509 +4301744 +4301749 +1942558 +1942670 +5141662 +1942945 +1942947 +1942964 +1942967 +1942971 +1942980 +1942982 +1942994 +5141697 +1943054 +1943066 +4302008 +5141743 +5141763 +1943563 +1943571 +1943573 +1943588 +4301355 +1943631 +1943655 +1943673 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +12233808 +1943942 +1943953 +1943954 +1943960 +1943962 +1943964 +1943990 +1944004 +8133678 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944574 +1944769 +4301934 +1944798 +1944815 +1944832 +5141913 +9551544 +1945081 +1945302 +1945312 +1945462 +1945476 +1945477 +1945605 +4301942 +1945957 +1946074 +1946078 +1946079 +1946163 +1946177 +5142061 +5142062 +1946310 +1946327 +1946333 +1946469 +12223105 +12233838 +1946495 +1946500 +1946509 +4302101 +1946520 +1946544 +1946550 +1946577 +1946582 +1946610 +1946612 +1946618 +1946628 +1946737 +5142086 +1946810 +1946853 +1946865 +1946901 +11753578 +1946980 +1946981 +1946983 +1946989 +1946991 +1946992 +1946995 +1946999 +1947021 +1947037 +1947048 +1947055 +1947147 +1947282 +1947333 +1947335 +5142166 +5142175 +5142176 +1947402 +1947507 +1947568 +1947577 +1947587 +1947588 +1947597 +1947842 +1947894 +1947915 +12208168 +1947973 +1947976 +1947979 +1947980 +1948042 +1948054 +1948158 +7603634 +1948439 +1948446 +1948521 +4301945 +1948826 +1948865 +1948890 +1948947 +1949049 +12353663 +1949285 +1949322 +1949331 +1949449 +1949451 +1949466 +1949492 +10574663 +1949512 +1949515 +1949520 +1949544 +1949545 +1949549 +1949592 +1949621 +7726809 +9395000 +1949687 +1949697 +1950006 +5142372 +5142424 +5142436 +5142583 +1950017 +1950019 +4301876 +1950044 +1950047 +1950052 +1950133 +1950153 +1950197 +11967675 +1950384 +1950396 +1950408 +1950409 +1950567 +1950578 +1950654 +1950767 +1950856 +1951062 +1951097 +1951116 +1951121 +1951125 +1951133 +1951217 +1951218 +4301897 +5715127 +12180041 +12206694 +1951340 +5142829 +5977179 +5977185 +5977197 +5977203 +5977207 +5977208 +5977214 +5977216 +5977220 +5977235 +5977250 +5977251 +5977259 +5977260 +5977261 +5977262 +5142249 +5142254 +5142267 +5142269 +5142273 +5142278 +5142283 +5142298 +5142300 +5142314 +5142317 +5142319 +5142322 +5142328 +7633472 +1948771 +1948774 +1948779 +1948789 +1948799 +1948800 +1948802 +1948803 +1948804 +1948808 +1948809 +1948810 +1945374 +1945378 +12175154 +9400895 +9245604 +1758767 +1758771 +1758781 +1758783 +7911151 +9366762 +9445489 +5108416 +5108417 +5108419 +1758879 +1758898 +1758906 +1758916 +1759037 +1759040 +1759041 +1759092 +9447614 +1759338 +1759553 +1759563 +1759573 +1759585 +1759605 +1759610 +1759611 +1759621 +1759624 +1759631 +1759632 +1759633 +1759634 +1759671 +1759677 +1759678 +1759688 +1759691 +1759694 +1759719 +1759799 +1759881 +9306367 +1760261 +1760309 +1760361 +1760454 +1760455 +1760682 +5108957 +1761143 +1761498 +1761553 +1761563 +1761798 +1761892 +9418549 +9616055 +1762609 +1762615 +5109523 +5109535 +5109566 +5109596 +5109651 +9337858 +1763610 +9328683 +9438913 +1764238 +1764691 +1764693 +1764917 +1764929 +1765011 +1765044 +4534245 +1765172 +5109829 +5109845 +5109848 +5109850 +5109852 +5109855 +5109881 +5109954 +5109958 +8352161 +1765733 +11487320 +1765769 +1765779 +1765798 +1765962 +1766193 +1766205 +1766210 +1766237 +1766285 +1766287 +1766392 +1766410 +1766489 +1766509 +4301071 +4301081 +7895336 +9362190 +1766646 +1766650 +1766917 +1766919 +1766921 +1767052 +1767140 +1767142 +1767335 +1767336 +1767337 +1767338 +1767347 +7598945 +9062262 +1767484 +9471709 +1767571 +1767579 +1767584 +9511345 +1767602 +1767612 +1767628 +5772169 +9381852 +1767719 +1768132 +1768172 +1768174 +1769592 +9373686 +1769814 +1769934 +1769947 +1769958 +1770132 +1770144 +9148810 +1770461 +1770659 +1771441 +1771531 +1771872 +1771997 +1772013 +9242609 +9244973 +9254157 +9396755 +9463442 +9476708 +9495306 +9562175 +9616658 +9625112 +9630930 +9633562 +1772043 +1772169 +5110333 +5110341 +5110356 +9539128 +1772422 +1772462 +9605631 +1772954 +1772977 +1773002 +1773069 +1773081 +1773248 +1773313 +1773315 +1773510 +1773577 +1773662 +1773677 +1773728 +4301148 +9369576 +1773742 +1773743 +1773744 +1773746 +9367674 +9399288 +9593475 +1773783 +1773784 +9283948 +9560018 +1774092 +1774095 +9322646 +1774243 +1774253 +1774254 +1774262 +1774268 +9243117 +9409309 +9550265 +1774314 +1774358 +1774792 +4301304 +6115953 +1775046 +1775055 +9547676 +1775089 +1775118 +1775290 +1775291 +1775508 +1775509 +1775672 +1775680 +1775791 +1775866 +1775970 +1776167 +1776330 +5110723 +5110728 +5110752 +5110754 +5110756 +1776397 +1776406 +1776415 +1776459 +1776462 +1776467 +1776470 +1776472 +1776473 +1776476 +1776618 +1776861 +1776871 +1776880 +1777139 +1777261 +1777728 +1777730 +9310286 +5110863 +5715009 +5715010 +5715013 +1777974 +1777976 +1777980 +1777982 +1777994 +1777996 +1778000 +1778006 +1778007 +1778013 +1778015 +1778024 +1778031 +1778033 +1778034 +1778037 +1778045 +1778049 +9456735 +1778337 +1778534 +1778688 +5111076 +5111139 +5111141 +5111195 +5111343 +5111360 +5111372 +5111397 +5111521 +5111528 +5111546 +5111568 +7593392 +9175037 +9596498 +1779430 +1779633 +1779643 +1779709 +1779713 +1779959 +1780209 +1780213 +1780214 +1780215 +1780272 +1780309 +1780313 +1780326 +1780330 +1780344 +1780390 +1780407 +1780414 +1780437 +1780440 +1780450 +8802610 +9284849 +1780852 +7825945 +9374443 +9392614 +5111956 +1781692 +1781819 +1782031 +1782422 +1782424 +1782523 +1782542 +1782585 +1782595 +9289753 +9433772 +9525172 +1782622 +10441062 +1782682 +1782689 +1782700 +1782705 +1782706 +1782707 +1782708 +1782709 +1782743 +1782744 +1782745 +1782747 +1782762 +1782776 +1782803 +1782808 +1782809 +1782819 +1782822 +1782826 +1782833 +1782837 +1782840 +1782853 +1782870 +1782871 +1782878 +1782921 +1782928 +1782934 +1782961 +1782972 +1782978 +1782993 +1783002 +1783008 +1783013 +1783035 +1783055 +1783059 +4301044 +9581976 +1783313 +9457757 +9500945 +1783371 +1783372 +1783373 +1783376 +1783378 +5112153 +5112191 +5112199 +5112229 +5112233 +5112283 +5112302 +5112377 +5714951 +5714973 +5714984 +5714994 +5715004 +1783811 +9348210 +9465978 +9492640 +1783841 +1783842 +1783861 +1783940 +1784276 +1784278 +1784281 +1784282 +1784283 +1784422 +1784461 +1784582 +1784610 +9320776 +1784688 +5112414 +4534290 +1784893 +1785145 +1785168 +1785185 +1785280 +9633615 +1785314 +1785331 +1785399 +1785403 +9636267 +1785728 +1785730 +1785732 +1785733 +7400814 +9250744 +9329292 +1785875 +1785886 +1785951 +1785955 +1785964 +1785982 +1785992 +1785997 +1786007 +8292872 +1786035 +1786036 +1786308 +1786360 +1786455 +1786514 +1786565 +1786566 +1786567 +1786691 +1786733 +1786808 +1786918 +4687681 +9305798 +1787438 +1787506 +1788034 +1788037 +1788063 +1788070 +1788139 +9547140 +1788425 +9282469 +1788485 +1788673 +1788677 +1788679 +1788680 +1788681 +1788720 +4301312 +1788917 +1788929 +1789076 +1789155 +9612009 +1789212 +9248329 +9449132 +1789505 +4534166 +4534198 +1789695 +1789730 +1790013 +1790084 +1790151 +9092175 +9410414 +1790339 +1790343 +11693171 +1790359 +1790362 +1790369 +1790371 +1790737 +9297059 +1791331 +1791590 +1791593 +1791680 +1791784 +1791862 +1792072 +1792073 +1792087 +1792091 +1792095 +1792096 +1792097 +1792099 +9426771 +9622117 +1792318 +9241669 +9338769 +9530319 +9548726 +1792430 +1792442 +1792449 +1792456 +1792465 +1792478 +1792485 +1792497 +1792517 +5113365 +9240216 +1792817 +9233420 +9539292 +1792996 +1793189 +1793192 +1793368 +1793369 +1793419 +1793453 +1793455 +4301052 +4301055 +1793589 +1793699 +1793983 +1794102 +1794510 +4301238 +11781335 +1795788 +1795802 +1795812 +1795871 +1795983 +1796032 +1796035 +1796040 +1796051 +1796100 +1796117 +1796154 +1796180 +1796181 +1796188 +4534486 +7438067 +9377268 +9541908 +1796217 +1796274 +1796276 +4688172 +7689966 +7882824 +8405656 +9256638 +9327259 +9589234 +1796310 +1796312 +1796463 +8105817 +1796678 +1796686 +1796842 +1796958 +1797587 +1797592 +1797593 +1797595 +1797601 +4301242 +4301249 +4301255 +1798288 +1798371 +1798375 +1798419 +5113985 +5114011 +5114021 +5114039 +5114043 +5114081 +5114083 +5114096 +5114107 +5114128 +5114151 +5114159 +9500553 +1799433 +1799675 +1799680 +9368026 +9593098 +1799774 +9388726 +9571514 +1799870 +1799877 +1799880 +1799884 +1799894 +1799900 +1799901 +1799911 +1799917 +1799925 +1799938 +1799944 +1799956 +1799957 +1799958 +1799967 +1799977 +1800017 +1800024 +1800028 +10446574 +9496311 +8729319 +4301068 +4301282 +4301283 +4301306 +4301307 +8751100 +9395261 +9564779 +12103087 +7558165 +8050639 +8440999 +8551997 +8562506 +8647523 +8761810 +8781370 +8998296 +9042018 +9163659 +9241105 +9247947 +9255102 +9261458 +9281907 +9288185 +9291297 +9362785 +9373309 +9390293 +9424681 +9452702 +9474256 +9481002 +9484411 +9485070 +9488551 +9530271 +9530928 +9533506 +9534429 +9544558 +9545480 +9552253 +9573163 +9577379 +9590907 +9591877 +9594509 +9595155 +9602019 +9634575 +11922580 +4534038 +9406822 +9432810 +4534533 +9248830 +9363692 +9556427 +9597741 +9503548 +9415435 +9424082 +9610447 +7589577 +7779226 +8818378 +8928353 +9538684 +9486411 +7717385 +8424964 +9511749 +6132781 +10118643 +9875111 +9342344 +9496896 +9629365 +9478331 +5108640 +5110377 +5114189 +5114192 +11452421 +11466090 +11470672 +11590674 +11615055 +11619030 +11626773 +11627464 +11660145 +11713256 +11749278 +11753804 +11781300 +11859640 +11887065 +5109299 +5109369 +5109413 +8755207 +8943174 +9038042 +9307254 +9334639 +9387782 +9404919 +9506719 +5112130 +5112131 +9244066 +9551316 +7398419 +1792564 +1800130 +1800140 +9623131 +1774929 +1770828 +1770918 +1770955 +1771019 +1771055 +1771067 +1771245 +1765751 +5108665 +5108670 +9374637 +9586329 +1768196 +1768199 +1768201 +11783188 +4533347 +9490756 +1797903 +6115793 +6115822 +11501104 +1776094 +9354669 +10714961 +10867462 +9253819 +9517291 +9561820 +11562243 +5118459 +5118474 +5118509 +5118524 +1822667 +9778438 +1822784 +1822788 +1822805 +1822848 +1823637 +1824080 +1824259 +1824442 +1824449 +1824571 +5118828 +1825083 +9426054 +1825218 +1825373 +1825428 +1825430 +5118934 +5118944 +5118949 +1825967 +1826048 +1826058 +1826084 +1826156 +1826163 +1826164 +1826167 +1826169 +1826172 +1826173 +1826175 +1826181 +1826222 +5119009 +5119011 +5119013 +5119016 +5119026 +5119039 +5119046 +5119050 +10115073 +1826772 +9807789 +1827103 +1827112 +1827113 +1827132 +1827133 +1827161 +1827716 +1828105 +1828268 +9454052 +9255512 +1892509 +1892729 +1892736 +1892742 +4299095 +1892851 +1892858 +1892863 +5127805 +5128005 +5128007 +5128034 +9113409 +10653980 +1894074 +1894087 +1894088 +1894102 +1894164 +1894293 +1894298 +5882039 +1894329 +1894342 +7712938 +1894896 +4535827 +1895138 +1895176 +1895185 +1895203 +5128232 +5128250 +5128266 +5128326 +5128357 +5128363 +5128380 +9804158 +1895768 +1895820 +8763986 +1895886 +1895904 +1896087 +5128475 +5128488 +5128491 +1896614 +1896658 +1896749 +10353400 +1896774 +1896932 +5129251 +11701883 +5925238 +8367663 +1897977 +1897990 +10073321 +10365587 +1898143 +1898174 +1898203 +10321900 +1898286 +4299368 +4299370 +5714367 +5714369 +1898391 +1898402 +1898414 +1898416 +1898424 +1898431 +5129374 +5129378 +5129387 +5129405 +5129430 +5129432 +5129451 +5714356 +5714361 +6228464 +5129473 +5129481 +5129489 +5129496 +5129515 +5129517 +5129520 +5129531 +5129535 +9208233 +9255328 +5129544 +1898686 +1898841 +1899048 +4299211 +4299213 +1899873 +1899893 +1900024 +8847500 +9208918 +1900131 +1900175 +1900199 +1900233 +1900249 +1900485 +1900618 +1900626 +1900830 +1900872 +9190731 +1901001 +1901189 +1901261 +1901268 +8247566 +1901735 +1901744 +1901794 +1901801 +1901810 +11135155 +11219489 +12258652 +5130400 +5130514 +5130528 +5130548 +9357385 +1902378 +1902406 +1902430 +1902458 +1902479 +1902502 +5130559 +1902620 +1902642 +1902670 +1902676 +1902680 +1902692 +1902699 +1902702 +1902703 +1902704 +4299218 +1902880 +1903028 +1903607 +1903658 +1903683 +5131597 +5131608 +5131637 +1904382 +7776011 +5131951 +1905161 +1905162 +1905172 +1905187 +1905189 +1905242 +1905257 +1905267 +1905281 +1905297 +1905299 +1905301 +1905310 +1905317 +1905451 +1907153 +1907235 +1907250 +1907272 +1908011 +1908044 +1908052 +1908055 +1908148 +1908199 +1908203 +1908204 +1908207 +1908256 +1908258 +1908302 +5133035 +10542548 +1908995 +1909064 +10046510 +1909128 +1909170 +1909185 +9851867 +8727750 +12234977 +1909800 +5133251 +5133265 +10558140 +5133565 +5133568 +1910773 +5133581 +1911112 +1911178 +1911246 +5133595 +5133621 +5133637 +8548427 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +1912428 +4299535 +4299565 +4299576 +4299599 +5133864 +5714410 +10638244 +9277330 +5134517 +5134559 +5134661 +5134687 +5134693 +5134759 +5135355 +5714507 +8233062 +1914410 +1914416 +1914421 +1914424 +1914435 +1914439 +1914440 +1914442 +1914458 +1914464 +1914465 +1914477 +1914484 +1914496 +1914498 +1914500 +1914501 +1914511 +4299191 +4299201 +8918036 +1915193 +9185656 +9988287 +1915339 +1915396 +1915401 +1915417 +1915427 +1915430 +1915456 +1915469 +1915470 +1915487 +1915492 +1915506 +10487080 +1916700 +1917827 +1917830 +1918082 +1918094 +1918097 +10250149 +1918269 +1918280 +1918293 +1918395 +4299802 +4299804 +1918596 +1918964 +1918968 +1918972 +1918984 +1918986 +1918988 +1919007 +5128045 +5130682 +5130696 +5131982 +5132003 +5132079 +5132084 +5132246 +5132254 +5132317 +5132347 +5132360 +5132398 +5132446 +5132461 +5132505 +5714312 +5714333 +9541133 +5133088 +5714299 +5714302 +5130557 +1910628 +1902175 +10662329 +12045866 +4299778 +5132917 +5132940 +5132956 +5132973 +5133008 +5133009 +9964857 +1951448 +5142842 +1951657 +1951660 +1951784 +5142903 +1952032 +1952043 +1952093 +1952730 +5143107 +6097225 +10045595 +1853064 +4529248 +1868334 +1868360 +5125118 +10597291 +5102424 +1941717 +1843888 +1843889 +5120577 +5120675 +5120767 +5121517 +5121613 +1842043 +5120396 +1842446 +1842508 +4301036 +4529738 +5120453 +1843444 +1843602 +10327658 +10619048 +5101371 +5101374 +10304313 +10607329 +11484123 +9114044 +1730978 +10458960 +10469497 +5101527 +1731750 +1731811 +1731812 +7628188 +1878688 +1878705 +1878751 +1878753 +1878789 +1878810 +1878837 +1878879 +1878895 +1878937 +1878958 +1879052 +1879253 +1879272 +1879274 +1879348 +1879398 +1879408 +1879413 +10366679 +10874932 +1879443 +1879452 +1879471 +10177508 +5126229 +5126352 +5126365 +5126404 +5126494 +5126517 +5126533 +10915497 +10922201 +1879939 +1879970 +1879975 +1880013 +1880019 +1880025 +1880044 +1880049 +1880062 +1880064 +1880078 +1880083 +1880088 +1880123 +1880132 +1880133 +1880156 +5126585 +5126637 +1880379 +1880381 +1880411 +4302319 +1880505 +1880623 +5126663 +10861282 +11968849 +1881079 +1881094 +1881111 +1881122 +1881139 +1881151 +1881166 +9819403 +4531687 +1881404 +5126697 +5126718 +5126721 +5126726 +5126729 +1881767 +1881822 +5126751 +1881917 +1881955 +1882089 +1882190 +1882195 +1882210 +1882218 +1882253 +1882316 +5126785 +5126892 +5126958 +5126963 +1882785 +1882786 +10107015 +1882812 +1882816 +1882818 +1882819 +10191785 +11891668 +1882927 +1882941 +1882958 +1882959 +1882960 +1882965 +1882977 +1882979 +8725248 +1883020 +1883038 +1883067 +5127089 +5127107 +5127116 +5127118 +5127130 +5127132 +1883829 +1883897 +1883968 +1883975 +8324720 +9864281 +1883993 +1884001 +1884213 +1884428 +1884435 +1884439 +1884453 +1884464 +1884479 +1884685 +9308930 +1884703 +1884774 +1884790 +4532122 +1884923 +1884997 +1885001 +1885158 +1885202 +1885229 +1885642 +5127170 +1885950 +1886251 +1886262 +5127203 +1886292 +8223165 +1886378 +1886398 +1886400 +1886419 +4302333 +5127209 +1886490 +1886501 +1886579 +1886583 +1886650 +1886729 +10510138 +1886868 +1886906 +1886929 +1886935 +5127222 +1887004 +1887024 +1887031 +1887285 +1887309 +1887341 +1887459 +10437872 +5127325 +5127335 +5127336 +5127337 +5127339 +5127350 +5127353 +5127354 +5127355 +5127357 +1887565 +1887634 +1888009 +1888047 +4531968 +1888306 +1888307 +1888336 +1888338 +1888410 +1888435 +5127378 +5127380 +1888579 +1888646 +1888695 +1888823 +12106417 +1888946 +1888955 +1889028 +1889267 +1889327 +1889536 +1889939 +5127521 +1890089 +1890187 +1890247 +11044778 +7543006 +1890368 +1890374 +1890404 +1890410 +1890417 +1890487 +1890491 +1890508 +1890512 +1890520 +1890560 +1890599 +1890622 +1890629 +1890654 +1890670 +1890730 +1890737 +1890783 +1890794 +1890800 +1890802 +1890854 +1890876 +1890885 +1890917 +1890934 +1890936 +6207059 +7431428 +1891035 +10034831 +1891048 +1891074 +1891167 +1891438 +1891473 +1891484 +1891488 +1891493 +10310835 +1891636 +1891755 +9884308 +1891932 +1892131 +1892193 +1892301 +1892302 +1892311 +1892320 +1892355 +1892420 +1892427 +1892433 +9059564 +1892477 +1892488 +1884326 +1884337 +10179389 +10259280 +10330376 +10482025 +10655790 +9181627 +9935837 +5771877 +7864212 +8146570 +8425580 +6120803 +6121218 +6133154 +8876855 +10106345 +10432184 +10444331 +5126675 +8858121 +9530406 +1886374 +1889717 +1889721 +1889745 +1889760 +1889828 +1889838 +1889850 +1889870 +5127631 +5127656 +5802339 +1887119 +1887122 +1887125 +1887178 +1886123 +1886207 +1846099 +1846103 +1846111 +1846112 +1846133 +1846141 +1846190 +1846229 +1846236 +1846240 +1846259 +1846261 +1831136 +1831168 +4525443 +9958241 +1853312 +1854143 +1854202 +11773446 +7946946 +5880063 +12239445 +4526094 +1858615 +1858637 +9777614 +1858659 +1858660 +1858674 +1858706 +9689122 +1858930 +1859046 +1859161 +1859287 +9760511 +8790054 +9675743 +9686431 +9746673 +9748079 +6133397 +1859929 +1859932 +9752950 +1860026 +4536472 +9700261 +1973458 +1973466 +5123046 +5124468 +1864905 +8877458 +9240588 +9355107 +9531432 +9547535 +9606779 +1865102 +1865107 +1865108 +11754954 +1865295 +1865299 +1865313 +1865319 +1865328 +1865333 +1865341 +1865345 +1865347 +1865348 +1865353 +5124557 +5124589 +5124595 +5806244 +1865555 +1865571 +1865590 +1865668 +1865709 +1865837 +1865839 +1865842 +1865853 +1865856 +1865862 +1865963 +1866003 +1866085 +1866123 +1866214 +1866311 +1866330 +1866336 +1866338 +1866341 +1866356 +1866496 +1866550 +1866570 +1866601 +1866838 +1866902 +1867021 +1867022 +1867029 +1867032 +1867037 +1867525 +1867535 +1867773 +10247309 +10591617 +1736271 +7734292 +1841764 +1841782 +1841813 +1841946 +10309331 +5123615 +1861456 +1861559 +1861604 +5123636 +1861759 +1861773 +1861783 +1861784 +1861823 +1861834 +1861836 +1861851 +11529603 +1861887 +1861892 +1861893 +1862044 +1862047 +1862049 +1862078 +1862087 +1862088 +1862091 +1862094 +1862123 +1862129 +1862139 +1862163 +1862181 +1862198 +1862207 +5123701 +1862363 +1862401 +1862475 +1862547 +1862569 +1862595 +1862624 +1862719 +1862757 +1862837 +1862841 +1862916 +1862917 +1862923 +1862928 +1863021 +1863025 +1863075 +1863080 +1863088 +5123775 +1863109 +1863151 +5123784 +7803585 +1863366 +1863405 +1863407 +4301348 +1863412 +1863416 +1863584 +5124049 +1863699 +1863701 +1863706 +1863714 +1863732 +1863734 +1863742 +1863757 +5124050 +1863856 +1863864 +1864156 +1864164 +1864165 +8956567 +1864204 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +1864377 +11141784 +5124118 +5124119 +5124136 +5124147 +5124172 +5124199 +5124200 +5124208 +5124219 +5124232 +5124249 +5124250 +5124268 +1864652 +5124332 +5124442 +5124443 +5124448 +5124450 +5124452 +5123954 +5123956 +5123968 +5123971 +5123979 +5123980 +5123983 +5123991 +5123999 +5124000 +8849480 +9513830 +1863978 +1863982 +1864004 +1864008 +1864021 +1864046 +1864070 +1864084 +1864090 +1864098 +1992573 +1992634 +5150053 +5150092 +1993643 +1992817 +1939460 +1953499 +5143232 +9053308 +9424853 +1953970 +1953998 +1954084 +1860108 +1860118 +1830031 +10650211 +5119482 +1830442 +1830457 +4525369 +4525420 +1754270 +5105642 +5105649 +5105656 +5105671 +1757839 +10174151 +10322104 +1830681 +10604375 +1953124 +1751497 +1751524 +1751557 +1751572 +1751575 +1751588 +1751590 +1751609 +1751625 +1751626 +1751670 +1751684 +1751690 +5105217 +5105218 +5105227 +1829287 +1829363 +1854920 +5122526 +5122538 +5122556 +5122571 +5122574 +5122581 +5122620 +5122646 +5122647 +5122668 +5122683 +5122691 +5122696 +5122702 +9015218 +1855358 +10055273 +1856005 +1856581 +1856668 +1856686 +1856701 +1856720 +1856730 +1857068 +1857143 +1857258 +1857380 +1857577 +1857626 +1857809 +1857828 +1857829 +1857840 +1857856 +1857863 +1857918 +1857924 +1857938 +1857945 +1857973 +1858100 +1858163 +5122876 +5122969 +1858283 +1856891 +10038125 +1937642 +1937655 +1937688 +1937691 +1937722 +1937739 +1937751 +1937758 +1937793 +1937803 +1937816 +1937819 +1937846 +1937885 +1937974 +1938016 +1938022 +1938059 +1938069 +1938081 +1938104 +1938112 +1938159 +4299870 +4299871 +8225376 +10600208 +12200213 +12211009 +1937110 +1937124 +1937136 +1937144 +1937162 +1937167 +1937527 +1938446 +1938955 +1938975 +1939056 +1939130 +1939134 +1939136 +5141321 +5141324 +5141333 +5141342 +4694313 +11561676 +12219250 +12229940 +12247359 +12253844 +12262562 +1856368 +1856394 +1856555 +1857690 +5123018 +1838811 +1838838 +1838911 +1833497 +1833499 +1833500 +1833626 +8546322 +5770913 +1835500 +5119905 +5119961 +5119969 +10304283 +1836899 +1837172 +1837900 +1838666 +1838960 +9895629 +1841159 +10511237 +5119893 +5119895 +4534796 +1800963 +5114431 +5114435 +5114436 +5114439 +1801896 +9313634 +9385576 +9454291 +9574801 +9579309 +9626037 +8924506 +10942408 +9239301 +9426252 +5114295 +5114317 +5114340 diff --git a/dev/releases/mambo_v3/presets/oceania.classes b/dev/releases/mambo_v3/presets/oceania.classes new file mode 100644 index 0000000..b4e8769 --- /dev/null +++ b/dev/releases/mambo_v3/presets/oceania.classes @@ -0,0 +1,2337 @@ +1992268 +1992283 +1992301 +1992315 +10648791 +1758114 +1758146 +10083877 +9840570 +9960252 +10190647 +10341307 +10435406 +1732978 +1733504 +1733507 +1733511 +1733535 +10155026 +1734851 +10730270 +1831974 +1831999 +1832023 +1832518 +1832533 +1832553 +1832569 +1832649 +1845271 +1845503 +1845586 +1846858 +1847066 +1847111 +1847622 +1847639 +8797017 +1849007 +1849010 +5122013 +1850156 +1850184 +1850633 +1850764 +1850781 +1850798 +1851039 +5806361 +11528968 +1851347 +1851543 +1852292 +10023115 +10498365 +11706893 +1850463 +9977181 +1829703 +1829776 +1829814 +1829866 +4705103 +4695719 +1828395 +1828400 +1828402 +8150089 +1828424 +1828426 +1828455 +1828456 +6196939 +1828471 +1828491 +1828540 +1828543 +1828544 +10707366 +10833593 +10882997 +5119346 +5119349 +5119350 +5119353 +5119354 +5119361 +10288636 +10639943 +1828826 +4695709 +1828976 +1837706 +1834428 +4684910 +4686897 +4686905 +4686907 +4686913 +1835848 +1835862 +1835874 +1835886 +1835897 +1835908 +1835928 +1838084 +1838978 +4685802 +1839600 +1839604 +4685468 +4684220 +4685557 +4685946 +1835460 +1845965 +1830812 +1830814 +1831458 +1831473 +1831499 +1831508 +1831565 +1831655 +1831667 +4708342 +5119868 +1839396 +10042504 +10094594 +10379915 +10531480 +10548275 +11919216 +9851221 +9985020 +6132868 +1760970 +1761572 +1761573 +1761751 +1761752 +1761820 +1762151 +5109196 +1762849 +1762852 +10256550 +1762887 +1763957 +1763976 +1763994 +1764043 +1764060 +5109782 +5109784 +5109786 +5109787 +5109788 +1764886 +1765653 +10099906 +10647358 +1766558 +1766560 +1766570 +6116699 +1767215 +10340332 +1772543 +5110490 +1774069 +5110546 +1777165 +1777166 +5110837 +11457930 +11609422 +4687991 +5110981 +5110993 +10403441 +9610080 +1779671 +1780716 +1780856 +1780857 +1780860 +1780862 +10154280 +1782185 +1782326 +1782328 +1783173 +1783991 +10157400 +5112407 +5112410 +1784646 +1785832 +1786317 +5112500 +1786958 +1786990 +1787003 +1787009 +1787010 +5112531 +1788553 +6132936 +7346446 +9494526 +1788881 +6132826 +1788986 +1789225 +10090168 +1789794 +1790257 +1790450 +10598407 +1790900 +1790910 +9967251 +9983957 +5112940 +1791379 +1791514 +1791698 +1791715 +5113352 +9504222 +9860902 +10267570 +1795657 +10573746 +5113925 +1796984 +10108671 +1797039 +6132979 +1798014 +1798018 +1798023 +1798025 +1798101 +5113950 +5884247 +11636323 +9440183 +9635978 +9923283 +10657151 +1798511 +10096855 +1787090 +1798529 +1798687 +1798768 +1798868 +4532352 +6115437 +8793873 +1799165 +1799167 +1799743 +1799757 +1803148 +1803197 +11909090 +1803781 +1803788 +1804246 +1804429 +1804430 +1804610 +10053130 +1804721 +1804727 +1804742 +10156470 +1805043 +1805505 +1805524 +1805806 +1806704 +1806814 +1806871 +1807473 +1807477 +1807478 +1807479 +1807480 +1807483 +1807485 +1807488 +1807490 +1807491 +1807503 +11900897 +1808232 +6198302 +5115777 +12214821 +1809244 +1809248 +10189965 +1809381 +10010700 +1810752 +1810851 +5116397 +1812437 +1812453 +1812465 +1812658 +1814913 +1814928 +10074808 +1815338 +1816029 +1816110 +1816264 +1816434 +1817065 +11703980 +1817160 +1817171 +1817217 +1817810 +1818413 +5118171 +10556853 +5118291 +1819970 +1820383 +1820401 +1820435 +10274769 +1821448 +10503495 +10106475 +9956017 +10270464 +9473918 +9559336 +10062933 +12180031 +12203022 +12216332 +9852545 +10496181 +10629533 +10004820 +10248689 +10454874 +10443878 +10637588 +10643533 +10166724 +10480609 +8363709 +10178326 +10469564 +8874633 +9621271 +5116504 +1818216 +9336001 +1781413 +1781428 +1781598 +1763761 +6115388 +1816634 +1816648 +1816673 +6133297 +1774598 +1774604 +1774618 +1774654 +1774691 +1774712 +1768630 +5111643 +1766892 +1813468 +10164453 +1768190 +9400916 +1768462 +9989156 +5113001 +5113036 +5109796 +1821464 +1821468 +1821542 +1822003 +1804120 +1804148 +6116076 +1782507 +1783715 +9918092 +1775796 +4687933 +4687934 +4687935 +6116646 +1820137 +1799821 +1781531 +1798331 +1798335 +1784936 +1785072 +1765999 +1766007 +10330198 +10598038 +11513188 +11612469 +1786597 +4687389 +5884188 +9935660 +5110013 +10196956 +10392889 +1811455 +1811462 +1811465 +1796941 +1782310 +12266659 +5108421 +1771903 +10097776 +4301309 +5112440 +1795542 +1860849 +1992434 +1992489 +1731886 +1731890 +1731906 +1731923 +1731926 +1731927 +1731980 +1732001 +1732005 +1732031 +1732033 +1732044 +1732052 +10640865 +9950697 +1833779 +1833782 +1833794 +1834524 +1834547 +4685588 +4685595 +1834793 +1835086 +1835348 +1835814 +4529064 +1837724 +1837726 +1837727 +1837968 +1838058 +1838065 +1838071 +1839658 +1839714 +1839721 +4684986 +1840346 +1841095 +1831752 +1852832 +1852859 +1860259 +1860260 +5123339 +10361029 +10625116 +5123419 +5880040 +5880041 +6132546 +10208422 +1853222 +10005632 +10433914 +11756119 +1869707 +1869714 +1870237 +1870450 +1870452 +1870459 +1870506 +1870509 +1870703 +1870988 +1871171 +1871333 +1872169 +9969513 +1872255 +1872470 +1872735 +1872812 +1872827 +1872850 +1872873 +1872901 +1873049 +1873079 +1873222 +1873285 +1873290 +1873291 +1873373 +1873620 +9858922 +1873773 +1873843 +1873890 +5125569 +5125591 +5125600 +5125602 +5125629 +1874146 +1875478 +1875534 +1875554 +1875584 +1875844 +1876479 +1876542 +10356445 +1876876 +10442332 +1876922 +1876955 +10142569 +1877406 +1877453 +5125943 +1877941 +1877988 +1878173 +1878406 +1878470 +1878490 +9835867 +1888454 +1890056 +1890065 +10211808 +5884888 +10526954 +10065676 +10129011 +10279983 +11591775 +9857679 +10423263 +1748780 +1836906 +1836907 +1940575 +1941294 +1736623 +5102683 +1736995 +1737015 +10146436 +10469532 +1737115 +1737131 +1737182 +1737187 +1737847 +1737893 +1738045 +1738081 +1738192 +1739051 +1739128 +1739220 +1739316 +1739553 +1739567 +1740586 +1740797 +1740828 +12259151 +1741074 +9826405 +1741084 +11906255 +10250474 +1741593 +1741820 +1741826 +1743182 +1743184 +1743319 +4707896 +4707900 +10073044 +1743680 +9867379 +1744998 +1745019 +1745307 +9586705 +1745957 +1746000 +1746462 +1746512 +4707848 +1747068 +1747215 +1747222 +6219423 +10021059 +10023049 +10080502 +10358334 +10476233 +1747639 +1747672 +1747814 +1747914 +1747924 +10355898 +1748103 +1748425 +1748442 +1748473 +1748486 +1748518 +1748648 +1748661 +1748751 +10185271 +9952043 +10302660 +10530383 +9909775 +10606887 +10624577 +10153630 +10549715 +12057008 +10462612 +11688440 +1738196 +5138967 +5138984 +1921010 +10581870 +1921123 +1921262 +1921263 +1921300 +5138069 +1922244 +1922745 +1923744 +1923782 +4708972 +4708973 +4708977 +1924362 +1924390 +1924558 +1924713 +4300393 +1925555 +4708984 +1925628 +1925711 +5138732 +5138743 +5806391 +1925877 +1926436 +1926448 +1926460 +1926574 +4300259 +1927274 +4709107 +1927707 +1927894 +1927895 +1927897 +1927900 +1928018 +4708927 +5139050 +1928382 +1928829 +1928849 +1928915 +4709030 +1928923 +5139357 +5139524 +5139673 +1931189 +5139914 +1931889 +1931943 +1931956 +1931958 +1931979 +4709051 +1932159 +1932166 +1932172 +1932206 +1932246 +1932273 +4709095 +4708995 +11636481 +1932563 +7346444 +1932908 +4709133 +5806412 +1933647 +5138929 +4709102 +4709147 +1752534 +1752536 +1752537 +1752539 +1752545 +1752547 +1752903 +1752946 +1752947 +1753461 +11014495 +1753902 +1753906 +10368234 +9880359 +10203493 +9959898 +10560849 +10988070 +1919176 +1919340 +1919342 +1919344 +1919348 +1919381 +1919419 +1919421 +1919432 +1919444 +1919540 +1919626 +1919652 +1919744 +1919758 +5137808 +5137819 +5137828 +5137832 +5137833 +5137842 +5137849 +5137850 +5137854 +1920496 +1920534 +1920535 +1920538 +1920541 +5137929 +5137946 +5137949 +1920621 +1749124 +1749529 +1749531 +1749664 +1750131 +1750326 +5104822 +5104903 +5105081 +1750934 +1751024 +1828310 +1828317 +9882683 +9451208 +1758461 +1758596 +1758602 +9943941 +10118678 +1962159 +1962162 +9875141 +1970460 +1970463 +1970473 +1970485 +1964995 +1964996 +10295646 +1954236 +1954514 +1954522 +1954911 +10634980 +5143586 +9213204 +10217455 +1955039 +1955093 +1955153 +1955199 +1955202 +1955271 +1955272 +1955318 +1955413 +1955416 +1955422 +1955736 +1955737 +1955743 +1955745 +10560674 +11720357 +1955753 +1955755 +9593393 +1955763 +10003902 +10048667 +10062202 +10075732 +10132475 +10177276 +10341059 +10363151 +10398979 +10434798 +10456933 +10457796 +10471477 +10528420 +10623003 +11451126 +11468089 +11638437 +1955899 +10078526 +10360329 +11690145 +1956384 +9234402 +10257899 +1956416 +1956955 +1956958 +1956963 +1956978 +1956983 +10167252 +1957058 +1957062 +1957333 +1957413 +1957523 +1958454 +1959341 +1959379 +1959500 +1959595 +1959782 +1960004 +4702961 +1960106 +1960128 +1960201 +1960411 +5144115 +5144129 +1960521 +1960524 +1960940 +1960941 +1961180 +5144204 +1962656 +1962657 +1962659 +1962689 +1962829 +1962841 +1962842 +1962934 +1963297 +5144353 +1963782 +1964066 +1964137 +1964141 +1964143 +1964144 +1964151 +1964153 +1964155 +1964158 +1964174 +1964305 +1964331 +1964565 +1964702 +10184940 +10523304 +1965643 +1965649 +1965650 +9952367 +9976926 +1966185 +5144505 +1966977 +1966978 +5144553 +1967703 +10174909 +10268303 +10379201 +1967716 +9833933 +1968115 +1968131 +5144554 +5144558 +5144633 +1969104 +1969568 +11858774 +1969581 +6133643 +1970093 +1970094 +1970108 +1970145 +1970148 +1970150 +1970159 +1970265 +9939530 +10085335 +10109201 +10505033 +10054019 +5144806 +5144937 +5144942 +5144976 +5145079 +5145422 +5145495 +5145503 +1972407 +4702783 +4702784 +1972606 +9119710 +5146262 +11533770 +1972797 +1972800 +1972806 +1972903 +5146294 +1973719 +5146426 +5146456 +5146472 +5146578 +5146719 +5146805 +5146856 +5146880 +5146937 +5147046 +5147109 +5147121 +5147150 +5147160 +5147225 +5147522 +1975164 +1975212 +1975248 +1975249 +9975134 +10018221 +10572729 +9875420 +1975704 +1975722 +1976123 +1976142 +1976213 +1976243 +1976303 +1976341 +1976342 +1976345 +10118849 +9183738 +10089194 +1976890 +1976891 +1976933 +1976934 +1976939 +1976941 +1977350 +5147917 +5147923 +5147930 +5148066 +5148096 +5148097 +5148214 +5148223 +1977759 +1977764 +1977767 +1977773 +10188228 +1978082 +1978274 +1978281 +1978282 +1978283 +10058263 +10626099 +10530515 +1978904 +1978915 +1978919 +1978937 +1979041 +4702599 +4702603 +4702609 +1980035 +1980041 +1980044 +1980055 +1980063 +1980068 +1980491 +1980659 +1980694 +10378314 +10571987 +1980821 +1980827 +10860751 +11660632 +1982024 +1982033 +1982043 +1982047 +1982055 +1982071 +1982072 +1982085 +1982100 +1982102 +1982103 +1982120 +1982148 +1982221 +12116722 +9488754 +5149182 +10199372 +1984913 +1985167 +1985181 +1985228 +1985267 +1985490 +6133659 +1985809 +1985816 +1985826 +1985931 +1986101 +1986223 +4702731 +1986650 +1986693 +1986720 +1986774 +1986846 +1986942 +1987203 +1987747 +1987766 +1987775 +1987785 +6133591 +10533589 +5149369 +5149370 +5149371 +5149387 +9987116 +1987855 +4702892 +4702893 +4702911 +4702912 +1988302 +1988354 +1988360 +1988361 +1988362 +1988370 +1988376 +1988382 +1988384 +1988820 +1988894 +1989170 +1989181 +1989282 +1989283 +1989377 +1989522 +1989538 +9906229 +1990164 +1990165 +1990167 +1990178 +11465014 +1990255 +1990256 +1990371 +1990998 +1991310 +1991394 +1991468 +10155932 +5149873 +5149880 +5149940 +5149941 +5149986 +1992167 +5880539 +9577234 +10224300 +9830270 +11799357 +10864093 +4702878 +10078800 +8501203 +9629450 +6133635 +10175639 +9617411 +10438474 +10411202 +10146771 +1954338 +1954344 +1954346 +1954351 +1954353 +1954356 +1954359 +10210935 +10263383 +5149753 +1963532 +1942060 +1942067 +1942618 +1942621 +1942623 +1942636 +1942641 +5141650 +1942674 +1943089 +1943090 +1943096 +1943101 +4689912 +1943236 +1943250 +1944106 +1944113 +4689963 +1944456 +1944462 +1944520 +1944523 +1944618 +1944619 +1944627 +1944629 +1944631 +1944635 +1944638 +4689905 +1945122 +1945225 +1945694 +1945715 +1945863 +1945893 +5142067 +1946695 +1946720 +1946737 +1946763 +1947446 +1947449 +1947459 +1947491 +1947492 +1950272 +1950591 +1951157 +1951170 +5715127 +5142749 +1758727 +1758839 +1758850 +1760172 +1760173 +1760175 +1761788 +1761789 +1762657 +1762900 +1762902 +1764178 +1764553 +5109848 +5109855 +5109870 +5109872 +5109882 +8352161 +1765508 +4687817 +4687827 +7800469 +1765898 +11034779 +1767368 +1767381 +1767430 +10575632 +10597823 +5772169 +5802396 +5883925 +9356770 +1768546 +1768554 +1768557 +1768560 +1768972 +1769095 +1769114 +1769209 +1769225 +1769245 +1769250 +1769260 +1769271 +1769272 +1769283 +1769293 +1769294 +1769298 +1769302 +1769308 +1769310 +4688049 +4688075 +4688092 +4688098 +9493016 +1771357 +1772668 +4687565 +1774797 +4301304 +6115946 +1774918 +10032003 +1775279 +1775631 +1776182 +1777120 +5111064 +5111195 +5111214 +5111249 +5111535 +5111600 +5772222 +1779269 +1779276 +1779382 +1780072 +1780330 +5111967 +1782354 +1782466 +4687661 +1784513 +5112414 +1784761 +1785145 +1785149 +1785166 +1785181 +1785217 +1785220 +1785314 +1785329 +1785725 +7400814 +5112457 +5112460 +5112461 +5112464 +5112465 +5112467 +5112469 +5112474 +5112475 +5112480 +5112481 +1787165 +1787185 +1787226 +4687681 +10161728 +1788856 +1789637 +1789957 +4687906 +1791793 +1791837 +4687930 +1791862 +1792996 +5113394 +1793661 +1794425 +1795068 +1795110 +1795597 +4688166 +4688169 +4688172 +10690739 +10700540 +10706419 +10716234 +10732033 +10741837 +10747908 +10799294 +10814936 +10824750 +10840540 +10840565 +10850393 +10850415 +10866199 +10891794 +11539735 +11858666 +1796791 +1798084 +1802776 +8729319 +4532269 +10659737 +6132989 +10378302 +9890366 +9910243 +10967713 +11054256 +10121804 +5109270 +5109349 +5109418 +5109437 +4688142 +1792555 +1792560 +8108800 +1770849 +1771203 +1771245 +1771296 +1771308 +1765751 +1765752 +5113853 +5108665 +5108671 +5108724 +5108737 +5108787 +1759351 +1789530 +10370112 +11437060 +11615549 +4532208 +4532266 +6115772 +6115820 +6115822 +6115830 +8103163 +9893740 +1782277 +1781248 +1767259 +1792814 +9325654 +10458175 +10683012 +10658576 +1822257 +1822916 +1822917 +1823493 +5118798 +1824280 +1826020 +1825238 +1825336 +1825950 +1825956 +1826017 +1826823 +1827429 +1827507 +11905965 +1827802 +1827810 +1827826 +1827829 +10194663 +10551923 +9921001 +5127748 +5806166 +1892821 +1893241 +1893660 +1893699 +1893787 +4704279 +1894054 +7712938 +5128224 +5128225 +1895448 +1895956 +1895992 +1896304 +11701883 +5129266 +4299370 +5714367 +5806175 +5806176 +5806177 +1898970 +4704400 +4704401 +4704404 +4704407 +1899931 +1899932 +1899940 +1899943 +1899947 +1899950 +1899956 +1900872 +1900939 +1901669 +5130369 +5130439 +5130456 +5130464 +5130476 +1902106 +1902108 +1902233 +1902244 +1902248 +1904728 +1904798 +1904884 +1904996 +1907569 +1907683 +1908700 +1908713 +1909216 +10656625 +1909436 +1909453 +1909457 +4704352 +4704356 +1909659 +1909854 +1910753 +1910809 +1910812 +1911755 +1913091 +1908108 +1915031 +1915144 +11535847 +5135839 +5136594 +5136713 +5136790 +5136868 +5136939 +5137085 +5137128 +5137257 +5137330 +9251096 +4704316 +4704500 +4704501 +5131493 +5133088 +5806167 +6100725 +7642610 +1910576 +1910628 +1910629 +1910648 +1910662 +1951492 +1951874 +1952857 +1853190 +10548683 +1735168 +1735391 +1735398 +5102423 +1735273 +5102432 +1941683 +1941702 +1941713 +5120675 +5121177 +5121613 +8273859 +1843313 +1843326 +1843331 +1843362 +1843370 +1843379 +1842119 +1842124 +5120341 +5120343 +5120357 +5120368 +5120379 +5120396 +1842508 +11854390 +4529738 +9755262 +1843429 +1843485 +1843590 +1730519 +1730543 +1731097 +1731221 +11431507 +10535684 +11563728 +11904618 +5101502 +10049887 +10134558 +10307487 +5806352 +5806353 +10629470 +8008237 +1878744 +1878826 +1879227 +1879339 +1879340 +1879405 +1879408 +1879465 +1879471 +10851840 +10857326 +12231152 +5126231 +5126240 +5126241 +5126259 +5126284 +5126287 +5126292 +5126315 +5126332 +5126344 +5126357 +5126376 +5126381 +5126396 +5126397 +5126398 +5126434 +5126445 +5126449 +5126454 +5126458 +5802331 +5802333 +10489219 +5126635 +5126637 +1880352 +1880353 +1880439 +1880852 +1880858 +1880982 +1880986 +1881018 +1881019 +1881031 +1881041 +1881089 +1881122 +1881132 +1881151 +1881157 +9819403 +1881228 +1881320 +1881329 +1881336 +1881340 +10046436 +10348110 +10441857 +1881424 +1881485 +1881504 +1881515 +10751438 +1882297 +1882215 +1882253 +1882266 +1882272 +1882355 +5126798 +5126843 +5126866 +5126870 +5126889 +5126905 +5126916 +5126922 +5126946 +5127020 +5127024 +5127039 +5127044 +5127045 +5127054 +1882753 +1882767 +1882771 +1882773 +1882884 +1882905 +10156181 +10643403 +1882965 +10464411 +1883024 +1883028 +1883067 +4687288 +1883394 +5127097 +10069243 +1883775 +1883881 +1883943 +1883968 +1884228 +9294363 +10171108 +10209845 +1884434 +1884437 +1884449 +1884461 +1884479 +9837762 +1884503 +1884531 +1884539 +1884595 +1884607 +1884610 +4687228 +6120980 +1884816 +1884890 +1884909 +1884936 +1885263 +1885569 +1885572 +1885605 +1885630 +6133182 +9957790 +1885702 +1885763 +1885836 +1885919 +1885945 +1886088 +1886241 +1886251 +1886362 +1886526 +10610809 +1886720 +1886726 +1886729 +10613467 +1887036 +1887052 +1887054 +1887462 +1887580 +1887585 +1887686 +1887691 +1887894 +1888123 +1888537 +5127394 +1888906 +1888913 +1888926 +1888958 +1889043 +1889050 +1889071 +1889074 +1889239 +1889242 +1889249 +1889272 +1889277 +1889356 +1889381 +1889552 +1889563 +1890031 +1890187 +1890247 +10058481 +1890320 +1890335 +7543006 +5127530 +10180624 +1890410 +1890670 +1891236 +1891299 +10071588 +1891308 +1891339 +1891533 +1891583 +10072800 +1892458 +1892462 +10446295 +6133140 +5771877 +10117959 +10227418 +4532125 +9967529 +9900218 +10145421 +10348945 +10521368 +10579230 +10594210 +6120803 +6133232 +6121010 +10257673 +10556366 +6121218 +10502505 +10397209 +6133154 +10462708 +6133158 +8876855 +10063575 +10375403 +1886374 +1889769 +1889833 +1889850 +1889875 +5127592 +5127595 +5127629 +5127638 +5127644 +5127669 +5127675 +5127698 +5802339 +10245924 +10769553 +1887126 +1888638 +1888639 +1886123 +1883885 +1880275 +1880286 +1880293 +1880305 +1880310 +1880316 +1880318 +1880321 +1880350 +1831097 +1831136 +4708183 +1731292 +5122307 +1853578 +10222583 +1853855 +1854019 +1854021 +10452421 +10546013 +11428453 +1854028 +1854249 +5122430 +5122455 +5806333 +1854906 +1858615 +1858637 +1858674 +1858698 +1858718 +1858762 +1858930 +1858973 +1859061 +4536292 +9768621 +9590272 +9801765 +9760511 +1859453 +9675743 +9749806 +6133397 +1859932 +1860026 +5123118 +5123137 +5123276 +6097269 +9759340 +1864897 +1867788 +10883659 +1868025 +5124716 +7734292 +10019169 +1861451 +1861456 +1861457 +1861458 +1861488 +1861644 +5123636 +5123663 +1861951 +1861953 +1861958 +1862026 +1862293 +1862331 +1862363 +1862370 +1862394 +1862401 +1862403 +1862414 +9836014 +1862434 +1862441 +1862449 +1862455 +1862475 +1862481 +1862516 +1862521 +1862526 +6106708 +1862757 +1863034 +1863051 +1863384 +9899724 +1863467 +1863880 +1863955 +1864135 +4703479 +5124080 +8133328 +11954157 +5124332 +5124423 +6106759 +5123837 +5123852 +8810912 +1992634 +9893936 +1992889 +1992907 +1992936 +1992938 +1992976 +1993021 +1993045 +1993496 +6133769 +10022517 +1953217 +6132712 +1953423 +10132811 +10644798 +11503857 +1954025 +5143279 +1954120 +1830419 +1830435 +1754619 +1754803 +1754806 +1754814 +1757853 +4689394 +1830669 +8254441 +1855804 +1855807 +1855813 +1856005 +5122779 +1856348 +1856374 +1856516 +1857020 +1857033 +1857068 +1857097 +1857143 +1857180 +1857213 +1857233 +1857241 +1857258 +1857295 +1857315 +1857380 +1857385 +1857410 +1857626 +1857828 +1857829 +1857840 +1857882 +1857900 +1857935 +1857948 +1858100 +1858163 +1858283 +1858404 +1858411 +1858488 +1858523 +1858526 +1858557 +1856891 +1856893 +1937665 +1937698 +1937712 +1937745 +1937769 +1937819 +1937856 +1937988 +1938069 +1938074 +1938088 +1938129 +5141177 +5141187 +5141252 +5141254 +5803065 +1937444 +1937474 +4693675 +1937618 +1939131 +1939156 +1838251 +1838255 +1838276 +1838289 +1838297 +1838304 +1838308 +1838331 +4685893 +1833518 +1833523 +1833525 +1833531 +1833532 +1833535 +1833539 +4685097 +1833477 +4685485 +1833562 +4686368 +1833600 +1833653 +1833664 +1833834 +1834019 +1834078 +4685138 +4685219 +4685271 +1834497 +1834850 +1835082 +1835121 +1835123 +1835128 +1835345 +1835555 +1835609 +1835612 +1835635 +1835644 +4685116 +1835790 +1835821 +1835828 +4686483 +1836871 +1836873 +1836899 +4685431 +4685448 +1837053 +1837057 +1837150 +1837159 +1837172 +1837569 +1837572 +4686743 +1837857 +1837870 +1837894 +1838034 +4685065 +1838218 +1838224 +4685299 +4685306 +1838333 +4686617 +4686620 +4686621 +4686628 +1838626 +1838629 +1838633 +1838635 +1838641 +1838649 +8958353 +1838958 +1838960 +4528702 +4685566 +4685576 +1839317 +1839323 +1839325 +1839333 +1839370 +1839494 +5120053 +5120058 +5120063 +4685645 +4685650 +4685653 +4685655 +4685662 +4685669 +4685678 +4685683 +1840258 +1840260 +1840726 +1840774 +1840776 +1840796 +1840812 +1840844 +1840974 +4686042 +4686055 +4686111 +4686133 +4686164 +4686190 +4686214 +4686264 +4686266 +1841101 +1841180 +1841183 +1841188 +1841215 +1841219 +1841221 +1841302 +4685972 +5802248 +5802256 +5802257 +5802259 +4686039 +4686015 +4686016 +4686018 +4686022 +4686027 +4686029 +4684521 +4684591 +4684789 +4684888 +4684893 +4684925 +4684958 +4685629 +4685631 +4685778 +4685810 +4685980 +4685981 +4686355 +4686385 +4686386 +4686531 +4686532 +4686656 +4686697 +4686702 +4686844 +4686956 +10213314 +10225227 +1800441 +1800473 +1800522 +1800562 +10010361 +9859868 +9883274 +1800691 +1800843 +1800844 +5114394 +5114409 +9267364 +10240592 +1801170 +5114515 +1801303 +1801305 +1801316 +1801432 +1801461 +1801490 +1801519 +10026605 +10066605 +10088502 +10372377 +10448500 +10573425 +11496990 +11508472 +11594541 +11596898 +11698552 +11836409 +11871044 +1801787 +1801903 +1801922 +1802978 +4534792 +6112610 +6112661 +6133811 +9960072 +1802090 +1802702 +1802830 +1802833 +1802888 +1802998 +1803014 +1803021 +1803022 +1803035 +1803039 +1803078 +1803091 +9485481 +10942408 +10264193 +5114303 +5114353 diff --git a/dev/releases/mambo_v3/presets/south_america.classes b/dev/releases/mambo_v3/presets/south_america.classes new file mode 100644 index 0000000..9cd4725 --- /dev/null +++ b/dev/releases/mambo_v3/presets/south_america.classes @@ -0,0 +1,1683 @@ +12170988 +11871190 +1921992 +1921993 +1922015 +1922024 +5140603 +5140627 +1934331 +1934447 +1934570 +1934715 +1934991 +1935078 +1935295 +1935301 +1935343 +1935346 +1935350 +5140969 +5140980 +1936161 +1936233 +1936312 +1936378 +1936388 +1936391 +1936565 +1936566 +5141085 +1936649 +10132775 +10331171 +9620499 +10075196 +1868535 +10517417 +1868575 +1992315 +1732901 +1845314 +1845385 +4528100 +1846849 +1850798 +1852320 +5110390 +5108951 +1761838 +8331687 +8379616 +9354496 +1763156 +1763163 +1763184 +1763199 +1763223 +1763256 +1765182 +8028211 +5110044 +1766880 +1767307 +1767499 +1768283 +1770038 +1770044 +1770263 +5110326 +5110327 +5110533 +1776163 +1777034 +1777052 +1777075 +1777179 +1777737 +1777942 +5110891 +9610080 +1779740 +1781029 +9630748 +1781944 +1781946 +5112080 +1782211 +8384839 +1786217 +1786219 +1786247 +7480993 +1787464 +11495556 +5112542 +11890681 +10295290 +1788372 +5112626 +1790230 +1790240 +1790246 +1790248 +1790257 +1790281 +1790287 +1790308 +1790787 +1790832 +1790945 +7785540 +5112843 +5112892 +5112990 +1792827 +10850929 +1794637 +1795042 +1795049 +9622322 +7598729 +1798427 +4532352 +8150450 +8793873 +1803163 +1803218 +1803266 +1803628 +1804409 +1804522 +5115046 +1805184 +1805197 +1805271 +1805691 +1805717 +1805955 +1805976 +1805982 +1806064 +1806075 +5115406 +1806690 +1806702 +1806871 +1806872 +1806878 +1806887 +5115500 +1807353 +1807355 +1807514 +1807553 +1807569 +1807787 +1808648 +1809066 +1809127 +1809294 +1809348 +1809491 +1809499 +1810025 +1810145 +1810172 +1810318 +5116145 +5116198 +5116238 +5116252 +5116293 +9350900 +1810824 +1810846 +1810866 +1810867 +7535515 +1811019 +1811026 +1811081 +5116423 +1812573 +1812881 +1814182 +1814323 +1814336 +1814357 +1814359 +5117245 +5117347 +5117348 +5117361 +1814658 +1814665 +1814692 +1814823 +1814863 +8933773 +1815373 +5117413 +5117414 +5117430 +5117462 +5117463 +5117553 +1815856 +1816570 +5117685 +5117687 +1817086 +1817734 +11725616 +1817808 +1817852 +1817854 +1818252 +1818454 +1819310 +1819873 +11904675 +10395440 +10214972 +10830546 +10851228 +12194283 +8429622 +1781420 +1793538 +1813413 +1760257 +8177591 +1775796 +1811948 +5117941 +5884258 +7716829 +8299504 +8968321 +1784959 +1785024 +1785072 +5884188 +6117485 +7611914 +7924383 +1780646 +1780668 +1777463 +1777471 +1840656 +1860184 +5123542 +1870037 +1870308 +1870450 +1870727 +1870988 +1871175 +1871407 +8766638 +1872452 +1872514 +1872873 +1872901 +1873079 +1873319 +1873398 +7372375 +1873753 +1875478 +1876542 +1876665 +5125916 +1877282 +1877443 +1877988 +1878406 +1878490 +5125525 +5143284 +5143285 +5131957 +4525777 +1737847 +1740623 +8094357 +1741826 +10407953 +1935498 +4299071 +8345567 +9457324 +9622955 +1936026 +1936810 +1936859 +1934172 +1920844 +1920900 +1920923 +10581870 +10657453 +1921123 +8825450 +1922455 +10278292 +1922637 +1922739 +1922849 +1922865 +1922867 +1922868 +1922889 +1922890 +8913017 +1923678 +1923679 +1923997 +1924176 +10436850 +1924754 +8837974 +8840017 +8992718 +9157410 +9478718 +1924759 +10120854 +10307383 +10411472 +1925429 +4300384 +4300393 +8389961 +8904480 +1925922 +1927988 +1927992 +1927996 +1928009 +4300406 +1928584 +1928589 +1929046 +1929049 +1929129 +5139578 +1929966 +1930079 +1930146 +1930167 +1930178 +1930179 +1930181 +1930270 +1930288 +1930289 +1930361 +1930410 +1930422 +1930451 +1930466 +1930539 +1930563 +1930621 +1930653 +1930654 +1930728 +1930772 +1930779 +1930830 +1931116 +1931119 +1931122 +5139864 +1931310 +5139898 +1932172 +1932175 +1932576 +5140033 +5140054 +5140056 +1933260 +5140534 +1935869 +1935872 +1935888 +1935899 +1935901 +1935912 +1935916 +1935925 +1935935 +10176954 +10573187 +9867272 +9960318 +5139928 +4300268 +9469139 +10068544 +9975698 +9156458 +11554226 +1751980 +1751986 +1752034 +1752109 +9941073 +1752477 +1752775 +1752825 +11507608 +5105367 +5105379 +5105380 +5105447 +5105491 +5105553 +1753603 +1753604 +1753661 +1753833 +1753864 +1753871 +12181811 +12226416 +12251247 +1919125 +1919128 +1919129 +1919130 +1919146 +1919149 +1919173 +1919233 +1919235 +1919239 +1919245 +1919267 +1919277 +1919282 +1919289 +5137540 +1919646 +1919649 +1919652 +1919653 +1919656 +4701298 +4701336 +7661785 +5137553 +10703948 +1919937 +1919939 +1919943 +1919945 +1919947 +1919949 +1920192 +1920266 +1920275 +5137817 +5137819 +5137851 +1920426 +1920431 +1920437 +1920461 +1920463 +1920506 +1920552 +1920571 +1920574 +1920581 +1920586 +1920691 +5137969 +1920803 +1920809 +5137588 +5137593 +5137608 +12191141 +12206386 +12234544 +12236627 +1955694 +1956098 +1956099 +1958121 +1959637 +1960090 +1960255 +1960268 +1960315 +1961155 +1961361 +10650351 +1962051 +1962086 +1962118 +1962120 +1962895 +4302252 +10084195 +1963425 +1963433 +1963633 +5144363 +1964698 +1965697 +1965887 +1966088 +1966185 +1967346 +1968313 +1968315 +1968321 +1968324 +1968538 +1968942 +10088253 +5145466 +5145560 +1972101 +5146179 +5146253 +1973665 +10404426 +5146820 +9590066 +1975287 +1976073 +1976255 +1976651 +1976746 +1977003 +1978268 +1978464 +9243264 +5148280 +1978958 +1978959 +1980245 +1981160 +1981252 +1981951 +1981959 +1981973 +5148576 +5148593 +5148766 +1985485 +5149222 +5149237 +1985647 +1985952 +1986004 +1987330 +1989582 +1990594 +1990998 +1991405 +1991410 +12010643 +5880539 +9366016 +9438677 +9497623 +9619088 +9237031 +10464824 +10221195 +10288719 +9391442 +5149746 +5149753 +5149811 +5150002 +5150027 +5142358 +12200261 +11654707 +11892494 +10713577 +12252926 +11423843 +11729494 +12239491 +1942098 +1942141 +1942170 +1942206 +12286003 +1942327 +1942370 +1942372 +1942378 +1942416 +1942455 +1942509 +4301749 +1942558 +5141662 +1942854 +1942982 +5141763 +1943475 +1943563 +1943571 +1943588 +1943823 +1943824 +1943830 +1943832 +1943901 +1943936 +12198522 +12243973 +1943962 +1944004 +1944273 +1944275 +1944283 +1944286 +1944314 +1944324 +1944329 +1944335 +1944343 +1944361 +1944374 +1944421 +1944574 +1944580 +1944744 +1944769 +4301934 +1944815 +1944832 +5141913 +6205994 +9551544 +1944977 +1945302 +1945312 +1945396 +1945462 +1945476 +1945477 +1945874 +4301942 +1946074 +1946097 +1946163 +1946167 +1946174 +1946177 +1946290 +1946310 +1946327 +1946333 +1946432 +1946469 +1946520 +1946544 +1946550 +1946577 +1946582 +1946756 +5142086 +1947021 +1947037 +1947048 +1947049 +1947055 +1947147 +5142176 +1947402 +1947506 +1947568 +1947587 +1947588 +1947597 +1947890 +1947894 +12208168 +1947973 +1947979 +1947980 +1948042 +1948046 +1948158 +7603634 +1948439 +1948446 +1948521 +1948630 +1948826 +1948858 +1948861 +1948883 +1948890 +8792353 +1948947 +1949049 +1949068 +1949105 +1949219 +1949322 +1949451 +1949492 +10574663 +1949512 +1949515 +1949592 +1949621 +7726809 +9395000 +10202439 +1949687 +5142424 +5142436 +1950017 +1950019 +1950024 +1950044 +1950052 +1950133 +1950153 +1950197 +1950243 +1950567 +1950578 +1950654 +1950767 +1950856 +1951062 +1951072 +12231344 +1951097 +1951103 +1951121 +1951125 +1951133 +5142822 +5142825 +5715127 +12180041 +5142829 +5977260 +1945374 +12175154 +12263736 +7911151 +1760309 +1761892 +1764686 +1764690 +1764693 +1765155 +5109845 +5109850 +5109855 +5109881 +5109954 +5109958 +1766285 +1767052 +1767571 +1767579 +9511345 +5772169 +1767719 +1770659 +1774262 +9550265 +6115953 +1777727 +5111546 +1780309 +1780390 +1780407 +1780437 +1780440 +1782031 +1782422 +1782424 +1783811 +1784582 +5112414 +1785168 +1785331 +1785462 +7400814 +1786360 +1786733 +1788677 +1790072 +1791331 +1791862 +1791870 +5113365 +1792817 +9539292 +1792996 +1796276 +7383338 +7689966 +7882824 +8405656 +9327259 +1796310 +1798288 +1799900 +10446574 +8729319 +8818378 +7717385 +10118643 +9875111 +9342344 +11615055 +11626773 +1792564 +1774929 +1770955 +1771245 +5108665 +1797903 +6115793 +1824189 +1825373 +1825391 +1826181 +10115073 +1826772 +1827145 +10043566 +10266782 +1896863 +1903598 +1892915 +1908317 +1908337 +1908339 +1892509 +1892634 +1892729 +1892736 +1892742 +1892746 +1892759 +1892761 +1892770 +4299095 +8941801 +1892837 +1892851 +1892855 +1892856 +1892858 +1892863 +5127814 +1892944 +1893266 +5128005 +5128007 +5128011 +5128034 +1893337 +1893377 +1893381 +1893480 +10653980 +1894074 +1894082 +1894085 +1894087 +1894088 +1894329 +1894342 +1894349 +10412261 +1895176 +1895185 +1895203 +1895250 +1895709 +9192882 +1895733 +1895745 +1895768 +1895773 +1895789 +1895809 +1895818 +1895820 +1895829 +9016382 +1895838 +1895886 +1896087 +1896126 +5128398 +5128423 +5128432 +5128433 +5128438 +5128446 +5128475 +5128488 +5128491 +9981187 +1896316 +1896614 +1896628 +10465059 +1896658 +1896749 +1896754 +10353400 +1896756 +1896763 +1896774 +1896876 +9361954 +1896932 +5129251 +9590057 +11701883 +5129257 +5925238 +8367663 +1897977 +1897980 +1897985 +1897990 +10073321 +10365587 +10375186 +10401396 +1898077 +1898133 +1898143 +1898174 +1898200 +1898203 +10321900 +10208801 +10265559 +4299370 +8961830 +9396180 +9563837 +1898348 +1898350 +1898352 +1898358 +1898367 +1898368 +1898370 +1898374 +1898391 +1898402 +1898424 +6228464 +5129473 +5129479 +5129480 +5129481 +5129489 +5129496 +5129502 +5129520 +5129524 +5129531 +5129535 +9208233 +9255328 +1898686 +1898789 +1898841 +1898848 +1898858 +1898865 +1899048 +5129636 +4299211 +4299213 +10474236 +1899835 +1899873 +1899893 +1899922 +9028122 +9446281 +1899989 +8445010 +1899994 +1900014 +1900024 +1900026 +8847500 +9208918 +9925669 +1900112 +1900121 +1900131 +1900134 +1900172 +1900175 +1900195 +1900197 +1900199 +1900233 +1900249 +1900295 +1900303 +1900345 +1900408 +1900485 +1900523 +1900565 +1900578 +1900618 +1900626 +1900632 +1900768 +1900787 +1900825 +1900830 +1900872 +1900918 +9392084 +11701991 +1901001 +1901153 +1901189 +9072828 +1901257 +1901261 +8247566 +5130277 +5130296 +1901533 +1901580 +1901744 +1901794 +1901801 +1901804 +1901810 +11832697 +5130369 +5130400 +5130528 +5130548 +9357385 +1902110 +1902111 +1902114 +1902117 +1902118 +1902211 +1902300 +1902346 +1902378 +1902384 +1902388 +1902406 +1902410 +1902451 +1902458 +1902479 +1902502 +5130559 +1902615 +1902623 +1902642 +1902660 +1902676 +1902680 +1902692 +1902702 +1902704 +10512675 +1902814 +1902880 +1902882 +1902885 +5130562 +5130574 +1903028 +1903607 +1903634 +1903636 +1903646 +10114865 +5131597 +5131608 +5131637 +1904382 +1905321 +10312760 +10615631 +1905451 +1906715 +1907153 +1907190 +1907250 +1907272 +1907727 +1908123 +1908138 +1908144 +1908146 +1908148 +1908150 +1908168 +1908174 +1908199 +1908203 +1908204 +1908217 +1908256 +1908258 +1908262 +1908299 +1908302 +1908309 +1908577 +5133035 +10542548 +1908995 +1909004 +1909019 +1909025 +1909039 +1909064 +10046510 +1909070 +1909108 +1909128 +1909135 +1909155 +1909170 +1909185 +1909191 +1909209 +1909211 +1909213 +9851867 +8727750 +1909241 +1909489 +1909532 +1909573 +5133142 +5133251 +5133255 +5133265 +5133366 +5133451 +5133503 +5133523 +1910378 +10558140 +5133565 +5133568 +1910773 +5133581 +5133589 +1911076 +1911077 +5133591 +5133595 +5133609 +5133615 +5133621 +5133622 +5133623 +5133634 +5133635 +5133637 +9086331 +9219529 +1911577 +1911939 +12322536 +12335869 +1911966 +1912003 +1912036 +1912119 +5133736 +5133786 +9277330 +1914416 +1914420 +1914424 +1914433 +1914440 +1914465 +1914500 +1914501 +1914511 +1914693 +1914697 +1915193 +9988287 +1915339 +1915368 +1915369 +1915396 +1915401 +1915415 +1915417 +1915427 +1915456 +10078453 +10196441 +10487080 +11572120 +5136372 +1916700 +1916701 +1916772 +1916790 +1917830 +1917834 +1917840 +1917911 +1918076 +1918077 +1918078 +1918082 +1918086 +1918094 +1918097 +1918133 +1918149 +10250149 +1918220 +1918263 +1918268 +1918269 +1918280 +1918596 +1918601 +5137408 +1918968 +1919007 +1919010 +5128045 +5128067 +5128118 +10059034 +10415847 +10454590 +10455658 +11573394 +5881748 +10259880 +5131982 +5132003 +5132008 +5132078 +5132137 +5132225 +5132239 +5132252 +5132283 +5132289 +5132317 +5132346 +5132347 +5132360 +5132374 +5132429 +5132440 +5132446 +5132483 +5714312 +9541133 +5133088 +5714299 +5714302 +5881400 +5130557 +1910628 +8643309 +10265841 +10511167 +12045866 +5132917 +5132956 +5133008 +9964857 +9745549 +5142842 +1868334 +1868360 +5125118 +1941570 +1941717 +1941719 +1941864 +4529738 +5101371 +5101374 +9114044 +5101527 +7628188 +1879052 +1879160 +1879253 +1879413 +1879443 +1879452 +1879471 +1879655 +5126494 +5126517 +5126533 +5126585 +5126637 +1880381 +1880411 +1880505 +10056494 +1880537 +1880623 +5126663 +10861282 +11968849 +1881079 +1881151 +9819403 +5126721 +1881822 +5126751 +5126756 +1882786 +10107015 +1882812 +1882818 +1882819 +1882941 +1882960 +1882965 +1883038 +1883067 +10807787 +8981028 +5127089 +5127090 +1883968 +8324720 +1884428 +1884437 +1884449 +1884453 +1884479 +1884685 +9308930 +1884774 +1884923 +1885099 +1885158 +1885642 +1885950 +1886251 +5127209 +1886729 +10510138 +1886906 +1887004 +1887634 +1888047 +1888292 +1888338 +1888646 +12106417 +1888955 +1889267 +1889327 +1889536 +1890089 +1890247 +11044778 +7543006 +1890368 +1890410 +1890512 +1890599 +1890737 +1890876 +1891035 +10310835 +1891755 +1891932 +1892131 +1892230 +1892311 +1892355 +1892427 +1892433 +9059564 +1892477 +1892488 +5771877 +7864212 +8146570 +8425580 +6121010 +6121218 +8876855 +1886374 +1889721 +1889765 +1889850 +5127562 +5127631 +5127680 +1886123 +1886207 +1831136 +1853242 +11773446 +7946946 +1858674 +1858706 +1858930 +9645309 +1859161 +1859488 +9700261 +10103570 +9547681 +10129812 +1864905 +1865107 +1865108 +1865120 +1865132 +5124542 +5124557 +5124589 +5124595 +5124597 +5124598 +5124607 +5806244 +10534664 +1865547 +1865557 +1865572 +1865578 +1865709 +1865711 +1865764 +1865827 +1865837 +1865869 +1865963 +1866003 +1866006 +1866100 +1866105 +1866162 +1866164 +1866201 +1866220 +1866311 +1866496 +1866838 +1866902 +1867108 +1867171 +1867218 +1867224 +1867231 +5124873 +1867426 +1867515 +1867535 +1867547 +1867552 +1867709 +1867722 +1867773 +10108753 +10591617 +9634178 +10248521 +10302305 +10547404 +5123615 +1861479 +1861559 +5123636 +1861773 +1861783 +1861784 +1861967 +1862033 +1862044 +1862046 +1862047 +1862049 +1862078 +1862083 +1862087 +1862088 +1862091 +1862094 +1862096 +1862123 +1862139 +1862163 +1862181 +1862198 +1862207 +1862225 +9559671 +5123701 +5123704 +1862547 +1862551 +1862658 +1862765 +1862805 +1862841 +1862874 +1862923 +1863109 +1863143 +1863151 +5123784 +5123801 +7803585 +1863366 +1863412 +1863416 +1863426 +1863699 +1863701 +1863706 +1863714 +1863724 +1863732 +1863734 +1863735 +1863742 +1863750 +1863757 +1863856 +1863858 +1863864 +11468731 +1864316 +1864320 +1864321 +1864328 +1864329 +1864352 +5124249 +5124250 +5124268 +5124442 +5124443 +5124448 +5124450 +5124452 +5123954 +5123956 +5123961 +5123971 +5123979 +5123980 +5123983 +5123991 +5123996 +1863978 +1864004 +1864021 +1864046 +1864058 +1864068 +1864070 +1864084 +1864098 +1864103 +1864106 +1992634 +1992817 +1953499 +5143232 +5143234 +9424853 +1953970 +1953998 +1860118 +5105671 +1830681 +1953166 +1751497 +1751507 +1751509 +1751524 +1751572 +1751588 +1751590 +1751606 +1751625 +1751626 +9332550 +1751670 +1751785 +5105193 +5105194 +5105212 +5105217 +5105218 +5105227 +5122556 +5122647 +5122683 +5122702 +1855358 +10055273 +1857380 +1857626 +1857829 +1858163 +1858283 +10038125 +1937655 +1937665 +1937793 +1937816 +1937846 +1937885 +1938022 +1938059 +1938112 +1938148 +4299871 +10600208 +11716362 +1937064 +1937090 +1937109 +1937110 +1937124 +1937129 +1937136 +1937144 +1937155 +1937162 +1937165 +1937167 +1937530 +1937540 +1939130 +1939136 +1939143 +5141321 +5141324 +5141331 +5141333 +5141340 +1939336 +4694313 +1836899 +1837172 +4534796 +9385576 +8924506 diff --git a/dev/releases/mambo_v3/presets/south_asia.classes b/dev/releases/mambo_v3/presets/south_asia.classes new file mode 100644 index 0000000..f53d564 --- /dev/null +++ b/dev/releases/mambo_v3/presets/south_asia.classes @@ -0,0 +1,1929 @@ +1935849 +1992277 +1992315 +1732115 +1732525 +1732763 +1732830 +5101640 +1733154 +5102242 +1734519 +5102287 +5102300 +1845547 +1845607 +1847641 +5122013 +1849656 +1850633 +8503184 +1831458 +10679326 +11095591 +12208733 +1758625 +1759775 +1760140 +6132868 +1760201 +1760927 +1760970 +1761111 +1761213 +1761387 +1762151 +11562374 +1762219 +1762226 +5109766 +1763650 +1763782 +1763976 +1764032 +1764043 +1764060 +1764531 +1764640 +1764880 +1764886 +1765653 +1765863 +1766570 +1766584 +1766601 +1766612 +1766618 +3257809 +6116699 +1766888 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +5110232 +1768898 +10820762 +1769168 +11467034 +10848620 +1769425 +1769465 +1769772 +10881384 +1769827 +1769840 +1769852 +1769897 +6132966 +1771975 +1771977 +1772352 +5110417 +5110447 +5110490 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +5110837 +9372988 +4687991 +5110986 +5110993 +6133058 +9610080 +1779399 +5111830 +10203499 +1780705 +1780716 +1782115 +1783302 +1785744 +1785832 +1786317 +1786711 +11368766 +5112500 +1786980 +1786985 +1787009 +5112531 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +10766319 +1790876 +1790888 +1791010 +1791097 +10743044 +5112940 +1791514 +1791715 +11725043 +5113078 +5113148 +5113330 +5113352 +1792695 +5113385 +5884243 +9504222 +1793631 +1793635 +5113925 +1796984 +10108671 +6132979 +1797299 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +6117055 +1798449 +1798481 +1798488 +1798504 +6115283 +6132841 +6132850 +11732472 +1787072 +1787079 +1798529 +1798700 +1798794 +1798807 +4301310 +4532352 +6115437 +6133046 +8793873 +1799743 +1799751 +1799757 +6132825 +1803148 +1803163 +1803197 +1803302 +1804071 +1805044 +11494627 +1805580 +1806814 +1806871 +1806872 +11453492 +1808161 +1808180 +1808236 +1808286 +1808381 +1808559 +5115701 +5115771 +1809115 +10189965 +1809387 +12006709 +10882244 +5116395 +12182061 +1811686 +11736162 +12209759 +1813036 +1814653 +1814913 +1814928 +1814971 +1815260 +1815680 +10826443 +1816029 +1816065 +1816138 +1816292 +1816299 +1816362 +5117779 +1818413 +1818659 +1818991 +1819128 +1819145 +6197200 +7346382 +1819268 +1819280 +8407461 +1819668 +6134035 +5118348 +5118422 +10546538 +1820275 +1820282 +1820318 +1820352 +1820393 +1820414 +1820440 +1820450 +1820458 +1820477 +1820478 +1820565 +1820888 +1821105 +1822141 +12037602 +10503495 +8897869 +12176367 +12183285 +4532532 +10864524 +10270464 +9473918 +9400545 +9559336 +6133292 +10062933 +10717837 +8148822 +12242422 +10806460 +6133252 +6133325 +9754232 +10972780 +11142432 +10629533 +10309234 +12171522 +11962292 +10399906 +10754772 +10812069 +6112449 +8452092 +8526388 +8543494 +8624848 +12257250 +10166724 +8831819 +1774829 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783906 +5116504 +9336001 +1781413 +1781421 +1803461 +8000103 +9478424 +1781598 +1794273 +1772374 +1763761 +6115388 +1816685 +6133297 +1774583 +1774598 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +1774682 +1819852 +1804532 +1768461 +5109796 +1821455 +1821920 +1822017 +1819337 +1819362 +1804182 +6122364 +1815315 +1781446 +6116073 +6116076 +1783713 +1812394 +8237987 +4687933 +6116646 +1820118 +1820137 +4532453 +6116413 +1781531 +1798329 +1798331 +1798335 +1784947 +1785072 +1785105 +1765996 +1765999 +6133069 +10272611 +10598038 +11513188 +1786597 +4687389 +5884188 +6132915 +6132916 +5110012 +1796943 +1819685 +10098436 +11717028 +1782310 +10094256 +6197138 +5108435 +1771903 +4301309 +5112440 +10371735 +1869363 +1939510 +5141344 +1860184 +5880041 +6132546 +1870237 +1870450 +4531402 +8766638 +1871988 +1872094 +1872850 +1872873 +1873079 +1873215 +5125602 +5125635 +1874937 +1875827 +1876168 +1876542 +1876592 +1876922 +1877498 +5126052 +1877788 +1877941 +1878406 +1878490 +1883045 +1888454 +5884888 +6133441 +4525884 +10451589 +12211069 +1736358 +1736623 +1736993 +1737015 +1737847 +1738192 +5102951 +1740469 +1740623 +1740797 +1740828 +1743998 +1744526 +1745947 +1746714 +1920851 +10159697 +10707501 +9916153 +1920957 +1920991 +1921009 +1921010 +1921021 +1921044 +7346426 +1921055 +10581870 +10825466 +1921092 +1921093 +1921150 +1921163 +10556522 +1921633 +7346430 +1922085 +1922111 +1922143 +1922244 +1922285 +1922288 +10442031 +5138200 +1922584 +1922745 +1923019 +5138543 +1923458 +1923491 +1923525 +1923649 +1923650 +1923651 +1923668 +1923809 +1923917 +1924097 +1924193 +1924298 +1924323 +1924390 +1924458 +1924713 +1925233 +1925381 +1925543 +1925711 +1925731 +1925743 +1925877 +1925918 +1926436 +1926437 +1926446 +1926448 +1926456 +1926546 +1926550 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926722 +1926800 +11008182 +1927034 +1927217 +1927219 +1927242 +1927284 +4709111 +7408690 +1927348 +1927393 +1927445 +1927707 +1927717 +7680748 +5139040 +5139050 +1928349 +1928361 +1928376 +1928419 +5139156 +1928628 +1928849 +1928908 +1928915 +9856663 +1928960 +1929402 +1929697 +5139309 +5139339 +8356768 +1930904 +1930916 +1930935 +4535106 +1930954 +1930968 +1931109 +1931148 +1931509 +1931655 +1931656 +1931706 +1931735 +1931906 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +1932043 +1932159 +1932166 +1932273 +4708995 +1932411 +1932551 +7346444 +1932607 +5139990 +6132685 +1932812 +1932814 +1932863 +5806412 +1933028 +1933044 +1933084 +5140436 +1933583 +1933647 +1933679 +1933845 +1934187 +1934188 +1934192 +1934211 +1934213 +1934221 +1935377 +1935405 +1935410 +1935454 +7346417 +10879371 +4709102 +1933095 +1924494 +1752161 +1752373 +1752483 +1752492 +1752603 +1752749 +1753215 +5105458 +5105547 +5105570 +1753759 +7345843 +6133481 +11673056 +1919151 +1919161 +1919181 +1919333 +1919340 +1919344 +1919348 +1919412 +1919438 +1919534 +1919551 +1919581 +1919589 +1919635 +1919716 +1919728 +1919731 +1919741 +1919951 +1919966 +5137747 +5137748 +1920237 +1920247 +1920258 +1920259 +5137790 +5137808 +5137823 +5137828 +5137832 +5137849 +5137850 +5137858 +1920349 +1920356 +1920357 +1920362 +1920369 +1920374 +5137861 +1920454 +1920467 +1920469 +1920472 +1920496 +1920502 +1920506 +1920512 +4535307 +5137889 +5137891 +5804932 +5805036 +1920515 +5137902 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137949 +1920707 +1920718 +5137578 +5137605 +5137612 +5137682 +1920218 +5137763 +7207679 +1758003 +1758461 +1758602 +1868952 +1869057 +1869178 +1963095 +5143303 +5143311 +5143315 +5143354 +5143384 +1954911 +6133648 +1955389 +1955552 +1955694 +1955725 +1956384 +1956496 +1956536 +6133593 +1957161 +1957333 +1957368 +1957413 +1957611 +4524424 +1958152 +1958158 +1958163 +1958290 +1958305 +1958307 +1958454 +1958463 +1958483 +1959645 +1959652 +1959667 +1959682 +6133552 +1959948 +1960181 +6133509 +5144092 +5144093 +1960617 +6133518 +1960686 +1961013 +1961052 +1961126 +7346236 +1961647 +1962268 +1962678 +1962839 +4302252 +5734349 +1963168 +1963306 +5144345 +1963629 +1963733 +11644349 +1964024 +1964025 +1964029 +1964116 +1964316 +6133502 +5144431 +5144472 +9370070 +1966367 +1967590 +7346240 +1967815 +1968147 +7681733 +1968363 +1968730 +1968746 +1969581 +6133643 +1969621 +1970136 +1970322 +7346252 +5144677 +5144805 +5144806 +5144900 +5144942 +5145075 +5145139 +5145255 +5145396 +5145502 +5145503 +5145560 +5145624 +5145735 +9194811 +6133516 +1972094 +5146062 +1972614 +1972620 +10732353 +1972754 +1973242 +1973338 +1973358 +5146434 +5146508 +5146566 +5146608 +5146677 +5146752 +5146763 +5147062 +5147171 +5147214 +5147306 +5147441 +5147498 +1975164 +6133559 +11856219 +1975711 +1975805 +1975806 +1975892 +1975914 +9356491 +9410573 +9548993 +1976212 +1976213 +1976224 +1976228 +1976311 +1976469 +1976928 +1977182 +1977184 +5147917 +5147968 +5148043 +5148055 +1977813 +1977833 +1977863 +6133582 +1977962 +1978385 +1978405 +1978424 +1978499 +1978524 +6133560 +5148252 +1978789 +1978999 +6133546 +1979021 +1979521 +1979781 +1979787 +1979806 +1980521 +1980532 +11449815 +1980694 +1980827 +1981063 +11173690 +7345811 +1982007 +1982221 +1982267 +1982542 +1982865 +5149081 +5149136 +5149174 +1985152 +1985158 +1985167 +1985192 +6133659 +1985926 +1986032 +1986054 +1986061 +1986508 +1986650 +1986779 +1986787 +1986936 +5149308 +1987203 +1987362 +1987377 +1987629 +1987740 +1987766 +1987767 +1987775 +1987776 +6133591 +6133534 +1988257 +1988306 +1988420 +1988487 +1989355 +1989942 +1990043 +1991123 +5149609 +1991310 +1991378 +1991779 +10155932 +11098546 +11869776 +1991945 +5734515 +11635419 +4524376 +10422582 +10632124 +6133595 +6133596 +10530208 +11555221 +6133670 +6133673 +6133674 +9220953 +6133519 +11780161 +6133604 +6133607 +10629052 +7346237 +6133562 +5734379 +6133523 +6133525 +6133542 +6133498 +10477629 +6133575 +6133517 +6133635 +10175639 +9617411 +9932090 +7346256 +7345829 +11477039 +5880478 +6133540 +10755716 +5149768 +7443518 +5146303 +5146335 +1942522 +1942244 +1942251 +10773498 +1942378 +1942769 +1942808 +4689929 +1942878 +1943212 +1943223 +1943236 +8277078 +5141795 +1943505 +1943519 +1943619 +1943757 +8073674 +8273661 +1944503 +1944504 +1944521 +1944778 +5141924 +9050611 +1945088 +1945137 +1945173 +1945225 +1945227 +1945274 +1945286 +1945569 +1945605 +1945715 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945877 +1945878 +5142001 +1946051 +1946058 +1946067 +5142067 +1946432 +1946695 +1946731 +1946737 +1946738 +1946917 +1947385 +1947409 +1947446 +1947449 +1947456 +1947492 +1947496 +1947661 +1947673 +1947727 +1947745 +1947753 +1947765 +1947805 +1947846 +1948062 +1948073 +1948088 +5142213 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949404 +7346351 +8828146 +9068968 +5142338 +5142352 +1949784 +1950013 +7346356 +1950156 +1950171 +1950197 +1950521 +1950533 +1950879 +1950936 +1951157 +5977247 +7633472 +5142725 +5142729 +5142730 +5142032 +1758613 +1759177 +5108636 +10329023 +1760593 +1760620 +1760939 +1761438 +1761735 +1762657 +6132957 +1764174 +1764553 +1765017 +5109843 +5109848 +5109855 +5109872 +5109882 +5109898 +5109931 +8352161 +1765658 +1766910 +11034779 +1767368 +1767393 +1767511 +10575632 +5110120 +5772171 +5772172 +5772206 +5802396 +5883925 +7345742 +9356770 +1768117 +5110200 +1769095 +1769978 +1770477 +1771555 +1774470 +1774797 +4301304 +6115946 +6115953 +5111535 +5772222 +1779641 +4533325 +5111980 +1782341 +1782354 +1782543 +5714973 +1784349 +1784513 +1784761 +1785145 +1785181 +1785185 +1785314 +1785329 +1786360 +1786452 +1786573 +1787367 +1787373 +4687681 +1789957 +1791660 +1792996 +1793246 +7918000 +1793689 +1795065 +1795068 +4532908 +6133011 +4688169 +4688172 +1797030 +6133002 +1798090 +1799695 +1800149 +6097260 +4532811 +6132989 +8021109 +5110644 +6132797 +1763072 +5109385 +5109437 +4534675 +4534681 +1792555 +8108800 +1771675 +1771245 +4533714 +1765751 +5113853 +5108671 +5108724 +5108787 +5108794 +1789530 +10933525 +5110282 +11615549 +4532203 +4532206 +4532208 +4532266 +6115772 +6115820 +6115822 +6115830 +1782273 +1782289 +10063383 +9325654 +10458175 +10683012 +1822490 +1822493 +1822830 +1822852 +5118565 +1824338 +1824751 +1824766 +1824997 +1825156 +1825336 +7346284 +1825539 +5118974 +5118978 +1825920 +5118996 +5119000 +6133700 +6133750 +1827408 +1827414 +1827484 +5119239 +1827711 +6133680 +6133681 +6133684 +7346276 +9921001 +5118841 +1892555 +5127748 +5806166 +11464595 +1892821 +5127835 +5127867 +5127893 +5127932 +5127971 +5127992 +7346346 +9963153 +1893177 +5792081 +1893329 +1893341 +10477747 +1893538 +1893546 +1893612 +1893793 +1893923 +1893951 +4704279 +8832485 +9136904 +10333787 +1894002 +1894012 +5128161 +5128169 +5128182 +10398658 +4535632 +10639484 +1895037 +1895159 +1895499 +1895527 +1895609 +1895667 +1895670 +1895956 +1895984 +1895992 +1896061 +1896105 +1896142 +1896304 +1896922 +1897664 +1897677 +1897685 +1897692 +1897747 +1897808 +1897814 +1897817 +1897834 +1897873 +4299368 +5129293 +7346344 +1898434 +1898521 +1898544 +1898946 +1898958 +1898988 +1899187 +5130277 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901850 +5130369 +5130444 +5130464 +5130471 +5130521 +5130542 +8189761 +4535689 +10394962 +10577473 +5130775 +5130813 +5130814 +5130851 +5130904 +5130944 +5130971 +9968404 +9999965 +1904272 +1904701 +1904719 +1904887 +1904943 +1904948 +1904996 +1905079 +1905142 +6221746 +1905383 +1906552 +8208583 +1907430 +1907576 +1907620 +1907625 +1907637 +1907672 +1907687 +4535754 +5881946 +7976131 +1908352 +1908660 +1908702 +1908713 +1908775 +1908840 +1908871 +1908929 +1909123 +1909216 +7346301 +8978362 +10656625 +1909398 +1909607 +1909649 +1909659 +1909810 +1909818 +1909838 +1909865 +1910706 +6133858 +1911298 +1911300 +1911503 +5133687 +5133689 +1911633 +1911736 +7809779 +8078362 +5133693 +5133695 +10097687 +4535581 +5134098 +5134301 +8312017 +1913105 +1915079 +1915080 +1915110 +1915140 +1915154 +1915160 +1915262 +1915275 +1915325 +11516142 +11535847 +5135643 +1916410 +1916412 +1916758 +5136594 +5136681 +5136713 +5136752 +5136790 +5137156 +5137166 +5137291 +5137330 +1918026 +1918321 +1918394 +1918406 +1918408 +1918495 +1918497 +1918509 +1918517 +1918533 +1918547 +1918554 +1918667 +1918736 +1918843 +1918854 +11645316 +4535618 +10595994 +10000384 +10043827 +5130587 +7762841 +5131142 +5131339 +5131372 +5131407 +5131443 +5131467 +5131495 +5131520 +5131555 +5131565 +10228568 +10277877 +10508423 +7346335 +8001799 +5806167 +6100726 +7642610 +5135546 +5128587 +5128644 +5129000 +5129025 +10201273 +1910628 +1910629 +1899818 +5129913 +1914708 +1914749 +7346340 +1918584 +1951505 +1951507 +5142870 +1951675 +1951747 +1951859 +1951881 +1952034 +1952062 +1952175 +1952177 +1952281 +5143080 +1952481 +10782264 +1952551 +1952685 +1952704 +5143116 +1952857 +5885428 +1868409 +4702564 +1868499 +1868470 +5141581 +5141590 +1843602 +1730519 +1730543 +1730948 +1730978 +8008237 +8130866 +8402212 +1872361 +1872368 +1878626 +6133117 +1878744 +1879125 +1879141 +1879227 +1879339 +1879340 +1879379 +1879408 +1879471 +1879490 +5126635 +5126637 +1880451 +1880464 +1880852 +1880858 +1880907 +1880968 +1881089 +1881121 +1881126 +1881151 +1881170 +9819403 +1881293 +1881329 +1881336 +1881340 +1881515 +1881964 +1882210 +1882253 +1882266 +1882272 +1882310 +1882753 +1882767 +1882884 +1882901 +10156181 +1882930 +1882941 +1882960 +1882965 +1883067 +5127097 +1883943 +1883951 +1884051 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884479 +1884671 +6120980 +1884774 +1884835 +1884844 +1884858 +1884890 +1884908 +1884909 +4532146 +1885012 +1885262 +1885263 +1885630 +6133181 +1885745 +1885763 +1885764 +1885826 +1885836 +1885919 +1885945 +1885994 +1886015 +1886241 +1886251 +1886362 +1886526 +1886720 +1886726 +1886729 +7562564 +1887054 +1887509 +1887586 +1887691 +1887701 +1888040 +1888092 +1888324 +1888346 +1888537 +1888579 +1888891 +1888893 +1888906 +1888911 +1888913 +1889043 +1889053 +1889071 +1889074 +1889239 +1889249 +1889270 +1889272 +1889277 +1889356 +1889358 +1889552 +1889563 +1890031 +1890097 +1890287 +1890320 +1890335 +1890343 +7543006 +10180624 +1890410 +1890512 +1890670 +1891167 +1891326 +1891339 +4532022 +1891533 +1891583 +1891636 +1891758 +1891889 +1891936 +1892153 +1892456 +1892476 +10141437 +11056379 +9674732 +6133140 +5771877 +7864212 +10117959 +10227418 +4532125 +10145421 +6120803 +6133232 +6121010 +10513366 +10397209 +6133154 +10959264 +6133158 +10375403 +5126680 +1886374 +1889765 +1889833 +5127592 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127698 +5802339 +1888638 +1886123 +1883885 +10410699 +1831136 +5122430 +1858674 +1858698 +1858930 +1859061 +1859453 +9749806 +6133397 +1859932 +1860026 +5123180 +5123221 +1865593 +1865660 +1865666 +9914882 +1865930 +1866237 +1866356 +6106943 +1866530 +1866556 +1866568 +1866573 +1867928 +11729388 +5124673 +5124716 +5120278 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861644 +1861665 +1861714 +1861721 +5123674 +1861933 +1861936 +1861937 +1861949 +1861951 +1862008 +1862061 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +10374414 +1862430 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862526 +5123707 +5123709 +1862765 +1862774 +1862837 +1863034 +5123922 +1863354 +1863394 +1863467 +1863646 +1863829 +1863909 +1863910 +1863924 +1863944 +9578319 +1864126 +1864135 +8133328 +11738734 +11954157 +1864652 +5124305 +5124332 +5124348 +5124374 +5124415 +1864796 +6099041 +6106759 +7346401 +10193618 +5123837 +5123876 +5123884 +5123890 +8810912 +10189661 +10191275 +10436020 +5123979 +1992634 +1993043 +1993496 +6133769 +1993637 +1953196 +1953326 +6132712 +1953407 +1953423 +1953729 +11467944 +6132725 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +1954120 +6132728 +1754135 +1754368 +1754511 +1754516 +1754535 +1754919 +1754933 +1755248 +1757652 +5108318 +5108334 +11860016 +5108346 +1830669 +1855630 +1856005 +1856971 +1857380 +1857626 +1857828 +1857938 +1858163 +1858283 +8178453 +1858557 +1937707 +1937723 +1937792 +1937819 +1937826 +1937892 +1937911 +1937931 +1938029 +1938052 +1938069 +1938088 +1938114 +1938147 +1938156 +1938174 +4692504 +8225376 +1936988 +1936993 +1937055 +5141144 +5141163 +5141177 +5141179 +5141185 +5141187 +5141199 +5141212 +5141215 +5141226 +5141229 +5141233 +5141242 +5141254 +1937570 +1937580 +1937613 +1938214 +1938520 +1939086 +1939168 +1939180 +1939215 +5141311 +5141317 +8546322 +10213314 +1800441 +1800528 +1800539 +1800562 +1800572 +1800642 +1800686 +1800821 +5114394 +5114400 +5114409 +11873966 +4534796 +9544823 +5114425 +1801000 +1801001 +1801073 +1801080 +1801170 +5114465 +1801461 +1801503 +1801519 +10066605 +10510325 +6112606 +6112661 +6133809 +6133811 +1801993 +1802090 +1802229 +1802244 +1802337 +1802702 +1802783 +1802827 +1802833 +1802919 +1802939 +1803022 +1803035 +1803039 +1803060 +1803078 +1803108 +10942408 +5114303 diff --git a/dev/releases/mambo_v3/presets/southeast_asia.classes b/dev/releases/mambo_v3/presets/southeast_asia.classes new file mode 100644 index 0000000..b6fda6d --- /dev/null +++ b/dev/releases/mambo_v3/presets/southeast_asia.classes @@ -0,0 +1,2031 @@ +1935614 +1935838 +1935849 +1992277 +1992283 +1992315 +1732114 +1732115 +1732525 +1732830 +1733155 +1733755 +5102207 +5102242 +1734519 +1832143 +11453841 +1832235 +1845547 +1847062 +1847641 +1849656 +8503184 +1831458 +1831631 +1831655 +10679326 +12199936 +11095591 +12259113 +12208733 +1758625 +1759775 +1760140 +6132868 +6132869 +1760201 +1760927 +1760970 +1761213 +1761387 +9257793 +1762151 +11562374 +1762219 +1762226 +1762298 +1763589 +5109766 +1763650 +1763782 +1763812 +1763976 +1763994 +1764032 +1764043 +1764060 +1764640 +1764886 +1765653 +1765863 +1766260 +1766558 +1766560 +1766570 +1766584 +1766601 +1766618 +3257809 +6116699 +1766888 +1767758 +1767779 +1767780 +5110190 +11097510 +1767883 +1768440 +5110232 +1768898 +10820762 +1769168 +11467034 +10848620 +1769410 +1769425 +1769465 +1769772 +10881384 +12148290 +1769823 +1769827 +1769852 +1769901 +6132967 +1771839 +1771975 +1771977 +1772352 +5110417 +5110447 +1774576 +1775148 +5110546 +5110765 +5110769 +1777166 +9372988 +4687991 +5110981 +5110986 +5110993 +5111044 +6133058 +9610080 +1779456 +6132938 +5111830 +10203499 +1780705 +1780716 +1782115 +1783302 +10208792 +1785744 +1785832 +1786317 +1786711 +11368766 +5112500 +6132971 +1786958 +1786980 +1787009 +1788553 +6132936 +7346446 +6132826 +1788953 +1789225 +1789604 +1789794 +1790331 +10766319 +1790876 +1790888 +1791010 +1791097 +10743044 +1791514 +1791715 +11725043 +5113084 +5113148 +5113330 +5113352 +1792695 +5113385 +5884243 +9504222 +1793631 +1793635 +1793892 +5113925 +1796984 +10108671 +6132979 +9332506 +1797727 +1798014 +1798101 +5113950 +5884247 +1798488 +6132841 +6132850 +11732472 +1787079 +1798523 +1798700 +1798794 +1798868 +4301310 +4532352 +6115437 +8793873 +1799743 +1799751 +1799757 +1803148 +1803163 +1803197 +1805043 +1805044 +1805580 +5115166 +9663271 +1806814 +1806871 +1806936 +11453492 +1808161 +1808232 +1808236 +1808286 +1808340 +1808559 +6198302 +1809115 +1809308 +10189965 +1809381 +12006709 +10882244 +5116412 +12176559 +1811686 +10671425 +11736162 +12209759 +1813036 +1814913 +1814928 +1814971 +1815260 +10826443 +1816029 +1816065 +1816138 +1816246 +1816292 +1816299 +1816362 +5117779 +1818413 +1818659 +1818991 +1819128 +6197200 +7346382 +1819268 +1819270 +1819280 +1819421 +1819668 +5118348 +5118422 +10546538 +1820275 +1820282 +1820291 +1820352 +1820393 +1820401 +1820414 +1820429 +1820440 +1820450 +1820451 +1820477 +1820478 +7346381 +1820565 +1820888 +1821105 +1822141 +12037602 +10503495 +8897869 +9956017 +12176367 +4532516 +10270464 +9473918 +9559336 +6133292 +10062933 +10717837 +12216332 +12242422 +9852545 +6133252 +10072380 +6133325 +9754232 +10972780 +11142432 +10629533 +10309234 +12171522 +10004820 +10399906 +10754772 +8452092 +8526388 +8624848 +9927378 +6133262 +12257250 +8831819 +1774829 +10480609 +12171068 +9266866 +8363709 +10178326 +10282389 +10400868 +10469564 +10813849 +10907635 +10982648 +8874633 +9508913 +1783906 +5116504 +9336001 +1781413 +1781421 +1803461 +10866411 +8000103 +9478424 +1781598 +1794273 +1763761 +6115388 +1816648 +6133297 +1774583 +1774598 +1774604 +1774618 +1774626 +1774635 +1774640 +1774654 +1774661 +1774702 +1819852 +1780287 +1813174 +5111643 +9400916 +1768461 +5109796 +1821455 +1821464 +1821651 +1821920 +1822017 +1819337 +1819362 +1804182 +1815315 +1781446 +1781473 +6116076 +1783713 +4687933 +4687935 +6116646 +1820118 +1820137 +1819057 +4532453 +6116413 +5118396 +1781531 +1798329 +1798331 +1798335 +1785072 +1785105 +1765999 +6133069 +10272611 +10330198 +10598038 +11513188 +11612469 +1786597 +4687389 +5884188 +6132915 +6132916 +6132917 +9935660 +5110012 +1781350 +6133013 +1796943 +1819685 +10098436 +11717028 +1782310 +10094256 +5108435 +5108440 +1771903 +4301309 +10506164 +5112440 +1795542 +1992489 +10371735 +1869363 +5141344 +1860259 +1860261 +1860274 +5123419 +5880040 +5880041 +6132546 +5123449 +5123485 +5123489 +1870237 +1870450 +8766638 +1871988 +1872094 +1872848 +1872850 +1872873 +1873417 +5125591 +5125602 +5125633 +5125635 +1874937 +1876168 +1876542 +1876592 +1877788 +1878406 +1878490 +9835867 +1883045 +1888454 +5884888 +6133441 +1736358 +1736499 +1737313 +1738192 +1740469 +1740524 +1740797 +1740828 +1743998 +1745947 +1745952 +1746714 +1748605 +10159697 +10707501 +9916153 +1920957 +1920991 +1921009 +1921010 +1921021 +1921044 +7346426 +1921055 +10581870 +1921092 +1921093 +1921150 +1921163 +1921262 +1921263 +1921300 +7346430 +5138069 +1922057 +1922111 +1922143 +1922163 +1922244 +1922285 +5138200 +1922745 +1922771 +5138257 +1922994 +1923458 +1923491 +1923525 +1923649 +1923651 +1923668 +1923744 +4708972 +4708977 +1923809 +1923883 +1923917 +1924193 +1924298 +1924323 +1924390 +1924417 +1924458 +1924558 +1924713 +1925543 +1925628 +1925679 +1925711 +1925731 +1925743 +1925877 +1925918 +1926436 +1926437 +1926446 +1926448 +1926456 +1926546 +1926574 +5883255 +7390086 +1926593 +1926611 +10116946 +10361239 +10606547 +1926800 +10087308 +11008182 +11508257 +11543078 +1926972 +1927025 +1927034 +1927217 +1927219 +1927242 +1927272 +1927274 +1927284 +4709107 +4709111 +7408690 +8322165 +9994384 +10517500 +1927348 +1927393 +1927707 +1927717 +1927897 +5139040 +5139050 +1928349 +1928361 +1928376 +1928382 +1928419 +1928849 +1928908 +1928915 +4709030 +9856663 +4535106 +1930954 +1930968 +1931109 +1931148 +1931189 +1931655 +1931706 +1931729 +1931735 +1931889 +1931906 +1931908 +1931943 +1931956 +1931958 +1931979 +1931997 +1932020 +4709051 +1932043 +1932159 +1932166 +1932189 +1932206 +1932246 +1932273 +1932287 +4709095 +4708995 +1932551 +1932563 +7346444 +1932607 +1932812 +1932814 +1932863 +5806412 +1933028 +1933044 +1933583 +1933647 +1933679 +1933845 +5140534 +5140561 +1934187 +1934188 +1934211 +1934213 +1934221 +1935363 +1935372 +1935377 +1935405 +1935408 +1935410 +1935454 +5138929 +7346417 +4709102 +4709147 +11055981 +1752161 +1752373 +1752483 +1752492 +1752603 +1752651 +1752749 +1752758 +1752849 +1752903 +5105458 +5105547 +5105570 +11014495 +5734560 +10932946 +7345843 +6133481 +10017342 +10203493 +10795141 +11673056 +1919151 +1919160 +10988070 +1919176 +1919340 +1919344 +1919348 +1919407 +1919438 +1919444 +1919534 +1919551 +1919564 +1919581 +1919589 +1919635 +1919728 +1919731 +1919741 +1919744 +1919756 +1919758 +1919762 +1919951 +5137748 +1920259 +5137808 +5137823 +5137832 +5137833 +5137847 +5137849 +5137854 +5137858 +5137861 +1920454 +1920467 +1920469 +1920506 +5137889 +5137891 +5804932 +1920515 +5137920 +5137926 +5137932 +5137935 +5137938 +5137945 +5137946 +5137949 +5137955 +1920786 +5804166 +5137605 +1758003 +1758461 +1868952 +1869057 +1869178 +11794362 +1963095 +5143311 +5143354 +5143384 +1955039 +6133648 +1955389 +1955552 +1955581 +1955725 +1956384 +1957161 +1957333 +1957368 +1957413 +1957523 +1958152 +1958158 +1958163 +1958290 +1958305 +1958324 +6544637 +1958422 +1958454 +1958463 +1958483 +1959645 +1959652 +1959667 +6133552 +1960181 +6133509 +5144092 +5144093 +1960686 +1961052 +1961162 +7346236 +1961647 +1962678 +4302252 +5734349 +5144345 +1963629 +1963733 +11644349 +1964024 +1964025 +1964029 +6133500 +1964113 +1964116 +1964305 +1964316 +1964331 +1964702 +1964738 +5144431 +5144472 +9370070 +10670854 +1967688 +7346240 +1967815 +1968147 +1968363 +1968730 +1968746 +11858774 +1969581 +6133643 +1969621 +1970034 +1970136 +1970322 +1970436 +7346252 +5144806 +5144864 +5145075 +5145396 +5145495 +5145560 +5145624 +5145735 +9194811 +6133516 +1972620 +10732353 +1972754 +1973242 +1973358 +1973393 +5146434 +5146483 +5146508 +5146566 +5146608 +5146752 +5146763 +5147306 +5147498 +1975164 +6133559 +9875420 +11856219 +1975711 +1975805 +1975806 +10835542 +1975892 +9356491 +9410573 +9548993 +1976212 +1976213 +1976224 +1976228 +1976311 +1976469 +1977182 +1977184 +6133548 +5147917 +5147968 +5148043 +5148055 +5148066 +5148097 +5148214 +1977813 +1977833 +1977863 +6133582 +1978385 +1978407 +1978499 +1978524 +4524638 +6133560 +1978789 +1978996 +1978999 +1979021 +1979521 +1980521 +1980532 +1980694 +1980827 +1981063 +7345813 +1982221 +1982267 +1982865 +11121180 +5149081 +5149136 +5149174 +5149182 +5149203 +1985152 +1985158 +1985167 +1985181 +1985192 +1985228 +6133659 +1985926 +1985993 +1986054 +1986508 +1986774 +1986779 +1986787 +1986936 +1987203 +1987204 +1987362 +1987377 +1987629 +1987747 +1987766 +1987767 +1987775 +1987776 +1987785 +6133591 +6133534 +1988257 +1988306 +1988420 +1988487 +1989355 +1989942 +9906229 +1991123 +5149609 +1991310 +1991378 +1991394 +1991779 +10155932 +11098546 +11869776 +1991945 +5734515 +5149929 +6133619 +5880539 +10422582 +10632124 +6133596 +9577234 +10530208 +11555221 +6133670 +6133673 +6133674 +7346249 +6133637 +11780161 +6133604 +6133607 +10629052 +6133562 +10864093 +6133523 +6133525 +6133528 +6133498 +10477629 +6133575 +9962269 +6133517 +6133635 +10175639 +9617411 +9932090 +7345829 +5880478 +5146335 +1942522 +1942060 +1942067 +1942251 +5141643 +10773498 +1942378 +1942618 +1942621 +1942636 +1942715 +1942808 +1942836 +4689929 +1942878 +1943212 +1943223 +1943236 +1943308 +5141795 +1943505 +1943619 +1943625 +1943757 +1944462 +1944483 +1944503 +1944504 +1944521 +1944778 +5141924 +9050611 +1945088 +1945122 +1945137 +1945143 +1945173 +1945225 +1945227 +1945270 +1945274 +1945605 +1945694 +1945710 +1945715 +1945738 +1945742 +1945748 +1945814 +1945837 +1945856 +1945863 +1945874 +1945878 +1946019 +1946051 +1946058 +1946067 +1946145 +5142067 +1946432 +1946486 +1946695 +1946731 +1946737 +1946738 +1946916 +1946917 +1947385 +1947409 +1947446 +1947449 +1947456 +1947491 +1947492 +1947496 +1947661 +1947673 +1947703 +1947727 +1947740 +1947745 +1947753 +1947765 +1947775 +1947805 +1947846 +1948061 +1948062 +1948073 +5142213 +1948464 +1948465 +1948941 +1949008 +1949015 +1949336 +1949366 +1949404 +1949419 +7346351 +8828146 +9068968 +1950013 +7346356 +1950169 +1950171 +1950302 +1950521 +1950533 +1950879 +1951157 +1951170 +5142725 +5142729 +5142730 +5142749 +1952883 +1758613 +9355953 +10329023 +1760620 +1761778 +1762657 +6132957 +1763741 +1764553 +5109843 +5109848 +5109872 +5109882 +5109898 +1765508 +1766910 +11034779 +1767368 +1767381 +1767393 +1767430 +10575632 +5802396 +5883925 +1768568 +1769095 +1769209 +1769978 +1771357 +1771555 +1774797 +6115946 +1778109 +5111535 +5772222 +1779276 +5111967 +5111974 +1782341 +1782354 +1782543 +1782757 +1783059 +1784513 +1785145 +1785181 +1785314 +1785329 +1785725 +1786573 +1787367 +1787373 +4687681 +1788856 +1789957 +1792996 +1793238 +1793246 +1793661 +1793689 +1795065 +1795068 +6133011 +1795597 +4688166 +4688169 +4688172 +1798090 +1799695 +1800149 +9536457 +4532269 +6132989 +6132762 +10121804 +6132797 +5109385 +8491927 +1792555 +8108800 +1771245 +5113853 +5108671 +5108724 +5108737 +5108752 +5108794 +1759394 +1789512 +1789530 +10933525 +11437060 +11615549 +4532266 +6115822 +6115830 +1782273 +1782289 +10063383 +9325654 +10458175 +10683012 +1822487 +1822493 +1822852 +6133742 +5118565 +7346263 +6133720 +1823706 +5118582 +6133692 +1824338 +1824354 +1824766 +1826020 +1824845 +1824997 +1825336 +5118974 +1825920 +1825956 +6133700 +6133750 +1827408 +1827414 +1827484 +4534869 +5119239 +1827650 +1827711 +6133680 +6133681 +6133684 +9921001 +5118841 +5127748 +5806166 +11464595 +1892821 +5127867 +5127893 +5127916 +5127932 +5127955 +5127971 +5127992 +5127998 +9963153 +1893204 +1893241 +1893266 +5128034 +1893329 +10055104 +1893526 +1893546 +1893551 +1893612 +1893645 +1893660 +1893663 +1893699 +1893787 +1893793 +1893921 +1893923 +1893951 +4704279 +8832485 +8982591 +10333787 +1893989 +1893993 +1893998 +1894002 +1894012 +1894057 +1894060 +5128161 +5128169 +5128182 +10639484 +1895037 +1895159 +1895448 +1895499 +1895609 +1895667 +1895670 +1895956 +1895984 +1895992 +1896061 +1896063 +1896073 +1896141 +1896142 +1896152 +1896304 +1896922 +1897664 +1897685 +1897692 +1897722 +1897747 +1897770 +5129266 +1897808 +1897814 +1897817 +10383968 +1898234 +4299368 +5129293 +7346344 +1898434 +5129417 +1898958 +1898970 +1898988 +1899187 +1900093 +1900939 +1901001 +1901213 +5130277 +1901372 +1901399 +1901404 +1901411 +1901427 +1901428 +1901429 +1901435 +1901463 +1901669 +5130369 +5130439 +5130444 +5130456 +5130464 +5130471 +5130476 +5130521 +5130542 +1902568 +10394962 +10577473 +5130748 +5130775 +5130813 +5130814 +5130851 +5130904 +5130944 +5130971 +5131058 +9999965 +1904272 +1904281 +1904282 +1904283 +1904701 +1904719 +1904728 +1904760 +1904764 +1904798 +1904884 +1904887 +1904888 +1904916 +1904921 +1904922 +1904932 +1904938 +1904943 +1904948 +1904996 +1905079 +1905142 +1907430 +1907432 +1907475 +1907498 +1907534 +1907620 +1907637 +1907666 +1907683 +1907687 +4535754 +5881946 +7976131 +1908352 +1908660 +1908700 +1908702 +1908707 +1908713 +1908775 +5133051 +11608942 +1908818 +1908840 +1908863 +1908871 +1908897 +1908929 +1908953 +1908962 +1909123 +1909216 +7346301 +8978362 +1909281 +1909319 +10656625 +1909607 +1909659 +1909810 +1909854 +1909879 +1909884 +1910371 +1910706 +1910753 +6133858 +1910809 +1910812 +5133687 +5133689 +1911736 +1911755 +5133695 +1913091 +1913105 +1915031 +1915079 +1915080 +1915110 +1915140 +1915144 +1915160 +1915262 +1915270 +1915325 +1915332 +8669164 +11516142 +11535847 +5135839 +1916758 +5136514 +5136594 +5136681 +5136713 +5136752 +5136790 +5136866 +5136868 +5136939 +5137022 +5137085 +5137086 +5137128 +5137156 +5137166 +5137291 +5137330 +5137388 +1918321 +1918394 +1918406 +1918495 +1918497 +1918509 +1918532 +1918533 +1918553 +1918554 +10595994 +10000384 +10043827 +11419137 +11760688 +11840957 +4704316 +10376507 +5131142 +5131256 +5131339 +5131372 +5131407 +5131443 +5131467 +5131493 +5131495 +5131520 +5131555 +5131565 +10228568 +10277877 +10508423 +7346335 +5806167 +5881397 +6100725 +6100726 +7642610 +5128569 +5128644 +5128663 +5129000 +5129025 +10201273 +8549720 +1910576 +1910628 +1910629 +1910648 +1910662 +1914708 +1914749 +7346340 +1918584 +1951462 +1951492 +1951505 +1951507 +1951529 +5142870 +1951675 +1951747 +1951859 +1951874 +1951881 +1952147 +1952175 +1952177 +1952281 +5143007 +5143076 +5143080 +1952481 +10782264 +1952685 +1952704 +5143116 +1952857 +5885428 +1868409 +4702564 +1868499 +1868470 +5141581 +5120341 +1843564 +1730519 +1730543 +1730978 +10450446 +8008237 +8130866 +8402212 +1872359 +1872361 +1878626 +6133117 +7628188 +1878744 +1878826 +1879125 +1879141 +1879227 +1879340 +1879379 +1879408 +1879452 +1879471 +5126635 +5126637 +1880353 +1880451 +1880464 +1880852 +1880858 +1880968 +1881089 +1881121 +1881170 +9819403 +1881293 +1881320 +1881329 +1881336 +1881340 +1881515 +1881964 +1882215 +1882253 +1882266 +1882272 +1882310 +1882753 +1882767 +1882771 +1882773 +1882884 +1882905 +10156181 +1882930 +1882941 +1882960 +1882965 +1883067 +1883394 +5127097 +1883873 +1883881 +1883943 +1883951 +1884051 +1884061 +1884228 +1884229 +9294363 +1884434 +1884437 +1884449 +1884461 +1884479 +1884671 +6120980 +1884774 +1884816 +1884844 +1884858 +1884890 +1884909 +4532146 +1885012 +1885262 +1885263 +1885569 +1885623 +1885630 +6133181 +1885745 +1885763 +1885764 +1885826 +1885836 +1885919 +1885945 +1886015 +1886241 +1886251 +1886362 +1886526 +1886700 +1886720 +1886726 +1886729 +1887054 +1887509 +1887586 +1887691 +1887701 +1888027 +1888040 +1888092 +1888324 +1888346 +5127394 +1888891 +1888893 +1888906 +1888911 +1888913 +1889043 +1889050 +1889053 +1889071 +1889074 +1889242 +1889249 +1889270 +1889272 +1889277 +1889356 +1889358 +1889531 +1889552 +1889563 +1890031 +1890097 +1890287 +1890320 +1890335 +7543006 +10180624 +1890410 +1890512 +1890670 +10071588 +1891308 +1891339 +1891583 +1891636 +1891758 +1891889 +1891932 +1891936 +1892153 +10141437 +9674732 +6133140 +5771877 +10117959 +4532125 +9967529 +10145421 +6120803 +6133232 +6121010 +10513366 +10502505 +10397209 +6133154 +6133158 +10375403 +1886374 +1889765 +1889833 +1889850 +5127562 +5127592 +5127595 +5127629 +5127644 +5127656 +5127669 +5127675 +5127683 +5127688 +5127698 +5802339 +6121184 +1888638 +1888639 +1883885 +10410699 +1831136 +5122430 +1858674 +1858698 +1858930 +1859161 +1859453 +9749806 +6133397 +1859932 +1860026 +5123180 +1864897 +1865593 +10014340 +1865660 +1865666 +9914882 +9972403 +1865930 +1866237 +1866356 +6106943 +1866491 +1866530 +1866573 +9906979 +10047346 +1867928 +1868025 +11729388 +5124716 +5120278 +10019169 +10005133 +1861451 +1861456 +1861457 +1861488 +1861494 +1861644 +1861663 +1861665 +1861714 +1861721 +5123674 +1861933 +1861936 +1861937 +1861938 +1861949 +1861951 +1861975 +1862008 +1862026 +1862061 +5123676 +5123685 +1862293 +1862363 +1862370 +1862394 +1862401 +1862403 +1862414 +9836014 +1862430 +1862434 +1862449 +1862454 +1862468 +1862475 +1862481 +1862516 +1862517 +1862521 +1862526 +6106708 +5123707 +5123709 +1863034 +1863354 +1863388 +1863394 +1863467 +1863646 +9310369 +1863829 +1863848 +1863880 +1863907 +1863909 +1863910 +1863924 +1863944 +9578319 +1864126 +1864135 +8133328 +11738734 +11954157 +1864652 +5124300 +5124304 +5124305 +5124332 +5124348 +5124374 +5124433 +1864796 +6099041 +6106759 +10193618 +5123815 +5123824 +5123837 +5123852 +5123870 +5123876 +5123884 +5123890 +8810912 +10189661 +10191275 +10436020 +1992634 +1992883 +1993496 +6133769 +1993637 +1953192 +1953196 +1953217 +1953326 +1953356 +6132711 +6132712 +1953407 +1953423 +11467944 +6132725 +6132723 +6132729 +1954037 +5143241 +5143249 +5143266 +5143279 +1954120 +6132728 +1754135 +1754263 +1754368 +1754516 +1754535 +1754919 +1754933 +1755248 +1755276 +1757652 +5108318 +5108334 +5108335 +11860016 +5108346 +1830669 +9004359 +1855630 +1856005 +1857380 +1857626 +1857828 +1857938 +1858163 +1858283 +8178453 +1858557 +1937665 +1937699 +1937707 +1937712 +1937723 +1937745 +1937769 +1937819 +1937826 +1937847 +1937856 +1937892 +1937911 +1937937 +1937966 +1937975 +1937988 +1938007 +1938052 +1938069 +1938074 +1938088 +1938114 +1938122 +1938129 +1938174 +4692504 +9017206 +1936988 +1936993 +1937011 +1937037 +5141144 +5141154 +5141163 +5141172 +5141177 +5141179 +5141185 +5141187 +5141188 +5141195 +5141197 +5141198 +5141199 +5141202 +5141207 +5141212 +5141215 +5141226 +5141229 +5141230 +5141233 +5141236 +5141242 +5141252 +5141254 +1937444 +1937514 +1937530 +1937570 +1937580 +1937613 +1937618 +1939086 +1939156 +1939168 +1939225 +5141311 +5141317 +12188993 +10213314 +1800441 +6133777 +1800528 +1800539 +1800562 +1800572 +10010361 +1800686 +1800691 +1800821 +5114394 +5114400 +11873966 +9544823 +5114425 +6133780 +1801001 +1801073 +1801080 +1801170 +1801196 +5114465 +5114515 +1801461 +1801490 +1801503 +1801519 +10066605 +10510325 +4534792 +6112606 +6112610 +6112613 +6112661 +6133809 +6133811 +1801993 +1802090 +1802120 +1802229 +1802337 +1802702 +1802783 +1802827 +1802830 +1802833 +1802919 +1802939 +1803022 +1803035 +1803039 +1803060 +1803078 +6133803 +5114303 diff --git a/dev/releases/mambo_v3/presets/subsaharan_africa.classes b/dev/releases/mambo_v3/presets/subsaharan_africa.classes new file mode 100644 index 0000000..fd828a8 --- /dev/null +++ b/dev/releases/mambo_v3/presets/subsaharan_africa.classes @@ -0,0 +1,904 @@ +1992315 +6113873 +1732087 +5101590 +1732660 +1732955 +1734704 +6113959 +1845270 +1845574 +1845616 +4528100 +1846849 +1847111 +9546514 +1848219 +9868978 +1849924 +1850184 +1850640 +1850781 +5122121 +1851347 +5119338 +1839146 +1831458 +11513018 +1763976 +1766612 +1767883 +1769739 +1771455 +1772352 +1772447 +1772689 +5110546 +8979264 +1776265 +1776268 +4687991 +1778430 +5111054 +8193562 +1786190 +1786980 +1786984 +1786985 +1787009 +1788553 +6116754 +1789057 +1789498 +1789805 +1790287 +1791715 +1792210 +5113330 +1795074 +5113925 +1796984 +5884245 +6117055 +6117124 +1798449 +1798481 +1798504 +6115283 +1798802 +4301310 +4532352 +6115437 +8793873 +1803148 +1803163 +1803197 +1804337 +8865876 +1806871 +1806913 +1808172 +1808359 +1809158 +1809159 +1814552 +8916247 +5117776 +5117791 +5117805 +6122301 +6121912 +1820802 +1820948 +1821012 +1821436 +6122103 +10503495 +8881513 +4532549 +12017078 +6112547 +6112472 +5115381 +1774826 +5116504 +8723161 +5108808 +1781413 +1780897 +1794268 +1803590 +1803593 +1819320 +1772374 +6115388 +1816685 +1774600 +1768626 +1803544 +1803545 +1817973 +5111643 +1804532 +1813460 +1807634 +1782645 +1768459 +5113036 +1821547 +1821581 +1821684 +1768212 +5118223 +1820573 +6116073 +1816775 +1803306 +4687933 +6116646 +6116659 +6116661 +6116669 +6116674 +4532453 +1814877 +11754729 +1781503 +6115504 +1785072 +1785105 +1765997 +4687389 +5884188 +1809585 +1807924 +1782310 +1777517 +6115973 +1840483 +1831752 +1852831 +10308365 +5123339 +5123419 +5123474 +1869595 +1870450 +1870988 +1871407 +8766638 +1871451 +4531365 +1871754 +1871783 +1872850 +1872873 +1872901 +1873051 +1873079 +1873215 +1873411 +4531237 +1873890 +1875478 +1875687 +1875940 +1875958 +1876542 +1876922 +1877788 +1877941 +1878470 +1878490 +1888454 +1890024 +5884888 +1877035 +5125780 +1871504 +4525777 +12231385 +1736623 +1737131 +1737491 +1737509 +4530608 +1740524 +1740623 +1740762 +1740797 +1741258 +5103451 +11846897 +1745781 +1921064 +10581870 +1921650 +10858809 +11374171 +11378618 +1922063 +1922064 +1922244 +1922291 +1922468 +1922679 +1922689 +1922694 +1922701 +1923465 +1923473 +1923796 +1923809 +10656713 +1924392 +1924429 +8023645 +8951523 +1924713 +5138701 +1925410 +1925609 +1925615 +1925676 +1925693 +1925694 +1925801 +1926530 +1926531 +1926539 +1926546 +1926550 +1926817 +1927313 +1927633 +11667997 +1927943 +1927955 +1927979 +1928070 +1928076 +5139040 +1928389 +5139188 +5139201 +1928746 +1929059 +1929697 +1930904 +1930916 +1930923 +1930931 +4535106 +1931046 +1931403 +1931437 +1932177 +1932302 +1932332 +1932354 +8833509 +7346444 +8177775 +1932580 +1932629 +5139954 +5140006 +1932751 +1932752 +1932753 +1932882 +1932976 +5140244 +9954885 +1933583 +1933649 +5138841 +5138921 +7964910 +1933204 +1752327 +1752805 +5105584 +1919181 +1919194 +1919210 +1919213 +1919214 +1919223 +4535280 +4535285 +1919346 +1919660 +1919663 +1919665 +1919924 +1919929 +1919930 +1920181 +1920258 +5137790 +5137799 +5137827 +5137828 +5137849 +5805954 +1920348 +1920353 +1920356 +1920359 +1920362 +1920363 +1920369 +1920370 +1920374 +1920377 +1920378 +1920379 +1920381 +1920390 +1920395 +1920401 +1920404 +1920405 +4699245 +5137863 +1920496 +1920506 +1920509 +5137926 +5137946 +4535271 +5137988 +5137996 +5137998 +1920795 +1920815 +1920816 +5137612 +5137663 +1750326 +5104903 +1868884 +1869043 +1869238 +1869278 +1869286 +1955202 +1955694 +1956897 +1957286 +8172949 +1959839 +1960105 +1961025 +4302252 +1963168 +1964076 +1966255 +1967209 +1967324 +1967438 +1967606 +1969581 +5144691 +5144976 +5145075 +5145396 +5145468 +5145502 +5145842 +1973171 +1973393 +5146510 +5147046 +5147058 +5147923 +1978017 +5148264 +1980521 +1980525 +1980533 +1981160 +1981202 +1982221 +1982267 +1983888 +1985742 +4525097 +6118530 +6214843 +4524223 +1988064 +1992066 +7507369 +4525034 +4523519 +6119299 +6119323 +6119359 +6119488 +9220953 +5149664 +5149787 +1987602 +1954382 +11794114 +1942762 +1942790 +1942793 +1943236 +8277078 +8073674 +1944234 +1944910 +1945535 +1945571 +1945587 +1945786 +1945877 +1945878 +1945980 +1946037 +1946660 +1946661 +1946738 +1947112 +1947113 +1947117 +5142130 +5142160 +1948371 +1948994 +5142352 +1950156 +1950877 +1948916 +1758839 +5108619 +1761439 +1762383 +5109646 +1764174 +4534245 +4534250 +4534275 +11797244 +5109843 +5109848 +5109855 +5109931 +8352161 +1766072 +9105656 +5772169 +5772171 +5772206 +1768042 +1768048 +1770416 +1774470 +1774797 +6115946 +1775329 +5111147 +5772222 +1779258 +1780049 +1782560 +1783777 +1784349 +1784591 +1785145 +1785181 +1785185 +1785329 +1785361 +1786360 +1787264 +1787438 +1787610 +4534166 +4534194 +1789695 +1789957 +1790364 +1791758 +1792418 +1792996 +1794507 +1795068 +4532908 +4532700 +9803522 +1796451 +4532269 +6116341 +6116368 +6116899 +1763072 +5109259 +5109345 +5109407 +4534675 +4534681 +4534683 +4534686 +6116440 +8108800 +1770821 +1771040 +1771245 +1765751 +5108660 +5108671 +11714235 +11819666 +1797793 +1797864 +1797942 +1797965 +4532203 +4532206 +4532216 +4532266 +6115772 +6115793 +6115822 +1782267 +1767302 +8363507 +10458175 +5119183 +1827775 +10023821 +1892544 +1892554 +1892555 +1892621 +11688586 +5806166 +10587253 +1892811 +1892814 +5127822 +1893558 +1893562 +1893901 +1894088 +8049830 +4535827 +1895956 +1896547 +1896600 +1896603 +5128545 +1897904 +1897946 +1897965 +1897970 +1897972 +1898002 +1898017 +10114575 +1898286 +1898290 +4299368 +4299370 +1899071 +1899144 +1899164 +1899198 +1900053 +1900055 +1901781 +1901782 +1901850 +11546465 +11623814 +11726907 +11841763 +5130335 +5130347 +5130392 +5130393 +5130396 +5130448 +5130464 +5130467 +5130487 +5130502 +5130542 +1903009 +1903661 +1904206 +1906006 +1906014 +1906030 +1906063 +1906117 +5132523 +5132529 +5132540 +5132545 +5132550 +5132591 +5132713 +1906604 +1906621 +1906679 +10569879 +11378273 +5132839 +1907399 +4535754 +1908356 +8727750 +10656625 +1909818 +5133610 +10203260 +1912506 +8964866 +1915499 +11372793 +11375508 +12301192 +12357826 +12358748 +1909736 +5135573 +5135944 +5136059 +5136113 +5136200 +5136306 +1918207 +1918212 +1918688 +1918776 +4535539 +5137397 +9902073 +10717680 +5131347 +5131442 +5131540 +5133088 +7642610 +5135513 +10873137 +1896957 +5128597 +5128825 +5128984 +5129091 +5129190 +9087922 +1910496 +1910501 +1910628 +1910629 +1910663 +1842097 +4301036 +4529738 +6122527 +1878656 +1878804 +1878951 +1879001 +1879227 +1879340 +1879408 +1879427 +1879452 +5126204 +1879471 +1879490 +1879655 +1879691 +1880011 +5126637 +1880408 +1880865 +1881089 +1881126 +1881147 +1881151 +5126668 +9819403 +1881303 +1881362 +1882110 +1882884 +1882905 +1882941 +1882960 +1882965 +1883067 +1883124 +1883386 +1883458 +5127094 +1884051 +1884061 +1884437 +1884449 +1884479 +6120980 +1884774 +1884844 +1884909 +4532146 +1885024 +1885262 +1885745 +1885764 +6120861 +1885836 +1885994 +1886015 +1886088 +1886104 +1886251 +1886648 +1886729 +7562564 +1887054 +8955839 +4531670 +1887694 +1888047 +1888346 +1888915 +1889071 +1889074 +1889272 +1889277 +1889356 +1889370 +1889543 +9228024 +1890287 +1890335 +7543006 +1890346 +1890410 +1890534 +1890670 +1890898 +1891167 +1891217 +4532022 +4532024 +1891583 +8986756 +1892456 +1892476 +9181627 +5771877 +6133232 +6121010 +6121218 +6133158 +8876855 +1886374 +1889833 +5127644 +5127656 +5127669 +5127675 +5802339 +6121184 +1886207 +1883885 +1831136 +1858674 +1858930 +1859046 +1859285 +1859932 +1860063 +5123180 +1866249 +1866252 +1866262 +1866421 +5124813 +1866980 +1867009 +1867014 +1867295 +1867312 +1867673 +1867744 +1867749 +1867750 +1867751 +1868014 +1868049 +1868060 +11414590 +11464362 +5120278 +1861433 +1861510 +1861522 +1861544 +1861584 +1861592 +1861644 +5123636 +1862293 +1862311 +1862394 +1862401 +1862433 +1862449 +1862692 +1862719 +1862765 +1862989 +1863034 +1863282 +1863544 +1863640 +9178932 +5124071 +5124088 +5124093 +5124109 +1864329 +1864576 +1864652 +5124352 +1992634 +1992956 +1992969 +6132725 +5119506 +1830437 +1830457 +1830459 +10055273 +1856105 +1857068 +1857143 +1857577 +1857581 +1857626 +1857829 +1858163 +1858283 +1937643 +1937667 +1937702 +1937711 +1937849 +1937959 +1938069 +1938125 +1938166 +5141170 +5141195 +5141216 +5141234 +5141248 +5141250 +4690079 +5141297 +1939314 +5770913 +4685980 +1800642 +5114409 +4534796 +4534757 +6112634 +1802662 +1802850 +1802868 +1803022 +1803025 +1803060 diff --git a/dev/releases/mambo_v3/presets/tasmania.classes b/dev/releases/mambo_v3/presets/tasmania.classes new file mode 100644 index 0000000..803a7ad --- /dev/null +++ b/dev/releases/mambo_v3/presets/tasmania.classes @@ -0,0 +1,401 @@ +9840570 +10341307 +10435406 +1733504 +1832023 +1832553 +1845503 +8797017 +1850156 +1829866 +1828456 +6196939 +1828540 +1828544 +10833593 +5119346 +5119350 +5119353 +1837706 +4686897 +4686905 +4686913 +1835886 +4685557 +1831458 +1831499 +1761751 +1761752 +1761820 +1762849 +1762852 +1780856 +1780860 +10154280 +1782326 +1782328 +5112407 +5112410 +1790450 +1795657 +1798023 +1799165 +1799167 +1803197 +1804430 +1805524 +1806704 +1807478 +1807488 +1807491 +1807503 +12214821 +1809244 +1809248 +10074808 +1815338 +1816110 +1816434 +1817065 +1817171 +1817217 +1819970 +10274769 +10496181 +5113001 +1811455 +1860849 +1731906 +1731923 +1731926 +1731927 +1732001 +1732005 +1732044 +10640865 +9950697 +1833782 +4685595 +1835086 +1838071 +1839658 +1840346 +5123339 +10005632 +1870703 +1872255 +1872735 +1872812 +1873290 +1873373 +5125600 +5125629 +1874146 +1875534 +1876955 +1890065 +10211808 +10526954 +9857679 +1940575 +1736623 +10469532 +1737115 +1737187 +1737847 +1739051 +12259151 +1741074 +11906255 +1743319 +1743680 +9867379 +1745019 +6219423 +10358334 +1747639 +10355898 +1748425 +1748473 +1748486 +9952043 +10530383 +10606887 +10549715 +1925555 +4708984 +1927894 +4708927 +1928923 +1931889 +1932563 +7346444 +1752536 +1752545 +1752547 +1920496 +1828310 +9943941 +10118678 +1962159 +9875141 +1970485 +1964995 +1964996 +10295646 +1954236 +10634980 +9213204 +1955093 +1955737 +10560674 +11720357 +9593393 +10062202 +10075732 +10132475 +10363151 +10398979 +10434798 +10456933 +10457796 +10471477 +10623003 +11468089 +11638437 +10257899 +1956416 +10167252 +1959341 +1960201 +1960521 +5144204 +1962842 +5144353 +1964066 +1965643 +1965650 +10174909 +1967716 +1968115 +1968131 +1969104 +10109201 +5144937 +5144942 +5145422 +1972407 +1972606 +5146262 +1972903 +5146472 +5146805 +5146880 +1975212 +1975248 +10018221 +10572729 +1976123 +1976142 +1976341 +1976342 +1976890 +1976891 +1978082 +10530515 +1978904 +1979041 +1980041 +1980063 +1980491 +10378314 +10571987 +1980821 +10860751 +1982024 +1982055 +1982085 +1982102 +1982148 +12116722 +1985826 +1986223 +1986846 +1986942 +5149369 +5149387 +1988354 +1988360 +1988361 +1988362 +1988376 +1988894 +1989181 +1989283 +1989377 +1990165 +1990167 +1990255 +1990256 +1990371 +1991468 +1992167 +4702878 +10078800 +8501203 +10438474 +10146771 +1963532 +1942618 +1943090 +1943096 +4689912 +1944523 +4689905 +1946720 +1758850 +1760172 +1761788 +1762900 +1762902 +1768972 +1769114 +1769260 +1769271 +1769283 +1769308 +1769310 +4688049 +4688092 +4688098 +1771357 +4687565 +1774918 +10032003 +1777120 +1785149 +1791793 +1795110 +1798084 +9890366 +11054256 +1792560 +1770849 +1771203 +1771296 +10658576 +1823493 +1824280 +1827507 +11905965 +1827802 +5806175 +5806177 +4704400 +4704407 +1899943 +1899947 +1899950 +5130456 +1902244 +4704500 +7642610 +5102423 +1735273 +5121177 +1843313 +5120368 +5120379 +11563728 +11904618 +10134558 +5806353 +1879405 +12231152 +5126376 +1880982 +1881018 +1881019 +1881031 +1881041 +1881132 +1881424 +1881504 +1882215 +1882355 +5126843 +5126922 +5127020 +5127039 +5127044 +1882905 +1884531 +1887036 +1892462 +10521368 +1831136 +1853578 +1854021 +1854249 +5806333 +1858762 +6097269 +1862293 +1862331 +1754619 +1754803 +1754814 +4689394 +1855804 +1855807 +1857020 +1857033 +1857180 +1857829 +1857882 +1857935 +1858100 +5803065 +1838297 +1838308 +1833477 +1833600 +1833653 +1835121 +1835123 +1835821 +1836899 +1837172 +1838333 +4686617 +4686620 +4686621 +4686628 +1838960 +4528702 +4685566 +1839494 +5120053 +5120063 +4685669 +4685678 +1840258 +1840812 +1841302 +5802257 +4686016 +4686029 +4685631 +4685810 +4686385 +4686702 +1801316 +1801432 +10573425 +11496990 +11508472 +11698552 +11836409 +11871044 +1801787 +1801903 diff --git a/docs/model-presets.md b/docs/model-presets.md new file mode 100644 index 0000000..874d636 --- /dev/null +++ b/docs/model-presets.md @@ -0,0 +1,74 @@ +# Model preset scope + +Generated release catalogue: edit `dev/releases/mambo_v3/preset-definitions.toml`, then use the build command below. + +These overlapping deployment presets aim to avoid most geographically nonsensical predictions while allowing species that **can be found** in a region. They do not describe native or natural distributions, or where species should occur. Recorded introduced species, migrants and vagrants are eligible: no native-status or establishment filter is applied. Exclusion is not evidence that a species cannot occur there. Country codes are ISO alpha-2 metadata values. + +Each geographic preset applies the minimum row count shown below. Counts use all existing splits, including held-out rows, without further deduplication. Each row counts once even if it matches both a country and a continent predicate. Full uses all model species without a regional threshold. Lists retain the model's species order. + +Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending. + +## Presets + +| ID | Species | Minimum rows per species | Selected rows | Geographic scope | +| --- | ---: | ---: | ---: | --- | +| `full` | 12,632 | — | — | All species in the pinned model. | +| `europe` | 3,014 | 26 | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | +| `north_europe` | 1,977 | 26 | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | +| `australia` | 1,907 | 1 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | +| `tasmania` | 401 | 1 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | +| `north_america` | 4,551 | 1 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | +| `central_america` | 2,022 | 1 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | +| `south_america` | 1,683 | 1 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | +| `caribbean` | 1,092 | 1 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | +| `south_asia` | 1,929 | 1 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | +| `asia` | 5,336 | 1 | 1,033,931 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent. | +| `japan` | 974 | 1 | 30,076 | All records assigned countryCode JP, including islands. | +| `africa` | 1,129 | 1 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | +| `subsaharan_africa` | 904 | 1 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | +| `mediterranean` | 2,874 | 1 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | +| `arctic` | 6,096 | 1 | 2,496,358 | Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter. | +| `oceania` | 2,337 | 1 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | +| `southeast_asia` | 2,031 | 1 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | +| `east_asia` | 4,447 | 1 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | +| `middle_east` | 1,330 | 1 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | + +## Exact metadata filters + +- **europe** (Europe (legacy)): `continent` in `EUROPE`. +- **north_europe** (Northern Europe (legacy)): `countryCode` in `DE, DK, EE, FI, LT, LV, NL, NO, PL, SE`. +- **australia** (Australia including Tasmania): `countryCode` in `AU`. +- **tasmania** (Tasmania only): (`countryCode` in `AU`) AND `stateProvince` in `Tasmania`. +- **north_america** (North America): `countryCode` in `CA, US, MX, GL, BM, PM`. +- **central_america** (Central America): `countryCode` in `MX, BZ, GT, HN, SV, NI, CR, PA`. +- **south_america** (South America): `continent` in `SOUTH_AMERICA` OR `countryCode` in `AR, BO, BR, CL, CO, EC, FK, GF, GY, PY, PE, SR, UY, VE, CR, PA`. +- **caribbean** (Caribbean): `countryCode` in `AG, AI, AW, BB, BL, BQ, BS, CU, CW, DM, DO, GD, GP, HT, JM, KN, KY, LC, MF, MQ, MS, PR, SX, TC, TT, VC, VG, VI, BM, BZ, GY, SR, GF`. +- **south_asia** (South Asia): `countryCode` in `AF, BD, BT, IN, MV, NP, PK, LK, MM, IR`. +- **asia** (Asia): `continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, CY, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`. +- **japan** (Japan): `countryCode` in `JP`. +- **africa** (Africa): `continent` in `AFRICA` OR `countryCode` in `DZ, AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, EG, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, LY, MG, MW, ML, MR, MU, YT, MA, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, TN, UG, EH, ZM, ZW`. +- **subsaharan_africa** (Sub-Saharan Africa (broad)): (`continent` in `AFRICA` OR `countryCode` in `AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, MG, MW, ML, MR, MU, YT, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, UG, ZM, ZW`) AND country NOT in `DZ, EG, LY, MA, TN, EH`. +- **mediterranean** (Mediterranean (broad)): `countryCode` in `AL, DZ, BA, HR, CY, EG, FR, GR, IL, IT, LB, LY, MT, MC, ME, MA, PS, SI, ES, SY, TN, TR, PT, GI, AD, SM, VA, MK, BG, RS, JO`. +- **arctic** (Arctic / broad northern-country scope): `countryCode` in `CA, US, GL, IS, FO, NO, SJ, SE, FI, AX, RU`. +- **oceania** (Oceania): `continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`. +- **southeast_asia** (Southeast Asia): `countryCode` in `BN, KH, ID, LA, MY, MM, PH, SG, TH, TL, VN, PG`. +- **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`. +- **middle_east** (Middle East): `countryCode` in `TR, CY, SY, LB, IL, PS, JO, IQ, IR, KW, SA, BH, QA, AE, OM, YE, EG, AM, AZ, GE, AF, PK`. + +## Interpretation and reproducibility + +Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic is a broad northern-country proxy and includes southern records from those countries. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. + +Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes Australian records with blank or different state values. Overlapping presets are expected; membership in one does not exclude another. + +Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.build_presets \ + examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --evidence-root local-evidence/mambo-v3 +``` + +The default checks committed assets, hashes, counts and this catalogue against fresh reconstruction. Use `--write` after an intentional definition update to regenerate them. Legacy preset hashes must remain unchanged. Published preset membership changes require a new release/revision and an added/removed-ID report. + +[Machine-readable definitions](../dev/releases/mambo_v3/preset-definitions.toml), [generated hashes and counts](../dev/releases/mambo_v3/preset-manifest.toml), [source provenance](../dev/releases/mambo_v3/construction.toml), [legacy reconstruction details](../dev/releases/mambo_v3/README.md#regional-scope-and-construction). diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 30554ba..574b8e2 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -14,6 +14,11 @@ ambiguity for membership-neutral additions such as Ireland. Adapter compatibilit and inference qualification remain outstanding. Local evaluation will use Flemming; the large in-domain dataset remains on UCloud and must be evaluated there using the original supplied split. +The [public preset catalogue](model-presets.md) defines the expanded geographic +selection, including Australia/Tasmania and deliberately overlapping regions. +These are permissive guards against geographically nonsensical predictions, +not native-distribution maps. Preserve these names, filters and counts in bundle +metadata and API preset discovery when implementing the adapters. ## Branch and integration policy diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py new file mode 100644 index 0000000..b913fe0 --- /dev/null +++ b/tests/releases/test_mambo_presets.py @@ -0,0 +1,58 @@ +"""Behavioral contracts for deliberately overlapping deployment regions.""" + +import tomllib + +import pytest + +from dev.releases.mambo_v3.audit import HERE +from dev.releases.mambo_v3.build_presets import ordered_membership, select_region + +pa = pytest.importorskip("pyarrow") +RULES = tomllib.loads((HERE / "preset-definitions.toml").read_text())["presets"] + + +def countries_selected(name, countries): + table = pa.table({"countryCode": countries, "continent": [""] * len(countries)}) + return select_region(table, RULES[name])["countryCode"].to_pylist() + + +def test_american_regions_intentionally_overlap(): + countries = ["MX", "CR", "PA", "CA", "BR"] + assert countries_selected("north_america", countries) == ["MX", "CA"] + assert countries_selected("central_america", countries) == ["MX", "CR", "PA"] + assert countries_selected("south_america", countries) == ["CR", "PA", "BR"] + + +def test_tasmania_is_australian_state_not_endemism_filter(): + table = pa.table( + { + "countryCode": ["AU", "AU", "AU", "AU", "NZ"], + "stateProvince": ["Tasmania", "Victoria", "", None, "Tasmania"], + "speciesKey": ["widespread"] * 5, + } + ) + assert select_region(table, RULES["australia"]).num_rows == 4 + selected = select_region(table, RULES["tasmania"]) + assert selected.num_rows == 1 + assert selected["speciesKey"].to_pylist() == ["widespread"] + + +def test_union_does_not_duplicate_rows_and_exclusion_overrides_continent(): + table = pa.table({"countryCode": ["ZA", "EG", "SD", ""], "continent": ["AFRICA", "AFRICA", "", None]}) + assert select_region(table, RULES["africa"]).num_rows == 3 + assert select_region(table, RULES["subsaharan_africa"])["countryCode"].to_pylist() == ["ZA", "SD"] + + +def test_membership_preserves_model_order_and_rejects_unknown_species(): + assert ordered_membership({"a": 26, "b": 25, "c": 80}, 25, ["c", "b", "a"]) == ["c", "a"] + assert ordered_membership({"a": 1, "b": 0}, 0, ["b", "a"]) == ["a"] + with pytest.raises(ValueError, match="missing from model"): + ordered_membership({"unknown": 26}, 25, ["a"]) + + +def test_misspelled_or_empty_filter_fails_closed(): + table = pa.table({"countryCode": ["AU"]}) + with pytest.raises(ValueError, match="Unknown region fields"): + select_region(table, {"countries": ["AU"], "state_provinc": ["Tasmania"]}) + with pytest.raises(ValueError, match="requires countries or continents"): + select_region(table, {}) From da03b08508796af7574417bbb9b91fc9a0b1db4e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:21:28 +0200 Subject: [PATCH 015/221] release: qualify new presets with provisional regional and global minima --- dev/releases/mambo_v3/README.md | 10 + dev/releases/mambo_v3/build_presets.py | 59 ++- dev/releases/mambo_v3/preset-definitions.toml | 12 +- dev/releases/mambo_v3/preset-manifest.toml | 152 ++++-- dev/releases/mambo_v3/presets/africa.classes | 205 -------- dev/releases/mambo_v3/presets/arctic.classes | 212 -------- dev/releases/mambo_v3/presets/asia.classes | 343 ------------- .../mambo_v3/presets/australia.classes | 33 -- .../mambo_v3/presets/caribbean.classes | 216 -------- .../mambo_v3/presets/central_america.classes | 383 -------------- .../mambo_v3/presets/east_asia.classes | 324 ------------ dev/releases/mambo_v3/presets/japan.classes | 277 ---------- .../mambo_v3/presets/mediterranean.classes | 194 ------- .../mambo_v3/presets/middle_east.classes | 484 ------------------ .../mambo_v3/presets/north_america.classes | 126 ----- dev/releases/mambo_v3/presets/oceania.classes | 64 --- .../mambo_v3/presets/south_america.classes | 177 ------- .../mambo_v3/presets/south_asia.classes | 377 -------------- .../mambo_v3/presets/southeast_asia.classes | 359 ------------- .../presets/subsaharan_africa.classes | 108 ---- .../mambo_v3/presets/tasmania.classes | 127 ----- docs/model-presets.md | 44 +- tests/releases/test_mambo_presets.py | 13 +- 23 files changed, 196 insertions(+), 4103 deletions(-) diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index b6542f9..19d5815 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -56,6 +56,16 @@ conditional on the selected list. The reconstruction details below concern the two unchanged legacy presets; new filters and thresholds are defined in [preset-definitions.toml](preset-definitions.toml). +New presets provisionally require **at least 3 regional metadata rows and at least +25 global rows**. Both minima are inclusive. This replaces the initial one-row +draft and remains subject to a final qualification decision. The snapshot already +has at least 50 global rows for every model species, so the global gate currently +excludes nothing further. Australia changes from 1,907 to 1,874 species, Tasmania +from 401 to 274, and Japan from 974 to 697. Decide whether to count distinct GBIF +observations before finalizing: multiple image rows are not necessarily independent +occurrence evidence. A local Tasmania check gives 274 species with either three +rows or three distinct `gbifID` values. Both legacy lists remain unchanged. + | Preset | Species | Construction and evidence | Limits | | --- | ---: | --- | --- | | `full` | 12,632 | Every species in the pinned model mapping | Global training vocabulary, not every Lepidoptera species | diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 8b119a3..155279a 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -7,7 +7,6 @@ from pathlib import Path from dev.releases.mambo_v3.audit import HERE, sha256 -from dev.releases.mambo_v3.reconstruct_presets import membership ROOT = HERE.parents[2] @@ -17,7 +16,16 @@ def select_region(table, rule): import pyarrow as pa import pyarrow.compute as pc - permitted = {"label", "scope", "countries", "continents", "excluded_countries", "state_province", "exclusive_minimum_rows"} + permitted = { + "label", + "scope", + "countries", + "continents", + "excluded_countries", + "state_province", + "minimum_regional_rows", + "minimum_global_rows", + } if unknown := set(rule) - permitted: raise ValueError(f"Unknown region fields: {sorted(unknown)}") mask = None @@ -34,8 +42,14 @@ def select_region(table, rule): return table.filter(mask) -def ordered_membership(counts, threshold, vocabulary): - chosen = membership(counts, threshold) +def ordered_membership(counts, minimum, vocabulary, global_counts=None, global_minimum=0): + if global_minimum and global_counts is None: + raise ValueError("Global qualification requires global counts") + chosen = { + species + for species, count in counts.items() + if count >= minimum and (not global_minimum or global_counts.get(species, 0) >= global_minimum) + } if unknown := chosen - set(vocabulary): raise ValueError(f"Selected species missing from model: {sorted(unknown)}") return [label for label in vocabulary if label in chosen] @@ -75,14 +89,18 @@ def build(metadata, evidence_root, write=False): table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent", "stateProvince"]) if table.num_rows != source["rows"] or table["speciesKey"].null_count: raise ValueError("Unexpected metadata rows or null species IDs") - threshold = definitions["exclusive_minimum_rows"] + regional_minimum = definitions["minimum_regional_rows"] + global_minimum = definitions["minimum_global_rows"] + global_counts = {row["values"]: row["counts"] for row in table["speciesKey"].value_counts().to_pylist()} outputs = {} manifest = [ - "schema_version = 1", + "schema_version = 2", + f'qualification_status = "{definitions["qualification_status"]}"', f'source_sha256 = "{source["sha256"]}"', f'model_manifest_sha256 = "{manifest_item["sha256"]}"', f'definitions_sha256 = "{sha256(definitions_path)}"', - f"exclusive_minimum_rows = {threshold}", + f"minimum_regional_rows = {regional_minimum}", + f"minimum_global_rows = {global_minimum}", ] documentation = [ "# Model preset scope", @@ -99,22 +117,36 @@ def build(metadata, evidence_root, write=False): "Each row counts once even if it matches both a country and a continent predicate. " "Full uses all model species without a regional threshold. Lists retain the model's species order.", "", + f"**Provisional qualification:** new presets require at least {regional_minimum} regional rows and " + f"at least {global_minimum} global rows for a species. These inclusive thresholds are a working proposal, " + "pending the final release decision. They reduce weak occurrence evidence but do not prove that records are independent " + "or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, " + "not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate.", + "", + f"In this pinned snapshot every model species has at least {min(global_counts.get(label, 0) for label in vocabulary)} " + f"global rows; {sum(global_counts.get(label, 0) < global_minimum for label in vocabulary)} model species fall below " + f"the proposed global minimum of {global_minimum}. " + "Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, " + "and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty.", + "", "Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope " "have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. " "These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending.", "", "## Presets", "", - "| ID | Species | Minimum rows per species | Selected rows | Geographic scope |", + "| ID | Species | Minimum regional / global rows | Selected rows | Geographic scope |", "| --- | ---: | ---: | ---: | --- |", f"| `full` | {len(vocabulary):,} | — | — | All species in the pinned model. |", ] summaries = {} for name, rule in definitions["presets"].items(): - region_threshold = rule.get("exclusive_minimum_rows", threshold) + region_minimum = rule.get("minimum_regional_rows", regional_minimum) + world_minimum = rule.get("minimum_global_rows", global_minimum) selected = select_region(table, rule) counts = {row["values"]: row["counts"] for row in selected["speciesKey"].value_counts().to_pylist()} - labels = ordered_membership(counts, region_threshold, vocabulary) + labels = ordered_membership(counts, region_minimum, vocabulary, global_counts, world_minimum) + regional_only = ordered_membership(counts, region_minimum, vocabulary) if not labels: raise ValueError(f"Empty preset: {name}") data = ("\n".join(labels) + "\n").encode() @@ -128,13 +160,16 @@ def build(metadata, evidence_root, write=False): f"[presets.{name}]", f'path = "presets/{name}.classes"', f"count = {len(labels)}", - f"exclusive_minimum_rows = {region_threshold}", + f"minimum_regional_rows = {region_minimum}", + f"minimum_global_rows = {world_minimum}", + f"excluded_by_global_gate_after_regional = {len(regional_only) - len(labels)}", f"selected_rows = {selected.num_rows}", f"species_before_threshold = {len(counts)}", f'sha256 = "{digest}"', ] ) - documentation.append(f"| `{name}` | {len(labels):,} | {region_threshold + 1} | {selected.num_rows:,} | {rule['scope']} |") + gate = f"{region_minimum} / {world_minimum or 'none'}" + documentation.append(f"| `{name}` | {len(labels):,} | {gate} | {selected.num_rows:,} | {rule['scope']} |") summaries[name] = len(labels) documentation.extend(["", "## Exact metadata filters", ""]) for name, rule in definitions["presets"].items(): diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index 8439c1c..63413ac 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -1,16 +1,20 @@ -schema_version = 1 -exclusive_minimum_rows = 0 +schema_version = 2 +qualification_status = "provisional; pending final release decision" +minimum_regional_rows = 3 +minimum_global_rows = 25 # Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union. # Counts include all metadata splits, without additional deduplication. [presets.europe] -exclusive_minimum_rows = 25 +minimum_regional_rows = 26 +minimum_global_rows = 0 label = "Europe (legacy)" continents = ["EUROPE"] scope = "Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries." [presets.north_europe] -exclusive_minimum_rows = 25 +minimum_regional_rows = 26 +minimum_global_rows = 0 label = "Northern Europe (legacy)" countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged)." diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index 5d5fc2f..26df30d 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -1,13 +1,17 @@ -schema_version = 1 +schema_version = 2 +qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "9aecb12cf91616a7fecba830f5d34bbed7decad1876a914a705e2b86663389b9" -exclusive_minimum_rows = 0 +definitions_sha256 = "8c653a37a1d3c6d3ceeea05896cba7b75811a2b93f00b121e3ff2aa71302d79e" +minimum_regional_rows = 3 +minimum_global_rows = 25 [presets.europe] path = "presets/europe.classes" count = 3014 -exclusive_minimum_rows = 25 +minimum_regional_rows = 26 +minimum_global_rows = 0 +excluded_by_global_gate_after_regional = 0 selected_rows = 2079617 species_before_threshold = 3132 sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" @@ -15,143 +19,179 @@ sha256 = "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" [presets.north_europe] path = "presets/north_europe.classes" count = 1977 -exclusive_minimum_rows = 25 +minimum_regional_rows = 26 +minimum_global_rows = 0 +excluded_by_global_gate_after_regional = 0 selected_rows = 768497 species_before_threshold = 2291 sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" [presets.australia] path = "presets/australia.classes" -count = 1907 -exclusive_minimum_rows = 0 +count = 1874 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 465726 species_before_threshold = 1907 -sha256 = "438894723315284f8c855a22593bceec25018ffa2a7844f67f391fb9bef258e7" +sha256 = "04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53" [presets.tasmania] path = "presets/tasmania.classes" -count = 401 -exclusive_minimum_rows = 0 +count = 274 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 4457 species_before_threshold = 401 -sha256 = "b3a80867c42949d95a4780092bf26b7ff094adf18bcc59f2de86d5993076eba8" +sha256 = "21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f" [presets.north_america] path = "presets/north_america.classes" -count = 4551 -exclusive_minimum_rows = 0 +count = 4425 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 2300391 species_before_threshold = 4551 -sha256 = "cd026fbfa8495f9da227044884fb544af0fb2126033274d171cb2d6a5a54b567" +sha256 = "2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f" [presets.central_america] path = "presets/central_america.classes" -count = 2022 -exclusive_minimum_rows = 0 +count = 1639 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 210173 species_before_threshold = 2022 -sha256 = "aa89d57e723b5acd33ce82323853a219a85534f40d7cc44e6ea3df9726fe8908" +sha256 = "835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885" [presets.south_america] path = "presets/south_america.classes" -count = 1683 -exclusive_minimum_rows = 0 +count = 1506 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 257026 species_before_threshold = 1683 -sha256 = "d43148782784345fb1ba4842edf1d95b1f85fd0440729028237c33d3faa17acf" +sha256 = "47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130" [presets.caribbean] path = "presets/caribbean.classes" -count = 1092 -exclusive_minimum_rows = 0 +count = 876 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 28652 species_before_threshold = 1092 -sha256 = "3434f6ae528d1b03502ecb4a6aaadb6931f56d6158e950f3267c2160fd208523" +sha256 = "ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3" [presets.south_asia] path = "presets/south_asia.classes" -count = 1929 -exclusive_minimum_rows = 0 +count = 1552 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 177926 species_before_threshold = 1929 -sha256 = "760f92644af8612f4b534f78a89c758e90506c52f3c793562e14991314bfdf6f" +sha256 = "5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849" [presets.asia] path = "presets/asia.classes" -count = 5336 -exclusive_minimum_rows = 0 +count = 4993 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 1033931 species_before_threshold = 5336 -sha256 = "f64bc11f9ac7f6fc26b21b3d595f0643390cabd8411d1380040e117a3dec0ebf" +sha256 = "e29dff2ea39343eec16e9df64f4ad05743c37799a6c7a91db9a35305ab917a6b" [presets.japan] path = "presets/japan.classes" -count = 974 -exclusive_minimum_rows = 0 +count = 697 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 30076 species_before_threshold = 974 -sha256 = "013efd64ada461805a007c203f6dc5ce48827c1bc449b0772f390fef8a403b1b" +sha256 = "8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b" [presets.africa] path = "presets/africa.classes" -count = 1129 -exclusive_minimum_rows = 0 +count = 924 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 149267 species_before_threshold = 1129 -sha256 = "7391792f70c42282eada6fabd74bbba239587d6d49a991117ee6ef7e05942cbf" +sha256 = "471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1" [presets.subsaharan_africa] path = "presets/subsaharan_africa.classes" -count = 904 -exclusive_minimum_rows = 0 +count = 796 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 144918 species_before_threshold = 904 -sha256 = "b9fa770116df2265519d83634a2be05a694073b00d3cc89ff94880b1622752aa" +sha256 = "1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184" [presets.mediterranean] path = "presets/mediterranean.classes" -count = 2874 -exclusive_minimum_rows = 0 +count = 2680 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 660065 species_before_threshold = 2874 -sha256 = "2fd31151b358bb5c049184d756bd7719ed907fe6b209d1a625c42082ada3fa10" +sha256 = "f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3" [presets.arctic] path = "presets/arctic.classes" -count = 6096 -exclusive_minimum_rows = 0 +count = 5884 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 2496358 species_before_threshold = 6096 -sha256 = "e6307e5a7ea2899e5a98ebae976ce147a2870914bcccea7fcb14908f8dbec876" +sha256 = "b753af8455a3578aa2f2e1d9fbf4f349cefeb6f9fd257247027d36f1d6dad687" [presets.oceania] path = "presets/oceania.classes" -count = 2337 -exclusive_minimum_rows = 0 +count = 2273 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 584477 species_before_threshold = 2337 -sha256 = "cb0ae7907166a0d594c3426795de8f50eaeba551f2b78a599e2c394fd65e61ff" +sha256 = "bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47" [presets.southeast_asia] path = "presets/southeast_asia.classes" -count = 2031 -exclusive_minimum_rows = 0 +count = 1672 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 172424 species_before_threshold = 2031 -sha256 = "5ee08bf46f253eecd7a99afe25d126c3c13ea46c118a1bdb6b5d7fac4834b1e9" +sha256 = "ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd" [presets.east_asia] path = "presets/east_asia.classes" -count = 4447 -exclusive_minimum_rows = 0 +count = 4123 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 659767 species_before_threshold = 4447 -sha256 = "f8c292f1a907747c2254c9122e234df8315d979d65d01031d877befa737fdb8d" +sha256 = "f32e57e3e186d994712542c8d2221346cc15c1db4090c6c3f62e90e5ee7abb78" [presets.middle_east] path = "presets/middle_east.classes" -count = 1330 -exclusive_minimum_rows = 0 +count = 846 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 selected_rows = 24805 species_before_threshold = 1330 -sha256 = "796dbb7a2a99bea640e9ff67845ca89bd2ca59774c150090720b75caed05321b" +sha256 = "2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9" diff --git a/dev/releases/mambo_v3/presets/africa.classes b/dev/releases/mambo_v3/presets/africa.classes index 3b5c832..13dac8a 100644 --- a/dev/releases/mambo_v3/presets/africa.classes +++ b/dev/releases/mambo_v3/presets/africa.classes @@ -12,23 +12,14 @@ 1845574 1845616 4528100 -1846849 1847111 9546514 -1848219 9868978 -1849477 -1849924 -1850184 1850640 1850781 -5122121 -1851347 -1852165 5119338 1845952 1839146 -1841261 1831458 11513018 1763976 @@ -47,8 +38,6 @@ 4687991 1778430 5111054 -1780149 -8193562 1783882 1786190 1786980 @@ -62,22 +51,15 @@ 1789805 1790287 1790692 -1790816 1791715 1792210 -5113330 1795074 -5113925 1796984 -1797276 -1797333 -1797349 1797542 4532473 5884245 6117055 6117124 -1798449 1798481 1798504 6115283 @@ -94,25 +76,19 @@ 1805110 1806871 1806913 -1807969 1808172 1808359 1809158 1809159 5117189 1814552 -1814653 8916247 5117776 5117791 5117805 6122301 -1819050 -1819699 9331464 1819928 -6122092 -1820406 6121912 1820802 1820948 @@ -127,12 +103,10 @@ 6112547 6112472 5115381 -5115854 1774826 5116504 8723161 5108808 -1788635 1781413 1780869 1780897 @@ -144,11 +118,9 @@ 6115388 1816685 1774600 -1768626 1803544 1803545 1817973 -5111643 1804532 1813460 1807634 @@ -158,7 +130,6 @@ 1821547 1821581 1821684 -1821856 1768212 5118223 1820573 @@ -166,7 +137,6 @@ 1816775 1803306 4687933 -6116646 6116659 6116661 6116669 @@ -187,21 +157,14 @@ 1777517 6115973 1860857 -1840483 -1831752 -1852831 -10308365 5123339 -5123419 5123474 1869595 1870450 1870988 1871252 -1871264 1871407 8766638 -1871451 4531365 1871754 1871783 @@ -212,56 +175,32 @@ 1873051 1873079 1873215 -1873411 4531237 1873890 1875409 -1875478 1875687 -4531284 -1875940 -1875958 1876542 1876922 9111961 5126052 1877788 -1877941 -1877986 -1877988 -1878067 4531417 -4531425 -1878470 -1878490 -1888454 1890024 5884888 1877035 5125780 1871504 -4525777 -4525846 1941330 10309794 12231385 1736623 1737131 -1737491 1737509 4530608 -7466487 1739833 -1740524 -1740623 -8094357 1740762 1740797 -1741258 -1741341 -5103451 11846897 -1744526 1745781 1921064 10581870 @@ -275,15 +214,12 @@ 1922291 1922468 1922572 -1922584 1922679 1922689 1922694 1922701 1923465 1923473 -1923796 -1923809 1924082 10656713 1924392 @@ -332,7 +268,6 @@ 1931403 1931437 1931788 -1932172 1932177 1932302 1932332 @@ -351,8 +286,6 @@ 1932753 1932882 1932976 -5140244 -7634721 9954885 1933583 1933647 @@ -391,10 +324,8 @@ 5137827 5137828 5137849 -5805954 1920348 1920353 -1920356 1920359 1920362 1920363 @@ -415,8 +346,6 @@ 1920496 1920506 1920509 -5137926 -5137946 1920709 4535271 5137988 @@ -429,73 +358,51 @@ 5137663 1920218 1750326 -5104903 1868884 1869043 1869238 1869278 1869286 -1955202 1955694 1956897 1957266 1957286 -1957611 8172949 -1959799 1959839 1960105 1961013 1961025 -1962265 -10004969 4302252 1963168 1964076 -1964189 1964195 1964836 1966255 -1966351 1967025 1967209 1967265 1967324 1967438 1967606 -1969581 1969958 5144691 5144805 -5144880 5144900 -5144976 5145075 -5145255 5145396 5145468 5145502 5145842 8014296 -1971852 1973171 -1973323 -1973393 7996464 5146510 5146611 -5146693 5146774 5146837 -5146908 5147039 5147043 -5147046 5147058 -5147071 -5147099 -5147212 -5147287 5147354 5147395 5147415 @@ -503,30 +410,17 @@ 5147441 5147478 5147560 -8067894 -8160782 -1975903 -5147923 1978017 5148264 1980521 1980525 1980533 -1981160 -1981202 -1982221 1982267 -1982779 1983039 1983062 -1983393 1983525 1983528 -1983888 -1984033 1985742 -1986157 -9137631 4525093 4525097 6118530 @@ -534,19 +428,13 @@ 4524223 1988019 1988064 -1991532 1992066 -8180900 -5769062 11654024 7507369 1989594 -4523461 4525034 -4524376 4524541 4523519 -4524929 6119299 6119323 6119359 @@ -575,7 +463,6 @@ 1946037 1946660 1946661 -1946738 1947112 1947113 1947117 @@ -585,17 +472,13 @@ 1948994 5142338 5142352 -1949784 1949954 1950156 1950877 -7633472 1948916 1758839 -1759083 5108619 1761439 -1761735 1762383 5109646 1764174 @@ -609,94 +492,63 @@ 5109931 8352161 1766072 -4534691 9105656 -5772169 5772171 5772172 -5772178 5772206 1768042 1768048 -1768815 1770416 1774470 1774797 6115946 -1774878 1775329 -5110818 5110858 -4534299 -5111147 5772222 -1779258 1780049 -1780926 -1782560 -1783016 1783777 1784349 1784591 -1785145 1785181 1785185 1785329 1785361 1786360 1787264 -1787279 1787438 -1787610 1787770 -1788734 -1789076 -4533882 4534166 4534194 -1789695 1789957 1790364 1791758 1792418 1792996 -1793212 1794507 -1794534 1795068 4532908 1795483 -4532700 9803522 1796451 -1799135 -1800004 -7981386 4532811 4532269 6116341 6116368 -8021109 6116899 1763072 5109259 5109345 5109407 -5772063 4534675 4534681 -4534683 4534686 6116440 8108800 -1770772 1770821 1771040 1771245 4533714 -4533720 1765751 -5113853 5108660 5108671 11714235 @@ -708,8 +560,6 @@ 4532203 4532206 4532216 -4532239 -4532264 4532266 6115772 6115793 @@ -718,10 +568,8 @@ 1767302 8363507 10458175 -1824113 1824131 5118892 -5118996 5119183 1827775 10023821 @@ -738,13 +586,10 @@ 1893558 1893562 1893901 -1894088 4535632 8049830 -4535827 4535809 4535819 -9519321 1895956 1896547 1896600 @@ -762,7 +607,6 @@ 1898290 4299368 4299370 -7346344 1899071 1899144 1899164 @@ -788,10 +632,8 @@ 5130502 5130542 1903009 -5130814 1903661 1904206 -1905383 1906006 1906014 1906030 @@ -804,8 +646,6 @@ 5132550 5132591 5132713 -1906552 -8208583 1906604 1906621 1906679 @@ -816,8 +656,6 @@ 4535754 1908356 8727750 -10656625 -1909398 1909818 1911461 5133610 @@ -873,20 +711,15 @@ 1910629 1910663 1899737 -6229058 7934873 8393082 -1952816 1842097 4301036 4529738 6122527 -1730978 -1731263 1878656 1878804 1878951 -4531506 1879001 1879227 1879340 @@ -902,8 +735,6 @@ 5126637 1880408 1880865 -1880907 -1881089 1881126 1881147 1881151 @@ -911,9 +742,7 @@ 9819403 1881303 1881362 -1881418 1882110 -1882210 1882884 1882905 1882941 @@ -925,7 +754,6 @@ 1883458 5127094 1884051 -1884061 1884437 1884449 1884479 @@ -941,12 +769,10 @@ 6120861 1885836 1885931 -1885994 1886015 1886088 1886104 1886251 -1886579 1886648 1886729 7562564 @@ -954,16 +780,12 @@ 8955839 4531670 1887694 -1888047 1888346 1888484 1888915 1889071 -1889074 1889272 1889277 -1889356 -1889370 1889543 9228024 1890287 @@ -972,9 +794,7 @@ 1890346 1890410 1890534 -1890576 1890670 -1890772 1890898 1891167 1891171 @@ -983,21 +803,17 @@ 4532024 1891583 8986756 -1892242 1892456 1892476 -9181627 5771877 6133232 6121010 6121218 6133158 8876855 -5126680 1886374 1889833 5127644 -5127656 5127669 5127675 5802339 @@ -1010,12 +826,8 @@ 1831136 1858674 1858930 -1859046 1859285 1859932 -1860063 -5123180 -6097269 1866249 1866252 1866262 @@ -1045,15 +857,10 @@ 1861584 1861592 1861644 -5123636 -1861673 1862293 1862311 -1862394 1862401 1862433 -1862449 -1862580 1862692 1862719 1862765 @@ -1067,8 +874,6 @@ 5124088 5124093 5124109 -1864329 -1864358 1864576 1864652 5124352 @@ -1076,27 +881,20 @@ 1992956 1992969 6132725 -5119506 1830437 -1830457 1830459 7761138 -8348761 10055273 -1856105 1857068 1857143 1857577 1857581 1857626 -1857829 -1858163 1858283 1937643 1937667 1937702 1937711 -1937723 1937849 1937959 1938069 @@ -1113,12 +911,10 @@ 5141297 1939314 5770913 -4685980 1800642 5114409 4534796 4534757 -1801051 6112634 1802662 1802850 @@ -1126,4 +922,3 @@ 1803022 1803025 1803060 -9485481 diff --git a/dev/releases/mambo_v3/presets/arctic.classes b/dev/releases/mambo_v3/presets/arctic.classes index 114f17f..ecd228e 100644 --- a/dev/releases/mambo_v3/presets/arctic.classes +++ b/dev/releases/mambo_v3/presets/arctic.classes @@ -10,7 +10,6 @@ 1860659 1860664 1860668 -1860671 1860688 1860709 1860711 @@ -27,7 +26,6 @@ 1732662 1732685 1732717 -5101640 1732901 1733154 1733258 @@ -147,7 +145,6 @@ 1848690 1848713 1848714 -1848717 1848730 1848753 1848864 @@ -163,11 +160,9 @@ 1849477 11052757 11080751 -1849531 1849552 1849630 1849856 -1849897 1849924 1850008 1850042 @@ -258,7 +253,6 @@ 1849498 11430021 1829533 -1829588 1829659 1829612 1829776 @@ -276,7 +270,6 @@ 1829029 6097236 5769272 -7623903 10053809 10176413 10067382 @@ -314,7 +307,6 @@ 1830202 1830203 1830207 -1830221 1830229 1830241 1830243 @@ -334,7 +326,6 @@ 5880147 9734171 11418741 -11571523 7908344 1758860 1758861 @@ -426,10 +417,8 @@ 1777052 1777075 8345991 -1777179 1777631 9257908 -1777695 1777942 1778548 1778549 @@ -464,13 +453,11 @@ 1786912 1786913 1786980 -1786985 10860091 1787106 11495556 5112542 1788278 -11890681 7346446 1788891 1789190 @@ -485,7 +472,6 @@ 1790258 1790268 1790274 -1790281 1790287 5112798 1790692 @@ -515,7 +501,6 @@ 5112968 5112990 1791372 -1791698 5113078 5113084 5113234 @@ -534,7 +519,6 @@ 1796257 1796288 1796338 -10600368 1797111 1797121 1797122 @@ -614,7 +598,6 @@ 9618068 9622725 5113950 -6117124 7598729 1798346 1798393 @@ -622,7 +605,6 @@ 1798408 1798427 1798449 -1798481 1798504 1798594 1798802 @@ -682,14 +664,12 @@ 1804969 1804971 1804974 -1805111 1805197 1805537 1805540 1805542 1805549 1805682 -1805691 1806145 1806170 1806176 @@ -784,7 +764,6 @@ 1819145 4532293 4532297 -7346384 1819268 8407461 1819873 @@ -883,7 +862,6 @@ 8000103 4532534 1796523 -6115388 4532508 8805966 8905759 @@ -909,11 +887,9 @@ 5113036 9522383 5109796 -1821479 1821856 1821940 6122364 -1819170 1775796 1811814 1811948 @@ -927,15 +903,12 @@ 4532366 5884258 7716829 -8299504 8968321 9451320 1820039 -1781531 1784959 1785024 1785072 -5884188 6117485 6132916 1771772 @@ -944,7 +917,6 @@ 1780646 1780668 1780676 -4301309 1777463 1777471 1777517 @@ -960,7 +932,6 @@ 1860996 1861030 1861031 -4522911 4522916 4522919 4522922 @@ -973,9 +944,7 @@ 1860768 1860852 7767114 -7851302 7961640 -1992378 1992504 7472845 1852956 @@ -1021,8 +990,6 @@ 1840408 1840441 1840448 -1840478 -1840483 1840485 1840520 1840543 @@ -1042,7 +1009,6 @@ 10187154 5119808 1831752 -1852832 9473121 1852901 4529630 @@ -1078,9 +1044,7 @@ 4302389 1751207 1751216 -1869595 8797666 -1869656 1869666 1869803 1869825 @@ -1181,7 +1145,6 @@ 1874257 1874274 1874279 -1874295 4531145 4531147 4531158 @@ -1244,7 +1207,6 @@ 1877321 1877338 1877341 -1877345 1877353 1877364 1877365 @@ -1273,7 +1235,6 @@ 1878586 5976937 5884888 -11728049 1875885 1873697 1872315 @@ -1298,7 +1259,6 @@ 10286565 10451589 10509408 -1940504 1940510 1940517 1940546 @@ -1309,7 +1269,6 @@ 1940609 1940612 1940639 -1940644 1940694 1940717 1940744 @@ -1322,7 +1281,6 @@ 1940807 1940838 1941310 -1941348 1941377 1941437 12211069 @@ -1347,7 +1305,6 @@ 1736511 1736528 1736560 -1736565 1736601 1736623 10274976 @@ -1636,7 +1593,6 @@ 11923027 5103998 7661023 -11846897 1743453 1743461 1743475 @@ -1705,7 +1661,6 @@ 9953708 1744588 1744593 -1744693 1744699 1744700 1744709 @@ -1846,7 +1801,6 @@ 9242559 1748456 9176043 -1748720 5104641 8691947 10580256 @@ -1884,7 +1838,6 @@ 1743651 10545267 1831775 -1831780 10310599 10346267 4525500 @@ -1904,7 +1857,6 @@ 1920892 1920900 1920996 -1921053 1921123 1921239 1921240 @@ -1948,7 +1900,6 @@ 1923678 1923679 1923796 -1924044 1924050 1924057 1924097 @@ -2043,7 +1994,6 @@ 1929962 1930079 1930110 -1930167 1930178 1930183 1930263 @@ -2058,7 +2008,6 @@ 1930653 1930660 1930678 -1930728 1930830 4535106 1931116 @@ -2091,7 +2040,6 @@ 4300277 4300363 7346444 -1932576 1932879 1932960 5140033 @@ -2102,7 +2050,6 @@ 5140436 7634721 7664111 -1933583 1933793 1933998 1935884 @@ -2111,7 +2058,6 @@ 1935931 1926260 4300268 -9469139 11874998 1933095 1933138 @@ -2134,9 +2080,7 @@ 5105376 5105469 5105508 -5105560 11014495 -1753636 1753668 5105588 1753922 @@ -2153,7 +2097,6 @@ 5806127 5137511 5137512 -12226416 1919128 1919130 1919145 @@ -2168,7 +2111,6 @@ 1919646 1919652 1919653 -1919656 7661785 1919700 1919701 @@ -2176,10 +2118,8 @@ 1919705 1919711 1919712 -1919716 1919719 1919720 -10703948 1919939 1919943 1919947 @@ -2193,21 +2133,16 @@ 5137800 5137802 5137803 -4701136 5137817 5137819 5714819 -1920463 1920494 1920496 1920506 -4535307 5137882 5137889 5137890 5137894 -1920552 -5137902 5137903 5137908 5137912 @@ -2227,7 +2162,6 @@ 5137582 5137595 5137601 -5137605 5137612 5137615 5137626 @@ -2238,7 +2172,6 @@ 5137674 5137677 5137679 -5137682 5137689 5137693 5137694 @@ -2249,7 +2182,6 @@ 5137714 5803588 8203812 -12191141 12206386 12236627 1920621 @@ -2308,7 +2240,6 @@ 5104759 1751163 1749591 -1749596 1749608 1749635 1749656 @@ -2336,7 +2267,6 @@ 1955497 1955498 5143651 -1955694 5143657 5143675 5143697 @@ -2373,14 +2303,12 @@ 1957854 1957870 4524421 -4524424 4524426 8775810 5143947 5143952 1958024 1958049 -1958065 5143960 5143964 1958121 @@ -2421,7 +2349,6 @@ 1961718 1962051 1962076 -1962118 9368382 9592714 1962204 @@ -2435,7 +2362,6 @@ 1962490 1962516 9812211 -1962584 1962636 1962722 1962727 @@ -2466,10 +2392,8 @@ 1963879 1963892 1964041 -1964113 1964191 1964195 -1964247 1964437 1964471 1964585 @@ -2492,7 +2416,6 @@ 1965197 1965208 1965586 -1965640 1965671 1965697 1965699 @@ -2518,9 +2441,7 @@ 1966185 1966195 1966198 -1966351 5144534 -1967006 1967011 1967127 1967128 @@ -2543,21 +2464,18 @@ 5144564 5144575 8793278 -1968304 1968315 5144583 5144588 5144593 5144596 5144597 -1968678 1968867 1968942 11598540 1968990 1969291 1969954 -1969958 1969961 1969978 1970119 @@ -2594,7 +2512,6 @@ 7700568 9627567 1971835 -1971847 1971858 1971888 1971995 @@ -2653,7 +2570,6 @@ 5146946 5146961 5147018 -5147038 5147039 5147062 5147114 @@ -2667,10 +2583,8 @@ 5147232 5147245 5147354 -5147415 5147441 5147478 -5147492 5147516 9370933 9469300 @@ -2822,27 +2736,22 @@ 1982780 1982791 1982824 -1982838 1982867 1982885 1982898 -1982924 1982951 1983000 -1983034 1983052 1983111 1983170 1983260 1983263 1983288 -1983387 1983434 1983441 1983442 1983491 1983525 -1983528 1983548 1983558 1983648 @@ -2922,7 +2831,6 @@ 1986623 1986807 5149307 -5149308 5149315 1986998 4302274 @@ -2936,13 +2844,11 @@ 1987633 1987737 1987744 -1987776 4524221 4524223 11650277 1988495 1988593 -1988642 1988684 8388883 5149414 @@ -2966,7 +2872,6 @@ 1990551 1990582 1990594 -1990998 1991012 1991179 1991280 @@ -3051,8 +2956,6 @@ 4524998 4524376 4524822 -4524712 -10574156 4523522 9281181 9352348 @@ -3069,10 +2972,8 @@ 9545331 4524070 4524072 -4524403 4524951 4524955 -4524962 4525078 9220953 9249651 @@ -3084,7 +2985,6 @@ 9619088 9273963 9479525 -7345819 9237031 9274899 9321500 @@ -3127,7 +3027,6 @@ 1972942 4302268 4524393 -9256786 9291092 12200261 11654707 @@ -3164,7 +3063,6 @@ 4302008 5141743 5141763 -1943212 1943397 8178854 8277078 @@ -3179,7 +3077,6 @@ 1943823 1943824 1943830 -1943832 1943901 12198522 12233808 @@ -3193,22 +3090,17 @@ 1944004 8133678 8273661 -1944273 1944283 1944286 1944314 1944324 -1944329 1944574 4301934 1944815 5141913 -9551544 1945066 1945081 1945302 -1945312 -1945462 1945476 1945477 1945569 @@ -3283,7 +3175,6 @@ 1949544 1949545 1949549 -7726809 1949687 1949697 1949784 @@ -3305,7 +3196,6 @@ 1950044 1950047 1950133 -1950197 11967675 1950384 1950396 @@ -3382,7 +3272,6 @@ 1869512 9359597 1735844 -1735855 9400895 9245604 10963226 @@ -3416,7 +3305,6 @@ 7972792 9447614 1759153 -1759159 1759338 1759407 1759553 @@ -3471,9 +3359,7 @@ 1761498 1761553 1761563 -1761735 1761798 -1761865 1761892 9418549 9616055 @@ -3585,15 +3471,12 @@ 5772172 5772176 5772178 -5772180 -5772186 5772196 5772199 5772202 5772205 5772206 5772210 -5802396 7388922 8045644 9381852 @@ -3675,7 +3558,6 @@ 1773069 1773081 1773163 -1773231 1773248 1773309 1773313 @@ -3683,7 +3565,6 @@ 1773328 1773484 1773510 -1773572 1773577 1773662 1773677 @@ -3744,7 +3625,6 @@ 1776067 1776167 5110670 -1776207 1776330 1776371 5110723 @@ -3813,24 +3693,19 @@ 5111076 5111139 5111141 -5111195 5111343 5111360 5111372 5111397 -5111501 -5111513 5111521 5111528 5111546 5111568 5111574 -5772222 7593392 8253467 9175037 9596498 -1779258 1779430 1779435 1779633 @@ -3860,8 +3735,6 @@ 9284849 1780852 1781008 -1781016 -4533285 4533325 7825945 9374443 @@ -3987,7 +3860,6 @@ 1784281 1784282 1784283 -1784349 1784359 1784422 1784461 @@ -3996,7 +3868,6 @@ 9320776 1784688 5112414 -1784812 1784826 1784853 4534290 @@ -4010,7 +3881,6 @@ 4532888 4532890 9633615 -1785314 1785331 1785399 1785403 @@ -4048,8 +3918,6 @@ 1786566 1786567 1786619 -1786651 -1786664 1786691 1786733 1786808 @@ -4113,7 +3981,6 @@ 1789505 1789553 1789580 -4534162 4534166 4534198 1789694 @@ -4173,7 +4040,6 @@ 9426771 9622117 1792292 -1792300 1792318 1792335 1792377 @@ -4261,7 +4127,6 @@ 7780930 1796274 1796276 -4688172 7689966 7882824 8405656 @@ -4277,7 +4142,6 @@ 1796686 1796842 1796958 -1797030 1797587 1797592 1797593 @@ -4291,7 +4155,6 @@ 4533442 4533444 4533446 -6133007 1798288 1798371 1798372 @@ -4369,7 +4232,6 @@ 4532811 12103087 4534663 -4534669 7558165 8050639 8440999 @@ -4498,7 +4360,6 @@ 9506719 5112130 5112131 -4534675 4534681 4534683 4534685 @@ -4518,7 +4379,6 @@ 9623131 1774929 1770772 -1770821 1770828 1770869 1770880 @@ -4548,14 +4408,12 @@ 1768201 11783188 4534525 -1773901 1773904 4533347 4533360 9490756 1797903 4532203 -4532206 4532239 4532253 4532260 @@ -4601,7 +4459,6 @@ 1824571 5118828 1825064 -5118859 1825077 1825083 4534909 @@ -4613,8 +4470,6 @@ 1825428 1825430 5118892 -5118904 -7624468 7937573 8397564 1825539 @@ -4630,7 +4485,6 @@ 1826048 1826058 1826084 -1826108 1826156 1826163 1826164 @@ -4662,10 +4516,8 @@ 5119143 4534869 9883140 -5119223 5119245 1827645 -1827649 1827716 1828105 1828162 @@ -4675,7 +4527,6 @@ 9454052 9255512 1892729 -1892742 4299095 5127805 1893137 @@ -4703,7 +4554,6 @@ 1895138 4535809 4535817 -1895185 5128232 5128250 5128266 @@ -4723,12 +4573,10 @@ 5128488 1896749 1896841 -1896915 1896932 11701883 8367663 1897664 -1897977 1898286 4299368 4299370 @@ -4783,15 +4631,12 @@ 5130559 1902670 1902676 -1902680 1902699 4299218 1902749 8140883 8189761 4535689 -1902880 -1903607 1903683 5131608 1904382 @@ -4826,7 +4671,6 @@ 1908044 1908052 1908055 -1908123 1909128 1909170 8727750 @@ -4834,7 +4678,6 @@ 1909398 1909800 1909838 -5133265 5133565 5133568 1911093 @@ -4872,7 +4715,6 @@ 5714410 5772890 7428726 -7799370 8810143 10638244 4535581 @@ -4920,10 +4762,8 @@ 1915492 1915506 1916410 -1916412 1916509 7854318 -1918094 1918293 1918395 1918411 @@ -4935,7 +4775,6 @@ 1918843 1918854 1918868 -8035998 8176911 1918964 1918968 @@ -4943,7 +4782,6 @@ 1918984 1918986 1918988 -5128045 4535618 4535510 5130587 @@ -4995,7 +4833,6 @@ 5132973 5133009 1914701 -1951412 1951448 1951557 5142842 @@ -5068,7 +4905,6 @@ 4529738 5120453 1843444 -1843602 10327658 10619048 8292351 @@ -5107,7 +4943,6 @@ 4531506 4531517 1879227 -1879252 1879253 1879272 1879274 @@ -5162,7 +4997,6 @@ 1880140 1880143 1880156 -5126585 5126637 1880379 1880381 @@ -5173,14 +5007,11 @@ 1880931 1881094 1881111 -1881122 -1881126 1881139 1881151 1881166 9819403 4531687 -1881208 5126697 5126718 5126721 @@ -5191,7 +5022,6 @@ 1881767 1881834 4531975 -5126751 1881917 1881955 1882089 @@ -5218,7 +5048,6 @@ 1882816 1882818 1882819 -1882905 10191785 11891668 1882927 @@ -5242,7 +5071,6 @@ 5127118 5127130 5127132 -1883634 1883829 1883897 1883968 @@ -5328,7 +5156,6 @@ 5127357 1887565 1887634 -4531670 1887701 1888009 1888047 @@ -5360,7 +5187,6 @@ 1889287 1889327 1889536 -1889905 1889939 1889942 5127521 @@ -5387,12 +5213,9 @@ 1890629 1890654 1890656 -1890670 1890679 1890699 1890701 -1890703 -1890724 1890730 1890737 1890772 @@ -5416,10 +5239,8 @@ 1891059 1891074 1891167 -1891177 1891190 1891326 -1891366 1891386 1891426 1891438 @@ -5433,14 +5254,11 @@ 8411753 10310835 1891755 -1891758 -1891889 9884308 1891932 1892131 1892193 1892242 -1892245 1892301 1892302 1892311 @@ -5450,7 +5268,6 @@ 1892427 1892433 9059564 -1892476 1892477 1892488 9674732 @@ -5473,12 +5290,10 @@ 9935837 5771877 7864212 -8146570 8425580 6120803 6133232 6121218 -6133154 8876855 10106345 10432184 @@ -5571,7 +5386,6 @@ 12239445 4526094 4526050 -7717983 1858615 1858637 9777614 @@ -5645,7 +5459,6 @@ 1865555 1865571 1865590 -1865659 1865668 1865671 1865839 @@ -5659,9 +5472,7 @@ 1866336 1866338 1866341 -1866356 1866550 -1866556 1866568 1866570 1866601 @@ -5670,21 +5481,16 @@ 1867029 1867032 1867037 -5124880 5124911 10247309 1867820 1867928 -8439879 9983244 -1867993 1736271 7734292 -1841675 1841764 1841782 1841813 -1841821 1841946 10309331 5123615 @@ -5698,7 +5504,6 @@ 1861673 1861705 1861759 -1861773 1861784 1861797 1861823 @@ -5711,7 +5516,6 @@ 1861887 1861892 1861893 -1861949 1862072 1862129 1862181 @@ -5751,7 +5555,6 @@ 1863405 1863407 4301348 -1863412 1863584 5124007 5124029 @@ -5789,7 +5592,6 @@ 5124232 5124233 5124250 -5124268 1864652 5124332 5124442 @@ -5816,7 +5618,6 @@ 1864070 1864090 1992573 -1992634 5150053 1993419 5150092 @@ -5836,7 +5637,6 @@ 1830031 10650211 5119482 -5119506 5119513 1830361 1830372 @@ -5865,10 +5665,8 @@ 5105671 5106115 5106160 -5106249 5107128 5107219 -5107640 5107644 5107829 7410701 @@ -5876,7 +5674,6 @@ 7778368 7903078 7955974 -8158342 8201251 8426357 1757839 @@ -5939,13 +5736,11 @@ 1857143 1857258 1857380 -1857577 1857626 9790007 1857809 1857828 1857829 -1857840 1857856 1857863 1857878 @@ -5988,7 +5783,6 @@ 8225376 10600208 12200213 -1937167 1937490 1937556 1938214 @@ -6005,7 +5799,6 @@ 1939136 5141324 5141342 -4694313 11561676 12219250 12229940 @@ -6031,7 +5824,6 @@ 1833500 1833626 8546322 -1835031 5770913 1835156 1835393 @@ -6049,7 +5841,6 @@ 1838969 9895629 1839770 -1839851 1839893 1841159 5770922 @@ -6058,7 +5849,6 @@ 10511237 5119893 5119895 -1800238 4534796 4534798 1800963 @@ -6070,7 +5860,6 @@ 1801896 4534779 4534782 -4534792 9313634 9385576 9454291 @@ -6080,7 +5869,6 @@ 1802113 8924506 1802280 -1803012 1803065 1803073 10942408 diff --git a/dev/releases/mambo_v3/presets/asia.classes b/dev/releases/mambo_v3/presets/asia.classes index e5be493..fdd0d31 100644 --- a/dev/releases/mambo_v3/presets/asia.classes +++ b/dev/releases/mambo_v3/presets/asia.classes @@ -5,7 +5,6 @@ 1935849 1992277 1992283 -1992301 1992315 1860621 1860628 @@ -39,10 +38,7 @@ 1733412 1733484 4525266 -1733755 5734897 -5101678 -5101717 5101745 5769191 1734453 @@ -77,14 +73,11 @@ 4528100 1846604 1846657 -1846715 -1846729 10785815 11730078 1847061 1847062 1847097 -1847111 1847157 1847260 1847392 @@ -94,8 +87,6 @@ 9262981 1847956 9546514 -1848150 -10450501 1848219 9868978 1848273 @@ -122,14 +113,10 @@ 1849477 11052757 11080751 -1849531 1849552 1849630 1849656 -1849924 -1850008 1850076 -1850238 1850246 11576787 1850302 @@ -143,14 +130,10 @@ 1850538 1850570 1850633 -1850640 4528529 1850781 -1850971 -1851000 1851010 1851011 -5122037 1851203 1851220 1851337 @@ -165,7 +148,6 @@ 1852430 11287091 1829533 -1829588 1829659 1829776 1829785 @@ -176,7 +158,6 @@ 1828637 6097236 8871600 -7623903 5879654 7448174 4525610 @@ -203,15 +184,10 @@ 1830191 1830207 1830241 -1830243 -1830262 -1830266 4525476 -4525487 1831458 1831631 1831643 -1831655 9379855 8834672 1839625 @@ -230,7 +206,6 @@ 12199936 11095591 11418741 -11571523 7908344 12259113 12208733 @@ -262,7 +237,6 @@ 1763782 1763812 1763976 -1763994 1764021 1764032 1764043 @@ -280,7 +254,6 @@ 1766570 1766584 1766601 -1766612 1766618 3257809 6116699 @@ -335,7 +308,6 @@ 5110765 5110769 1777166 -1777289 1777631 5110837 1777695 @@ -372,7 +344,6 @@ 5112500 6132971 6132974 -1786958 1786980 1786985 1787009 @@ -400,7 +371,6 @@ 1791097 10743044 6132950 -5112940 1791514 1791698 1791715 @@ -412,7 +382,6 @@ 5113084 5113148 5113234 -1792210 5113330 5113352 1792541 @@ -459,15 +428,12 @@ 1798101 5113950 5884247 -6117055 1798346 1798408 -4532493 1798449 1798481 1798488 1798504 -6115283 6132841 6132850 11732472 @@ -478,7 +444,6 @@ 1798529 1798580 1798594 -1798687 1798700 1798794 1798802 @@ -523,7 +488,6 @@ 9663271 1806814 1806871 -1806872 1806936 7874258 1807969 @@ -535,7 +499,6 @@ 1808180 1808195 1808221 -1808232 1808236 1808286 1808340 @@ -555,7 +518,6 @@ 1809210 1809308 10189965 -1809381 1809387 5116095 10183056 @@ -578,7 +540,6 @@ 1813114 1813263 5117189 -5117200 7656811 1814538 1814630 @@ -630,7 +591,6 @@ 1819668 6134035 1819873 -1819928 5118348 6122092 7657803 @@ -717,7 +677,6 @@ 9493317 9315833 11962292 -10004820 10399906 6133266 6133269 @@ -750,7 +709,6 @@ 6133264 6097254 1774829 -10480609 5116698 5116843 12171068 @@ -787,15 +745,11 @@ 1781598 1794273 4532534 -1772374 1763761 6115388 -1816648 -1816685 6133297 1774583 1774598 -1774600 1774604 1774618 1774626 @@ -815,7 +769,6 @@ 1793533 5111643 1804532 -9400916 1768461 1760246 5113030 @@ -840,10 +793,8 @@ 1774997 6122364 1815315 -1819170 1781446 1781473 -6116073 6116076 1783713 1783725 @@ -853,7 +804,6 @@ 4687933 4687935 6116646 -6116661 10926224 11088003 1820118 @@ -885,7 +835,6 @@ 6132915 6132916 6132917 -9935660 5110012 1772822 12185656 @@ -920,7 +869,6 @@ 1860994 1861031 4522916 -4522919 4522922 4522886 4522890 @@ -929,12 +877,8 @@ 1860765 1860768 1860852 -1860857 7767114 -7851302 7961640 -1992378 -1992489 1992504 1852956 1852978 @@ -944,10 +888,8 @@ 9724183 1837343 1837420 -1837429 1837515 4529064 -7958169 8015612 1839293 1839296 @@ -962,13 +904,10 @@ 1840485 1840555 1840566 -1840570 1840581 1840596 5119808 1831752 -1852751 -1852832 4529630 5125075 5125104 @@ -976,22 +915,17 @@ 1869359 1869363 9883856 -1751236 -1751298 1751457 4535884 -4535904 1939510 1939520 5141344 -1860184 1860259 1860261 1860274 1860408 4525177 5123339 -10361029 5123394 5123419 5769164 @@ -1003,10 +937,8 @@ 5123474 5123485 5123489 -1751207 1751216 1869595 -1869656 1869706 1869803 1869852 @@ -1021,7 +953,6 @@ 5125306 1871160 1871212 -1871252 1871407 4531402 4531409 @@ -1049,7 +980,6 @@ 1873411 1873417 4530947 -4530951 1873776 1873780 1873783 @@ -1058,43 +988,35 @@ 1873843 1873890 5125569 -5125591 5125596 5125602 5125633 5125635 5125689 -1874168 1874192 1874204 -1874211 1874269 1874274 1874280 4531147 1874375 1874743 -9782192 1874937 1875008 1875120 8219149 1875327 1875376 -1875409 1875429 4531242 1875633 1875682 -1875687 4531284 1875827 1875830 1875865 1875869 1875918 -1875940 -1875952 1875958 1876063 1876168 @@ -1112,7 +1034,6 @@ 1877341 1877345 1877368 -4531246 9111961 1877498 5126052 @@ -1121,26 +1042,18 @@ 1877988 1878067 4531417 -1878350 1878406 1878470 -1878471 -1878490 -1878500 9835867 -1878586 1883045 1888454 5884888 6133441 11728049 1872315 -1871504 1748805 4525884 5141493 -10451589 -1940504 1940510 1940575 1940639 @@ -1152,17 +1065,13 @@ 4525803 1940807 1940838 -4525846 -1941348 1941377 1941437 -10309794 12211069 1939879 1736358 1736377 1736412 -1736425 1736484 1736499 1736560 @@ -1184,11 +1093,8 @@ 1737313 1737342 1737368 -1737413 -1737437 1737491 1737497 -7466487 1737524 1737526 1737533 @@ -1219,8 +1125,6 @@ 5102951 1738687 1738700 -1738777 -1738794 1738839 1738883 1739042 @@ -1232,13 +1136,11 @@ 1739377 1739381 5102982 -1739451 1739461 1739471 1739605 1739748 1739797 -1739816 1739833 1739919 1739922 @@ -1246,13 +1148,9 @@ 1739999 1740053 1740069 -1740116 1740120 -1740155 -1740174 1740183 1740185 -1740305 1740374 1740392 7797515 @@ -1268,8 +1166,6 @@ 1740828 1741056 1741253 -1741258 -1741340 1741341 1741368 4530151 @@ -1290,7 +1186,6 @@ 1741765 10807169 11093909 -1742106 1742142 1742185 1742263 @@ -1317,14 +1212,12 @@ 5104056 6097235 1743641 -1743643 1743710 4530214 1743730 1743768 1743775 1743782 -4529900 4529908 4529915 1743828 @@ -1344,25 +1237,17 @@ 1744542 1744588 1744593 -1744693 1744699 -1744714 1744728 1744731 1744739 -1744742 -1744748 1744763 -1744777 1744808 1744896 -1744901 7964262 1745013 1745079 10844862 -1745131 -1745558 1745561 1745579 1745600 @@ -1370,14 +1255,12 @@ 1745634 1745636 1745643 -1745659 1745676 1745678 1745705 1745724 1745737 1745756 -1745762 1745771 1745781 1745787 @@ -1398,7 +1281,6 @@ 1746613 1746644 1746666 -1746689 1746714 1746775 1746832 @@ -1407,10 +1289,8 @@ 1746910 1747050 1747141 -10442122 5104442 1747738 -4530138 5104558 5104597 6097234 @@ -1418,7 +1298,6 @@ 9242559 1748456 1748605 -1748720 8691947 10580256 5103121 @@ -1440,7 +1319,6 @@ 1831780 4525500 4525503 -4525505 4525510 4525530 4525540 @@ -1497,7 +1375,6 @@ 1922584 4535092 1922689 -1922701 8782891 1922745 1922771 @@ -1516,8 +1393,6 @@ 1923650 1923651 1923668 -1923744 -4708972 4708977 1923796 1923809 @@ -1527,7 +1402,6 @@ 1924057 1924077 1924097 -1924106 1924193 5138681 1924298 @@ -1561,7 +1435,6 @@ 1926446 1926448 1926456 -1926530 1926546 1926550 1926574 @@ -1588,7 +1461,6 @@ 1927272 1927274 1927284 -4709107 4709111 5883052 7408690 @@ -1619,7 +1491,6 @@ 1928849 1928908 1928915 -4709030 9856663 1928960 1929270 @@ -1676,7 +1547,6 @@ 4708995 1932411 1932551 -1932563 7346444 1932607 5139990 @@ -1766,7 +1636,6 @@ 7345843 6133481 10017342 -10203493 5105339 5105259 10795141 @@ -1774,10 +1643,8 @@ 1919151 1919160 1919161 -10988070 1919176 1919181 -1919213 1919221 1919223 1919320 @@ -1826,11 +1693,9 @@ 5137833 5137847 5137849 -5137850 5137854 5137858 5805954 -1920348 1920349 1920356 1920357 @@ -1838,8 +1703,6 @@ 1920369 1920374 1920395 -1920401 -1920405 5137861 1920454 1920467 @@ -1898,7 +1761,6 @@ 1920218 5137763 7207679 -1748922 1748942 1749050 1749070 @@ -1908,30 +1770,21 @@ 1749869 1749921 1749948 -1749954 -1750076 1750097 1750143 1750166 1750288 -1750326 5104772 5104797 5104829 5104882 5104891 -5104903 5104940 -5105054 5105088 -5105106 5105158 5976947 1751051 5104759 -1749596 -1749608 -8741260 1758003 1735532 4527339 @@ -1939,7 +1792,6 @@ 1758440 1758441 1758461 -1758602 1731826 1731837 1731860 @@ -1950,7 +1802,6 @@ 1869178 1869187 11794362 -1992547 1963095 1963096 1973530 @@ -1976,7 +1827,6 @@ 5734335 1954891 1954911 -1955039 6133648 1955389 5143651 @@ -2011,7 +1861,6 @@ 1957413 1957460 1957523 -1957570 1957572 1957579 1957583 @@ -2022,7 +1871,6 @@ 1957746 1957791 1957816 -1957845 1957852 1957854 4524421 @@ -2031,7 +1879,6 @@ 5143947 1958024 1958045 -1958065 1958152 1958158 1958163 @@ -2053,12 +1900,9 @@ 1958463 1958483 5144027 -1958515 -1958528 1959383 1959395 1959461 -1959467 1959494 1959645 1959652 @@ -2106,7 +1950,6 @@ 1962447 1962516 9812211 -1962584 1962636 1962678 1962839 @@ -2131,11 +1974,9 @@ 6133500 1964113 1964116 -1964189 1964191 1964195 1964247 -1964305 1964316 1964331 1964437 @@ -2145,7 +1986,6 @@ 1964653 1964657 8361848 -1964702 1964738 5144426 1965166 @@ -2171,7 +2011,6 @@ 1966310 5734448 10670854 -1966351 1966362 1966367 5144534 @@ -2210,16 +2049,13 @@ 1969357 1969463 1969491 -11858774 1969581 6133643 1969621 1969954 -1969958 1970034 1970136 1970213 -1970227 1970243 1970284 1970322 @@ -2237,11 +2073,9 @@ 5144880 5144900 5144936 -5144942 5145009 5145075 5145136 -5145139 5145186 5145255 5145260 @@ -2250,7 +2084,6 @@ 5145409 5145495 5145502 -5145503 5145522 5145560 5145624 @@ -2264,7 +2097,6 @@ 1971888 6133516 1972094 -1972120 1972185 1972187 1972234 @@ -2300,7 +2132,6 @@ 5146483 5146496 5146508 -5146510 5146559 5146566 5146567 @@ -2322,7 +2153,6 @@ 5146946 5146961 5147030 -5147038 5147039 5147043 5147058 @@ -2335,7 +2165,6 @@ 5147232 5147245 5147306 -5147319 5147354 5147415 5147441 @@ -2350,7 +2179,6 @@ 9875420 5147608 5147638 -1975341 11856219 1975546 1975553 @@ -2368,7 +2196,6 @@ 1975892 1975897 1975903 -1975914 1975964 1975979 5734539 @@ -2406,8 +2233,6 @@ 5147968 5148043 5148055 -5148066 -5148097 5148115 5148214 5769028 @@ -2439,7 +2264,6 @@ 4524638 5734519 6133560 -4524890 5148252 10738407 1978776 @@ -2502,24 +2326,18 @@ 1982529 1982541 1982542 -1982592 1982636 1982671 1982746 1982770 -1982790 1982791 -1982838 1982865 1982885 -1982924 1983034 1983052 1983111 -1983170 1983260 1983288 -1983387 1983393 1983441 1983442 @@ -2535,7 +2353,6 @@ 1983997 1983999 1984033 -1984117 7752082 8015895 8026858 @@ -2584,7 +2401,6 @@ 1986575 1986623 1986650 -1986774 1986779 1986787 1986936 @@ -2598,18 +2414,15 @@ 1987377 1987527 9137631 -6118530 1987629 1987665 1987737 1987740 1987744 -1987747 1987766 1987767 1987775 1987776 -1987785 1987786 1987787 6133591 @@ -2626,7 +2439,6 @@ 1988487 1988593 1988642 -1988684 8388883 5149414 5149438 @@ -2692,7 +2504,6 @@ 4524740 7990739 4523560 -4523564 4524054 4523461 4524998 @@ -2709,11 +2520,9 @@ 6133595 6133596 6133597 -9577234 4523519 4524070 4524072 -4524403 4524951 4524955 4524962 @@ -2780,9 +2589,7 @@ 5149746 5149768 5149780 -5149784 5149787 -5149819 5734422 7443518 5146303 @@ -2808,7 +2615,6 @@ 1942697 1942715 1942769 -1942790 1942808 1942836 4689929 @@ -2836,7 +2642,6 @@ 1944504 1944521 1944591 -1944619 1944778 5141924 1945066 @@ -2851,9 +2656,7 @@ 1945270 1945274 1945286 -1945535 1945569 -1945571 1945589 1945605 1945694 @@ -2879,7 +2682,6 @@ 1946432 1946486 7346354 -1946661 1946695 1946731 1946737 @@ -2933,7 +2735,6 @@ 1949784 1949794 1949850 -1949852 1949877 1949929 1950006 @@ -2946,7 +2747,6 @@ 1950156 1950169 1950171 -1950197 1950302 1950362 1950521 @@ -2954,7 +2754,6 @@ 1950879 1950936 1951157 -1951170 5977247 5977257 8270406 @@ -2962,7 +2761,6 @@ 5142725 5142729 5142730 -5142749 4535396 5142006 5142032 @@ -2974,14 +2772,12 @@ 1952878 1952883 1952909 -9359597 9400895 10744228 1800191 5109821 1758613 9355953 -5108419 1758874 1758878 1759055 @@ -3021,7 +2817,6 @@ 1761778 1761865 1762244 -1762383 6132749 1762608 1762657 @@ -3080,9 +2875,7 @@ 11034779 1767134 1767368 -1767381 1767393 -1767430 1767511 1767597 1767608 @@ -3110,9 +2903,7 @@ 6132943 7345742 7388922 -7768584 8045644 -9356770 1768117 5110200 1768341 @@ -3141,33 +2932,27 @@ 1770172 1770307 1770353 -1770461 1770477 1770530 1770573 4532696 8393221 -1771357 1771385 1771391 7725644 1771509 1771531 1771555 -1771997 1772013 1772094 6133806 1772169 1772179 5772129 -1772940 1772956 1772977 1773163 -1773328 1773484 -1773572 8222049 1774272 1774347 @@ -3175,21 +2960,16 @@ 1774797 4301304 6115946 -6115953 -1774859 1775112 4534046 4534052 4534057 5110593 5772269 -5883881 4534719 1775962 1775963 1776067 -5110670 -1776207 1776330 1776371 5772446 @@ -3215,7 +2995,6 @@ 5772222 8253467 1779258 -1779276 1779435 1779633 1779641 @@ -3257,13 +3036,11 @@ 1783037 1783043 1783045 -1783059 6133026 5112155 5112160 5112283 5112291 -5112336 5112345 5714973 5715004 @@ -3278,7 +3055,6 @@ 1784359 1784513 1784761 -1784812 1784826 1784853 4534290 @@ -3308,7 +3084,6 @@ 1786515 1786573 1786619 -1786651 1786664 1786902 1787064 @@ -3347,7 +3122,6 @@ 4533924 1789553 1789580 -4534162 4534166 1789694 1789695 @@ -3381,7 +3155,6 @@ 1792300 1792335 1792377 -1792379 1792383 1792411 1792414 @@ -3398,11 +3171,9 @@ 1793243 1793246 7918000 -1793661 1793689 1793877 1793986 -1794534 1794590 1795065 1795068 @@ -3415,19 +3186,16 @@ 1795597 1795854 1795900 -1795930 1795946 1795957 1796007 1796117 -1796139 1796145 1796169 1796188 4534485 4534486 7438067 -8007222 1796217 7780930 4532700 @@ -3472,13 +3240,11 @@ 9536457 6097260 8742426 -9069966 4534389 4534207 10638451 4532811 4534663 -4534669 4533273 4534540 8890502 @@ -3495,7 +3261,6 @@ 4533136 4533661 4534408 -4534458 4534533 6132989 6132762 @@ -3510,12 +3275,10 @@ 7654770 6116899 6132797 -1774285 1779334 5114198 1763072 5109385 -5109437 5772063 9038042 8491927 @@ -3536,11 +3299,9 @@ 1770869 1770880 1771040 -1771169 1771214 1771245 4533714 -4533720 6132931 7940536 1765751 @@ -3562,7 +3323,6 @@ 6132880 9243764 4534525 -1773901 1773904 1759394 1789512 @@ -3571,14 +3331,12 @@ 4533360 10933525 5110282 -11437060 11566649 11615549 11731155 4532203 4532206 4532208 -4532216 4532236 4532239 4532253 @@ -3595,7 +3353,6 @@ 1782289 10063383 1767293 -1767302 8363507 9325654 10458175 @@ -3627,7 +3384,6 @@ 5118582 1824113 1824117 -1824131 1824242 5734235 6133692 @@ -3639,7 +3395,6 @@ 1824666 1824751 1824766 -1826020 1824845 1824997 1825064 @@ -3689,7 +3444,6 @@ 6133691 9883140 5119181 -5119193 5119211 5119223 5119239 @@ -3756,7 +3510,6 @@ 1893645 1893660 1893663 -1893699 1893787 1893793 1893921 @@ -3855,12 +3608,10 @@ 1898988 1899071 1899187 -1899950 1900093 1900890 1900897 1900939 -1901001 1901213 5130277 1901372 @@ -3872,11 +3623,8 @@ 1901429 1901435 1901463 -1901669 1901832 1901850 -11546465 -5130335 5130369 5130392 5130439 @@ -3955,7 +3703,6 @@ 1907637 1907666 1907672 -1907683 1907687 4535754 5881946 @@ -4083,7 +3830,6 @@ 11516142 11535847 5135643 -5135839 5136306 1916376 1916410 @@ -4103,7 +3849,6 @@ 5137022 5137085 5137086 -5137128 5137156 5137166 5137291 @@ -4135,9 +3880,7 @@ 1918789 1918843 1918854 -1918868 8035998 -8176911 11645316 4535618 4535620 @@ -4166,7 +3909,6 @@ 5131493 5131495 5131520 -5131540 5131555 5131565 5131585 @@ -4282,24 +4024,16 @@ 1952806 1952816 1952857 -1951713 9502606 5885428 8604089 1832819 1832853 1832915 -1832927 1832936 -1833096 -1833159 5880257 -5880258 -6097224 -6097225 6097228 1853064 -4529248 1868211 1868409 4702564 @@ -4311,17 +4045,11 @@ 1735121 1941864 5120465 -5120577 -5120668 5120675 -5121177 -5121517 5121613 1842097 5120396 1842485 -1842508 -1842542 4301036 1842690 1842695 @@ -4346,17 +4074,14 @@ 1872368 1878626 6133117 -7628188 1878744 1878782 -1878826 1878862 1878879 1878895 1878904 1878907 1878939 -4531517 1879001 1879125 1879141 @@ -4368,9 +4093,7 @@ 5734212 1879408 1879427 -1879443 1879452 -1879465 1879471 1879490 5126212 @@ -4403,7 +4126,6 @@ 1880907 1880931 1880968 -4531643 1881089 1881121 1881126 @@ -4411,7 +4133,6 @@ 1881170 9819403 4531687 -1881208 1881293 1881320 1881329 @@ -4419,7 +4140,6 @@ 1881340 1881362 1881515 -1881603 4531713 1881834 4531975 @@ -4427,7 +4147,6 @@ 1882021 1882158 1882210 -1882215 1882253 1882266 1882272 @@ -4440,7 +4159,6 @@ 1882753 1882767 1882771 -1882773 1882884 1882901 1882905 @@ -4455,9 +4173,7 @@ 1883386 1883394 5127097 -1883634 1883873 -1883881 1883943 1883951 1884051 @@ -4497,7 +4213,6 @@ 6133181 1885745 1885763 -1885764 1885826 1885836 1885919 @@ -4538,10 +4253,8 @@ 1888346 10922411 1888484 -1888491 1888537 1888579 -5127394 1888619 1888733 1888743 @@ -4555,12 +4268,10 @@ 9535420 1889039 1889043 -1889050 1889053 1889071 1889074 1889239 -1889242 1889249 1889270 1889272 @@ -4572,7 +4283,6 @@ 1889531 1889552 1889563 -1889905 1889942 1890012 1890031 @@ -4602,15 +4312,12 @@ 1890776 1890898 1890957 -1891013 1891059 1891129 1891167 1891177 1891190 1891217 -10071588 -1891308 1891326 1891339 1891366 @@ -4628,12 +4335,10 @@ 1891636 1891758 1891889 -1891932 1891936 1892153 1892242 1892245 -1892456 1892476 10141437 11056379 @@ -4650,8 +4355,6 @@ 6133140 6133141 5771877 -7864212 -10117959 10227418 4532125 9967529 @@ -4681,10 +4384,7 @@ 1889716 1889765 1889833 -1889850 -5127562 5127592 -5127595 5127609 5127629 5127644 @@ -4696,10 +4396,8 @@ 5127698 5802339 1887108 -1887125 1887173 1887177 -1887178 4532050 4532057 4532088 @@ -4707,7 +4405,6 @@ 6121184 1888638 1888639 -1886123 1883885 4532150 4532160 @@ -4717,10 +4414,8 @@ 1846111 1846112 1846133 -1846141 1846149 1846159 -1846210 1846219 1846236 4528818 @@ -4734,7 +4429,6 @@ 1831168 4708183 1853587 -4526048 1854202 1854347 5122430 @@ -4753,26 +4447,19 @@ 1858873 1858930 1859046 -1859061 -1859100 -1859161 1859177 1859305 -9760511 1859453 1859471 1859480 9749806 6133397 1859932 -1859952 1860026 1860063 1860076 4536472 4536483 -7642240 -8200050 1973467 5123180 5123221 @@ -4804,19 +4491,16 @@ 10047346 1867820 1867928 -7764232 8439879 9983244 1867991 1867993 -1868025 11643393 11670751 11729388 5124673 5124716 7734292 -1841460 5120278 1841813 1841946 @@ -4950,7 +4634,6 @@ 10189661 10191275 10436020 -5123979 1992634 1992883 10842838 @@ -4985,7 +4668,6 @@ 1954120 6132728 1860108 -5119513 1830099 1830372 1830380 @@ -4994,8 +4676,6 @@ 1830410 1830457 4525369 -1830498 -1830632 1830802 4525364 1754135 @@ -5027,7 +4707,6 @@ 5107076 5107128 5107219 -5107640 5107644 5107829 7410701 @@ -5035,7 +4714,6 @@ 7778368 7903078 7955974 -8158342 8201251 8426357 1757652 @@ -5049,9 +4727,7 @@ 5108349 8964772 4522753 -1830669 9004359 -1939658 1939677 1939680 1939688 @@ -5070,12 +4746,10 @@ 1856620 1856658 1856668 -1856686 1856691 1856701 1856730 1856768 -1856772 1856867 1856971 1857258 @@ -5088,7 +4762,6 @@ 1857828 1857829 1857856 -1857863 1857878 1857924 1857938 @@ -5106,7 +4779,6 @@ 1937707 1937712 1937723 -1937745 1937754 1937769 1937792 @@ -5175,9 +4847,7 @@ 5141242 5141252 5141254 -5803065 1937444 -1937474 1937490 1937514 1937530 @@ -5189,7 +4859,6 @@ 1937582 1937594 1937613 -1937618 1938214 1938226 1938230 @@ -5212,26 +4881,22 @@ 5141262 5141291 5141305 -1858531 1838691 1838905 1838911 4528692 4528694 -1833500 8546322 8574752 1835031 5770913 1835098 -1835156 1835393 1835396 1837172 1838969 1839560 1839770 -1839851 1839893 1841159 5770922 @@ -5248,8 +4913,6 @@ 10737993 1800562 1800572 -1800642 -10010361 1800686 1800691 1800696 @@ -5274,7 +4937,6 @@ 1801170 1801196 5114465 -5114515 1801461 1801490 1801503 @@ -5288,9 +4950,7 @@ 4534779 4534782 4534788 -4534792 6112606 -6112610 6112613 6112661 6133809 @@ -5310,13 +4970,10 @@ 1802702 1802783 1802827 -1802830 1802833 1802919 1802939 -1803012 1803022 -1803025 1803035 1803039 1803060 diff --git a/dev/releases/mambo_v3/presets/australia.classes b/dev/releases/mambo_v3/presets/australia.classes index 546f6ae..0488b21 100644 --- a/dev/releases/mambo_v3/presets/australia.classes +++ b/dev/releases/mambo_v3/presets/australia.classes @@ -113,13 +113,11 @@ 9851221 9985020 6132868 -1760970 1761572 1761573 1761751 1761752 1761820 -1762151 5109196 1762849 1762852 @@ -175,7 +173,6 @@ 1786958 1786990 1787003 -1787009 1787010 5112531 1788553 @@ -252,7 +249,6 @@ 1805524 1805806 1806704 -1806814 1807473 1807477 1807478 @@ -324,7 +320,6 @@ 8363709 10178326 10469564 -8874633 9621271 5116504 1818216 @@ -376,7 +371,6 @@ 1766007 10330198 10598038 -11513188 1786597 4687389 5884188 @@ -482,8 +476,6 @@ 9858922 1873773 1873843 -1873890 -5125569 5125591 5125600 5125602 @@ -508,7 +500,6 @@ 1878406 1878470 9835867 -1888454 1890056 1890065 10211808 @@ -523,7 +514,6 @@ 1748780 1836906 1940575 -1941294 1736623 5102683 1737015 @@ -1060,7 +1050,6 @@ 1945863 1945893 5142067 -1946695 1946720 1946763 1947446 @@ -1085,7 +1074,6 @@ 1764178 1764553 5109848 -5109855 5109870 5109872 5109882 @@ -1140,7 +1128,6 @@ 5111249 5111535 5111600 -5772222 1779269 1779276 1779382 @@ -1218,7 +1205,6 @@ 6115820 6115822 6115830 -8103163 9893740 1782277 1781248 @@ -1236,7 +1222,6 @@ 1824280 1826020 1825238 -1825336 1825950 1825956 1826017 @@ -1259,8 +1244,6 @@ 5128225 1895448 1895956 -1895992 -1896304 5806175 5806177 4704400 @@ -1292,10 +1275,8 @@ 1909457 4704352 4704356 -1909854 1910753 1910809 -1910812 1911755 1913091 1915031 @@ -1315,7 +1296,6 @@ 5806167 6100725 7642610 -1910628 1910629 1910648 1951492 @@ -1339,14 +1319,11 @@ 5120357 5120368 5120379 -1842508 11854390 -4529738 9755262 1843429 1843485 1843590 -1730543 1731097 1731221 11431507 @@ -1360,7 +1337,6 @@ 5806352 5806353 10629470 -8008237 1878744 1878826 1879227 @@ -1507,7 +1483,6 @@ 1891299 10071588 1891308 -1891339 1891533 1891583 10072800 @@ -1537,7 +1512,6 @@ 6133154 10462708 6133158 -8876855 10063575 10375403 1886374 @@ -1567,12 +1541,10 @@ 10452421 10546013 11428453 -1854028 1854249 5122430 5122455 5806333 -1858637 1858674 1858718 1858762 @@ -1593,7 +1565,6 @@ 1867788 10883659 1868025 -5124716 1861457 1861458 1861644 @@ -1606,7 +1577,6 @@ 1862331 1862363 1862370 -1862401 1862403 9836014 1862434 @@ -1639,11 +1609,9 @@ 1992938 1993021 1993045 -1993496 6133769 10022517 1953217 -1953423 10132811 10644798 11503857 @@ -1686,7 +1654,6 @@ 1858404 1858411 1858488 -1856893 1937698 1937712 1937745 diff --git a/dev/releases/mambo_v3/presets/caribbean.classes b/dev/releases/mambo_v3/presets/caribbean.classes index 04794bb..ce2e173 100644 --- a/dev/releases/mambo_v3/presets/caribbean.classes +++ b/dev/releases/mambo_v3/presets/caribbean.classes @@ -4,7 +4,6 @@ 1922015 5140627 1934570 -1934991 1935078 1935295 1935301 @@ -16,7 +15,6 @@ 1936388 1936565 1936566 -5141085 1936649 10331171 9620499 @@ -25,11 +23,8 @@ 1846849 1846860 1850798 -5122121 -1851845 5110390 5108951 -1762286 8331687 1763156 1763163 @@ -38,14 +33,11 @@ 1763223 1763256 8028211 -5110044 -1766845 1767307 1767499 1768283 1769000 1770038 -1770044 1771859 5110326 5110327 @@ -54,11 +46,7 @@ 1777179 1777737 1777942 -5110891 1781029 -9630748 -5112053 -5112080 1782211 8384839 1786217 @@ -70,11 +58,9 @@ 5112542 11890681 10295290 -1790230 1790240 1790246 1790248 -1790287 1790308 7785540 5112843 @@ -82,10 +68,8 @@ 1794637 1795049 1796338 -7598729 1798427 4532352 -8150450 1803163 1803218 1803266 @@ -93,10 +77,8 @@ 5115046 1804759 1804760 -1805271 1805691 1805717 -1806690 1806702 1806871 1806872 @@ -110,29 +92,18 @@ 1810145 5116145 5116198 -5116238 5116252 -5116293 -9350900 1810846 -1810866 7535515 -1811019 5116423 1814182 -1814357 -1814359 1814692 1815373 5117414 -5117462 -1815856 1816570 5117685 -1817086 1817940 1818252 -11904675 10395440 10214972 10830546 @@ -148,17 +119,13 @@ 8299504 8968321 1784959 -1785024 1785072 6117485 7611914 -7924383 1780646 1780668 1777463 5123542 -1870308 -1870988 8766638 1872514 1872873 @@ -166,26 +133,18 @@ 1873079 1873398 7372375 -1873753 -1875478 -1875483 1876542 1877002 -1877282 -1877492 5125525 5143284 5143285 5131957 1736623 1739617 -1741400 -1741747 1741823 1741826 1935498 4299071 -8345567 9457324 9622955 1936026 @@ -193,23 +152,15 @@ 1920900 1920923 1921123 -8825450 1922455 10278292 1922637 -1922849 -1922865 1922868 -1922889 -8913017 1923678 1923679 1923997 8992718 9157410 -10120854 -10307383 -4300384 4300393 4300399 8389961 @@ -220,11 +171,9 @@ 1927996 1928009 4300406 -1928215 1928589 1929046 1929129 -5139578 1929966 1930079 1930146 @@ -238,7 +187,6 @@ 1930391 1930410 1930422 -1930451 1930563 1930581 1930621 @@ -256,7 +204,6 @@ 5139909 1932172 1932175 -1932576 5140033 5140054 1933260 @@ -266,20 +213,16 @@ 1935888 1935912 1935916 -1935925 1935935 5139928 4300268 9469139 9156458 1751980 -1751986 1752034 1752109 1752477 1752775 -1752825 -5105367 5105379 5105447 5105491 @@ -288,12 +231,9 @@ 1753604 1753661 1753833 -1753864 1753871 -1919125 1919128 1919130 -1919146 1919149 1919239 1919282 @@ -301,7 +241,6 @@ 1919289 5137540 1919646 -1919649 1919652 1919653 1919656 @@ -330,33 +269,27 @@ 1956099 1956215 1959637 -1961155 10650351 1962051 1962086 1962118 1962120 -1963425 1963433 5144363 1966088 1966185 1968313 1968315 -1968321 1968324 1968942 -5145466 5145560 1973665 -5146497 9590066 1975287 1976073 1976255 1976651 1978464 -1978671 9243264 1981160 1981973 @@ -365,25 +298,14 @@ 1985647 1985952 1989582 -1990331 1990594 1990998 5880539 -9438677 -9581695 -9619088 -9237031 -10464824 -10288719 -5149753 -5149777 5150002 5150027 -12200261 12252926 11423843 12239491 -1942098 1942141 1942170 12286003 @@ -392,10 +314,7 @@ 1942509 1942558 5141662 -1942854 5141763 -1943475 -1943563 1943571 1943588 1943823 @@ -433,10 +352,8 @@ 1946074 1946097 4301426 -1946163 1946167 1946177 -1946310 1946333 1946469 1946520 @@ -444,18 +361,14 @@ 1946550 1946577 1946582 -5142086 1947021 1947037 1947048 -1947049 1947147 5142176 -1947568 1947577 1947587 1947597 -1947894 12208168 1947973 1947979 @@ -469,69 +382,51 @@ 1948630 4301945 1948823 -1948826 1948858 1948890 1948947 1949049 1949105 1949322 -1949331 1949451 -1949512 1949515 1949592 1949621 7726809 9395000 -5142424 5142436 1950017 1950019 1950044 1950052 -1950133 1950153 1950197 -1950384 1950654 1951097 1951121 1951125 5715127 -12180041 5142829 5977203 1945374 12175154 -12263736 -7911151 9366762 1761892 1764686 1764693 1765155 -5109845 5109850 5109855 5109881 5109954 5109958 -1767052 1767571 -9511345 1767719 -9550265 -6115953 1777727 -1777728 1777730 -5111141 1780330 1780390 -1780407 1780440 -1782422 1782424 1783811 5112414 @@ -546,18 +441,10 @@ 7689966 7882824 8405656 -9327259 -1796312 1798288 -8729319 -8928353 -7717385 10118643 -9629365 11615055 -11626773 9307254 -1774929 1770955 5108665 1797903 @@ -569,11 +456,9 @@ 1903598 1892509 1892729 -1892742 1892770 4299095 1892851 -1892863 5127805 5127814 5128005 @@ -581,15 +466,11 @@ 5128011 5128034 1894076 -1894088 1894329 -1895176 -1895185 1895250 1895709 1895768 1895789 -1895820 9016382 1895886 1896087 @@ -599,7 +480,6 @@ 5128491 1896628 1896749 -1896754 10353400 1896756 1896774 @@ -610,13 +490,8 @@ 5925238 1897977 1897990 -1898077 1898143 1898174 -1898200 -1898286 -4299368 -4299370 1898348 1898350 1898367 @@ -629,9 +504,7 @@ 5129481 5129489 5129496 -5129520 5129524 -5129531 5129535 9255328 1898686 @@ -642,7 +515,6 @@ 9446281 1900024 1900026 -1900131 1900172 1900175 1900195 @@ -658,8 +530,6 @@ 1900787 1900830 1900872 -9392084 -1901001 9072828 1901261 8247566 @@ -668,42 +538,31 @@ 5130326 5130330 1901744 -1901794 1901801 -1901804 -1901810 -5130369 5130514 5130528 5130548 9357385 -1902211 1902378 1902406 1902451 1902458 1902479 -1902502 1902620 1902623 1902642 1902670 1902676 1902699 -1902814 1902880 -5130562 1903607 5131608 -5131637 1904382 -1904719 5131951 1905451 1907190 1907272 1907395 -1908148 1908168 1908199 1908203 @@ -719,15 +578,12 @@ 1909170 1909185 1909191 -9851867 8727750 -5133251 5133255 5133265 5133451 5133523 5133565 -5133568 1910773 5133581 1911076 @@ -736,17 +592,13 @@ 5133621 5133622 8548427 -1911939 12322536 -12335869 1911966 1912003 1912036 1912119 5133736 5133786 -10638244 -9277330 1914416 1914424 1914465 @@ -756,10 +608,6 @@ 1915339 1915396 1915401 -1915417 -1915427 -1915430 -1915456 5136372 1916701 1917827 @@ -772,8 +620,6 @@ 1918094 1918097 1918149 -10250149 -1918220 1918268 1918269 1918280 @@ -807,22 +653,13 @@ 5125118 1941570 1941717 -1842508 -4529738 5101371 -9114044 5101527 7628188 -1878837 1879052 1879160 1879253 -1879398 1879413 -10874932 -1879443 -1879471 -5126352 5126494 5126585 5126637 @@ -832,45 +669,34 @@ 10861282 11968849 1881079 -1881166 5126721 -1881822 5126751 1881917 5126756 1882786 10107015 -1882812 -1882818 1882819 1882941 1882960 -1883038 1883067 10807787 8981028 5127090 1883968 8324720 -1884437 1884479 -1884685 1884774 1884923 -1884997 1885099 1885158 1885950 1886251 1886729 10510138 -1886929 -1887004 1887634 1888047 1888292 1888306 -1888307 1888336 1888646 1888955 @@ -880,10 +706,8 @@ 11044778 7543006 1890368 -1890512 1890876 1891035 -1891755 1891932 1892131 1892311 @@ -895,46 +719,31 @@ 6120803 6121010 6121218 -8876855 1886374 1889721 1889850 5127631 1886123 -1886207 1853242 7946946 -1858674 -1858706 1858930 9760511 6133397 -1859932 -9700261 -10103570 9547681 1864905 1865107 -1865108 1865132 5124557 5124595 5124598 -5806244 1865547 1865557 -1865572 1865709 1865764 -1865827 1865837 -1865963 -1866003 1866105 -1866201 1866220 1866311 -1866570 1866902 1867218 1867224 @@ -951,12 +760,10 @@ 1861784 1862033 1862044 -1862047 1862049 1862078 1862087 1862088 -1862091 1862094 1862096 1862123 @@ -965,15 +772,11 @@ 1862181 1862198 1862207 -9559671 5123701 5123704 1862547 1862551 1862658 -1862765 -1862841 -1862923 1862928 1863109 1863151 @@ -1007,9 +810,7 @@ 5124250 5124268 5124442 -5124443 5124448 -5124450 5124452 5123954 5123956 @@ -1023,14 +824,11 @@ 1863982 1864004 1864021 -1864046 1864058 1864068 -1864070 1864084 1864098 1864103 -1864106 1992634 5150053 1953499 @@ -1042,34 +840,25 @@ 1953166 1751497 1751524 -1751572 1751588 1751590 1751625 -1751670 -5105193 5105217 -5105218 5105227 -5122538 5122556 5122581 -5122647 1857068 -1857380 1858283 10038125 1937655 1937793 1937885 -1938022 1938069 1938112 1938159 4299871 10600208 12200213 -12211009 1937064 1937090 1937110 @@ -1080,13 +869,8 @@ 1937530 1939130 1939136 -5141321 5141324 -5141333 -1939336 -4694313 1856555 -1857690 4534796 9385576 8924506 diff --git a/dev/releases/mambo_v3/presets/central_america.classes b/dev/releases/mambo_v3/presets/central_america.classes index 1738701..c8cbc4c 100644 --- a/dev/releases/mambo_v3/presets/central_america.classes +++ b/dev/releases/mambo_v3/presets/central_america.classes @@ -1,5 +1,4 @@ 12170988 -1934570 1934715 1934991 1935301 @@ -22,38 +21,25 @@ 5102324 1845314 1845385 -1845442 1845455 -1845513 -4528100 1846439 1846849 1846860 -1846992 -1847249 -1847498 -1850673 1850729 1850771 -1850781 1850798 5122062 5122121 5122131 1851845 -9123440 -1829612 10508467 5119890 5110390 -1760384 1760385 1760397 -1760398 1760400 5108951 1761101 -1761110 1761838 8331687 8379616 @@ -65,13 +51,10 @@ 1763199 1763223 1763256 -1764525 8028211 5110044 1766839 -1766845 1766880 -1767031 1767320 1767499 9384861 @@ -80,17 +63,12 @@ 1770038 1770044 1770263 -9256436 -9395422 -9440644 1771859 5110326 5110327 5110533 1776163 1777052 -1777075 -8345991 1777179 1777737 1777942 @@ -98,20 +76,13 @@ 9610080 1779740 1781029 -7672864 9305011 -9390065 9630748 1781944 1781946 -5112051 5112060 -5112068 -5112080 1782214 8384839 -1783365 -1785913 1786217 1786219 1786247 @@ -122,7 +93,6 @@ 11890681 10295290 1788891 -1789193 5112626 1790230 1790240 @@ -136,47 +106,29 @@ 1790287 1790308 1790787 -1790832 -1790937 1790945 7785540 -9345545 5112843 1791151 1791372 9382044 1792827 1792831 -1793566 -10850929 1794637 1795042 -1795045 1795049 9622322 -1796288 -1797111 1797121 -1797296 1797521 -9022399 -9236138 9410076 7598729 1798427 4532352 8150450 -8793873 -9314022 1799183 -9249036 1803218 -1803266 10033898 -1804394 -1804401 1804404 -1804407 1804409 1804522 5115046 @@ -186,8 +138,6 @@ 1805197 1805271 1805537 -1805542 -1805549 1805691 1805717 1805938 @@ -200,10 +150,7 @@ 1806872 5115500 1807514 -1807881 -1808590 1808592 -1808648 8929537 1809066 1809127 @@ -230,10 +177,8 @@ 7535515 1811019 1811079 -1811122 1811439 5116332 -5116338 5116358 5116423 1814182 @@ -243,9 +188,7 @@ 5117348 1814665 1814692 -1814800 1814863 -8933773 5117414 9434954 5117430 @@ -253,9 +196,6 @@ 1816570 5117685 1817086 -1817690 -1817693 -1817727 1817734 1817749 1817797 @@ -267,11 +207,8 @@ 1818454 1819310 9391467 -9568710 1820940 -9362560 10395440 -9247563 9290866 9315577 9406984 @@ -281,119 +218,70 @@ 10851228 12194283 8429622 -5114921 1781420 1793538 1813413 1813415 8177591 1775796 -1811948 -1812026 5884258 7716829 8299504 8968321 -9451320 1784959 1785024 -1785072 5884188 6117485 7611914 7924383 1780646 -1780668 1777463 1777471 -1860974 -1860993 1838360 -1838465 -1841091 -9473121 1860184 -10165831 -1860443 10308365 5123419 -5123542 -4302389 -8797666 1870037 1870308 -1870450 1870727 1870988 1871175 -10246305 -8766638 -1871597 -1871890 -1872210 10336328 1872452 -1872456 1872514 -1872515 1872873 -1872901 1873079 -1873319 5125545 1873398 7372375 1873753 10143814 -9971850 -1874552 1875478 -1875914 1876542 1876665 5125916 5125917 1877282 1877443 -5126013 5976937 5125525 5143284 5143285 -11950325 12018158 -12060941 5131957 -5141493 -1940580 1941294 -10132596 1736623 10274976 1736860 -10638589 4530608 -1737847 1737904 1737929 -1740246 -1741131 -1741324 1741820 1741823 1741826 -9880932 -10095278 11923027 -1743461 10073044 -1745022 -1746000 -1747024 -1747140 -1747740 9948031 -8734154 1935498 4299071 9457324 @@ -405,19 +293,13 @@ 1921053 10657453 1921123 -1921240 -1921247 8825450 -1922038 1922039 1922041 -1922049 1922219 1922455 10278292 1922637 -1922676 -1922851 1922865 1922868 1922889 @@ -427,12 +309,10 @@ 1923678 1923679 1923997 -1924050 1924106 1924176 1924518 1924521 -8837974 8840017 8992718 9157410 @@ -440,17 +320,12 @@ 10120854 1925429 1925498 -1925501 1925515 4300384 4300393 8904480 -1925918 1925922 -1926009 1926834 -5139029 -5139034 1927988 1927996 1928009 @@ -481,17 +356,14 @@ 1930451 1930563 1930653 -1930678 1930728 1930772 1930830 -1931116 1931119 1931122 1931126 5139864 1931310 -1931784 5139897 5139898 5139908 @@ -506,13 +378,10 @@ 5140054 5140063 1933260 -1933998 1935853 1935872 1935878 -1935884 1935888 -1935899 1935901 1935912 1935916 @@ -535,7 +404,6 @@ 1752775 1752825 1752832 -1752894 11507608 5105367 5105369 @@ -547,12 +415,9 @@ 1753603 1753604 1753661 -1753668 1753833 1753864 1753871 -5105603 -10413588 10514620 5137512 12181811 @@ -582,7 +447,6 @@ 5137553 1919700 1919705 -1919711 10703948 1919937 1919939 @@ -592,7 +456,6 @@ 1919949 1920192 5137800 -5137802 4701136 5137817 5137819 @@ -605,12 +468,10 @@ 1920496 1920552 1920571 -1920574 1920581 1920691 1920803 1920809 -5137615 5137672 5137694 12191141 @@ -618,15 +479,11 @@ 12234544 12236627 1920621 -5105068 -1954930 1956098 1956099 -1956215 1958049 5143964 1958121 -1958528 1959637 1960090 1960166 @@ -635,39 +492,26 @@ 1960315 1960503 1961155 -4302240 -9468667 1961361 10650351 1962051 -1962076 1962086 1962118 1962120 9592714 9264326 -1962895 -1962900 4302252 -1963052 -1963207 1963433 -1963619 1963633 -1963848 -1963854 5144363 1964698 1965586 -1965671 1965697 -1965865 1965887 1966088 1966185 1967226 1967346 -8793278 1968313 1968321 1968324 @@ -677,20 +521,14 @@ 10088253 5144953 5145078 -5145139 5145466 -5145521 5145560 1972101 -5145998 5146179 -1973147 1973245 1973665 10404426 -5146497 5146820 -5146832 5147018 5147139 5147179 @@ -701,60 +539,42 @@ 1976073 1976651 1976746 -1977003 9617496 1978464 1978671 9243264 5148277 -5148280 5806132 1978958 1978959 -1979427 1980245 1980247 -1980250 1981144 1981160 1981252 1981277 -1981284 -1981951 1981959 1981973 5148531 -5148544 -5148576 5148593 9307713 -9424464 -9488754 9544337 -5148719 5148743 -5148934 5148952 1985485 5149222 1985647 1985952 -1986091 1986192 -1986367 1986906 -1987301 1987330 1989582 -1990200 1990270 1990331 1990335 1990357 1990594 1990998 -5149631 -12225687 5880539 9392058 9438677 @@ -763,28 +583,19 @@ 9281181 9403481 9448761 -9494431 -9516038 -9534291 9545331 9497623 -9581695 9619088 9237031 9299326 10221195 10288719 -1978197 9363893 9391442 -5149746 5149753 5149811 -5149819 -5146326 1980462 9256786 -9291092 5150002 5150027 12200261 @@ -805,24 +616,19 @@ 1942171 12286003 1942341 -1942370 -1942372 1942416 1942455 1942509 4301744 -4301749 1942558 1942670 5141662 1942854 -1942982 5141697 1943054 4302008 5141743 5141763 -1943475 1943563 1943571 1943588 @@ -848,7 +654,6 @@ 1944335 1944343 1944361 -1944421 1944574 1944769 4301934 @@ -870,14 +675,12 @@ 1946079 1946097 1946163 -1946167 1946177 1946310 1946327 1946333 1946469 12233838 -1946495 1946500 1946509 4302101 @@ -894,11 +697,9 @@ 1946983 1946989 1946992 -1946995 1947021 1947037 1947048 -1947055 1947147 5142166 5142175 @@ -930,7 +731,6 @@ 1949049 1949105 12353663 -1949219 1949285 1949322 1949449 @@ -940,7 +740,6 @@ 10574663 1949512 1949515 -1949545 1949592 1949621 7726809 @@ -957,7 +756,6 @@ 1950133 1950153 1950197 -1950567 1950578 1950654 1950767 @@ -969,23 +767,14 @@ 1951125 1951133 1951217 -1951218 4301897 5715127 12180041 12206694 1951340 5142829 -5977197 -5977207 -5977214 -5977235 5977259 5977260 -5977262 -5142267 -5142319 -5142328 1948771 1948779 1948789 @@ -1004,16 +793,11 @@ 1758783 7911151 9366762 -9445489 1759799 1759881 1760309 -1760361 -1760455 1761143 1761892 -5109535 -9328683 1764686 1764693 1764917 @@ -1023,63 +807,42 @@ 5109855 5109881 5109954 -5109958 8352161 1766237 -1766285 1766287 1767052 1767571 1767584 9511345 -1767612 5772169 1767719 -1768172 -1768174 -1769814 1770659 1773783 -9283948 1774243 9550265 -1774792 6115953 1775509 1776467 -1776473 1777727 1777728 9310286 5111141 -5111546 5111568 1780309 1780390 1780407 1780437 1780440 -8802610 9374443 -9392614 -1781819 -1782422 -1782424 -1782595 9289753 -1782705 -1783313 9457757 9500945 -1783376 1783811 9348210 9465978 9492640 -1783842 1784422 1784461 -1784582 5112414 4534290 1785168 @@ -1091,114 +854,75 @@ 1786808 1787438 1788485 -1788673 -1788677 -9449132 -1790339 -1790343 1791331 -1791680 -1791862 -1792318 1792430 5113365 9240216 1792817 1792996 11781335 -1796274 1796276 7383338 -7689966 7882824 -9327259 -1796312 1798288 1799433 1799675 1799774 9388726 9571514 -1799877 1799900 -1799911 1799925 10446574 8729319 -8050639 -8440999 8562506 -8647523 9241105 -9390293 9452702 9484411 -9530271 -9552253 -9595155 -11922580 9363692 9556427 -9503548 7779226 8818378 8928353 9538684 10118643 -9875111 9342344 -9629365 11452421 -11470672 11615055 11626773 11627464 11660145 11713256 11753804 -11781300 -11859640 5109299 5109369 5109413 8943174 9038042 9307254 -9387782 9404919 5112130 -5112131 7398419 1792564 1774929 1770955 -1771067 -1771245 1765751 5108665 11783188 1797903 -6115793 1776094 9354669 -5118474 5118509 1824259 -1825218 1825373 1825391 1825428 5118944 1826156 1826169 -1826172 1826181 1826222 -5119009 5119046 -10115073 1826772 -9807789 1827716 1828105 1828268 @@ -1216,7 +940,6 @@ 5127805 5128005 5128007 -5128011 5128034 1893337 1893480 @@ -1230,7 +953,6 @@ 1895176 1895185 1895203 -1895709 1895733 1895768 1895820 @@ -1239,7 +961,6 @@ 1895886 1895904 1896087 -5128398 5128433 5128438 5128475 @@ -1303,14 +1024,12 @@ 4299213 1899873 1899893 -9446281 1899994 1900024 1900026 8847500 9208918 9925669 -1900112 1900131 1900134 1900175 @@ -1325,19 +1044,16 @@ 1900578 1900618 1900626 -1900632 1900787 1900825 1900830 1900872 9190731 -9392084 1901001 1901189 1901261 1901268 8247566 -5130277 1901735 1901744 1901794 @@ -1352,7 +1068,6 @@ 5130528 5130548 9357385 -1902111 1902211 1902300 1902378 @@ -1387,7 +1102,6 @@ 1905242 1905451 1907153 -1907190 1907235 1907250 1908011 @@ -1415,15 +1129,12 @@ 1909128 1909170 1909185 -1909191 1909211 9851867 8727750 5133142 5133251 -5133255 5133265 -5133451 5133523 10558140 5133565 @@ -1477,22 +1188,18 @@ 1915427 1915430 1915456 -1915469 1915506 10487080 1916700 -1916790 1917827 1917830 1917834 1918077 1918078 1918082 -1918086 1918094 1918097 1918133 -1918149 10250149 1918220 1918269 @@ -1507,7 +1214,6 @@ 5128045 10415847 5130682 -5130696 10259880 5131982 5132003 @@ -1525,7 +1231,6 @@ 5132429 5132446 5714312 -5714333 9541133 5133088 5714299 @@ -1547,17 +1252,12 @@ 1941717 1941719 5101371 -5101374 -10607329 -11484123 9114044 5101527 1731812 7628188 1878688 1878705 -1878751 -1878810 1879052 1879160 1879253 @@ -1566,18 +1266,13 @@ 1879413 10366679 10874932 -1879443 1879452 1879471 -5126352 5126494 5126517 5126533 -1880044 -1880133 5126585 5126637 -1880381 1880505 10056494 1880537 @@ -1589,9 +1284,6 @@ 1881111 1881139 1881166 -9819403 -1881404 -5126718 5126721 1881767 1881822 @@ -1601,22 +1293,16 @@ 1882190 1882195 5126963 -1882786 10107015 1882812 1882816 1882818 -10191785 -1882927 1882941 1882960 1883067 10807787 8981028 5127089 -5127090 -5127116 -5127130 1883968 1883975 8324720 @@ -1625,32 +1311,23 @@ 1884479 1884685 9308930 -1884703 1884774 1884923 -1884997 -1885001 1885099 1885158 1885642 1885950 1886251 -1886292 -8223165 5127209 1886501 1886729 10510138 -1886868 1887004 1887024 1887341 1887459 -5127335 -5127337 5127339 5127355 -5127357 1887565 1887634 1888009 @@ -1664,48 +1341,37 @@ 1888695 1888823 12106417 -1888946 1888955 1889028 1889267 -1889327 1889536 1890089 1890247 -7543006 1890368 1890374 -1890410 1890417 1890487 1890512 1890599 -1890670 1890730 1890737 1890794 1890876 1890885 6207059 -7431428 1891035 1891074 1891167 1891488 10310835 -1891636 1891755 1891932 1892131 -1892193 1892230 1892311 -1892320 1892355 1892420 1892427 -1892433 -9059564 1892477 1892488 5771877 @@ -1723,27 +1389,20 @@ 5127631 5127680 5802339 -1887122 1886123 1886207 -1846103 1831136 -1831168 1853242 1853312 1854143 -11773446 7946946 1858615 9777614 -1858659 1858674 -1858706 1858930 1859046 1859161 8790054 -6133397 9700261 10103570 1864905 @@ -1751,7 +1410,6 @@ 9240588 9355107 9531432 -9547535 9606779 1865102 1865107 @@ -1759,14 +1417,11 @@ 1865132 1865299 1865333 -1865341 1865353 5124557 5124589 5124595 -5124598 5806244 -1865557 1865572 1865590 1865709 @@ -1788,9 +1443,7 @@ 1866550 1866570 1866601 -1866838 1866902 -1867037 5124873 1867515 1867525 @@ -1800,11 +1453,9 @@ 10591617 9634178 10248521 -1841813 5123615 1861479 1861559 -1861604 5123636 1861773 1861783 @@ -1853,12 +1504,10 @@ 1863412 1863416 1863426 -5124049 1863699 1863701 1863706 1863714 -1863724 1863732 1863734 1863742 @@ -1874,9 +1523,6 @@ 1864328 1864329 1864352 -5124118 -5124136 -5124147 5124172 5124200 5124249 @@ -1892,13 +1538,11 @@ 5123968 5123971 5123979 -5123980 5123983 5123991 5123996 5124000 8849480 -9513830 1863978 1864004 1864008 @@ -1911,26 +1555,20 @@ 1864098 1864103 1864106 -1992634 -5150092 1993643 1992817 1953499 5143232 -5143234 9053308 9424853 1953970 1953998 1954084 -1754270 5105649 5105656 5105671 -1757839 10322104 1830681 -10604375 1953166 1751497 1751524 @@ -1951,30 +1589,19 @@ 1854920 5122526 5122538 -5122556 -5122571 5122581 -5122620 5122646 5122647 -5122683 5122696 -5122702 1855358 -10055273 1856581 1857143 1857380 -1857626 -1857829 -1858163 -5122969 1858283 10038125 1937642 1937655 1937688 -1937691 1937722 1937751 1937758 @@ -1984,9 +1611,7 @@ 1937846 1937885 1938016 -1938022 1938059 -1938069 1938112 4299871 10600208 @@ -2006,17 +1631,9 @@ 5141324 5141333 5141342 -1939336 4694313 -12219250 -1856368 1856555 -5119961 -5119969 -1836899 -1837172 4534796 1800963 -9385576 8924506 9426252 diff --git a/dev/releases/mambo_v3/presets/east_asia.classes b/dev/releases/mambo_v3/presets/east_asia.classes index e59f3e3..e18ffc8 100644 --- a/dev/releases/mambo_v3/presets/east_asia.classes +++ b/dev/releases/mambo_v3/presets/east_asia.classes @@ -11,7 +11,6 @@ 1860668 1860688 1860711 -4522933 5123582 1732063 1732114 @@ -60,7 +59,6 @@ 11505614 8825467 1845270 -1845368 1845547 1845548 1845565 @@ -69,14 +67,11 @@ 4528100 1846604 1846657 -1846715 -1846729 10785815 11730078 1847061 1847062 1847097 -1847111 1847157 1847260 1847392 @@ -85,9 +80,6 @@ 1847641 9262981 1847956 -9546514 -1848150 -10450501 1848219 1848273 1848356 @@ -113,13 +105,9 @@ 1849477 11052757 11080751 -1849531 1849552 1849630 -1849924 -1850008 1850076 -1850238 1850246 11576787 1850302 @@ -135,11 +123,8 @@ 1850633 4528529 1850781 -1850971 -1851000 1851010 1851011 -5122037 1851203 1851220 1851337 @@ -153,7 +138,6 @@ 1852430 11287091 1829533 -1829588 1829659 1829776 1829785 @@ -163,7 +147,6 @@ 4525354 1828637 6097236 -7623903 5879654 7448174 4525610 @@ -188,11 +171,7 @@ 1830191 1830207 1830241 -1830243 -1830262 -1830266 4525476 -4525487 1831458 1831631 1831643 @@ -214,7 +193,6 @@ 12199936 11095591 11418741 -11571523 7908344 12235234 12217030 @@ -265,11 +243,8 @@ 1766888 1767044 1767755 -1767779 -1767780 5110190 11097510 -1767883 1768440 5110232 1768898 @@ -328,7 +303,6 @@ 6132938 1780150 5111830 -10203499 1780705 1780716 1782115 @@ -344,7 +318,6 @@ 6132971 6132974 1786980 -1786985 1787009 10860091 6132805 @@ -398,7 +371,6 @@ 1793892 5113925 1796984 -6132979 10600368 1797178 1797258 @@ -423,7 +395,6 @@ 1798346 1798408 1798449 -1798481 1798488 1798504 6132841 @@ -434,7 +405,6 @@ 1798523 1798580 1798594 -1798687 1798700 1798794 1798802 @@ -468,7 +438,6 @@ 9343385 1804906 1805044 -1805111 11494627 12229237 1805580 @@ -508,13 +477,10 @@ 5116395 5116412 12176559 -12182061 1811686 1812500 10671425 10821201 -11736162 -12209759 1813010 1813114 1813263 @@ -561,7 +527,6 @@ 1819280 11656384 8407461 -1819668 6134035 1819873 5118348 @@ -569,8 +534,6 @@ 7657803 8361973 5118422 -10546538 -1820275 1820352 1820372 1820406 @@ -578,7 +541,6 @@ 1820450 1820451 1820477 -1820478 5734655 5734657 7346381 @@ -625,12 +587,10 @@ 10062933 10717837 8148822 -12242422 10806460 6133252 10072380 6133325 -9754232 10972780 11142432 10309234 @@ -643,14 +603,12 @@ 6133269 6133270 6133271 -10754772 11232431 6133311 6133312 6133313 6133315 6133317 -8452092 8526388 8624848 5734901 @@ -723,7 +681,6 @@ 5113036 5109796 1821455 -1821464 1821478 1821479 1821505 @@ -739,7 +696,6 @@ 1804182 1774997 6122364 -1819170 1781473 1783713 1783725 @@ -748,13 +704,11 @@ 4532366 4687933 6116646 -6116661 10926224 11088003 1820118 1820137 1819057 -6116413 1820039 5118396 1781531 @@ -766,7 +720,6 @@ 1765999 1766022 6133069 -10598038 11513188 1786597 5884188 @@ -804,7 +757,6 @@ 1860987 1861031 4522916 -4522919 4522922 4522886 4522890 @@ -814,9 +766,7 @@ 1860768 1860852 7767114 -7851302 7961640 -1992378 1852956 1852978 1835432 @@ -825,10 +775,8 @@ 9724183 1837343 1837420 -1837429 1837515 4529064 -7958169 8015612 1839293 1839296 @@ -843,7 +791,6 @@ 1840485 1840555 1840566 -1840570 1840581 1840596 5119808 @@ -855,11 +802,8 @@ 1869359 1869363 9883856 -1751236 -1751298 1751457 4535884 -4535904 1939510 1939520 5141344 @@ -868,7 +812,6 @@ 1860408 4525177 5123339 -10361029 5123394 5123419 5769164 @@ -880,10 +823,7 @@ 5123474 5123485 5123489 -1751207 1751216 -1869595 -1869656 1869706 1869803 1869852 @@ -905,7 +845,6 @@ 1871783 1871826 1871988 -1872094 1872169 10787705 1872848 @@ -932,12 +871,10 @@ 5125689 1874192 1874204 -1874211 1874274 4531147 1874375 1874743 -9782192 1874937 1875008 1875120 @@ -954,8 +891,6 @@ 1875865 1875869 1875918 -1875940 -1875952 1875958 1876063 1876168 @@ -971,9 +906,7 @@ 1877038 1877310 1877341 -1877345 1877368 -4531246 1877498 5126052 1877788 @@ -983,27 +916,22 @@ 1878406 1878470 9835867 -1878586 1883045 1888454 5884888 6133441 -11728049 1872315 1748805 4525884 5141493 -1940504 1940510 1940575 1940639 -1940644 1940744 1940768 4525777 1940807 1940838 -1941348 1941377 1941437 12211069 @@ -1011,7 +939,6 @@ 1736358 1736377 1736412 -1736425 1736484 1736499 1736560 @@ -1035,7 +962,6 @@ 1737368 1737491 1737497 -7466487 1737524 1737526 1737533 @@ -1044,12 +970,10 @@ 1737650 1737753 1737775 -1737776 1737847 1737893 1737924 4530002 -8186212 1738050 1738192 1738222 @@ -1066,8 +990,6 @@ 5102951 1738687 1738700 -1738777 -1738794 1738839 1738883 1739042 @@ -1078,13 +1000,11 @@ 1739377 1739381 5102982 -1739451 1739461 1739471 1739605 1739748 1739797 -1739816 1739833 1739919 1739922 @@ -1092,13 +1012,9 @@ 1739999 1740053 1740069 -1740116 1740120 -1740155 -1740174 1740183 1740185 -1740305 1740374 1740392 7797515 @@ -1111,9 +1027,7 @@ 1740623 1740797 1740828 -1741056 1741253 -1741340 1741341 1741368 4530151 @@ -1134,7 +1048,6 @@ 1741765 10807169 11093909 -1742106 1742142 1742185 1742263 @@ -1151,7 +1064,6 @@ 8313553 5103998 7661023 -11846897 1743453 1743475 7877231 @@ -1161,14 +1073,12 @@ 5104056 6097235 1743641 -1743643 1743710 4530214 1743730 1743768 1743775 1743782 -4529900 4529908 4529915 1743828 @@ -1188,24 +1098,16 @@ 1744542 1744588 1744593 -1744693 1744699 -1744714 1744728 1744731 1744739 -1744742 -1744748 1744763 -1744777 1744808 1744896 -1744901 7964262 1745079 10844862 -1745131 -1745558 1745561 1745579 1745600 @@ -1213,14 +1115,12 @@ 1745634 1745636 1745643 -1745659 1745676 1745678 1745705 1745724 1745737 1745756 -1745762 1745771 1745781 1745787 @@ -1241,7 +1141,6 @@ 1746613 1746644 1746666 -1746689 1746714 1746775 1746832 @@ -1250,10 +1149,8 @@ 1746910 1747050 1747141 -10442122 5104442 1747738 -4530138 5104558 5104597 6097234 @@ -1261,7 +1158,6 @@ 9242559 1748456 1748605 -1748720 8691947 10580256 5103121 @@ -1280,10 +1176,8 @@ 5771256 5771258 5771259 -1831780 4525500 4525503 -4525505 4525510 4525530 4525540 @@ -1299,11 +1193,9 @@ 1921009 1921010 1921040 -1921044 7346426 10581870 1921092 -1921093 1921150 1921163 1921263 @@ -1324,7 +1216,6 @@ 1922584 4535092 8782891 -1922745 1922937 5138298 5138543 @@ -1340,11 +1231,9 @@ 1924044 1924057 1924097 -1924106 1924193 5138681 1924298 -1924323 1924390 1924458 1924713 @@ -1355,7 +1244,6 @@ 1925454 1925543 1925731 -1925743 1925877 1925918 1925962 @@ -1363,7 +1251,6 @@ 9816676 1926324 1926436 -1926437 1926448 1926574 5883255 @@ -1379,7 +1266,6 @@ 5883052 1927393 1927439 -1927707 1927717 5882965 1928248 @@ -1399,9 +1285,7 @@ 1930110 1930832 4535106 -1930954 1930968 -1931109 1931132 8643155 1931148 @@ -1441,7 +1325,6 @@ 1933583 1933647 7346407 -1933679 1933793 1933844 1933845 @@ -1465,7 +1348,6 @@ 1924494 11055981 9623220 -1752161 5734556 1752373 1752483 @@ -1482,7 +1364,6 @@ 5105467 5105547 5105560 -5105570 1753432 1753435 11014495 @@ -1514,7 +1395,6 @@ 1919635 1919697 1919712 -1919716 1919720 1919728 1919731 @@ -1539,13 +1419,11 @@ 1920494 1920496 1920506 -4535307 5137889 5137891 5804932 5805407 1920515 -5137902 5137903 5137908 5137912 @@ -1570,7 +1448,6 @@ 5137612 5137636 5137677 -5137682 5137689 5137706 5137708 @@ -1578,7 +1455,6 @@ 8203812 1920218 5137763 -1748922 1748942 1749050 1749070 @@ -1588,8 +1464,6 @@ 1749869 1749921 1749948 -1749954 -1750076 1750097 1750143 1750166 @@ -1599,18 +1473,12 @@ 5104829 5104882 5104891 -5104903 5104940 -5105054 5105088 -5105106 5105158 5976947 1751051 5104759 -1749596 -1749608 -8741260 1758003 1735532 4527339 @@ -1626,7 +1494,6 @@ 1869057 1869178 1869187 -1992547 1963096 1973530 11826016 @@ -1656,7 +1523,6 @@ 1955552 1955581 6133676 -1955694 1955725 1955806 5143675 @@ -1688,16 +1554,13 @@ 1957746 1957791 1957816 -1957845 1957852 1957854 4524421 -4524424 4524426 5143947 1958024 1958045 -1958065 1958152 1958158 1958163 @@ -1716,11 +1579,9 @@ 1958463 1958483 5144027 -1958528 1959383 1959395 1959461 -1959467 1959494 1959645 1959652 @@ -1766,7 +1627,6 @@ 1962447 1962516 9812211 -1962584 1962636 1962678 1962839 @@ -1778,8 +1638,6 @@ 1963306 5144345 1963446 -1963463 -1963629 1963709 1963710 1963733 @@ -1828,7 +1686,6 @@ 10670854 1966362 5144534 -1967006 1967011 1967039 5144543 @@ -1863,7 +1720,6 @@ 6133643 1969621 1969954 -1969958 1970034 1970136 1970213 @@ -1890,17 +1746,14 @@ 5145269 5145409 5145522 -5145560 5145624 5145729 5145735 9194811 9627567 -1971858 1971888 6133516 1972094 -1972120 1972185 1972187 1972234 @@ -1940,7 +1793,6 @@ 5146567 5146599 5146601 -5146608 5146611 5146659 5146677 @@ -1954,7 +1806,6 @@ 5146883 5146946 5146961 -5147038 5147039 5147062 5147150 @@ -1966,18 +1817,14 @@ 5147245 5147306 5147354 -5147415 5147441 5147478 -5147492 5147498 5147516 -1975164 1975198 6133559 5147608 5147638 -1975341 11856219 1975546 1975553 @@ -2061,7 +1908,6 @@ 4524638 5734519 6133560 -4524890 5148252 10738407 1978776 @@ -2115,7 +1961,6 @@ 1981998 1982007 1982203 -1982221 1982267 1982291 1982406 @@ -2124,25 +1969,19 @@ 1982529 1982541 1982542 -1982592 1982636 1982671 1982746 1982770 1982791 -1982838 1982865 1982885 -1982924 -1983034 1983052 1983111 -1983170 1983260 1983288 1983441 1983525 -1983528 1983548 1983558 1983648 @@ -2160,9 +1999,7 @@ 11121180 5149012 1984734 -5149136 5149174 -5149203 1984942 1984949 1985061 @@ -2230,8 +2067,6 @@ 1988420 1988487 1988593 -1988642 -1988684 8388883 5149414 5149438 @@ -2293,13 +2128,11 @@ 4524740 7990739 4523560 -4523564 4524054 4524998 4524376 4524822 11828714 -4524712 10422582 10574156 4523522 @@ -2309,10 +2142,8 @@ 6133597 4524070 4524072 -4524403 4524951 4524955 -4524962 10530208 11555221 4525078 @@ -2330,7 +2161,6 @@ 11780161 6133604 6133607 -10629052 7346237 6133520 6133562 @@ -2343,7 +2173,6 @@ 6133542 6133497 6133498 -10477629 6133575 6133517 6133586 @@ -2372,7 +2201,6 @@ 5149746 5149768 5149780 -5149819 5734422 7443518 5146303 @@ -2389,7 +2217,6 @@ 1942808 4689929 5141677 -1942878 1943212 1943223 1943236 @@ -2399,13 +2226,11 @@ 5141795 1943505 1943619 -1943757 8133678 8273661 1944503 1944504 1944591 -1944619 1944778 5141924 1945066 @@ -2453,8 +2278,6 @@ 1947753 1947765 5734665 -1947805 -1947846 1948062 1948073 1948464 @@ -2464,14 +2287,11 @@ 1949015 1949336 1949366 -1949419 7346351 8828146 -9068968 1949784 1949794 1949850 -1949852 1949877 1949929 1950006 @@ -2501,14 +2321,12 @@ 1952878 1952883 1952909 -9359597 9400895 10744228 1800191 5109821 1758613 9355953 -5108419 1758874 1758878 1759055 @@ -2519,7 +2337,6 @@ 4533952 7972792 1759153 -1759159 1759177 1759407 1759620 @@ -2541,9 +2358,7 @@ 1761041 1761392 1761438 -1761735 1761778 -1761865 1762244 6132749 1762608 @@ -2556,7 +2371,6 @@ 5109554 5109599 5109614 -5109661 5109670 5109722 1763610 @@ -2568,13 +2382,11 @@ 1765011 1765017 1765038 -1765044 4534245 4534257 5109830 5109843 5109848 -5109855 5109872 5109882 5109898 @@ -2606,11 +2418,9 @@ 1767655 5110120 5734744 -5772169 5772172 5772176 5772178 -5772186 5772196 5772199 5772202 @@ -2650,7 +2460,6 @@ 1770150 1770172 1770307 -1770461 1770477 1770530 1770573 @@ -2662,20 +2471,16 @@ 1771509 1771531 1771555 -1771997 1772013 1772094 6133806 1772169 1772179 5772129 -1772940 1772956 1772977 1773163 -1773328 1773484 -1773572 1774272 1774347 1774797 @@ -2691,7 +2496,6 @@ 1775962 1775963 1776067 -1776207 1776330 1776371 5772446 @@ -2709,19 +2513,15 @@ 1778127 1778143 1778596 -5111501 -5111513 5111535 5111574 5772222 8253467 -1779258 1779435 1779633 1779641 1779690 1780378 -1781016 4533325 1781233 1781234 @@ -2762,7 +2562,6 @@ 5112160 5112283 5112291 -5112336 5112345 5714973 5715004 @@ -2773,11 +2572,9 @@ 1783855 1783861 1783971 -1784349 1784359 1784513 1784761 -1784812 1784826 1784853 4534290 @@ -2806,8 +2603,6 @@ 1786515 1786573 1786619 -1786651 -1786664 1786902 1787112 1787213 @@ -2843,14 +2638,10 @@ 4533924 1789553 1789580 -4534162 4534166 -1789694 1789695 -1789730 1789745 1789753 -1789755 1789783 1789785 1789849 @@ -2872,10 +2663,8 @@ 1791784 1792061 1792292 -1792300 1792335 1792377 -1792379 1792383 1792411 1792414 @@ -2887,7 +2676,6 @@ 10684776 5113370 1792996 -1793238 1793243 1793246 7918000 @@ -2904,22 +2692,18 @@ 7869346 7922810 1795854 -1795930 1795946 1795957 1796007 1796117 -1796139 1796145 1796169 1796188 4534485 4534486 7438067 -8007222 1796217 7780930 -4688169 4688172 1796423 1796463 @@ -2956,13 +2740,11 @@ 1800149 9536457 6097260 -8742426 4534389 4534207 10638451 4532811 4534663 -4534669 4533273 4534540 8890502 @@ -2979,12 +2761,10 @@ 4533136 4533661 4534408 -4534458 4534533 6132989 6132762 6133075 -5883985 6132781 8021109 11478679 @@ -2998,7 +2778,6 @@ 5772063 9038042 8491927 -4534675 4534681 4534683 4534685 @@ -3009,11 +2788,9 @@ 1771650 1771678 1771698 -1770821 1770869 1770880 1771040 -1771169 1771214 1771245 4533714 @@ -3036,7 +2813,6 @@ 6132880 9243764 4534525 -1773901 1773904 1759394 1789512 @@ -3048,7 +2824,6 @@ 11615549 11731155 4532203 -4532206 4532208 4532239 4532253 @@ -3118,8 +2893,6 @@ 1825336 7346284 5118892 -5118904 -7624468 7937573 8397564 1825539 @@ -3127,7 +2900,6 @@ 5118978 1825786 7345777 -1825920 1825967 1825971 1825983 @@ -3188,7 +2960,6 @@ 5127932 5127955 7346346 -9963153 1893137 1893266 1893329 @@ -3234,14 +3005,10 @@ 1895875 1895956 1895992 -1896061 1896105 -1896141 -1896152 1896304 5128519 1896841 -1896915 1896922 1897664 1897685 @@ -3261,8 +3028,6 @@ 1898946 1898970 1898988 -1899950 -1900093 1900890 1900897 1901213 @@ -3331,14 +3096,11 @@ 1908660 1908702 1908840 -1908863 1908871 1908929 1909123 -1909216 7346301 8978362 -1909281 1909319 10656625 1909398 @@ -3346,15 +3108,12 @@ 1909659 1909810 1909838 -1909854 1909865 1910706 -6133858 1910809 1911093 1911112 1911168 -1911198 1911278 1911298 1911461 @@ -3372,7 +3131,6 @@ 1912325 1912372 1912428 -1912470 4299535 4299565 4299576 @@ -3409,19 +3167,16 @@ 1915080 1915140 1915154 -1915262 1915325 11516142 11535847 1916410 -1916412 1916509 7854318 1916758 5136594 5136681 5136713 -5136752 5136939 5137085 5137166 @@ -3443,9 +3198,6 @@ 1918733 1918843 1918854 -1918868 -8035998 -8176911 4535618 4535510 10000384 @@ -3560,28 +3312,19 @@ 5143147 1952806 1952857 -1951713 9502606 5885428 8604089 1832819 1832853 1832915 -1832927 1832936 -1833096 -1833159 5880257 -5880258 -6097224 -6097225 6097228 1853064 -4529248 1868211 1868409 4702564 -1868499 6544581 1868470 5141581 @@ -3589,16 +3332,11 @@ 1735121 1941864 5120465 -5120577 -5120668 5120675 -5121177 -5121517 5121613 1842097 5120396 1842485 -1842542 1842690 1842695 9755262 @@ -3614,7 +3352,6 @@ 4525641 1731598 10450446 -8130866 8402212 1872359 1872361 @@ -3640,7 +3377,6 @@ 1879408 1879427 1879452 -1879465 1879471 5126212 5126217 @@ -3673,12 +3409,9 @@ 1880968 1881089 1881121 -1881126 1881151 9819403 4531687 -1881208 -1881293 1881329 1881336 1881515 @@ -3693,7 +3426,6 @@ 1882266 1882272 1882437 -1882459 1882557 1882729 5126834 @@ -3727,13 +3459,11 @@ 1884465 1884479 6120980 -1884774 1884816 1884835 1884844 1884858 1884877 -1884890 4532122 1884908 1884909 @@ -3747,9 +3477,7 @@ 1885630 6133181 1885745 -1885763 1885826 -1885836 1885919 1885937 1885945 @@ -3774,7 +3502,6 @@ 1887290 1887509 1887586 -4531670 1887691 1887701 1888027 @@ -3813,7 +3540,6 @@ 1889370 1889552 1889563 -1889905 1889942 1890012 1890031 @@ -3833,26 +3559,21 @@ 1890576 1890656 1890670 -1890679 1890699 1890701 -1890724 1890772 1890898 1890957 1891059 1891167 -1891177 1891190 1891326 1891339 -1891366 1891386 1891426 1891453 1891473 1891493 -1891494 4532022 8411753 1891533 @@ -3862,8 +3583,6 @@ 1891889 1892153 1892242 -1892245 -1892476 10141437 11056379 9674732 @@ -3916,10 +3635,8 @@ 5127698 5802339 1887108 -1887125 1887173 1887177 -1887178 4532050 4532057 4532088 @@ -3935,10 +3652,8 @@ 1846111 1846112 1846133 -1846141 1846149 1846159 -1846210 1846219 1846236 4528818 @@ -3952,7 +3667,6 @@ 1831168 4708183 1853587 -4526048 1854202 1854347 5122430 @@ -3961,7 +3675,6 @@ 1854824 1854849 4526050 -7717983 1858637 1858674 1858698 @@ -3969,24 +3682,19 @@ 1858778 1858873 1859046 -1859100 1859177 1859305 -9760511 1859453 1859471 1859480 9749806 6133397 1859932 -1859952 1860026 1860063 1860076 4536472 4536483 -7642240 -8200050 1973467 5123221 5123042 @@ -3999,7 +3707,6 @@ 1865671 9914882 9972403 -1865930 1866237 5734291 1866356 @@ -4100,13 +3807,11 @@ 1863848 1863909 1863910 -1863924 1863944 9578319 1864126 1864135 1864161 -8133328 1864358 1864377 5124121 @@ -4133,8 +3838,6 @@ 10193618 6106647 5123815 -5123837 -5123870 5123876 5123889 5123890 @@ -4149,7 +3852,6 @@ 1993036 1993043 1993419 -6133769 1993637 1939432 1953196 @@ -4173,7 +3875,6 @@ 1954120 6132728 1860108 -5119513 1830099 1830372 1830380 @@ -4182,8 +3883,6 @@ 1830410 1830457 4525369 -1830498 -1830632 1830802 4525364 1754135 @@ -4210,10 +3909,8 @@ 1755276 5106115 5106160 -5106249 5107128 5107219 -5107640 5107644 5107829 7410701 @@ -4221,7 +3918,6 @@ 7778368 7903078 7955974 -8158342 8201251 8426357 1757652 @@ -4235,7 +3931,6 @@ 8964772 4522753 9004359 -1939658 1939677 1939680 1939688 @@ -4245,19 +3940,16 @@ 1855630 1855747 8734090 -1856005 1856289 1856384 1856595 1856620 1856658 1856668 -1856686 1856691 1856701 1856730 1856768 -1856772 1856867 1856971 1857258 @@ -4268,7 +3960,6 @@ 1857828 1857829 1857856 -1857863 1857878 1857924 1857938 @@ -4305,7 +3996,6 @@ 1936988 1936993 5141144 -5141163 5141177 5141179 5141185 @@ -4317,9 +4007,6 @@ 5141229 5141233 5141242 -5141254 -5803065 -1937474 1937490 10761559 1937556 @@ -4345,25 +4032,20 @@ 5141311 5141317 5141262 -1858531 1838691 1838905 1838911 4528692 4528694 -1833500 8546322 8574752 -1835031 1835098 -1835156 1835393 1835396 1837172 1838969 1839560 1839770 -1839851 1839893 5770922 5770942 @@ -4391,7 +4073,6 @@ 6133780 1801000 1801001 -1801051 1801073 1801080 1801084 @@ -4400,13 +4081,11 @@ 5114465 1801461 1801490 -1801503 10066605 10510325 1801896 4534779 4534782 -4534792 6112606 6112613 6112661 @@ -4428,14 +4107,11 @@ 1802827 1802919 1802939 -1803012 1803022 -1803025 1803035 1803039 1803065 1803073 -1803078 1803108 10942408 4534762 diff --git a/dev/releases/mambo_v3/presets/japan.classes b/dev/releases/mambo_v3/presets/japan.classes index 651b18b..b13bd10 100644 --- a/dev/releases/mambo_v3/presets/japan.classes +++ b/dev/releases/mambo_v3/presets/japan.classes @@ -1,19 +1,10 @@ 1992315 -1732565 1733154 -1733258 1733412 5101745 -1734453 -1734519 5102287 1832235 -1847097 -1847111 1847392 -5122013 -1850570 -1851543 1829659 8503184 1831458 @@ -23,12 +14,8 @@ 12199936 1759775 1760927 -1760970 1761353 1762151 -1763782 -1763812 -1763976 1764021 1764032 1764060 @@ -37,25 +24,14 @@ 1766570 11097510 5110232 -10820762 -1769103 1769410 1769772 -12148290 -1769897 1769901 6132967 1775148 -5110546 5110765 -5110769 -1777166 1777695 6132953 -4687991 -5111007 -5111044 -9610080 1780705 1780716 1783652 @@ -63,49 +39,31 @@ 6132974 1787009 10860091 -6132805 1788553 -6132936 -6132826 1788953 1789225 -1789604 -1790888 -1791010 1791698 1791715 5113082 -5113084 -5113330 5113352 -5113385 5884243 5113925 1796984 10600368 -1797258 1797259 1797299 1797479 -4532471 8756768 9332506 5113950 5884247 -1798346 1798449 -1798488 1787072 -1787079 1798700 -1798823 1798868 4301310 4532352 6133046 -1799417 -1799751 -6132825 10722110 1803148 1803824 @@ -121,12 +79,9 @@ 1813263 1814913 1814928 -5117400 1815260 1816299 1816362 -1817797 -1818413 8326103 1818991 4532293 @@ -135,24 +90,16 @@ 1819268 8407461 5118348 -7657803 1820372 1820406 1820450 9420824 -1821260 12037602 5884571 8897869 -4532516 -6133081 6133083 -12089608 -10270464 -9400545 6133292 11142432 -11962292 10399906 6133271 11232431 @@ -165,8 +112,6 @@ 9508913 1783898 1783906 -1781413 -1781421 9478424 6115388 1774583 @@ -174,20 +119,16 @@ 1774618 1774626 1774654 -4532508 1768461 5113036 5109796 1821934 1821940 6122364 -1783725 8237987 4687933 6116646 -1781531 1798329 -1784947 1785072 1765999 1786597 @@ -195,7 +136,6 @@ 6132915 6132916 1782310 -5108435 5112440 1860987 9883856 @@ -203,20 +143,11 @@ 1939520 1860261 1860274 -5123339 -5769164 -5880040 -5123489 1869706 -1870237 -1870249 4531402 1872848 -1872850 -1872901 1873079 5125569 -5125596 5125633 1874274 1874937 @@ -224,52 +155,32 @@ 1875830 1877038 6133441 -1748805 -1736358 1736499 -1736727 1736993 -1737015 -10842267 -1738192 -8086347 5102982 1740482 -1740524 1740797 -1741368 -5103451 -5103998 1743532 -1743856 1745952 1746775 -1746876 -5771229 1920851 1920996 10581870 1921150 1921163 -7346430 -1922244 8782891 5714680 1924044 -1924057 1924193 -1924298 1924713 4535172 1925918 -1926324 1926448 5883255 1927034 5883052 1927393 5882965 -1928248 5139050 1928849 1928908 @@ -280,52 +191,30 @@ 1931706 1931956 1932043 -1932159 -4708995 -7346444 1933844 -1752603 1752849 -1753215 5105547 5105560 -1753435 -11014495 1753636 5105588 -7345843 6133481 -1919340 -1919712 1919720 1919951 -5137808 5137832 -5137849 5805954 -5137861 1920496 5137889 5137908 5137912 5137949 1920711 -5137582 5803588 1920218 -1749596 -1731837 -1992547 11826016 1954496 -5143477 -1954891 -1956309 1956524 -1956536 1956629 6133593 -1957368 1957854 1958252 1958454 @@ -347,16 +236,10 @@ 1962265 1964024 6133500 -1964113 1964247 1964316 -8361848 -1965810 1965913 5144431 -5144534 -1967245 -1967445 1967595 1967815 1967873 @@ -368,43 +251,28 @@ 1968867 6133643 1970136 -7346252 5144677 -5144806 5145409 9194811 1972443 -1972613 1973338 5146434 -5146961 5147062 1975198 -8329661 1975805 1975806 1975892 -1975897 -1975903 1975964 1975979 9548993 1976212 1976213 1976311 -5147827 -5147834 -1977184 -1977297 5148115 1977833 -1978056 -1978065 1978422 4524636 4524638 -1979021 -1979473 1979781 1980521 1980811 @@ -413,16 +281,12 @@ 1981937 1981938 1982267 -1982865 -1983705 1985061 1985152 1985158 1985167 1985191 -1986009 1986052 -1986054 1986056 1986508 5149308 @@ -435,50 +299,35 @@ 5149414 1989428 1990050 -1990066 1991123 1991277 -1991371 1991378 1991783 -11635419 -5149929 5149986 6133619 5880539 9442902 -4524998 11828714 10574156 5880392 4524070 -6133670 -11548960 7345819 6133542 -6133498 7345829 5880478 6133540 -5146412 -5146342 5146379 -1991462 1942697 4689929 1943212 -1944619 5141924 1945066 1945225 1945227 1945694 1945878 -5142067 1946695 -1946738 7389824 -1947306 1947492 1947626 1947740 @@ -493,148 +342,84 @@ 7972792 1759620 1759667 -1759686 -10329023 1760593 1760939 1761438 1762680 -5109506 1764791 5109830 -5109843 -5109848 -5109872 5109882 -5109898 8352161 1766130 -1766131 -1766137 -1766646 -1766741 1767368 1767655 -5772186 5802396 -5883914 1768698 -1769095 -1769505 1769519 1769566 -1769958 -1770150 1770172 -1770477 4532696 1772179 6115946 1775962 1776067 -5110871 -5110885 -1778127 -5111535 5772222 -1779435 1781233 1781234 -1781694 1782168 1782177 1782457 1782543 -1782615 -1782627 1782672 1782726 1782757 -5112291 -5714973 5715004 -5772349 1784513 1784761 1785145 -1785162 -4532890 1785314 1785367 -1785887 -1785888 -1785895 -1786017 1786360 1786448 -1787213 -1787267 -1787504 -1787590 1788522 -1788846 1788856 1788917 -1789553 1789957 1790376 9174377 1791422 -1792292 -1792418 -1792996 -1793689 1795065 -1795068 4532908 1795957 -1796117 -1796169 4688172 -8105817 1797030 -4533431 6133007 -1798974 5113951 -1799701 1800004 1800032 1800149 -4534389 6544687 4532269 4533123 4534533 6132989 6132781 -5109385 -5772063 4534685 -4534686 -8108800 1771678 1771698 1771040 -1771214 1771245 5113853 -5108671 -5108705 5108737 5108761 5108787 5108794 -6132880 9243764 1759394 -4532208 4532266 -6115822 1767293 9325654 10458175 -1822490 1822610 1822613 1822787 @@ -655,7 +440,6 @@ 5118996 1827125 1827408 -1827484 4534869 9883140 5119181 @@ -666,7 +450,6 @@ 6133687 6133688 9921001 -5118837 5118841 9486293 1893266 @@ -675,9 +458,7 @@ 7712938 4535614 4535630 -1894840 4535827 -5128326 1895499 1895867 1895875 @@ -694,8 +475,6 @@ 1898544 5129378 5129417 -1898988 -1899950 1901399 1901832 5130464 @@ -716,27 +495,21 @@ 1909607 1909865 1911093 -1911168 -4299599 7428726 1913105 -1913328 5134682 5135026 5136681 5137085 1918411 1918467 -1918554 4535510 5130587 -5130682 5131096 5131142 5131293 5131339 5131585 -5132183 5806167 7642610 8138711 @@ -746,13 +519,11 @@ 1951412 1951462 1951507 -1951529 5142870 1951791 1952062 1952175 1952177 -1952229 5143007 5143080 1952449 @@ -761,10 +532,7 @@ 4702564 6544581 5141590 -1843602 1730948 -1872361 -1878626 1879379 1879408 1879471 @@ -772,7 +540,6 @@ 1880852 1880858 1880968 -1881121 1881151 1881329 1881336 @@ -780,15 +547,11 @@ 1882767 1882884 1882905 -10156181 1882930 -1883943 1884051 9294363 4532122 1884908 -4532146 -1885012 1885919 1886251 1886320 @@ -800,23 +563,16 @@ 1887701 1888027 1888092 -4531968 1888891 1888913 1889039 1889074 -1889239 1889277 -1889356 1889370 -1890031 -1890187 1890320 1890410 1890487 1891326 -1891339 -4532022 1891758 1892153 11056379 @@ -825,27 +581,15 @@ 4532125 6120803 6133232 -6121010 -10513366 -5126675 5126680 -1886374 1889765 5127592 -5127609 -5127656 5127669 5127688 -5802339 6121184 -1883885 -4532150 1831136 5122430 -1858698 9749806 -1860026 -1973467 1865659 1866356 1866568 @@ -854,7 +598,6 @@ 9983244 1867993 5124716 -1841946 10005133 1861456 1861488 @@ -877,7 +620,6 @@ 1862475 1862517 1862578 -1862837 1863034 5124029 1863829 @@ -886,11 +628,8 @@ 1864126 1864377 5124121 -5124143 11954157 -1864652 5124304 -5124305 5124332 5124348 5124415 @@ -899,11 +638,9 @@ 5885399 7346401 5123815 -5123876 5123890 1992883 6132711 -6132715 6132726 5143249 5105642 @@ -912,15 +649,11 @@ 1754933 1755237 1757853 -5108346 5108349 -1857380 -1857938 1858557 1937723 1937819 1937892 -1938052 1938058 1938088 1938114 @@ -930,15 +663,12 @@ 8225376 5141212 5141226 -5803065 -1937474 1937490 1937556 1938230 1938233 1938612 1938796 -1939056 1939168 8546322 1839560 @@ -951,24 +681,17 @@ 9544823 5114425 1800934 -6133780 1801080 1801084 1801490 -4534782 6112661 1802090 1802113 1802244 1802280 1802783 -1802939 1803022 1803065 -1803078 1803108 10942408 -4534767 6133803 -5114311 -8244266 diff --git a/dev/releases/mambo_v3/presets/mediterranean.classes b/dev/releases/mambo_v3/presets/mediterranean.classes index b51adcc..f379d7c 100644 --- a/dev/releases/mambo_v3/presets/mediterranean.classes +++ b/dev/releases/mambo_v3/presets/mediterranean.classes @@ -1,14 +1,10 @@ 1934693 1860628 -4522795 1860659 1860664 1860671 -1860688 -1860709 1860711 4522933 -5123582 1732063 1732072 1732416 @@ -58,30 +54,23 @@ 1847111 1847407 4528547 -1847572 9262981 1847956 9546514 1848150 1848202 -10450501 1848219 9868978 1848273 -1848356 -1848378 4528539 1848596 1848610 1848636 1848657 1848690 -1848714 1848741 1848864 1849104 -1849273 -1849294 1849477 11080751 1849531 @@ -93,7 +82,6 @@ 1850008 1850238 1850246 -11576787 1850335 1850497 1850506 @@ -110,7 +98,6 @@ 1851220 1851337 1851347 -1851555 5122206 4527972 1852150 @@ -118,16 +105,13 @@ 1852165 1852177 1852311 -1852430 11287091 4527957 1848920 1829533 -1829588 1829776 1829785 1829823 -1829974 4525354 1828637 6097236 @@ -152,12 +136,9 @@ 1830843 1830125 1830131 -1830147 1830152 1830191 -1830207 1830241 -1830243 1830271 4525476 4525487 @@ -166,7 +147,6 @@ 1841296 4528593 5880147 -9734171 11418741 11513018 11571523 @@ -185,7 +165,6 @@ 1777289 8141741 1777631 -1777695 1779399 1780149 1780150 @@ -231,7 +210,6 @@ 1799708 1803148 1803163 -1803824 1804071 1804906 1805110 @@ -241,7 +219,6 @@ 7874258 1807969 1808166 -1808195 1808440 1808450 1808752 @@ -299,7 +276,6 @@ 5115872 5115874 5116475 -8038357 8165185 6097254 5116698 @@ -311,7 +287,6 @@ 4532408 4532412 1780869 -1780897 8000103 4532534 1768626 @@ -330,7 +305,6 @@ 4532366 4532453 1820039 -4687389 1772822 1771772 1771779 @@ -344,17 +318,14 @@ 4522911 4522916 4522919 -4522922 4522886 4522890 4522891 -4522896 1860765 1860768 1860852 1860857 7767114 -7851302 7961640 1992378 1992504 @@ -362,7 +333,6 @@ 1852978 1835432 1835457 -9724183 1837420 1837429 8015612 @@ -370,14 +340,10 @@ 1840301 1840346 1840360 -1840371 1840380 -1840408 1840478 1840483 -1840520 1840555 -1840566 1840570 1840581 1840596 @@ -386,26 +352,19 @@ 1831752 1852751 1852831 -1852832 9473121 -4529630 5125075 5125104 8416348 1751236 1751298 -1751368 1751457 -4535884 1860408 -4525177 5123339 5123419 5769164 5123461 5123474 -1751207 -1751216 1869595 1869656 1869803 @@ -486,10 +445,8 @@ 1875940 1875952 1875958 -1876063 1876329 1876357 -1876409 1876512 1876542 1876623 @@ -520,7 +477,6 @@ 11728049 1877035 1872315 -1748805 1940158 4525859 4525884 @@ -529,7 +485,6 @@ 1940504 1940510 1940575 -1940639 1940644 1940717 1940744 @@ -550,22 +505,16 @@ 1736425 1736447 1736499 -1736528 1736560 -1736565 1736601 1736623 5102628 -5102642 -5102651 1736727 1736800 1736898 1736904 1736905 1736906 -1736945 -4530406 4529931 1737131 1737342 @@ -587,13 +536,11 @@ 1737776 1737847 1737893 -1737924 4530002 8186212 1738163 1738222 1738245 -1738317 1738337 1738373 1738422 @@ -603,26 +550,19 @@ 8869900 5102931 5102951 -1738687 1738700 1738722 -1738777 1738794 1738839 1738883 -8086347 -1739128 1739151 1739272 -1739284 1739290 1739337 1739377 1739381 5102982 -1739449 1739461 -1739471 1739605 1739748 1739797 @@ -632,17 +572,12 @@ 1739922 1739931 1739980 -1740005 -1740053 1740069 1740120 -1740155 1740174 -1740183 1740185 1740392 1740482 -1740518 1740533 1740567 1740623 @@ -651,7 +586,6 @@ 1741056 1741147 1741258 -1741340 1741341 1741368 4530151 @@ -659,7 +593,6 @@ 5103066 5771357 1741545 -1741551 10838422 1741590 1741593 @@ -668,22 +601,17 @@ 1741667 1741752 1741756 -1741765 4530424 1741820 -11093909 -1742142 1742185 1742346 5103451 5103502 5103613 -5103736 5103948 5771350 7975250 1743196 -8313553 5103998 7661023 11846897 @@ -695,8 +623,6 @@ 6097235 1743643 1743710 -4530214 -1743730 1743768 1743775 1743782 @@ -717,7 +643,6 @@ 1744526 1744588 1744593 -1744714 1744728 1744731 1744739 @@ -726,31 +651,21 @@ 1744789 1744808 1744810 -1744860 1744896 -1744901 -7964262 1745013 1745079 10844862 1745558 1745561 -1745579 1745600 -1745630 1745634 -1745636 1745643 1745659 -1745676 1745678 1745705 -1745724 -1745725 1745737 1745762 1745781 -1745816 1745827 1745830 1745925 @@ -760,7 +675,6 @@ 1746413 1746440 1746613 -1746644 1746666 1746689 1746775 @@ -771,15 +685,12 @@ 1747050 1747141 5104442 -1747738 4530138 5104558 1748203 1748321 5104597 6097234 -7588222 -9242559 1748456 1748720 5104641 @@ -791,17 +702,13 @@ 5103227 5771227 5771229 -5771230 5771232 -5771236 5771239 5771243 5771249 5771255 -5771258 5771259 1831780 -4525500 4525503 4525505 4525510 @@ -820,7 +727,6 @@ 1921590 7387466 1922197 -1922291 10384044 10442031 10854079 @@ -855,7 +761,6 @@ 1925381 1925410 1925454 -1925609 1925918 1925962 1926054 @@ -885,12 +790,10 @@ 1930904 1930916 4535106 -1931126 1931179 1931509 1931779 1931788 -1932172 1932393 1932411 1932473 @@ -980,35 +883,22 @@ 1748890 1748922 1748942 -1749050 1749070 1749449 -1749661 1749713 -1749744 1749869 1749921 1749929 1749936 -1749948 -1749954 -1749975 1750051 -1750076 1750131 -1750143 1750159 1750326 -5104829 -5104882 5104891 -5104903 5104940 -5105088 5105106 1751051 5104759 -1749596 1749635 8741260 1735532 @@ -1018,7 +908,6 @@ 1954490 1954563 5143380 -5143453 5143477 1955479 1955484 @@ -1114,7 +1003,6 @@ 1964191 1964195 1964401 -1964437 1964471 1964637 1964653 @@ -1128,7 +1016,6 @@ 1965345 1965640 1965763 -1965777 1965795 1965825 1965841 @@ -1224,7 +1111,6 @@ 5146496 5146510 5146525 -5146528 5146559 5146599 5146601 @@ -1308,7 +1194,6 @@ 8414310 8955497 5147794 -1976993 1977003 1977068 4523725 @@ -1339,7 +1224,6 @@ 1979308 1979430 1979473 -1979781 5148394 5148424 5148436 @@ -1378,7 +1262,6 @@ 1983052 1983062 1983101 -1983111 1983170 1983260 1983288 @@ -1388,7 +1271,6 @@ 1983525 1983528 1983548 -1983558 1983648 1983705 1983755 @@ -1402,7 +1284,6 @@ 1984033 1984117 7752082 -7993353 8015895 8262357 8394261 @@ -1474,7 +1355,6 @@ 1991846 1992066 8180900 -6133619 5880512 5880533 5880545 @@ -1507,10 +1387,8 @@ 4524822 4524712 4523522 -4522974 4524541 4523519 -4524070 4524072 4524403 4524793 @@ -1589,10 +1467,8 @@ 5142032 5142042 1869467 -1869478 1869512 5769709 -1735855 9530977 5109821 1758878 @@ -1612,7 +1488,6 @@ 1759667 1759668 1759673 -5108619 1760104 7444489 9060267 @@ -1635,7 +1510,6 @@ 1761865 1762244 1762383 -1762608 1762680 5109498 5109506 @@ -1650,7 +1524,6 @@ 8167743 1764174 1764673 -1764716 1764986 1764987 1765011 @@ -1666,7 +1539,6 @@ 4534275 5109843 5109855 -5109882 5109931 8352161 1765604 @@ -1713,7 +1585,6 @@ 7388922 7768584 8045644 -9356770 1768117 1768150 5110200 @@ -1744,7 +1615,6 @@ 1770416 1770477 1770530 -1770573 4532696 8393221 1771385 @@ -1760,14 +1630,11 @@ 1772956 1773062 1773163 -1773231 1773328 -1773377 1773484 1773572 8222049 1774272 -1774347 1774859 1774873 1774878 @@ -1840,7 +1707,6 @@ 1782927 1782948 1783016 -1783037 1783043 1783090 5112155 @@ -1867,7 +1733,6 @@ 1784826 1784853 4534290 -1785181 1785185 1785286 4532886 @@ -1893,7 +1758,6 @@ 1787213 1787267 1787279 -1787381 1787400 1787417 1787438 @@ -1905,7 +1769,6 @@ 1787751 1787770 1787825 -1787841 1787859 1787905 4534086 @@ -1960,9 +1823,7 @@ 4533115 8047343 9092175 -1790361 1790364 -9174377 1790625 1790671 1791384 @@ -1973,7 +1834,6 @@ 1792292 1792300 1792335 -1792377 1792379 1792383 1792411 @@ -2028,7 +1888,6 @@ 1796678 4533431 4533433 -4533442 4533446 1798372 11992983 @@ -2057,7 +1916,6 @@ 4532283 4532811 4534663 -4534669 4533273 4534540 8890502 @@ -2067,7 +1925,6 @@ 6544687 4534538 4534360 -4532269 4533125 4533128 4533136 @@ -2085,7 +1942,6 @@ 6116899 1774283 1774285 -1779334 5114198 1763072 5772063 @@ -2135,12 +1991,10 @@ 4532216 4532236 4532239 -4532253 4532260 4532264 4532266 8103163 -1767302 8363507 1822346 1822587 @@ -2205,11 +2059,9 @@ 1898290 4299368 4299370 -7346344 1898521 1898544 5129378 -1900565 1901850 5130464 5130542 @@ -2218,7 +2070,6 @@ 8140883 8189761 4535689 -5130814 6221746 1905383 1906552 @@ -2273,7 +2124,6 @@ 5134686 5134815 5134837 -5134884 5135191 5772948 7509928 @@ -2337,8 +2187,6 @@ 1896957 5131910 8138711 -1910628 -1902143 1902169 1902182 1899349 @@ -2372,9 +2220,7 @@ 1951725 1832853 1833096 -6097228 1853064 -1853079 4529248 5976910 1735193 @@ -2420,7 +2266,6 @@ 1879252 1879408 1879427 -1879443 1879452 1879471 5126212 @@ -2473,15 +2318,12 @@ 1883386 1883634 4531690 -1884212 4531708 -1884449 1884465 1884774 4532122 4532146 1884970 -1885764 1885931 1885937 1886084 @@ -2506,7 +2348,6 @@ 1888623 1888733 1888736 -1888743 1888759 1888826 1889287 @@ -2514,7 +2355,6 @@ 1889905 1889942 1890187 -1890335 1890346 1890487 1890522 @@ -2575,21 +2415,16 @@ 5126675 5126680 7446048 -8532380 8537359 8823068 8856895 8858121 9100030 9101339 -9137965 1889833 -5127656 1887108 1887173 1887177 -1887178 -4532057 4532088 4532095 4532097 @@ -2603,19 +2438,13 @@ 1846111 1846112 1846133 -1846141 -1846149 1846159 -1846210 -1846219 -1846236 1830879 1830937 1831002 1831009 1831128 1831136 -1831168 5122293 4526048 1854202 @@ -2633,25 +2462,19 @@ 1858698 1858762 1858775 -1858778 -1858873 1858930 1859046 1859177 1859285 -1859305 -1859932 1860026 1860063 4536472 -7642240 8200050 12046692 1973467 4525132 5123221 6097269 -5123042 5124512 1866356 1866556 @@ -2660,14 +2483,11 @@ 1867820 1867928 7764232 -5124716 7734292 1841460 -1841476 1841616 1841706 1841813 -1841821 1841946 1841989 1861494 @@ -2701,10 +2521,8 @@ 1993419 1939432 4525189 -1860108 5119506 5119513 -1830372 1830380 1830407 1830408 @@ -2715,12 +2533,10 @@ 4525425 7976145 1830534 -1830584 1830632 1830802 4525364 1754183 -5105642 1754332 5105929 5106115 @@ -2768,14 +2584,10 @@ 1856289 5122798 1856595 -1856620 -1856658 1856663 -1856668 1856686 1856701 1856730 -1856768 1856772 1856867 1857068 @@ -2783,19 +2595,15 @@ 1857577 1857581 1857626 -9790007 1857785 1857828 1857829 -1857863 1857878 1858074 1858113 1858163 1858283 1858321 -8178453 -1937723 1938050 1938069 1938131 @@ -2831,7 +2639,6 @@ 1835156 1835393 1835396 -1835407 1835422 1836899 1837172 @@ -2864,7 +2671,6 @@ 1803060 1803073 1803108 -9485481 4534762 4534767 4534769 diff --git a/dev/releases/mambo_v3/presets/middle_east.classes b/dev/releases/mambo_v3/presets/middle_east.classes index a9a3860..0b54d16 100644 --- a/dev/releases/mambo_v3/presets/middle_east.classes +++ b/dev/releases/mambo_v3/presets/middle_east.classes @@ -1,32 +1,17 @@ 1934693 -4522933 1732115 -1732452 -1732565 -1732662 1733484 -5101678 -5101717 5101745 5769191 1734690 1734704 -5102287 1831890 1845270 -1845368 1845548 -1845607 4528100 -1847097 9546514 1848219 9868978 -1848378 -1848690 -1849477 -11052757 -1850640 1850781 1852165 11287091 @@ -36,24 +21,13 @@ 1845962 1839094 1841261 -1830131 -1830191 1831458 -1841296 -1761111 -1762151 1764531 -1766584 -6116699 1769103 1769897 7701550 -8837162 -1772352 4532500 5110490 -1777289 -1777631 1779399 1783882 1786980 @@ -61,17 +35,12 @@ 1788553 1790692 1790816 -1791715 -5113078 5113084 -5113234 -1792210 1797178 1797258 1797276 1797333 1797349 -1797367 1797429 1797454 1797479 @@ -79,151 +48,92 @@ 4532461 4532473 8016905 -8756768 -6117055 1798346 1798408 -4532493 -1798449 1798481 1798504 1798802 -1798807 -4532351 4532352 1803148 1803163 1804071 1805111 -7874258 1807969 1808166 1808195 -1808381 1808440 1808450 1808752 5115701 5115771 -5115777 -1809210 1810099 -1813114 -5117200 7656811 1814538 1814653 -1814913 -1814928 5117400 -1816881 -1817797 1819050 1819145 8407461 -1819928 6122092 1820372 1820406 -1820477 12253343 5884571 -7596232 6097214 4532544 4532516 4532532 -4532565 12089608 10062933 8148822 -11962292 -10399906 6112449 -12135372 5115874 -5116475 -6097254 5116698 1788635 4532412 8000103 4532534 -6115388 -1774600 -1768626 4532508 1760246 -5113030 1821547 -1821856 -1819337 1804182 -1815315 1812394 8237987 -4687933 4532453 1820039 4687389 1772822 1777517 1860987 -1860994 -1861031 4522890 1860765 -1860857 -1992504 -1840371 -1840581 1831752 -1852832 5125075 5123339 5123419 -5123461 5123474 -1869595 -1869976 -1870249 -1870250 1870450 -1870650 5125306 1871212 -1871252 1871407 4531402 4531409 1871451 1871783 4531427 -7673242 1872848 1872901 1873051 1873079 1873215 -4530951 -1873783 4531237 -1873890 5125689 -1874168 -1874269 1874280 -4531147 -1875008 1875120 -1875409 -1875687 1875827 -1875869 1875918 1875958 1876329 -1876512 1876542 1877345 9111961 @@ -232,82 +142,36 @@ 1877988 1878067 4531417 -1878350 1878470 -1878471 -1878490 -1878500 5884888 -1871504 4525884 -5141493 -1940510 1940644 1940717 1940744 4525777 4525803 -1940838 -4525846 12211069 1939879 -1736601 1736623 1737368 -1737413 -1737437 -1737491 -1737497 -1737524 1737526 -1737775 1737776 1737847 8186212 -1738373 -1738422 -5102931 -5102951 -1739151 -1739748 1739833 -1739922 -1740120 1740623 8094357 -1740797 -1741056 -1741258 1741341 -4530151 1742185 -8313553 11846897 -1743532 -6097235 -1743768 1743898 -4530632 1744526 -1745013 -1745561 -1745630 -1745781 -1745925 -1746413 -1746440 -1746666 1746832 -1746876 5104442 5104597 -1831780 -4525510 1920851 1920864 -1920892 1921044 -7346426 10581870 10825466 1921150 @@ -326,20 +190,16 @@ 1922584 4535092 1922689 -1922701 1923019 5138298 5138543 -5138561 5714680 1923650 1924077 1924097 5138681 10656713 -1924390 1924713 -1925221 1925233 1925381 1925454 @@ -348,12 +208,9 @@ 1925962 9816676 1926324 -1926436 1926448 -1926530 1926546 1926550 -10606547 1926722 1926861 5882965 @@ -374,14 +231,12 @@ 1930110 1930904 1930916 -1930935 4535106 1931179 1931509 1931779 1932166 1932172 -4708995 1932411 1932752 1932976 @@ -404,15 +259,12 @@ 1933095 1933138 1924494 -4522322 5105339 1919181 -1919213 1919221 1919223 1919320 1919333 -1919340 1919346 1919348 1919706 @@ -427,8 +279,6 @@ 1920259 5137790 5137849 -5137850 -1920348 1920349 1920356 1920357 @@ -436,8 +286,6 @@ 1920369 1920374 1920395 -1920401 -1920405 1920491 1920496 1920502 @@ -460,214 +308,118 @@ 8203812 1920218 7207679 -1750326 1954490 1954563 5143380 5143651 -1955552 1955694 1955856 -5143675 1956440 -1956524 4525068 1957266 1957300 -1957570 1957572 1957579 1957583 1957611 -1957706 1957718 -1957746 -1957791 -1957816 1957852 -4524421 -4524424 -1958323 -1958515 -1959383 1959395 1959461 1959682 -1959735 -1959914 1960002 1960484 1960617 1961013 -1961037 -1961040 -1962204 -1962265 1962268 -1962516 -1962584 1962636 -1962860 4302252 1963168 1963306 -1963709 1963710 -1964189 -1964191 -1964195 1964471 1964637 -1964653 1965197 -1965208 -1965841 1965913 -5144534 1967003 1967006 1967011 -5144543 1967265 -1967815 1967873 -7681733 -1968837 -1968867 11598540 1968990 1969463 -1969581 -1970213 -1970227 -1970243 5144677 -5144721 5144782 -5144787 5144805 5144880 5144900 5145186 5145255 -5145260 5145502 5145522 -5145624 8014296 1971847 -1972185 -1972250 -1972342 -1972449 5146476 5146599 5146601 -5146611 5146677 5146762 5146833 5146837 5146894 -5146946 5147030 5147043 -5147058 5147062 5147150 5147171 -5147208 5147232 -5147319 5147354 5147415 5147441 -5147478 -5147492 5147516 8366158 -1975546 -8329661 -8160782 -1975892 -1975897 5147681 1977068 -4523725 1977962 -4524636 4524638 -1978776 -5148436 -5148487 1980521 1981998 -1982500 -1982541 -1982790 -1983034 -1983052 -1983393 1983525 -1983648 1984033 -1984117 1984734 1984942 -1985167 1985573 1985760 1986157 -1986171 -1986220 -1986508 -1986575 -5768880 9137631 -6118530 1987744 4524221 1989428 1990582 5149474 -1991179 1991371 -5149843 1992066 -5880533 -5880545 5880550 -5880563 -5769062 7429212 9414984 1989594 -7990739 -4524054 -4523461 4524998 4525034 4524376 4524712 4523522 4523519 -4524403 -4524951 4525078 9220953 9249651 5149659 -5149665 5149768 -5149784 5149787 7443518 1942769 -1942790 4689929 5141677 -1943212 -1943223 1943236 1943397 8178854 @@ -675,10 +427,7 @@ 8073674 8273661 1944504 -1945225 -1945535 1945569 -1945571 1945589 1945605 1945877 @@ -687,11 +436,7 @@ 1946695 7389824 1947117 -1947335 -1947492 1948941 -1949015 -1949404 5142338 5142352 1949784 @@ -699,58 +444,37 @@ 1949850 1949877 1949929 -5142394 5142599 8109173 -1950013 1950156 5977247 8270406 7633472 4535396 5142032 -1758878 -1759069 1759079 1759083 1759153 -1759159 -1759667 -5108636 -1760104 -7444489 1760593 1794361 1760857 1760891 4533255 -1761392 1761438 1761735 -1761865 -1762383 -6132957 1762680 -5109498 -5109506 -5109599 5109646 5109661 -1763610 1764174 -1765011 1765017 -1765044 4534245 4534252 5109843 5109855 -5109882 5109931 8352161 1765767 1765954 -1766130 1766137 1766210 1766646 @@ -765,151 +489,78 @@ 5772186 5772199 5772206 -7768584 1768117 -5110200 5110213 -1768815 1769057 -1769566 1770353 1770477 -1770530 4532696 -1771509 1772013 -1772956 8222049 -1774470 -1774859 -4534052 -5883881 -5110670 -1776330 1776619 -1776862 1777253 5110818 -5110885 1778074 5111481 -5111501 5111513 -5111574 5772222 -1779258 1779641 1780378 -1781016 4533325 -1782543 1782560 -1782579 1782672 1782726 -1782727 -1782763 -1782777 1782948 -1783016 1783043 5112283 -5112291 -5112345 5714973 5772349 1783971 1784349 -1784359 1784853 1785185 -1785286 4532890 1785361 -1785888 1786360 1786619 1786664 -1786902 1787064 -1787112 1787279 -1787590 1787610 -1787751 -1787770 1787825 -1787841 -4534086 1788522 -9216200 4534011 1789071 1789076 1789086 4534166 -1789694 1789695 1789730 1789745 1789753 1789755 -1789785 -1789982 -1790002 -1790062 -1790072 1790153 4533115 -1790364 -1790625 -1791422 1792061 -1792300 1792418 -1792426 1792768 -5113370 1792996 7918000 -1793877 -1794534 1795068 -4532908 1795215 7922810 -1795854 1795900 -1796145 1796169 -7780930 4532700 -1796423 1796451 -1796463 -8105817 -11992983 -1798916 -1798971 -1798974 -1800004 6097260 -8742426 -9069966 -10638451 4532811 -8890502 -4533202 4534538 4533125 5883985 8021109 -11478679 -5110644 7654770 6116899 -1774285 -1779334 5114198 1763072 5772063 @@ -917,13 +568,10 @@ 4534675 4534681 4534683 -4534686 8108800 1771650 -1771698 1770772 1770821 -1770880 1771040 1771245 4533714 @@ -933,39 +581,24 @@ 5772309 5108660 5108761 -1773904 -4533347 4532203 4532206 -4532216 4532236 -4532239 4532260 4532266 -1767302 8363507 -1822346 1822610 1822796 -1822830 1823726 1824113 1824117 -1824131 -1824751 -1825064 1825077 4534909 4534914 1825156 5118904 -7624468 -1825539 5118996 -5119193 5119245 -1827645 -4534872 1892554 1892555 5806166 @@ -979,54 +612,32 @@ 8049830 10639484 1894840 -4535827 4535809 1896915 -1897834 1898286 4299368 5129293 7346344 -1898434 1898521 1898544 -1898988 1899071 -1901404 -1901463 1901850 -11546465 -5130335 5130392 -5130444 5130464 5130471 -5130521 5130542 -1902749 8140883 8189761 4535689 -5130814 6221746 1905383 1906552 8208583 -1907620 -1907637 -1907687 4535754 5881946 -7976131 -1908352 -7346301 10656625 1909398 -1909607 -1909810 1909838 -1909865 -1911278 1911298 1911300 1911461 @@ -1041,7 +652,6 @@ 4299535 5133990 5772890 -10097687 4535581 5134098 5134301 @@ -1057,8 +667,6 @@ 1916376 1916410 1916412 -7854318 -1918394 1918497 1918667 1918736 @@ -1072,14 +680,9 @@ 4535620 4535510 5130587 -5130682 7762841 5131096 -5131142 -5131520 -5131540 8001799 -5806167 7642610 5135513 5135546 @@ -1088,8 +691,6 @@ 9087922 8138711 1910628 -1910629 -1902143 1899349 1899433 1899818 @@ -1097,166 +698,103 @@ 7934873 8168644 8393082 -1951557 5142870 1952062 -1952229 -5143048 -1952806 1952816 1941864 -5120577 1842097 -1842485 -1842508 4301036 -1843602 8292351 5101394 1730978 1731263 1731598 -1872368 1878862 1878895 1878904 -4531517 1879001 1879227 1879408 -1879443 1879452 1879471 -1879731 -1879735 1879765 -1879970 -1880064 -1880140 -1880143 1880907 1880931 -4531643 -1881089 1881126 1881151 9819403 1881362 1882210 -1882884 1882965 1883067 1883386 -1883634 1884465 -1884479 1884774 -4532122 -1885764 -1885826 1885937 1886084 1886088 1886251 -8223165 -1886579 1886587 -1886729 7562564 -1886951 -1887054 4531670 -1887701 -4531968 1888346 10922411 1888484 -1888491 1888579 1888619 1888759 1889287 1890187 1890320 -1890335 1890534 1890576 1890670 -1890679 1890772 1890776 1890898 -1891013 1891129 1891167 1891177 1891190 1891217 1891326 -1891366 1891386 1891494 4532022 4532024 -8411753 1892242 1892245 1892476 9674732 1884255 -1884370 1884403 -5884851 5771877 6133232 5126680 -8537359 -8858121 -9100030 1889833 5127656 -1887177 -4532095 6121184 -1883885 4532150 4532160 5771880 1831136 -1854202 -5122439 1854615 -4526050 -7717983 1858674 -1858930 1859046 -1860026 1973467 5123221 -1865660 -1866356 -1866568 1867928 -7764232 -1841460 -5120278 -1841813 -1841946 1861494 1861510 1861644 1861673 1861797 1861842 -1861862 1862293 1862401 1862517 -1862578 1862580 1862692 -1862701 1862719 1862765 1862774 @@ -1264,67 +802,45 @@ 5124007 1864161 1864358 -1864377 -5124143 -5124233 1864652 1993419 -1830380 -1830408 5106115 5106249 5107076 5107219 7410701 7674502 -7778368 7903078 8201251 8426357 4522753 -1829322 1856289 5122798 -1856701 -1857577 1857581 1857626 1857829 -1858163 1858283 -8178453 -1937723 -1938052 1938069 -1938088 1938125 1938131 8225376 1936969 -1937570 1938214 1938520 1938810 -1939215 5141262 5141291 5141305 -1838911 1835031 5770913 1841159 -4529032 5114409 4534796 -4534798 1801051 -4534773 4534776 4534779 4534788 9894093 1802280 1803060 -1803073 -9485481 4534769 diff --git a/dev/releases/mambo_v3/presets/north_america.classes b/dev/releases/mambo_v3/presets/north_america.classes index ff6f61b..51167da 100644 --- a/dev/releases/mambo_v3/presets/north_america.classes +++ b/dev/releases/mambo_v3/presets/north_america.classes @@ -5,15 +5,12 @@ 5140980 1936378 1936388 -5141085 10331171 1868535 10100176 10517417 1992315 1860664 -1860711 -5123582 1860736 5101556 5101559 @@ -45,7 +42,6 @@ 1845513 1845604 1845605 -4528100 1846313 1846351 1846439 @@ -105,7 +101,6 @@ 1850184 1850225 1850321 -1850450 1850575 1850585 1850589 @@ -126,7 +121,6 @@ 1850923 1850962 1850971 -1851000 1851002 1851011 8986624 @@ -186,13 +180,11 @@ 5119890 1830843 1830125 -1830131 1830137 1830191 1830194 1830202 1830203 -1830221 1830229 1830241 1830243 @@ -223,7 +215,6 @@ 8379616 9354496 9546910 -1763156 1763163 1763184 1763199 @@ -232,7 +223,6 @@ 1764525 1765097 1765182 -8028211 5110044 1766839 1766845 @@ -288,7 +278,6 @@ 1774907 9287097 1775980 -1776163 1777024 1777034 1777052 @@ -329,7 +318,6 @@ 1785913 1785916 9520799 -1786217 1786219 1786247 7480993 @@ -388,10 +376,8 @@ 5112968 5112990 1791372 -1791698 1792276 9382044 -1792827 1792831 1793566 1794518 @@ -471,7 +457,6 @@ 9618068 9622725 5113950 -6117124 7598729 1798393 1798402 @@ -519,7 +504,6 @@ 1804409 1804512 1804513 -1804522 5115046 1804759 11508076 @@ -580,12 +564,9 @@ 5116128 5116134 5116145 -5116198 5116293 1810743 -1810824 1810846 -1810866 9389851 7535515 1811019 @@ -604,7 +585,6 @@ 1814357 1814359 1814365 -1814665 1814800 1814827 1814838 @@ -629,7 +609,6 @@ 11725616 1817864 1817940 -1818252 5118046 11758730 1818454 @@ -677,7 +656,6 @@ 9555094 9599150 10214972 -10830546 10851228 12194283 5115854 @@ -745,7 +723,6 @@ 8968321 9451320 1820039 -1781531 1784959 1785024 1785072 @@ -757,7 +734,6 @@ 1780646 1780668 1780676 -4301309 1777463 1777471 5112440 @@ -792,7 +768,6 @@ 1840346 1840360 1840379 -1840408 1840441 1840448 1840485 @@ -806,7 +781,6 @@ 1841091 10187154 1831752 -1852832 9473121 1852901 9851261 @@ -903,7 +877,6 @@ 1874279 4531145 1874317 -1874375 1874513 1874552 10244305 @@ -951,12 +924,10 @@ 1878158 1878370 1878392 -1878470 1878490 5976937 5884888 1875885 -5125525 1873697 5143284 5143285 @@ -994,7 +965,6 @@ 9930604 10402067 1941310 -1941377 1941437 10495733 10584071 @@ -1036,7 +1006,6 @@ 1736939 1736995 1737015 -4529931 1737072 1737131 1737231 @@ -1055,7 +1024,6 @@ 1737753 1737768 1737847 -1737893 1737904 1737929 1737964 @@ -1104,7 +1072,6 @@ 1739727 1739767 1739770 -1739797 1739833 1739867 1739884 @@ -1160,7 +1127,6 @@ 1741824 1741826 9880932 -11093909 1742081 1742089 1742091 @@ -1240,7 +1206,6 @@ 12276630 9860684 9953708 -1744593 1744700 1744709 1744724 @@ -1252,7 +1217,6 @@ 1745558 1745606 1745634 -1745659 1745666 1745669 1745675 @@ -1269,7 +1233,6 @@ 10593489 1746068 1746586 -1746613 1746666 1746695 1746751 @@ -1278,7 +1241,6 @@ 1746774 1746775 1746831 -1746832 1746856 1746859 1746876 @@ -1319,7 +1281,6 @@ 1747523 1747738 1747740 -4530138 1748109 1748148 1748149 @@ -1393,7 +1354,6 @@ 8913017 1923678 1923679 -1923997 1924050 1924106 1924176 @@ -1473,7 +1433,6 @@ 5714618 1929772 1929962 -1929966 1930079 1930146 1930167 @@ -1490,7 +1449,6 @@ 1930391 1930410 1930422 -1930451 1930481 1930563 1930581 @@ -1535,7 +1493,6 @@ 5140054 5140063 1933260 -1933583 1933998 1935853 1935872 @@ -1545,15 +1502,12 @@ 1935899 1935904 1935912 -1935925 1935931 1935935 5139928 4300268 9469139 9975698 -1751980 -1752034 1752109 1752111 9776414 @@ -1573,16 +1527,12 @@ 5105367 5105369 5105376 -5105379 -5105380 5105447 5105469 5105491 5105508 11014495 -1753603 1753604 -1753661 1753668 5105588 1753833 @@ -1605,11 +1555,9 @@ 1919128 1919130 1919145 -1919146 1919149 1919173 1919235 -1919239 1919245 1919282 1919289 @@ -1620,14 +1568,12 @@ 1919328 1919338 1919646 -1919649 1919652 1919653 1919656 4701298 4701336 7661785 -5137553 1919700 1919701 1919702 @@ -1701,7 +1647,6 @@ 5105031 5105057 5105068 -5105088 5105120 5105124 9942354 @@ -1723,7 +1668,6 @@ 1955497 1955498 5143657 -5143675 5143703 1956098 1956099 @@ -1758,11 +1702,9 @@ 1960090 1960166 1960255 -1960315 1960503 1960632 1960951 -1961155 4302240 9468667 1961361 @@ -1771,9 +1713,7 @@ 10650351 1962051 1962076 -1962086 1962118 -1962120 9368382 9592714 5144227 @@ -2021,7 +1961,6 @@ 1982951 1983260 1983263 -1983288 1983434 1983441 1983491 @@ -2071,7 +2010,6 @@ 1986040 1986091 1986113 -1986166 1986171 1986192 1986367 @@ -2122,7 +2060,6 @@ 12010643 12225687 5880539 -5880550 5880552 5880559 5880563 @@ -2272,7 +2209,6 @@ 1943830 1943832 1943901 -1943936 12198522 12233808 1943942 @@ -2328,7 +2264,6 @@ 1946500 1946509 4302101 -1946520 1946544 1946550 1946577 @@ -2352,9 +2287,7 @@ 1946992 1946995 1946999 -1947021 1947037 -1947048 1947055 1947147 1947282 @@ -2362,7 +2295,6 @@ 1947335 5142166 5142175 -5142176 1947402 1947507 1947568 @@ -2596,7 +2528,6 @@ 1766205 1766210 1766237 -1766285 1766287 1766392 1766410 @@ -2648,7 +2579,6 @@ 1770461 1770659 1771441 -1771531 1771872 1771997 1772013 @@ -2730,7 +2660,6 @@ 1775866 1775970 1776167 -1776330 5110723 5110728 5110752 @@ -2784,7 +2713,6 @@ 5111076 5111139 5111141 -5111195 5111343 5111360 5111372 @@ -2929,7 +2857,6 @@ 1785185 1785280 9633615 -1785314 1785331 1785399 1785403 @@ -2950,7 +2877,6 @@ 1785992 1785997 1786007 -8292872 1786035 1786036 1786308 @@ -3079,13 +3005,11 @@ 1796181 1796188 4534486 -7438067 9377268 9541908 1796217 1796274 1796276 -4688172 7689966 7882824 8405656 @@ -3209,7 +3133,6 @@ 9602019 9634575 11922580 -4534038 9406822 9432810 4534533 @@ -3393,11 +3316,9 @@ 5882039 1894329 1894342 -7712938 1894896 4535827 1895138 -1895176 1895185 1895203 5128232 @@ -3413,7 +3334,6 @@ 8763986 1895886 1895904 -1896087 5128475 5128488 5128491 @@ -3427,7 +3347,6 @@ 11701883 5925238 8367663 -1897977 1897990 10073321 10365587 @@ -3485,7 +3404,6 @@ 1900249 1900485 1900618 -1900626 1900830 1900872 9190731 @@ -3526,13 +3444,10 @@ 1902704 4299218 1902880 -1903028 1903607 1903658 1903683 -5131597 5131608 -5131637 1904382 7776011 5131951 @@ -3565,7 +3480,6 @@ 1908204 1908207 1908256 -1908258 1908302 5133035 10542548 @@ -3602,7 +3516,6 @@ 1912003 1912036 1912119 -5133736 1912428 4299535 4299565 @@ -3651,7 +3564,6 @@ 1915417 1915427 1915430 -1915456 1915469 1915470 1915487 @@ -3663,7 +3575,6 @@ 1917830 1918082 1918094 -1918097 10250149 1918269 1918280 @@ -3671,7 +3582,6 @@ 1918395 4299802 4299804 -1918596 1918964 1918968 1918972 @@ -3711,7 +3621,6 @@ 5132940 5132956 5132973 -5133008 5133009 9964857 1951448 @@ -3730,8 +3639,6 @@ 1853064 4529248 1868334 -1868360 -5125118 10597291 5102424 1941717 @@ -3750,11 +3657,9 @@ 4529738 5120453 1843444 -1843602 10327658 10619048 5101371 -5101374 10304313 10607329 11484123 @@ -3775,7 +3680,6 @@ 1878810 1878837 1878879 -1878895 1878937 1878958 1879052 @@ -3825,20 +3729,17 @@ 1880411 4302319 1880505 -1880623 5126663 10861282 11968849 1881079 1881094 1881111 -1881122 1881139 1881151 1881166 9819403 4531687 -1881404 5126697 5126718 5126721 @@ -3852,7 +3753,6 @@ 1882089 1882190 1882195 -1882210 1882218 1882253 1882316 @@ -4004,7 +3904,6 @@ 1890622 1890629 1890654 -1890670 1890730 1890737 1890783 @@ -4030,7 +3929,6 @@ 1891488 1891493 10310835 -1891636 1891755 9884308 1891932 @@ -4062,7 +3960,6 @@ 8425580 6120803 6121218 -6133154 8876855 10106345 10432184 @@ -4107,7 +4004,6 @@ 1853312 1854143 1854202 -11773446 7946946 5880063 12239445 @@ -4188,12 +4084,10 @@ 1866336 1866338 1866341 -1866356 1866496 1866550 1866570 1866601 -1866838 1866902 1867021 1867022 @@ -4235,16 +4129,12 @@ 1862078 1862087 1862088 -1862091 -1862094 1862123 1862129 1862139 -1862163 1862181 1862198 1862207 -5123701 1862363 1862401 1862475 @@ -4266,9 +4156,6 @@ 1863080 1863088 5123775 -1863109 -1863151 -5123784 7803585 1863366 1863405 @@ -4279,7 +4166,6 @@ 1863584 5124049 1863699 -1863701 1863706 1863714 1863732 @@ -4322,13 +4208,11 @@ 5124443 5124448 5124450 -5124452 5123954 5123956 5123968 5123971 5123979 -5123980 5123983 5123991 5123999 @@ -4342,7 +4226,6 @@ 1864021 1864046 1864070 -1864084 1864090 1864098 1992573 @@ -4367,7 +4250,6 @@ 1830442 1830457 4525369 -4525420 1754270 5105642 5105649 @@ -4380,7 +4262,6 @@ 10604375 1953124 1751497 -1751524 1751557 1751572 1751575 @@ -4394,7 +4275,6 @@ 1751690 5105217 5105218 -5105227 1829287 1829363 1854920 @@ -4417,7 +4297,6 @@ 10055273 1856005 1856581 -1856668 1856686 1856701 1856720 @@ -4426,12 +4305,10 @@ 1857143 1857258 1857380 -1857577 1857626 1857809 1857828 1857829 -1857840 1857856 1857863 1857918 @@ -4439,7 +4316,6 @@ 1857938 1857945 1857973 -1858100 1858163 5122876 5122969 @@ -4464,7 +4340,6 @@ 1938016 1938022 1938059 -1938069 1938081 1938104 1938112 @@ -4535,7 +4410,6 @@ 5114435 5114436 5114439 -1801896 9313634 9385576 9454291 diff --git a/dev/releases/mambo_v3/presets/oceania.classes b/dev/releases/mambo_v3/presets/oceania.classes index b4e8769..0f5256a 100644 --- a/dev/releases/mambo_v3/presets/oceania.classes +++ b/dev/releases/mambo_v3/presets/oceania.classes @@ -136,7 +136,6 @@ 9851221 9985020 6132868 -1760970 1761572 1761573 1761751 @@ -151,7 +150,6 @@ 1763957 1763976 1763994 -1764043 1764060 5109782 5109784 @@ -164,8 +162,6 @@ 10647358 1766558 1766560 -1766570 -6116699 1767215 10340332 1772543 @@ -179,7 +175,6 @@ 11609422 4687991 5110981 -5110993 10403441 9610080 1779671 @@ -227,15 +222,12 @@ 5112940 1791379 1791514 -1791698 1791715 -5113352 9504222 9860902 10267570 1795657 10573746 -5113925 1796984 10108671 1797039 @@ -285,7 +277,6 @@ 1805524 1805806 1806704 -1806814 1806871 1807473 1807477 @@ -316,7 +307,6 @@ 1812465 1812658 1814913 -1814928 10074808 1815338 1816029 @@ -345,7 +335,6 @@ 10270464 9473918 9559336 -10062933 12180031 12203022 12216332 @@ -363,7 +352,6 @@ 8363709 10178326 10469564 -8874633 9621271 5116504 1818216 @@ -376,10 +364,8 @@ 1816634 1816648 1816673 -6133297 1774598 1774604 -1774618 1774654 1774691 1774712 @@ -409,7 +395,6 @@ 4687933 4687934 4687935 -6116646 1820137 1799821 1781531 @@ -421,7 +406,6 @@ 1766007 10330198 10598038 -11513188 11612469 1786597 4687389 @@ -535,8 +519,6 @@ 9858922 1873773 1873843 -1873890 -5125569 5125591 5125600 5125602 @@ -558,7 +540,6 @@ 1877406 1877453 5125943 -1877941 1877988 1878173 1878406 @@ -581,7 +562,6 @@ 1836906 1836907 1940575 -1941294 1736623 5102683 1736995 @@ -715,7 +695,6 @@ 5139050 1928382 1928829 -1928849 1928915 4709030 1928923 @@ -728,10 +707,8 @@ 1931943 1931956 1931958 -1931979 4709051 1932159 -1932166 1932172 1932206 1932246 @@ -783,7 +760,6 @@ 1919744 1919758 5137808 -5137819 5137828 5137832 5137833 @@ -797,7 +773,6 @@ 1920538 1920541 5137929 -5137946 5137949 1920621 1749124 @@ -1173,8 +1148,6 @@ 1990255 1990256 1990371 -1990998 -1991310 1991394 1991468 10155932 @@ -1182,7 +1155,6 @@ 5149880 5149940 5149941 -5149986 1992167 5880539 9577234 @@ -1249,7 +1221,6 @@ 1945863 1945893 5142067 -1946695 1946720 1946737 1946763 @@ -1294,7 +1265,6 @@ 1767430 10575632 10597823 -5772169 5802396 5883925 9356770 @@ -1342,7 +1312,6 @@ 5111249 5111535 5111600 -5772222 1779269 1779276 1779382 @@ -1381,7 +1350,6 @@ 1787226 4687681 10161728 -1788856 1789637 1789957 4687906 @@ -1443,7 +1411,6 @@ 1771245 1771296 1771308 -1765751 1765752 5113853 5108665 @@ -1462,7 +1429,6 @@ 6115820 6115822 6115830 -8103163 9893740 1782277 1781248 @@ -1480,7 +1446,6 @@ 1824280 1826020 1825238 -1825336 1825950 1825956 1826017 @@ -1494,11 +1459,9 @@ 1827829 10194663 10551923 -9921001 5127748 5806166 1892821 -1893241 1893660 1893699 1893787 @@ -1509,11 +1472,9 @@ 5128225 1895448 1895956 -1895992 1896304 11701883 5129266 -4299370 5714367 5806175 5806176 @@ -1533,7 +1494,6 @@ 1900872 1900939 1901669 -5130369 5130439 5130456 5130464 @@ -1578,7 +1538,6 @@ 5137085 5137128 5137257 -5137330 9251096 4704316 4704500 @@ -1595,7 +1554,6 @@ 1910662 1951492 1951874 -1952857 1853190 10548683 1735168 @@ -1627,7 +1585,6 @@ 5120396 1842508 11854390 -4529738 9755262 1843429 1843485 @@ -1793,13 +1750,11 @@ 1885919 1885945 1886088 -1886241 1886251 1886362 1886526 10610809 1886720 -1886726 1886729 10613467 1887036 @@ -1846,7 +1801,6 @@ 1891299 10071588 1891308 -1891339 1891533 1891583 10072800 @@ -1876,13 +1830,11 @@ 6133154 10462708 6133158 -8876855 10063575 10375403 1886374 1889769 1889833 -1889850 1889875 5127592 5127595 @@ -1928,10 +1880,7 @@ 5122455 5806333 1854906 -1858615 -1858637 1858674 -1858698 1858718 1858762 1858930 @@ -1941,7 +1890,6 @@ 9768621 9590272 9801765 -9760511 1859453 9675743 9749806 @@ -1957,7 +1905,6 @@ 1867788 10883659 1868025 -5124716 7734292 10019169 1861451 @@ -1976,7 +1923,6 @@ 1862331 1862363 1862370 -1862394 1862401 1862403 1862414 @@ -1986,7 +1932,6 @@ 1862449 1862455 1862475 -1862481 1862516 1862521 1862526 @@ -2006,10 +1951,7 @@ 11954157 5124332 5124423 -6106759 -5123837 5123852 -8810912 1992634 9893936 1992889 @@ -2019,12 +1961,9 @@ 1992976 1993021 1993045 -1993496 6133769 10022517 1953217 -6132712 -1953423 10132811 10644798 11503857 @@ -2080,10 +2019,8 @@ 1858488 1858523 1858526 -1858557 1856891 1856893 -1937665 1937698 1937712 1937745 @@ -2325,7 +2262,6 @@ 1802998 1803014 1803021 -1803022 1803035 1803039 1803078 diff --git a/dev/releases/mambo_v3/presets/south_america.classes b/dev/releases/mambo_v3/presets/south_america.classes index 9cd4725..2d90d1d 100644 --- a/dev/releases/mambo_v3/presets/south_america.classes +++ b/dev/releases/mambo_v3/presets/south_america.classes @@ -33,33 +33,20 @@ 10331171 9620499 10075196 -1868535 -10517417 1868575 -1992315 1732901 -1845314 1845385 -4528100 -1846849 1850798 -1852320 5110390 5108951 -1761838 8331687 -8379616 -9354496 1763156 1763163 1763184 1763199 1763223 1763256 -1765182 8028211 -5110044 -1766880 1767307 1767499 1768283 @@ -70,20 +57,14 @@ 5110327 5110533 1776163 -1777034 1777052 -1777075 1777179 1777737 1777942 5110891 9610080 -1779740 1781029 9630748 -1781944 -1781946 -5112080 1782211 8384839 1786217 @@ -106,32 +87,24 @@ 1790287 1790308 1790787 -1790832 1790945 -7785540 5112843 -5112892 5112990 1792827 -10850929 1794637 1795042 1795049 -9622322 7598729 1798427 4532352 8150450 -8793873 1803163 1803218 1803266 1803628 -1804409 1804522 5115046 1805184 -1805197 1805271 1805691 1805717 @@ -141,13 +114,11 @@ 1806064 1806075 5115406 -1806690 1806702 1806871 1806872 1806878 1806887 -5115500 1807353 1807355 1807514 @@ -161,7 +132,6 @@ 1809348 1809491 1809499 -1810025 1810145 1810172 1810318 @@ -169,7 +139,6 @@ 5116198 5116238 5116252 -5116293 9350900 1810824 1810846 @@ -185,7 +154,6 @@ 1814182 1814323 1814336 -1814357 1814359 5117245 5117347 @@ -215,7 +183,6 @@ 1817852 1817854 1818252 -1818454 1819310 1819873 11904675 @@ -228,15 +195,12 @@ 1781420 1793538 1813413 -1760257 8177591 1775796 -1811948 5117941 5884258 7716829 8299504 -8968321 1784959 1785024 1785072 @@ -246,43 +210,29 @@ 7924383 1780646 1780668 -1777463 -1777471 -1840656 1860184 5123542 -1870037 1870308 1870450 -1870727 1870988 -1871175 1871407 8766638 -1872452 1872514 1872873 1872901 1873079 -1873319 1873398 7372375 -1873753 -1875478 1876542 1876665 5125916 1877282 -1877443 1877988 -1878406 -1878490 5125525 5143284 5143285 5131957 4525777 -1737847 1740623 8094357 1741826 @@ -299,7 +249,6 @@ 1920844 1920900 1920923 -10581870 10657453 1921123 8825450 @@ -311,13 +260,10 @@ 1922865 1922867 1922868 -1922889 -1922890 8913017 1923678 1923679 1923997 -1924176 10436850 1924754 8837974 @@ -329,7 +275,6 @@ 10120854 10307383 10411472 -1925429 4300384 4300393 8389961 @@ -354,7 +299,6 @@ 1930179 1930181 1930270 -1930288 1930289 1930361 1930410 @@ -370,14 +314,12 @@ 1930772 1930779 1930830 -1931116 1931119 1931122 5139864 1931310 5139898 1932172 -1932175 1932576 5140033 5140054 @@ -387,7 +329,6 @@ 1935869 1935872 1935888 -1935899 1935901 1935912 1935916 @@ -450,7 +391,6 @@ 1919653 1919656 4701298 -4701336 7661785 5137553 10703948 @@ -460,10 +400,8 @@ 1919945 1919947 1919949 -1920192 1920266 1920275 -5137817 5137819 5137851 1920426 @@ -474,7 +412,6 @@ 1920506 1920552 1920571 -1920574 1920581 1920586 1920691 @@ -489,9 +426,7 @@ 12234544 12236627 1955694 -1956098 1956099 -1958121 1959637 1960090 1960255 @@ -504,7 +439,6 @@ 1962086 1962118 1962120 -1962895 4302252 10084195 1963425 @@ -512,7 +446,6 @@ 1963633 5144363 1964698 -1965697 1965887 1966088 1966185 @@ -531,44 +464,32 @@ 5146253 1973665 10404426 -5146820 9590066 1975287 1976073 1976255 1976651 1976746 -1977003 1978268 1978464 9243264 -5148280 1978958 1978959 -1980245 1981160 1981252 1981951 -1981959 1981973 -5148576 5148593 -5148766 1985485 5149222 -5149237 1985647 -1985952 -1986004 1987330 1989582 1990594 1990998 1991405 1991410 -12010643 5880539 -9366016 9438677 9497623 9619088 @@ -577,7 +498,6 @@ 10221195 10288719 9391442 -5149746 5149753 5149811 5150002 @@ -585,7 +505,6 @@ 5142358 12200261 11654707 -11892494 10713577 12252926 11423843 @@ -599,15 +518,12 @@ 1942327 1942370 1942372 -1942378 1942416 1942455 1942509 -4301749 1942558 5141662 1942854 -1942982 5141763 1943475 1943563 @@ -639,7 +555,6 @@ 1944580 1944744 1944769 -4301934 1944815 1944832 5141913 @@ -652,7 +567,6 @@ 1945462 1945476 1945477 -1945874 4301942 1946074 1946097 @@ -664,7 +578,6 @@ 1946310 1946327 1946333 -1946432 1946469 1946520 1946544 @@ -677,8 +590,6 @@ 1947037 1947048 1947049 -1947055 -1947147 5142176 1947402 1947506 @@ -688,11 +599,9 @@ 1947597 1947890 1947894 -12208168 1947973 1947979 1947980 -1948042 1948046 1948158 7603634 @@ -715,7 +624,6 @@ 1949451 1949492 10574663 -1949512 1949515 1949592 1949621 @@ -734,11 +642,8 @@ 1950153 1950197 1950243 -1950567 -1950578 1950654 1950767 -1950856 1951062 1951072 12231344 @@ -772,13 +677,9 @@ 1766285 1767052 1767571 -1767579 9511345 -5772169 1767719 1770659 -1774262 -9550265 6115953 1777727 5111546 @@ -788,10 +689,8 @@ 1780437 1780440 1782031 -1782422 1782424 1783811 -1784582 5112414 1785168 1785331 @@ -799,45 +698,30 @@ 7400814 1786360 1786733 -1788677 -1790072 1791331 -1791862 1791870 5113365 1792817 -9539292 1792996 1796276 7383338 7689966 7882824 8405656 -9327259 -1796310 -1798288 1799900 10446574 8729319 -8818378 -7717385 10118643 -9875111 9342344 11615055 11626773 1792564 1774929 -1770955 -1771245 5108665 1797903 -6115793 1824189 1825373 1825391 -1826181 -10115073 1826772 1827145 10043566 @@ -867,7 +751,6 @@ 1892863 5127814 1892944 -1893266 5128005 5128007 5128011 @@ -939,7 +822,6 @@ 1897977 1897980 1897985 -1897990 10073321 10365587 10375186 @@ -967,7 +849,6 @@ 1898374 1898391 1898402 -1898424 6228464 5129473 5129479 @@ -976,7 +857,6 @@ 5129489 5129496 5129502 -5129520 5129524 5129531 5129535 @@ -1005,8 +885,6 @@ 1900014 1900024 1900026 -8847500 -9208918 9925669 1900112 1900121 @@ -1045,7 +923,6 @@ 1901257 1901261 8247566 -5130277 5130296 1901533 1901580 @@ -1055,8 +932,6 @@ 1901804 1901810 11832697 -5130369 -5130400 5130528 5130548 9357385 @@ -1109,7 +984,6 @@ 10615631 1905451 1906715 -1907153 1907190 1907250 1907272 @@ -1147,7 +1021,6 @@ 1909128 1909135 1909155 -1909170 1909185 1909191 1909209 @@ -1160,7 +1033,6 @@ 1909532 1909573 5133142 -5133251 5133255 5133265 5133366 @@ -1185,7 +1057,6 @@ 5133623 5133634 5133635 -5133637 9086331 9219529 1911577 @@ -1237,7 +1108,6 @@ 1918076 1918077 1918078 -1918082 1918086 1918094 1918097 @@ -1252,7 +1122,6 @@ 1918596 1918601 5137408 -1918968 1919007 1919010 5128045 @@ -1297,7 +1166,6 @@ 10511167 12045866 5132917 -5132956 5133008 9964857 9745549 @@ -1309,26 +1177,20 @@ 1941717 1941719 1941864 -4529738 5101371 5101374 -9114044 5101527 7628188 1879052 1879160 1879253 1879413 -1879443 -1879452 1879471 -1879655 5126494 5126517 5126533 5126585 5126637 -1880381 1880411 1880505 10056494 @@ -1339,9 +1201,7 @@ 11968849 1881079 1881151 -9819403 5126721 -1881822 5126751 5126756 1882786 @@ -1351,43 +1211,32 @@ 1882819 1882941 1882960 -1882965 -1883038 1883067 10807787 8981028 -5127089 5127090 1883968 8324720 1884428 1884437 1884449 -1884453 1884479 1884685 -9308930 1884774 1884923 1885099 1885158 -1885642 1885950 1886251 -5127209 1886729 10510138 -1886906 1887004 1887634 1888047 1888292 -1888338 1888646 -12106417 1888955 1889267 -1889327 1889536 1890089 1890247 @@ -1396,20 +1245,15 @@ 1890368 1890410 1890512 -1890599 1890737 1890876 1891035 10310835 -1891755 1891932 1892131 1892230 1892311 1892355 -1892427 -1892433 -9059564 1892477 1892488 5771877 @@ -1421,7 +1265,6 @@ 8876855 1886374 1889721 -1889765 1889850 5127562 5127631 @@ -1433,11 +1276,8 @@ 11773446 7946946 1858674 -1858706 1858930 9645309 -1859161 -1859488 9700261 10103570 9547681 @@ -1449,7 +1289,6 @@ 1865132 5124542 5124557 -5124589 5124595 5124597 5124598 @@ -1532,9 +1371,7 @@ 1862547 1862551 1862658 -1862765 1862805 -1862841 1862874 1862923 1863109 @@ -1565,7 +1402,6 @@ 1864316 1864320 1864321 -1864328 1864329 1864352 5124249 @@ -1585,7 +1421,6 @@ 5123983 5123991 5123996 -1863978 1864004 1864021 1864046 @@ -1604,8 +1439,6 @@ 9424853 1953970 1953998 -1860118 -5105671 1830681 1953166 1751497 @@ -1628,28 +1461,20 @@ 5105218 5105227 5122556 -5122647 -5122683 -5122702 -1855358 10055273 1857380 -1857626 1857829 1858163 1858283 10038125 1937655 -1937665 1937793 1937816 -1937846 1937885 1938022 1938059 1938112 1938148 -4299871 10600208 11716362 1937064 @@ -1672,10 +1497,8 @@ 5141321 5141324 5141331 -5141333 5141340 1939336 -4694313 1836899 1837172 4534796 diff --git a/dev/releases/mambo_v3/presets/south_asia.classes b/dev/releases/mambo_v3/presets/south_asia.classes index f53d564..efd078f 100644 --- a/dev/releases/mambo_v3/presets/south_asia.classes +++ b/dev/releases/mambo_v3/presets/south_asia.classes @@ -3,23 +3,16 @@ 1992315 1732115 1732525 -1732763 1732830 5101640 1733154 5102242 1734519 -5102287 5102300 1845547 -1845607 -1847641 -5122013 1849656 1850633 -8503184 1831458 -10679326 11095591 12208733 1758625 @@ -28,8 +21,6 @@ 6132868 1760201 1760927 -1760970 -1761111 1761213 1761387 1762151 @@ -38,21 +29,16 @@ 1762226 5109766 1763650 -1763782 1763976 1764032 1764043 -1764060 -1764531 1764640 -1764880 1764886 1765653 1765863 1766570 1766584 1766601 -1766612 1766618 3257809 6116699 @@ -66,28 +52,20 @@ 5110232 1768898 10820762 -1769168 11467034 10848620 -1769425 1769465 1769772 10881384 1769827 1769840 -1769852 -1769897 -6132966 -1771975 1771977 1772352 5110417 5110447 5110490 -1774576 1775148 5110546 -5110765 5110769 1777166 5110837 @@ -97,10 +75,8 @@ 5110993 6133058 9610080 -1779399 5111830 10203499 -1780705 1780716 1782115 1783302 @@ -108,7 +84,6 @@ 1785832 1786317 1786711 -11368766 5112500 1786980 1786985 @@ -119,82 +94,60 @@ 7346446 6132826 1788953 -1789225 -1789604 1789794 -10766319 1790876 1790888 1791010 -1791097 10743044 -5112940 1791514 1791715 11725043 -5113078 5113148 5113330 5113352 -1792695 5113385 5884243 9504222 1793631 -1793635 5113925 1796984 10108671 6132979 -1797299 9332506 1797727 1798014 1798101 5113950 5884247 -6117055 -1798449 1798481 1798488 1798504 -6115283 6132841 6132850 11732472 -1787072 1787079 1798529 1798700 1798794 1798807 -4301310 4532352 6115437 6133046 8793873 1799743 1799751 -1799757 6132825 1803148 1803163 1803197 1803302 -1804071 1805044 -11494627 1805580 1806814 1806871 -1806872 -11453492 -1808161 1808180 1808236 -1808286 1808381 -1808559 5115701 5115771 1809115 @@ -214,8 +167,6 @@ 1814971 1815260 1815680 -10826443 -1816029 1816065 1816138 1816292 @@ -226,13 +177,10 @@ 1818659 1818991 1819128 -1819145 6197200 7346382 -1819268 1819280 8407461 -1819668 6134035 5118348 5118422 @@ -248,36 +196,28 @@ 1820458 1820477 1820478 -1820565 1820888 1821105 1822141 -12037602 10503495 8897869 12176367 12183285 -4532532 10864524 10270464 9473918 -9400545 9559336 6133292 10062933 10717837 8148822 12242422 -10806460 -6133252 6133325 9754232 10972780 11142432 -10629533 10309234 12171522 -11962292 10399906 10754772 10812069 @@ -293,7 +233,6 @@ 10178326 10282389 10400868 -10469564 10813849 10907635 10982648 @@ -304,15 +243,12 @@ 9336001 1781413 1781421 -1803461 8000103 9478424 1781598 1794273 -1772374 1763761 6115388 -1816685 6133297 1774583 1774598 @@ -327,7 +263,6 @@ 1804532 1768461 5109796 -1821455 1821920 1822017 1819337 @@ -336,11 +271,9 @@ 6122364 1815315 1781446 -6116073 6116076 1783713 1812394 -8237987 4687933 6116646 1820118 @@ -354,7 +287,6 @@ 1784947 1785072 1785105 -1765996 1765999 6133069 10272611 @@ -366,7 +298,6 @@ 6132915 6132916 5110012 -1796943 1819685 10098436 11717028 @@ -375,59 +306,37 @@ 6197138 5108435 1771903 -4301309 5112440 10371735 1869363 1939510 5141344 -1860184 -5880041 6132546 1870237 1870450 -4531402 8766638 1871988 1872094 1872850 1872873 1873079 -1873215 5125602 5125635 1874937 -1875827 1876168 1876542 1876592 1876922 -1877498 -5126052 1877788 -1877941 1878406 -1878490 1883045 1888454 -5884888 6133441 -4525884 -10451589 -12211069 -1736358 1736623 -1736993 -1737015 -1737847 -1738192 -5102951 1740469 -1740623 1740797 1740828 1743998 -1744526 1745947 1746714 1920851 @@ -445,10 +354,8 @@ 10581870 10825466 1921092 -1921093 1921150 1921163 -10556522 1921633 7346430 1922085 @@ -457,12 +364,10 @@ 1922244 1922285 1922288 -10442031 5138200 1922584 1922745 1923019 -5138543 1923458 1923491 1923525 @@ -472,21 +377,17 @@ 1923668 1923809 1923917 -1924097 1924193 1924298 1924323 1924390 1924458 1924713 -1925233 1925381 1925543 -1925711 1925731 1925743 1925877 -1925918 1926436 1926437 1926446 @@ -502,11 +403,9 @@ 10116946 10361239 10606547 -1926722 1926800 11008182 1927034 -1927217 1927219 1927242 1927284 @@ -524,20 +423,16 @@ 1928361 1928376 1928419 -5139156 1928628 1928849 1928908 1928915 9856663 -1928960 -1929402 1929697 5139309 5139339 8356768 1930904 -1930916 1930935 4535106 1930954 @@ -549,7 +444,6 @@ 1931656 1931706 1931735 -1931906 1931908 1931943 1931956 @@ -562,13 +456,10 @@ 1932166 1932273 4708995 -1932411 1932551 7346444 1932607 5139990 -6132685 -1932812 1932814 1932863 5806412 @@ -584,7 +475,6 @@ 1934188 1934192 1934211 -1934213 1934221 1935377 1935405 @@ -594,25 +484,18 @@ 10879371 4709102 1933095 -1924494 1752161 -1752373 1752483 1752492 -1752603 -1752749 1753215 5105458 5105547 -5105570 1753759 -7345843 6133481 11673056 1919151 1919161 1919181 -1919333 1919340 1919344 1919348 @@ -628,12 +511,10 @@ 1919731 1919741 1919951 -1919966 5137747 5137748 1920237 1920247 -1920258 1920259 5137790 5137808 @@ -641,7 +522,6 @@ 5137828 5137832 5137849 -5137850 5137858 1920349 1920356 @@ -654,17 +534,13 @@ 1920467 1920469 1920472 -1920496 1920502 1920506 1920512 4535307 5137889 5137891 -5804932 -5805036 1920515 -5137902 5137920 5137926 5137932 @@ -672,31 +548,22 @@ 5137938 5137945 5137946 -5137949 -1920707 -1920718 5137578 5137605 5137612 -5137682 1920218 5137763 7207679 1758003 -1758461 -1758602 1868952 1869057 -1869178 1963095 -5143303 5143311 5143315 5143354 5143384 1954911 6133648 -1955389 1955552 1955694 1955725 @@ -709,10 +576,8 @@ 1957368 1957413 1957611 -4524424 1958152 1958158 -1958163 1958290 1958305 1958307 @@ -720,9 +585,7 @@ 1958463 1958483 1959645 -1959652 1959667 -1959682 6133552 1959948 1960181 @@ -732,19 +595,11 @@ 1960617 6133518 1960686 -1961013 -1961052 -1961126 -7346236 1961647 -1962268 1962678 1962839 4302252 -5734349 1963168 -1963306 -5144345 1963629 1963733 11644349 @@ -753,14 +608,11 @@ 1964029 1964116 1964316 -6133502 5144431 5144472 -9370070 1966367 1967590 7346240 -1967815 1968147 7681733 1968363 @@ -768,27 +620,16 @@ 1968746 1969581 6133643 -1969621 -1970136 1970322 7346252 -5144677 -5144805 5144806 -5144900 -5144942 5145075 -5145139 -5145255 5145396 5145502 -5145503 5145560 5145624 -5145735 9194811 6133516 -1972094 5146062 1972614 1972620 @@ -797,27 +638,19 @@ 1973242 1973338 1973358 -5146434 5146508 5146566 5146608 5146677 5146752 5146763 -5147062 -5147171 -5147214 5147306 -5147441 -5147498 1975164 6133559 11856219 -1975711 1975805 1975806 1975892 -1975914 9356491 9410573 9548993 @@ -841,31 +674,21 @@ 1977962 1978385 1978405 -1978424 1978499 1978524 -6133560 5148252 1978789 1978999 6133546 -1979021 -1979521 -1979781 1979787 -1979806 1980521 -1980532 11449815 -1980694 1980827 1981063 -11173690 7345811 1982007 1982221 1982267 -1982542 1982865 5149081 5149136 @@ -878,24 +701,18 @@ 1985926 1986032 1986054 -1986061 1986508 1986650 1986779 -1986787 1986936 -5149308 1987203 1987362 1987377 -1987629 -1987740 1987766 1987767 1987775 1987776 6133591 -6133534 1988257 1988306 1988420 @@ -911,10 +728,7 @@ 10155932 11098546 11869776 -1991945 5734515 -11635419 -4524376 10422582 10632124 6133595 @@ -924,11 +738,9 @@ 6133670 6133673 6133674 -9220953 6133519 11780161 6133604 -6133607 10629052 7346237 6133562 @@ -938,20 +750,15 @@ 6133542 6133498 10477629 -6133575 6133517 -6133635 10175639 9617411 9932090 -7346256 7345829 11477039 -5880478 6133540 10755716 5149768 -7443518 5146303 5146335 1942522 @@ -962,7 +769,6 @@ 1942769 1942808 4689929 -1942878 1943212 1943223 1943236 @@ -971,9 +777,6 @@ 1943505 1943519 1943619 -1943757 -8073674 -8273661 1944503 1944504 1944521 @@ -994,7 +797,6 @@ 1945742 1945748 1945814 -1945837 1945856 1945863 1945874 @@ -1007,15 +809,12 @@ 5142067 1946432 1946695 -1946731 1946737 1946738 1946917 1947385 1947409 1947446 -1947449 -1947456 1947492 1947496 1947661 @@ -1027,7 +826,6 @@ 1947805 1947846 1948062 -1948073 1948088 5142213 1948464 @@ -1042,13 +840,10 @@ 8828146 9068968 5142338 -5142352 -1949784 1950013 7346356 1950156 1950171 -1950197 1950521 1950533 1950879 @@ -1059,112 +854,69 @@ 5142725 5142729 5142730 -5142032 1758613 -1759177 5108636 10329023 -1760593 1760620 -1760939 1761438 -1761735 1762657 6132957 1764174 1764553 -1765017 5109843 5109848 -5109855 -5109872 5109882 5109898 5109931 8352161 1765658 1766910 -11034779 1767368 1767393 -1767511 -10575632 -5110120 5772171 -5772172 -5772206 5802396 5883925 -7345742 -9356770 -1768117 -5110200 1769095 1769978 -1770477 1771555 -1774470 1774797 -4301304 6115946 -6115953 5111535 5772222 1779641 -4533325 -5111980 1782341 1782354 1782543 5714973 -1784349 1784513 1784761 1785145 1785181 1785185 1785314 -1785329 -1786360 1786452 1786573 -1787367 1787373 4687681 1789957 1791660 -1792996 1793246 7918000 1793689 -1795065 1795068 -4532908 6133011 4688169 4688172 -1797030 -6133002 1798090 -1799695 1800149 -6097260 -4532811 6132989 -8021109 -5110644 6132797 -1763072 5109385 -5109437 -4534675 4534681 1792555 8108800 1771675 1771245 -4533714 -1765751 5113853 5108671 5108724 @@ -1172,49 +924,34 @@ 5108794 1789530 10933525 -5110282 11615549 -4532203 4532206 4532208 4532266 -6115772 6115820 6115822 6115830 1782273 -1782289 10063383 9325654 10458175 -10683012 1822490 1822493 -1822830 -1822852 5118565 1824338 1824751 1824766 1824997 -1825156 1825336 7346284 -1825539 -5118974 -5118978 1825920 5118996 5119000 6133700 -6133750 -1827408 -1827414 1827484 5119239 1827711 6133680 -6133681 6133684 7346276 9921001 @@ -1230,7 +967,6 @@ 5127932 5127971 5127992 -7346346 9963153 1893177 5792081 @@ -1253,7 +989,6 @@ 5128169 5128182 10398658 -4535632 10639484 1895037 1895159 @@ -1261,13 +996,11 @@ 1895527 1895609 1895667 -1895670 1895956 1895984 1895992 1896061 1896105 -1896142 1896304 1896922 1897664 @@ -1285,7 +1018,6 @@ 7346344 1898434 1898521 -1898544 1898946 1898958 1898988 @@ -1308,7 +1040,6 @@ 5130542 8189761 4535689 -10394962 10577473 5130775 5130813 @@ -1322,7 +1053,6 @@ 1904272 1904701 1904719 -1904887 1904943 1904948 1904996 @@ -1331,11 +1061,8 @@ 6221746 1905383 1906552 -8208583 -1907430 1907576 1907620 -1907625 1907637 1907672 1907687 @@ -1343,19 +1070,14 @@ 5881946 7976131 1908352 -1908660 1908702 -1908713 1908775 1908840 1908871 1908929 -1909123 -1909216 7346301 8978362 10656625 -1909398 1909607 1909649 1909659 @@ -1364,15 +1086,12 @@ 1909838 1909865 1910706 -6133858 1911298 1911300 -1911503 5133687 5133689 1911633 1911736 -7809779 8078362 5133693 5133695 @@ -1413,15 +1132,12 @@ 1918408 1918495 1918497 -1918509 1918517 1918533 1918547 1918554 1918667 1918736 -1918843 -1918854 11645316 4535618 10595994 @@ -1459,7 +1175,6 @@ 5129913 1914708 1914749 -7346340 1918584 1951505 1951507 @@ -1467,15 +1182,11 @@ 1951675 1951747 1951859 -1951881 1952034 -1952062 -1952175 1952177 1952281 5143080 1952481 -10782264 1952551 1952685 1952704 @@ -1485,26 +1196,18 @@ 1868409 4702564 1868499 -1868470 5141581 -5141590 -1843602 1730519 1730543 1730948 -1730978 8008237 8130866 8402212 1872361 -1872368 -1878626 -6133117 1878744 1879125 1879141 1879227 -1879339 1879340 1879379 1879408 @@ -1513,10 +1216,8 @@ 5126635 5126637 1880451 -1880464 1880852 1880858 -1880907 1880968 1881089 1881121 @@ -1530,10 +1231,8 @@ 1881340 1881515 1881964 -1882210 1882253 1882266 -1882272 1882310 1882753 1882767 @@ -1547,10 +1246,8 @@ 1883067 5127097 1883943 -1883951 1884051 1884229 -9294363 1884434 1884437 1884449 @@ -1561,7 +1258,6 @@ 1884774 1884835 1884844 -1884858 1884890 1884908 1884909 @@ -1573,7 +1269,6 @@ 6133181 1885745 1885763 -1885764 1885826 1885836 1885919 @@ -1587,74 +1282,52 @@ 1886720 1886726 1886729 -7562564 1887054 -1887509 1887586 1887691 -1887701 -1888040 -1888092 1888324 1888346 1888537 -1888579 -1888891 -1888893 1888906 1888911 1888913 1889043 -1889053 1889071 1889074 -1889239 1889249 -1889270 1889272 1889277 1889356 -1889358 1889552 1889563 1890031 -1890097 1890287 1890320 1890335 -1890343 7543006 10180624 1890410 1890512 1890670 1891167 -1891326 1891339 -4532022 -1891533 1891583 1891636 1891758 -1891889 1891936 1892153 -1892456 1892476 10141437 11056379 9674732 6133140 5771877 -7864212 -10117959 10227418 4532125 10145421 6120803 6133232 6121010 -10513366 10397209 6133154 10959264 @@ -1662,7 +1335,6 @@ 10375403 5126680 1886374 -1889765 1889833 5127592 5127629 @@ -1670,39 +1342,27 @@ 5127656 5127669 5127675 -5127683 5127698 5802339 1888638 -1886123 1883885 10410699 1831136 5122430 1858674 -1858698 1858930 -1859061 1859453 -9749806 -6133397 1859932 1860026 -5123180 -5123221 1865593 1865660 -1865666 9914882 1865930 -1866237 1866356 6106943 1866530 1866556 -1866568 1866573 -1867928 11729388 5124673 5124716 @@ -1714,7 +1374,6 @@ 1861488 1861494 1861644 -1861665 1861714 1861721 5123674 @@ -1732,7 +1391,6 @@ 1862370 1862394 1862401 -10374414 1862430 1862449 1862454 @@ -1743,12 +1401,9 @@ 1862517 1862526 5123707 -5123709 1862765 1862774 -1862837 1863034 -5123922 1863354 1863394 1863467 @@ -1756,7 +1411,6 @@ 1863829 1863909 1863910 -1863924 1863944 9578319 1864126 @@ -1780,12 +1434,9 @@ 5123884 5123890 8810912 -10189661 10191275 10436020 -5123979 1992634 -1993043 1993496 6133769 1993637 @@ -1794,21 +1445,15 @@ 6132712 1953407 1953423 -1953729 11467944 6132725 -6132723 6132729 1954037 5143241 5143249 -5143266 1954120 -6132728 1754135 1754368 -1754511 -1754516 1754535 1754919 1754933 @@ -1818,22 +1463,15 @@ 5108334 11860016 5108346 -1830669 -1855630 -1856005 -1856971 1857380 -1857626 1857828 1857938 -1858163 1858283 8178453 1858557 1937707 1937723 1937792 -1937819 1937826 1937892 1937911 @@ -1861,14 +1499,12 @@ 5141212 5141215 5141226 -5141229 5141233 5141242 5141254 1937570 1937580 1937613 -1938214 1938520 1939086 1939168 @@ -1878,31 +1514,23 @@ 5141317 8546322 10213314 -1800441 1800528 1800539 1800562 1800572 -1800642 1800686 1800821 5114394 5114400 5114409 11873966 -4534796 9544823 5114425 -1801000 -1801001 1801073 1801080 -1801170 -5114465 1801461 1801503 1801519 -10066605 10510325 6112606 6112661 @@ -1911,19 +1539,14 @@ 1801993 1802090 1802229 -1802244 1802337 1802702 -1802783 1802827 1802833 -1802919 1802939 1803022 1803035 1803039 1803060 1803078 -1803108 10942408 -5114303 diff --git a/dev/releases/mambo_v3/presets/southeast_asia.classes b/dev/releases/mambo_v3/presets/southeast_asia.classes index b6fda6d..6278806 100644 --- a/dev/releases/mambo_v3/presets/southeast_asia.classes +++ b/dev/releases/mambo_v3/presets/southeast_asia.classes @@ -6,17 +6,13 @@ 1992315 1732114 1732115 -1732525 1732830 1733155 -1733755 5102207 5102242 1734519 -1832143 11453841 1832235 -1845547 1847062 1847641 1849656 @@ -24,12 +20,9 @@ 1831458 1831631 1831655 -10679326 -12199936 11095591 12259113 12208733 -1758625 1759775 1760140 6132868 @@ -39,27 +32,20 @@ 1760970 1761213 1761387 -9257793 1762151 11562374 1762219 1762226 1762298 -1763589 5109766 -1763650 1763782 1763812 1763976 -1763994 -1764032 1764043 1764060 1764640 -1764886 1765653 1765863 -1766260 1766558 1766560 1766570 @@ -82,24 +68,15 @@ 1769168 11467034 10848620 -1769410 1769425 1769465 1769772 -10881384 -12148290 -1769823 -1769827 -1769852 -1769901 6132967 -1771839 1771975 1771977 1772352 5110417 5110447 -1774576 1775148 5110546 5110765 @@ -115,7 +92,6 @@ 9610080 1779456 6132938 -5111830 10203499 1780705 1780716 @@ -130,7 +106,6 @@ 5112500 6132971 1786958 -1786980 1787009 1788553 6132936 @@ -140,17 +115,11 @@ 1789225 1789604 1789794 -1790331 10766319 -1790876 1790888 1791010 -1791097 -10743044 1791514 -1791715 11725043 -5113084 5113148 5113330 5113352 @@ -159,26 +128,20 @@ 5884243 9504222 1793631 -1793635 -1793892 5113925 1796984 10108671 6132979 9332506 1797727 -1798014 1798101 5113950 5884247 1798488 -6132841 6132850 11732472 1787079 -1798523 1798700 -1798794 1798868 4301310 4532352 @@ -188,31 +151,20 @@ 1799751 1799757 1803148 -1803163 1803197 -1805043 1805044 -1805580 -5115166 9663271 1806814 1806871 -1806936 11453492 1808161 -1808232 1808236 -1808286 1808340 -1808559 6198302 1809115 -1809308 10189965 1809381 12006709 -10882244 -5116412 12176559 1811686 10671425 @@ -238,7 +190,6 @@ 1819128 6197200 7346382 -1819268 1819270 1819280 1819421 @@ -246,7 +197,6 @@ 5118348 5118422 10546538 -1820275 1820282 1820291 1820352 @@ -257,21 +207,16 @@ 1820440 1820450 1820451 -1820477 1820478 7346381 1820565 1820888 1821105 1822141 -12037602 10503495 8897869 -9956017 12176367 -4532516 10270464 -9473918 9559336 6133292 10062933 @@ -279,16 +224,12 @@ 12216332 12242422 9852545 -6133252 -10072380 6133325 9754232 10972780 11142432 -10629533 10309234 12171522 -10004820 10399906 10754772 8452092 @@ -297,13 +238,7 @@ 9927378 6133262 12257250 -8831819 1774829 -10480609 -12171068 -9266866 -8363709 -10178326 10282389 10400868 10469564 @@ -318,10 +253,7 @@ 1781413 1781421 1803461 -10866411 -8000103 9478424 -1781598 1794273 1763761 6115388 @@ -333,7 +265,6 @@ 1774618 1774626 1774635 -1774640 1774654 1774661 1774702 @@ -341,10 +272,8 @@ 1780287 1813174 5111643 -9400916 1768461 5109796 -1821455 1821464 1821651 1821920 @@ -363,15 +292,12 @@ 1820118 1820137 1819057 -4532453 6116413 -5118396 1781531 1798329 1798331 1798335 1785072 -1785105 1765999 6133069 10272611 @@ -383,28 +309,20 @@ 4687389 5884188 6132915 -6132916 6132917 9935660 5110012 1781350 -6133013 1796943 1819685 10098436 11717028 1782310 -10094256 5108435 5108440 -1771903 4301309 -10506164 5112440 -1795542 -1992489 10371735 -1869363 5141344 1860259 1860261 @@ -413,19 +331,15 @@ 5880040 5880041 6132546 -5123449 5123485 5123489 1870237 -1870450 -8766638 1871988 1872094 1872848 1872850 1872873 1873417 -5125591 5125602 5125633 5125635 @@ -435,23 +349,16 @@ 1876592 1877788 1878406 -1878490 9835867 -1883045 1888454 -5884888 6133441 -1736358 -1736499 1737313 -1738192 1740469 1740524 1740797 1740828 1743998 1745947 -1745952 1746714 1748605 10159697 @@ -476,7 +383,6 @@ 7346430 5138069 1922057 -1922111 1922143 1922163 1922244 @@ -492,10 +398,8 @@ 1923649 1923651 1923668 -1923744 4708972 4708977 -1923809 1923883 1923917 1924193 @@ -509,17 +413,14 @@ 1925543 1925628 1925679 -1925711 1925731 1925743 1925877 -1925918 1926436 1926437 1926446 1926448 1926456 -1926546 1926574 5883255 7390086 @@ -563,14 +464,11 @@ 1928849 1928908 1928915 -4709030 9856663 -4535106 1930954 1930968 1931109 1931148 -1931189 1931655 1931706 1931729 @@ -596,7 +494,6 @@ 4709095 4708995 1932551 -1932563 7346444 1932607 1932812 @@ -626,8 +523,6 @@ 5138929 7346417 4709102 -4709147 -11055981 1752161 1752373 1752483 @@ -635,24 +530,18 @@ 1752603 1752651 1752749 -1752758 -1752849 1752903 5105458 5105547 5105570 11014495 -5734560 10932946 7345843 6133481 10017342 -10203493 -10795141 11673056 1919151 1919160 -10988070 1919176 1919340 1919344 @@ -675,7 +564,6 @@ 1919762 1919951 5137748 -1920259 5137808 5137823 5137832 @@ -688,7 +576,6 @@ 1920454 1920467 1920469 -1920506 5137889 5137891 5804932 @@ -703,8 +590,6 @@ 5137949 5137955 1920786 -5804166 -5137605 1758003 1758461 1868952 @@ -712,14 +597,10 @@ 1869178 11794362 1963095 -5143311 -5143354 5143384 -1955039 6133648 1955389 1955552 -1955581 1955725 1956384 1957161 @@ -730,81 +611,52 @@ 1958152 1958158 1958163 -1958290 1958305 1958324 -6544637 1958422 1958454 1958463 1958483 1959645 -1959652 -1959667 -6133552 -1960181 6133509 5144092 -5144093 -1960686 -1961052 1961162 -7346236 1961647 1962678 -4302252 5734349 5144345 1963629 -1963733 11644349 1964024 1964025 1964029 6133500 -1964113 1964116 -1964305 -1964316 1964331 -1964702 1964738 5144431 -5144472 9370070 -10670854 -1967688 7346240 -1967815 1968147 1968363 -1968730 1968746 -11858774 1969581 6133643 -1969621 1970034 1970136 1970322 1970436 7346252 5144806 -5144864 5145075 5145396 5145495 -5145560 5145624 -5145735 9194811 -6133516 1972620 10732353 1972754 1973242 -1973358 -1973393 5146434 5146483 5146508 @@ -828,37 +680,26 @@ 9548993 1976212 1976213 -1976224 1976228 1976311 1976469 -1977182 1977184 6133548 5147917 5147968 5148043 5148055 -5148066 -5148097 5148214 1977813 1977833 1977863 -6133582 1978385 -1978407 1978499 1978524 -4524638 6133560 -1978789 1978996 1978999 -1979021 1979521 -1980521 -1980532 1980694 1980827 1981063 @@ -867,10 +708,8 @@ 1982267 1982865 11121180 -5149081 5149136 5149174 -5149182 5149203 1985152 1985158 @@ -879,8 +718,6 @@ 1985192 1985228 6133659 -1985926 -1985993 1986054 1986508 1986774 @@ -891,40 +728,27 @@ 1987204 1987362 1987377 -1987629 -1987747 1987766 1987767 1987775 1987776 -1987785 6133591 -6133534 1988257 -1988306 1988420 1988487 -1989355 1989942 -9906229 1991123 5149609 1991310 1991378 1991394 -1991779 10155932 -11098546 11869776 -1991945 5734515 -5149929 -6133619 5880539 10422582 10632124 6133596 -9577234 10530208 11555221 6133670 @@ -940,19 +764,15 @@ 10864093 6133523 6133525 -6133528 6133498 10477629 6133575 9962269 6133517 -6133635 10175639 9617411 9932090 7345829 -5880478 -5146335 1942522 1942060 1942067 @@ -979,7 +799,6 @@ 1943757 1944462 1944483 -1944503 1944504 1944521 1944778 @@ -1023,7 +842,6 @@ 1946917 1947385 1947409 -1947446 1947449 1947456 1947491 @@ -1033,7 +851,6 @@ 1947673 1947703 1947727 -1947740 1947745 1947753 1947765 @@ -1046,7 +863,6 @@ 5142213 1948464 1948465 -1948941 1949008 1949015 1949336 @@ -1062,20 +878,13 @@ 1950171 1950302 1950521 -1950533 1950879 1951157 -1951170 5142725 5142729 5142730 -5142749 -1952883 1758613 -9355953 10329023 -1760620 -1761778 1762657 6132957 1763741 @@ -1087,36 +896,22 @@ 5109898 1765508 1766910 -11034779 1767368 -1767381 1767393 -1767430 10575632 5802396 5883925 -1768568 1769095 1769209 1769978 -1771357 1771555 1774797 6115946 -1778109 5111535 -5772222 -1779276 -5111967 -5111974 1782341 1782354 -1782543 1782757 -1783059 -1784513 1785145 -1785181 1785314 1785329 1785725 @@ -1125,51 +920,33 @@ 1787373 4687681 1788856 -1789957 -1792996 1793238 1793246 -1793661 1793689 -1795065 1795068 -6133011 1795597 4688166 4688169 4688172 -1798090 -1799695 -1800149 -9536457 -4532269 6132989 -6132762 10121804 6132797 5109385 8491927 1792555 -8108800 -1771245 5113853 5108671 -5108724 -5108737 5108752 5108794 -1759394 1789512 1789530 10933525 -11437060 11615549 4532266 6115822 6115830 1782273 1782289 -10063383 9325654 10458175 10683012 @@ -1178,29 +955,17 @@ 1822852 6133742 5118565 -7346263 6133720 -1823706 5118582 6133692 -1824338 -1824354 1824766 -1826020 -1824845 1824997 1825336 -5118974 1825920 1825956 6133700 -6133750 -1827408 -1827414 1827484 -4534869 5119239 -1827650 1827711 6133680 6133681 @@ -1233,7 +998,6 @@ 1893645 1893660 1893663 -1893699 1893787 1893793 1893921 @@ -1251,9 +1015,7 @@ 1894057 1894060 5128161 -5128169 5128182 -10639484 1895037 1895159 1895448 @@ -1292,10 +1054,8 @@ 1898958 1898970 1898988 -1899187 1900093 1900939 -1901001 1901213 5130277 1901372 @@ -1356,9 +1116,7 @@ 1907430 1907432 1907475 -1907498 1907534 -1907620 1907637 1907666 1907683 @@ -1423,7 +1181,6 @@ 8669164 11516142 11535847 -5135839 1916758 5136514 5136594 @@ -1448,10 +1205,8 @@ 1918406 1918495 1918497 -1918509 1918532 1918533 -1918553 1918554 10595994 10000384 @@ -1486,9 +1241,7 @@ 5128644 5128663 5129000 -5129025 10201273 -8549720 1910576 1910628 1910629 @@ -1498,72 +1251,51 @@ 1914749 7346340 1918584 -1951462 1951492 1951505 -1951507 -1951529 5142870 1951675 -1951747 1951859 1951874 1951881 1952147 1952175 -1952177 1952281 5143007 5143076 5143080 -1952481 -10782264 1952685 1952704 5143116 1952857 -5885428 1868409 4702564 1868499 1868470 5141581 -5120341 -1843564 1730519 1730543 -1730978 -10450446 8008237 8130866 8402212 -1872359 1872361 -1878626 6133117 -7628188 1878744 -1878826 1879125 1879141 1879227 1879340 1879379 1879408 -1879452 1879471 5126635 5126637 1880353 1880451 -1880464 1880852 1880858 -1880968 -1881089 1881121 1881170 -9819403 1881293 1881320 1881329 @@ -1571,58 +1303,44 @@ 1881340 1881515 1881964 -1882215 1882253 1882266 -1882272 1882310 1882753 1882767 1882771 -1882773 1882884 -1882905 10156181 1882930 -1882941 1882960 1882965 1883067 1883394 5127097 1883873 -1883881 1883943 1883951 1884051 -1884061 1884228 1884229 9294363 1884434 1884437 1884449 -1884461 1884479 1884671 6120980 1884774 1884816 1884844 -1884858 1884890 1884909 4532146 1885012 -1885262 1885263 1885569 -1885623 1885630 -6133181 1885745 -1885763 -1885764 1885826 1885836 1885919 @@ -1630,34 +1348,26 @@ 1886015 1886241 1886251 -1886362 1886526 1886700 1886720 1886726 1886729 1887054 -1887509 1887586 1887691 -1887701 1888027 1888040 1888092 1888324 -1888346 -5127394 1888891 -1888893 1888906 1888911 1888913 1889043 -1889050 1889053 1889071 1889074 -1889242 1889249 1889270 1889272 @@ -1666,57 +1376,39 @@ 1889358 1889531 1889552 -1889563 1890031 -1890097 1890287 1890320 1890335 -7543006 10180624 1890410 1890512 -1890670 -10071588 -1891308 1891339 1891583 1891636 1891758 -1891889 -1891932 1891936 -1892153 10141437 -9674732 6133140 5771877 -10117959 4532125 9967529 10145421 6120803 6133232 6121010 -10513366 10502505 10397209 6133154 6133158 -10375403 1886374 -1889765 1889833 -1889850 -5127562 5127592 -5127595 5127629 5127644 5127656 5127669 5127675 -5127683 5127688 5127698 5802339 @@ -1725,36 +1417,24 @@ 1888639 1883885 10410699 -1831136 5122430 -1858674 1858698 1858930 -1859161 1859453 -9749806 -6133397 1859932 -1860026 5123180 1864897 1865593 -10014340 1865660 1865666 9914882 -9972403 1865930 1866237 -1866356 6106943 -1866491 1866530 1866573 9906979 10047346 -1867928 -1868025 11729388 5124716 5120278 @@ -1766,15 +1446,12 @@ 1861488 1861494 1861644 -1861663 1861665 1861714 1861721 -5123674 1861933 1861936 1861937 -1861938 1861949 1861951 1861975 @@ -1811,7 +1488,6 @@ 1863394 1863467 1863646 -9310369 1863829 1863848 1863880 @@ -1820,25 +1496,20 @@ 1863910 1863924 1863944 -9578319 1864126 1864135 8133328 11738734 11954157 -1864652 -5124300 5124304 5124305 5124332 5124348 5124374 -5124433 1864796 6099041 6106759 10193618 -5123815 5123824 5123837 5123852 @@ -1851,9 +1522,7 @@ 10191275 10436020 1992634 -1992883 1993496 -6133769 1993637 1953192 1953196 @@ -1872,7 +1541,6 @@ 5143241 5143249 5143266 -5143279 1954120 6132728 1754135 @@ -1882,23 +1550,16 @@ 1754535 1754919 1754933 -1755248 -1755276 1757652 5108318 5108334 5108335 11860016 5108346 -1830669 9004359 1855630 -1856005 1857380 -1857626 1857828 -1857938 -1858163 1858283 8178453 1858557 @@ -1907,9 +1568,7 @@ 1937707 1937712 1937723 -1937745 1937769 -1937819 1937826 1937847 1937856 @@ -1919,7 +1578,6 @@ 1937966 1937975 1937988 -1938007 1938052 1938069 1938074 @@ -1934,7 +1592,6 @@ 1936993 1937011 1937037 -5141144 5141154 5141163 5141172 @@ -1972,15 +1629,12 @@ 1939225 5141311 5141317 -12188993 10213314 1800441 6133777 -1800528 1800539 1800562 1800572 -10010361 1800686 1800691 1800821 @@ -1989,43 +1643,30 @@ 11873966 9544823 5114425 -6133780 -1801001 -1801073 1801080 1801170 1801196 5114465 -5114515 1801461 1801490 1801503 1801519 10066605 10510325 -4534792 6112606 -6112610 6112613 6112661 6133809 6133811 1801993 1802090 -1802120 -1802229 1802337 1802702 -1802783 1802827 -1802830 1802833 1802919 -1802939 1803022 1803035 -1803039 -1803060 1803078 6133803 5114303 diff --git a/dev/releases/mambo_v3/presets/subsaharan_africa.classes b/dev/releases/mambo_v3/presets/subsaharan_africa.classes index fd828a8..324eab2 100644 --- a/dev/releases/mambo_v3/presets/subsaharan_africa.classes +++ b/dev/releases/mambo_v3/presets/subsaharan_africa.classes @@ -4,23 +4,14 @@ 5101590 1732660 1732955 -1734704 6113959 1845270 1845574 1845616 4528100 -1846849 1847111 -9546514 -1848219 9868978 -1849924 -1850184 1850640 -1850781 -5122121 -1851347 5119338 1839146 1831458 @@ -40,7 +31,6 @@ 4687991 1778430 5111054 -8193562 1786190 1786980 1786984 @@ -54,16 +44,12 @@ 1790287 1791715 1792210 -5113330 1795074 -5113925 1796984 5884245 6117055 6117124 -1798449 1798481 -1798504 6115283 1798802 4301310 @@ -114,11 +100,9 @@ 6115388 1816685 1774600 -1768626 1803544 1803545 1817973 -5111643 1804532 1813460 1807634 @@ -135,7 +119,6 @@ 1816775 1803306 4687933 -6116646 6116659 6116661 6116669 @@ -155,60 +138,37 @@ 1782310 1777517 6115973 -1840483 -1831752 -1852831 -10308365 5123339 -5123419 5123474 1869595 1870450 1870988 1871407 8766638 -1871451 4531365 1871754 -1871783 1872850 1872873 1872901 1873051 1873079 1873215 -1873411 -4531237 1873890 -1875478 -1875687 -1875940 -1875958 1876542 1876922 1877788 -1877941 -1878470 -1878490 -1888454 1890024 5884888 1877035 5125780 1871504 -4525777 12231385 1736623 1737131 -1737491 1737509 4530608 -1740524 -1740623 1740762 1740797 -1741258 -5103451 11846897 1745781 1921064 @@ -228,8 +188,6 @@ 1922701 1923465 1923473 -1923796 -1923809 10656713 1924392 1924429 @@ -269,7 +227,6 @@ 1930916 1930923 1930931 -4535106 1931046 1931403 1931437 @@ -289,7 +246,6 @@ 1932753 1932882 1932976 -5140244 9954885 1933583 1933649 @@ -322,10 +278,8 @@ 5137827 5137828 5137849 -5805954 1920348 1920353 -1920356 1920359 1920362 1920363 @@ -346,8 +300,6 @@ 1920496 1920506 1920509 -5137926 -5137946 4535271 5137988 5137996 @@ -358,17 +310,13 @@ 5137612 5137663 1750326 -5104903 1868884 1869043 1869238 1869278 1869286 -1955202 1955694 1956897 -1957286 -8172949 1959839 1960105 1961025 @@ -380,30 +328,19 @@ 1967324 1967438 1967606 -1969581 5144691 -5144976 5145075 5145396 5145468 5145502 5145842 1973171 -1973393 -5146510 -5147046 5147058 -5147923 1978017 -5148264 1980521 1980525 1980533 -1981160 -1981202 -1982221 1982267 -1983888 1985742 4525097 6118530 @@ -418,7 +355,6 @@ 6119323 6119359 6119488 -9220953 5149664 5149787 1987602 @@ -428,7 +364,6 @@ 1942790 1942793 1943236 -8277078 8073674 1944234 1944910 @@ -442,7 +377,6 @@ 1946037 1946660 1946661 -1946738 1947112 1947113 1947117 @@ -471,7 +405,6 @@ 8352161 1766072 9105656 -5772169 5772171 5772206 1768042 @@ -480,16 +413,11 @@ 1774470 1774797 6115946 -1775329 -5111147 5772222 -1779258 1780049 -1782560 1783777 1784349 1784591 -1785145 1785181 1785185 1785329 @@ -497,19 +425,14 @@ 1786360 1787264 1787438 -1787610 4534166 4534194 -1789695 1789957 1790364 1791758 1792418 -1792996 1794507 1795068 -4532908 -4532700 9803522 1796451 4532269 @@ -522,7 +445,6 @@ 5109407 4534675 4534681 -4534683 4534686 6116440 8108800 @@ -565,9 +487,7 @@ 1893558 1893562 1893901 -1894088 8049830 -4535827 1895956 1896547 1896600 @@ -634,7 +554,6 @@ 4535754 1908356 8727750 -10656625 1909818 5133610 10203260 @@ -702,14 +621,12 @@ 5126637 1880408 1880865 -1881089 1881126 1881147 1881151 5126668 9819403 1881303 -1881362 1882110 1882884 1882905 @@ -722,7 +639,6 @@ 1883458 5127094 1884051 -1884061 1884437 1884449 1884479 @@ -737,7 +653,6 @@ 1885764 6120861 1885836 -1885994 1886015 1886088 1886104 @@ -749,15 +664,11 @@ 8955839 4531670 1887694 -1888047 1888346 1888915 1889071 -1889074 1889272 1889277 -1889356 -1889370 1889543 9228024 1890287 @@ -767,7 +678,6 @@ 1890410 1890534 1890670 -1890898 1891167 1891217 4532022 @@ -776,7 +686,6 @@ 8986756 1892456 1892476 -9181627 5771877 6133232 6121010 @@ -786,7 +695,6 @@ 1886374 1889833 5127644 -5127656 5127669 5127675 5802339 @@ -796,11 +704,8 @@ 1831136 1858674 1858930 -1859046 1859285 1859932 -1860063 -5123180 1866249 1866252 1866262 @@ -829,13 +734,10 @@ 1861584 1861592 1861644 -5123636 1862293 1862311 -1862394 1862401 1862433 -1862449 1862692 1862719 1862765 @@ -849,7 +751,6 @@ 5124088 5124093 5124109 -1864329 1864576 1864652 5124352 @@ -857,19 +758,14 @@ 1992956 1992969 6132725 -5119506 1830437 -1830457 1830459 10055273 -1856105 1857068 1857143 1857577 1857581 1857626 -1857829 -1858163 1858283 1937643 1937667 @@ -886,11 +782,7 @@ 5141234 5141248 5141250 -4690079 -5141297 1939314 -5770913 -4685980 1800642 5114409 4534796 diff --git a/dev/releases/mambo_v3/presets/tasmania.classes b/dev/releases/mambo_v3/presets/tasmania.classes index 803a7ad..6f46c28 100644 --- a/dev/releases/mambo_v3/presets/tasmania.classes +++ b/dev/releases/mambo_v3/presets/tasmania.classes @@ -1,23 +1,15 @@ 9840570 10341307 10435406 -1733504 -1832023 1832553 -1845503 -8797017 -1850156 1829866 1828456 -6196939 1828540 1828544 10833593 -5119346 5119350 5119353 1837706 -4686897 4686905 4686913 1835886 @@ -25,101 +17,54 @@ 1831458 1831499 1761751 -1761752 1761820 -1762849 -1762852 1780856 -1780860 10154280 -1782326 -1782328 5112407 5112410 1790450 1795657 -1798023 1799165 -1799167 1803197 1804430 -1805524 1806704 -1807478 -1807488 -1807491 1807503 -12214821 1809244 1809248 -10074808 -1815338 1816110 1816434 1817065 1817171 -1817217 -1819970 10274769 -10496181 -5113001 1811455 -1860849 1731906 1731923 -1731926 -1731927 1732001 1732005 -1732044 10640865 -9950697 -1833782 -4685595 -1835086 -1838071 -1839658 1840346 5123339 10005632 1870703 1872255 -1872735 -1872812 1873290 -1873373 5125600 5125629 1874146 1875534 -1876955 1890065 10211808 10526954 -9857679 1940575 -1736623 -10469532 -1737115 -1737187 -1737847 -1739051 12259151 1741074 11906255 -1743319 -1743680 9867379 1745019 -6219423 10358334 -1747639 -10355898 1748425 1748473 -1748486 9952043 -10530383 10606887 10549715 1925555 @@ -127,16 +72,12 @@ 1927894 4708927 1928923 -1931889 1932563 7346444 1752536 -1752545 1752547 1920496 1828310 -9943941 -10118678 1962159 9875141 1970485 @@ -147,7 +88,6 @@ 10634980 9213204 1955093 -1955737 10560674 11720357 9593393 @@ -156,13 +96,11 @@ 10132475 10363151 10398979 -10434798 10456933 10457796 10471477 10623003 11468089 -11638437 10257899 1956416 10167252 @@ -170,8 +108,6 @@ 1960201 1960521 5144204 -1962842 -5144353 1964066 1965643 1965650 @@ -193,10 +129,7 @@ 5146880 1975212 1975248 -10018221 10572729 -1976123 -1976142 1976341 1976342 1976890 @@ -204,18 +137,14 @@ 1978082 10530515 1978904 -1979041 1980041 1980063 1980491 10378314 10571987 -1980821 -10860751 1982024 1982055 1982085 -1982102 1982148 12116722 1985826 @@ -226,7 +155,6 @@ 5149387 1988354 1988360 -1988361 1988362 1988376 1988894 @@ -237,13 +165,10 @@ 1990167 1990255 1990256 -1990371 1991468 1992167 4702878 10078800 -8501203 -10438474 10146771 1963532 1942618 @@ -252,18 +177,12 @@ 4689912 1944523 4689905 -1946720 -1758850 1760172 1761788 1762900 1762902 1768972 -1769114 1769260 -1769271 -1769283 -1769308 1769310 4688049 4688092 @@ -272,20 +191,16 @@ 4687565 1774918 10032003 -1777120 1785149 1791793 -1795110 1798084 9890366 -11054256 1792560 1770849 1771203 1771296 10658576 1823493 -1824280 1827507 11905965 1827802 @@ -299,18 +214,10 @@ 5130456 1902244 4704500 -7642610 5102423 -1735273 -5121177 -1843313 -5120368 5120379 11563728 -11904618 10134558 -5806353 -1879405 12231152 5126376 1880982 @@ -325,77 +232,43 @@ 1882355 5126843 5126922 -5127020 -5127039 5127044 1882905 1884531 -1887036 1892462 10521368 -1831136 -1853578 1854021 1854249 -5806333 1858762 -6097269 -1862293 1862331 1754619 -1754803 1754814 4689394 1855804 -1855807 -1857020 1857033 1857180 1857829 1857882 1857935 -1858100 5803065 1838297 1838308 1833477 -1833600 1833653 1835121 1835123 1835821 1836899 -1837172 -1838333 -4686617 4686620 -4686621 -4686628 -1838960 -4528702 4685566 -1839494 5120053 -5120063 4685669 4685678 -1840258 -1840812 -1841302 -5802257 -4686016 -4686029 -4685631 4685810 4686385 4686702 -1801316 1801432 10573425 -11496990 11508472 -11698552 11836409 -11871044 1801787 -1801903 diff --git a/docs/model-presets.md b/docs/model-presets.md index 874d636..2975f93 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -6,32 +6,36 @@ These overlapping deployment presets aim to avoid most geographically nonsensica Each geographic preset applies the minimum row count shown below. Counts use all existing splits, including held-out rows, without further deduplication. Each row counts once even if it matches both a country and a continent predicate. Full uses all model species without a regional threshold. Lists retain the model's species order. +**Provisional qualification:** new presets require at least 3 regional rows and at least 25 global rows for a species. These inclusive thresholds are a working proposal, pending the final release decision. They reduce weak occurrence evidence but do not prove that records are independent or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate. + +In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the proposed global minimum of 25. Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty. + Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending. ## Presets -| ID | Species | Minimum rows per species | Selected rows | Geographic scope | +| ID | Species | Minimum regional / global rows | Selected rows | Geographic scope | | --- | ---: | ---: | ---: | --- | | `full` | 12,632 | — | — | All species in the pinned model. | -| `europe` | 3,014 | 26 | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | -| `north_europe` | 1,977 | 26 | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | -| `australia` | 1,907 | 1 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | -| `tasmania` | 401 | 1 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | -| `north_america` | 4,551 | 1 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | -| `central_america` | 2,022 | 1 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | -| `south_america` | 1,683 | 1 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | -| `caribbean` | 1,092 | 1 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | -| `south_asia` | 1,929 | 1 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | -| `asia` | 5,336 | 1 | 1,033,931 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent. | -| `japan` | 974 | 1 | 30,076 | All records assigned countryCode JP, including islands. | -| `africa` | 1,129 | 1 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | -| `subsaharan_africa` | 904 | 1 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | -| `mediterranean` | 2,874 | 1 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | -| `arctic` | 6,096 | 1 | 2,496,358 | Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter. | -| `oceania` | 2,337 | 1 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | -| `southeast_asia` | 2,031 | 1 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | -| `east_asia` | 4,447 | 1 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | -| `middle_east` | 1,330 | 1 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | +| `europe` | 3,014 | 26 / none | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | +| `north_europe` | 1,977 | 26 / none | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | +| `australia` | 1,874 | 3 / 25 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | +| `tasmania` | 274 | 3 / 25 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | +| `north_america` | 4,425 | 3 / 25 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | +| `central_america` | 1,639 | 3 / 25 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | +| `south_america` | 1,506 | 3 / 25 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | +| `caribbean` | 876 | 3 / 25 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | +| `south_asia` | 1,552 | 3 / 25 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | +| `asia` | 4,993 | 3 / 25 | 1,033,931 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent. | +| `japan` | 697 | 3 / 25 | 30,076 | All records assigned countryCode JP, including islands. | +| `africa` | 924 | 3 / 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | +| `subsaharan_africa` | 796 | 3 / 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | +| `mediterranean` | 2,680 | 3 / 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | +| `arctic` | 5,884 | 3 / 25 | 2,496,358 | Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter. | +| `oceania` | 2,273 | 3 / 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | +| `southeast_asia` | 1,672 | 3 / 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | +| `east_asia` | 4,123 | 3 / 25 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | +| `middle_east` | 846 | 3 / 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | ## Exact metadata filters diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index b913fe0..4b6b7c0 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -44,12 +44,21 @@ def test_union_does_not_duplicate_rows_and_exclusion_overrides_continent(): def test_membership_preserves_model_order_and_rejects_unknown_species(): - assert ordered_membership({"a": 26, "b": 25, "c": 80}, 25, ["c", "b", "a"]) == ["c", "a"] - assert ordered_membership({"a": 1, "b": 0}, 0, ["b", "a"]) == ["a"] + assert ordered_membership({"a": 26, "b": 25, "c": 80}, 26, ["c", "b", "a"]) == ["c", "a"] + assert ordered_membership({"a": 1, "b": 0}, 1, ["b", "a"]) == ["a"] with pytest.raises(ValueError, match="missing from model"): ordered_membership({"unknown": 26}, 25, ["a"]) +def test_qualification_requires_both_inclusive_minima(): + regional = {"boundary": 3, "few_local": 2, "few_global": 10, "strong": 5, "missing": 3} + worldwide = {"boundary": 25, "few_local": 100, "few_global": 24, "strong": 50} + vocabulary = ["strong", "boundary", "few_local", "few_global", "missing"] + assert ordered_membership(regional, 3, vocabulary, worldwide, 25) == ["strong", "boundary"] + with pytest.raises(ValueError, match="requires global counts"): + ordered_membership(regional, 3, vocabulary, global_minimum=25) + + def test_misspelled_or_empty_filter_fails_closed(): table = pa.table({"countryCode": ["AU"]}) with pytest.raises(ValueError, match="Unknown region fields"): From 2203351dbe2fc7a1453786e35b299707d7145c21 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:32:00 +0200 Subject: [PATCH 016/221] release: refine Asia and Arctic scope and visualize preset overlap --- dev/releases/mambo_v3/build_presets.py | 41 +- dev/releases/mambo_v3/plot_overlap.py | 79 + dev/releases/mambo_v3/preset-definitions.toml | 8 +- dev/releases/mambo_v3/preset-manifest.toml | 18 +- dev/releases/mambo_v3/presets/arctic.classes | 1551 --- dev/releases/mambo_v3/presets/asia.classes | 12 - docs/assets/preset-overlap.svg | 8621 +++++++++++++++++ docs/assets/preset-overlap.tsv | 362 + docs/model-presets.md | 58 +- tests/releases/test_mambo_presets.py | 23 + 10 files changed, 9166 insertions(+), 1607 deletions(-) create mode 100644 dev/releases/mambo_v3/plot_overlap.py create mode 100644 docs/assets/preset-overlap.svg create mode 100644 docs/assets/preset-overlap.tsv diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 155279a..e705724 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -23,6 +23,7 @@ def select_region(table, rule): "continents", "excluded_countries", "state_province", + "country_state_restrictions", "minimum_regional_rows", "minimum_global_rows", } @@ -39,6 +40,10 @@ def select_region(table, rule): mask = pc.and_(mask, pc.invert(pc.is_in(table["countryCode"], value_set=pa.array(values)))) if values := rule.get("state_province"): mask = pc.and_(mask, pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(values)), False)) + for country, states in rule.get("country_state_restrictions", {}).items(): + is_country = pc.fill_null(pc.equal(table["countryCode"], country), False) + in_state = pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(states)), False) + mask = pc.and_(mask, pc.or_(pc.invert(is_country), in_state)) return table.filter(mask) @@ -65,6 +70,8 @@ def recipe(rule): result = f"({result}) AND country NOT in `{', '.join(rule['excluded_countries'])}`" if rule.get("state_province"): result = f"({result}) AND `stateProvince` in `{', '.join(rule['state_province'])}`" + for country, states in rule.get("country_state_restrictions", {}).items(): + result += f"; `{country}` records additionally require `stateProvince` in `{', '.join(states)}`" return result @@ -135,9 +142,9 @@ def build(metadata, evidence_root, write=False): "", "## Presets", "", - "| ID | Species | Minimum regional / global rows | Selected rows | Geographic scope |", - "| --- | ---: | ---: | ---: | --- |", - f"| `full` | {len(vocabulary):,} | — | — | All species in the pinned model. |", + "| ID | Species | Minimum regional rows | Minimum global rows | Selected rows | Geographic scope |", + "| --- | ---: | ---: | ---: | ---: | --- |", + f"| `full` | {len(vocabulary):,} | None | None | — | All species in the pinned model. |", ] summaries = {} for name, rule in definitions["presets"].items(): @@ -168,10 +175,30 @@ def build(metadata, evidence_root, write=False): f'sha256 = "{digest}"', ] ) - gate = f"{region_minimum} / {world_minimum or 'none'}" - documentation.append(f"| `{name}` | {len(labels):,} | {gate} | {selected.num_rows:,} | {rule['scope']} |") + documentation.append( + f"| `{name}` | {len(labels):,} | {region_minimum} | {world_minimum or 'None'} | {selected.num_rows:,} | {rule['scope']} |" + ) summaries[name] = len(labels) - documentation.extend(["", "## Exact metadata filters", ""]) + documentation.extend( + [ + "", + "## Species overlap", + "", + "![Pairwise species overlap and directional coverage](assets/preset-overlap.svg)", + "", + "Left: shared species divided by the union (Jaccard similarity). Right: the percentage of each row's species " + "also present in each column. Coverage reveals containment that Jaccard can hide for small lists. " + "These compare the qualified species lists, not geographic areas or prediction accuracy. Full is omitted because " + "it contains every preset. Labels show list sizes; both panels use percentages.", + "", + "Rebuild the figure and exact shared-count/percentage table with " + "`.venv/bin/python -m dev.releases.mambo_v3.plot_overlap`. " + "The companion [pairwise table](assets/preset-overlap.tsv) includes exact counts.", + "", + "## Exact metadata filters", + "", + ] + ) for name, rule in definitions["presets"].items(): documentation.extend([f"- **{name}** ({rule['label']}): {recipe(rule)}."]) documentation.extend( @@ -181,7 +208,7 @@ def build(metadata, evidence_root, write=False): "", "Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. " "Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. " - "Arctic is a broad northern-country proxy and includes southern records from those countries. " + "Arctic uses Alaska for US records; other selected countries remain broad proxies including southern records. " "Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation.", "", "Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes " diff --git a/dev/releases/mambo_v3/plot_overlap.py b/dev/releases/mambo_v3/plot_overlap.py new file mode 100644 index 0000000..b694716 --- /dev/null +++ b/dev/releases/mambo_v3/plot_overlap.py @@ -0,0 +1,79 @@ +"""Render reproducible pairwise overlap for the pinned release preset lists.""" + +import argparse +import csv +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.audit import HERE, sha256 + +ASSETS = HERE.parents[2] / "docs/assets" + + +def overlap(left, right): + shared = len(left & right) + union = len(left | right) + return shared, shared / union if union else 0.0, shared / len(left) if left else 0.0 + + +def render(preview=None): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + manifest = tomllib.loads((HERE / "preset-manifest.toml").read_text()) + if sha256(HERE / "preset-definitions.toml") != manifest["definitions_sha256"]: + raise ValueError("Rebuild presets before plotting modified definitions") + names = list(manifest["presets"]) + sets = {} + for name, item in manifest["presets"].items(): + path = HERE / item["path"] + labels = path.read_text().splitlines() + if sha256(path) != item["sha256"] or len(labels) != len(set(labels)) or len(labels) != item["count"]: + raise ValueError(f"Preset integrity mismatch: {name}") + sets[name] = set(labels) + scores = [[overlap(sets[left], sets[right]) for right in names] for left in names] + ASSETS.mkdir(exist_ok=True) + with (ASSETS / "preset-overlap.tsv").open("w", newline="") as stream: + writer = csv.writer(stream, delimiter="\t", lineterminator="\n") + writer.writerow(["row_preset", "column_preset", "shared_species", "jaccard_percent", "row_coverage_percent"]) + for i, left in enumerate(names): + for j, right in enumerate(names): + shared, jaccard, coverage = scores[i][j] + writer.writerow([left, right, shared, f"{jaccard * 100:.6f}", f"{coverage * 100:.6f}"]) + plt.rcParams.update({"svg.hashsalt": "mambo-preset-overlap-v1", "font.size": 9}) + fig, axes = plt.subplots(1, 2, figsize=(25, 13), layout="constrained") + labels = [f"{name.replace('_', ' ')} ({len(sets[name]):,})" for name in names] + for ax, metric, title in zip(axes, (1, 2), ("Jaccard: shared / union (%)", "Coverage: row species also in column (%)")): + values = np.array([[cell[metric] * 100 for cell in row] for row in scores]) + im = ax.imshow(values, vmin=0, vmax=100, cmap="viridis") + ax.set_xticks(range(len(names)), labels, rotation=60, ha="right", rotation_mode="anchor") + ax.set_yticks(range(len(names)), labels) + ax.set_title(title, fontsize=15, pad=18) + for i in range(len(names)): + for j in range(len(names)): + value = values[i, j] + label = "<1" if 0 < value < 1 else f"{value:.0f}" + ax.text(j, i, label, ha="center", va="center", fontsize=7, color="black" if value > 55 else "white") + fig.colorbar(im, ax=ax, shrink=0.65, pad=0.015) + fig.suptitle( + "MAMBO release presets — species overlap\n" + "Qualified lists; full omitted. Regional scope and evidence thresholds differ. Coverage is directional.", + fontsize=18, + ) + fig.savefig(ASSETS / "preset-overlap.svg", metadata={"Date": None}) + svg = ASSETS / "preset-overlap.svg" + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + if preview: + fig.savefig(preview, dpi=110) + plt.close(fig) + print(f"Wrote {ASSETS / 'preset-overlap.svg'} and pairwise TSV for {len(names)} presets") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--preview", type=Path) + args = parser.parse_args() + render(args.preview) diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index 63413ac..f449707 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -59,8 +59,9 @@ scope = "Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri [presets.asia] label = "Asia" continents = ["ASIA"] -countries = ["AF", "AM", "AZ", "BH", "BD", "BT", "BN", "KH", "CN", "CY", "GE", "HK", "IN", "ID", "IR", "IQ", "IL", "JP", "JO", "KZ", "KP", "KR", "KW", "KG", "LA", "LB", "MO", "MY", "MV", "MN", "MM", "NP", "OM", "PK", "PS", "PH", "QA", "RU", "SA", "SG", "LK", "SY", "TW", "TJ", "TH", "TL", "TR", "TM", "AE", "UZ", "VN", "YE"] -scope = "All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent." +countries = ["AF", "AM", "AZ", "BH", "BD", "BT", "BN", "KH", "CN", "GE", "HK", "IN", "ID", "IR", "IQ", "IL", "JP", "JO", "KZ", "KP", "KR", "KW", "KG", "LA", "LB", "MO", "MY", "MV", "MN", "MM", "NP", "OM", "PK", "PS", "PH", "QA", "RU", "SA", "SG", "LK", "SY", "TW", "TJ", "TH", "TL", "TR", "TM", "AE", "UZ", "VN", "YE"] +excluded_countries = ["CY"] +scope = "All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan in full. Includes their European-labelled records and records with blank continent. Cyprus is excluded even when its continent is ASIA." [presets.japan] label = "Japan" @@ -88,7 +89,8 @@ scope = "Whole Mediterranean coastal countries/territories plus Portugal, Andorr [presets.arctic] label = "Arctic / broad northern-country scope" countries = ["CA", "US", "GL", "IS", "FO", "NO", "SJ", "SE", "FI", "AX", "RU"] -scope = "Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter." +country_state_restrictions = { US = ["Alaska"] } +scope = "Canada, Alaska (US records only when stateProvince is Alaska), Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. Other countries remain whole-country proxies including southern records; this is not an Arctic Circle or tundra filter. US records with blank state are excluded." [presets.oceania] label = "Oceania" diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index 26df30d..f077e73 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -2,7 +2,7 @@ schema_version = 2 qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "8c653a37a1d3c6d3ceeea05896cba7b75811a2b93f00b121e3ff2aa71302d79e" +definitions_sha256 = "adb63292c301c98daacdc611e5535cc1b70ed6183d16403559e180f6aa60e10d" minimum_regional_rows = 3 minimum_global_rows = 25 @@ -98,13 +98,13 @@ sha256 = "5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849" [presets.asia] path = "presets/asia.classes" -count = 4993 +count = 4981 minimum_regional_rows = 3 minimum_global_rows = 25 excluded_by_global_gate_after_regional = 0 -selected_rows = 1033931 -species_before_threshold = 5336 -sha256 = "e29dff2ea39343eec16e9df64f4ad05743c37799a6c7a91db9a35305ab917a6b" +selected_rows = 1031247 +species_before_threshold = 5329 +sha256 = "cf8c84f68de3576731841c341c3a249163536fe9706420e9748834fbcd4d79d3" [presets.japan] path = "presets/japan.classes" @@ -148,13 +148,13 @@ sha256 = "f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3" [presets.arctic] path = "presets/arctic.classes" -count = 5884 +count = 4333 minimum_regional_rows = 3 minimum_global_rows = 25 excluded_by_global_gate_after_regional = 0 -selected_rows = 2496358 -species_before_threshold = 6096 -sha256 = "b753af8455a3578aa2f2e1d9fbf4f349cefeb6f9fd257247027d36f1d6dad687" +selected_rows = 871155 +species_before_threshold = 4605 +sha256 = "dd43064d8896cadcbc85cacb916cd9bcc8712e4e89d93ee18af209061769bab0" [presets.oceania] path = "presets/oceania.classes" diff --git a/dev/releases/mambo_v3/presets/arctic.classes b/dev/releases/mambo_v3/presets/arctic.classes index ecd228e..2a82a4c 100644 --- a/dev/releases/mambo_v3/presets/arctic.classes +++ b/dev/releases/mambo_v3/presets/arctic.classes @@ -1,9 +1,6 @@ -12170988 1934693 1868535 10100176 -10517417 -1992315 1860621 1860628 4522795 @@ -17,8 +14,6 @@ 5123582 1860736 1732063 -5101556 -5101559 1732416 1732452 1732521 @@ -26,28 +21,23 @@ 1732662 1732685 1732717 -1732901 1733154 1733258 1733484 -1733525 4525266 4525273 5101678 5101745 5101763 -5101811 5715280 5715281 5769191 -1734384 1734453 5102242 5102304 5102324 5102335 5102365 -5102396 1734704 1734826 5102287 @@ -55,49 +45,33 @@ 4302388 1845270 1845279 -1845314 -1845329 -1845335 1845368 -1845385 -1845442 1845448 -1845455 1845502 -1845513 1845548 1845565 1845604 -1845605 1845607 4529566 4528100 1846313 -1846351 -1846439 5121847 -5121850 1846604 1846657 1846715 1846729 1846849 -1846860 -1846914 1846916 1846941 1846945 1846971 1846992 -1847013 1847059 1847061 1847064 1847068 1847097 -1847111 1847149 -1847225 1847249 1847274 1847308 @@ -105,8 +79,6 @@ 1847392 1847407 1847426 -1847457 -1847484 1847498 4528547 1847568 @@ -114,28 +86,21 @@ 9262981 8559137 1847919 -1847930 1847944 1847956 10427568 -1848114 1848150 10450501 1848219 -1848259 -1848272 1848273 1848274 1848295 1848312 1848322 -1848325 1848356 1848378 1848426 4528539 -1848490 -1848505 1848596 1848610 1848636 @@ -150,13 +115,11 @@ 1848864 1848868 1849104 -9973217 1849267 1849273 1849284 1849294 1849457 -1849470 1849477 11052757 11080751 @@ -170,9 +133,6 @@ 1850076 1850077 1850106 -1850156 -1850184 -1850225 1850238 1850246 11576787 @@ -188,24 +148,14 @@ 1850533 1850538 1850570 -1850575 -1850585 1850589 1850597 4528529 -1850673 1850690 -1850722 -1850729 1850771 -1850773 -1850774 1850781 -1850798 1850868 -1850884 1850908 -1850922 1850923 1850962 1850971 @@ -213,39 +163,24 @@ 1851002 1851010 1851011 -8986624 5122037 -5122062 5122086 5122113 -5122121 5122131 1851203 -1851213 1851220 -1851237 -1851243 1851300 1851337 1851347 -1851453 1851462 1851555 -1851670 1851714 -1851750 5122206 -1851828 -1851845 4527972 1852150 -1852165 1852177 1852311 -1852320 -1852382 1852430 -9123440 11287091 1848212 1848213 @@ -253,7 +188,6 @@ 1849498 11430021 1829533 -1829659 1829612 1829776 1829785 @@ -262,8 +196,6 @@ 1829974 8779506 4525354 -10508467 -12031071 1828637 11642411 1829021 @@ -277,21 +209,14 @@ 7448174 4525610 1861395 -1835460 1845793 -1845866 1845962 1845965 1846035 -1846052 -9159662 1846505 -10594478 -8503184 1834710 1839094 1841261 -5119890 1830838 1830843 1830122 @@ -303,7 +228,6 @@ 1830152 1830186 1830191 -1830194 1830202 1830203 1830207 @@ -330,75 +254,30 @@ 1758860 1758861 1758866 -1760384 -1760385 -1760396 -1760397 -1760398 -1760400 -5108951 -1760927 -1761101 -1761102 -1761110 1761111 1761838 -1762151 -1762286 -9553692 1762474 -8331687 -8379616 -9354496 -9546910 1764525 1764531 1765097 1765182 -5110044 -1766839 -1766845 -1766880 -1767031 -1767320 -1767508 -9384861 -1768283 -1769000 1769103 -1769336 1769841 1769897 -1770038 -1770044 -1770380 -1770383 -1770384 -1770385 11728240 7396517 -5110297 -5110299 5110305 7701550 8837162 -8963926 9256436 9279670 9283228 -9323382 9327042 -9395422 9399145 9440644 9560782 9564612 9607447 -9636442 -1771846 -1771848 -1771859 -5110326 1772260 1772427 1772428 @@ -409,31 +288,15 @@ 1772793 4532500 5110492 -1774907 9287097 1775980 -1777024 -1777034 1777052 1777075 -8345991 1777631 9257908 1777942 -1778548 -1778549 -1778551 1778555 -9423248 -9610080 -1779740 1780150 -1781029 -1781038 -7672864 -9305011 -9390065 -9630748 1781944 1781946 5112051 @@ -442,103 +305,56 @@ 5112068 5112078 5112080 -9008379 -1782208 -1782214 -1783365 1785913 1785916 -9520799 -1786219 -1786912 1786913 1786980 10860091 1787106 -11495556 -5112542 -1788278 -7346446 1788891 -1789190 1789191 1789193 -1789794 -1790230 -1790240 -1790246 -1790248 -1790257 1790258 -1790268 -1790274 1790287 5112798 1790692 -1790787 1790816 1790832 -1790937 1790945 -7785540 -9345545 -1791151 5112892 5112900 5112908 -5112911 5112915 5112917 5112923 -5112927 5112940 5112944 5112947 5112959 -5112960 5112961 -5112963 5112968 5112990 -1791372 5113078 5113084 5113234 -1792276 -9382044 1792831 5884243 -1793566 -1794518 -10850929 1795042 -1795045 -1795049 -9340452 -9622322 -1796257 -1796288 -1796338 1797111 -1797121 1797122 1797135 1797137 1797146 1797178 -1797194 -1797198 1797206 1797210 1797218 1797252 1797257 1797258 -1797275 1797276 1797285 1797290 -1797296 1797300 1797339 1797344 @@ -558,7 +374,6 @@ 1797445 1797454 1797464 -1797474 1797475 1797478 1797479 @@ -569,10 +384,7 @@ 4532471 8355390 8756768 -8874140 9022399 -9236138 -9240357 9252524 9273409 9289908 @@ -584,39 +396,28 @@ 9367471 9406020 9410076 -9416645 9455404 9468297 -9483647 -9547311 9549475 9554074 9560404 -9604825 9607036 -9611624 9618068 9622725 -5113950 -7598729 1798346 1798393 1798402 1798408 -1798427 1798449 1798504 1798594 1798802 1798807 4532351 -4532352 4532357 8150450 -8793873 9238900 9243875 -9292394 9314022 9353360 9358521 @@ -629,14 +430,10 @@ 9608673 9621113 9626500 -1799183 1799703 1799708 9249036 -1803127 1803163 -1803218 -10033898 5114892 5114903 11713970 @@ -647,119 +444,57 @@ 1803824 1804071 1804074 -1804331 -1804394 -1804398 -1804401 -1804404 -1804407 -1804409 1804512 -1804513 -1804759 1804906 11508076 -11907485 1804963 -1804969 -1804971 1804974 -1805197 -1805537 1805540 -1805542 1805549 -1805682 1806145 1806170 1806176 -1806702 1806737 1806740 9235225 9278398 9394138 9417594 -9491341 9541734 -9565980 -9588105 -1806872 7874258 -1807271 -1807273 -5115500 1807881 -1808088 1808195 1808286 1808348 1808450 -1808590 -1808592 1808752 5115701 5115771 -8929537 5115777 -1809127 -1809135 -9463067 1809210 -1809299 -1809305 -1809348 -1810025 1810099 1810469 -5116128 -5116293 -1810743 -9389851 -7535515 -1811019 1811079 1811122 -5116332 -5116338 5116353 -5116358 5116416 1813114 1813248 5117189 7656811 -1814336 1814338 -1814357 -1814359 1814365 1814630 1814653 -1814800 -1814827 -1814838 1814843 -1814863 5117399 5117400 -9434954 -5117430 1816881 -1817690 -1817693 1817696 1817727 1817729 1817732 -1817734 -1817749 1817797 -1817940 -5118046 -11758730 -1818454 -1818463 8326103 1819145 4532293 @@ -773,20 +508,14 @@ 7657803 8361973 8720118 -9391467 -9568710 1820372 1820406 1820450 -1820711 1820714 1820722 1820764 1820791 -1820940 -1821051 1821113 -8178238 10551407 12253343 5884571 @@ -808,21 +537,6 @@ 9400545 8148822 11962292 -8774985 -8908724 -9135886 -9247563 -9288596 -9290866 -9315577 -9334851 -9406984 -9432644 -9452274 -9526331 -9552703 -9555094 -9599150 12135372 5115854 5115872 @@ -841,19 +555,15 @@ 9498206 9552466 9627917 -5114949 -5114950 5114956 5116698 1788711 1788717 7560807 -9301336 5114912 5114915 5114921 1788635 -1781413 1781420 4532405 4532408 @@ -867,33 +577,22 @@ 8905759 9051758 9254017 -9298735 9324570 9368974 -9443159 9469928 9488783 9637664 1793538 -1793542 -1813468 -1813413 1813415 -1760233 1760246 -1760257 -9235027 5113030 5113036 -9522383 -5109796 1821856 1821940 6122364 1775796 1811814 1811948 -1812026 1812105 1812207 1812262 @@ -902,33 +601,22 @@ 8237987 4532366 5884258 -7716829 -8968321 9451320 1820039 1784959 -1785024 -1785072 -6117485 6132916 1771772 1771779 -1780617 1780646 1780668 -1780676 -1777463 1777471 1777517 -5112440 1791735 1791736 -1860974 1860979 1860983 1860987 1860989 -1860993 1860996 1861030 1861031 @@ -959,7 +647,6 @@ 1835456 1835457 9724183 -1835467 1835819 10610041 1837343 @@ -971,10 +658,7 @@ 4529064 7958169 8015612 -10017792 -1838360 1838465 -1838512 1838584 1839293 1839296 @@ -1006,13 +690,11 @@ 1841081 1841084 1841091 -10187154 5119808 1831752 9473121 1852901 4529630 -9851261 5125075 5125104 1869359 @@ -1031,60 +713,48 @@ 10165831 1860408 4525177 -1860443 10308365 5123339 9913863 5123394 -5123419 5769164 5123461 5123474 1735408 -4302389 1751207 1751216 -8797666 1869666 1869803 1869825 1869852 1869976 1870017 -1870037 1870202 1870249 1870250 1870267 1870415 -1870426 1870450 -1870607 1870650 1870721 1870727 1870733 -1870751 1870777 1870988 1871160 1871175 1871212 1871252 -1871379 10246305 10588642 10817208 1871407 4531402 -8766638 9944922 1871414 1871419 1871457 1871509 -1871560 -1871597 1871683 1871698 1871763 @@ -1092,41 +762,25 @@ 1871826 1871890 1871923 -1871940 1872200 -1872210 10336328 -1872452 1872456 1872466 1872514 -1872515 10787705 1872848 -1872873 1872901 1872904 1873048 1873079 1873215 -1873267 -1873319 -5125545 -10807383 -1873376 -1873381 -1873383 1873384 1873411 -1873585 -7372375 1873753 4530947 -10143814 10165457 10366580 10410048 -10518163 10561589 1873776 1873780 @@ -1142,24 +796,19 @@ 1874204 1874211 1874248 -1874257 1874274 1874279 4531145 4531147 4531158 -1874317 1874375 -1874513 1874552 10244305 1874743 9782192 -1874901 1875008 1875120 8219149 -1875196 1875319 1875327 1875376 @@ -1169,7 +818,6 @@ 4531242 1875478 1875483 -1875485 1875606 1875607 1875631 @@ -1191,33 +839,17 @@ 1876409 1876512 1876542 -1876548 -1876549 1876623 -1876665 1876854 -1876987 -10142569 -1877002 1877038 -5125916 -5125917 -1877282 1877310 1877321 1877338 1877341 1877353 -1877364 1877365 1877368 -1877372 4531246 -1877443 -1877492 -1877537 -5125939 -1877643 5126000 5126013 5126052 @@ -1229,26 +861,18 @@ 4531417 1878158 1878370 -1878392 1878470 1878490 1878586 -5976937 -5884888 1875885 -1873697 1872315 1748805 -11950325 -12018158 -12060941 12087490 1939962 1939964 1940110 4525884 11667300 -5131957 5141493 5141501 5714558 @@ -1261,15 +885,9 @@ 10509408 1940510 1940517 -1940546 1940575 -1940580 -1940601 1940604 -1940609 -1940612 1940639 -1940694 1940717 1940744 1940757 @@ -1284,22 +902,16 @@ 1941377 1941437 12211069 -10495733 -10584071 -12252570 1941266 1941294 -1941299 1939833 1939879 9146244 1736315 1736377 -1736390 1736412 1736425 10132596 -11645405 1736484 1736499 1736511 @@ -1307,7 +919,6 @@ 1736560 1736601 1736623 -10274976 5102628 5102635 5102637 @@ -1323,10 +934,7 @@ 10355428 1736803 1736807 -1736809 -1736811 1736821 -1736826 1736836 1736860 10638589 @@ -1340,11 +948,8 @@ 1736939 1736945 4530406 -1736995 -1737015 4529931 1737072 -1737131 1737231 1737342 1737368 @@ -1372,14 +977,11 @@ 1737893 1737904 1737924 -1737929 1737964 -1737968 1737973 1737978 4530002 8186212 -8485254 1738050 1738218 1738222 @@ -1399,7 +1001,6 @@ 5102782 5102807 5102809 -5102830 8420632 8869900 9953996 @@ -1411,7 +1012,6 @@ 1738777 1738791 1738794 -1738809 1738839 1738883 1738888 @@ -1422,10 +1022,7 @@ 1739128 1739272 1739284 -1739290 1739337 -1739362 -1739364 1739377 1739381 1739400 @@ -1441,7 +1038,6 @@ 1739646 1739656 1739668 -1739677 10229731 1739727 1739748 @@ -1497,19 +1093,15 @@ 1740567 1740570 1740623 -8094357 1741056 1741130 -1741131 1741253 -1741324 1741340 1741341 1741361 1741368 4530151 8345820 -1741398 1741400 5103066 5771357 @@ -1531,11 +1123,8 @@ 1741765 1741812 1741818 -1741820 1741823 1741824 -1741826 -9880932 10807169 11093909 1742081 @@ -1562,7 +1151,6 @@ 1742287 1742293 1742304 -1742310 1742335 1742346 1742402 @@ -1571,7 +1159,6 @@ 10137001 10194727 10395101 -10695966 11508404 11899754 5103394 @@ -1587,10 +1174,6 @@ 1743196 8313553 10534945 -1743323 -10095278 -10134865 -11923027 5103998 7661023 1743453 @@ -1598,19 +1181,15 @@ 1743475 7877231 10073044 -10295171 10365884 10388627 10446580 10539598 -12197284 1743532 1743588 1743604 5104056 5104063 -5104088 -5104093 5104116 6097235 9051888 @@ -1620,7 +1199,6 @@ 1743643 1743653 1743657 -1743658 1743663 1743694 1743710 @@ -1641,11 +1219,8 @@ 1743862 1743867 1743898 -10205587 10450442 1744071 -10271464 -1744130 1744136 1744180 5104157 @@ -1653,7 +1228,6 @@ 1744224 4530632 1744416 -12276630 1744498 1744526 1744542 @@ -1723,7 +1297,6 @@ 8369868 9991710 1745925 -1746000 10593489 1746027 1746068 @@ -1736,7 +1309,6 @@ 1746666 1746689 1746695 -1746751 1746754 1746763 1746774 @@ -1746,14 +1318,12 @@ 1746856 1746859 1746876 -1746881 1746898 1746910 1746927 1746949 4302199 4302202 -1747024 1747050 1747140 1747141 @@ -1762,7 +1332,6 @@ 1747155 1747160 1747161 -1747163 1747166 1747171 1747188 @@ -1773,14 +1342,12 @@ 12107129 12126779 1747196 -9040133 9896144 5104442 10380465 10445629 10446898 10481441 -10503464 10547716 10776919 12223349 @@ -1790,7 +1357,6 @@ 4530138 5104558 1748109 -1748148 1748149 1748151 1748152 @@ -1800,12 +1366,10 @@ 7588222 9242559 1748456 -9176043 5104641 8691947 10580256 9911298 -9948031 10002059 8734154 8843927 @@ -1815,7 +1379,6 @@ 5103118 5103121 5103154 -5103166 5103176 5103181 5103183 @@ -1849,15 +1412,12 @@ 4525547 4525557 4525562 -4299071 -1920844 1920851 1920864 1920889 1920892 1920900 1920996 -1921123 1921239 1921240 1921247 @@ -1867,45 +1427,29 @@ 7387466 1921910 1922038 -1922039 1922041 -1922044 1922049 -1922219 1922223 10442031 1922311 1922343 8016522 -1922455 1922584 4535092 -1922676 8782891 -1922851 -1922865 -1922889 1922937 5138298 5138387 5138543 5138561 5138602 -5714679 5714680 -5714689 9002107 -1923498 -1923505 -1923678 -1923679 1923796 1924050 1924057 1924097 1924106 -1924176 -12174634 12185456 12188086 12205404 @@ -1914,16 +1458,10 @@ 12229400 12233602 12250854 -12257418 12258984 12265590 1924223 -1924232 5138681 -1924513 -1924518 -1924521 -1924713 1924770 1925221 1925233 @@ -1933,209 +1471,112 @@ 1925454 1925458 1925498 -1925500 1925501 1925509 -1925515 -4300384 -4300393 -4300399 12195040 1925918 1925922 4300000 -4300011 4300012 1925962 -12219036 1926001 1926009 -11797637 1926054 9816676 1926324 -4300259 1926823 1926834 1926861 -1927301 -1927302 5139026 5139029 5714747 5714755 5714788 5882965 -5139034 -1927909 -1927988 -4300406 -1928214 -1928215 -8846776 1928248 5139064 5139156 -1928584 1928945 1928960 -1929129 11720834 1929270 1929659 1929697 5139346 5139540 -5139578 5139700 5714618 8356768 -1929772 -1929962 -1930079 1930110 -1930178 1930183 -1930263 -1930288 -1930331 -1930361 -1930391 -1930422 1930481 -1930563 -1930581 -1930653 -1930660 1930678 -1930830 4535106 1931116 -1931126 8643155 1931179 -1931310 1931509 1931553 1931561 1931779 1931784 1931787 -5139909 10113190 10357476 10570752 -11417741 -11802190 1932056 -1932172 -1932175 -1932386 -1932406 -1932409 1932411 -1932414 1932417 1932428 4300277 -4300363 -7346444 -1932879 1932960 -5140033 -5140054 -5140063 5140214 5140244 5140436 7634721 7664111 1933793 -1933998 -1935884 -1935899 -1935904 -1935931 1926260 -4300268 11874998 1933095 1933138 1924494 1752111 9776414 -1752281 1752285 -1752286 1752825 -1752832 -1752894 -1752923 -10376685 1753105 1753106 1753111 5105365 -5105369 -5105376 -5105469 5105508 -11014495 -1753668 5105588 1753922 1753929 5105603 -10515719 4522322 10413588 -10514620 -5105336 5105339 5105344 -5105352 5806127 5137511 -5137512 -1919128 -1919130 -1919145 -1919149 -5137540 1919316 1919320 1919326 1919327 1919328 -1919338 -1919646 -1919652 -1919653 -7661785 1919700 -1919701 -1919702 -1919705 -1919711 1919712 1919719 1919720 1919939 -1919943 -1919947 -1919949 1919966 -1920192 1920237 1920247 1920259 5137791 -5137800 5137802 5137803 -5137817 -5137819 -5714819 1920494 1920496 1920506 @@ -2147,15 +1588,9 @@ 5137908 5137912 5804895 -1920571 -1920574 -1920581 -1920691 1920711 1920712 -1920803 1920809 -1920810 5714914 5137573 5137578 @@ -2163,10 +1598,7 @@ 5137595 5137601 5137612 -5137615 -5137626 5137636 -5137659 5137664 5137672 5137674 @@ -2182,9 +1614,6 @@ 5137714 5803588 8203812 -12206386 -12236627 -1920621 1920218 1748890 1748922 @@ -2202,7 +1631,6 @@ 1749869 1749921 1749929 -1749936 1749948 1749954 1749959 @@ -2236,19 +1664,15 @@ 9942354 1750924 1751051 -1751146 5104759 1751163 1749591 1749608 1749635 -1749656 8741260 -11840028 1735532 4527339 4527342 -1758461 1731826 1731837 1731860 @@ -2262,8 +1686,6 @@ 5143477 1954930 1954933 -1954992 -1954993 1955497 1955498 5143651 @@ -2271,8 +1693,6 @@ 5143675 5143697 5143703 -1956098 -1956215 1956440 1956462 1956505 @@ -2283,7 +1703,6 @@ 1956626 1956710 1956716 -8793973 1956904 4525068 1957266 @@ -2308,8 +1727,6 @@ 5143947 5143952 1958024 -1958049 -5143960 5143964 1958121 1958323 @@ -2318,8 +1735,6 @@ 1959395 1959461 1959467 -1959543 -1959637 1959682 1959735 1959858 @@ -2332,7 +1747,6 @@ 1959934 9320916 1960023 -1960503 1960617 1960632 1960854 @@ -2345,11 +1759,8 @@ 4302240 9468667 1961361 -1961388 1961718 -1962051 1962076 -9368382 9592714 1962204 1962265 @@ -2369,27 +1780,21 @@ 1962860 1962895 1962900 -1962925 1962990 1963011 4302252 -1963052 1963168 1963201 -1963207 1963212 12214993 1963306 -1963433 1963446 1963463 -1963619 1963709 1963710 1963848 1963854 1963874 -1963879 1963892 1964041 1964191 @@ -2404,21 +1809,14 @@ 1964715 5144424 5144426 -1965024 -1965038 1965058 -1965069 1965078 -1965100 5880367 -6214734 1965166 1965197 1965208 1965586 -1965671 1965697 -1965699 1965763 1965777 1965794 @@ -2438,23 +1836,16 @@ 1965996 1966017 5144457 -1966185 -1966195 -1966198 5144534 1967011 -1967127 -1967128 5144543 1967212 -1967226 1967240 1967245 9277294 9492499 1967265 1967273 -1967433 1967597 1967803 1967815 @@ -2464,12 +1855,10 @@ 5144564 5144575 8793278 -1968315 5144583 5144588 5144593 5144596 -5144597 1968867 1968942 11598540 @@ -2477,7 +1866,6 @@ 1969291 1969954 1969961 -1969978 1970119 1970213 1970227 @@ -2489,25 +1877,18 @@ 5144782 5144787 5144805 -5144870 5144900 5144935 5144953 5145009 -5145078 5145136 -5145139 5145186 -5145238 5145260 5145269 5145409 -5145466 5145521 5145522 5145547 -5145560 -5145713 5145729 7700568 9627567 @@ -2517,7 +1898,6 @@ 1971995 1971998 1971999 -1972010 1972120 1972185 1972187 @@ -2532,36 +1912,25 @@ 5145998 5146030 5146082 -5146091 7541913 7960566 1972434 1972447 1972449 1972454 -9558845 -5146179 -1972691 1973146 1973147 1973164 -1973165 -1973245 1973414 1973487 -1973493 -10404426 5146496 -5146497 5146559 -5146598 5146599 5146601 5146611 5146659 5146677 5146762 -5146820 5146832 5146833 5146837 @@ -2569,14 +1938,10 @@ 5146883 5146946 5146961 -5147018 5147039 5147062 -5147114 -5147139 5147150 5147171 -5147179 5147193 5147208 5147211 @@ -2586,14 +1951,10 @@ 5147441 5147478 5147516 -9370933 -9469300 -9590066 1975198 5147608 5147638 1975341 -1975365 1975546 1975553 1975571 @@ -2609,19 +1970,13 @@ 1975892 1975897 1975903 -1975914 -1976073 -8793324 1976163 1976248 1976333 -8820198 5147681 -5147703 5147713 6097233 7973517 -1976651 1976993 1977003 1977007 @@ -2634,7 +1989,6 @@ 5147858 5147868 5147871 -5147879 5147883 5147894 5147898 @@ -2644,7 +1998,6 @@ 5148184 5769028 5148247 -9617496 1977962 1977967 1978056 @@ -2652,10 +2005,7 @@ 1978114 1978375 1978445 -9308082 1978493 -1978494 -1978526 4524636 4524638 4524890 @@ -2663,8 +2013,6 @@ 1978751 1978776 1978821 -5148277 -5148280 5806132 1978977 5148286 @@ -2679,14 +2027,11 @@ 1979473 1979475 1979501 -1979721 1979726 1979781 1980025 -1980245 1980247 1980250 -1980290 5148379 5148436 5148462 @@ -2695,28 +2040,14 @@ 1980505 1980509 1980521 -1980559 8421569 1981144 -1981160 -1981161 -1981162 -1981191 1981202 -1981209 -1981210 1981222 1981258 1981277 -1981280 -1981281 -1981284 -1981312 1981696 -1981718 10247981 -1981951 -1981959 5148520 1981998 1982406 @@ -2738,7 +2069,6 @@ 1982824 1982867 1982885 -1982898 1982951 1983000 1983052 @@ -2747,16 +2077,13 @@ 1983260 1983263 1983288 -1983434 1983441 1983442 -1983491 1983525 1983548 1983558 1983648 1983705 -1983709 1983755 1983799 1983896 @@ -2764,8 +2091,6 @@ 1983997 1983999 1984033 -1984073 -1984110 1984117 7752082 7993353 @@ -2777,21 +2102,13 @@ 5148531 5148544 5148576 -9237621 9307713 9370312 -9424464 -9488754 -9544337 -9610059 5148719 5148743 5148753 5148766 5148850 -5148934 -5148952 -5148954 1984654 9382415 1984734 @@ -2799,8 +2116,6 @@ 1984949 1984954 1985405 -1985406 -1985409 1985421 1985423 9332369 @@ -2808,8 +2123,6 @@ 1985522 5149237 1985945 -1985952 -1985956 1986004 1986020 1986040 @@ -2834,7 +2147,6 @@ 5149315 1986998 4302274 -5149317 1987145 1987146 5768880 @@ -2857,27 +2169,18 @@ 1989083 1989084 1989428 -1989538 -1989582 1989903 1990066 1990150 1990155 1990198 -1990200 -1990270 -1990331 -1990335 -1990357 1990551 1990582 -1990594 1991012 1991179 1991280 1991281 1991289 -1991294 1991295 1991298 1991299 @@ -2890,12 +2193,9 @@ 5149836 5149843 1992066 -1992172 12010643 -12225687 5880512 5880533 -5880539 5880545 5880550 5880552 @@ -2908,19 +2208,13 @@ 9110918 9243319 9251088 -9259786 9261296 9272461 9311081 9330467 -9339487 9366016 9368398 -9392058 9392076 -9400977 -9402536 -9413168 9419734 9428900 9438677 @@ -2929,25 +2223,19 @@ 9474405 9489399 9502724 -9530135 9532702 -9558873 9574939 -9616438 -9624918 9632824 5769062 5769068 5769072 7429212 4524740 -5144381 5144386 5144407 9533293 7990739 4302221 -9621086 4302230 4523556 4523560 @@ -2958,17 +2246,13 @@ 4524822 4523522 9281181 -9352348 9352978 9403481 9436173 -9448761 9453490 -9494431 9516038 9516680 9523379 -9534291 9545331 4524070 4524072 @@ -2980,26 +2264,16 @@ 9288979 9307098 9423863 -9497623 -9581695 -9619088 9273963 -9479525 -9237031 9274899 9321500 -9299326 -9309575 6133540 -9415669 5144190 5144196 5715276 5146412 5715275 1978197 -9363893 -9391442 5149499 7769543 4523880 @@ -3012,7 +2286,6 @@ 5149746 5149753 5149768 -5149777 5149780 5149782 5149819 @@ -3023,159 +2296,51 @@ 5146342 5146379 5146389 -1980462 1972942 4302268 4524393 9291092 -12200261 11654707 -11776315 11834445 -11892494 11670842 -12247340 -12252340 -12239491 12258146 -1942141 -1942171 -12286003 -1942416 -1942509 -4301744 -4301749 -1942670 -5141662 1942697 5141677 1942945 1942947 1942964 1942967 -1942971 -1942980 -1942982 1942994 -5141697 -1943054 -1943066 -4302008 -5141743 -5141763 1943397 8178854 8277078 -1943563 1943571 -1943573 -1943588 -4301355 -1943631 -1943655 -1943673 -1943823 -1943824 -1943830 -1943901 -12198522 12233808 -1943942 1943953 1943954 1943960 -1943962 1943964 1943990 -1944004 8133678 8273661 -1944283 -1944286 -1944314 -1944324 -1944574 -4301934 -1944815 -5141913 1945066 -1945081 -1945302 -1945476 -1945477 1945569 -1945605 -4301942 -1945957 -1946074 -1946078 -1946079 5142061 -5142062 -1946333 -1946469 -12223105 -12233838 1946495 1946500 -1946509 -4302101 -1946550 -1946577 1946610 -1946612 -1946618 1946628 7346354 -1946737 -1946810 -1946853 1946865 7389824 -11753578 -1946980 -1946981 -1946983 -1946989 -1946991 -1946992 -1946995 1946999 -1947037 -1947055 1947282 1947306 1947333 1947335 -1947507 -1947568 -1947577 -1947587 -1947597 1947740 -1947842 -1947894 1947915 -12208168 -1947976 -1948054 -1948158 -1948439 -1948446 -4301945 1948826 -1949049 -1949285 -1949331 -1949449 -1949451 -1949466 -1949512 -1949520 -1949544 -1949545 -1949549 -1949687 1949697 1949784 1949794 @@ -3187,82 +2352,35 @@ 5142372 5142394 5142424 -5142436 5142499 -5142583 5142599 8109173 -1950017 -1950044 1950047 -1950133 -11967675 -1950384 1950396 -1950408 -1950409 -1950567 -1950578 -1950654 -1950856 -1951116 -1951121 -1951125 -1951133 1951217 -1951218 -4301897 5715127 -12180041 -12206694 1951340 5977179 -5977185 -5977197 -5977203 5977207 5977208 5977214 -5977216 5977220 5977235 5977250 5977251 5977257 -5977259 5977260 5977261 5977262 8270406 -5142249 5142254 -5142267 5142269 5142273 -5142278 -5142283 -5142298 5142300 -5142314 -5142317 5142319 -5142322 -5142328 7633472 -1948771 1948774 -1948779 -1948789 -1948799 -1948800 -1948802 -1948803 -1948804 -1948808 1948809 -1948810 -1945374 -1945378 5142006 5142032 5142042 @@ -3273,16 +2391,9 @@ 9359597 1735844 9400895 -9245604 10963226 10982815 5109821 -1758767 -1758771 -1758781 -1758783 -7911151 -9366762 9445489 5108416 5108417 @@ -3333,13 +2444,9 @@ 1759691 1759694 1759719 -1759799 -1759881 9306367 1760104 1760261 -1760309 -1760361 1760454 1760455 1760593 @@ -3353,16 +2460,12 @@ 4533255 5108957 1761041 -1761143 1761392 1761438 1761498 -1761553 -1761563 1761798 1761892 9418549 -9616055 1762244 1762608 1762609 @@ -3377,19 +2480,12 @@ 5109596 5109599 5109614 -5109651 5109661 5109670 5109722 -9337858 1763610 -9328683 -9438913 1764238 -1764691 -1764693 1764716 -1764917 1764929 1765010 1765011 @@ -3399,17 +2495,11 @@ 4534245 4534257 1765172 -5109829 5109845 -5109848 -5109850 5109852 5109855 5109881 -5109954 -5109958 8352161 -1765733 11487320 1765767 1765769 @@ -3424,7 +2514,6 @@ 1766193 1766205 1766210 -1766237 1766274 1766287 1766392 @@ -3449,21 +2538,15 @@ 1767335 1767336 1767337 -1767338 1767347 7598945 9062262 1767484 9471709 1767511 -1767571 -1767579 -1767584 -9511345 1767597 1767602 1767608 -1767612 1767625 1767628 1767655 @@ -3480,12 +2563,10 @@ 7388922 8045644 9381852 -1767719 1768117 1768132 1768150 1768172 -1768174 5110200 1768341 5110213 @@ -3502,8 +2583,6 @@ 1769566 1769592 9373686 -1769814 -1769934 1769947 1769958 1770132 @@ -3517,7 +2596,6 @@ 1770573 4532696 8393221 -1770659 1771385 1771391 1771441 @@ -3527,17 +2605,11 @@ 1771872 1771997 1772013 -9242609 9244973 9254157 -9396755 -9463442 9476708 -9495306 9562175 9616658 -9625112 -9630930 9633562 1772043 1772169 @@ -3564,7 +2636,6 @@ 1773315 1773328 1773484 -1773510 1773577 1773662 1773677 @@ -3578,31 +2649,22 @@ 9367674 9399288 9593475 -1773783 -1773784 9283948 -9560018 1774092 1774095 9322646 -1774243 1774253 1774254 1774262 -1774268 9243117 9409309 9550265 1774272 1774314 1774347 -1774358 -1774792 -4301304 6115953 1775046 1775055 -9547676 1775089 1775112 1775118 @@ -3612,7 +2674,6 @@ 1775290 1775291 1775508 -1775509 5110593 5772269 1775672 @@ -3621,7 +2682,6 @@ 1775866 1775891 4534719 -1775970 1776067 1776167 5110670 @@ -3638,24 +2698,17 @@ 1776415 1776459 1776462 -1776467 -1776470 -1776472 1776473 1776476 1776618 1776619 -1776861 1776862 1776871 1776880 4534463 -1777139 1777253 1777261 5110818 -1777730 -9310286 5110863 5110871 5110885 @@ -3685,21 +2738,15 @@ 4534299 1778127 1778143 -1778337 1778517 -1778534 1778596 1778688 -5111076 5111139 -5111141 5111343 5111360 5111372 5111397 5111521 -5111528 -5111546 5111568 5111574 7593392 @@ -3715,47 +2762,28 @@ 1779709 1779713 1779959 -1780209 1780213 -1780214 1780215 -1780272 1780309 1780313 -1780326 -1780330 1780344 1780378 -1780390 -1780414 1780437 -1780440 -1780450 8802610 -9284849 1780852 1781008 4533325 -7825945 -9374443 -9392614 5111956 1781692 1781694 1781819 -1782031 1782319 -1782422 -1782424 1782523 1782542 1782560 1782579 1782585 1782595 -9289753 -9433772 -9525172 1782615 1782622 1782627 @@ -3764,7 +2792,6 @@ 1782682 1782689 1782700 -1782705 1782706 1782707 1782708 @@ -3775,7 +2802,6 @@ 1782744 1782745 1782747 -1782762 1782763 1782776 1782777 @@ -3797,7 +2823,6 @@ 1782921 1782927 1782928 -1782934 1782948 1782961 1782972 @@ -3807,7 +2832,6 @@ 1783008 1783013 1783016 -1783035 1783037 1783043 1783045 @@ -3815,13 +2839,9 @@ 1783059 4301044 9581976 -1783313 -9457757 -9500945 1783371 1783372 1783373 -1783376 1783378 5112153 5112155 @@ -3838,41 +2858,23 @@ 5112377 5714951 5714973 -5714984 5714994 5715004 5772349 5772351 7921916 8043500 -1783811 -9348210 -9465978 -9492640 -1783841 -1783842 1783855 1783861 1783940 1783971 -1784276 -1784278 -1784281 -1784282 -1784283 1784359 -1784422 -1784461 -1784582 -1784610 -9320776 1784688 5112414 1784826 1784853 4534290 1784893 -1785145 1785168 1785185 1785280 @@ -3884,12 +2886,10 @@ 1785331 1785399 1785403 -9636267 1785728 1785730 1785732 1785733 -7400814 9250744 9329292 1785875 @@ -3908,7 +2908,6 @@ 1786017 8292872 1786035 -1786036 1786308 1786360 1786455 @@ -3918,9 +2917,6 @@ 1786566 1786567 1786619 -1786691 -1786733 -1786808 1786902 1786918 1786936 @@ -3929,7 +2925,6 @@ 1787213 1787267 1787381 -4687681 9305798 1787400 1787417 @@ -3957,7 +2952,6 @@ 1788485 1788522 1788673 -1788677 1788679 1788680 1788681 @@ -3972,11 +2966,9 @@ 1789086 1789155 9612009 -1789212 1789267 4533924 9248329 -9449132 1789481 1789505 1789553 @@ -4006,9 +2998,7 @@ 1790160 4533115 8047343 -9092175 9410414 -1790339 1790343 11693171 1790359 @@ -4027,11 +3017,9 @@ 1791593 1791680 1791784 -1791862 1792061 1792072 1792073 -1792087 1792091 1792095 1792096 @@ -4064,8 +3052,6 @@ 1792485 1792497 1792517 -5113365 -9240216 1792817 9233420 9539292 @@ -4090,7 +3076,6 @@ 1794510 1794590 4301238 -11781335 1795215 1795282 7869346 @@ -4107,7 +3092,6 @@ 1796032 1796035 1796040 -1796051 1796100 1796117 1796139 @@ -4125,27 +3109,19 @@ 9541908 1796217 7780930 -1796274 -1796276 -7689966 -7882824 8405656 -9256638 9327259 9589234 -1796310 1796312 1796423 1796463 8105817 1796678 1796686 -1796842 1796958 1797587 1797592 1797593 -1797595 1797601 4301242 4301249 @@ -4159,7 +3135,6 @@ 1798371 1798372 1798375 -1798419 11992983 1798916 1798931 @@ -4170,36 +3145,21 @@ 1799135 5113985 5114011 -5114021 5114039 -5114043 5114081 5114083 5114096 5114107 5114128 5114151 -5114159 9500553 -1799433 -1799675 -1799680 1799701 9368026 -9593098 -1799774 -9388726 -9571514 1799799 1799870 -1799877 1799880 1799884 -1799894 -1799900 1799901 -1799911 -1799917 1799925 1799938 1799944 @@ -4228,52 +3188,24 @@ 4301307 8751100 9395261 -9564779 4532811 -12103087 4534663 -7558165 -8050639 -8440999 -8551997 -8562506 -8647523 -8761810 -8781370 8998296 -9042018 -9163659 -9241105 9247947 9255102 -9261458 -9281907 9288185 9291297 9362785 -9373309 9390293 -9424681 -9452702 9474256 9481002 -9484411 9485070 -9488551 9530271 9530928 -9533506 -9534429 9544558 -9545480 -9552253 -9573163 9577379 9590907 -9591877 -9594509 9595155 -9602019 9634575 4533273 4534540 @@ -4296,31 +3228,17 @@ 4534408 4534458 4534533 -9248830 -9363692 -9556427 -9597741 -9503548 9415435 9424082 9610447 -7589577 -7779226 -8818378 -8928353 -9538684 9486411 7717385 8424964 9511749 5883985 -6132781 -10118643 9875111 9342344 8021109 -9496896 -9629365 11478679 9478331 5108640 @@ -4332,31 +3250,13 @@ 5114198 11452421 11466090 -11470672 11590674 -11615055 -11619030 -11626773 -11627464 -11660145 -11713256 11749278 -11753804 -11781300 -11859640 -11887065 1763072 5109299 -5109369 -5109413 5772063 -8755207 -8943174 9038042 -9307254 9334639 -9387782 -9404919 9506719 5112130 5112131 @@ -4366,10 +3266,8 @@ 4534686 9244066 9551316 -7398419 1792564 8108800 -1800130 1800140 1771634 1771650 @@ -4377,13 +3275,11 @@ 1771698 8581601 9623131 -1774929 1770772 1770828 1770869 1770880 1770918 -1770955 1771019 1771040 1771055 @@ -4394,7 +3290,6 @@ 1771245 4533714 7940536 -1765751 5113847 5113853 5772309 @@ -4402,27 +3297,19 @@ 5108670 5108761 9374637 -9586329 -1768196 1768199 1768201 -11783188 4534525 1773904 4533347 4533360 9490756 -1797903 4532203 4532239 4532253 4532260 -6115793 -6115822 8103163 11501104 -1776094 -9354669 10714961 10867462 1822346 @@ -4448,16 +3335,11 @@ 1822830 1822848 1823294 -1823637 1823726 -1824080 7875265 -1824259 1824390 1824442 -1824449 1824571 -5118828 1825064 1825077 1825083 @@ -4466,7 +3348,6 @@ 9426054 1825156 1825176 -1825218 1825428 1825430 5118892 @@ -4488,22 +3369,15 @@ 1826156 1826163 1826164 -1826167 1826169 -1826172 1826173 1826175 -1826181 5118996 1826222 -5119009 5119011 5119013 5119016 5119026 -5119039 -5119046 -5119050 10115073 9807789 1827103 @@ -4518,28 +3392,17 @@ 9883140 5119245 1827645 -1827716 -1828105 1828162 4534872 -1828268 6201790 -9454052 9255512 -1892729 -4299095 -5127805 1893137 -5128005 -5128007 -5128034 1894102 1894164 1894268 1894293 1894298 5882039 -1894329 1894342 7712938 1894714 @@ -4567,32 +3430,21 @@ 8763986 1895867 1895875 -1895886 -1895904 -5128475 -5128488 -1896749 1896841 -1896932 -11701883 -8367663 1897664 1898286 4299368 4299370 5129293 -5714367 5714369 7346344 1898402 -1898414 1898416 1898431 1898521 1898544 5129374 5129378 -5129387 5129405 5129417 5129430 @@ -4600,106 +3452,51 @@ 5129451 5714356 5714361 -5129481 -5129531 -5129535 -5129544 -1898686 -4299211 -4299213 -1900024 -8847500 -9208918 -1900131 -1900233 -1900872 -1901268 -8247566 -1901735 1901832 1901850 -11135155 -12258652 -5130400 5130514 -5130528 -5130548 -9357385 -1902430 1902533 1902543 -5130559 -1902670 -1902676 -1902699 -4299218 1902749 8140883 8189761 4535689 -1903683 -5131608 -1904382 -5131951 -1905161 1905162 1905172 1905187 -1905189 -1905242 -1905257 1905267 1905281 1905297 1905299 1905301 -1905310 1905317 6221746 1905383 1905396 1906552 8208583 -1907153 -1907235 -1907250 -1907272 1907498 1907580 1907625 1908011 1908044 1908052 -1908055 -1909128 -1909170 -8727750 -12234977 1909398 1909800 1909838 -5133565 -5133568 1911093 1911112 1911168 -1911178 1911246 1911278 1911298 1911461 1911503 7728366 -5133595 -5133621 -8548427 1911633 4535592 7809779 8078362 -1911939 -1912003 -1912119 5133693 1912325 1912372 @@ -4712,11 +3509,9 @@ 4299599 5133864 5133990 -5714410 5772890 7428726 8810143 -10638244 4535581 5134098 8312017 @@ -4741,33 +3536,21 @@ 8314088 9915028 9967126 -1914410 1914421 -1914435 1914439 1914458 1914464 -1914465 -1914477 1914484 -1914496 -1914498 -1914500 -1914501 4299191 8918036 1915469 1915470 -1915487 1915492 -1915506 1916410 1916509 7854318 -1918293 1918395 1918411 -4299802 4299804 1918627 1918669 @@ -4777,9 +3560,6 @@ 1918868 8176911 1918964 -1918968 -1918972 -1918984 1918986 1918988 4535618 @@ -4793,28 +3573,21 @@ 5131293 5131585 5131593 -5132079 5132084 5132183 5132191 5132238 5132246 -5132317 5132398 -5132461 5132479 5132505 -5714312 5714333 8001799 5133088 -5714299 -5714302 5135513 5131910 8138711 8549720 -1910628 1902143 1902175 1902182 @@ -4826,16 +3599,10 @@ 7934873 8168644 8393082 -10662329 -4299778 -5132940 -5132956 -5132973 5133009 1914701 1951448 1951557 -5142842 5142870 1951649 1951657 @@ -4871,15 +3638,12 @@ 6097224 6097225 6097228 -10045595 1853064 4529248 10597291 5102424 1941864 5120465 -1843888 -1843889 5120577 5120668 5120675 @@ -4891,27 +3655,18 @@ 5121613 5121737 8273859 -1842043 1842097 1842196 5120396 1842446 1842485 -1842508 1842542 4301036 1842690 1842695 -4529738 5120453 -1843444 10327658 -10619048 8292351 -10304313 -10607329 -11484123 -9114044 5101394 1730978 1731263 @@ -4919,19 +3674,15 @@ 10469497 4525641 1731598 -1731750 1731811 1731812 1872368 -7628188 -1878688 1878705 1878751 1878753 1878782 1878789 1878810 -1878837 1878862 1878879 1878895 @@ -4944,18 +3695,10 @@ 4531517 1879227 1879253 -1879272 1879274 -1879348 -1879398 1879408 -1879413 1879427 -10366679 -10874932 -1879443 1879452 -1879471 5126212 5126217 10177508 @@ -4970,18 +3713,15 @@ 5126365 5126404 5126517 -5126533 10915497 10922201 1879939 1879970 -1879975 1880013 1880019 1880025 1880040 1880044 -1880049 1880062 1880064 1880078 @@ -4991,47 +3731,31 @@ 1880104 1880123 1880132 -1880133 1880138 1880139 1880140 1880143 1880156 -5126637 -1880379 1880381 -1880411 4302319 -5126663 1880907 1880931 1881094 -1881111 -1881139 1881151 1881166 9819403 4531687 5126697 5126718 -5126721 5126726 -5126729 1881603 4531713 -1881767 1881834 4531975 -1881917 1881955 -1882089 1882158 -1882190 1882195 1882210 -1882218 -1882253 -1882316 1882437 1882459 1882557 @@ -5042,43 +3766,26 @@ 5126958 5126963 8325294 -1882785 -1882786 1882812 -1882816 -1882818 -1882819 -10191785 11891668 1882927 1882941 1882958 1882959 1882960 -1882965 1882977 1882979 8725248 -1883020 -1883038 -1883067 1883161 1883168 1883386 -5127089 5127107 5127116 5127118 5127130 -5127132 1883829 1883897 -1883968 -1883975 -8324720 -9864281 1883993 -1884001 4531690 1884212 1884213 @@ -5086,27 +3793,20 @@ 1884428 1884435 1884439 -1884453 1884464 1884465 -1884479 1884685 -9308930 1884703 -1884774 1884790 4532122 1884923 1884970 1884997 -1885001 1885158 1885202 1885229 -1885642 5127170 1885937 -1885950 1886084 1886251 1886262 @@ -5115,91 +3815,52 @@ 1886320 8223165 1886378 -1886398 1886400 1886419 -4302333 1886490 -1886501 1886579 1886583 1886587 1886648 1886650 -1886729 10510138 7562564 -1886868 -1886906 1886929 -1886935 5127222 1886951 1887004 -1887024 1887031 1887285 1887290 -1887309 -1887341 -1887459 -10437872 5127325 -5127335 -5127336 5127337 -5127339 5127350 -5127353 -5127354 -5127355 5127357 -1887565 -1887634 1887701 -1888009 -1888047 4531968 1888306 -1888307 -1888336 1888338 -1888410 1888435 10922411 1888484 -5127378 5127380 1888579 1888619 -1888646 -1888695 1888733 1888743 1888759 1888823 1888826 12106417 -1888946 -1888955 -1889028 -1889267 1889287 -1889327 1889536 1889939 1889942 5127521 1890187 -1890247 11044778 -7543006 -1890368 1890374 1890404 -1890410 -1890417 -1890487 1890491 1890508 1890512 @@ -5208,8 +3869,6 @@ 1890534 1890560 1890576 -1890599 -1890622 1890629 1890654 1890656 @@ -5220,24 +3879,14 @@ 1890737 1890772 1890783 -1890794 1890800 1890802 -1890854 1890876 -1890885 1890898 -1890917 -1890934 -1890936 1890957 -6207059 7431428 -1891035 -10034831 1891048 1891059 -1891074 1891167 1891190 1891326 @@ -5253,22 +3902,8 @@ 4532022 8411753 10310835 -1891755 -9884308 -1891932 -1892131 1892193 1892242 -1892301 -1892302 -1892311 -1892320 -1892355 -1892420 -1892427 -1892433 -9059564 -1892477 1892488 9674732 1884255 @@ -5281,20 +3916,14 @@ 1884370 1884403 10179389 -10259280 10330376 10482025 10655790 5884851 9181627 9935837 -5771877 -7864212 8425580 -6120803 6133232 -6121218 -8876855 10106345 10432184 10444331 @@ -5312,19 +3941,13 @@ 9530406 1886374 1889717 -1889721 -1889745 -1889760 1889765 -1889828 1889833 1889838 1889850 1889870 -5127631 5127656 5127688 -5802339 1887108 1887119 1887122 @@ -5338,11 +3961,8 @@ 4532095 4532097 6121184 -1886123 -1886207 4532160 5771880 -1846099 1846103 1846107 1846111 @@ -5357,9 +3977,6 @@ 1846229 1846236 4528818 -1846240 -1846259 -1846261 1830879 1830937 1830962 @@ -5375,30 +3992,23 @@ 5122293 1853587 4526048 -1854143 1854202 1854347 5122439 1854792 1854824 1854849 -5880063 12239445 4526094 4526050 -1858615 1858637 -9777614 -1858659 1858660 -1858674 1858698 1858706 9689122 1858775 1858778 1858873 -1858930 1859046 1859100 1859161 @@ -5410,55 +4020,26 @@ 1859471 1859480 1859488 -9675743 9686431 9746673 9748079 -6133397 1859929 -1859932 1859952 9752950 -1860026 1860063 1860076 4536472 4536483 -9700261 7642240 8200050 -1973458 1973466 1973467 5123221 5123042 5123046 -5124468 -8877458 -9240588 -9355107 -9531432 -9547535 -9606779 -1865102 -1865107 -11754954 -1865295 -1865299 -1865313 -1865319 -1865328 -1865333 1865341 1865345 -1865347 1865348 -1865353 -5124557 -5124589 -1865555 -1865571 -1865590 1865668 1865671 1865839 @@ -5467,36 +4048,22 @@ 1865856 1865862 1866085 -1866123 -1866214 1866336 -1866338 1866341 -1866550 1866568 1866570 -1866601 -1867021 -1867022 1867029 1867032 -1867037 5124911 -10247309 1867820 1867928 9983244 1736271 7734292 -1841764 1841782 1841813 1841946 -10309331 -5123615 -1861456 1861510 -1861559 1861604 1861644 5123636 @@ -5504,7 +4071,6 @@ 1861673 1861705 1861759 -1861784 1861797 1861823 1861834 @@ -5514,128 +4080,74 @@ 1861862 11529603 1861887 -1861892 -1861893 1862072 -1862129 -1862181 -1862198 5123676 -1862363 1862401 11907754 -1862475 1862517 -1862547 1862569 1862572 1862578 1862580 -1862595 1862624 1862701 1862719 -1862757 1862765 1862774 1862837 1862841 -1862916 1862917 -1862923 -1862928 -1863021 1863025 1863075 1863080 1863088 5123775 5123922 -1863366 -1863405 1863407 4301348 -1863584 5124007 5124029 5124049 -1863757 5124050 1863829 1863848 -1863856 1864156 1864161 -1864164 1864165 -8956567 -1864204 -1864316 -1864320 -1864321 -1864329 1864352 1864358 1864377 -11141784 -5124118 5124119 5124121 5124136 5124143 5124147 -5124172 5124199 5124200 5124208 5124219 5124232 5124233 -5124250 1864652 -5124332 -5124442 -5124443 -5124448 5124450 1864793 5885399 -5123954 -5123968 -5123971 -5123979 -5123983 5123999 5124000 -8849480 9513830 1863978 -1863982 -1864004 1864008 -1864021 -1864046 -1864070 1864090 1992573 -5150053 1993419 5150092 -1993643 -1992817 1939432 -1939460 4525189 -5143232 9053308 9424853 -1953998 5143249 -1954084 1860108 -1860118 1830031 -10650211 5119482 5119513 1830361 @@ -5657,12 +4169,8 @@ 1830632 1830802 4525364 -1754270 -5105642 1754332 -5105649 5105656 -5105671 5106115 5106160 5107128 @@ -5677,8 +4185,6 @@ 8201251 8426357 1757839 -10174151 -10322104 8964772 4522753 1830681 @@ -5689,37 +4195,17 @@ 1939680 1939688 7646066 -1751557 -1751572 -1751575 -1751670 -1751684 -1751690 1829287 1829322 1829363 1854920 -5122526 -5122538 -5122556 -5122571 -5122574 -5122581 -5122620 -5122646 5122647 5122668 -5122683 -5122691 -5122696 5122702 -9015218 1855358 -10055273 1856005 1856289 1856384 -1856581 1856595 1856620 1856658 @@ -5732,10 +4218,6 @@ 1856768 1856772 1856867 -1857068 -1857143 -1857258 -1857380 1857626 9790007 1857809 @@ -5755,34 +4237,22 @@ 1858113 1858163 5122876 -5122969 -1858283 1858321 -1856891 -10038125 1937642 -1937655 -1937688 1937691 1937739 1937751 -1937758 1937803 1937816 1937819 1937846 1937974 1938016 -1938022 1938081 1938104 -1938159 1938168 -4299870 4693382 8225376 -10600208 -12200213 1937490 1937556 1938214 @@ -5795,12 +4265,8 @@ 1938955 1938975 1939056 -1939134 -1939136 -5141324 5141342 11561676 -12219250 12229940 12247359 12253844 @@ -5809,35 +4275,24 @@ 1856368 1856394 1856555 -1857690 -5123018 1858531 1838691 -1838811 -1838838 1838905 1838911 4528692 4528694 1833497 -1833499 1833500 1833626 8546322 -5770913 1835156 1835393 1835396 1835500 -5119905 -5119961 -5119969 10304283 1836899 1837172 1837900 -1838666 -1838960 1838969 9895629 1839770 @@ -5861,20 +4316,14 @@ 4534779 4534782 9313634 -9385576 9454291 9574801 -9579309 -9626037 1802113 -8924506 1802280 1803065 1803073 -10942408 4534762 4534767 -9239301 9426252 5114295 5114311 diff --git a/dev/releases/mambo_v3/presets/asia.classes b/dev/releases/mambo_v3/presets/asia.classes index fdd0d31..04051ee 100644 --- a/dev/releases/mambo_v3/presets/asia.classes +++ b/dev/releases/mambo_v3/presets/asia.classes @@ -419,7 +419,6 @@ 4532461 4532471 4532473 -8016905 8355390 8756768 9332506 @@ -997,7 +996,6 @@ 1874204 1874269 1874274 -1874280 4531147 1874375 1874743 @@ -1040,7 +1038,6 @@ 1877788 1877941 1877988 -1878067 4531417 1878406 1878470 @@ -1400,7 +1397,6 @@ 1923917 1924044 1924057 -1924077 1924097 1924193 5138681 @@ -1809,7 +1805,6 @@ 5143303 5143311 5143315 -1954490 1954496 1954563 5143338 @@ -2379,7 +2374,6 @@ 1985573 1985707 6133659 -1985760 1985926 1985993 1986009 @@ -2989,7 +2983,6 @@ 1778596 5111481 5111501 -5111513 5111535 5111574 5772222 @@ -3000,7 +2993,6 @@ 1779641 1779690 1780378 -1781016 4533325 1781233 1781234 @@ -3337,7 +3329,6 @@ 4532203 4532206 4532208 -4532236 4532239 4532253 4532260 @@ -3877,7 +3868,6 @@ 1918733 1918736 1918776 -1918789 1918843 1918854 8035998 @@ -4755,7 +4745,6 @@ 1857258 1857267 1857380 -1857577 1857581 1857626 9790007 @@ -4949,7 +4938,6 @@ 4534778 4534779 4534782 -4534788 6112606 6112613 6112661 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg new file mode 100644 index 0000000..e315648 --- /dev/null +++ b/docs/assets/preset-overlap.svg @@ -0,0 +1,8621 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv new file mode 100644 index 0000000..23d664b --- /dev/null +++ b/docs/assets/preset-overlap.tsv @@ -0,0 +1,362 @@ +row_preset column_preset shared_species jaccard_percent row_coverage_percent +europe europe 3014 100.000000 100.000000 +europe north_europe 1977 65.593895 65.593895 +europe australia 65 1.347709 2.156603 +europe tasmania 9 0.274474 0.298607 +europe north_america 356 5.026119 11.811546 +europe central_america 29 0.627163 0.962177 +europe south_america 30 0.668151 0.995355 +europe caribbean 9 0.231899 0.298607 +europe south_asia 138 3.116531 4.578633 +europe asia 2091 35.416667 69.376244 +europe japan 165 4.653130 5.474453 +europe africa 306 8.425110 10.152621 +europe subsaharan_africa 181 4.987600 6.005309 +europe mediterranean 2583 83.027965 85.700066 +europe arctic 2152 41.424447 71.400133 +europe oceania 88 1.692633 2.919708 +europe southeast_asia 31 0.665951 1.028534 +europe east_asia 1878 35.710211 62.309224 +europe middle_east 714 22.695486 23.689449 +north_europe europe 1977 65.593895 100.000000 +north_europe north_europe 1977 100.000000 100.000000 +north_europe australia 31 0.811518 1.568032 +north_europe tasmania 8 0.356665 0.404654 +north_europe north_america 314 5.157687 15.882650 +north_europe central_america 12 0.332963 0.606980 +north_europe south_america 20 0.577534 1.011634 +north_europe caribbean 2 0.070151 0.101163 +north_europe south_asia 53 1.524741 2.680830 +north_europe asia 1598 29.813433 80.829540 +north_europe japan 131 5.151396 6.626201 +north_europe africa 92 3.275187 4.653515 +north_europe subsaharan_africa 51 1.873622 2.579666 +north_europe mediterranean 1602 52.438625 81.031866 +north_europe arctic 1837 41.068634 92.918563 +north_europe oceania 49 1.166389 2.478503 +north_europe southeast_asia 8 0.219720 0.404654 +north_europe east_asia 1551 34.095406 78.452200 +north_europe middle_east 406 16.797683 20.536166 +australia europe 65 1.347709 3.468517 +australia north_europe 31 0.811518 1.654216 +australia australia 1874 100.000000 100.000000 +australia tasmania 274 14.621131 14.621131 +australia north_america 89 1.433172 4.749200 +australia central_america 34 0.977292 1.814301 +australia south_america 38 1.137044 2.027748 +australia caribbean 26 0.954479 1.387407 +australia south_asia 316 10.160772 16.862327 +australia asia 490 7.698350 26.147279 +australia japan 108 4.384896 5.763074 +australia africa 119 4.441956 6.350053 +australia subsaharan_africa 118 4.623824 6.296692 +australia mediterranean 73 1.629101 3.895411 +australia arctic 42 0.681265 2.241195 +australia oceania 1874 82.446106 100.000000 +australia southeast_asia 409 13.037934 21.824973 +australia east_asia 352 6.235607 18.783351 +australia middle_east 60 2.255639 3.201708 +tasmania europe 9 0.274474 3.284672 +tasmania north_europe 8 0.356665 2.919708 +tasmania australia 274 14.621131 100.000000 +tasmania tasmania 274 100.000000 100.000000 +tasmania north_america 6 0.127850 2.189781 +tasmania central_america 1 0.052301 0.364964 +tasmania south_america 2 0.112486 0.729927 +tasmania caribbean 0 0.000000 0.000000 +tasmania south_asia 3 0.164564 1.094891 +tasmania asia 11 0.209764 4.014599 +tasmania japan 3 0.309917 1.094891 +tasmania africa 6 0.503356 2.189781 +tasmania subsaharan_africa 6 0.563910 2.189781 +tasmania mediterranean 9 0.305603 3.284672 +tasmania arctic 6 0.130406 2.189781 +tasmania oceania 274 12.054553 100.000000 +tasmania southeast_asia 5 0.257599 1.824818 +tasmania east_asia 9 0.205105 3.284672 +tasmania middle_east 4 0.358423 1.459854 +north_america europe 356 5.026119 8.045198 +north_america north_europe 314 5.157687 7.096045 +north_america australia 89 1.433172 2.011299 +north_america tasmania 6 0.127850 0.135593 +north_america north_america 4425 100.000000 100.000000 +north_america central_america 1408 30.240550 31.819209 +north_america south_america 839 16.476826 18.960452 +north_america caribbean 648 13.926499 14.644068 +north_america south_asia 80 1.356622 1.807910 +north_america asia 403 4.476286 9.107345 +north_america japan 64 1.265322 1.446328 +north_america africa 92 1.750048 2.079096 +north_america subsaharan_africa 84 1.635196 1.898305 +north_america mediterranean 313 4.608363 7.073446 +north_america arctic 2406 37.877834 54.372881 +north_america oceania 147 2.243932 3.322034 +north_america southeast_asia 61 1.010603 1.378531 +north_america east_asia 376 4.601077 8.497175 +north_america middle_east 98 1.894452 2.214689 +central_america europe 29 0.627163 1.769372 +central_america north_europe 12 0.332963 0.732154 +central_america australia 34 0.977292 2.074436 +central_america tasmania 1 0.052301 0.061013 +central_america north_america 1408 30.240550 85.906040 +central_america central_america 1639 100.000000 100.000000 +central_america south_america 1031 48.770104 62.904210 +central_america caribbean 721 40.189521 43.990238 +central_america south_asia 32 1.012979 1.952410 +central_america asia 52 0.791717 3.172666 +central_america japan 15 0.646273 0.915192 +central_america africa 47 1.868045 2.867602 +central_america subsaharan_africa 46 1.925492 2.806589 +central_america mediterranean 41 0.958392 2.501525 +central_america arctic 243 4.241578 14.826113 +central_america oceania 58 1.504930 3.538743 +central_america southeast_asia 26 0.791476 1.586333 +central_america east_asia 40 0.699056 2.440513 +central_america middle_east 29 1.180782 1.769372 +south_america europe 30 0.668151 1.992032 +south_america north_europe 20 0.577534 1.328021 +south_america australia 38 1.137044 2.523240 +south_america tasmania 2 0.112486 0.132802 +south_america north_america 839 16.476826 55.710491 +south_america central_america 1031 48.770104 68.459495 +south_america south_america 1506 100.000000 100.000000 +south_america caribbean 781 48.782011 51.859230 +south_america south_asia 40 1.325381 2.656042 +south_america asia 61 0.949269 4.050465 +south_america japan 13 0.593607 0.863214 +south_america africa 51 2.143758 3.386454 +south_america subsaharan_africa 50 2.220249 3.320053 +south_america mediterranean 39 0.940439 2.589641 +south_america arctic 103 1.795676 6.839309 +south_america oceania 63 1.695371 4.183267 +south_america southeast_asia 31 0.985065 2.058433 +south_america east_asia 44 0.787825 2.921647 +south_america middle_east 31 1.335631 2.058433 +caribbean europe 9 0.231899 1.027397 +caribbean north_europe 2 0.070151 0.228311 +caribbean australia 26 0.954479 2.968037 +caribbean tasmania 0 0.000000 0.000000 +caribbean north_america 648 13.926499 73.972603 +caribbean central_america 721 40.189521 82.305936 +caribbean south_america 781 48.782011 89.155251 +caribbean caribbean 876 100.000000 100.000000 +caribbean south_asia 29 1.208837 3.310502 +caribbean asia 38 0.653033 4.337900 +caribbean japan 9 0.575448 1.027397 +caribbean africa 34 1.925255 3.881279 +caribbean subsaharan_africa 34 2.075702 3.881279 +caribbean mediterranean 18 0.508762 2.054795 +caribbean arctic 54 1.047527 6.164384 +caribbean oceania 49 1.580645 5.593607 +caribbean southeast_asia 26 1.030928 2.968037 +caribbean east_asia 23 0.462219 2.625571 +caribbean middle_east 16 0.937866 1.826484 +south_asia europe 138 3.116531 8.891753 +south_asia north_europe 53 1.524741 3.414948 +south_asia australia 316 10.160772 20.360825 +south_asia tasmania 3 0.164564 0.193299 +south_asia north_america 80 1.356622 5.154639 +south_asia central_america 32 1.012979 2.061856 +south_asia south_america 40 1.325381 2.577320 +south_asia caribbean 29 1.208837 1.868557 +south_asia south_asia 1552 100.000000 100.000000 +south_asia asia 1552 31.158402 100.000000 +south_asia japan 301 15.451745 19.394330 +south_asia africa 190 8.311461 12.242268 +south_asia subsaharan_africa 178 8.202765 11.469072 +south_asia mediterranean 174 4.287827 11.211340 +south_asia arctic 120 2.081526 7.731959 +south_asia oceania 356 10.262323 22.938144 +south_asia southeast_asia 1143 54.925517 73.646907 +south_asia east_asia 1229 27.642825 79.188144 +south_asia middle_east 212 9.698079 13.659794 +asia europe 2091 35.416667 41.979522 +asia north_europe 1598 29.813433 32.081911 +asia australia 490 7.698350 9.837382 +asia tasmania 11 0.209764 0.220839 +asia north_america 403 4.476286 8.090745 +asia central_america 52 0.791717 1.043967 +asia south_america 61 0.949269 1.224654 +asia caribbean 38 0.653033 0.762899 +asia south_asia 1552 31.158402 31.158402 +asia asia 4981 100.000000 100.000000 +asia japan 697 13.993174 13.993174 +asia africa 355 6.396396 7.127083 +asia subsaharan_africa 284 5.170217 5.701666 +asia mediterranean 1891 32.772964 37.964264 +asia arctic 2029 27.851750 40.734792 +asia oceania 575 8.609073 11.543867 +asia southeast_asia 1658 33.193193 33.286489 +asia east_asia 4123 82.774543 82.774543 +asia middle_east 835 16.726763 16.763702 +japan europe 165 4.653130 23.672884 +japan north_europe 131 5.151396 18.794835 +japan australia 108 4.384896 15.494978 +japan tasmania 3 0.309917 0.430416 +japan north_america 64 1.265322 9.182209 +japan central_america 15 0.646273 2.152080 +japan south_america 13 0.593607 1.865136 +japan caribbean 9 0.575448 1.291248 +japan south_asia 301 15.451745 43.185079 +japan asia 697 13.993174 100.000000 +japan japan 697 100.000000 100.000000 +japan africa 64 4.110469 9.182209 +japan subsaharan_africa 59 4.114365 8.464849 +japan mediterranean 160 4.973578 22.955524 +japan arctic 229 4.769840 32.855093 +japan oceania 130 4.577465 18.651363 +japan southeast_asia 285 13.675624 40.889527 +japan east_asia 697 16.905166 100.000000 +japan middle_east 95 6.560773 13.629842 +africa europe 306 8.425110 33.116883 +africa north_europe 92 3.275187 9.956710 +africa australia 119 4.441956 12.878788 +africa tasmania 6 0.503356 0.649351 +africa north_america 92 1.750048 9.956710 +africa central_america 47 1.868045 5.086580 +africa south_america 51 2.143758 5.519481 +africa caribbean 34 1.925255 3.679654 +africa south_asia 190 8.311461 20.562771 +africa asia 355 6.396396 38.419913 +africa japan 64 4.110469 6.926407 +africa africa 924 100.000000 100.000000 +africa subsaharan_africa 796 86.147186 86.147186 +africa mediterranean 355 10.926439 38.419913 +africa arctic 135 2.635689 14.610390 +africa oceania 132 4.306688 14.285714 +africa southeast_asia 120 4.846527 12.987013 +africa east_asia 234 4.861833 25.324675 +africa middle_east 240 15.686275 25.974026 +subsaharan_africa europe 181 4.987600 22.738693 +subsaharan_africa north_europe 51 1.873622 6.407035 +subsaharan_africa australia 118 4.623824 14.824121 +subsaharan_africa tasmania 6 0.563910 0.753769 +subsaharan_africa north_america 84 1.635196 10.552764 +subsaharan_africa central_america 46 1.925492 5.778894 +subsaharan_africa south_america 50 2.220249 6.281407 +subsaharan_africa caribbean 34 2.075702 4.271357 +subsaharan_africa south_asia 178 8.202765 22.361809 +subsaharan_africa asia 284 5.170217 35.678392 +subsaharan_africa japan 59 4.114365 7.412060 +subsaharan_africa africa 796 86.147186 100.000000 +subsaharan_africa subsaharan_africa 796 100.000000 100.000000 +subsaharan_africa mediterranean 227 6.986765 28.517588 +subsaharan_africa arctic 85 1.685170 10.678392 +subsaharan_africa oceania 129 4.387755 16.206030 +subsaharan_africa southeast_asia 118 5.021277 14.824121 +subsaharan_africa east_asia 181 3.820177 22.738693 +subsaharan_africa middle_east 179 12.235133 22.487437 +mediterranean europe 2583 83.027965 96.380597 +mediterranean north_europe 1602 52.438625 59.776119 +mediterranean australia 73 1.629101 2.723881 +mediterranean tasmania 9 0.305603 0.335821 +mediterranean north_america 313 4.608363 11.679104 +mediterranean central_america 41 0.958392 1.529851 +mediterranean south_america 39 0.940439 1.455224 +mediterranean caribbean 18 0.508762 0.671642 +mediterranean south_asia 174 4.287827 6.492537 +mediterranean asia 1891 32.772964 70.559701 +mediterranean japan 160 4.973578 5.970149 +mediterranean africa 355 10.926439 13.246269 +mediterranean subsaharan_africa 227 6.986765 8.470149 +mediterranean mediterranean 2680 100.000000 100.000000 +mediterranean arctic 1781 34.040520 66.455224 +mediterranean oceania 96 1.976529 3.582090 +mediterranean southeast_asia 48 1.115242 1.791045 +mediterranean east_asia 1632 31.560627 60.895522 +mediterranean middle_east 776 28.218182 28.955224 +arctic europe 2152 41.424447 49.665359 +arctic north_europe 1837 41.068634 42.395569 +arctic australia 42 0.681265 0.969305 +arctic tasmania 6 0.130406 0.138472 +arctic north_america 2406 37.877834 55.527348 +arctic central_america 243 4.241578 5.608124 +arctic south_america 103 1.795676 2.377106 +arctic caribbean 54 1.047527 1.246250 +arctic south_asia 120 2.081526 2.769444 +arctic asia 2029 27.851750 46.826679 +arctic japan 229 4.769840 5.285022 +arctic africa 135 2.635689 3.115624 +arctic subsaharan_africa 85 1.685170 1.961689 +arctic mediterranean 1781 34.040520 41.103162 +arctic arctic 4333 100.000000 100.000000 +arctic oceania 72 1.101928 1.661666 +arctic southeast_asia 36 0.603116 0.830833 +arctic east_asia 1995 30.877573 46.042003 +arctic middle_east 548 11.833297 12.647127 +oceania europe 88 1.692633 3.871535 +oceania north_europe 49 1.166389 2.155741 +oceania australia 1874 82.446106 82.446106 +oceania tasmania 274 12.054553 12.054553 +oceania north_america 147 2.243932 6.467224 +oceania central_america 58 1.504930 2.551694 +oceania south_america 63 1.695371 2.771667 +oceania caribbean 49 1.580645 2.155741 +oceania south_asia 356 10.262323 15.662121 +oceania asia 575 8.609073 25.296964 +oceania japan 130 4.577465 5.719314 +oceania africa 132 4.306688 5.807303 +oceania subsaharan_africa 129 4.387755 5.675319 +oceania mediterranean 96 1.976529 4.223493 +oceania arctic 72 1.101928 3.167620 +oceania oceania 2273 100.000000 100.000000 +oceania southeast_asia 473 13.623272 20.809503 +oceania east_asia 409 6.831468 17.993841 +oceania middle_east 70 2.295835 3.079630 +southeast_asia europe 31 0.665951 1.854067 +southeast_asia north_europe 8 0.219720 0.478469 +southeast_asia australia 409 13.037934 24.461722 +southeast_asia tasmania 5 0.257599 0.299043 +southeast_asia north_america 61 1.010603 3.648325 +southeast_asia central_america 26 0.791476 1.555024 +southeast_asia south_america 31 0.985065 1.854067 +southeast_asia caribbean 26 1.030928 1.555024 +southeast_asia south_asia 1143 54.925517 68.361244 +southeast_asia asia 1658 33.193193 99.162679 +southeast_asia japan 285 13.675624 17.045455 +southeast_asia africa 120 4.846527 7.177033 +southeast_asia subsaharan_africa 118 5.021277 7.057416 +southeast_asia mediterranean 48 1.115242 2.870813 +southeast_asia arctic 36 0.603116 2.153110 +southeast_asia oceania 473 13.623272 28.289474 +southeast_asia southeast_asia 1672 100.000000 100.000000 +southeast_asia east_asia 1186 25.732263 70.933014 +southeast_asia middle_east 72 2.943581 4.306220 +east_asia europe 1878 35.710211 45.549357 +east_asia north_europe 1551 34.095406 37.618239 +east_asia australia 352 6.235607 8.537473 +east_asia tasmania 9 0.205105 0.218288 +east_asia north_america 376 4.601077 9.119573 +east_asia central_america 40 0.699056 0.970167 +east_asia south_america 44 0.787825 1.067184 +east_asia caribbean 23 0.462219 0.557846 +east_asia south_asia 1229 27.642825 29.808392 +east_asia asia 4123 82.774543 100.000000 +east_asia japan 697 16.905166 16.905166 +east_asia africa 234 4.861833 5.675479 +east_asia subsaharan_africa 181 3.820177 4.390007 +east_asia mediterranean 1632 31.560627 39.582828 +east_asia arctic 1995 30.877573 48.387097 +east_asia oceania 409 6.831468 9.919961 +east_asia southeast_asia 1186 25.732263 28.765462 +east_asia east_asia 4123 100.000000 100.000000 +east_asia middle_east 592 13.525246 14.358477 +middle_east europe 714 22.695486 84.397163 +middle_east north_europe 406 16.797683 47.990544 +middle_east australia 60 2.255639 7.092199 +middle_east tasmania 4 0.358423 0.472813 +middle_east north_america 98 1.894452 11.583924 +middle_east central_america 29 1.180782 3.427896 +middle_east south_america 31 1.335631 3.664303 +middle_east caribbean 16 0.937866 1.891253 +middle_east south_asia 212 9.698079 25.059102 +middle_east asia 835 16.726763 98.699764 +middle_east japan 95 6.560773 11.229314 +middle_east africa 240 15.686275 28.368794 +middle_east subsaharan_africa 179 12.235133 21.158392 +middle_east mediterranean 776 28.218182 91.725768 +middle_east arctic 548 11.833297 64.775414 +middle_east oceania 70 2.295835 8.274232 +middle_east southeast_asia 72 2.943581 8.510638 +middle_east east_asia 592 13.525246 69.976359 +middle_east middle_east 846 100.000000 100.000000 diff --git a/docs/model-presets.md b/docs/model-presets.md index 2975f93..30005a9 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -14,28 +14,36 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries ## Presets -| ID | Species | Minimum regional / global rows | Selected rows | Geographic scope | -| --- | ---: | ---: | ---: | --- | -| `full` | 12,632 | — | — | All species in the pinned model. | -| `europe` | 3,014 | 26 / none | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | -| `north_europe` | 1,977 | 26 / none | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | -| `australia` | 1,874 | 3 / 25 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | -| `tasmania` | 274 | 3 / 25 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | -| `north_america` | 4,425 | 3 / 25 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | -| `central_america` | 1,639 | 3 / 25 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | -| `south_america` | 1,506 | 3 / 25 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | -| `caribbean` | 876 | 3 / 25 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | -| `south_asia` | 1,552 | 3 / 25 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | -| `asia` | 4,993 | 3 / 25 | 1,033,931 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan and Cyprus in full. Includes their European-labelled records and records with blank continent. | -| `japan` | 697 | 3 / 25 | 30,076 | All records assigned countryCode JP, including islands. | -| `africa` | 924 | 3 / 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | -| `subsaharan_africa` | 796 | 3 / 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | -| `mediterranean` | 2,680 | 3 / 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | -| `arctic` | 5,884 | 3 / 25 | 2,496,358 | Canada, United States, Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. A deliberately expansive country proxy: includes southern records and is NOT an Arctic Circle or tundra filter. | -| `oceania` | 2,273 | 3 / 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | -| `southeast_asia` | 1,672 | 3 / 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | -| `east_asia` | 4,123 | 3 / 25 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | -| `middle_east` | 846 | 3 / 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | +| ID | Species | Minimum regional rows | Minimum global rows | Selected rows | Geographic scope | +| --- | ---: | ---: | ---: | ---: | --- | +| `full` | 12,632 | None | None | — | All species in the pinned model. | +| `europe` | 3,014 | 26 | None | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | +| `north_europe` | 1,977 | 26 | None | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | +| `australia` | 1,874 | 3 | 25 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | +| `tasmania` | 274 | 3 | 25 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | +| `north_america` | 4,425 | 3 | 25 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | +| `central_america` | 1,639 | 3 | 25 | 210,173 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. | +| `south_america` | 1,506 | 3 | 25 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | +| `caribbean` | 876 | 3 | 25 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | +| `south_asia` | 1,552 | 3 | 25 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | +| `asia` | 4,981 | 3 | 25 | 1,031,247 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan in full. Includes their European-labelled records and records with blank continent. Cyprus is excluded even when its continent is ASIA. | +| `japan` | 697 | 3 | 25 | 30,076 | All records assigned countryCode JP, including islands. | +| `africa` | 924 | 3 | 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | +| `subsaharan_africa` | 796 | 3 | 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | +| `mediterranean` | 2,680 | 3 | 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | +| `arctic` | 4,333 | 3 | 25 | 871,155 | Canada, Alaska (US records only when stateProvince is Alaska), Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. Other countries remain whole-country proxies including southern records; this is not an Arctic Circle or tundra filter. US records with blank state are excluded. | +| `oceania` | 2,273 | 3 | 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | +| `southeast_asia` | 1,672 | 3 | 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | +| `east_asia` | 4,123 | 3 | 25 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | +| `middle_east` | 846 | 3 | 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | + +## Species overlap + +![Pairwise species overlap and directional coverage](assets/preset-overlap.svg) + +Left: shared species divided by the union (Jaccard similarity). Right: the percentage of each row's species also present in each column. Coverage reveals containment that Jaccard can hide for small lists. These compare the qualified species lists, not geographic areas or prediction accuracy. Full is omitted because it contains every preset. Labels show list sizes; both panels use percentages. + +Rebuild the figure and exact shared-count/percentage table with `.venv/bin/python -m dev.releases.mambo_v3.plot_overlap`. The companion [pairwise table](assets/preset-overlap.tsv) includes exact counts. ## Exact metadata filters @@ -48,12 +56,12 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries - **south_america** (South America): `continent` in `SOUTH_AMERICA` OR `countryCode` in `AR, BO, BR, CL, CO, EC, FK, GF, GY, PY, PE, SR, UY, VE, CR, PA`. - **caribbean** (Caribbean): `countryCode` in `AG, AI, AW, BB, BL, BQ, BS, CU, CW, DM, DO, GD, GP, HT, JM, KN, KY, LC, MF, MQ, MS, PR, SX, TC, TT, VC, VG, VI, BM, BZ, GY, SR, GF`. - **south_asia** (South Asia): `countryCode` in `AF, BD, BT, IN, MV, NP, PK, LK, MM, IR`. -- **asia** (Asia): `continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, CY, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`. +- **asia** (Asia): (`continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`) AND country NOT in `CY`. - **japan** (Japan): `countryCode` in `JP`. - **africa** (Africa): `continent` in `AFRICA` OR `countryCode` in `DZ, AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, EG, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, LY, MG, MW, ML, MR, MU, YT, MA, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, TN, UG, EH, ZM, ZW`. - **subsaharan_africa** (Sub-Saharan Africa (broad)): (`continent` in `AFRICA` OR `countryCode` in `AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, MG, MW, ML, MR, MU, YT, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, UG, ZM, ZW`) AND country NOT in `DZ, EG, LY, MA, TN, EH`. - **mediterranean** (Mediterranean (broad)): `countryCode` in `AL, DZ, BA, HR, CY, EG, FR, GR, IL, IT, LB, LY, MT, MC, ME, MA, PS, SI, ES, SY, TN, TR, PT, GI, AD, SM, VA, MK, BG, RS, JO`. -- **arctic** (Arctic / broad northern-country scope): `countryCode` in `CA, US, GL, IS, FO, NO, SJ, SE, FI, AX, RU`. +- **arctic** (Arctic / broad northern-country scope): `countryCode` in `CA, US, GL, IS, FO, NO, SJ, SE, FI, AX, RU`; `US` records additionally require `stateProvince` in `Alaska`. - **oceania** (Oceania): `continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`. - **southeast_asia** (Southeast Asia): `countryCode` in `BN, KH, ID, LA, MY, MM, PH, SG, TH, TL, VN, PG`. - **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`. @@ -61,7 +69,7 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries ## Interpretation and reproducibility -Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic is a broad northern-country proxy and includes southern records from those countries. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. +Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic uses Alaska for US records; other selected countries remain broad proxies including southern records. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes Australian records with blank or different state values. Overlapping presets are expected; membership in one does not exclude another. diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index 4b6b7c0..a06367b 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -65,3 +65,26 @@ def test_misspelled_or_empty_filter_fails_closed(): select_region(table, {"countries": ["AU"], "state_provinc": ["Tasmania"]}) with pytest.raises(ValueError, match="requires countries or continents"): select_region(table, {}) + + +def test_asia_excludes_cyprus_even_when_continent_matches(): + table = pa.table({"countryCode": ["CY", "JP", "TR"], "continent": ["ASIA", "ASIA", "EUROPE"]}) + assert select_region(table, RULES["asia"])["countryCode"].to_pylist() == ["JP", "TR"] + + +def test_arctic_us_requires_alaska_without_restricting_other_countries(): + table = pa.table( + { + "countryCode": ["US", "US", "US", "US", "CA", "NO", "AU"], + "stateProvince": ["Alaska", "Florida", "", None, "Ontario", None, "Alaska"], + } + ) + assert select_region(table, RULES["arctic"])["countryCode"].to_pylist() == ["US", "CA", "NO"] + + +def test_overlap_distinguishes_containment_from_similarity(): + from dev.releases.mambo_v3.plot_overlap import overlap + + assert overlap({"a"}, {"a", "b", "c", "d"}) == (1, 0.25, 1.0) + assert overlap({"a", "b", "c", "d"}, {"a"}) == (1, 0.25, 0.25) + assert overlap({"a"}, {"b"}) == (0, 0.0, 0.0) From 1b217fb93449e6f803aef921ebd74a5a6a820033 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:34:59 +0200 Subject: [PATCH 017/221] release: group preset heatmap axes geographically --- dev/releases/mambo_v3/plot_overlap.py | 18 +- docs/assets/preset-overlap.svg | 7450 +++++++++++++------------ docs/assets/preset-overlap.tsv | 638 +-- 3 files changed, 4109 insertions(+), 3997 deletions(-) diff --git a/dev/releases/mambo_v3/plot_overlap.py b/dev/releases/mambo_v3/plot_overlap.py index b694716..3f98548 100644 --- a/dev/releases/mambo_v3/plot_overlap.py +++ b/dev/releases/mambo_v3/plot_overlap.py @@ -8,6 +8,15 @@ from dev.releases.mambo_v3.audit import HERE, sha256 ASSETS = HERE.parents[2] / "docs/assets" +# Presentation groups, not mutually exclusive biogeographic classifications. +DISPLAY_GROUPS = ( + ("north_america", "central_america", "caribbean", "south_america"), + ("arctic", "europe", "north_europe"), + ("mediterranean", "middle_east"), + ("africa", "subsaharan_africa"), + ("asia", "south_asia", "southeast_asia", "east_asia", "japan"), + ("oceania", "australia", "tasmania"), +) def overlap(left, right): @@ -26,7 +35,9 @@ def render(preview=None): manifest = tomllib.loads((HERE / "preset-manifest.toml").read_text()) if sha256(HERE / "preset-definitions.toml") != manifest["definitions_sha256"]: raise ValueError("Rebuild presets before plotting modified definitions") - names = list(manifest["presets"]) + names = [name for group in DISPLAY_GROUPS for name in group] + if len(names) != len(set(names)) or set(names) != set(manifest["presets"]): + raise ValueError("Update display groups to include every preset exactly once") sets = {} for name, item in manifest["presets"].items(): path = HERE / item["path"] @@ -52,6 +63,11 @@ def render(preview=None): ax.set_xticks(range(len(names)), labels, rotation=60, ha="right", rotation_mode="anchor") ax.set_yticks(range(len(names)), labels) ax.set_title(title, fontsize=15, pad=18) + boundary = 0 + for group in DISPLAY_GROUPS[:-1]: + boundary += len(group) + ax.axhline(boundary - 0.5, color="white", linewidth=1.4) + ax.axvline(boundary - 0.5, color="white", linewidth=1.4) for i in range(len(names)): for j in range(len(names)): value = values[i, j] diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg index e315648..0c02e37 100644 --- a/docs/assets/preset-overlap.svg +++ b/docs/assets/preset-overlap.svg @@ -38,7 +38,7 @@ z +iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAd/klEQVR4nO3Z28tl913H8b2e/cxkpjOpSaZKpaCmptB6QKTYUkEqktRaC6U0KBg83EhtqRbqjQjeKHinoJQeKIIHcuOB9sKiVQTBC7GQCyEeQJsURE1qk6bJTNPM8+y9/AvyCOWN32Tl9foLPou19t6/917L/cuD6w4A+MYty/QCLrI66gC73f5Nb5iekDpeuTw9IfWXn314ekLqZHoAAAAAbInQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgJDQBgAAgNDpcno6vSG1HtfpCbxSrMfpBallv5+ekNrad8HW7s/uZJlekDq5emV6AhdYrl2bnpBar94xPSG1XtnO9SxPPjU9oXV2e3pB6v4/eWR6Quoj9zw2PSH1zh9/aHpCyhttAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACJ3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AAAgJbQAAAAidnly7Or0hdXj25vSE1nqcXpBaj9v5b+eJt79mekLqZ37xL6YnpH73b390ekLqsfd+YnpC6m2//AvTE1J3P/Ol6Qmp5blb0xNST/3gjekJqW/55y9OT0gdv/7C9ITM02++e3pC6ps/8+T0BC5yXKcXcIHtVA8AAAC8BAhtAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACJ3u9vvpDa3jYXoBFzpOD8i8cPcyPSH1R4+9ZXpC6rH3fnJ6Qur1n37/9ITUfV98fnpCav2vJ6cnpI63z6YnpPYvTC9oHb/2tekJrQ2d3Q53TC+InWzrrLOenU9P4BXEG20AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAIne6O6/SG1rJML2itG7s/W7KxR+2RN//x9ITUmx/5iekJqV/64c9NT0h95rMPTE9IXbvn7ukJqfXmrekJqduv3tYX9nL58vSE1Ho4TE/IrKfbetZ2G7o3u91ut+z30xNa63F6QWpjl+ONNgAAAJSENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAISENgAAAIRO//Pn3jS9IfW633t0ekLqcPPW9ITUst9PT8j804c+Nj0h9d0f/eD0hNY6PaD1h5/9sekJqdc+/uXpCanj/2zretbDcXpC6upT27qe9XCYnsCLuHRzYz8+y7beyW3us7Nu67tta7b16QEAAIBhQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCy/1v+/V1ekTpC++7Nj2BC/z7Qx+fnpB557e/ZXpCaj0/m57ARZZt/S+6nCzTE1r7/fQCLrCenU9PSG3t87MeN3UU3Zb1OL0gtZxemp6QWg+H6Qmt47auZ1snNwAAABgmtAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACAktAEAACB0evL82fSG1JUvL9MTUo9++GPTE1L3PfyB6QmZ7zx8fnpCa12nF3Ch4/SA1Hrc1v+8y7Kxz8/Jtn5Ld+u2Pj+73X56AC9mc88a8I3a1kkHAAAAhgltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACAltAAAACJ0+/X13TW9IPfrhj01PSH3P73xwekLrNev0gsz++rXpCanDc89NT2it23nWdrvdbrds63/R5WSZnsBFjj4/L2Xr1u4P/H9Zj9MLeAXZ1i8PAAAADBPaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEBLaAAAAEFoO/33fOj2i9NZf+cD0hNQ9//jM9ITU8eql6QmZJ952fXpC6nW//y/TE1ony/SC1uEwvSB1vPX89AReQU6uXZ2ekDrevDU9IbUet3MU3b96W2eDrT1ru/1+ekFrY2eD9fx8ekLKG20AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAICW0AAAAI/S9YQJyNARwZAAAAAABJRU5ErkJggg==" id="imagef7257d3d5d" transform="scale(1 -1) translate(0 -709.92)" x="117.717584" y="-120.331379" width="709.92" height="709.92"/> @@ -53,71 +53,26 @@ L 0 3.5 - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -757,16 +404,37 @@ z - - + + - + - + - + + + + + @@ -824,15 +554,195 @@ z - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + @@ -857,27 +767,48 @@ z - - + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - + - + - + @@ -1092,129 +1051,69 @@ z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -1240,15 +1139,15 @@ z - - + + - + - + - + @@ -1269,109 +1168,86 @@ z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -1392,15 +1268,15 @@ L -3.5 0 - - + + - + - + - + @@ -1418,15 +1294,22 @@ L -3.5 0 - - + + + + + + + - + - + - + @@ -1451,15 +1334,15 @@ L -3.5 0 - - + + - + - + - + @@ -1486,15 +1369,42 @@ L -3.5 0 - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1519,6 +1429,90 @@ L -3.5 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1526,23 +1520,29 @@ L -3.5 0 - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -1553,26 +1553,25 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -1583,55 +1582,8 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1647,15 +1599,15 @@ L -3.5 0 - - + + - + - + - + @@ -1682,6 +1634,60 @@ L -3.5 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1689,29 +1695,30 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -1722,34 +1729,60 @@ L -3.5 0 - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -1768,40 +1801,6 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1809,25 +1808,25 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -1838,29 +1837,76 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + + - - - - - - - + + + + - - - + + + + - - - - + + + - - - - + + + - - - - + + + - + - + - - - - + + + - + - + - + - + - + - + - - - - + + + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + + + + + - - - - + + + + @@ -2036,23 +2076,23 @@ z - - - - + + + + - - - - + + + + - + - + @@ -2077,88 +2117,89 @@ z - + - + - - - - + + + - + - + - - - + + + + - + - + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - + + + - - - - + + + + @@ -2170,10 +2211,10 @@ z - + - - + + @@ -2190,9 +2231,10 @@ z - - - + + + + @@ -2203,40 +2245,41 @@ z - - - - + + + + - + - + - + - + - - - + + + + - + - + - + - + @@ -2247,50 +2290,50 @@ z - - - - + + + + - - - - + + + - - - + + + + - + - + - - - - + + + + - - - - + + + + - + - - + + @@ -2302,10 +2345,9 @@ z - - - - + + + @@ -2323,30 +2365,28 @@ z - - - - - - - + + + + + + + - - - - + + + - - - - + + + @@ -2357,10 +2397,9 @@ z - - - - + + + @@ -2378,24 +2417,22 @@ z - - - - - - - - + + + + + + + - - - - + + + @@ -2406,15 +2443,16 @@ z - - - + + + + - + - + @@ -2424,10 +2462,9 @@ z - - - - + + + @@ -2439,48 +2476,50 @@ z - + - - + + - + - - + + - + - + - - + + + - + - + - + - + - - + + + @@ -2490,22 +2529,23 @@ z - - - + + + + - + - + - + - + @@ -2515,24 +2555,25 @@ z - - - + + + + - - - - - - - + + + + + + + @@ -2555,10 +2596,10 @@ z - - - - + + + + @@ -2570,49 +2611,49 @@ z - - - - + + + + - - - - + + + + - - - + + + + - - - - + + + - - - - + + + - - - + + + + - + - + @@ -2623,44 +2664,43 @@ z - - - + + + + - + - + - - - - + + + - - - - - - - - + - + - + + + + + + + @@ -2669,9 +2709,10 @@ z - - - + + + + @@ -2682,17 +2723,17 @@ z - + - - + + - - - - + + + + @@ -2704,36 +2745,36 @@ z - + - - + + - - + + + - - - - + + + - - - - + + + - - - + + + + @@ -2750,22 +2791,22 @@ z - - - + + + + - + - + - - - - + + + @@ -2776,18 +2817,18 @@ z - - - - - - - + + + + + + + @@ -2803,30 +2844,31 @@ z - - - + + + + - + - + - - - - + + + + - + - - + + @@ -2838,67 +2880,67 @@ z - - - + + + + - - - - + + + + - - - - + + + - - - + + + + - + - + - - - - + + + - - - + + + + - + - + - + - + - - - - + + + @@ -2909,53 +2951,56 @@ z - + - + - + - - - - - - - - + - + - + - + - - - + + + + + + + + + + + - - + + + - - - + + + + @@ -2967,130 +3012,125 @@ z - + - - + + - + - + - - - + + + + - - - + + + + - + - + - - - + + + + - - - - + + + - - - - + + + - - + + - - - - - + + + + - - - - + + + - - - - + + + - + - + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + + - + - - + + @@ -3102,10 +3142,10 @@ z - - - - + + + + @@ -3115,116 +3155,108 @@ z - + - + - - - - + + + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + + - + - + - + - + - + - + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + - + - + - - - - + + + + @@ -3236,15 +3268,15 @@ z - + - + - + - + @@ -3254,53 +3286,54 @@ z - + - + - + - + - - - - + + + - - - - + + + - - - + + + + - + - + - - - + + + + - - - + + + + @@ -3311,33 +3344,38 @@ z - - + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + @@ -3347,9 +3385,9 @@ z - + - + @@ -3361,73 +3399,74 @@ z - - - - + + + + - + - - + + - - - + + + + - - - + + + + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - - - - + + + @@ -3437,9 +3476,9 @@ z - + - + @@ -3449,34 +3488,35 @@ z - + - + - - - + + + + - + - + - + - + - - - - + + + + @@ -3488,60 +3528,64 @@ z - - - + + + + - - + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + + - - - - + + + - - - - + + + + - + - + @@ -3552,9 +3596,10 @@ z - - - + + + + @@ -3572,23 +3617,21 @@ z - - - - + + + - + - + - - - - + + + @@ -3598,16 +3641,17 @@ z - + - - + + - - - + + + + @@ -3619,50 +3663,51 @@ z - + - - + + - - - + + + + - - + + + - + - - + + - - - - + + + + - - - - + + + - - - - + + + + @@ -3680,66 +3725,71 @@ z - + - + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + - + - + - - - + + + + - - + + + - + - - + + @@ -3751,123 +3801,126 @@ z - - + + + - - - - + + + - - - - + + + - - - - + + + + - + - + - - - + + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - - - - + + + - + - + - + - + - - - + + + + - - - + + + + - - - + + + + - - + + + @@ -3879,50 +3932,46 @@ z - - - - + + + - + - + - - - - - - - + + + + + + + - - - - + + + - - - - + + + - - - - + + + @@ -3932,76 +3981,71 @@ z - - - - + + + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + - + - + - - - + + + + - - + + + - - - - + + + - - - - + + + @@ -4013,58 +4057,58 @@ z - - - - + + + + - - - + + + + - - - - + + + - - - - + + + + - - - - - - - + - - - - + + + + - + - + + + + + + + @@ -4073,70 +4117,66 @@ z - - - - + + + - - + + - - - - - + + + - - - - + + + - + - + - - - + + + + - + - - + + - - - - + + + - + - + - - - - + + + + @@ -4148,30 +4188,30 @@ z - + - + - - - - + + + + - - - - + + + + - + - + @@ -4182,21 +4222,24 @@ z - - - + + + + - - - + + + + - - - + + + + @@ -4205,72 +4248,75 @@ z - - - - - - + + + + + + - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + - - - + + + + - + - + @@ -4407,131 +4453,18 @@ z +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CQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCQhsAAABCR9sLF6Y3pJbLV6YntJb99ILWcji9IPO1979mekJqWdljt1sevXN6QurG7dvpCalXfOHq9ITU0de/PT0htZyeTk/gJu772AenJ6R256YXdO779c9NT0gdX35uekLq3KV1nW3b07PpCal1XY032gAAAJAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABA6Wi6cTG9IHb70xdMTWjdOpxe0LpyfXpC5628fnZ6QevaeO6YnpG65/+vTE1KX3/ba6Qmp6y9Z13/P5/7uH6cncBNv/oMPTU9I3f6tdd0bnH/02ekJmX/4zbdNT0hd/PY3pyekzl71vdMTUtvT/fSE1nY7vSDljTYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDYAAACEhDY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AABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABAS2gAAABA6Orh6bXpDardd2bODZTe9gOfxsa/93PSE1Gde/9npCam33P/e6Qmp37jnn6cnpM4uHE5PSJ1/6UumJ7SefmZ6QepfvvOy6Qmpk/NXpie0bpxOL8h89qF7pyekXrO7ND2hdbC2TlimF7RWdj0r+7YBAADALKENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAIaENAAAAoaMvf+T26Q2pe3/rxdMTUvsnr0xPSG2PjqYnZD7z+s9OT0i97m8+MD0hdfLEup4j/tEX3js9IXXXQ49PT0jtH/329ITUsttNT0h984t3T09Ive7GY9MTeB67B180PaG1PDK9ILWcnk1PSK3trF6bdd2JAgAAwDChDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQAAACGhDQA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" id="imagecde151e8a7" transform="scale(1 -1) translate(0 -709.92)" x="1023.717344" y="-120.331379" width="709.92" height="709.92"/> - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -4556,15 +4489,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -4591,15 +4524,42 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -4624,119 +4584,161 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -4752,15 +4754,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -4787,101 +4789,69 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -4907,15 +4877,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -4936,104 +4906,65 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -5054,15 +4985,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -5080,15 +5011,17 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + + + - + - + - + @@ -5113,15 +5046,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -5148,152 +5081,221 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -5309,15 +5311,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -5344,101 +5346,69 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -5464,15 +5434,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh - - + + - + - + - + @@ -5493,36 +5463,162 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAfPElEQVR4nO3Z3a9ld13H8bPPOdOZTtsh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + + - - - - + + + + - + - - + + - - - - + + + - - - - + + + - - - - + + + - + - + - - - - + + + - + - + - - - - + + + - + - + - - - - + + + - - - - + + + - + - + - + - + - - - - + + + - - - - + + + + - - - - - + + + + @@ -5688,127 +5776,125 @@ L 1733.420037 120.548686 - - - + + + + - - - - + + + + - + - + - - - - + + + - - - - - - - + - + - + + + + + + + - - - - + + + - + - + - + - + - + - + - - - - + + + - - - - - - - - + - + - + + + + + + + - - - - + + + - - - - + + + + - - - + + + + - - - + + + + @@ -5820,126 +5906,122 @@ L 1733.420037 120.548686 - - - - + + + + - + - + - + - + - - - + + + + - + - + - - - - + + + - - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - - - - - - + + + - - - - + + + - + - + - - - + + + + - - - + + + + - - - - - + + + + @@ -5951,85 +6033,82 @@ L 1733.420037 120.548686 - + - + - - - - + + + - - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + - + - + @@ -6039,34 +6118,35 @@ L 1733.420037 120.548686 - - - + + + + - - - + + + + - + - + - + - + - - - - + + + @@ -6078,97 +6158,103 @@ L 1733.420037 120.548686 - + - - + + - + - - + + - + - - + + - - - + + + + - + - + - + - + - - - + + + + - + - + - - - + + + + - + - - + + - + - + - + - + - - - + + + + - - - + + + + - - - + + + + @@ -6179,9 +6265,10 @@ L 1733.420037 120.548686 - - - + + + + @@ -6192,10 +6279,10 @@ L 1733.420037 120.548686 - + - - + + @@ -6207,73 +6294,75 @@ L 1733.420037 120.548686 - + - + - - - - + + + + - - + + + - - - + + + + - - - - + + + - - - + + + + - + - + - + - + - - - - + + + + - + - + - + - + @@ -6283,48 +6372,52 @@ L 1733.420037 120.548686 - - - + + + + - - - + + + + - - - + + + + - - - - - - - + + + + + + + - + - - + + - - - - + + + + + @@ -6336,35 +6429,36 @@ L 1733.420037 120.548686 - - - - + + + + - - - + + + + - + - + - - - - + + + - - - + + + + @@ -6374,21 +6468,23 @@ L 1733.420037 120.548686 - - - + + + + - - + + + - + - + @@ -6398,61 +6494,63 @@ L 1733.420037 120.548686 - + - + - - - + + + + - - + + + - - - - + + + - - - + + + + - + - + - + - - + + - + - - + + - + - - + + @@ -6464,33 +6562,36 @@ L 1733.420037 120.548686 - - - + + + + - - - + + + + - + - + - - - + + + + - + - + @@ -6500,9 +6601,10 @@ L 1733.420037 120.548686 - - + + + @@ -6512,9 +6614,9 @@ L 1733.420037 120.548686 - + - + @@ -6524,15 +6626,17 @@ L 1733.420037 120.548686 - - - + + + + - - - + + + + @@ -6542,41 +6646,43 @@ L 1733.420037 120.548686 - - + + - - - - - + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + @@ -6588,133 +6694,130 @@ L 1733.420037 120.548686 - - - - - + + + + - + - - + + - - - - + + + + - + - - + + - - - - + + + - - - + + + + - + - - + + - - - - + + + - - + + - - - - - + + + + - + - - + + - - - - + + + - - - - + + + - - - - + + + - - - + + + + - - - + + + + - - + + + - - - - + + + + - + - - + + @@ -6726,123 +6829,124 @@ L 1733.420037 120.548686 - - - - + + + + - - - + + + + - - - + + + + - + - - + + - + - - + + - - - - + + + - + - - + + - - - + + + - - - - + + + + - + - - + + - - - - + + + - - - - + + + - - - - + + + - - - + + + + - - + + + - + - + - - - + + + + - + - - + + @@ -6862,131 +6966,130 @@ L 1733.420037 120.548686 - - - + + + + - - - + + + + - + - - + + - + - + - - - - + + + - + - - + + - - + + - - + - - - - + + + + - - - - + + + - - + + - - - - - - - - - + + + + + + + - + - - + + - - - + + + + - - - + + + + - - - + + + + - + - - + + - - - - + + + - + - + @@ -6998,24 +7101,24 @@ L 1733.420037 120.548686 - - - - + + + + - + - + - - - - + + + + @@ -7026,96 +7129,94 @@ L 1733.420037 120.548686 - + - + - + - - + + - - - - + + + + - - - - + + + - + - + - - - - + + + - - - - + + + - - - - + + + - + - + - + - + - - - + + + + - + - - + + - + - - + + - - - + + + + @@ -7135,79 +7236,75 @@ L 1733.420037 120.548686 - - - - + + + + - - - - + + + + - + - + - + - - + + - + - + - - - - + + + + - - - - + + + - - - - + + + - + - + - - - - + + + - - - - + + + @@ -7217,48 +7314,48 @@ L 1733.420037 120.548686 - - - - - - - + + + + + + + - + - + - - + + - - + - + - - - - + + + + - - - + + + + @@ -7270,50 +7367,51 @@ L 1733.420037 120.548686 - + - - + + - - - + + + + - - + + + - - - - + + + + - - - - + + + + - - - - + + + - - - - + + + + @@ -7324,73 +7422,78 @@ L 1733.420037 120.548686 - - - - + + + - - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + - + - + - - - + + + + + - - - + + + + - + - - + + @@ -7402,36 +7505,36 @@ L 1733.420037 120.548686 - - - + + + + - - - - + + + + - - - - + + + - - - - + + + + - + - + @@ -7441,85 +7544,92 @@ L 1733.420037 120.548686 - - - - + + + - - - - + + + - - - + + + + - - - + + + + - - - + + + + - - + + + - + - + - - - - + + + - + - + - - - + + + + + - - - + + + + - - + + + - - - + + + + + @@ -7531,62 +7641,60 @@ L 1733.420037 120.548686 - + - - + + - + - + - - - + + + + - + - + - - - - + + + - - + + - - - - - + + + - + - + - + - + @@ -7596,61 +7704,61 @@ L 1733.420037 120.548686 - + - + - - - - + + + - - - - + + + - - - - + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + @@ -7662,131 +7770,125 @@ L 1733.420037 120.548686 - + - - + + - - - + + + + - - - - + + + - - - - + + + - + - + - - - - + + + - + - + - - - - + + + - + - + - - - - + + + - - + + - - - - - - + + + - - - - + + + - - - + + + + - - - + + + + - + - - + + - + - - + + - - - - + + + - - - - + + + + + @@ -7798,30 +7900,29 @@ L 1733.420037 120.548686 - + - + - - - - + + + - - - - + + + + - + - + @@ -7832,10 +7933,9 @@ L 1733.420037 120.548686 - - - - + + + @@ -7845,83 +7945,79 @@ L 1733.420037 120.548686 - + - + - + - + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - + - + - - - + + + + + - - - + + + + @@ -8075,7 +8171,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + - + @@ -8107,7 +8203,7 @@ L 3.5 0 - + @@ -8121,7 +8217,7 @@ L 3.5 0 - + @@ -8135,7 +8231,7 @@ L 3.5 0 - + @@ -8149,7 +8245,7 @@ L 3.5 0 - + @@ -8191,7 +8287,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + @@ -8204,7 +8300,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + @@ -8218,7 +8314,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + @@ -8232,7 +8328,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + @@ -8246,7 +8342,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + @@ -8260,7 +8356,7 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv index 23d664b..fdb04a3 100644 --- a/docs/assets/preset-overlap.tsv +++ b/docs/assets/preset-overlap.tsv @@ -1,362 +1,362 @@ row_preset column_preset shared_species jaccard_percent row_coverage_percent -europe europe 3014 100.000000 100.000000 -europe north_europe 1977 65.593895 65.593895 -europe australia 65 1.347709 2.156603 -europe tasmania 9 0.274474 0.298607 -europe north_america 356 5.026119 11.811546 -europe central_america 29 0.627163 0.962177 -europe south_america 30 0.668151 0.995355 -europe caribbean 9 0.231899 0.298607 -europe south_asia 138 3.116531 4.578633 -europe asia 2091 35.416667 69.376244 -europe japan 165 4.653130 5.474453 -europe africa 306 8.425110 10.152621 -europe subsaharan_africa 181 4.987600 6.005309 -europe mediterranean 2583 83.027965 85.700066 -europe arctic 2152 41.424447 71.400133 -europe oceania 88 1.692633 2.919708 -europe southeast_asia 31 0.665951 1.028534 -europe east_asia 1878 35.710211 62.309224 -europe middle_east 714 22.695486 23.689449 -north_europe europe 1977 65.593895 100.000000 -north_europe north_europe 1977 100.000000 100.000000 -north_europe australia 31 0.811518 1.568032 -north_europe tasmania 8 0.356665 0.404654 -north_europe north_america 314 5.157687 15.882650 -north_europe central_america 12 0.332963 0.606980 -north_europe south_america 20 0.577534 1.011634 -north_europe caribbean 2 0.070151 0.101163 -north_europe south_asia 53 1.524741 2.680830 -north_europe asia 1598 29.813433 80.829540 -north_europe japan 131 5.151396 6.626201 -north_europe africa 92 3.275187 4.653515 -north_europe subsaharan_africa 51 1.873622 2.579666 -north_europe mediterranean 1602 52.438625 81.031866 -north_europe arctic 1837 41.068634 92.918563 -north_europe oceania 49 1.166389 2.478503 -north_europe southeast_asia 8 0.219720 0.404654 -north_europe east_asia 1551 34.095406 78.452200 -north_europe middle_east 406 16.797683 20.536166 -australia europe 65 1.347709 3.468517 -australia north_europe 31 0.811518 1.654216 -australia australia 1874 100.000000 100.000000 -australia tasmania 274 14.621131 14.621131 -australia north_america 89 1.433172 4.749200 -australia central_america 34 0.977292 1.814301 -australia south_america 38 1.137044 2.027748 -australia caribbean 26 0.954479 1.387407 -australia south_asia 316 10.160772 16.862327 -australia asia 490 7.698350 26.147279 -australia japan 108 4.384896 5.763074 -australia africa 119 4.441956 6.350053 -australia subsaharan_africa 118 4.623824 6.296692 -australia mediterranean 73 1.629101 3.895411 -australia arctic 42 0.681265 2.241195 -australia oceania 1874 82.446106 100.000000 -australia southeast_asia 409 13.037934 21.824973 -australia east_asia 352 6.235607 18.783351 -australia middle_east 60 2.255639 3.201708 -tasmania europe 9 0.274474 3.284672 -tasmania north_europe 8 0.356665 2.919708 -tasmania australia 274 14.621131 100.000000 -tasmania tasmania 274 100.000000 100.000000 -tasmania north_america 6 0.127850 2.189781 -tasmania central_america 1 0.052301 0.364964 -tasmania south_america 2 0.112486 0.729927 -tasmania caribbean 0 0.000000 0.000000 -tasmania south_asia 3 0.164564 1.094891 -tasmania asia 11 0.209764 4.014599 -tasmania japan 3 0.309917 1.094891 -tasmania africa 6 0.503356 2.189781 -tasmania subsaharan_africa 6 0.563910 2.189781 -tasmania mediterranean 9 0.305603 3.284672 -tasmania arctic 6 0.130406 2.189781 -tasmania oceania 274 12.054553 100.000000 -tasmania southeast_asia 5 0.257599 1.824818 -tasmania east_asia 9 0.205105 3.284672 -tasmania middle_east 4 0.358423 1.459854 -north_america europe 356 5.026119 8.045198 -north_america north_europe 314 5.157687 7.096045 -north_america australia 89 1.433172 2.011299 -north_america tasmania 6 0.127850 0.135593 north_america north_america 4425 100.000000 100.000000 north_america central_america 1408 30.240550 31.819209 -north_america south_america 839 16.476826 18.960452 north_america caribbean 648 13.926499 14.644068 -north_america south_asia 80 1.356622 1.807910 -north_america asia 403 4.476286 9.107345 -north_america japan 64 1.265322 1.446328 +north_america south_america 839 16.476826 18.960452 +north_america arctic 2406 37.877834 54.372881 +north_america europe 356 5.026119 8.045198 +north_america north_europe 314 5.157687 7.096045 +north_america mediterranean 313 4.608363 7.073446 +north_america middle_east 98 1.894452 2.214689 north_america africa 92 1.750048 2.079096 north_america subsaharan_africa 84 1.635196 1.898305 -north_america mediterranean 313 4.608363 7.073446 -north_america arctic 2406 37.877834 54.372881 -north_america oceania 147 2.243932 3.322034 +north_america asia 403 4.476286 9.107345 +north_america south_asia 80 1.356622 1.807910 north_america southeast_asia 61 1.010603 1.378531 north_america east_asia 376 4.601077 8.497175 -north_america middle_east 98 1.894452 2.214689 -central_america europe 29 0.627163 1.769372 -central_america north_europe 12 0.332963 0.732154 -central_america australia 34 0.977292 2.074436 -central_america tasmania 1 0.052301 0.061013 +north_america japan 64 1.265322 1.446328 +north_america oceania 147 2.243932 3.322034 +north_america australia 89 1.433172 2.011299 +north_america tasmania 6 0.127850 0.135593 central_america north_america 1408 30.240550 85.906040 central_america central_america 1639 100.000000 100.000000 -central_america south_america 1031 48.770104 62.904210 central_america caribbean 721 40.189521 43.990238 -central_america south_asia 32 1.012979 1.952410 -central_america asia 52 0.791717 3.172666 -central_america japan 15 0.646273 0.915192 +central_america south_america 1031 48.770104 62.904210 +central_america arctic 243 4.241578 14.826113 +central_america europe 29 0.627163 1.769372 +central_america north_europe 12 0.332963 0.732154 +central_america mediterranean 41 0.958392 2.501525 +central_america middle_east 29 1.180782 1.769372 central_america africa 47 1.868045 2.867602 central_america subsaharan_africa 46 1.925492 2.806589 -central_america mediterranean 41 0.958392 2.501525 -central_america arctic 243 4.241578 14.826113 -central_america oceania 58 1.504930 3.538743 +central_america asia 52 0.791717 3.172666 +central_america south_asia 32 1.012979 1.952410 central_america southeast_asia 26 0.791476 1.586333 central_america east_asia 40 0.699056 2.440513 -central_america middle_east 29 1.180782 1.769372 -south_america europe 30 0.668151 1.992032 -south_america north_europe 20 0.577534 1.328021 -south_america australia 38 1.137044 2.523240 -south_america tasmania 2 0.112486 0.132802 -south_america north_america 839 16.476826 55.710491 -south_america central_america 1031 48.770104 68.459495 -south_america south_america 1506 100.000000 100.000000 -south_america caribbean 781 48.782011 51.859230 -south_america south_asia 40 1.325381 2.656042 -south_america asia 61 0.949269 4.050465 -south_america japan 13 0.593607 0.863214 -south_america africa 51 2.143758 3.386454 -south_america subsaharan_africa 50 2.220249 3.320053 -south_america mediterranean 39 0.940439 2.589641 -south_america arctic 103 1.795676 6.839309 -south_america oceania 63 1.695371 4.183267 -south_america southeast_asia 31 0.985065 2.058433 -south_america east_asia 44 0.787825 2.921647 -south_america middle_east 31 1.335631 2.058433 -caribbean europe 9 0.231899 1.027397 -caribbean north_europe 2 0.070151 0.228311 -caribbean australia 26 0.954479 2.968037 -caribbean tasmania 0 0.000000 0.000000 +central_america japan 15 0.646273 0.915192 +central_america oceania 58 1.504930 3.538743 +central_america australia 34 0.977292 2.074436 +central_america tasmania 1 0.052301 0.061013 caribbean north_america 648 13.926499 73.972603 caribbean central_america 721 40.189521 82.305936 -caribbean south_america 781 48.782011 89.155251 caribbean caribbean 876 100.000000 100.000000 -caribbean south_asia 29 1.208837 3.310502 -caribbean asia 38 0.653033 4.337900 -caribbean japan 9 0.575448 1.027397 +caribbean south_america 781 48.782011 89.155251 +caribbean arctic 54 1.047527 6.164384 +caribbean europe 9 0.231899 1.027397 +caribbean north_europe 2 0.070151 0.228311 +caribbean mediterranean 18 0.508762 2.054795 +caribbean middle_east 16 0.937866 1.826484 caribbean africa 34 1.925255 3.881279 caribbean subsaharan_africa 34 2.075702 3.881279 -caribbean mediterranean 18 0.508762 2.054795 -caribbean arctic 54 1.047527 6.164384 -caribbean oceania 49 1.580645 5.593607 +caribbean asia 38 0.653033 4.337900 +caribbean south_asia 29 1.208837 3.310502 caribbean southeast_asia 26 1.030928 2.968037 caribbean east_asia 23 0.462219 2.625571 -caribbean middle_east 16 0.937866 1.826484 -south_asia europe 138 3.116531 8.891753 -south_asia north_europe 53 1.524741 3.414948 -south_asia australia 316 10.160772 20.360825 -south_asia tasmania 3 0.164564 0.193299 -south_asia north_america 80 1.356622 5.154639 -south_asia central_america 32 1.012979 2.061856 -south_asia south_america 40 1.325381 2.577320 -south_asia caribbean 29 1.208837 1.868557 -south_asia south_asia 1552 100.000000 100.000000 -south_asia asia 1552 31.158402 100.000000 -south_asia japan 301 15.451745 19.394330 -south_asia africa 190 8.311461 12.242268 -south_asia subsaharan_africa 178 8.202765 11.469072 -south_asia mediterranean 174 4.287827 11.211340 -south_asia arctic 120 2.081526 7.731959 -south_asia oceania 356 10.262323 22.938144 -south_asia southeast_asia 1143 54.925517 73.646907 -south_asia east_asia 1229 27.642825 79.188144 -south_asia middle_east 212 9.698079 13.659794 -asia europe 2091 35.416667 41.979522 -asia north_europe 1598 29.813433 32.081911 -asia australia 490 7.698350 9.837382 -asia tasmania 11 0.209764 0.220839 -asia north_america 403 4.476286 8.090745 -asia central_america 52 0.791717 1.043967 -asia south_america 61 0.949269 1.224654 -asia caribbean 38 0.653033 0.762899 -asia south_asia 1552 31.158402 31.158402 -asia asia 4981 100.000000 100.000000 -asia japan 697 13.993174 13.993174 -asia africa 355 6.396396 7.127083 -asia subsaharan_africa 284 5.170217 5.701666 -asia mediterranean 1891 32.772964 37.964264 -asia arctic 2029 27.851750 40.734792 -asia oceania 575 8.609073 11.543867 -asia southeast_asia 1658 33.193193 33.286489 -asia east_asia 4123 82.774543 82.774543 -asia middle_east 835 16.726763 16.763702 -japan europe 165 4.653130 23.672884 -japan north_europe 131 5.151396 18.794835 -japan australia 108 4.384896 15.494978 -japan tasmania 3 0.309917 0.430416 -japan north_america 64 1.265322 9.182209 -japan central_america 15 0.646273 2.152080 -japan south_america 13 0.593607 1.865136 -japan caribbean 9 0.575448 1.291248 -japan south_asia 301 15.451745 43.185079 -japan asia 697 13.993174 100.000000 -japan japan 697 100.000000 100.000000 -japan africa 64 4.110469 9.182209 -japan subsaharan_africa 59 4.114365 8.464849 -japan mediterranean 160 4.973578 22.955524 -japan arctic 229 4.769840 32.855093 -japan oceania 130 4.577465 18.651363 -japan southeast_asia 285 13.675624 40.889527 -japan east_asia 697 16.905166 100.000000 -japan middle_east 95 6.560773 13.629842 -africa europe 306 8.425110 33.116883 -africa north_europe 92 3.275187 9.956710 -africa australia 119 4.441956 12.878788 -africa tasmania 6 0.503356 0.649351 -africa north_america 92 1.750048 9.956710 -africa central_america 47 1.868045 5.086580 -africa south_america 51 2.143758 5.519481 -africa caribbean 34 1.925255 3.679654 -africa south_asia 190 8.311461 20.562771 -africa asia 355 6.396396 38.419913 -africa japan 64 4.110469 6.926407 -africa africa 924 100.000000 100.000000 -africa subsaharan_africa 796 86.147186 86.147186 -africa mediterranean 355 10.926439 38.419913 -africa arctic 135 2.635689 14.610390 -africa oceania 132 4.306688 14.285714 -africa southeast_asia 120 4.846527 12.987013 -africa east_asia 234 4.861833 25.324675 -africa middle_east 240 15.686275 25.974026 -subsaharan_africa europe 181 4.987600 22.738693 -subsaharan_africa north_europe 51 1.873622 6.407035 -subsaharan_africa australia 118 4.623824 14.824121 -subsaharan_africa tasmania 6 0.563910 0.753769 -subsaharan_africa north_america 84 1.635196 10.552764 -subsaharan_africa central_america 46 1.925492 5.778894 -subsaharan_africa south_america 50 2.220249 6.281407 -subsaharan_africa caribbean 34 2.075702 4.271357 -subsaharan_africa south_asia 178 8.202765 22.361809 -subsaharan_africa asia 284 5.170217 35.678392 -subsaharan_africa japan 59 4.114365 7.412060 -subsaharan_africa africa 796 86.147186 100.000000 -subsaharan_africa subsaharan_africa 796 100.000000 100.000000 -subsaharan_africa mediterranean 227 6.986765 28.517588 -subsaharan_africa arctic 85 1.685170 10.678392 -subsaharan_africa oceania 129 4.387755 16.206030 -subsaharan_africa southeast_asia 118 5.021277 14.824121 -subsaharan_africa east_asia 181 3.820177 22.738693 -subsaharan_africa middle_east 179 12.235133 22.487437 -mediterranean europe 2583 83.027965 96.380597 -mediterranean north_europe 1602 52.438625 59.776119 -mediterranean australia 73 1.629101 2.723881 -mediterranean tasmania 9 0.305603 0.335821 -mediterranean north_america 313 4.608363 11.679104 -mediterranean central_america 41 0.958392 1.529851 -mediterranean south_america 39 0.940439 1.455224 -mediterranean caribbean 18 0.508762 0.671642 -mediterranean south_asia 174 4.287827 6.492537 -mediterranean asia 1891 32.772964 70.559701 -mediterranean japan 160 4.973578 5.970149 -mediterranean africa 355 10.926439 13.246269 -mediterranean subsaharan_africa 227 6.986765 8.470149 -mediterranean mediterranean 2680 100.000000 100.000000 -mediterranean arctic 1781 34.040520 66.455224 -mediterranean oceania 96 1.976529 3.582090 -mediterranean southeast_asia 48 1.115242 1.791045 -mediterranean east_asia 1632 31.560627 60.895522 -mediterranean middle_east 776 28.218182 28.955224 -arctic europe 2152 41.424447 49.665359 -arctic north_europe 1837 41.068634 42.395569 -arctic australia 42 0.681265 0.969305 -arctic tasmania 6 0.130406 0.138472 +caribbean japan 9 0.575448 1.027397 +caribbean oceania 49 1.580645 5.593607 +caribbean australia 26 0.954479 2.968037 +caribbean tasmania 0 0.000000 0.000000 +south_america north_america 839 16.476826 55.710491 +south_america central_america 1031 48.770104 68.459495 +south_america caribbean 781 48.782011 51.859230 +south_america south_america 1506 100.000000 100.000000 +south_america arctic 103 1.795676 6.839309 +south_america europe 30 0.668151 1.992032 +south_america north_europe 20 0.577534 1.328021 +south_america mediterranean 39 0.940439 2.589641 +south_america middle_east 31 1.335631 2.058433 +south_america africa 51 2.143758 3.386454 +south_america subsaharan_africa 50 2.220249 3.320053 +south_america asia 61 0.949269 4.050465 +south_america south_asia 40 1.325381 2.656042 +south_america southeast_asia 31 0.985065 2.058433 +south_america east_asia 44 0.787825 2.921647 +south_america japan 13 0.593607 0.863214 +south_america oceania 63 1.695371 4.183267 +south_america australia 38 1.137044 2.523240 +south_america tasmania 2 0.112486 0.132802 arctic north_america 2406 37.877834 55.527348 arctic central_america 243 4.241578 5.608124 -arctic south_america 103 1.795676 2.377106 arctic caribbean 54 1.047527 1.246250 -arctic south_asia 120 2.081526 2.769444 -arctic asia 2029 27.851750 46.826679 -arctic japan 229 4.769840 5.285022 +arctic south_america 103 1.795676 2.377106 +arctic arctic 4333 100.000000 100.000000 +arctic europe 2152 41.424447 49.665359 +arctic north_europe 1837 41.068634 42.395569 +arctic mediterranean 1781 34.040520 41.103162 +arctic middle_east 548 11.833297 12.647127 arctic africa 135 2.635689 3.115624 arctic subsaharan_africa 85 1.685170 1.961689 -arctic mediterranean 1781 34.040520 41.103162 -arctic arctic 4333 100.000000 100.000000 -arctic oceania 72 1.101928 1.661666 +arctic asia 2029 27.851750 46.826679 +arctic south_asia 120 2.081526 2.769444 arctic southeast_asia 36 0.603116 0.830833 arctic east_asia 1995 30.877573 46.042003 -arctic middle_east 548 11.833297 12.647127 -oceania europe 88 1.692633 3.871535 -oceania north_europe 49 1.166389 2.155741 -oceania australia 1874 82.446106 82.446106 -oceania tasmania 274 12.054553 12.054553 -oceania north_america 147 2.243932 6.467224 -oceania central_america 58 1.504930 2.551694 -oceania south_america 63 1.695371 2.771667 -oceania caribbean 49 1.580645 2.155741 -oceania south_asia 356 10.262323 15.662121 -oceania asia 575 8.609073 25.296964 -oceania japan 130 4.577465 5.719314 -oceania africa 132 4.306688 5.807303 -oceania subsaharan_africa 129 4.387755 5.675319 -oceania mediterranean 96 1.976529 4.223493 -oceania arctic 72 1.101928 3.167620 -oceania oceania 2273 100.000000 100.000000 -oceania southeast_asia 473 13.623272 20.809503 -oceania east_asia 409 6.831468 17.993841 -oceania middle_east 70 2.295835 3.079630 -southeast_asia europe 31 0.665951 1.854067 -southeast_asia north_europe 8 0.219720 0.478469 -southeast_asia australia 409 13.037934 24.461722 -southeast_asia tasmania 5 0.257599 0.299043 +arctic japan 229 4.769840 5.285022 +arctic oceania 72 1.101928 1.661666 +arctic australia 42 0.681265 0.969305 +arctic tasmania 6 0.130406 0.138472 +europe north_america 356 5.026119 11.811546 +europe central_america 29 0.627163 0.962177 +europe caribbean 9 0.231899 0.298607 +europe south_america 30 0.668151 0.995355 +europe arctic 2152 41.424447 71.400133 +europe europe 3014 100.000000 100.000000 +europe north_europe 1977 65.593895 65.593895 +europe mediterranean 2583 83.027965 85.700066 +europe middle_east 714 22.695486 23.689449 +europe africa 306 8.425110 10.152621 +europe subsaharan_africa 181 4.987600 6.005309 +europe asia 2091 35.416667 69.376244 +europe south_asia 138 3.116531 4.578633 +europe southeast_asia 31 0.665951 1.028534 +europe east_asia 1878 35.710211 62.309224 +europe japan 165 4.653130 5.474453 +europe oceania 88 1.692633 2.919708 +europe australia 65 1.347709 2.156603 +europe tasmania 9 0.274474 0.298607 +north_europe north_america 314 5.157687 15.882650 +north_europe central_america 12 0.332963 0.606980 +north_europe caribbean 2 0.070151 0.101163 +north_europe south_america 20 0.577534 1.011634 +north_europe arctic 1837 41.068634 92.918563 +north_europe europe 1977 65.593895 100.000000 +north_europe north_europe 1977 100.000000 100.000000 +north_europe mediterranean 1602 52.438625 81.031866 +north_europe middle_east 406 16.797683 20.536166 +north_europe africa 92 3.275187 4.653515 +north_europe subsaharan_africa 51 1.873622 2.579666 +north_europe asia 1598 29.813433 80.829540 +north_europe south_asia 53 1.524741 2.680830 +north_europe southeast_asia 8 0.219720 0.404654 +north_europe east_asia 1551 34.095406 78.452200 +north_europe japan 131 5.151396 6.626201 +north_europe oceania 49 1.166389 2.478503 +north_europe australia 31 0.811518 1.568032 +north_europe tasmania 8 0.356665 0.404654 +mediterranean north_america 313 4.608363 11.679104 +mediterranean central_america 41 0.958392 1.529851 +mediterranean caribbean 18 0.508762 0.671642 +mediterranean south_america 39 0.940439 1.455224 +mediterranean arctic 1781 34.040520 66.455224 +mediterranean europe 2583 83.027965 96.380597 +mediterranean north_europe 1602 52.438625 59.776119 +mediterranean mediterranean 2680 100.000000 100.000000 +mediterranean middle_east 776 28.218182 28.955224 +mediterranean africa 355 10.926439 13.246269 +mediterranean subsaharan_africa 227 6.986765 8.470149 +mediterranean asia 1891 32.772964 70.559701 +mediterranean south_asia 174 4.287827 6.492537 +mediterranean southeast_asia 48 1.115242 1.791045 +mediterranean east_asia 1632 31.560627 60.895522 +mediterranean japan 160 4.973578 5.970149 +mediterranean oceania 96 1.976529 3.582090 +mediterranean australia 73 1.629101 2.723881 +mediterranean tasmania 9 0.305603 0.335821 +middle_east north_america 98 1.894452 11.583924 +middle_east central_america 29 1.180782 3.427896 +middle_east caribbean 16 0.937866 1.891253 +middle_east south_america 31 1.335631 3.664303 +middle_east arctic 548 11.833297 64.775414 +middle_east europe 714 22.695486 84.397163 +middle_east north_europe 406 16.797683 47.990544 +middle_east mediterranean 776 28.218182 91.725768 +middle_east middle_east 846 100.000000 100.000000 +middle_east africa 240 15.686275 28.368794 +middle_east subsaharan_africa 179 12.235133 21.158392 +middle_east asia 835 16.726763 98.699764 +middle_east south_asia 212 9.698079 25.059102 +middle_east southeast_asia 72 2.943581 8.510638 +middle_east east_asia 592 13.525246 69.976359 +middle_east japan 95 6.560773 11.229314 +middle_east oceania 70 2.295835 8.274232 +middle_east australia 60 2.255639 7.092199 +middle_east tasmania 4 0.358423 0.472813 +africa north_america 92 1.750048 9.956710 +africa central_america 47 1.868045 5.086580 +africa caribbean 34 1.925255 3.679654 +africa south_america 51 2.143758 5.519481 +africa arctic 135 2.635689 14.610390 +africa europe 306 8.425110 33.116883 +africa north_europe 92 3.275187 9.956710 +africa mediterranean 355 10.926439 38.419913 +africa middle_east 240 15.686275 25.974026 +africa africa 924 100.000000 100.000000 +africa subsaharan_africa 796 86.147186 86.147186 +africa asia 355 6.396396 38.419913 +africa south_asia 190 8.311461 20.562771 +africa southeast_asia 120 4.846527 12.987013 +africa east_asia 234 4.861833 25.324675 +africa japan 64 4.110469 6.926407 +africa oceania 132 4.306688 14.285714 +africa australia 119 4.441956 12.878788 +africa tasmania 6 0.503356 0.649351 +subsaharan_africa north_america 84 1.635196 10.552764 +subsaharan_africa central_america 46 1.925492 5.778894 +subsaharan_africa caribbean 34 2.075702 4.271357 +subsaharan_africa south_america 50 2.220249 6.281407 +subsaharan_africa arctic 85 1.685170 10.678392 +subsaharan_africa europe 181 4.987600 22.738693 +subsaharan_africa north_europe 51 1.873622 6.407035 +subsaharan_africa mediterranean 227 6.986765 28.517588 +subsaharan_africa middle_east 179 12.235133 22.487437 +subsaharan_africa africa 796 86.147186 100.000000 +subsaharan_africa subsaharan_africa 796 100.000000 100.000000 +subsaharan_africa asia 284 5.170217 35.678392 +subsaharan_africa south_asia 178 8.202765 22.361809 +subsaharan_africa southeast_asia 118 5.021277 14.824121 +subsaharan_africa east_asia 181 3.820177 22.738693 +subsaharan_africa japan 59 4.114365 7.412060 +subsaharan_africa oceania 129 4.387755 16.206030 +subsaharan_africa australia 118 4.623824 14.824121 +subsaharan_africa tasmania 6 0.563910 0.753769 +asia north_america 403 4.476286 8.090745 +asia central_america 52 0.791717 1.043967 +asia caribbean 38 0.653033 0.762899 +asia south_america 61 0.949269 1.224654 +asia arctic 2029 27.851750 40.734792 +asia europe 2091 35.416667 41.979522 +asia north_europe 1598 29.813433 32.081911 +asia mediterranean 1891 32.772964 37.964264 +asia middle_east 835 16.726763 16.763702 +asia africa 355 6.396396 7.127083 +asia subsaharan_africa 284 5.170217 5.701666 +asia asia 4981 100.000000 100.000000 +asia south_asia 1552 31.158402 31.158402 +asia southeast_asia 1658 33.193193 33.286489 +asia east_asia 4123 82.774543 82.774543 +asia japan 697 13.993174 13.993174 +asia oceania 575 8.609073 11.543867 +asia australia 490 7.698350 9.837382 +asia tasmania 11 0.209764 0.220839 +south_asia north_america 80 1.356622 5.154639 +south_asia central_america 32 1.012979 2.061856 +south_asia caribbean 29 1.208837 1.868557 +south_asia south_america 40 1.325381 2.577320 +south_asia arctic 120 2.081526 7.731959 +south_asia europe 138 3.116531 8.891753 +south_asia north_europe 53 1.524741 3.414948 +south_asia mediterranean 174 4.287827 11.211340 +south_asia middle_east 212 9.698079 13.659794 +south_asia africa 190 8.311461 12.242268 +south_asia subsaharan_africa 178 8.202765 11.469072 +south_asia asia 1552 31.158402 100.000000 +south_asia south_asia 1552 100.000000 100.000000 +south_asia southeast_asia 1143 54.925517 73.646907 +south_asia east_asia 1229 27.642825 79.188144 +south_asia japan 301 15.451745 19.394330 +south_asia oceania 356 10.262323 22.938144 +south_asia australia 316 10.160772 20.360825 +south_asia tasmania 3 0.164564 0.193299 southeast_asia north_america 61 1.010603 3.648325 southeast_asia central_america 26 0.791476 1.555024 -southeast_asia south_america 31 0.985065 1.854067 southeast_asia caribbean 26 1.030928 1.555024 -southeast_asia south_asia 1143 54.925517 68.361244 -southeast_asia asia 1658 33.193193 99.162679 -southeast_asia japan 285 13.675624 17.045455 +southeast_asia south_america 31 0.985065 1.854067 +southeast_asia arctic 36 0.603116 2.153110 +southeast_asia europe 31 0.665951 1.854067 +southeast_asia north_europe 8 0.219720 0.478469 +southeast_asia mediterranean 48 1.115242 2.870813 +southeast_asia middle_east 72 2.943581 4.306220 southeast_asia africa 120 4.846527 7.177033 southeast_asia subsaharan_africa 118 5.021277 7.057416 -southeast_asia mediterranean 48 1.115242 2.870813 -southeast_asia arctic 36 0.603116 2.153110 -southeast_asia oceania 473 13.623272 28.289474 +southeast_asia asia 1658 33.193193 99.162679 +southeast_asia south_asia 1143 54.925517 68.361244 southeast_asia southeast_asia 1672 100.000000 100.000000 southeast_asia east_asia 1186 25.732263 70.933014 -southeast_asia middle_east 72 2.943581 4.306220 -east_asia europe 1878 35.710211 45.549357 -east_asia north_europe 1551 34.095406 37.618239 -east_asia australia 352 6.235607 8.537473 -east_asia tasmania 9 0.205105 0.218288 +southeast_asia japan 285 13.675624 17.045455 +southeast_asia oceania 473 13.623272 28.289474 +southeast_asia australia 409 13.037934 24.461722 +southeast_asia tasmania 5 0.257599 0.299043 east_asia north_america 376 4.601077 9.119573 east_asia central_america 40 0.699056 0.970167 -east_asia south_america 44 0.787825 1.067184 east_asia caribbean 23 0.462219 0.557846 -east_asia south_asia 1229 27.642825 29.808392 -east_asia asia 4123 82.774543 100.000000 -east_asia japan 697 16.905166 16.905166 +east_asia south_america 44 0.787825 1.067184 +east_asia arctic 1995 30.877573 48.387097 +east_asia europe 1878 35.710211 45.549357 +east_asia north_europe 1551 34.095406 37.618239 +east_asia mediterranean 1632 31.560627 39.582828 +east_asia middle_east 592 13.525246 14.358477 east_asia africa 234 4.861833 5.675479 east_asia subsaharan_africa 181 3.820177 4.390007 -east_asia mediterranean 1632 31.560627 39.582828 -east_asia arctic 1995 30.877573 48.387097 -east_asia oceania 409 6.831468 9.919961 +east_asia asia 4123 82.774543 100.000000 +east_asia south_asia 1229 27.642825 29.808392 east_asia southeast_asia 1186 25.732263 28.765462 east_asia east_asia 4123 100.000000 100.000000 -east_asia middle_east 592 13.525246 14.358477 -middle_east europe 714 22.695486 84.397163 -middle_east north_europe 406 16.797683 47.990544 -middle_east australia 60 2.255639 7.092199 -middle_east tasmania 4 0.358423 0.472813 -middle_east north_america 98 1.894452 11.583924 -middle_east central_america 29 1.180782 3.427896 -middle_east south_america 31 1.335631 3.664303 -middle_east caribbean 16 0.937866 1.891253 -middle_east south_asia 212 9.698079 25.059102 -middle_east asia 835 16.726763 98.699764 -middle_east japan 95 6.560773 11.229314 -middle_east africa 240 15.686275 28.368794 -middle_east subsaharan_africa 179 12.235133 21.158392 -middle_east mediterranean 776 28.218182 91.725768 -middle_east arctic 548 11.833297 64.775414 -middle_east oceania 70 2.295835 8.274232 -middle_east southeast_asia 72 2.943581 8.510638 -middle_east east_asia 592 13.525246 69.976359 -middle_east middle_east 846 100.000000 100.000000 +east_asia japan 697 16.905166 16.905166 +east_asia oceania 409 6.831468 9.919961 +east_asia australia 352 6.235607 8.537473 +east_asia tasmania 9 0.205105 0.218288 +japan north_america 64 1.265322 9.182209 +japan central_america 15 0.646273 2.152080 +japan caribbean 9 0.575448 1.291248 +japan south_america 13 0.593607 1.865136 +japan arctic 229 4.769840 32.855093 +japan europe 165 4.653130 23.672884 +japan north_europe 131 5.151396 18.794835 +japan mediterranean 160 4.973578 22.955524 +japan middle_east 95 6.560773 13.629842 +japan africa 64 4.110469 9.182209 +japan subsaharan_africa 59 4.114365 8.464849 +japan asia 697 13.993174 100.000000 +japan south_asia 301 15.451745 43.185079 +japan southeast_asia 285 13.675624 40.889527 +japan east_asia 697 16.905166 100.000000 +japan japan 697 100.000000 100.000000 +japan oceania 130 4.577465 18.651363 +japan australia 108 4.384896 15.494978 +japan tasmania 3 0.309917 0.430416 +oceania north_america 147 2.243932 6.467224 +oceania central_america 58 1.504930 2.551694 +oceania caribbean 49 1.580645 2.155741 +oceania south_america 63 1.695371 2.771667 +oceania arctic 72 1.101928 3.167620 +oceania europe 88 1.692633 3.871535 +oceania north_europe 49 1.166389 2.155741 +oceania mediterranean 96 1.976529 4.223493 +oceania middle_east 70 2.295835 3.079630 +oceania africa 132 4.306688 5.807303 +oceania subsaharan_africa 129 4.387755 5.675319 +oceania asia 575 8.609073 25.296964 +oceania south_asia 356 10.262323 15.662121 +oceania southeast_asia 473 13.623272 20.809503 +oceania east_asia 409 6.831468 17.993841 +oceania japan 130 4.577465 5.719314 +oceania oceania 2273 100.000000 100.000000 +oceania australia 1874 82.446106 82.446106 +oceania tasmania 274 12.054553 12.054553 +australia north_america 89 1.433172 4.749200 +australia central_america 34 0.977292 1.814301 +australia caribbean 26 0.954479 1.387407 +australia south_america 38 1.137044 2.027748 +australia arctic 42 0.681265 2.241195 +australia europe 65 1.347709 3.468517 +australia north_europe 31 0.811518 1.654216 +australia mediterranean 73 1.629101 3.895411 +australia middle_east 60 2.255639 3.201708 +australia africa 119 4.441956 6.350053 +australia subsaharan_africa 118 4.623824 6.296692 +australia asia 490 7.698350 26.147279 +australia south_asia 316 10.160772 16.862327 +australia southeast_asia 409 13.037934 21.824973 +australia east_asia 352 6.235607 18.783351 +australia japan 108 4.384896 5.763074 +australia oceania 1874 82.446106 100.000000 +australia australia 1874 100.000000 100.000000 +australia tasmania 274 14.621131 14.621131 +tasmania north_america 6 0.127850 2.189781 +tasmania central_america 1 0.052301 0.364964 +tasmania caribbean 0 0.000000 0.000000 +tasmania south_america 2 0.112486 0.729927 +tasmania arctic 6 0.130406 2.189781 +tasmania europe 9 0.274474 3.284672 +tasmania north_europe 8 0.356665 2.919708 +tasmania mediterranean 9 0.305603 3.284672 +tasmania middle_east 4 0.358423 1.459854 +tasmania africa 6 0.503356 2.189781 +tasmania subsaharan_africa 6 0.563910 2.189781 +tasmania asia 11 0.209764 4.014599 +tasmania south_asia 3 0.164564 1.094891 +tasmania southeast_asia 5 0.257599 1.824818 +tasmania east_asia 9 0.205105 3.284672 +tasmania japan 3 0.309917 1.094891 +tasmania oceania 274 12.054553 100.000000 +tasmania australia 274 14.621131 100.000000 +tasmania tasmania 274 100.000000 100.000000 From 6236faf313ebed26aae6ffd0002cbf42d57d989d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:39:12 +0200 Subject: [PATCH 018/221] release: add New Zealand and additional African and Oceanian presets --- dev/releases/mambo_v3/plot_overlap.py | 9 +- dev/releases/mambo_v3/preset-definitions.toml | 22 + dev/releases/mambo_v3/preset-manifest.toml | 42 +- .../mambo_v3/presets/madagascar.classes | 107 + .../mambo_v3/presets/new_zealand.classes | 425 + .../mambo_v3/presets/north_africa.classes | 236 + .../oceania_excluding_australia_nz.classes | 352 + docs/assets/preset-overlap.svg | 10358 ++++++++++------ docs/assets/preset-overlap.tsv | 168 + docs/model-presets.md | 8 + tests/releases/test_mambo_presets.py | 21 + 11 files changed, 7945 insertions(+), 3803 deletions(-) create mode 100644 dev/releases/mambo_v3/presets/madagascar.classes create mode 100644 dev/releases/mambo_v3/presets/new_zealand.classes create mode 100644 dev/releases/mambo_v3/presets/north_africa.classes create mode 100644 dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes diff --git a/dev/releases/mambo_v3/plot_overlap.py b/dev/releases/mambo_v3/plot_overlap.py index 3f98548..4134cca 100644 --- a/dev/releases/mambo_v3/plot_overlap.py +++ b/dev/releases/mambo_v3/plot_overlap.py @@ -13,9 +13,9 @@ ("north_america", "central_america", "caribbean", "south_america"), ("arctic", "europe", "north_europe"), ("mediterranean", "middle_east"), - ("africa", "subsaharan_africa"), + ("africa", "north_africa", "subsaharan_africa", "madagascar"), ("asia", "south_asia", "southeast_asia", "east_asia", "japan"), - ("oceania", "australia", "tasmania"), + ("oceania", "australia", "tasmania", "new_zealand", "oceania_excluding_australia_nz"), ) @@ -55,8 +55,9 @@ def render(preview=None): shared, jaccard, coverage = scores[i][j] writer.writerow([left, right, shared, f"{jaccard * 100:.6f}", f"{coverage * 100:.6f}"]) plt.rcParams.update({"svg.hashsalt": "mambo-preset-overlap-v1", "font.size": 9}) - fig, axes = plt.subplots(1, 2, figsize=(25, 13), layout="constrained") - labels = [f"{name.replace('_', ' ')} ({len(sets[name]):,})" for name in names] + fig, axes = plt.subplots(1, 2, figsize=(27, 15), layout="constrained") + display_names = {"oceania_excluding_australia_nz": "oceania excl. AU/NZ"} + labels = [f"{display_names.get(name, name.replace('_', ' '))} ({len(sets[name]):,})" for name in names] for ax, metric, title in zip(axes, (1, 2), ("Jaccard: shared / union (%)", "Coverage: row species also in column (%)")): values = np.array([[cell[metric] * 100 for cell in row] for row in scores]) im = ax.imshow(values, vmin=0, vmax=100, cmap="viridis") diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index f449707..8cea17b 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -74,6 +74,11 @@ continents = ["AFRICA"] countries = ["DZ", "AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", "CD", "CI", "DJ", "EG", "GQ", "ER", "SZ", "ET", "GA", "GM", "GH", "GN", "GW", "KE", "LS", "LR", "LY", "MG", "MW", "ML", "MR", "MU", "YT", "MA", "MZ", "NA", "NE", "NG", "RE", "RW", "SH", "ST", "SN", "SC", "SL", "SO", "ZA", "SS", "SD", "TZ", "TG", "TN", "UG", "EH", "ZM", "ZW"] scope = "All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included." +[presets.north_africa] +label = "Northern Africa (broad)" +countries = ["DZ", "EG", "LY", "MA", "TN", "EH", "SD", "MR"] +scope = "Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset." + [presets.subsaharan_africa] label = "Sub-Saharan Africa (broad)" continents = ["AFRICA"] @@ -81,6 +86,11 @@ countries = ["AO", "BJ", "BW", "BF", "BI", "CV", "CM", "CF", "TD", "KM", "CG", " excluded_countries = ["DZ", "EG", "LY", "MA", "TN", "EH"] scope = "Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon." +[presets.madagascar] +label = "Madagascar only" +countries = ["MG"] +scope = "All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded." + [presets.mediterranean] label = "Mediterranean (broad)" countries = ["AL", "DZ", "BA", "HR", "CY", "EG", "FR", "GR", "IL", "IT", "LB", "LY", "MT", "MC", "ME", "MA", "PS", "SI", "ES", "SY", "TN", "TR", "PT", "GI", "AD", "SM", "VA", "MK", "BG", "RS", "JO"] @@ -98,6 +108,18 @@ continents = ["OCEANIA"] countries = ["AU", "NZ", "PG", "FJ", "SB", "VU", "NC", "PF", "WS", "AS", "TO", "TV", "KI", "NR", "FM", "MH", "PW", "GU", "MP", "CK", "NU", "TK", "WF", "PN", "NF"] scope = "All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap." +[presets.new_zealand] +label = "New Zealand" +countries = ["NZ"] +scope = "All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset." + +[presets.oceania_excluding_australia_nz] +label = "Oceania excluding Australia and New Zealand" +continents = ["OCEANIA"] +countries = ["AU", "NZ", "PG", "FJ", "SB", "VU", "NC", "PF", "WS", "AS", "TO", "TV", "KI", "NR", "FM", "MH", "PW", "GU", "MP", "CK", "NU", "TK", "WF", "PN", "NF"] +excluded_countries = ["AU", "NZ"] +scope = "The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists." + [presets.southeast_asia] label = "Southeast Asia" countries = ["BN", "KH", "ID", "LA", "MY", "MM", "PH", "SG", "TH", "TL", "VN", "PG"] diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index f077e73..721a8da 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -2,7 +2,7 @@ schema_version = 2 qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "adb63292c301c98daacdc611e5535cc1b70ed6183d16403559e180f6aa60e10d" +definitions_sha256 = "36ef5aeba81f01e42468cdfa830ea95658bce6818d72f267cf6354a694a527ed" minimum_regional_rows = 3 minimum_global_rows = 25 @@ -126,6 +126,16 @@ selected_rows = 149267 species_before_threshold = 1129 sha256 = "471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1" +[presets.north_africa] +path = "presets/north_africa.classes" +count = 236 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 4393 +species_before_threshold = 422 +sha256 = "015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b" + [presets.subsaharan_africa] path = "presets/subsaharan_africa.classes" count = 796 @@ -136,6 +146,16 @@ selected_rows = 144918 species_before_threshold = 904 sha256 = "1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184" +[presets.madagascar] +path = "presets/madagascar.classes" +count = 107 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2584 +species_before_threshold = 169 +sha256 = "cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54" + [presets.mediterranean] path = "presets/mediterranean.classes" count = 2680 @@ -166,6 +186,26 @@ selected_rows = 584477 species_before_threshold = 2337 sha256 = "bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47" +[presets.new_zealand] +path = "presets/new_zealand.classes" +count = 425 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 110030 +species_before_threshold = 441 +sha256 = "81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b" + +[presets.oceania_excluding_australia_nz] +path = "presets/oceania_excluding_australia_nz.classes" +count = 352 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 8721 +species_before_threshold = 533 +sha256 = "5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d" + [presets.southeast_asia] path = "presets/southeast_asia.classes" count = 1672 diff --git a/dev/releases/mambo_v3/presets/madagascar.classes b/dev/releases/mambo_v3/presets/madagascar.classes new file mode 100644 index 0000000..8940550 --- /dev/null +++ b/dev/releases/mambo_v3/presets/madagascar.classes @@ -0,0 +1,107 @@ +1766612 +1776265 +1776268 +1786980 +1788553 +1790287 +5884245 +6117055 +6115437 +1803163 +5117776 +5116504 +8723161 +1780897 +6115388 +6116661 +1765997 +4687389 +1922063 +1922244 +1923465 +8023645 +1924713 +1932302 +1932332 +8177775 +1933649 +5138841 +1919181 +1919213 +1919346 +5137827 +1920374 +5137863 +1943236 +1946661 +1947113 +5109848 +6116899 +1892554 +5806166 +1895956 +1897972 +1898017 +5130392 +5130464 +5130487 +5130502 +5130542 +1906621 +11378273 +5133610 +1915499 +11372793 +11375508 +5131347 +7642610 +5128597 +1910628 +1910629 +1879452 +1879490 +5126637 +1883067 +1883124 +1884051 +1884437 +1884449 +6120980 +1884774 +1885262 +1886104 +1886729 +1887054 +8955839 +4531670 +1889272 +1889277 +1889543 +7543006 +1890410 +1890670 +1892456 +5771877 +6121010 +5127644 +1867014 +1868049 +1868060 +1861433 +1861510 +1861544 +1861644 +1862293 +1862311 +1862401 +1862765 +1863034 +1863282 +9178932 +5124088 +5124352 +1938125 +1938166 +1939314 +1802662 +1802868 diff --git a/dev/releases/mambo_v3/presets/new_zealand.classes b/dev/releases/mambo_v3/presets/new_zealand.classes new file mode 100644 index 0000000..dc4c509 --- /dev/null +++ b/dev/releases/mambo_v3/presets/new_zealand.classes @@ -0,0 +1,425 @@ +1831999 +1832649 +1849007 +1849010 +1850156 +1850184 +1850781 +5806361 +11528968 +1851347 +1829776 +1829814 +4705103 +4695719 +1828395 +1828400 +1828402 +8150089 +1828426 +1828826 +1845965 +1830812 +1831473 +1831499 +1831565 +1831667 +4708342 +1761751 +1761752 +1762849 +1780857 +1798023 +5113950 +1803197 +5115777 +1816110 +1816264 +1781413 +9400916 +5113036 +4687389 +4529064 +1837724 +1837726 +1837727 +1839714 +1840346 +1841095 +1831752 +1852832 +5123339 +1870703 +1870988 +1872735 +1872827 +1872901 +1873079 +1874146 +1875534 +1876542 +10142569 +1877453 +1877988 +1878470 +1878490 +1890056 +1890065 +1836907 +1940575 +1736623 +1737131 +1737847 +1737893 +1738045 +1738081 +1739128 +1739220 +1739553 +1739567 +1743182 +1743184 +1743319 +4707896 +4707900 +1744998 +1745307 +1746462 +1746512 +1747068 +1747215 +1747222 +1747814 +1748103 +1748425 +1748518 +1748648 +1748661 +1738196 +1924713 +5139357 +5139524 +5139673 +11636481 +1932563 +7346444 +1920496 +1749531 +1749664 +1750131 +1750326 +5104903 +1954236 +1954514 +5143586 +1955271 +1955272 +1955413 +1955416 +1955422 +1955753 +1955755 +1955763 +1955899 +1956416 +1959379 +1960004 +4702961 +1962656 +1962657 +1962659 +1962689 +1964137 +1964141 +1964143 +1964144 +1964151 +1964153 +1964155 +1964158 +1964174 +1966978 +5144554 +5144558 +1970145 +1970148 +1970150 +5144937 +4702783 +4702784 +1972797 +1972800 +1972806 +5146856 +1976933 +1976934 +1976939 +1976941 +5148096 +1977759 +1977764 +1977767 +1977773 +1978274 +1978281 +1978282 +1978283 +4702599 +4702603 +4702609 +1980055 +1980063 +1980068 +1986101 +4702731 +1987855 +4702892 +4702893 +4702911 +4702912 +1988894 +1989282 +1989377 +1992167 +1954338 +1954344 +1954346 +1954351 +1954353 +1954356 +1954359 +10263383 +1758727 +1760173 +1762902 +5109882 +5802396 +1768546 +1768554 +1768557 +1768560 +1769302 +4688049 +9493016 +1776182 +5111195 +1785145 +1785149 +1785314 +1785329 +5112457 +5112460 +5112461 +5112464 +5112465 +5112467 +5112469 +5112474 +5112475 +5112480 +5112481 +1787165 +1791793 +1791862 +1794425 +1795068 +10690739 +10700540 +10706419 +10716234 +10732033 +10741837 +10747908 +10799294 +10814936 +10824750 +10840540 +10840565 +10850393 +10850415 +10866199 +10891794 +11539735 +11858666 +1796791 +1798084 +1792560 +8108800 +1770849 +1771245 +1771296 +1894054 +7712938 +5806175 +5806176 +5806177 +1902106 +1902108 +1909216 +1908108 +5133088 +7642610 +1910629 +1853190 +1735168 +1735391 +1735398 +5102432 +5120675 +5121177 +5121613 +8273859 +1842119 +1842124 +5120396 +1842508 +1879405 +10851840 +10857326 +5126231 +5126240 +5126241 +5126259 +5126284 +5126287 +5126292 +5126315 +5126332 +5126344 +5126357 +5126381 +5126396 +5126397 +5126398 +5126434 +5126445 +5126449 +5126454 +5126458 +5802331 +5802333 +1880353 +1880439 +1881122 +1881132 +1881157 +1881504 +1882297 +1882355 +5126866 +5126870 +5126889 +5126905 +5126916 +5126946 +5127024 +5127045 +5127054 +1882905 +1882965 +1884503 +1884539 +1884595 +1884607 +1884610 +4687228 +1884936 +1886251 +1887580 +1887686 +1888958 +1892462 +6133232 +5802339 +10245924 +10769553 +1887126 +1880275 +1880286 +1880293 +1880305 +1880310 +1880316 +1880318 +1880321 +1880350 +1831097 +1831136 +4708183 +10546013 +11428453 +1854028 +1854249 +1854906 +1858674 +1858762 +1859061 +4536292 +9590272 +9801765 +5123118 +5123137 +5123276 +1861644 +1992976 +1757853 +8254441 +1856005 +5122779 +1856348 +1856374 +1856516 +1857143 +1857180 +1857213 +1857233 +1857241 +1857295 +1857385 +1857410 +1857626 +1857829 +1857882 +1857900 +1857935 +1858100 +1858523 +1858526 +1856893 +1838289 +1838304 +1838308 +1838331 +1833518 +1833523 +1833525 +1833531 +1833532 +1833535 +1833539 +1833600 +1833664 +1835082 +1836871 +1836899 +1837172 +1837572 +1837857 +1837870 +1837894 +1838626 +1838629 +1838633 +1838635 +1838641 +1838649 +8958353 +1838960 +4528702 +1839370 +1841180 +1841183 +1841188 +1841215 +1841219 +1801432 diff --git a/dev/releases/mambo_v3/presets/north_africa.classes b/dev/releases/mambo_v3/presets/north_africa.classes new file mode 100644 index 0000000..7160bb9 --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_africa.classes @@ -0,0 +1,236 @@ +1733755 +1734704 +11529292 +1845270 +9868978 +1850640 +1850781 +1845952 +4532500 +1783882 +1786980 +1786985 +1788553 +1790692 +1792210 +1797542 +4532473 +1798481 +1798504 +1798802 +4532352 +1803148 +1803163 +1805110 +5117189 +1814552 +9331464 +1819928 +8148822 +1780869 +4532453 +1777517 +1860857 +1871252 +1871783 +7673242 +1872901 +1873079 +1873215 +1875409 +1875687 +1876542 +9111961 +5126052 +4531417 +5884888 +1941330 +10309794 +1736623 +1739833 +10581870 +1922572 +1924082 +10656713 +1924713 +1925918 +1926324 +1926385 +1926546 +1926550 +1929697 +1930904 +1930916 +4535106 +1931788 +1932393 +1932411 +1932752 +1932976 +9954885 +1933647 +1933649 +1926166 +1933204 +1919223 +1919333 +7981372 +1919346 +1919703 +1919966 +1920258 +5137790 +1920359 +1920369 +1920395 +1920496 +1920506 +1920709 +5137612 +1920218 +1955694 +1957266 +1957286 +8172949 +1961013 +1964195 +1964836 +1967025 +1967265 +1969958 +5144805 +5144900 +5145502 +5145842 +8014296 +7996464 +5146611 +5146774 +5146837 +5147039 +5147043 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147560 +5148264 +1983039 +1983062 +1983525 +1983528 +1985742 +4525093 +6118530 +1988019 +1988064 +1992066 +11654024 +7507369 +1989594 +4525034 +4524541 +9220953 +5149787 +8277078 +8073674 +1946661 +5142338 +1949954 +4534275 +5109843 +5109931 +8352161 +5772171 +5772172 +1775329 +5110858 +5772222 +1785185 +1786360 +1787770 +4534166 +4534194 +1792418 +1795068 +4532908 +1795483 +4532811 +1763072 +4534675 +4534681 +8108800 +1770821 +1771040 +4533714 +1765751 +4532203 +4532206 +4532266 +1824131 +5118892 +4535632 +8049830 +4535809 +4535819 +4299368 +1901850 +5130542 +1911461 +5134098 +5134301 +1916352 +1916554 +1918632 +1918776 +7988274 +8404037 +7762841 +7642610 +1896957 +1899737 +7934873 +8393082 +1879001 +1879408 +1879427 +1879452 +1879471 +1879691 +1881126 +1881151 +9819403 +1881362 +1882905 +1882965 +1885931 +1886251 +7562564 +1888484 +1890534 +1890898 +1891171 +1891217 +1892476 +1889833 +6121184 +8218441 +4532150 +4532160 +1831136 +1861494 +1861510 +1862293 +1862401 +1862692 +1862765 +1864652 +7761138 +1857581 +8225376 +4690079 +5141297 +4534796 +1803060 diff --git a/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes b/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes new file mode 100644 index 0000000..94ba964 --- /dev/null +++ b/dev/releases/mambo_v3/presets/oceania_excluding_australia_nz.classes @@ -0,0 +1,352 @@ +1849007 +1850798 +1835460 +1831655 +1762151 +1763976 +1764060 +1765653 +1766560 +1777166 +4687991 +5110981 +9610080 +1780716 +1785832 +1786990 +7346446 +1789794 +1790257 +1791514 +9504222 +1796984 +10108671 +6132979 +1798023 +1798101 +5113950 +5884247 +1787090 +4532352 +6115437 +8793873 +1803148 +1803197 +1806871 +10189965 +1809381 +1816029 +1820401 +10270464 +12216332 +9852545 +10178326 +5116504 +1781413 +1763761 +6115388 +1816648 +1774598 +1774604 +1774654 +1813468 +9400916 +5109796 +1775796 +4687933 +4687935 +1781531 +10330198 +10598038 +11612469 +1786597 +4687389 +5884188 +9935660 +4301309 +5112440 +5880040 +6132546 +1872873 +5125602 +1875478 +1736623 +1736995 +1737015 +1740828 +1741820 +1741826 +1746000 +10581870 +1921123 +1921263 +1921300 +5138069 +1922244 +1922745 +4708972 +4708977 +1924558 +1924713 +4300393 +1925628 +1925877 +1926436 +1926448 +1926574 +4300259 +1927274 +4709107 +1928382 +1928915 +1931889 +1931943 +1931956 +1931958 +4709051 +1932159 +1932172 +1932206 +1932246 +1932273 +4709095 +4708995 +1932563 +7346444 +4709102 +11014495 +1919176 +1919340 +1919348 +1919444 +1919652 +1919744 +1919758 +5137808 +5137849 +5137854 +1920496 +5137949 +1920621 +1758461 +9593393 +1956384 +1957523 +1958454 +1964305 +1964331 +1966185 +11858774 +6133643 +9875420 +1976213 +5148214 +1980694 +1982221 +9488754 +1985181 +1985228 +1986774 +1987775 +6133591 +1989538 +10155932 +5880539 +9617411 +5149753 +1942060 +1942621 +1942636 +1944462 +1945225 +1945694 +1945715 +5142067 +1946737 +5715127 +1758839 +1762657 +5109848 +5109872 +5109882 +1765508 +1767430 +4301304 +5111195 +1780330 +5112414 +1785145 +1785725 +7400814 +4687681 +1791862 +1792996 +1795068 +1795597 +4688169 +8729319 +6132989 +10121804 +1771245 +5108665 +4532208 +6115822 +1825956 +5127748 +1892821 +1893660 +1893787 +4704279 +1895448 +1895956 +1896304 +11701883 +5129266 +5714367 +1898970 +1900872 +1900939 +5130439 +5130456 +5130476 +1904798 +1904884 +1904996 +1907569 +1907683 +1908700 +1908713 +1909216 +10656625 +1909659 +1909854 +1910753 +1910809 +1910812 +1911755 +1913091 +1915031 +1915144 +5135839 +5136713 +5136790 +5136939 +5137085 +5137128 +9251096 +4704316 +5131493 +5133088 +6100725 +7642610 +1910576 +1910629 +1910648 +1910662 +1951492 +1951874 +5102432 +1730519 +1730543 +8008237 +1879408 +1879471 +5126635 +1880852 +1880858 +1881151 +1881320 +1881329 +1881504 +1882253 +1882771 +1882884 +1882965 +1883067 +1884228 +9294363 +6120980 +1884890 +1884909 +1886251 +1886720 +1886729 +1887054 +1888913 +1889272 +1889277 +1890247 +1890335 +7543006 +5771877 +10145421 +6121218 +10502505 +5127698 +5802339 +1888638 +1888639 +1886123 +1858930 +1859932 +1864897 +7734292 +10019169 +1861451 +1861456 +1861457 +1861488 +1861644 +5123636 +1861951 +1862026 +1862293 +1862331 +1862363 +1862370 +1862401 +1862403 +1862414 +9836014 +1862475 +1862516 +1862526 +6106708 +1863467 +1863880 +1864135 +11954157 +5124332 +5123852 +1953217 +1954120 +1856348 +1857068 +1857143 +1857258 +1857380 +1856891 +1937698 +1937712 +1937819 +1937856 +1937988 +1938069 +1938074 +1938088 +1938129 +5141177 +5141187 +5141252 +5141254 +1937444 +1937618 +1939156 +10213314 +1800441 +1800691 +1801490 +1802090 +1802702 +1803035 +10942408 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg index 0c02e37..f5b2ca0 100644 --- a/docs/assets/preset-overlap.svg +++ b/docs/assets/preset-overlap.svg @@ -1,7 +1,7 @@ - + @@ -20,25 +20,25 @@ - - - + +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" id="image2d9ab59ab8" transform="scale(1 -1) translate(0 -765.36)" x="127.543052" y="-179.086835" width="765.36" height="765.36"/> @@ -49,12 +49,12 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - + - + - + @@ -796,12 +796,12 @@ z - + - + - + - + @@ -882,12 +882,12 @@ z - + - + - + - + @@ -972,12 +972,12 @@ z - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1051,15 +1081,79 @@ z - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1075,15 +1169,15 @@ z - - + + - + - + - + @@ -1105,15 +1199,15 @@ z - - + + - + - + - + @@ -1139,15 +1233,15 @@ z - - + + - + - + - + @@ -1168,15 +1262,15 @@ z - - + + - + - + - + - + + - + - + - + @@ -1239,15 +1333,15 @@ z - - + + - + - + - + @@ -1268,15 +1362,15 @@ z - - + + - + - + - + @@ -1294,22 +1388,209 @@ z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -1335,14 +1616,14 @@ L -3.5 0 - + - + - + - + @@ -1370,14 +1651,14 @@ L -3.5 0 - + - + - + - + @@ -1397,14 +1678,14 @@ L -3.5 0 - + - + - + - + @@ -1430,14 +1711,14 @@ L -3.5 0 - + - + - + - + @@ -1456,14 +1737,14 @@ L -3.5 0 - + - + - + - + @@ -1482,14 +1763,14 @@ L -3.5 0 - + - + - + - + @@ -1514,14 +1795,14 @@ L -3.5 0 - + - + - + - + @@ -1547,14 +1828,14 @@ L -3.5 0 - + - + - + - + @@ -1576,14 +1857,14 @@ L -3.5 0 - + - + - + - + @@ -1600,14 +1881,44 @@ L -3.5 0 - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1634,15 +1945,43 @@ L -3.5 0 - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1658,15 +1997,15 @@ L -3.5 0 - - + + - + - + - + @@ -1688,15 +2027,15 @@ L -3.5 0 - - + + - + - + - + @@ -1722,15 +2061,15 @@ L -3.5 0 - - + + - + - + - + @@ -1751,15 +2090,15 @@ L -3.5 0 - - + + - + - + - + @@ -1774,15 +2113,15 @@ L -3.5 0 - - + + - + - + - + @@ -1801,15 +2140,15 @@ L -3.5 0 - - + + - + - + - + @@ -1830,15 +2169,15 @@ L -3.5 0 - - + + - + - + - + @@ -1856,2827 +2195,4649 @@ L -3.5 0 - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - + + + + + + + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - + - + - + - + - - - + + + + + + + + + + + + + + + - + - - - - + + + + - + - + - - - - - - - - - - - - - - - - + + + + + - + - + - - - - + + + + - + - + - - - - + + + + - - - - - + + + + - - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - - - + + + - - - - - - - - - - - + + + - - - - - - + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - + + + - - - - - - - + - - - + + + + - - - - - - - - - - + + + + - - - + + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - + - - - - - + + + + - - - - + + + + - - - - + + + + + - - - + + + - - - - - - - - - - - - + + + - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - + - + - - - - - - - + - + - - - - - - - + - + - + - + - + - + - - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + + + - - - + + + + + + + + + - - - - - - + + + + - - - - - - + + + + + - - - + + + - - - - + + + - - - - - - + + + + - - - - - + + + + - + - + - + - + - + + + + + + + - + - + - + - + - + - - - - - + + + + + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - - - - - - - + - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - - - - - - - - - - - + + + + + - - - - + + + + + - - - - - + + + + + - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - - - - + + + + - - - - - + + + + - - - - - + + + + - + + + + + + + + + + + + + + - + - - - + + + + - - - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - + - + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - - - + + + + - - - - + + + + - - - + + + + + + + + + + + - + - + - - - - - + + + + + - - - + + + - + - - - + + + + - - - - - + + + + + - + - + - + - + - + + + + + + + + + + + + + + - + - - - - + + + + + - + - + - - - - + + + + + - - - - + + + + + - - - - - - - - - - + + + + + - - - - + + + + + - - - + + + - + - - - - - + + + + - - - - + + + + - + - + - - - + + + + + + + + + + - + - + + + + + + + + + + + + + + + - + - - - + + + - + - - - - - + + + + - + + + + + + + - + - - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - + - + - + - + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - + + + + + + + + + - + - + - + - + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + + - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -4701,15 +6862,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4730,15 +6891,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4754,15 +6915,45 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -4789,15 +6980,43 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -4813,15 +7032,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4843,15 +7062,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4877,15 +7096,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4906,15 +7125,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4929,15 +7148,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4956,15 +7175,15 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - + + - + - + - + @@ -4981,3056 +7200,3672 @@ iVBORw0KGgoAAAANSUhEUgAAA9oAAAPaCAYAAABoFyBHAAAe8ElEQVR4nO3Z3+tteV3H8b2/P873nDnj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + + - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + - - - - - + + + + - - - + + + - - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - + - + - - - - + + + + - - - - + + + + + - - - - + + + + - + - + - - - - + + + + + - + - + - - - - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + - + - - - + + + + + + + + + + - + - - - - - + + + + + - - - + + + - + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - - + + + + + - + - + - - - - + + + + + - - - - + + + + + - - - - + + + + - + - + - - - - + + + + + - + - + - - - - + + + + + - - - - + + + + + - + + + + + + + + - + - - - - - + + + + + - - - - - + + + + + - + + + + + + + + - + - - - + + + + + + + + + + - + - - - - + + + + + - - - + + + + - + + + + + + + + + + + + + - + - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - + - + - - - - + + + + - - - - + + + + + - - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - - + + + + + - - - - - + + + + - - - - - + + + + + - + - + - - - - - - - - - - + + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - + - + - + - + - - - - - - - - - - + + + + + - - - - + + + + + - + - + - + - + - - - - + + + + + - - - - + + + + - + + + + + + + + + + + + + - + - - - - - + + + + - - - - + + + + + - - - + + + + - + - + - - - + + + + + + + + + + - - - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - + + - - - - + + + + + - - - - + + + + + - - - - - + + + + - - - - + + + + - + - + - - - - - + + + + + - - - - + + + + - + - + - - - - - - - - - - - - + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - - - - - + + + + - - - + + + - - - - - - - + + + + + - - - - - + + + + - - - + + + - - - - - - - - - - - - + + + + - - - + + + - + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - - - - - - - + + + + + + - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + - - - - - + + + + + - - - - + + + + + - - - + + + - - - - - + + + + - - - - + + + - - + - - - + + + - - - - - - + + + + - - - - + + + + + - + - + - - - - - - - - + - + - - - - - + + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - - + + + + + - - - + + + - + - - - - + + + + + - - - - - + + + + + - - - + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - - + + + + + - - - + + + - + - + - + - - - - + + + + + - - - + + + - - - - - + + + + + - - - - + + + + + - - - - - + + + + + + + + + + + - + - + - - - - + + + + + + + + + + + - + - + - - - - - + + + + - - - - - + + + + + - - - - + + + + + - - - + + + + - - - - + + + + + + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + - + - + - - - - + + + + - - - - - + + + + - - - - - + + + + + - - - + + + - + - + - + - - - - - + + + + + - - - + + + - + - - - - + + + + + - - - - + + + + + - + - + - - - + + + + + + + + + + + + + + + - + - - - - + + + + - + - + - + - + - - - + + + - + - - - - + + + + - - - - - + + + + - - - - - + + + + + - - - + + + - + - + - + - - - - - + + + + + - - - + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - + - + - - - + + + - + - - - + + + - + - + - + - - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - - - + + + + + + + + + - + - - - - - + + + + - - - - + + + + + - - - + + + - - - - + + + - + - + + + + + + + + - + - + + + + + + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + - + - - - - - + + + + + - - - - + + + + + - - - - - + + + + - - - - - + + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - - - - + + + + - - - + + + - + + - - - - - + + + + + - - - - + + + + - + + + + + + + - + - + + + + + + + - + - - - - + + + + - + - + - - - - + + + + - + - + - - - + + + + + + + + + + + - - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + - - - - - + + + + - + - + - - - - + + + + + + + + + + + - - - + + + - + + - - - - - + + + + + + - - - - - + + + + + - + + + + + + + + - + - - - - + + + + - - - - - + + + + + - - - - - + + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + - - - - + + + - - - - - - + + + + - - - + + + - - + - + - - - - + + + + - - - - - - + + + + + - - - - - + + + + + - - - + + + - + - + + + + + + + + + + + + + + - + - - - - - + + + + + - - - + + + - + - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - + - + - + - + - + - + - - - + + + + + + + + + - - - - + + + - - - - - - + + + + - - - - - + + + + - - - + + + + + + + + + - - - - - + + + + - - - - + + + + - - - + + + + + + + + + + - - + - - - - - + + + + + - - - - - + + + + + - + + + + + + + - + - + - + - - - + + + - + - - - + + + + + + + + + - + - + + + + + + + - + - - - - + + + + - - - - + + + + + - + - + - + - + - + - + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + - - - + + + - - - - + + + - - - - - - + + + + - - - - + + + + - + - + - - - - - + + + + + + - - - + + + - + + - - - - + + + + + - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - + - + - - - - + + + + + - - - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + + + + + + + - + + + + + + + + - + - - - - - + + + + - - - + + + - + - - - - - + + + + - - - + + + - + + - - - - + + + + + - - - + + + - - + - + - + - - - - - + + + + - - - + + + + - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - + - + - - - - + + + + - - - - + + + + - + + + + + + + + - + - - - + + + + - - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + - + - + - + - - @@ -8159,100 +10944,100 @@ z - +iVBORw0KGgoAAAANSUhEUgAAAC8AAAOiCAYAAADg4Y43AAAFUklEQVR4nO3c0W0bQRAFwdvjhuYQnH8opnOQPgoP6IqgcViMhnukzp/z9/uMenXAb0zH3+fs9u+WP8U797xHN/zY9JMvXmnOK9PxjUqleKVRqUzH36dRaRSv3Od05onilXve3f7d8mc8vlGpFK/cp1FpFK8055Xp+G4PlOKVe7poNabjG5VK8UpbpVK80plXpuO7dFKKVxqVSvFKZ16Zju/YKMUr3ZgpxSvNeWU6vi//K8UrrQfKdHx/YZXilc68UrzSmVem49sqleKVRqVSvHK/nXljOv4u5w+nF++0HijFK515ZTq+Y6MUr/RJSpmO75OUUrzSeqAUr3Tmlen4tkqleKWVWCleaT1QpuNbD5TilfvsHvntJ1+80nqgTMff73D+cHrxTqNSmY6/391Ts/3ki1calUrxSrcHynR8F61K8UrvYZXilea8Mh3fVqkUr3RjpkzHd+mkFK80KpXilVZiZTq+fzyoFK+0HijFK60HynR8o1IpXunGTCleac4r0/FtlUrxSqNSmY5vq1SKVxqVSvFKK7EyHd+/DlCKVxqVSvFKK7EyHd/tgVK80qhUildaiZXp+EalUrzSqFSm4xuVSvFKo1IpXmnOK9PxjUqleKV/wqYUrzTnlen4tkqleKVRqUzHd2yU4pXWA6V4pTmvTMc3KpXilUalUrzSnFem4xuVSvFKZ14pXmk9UKbjG5VK8cr96oJfmH7y0/GNSqV4pTOvFK/0SUqZjm9UKsUrjUqleKU5r0zHd2yU4pXWA6V4pTmvTMd3bJTildYDZTq+UakUrzQqleKV5rwyHd+xUYpXWg+U4pXmvFK8UrwyHd96oEzH9xdWKV7pzCvFK60HynR8o1IpXmlUKsUrzXllOv4+Z/f/rEw/+eKV1gOleKX1QJmO79goxSutB8p0fKNSKV7pzCvFK92YKdPxbZVK8UrxSvFKK7EyHd96oBSv9ElKKV5pPVCm4zs2SvFKZ16Zjm+rVIpXGpVK8Uo3Zsp0fOuBUrzSeqAUr9zTmTem41sPlOKV1gOleKUzr0zH3+dpPSCKVxqVynT8PX2SMopXGpVK8UpzXpmOb1QqxSu9k1KKV3qhpkzHt1UqxSutB8p0fKNSKV7p9kApXmnOK9Pxd3hSbj/54pVGpVK80plXpuO7dFKKV+7bqDSKV1oPlOn4jo1SvNJKrEzHt1UqxSutB0rxyn37DbgxHd9WqRSvtBIrxSutxMp0fKNSKV5pVCrFK815ZTq+SyeleKX1QJmO7y+sUrzSmVeKVzrzynR8x0YpXun2QCleac4r0/EdG6V4pTOvTMd3bJTilT5JKcUrzXllOv6+559u+LHpJ1+80qhUildaiZXp+EalUrzSSqwUr9xPc96Yjm+rVIpXWg+U6fg+SSnFK/fTemAUr7QeKNPxrQdK8UqXTkrxyn2f1gNiOr71QCleuZ9GpVG80pxXpuPvp0sno3il7x4o0/GNSqV4pXdSSvFK3z1QpuMblUrxSqNSKV5pzivT8b2TUopXeielFK8055Xp+F4uKMUrvYdVpuMblUrxSl/+V4pX+pGXMh3fB3CleKV3UkrxSnNemY5vq1SKV7o9UKbju2hVilfaKpXild7DKtPxrQdK8Uo/eFGKV7o9UKbjWw+U4pXWA6V4pR95KdPxXbQqxSutB8p0fH9hleKVRqVSvNKZV6bj73t0ws9NP/nilUalUrxyl+uX27fj76f1wCheuZ9n99BPP/nildYDZTr+fk6jkiheuW/rgTEd31apFK80KpXilVZiZTr+vsP9u+VP8U7rgVK8cj9nt3+3/BmPbz1Qilf+A+XwkkbDOsOdAAAAAElFTkSuQmCC" id="imagee3acf2c03e" transform="scale(1 -1) translate(0 -669.6)" x="904.32" y="-226.8" width="33.84" height="669.6"/> - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + @@ -8262,108 +11047,108 @@ L 3.5 0 - - +iVBORw0KGgoAAAANSUhEUgAAAC8AAAOiCAYAAADg4Y43AAAFUklEQVR4nO3c0W0bQRAFwdvjhuYQnH8opnOQPgoP6IqgcViMhnukzp/z9/uMenXAb0zH3+fs9u+WP8U797xHN/zY9JMvXmnOK9PxjUqleKVRqUzH36dRaRSv3Od05onilXve3f7d8mc8vlGpFK/cp1FpFK8055Xp+G4PlOKVe7poNabjG5VK8UpbpVK80plXpuO7dFKKVxqVSvFKZ16Zju/YKMUr3ZgpxSvNeWU6vi//K8UrrQfKdHx/YZXilc68UrzSmVem49sqleKVRqVSvHK/nXljOv4u5w+nF++0HijFK515ZTq+Y6MUr/RJSpmO75OUUrzSeqAUr3Tmlen4tkqleKWVWCleaT1QpuNbD5TilfvsHvntJ1+80nqgTMff73D+cHrxTqNSmY6/391Ts/3ki1calUrxSrcHynR8F61K8UrvYZXilea8Mh3fVqkUr3RjpkzHd+mkFK80KpXilVZiZTq+fzyoFK+0HijFK60HynR8o1IpXunGTCleac4r0/FtlUrxSqNSmY5vq1SKVxqVSvFKK7EyHd+/DlCKVxqVSvFKK7EyHd/tgVK80qhUildaiZXp+EalUrzSqFSm4xuVSvFKo1IpXmnOK9PxjUqleKV/wqYUrzTnlen4tkqleKVRqUzHd2yU4pXWA6V4pTmvTMc3KpXilUalUrzSnFem4xuVSvFKZ14pXmk9UKbjG5VK8cr96oJfmH7y0/GNSqV4pTOvFK/0SUqZjm9UKsUrjUqleKU5r0zHd2yU4pXWA6V4pTmvTMd3bJTildYDZTq+UakUrzQqleKV5rwyHd+xUYpXWg+U4pXmvFK8UrwyHd96oEzH9xdWKV7pzCvFK60HynR8o1IpXmlUKsUrzXllOv4+Z/f/rEw/+eKV1gOleKX1QJmO79goxSutB8p0fKNSKV7pzCvFK92YKdPxbZVK8UrxSvFKK7EyHd96oBSv9ElKKV5pPVCm4zs2SvFKZ16Zjm+rVIpXGpVK8Uo3Zsp0fOuBUrzSeqAUr9zTmTem41sPlOKV1gOleKUzr0zH3+dpPSCKVxqVynT8PX2SMopXGpVK8UpzXpmOb1QqxSu9k1KKV3qhpkzHt1UqxSutB8p0fKNSKV7p9kApXmnOK9Pxd3hSbj/54pVGpVK80plXpuO7dFKKV+7bqDSKV1oPlOn4jo1SvNJKrEzHt1UqxSutB0rxyn37DbgxHd9WqRSvtBIrxSutxMp0fKNSKV5pVCrFK815ZTq+SyeleKX1QJmO7y+sUrzSmVeKVzrzynR8x0YpXun2QCleac4r0/EdG6V4pTOvTMd3bJTilT5JKcUrzXllOv6+559u+LHpJ1+80qhUildaiZXp+EalUrzSSqwUr9xPc96Yjm+rVIpXWg+U6fg+SSnFK/fTemAUr7QeKNPxrQdK8UqXTkrxyn2f1gNiOr71QCleuZ9GpVG80pxXpuPvp0sno3il7x4o0/GNSqV4pXdSSvFK3z1QpuMblUrxSqNSKV5pzivT8b2TUopXeielFK8055Xp+F4uKMUrvYdVpuMblUrxSl/+V4pX+pGXMh3fB3CleKV3UkrxSnNemY5vq1SKV7o9UKbju2hVilfaKpXild7DKtPxrQdK8Uo/eFGKV7o9UKbjWw+U4pXWA6V4pR95KdPxXbQqxSutB8p0fH9hleKVRqVSvNKZV6bj73t0ws9NP/nilUalUrxyl+uX27fj76f1wCheuZ9n99BPP/nildYDZTr+fk6jkiheuW/rgTEd31apFK80KpXilVZiZTr+vsP9u+VP8U7rgVK8cj9nt3+3/BmPbz1Qilf+A+XwkkbDOsOdAAAAAElFTkSuQmCC" id="imagee3acf2c03e" transform="scale(1 -1) translate(0 -669.6)" x="1882.8" y="-226.8" width="33.84" height="669.6"/> - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + @@ -8373,20 +11158,20 @@ iVBORw0KGgoAAAANSUhEUgAAACcAAAMGCAYAAABxu507AAAFEElEQVR4nO3dy3HjQBDA0Pl0aA7B+Ydi - - + - + - - + - - + + - - + + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv index fdb04a3..028930c 100644 --- a/docs/assets/preset-overlap.tsv +++ b/docs/assets/preset-overlap.tsv @@ -9,7 +9,9 @@ north_america north_europe 314 5.157687 7.096045 north_america mediterranean 313 4.608363 7.073446 north_america middle_east 98 1.894452 2.214689 north_america africa 92 1.750048 2.079096 +north_america north_africa 32 0.691294 0.723164 north_america subsaharan_africa 84 1.635196 1.898305 +north_america madagascar 13 0.287674 0.293785 north_america asia 403 4.476286 9.107345 north_america south_asia 80 1.356622 1.807910 north_america southeast_asia 61 1.010603 1.378531 @@ -18,6 +20,8 @@ north_america japan 64 1.265322 1.446328 north_america oceania 147 2.243932 3.322034 north_america australia 89 1.433172 2.011299 north_america tasmania 6 0.127850 0.135593 +north_america new_zealand 45 0.936524 1.016949 +north_america oceania_excluding_australia_nz 89 1.898464 2.011299 central_america north_america 1408 30.240550 85.906040 central_america central_america 1639 100.000000 100.000000 central_america caribbean 721 40.189521 43.990238 @@ -28,7 +32,9 @@ central_america north_europe 12 0.332963 0.732154 central_america mediterranean 41 0.958392 2.501525 central_america middle_east 29 1.180782 1.769372 central_america africa 47 1.868045 2.867602 +central_america north_africa 14 0.752284 0.854179 central_america subsaharan_africa 46 1.925492 2.806589 +central_america madagascar 8 0.460299 0.488103 central_america asia 52 0.791717 3.172666 central_america south_asia 32 1.012979 1.952410 central_america southeast_asia 26 0.791476 1.586333 @@ -37,6 +43,8 @@ central_america japan 15 0.646273 0.915192 central_america oceania 58 1.504930 3.538743 central_america australia 34 0.977292 2.074436 central_america tasmania 1 0.052301 0.061013 +central_america new_zealand 11 0.535801 0.671141 +central_america oceania_excluding_australia_nz 42 2.154951 2.562538 caribbean north_america 648 13.926499 73.972603 caribbean central_america 721 40.189521 82.305936 caribbean caribbean 876 100.000000 100.000000 @@ -47,7 +55,9 @@ caribbean north_europe 2 0.070151 0.228311 caribbean mediterranean 18 0.508762 2.054795 caribbean middle_east 16 0.937866 1.826484 caribbean africa 34 1.925255 3.881279 +caribbean north_africa 7 0.633484 0.799087 caribbean subsaharan_africa 34 2.075702 3.881279 +caribbean madagascar 9 0.924025 1.027397 caribbean asia 38 0.653033 4.337900 caribbean south_asia 29 1.208837 3.310502 caribbean southeast_asia 26 1.030928 2.968037 @@ -56,6 +66,8 @@ caribbean japan 9 0.575448 1.027397 caribbean oceania 49 1.580645 5.593607 caribbean australia 26 0.954479 2.968037 caribbean tasmania 0 0.000000 0.000000 +caribbean new_zealand 5 0.385802 0.570776 +caribbean oceania_excluding_australia_nz 34 2.847571 3.881279 south_america north_america 839 16.476826 55.710491 south_america central_america 1031 48.770104 68.459495 south_america caribbean 781 48.782011 51.859230 @@ -66,7 +78,9 @@ south_america north_europe 20 0.577534 1.328021 south_america mediterranean 39 0.940439 2.589641 south_america middle_east 31 1.335631 2.058433 south_america africa 51 2.143758 3.386454 +south_america north_africa 13 0.751880 0.863214 south_america subsaharan_africa 50 2.220249 3.320053 +south_america madagascar 13 0.812500 0.863214 south_america asia 61 0.949269 4.050465 south_america south_asia 40 1.325381 2.656042 south_america southeast_asia 31 0.985065 2.058433 @@ -75,6 +89,8 @@ south_america japan 13 0.593607 0.863214 south_america oceania 63 1.695371 4.183267 south_america australia 38 1.137044 2.523240 south_america tasmania 2 0.112486 0.132802 +south_america new_zealand 12 0.625326 0.796813 +south_america oceania_excluding_australia_nz 38 2.087912 2.523240 arctic north_america 2406 37.877834 55.527348 arctic central_america 243 4.241578 5.608124 arctic caribbean 54 1.047527 1.246250 @@ -85,7 +101,9 @@ arctic north_europe 1837 41.068634 42.395569 arctic mediterranean 1781 34.040520 41.103162 arctic middle_east 548 11.833297 12.647127 arctic africa 135 2.635689 3.115624 +arctic north_africa 93 2.077748 2.146319 arctic subsaharan_africa 85 1.685170 1.961689 +arctic madagascar 8 0.180505 0.184630 arctic asia 2029 27.851750 46.826679 arctic south_asia 120 2.081526 2.769444 arctic southeast_asia 36 0.603116 0.830833 @@ -94,6 +112,8 @@ arctic japan 229 4.769840 5.285022 arctic oceania 72 1.101928 1.661666 arctic australia 42 0.681265 0.969305 arctic tasmania 6 0.130406 0.138472 +arctic new_zealand 43 0.911983 0.992384 +arctic oceania_excluding_australia_nz 20 0.428725 0.461574 europe north_america 356 5.026119 11.811546 europe central_america 29 0.627163 0.962177 europe caribbean 9 0.231899 0.298607 @@ -104,7 +124,9 @@ europe north_europe 1977 65.593895 65.593895 europe mediterranean 2583 83.027965 85.700066 europe middle_east 714 22.695486 23.689449 europe africa 306 8.425110 10.152621 +europe north_africa 219 7.225338 7.266092 europe subsaharan_africa 181 4.987600 6.005309 +europe madagascar 16 0.515298 0.530856 europe asia 2091 35.416667 69.376244 europe south_asia 138 3.116531 4.578633 europe southeast_asia 31 0.665951 1.028534 @@ -113,6 +135,8 @@ europe japan 165 4.653130 5.474453 europe oceania 88 1.692633 2.919708 europe australia 65 1.347709 2.156603 europe tasmania 9 0.274474 0.298607 +europe new_zealand 57 1.685393 1.891175 +europe oceania_excluding_australia_nz 21 0.627803 0.696749 north_europe north_america 314 5.157687 15.882650 north_europe central_america 12 0.332963 0.606980 north_europe caribbean 2 0.070151 0.101163 @@ -123,7 +147,9 @@ north_europe north_europe 1977 100.000000 100.000000 north_europe mediterranean 1602 52.438625 81.031866 north_europe middle_east 406 16.797683 20.536166 north_europe africa 92 3.275187 4.653515 +north_europe north_africa 65 3.026071 3.287810 north_europe subsaharan_africa 51 1.873622 2.579666 +north_europe madagascar 2 0.096061 0.101163 north_europe asia 1598 29.813433 80.829540 north_europe south_asia 53 1.524741 2.680830 north_europe southeast_asia 8 0.219720 0.404654 @@ -132,6 +158,8 @@ north_europe japan 131 5.151396 6.626201 north_europe oceania 49 1.166389 2.478503 north_europe australia 31 0.811518 1.568032 north_europe tasmania 8 0.356665 0.404654 +north_europe new_zealand 40 1.693480 2.023268 +north_europe oceania_excluding_australia_nz 5 0.215146 0.252908 mediterranean north_america 313 4.608363 11.679104 mediterranean central_america 41 0.958392 1.529851 mediterranean caribbean 18 0.508762 0.671642 @@ -142,7 +170,9 @@ mediterranean north_europe 1602 52.438625 59.776119 mediterranean mediterranean 2680 100.000000 100.000000 mediterranean middle_east 776 28.218182 28.955224 mediterranean africa 355 10.926439 13.246269 +mediterranean north_africa 236 8.805970 8.805970 mediterranean subsaharan_africa 227 6.986765 8.470149 +mediterranean madagascar 23 0.832127 0.858209 mediterranean asia 1891 32.772964 70.559701 mediterranean south_asia 174 4.287827 6.492537 mediterranean southeast_asia 48 1.115242 1.791045 @@ -151,6 +181,8 @@ mediterranean japan 160 4.973578 5.970149 mediterranean oceania 96 1.976529 3.582090 mediterranean australia 73 1.629101 2.723881 mediterranean tasmania 9 0.305603 0.335821 +mediterranean new_zealand 51 1.669941 1.902985 +mediterranean oceania_excluding_australia_nz 28 0.932091 1.044776 middle_east north_america 98 1.894452 11.583924 middle_east central_america 29 1.180782 3.427896 middle_east caribbean 16 0.937866 1.891253 @@ -161,7 +193,9 @@ middle_east north_europe 406 16.797683 47.990544 middle_east mediterranean 776 28.218182 91.725768 middle_east middle_east 846 100.000000 100.000000 middle_east africa 240 15.686275 28.368794 +middle_east north_africa 154 16.594828 18.203310 middle_east subsaharan_africa 179 12.235133 21.158392 +middle_east madagascar 33 3.586957 3.900709 middle_east asia 835 16.726763 98.699764 middle_east south_asia 212 9.698079 25.059102 middle_east southeast_asia 72 2.943581 8.510638 @@ -170,6 +204,8 @@ middle_east japan 95 6.560773 11.229314 middle_east oceania 70 2.295835 8.274232 middle_east australia 60 2.255639 7.092199 middle_east tasmania 4 0.358423 0.472813 +middle_east new_zealand 25 2.006421 2.955083 +middle_east oceania_excluding_australia_nz 28 2.393162 3.309693 africa north_america 92 1.750048 9.956710 africa central_america 47 1.868045 5.086580 africa caribbean 34 1.925255 3.679654 @@ -180,7 +216,9 @@ africa north_europe 92 3.275187 9.956710 africa mediterranean 355 10.926439 38.419913 africa middle_east 240 15.686275 25.974026 africa africa 924 100.000000 100.000000 +africa north_africa 236 25.541126 25.541126 africa subsaharan_africa 796 86.147186 86.147186 +africa madagascar 107 11.580087 11.580087 africa asia 355 6.396396 38.419913 africa south_asia 190 8.311461 20.562771 africa southeast_asia 120 4.846527 12.987013 @@ -189,6 +227,31 @@ africa japan 64 4.110469 6.926407 africa oceania 132 4.306688 14.285714 africa australia 119 4.441956 12.878788 africa tasmania 6 0.503356 0.649351 +africa new_zealand 33 2.507599 3.571429 +africa oceania_excluding_australia_nz 59 4.847987 6.385281 +north_africa north_america 32 0.691294 13.559322 +north_africa central_america 14 0.752284 5.932203 +north_africa caribbean 7 0.633484 2.966102 +north_africa south_america 13 0.751880 5.508475 +north_africa arctic 93 2.077748 39.406780 +north_africa europe 219 7.225338 92.796610 +north_africa north_europe 65 3.026071 27.542373 +north_africa mediterranean 236 8.805970 100.000000 +north_africa middle_east 154 16.594828 65.254237 +north_africa africa 236 25.541126 100.000000 +north_africa north_africa 236 100.000000 100.000000 +north_africa subsaharan_africa 113 12.295974 47.881356 +north_africa madagascar 14 4.255319 5.932203 +north_africa asia 166 3.286478 70.338983 +north_africa south_asia 65 3.772490 27.542373 +north_africa southeast_asia 22 1.166490 9.322034 +north_africa east_asia 111 2.612994 47.033898 +north_africa japan 29 3.207965 12.288136 +north_africa oceania 29 1.169355 12.288136 +north_africa australia 24 1.150527 10.169492 +north_africa tasmania 2 0.393701 0.847458 +north_africa new_zealand 14 2.163833 5.932203 +north_africa oceania_excluding_australia_nz 15 2.617801 6.355932 subsaharan_africa north_america 84 1.635196 10.552764 subsaharan_africa central_america 46 1.925492 5.778894 subsaharan_africa caribbean 34 2.075702 4.271357 @@ -199,7 +262,9 @@ subsaharan_africa north_europe 51 1.873622 6.407035 subsaharan_africa mediterranean 227 6.986765 28.517588 subsaharan_africa middle_east 179 12.235133 22.487437 subsaharan_africa africa 796 86.147186 100.000000 +subsaharan_africa north_africa 113 12.295974 14.195980 subsaharan_africa subsaharan_africa 796 100.000000 100.000000 +subsaharan_africa madagascar 107 13.442211 13.442211 subsaharan_africa asia 284 5.170217 35.678392 subsaharan_africa south_asia 178 8.202765 22.361809 subsaharan_africa southeast_asia 118 5.021277 14.824121 @@ -208,6 +273,31 @@ subsaharan_africa japan 59 4.114365 7.412060 subsaharan_africa oceania 129 4.387755 16.206030 subsaharan_africa australia 118 4.623824 14.824121 subsaharan_africa tasmania 6 0.563910 0.753769 +subsaharan_africa new_zealand 32 2.691337 4.020101 +subsaharan_africa oceania_excluding_australia_nz 58 5.321101 7.286432 +madagascar north_america 13 0.287674 12.149533 +madagascar central_america 8 0.460299 7.476636 +madagascar caribbean 9 0.924025 8.411215 +madagascar south_america 13 0.812500 12.149533 +madagascar arctic 8 0.180505 7.476636 +madagascar europe 16 0.515298 14.953271 +madagascar north_europe 2 0.096061 1.869159 +madagascar mediterranean 23 0.832127 21.495327 +madagascar middle_east 33 3.586957 30.841121 +madagascar africa 107 11.580087 100.000000 +madagascar north_africa 14 4.255319 13.084112 +madagascar subsaharan_africa 107 13.442211 100.000000 +madagascar madagascar 107 100.000000 100.000000 +madagascar asia 54 1.072706 50.467290 +madagascar south_asia 44 2.724458 41.121495 +madagascar southeast_asia 35 2.006881 32.710280 +madagascar east_asia 40 0.954654 37.383178 +madagascar japan 16 2.030457 14.953271 +madagascar oceania 34 1.449275 31.775701 +madagascar australia 31 1.589744 28.971963 +madagascar tasmania 0 0.000000 0.000000 +madagascar new_zealand 5 0.948767 4.672897 +madagascar oceania_excluding_australia_nz 21 4.794521 19.626168 asia north_america 403 4.476286 8.090745 asia central_america 52 0.791717 1.043967 asia caribbean 38 0.653033 0.762899 @@ -218,7 +308,9 @@ asia north_europe 1598 29.813433 32.081911 asia mediterranean 1891 32.772964 37.964264 asia middle_east 835 16.726763 16.763702 asia africa 355 6.396396 7.127083 +asia north_africa 166 3.286478 3.332664 asia subsaharan_africa 284 5.170217 5.701666 +asia madagascar 54 1.072706 1.084120 asia asia 4981 100.000000 100.000000 asia south_asia 1552 31.158402 31.158402 asia southeast_asia 1658 33.193193 33.286489 @@ -227,6 +319,8 @@ asia japan 697 13.993174 13.993174 asia oceania 575 8.609073 11.543867 asia australia 490 7.698350 9.837382 asia tasmania 11 0.209764 0.220839 +asia new_zealand 58 1.084518 1.164425 +asia oceania_excluding_australia_nz 283 5.603960 5.681590 south_asia north_america 80 1.356622 5.154639 south_asia central_america 32 1.012979 2.061856 south_asia caribbean 29 1.208837 1.868557 @@ -237,7 +331,9 @@ south_asia north_europe 53 1.524741 3.414948 south_asia mediterranean 174 4.287827 11.211340 south_asia middle_east 212 9.698079 13.659794 south_asia africa 190 8.311461 12.242268 +south_asia north_africa 65 3.772490 4.188144 south_asia subsaharan_africa 178 8.202765 11.469072 +south_asia madagascar 44 2.724458 2.835052 south_asia asia 1552 31.158402 100.000000 south_asia south_asia 1552 100.000000 100.000000 south_asia southeast_asia 1143 54.925517 73.646907 @@ -246,6 +342,8 @@ south_asia japan 301 15.451745 19.394330 south_asia oceania 356 10.262323 22.938144 south_asia australia 316 10.160772 20.360825 south_asia tasmania 3 0.164564 0.193299 +south_asia new_zealand 25 1.280738 1.610825 +south_asia oceania_excluding_australia_nz 165 9.488212 10.631443 southeast_asia north_america 61 1.010603 3.648325 southeast_asia central_america 26 0.791476 1.555024 southeast_asia caribbean 26 1.030928 1.555024 @@ -256,7 +354,9 @@ southeast_asia north_europe 8 0.219720 0.478469 southeast_asia mediterranean 48 1.115242 2.870813 southeast_asia middle_east 72 2.943581 4.306220 southeast_asia africa 120 4.846527 7.177033 +southeast_asia north_africa 22 1.166490 1.315789 southeast_asia subsaharan_africa 118 5.021277 7.057416 +southeast_asia madagascar 35 2.006881 2.093301 southeast_asia asia 1658 33.193193 99.162679 southeast_asia south_asia 1143 54.925517 68.361244 southeast_asia southeast_asia 1672 100.000000 100.000000 @@ -265,6 +365,8 @@ southeast_asia japan 285 13.675624 17.045455 southeast_asia oceania 473 13.623272 28.289474 southeast_asia australia 409 13.037934 24.461722 southeast_asia tasmania 5 0.257599 0.299043 +southeast_asia new_zealand 22 1.060241 1.315789 +southeast_asia oceania_excluding_australia_nz 280 16.055046 16.746411 east_asia north_america 376 4.601077 9.119573 east_asia central_america 40 0.699056 0.970167 east_asia caribbean 23 0.462219 0.557846 @@ -275,7 +377,9 @@ east_asia north_europe 1551 34.095406 37.618239 east_asia mediterranean 1632 31.560627 39.582828 east_asia middle_east 592 13.525246 14.358477 east_asia africa 234 4.861833 5.675479 +east_asia north_africa 111 2.612994 2.692214 east_asia subsaharan_africa 181 3.820177 4.390007 +east_asia madagascar 40 0.954654 0.970167 east_asia asia 4123 82.774543 100.000000 east_asia south_asia 1229 27.642825 29.808392 east_asia southeast_asia 1186 25.732263 28.765462 @@ -284,6 +388,8 @@ east_asia japan 697 16.905166 16.905166 east_asia oceania 409 6.831468 9.919961 east_asia australia 352 6.235607 8.537473 east_asia tasmania 9 0.205105 0.218288 +east_asia new_zealand 55 1.224126 1.333980 +east_asia oceania_excluding_australia_nz 172 3.997211 4.171720 japan north_america 64 1.265322 9.182209 japan central_america 15 0.646273 2.152080 japan caribbean 9 0.575448 1.291248 @@ -294,7 +400,9 @@ japan north_europe 131 5.151396 18.794835 japan mediterranean 160 4.973578 22.955524 japan middle_east 95 6.560773 13.629842 japan africa 64 4.110469 9.182209 +japan north_africa 29 3.207965 4.160689 japan subsaharan_africa 59 4.114365 8.464849 +japan madagascar 16 2.030457 2.295552 japan asia 697 13.993174 100.000000 japan south_asia 301 15.451745 43.185079 japan southeast_asia 285 13.675624 40.889527 @@ -303,6 +411,8 @@ japan japan 697 100.000000 100.000000 japan oceania 130 4.577465 18.651363 japan australia 108 4.384896 15.494978 japan tasmania 3 0.309917 0.430416 +japan new_zealand 19 1.722575 2.725968 +japan oceania_excluding_australia_nz 71 7.259714 10.186514 oceania north_america 147 2.243932 6.467224 oceania central_america 58 1.504930 2.551694 oceania caribbean 49 1.580645 2.155741 @@ -313,7 +423,9 @@ oceania north_europe 49 1.166389 2.155741 oceania mediterranean 96 1.976529 4.223493 oceania middle_east 70 2.295835 3.079630 oceania africa 132 4.306688 5.807303 +oceania north_africa 29 1.169355 1.275847 oceania subsaharan_africa 129 4.387755 5.675319 +oceania madagascar 34 1.449275 1.495821 oceania asia 575 8.609073 25.296964 oceania south_asia 356 10.262323 15.662121 oceania southeast_asia 473 13.623272 20.809503 @@ -322,6 +434,8 @@ oceania japan 130 4.577465 5.719314 oceania oceania 2273 100.000000 100.000000 oceania australia 1874 82.446106 82.446106 oceania tasmania 274 12.054553 12.054553 +oceania new_zealand 425 18.697756 18.697756 +oceania oceania_excluding_australia_nz 352 15.486142 15.486142 australia north_america 89 1.433172 4.749200 australia central_america 34 0.977292 1.814301 australia caribbean 26 0.954479 1.387407 @@ -332,7 +446,9 @@ australia north_europe 31 0.811518 1.654216 australia mediterranean 73 1.629101 3.895411 australia middle_east 60 2.255639 3.201708 australia africa 119 4.441956 6.350053 +australia north_africa 24 1.150527 1.280683 australia subsaharan_africa 118 4.623824 6.296692 +australia madagascar 31 1.589744 1.654216 australia asia 490 7.698350 26.147279 australia south_asia 316 10.160772 16.862327 australia southeast_asia 409 13.037934 21.824973 @@ -341,6 +457,8 @@ australia japan 108 4.384896 5.763074 australia oceania 1874 82.446106 100.000000 australia australia 1874 100.000000 100.000000 australia tasmania 274 14.621131 14.621131 +australia new_zealand 130 5.993545 6.937033 +australia oceania_excluding_australia_nz 251 12.708861 13.393810 tasmania north_america 6 0.127850 2.189781 tasmania central_america 1 0.052301 0.364964 tasmania caribbean 0 0.000000 0.000000 @@ -351,7 +469,9 @@ tasmania north_europe 8 0.356665 2.919708 tasmania mediterranean 9 0.305603 3.284672 tasmania middle_east 4 0.358423 1.459854 tasmania africa 6 0.503356 2.189781 +tasmania north_africa 2 0.393701 0.729927 tasmania subsaharan_africa 6 0.563910 2.189781 +tasmania madagascar 0 0.000000 0.000000 tasmania asia 11 0.209764 4.014599 tasmania south_asia 3 0.164564 1.094891 tasmania southeast_asia 5 0.257599 1.824818 @@ -360,3 +480,51 @@ tasmania japan 3 0.309917 1.094891 tasmania oceania 274 12.054553 100.000000 tasmania australia 274 14.621131 100.000000 tasmania tasmania 274 100.000000 100.000000 +tasmania new_zealand 46 7.044410 16.788321 +tasmania oceania_excluding_australia_nz 8 1.294498 2.919708 +new_zealand north_america 45 0.936524 10.588235 +new_zealand central_america 11 0.535801 2.588235 +new_zealand caribbean 5 0.385802 1.176471 +new_zealand south_america 12 0.625326 2.823529 +new_zealand arctic 43 0.911983 10.117647 +new_zealand europe 57 1.685393 13.411765 +new_zealand north_europe 40 1.693480 9.411765 +new_zealand mediterranean 51 1.669941 12.000000 +new_zealand middle_east 25 2.006421 5.882353 +new_zealand africa 33 2.507599 7.764706 +new_zealand north_africa 14 2.163833 3.294118 +new_zealand subsaharan_africa 32 2.691337 7.529412 +new_zealand madagascar 5 0.948767 1.176471 +new_zealand asia 58 1.084518 13.647059 +new_zealand south_asia 25 1.280738 5.882353 +new_zealand southeast_asia 22 1.060241 5.176471 +new_zealand east_asia 55 1.224126 12.941176 +new_zealand japan 19 1.722575 4.470588 +new_zealand oceania 425 18.697756 100.000000 +new_zealand australia 130 5.993545 30.588235 +new_zealand tasmania 46 7.044410 10.823529 +new_zealand new_zealand 425 100.000000 100.000000 +new_zealand oceania_excluding_australia_nz 30 4.016064 7.058824 +oceania_excluding_australia_nz north_america 89 1.898464 25.284091 +oceania_excluding_australia_nz central_america 42 2.154951 11.931818 +oceania_excluding_australia_nz caribbean 34 2.847571 9.659091 +oceania_excluding_australia_nz south_america 38 2.087912 10.795455 +oceania_excluding_australia_nz arctic 20 0.428725 5.681818 +oceania_excluding_australia_nz europe 21 0.627803 5.965909 +oceania_excluding_australia_nz north_europe 5 0.215146 1.420455 +oceania_excluding_australia_nz mediterranean 28 0.932091 7.954545 +oceania_excluding_australia_nz middle_east 28 2.393162 7.954545 +oceania_excluding_australia_nz africa 59 4.847987 16.761364 +oceania_excluding_australia_nz north_africa 15 2.617801 4.261364 +oceania_excluding_australia_nz subsaharan_africa 58 5.321101 16.477273 +oceania_excluding_australia_nz madagascar 21 4.794521 5.965909 +oceania_excluding_australia_nz asia 283 5.603960 80.397727 +oceania_excluding_australia_nz south_asia 165 9.488212 46.875000 +oceania_excluding_australia_nz southeast_asia 280 16.055046 79.545455 +oceania_excluding_australia_nz east_asia 172 3.997211 48.863636 +oceania_excluding_australia_nz japan 71 7.259714 20.170455 +oceania_excluding_australia_nz oceania 352 15.486142 100.000000 +oceania_excluding_australia_nz australia 251 12.708861 71.306818 +oceania_excluding_australia_nz tasmania 8 1.294498 2.272727 +oceania_excluding_australia_nz new_zealand 30 4.016064 8.522727 +oceania_excluding_australia_nz oceania_excluding_australia_nz 352 100.000000 100.000000 diff --git a/docs/model-presets.md b/docs/model-presets.md index 30005a9..93d2088 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -29,10 +29,14 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `asia` | 4,981 | 3 | 25 | 1,031,247 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan in full. Includes their European-labelled records and records with blank continent. Cyprus is excluded even when its continent is ASIA. | | `japan` | 697 | 3 | 25 | 30,076 | All records assigned countryCode JP, including islands. | | `africa` | 924 | 3 | 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | +| `north_africa` | 236 | 3 | 25 | 4,393 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. | | `subsaharan_africa` | 796 | 3 | 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | +| `madagascar` | 107 | 3 | 25 | 2,584 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. | | `mediterranean` | 2,680 | 3 | 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | | `arctic` | 4,333 | 3 | 25 | 871,155 | Canada, Alaska (US records only when stateProvince is Alaska), Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. Other countries remain whole-country proxies including southern records; this is not an Arctic Circle or tundra filter. US records with blank state are excluded. | | `oceania` | 2,273 | 3 | 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | +| `new_zealand` | 425 | 3 | 25 | 110,030 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. | +| `oceania_excluding_australia_nz` | 352 | 3 | 25 | 8,721 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. | | `southeast_asia` | 1,672 | 3 | 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | | `east_asia` | 4,123 | 3 | 25 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | | `middle_east` | 846 | 3 | 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | @@ -59,10 +63,14 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho - **asia** (Asia): (`continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`) AND country NOT in `CY`. - **japan** (Japan): `countryCode` in `JP`. - **africa** (Africa): `continent` in `AFRICA` OR `countryCode` in `DZ, AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, EG, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, LY, MG, MW, ML, MR, MU, YT, MA, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, TN, UG, EH, ZM, ZW`. +- **north_africa** (Northern Africa (broad)): `countryCode` in `DZ, EG, LY, MA, TN, EH, SD, MR`. - **subsaharan_africa** (Sub-Saharan Africa (broad)): (`continent` in `AFRICA` OR `countryCode` in `AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, MG, MW, ML, MR, MU, YT, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, UG, ZM, ZW`) AND country NOT in `DZ, EG, LY, MA, TN, EH`. +- **madagascar** (Madagascar only): `countryCode` in `MG`. - **mediterranean** (Mediterranean (broad)): `countryCode` in `AL, DZ, BA, HR, CY, EG, FR, GR, IL, IT, LB, LY, MT, MC, ME, MA, PS, SI, ES, SY, TN, TR, PT, GI, AD, SM, VA, MK, BG, RS, JO`. - **arctic** (Arctic / broad northern-country scope): `countryCode` in `CA, US, GL, IS, FO, NO, SJ, SE, FI, AX, RU`; `US` records additionally require `stateProvince` in `Alaska`. - **oceania** (Oceania): `continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`. +- **new_zealand** (New Zealand): `countryCode` in `NZ`. +- **oceania_excluding_australia_nz** (Oceania excluding Australia and New Zealand): (`continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`) AND country NOT in `AU, NZ`. - **southeast_asia** (Southeast Asia): `countryCode` in `BN, KH, ID, LA, MY, MM, PH, SG, TH, TL, VN, PG`. - **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`. - **middle_east** (Middle East): `countryCode` in `TR, CY, SY, LB, IL, PS, JO, IQ, IR, KW, SA, BH, QA, AE, OM, YE, EG, AM, AZ, GE, AF, PK`. diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index a06367b..172e7ca 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -88,3 +88,24 @@ def test_overlap_distinguishes_containment_from_similarity(): assert overlap({"a"}, {"a", "b", "c", "d"}) == (1, 0.25, 1.0) assert overlap({"a", "b", "c", "d"}, {"a"}) == (1, 0.25, 0.25) assert overlap({"a"}, {"b"}) == (0, 0.0, 0.0) + + +def test_other_oceania_excludes_records_not_shared_species(): + table = pa.table( + { + "countryCode": ["AU", "NZ", "FJ", "PG", "CK", "MG"], + "continent": ["OCEANIA", "OCEANIA", "OCEANIA", "", "OCEANIA", "AFRICA"], + "speciesKey": ["shared"] * 6, + } + ) + selected = select_region(table, RULES["oceania_excluding_australia_nz"]) + assert selected["countryCode"].to_pylist() == ["FJ", "PG", "CK"] + assert selected["speciesKey"].to_pylist() == ["shared"] * 3 + assert select_region(table, RULES["new_zealand"])["countryCode"].to_pylist() == ["NZ"] + assert select_region(table, RULES["madagascar"])["countryCode"].to_pylist() == ["MG"] + + +def test_northern_africa_intentionally_overlaps_subsaharan_transition(): + countries = ["MA", "EG", "SD", "MR", "ZA", "MG"] + assert countries_selected("north_africa", countries) == ["MA", "EG", "SD", "MR"] + assert countries_selected("subsaharan_africa", countries) == ["SD", "MR", "ZA", "MG"] From fbaa6d68182efe66939c6b77a2d0351394c42d2b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:47:14 +0200 Subject: [PATCH 019/221] release: restrict Russian contributions to Asian presets by continent --- dev/releases/mambo_v3/build_presets.py | 7 + dev/releases/mambo_v3/preset-definitions.toml | 6 +- dev/releases/mambo_v3/preset-manifest.toml | 18 +- dev/releases/mambo_v3/presets/asia.classes | 538 -------------- .../mambo_v3/presets/east_asia.classes | 693 ------------------ docs/assets/preset-overlap.svg | 581 ++++++++------- docs/assets/preset-overlap.tsv | 176 ++--- docs/model-presets.md | 8 +- tests/releases/test_mambo_presets.py | 12 + 9 files changed, 412 insertions(+), 1627 deletions(-) diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index e705724..b11f3a8 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -24,6 +24,7 @@ def select_region(table, rule): "excluded_countries", "state_province", "country_state_restrictions", + "country_continent_restrictions", "minimum_regional_rows", "minimum_global_rows", } @@ -44,6 +45,10 @@ def select_region(table, rule): is_country = pc.fill_null(pc.equal(table["countryCode"], country), False) in_state = pc.fill_null(pc.is_in(table["stateProvince"], value_set=pa.array(states)), False) mask = pc.and_(mask, pc.or_(pc.invert(is_country), in_state)) + for country, continents in rule.get("country_continent_restrictions", {}).items(): + is_country = pc.fill_null(pc.equal(table["countryCode"], country), False) + in_continent = pc.fill_null(pc.is_in(table["continent"], value_set=pa.array(continents)), False) + mask = pc.and_(mask, pc.or_(pc.invert(is_country), in_continent)) return table.filter(mask) @@ -72,6 +77,8 @@ def recipe(rule): result = f"({result}) AND `stateProvince` in `{', '.join(rule['state_province'])}`" for country, states in rule.get("country_state_restrictions", {}).items(): result += f"; `{country}` records additionally require `stateProvince` in `{', '.join(states)}`" + for country, continents in rule.get("country_continent_restrictions", {}).items(): + result += f"; `{country}` records additionally require `continent` in `{', '.join(continents)}`" return result diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index 8cea17b..c7cf098 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -61,7 +61,8 @@ label = "Asia" continents = ["ASIA"] countries = ["AF", "AM", "AZ", "BH", "BD", "BT", "BN", "KH", "CN", "GE", "HK", "IN", "ID", "IR", "IQ", "IL", "JP", "JO", "KZ", "KP", "KR", "KW", "KG", "LA", "LB", "MO", "MY", "MV", "MN", "MM", "NP", "OM", "PK", "PS", "PH", "QA", "RU", "SA", "SG", "LK", "SY", "TW", "TJ", "TH", "TL", "TR", "TM", "AE", "UZ", "VN", "YE"] excluded_countries = ["CY"] -scope = "All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan in full. Includes their European-labelled records and records with blank continent. Cyprus is excluded even when its continent is ASIA." +country_continent_restrictions = { RU = ["ASIA"] } +scope = "All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA." [presets.japan] label = "Japan" @@ -128,7 +129,8 @@ scope = "Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Sing [presets.east_asia] label = "East Asia" countries = ["CN", "HK", "MO", "TW", "JP", "KP", "KR", "MN", "RU"] -scope = "China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters." +country_continent_restrictions = { RU = ["ASIA"] } +scope = "China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded." [presets.middle_east] label = "Middle East" diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index 721a8da..459b742 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -2,7 +2,7 @@ schema_version = 2 qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "36ef5aeba81f01e42468cdfa830ea95658bce6818d72f267cf6354a694a527ed" +definitions_sha256 = "148006ef5a5daca30bf6b770ba8aa63bcf7f146f3e4aac278400b7f24260fcfd" minimum_regional_rows = 3 minimum_global_rows = 25 @@ -98,13 +98,13 @@ sha256 = "5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849" [presets.asia] path = "presets/asia.classes" -count = 4981 +count = 4443 minimum_regional_rows = 3 minimum_global_rows = 25 excluded_by_global_gate_after_regional = 0 -selected_rows = 1031247 -species_before_threshold = 5329 -sha256 = "cf8c84f68de3576731841c341c3a249163536fe9706420e9748834fbcd4d79d3" +selected_rows = 920962 +species_before_threshold = 4937 +sha256 = "c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf" [presets.japan] path = "presets/japan.classes" @@ -218,13 +218,13 @@ sha256 = "ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd" [presets.east_asia] path = "presets/east_asia.classes" -count = 4123 +count = 3430 minimum_regional_rows = 3 minimum_global_rows = 25 excluded_by_global_gate_after_regional = 0 -selected_rows = 659767 -species_before_threshold = 4447 -sha256 = "f32e57e3e186d994712542c8d2221346cc15c1db4090c6c3f62e90e5ee7abb78" +selected_rows = 549482 +species_before_threshold = 3912 +sha256 = "4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085" [presets.middle_east] path = "presets/middle_east.classes" diff --git a/dev/releases/mambo_v3/presets/asia.classes b/dev/releases/mambo_v3/presets/asia.classes index 04051ee..476e002 100644 --- a/dev/releases/mambo_v3/presets/asia.classes +++ b/dev/releases/mambo_v3/presets/asia.classes @@ -6,15 +6,7 @@ 1992277 1992283 1992315 -1860621 -1860628 -1860659 -1860664 1860668 -1860688 -1860711 -4522933 -5123582 1732063 1732114 1732115 @@ -64,101 +56,50 @@ 11505614 8825467 1845270 -1845368 1845547 1845548 -1845565 1845607 4529566 4528100 1846604 -1846657 10785815 11730078 -1847061 1847062 1847097 1847157 1847260 1847392 4528547 -1847572 1847641 -9262981 -1847956 9546514 1848219 9868978 1848273 1848356 1848378 -1848426 4528539 -1848596 -1848610 -1848636 -1848657 -1848669 -1848690 -1848713 -1848714 1848864 -1848868 -1849104 5122013 -1849267 1849284 -1849294 9007213 -1849477 -11052757 -11080751 -1849552 -1849630 1849656 -1850076 -1850246 -11576787 -1850302 -1850335 -1850386 -1850394 -1850506 4527903 -1850522 -1850533 -1850538 1850570 1850633 -4528529 1850781 -1851010 -1851011 -1851203 -1851220 1851337 -1851347 1851543 1851555 -5122206 -4527972 1852165 1852177 6133343 -1852430 11287091 1829533 1829659 1829776 -1829785 -1829799 -1829823 -1829974 -4525354 1828637 6097236 8871600 -5879654 7448174 4525610 10835385 @@ -170,30 +111,19 @@ 5734146 1845866 1845962 -1845965 1834980 8503184 1839094 1841261 -1830843 -1830122 -1830125 -1830131 -1830147 1830152 1830191 -1830207 1830241 -4525476 1831458 1831631 1831643 9379855 8834672 1839625 -1841296 -4528593 -1853723 5880147 9734171 10679326 @@ -381,7 +311,6 @@ 5113082 5113084 5113148 -5113234 5113330 5113352 1792541 @@ -410,7 +339,6 @@ 1797333 1797344 1797349 -1797367 1797374 1797429 1797454 @@ -453,7 +381,6 @@ 4301310 4532351 4532352 -4532357 6115426 6115437 6133046 @@ -541,7 +468,6 @@ 5117189 7656811 1814538 -1814630 1814653 1814913 1814928 @@ -593,7 +519,6 @@ 5118348 6122092 7657803 -8361973 5118422 10546538 1820275 @@ -633,7 +558,6 @@ 10503495 8897869 7596232 -5771982 12176367 7346231 12183285 @@ -770,7 +694,6 @@ 1804532 1768461 1760246 -5113030 5113036 5109796 1821455 @@ -780,7 +703,6 @@ 1821505 1821547 1821651 -1821856 1821863 1821920 1821934 @@ -846,7 +768,6 @@ 10098436 11717028 1771772 -1771779 1782310 10094256 6197138 @@ -866,63 +787,37 @@ 1860983 1860987 1860994 -1861031 -4522916 -4522922 -4522886 4522890 4522891 -4522896 1860765 1860768 -1860852 -7767114 -7961640 1992504 1852956 -1852978 1835432 1835433 1835457 9724183 -1837343 1837420 -1837515 4529064 -8015612 1839293 1839296 -1840297 1840301 -1840345 1840346 -1840360 -1840371 -1840380 -1840408 -1840485 -1840555 1840566 1840581 1840596 -5119808 1831752 -4529630 5125075 -5125104 10371735 1869359 1869363 9883856 -1751457 -4535884 1939510 1939520 5141344 1860259 1860261 1860274 -1860408 4525177 5123339 5123394 @@ -936,11 +831,9 @@ 5123474 5123485 5123489 -1751216 1869595 1869706 1869803 -1869852 1869976 1870202 1870237 @@ -948,9 +841,7 @@ 1870250 1870450 1870650 -1870988 5125306 -1871160 1871212 1871407 4531402 @@ -961,7 +852,6 @@ 1871683 1871698 1871783 -1871826 1871988 1872094 1872169 @@ -972,13 +862,10 @@ 1872850 1872873 1872901 -1873048 1873051 1873079 1873215 -1873411 1873417 -4530947 1873776 1873780 1873783 @@ -992,44 +879,29 @@ 5125633 5125635 5125689 -1874192 -1874204 1874269 1874274 4531147 -1874375 1874743 1874937 -1875008 1875120 8219149 1875327 1875376 -1875429 -4531242 -1875633 -1875682 -4531284 1875827 1875830 1875865 1875869 1875918 1875958 -1876063 1876168 1876329 -1876357 1876409 -1876512 1876542 1876592 -1876623 1876854 1876922 1877038 -1877310 -1877341 1877345 1877368 9111961 @@ -1046,9 +918,6 @@ 1888454 5884888 6133441 -11728049 -1872315 -1748805 4525884 5141493 1940510 @@ -1057,32 +926,19 @@ 1940644 1940717 1940744 -1940768 4525777 4525803 1940807 -1940838 -1941377 -1941437 12211069 1939879 1736358 1736377 -1736412 -1736484 1736499 1736560 1736601 1736623 -5102628 -5102642 1736727 -1736800 -1736898 -1736904 1736905 -1736945 -4530406 1736993 1737015 4529931 @@ -1096,127 +952,66 @@ 1737526 1737533 1737542 -1737552 1737650 1737753 -1737775 1737776 1737847 -1737893 -1737924 -4530002 8186212 -1738050 1738192 1738222 -1738245 -1738317 -1738322 -1738337 1738373 1738422 -1738429 -1738514 -8869900 5102931 5102951 -1738687 1738700 -1738839 -1738883 -1739042 -1739043 8086347 1739151 -1739272 1739337 -1739377 -1739381 5102982 -1739461 1739471 1739605 -1739748 -1739797 1739833 1739919 1739922 1739980 1739999 -1740053 -1740069 -1740120 1740183 1740185 -1740374 1740392 7797515 -8215326 1740469 1740482 1740524 -1740567 -1740570 1740623 8094357 1740797 1740828 1741056 -1741253 1741341 1741368 4530151 -8345820 5103061 -5103066 -5771357 -1741545 -1741551 -10838422 -1741593 -1741615 1741633 -1741634 -1741667 1741752 -1741756 -1741765 -10807169 -11093909 -1742142 1742185 1742263 1742346 -1742402 -5103451 -5103502 5103613 5103736 5103948 5771350 -7975250 -1743196 8313553 5103998 -7661023 11846897 -1743453 1743475 7877231 1743532 -1743588 1743604 5104056 -6097235 -1743641 -1743710 -4530214 -1743730 1743768 1743775 1743782 4529908 -4529915 1743828 1743856 1743862 @@ -1226,47 +1021,26 @@ 1744071 1744136 1744180 -1744224 4530632 -1744416 -1744498 1744526 -1744542 1744588 1744593 1744699 1744728 1744731 1744739 -1744763 -1744808 1744896 -7964262 1745013 -1745079 10844862 1745561 1745579 1745600 1745630 1745634 -1745636 -1745643 -1745676 -1745678 -1745705 -1745724 -1745737 -1745756 1745771 1745781 -1745787 1745816 -1745830 -8162538 -8369868 1745895 -1745925 1745947 1745952 1745957 @@ -1283,47 +1057,27 @@ 1746832 1746856 1746876 -1746910 -1747050 1747141 5104442 1747738 -5104558 5104597 6097234 -7588222 -9242559 -1748456 1748605 8691947 -10580256 5103121 5103176 -5103181 -5103185 5103227 -5771227 5771229 -5771230 5771232 5771236 5771239 -5771243 5771249 -5771256 5771258 -5771259 -1831780 -4525500 -4525503 4525510 4525530 4525540 -4525547 -4525562 1920851 1920864 -1920892 10159697 10707501 9916153 @@ -1408,7 +1162,6 @@ 1924458 1924558 1924713 -1925221 1925233 4535172 1925381 @@ -1628,7 +1381,6 @@ 5105588 10955682 10932946 -4522322 7345843 6133481 10017342 @@ -1721,7 +1473,6 @@ 5137903 5137908 5137912 -5804895 5137920 5137926 5137932 @@ -1757,40 +1508,14 @@ 1920218 5137763 7207679 -1748942 -1749050 1749070 -1749449 -1749713 -1749744 -1749869 -1749921 -1749948 -1750097 -1750143 1750166 -1750288 -5104772 -5104797 -5104829 -5104882 5104891 -5104940 -5105088 -5105158 -5976947 -1751051 5104759 1758003 -1735532 -4527339 -4527342 1758440 1758441 1758461 -1731826 -1731837 -1731860 1855241 1868837 1868952 @@ -1814,7 +1539,6 @@ 5143384 5143437 5143453 -5143477 5143506 5143511 5143525 @@ -1842,7 +1566,6 @@ 1956496 1956524 1956536 -1956599 1956629 1956710 6133593 @@ -1860,17 +1583,12 @@ 1957579 1957583 1957611 -1957632 -1957706 1957718 1957746 1957791 1957816 1957852 1957854 -4524421 -4524424 -4524426 5143947 1958024 1958045 @@ -1895,7 +1613,6 @@ 1958463 1958483 5144027 -1959383 1959395 1959461 1959494 @@ -1931,7 +1648,6 @@ 1961040 5734344 1961052 -1961068 1961126 1961162 7346236 @@ -1956,7 +1672,6 @@ 1963306 5144345 1963446 -1963463 1963629 1963709 1963710 @@ -1969,7 +1684,6 @@ 6133500 1964113 1964116 -1964191 1964195 1964247 1964316 @@ -1979,13 +1693,11 @@ 6133502 1964637 1964653 -1964657 8361848 1964738 5144426 1965166 1965197 -1965208 1965763 1965777 1965795 @@ -1993,7 +1705,6 @@ 1965825 1965841 1965913 -1965996 1966017 5144431 5144438 @@ -2024,7 +1735,6 @@ 1967672 1967688 7346240 -1967803 1967815 1967873 1968147 @@ -2040,18 +1750,15 @@ 1968951 11598540 1968990 -1969291 1969357 1969463 1969491 1969581 6133643 1969621 -1969954 1970034 1970136 1970213 -1970243 1970284 1970322 1970436 @@ -2086,7 +1793,6 @@ 5145735 8014296 9194811 -9627567 1971847 1971858 1971888 @@ -2096,18 +1802,12 @@ 1972187 1972234 1972250 -1972342 -1972374 -1972377 5145870 5145965 5146038 5146062 7541913 -7960566 -1972434 1972443 -1972449 1972613 1972614 1972616 @@ -2142,7 +1842,6 @@ 5146763 5146833 5146837 -5146862 5146883 5146894 5146946 @@ -2154,7 +1853,6 @@ 5147062 5147150 5147171 -5147193 5147208 5147214 5147232 @@ -2215,7 +1913,6 @@ 1977003 1977007 1977068 -4523725 5147819 5147827 5147834 @@ -2261,7 +1958,6 @@ 6133560 5148252 10738407 -1978776 1978789 1978821 5734396 @@ -2274,7 +1970,6 @@ 1979222 1979229 1979308 -1979430 1979473 1979521 1979561 @@ -2287,8 +1982,6 @@ 1979822 1980269 5148436 -5148462 -5148486 5148487 1980521 1980532 @@ -2317,41 +2010,21 @@ 1982291 1982406 1982500 -1982525 1982529 1982541 -1982542 1982636 -1982671 -1982746 -1982770 -1982791 1982865 1982885 -1983034 1983052 -1983111 -1983260 -1983288 1983393 -1983441 1983442 1983525 1983528 -1983548 -1983558 1983648 -1983705 1983755 -1983896 1983922 -1983997 1983999 1984033 -7752082 -8015895 -8026858 -8262357 11121180 5149012 1984734 @@ -2370,7 +2043,6 @@ 1985192 1985228 1985230 -1985522 1985573 1985707 6133659 @@ -2388,7 +2060,6 @@ 1986171 1986191 1986220 -1986367 1986452 1986508 1986522 @@ -2410,7 +2081,6 @@ 9137631 1987629 1987665 -1987737 1987740 1987744 1987766 @@ -2436,7 +2106,6 @@ 8388883 5149414 5149438 -1988881 5734528 6133644 1989355 @@ -2477,7 +2146,6 @@ 5149986 6133619 5734398 -5880512 5880533 5880539 5880545 @@ -2485,12 +2153,8 @@ 5880552 5880559 5880563 -7657419 8237343 8632989 -5769062 -5769068 -5769072 7429212 9442902 9414984 @@ -2517,7 +2181,6 @@ 4523519 4524070 4524072 -4524951 4524955 4524962 10530208 @@ -2574,15 +2237,11 @@ 5146412 5734482 5149499 -4523880 -4523883 -4523885 5149659 5149665 5149704 5149746 5149768 -5149780 5149787 5734422 7443518 @@ -2731,8 +2390,6 @@ 1949850 1949877 1949929 -1950006 -5142394 5142499 5142599 8109173 @@ -2759,14 +2416,10 @@ 5142006 5142032 5142042 -1869467 -1869478 -1869489 1869512 1952878 1952883 1952909 -9400895 10744228 1800191 5109821 @@ -2778,17 +2431,12 @@ 1759069 1759079 1759083 -1759097 4533952 7972792 1759153 -1759159 1759177 -1759407 1759620 -1759661 1759667 -1759668 1759686 5108636 10329023 @@ -2800,23 +2448,19 @@ 4534225 1760857 1760891 -1760893 4533255 1760939 1760943 1761041 -1761392 1761438 1761735 1761778 -1761865 1762244 6132749 1762608 1762657 6132957 1762680 -5109498 5109506 5109523 5109554 @@ -2831,7 +2475,6 @@ 1763741 1764174 1764553 -1764716 1764791 1765010 1765011 @@ -2840,7 +2483,6 @@ 1765044 4534245 4534252 -4534257 5109830 5109843 5109848 @@ -2855,7 +2497,6 @@ 1765658 1765767 1765954 -1766128 1766130 1766131 1766137 @@ -2864,7 +2505,6 @@ 7895336 1766646 1766741 -1766773 1766910 11034779 1767134 @@ -2872,7 +2512,6 @@ 1767393 1767511 1767597 -1767608 1767625 10575632 1767655 @@ -2888,7 +2527,6 @@ 5772196 5772199 5772202 -5772205 5772206 5772210 5802396 @@ -2905,34 +2543,28 @@ 1768568 1768698 1768702 -1768749 1768771 1768815 1768819 5110256 5110258 -8150836 1769057 1769095 1769194 1769209 1769505 1769519 -1769543 1769566 1769958 1769978 1770150 1770172 -1770307 1770353 1770477 1770530 -1770573 4532696 8393221 1771385 -1771391 7725644 1771509 1771531 @@ -2943,10 +2575,8 @@ 1772169 1772179 5772129 -1772956 1772977 1773163 -1773484 8222049 1774272 1774347 @@ -2954,11 +2584,9 @@ 1774797 4301304 6115946 -1775112 4534046 4534052 4534057 -5110593 5772269 4534719 1775962 @@ -2966,7 +2594,6 @@ 1776067 1776330 1776371 -5772446 1776619 1776862 6132861 @@ -2978,15 +2605,12 @@ 1778074 4534299 1778109 -1778127 1778143 -1778596 5111481 5111501 5111535 5111574 5772222 -8253467 1779258 1779435 1779633 @@ -2998,12 +2622,10 @@ 1781234 5111974 5111980 -1781694 1781803 1781841 1782168 1782177 -1782319 1782341 1782354 1782457 @@ -3015,7 +2637,6 @@ 1782627 1782672 1782726 -1782727 1782757 1782763 1782777 @@ -3024,22 +2645,15 @@ 1782872 1782927 1782948 -1783016 -1783037 1783043 -1783045 6133026 -5112155 -5112160 5112283 5112291 -5112345 5714973 5715004 5734845 5772349 5772351 -8043500 1783855 1783861 1783971 @@ -3047,7 +2661,6 @@ 1784359 1784513 1784761 -1784826 1784853 4534290 1785145 @@ -3089,7 +2702,6 @@ 4687681 9268082 1787400 -1787417 1787504 1787506 1787590 @@ -3100,9 +2712,7 @@ 1787825 1787841 4534086 -1788425 1788522 -9216200 4534011 1788846 1788856 @@ -3110,29 +2720,20 @@ 1789071 1789076 1789086 -1789267 4533924 1789553 -1789580 4534166 -1789694 1789695 1789730 1789745 1789753 1789755 -1789783 -1789785 -1789849 1789957 -1789982 1790002 -1790062 1790072 1790084 1790153 4533115 -8047343 1790361 1790364 1790376 @@ -3147,7 +2748,6 @@ 1792300 1792335 1792377 -1792383 1792411 1792414 1792418 @@ -3166,30 +2766,22 @@ 1793689 1793877 1793986 -1794590 1795065 1795068 4532908 6133011 1795215 -1795282 7869346 7922810 1795597 1795854 1795900 -1795946 1795957 1796007 1796117 1796145 1796169 -1796188 -4534485 -4534486 -7438067 1796217 -7780930 4532700 4688166 4688169 @@ -3205,7 +2797,6 @@ 4533431 4533433 4533444 -4533446 6133001 6133002 6133006 @@ -3219,13 +2810,10 @@ 1798931 1798971 1798974 -1798984 -1799132 1799135 5113951 1799695 1799701 -1799799 1800004 1800032 1800149 @@ -3236,12 +2824,8 @@ 4534207 10638451 4532811 -4534663 4533273 -4534540 8890502 -9135821 -4534038 4533202 4534398 6544687 @@ -3249,9 +2833,6 @@ 4532269 4533123 4533125 -4533128 -4533136 -4533661 4534408 4534533 6132989 @@ -3288,7 +2869,6 @@ 1771698 1770772 1770821 -1770869 1770880 1771040 1771214 @@ -3314,12 +2894,10 @@ 5734817 6132880 9243764 -4534525 1773904 1759394 1789512 1789530 -4533347 4533360 10933525 5110282 @@ -3337,7 +2915,6 @@ 6115820 6115822 6115830 -8103163 1782249 1782273 1782279 @@ -3349,7 +2926,6 @@ 10458175 10683012 10702885 -1822346 1822487 1822490 1822493 @@ -3399,11 +2975,8 @@ 1825176 1825336 7346284 -5118892 5118904 7624468 -7937573 -8397564 1825539 5118974 5118978 @@ -3426,7 +2999,6 @@ 11059353 6133750 1827125 -5119143 1827349 1827408 1827414 @@ -3439,7 +3011,6 @@ 5119223 5119239 5119245 -1827645 1827649 1827650 1827687 @@ -3865,7 +3436,6 @@ 1918627 1918667 1918669 -1918733 1918736 1918776 1918843 @@ -4011,19 +3581,12 @@ 5143116 5143129 5143147 -1952806 1952816 1952857 9502606 5885428 8604089 -1832819 -1832853 -1832915 -1832936 -5880257 6097228 -1853064 1868211 1868409 4702564 @@ -4034,14 +3597,10 @@ 5141590 1735121 1941864 -5120465 -5120675 5121613 1842097 -5120396 1842485 4301036 -1842690 1842695 9755262 1843564 @@ -4070,7 +3629,6 @@ 1878879 1878895 1878904 -1878907 1878939 1879001 1879125 @@ -4082,7 +3640,6 @@ 1879379 5734212 1879408 -1879427 1879452 1879471 1879490 @@ -4097,10 +3654,7 @@ 1879970 1880062 1880064 -1880094 -1880104 1880138 -1880139 1880140 1880143 5126635 @@ -4132,19 +3686,13 @@ 1881515 4531713 1881834 -4531975 1881964 1882021 -1882158 1882210 1882253 1882266 1882272 1882310 -1882437 -1882459 -1882557 -1882729 5126834 1882753 1882767 @@ -4159,7 +3707,6 @@ 1882965 1883067 1883161 -1883168 1883386 1883394 5127097 @@ -4218,16 +3765,13 @@ 1886362 8223165 1886526 -1886579 1886587 -1886648 1886700 1886720 1886726 1886729 7562564 1886929 -1886951 1887054 1887290 1887509 @@ -4249,7 +3793,6 @@ 1888733 1888743 1888759 -1888826 1888891 1888893 1888906 @@ -4294,14 +3837,11 @@ 1890576 1890656 1890670 -1890679 1890699 -1890701 1890724 1890772 1890776 1890898 -1890957 1891059 1891129 1891167 @@ -4313,13 +3853,11 @@ 1891366 1891386 1891426 -1891453 1891473 1891493 1891494 4532022 4532024 -8411753 1891533 1891583 1891636 @@ -4334,10 +3872,6 @@ 11056379 9674732 1884255 -1884273 -1884280 -1884312 -1884332 1884370 1884403 5884851 @@ -4365,10 +3899,8 @@ 8532380 8537359 8823068 -8856895 8858121 9100030 -9101339 9137965 1886374 1889716 @@ -4386,10 +3918,7 @@ 5127698 5802339 1887108 -1887173 -1887177 4532050 -4532057 4532088 4532095 6121184 @@ -4400,60 +3929,38 @@ 4532160 5771880 10410699 -1846107 1846111 -1846112 1846133 -1846149 -1846159 -1846219 -1846236 -4528818 1939597 1830879 -1830937 -1830962 -1831002 1831009 1831136 -1831168 4708183 -1853587 1854202 -1854347 5122430 5122439 1854615 -1854792 1854824 1854849 4526050 -7717983 1858637 1858674 1858698 1858775 -1858778 -1858873 1858930 1859046 1859177 1859305 1859453 -1859471 -1859480 9749806 6133397 1859932 1860026 -1860063 -1860076 4536472 4536483 1973467 5123180 5123221 -5123042 1864897 1865593 10014340 @@ -4490,7 +3997,6 @@ 11729388 5124673 5124716 -7734292 5120278 1841813 1841946 @@ -4557,7 +4063,6 @@ 1862578 1862580 1862692 -1862701 1862719 1862765 1862774 @@ -4634,7 +4139,6 @@ 1993496 6133769 1993637 -1939432 1953192 1953196 1953217 @@ -4657,17 +4161,9 @@ 5143266 1954120 6132728 -1860108 1830099 -1830372 1830380 1830407 -1830408 -1830410 -1830457 -4525369 -1830802 -4525364 1754135 1754263 5105642 @@ -4695,10 +4191,8 @@ 5106160 5106249 5107076 -5107128 5107219 5107644 -5107829 7410701 7674502 7778368 @@ -4715,30 +4209,19 @@ 1757853 5108346 5108349 -8964772 4522753 9004359 -1939677 -1939680 1939688 -7646066 1829322 -1829363 1855630 1855747 8734090 -1856005 1856105 1856289 5122798 1856384 -1856595 1856620 -1856658 1856668 -1856691 -1856701 -1856730 1856768 1856867 1856971 @@ -4747,20 +4230,13 @@ 1857380 1857581 1857626 -9790007 1857828 1857829 -1857856 -1857878 1857924 1857938 1857978 -1858074 -1858100 -1858113 1858163 1858283 -1858321 8178453 1858557 1937665 @@ -4870,28 +4346,17 @@ 5141262 5141291 5141305 -1838691 -1838905 -1838911 -4528692 -4528694 8546322 8574752 1835031 5770913 1835098 -1835393 -1835396 1837172 -1838969 1839560 -1839770 -1839893 1841159 5770922 5770942 4529032 -5119893 12188993 1800238 10213314 @@ -4932,7 +4397,6 @@ 1801519 10066605 10510325 -1801896 4534773 4534776 4534778 @@ -4970,12 +4434,10 @@ 1803078 1803108 10942408 -4534762 4534767 4534769 6133803 5114303 5114311 -5114327 8244266 10987178 diff --git a/dev/releases/mambo_v3/presets/east_asia.classes b/dev/releases/mambo_v3/presets/east_asia.classes index e18ffc8..c935eed 100644 --- a/dev/releases/mambo_v3/presets/east_asia.classes +++ b/dev/releases/mambo_v3/presets/east_asia.classes @@ -1,17 +1,9 @@ 1837646 -1934693 1935849 1992277 1992283 1992315 -1860621 -1860628 -1860659 -1860664 1860668 -1860688 -1860711 -5123582 1732063 1732114 1732115 @@ -60,94 +52,39 @@ 8825467 1845270 1845547 -1845548 -1845565 1845607 4529566 -4528100 1846604 -1846657 10785815 11730078 -1847061 1847062 -1847097 1847157 1847260 1847392 4528547 -1847572 1847641 -9262981 -1847956 -1848219 1848273 1848356 1848378 -1848426 4528539 -1848596 -1848610 -1848636 -1848657 -1848669 -1848690 -1848713 -1848714 1848864 -1848868 -1849104 5122013 -1849267 1849284 -1849294 9007213 -1849477 -11052757 -11080751 -1849552 -1849630 -1850076 -1850246 -11576787 -1850302 -1850335 -1850386 -1850394 -1850506 4527903 -1850522 -1850533 -1850538 1850570 1850633 -4528529 -1850781 -1851010 -1851011 -1851203 -1851220 1851337 -1851347 1851543 1851555 -5122206 -4527972 1852177 6133343 -1852430 11287091 1829533 1829659 1829776 -1829785 -1829799 -1829823 -1829974 -4525354 1828637 6097236 -5879654 7448174 4525610 10835385 @@ -157,30 +94,17 @@ 1868428 1868527 5734146 -1845962 -1845965 1834980 8503184 1839094 -1830843 -1830122 -1830125 -1830131 -1830147 1830152 -1830191 -1830207 1830241 -4525476 1831458 1831631 1831643 9379855 8834672 1839625 -1841296 -4528593 -1853723 5880147 9734171 10679326 @@ -268,8 +192,6 @@ 1769901 6132966 6132967 -7701550 -8837162 1771839 1771975 1771977 @@ -333,7 +255,6 @@ 1789794 1790331 1790692 -1790816 10749137 10766319 1790876 @@ -353,7 +274,6 @@ 5113082 5113084 5113148 -5113234 5113330 5113352 1792541 @@ -372,15 +292,11 @@ 5113925 1796984 10600368 -1797178 1797258 1797259 -1797276 1797299 1797344 -1797367 1797374 -1797429 1797454 1797479 4532471 @@ -415,7 +331,6 @@ 4301310 4532351 4532352 -4532357 6115426 6115437 6133046 @@ -456,7 +371,6 @@ 1808236 1808286 1808348 -1808450 1808559 6198302 9219266 @@ -486,7 +400,6 @@ 1813263 5117189 7656811 -1814630 1814653 1814913 1814928 @@ -530,9 +443,7 @@ 6134035 1819873 5118348 -6122092 7657803 -8361973 5118422 1820352 1820372 @@ -561,7 +472,6 @@ 10503495 8897869 7596232 -5771982 12176367 7346231 6097214 @@ -569,7 +479,6 @@ 4532516 6133081 6133083 -4532532 4532565 10864524 12021153 @@ -615,15 +524,12 @@ 6133262 12257250 8831819 -12135372 5115872 5115874 5116475 8038357 6133264 -6097254 1774829 -5116698 5116843 12171068 9266866 @@ -640,7 +546,6 @@ 1783906 6133033 5116504 -1788635 9336001 1781413 1781421 @@ -657,7 +562,6 @@ 8000103 9478424 1794273 -4532534 6115388 6133297 1774583 @@ -677,7 +581,6 @@ 5111643 1768461 1760246 -5113030 5113036 5109796 1821455 @@ -685,7 +588,6 @@ 1821479 1821505 1821651 -1821856 1821863 1821920 1821934 @@ -737,7 +639,6 @@ 10098436 11717028 1771772 -1771779 1782310 10094256 10765884 @@ -755,61 +656,32 @@ 1860979 1860983 1860987 -1861031 -4522916 -4522922 -4522886 -4522890 4522891 -4522896 -1860765 1860768 -1860852 -7767114 -7961640 1852956 -1852978 1835432 1835433 1835457 9724183 -1837343 1837420 -1837515 4529064 -8015612 1839293 1839296 -1840297 1840301 -1840345 1840346 -1840360 -1840371 -1840380 -1840408 -1840485 -1840555 1840566 1840581 1840596 -5119808 1831752 -4529630 -5125075 -5125104 10371735 1869359 1869363 9883856 -1751457 -4535884 1939510 1939520 5141344 1860261 1860274 -1860408 4525177 5123339 5123394 @@ -823,27 +695,19 @@ 5123474 5123485 5123489 -1751216 1869706 1869803 -1869852 -1869976 1870202 1870237 1870249 1870250 1870450 -1870650 -1870988 -1871160 -1871212 1871407 4531402 1871630 1871683 1871698 1871783 -1871826 1871988 1872169 10787705 @@ -851,12 +715,9 @@ 1872850 1872873 1872901 -1873048 1873079 1873215 -1873411 1873417 -4530947 1873776 1873780 1873783 @@ -869,43 +730,27 @@ 5125633 5125635 5125689 -1874192 -1874204 1874274 4531147 -1874375 1874743 1874937 -1875008 1875120 8219149 -1875327 1875376 -1875429 -4531242 -1875633 -1875682 -4531284 1875827 1875830 1875865 1875869 1875918 1875958 -1876063 1876168 1876329 -1876357 1876409 -1876512 1876542 1876592 -1876623 1876854 1876922 1877038 -1877310 -1877341 1877368 1877498 5126052 @@ -920,39 +765,20 @@ 1888454 5884888 6133441 -1872315 -1748805 -4525884 5141493 1940510 1940575 1940639 -1940744 -1940768 -4525777 1940807 -1940838 -1941377 -1941437 -12211069 1939879 1736358 1736377 -1736412 -1736484 1736499 1736560 1736601 1736623 -5102628 -5102642 1736727 -1736800 -1736898 -1736904 1736905 -1736945 -4530406 1736993 1737015 4529931 @@ -966,121 +792,56 @@ 1737526 1737533 1737542 -1737552 1737650 1737753 -1737775 1737847 -1737893 -1737924 -4530002 -1738050 1738192 1738222 -1738245 -1738317 -1738322 -1738337 1738373 1738422 -1738429 -1738514 -8869900 -5102931 5102951 -1738687 1738700 -1738839 -1738883 -1739042 -1739043 8086347 -1739272 1739337 -1739377 -1739381 5102982 -1739461 1739471 1739605 -1739748 -1739797 1739833 1739919 -1739922 1739980 1739999 -1740053 -1740069 -1740120 1740183 1740185 -1740374 1740392 7797515 -8215326 1740469 1740482 1740524 -1740567 -1740570 -1740623 1740797 1740828 -1741253 1741341 1741368 4530151 -8345820 5103061 -5103066 -5771357 -1741545 -1741551 -10838422 -1741593 -1741615 1741633 -1741634 -1741667 1741752 -1741756 -1741765 -10807169 -11093909 -1742142 1742185 1742263 1742346 -1742402 -5103451 -5103502 -5103613 5103736 5103948 5771350 -7975250 -1743196 8313553 5103998 -7661023 -1743453 1743475 7877231 1743532 -1743588 1743604 5104056 -6097235 -1743641 -1743710 -4530214 -1743730 1743768 1743775 1743782 4529908 -4529915 1743828 1743856 1743862 @@ -1090,54 +851,29 @@ 1744071 1744136 1744180 -1744224 -4530632 -1744416 -1744498 1744526 -1744542 1744588 1744593 1744699 1744728 1744731 1744739 -1744763 -1744808 1744896 -7964262 -1745079 10844862 1745561 1745579 1745600 1745630 1745634 -1745636 -1745643 -1745676 -1745678 -1745705 -1745724 -1745737 -1745756 1745771 -1745781 -1745787 1745816 -1745830 -8162538 -8369868 1745895 -1745925 1745947 1745952 1745957 1746027 1746174 1746327 -1746413 -1746440 1746613 1746644 1746666 @@ -1146,46 +882,24 @@ 1746832 1746856 1746876 -1746910 -1747050 1747141 -5104442 -1747738 -5104558 -5104597 6097234 -7588222 -9242559 -1748456 1748605 8691947 -10580256 5103121 5103176 -5103181 -5103185 5103227 -5771227 5771229 -5771230 5771232 5771236 5771239 -5771243 5771249 -5771256 5771258 -5771259 -4525500 -4525503 4525510 4525530 4525540 -4525547 -4525562 1920851 1920864 -1920892 10159697 9916153 1920957 @@ -1199,7 +913,6 @@ 1921150 1921163 1921263 -10556522 7387466 1921633 7346430 @@ -1208,16 +921,13 @@ 1922143 1922244 1922285 -10442031 1922311 1922343 8016522 5138200 1922584 -4535092 8782891 1922937 -5138298 5138543 5138561 5714680 @@ -1237,19 +947,14 @@ 1924390 1924458 1924713 -1925221 -1925233 4535172 1925381 -1925454 1925543 1925731 1925877 1925918 1925962 1926054 -9816676 -1926324 1926436 1926448 1926574 @@ -1277,20 +982,16 @@ 1928849 1928908 1928915 -1928960 1929270 1929659 1929697 8356768 1930110 1930832 -4535106 1930968 1931132 8643155 1931148 -1931179 -1931509 1931561 5734268 7346434 @@ -1343,7 +1044,6 @@ 7346417 11874998 4709102 -1933095 1933138 1924494 11055981 @@ -1373,7 +1073,6 @@ 5105588 10955682 10932946 -4522322 7345843 6133481 10017342 @@ -1400,7 +1099,6 @@ 1919731 1919741 1919951 -1919966 5137748 1920237 1920247 @@ -1427,7 +1125,6 @@ 5137903 5137908 5137912 -5804895 5137920 5137926 5137932 @@ -1452,43 +1149,16 @@ 5137706 5137708 5803588 -8203812 1920218 5137763 -1748942 -1749050 1749070 -1749449 -1749713 -1749744 -1749869 -1749921 -1749948 -1750097 -1750143 1750166 -1750288 -5104772 -5104797 -5104829 -5104882 5104891 -5104940 -5105088 -5105158 -5976947 -1751051 5104759 1758003 -1735532 -4527339 -4527342 1758440 1758441 1758461 -1731826 -1731837 -1731860 1855241 1868837 1869057 @@ -1509,7 +1179,6 @@ 5143384 5143437 5143453 -5143477 5143506 5143511 5143525 @@ -1534,7 +1203,6 @@ 1956440 1956524 1956536 -1956599 1956629 1956710 6133593 @@ -1548,16 +1216,9 @@ 1957460 1957572 1957583 -1957632 -1957706 -1957718 -1957746 1957791 1957816 -1957852 1957854 -4524421 -4524426 5143947 1958024 1958045 @@ -1579,9 +1240,6 @@ 1958463 1958483 5144027 -1959383 -1959395 -1959461 1959494 1959645 1959652 @@ -1609,11 +1267,9 @@ 1960854 1960963 1961013 -1961037 1961040 5734344 1961052 -1961068 1961126 1961162 7346236 @@ -1627,19 +1283,16 @@ 1962447 1962516 9812211 -1962636 1962678 1962839 1962860 1963011 4302252 5734349 -1963168 1963306 5144345 1963446 1963709 -1963710 1963733 1963827 11644349 @@ -1649,22 +1302,16 @@ 6133500 1964113 1964116 -1964191 1964195 1964247 1964316 1964437 -1964471 6133502 -1964637 1964653 -1964657 8361848 1964738 5144426 1965166 -1965197 -1965208 1965763 1965777 1965795 @@ -1672,7 +1319,6 @@ 1965825 1965841 1965913 -1965996 1966017 5144431 5144438 @@ -1699,7 +1345,6 @@ 1967672 1967688 7346240 -1967803 1967815 1967873 1968147 @@ -1714,17 +1359,13 @@ 1968951 11598540 1968990 -1969291 1969357 1969491 6133643 1969621 -1969954 1970034 1970136 1970213 -1970243 -1970284 1970322 1970436 5734405 @@ -1750,26 +1391,18 @@ 5145729 5145735 9194811 -9627567 1971888 6133516 1972094 1972185 -1972187 1972234 1972250 -1972342 -1972374 -1972377 5145870 5145965 5146038 5146062 7541913 -7960566 -1972434 1972443 -1972449 1972613 1972614 1972616 @@ -1802,7 +1435,6 @@ 5146763 5146833 5146837 -5146862 5146883 5146946 5146961 @@ -1810,7 +1442,6 @@ 5147062 5147150 5147171 -5147193 5147208 5147214 5147232 @@ -1865,7 +1496,6 @@ 1977003 1977007 1977068 -4523725 5147819 5147827 5147834 @@ -1910,7 +1540,6 @@ 6133560 5148252 10738407 -1978776 1978789 1978821 5734396 @@ -1923,7 +1552,6 @@ 1979222 1979229 1979308 -1979430 1979473 1979521 1979561 @@ -1936,8 +1564,6 @@ 1979822 1980269 5148436 -5148462 -5148486 5148487 1980521 1980532 @@ -1965,42 +1591,21 @@ 1982291 1982406 1982500 -1982525 1982529 1982541 -1982542 1982636 -1982671 -1982746 -1982770 -1982791 1982865 1982885 1983052 -1983111 -1983260 -1983288 -1983441 1983525 -1983548 -1983558 1983648 -1983705 1983755 -1983896 1983922 -1983997 1983999 -1984033 -7752082 -8015895 -8026858 -8262357 11121180 5149012 1984734 5149174 -1984942 1984949 1985061 1985152 @@ -2009,7 +1614,6 @@ 1985191 1985192 1985230 -1985522 1985707 6133659 1985926 @@ -2026,7 +1630,6 @@ 1986171 1986191 1986220 -1986367 1986452 1986508 1986522 @@ -2045,7 +1648,6 @@ 1987527 1987629 1987665 -1987737 1987740 1987744 1987766 @@ -2070,7 +1672,6 @@ 8388883 5149414 5149438 -1988881 5734528 6133644 1989355 @@ -2109,7 +1710,6 @@ 5149986 6133619 5734398 -5880512 5880533 5880539 5880545 @@ -2117,16 +1717,11 @@ 5880552 5880559 5880563 -7657419 8237343 8632989 -5769062 -5769068 -5769072 7429212 9442902 4524740 -7990739 4523560 4524054 4524998 @@ -2135,14 +1730,12 @@ 11828714 10422582 10574156 -4523522 5880392 6133595 6133596 6133597 4524070 4524072 -4524951 4524955 10530208 11555221 @@ -2153,8 +1746,6 @@ 6133674 6133675 7346249 -9220953 -9249651 6133637 6133620 6133519 @@ -2192,15 +1783,9 @@ 5146412 5734482 5149499 -4523880 -4523883 -4523885 -5149659 -5149665 5149704 5149746 5149768 -5149780 5734422 7443518 5146303 @@ -2221,13 +1806,11 @@ 1943223 1943236 1943397 -8178854 8277078 5141795 1943505 1943619 8133678 -8273661 1944503 1944504 1944591 @@ -2289,13 +1872,8 @@ 1949366 7346351 8828146 -1949784 1949794 -1949850 -1949877 1949929 -1950006 -5142394 5142499 5142599 8109173 @@ -2314,14 +1892,10 @@ 5142006 5142032 5142042 -1869467 -1869478 -1869489 1869512 1952878 1952883 1952909 -9400895 10744228 1800191 5109821 @@ -2331,18 +1905,13 @@ 1758878 1759055 1759069 -1759079 1759083 -1759097 4533952 7972792 1759153 1759177 -1759407 1759620 -1759661 1759667 -1759668 1759686 10329023 1760104 @@ -2351,12 +1920,10 @@ 1794361 4534225 1760891 -1760893 4533255 1760939 1760943 1761041 -1761392 1761438 1761778 1762244 @@ -2365,25 +1932,19 @@ 1762657 6132957 1762680 -5109498 5109506 5109523 -5109554 5109599 -5109614 5109670 5109722 1763610 1763727 1763741 -1764716 1764791 1765010 1765011 -1765017 1765038 4534245 -4534257 5109830 5109843 5109848 @@ -2394,8 +1955,6 @@ 8352161 1765658 1765767 -1765954 -1766128 1766130 1766131 1766137 @@ -2404,7 +1963,6 @@ 7895336 1766646 1766741 -1766773 1766910 11034779 1767134 @@ -2412,19 +1970,15 @@ 1767393 1767511 1767597 -1767608 1767625 10575632 1767655 5110120 5734744 -5772172 5772176 -5772178 5772196 5772199 5772202 -5772205 5772206 5772210 5802396 @@ -2441,32 +1995,25 @@ 1768568 1768698 1768702 -1768749 1768771 -1768815 1768819 5110256 5110258 -8150836 1769057 1769095 1769194 1769505 1769519 -1769543 1769566 1769958 1769978 1770150 1770172 -1770307 1770477 1770530 -1770573 4532696 8393221 1771385 -1771391 7725644 1771509 1771531 @@ -2477,74 +2024,57 @@ 1772169 1772179 5772129 -1772956 1772977 1773163 -1773484 1774272 1774347 1774797 4301304 6115946 -1775112 4534046 4534052 4534057 -5110593 -5772269 4534719 1775962 1775963 1776067 1776330 1776371 -5772446 1776619 1776862 6132861 4534463 -1777253 -5110818 5110871 5110885 -1778074 4534299 1778109 -1778127 1778143 -1778596 5111535 5111574 5772222 -8253467 1779435 1779633 1779641 1779690 1780378 -4533325 1781233 1781234 5111974 5111980 -1781694 1781803 1781841 1782168 1782177 -1782319 1782341 1782354 1782457 11763567 1782543 1782560 -1782579 1782615 1782627 1782672 1782726 -1782727 1782757 1782763 1782777 @@ -2553,29 +2083,19 @@ 1782872 1782927 1782948 -1783016 -1783037 1783043 -1783045 6133026 -5112155 -5112160 -5112283 5112291 -5112345 5714973 5715004 5734845 5772349 5772351 -8043500 1783855 1783861 -1783971 1784359 1784513 1784761 -1784826 1784853 4534290 1785145 @@ -2613,20 +2133,13 @@ 4687681 9268082 1787400 -1787417 1787504 1787506 1787590 1787610 1787631 -1787751 -1787770 -1787825 1787841 -4534086 -1788425 1788522 -9216200 4534011 1788846 1788856 @@ -2634,38 +2147,24 @@ 1789071 1789076 1789086 -1789267 4533924 1789553 -1789580 4534166 -1789695 -1789745 1789753 -1789783 -1789785 -1789849 1789957 -1789982 1790002 -1790062 -1790072 1790084 4533115 -8047343 1790361 1790364 1790376 9174377 -1790625 1791384 1791422 1791784 1792061 1792292 -1792335 1792377 -1792383 1792411 1792414 1792418 @@ -2678,32 +2177,21 @@ 1792996 1793243 1793246 -7918000 1793689 1793877 1793986 -1794590 1795065 1795068 4532908 6133011 -1795215 -1795282 7869346 -7922810 1795854 -1795946 1795957 1796007 1796117 1796145 1796169 -1796188 -4534485 -4534486 -7438067 1796217 -7780930 4688172 1796423 1796463 @@ -2715,7 +2203,6 @@ 4533431 4533433 4533444 -4533446 6133001 6133002 6133006 @@ -2723,55 +2210,37 @@ 6133010 1798090 1798372 -11992983 1798916 1798931 1798971 1798974 -1798984 -1799132 1799135 5113951 1799695 1799701 -1799799 1800004 1800032 1800149 9536457 -6097260 4534389 4534207 10638451 4532811 -4534663 4533273 -4534540 8890502 -9135821 -4534038 -4533202 4534398 6544687 -4534538 4532269 4533123 -4533125 -4533128 -4533136 -4533661 4534408 4534533 6132989 6132762 6133075 6132781 -8021109 -11478679 11311045 5110644 6132797 -1779334 5114198 1763072 5109385 @@ -2779,7 +2248,6 @@ 9038042 8491927 4534681 -4534683 4534685 4534686 1792555 @@ -2788,12 +2256,10 @@ 1771650 1771678 1771698 -1770869 1770880 1771040 1771214 1771245 -4533714 6132931 7940536 10841562 @@ -2812,28 +2278,22 @@ 5734817 6132880 9243764 -4534525 -1773904 1759394 1789512 -4533347 4533360 10933525 5110282 11566649 11615549 11731155 -4532203 4532208 4532239 4532253 -4532260 4532266 6115772 6115820 6115822 6115830 -8103163 1782249 1782273 1782279 @@ -2844,7 +2304,6 @@ 10458175 10683012 10702885 -1822346 1822487 1822490 1822493 @@ -2866,7 +2325,6 @@ 6133720 1823706 10996761 -1823726 5118582 1824242 5734235 @@ -2892,9 +2350,6 @@ 1825176 1825336 7346284 -5118892 -7937573 -8397564 1825539 5118974 5118978 @@ -2915,7 +2370,6 @@ 11059353 6133750 1827125 -5119143 1827349 1827408 1827414 @@ -2928,7 +2382,6 @@ 5119223 5119239 5119245 -1827645 1827649 1827650 1827687 @@ -2936,7 +2389,6 @@ 11435704 1828162 1828180 -4534872 6201790 7346286 6133680 @@ -2983,7 +2435,6 @@ 1894714 4535614 4535630 -4535632 4535636 8049830 10639484 @@ -3021,7 +2472,6 @@ 7346344 1898434 1898441 -1898521 1898544 5129378 5129417 @@ -3107,7 +2557,6 @@ 1909607 1909659 1909810 -1909838 1909865 1910706 1910809 @@ -3121,7 +2570,6 @@ 7728366 5133687 5133689 -1911633 4535592 1911736 7809779 @@ -3136,7 +2584,6 @@ 4299576 4299597 4299599 -5133990 5772890 7428726 4535581 @@ -3172,7 +2619,6 @@ 11535847 1916410 1916509 -7854318 1916758 5136594 5136681 @@ -3195,16 +2641,12 @@ 1918554 1918627 1918669 -1918733 1918843 -1918854 -4535618 4535510 10000384 10043827 5130587 5130682 -7762841 5131096 5131142 5131192 @@ -3231,7 +2673,6 @@ 8001799 5806167 7642610 -5135513 11525418 5128644 5129000 @@ -3245,7 +2686,6 @@ 1910662 1902143 1902182 -1899349 1899433 1899818 5129913 @@ -3310,18 +2750,11 @@ 5143116 5143129 5143147 -1952806 1952857 9502606 5885428 8604089 -1832819 -1832853 -1832915 -1832936 -5880257 6097228 -1853064 1868211 1868409 4702564 @@ -3331,13 +2764,8 @@ 5141590 1735121 1941864 -5120465 -5120675 5121613 1842097 -5120396 -1842485 -1842690 1842695 9755262 1843564 @@ -3348,7 +2776,6 @@ 5101394 1730948 1730978 -1731263 4525641 1731598 10450446 @@ -3364,7 +2791,6 @@ 1878879 1878895 1878904 -1878907 1878939 1879125 1879141 @@ -3375,7 +2801,6 @@ 1879379 5734212 1879408 -1879427 1879452 1879471 5126212 @@ -3383,17 +2808,12 @@ 1879630 1879731 1879735 -1879765 10915497 1879970 1880062 1880064 -1880094 -1880104 1880138 -1880139 1880140 -1880143 5126635 5126637 1880353 @@ -3404,8 +2824,6 @@ 6133225 1880852 1880858 -1880907 -1880931 1880968 1881089 1881121 @@ -3417,17 +2835,12 @@ 1881515 4531713 1881834 -4531975 1881964 1882021 -1882158 1882210 1882253 1882266 1882272 -1882437 -1882557 -1882729 5126834 1882753 1882767 @@ -3439,8 +2852,6 @@ 1882965 1883067 1883161 -1883168 -1883386 5127097 1883873 1883943 @@ -3479,25 +2890,20 @@ 1885745 1885826 1885919 -1885937 1885945 1885994 -1886084 1886251 1886320 1886362 8223165 1886526 -1886579 1886587 -1886648 1886700 1886720 1886726 1886729 7562564 1886929 -1886951 1887054 1887290 1887509 @@ -3509,15 +2915,12 @@ 4531968 1888324 1888346 -10922411 1888484 1888537 -1888579 1888619 1888733 1888743 1888759 -1888826 1888891 1888893 1888906 @@ -3554,16 +2957,12 @@ 10180624 1890410 1890487 -1890522 1890534 1890576 -1890656 1890670 1890699 -1890701 1890772 1890898 -1890957 1891059 1891167 1891190 @@ -3571,11 +2970,9 @@ 1891339 1891386 1891426 -1891453 1891473 1891493 4532022 -8411753 1891533 1891583 1891636 @@ -3587,12 +2984,7 @@ 11056379 9674732 1884255 -1884273 -1884280 -1884312 -1884332 1884370 -1884403 5884851 6133139 6133141 @@ -3614,10 +3006,8 @@ 8532380 8537359 8823068 -8856895 8858121 9100030 -9101339 9137965 1886374 1889716 @@ -3635,10 +3025,7 @@ 5127698 5802339 1887108 -1887173 -1887177 4532050 -4532057 4532088 4532095 6121184 @@ -3648,56 +3035,33 @@ 4532160 5771880 10410699 -1846107 1846111 -1846112 1846133 -1846149 -1846159 -1846219 -1846236 -4528818 1939597 1830879 -1830937 -1830962 -1831002 1831009 1831136 -1831168 4708183 -1853587 -1854202 -1854347 5122430 5122439 -1854792 1854824 1854849 -4526050 1858637 1858674 1858698 1858775 -1858778 -1858873 1859046 1859177 1859305 1859453 -1859471 -1859480 9749806 6133397 1859932 1860026 -1860063 -1860076 4536472 4536483 1973467 5123221 -5123042 1865593 10014340 1865650 @@ -3729,9 +3093,7 @@ 11670751 11729388 5124716 -7734292 5120278 -1841813 1841946 10019169 10005133 @@ -3740,7 +3102,6 @@ 1861457 1861488 1861494 -1861510 1861644 1861663 1861665 @@ -3750,7 +3111,6 @@ 1861714 1861721 1861797 -1861842 1861862 5123674 1861933 @@ -3788,7 +3148,6 @@ 1862572 1862578 1862580 -1862701 1862719 1862765 1862774 @@ -3853,7 +3212,6 @@ 1993043 1993419 1993637 -1939432 1953196 1953326 1953356 @@ -3874,20 +3232,11 @@ 5143266 1954120 6132728 -1860108 1830099 -1830372 1830380 1830407 -1830408 -1830410 -1830457 -4525369 -1830802 -4525364 1754135 5105642 -1754332 1754368 1754380 1754400 @@ -3907,18 +3256,13 @@ 1755248 1755253 1755276 -5106115 5106160 -5107128 -5107219 5107644 -5107829 7410701 7674502 7778368 7903078 7955974 -8201251 8426357 1757652 5108318 @@ -3928,27 +3272,15 @@ 1757853 5108346 5108349 -8964772 4522753 9004359 -1939677 -1939680 1939688 -7646066 -1829322 -1829363 1855630 1855747 8734090 -1856289 1856384 -1856595 1856620 -1856658 1856668 -1856691 -1856701 -1856730 1856768 1856867 1856971 @@ -3956,20 +3288,12 @@ 1857267 1857380 1857626 -9790007 1857828 1857829 -1857856 -1857878 1857924 1857938 1857978 -1858074 -1858100 -1858113 -1858163 1858283 -1858321 8178453 1858557 1937707 @@ -4021,7 +3345,6 @@ 1938230 1938233 1938300 -1938520 1938612 1938796 1938810 @@ -4031,26 +3354,13 @@ 1939168 5141311 5141317 -5141262 -1838691 -1838905 -1838911 -4528692 -4528694 8546322 8574752 1835098 -1835393 -1835396 1837172 -1838969 1839560 -1839770 -1839893 5770922 5770942 -4529032 -5119893 12188993 1800238 10213314 @@ -4083,7 +3393,6 @@ 1801490 10066605 10510325 -1801896 4534779 4534782 6112606 @@ -4114,10 +3423,8 @@ 1803073 1803108 10942408 -4534762 4534767 6133803 5114311 -5114327 8244266 10987178 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg index f5b2ca0..b87ab0e 100644 --- a/docs/assets/preset-overlap.svg +++ b/docs/assets/preset-overlap.svg @@ -38,7 +38,7 @@ z +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" id="imageca59cf51df" transform="scale(1 -1) translate(0 -765.36)" x="127.543052" y="-179.086835" width="765.36" height="765.36"/> @@ -1152,7 +1152,7 @@ z - + @@ -1162,9 +1162,9 @@ z - - - + + + @@ -1240,7 +1240,7 @@ z - + @@ -1253,11 +1253,11 @@ z - + - - - + + + @@ -1980,7 +1980,7 @@ L -3.5 0 - + @@ -1990,9 +1990,9 @@ L -3.5 0 - - - + + + @@ -2068,7 +2068,7 @@ L -3.5 0 - + @@ -2081,11 +2081,11 @@ L -3.5 0 - + - - - + + + @@ -2449,9 +2449,9 @@ z - + - + @@ -2890,10 +2890,9 @@ z - - - - + + + @@ -3042,10 +3041,10 @@ z - + - + @@ -3062,10 +3061,10 @@ z - + - - + + @@ -3197,10 +3196,10 @@ z - + - - + + @@ -3217,10 +3216,10 @@ z - + - - + + @@ -3350,10 +3349,10 @@ z - + - - + + @@ -3370,10 +3369,10 @@ z - + - - + + @@ -3505,10 +3504,10 @@ z - + - - + + @@ -3524,9 +3523,9 @@ z - + - + @@ -3657,10 +3656,10 @@ z - + - + @@ -3677,10 +3676,10 @@ z - + - + @@ -3806,9 +3805,9 @@ z - + - + @@ -3954,9 +3953,9 @@ z - + - + @@ -4099,9 +4098,9 @@ z - + - + @@ -4268,10 +4267,9 @@ z - - - - + + + @@ -4332,63 +4330,62 @@ z - - - - + + + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + @@ -4406,31 +4403,31 @@ z - + - + - + - + - + - - + + - + - + @@ -4544,10 +4541,10 @@ z - + - + @@ -4566,10 +4563,10 @@ z - + - - + + @@ -4696,10 +4693,10 @@ z - + - + @@ -4718,10 +4715,10 @@ z - + - - + + @@ -4766,9 +4763,9 @@ z - + - + @@ -4793,38 +4790,38 @@ z - + - - + + - + - - + + - + - - + + - + - + - + - + @@ -4846,31 +4843,30 @@ z - - - - + + + - + - - + + - + - - + + - + - - + + @@ -4882,22 +4878,22 @@ z - + - - + + - + - + - + - + @@ -4914,9 +4910,9 @@ z - + - + @@ -5001,10 +4997,10 @@ z - + - + @@ -5022,10 +5018,10 @@ z - + - - + + @@ -5166,9 +5162,9 @@ z - + - + @@ -5316,9 +5312,9 @@ z - + - + @@ -5769,9 +5765,9 @@ z - + - + @@ -5933,7 +5929,7 @@ z +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" id="imaged6c136e4e6" transform="scale(1 -1) translate(0 -765.36)" x="1106.262812" y="-179.086835" width="765.36" height="765.36"/> @@ -6334,7 +6330,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + @@ -6344,9 +6340,9 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - - - + + + @@ -6422,7 +6418,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + @@ -6435,11 +6431,11 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + - - - + + + @@ -7015,7 +7011,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + @@ -7025,9 +7021,9 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - - - + + + @@ -7103,7 +7099,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + @@ -7116,11 +7112,11 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl/klEQVR4nO3a7a9ueX3X8evae5/bGc4A - + - - - + + + @@ -7454,9 +7450,9 @@ L 1871.579316 179.130332 - + - + @@ -7472,9 +7468,9 @@ L 1871.579316 179.130332 - + - + @@ -8045,10 +8041,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8065,10 +8061,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8202,10 +8198,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8221,10 +8217,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8355,10 +8351,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8375,10 +8371,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8508,10 +8504,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8527,9 +8523,9 @@ L 1871.579316 179.130332 - - - + + + @@ -8679,10 +8675,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8834,10 +8830,10 @@ L 1871.579316 179.130332 - + - + @@ -8970,10 +8966,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8990,10 +8986,10 @@ L 1871.579316 179.130332 - + - + @@ -9126,10 +9122,10 @@ L 1871.579316 179.130332 - + - + @@ -9147,10 +9143,10 @@ L 1871.579316 179.130332 - + - + @@ -9304,10 +9300,10 @@ L 1871.579316 179.130332 - + - + @@ -9351,9 +9347,9 @@ L 1871.579316 179.130332 - + - + @@ -9376,50 +9372,50 @@ L 1871.579316 179.130332 - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + @@ -9443,45 +9439,45 @@ L 1871.579316 179.130332 - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -9609,10 +9605,10 @@ L 1871.579316 179.130332 - + - + @@ -9806,16 +9802,15 @@ L 1871.579316 179.130332 - + - + - - - - + + + @@ -9832,31 +9827,31 @@ L 1871.579316 179.130332 - + - + - + - - + + - + - - + + - + - - + + @@ -9879,16 +9874,15 @@ L 1871.579316 179.130332 - + - + - - - - + + + @@ -9900,17 +9894,17 @@ L 1871.579316 179.130332 - + - + - + - - + + @@ -9922,23 +9916,24 @@ L 1871.579316 179.130332 - + - - + + - + - + - - - + + + + @@ -9955,9 +9950,9 @@ L 1871.579316 179.130332 - + - + @@ -10642,10 +10637,10 @@ L 1871.579316 179.130332 - + - + @@ -10661,10 +10656,10 @@ L 1871.579316 179.130332 - + - + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv index 028930c..606c33f 100644 --- a/docs/assets/preset-overlap.tsv +++ b/docs/assets/preset-overlap.tsv @@ -12,10 +12,10 @@ north_america africa 92 1.750048 2.079096 north_america north_africa 32 0.691294 0.723164 north_america subsaharan_africa 84 1.635196 1.898305 north_america madagascar 13 0.287674 0.293785 -north_america asia 403 4.476286 9.107345 +north_america asia 330 3.865074 7.457627 north_america south_asia 80 1.356622 1.807910 north_america southeast_asia 61 1.010603 1.378531 -north_america east_asia 376 4.601077 8.497175 +north_america east_asia 289 3.819720 6.531073 north_america japan 64 1.265322 1.446328 north_america oceania 147 2.243932 3.322034 north_america australia 89 1.433172 2.011299 @@ -35,10 +35,10 @@ central_america africa 47 1.868045 2.867602 central_america north_africa 14 0.752284 0.854179 central_america subsaharan_africa 46 1.925492 2.806589 central_america madagascar 8 0.460299 0.488103 -central_america asia 52 0.791717 3.172666 +central_america asia 51 0.845631 3.111653 central_america south_asia 32 1.012979 1.952410 central_america southeast_asia 26 0.791476 1.586333 -central_america east_asia 40 0.699056 2.440513 +central_america east_asia 39 0.775348 2.379500 central_america japan 15 0.646273 0.915192 central_america oceania 58 1.504930 3.538743 central_america australia 34 0.977292 2.074436 @@ -58,10 +58,10 @@ caribbean africa 34 1.925255 3.881279 caribbean north_africa 7 0.633484 0.799087 caribbean subsaharan_africa 34 2.075702 3.881279 caribbean madagascar 9 0.924025 1.027397 -caribbean asia 38 0.653033 4.337900 +caribbean asia 38 0.719561 4.337900 caribbean south_asia 29 1.208837 3.310502 caribbean southeast_asia 26 1.030928 2.968037 -caribbean east_asia 23 0.462219 2.625571 +caribbean east_asia 23 0.537007 2.625571 caribbean japan 9 0.575448 1.027397 caribbean oceania 49 1.580645 5.593607 caribbean australia 26 0.954479 2.968037 @@ -81,10 +81,10 @@ south_america africa 51 2.143758 3.386454 south_america north_africa 13 0.751880 0.863214 south_america subsaharan_africa 50 2.220249 3.320053 south_america madagascar 13 0.812500 0.863214 -south_america asia 61 0.949269 4.050465 +south_america asia 60 1.018849 3.984064 south_america south_asia 40 1.325381 2.656042 south_america southeast_asia 31 0.985065 2.058433 -south_america east_asia 44 0.787825 2.921647 +south_america east_asia 40 0.816993 2.656042 south_america japan 13 0.593607 0.863214 south_america oceania 63 1.695371 4.183267 south_america australia 38 1.137044 2.523240 @@ -104,10 +104,10 @@ arctic africa 135 2.635689 3.115624 arctic north_africa 93 2.077748 2.146319 arctic subsaharan_africa 85 1.685170 1.961689 arctic madagascar 8 0.180505 0.184630 -arctic asia 2029 27.851750 46.826679 +arctic asia 1498 20.582578 34.571890 arctic south_asia 120 2.081526 2.769444 arctic southeast_asia 36 0.603116 0.830833 -arctic east_asia 1995 30.877573 46.042003 +arctic east_asia 1302 20.151679 30.048465 arctic japan 229 4.769840 5.285022 arctic oceania 72 1.101928 1.661666 arctic australia 42 0.681265 0.969305 @@ -127,10 +127,10 @@ europe africa 306 8.425110 10.152621 europe north_africa 219 7.225338 7.266092 europe subsaharan_africa 181 4.987600 6.005309 europe madagascar 16 0.515298 0.530856 -europe asia 2091 35.416667 69.376244 +europe asia 1554 26.325597 51.559390 europe south_asia 138 3.116531 4.578633 europe southeast_asia 31 0.665951 1.028534 -europe east_asia 1878 35.710211 62.309224 +europe east_asia 1188 22.602740 39.416058 europe japan 165 4.653130 5.474453 europe oceania 88 1.692633 2.919708 europe australia 65 1.347709 2.156603 @@ -150,10 +150,10 @@ north_europe africa 92 3.275187 4.653515 north_europe north_africa 65 3.026071 3.287810 north_europe subsaharan_africa 51 1.873622 2.579666 north_europe madagascar 2 0.096061 0.101163 -north_europe asia 1598 29.813433 80.829540 +north_europe asia 1125 21.246459 56.904401 north_europe south_asia 53 1.524741 2.680830 north_europe southeast_asia 8 0.219720 0.404654 -north_europe east_asia 1551 34.095406 78.452200 +north_europe east_asia 987 22.330317 49.924127 north_europe japan 131 5.151396 6.626201 north_europe oceania 49 1.166389 2.478503 north_europe australia 31 0.811518 1.568032 @@ -173,10 +173,10 @@ mediterranean africa 355 10.926439 13.246269 mediterranean north_africa 236 8.805970 8.805970 mediterranean subsaharan_africa 227 6.986765 8.470149 mediterranean madagascar 23 0.832127 0.858209 -mediterranean asia 1891 32.772964 70.559701 +mediterranean asia 1502 26.721224 56.044776 mediterranean south_asia 174 4.287827 6.492537 mediterranean southeast_asia 48 1.115242 1.791045 -mediterranean east_asia 1632 31.560627 60.895522 +mediterranean east_asia 1092 21.761658 40.746269 mediterranean japan 160 4.973578 5.970149 mediterranean oceania 96 1.976529 3.582090 mediterranean australia 73 1.629101 2.723881 @@ -196,10 +196,10 @@ middle_east africa 240 15.686275 28.368794 middle_east north_africa 154 16.594828 18.203310 middle_east subsaharan_africa 179 12.235133 21.158392 middle_east madagascar 33 3.586957 3.900709 -middle_east asia 835 16.726763 98.699764 +middle_east asia 835 18.747194 98.699764 middle_east south_asia 212 9.698079 25.059102 middle_east southeast_asia 72 2.943581 8.510638 -middle_east east_asia 592 13.525246 69.976359 +middle_east east_asia 474 12.467123 56.028369 middle_east japan 95 6.560773 11.229314 middle_east oceania 70 2.295835 8.274232 middle_east australia 60 2.255639 7.092199 @@ -219,10 +219,10 @@ africa africa 924 100.000000 100.000000 africa north_africa 236 25.541126 25.541126 africa subsaharan_africa 796 86.147186 86.147186 africa madagascar 107 11.580087 11.580087 -africa asia 355 6.396396 38.419913 +africa asia 351 6.997608 37.987013 africa south_asia 190 8.311461 20.562771 africa southeast_asia 120 4.846527 12.987013 -africa east_asia 234 4.861833 25.324675 +africa east_asia 213 5.143685 23.051948 africa japan 64 4.110469 6.926407 africa oceania 132 4.306688 14.285714 africa australia 119 4.441956 12.878788 @@ -242,10 +242,10 @@ north_africa africa 236 25.541126 100.000000 north_africa north_africa 236 100.000000 100.000000 north_africa subsaharan_africa 113 12.295974 47.881356 north_africa madagascar 14 4.255319 5.932203 -north_africa asia 166 3.286478 70.338983 +north_africa asia 164 3.632337 69.491525 north_africa south_asia 65 3.772490 27.542373 north_africa southeast_asia 22 1.166490 9.322034 -north_africa east_asia 111 2.612994 47.033898 +north_africa east_asia 97 2.717848 41.101695 north_africa japan 29 3.207965 12.288136 north_africa oceania 29 1.169355 12.288136 north_africa australia 24 1.150527 10.169492 @@ -265,10 +265,10 @@ subsaharan_africa africa 796 86.147186 100.000000 subsaharan_africa north_africa 113 12.295974 14.195980 subsaharan_africa subsaharan_africa 796 100.000000 100.000000 subsaharan_africa madagascar 107 13.442211 13.442211 -subsaharan_africa asia 284 5.170217 35.678392 +subsaharan_africa asia 281 5.667608 35.301508 subsaharan_africa south_asia 178 8.202765 22.361809 subsaharan_africa southeast_asia 118 5.021277 14.824121 -subsaharan_africa east_asia 181 3.820177 22.738693 +subsaharan_africa east_asia 171 4.217016 21.482412 subsaharan_africa japan 59 4.114365 7.412060 subsaharan_africa oceania 129 4.387755 16.206030 subsaharan_africa australia 118 4.623824 14.824121 @@ -288,39 +288,39 @@ madagascar africa 107 11.580087 100.000000 madagascar north_africa 14 4.255319 13.084112 madagascar subsaharan_africa 107 13.442211 100.000000 madagascar madagascar 107 100.000000 100.000000 -madagascar asia 54 1.072706 50.467290 +madagascar asia 54 1.201068 50.467290 madagascar south_asia 44 2.724458 41.121495 madagascar southeast_asia 35 2.006881 32.710280 -madagascar east_asia 40 0.954654 37.383178 +madagascar east_asia 39 1.114923 36.448598 madagascar japan 16 2.030457 14.953271 madagascar oceania 34 1.449275 31.775701 madagascar australia 31 1.589744 28.971963 madagascar tasmania 0 0.000000 0.000000 madagascar new_zealand 5 0.948767 4.672897 madagascar oceania_excluding_australia_nz 21 4.794521 19.626168 -asia north_america 403 4.476286 8.090745 -asia central_america 52 0.791717 1.043967 -asia caribbean 38 0.653033 0.762899 -asia south_america 61 0.949269 1.224654 -asia arctic 2029 27.851750 40.734792 -asia europe 2091 35.416667 41.979522 -asia north_europe 1598 29.813433 32.081911 -asia mediterranean 1891 32.772964 37.964264 -asia middle_east 835 16.726763 16.763702 -asia africa 355 6.396396 7.127083 -asia north_africa 166 3.286478 3.332664 -asia subsaharan_africa 284 5.170217 5.701666 -asia madagascar 54 1.072706 1.084120 -asia asia 4981 100.000000 100.000000 -asia south_asia 1552 31.158402 31.158402 -asia southeast_asia 1658 33.193193 33.286489 -asia east_asia 4123 82.774543 82.774543 -asia japan 697 13.993174 13.993174 -asia oceania 575 8.609073 11.543867 -asia australia 490 7.698350 9.837382 -asia tasmania 11 0.209764 0.220839 -asia new_zealand 58 1.084518 1.164425 -asia oceania_excluding_australia_nz 283 5.603960 5.681590 +asia north_america 330 3.865074 7.427414 +asia central_america 51 0.845631 1.147873 +asia caribbean 38 0.719561 0.855278 +asia south_america 60 1.018849 1.350439 +asia arctic 1498 20.582578 33.715958 +asia europe 1554 26.325597 34.976367 +asia north_europe 1125 21.246459 25.320729 +asia mediterranean 1502 26.721224 33.805987 +asia middle_east 835 18.747194 18.793608 +asia africa 351 6.997608 7.900068 +asia north_africa 164 3.632337 3.691200 +asia subsaharan_africa 281 5.667608 6.324555 +asia madagascar 54 1.201068 1.215395 +asia asia 4443 100.000000 100.000000 +asia south_asia 1552 34.931353 34.931353 +asia southeast_asia 1658 37.199910 37.317128 +asia east_asia 3430 77.200090 77.200090 +asia japan 697 15.687598 15.687598 +asia oceania 565 9.185498 12.716633 +asia australia 486 8.334762 10.938555 +asia tasmania 11 0.233744 0.247580 +asia new_zealand 50 1.037775 1.125366 +asia oceania_excluding_australia_nz 282 6.248615 6.347063 south_asia north_america 80 1.356622 5.154639 south_asia central_america 32 1.012979 2.061856 south_asia caribbean 29 1.208837 1.868557 @@ -334,10 +334,10 @@ south_asia africa 190 8.311461 12.242268 south_asia north_africa 65 3.772490 4.188144 south_asia subsaharan_africa 178 8.202765 11.469072 south_asia madagascar 44 2.724458 2.835052 -south_asia asia 1552 31.158402 100.000000 +south_asia asia 1552 34.931353 100.000000 south_asia south_asia 1552 100.000000 100.000000 south_asia southeast_asia 1143 54.925517 73.646907 -south_asia east_asia 1229 27.642825 79.188144 +south_asia east_asia 1218 32.359192 78.479381 south_asia japan 301 15.451745 19.394330 south_asia oceania 356 10.262323 22.938144 south_asia australia 316 10.160772 20.360825 @@ -357,39 +357,39 @@ southeast_asia africa 120 4.846527 7.177033 southeast_asia north_africa 22 1.166490 1.315789 southeast_asia subsaharan_africa 118 5.021277 7.057416 southeast_asia madagascar 35 2.006881 2.093301 -southeast_asia asia 1658 33.193193 99.162679 +southeast_asia asia 1658 37.199910 99.162679 southeast_asia south_asia 1143 54.925517 68.361244 southeast_asia southeast_asia 1672 100.000000 100.000000 -southeast_asia east_asia 1186 25.732263 70.933014 +southeast_asia east_asia 1186 30.286006 70.933014 southeast_asia japan 285 13.675624 17.045455 southeast_asia oceania 473 13.623272 28.289474 southeast_asia australia 409 13.037934 24.461722 southeast_asia tasmania 5 0.257599 0.299043 southeast_asia new_zealand 22 1.060241 1.315789 southeast_asia oceania_excluding_australia_nz 280 16.055046 16.746411 -east_asia north_america 376 4.601077 9.119573 -east_asia central_america 40 0.699056 0.970167 -east_asia caribbean 23 0.462219 0.557846 -east_asia south_america 44 0.787825 1.067184 -east_asia arctic 1995 30.877573 48.387097 -east_asia europe 1878 35.710211 45.549357 -east_asia north_europe 1551 34.095406 37.618239 -east_asia mediterranean 1632 31.560627 39.582828 -east_asia middle_east 592 13.525246 14.358477 -east_asia africa 234 4.861833 5.675479 -east_asia north_africa 111 2.612994 2.692214 -east_asia subsaharan_africa 181 3.820177 4.390007 -east_asia madagascar 40 0.954654 0.970167 -east_asia asia 4123 82.774543 100.000000 -east_asia south_asia 1229 27.642825 29.808392 -east_asia southeast_asia 1186 25.732263 28.765462 -east_asia east_asia 4123 100.000000 100.000000 -east_asia japan 697 16.905166 16.905166 -east_asia oceania 409 6.831468 9.919961 -east_asia australia 352 6.235607 8.537473 -east_asia tasmania 9 0.205105 0.218288 -east_asia new_zealand 55 1.224126 1.333980 -east_asia oceania_excluding_australia_nz 172 3.997211 4.171720 +east_asia north_america 289 3.819720 8.425656 +east_asia central_america 39 0.775348 1.137026 +east_asia caribbean 23 0.537007 0.670554 +east_asia south_america 40 0.816993 1.166181 +east_asia arctic 1302 20.151679 37.959184 +east_asia europe 1188 22.602740 34.635569 +east_asia north_europe 987 22.330317 28.775510 +east_asia mediterranean 1092 21.761658 31.836735 +east_asia middle_east 474 12.467123 13.819242 +east_asia africa 213 5.143685 6.209913 +east_asia north_africa 97 2.717848 2.827988 +east_asia subsaharan_africa 171 4.217016 4.985423 +east_asia madagascar 39 1.114923 1.137026 +east_asia asia 3430 77.200090 100.000000 +east_asia south_asia 1218 32.359192 35.510204 +east_asia southeast_asia 1186 30.286006 34.577259 +east_asia east_asia 3430 100.000000 100.000000 +east_asia japan 697 20.320700 20.320700 +east_asia oceania 398 7.502356 11.603499 +east_asia australia 348 7.021792 10.145773 +east_asia tasmania 9 0.243572 0.262391 +east_asia new_zealand 47 1.234244 1.370262 +east_asia oceania_excluding_australia_nz 171 4.735530 4.985423 japan north_america 64 1.265322 9.182209 japan central_america 15 0.646273 2.152080 japan caribbean 9 0.575448 1.291248 @@ -403,10 +403,10 @@ japan africa 64 4.110469 9.182209 japan north_africa 29 3.207965 4.160689 japan subsaharan_africa 59 4.114365 8.464849 japan madagascar 16 2.030457 2.295552 -japan asia 697 13.993174 100.000000 +japan asia 697 15.687598 100.000000 japan south_asia 301 15.451745 43.185079 japan southeast_asia 285 13.675624 40.889527 -japan east_asia 697 16.905166 100.000000 +japan east_asia 697 20.320700 100.000000 japan japan 697 100.000000 100.000000 japan oceania 130 4.577465 18.651363 japan australia 108 4.384896 15.494978 @@ -426,10 +426,10 @@ oceania africa 132 4.306688 5.807303 oceania north_africa 29 1.169355 1.275847 oceania subsaharan_africa 129 4.387755 5.675319 oceania madagascar 34 1.449275 1.495821 -oceania asia 575 8.609073 25.296964 +oceania asia 565 9.185498 24.857017 oceania south_asia 356 10.262323 15.662121 oceania southeast_asia 473 13.623272 20.809503 -oceania east_asia 409 6.831468 17.993841 +oceania east_asia 398 7.502356 17.509899 oceania japan 130 4.577465 5.719314 oceania oceania 2273 100.000000 100.000000 oceania australia 1874 82.446106 82.446106 @@ -449,10 +449,10 @@ australia africa 119 4.441956 6.350053 australia north_africa 24 1.150527 1.280683 australia subsaharan_africa 118 4.623824 6.296692 australia madagascar 31 1.589744 1.654216 -australia asia 490 7.698350 26.147279 +australia asia 486 8.334762 25.933831 australia south_asia 316 10.160772 16.862327 australia southeast_asia 409 13.037934 21.824973 -australia east_asia 352 6.235607 18.783351 +australia east_asia 348 7.021792 18.569904 australia japan 108 4.384896 5.763074 australia oceania 1874 82.446106 100.000000 australia australia 1874 100.000000 100.000000 @@ -472,10 +472,10 @@ tasmania africa 6 0.503356 2.189781 tasmania north_africa 2 0.393701 0.729927 tasmania subsaharan_africa 6 0.563910 2.189781 tasmania madagascar 0 0.000000 0.000000 -tasmania asia 11 0.209764 4.014599 +tasmania asia 11 0.233744 4.014599 tasmania south_asia 3 0.164564 1.094891 tasmania southeast_asia 5 0.257599 1.824818 -tasmania east_asia 9 0.205105 3.284672 +tasmania east_asia 9 0.243572 3.284672 tasmania japan 3 0.309917 1.094891 tasmania oceania 274 12.054553 100.000000 tasmania australia 274 14.621131 100.000000 @@ -495,10 +495,10 @@ new_zealand africa 33 2.507599 7.764706 new_zealand north_africa 14 2.163833 3.294118 new_zealand subsaharan_africa 32 2.691337 7.529412 new_zealand madagascar 5 0.948767 1.176471 -new_zealand asia 58 1.084518 13.647059 +new_zealand asia 50 1.037775 11.764706 new_zealand south_asia 25 1.280738 5.882353 new_zealand southeast_asia 22 1.060241 5.176471 -new_zealand east_asia 55 1.224126 12.941176 +new_zealand east_asia 47 1.234244 11.058824 new_zealand japan 19 1.722575 4.470588 new_zealand oceania 425 18.697756 100.000000 new_zealand australia 130 5.993545 30.588235 @@ -518,10 +518,10 @@ oceania_excluding_australia_nz africa 59 4.847987 16.761364 oceania_excluding_australia_nz north_africa 15 2.617801 4.261364 oceania_excluding_australia_nz subsaharan_africa 58 5.321101 16.477273 oceania_excluding_australia_nz madagascar 21 4.794521 5.965909 -oceania_excluding_australia_nz asia 283 5.603960 80.397727 +oceania_excluding_australia_nz asia 282 6.248615 80.113636 oceania_excluding_australia_nz south_asia 165 9.488212 46.875000 oceania_excluding_australia_nz southeast_asia 280 16.055046 79.545455 -oceania_excluding_australia_nz east_asia 172 3.997211 48.863636 +oceania_excluding_australia_nz east_asia 171 4.735530 48.579545 oceania_excluding_australia_nz japan 71 7.259714 20.170455 oceania_excluding_australia_nz oceania 352 15.486142 100.000000 oceania_excluding_australia_nz australia 251 12.708861 71.306818 diff --git a/docs/model-presets.md b/docs/model-presets.md index 93d2088..6e9b823 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -26,7 +26,7 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `south_america` | 1,506 | 3 | 25 | 257,026 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. | | `caribbean` | 876 | 3 | 25 | 28,652 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. | | `south_asia` | 1,552 | 3 | 25 | 177,926 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. | -| `asia` | 4,981 | 3 | 25 | 1,031,247 | All ASIA records plus all records from the listed Asian countries and territories, including Russia, Turkey, Georgia, Armenia, Azerbaijan in full. Includes their European-labelled records and records with blank continent. Cyprus is excluded even when its continent is ASIA. | +| `asia` | 4,443 | 3 | 25 | 920,962 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. | | `japan` | 697 | 3 | 25 | 30,076 | All records assigned countryCode JP, including islands. | | `africa` | 924 | 3 | 25 | 149,267 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. | | `north_africa` | 236 | 3 | 25 | 4,393 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. | @@ -38,7 +38,7 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `new_zealand` | 425 | 3 | 25 | 110,030 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. | | `oceania_excluding_australia_nz` | 352 | 3 | 25 | 8,721 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. | | `southeast_asia` | 1,672 | 3 | 25 | 172,424 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. | -| `east_asia` | 4,123 | 3 | 25 | 659,767 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russia. All Russia is included because this preset uses whole-country filters. | +| `east_asia` | 3,430 | 3 | 25 | 549,482 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. | | `middle_east` | 846 | 3 | 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | ## Species overlap @@ -60,7 +60,7 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho - **south_america** (South America): `continent` in `SOUTH_AMERICA` OR `countryCode` in `AR, BO, BR, CL, CO, EC, FK, GF, GY, PY, PE, SR, UY, VE, CR, PA`. - **caribbean** (Caribbean): `countryCode` in `AG, AI, AW, BB, BL, BQ, BS, CU, CW, DM, DO, GD, GP, HT, JM, KN, KY, LC, MF, MQ, MS, PR, SX, TC, TT, VC, VG, VI, BM, BZ, GY, SR, GF`. - **south_asia** (South Asia): `countryCode` in `AF, BD, BT, IN, MV, NP, PK, LK, MM, IR`. -- **asia** (Asia): (`continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`) AND country NOT in `CY`. +- **asia** (Asia): (`continent` in `ASIA` OR `countryCode` in `AF, AM, AZ, BH, BD, BT, BN, KH, CN, GE, HK, IN, ID, IR, IQ, IL, JP, JO, KZ, KP, KR, KW, KG, LA, LB, MO, MY, MV, MN, MM, NP, OM, PK, PS, PH, QA, RU, SA, SG, LK, SY, TW, TJ, TH, TL, TR, TM, AE, UZ, VN, YE`) AND country NOT in `CY`; `RU` records additionally require `continent` in `ASIA`. - **japan** (Japan): `countryCode` in `JP`. - **africa** (Africa): `continent` in `AFRICA` OR `countryCode` in `DZ, AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, EG, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, LY, MG, MW, ML, MR, MU, YT, MA, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, TN, UG, EH, ZM, ZW`. - **north_africa** (Northern Africa (broad)): `countryCode` in `DZ, EG, LY, MA, TN, EH, SD, MR`. @@ -72,7 +72,7 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho - **new_zealand** (New Zealand): `countryCode` in `NZ`. - **oceania_excluding_australia_nz** (Oceania excluding Australia and New Zealand): (`continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`) AND country NOT in `AU, NZ`. - **southeast_asia** (Southeast Asia): `countryCode` in `BN, KH, ID, LA, MY, MM, PH, SG, TH, TL, VN, PG`. -- **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`. +- **east_asia** (East Asia): `countryCode` in `CN, HK, MO, TW, JP, KP, KR, MN, RU`; `RU` records additionally require `continent` in `ASIA`. - **middle_east** (Middle East): `countryCode` in `TR, CY, SY, LB, IL, PS, JO, IQ, IR, KW, SA, BH, QA, AE, OM, YE, EG, AM, AZ, GE, AF, PK`. ## Interpretation and reproducibility diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index 172e7ca..7974fda 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -109,3 +109,15 @@ def test_northern_africa_intentionally_overlaps_subsaharan_transition(): countries = ["MA", "EG", "SD", "MR", "ZA", "MG"] assert countries_selected("north_africa", countries) == ["MA", "EG", "SD", "MR"] assert countries_selected("subsaharan_africa", countries) == ["SD", "MR", "ZA", "MG"] + + +@pytest.mark.parametrize("preset", ["asia", "east_asia"]) +def test_russian_contribution_requires_asian_continent(preset): + table = pa.table( + { + "countryCode": ["RU", "RU", "RU", "RU", "JP"], + "continent": ["ASIA", "EUROPE", "", None, ""], + "speciesKey": ["asian_russia", "european_russia", "blank", "null", "japan"], + } + ) + assert select_region(table, RULES[preset])["speciesKey"].to_pylist() == ["asian_russia", "japan"] From e26f3b047408800157da9b837ef779332f5ab91e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 15:49:06 +0200 Subject: [PATCH 020/221] release: define Arctic preset by latitude at least 60 north --- dev/releases/mambo_v3/build_presets.py | 20 +- dev/releases/mambo_v3/preset-definitions.toml | 7 +- dev/releases/mambo_v3/preset-manifest.toml | 10 +- dev/releases/mambo_v3/presets/arctic.classes | 2785 ----------------- docs/assets/preset-overlap.svg | 438 +-- docs/assets/preset-overlap.tsv | 90 +- docs/model-presets.md | 6 +- tests/releases/test_mambo_presets.py | 16 +- 8 files changed, 305 insertions(+), 3067 deletions(-) diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index b11f3a8..8866a11 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -27,6 +27,7 @@ def select_region(table, rule): "country_continent_restrictions", "minimum_regional_rows", "minimum_global_rows", + "minimum_latitude", } if unknown := set(rule) - permitted: raise ValueError(f"Unknown region fields: {sorted(unknown)}") @@ -35,8 +36,17 @@ def select_region(table, rule): if values := rule.get(key): part = pc.fill_null(pc.is_in(table[column], value_set=pa.array(values)), False) mask = part if mask is None else pc.or_(mask, part) + if "minimum_latitude" in rule: + minimum = rule["minimum_latitude"] + if not -90 <= minimum <= 90: + raise ValueError("minimum_latitude must be within [-90, 90]") + text = pc.utf8_trim_whitespace(pc.cast(table["decimalLatitude"], pa.string())) + numeric = pc.match_substring_regex(text, r"^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$") + latitude = pc.cast(pc.if_else(numeric, text, None), pa.float64()) + northern = pc.fill_null(pc.and_(pc.greater_equal(latitude, minimum), pc.less_equal(latitude, 90)), False) + mask = northern if mask is None else pc.and_(mask, northern) if mask is None: - raise ValueError("Region requires countries or continents") + raise ValueError("Region requires countries, continents or minimum_latitude") if values := rule.get("excluded_countries"): mask = pc.and_(mask, pc.invert(pc.is_in(table["countryCode"], value_set=pa.array(values)))) if values := rule.get("state_province"): @@ -71,6 +81,9 @@ def recipe(rule): if rule.get(key): parts.append(f"`{column}` in `{', '.join(rule[key])}`") result = " OR ".join(parts) + if "minimum_latitude" in rule: + latitude = f"valid `decimalLatitude` between {rule['minimum_latitude']} and 90 degrees inclusive" + result = f"({result}) AND {latitude}" if result else latitude if rule.get("excluded_countries"): result = f"({result}) AND country NOT in `{', '.join(rule['excluded_countries'])}`" if rule.get("state_province"): @@ -100,7 +113,7 @@ def build(metadata, evidence_root, write=False): if sorted(mapping.values()) != list(range(len(mapping))): raise ValueError("Model species indices are not contiguous") vocabulary = sorted(mapping, key=mapping.get) - table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent", "stateProvince"]) + table = pq.read_table(metadata, columns=["speciesKey", "countryCode", "continent", "stateProvince", "decimalLatitude"]) if table.num_rows != source["rows"] or table["speciesKey"].null_count: raise ValueError("Unexpected metadata rows or null species IDs") regional_minimum = definitions["minimum_regional_rows"] @@ -215,7 +228,8 @@ def build(metadata, evidence_root, write=False): "", "Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. " "Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. " - "Arctic uses Alaska for US records; other selected countries remain broad proxies including southern records. " + "Arctic uses latitude at least 60°N across all countries, including the boundary; " + "missing, malformed or out-of-range latitudes are excluded. This broad northern scope includes subarctic areas. " "Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation.", "", "Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes " diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index c7cf098..c26e989 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -98,10 +98,9 @@ countries = ["AL", "DZ", "BA", "HR", "CY", "EG", "FR", "GR", "IL", "IT", "LB", " scope = "Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones." [presets.arctic] -label = "Arctic / broad northern-country scope" -countries = ["CA", "US", "GL", "IS", "FO", "NO", "SJ", "SE", "FI", "AX", "RU"] -country_state_restrictions = { US = ["Alaska"] } -scope = "Canada, Alaska (US records only when stateProvince is Alaska), Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. Other countries remain whole-country proxies including southern records; this is not an Arctic Circle or tundra filter. US records with blank state are excluded." +label = "Arctic / north of 60°N" +minimum_latitude = 60 +scope = "Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used." [presets.oceania] label = "Oceania" diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index 459b742..1f68ed0 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -2,7 +2,7 @@ schema_version = 2 qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "148006ef5a5daca30bf6b770ba8aa63bcf7f146f3e4aac278400b7f24260fcfd" +definitions_sha256 = "5ce9da8954624c5d41ed411c5339ffb4b8cc75fdadcc689a3e8c54ad2c2fa700" minimum_regional_rows = 3 minimum_global_rows = 25 @@ -168,13 +168,13 @@ sha256 = "f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3" [presets.arctic] path = "presets/arctic.classes" -count = 4333 +count = 1548 minimum_regional_rows = 3 minimum_global_rows = 25 excluded_by_global_gate_after_regional = 0 -selected_rows = 871155 -species_before_threshold = 4605 -sha256 = "dd43064d8896cadcbc85cacb916cd9bcc8712e4e89d93ee18af209061769bab0" +selected_rows = 115881 +species_before_threshold = 1832 +sha256 = "a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f" [presets.oceania] path = "presets/oceania.classes" diff --git a/dev/releases/mambo_v3/presets/arctic.classes b/dev/releases/mambo_v3/presets/arctic.classes index 2a82a4c..ad9f42d 100644 --- a/dev/releases/mambo_v3/presets/arctic.classes +++ b/dev/releases/mambo_v3/presets/arctic.classes @@ -1,111 +1,41 @@ -1934693 -1868535 -10100176 1860621 1860628 -4522795 1860659 1860664 1860668 1860688 1860709 1860711 -4522933 -5123582 -1860736 1732063 1732416 1732452 1732521 1732565 1732662 -1732685 1732717 -1733154 1733258 1733484 4525266 4525273 -5101678 -5101745 -5101763 -5715280 -5715281 -5769191 1734453 -5102242 -5102304 -5102324 -5102335 -5102365 -1734704 1734826 -5102287 -1833475 -4302388 1845270 -1845279 1845368 -1845448 -1845502 -1845548 -1845565 -1845604 1845607 -4529566 -4528100 -1846313 -5121847 1846604 1846657 -1846715 1846729 -1846849 1846916 -1846941 -1846945 -1846971 -1846992 -1847059 -1847061 -1847064 -1847068 -1847097 -1847149 -1847249 -1847274 -1847308 -1847343 -1847392 -1847407 -1847426 -1847498 -4528547 -1847568 1847572 -9262981 -8559137 -1847919 -1847944 -1847956 -10427568 1848150 10450501 1848219 1848273 -1848274 -1848295 1848312 -1848322 1848356 1848378 -1848426 -4528539 1848596 -1848610 1848636 -1848639 -1848657 1848669 1848690 1848713 @@ -114,908 +44,309 @@ 1848753 1848864 1848868 -1849104 1849267 1849273 1849284 1849294 -1849457 1849477 11052757 11080751 -1849552 1849630 1849856 -1849924 1850008 1850042 1850045 1850076 -1850077 1850106 1850238 -1850246 11576787 1850302 -1850321 1850335 1850386 1850394 1850450 -1850506 4527903 1850522 -1850533 1850538 -1850570 -1850589 -1850597 -4528529 -1850690 -1850771 -1850781 -1850868 -1850908 -1850923 -1850962 1850971 1851000 -1851002 1851010 1851011 5122037 -5122086 -5122113 5122131 1851203 1851220 -1851300 1851337 1851347 -1851462 1851555 -1851714 5122206 -4527972 -1852150 1852177 1852311 -1852430 11287091 -1848212 -1848213 1848920 -1849498 -11430021 1829533 -1829612 1829776 1829785 1829799 1829823 1829974 -8779506 -4525354 1828637 -11642411 1829021 -1829029 6097236 5769272 -10053809 10176413 -10067382 5879654 7448174 4525610 1861395 -1845793 1845962 -1845965 -1846035 -1846505 -1834710 -1839094 -1841261 -1830838 1830843 1830122 1830125 -1830131 -1830137 1830144 1830147 1830152 1830186 1830191 -1830202 -1830203 1830207 -1830229 1830241 1830243 1830262 1830266 1830271 -1830284 -1830293 4525476 -4525487 -9998920 1831643 -1841296 -4528593 8271010 1853723 5880147 9734171 11418741 -7908344 -1758860 -1758861 -1758866 1761111 -1761838 -1762474 -1764525 1764531 -1765097 -1765182 1769103 -1769841 1769897 -11728240 -7396517 -5110305 -7701550 -8837162 -9256436 -9279670 -9283228 -9327042 -9399145 -9440644 -9560782 9564612 9607447 -1772260 -1772427 -1772428 -1772716 -9237599 -9424441 -9534690 1772793 -4532500 -5110492 -9287097 -1775980 -1777052 -1777075 1777631 -9257908 -1777942 -1778555 1780150 -1781944 -1781946 -5112051 -5112053 -5112060 -5112068 -5112078 -5112080 -1785913 -1785916 -1786913 -1786980 -10860091 -1787106 -1788891 -1789191 -1789193 -1790258 -1790287 -5112798 -1790692 -1790816 -1790832 -1790945 -5112892 -5112900 -5112908 -5112915 -5112917 -5112923 -5112940 -5112944 -5112947 -5112959 -5112961 -5112968 -5112990 5113078 5113084 5113234 -1792831 -5884243 -1795042 -1797111 -1797122 -1797135 -1797137 -1797146 1797178 -1797206 -1797210 -1797218 -1797252 -1797257 1797258 -1797276 -1797285 -1797290 -1797300 -1797339 -1797344 -1797365 1797367 1797373 1797374 -1797375 -1797379 -1797394 -1797409 -1797429 -1797432 -1797433 1797436 -1797440 -1797445 -1797454 -1797464 -1797475 -1797478 1797479 -1797488 -1797507 -1797521 -1797556 4532471 8355390 -8756768 -9022399 -9252524 -9273409 -9289908 -9310510 -9312545 -9340070 -9344456 -9350484 -9367471 -9406020 -9410076 -9455404 -9468297 -9549475 -9554074 -9560404 -9607036 -9618068 -9622725 1798346 -1798393 -1798402 1798408 1798449 -1798504 1798594 -1798802 1798807 4532351 4532357 -8150450 -9238900 -9243875 -9314022 -9353360 -9358521 -9425857 -9499599 -9527919 -9533271 -9545713 -9579730 -9608673 9621113 -9626500 -1799703 1799708 -9249036 -1803163 -5114892 -5114903 -11713970 -5114923 -5114930 -5114934 -5114946 -1803824 1804071 -1804074 -1804512 1804906 -11508076 -1804963 -1804974 -1805540 -1805549 -1806145 -1806170 -1806176 -1806737 -1806740 -9235225 -9278398 -9394138 -9417594 -9541734 7874258 -1807881 -1808195 -1808286 -1808348 -1808450 1808752 -5115701 5115771 -5115777 -1809210 1810099 -1810469 -1811079 -1811122 -5116353 5116416 1813114 -1813248 5117189 -7656811 -1814338 -1814365 -1814630 -1814653 -1814843 -5117399 5117400 -1816881 -1817696 -1817727 1817729 -1817732 -1817797 -8326103 1819145 4532293 4532297 1819268 -8407461 1819873 -5118327 -5925317 -6122092 7657803 -8361973 -8720118 1820372 -1820406 -1820450 -1820714 -1820722 -1820764 -1820791 -1821113 10551407 12253343 5884571 7596232 -11873825 5771982 -8872165 -9288386 -9291075 -9362560 -9480768 -9601788 6097214 4532544 4532516 -4532532 -4532565 12089608 -9400545 -8148822 11962292 12135372 -5115854 5115872 5115874 9530200 5116475 -8038357 -6097254 -9359871 -9379595 -9387353 -9407200 -9432438 -9452497 -9460510 -9498206 -9552466 -9627917 -5114956 -5116698 -1788711 -1788717 -7560807 -5114912 -5114915 -5114921 -1788635 -1781420 4532405 4532408 4532412 -9446902 8000103 4532534 -1796523 -4532508 -8805966 -8905759 -9051758 -9254017 -9324570 -9368974 -9469928 -9488783 -9637664 -1793538 -1813415 1760246 -5113030 5113036 -1821856 -1821940 -6122364 -1775796 -1811814 -1811948 -1812105 -1812207 -1812262 -1812339 1812394 8237987 -4532366 -5884258 -9451320 1820039 -1784959 -6132916 1771772 -1771779 -1780646 -1780668 -1777471 -1777517 -1791735 -1791736 1860979 1860983 -1860987 -1860989 -1860996 -1861030 -1861031 4522916 4522919 4522922 12318291 4522886 -4522890 4522891 -4522896 -1860765 1860768 -1860852 7767114 7961640 1992504 -7472845 1852956 1852978 -1835430 1835432 1835433 -1835436 -1835438 -1835449 -1835451 1835456 1835457 9724183 -1835819 -10610041 1837343 -1837360 1837420 1837429 1837464 1837515 4529064 7958169 -8015612 -1838465 -1838584 1839293 1839296 1840297 1840301 -1840311 1840345 1840346 1840360 -1840371 -1840379 1840380 1840408 -1840441 -1840448 1840485 -1840520 -1840543 -1840553 1840555 1840566 -1840570 1840581 -1840592 1840596 -1840621 -1840656 -4529186 -1841081 -1841084 -1841091 5119808 -1831752 -9473121 -1852901 4529630 -5125075 -5125104 -1869359 1751236 1751290 1751298 -1751299 -1751336 1751368 -1751400 1751457 4535884 -4535904 -1939520 -1860184 -10165831 1860408 4525177 -10308365 -5123339 -9913863 5123394 5769164 5123461 -5123474 -1735408 -1751207 1751216 -1869666 1869803 -1869825 1869852 1869976 -1870017 1870202 -1870249 1870250 -1870267 -1870415 -1870450 -1870650 -1870721 -1870727 -1870733 -1870777 1870988 -1871160 -1871175 -1871212 -1871252 -10246305 -10588642 -10817208 1871407 4531402 -9944922 -1871414 -1871419 -1871457 -1871509 -1871683 1871698 -1871763 -1871783 -1871826 -1871890 -1871923 -1872200 -10336328 -1872456 -1872466 -1872514 10787705 -1872848 1872901 1872904 -1873048 1873079 -1873215 -1873384 -1873411 -1873753 -4530947 -10165457 -10366580 -10410048 -10561589 1873776 1873780 -1873783 4531264 -9971850 -1873890 -5125689 -1874158 -1874160 -1874179 -1874192 1874204 -1874211 -1874248 -1874274 -1874279 -4531145 4531147 -4531158 -1874375 -1874552 -10244305 -1874743 -9782192 -1875008 1875120 8219149 -1875319 -1875327 1875376 -1875407 -1875429 -1875451 4531242 -1875478 -1875483 -1875606 -1875607 1875631 -1875633 -1875682 4531284 1875827 -1875830 -1875865 1875869 -1875914 1875918 1875940 1875952 -1875958 -1876063 1876329 -1876357 1876409 -1876512 -1876542 -1876623 1876854 -1877038 1877310 -1877321 -1877338 1877341 -1877353 -1877365 1877368 4531246 -5126000 -5126013 -5126052 -1877940 1877941 -1877975 -1877988 -1877995 -4531417 -1878158 -1878370 1878470 1878490 -1878586 -1875885 1872315 1748805 -12087490 -1939962 1939964 -1940110 -4525884 11667300 5141493 5141501 -5714558 -5714572 -5714575 -5714600 -10267561 -10286565 -10451589 -10509408 1940510 -1940517 1940575 -1940604 1940639 -1940717 1940744 -1940757 1940768 -4525777 -8956729 -9930604 -10402067 1940807 1940838 -1941310 -1941377 -1941437 -12211069 -1941266 -1941294 -1939833 1939879 -9146244 -1736315 1736377 -1736412 -1736425 -10132596 -1736484 -1736499 1736511 1736528 1736560 1736601 -1736623 -5102628 -5102635 -5102637 -5102642 -5102651 5102666 -5102668 -5102671 -5102678 -1736727 -1736760 1736800 -10355428 -1736803 -1736807 -1736821 -1736836 -1736860 -10638589 1736898 -1736904 -1736905 -1736906 -1736915 -1736918 -1736937 -1736939 -1736945 4530406 4529931 -1737072 -1737231 1737342 -1737368 -1737374 1737403 -1737417 1737491 1737497 -4530608 7350238 -7466487 -1737524 1737526 1737533 1737542 -1737544 -1737551 1737552 1737650 1737753 -1737768 1737775 -1737776 1737847 1737893 -1737904 1737924 -1737964 -1737973 -1737978 4530002 -8186212 -1738050 1738218 1738222 1738245 -10090105 -10370026 1738317 1738322 1738337 -1738373 1738422 -1738429 1738514 -5102693 -5102735 -5102773 -5102782 -5102807 -5102809 8420632 8869900 -9953996 5102931 5102951 1738687 1738700 1738722 1738777 -1738791 1738794 1738839 1738883 -1738888 -1739034 1739042 1739043 8086347 @@ -1025,221 +356,97 @@ 1739337 1739377 1739381 -1739400 5102982 1739451 1739461 1739471 -10596756 -1739605 -1739612 -1739617 -1739629 -1739646 -1739656 -1739668 -10229731 -1739727 1739748 -1739767 -1739770 1739797 1739816 1739819 1739833 -1739867 -1739884 1739919 1739922 -1739924 -1739927 -1739931 -1739954 -1739956 -1739964 -1739973 1739980 -1739983 1739999 -1740003 1740005 -1740037 1740053 -1740060 1740069 1740116 1740120 -1740133 -1740148 -1740155 -1740163 1740174 1740183 1740185 -1740225 -1740246 1740305 -1740370 -1740374 -1740389 1740392 -1740400 7797515 8215326 -1740449 1740482 1740518 1740533 1740567 1740570 -1740623 -1741056 -1741130 1741253 -1741340 1741341 -1741361 1741368 4530151 8345820 -1741400 5103066 5771357 -1741545 1741551 -10709446 -10776625 -10838422 -10869347 -1741593 1741615 1741633 1741634 -1741667 -1741719 1741747 1741752 -1741756 -1741765 -1741812 -1741818 -1741823 -1741824 10807169 11093909 -1742081 -1742089 -1742091 1742106 -1742121 1742142 -1742150 -1742168 -1742178 -1742180 1742185 -1742198 -1742203 -1742214 -1742239 -1742241 -1742260 1742263 -1742268 -1742272 -1742273 -1742287 -1742293 -1742304 -1742335 1742346 1742402 -10000103 -10044107 -10137001 -10194727 -10395101 -11508404 -11899754 -5103394 5103451 5103502 -5103613 5103736 5103948 5771350 7975250 -9849625 -9885192 -1743196 8313553 -10534945 5103998 7661023 -1743453 -1743461 1743475 7877231 -10073044 -10365884 -10388627 -10446580 -10539598 1743532 1743588 1743604 5104056 -5104063 -5104116 6097235 -9051888 -9958147 -9971153 -1743641 1743643 -1743653 -1743657 -1743663 -1743694 -1743710 1743714 4530214 -1743730 1743768 1743775 -1743782 -4529900 4529908 4529915 -1743825 1743828 -1743838 1743855 1743856 1743862 1743867 1743898 -10450442 1744071 1744136 1744180 -5104157 -1744212 1744224 -4530632 1744416 1744498 -1744526 -1744542 -9860684 -9953708 1744588 1744593 1744699 -1744700 1744709 1744714 -1744724 1744728 1744731 1744739 @@ -1247,21 +454,12 @@ 1744748 1744763 1744777 -1744782 1744789 -1744808 1744810 -1744860 -1744896 -1744901 7964262 -1744949 -1744953 -1745022 1745079 10844862 1745131 -10483734 1745558 1745561 1745579 @@ -1272,96 +470,34 @@ 1745636 1745643 1745659 -1745666 -1745669 -1745675 1745676 1745678 1745705 1745724 -1745725 -1745729 1745737 -1745746 1745756 -1745761 1745762 1745771 -1745781 1745787 -1745788 -1745814 1745816 1745830 8162538 8369868 -9991710 1745925 -10593489 1746027 -1746068 -1746174 1746413 1746440 -1746586 1746613 1746644 1746666 1746689 -1746695 -1746754 -1746763 -1746774 1746775 1746831 1746832 1746856 -1746859 -1746876 -1746898 -1746910 -1746927 -1746949 -4302199 -4302202 -1747050 -1747140 1747141 -1747147 -1747150 -1747155 -1747160 -1747161 -1747166 -1747171 -1747188 -1747189 -10046698 -10442122 -12066849 -12107129 -12126779 -1747196 -9896144 -5104442 -10380465 -10445629 -10446898 -10481441 -10547716 -10776919 -12223349 -1747523 -1747738 -1747740 4530138 5104558 -1748109 -1748149 -1748151 -1748152 -1748203 -5104597 6097234 7588222 9242559 @@ -1369,535 +505,197 @@ 5104641 8691947 10580256 -9911298 -10002059 -8734154 -8843927 -10236521 -5103083 -5103100 -5103118 5103121 -5103154 5103176 -5103181 -5103183 5103185 -5103201 5103227 -5771227 -5771229 5771230 5771232 5771236 5771239 5771241 -5771243 5771249 5771256 -5771258 5771259 -9023222 -1743651 -10545267 -1831775 -10310599 -10346267 4525500 4525503 -4525505 4525510 4525530 4525540 4525547 -4525557 4525562 1920851 -1920864 1920889 -1920892 -1920900 -1920996 1921239 -1921240 1921247 -1921248 -1921255 -10556522 -7387466 -1921910 -1922038 -1922041 -1922049 -1922223 -10442031 -1922311 -1922343 -8016522 -1922584 -4535092 -8782891 1922937 -5138298 5138387 5138543 5138561 -5138602 -5714680 -9002107 1923796 -1924050 -1924057 1924097 1924106 12185456 -12188086 -12205404 -12212066 -12222885 -12229400 -12233602 -12250854 -12258984 -12265590 -1924223 -5138681 -1924770 -1925221 -1925233 -4535172 -1925381 -1925429 -1925454 -1925458 -1925498 -1925501 -1925509 -12195040 1925918 -1925922 4300000 -4300012 1925962 -1926001 -1926009 1926054 -9816676 1926324 -1926823 -1926834 1926861 -5139026 -5139029 -5714747 -5714755 -5714788 5882965 1928248 -5139064 5139156 1928945 -1928960 11720834 1929270 1929659 1929697 -5139346 -5139540 -5139700 -5714618 -8356768 1930110 -1930183 -1930481 -1930678 -4535106 -1931116 8643155 -1931179 -1931509 1931553 -1931561 1931779 -1931784 -1931787 -10113190 -10357476 10570752 -1932056 1932411 1932417 -1932428 -4300277 1932960 -5140214 5140244 -5140436 -7634721 -7664111 1933793 1926260 -11874998 -1933095 1933138 -1924494 -1752111 -9776414 -1752285 -1752825 -1753105 -1753106 -1753111 -5105365 -5105508 -5105588 -1753922 -1753929 -5105603 -4522322 -10413588 -5105339 -5105344 -5806127 -5137511 -1919316 -1919320 -1919326 1919327 1919328 -1919700 1919712 1919719 -1919720 -1919939 -1919966 1920237 -1920247 1920259 5137791 -5137802 5137803 1920494 1920496 1920506 5137882 -5137889 -5137890 5137894 5137903 5137908 -5137912 5804895 -1920711 1920712 -1920809 5714914 -5137573 -5137578 5137582 5137595 -5137601 -5137612 5137636 -5137664 5137672 -5137674 -5137677 -5137679 5137689 5137693 -5137694 5137700 5137706 -5137708 5137711 5137714 -5803588 -8203812 1920218 1748890 -1748922 -1748942 1749050 1749070 1749164 -1749287 -1749449 -1749661 1749713 1749744 -1749760 1749846 -1749869 -1749921 -1749929 -1749948 -1749954 1749959 -1750051 -1750076 1750097 -1750143 1750166 1750288 5104772 5104781 5104797 -5104815 -5104829 -5104882 5104891 -5104903 5104940 -5104948 -5104986 -5105031 5105054 -5105057 -5105068 5105088 -5105106 -5105120 -5105124 5105158 5976947 -9942354 -1750924 1751051 5104759 -1751163 1749591 1749608 -1749635 -8741260 1735532 4527339 -4527342 1731826 1731837 1731860 -1731862 -1855241 -1992547 -1963096 1954563 5143380 5143453 5143477 -1954930 -1954933 1955497 -1955498 5143651 -5143657 5143675 5143697 -5143703 1956440 -1956462 -1956505 -1956510 1956524 -1956597 1956599 -1956626 1956710 -1956716 -1956904 -4525068 1957266 1957300 -1957441 1957570 -1957572 -1957583 -1957632 -1957706 -1957718 -1957746 -1957791 1957816 1957845 -1957852 1957854 -1957870 4524421 4524426 -8775810 -5143947 -5143952 -1958024 5143964 -1958121 -1958323 -1958528 -1959383 -1959395 -1959461 -1959467 -1959682 1959735 -1959858 -1959876 -1959890 -1959898 1959914 -1959917 1959919 -1959934 -9320916 -1960023 1960617 -1960632 -1960854 -1960951 -1961013 -1961037 1961040 -1961068 1961190 -4302240 -9468667 -1961361 -1961718 -1962076 -9592714 1962204 1962265 -1962268 -5144227 -5144318 -1962432 1962434 -1962479 -1962490 1962516 9812211 -1962636 -1962722 -1962727 -9264326 1962860 -1962895 -1962900 -1962990 1963011 -4302252 -1963168 -1963201 -1963212 -12214993 1963306 1963446 1963463 -1963709 -1963710 -1963848 -1963854 -1963874 -1963892 -1964041 1964191 1964195 -1964437 -1964471 -1964585 -1964637 1964653 1964657 8361848 -1964715 5144424 5144426 -1965058 1965078 -5880367 1965166 -1965197 -1965208 -1965586 -1965697 1965763 1965777 -1965794 1965795 -1965797 -1965805 1965807 1965810 1965823 1965825 -1965831 -1965838 1965841 -1965861 1965865 1965913 1965996 1966017 -5144457 5144534 -1967011 5144543 -1967212 -1967240 1967245 -9277294 -9492499 -1967265 1967273 1967597 -1967803 1967815 1967873 -1968205 7681733 -5144564 -5144575 -8793278 -5144583 -5144588 -5144593 -5144596 1968867 -1968942 -11598540 -1968990 1969291 1969954 -1969961 -1970119 1970213 -1970227 -1970243 -1970284 -5144677 5144721 -5144729 -5144782 -5144787 -5144805 -5144900 -5144935 -5144953 5145009 5145136 -5145186 5145260 -5145269 5145409 -5145521 -5145522 -5145547 -5145729 -7700568 -9627567 -1971835 -1971858 1971888 -1971995 -1971998 -1971999 1972120 1972185 1972187 @@ -1905,61 +703,32 @@ 1972250 1972278 1972342 -1972374 1972377 -5145870 5145965 -5145998 -5146030 -5146082 7541913 7960566 1972434 1972447 1972449 1972454 -1973146 -1973147 -1973164 1973414 1973487 5146496 5146559 -5146599 -5146601 -5146611 5146659 5146677 -5146762 -5146832 -5146833 -5146837 -5146862 5146883 5146946 5146961 5147039 5147062 -5147150 -5147171 -5147193 5147208 -5147211 -5147232 5147245 -5147354 -5147441 -5147478 -5147516 -1975198 5147608 5147638 -1975341 1975546 1975553 1975571 -1975607 -9477531 1975733 1975741 8329661 @@ -1967,39 +736,19 @@ 5715277 5715278 8160782 -1975892 1975897 1975903 1976163 -1976248 -1976333 5147681 5147713 -6097233 7973517 1976993 1977003 1977007 -1977054 1977068 -4523725 5147827 5147834 -5147838 -5147858 -5147868 -5147871 -5147883 -5147894 -5147898 -5147899 -5147909 -8951618 -5148184 5769028 -5148247 -1977962 -1977967 1978056 1978065 1978114 @@ -2009,192 +758,87 @@ 4524636 4524638 4524890 -1978671 1978751 1978776 1978821 -5806132 1978977 5148286 -1979255 -1979289 1979308 -1979344 -1979358 -1979380 -1979427 1979430 1979473 -1979475 -1979501 -1979726 1979781 -1980025 -1980247 -1980250 -5148379 5148436 5148462 5148486 5148487 -1980505 -1980509 -1980521 8421569 -1981144 -1981202 -1981222 -1981258 -1981277 -1981696 -10247981 -5148520 -1981998 1982406 -1982447 1982500 -1982525 1982529 -1982533 1982541 1982542 1982592 -1982613 1982636 1982671 1982746 1982770 -1982780 1982791 -1982824 1982867 1982885 -1982951 1983000 1983052 -1983111 1983170 1983260 -1983263 1983288 1983441 1983442 1983525 -1983548 1983558 1983648 1983705 1983755 -1983799 1983896 1983922 1983997 1983999 -1984033 -1984117 7752082 7993353 8015895 8026858 8262357 -8394261 -9577547 -5148531 -5148544 -5148576 -9307713 -9370312 -5148719 -5148743 -5148753 -5148766 -5148850 -1984654 -9382415 1984734 1984942 1984949 -1984954 -1985405 -1985421 -1985423 -9332369 -1985487 1985522 -5149237 -1985945 -1986004 -1986020 -1986040 1986052 1986056 -1986091 -1986113 1986157 1986166 1986171 1986191 -1986192 1986220 1986367 1986452 -1986497 1986522 1986575 1986623 -1986807 5149307 5149315 -1986998 -4302274 -1987145 -1987146 5768880 -1987301 -1987527 -9538525 -1987633 -1987737 1987744 -4524221 -4524223 -11650277 -1988495 1988593 1988684 8388883 5149414 5149438 1988881 -1989083 -1989084 1989428 -1989903 1990066 1990150 -1990155 -1990198 1990551 -1990582 -1991012 -1991179 -1991280 -1991281 -1991289 -1991295 -1991298 -1991299 -1991303 -5149630 -5149631 1991371 -1991429 -1991783 5149836 -5149843 1992066 -12010643 -5880512 5880533 5880545 5880550 @@ -2204,661 +848,189 @@ 7657419 8237343 8632989 -8941993 -9110918 -9243319 -9251088 9261296 9272461 -9311081 -9330467 -9366016 -9368398 -9392076 -9419734 -9428900 -9438677 -9454444 -9456004 -9474405 -9489399 -9502724 -9532702 -9574939 -9632824 -5769062 5769068 5769072 -7429212 4524740 -5144386 -5144407 -9533293 -7990739 -4302221 -4302230 4523556 4523560 4523564 4524054 -4524998 4524376 4524822 -4523522 -9281181 -9352978 -9403481 -9436173 -9453490 -9516038 -9516680 -9523379 -9545331 4524070 4524072 4524951 -4524955 4525078 -9220953 -9249651 -9288979 -9307098 -9423863 -9273963 -9274899 -9321500 -6133540 5144190 -5144196 -5715276 5146412 5715275 -1978197 5149499 7769543 4523880 4523883 4523885 -5149659 5149665 5149704 -5149713 5149746 -5149753 -5149768 -5149780 -5149782 5149819 -5149820 -7443518 -5146305 -5146326 5146342 5146379 -5146389 1972942 4302268 -4524393 -9291092 -11654707 -11834445 -11670842 -12258146 -1942697 5141677 -1942945 -1942947 -1942964 -1942967 -1942994 -1943397 -8178854 -8277078 -1943571 -12233808 -1943953 1943954 -1943960 -1943964 -1943990 8133678 -8273661 -1945066 -1945569 -5142061 -1946495 -1946500 -1946610 -1946628 -7346354 -1946865 7389824 -1946999 1947282 1947306 -1947333 1947335 -1947740 -1947915 -1948826 -1949697 -1949784 1949794 -1949850 1949852 -1949877 -1949929 1950006 -5142372 -5142394 -5142424 -5142499 -5142599 8109173 -1950047 -1950396 -1951217 -5715127 -1951340 5977179 -5977207 -5977208 -5977214 -5977220 -5977235 5977250 -5977251 -5977257 -5977260 -5977261 -5977262 -8270406 -5142254 -5142269 -5142273 -5142300 -5142319 7633472 -1948774 -1948809 -5142006 -5142032 -5142042 -1869467 1869478 1869489 1869512 9359597 -1735844 9400895 10963226 10982815 5109821 -9445489 -5108416 -5108417 -5108419 1758878 -1758879 -1758898 -1758906 -1758916 -1759037 -1759040 -1759041 1759055 1759069 -1759079 1759083 -1759092 -1759097 4533952 -7972792 -9447614 -1759153 -1759338 1759407 -1759553 -1759563 -1759573 -1759585 -1759597 -1759605 -1759610 -1759611 1759620 -1759621 -1759624 -1759631 -1759632 -1759633 -1759634 1759661 1759667 1759668 -1759671 -1759677 -1759678 1759686 -1759688 -1759691 -1759694 -1759719 -9306367 1760104 -1760261 -1760454 -1760455 1760593 -1760682 1794361 4534225 8708745 1760887 -1760891 -1760893 -4533255 -5108957 1761041 -1761392 1761438 -1761498 -1761798 -1761892 -9418549 -1762244 1762608 -1762609 1762615 -1762680 -5109498 5109506 5109523 -5109535 -5109554 -5109566 -5109596 5109599 -5109614 -5109661 -5109670 5109722 1763610 -1764238 -1764716 -1764929 -1765010 1765011 -1765017 -1765038 1765044 4534245 4534257 -1765172 -5109845 -5109852 -5109855 -5109881 -8352161 -11487320 1765767 -1765769 -1765779 -1765798 -1765954 -1765962 1766128 -1766130 1766131 1766137 -1766193 -1766205 1766210 -1766274 -1766287 -1766392 1766410 -1766489 -1766509 -1766510 -4301071 -4301081 7895336 -9362190 1766646 1766650 1766741 -1766773 -1766917 -1766919 -1766921 -1767052 -1767140 -1767142 -1767335 -1767336 -1767337 -1767347 -7598945 -9062262 -1767484 -9471709 -1767511 1767597 -1767602 -1767608 1767625 -1767628 -1767655 -5772169 -5772172 5772176 -5772178 5772196 5772199 -5772202 5772205 -5772206 5772210 -7388922 -8045644 -9381852 1768117 -1768132 -1768150 -1768172 5110200 1768341 -5110213 1768702 1768749 1768771 1768815 -1768819 -8150836 1769057 1769505 -1769519 -1769543 1769566 -1769592 -9373686 1769947 1769958 1770132 -1770144 1770150 -9148810 -1770307 -1770461 1770477 -1770530 -1770573 4532696 -8393221 1771385 1771391 -1771441 7725644 1771509 1771531 -1771872 1771997 1772013 -9244973 -9254157 -9476708 -9562175 -9616658 -9633562 -1772043 1772169 1772179 -5110333 -5110341 -5110356 -9539128 -5772129 -1772422 -1772462 -9605631 1772940 -1772954 1772956 1772977 -1773002 -1773069 -1773081 1773163 -1773248 -1773309 -1773313 -1773315 1773328 -1773484 -1773577 -1773662 -1773677 -1773728 -4301148 -9369576 -1773742 -1773743 -1773744 -1773746 -9367674 -9399288 -9593475 -9283948 -1774092 -1774095 -9322646 -1774253 -1774254 -1774262 -9243117 -9409309 -9550265 -1774272 1774314 -1774347 -6115953 -1775046 -1775055 -1775089 -1775112 -1775118 -4534046 4534052 4534057 -1775290 -1775291 -1775508 -5110593 5772269 -1775672 -1775680 -1775791 -1775866 -1775891 4534719 1776067 -1776167 -5110670 1776330 1776371 -5110723 -5110728 -5110752 -5110754 5110756 5772446 -1776397 -1776406 -1776415 1776459 1776462 -1776473 -1776476 -1776618 1776619 1776862 -1776871 -1776880 4534463 -1777253 -1777261 -5110818 -5110863 5110871 5110885 -5715009 -5715010 -5715013 -1777974 -1777976 -1777980 -1777982 -1777994 -1777996 -1778000 -1778006 -1778007 -1778013 -1778015 -1778024 -1778031 -1778033 -1778034 -1778037 -1778045 -1778049 -9456735 -1778074 4534299 -1778127 -1778143 1778517 1778596 -1778688 -5111139 -5111343 -5111360 -5111372 -5111397 -5111521 -5111568 5111574 -7593392 8253467 -9175037 -9596498 -1779430 1779435 -1779633 1779641 -1779643 1779690 -1779709 -1779713 1779959 -1780213 -1780215 -1780309 -1780313 -1780344 1780378 -1780437 -8802610 -1780852 -1781008 -4533325 -5111956 -1781692 1781694 -1781819 -1782319 -1782523 -1782542 1782560 -1782579 -1782585 -1782595 1782615 1782622 1782627 -10441062 1782672 -1782682 -1782689 -1782700 -1782706 -1782707 -1782708 -1782709 1782726 1782727 -1782743 -1782744 -1782745 -1782747 1782763 -1782776 1782777 -1782803 -1782808 -1782809 -1782819 -1782822 -1782826 -1782833 -1782837 -1782840 1782841 -1782853 -1782870 -1782871 -1782872 -1782878 -1782921 1782927 -1782928 1782948 -1782961 -1782972 1782978 -1782993 -1783002 -1783008 -1783013 -1783016 1783037 1783043 1783045 -1783055 -1783059 -4301044 -9581976 -1783371 -1783372 -1783373 -1783378 -5112153 5112155 -5112160 5112191 -5112199 -5112229 -5112233 5112283 5112291 -5112302 5112336 5112345 5112377 5714951 5714973 -5714994 5715004 5772349 5772351 @@ -2866,223 +1038,80 @@ 8043500 1783855 1783861 -1783940 -1783971 -1784359 -1784688 -5112414 1784826 -1784853 4534290 -1784893 -1785168 -1785185 -1785280 1785286 4532886 -4532888 4532890 -9633615 -1785331 -1785399 -1785403 -1785728 -1785730 -1785732 -1785733 -9250744 -9329292 -1785875 -1785883 -1785886 -1785887 1785888 1785895 1785951 1785955 1785964 -1785982 1785992 -1785997 1786007 -1786017 8292872 -1786035 1786308 -1786360 -1786455 -1786514 -1786515 -1786565 -1786566 -1786567 -1786619 1786902 -1786918 1786936 -1787064 1787112 1787213 -1787267 -1787381 -9305798 -1787400 -1787417 -1787438 1787504 1787506 1787590 1787610 -1787631 1787697 -1787751 1787770 -1787825 1787841 1787859 -4534086 -1788034 -1788037 -1788063 -1788070 -1788139 -9547140 1788425 -9282469 -1788485 1788522 -1788673 -1788679 -1788680 -1788681 -1788720 -4301312 -9216200 4534011 1788917 1788929 -1789071 -1789076 1789086 -1789155 -9612009 1789267 -4533924 -9248329 1789481 1789505 1789553 1789580 4534166 -4534198 -1789694 1789695 -1789730 1789745 1789753 -1789755 -1789783 -1789785 -1789840 -1789849 10068024 10113008 10312073 1789982 1790002 -1790013 -1790062 1790072 1790084 -1790151 1790160 -4533115 -8047343 -9410414 -1790343 11693171 1790359 1790361 -1790362 -1790364 -1790369 -1790371 9174377 1790625 -1790737 -9297059 -1791384 1791422 -1791590 -1791593 -1791680 1791784 -1792061 -1792072 -1792073 -1792091 -1792095 -1792096 -1792097 -1792099 -9426771 -9622117 1792292 -1792318 -1792335 1792377 1792379 1792383 -9241669 -9338769 -9530319 -9548726 1792411 1792414 1792418 1792426 -1792430 -1792431 1792442 1792449 -1792456 -1792465 1792475 -1792478 -1792485 -1792497 -1792517 -1792817 -9233420 -9539292 -5113370 -1792996 -1793189 -1793192 -1793368 1793369 -1793419 -1793453 -1793455 -4301052 -4301055 -7918000 -1793589 -1793699 1793877 1793983 1793986 1794102 -1794510 1794590 -4301238 1795215 -1795282 -7869346 -7922810 -1795788 -1795802 -1795812 1795854 1795871 1795930 @@ -3090,414 +1119,136 @@ 1795983 1796007 1796032 -1796035 -1796040 -1796100 1796117 -1796139 1796145 -1796154 1796169 -1796180 1796181 1796188 4534485 -4534486 7438067 -8007222 -9377268 -9541908 1796217 7780930 -8405656 -9327259 -9589234 -1796312 -1796423 1796463 8105817 1796678 -1796686 -1796958 -1797587 -1797592 -1797593 -1797601 -4301242 -4301249 -4301255 4533431 4533433 4533442 4533444 4533446 -1798288 -1798371 1798372 -1798375 -11992983 1798916 1798931 1798971 1798974 1798984 -1799132 1799135 -5113985 -5114011 -5114039 -5114081 -5114083 -5114096 -5114107 -5114128 -5114151 -9500553 1799701 -9368026 1799799 -1799870 -1799880 -1799884 -1799901 -1799925 -1799938 -1799944 -1799956 1799957 -1799958 -1799967 -1799977 -1800004 -1800017 -1800024 -1800028 1800032 -9496311 -6097260 -8729319 -7981386 8742426 -4301068 4534389 4534207 10638451 -4301282 -4301283 -4301306 -4301307 -8751100 -9395261 -4532811 -4534663 -8998296 -9247947 -9255102 -9288185 -9291297 -9362785 -9390293 -9474256 -9481002 -9485070 -9530271 -9530928 -9544558 -9577379 -9590907 -9595155 -9634575 4533273 4534540 -11922580 8890502 9135821 4534038 4533202 -4534398 -9406822 -9432810 -6544687 4534538 -4533123 -4533125 4533128 4533136 4533661 4533671 4534408 -4534458 4534533 -9415435 -9424082 -9610447 -9486411 -7717385 -8424964 -9511749 -5883985 -9875111 -9342344 -8021109 11478679 -9478331 -5108640 -5110377 5110644 1779334 -5114189 -5114192 5114198 -11452421 -11466090 -11590674 -11749278 -1763072 -5109299 -5772063 -9038042 -9334639 -9506719 -5112130 -5112131 -4534681 -4534683 -4534685 -4534686 -9244066 -9551316 -1792564 -8108800 -1800140 -1771634 -1771650 1771678 1771698 8581601 9623131 -1770772 -1770828 -1770869 1770880 -1770918 -1771019 -1771040 -1771055 -1771067 1771169 -1771204 1771214 -1771245 -4533714 7940536 -5113847 -5113853 -5772309 -5108665 -5108670 -5108761 -9374637 -1768199 -1768201 -4534525 -1773904 4533347 4533360 -9490756 -4532203 -4532239 -4532253 -4532260 -8103163 -11501104 -10714961 -10867462 -1822346 -9253819 -9517291 -9561820 -11562243 1822587 1822610 1822613 -5118459 -5118474 -5118509 5118524 -1822667 -9778438 -1822784 1822787 -1822788 1822796 -1822805 1822819 1822830 -1822848 -1823294 -1823726 7875265 -1824390 -1824442 -1824571 1825064 1825077 1825083 4534909 4534914 -9426054 1825156 1825176 -1825428 -1825430 -5118892 -7937573 -8397564 1825539 -5118934 -5118944 -5118949 -7345777 1825967 1825971 1825983 1826022 1826033 -1826048 -1826058 -1826084 -1826156 -1826163 -1826164 -1826169 -1826173 -1826175 5118996 -1826222 -5119011 -5119013 -5119016 -5119026 -10115073 -9807789 -1827103 -1827112 -1827113 1827125 -1827132 -1827133 -1827161 -5119143 -4534869 -9883140 5119245 -1827645 1828162 -4534872 -6201790 -9255512 -1893137 1894102 1894164 1894268 -1894293 1894298 5882039 -1894342 7712938 1894714 4535614 4535630 -4535632 4535636 8049830 1894840 1894896 4535827 -1895138 -4535809 4535817 -5128232 5128250 5128266 5128323 5128326 -5128353 5128357 -5128363 -5128380 9804158 -8763986 -1895867 1895875 1896841 -1897664 1898286 4299368 -4299370 -5129293 -5714369 -7346344 -1898402 -1898416 -1898431 -1898521 1898544 5129374 5129378 5129405 -5129417 -5129430 5129432 -5129451 -5714356 -5714361 -1901832 -1901850 -5130514 1902533 -1902543 1902749 -8140883 -8189761 -4535689 -1905162 -1905172 1905187 -1905267 -1905281 -1905297 1905299 -1905301 -1905317 6221746 1905383 1905396 -1906552 -8208583 -1907498 -1907580 -1907625 -1908011 1908044 -1908052 1909398 -1909800 -1909838 -1911093 1911112 1911168 -1911246 1911278 -1911298 1911461 -1911503 -7728366 -1911633 -4535592 7809779 8078362 -5133693 1912325 1912372 1912428 @@ -3507,16 +1258,8 @@ 4299576 4299597 4299599 -5133864 -5133990 -5772890 7428726 8810143 -4535581 -5134098 -8312017 -1913175 -1913178 1913328 5134469 5134517 @@ -3524,114 +1267,41 @@ 5134661 5134667 5134682 -5134687 5134693 5134759 -5134810 -5135191 5135355 5714507 7738295 -8233062 8314088 -9915028 9967126 -1914421 -1914439 -1914458 -1914464 -1914484 -4299191 -8918036 -1915469 -1915470 -1915492 -1916410 -1916509 -7854318 -1918395 -1918411 -4299804 -1918627 -1918669 -1918733 -1918843 -1918854 -1918868 8176911 -1918964 -1918986 1918988 -4535618 -4535510 5130587 5130682 -5130696 -7762841 5131096 -5131142 -5131293 -5131585 -5131593 5132084 5132183 -5132191 -5132238 -5132246 -5132398 -5132479 -5132505 -5714333 -8001799 -5133088 -5135513 5131910 8138711 -8549720 1902143 -1902175 1902182 -1899349 1899433 -1899818 -5129913 7768674 -7934873 -8168644 -8393082 -5133009 -1914701 -1951448 -1951557 5142870 1951649 -1951657 -1951660 -1951784 1952014 5142903 -1952032 -1952043 -1952062 -1952093 -1952130 1952229 5143048 -1952449 1952532 -1952730 -5143107 5143129 5143147 1952806 -1952812 -1951713 1832819 1832853 1832915 1832927 1832936 -1833096 1833159 5880257 5880258 @@ -3639,342 +1309,113 @@ 6097225 6097228 1853064 -4529248 -10597291 -5102424 -1941864 -5120465 -5120577 5120668 5120675 -5120767 -5121040 5121046 5121177 5121517 5121613 5121737 8273859 -1842097 -1842196 5120396 -1842446 -1842485 -1842542 -4301036 -1842690 -1842695 -5120453 -10327658 -8292351 5101394 -1730978 -1731263 -10458960 -10469497 4525641 1731598 -1731811 -1731812 1872368 -1878705 -1878751 -1878753 1878782 -1878789 -1878810 1878862 1878879 1878895 -1878904 -1878907 -1878937 1878939 -1878958 -4531506 -4531517 -1879227 -1879253 -1879274 -1879408 -1879427 1879452 5126212 -5126217 -10177508 1879534 1879630 1879703 1879731 -1879735 -1879765 -5126229 -5126352 -5126365 -5126404 -5126517 10915497 -10922201 1879939 1879970 -1880013 -1880019 -1880025 1880040 -1880044 1880062 1880064 -1880078 -1880083 1880088 1880094 1880104 -1880123 -1880132 1880138 1880139 1880140 1880143 -1880156 -1880381 -4302319 -1880907 -1880931 -1881094 -1881151 -1881166 -9819403 4531687 -5126697 -5126718 -5126726 1881603 4531713 1881834 4531975 -1881955 -1882158 1882195 1882210 1882437 1882459 -1882557 1882729 -5126785 5126834 -5126892 -5126958 -5126963 8325294 -1882812 -11891668 -1882927 -1882941 -1882958 -1882959 -1882960 -1882977 -1882979 -8725248 1883161 -1883168 -1883386 -5127107 -5127116 -5127118 -5127130 -1883829 -1883897 -1883993 4531690 1884212 -1884213 4531708 -1884428 -1884435 -1884439 -1884464 1884465 -1884685 -1884703 -1884790 -4532122 -1884923 1884970 -1884997 -1885158 -1885202 -1885229 -5127170 -1885937 -1886084 -1886251 -1886262 -5127203 -1886292 -1886320 8223165 -1886378 -1886400 -1886419 -1886490 -1886579 -1886583 1886587 -1886648 -1886650 -10510138 -7562564 -1886929 -5127222 -1886951 -1887004 -1887031 -1887285 1887290 -5127325 -5127337 -5127350 -5127357 1887701 -4531968 -1888306 -1888338 -1888435 -10922411 -1888484 -5127380 -1888579 -1888619 -1888733 1888743 1888759 1888823 -1888826 -12106417 -1889287 -1889536 -1889939 1889942 5127521 1890187 -11044778 -1890374 -1890404 -1890491 -1890508 -1890512 -1890520 -1890522 1890534 -1890560 1890576 -1890629 -1890654 -1890656 1890679 1890699 -1890701 -1890730 -1890737 1890772 -1890783 -1890800 1890802 -1890876 -1890898 -1890957 7431428 -1891048 1891059 1891167 -1891190 -1891326 -1891386 1891426 -1891438 -1891453 1891473 -1891484 -1891488 1891493 1891494 4532022 -8411753 -10310835 -1892193 -1892242 -1892488 9674732 1884255 1884273 -1884280 -1884312 -1884326 1884332 1884337 1884370 1884403 -10179389 -10330376 -10482025 -10655790 5884851 -9181627 -9935837 -8425580 -6133232 -10106345 -10432184 -10444331 5126675 -5126680 7446048 8532380 8537359 8823068 -8856895 8858121 9100030 -9101339 -9137965 -9530406 -1886374 -1889717 -1889765 -1889833 -1889838 -1889850 -1889870 -5127656 -5127688 1887108 -1887119 -1887122 -1887125 -1887173 1887177 1887178 4532050 -4532057 4532088 4532095 4532097 -6121184 -4532160 -5771880 -1846103 1846107 1846111 -1846112 1846133 1846141 -1846149 -1846159 -1846190 1846210 1846219 -1846229 1846236 4528818 1830879 @@ -3987,347 +1428,121 @@ 1831168 4525443 4525448 -9958241 -1853312 -5122293 -1853587 -4526048 -1854202 -1854347 5122439 -1854792 -1854824 1854849 -12239445 -4526094 4526050 1858637 -1858660 -1858698 -1858706 -9689122 1858775 1858778 1858873 1859046 1859100 -1859161 1859177 1859285 1859287 1859305 -9760511 1859471 1859480 1859488 -9686431 -9746673 -9748079 -1859929 -1859952 -9752950 -1860063 -1860076 4536472 4536483 7642240 8200050 -1973466 1973467 5123221 5123042 -5123046 -1865341 -1865345 -1865348 -1865668 -1865671 -1865839 -1865842 -1865853 -1865856 -1865862 -1866085 -1866336 -1866341 -1866568 -1866570 -1867029 -1867032 5124911 1867820 -1867928 -9983244 -1736271 7734292 -1841782 1841813 -1841946 -1861510 -1861604 1861644 -5123636 -1861665 -1861673 -1861705 -1861759 1861797 -1861823 -1861834 -1861836 -1861842 1861851 1861862 -11529603 -1861887 -1862072 -5123676 -1862401 -11907754 -1862517 -1862569 1862572 -1862578 1862580 1862624 -1862701 -1862719 -1862765 -1862774 1862837 -1862841 -1862917 -1863025 -1863075 -1863080 -1863088 -5123775 5123922 -1863407 -4301348 5124007 5124029 -5124049 -5124050 -1863829 -1863848 -1864156 -1864161 1864165 -1864352 1864358 1864377 -5124119 5124121 -5124136 5124143 -5124147 -5124199 -5124200 -5124208 -5124219 -5124232 5124233 1864652 -5124450 -1864793 -5885399 -5123999 -5124000 -9513830 -1863978 -1864008 -1864090 -1992573 1993419 -5150092 -1939432 4525189 -9053308 -9424853 -5143249 -1860108 -1830031 -5119482 5119513 1830361 -1830372 1830374 1830380 1830407 -1830408 -1830410 -1830442 1830457 -4525369 -1830498 4525420 -4525425 7976145 1830537 -1830584 -1830632 1830802 4525364 1754332 -5105656 -5106115 -5106160 -5107128 5107219 5107644 -5107829 -7410701 -7674502 7778368 -7903078 7955974 -8201251 8426357 -1757839 -8964772 4522753 -1830681 -10604375 -1953124 1939658 1939677 1939680 1939688 7646066 -1829287 1829322 1829363 -1854920 -5122647 -5122668 -5122702 -1855358 1856005 -1856289 1856384 -1856595 1856620 1856658 1856668 1856686 1856691 -1856701 -1856720 -1856730 1856768 -1856772 1856867 1857626 9790007 -1857809 -1857828 -1857829 1857856 1857863 -1857878 -1857918 1857924 -1857938 -1857945 -1857973 1857978 1858074 1858100 1858113 1858163 -5122876 -1858321 -1937642 -1937691 1937739 -1937751 -1937803 -1937816 -1937819 -1937846 -1937974 -1938016 -1938081 -1938104 -1938168 -4693382 8225376 -1937490 -1937556 -1938214 -1938233 -1938300 -1938446 1938520 -1938612 1938810 1938955 1938975 1939056 -5141342 -11561676 -12229940 -12247359 12253844 -12262562 -5141262 -1856368 -1856394 -1856555 1858531 1838691 1838905 1838911 4528692 -4528694 -1833497 -1833500 -1833626 -8546322 -1835156 -1835393 1835396 -1835500 -10304283 -1836899 1837172 -1837900 -1838969 -9895629 -1839770 1839893 -1841159 5770922 5770942 -4529032 -10511237 -5119893 -5119895 -4534796 -4534798 -1800963 -5114431 -5114435 -5114436 -5114439 1801051 1801896 4534779 4534782 -9313634 -9454291 -9574801 -1802113 1802280 -1803065 1803073 4534762 -4534767 -9426252 -5114295 5114311 -5114317 -5114327 -5114340 8244266 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg index b87ab0e..95550c6 100644 --- a/docs/assets/preset-overlap.svg +++ b/docs/assets/preset-overlap.svg @@ -38,7 +38,7 @@ z +iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAkjElEQVR4nO3a3cut+X3X8XWtde977z2TzGQeUpOYSkynNUrFasSYA5/IhE7TogS1SEM9EckDaqGe9MAj8cATBbVME4onhoGCQjwwJoIFMQfVg0EKAbVpp5aEzkwyZvbszH6877Uu/4EeDF9w3lxzv15/wYeL3/qta71ZyyfPf27dbdF+qReMLIdDPWFsPR7rCSPrgwf1hJllm2d8t27zStntt/vZ3J9fqyeMLDdv1hNG1nv36gkjy6OP1BNmThu9U3a73e7srF4wsrxrm2fl8r2P1RNGDt/6Tj1hbLlxvZ4wcvzDT9cTRvb3LuoJI6f//Tv1hJH9I9u8C3e73e4//q//Wk8Y2dcDAAAAgKtNnAAAAABS4gQAAACQEicAAACAlDgBAAAApMQJAAAAICVOAAAAAClxAgAAAEiJEwAAAEBKnAAAAABS4gQAAACQEicAAACAlDgBAAAApMQJAAAAICVOAAAAAClxAgAAAEiJEwAAAEBKnAAAAABS4gQAAACQEicAAACAlDgBAAAApMQJAAAAICVOAAAAAClxAgAAAEiJEwAAAEBKnAAAAABS4gQAAACQEicAAACAlDgBAAAApMQJAAAAICVOAAAAAClxAgAAAEiJEwAAAEBKnAAAAABS4gQAAACQEicAAACAlDgBAAAApMQJAAAAICVOAAAAAClxAgAAAEiJEwAAAEBKnAAAAABS4gQAAACQEicAAACAlDgBAAAApM7W47HeMHN5qheMrOtaT5hblnrByHJ2Vk+YWbRD3prN3iv37tULRjb7vO/crReMnB5e1BOunOX11+sJM7/3nXrByGm/zfer3W632715p14wcnzm/fWEkf3vvVpPGDm89+l6wshXX/x6PWHsUx/5i/WEEb9+AAAAgJQ4AQAAAKTECQAAACAlTgAAAAApcQIAAABIiRMAAABASpwAAAAAUuIEAAAAkBInAAAAgJQ4AQAAAKTECQAAACAlTgAAAAApcQIAAABIiRMAAABASpwAAAAAUuIEAAAAkBInAAAAgJQ4AQAAAKTECQAAACAlTgAAAAApcQIAAABIiRMAAABASpwAAAAAUuIEAAAAkBInAAAAgJQ4AQAAAKTECQAAACAlTgAAAAApcQIAAABIiRMAAABASpwAAAAAUuI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" id="imagee242fe8571" transform="scale(1 -1) translate(0 -765.36)" x="127.543052" y="-179.086835" width="765.36" height="765.36"/> @@ -774,7 +774,7 @@ z - + @@ -784,11 +784,11 @@ z - + - - - + + + @@ -1717,7 +1717,7 @@ L -3.5 0 - + @@ -1727,11 +1727,11 @@ L -3.5 0 - + - - - + + + @@ -2362,10 +2362,9 @@ L 892.859556 179.130332 - - - - + + + @@ -2522,9 +2521,10 @@ z - - - + + + + @@ -2677,9 +2677,10 @@ z - - - + + + + @@ -2831,9 +2832,10 @@ z - - - + + + + @@ -2955,28 +2957,30 @@ z - - - - + + + - - - + + + + - - - + + + + - - - + + + + @@ -2988,17 +2992,17 @@ z - + - + - - - - + + + + @@ -3009,16 +3013,16 @@ z - + - + - + - + @@ -3028,9 +3032,9 @@ z - + - + @@ -3041,16 +3045,16 @@ z - + - - + + - + - + @@ -3061,10 +3065,10 @@ z - + - + @@ -3074,9 +3078,10 @@ z - - - + + + + @@ -3094,10 +3099,9 @@ z - - - - + + + @@ -3135,10 +3139,10 @@ z - + - + @@ -3288,10 +3292,10 @@ z - - - - + + + + @@ -3593,10 +3597,10 @@ z - + - + @@ -3744,9 +3748,9 @@ z - + - + @@ -4038,9 +4042,9 @@ z - + - + @@ -4336,10 +4340,10 @@ z - + - - + + @@ -4486,9 +4490,9 @@ z - + - + @@ -4790,10 +4794,10 @@ z - + - + @@ -5088,9 +5092,10 @@ z - - - + + + + @@ -5545,10 +5550,9 @@ z - - - - + + + @@ -5929,7 +5933,7 @@ z +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" id="image697245636a" transform="scale(1 -1) translate(0 -765.36)" x="1106.262812" y="-179.086835" width="765.36" height="765.36"/> @@ -6067,7 +6071,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl90lEQVR4nO3a++9teX3X8b2/332uczgD - + @@ -6077,11 +6081,11 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl90lEQVR4nO3a++9teX3X8b2/332uczgD - + - - - + + + @@ -6748,7 +6752,7 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl90lEQVR4nO3a++9teX3X8b2/332uczgD - + @@ -6758,11 +6762,11 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl90lEQVR4nO3a++9teX3X8b2/332uczgD - + - - - + + + @@ -7393,10 +7397,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -7540,10 +7543,9 @@ L 1871.579316 179.130332 - - + + - @@ -7690,9 +7692,10 @@ L 1871.579316 179.130332 - - - + + + + @@ -7836,9 +7839,10 @@ L 1871.579316 179.130332 - - - + + + + @@ -7955,28 +7959,30 @@ L 1871.579316 179.130332 - - - - + + + + - + - + - - - + + + + - - - + + + + @@ -7988,37 +7994,37 @@ L 1871.579316 179.130332 - - - - + + + + - - - - + + + + - - - - + + + + - + - + - + - + @@ -8041,16 +8047,16 @@ L 1871.579316 179.130332 - - - - + + + + - + - + @@ -8061,16 +8067,16 @@ L 1871.579316 179.130332 - - - - + + + + - + - + @@ -8080,10 +8086,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -8094,10 +8099,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -8136,10 +8140,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8289,10 +8293,10 @@ L 1871.579316 179.130332 - + - - + + @@ -8442,10 +8446,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8592,10 +8596,10 @@ L 1871.579316 179.130332 - - - - + + + + @@ -8745,10 +8749,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -8901,10 +8904,10 @@ L 1871.579316 179.130332 - + - - + + @@ -9058,10 +9061,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -9215,9 +9217,9 @@ L 1871.579316 179.130332 - + - + @@ -9372,10 +9374,10 @@ L 1871.579316 179.130332 - + - - + + @@ -9524,9 +9526,9 @@ L 1871.579316 179.130332 - + - + @@ -9677,9 +9679,10 @@ L 1871.579316 179.130332 - - - + + + + @@ -9827,10 +9830,10 @@ L 1871.579316 179.130332 - + - - + + @@ -9980,10 +9983,10 @@ L 1871.579316 179.130332 - + - - + + @@ -10135,9 +10138,9 @@ L 1871.579316 179.130332 - + - + @@ -10283,9 +10286,10 @@ L 1871.579316 179.130332 - - - + + + + @@ -10433,9 +10437,9 @@ L 1871.579316 179.130332 - + - + @@ -10580,10 +10584,9 @@ L 1871.579316 179.130332 - - - - + + + @@ -10733,9 +10736,10 @@ L 1871.579316 179.130332 - - - + + + + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv index 606c33f..558b496 100644 --- a/docs/assets/preset-overlap.tsv +++ b/docs/assets/preset-overlap.tsv @@ -3,7 +3,7 @@ north_america north_america 4425 100.000000 100.000000 north_america central_america 1408 30.240550 31.819209 north_america caribbean 648 13.926499 14.644068 north_america south_america 839 16.476826 18.960452 -north_america arctic 2406 37.877834 54.372881 +north_america arctic 418 7.524752 9.446328 north_america europe 356 5.026119 8.045198 north_america north_europe 314 5.157687 7.096045 north_america mediterranean 313 4.608363 7.073446 @@ -26,7 +26,7 @@ central_america north_america 1408 30.240550 85.906040 central_america central_america 1639 100.000000 100.000000 central_america caribbean 721 40.189521 43.990238 central_america south_america 1031 48.770104 62.904210 -central_america arctic 243 4.241578 14.826113 +central_america arctic 22 0.695103 1.342282 central_america europe 29 0.627163 1.769372 central_america north_europe 12 0.332963 0.732154 central_america mediterranean 41 0.958392 2.501525 @@ -49,7 +49,7 @@ caribbean north_america 648 13.926499 73.972603 caribbean central_america 721 40.189521 82.305936 caribbean caribbean 876 100.000000 100.000000 caribbean south_america 781 48.782011 89.155251 -caribbean arctic 54 1.047527 6.164384 +caribbean arctic 1 0.041271 0.114155 caribbean europe 9 0.231899 1.027397 caribbean north_europe 2 0.070151 0.228311 caribbean mediterranean 18 0.508762 2.054795 @@ -72,7 +72,7 @@ south_america north_america 839 16.476826 55.710491 south_america central_america 1031 48.770104 68.459495 south_america caribbean 781 48.782011 51.859230 south_america south_america 1506 100.000000 100.000000 -south_america arctic 103 1.795676 6.839309 +south_america arctic 9 0.295567 0.597610 south_america europe 30 0.668151 1.992032 south_america north_europe 20 0.577534 1.328021 south_america mediterranean 39 0.940439 2.589641 @@ -91,34 +91,34 @@ south_america australia 38 1.137044 2.523240 south_america tasmania 2 0.112486 0.132802 south_america new_zealand 12 0.625326 0.796813 south_america oceania_excluding_australia_nz 38 2.087912 2.523240 -arctic north_america 2406 37.877834 55.527348 -arctic central_america 243 4.241578 5.608124 -arctic caribbean 54 1.047527 1.246250 -arctic south_america 103 1.795676 2.377106 -arctic arctic 4333 100.000000 100.000000 -arctic europe 2152 41.424447 49.665359 -arctic north_europe 1837 41.068634 42.395569 -arctic mediterranean 1781 34.040520 41.103162 -arctic middle_east 548 11.833297 12.647127 -arctic africa 135 2.635689 3.115624 -arctic north_africa 93 2.077748 2.146319 -arctic subsaharan_africa 85 1.685170 1.961689 -arctic madagascar 8 0.180505 0.184630 -arctic asia 1498 20.582578 34.571890 -arctic south_asia 120 2.081526 2.769444 -arctic southeast_asia 36 0.603116 0.830833 -arctic east_asia 1302 20.151679 30.048465 -arctic japan 229 4.769840 5.285022 -arctic oceania 72 1.101928 1.661666 -arctic australia 42 0.681265 0.969305 -arctic tasmania 6 0.130406 0.138472 -arctic new_zealand 43 0.911983 0.992384 -arctic oceania_excluding_australia_nz 20 0.428725 0.461574 +arctic north_america 418 7.524752 27.002584 +arctic central_america 22 0.695103 1.421189 +arctic caribbean 1 0.041271 0.064599 +arctic south_america 9 0.295567 0.581395 +arctic arctic 1548 100.000000 100.000000 +arctic europe 1385 43.594586 89.470284 +arctic north_europe 1350 62.068966 87.209302 +arctic mediterranean 1079 34.264846 69.702842 +arctic middle_east 228 10.526316 14.728682 +arctic africa 38 1.561216 2.454780 +arctic north_africa 28 1.594533 1.808786 +arctic subsaharan_africa 25 1.078051 1.614987 +arctic madagascar 2 0.120992 0.129199 +arctic asia 910 17.909860 58.785530 +arctic south_asia 32 1.043025 2.067183 +arctic southeast_asia 3 0.093255 0.193798 +arctic east_asia 865 21.030878 55.878553 +arctic japan 105 4.906542 6.782946 +arctic oceania 30 0.791348 1.937984 +arctic australia 17 0.499266 1.098191 +arctic tasmania 3 0.164926 0.193798 +arctic new_zealand 27 1.387461 1.744186 +arctic oceania_excluding_australia_nz 3 0.158144 0.193798 europe north_america 356 5.026119 11.811546 europe central_america 29 0.627163 0.962177 europe caribbean 9 0.231899 0.298607 europe south_america 30 0.668151 0.995355 -europe arctic 2152 41.424447 71.400133 +europe arctic 1385 43.594586 45.952223 europe europe 3014 100.000000 100.000000 europe north_europe 1977 65.593895 65.593895 europe mediterranean 2583 83.027965 85.700066 @@ -141,7 +141,7 @@ north_europe north_america 314 5.157687 15.882650 north_europe central_america 12 0.332963 0.606980 north_europe caribbean 2 0.070151 0.101163 north_europe south_america 20 0.577534 1.011634 -north_europe arctic 1837 41.068634 92.918563 +north_europe arctic 1350 62.068966 68.285281 north_europe europe 1977 65.593895 100.000000 north_europe north_europe 1977 100.000000 100.000000 north_europe mediterranean 1602 52.438625 81.031866 @@ -164,7 +164,7 @@ mediterranean north_america 313 4.608363 11.679104 mediterranean central_america 41 0.958392 1.529851 mediterranean caribbean 18 0.508762 0.671642 mediterranean south_america 39 0.940439 1.455224 -mediterranean arctic 1781 34.040520 66.455224 +mediterranean arctic 1079 34.264846 40.261194 mediterranean europe 2583 83.027965 96.380597 mediterranean north_europe 1602 52.438625 59.776119 mediterranean mediterranean 2680 100.000000 100.000000 @@ -187,7 +187,7 @@ middle_east north_america 98 1.894452 11.583924 middle_east central_america 29 1.180782 3.427896 middle_east caribbean 16 0.937866 1.891253 middle_east south_america 31 1.335631 3.664303 -middle_east arctic 548 11.833297 64.775414 +middle_east arctic 228 10.526316 26.950355 middle_east europe 714 22.695486 84.397163 middle_east north_europe 406 16.797683 47.990544 middle_east mediterranean 776 28.218182 91.725768 @@ -210,7 +210,7 @@ africa north_america 92 1.750048 9.956710 africa central_america 47 1.868045 5.086580 africa caribbean 34 1.925255 3.679654 africa south_america 51 2.143758 5.519481 -africa arctic 135 2.635689 14.610390 +africa arctic 38 1.561216 4.112554 africa europe 306 8.425110 33.116883 africa north_europe 92 3.275187 9.956710 africa mediterranean 355 10.926439 38.419913 @@ -233,7 +233,7 @@ north_africa north_america 32 0.691294 13.559322 north_africa central_america 14 0.752284 5.932203 north_africa caribbean 7 0.633484 2.966102 north_africa south_america 13 0.751880 5.508475 -north_africa arctic 93 2.077748 39.406780 +north_africa arctic 28 1.594533 11.864407 north_africa europe 219 7.225338 92.796610 north_africa north_europe 65 3.026071 27.542373 north_africa mediterranean 236 8.805970 100.000000 @@ -256,7 +256,7 @@ subsaharan_africa north_america 84 1.635196 10.552764 subsaharan_africa central_america 46 1.925492 5.778894 subsaharan_africa caribbean 34 2.075702 4.271357 subsaharan_africa south_america 50 2.220249 6.281407 -subsaharan_africa arctic 85 1.685170 10.678392 +subsaharan_africa arctic 25 1.078051 3.140704 subsaharan_africa europe 181 4.987600 22.738693 subsaharan_africa north_europe 51 1.873622 6.407035 subsaharan_africa mediterranean 227 6.986765 28.517588 @@ -279,7 +279,7 @@ madagascar north_america 13 0.287674 12.149533 madagascar central_america 8 0.460299 7.476636 madagascar caribbean 9 0.924025 8.411215 madagascar south_america 13 0.812500 12.149533 -madagascar arctic 8 0.180505 7.476636 +madagascar arctic 2 0.120992 1.869159 madagascar europe 16 0.515298 14.953271 madagascar north_europe 2 0.096061 1.869159 madagascar mediterranean 23 0.832127 21.495327 @@ -302,7 +302,7 @@ asia north_america 330 3.865074 7.427414 asia central_america 51 0.845631 1.147873 asia caribbean 38 0.719561 0.855278 asia south_america 60 1.018849 1.350439 -asia arctic 1498 20.582578 33.715958 +asia arctic 910 17.909860 20.481657 asia europe 1554 26.325597 34.976367 asia north_europe 1125 21.246459 25.320729 asia mediterranean 1502 26.721224 33.805987 @@ -325,7 +325,7 @@ south_asia north_america 80 1.356622 5.154639 south_asia central_america 32 1.012979 2.061856 south_asia caribbean 29 1.208837 1.868557 south_asia south_america 40 1.325381 2.577320 -south_asia arctic 120 2.081526 7.731959 +south_asia arctic 32 1.043025 2.061856 south_asia europe 138 3.116531 8.891753 south_asia north_europe 53 1.524741 3.414948 south_asia mediterranean 174 4.287827 11.211340 @@ -348,7 +348,7 @@ southeast_asia north_america 61 1.010603 3.648325 southeast_asia central_america 26 0.791476 1.555024 southeast_asia caribbean 26 1.030928 1.555024 southeast_asia south_america 31 0.985065 1.854067 -southeast_asia arctic 36 0.603116 2.153110 +southeast_asia arctic 3 0.093255 0.179426 southeast_asia europe 31 0.665951 1.854067 southeast_asia north_europe 8 0.219720 0.478469 southeast_asia mediterranean 48 1.115242 2.870813 @@ -371,7 +371,7 @@ east_asia north_america 289 3.819720 8.425656 east_asia central_america 39 0.775348 1.137026 east_asia caribbean 23 0.537007 0.670554 east_asia south_america 40 0.816993 1.166181 -east_asia arctic 1302 20.151679 37.959184 +east_asia arctic 865 21.030878 25.218659 east_asia europe 1188 22.602740 34.635569 east_asia north_europe 987 22.330317 28.775510 east_asia mediterranean 1092 21.761658 31.836735 @@ -394,7 +394,7 @@ japan north_america 64 1.265322 9.182209 japan central_america 15 0.646273 2.152080 japan caribbean 9 0.575448 1.291248 japan south_america 13 0.593607 1.865136 -japan arctic 229 4.769840 32.855093 +japan arctic 105 4.906542 15.064562 japan europe 165 4.653130 23.672884 japan north_europe 131 5.151396 18.794835 japan mediterranean 160 4.973578 22.955524 @@ -417,7 +417,7 @@ oceania north_america 147 2.243932 6.467224 oceania central_america 58 1.504930 2.551694 oceania caribbean 49 1.580645 2.155741 oceania south_america 63 1.695371 2.771667 -oceania arctic 72 1.101928 3.167620 +oceania arctic 30 0.791348 1.319842 oceania europe 88 1.692633 3.871535 oceania north_europe 49 1.166389 2.155741 oceania mediterranean 96 1.976529 4.223493 @@ -440,7 +440,7 @@ australia north_america 89 1.433172 4.749200 australia central_america 34 0.977292 1.814301 australia caribbean 26 0.954479 1.387407 australia south_america 38 1.137044 2.027748 -australia arctic 42 0.681265 2.241195 +australia arctic 17 0.499266 0.907150 australia europe 65 1.347709 3.468517 australia north_europe 31 0.811518 1.654216 australia mediterranean 73 1.629101 3.895411 @@ -463,7 +463,7 @@ tasmania north_america 6 0.127850 2.189781 tasmania central_america 1 0.052301 0.364964 tasmania caribbean 0 0.000000 0.000000 tasmania south_america 2 0.112486 0.729927 -tasmania arctic 6 0.130406 2.189781 +tasmania arctic 3 0.164926 1.094891 tasmania europe 9 0.274474 3.284672 tasmania north_europe 8 0.356665 2.919708 tasmania mediterranean 9 0.305603 3.284672 @@ -486,7 +486,7 @@ new_zealand north_america 45 0.936524 10.588235 new_zealand central_america 11 0.535801 2.588235 new_zealand caribbean 5 0.385802 1.176471 new_zealand south_america 12 0.625326 2.823529 -new_zealand arctic 43 0.911983 10.117647 +new_zealand arctic 27 1.387461 6.352941 new_zealand europe 57 1.685393 13.411765 new_zealand north_europe 40 1.693480 9.411765 new_zealand mediterranean 51 1.669941 12.000000 @@ -509,7 +509,7 @@ oceania_excluding_australia_nz north_america 89 1.898464 25.284091 oceania_excluding_australia_nz central_america 42 2.154951 11.931818 oceania_excluding_australia_nz caribbean 34 2.847571 9.659091 oceania_excluding_australia_nz south_america 38 2.087912 10.795455 -oceania_excluding_australia_nz arctic 20 0.428725 5.681818 +oceania_excluding_australia_nz arctic 3 0.158144 0.852273 oceania_excluding_australia_nz europe 21 0.627803 5.965909 oceania_excluding_australia_nz north_europe 5 0.215146 1.420455 oceania_excluding_australia_nz mediterranean 28 0.932091 7.954545 diff --git a/docs/model-presets.md b/docs/model-presets.md index 6e9b823..94ccea3 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -33,7 +33,7 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `subsaharan_africa` | 796 | 3 | 25 | 144,918 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. | | `madagascar` | 107 | 3 | 25 | 2,584 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. | | `mediterranean` | 2,680 | 3 | 25 | 660,065 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. | -| `arctic` | 4,333 | 3 | 25 | 871,155 | Canada, Alaska (US records only when stateProvince is Alaska), Greenland, Iceland, Faroe Islands, Norway, Svalbard/Jan Mayen, Sweden, Finland, Åland and Russia. Other countries remain whole-country proxies including southern records; this is not an Arctic Circle or tundra filter. US records with blank state are excluded. | +| `arctic` | 1,548 | 3 | 25 | 115,881 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. | | `oceania` | 2,273 | 3 | 25 | 584,477 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. | | `new_zealand` | 425 | 3 | 25 | 110,030 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. | | `oceania_excluding_australia_nz` | 352 | 3 | 25 | 8,721 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. | @@ -67,7 +67,7 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho - **subsaharan_africa** (Sub-Saharan Africa (broad)): (`continent` in `AFRICA` OR `countryCode` in `AO, BJ, BW, BF, BI, CV, CM, CF, TD, KM, CG, CD, CI, DJ, GQ, ER, SZ, ET, GA, GM, GH, GN, GW, KE, LS, LR, MG, MW, ML, MR, MU, YT, MZ, NA, NE, NG, RE, RW, SH, ST, SN, SC, SL, SO, ZA, SS, SD, TZ, TG, UG, ZM, ZW`) AND country NOT in `DZ, EG, LY, MA, TN, EH`. - **madagascar** (Madagascar only): `countryCode` in `MG`. - **mediterranean** (Mediterranean (broad)): `countryCode` in `AL, DZ, BA, HR, CY, EG, FR, GR, IL, IT, LB, LY, MT, MC, ME, MA, PS, SI, ES, SY, TN, TR, PT, GI, AD, SM, VA, MK, BG, RS, JO`. -- **arctic** (Arctic / broad northern-country scope): `countryCode` in `CA, US, GL, IS, FO, NO, SJ, SE, FI, AX, RU`; `US` records additionally require `stateProvince` in `Alaska`. +- **arctic** (Arctic / north of 60°N): valid `decimalLatitude` between 60 and 90 degrees inclusive. - **oceania** (Oceania): `continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`. - **new_zealand** (New Zealand): `countryCode` in `NZ`. - **oceania_excluding_australia_nz** (Oceania excluding Australia and New Zealand): (`continent` in `OCEANIA` OR `countryCode` in `AU, NZ, PG, FJ, SB, VU, NC, PF, WS, AS, TO, TV, KI, NR, FM, MH, PW, GU, MP, CK, NU, TK, WF, PN, NF`) AND country NOT in `AU, NZ`. @@ -77,7 +77,7 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho ## Interpretation and reproducibility -Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic uses Alaska for US records; other selected countries remain broad proxies including southern records. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. +Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic uses latitude at least 60°N across all countries, including the boundary; missing, malformed or out-of-range latitudes are excluded. This broad northern scope includes subarctic areas. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes Australian records with blank or different state values. Overlapping presets are expected; membership in one does not exclude another. diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index 7974fda..212e7dd 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -63,7 +63,7 @@ def test_misspelled_or_empty_filter_fails_closed(): table = pa.table({"countryCode": ["AU"]}) with pytest.raises(ValueError, match="Unknown region fields"): select_region(table, {"countries": ["AU"], "state_provinc": ["Tasmania"]}) - with pytest.raises(ValueError, match="requires countries or continents"): + with pytest.raises(ValueError, match="requires countries, continents or minimum_latitude"): select_region(table, {}) @@ -72,14 +72,20 @@ def test_asia_excludes_cyprus_even_when_continent_matches(): assert select_region(table, RULES["asia"])["countryCode"].to_pylist() == ["JP", "TR"] -def test_arctic_us_requires_alaska_without_restricting_other_countries(): +def test_arctic_uses_inclusive_latitude_independent_of_country_or_state(): table = pa.table( { - "countryCode": ["US", "US", "US", "US", "CA", "NO", "AU"], - "stateProvince": ["Alaska", "Florida", "", None, "Ontario", None, "Alaska"], + "countryCode": ["US", "US", "RU", "CA", "", "NO"], + "stateProvince": ["Alaska", "Alaska", "", "", "", ""], + "decimalLatitude": ["59.99", "60", "61.5", "90", " 6e1 ", "59"], } ) - assert select_region(table, RULES["arctic"])["countryCode"].to_pylist() == ["US", "CA", "NO"] + assert select_region(table, RULES["arctic"])["decimalLatitude"].to_pylist() == ["60", "61.5", "90", " 6e1 "] + + +def test_arctic_excludes_missing_invalid_and_southern_latitudes(): + table = pa.table({"decimalLatitude": [None, "", "bad", "NaN", "inf", "91", "-91", "-60", "1e999"]}) + assert select_region(table, RULES["arctic"]).num_rows == 0 def test_overlap_distinguishes_containment_from_similarity(): From 6709263a32969cad56cb67e6460436e29b65ef84 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 16:18:49 +0200 Subject: [PATCH 021/221] feat: add portable MAMBO release deployment and qualification --- README.md | 3 + deployment/LICENSE | 7 + deployment/README.md | 94 +++++++ deployment/mambo_deploy/__init__.py | 6 + deployment/mambo_deploy/bundle.py | 56 +++++ deployment/mambo_deploy/cli.py | 103 ++++++++ deployment/mambo_deploy/predictor.py | 231 ++++++++++++++++++ deployment/mambo_deploy/preprocessing.py | 74 ++++++ deployment/mambo_deploy/results.py | 75 ++++++ deployment/pyproject.toml | 23 ++ dev/releases/mambo_v3/README.md | 14 +- dev/releases/mambo_v3/build_bundle.py | 142 +++++++++++ .../mambo_v3/check_portable_install.py | 65 +++++ .../mambo_v3/deployment-qualification.md | 91 +++++++ dev/releases/mambo_v3/qualify_bundle.py | 87 +++++++ docs/ucloud-model-release-roadmap.md | 5 + mini_trainer/deploy.py | 86 +++++++ pyproject.toml | 1 + tests/releases/test_deployment.py | 146 +++++++++++ 19 files changed, 1303 insertions(+), 6 deletions(-) create mode 100644 deployment/LICENSE create mode 100644 deployment/README.md create mode 100644 deployment/mambo_deploy/__init__.py create mode 100644 deployment/mambo_deploy/bundle.py create mode 100644 deployment/mambo_deploy/cli.py create mode 100644 deployment/mambo_deploy/predictor.py create mode 100644 deployment/mambo_deploy/preprocessing.py create mode 100644 deployment/mambo_deploy/results.py create mode 100644 deployment/pyproject.toml create mode 100644 dev/releases/mambo_v3/build_bundle.py create mode 100644 dev/releases/mambo_v3/check_portable_install.py create mode 100644 dev/releases/mambo_v3/deployment-qualification.md create mode 100644 dev/releases/mambo_v3/qualify_bundle.py create mode 100644 mini_trainer/deploy.py create mode 100644 tests/releases/test_deployment.py diff --git a/README.md b/README.md index f9f1d8b..6f0b31e 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,9 @@ This is an attempt to create a minimal extendable framework for development and research on classification models. +For the MAMBO model release candidate, see the [local deployment guide](deployment/README.md) +for PyTorch/ONNX inference, regional presets, custom class lists and embeddings. + All code in `mini_trainer` should follow the following core principles: * Keep core dependencies minimal (see `pyproject.toml` for the current set); third-party integrations should remain optional. diff --git a/deployment/LICENSE b/deployment/LICENSE new file mode 100644 index 0000000..21c376c --- /dev/null +++ b/deployment/LICENSE @@ -0,0 +1,7 @@ +Copyright 2026 Asger Svenning + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/deployment/README.md b/deployment/README.md new file mode 100644 index 0000000..3730918 --- /dev/null +++ b/deployment/README.md @@ -0,0 +1,94 @@ +# MAMBO deployment — release candidate + +Use a local model bundle with native PyTorch or standard ONNX. Inference needs no +network, taxonomy service, administrator permissions or writable model directory. +The runtime is separate from the model files; keep each ONNX graph beside its +`model.onnx.data` file. This candidate has not been publicly released. + +## Quick start + +Install the supplied `mambo_deploy` wheel with the `onnx` extra for CPU inference. +For example, in a virtual environment: + +```sh +pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' +``` + +```python +from mambo_deploy import Predictor + +predictor = Predictor(bundle="/path/to/mambo-bundle", backend="onnx", device="cpu", model="europe") +result = predictor.predict("moth.jpg") +print(result[0].label) # species, genus, family IDs +print(result[0].confidence) # conditional probabilities for those ranks +result, embeddings = predictor.predict_with_embeddings(["moth.jpg"]) +``` + +Choose a preset using `model`, inspect `predictor.available_presets()`, or replace +it with `class_list=["GBIF_SPECIES_ID", ...]` (also accepts a UTF-8 filename). +Unknown IDs and empty lists are errors; duplicates are removed and model ordering +is preserved. Filtering happens before ranking and hierarchy normalization. +See PRESETS.md in the bundle for short geographic scopes and provisional cutoffs. +Presets retain species with qualifying occurrence records; they are practical +prediction filters, not maps of native distributions or exhaustive checklists. + +Inputs are paths, PIL images, CHW/BCHW NumPy arrays or tensors. Arrays must be +uint8 or floats in [0,1]; transpose HWC arrays explicitly. Images are decoded RGB +without EXIF rotation, alpha is discarded, then the recorded campaign resize, +crop and normalization recipe is applied. Both backends use the same CPU image +preparation. `batch_size=8` bounds model batches; returned results remain in memory. + +## PyTorch and GPU + +For native inference, install the matching `mini_trainer` wheel with your chosen +PyTorch/CUDA build and use `backend="torch"`. The checkpoint is loaded with +`weights_only=True`; the architecture is constructed without pretrained downloads. +For ONNX CUDA, install `onnxruntime-gpu` instead of the CPU ONNX Runtime package, +with its matching CUDA/cuDNN dependencies. Select `device="cuda:0"` explicitly. +Unavailable CUDA raises an error rather than silently changing to CPU-only +execution. ONNX CUDA may still place individual unsupported operators on CPU. + +Portable results use NumPy arrays; embeddings are float32 `[images, 1280]` CPU +arrays from the normalized preclassification stage. Prediction-only ONNX uses +the original graph; requesting embeddings selects the existing embedding graph. +Each image uses one backbone pass. `topk` ranks each hierarchy level independently; +a tuple is not necessarily an ancestral path. `indices` refer to the filtered +rank vocabulary; `global_indices` refer to the full model vocabulary. + +## Existing MAMBO callers + +The matching training wheel restores `mini_trainer.deploy.Predictor`, with native +PyTorch and CUDA defaults, Europe as the default preset, callable/predict methods, +`class_mask` (including `-1` reset) and `(predictions, embeddings)` output. Install +the deployment wheel too and set `MAMBO_BUNDLE`, or pass `bundle=` explicitly. +Native compatibility results use the existing hierarchical prediction container +and device tensors. The portable API defaults to ONNX/CPU; choose it for new code. + +Migration limits: inference no longer implicitly downloads a model; pass a local +bundle. Local `weights=` overrides must match this release checkpoint; arbitrary +legacy BioCLIP weights/state dictionaries are not supported by this release adapter. +Legacy pins remain the way to run those models. Embedding dimensions change with +the backbone. Legacy top-k serialization defects are not a portable API guarantee. +New portable preprocessing always applies the documented recipe to array inputs; +old callers that supplied already-resized or preprocessed tensors should review it. + +## Command line + +```sh +mambo_predict -i moth.jpg --bundle /path/to/mambo-bundle --backend onnx --device cpu -M europe -o . --name results +``` + +Directory input recursively discovers images in sorted order. Outputs are +`predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. +Use `--class-list`, `--batch-size`, `--topk` and `--threads` as needed. `--threads` +controls ONNX CPU threads; native callers configure PyTorch threads. The standalone +wheel defaults to ONNX/CPU; the training-wheel entry point retains native/CUDA +defaults, so explicit backend/device arguments are recommended in scripts. + +## Qualification + +Preset generation and artifact integrity have been checked. This increment adds +small real-image inference and installed-package checks, not full performance or +accuracy qualification. Full Flemming metrics, in-domain UCloud evaluation, +laptop GPU/CPU benchmarks, other operating systems and publication/license +review remain release work. Small ONNX numerical differences are expected. diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py new file mode 100644 index 0000000..1d5afca --- /dev/null +++ b/deployment/mambo_deploy/__init__.py @@ -0,0 +1,6 @@ +"""Offline model-bundle inference; importing this package does not import PyTorch.""" + +from .predictor import Predictor +from .results import Prediction, PredictionItem + +__all__ = ["Predictor", "Prediction", "PredictionItem"] diff --git a/deployment/mambo_deploy/bundle.py b/deployment/mambo_deploy/bundle.py new file mode 100644 index 0000000..8f66bd2 --- /dev/null +++ b/deployment/mambo_deploy/bundle.py @@ -0,0 +1,56 @@ +"""Validated, relocatable bundle paths. Inference never downloads or writes files.""" + +import hashlib +import json +from pathlib import Path + + +class Bundle: + def __init__(self, root): + self.root = Path(root).expanduser().resolve() + with (self.root / "release.json").open() as stream: + self.manifest = json.load(stream) + if self.manifest.get("schema") != "mambo-release-v1": + raise ValueError("Unsupported MAMBO bundle schema") + if self.manifest.get("score_semantics") != "hierarchical-leaf-logits-logsumexp-v1": + raise ValueError("Unsupported score semantics") + self._verified = set() + self.classes = self.read_json("classes.json") + self.preprocessing = self.read_json("preprocessing.json") + self.regions = self.read_json("presets.json") + for rank, labels in enumerate(self.classes["labels"]): + if not labels or len(set(labels)) != len(labels): + raise ValueError(f"Invalid class vocabulary at rank {rank}") + if len(self.classes["labels"]) != 3 or len(self.classes["parents"]) != 2: + raise ValueError("This release requires species, genus and family ranks") + for rank, parents in enumerate(self.classes["parents"]): + if len(parents) != len(self.classes["labels"][rank]): + raise ValueError("Parent mapping length mismatch") + if any(not isinstance(p, int) or not 0 <= p < len(self.classes["labels"][rank + 1]) for p in parents): + raise ValueError("Invalid parent index") + + def file(self, relative): + path = (self.root / relative).resolve() + if not path.is_relative_to(self.root): + raise ValueError(f"Bundle path escapes root: {relative}") + item = self.manifest["files"].get(relative) + if item is None: + raise ValueError(f"Unlisted bundle file: {relative}") + if relative not in self._verified: + if path.stat().st_size != item["size"]: + raise ValueError(f"Bundle size mismatch: {relative}") + with path.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + if digest != item["sha256"]: + raise ValueError(f"Bundle hash mismatch: {relative}") + self._verified.add(relative) + return path + + def read_json(self, relative): + return json.loads(self.file(relative).read_text()) + + def profile(self, name): + profile = self.manifest["profiles"][name] + for relative in profile["files"]: + self.file(relative) + return self.file(profile["model"]) diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py new file mode 100644 index 0000000..76bdb79 --- /dev/null +++ b/deployment/mambo_deploy/cli.py @@ -0,0 +1,103 @@ +"""Small local prediction CLI; no dataset or training-framework dependency.""" + +import argparse +import csv +from pathlib import Path + +import numpy as np + +from .predictor import Predictor + + +def run(default_backend="onnx", default_device="cpu"): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("-i", "--input", nargs="+", required=True) + parser.add_argument("--bundle") + parser.add_argument("--backend", choices=["torch", "onnx"], default=default_backend) + parser.add_argument("--device", default=default_device) + parser.add_argument("-M", "--model") + parser.add_argument("-w", "--weights") + parser.add_argument("--class-list") + parser.add_argument("--batch-size", type=int, default=8) + parser.add_argument("--threads", type=int, default=2) + parser.add_argument("--topk", type=int, default=1) + parser.add_argument("--threshold", type=float, default=0) + parser.add_argument("--embeddings", action="store_true") + parser.add_argument("-o", "--output", type=Path, default=Path(".")) + parser.add_argument("--name", default="results") + args = parser.parse_args() + if not 0 <= args.threshold <= 1: + parser.error("threshold must be in [0,1]") + paths = [] + for value in args.input: + path = Path(value) + paths.extend( + sorted( + p + for p in path.rglob("*") + if p.is_file() and p.suffix.lower() in {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff"} + ) + if path.is_dir() + else [path] + ) + predictor = Predictor( + args.bundle, + backend=args.backend, + device=args.device, + model=args.model, + weights=args.weights, + class_list=args.class_list, + batch_size=args.batch_size, + threads=args.threads, + ) + result = predictor.predict_with_embeddings(paths, args.topk) if args.embeddings else predictor.predict(paths, args.topk) + if args.embeddings: + result, embeddings = result + destination = args.output / args.name + destination.mkdir(parents=True, exist_ok=False) + result.save(destination / "predictions.json") + if args.embeddings: + np.save(destination / "embeddings.npy", embeddings, allow_pickle=False) + columns = [ + "instance_id", + "filename", + "level", + "label", + "prediction", + "confidence", + "threshold", + "known_label", + "prediction_made", + "correct", + ] + full_labels = predictor.bundle.classes["labels"] + species_index = {label: i for i, label in enumerate(full_labels[0])} + parents = predictor.bundle.classes["parents"] + with (destination / "mini_metric.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(columns) + for i, path in enumerate(paths): + truth = [path.parent.name, "", ""] + if truth[0] in species_index: + genus = parents[0][species_index[truth[0]]] + truth[1:] = [full_labels[1][genus], full_labels[2][parents[1][genus]]] + for rank in range(3): + label = result.labels[i][0][rank] + confidence = float(result.confidence[i, 0, rank]) + known = truth[rank] in result.cls2idx[str(rank)] + made = confidence >= args.threshold + writer.writerow( + [ + i, + str(path), + rank, + truth[rank], + label, + confidence, + args.threshold, + int(known), + int(made), + (1 if label == truth[rank] else -1) if made else 0, + ] + ) + print(destination) diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py new file mode 100644 index 0000000..45df530 --- /dev/null +++ b/deployment/mambo_deploy/predictor.py @@ -0,0 +1,231 @@ +"""Two explicit backends sharing one image, vocabulary and result contract.""" + +import hashlib +import os +import re +import threading +from itertools import islice +from pathlib import Path + +import numpy as np + +from .bundle import Bundle +from .preprocessing import RECIPE, image_items, preprocess +from .results import Prediction, hierarchy + + +class Predictor: + def __init__( + self, + bundle=None, + *, + backend="onnx", + device="cpu", + model=None, + class_list=None, + class_mask=None, + weights=None, + batch_size=8, + threads=2, + ): + if backend not in ("torch", "onnx"): + raise ValueError("backend must be 'torch' or 'onnx'") + if device != "cpu" and not re.fullmatch(r"cuda(?::\d+)?", str(device)): + raise ValueError("device must be cpu, cuda or cuda:N") + if not isinstance(batch_size, int) or batch_size < 1 or not isinstance(threads, int) or threads < 1: + raise ValueError("batch_size and threads must be positive integers") + if class_list is not None and class_mask is not None: + raise ValueError("class_list and class_mask are mutually exclusive") + if weights is not None and model is not None: + raise ValueError("model and weights are mutually exclusive") + if weights is not None and backend != "torch": + raise ValueError("weights override is only supported by the PyTorch backend") + bundle = bundle or os.environ.get("MAMBO_BUNDLE") + if not bundle: + raise ValueError("Pass bundle='/path/to/bundle' or set MAMBO_BUNDLE. Inference does not download files.") + self.bundle = Bundle(bundle) + if self.bundle.preprocessing != RECIPE: + raise ValueError("Unsupported preprocessing recipe; use the matching deployment runtime") + self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads + self._sessions, self._torch_model = {}, None + self._lock = threading.RLock() + self.weights = weights + if weights is not None: + # This adapter supports the pinned release architecture only; do not accept arbitrary pickles. + with Path(weights).open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + expected = self.bundle.manifest["files"][self.bundle.manifest["profiles"]["torch"]["model"]]["sha256"] + if digest != expected: + raise ValueError("Local weights must match the pinned release checkpoint") + self.preset = self._preset_name(model or ("full" if weights is not None else "europe")) + if class_list is not None: + self._select_labels(self._read_list(class_list)) + self.preset = "custom" + else: + labels = ( + self.bundle.classes["labels"][0] + if self.preset == "full" + else self.bundle.file(self.bundle.regions[self.preset]["path"]).read_text().splitlines() + ) + self._select_labels(labels) + if class_mask is not None: + self._apply_class_mask(class_mask) + + def _preset_name(self, value): + def normalize(text): + return re.sub(r"[^a-z0-9]", "", text.lower()) + + names = list(self.bundle.regions) + ["full"] + query = normalize(str(value)) + exact = [name for name in names if normalize(name) == query] + matches = exact or [name for name in names if query and normalize(name).startswith(query)] + if len(matches) != 1: + raise ValueError(f"Unknown or ambiguous preset {value!r}; choose from {', '.join(names)}") + return matches[0] + + @staticmethod + def _read_list(value): + if isinstance(value, (str, Path)): + return Path(value).read_text().splitlines() + return list(value) + + def _select_labels(self, labels): + requested = {str(label).strip() for label in labels if str(label).strip()} + vocabulary = self.bundle.classes["labels"][0] + unknown = requested - set(vocabulary) + if unknown: + raise ValueError(f"Unknown species IDs: {', '.join(sorted(unknown)[:20])}") + if not requested: + raise ValueError("Class list is empty") + self.selected = np.array([i for i, label in enumerate(vocabulary) if label in requested], dtype=np.int64) + self.class_list = [vocabulary[i] for i in self.selected] + self.class_list_sha256 = hashlib.sha256(("\n".join(self.class_list) + "\n").encode()).hexdigest() + + def _apply_class_mask(self, mask): + with self._lock: + if mask is None or isinstance(mask, int) and mask == -1: + self._select_labels(self.bundle.classes["labels"][0]) + self.preset = "full" + return + if isinstance(mask, int): + raise ValueError("Only -1 is a valid integer mask flag") + if hasattr(mask, "detach"): + mask = mask.detach().cpu().numpy() + mask = list(mask) + if not mask: + raise ValueError("Class mask is empty") + if all(isinstance(value, (bool, np.bool_)) for value in mask): + if len(mask) != len(self.bundle.classes["labels"][0]): + raise ValueError("Boolean class mask must cover the full species vocabulary") + mask = [i for i, keep in enumerate(mask) if keep] + labels = [] + for value in mask: + if isinstance(value, str): + labels.append(value) + elif isinstance(value, (int, np.integer)) and 0 <= value < len(self.bundle.classes["labels"][0]): + labels.append(self.bundle.classes["labels"][0][value]) + else: + raise ValueError(f"Invalid class-mask value: {value!r}") + self._select_labels(labels) + self.preset = "custom" + + def available_presets(self): + return {"full": {"count": len(self.bundle.classes["labels"][0]), "scope": "All model species"}, **self.bundle.regions} + + def _onnx(self, images, embeddings): + try: + import onnxruntime as ort + except ImportError as error: + raise ImportError("Install mambo-deploy[onnx], or onnxruntime-gpu for CUDA") from error + key = "onnx-embedding" if embeddings else "onnx" + if key not in self._sessions: + path = self.bundle.profile(key) + options = ort.SessionOptions() + options.intra_op_num_threads = self.threads + options.inter_op_num_threads = 1 + options.enable_profiling = False + if self.device == "cpu": + providers = ["CPUExecutionProvider"] + else: + if "CUDAExecutionProvider" not in ort.get_available_providers(): + raise RuntimeError("ONNX CUDA is unavailable; install onnxruntime-gpu and its CUDA/cuDNN dependencies") + if hasattr(ort, "preload_dlls"): + ort.preload_dlls() + providers = [ + ("CUDAExecutionProvider", {"device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0}), + "CPUExecutionProvider", + ] + session = ort.InferenceSession(str(path), sess_options=options, providers=providers) + session.disable_fallback() + if self.device != "cpu" and session.get_providers()[0] != "CUDAExecutionProvider": + raise RuntimeError("Requested ONNX CUDA provider failed to initialize; refusing CPU-only fallback") + self._sessions[key] = session + outputs = ["output_0", "embedding"] if embeddings else ["output_0"] + values = self._sessions[key].run(outputs, {"images": images}) + return values[0], values[1] if embeddings else None + + def _torch(self, images, embeddings): + try: + import torch + + from mini_trainer.builders import BaseBuilder + except ImportError as error: + raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error + if self._torch_model is None: + path = self.weights or self.bundle.profile("torch") + if self.device != "cpu" and not torch.cuda.is_available(): + raise RuntimeError("PyTorch CUDA is unavailable; explicitly choose device='cpu' or install/configure CUDA") + # Full local state and pretrained=False prevent constructor downloads. + state = torch.load(str(path), map_location="cpu", weights_only=True) + self._torch_model, _ = BaseBuilder.build_model( + weights=state, device="cpu", dtype=torch.float32, model_args={"pretrained": False} + ) + self._torch_model.to(self.device).eval() + head = self._torch_model.classifier + captured = [] + hook = head.register_forward_pre_hook(lambda module, args: captured.append(args[0])) if embeddings else None + try: + with torch.inference_mode(): + output = self._torch_model(torch.from_numpy(images).to(self.device)) + # Matches the existing embedding graph: one backbone pass, eval preclassification stage. + embedding = head.preclassification(captured[0]).cpu().numpy() if embeddings else None + return output[0].cpu().numpy(), embedding + finally: + if hook is not None: + hook.remove() + + def _predict(self, x, embeddings=False, topk=1): + with self._lock: + leaf_batches, embedding_batches = [], [] + items = image_items(x) + while batch := list(islice(items, self.batch_size)): + images = np.stack([preprocess(item) for item in batch]) + leaves, vectors = self._torch(images, embeddings) if self.backend == "torch" else self._onnx(images, embeddings) + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + leaf_batches.append(leaves) + if embeddings: + embedding_batches.append(vectors) + if not leaf_batches: + raise ValueError("No images supplied") + raw, labels, mappings = hierarchy(np.concatenate(leaf_batches), self.selected, self.bundle.classes) + result = Prediction( + raw, + labels, + mappings, + topk, + model_id=self.bundle.manifest["model_id"], + backend=self.backend, + preset=self.preset, + class_list_sha256=self.class_list_sha256, + ) + return (result, np.concatenate(embedding_batches)) if embeddings else result + + def predict(self, x, topk=1): + return self._predict(x, topk=topk) + + def __call__(self, x, **kwargs): + return self.predict(x, **kwargs) + + def predict_with_embeddings(self, x, topk=1): + return self._predict(x, embeddings=True, topk=topk) diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py new file mode 100644 index 0000000..d962343 --- /dev/null +++ b/deployment/mambo_deploy/preprocessing.py @@ -0,0 +1,74 @@ +"""Campaign image recipe on CPU, shared by both runtimes.""" + +from pathlib import Path + +import numpy as np +from PIL import Image + +RECIPE = { + "id": "nearest-square-uint8-bilinear-center-imagenet-v1", + "decode": "RGB; discard alpha; ignore EXIF orientation", + "input": "uint8 CHW/BCHW or image paths; float images must be in [0,1]", + "square_size": 384, + "resize_size": 438, + "crop_size": 384, + "nearest_coordinates": "floor(float32(output_index) * float32(source_size/384))", + "bilinear": "half-pixel coordinates; edge clamp; round to uint8 before normalization", + "mean": [0.485, 0.456, 0.406], + "std": [0.229, 0.224, 0.225], + "output": "float32 NCHW; RGB/255 then channel normalization", +} + + +def _rgb(item): + if isinstance(item, (str, Path)): + with Image.open(item) as im: + array = np.asarray(im.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) + elif isinstance(item, Image.Image): + array = np.asarray(item.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) + else: + if hasattr(item, "detach"): + item = item.detach().cpu().numpy() + array = np.asarray(item) + if array.ndim == 2: + array = array[None] + if array.ndim != 3 or array.shape[0] not in (1, 3, 4): + raise ValueError("Images must be CHW with 1, 3 or 4 channels; transpose HWC arrays explicitly") + if array.dtype != np.uint8: + if not np.issubdtype(array.dtype, np.floating) or not np.isfinite(array).all() or array.min() < 0 or array.max() > 1: + raise ValueError("Image arrays must be uint8 or finite floating point in [0,1]") + array = np.rint(array * 255).astype(np.uint8) + if array.shape[0] == 1: + array = np.repeat(array, 3, axis=0) + array = array[:3] + if min(array.shape[1:]) < 1: + raise ValueError("Empty image") + return array + + +def preprocess(item): + image = _rgb(item) + size, resized = 384, 438 + yy = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[1] / size)).astype(int), image.shape[1] - 1) + xx = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[2] / size)).astype(int), image.shape[2] - 1) + image = image[:, yy][:, :, xx].astype(np.float32) + # Upsampling uses a bilinear support of one pixel (no downsampling antialias filter). + coordinates = np.maximum((np.arange(resized, dtype=np.float32) + 0.5) * np.float32(size / resized) - 0.5, 0) + lo = np.floor(coordinates).astype(int) + hi = np.minimum(lo + 1, size - 1) + fraction = coordinates - lo + rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None] + pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :] + offset = (resized - size) // 2 + pixels = np.rint(pixels[:, offset : offset + size, offset : offset + size]).astype(np.float32) / 255 + return np.ascontiguousarray( + (pixels - np.array(RECIPE["mean"], dtype=np.float32)[:, None, None]) / np.array(RECIPE["std"], dtype=np.float32)[:, None, None] + ) + + +def image_items(value): + if isinstance(value, (str, Path, Image.Image)): + return iter([value]) + if hasattr(value, "ndim") and value.ndim in (2, 3): + return iter([value]) + return iter(value) diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py new file mode 100644 index 0000000..172b2f5 --- /dev/null +++ b/deployment/mambo_deploy/results.py @@ -0,0 +1,75 @@ +"""Runtime-neutral result containers and masked hierarchy postprocessing.""" + +import json +from dataclasses import asdict, dataclass + +import numpy as np + + +@dataclass +class PredictionItem: + label: tuple[str, ...] + confidence: tuple[float, ...] + index: tuple[int, ...] + + def to_dict(self): + return asdict(self) + + +def hierarchy(leaf, selected, classes): + """Mask leaves first; preserve original rank ordering and recompute every parent.""" + indices = np.asarray(selected, dtype=np.int64) + values = np.asarray(leaf[:, indices], dtype=np.float32) + logits, global_indices = [values], [indices] + for parents in classes["parents"]: + selected_parents = np.asarray(parents, dtype=np.int64)[indices] + indices, inverse = np.unique(selected_parents, return_inverse=True) + grouped = np.full((len(values), len(indices)), -np.inf, dtype=np.float32) + for row in range(len(values)): + np.logaddexp.at(grouped[row], inverse, values[row]) + values = grouped + logits.append(values) + global_indices.append(indices) + labels = [[classes["labels"][rank][int(i)] for i in indices] for rank, indices in enumerate(global_indices)] + return logits, labels, global_indices + + +class Prediction: + def __init__(self, raw, labels, global_indices, topk=1, **metadata): + if not isinstance(topk, int) or topk < 1 or topk > min(map(len, labels)): + raise ValueError("topk must be positive and no larger than the smallest retained rank") + self.topk, self.metadata, self.raw_logits = topk, metadata, raw + self.cls2idx = {str(rank): {label: i for i, label in enumerate(names)} for rank, names in enumerate(labels)} + indices = [np.argsort(-values, axis=1, kind="stable")[:, :topk] for values in raw] + self.indices = np.stack(indices, axis=-1) + self.global_indices = np.stack([mapping[idx] for mapping, idx in zip(global_indices, indices)], axis=-1) + self.logits = np.stack([np.take_along_axis(values, idx, axis=1) for values, idx in zip(raw, indices)], axis=-1) + probabilities = [] + for values, idx in zip(raw, indices): + exp = np.exp(values - values.max(axis=1, keepdims=True)) + probabilities.append(np.take_along_axis(exp / exp.sum(axis=1, keepdims=True), idx, axis=1)) + self.confidence = np.stack(probabilities, axis=-1) + self.labels = [[[labels[r][int(self.indices[b, k, r])] for r in range(3)] for k in range(topk)] for b in range(len(raw[0]))] + nested = [ + [PredictionItem(tuple(lab), tuple(map(float, conf)), tuple(map(int, idx))) for lab, conf, idx in zip(labs, confs, idxs)] + for labs, confs, idxs in zip(self.labels, self.confidence, self.indices) + ] + self.items = [row[0] for row in nested] if topk == 1 else nested + + def __len__(self): + return len(self.items) + + def __getitem__(self, index): + return self.items[index] + + def __iter__(self): + return iter(self.items) + + def to_dict(self): + return [item.to_dict() for item in self.items] if self.topk == 1 else [[item.to_dict() for item in row] for row in self.items] + + def save(self, path): + with open(path, "w") as stream: + json.dump( + {"results": self.to_dict(), "metadata": self.metadata, "config": {"topk": self.topk, "cls2idx": self.cls2idx}}, stream + ) diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml new file mode 100644 index 0000000..3b28198 --- /dev/null +++ b/deployment/pyproject.toml @@ -0,0 +1,23 @@ +[project] +name = "mambo-deploy" +version = "0.3.0" +description = "Portable local inference for MAMBO model bundles" +requires-python = ">=3.12" +dependencies = ["numpy>=2.4", "pillow>=11"] +readme = "README.md" +license = "MIT" + +[project.optional-dependencies] +onnx = ["onnxruntime>=1.20"] +onnx-cuda = ["onnxruntime-gpu>=1.20"] +torch = ["mini_trainer>=0.3.0"] + +[project.scripts] +mambo_predict = "mambo_deploy.cli:run" + +[build-system] +requires = ["uv_build>=0.10.7,<0.11.0"] +build-backend = "uv_build" + +[tool.uv.build-backend] +module-root = "" diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index 19d5815..5f731c5 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -153,8 +153,9 @@ The tagged `mini_trainer/deploy.py`, `mini_trainer/classifier.py` and `compatibility.toml` contains a small captured top-1 fixture and archived evaluation CSV columns. The executable fixture checks the original container behavior only. -Wrapper input/error, CLI, masking and both new backend integration tests remain to -be implemented. The archived CSV schema alone is not proof of legacy CLI equivalence. +Wrapper input/error, CLI, masking and both new backend integration checks are now +implemented; see [deployment qualification](deployment-qualification.md). The +archived CSV schema alone is not proof of complete legacy CLI equivalence. The legacy probability-detection heuristic uses a batch-wide sum; do not enshrine that defect as a new probability contract. Any shared core correction belongs on a feature/master branch before merge into the release branch. @@ -177,10 +178,11 @@ names must not be treated as original image identities. Verify the supplied spli source membership and expected 632,913 predictions before a full run, with a small qualification first. Do not regenerate a random split from the training proportion. -Next implementation: self-contained portable assets and aligned PyTorch/ONNX -adapters, followed by a small Flemming qualification, then full local task metrics +Portable assets, aligned PyTorch/ONNX adapters and small CPU/GPU Flemming checks +are implemented; see [deployment qualification](deployment-qualification.md). +Next implementation: full local task metrics and CPU/laptop-GPU timings. Use the same versioned runner/config on UCloud for in-domain results. Archived selected predictions support a historical baseline, -not new-backend top-k or embedding quality claims. No fresh inference or speed -benchmark was performed in this increment. Training-source revision and best-epoch +not new-backend top-k or embedding quality claims. Small fresh inference checks +are complete; no speed benchmark has been performed. Training-source revision and best-epoch provenance remain unresolved; packaging checkout is not training provenance. diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py new file mode 100644 index 0000000..e13b1c9 --- /dev/null +++ b/dev/releases/mambo_v3/build_bundle.py @@ -0,0 +1,142 @@ +"""Assemble verified release inputs into a relocatable, offline candidate bundle.""" + +import argparse +import hashlib +import json +import shutil +import tempfile +import tomllib +from pathlib import Path + +from deployment.mambo_deploy.preprocessing import RECIPE +from dev.releases.mambo_v3.audit import HERE, sha256 + + +def build(source, destination): + if destination.exists(): + raise FileExistsError(f"Refusing to replace existing bundle: {destination}") + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + presets = tomllib.loads((HERE / "preset-manifest.toml").read_text()) + definitions = tomllib.loads((HERE / "preset-definitions.toml").read_text()) + if sha256(HERE / "preset-definitions.toml") != presets["definitions_sha256"]: + raise ValueError("Preset manifest is stale; rebuild presets first") + files = {item["path"]: item for item in inventory["artifacts"]} + production = inventory["production"] + copies = { + "models/pytorch/best.pt": "models/pytorch/best.pt", + "models/onnx/model.onnx": "models/onnx-fp32/model.onnx", + "models/onnx/model.onnx.data": "models/onnx-fp32/model.onnx.data", + "models/onnx/manifest.json": "models/onnx-fp32/manifest.json", + "models/onnx-embedding/model.onnx": "viewer/browser-model/model.onnx", + "models/onnx-embedding/model.onnx.data": "viewer/browser-model/model.onnx.data", + "models/onnx-embedding/manifest.json": "viewer/browser-model/manifest.json", + } + destination.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory(prefix="mambo-bundle-", dir=destination.parent) as temp: + root = Path(temp) / "bundle" + root.mkdir() + origins = {} + for target, relative in copies.items(): + item = files[f"{production}/{relative}"] + path = source / item["path"] + if path.stat().st_size != item["size"] or sha256(path) != item["sha256"]: + raise ValueError(f"Input integrity mismatch: {path}") + output = root / target + output.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(path, output) + origins[target] = item["url"] + export = json.loads((root / "models/onnx/manifest.json").read_text()) + metadata = export["classifiers"][0]["metadata"] + if metadata.get("prior") is not None or metadata.get("normalized") is not True: + raise ValueError("Unqualified head semantics") + mappings = metadata["cls2idx"] + labels = [sorted(mappings[str(rank)], key=mappings[str(rank)].get) for rank in range(3)] + parents = [[-1] * len(labels[rank]) for rank in range(2)] + for species, lineage in metadata["labels"].items(): + for rank in range(2): + child = mappings[str(rank)][lineage[rank]] + parent = mappings[str(rank + 1)][lineage[rank + 1]] + if parents[rank][child] not in (-1, parent): + raise ValueError(f"Ambiguous parent for {species}") + parents[rank][child] = parent + if any(-1 in rank for rank in parents): + raise ValueError("Incomplete class hierarchy") + + def write_json(relative, data): + (root / relative).write_text(json.dumps(data, indent=2) + "\n") + + write_json("classes.json", {"ranks": ["species", "genus", "family"], "labels": labels, "parents": parents}) + write_json("preprocessing.json", RECIPE) + regions = {} + (root / "regions").mkdir() + for name, item in presets["presets"].items(): + path = HERE / item["path"] + data = path.read_bytes() + if hashlib.sha256(data).hexdigest() != item["sha256"]: + raise ValueError(f"Preset integrity mismatch: {name}") + target = f"regions/{name}.classes" + (root / target).write_bytes(data) + regions[name] = { + **item, + "path": target, + "scope": definitions["presets"][name]["scope"], + "qualification_status": definitions["qualification_status"], + } + write_json("presets.json", regions) + shutil.copyfile(HERE / "preset-definitions.toml", root / "PRESET_DEFINITIONS.toml") + shutil.copyfile(HERE.parents[2] / "deployment/README.md", root / "README.md") + shutil.copyfile(HERE.parents[2] / "LICENSE", root / "CODE_LICENSE") + lines = [ + "# Presets", + "", + "Geographic minima are provisional; rows include all metadata splits.", + "", + "| Preset | Species | Regional/global minimum rows | Scope |", + "|---|---:|---|---|", + ] + lines += [ + f"| {name} | {item['count']} | {item['minimum_regional_rows']}/{item['minimum_global_rows'] or 'none'} | {item['scope']} |" + for name, item in regions.items() + ] + lines += ["", "Exact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.", ""] + (root / "PRESETS.md").write_text("\n".join(lines)) + (root / "MODEL_CARD.md").write_text( + "# MAMBO_v3 candidate\n\nEfficientNetV2-S; September 2026 UCloud run; 12,632 species. " + "Original FP32 artifacts; no quantization. Native weights and ONNX variants share the vocabulary.\n\n" + "This is an unpublished consumer release candidate. Training revision/best-epoch provenance, " + "weight/data redistribution notices, full task metrics and cross-OS qualification remain release gates. " + "CODE_LICENSE covers repository code only; it does not assert a license for model weights or source images.\n" + ) + profiles = { + "torch": {"model": "models/pytorch/best.pt", "files": ["models/pytorch/best.pt"]}, + "onnx": {"model": "models/onnx/model.onnx", "files": ["models/onnx/model.onnx", "models/onnx/model.onnx.data"]}, + "onnx-embedding": { + "model": "models/onnx-embedding/model.onnx", + "files": ["models/onnx-embedding/model.onnx", "models/onnx-embedding/model.onnx.data"], + }, + } + manifest = { + "schema": "mambo-release-v1", + "model_id": "MAMBO_v3-candidate", + "artifact_revision": 1, + "package_version": "0.3.0", + "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", + "profiles": profiles, + "embedding": {"dimension": 1280, "stage": "normalized preclassification"}, + "origins": origins, + "files": {}, + } + for path in sorted(root.rglob("*")): + if path.is_file(): + manifest["files"][path.relative_to(root).as_posix()] = {"size": path.stat().st_size, "sha256": sha256(path)} + write_json("release.json", manifest) + root.rename(destination) + print(destination) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("source", type=Path) + parser.add_argument("destination", type=Path) + args = parser.parse_args() + build(args.source, args.destination) diff --git a/dev/releases/mambo_v3/check_portable_install.py b/dev/releases/mambo_v3/check_portable_install.py new file mode 100644 index 0000000..2007511 --- /dev/null +++ b/dev/releases/mambo_v3/check_portable_install.py @@ -0,0 +1,65 @@ +"""Qualify an installed ONNX-only runtime outside the checkout with a read-only bundle.""" + +import argparse +import hashlib +import importlib.util +import json +import os +import shutil +import socket +import sys +import tempfile +from pathlib import Path + + +def check(bundle, image): + if importlib.util.find_spec("torch") or importlib.util.find_spec("mini_trainer"): + raise AssertionError("Run this check in an ONNX-only environment without torch or mini_trainer") + from mambo_deploy import Predictor + from mambo_deploy.cli import run + + def deny_network(*args, **kwargs): + raise AssertionError("Inference attempted a Python network connection") + + socket.create_connection = deny_network + socket.socket.connect = deny_network + socket.socket.connect_ex = deny_network + original_cwd = Path.cwd() + original_argv = sys.argv + with tempfile.TemporaryDirectory(prefix="mambo-offline-") as directory: + root = Path(directory) + relocated = root / "read-only-bundle" + shutil.copytree(bundle, relocated) + files = [path for path in relocated.rglob("*") if path.is_file()] + before = {str(path.relative_to(relocated)): hashlib.sha256(path.read_bytes()).hexdigest() for path in files} + try: + for path in files: + path.chmod(0o444) + for path in [relocated, *[p for p in relocated.rglob("*") if p.is_dir()]]: + path.chmod(0o555) + os.chdir(root) + predictor = Predictor(relocated, model="europe") + plain = predictor.predict(image) + embedded, vectors = predictor.predict_with_embeddings(image) + assert plain.labels == embedded.labels and vectors.shape == (1, 1280) + sys.argv = ["mambo_predict", "-i", str(image), "--bundle", str(relocated), "--embeddings"] + run() + assert (root / "results/mini_metric.csv").is_file() + assert (root / "results/embeddings.npy").is_file() + assert before == {str(path.relative_to(relocated)): hashlib.sha256(path.read_bytes()).hexdigest() for path in files} + return {"torch_absent": True, "relocated_read_only_bundle": True, "python_network_blocked": True, "cli": True} + finally: + os.chdir(original_cwd) + sys.argv = original_argv + for path in [relocated, *[p for p in relocated.rglob("*") if p.is_dir()]]: + path.chmod(0o755) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("bundle", type=Path) + parser.add_argument("image", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + report = check(args.bundle.resolve(), args.image.resolve()) + args.output.write_text(json.dumps(report, indent=2) + "\n") diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md new file mode 100644 index 0000000..3aabcdd --- /dev/null +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -0,0 +1,91 @@ +# Portable deployment qualification — 2026-09-23 + +This increment supplies a local bundle builder, an independent `mambo_deploy` +wheel, and the `mini_trainer.deploy.Predictor` compatibility entry point. The +consumer guide is [deployment/README.md](../../../deployment/README.md). +Shared training, loading and classifier modules are unchanged. + +## Reproduce + +From the repository root, using the existing environment without syncing: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.build_bundle local-evidence/mambo-v3 local-evidence/mambo-bundle-final +uv build --project deployment --wheel --out-dir local-evidence/deployment-wheels +uv build --wheel --out-dir local-evidence/deployment-wheels +``` + +The source directory must contain the production directory named in +`inventory.toml`; the builder verifies the pinned hashes and refuses to overwrite +an existing destination. Model files stay outside Git. The bundle includes both +ONNX graphs and their external data, native weights, one ordered vocabulary, +parent mappings, preprocessing, preset lists/scopes, provenance and hashes. + +In a disposable environment, install the deployment wheel with `[onnx]`. +For native qualification also install the matching training wheel with the +chosen CPU/CUDA dependencies. For GPU ONNX use `onnxruntime-gpu` instead of the +CPU runtime, and matching CUDA/cuDNN libraries. Then run: + +```sh +python dev/releases/mambo_v3/qualify_bundle.py /path/to/bundle /path/to/flemming --device cpu --output cpu.json +python dev/releases/mambo_v3/qualify_bundle.py /path/to/bundle /path/to/flemming --device cuda:0 --output gpu.json +``` + +The runner selects the first JPEG in each of the first four sorted species +directories, records image hashes, and checks full/Europe/custom lists. It checks +prediction/embedding mode agreement, finite unit-length 1280-dimensional vectors, +and that class filtering does not change embeddings. Across backends it reports +label agreement, without imposing micro-numerical equivalence. + +In a separate ONNX-only environment with neither torch nor mini_trainer installed: + +```sh +python -I dev/releases/mambo_v3/check_portable_install.py /path/to/bundle /path/to/image.jpg --output portable.json +``` + +This copies the bundle to a temporary location, removes write permissions, changes +working directory, blocks Python socket connections, runs both API modes and the +CLI, and verifies bundle contents remain unchanged. This is not an OS-level +network isolation test; platform-native runtime networking is outside that guard. + +## Observed result + +| Check | Result | +|---|---| +| CPU PyTorch / ONNX, four images | 4/4 identical top-1 species/genus/family tuples for full, Europe and shared custom lists | +| RTX 3080 Ti Laptop GPU, same images | 4/4 identical tuples for those three list modes | +| Predictions with/without embeddings | Same top-1 tuples within each backend on CPU and GPU | +| Embeddings | `[4,1280]`, finite, unit length; unaffected by class mask | +| ONNX CUDA provider | CUDA first in both sessions; individual CPU operators remain allowed | +| Clean ONNX installation | No torch/training package; relocated read-only bundle, API and CLI passed | +| Minimal training wheel | Imports, CLI help without deployment extra, training, reload and prediction passed | +| Focused release suite | 28 tests passed, including eight deployment contracts | +| Static checks | Ruff, formatting and both import contracts passed; standalone deployment package checked separately | + +The optional broader `dev/check.sh all` run was interrupted while still in +unrelated benchmark tests after approximately five minutes; it did not establish +a complete full-suite result. No failure had been reported before interruption. + +CPU comparison used PyTorch 2.12.0, ONNX Runtime 1.29.0, NumPy 2.4.6 and +Pillow 12.2.0. GPU qualification used the CUDA 13.0 PyTorch build and ONNX +Runtime GPU 1.30.0. Its temporary environment reused existing training dependencies; +it was not a clean GPU dependency-resolution test. The independent CPU-only install +used ONNX Runtime 1.30.0, NumPy 2.5.3 and Pillow 12.3.0, Python 3.13.7 on Linux. +Local JSON evidence is under `local-evidence/mambo-v3/*deployment-qualification.json` +and `portable-install-qualification.json` (ignored). + +The shared NumPy preprocessing implements the recorded campaign recipe. A sampled +comparison to the original torchvision path differed by at most one uint8 level +at resize rounding boundaries; it is not a byte-exact preprocessing claim. + +## Remaining release work + +Full Flemming metrics and CPU/GPU latency, throughput and memory measurements are +next. Use outer evaluation batches to bound accumulated result memory. Include +out-of-vocabulary truth in all-image metrics and report covered-image metrics +separately. In-domain evaluation must run on UCloud with the original test split. + +Four deterministic images establish execution contracts, not representative +accuracy, embedding quality or speed. Windows/macOS, clean CUDA installations, +additional architectures, training revision/best-epoch provenance and redistribution +notices remain unqualified. Nothing has been uploaded, tagged or promoted. diff --git a/dev/releases/mambo_v3/qualify_bundle.py b/dev/releases/mambo_v3/qualify_bundle.py new file mode 100644 index 0000000..9df711a --- /dev/null +++ b/dev/releases/mambo_v3/qualify_bundle.py @@ -0,0 +1,87 @@ +"""Small real-image backend contract check; not a performance or accuracy benchmark.""" + +import argparse +import hashlib +import importlib.metadata +import json +from pathlib import Path + +import numpy as np + + +def qualify(bundle, dataset, device, backends): + from mambo_deploy import Predictor + + if "torch" in backends: + import torch + + torch.set_num_threads(2) + images = [] + for directory in sorted(dataset.iterdir()): + if directory.is_dir() and (paths := sorted(directory.glob("*.jpg"))): + images.append(paths[0]) + if len(images) == 4: + break + if len(images) != 4: + raise ValueError("Need four species directories containing JPEGs") + report = {"device": device, "images": [], "variants": {}, "purpose": "bounded contract qualification; not a benchmark"} + for path in images: + with path.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + report["images"].append({"path": str(path), "sha256": digest}) + custom = None + for backend in backends: + predictor = Predictor(bundle, backend=backend, device=device, model="full", batch_size=2) + plain = predictor.predict(images) + embedded, vectors = predictor.predict_with_embeddings(images) + if plain.labels != embedded.labels: + raise AssertionError(f"{backend}: prediction-only and embedding graphs disagree on top-1") + if vectors.shape != (4, 1280) or not np.isfinite(vectors).all(): + raise AssertionError("Embedding shape/finite contract failed") + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + # Reuse loaded models while testing a regional mask and a custom list. + europe = predictor.bundle.file(predictor.bundle.regions["europe"]["path"]).read_text().splitlines() + predictor._apply_class_mask(europe) + regional = predictor.predict(images) + if any(item.label[0] not in europe for item in regional): + raise AssertionError("Regional filtering failed") + if custom is None: + custom = list(dict.fromkeys(item.label[0] for item in plain)) + predictor._apply_class_mask(custom) + limited, limited_vectors = predictor.predict_with_embeddings(images) + if any(item.label[0] not in custom for item in limited): + raise AssertionError("Custom filtering failed") + np.testing.assert_array_equal(vectors, limited_vectors) + report["variants"][backend] = { + "full": plain.to_dict(), + "europe": regional.to_dict(), + "custom": limited.to_dict(), + "embedding_shape": list(vectors.shape), + "prediction_modes_agree": True, + } + if backend == "onnx": + report["variants"][backend]["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} + if len(backends) == 2: + for mode in ("full", "europe", "custom"): + a, b = (report["variants"][backend][mode] for backend in backends) + report[f"{mode}_backend_top1_agreement"] = sum(x["label"] == y["label"] for x, y in zip(a, b)) / len(a) + report["versions"] = {} + for name in ("numpy", "pillow", "torch", "onnxruntime", "onnxruntime-gpu", "mambo-deploy"): + try: + report["versions"][name] = importlib.metadata.version(name) + except importlib.metadata.PackageNotFoundError: + pass + return report + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("bundle", type=Path) + parser.add_argument("dataset", type=Path) + parser.add_argument("--device", default="cpu") + parser.add_argument("--backends", nargs="+", choices=["torch", "onnx"], default=["torch", "onnx"]) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + report = qualify(args.bundle, args.dataset, args.device, args.backends) + args.output.write_text(json.dumps(report, indent=2) + "\n") + print(args.output) diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 574b8e2..37c6289 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -585,6 +585,11 @@ has been exercised. Release notes distinguish model changes from package/API cha | E — broader portability | Additional OS/browser profiles and distribution channels | Core release preserved; qualify only new boundaries | Start with **A and B**, then use C to make the release recommendation concrete. +The portable bundle and aligned inference implementation now have bounded +CPU/GPU and installed-package evidence; see the +[deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) +and [consumer guide](../deployment/README.md). The next increment is C; unresolved +training provenance and publication gates remain open. The next-training-run orchestration plan and experimental quantization are not on this release's critical path. diff --git a/mini_trainer/deploy.py b/mini_trainer/deploy.py new file mode 100644 index 0000000..e332a08 --- /dev/null +++ b/mini_trainer/deploy.py @@ -0,0 +1,86 @@ +"""MAMBO deployment compatibility entry point; shared core code remains unchanged.""" + + +def _runtime(): + try: + from mambo_deploy import Predictor + except ImportError as error: + raise ImportError("Install the matching mambo_deploy deployment wheel and provide a local MAMBO bundle") from error + return Predictor + + +class Predictor: + """Legacy native/CUDA defaults with additive bundle and backend selection.""" + + def __init__(self, device="cuda", model=None, weights=None, class_mask=None, **kwargs): + import torch + + if model is not None and weights is not None: + raise ValueError("model and weights are mutually exclusive") + if isinstance(model, str) and model.endswith((".pt", ".pth")): + weights, model = model, None + self.device = torch.device(device) + self._predictor = _runtime()( + device=str(self.device), model=model, weights=weights, class_mask=class_mask, backend=kwargs.pop("backend", "torch"), **kwargs + ) + + def _convert(self, result): + if self._predictor.backend != "torch": + return result + import torch + + from mini_trainer.hierarchical.model import HierarchicalPrediction + + class DeploymentPrediction(HierarchicalPrediction): + def _process(self, raw_prediction): + return ( + torch.as_tensor(result.logits, device=self_device), + torch.as_tensor(result.indices, device=self_device), + ) + + def _extract_confidence(self, raw_prediction): + return torch.as_tensor(result.confidence, device=self_device) + + # Preserve the native container while using the shared score and tie policy. + self_device = self.device + prediction = DeploymentPrediction( + [torch.as_tensor(rank, device=self.device) for rank in result.raw_logits], + topk=result.topk, + cls2idx=result.cls2idx, + **result.metadata, + ) + prediction.global_indices = torch.as_tensor(result.global_indices, device=self.device) + return prediction + + def predict(self, x, **kwargs): + return self._convert(self._predictor.predict(x, **kwargs)) + + def __call__(self, x, **kwargs): + return self.predict(x, **kwargs) + + def predict_with_embeddings(self, x, **kwargs): + result, embeddings = self._predictor.predict_with_embeddings(x, **kwargs) + if self._predictor.backend == "torch": + import torch + + embeddings = torch.as_tensor(embeddings, device=self.device) + return self._convert(result), embeddings + + def _apply_class_mask(self, mask): + self._predictor._apply_class_mask(mask) + + def available_presets(self): + return self._predictor.available_presets() + + +def run(): + try: + from mambo_deploy.cli import run as deploy_run + except ImportError: + from argparse import ArgumentParser + + parser = ArgumentParser(description="MAMBO local prediction. Install the matching mambo_deploy wheel for inference.") + parser.parse_args() + parser.error("Install the matching mambo_deploy wheel and provide --bundle or MAMBO_BUNDLE") + + deploy_run(default_backend="torch", default_device="cuda") diff --git a/pyproject.toml b/pyproject.toml index c4a7f07..069e97e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ Repository = "https://github.com/asgersvenning/mini_trainer" "Bug Tracker" = "https://github.com/asgersvenning/mini_trainer/issues" [project.scripts] +mambo_predict = "mini_trainer.deploy:run" mt_train = "mini_trainer.train:run" mt_predict = "mini_trainer.predict:run" mt_export = "mini_trainer.export:run" diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py new file mode 100644 index 0000000..c7f0267 --- /dev/null +++ b/tests/releases/test_deployment.py @@ -0,0 +1,146 @@ +"""Small portable inference contracts, without downloading models or importing ORT.""" + +import hashlib +import json +from pathlib import Path + +import numpy as np +import pytest + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.bundle import Bundle +from deployment.mambo_deploy.preprocessing import RECIPE, preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy + +CLASSES = {"labels": [["a", "b", "c"], ["g0", "g1"], ["f0"]], "parents": [[0, 0, 1], [0, 0]]} + + +@pytest.fixture +def bundle(tmp_path): + payloads = { + "classes.json": json.dumps(CLASSES), + "preprocessing.json": json.dumps(RECIPE), + "presets.json": json.dumps({"europe": {"path": "europe.classes", "count": 2}}), + "europe.classes": "a\nb\n", + } + manifest = { + "schema": "mambo-release-v1", + "model_id": "fixture", + "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", + "files": {}, + } + for name, value in payloads.items(): + data = value.encode() + (tmp_path / name).write_bytes(data) + manifest["files"][name] = {"size": len(data), "sha256": hashlib.sha256(data).hexdigest()} + (tmp_path / "release.json").write_text(json.dumps(manifest)) + return tmp_path + + +def test_mask_recomputes_parent_scores_and_normalization(): + leaf = np.log(np.array([[0.1, 0.2, 0.7]], dtype=np.float32)) + raw, labels, indices = hierarchy(leaf, [0, 2], CLASSES) + prediction = Prediction(raw, labels, indices) + assert prediction[0].label == ("c", "g1", "f0") + np.testing.assert_allclose(prediction[0].confidence, [0.875, 0.875, 1], rtol=1e-6) + assert prediction[0].index == (1, 1, 0) + assert prediction.global_indices.tolist() == [[[2, 1, 0]]] + + +def test_tiny_legacy_top1_fixture(): + import tomllib + + fixture = tomllib.loads((Path(__file__).parents[2] / "dev/releases/mambo_v3/compatibility.toml").read_text())["top1"] + raw = [np.array([row], dtype=np.float32) for row in fixture["logits"]] + prediction = Prediction(raw, fixture["classes"], [np.arange(len(names)) for names in fixture["classes"]]) + assert prediction[0].label == tuple(fixture["labels"]) + assert prediction[0].index == tuple(fixture["indices"]) + np.testing.assert_allclose(prediction[0].confidence, fixture["confidence"], rtol=1e-6) + assert prediction.indices.shape == tuple(fixture["array_shape"]) + + +def test_custom_list_replaces_preset_and_predictors_are_isolated(bundle): + first = Predictor(bundle, class_list=["c", "c", "a"]) + second = Predictor(bundle) + assert first.class_list == ["a", "c"] + assert second.class_list == ["a", "b"] + first._apply_class_mask(-1) + assert first.class_list == ["a", "b", "c"] + assert second.class_list == ["a", "b"] + with pytest.raises(ValueError, match="Unknown species"): + Predictor(bundle, class_list=["unknown"]) + with pytest.raises(ValueError, match="empty"): + Predictor(bundle, class_list=[]) + with pytest.raises(ValueError, match="mutually exclusive"): + Predictor(bundle, class_list=["a"], class_mask=[0]) + + +def test_hash_failure_and_escape_are_rejected(bundle): + loaded = Bundle(bundle) + with pytest.raises(ValueError, match="escapes"): + loaded.file("../outside") + (bundle / "europe.classes").write_text("c\nb\n") + with pytest.raises(ValueError, match="hash mismatch"): + Predictor(bundle) + + +def test_uint8_and_float_inputs_align_and_reject_hwc(): + image = np.arange(3 * 21 * 30, dtype=np.uint8).reshape(3, 21, 30) + np.testing.assert_array_equal(preprocess(image), preprocess(image.astype(np.float32) / 255)) + assert preprocess(image[:1]).shape == (3, 384, 384) + with pytest.raises(ValueError, match="CHW"): + preprocess(image.transpose(1, 2, 0)) + with pytest.raises(ValueError, match="finite"): + preprocess(np.full_like(image, np.nan, dtype=np.float32)) + + +def test_batches_embeddings_and_masked_output_contract(bundle, monkeypatch): + predictor = Predictor(bundle, batch_size=2, class_list=["c"]) + seen = [] + + def fake_backend(images, embeddings): + seen.append(len(images)) + return np.tile([1.0, 2.0, 3.0], (len(images), 1)), np.ones((len(images), 1280), dtype=np.float32) if embeddings else None + + monkeypatch.setattr(predictor, "_onnx", fake_backend) + images = [np.zeros((3, 4, 5), dtype=np.uint8)] * 5 + result, vectors = predictor.predict_with_embeddings(images) + assert seen == [2, 2, 1] + assert len(result) == 5 and vectors.shape == (5, 1280) + assert result[0].label == ("c", "g1", "f0") + assert result[0].confidence == (1.0, 1.0, 1.0) + with pytest.raises(ValueError, match="No images"): + predictor.predict([]) + + +def test_topk_serialization_handles_nested_items(tmp_path): + classes = {"labels": [["a", "b"], ["g0", "g1"], ["f0", "f1"]], "parents": [[0, 1], [0, 1]]} + raw, labels, indices = hierarchy(np.array([[1.0, 2.0]], dtype=np.float32), [0, 1], classes) + result = Prediction(raw, labels, indices, topk=2) + result.save(tmp_path / "result.json") + assert json.loads((tmp_path / "result.json").read_text())["results"][0][0]["label"] == ["b", "g1", "f1"] + with pytest.raises(ValueError, match="smallest retained rank"): + Prediction(raw, labels, indices, topk=3) + + +def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeypatch): + import torch + + from mini_trainer import deploy + from mini_trainer.hierarchical.model import HierarchicalPrediction + + monkeypatch.setattr(deploy, "_runtime", lambda: Predictor) + facade = deploy.Predictor(device="cpu", bundle=bundle) + # Nonnegative logits summing to one must still be treated as logits. + raw = [np.array([[0.2, 0.8]], dtype=np.float32), np.array([[1.0]], dtype=np.float32), np.array([[1.0]], dtype=np.float32)] + result = Prediction(raw, [["a", "b"], ["g0"], ["f0"]], [np.arange(2), np.arange(1), np.arange(1)]) + monkeypatch.setattr(facade._predictor, "predict", lambda *args, **kwargs: result) + monkeypatch.setattr( + facade._predictor, "predict_with_embeddings", lambda *args, **kwargs: (result, np.ones((1, 1280), dtype=np.float32)) + ) + native = facade("unused") + assert isinstance(native, HierarchicalPrediction) + assert native[0].label == result[0].label + np.testing.assert_array_equal(native.confidence.numpy(), result.confidence) + assert isinstance(native.indices, torch.Tensor) + assert isinstance(facade.predict_with_embeddings("unused")[1], torch.Tensor) From 9941ce1e0af95ce221446699e6702f4cf8901adb Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 16:19:09 +0200 Subject: [PATCH 022/221] fix: include deployment license in wheel --- deployment/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index 3b28198..b3fdcf1 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -6,6 +6,7 @@ requires-python = ">=3.12" dependencies = ["numpy>=2.4", "pillow>=11"] readme = "README.md" license = "MIT" +license-files = ["LICENSE"] [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] From 15e0e6092711d39ed1fad7bfde00fdb313d93178 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 16:24:12 +0200 Subject: [PATCH 023/221] feat: add updated European presets with shared occurrence thresholds --- deployment/README.md | 3 + dev/releases/mambo_v3/build_bundle.py | 3 +- dev/releases/mambo_v3/build_presets.py | 38 +- dev/releases/mambo_v3/plot_overlap.py | 10 +- dev/releases/mambo_v3/preset-definitions.toml | 10 + dev/releases/mambo_v3/preset-manifest.toml | 22 +- dev/releases/mambo_v3/preset-updates.toml | 12 + .../mambo_v3/presets/europe_v3.classes | 3086 ++++++ .../mambo_v3/presets/north_europe_v3.classes | 2199 ++++ docs/assets/preset-overlap.svg | 9515 ++++++++++------- docs/assets/preset-overlap.tsv | 96 + docs/model-presets.md | 15 +- tests/releases/test_mambo_presets.py | 19 + 13 files changed, 11097 insertions(+), 3931 deletions(-) create mode 100644 dev/releases/mambo_v3/preset-updates.toml create mode 100644 dev/releases/mambo_v3/presets/europe_v3.classes create mode 100644 dev/releases/mambo_v3/presets/north_europe_v3.classes diff --git a/deployment/README.md b/deployment/README.md index 3730918..9227acc 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -29,6 +29,9 @@ it with `class_list=["GBIF_SPECIES_ID", ...]` (also accepts a UTF-8 filename). Unknown IDs and empty lists are errors; duplicates are removed and model ordering is preserved. Filtering happens before ranking and hierarchy normalization. See PRESETS.md in the bundle for short geographic scopes and provisional cutoffs. +Use `europe_v3` or `north_europe_v3` for updated lists requiring at least 3 regional +and 25 global records. `europe` (the default) and `north_europe` retain their legacy +membership. The updated versions use the same explicit geographic filters. Presets retain species with qualifying occurrence records; they are practical prediction filters, not maps of native distributions or exhaustive checklists. diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py index e13b1c9..95e62e8 100644 --- a/dev/releases/mambo_v3/build_bundle.py +++ b/dev/releases/mambo_v3/build_bundle.py @@ -84,6 +84,7 @@ def write_json(relative, data): } write_json("presets.json", regions) shutil.copyfile(HERE / "preset-definitions.toml", root / "PRESET_DEFINITIONS.toml") + shutil.copyfile(HERE / "preset-updates.toml", root / "PRESET_UPDATES.toml") shutil.copyfile(HERE.parents[2] / "deployment/README.md", root / "README.md") shutil.copyfile(HERE.parents[2] / "LICENSE", root / "CODE_LICENSE") lines = [ @@ -118,7 +119,7 @@ def write_json(relative, data): manifest = { "schema": "mambo-release-v1", "model_id": "MAMBO_v3-candidate", - "artifact_revision": 1, + "artifact_revision": 2, "package_version": "0.3.0", "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", "profiles": profiles, diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 8866a11..f1f38fd 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -156,9 +156,11 @@ def build(metadata, evidence_root, write=False): "Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, " "and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty.", "", - "Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope " - "have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. " - "These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending.", + "`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. " + "Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. " + "Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; " + "that equivalence does not establish equivalence at the lower threshold, so they are not silently added. " + "The deployment API discovers all lists from the bundle; preset-specific quality evaluation remains pending.", "", "## Presets", "", @@ -166,7 +168,7 @@ def build(metadata, evidence_root, write=False): "| --- | ---: | ---: | ---: | ---: | --- |", f"| `full` | {len(vocabulary):,} | None | None | — | All species in the pinned model. |", ] - summaries = {} + summaries, memberships = {}, {} for name, rule in definitions["presets"].items(): region_minimum = rule.get("minimum_regional_rows", regional_minimum) world_minimum = rule.get("minimum_global_rows", global_minimum) @@ -199,6 +201,34 @@ def build(metadata, evidence_root, write=False): f"| `{name}` | {len(labels):,} | {region_minimum} | {world_minimum or 'None'} | {selected.num_rows:,} | {rule['scope']} |" ) summaries[name] = len(labels) + memberships[name] = labels + changes = ["schema_version = 1", f'source_sha256 = "{source["sha256"]}"'] + documentation.extend( + [ + "", + "## Updated European presets", + "", + "| Updated ID | Legacy ID | Added species | Removed species |", + "| --- | --- | ---: | ---: |", + ] + ) + for legacy in ("europe", "north_europe"): + updated = f"{legacy}_v3" + old_set, new_set = set(memberships[legacy]), set(memberships[updated]) + added = [label for label in memberships[updated] if label not in old_set] + removed = [label for label in memberships[legacy] if label not in new_set] + changes.extend( + ["", f"[updates.{updated}]", f'legacy = "{legacy}"', f"added = {json.dumps(added)}", f"removed = {json.dumps(removed)}"] + ) + documentation.append(f"| `{updated}` | `{legacy}` | {len(added)} | {len(removed)} |") + documentation.extend( + [ + "", + "The [exact added/removed species IDs](../dev/releases/mambo_v3/preset-updates.toml) " + "retain model order. Geographic filters are unchanged; only qualification thresholds differ.", + ] + ) + outputs[HERE / "preset-updates.toml"] = ("\n".join(changes) + "\n").encode() documentation.extend( [ "", diff --git a/dev/releases/mambo_v3/plot_overlap.py b/dev/releases/mambo_v3/plot_overlap.py index 4134cca..4e90765 100644 --- a/dev/releases/mambo_v3/plot_overlap.py +++ b/dev/releases/mambo_v3/plot_overlap.py @@ -11,7 +11,7 @@ # Presentation groups, not mutually exclusive biogeographic classifications. DISPLAY_GROUPS = ( ("north_america", "central_america", "caribbean", "south_america"), - ("arctic", "europe", "north_europe"), + ("arctic", "europe", "europe_v3", "north_europe", "north_europe_v3"), ("mediterranean", "middle_east"), ("africa", "north_africa", "subsaharan_africa", "madagascar"), ("asia", "south_asia", "southeast_asia", "east_asia", "japan"), @@ -56,7 +56,13 @@ def render(preview=None): writer.writerow([left, right, shared, f"{jaccard * 100:.6f}", f"{coverage * 100:.6f}"]) plt.rcParams.update({"svg.hashsalt": "mambo-preset-overlap-v1", "font.size": 9}) fig, axes = plt.subplots(1, 2, figsize=(27, 15), layout="constrained") - display_names = {"oceania_excluding_australia_nz": "oceania excl. AU/NZ"} + display_names = { + "oceania_excluding_australia_nz": "oceania excl. AU/NZ", + "europe": "Europe (legacy)", + "europe_v3": "Europe (updated)", + "north_europe": "N. Europe (legacy)", + "north_europe_v3": "N. Europe (updated)", + } labels = [f"{display_names.get(name, name.replace('_', ' '))} ({len(sets[name]):,})" for name in names] for ax, metric, title in zip(axes, (1, 2), ("Jaccard: shared / union (%)", "Coverage: row species also in column (%)")): values = np.array([[cell[metric] * 100 for cell in row] for row in scores]) diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index c26e989..0a82fe8 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -19,6 +19,16 @@ label = "Northern Europe (legacy)" countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged)." +[presets.europe_v3] +label = "Europe (updated)" +continents = ["EUROPE"] +scope = "Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only." + +[presets.north_europe_v3] +label = "Northern Europe (updated)" +countries = ["DE", "DK", "EE", "FI", "LT", "LV", "NL", "NO", "PL", "SE"] +scope = "Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition." + [presets.australia] label = "Australia including Tasmania" countries = ["AU"] diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index 1f68ed0..ecab853 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -2,7 +2,7 @@ schema_version = 2 qualification_status = "provisional; pending final release decision" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "5ce9da8954624c5d41ed411c5339ffb4b8cc75fdadcc689a3e8c54ad2c2fa700" +definitions_sha256 = "4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97" minimum_regional_rows = 3 minimum_global_rows = 25 @@ -26,6 +26,26 @@ selected_rows = 768497 species_before_threshold = 2291 sha256 = "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" +[presets.europe_v3] +path = "presets/europe_v3.classes" +count = 3086 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 2079617 +species_before_threshold = 3132 +sha256 = "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + +[presets.north_europe_v3] +path = "presets/north_europe_v3.classes" +count = 2199 +minimum_regional_rows = 3 +minimum_global_rows = 25 +excluded_by_global_gate_after_regional = 0 +selected_rows = 768497 +species_before_threshold = 2291 +sha256 = "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + [presets.australia] path = "presets/australia.classes" count = 1874 diff --git a/dev/releases/mambo_v3/preset-updates.toml b/dev/releases/mambo_v3/preset-updates.toml new file mode 100644 index 0000000..edecb64 --- /dev/null +++ b/dev/releases/mambo_v3/preset-updates.toml @@ -0,0 +1,12 @@ +schema_version = 1 +source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" + +[updates.europe_v3] +legacy = "europe" +added = ["1830284", "1831458", "1797344", "8355390", "1808348", "4532549", "1872873", "1873890", "1878370", "1736499", "1741747", "10442031", "1926550", "1926722", "1929402", "1931561", "1933647", "4535280", "1920247", "5805036", "5137908", "1960484", "1967324", "5146894", "1982533", "1986623", "4524223", "6133619", "7657419", "4524998", "5149664", "1945589", "5977247", "5142042", "1771997", "1772977", "1779633", "1784349", "1787438", "9803522", "1894164", "4535630", "5128353", "9804158", "4299370", "1905396", "1911633", "4535596", "4299565", "5134693", "1918627", "1918688", "4535539", "5133088", "5120577", "1843602", "5127521", "1890346", "1890487", "6133232", "9137965", "5127656", "4526094", "1858930", "1860026", "1866556", "5124716", "1862692", "8254441", "1833500", "4534796", "1803108"] +removed = [] + +[updates.north_europe_v3] +legacy = "north_europe" +added = ["1732521", "1845607", "1847061", "4528547", "1848378", "1850497", "1850570", "4528529", "1852159", "7908344", "1777631", "1797374", "8355390", "4532351", "1803163", "1803824", "1816881", "8326103", "7657803", "4532565", "8148822", "8165185", "6097254", "5113030", "4522890", "4522896", "1860765", "1852787", "5125104", "1872848", "1872904", "1873215", "1873890", "1874295", "1875376", "1875429", "1875682", "1876357", "1876512", "1877038", "1878471", "1890065", "4525803", "5102642", "1738373", "1739471", "1740155", "1740762", "10838422", "1741747", "5103613", "1744526", "5103227", "7387466", "1926054", "5140214", "5140244", "7664111", "1933583", "1920237", "5137708", "1748922", "1750131", "1750166", "1955694", "1957706", "1957746", "1961037", "1962972", "1964437", "1965197", "1965640", "1967006", "1967265", "1967452", "1968990", "1969339", "5144782", "5145729", "8014296", "9627567", "1971847", "5146599", "5146842", "5147441", "7973517", "8414310", "1977967", "10712554", "4524902", "1982770", "1982867", "1986623", "1987737", "1988064", "1988642", "7555991", "1990582", "7657419", "9563355", "4524914", "4524955", "9220953", "5149569", "8851663", "5149717", "5149784", "1949929", "5142394", "7683096", "1869467", "1759097", "5109670", "1764673", "8352161", "1766718", "1766721", "1767511", "1767608", "8045644", "1768308", "1769543", "1770353", "1770416", "1770530", "1770573", "8393221", "1771997", "1772977", "1773062", "1773484", "1774347", "1775172", "5110593", "1776067", "5772222", "1780954", "1782319", "1782579", "1782872", "5112160", "1785887", "1786360", "1786515", "1786619", "1787213", "1787631", "4534086", "4533882", "4534162", "1790671", "1792431", "1794599", "1795068", "1774283", "4534681", "4534685", "8108800", "1770773", "1771169", "1773901", "1773904", "4532203", "4532206", "1894164", "5882039", "6231906", "9804158", "1897852", "1911093", "4299565", "5134569", "5134693", "5134837", "7700512", "8047165", "8167638", "8233062", "1918669", "8035998", "8001799", "1902143", "1941864", "5120577", "1731263", "4525641", "1878798", "1879408", "1881126", "9819403", "1881208", "1883067", "1883634", "1885937", "1886951", "1888484", "1890540", "1890679", "1890701", "1890823", "1890898", "1891013", "1891167", "1891453", "1884240", "1884365", "1854824", "4526094", "1841460", "1841989", "1861510", "1862765", "1860108", "5119506", "1754183", "8254441", "1857068", "1857143", "1858100", "1833500", "1834589", "5114311"] +removed = [] diff --git a/dev/releases/mambo_v3/presets/europe_v3.classes b/dev/releases/mambo_v3/presets/europe_v3.classes new file mode 100644 index 0000000..4d553b2 --- /dev/null +++ b/dev/releases/mambo_v3/presets/europe_v3.classes @@ -0,0 +1,3086 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732072 +1732416 +1732419 +1732452 +1732457 +1732521 +1732565 +1732662 +1732680 +1732685 +1732697 +1733258 +1733484 +4525266 +4525268 +4525270 +4525273 +1733620 +1733755 +5101678 +5101717 +5101745 +5769191 +1734453 +1734704 +1734794 +1734826 +5102287 +11529292 +1831861 +1831863 +1831890 +1845270 +1845368 +1845548 +1845565 +1845607 +4529566 +4528100 +1846374 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847111 +1847407 +4528547 +1847572 +9262981 +1847956 +9546514 +1848150 +1848202 +10450501 +1848219 +9868978 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848741 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849531 +1849539 +1849552 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +1850640 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852165 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +8871600 +9182336 +5769272 +7623903 +8912441 +5879654 +7448174 +4525610 +1751852 +1861395 +1845866 +1845952 +1845962 +1845965 +1845982 +1839094 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830221 +1830241 +1830243 +1830262 +1830266 +1830271 +1830284 +4525476 +4525487 +1831458 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11513018 +11571523 +12151997 +12160125 +12022449 +7908344 +1761111 +1764531 +1769103 +1769897 +7701550 +8837162 +1772793 +4532500 +1777289 +8141741 +1777631 +1777695 +1779399 +1780149 +1780150 +8193562 +1783882 +1786980 +1786985 +1788553 +1790692 +1790816 +5113078 +5113084 +5113234 +9310626 +1792210 +1797178 +1797258 +1797276 +1797333 +1797344 +1797349 +1797367 +1797374 +1797429 +1797454 +1797479 +1797527 +1797542 +4532461 +4532471 +4532473 +8016905 +8355390 +8756768 +1798346 +1798408 +4532493 +1798449 +1798481 +1798504 +1798594 +1798802 +1798807 +4532351 +4532352 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +1805110 +1805155 +4532608 +7874258 +1807969 +1808195 +1808348 +1808440 +1808450 +1808752 +5115701 +5115771 +5115777 +1809210 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814552 +1814630 +1814653 +5117399 +5117400 +1816881 +1817797 +8326103 +1819050 +1819145 +4532293 +4532297 +1819268 +8407461 +1819699 +9331464 +1819873 +1819928 +6122092 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532614 +4532549 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +11033463 +11812181 +5115854 +5115872 +5115874 +5116475 +8038357 +8165185 +6097254 +5116698 +1805535 +9198767 +1788635 +4532395 +4532405 +4532408 +4532412 +1780869 +8000103 +4532534 +1768626 +4532508 +4532510 +1760244 +1760246 +5113030 +5113036 +1821856 +1821911 +1819170 +1812394 +8237987 +4532366 +4532453 +1820039 +1772822 +1771772 +1771779 +1777517 +1860979 +1860983 +1860987 +1860994 +1861011 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +1860857 +7767114 +7851302 +7961640 +1992378 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +1852831 +9473121 +4529630 +5125075 +5125104 +8416348 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869595 +1869656 +1869803 +1869852 +1869858 +1869976 +1870202 +1870249 +1870250 +1870450 +1870650 +1870988 +5125306 +1871160 +1871212 +1871217 +1871252 +1871264 +1871407 +4531402 +4531409 +1871451 +4531365 +4531376 +1871683 +1871698 +1871783 +1871826 +4531427 +7673242 +10787705 +1872848 +1872873 +1872901 +1872904 +1873048 +1873051 +1873079 +1873215 +1873411 +4530947 +4530951 +1873776 +1873780 +1873783 +4531237 +4531264 +1873890 +5125689 +1874168 +1874192 +1874204 +1874211 +1874229 +1874269 +1874280 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875409 +1875429 +4531242 +1875631 +1875633 +1875680 +1875682 +1875687 +4531284 +1875827 +1875830 +1875865 +1875869 +1875918 +1875940 +1875952 +1875958 +1876063 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877345 +1877368 +4531246 +9111961 +5126052 +1877941 +1877986 +1877988 +1878067 +4531417 +4531425 +4531429 +1878197 +1878350 +1878370 +1878470 +1878471 +1878490 +1878500 +1878586 +1890065 +5884888 +11728049 +1877035 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +4525846 +1941330 +1941348 +1941377 +1941437 +10309794 +12211069 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736499 +1736511 +1736528 +1736560 +1736565 +1736601 +1736623 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737131 +1737342 +1737368 +1737413 +1737437 +1737491 +1737497 +1737509 +4530608 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739151 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741258 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741747 +1741752 +1741756 +1741765 +4530424 +1741820 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +11846897 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +1743782 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745013 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745781 +1745787 +1745788 +1745816 +1745827 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +5104597 +6097234 +7588222 +9242559 +1748456 +1748720 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771229 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771255 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +1920864 +1920892 +10556522 +1921466 +1921521 +1921590 +7387466 +1922197 +10442031 +10854079 +1922311 +1922343 +8016522 +1922572 +1922584 +4535092 +1922937 +1923019 +1923037 +12165672 +5138298 +5138492 +5138543 +5138561 +5714680 +1923796 +1924077 +1924082 +1924097 +5138681 +1924713 +11470119 +1924867 +1925221 +1925233 +7354189 +4535172 +1925381 +1925410 +1925454 +1925918 +1925962 +1926054 +9816676 +1926324 +1926385 +1926550 +1926722 +1926861 +5882965 +1928248 +5139040 +5139156 +1928945 +1928960 +1929270 +1929402 +1929659 +1929697 +5792092 +8356768 +1930110 +1930904 +4535106 +1931179 +1931509 +1931561 +1931779 +1931788 +1932393 +1932411 +1932473 +1932517 +1932551 +1932752 +1932960 +1932976 +5140214 +5140244 +5140436 +5140443 +5772702 +5772749 +7634721 +7664111 +9954885 +1933583 +1933647 +1933649 +1933793 +1926166 +1926260 +11874998 +1933095 +1933126 +1933138 +1933163 +1933204 +1924494 +1752383 +4522322 +5105339 +1919221 +1919223 +1919317 +1919320 +1919330 +1919333 +4535280 +4535285 +7981372 +1919698 +1919706 +1919712 +1919716 +1919966 +1920237 +1920247 +1920258 +1920259 +1920395 +1920491 +1920494 +1920496 +1920498 +1920502 +1920506 +1920509 +1920512 +4535307 +5805036 +5137902 +5137903 +5137908 +5804895 +1920707 +1920709 +1920712 +4535271 +5137578 +5137582 +5137595 +5137612 +5137636 +5137677 +5137682 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +1750326 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1855235 +1855241 +1954490 +1954563 +5143380 +5143453 +5143477 +1955479 +1955484 +5143651 +1955694 +1955856 +4524588 +5143675 +5143697 +1956440 +1956524 +1956599 +1956639 +1956710 +4525068 +1957266 +1957286 +1957300 +1957556 +1957565 +1957570 +1957572 +1957579 +1957583 +1957611 +1957632 +1957673 +1957706 +1957718 +1957746 +1957791 +1957816 +1957822 +4524320 +8172949 +1957845 +1957852 +1957854 +4524421 +4524424 +4524426 +5143944 +5143947 +1958024 +11554842 +1958065 +1958323 +1958515 +1959383 +1959395 +1959423 +1959436 +1959461 +1959467 +1959473 +1959682 +1959735 +1959799 +1959876 +1959914 +1959919 +1960484 +1960617 +1961013 +1961037 +1961040 +1961068 +1961190 +7741315 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +10004969 +1962584 +4524568 +1962636 +1962860 +1962961 +1962972 +1962990 +1963011 +4302252 +1963168 +1963306 +1963446 +1963463 +1963587 +1963709 +1963710 +1963755 +1964189 +1964191 +1964195 +1964401 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +1964836 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966358 +1966854 +1966886 +5144534 +1967003 +1967006 +1967011 +1967025 +5144543 +1967245 +1967265 +1967273 +1967324 +1967452 +1967597 +1967803 +1967815 +1967873 +7681733 +1968678 +1968686 +1968837 +1968867 +11598540 +1968990 +1969291 +1969339 +1969463 +1969954 +1969958 +4523707 +1970213 +1970227 +1970243 +1970259 +1970284 +5144677 +5144721 +5144782 +5144787 +5144805 +5144880 +5144900 +5145009 +5145136 +5145186 +5145255 +5145260 +5145269 +5145409 +5145502 +5145522 +5145729 +7753668 +8014296 +9627567 +1971847 +1971852 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972374 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973300 +1973323 +1973327 +1973414 +7996464 +5146420 +5146440 +5146476 +5146496 +5146510 +5146525 +5146528 +5146559 +5146599 +5146601 +5146611 +5146651 +5146659 +5146677 +5146693 +5146720 +5146762 +5146774 +5146786 +5146815 +5146833 +5146837 +5146842 +5146852 +5146862 +5146883 +5146894 +5146899 +5146908 +5146920 +5146927 +5146946 +5146961 +5147002 +5147030 +5147038 +5147039 +5147041 +5147043 +5147058 +5147062 +5147071 +5147099 +5147145 +5147150 +5147155 +5147165 +5147171 +5147193 +5147208 +5147212 +5147232 +5147245 +5147259 +5147287 +5147319 +5147354 +5147395 +5147415 +5147437 +5147441 +5147478 +5147492 +5147513 +5147516 +5147534 +5147560 +7919880 +7988195 +8067894 +8366158 +1975198 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +8955497 +5147794 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +1977300 +5769028 +5148247 +5148248 +1977962 +1977967 +1977971 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +5148264 +1978770 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +1980525 +8421569 +1981696 +1981998 +1982406 +1982458 +1982500 +1982525 +1982529 +1982533 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982779 +1982790 +1982791 +1982838 +1982867 +1982885 +1982918 +1982924 +1983000 +1983034 +1983039 +1983052 +1983062 +1983101 +1983111 +1983170 +1983260 +1983288 +1983387 +1983393 +1983441 +1983442 +1983525 +1983528 +1983548 +1983558 +1983648 +1983705 +1983755 +1983756 +1983888 +1983896 +1983922 +1983967 +1983997 +1983999 +1984033 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +7905361 +1985522 +1985573 +1985734 +1985742 +1985760 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986604 +1986623 +1986877 +5149315 +5768880 +1987527 +9137631 +1987578 +4525091 +4525093 +4525097 +4525103 +6118530 +1987650 +1987737 +1987744 +4524221 +4524223 +1988007 +1988019 +1988064 +4524513 +1988390 +1988506 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +1988762 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990533 +1990551 +1990582 +5149474 +1991179 +1991371 +1991532 +5149836 +5149839 +5149843 +1991846 +1992066 +8180900 +6133619 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +11654024 +7507369 +9414984 +9563355 +1989594 +4524740 +7990739 +4523556 +4523560 +4523564 +4524052 +4524054 +4523486 +4523461 +4524998 +4525034 +4524376 +4524822 +4524712 +4523522 +4522974 +4524541 +4523519 +4524070 +4524072 +4524403 +4524793 +4524914 +4524922 +4524929 +4524951 +4524955 +4524961 +4524962 +4525078 +9220953 +9249651 +5144190 +5146412 +5768597 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149664 +5149665 +5149667 +5149704 +5149717 +5149746 +5149768 +5149780 +5149784 +5149787 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +4535386 +8178854 +8277078 +8073674 +8133678 +8273661 +1945569 +1945589 +1945877 +1946661 +7389824 +1947306 +1947335 +5142338 +5142352 +1949715 +1949784 +1949794 +1949850 +1949852 +1949877 +1949929 +1949938 +1949954 +1950006 +5142394 +5142599 +7683096 +8109173 +5977247 +8270406 +7633472 +10715410 +4535396 +5142006 +5142032 +5142042 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759159 +4533211 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +7444489 +9060267 +1760593 +1794361 +4533957 +4534225 +8708745 +1760857 +1760867 +1760887 +1760891 +1760893 +4533255 +5108958 +1761041 +1761392 +1761438 +1761735 +1761865 +1762244 +1762271 +1762383 +1762608 +1762680 +5109498 +5109506 +5109523 +5109554 +5109599 +5109614 +5109646 +5109661 +5109670 +5109722 +1763610 +1763697 +8167743 +1764174 +1764673 +1764716 +1764986 +1764987 +1765010 +1765011 +1765017 +1765038 +1765044 +1765069 +1765073 +4534245 +4534252 +4534257 +4534275 +5109843 +5109931 +8352161 +1765604 +1765767 +1765954 +1766086 +1766128 +1766130 +1766131 +1766137 +1766210 +4534691 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766773 +1766784 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +1767674 +5772169 +5772171 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +7388922 +7768584 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110211 +5110213 +1768702 +1768727 +1768729 +1768735 +1768741 +1768749 +1768771 +1768815 +1768819 +8150836 +1769029 +1769057 +1769505 +1769519 +1769543 +1769566 +1769944 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +4532986 +1771997 +1772013 +1772169 +1772179 +1772255 +5772129 +1772940 +1772956 +1772977 +1773062 +1773163 +1773231 +1773309 +1773328 +1773377 +1773484 +1773572 +8222049 +1774272 +1774347 +1774859 +1774873 +1774878 +1774959 +1775112 +4534046 +4534052 +4534057 +1775172 +1775299 +1775301 +1775329 +5110593 +5772269 +5883881 +1775891 +1775913 +4534719 +1776067 +5110670 +1776207 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110818 +5110858 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778524 +1778596 +5111147 +5111481 +5111501 +5111513 +5111574 +5772222 +8253467 +1779258 +1779435 +1779633 +1779641 +1779690 +1780378 +4533937 +1780926 +1780928 +1780954 +1781008 +1781016 +4533285 +4533325 +7664771 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +1783090 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5112388 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783777 +1783855 +1783971 +1784349 +1784359 +1784812 +1784824 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785329 +1785361 +1785883 +1785887 +1785888 +1785895 +1786007 +1786017 +8292872 +1786360 +1786515 +1786619 +1786651 +1786658 +1786664 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787279 +1787381 +1787400 +1787417 +1787438 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787825 +1787841 +1787859 +1787905 +4534086 +7917033 +1788425 +1788522 +1788734 +9216200 +4534011 +4534017 +1788917 +1789071 +1789073 +1789076 +1789086 +1789250 +1789255 +1789267 +9805848 +1789403 +4533882 +4533924 +1789481 +1789491 +1789553 +1789580 +4534162 +4534166 +4534170 +4534194 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +1789957 +10068024 +10113008 +10290084 +10312073 +10904813 +1789982 +1789984 +1790002 +1790023 +1790059 +1790062 +1790072 +1790084 +1790153 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791384 +1791422 +1791784 +1791846 +1792061 +1792292 +1792300 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1792645 +1792768 +5113370 +1792996 +1793212 +7918000 +1793877 +1793986 +1794102 +1794351 +1794532 +1794534 +1794590 +1794599 +1794609 +1795068 +4532908 +1795180 +1795215 +1795282 +7869346 +1795483 +7922810 +1795854 +1795862 +1795896 +1795900 +1795930 +1795946 +1795957 +1796007 +1796032 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +4532700 +9803522 +1796423 +1796451 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798922 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +6097260 +7712384 +7981386 +8304206 +8742426 +9069966 +4534389 +4534207 +10638451 +4532273 +4532283 +4532811 +4534663 +4534669 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4534360 +4533123 +4533125 +4533128 +4533136 +4533661 +4533663 +4533671 +4534408 +4534458 +4534533 +5883985 +8021109 +11478679 +5110644 +7654770 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +9038042 +4534675 +4534681 +4534683 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +9549172 +1770772 +1770773 +1770821 +1770869 +1770880 +1771040 +1771143 +1771169 +1771204 +1771214 +1771245 +4533695 +4533714 +4533720 +7940536 +1765751 +5113847 +5113853 +5772309 +5108660 +5108761 +4534525 +1773901 +1773904 +4533344 +4533345 +4533347 +4533360 +4533362 +4532203 +4532206 +4532216 +4532236 +4532239 +4532253 +4532260 +4532264 +4532266 +8103163 +8363507 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823604 +1823726 +1824113 +1824121 +1824131 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +4534826 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119193 +5119245 +1827645 +1828162 +4534872 +6201790 +1893137 +1894164 +1894268 +5882039 +7712938 +1894714 +4535614 +4535627 +4535630 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +4535819 +9519321 +5128323 +5128353 +5128357 +6231906 +9804158 +1895875 +1896841 +1897852 +1898286 +1898290 +4299368 +4299370 +1898521 +1898544 +5129378 +1901850 +1902533 +1902749 +8140883 +8189761 +4535689 +6221746 +1905383 +1905396 +1906552 +8208583 +1909398 +1909838 +1911093 +1911112 +1911122 +1911168 +1911182 +1911278 +1911298 +1911461 +7728366 +8396242 +1911633 +4535592 +4535596 +7809779 +8078362 +1912325 +1912372 +1912395 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5133990 +5772890 +7428726 +7799370 +8810143 +4535581 +5134098 +5134301 +8312017 +1913175 +1913178 +1913328 +1913351 +1913371 +11046092 +5134469 +5134543 +5134569 +5134583 +5134607 +5134621 +5134659 +5134667 +5134682 +5134686 +5134693 +5134815 +5134837 +5134884 +5135191 +5772948 +7509928 +7700512 +7738295 +7791190 +7791558 +7798382 +7940299 +8047165 +8137978 +8167638 +8214814 +8233062 +8262258 +8295666 +8298764 +8314088 +1916347 +1916352 +1916410 +1916412 +1916458 +1916554 +7854318 +1918627 +1918632 +1918669 +1918688 +1918694 +1918733 +1918736 +1918776 +1918789 +1918795 +1918843 +1918854 +1918859 +1918868 +4535539 +8035998 +8176911 +7622059 +7988274 +8404037 +4535618 +4535620 +4535510 +5130587 +5130682 +7762841 +5131096 +5131142 +5132183 +8001799 +5133088 +7642610 +5135513 +5135546 +1896957 +5131910 +8138711 +1902143 +1902169 +1902182 +1899349 +1899433 +1899737 +1899818 +6229058 +7768674 +7867379 +7934873 +8168644 +8393082 +1951557 +4527355 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1952816 +1951713 +1951725 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +5976910 +1735193 +1941864 +5120465 +5120577 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842097 +1842196 +5120396 +1842485 +1842542 +4301036 +1842690 +1842695 +4529738 +1843602 +8292351 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878804 +1878845 +1878862 +1878879 +1878895 +1878904 +1878907 +1878939 +1878951 +4531506 +4531517 +1879001 +1879227 +1879252 +1879408 +1879427 +1879452 +1879471 +5126212 +5126217 +1879534 +1879630 +1879655 +1879691 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1880818 +1880907 +1880931 +4531643 +1881122 +1881126 +1881151 +9819403 +4531687 +1881208 +1881362 +1881393 +1881404 +1881418 +1881603 +4531713 +1881834 +4531975 +1882158 +1882165 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1882965 +1883067 +1883161 +1883168 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885931 +1885937 +1886084 +1886251 +1886320 +8223165 +1886579 +1886587 +1886648 +7562564 +1886951 +1887290 +4531670 +1887701 +4531968 +10922411 +1888463 +1888484 +1888491 +1888579 +1888619 +1888623 +1888733 +1888736 +1888743 +1888759 +1888826 +1889287 +9228024 +1889905 +1889942 +5127521 +1890187 +1890346 +1890487 +1890522 +1890534 +1890540 +1890576 +1890656 +1890670 +1890679 +1890699 +1890701 +1890703 +1890724 +1890772 +1890776 +1890823 +1890898 +1890957 +1890975 +1891013 +1891059 +1891167 +1891171 +1891177 +1891186 +1891190 +1891217 +1891326 +1891366 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +4532024 +8411753 +1892242 +1892245 +1892476 +9674732 +1884240 +1884254 +1884255 +1884273 +1884274 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +6133232 +11761541 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +9137965 +1889833 +5127656 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +8218441 +4532150 +4532155 +4532160 +5771880 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854259 +1854287 +1854347 +5122439 +1854615 +1854792 +1854824 +1854849 +1854237 +4526094 +4526050 +7717983 +1858637 +1858674 +1858698 +1858762 +1858775 +1858778 +1858873 +1858930 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860026 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +12046692 +1973467 +4525132 +5123221 +6097269 +5123042 +5124512 +1866356 +1866556 +1866568 +5124911 +1867820 +1867928 +7764232 +5124716 +7734292 +1841460 +1841476 +1841616 +1841675 +1841706 +1841813 +1841821 +1841946 +1841989 +1861510 +1861644 +1861673 +1861797 +1861842 +1861862 +1862293 +1862401 +1862517 +1862572 +1862578 +1862580 +1862692 +1862701 +1862719 +1862765 +1862774 +1862837 +1862894 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124151 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830534 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5105929 +5106115 +5106160 +5106249 +5106539 +5106894 +5107128 +5107219 +5107640 +5107644 +5107829 +7410701 +7586742 +7674502 +7761138 +7778368 +7870336 +7903078 +7909858 +7955974 +8048904 +8102790 +8111395 +8158342 +8201251 +8348761 +8426357 +8964772 +4522753 +1939647 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +8254441 +10055273 +1855452 +1855799 +1856005 +1856105 +1856289 +5122798 +1856384 +1856595 +1856620 +1856658 +1856663 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857581 +1857626 +9790007 +1857785 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +1858321 +1938050 +1938131 +8225376 +1936969 +1938214 +4690079 +1938520 +1938810 +1938955 +5141262 +5141288 +5141291 +5141297 +5802625 +1856503 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833500 +1833626 +1833627 +4528658 +1834589 +1834775 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1835422 +1836899 +1837172 +4528702 +1838969 +1839770 +1839851 +1839878 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +5114409 +4534796 +4534798 +4534757 +1801051 +1801896 +4534773 +4534776 +4534778 +4534779 +4534782 +4534787 +4534788 +4534792 +9894093 +1802280 +1803012 +1803060 +1803073 +1803108 +4534762 +4534766 +4534767 +4534769 +5114311 +5114316 +5114327 +8244266 diff --git a/dev/releases/mambo_v3/presets/north_europe_v3.classes b/dev/releases/mambo_v3/presets/north_europe_v3.classes new file mode 100644 index 0000000..bdd9e14 --- /dev/null +++ b/dev/releases/mambo_v3/presets/north_europe_v3.classes @@ -0,0 +1,2199 @@ +1934693 +1860621 +1860628 +4522795 +1860659 +1860664 +1860668 +1860671 +1860688 +1860709 +1860711 +4522933 +5123582 +1732063 +1732416 +1732452 +1732521 +1732565 +1732662 +1732685 +1733258 +1733484 +4525266 +4525273 +5101678 +5101745 +5769191 +1734453 +1734704 +1734826 +5102287 +1845270 +1845368 +1845565 +1845607 +4529566 +4528100 +1846604 +1846657 +1846715 +1846729 +1846916 +1847061 +1847097 +1847407 +4528547 +1847572 +9262981 +1847956 +1848150 +1848202 +10450501 +1848219 +1848273 +1848356 +1848378 +1848426 +4528539 +1848596 +1848610 +1848636 +1848657 +1848669 +1848690 +1848713 +1848714 +1848717 +1848730 +1848753 +1848864 +1848868 +1849104 +1849267 +1849273 +1849284 +1849294 +1849477 +11052757 +11080751 +1849630 +1849856 +1849897 +1849924 +1850008 +1850042 +1850045 +1850076 +1850077 +1850106 +1850238 +1850246 +11576787 +1850279 +1850302 +1850335 +1850386 +1850394 +1850450 +1850497 +1850506 +4527903 +1850522 +1850533 +1850538 +1850570 +4528529 +1850781 +1850971 +1851000 +1851010 +1851011 +5122037 +5122113 +1851203 +1851220 +1851337 +1851347 +1851555 +5122206 +4527972 +1852150 +1852159 +1852177 +1852311 +1852430 +11287091 +4527957 +1848920 +1829533 +1829588 +1829776 +1829785 +1829799 +1829823 +1829974 +4525354 +1828637 +6097236 +5769272 +5879654 +7448174 +4525610 +1861395 +1845866 +1845962 +1845965 +1841261 +1830838 +1830843 +1830122 +1830125 +1830131 +1830144 +1830147 +1830152 +1830186 +1830191 +1830207 +1830241 +1830243 +1830262 +1830266 +1830271 +4525476 +4525487 +1831643 +1841296 +4528593 +8271010 +1853723 +5880147 +9734171 +11418741 +11571523 +7908344 +1761111 +1764531 +1769103 +1769897 +1772793 +4532500 +1777631 +1780150 +1790692 +1790816 +5113078 +5113084 +5113234 +1797178 +1797258 +1797276 +1797367 +1797374 +1797479 +4532471 +8355390 +8756768 +1798346 +1798408 +4532493 +1798449 +1798504 +1798594 +1798802 +1798807 +4532351 +4532357 +1799708 +1803163 +1803824 +1804071 +1804906 +7874258 +1807969 +1808450 +1808752 +5115771 +5115777 +1810099 +5116416 +1813114 +5117189 +5117200 +7656811 +1814630 +5117399 +5117400 +1816881 +8326103 +1819145 +4532293 +4532297 +1819268 +8407461 +1819873 +7657803 +8361973 +1820372 +1820406 +12253343 +5884571 +7596232 +5771982 +6097214 +4532544 +4532516 +4532532 +4532565 +12089608 +8148822 +11962292 +12135372 +5115874 +5116475 +8165185 +6097254 +5116698 +1788635 +4532405 +4532408 +4532412 +8000103 +4532534 +4532508 +1760246 +5113030 +5113036 +1821856 +1821911 +1812394 +8237987 +1820039 +1771772 +1860979 +1860983 +1860987 +1861031 +4522911 +4522916 +4522919 +4522922 +12318291 +4522886 +4522890 +4522891 +4522896 +1860765 +1860768 +1860852 +7767114 +7851302 +7961640 +1992504 +1852956 +1852978 +1835432 +1835433 +1835456 +1835457 +9724183 +1837343 +1837420 +1837429 +1837464 +1837515 +4529064 +7958169 +8015612 +1839293 +1839296 +1840297 +1840301 +1840345 +1840346 +1840360 +1840371 +1840380 +1840408 +1840478 +1840483 +1840485 +1840555 +1840566 +1840570 +1840581 +1840596 +1840621 +4529186 +5119808 +1831752 +1852751 +1852787 +9473121 +4529630 +5125104 +1751236 +1751290 +1751298 +1751299 +1751368 +1751457 +4535884 +4535904 +1860408 +4525177 +5123339 +5123394 +5769164 +5123461 +5123474 +1751207 +1751216 +1869803 +1869852 +1869976 +1870202 +1870249 +1870250 +1870450 +1870988 +1871160 +1871252 +1871407 +4531402 +1871698 +1871826 +10787705 +1872848 +1872901 +1872904 +1873048 +1873079 +1873215 +1873411 +1873776 +1873780 +1873783 +4531264 +1873890 +5125689 +1874192 +1874204 +1874211 +1874295 +4531145 +4531147 +4531158 +1874375 +1874743 +9782192 +1875008 +1875120 +8219149 +1875327 +1875376 +1875429 +4531242 +1875631 +1875633 +1875682 +4531284 +1875827 +1875865 +1875869 +1875918 +1875940 +1875952 +1876329 +1876357 +1876409 +1876512 +1876542 +1876623 +1876854 +1877038 +1877310 +1877341 +1877368 +4531246 +5126052 +1877941 +1877988 +1878470 +1878471 +1878490 +1878586 +1890065 +11728049 +1872315 +1748805 +1940158 +4525859 +4525884 +5141493 +5141501 +1940504 +1940510 +1940575 +1940639 +1940644 +1940717 +1940744 +1940768 +4525777 +4525803 +1940807 +1940838 +1941377 +1941437 +1939879 +1736377 +1736412 +1736425 +1736447 +1736484 +1736511 +1736528 +1736560 +1736565 +1736601 +5102628 +5102642 +1736727 +1736800 +1736898 +1736904 +1736905 +1736906 +1736945 +4530406 +4529931 +1737342 +1737368 +1737437 +1737491 +1737497 +7466487 +1737524 +1737526 +1737533 +1737542 +1737552 +1737650 +1737753 +1737775 +1737776 +1737783 +1737847 +1737893 +1737924 +4530002 +8186212 +1738050 +1738163 +1738222 +1738245 +1738317 +1738322 +1738337 +1738373 +1738422 +1738429 +1738514 +8420632 +8869900 +5102931 +5102951 +1738687 +1738700 +1738722 +1738777 +1738794 +1738839 +1738883 +1739042 +1739043 +8086347 +1739128 +1739272 +1739284 +1739290 +1739337 +1739377 +1739381 +5102982 +1739449 +1739451 +1739461 +1739471 +1739605 +1739748 +1739797 +1739816 +1739819 +1739833 +1739919 +1739922 +1739931 +1739980 +1739999 +1740005 +1740053 +1740069 +1740116 +1740120 +1740155 +1740174 +1740183 +1740185 +1740305 +1740374 +1740392 +7797515 +8215326 +1740482 +1740518 +1740533 +1740567 +1740570 +1740623 +8094357 +1740762 +1741056 +1741147 +1741253 +1741340 +1741341 +1741368 +4530151 +8345820 +5103066 +5771357 +1741545 +1741551 +10838422 +1741590 +1741593 +1741615 +1741633 +1741634 +1741667 +1741747 +1741752 +1741756 +1741765 +4530424 +10807169 +11093909 +1742106 +1742142 +1742185 +1742263 +1742346 +1742402 +5103451 +5103502 +5103613 +5103736 +5103948 +5771350 +7975250 +1743196 +8313553 +5103998 +7661023 +1743453 +1743475 +7877231 +1743532 +1743588 +1743604 +1743613 +5104056 +6097235 +1743641 +1743643 +1743710 +1743714 +4530214 +1743730 +1743768 +1743775 +4529900 +4529908 +4529915 +1743828 +1743856 +1743862 +1743867 +1743898 +1744071 +1744136 +1744180 +1744224 +4530632 +1744416 +1744498 +1744526 +1744542 +1744588 +1744593 +1744693 +1744699 +1744709 +1744714 +1744728 +1744731 +1744739 +1744742 +1744748 +1744763 +1744777 +1744782 +1744789 +1744808 +1744810 +1744860 +1744896 +1744901 +7964262 +1745079 +10844862 +1745131 +1745558 +1745561 +1745579 +1745600 +1745630 +1745634 +1745636 +1745643 +1745659 +1745676 +1745678 +1745705 +1745724 +1745725 +1745737 +1745756 +1745762 +1745771 +1745787 +1745788 +1745816 +1745830 +8162538 +8369868 +1745925 +1746027 +8424972 +1746174 +1746413 +1746440 +1746613 +1746644 +1746666 +1746689 +1746775 +1746832 +1746856 +1746876 +1746910 +1747050 +1747141 +5104442 +1747738 +4530138 +5104558 +1748203 +1748321 +6097234 +7588222 +9242559 +1748456 +5104641 +8691947 +10580256 +5103121 +5103176 +5103181 +5103185 +5103227 +5771227 +5771230 +5771232 +5771236 +5771239 +5771241 +5771243 +5771249 +5771256 +5771258 +5771259 +1831780 +4525500 +4525503 +4525505 +4525510 +4525530 +4525540 +4525547 +4525557 +4525562 +1920851 +7387466 +1922311 +1922343 +8016522 +1922584 +1922937 +5138543 +5138561 +5714680 +1923796 +1924097 +5138681 +1925221 +1925233 +4535172 +1925454 +1925918 +1925962 +1926054 +1926324 +1926861 +5882965 +1928248 +5139156 +1928945 +1929270 +1929659 +1929697 +8356768 +1930110 +1931179 +1931779 +1932411 +1932960 +5140214 +5140244 +5140436 +7634721 +7664111 +1933583 +1933793 +1926260 +1933095 +1933138 +1924494 +4522322 +5105339 +1919712 +1920237 +1920259 +1920491 +1920494 +1920496 +1920506 +4535307 +5137903 +5804895 +1920712 +5137582 +5137595 +5137612 +5137636 +5137695 +5137706 +5137708 +8203812 +1920218 +1748890 +1748922 +1748942 +1749050 +1749070 +1749164 +1749449 +1749661 +1749713 +1749744 +1749846 +1749869 +1749908 +1749921 +1749929 +1749936 +1749948 +1749954 +1749959 +1749975 +1750051 +1750076 +1750097 +1750131 +1750143 +1750159 +1750166 +1750288 +5104772 +5104781 +5104797 +5104829 +5104882 +5104891 +5104903 +5104927 +5104940 +5105054 +5105088 +5105106 +5105158 +5976947 +1751051 +5104759 +1749596 +1749608 +1749635 +8741260 +1735532 +4527339 +4527342 +1731826 +1731837 +1731860 +1954563 +5143380 +5143453 +5143477 +5143651 +1955694 +5143675 +5143697 +1956440 +1956524 +1956599 +1956710 +4525068 +1957266 +1957300 +1957570 +1957572 +1957632 +1957706 +1957718 +1957746 +1957816 +1957845 +1957852 +1957854 +4524421 +4524426 +5143944 +5143947 +1958024 +1958323 +1959383 +1959395 +1959467 +1959682 +1959735 +1959914 +1959919 +1960617 +1961037 +1961040 +1961068 +1961190 +1962204 +1962265 +1962268 +1962434 +1962516 +9812211 +1962636 +1962860 +1962972 +1962990 +1963011 +4302252 +1963306 +1963446 +1963463 +1964191 +1964195 +1964437 +1964471 +1964637 +1964653 +1964657 +8361848 +5144426 +1965166 +1965197 +1965208 +1965345 +1965640 +1965763 +1965777 +1965795 +1965810 +1965825 +1965841 +1965913 +1965996 +1966017 +1966351 +1966886 +5144534 +1967006 +1967011 +5144543 +1967245 +1967265 +1967273 +1967452 +1967597 +1967815 +1967873 +7681733 +1968678 +1968867 +11598540 +1968990 +1969291 +1969339 +1969954 +1970213 +1970227 +1970284 +5144677 +5144721 +5144782 +5144805 +5144900 +5145009 +5145136 +5145186 +5145260 +5145269 +5145409 +5145729 +7753668 +8014296 +9627567 +1971847 +1971858 +1971888 +1971986 +1972120 +1972185 +1972187 +1972234 +1972250 +1972278 +1972342 +1972377 +5145870 +5145965 +7541913 +7624494 +7960566 +1972434 +1972449 +1973414 +5146496 +5146510 +5146559 +5146599 +5146611 +5146659 +5146677 +5146762 +5146837 +5146842 +5146883 +5146946 +5146961 +5147038 +5147039 +5147062 +5147150 +5147171 +5147193 +5147208 +5147232 +5147245 +5147354 +5147441 +5147478 +7988195 +5147608 +5147638 +1975341 +1975546 +1975553 +1975571 +1975733 +8329661 +1975793 +8160782 +1975897 +1975903 +1976163 +5147681 +6097233 +7973517 +8414310 +1976993 +1977003 +1977007 +1977068 +4523725 +5147827 +5147834 +5769028 +5148247 +5148248 +1977967 +1978056 +1978065 +1978114 +1978375 +1978445 +4524636 +4524638 +10712554 +4524890 +4524902 +1978776 +1978821 +1978977 +5148286 +1979308 +1979430 +1979473 +1979781 +5148394 +5148424 +5148436 +5148462 +5148475 +5148486 +5148487 +1980521 +8421569 +1981696 +1982406 +1982500 +1982525 +1982529 +1982541 +1982542 +1982592 +1982636 +1982671 +1982746 +1982770 +1982791 +1982838 +1982867 +1982885 +1983000 +1983052 +1983111 +1983170 +1983260 +1983288 +1983387 +1983441 +1983442 +1983525 +1983548 +1983558 +1983648 +1983705 +1983755 +1983888 +1983896 +1983922 +1983997 +1983999 +1984117 +7752082 +7993353 +8015895 +8026858 +8262357 +8394261 +1984734 +1984942 +1984949 +1984954 +1985522 +1986052 +1986056 +1986157 +1986166 +1986171 +1986191 +1986220 +1986367 +1986452 +1986522 +1986575 +1986623 +5149315 +5768880 +1987527 +1987578 +1987737 +1987744 +4524221 +1988064 +1988593 +1988602 +1988642 +1988684 +7555991 +8388883 +5149414 +5149438 +1988881 +1989428 +1990066 +1990150 +1990551 +1990582 +5149474 +1991179 +1991371 +5149836 +5149839 +1992066 +5880512 +5880533 +5880545 +5880550 +5880552 +5880559 +5880563 +7657419 +8237343 +8632989 +5769062 +5769068 +5769072 +7429212 +9414984 +9563355 +4524740 +4523556 +4523560 +4523564 +4524054 +4524376 +4524822 +4523522 +4524070 +4524072 +4524403 +4524793 +4524914 +4524951 +4524955 +4525078 +9220953 +5144190 +5146412 +5149499 +5149569 +7769543 +8851663 +4523880 +4523883 +4523885 +5149659 +5149665 +5149704 +5149717 +5149746 +5149768 +5149784 +5149820 +7443518 +5146342 +5146379 +4302268 +4524393 +5141677 +1943397 +8277078 +8073674 +8133678 +8273661 +1945569 +7389824 +1947306 +1947335 +1949784 +1949794 +1949852 +1949929 +1949938 +1950006 +5142394 +7683096 +8109173 +8270406 +7633472 +1869467 +1869478 +1869489 +1869512 +9359597 +5769709 +1735844 +1735855 +9400895 +9530977 +10963226 +10982815 +5109821 +1758878 +1759055 +1759069 +1759079 +1759083 +1759097 +4533952 +7972792 +1759153 +1759407 +1759597 +1759620 +1759661 +1759667 +1759668 +1759673 +1759686 +1760104 +1760593 +1794361 +4534225 +8708745 +1760857 +1760887 +1760891 +1761041 +1761438 +1761735 +1761865 +1762244 +1762608 +5109498 +5109506 +5109523 +5109599 +5109614 +5109661 +5109670 +5109722 +1763610 +1764673 +1764987 +1765011 +1765017 +1765044 +4534245 +4534257 +8352161 +1765767 +1765954 +1766128 +1766130 +1766131 +1766137 +1766210 +1766274 +1766410 +1766418 +1766510 +7895336 +1766646 +1766718 +1766721 +1766741 +1766814 +1767511 +1767597 +1767608 +1767625 +1767655 +5772172 +5772176 +5772178 +5772180 +5772186 +5772196 +5772199 +5772202 +5772205 +5772206 +5772210 +8045644 +1768117 +1768150 +5110200 +1768308 +1768341 +5110213 +1768702 +1768729 +1768749 +1768771 +1768815 +1769057 +1769505 +1769519 +1769543 +1769566 +1769958 +1770150 +1770307 +1770353 +1770416 +1770477 +1770530 +1770573 +4532696 +8393221 +1771385 +1771391 +7725644 +1771509 +1771531 +1771997 +1772013 +1772169 +1772179 +5772129 +1772940 +1772956 +1772977 +1773062 +1773163 +1773309 +1773328 +1773484 +1774347 +4534046 +4534052 +4534057 +1775172 +5110593 +5772269 +1775891 +4534719 +1776067 +5110670 +1776330 +1776371 +5772446 +1776619 +1776862 +4534463 +1777253 +5110871 +5110885 +1778074 +4534299 +1778127 +1778143 +1778517 +1778596 +5111574 +5772222 +8253467 +1779435 +1779641 +1779690 +1780378 +1780926 +1780954 +1781008 +4533285 +1781694 +1782319 +1782560 +1782579 +1782615 +1782627 +1782672 +1782726 +1782727 +1782763 +1782777 +1782841 +1782872 +1782927 +1782948 +1783016 +1783037 +1783043 +1783045 +5112155 +5112160 +5112254 +5112283 +5112291 +5112336 +5112345 +5714973 +5715004 +5772349 +5772351 +7921916 +8043500 +1783855 +1784359 +1784812 +1784826 +1784853 +4534290 +1785185 +1785286 +4532886 +4532888 +4532890 +1785887 +1785888 +1785895 +1786007 +8292872 +1786360 +1786515 +1786619 +1786902 +1786936 +1787064 +1787112 +1787213 +1787267 +1787400 +1787504 +1787590 +1787610 +1787631 +1787697 +1787751 +1787770 +1787841 +1787859 +4534086 +1788425 +1788522 +4534011 +1788917 +1789076 +1789086 +1789267 +4533882 +1789481 +1789553 +1789580 +4534162 +4534166 +1789694 +1789695 +1789730 +1789745 +1789753 +1789755 +1789783 +1789785 +1789840 +1789849 +10068024 +10113008 +10312073 +10904813 +1789982 +1790002 +1790062 +1790072 +1790084 +1790160 +4533115 +8047343 +9092175 +1790361 +1790364 +9174377 +1790625 +1790671 +1791422 +1791784 +1792061 +1792292 +1792335 +1792377 +1792379 +1792383 +1792411 +1792414 +1792418 +1792426 +1792431 +1792449 +1792475 +1793877 +1793986 +1794102 +1794590 +1794599 +1795068 +1795215 +1795282 +7869346 +1795854 +1795930 +1795946 +1795957 +1796007 +1796117 +1796139 +1796145 +1796169 +1796188 +4534485 +4534486 +7438067 +8007222 +1796217 +7780930 +1796463 +8105817 +1796678 +4533431 +4533433 +4533442 +4533444 +4533446 +1798372 +11992983 +1798916 +1798931 +1798971 +1798974 +1798984 +1799132 +1799135 +1799701 +1799799 +1800004 +1800032 +7981386 +8742426 +4534389 +4534207 +10638451 +4532811 +4533273 +4534540 +8890502 +9135821 +4534038 +4533202 +4534398 +6544687 +4534538 +4533128 +4533136 +4533661 +4533671 +4534408 +4534458 +4534533 +5883985 +11478679 +5110644 +1774283 +1774285 +1779334 +5114198 +1763072 +5772063 +4534681 +4534685 +4534686 +8108800 +1771634 +1771650 +1771678 +1771698 +8581601 +1770772 +1770773 +1770869 +1770880 +1771040 +1771169 +1771204 +1771214 +1771245 +4533714 +7940536 +5113847 +5772309 +5108761 +4534525 +1773901 +1773904 +4533347 +4533360 +4532203 +4532206 +4532239 +4532253 +1822346 +1822587 +1822610 +1822613 +1822787 +1822796 +1822819 +1822830 +1823726 +1824113 +7875265 +1825064 +1825077 +1825083 +4534909 +4534914 +1825156 +1825176 +5118892 +5118904 +7624468 +7937573 +8397564 +1825539 +1825971 +1825983 +1826022 +1826033 +5118996 +1827125 +5119143 +5119245 +1827645 +1828162 +4534872 +1894164 +1894268 +5882039 +7712938 +1894714 +4535614 +4535632 +4535636 +8049830 +1894840 +4535827 +4535809 +4535817 +5128323 +5128357 +6231906 +9804158 +1895875 +1896841 +1897852 +1898286 +4299368 +1898544 +1902533 +1902749 +8140883 +6221746 +1905383 +8208583 +1909398 +1911093 +1911112 +1911168 +1911278 +1911461 +7728366 +7809779 +8078362 +1912325 +1912372 +1912470 +4299535 +4299565 +4299576 +4299597 +4299599 +5772890 +7428726 +7799370 +8810143 +5134098 +1913175 +1913178 +1913328 +1913351 +5134469 +5134569 +5134667 +5134682 +5134693 +5134815 +5134837 +5135191 +7700512 +7738295 +7791190 +7791558 +7798382 +8047165 +8167638 +8233062 +8298764 +8314088 +7854318 +1918669 +1918868 +8035998 +8176911 +7622059 +4535510 +5130587 +5130682 +7762841 +5132183 +8001799 +5135513 +5131910 +8138711 +1902143 +1902169 +1899433 +7768674 +7934873 +8168644 +8393082 +1951557 +5142870 +1951649 +1952014 +1952062 +1952130 +1952229 +5143048 +1952449 +1952532 +5143129 +5143147 +1952806 +1952812 +1951713 +1832819 +1832853 +1832862 +1832915 +1832927 +1832936 +1833096 +1833159 +5880257 +5880258 +6097224 +6097225 +6097228 +1853064 +1853079 +4529248 +1941864 +5120465 +5120577 +5120668 +5120675 +5120767 +5121040 +5121046 +5121177 +5121244 +5121517 +5121613 +5121737 +8273859 +1842196 +5120396 +1842485 +1842542 +1842690 +1842695 +5101394 +1730978 +1731263 +4525641 +1731598 +1872368 +1878782 +1878798 +1878862 +1878879 +1878895 +1878907 +1878939 +4531506 +4531517 +1879252 +1879408 +1879452 +5126212 +5126217 +1879534 +1879630 +1879655 +1879703 +1879731 +1879735 +1879765 +10915497 +1879970 +1880040 +1880062 +1880064 +1880094 +1880104 +1880138 +1880139 +1880140 +1880143 +1881126 +1881151 +9819403 +4531687 +1881208 +1881603 +4531713 +1881834 +4531975 +1882158 +1882210 +1882437 +1882459 +1882557 +1882729 +5126834 +8325294 +1882905 +1883067 +1883161 +1883386 +1883634 +4531690 +1884212 +4531708 +1884465 +4532122 +1884970 +1885937 +1886084 +1886320 +8223165 +1886579 +1886587 +1886951 +1887290 +1887701 +4531968 +10922411 +1888484 +1888579 +1888733 +1888743 +1888759 +1888826 +1889287 +1889942 +1890187 +1890522 +1890534 +1890540 +1890576 +1890656 +1890679 +1890699 +1890701 +1890703 +1890772 +1890823 +1890898 +1891013 +1891059 +1891167 +1891326 +1891386 +1891426 +1891453 +1891473 +1891493 +1891494 +4532022 +1892242 +9674732 +1884240 +1884255 +1884273 +1884280 +1884312 +1884332 +1884365 +1884370 +1884403 +5884851 +5126675 +5126680 +7446048 +8532380 +8537359 +8823068 +8856895 +8858121 +9100030 +9101339 +1889833 +1887108 +1887173 +1887177 +1887178 +4532050 +4532057 +4532088 +4532095 +4532097 +6121184 +4532160 +1846107 +1846111 +1846112 +1846133 +1846141 +1846149 +1846159 +1846210 +1846219 +1846236 +4528813 +4528818 +1830879 +1830937 +1830962 +1831002 +1831009 +1831128 +1831136 +1831168 +4525443 +4525448 +5122293 +1853587 +4526048 +1854202 +1854287 +1854347 +5122439 +1854792 +1854824 +1854849 +1854237 +4526094 +4526050 +7717983 +1858637 +1858698 +1858762 +1858775 +1858778 +1858873 +1859046 +1859100 +1859177 +4536292 +1859285 +1859305 +1859471 +1859480 +1859488 +1859534 +1859952 +1860063 +1860076 +4536472 +4536483 +7642240 +8200050 +1973467 +5123221 +5123042 +1866568 +5124911 +1867820 +7734292 +1841460 +1841616 +1841675 +1841813 +1841821 +1841989 +1861510 +1861644 +1861797 +1861862 +1862578 +1862580 +1862719 +1862765 +1862837 +5123922 +5124007 +5124029 +1864161 +1864358 +1864377 +5124143 +5124233 +1864652 +1993419 +1939432 +4525189 +1860108 +5119506 +5119513 +1830361 +1830372 +1830374 +1830380 +1830407 +1830408 +1830410 +1830457 +4525369 +1830498 +4525420 +4525425 +7976145 +1830537 +1830584 +1830632 +1830802 +4525364 +1754183 +1754332 +5107128 +5107219 +5107644 +5107829 +7410701 +7674502 +7761138 +7778368 +7903078 +7955974 +8158342 +8201251 +8348761 +8426357 +4522753 +1939658 +1939677 +1939680 +1939688 +1939717 +7646066 +1829322 +1829363 +8254441 +10055273 +1856005 +1856289 +1856384 +1856595 +1856620 +1856658 +1856668 +1856686 +1856691 +1856701 +1856730 +1856768 +1856772 +1856867 +1857068 +1857143 +1857577 +1857626 +9790007 +1857828 +1857829 +1857856 +1857863 +1857878 +1857924 +1857978 +1858074 +1858100 +1858113 +1858163 +8225376 +1938214 +1938520 +1938810 +1858531 +1838691 +1838811 +1838838 +1838905 +1838911 +4528692 +4528694 +1833500 +1833626 +4528658 +1834589 +1835031 +5770913 +1835156 +1835393 +1835396 +1835407 +1836899 +1837172 +1838969 +1839851 +1839893 +1841158 +1841159 +5770922 +5770942 +4529032 +5119893 +1801051 +1801896 +4534779 +4534782 +1802280 +1803012 +1803073 +4534762 +4534767 +5114311 +5114327 +8244266 diff --git a/docs/assets/preset-overlap.svg b/docs/assets/preset-overlap.svg index 95550c6..6d1803d 100644 --- a/docs/assets/preset-overlap.svg +++ b/docs/assets/preset-overlap.svg @@ -29,16 +29,16 @@ z - - + +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" id="imageed5a817981" transform="scale(1 -1) translate(0 -756)" x="137.05774" y="-183.760852" width="756" height="756"/> @@ -49,12 +49,12 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - + - + - + - + - + - + - + - + - + @@ -796,13 +796,28 @@ z - + - - + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -940,15 +1118,15 @@ z - - + + - + - + - + @@ -969,15 +1147,15 @@ z - - + + - + - + - + - + + - + - + - + @@ -1046,15 +1224,15 @@ z - - + + - + - + - + @@ -1081,51 +1259,15 @@ z - - + + - + - + - - - - + @@ -1145,15 +1287,15 @@ z - - + + - + - + - + @@ -1169,15 +1311,15 @@ z - - + + - + - + - + @@ -1199,15 +1341,15 @@ z - - + + - + - + - + @@ -1233,15 +1375,15 @@ z - - + + - + - + - + @@ -1262,15 +1404,15 @@ z - - + + - + - + - + - + + - + - + - + @@ -1333,15 +1475,15 @@ z - - + + - + - + - + @@ -1362,15 +1504,15 @@ z - - + + - + - + - + @@ -1388,15 +1530,15 @@ z - - + + - + - + - + - + + - + - + - + - - - + - + - + - + @@ -1616,14 +1738,14 @@ L -3.5 0 - + - + - + - + @@ -1651,14 +1773,14 @@ L -3.5 0 - + - + - + - + @@ -1678,14 +1800,14 @@ L -3.5 0 - + - + - + - + @@ -1711,14 +1833,14 @@ L -3.5 0 - + - + - + - + @@ -1737,72 +1859,162 @@ L -3.5 0 - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1827,15 +2039,15 @@ L -3.5 0 - - + + - + - + - + @@ -1856,15 +2068,15 @@ L -3.5 0 - - + + - + - + - + @@ -1880,15 +2092,15 @@ L -3.5 0 - - + + - + - + - + @@ -1910,15 +2122,15 @@ L -3.5 0 - - + + - + - + - + @@ -1945,15 +2157,15 @@ L -3.5 0 - - + + - + - + - + @@ -1973,15 +2185,15 @@ L -3.5 0 - - + + - + - + - + @@ -1997,15 +2209,15 @@ L -3.5 0 - - + + - + - + - + @@ -2027,15 +2239,15 @@ L -3.5 0 - - + + - + - + - + @@ -2061,15 +2273,15 @@ L -3.5 0 - - + + - + - + - + @@ -2090,15 +2302,15 @@ L -3.5 0 - - + + - + - + - + @@ -2113,15 +2325,15 @@ L -3.5 0 - - + + - + - + - + @@ -2140,15 +2352,15 @@ L -3.5 0 - - + + - + - + - + @@ -2169,15 +2381,15 @@ L -3.5 0 - - + + - + - + - + @@ -2195,15 +2407,15 @@ L -3.5 0 - - + + - + - + - + @@ -2224,15 +2436,15 @@ L -3.5 0 - - + + - + - + - + @@ -2262,144 +2474,156 @@ L -3.5 0 - - - - - - - - - - - - - + - + - + - + - + - + + + + + + + + + + + + + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - + + + + + - + - + - - - - - + + + + + - - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - + + + + + + + + + + + + + - + - - - + + + - + - - - - + + + + - + - + - - - + + + - + - + - + - - - - + + + + - - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - - - - + + + + + - - - + + + + + + + + + + - + - - - - + + + + - - - - + + + + - + + + + + + + - + - - - + + + - + - - - - + + + + - - - - + + + + + - + - + - + - + - - - - + + + + - - - - + + + + + - + - + - + - + - + - + - - - - + + + + - - - - + + + + + - + - + - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - - - - - - - - - - - - + + + + + - - - + + + - + - + - + - - - - - - - - - - - - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + + + + - + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - + + + + - + - + - + - + - - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - + + - + + - - + + - + - - + + - - + - - - - + + + - - - + + + - - - + + + + - - - + + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - + + + + + + + + + - + - + - + - - - - - - - - - + + + + - + - - - + + + - - - + + + + - + - - - + + + + - - + + + - - - + + + + - - + + - + - - - - + + + + - - - - + + + + - + - - + + - + - - - + + + + - - - + + + + - - - + + + - - - + + + + - - - + + + + - - - + + + - - - + + + + - - - - + + + - - - + + + - - - + + + - + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - + + + - - - - + + + - - - + + + - - - - + + + - - + + - - + - - + + + - - - + + + + + - - + + + - - - + + + + - - - + + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + - + - - - - + + + - + - - - + + + - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + - - - - + + + - - - + + + - - - - + + + + - - + + - + + - - - + + + + - - - + + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - - + + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - - - + + + - - - - + + + - - - - + + + - - + + - + - - - - + + + + - - + + - + - - - - + + + + + - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + - - - - + + + - - - - + + + - - - - + + + - + - - - - - - - + - + - + + + + + + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + - - - - + + + + - - - + + + - - + + - + - - - + + + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - + + - - - - - + + + - - + + - - - - - + + + - - - + + + + - - - + + + - + - - - + + + + - - - - + + + + - - - - + + + - - - - + + + + - - - - - + + + + - - + + - + - - - + + + + - - - + + + + - - - - + + + + - - + + + - - - + + + - - - + + + - - - - + + + - - - - + + + - - - - + + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - + + + - - + + - - - + + - - - + + - - - - - + + + - - + + - - - - - + + + - - - + + + - - - - + + + - + - - - + + + - - - + + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + + - - + + + + - - - + + + + - - - + + + + - - - + + + + - - + + + - - - + + + + - - - + + + + - - - + + + - - - - + + + - - + + - - - - + + + + - - - + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - + - + - + - + - + - - - - - + + + + - + + + + + + + - + - - - - - + + + + - + - + + + + + + + + - - - + + + + - - - + + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + + - - + + - - - - + + + + - + - - - - + + + + - - - - - + + + + - - - - + + + + - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + + - - - - + + + + - - - - + + + - - - - - + + + + - + - - - - + + + - - - - + + + - - + + - - - - - - + + + + - - - + + + + - - - - - - - + + + + + + + - - - - + + + - - - - + + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - - + + + + - - - - + + + + - - + + + - - - + + + + - - + + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - + - - - - - + + + - - - + + + - + - + - - - + + + + - + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - + + - + - - - + + + - - - + + + - - + + - + + - - - - + + + + - - + + + - - - + + + + - - + + - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + +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" id="imagef2f65aa0a0" transform="scale(1 -1) translate(0 -756)" x="1115.7775" y="-183.760852" width="756" height="756"/> - - + + - + - + - + @@ -5969,15 +6819,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6004,15 +6854,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6031,15 +6881,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6064,15 +6914,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6090,73 +6940,163 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -6181,15 +7121,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6210,15 +7150,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6234,15 +7174,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6264,15 +7204,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6299,15 +7239,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6327,15 +7267,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6351,15 +7291,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6381,15 +7321,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6415,15 +7355,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6444,15 +7384,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6467,15 +7407,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6494,15 +7434,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6523,15 +7463,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6549,15 +7489,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6578,15 +7518,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6617,15 +7557,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6650,15 +7590,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6685,15 +7625,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6712,15 +7652,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6745,15 +7685,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6771,73 +7711,163 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + @@ -6862,15 +7892,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6891,15 +7921,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6915,15 +7945,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6945,15 +7975,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -6980,15 +8010,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -7008,15 +8038,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -7032,15 +8062,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -7062,15 +8092,15 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + - + - + - + @@ -7096,3775 +8126,4416 @@ iVBORw0KGgoAAAANSUhEUgAABCcAAAQnCAYAAADINQakAAAl9klEQVR4nO3a+69uCX3X8efZe599LnM4 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + + + - - + + + + + + - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - + + + + - - - - + + + + + - - - - + + + + + - + - + - + - + - + + + + + + + - + - - - - + + + + - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - + - + + + + + + + - + - - - - + + + + - + - + - - - - + + + + - - - - + + + + + - - - - - + + + + + - + + + + + + + + - + - - - - - + + + + + - - - - - + + + + - + + + + + + + - + - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - - + + + + - + - + - - - - + + + + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - - - - - + + + + + - - - - - + + + + - + + + + + + + + + + + + + + + - + - + - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + - - - - - - - - + - + - + - + - - - - + + + + - + - + - - - - + + + + + - - - - + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - + - + - - - - - - - - - - + + + + + - - - - + + + + - + - + - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + + + + + + + + - + - + - - - - - + + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - + + + + - - - - + + + + + - - - - - + + + + - - - - + + + + - + - + - - - - + + + + + - - - - + + + + - - - - + + + + - - - + + + + - - - - - - - - - - - + + + + - + - + - + + + + + + + - + - + + + + + + + - + - - - - - - - - - - - + + + + + - + - + - + - + - - - - - + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - + + + + + - - - + + + - + - - - - + + + + - - - + + + + - - - - + + + + + + + + + + + - - - - + + + + - + - + - - - + + + - + - - - - + + + + - - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - - - - - + + + + - - - - - + + + + + - + - + - - - - - + + + + + + - - - + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - - - - + + + + - - - - + + + + - - - - + + + + - + - + - - - + + + - + - - - - + + + + - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - - - - + + + + - - - - + + + + - + - + - + - + - - - + + + - + - + - + - + - + - - - - - - + + + + + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - @@ -10954,89 +12625,89 @@ z iVBORw0KGgoAAAANSUhEUgAAAC8AAAOiCAYAAADg4Y43AAAFUklEQVR4nO3c0W0bQRAFwdvjhuYQnH8opnOQPgoP6IqgcViMhnukzp/z9/uMenXAb0zH3+fs9u+WP8U797xHN/zY9JMvXmnOK9PxjUqleKVRqUzH36dRaRSv3Od05onilXve3f7d8mc8vlGpFK/cp1FpFK8055Xp+G4PlOKVe7poNabjG5VK8UpbpVK80plXpuO7dFKKVxqVSvFKZ16Zju/YKMUr3ZgpxSvNeWU6vi//K8UrrQfKdHx/YZXilc68UrzSmVem49sqleKVRqVSvHK/nXljOv4u5w+nF++0HijFK515ZTq+Y6MUr/RJSpmO75OUUrzSeqAUr3Tmlen4tkqleKWVWCleaT1QpuNbD5TilfvsHvntJ1+80nqgTMff73D+cHrxTqNSmY6/391Ts/3ki1calUrxSrcHynR8F61K8UrvYZXilea8Mh3fVqkUr3RjpkzHd+mkFK80KpXilVZiZTq+fzyoFK+0HijFK60HynR8o1IpXunGTCleac4r0/FtlUrxSqNSmY5vq1SKVxqVSvFKK7EyHd+/DlCKVxqVSvFKK7EyHd/tgVK80qhUildaiZXp+EalUrzSqFSm4xuVSvFKo1IpXmnOK9PxjUqleKV/wqYUrzTnlen4tkqleKVRqUzHd2yU4pXWA6V4pTmvTMc3KpXilUalUrzSnFem4xuVSvFKZ14pXmk9UKbjG5VK8cr96oJfmH7y0/GNSqV4pTOvFK/0SUqZjm9UKsUrjUqleKU5r0zHd2yU4pXWA6V4pTmvTMd3bJTildYDZTq+UakUrzQqleKV5rwyHd+xUYpXWg+U4pXmvFK8UrwyHd96oEzH9xdWKV7pzCvFK60HynR8o1IpXmlUKsUrzXllOv4+Z/f/rEw/+eKV1gOleKX1QJmO79goxSutB8p0fKNSKV7pzCvFK92YKdPxbZVK8UrxSvFKK7EyHd96oBSv9ElKKV5pPVCm4zs2SvFKZ16Zjm+rVIpXGpVK8Uo3Zsp0fOuBUrzSeqAUr9zTmTem41sPlOKV1gOleKUzr0zH3+dpPSCKVxqVynT8PX2SMopXGpVK8UpzXpmOb1QqxSu9k1KKV3qhpkzHt1UqxSutB8p0fKNSKV7p9kApXmnOK9Pxd3hSbj/54pVGpVK80plXpuO7dFKKV+7bqDSKV1oPlOn4jo1SvNJKrEzHt1UqxSutB0rxyn37DbgxHd9WqRSvtBIrxSutxMp0fKNSKV5pVCrFK815ZTq+SyeleKX1QJmO7y+sUrzSmVeKVzrzynR8x0YpXun2QCleac4r0/EdG6V4pTOvTMd3bJTilT5JKcUrzXllOv6+559u+LHpJ1+80qhUildaiZXp+EalUrzSSqwUr9xPc96Yjm+rVIpXWg+U6fg+SSnFK/fTemAUr7QeKNPxrQdK8UqXTkrxyn2f1gNiOr71QCleuZ9GpVG80pxXpuPvp0sno3il7x4o0/GNSqV4pXdSSvFK3z1QpuMblUrxSqNSKV5pzivT8b2TUopXeielFK8055Xp+F4uKMUrvYdVpuMblUrxSl/+V4pX+pGXMh3fB3CleKV3UkrxSnNemY5vq1SKV7o9UKbju2hVilfaKpXild7DKtPxrQdK8Uo/eFGKV7o9UKbjWw+U4pXWA6V4pR95KdPxXbQqxSutB8p0fH9hleKVRqVSvNKZV6bj73t0ws9NP/nilUalUrxyl+uX27fj76f1wCheuZ9n99BPP/nildYDZTr+fk6jkiheuW/rgTEd31apFK80KpXilVZiZTr+vsP9u+VP8U7rgVK8cj9nt3+3/BmPbz1Qilf+A+XwkkbDOsOdAAAAAElFTkSuQmCC" id="imagee3acf2c03e" transform="scale(1 -1) translate(0 -669.6)" x="904.32" y="-226.8" width="33.84" height="669.6"/> - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + @@ -11046,23 +12717,23 @@ L 3.5 0 - - @@ -11070,84 +12741,84 @@ z iVBORw0KGgoAAAANSUhEUgAAAC8AAAOiCAYAAADg4Y43AAAFUklEQVR4nO3c0W0bQRAFwdvjhuYQnH8opnOQPgoP6IqgcViMhnukzp/z9/uMenXAb0zH3+fs9u+WP8U797xHN/zY9JMvXmnOK9PxjUqleKVRqUzH36dRaRSv3Od05onilXve3f7d8mc8vlGpFK/cp1FpFK8055Xp+G4PlOKVe7poNabjG5VK8UpbpVK80plXpuO7dFKKVxqVSvFKZ16Zju/YKMUr3ZgpxSvNeWU6vi//K8UrrQfKdHx/YZXilc68UrzSmVem49sqleKVRqVSvHK/nXljOv4u5w+nF++0HijFK515ZTq+Y6MUr/RJSpmO75OUUrzSeqAUr3Tmlen4tkqleKWVWCleaT1QpuNbD5TilfvsHvntJ1+80nqgTMff73D+cHrxTqNSmY6/391Ts/3ki1calUrxSrcHynR8F61K8UrvYZXilea8Mh3fVqkUr3RjpkzHd+mkFK80KpXilVZiZTq+fzyoFK+0HijFK60HynR8o1IpXunGTCleac4r0/FtlUrxSqNSmY5vq1SKVxqVSvFKK7EyHd+/DlCKVxqVSvFKK7EyHd/tgVK80qhUildaiZXp+EalUrzSqFSm4xuVSvFKo1IpXmnOK9PxjUqleKV/wqYUrzTnlen4tkqleKVRqUzHd2yU4pXWA6V4pTmvTMc3KpXilUalUrzSnFem4xuVSvFKZ14pXmk9UKbjG5VK8cr96oJfmH7y0/GNSqV4pTOvFK/0SUqZjm9UKsUrjUqleKU5r0zHd2yU4pXWA6V4pTmvTMd3bJTildYDZTq+UakUrzQqleKV5rwyHd+xUYpXWg+U4pXmvFK8UrwyHd96oEzH9xdWKV7pzCvFK60HynR8o1IpXmlUKsUrzXllOv4+Z/f/rEw/+eKV1gOleKX1QJmO79goxSutB8p0fKNSKV7pzCvFK92YKdPxbZVK8UrxSvFKK7EyHd96oBSv9ElKKV5pPVCm4zs2SvFKZ16Zjm+rVIpXGpVK8Uo3Zsp0fOuBUrzSeqAUr9zTmTem41sPlOKV1gOleKUzr0zH3+dpPSCKVxqVynT8PX2SMopXGpVK8UpzXpmOb1QqxSu9k1KKV3qhpkzHt1UqxSutB8p0fKNSKV7p9kApXmnOK9Pxd3hSbj/54pVGpVK80plXpuO7dFKKV+7bqDSKV1oPlOn4jo1SvNJKrEzHt1UqxSutB0rxyn37DbgxHd9WqRSvtBIrxSutxMp0fKNSKV5pVCrFK815ZTq+SyeleKX1QJmO7y+sUrzSmVeKVzrzynR8x0YpXun2QCleac4r0/EdG6V4pTOvTMd3bJTilT5JKcUrzXllOv6+559u+LHpJ1+80qhUildaiZXp+EalUrzSSqwUr9xPc96Yjm+rVIpXWg+U6fg+SSnFK/fTemAUr7QeKNPxrQdK8UqXTkrxyn2f1gNiOr71QCleuZ9GpVG80pxXpuPvp0sno3il7x4o0/GNSqV4pXdSSvFK3z1QpuMblUrxSqNSKV5pzivT8b2TUopXeielFK8055Xp+F4uKMUrvYdVpuMblUrxSl/+V4pX+pGXMh3fB3CleKV3UkrxSnNemY5vq1SKV7o9UKbju2hVilfaKpXild7DKtPxrQdK8Uo/eFGKV7o9UKbjWw+U4pXWA6V4pR95KdPxXbQqxSutB8p0fH9hleKVRqVSvNKZV6bj73t0ws9NP/nilUalUrxyl+uX27fj76f1wCheuZ9n99BPP/nildYDZTr+fk6jkiheuW/rgTEd31apFK80KpXilVZiZTr+vsP9u+VP8U7rgVK8cj9nt3+3/BmPbz1Qilf+A+XwkkbDOsOdAAAAAElFTkSuQmCC" id="imagee3acf2c03e" transform="scale(1 -1) translate(0 -669.6)" x="1882.8" y="-226.8" width="33.84" height="669.6"/> - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + @@ -11157,18 +12828,18 @@ iVBORw0KGgoAAAANSUhEUgAAAC8AAAOiCAYAAADg4Y43AAAFUklEQVR4nO3c0W0bQRAFwdvjhuYQnH8o - - + @@ -11468,11 +13139,11 @@ z - - + + - - + + diff --git a/docs/assets/preset-overlap.tsv b/docs/assets/preset-overlap.tsv index 558b496..78136c5 100644 --- a/docs/assets/preset-overlap.tsv +++ b/docs/assets/preset-overlap.tsv @@ -5,7 +5,9 @@ north_america caribbean 648 13.926499 14.644068 north_america south_america 839 16.476826 18.960452 north_america arctic 418 7.524752 9.446328 north_america europe 356 5.026119 8.045198 +north_america europe_v3 384 5.387961 8.677966 north_america north_europe 314 5.157687 7.096045 +north_america north_europe_v3 341 5.427344 7.706215 north_america mediterranean 313 4.608363 7.073446 north_america middle_east 98 1.894452 2.214689 north_america africa 92 1.750048 2.079096 @@ -28,7 +30,9 @@ central_america caribbean 721 40.189521 43.990238 central_america south_america 1031 48.770104 62.904210 central_america arctic 22 0.695103 1.342282 central_america europe 29 0.627163 1.769372 +central_america europe_v3 36 0.767754 2.196461 central_america north_europe 12 0.332963 0.732154 +central_america north_europe_v3 17 0.444910 1.037218 central_america mediterranean 41 0.958392 2.501525 central_america middle_east 29 1.180782 1.769372 central_america africa 47 1.868045 2.867602 @@ -51,7 +55,9 @@ caribbean caribbean 876 100.000000 100.000000 caribbean south_america 781 48.782011 89.155251 caribbean arctic 1 0.041271 0.114155 caribbean europe 9 0.231899 1.027397 +caribbean europe_v3 13 0.329197 1.484018 caribbean north_europe 2 0.070151 0.228311 +caribbean north_europe_v3 5 0.162866 0.570776 caribbean mediterranean 18 0.508762 2.054795 caribbean middle_east 16 0.937866 1.826484 caribbean africa 34 1.925255 3.881279 @@ -74,7 +80,9 @@ south_america caribbean 781 48.782011 51.859230 south_america south_america 1506 100.000000 100.000000 south_america arctic 9 0.295567 0.597610 south_america europe 30 0.668151 1.992032 +south_america europe_v3 35 0.768049 2.324037 south_america north_europe 20 0.577534 1.328021 +south_america north_europe_v3 25 0.679348 1.660027 south_america mediterranean 39 0.940439 2.589641 south_america middle_east 31 1.335631 2.058433 south_america africa 51 2.143758 3.386454 @@ -97,7 +105,9 @@ arctic caribbean 1 0.041271 0.064599 arctic south_america 9 0.295567 0.581395 arctic arctic 1548 100.000000 100.000000 arctic europe 1385 43.594586 89.470284 +arctic europe_v3 1399 43.245750 90.374677 arctic north_europe 1350 62.068966 87.209302 +arctic north_europe_v3 1388 58.838491 89.664083 arctic mediterranean 1079 34.264846 69.702842 arctic middle_east 228 10.526316 14.728682 arctic africa 38 1.561216 2.454780 @@ -120,7 +130,9 @@ europe caribbean 9 0.231899 0.298607 europe south_america 30 0.668151 0.995355 europe arctic 1385 43.594586 45.952223 europe europe 3014 100.000000 100.000000 +europe europe_v3 3014 97.666883 100.000000 europe north_europe 1977 65.593895 65.593895 +europe north_europe_v3 2184 72.103004 72.461845 europe mediterranean 2583 83.027965 85.700066 europe middle_east 714 22.695486 23.689449 europe africa 306 8.425110 10.152621 @@ -137,13 +149,40 @@ europe australia 65 1.347709 2.156603 europe tasmania 9 0.274474 0.298607 europe new_zealand 57 1.685393 1.891175 europe oceania_excluding_australia_nz 21 0.627803 0.696749 +europe_v3 north_america 384 5.387961 12.443292 +europe_v3 central_america 36 0.767754 1.166559 +europe_v3 caribbean 13 0.329197 0.421257 +europe_v3 south_america 35 0.768049 1.134154 +europe_v3 arctic 1399 43.245750 45.333765 +europe_v3 europe 3014 97.666883 97.666883 +europe_v3 europe_v3 3086 100.000000 100.000000 +europe_v3 north_europe 1977 64.063513 64.063513 +europe_v3 north_europe_v3 2199 71.257291 71.257291 +europe_v3 mediterranean 2625 83.572111 85.061568 +europe_v3 middle_east 734 22.951845 23.784835 +europe_v3 africa 328 8.908202 10.628645 +europe_v3 north_africa 223 7.195870 7.226183 +europe_v3 subsaharan_africa 202 5.489130 6.545690 +europe_v3 madagascar 16 0.503620 0.518471 +europe_v3 asia 1604 27.071730 51.976669 +europe_v3 south_asia 151 3.365277 4.893065 +europe_v3 southeast_asia 38 0.805085 1.231367 +europe_v3 east_asia 1223 23.105989 39.630590 +europe_v3 japan 175 4.850333 5.670771 +europe_v3 oceania 96 1.824055 3.110823 +europe_v3 australia 73 1.493759 2.365522 +europe_v3 tasmania 10 0.298507 0.324044 +europe_v3 new_zealand 60 1.738626 1.944264 +europe_v3 oceania_excluding_australia_nz 24 0.702988 0.777706 north_europe north_america 314 5.157687 15.882650 north_europe central_america 12 0.332963 0.606980 north_europe caribbean 2 0.070151 0.101163 north_europe south_america 20 0.577534 1.011634 north_europe arctic 1350 62.068966 68.285281 north_europe europe 1977 65.593895 100.000000 +north_europe europe_v3 1977 64.063513 100.000000 north_europe north_europe 1977 100.000000 100.000000 +north_europe north_europe_v3 1977 89.904502 100.000000 north_europe mediterranean 1602 52.438625 81.031866 north_europe middle_east 406 16.797683 20.536166 north_europe africa 92 3.275187 4.653515 @@ -160,13 +199,40 @@ north_europe australia 31 0.811518 1.568032 north_europe tasmania 8 0.356665 0.404654 north_europe new_zealand 40 1.693480 2.023268 north_europe oceania_excluding_australia_nz 5 0.215146 0.252908 +north_europe_v3 north_america 341 5.427344 15.507049 +north_europe_v3 central_america 17 0.444910 0.773079 +north_europe_v3 caribbean 5 0.162866 0.227376 +north_europe_v3 south_america 25 0.679348 1.136880 +north_europe_v3 arctic 1388 58.838491 63.119600 +north_europe_v3 europe 2184 72.103004 99.317872 +north_europe_v3 europe_v3 2199 71.257291 100.000000 +north_europe_v3 north_europe 1977 89.904502 89.904502 +north_europe_v3 north_europe_v3 2199 100.000000 100.000000 +north_europe_v3 mediterranean 1788 57.845357 81.309686 +north_europe_v3 middle_east 459 17.749420 20.873124 +north_europe_v3 africa 124 4.134712 5.638927 +north_europe_v3 north_africa 89 3.793691 4.047294 +north_europe_v3 subsaharan_africa 76 2.603631 3.456116 +north_europe_v3 madagascar 6 0.260870 0.272851 +north_europe_v3 asia 1241 22.977226 56.434743 +north_europe_v3 south_asia 71 1.929348 3.228740 +north_europe_v3 southeast_asia 13 0.336962 0.591178 +north_europe_v3 east_asia 1078 23.687102 49.022283 +north_europe_v3 japan 142 5.156137 6.457481 +north_europe_v3 oceania 61 1.382906 2.773988 +north_europe_v3 australia 42 1.041925 1.909959 +north_europe_v3 tasmania 9 0.365260 0.409277 +north_europe_v3 new_zealand 47 1.823826 2.137335 +north_europe_v3 oceania_excluding_australia_nz 10 0.393546 0.454752 mediterranean north_america 313 4.608363 11.679104 mediterranean central_america 41 0.958392 1.529851 mediterranean caribbean 18 0.508762 0.671642 mediterranean south_america 39 0.940439 1.455224 mediterranean arctic 1079 34.264846 40.261194 mediterranean europe 2583 83.027965 96.380597 +mediterranean europe_v3 2625 83.572111 97.947761 mediterranean north_europe 1602 52.438625 59.776119 +mediterranean north_europe_v3 1788 57.845357 66.716418 mediterranean mediterranean 2680 100.000000 100.000000 mediterranean middle_east 776 28.218182 28.955224 mediterranean africa 355 10.926439 13.246269 @@ -189,7 +255,9 @@ middle_east caribbean 16 0.937866 1.891253 middle_east south_america 31 1.335631 3.664303 middle_east arctic 228 10.526316 26.950355 middle_east europe 714 22.695486 84.397163 +middle_east europe_v3 734 22.951845 86.761229 middle_east north_europe 406 16.797683 47.990544 +middle_east north_europe_v3 459 17.749420 54.255319 middle_east mediterranean 776 28.218182 91.725768 middle_east middle_east 846 100.000000 100.000000 middle_east africa 240 15.686275 28.368794 @@ -212,7 +280,9 @@ africa caribbean 34 1.925255 3.679654 africa south_america 51 2.143758 5.519481 africa arctic 38 1.561216 4.112554 africa europe 306 8.425110 33.116883 +africa europe_v3 328 8.908202 35.497835 africa north_europe 92 3.275187 9.956710 +africa north_europe_v3 124 4.134712 13.419913 africa mediterranean 355 10.926439 38.419913 africa middle_east 240 15.686275 25.974026 africa africa 924 100.000000 100.000000 @@ -235,7 +305,9 @@ north_africa caribbean 7 0.633484 2.966102 north_africa south_america 13 0.751880 5.508475 north_africa arctic 28 1.594533 11.864407 north_africa europe 219 7.225338 92.796610 +north_africa europe_v3 223 7.195870 94.491525 north_africa north_europe 65 3.026071 27.542373 +north_africa north_europe_v3 89 3.793691 37.711864 north_africa mediterranean 236 8.805970 100.000000 north_africa middle_east 154 16.594828 65.254237 north_africa africa 236 25.541126 100.000000 @@ -258,7 +330,9 @@ subsaharan_africa caribbean 34 2.075702 4.271357 subsaharan_africa south_america 50 2.220249 6.281407 subsaharan_africa arctic 25 1.078051 3.140704 subsaharan_africa europe 181 4.987600 22.738693 +subsaharan_africa europe_v3 202 5.489130 25.376884 subsaharan_africa north_europe 51 1.873622 6.407035 +subsaharan_africa north_europe_v3 76 2.603631 9.547739 subsaharan_africa mediterranean 227 6.986765 28.517588 subsaharan_africa middle_east 179 12.235133 22.487437 subsaharan_africa africa 796 86.147186 100.000000 @@ -281,7 +355,9 @@ madagascar caribbean 9 0.924025 8.411215 madagascar south_america 13 0.812500 12.149533 madagascar arctic 2 0.120992 1.869159 madagascar europe 16 0.515298 14.953271 +madagascar europe_v3 16 0.503620 14.953271 madagascar north_europe 2 0.096061 1.869159 +madagascar north_europe_v3 6 0.260870 5.607477 madagascar mediterranean 23 0.832127 21.495327 madagascar middle_east 33 3.586957 30.841121 madagascar africa 107 11.580087 100.000000 @@ -304,7 +380,9 @@ asia caribbean 38 0.719561 0.855278 asia south_america 60 1.018849 1.350439 asia arctic 910 17.909860 20.481657 asia europe 1554 26.325597 34.976367 +asia europe_v3 1604 27.071730 36.101733 asia north_europe 1125 21.246459 25.320729 +asia north_europe_v3 1241 22.977226 27.931578 asia mediterranean 1502 26.721224 33.805987 asia middle_east 835 18.747194 18.793608 asia africa 351 6.997608 7.900068 @@ -327,7 +405,9 @@ south_asia caribbean 29 1.208837 1.868557 south_asia south_america 40 1.325381 2.577320 south_asia arctic 32 1.043025 2.061856 south_asia europe 138 3.116531 8.891753 +south_asia europe_v3 151 3.365277 9.729381 south_asia north_europe 53 1.524741 3.414948 +south_asia north_europe_v3 71 1.929348 4.574742 south_asia mediterranean 174 4.287827 11.211340 south_asia middle_east 212 9.698079 13.659794 south_asia africa 190 8.311461 12.242268 @@ -350,7 +430,9 @@ southeast_asia caribbean 26 1.030928 1.555024 southeast_asia south_america 31 0.985065 1.854067 southeast_asia arctic 3 0.093255 0.179426 southeast_asia europe 31 0.665951 1.854067 +southeast_asia europe_v3 38 0.805085 2.272727 southeast_asia north_europe 8 0.219720 0.478469 +southeast_asia north_europe_v3 13 0.336962 0.777512 southeast_asia mediterranean 48 1.115242 2.870813 southeast_asia middle_east 72 2.943581 4.306220 southeast_asia africa 120 4.846527 7.177033 @@ -373,7 +455,9 @@ east_asia caribbean 23 0.537007 0.670554 east_asia south_america 40 0.816993 1.166181 east_asia arctic 865 21.030878 25.218659 east_asia europe 1188 22.602740 34.635569 +east_asia europe_v3 1223 23.105989 35.655977 east_asia north_europe 987 22.330317 28.775510 +east_asia north_europe_v3 1078 23.687102 31.428571 east_asia mediterranean 1092 21.761658 31.836735 east_asia middle_east 474 12.467123 13.819242 east_asia africa 213 5.143685 6.209913 @@ -396,7 +480,9 @@ japan caribbean 9 0.575448 1.291248 japan south_america 13 0.593607 1.865136 japan arctic 105 4.906542 15.064562 japan europe 165 4.653130 23.672884 +japan europe_v3 175 4.850333 25.107604 japan north_europe 131 5.151396 18.794835 +japan north_europe_v3 142 5.156137 20.373027 japan mediterranean 160 4.973578 22.955524 japan middle_east 95 6.560773 13.629842 japan africa 64 4.110469 9.182209 @@ -419,7 +505,9 @@ oceania caribbean 49 1.580645 2.155741 oceania south_america 63 1.695371 2.771667 oceania arctic 30 0.791348 1.319842 oceania europe 88 1.692633 3.871535 +oceania europe_v3 96 1.824055 4.223493 oceania north_europe 49 1.166389 2.155741 +oceania north_europe_v3 61 1.382906 2.683678 oceania mediterranean 96 1.976529 4.223493 oceania middle_east 70 2.295835 3.079630 oceania africa 132 4.306688 5.807303 @@ -442,7 +530,9 @@ australia caribbean 26 0.954479 1.387407 australia south_america 38 1.137044 2.027748 australia arctic 17 0.499266 0.907150 australia europe 65 1.347709 3.468517 +australia europe_v3 73 1.493759 3.895411 australia north_europe 31 0.811518 1.654216 +australia north_europe_v3 42 1.041925 2.241195 australia mediterranean 73 1.629101 3.895411 australia middle_east 60 2.255639 3.201708 australia africa 119 4.441956 6.350053 @@ -465,7 +555,9 @@ tasmania caribbean 0 0.000000 0.000000 tasmania south_america 2 0.112486 0.729927 tasmania arctic 3 0.164926 1.094891 tasmania europe 9 0.274474 3.284672 +tasmania europe_v3 10 0.298507 3.649635 tasmania north_europe 8 0.356665 2.919708 +tasmania north_europe_v3 9 0.365260 3.284672 tasmania mediterranean 9 0.305603 3.284672 tasmania middle_east 4 0.358423 1.459854 tasmania africa 6 0.503356 2.189781 @@ -488,7 +580,9 @@ new_zealand caribbean 5 0.385802 1.176471 new_zealand south_america 12 0.625326 2.823529 new_zealand arctic 27 1.387461 6.352941 new_zealand europe 57 1.685393 13.411765 +new_zealand europe_v3 60 1.738626 14.117647 new_zealand north_europe 40 1.693480 9.411765 +new_zealand north_europe_v3 47 1.823826 11.058824 new_zealand mediterranean 51 1.669941 12.000000 new_zealand middle_east 25 2.006421 5.882353 new_zealand africa 33 2.507599 7.764706 @@ -511,7 +605,9 @@ oceania_excluding_australia_nz caribbean 34 2.847571 9.659091 oceania_excluding_australia_nz south_america 38 2.087912 10.795455 oceania_excluding_australia_nz arctic 3 0.158144 0.852273 oceania_excluding_australia_nz europe 21 0.627803 5.965909 +oceania_excluding_australia_nz europe_v3 24 0.702988 6.818182 oceania_excluding_australia_nz north_europe 5 0.215146 1.420455 +oceania_excluding_australia_nz north_europe_v3 10 0.393546 2.840909 oceania_excluding_australia_nz mediterranean 28 0.932091 7.954545 oceania_excluding_australia_nz middle_east 28 2.393162 7.954545 oceania_excluding_australia_nz africa 59 4.847987 16.761364 diff --git a/docs/model-presets.md b/docs/model-presets.md index 94ccea3..c2fadc9 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -10,7 +10,7 @@ Each geographic preset applies the minimum row count shown below. Counts use all In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the proposed global minimum of 25. Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty. -Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries in northern Europe's scope have ambiguous historical inclusion and do not change its membership. The other presets are new release definitions. These are release assets; adapter/API discovery integration and preset-specific inference qualification are still pending. +`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; preset-specific quality evaluation remains pending. ## Presets @@ -19,6 +19,8 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `full` | 12,632 | None | None | — | All species in the pinned model. | | `europe` | 3,014 | 26 | None | 2,079,617 | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. | | `north_europe` | 1,977 | 26 | None | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). | +| `europe_v3` | 3,086 | 3 | 25 | 2,079,617 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. | +| `north_europe_v3` | 2,199 | 3 | 25 | 768,497 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. | | `australia` | 1,874 | 3 | 25 | 465,726 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. | | `tasmania` | 274 | 3 | 25 | 4,457 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. | | `north_america` | 4,425 | 3 | 25 | 2,300,391 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. | @@ -41,6 +43,15 @@ Europe and northern Europe preserve MAMBO_v2 membership. Parenthesized countries | `east_asia` | 3,430 | 3 | 25 | 549,482 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. | | `middle_east` | 846 | 3 | 25 | 24,805 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. | +## Updated European presets + +| Updated ID | Legacy ID | Added species | Removed species | +| --- | --- | ---: | ---: | +| `europe_v3` | `europe` | 72 | 0 | +| `north_europe_v3` | `north_europe` | 222 | 0 | + +The [exact added/removed species IDs](../dev/releases/mambo_v3/preset-updates.toml) retain model order. Geographic filters are unchanged; only qualification thresholds differ. + ## Species overlap ![Pairwise species overlap and directional coverage](assets/preset-overlap.svg) @@ -53,6 +64,8 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho - **europe** (Europe (legacy)): `continent` in `EUROPE`. - **north_europe** (Northern Europe (legacy)): `countryCode` in `DE, DK, EE, FI, LT, LV, NL, NO, PL, SE`. +- **europe_v3** (Europe (updated)): `continent` in `EUROPE`. +- **north_europe_v3** (Northern Europe (updated)): `countryCode` in `DE, DK, EE, FI, LT, LV, NL, NO, PL, SE`. - **australia** (Australia including Tasmania): `countryCode` in `AU`. - **tasmania** (Tasmania only): (`countryCode` in `AU`) AND `stateProvince` in `Tasmania`. - **north_america** (North America): `countryCode` in `CA, US, MX, GL, BM, PM`. diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index 212e7dd..ff8f80e 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -11,6 +11,25 @@ RULES = tomllib.loads((HERE / "preset-definitions.toml").read_text())["presets"] +@pytest.mark.parametrize("legacy", ["europe", "north_europe"]) +def test_updated_european_lists_preserve_geography_and_legacy_membership(legacy): + definitions = tomllib.loads((HERE / "preset-definitions.toml").read_text()) + updated = f"{legacy}_v3" + descriptive = {"label", "scope", "minimum_regional_rows", "minimum_global_rows"} + assert {k: v for k, v in RULES[legacy].items() if k not in descriptive} == { + k: v for k, v in RULES[updated].items() if k not in descriptive + } + assert RULES[updated].get("minimum_regional_rows", definitions["minimum_regional_rows"]) == 3 + assert RULES[updated].get("minimum_global_rows", definitions["minimum_global_rows"]) == 25 + old = (HERE / "presets" / f"{legacy}.classes").read_text().splitlines() + new = (HERE / "presets" / f"{updated}.classes").read_text().splitlines() + assert set(old) < set(new) + assert [label for label in new if label in set(old)] == old + changes = tomllib.loads((HERE / "preset-updates.toml").read_text())["updates"][updated] + assert changes["added"] == [label for label in new if label not in set(old)] + assert changes["removed"] == [] + + def countries_selected(name, countries): table = pa.table({"countryCode": countries, "continent": [""] * len(countries)}) return select_region(table, RULES[name])["countryCode"].to_pylist() From 0de3e0d0bf13e31bec8adc2f0f4227a39196812e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 17:34:40 +0200 Subject: [PATCH 024/221] feat: add reproducible release quality and performance qualification --- deployment/mambo_deploy/predictor.py | 2 +- dev/releases/mambo_v3/benchmark.py | 188 ++++++++++++++++++++++ dev/releases/mambo_v3/compare_quality.py | 64 ++++++++ dev/releases/mambo_v3/evaluate.py | 162 +++++++++++++++++++ dev/releases/mambo_v3/evaluation.md | 173 ++++++++++++++++++++ dev/releases/mambo_v3/evaluation_data.py | 79 +++++++++ dev/releases/mambo_v3/metrics.py | 115 +++++++++++++ dev/releases/mambo_v3/prepare_ucloud.py | 94 +++++++++++ dev/releases/mambo_v3/run_local.py | 114 +++++++++++++ dev/releases/mambo_v3/summarize.py | 164 +++++++++++++++++++ tests/releases/test_deployment.py | 26 +++ tests/releases/test_release_evaluation.py | 132 +++++++++++++++ 12 files changed, 1312 insertions(+), 1 deletion(-) create mode 100644 dev/releases/mambo_v3/benchmark.py create mode 100644 dev/releases/mambo_v3/compare_quality.py create mode 100644 dev/releases/mambo_v3/evaluate.py create mode 100644 dev/releases/mambo_v3/evaluation.md create mode 100644 dev/releases/mambo_v3/evaluation_data.py create mode 100644 dev/releases/mambo_v3/metrics.py create mode 100644 dev/releases/mambo_v3/prepare_ucloud.py create mode 100644 dev/releases/mambo_v3/run_local.py create mode 100644 dev/releases/mambo_v3/summarize.py create mode 100644 tests/releases/test_release_evaluation.py diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 45df530..3a33f2b 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -152,7 +152,7 @@ def _onnx(self, images, embeddings): if hasattr(ort, "preload_dlls"): ort.preload_dlls() providers = [ - ("CUDAExecutionProvider", {"device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0}), + ("CUDAExecutionProvider", {"device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0, "use_tf32": 0}), "CPUExecutionProvider", ] session = ort.InferenceSession(str(path), sess_options=options, providers=providers) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py new file mode 100644 index 0000000..52c5537 --- /dev/null +++ b/dev/releases/mambo_v3/benchmark.py @@ -0,0 +1,188 @@ +"""Fresh-process local deployment timings; cold first-call and warmed boundaries are explicit.""" + +import argparse +import os +import resource +import statistics +import subprocess +import sys +import time +from contextlib import contextmanager +from pathlib import Path +from unittest.mock import patch + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import preprocess +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +def snapshot(): + cpuinfo = Path("/proc/cpuinfo") + result = { + "cpu_model": next( + (line.split(":", 1)[1].strip() for line in cpuinfo.read_text().splitlines() if line.startswith("model name")), None + ) + if cpuinfo.exists() + else None + } + for name, command in ( + ( + "gpu", + ["nvidia-smi", "--query-gpu=name,memory.used,power.draw,temperature.gpu,clocks.current.sm,pstate", "--format=csv,noheader"], + ), + ("gpu_processes", ["nvidia-smi", "--query-compute-apps=pid,used_memory", "--format=csv,noheader"]), + ): + try: + result[name] = subprocess.check_output(command, text=True, stderr=subprocess.DEVNULL, timeout=10).strip() + except (OSError, subprocess.SubprocessError): + result[name] = None + for name, path in ( + ("ac_online", "/sys/class/power_supply/AC1/online"), + ("power_profile", "/sys/firmware/acpi/platform_profile"), + ("cpu_governor", "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"), + ): + result[name] = Path(path).read_text().strip() if Path(path).is_file() else None + return result + + +def timing(call, repeats): + values = [] + for _ in range(repeats): + t = time.perf_counter() + call() + values.append(time.perf_counter() - t) + return {"seconds": values, "median_seconds": statistics.median(values), "p95_seconds": float(np.percentile(values, 95))} + + +@contextmanager +def observe_loading(backend, values): + def timed(name, function): + def wrapper(*args, **kwargs): + start = time.perf_counter() + try: + return function(*args, **kwargs) + finally: + values[name] = values.get(name, 0.0) + time.perf_counter() - start + + return wrapper + + if backend == "torch": + import torch + + from mini_trainer.builders import BaseBuilder + + with ( + patch.object(torch, "load", timed("checkpoint_deserialization", torch.load)), + patch.object(BaseBuilder, "build_model", timed("architecture_and_weight_construction", BaseBuilder.build_model)), + ): + yield + else: + import onnxruntime as ort + + with patch.object(ort, "InferenceSession", timed("session_construction", ort.InferenceSession)): + yield + + +def benchmark(args): + args.output.mkdir(parents=True, exist_ok=False) + setup_start = time.perf_counter() + settings = runtime_settings(args.threads, args.backend) + setup_seconds = time.perf_counter() - setup_start + report = { + "status": "running", + "settings": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "runtime": settings, + "runtime_import_config_seconds": setup_seconds, + "before": snapshot(), + "pid": os.getpid(), + "runner_sha256": file_hash(__file__), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "manifest_sha256": file_hash(args.manifest), + "cells": [], + "boundaries": { + "end_to_end": "image path through CPU result/embedding; decode/preprocess/transfer/reduction included", + "prepared": "preprocessed CPU tensor through CPU leaf scores/embeddings; transfers included; no decode or reduction", + "cold": "first image after Predictor construction; lazy model/session load included; runtime import/config measured separately", + }, + } + try: + _, records = load_records(args.manifest, args.root, max(32, max(args.batches)), args.seed) + report["samples"] = records + t = time.perf_counter() + predictor = Predictor( + args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads, batch_size=max(args.batches) + ) + report["constructor_seconds"] = time.perf_counter() - t + paths = [args.root / r["path"] for r in records] + for path, record in zip(paths, records, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError("Benchmark image bytes changed") + predict = predictor.predict_with_embeddings if args.embeddings else predictor.predict + report["load_components_seconds"] = {} + cold_start = time.perf_counter() + with observe_loading(args.backend, report["load_components_seconds"]): + predict(paths[:1]) + report["cold_first_image_seconds"] = time.perf_counter() - cold_start + runtime = predictor._torch if args.backend == "torch" else predictor._onnx + for size in args.batches: + prepared = np.stack([preprocess(path) for path in paths[:size]]) + for preset in ("full", "europe_v3"): + selector = Predictor(args.bundle, model=preset) + predictor._apply_class_mask(selector.class_list) + for _ in range(args.warmup): + predict(paths[:size]) + runtime(prepared, args.embeddings) + cell = {"batch_size": size, "preset": preset, "list_sha256": selector.class_list_sha256} + cell["preprocessing"] = timing(lambda: np.stack([preprocess(path) for path in paths[:size]]), args.repeats) + cell["end_to_end"] = timing(lambda: predict(paths[:size]), args.repeats) + cell["prepared"] = timing(lambda: runtime(prepared, args.embeddings), args.repeats) + cell["images_per_second"] = size / cell["end_to_end"]["median_seconds"] + cell["resources"] = snapshot() + report["cells"].append(cell) + print(args.backend, args.device, args.embeddings, size, preset, round(cell["images_per_second"], 2), flush=True) + if args.backend == "onnx": + import onnxruntime as ort + + report["runtime"]["onnxruntime"] = ort.__version__ + report["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} + report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} + if args.device != "cpu" and args.backend == "torch": + import torch + + report["torch_peak_allocated_bytes"] = torch.cuda.max_memory_allocated() + report["torch_peak_reserved_bytes"] = torch.cuda.max_memory_reserved() + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["torch_imported"] = "torch" in sys.modules + report["peak_rss_kib_linux"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + report["after"] = snapshot() + write_json(args.output / "report.json", report) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + parser.add_argument("--device", default="cpu") + parser.add_argument("--embeddings", action="store_true") + parser.add_argument("--threads", type=int, default=4) + parser.add_argument("--batches", nargs="+", type=int, default=[1, 8, 32]) + parser.add_argument("--warmup", type=int, default=2) + parser.add_argument("--repeats", type=int, default=7) + parser.add_argument("--seed", type=int, default=20260923) + args = parser.parse_args() + if min(args.batches) < 1 or args.warmup < 1 or args.repeats < 3: + parser.error("Positive batches/warmup and at least three repeats required") + benchmark(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/compare_quality.py b/dev/releases/mambo_v3/compare_quality.py new file mode 100644 index 0000000..cc77b20 --- /dev/null +++ b/dev/releases/mambo_v3/compare_quality.py @@ -0,0 +1,64 @@ +"""Compare completed prediction runs by original image/rank identity, without score tolerances.""" + +import argparse +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import PRESETS, write_json + + +def read_rows(path): + with Path(path).open(newline="") as stream: + rows = {} + for row in csv.DictReader(stream): + key = (row["filename"], int(row["level"])) + if key in rows: + raise ValueError("Duplicate image/rank") + rows[key] = row + return rows + + +def compare(left, right, presets=PRESETS): + reports = [json.loads((path / "report.json").read_text()) for path in (left, right)] + if any(r["status"] != "complete" for r in reports) or reports[0]["sample_ids_sha256"] != reports[1]["sample_ids_sha256"]: + raise ValueError("Require completed runs with identical ordered sample hashes") + result = { + "left": str(left), + "right": str(right), + "reports_sha256": [file_hash(path / "report.json") for path in (left, right)], + "presets": {}, + } + for preset in presets: + a, b = [read_rows(path / preset / "mini_metric.csv") for path in (left, right)] + if set(a) != set(b): + raise ValueError("Sample identity mismatch") + for key in a: + if (a[key]["label"], a[key]["known_label"]) != (b[key]["label"], b[key]["known_label"]): + raise ValueError("Ground truth or class-list coverage mismatch") + result["presets"][preset] = {} + for rank in range(3): + keys = [key for key in a if key[1] == rank] + changes = sum(a[key]["prediction"] != b[key]["prediction"] for key in keys) + accuracies = [sum(rows[key]["prediction"] == rows[key]["label"] for key in keys) / len(keys) for rows in (a, b)] + result["presets"][preset][str(rank)] = { + "images": len(keys), + "changed": changes, + "agreement": 1 - changes / len(keys), + "left_accuracy": accuracies[0], + "right_accuracy": accuracies[1], + "accuracy_delta": accuracies[1] - accuracies[0], + } + return result + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("left", type=Path) + parser.add_argument("right", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.output.exists(): + raise FileExistsError(args.output) + write_json(args.output, compare(args.left, args.right)) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py new file mode 100644 index 0000000..46dd9b0 --- /dev/null +++ b/dev/releases/mambo_v3/evaluate.py @@ -0,0 +1,162 @@ +"""Stream release predictions once per model variant and reduce all declared presets.""" + +import argparse +import csv +import hashlib +import platform +import time +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json + + +def runtime_settings(threads, backend="torch"): + result = {"threads": threads, "tf32": False, "autocast": False, "precision": "float32", "platform": platform.platform()} + if backend == "torch": + import torch + + torch.set_num_threads(threads) + torch.backends.cuda.matmul.allow_tf32 = False + torch.backends.cudnn.allow_tf32 = False + torch.backends.cudnn.benchmark = False + result.update(torch=torch.__version__, cuda=torch.version.cuda) + else: + import onnxruntime as ort + + result["onnxruntime"] = ort.__version__ + return result + + +def prepare_batch(paths, pool=None): + """Ordered results and at most one model batch of prepared images.""" + return np.stack(list(pool.map(preprocess, paths)) if pool else [preprocess(path) for path in paths]) + + +def collect(args): + output = args.output + output.mkdir(parents=True, exist_ok=False) + report = { + "status": "running", + "arguments": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "runner_sha256": file_hash(__file__), + "manifest_sha256": file_hash(args.manifest), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runtime": runtime_settings(args.threads, args.backend), + } + start = time.perf_counter() + try: + manifest, records = load_records(args.manifest, args.root, args.count, args.seed) + report.update(samples=len(records), species=len({r["labels"][0] for r in records}), dataset=manifest["dataset"]) + write_json(output / "samples.json", records) + report["sample_ids_sha256"] = file_hash(output / "samples.json") + predictor = Predictor(args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads) + selectors = {name: Predictor(args.bundle, model=name).selected for name in args.presets} + # A preset supplied as a custom list must produce the same mask/order. + custom = Predictor(args.bundle, class_list=predictor.bundle.file(predictor.bundle.regions["europe_v3"]["path"])) + np.testing.assert_array_equal(custom.selected, Predictor(args.bundle, model="europe_v3").selected) + report["preset_as_custom_equivalent"] = True + report["lists"] = { + name: { + "count": len(selected), + "sha256": hashlib.sha256( + ("\n".join(predictor.bundle.classes["labels"][0][i] for i in selected) + "\n").encode() + ).hexdigest(), + } + for name, selected in selectors.items() + } + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=args.decode_workers)) if args.decode_workers else None + writers = {} + for name in selectors: + directory = output / name + directory.mkdir() + stream = stack.enter_context((directory / "mini_metric.csv").open("w", newline="")) + writers[name] = csv.writer(stream) + writers[name].writerow(CSV_COLUMNS) + embeddings = None + if args.embeddings: + embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) + timings = {"decode_preprocess_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} + for offset in range(0, len(records), args.batch_size): + batch = records[offset : offset + args.batch_size] + paths = [args.root / r["path"] for r in batch] + for path, record in zip(paths, batch, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError(f"Image bytes changed: {path}") + t = time.perf_counter() + images = prepare_batch(paths, pool) + timings["decode_preprocess_seconds"] += time.perf_counter() - t + t = time.perf_counter() + leaf, vectors = (predictor._torch if args.backend == "torch" else predictor._onnx)(images, args.embeddings) + timings["runtime_seconds"] += time.perf_counter() - t + if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): + raise ValueError("Invalid leaf scores") + if embeddings is not None: + if vectors.shape != (len(batch), 1280) or not np.isfinite(vectors).all(): + raise ValueError("Invalid embeddings") + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + embeddings[offset : offset + len(batch)] = vectors + t = time.perf_counter() + for name, selected in selectors.items(): + result = Prediction(*hierarchy(leaf, selected, predictor.bundle.classes)) + writers[name].writerows(canonical_rows(batch, result, offset)) + timings["reduce_write_seconds"] += time.perf_counter() - t + if offset % (args.batch_size * 50) == 0: + print(f"{args.backend} {args.device}: {offset + len(batch)}/{len(records)}", flush=True) + if embeddings is not None: + embeddings.flush() + if args.backend == "onnx": + import onnxruntime as ort + + report["runtime"]["onnxruntime"] = ort.__version__ + report["providers"] = {key: session.get_providers() for key, session in predictor._sessions.items()} + report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} + report.update(status="complete", timings=timings) + report["csv_sha256"] = {name: file_hash(output / name / "mini_metric.csv") for name in selectors} + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(output / "report.json", report) + return report + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + commands = parser.add_subparsers(dest="command", required=True) + prep = commands.add_parser("prepare") + prep.add_argument("--root", type=Path, required=True) + prep.add_argument("--reference", type=Path, required=True) + prep.add_argument("--output", type=Path, required=True) + run = commands.add_parser("collect") + for name in ("bundle", "manifest", "root", "output"): + run.add_argument(f"--{name}", type=Path, required=True) + run.add_argument("--backend", choices=["torch", "onnx"], required=True) + run.add_argument("--device", default="cpu") + run.add_argument("--embeddings", action="store_true") + run.add_argument("--count", type=int) + run.add_argument("--seed", type=int, default=20260923) + run.add_argument("--batch-size", type=int, default=32) + run.add_argument("--threads", type=int, default=4) + run.add_argument("--decode-workers", type=int, default=4) + run.add_argument("--presets", nargs="+", default=list(PRESETS)) + args = parser.parse_args() + if args.command == "prepare": + prepare_flemming(args.root, args.reference, args.output) + else: + if args.batch_size < 1 or args.decode_workers < 0: + parser.error("batch-size must be positive and decode-workers nonnegative") + collect(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md new file mode 100644 index 0000000..ce496f0 --- /dev/null +++ b/dev/releases/mambo_v3/evaluation.md @@ -0,0 +1,173 @@ +# Release evaluation and UCloud handoff + +The runner compares the pinned native PyTorch and standard ONNX artifacts through +the release preprocessing and hierarchy reducer. No quantization, retraining, +threshold optimization or new dataset split is involved. All work here is release +tooling; the shared core remains unchanged. + +## Local workflow + +Use the existing checkout environment without syncing, or install the candidate +wheels and prepare a separate CUDA environment. The local qualification uses +Python 3.13.7, PyTorch 2.12.0+cu130, ONNX Runtime GPU 1.30.0, NumPy 2.4.6 and +Pillow 12.2.0. ONNX CPU execution does not import PyTorch. CUDA library dependencies +must be provisioned separately (CUDA 13 and cuDNN 9 for this tested ORT build); a CPU-only ONNX wheel cannot execute CUDA. + +From the repository root: + +```sh +python -m dev.releases.mambo_v3.evaluate prepare \ + --root /path/to/flemming \ + --reference /path/to/production/evaluation/expert/predictions/mini_metric.csv \ + --output /path/to/flemming-manifest.json + +python -m dev.releases.mambo_v3.run_local qualification \ + --python /path/to/runtime-env/bin/python \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --output /path/to/new-subset-run +``` + +Preparation joins all three archived truth ranks by original species/image identity +and hashes local image bytes. It rejects missing/extra images and duplicate or +incomplete truth. The seeded 256-image subset comes from the existing benchmark +selector; it is a qualification subset, not a replacement for the full expert set. +The manifest preserves every truth label, including labels outside the model. + +After reviewing qualification, replace `qualification` with `full` for the two full +GPU prediction runs, or `benchmark` for isolated timing trials. Always choose a +new output directory. Failed outputs are preserved; a report must say `complete` +before using its predictions. Jobs run sequentially; do not overlap the timing +phase with collection, metrics or other heavy work. + +The collector prepares at most one model batch with four ordered preprocessing +workers (`collect --decode-workers 0` selects serial preparation), checks image +hashes and executes the +backbone once. It then applies the same reducer to `full`, legacy `europe` and +`north_europe`, and updated `europe_v3` and `north_europe_v3`. No leaf-score archive +is needed for these predetermined lists. Qualification also verifies that supplying +the updated Europe preset as a custom class list preserves mask membership/order. +Embeddings are written incrementally into a memory-mapped NPY array on subset runs. + +Each variant retains ordered sample identities, artifact/list hashes, precision, +runtime versions, timing components, canonical CSVs and a completion/failure report. +Use `compare_quality` for paired identity/ground-truth checks and per-rank top-1 +agreement/accuracy deltas. Small score differences are not a release failure. + +```sh +python -m dev.releases.mambo_v3.compare_quality /path/to/left /path/to/right \ + --output /path/to/comparison.json +``` + +## Fixed metric policy + +Prepare a separate environment at the campaign's mini_metrics commit: + +```sh +uv venv --python 3.13 /path/to/metrics-env +uv pip install --python /path/to/metrics-env/bin/python \ + 'mini_metrics @ git+https://github.com/GuillaumeMougeot/mini_metrics.git@70cc69adc05362863439277048e06386c1f885e1' +/path/to/metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ + --source /path/to/variant/europe_v3/mini_metric.csv \ + --output /path/to/variant/europe_v3/metrics.json +``` + +For a completed full phase, use `--collection /path/to/full-run` instead of +`--source`/`--output` to generate every variant/list report, skipping only existing +reports whose input hash and metric revision match. The helper enforces that revision and +reports per-rank micro accuracy, the pinned implementation's macro-F1, macro-recall, +macro-precision, coverage and Theil's U, including known-only and per-class results. +Undefined values remain null. List coverage (truth in the active vocabulary) and +abstention coverage are distinct; the latter is 100% at the fixed zero threshold. +Do not choose thresholds or geographic filters from test results. + +## Timing protocol + +The benchmark runs three fresh-process trials in alternating variant order: +PyTorch/ONNX × CPU/CUDA × predictions/embeddings. Four-thread CPU trials use batches +1 and 8, and GPU trials also include 32; additional one-thread CPU trials measure +batch-1 latency. CPU/GPU comparisons use the common batch sizes; this bounded +sweep does not establish the maximum possible CPU throughput. Both `full` +and `europe_v3` are measured. Every configuration uses the same seeded 32-image bank (the appropriate prefix +for each batch). Each cell uses two warmups and seven observations; +retain raw observations and show between-trial variation, not only one best time. + +Runtime import/configuration, lightweight predictor construction and first-call +time are recorded separately from warmed work. These are application boundaries, +not cold-boot or complete Python-interpreter startup measurements. +The cold first call includes lazy loading; instrumentation records checkpoint +loading/model construction or ONNX session construction inside that call. Prepared +runtime timings include CPU-to-device and device-to-CPU transfers, but omit image +decoding and hierarchy reduction. End-to-end timings include those operations and +embedding copies. GPU calls return completed CPU arrays, so timings include completed +work. FP32 is used with TF32 disabled for both backends; no autocast is enabled. + +RSS is the Linux process high-water mark across a trial's batch sweep. Native CUDA +allocator peaks and nvidia-smi device/process snapshots are retained. Snapshots are +observations, not continuous per-process ONNX peak measurements. Record AC state, +clocks, temperatures, power and any unavailable power-policy fields. ONNX CUDA may +place some operators on CPU; provider placement requires the separate profiler. +These are measurements of this laptop/environment, not universal hardware claims. + +## UCloud: preparation only + +The 632,913 original test identities and all three truth ranks have been checked +locally against the pinned Parquet (`set == "0"`), archived staging map and archived +prediction CSV. Staged numeric filenames are never used as original identities. +This does not verify image availability or content on UCloud. + +Clone this release revision onto the manually allocated UCloud SSH node, or copy +the checkout including `dev/releases/mambo_v3`, `deployment`, and the bundle. +Prepare the runtime and pinned metric environments there. The scripts execute on +that node; they do not submit or allocate a UCloud job automatically. + +```sh +python -m dev.releases.mambo_v3.prepare_ucloud \ + --metadata /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --staging /path/to/production/evaluation/in-domain/provenance/staging.json \ + --reference /path/to/production/evaluation/in-domain/predictions/mini_metric.csv \ + --root /work/global_lepi --output /work/global-lepi-test-manifest.json + +python -m dev.releases.mambo_v3.run_local qualification \ + --python /path/to/runtime-env/bin/python \ + --bundle /path/to/bundle --manifest /work/global-lepi-test-manifest.json \ + --root /work/global_lepi --output /work/mambo-indomain-qualification +``` + +Confirm the actual metadata mount path first. Preparation requires the pinned +metadata hash, exact original membership/taxonomy and readable images, then hashes +all test images. Inspect the bounded results before running `full` with the same +arguments and a fresh output directory. CPU qualification can be slow on a shared +node; resource selection is explicit. Keep UCloud throughput separate from laptop +benchmarks. No in-domain inference has been run locally. + +## Publication preparation + +Before staging, attach the measured results to the short deployment README, +freeze wheel/runtime versions and bundle revision, and resolve training-source +revision, best-epoch provenance and model/data redistribution notices. Add the +in-domain results when UCloud runs finish. Keep MAMBO_v2 model-quality comparison +separate from this same-model backend comparison; the archived September native +predictions are historical context, not MAMBO_v2 evidence. Cross-OS and clean CUDA +installation claims require their own checks. No publishing, tagging or uploading +is performed by these tools. + +After metrics and all timing trials complete, generate the combined tables: + +```sh +python -m dev.releases.mambo_v3.summarize \ + --quality /path/to/full-run --benchmarks /path/to/benchmark-run \ + --output /path/to/new-summary +``` + +Both human-readable and machine-readable summaries preserve evidence scope. The +summary refuses an incomplete timing phase. Keep source CSVs, raw timings and +reports alongside it when staging release evidence. + +The local isolated GPU environment reuses the already-installed CUDA libraries. +Its first independent ONNX placement attempt could not locate those libraries; +exposing the existing NVIDIA dependency directory in that temporary environment +resolved it without importing PyTorch. A fresh supported deployment should install +matching NVIDIA dependencies into its own environment or configure library search +paths explicitly. Both profiled graphs then ran all 170 convolution operations on +CUDA; one `Acos` and four `Concat` operations remained on CPU. The profiler's +incidental timings overlapped collection and are not included in speed results. diff --git a/dev/releases/mambo_v3/evaluation_data.py b/dev/releases/mambo_v3/evaluation_data.py new file mode 100644 index 0000000..e5ae54b --- /dev/null +++ b/dev/releases/mambo_v3/evaluation_data.py @@ -0,0 +1,79 @@ +"""Release evaluation identities and canonical rows; no runtime or taxonomy downloads.""" + +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.benchmarks.inference.prepare_inputs import select_records +from dev.benchmarks.inference.quality_compare import COLUMNS + +CSV_COLUMNS = (*COLUMNS, "known_label", "prediction_made", "correct") +PRESETS = ("full", "europe", "north_europe", "europe_v3", "north_europe_v3") + + +def write_json(path, value): + Path(path).write_text(json.dumps(value, indent=2, allow_nan=False) + "\n") + + +def prepare_flemming(root, reference, output): + """Join archived ground truth by relative species/image path, then hash local bytes.""" + records = {} + with Path(reference).open(newline="") as stream: + for row in csv.DictReader(stream): + relative = Path(*Path(row["filename"]).parts[-2:]).as_posix() + record = records.setdefault(relative, {"path": relative, "labels": [None] * 3, "split": "test"}) + rank = int(row["level"]) + if rank not in range(3) or record["labels"][rank] is not None: + raise ValueError("Duplicate or invalid truth rank") + record["labels"][rank] = row["label"] + observed = {p.relative_to(root).as_posix() for p in Path(root).rglob("*.jpg")} + if observed != set(records): + raise ValueError(f"Image identity mismatch: missing {len(set(records) - observed)}, extra {len(observed - set(records))}") + for record in records.values(): + if any(label is None for label in record["labels"]) or record["labels"][0] != Path(record["path"]).parent.name: + raise ValueError("Incomplete or conflicting ground truth") + record["sha256"] = file_hash(Path(root) / record["path"]) + result = { + "schema_version": 1, + "dataset": "flemming", + "records": sorted(records.values(), key=lambda r: r["path"]), + "provenance": {"truth_csv_sha256": file_hash(reference), "split": "original expert set; no resplitting"}, + } + output = Path(output) + if output.exists(): + raise FileExistsError(output) + write_json(output, result) + return result + + +def load_records(path, root, count=None, seed=20260923): + manifest = json.loads(Path(path).read_text()) + records = select_records(manifest, "test", count, seed) + for record in records: + candidate = (Path(root) / record["path"]).resolve() + if not candidate.is_relative_to(Path(root).resolve()) or not candidate.is_file(): + raise ValueError(f"Missing or unsafe image: {record['path']}") + if len(record.get("labels", [])) != 3 or not all(isinstance(label, str) and label for label in record["labels"]): + raise ValueError("Require explicit species/genus/family ground truth") + return manifest, records + + +def canonical_rows(records, prediction, offset=0): + if len(records) != len(prediction): + raise ValueError("Prediction/sample count mismatch") + for i, (record, item) in enumerate(zip(records, prediction, strict=True)): + for rank in range(3): + truth, predicted = record["labels"][rank], item.label[rank] + yield ( + offset + i, + record["path"], + rank, + truth, + predicted, + item.confidence[rank], + 0, + int(truth in prediction.cls2idx[str(rank)]), + 1, + 1 if truth == predicted else -1, + ) diff --git a/dev/releases/mambo_v3/metrics.py b/dev/releases/mambo_v3/metrics.py new file mode 100644 index 0000000..1fcc6fb --- /dev/null +++ b/dev/releases/mambo_v3/metrics.py @@ -0,0 +1,115 @@ +"""Evaluate canonical release CSVs at the campaign's pinned mini_metrics revision.""" + +import argparse +import importlib.metadata +import json +import math +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +REVISION = "70cc69adc05362863439277048e06386c1f885e1" + + +def finite_json(value): + if isinstance(value, dict): + return {str(k): finite_json(v) for k, v in value.items()} + if isinstance(value, (list, tuple)): + return [finite_json(v) for v in value] + if isinstance(value, np.generic): + value = value.item() + if isinstance(value, float) and not math.isfinite(value): + return None + return value + + +def measure(source): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + distribution = importlib.metadata.distribution("mini_metrics") + provenance = json.loads(distribution.read_text("direct_url.json") or "{}") + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError(f"Require mini_metrics git revision {REVISION} in a separate environment") + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Evaluation requires finite, unthresholded predictions") + result = { + "source_sha256": file_hash(source), + "mini_metrics_revision": REVISION, + "policy": "threshold=0; no optimization; undefined metrics are null", + "ranks": {}, + } + for level, rank in enumerate(("species", "genus", "family")): + selected = np.asarray(data.level) == level + known = selected & np.asarray(data.known_label) + correct = np.asarray(data.label) == np.asarray(data.prediction) + result["ranks"][rank] = { + "images": int(selected.sum()), + "known_images": int(known.sum()), + "list_coverage": float(known.sum() / selected.sum()), + "abstention_coverage": 1.0, + "truth_species_or_taxa": len(set(data.label[selected])), + "micro_accuracy_all": float(correct[selected].mean()), + "micro_accuracy_known": float(correct[known].mean()) if known.any() else None, + } + for scope, known_only, per_class in (("all", False, False), ("known", True, False), ("per_class", False, True)): + result[scope] = finite_json( + evaluate_file( + data, + threshold=0, + optimal=False, + known_only=known_only, + per_class=per_class, + simple=True, + hierarchical=False, + pattern=r"^(f1|recall|precision|coverage|theilU)$", + verbose=0, + ) + ) + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + sources = parser.add_mutually_exclusive_group(required=True) + sources.add_argument("--source", type=Path) + sources.add_argument("--collection", type=Path, help="Completed run_local full directory") + parser.add_argument("--output", type=Path) + args = parser.parse_args() + if args.collection: + plan = json.loads((args.collection / "plan.json").read_text()) + if plan["status"] != "complete": + raise ValueError("Collection phase is not complete") + for variant in plan["completed"]: + root = args.collection / variant + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete variant") + for name, digest in report["csv_sha256"].items(): + source = root / name / "mini_metric.csv" + if file_hash(source) != digest: + raise ValueError("Prediction CSV changed since collection") + output = source.with_name("metrics.json") + if output.exists(): + prior = json.loads(output.read_text()) + if prior["source_sha256"] != digest or prior["mini_metrics_revision"] != REVISION: + raise ValueError("Existing metrics do not match this input or pinned revision") + continue + write_json(output, measure(source)) + print(variant, name, flush=True) + else: + if args.output is None: + parser.error("--output is required with --source") + if args.output.exists(): + raise FileExistsError(args.output) + report = measure(args.source) + write_json(args.output, report) + print(json.dumps(report["ranks"], indent=2)) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/prepare_ucloud.py b/dev/releases/mambo_v3/prepare_ucloud.py new file mode 100644 index 0000000..d2ce8cc --- /dev/null +++ b/dev/releases/mambo_v3/prepare_ucloud.py @@ -0,0 +1,94 @@ +"""Recover original UCloud test identities; verify-only works without the image dataset.""" + +import argparse +import csv +import json +import tomllib +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.audit import HERE +from dev.releases.mambo_v3.evaluation_data import write_json + + +def recover(metadata, staging, reference, test_set="0"): + import pyarrow.compute as pc + import pyarrow.parquet as pq + + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"] + if file_hash(metadata) != expected["sha256"]: + raise ValueError("Original metadata snapshot hash mismatch") + table = pq.read_table(metadata, columns=["filename", "set", "speciesKey", "genusKey", "familyKey"]) + table = table.filter(pc.equal(table["set"], test_set)) + truth = {} + for row in table.to_pylist(): + key = f"images/{row['speciesKey']}/{row['filename']}" + if key in truth: + raise ValueError("Duplicate original image identity") + truth[key] = [row[k] for k in ("speciesKey", "genusKey", "familyKey")] + files = json.loads(Path(staging).read_text())["files"] + mapping = {} + original = set() + for item in files: + source = Path(item["source"]) + # Preserve the archived suffix from the original global_lepi mount. + relative = source.relative_to("/work/global_lepi").as_posix() + if item["staged"] in mapping or relative in original: + raise ValueError("Duplicate staging identity") + mapping[item["staged"]] = relative + original.add(relative) + if original != set(truth): + raise ValueError("Staging membership differs from the original supplied split") + seen = set() + with Path(reference).open(newline="") as stream: + for row in csv.DictReader(stream): + name = mapping[row["filename"]] + rank = int(row["level"]) + if (name, rank) in seen or not 0 <= rank < 3 or row["label"] != truth[name][rank]: + raise ValueError("Archived truth differs from original taxonomy or has duplicate ranks") + seen.add((name, rank)) + if len(seen) != len(truth) * 3: + raise ValueError("Incomplete archived predictions") + return [{"path": name, "labels": labels, "split": "test"} for name, labels in sorted(truth.items())] + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("metadata", "staging", "reference", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--root", type=Path) + parser.add_argument("--verify-only", action="store_true") + parser.add_argument("--test-set", default="0") + args = parser.parse_args() + if args.output.exists(): + raise FileExistsError(args.output) + records = recover(args.metadata, args.staging, args.reference, args.test_set) + if len(records) != 632913: + raise ValueError("Expected 632,913 original test images") + provenance = {key: file_hash(getattr(args, key)) for key in ("metadata", "staging", "reference")} + provenance["test_set"] = args.test_set + if args.verify_only: + write_json( + args.output, + { + "status": "verified-identities-only", + "images": len(records), + "provenance": provenance, + "limitation": "Image existence and bytes not verified locally", + }, + ) + else: + if args.root is None: + parser.error("--root is required unless --verify-only") + for i, record in enumerate(records): + path = (args.root / record["path"]).resolve() + if not path.is_relative_to(args.root.resolve()): + raise ValueError("Unsafe original path") + record["sha256"] = file_hash(path) + if i % 10000 == 0: + print(f"Hashed {i}/{len(records)}", flush=True) + write_json(args.output, {"schema_version": 1, "dataset": "global-lepi-test", "provenance": provenance, "records": records}) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/run_local.py b/dev/releases/mambo_v3/run_local.py new file mode 100644 index 0000000..cc63c22 --- /dev/null +++ b/dev/releases/mambo_v3/run_local.py @@ -0,0 +1,114 @@ +"""Run a bounded release phase sequentially; each variant/trial uses a fresh process.""" + +import argparse +import itertools +import json +import os +import subprocess +import sys +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json + + +def plan(args): + shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + jobs = [] + if args.phase in ("qualification", "full"): + variants = ( + itertools.product(("cpu", "cuda:0"), ("torch", "onnx"), (False, True)) + if args.phase == "qualification" + else [("cuda:0", "torch", False), ("cuda:0", "onnx", False)] + ) + for device, backend, embeddings in variants: + name = f"{backend}-{device.replace(':', '-')}-{'embedding' if embeddings else 'prediction'}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.evaluate", + "collect", + *shared, + "--backend", + backend, + "--device", + device, + "--batch-size", + "32", + "--threads", + "4", + ] + if embeddings: + command.append("--embeddings") + if args.phase == "qualification": + command += ["--count", str(args.count)] + jobs.append((name, command)) + else: + variants = list(itertools.product(("cpu", "cuda:0"), ("torch", "onnx"), (False, True))) + for trial in range(3): + for device, backend, embeddings in variants if trial % 2 == 0 else list(reversed(variants)): + for threads in [4, 1] if device == "cpu" else [4]: + name = f"trial-{trial}-{backend}-{device.replace(':', '-')}-{'embedding' if embeddings else 'prediction'}-t{threads}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--backend", + backend, + "--device", + device, + "--threads", + str(threads), + ] + if embeddings: + command.append("--embeddings") + # Single-thread runs qualify interactive latency; practical thread runs sweep all batches. + if threads == 1: + command += ["--batches", "1"] + elif device == "cpu": + command += ["--batches", "1", "8"] + jobs.append((name, command)) + return [(name, [*command, "--output", str((args.output / name).resolve())]) for name, command in jobs] + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=["qualification", "full", "benchmark"]) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--python", type=Path, default=Path(sys.executable)) + parser.add_argument("--count", type=int, default=256) + args = parser.parse_args() + args.output.mkdir(parents=True, exist_ok=False) + jobs = plan(args) + record = {"phase": args.phase, "status": "running", "commands": jobs, "completed": []} + write_json(args.output / "plan.json", record) + environment = dict( + os.environ, + CUDA_VISIBLE_DEVICES="0", + PYTHONHASHSEED="0", + OMP_NUM_THREADS="4", + MKL_NUM_THREADS="4", + OPENBLAS_NUM_THREADS="1", + MPLBACKEND="Agg", + ) + try: + for name, command in jobs: + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run(command, env=environment, stdout=stream, stderr=subprocess.STDOUT, check=True) + report = json.loads((args.output / name / "report.json").read_text()) + if report["status"] != "complete": + raise RuntimeError(f"Incomplete variant: {name}") + record["completed"].append(name) + write_json(args.output / "plan.json", record) + record["status"] = "complete" + except Exception as error: + record.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(args.output / "plan.json", record) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/summarize.py b/dev/releases/mambo_v3/summarize.py new file mode 100644 index 0000000..15fc0f4 --- /dev/null +++ b/dev/releases/mambo_v3/summarize.py @@ -0,0 +1,164 @@ +"""Render concise local quality and performance tables from completed release evidence.""" + +import argparse +import json +import statistics +from collections import defaultdict +from pathlib import Path + +import numpy as np + +from dev.releases.mambo_v3.evaluation_data import PRESETS, write_json + + +def summarize(quality, benchmarks, output): + output.mkdir(parents=True, exist_ok=False) + quality_rows = [] + for backend in ("torch", "onnx"): + variant = quality / f"{backend}-cuda-0-prediction" + report = json.loads((variant / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete quality run") + for preset in PRESETS: + metrics = json.loads((variant / preset / "metrics.json").read_text()) + quality_rows.append( + { + "backend": backend, + "preset": preset, + "samples": report["samples"], + "metrics": metrics, + "bundle_sha256": report["bundle_sha256"], + "list_sha256": report["lists"][preset]["sha256"], + "samples_sha256": report["sample_ids_sha256"], + } + ) + benchmark_plan = json.loads((benchmarks / "plan.json").read_text()) + if benchmark_plan["status"] != "complete": + raise ValueError("Benchmark phase is incomplete") + grouped = defaultdict(list) + resources = [] + for variant in benchmark_plan["completed"]: + path = benchmarks / variant / "report.json" + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete benchmark: {path}") + settings = report["settings"] + resources.append( + { + "variant": path.parent.name, + "backend": settings["backend"], + "device": settings["device"], + "embeddings": settings["embeddings"], + "threads": settings["threads"], + "peak_rss_mib": report["peak_rss_kib_linux"] / 1024, + "cold_first_image_seconds": report["cold_first_image_seconds"], + "load_components_seconds": report["load_components_seconds"], + "torch_imported": report["torch_imported"], + "torch_peak_allocated_bytes": report.get("torch_peak_allocated_bytes"), + "before": report["before"], + "after": report["after"], + } + ) + for cell in report["cells"]: + key = (settings["backend"], settings["device"], settings["embeddings"], settings["threads"], cell["preset"], cell["batch_size"]) + grouped[key].append(cell) + performance = [] + for key, cells in sorted(grouped.items()): + if len(cells) != 3: + raise ValueError(f"Expected three trials: {key}") + backend, device, embeddings, threads, preset, batch = key + values = [v for cell in cells for v in cell["end_to_end"]["seconds"]] + medians = [cell["end_to_end"]["median_seconds"] for cell in cells] + prepared = [cell["prepared"]["median_seconds"] for cell in cells] + performance.append( + { + "backend": backend, + "device": device, + "embeddings": embeddings, + "threads": threads, + "preset": preset, + "batch": batch, + "median_batch_ms": 1000 * statistics.median(values), + "p95_batch_ms": 1000 * float(np.percentile(values, 95)), + "images_per_second": batch / statistics.median(values), + "trial_median_min_ms": 1000 * min(medians), + "trial_median_max_ms": 1000 * max(medians), + "prepared_batch_ms": 1000 * statistics.median(prepared), + "observations": len(values), + } + ) + write_json(output / "summary.json", {"quality": quality_rows, "performance": performance, "resources": resources}) + report_dataset = json.loads((quality / "torch-cuda-0-prediction/report.json").read_text())["dataset"] + report_samples = quality_rows[0]["samples"] + report_species = quality_rows[0]["metrics"]["ranks"]["species"]["truth_species_or_taxa"] + lines = [ + "# Local MAMBO release qualification", + "", + f"Full {report_dataset} evaluation: {report_samples:,} images / {report_species} truth species. " + "All predictions are unthresholded. Both backends use FP32 and the same release image recipe.", + "", + "## Full-dataset species results", + "", + "| Backend | Preset | Accuracy, all | Accuracy, known | Macro-F1, all | Truth coverage |", + "|---|---|---:|---:|---:|---:|", + ] + for row in quality_rows: + metric = row["metrics"] + rank = metric["ranks"]["species"] + lines.append( + f"| {row['backend']} | {row['preset']} | {rank['micro_accuracy_all']:.2%} | " + f"{rank['micro_accuracy_known']:.2%} | {metric['all']['f1']['0']:.4f} | {rank['list_coverage']:.2%} |" + ) + lines += [ + "", + "## End-to-end latency and throughput", + "", + "Laptop measurements; updated Europe, four CPU threads, three alternating-order trials. " + "Batch latency includes image decoding, preprocessing, transfers, hierarchy reduction and optional embeddings. " + "p95 is descriptive of the retained observations, not a service-level guarantee.", + "", + "| Backend | Device | Embeddings | Batch | Median ms | p95 ms | Images/s | Trial median range ms |", + "|---|---|---|---:|---:|---:|---:|---:|", + ] + for row in performance: + if row["preset"] == "europe_v3" and row["threads"] == 4: + lines.append( + f"| {row['backend']} | {row['device']} | {row['embeddings']} | {row['batch']} | " + f"{row['median_batch_ms']:.1f} | {row['p95_batch_ms']:.1f} | {row['images_per_second']:.1f} | " + f"{row['trial_median_min_ms']:.1f}–{row['trial_median_max_ms']:.1f} |" + ) + lines += [ + "", + "## Startup and process memory", + "", + "Cold first image includes lazy load and first execution; RSS is the process high-water mark across the batch sweep.", + "", + "| Backend | Device | Embeddings | Median cold first image s | Peak RSS range MiB |", + "|---|---|---|---:|---:|", + ] + groups = defaultdict(list) + for row in resources: + if row["threads"] == 4: + groups[(row["backend"], row["device"], row["embeddings"])].append(row) + for (backend, device, embeddings), rows in sorted(groups.items()): + lines.append( + f"| {backend} | {device} | {embeddings} | " + f"{statistics.median(r['cold_first_image_seconds'] for r in rows):.2f} | " + f"{min(r['peak_rss_mib'] for r in rows):.0f}–{max(r['peak_rss_mib'] for r in rows):.0f} |" + ) + lines += [ + "", + "The machine-readable companion includes all ranks, known-only/per-class metrics, full-list and " + "one-thread comparisons, prepared-runtime timings, raw timing counts, and resource observations. " + "See the evaluation workflow for commands and interpretation limits.", + "", + ] + (output / "summary.md").write_text("\n".join(lines)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("quality", "benchmarks", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + args = parser.parse_args() + summarize(args.quality, args.benchmarks, args.output) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index c7f0267..b620267 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -144,3 +144,29 @@ def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeyp np.testing.assert_array_equal(native.confidence.numpy(), result.confidence) assert isinstance(native.indices, torch.Tensor) assert isinstance(facade.predict_with_embeddings("unused")[1], torch.Tensor) + + +def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch): + import sys + from types import SimpleNamespace + + predictor = Predictor(bundle, device="cuda:0") + monkeypatch.setattr(predictor.bundle, "profile", lambda key: bundle / "unused.onnx") + captured = {} + + def session(path, sess_options, providers): + captured["providers"] = providers + return SimpleNamespace(disable_fallback=lambda: None, get_providers=lambda: ["CPUExecutionProvider"]) + + monkeypatch.setitem( + sys.modules, + "onnxruntime", + SimpleNamespace( + SessionOptions=SimpleNamespace, + get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], + InferenceSession=session, + ), + ) + with pytest.raises(RuntimeError, match="refusing CPU-only fallback"): + predictor._onnx(np.zeros((1, 3, 384, 384), dtype=np.float32), False) + assert captured["providers"][0][1]["use_tf32"] == 0 diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py new file mode 100644 index 0000000..98f91b4 --- /dev/null +++ b/tests/releases/test_release_evaluation.py @@ -0,0 +1,132 @@ +"""Release identity, excluded-truth and metric serialization contracts.""" + +import csv +import json + +import numpy as np +import pytest + +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, prepare_flemming +from dev.releases.mambo_v3.metrics import finite_json + + +def fixture_data(tmp_path): + root = tmp_path / "images" + (root / "outside").mkdir(parents=True) + (root / "outside/photo.jpg").write_bytes(b"image fixture") + reference = tmp_path / "truth.csv" + with reference.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for rank, truth in enumerate(("outside", "genus", "family")): + writer.writerow([0, "/old/root/outside/photo.jpg", rank, truth, "unused", 0.5, 0, 0, 1, -1]) + return root, reference + + +def test_archive_truth_join_preserves_unknown_species_and_hashes(tmp_path): + root, reference = fixture_data(tmp_path) + output = tmp_path / "manifest.json" + data = prepare_flemming(root, reference, output) + assert data["records"][0]["labels"] == ["outside", "genus", "family"] + assert len(data["records"][0]["sha256"]) == 64 + _, records = load_records(output, root, 1) + assert records == data["records"] + (root / "outside/extra.jpg").write_bytes(b"extra") + with pytest.raises(ValueError, match="identity mismatch"): + prepare_flemming(root, reference, tmp_path / "other.json") + + +def test_manifest_escape_is_rejected(tmp_path): + root, reference = fixture_data(tmp_path) + output = tmp_path / "manifest.json" + data = prepare_flemming(root, reference, output) + data["records"][0]["path"] = "../truth.csv" + output.write_text(json.dumps(data)) + with pytest.raises(ValueError, match="unsafe image"): + load_records(output, root) + + +def test_canonical_rows_retain_excluded_truth_with_known_parent(): + classes = {"labels": [["inside"], ["genus"], ["family"]], "parents": [[0], [0]]} + result = Prediction(*hierarchy(np.array([[1.0]], dtype=np.float32), [0], classes)) + records = [{"path": "outside/photo.jpg", "labels": ["outside", "genus", "family"]}] + rows = [dict(zip(CSV_COLUMNS, row, strict=True)) for row in canonical_rows(records, result, 13)] + assert len(rows) == 3 and rows[0]["instance_id"] == 13 + assert rows[0]["label"] == "outside" and rows[0]["known_label"] == 0 and rows[0]["correct"] == -1 + assert rows[1]["known_label"] == 1 and rows[1]["correct"] == 1 + assert all(row["prediction_made"] == 1 and row["threshold"] == 0 for row in rows) + with pytest.raises(ValueError, match="count mismatch"): + list(canonical_rows([], result)) + + +def test_metric_json_keeps_undefined_values_explicit(): + assert finite_json({0: np.nan, 1: (np.float64(0.5), np.inf)}) == {"0": None, "1": [0.5, None]} + + +def test_comparison_rejects_changed_truth(tmp_path): + from dev.releases.mambo_v3.compare_quality import compare + + for name, truth in (("left", "a"), ("right", "b")): + directory = tmp_path / name + (directory / "full").mkdir(parents=True) + (directory / "report.json").write_text(json.dumps({"status": "complete", "sample_ids_sha256": "same"})) + with (directory / "full/mini_metric.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerow([0, "image.jpg", 0, truth, "a", 0.5, 0, 1, 1, 1]) + with pytest.raises(ValueError, match="Ground truth"): + compare(tmp_path / "left", tmp_path / "right", ["full"]) + + +def test_ucloud_recovery_checks_original_split_and_taxonomy(tmp_path, monkeypatch): + import pyarrow as pa + import pyarrow.parquet as pq + + from dev.releases.mambo_v3 import prepare_ucloud + from dev.releases.mambo_v3.evaluation_data import write_json + + metadata = tmp_path / "metadata.parquet" + pq.write_table( + pa.table( + { + "filename": ["test.jpg", "train.jpg"], + "set": ["0", "1"], + "speciesKey": ["a", "b"], + "genusKey": ["g", "g"], + "familyKey": ["f", "f"], + } + ), + metadata, + ) + monkeypatch.setattr(prepare_ucloud, "HERE", tmp_path) + (tmp_path / "construction.toml").write_text(f'[source]\nsha256 = "{prepare_ucloud.file_hash(metadata)}"\n') + staging, reference = tmp_path / "staging.json", tmp_path / "truth.csv" + write_json(staging, {"files": [{"source": "/work/global_lepi/images/a/test.jpg", "staged": "/staged/0/1.jpg"}]}) + with reference.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(["filename", "level", "label"]) + writer.writerows([["/staged/0/1.jpg", i, label] for i, label in enumerate(["a", "g", "f"])]) + records = prepare_ucloud.recover(metadata, staging, reference) + assert records == [{"path": "images/a/test.jpg", "labels": ["a", "g", "f"], "split": "test"}] + with pytest.raises(ValueError, match="membership differs"): + prepare_ucloud.recover(metadata, staging, reference, "1") + + +def test_threaded_preprocessing_is_byte_identical_and_ordered(tmp_path): + from concurrent.futures import ThreadPoolExecutor + + from PIL import Image + + from dev.releases.mambo_v3.evaluate import prepare_batch + + paths = [] + for i in range(5): + path = tmp_path / f"{i}.png" + Image.new("RGB", (11 + i, 13 + i), (i * 30, i * 10, 255 - i * 20)).save(path) + paths.append(path) + serial = prepare_batch(paths) + with ThreadPoolExecutor(max_workers=4) as pool: + threaded = prepare_batch(paths, pool) + np.testing.assert_array_equal(serial, threaded) + assert not np.array_equal(threaded[0], threaded[-1]) From 922a45f2fbd0b7bec12d7009d1198454e15070f8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 17:51:11 +0200 Subject: [PATCH 025/221] test: isolate native model initialization cost in release benchmarks --- dev/releases/mambo_v3/benchmark.py | 6 ++++++ dev/releases/mambo_v3/evaluation.md | 7 +++++++ tests/releases/test_release_evaluation.py | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 52c5537..aa0a2bc 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -74,10 +74,16 @@ def wrapper(*args, **kwargs): import torch from mini_trainer.builders import BaseBuilder + from mini_trainer.modeling.classifier import Classifier with ( patch.object(torch, "load", timed("checkpoint_deserialization", torch.load)), patch.object(BaseBuilder, "build_model", timed("architecture_and_weight_construction", BaseBuilder.build_model)), + patch.object( + Classifier, + "init_spherical_repulsion", + classmethod(timed("spherical_initialization_within_model_build", Classifier.init_spherical_repulsion.__func__)), + ), ): yield else: diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index ce496f0..b0bf7f6 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -171,3 +171,10 @@ matching NVIDIA dependencies into its own environment or configure library searc paths explicitly. Both profiled graphs then ran all 170 convolution operations on CUDA; one `Acos` and four `Concat` operations remained on CPU. The profiler's incidental timings overlapped collection and are not included in speed results. + +Native startup instrumentation also records spherical classifier initialization. +That measurement is nested inside model construction, so the loading components +must not all be added together. The existing core constructs a normalized head +with 100 initialization iterations before loading checkpoint weights; any change +to that shared loading behavior belongs on a separate feature/fix branch with +checkpoint validation, not directly on the release branch. diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index 98f91b4..7572019 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -130,3 +130,18 @@ def test_threaded_preprocessing_is_byte_identical_and_ordered(tmp_path): threaded = prepare_batch(paths, pool) np.testing.assert_array_equal(serial, threaded) assert not np.array_equal(threaded[0], threaded[-1]) + + +def test_loading_observer_preserves_classmethod_and_restores_it(): + import torch + + from dev.releases.mambo_v3.benchmark import observe_loading + from mini_trainer.modeling.classifier import Classifier + + original = Classifier.init_spherical_repulsion.__func__ + values = {} + with observe_loading("torch", values): + layer = torch.nn.Linear(2, 3) + assert Classifier.init_spherical_repulsion(layer, iterations=1) is layer + assert Classifier.init_spherical_repulsion.__func__ is original + assert values["spherical_initialization_within_model_build"] >= 0 From 8f77797e0e22a4233d13f1aefd932ed5540fe996 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 18:31:50 +0200 Subject: [PATCH 026/221] docs: record MAMBO release quality and deployment trade-offs --- deployment/README.md | 31 +++- dev/releases/mambo_v3/README.md | 17 +- .../mambo_v3/deployment-qualification.md | 13 +- docs/mambo-v3-evaluation.md | 159 ++++++++++++++++++ docs/ucloud-model-release-roadmap.md | 35 ++-- 5 files changed, 221 insertions(+), 34 deletions(-) create mode 100644 docs/mambo-v3-evaluation.md diff --git a/deployment/README.md b/deployment/README.md index 9227acc..664fd55 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -90,8 +90,29 @@ defaults, so explicit backend/device arguments are recommended in scripts. ## Qualification -Preset generation and artifact integrity have been checked. This increment adds -small real-image inference and installed-package checks, not full performance or -accuracy qualification. Full Flemming metrics, in-domain UCloud evaluation, -laptop GPU/CPU benchmarks, other operating systems and publication/license -review remain release work. Small ONNX numerical differences are expected. +On all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, +genus and family labels for the full list and both legacy/updated European presets. +Updated Europe reaches **68.81% species accuracy overall**, or **79.74%** on images +whose true species is in the list. Unknown species remain in the overall result. +CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; +this checks prediction consistency, not downstream embedding usefulness. + +On an i7-12800H / RTX 3080 Ti Laptop GPU, with four CPU threads and the updated +Europe preset, warmed prediction-only measurements were: + +| Runtime | CPU, one image | GPU, one image | GPU, batch 32 | +|---|---:|---:|---:| +| ONNX | 115 ms | 33 ms | 41 images/s | +| PyTorch | 156 ms | 35 ms | 44 images/s | + +These include image preparation and result handling. First prediction including +loading took about 0.37 s CPU / 1.64 s GPU for ONNX, versus 40–42 s for PyTorch; +reuse a loaded predictor. ONNX also used less CPU process memory. Prefer it for +new lightweight integrations; native PyTorch remains suitable for existing callers +and persistent GPU workers. Embedding-mode results, variability, memory and the +Linux/WSL qualification limits are in the [measured report](../docs/mambo-v3-evaluation.md). + +The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the +reproduction commands and UCloud handoff. In-domain evaluation, other operating +systems and publication/license review remain open. Small ONNX numerical +differences are expected even where top-1 labels agree. diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index 5f731c5..ba08a37 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -178,11 +178,14 @@ names must not be treated as original image identities. Verify the supplied spli source membership and expected 632,913 predictions before a full run, with a small qualification first. Do not regenerate a random split from the training proportion. -Portable assets, aligned PyTorch/ONNX adapters and small CPU/GPU Flemming checks -are implemented; see [deployment qualification](deployment-qualification.md). -Next implementation: full local task metrics -and CPU/laptop-GPU timings. Use the same versioned runner/config on UCloud for -in-domain results. Archived selected predictions support a historical baseline, -not new-backend top-k or embedding quality claims. Small fresh inference checks -are complete; no speed benchmark has been performed. Training-source revision and best-epoch +Portable assets and aligned PyTorch/ONNX adapters are implemented; see +[deployment qualification](deployment-qualification.md). Full Flemming metrics and +local CPU/GPU timings are documented in the +[measured release report](../../../docs/mambo-v3-evaluation.md), with reproduction +commands and the prepared UCloud handoff in [evaluation.md](evaluation.md). + +The original in-domain split and taxonomy have been checked against all 632,913 +archived test identities. Image verification and inference still require UCloud. +Archived selected predictions support historical context, not MAMBO_v2 model +quality or downstream embedding claims. Training-source revision and best-epoch provenance remain unresolved; packaging checkout is not training provenance. diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index 3aabcdd..d97905a 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -48,7 +48,7 @@ working directory, blocks Python socket connections, runs both API modes and the CLI, and verifies bundle contents remain unchanged. This is not an OS-level network isolation test; platform-native runtime networking is outside that guard. -## Observed result +## Initial adapter increment | Check | Result | |---|---| @@ -78,12 +78,13 @@ The shared NumPy preprocessing implements the recorded campaign recipe. A sample comparison to the original torchvision path differed by at most one uint8 level at resize rounding boundaries; it is not a byte-exact preprocessing claim. -## Remaining release work +## Subsequent evaluation and remaining work -Full Flemming metrics and CPU/GPU latency, throughput and memory measurements are -next. Use outer evaluation batches to bound accumulated result memory. Include -out-of-vocabulary truth in all-image metrics and report covered-image metrics -separately. In-domain evaluation must run on UCloud with the original test split. +The [measured release report](../../../docs/mambo-v3-evaluation.md) supersedes the +initial subset-only evidence above with full Flemming metrics, CPU/GPU timings +and a completed broad test suite. The [evaluation workflow](evaluation.md) preserves +unknown truth and documents the UCloud commands. In-domain inference still needs +to run on UCloud with the verified original test split. Four deterministic images establish execution contracts, not representative accuracy, embedding quality or speed. Windows/macOS, clean CUDA installations, diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md new file mode 100644 index 0000000..96f2128 --- /dev/null +++ b/docs/mambo-v3-evaluation.md @@ -0,0 +1,159 @@ +# MAMBO_v3 local evaluation — 23 September 2026 + +The native PyTorch and standard ONNX candidates produced identical top-1 labels +on all **58,640 Flemming images**, for species, genus and family, with all five +lists below. This establishes same-model prediction agreement on this dataset; +it is not a claim of numerical identity or improvement over MAMBO_v2. + +## Quality and geographic filtering + +| Preset | Species accuracy, all images | Species accuracy, known truth | Macro-F1, all | Genus accuracy | Family accuracy | +|---|---:|---:|---:|---:|---:| +| Full | 58.43% | 67.72% | 0.0971 | 70.58% | 90.31% | +| Europe, legacy | 68.95% | 79.91% | 0.1993 | 77.94% | 92.86% | +| Northern Europe, legacy | 70.79% | 82.04% | 0.2545 | 79.37% | 92.98% | +| Europe, updated | 68.81% | 79.74% | 0.1975 | 77.79% | 92.55% | +| Northern Europe, updated | 70.32% | 81.50% | 0.2367 | 78.89% | 92.89% | + +Both backends have the same values. There are 522 truth species; 16 species, +covering 8,042 images, are absent from all five vocabularies. All-image accuracy +keeps those examples; known-truth accuracy uses the remaining 50,598 images +(86.29% coverage). Genus and family truth are fully covered. Predictions use a +fixed zero threshold, without tuning or abstention. + +Updated Europe adds 72 candidate species and updated northern Europe adds 222, +with no removals. Those broader choices slightly reduce accuracy on Flemming; +choose a preset for its documented geographic scope, not its test-set score. +The [preset catalogue](model-presets.md) describes the occurrence filters and +provisional minimum counts. This European dataset does not qualify the usefulness +of every other geographic preset. + +Macro-F1 follows the pinned `mini_metrics` implementation, including predicted-only +classes; it must not be read as accuracy. The retained JSON reports also contain +macro precision/recall, Theil's U, known-only and per-class results at every rank. +No metric-policy or threshold optimization was performed. + +A separate seeded **256-image / 112-species** qualification found identical +rank labels across PyTorch/ONNX × CPU/CUDA × predictions/embeddings, for all five +lists. Embeddings were finite, normalized 1280-dimensional vectors. Supplying +updated Europe as a custom class list preserved selection and order. This does +not establish downstream embedding quality or full-dataset CPU/embedding accuracy. + +## Choosing a runtime + +ONNX is the practical default for new integrations here: it needs no training +package, starts much faster, and uses less CPU process memory. Native PyTorch +remains compatible with existing callers and gives competitive warmed GPU +throughput. Embedding extraction adds little batched cost in this measurement; +small differences and single-image differences should be read alongside the +trial ranges, not as universal speed claims. + +Hardware: Intel Core i7-12800H and RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, +on AC power. Python 3.13.7, PyTorch 2.12.0+cu130, ONNX Runtime GPU 1.30.0, +NumPy 2.4.6, Pillow 12.2.0; FP32, TF32 disabled, no autocast. +Thirty-six fresh processes cover three trials of each runtime/device/output/thread +configuration; each reported cell pools 21 warmed observations. No evaluation or +test jobs overlapped timing. Power-policy fields were unavailable under WSL; +raw reports retain observed GPU temperatures, power and clocks. + +## End-to-end latency and throughput + +Laptop measurements; updated Europe, four CPU threads, three alternating-order trials. Batch latency includes image decoding, preprocessing, transfers, hierarchy reduction and optional embeddings. p95 is descriptive of the retained observations, not a service-level guarantee. + +| Backend | Device | Embeddings | Batch | Median ms | p95 ms | Images/s | Trial median range ms | +|---|---|---|---:|---:|---:|---:|---:| +| onnx | cpu | No | 1 | 114.8 | 134.6 | 8.7 | 105.1–124.6 | +| onnx | cpu | No | 8 | 829.4 | 904.7 | 9.6 | 772.6–864.6 | +| onnx | cpu | Yes | 1 | 108.0 | 119.1 | 9.3 | 99.4–113.2 | +| onnx | cpu | Yes | 8 | 812.2 | 891.5 | 9.8 | 759.7–851.0 | +| onnx | cuda:0 | No | 1 | 33.4 | 38.4 | 29.9 | 30.6–35.8 | +| onnx | cuda:0 | No | 8 | 194.5 | 211.8 | 41.1 | 181.0–202.4 | +| onnx | cuda:0 | No | 32 | 774.5 | 949.1 | 41.3 | 764.2–784.3 | +| onnx | cuda:0 | Yes | 1 | 33.9 | 35.5 | 29.5 | 33.3–34.2 | +| onnx | cuda:0 | Yes | 8 | 199.2 | 211.7 | 40.2 | 190.6–201.8 | +| onnx | cuda:0 | Yes | 32 | 775.9 | 1019.4 | 41.2 | 748.1–784.9 | +| torch | cpu | No | 1 | 156.1 | 174.7 | 6.4 | 155.8–160.8 | +| torch | cpu | No | 8 | 1013.9 | 1098.4 | 7.9 | 994.5–1078.9 | +| torch | cpu | Yes | 1 | 151.7 | 164.4 | 6.6 | 148.7–153.2 | +| torch | cpu | Yes | 8 | 1035.1 | 1120.3 | 7.7 | 1033.5–1036.3 | +| torch | cuda:0 | No | 1 | 35.3 | 48.1 | 28.3 | 33.2–41.3 | +| torch | cuda:0 | No | 8 | 178.3 | 194.9 | 44.9 | 170.8–192.5 | +| torch | cuda:0 | No | 32 | 724.5 | 921.8 | 44.2 | 717.8–746.3 | +| torch | cuda:0 | Yes | 1 | 38.7 | 54.0 | 25.8 | 37.5–50.9 | +| torch | cuda:0 | Yes | 8 | 190.4 | 202.6 | 42.0 | 184.6–198.5 | +| torch | cuda:0 | Yes | 32 | 737.7 | 905.9 | 43.4 | 722.2–744.8 | + +## Startup and process memory + +Cold first image includes lazy load and first execution; RSS is the process high-water mark across the batch sweep. + +| Backend | Device | Embeddings | Median cold first image s | Peak RSS range MiB | +|---|---|---|---:|---:| +| onnx | cpu | No | 0.37 | 573–591 | +| onnx | cpu | Yes | 0.38 | 562–582 | +| onnx | cuda:0 | No | 1.64 | 1461–1477 | +| onnx | cuda:0 | Yes | 1.69 | 1460–1463 | +| torch | cpu | No | 40.46 | 1569–1636 | +| torch | cpu | Yes | 40.10 | 1518–1571 | +| torch | cuda:0 | No | 41.78 | 1896–1899 | +| torch | cuda:0 | Yes | 41.80 | 1898–1900 | + +Single-thread CPU batch-1 medians were 214 ms (ONNX) and 269 ms (PyTorch), +or 225/268 ms with embeddings. Four threads improve this workload; the bounded +batch sweep does not establish maximum CPU throughput. Full-vocabulary timings +and all raw observations are retained in the machine-readable evidence. + +At GPU batch 32 without embeddings, prepared-runtime median latency was about +180–182 ms, compared with 725–775 ms end-to-end. Image preparation is a substantial +cost. Prepared-runtime timing bypasses the public image path; the public API still +applies preprocessing to array inputs. + +First-call timings exclude runtime import/configuration (median approximately +0.86 s for PyTorch and 0.03 s for ONNX), lightweight predictor construction and +Python interpreter startup. They are not cold-boot measurements. Native loading +spent 36.9–39.4 s in spherical classifier initialization before restoring weights. +A loading optimization belongs on a separate core feature/fix branch, followed by +checkpoint regression checks and merge into the release branch. + +Native CUDA allocator peaks were approximately 865 MiB allocated / 1,348 MiB +reserved across the batch sweep. ONNX has device-memory snapshots, not a matching +continuous per-process peak measurement; do not compare those quantities directly. +Both ONNX graphs placed all 170 convolution operations on CUDA; one `Acos` and +four `Concat` operations ran on CPU. Their separate profiler timings are excluded +from the benchmark. All ONNX benchmark processes ran without importing PyTorch. + +## Reproducibility and limits + +The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the +commands, timing boundaries, pinned metric environment and UCloud handoff. +The original 632,913 in-domain test identities and taxonomy were checked locally; +image verification and inference remain for UCloud. No new split is generated. + +Local evidence is retained outside Git under `local-evidence/mambo-v3/`: +`quality-subset-256`, `quality-full`, `performance` and `combined-results`. +Reports preserve image identities/hashes, class-list hashes, artifact hashes, +runtime versions and completion status. Full-dataset collection used serial image +preparation for native and four ordered workers for ONNX; its elapsed time is not +a backend speed comparison. The dedicated benchmark uses matched boundaries. + +- Bundle manifest SHA-256: `c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b` (artifact revision 2). +- Flemming manifest SHA-256: `04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f`. +- Metric revision: `70cc69adc05362863439277048e06386c1f885e1`. +- Runner implementation: `0de3e0d`, with startup instrumentation in `922a45f`. + +Tests: **718 passed, 161 skipped, 1 expected failure** in the full repository +suite; static checks passed. The subsequent startup instrumentation was covered by +**39 passing focused release tests** and static checks. Skipped GPU/slow tests are +not implied to pass by that suite; actual GPU evidence is described separately above. + +The rebuilt deployment wheel passed a fresh installed ONNX-only check with a +relocated read-only bundle, API/CLI execution and Python network calls blocked. +Installed CUDA prediction/embedding modes also passed independently of PyTorch; +the temporary CUDA environment reused existing NVIDIA libraries and is not a clean +dependency-installation qualification. Those JSON reports are retained as +`portable-install-final.json` and `installed-gpu-final.json`. + +In-domain results, cross-OS support, a clean CUDA dependency installation, +training-source/best-epoch provenance and redistribution notices remain open. +The archived September native predictions are historical context, not a +MAMBO_v2 quality baseline. Nothing has been published or tagged. diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 37c6289..856a08e 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -1,7 +1,7 @@ # UCloud model release roadmap Status: release preparation started, 2026-09-23. This document does not publish -artifacts or claim deployment qualification. Target: the completed 10–11 September +artifacts. Qualification claims are limited to the linked measured evidence. Target: the completed 10–11 September 2026 UCloud model, not a new training campaign. The [first input-audit increment](../dev/releases/mambo_v3/README.md) now pins and @@ -10,9 +10,10 @@ MAMBO weights. It recovers both regional presets, confirms identical old/new cla and parent mappings, and captures a small legacy output fixture. Its regional-scope table now includes reproducible Parquet filters: Europe uses the metadata continent field; northern Europe has an exact country-filter reconstruction with documented -ambiguity for membership-neutral additions such as Ireland. Adapter compatibility -and inference qualification remain outstanding. -Local evaluation will use Flemming; the large in-domain dataset remains on UCloud +ambiguity for membership-neutral additions such as Ireland. Aligned deployment +adapters and full Flemming backend comparison are implemented; see the +[evaluation workflow](../dev/releases/mambo_v3/evaluation.md). +The large in-domain dataset remains on UCloud and must be evaluated there using the original supplied split. The [public preset catalogue](model-presets.md) defines the expanded geographic selection, including Australia/Tasmania and deliberately overlapping regions. @@ -584,17 +585,19 @@ has been exercised. Release notes distinguish model changes from package/API cha | D — staged release | Consumer bundles, migration notes, measured trade-offs, offline checks and rollback | A–C; concrete reviewed candidate | | E — broader portability | Additional OS/browser profiles and distribution channels | Core release preserved; qualify only new boundaries | -Start with **A and B**, then use C to make the release recommendation concrete. -The portable bundle and aligned inference implementation now have bounded -CPU/GPU and installed-package evidence; see the +A and B are implemented, and C now has local Flemming and CPU/GPU evidence; see +the [measured release report](mambo-v3-evaluation.md), [deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) -and [consumer guide](../deployment/README.md). The next increment is C; unresolved -training provenance and publication gates remain open. +and [consumer guide](../deployment/README.md). The +[evaluation workflow](../dev/releases/mambo_v3/evaluation.md) prepares the remaining +in-domain work on UCloud using the original split. D remains preparation only: +training-source/best-epoch provenance, redistribution notices and final publication +review are open. No model release has been published or tagged. + +Native cold-start measurement identified costly classifier initialization before +checkpoint restoration. Any optimization must originate on a separate core +feature/fix branch and pass checkpoint validation before merging here. The report keeps +startup and warmed inference costs separate. The next-training-run orchestration plan and experimental quantization are not on -this release's critical path. - -Open work during A: verify candidate binaries and historical weights; locate local -in-domain/Flemming images and manifests; recover training revision and actual preset -memberships; pin the compatible runtime/metric environments. Final package/version -and publication choices follow the measured candidate. CPU/GPU qualification uses -the identified laptop; additional machines are needed only for later support claims. +this release's critical path. Additional OS and clean CUDA installation checks +are needed before making broader support claims. From 6cac799471882cf2f05710f0d6f371158ebbbd24 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 19:10:31 +0200 Subject: [PATCH 027/221] feat: compare released MAMBO pipelines with reproducible charts --- dev/releases/mambo_v3/benchmark.py | 3 +- dev/releases/mambo_v3/comparison_charts.py | 288 ++++++++++++++++++++ dev/releases/mambo_v3/legacy_evaluation.py | 220 +++++++++++++++ dev/releases/mambo_v3/release-comparison.md | 124 +++++++++ dev/releases/mambo_v3/release_comparison.py | 104 +++++++ tests/releases/test_legacy_evaluation.py | 33 +++ 6 files changed, 771 insertions(+), 1 deletion(-) create mode 100644 dev/releases/mambo_v3/comparison_charts.py create mode 100644 dev/releases/mambo_v3/legacy_evaluation.py create mode 100644 dev/releases/mambo_v3/release-comparison.md create mode 100644 dev/releases/mambo_v3/release_comparison.py create mode 100644 tests/releases/test_legacy_evaluation.py diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index aa0a2bc..335eb81 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -136,7 +136,7 @@ def benchmark(args): runtime = predictor._torch if args.backend == "torch" else predictor._onnx for size in args.batches: prepared = np.stack([preprocess(path) for path in paths[:size]]) - for preset in ("full", "europe_v3"): + for preset in args.presets: selector = Predictor(args.bundle, model=preset) predictor._apply_class_mask(selector.class_list) for _ in range(args.warmup): @@ -181,6 +181,7 @@ def main(): parser.add_argument("--embeddings", action="store_true") parser.add_argument("--threads", type=int, default=4) parser.add_argument("--batches", nargs="+", type=int, default=[1, 8, 32]) + parser.add_argument("--presets", nargs="+", default=["full", "europe_v3"]) parser.add_argument("--warmup", type=int, default=2) parser.add_argument("--repeats", type=int, default=7) parser.add_argument("--seed", type=int, default=20260923) diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py new file mode 100644 index 0000000..756233b --- /dev/null +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -0,0 +1,288 @@ +"""Build readable release-comparison SVGs and their compact, auditable source data.""" + +import argparse +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +REGIONS = ("north_europe", "europe", "full") +REGION_LABELS = ("Northern Europe", "Europe", "Global") +MODELS = ("v2", "v3-torch", "v3-onnx") +MODEL_LABELS = ("MAMBO v2 · PyTorch", "MAMBO v3 · PyTorch", "MAMBO v3 · ONNX") +COLORS = ("#7b629c", "#168b89", "#df8739") + + +def completed(path): + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete evidence: {path}") + return report + + +def aggregate(args): + sources = {} + quality = [] + for model, directory, presets in ( + ("v2", args.v2_quality / "v2-full", REGIONS), + ("v3", args.v3_quality / "torch-cuda-0-prediction", (*REGIONS, "north_europe_v3", "europe_v3")), + ): + report = completed(directory / "report.json") + sources[str(directory / "report.json")] = file_hash(directory / "report.json") + for preset in presets: + path = directory / preset / "metrics.json" + metrics = json.loads(path.read_text()) + if file_hash(directory / preset / "mini_metric.csv") != metrics["source_sha256"]: + raise ValueError("Metric source has changed") + sources[str(path)] = file_hash(path) + quality.append( + { + "model": model, + "preset": preset, + "ranks": metrics["ranks"], + "macro_f1_all": metrics["all"]["f1"]["0"], + "metric_revision": metrics["mini_metrics_revision"], + "sample_ids_sha256": report["sample_ids_sha256"], + "list_sha256": report["lists"][preset]["sha256"], + } + ) + if len({r["sample_ids_sha256"] for r in quality}) != 1 or len({r["metric_revision"] for r in quality}) != 1: + raise ValueError("Quality populations or metric revisions differ") + grouped = defaultdict(list) + resources = defaultdict(list) + bank = None + for directory, added in ((args.v3_performance, False), (args.added_performance, True)): + plan = completed(directory / "plan.json") + for variant in plan["completed"]: + path = directory / variant / "report.json" + report = completed(path) + settings = report["settings"] + if settings.get("embeddings", False) or settings["threads"] != 4: + continue + old = report.get("release") == "MAMBO_v2" + model = "v2" if old else f"v3-{settings['backend']}" + device = settings["device"] + records = json.loads((path.parent / "samples.json").read_text()) if old else report["samples"] + if bank is None: + bank = records + if records != bank: + raise ValueError("Timing image banks differ") + sources[str(path)] = file_hash(path) + for cell in report["cells"]: + grouped[(model, device, cell["preset"], cell["batch_size"])].append(cell["end_to_end"]) + # Use the full-list-containing sweep for comparable whole-process memory. + if old or not added: + resources[(model, device)].append( + { + "load_first_seconds": report["load_and_first_image_seconds"] + if old + else report["constructor_seconds"] + report["cold_first_image_seconds"], + "rss_mib": report["peak_rss_kib_linux"] / 1024, + "cuda_allocated_mib": report.get("torch_peak_allocated_bytes", 0) / 2**20 if model != "v3-onnx" else None, + "cuda_reserved_mib": report.get("torch_peak_reserved_bytes", 0) / 2**20 if model != "v3-onnx" else None, + } + ) + speed = [] + for (model, device, preset, batch), runs in sorted(grouped.items()): + if len(runs) != 3: + raise ValueError(f"Expected three timing trials: {(model, device, preset, batch)}") + values = [value for run in runs for value in run["seconds"]] + if len(values) != 21: + raise ValueError("Expected 21 timing observations") + medians = [run["median_seconds"] for run in runs] + speed.append( + { + "model": model, + "device": device, + "preset": preset, + "batch": batch, + "median_ms": statistics.median(values) * 1000, + "p95_ms": float(np.percentile(values, 95)) * 1000, + "trial_min_ms": min(medians) * 1000, + "trial_max_ms": max(medians) * 1000, + "images_per_second": batch / statistics.median(values), + } + ) + memory = [] + for (model, device), runs in sorted(resources.items()): + if len(runs) != 3: + raise ValueError("Expected three resource trials") + row = {"model": model, "device": device} + for key in runs[0]: + values = [r[key] for r in runs] + row[key] = None if values[0] is None else {"median": statistics.median(values), "min": min(values), "max": max(values)} + memory.append(row) + return { + "quality": quality, + "speed": speed, + "resources": memory, + "sources_sha256": sources, + "timing_bank_sha256": hashlib.sha256(json.dumps(bank, sort_keys=True).encode()).hexdigest(), + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; " + "v3 FP32; four threads; three trials; predictions only.", + } + + +def charts(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + plt.rcParams.update( + { + "font.family": "DejaVu Sans", + "font.size": 10, + "svg.fonttype": "none", + "axes.spines.top": False, + "axes.spines.right": False, + "axes.titleweight": "bold", + "figure.facecolor": "white", + } + ) + output.mkdir(parents=True, exist_ok=True) + + def save(fig, name, note): + fig.text(0.02, 0.025, note, fontsize=9, color="#555555") + fig.savefig(output / f"{name}.svg", bbox_inches="tight", metadata={"Date": None}) + fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) + plt.close(fig) + + fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) + x = np.arange(3) + for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): + rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] + for ax, values in zip( + axes, ([100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows], [r["macro_f1_all"] for r in rows]), strict=True + ): + bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) + ax.bar_label(bars, fmt="%.2f", padding=3, fontsize=9) + ax.set_xticks(x, REGION_LABELS) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + axes[0].set(title="Species accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[1].set( + title="Species macro-F1 · all classes", + ylabel="Pinned mini_metrics macro-F1", + ylim=(0, max(r["macro_f1_all"] for r in data["quality"]) * 1.3), + ) + axes[0].legend(loc="upper left", fontsize=9) + fig.suptitle("Flemming: MAMBO v2 versus v3", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.1, 1, 0.95)) + save( + fig, + "mambo-release-quality", + "58,640 images · legacy geographic lists for both releases · unknown species remain in the denominator\n" + "V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines.", + ) + + fig, axes = plt.subplots(1, 2, figsize=(12, 4.6)) + for ax, device, batch in zip(axes, ("cpu", "cuda:0"), (1, 8), strict=True): + for m, (model, label, color) in enumerate(zip(MODELS, MODEL_LABELS, COLORS, strict=True)): + rows = [ + next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, region, batch)) + for region in REGIONS + ] + values = [r["median_ms"] if device == "cpu" else r["images_per_second"] for r in rows] + low = [r["trial_min_ms"] if device == "cpu" else batch * 1000 / r["trial_max_ms"] for r in rows] + high = [r["trial_max_ms"] if device == "cpu" else batch * 1000 / r["trial_min_ms"] for r in rows] + positions = x + (m - 1) * 0.25 + bars = ax.bar(positions, values, 0.25, label=label, color=color) + ax.errorbar( + positions, (np.array(low) + high) / 2, yerr=(np.array(high) - low) / 2, fmt="none", ecolor="#333333", capsize=3, linewidth=1 + ) + ax.bar_label(bars, fmt="%.1f", padding=7, fontsize=8) + ax.set_xticks(x, REGION_LABELS) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + ax.margins(y=0.25) + axes[0].set(title="CPU · one image · lower is better", ylabel="End-to-end latency (ms)") + axes[1].set(title="GPU · batch 8 · higher is better", ylabel="End-to-end images / second") + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.91), ncol=3, frameon=False) + fig.suptitle("Laptop inference speed", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.11, 1, 0.82)) + save( + fig, + "mambo-release-speed", + "i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included\n" + "Whiskers: range of trial medians. V2 uses its published mixed-precision GPU path; v3 uses FP32.", + ) + + fig, axes = plt.subplots(2, 2, figsize=(11, 7)) + for col, device in enumerate(("cpu", "cuda:0")): + for ax, key in zip(axes[:, col], ("rss_mib", "load_first_seconds"), strict=True): + rows = [next(r for r in data["resources"] if (r["model"], r["device"]) == (model, device))[key] for model in MODELS] + values = [r["median"] for r in rows] + bars = ax.bar( + np.arange(3), + values, + color=COLORS, + yerr=[[v - r["min"] for v, r in zip(values, rows, strict=True)], [r["max"] - v for v, r in zip(values, rows, strict=True)]], + capsize=4, + ) + ax.bar_label(bars, fmt="%.2f" if key == "load_first_seconds" else "%.0f", padding=6) + ax.set_xticks(np.arange(3), ("v2 PyTorch", "v3 PyTorch", "v3 ONNX")) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + ax.margins(y=0.3) + if key == "load_first_seconds": + ax.set_yscale("log") + ax.set_ylabel("Seconds · logarithmic scale") + else: + ax.set_ylabel("Process peak RSS (MiB)") + axes[0, col].set_title(f"{'CPU' if device == 'cpu' else 'GPU'} execution · host memory") + axes[1, col].set_title("Local load + first completed prediction") + fig.suptitle("Memory and startup costs", fontsize=16, fontweight="bold") + fig.tight_layout(rect=(0, 0.1, 1, 0.95)) + save( + fig, + "mambo-release-resources", + "RSS includes loading and the batch sweep; host memory is not GPU VRAM. Whiskers: three-trial range.\n" + "Startup uses cached local files, excludes process/bootstrap setup and downloads; includes classifier initialization.", + ) + + fig, ax = plt.subplots(figsize=(9, 3.2)) + for i, region in enumerate(REGIONS[:2]): + rows = [next(r for r in data["quality"] if r["model"] == "v3" and r["preset"] == region + suffix) for suffix in ("", "_v3")] + old, new = [100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows] + delta = new - old + ax.barh(i, delta, height=0.5, color=COLORS[1]) + ax.text(0.02, i, f"{delta:+.2f} pp ({old:.2f}% → {new:.2f}%)", va="center", fontsize=10) + ax.axvline(0, color="#555555", linewidth=1) + ax.set(yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.6, 0.45), xlabel="Species accuracy change (percentage points)") + ax.invert_yaxis() + ax.set_title("V3 updated lists: small accuracy trade-offs on Flemming", loc="left") + fig.tight_layout(rect=(0, 0.15, 1, 1)) + save( + fig, + "mambo-release-preset-delta", + "Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope.\n" + "Both v3 backends agree; these broader occurrence filters were not tuned to Flemming.", + ) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, help="Render previously aggregated chart data without private raw predictions") + for name in ("v2-quality", "v3-quality", "v3-performance", "added-performance"): + parser.add_argument(f"--{name}", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.data: + data = json.loads(args.data.read_text()) + else: + if any(getattr(args, name) is None for name in ("v2_quality", "v3_quality", "v3_performance", "added_performance")): + parser.error("Supply all four evidence directories or --data") + data = aggregate(args) + charts(data, args.output) + write_json(args.output / "mambo-release-comparison.json", data) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/legacy_evaluation.py b/dev/releases/mambo_v3/legacy_evaluation.py new file mode 100644 index 0000000..84a5e33 --- /dev/null +++ b/dev/releases/mambo_v3/legacy_evaluation.py @@ -0,0 +1,220 @@ +"""Evaluate pinned MAMBO_v2 through its original source in an isolated process.""" + +import argparse +import csv +import hashlib +import importlib.metadata +import resource +import subprocess +import time +import tomllib +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.benchmark import snapshot, timing +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, write_json + +COMMIT = "32b3cd661778356b2e8c4cff5b10fa9061aa6f5d" +PRESETS = ("north_europe", "europe", "full") +FILENAMES = dict( + zip(PRESETS, ("hierarchical_bioclip2_ft_neu_v1.pt", "hierarchical_bioclip2_ft_eu_v1.pt", "hierarchical_bioclip2_ft_v1.pt"), strict=True) +) + + +def verify_source(source): + """Require byte-identical source for every Python file in the pinned release.""" + names = subprocess.check_output(["git", "ls-tree", "-r", "--name-only", COMMIT, "mini_trainer"], text=True).splitlines() + for name in names: + if name.endswith(".py"): + expected = subprocess.check_output(["git", "show", f"{COMMIT}:{name}"]) + if (source / name).read_bytes() != expected: + raise ValueError(f"Changed legacy source: {name}") + import mini_trainer + + if Path(mini_trainer.__file__).resolve() != (source / "mini_trainer/__init__.py").resolve(): + raise ValueError("Use python -P with PYTHONPATH=legacy-source:current-checkout") + + +def load_states(root): + """Validate all three published masks, and prove learned tensors are identical.""" + import torch + + inventory = tomllib.loads(Path(__file__).with_name("inventory.toml").read_text()) + hashes = {Path(a["path"]).name: a["sha256"] for a in inventory["artifacts"]} + states = {} + for preset, filename in FILENAMES.items(): + path = root / filename + if file_hash(path) != hashes[filename]: + raise ValueError(f"Changed legacy weights: {path}") + states[preset] = torch.load(path, map_location="cpu", weights_only=True) + full = states["full"] + for state in states.values(): + if state.keys() - {"classifier.active_indices"} != full.keys() - {"classifier.active_indices"}: + raise ValueError("Legacy state keys differ") + for key, value in state.items(): + if key == "classifier.active_indices": + continue + equal = torch.equal(value, full[key]) if isinstance(value, torch.Tensor) else value == full[key] + if not equal: + raise ValueError(f"Learned legacy parameters differ: {key}") + return states, {name: hashes[filename] for name, filename in FILENAMES.items()} + + +def verify_backbone(): + """Pin the external frozen backbone as well as the small release head files.""" + from huggingface_hub import hf_hub_download + + expected = { + "open_clip_config.json": "1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8", + "open_clip_model.safetensors": "b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef", + } + for name, digest in expected.items(): + path = hf_hub_download("imageomics/bioclip-2", name, local_files_only=True) + if file_hash(path) != digest: + raise ValueError(f"Unexpected cached BioCLIP-2 file: {name}") + return expected + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + report = {"status": "running", "release": "MAMBO_v2", "source_commit": COMMIT, "runner_sha256": file_hash(__file__)} + try: + verify_source(args.source) + import torch + from mini_trainer.classifier import bypass_submodule, classification_module + + from mini_trainer.deploy import Predictor + + torch.set_num_threads(args.threads) + torch.backends.cuda.matmul.allow_tf32 = False + torch.backends.cudnn.allow_tf32 = False + torch.backends.cudnn.benchmark = False + report["settings"] = {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()} + report["runtime"] = { + name: importlib.metadata.version(name) for name in ("torch", "torchvision", "open_clip_torch", "timm", "huggingface_hub") + } + report["precision"] = "original API: CUDA float16 autocast; CPU without autocast; checkpoint preprocessing dtype retained; TF32 off" + report["backbone_sha256"] = verify_backbone() + states, report["weights_sha256"] = load_states(args.weights) + masks = { + name: state["classifier.active_indices"].tolist() + if "classifier.active_indices" in state + else list(range(len(state["classifier._extra_state"]["cls2idx"]["0"]))) + for name, state in states.items() + } + mapping = states["full"]["classifier._extra_state"]["cls2idx"]["0"] + inverse = {v: k for k, v in mapping.items()} + report["lists"] = { + name: {"count": len(mask), "sha256": hashlib.sha256(("\n".join(inverse[i] for i in mask) + "\n").encode()).hexdigest()} + for name, mask in masks.items() + } + del states + manifest, records = load_records(args.manifest, args.root, 32 if args.phase == "benchmark" else args.count) + write_json(args.output / "samples.json", records) + report.update( + samples=len(records), + dataset=manifest["dataset"], + manifest_sha256=file_hash(args.manifest), + sample_ids_sha256=file_hash(args.output / "samples.json"), + ) + report["before"] = snapshot() + start = time.perf_counter() + predictor = Predictor(device=args.device, model=str(args.weights / FILENAMES["full"])) + first = predictor.predict(str(args.root / records[0]["path"])) + list(first) # Complete CPU label/confidence materialization before stopping the clock. + report["load_and_first_image_seconds"] = time.perf_counter() - start + classifier = classification_module(predictor.model) + report["input"] = { + "reader_size": predictor.resize_size, + "preprocessed_shape": list(predictor.preproc(predictor.reader(str(args.root / records[0]["path"])).unsqueeze(0)).shape), + } + + def features(paths, pool): + with torch.inference_mode(), torch.autocast(device_type=predictor.device.type, enabled=predictor.device.type == "cuda"): + batch = torch.stack(list(pool.map(predictor.reader, paths))) + batch = predictor.preproc(batch).to(predictor.device) + with bypass_submodule(predictor.model, predictor.model._backbone_output_name): + return predictor.model(batch) + + if args.phase == "benchmark": + paths = [str(args.root / r["path"]) for r in records] + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): + raise ValueError("Benchmark images changed") + report["cells"] = [] + for size in [1, 8] if args.device == "cpu" else [1, 8, 32]: + for preset in PRESETS: + predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) + + def call(): + prediction = predictor.predict(paths[:size]) + # Match v3's completed CPU results; no deferred GPU work. + prediction.indices.cpu() + prediction.confidence.cpu() + + for _ in range(2): + call() + observed = timing(call, 7) + report["cells"].append({"preset": preset, "batch_size": size, "end_to_end": observed, "resources": snapshot()}) + print(preset, size, round(size / observed["median_seconds"], 2), flush=True) + else: + report["qualification"] = {} + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=4)) + writers = {} + for preset in PRESETS: + directory = args.output / preset + directory.mkdir() + writer = csv.writer(stack.enter_context((directory / "mini_metric.csv").open("w", newline=""))) + writer.writerow(CSV_COLUMNS) + writers[preset] = writer + for offset in range(0, len(records), args.batch_size): + selected = records[offset : offset + args.batch_size] + paths = [str(args.root / r["path"]) for r in selected] + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, selected, strict=True)): + raise ValueError("Evaluation image changed") + encoded = features(paths, pool) + with torch.inference_mode(), torch.autocast(device_type=predictor.device.type, enabled=predictor.device.type == "cuda"): + for preset in PRESETS: + predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) + prediction = classifier.predict(encoded) + if args.phase == "qualification" or offset == 0: + direct = predictor.predict(paths) + if direct.labels != prediction.labels: + raise ValueError(f"Cached-feature predictions differ from original API: {preset}") + report["qualification"][preset] = "all sampled labels identical to original API" + writers[preset].writerows(canonical_rows(selected, prediction, offset)) + if offset % (args.batch_size * 50) == 0: + print(offset + len(selected), len(records), flush=True) + report["csv_sha256"] = {name: file_hash(args.output / name / "mini_metric.csv") for name in PRESETS} + if args.device != "cpu": + report["torch_peak_allocated_bytes"] = torch.cuda.max_memory_allocated() + report["torch_peak_reserved_bytes"] = torch.cuda.max_memory_reserved() + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["peak_rss_kib_linux"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + report["after"] = snapshot() + write_json(args.output / "report.json", report) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("qualification", "full", "benchmark")) + for name in ("source", "weights", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--device", default="cuda:0") + parser.add_argument("--threads", type=int, default=4) + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--count", type=int) + args = parser.parse_args() + if args.phase == "qualification" and args.count is None: + args.count = 256 + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md new file mode 100644 index 0000000..4e71237 --- /dev/null +++ b/dev/releases/mambo_v3/release-comparison.md @@ -0,0 +1,124 @@ +# Compare MAMBO_v2 and MAMBO_v3 + +This comparison keeps northern Europe first, then Europe and global. It uses the +legacy geographic lists for the primary release comparison and separately shows +v3's updated Europe/northern-Europe lists. Full quality uses the existing Flemming +manifest, including out-of-vocabulary truth, and the same pinned metric policy. + +## Historical model identity + +The three MAMBO_v2 heads in `inventory.toml` have identical learned tensors and +metadata; only regional active indices differ. Their cached external BioCLIP-2 +backbone is also required. `legacy_evaluation.py` verifies every historical Python +source file against commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, validates head +hashes, checks shared parameters and pins both external backbone files by SHA-256. +The head hashes are observed retrieval hashes, not independent historical signatures. + +Export the original source without switching this release branch: + +```sh +mkdir -p /path/to/v2-source +git archive 32b3cd661778356b2e8c4cff5b10fa9061aa6f5d mini_trainer | tar -x -C /path/to/v2-source +``` + +Use a separate Python 3.13 environment. The measured environment reuses the +existing PyTorch 2.12.0+cu130 / torchvision 0.27.0 runtime and adds +`open_clip_torch==3.3.0`, `timm==1.0.25`, `huggingface_hub==0.36.2`, +`safetensors==0.6.2`, `ftfy==6.3.1`, `regex==2026.9.10`, and +`requests==2.34.2` with its dependencies. This is an isolated comparison environment, +not a recovered historical dependency lock or clean installation qualification. +Do not sync the repository environment or replace its CUDA wheels. + +The local offline Hugging Face cache points `imageomics/bioclip-2` to snapshot +`2957b322090f9cb17ae72c71981c7218a28d81e0`. Required files: + +| File | SHA-256 | +|---|---| +| `open_clip_config.json` | `1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8` | +| `open_clip_model.safetensors` | `b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef` | + +Keep `HF_HUB_OFFLINE=1` and select that cache using `HF_HUB_CACHE`. No downloads +belong in startup timing. Run the original source first on `PYTHONPATH` and use +`python -P`; otherwise the current checkout can silently shadow it. + +## Qualification and full quality + +```sh +HF_HUB_OFFLINE=1 HF_HUB_CACHE=/path/to/pinned-cache \ +PYTHONPATH=/path/to/v2-source:/path/to/mini_trainer \ +/path/to/v2-env/bin/python -P -m dev.releases.mambo_v3.legacy_evaluation qualification \ + --source /path/to/v2-source --weights /path/to/MAMBO \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-qualification +``` + +The 256-image qualification compares the shared-backbone collection path against +original API calls for every list and image. Full collection verifies the first +batch again. The original backbone and head computations remain unchanged; +features are reused across masks only after equality of the learned states is +established. Image bytes are checked against the manifest. Every original truth +label remains in the canonical CSVs. + +Replace `qualification` with `full` for the full dataset. For every list, run the +pinned metric environment using `dev.releases.mambo_v3.metrics --source ... --output ...` +as described in [evaluation.md](evaluation.md). `compare_quality.compare` with +`presets=["north_europe", "europe", "full"]` verifies paired v2/v3 identities, +truth and coverage and produces accuracy changes and label agreement. + +## Speed and memory + +`release_comparison.py benchmark` runs three fresh-process trials of v2 PyTorch +and v3 PyTorch/ONNX on CPU and CUDA, in alternating order. Arguments: + +```sh +python -m dev.releases.mambo_v3.release_comparison benchmark \ + --v2-python /path/to/v2-env/bin/python --v3-python /path/to/v3-env/bin/python \ + --legacy-source /path/to/v2-source --legacy-weights /path/to/MAMBO \ + --hf-cache /path/to/pinned-cache --bundle /path/to/v3-bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-comparison-timings +``` + +Do not overlap timing with other heavy work. Each configuration uses the same +seeded 32-image bank, four CPU threads, two warmups and seven observations per cell. +CPU batches are 1/8; GPU batches are 1/8/32. Calls include decoding, preprocessing, +hierarchy reduction and completed CPU results. Timings cover predictions only; +existing v3 embedding-mode evidence remains in the separate local report. + +V2 uses the original public API for timing: an initial 512-pixel resize, BioCLIP +preprocessing to 224 pixels, and CUDA float16 autocast. V3 uses the qualified +384-pixel recipe and FP32. Both disable TF32. This is the intended real-world comparison of the models and pipelines shipped +in the two versions. Their resolution and precision choices explain the results. V2 has no qualified ONNX +variant in this comparison. The original source's loader warnings and expensive +classifier initialization are preserved; no core fix is applied here. + +Reuse the unchanged earlier v3 global/updated-Europe results. The new v3 trials +add legacy Europe and both northern-Europe lists. Each plotted timing has three +trials; whiskers show trial-median range. RSS is the process high-water mark during +load and the batch sweep, using full-list-containing sweeps for all runtimes. +It is host memory, including initialization transients, not just weights or VRAM. +Native CUDA allocator peaks are separate; ONNX snapshots are not equivalent peaks. +Startup includes predictor construction and first completed call, with local cached +files. Process launch and explicit runtime setup are excluded; lazy imports during +model construction remain included. It is not a cold-boot measurement. + +## Rebuild the charts + +```sh +python -m dev.releases.mambo_v3.comparison_charts \ + --v2-quality /path/to/v2-full-phase --v3-quality /path/to/v3-full-phase \ + --v3-performance /path/to/original-v3-timings \ + --added-performance /path/to/new-comparison-timings --output /path/to/charts +``` + +Aggregation rejects unfinished runs, changed CSVs, different quality populations +or metric revisions, mismatched timing image banks and missing timing trials. +The resulting compact JSON excludes image identities and per-class predictions; +it records measurement summaries and source hashes. Regenerate shareable SVGs from +that JSON alone with `comparison_charts --data /path/to/mambo-release-comparison.json +--output /path/to/charts`. Keep raw evidence outside Git; charts and compact source +data are intentional release documentation assets. + +In-domain comparison remains UCloud work using the original test split. This local +comparison neither changes thresholds/presets from test results nor publishes a +release. Core loading optimizations require a separate feature/fix branch. diff --git a/dev/releases/mambo_v3/release_comparison.py b/dev/releases/mambo_v3/release_comparison.py new file mode 100644 index 0000000..6f9fb65 --- /dev/null +++ b/dev/releases/mambo_v3/release_comparison.py @@ -0,0 +1,104 @@ +"""Run v2 quality or additional v2/v3 timings sequentially in isolated processes.""" + +import argparse +import json +import os +import subprocess +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + root = Path(__file__).resolve().parents[3] + shared = ["--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + legacy = [ + str(args.v2_python), + "-P", + "-m", + "dev.releases.mambo_v3.legacy_evaluation", + args.phase, + "--source", + str(args.legacy_source.resolve()), + "--weights", + str(args.legacy_weights.resolve()), + *shared, + ] + jobs = [] + if args.phase == "full": + jobs.append(("v2-full", legacy, True)) + else: + # Reuse existing v3 full/updated-Europe timings; add both northern lists and legacy Europe. + variants = [(release, device) for device in ("cpu", "cuda:0") for release in ("v2", "v3-torch", "v3-onnx")] + for trial in range(3): + for release, device in variants if trial != 1 else reversed(variants): + name = f"trial-{trial}-{release}-{device.replace(':', '-')}" + if release == "v2": + command = [*legacy, "--device", device] + else: + command = [ + str(args.v3_python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--bundle", + str(args.bundle.resolve()), + "--device", + device, + "--backend", + release[3:], + "--presets", + "north_europe", + "north_europe_v3", + "europe", + "--threads", + "4", + ] + if device == "cpu": + command += ["--batches", "1", "8"] + jobs.append((name, command, release == "v2")) + plan = {"status": "running", "jobs": jobs, "completed": []} + write_json(args.output / "plan.json", plan) + try: + for name, command, old in jobs: + env = dict( + os.environ, + OMP_NUM_THREADS="4", + MKL_NUM_THREADS="4", + OPENBLAS_NUM_THREADS="1", + CUDA_VISIBLE_DEVICES="0", + PYTHONHASHSEED="0", + HF_HUB_OFFLINE="1", + HF_HUB_CACHE=str(args.hf_cache.resolve()), + PYTHONPATH=f"{args.legacy_source.resolve()}:{root}" if old else str(root), + ) + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run( + [*command, "--output", str((args.output / name).resolve())], + env=env, + check=True, + stdout=stream, + stderr=subprocess.STDOUT, + cwd=root, + ) + report = json.loads((args.output / name / "report.json").read_text()) + if report["status"] != "complete": + raise RuntimeError(f"Incomplete comparison: {name}") + plan["completed"].append(name) + write_json(args.output / "plan.json", plan) + plan["status"] = "complete" + except Exception as error: + plan.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(args.output / "plan.json", plan) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("full", "benchmark")) + for name in ("v2-python", "v3-python", "legacy-source", "legacy-weights", "hf-cache", "bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + run(parser.parse_args()) diff --git a/tests/releases/test_legacy_evaluation.py b/tests/releases/test_legacy_evaluation.py new file mode 100644 index 0000000..df563b9 --- /dev/null +++ b/tests/releases/test_legacy_evaluation.py @@ -0,0 +1,33 @@ +"""Historical release comparisons must not silently use different code or weights.""" + +from pathlib import Path + +import pytest +import torch + +from dev.releases.mambo_v3 import legacy_evaluation as legacy + + +def test_legacy_source_rejects_modified_file(tmp_path, monkeypatch): + name = "mini_trainer/deploy.py" + (tmp_path / name).parent.mkdir() + (tmp_path / name).write_bytes(b"changed") + monkeypatch.setattr(legacy.subprocess, "check_output", lambda command, **kwargs: name + "\n" if "ls-tree" in command else b"original") + with pytest.raises(ValueError, match="Changed legacy source"): + legacy.verify_source(tmp_path) + + +def test_shared_heads_allow_masks_but_reject_changed_parameters(monkeypatch): + states = { + legacy.FILENAMES["full"]: {"weight": torch.tensor([1.0])}, + legacy.FILENAMES["europe"]: {"weight": torch.tensor([1.0]), "classifier.active_indices": torch.tensor([0])}, + legacy.FILENAMES["north_europe"]: {"weight": torch.tensor([1.0]), "classifier.active_indices": torch.tensor([0])}, + } + monkeypatch.setattr(legacy, "file_hash", lambda path: "verified") + monkeypatch.setattr(legacy.tomllib, "loads", lambda text: {"artifacts": [{"path": name, "sha256": "verified"} for name in states]}) + monkeypatch.setattr(torch, "load", lambda path, **kwargs: states[path.name]) + loaded, _ = legacy.load_states(Path("unused")) + assert len(loaded) == 3 + states[legacy.FILENAMES["europe"]]["weight"] = torch.tensor([2.0]) + with pytest.raises(ValueError, match="Learned legacy parameters differ"): + legacy.load_states(Path("unused")) From 0aed20c18bfc24c80cca568bd1bb27cc5b4b4665 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 20:30:38 +0200 Subject: [PATCH 028/221] feat: report MAMBO release trade-offs and qualified CPU comparison --- deployment/README.md | 21 +- dev/releases/mambo_v3/README.md | 5 + dev/releases/mambo_v3/comparison_charts.py | 72 +- dev/releases/mambo_v3/legacy_evaluation.py | 7 + dev/releases/mambo_v3/release-comparison.md | 28 +- dev/releases/mambo_v3/release_comparison.py | 2 + docs/assets/mambo-release-comparison.json | 1192 ++++++++++++++++ docs/assets/mambo-release-preset-delta.svg | 187 +++ docs/assets/mambo-release-quality.svg | 978 +++++++++++++ docs/assets/mambo-release-resources.svg | 1356 ++++++++++++++++++ docs/assets/mambo-release-speed.svg | 1413 +++++++++++++++++++ docs/mambo-release-comparison.md | 116 ++ docs/mambo-v3-evaluation.md | 3 + docs/ucloud-model-release-roadmap.md | 1 + 14 files changed, 5353 insertions(+), 28 deletions(-) create mode 100644 docs/assets/mambo-release-comparison.json create mode 100644 docs/assets/mambo-release-preset-delta.svg create mode 100644 docs/assets/mambo-release-quality.svg create mode 100644 docs/assets/mambo-release-resources.svg create mode 100644 docs/assets/mambo-release-speed.svg create mode 100644 docs/mambo-release-comparison.md diff --git a/deployment/README.md b/deployment/README.md index 664fd55..ec09e26 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -92,26 +92,33 @@ defaults, so explicit backend/device arguments are recommended in scripts. On all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, genus and family labels for the full list and both legacy/updated European presets. -Updated Europe reaches **68.81% species accuracy overall**, or **79.74%** on images -whose true species is in the list. Unknown species remain in the overall result. +Northern Europe reaches **70.79% species accuracy overall** (**82.04%** on images +whose true species is in the list), versus **68.71% overall for MAMBO_v2**. Updated +northern Europe reaches **70.32%**. Unknown species remain in the overall result. CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; this checks prediction consistency, not downstream embedding usefulness. -On an i7-12800H / RTX 3080 Ti Laptop GPU, with four CPU threads and the updated -Europe preset, warmed prediction-only measurements were: +On an i7-12800H / RTX 3080 Ti Laptop GPU, with four CPU threads and the legacy +northern-Europe preset, warmed prediction-only measurements were: | Runtime | CPU, one image | GPU, one image | GPU, batch 32 | |---|---:|---:|---:| -| ONNX | 115 ms | 33 ms | 41 images/s | -| PyTorch | 156 ms | 35 ms | 44 images/s | +| ONNX | 104 ms | 33 ms | 42 images/s | +| PyTorch | 148 ms | 37 ms | 45 images/s | These include image preparation and result handling. First prediction including -loading took about 0.37 s CPU / 1.64 s GPU for ONNX, versus 40–42 s for PyTorch; +loading took about 0.38 s CPU / 1.65 s GPU for ONNX, versus 40–42 s for PyTorch; reuse a loaded predictor. ONNX also used less CPU process memory. Prefer it for new lightweight integrations; native PyTorch remains suitable for existing callers and persistent GPU workers. Embedding-mode results, variability, memory and the Linux/WSL qualification limits are in the [measured report](../docs/mambo-v3-evaluation.md). +The [v2-versus-v3 charts](../docs/mambo-release-comparison.md) compare quality, +speed and memory for northern Europe, Europe and global, including the advantages +and costs of each released pipeline. V3 uses less host memory and is faster on CPU +(v2 required a documented input cast here); v2 is faster at GPU batch 32. V2 also +retains higher global species accuracy and family accuracy across these lists. + The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the reproduction commands and UCloud handoff. In-domain evaluation, other operating systems and publication/license review remain open. Small ONNX numerical diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index ba08a37..cfe33bb 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -189,3 +189,8 @@ archived test identities. Image verification and inference still require UCloud. Archived selected predictions support historical context, not MAMBO_v2 model quality or downstream embedding claims. Training-source revision and best-epoch provenance remain unresolved; packaging checkout is not training provenance. + +The [real-world v2/v3 comparison](../../../docs/mambo-release-comparison.md) adds +the published BioCLIP-2 model baseline across northern Europe, Europe and global, +with quality, speed and memory charts. Reproduction and the explicit ancillary +v2 CPU input adapter are documented in [release-comparison.md](release-comparison.md). diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py index 756233b..912b556 100644 --- a/dev/releases/mambo_v3/comparison_charts.py +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -29,6 +29,14 @@ def completed(path): def aggregate(args): sources = {} quality = [] + paired_path = args.v3_quality / "comparison.json" + paired = json.loads(paired_path.read_text()) + reports = [args.v3_quality / f"{backend}-cuda-0-prediction/report.json" for backend in ("torch", "onnx")] + if paired["reports_sha256"] != [file_hash(path) for path in reports]: + raise ValueError("V3 backend agreement evidence is stale") + if any(rank["changed"] for preset in paired["presets"].values() for rank in preset.values()): + raise ValueError("V3 backend labels differ; plot their quality separately") + sources[str(paired_path)] = file_hash(paired_path) for model, directory, presets in ( ("v2", args.v2_quality / "v2-full", REGIONS), ("v3", args.v3_quality / "torch-cuda-0-prediction", (*REGIONS, "north_europe_v3", "europe_v3")), @@ -54,6 +62,10 @@ def aggregate(args): ) if len({r["sample_ids_sha256"] for r in quality}) != 1 or len({r["metric_revision"] for r in quality}) != 1: raise ValueError("Quality populations or metric revisions differ") + for preset in REGIONS: + selected = [r for r in quality if r["preset"] == preset] + if len({r["list_sha256"] for r in selected}) != 1: + raise ValueError(f"Primary comparison lists differ: {preset}") grouped = defaultdict(list) resources = defaultdict(list) bank = None @@ -68,6 +80,8 @@ def aggregate(args): old = report.get("release") == "MAMBO_v2" model = "v2" if old else f"v3-{settings['backend']}" device = settings["device"] + if old and device == "cpu" and not report.get("cpu_input_cast"): + raise ValueError("V2 CPU evidence must explicitly record the input adapter") records = json.loads((path.parent / "samples.json").read_text()) if old else report["samples"] if bank is None: bank = records @@ -125,7 +139,7 @@ def aggregate(args): "sources_sha256": sources, "timing_bank_sha256": hashlib.sha256(json.dumps(bank, sort_keys=True).encode()).hexdigest(), "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; " - "v3 FP32; four threads; three trials; predictions only.", + "v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only.", } @@ -140,6 +154,7 @@ def charts(data, output): "font.family": "DejaVu Sans", "font.size": 10, "svg.fonttype": "none", + "svg.hashsalt": "mambo-release-comparison-v1", "axes.spines.top": False, "axes.spines.right": False, "axes.titleweight": "bold", @@ -154,15 +169,20 @@ def save(fig, name, note): fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) plt.close(fig) - fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) + fig, axes = plt.subplots(2, 2, figsize=(12, 7.5)) + axes = axes.ravel() x = np.arange(3) for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] - for ax, values in zip( - axes, ([100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows], [r["macro_f1_all"] for r in rows]), strict=True - ): + values_by_rank = ( + [100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows], + [r["macro_f1_all"] for r in rows], + [100 * r["ranks"]["genus"]["micro_accuracy_all"] for r in rows], + [100 * r["ranks"]["family"]["micro_accuracy_all"] for r in rows], + ) + for index, (ax, values) in enumerate(zip(axes, values_by_rank, strict=True)): bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) - ax.bar_label(bars, fmt="%.2f", padding=3, fontsize=9) + ax.bar_label(bars, fmt="%.3f" if index == 1 else "%.2f", padding=3, fontsize=9) ax.set_xticks(x, REGION_LABELS) ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) @@ -172,6 +192,8 @@ def save(fig, name, note): ylabel="Pinned mini_metrics macro-F1", ylim=(0, max(r["macro_f1_all"] for r in data["quality"]) * 1.3), ) + axes[2].set(title="Genus accuracy", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[3].set(title="Family accuracy", ylabel="Correct predictions (%)", ylim=(0, 100)) axes[0].legend(loc="upper left", fontsize=9) fig.suptitle("Flemming: MAMBO v2 versus v3", fontsize=16, fontweight="bold") fig.tight_layout(rect=(0, 0.1, 1, 0.95)) @@ -182,36 +204,48 @@ def save(fig, name, note): "V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines.", ) - fig, axes = plt.subplots(1, 2, figsize=(12, 4.6)) - for ax, device, batch in zip(axes, ("cpu", "cuda:0"), (1, 8), strict=True): + fig, axes = plt.subplots(2, 2, figsize=(12, 7.8)) + axes = axes.ravel() + for ax, device, batch in zip(axes, ("cpu", "cuda:0", "cuda:0", "cuda:0"), (1, 1, 8, 32), strict=True): for m, (model, label, color) in enumerate(zip(MODELS, MODEL_LABELS, COLORS, strict=True)): rows = [ next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, region, batch)) for region in REGIONS ] - values = [r["median_ms"] if device == "cpu" else r["images_per_second"] for r in rows] - low = [r["trial_min_ms"] if device == "cpu" else batch * 1000 / r["trial_max_ms"] for r in rows] - high = [r["trial_max_ms"] if device == "cpu" else batch * 1000 / r["trial_min_ms"] for r in rows] + values = [r["median_ms"] if batch == 1 else r["images_per_second"] for r in rows] + low = [r["trial_min_ms"] if batch == 1 else batch * 1000 / r["trial_max_ms"] for r in rows] + high = [r["trial_max_ms"] if batch == 1 else batch * 1000 / r["trial_min_ms"] for r in rows] positions = x + (m - 1) * 0.25 - bars = ax.bar(positions, values, 0.25, label=label, color=color) + ax.bar(positions, values, 0.25, label=label, color=color) ax.errorbar( positions, (np.array(low) + high) / 2, yerr=(np.array(high) - low) / 2, fmt="none", ecolor="#333333", capsize=3, linewidth=1 ) - ax.bar_label(bars, fmt="%.1f", padding=7, fontsize=8) + for position, value, upper in zip(positions, values, high, strict=True): + ax.annotate( + f"{value:.1f}", + (position, max(value, upper)), + xytext=(0, 4), + textcoords="offset points", + ha="center", + va="bottom", + fontsize=8, + ) ax.set_xticks(x, REGION_LABELS) ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) ax.margins(y=0.25) - axes[0].set(title="CPU · one image · lower is better", ylabel="End-to-end latency (ms)") - axes[1].set(title="GPU · batch 8 · higher is better", ylabel="End-to-end images / second") - fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.91), ncol=3, frameon=False) + axes[0].set(title="CPU · one image · v2 with input adapter", ylabel="End-to-end latency (ms)") + axes[1].set(title="GPU · one image · lower is better", ylabel="End-to-end latency (ms)") + axes[2].set(title="GPU · batch 8 · higher is better", ylabel="End-to-end images / second") + axes[3].set(title="GPU · batch 32 · higher is better", ylabel="End-to-end images / second") + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) fig.suptitle("Laptop inference speed", fontsize=16, fontweight="bold") - fig.tight_layout(rect=(0, 0.11, 1, 0.82)) + fig.tight_layout(rect=(0, 0.1, 1, 0.90)) save( fig, "mambo-release-speed", "i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included\n" - "Whiskers: range of trial medians. V2 uses its published mixed-precision GPU path; v3 uses FP32.", + "Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32.", ) fig, axes = plt.subplots(2, 2, figsize=(11, 7)) @@ -227,7 +261,7 @@ def save(fig, name, note): capsize=4, ) ax.bar_label(bars, fmt="%.2f" if key == "load_first_seconds" else "%.0f", padding=6) - ax.set_xticks(np.arange(3), ("v2 PyTorch", "v3 PyTorch", "v3 ONNX")) + ax.set_xticks(np.arange(3), ("v2 + input cast" if device == "cpu" else "v2 PyTorch", "v3 PyTorch", "v3 ONNX")) ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) ax.margins(y=0.3) diff --git a/dev/releases/mambo_v3/legacy_evaluation.py b/dev/releases/mambo_v3/legacy_evaluation.py index 84a5e33..b21fc77 100644 --- a/dev/releases/mambo_v3/legacy_evaluation.py +++ b/dev/releases/mambo_v3/legacy_evaluation.py @@ -122,6 +122,12 @@ def run(args): report["before"] = snapshot() start = time.perf_counter() predictor = Predictor(device=args.device, model=str(args.weights / FILENAMES["full"])) + report["cpu_input_cast"] = args.cpu_float32 + if args.cpu_float32: + if args.device != "cpu": + raise ValueError("The ancillary float32 input adapter is CPU-only") + original_preproc = predictor.preproc + predictor.preproc = lambda image: original_preproc(image).float() first = predictor.predict(str(args.root / records[0]["path"])) list(first) # Complete CPU label/confidence materialization before stopping the clock. report["load_and_first_image_seconds"] = time.perf_counter() - start @@ -210,6 +216,7 @@ def main(): parser.add_argument("--threads", type=int, default=4) parser.add_argument("--batch-size", type=int, default=32) parser.add_argument("--count", type=int) + parser.add_argument("--cpu-float32", action="store_true", help="Ancillary CPU run: cast original preprocessor output to float32") args = parser.parse_args() if args.phase == "qualification" and args.count is None: args.count = 256 diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md index 4e71237..001c97f 100644 --- a/dev/releases/mambo_v3/release-comparison.md +++ b/dev/releases/mambo_v3/release-comparison.md @@ -59,7 +59,10 @@ features are reused across masks only after equality of the learned states is established. Image bytes are checked against the manifest. Every original truth label remains in the canonical CSVs. -Replace `qualification` with `full` for the full dataset. For every list, run the +Replace `qualification` with `full` for the full dataset, using +`--output /path/to/v2-full-phase/v2-full` for the chart aggregator's directory layout. +Alternatively, use `release_comparison full` with the shared arguments shown below. +For every list, run the pinned metric environment using `dev.releases.mambo_v3.metrics --source ... --output ...` as described in [evaluation.md](evaluation.md). `compare_quality.compare` with `presets=["north_europe", "europe", "full"]` verifies paired v2/v3 identities, @@ -85,7 +88,16 @@ CPU batches are 1/8; GPU batches are 1/8/32. Calls include decoding, preprocessi hierarchy reduction and completed CPU results. Timings cover predictions only; existing v3 embedding-mode evidence remains in the separate local report. -V2 uses the original public API for timing: an initial 512-pixel resize, BioCLIP +The first unadapted v2 CPU attempt is retained as failed evidence: its bfloat16 +preprocessed input meets float32 convolution weights and raises +`RuntimeError: expected scalar type BFloat16 but found Float` in this environment. +The ancillary CPU benchmark uses `--cpu-float32`, a caller-side wrapper that casts +the original preprocessor's output to float32. It preserves its values and leaves +all historical source and learned weights unchanged. The orchestrator selects this +flag only for CPU, records it explicitly, and the CPU charts label the adapter. +It is not a shipped core fix. GPU and full quality use the original path. + +V2 uses the original public API for GPU timing: an initial 512-pixel resize, BioCLIP preprocessing to 224 pixels, and CUDA float16 autocast. V3 uses the qualified 384-pixel recipe and FP32. Both disable TF32. This is the intended real-world comparison of the models and pipelines shipped in the two versions. Their resolution and precision choices explain the results. V2 has no qualified ONNX @@ -122,3 +134,15 @@ data are intentional release documentation assets. In-domain comparison remains UCloud work using the original test split. This local comparison neither changes thresholds/presets from test results nor publishes a release. Core loading optimizations require a separate feature/fix branch. + +The local run retains full v2 quality under +`local-evidence/mambo-release-comparison-quality/v2-full/` and successful timing +trials under `local-evidence/mambo-release-comparison-performance-cpu-adapter/`. +The original unadapted CPU failure remains in +`local-evidence/mambo-release-comparison-performance/trial-0-v2-cpu/report.json`. +Earlier v3 quality and timing inputs remain under `local-evidence/mambo-v3/`. + +All 18 additional timing processes completed. An interrupted final v2 GPU trial +is retained separately and excluded; its successful replacement is +`trial-2-v2-cuda-0-retry1`. Every reported timing cell contains exactly three +successful trials. The original interrupted plan remains as `interrupted-plan.json`. diff --git a/dev/releases/mambo_v3/release_comparison.py b/dev/releases/mambo_v3/release_comparison.py index 6f9fb65..5be0056 100644 --- a/dev/releases/mambo_v3/release_comparison.py +++ b/dev/releases/mambo_v3/release_comparison.py @@ -36,6 +36,8 @@ def run(args): name = f"trial-{trial}-{release}-{device.replace(':', '-')}" if release == "v2": command = [*legacy, "--device", device] + if device == "cpu": + command.append("--cpu-float32") else: command = [ str(args.v3_python), diff --git a/docs/assets/mambo-release-comparison.json b/docs/assets/mambo-release-comparison.json new file mode 100644 index 0000000..9c0a0a3 --- /dev/null +++ b/docs/assets/mambo-release-comparison.json @@ -0,0 +1,1192 @@ +{ + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896 + } + }, + "macro_f1_all": 0.2575380033854696, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694 + } + }, + "macro_f1_all": 0.19998360830548267, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401 + } + }, + "macro_f1_all": 0.08990868448899293, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078956343792633, + "micro_accuracy_known": 0.8204079212617099 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936732605729877, + "micro_accuracy_known": 0.7936867954774126 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298090040927695, + "micro_accuracy_known": 0.9298090040927695 + } + }, + "macro_f1_all": 0.25450880594788156, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v3", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7793656207366985, + "micro_accuracy_known": 0.7793656207366985 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9286323328785812, + "micro_accuracy_known": 0.9286323328785812 + } + }, + "macro_f1_all": 0.19931852384419563, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v3", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5843281036834925, + "micro_accuracy_known": 0.6772006798687695 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.903137789904502, + "micro_accuracy_known": 0.903137789904502 + } + }, + "macro_f1_all": 0.09709532327738138, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889154160982265, + "micro_accuracy_known": 0.7889154160982265 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289222373806275, + "micro_accuracy_known": 0.9289222373806275 + } + }, + "macro_f1_all": 0.23669244246452395, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + }, + { + "model": "v3", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779160982264666, + "micro_accuracy_known": 0.7779160982264666 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "abstention_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254945429740792, + "micro_accuracy_known": 0.9254945429740792 + } + }, + "macro_f1_all": 0.19747553631500317, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 108.51240400006645, + "p95_ms": 123.77933399693575, + "trial_min_ms": 97.39962699677562, + "trial_max_ms": 113.84981300216168, + "images_per_second": 9.215536317851623 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 822.0081180006673, + "p95_ms": 870.8548600006907, + "trial_min_ms": 820.2729259974149, + "trial_max_ms": 846.277905999159, + "images_per_second": 9.732263982329071 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 114.8194630004582, + "p95_ms": 134.62799300032202, + "trial_min_ms": 105.08139800003846, + "trial_max_ms": 124.61581699972157, + "images_per_second": 8.709324829328015 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 829.4069539988413, + "p95_ms": 904.6590870020736, + "trial_min_ms": 772.6378150000528, + "trial_max_ms": 864.606418999756, + "images_per_second": 9.645446015890501 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 112.84695399808697, + "p95_ms": 135.95893499950762, + "trial_min_ms": 111.31972099974519, + "trial_max_ms": 115.08480599877657, + "images_per_second": 8.86155952438869 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 865.4289660007635, + "p95_ms": 896.7971799975203, + "trial_min_ms": 831.8117230010103, + "trial_max_ms": 880.8760790016095, + "images_per_second": 9.243970694635777 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 103.7234499999613, + "p95_ms": 124.14646799879847, + "trial_min_ms": 97.68370800156845, + "trial_max_ms": 119.08456600212958, + "images_per_second": 9.6410213890916 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 824.3145499982347, + "p95_ms": 861.5687530000287, + "trial_min_ms": 791.8309580018104, + "trial_max_ms": 852.1146800012502, + "images_per_second": 9.705033109044518 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 112.1231870019983, + "p95_ms": 126.15529799950309, + "trial_min_ms": 102.30596700057504, + "trial_max_ms": 123.34861300041666, + "images_per_second": 8.918761825617548 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 818.1298460003745, + "p95_ms": 854.9832339995191, + "trial_min_ms": 797.6780380013224, + "trial_max_ms": 835.7702249995782, + "images_per_second": 9.778398916883345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 31.974444002116797, + "p95_ms": 36.03833899978781, + "trial_min_ms": 31.499988999712514, + "trial_max_ms": 33.238082000025315, + "images_per_second": 31.274976976418955 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 190.02189400271163, + "p95_ms": 203.95815500160097, + "trial_min_ms": 181.0136739986774, + "trial_max_ms": 194.3993130007584, + "images_per_second": 42.100411860360886 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 751.9461080009933, + "p95_ms": 938.8219909997133, + "trial_min_ms": 733.0324560025474, + "trial_max_ms": 805.7348090005689, + "images_per_second": 42.556241277809406 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 33.4465949999867, + "p95_ms": 38.38332599843852, + "trial_min_ms": 30.618580000009388, + "trial_max_ms": 35.84958700230345, + "images_per_second": 29.898409688651345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 194.54678400143166, + "p95_ms": 211.8438170000445, + "trial_min_ms": 181.03928100026678, + "trial_max_ms": 202.35563499954878, + "images_per_second": 41.121214319025334 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 774.5358419997501, + "p95_ms": 949.0962469972146, + "trial_min_ms": 764.2361749967677, + "trial_max_ms": 784.2745119996835, + "images_per_second": 41.31506673387792 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 38.574180001887726, + "p95_ms": 41.16026200063061, + "trial_min_ms": 37.06625300037558, + "trial_max_ms": 40.838097000232665, + "images_per_second": 25.92407667385444 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 202.19900700249127, + "p95_ms": 211.71870800026227, + "trial_min_ms": 198.48519999868586, + "trial_max_ms": 202.6014760012913, + "images_per_second": 39.56498164158359 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 804.4566509997821, + "p95_ms": 961.4865859985002, + "trial_min_ms": 794.1813469988119, + "trial_max_ms": 830.9064189998026, + "images_per_second": 39.77840193157738 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 32.848500999534735, + "p95_ms": 41.949999998905696, + "trial_min_ms": 30.442417999438476, + "trial_max_ms": 40.2992199997243, + "images_per_second": 30.44278945983453 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 186.86159300341387, + "p95_ms": 231.81681699861656, + "trial_min_ms": 182.11845200130483, + "trial_max_ms": 189.51840799854835, + "images_per_second": 42.81243604646913 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 753.8683550010319, + "p95_ms": 914.5665709984314, + "trial_min_ms": 743.5950600010983, + "trial_max_ms": 760.9614780012635, + "images_per_second": 42.447729484488306 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 32.764373001555214, + "p95_ms": 37.03474800204276, + "trial_min_ms": 30.950796000979608, + "trial_max_ms": 35.4559719999088, + "images_per_second": 30.520956404462048 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 188.96362599843997, + "p95_ms": 209.1836069994315, + "trial_min_ms": 176.49814899777994, + "trial_max_ms": 197.84098799937055, + "images_per_second": 42.336190140985366 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 760.7565639991662, + "p95_ms": 922.7298170007998, + "trial_min_ms": 737.9431469998963, + "trial_max_ms": 802.070398000069, + "images_per_second": 42.063389938801855 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 139.97511000343366, + "p95_ms": 157.91612699831603, + "trial_min_ms": 132.2067729997798, + "trial_max_ms": 148.36850999927265, + "images_per_second": 7.144127266450939 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 1020.2903719982714, + "p95_ms": 1126.8082070018863, + "trial_min_ms": 990.7244099995296, + "trial_max_ms": 1102.0994509999582, + "images_per_second": 7.840905118345617 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 156.06195000145817, + "p95_ms": 174.66607700043824, + "trial_min_ms": 155.75652500047, + "trial_max_ms": 160.84377999868593, + "images_per_second": 6.407711809256878 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 1013.887937002437, + "p95_ms": 1098.4262460005993, + "trial_min_ms": 994.4540770011372, + "trial_max_ms": 1078.8947210021433, + "images_per_second": 7.8904183667990235 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 162.19867499967222, + "p95_ms": 183.9224630020908, + "trial_min_ms": 160.09652899811044, + "trial_max_ms": 162.8700189976371, + "images_per_second": 6.165278477164014 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 1099.8652199996286, + "p95_ms": 1168.8887240015902, + "trial_min_ms": 1066.5678989971639, + "trial_max_ms": 1130.8798369973374, + "images_per_second": 7.273618489366089 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 148.2759509999596, + "p95_ms": 161.5721569978632, + "trial_min_ms": 142.76755700120702, + "trial_max_ms": 153.29030800057808, + "images_per_second": 6.744182001572678 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 1082.5685600029828, + "p95_ms": 1133.4843360018567, + "trial_min_ms": 1013.1757369999832, + "trial_max_ms": 1087.7670109985047, + "images_per_second": 7.3898321968429945 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 139.39189299708232, + "p95_ms": 159.55598099753843, + "trial_min_ms": 129.97479099794873, + "trial_max_ms": 153.69803499925183, + "images_per_second": 7.174018362896696 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 1022.699465000187, + "p95_ms": 1107.3616229987238, + "trial_min_ms": 1004.2549429999781, + "trial_max_ms": 1085.7946290016116, + "images_per_second": 7.8224349124877435 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 35.489638001308776, + "p95_ms": 57.598117000452476, + "trial_min_ms": 33.89597299974412, + "trial_max_ms": 52.630236998084, + "images_per_second": 28.177238662257484 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 175.51926099986304, + "p95_ms": 185.99682900094194, + "trial_min_ms": 174.19886200150358, + "trial_max_ms": 176.5289369977836, + "images_per_second": 45.57904331654087 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 728.2977190006932, + "p95_ms": 884.3167390004965, + "trial_min_ms": 698.9123559978907, + "trial_max_ms": 760.5062379989249, + "images_per_second": 43.938075274913146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 35.27583799950662, + "p95_ms": 48.10837100012577, + "trial_min_ms": 33.24329500173917, + "trial_max_ms": 41.260214002249995, + "images_per_second": 28.348015432375732 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 178.32208699837793, + "p95_ms": 194.90453400067054, + "trial_min_ms": 170.77715800041915, + "trial_max_ms": 192.54146399907768, + "images_per_second": 44.86264228206779 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 724.5190200010256, + "p95_ms": 921.8273680016864, + "trial_min_ms": 717.8096630013897, + "trial_max_ms": 746.3200019992655, + "images_per_second": 44.167232490259124 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 45.16958599924692, + "p95_ms": 55.23221900148201, + "trial_min_ms": 36.25714399822755, + "trial_max_ms": 48.02743799882592, + "images_per_second": 22.1387904688051 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 191.97120100216125, + "p95_ms": 224.58959399955347, + "trial_min_ms": 185.349908999342, + "trial_max_ms": 204.552421997505, + "images_per_second": 41.672917386759146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 758.8707609975245, + "p95_ms": 956.4475619990844, + "trial_min_ms": 727.8204619979078, + "trial_max_ms": 767.2486240007856, + "images_per_second": 42.16791797055993 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 36.8857930006925, + "p95_ms": 50.996198999200715, + "trial_min_ms": 32.99324700128636, + "trial_max_ms": 48.603333001665305, + "images_per_second": 27.11070899251714 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 171.64449200208765, + "p95_ms": 187.66877799862414, + "trial_min_ms": 168.77017200022237, + "trial_max_ms": 178.43948399968212, + "images_per_second": 46.6079622287134 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 718.6301279980398, + "p95_ms": 923.7060959967494, + "trial_min_ms": 686.7490500007989, + "trial_max_ms": 768.8245279969124, + "images_per_second": 44.52916563510302 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 35.540962002414744, + "p95_ms": 50.400192998495186, + "trial_min_ms": 33.24394499941263, + "trial_max_ms": 46.86532299820101, + "images_per_second": 28.136548468554604 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 185.47856499935733, + "p95_ms": 197.47024499883992, + "trial_min_ms": 182.4952110000595, + "trial_max_ms": 187.0011249993695, + "images_per_second": 43.131668611021006 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 717.1896030013158, + "p95_ms": 890.1827099980437, + "trial_min_ms": 697.0991640009743, + "trial_max_ms": 741.660445000889, + "images_per_second": 44.61860554877744 + } + ], + "resources": [ + { + "model": "v2", + "device": "cpu", + "load_first_seconds": { + "median": 209.39651592600057, + "min": 198.43300686099974, + "max": 209.59208342499915 + }, + "rss_mib": { + "median": 4122.8125, + "min": 4122.08203125, + "max": 4123.83203125 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v2", + "device": "cuda:0", + "load_first_seconds": { + "median": 209.60287212600088, + "min": 208.6747407030016, + "max": 210.06140313599826 + }, + "rss_mib": { + "median": 4122.58203125, + "min": 4122.25390625, + "max": 4123.69921875 + }, + "cuda_allocated_mib": { + "median": 1935.630859375, + "min": 1935.630859375, + "max": 1935.630859375 + }, + "cuda_reserved_mib": { + "median": 2072.0, + "min": 2072.0, + "max": 2072.0 + } + }, + { + "model": "v3-onnx", + "device": "cpu", + "load_first_seconds": { + "median": 0.38248996100082877, + "min": 0.36779166300038924, + "max": 0.40503490100309136 + }, + "rss_mib": { + "median": 586.5078125, + "min": 572.76953125, + "max": 590.7421875 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "load_first_seconds": { + "median": 1.6538925760032726, + "min": 1.6474964560002263, + "max": 1.6716580809988955 + }, + "rss_mib": { + "median": 1469.08984375, + "min": 1461.17578125, + "max": 1476.80859375 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-torch", + "device": "cpu", + "load_first_seconds": { + "median": 40.465289795996796, + "min": 39.93423429299946, + "max": 40.48855051400096 + }, + "rss_mib": { + "median": 1573.19921875, + "min": 1568.90234375, + "max": 1636.4609375 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v3-torch", + "device": "cuda:0", + "load_first_seconds": { + "median": 41.788645010001346, + "min": 41.23758513699795, + "max": 42.60878924099961 + }, + "rss_mib": { + "median": 1897.02734375, + "min": 1895.94921875, + "max": 1898.734375 + }, + "cuda_allocated_mib": { + "median": 865.3681640625, + "min": 865.3681640625, + "max": 865.3681640625 + }, + "cuda_reserved_mib": { + "median": 1348.0, + "min": 1348.0, + "max": 1348.0 + } + } + ], + "sources_sha256": { + "local-evidence/mambo-v3/quality-full/comparison.json": "e30365591209612e133218dfe4abf7baa0fb9c8394a8538738261c802e75b6a0", + "local-evidence/mambo-release-comparison-quality/v2-full/report.json": "c9a98044cbc97ab0033b1f794e284b8f8504f26fc0b7574dfa619c16df6db263", + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "dd25bb7b7dc8552fa0da7d3fb48f8772eb45b5824e04af8594c95f5e522a5ae9", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "bd04f55a6906d832ded0047840ace6ada6f50ed1e77bf8f81a5aa4b4e591a2db", + "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1789eb0f6d81b82b23ace78f57001369cbdcfb386cd00197f20172e80ad06396", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/report.json": "ba80d1580f5b563bd5eb0d9af3af392c6115766c4dcebe619f68e034c938b47d", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "7a58a33ea5cd49e26ea10b6d325f109707c1b3ab0dfb5fdb2036f70695d239a6", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "cd0001fe1cf13dd26bab63fa6ce8e357a26a8b5491a8cb82744fdd65ebb164b0", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b25af91cfc1b0e82c920d26844522117386cab2aad2afe028ba0871cb6b99260", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "a754f78e8a09d2ee90bd65096562781755d7c180f84ce376afbb27750b5e1fad", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "82181458085523df79aeaececb2b50f806c73b619820cf34692c4bfaa3e33cec", + "local-evidence/mambo-v3/performance/trial-0-torch-cpu-prediction-t4/report.json": "f75f2fd264d09ab6aa7bd194e7a6f8afc28980e41e81e164330f0efe5746e88f", + "local-evidence/mambo-v3/performance/trial-0-onnx-cpu-prediction-t4/report.json": "dbec7f2753ea649998ec3d1c6d5d75608d1465d273755910f531902247335047", + "local-evidence/mambo-v3/performance/trial-0-torch-cuda-0-prediction-t4/report.json": "e9d75960d5ce34a9040f6d0c1af2476bad9c3edcfaa0cb581fdf37d3bc8cc1eb", + "local-evidence/mambo-v3/performance/trial-0-onnx-cuda-0-prediction-t4/report.json": "41705c1cdd32397a1b7504eeb8b018308fee04716e807c9e20551f885ca9e5d2", + "local-evidence/mambo-v3/performance/trial-1-onnx-cuda-0-prediction-t4/report.json": "2f85c06d080971c8d677442928097f46939eaf7010707af25915c71f01c16720", + "local-evidence/mambo-v3/performance/trial-1-torch-cuda-0-prediction-t4/report.json": "38d58fb969176851aba53393228946658242a63d15964085f5c55ba8c617fbe7", + "local-evidence/mambo-v3/performance/trial-1-onnx-cpu-prediction-t4/report.json": "983887ef2d024f811d17ca21e5db55b7dfdcb26f11528a2cdf122fa3f9683e06", + "local-evidence/mambo-v3/performance/trial-1-torch-cpu-prediction-t4/report.json": "e092bf39351e6bb1608c643b319ab3ebdd6168498a9aea2381d07e9d6bc88ae8", + "local-evidence/mambo-v3/performance/trial-2-torch-cpu-prediction-t4/report.json": "ca3ffa96c7cd0c410f6804a94c66aa6fd9e3076739e76ac5276877131ec3acd7", + "local-evidence/mambo-v3/performance/trial-2-onnx-cpu-prediction-t4/report.json": "3c49eb94eeec2316838d18c1e691756ef5ab7e215cffa1c50084bcf0772d7ad5", + "local-evidence/mambo-v3/performance/trial-2-torch-cuda-0-prediction-t4/report.json": "a3958a47226f021d42acdc123d81a7e08540d9113a2ce4f0b6559eb7022fff04", + "local-evidence/mambo-v3/performance/trial-2-onnx-cuda-0-prediction-t4/report.json": "927bf5395c71330f8d924a621e060d73ba5cc48210013f0880d6ec1360ccf28f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cpu/report.json": "21cfb5b069af6a0e008f3b017a6514409b447d2f63d9b7df4da9972113b1aab8", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cpu/report.json": "ea44ddb694bd1922a717775711c1be2fc167223bba2f6827d69ee692ebefe52e", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cpu/report.json": "7933e6411f95991c742bf7851fc404918ae8e86e7a03c423d4f07f2d76270f50", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cuda-0/report.json": "8f01c6b3299de7ca8c1e122f3a3a41cc71e0551f27800f42f0729255ce67450a", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cuda-0/report.json": "079ffb75a89f7db4184f936482de647ddc9216d2cc56ca471fd70e2799a074c7", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cuda-0/report.json": "5985213e519f137a6f8f5d118d43a66692579608aa5169c355a4fc3f0c9ac74b", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cuda-0/report.json": "1433fafea9fbb203400c83c83b68112b72dd74f0397ace1fa5eea7032899ddd3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cuda-0/report.json": "7e8a7c1f30e5102378d230fb1d5ca1d1a5cdef106dff66f1cf408ffeaf17f115", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cuda-0/report.json": "f9deaee77c4ee1d3ff00b63c45959cc2dcddbbcd6ee890dcbd4bf9e5ed5cbb69", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cpu/report.json": "db7e71075abe904f239498fa36c831f1dce1c40284c553f54680cc4d7e62b54f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cpu/report.json": "6cbadadbd51a877c335516e8abb7420ecd553e2146fb59b6275010fe58cbeabc", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cpu/report.json": "1d3ccb09d35977644d7f13584717b0df977d636abef06594bb55c1d1acb4f430", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cpu/report.json": "9ce8be6fa3462f4ff7440b040eb5ffa54ec6e80d4eedfdc8bfc2e0c21da3d353", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cpu/report.json": "3332f479ebd7213ac6301f507bb63e242d4bb3ac4c5e8e4a7e0da1cfe7eaca2c", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cpu/report.json": "c0d664560c4f71d97f10734348b2f37f564bedd76cd2e996fab0b0f7e3f5f8fb", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cuda-0-retry1/report.json": "5853f83dee6b7009f8038327253fe92f1baa3d0454a225edf6f192560ebab0f3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cuda-0/report.json": "c348b2c2af88587f075c562c94734bb68b0a29177085baacd03d669f3e2ee259", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cuda-0/report.json": "cabf7f6338f2a2741838547315c0da33da45ce021c26e4b8e2e043d9bd4168b6" + }, + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63", + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only." +} diff --git a/docs/assets/mambo-release-preset-delta.svg b/docs/assets/mambo-release-preset-delta.svg new file mode 100644 index 0000000..9eae5d0 --- /dev/null +++ b/docs/assets/mambo-release-preset-delta.svg @@ -0,0 +1,187 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + −0.6 + + + + + + + + + + −0.4 + + + + + + + + + + −0.2 + + + + + + + + + + 0.0 + + + + + + + + + + 0.2 + + + + + + + + + + 0.4 + + + + Species accuracy change (percentage points) + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + + + + + -0.47 pp (70.79% → 70.32%) + + + -0.14 pp (68.95% → 68.81%) + + + V3 updated lists: small accuracy trade-offs on Flemming + + + + Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope. + Both v3 backends agree; these broader occurrence filters were not tuned to Flemming. + + + + + + + + diff --git a/docs/assets/mambo-release-quality.svg b/docs/assets/mambo-release-quality.svg new file mode 100644 index 0000000..a87920b --- /dev/null +++ b/docs/assets/mambo-release-quality.svg @@ -0,0 +1,978 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Correct predictions (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68.71 + + + 66.96 + + + 59.36 + + + 70.79 + + + 68.95 + + + 58.43 + + + Species accuracy · all images + + + + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + Pinned mini_metrics macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + Species macro-F1 · all classes + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Correct predictions (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.23 + + + 77.64 + + + 72.85 + + + 79.37 + + + 77.94 + + + 70.58 + + + Genus accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + Correct predictions (%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 94.49 + + + 94.23 + + + 92.65 + + + 92.98 + + + 92.86 + + + 90.31 + + + Family accuracy + + + + Flemming: MAMBO v2 versus v3 + + + 58,640 images · legacy geographic lists for both releases · unknown species remain in the denominator + V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines. + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-resources.svg b/docs/assets/mambo-release-resources.svg new file mode 100644 index 0000000..24067cb --- /dev/null +++ b/docs/assets/mambo-release-resources.svg @@ -0,0 +1,1356 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + v2 + input cast + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 5000 + + + + Process peak RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1573 + + + 587 + + + CPU execution · host memory + + + + + + + + + + + + + + + v2 PyTorch + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + + + + + + + + + + 5000 + + + + Process peak RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1897 + + + 1469 + + + GPU execution · host memory + + + + + + + + + + + + + + + v2 + input cast + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 1 + 0 + − + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + 1 + 0 + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 2 + + + + + + + + + + + + + + + + + + 1 + 0 + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seconds · logarithmic scale + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 209.40 + + + 40.47 + + + 0.38 + + + Local load + first completed prediction + + + + + + + + + + + + + + + v2 PyTorch + + + + + + + + + + v3 PyTorch + + + + + + + + + + v3 ONNX + + + + + + + + + + + + + + + + + + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + 1 + 0 + 1 + + + + + + + + + + + + + + + + + + 1 + 0 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Seconds · logarithmic scale + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 209.60 + + + 41.79 + + + 1.65 + + + Local load + first completed prediction + + + + Memory and startup costs + + + RSS includes loading and the batch sweep; host memory is not GPU VRAM. Whiskers: three-trial range. + Startup uses cached local files, excludes process/bootstrap setup and downloads; includes classifier initialization. + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-speed.svg b/docs/assets/mambo-release-speed.svg new file mode 100644 index 0000000..576b659 --- /dev/null +++ b/docs/assets/mambo-release-speed.svg @@ -0,0 +1,1413 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 200 + + + + + + + + + + + + + 400 + + + + + + + + + + + + + 600 + + + + + + + + + + + + + 800 + + + + + + + + + + + + + 1000 + + + + End-to-end latency (ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 796.2 + + + 779.0 + + + 786.2 + + + 148.3 + + + 140.0 + + + 162.2 + + + 103.7 + + + 108.5 + + + 112.8 + + + CPU · one image · v2 with input adapter + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 50 + + + + + + + + + + + + + 60 + + + + End-to-end latency (ms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 22.1 + + + 21.5 + + + 24.0 + + + 36.9 + + + 35.5 + + + 45.2 + + + 32.8 + + + 32.0 + + + 38.6 + + + GPU · one image · lower is better + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 50 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 44.8 + + + 43.3 + + + 43.9 + + + 46.6 + + + 45.6 + + + 41.7 + + + 42.8 + + + 42.1 + + + 39.6 + + + GPU · batch 8 · higher is better + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 82.7 + + + 83.2 + + + 44.5 + + + 43.9 + + + 42.2 + + + 42.4 + + + 42.6 + + + 39.8 + + + GPU · batch 32 · higher is better + + + + Laptop inference speed + + + i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included + Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32. + + + + + + + MAMBO v2 · PyTorch + + + + + + MAMBO v3 · PyTorch + + + + + + MAMBO v3 · ONNX + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md new file mode 100644 index 0000000..99bf34f --- /dev/null +++ b/docs/mambo-release-comparison.md @@ -0,0 +1,116 @@ +# MAMBO_v2 → v3: real-world deployment comparison + +This compares the models and inference pipelines used by the two releases on the +same **58,640 Flemming images** and the same laptop. **Northern Europe is the lead +preset for Flemming**; Europe and global show how the result changes with a broader +candidate vocabulary. V3 is measured through both its native PyTorch and standard +ONNX deployment paths. + +## Prediction quality + +![Species, genus and family accuracy, plus species macro-F1 for all three lists](assets/mambo-release-quality.svg) + +With the northern-Europe list, v3 gains **2.08 percentage points** in species +accuracy (68.71% → 70.79%). Updated northern Europe retains a **1.61-point gain** +over v2. Europe also improves by 1.99 points, while global species accuracy falls +by 0.93 points. Family accuracy falls across all three lists, and regional species +macro-F1 is slightly lower. This is a useful species-level gain in the relevant +regional setting, accompanied by clear trade-offs elsewhere. + +| Preset | v2 species accuracy | v3 species accuracy | Change | +|---|---:|---:|---:| +| Northern Europe | 68.71% | 70.79% | +2.08 pp | +| Europe | 66.96% | 68.95% | +1.99 pp | +| Global | 59.36% | 58.43% | −0.93 pp | + +The primary comparison uses identical legacy lists in both releases. All-image +accuracy includes 8,042 images from 16 species absent from the model vocabulary; +known-truth accuracy uses the remaining 50,598 images (86.29% coverage). Macro-F1 +follows the pinned metric implementation, including predicted-only classes. +Predictions are unthresholded, and the lists were not tuned to these results. + +## Inference speed + +The unadapted v2 CPU API failed here with `expected scalar type BFloat16 but found +Float`. Its CPU bars therefore show an explicitly labelled caller-side adapter: +`predictor.preproc = lambda x: original_preproc(x).float()`. It preserves the +preprocessed values while matching the model's input dtype. V2 GPU and all quality +measurements use the original published path unchanged. + +![CPU latency and GPU throughput by model pipeline and region](assets/mambo-release-speed.svg) + +For northern Europe, the measured medians are: + +| Pipeline | CPU, one image | GPU, one image | GPU, batch 8 | GPU, batch 32 | +|---|---:|---:|---:|---:| +| v2 PyTorch (CPU input cast) | 796 ms | 22 ms | 44.8 images/s | 83.5 images/s | +| v3 PyTorch | 148 ms | 37 ms | 46.6 images/s | 44.5 images/s | +| v3 ONNX | 104 ms | 33 ms | 42.8 images/s | 42.4 images/s | + +V3 substantially improves CPU inference. V2 retains lower single-image GPU latency +and higher batch-32 throughput; batch-8 throughput is much closer. The released +resolution, backbone and precision choices contribute to these practical trade-offs. + +Measurements include image decoding, preprocessing, classification and completed +CPU results. Each configuration has three fresh-process trials on the same seeded +image bank. Whiskers show the range of trial medians. The compact source data also +includes CPU batch-8 results and timings for the updated v3 lists. + +## Memory and startup + +![Host process memory and loading time for the released pipelines](assets/mambo-release-resources.svg) + +Median peak host memory during CPU execution falls from **4,123 MiB** for adapted +v2 to **1,573 MiB** for v3 PyTorch and **587 MiB** for v3 ONNX. Loading plus the first +CPU prediction falls from **209 s** to **40.5 s** and **0.38 s**, respectively. + +Native GPU allocator peaks during the batch sweep are: + +| Pipeline | Peak allocated GPU memory | Peak reserved GPU memory | +|---|---:|---:| +| v2 PyTorch | 1,936 MiB | 2,072 MiB | +| v3 PyTorch | 865 MiB | 1,348 MiB | +| v3 ONNX | Not measured comparably | Not measured comparably | + +These native allocator counters exclude CUDA allocations outside PyTorch. ONNX +device snapshots are not comparable allocator peaks and are not presented as such. + +Host RSS includes model loading and the full batch sweep. Startup uses cached local +files and includes predictor construction, classifier initialization and the first +completed prediction; process launch and explicit runtime setup are excluded. +Keep a predictor alive across requests to amortize loading. CPU sweeps use batches +1/8; GPU sweeps add 32. RSS is host memory, not GPU VRAM. + +## Updated v3 European lists + +![Accuracy changes from legacy to updated European presets](assets/mambo-release-preset-delta.svg) + +Updated northern Europe adds 222 candidate species, and updated Europe adds 72, +with no removals. Their Flemming species accuracies are 70.32% and 68.81%, compared +with 70.79% and 68.95% for the legacy lists. These are small costs for broader +occurrence coverage. Species macro-F1 also changes from **0.2545 to 0.2367** for +northern Europe, and **0.1993 to 0.1975** for Europe under the pinned policy. +The [preset catalogue](model-presets.md) explains geographic +scope and construction; select a preset for where it will be used. + +## Reproduce and interpret + +The [comparison workflow](../dev/releases/mambo_v3/release-comparison.md) pins the +historical source, head weights, external BioCLIP-2 backbone and metric revision. +[Chart source data](assets/mambo-release-comparison.json) contains compact metrics, +timing summaries and evidence hashes, and can regenerate the figures without +image data. Raw predictions and timing observations remain under `local-evidence/`. + +V2 uses its original release API, including a 512-pixel initial resize, BioCLIP +preprocessing to 224 pixels and CUDA float16 autocast. V3 uses its 384-pixel release +recipe and FP32. These choices are part of the real-world pipeline comparison. +The v2 historical code is unchanged, running with the documented contemporary +comparison environment. Both releases use the same PyTorch/CUDA installation; +ONNX Runtime is 1.30.0. Hardware is an i7-12800H / RTX 3080 Ti Laptop GPU (16 GB), +on AC power under Linux/WSL2, with four CPU threads and TF32 disabled. + +The earlier [v3 qualification report](mambo-v3-evaluation.md) covers embedding-mode +consistency, additional timing detail and installed-package checks. In-domain +comparison remains UCloud work with the original test split. Provenance/licensing +and broader OS qualification still precede publication. Nothing is published by +this comparison. diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md index 96f2128..13c70bf 100644 --- a/docs/mambo-v3-evaluation.md +++ b/docs/mambo-v3-evaluation.md @@ -5,6 +5,9 @@ on all **58,640 Flemming images**, for species, genus and family, with all five lists below. This establishes same-model prediction agreement on this dataset; it is not a claim of numerical identity or improvement over MAMBO_v2. +For the subsequently measured MAMBO_v2 baseline and readable release-to-release +charts, see the [real-world comparison](mambo-release-comparison.md). + ## Quality and geographic filtering | Preset | Species accuracy, all images | Species accuracy, known truth | Macro-F1, all | Genus accuracy | Family accuracy | diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 856a08e..61036f7 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -587,6 +587,7 @@ has been exercised. Release notes distinguish model changes from package/API cha A and B are implemented, and C now has local Flemming and CPU/GPU evidence; see the [measured release report](mambo-v3-evaluation.md), +[real-world MAMBO_v2/v3 comparison](mambo-release-comparison.md), [deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) and [consumer guide](../deployment/README.md). The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) prepares the remaining From 32733bcf815752589070c6b143fbd4f52c41810b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 20:31:17 +0200 Subject: [PATCH 029/221] style: normalize generated release chart whitespace --- dev/releases/mambo_v3/comparison_charts.py | 4 +- docs/assets/mambo-release-preset-delta.svg | 52 +- docs/assets/mambo-release-quality.svg | 406 ++++++------- docs/assets/mambo-release-resources.svg | 312 +++++----- docs/assets/mambo-release-speed.svg | 640 ++++++++++----------- 5 files changed, 708 insertions(+), 706 deletions(-) diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py index 912b556..4cc3651 100644 --- a/dev/releases/mambo_v3/comparison_charts.py +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -165,7 +165,9 @@ def charts(data, output): def save(fig, name, note): fig.text(0.02, 0.025, note, fontsize=9, color="#555555") - fig.savefig(output / f"{name}.svg", bbox_inches="tight", metadata={"Date": None}) + svg = output / f"{name}.svg" + fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) plt.close(fig) diff --git a/docs/assets/mambo-release-preset-delta.svg b/docs/assets/mambo-release-preset-delta.svg index 9eae5d0..37250e7 100644 --- a/docs/assets/mambo-release-preset-delta.svg +++ b/docs/assets/mambo-release-preset-delta.svg @@ -20,35 +20,35 @@ - - - - @@ -56,8 +56,8 @@ z - @@ -126,8 +126,8 @@ L 0 3.5 - @@ -150,18 +150,18 @@ L -3.5 0 - - - diff --git a/docs/assets/mambo-release-quality.svg b/docs/assets/mambo-release-quality.svg index a87920b..2d31bc5 100644 --- a/docs/assets/mambo-release-quality.svg +++ b/docs/assets/mambo-release-quality.svg @@ -20,19 +20,19 @@ - - @@ -40,8 +40,8 @@ z - @@ -76,14 +76,14 @@ L 0 3.5 - - @@ -96,8 +96,8 @@ L -3.5 0 - @@ -111,8 +111,8 @@ L 421.07 209.512 - @@ -126,8 +126,8 @@ L 421.07 176.004 - @@ -141,8 +141,8 @@ L 421.07 142.496 - @@ -156,8 +156,8 @@ L 421.07 108.988 - @@ -174,61 +174,61 @@ L 421.07 75.48 - - - - - - - - @@ -254,23 +254,23 @@ L 421.07 243.02 - - @@ -278,10 +278,10 @@ z MAMBO v2 - @@ -292,10 +292,10 @@ z - @@ -334,8 +334,8 @@ z - @@ -349,8 +349,8 @@ L 849.295625 243.02 - @@ -364,8 +364,8 @@ L 849.295625 217.999047 - @@ -379,8 +379,8 @@ L 849.295625 192.978095 - @@ -394,8 +394,8 @@ L 849.295625 167.957142 - @@ -409,8 +409,8 @@ L 849.295625 142.93619 - @@ -424,8 +424,8 @@ L 849.295625 117.915237 - @@ -442,61 +442,61 @@ L 849.295625 92.894285 - - - - - - - - @@ -523,10 +523,10 @@ L 849.295625 243.02 - @@ -565,8 +565,8 @@ z - @@ -580,8 +580,8 @@ L 421.07 454.52 - @@ -595,8 +595,8 @@ L 421.07 421.012 - @@ -610,8 +610,8 @@ L 421.07 387.504 - @@ -625,8 +625,8 @@ L 421.07 353.996 - @@ -640,8 +640,8 @@ L 421.07 320.488 - @@ -658,61 +658,61 @@ L 421.07 286.98 - - - - - - - - @@ -739,10 +739,10 @@ L 421.07 454.52 - @@ -781,8 +781,8 @@ z - @@ -796,8 +796,8 @@ L 849.295625 454.52 - @@ -811,8 +811,8 @@ L 849.295625 421.012 - @@ -826,8 +826,8 @@ L 849.295625 387.504 - @@ -841,8 +841,8 @@ L 849.295625 353.996 - @@ -856,8 +856,8 @@ L 849.295625 320.488 - @@ -874,61 +874,61 @@ L 849.295625 286.98 - - - - - - - - diff --git a/docs/assets/mambo-release-resources.svg b/docs/assets/mambo-release-resources.svg index 24067cb..8c542d4 100644 --- a/docs/assets/mambo-release-resources.svg +++ b/docs/assets/mambo-release-resources.svg @@ -20,19 +20,19 @@ - - @@ -40,8 +40,8 @@ z - @@ -76,14 +76,14 @@ L 0 3.5 - - @@ -96,8 +96,8 @@ L -3.5 0 - @@ -111,8 +111,8 @@ L 386.758125 198.242216 - @@ -126,8 +126,8 @@ L 386.758125 169.844431 - @@ -141,8 +141,8 @@ L 386.758125 141.446647 - @@ -156,8 +156,8 @@ L 386.758125 113.048863 - @@ -174,44 +174,44 @@ L 386.758125 84.651079 - - - - - - - @@ -228,13 +228,13 @@ L -4 -0 - - @@ -252,10 +252,10 @@ L 386.758125 226.64 - @@ -294,8 +294,8 @@ z - @@ -309,8 +309,8 @@ L 777.358125 226.64 - @@ -324,8 +324,8 @@ L 777.358125 198.241301 - @@ -339,8 +339,8 @@ L 777.358125 169.842602 - @@ -354,8 +354,8 @@ L 777.358125 141.443903 - @@ -369,8 +369,8 @@ L 777.358125 113.045205 - @@ -387,38 +387,38 @@ L 777.358125 84.646506 - - - - - - @@ -436,13 +436,13 @@ L 718.899619 184.700557 - - @@ -460,10 +460,10 @@ L 777.358125 226.64 - @@ -502,8 +502,8 @@ z - @@ -525,8 +525,8 @@ L 386.758125 413.823829 - @@ -547,8 +547,8 @@ L 386.758125 379.296311 - @@ -569,8 +569,8 @@ L 386.758125 344.768794 - @@ -591,8 +591,8 @@ L 386.758125 310.241277 - @@ -614,8 +614,8 @@ L 386.758125 275.713759 - @@ -873,38 +873,38 @@ L -2 0 - - - - - - @@ -922,13 +922,13 @@ L 328.299619 392.848623 - - @@ -946,10 +946,10 @@ L 386.758125 422.84 - @@ -988,8 +988,8 @@ z - @@ -1010,8 +1010,8 @@ L 777.358125 404.09345 - @@ -1032,8 +1032,8 @@ L 777.358125 358.902751 - @@ -1260,38 +1260,38 @@ L 777.358125 313.712053 - - - - - - @@ -1309,13 +1309,13 @@ L 718.899619 394.009261 - - diff --git a/docs/assets/mambo-release-speed.svg b/docs/assets/mambo-release-speed.svg index 576b659..623e62a 100644 --- a/docs/assets/mambo-release-speed.svg +++ b/docs/assets/mambo-release-speed.svg @@ -20,19 +20,19 @@ - - @@ -40,8 +40,8 @@ z - @@ -76,14 +76,14 @@ L 0 3.5 - - @@ -96,8 +96,8 @@ L -3.5 0 - @@ -111,8 +111,8 @@ L 425.908125 236.601915 - @@ -126,8 +126,8 @@ L 425.908125 206.315829 - @@ -141,8 +141,8 @@ L 425.908125 176.029744 - @@ -156,8 +156,8 @@ L 425.908125 145.743659 - @@ -174,92 +174,92 @@ L 425.908125 115.457574 - - - - - - - - - - - - - @@ -276,14 +276,14 @@ L -3 -0 - - - @@ -301,14 +301,14 @@ L 362.785067 242.224524 - - - @@ -326,13 +326,13 @@ L 393.576803 249.460659 - - @@ -368,10 +368,10 @@ L 425.908125 266.888 - @@ -410,8 +410,8 @@ z - @@ -425,8 +425,8 @@ L 849.358125 266.888 - @@ -440,8 +440,8 @@ L 849.358125 242.16001 - @@ -455,8 +455,8 @@ L 849.358125 217.432019 - @@ -470,8 +470,8 @@ L 849.358125 192.704029 - @@ -485,8 +485,8 @@ L 849.358125 167.976038 - @@ -500,8 +500,8 @@ L 849.358125 143.248048 - @@ -518,86 +518,86 @@ L 849.358125 118.520057 - - - - - - - - - - - - @@ -615,14 +615,14 @@ L 755.443332 202.456048 - - - @@ -640,14 +640,14 @@ L 786.235067 148.125797 - - - @@ -665,13 +665,13 @@ L 817.026803 165.903593 - - @@ -707,10 +707,10 @@ L 849.358125 266.888 - @@ -749,8 +749,8 @@ z - @@ -764,8 +764,8 @@ L 425.908125 473.528 - @@ -779,8 +779,8 @@ L 425.908125 446.072468 - @@ -794,8 +794,8 @@ L 425.908125 418.616937 - @@ -809,8 +809,8 @@ L 425.908125 391.161405 - @@ -824,8 +824,8 @@ L 425.908125 363.705874 - @@ -842,86 +842,86 @@ L 425.908125 336.250342 - - - - - - - - - - - - @@ -939,14 +939,14 @@ L 331.993332 347.739032 - - - @@ -964,14 +964,14 @@ L 362.785067 355.025513 - - - @@ -989,13 +989,13 @@ L 393.576803 362.867733 - - @@ -1031,10 +1031,10 @@ L 425.908125 473.528 - @@ -1073,8 +1073,8 @@ z - @@ -1088,8 +1088,8 @@ L 849.358125 473.528 - @@ -1103,8 +1103,8 @@ L 849.358125 443.834297 - @@ -1118,8 +1118,8 @@ L 849.358125 414.140594 - @@ -1133,8 +1133,8 @@ L 849.358125 384.446891 - @@ -1148,8 +1148,8 @@ L 849.358125 354.753188 - @@ -1166,86 +1166,86 @@ L 849.358125 325.059484 - - - - - - - - - - - - @@ -1263,14 +1263,14 @@ L 755.443332 346.86539 - - - @@ -1288,14 +1288,14 @@ L 786.235067 408.251016 - - - @@ -1313,13 +1313,13 @@ L 817.026803 413.705486 - - @@ -1362,10 +1362,10 @@ L 849.358125 473.528 - @@ -1373,10 +1373,10 @@ z MAMBO v2 · PyTorch - @@ -1384,10 +1384,10 @@ z MAMBO v3 · PyTorch - From d5be40b966489f751c8ab25ad7a25a3b99ddc578 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 20:46:33 +0200 Subject: [PATCH 030/221] fix: use mini_metrics scores and clarify release throughput comparisons --- deployment/README.md | 5 +- dev/releases/mambo_v3/compare_quality.py | 4 - dev/releases/mambo_v3/comparison_charts.py | 50 +- dev/releases/mambo_v3/evaluation.md | 8 + dev/releases/mambo_v3/metrics.py | 19 +- dev/releases/mambo_v3/release-comparison.md | 18 + docs/assets/mambo-release-comparison.json | 312 ++++- docs/assets/mambo-release-preset-delta.svg | 4 +- docs/assets/mambo-release-quality.svg | 10 +- docs/assets/mambo-release-speed.svg | 1334 +++++++++---------- docs/mambo-release-comparison.md | 75 +- tests/releases/test_release_evaluation.py | 29 + 12 files changed, 1095 insertions(+), 773 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index ec09e26..5608103 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -92,9 +92,10 @@ defaults, so explicit backend/device arguments are recommended in scripts. On all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, genus and family labels for the full list and both legacy/updated European presets. -Northern Europe reaches **70.79% species accuracy overall** (**82.04%** on images +Northern Europe reaches **70.79% micro species accuracy overall** (**82.04%** on images whose true species is in the list), versus **68.71% overall for MAMBO_v2**. Updated -northern Europe reaches **70.32%**. Unknown species remain in the overall result. +northern Europe reaches **70.32%**. All predictive metrics use pinned `mini_metrics`, with threshold 0 and no +optimization. Unknown species remain in the overall result. CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; this checks prediction consistency, not downstream embedding usefulness. diff --git a/dev/releases/mambo_v3/compare_quality.py b/dev/releases/mambo_v3/compare_quality.py index cc77b20..862d9db 100644 --- a/dev/releases/mambo_v3/compare_quality.py +++ b/dev/releases/mambo_v3/compare_quality.py @@ -41,14 +41,10 @@ def compare(left, right, presets=PRESETS): for rank in range(3): keys = [key for key in a if key[1] == rank] changes = sum(a[key]["prediction"] != b[key]["prediction"] for key in keys) - accuracies = [sum(rows[key]["prediction"] == rows[key]["label"] for key in keys) / len(keys) for rows in (a, b)] result["presets"][preset][str(rank)] = { "images": len(keys), "changed": changes, "agreement": 1 - changes / len(keys), - "left_accuracy": accuracies[0], - "right_accuracy": accuracies[1], - "accuracy_delta": accuracies[1] - accuracies[0], } return result diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py index 4cc3651..2824ce6 100644 --- a/dev/releases/mambo_v3/comparison_charts.py +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -11,6 +11,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA REGIONS = ("north_europe", "europe", "full") REGION_LABELS = ("Northern Europe", "Europe", "Global") @@ -48,6 +49,8 @@ def aggregate(args): metrics = json.loads(path.read_text()) if file_hash(directory / preset / "mini_metric.csv") != metrics["source_sha256"]: raise ValueError("Metric source has changed") + if metrics.get("metric_schema") != METRIC_SCHEMA: + raise ValueError("Recompute quality using the mini_metrics-only extractor") sources[str(path)] = file_hash(path) quality.append( { @@ -68,6 +71,7 @@ def aggregate(args): raise ValueError(f"Primary comparison lists differ: {preset}") grouped = defaultdict(list) resources = defaultdict(list) + components = defaultdict(list) bank = None for directory, added in ((args.v3_performance, False), (args.added_performance, True)): plan = completed(directory / "plan.json") @@ -87,9 +91,14 @@ def aggregate(args): bank = records if records != bank: raise ValueError("Timing image banks differ") + if metrics.get("metric_schema") != METRIC_SCHEMA: + raise ValueError("Recompute quality using the mini_metrics-only extractor") sources[str(path)] = file_hash(path) for cell in report["cells"]: grouped[(model, device, cell["preset"], cell["batch_size"])].append(cell["end_to_end"]) + if not old and device == "cuda:0" and cell["preset"] == "north_europe": + for stage in ("preprocessing", "prepared", "end_to_end"): + components[(model, cell["batch_size"], stage)].extend(cell[stage]["seconds"]) # Use the full-list-containing sweep for comparable whole-process memory. if old or not added: resources[(model, device)].append( @@ -136,6 +145,18 @@ def aggregate(args): "quality": quality, "speed": speed, "resources": memory, + "v3_gpu_components": [ + {"model": model, "batch": batch, "stage": stage, "observations": len(values), "median_ms": statistics.median(values) * 1000} + for (model, batch, stage), values in sorted(components.items()) + ], + "quality_policy": { + "accuracy": "mini_metrics all.micro_accuracy at each rank; all images", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": False, + "known_only": False, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary", + }, "sources_sha256": sources, "timing_bank_sha256": hashlib.sha256(json.dumps(bank, sort_keys=True).encode()).hexdigest(), "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; " @@ -188,21 +209,21 @@ def save(fig, name, note): ax.set_xticks(x, REGION_LABELS) ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) - axes[0].set(title="Species accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[0].set(title="Species micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) axes[1].set( - title="Species macro-F1 · all classes", + title="Species macro-F1 · truth ∪ predicted classes", ylabel="Pinned mini_metrics macro-F1", ylim=(0, max(r["macro_f1_all"] for r in data["quality"]) * 1.3), ) - axes[2].set(title="Genus accuracy", ylabel="Correct predictions (%)", ylim=(0, 100)) - axes[3].set(title="Family accuracy", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[2].set(title="Genus micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[3].set(title="Family micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) axes[0].legend(loc="upper left", fontsize=9) fig.suptitle("Flemming: MAMBO v2 versus v3", fontsize=16, fontweight="bold") fig.tight_layout(rect=(0, 0.1, 1, 0.95)) save( fig, "mambo-release-quality", - "58,640 images · legacy geographic lists for both releases · unknown species remain in the denominator\n" + "58,640 images · threshold 0 (no abstention or optimization) · known_only=False · unknown truth included\n" "V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines.", ) @@ -214,9 +235,9 @@ def save(fig, name, note): next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, region, batch)) for region in REGIONS ] - values = [r["median_ms"] if batch == 1 else r["images_per_second"] for r in rows] - low = [r["trial_min_ms"] if batch == 1 else batch * 1000 / r["trial_max_ms"] for r in rows] - high = [r["trial_max_ms"] if batch == 1 else batch * 1000 / r["trial_min_ms"] for r in rows] + values = [r["images_per_second"] for r in rows] + low = [batch * 1000 / r["trial_max_ms"] for r in rows] + high = [batch * 1000 / r["trial_min_ms"] for r in rows] positions = x + (m - 1) * 0.25 ax.bar(positions, values, 0.25, label=label, color=color) ax.errorbar( @@ -236,12 +257,15 @@ def save(fig, name, note): ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) ax.margins(y=0.25) - axes[0].set(title="CPU · one image · v2 with input adapter", ylabel="End-to-end latency (ms)") - axes[1].set(title="GPU · one image · lower is better", ylabel="End-to-end latency (ms)") + axes[0].set(title="CPU · one image · v2 with input adapter", ylabel="End-to-end images / second") + axes[1].set(title="GPU · one image · higher is better", ylabel="End-to-end images / second") axes[2].set(title="GPU · batch 8 · higher is better", ylabel="End-to-end images / second") axes[3].set(title="GPU · batch 32 · higher is better", ylabel="End-to-end images / second") + gpu_limit = max(r["batch"] * 1000 / r["trial_min_ms"] for r in data["speed"] if r["device"] == "cuda:0") * 1.2 + for ax in axes[1:]: + ax.set_ylim(0, gpu_limit) fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) - fig.suptitle("Laptop inference speed", fontsize=16, fontweight="bold") + fig.suptitle("Laptop inference throughput · higher is better", fontsize=16, fontweight="bold") fig.tight_layout(rect=(0, 0.1, 1, 0.90)) save( fig, @@ -291,7 +315,7 @@ def save(fig, name, note): ax.barh(i, delta, height=0.5, color=COLORS[1]) ax.text(0.02, i, f"{delta:+.2f} pp ({old:.2f}% → {new:.2f}%)", va="center", fontsize=10) ax.axvline(0, color="#555555", linewidth=1) - ax.set(yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.6, 0.45), xlabel="Species accuracy change (percentage points)") + ax.set(yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.6, 0.45), xlabel="Micro species accuracy change (percentage points)") ax.invert_yaxis() ax.set_title("V3 updated lists: small accuracy trade-offs on Flemming", loc="left") fig.tight_layout(rect=(0, 0.15, 1, 1)) @@ -299,7 +323,7 @@ def save(fig, name, note): fig, "mambo-release-preset-delta", "Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope.\n" - "Both v3 backends agree; these broader occurrence filters were not tuned to Flemming.", + "All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming.", ) diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index b0bf7f6..060504f 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -178,3 +178,11 @@ must not all be added together. The existing core constructs a normalized head with 100 initialization iterations before loading checkpoint weights; any change to that shared loading behavior belongs on a separate feature/fix branch with checkpoint validation, not directly on the release branch. + +Metric extraction uses mini_metrics for all predictive scores, explicitly selecting +`micro_accuracy` (the bare `accuracy` field is macro), `accuracy`, `f1`, `recall`, +`precision`, `coverage` and `theilU`. Both `known_only=False` and `True` are retained; +rank summary fields reference those outputs. Schema `mini-metrics-quality-v2` +rejects cached results from the older direct-accuracy extractor. Archive old metric +JSON before recomputing from unchanged prediction CSVs. Pairwise comparison reports +only prediction agreement; predictive accuracy comes from the metric files. diff --git a/dev/releases/mambo_v3/metrics.py b/dev/releases/mambo_v3/metrics.py index 1fcc6fb..e2a25b8 100644 --- a/dev/releases/mambo_v3/metrics.py +++ b/dev/releases/mambo_v3/metrics.py @@ -12,6 +12,7 @@ from dev.releases.mambo_v3.evaluation_data import write_json REVISION = "70cc69adc05362863439277048e06386c1f885e1" +METRIC_SCHEMA = "mini-metrics-quality-v2" def finite_json(value): @@ -38,6 +39,7 @@ def measure(source): if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): raise ValueError("Evaluation requires finite, unthresholded predictions") result = { + "metric_schema": METRIC_SCHEMA, "source_sha256": file_hash(source), "mini_metrics_revision": REVISION, "policy": "threshold=0; no optimization; undefined metrics are null", @@ -46,15 +48,11 @@ def measure(source): for level, rank in enumerate(("species", "genus", "family")): selected = np.asarray(data.level) == level known = selected & np.asarray(data.known_label) - correct = np.asarray(data.label) == np.asarray(data.prediction) result["ranks"][rank] = { "images": int(selected.sum()), "known_images": int(known.sum()), "list_coverage": float(known.sum() / selected.sum()), - "abstention_coverage": 1.0, "truth_species_or_taxa": len(set(data.label[selected])), - "micro_accuracy_all": float(correct[selected].mean()), - "micro_accuracy_known": float(correct[known].mean()) if known.any() else None, } for scope, known_only, per_class in (("all", False, False), ("known", True, False), ("per_class", False, True)): result[scope] = finite_json( @@ -66,10 +64,17 @@ def measure(source): per_class=per_class, simple=True, hierarchical=False, - pattern=r"^(f1|recall|precision|coverage|theilU)$", + pattern=r"^(micro_accuracy|accuracy|f1|recall|precision|coverage|theilU)$", verbose=0, ) ) + for level, rank in enumerate(("species", "genus", "family")): + row = result["ranks"][rank] + row["micro_accuracy_all"] = result["all"]["micro_accuracy"][str(level)] + row["micro_accuracy_known"] = result["known"]["micro_accuracy"][str(level)] if row["known_images"] else None + row["macro_accuracy_all"] = result["all"]["accuracy"][str(level)] + row["macro_accuracy_known"] = result["known"]["accuracy"][str(level)] if row["known_images"] else None + row["abstention_coverage"] = result["all"]["coverage"][str(level)] return result @@ -98,7 +103,9 @@ def main(): prior = json.loads(output.read_text()) if prior["source_sha256"] != digest or prior["mini_metrics_revision"] != REVISION: raise ValueError("Existing metrics do not match this input or pinned revision") - continue + if prior.get("metric_schema") == METRIC_SCHEMA: + continue + raise ValueError("Existing metrics use an older extractor; archive them before recomputing") write_json(output, measure(source)) print(variant, name, flush=True) else: diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md index 001c97f..5bc96c0 100644 --- a/dev/releases/mambo_v3/release-comparison.md +++ b/dev/releases/mambo_v3/release-comparison.md @@ -146,3 +146,21 @@ All 18 additional timing processes completed. An interrupted final v2 GPU trial is retained separately and excluded; its successful replacement is `trial-2-v2-cuda-0-retry1`. Every reported timing cell contains exactly three successful trials. The original interrupted plan remains as `interrupted-plan.json`. + +The revised charts use images/second throughout, with a shared GPU vertical scale. +Predictive scores come exclusively from mini_metrics (`micro_accuracy`, rather +than its macro `accuracy` field). All/known populations and macro-F1 class support +are defined in the report. Old metric JSON is retained beside its replacement as +`metrics-before-mini-metrics-only.json`; all 13 full-data extractions preserve the +previous accuracy and F1 values. Component timings are reaggregated from existing +benchmark evidence; no inference rerun is needed for these reporting corrections. + +Run the metric integration regression with the pinned environment available: + +```sh +MAMBO_METRICS_PYTHON=/path/to/metrics-env/bin/python \ + bash dev/check.sh all tests/releases +``` + +It exercises imbalanced classes and excluded truth to distinguish micro accuracy, +macro accuracy, all/known filtering and macro-F1 through the real mini_metrics API. diff --git a/docs/assets/mambo-release-comparison.json b/docs/assets/mambo-release-comparison.json index 9c0a0a3..e5db273 100644 --- a/docs/assets/mambo-release-comparison.json +++ b/docs/assets/mambo-release-comparison.json @@ -8,31 +8,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.68712482946794, - "micro_accuracy_known": 0.7963358235503379 + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58639, "list_coverage": 0.9999829467939972, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7922919508867667, - "micro_accuracy_known": 0.7923054622350313 + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9449351978171896, - "micro_accuracy_known": 0.9449351978171896 + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.2575380033854696, + "macro_f1_all": 0.25753800338546967, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" @@ -45,31 +51,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.669594133697135, - "micro_accuracy_known": 0.7760188149729238 + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7764495225102319, - "micro_accuracy_known": 0.7764495225102319 + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9423090040927694, - "micro_accuracy_known": 0.9423090040927694 + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.19998360830548267, + "macro_f1_all": 0.19998360830548284, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" @@ -82,31 +94,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.5936050477489768, - "micro_accuracy_known": 0.6879520929681016 + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7285129604365621, - "micro_accuracy_known": 0.7285129604365621 + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9265006821282401, - "micro_accuracy_known": 0.9265006821282401 + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.08990868448899293, + "macro_f1_all": 0.08990868448899282, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" @@ -119,28 +137,34 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.7078956343792633, - "micro_accuracy_known": 0.8204079212617099 + "micro_accuracy_known": 0.8204079212617099, + "macro_accuracy_all": 0.7123671759291879, + "macro_accuracy_known": 0.734892620227344, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58639, "list_coverage": 0.9999829467939972, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7936732605729877, - "micro_accuracy_known": 0.7936867954774126 + "micro_accuracy_known": 0.7936867954774126, + "macro_accuracy_all": 0.8054070319557569, + "macro_accuracy_known": 0.8079160881300739, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9298090040927695, - "micro_accuracy_known": 0.9298090040927695 + "micro_accuracy_known": 0.9298090040927695, + "macro_accuracy_all": 0.8106383132501974, + "macro_accuracy_known": 0.8106383132501974, + "abstention_coverage": 1.0 } }, "macro_f1_all": 0.25450880594788156, @@ -156,31 +180,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.6894952251023192, - "micro_accuracy_known": 0.7990829677062334 + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906121581308468, + "macro_accuracy_known": 0.7124496967278696, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7793656207366985, - "micro_accuracy_known": 0.7793656207366985 + "micro_accuracy_known": 0.7793656207366985, + "macro_accuracy_all": 0.7927684087442151, + "macro_accuracy_known": 0.7927684087442151, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9286323328785812, - "micro_accuracy_known": 0.9286323328785812 + "micro_accuracy_known": 0.9286323328785812, + "macro_accuracy_all": 0.8061650335232657, + "macro_accuracy_known": 0.8061650335232657, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.19931852384419563, + "macro_f1_all": 0.19931852384419554, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" @@ -193,31 +223,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.5843281036834925, - "micro_accuracy_known": 0.6772006798687695 + "micro_accuracy_known": 0.6772006798687695, + "macro_accuracy_all": 0.5802757153882665, + "macro_accuracy_known": 0.5986243546100299, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7058321964529332, - "micro_accuracy_known": 0.7058321964529332 + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7133531076261048, + "macro_accuracy_known": 0.7133531076261048, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.903137789904502, - "micro_accuracy_known": 0.903137789904502 + "micro_accuracy_known": 0.903137789904502, + "macro_accuracy_all": 0.7851379223252065, + "macro_accuracy_known": 0.7851379223252065, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.09709532327738138, + "macro_f1_all": 0.09709532327738142, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" @@ -230,31 +266,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.703206002728513, - "micro_accuracy_known": 0.8149729238309814 + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.7049027989956338, + "macro_accuracy_known": 0.7271922155646657, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7889154160982265, - "micro_accuracy_known": 0.7889154160982265 + "micro_accuracy_known": 0.7889154160982265, + "macro_accuracy_all": 0.8001749661579481, + "macro_accuracy_known": 0.8001749661579481, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9289222373806275, - "micro_accuracy_known": 0.9289222373806275 + "micro_accuracy_known": 0.9289222373806275, + "macro_accuracy_all": 0.8066694596309745, + "macro_accuracy_known": 0.8066694596309745, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.23669244246452395, + "macro_f1_all": 0.2366924424645238, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" @@ -267,31 +309,37 @@ "images": 58640, "known_images": 50598, "list_coverage": 0.8628581173260573, - "abstention_coverage": 1.0, "truth_species_or_taxa": 522, "micro_accuracy_all": 0.6880627557980901, - "micro_accuracy_known": 0.7974228230364837 + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887822210592908, + "macro_accuracy_known": 0.7105618960334976, + "abstention_coverage": 1.0 }, "genus": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 322, "micro_accuracy_all": 0.7779160982264666, - "micro_accuracy_known": 0.7779160982264666 + "micro_accuracy_known": 0.7779160982264666, + "macro_accuracy_all": 0.7907835796748087, + "macro_accuracy_known": 0.7907835796748087, + "abstention_coverage": 1.0 }, "family": { "images": 58640, "known_images": 58640, "list_coverage": 1.0, - "abstention_coverage": 1.0, "truth_species_or_taxa": 23, "micro_accuracy_all": 0.9254945429740792, - "micro_accuracy_known": 0.9254945429740792 + "micro_accuracy_known": 0.9254945429740792, + "macro_accuracy_all": 0.804979506038197, + "macro_accuracy_known": 0.804979506038197, + "abstention_coverage": 1.0 } }, - "macro_f1_all": 0.19747553631500317, + "macro_f1_all": 0.19747553631500298, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" @@ -1144,18 +1192,154 @@ } } ], + "v3_gpu_components": [ + { + "model": "v3-onnx", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 32.848500999534735 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 13.389879000897054 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 16.602722000243375 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 186.86159300341387 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 50.60579099881579 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 134.49058500191313 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 753.8683550010319 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 180.64068800231325 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 559.359699000197 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 36.8857930006925 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 18.508613997255452 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 14.880823000567034 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 171.64449200208765 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 46.71529999905033 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 126.31524700191221 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 718.6301279980398 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 181.38111200096318 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 519.4957230014552 + } + ], + "quality_policy": { + "accuracy": "mini_metrics all.micro_accuracy at each rank; all images", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": false, + "known_only": false, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary" + }, "sources_sha256": { - "local-evidence/mambo-v3/quality-full/comparison.json": "e30365591209612e133218dfe4abf7baa0fb9c8394a8538738261c802e75b6a0", + "local-evidence/mambo-v3/quality-full/comparison.json": "b9ac190c4ca959c6a5791adc5ceabc4a500a25f9724ef5ab7ebed57cfd5e4de8", "local-evidence/mambo-release-comparison-quality/v2-full/report.json": "c9a98044cbc97ab0033b1f794e284b8f8504f26fc0b7574dfa619c16df6db263", - "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "dd25bb7b7dc8552fa0da7d3fb48f8772eb45b5824e04af8594c95f5e522a5ae9", - "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "bd04f55a6906d832ded0047840ace6ada6f50ed1e77bf8f81a5aa4b4e591a2db", - "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1789eb0f6d81b82b23ace78f57001369cbdcfb386cd00197f20172e80ad06396", + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "11340899a76a11997c7b3a4813f0824a730177478bab1d5a9270de851f7fa368", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "e6bccab2d2d6cee8bc3b9322a404dcdcb456c038ace002efb430aba1191c300b", + "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1e6a2aabc59aacc10d03c4653de71b549ddf4a003b7a096d04a4cc7c9c2cc9b2", "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/report.json": "ba80d1580f5b563bd5eb0d9af3af392c6115766c4dcebe619f68e034c938b47d", - "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "7a58a33ea5cd49e26ea10b6d325f109707c1b3ab0dfb5fdb2036f70695d239a6", - "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "cd0001fe1cf13dd26bab63fa6ce8e357a26a8b5491a8cb82744fdd65ebb164b0", - "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b25af91cfc1b0e82c920d26844522117386cab2aad2afe028ba0871cb6b99260", - "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "a754f78e8a09d2ee90bd65096562781755d7c180f84ce376afbb27750b5e1fad", - "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "82181458085523df79aeaececb2b50f806c73b619820cf34692c4bfaa3e33cec", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "da3927fad7f5901391b9a9033027d6e20f0a6f4a219e1d7d215bacda1b301599", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "a82d3c13819caa0c4e39f933b2dcc8098382172f7a8a2fc00d9cc6c4518cde27", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b3a724e48d3ecd783509d90899b0d96ec2f2802a2304551db5c595014561297a", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "6d434a6483fd447d80b5cfd55d57cfe8c65a7420f52cbd413f2e57cee3b23725", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "762b26022265c8bfedcc4745ea12107b6957eca098ba6628f6d9a149b39b77ff", "local-evidence/mambo-v3/performance/trial-0-torch-cpu-prediction-t4/report.json": "f75f2fd264d09ab6aa7bd194e7a6f8afc28980e41e81e164330f0efe5746e88f", "local-evidence/mambo-v3/performance/trial-0-onnx-cpu-prediction-t4/report.json": "dbec7f2753ea649998ec3d1c6d5d75608d1465d273755910f531902247335047", "local-evidence/mambo-v3/performance/trial-0-torch-cuda-0-prediction-t4/report.json": "e9d75960d5ce34a9040f6d0c1af2476bad9c3edcfaa0cb581fdf37d3bc8cc1eb", diff --git a/docs/assets/mambo-release-preset-delta.svg b/docs/assets/mambo-release-preset-delta.svg index 37250e7..9f45aa4 100644 --- a/docs/assets/mambo-release-preset-delta.svg +++ b/docs/assets/mambo-release-preset-delta.svg @@ -119,7 +119,7 @@ L 0 3.5 - Species accuracy change (percentage points) + Micro species accuracy change (percentage points) @@ -176,7 +176,7 @@ L 633.625938 149.318125 Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope. - Both v3 backends agree; these broader occurrence filters were not tuned to Flemming. + All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming. diff --git a/docs/assets/mambo-release-quality.svg b/docs/assets/mambo-release-quality.svg index 2d31bc5..9aa9bad 100644 --- a/docs/assets/mambo-release-quality.svg +++ b/docs/assets/mambo-release-quality.svg @@ -250,7 +250,7 @@ L 421.07 243.02 58.43 - Species accuracy · all images + Species micro accuracy · all images @@ -518,7 +518,7 @@ L 849.295625 243.02 0.097 - Species macro-F1 · all classes + Species macro-F1 · truth ∪ predicted classes @@ -734,7 +734,7 @@ L 421.07 454.52 70.58 - Genus accuracy + Genus micro accuracy · all images @@ -950,14 +950,14 @@ L 849.295625 454.52 90.31 - Family accuracy + Family micro accuracy · all images Flemming: MAMBO v2 versus v3 - 58,640 images · legacy geographic lists for both releases · unknown species remain in the denominator + 58,640 images · threshold 0 (no abstention or optimization) · known_only=False · unknown truth included V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines. diff --git a/docs/assets/mambo-release-speed.svg b/docs/assets/mambo-release-speed.svg index 623e62a..dcb5358 100644 --- a/docs/assets/mambo-release-speed.svg +++ b/docs/assets/mambo-release-speed.svg @@ -1,7 +1,7 @@ - + @@ -21,18 +21,18 @@ - @@ -45,40 +45,40 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - Northern Europe + Northern Europe - + - Europe + Europe - + - Global + Global - + @@ -87,630 +87,630 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - 0 + 0 - + - + - 200 + 2 - + - + - 400 + 4 - + - + - 600 + 6 - + - + - 800 + 8 - + - + - 1000 + 10 - - End-to-end latency (ms) + + + + + + + + + + + 12 + + + + End-to-end images / second - +" clip-path="url(#p0d30b25b81)" style="fill: #7b629c"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #7b629c"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #7b629c"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #168b89"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #168b89"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #168b89"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #df8739"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #df8739"/> - +" clip-path="url(#p0d30b25b81)" style="fill: #df8739"/> - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - 796.2 - - 779.0 + 1.3 - 786.2 + 1.3 - 148.3 + 1.3 - 140.0 + 6.7 - 162.2 + 7.1 - 103.7 + 6.2 - 108.5 + 9.6 - 112.8 + 9.2 - CPU · one image · v2 with input adapter + 8.9 + + + CPU · one image · v2 with input adapter - - - - - - - - Northern Europe - - - - + - + - Europe + Northern Europe - - + + - + - Global + Europe - - - - - - + - + - 0 + Global + + - + - + - 10 + 0 - + - + - 20 + 20 - + - + - 30 + 40 - + - + - 40 + 60 - + - + - 50 + 80 - + - + - 60 + 100 - End-to-end latency (ms) + End-to-end images / second - +" clip-path="url(#paaad714094)" style="fill: #7b629c"/> - +" clip-path="url(#paaad714094)" style="fill: #7b629c"/> - +" clip-path="url(#paaad714094)" style="fill: #7b629c"/> - +" clip-path="url(#paaad714094)" style="fill: #168b89"/> - +" clip-path="url(#paaad714094)" style="fill: #168b89"/> - +" clip-path="url(#paaad714094)" style="fill: #168b89"/> - +" clip-path="url(#paaad714094)" style="fill: #df8739"/> - +" clip-path="url(#paaad714094)" style="fill: #df8739"/> - +" clip-path="url(#paaad714094)" style="fill: #df8739"/> - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - 22.1 + 45.2 - 21.5 + 46.5 - 24.0 + 41.7 - 36.9 + 27.1 - 35.5 + 28.2 - 45.2 + 22.1 - 32.8 + 30.4 - 32.0 + 31.3 - 38.6 + 25.9 - GPU · one image · lower is better + GPU · one image · higher is better - @@ -718,323 +718,323 @@ z - + - Northern Europe + Northern Europe - + - Europe + Europe - + - Global + Global - + - + - 0 + 0 - + - + - 10 + 20 - + - + - 20 + 40 - + - + - 30 + 60 - + - + - 40 + 80 - + - + - 50 + 100 - End-to-end images / second + End-to-end images / second - +" clip-path="url(#pe0bd87f1a3)" style="fill: #7b629c"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #7b629c"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #7b629c"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #168b89"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #168b89"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #168b89"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #df8739"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #df8739"/> - +" clip-path="url(#pe0bd87f1a3)" style="fill: #df8739"/> - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - 44.8 + 44.8 - 43.3 + 43.3 - 43.9 + 43.9 - 46.6 + 46.6 - 45.6 + 45.6 - 41.7 + 41.7 - 42.8 + 42.8 - 42.1 + 42.1 - 39.6 + 39.6 - GPU · batch 8 · higher is better + GPU · batch 8 · higher is better - @@ -1042,372 +1042,372 @@ z - + - Northern Europe + Northern Europe - + - Europe + Europe - + - Global + Global - + - + - 0 + 0 - + - + - 20 + 20 - + - + - 40 + 40 - + - + - 60 + 60 - + - + - 80 + 80 - + - + - 100 + 100 - End-to-end images / second + End-to-end images / second - +" clip-path="url(#p98c9903e8c)" style="fill: #7b629c"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #7b629c"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #7b629c"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #168b89"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #168b89"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #168b89"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #df8739"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #df8739"/> - +" clip-path="url(#p98c9903e8c)" style="fill: #df8739"/> - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - 83.5 + 83.5 - 82.7 + 82.7 - 83.2 + 83.2 - 44.5 + 44.5 - 43.9 + 43.9 - 42.2 + 42.2 - 42.4 + 42.4 - 42.6 + 42.6 - 39.8 + 39.8 - GPU · batch 32 · higher is better + GPU · batch 32 · higher is better - Laptop inference speed + Laptop inference throughput · higher is better - i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included - Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32. + i7-12800H / RTX 3080 Ti Laptop · four CPU threads · three trials · decode, preprocessing and CPU results included + Whiskers: trial-median range. V2 CPU requires a float32 input cast; GPU uses published autocast. V3 uses FP32. - - MAMBO v2 · PyTorch + MAMBO v2 · PyTorch - - MAMBO v3 · PyTorch + MAMBO v3 · PyTorch - - MAMBO v3 · ONNX + MAMBO v3 · ONNX - - + + - - + + - - + + - - + + diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md index 99bf34f..b841e0d 100644 --- a/docs/mambo-release-comparison.md +++ b/docs/mambo-release-comparison.md @@ -23,11 +23,35 @@ regional setting, accompanied by clear trade-offs elsewhere. | Europe | 66.96% | 68.95% | +1.99 pp | | Global | 59.36% | 58.43% | −0.93 pp | -The primary comparison uses identical legacy lists in both releases. All-image -accuracy includes 8,042 images from 16 species absent from the model vocabulary; -known-truth accuracy uses the remaining 50,598 images (86.29% coverage). Macro-F1 -follows the pinned metric implementation, including predicted-only classes. -Predictions are unthresholded, and the lists were not tuned to these results. +The primary comparison uses identical legacy lists in both releases. Every +predictive metric is computed by pinned `mini_metrics` at commit +`70cc69adc05362863439277048e06386c1f885e1`; the chart extracts these fields: + +| Display | `metrics.json` source | Averaging and population | +|---|---|---| +| Species/genus/family accuracy | `all.micro_accuracy["0"/"1"/"2"]` | Micro: each of the 58,640 images has equal weight | +| Species macro-F1 | `all.f1["0"]` | Equal weight over the union of true and predicted species | +| Known-truth accuracy | `known.micro_accuracy[rank]` | Micro, restricted to truth in the active preset vocabulary | + +All calls use `threshold=0`, `optimal=False`, `simple=True`, +`hierarchical=False`; the main chart uses `known_only=False`. Every image receives +a prediction; no threshold is fitted. The class list limits predictions, **not the +evaluation population**. All 522 Flemming species remain in the main results, +including 8,042 images from 16 species outside the vocabulary. The known-only +species denominator is 50,598 images from 506 species for every compared list. +Known membership is determined separately at each taxonomic rank. + +The plain `accuracy` field in this mini_metrics revision is **macro** accuracy; +we explicitly extract `micro_accuracy`. Both macro accuracy and known-only metrics +are retained in the metric files. The original direct CSV accuracy calculation +has been replaced by mini_metrics; recomputation leaves the reported values unchanged. + +Macro-F1 includes species predicted despite having no ground-truth images, but +excludes species with neither truth nor predictions. Thus its class denominator can +change between pipelines: northern Europe has 1,221 active classes for v2 and 1,308 +for v3, versus 522 ground-truth species. It is not a mean over just the 506 known +truth species, nor over every species in the preset. These results use the pinned +metric policy; lists and thresholds were not tuned to Flemming. ## Inference speed @@ -37,15 +61,17 @@ Float`. Its CPU bars therefore show an explicitly labelled caller-side adapter: preprocessed values while matching the model's input dtype. V2 GPU and all quality measurements use the original published path unchanged. -![CPU latency and GPU throughput by model pipeline and region](assets/mambo-release-speed.svg) +![CPU and GPU throughput by model pipeline and region](assets/mambo-release-speed.svg) For northern Europe, the measured medians are: -| Pipeline | CPU, one image | GPU, one image | GPU, batch 8 | GPU, batch 32 | +| Pipeline | CPU, batch 1 | GPU, batch 1 | GPU, batch 8 | GPU, batch 32 | |---|---:|---:|---:|---:| -| v2 PyTorch (CPU input cast) | 796 ms | 22 ms | 44.8 images/s | 83.5 images/s | -| v3 PyTorch | 148 ms | 37 ms | 46.6 images/s | 44.5 images/s | -| v3 ONNX | 104 ms | 33 ms | 42.8 images/s | 42.4 images/s | +| v2 PyTorch (CPU input cast) | 1.26 | 45.2 | 44.8 | 83.5 | +| v3 PyTorch | 6.74 | 27.1 | 46.6 | 44.5 | +| v3 ONNX | 9.64 | 30.4 | 42.8 | 42.4 | + +All speed columns and panels use **images per second; higher is better**. V3 substantially improves CPU inference. V2 retains lower single-image GPU latency and higher batch-32 throughput; batch-8 throughput is much closer. The released @@ -56,6 +82,35 @@ CPU results. Each configuration has three fresh-process trials on the same seede image bank. Whiskers show the range of trial medians. The compact source data also includes CPU batch-8 results and timings for the updated v3 lists. +### Why v3 throughput plateaus + +The adapter sends each batch as one NCHW tensor to the backend; the benchmark sets +its batch limit to 32. It does not silently split batches into single-image calls. +However, it decodes and preprocesses each image serially on CPU, then runs the +model, with no CPU/GPU overlap. The existing three-trial northern-Europe timings +separate these boundaries: + +| Backend | Batch | CPU preparation, ms/batch | Prepared backend, ms/batch | End-to-end, images/s | +|---|---:|---:|---:|---:| +| PyTorch | 1 | 14.9 | 18.5 | 27.1 | +| PyTorch | 8 | 126.3 | 46.7 | 46.6 | +| PyTorch | 32 | 519.5 | 181.4 | 44.5 | +| ONNX | 1 | 16.6 | 13.4 | 30.4 | +| ONNX | 8 | 134.5 | 50.6 | 42.8 | +| ONNX | 32 | 559.4 | 180.6 | 42.4 | + +These are separately timed medians, not additive profiler spans. The prepared +boundary includes transfers and completed CPU leaf scores, excluding decoding and +hierarchy reduction. CPU preparation accounts for roughly 72–74% of end-to-end +batch-32 time. The prepared backend also shows little throughput gain beyond batch +8, so preprocessing alone does not explain the entire plateau. Kernel profiling +would be needed to explain that remaining hardware/runtime behavior; these data do +not establish a specific GPU bottleneck. + +A useful next optimization is to qualify parallel image preparation and overlap +with inference while preserving exact input values. The current end-to-end figures +remain the measured release behavior; they are not GPU-only throughput claims. + ## Memory and startup ![Host process memory and loading time for the released pipelines](assets/mambo-release-resources.svg) diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index 7572019..b95e58e 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -145,3 +145,32 @@ def test_loading_observer_preserves_classmethod_and_restores_it(): assert Classifier.init_spherical_repulsion(layer, iterations=1) is layer assert Classifier.init_spherical_repulsion.__func__ is original assert values["spherical_initialization_within_model_build"] >= 0 + + +def test_pinned_metrics_distinguish_micro_macro_and_known_truth(tmp_path): + import os + import subprocess + + executable = os.environ.get("MAMBO_METRICS_PYTHON") + if not executable: + pytest.skip("Set MAMBO_METRICS_PYTHON to the pinned metric environment") + source = tmp_path / "mini_metric.csv" + with source.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for i, truth in enumerate(("a", "a", "a", "outside")): + for rank in range(3): + writer.writerow([i, f"{i}.jpg", rank, truth, "a", 0.8, 0, int(truth == "a"), 1, 1 if truth == "a" else -1]) + output = subprocess.check_output( + [executable, "-m", "dev.releases.mambo_v3.metrics", "--source", str(source), "--output", str(tmp_path / "metrics.json")], + text=True, + ) + ranks = json.loads(output) + for row in ranks.values(): + assert row["micro_accuracy_all"] == pytest.approx(0.75) + assert row["macro_accuracy_all"] == pytest.approx(0.5) + assert row["micro_accuracy_known"] == pytest.approx(1.0) + assert row["abstention_coverage"] == 1 + metrics = json.loads((tmp_path / "metrics.json").read_text()) + assert metrics["all"]["f1"]["0"] == pytest.approx(3 / 7) + assert metrics["known"]["f1"]["0"] == pytest.approx(1) From a99b855768a5359c7efa119103c985e5f04a5fea Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 21:21:35 +0200 Subject: [PATCH 031/221] feat: diagnose batch scaling and expand macro-led release metrics --- deployment/README.md | 12 +- dev/releases/mambo_v3/comparison_charts.py | 109 +- dev/releases/mambo_v3/probe_preprocessing.py | 54 + .../mambo_v3/profile_batch_scaling.py | 126 ++ dev/releases/mambo_v3/profile_onnx_batch.py | 68 + .../mambo_v3/profile_preprocessing.py | 53 + dev/releases/mambo_v3/release-comparison.md | 10 + .../mambo_v3/summarize_batch_scaling.py | 88 ++ docs/assets/mambo-batch-diagnosis.json | 1054 +++++++++++++ docs/assets/mambo-release-comparison.json | 610 +++++++- docs/assets/mambo-release-metrics.csv | 49 + docs/assets/mambo-release-preset-delta.svg | 243 ++- docs/assets/mambo-release-quality.svg | 120 +- docs/assets/mambo-release-species-all.svg | 1370 +++++++++++++++++ docs/assets/mambo-release-species-known.svg | 1370 +++++++++++++++++ docs/mambo-batch-scaling.md | 106 ++ docs/mambo-release-comparison.md | 60 +- docs/ucloud-model-release-roadmap.md | 7 + 18 files changed, 5349 insertions(+), 160 deletions(-) create mode 100644 dev/releases/mambo_v3/probe_preprocessing.py create mode 100644 dev/releases/mambo_v3/profile_batch_scaling.py create mode 100644 dev/releases/mambo_v3/profile_onnx_batch.py create mode 100644 dev/releases/mambo_v3/profile_preprocessing.py create mode 100644 dev/releases/mambo_v3/summarize_batch_scaling.py create mode 100644 docs/assets/mambo-batch-diagnosis.json create mode 100644 docs/assets/mambo-release-metrics.csv create mode 100644 docs/assets/mambo-release-species-all.svg create mode 100644 docs/assets/mambo-release-species-known.svg create mode 100644 docs/mambo-batch-scaling.md diff --git a/deployment/README.md b/deployment/README.md index 5608103..f762fb1 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -92,9 +92,10 @@ defaults, so explicit backend/device arguments are recommended in scripts. On all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, genus and family labels for the full list and both legacy/updated European presets. -Northern Europe reaches **70.79% micro species accuracy overall** (**82.04%** on images +Northern Europe reaches **71.24% macro species accuracy** (v2: **68.52%**) and +**70.79% micro species accuracy overall** (**82.04%** on images whose true species is in the list), versus **68.71% overall for MAMBO_v2**. Updated -northern Europe reaches **70.32%**. All predictive metrics use pinned `mini_metrics`, with threshold 0 and no +northern Europe reaches **70.32% micro accuracy**. All predictive metrics use pinned `mini_metrics`, with threshold 0 and no optimization. Unknown species remain in the overall result. CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; this checks prediction consistency, not downstream embedding usefulness. @@ -116,9 +117,12 @@ Linux/WSL qualification limits are in the [measured report](../docs/mambo-v3-eva The [v2-versus-v3 charts](../docs/mambo-release-comparison.md) compare quality, speed and memory for northern Europe, Europe and global, including the advantages -and costs of each released pipeline. V3 uses less host memory and is faster on CPU +and costs of each released pipeline, with macro metrics leading and full +all/known-truth metric tables. The [batch-scaling diagnosis](../docs/mambo-batch-scaling.md) +identifies serial CPU preparation and FP32 backbone work as the main throughput +limits. V3 uses less host memory and is faster on CPU (v2 required a documented input cast here); v2 is faster at GPU batch 32. V2 also -retains higher global species accuracy and family accuracy across these lists. +retains higher global micro species accuracy and family accuracy across these lists. The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the reproduction commands and UCloud handoff. In-domain evaluation, other operating diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py index 2824ce6..9e20fdb 100644 --- a/dev/releases/mambo_v3/comparison_charts.py +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -1,6 +1,7 @@ """Build readable release-comparison SVGs and their compact, auditable source data.""" import argparse +import csv import hashlib import json import statistics @@ -58,6 +59,7 @@ def aggregate(args): "preset": preset, "ranks": metrics["ranks"], "macro_f1_all": metrics["all"]["f1"]["0"], + "scores": {scope: metrics[scope] for scope in ("all", "known")}, "metric_revision": metrics["mini_metrics_revision"], "sample_ids_sha256": report["sample_ids_sha256"], "list_sha256": report["lists"][preset]["sha256"], @@ -150,7 +152,7 @@ def aggregate(args): for (model, batch, stage), values in sorted(components.items()) ], "quality_policy": { - "accuracy": "mini_metrics all.micro_accuracy at each rank; all images", + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", "threshold": 0, "optimal": False, @@ -198,10 +200,10 @@ def save(fig, name, note): for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] values_by_rank = ( - [100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows], + [100 * r["ranks"]["species"]["macro_accuracy_all"] for r in rows], [r["macro_f1_all"] for r in rows], - [100 * r["ranks"]["genus"]["micro_accuracy_all"] for r in rows], - [100 * r["ranks"]["family"]["micro_accuracy_all"] for r in rows], + [100 * r["ranks"]["genus"]["macro_accuracy_all"] for r in rows], + [100 * r["ranks"]["family"]["macro_accuracy_all"] for r in rows], ) for index, (ax, values) in enumerate(zip(axes, values_by_rank, strict=True)): bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) @@ -209,14 +211,14 @@ def save(fig, name, note): ax.set_xticks(x, REGION_LABELS) ax.grid(axis="y", alpha=0.16) ax.set_axisbelow(True) - axes[0].set(title="Species micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[0].set(title="Species macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) axes[1].set( title="Species macro-F1 · truth ∪ predicted classes", ylabel="Pinned mini_metrics macro-F1", ylim=(0, max(r["macro_f1_all"] for r in data["quality"]) * 1.3), ) - axes[2].set(title="Genus micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) - axes[3].set(title="Family micro accuracy · all images", ylabel="Correct predictions (%)", ylim=(0, 100)) + axes[2].set(title="Genus macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) + axes[3].set(title="Family macro accuracy · all truth classes", ylabel="Mean class accuracy (%)", ylim=(0, 100)) axes[0].legend(loc="upper left", fontsize=9) fig.suptitle("Flemming: MAMBO v2 versus v3", fontsize=16, fontweight="bold") fig.tight_layout(rect=(0, 0.1, 1, 0.95)) @@ -227,6 +229,70 @@ def save(fig, name, note): "V2: original CUDA autocast / BioCLIP recipe. V3: FP32 / release recipe. Real-world comparison of the two release pipelines.", ) + metric_panels = ( + ("accuracy", "Macro accuracy"), + ("precision", "Macro precision"), + ("recall", "Macro recall"), + ("f1", "Macro-F1"), + ("micro_accuracy", "Micro accuracy"), + ("theilU", "Theil U"), + ) + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 3, figsize=(14, 7.5)) + for ax, (metric, title) in zip(axes.ravel(), metric_panels, strict=True): + for m, (model, label, color) in enumerate(zip(("v2", "v3"), ("MAMBO v2", "MAMBO v3 (both backends)"), COLORS, strict=False)): + rows = [next(r for r in data["quality"] if r["model"] == model and r["preset"] == region) for region in REGIONS] + values = [r["scores"][scope][metric]["0"] for r in rows] + bars = ax.bar(x + (m - 0.5) * 0.34, values, 0.34, label=label, color=color) + ax.bar_label(bars, fmt="%.3f", padding=3, fontsize=9) + ax.set(title=title, xticks=x, xticklabels=REGION_LABELS, ylim=(0, 1.1)) + ax.grid(axis="y", alpha=0.16) + ax.set_axisbelow(True) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=2, frameon=False) + fig.suptitle("Species baseline · " + ("all Flemming truth" if scope == "all" else "truth within active vocabulary"), fontsize=16) + fig.tight_layout(rect=(0, 0.1, 1, 0.89)) + save( + fig, + f"mambo-release-species-{scope}", + "Pinned mini_metrics · threshold 0 · no optimization · " + ("58,640 images" if scope == "all" else "50,598 images") + "\n" + "Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. " + "Coverage is 1.0; full rank tables supplied.", + ) + with (output / "mambo-release-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow( + [ + "model", + "preset", + "scope", + "rank", + "images", + "macro_accuracy", + "macro_precision", + "macro_recall", + "macro_f1", + "micro_accuracy", + "theilU", + "coverage", + ] + ) + for row in data["quality"]: + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + row["model"], + row["preset"], + scope, + rank, + row["ranks"][rank]["images" if scope == "all" else "known_images"], + *[ + row["scores"][scope][key][str(level)] + for key in ("accuracy", "precision", "recall", "f1", "micro_accuracy", "theilU", "coverage") + ], + ] + ) + fig, axes = plt.subplots(2, 2, figsize=(12, 7.8)) axes = axes.ravel() for ax, device, batch in zip(axes, ("cpu", "cuda:0", "cuda:0", "cuda:0"), (1, 1, 8, 32), strict=True): @@ -307,18 +373,23 @@ def save(fig, name, note): "Startup uses cached local files, excludes process/bootstrap setup and downloads; includes classifier initialization.", ) - fig, ax = plt.subplots(figsize=(9, 3.2)) - for i, region in enumerate(REGIONS[:2]): - rows = [next(r for r in data["quality"] if r["model"] == "v3" and r["preset"] == region + suffix) for suffix in ("", "_v3")] - old, new = [100 * r["ranks"]["species"]["micro_accuracy_all"] for r in rows] - delta = new - old - ax.barh(i, delta, height=0.5, color=COLORS[1]) - ax.text(0.02, i, f"{delta:+.2f} pp ({old:.2f}% → {new:.2f}%)", va="center", fontsize=10) - ax.axvline(0, color="#555555", linewidth=1) - ax.set(yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.6, 0.45), xlabel="Micro species accuracy change (percentage points)") - ax.invert_yaxis() - ax.set_title("V3 updated lists: small accuracy trade-offs on Flemming", loc="left") - fig.tight_layout(rect=(0, 0.15, 1, 1)) + fig, axes = plt.subplots(1, 2, figsize=(12, 3.8)) + for ax, field, title in zip( + axes, ("macro_accuracy_all", "micro_accuracy_all"), ("Macro species accuracy", "Micro species accuracy"), strict=True + ): + for i, region in enumerate(REGIONS[:2]): + rows = [next(r for r in data["quality"] if r["model"] == "v3" and r["preset"] == region + suffix) for suffix in ("", "_v3")] + old, new = [100 * r["ranks"]["species"][field] for r in rows] + delta = new - old + ax.barh(i, delta, height=0.5, color=COLORS[1]) + ax.text(0.02, i, f"{delta:+.2f} pp", va="center", fontsize=10) + ax.axvline(0, color="#555555", linewidth=1) + ax.set( + yticks=[0, 1], yticklabels=REGION_LABELS[:2], xlim=(-0.9, 0.25), xlabel="Updated minus legacy (percentage points)", title=title + ) + ax.invert_yaxis() + fig.tight_layout(rect=(0, 0.18, 1, 0.93)) + fig.suptitle("V3 updated lists: accuracy trade-offs on Flemming", fontweight="bold") save( fig, "mambo-release-preset-delta", diff --git a/dev/releases/mambo_v3/probe_preprocessing.py b/dev/releases/mambo_v3/probe_preprocessing.py new file mode 100644 index 0000000..0a5cd22 --- /dev/null +++ b/dev/releases/mambo_v3/probe_preprocessing.py @@ -0,0 +1,54 @@ +import argparse +import inspect +import json +import statistics +import time +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy.preprocessing import RECIPE, _rgb, preprocess + +parser = argparse.ArgumentParser(description="Diagnostic-only layout/crop interventions with exact pixel checks") +parser.add_argument("--evidence", type=Path, required=True) +parser.add_argument("--root", type=Path, required=True) +args = parser.parse_args() +root = args.evidence +records = json.loads((root / "samples.json").read_text()) +paths = [args.root / r["path"] for r in records] +source = inspect.getsource(preprocess) +variants = {"baseline": preprocess} +for contiguous, crop in ((True, False), (False, True), (True, True)): + s = source + if crop: + s = s.replace( + "lo = np.floor(coordinates).astype(int)", + "coordinates = coordinates[(resized-size)//2:(resized-size)//2+size]\n lo = np.floor(coordinates).astype(int)", + ).replace("offset = (resized - size) // 2", "offset = 0") + if contiguous: + s = ( + s.replace( + "image = image[:, yy][:, :, xx].astype(np.float32)", + "image = np.ascontiguousarray(image[:, yy][:, :, xx], dtype=np.float32)", + ) + .replace("pixels = rows[:, :, lo]", "rows = np.ascontiguousarray(rows)\n pixels = rows[:, :, lo]") + .replace(" return np.ascontiguousarray(", " pixels = np.ascontiguousarray(pixels)\n return np.ascontiguousarray(") + ) + env = {"np": np, "_rgb": _rgb, "RECIPE": RECIPE} + exec(s, env) + variants[f"contiguous-{contiguous}-crop-{crop}"] = env["preprocess"] +references = [preprocess(p) for p in paths] +out = [] +for name, fn in variants.items(): + for p, ref in zip(paths, references): + np.testing.assert_array_equal(fn(p), ref) +for trial in range(3): + for name, fn in list(variants.items()) if trial != 1 else reversed(list(variants.items())): + vals = [] + for _ in range(7): + t = time.perf_counter() + np.stack([fn(p) for p in paths]) + vals.append((time.perf_counter() - t) * 1000) + out.append({"trial": trial, "variant": name, "ms": vals, "median_ms": statistics.median(vals), "byte_identical_32": True}) + print(out[-1], flush=True) +(root / "preprocess-interventions.json").write_text(json.dumps(out, indent=2)) diff --git a/dev/releases/mambo_v3/profile_batch_scaling.py b/dev/releases/mambo_v3/profile_batch_scaling.py new file mode 100644 index 0000000..dab65f5 --- /dev/null +++ b/dev/releases/mambo_v3/profile_batch_scaling.py @@ -0,0 +1,126 @@ +"""Causal batch-scaling probes; alternative layouts/precision are diagnostic only.""" + +import argparse +import contextlib +import cProfile +import pstats +import statistics +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path +from unittest.mock import patch + +import numpy as np +import torch + +from deployment.mambo_deploy import Predictor +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.benchmark import snapshot +from dev.releases.mambo_v3.evaluate import prepare_batch, runtime_settings +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +def timed(call, repeats=7): + values = [] + for _ in range(2): + call() + for _ in range(repeats): + torch.cuda.synchronize() + start = time.perf_counter() + call() + torch.cuda.synchronize() + values.append((time.perf_counter() - start) * 1000) + return {"ms": values, "median_ms": statistics.median(values)} + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + report = {"status": "running", "runtime": runtime_settings(4), "before": snapshot(), "cells": [], "preparation": []} + report.update(runner_sha256=file_hash(__file__), bundle_sha256=file_hash(args.bundle / "release.json")) + write_json(args.output / "report.json", report) + try: + _, records = load_records(args.manifest, args.root, 32, 20260923) + write_json(args.output / "samples.json", records) + report["samples_sha256"] = file_hash(args.output / "samples.json") + paths = [args.root / r["path"] for r in records] + if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + predictor = Predictor(args.bundle, backend="torch", device="cuda:0", model="north_europe", batch_size=32, threads=4) + predictor.predict(paths[:1]) + model = predictor._torch_model + report["model"] = str(model) + arrays = {n: prepare_batch(paths[:n]) for n in (1, 8, 32)} + tensors = {n: torch.from_numpy(x).cuda() for n, x in arrays.items()} + # Establish model call sizes, not just the public API's requested batch. + shapes = [] + hook = model.register_forward_pre_hook(lambda module, inputs: shapes.append(list(inputs[0].shape))) + for n in arrays: + predictor.predict(paths[:n]) + hook.remove() + report["observed_forward_shapes"] = shapes + with torch.inference_mode(): + for trial in range(3): + modes = [(False, False), (True, False), (False, True), (True, True)] + for amp, channels_last in modes if trial != 1 else reversed(modes): + layout = torch.channels_last if channels_last else torch.contiguous_format + model.to(memory_format=layout) + for n in (1, 8, 32) if trial != 1 else (32, 8, 1): + x = tensors[n].contiguous(memory_format=layout) + + def compute(): + with torch.autocast("cuda", dtype=torch.float16, enabled=amp): + return model(x) + + row = {"trial": trial, "batch": n, "amp": amp, "channels_last": channels_last} + row["resident_model"] = timed(compute) + row["hardware"] = snapshot() + report["cells"].append(row) + print(trial, n, amp, channels_last, row["resident_model"]["median_ms"], flush=True) + model.to(memory_format=torch.contiguous_format) + for n in (8, 32): + with torch.profiler.profile( + activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA], record_shapes=True + ) as prof: + for _ in range(3): + model(tensors[n]) + torch.cuda.synchronize() + (args.output / f"torch-profile-{n}.txt").write_text(prof.key_averages().table(sort_by="self_cuda_time_total", row_limit=30)) + prof.export_chrome_trace(str(args.output / f"torch-profile-{n}.json")) + for workers in (0, 4, 8): + with ThreadPoolExecutor(max_workers=workers) if workers else contextlib.nullcontext(None) as pool: + for n in (1, 8, 32): + + def prepare(): + return prepare_batch(paths[:n], pool) + + np.testing.assert_array_equal(prepare(), arrays[n]) + row = {"workers": workers, "batch": n, "preparation": timed(prepare)} + # Intervention in the adapter only; original preprocessing values are unchanged. + with patch("deployment.mambo_deploy.predictor.preprocess") as mocked: + + def prediction(): + ready = iter(prepare()) + mocked.side_effect = lambda item: next(ready) + return predictor.predict(paths[:n]) + + row["end_to_end"] = timed(prediction) + report["preparation"].append(row) + print("workers", workers, n, row["preparation"]["median_ms"], row["end_to_end"]["median_ms"], flush=True) + prof = cProfile.Profile() + prof.runcall(prepare_batch, paths) + with (args.output / "cpu-profile.txt").open("w") as stream: + pstats.Stats(prof, stream=stream).sort_stats("cumtime").print_stats(25) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + report["after"] = snapshot() + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/profile_onnx_batch.py b/dev/releases/mambo_v3/profile_onnx_batch.py new file mode 100644 index 0000000..a4dddb8 --- /dev/null +++ b/dev/releases/mambo_v3/profile_onnx_batch.py @@ -0,0 +1,68 @@ +import argparse +import collections +import json +import statistics +import time +from pathlib import Path + +import onnxruntime as ort + +from deployment.mambo_deploy import Predictor +from dev.releases.mambo_v3.benchmark import snapshot +from dev.releases.mambo_v3.evaluate import prepare_batch + +parser = argparse.ArgumentParser(description="ONNX placement and batch-scaling trace") +for name in ("evidence", "root", "bundle"): + parser.add_argument("--" + name, type=Path, required=True) +args = parser.parse_args() +root = args.evidence +records = json.loads((root / "samples.json").read_text()) +paths = [args.root / r["path"] for r in records] +report = {"before": snapshot(), "cells": [], "providers": []} +for n in (1, 8, 32): + x = prepare_batch(paths[:n]) + p = Predictor(args.bundle, device="cuda:0", model="north_europe", batch_size=32, threads=4) + # Adapter explicitly disables profiling; construct matching session separately for diagnosis. + o = ort.SessionOptions() + o.enable_profiling = True + o.profile_file_prefix = str(root / f"onnx-{n}") + o.intra_op_num_threads = 4 + o.inter_op_num_threads = 1 + ort.preload_dlls() + session = ort.InferenceSession( + str(p.bundle.profile("onnx")), + sess_options=o, + providers=[("CUDAExecutionProvider", {"device_id": 0, "use_tf32": 0}), "CPUExecutionProvider"], + ) + session.disable_fallback() + assert session.get_providers()[0] == "CUDAExecutionProvider" + for _ in range(2): + session.run(["output_0"], {"images": x}) + vals = [] + for _ in range(7): + t = time.perf_counter() + session.run(["output_0"], {"images": x}) + vals.append((time.perf_counter() - t) * 1000) + trace = Path(session.end_profiling()) + events = json.loads(trace.read_text()) + ops = collections.defaultdict(float) + counts = collections.Counter() + for e in events: + a = e.get("args", {}) + if e.get("cat") == "Node" and "provider" in a: + key = (a["provider"], a["op_name"]) + ops[key] += e["dur"] + counts[key] += 1 + report["cells"].append( + { + "batch": n, + "profiled_median_ms": statistics.median(vals), + "node_totals": [ + {"provider": k[0], "op": k[1], "us": v, "calls": counts[k]} for k, v in sorted(ops.items(), key=lambda i: -i[1]) + ], + "trace": str(trace), + } + ) + print(n, report["cells"][-1], flush=True) +report["after"] = snapshot() +(root / "onnx-profile-summary.json").write_text(json.dumps(report, indent=2)) diff --git a/dev/releases/mambo_v3/profile_preprocessing.py b/dev/releases/mambo_v3/profile_preprocessing.py new file mode 100644 index 0000000..fb7294b --- /dev/null +++ b/dev/releases/mambo_v3/profile_preprocessing.py @@ -0,0 +1,53 @@ +import argparse +import collections +import inspect +import json +import sys +import time +from pathlib import Path + +from deployment.mambo_deploy.preprocessing import preprocess +from dev.releases.mambo_v3.evaluate import prepare_batch + +parser = argparse.ArgumentParser(description="Line attribution for the current release preprocessor") +parser.add_argument("--evidence", type=Path, required=True) +parser.add_argument("--root", type=Path, required=True) +args = parser.parse_args() +root = args.evidence +records = json.loads((root / "samples.json").read_text()) +paths = [args.root / r["path"] for r in records] +line_times = collections.defaultdict(float) +state = {} +layout = {} + + +def trace(frame, event, arg): + if frame.f_code is not preprocess.__code__: + return + now = time.perf_counter() + if event in ("line", "return"): + if "line" in state: + line_times[state["line"]] += now - state["t"] + state.update(line=frame.f_lineno, t=now) + if event == "return": + for name in ("coordinates", "lo", "fraction", "image", "rows", "pixels"): + value = frame.f_locals[name] + layout[name] = dict( + dtype=str(value.dtype), shape=list(value.shape), strides=list(value.strides), contiguous=value.flags.c_contiguous + ) + state.clear() + return trace + + +sys.settrace(trace) +prepare_batch(paths) +sys.settrace(None) +source = Path(inspect.getfile(preprocess)).read_text().splitlines() +rows = [ + {"line": line, "code": source[line - 1].strip(), "ms": seconds * 1000} + for line, seconds in sorted(line_times.items(), key=lambda i: -i[1]) +] +print(json.dumps(rows, indent=2)) +(root / "preprocess-line-profile.json").write_text(json.dumps(rows, indent=2)) + +(root / "preprocess-layout.json").write_text(json.dumps(layout, indent=2)) diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md index 5bc96c0..0177f4b 100644 --- a/dev/releases/mambo_v3/release-comparison.md +++ b/dev/releases/mambo_v3/release-comparison.md @@ -164,3 +164,13 @@ MAMBO_METRICS_PYTHON=/path/to/metrics-env/bin/python \ It exercises imbalanced classes and excluded truth to distinguish micro accuracy, macro accuracy, all/known filtering and macro-F1 through the real mini_metrics API. + +The expanded baseline leads with macro accuracy/F1 and retains macro precision, +recall, micro accuracy, Theil U and coverage for all three ranks and both +all/known-truth scopes. `mambo-release-metrics.csv` contains the complete compact +baseline, including updated presets. All values are copied from pinned mini_metrics +outputs; no predictive metric is calculated by the chart renderer. + +The [batch-scaling diagnosis](../../../docs/mambo-batch-scaling.md) provides the +sequential profiling workflow, controlled precision/layout/preprocessing probes, +recorded causes and boundaries for subsequent implementation. diff --git a/dev/releases/mambo_v3/summarize_batch_scaling.py b/dev/releases/mambo_v3/summarize_batch_scaling.py new file mode 100644 index 0000000..343719a --- /dev/null +++ b/dev/releases/mambo_v3/summarize_batch_scaling.py @@ -0,0 +1,88 @@ +"""Compact diagnostic evidence without private images or large profiler traces.""" + +import argparse +import json +import statistics +from collections import defaultdict +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + + +def summarize(root, output): + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete batch diagnosis") + grouped = defaultdict(list) + for row in report["cells"]: + grouped[row["amp"], row["channels_last"], row["batch"]].extend(row["resident_model"]["ms"]) + gpu = [] + for (amp, layout, batch), values in grouped.items(): + if len(values) != 21: + raise ValueError("Expected three seven-observation trials") + gpu.append( + dict( + amp=amp, + channels_last=layout, + batch=batch, + median_ms=statistics.median(values), + images_per_second=batch * 1000 / statistics.median(values), + ) + ) + probes = json.loads((root / "preprocess-interventions.json").read_text()) + grouped = defaultdict(list) + for row in probes: + if not row["byte_identical_32"]: + raise ValueError("Changed preprocessing values") + grouped[row["variant"]].extend(row["ms"]) + cpu = [ + {"variant": name, "batch": 32, "median_ms": statistics.median(values), "observations": len(values)} + for name, values in grouped.items() + ] + events = json.loads((root / "torch-profile-32.json").read_text())["traceEvents"] + kernels = [e for e in events if e.get("cat") == "kernel"] + kernel_us = sum(e["dur"] for e in kernels) + predicates = { + "convolution": lambda name: any(part in name for part in ("scudnn", "convolve", "conv_depthwise")), + "batch_normalization": lambda name: "bn_fw_inf" in name, + "silu": lambda name: "silu_kernel" in name, + } + shares = {name: sum(e["dur"] for e in kernels if predicate(e["name"])) / kernel_us for name, predicate in predicates.items()} + source_names = ( + "report.json", + "preprocess-interventions.json", + "preprocess-line-profile.json", + "preprocess-layout.json", + "torch-profile-32.json", + "onnx-profile-summary.json", + ) + write_json( + output, + { + "status": "complete", + "hardware": report["before"], + "observed_forward_shapes": report["observed_forward_shapes"], + "gpu_resident": gpu, + "preparation_interventions": cpu, + "threaded_preparation": report["preparation"], + "preprocess_layout": json.loads((root / "preprocess-layout.json").read_text()), + "preprocess_line_profile": json.loads((root / "preprocess-line-profile.json").read_text()), + "cuda_kernel_time_shares_batch32": shares, + "onnx_placement": json.loads((root / "onnx-profile-summary.json").read_text()), + "source_sha256": {name: file_hash(root / name) for name in source_names}, + "limits": ( + "Diagnostic interventions, not qualified release variants. GPU timings exclude input preparation and transfers; " + "threaded end-to-end uses unchanged pixels. Profiler timings are explanatory, not replacement benchmarks. " + "No hardware counter roofline attribution." + ), + }, + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--evidence", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + summarize(args.evidence, args.output) diff --git a/docs/assets/mambo-batch-diagnosis.json b/docs/assets/mambo-batch-diagnosis.json new file mode 100644 index 0000000..7d7fcf9 --- /dev/null +++ b/docs/assets/mambo-batch-diagnosis.json @@ -0,0 +1,1054 @@ +{ + "status": "complete", + "hardware": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 700 MiB, 19.13 W, 63, 210 MHz, P8", + "gpu_processes": "", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + }, + "observed_forward_shapes": [ + [ + 1, + 3, + 384, + 384 + ], + [ + 8, + 3, + 384, + 384 + ], + [ + 32, + 3, + 384, + 384 + ] + ], + "gpu_resident": [ + { + "amp": false, + "channels_last": false, + "batch": 1, + "median_ms": 18.73565999994753, + "images_per_second": 53.374153886375 + }, + { + "amp": false, + "channels_last": false, + "batch": 8, + "median_ms": 49.16021700046258, + "images_per_second": 162.73321169279467 + }, + { + "amp": false, + "channels_last": false, + "batch": 32, + "median_ms": 180.17124500329373, + "images_per_second": 177.60880766192741 + }, + { + "amp": true, + "channels_last": false, + "batch": 1, + "median_ms": 25.087848996918183, + "images_per_second": 39.85993379196602 + }, + { + "amp": true, + "channels_last": false, + "batch": 8, + "median_ms": 25.791216001380235, + "images_per_second": 310.18312589727736 + }, + { + "amp": true, + "channels_last": false, + "batch": 32, + "median_ms": 86.16407899535261, + "images_per_second": 371.3844605908916 + }, + { + "amp": false, + "channels_last": true, + "batch": 1, + "median_ms": 19.476649998978246, + "images_per_second": 51.34353187290733 + }, + { + "amp": false, + "channels_last": true, + "batch": 8, + "median_ms": 59.71050000516698, + "images_per_second": 133.97978578822367 + }, + { + "amp": false, + "channels_last": true, + "batch": 32, + "median_ms": 232.55600000265986, + "images_per_second": 137.60126593007277 + }, + { + "amp": true, + "channels_last": true, + "batch": 1, + "median_ms": 25.334970996482298, + "images_per_second": 39.471132615026384 + }, + { + "amp": true, + "channels_last": true, + "batch": 8, + "median_ms": 27.269050995528232, + "images_per_second": 293.37287906762487 + }, + { + "amp": true, + "channels_last": true, + "batch": 32, + "median_ms": 76.47655099572148, + "images_per_second": 418.4289116514977 + } + ], + "preparation_interventions": [ + { + "variant": "baseline", + "batch": 32, + "median_ms": 562.1651870023925, + "observations": 21 + }, + { + "variant": "contiguous-True-crop-False", + "batch": 32, + "median_ms": 343.510406994028, + "observations": 21 + }, + { + "variant": "contiguous-False-crop-True", + "batch": 32, + "median_ms": 525.9267129949876, + "observations": 21 + }, + { + "variant": "contiguous-True-crop-True", + "batch": 32, + "median_ms": 300.3360820002854, + "observations": 21 + } + ], + "threaded_preparation": [ + { + "workers": 0, + "batch": 1, + "preparation": { + "ms": [ + 19.616127996414434, + 19.292778000817634, + 17.02880099765025, + 16.201587997784372, + 16.534098002011888, + 16.695651996997185, + 18.7562249993789 + ], + "median_ms": 17.02880099765025 + }, + "end_to_end": { + "ms": [ + 53.67833700438496, + 43.58293499535648, + 48.570915998425335, + 58.70243599929381, + 51.21928400330944, + 50.04593500052579, + 109.66543499671388 + ], + "median_ms": 51.21928400330944 + } + }, + { + "workers": 0, + "batch": 8, + "preparation": { + "ms": [ + 142.15509499626933, + 148.18065000144998, + 140.30640100099845, + 134.68550000106916, + 145.06119200086687, + 147.70605999365216, + 146.079619997181 + ], + "median_ms": 145.06119200086687 + }, + "end_to_end": { + "ms": [ + 218.58030399744166, + 222.14935300144134, + 235.41950900107622, + 222.19096399931004, + 213.08374200452818, + 229.48078599438304, + 234.97099000087474 + ], + "median_ms": 222.19096399931004 + } + }, + { + "workers": 0, + "batch": 32, + "preparation": { + "ms": [ + 514.3840050004655, + 539.2801329944632, + 562.3003309956403, + 534.1173130000243, + 540.6491399990045, + 535.0450780024403, + 547.7692889980972 + ], + "median_ms": 539.2801329944632 + }, + "end_to_end": { + "ms": [ + 724.3408480062499, + 724.2302400045446, + 810.2542579945293, + 747.9360249999445, + 752.7866360032931, + 794.1586329980055, + 818.1538760036347 + ], + "median_ms": 752.7866360032931 + } + }, + { + "workers": 4, + "batch": 1, + "preparation": { + "ms": [ + 20.269925997126848, + 22.22652499767719, + 20.50503699865658, + 19.721185002708808, + 21.125603998370934, + 20.139608001045417, + 21.683350001694635 + ], + "median_ms": 20.50503699865658 + }, + "end_to_end": { + "ms": [ + 47.38394000014523, + 46.94011100218631, + 46.92848800186766, + 53.701498996815644, + 51.292921001731884, + 62.550968999858014, + 58.61212900344981 + ], + "median_ms": 51.292921001731884 + } + }, + { + "workers": 4, + "batch": 8, + "preparation": { + "ms": [ + 59.703109000111, + 60.19584999739891, + 59.60010799753945, + 61.238673006300814, + 59.36151299829362, + 60.17484599578893, + 60.63941100001102 + ], + "median_ms": 60.17484599578893 + }, + "end_to_end": { + "ms": [ + 105.8031850043335, + 103.50890800327761, + 99.12116499617696, + 97.16311900410801, + 97.02218999882462, + 100.90754300472327, + 104.99859300034586 + ], + "median_ms": 100.90754300472327 + } + }, + { + "workers": 4, + "batch": 32, + "preparation": { + "ms": [ + 240.61233399697812, + 234.24396100017475, + 234.06826899736188, + 239.8692399947322, + 269.3112029955955, + 258.4397809987422, + 284.8161590009113 + ], + "median_ms": 240.61233399697812 + }, + "end_to_end": { + "ms": [ + 437.74061399744824, + 423.9376620025723, + 443.24309199873824, + 384.62499099841807, + 398.3012780008721, + 387.2949769938714, + 384.7743169972091 + ], + "median_ms": 398.3012780008721 + } + }, + { + "workers": 8, + "batch": 1, + "preparation": { + "ms": [ + 18.01865000015823, + 17.704174999380484, + 17.384498998580966, + 17.4712570005795, + 17.728767001244705, + 18.49644599860767, + 21.064079002826475 + ], + "median_ms": 17.728767001244705 + }, + "end_to_end": { + "ms": [ + 40.77254099684069, + 44.51147800136823, + 41.865560997393914, + 43.20249200100079, + 44.91773899644613, + 49.07010399620049, + 51.19167999509955 + ], + "median_ms": 44.51147800136823 + } + }, + { + "workers": 8, + "batch": 8, + "preparation": { + "ms": [ + 39.493053998739924, + 38.93004300334724, + 40.128129003278445, + 40.12657199928071, + 42.5515759998234, + 41.09424100170145, + 43.94215100182919 + ], + "median_ms": 40.128129003278445 + }, + "end_to_end": { + "ms": [ + 106.83042999880854, + 101.63770999497501, + 99.31824399973266, + 107.72375099622877, + 103.89905999909388, + 118.59914499655133, + 104.00590399513021 + ], + "median_ms": 104.00590399513021 + } + }, + { + "workers": 8, + "batch": 32, + "preparation": { + "ms": [ + 216.59438700589817, + 212.2394100006204, + 197.78962199779926, + 175.19723700388568, + 174.7613069965155, + 189.28766500175698, + 218.17095300502842 + ], + "median_ms": 197.78962199779926 + }, + "end_to_end": { + "ms": [ + 379.3693120023818, + 362.06720899645006, + 359.358975001669, + 357.9453249985818, + 360.56900700350525, + 348.9935030011111, + 366.41513500217116 + ], + "median_ms": 360.56900700350525 + } + } + ], + "preprocess_layout": { + "coordinates": { + "dtype": "float32", + "shape": [ + 438 + ], + "strides": [ + 4 + ], + "contiguous": true + }, + "lo": { + "dtype": "int64", + "shape": [ + 438 + ], + "strides": [ + 8 + ], + "contiguous": true + }, + "fraction": { + "dtype": "float64", + "shape": [ + 438 + ], + "strides": [ + 8 + ], + "contiguous": true + }, + "image": { + "dtype": "float32", + "shape": [ + 3, + 384, + 384 + ], + "strides": [ + 4, + 12, + 4608 + ], + "contiguous": false + }, + "rows": { + "dtype": "float64", + "shape": [ + 3, + 438, + 384 + ], + "strides": [ + 8, + 9216, + 24 + ], + "contiguous": false + }, + "pixels": { + "dtype": "float32", + "shape": [ + 3, + 384, + 384 + ], + "strides": [ + 4, + 12, + 4608 + ], + "contiguous": false + } + }, + "preprocess_line_profile": [ + { + "line": 61, + "code": "pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :]", + "ms": 257.64437997713685 + }, + { + "line": 60, + "code": "rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None]", + "ms": 200.77586602565134 + }, + { + "line": 65, + "code": "(pixels - np.array(RECIPE[\"mean\"], dtype=np.float32)[:, None, None]) / np.array(RECIPE[\"std\"], dtype=np.float32)[:, None, None]", + "ms": 114.54548400070053 + }, + { + "line": 54, + "code": "image = image[:, yy][:, :, xx].astype(np.float32)", + "ms": 63.36485400242964 + }, + { + "line": 50, + "code": "image = _rgb(item)", + "ms": 44.08031197817763 + }, + { + "line": 63, + "code": "pixels = np.rint(pixels[:, offset : offset + size, offset : offset + size]).astype(np.float32) / 255", + "ms": 37.388277996797115 + }, + { + "line": 64, + "code": "return np.ascontiguousarray(", + "ms": 22.246315966185648 + }, + { + "line": 56, + "code": "coordinates = np.maximum((np.arange(resized, dtype=np.float32) + 0.5) * np.float32(size / resized) - 0.5, 0)", + "ms": 1.2886569966212846 + }, + { + "line": 52, + "code": "yy = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[1] / size)).astype(int), image.shape[1] - 1)", + "ms": 1.1460980094852857 + }, + { + "line": 62, + "code": "offset = (resized - size) // 2", + "ms": 0.39232201379491016 + }, + { + "line": 57, + "code": "lo = np.floor(coordinates).astype(int)", + "ms": 0.23413298913510516 + }, + { + "line": 53, + "code": "xx = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[2] / size)).astype(int), image.shape[2] - 1)", + "ms": 0.22443901252700016 + }, + { + "line": 58, + "code": "hi = np.minimum(lo + 1, size - 1)", + "ms": 0.19344200700288638 + }, + { + "line": 59, + "code": "fraction = coordinates - lo", + "ms": 0.18871598149416968 + }, + { + "line": 51, + "code": "size, resized = 384, 438", + "ms": 0.10417701560072601 + } + ], + "cuda_kernel_time_shares_batch32": { + "convolution": 0.6359277858701351, + "batch_normalization": 0.14220184332861804, + "silu": 0.12333557066163707 + }, + "onnx_placement": { + "before": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 910 MiB, 20.07 W, 67, 210 MHz, P8", + "gpu_processes": "", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + }, + "cells": [ + { + "batch": 1, + "profiled_median_ms": 14.495415998680983, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 731492.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 91277.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 26894.0, + "calls": 54 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 19772.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 17403.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 11877.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 9642.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 8983.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 6007.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 5523.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 2812.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 1791.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 1131.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 978.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 900.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 567.0, + "calls": 9 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 429.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 375.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 372.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 338.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 293.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 292.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 267.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 195.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 75.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-1_2026-09-23_21-12-47_264.json" + }, + { + "batch": 8, + "profiled_median_ms": 54.01113900006749, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 411025.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 11434.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 7787.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 6011.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 3882.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 3511.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 1943.0, + "calls": 54 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 1096.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 989.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 900.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 867.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 791.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 577.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 490.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 430.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 425.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 335.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 313.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 288.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 284.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 273.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 245.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 162.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 130.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 91.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-8_2026-09-23_21-12-49_543.json" + }, + { + "batch": 32, + "profiled_median_ms": 233.22565700073028, + "node_totals": [ + { + "provider": "CUDAExecutionProvider", + "op": "Conv", + "us": 384720.0, + "calls": 1530 + }, + { + "provider": "CUDAExecutionProvider", + "op": "QuickGelu", + "us": 11865.0, + "calls": 918 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Add", + "us": 10292.0, + "calls": 342 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Gemm", + "us": 6870.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceMean", + "us": 5579.0, + "calls": 279 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Mul", + "us": 3899.0, + "calls": 270 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sigmoid", + "us": 3759.0, + "calls": 270 + }, + { + "provider": "CPUExecutionProvider", + "op": "Acos", + "us": 3519.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyToHost", + "us": 1920.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "MemcpyFromHost", + "us": 1877.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ScatterElements", + "us": 1387.0, + "calls": 54 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Sub", + "us": 833.0, + "calls": 27 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Expand", + "us": 763.0, + "calls": 45 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ReduceL2", + "us": 647.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Shape", + "us": 510.0, + "calls": 27 + }, + { + "provider": "CPUExecutionProvider", + "op": "Concat", + "us": 420.0, + "calls": 36 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Div", + "us": 340.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "ConstantOfShape", + "us": 289.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Clip", + "us": 284.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "GatherElements", + "us": 260.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Exp", + "us": 246.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Log", + "us": 210.0, + "calls": 18 + }, + { + "provider": "CUDAExecutionProvider", + "op": "LeakyRelu", + "us": 164.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Neg", + "us": 147.0, + "calls": 9 + }, + { + "provider": "CUDAExecutionProvider", + "op": "Reshape", + "us": 70.0, + "calls": 9 + } + ], + "trace": "local-evidence/mambo-batch-root-cause/onnx-32_2026-09-23_21-12-51_225.json" + } + ], + "providers": [], + "after": { + "cpu_model": "12th Gen Intel(R) Core(TM) i7-12800H", + "gpu": "NVIDIA GeForce RTX 3080 Ti Laptop GPU, 1957 MiB, 41.93 W, 70, 1222 MHz, P0", + "gpu_processes": "151641, [N/A]", + "ac_online": "1", + "power_profile": null, + "cpu_governor": null + } + }, + "source_sha256": { + "report.json": "918aecaef03e91796d2972c792018407151222fbc344d5710ecc6d751ee91efc", + "preprocess-interventions.json": "48009fc511ef5d98fc6257cdfe7dc6e62f7a8f907eab25f4e89ef0fbd2b0dce7", + "preprocess-line-profile.json": "c69867c2e2e78f1c77e7ae4cfd1eb60044eeb92a7f8343c99628f0619fd866ac", + "preprocess-layout.json": "ae01376e86e37a523c8e53e457e89d896fed586a593071688f6729e08eb086d5", + "torch-profile-32.json": "a10f0ab9e11b70125a44b5289432173b988509a3ccbb6a6c56e1942a48c919e3", + "onnx-profile-summary.json": "6e22f17f87cd981dfb20d5cb329af03ad10b7f45a25a4b0e1b25d33780607ad7" + }, + "limits": "Diagnostic interventions, not qualified release variants. GPU timings exclude input preparation and transfers; threaded end-to-end uses unchanged pixels. Profiler timings are explanatory, not replacement benchmarks. No hardware counter roofline attribution." +} diff --git a/docs/assets/mambo-release-comparison.json b/docs/assets/mambo-release-comparison.json index e5db273..88f4f72 100644 --- a/docs/assets/mambo-release-comparison.json +++ b/docs/assets/mambo-release-comparison.json @@ -39,6 +39,82 @@ } }, "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" @@ -82,6 +158,82 @@ } }, "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" @@ -125,6 +277,82 @@ } }, "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" @@ -168,6 +396,82 @@ } }, "macro_f1_all": 0.25450880594788156, + "scores": { + "all": { + "accuracy": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.26361186496219735, + "1": 0.31882230287858776, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.25450880594788156, + "1": 0.3207725301986971, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.7078956343792633, + "1": 0.7936732605729877, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9282973331913745, + "1": 0.927078119536916, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.2677964216559137, + "1": 0.31884970853060046, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.2609164468790569, + "1": 0.3212438169069074, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.8204079212617099, + "1": 0.7936867954774126, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9313037775676971, + "1": 0.9270916152069156, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" @@ -211,6 +515,82 @@ } }, "macro_f1_all": 0.19931852384419554, + "scores": { + "all": { + "accuracy": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.2125866053945616, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.19931852384419554, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9327740860469433, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.21701009331649532, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.20477619736063515, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9361501370706838, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" @@ -254,6 +634,82 @@ } }, "macro_f1_all": 0.09709532327738142, + "scores": { + "all": { + "accuracy": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.11912807276515047, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.09709532327738142, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.5843281036834925, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9381503100112119, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.1233403630154899, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.10055972949058657, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.6772006798687695, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9436554162021304, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" @@ -297,6 +753,82 @@ } }, "macro_f1_all": 0.2366924424645238, + "scores": { + "all": { + "accuracy": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2470742742773393, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.2366924424645238, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9297064107551721, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2514163094253105, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.24287275681309572, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9329194604232633, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" @@ -340,6 +872,82 @@ } }, "macro_f1_all": 0.19747553631500298, + "scores": { + "all": { + "accuracy": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.2113075222535363, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.19747553631500298, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.93232229829798, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.21594007329351536, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.20308773317860726, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.9361858273521857, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" @@ -1321,7 +1929,7 @@ } ], "quality_policy": { - "accuracy": "mini_metrics all.micro_accuracy at each rank; all images", + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", "threshold": 0, "optimal": false, diff --git a/docs/assets/mambo-release-metrics.csv b/docs/assets/mambo-release-metrics.csv new file mode 100644 index 0000000..187a8bc --- /dev/null +++ b/docs/assets/mambo-release-metrics.csv @@ -0,0 +1,49 @@ +model,preset,scope,rank,images,macro_accuracy,macro_precision,macro_recall,macro_f1,micro_accuracy,theilU,coverage +v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v3,north_europe,all,species,58640,0.7123671759291879,0.26361186496219735,0.7123671759291879,0.25450880594788156,0.7078956343792633,0.9282973331913745,1.0 +v3,north_europe,all,genus,58640,0.8054070319557569,0.31882230287858776,0.8054070319557569,0.3207725301986971,0.7936732605729877,0.927078119536916,1.0 +v3,north_europe,all,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +v3,north_europe,known,species,50598,0.734892620227344,0.2677964216559137,0.734892620227344,0.2609164468790569,0.8204079212617099,0.9313037775676971,1.0 +v3,north_europe,known,genus,58639,0.8079160881300739,0.31884970853060046,0.8079160881300739,0.3212438169069074,0.7936867954774126,0.9270916152069156,1.0 +v3,north_europe,known,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +v3,europe,all,species,58640,0.6906121581308468,0.2125866053945616,0.6906121581308468,0.19931852384419554,0.6894952251023192,0.9327740860469433,1.0 +v3,europe,all,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +v3,europe,all,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +v3,europe,known,species,50598,0.7124496967278696,0.21701009331649532,0.7124496967278696,0.20477619736063515,0.7990829677062334,0.9361501370706838,1.0 +v3,europe,known,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +v3,europe,known,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +v3,full,all,species,58640,0.5802757153882665,0.11912807276515047,0.5802757153882665,0.09709532327738142,0.5843281036834925,0.9381503100112119,1.0 +v3,full,all,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +v3,full,all,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +v3,full,known,species,50598,0.5986243546100299,0.1233403630154899,0.5986243546100299,0.10055972949058657,0.6772006798687695,0.9436554162021304,1.0 +v3,full,known,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +v3,full,known,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +v3,north_europe_v3,all,species,58640,0.7049027989956338,0.2470742742773393,0.7049027989956338,0.2366924424645238,0.703206002728513,0.9297064107551721,1.0 +v3,north_europe_v3,all,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +v3,north_europe_v3,all,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +v3,north_europe_v3,known,species,50598,0.7271922155646657,0.2514163094253105,0.7271922155646657,0.24287275681309572,0.8149729238309814,0.9329194604232633,1.0 +v3,north_europe_v3,known,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +v3,north_europe_v3,known,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +v3,europe_v3,all,species,58640,0.6887822210592908,0.2113075222535363,0.6887822210592908,0.19747553631500298,0.6880627557980901,0.93232229829798,1.0 +v3,europe_v3,all,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +v3,europe_v3,all,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +v3,europe_v3,known,species,50598,0.7105618960334976,0.21594007329351536,0.7105618960334976,0.20308773317860726,0.7974228230364837,0.9361858273521857,1.0 +v3,europe_v3,known,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +v3,europe_v3,known,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 diff --git a/docs/assets/mambo-release-preset-delta.svg b/docs/assets/mambo-release-preset-delta.svg index 9f45aa4..48148ba 100644 --- a/docs/assets/mambo-release-preset-delta.svg +++ b/docs/assets/mambo-release-preset-delta.svg @@ -1,7 +1,7 @@ - + @@ -20,37 +20,37 @@ - - - +" clip-path="url(#pe7171a3992)" style="fill: #168b89"/> - +" clip-path="url(#pe7171a3992)" style="fill: #168b89"/> @@ -61,65 +61,65 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - −0.6 + −0.8 - + - −0.4 + −0.6 - + - −0.2 + −0.4 - + - 0.0 + −0.2 - + - 0.2 + 0.0 - + - 0.4 + 0.2 - Micro species accuracy change (percentage points) + Updated minus legacy (percentage points) @@ -131,57 +131,200 @@ L -3.5 0 " style="stroke: #000000; stroke-width: 0.8"/> - + - Northern Europe + Northern Europe - + - Europe + Europe - + - - - -0.47 pp (70.79% → 70.32%) + -0.75 pp - -0.14 pp (68.95% → 68.81%) + -0.18 pp - V3 updated lists: small accuracy trade-offs on Flemming + Macro species accuracy - - Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope. - All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming. + + + + + + + + + + + + + + + + + + + −0.8 + + + + + + + + + + −0.6 + + + + + + + + + + −0.4 + + + + + + + + + + −0.2 + + + + + + + + + + 0.0 + + + + + + + + + + 0.2 + + + + Updated minus legacy (percentage points) + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + + + + + -0.47 pp + + + -0.14 pp + + + Micro species accuracy + + + + V3 updated lists: accuracy trade-offs on Flemming + + + Northern Europe adds 222 candidate species; Europe adds 72. No removals. Choose lists by geographic scope. + All 58,640 images; threshold 0, no optimization. Both backends agree; filters were not tuned to Flemming. - - + + + + + diff --git a/docs/assets/mambo-release-quality.svg b/docs/assets/mambo-release-quality.svg index 9aa9bad..832de4d 100644 --- a/docs/assets/mambo-release-quality.svg +++ b/docs/assets/mambo-release-quality.svg @@ -170,54 +170,54 @@ L 421.07 75.48 - Correct predictions (%) + Mean class accuracy (%) @@ -232,25 +232,25 @@ L 421.07 243.02 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 68.71 + 68.52 - 66.96 + 66.04 - 59.36 + 57.21 - 70.79 + 71.24 - 68.95 + 69.06 - 58.43 + 58.03 - Species micro accuracy · all images + Species macro accuracy · all truth classes @@ -654,54 +654,54 @@ L 421.07 286.98 - Correct predictions (%) + Mean class accuracy (%) @@ -716,25 +716,25 @@ L 421.07 454.52 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 79.23 + 78.90 - 77.64 + 77.29 - 72.85 + 71.68 - 79.37 + 80.54 - 77.94 + 79.28 - 70.58 + 71.34 - Genus micro accuracy · all images + Genus macro accuracy · all truth classes @@ -870,54 +870,54 @@ L 849.295625 286.98 - Correct predictions (%) + Mean class accuracy (%) @@ -932,25 +932,25 @@ L 849.295625 454.52 " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> - 94.49 + 84.40 - 94.23 + 83.54 - 92.65 + 80.70 - 92.98 + 81.06 - 92.86 + 80.62 - 90.31 + 78.51 - Family micro accuracy · all images + Family macro accuracy · all truth classes diff --git a/docs/assets/mambo-release-species-all.svg b/docs/assets/mambo-release-species-all.svg new file mode 100644 index 0000000..0b5be49 --- /dev/null +++ b/docs/assets/mambo-release-species-all.svg @@ -0,0 +1,1370 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.274 + + + 0.220 + + + 0.110 + + + 0.264 + + + 0.213 + + + 0.119 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro recall + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.687 + + + 0.670 + + + 0.594 + + + 0.708 + + + 0.689 + + + 0.584 + + + Micro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.926 + + + 0.930 + + + 0.942 + + + 0.928 + + + 0.933 + + + 0.938 + + + Theil U + + + + Species baseline · all Flemming truth + + + Pinned mini_metrics · threshold 0 · no optimization · 58,640 images + Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. Coverage is 1.0; full rank tables supplied. + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-release-species-known.svg b/docs/assets/mambo-release-species-known.svg new file mode 100644 index 0000000..3f2bca1 --- /dev/null +++ b/docs/assets/mambo-release-species-known.svg @@ -0,0 +1,1370 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.279 + + + 0.225 + + + 0.113 + + + 0.268 + + + 0.217 + + + 0.123 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro recall + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.265 + + + 0.205 + + + 0.092 + + + 0.261 + + + 0.205 + + + 0.101 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.796 + + + 0.776 + + + 0.688 + + + 0.820 + + + 0.799 + + + 0.677 + + + Micro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.928 + + + 0.932 + + + 0.947 + + + 0.931 + + + 0.936 + + + 0.944 + + + Theil U + + + + Species baseline · truth within active vocabulary + + + Pinned mini_metrics · threshold 0 · no optimization · 50,598 images + Macro accuracy/recall: truth classes. Precision: predicted classes. F1: their union. Coverage is 1.0; full rank tables supplied. + + + + + + + MAMBO v2 + + + + + + MAMBO v3 (both backends) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-batch-scaling.md b/docs/mambo-batch-scaling.md new file mode 100644 index 0000000..86d7af4 --- /dev/null +++ b/docs/mambo-batch-scaling.md @@ -0,0 +1,106 @@ +# Why MAMBO v3 batch throughput plateaus + +The plateau comes from **serial, allocation-heavy CPU preprocessing plus a strict +FP32 convolutional backend that gains little throughput beyond batch 8**. It is +not a batch-size parameter being ignored. Forward hooks observed exactly +`[1,3,384,384]`, `[8,3,384,384]` and `[32,3,384,384]` at the native model boundary. +The released speed charts remain unchanged; the following interventions explain +them and are not new qualified release variants. + +## CPU cause: the release image adapter + +The NumPy preprocessor executes one image at a time before calling the GPU. Its +advanced indexing produces non-contiguous arrays, and `float32 coordinates - +int64 indices` promotes interpolation weights and intermediate images to float64. +It interpolates the entire 438×438 image before discarding its border for the +384×384 crop. The row/column interpolation and normalization dominate the CPU +profile; decoding accounts for only about 30 ms of a 602 ms batch-32 profile. +Increasing the batch size cannot amortize this per-image work. + +A controlled, single-thread intervention retained the arithmetic and verified +byte-identical prepared pixels for all 32 benchmark images. Three sweeps with +reversed middle ordering and seven observations per condition gave: + +| Preparation of 32 images | Median time | +|---|---:| +| Current implementation | 562 ms | +| Make intermediate arrays contiguous | 344 ms | +| Compute only the retained crop | 526 ms | +| Both interventions | 300 ms | + +A separate diagnostic with the **original** pixel function and eight preparation +workers reduced measured end-to-end native batch-32 time from 753 to 361 ms +(42.5 → 88.7 images/s). Four workers reached 398 ms. Those single-process, +seven-observation interventions demonstrate causality, not a replacement for the +three-fresh-process release benchmark. Results are hardware-dependent. Preprocessing +and inference still do not overlap in this probe. + +## GPU cause: FP32 backbone work, not hierarchy or silent CPU execution + +With inputs already resident on the GPU, the same model at the same resolution +was tested with TF32 disabled. These are medians across three sweeps × seven +observations, with the middle order reversed: + +| Diagnostic native mode | Batch 1, images/s | Batch 8, images/s | Batch 32, images/s | +|---|---:|---:|---:| +| Release FP32 / NCHW | 53.4 | 162.7 | 177.6 | +| FP16 autocast / NCHW | 39.9 | 310.2 | 371.4 | +| FP32 / channels-last | 51.3 | 134.0 | 137.6 | +| FP16 autocast / channels-last | 39.5 | 293.4 | 418.4 | + +Batch 8 already captures most of the FP32 throughput benefit. At batch 32, CUDA +kernel durations are approximately **63.6% convolution, 14.2% batch normalization +and 12.3% SiLU**. The final classifier matrix multiplication is about 0.15% of +kernel time. Reducing hierarchy work or changing class lists cannot explain away +the backbone plateau. Memory-layout changes alone do not fix it. The controlled +precision change more than doubles large-batch throughput; FP16 can still be +slower at batch 1 because launch/cast overhead remains. + +ONNX placement traces confirm convolution runs on CUDA at batches 1, 8 and 32. +Small `Acos` and `Concat` nodes run on CPU; this is not a silent CPU backbone +fallback. Their host-side node durations are not GPU kernel durations and should +not be read as a GPU utilization breakdown. + +V2 uses a different backbone at 224 pixels with CUDA autocast; v3 uses 384 pixels +and strict FP32. These released choices, plus the adapter's CPU work, explain why +v3 does not inherit v2's batching curve. The evidence localizes the bottleneck to +feature-map operations and demonstrates a precision effect; it does **not** +establish a hardware-counter distinction between arithmetic and memory bandwidth +limits. Profiler overhead and laptop clock variation are why unprofiled timings +and reversed-order interventions are reported separately. + +## Next implementation step + +Prioritize pixel-preserving contiguous/crop preparation, then bounded workers and +CPU/GPU overlap. Qualify exact inputs on the larger retained image subset and +array-input edge cases, then rerun fresh-process end-to-end timings. These adapter +changes can stay on the release branch. Any shared-core optimization belongs on a +feature/fix branch and must be merged through the established release workflow. + +FP16 is a separate numerical/runtime variant, not quantization, but is diagnostic +only here. It needs task-level quality and deployment qualification before becoming +a supported option. The current PyTorch/ONNX FP32 baseline remains available. + +## Reproduce + +[Compact diagnostic evidence](assets/mambo-batch-diagnosis.json) records timings, +shapes, array layouts, kernel attribution and raw evidence hashes. Large traces and +private sample paths stay under `local-evidence/mambo-batch-root-cause/`. +Run these sequentially, with no competing benchmark workload: + +```sh +CUDA_VISIBLE_DEVICES=0 OMP_NUM_THREADS=4 MKL_NUM_THREADS=4 OPENBLAS_NUM_THREADS=1 \ + .venv/bin/python -m dev.releases.mambo_v3.profile_batch_scaling \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --output /path/to/new-diagnosis + +python -m dev.releases.mambo_v3.profile_preprocessing \ + --evidence /path/to/new-diagnosis --root /path/to/flemming +python -m dev.releases.mambo_v3.probe_preprocessing \ + --evidence /path/to/new-diagnosis --root /path/to/flemming +# Use the qualified ONNX CUDA environment for this command: +python -m dev.releases.mambo_v3.profile_onnx_batch \ + --evidence /path/to/new-diagnosis --root /path/to/flemming --bundle /path/to/bundle +python -m dev.releases.mambo_v3.summarize_batch_scaling \ + --evidence /path/to/new-diagnosis --output /path/to/diagnosis.json +``` diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md index b841e0d..3bcd82d 100644 --- a/docs/mambo-release-comparison.md +++ b/docs/mambo-release-comparison.md @@ -10,18 +10,27 @@ ONNX deployment paths. ![Species, genus and family accuracy, plus species macro-F1 for all three lists](assets/mambo-release-quality.svg) -With the northern-Europe list, v3 gains **2.08 percentage points** in species -accuracy (68.71% → 70.79%). Updated northern Europe retains a **1.61-point gain** -over v2. Europe also improves by 1.99 points, while global species accuracy falls -by 0.93 points. Family accuracy falls across all three lists, and regional species -macro-F1 is slightly lower. This is a useful species-level gain in the relevant -regional setting, accompanied by clear trade-offs elsewhere. - -| Preset | v2 species accuracy | v3 species accuracy | Change | -|---|---:|---:|---:| -| Northern Europe | 68.71% | 70.79% | +2.08 pp | -| Europe | 66.96% | 68.95% | +1.99 pp | -| Global | 59.36% | 58.43% | −0.93 pp | +The comparison leads with **macro metrics**: each represented class has equal +weight. Northern-Europe macro species accuracy rises from **68.52% to 71.24%**, +while macro-F1 falls slightly from **0.2575 to 0.2545**. Europe macro accuracy also +improves. Global macro accuracy improves slightly even though micro accuracy falls, +so neither averaging policy alone describes the whole trade-off. + +| Preset | v2 macro accuracy | v3 macro accuracy | v2 macro-F1 | v3 macro-F1 | v2 micro accuracy | v3 micro accuracy | +|---|---:|---:|---:|---:|---:|---:| +| Northern Europe | 68.52% | 71.24% | 0.2575 | 0.2545 | 68.71% | 70.79% | +| Europe | 66.04% | 69.06% | 0.2000 | 0.1993 | 66.96% | 68.95% | +| Global | 57.21% | 58.03% | 0.0899 | 0.0971 | 59.36% | 58.43% | + +The expanded baseline includes **macro accuracy, precision, recall and F1; micro +accuracy; Theil U; and prediction coverage** for every preset, all three ranks and +both all-truth and known-truth populations. The [complete CSV](assets/mambo-release-metrics.csv) +contains 48 rows / 336 scores, including updated European lists. These values are +also retained in the compact chart JSON, not just selected for plotting. + +![Six species metrics over all Flemming truth](assets/mambo-release-species-all.svg) + +![Six species metrics restricted to known truth](assets/mambo-release-species-known.svg) The primary comparison uses identical legacy lists in both releases. Every predictive metric is computed by pinned `mini_metrics` at commit @@ -29,7 +38,8 @@ predictive metric is computed by pinned `mini_metrics` at commit | Display | `metrics.json` source | Averaging and population | |---|---|---| -| Species/genus/family accuracy | `all.micro_accuracy["0"/"1"/"2"]` | Micro: each of the 58,640 images has equal weight | +| Lead species/genus/family accuracy | `all.accuracy["0"/"1"/"2"]` | Macro: equal weight per ground-truth class | +| Additional micro accuracy | `all.micro_accuracy[rank]` | Equal weight per image | | Species macro-F1 | `all.f1["0"]` | Equal weight over the union of true and predicted species | | Known-truth accuracy | `known.micro_accuracy[rank]` | Micro, restricted to truth in the active preset vocabulary | @@ -42,9 +52,12 @@ species denominator is 50,598 images from 506 species for every compared list. Known membership is determined separately at each taxonomic rank. The plain `accuracy` field in this mini_metrics revision is **macro** accuracy; -we explicitly extract `micro_accuracy`. Both macro accuracy and known-only metrics +we explicitly extract both `accuracy` and `micro_accuracy`. Known-only metrics are retained in the metric files. The original direct CSV accuracy calculation has been replaced by mini_metrics; recomputation leaves the reported values unchanged. +Macro precision averages predicted classes; macro recall averages truth classes. +At threshold zero, macro accuracy equals macro recall. Theil U is the pinned +package's information-based association score and is not interchangeable with accuracy. Macro-F1 includes species predicted despite having no ground-truth images, but excludes species with neither truth nor predictions. Thus its class denominator can @@ -99,17 +112,11 @@ separate these boundaries: | ONNX | 8 | 134.5 | 50.6 | 42.8 | | ONNX | 32 | 559.4 | 180.6 | 42.4 | -These are separately timed medians, not additive profiler spans. The prepared -boundary includes transfers and completed CPU leaf scores, excluding decoding and -hierarchy reduction. CPU preparation accounts for roughly 72–74% of end-to-end -batch-32 time. The prepared backend also shows little throughput gain beyond batch -8, so preprocessing alone does not explain the entire plateau. Kernel profiling -would be needed to explain that remaining hardware/runtime behavior; these data do -not establish a specific GPU bottleneck. - -A useful next optimization is to qualify parallel image preparation and overlap -with inference while preserving exact input values. The current end-to-end figures -remain the measured release behavior; they are not GPU-only throughput claims. +These are separately timed medians, not additive profiler spans. Targeted profiling +and controlled interventions now identify the causes: non-contiguous, partly +float64 CPU interpolation, plus the FP32 backbone's large-batch throughput plateau. +The [batch-scaling diagnosis](mambo-batch-scaling.md) includes exact shape checks, +CUDA/ONNX placement evidence, pixel-preserving interventions and the next fixes. ## Memory and startup @@ -141,7 +148,8 @@ Keep a predictor alive across requests to amortize loading. CPU sweeps use batch ![Accuracy changes from legacy to updated European presets](assets/mambo-release-preset-delta.svg) Updated northern Europe adds 222 candidate species, and updated Europe adds 72, -with no removals. Their Flemming species accuracies are 70.32% and 68.81%, compared +with no removals. Macro species accuracy changes from **71.24% to 70.49%** for +northern Europe and **69.06% to 68.88%** for Europe. Their micro species accuracies are 70.32% and 68.81%, compared with 70.79% and 68.95% for the legacy lists. These are small costs for broader occurrence coverage. Species macro-F1 also changes from **0.2545 to 0.2367** for northern Europe, and **0.1993 to 0.1975** for Europe under the pinned policy. diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 61036f7..da07e88 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -602,3 +602,10 @@ startup and warmed inference costs separate. The next-training-run orchestration plan and experimental quantization are not on this release's critical path. Additional OS and clean CUDA installation checks are needed before making broader support claims. + +Batch scaling has been [diagnosed](mambo-batch-scaling.md): serial non-contiguous +NumPy interpolation and the strict FP32 backbone limit throughput. Next qualify +pixel-preserving preparation changes and bounded overlap; retain existing measured +baselines until fresh end-to-end qualification. The broader +[metric baseline](mambo-release-comparison.md) now leads with macro scores and +retains all/known-truth results at every rank. From 128e547a4224b8a12eee8d31346ebae3ddbb6702 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 22:01:52 +0200 Subject: [PATCH 032/221] feat: accelerate deployment with backbone AMP and parallel preparation --- deployment/mambo_deploy/cli.py | 2 + deployment/mambo_deploy/predictor.py | 74 ++++++++---- deployment/mambo_deploy/preprocessing.py | 8 +- dev/releases/mambo_v3/benchmark.py | 18 ++- .../mambo_v3/benchmark_acceleration.py | 67 +++++++++++ dev/releases/mambo_v3/evaluate.py | 11 +- dev/releases/mambo_v3/qualify_precision.py | 106 ++++++++++++++++++ dev/releases/mambo_v3/run_local.py | 2 + tests/releases/test_deployment.py | 74 +++++++++++- 9 files changed, 333 insertions(+), 29 deletions(-) create mode 100644 dev/releases/mambo_v3/benchmark_acceleration.py create mode 100644 dev/releases/mambo_v3/qualify_precision.py diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py index 76bdb79..a39a5e8 100644 --- a/deployment/mambo_deploy/cli.py +++ b/deployment/mambo_deploy/cli.py @@ -20,6 +20,7 @@ def run(default_backend="onnx", default_device="cpu"): parser.add_argument("--class-list") parser.add_argument("--batch-size", type=int, default=8) parser.add_argument("--threads", type=int, default=2) + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="auto") parser.add_argument("--topk", type=int, default=1) parser.add_argument("--threshold", type=float, default=0) parser.add_argument("--embeddings", action="store_true") @@ -49,6 +50,7 @@ def run(default_backend="onnx", default_device="cpu"): class_list=args.class_list, batch_size=args.batch_size, threads=args.threads, + precision=args.precision, ) result = predictor.predict_with_embeddings(paths, args.topk) if args.embeddings else predictor.predict(paths, args.topk) if args.embeddings: diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 3a33f2b..0eccd15 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -4,6 +4,8 @@ import os import re import threading +from concurrent.futures import ThreadPoolExecutor +from contextlib import nullcontext from itertools import islice from pathlib import Path @@ -27,6 +29,7 @@ def __init__( weights=None, batch_size=8, threads=2, + precision="auto", ): if backend not in ("torch", "onnx"): raise ValueError("backend must be 'torch' or 'onnx'") @@ -34,6 +37,18 @@ def __init__( raise ValueError("device must be cpu, cuda or cuda:N") if not isinstance(batch_size, int) or batch_size < 1 or not isinstance(threads, int) or threads < 1: raise ValueError("batch_size and threads must be positive integers") + if precision not in ("auto", "fp32", "fp16", "bf16", "tf32"): + raise ValueError("precision must be auto, fp32, fp16, bf16 or tf32") + self.precision = precision + self.effective_precision = precision + if precision == "auto": + self.effective_precision = ("fp16" if backend == "torch" else "tf32") if str(device).startswith("cuda") else "fp32" + if self.effective_precision != "fp32" and device == "cpu": + raise ValueError("CPU inference requires auto or fp32 precision") + if backend == "onnx" and self.effective_precision not in ("fp32", "tf32"): + raise ValueError("Standard ONNX supports fp32 or CUDA tf32; fp16/bf16 autocast requires the torch backend") + if backend == "torch" and self.effective_precision == "tf32": + raise ValueError("tf32 is an ONNX CUDA option; use fp16, bf16 or fp32 for torch") if class_list is not None and class_mask is not None: raise ValueError("class_list and class_mask are mutually exclusive") if weights is not None and model is not None: @@ -152,7 +167,13 @@ def _onnx(self, images, embeddings): if hasattr(ort, "preload_dlls"): ort.preload_dlls() providers = [ - ("CUDAExecutionProvider", {"device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0, "use_tf32": 0}), + ( + "CUDAExecutionProvider", + { + "device_id": int(self.device.split(":")[-1]) if ":" in self.device else 0, + "use_tf32": int(self.effective_precision == "tf32"), + }, + ), "CPUExecutionProvider", ] session = ort.InferenceSession(str(path), sess_options=options, providers=providers) @@ -169,12 +190,17 @@ def _torch(self, images, embeddings): import torch from mini_trainer.builders import BaseBuilder + from mini_trainer.modeling.classifier import bypass_submodule except ImportError as error: raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error if self._torch_model is None: path = self.weights or self.bundle.profile("torch") if self.device != "cpu" and not torch.cuda.is_available(): raise RuntimeError("PyTorch CUDA is unavailable; explicitly choose device='cpu' or install/configure CUDA") + if self.effective_precision == "bf16": + with torch.cuda.device(self.device): + if not torch.cuda.is_bf16_supported(including_emulation=False): + raise RuntimeError("BF16 requires native device support; choose fp16 or fp32") # Full local state and pretrained=False prevent constructor downloads. state = torch.load(str(path), map_location="cpu", weights_only=True) self._torch_model, _ = BaseBuilder.build_model( @@ -182,30 +208,37 @@ def _torch(self, images, embeddings): ) self._torch_model.to(self.device).eval() head = self._torch_model.classifier - captured = [] - hook = head.register_forward_pre_hook(lambda module, args: captured.append(args[0])) if embeddings else None - try: - with torch.inference_mode(): - output = self._torch_model(torch.from_numpy(images).to(self.device)) - # Matches the existing embedding graph: one backbone pass, eval preclassification stage. - embedding = head.preclassification(captured[0]).cpu().numpy() if embeddings else None - return output[0].cpu().numpy(), embedding - finally: - if hook is not None: - hook.remove() + device_type = self.device.split(":")[0] + amp = self.effective_precision in ("fp16", "bf16") + dtype = torch.bfloat16 if self.effective_precision == "bf16" else torch.float16 + with torch.inference_mode(): + # Use the existing backbone boundary; keep the complete head in FP32. + with ( + torch.autocast(device_type, dtype=dtype, enabled=amp), + bypass_submodule(self._torch_model, self._torch_model._backbone_output_name), + ): + features = self._torch_model(torch.from_numpy(images).to(self.device)) + with torch.autocast(device_type, enabled=False): + features = features.float() + output = head(features) + embedding = head.preclassification(features).cpu().numpy() if embeddings else None + return output[0].float().cpu().numpy(), embedding def _predict(self, x, embeddings=False, topk=1): with self._lock: leaf_batches, embedding_batches = [], [] items = image_items(x) - while batch := list(islice(items, self.batch_size)): - images = np.stack([preprocess(item) for item in batch]) - leaves, vectors = self._torch(images, embeddings) if self.backend == "torch" else self._onnx(images, embeddings) - if not np.isfinite(leaves).all(): - raise RuntimeError("Model returned non-finite species scores") - leaf_batches.append(leaves) - if embeddings: - embedding_batches.append(vectors) + with ThreadPoolExecutor(max_workers=self.threads) if self.threads > 1 else nullcontext(None) as pool: + while batch := list(islice(items, self.batch_size)): + images = np.stack( + list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch] + ) + leaves, vectors = self._torch(images, embeddings) if self.backend == "torch" else self._onnx(images, embeddings) + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + leaf_batches.append(leaves) + if embeddings: + embedding_batches.append(vectors) if not leaf_batches: raise ValueError("No images supplied") raw, labels, mappings = hierarchy(np.concatenate(leaf_batches), self.selected, self.bundle.classes) @@ -218,6 +251,7 @@ def _predict(self, x, embeddings=False, topk=1): backend=self.backend, preset=self.preset, class_list_sha256=self.class_list_sha256, + precision=self.effective_precision, ) return (result, np.concatenate(embedding_batches)) if embeddings else result diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index d962343..dac8c69 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -51,16 +51,18 @@ def preprocess(item): size, resized = 384, 438 yy = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[1] / size)).astype(int), image.shape[1] - 1) xx = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[2] / size)).astype(int), image.shape[2] - 1) - image = image[:, yy][:, :, xx].astype(np.float32) + image = np.ascontiguousarray(image[:, yy][:, :, xx], dtype=np.float32) # Upsampling uses a bilinear support of one pixel (no downsampling antialias filter). coordinates = np.maximum((np.arange(resized, dtype=np.float32) + 0.5) * np.float32(size / resized) - 0.5, 0) + offset = (resized - size) // 2 + coordinates = coordinates[offset : offset + size] lo = np.floor(coordinates).astype(int) hi = np.minimum(lo + 1, size - 1) fraction = coordinates - lo rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None] + rows = np.ascontiguousarray(rows) pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :] - offset = (resized - size) // 2 - pixels = np.rint(pixels[:, offset : offset + size, offset : offset + size]).astype(np.float32) / 255 + pixels = np.ascontiguousarray(np.rint(pixels).astype(np.float32) / 255) return np.ascontiguousarray( (pixels - np.array(RECIPE["mean"], dtype=np.float32)[:, None, None]) / np.array(RECIPE["std"], dtype=np.float32)[:, None, None] ) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 335eb81..440b595 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -110,7 +110,8 @@ def benchmark(args): "manifest_sha256": file_hash(args.manifest), "cells": [], "boundaries": { - "end_to_end": "image path through CPU result/embedding; decode/preprocess/transfer/reduction included", + "end_to_end": "image path through CPU result/embedding; threaded decode/preprocess/transfer/reduction included", + "preprocessing": "serial preparation diagnostic; public API uses threads for batches", "prepared": "preprocessed CPU tensor through CPU leaf scores/embeddings; transfers included; no decode or reduction", "cold": "first image after Predictor construction; lazy model/session load included; runtime import/config measured separately", }, @@ -120,7 +121,19 @@ def benchmark(args): report["samples"] = records t = time.perf_counter() predictor = Predictor( - args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads, batch_size=max(args.batches) + args.bundle, + backend=args.backend, + device=args.device, + model="full", + threads=args.threads, + batch_size=max(args.batches), + precision=args.precision, + ) + report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", ) report["constructor_seconds"] = time.perf_counter() - t paths = [args.root / r["path"] for r in records] @@ -178,6 +191,7 @@ def main(): parser.add_argument(f"--{name}", type=Path, required=True) parser.add_argument("--backend", choices=["torch", "onnx"], required=True) parser.add_argument("--device", default="cpu") + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") parser.add_argument("--embeddings", action="store_true") parser.add_argument("--threads", type=int, default=4) parser.add_argument("--batches", nargs="+", type=int, default=[1, 8, 32]) diff --git a/dev/releases/mambo_v3/benchmark_acceleration.py b/dev/releases/mambo_v3/benchmark_acceleration.py new file mode 100644 index 0000000..221976c --- /dev/null +++ b/dev/releases/mambo_v3/benchmark_acceleration.py @@ -0,0 +1,67 @@ +"""Fresh-process CPU/GPU timings for the qualified automatic deployment settings.""" + +import argparse +import json +import os +import subprocess +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + report = {"status": "running", "completed": [], "commands": []} + shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + variants = [(backend, device) for device in ("cuda:0", "cpu") for backend in ("torch", "onnx")] + env = dict(os.environ, CUDA_VISIBLE_DEVICES="0", OMP_NUM_THREADS="4", MKL_NUM_THREADS="4", OPENBLAS_NUM_THREADS="1", PYTHONHASHSEED="0") + try: + for trial in range(3): + for backend, device in variants if trial != 1 else reversed(variants): + name = f"trial-{trial}-{backend}-{device.replace(':', '-')}" + command = [ + str(args.python), + "-m", + "dev.releases.mambo_v3.benchmark", + *shared, + "--backend", + backend, + "--device", + device, + "--precision", + "auto", + "--threads", + "4", + "--presets", + "north_europe", + "europe", + "full", + "--batches", + "1", + "8", + ] + if device != "cpu": + command += ["32"] + command += ["--output", str((args.output / name).resolve())] + report["commands"].append(command) + write_json(args.output / "plan.json", report) + print(name, flush=True) + with (args.output / f"{name}.log").open("w") as stream: + subprocess.run(command, env=env, stdout=stream, stderr=subprocess.STDOUT, check=True) + if json.loads((args.output / name / "report.json").read_text())["status"] != "complete": + raise ValueError("Incomplete trial") + report["completed"].append(name) + write_json(args.output / "plan.json", report) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "plan.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("python", "bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 46dd9b0..9275d97 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -57,7 +57,15 @@ def collect(args): report.update(samples=len(records), species=len({r["labels"][0] for r in records}), dataset=manifest["dataset"]) write_json(output / "samples.json", records) report["sample_ids_sha256"] = file_hash(output / "samples.json") - predictor = Predictor(args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads) + predictor = Predictor( + args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads, precision=args.precision + ) + report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", + ) selectors = {name: Predictor(args.bundle, model=name).selected for name in args.presets} # A preset supplied as a custom list must produce the same mask/order. custom = Predictor(args.bundle, class_list=predictor.bundle.file(predictor.bundle.regions["europe_v3"]["path"])) @@ -142,6 +150,7 @@ def main(): run.add_argument(f"--{name}", type=Path, required=True) run.add_argument("--backend", choices=["torch", "onnx"], required=True) run.add_argument("--device", default="cpu") + run.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") run.add_argument("--embeddings", action="store_true") run.add_argument("--count", type=int) run.add_argument("--seed", type=int, default=20260923) diff --git a/dev/releases/mambo_v3/qualify_precision.py b/dev/releases/mambo_v3/qualify_precision.py new file mode 100644 index 0000000..05538e1 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_precision.py @@ -0,0 +1,106 @@ +"""Bounded precision qualification: existing weights, all presets, FP32 output contracts.""" + +import argparse +import csv +import importlib.util +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluate import prepare_batch, runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, write_json + + +def qualify(args): + args.output.mkdir(parents=True, exist_ok=False) + runtime_settings(4, args.backend) + _, records = load_records(args.manifest, args.root, args.count, 20260923) + write_json(args.output / "samples.json", records) + report = {"status": "running", "variants": {}, "samples_sha256": file_hash(args.output / "samples.json")} + shared = None + try: + paths = [args.root / r["path"] for r in records] + if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + if args.old_preprocessing: + spec = importlib.util.spec_from_file_location("old_recipe", args.old_preprocessing) + old = importlib.util.module_from_spec(spec) + spec.loader.exec_module(old) + for path in paths[:256]: + np.testing.assert_array_equal(preprocess(path), old.preprocess(path)) + report["preprocessing_exact_images"] = min(256, len(paths)) + for precision in args.precisions: + start = time.perf_counter() + predictor = Predictor( + args.bundle, backend=args.backend, device="cuda:0", model="full", batch_size=32, threads=4, precision=precision + ) + if shared is not None: + predictor._torch_model = shared + runtime = predictor._torch if args.backend == "torch" else predictor._onnx + with ThreadPoolExecutor(max_workers=4) as pool: + outputs, vectors = [], [] + for offset in range(0, len(paths), 32): + x = prepare_batch(paths[offset : offset + 32], pool) + leaves, embedding = runtime(x, True) + assert leaves.dtype == embedding.dtype == np.float32 + assert embedding.shape == (len(x), 1280) + assert np.isfinite(leaves).all() and np.isfinite(embedding).all() + np.testing.assert_allclose(np.linalg.norm(embedding, axis=1), 1, atol=1e-4) + if offset < 256: + plain, _ = runtime(x, False) + np.testing.assert_array_equal(np.argmax(plain, axis=1), np.argmax(leaves, axis=1)) + outputs.append(leaves) + vectors.append(embedding) + raw = np.concatenate(outputs) + destination = args.output / precision + destination.mkdir() + np.save(destination / "embeddings.npy", np.concatenate(vectors), allow_pickle=False) + for preset in PRESETS: + selector = Predictor(args.bundle, model=preset) + result = Prediction(*hierarchy(raw, selector.selected, selector.bundle.classes)) + folder = destination / preset + folder.mkdir() + with (folder / "mini_metric.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerows(canonical_rows(records, result)) + # Public API, custom-list filtering, threaded preparation and embedding path. + predictor._apply_class_mask(selector.class_list[:3]) + public, embedding = predictor.predict_with_embeddings(paths[:8]) + assert all(item.label[0] in selector.class_list[:3] for item in public) + assert public.labels == predictor.predict(paths[:8]).labels + _, direct_embedding = runtime(prepare_batch(paths[:8]), True) + np.testing.assert_array_equal(embedding, direct_embedding) + shared = predictor._torch_model + report["variants"][precision] = { + "seconds": time.perf_counter() - start, + "finite": True, + "embedding_dtype": "float32", + "prediction_modes_agree_first256": True, + "custom_list": True, + } + write_json(args.output / "report.json", report) + print(precision, report["variants"][precision], flush=True) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--old-preprocessing", type=Path) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + parser.add_argument("--precisions", nargs="+", required=True) + parser.add_argument("--count", type=int, default=4096) + qualify(parser.parse_args()) diff --git a/dev/releases/mambo_v3/run_local.py b/dev/releases/mambo_v3/run_local.py index cc63c22..7e58b7a 100644 --- a/dev/releases/mambo_v3/run_local.py +++ b/dev/releases/mambo_v3/run_local.py @@ -13,6 +13,7 @@ def plan(args): shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + shared += ["--precision", args.precision] jobs = [] if args.phase in ("qualification", "full"): variants = ( @@ -78,6 +79,7 @@ def main(): parser.add_argument(f"--{name}", type=Path, required=True) parser.add_argument("--python", type=Path, default=Path(sys.executable)) parser.add_argument("--count", type=int, default=256) + parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") args = parser.parse_args() args.output.mkdir(parents=True, exist_ok=False) jobs = plan(args) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index b620267..9df38a8 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -146,11 +146,12 @@ def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeyp assert isinstance(facade.predict_with_embeddings("unused")[1], torch.Tensor) -def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch): +@pytest.mark.parametrize(("precision", "use_tf32"), [("fp32", 0), ("auto", 1)]) +def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch, precision, use_tf32): import sys from types import SimpleNamespace - predictor = Predictor(bundle, device="cuda:0") + predictor = Predictor(bundle, device="cuda:0", precision=precision) monkeypatch.setattr(predictor.bundle, "profile", lambda key: bundle / "unused.onnx") captured = {} @@ -169,4 +170,71 @@ def session(path, sess_options, providers): ) with pytest.raises(RuntimeError, match="refusing CPU-only fallback"): predictor._onnx(np.zeros((1, 3, 384, 384), dtype=np.float32), False) - assert captured["providers"][0][1]["use_tf32"] == 0 + assert captured["providers"][0][1]["use_tf32"] == use_tf32 + + +@pytest.mark.parametrize( + ("shape", "digest"), + [ + ((1, 1, 1), "8c0b08b2c1ddc4350fd94ea23ee0365375dae88f5cc5fa0af327ea2b35328931"), + ((3, 2, 17), "cb8727ae82ff291103261fd12beb8cf81febaf8b449e74a7e33218d59558cc71"), + ((3, 17, 2), "f5c44cb3c3481437b552831337baf880ac7b16017b567e199c5e219e488d23e7"), + ((3, 383, 385), "9f33596b74bd0cf7c284ae0ed4bbede8b206724c2d8ee72dbff735bf4e5fe49e"), + ((3, 440, 590), "37954851c9b8d10fcded680ec586885a8dcf8ffac5d7abc94d001b5245a0357a"), + ((4, 24, 15), "e4dfd0c4a4174cd6d4913b1bf4f88bfd8c82a21802ec0d006e12594995bb1d64"), + ], +) +def test_preprocessing_preserves_frozen_release_pixels(shape, digest): + array = np.random.default_rng(19).integers(0, 256, size=shape, dtype=np.uint8) + value = preprocess(array) + assert value.dtype == np.float32 and value.flags.c_contiguous + assert hashlib.sha256(value.tobytes()).hexdigest() == digest + np.testing.assert_array_equal(value, preprocess(array.astype(np.float32) / 255)) + + +def test_precision_defaults_and_unsupported_combinations(bundle): + assert Predictor(bundle).effective_precision == "fp32" + assert Predictor(bundle, backend="torch", device="cuda").effective_precision == "fp16" + assert Predictor(bundle, device="cuda").effective_precision == "tf32" + assert Predictor(bundle, device="cuda", precision="fp32").effective_precision == "fp32" + for kwargs in ( + {"precision": "fp16"}, + {"device": "cuda", "precision": "bf16"}, + {"backend": "torch", "device": "cuda", "precision": "tf32"}, + ): + with pytest.raises(ValueError): + Predictor(bundle, **kwargs) + + +def test_native_fp32_head_and_embeddings_override_outer_autocast(bundle): + import torch + + class Head(torch.nn.Module): + def preclassification(self, values): + assert values.dtype == torch.float32 + assert not torch.is_autocast_enabled("cpu") + return torch.nn.functional.normalize(values, dim=-1) + + def forward(self, values): + return [self.preclassification(values)] + + class Model(torch.nn.Module): + _backbone_output_name = "classifier" + + def __init__(self): + super().__init__() + self.backbone = torch.nn.Linear(4, 3) + self.classifier = Head() + + def forward(self, x): + return self.classifier(self.backbone(x)) + + predictor = Predictor(bundle, backend="torch", precision="fp32") + predictor._torch_model = Model().eval() + original = predictor._torch_model.classifier + values = np.ones((2, 4), dtype=np.float32) + with torch.autocast("cpu", dtype=torch.bfloat16): + scores, embeddings = predictor._torch(values, True) + assert scores.dtype == embeddings.dtype == np.float32 + assert predictor._torch_model.classifier is original + np.testing.assert_array_equal(scores, embeddings) From d5d40d4578e4a36442f922c7d4d420bc600564c6 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Wed, 23 Sep 2026 22:32:36 +0200 Subject: [PATCH 033/221] docs: qualify accelerated MAMBO deployment defaults --- deployment/README.md | 65 +- dev/releases/mambo_v3/acceleration_report.py | 288 ++ dev/releases/mambo_v3/evaluation.md | 8 + docs/assets/mambo-accelerated-comparison.json | 3479 +++++++++++++++++ docs/assets/mambo-accelerated-memory.svg | 484 +++ docs/assets/mambo-accelerated-metrics.csv | 109 + docs/assets/mambo-accelerated-quality-all.svg | 1224 ++++++ .../mambo-accelerated-quality-known.svg | 1224 ++++++ docs/assets/mambo-accelerated-speed.svg | 1240 ++++++ docs/mambo-accelerated-deployment.md | 162 + docs/mambo-batch-scaling.md | 5 + docs/mambo-release-comparison.md | 4 + docs/ucloud-model-release-roadmap.md | 9 +- 13 files changed, 8273 insertions(+), 28 deletions(-) create mode 100644 dev/releases/mambo_v3/acceleration_report.py create mode 100644 docs/assets/mambo-accelerated-comparison.json create mode 100644 docs/assets/mambo-accelerated-memory.svg create mode 100644 docs/assets/mambo-accelerated-metrics.csv create mode 100644 docs/assets/mambo-accelerated-quality-all.svg create mode 100644 docs/assets/mambo-accelerated-quality-known.svg create mode 100644 docs/assets/mambo-accelerated-speed.svg create mode 100644 docs/mambo-accelerated-deployment.md diff --git a/deployment/README.md b/deployment/README.md index f762fb1..bd44d30 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -46,10 +46,18 @@ preparation. `batch_size=8` bounds model batches; returned results remain in mem For native inference, install the matching `mini_trainer` wheel with your chosen PyTorch/CUDA build and use `backend="torch"`. The checkpoint is loaded with `weights_only=True`; the architecture is constructed without pretrained downloads. +CUDA PyTorch defaults to FP16 backbone autocast with an FP32 classifier and +FP32 outputs. Set `precision="fp32"` to disable autocast, or +`precision="bf16"` on CUDA devices with native BF16 support. Native inference +respects the caller's PyTorch TF32 backend flags; reference benchmarks disable them. For ONNX CUDA, install `onnxruntime-gpu` instead of the CPU ONNX Runtime package, with its matching CUDA/cuDNN dependencies. Select `device="cuda:0"` explicitly. Unavailable CUDA raises an error rather than silently changing to CPU-only -execution. ONNX CUDA may still place individual unsupported operators on CPU. +execution. ONNX CUDA may still place individual unsupported operators on CPU. Its automatic +precision enables TF32 using the standard FP32 graph; `precision="fp32"` disables +TF32. ONNX FP16/BF16 is not selected by PyTorch autocast. CPU always uses FP32. +The resolved choice is available as `predictor.effective_precision` and in result +metadata; the CLI exposes the same `--precision` option. Portable results use NumPy arrays; embeddings are float32 `[images, 1280]` CPU arrays from the normalized preclassification stage. Prediction-only ONNX uses @@ -84,13 +92,15 @@ mambo_predict -i moth.jpg --bundle /path/to/mambo-bundle --backend onnx --device Directory input recursively discovers images in sorted order. Outputs are `predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. Use `--class-list`, `--batch-size`, `--topk` and `--threads` as needed. `--threads` -controls ONNX CPU threads; native callers configure PyTorch threads. The standalone +bounds parallel image preparation and controls ONNX CPU threads; native callers +configure PyTorch model threads separately. Use `--threads 1` for serial preparation. The standalone wheel defaults to ONNX/CPU; the training-wheel entry point retains native/CUDA defaults, so explicit backend/device arguments are recommended in scripts. ## Qualification -On all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, +In the strict FP32 reference evaluation on all 58,640 Flemming images, PyTorch and +ONNX return identical top-1 species, genus and family labels for the full list and both legacy/updated European presets. Northern Europe reaches **71.24% macro species accuracy** (v2: **68.52%**) and **70.79% micro species accuracy overall** (**82.04%** on images @@ -101,28 +111,33 @@ CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; this checks prediction consistency, not downstream embedding usefulness. On an i7-12800H / RTX 3080 Ti Laptop GPU, with four CPU threads and the legacy -northern-Europe preset, warmed prediction-only measurements were: - -| Runtime | CPU, one image | GPU, one image | GPU, batch 32 | -|---|---:|---:|---:| -| ONNX | 104 ms | 33 ms | 42 images/s | -| PyTorch | 148 ms | 37 ms | 45 images/s | - -These include image preparation and result handling. First prediction including -loading took about 0.38 s CPU / 1.65 s GPU for ONNX, versus 40–42 s for PyTorch; -reuse a loaded predictor. ONNX also used less CPU process memory. Prefer it for -new lightweight integrations; native PyTorch remains suitable for existing callers -and persistent GPU workers. Embedding-mode results, variability, memory and the -Linux/WSL qualification limits are in the [measured report](../docs/mambo-v3-evaluation.md). - -The [v2-versus-v3 charts](../docs/mambo-release-comparison.md) compare quality, -speed and memory for northern Europe, Europe and global, including the advantages -and costs of each released pipeline, with macro metrics leading and full -all/known-truth metric tables. The [batch-scaling diagnosis](../docs/mambo-batch-scaling.md) -identifies serial CPU preparation and FP32 backbone work as the main throughput -limits. V3 uses less host memory and is faster on CPU -(v2 required a documented input cast here); v2 is faster at GPU batch 32. V2 also -retains higher global micro species accuracy and family accuracy across these lists. +northern-Europe preset, the updated defaults deliver: + +| Runtime | CPU, batch 1 | GPU, batch 1 | GPU, batch 8 | GPU, batch 32 | +|---|---:|---:|---:|---:| +| ONNX auto | 10.1 | 46.7 | 114.1 | 111.3 | +| PyTorch auto | 5.7 | 29.8 | 126.7 | 136.2 | + +All speeds are **images per second**, including decoding, preparation and result +handling. GPU batch-32 throughput improves by **2.62× ONNX / 3.06× PyTorch** over +the original v3 FP32 pipeline. CPU gains are not uniform. First prediction including +loading takes about 0.37 s CPU / 1.46 s GPU for ONNX, versus 42–43 s for PyTorch; +reuse a loaded predictor. ONNX uses less host memory and suits lightweight +integrations; native PyTorch suits existing callers and persistent GPU workers. + +Both automatic GPU variants were evaluated on all 58,640 Flemming images. Northern- +Europe macro species accuracy is **71.25% PyTorch / 71.24% ONNX**; macro-F1 is +**0.2543** for both. The largest macro-accuracy change from FP32 across five presets, +three ranks and both truth populations is under 0.094 percentage points. BF16 has +4,096-image qualification only. Small cross-precision label differences are expected. + +The [accelerated comparison and charts](../docs/mambo-accelerated-deployment.md) +cover speed, memory, all/known-truth metrics and updated European lists. The +[original v2/v3 comparison](../docs/mambo-release-comparison.md) preserves the FP32 +reference and explains the metric definitions. V3 improves northern-Europe macro +accuracy over v2, but v2 retains slightly higher macro-F1 there and higher global +micro species accuracy. Choose presets for the deployment region; see the +[preset catalogue](../docs/model-presets.md). The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the reproduction commands and UCloud handoff. In-domain evaluation, other operating diff --git a/dev/releases/mambo_v3/acceleration_report.py b/dev/releases/mambo_v3/acceleration_report.py new file mode 100644 index 0000000..5353b17 --- /dev/null +++ b/dev/releases/mambo_v3/acceleration_report.py @@ -0,0 +1,288 @@ +"""Macro-led quality and complete-pipeline speed for accelerated release defaults.""" + +import argparse +import csv +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.comparison_charts import COLORS, REGION_LABELS, REGIONS, completed +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA + +METRICS = ("accuracy", "precision", "recall", "f1", "micro_accuracy", "theilU", "coverage") + + +def aggregate(args): + reference = json.loads(args.reference.read_text()) + completed(args.quality / "plan.json") + data = { + "reference": reference, + "quality": [], + "speed": [], + "resources": [], + "sources_sha256": {str(args.reference): file_hash(args.reference)}, + } + for backend in ("torch", "onnx"): + folder = args.quality / f"{backend}-cuda-0-prediction" + report = completed(folder / "report.json") + for key in ("bundle_sha256", "manifest_sha256"): + if data.setdefault(key, report[key]) != report[key]: + raise ValueError("Different quality artifacts or manifest") + expected = "fp16" if backend == "torch" else "tf32" + if report["effective_precision"] != expected: + raise ValueError("Unexpected automatic precision") + for preset in (*REGIONS, "north_europe_v3", "europe_v3"): + path = folder / preset / "metrics.json" + metric = json.loads(path.read_text()) + old = next(r for r in reference["quality"] if r["model"] == "v3" and r["preset"] == preset) + if ( + metric["metric_schema"] != METRIC_SCHEMA + or metric["mini_metrics_revision"] != old["metric_revision"] + or file_hash(path.with_name("mini_metric.csv")) != metric["source_sha256"] + or metric["source_sha256"] != report["csv_sha256"][preset] + ): + raise ValueError("Stale metrics") + if old["sample_ids_sha256"] != report["sample_ids_sha256"] or old["list_sha256"] != report["lists"][preset]["sha256"]: + raise ValueError("Changed evaluation population or list") + data["quality"].append( + { + "model": backend, + "precision": expected, + "preset": preset, + "ranks": metric["ranks"], + "scores": {scope: metric[scope] for scope in ("all", "known")}, + } + ) + data["sources_sha256"][str(path)] = file_hash(path) + data["sources_sha256"][str(folder / "report.json")] = file_hash(folder / "report.json") + grouped, resources = defaultdict(list), defaultdict(list) + for name in completed(args.performance / "plan.json")["completed"]: + path = args.performance / name / "report.json" + report = completed(path) + bank = hashlib.sha256(json.dumps(report["samples"], sort_keys=True).encode()).hexdigest() + if bank != reference["timing_bank_sha256"]: + raise ValueError("Different timing image bank") + if any(report[key] != data[key] for key in ("bundle_sha256", "manifest_sha256")): + raise ValueError("Timing and quality artifacts differ") + settings = report["settings"] + if settings["threads"] != 4 or settings["embeddings"]: + raise ValueError("Unexpected benchmark configuration") + backend, device = settings["backend"], settings["device"] + expected = "fp32" if device == "cpu" else ("fp16" if backend == "torch" else "tf32") + if settings["precision"] != "auto" or report["effective_precision"] != expected: + raise ValueError("Unexpected timing precision") + for cell in report["cells"]: + grouped[backend, device, cell["preset"], cell["batch_size"]].append(cell["end_to_end"]) + resources[backend, device].append( + { + "rss_mib": report["peak_rss_kib_linux"] / 1024, + "load_first_seconds": report["constructor_seconds"] + report["cold_first_image_seconds"], + "allocated_mib": report.get("torch_peak_allocated_bytes", 0) / 2**20 if backend == "torch" and device != "cpu" else None, + } + ) + data["sources_sha256"][str(path)] = file_hash(path) + expected_cells = { + (backend, device, preset, batch) + for backend in ("torch", "onnx") + for device in ("cpu", "cuda:0") + for preset in REGIONS + for batch in ((1, 8) if device == "cpu" else (1, 8, 32)) + } + if set(grouped) != expected_cells: + raise ValueError("Incomplete timing matrix") + for (backend, device, preset, batch), runs in sorted(grouped.items()): + values = [v for run in runs for v in run["seconds"]] + if len(runs) != 3 or len(values) != 21: + raise ValueError("Require three complete seven-observation trials") + data["speed"].append( + { + "model": backend, + "device": device, + "preset": preset, + "batch": batch, + "images_per_second": batch / statistics.median(values), + "trial_min_ips": batch / max(r["median_seconds"] for r in runs), + "trial_max_ips": batch / min(r["median_seconds"] for r in runs), + } + ) + for (backend, device), rows in resources.items(): + if len(rows) != 3: + raise ValueError("Require three resource observations") + data["resources"].append( + { + "model": backend, + "device": device, + **{key: statistics.median(r[key] for r in rows) if rows[0][key] is not None else None for key in rows[0]}, + } + ) + return data + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update( + { + "svg.fonttype": "none", + "svg.hashsalt": "mambo-acceleration-v1", + "axes.spines.top": False, + "axes.spines.right": False, + "font.size": 10, + } + ) + + def save(fig, name, note): + fig.text(0.02, 0.02, note, fontsize=9, color="#555555") + svg = output / f"{name}.svg" + fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) + plt.close(fig) + + fig, axes = plt.subplots(2, 2, figsize=(12, 8)) + for col, backend in enumerate(("torch", "onnx")): + for row, device in enumerate(("cpu", "cuda:0")): + ax = axes[row, col] + batches = (1, 8) if device == "cpu" else (1, 8, 32) + for name, label, color in ( + ("v2", "MAMBO v2", COLORS[0]), + (f"v3-{backend}", "Previous v3 FP32", "#888888"), + (backend, "Updated v3 auto", COLORS[col + 1]), + ): + source = data["speed"] if name == backend else data["reference"]["speed"] + rows = [ + next(r for r in source if (r["model"], r["device"], r["preset"], r["batch"]) == (name, device, "north_europe", batch)) + for batch in batches + ] + values = [r["images_per_second"] for r in rows] + low = [r.get("trial_min_ips", r["batch"] * 1000 / r["trial_max_ms"] if "trial_max_ms" in r else 0) for r in rows] + high = [r.get("trial_max_ips", r["batch"] * 1000 / r["trial_min_ms"] if "trial_min_ms" in r else 0) for r in rows] + ax.plot(range(len(batches)), values, marker="o", color=color, label=label) + ax.vlines(range(len(batches)), low, high, colors=color, alpha=0.5) + ax.annotate( + f"{values[-1]:.1f}", + (len(values) - 1, values[-1]), + xytext=(4, -14 if name.startswith("v3-") else 5), + textcoords="offset points", + fontsize=9, + ) + ax.set( + xticks=range(len(batches)), + xticklabels=batches, + xlabel="Batch size", + ylabel="End-to-end images / second", + title=f"{backend.title()} · {'CPU' if device == 'cpu' else 'GPU'}", + ylim=(0, None), + ) + ax.margins(y=0.25) + ax.grid(axis="y", alpha=0.2) + ax.legend(fontsize=8) + for row in range(2): + maximum = max(ax.get_ylim()[1] for ax in axes[row]) + for ax in axes[row]: + ax.set_ylim(0, maximum) + fig.suptitle("Northern Europe: complete-pipeline batch throughput", fontsize=16) + fig.tight_layout(rect=(0, 0.09, 1, 0.95)) + save( + fig, + "mambo-accelerated-speed", + "Three fresh-process trials; four CPU threads; decode, preparation and CPU results included. Whiskers: trial-median range.\n" + "Updated CUDA: FP16 backbone for PyTorch, TF32 for standard ONNX. CPU: FP32. V2 CPU requires its documented input cast.", + ) + + fig, axes = plt.subplots(1, 2, figsize=(12, 4.8)) + labels = ["V2", "V3 torch\nFP32", "V3 torch\nauto", "V3 ONNX\nFP32", "V3 ONNX\nauto"] + for ax, device in zip(axes, ("cpu", "cuda:0"), strict=True): + values = [] + for name in ("v2", "v3-torch", "torch", "v3-onnx", "onnx"): + updated = name in ("torch", "onnx") + source = data["resources"] if updated else data["reference"]["resources"] + value = next(r for r in source if r["model"] == name and r["device"] == device)["rss_mib"] + values.append(value if updated else value["median"]) + bars = ax.bar(labels, values, color=[COLORS[0], "#888888", COLORS[1], "#888888", COLORS[2]]) + ax.bar_label(bars, fmt="%.0f", padding=3) + ax.set(title="CPU execution" if device == "cpu" else "GPU execution", ylabel="Peak host RSS (MiB)", ylim=(0, 4800)) + ax.grid(axis="y", alpha=0.2) + ax.set_axisbelow(True) + fig.suptitle("Process memory across the complete batch sweep", fontsize=15) + fig.tight_layout(rect=(0, 0.10, 1, 0.94)) + save( + fig, + "mambo-accelerated-memory", + "Median of three fresh processes; includes loading and batch sweep. Host memory, not GPU VRAM.\n" + "CPU batches 1/8; GPU batches 1/8/32. V2 CPU uses the documented input cast.", + ) + + series = [ + ("v2", "MAMBO v2", COLORS[0], data["reference"]["quality"]), + ("v3", "V3 FP32 reference", "#888888", data["reference"]["quality"]), + ("torch", "V3 PyTorch FP16", COLORS[1], data["quality"]), + ("onnx", "V3 ONNX TF32", COLORS[2], data["quality"]), + ] + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 2, figsize=(12, 7.5)) + for ax, (metric, title) in zip( + axes.ravel(), + (("accuracy", "Macro accuracy"), ("f1", "Macro-F1"), ("precision", "Macro precision"), ("micro_accuracy", "Micro accuracy")), + strict=True, + ): + for i, (model, label, color, source) in enumerate(series): + values = [ + next(r for r in source if r["model"] == model and r["preset"] == preset)["scores"][scope][metric]["0"] + for preset in REGIONS + ] + bars = ax.bar(np.arange(3) + (i - 1.5) * 0.2, values, 0.2, color=color, label=label) + ax.bar_label(bars, fmt="%.3f", padding=3, fontsize=8, rotation=45) + ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, 1.05)) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.legend( + *axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=4, fontsize=9, frameon=False + ) + fig.suptitle(f"Species quality · {scope} truth · automatic GPU settings", fontsize=16) + fig.tight_layout(rect=(0, 0.08, 1, 0.88)) + save( + fig, + f"mambo-accelerated-quality-{scope}", + "Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images.\n" + "Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists.", + ) + with (output / "mambo-accelerated-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["variant", "preset", "scope", "rank", "images", *METRICS]) + for model, label, color, source in series: + for entry in (r for r in source if r["model"] == model): + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + label, + entry["preset"], + scope, + rank, + entry["ranks"][rank]["images" if scope == "all" else "known_images"], + *[entry["scores"][scope][key][str(level)] for key in METRICS], + ] + ) + write_json(output / "mambo-accelerated-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path) + for name in ("reference", "quality", "performance"): + parser.add_argument("--" + name, type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.data and any(getattr(args, key) is None for key in ("reference", "quality", "performance")): + parser.error("Supply --data or all three evidence inputs") + render(json.loads(args.data.read_text()) if args.data else aggregate(args), args.output) diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index 060504f..5e303b1 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -27,6 +27,14 @@ python -m dev.releases.mambo_v3.run_local qualification \ --root /path/to/flemming --output /path/to/new-subset-run ``` +The evaluation and timing commands retain `--precision fp32` by default to +preserve the original reference protocol. Pass `--precision auto` to measure the +current deployment defaults (native CUDA FP16 backbone, ONNX CUDA TF32, CPU FP32). +The [accelerated comparison workflow](../../../docs/mambo-accelerated-deployment.md#reproduce) +provides the full qualification and three-trial timing commands. The public +`Predictor` and deployment CLI default to `auto`; every report records the resolved +precision. + Preparation joins all three archived truth ranks by original species/image identity and hashes local image bytes. It rejects missing/extra images and duplicate or incomplete truth. The seeded 256-image subset comes from the existing benchmark diff --git a/docs/assets/mambo-accelerated-comparison.json b/docs/assets/mambo-accelerated-comparison.json new file mode 100644 index 0000000..3398097 --- /dev/null +++ b/docs/assets/mambo-accelerated-comparison.json @@ -0,0 +1,3479 @@ +{ + "reference": { + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078956343792633, + "micro_accuracy_known": 0.8204079212617099, + "macro_accuracy_all": 0.7123671759291879, + "macro_accuracy_known": 0.734892620227344, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936732605729877, + "micro_accuracy_known": 0.7936867954774126, + "macro_accuracy_all": 0.8054070319557569, + "macro_accuracy_known": 0.8079160881300739, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298090040927695, + "micro_accuracy_known": 0.9298090040927695, + "macro_accuracy_all": 0.8106383132501974, + "macro_accuracy_known": 0.8106383132501974, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25450880594788156, + "scores": { + "all": { + "accuracy": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.26361186496219735, + "1": 0.31882230287858776, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.7123671759291879, + "1": 0.8054070319557569, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.25450880594788156, + "1": 0.3207725301986971, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.7078956343792633, + "1": 0.7936732605729877, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9282973331913745, + "1": 0.927078119536916, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "precision": { + "0": 0.2677964216559137, + "1": 0.31884970853060046, + "2": 0.27544229106153234 + }, + "recall": { + "0": 0.734892620227344, + "1": 0.8079160881300739, + "2": 0.8106383132501974 + }, + "f1": { + "0": 0.2609164468790569, + "1": 0.3212438169069074, + "2": 0.2805840235220709 + }, + "micro_accuracy": { + "0": 0.8204079212617099, + "1": 0.7936867954774126, + "2": 0.9298090040927695 + }, + "theilU": { + "0": 0.9313037775676971, + "1": 0.9270916152069156, + "2": 0.8488942298912809 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v3", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906121581308468, + "macro_accuracy_known": 0.7124496967278696, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7793656207366985, + "micro_accuracy_known": 0.7793656207366985, + "macro_accuracy_all": 0.7927684087442151, + "macro_accuracy_known": 0.7927684087442151, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9286323328785812, + "micro_accuracy_known": 0.9286323328785812, + "macro_accuracy_all": 0.8061650335232657, + "macro_accuracy_known": 0.8061650335232657, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19931852384419554, + "scores": { + "all": { + "accuracy": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.2125866053945616, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.6906121581308468, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.19931852384419554, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9327740860469433, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "precision": { + "0": 0.21701009331649532, + "1": 0.25792706709688445, + "2": 0.25177044612587207 + }, + "recall": { + "0": 0.7124496967278696, + "1": 0.7927684087442151, + "2": 0.8061650335232657 + }, + "f1": { + "0": 0.20477619736063515, + "1": 0.25548534308971915, + "2": 0.25562321183354897 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7793656207366985, + "2": 0.9286323328785812 + }, + "theilU": { + "0": 0.9361501370706838, + "1": 0.930377596554077, + "2": 0.8415003084731356 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v3", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5843281036834925, + "micro_accuracy_known": 0.6772006798687695, + "macro_accuracy_all": 0.5802757153882665, + "macro_accuracy_known": 0.5986243546100299, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7133531076261048, + "macro_accuracy_known": 0.7133531076261048, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.903137789904502, + "micro_accuracy_known": 0.903137789904502, + "macro_accuracy_all": 0.7851379223252065, + "macro_accuracy_known": 0.7851379223252065, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.09709532327738142, + "scores": { + "all": { + "accuracy": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.11912807276515047, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5802757153882665, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.09709532327738142, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.5843281036834925, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9381503100112119, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "precision": { + "0": 0.1233403630154899, + "1": 0.139300115626279, + "2": 0.18846238515501548 + }, + "recall": { + "0": 0.5986243546100299, + "1": 0.7133531076261048, + "2": 0.7851379223252065 + }, + "f1": { + "0": 0.10055972949058657, + "1": 0.12672892757582832, + "2": 0.19392386150040025 + }, + "micro_accuracy": { + "0": 0.6772006798687695, + "1": 0.7058321964529332, + "2": 0.903137789904502 + }, + "theilU": { + "0": 0.9436554162021304, + "1": 0.927961126268096, + "2": 0.803447959660008 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "v3", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.7049027989956338, + "macro_accuracy_known": 0.7271922155646657, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889154160982265, + "micro_accuracy_known": 0.7889154160982265, + "macro_accuracy_all": 0.8001749661579481, + "macro_accuracy_known": 0.8001749661579481, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289222373806275, + "micro_accuracy_known": 0.9289222373806275, + "macro_accuracy_all": 0.8066694596309745, + "macro_accuracy_known": 0.8066694596309745, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.2366924424645238, + "scores": { + "all": { + "accuracy": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2470742742773393, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7049027989956338, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.2366924424645238, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9297064107551721, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "precision": { + "0": 0.2514163094253105, + "1": 0.3039724405966767, + "2": 0.2691352790869643 + }, + "recall": { + "0": 0.7271922155646657, + "1": 0.8001749661579481, + "2": 0.8066694596309745 + }, + "f1": { + "0": 0.24287275681309572, + "1": 0.30440717730876965, + "2": 0.27323770976338385 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889154160982265, + "2": 0.9289222373806275 + }, + "theilU": { + "0": 0.9329194604232633, + "1": 0.9279675082275328, + "2": 0.8462890628674864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092" + }, + { + "model": "v3", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887822210592908, + "macro_accuracy_known": 0.7105618960334976, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779160982264666, + "micro_accuracy_known": 0.7779160982264666, + "macro_accuracy_all": 0.7907835796748087, + "macro_accuracy_known": 0.7907835796748087, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254945429740792, + "micro_accuracy_known": 0.9254945429740792, + "macro_accuracy_all": 0.804979506038197, + "macro_accuracy_known": 0.804979506038197, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19747553631500298, + "scores": { + "all": { + "accuracy": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.2113075222535363, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.6887822210592908, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.19747553631500298, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.93232229829798, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "precision": { + "0": 0.21594007329351536, + "1": 0.25581979303859764, + "2": 0.25026564649749544 + }, + "recall": { + "0": 0.7105618960334976, + "1": 0.7907835796748087, + "2": 0.804979506038197 + }, + "f1": { + "0": 0.20308773317860726, + "1": 0.2528121859712137, + "2": 0.2540250081556085 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779160982264666, + "2": 0.9254945429740792 + }, + "theilU": { + "0": 0.9361858273521857, + "1": 0.9297312779441991, + "2": 0.8384429842887284 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a" + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 108.51240400006645, + "p95_ms": 123.77933399693575, + "trial_min_ms": 97.39962699677562, + "trial_max_ms": 113.84981300216168, + "images_per_second": 9.215536317851623 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 822.0081180006673, + "p95_ms": 870.8548600006907, + "trial_min_ms": 820.2729259974149, + "trial_max_ms": 846.277905999159, + "images_per_second": 9.732263982329071 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 114.8194630004582, + "p95_ms": 134.62799300032202, + "trial_min_ms": 105.08139800003846, + "trial_max_ms": 124.61581699972157, + "images_per_second": 8.709324829328015 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 829.4069539988413, + "p95_ms": 904.6590870020736, + "trial_min_ms": 772.6378150000528, + "trial_max_ms": 864.606418999756, + "images_per_second": 9.645446015890501 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 112.84695399808697, + "p95_ms": 135.95893499950762, + "trial_min_ms": 111.31972099974519, + "trial_max_ms": 115.08480599877657, + "images_per_second": 8.86155952438869 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 865.4289660007635, + "p95_ms": 896.7971799975203, + "trial_min_ms": 831.8117230010103, + "trial_max_ms": 880.8760790016095, + "images_per_second": 9.243970694635777 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 103.7234499999613, + "p95_ms": 124.14646799879847, + "trial_min_ms": 97.68370800156845, + "trial_max_ms": 119.08456600212958, + "images_per_second": 9.6410213890916 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 824.3145499982347, + "p95_ms": 861.5687530000287, + "trial_min_ms": 791.8309580018104, + "trial_max_ms": 852.1146800012502, + "images_per_second": 9.705033109044518 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 112.1231870019983, + "p95_ms": 126.15529799950309, + "trial_min_ms": 102.30596700057504, + "trial_max_ms": 123.34861300041666, + "images_per_second": 8.918761825617548 + }, + { + "model": "v3-onnx", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 818.1298460003745, + "p95_ms": 854.9832339995191, + "trial_min_ms": 797.6780380013224, + "trial_max_ms": 835.7702249995782, + "images_per_second": 9.778398916883345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 31.974444002116797, + "p95_ms": 36.03833899978781, + "trial_min_ms": 31.499988999712514, + "trial_max_ms": 33.238082000025315, + "images_per_second": 31.274976976418955 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 190.02189400271163, + "p95_ms": 203.95815500160097, + "trial_min_ms": 181.0136739986774, + "trial_max_ms": 194.3993130007584, + "images_per_second": 42.100411860360886 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 751.9461080009933, + "p95_ms": 938.8219909997133, + "trial_min_ms": 733.0324560025474, + "trial_max_ms": 805.7348090005689, + "images_per_second": 42.556241277809406 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 33.4465949999867, + "p95_ms": 38.38332599843852, + "trial_min_ms": 30.618580000009388, + "trial_max_ms": 35.84958700230345, + "images_per_second": 29.898409688651345 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 194.54678400143166, + "p95_ms": 211.8438170000445, + "trial_min_ms": 181.03928100026678, + "trial_max_ms": 202.35563499954878, + "images_per_second": 41.121214319025334 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 774.5358419997501, + "p95_ms": 949.0962469972146, + "trial_min_ms": 764.2361749967677, + "trial_max_ms": 784.2745119996835, + "images_per_second": 41.31506673387792 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 38.574180001887726, + "p95_ms": 41.16026200063061, + "trial_min_ms": 37.06625300037558, + "trial_max_ms": 40.838097000232665, + "images_per_second": 25.92407667385444 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 202.19900700249127, + "p95_ms": 211.71870800026227, + "trial_min_ms": 198.48519999868586, + "trial_max_ms": 202.6014760012913, + "images_per_second": 39.56498164158359 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 804.4566509997821, + "p95_ms": 961.4865859985002, + "trial_min_ms": 794.1813469988119, + "trial_max_ms": 830.9064189998026, + "images_per_second": 39.77840193157738 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 32.848500999534735, + "p95_ms": 41.949999998905696, + "trial_min_ms": 30.442417999438476, + "trial_max_ms": 40.2992199997243, + "images_per_second": 30.44278945983453 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 186.86159300341387, + "p95_ms": 231.81681699861656, + "trial_min_ms": 182.11845200130483, + "trial_max_ms": 189.51840799854835, + "images_per_second": 42.81243604646913 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 753.8683550010319, + "p95_ms": 914.5665709984314, + "trial_min_ms": 743.5950600010983, + "trial_max_ms": 760.9614780012635, + "images_per_second": 42.447729484488306 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 32.764373001555214, + "p95_ms": 37.03474800204276, + "trial_min_ms": 30.950796000979608, + "trial_max_ms": 35.4559719999088, + "images_per_second": 30.520956404462048 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 188.96362599843997, + "p95_ms": 209.1836069994315, + "trial_min_ms": 176.49814899777994, + "trial_max_ms": 197.84098799937055, + "images_per_second": 42.336190140985366 + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 760.7565639991662, + "p95_ms": 922.7298170007998, + "trial_min_ms": 737.9431469998963, + "trial_max_ms": 802.070398000069, + "images_per_second": 42.063389938801855 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 139.97511000343366, + "p95_ms": 157.91612699831603, + "trial_min_ms": 132.2067729997798, + "trial_max_ms": 148.36850999927265, + "images_per_second": 7.144127266450939 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 1020.2903719982714, + "p95_ms": 1126.8082070018863, + "trial_min_ms": 990.7244099995296, + "trial_max_ms": 1102.0994509999582, + "images_per_second": 7.840905118345617 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 1, + "median_ms": 156.06195000145817, + "p95_ms": 174.66607700043824, + "trial_min_ms": 155.75652500047, + "trial_max_ms": 160.84377999868593, + "images_per_second": 6.407711809256878 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "europe_v3", + "batch": 8, + "median_ms": 1013.887937002437, + "p95_ms": 1098.4262460005993, + "trial_min_ms": 994.4540770011372, + "trial_max_ms": 1078.8947210021433, + "images_per_second": 7.8904183667990235 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 162.19867499967222, + "p95_ms": 183.9224630020908, + "trial_min_ms": 160.09652899811044, + "trial_max_ms": 162.8700189976371, + "images_per_second": 6.165278477164014 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 1099.8652199996286, + "p95_ms": 1168.8887240015902, + "trial_min_ms": 1066.5678989971639, + "trial_max_ms": 1130.8798369973374, + "images_per_second": 7.273618489366089 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 148.2759509999596, + "p95_ms": 161.5721569978632, + "trial_min_ms": 142.76755700120702, + "trial_max_ms": 153.29030800057808, + "images_per_second": 6.744182001572678 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 1082.5685600029828, + "p95_ms": 1133.4843360018567, + "trial_min_ms": 1013.1757369999832, + "trial_max_ms": 1087.7670109985047, + "images_per_second": 7.3898321968429945 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 139.39189299708232, + "p95_ms": 159.55598099753843, + "trial_min_ms": 129.97479099794873, + "trial_max_ms": 153.69803499925183, + "images_per_second": 7.174018362896696 + }, + { + "model": "v3-torch", + "device": "cpu", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 1022.699465000187, + "p95_ms": 1107.3616229987238, + "trial_min_ms": 1004.2549429999781, + "trial_max_ms": 1085.7946290016116, + "images_per_second": 7.8224349124877435 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 35.489638001308776, + "p95_ms": 57.598117000452476, + "trial_min_ms": 33.89597299974412, + "trial_max_ms": 52.630236998084, + "images_per_second": 28.177238662257484 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 175.51926099986304, + "p95_ms": 185.99682900094194, + "trial_min_ms": 174.19886200150358, + "trial_max_ms": 176.5289369977836, + "images_per_second": 45.57904331654087 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 728.2977190006932, + "p95_ms": 884.3167390004965, + "trial_min_ms": 698.9123559978907, + "trial_max_ms": 760.5062379989249, + "images_per_second": 43.938075274913146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 1, + "median_ms": 35.27583799950662, + "p95_ms": 48.10837100012577, + "trial_min_ms": 33.24329500173917, + "trial_max_ms": 41.260214002249995, + "images_per_second": 28.348015432375732 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 8, + "median_ms": 178.32208699837793, + "p95_ms": 194.90453400067054, + "trial_min_ms": 170.77715800041915, + "trial_max_ms": 192.54146399907768, + "images_per_second": 44.86264228206779 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "europe_v3", + "batch": 32, + "median_ms": 724.5190200010256, + "p95_ms": 921.8273680016864, + "trial_min_ms": 717.8096630013897, + "trial_max_ms": 746.3200019992655, + "images_per_second": 44.167232490259124 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 45.16958599924692, + "p95_ms": 55.23221900148201, + "trial_min_ms": 36.25714399822755, + "trial_max_ms": 48.02743799882592, + "images_per_second": 22.1387904688051 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 191.97120100216125, + "p95_ms": 224.58959399955347, + "trial_min_ms": 185.349908999342, + "trial_max_ms": 204.552421997505, + "images_per_second": 41.672917386759146 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 758.8707609975245, + "p95_ms": 956.4475619990844, + "trial_min_ms": 727.8204619979078, + "trial_max_ms": 767.2486240007856, + "images_per_second": 42.16791797055993 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 36.8857930006925, + "p95_ms": 50.996198999200715, + "trial_min_ms": 32.99324700128636, + "trial_max_ms": 48.603333001665305, + "images_per_second": 27.11070899251714 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 171.64449200208765, + "p95_ms": 187.66877799862414, + "trial_min_ms": 168.77017200022237, + "trial_max_ms": 178.43948399968212, + "images_per_second": 46.6079622287134 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 718.6301279980398, + "p95_ms": 923.7060959967494, + "trial_min_ms": 686.7490500007989, + "trial_max_ms": 768.8245279969124, + "images_per_second": 44.52916563510302 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 1, + "median_ms": 35.540962002414744, + "p95_ms": 50.400192998495186, + "trial_min_ms": 33.24394499941263, + "trial_max_ms": 46.86532299820101, + "images_per_second": 28.136548468554604 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 8, + "median_ms": 185.47856499935733, + "p95_ms": 197.47024499883992, + "trial_min_ms": 182.4952110000595, + "trial_max_ms": 187.0011249993695, + "images_per_second": 43.131668611021006 + }, + { + "model": "v3-torch", + "device": "cuda:0", + "preset": "north_europe_v3", + "batch": 32, + "median_ms": 717.1896030013158, + "p95_ms": 890.1827099980437, + "trial_min_ms": 697.0991640009743, + "trial_max_ms": 741.660445000889, + "images_per_second": 44.61860554877744 + } + ], + "resources": [ + { + "model": "v2", + "device": "cpu", + "load_first_seconds": { + "median": 209.39651592600057, + "min": 198.43300686099974, + "max": 209.59208342499915 + }, + "rss_mib": { + "median": 4122.8125, + "min": 4122.08203125, + "max": 4123.83203125 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v2", + "device": "cuda:0", + "load_first_seconds": { + "median": 209.60287212600088, + "min": 208.6747407030016, + "max": 210.06140313599826 + }, + "rss_mib": { + "median": 4122.58203125, + "min": 4122.25390625, + "max": 4123.69921875 + }, + "cuda_allocated_mib": { + "median": 1935.630859375, + "min": 1935.630859375, + "max": 1935.630859375 + }, + "cuda_reserved_mib": { + "median": 2072.0, + "min": 2072.0, + "max": 2072.0 + } + }, + { + "model": "v3-onnx", + "device": "cpu", + "load_first_seconds": { + "median": 0.38248996100082877, + "min": 0.36779166300038924, + "max": 0.40503490100309136 + }, + "rss_mib": { + "median": 586.5078125, + "min": 572.76953125, + "max": 590.7421875 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-onnx", + "device": "cuda:0", + "load_first_seconds": { + "median": 1.6538925760032726, + "min": 1.6474964560002263, + "max": 1.6716580809988955 + }, + "rss_mib": { + "median": 1469.08984375, + "min": 1461.17578125, + "max": 1476.80859375 + }, + "cuda_allocated_mib": null, + "cuda_reserved_mib": null + }, + { + "model": "v3-torch", + "device": "cpu", + "load_first_seconds": { + "median": 40.465289795996796, + "min": 39.93423429299946, + "max": 40.48855051400096 + }, + "rss_mib": { + "median": 1573.19921875, + "min": 1568.90234375, + "max": 1636.4609375 + }, + "cuda_allocated_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + }, + "cuda_reserved_mib": { + "median": 0.0, + "min": 0.0, + "max": 0.0 + } + }, + { + "model": "v3-torch", + "device": "cuda:0", + "load_first_seconds": { + "median": 41.788645010001346, + "min": 41.23758513699795, + "max": 42.60878924099961 + }, + "rss_mib": { + "median": 1897.02734375, + "min": 1895.94921875, + "max": 1898.734375 + }, + "cuda_allocated_mib": { + "median": 865.3681640625, + "min": 865.3681640625, + "max": 865.3681640625 + }, + "cuda_reserved_mib": { + "median": 1348.0, + "min": 1348.0, + "max": 1348.0 + } + } + ], + "v3_gpu_components": [ + { + "model": "v3-onnx", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 32.848500999534735 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 13.389879000897054 + }, + { + "model": "v3-onnx", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 16.602722000243375 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 186.86159300341387 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 50.60579099881579 + }, + { + "model": "v3-onnx", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 134.49058500191313 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 753.8683550010319 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 180.64068800231325 + }, + { + "model": "v3-onnx", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 559.359699000197 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "end_to_end", + "observations": 21, + "median_ms": 36.8857930006925 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "prepared", + "observations": 21, + "median_ms": 18.508613997255452 + }, + { + "model": "v3-torch", + "batch": 1, + "stage": "preprocessing", + "observations": 21, + "median_ms": 14.880823000567034 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "end_to_end", + "observations": 21, + "median_ms": 171.64449200208765 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "prepared", + "observations": 21, + "median_ms": 46.71529999905033 + }, + { + "model": "v3-torch", + "batch": 8, + "stage": "preprocessing", + "observations": 21, + "median_ms": 126.31524700191221 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "end_to_end", + "observations": 21, + "median_ms": 718.6301279980398 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "prepared", + "observations": 21, + "median_ms": 181.38111200096318 + }, + { + "model": "v3-torch", + "batch": 32, + "stage": "preprocessing", + "observations": 21, + "median_ms": 519.4957230014552 + } + ], + "quality_policy": { + "accuracy": "Lead: mini_metrics accuracy (macro); micro_accuracy retained; all and known scopes at each rank", + "macro_f1": "mini_metrics all.f1.0; equal weight over union of truth and predicted species", + "threshold": 0, + "optimal": false, + "known_only": false, + "known_accuracy": "mini_metrics known.micro_accuracy; known_only=True; truth in active preset vocabulary" + }, + "sources_sha256": { + "local-evidence/mambo-v3/quality-full/comparison.json": "b9ac190c4ca959c6a5791adc5ceabc4a500a25f9724ef5ab7ebed57cfd5e4de8", + "local-evidence/mambo-release-comparison-quality/v2-full/report.json": "c9a98044cbc97ab0033b1f794e284b8f8504f26fc0b7574dfa619c16df6db263", + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/metrics.json": "11340899a76a11997c7b3a4813f0824a730177478bab1d5a9270de851f7fa368", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/metrics.json": "e6bccab2d2d6cee8bc3b9322a404dcdcb456c038ace002efb430aba1191c300b", + "local-evidence/mambo-release-comparison-quality/v2-full/full/metrics.json": "1e6a2aabc59aacc10d03c4653de71b549ddf4a003b7a096d04a4cc7c9c2cc9b2", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/report.json": "ba80d1580f5b563bd5eb0d9af3af392c6115766c4dcebe619f68e034c938b47d", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe/metrics.json": "da3927fad7f5901391b9a9033027d6e20f0a6f4a219e1d7d215bacda1b301599", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe/metrics.json": "a82d3c13819caa0c4e39f933b2dcc8098382172f7a8a2fc00d9cc6c4518cde27", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/full/metrics.json": "b3a724e48d3ecd783509d90899b0d96ec2f2802a2304551db5c595014561297a", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/north_europe_v3/metrics.json": "6d434a6483fd447d80b5cfd55d57cfe8c65a7420f52cbd413f2e57cee3b23725", + "local-evidence/mambo-v3/quality-full/torch-cuda-0-prediction/europe_v3/metrics.json": "762b26022265c8bfedcc4745ea12107b6957eca098ba6628f6d9a149b39b77ff", + "local-evidence/mambo-v3/performance/trial-0-torch-cpu-prediction-t4/report.json": "f75f2fd264d09ab6aa7bd194e7a6f8afc28980e41e81e164330f0efe5746e88f", + "local-evidence/mambo-v3/performance/trial-0-onnx-cpu-prediction-t4/report.json": "dbec7f2753ea649998ec3d1c6d5d75608d1465d273755910f531902247335047", + "local-evidence/mambo-v3/performance/trial-0-torch-cuda-0-prediction-t4/report.json": "e9d75960d5ce34a9040f6d0c1af2476bad9c3edcfaa0cb581fdf37d3bc8cc1eb", + "local-evidence/mambo-v3/performance/trial-0-onnx-cuda-0-prediction-t4/report.json": "41705c1cdd32397a1b7504eeb8b018308fee04716e807c9e20551f885ca9e5d2", + "local-evidence/mambo-v3/performance/trial-1-onnx-cuda-0-prediction-t4/report.json": "2f85c06d080971c8d677442928097f46939eaf7010707af25915c71f01c16720", + "local-evidence/mambo-v3/performance/trial-1-torch-cuda-0-prediction-t4/report.json": "38d58fb969176851aba53393228946658242a63d15964085f5c55ba8c617fbe7", + "local-evidence/mambo-v3/performance/trial-1-onnx-cpu-prediction-t4/report.json": "983887ef2d024f811d17ca21e5db55b7dfdcb26f11528a2cdf122fa3f9683e06", + "local-evidence/mambo-v3/performance/trial-1-torch-cpu-prediction-t4/report.json": "e092bf39351e6bb1608c643b319ab3ebdd6168498a9aea2381d07e9d6bc88ae8", + "local-evidence/mambo-v3/performance/trial-2-torch-cpu-prediction-t4/report.json": "ca3ffa96c7cd0c410f6804a94c66aa6fd9e3076739e76ac5276877131ec3acd7", + "local-evidence/mambo-v3/performance/trial-2-onnx-cpu-prediction-t4/report.json": "3c49eb94eeec2316838d18c1e691756ef5ab7e215cffa1c50084bcf0772d7ad5", + "local-evidence/mambo-v3/performance/trial-2-torch-cuda-0-prediction-t4/report.json": "a3958a47226f021d42acdc123d81a7e08540d9113a2ce4f0b6559eb7022fff04", + "local-evidence/mambo-v3/performance/trial-2-onnx-cuda-0-prediction-t4/report.json": "927bf5395c71330f8d924a621e060d73ba5cc48210013f0880d6ec1360ccf28f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cpu/report.json": "21cfb5b069af6a0e008f3b017a6514409b447d2f63d9b7df4da9972113b1aab8", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cpu/report.json": "ea44ddb694bd1922a717775711c1be2fc167223bba2f6827d69ee692ebefe52e", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cpu/report.json": "7933e6411f95991c742bf7851fc404918ae8e86e7a03c423d4f07f2d76270f50", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v2-cuda-0/report.json": "8f01c6b3299de7ca8c1e122f3a3a41cc71e0551f27800f42f0729255ce67450a", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-torch-cuda-0/report.json": "079ffb75a89f7db4184f936482de647ddc9216d2cc56ca471fd70e2799a074c7", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-0-v3-onnx-cuda-0/report.json": "5985213e519f137a6f8f5d118d43a66692579608aa5169c355a4fc3f0c9ac74b", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cuda-0/report.json": "1433fafea9fbb203400c83c83b68112b72dd74f0397ace1fa5eea7032899ddd3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cuda-0/report.json": "7e8a7c1f30e5102378d230fb1d5ca1d1a5cdef106dff66f1cf408ffeaf17f115", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cuda-0/report.json": "f9deaee77c4ee1d3ff00b63c45959cc2dcddbbcd6ee890dcbd4bf9e5ed5cbb69", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-onnx-cpu/report.json": "db7e71075abe904f239498fa36c831f1dce1c40284c553f54680cc4d7e62b54f", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v3-torch-cpu/report.json": "6cbadadbd51a877c335516e8abb7420ecd553e2146fb59b6275010fe58cbeabc", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-1-v2-cpu/report.json": "1d3ccb09d35977644d7f13584717b0df977d636abef06594bb55c1d1acb4f430", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cpu/report.json": "9ce8be6fa3462f4ff7440b040eb5ffa54ec6e80d4eedfdc8bfc2e0c21da3d353", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cpu/report.json": "3332f479ebd7213ac6301f507bb63e242d4bb3ac4c5e8e4a7e0da1cfe7eaca2c", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cpu/report.json": "c0d664560c4f71d97f10734348b2f37f564bedd76cd2e996fab0b0f7e3f5f8fb", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v2-cuda-0-retry1/report.json": "5853f83dee6b7009f8038327253fe92f1baa3d0454a225edf6f192560ebab0f3", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-torch-cuda-0/report.json": "c348b2c2af88587f075c562c94734bb68b0a29177085baacd03d669f3e2ee259", + "local-evidence/mambo-release-comparison-performance-cpu-adapter/trial-2-v3-onnx-cuda-0/report.json": "cabf7f6338f2a2741838547315c0da33da45ce021c26e4b8e2e043d9bd4168b6" + }, + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63", + "protocol": "Same laptop and image bank; original v2 preprocessing/CUDA autocast; v2 CPU requires float32 input cast; v3 FP32; four threads; three trials; predictions only." + }, + "quality": [ + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078274215552524, + "micro_accuracy_known": 0.8203288667536266, + "macro_accuracy_all": 0.7124755690715492, + "macro_accuracy_known": 0.7350044408208473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936903137789905, + "micro_accuracy_known": 0.7937038489742322, + "macro_accuracy_all": 0.8053483819748223, + "macro_accuracy_known": 0.8078572554389183, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9296896316507504, + "micro_accuracy_known": 0.9296896316507504, + "macro_accuracy_all": 0.8105098078966045, + "macro_accuracy_known": 0.8105098078966045, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2634270457338045, + "1": 0.31893660877341173, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168735, + "1": 0.3204124099108478, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2676065928162877, + "1": 0.31896401442542444, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.2606923077861283, + "1": 0.32088253381207055, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.8203288667536266, + "1": 0.7937038489742322, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.9313351406548803, + "1": 0.9269818797430123, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894270122783083, + "micro_accuracy_known": 0.7990039131981501, + "macro_accuracy_all": 0.6904573601499047, + "macro_accuracy_known": 0.7122900039491111, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794167803547067, + "micro_accuracy_known": 0.7794167803547067, + "macro_accuracy_all": 0.7927569371584571, + "macro_accuracy_known": 0.7927569371584571, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9285300136425648, + "micro_accuracy_known": 0.9285300136425648, + "macro_accuracy_all": 0.8061547662632332, + "macro_accuracy_known": 0.8061547662632332, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21308377178370788, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.19974835307971503, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.6894270122783083, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9327685730735747, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21751022464426337, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.2052193214139764, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.7990039131981501, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9362130669456851, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842087312414734, + "micro_accuracy_known": 0.6770623344796237, + "macro_accuracy_all": 0.5800914186056899, + "macro_accuracy_known": 0.5984342302612058, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7057128240109141, + "micro_accuracy_known": 0.7057128240109141, + "macro_accuracy_all": 0.7129759960732965, + "macro_accuracy_known": 0.7129759960732965, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9029502046384721, + "micro_accuracy_known": 0.9029502046384721, + "macro_accuracy_all": 0.784246040298466, + "macro_accuracy_known": 0.784246040298466, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.11941327816354223, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.09729142790239681, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.5842087312414734, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9380984507134764, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.12352484541958572, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.10067516090358233, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.6770623344796237, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9436338812191157, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7031548431105048, + "micro_accuracy_known": 0.8149136329499189, + "macro_accuracy_all": 0.704628249754435, + "macro_accuracy_known": 0.7269089849245357, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7888472032742155, + "micro_accuracy_known": 0.7888472032742155, + "macro_accuracy_all": 0.8000993660812793, + "macro_accuracy_known": 0.8000993660812793, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9288540245566167, + "micro_accuracy_known": 0.9288540245566167, + "macro_accuracy_all": 0.8066151835359162, + "macro_accuracy_known": 0.8066151835359162, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.24730856379330513, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.2368364750172347, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.7031548431105048, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9297081356830714, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.2516551965945558, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.24302911458287843, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.8149136329499189, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9329238752080722, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6879945429740791, + "micro_accuracy_known": 0.7973437685284004, + "macro_accuracy_all": 0.6886240058738285, + "macro_accuracy_known": 0.7103986779963212, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779331514324693, + "micro_accuracy_known": 0.7779331514324693, + "macro_accuracy_all": 0.7907596138745981, + "macro_accuracy_known": 0.7907596138745981, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9252899045020464, + "micro_accuracy_known": 0.9252899045020464, + "macro_accuracy_all": 0.804801469829159, + "macro_accuracy_known": 0.804801469829159, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.21178593938637336, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.1978902721150327, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.6879945429740791, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9323203923796567, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.2164221653533803, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.20351606400355202, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.7973437685284004, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9362292436999937, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078444747612551, + "micro_accuracy_known": 0.8203486303806474, + "macro_accuracy_all": 0.7123551106111988, + "macro_accuracy_known": 0.7348801733973236, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936221009549795, + "micro_accuracy_known": 0.7936356349869541, + "macro_accuracy_all": 0.805001260196705, + "macro_accuracy_known": 0.8075090522845452, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298601637107776, + "micro_accuracy_known": 0.9298601637107776, + "macro_accuracy_all": 0.8106416408810809, + "macro_accuracy_known": 0.8106416408810809, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.2634302800489512, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.25432102340018437, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26759865685833206, + "1": 0.31885723521848236, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.26071387372659355, + "1": 0.32170684925385246, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.8203486303806474, + "1": 0.7936356349869541, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.931297601666784, + "1": 0.9270216229111814, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906260019361401, + "macro_accuracy_known": 0.712463978281947, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794338335607094, + "micro_accuracy_known": 0.7794338335607094, + "macro_accuracy_all": 0.7928148275159873, + "macro_accuracy_known": 0.7928148275159873, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.928581173260573, + "micro_accuracy_known": 0.928581173260573, + "macro_accuracy_all": 0.8063031248841592, + "macro_accuracy_known": 0.8063031248841592, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21297537840475272, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.19968247097445052, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9327107183368355, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21739674629675512, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.2051505331795797, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9360902428349954, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842769440654844, + "micro_accuracy_known": 0.677141388987707, + "macro_accuracy_all": 0.5803258635150937, + "macro_accuracy_known": 0.5986760884483774, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7132927172304062, + "macro_accuracy_known": 0.7132927172304062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9030695770804912, + "micro_accuracy_known": 0.9030695770804912, + "macro_accuracy_all": 0.7842061134551048, + "macro_accuracy_known": 0.7842061134551048, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.11940183392320727, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.09730444648358827, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.5842769440654844, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9381877433883671, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.12359009712973944, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.10075026693576739, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.677141388987707, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9437018925013999, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.70490721102182, + "macro_accuracy_known": 0.7271967671015613, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889324693042292, + "micro_accuracy_known": 0.7889324693042292, + "macro_accuracy_all": 0.7998011634423278, + "macro_accuracy_known": 0.7998011634423278, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289392905866303, + "micro_accuracy_known": 0.9289392905866303, + "macro_accuracy_all": 0.8066719936597678, + "macro_accuracy_known": 0.8066719936597678, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.24693597388838318, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.23654830838429805, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9297283074523651, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.2512627097909782, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.24271540486034088, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9329324973505538, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887960648645841, + "macro_accuracy_known": 0.710576177587575, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779672578444747, + "micro_accuracy_known": 0.7779672578444747, + "macro_accuracy_all": 0.7908120470589387, + "macro_accuracy_known": 0.7908120470589387, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254774897680764, + "micro_accuracy_known": 0.9254774897680764, + "macro_accuracy_all": 0.805164255187583, + "macro_accuracy_known": 0.805164255187583, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21168953424574674, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.19783273588838454, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9322918377735964, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21632075786236368, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.2034558161613722, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9361375391213514, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + } + ], + "speed": [ + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 10.347520653711559, + "trial_min_ips": 9.449655199391756, + "trial_max_ips": 10.812101015895683 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 10.52727820435193, + "trial_min_ips": 10.355297439131876, + "trial_max_ips": 10.65744350194588 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 9.872555672482052, + "trial_min_ips": 9.739427177477546, + "trial_max_ips": 9.922526205578436 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 10.733118494348869, + "trial_min_ips": 10.56679692428927, + "trial_max_ips": 10.763173933865195 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 44.90623220673182, + "trial_min_ips": 42.40445111731503, + "trial_max_ips": 49.82361940898542 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 116.40713454105308, + "trial_min_ips": 110.31223298386196, + "trial_max_ips": 118.96776369619226 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 111.8052747339908, + "trial_min_ips": 106.42003928900061, + "trial_max_ips": 116.63412022082476 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 35.75541977678956, + "trial_min_ips": 31.557083953590467, + "trial_max_ips": 40.90267960770997 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 88.21443464701524, + "trial_min_ips": 77.52627983150244, + "trial_max_ips": 100.02293651107108 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 91.63275276401218, + "trial_min_ips": 89.34198103795067, + "trial_max_ips": 95.64585858346106 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 6.172664042716186, + "trial_min_ips": 5.627297914052408, + "trial_max_ips": 6.828606710641469 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 8.025987344454904, + "trial_min_ips": 7.857073739438581, + "trial_max_ips": 8.619013897827697 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 6.041894204300364, + "trial_min_ips": 5.731894027251844, + "trial_max_ips": 6.9101794079583225 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 8.113175364445661, + "trial_min_ips": 7.88456031532421, + "trial_max_ips": 8.7687304782976 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 28.83568538372905, + "trial_min_ips": 22.725586903841528, + "trial_max_ips": 31.210095944870968 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 125.82158545438949, + "trial_min_ips": 119.8725311439004, + "trial_max_ips": 129.27090257523392 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 130.40128489292832, + "trial_min_ips": 127.11801504041274, + "trial_max_ips": 137.8194417258879 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 25.264118675077682, + "trial_min_ips": 18.90083587705983, + "trial_max_ips": 26.779560009971277 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 99.47971239936308, + "trial_min_ips": 93.39931185101867, + "trial_max_ips": 108.8844098127304 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 114.91888491933366, + "trial_min_ips": 113.26886770155022, + "trial_max_ips": 117.92808882913475 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + } + ], + "sources_sha256": { + "docs/assets/mambo-release-comparison.json": "b54cb1a592c2410913fc883818bf4f496a8d3a12a3da552b8b352a180d428414", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/metrics.json": "5855c7a7c65ee15c04eb49bced3e15f3e49daa4b165c2b7578a2406bb928198d", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe/metrics.json": "6c3b31385aa90b0f728d1c0ca095177694b42389b93947a4d3a363396013a5f4", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/full/metrics.json": "4b30a10abfa0f03b19b0f36afa45f8700bf3797e27705e4653a671d82d64de2e", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe_v3/metrics.json": "49fe2accea5fceeda9466c9342b56446e4239e25782d895c0690a66cffb8522f", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe_v3/metrics.json": "759d8c2a6a159a9d6811718098dda3b876315b9c4a7517462e02e9d74faef132", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/report.json": "8d77e2cc7765edba878a1a4e2ae047d6c0a557ee67a4e24337fa2880d72277bb", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/metrics.json": "80461d27cf321bc05628c87acc8f0137dc512c1762f55f18a1663397d77552f4", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe/metrics.json": "2062c11c380b0593c600a50fc8d1c56dc00387f79686b785a90bd48bf65464dc", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/full/metrics.json": "a73987b947173a002c2f53322b8a15ad29c96478ee18325b4a7d1e8d99796d87", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe_v3/metrics.json": "8be7a1563b04412ea251f0ae325180511cc7cd19b917a99ad5e09dcfb6b9b1e5", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe_v3/metrics.json": "294d9d9fa0e294b641d23bb8f9b368afbbfdb70421f56c0509049da2fa21c288", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/report.json": "af3c020d7bf832de3edf6015a36cf920d9b11de0a9fb694c37f621d50f1ac13a", + "local-evidence/mambo-accelerated-performance/trial-0-torch-cuda-0/report.json": "0352ff78f15e1d2a4f42b79e1961df3a6a144877f86afe93c569e124e72f3fe1", + "local-evidence/mambo-accelerated-performance/trial-0-onnx-cuda-0/report.json": "a6c1c58fb44a75e1f44e960630628527ce7b48bdf63a225bed2829c0f5427101", + "local-evidence/mambo-accelerated-performance/trial-0-torch-cpu/report.json": "ffc9d26536f4c101b8664916256ee2fa6b50573d275b7bb23d8a06b43b714f74", + "local-evidence/mambo-accelerated-performance/trial-0-onnx-cpu/report.json": "50e82177067a33154660611bd731168670a7fa24fcb19b147a7718b66213dfe4", + "local-evidence/mambo-accelerated-performance/trial-1-onnx-cpu/report.json": "4f7f3c01f0771a0740fc31f670cc49a07967b01ce1c7bb69299af3ed9786e359", + "local-evidence/mambo-accelerated-performance/trial-1-torch-cpu/report.json": "5def0f91eb87405d7897a8526dd07c8384bd73b12f0905c4df07a6d17cf4c085", + "local-evidence/mambo-accelerated-performance/trial-1-onnx-cuda-0/report.json": "e3cd5b5e1a750dc00c6f555c083e4d551fcfb7df7dbeb6b322f4fc33138fd770", + "local-evidence/mambo-accelerated-performance/trial-1-torch-cuda-0/report.json": "9797136c310f0012a5b72911e23785c41ccc8963d4447646dfffba75bdacfc65", + "local-evidence/mambo-accelerated-performance/trial-2-torch-cuda-0/report.json": "bf6601ea0fd9bcea2d98c073f0d0168ebe5a95232eabb91d6e6093d0ba6491b6", + "local-evidence/mambo-accelerated-performance/trial-2-onnx-cuda-0/report.json": "8c85f6dab6c4a1e2919c5823ac3d1c451c1d1bd461d5f59da033109825c2de47", + "local-evidence/mambo-accelerated-performance/trial-2-torch-cpu/report.json": "097f6efa12d69d405c847d908797c6d071b402e77baa444059144531e1386db1", + "local-evidence/mambo-accelerated-performance/trial-2-onnx-cpu/report.json": "9af1b4ea117d86e9d9cf87181a700b4398c660e950e6c89a4ed8b8effb324afb" + }, + "bundle_sha256": "c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b", + "manifest_sha256": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f" +} diff --git a/docs/assets/mambo-accelerated-memory.svg b/docs/assets/mambo-accelerated-memory.svg new file mode 100644 index 0000000..c50fa97 --- /dev/null +++ b/docs/assets/mambo-accelerated-memory.svg @@ -0,0 +1,484 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 torch + FP32 + + + + + + + + + + V3 torch + auto + + + + + + + + + + V3 ONNX + FP32 + + + + + + + + + + V3 ONNX + auto + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1573 + + + 1618 + + + 587 + + + 689 + + + CPU execution + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 torch + FP32 + + + + + + + + + + V3 torch + auto + + + + + + + + + + V3 ONNX + FP32 + + + + + + + + + + V3 ONNX + auto + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1897 + + + 2512 + + + 1469 + + + 1619 + + + GPU execution + + + + Process memory across the complete batch sweep + + + Median of three fresh processes; includes loading and batch sweep. Host memory, not GPU VRAM. + CPU batches 1/8; GPU batches 1/8/32. V2 CPU uses the documented input cast. + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-metrics.csv b/docs/assets/mambo-accelerated-metrics.csv new file mode 100644 index 0000000..ae9e5ce --- /dev/null +++ b/docs/assets/mambo-accelerated-metrics.csv @@ -0,0 +1,109 @@ +variant,preset,scope,rank,images,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +MAMBO v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +MAMBO v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +MAMBO v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +MAMBO v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +MAMBO v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +MAMBO v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +MAMBO v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +MAMBO v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +MAMBO v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +MAMBO v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +MAMBO v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +MAMBO v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +MAMBO v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +MAMBO v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +MAMBO v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +MAMBO v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +MAMBO v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +MAMBO v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +V3 FP32 reference,north_europe,all,species,58640,0.7123671759291879,0.26361186496219735,0.7123671759291879,0.25450880594788156,0.7078956343792633,0.9282973331913745,1.0 +V3 FP32 reference,north_europe,all,genus,58640,0.8054070319557569,0.31882230287858776,0.8054070319557569,0.3207725301986971,0.7936732605729877,0.927078119536916,1.0 +V3 FP32 reference,north_europe,all,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +V3 FP32 reference,north_europe,known,species,50598,0.734892620227344,0.2677964216559137,0.734892620227344,0.2609164468790569,0.8204079212617099,0.9313037775676971,1.0 +V3 FP32 reference,north_europe,known,genus,58639,0.8079160881300739,0.31884970853060046,0.8079160881300739,0.3212438169069074,0.7936867954774126,0.9270916152069156,1.0 +V3 FP32 reference,north_europe,known,family,58640,0.8106383132501974,0.27544229106153234,0.8106383132501974,0.2805840235220709,0.9298090040927695,0.8488942298912809,1.0 +V3 FP32 reference,europe,all,species,58640,0.6906121581308468,0.2125866053945616,0.6906121581308468,0.19931852384419554,0.6894952251023192,0.9327740860469433,1.0 +V3 FP32 reference,europe,all,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +V3 FP32 reference,europe,all,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +V3 FP32 reference,europe,known,species,50598,0.7124496967278696,0.21701009331649532,0.7124496967278696,0.20477619736063515,0.7990829677062334,0.9361501370706838,1.0 +V3 FP32 reference,europe,known,genus,58640,0.7927684087442151,0.25792706709688445,0.7927684087442151,0.25548534308971915,0.7793656207366985,0.930377596554077,1.0 +V3 FP32 reference,europe,known,family,58640,0.8061650335232657,0.25177044612587207,0.8061650335232657,0.25562321183354897,0.9286323328785812,0.8415003084731356,1.0 +V3 FP32 reference,full,all,species,58640,0.5802757153882665,0.11912807276515047,0.5802757153882665,0.09709532327738142,0.5843281036834925,0.9381503100112119,1.0 +V3 FP32 reference,full,all,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +V3 FP32 reference,full,all,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +V3 FP32 reference,full,known,species,50598,0.5986243546100299,0.1233403630154899,0.5986243546100299,0.10055972949058657,0.6772006798687695,0.9436554162021304,1.0 +V3 FP32 reference,full,known,genus,58640,0.7133531076261048,0.139300115626279,0.7133531076261048,0.12672892757582832,0.7058321964529332,0.927961126268096,1.0 +V3 FP32 reference,full,known,family,58640,0.7851379223252065,0.18846238515501548,0.7851379223252065,0.19392386150040025,0.903137789904502,0.803447959660008,1.0 +V3 FP32 reference,north_europe_v3,all,species,58640,0.7049027989956338,0.2470742742773393,0.7049027989956338,0.2366924424645238,0.703206002728513,0.9297064107551721,1.0 +V3 FP32 reference,north_europe_v3,all,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +V3 FP32 reference,north_europe_v3,all,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +V3 FP32 reference,north_europe_v3,known,species,50598,0.7271922155646657,0.2514163094253105,0.7271922155646657,0.24287275681309572,0.8149729238309814,0.9329194604232633,1.0 +V3 FP32 reference,north_europe_v3,known,genus,58640,0.8001749661579481,0.3039724405966767,0.8001749661579481,0.30440717730876965,0.7889154160982265,0.9279675082275328,1.0 +V3 FP32 reference,north_europe_v3,known,family,58640,0.8066694596309745,0.2691352790869643,0.8066694596309745,0.27323770976338385,0.9289222373806275,0.8462890628674864,1.0 +V3 FP32 reference,europe_v3,all,species,58640,0.6887822210592908,0.2113075222535363,0.6887822210592908,0.19747553631500298,0.6880627557980901,0.93232229829798,1.0 +V3 FP32 reference,europe_v3,all,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +V3 FP32 reference,europe_v3,all,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +V3 FP32 reference,europe_v3,known,species,50598,0.7105618960334976,0.21594007329351536,0.7105618960334976,0.20308773317860726,0.7974228230364837,0.9361858273521857,1.0 +V3 FP32 reference,europe_v3,known,genus,58640,0.7907835796748087,0.25581979303859764,0.7907835796748087,0.2528121859712137,0.7779160982264666,0.9297312779441991,1.0 +V3 FP32 reference,europe_v3,known,family,58640,0.804979506038197,0.25026564649749544,0.804979506038197,0.2540250081556085,0.9254945429740792,0.8384429842887284,1.0 +V3 PyTorch FP16,north_europe,all,species,58640,0.7124755690715492,0.2634270457338045,0.7124755690715492,0.25428952382168735,0.7078274215552524,0.928300449968092,1.0 +V3 PyTorch FP16,north_europe,all,genus,58640,0.8053483819748223,0.31893660877341173,0.8053483819748223,0.3204124099108478,0.7936903137789905,0.9269683891259273,1.0 +V3 PyTorch FP16,north_europe,all,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +V3 PyTorch FP16,north_europe,known,species,50598,0.7350044408208473,0.2676065928162877,0.7350044408208473,0.2606923077861283,0.8203288667536266,0.9313351406548803,1.0 +V3 PyTorch FP16,north_europe,known,genus,58639,0.8078572554389183,0.31896401442542444,0.8078572554389183,0.32088253381207055,0.7937038489742322,0.9269818797430123,1.0 +V3 PyTorch FP16,north_europe,known,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +V3 PyTorch FP16,europe,all,species,58640,0.6904573601499047,0.21308377178370788,0.6904573601499047,0.19974835307971503,0.6894270122783083,0.9327685730735747,1.0 +V3 PyTorch FP16,europe,all,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +V3 PyTorch FP16,europe,all,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +V3 PyTorch FP16,europe,known,species,50598,0.7122900039491111,0.21751022464426337,0.7122900039491111,0.2052193214139764,0.7990039131981501,0.9362130669456851,1.0 +V3 PyTorch FP16,europe,known,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +V3 PyTorch FP16,europe,known,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +V3 PyTorch FP16,full,all,species,58640,0.5800914186056899,0.11941327816354223,0.5800914186056899,0.09729142790239681,0.5842087312414734,0.9380984507134764,1.0 +V3 PyTorch FP16,full,all,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +V3 PyTorch FP16,full,all,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +V3 PyTorch FP16,full,known,species,50598,0.5984342302612058,0.12352484541958572,0.5984342302612058,0.10067516090358233,0.6770623344796237,0.9436338812191157,1.0 +V3 PyTorch FP16,full,known,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +V3 PyTorch FP16,full,known,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +V3 PyTorch FP16,north_europe_v3,all,species,58640,0.704628249754435,0.24730856379330513,0.704628249754435,0.2368364750172347,0.7031548431105048,0.9297081356830714,1.0 +V3 PyTorch FP16,north_europe_v3,all,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +V3 PyTorch FP16,north_europe_v3,all,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +V3 PyTorch FP16,north_europe_v3,known,species,50598,0.7269089849245357,0.2516551965945558,0.7269089849245357,0.24302911458287843,0.8149136329499189,0.9329238752080722,1.0 +V3 PyTorch FP16,north_europe_v3,known,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +V3 PyTorch FP16,north_europe_v3,known,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +V3 PyTorch FP16,europe_v3,all,species,58640,0.6886240058738285,0.21178593938637336,0.6886240058738285,0.1978902721150327,0.6879945429740791,0.9323203923796567,1.0 +V3 PyTorch FP16,europe_v3,all,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +V3 PyTorch FP16,europe_v3,all,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +V3 PyTorch FP16,europe_v3,known,species,50598,0.7103986779963212,0.2164221653533803,0.7103986779963212,0.20351606400355202,0.7973437685284004,0.9362292436999937,1.0 +V3 PyTorch FP16,europe_v3,known,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +V3 PyTorch FP16,europe_v3,known,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +V3 ONNX TF32,north_europe,all,species,58640,0.7123551106111988,0.2634302800489512,0.7123551106111988,0.25432102340018437,0.7078444747612551,0.9282787583085454,1.0 +V3 ONNX TF32,north_europe,all,genus,58640,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369,0.7936221009549795,0.9270081304640697,1.0 +V3 ONNX TF32,north_europe,all,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +V3 ONNX TF32,north_europe,known,species,50598,0.7348801733973236,0.26759865685833206,0.7348801733973236,0.26071387372659355,0.8203486303806474,0.931297601666784,1.0 +V3 ONNX TF32,north_europe,known,genus,58639,0.8075090522845452,0.31885723521848236,0.8075090522845452,0.32170684925385246,0.7936356349869541,0.9270216229111814,1.0 +V3 ONNX TF32,north_europe,known,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +V3 ONNX TF32,europe,all,species,58640,0.6906260019361401,0.21297537840475272,0.6906260019361401,0.19968247097445052,0.6894952251023192,0.9327107183368355,1.0 +V3 ONNX TF32,europe,all,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +V3 ONNX TF32,europe,all,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +V3 ONNX TF32,europe,known,species,50598,0.712463978281947,0.21739674629675512,0.712463978281947,0.2051505331795797,0.7990829677062334,0.9360902428349954,1.0 +V3 ONNX TF32,europe,known,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +V3 ONNX TF32,europe,known,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +V3 ONNX TF32,full,all,species,58640,0.5803258635150937,0.11940183392320727,0.5803258635150937,0.09730444648358827,0.5842769440654844,0.9381877433883671,1.0 +V3 ONNX TF32,full,all,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +V3 ONNX TF32,full,all,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +V3 ONNX TF32,full,known,species,50598,0.5986760884483774,0.12359009712973944,0.5986760884483774,0.10075026693576739,0.677141388987707,0.9437018925013999,1.0 +V3 ONNX TF32,full,known,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +V3 ONNX TF32,full,known,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +V3 ONNX TF32,north_europe_v3,all,species,58640,0.70490721102182,0.24693597388838318,0.70490721102182,0.23654830838429805,0.703206002728513,0.9297283074523651,1.0 +V3 ONNX TF32,north_europe_v3,all,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +V3 ONNX TF32,north_europe_v3,all,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +V3 ONNX TF32,north_europe_v3,known,species,50598,0.7271967671015613,0.2512627097909782,0.7271967671015613,0.24271540486034088,0.8149729238309814,0.9329324973505538,1.0 +V3 ONNX TF32,north_europe_v3,known,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +V3 ONNX TF32,north_europe_v3,known,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +V3 ONNX TF32,europe_v3,all,species,58640,0.6887960648645841,0.21168953424574674,0.6887960648645841,0.19783273588838454,0.6880627557980901,0.9322918377735964,1.0 +V3 ONNX TF32,europe_v3,all,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +V3 ONNX TF32,europe_v3,all,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +V3 ONNX TF32,europe_v3,known,species,50598,0.710576177587575,0.21632075786236368,0.710576177587575,0.2034558161613722,0.7974228230364837,0.9361375391213514,1.0 +V3 ONNX TF32,europe_v3,known,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +V3 ONNX TF32,europe_v3,known,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 diff --git a/docs/assets/mambo-accelerated-quality-all.svg b/docs/assets/mambo-accelerated-quality-all.svg new file mode 100644 index 0000000..bede7c5 --- /dev/null +++ b/docs/assets/mambo-accelerated-quality-all.svg @@ -0,0 +1,1224 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.685 + + + 0.660 + + + 0.572 + + + 0.712 + + + 0.691 + + + 0.580 + + + 0.712 + + + 0.690 + + + 0.580 + + + 0.712 + + + 0.691 + + + 0.580 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.255 + + + 0.199 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.274 + + + 0.220 + + + 0.110 + + + 0.264 + + + 0.213 + + + 0.119 + + + 0.263 + + + 0.213 + + + 0.119 + + + 0.263 + + + 0.213 + + + 0.119 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.687 + + + 0.670 + + + 0.594 + + + 0.708 + + + 0.689 + + + 0.584 + + + 0.708 + + + 0.689 + + + 0.584 + + + 0.708 + + + 0.689 + + + 0.584 + + + Micro accuracy + + + + Species quality · all truth · automatic GPU settings + + + Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images. + Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists. + + + + + + + MAMBO v2 + + + + + + V3 FP32 reference + + + + + + V3 PyTorch FP16 + + + + + + V3 ONNX TF32 + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-quality-known.svg b/docs/assets/mambo-accelerated-quality-known.svg new file mode 100644 index 0000000..5f8fc81 --- /dev/null +++ b/docs/assets/mambo-accelerated-quality-known.svg @@ -0,0 +1,1224 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.707 + + + 0.681 + + + 0.590 + + + 0.735 + + + 0.712 + + + 0.599 + + + 0.735 + + + 0.712 + + + 0.598 + + + 0.735 + + + 0.712 + + + 0.599 + + + Macro accuracy + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.265 + + + 0.205 + + + 0.092 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.261 + + + 0.205 + + + 0.101 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.279 + + + 0.225 + + + 0.113 + + + 0.268 + + + 0.217 + + + 0.123 + + + 0.268 + + + 0.218 + + + 0.124 + + + 0.268 + + + 0.217 + + + 0.124 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.796 + + + 0.776 + + + 0.688 + + + 0.820 + + + 0.799 + + + 0.677 + + + 0.820 + + + 0.799 + + + 0.677 + + + 0.820 + + + 0.799 + + + 0.677 + + + Micro accuracy + + + + Species quality · known truth · automatic GPU settings + + + Pinned mini_metrics; threshold 0, no optimization. All: 58,640 images; known: 50,598 images. + Full tables retain macro recall, Theil U, coverage and every taxonomic rank, including updated European lists. + + + + + + + MAMBO v2 + + + + + + V3 FP32 reference + + + + + + V3 PyTorch FP16 + + + + + + V3 ONNX TF32 + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-accelerated-speed.svg b/docs/assets/mambo-accelerated-speed.svg new file mode 100644 index 0000000..ce16702 --- /dev/null +++ b/docs/assets/mambo-accelerated-speed.svg @@ -0,0 +1,1240 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + Batch size + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.4 + + + 7.4 + + + 7.8 + + + Torch · CPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.4 + + + 9.7 + + + 10.8 + + + Onnx · CPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + + + + + + + 32 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 44.5 + + + 136.2 + + + Torch · GPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + + + + + + + 32 + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 83.5 + + + 42.4 + + + 111.3 + + + Onnx · GPU + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + Previous v3 FP32 + + + + + + + + + Updated v3 auto + + + + + Northern Europe: complete-pipeline batch throughput + + + Three fresh-process trials; four CPU threads; decode, preparation and CPU results included. Whiskers: trial-median range. + Updated CUDA: FP16 backbone for PyTorch, TF32 for standard ONNX. CPU: FP32. V2 CPU requires its documented input cast. + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-accelerated-deployment.md b/docs/mambo-accelerated-deployment.md new file mode 100644 index 0000000..7ccacf5 --- /dev/null +++ b/docs/mambo-accelerated-deployment.md @@ -0,0 +1,162 @@ +# Accelerated MAMBO deployment defaults + +The deployment adapter now uses existing mixed-precision facilities and faster, +pixel-preserving preparation. Model weights, standard ONNX graphs, presets and +prediction interfaces remain the same. + +| Execution | `precision="auto"` | Explicit reference | +|---|---|---| +| PyTorch CUDA | FP16 backbone autocast; FP32 classifier and embeddings | `precision="fp32"` disables autocast | +| ONNX CUDA | TF32 execution of the standard FP32 graph | `precision="fp32"` disables TF32 | +| CPU, either backend | FP32 | `precision="fp32"` | + +Native `precision="bf16"` is available on CUDA devices with native BF16 support. +It passed the 4,096-image qualification but is not the automatic choice or a +full-dataset baseline. FP16 has broader hardware support and showed smaller +sampled changes from FP32. ONNX does not inherit PyTorch autocast settings. +Native PyTorch respects caller TF32 flags; comparison runs explicitly disable +both matmul and cuDNN TF32 for its FP32 reference. + +The adapter keeps interpolation arithmetic unchanged, makes intermediate arrays +contiguous and computes only the retained crop. `threads` bounds ordered parallel +image preparation and ONNX CPU execution; use 1 for serial preparation. There is +no persistent worker service, new dependency, model conversion or additional +artifact to distribute. CPU preparation and model execution remain sequential; +more complex overlap is unnecessary for this increment. + +## Qualification + +Both native FP16/BF16 and ONNX TF32 were qualified on the same seeded 4,096-image +subset against FP32. All predictive scores use the pinned mini_metrics revision, +threshold zero and no optimization. Prepared pixels were byte-identical on 256 +real images plus frozen synthetic edge cases. Outputs and normalized embeddings +remain float32. Prediction/embedding modes agreed on the checked species labels; +custom-list filtering and same-batch embedding equivalence passed. + +The installed ONNX-only wheel also passed offline API/CLI inference with a relocated, +read-only bundle and no torch/training-package dependency. Runtime tests cover +precision routing, unsupported configurations, FP32 classifier execution under an +outer autocast context, original preprocessing pixels and ordered batching. + +## Full evaluation and timing + +Both accelerated backends completed all **58,640 Flemming images**, using the +same five presets and sample order as the FP32 reference. Every predictive metric +comes from `mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`: +`threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`. +The primary results include all truth, including species outside the selected list. +Known-truth results retain 50,598 images at species level; membership is checked +separately at each rank. The [metric definitions](mambo-release-comparison.md#prediction-quality) +explain the different macro denominators, including predicted-only classes in F1. + +| Preset | v2 macro accuracy | v3 FP32 | v3 PyTorch FP16 | v3 ONNX TF32 | +|---|---:|---:|---:|---:| +| Northern Europe | 68.52% | 71.24% | 71.25% | 71.24% | +| Europe | 66.04% | 69.06% | 69.05% | 69.06% | +| Global | 57.21% | 58.03% | 58.01% | 58.03% | +| Updated northern Europe | — | 70.49% | 70.46% | 70.49% | +| Updated Europe | — | 68.88% | 68.86% | 68.88% | + +These are **macro species accuracies over all truth**. Northern-Europe macro-F1 +is 0.2575 for v2, 0.2545 for v3 FP32, and 0.2543 for both accelerated paths. +The updated northern-Europe list gives 0.2368 / 0.2365 for PyTorch / ONNX. +Broader occurrence coverage changes the candidate vocabulary; these lists were +not tuned to Flemming. No precision variant uniformly improves every score. Across all five presets, +three ranks and both truth populations, the largest macro-accuracy difference +from FP32 is below 0.094 percentage points. + +![Macro-led species quality over all truth](assets/mambo-accelerated-quality-all.svg) + +![Macro-led species quality over known truth](assets/mambo-accelerated-quality-known.svg) + +The [complete metric CSV](assets/mambo-accelerated-metrics.csv) retains 108 rows / +756 scores: macro accuracy, precision, recall and F1, micro accuracy, Theil U and +coverage, at species/genus/family level for both populations and all five v3 lists. +The [compact evidence](assets/mambo-accelerated-comparison.json) includes hashes +and can regenerate the figures without access to the image dataset. + +### Speed and memory + +![Complete-pipeline throughput by batch size](assets/mambo-accelerated-speed.svg) + +Northern Europe, **images per second** (higher is better): + +| Pipeline | CPU batch 1 | CPU batch 8 | GPU batch 1 | GPU batch 8 | GPU batch 32 | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 1.39 | 45.2 | 44.8 | 83.5 | +| Original v3 PyTorch FP32 | 6.74 | 7.39 | 27.1 | 46.6 | 44.5 | +| Updated v3 PyTorch auto | 5.70 | 7.84 | 29.8 | 126.7 | **136.2** | +| Original v3 ONNX FP32 | 9.64 | 9.71 | 30.4 | 42.8 | 42.4 | +| Updated v3 ONNX auto | 10.08 | 10.81 | 46.7 | 114.1 | **111.3** | + +At GPU batch 32, updated PyTorch is **3.06×** its original throughput and ONNX +is **2.62×**. Both exceed v2 here. Native batch-1 CPU throughput is lower in this +campaign (5.70 versus 6.74); this is not a uniform CPU speedup. Its trial medians +range from 5.45 to 6.45 images/s, and batch-8 results from 6.66 to 9.24. +ONNX CPU improves modestly. Batch 8 already approaches the new GPU throughput +limit, particularly for ONNX; larger batches are not always faster. + +![Peak host memory for the complete sweep](assets/mambo-accelerated-memory.svg) + +| Updated runtime | CPU peak host RSS | GPU-run peak host RSS | CPU loading + first image | GPU loading + first image | +|---|---:|---:|---:|---:| +| PyTorch | 1,618 MiB | 2,512 MiB | 42.04 s | 42.96 s | +| ONNX | 689 MiB | 1,619 MiB | 0.37 s | 1.46 s | + +Host memory increases versus the previous v3 sweep, while remaining below v2. +Native peak allocated GPU memory falls from 865 to **598 MiB** (v2: 1,936 MiB). +These are PyTorch allocator counters, not total device memory; an equivalent ONNX +allocator peak is unavailable. Host RSS includes loading and the entire batch +sweep. Startup excludes interpreter launch and explicit runtime setup. Reuse a +loaded predictor; native classifier initialization remains a separate core issue. + +These compare the combined adapter changes against the recorded pre-change +pipeline on the same i7-12800H / RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, +on AC power. They do not isolate AMP from preprocessing, and laptop conditions +vary between runs. Three fresh-process trials use the same seeded image bank, +four CPU threads, two warmups and seven observations per cell. Error bars show +the range of trial medians; reported throughput uses the median of all 21 +observations. All speed figures include decoding, preparation, inference and +completed CPU results. Native CPU model threads were also explicitly set to four. +The v2 CPU result requires its documented caller-side float32 input cast. + +GPU scaling still saturates: preparation and execution remain sequential, and +classification/result handling also consume time. This increment removes major +avoidable costs without adding a streaming scheduler or changing model artifacts. + +In-domain evaluation on UCloud, other operating systems and publication review +remain separate release gates. BF16 has subset qualification only. The +[original FP32 comparison](mambo-release-comparison.md) remains available as the +pre-optimization reference. No new model artifacts or quantization are involved. + +## Reproduce + +Use the existing environment without dependency synchronization. The metrics +environment stays pinned as described in the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). + +```sh +python -m dev.releases.mambo_v3.qualify_precision \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --output /path/to/new-native-qualification \ + --backend torch --precisions fp32 fp16 bf16 +python -m dev.releases.mambo_v3.qualify_precision \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --output /path/to/new-onnx-qualification \ + --backend onnx --precisions fp32 tf32 +python -m dev.releases.mambo_v3.run_local full --precision auto \ + --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-full-quality +/path/to/metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ + --collection /path/to/new-full-quality +python -m dev.releases.mambo_v3.benchmark_acceleration \ + --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-timings +python -m dev.releases.mambo_v3.acceleration_report \ + --reference docs/assets/mambo-release-comparison.json \ + --quality /path/to/new-full-quality --performance /path/to/new-timings \ + --output /path/to/charts +``` + +Run timing processes sequentially, with no competing GPU or CPU qualification. diff --git a/docs/mambo-batch-scaling.md b/docs/mambo-batch-scaling.md index 86d7af4..c13af2e 100644 --- a/docs/mambo-batch-scaling.md +++ b/docs/mambo-batch-scaling.md @@ -1,5 +1,10 @@ # Why MAMBO v3 batch throughput plateaus +This records the pre-optimization diagnosis at commit `a99b855`. See the +[accelerated deployment qualification](mambo-accelerated-deployment.md) for the +implemented fixes and their new measurements. Historical preprocessing probes +should be replayed from that commit, since the current adapter is optimized. + The plateau comes from **serial, allocation-heavy CPU preprocessing plus a strict FP32 convolutional backend that gains little throughput beyond batch 8**. It is not a batch-size parameter being ignored. Forward hooks observed exactly diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md index 3bcd82d..116c910 100644 --- a/docs/mambo-release-comparison.md +++ b/docs/mambo-release-comparison.md @@ -1,5 +1,9 @@ # MAMBO_v2 → v3: real-world deployment comparison +The v3 figures below preserve the **original FP32 reference pipeline**. The +[accelerated-default comparison](mambo-accelerated-deployment.md) adds the updated +PyTorch FP16 / ONNX TF32 results and the complete-pipeline speed improvements. + This compares the models and inference pipelines used by the two releases on the same **58,640 Flemming images** and the same laptop. **Northern Europe is the lead preset for Flemming**; Europe and global show how the result changes with a broader diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index da07e88..f20b0eb 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -604,8 +604,11 @@ this release's critical path. Additional OS and clean CUDA installation checks are needed before making broader support claims. Batch scaling has been [diagnosed](mambo-batch-scaling.md): serial non-contiguous -NumPy interpolation and the strict FP32 backbone limit throughput. Next qualify -pixel-preserving preparation changes and bounded overlap; retain existing measured -baselines until fresh end-to-end qualification. The broader +NumPy interpolation and the strict FP32 backbone limited throughput. The +[accelerated deployment defaults](mambo-accelerated-deployment.md) now use +pixel-preserving preparation, bounded preparation threads, native backbone AMP +and ONNX TF32 through existing facilities. Both automatic GPU variants have full +Flemming evaluation; BF16 has subset qualification. No shared-core changes or +new model artifacts were needed. The broader [metric baseline](mambo-release-comparison.md) now leads with macro scores and retains all/known-truth results at every rank. From aff14ed7706432615a10b4d4ca2591ec075013d4 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 00:07:20 +0200 Subject: [PATCH 034/221] feat: add outer deployment TTA and qualify release tradeoffs --- deployment/README.md | 57 +- deployment/mambo_deploy/__init__.py | 3 +- deployment/mambo_deploy/augmentation.py | 123 + deployment/mambo_deploy/cli.py | 5 + deployment/mambo_deploy/predictor.py | 27 +- .../mambo_v3/check_portable_install.py | 11 +- dev/releases/mambo_v3/evaluate.py | 30 +- dev/releases/mambo_v3/frequency_comparison.py | 205 + dev/releases/mambo_v3/loading_charts.py | 109 + dev/releases/mambo_v3/loading_scaling.py | 98 + dev/releases/mambo_v3/qualify_bundle.py | 9 +- dev/releases/mambo_v3/qualify_tta.py | 140 + dev/releases/mambo_v3/tta_candidates.py | 64 + dev/releases/mambo_v3/tta_charts.py | 121 + dev/releases/mambo_v3/tta_report.py | 64 + docs/assets/mambo-frequency-accuracy.svg | 1465 ++ docs/assets/mambo-frequency-comparison.json | 4657 +++++ docs/assets/mambo-loading-scaling.json | 274 + docs/assets/mambo-loading-scaling.svg | 870 + docs/assets/mambo-tta-comparison.json | 14750 ++++++++++++++++ docs/assets/mambo-tta-tradeoffs.json | 479 + docs/assets/mambo-tta-tradeoffs.svg | 864 + docs/mambo-frequency-comparison.md | 53 + docs/mambo-loading-scaling.md | 74 + docs/mambo-tta.md | 243 + docs/ucloud-model-release-roadmap.md | 8 + tests/releases/test_deployment.py | 133 + 27 files changed, 24912 insertions(+), 24 deletions(-) create mode 100644 deployment/mambo_deploy/augmentation.py create mode 100644 dev/releases/mambo_v3/frequency_comparison.py create mode 100644 dev/releases/mambo_v3/loading_charts.py create mode 100644 dev/releases/mambo_v3/loading_scaling.py create mode 100644 dev/releases/mambo_v3/qualify_tta.py create mode 100644 dev/releases/mambo_v3/tta_candidates.py create mode 100644 dev/releases/mambo_v3/tta_charts.py create mode 100644 dev/releases/mambo_v3/tta_report.py create mode 100644 docs/assets/mambo-frequency-accuracy.svg create mode 100644 docs/assets/mambo-frequency-comparison.json create mode 100644 docs/assets/mambo-loading-scaling.json create mode 100644 docs/assets/mambo-loading-scaling.svg create mode 100644 docs/assets/mambo-tta-comparison.json create mode 100644 docs/assets/mambo-tta-tradeoffs.json create mode 100644 docs/assets/mambo-tta-tradeoffs.svg create mode 100644 docs/mambo-frequency-comparison.md create mode 100644 docs/mambo-loading-scaling.md create mode 100644 docs/mambo-tta.md diff --git a/deployment/README.md b/deployment/README.md index bd44d30..e0799fb 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -97,8 +97,44 @@ configure PyTorch model threads separately. Use `--threads 1` for serial prepara wheel defaults to ONNX/CPU; the training-wheel entry point retains native/CUDA defaults, so explicit backend/device arguments are recommended in scripts. +## Optional test-time augmentation + +TTA runs as an outer process: transform the decoded image, use the normal +preprocessing and backend, then average species logits before preset filtering +and hierarchical reduction. It is **off by default**. + +```python +predictor = Predictor(bundle, backend="onnx", model="north_europe", tta="d4") +result = predictor.predict(images) +``` + +Whole-image profiles are `hflip` (2 views), `d4` (8 rotations/reflections), +and `light_noise` (original + two seeded 1% salt-and-pepper views). Experimental +`five_crop` and `ten_crop` profiles are also available; these can remove diagnostic +parts of a specimen and performed worse in the local subset comparison. Each model call stays within `batch_size`; images +are decoded once per batch. More views cost more inference and preparation. +Embeddings are the normalized mean of the view embeddings, not the single-view +representation. TTA quality qualification and exact semantics are in the +[TTA guide](../docs/mambo-tta.md). + +Custom policies use the same outer layer, independently of backend or preset: + +```python +from mambo_deploy import TTA, SaltAndPepper, View + +policy = TTA((View(), View(quarter_turns=1), SaltAndPepper(seed=7)), name="orientation-noise") +predictor = Predictor(bundle, backend="torch", tta=policy) +``` + +A policy can also contain your own callables: each receives a separate decoded +uint8 CHW image and returns an image accepted by the normal preprocessing API. +The CLI supports the named profiles through `--tta`. + ## Qualification +The release comparisons below use **TTA off**. Augmented results are reported +separately in the [TTA guide](../docs/mambo-tta.md). + In the strict FP32 reference evaluation on all 58,640 Flemming images, PyTorch and ONNX return identical top-1 species, genus and family labels for the full list and both legacy/updated European presets. @@ -115,8 +151,9 @@ northern-Europe preset, the updated defaults deliver: | Runtime | CPU, batch 1 | GPU, batch 1 | GPU, batch 8 | GPU, batch 32 | |---|---:|---:|---:|---:| -| ONNX auto | 10.1 | 46.7 | 114.1 | 111.3 | -| PyTorch auto | 5.7 | 29.8 | 126.7 | 136.2 | +| MAMBO v2 (CPU input adapter) | 1.3 | 45.2 | 44.8 | 83.5 | +| V3 ONNX auto | 10.1 | 46.7 | 114.1 | 111.3 | +| V3 PyTorch auto | 5.7 | 29.8 | 126.7 | 136.2 | All speeds are **images per second**, including decoding, preparation and result handling. GPU batch-32 throughput improves by **2.62× ONNX / 3.06× PyTorch** over @@ -131,6 +168,22 @@ Europe macro species accuracy is **71.25% PyTorch / 71.24% ONNX**; macro-F1 is three ranks and both truth populations is under 0.094 percentage points. BF16 has 4,096-image qualification only. Small cross-precision label differences are expected. +The unthresholded, all-truth **species** comparison is: + +| Preset | V2 macro accuracy | V3 PyTorch / ONNX | V2 macro-F1 | V3 PyTorch / ONNX | +|---|---:|---:|---:|---:| +| Northern Europe | 68.52% | 71.25% / 71.24% | 0.2575 | 0.2543 / 0.2543 | +| Europe | 66.04% | 69.05% / 69.06% | 0.2000 | 0.1997 / 0.1997 | +| Global | 57.21% | 58.01% / 58.03% | 0.0899 | 0.0973 / 0.0973 | + +The [frequency curves](../docs/mambo-frequency-comparison.md) compare both training +metadata counts and Flemming image counts. The [loading study](../docs/mambo-loading-scaling.md) +separates preparation from prepared-input inference: the remaining plateau is partly +loading/scheduling, not solely model throughput. `preprocess_workers` (CLI: +`--preprocess-workers`) controls preparation separately from ONNX runtime `threads`; +it defaults to the latter. Tune workers with batch size and CPU limits rather than +assuming more threads always help. + The [accelerated comparison and charts](../docs/mambo-accelerated-deployment.md) cover speed, memory, all/known-truth metrics and updated European lists. The [original v2/v3 comparison](../docs/mambo-release-comparison.md) preserves the FP32 diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py index 1d5afca..cd1344c 100644 --- a/deployment/mambo_deploy/__init__.py +++ b/deployment/mambo_deploy/__init__.py @@ -1,6 +1,7 @@ """Offline model-bundle inference; importing this package does not import PyTorch.""" +from .augmentation import TTA, SaltAndPepper, View from .predictor import Predictor from .results import Prediction, PredictionItem -__all__ = ["Predictor", "Prediction", "PredictionItem"] +__all__ = ["Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py new file mode 100644 index 0000000..b201113 --- /dev/null +++ b/deployment/mambo_deploy/augmentation.py @@ -0,0 +1,123 @@ +"""Outer, runtime-independent TTA over decoded CHW images.""" + +import hashlib +from dataclasses import dataclass +from functools import partial + +import numpy as np + +from .preprocessing import _rgb, preprocess + + +@dataclass(frozen=True) +class View: + """Fractional crop (top, left, bottom, right), quarter turns, then reflection.""" + + crop: tuple = (0, 0, 1, 1) + quarter_turns: int = 0 + hflip: bool = False + + def __post_init__(self): + top, left, bottom, right = self.crop + if not (0 <= top < bottom <= 1 and 0 <= left < right <= 1): + raise ValueError("View crop must be a nonempty fractional box within [0,1]") + if not isinstance(self.quarter_turns, int): + raise ValueError("quarter_turns must be an integer") + + def __call__(self, image): + top, left, bottom, right = self.crop + height, width = image.shape[1:] + y, x = int(top * height), int(left * width) + result = image[:, y : max(y + 1, int(bottom * height)), x : max(x + 1, int(right * width))] + result = np.rot90(result, self.quarter_turns, axes=(1, 2)) + return result[..., ::-1] if self.hflip else result + + +@dataclass(frozen=True) +class SaltAndPepper: + """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" + + proportion: float = 0.01 + seed: int = 0 + + def __post_init__(self): + if not 0 <= self.proportion <= 1: + raise ValueError("Noise proportion must be in [0,1]") + if not isinstance(self.seed, int) or self.seed < 0: + raise ValueError("Noise seed must be a nonnegative integer") + + def __call__(self, image): + image = np.ascontiguousarray(image) + fingerprint = int.from_bytes(hashlib.blake2b(image.data, digest_size=8).digest(), "little") + rng = np.random.default_rng([self.seed, fingerprint]) + draws = rng.random(image.shape[1:]) + result = image.copy() + result[:, draws < self.proportion / 2] = 0 + result[:, (draws >= self.proportion / 2) & (draws < self.proportion)] = 255 + return result + + +@dataclass(frozen=True) +class TTA: + """Named finite transforms; each callable receives its own uint8 CHW image copy.""" + + transforms: tuple + name: str = "custom" + + def __post_init__(self): + object.__setattr__(self, "transforms", tuple(self.transforms)) + if not self.transforms or not all(callable(view) for view in self.transforms): + raise ValueError("TTA requires one or more callable transforms") + if not isinstance(self.name, str) or not self.name: + raise ValueError("TTA name must be a nonempty string") + + +PROFILES = ("none", "hflip", "five_crop", "ten_crop", "d4", "light_noise") + + +def resolve_tta(value): + if isinstance(value, TTA): + return value + if value not in PROFILES: + raise ValueError(f"tta must be a TTA object or one of {PROFILES}") + if value == "none": + return None + if value == "hflip": + views = (View(), View(hflip=True)) + elif value == "light_noise": + views = (View(), SaltAndPepper(seed=0), SaltAndPepper(seed=1)) + elif value == "d4": + views = tuple(View(quarter_turns=k, hflip=flip) for flip in (False, True) for k in range(4)) + else: + # Original framing plus four corner crops covering 90% on each axis. + boxes = ((0, 0, 1, 1), (0, 0, 0.9, 0.9), (0, 0.1, 0.9, 1), (0.1, 0, 1, 0.9), (0.1, 0.1, 1, 1)) + views = tuple(View(crop=box, hflip=flip) for flip in ((False, True) if value == "ten_crop" else (False,)) for box in boxes) + return TTA(views, value) + + +def _prepare_view(image, transform): + return preprocess(transform(image.copy())) + + +def infer_augmented(runtime, items, tta, embeddings=False, pool=None): + """Generate a view, run ordinary preprocessing/inference, then aggregate leaves.""" + + def mapped(fn, values): + return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] + + decoded = mapped(_rgb, items) + leaves, vectors = None, None + for transform in tta.transforms: + prepared = np.stack(mapped(partial(_prepare_view, transform=transform), decoded)) + scores, embedding = runtime(prepared, embeddings) + scores = scores.astype(np.float32) / np.float32(len(tta.transforms)) + leaves = scores if leaves is None else leaves + scores + if embeddings: + embedding = embedding.astype(np.float32) / np.float32(len(tta.transforms)) + vectors = embedding if vectors is None else vectors + embedding + if embeddings: + norms = np.linalg.norm(vectors, axis=1, keepdims=True) + if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): + raise RuntimeError("TTA produced an undefined mean embedding") + vectors /= norms + return leaves, vectors diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py index a39a5e8..33604f3 100644 --- a/deployment/mambo_deploy/cli.py +++ b/deployment/mambo_deploy/cli.py @@ -6,6 +6,7 @@ import numpy as np +from .augmentation import PROFILES from .predictor import Predictor @@ -21,6 +22,8 @@ def run(default_backend="onnx", default_device="cpu"): parser.add_argument("--batch-size", type=int, default=8) parser.add_argument("--threads", type=int, default=2) parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="auto") + parser.add_argument("--tta", choices=PROFILES, default="none") + parser.add_argument("--preprocess-workers", type=int, help="Preparation threads; defaults to --threads") parser.add_argument("--topk", type=int, default=1) parser.add_argument("--threshold", type=float, default=0) parser.add_argument("--embeddings", action="store_true") @@ -51,6 +54,8 @@ def run(default_backend="onnx", default_device="cpu"): batch_size=args.batch_size, threads=args.threads, precision=args.precision, + tta=args.tta, + preprocess_workers=args.preprocess_workers, ) result = predictor.predict_with_embeddings(paths, args.topk) if args.embeddings else predictor.predict(paths, args.topk) if args.embeddings: diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 0eccd15..cc70c8d 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -11,6 +11,7 @@ import numpy as np +from .augmentation import infer_augmented, resolve_tta from .bundle import Bundle from .preprocessing import RECIPE, image_items, preprocess from .results import Prediction, hierarchy @@ -30,6 +31,8 @@ def __init__( batch_size=8, threads=2, precision="auto", + tta="none", + preprocess_workers=None, ): if backend not in ("torch", "onnx"): raise ValueError("backend must be 'torch' or 'onnx'") @@ -37,6 +40,10 @@ def __init__( raise ValueError("device must be cpu, cuda or cuda:N") if not isinstance(batch_size, int) or batch_size < 1 or not isinstance(threads, int) or threads < 1: raise ValueError("batch_size and threads must be positive integers") + self.tta = resolve_tta(tta) + self.preprocess_workers = threads if preprocess_workers is None else preprocess_workers + if not isinstance(self.preprocess_workers, int) or self.preprocess_workers < 1: + raise ValueError("preprocess_workers must be a positive integer") if precision not in ("auto", "fp32", "fp16", "bf16", "tf32"): raise ValueError("precision must be auto, fp32, fp16, bf16 or tf32") self.precision = precision @@ -224,16 +231,24 @@ def _torch(self, images, embeddings): embedding = head.preclassification(features).cpu().numpy() if embeddings else None return output[0].float().cpu().numpy(), embedding + def _prepare(self, batch, pool=None): + return np.stack(list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch]) + + def _infer(self, images, embeddings=False): + return (self._torch if self.backend == "torch" else self._onnx)(images, embeddings) + + def _infer_batch(self, batch, embeddings=False, pool=None): + if self.tta is not None: + return infer_augmented(self._infer, batch, self.tta, embeddings, pool) + return self._infer(self._prepare(batch, pool), embeddings) + def _predict(self, x, embeddings=False, topk=1): with self._lock: leaf_batches, embedding_batches = [], [] items = image_items(x) - with ThreadPoolExecutor(max_workers=self.threads) if self.threads > 1 else nullcontext(None) as pool: + with ThreadPoolExecutor(max_workers=self.preprocess_workers) if self.preprocess_workers > 1 else nullcontext(None) as pool: while batch := list(islice(items, self.batch_size)): - images = np.stack( - list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch] - ) - leaves, vectors = self._torch(images, embeddings) if self.backend == "torch" else self._onnx(images, embeddings) + leaves, vectors = self._infer_batch(batch, embeddings, pool) if not np.isfinite(leaves).all(): raise RuntimeError("Model returned non-finite species scores") leaf_batches.append(leaves) @@ -252,6 +267,8 @@ def _predict(self, x, embeddings=False, topk=1): preset=self.preset, class_list_sha256=self.class_list_sha256, precision=self.effective_precision, + tta=self.tta.name if self.tta else "none", + tta_views=len(self.tta.transforms) if self.tta else 1, ) return (result, np.concatenate(embedding_batches)) if embeddings else result diff --git a/dev/releases/mambo_v3/check_portable_install.py b/dev/releases/mambo_v3/check_portable_install.py index 2007511..0d057fb 100644 --- a/dev/releases/mambo_v3/check_portable_install.py +++ b/dev/releases/mambo_v3/check_portable_install.py @@ -12,7 +12,7 @@ from pathlib import Path -def check(bundle, image): +def check(bundle, image, tta="none"): if importlib.util.find_spec("torch") or importlib.util.find_spec("mini_trainer"): raise AssertionError("Run this check in an ONNX-only environment without torch or mini_trainer") from mambo_deploy import Predictor @@ -38,16 +38,16 @@ def deny_network(*args, **kwargs): for path in [relocated, *[p for p in relocated.rglob("*") if p.is_dir()]]: path.chmod(0o555) os.chdir(root) - predictor = Predictor(relocated, model="europe") + predictor = Predictor(relocated, model="europe", tta=tta) plain = predictor.predict(image) embedded, vectors = predictor.predict_with_embeddings(image) assert plain.labels == embedded.labels and vectors.shape == (1, 1280) - sys.argv = ["mambo_predict", "-i", str(image), "--bundle", str(relocated), "--embeddings"] + sys.argv = ["mambo_predict", "-i", str(image), "--bundle", str(relocated), "--embeddings", "--tta", tta] run() assert (root / "results/mini_metric.csv").is_file() assert (root / "results/embeddings.npy").is_file() assert before == {str(path.relative_to(relocated)): hashlib.sha256(path.read_bytes()).hexdigest() for path in files} - return {"torch_absent": True, "relocated_read_only_bundle": True, "python_network_blocked": True, "cli": True} + return {"torch_absent": True, "relocated_read_only_bundle": True, "python_network_blocked": True, "cli": True, "tta": tta} finally: os.chdir(original_cwd) sys.argv = original_argv @@ -59,7 +59,8 @@ def deny_network(*args, **kwargs): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("bundle", type=Path) parser.add_argument("image", type=Path) + parser.add_argument("--tta", default="none") parser.add_argument("--output", type=Path, required=True) args = parser.parse_args() - report = check(args.bundle.resolve(), args.image.resolve()) + report = check(args.bundle.resolve(), args.image.resolve(), args.tta) args.output.write_text(json.dumps(report, indent=2) + "\n") diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 9275d97..2e2d528 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -58,7 +58,13 @@ def collect(args): write_json(output / "samples.json", records) report["sample_ids_sha256"] = file_hash(output / "samples.json") predictor = Predictor( - args.bundle, backend=args.backend, device=args.device, model="full", threads=args.threads, precision=args.precision + args.bundle, + backend=args.backend, + device=args.device, + model="full", + threads=args.threads, + precision=args.precision, + tta=getattr(args, "tta", "none"), ) report["effective_precision"] = predictor.effective_precision report["runtime"].update( @@ -92,7 +98,12 @@ def collect(args): embeddings = None if args.embeddings: embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) - timings = {"decode_preprocess_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} + timings = { + "decode_preprocess_seconds": 0.0, + "runtime_seconds": 0.0, + "reduce_write_seconds": 0.0, + "tta_prepare_infer_seconds": 0.0, + } for offset in range(0, len(records), args.batch_size): batch = records[offset : offset + args.batch_size] paths = [args.root / r["path"] for r in batch] @@ -100,11 +111,15 @@ def collect(args): if file_hash(path) != record["sha256"]: raise ValueError(f"Image bytes changed: {path}") t = time.perf_counter() - images = prepare_batch(paths, pool) - timings["decode_preprocess_seconds"] += time.perf_counter() - t - t = time.perf_counter() - leaf, vectors = (predictor._torch if args.backend == "torch" else predictor._onnx)(images, args.embeddings) - timings["runtime_seconds"] += time.perf_counter() - t + if predictor.tta is not None: + leaf, vectors = predictor._infer_batch(paths, args.embeddings, pool) + timings["tta_prepare_infer_seconds"] += time.perf_counter() - t + else: + images = predictor._prepare(paths, pool) + timings["decode_preprocess_seconds"] += time.perf_counter() - t + t = time.perf_counter() + leaf, vectors = predictor._infer(images, args.embeddings) + timings["runtime_seconds"] += time.perf_counter() - t if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): raise ValueError("Invalid leaf scores") if embeddings is not None: @@ -151,6 +166,7 @@ def main(): run.add_argument("--backend", choices=["torch", "onnx"], required=True) run.add_argument("--device", default="cpu") run.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + run.add_argument("--tta", choices=["none", "hflip", "five_crop", "ten_crop", "d4", "light_noise"], default="none") run.add_argument("--embeddings", action="store_true") run.add_argument("--count", type=int) run.add_argument("--seed", type=int, default=20260923) diff --git a/dev/releases/mambo_v3/frequency_comparison.py b/dev/releases/mambo_v3/frequency_comparison.py new file mode 100644 index 0000000..671a236 --- /dev/null +++ b/dev/releases/mambo_v3/frequency_comparison.py @@ -0,0 +1,205 @@ +"""Compare pinned mini_metrics accuracy by training and evaluation class support.""" + +import argparse +import importlib.metadata +import json +import tomllib +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json + +BINS = { + "training": [(0, 1), (1, 25), (25, 100), (100, 500), (500, 2000), (2000, 10000), (10000, None)], + "flemming": [(1, 5), (5, 20), (20, 100), (100, 500), (500, None)], +} +PRESETS = ("north_europe", "europe", "full") + + +def counts(args): + import pyarrow as pa + import pyarrow.compute as pc + import pyarrow.parquet as pq + + source = tomllib.loads(Path("dev/releases/mambo_v3/construction.toml").read_text())["source"] + if file_hash(args.metadata) != source["sha256"]: + raise ValueError("Metadata differs from pinned release source") + table = pq.read_table(args.metadata, columns=["speciesKey", "set"]) + splits = pc.cast(table["set"], pa.int32()) + if splits.null_count or table["speciesKey"].null_count: + raise ValueError("Missing split or species") + if not pc.all(pc.and_(pc.greater_equal(splits, 0), pc.less_equal(splits, 9))).as_py(): + raise ValueError("Unexpected split codes") + train = table.filter(pc.greater_equal(splits, 2)) + frequencies = {str(row["values"]): row["counts"] for row in train["speciesKey"].value_counts().to_pylist()} + write_json( + args.output, + { + "metadata_sha256": source["sha256"], + "training_rows": train.num_rows, + "counts": frequencies, + "definition": "V3 source metadata rows with set 2..9; 0=test, 1=validation; no extra deduplication. " + "Common reference axis, not a claim about V2 effective training exposures.", + }, + ) + + +def measure(args): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) + if provenance["vcs_info"]["commit_id"] != REVISION: + raise ValueError("Wrong mini_metrics revision") + training = json.loads(args.counts.read_text()) + roots = {"v2": args.v2, "v3-torch": args.v3 / "torch-cuda-0-prediction", "v3-onnx": args.v3 / "onnx-cuda-0-prediction"} + result = { + "revision": REVISION, + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "training_definition": training["definition"], + "metadata_sha256": training["metadata_sha256"], + "training_rows": training["training_rows"], + "bins": BINS, + "cells": [], + "source_sha256": {}, + } + identity = None + for model, root in roots.items(): + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete quality run") + for preset in PRESETS: + source = root / preset / "mini_metric.csv" + digest = file_hash(source) + if digest != report["csv_sha256"][preset]: + raise ValueError("Changed prediction CSV") + data = MetricDF.from_source(source) + data = data[np.asarray(data.level) == 0] + if np.any(data.threshold != 0): + raise ValueError("Expected unthresholded predictions") + current = sorted(zip(data.filename.tolist(), data.label.tolist(), strict=True)) + if identity is None: + identity = current + support = Counter(data.label.tolist()) + result["species_support"] = { + label: {"flemming": n, "training": training["counts"].get(label, 0)} for label, n in sorted(support.items()) + } + if current != identity: + raise ValueError("Evaluation populations differ") + result["source_sha256"][str(source)] = digest + for axis, bins in BINS.items(): + values = np.array([result["species_support"][label][axis] for label in data.label]) + for lower, upper in bins: + selected = (values >= lower) & (values < upper if upper is not None else True) + subset = data[selected] + cell = { + "model": model, + "preset": preset, + "axis": axis, + "lower": lower, + "upper": upper, + "images": len(subset), + "species": len(set(subset.label)), + "known_images": int(np.asarray(subset.known_label).sum()), + } + for scope, known in (("all", False), ("known", True)): + cell[scope] = ( + finite_json( + evaluate_file( + subset, + threshold=0, + optimal=False, + known_only=known, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy)$", + verbose=0, + ) + ) + if (cell["known_images"] if known else cell["images"]) + else None + ) + result["cells"].append(cell) + print(model, preset, flush=True) + write_json(args.output, result) + + +def render(args): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + data = json.loads(args.data.read_text()) + plt.rcParams.update( + { + "svg.fonttype": "none", + "svg.hashsalt": "mambo-frequency-v1", + "axes.spines.top": False, + "axes.spines.right": False, + "font.size": 10, + } + ) + fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharey=True) + for row, axis in enumerate(BINS): + bins = data["bins"][axis] + for col, preset in enumerate(PRESETS): + ax = axes[row, col] + for model, label, color in [("v2", "V2", "#8064a2"), ("v3-torch", "V3 PyTorch", "#098e92"), ("v3-onnx", "V3 ONNX", "#e8872e")]: + cells = [c for c in data["cells"] if c["model"] == model and c["preset"] == preset and c["axis"] == axis] + values = [c["all"]["accuracy"]["0"] if c["all"] else np.nan for c in cells] + ax.plot(range(len(bins)), values, marker="o", label=label, color=color, linestyle="--" if model == "v3-onnx" else "-") + counts = [str(c["species"]) for c in cells] + labels = [ + ("0" if lo == 0 else f"{lo}–{hi - 1}" if hi else f"{lo}+") + "\nn=" + n for (lo, hi), n in zip(bins, counts, strict=True) + ] + ax.set( + xticks=range(len(bins)), + xticklabels=labels, + ylim=(0, 1.05), + title={"north_europe": "Northern Europe", "europe": "Europe", "full": "Global"}[preset], + xlabel="V3 training metadata rows / species" if axis == "training" else "Flemming images / species", + ) + ax.tick_params(axis="x", labelsize=8) + ax.grid(axis="y", alpha=0.2) + if col == 0: + ax.set_ylabel("Macro species accuracy") + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) + fig.suptitle("Accuracy versus class frequency · all Flemming truth", fontsize=16) + fig.text( + 0.02, + 0.015, + "Pinned mini_metrics, no threshold optimization. n = species per bin; gaps = empty bins. " + "All 522 truth species retained.\nTraining axis uses the common V3 source split (set 2–9), not verified V2 training exposure. " + "Curves are descriptive; small bins are uncertain.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.08, 1, 0.91)) + args.output.mkdir(parents=True, exist_ok=True) + svg = args.output / "mambo-frequency-accuracy.svg" + fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(args.output / "mambo-frequency-accuracy.png", dpi=160, bbox_inches="tight") + plt.close(fig) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + sub = parser.add_subparsers(dest="command", required=True) + prepare = sub.add_parser("counts") + prepare.add_argument("--metadata", type=Path, required=True) + compute = sub.add_parser("measure") + for name in ("counts", "v2", "v3"): + compute.add_argument("--" + name, type=Path, required=True) + plot = sub.add_parser("render") + plot.add_argument("--data", type=Path, required=True) + for command in (prepare, compute, plot): + command.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.command != "render" and args.output.exists(): + raise FileExistsError(args.output) + {"counts": counts, "measure": measure, "render": render}[args.command](args) diff --git a/dev/releases/mambo_v3/loading_charts.py b/dev/releases/mambo_v3/loading_charts.py new file mode 100644 index 0000000..1f9f6ba --- /dev/null +++ b/dev/releases/mambo_v3/loading_charts.py @@ -0,0 +1,109 @@ +"""Render worker scaling and experimental lookahead with matching throughput units.""" + +import argparse +import json +import statistics +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + + +def aggregate(root): + result = {"cells": [], "streams": [], "sources_sha256": {}} + for backend in ("torch", "onnx"): + path = root / f"mambo-loading-scaling-{backend}" / "report.json" + data = json.loads(path.read_text()) + if data["status"] != "complete": + raise ValueError("Incomplete diagnostic") + result["sources_sha256"][str(path)] = file_hash(path) + for batch in (8, 32, 64): + for workers in (1, 2, 4, 8): + cells = [c for c in data["cells"] if c["batch"] == batch and c["workers"] == workers] + if len(cells) != 3: + raise ValueError("Missing trials") + cell = {"backend": backend, "batch": batch, "workers": workers} + for boundary in ("preparation", "prepared", "end_to_end"): + cell[boundary] = batch / statistics.median(v for c in cells for v in c[boundary]["seconds"]) + result["cells"].append(cell) + result["streams"].extend( + {"backend": backend, "workers": x["workers"], "overlap": x["overlap"], "images_per_second": x["images"] / x["median_seconds"]} + for x in data["streams"] + ) + return result + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-loading-v1", "axes.spines.top": False, "axes.spines.right": False}) + fig, axes = plt.subplots(1, 3, figsize=(14, 4.8)) + for ax, backend in zip(axes[:2], ("torch", "onnx"), strict=True): + for batch, color in zip((8, 32, 64), ("#8064a2", "#098e92", "#e8872e"), strict=True): + cells = [c for c in data["cells"] if c["backend"] == backend and c["batch"] == batch] + ax.plot([c["workers"] for c in cells], [c["end_to_end"] for c in cells], marker="o", label=f"Batch {batch}", color=color) + ax.set( + title=f"{backend.title()} · synchronous API", + xlabel="Preparation workers", + xticks=[1, 2, 4, 8], + ylabel="End-to-end images / second", + ylim=(0, 175), + ) + ax.legend(fontsize=8) + ax.grid(axis="y", alpha=0.2) + ax = axes[2] + for i, overlap in enumerate((False, True)): + values = [ + next(c["images_per_second"] for c in data["streams"] if c["backend"] == b and c["workers"] == 4 and c["overlap"] == overlap) + for b in ("torch", "onnx") + ] + bars = ax.bar( + np.arange(2) + (i - 0.5) * 0.35, + values, + 0.35, + label="One-batch lookahead" if overlap else "Sequential", + color="#098e92" if overlap else "#888888", + ) + ax.bar_label(bars, fmt="%.1f", padding=3) + ax.set( + title="Experimental stream · batch 32", + xticks=[0, 1], + xticklabels=["PyTorch", "ONNX"], + ylabel="End-to-end images / second", + ylim=(0, 220), + ) + ax.legend(fontsize=8) + ax.grid(axis="y", alpha=0.2) + ax.set_axisbelow(True) + fig.suptitle("Loading and scheduling still limit GPU throughput", fontsize=16) + fig.text( + 0.015, + 0.015, + "RTX 3080 Ti Laptop; automatic precision; northern Europe; runtime CPU threads fixed at 4.\n" + "Worker sweep: 3 ordered trials × 3 observations. Lookahead: 128 images, 4 workers, 5 repeats in one process; " + "experimental, not the API default.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.13, 1, 0.91)) + svg = output / "mambo-loading-scaling.svg" + fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-loading-scaling.png", dpi=160, bbox_inches="tight") + plt.close(fig) + write_json(output / "mambo-loading-scaling.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path) + parser.add_argument("--data", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.root and not args.data: + parser.error("Supply --root or --data") + render(json.loads(args.data.read_text()) if args.data else aggregate(args.root), args.output) diff --git a/dev/releases/mambo_v3/loading_scaling.py b/dev/releases/mambo_v3/loading_scaling.py new file mode 100644 index 0000000..3acc5cf --- /dev/null +++ b/dev/releases/mambo_v3/loading_scaling.py @@ -0,0 +1,98 @@ +"""Separate worker scaling, prepared inference and bounded one-batch lookahead.""" + +import argparse +import itertools +import statistics +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.benchmark import snapshot, timing +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +def stream(predictor, paths, workers, batch, overlap): + """Experimental pipeline only: at most current and next prepared batch.""" + chunks = [paths[i : i + batch] for i in range(0, len(paths), batch)] + leaves = [] + with ThreadPoolExecutor(max_workers=workers) as pool, ThreadPoolExecutor(max_workers=1) as producer: + pending = producer.submit(predictor._prepare, chunks[0], pool) if overlap else None + for i, chunk in enumerate(chunks): + images = pending.result() if pending is not None else predictor._prepare(chunk, pool) + pending = producer.submit(predictor._prepare, chunks[i + 1], pool) if overlap and i + 1 < len(chunks) else None + leaves.append(predictor._infer(images)[0]) + return Prediction(*hierarchy(np.concatenate(leaves), predictor.selected, predictor.bundle.classes)) + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + _, records = load_records(args.manifest, args.root, 128, 20260923) + paths = [args.root / r["path"] for r in records] + if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + report = { + "status": "running", + "backend": args.backend, + "runtime": runtime_settings(4, args.backend), + "before": snapshot(), + "samples": records, + "cells": [], + "streams": [], + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runner_sha256": file_hash(__file__), + } + try: + p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=64) + p.predict(paths[:1]) + report["precision"] = p.effective_precision + configs = list(itertools.product((8, 32, 64), (1, 2, 4, 8))) + for trial in range(3): + for batch, workers in configs if trial != 1 else reversed(configs): + p.preprocess_workers = workers + prepared = p._prepare(paths[:batch]) + # Warm every boundary; inference returns CPU scores, so timing synchronizes. + p._infer(prepared) + p.predict(paths[:batch]) + with ThreadPoolExecutor(max_workers=workers) as pool: + preparation = timing(lambda: p._prepare(paths[:batch], pool), 3) + cell = { + "trial": trial, + "batch": batch, + "workers": workers, + "preparation": preparation, + "prepared": timing(lambda: p._infer(prepared), 3), + "end_to_end": timing(lambda: p.predict(paths[:batch]), 3), + } + report["cells"].append(cell) + write_json(args.output / "report.json", report) + print(trial, batch, workers, round(batch / cell["end_to_end"]["median_seconds"], 1), flush=True) + expected = None + for workers in (1, 4, 8): + for overlap in (False, True): + result = stream(p, paths, workers, 32, overlap) + if expected is None: + expected = result.labels + if result.labels != expected: + raise AssertionError("Worker/prefetch scheduling changed predictions") + times = timing(lambda: stream(p, paths, workers, 32, overlap), 5) + report["streams"].append({"workers": workers, "overlap": overlap, "images": len(paths), **times}) + print("stream", workers, overlap, round(len(paths) / statistics.median(times["seconds"]), 1), flush=True) + report.update(status="complete", after=snapshot()) + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/qualify_bundle.py b/dev/releases/mambo_v3/qualify_bundle.py index 9df711a..af6b8f3 100644 --- a/dev/releases/mambo_v3/qualify_bundle.py +++ b/dev/releases/mambo_v3/qualify_bundle.py @@ -9,7 +9,7 @@ import numpy as np -def qualify(bundle, dataset, device, backends): +def qualify(bundle, dataset, device, backends, tta="none"): from mambo_deploy import Predictor if "torch" in backends: @@ -24,14 +24,14 @@ def qualify(bundle, dataset, device, backends): break if len(images) != 4: raise ValueError("Need four species directories containing JPEGs") - report = {"device": device, "images": [], "variants": {}, "purpose": "bounded contract qualification; not a benchmark"} + report = {"device": device, "tta": tta, "images": [], "variants": {}, "purpose": "bounded contract qualification; not a benchmark"} for path in images: with path.open("rb") as stream: digest = hashlib.file_digest(stream, "sha256").hexdigest() report["images"].append({"path": str(path), "sha256": digest}) custom = None for backend in backends: - predictor = Predictor(bundle, backend=backend, device=device, model="full", batch_size=2) + predictor = Predictor(bundle, backend=backend, device=device, model="full", batch_size=2, tta=tta) plain = predictor.predict(images) embedded, vectors = predictor.predict_with_embeddings(images) if plain.labels != embedded.labels: @@ -80,8 +80,9 @@ def qualify(bundle, dataset, device, backends): parser.add_argument("dataset", type=Path) parser.add_argument("--device", default="cpu") parser.add_argument("--backends", nargs="+", choices=["torch", "onnx"], default=["torch", "onnx"]) + parser.add_argument("--tta", default="none") parser.add_argument("--output", type=Path, required=True) args = parser.parse_args() - report = qualify(args.bundle, args.dataset, args.device, args.backends) + report = qualify(args.bundle, args.dataset, args.device, args.backends, args.tta) args.output.write_text(json.dumps(report, indent=2) + "\n") print(args.output) diff --git a/dev/releases/mambo_v3/qualify_tta.py b/dev/releases/mambo_v3/qualify_tta.py new file mode 100644 index 0000000..7986340 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_tta.py @@ -0,0 +1,140 @@ +"""Bounded real-image qualification of outer TTA; write canonical mini_metrics inputs.""" + +import argparse +import csv +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import PROFILES, resolve_tta +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.benchmark import timing +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, write_json +from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + _, records = load_records(args.manifest, args.root, args.count, 20260923) + paths = [args.root / r["path"] for r in records] + write_json(args.output / "samples.json", records) + report = { + "status": "running", + "backend": args.backend, + "samples": len(records), + "sample_ids_sha256": file_hash(args.output / "samples.json"), + "runtime": runtime_settings(4, args.backend), + "profiles": {}, + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runner_sha256": file_hash(__file__), + } + try: + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="full", threads=4, batch_size=32) + selectors = {name: Predictor(args.bundle, model=name).selected for name in PRESETS} + for profile in args.profiles: + p.tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) + start = time.perf_counter() + outputs = [] + with ThreadPoolExecutor(max_workers=4) as pool: + for offset in range(0, len(paths), 32): + scores, _ = p._infer_batch(paths[offset : offset + 32], pool=pool) + if scores.dtype != np.float32 or not np.isfinite(scores).all(): + raise AssertionError("Invalid leaf scores") + outputs.append(scores) + raw = np.concatenate(outputs) + folder = args.output / profile + folder.mkdir() + hashes = {} + for preset, indices in selectors.items(): + result = Prediction(*hierarchy(raw, indices, p.bundle.classes)) + destination = folder / preset + destination.mkdir() + csv_path = destination / "mini_metric.csv" + with csv_path.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerows(canonical_rows(records, result)) + hashes[preset] = file_hash(csv_path) + # Public API: bounded batches, custom mask, same mean embedding independent of mask. + p._apply_class_mask(-1) + plain = p.predict(paths[:8]) + embedded, vectors = p.predict_with_embeddings(paths[:8]) + assert plain.labels == embedded.labels + assert vectors.shape == (8, 1280) and vectors.dtype == np.float32 and np.isfinite(vectors).all() + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + custom = [p.bundle.classes["labels"][0][i] for i in selectors["north_europe"][:3]] + p._apply_class_mask(custom) + limited, masked_vectors = p.predict_with_embeddings(paths[:8]) + assert all(item.label[0] in custom for item in limited) + np.testing.assert_array_equal(vectors, masked_vectors) + p._apply_class_mask(-1) + report["profiles"][profile] = { + "csv_sha256": hashes, + "elapsed_seconds": time.perf_counter() - start, + "prediction_embedding_agreement_first8": True, + "custom_list_first8": True, + "finite_leaf_scores": True, + "normalized_embeddings_first8": True, + } + write_json(args.output / "report.json", report) + print(profile, report["profiles"][profile]["elapsed_seconds"], flush=True) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "report.json", report) + + +def benchmark(args): + args.output.mkdir(parents=True, exist_ok=False) + runtime = runtime_settings(4, args.backend) + _, records = load_records(args.manifest, args.root, 32, 20260923) + paths = [args.root / r["path"] for r in records] + if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): + raise ValueError("Image bytes changed") + p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=32) + report = { + "status": "running", + "backend": args.backend, + "runtime": runtime, + "samples": records, + "cells": [], + "purpose": "one process; one warmup and three observations per profile; complete CPU results", + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runner_sha256": file_hash(__file__), + } + try: + for profile in args.profiles: + p.tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) + p.predict(paths) + measured = timing(lambda: p.predict(paths), 3) + report["cells"].append( + {"profile": profile, "batch": len(paths), "images_per_second": len(paths) / measured["median_seconds"], **measured} + ) + print(profile, report["cells"][-1]["images_per_second"], flush=True) + report["status"] = "complete" + except Exception as error: + report.update(status="failed", error=str(error)) + raise + finally: + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--backend", choices=["torch", "onnx"], required=True) + parser.add_argument("--count", type=int, default=1024) + parser.add_argument("--profiles", nargs="+", choices=(*PROFILES, *CANDIDATES), default=list(PROFILES)) + parser.add_argument("--timing-only", action="store_true") + args = parser.parse_args() + (benchmark if args.timing_only else run)(args) diff --git a/dev/releases/mambo_v3/tta_candidates.py b/dev/releases/mambo_v3/tta_candidates.py new file mode 100644 index 0000000..9da6998 --- /dev/null +++ b/dev/releases/mambo_v3/tta_candidates.py @@ -0,0 +1,64 @@ +"""Literature-informed, extent-preserving candidate policies for bounded qualification. + +These use the public callable interface; they are not additional release defaults. +See docs/mambo-tta.md for sources, magnitudes and the distinction from policy tuning. +""" + +import hashlib +from functools import partial + +import numpy as np +from PIL import Image, ImageEnhance, ImageFilter + +from deployment.mambo_deploy import TTA, View + +CANDIDATES = ("brightness", "contrast", "gamma", "gaussian_noise", "padded_scale", "mild_blur", "padded_rotation") + + +def photometric(image, kind, factor): + if kind == "gamma": + return np.rint((image.astype(np.float32) / 255) ** factor * 255).astype(np.uint8) + pil = Image.fromarray(image.transpose(1, 2, 0)) + enhancer = ImageEnhance.Brightness if kind == "brightness" else ImageEnhance.Contrast + return enhancer(pil).enhance(factor) + + +def gaussian(image, seed): + fingerprint = int.from_bytes(hashlib.blake2b(np.ascontiguousarray(image).data, digest_size=8).digest(), "little") + rng = np.random.default_rng([seed, fingerprint]) + # Independent RGB sensor-like perturbations; sigma is 0.005 on [0,1]. + return np.rint(np.clip(image.astype(np.float32) + rng.normal(0, 0.005 * 255, image.shape), 0, 255)).astype(np.uint8) + + +def pad(image, fraction): + height, width = image.shape[1:] + y, x = max(1, int(np.ceil(height * fraction))), max(1, int(np.ceil(width * fraction))) + return np.pad(image, ((0, 0), (y, y), (x, x)), mode="edge") + + +def blur(image, radius): + return Image.fromarray(image.transpose(1, 2, 0)).filter(ImageFilter.GaussianBlur(radius)) + + +def rotate(image, degrees): + pil = Image.fromarray(image.transpose(1, 2, 0)).rotate( + degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + # Keep the expanded canvas through the release recipe's center crop. + return pad(np.asarray(pil).transpose(2, 0, 1), 0.08) + + +def candidate_policy(name): + if name in ("brightness", "contrast", "gamma"): + transforms = [partial(photometric, kind=name, factor=factor) for factor in (0.9, 1.1)] + elif name == "gaussian_noise": + transforms = [partial(gaussian, seed=seed) for seed in (0, 1)] + elif name == "padded_scale": + transforms = [partial(pad, fraction=fraction) for fraction in (0.08, 0.15)] + elif name == "mild_blur": + transforms = [partial(blur, radius=radius) for radius in (0.25, 0.5)] + elif name == "padded_rotation": + transforms = [partial(rotate, degrees=degrees) for degrees in (-10, 10)] + else: + raise ValueError(f"Unknown candidate {name}") + return TTA((View(), *transforms), name=name) diff --git a/dev/releases/mambo_v3/tta_charts.py b/dev/releases/mambo_v3/tta_charts.py new file mode 100644 index 0000000..da6edbc --- /dev/null +++ b/dev/releases/mambo_v3/tta_charts.py @@ -0,0 +1,121 @@ +"""Compact comparison of bounded TTA quality and its measured GPU inference cost.""" + +import argparse +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +ORDER = ( + "none", + "hflip", + "d4", + "padded_scale", + "padded_rotation", + "brightness", + "contrast", + "gamma", + "gaussian_noise", + "light_noise", + "mild_blur", + "five_crop", + "ten_crop", +) +LABELS = ( + "None", + "Horizontal flip", + "D4 rotations/reflections", + "Padded scale", + "Padded ±10° rotation", + "Brightness", + "Contrast", + "Gamma", + "Gaussian noise", + "Salt-and-pepper noise", + "Mild blur", + "Five crops", + "Ten crops", +) + + +def collect(quality, root): + metrics = json.loads(quality.read_text()) + data = { + "quality": [ + {"backend": row["backend"], "profile": row["profile"], "macro_accuracy": row["presets"]["north_europe"]["all"]["accuracy"]["0"]} + for row in metrics["variants"] + ], + "timing": [], + "sources_sha256": {str(quality): file_hash(quality)}, + } + samples = None + for backend in ("torch", "onnx"): + path = root / f"mambo-tta-timing-{backend}" / "report.json" + report = json.loads(path.read_text()) + if report["status"] != "complete" or {c["profile"] for c in report["cells"]} != set(ORDER): + raise ValueError("Incomplete TTA timing matrix") + if samples is not None and samples != report["samples"]: + raise ValueError("Different timing samples") + samples = report["samples"] + data["sources_sha256"][str(path)] = file_hash(path) + for cell in report["cells"]: + data["timing"].append({"backend": backend, **cell}) + return data + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-tta-v1", "axes.spines.top": False, "axes.spines.right": False}) + fig, axes = plt.subplots(1, 2, figsize=(12, 8), sharey=True) + y = np.arange(len(ORDER)) + for i, (backend, label, color) in enumerate((("torch", "PyTorch", "#098e92"), ("onnx", "ONNX", "#e8872e"))): + quality = [ + next(v["macro_accuracy"] for v in data["quality"] if v["backend"] == backend and v["profile"] == name) * 100 for name in ORDER + ] + speed = [next(v["images_per_second"] for v in data["timing"] if v["backend"] == backend and v["profile"] == name) for name in ORDER] + axes[0].scatter(quality, y + (i - 0.5) * 0.23, label=label, color=color, s=40) + axes[1].barh(y + (i - 0.5) * 0.3, speed, height=0.3, color=color, label=label) + axes[0].set( + yticks=y, yticklabels=LABELS, xlabel="Macro species accuracy (%)", title="Fixed 1,024-image qualification subset", xlim=(65, 83) + ) + axes[0].invert_yaxis() + axes[1].set(xlabel="End-to-end images / second", title="GPU · batch 32 · four preparation workers") + for ax in axes: + ax.grid(axis="x", alpha=0.2) + ax.set_axisbelow(True) + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.57, 0.945), ncol=2, frameon=False) + fig.suptitle("TTA candidates: quality and inference cost · northern Europe", fontsize=15) + fig.text( + 0.02, + 0.02, + "Quality: pinned mini_metrics, all truth, threshold 0; 201 represented species. Exploratory subset, not full-set efficacy.\n" + "Speed: RTX 3080 Ti Laptop; one process per backend, one warmup + three observations per policy; decode and CPU results included.\n" + "Dots use a restricted accuracy axis for readability. All policies are opt-in; none changes the release default.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.11, 1, 0.90)) + svg = output / "mambo-tta-tradeoffs.svg" + fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-tta-tradeoffs.png", dpi=160, bbox_inches="tight") + plt.close(fig) + write_json(output / "mambo-tta-tradeoffs.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--quality", type=Path) + parser.add_argument("--root", type=Path) + parser.add_argument("--data", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.data and (not args.quality or not args.root): + parser.error("Supply --data or both --quality and --root") + render(json.loads(args.data.read_text()) if args.data else collect(args.quality, args.root), args.output) diff --git a/dev/releases/mambo_v3/tta_report.py b/dev/releases/mambo_v3/tta_report.py new file mode 100644 index 0000000..020de41 --- /dev/null +++ b/dev/releases/mambo_v3/tta_report.py @@ -0,0 +1,64 @@ +"""Compute pinned mini_metrics for completed TTA qualification and compact the results.""" + +import argparse +import json +from pathlib import Path + +from deployment.mambo_deploy.augmentation import resolve_tta +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION, measure +from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy + + +def run(args): + result = {"purpose": "fixed-subset qualification; not full-data TTA efficacy", "revision": REVISION, "variants": []} + sample_hash = None + seen = set() + for root_parent in (args.root, *args.extra_root): + for backend in args.backends: + root = root_parent / f"mambo-tta-{backend}" + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete" or file_hash(root / "samples.json") != report["sample_ids_sha256"]: + raise ValueError("Incomplete or changed TTA qualification") + if sample_hash is not None and sample_hash != report["sample_ids_sha256"]: + raise ValueError("Sample populations differ") + sample_hash = report["sample_ids_sha256"] + result["sample_ids_sha256"] = sample_hash + result["samples"] = report["samples"] + for profile in report["profiles"]: + if (backend, profile) in seen: + raise ValueError("Duplicate backend/profile evidence") + seen.add((backend, profile)) + tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) + row = {"backend": backend, "profile": profile, "views": len(tta.transforms) if tta else 1, "presets": {}} + for preset, digest in report["profiles"][profile]["csv_sha256"].items(): + source = root / profile / preset / "mini_metric.csv" + if file_hash(source) != digest: + raise ValueError("Changed prediction CSV") + path = source.with_name("metrics.json") + metric = json.loads(path.read_text()) if path.exists() else measure(source) + if ( + metric["source_sha256"] != digest + or metric["mini_metrics_revision"] != REVISION + or metric["metric_schema"] != METRIC_SCHEMA + ): + raise ValueError("Stale metric file") + if not path.exists(): + write_json(path, metric) + row["presets"][preset] = {key: metric[key] for key in ("ranks", "all", "known", "source_sha256")} + result["variants"].append(row) + print(backend, profile, row["presets"]["north_europe"]["all"]["accuracy"]["0"], flush=True) + write_json(args.output, result) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--extra-root", type=Path, action="append", default=[]) + parser.add_argument("--backends", nargs="+", default=["torch", "onnx"], choices=["torch", "onnx"]) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.output.exists(): + raise FileExistsError(args.output) + run(args) diff --git a/docs/assets/mambo-frequency-accuracy.svg b/docs/assets/mambo-frequency-accuracy.svg new file mode 100644 index 0000000..205520f --- /dev/null +++ b/docs/assets/mambo-frequency-accuracy.svg @@ -0,0 +1,1465 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro species accuracy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Europe + + + + + + + + + + + + + + + 0 + n=16 + + + + + + + + + + 1–24 + n=0 + + + + + + + + + + 25–99 + n=7 + + + + + + + + + + 100–499 + n=68 + + + + + + + + + + 500–1999 + n=425 + + + + + + + + + + 2000–9999 + n=6 + + + + + + + + + + 10000+ + n=0 + + + + V3 training metadata rows / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Global + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro species accuracy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Europe + + + + + + + + + + + + + + + 1–4 + n=143 + + + + + + + + + + 5–19 + n=114 + + + + + + + + + + 20–99 + n=149 + + + + + + + + + + 100–499 + n=90 + + + + + + + + + + 500+ + n=26 + + + + Flemming images / species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Global + + + + Accuracy versus class frequency · all Flemming truth + + + Pinned mini_metrics, no threshold optimization. n = species per bin; gaps = empty bins. All 522 truth species retained. + Training axis uses the common V3 source split (set 2–9), not verified V2 training exposure. Curves are descriptive; small bins are uncertain. + + + + + + + + + + V2 + + + + + + + + + V3 PyTorch + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-frequency-comparison.json b/docs/assets/mambo-frequency-comparison.json new file mode 100644 index 0000000..d10449d --- /dev/null +++ b/docs/assets/mambo-frequency-comparison.json @@ -0,0 +1,4657 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "training_definition": "V3 source metadata rows with set 2..9; 0=test, 1=validation; no extra deduplication. Common reference axis, not a claim about V2 effective training exposures.", + "metadata_sha256": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "training_rows": 5063857, + "bins": { + "training": [ + [ + 0, + 1 + ], + [ + 1, + 25 + ], + [ + 25, + 100 + ], + [ + 100, + 500 + ], + [ + 500, + 2000 + ], + [ + 2000, + 10000 + ], + [ + 10000, + null + ] + ], + "flemming": [ + [ + 1, + 5 + ], + [ + 5, + 20 + ], + [ + 20, + 100 + ], + [ + 100, + 500 + ], + [ + 500, + null + ] + ] + }, + "cells": [ + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.37142857142857144 + }, + "micro_accuracy": { + "0": 0.4166666666666667 + } + }, + "known": { + "accuracy": { + "0": 0.37142857142857144 + }, + "micro_accuracy": { + "0": 0.4166666666666667 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5142850661750477 + }, + "micro_accuracy": { + "0": 0.5286565795506648 + } + }, + "known": { + "accuracy": { + "0": 0.5142850661750477 + }, + "micro_accuracy": { + "0": 0.5286565795506648 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7472193324343406 + }, + "micro_accuracy": { + "0": 0.8057148016070058 + } + }, + "known": { + "accuracy": { + "0": 0.7472193324343406 + }, + "micro_accuracy": { + "0": 0.8057148016070058 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.42302004168769275 + }, + "micro_accuracy": { + "0": 0.8384971944376677 + } + }, + "known": { + "accuracy": { + "0": 0.42302004168769275 + }, + "micro_accuracy": { + "0": 0.8384971944376677 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5716783216783218 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.5923913043478262 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7024792928888983 + }, + "micro_accuracy": { + "0": 0.7180805484147387 + } + }, + "known": { + "accuracy": { + "0": 0.7024792928888983 + }, + "micro_accuracy": { + "0": 0.7180805484147387 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7423169463149213 + }, + "micro_accuracy": { + "0": 0.743941605839416 + } + }, + "known": { + "accuracy": { + "0": 0.7524164966049202 + }, + "micro_accuracy": { + "0": 0.7527326440177252 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.759559314485011 + }, + "micro_accuracy": { + "0": 0.7495298100432575 + } + }, + "known": { + "accuracy": { + "0": 0.7948876546936162 + }, + "micro_accuracy": { + "0": 0.7933213894694934 + } + } + }, + { + "model": "v2", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.649212243873666 + }, + "micro_accuracy": { + "0": 0.6277598184194236 + } + }, + "known": { + "accuracy": { + "0": 0.8037865876531104 + }, + "micro_accuracy": { + "0": 0.8186017310193282 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.49142442644041084 + }, + "micro_accuracy": { + "0": 0.49931224209078406 + } + }, + "known": { + "accuracy": { + "0": 0.49142442644041084 + }, + "micro_accuracy": { + "0": 0.49931224209078406 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7219435616502283 + }, + "micro_accuracy": { + "0": 0.7847469868640816 + } + }, + "known": { + "accuracy": { + "0": 0.7219435616502283 + }, + "micro_accuracy": { + "0": 0.7847469868640816 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.41658516519375216 + }, + "micro_accuracy": { + "0": 0.8306904122956819 + } + }, + "known": { + "accuracy": { + "0": 0.41658516519375216 + }, + "micro_accuracy": { + "0": 0.8306904122956819 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5594405594405595 + }, + "micro_accuracy": { + "0": 0.5776173285198556 + } + }, + "known": { + "accuracy": { + "0": 0.5797101449275363 + }, + "micro_accuracy": { + "0": 0.5970149253731343 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6636656428472464 + }, + "micro_accuracy": { + "0": 0.6846615252784919 + } + }, + "known": { + "accuracy": { + "0": 0.6636656428472464 + }, + "micro_accuracy": { + "0": 0.6846615252784919 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.714096583377111 + }, + "micro_accuracy": { + "0": 0.7096350364963504 + } + }, + "known": { + "accuracy": { + "0": 0.7238121831509492 + }, + "micro_accuracy": { + "0": 0.7180206794682422 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.735043508544543 + }, + "micro_accuracy": { + "0": 0.729687793868723 + } + }, + "known": { + "accuracy": { + "0": 0.7692315787094055 + }, + "micro_accuracy": { + "0": 0.7723200955509107 + } + } + }, + { + "model": "v2", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6357767582181892 + }, + "micro_accuracy": { + "0": 0.616479812916982 + } + }, + "known": { + "accuracy": { + "0": 0.7871521768415677 + }, + "micro_accuracy": { + "0": 0.8038925512354814 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.4221811243161066 + }, + "micro_accuracy": { + "0": 0.4442916093535076 + } + }, + "known": { + "accuracy": { + "0": 0.4221811243161066 + }, + "micro_accuracy": { + "0": 0.4442916093535076 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6255201934340949 + }, + "micro_accuracy": { + "0": 0.6952105809596895 + } + }, + "known": { + "accuracy": { + "0": 0.6255201934340949 + }, + "micro_accuracy": { + "0": 0.6952105809596895 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.343730230685024 + }, + "micro_accuracy": { + "0": 0.7406684557209076 + } + }, + "known": { + "accuracy": { + "0": 0.343730230685024 + }, + "micro_accuracy": { + "0": 0.7406684557209076 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.48426573426573427 + }, + "micro_accuracy": { + "0": 0.5054151624548736 + } + }, + "known": { + "accuracy": { + "0": 0.5018115942028986 + }, + "micro_accuracy": { + "0": 0.5223880597014925 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.558859427910878 + }, + "micro_accuracy": { + "0": 0.5801199657240789 + } + }, + "known": { + "accuracy": { + "0": 0.558859427910878 + }, + "micro_accuracy": { + "0": 0.5801199657240789 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.6198802522227109 + }, + "micro_accuracy": { + "0": 0.6169343065693431 + } + }, + "known": { + "accuracy": { + "0": 0.6283139971509111 + }, + "micro_accuracy": { + "0": 0.6242245199409158 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6541954896565274 + }, + "micro_accuracy": { + "0": 0.6529057739326688 + } + }, + "known": { + "accuracy": { + "0": 0.6846231868498542 + }, + "micro_accuracy": { + "0": 0.6910520553399024 + } + } + }, + { + "model": "v2", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.5545020621147803 + }, + "micro_accuracy": { + "0": 0.546117339569434 + } + }, + "known": { + "accuracy": { + "0": 0.6865263626182994 + }, + "micro_accuracy": { + "0": 0.7121395578277053 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + }, + "known": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5294764906586549 + }, + "micro_accuracy": { + "0": 0.5396607060981201 + } + }, + "known": { + "accuracy": { + "0": 0.5294764906586549 + }, + "micro_accuracy": { + "0": 0.5396607060981201 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7741614686935845 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + }, + "known": { + "accuracy": { + "0": 0.7741614686935845 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6148702492977822 + }, + "micro_accuracy": { + "0": 0.8575262259087583 + } + }, + "known": { + "accuracy": { + "0": 0.6148702492977822 + }, + "micro_accuracy": { + "0": 0.8575262259087583 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.618881118881119 + }, + "micro_accuracy": { + "0": 0.6064981949458483 + } + }, + "known": { + "accuracy": { + "0": 0.641304347826087 + }, + "micro_accuracy": { + "0": 0.6268656716417911 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7068550945852561 + }, + "micro_accuracy": { + "0": 0.7206512425021423 + } + }, + "known": { + "accuracy": { + "0": 0.7068550945852561 + }, + "micro_accuracy": { + "0": 0.7206512425021423 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7712642164467741 + }, + "micro_accuracy": { + "0": 0.7662773722627737 + } + }, + "known": { + "accuracy": { + "0": 0.7817576071467303 + }, + "micro_accuracy": { + "0": 0.7753323485967504 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7805686204738644 + }, + "micro_accuracy": { + "0": 0.7753902576640963 + } + }, + "known": { + "accuracy": { + "0": 0.8168741377052069 + }, + "micro_accuracy": { + "0": 0.8206927441027172 + } + } + }, + { + "model": "v3-torch", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6792777761312336 + }, + "micro_accuracy": { + "0": 0.6450925098012243 + } + }, + "known": { + "accuracy": { + "0": 0.8410105799720036 + }, + "micro_accuracy": { + "0": 0.8412036414188977 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + }, + "known": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5027782329312693 + }, + "micro_accuracy": { + "0": 0.5153599266391563 + } + }, + "known": { + "accuracy": { + "0": 0.5027782329312693 + }, + "micro_accuracy": { + "0": 0.5153599266391563 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7518730716685684 + }, + "micro_accuracy": { + "0": 0.8079266916444725 + } + }, + "known": { + "accuracy": { + "0": 0.7518730716685684 + }, + "micro_accuracy": { + "0": 0.8079266916444725 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6139611166303579 + }, + "micro_accuracy": { + "0": 0.8550866064893876 + } + }, + "known": { + "accuracy": { + "0": 0.6139611166303579 + }, + "micro_accuracy": { + "0": 0.8550866064893876 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5996503496503498 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.621376811594203 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + }, + "known": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7458012717335286 + }, + "micro_accuracy": { + "0": 0.7416058394160584 + } + }, + "known": { + "accuracy": { + "0": 0.7559482278115358 + }, + "micro_accuracy": { + "0": 0.7503692762186115 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7576738641751809 + }, + "micro_accuracy": { + "0": 0.7546078615760767 + } + }, + "known": { + "accuracy": { + "0": 0.7929145090205382 + }, + "micro_accuracy": { + "0": 0.7986961281974719 + } + } + }, + { + "model": "v3-torch", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6605533070624363 + }, + "micro_accuracy": { + "0": 0.6298576243207924 + } + }, + "known": { + "accuracy": { + "0": 0.8178279039820641 + }, + "micro_accuracy": { + "0": 0.8213372796986412 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.40810341985056175 + }, + "micro_accuracy": { + "0": 0.4039431453461715 + } + }, + "known": { + "accuracy": { + "0": 0.40810341985056175 + }, + "micro_accuracy": { + "0": 0.4039431453461715 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6347917204341529 + }, + "micro_accuracy": { + "0": 0.6878978016521464 + } + }, + "known": { + "accuracy": { + "0": 0.6347917204341529 + }, + "micro_accuracy": { + "0": 0.6878978016521464 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + }, + "known": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5087412587412588 + }, + "micro_accuracy": { + "0": 0.5018050541516246 + } + }, + "known": { + "accuracy": { + "0": 0.5271739130434783 + }, + "micro_accuracy": { + "0": 0.5186567164179104 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + }, + "known": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.617352684421439 + }, + "micro_accuracy": { + "0": 0.614014598540146 + } + }, + "known": { + "accuracy": { + "0": 0.6257520406720708 + }, + "micro_accuracy": { + "0": 0.6212703101920236 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6556269093929604 + }, + "micro_accuracy": { + "0": 0.6509309761143502 + } + }, + "known": { + "accuracy": { + "0": 0.6861211842484469 + }, + "micro_accuracy": { + "0": 0.6889618791679109 + } + } + }, + { + "model": "v3-torch", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.564534533101768 + }, + "micro_accuracy": { + "0": 0.5289565994910241 + } + }, + "known": { + "accuracy": { + "0": 0.6989475171736176 + }, + "micro_accuracy": { + "0": 0.6897618727297188 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + }, + "known": { + "accuracy": { + "0": 0.4571428571428572 + }, + "micro_accuracy": { + "0": 0.3333333333333333 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5297053122217539 + }, + "micro_accuracy": { + "0": 0.5392022008253095 + } + }, + "known": { + "accuracy": { + "0": 0.5297053122217539 + }, + "micro_accuracy": { + "0": 0.5392022008253095 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7739755383195107 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + }, + "known": { + "accuracy": { + "0": 0.7739755383195107 + }, + "micro_accuracy": { + "0": 0.8308355527468063 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6149671203623952 + }, + "micro_accuracy": { + "0": 0.8580141497926324 + } + }, + "known": { + "accuracy": { + "0": 0.6149671203623952 + }, + "micro_accuracy": { + "0": 0.8580141497926324 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.618881118881119 + }, + "micro_accuracy": { + "0": 0.6064981949458483 + } + }, + "known": { + "accuracy": { + "0": 0.641304347826087 + }, + "micro_accuracy": { + "0": 0.6268656716417911 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.7051007086203438 + }, + "micro_accuracy": { + "0": 0.7197943444730077 + } + }, + "known": { + "accuracy": { + "0": 0.7051007086203438 + }, + "micro_accuracy": { + "0": 0.7197943444730077 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.7721266730609904 + }, + "micro_accuracy": { + "0": 0.7668613138686131 + } + }, + "known": { + "accuracy": { + "0": 0.7826317978645413 + }, + "micro_accuracy": { + "0": 0.7759231905465288 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7807117101111073 + }, + "micro_accuracy": { + "0": 0.775343238668422 + } + }, + "known": { + "accuracy": { + "0": 0.8170238826744146 + }, + "micro_accuracy": { + "0": 0.8206429780033841 + } + } + }, + { + "model": "v3-onnx", + "preset": "north_europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6791137984707333 + }, + "micro_accuracy": { + "0": 0.6450581195405461 + } + }, + "known": { + "accuracy": { + "0": 0.840807560011384 + }, + "micro_accuracy": { + "0": 0.8411587963585812 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + }, + "known": { + "accuracy": { + "0": 0.42857142857142855 + }, + "micro_accuracy": { + "0": 0.25 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.5030070544943686 + }, + "micro_accuracy": { + "0": 0.5149014213663458 + } + }, + "known": { + "accuracy": { + "0": 0.5030070544943686 + }, + "micro_accuracy": { + "0": 0.5149014213663458 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.7520422244208899 + }, + "micro_accuracy": { + "0": 0.8079944025639868 + } + }, + "known": { + "accuracy": { + "0": 0.7520422244208899 + }, + "micro_accuracy": { + "0": 0.8079944025639868 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.6140579876949709 + }, + "micro_accuracy": { + "0": 0.8555745303732618 + } + }, + "known": { + "accuracy": { + "0": 0.6140579876949709 + }, + "micro_accuracy": { + "0": 0.8555745303732618 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5996503496503498 + }, + "micro_accuracy": { + "0": 0.592057761732852 + } + }, + "known": { + "accuracy": { + "0": 0.621376811594203 + }, + "micro_accuracy": { + "0": 0.6119402985074627 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + }, + "known": { + "accuracy": { + "0": 0.6857834978119727 + }, + "micro_accuracy": { + "0": 0.702656383890317 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.746151051241108 + }, + "micro_accuracy": { + "0": 0.7417518248175182 + } + }, + "known": { + "accuracy": { + "0": 0.7563027662239802 + }, + "micro_accuracy": { + "0": 0.7505169867060562 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.7580992662369584 + }, + "micro_accuracy": { + "0": 0.7547489185630994 + } + }, + "known": { + "accuracy": { + "0": 0.793359697224724 + }, + "micro_accuracy": { + "0": 0.7988454264954713 + } + } + }, + { + "model": "v3-onnx", + "preset": "europe", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.6604620639941903 + }, + "micro_accuracy": { + "0": 0.6298576243207924 + } + }, + "known": { + "accuracy": { + "0": 0.8177149363737594 + }, + "micro_accuracy": { + "0": 0.8213372796986412 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 0, + "upper": 1, + "images": 8042, + "species": 16, + "known_images": 0, + "all": { + "accuracy": { + "0": 0.0 + }, + "micro_accuracy": { + "0": 0.0 + } + }, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 1, + "upper": 25, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 25, + "upper": 100, + "images": 12, + "species": 7, + "known_images": 12, + "all": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + }, + "known": { + "accuracy": { + "0": 0.2857142857142857 + }, + "micro_accuracy": { + "0": 0.16666666666666666 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 100, + "upper": 500, + "images": 2181, + "species": 68, + "known_images": 2181, + "all": { + "accuracy": { + "0": 0.40857535296735414 + }, + "micro_accuracy": { + "0": 0.4034846400733608 + } + }, + "known": { + "accuracy": { + "0": 0.40857535296735414 + }, + "micro_accuracy": { + "0": 0.4034846400733608 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 500, + "upper": 2000, + "images": 44306, + "species": 425, + "known_images": 44306, + "all": { + "accuracy": { + "0": 0.6350041646477221 + }, + "micro_accuracy": { + "0": 0.6880106531846703 + } + }, + "known": { + "accuracy": { + "0": 0.6350041646477221 + }, + "micro_accuracy": { + "0": 0.6880106531846703 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 2000, + "upper": 10000, + "images": 4099, + "species": 6, + "known_images": 4099, + "all": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + }, + "known": { + "accuracy": { + "0": 0.5450344629694924 + }, + "micro_accuracy": { + "0": 0.7067577457916565 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "training", + "lower": 10000, + "upper": null, + "images": 0, + "species": 0, + "known_images": 0, + "all": null, + "known": null + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 1, + "upper": 5, + "images": 277, + "species": 143, + "known_images": 268, + "all": { + "accuracy": { + "0": 0.5087412587412588 + }, + "micro_accuracy": { + "0": 0.5018050541516246 + } + }, + "known": { + "accuracy": { + "0": 0.5271739130434783 + }, + "micro_accuracy": { + "0": 0.5186567164179104 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 5, + "upper": 20, + "images": 1167, + "species": 114, + "known_images": 1167, + "all": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + }, + "known": { + "accuracy": { + "0": 0.5648057090119578 + }, + "micro_accuracy": { + "0": 0.5895458440445587 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 20, + "upper": 100, + "images": 6850, + "species": 149, + "known_images": 6770, + "all": { + "accuracy": { + "0": 0.6180226583330307 + }, + "micro_accuracy": { + "0": 0.6144525547445255 + } + }, + "known": { + "accuracy": { + "0": 0.6264311298749766 + }, + "micro_accuracy": { + "0": 0.6217134416543575 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 100, + "upper": 500, + "images": 21268, + "species": 90, + "known_images": 20094, + "all": { + "accuracy": { + "0": 0.6559409331536423 + }, + "micro_accuracy": { + "0": 0.6511190520970472 + } + }, + "known": { + "accuracy": { + "0": 0.6864498137654397 + }, + "micro_accuracy": { + "0": 0.6891609435652434 + } + } + }, + { + "model": "v3-onnx", + "preset": "full", + "axis": "flemming", + "lower": 500, + "upper": null, + "images": 29078, + "species": 26, + "known_images": 22299, + "all": { + "accuracy": { + "0": 0.5643149943102423 + }, + "micro_accuracy": { + "0": 0.5288534287089897 + } + }, + "known": { + "accuracy": { + "0": 0.6986757072412525 + }, + "micro_accuracy": { + "0": 0.689627337548769 + } + } + } + ], + "source_sha256": { + "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "local-evidence/mambo-release-comparison-quality/v2-full/europe/mini_metric.csv": "05d76b1f47e294e51378905c27694438eaeeaf11b724bfbb8995eae984a1b410", + "local-evidence/mambo-release-comparison-quality/v2-full/full/mini_metric.csv": "fd0f436cc4d2cd23c1ebf628783f23b06663b8aacc8263a04ddf078dfbddd21a", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/europe/mini_metric.csv": "189de0dafdd98830f6ab8690937ea287c4acee82e6f09a4c7151a7d62904d67d", + "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/full/mini_metric.csv": "9c9b44c7a44f550d3a2a78f489a97c283d251e4c9c14d2123d3494fe19f3888a", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/europe/mini_metric.csv": "a25befd30a3187e30baf62d01b267dfd5ed0adfe36b58cc6ee57595e22241dc4", + "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/full/mini_metric.csv": "24159c3f10dd63a7b53ba927530d04eb331d96329d5d8395a8295c9ee233507a" + }, + "species_support": { + "11478679": { + "flemming": 1, + "training": 1236 + }, + "1732063": { + "flemming": 236, + "training": 1305 + }, + "1732416": { + "flemming": 95, + "training": 438 + }, + "1734453": { + "flemming": 201, + "training": 503 + }, + "1734704": { + "flemming": 27, + "training": 781 + }, + "1734826": { + "flemming": 8, + "training": 585 + }, + "1737491": { + "flemming": 12, + "training": 1201 + }, + "1737542": { + "flemming": 12, + "training": 1203 + }, + "1737650": { + "flemming": 1, + "training": 181 + }, + "1737775": { + "flemming": 9, + "training": 1451 + }, + "1737776": { + "flemming": 2, + "training": 1401 + }, + "1737847": { + "flemming": 1, + "training": 1440 + }, + "1738050": { + "flemming": 1, + "training": 59 + }, + "1739833": { + "flemming": 2, + "training": 1285 + }, + "1739922": { + "flemming": 14, + "training": 1462 + }, + "1740005": { + "flemming": 2, + "training": 236 + }, + "1740069": { + "flemming": 1, + "training": 849 + }, + "1740185": { + "flemming": 2, + "training": 937 + }, + "1741341": { + "flemming": 23, + "training": 1292 + }, + "1741752": { + "flemming": 1, + "training": 636 + }, + "1742142": { + "flemming": 41, + "training": 513 + }, + "1743532": { + "flemming": 36, + "training": 1357 + }, + "1743775": { + "flemming": 6, + "training": 1514 + }, + "1744071": { + "flemming": 1, + "training": 1127 + }, + "1744782": { + "flemming": 16, + "training": 391 + }, + "1745079": { + "flemming": 1, + "training": 153 + }, + "1746027": { + "flemming": 2, + "training": 230 + }, + "1746440": { + "flemming": 12, + "training": 1321 + }, + "1746775": { + "flemming": 25, + "training": 499 + }, + "1746832": { + "flemming": 35, + "training": 1482 + }, + "1746876": { + "flemming": 18, + "training": 1268 + }, + "1758878": { + "flemming": 24, + "training": 1317 + }, + "1759069": { + "flemming": 3, + "training": 1433 + }, + "1759083": { + "flemming": 12, + "training": 1338 + }, + "1759153": { + "flemming": 99, + "training": 1485 + }, + "1760104": { + "flemming": 23, + "training": 1556 + }, + "1760593": { + "flemming": 1, + "training": 1457 + }, + "1761041": { + "flemming": 12, + "training": 1500 + }, + "1762244": { + "flemming": 22, + "training": 484 + }, + "1763610": { + "flemming": 158, + "training": 1496 + }, + "1765011": { + "flemming": 8, + "training": 1455 + }, + "1766137": { + "flemming": 17, + "training": 1391 + }, + "1766210": { + "flemming": 26, + "training": 1534 + }, + "1766274": { + "flemming": 330, + "training": 1121 + }, + "1766510": { + "flemming": 2, + "training": 1317 + }, + "1767597": { + "flemming": 13, + "training": 1262 + }, + "1767625": { + "flemming": 3, + "training": 1418 + }, + "1768117": { + "flemming": 1, + "training": 1529 + }, + "1768341": { + "flemming": 5, + "training": 1282 + }, + "1769103": { + "flemming": 47, + "training": 1566 + }, + "1769505": { + "flemming": 3, + "training": 1053 + }, + "1769566": { + "flemming": 113, + "training": 1533 + }, + "1769897": { + "flemming": 607, + "training": 1548 + }, + "1769958": { + "flemming": 1, + "training": 1489 + }, + "1770150": { + "flemming": 2, + "training": 1318 + }, + "1770307": { + "flemming": 48, + "training": 1563 + }, + "1770477": { + "flemming": 83, + "training": 1460 + }, + "1770772": { + "flemming": 1, + "training": 1524 + }, + "1770880": { + "flemming": 103, + "training": 1231 + }, + "1771040": { + "flemming": 8, + "training": 1578 + }, + "1771214": { + "flemming": 21, + "training": 1543 + }, + "1771509": { + "flemming": 77, + "training": 1531 + }, + "1771698": { + "flemming": 53, + "training": 1311 + }, + "1772169": { + "flemming": 78, + "training": 945 + }, + "1772179": { + "flemming": 150, + "training": 1242 + }, + "1772940": { + "flemming": 4, + "training": 372 + }, + "1773309": { + "flemming": 1, + "training": 197 + }, + "1775152": { + "flemming": 1, + "training": 0 + }, + "1775891": { + "flemming": 2, + "training": 341 + }, + "1776330": { + "flemming": 4, + "training": 1187 + }, + "1776862": { + "flemming": 3, + "training": 1377 + }, + "1777253": { + "flemming": 19, + "training": 775 + }, + "1778074": { + "flemming": 23, + "training": 1566 + }, + "1779690": { + "flemming": 4, + "training": 1034 + }, + "1780150": { + "flemming": 10, + "training": 1227 + }, + "1781694": { + "flemming": 10, + "training": 142 + }, + "1782560": { + "flemming": 1, + "training": 1345 + }, + "1782615": { + "flemming": 1, + "training": 614 + }, + "1782627": { + "flemming": 1, + "training": 1211 + }, + "1782672": { + "flemming": 21, + "training": 947 + }, + "1782726": { + "flemming": 4, + "training": 940 + }, + "1782763": { + "flemming": 140, + "training": 734 + }, + "1782777": { + "flemming": 639, + "training": 2511 + }, + "1782841": { + "flemming": 2, + "training": 230 + }, + "1782927": { + "flemming": 61, + "training": 712 + }, + "1782948": { + "flemming": 51, + "training": 413 + }, + "1783037": { + "flemming": 1, + "training": 321 + }, + "1783043": { + "flemming": 16, + "training": 1181 + }, + "1785286": { + "flemming": 395, + "training": 1561 + }, + "1785888": { + "flemming": 68, + "training": 1218 + }, + "1785895": { + "flemming": 36, + "training": 813 + }, + "1786902": { + "flemming": 9, + "training": 735 + }, + "1787112": { + "flemming": 1, + "training": 89 + }, + "1787610": { + "flemming": 14, + "training": 473 + }, + "1789267": { + "flemming": 11, + "training": 1297 + }, + "1789580": { + "flemming": 1, + "training": 863 + }, + "1789694": { + "flemming": 4, + "training": 1304 + }, + "1789695": { + "flemming": 192, + "training": 1443 + }, + "1789730": { + "flemming": 17, + "training": 1486 + }, + "1789745": { + "flemming": 94, + "training": 1406 + }, + "1789783": { + "flemming": 21, + "training": 216 + }, + "1789785": { + "flemming": 32, + "training": 1199 + }, + "1789982": { + "flemming": 5, + "training": 1491 + }, + "1790002": { + "flemming": 9, + "training": 851 + }, + "1790072": { + "flemming": 2, + "training": 1325 + }, + "1790160": { + "flemming": 1, + "training": 53 + }, + "1791422": { + "flemming": 145, + "training": 1549 + }, + "1792383": { + "flemming": 367, + "training": 497 + }, + "1792411": { + "flemming": 22, + "training": 1389 + }, + "1792418": { + "flemming": 219, + "training": 1514 + }, + "1793877": { + "flemming": 3, + "training": 1274 + }, + "1794590": { + "flemming": 187, + "training": 1302 + }, + "1795215": { + "flemming": 46, + "training": 1555 + }, + "1795854": { + "flemming": 2, + "training": 958 + }, + "1796117": { + "flemming": 3, + "training": 1462 + }, + "1796145": { + "flemming": 38, + "training": 1534 + }, + "1796169": { + "flemming": 1, + "training": 1312 + }, + "1796668": { + "flemming": 1, + "training": 0 + }, + "1796678": { + "flemming": 15, + "training": 1508 + }, + "1797178": { + "flemming": 2, + "training": 878 + }, + "1797258": { + "flemming": 33, + "training": 1507 + }, + "1797367": { + "flemming": 1, + "training": 1120 + }, + "1797479": { + "flemming": 56, + "training": 1346 + }, + "1798346": { + "flemming": 1, + "training": 1155 + }, + "1798449": { + "flemming": 2, + "training": 1462 + }, + "1798807": { + "flemming": 1146, + "training": 1551 + }, + "1798974": { + "flemming": 19, + "training": 1541 + }, + "1799132": { + "flemming": 14, + "training": 787 + }, + "1799135": { + "flemming": 3, + "training": 1549 + }, + "1799701": { + "flemming": 4, + "training": 997 + }, + "1799708": { + "flemming": 5, + "training": 516 + }, + "1800004": { + "flemming": 16, + "training": 1256 + }, + "1800032": { + "flemming": 137, + "training": 1232 + }, + "1801896": { + "flemming": 33, + "training": 1139 + }, + "1802280": { + "flemming": 136, + "training": 1431 + }, + "1803012": { + "flemming": 1, + "training": 432 + }, + "1803073": { + "flemming": 37, + "training": 1253 + }, + "1804071": { + "flemming": 447, + "training": 1179 + }, + "1804906": { + "flemming": 460, + "training": 1236 + }, + "1807206": { + "flemming": 36, + "training": 0 + }, + "1810099": { + "flemming": 43, + "training": 1367 + }, + "1811789": { + "flemming": 325, + "training": 0 + }, + "1811896": { + "flemming": 2074, + "training": 0 + }, + "1812394": { + "flemming": 35, + "training": 637 + }, + "1813114": { + "flemming": 368, + "training": 1512 + }, + "1819145": { + "flemming": 1335, + "training": 912 + }, + "1819873": { + "flemming": 21, + "training": 553 + }, + "1820039": { + "flemming": 28, + "training": 1240 + }, + "1820372": { + "flemming": 198, + "training": 1492 + }, + "1821911": { + "flemming": 476, + "training": 529 + }, + "1822346": { + "flemming": 176, + "training": 1366 + }, + "1822587": { + "flemming": 9, + "training": 711 + }, + "1822610": { + "flemming": 24, + "training": 1235 + }, + "1822613": { + "flemming": 6, + "training": 894 + }, + "1822796": { + "flemming": 41, + "training": 1276 + }, + "1822819": { + "flemming": 24, + "training": 1204 + }, + "1822830": { + "flemming": 1, + "training": 465 + }, + "1823726": { + "flemming": 32, + "training": 1280 + }, + "1825064": { + "flemming": 36, + "training": 1450 + }, + "1825077": { + "flemming": 132, + "training": 1481 + }, + "1825156": { + "flemming": 54, + "training": 943 + }, + "1825971": { + "flemming": 567, + "training": 1253 + }, + "1825983": { + "flemming": 1068, + "training": 1412 + }, + "1826022": { + "flemming": 18, + "training": 482 + }, + "1827125": { + "flemming": 7, + "training": 1325 + }, + "1828162": { + "flemming": 223, + "training": 1331 + }, + "1828637": { + "flemming": 13, + "training": 1206 + }, + "1830410": { + "flemming": 14, + "training": 1284 + }, + "1830937": { + "flemming": 12, + "training": 1245 + }, + "1830962": { + "flemming": 2, + "training": 110 + }, + "1831136": { + "flemming": 1, + "training": 1480 + }, + "1831643": { + "flemming": 2, + "training": 750 + }, + "1835156": { + "flemming": 16, + "training": 1173 + }, + "1836899": { + "flemming": 5, + "training": 1470 + }, + "1839893": { + "flemming": 16, + "training": 718 + }, + "1841261": { + "flemming": 27, + "training": 1519 + }, + "1845270": { + "flemming": 10, + "training": 1422 + }, + "1847407": { + "flemming": 2, + "training": 396 + }, + "1862580": { + "flemming": 125, + "training": 1162 + }, + "1862837": { + "flemming": 3, + "training": 841 + }, + "1864377": { + "flemming": 164, + "training": 1079 + }, + "1870250": { + "flemming": 5, + "training": 1526 + }, + "1871252": { + "flemming": 1, + "training": 1566 + }, + "1871407": { + "flemming": 5, + "training": 1486 + }, + "1872368": { + "flemming": 32, + "training": 1492 + }, + "1872901": { + "flemming": 1, + "training": 1513 + }, + "1875008": { + "flemming": 147, + "training": 1301 + }, + "1875327": { + "flemming": 38, + "training": 1327 + }, + "1875869": { + "flemming": 20, + "training": 143 + }, + "1876329": { + "flemming": 20, + "training": 1216 + }, + "1876542": { + "flemming": 1, + "training": 1436 + }, + "1879252": { + "flemming": 617, + "training": 1173 + }, + "1879970": { + "flemming": 72, + "training": 1749 + }, + "1881151": { + "flemming": 53, + "training": 1544 + }, + "1882210": { + "flemming": 42, + "training": 1548 + }, + "1883161": { + "flemming": 42, + "training": 1248 + }, + "1884212": { + "flemming": 6, + "training": 365 + }, + "1884255": { + "flemming": 72, + "training": 1324 + }, + "1884273": { + "flemming": 5, + "training": 985 + }, + "1884370": { + "flemming": 262, + "training": 1220 + }, + "1884403": { + "flemming": 47, + "training": 1483 + }, + "1884465": { + "flemming": 728, + "training": 1552 + }, + "1884970": { + "flemming": 54, + "training": 1206 + }, + "1886579": { + "flemming": 2, + "training": 1519 + }, + "1886587": { + "flemming": 1, + "training": 1569 + }, + "1887108": { + "flemming": 28, + "training": 1305 + }, + "1887290": { + "flemming": 2067, + "training": 1469 + }, + "1888743": { + "flemming": 5, + "training": 185 + }, + "1888759": { + "flemming": 23, + "training": 1550 + }, + "1888826": { + "flemming": 90, + "training": 427 + }, + "1889942": { + "flemming": 10, + "training": 249 + }, + "1890187": { + "flemming": 121, + "training": 1351 + }, + "1890534": { + "flemming": 1, + "training": 1500 + }, + "1890576": { + "flemming": 168, + "training": 1563 + }, + "1890656": { + "flemming": 4, + "training": 324 + }, + "1891059": { + "flemming": 1, + "training": 257 + }, + "1891326": { + "flemming": 1, + "training": 592 + }, + "1891473": { + "flemming": 19, + "training": 1201 + }, + "1891493": { + "flemming": 12, + "training": 1494 + }, + "1951557": { + "flemming": 59, + "training": 1265 + }, + "1951649": { + "flemming": 13, + "training": 856 + }, + "1952014": { + "flemming": 254, + "training": 1188 + }, + "1952062": { + "flemming": 1, + "training": 1491 + }, + "1952532": { + "flemming": 483, + "training": 1302 + }, + "1952806": { + "flemming": 108, + "training": 1573 + }, + "1952812": { + "flemming": 98, + "training": 1378 + }, + "1956440": { + "flemming": 3, + "training": 2457 + }, + "1956524": { + "flemming": 1, + "training": 1432 + }, + "1956599": { + "flemming": 421, + "training": 941 + }, + "1957570": { + "flemming": 33, + "training": 1265 + }, + "1957572": { + "flemming": 118, + "training": 1525 + }, + "1957816": { + "flemming": 9, + "training": 1559 + }, + "1957845": { + "flemming": 303, + "training": 1359 + }, + "1957852": { + "flemming": 8, + "training": 874 + }, + "1958024": { + "flemming": 6, + "training": 1260 + }, + "1959383": { + "flemming": 10, + "training": 898 + }, + "1959395": { + "flemming": 8, + "training": 996 + }, + "1959914": { + "flemming": 55, + "training": 1226 + }, + "1960617": { + "flemming": 14, + "training": 1528 + }, + "1961040": { + "flemming": 4, + "training": 555 + }, + "1962204": { + "flemming": 17, + "training": 1472 + }, + "1962265": { + "flemming": 83, + "training": 1339 + }, + "1962434": { + "flemming": 220, + "training": 1899 + }, + "1962516": { + "flemming": 1, + "training": 1502 + }, + "1962636": { + "flemming": 18, + "training": 1449 + }, + "1962990": { + "flemming": 41, + "training": 829 + }, + "1963011": { + "flemming": 13, + "training": 439 + }, + "1963306": { + "flemming": 28, + "training": 1361 + }, + "1963446": { + "flemming": 117, + "training": 1561 + }, + "1964653": { + "flemming": 69, + "training": 1213 + }, + "1964657": { + "flemming": 59, + "training": 498 + }, + "1965166": { + "flemming": 36, + "training": 947 + }, + "1965208": { + "flemming": 41, + "training": 503 + }, + "1965763": { + "flemming": 75, + "training": 1380 + }, + "1965777": { + "flemming": 4, + "training": 763 + }, + "1965825": { + "flemming": 5, + "training": 1316 + }, + "1965841": { + "flemming": 21, + "training": 1343 + }, + "1965913": { + "flemming": 1, + "training": 1503 + }, + "1965996": { + "flemming": 20, + "training": 326 + }, + "1966017": { + "flemming": 95, + "training": 1450 + }, + "1966351": { + "flemming": 5, + "training": 1406 + }, + "1967245": { + "flemming": 6, + "training": 1165 + }, + "1967815": { + "flemming": 14, + "training": 1350 + }, + "1968678": { + "flemming": 170, + "training": 126 + }, + "1968867": { + "flemming": 280, + "training": 1421 + }, + "1970213": { + "flemming": 67, + "training": 1545 + }, + "1970284": { + "flemming": 31, + "training": 920 + }, + "1972120": { + "flemming": 3, + "training": 395 + }, + "1972187": { + "flemming": 181, + "training": 338 + }, + "1972234": { + "flemming": 1, + "training": 1293 + }, + "1972250": { + "flemming": 128, + "training": 1547 + }, + "1972342": { + "flemming": 10, + "training": 244 + }, + "1972434": { + "flemming": 6, + "training": 941 + }, + "1972449": { + "flemming": 6, + "training": 1475 + }, + "1973414": { + "flemming": 29, + "training": 1192 + }, + "1973467": { + "flemming": 88, + "training": 1559 + }, + "1975546": { + "flemming": 1, + "training": 1176 + }, + "1975553": { + "flemming": 10, + "training": 413 + }, + "1975571": { + "flemming": 8, + "training": 516 + }, + "1975897": { + "flemming": 688, + "training": 1552 + }, + "1975903": { + "flemming": 3, + "training": 1546 + }, + "1976163": { + "flemming": 70, + "training": 1306 + }, + "1977003": { + "flemming": 15, + "training": 1474 + }, + "1978114": { + "flemming": 347, + "training": 1287 + }, + "1978375": { + "flemming": 4, + "training": 320 + }, + "1978445": { + "flemming": 698, + "training": 1559 + }, + "1978776": { + "flemming": 229, + "training": 1524 + }, + "1978977": { + "flemming": 8, + "training": 397 + }, + "1979308": { + "flemming": 139, + "training": 1240 + }, + "1979430": { + "flemming": 4, + "training": 392 + }, + "1979473": { + "flemming": 320, + "training": 1400 + }, + "1979781": { + "flemming": 4, + "training": 621 + }, + "1982500": { + "flemming": 228, + "training": 1382 + }, + "1982525": { + "flemming": 50, + "training": 165 + }, + "1982529": { + "flemming": 2, + "training": 338 + }, + "1982541": { + "flemming": 229, + "training": 1463 + }, + "1982542": { + "flemming": 5, + "training": 1269 + }, + "1982592": { + "flemming": 1, + "training": 47 + }, + "1982636": { + "flemming": 35, + "training": 1238 + }, + "1982671": { + "flemming": 3, + "training": 669 + }, + "1982746": { + "flemming": 5, + "training": 525 + }, + "1982885": { + "flemming": 14, + "training": 1221 + }, + "1983170": { + "flemming": 4, + "training": 1152 + }, + "1983260": { + "flemming": 4, + "training": 544 + }, + "1983288": { + "flemming": 1, + "training": 1164 + }, + "1983387": { + "flemming": 3, + "training": 278 + }, + "1983441": { + "flemming": 23, + "training": 623 + }, + "1983442": { + "flemming": 35, + "training": 656 + }, + "1983525": { + "flemming": 318, + "training": 1398 + }, + "1983548": { + "flemming": 3, + "training": 233 + }, + "1983648": { + "flemming": 96, + "training": 865 + }, + "1983694": { + "flemming": 2, + "training": 0 + }, + "1983705": { + "flemming": 2, + "training": 889 + }, + "1983755": { + "flemming": 49, + "training": 444 + }, + "1983896": { + "flemming": 128, + "training": 1180 + }, + "1984117": { + "flemming": 19, + "training": 1256 + }, + "1984954": { + "flemming": 5, + "training": 648 + }, + "1985522": { + "flemming": 334, + "training": 909 + }, + "1986052": { + "flemming": 6, + "training": 1399 + }, + "1986056": { + "flemming": 1, + "training": 1499 + }, + "1986157": { + "flemming": 24, + "training": 1556 + }, + "1986166": { + "flemming": 118, + "training": 1338 + }, + "1986220": { + "flemming": 99, + "training": 1522 + }, + "1986522": { + "flemming": 18, + "training": 1361 + }, + "1986575": { + "flemming": 26, + "training": 1357 + }, + "1987527": { + "flemming": 4, + "training": 685 + }, + "1987744": { + "flemming": 2, + "training": 995 + }, + "1988593": { + "flemming": 114, + "training": 1537 + }, + "1988881": { + "flemming": 168, + "training": 1185 + }, + "1989428": { + "flemming": 157, + "training": 1530 + }, + "1990066": { + "flemming": 1, + "training": 1317 + }, + "1990150": { + "flemming": 79, + "training": 1198 + }, + "1990551": { + "flemming": 1, + "training": 1554 + }, + "1991371": { + "flemming": 52, + "training": 1525 + }, + "1992066": { + "flemming": 441, + "training": 1540 + }, + "1992504": { + "flemming": 1, + "training": 1447 + }, + "4522322": { + "flemming": 42, + "training": 134 + }, + "4523522": { + "flemming": 28, + "training": 1246 + }, + "4523885": { + "flemming": 70, + "training": 1482 + }, + "4524054": { + "flemming": 263, + "training": 1441 + }, + "4524072": { + "flemming": 5, + "training": 1013 + }, + "4524376": { + "flemming": 47, + "training": 1492 + }, + "4524393": { + "flemming": 2, + "training": 632 + }, + "4524421": { + "flemming": 272, + "training": 1441 + }, + "4524426": { + "flemming": 33, + "training": 1319 + }, + "4524636": { + "flemming": 282, + "training": 1512 + }, + "4524638": { + "flemming": 341, + "training": 1837 + }, + "4525078": { + "flemming": 377, + "training": 1524 + }, + "4525500": { + "flemming": 1, + "training": 156 + }, + "4525510": { + "flemming": 10, + "training": 996 + }, + "4525530": { + "flemming": 1, + "training": 468 + }, + "4525540": { + "flemming": 33, + "training": 1347 + }, + "4525547": { + "flemming": 6, + "training": 138 + }, + "4529566": { + "flemming": 43, + "training": 1242 + }, + "4530151": { + "flemming": 4, + "training": 1280 + }, + "4531284": { + "flemming": 27, + "training": 686 + }, + "4531402": { + "flemming": 1, + "training": 1335 + }, + "4531517": { + "flemming": 73, + "training": 320 + }, + "4531687": { + "flemming": 7, + "training": 1116 + }, + "4531690": { + "flemming": 133, + "training": 1286 + }, + "4532022": { + "flemming": 5, + "training": 1269 + }, + "4532095": { + "flemming": 5, + "training": 1466 + }, + "4532253": { + "flemming": 2, + "training": 68 + }, + "4532297": { + "flemming": 94, + "training": 495 + }, + "4532357": { + "flemming": 6, + "training": 1236 + }, + "4532544": { + "flemming": 163, + "training": 1515 + }, + "4532886": { + "flemming": 208, + "training": 644 + }, + "4532888": { + "flemming": 5, + "training": 1193 + }, + "4532890": { + "flemming": 3441, + "training": 2481 + }, + "4533115": { + "flemming": 3, + "training": 1583 + }, + "4533136": { + "flemming": 54, + "training": 1352 + }, + "4533202": { + "flemming": 17, + "training": 1149 + }, + "4533273": { + "flemming": 17, + "training": 1324 + }, + "4533360": { + "flemming": 3, + "training": 1248 + }, + "4533431": { + "flemming": 1, + "training": 1352 + }, + "4533433": { + "flemming": 2, + "training": 1460 + }, + "4533442": { + "flemming": 1, + "training": 65 + }, + "4533671": { + "flemming": 1, + "training": 1626 + }, + "4533952": { + "flemming": 5, + "training": 1313 + }, + "4534057": { + "flemming": 3, + "training": 1139 + }, + "4534166": { + "flemming": 20, + "training": 1550 + }, + "4534207": { + "flemming": 32, + "training": 740 + }, + "4534290": { + "flemming": 51, + "training": 1575 + }, + "4534299": { + "flemming": 7, + "training": 2571 + }, + "4534398": { + "flemming": 15, + "training": 144 + }, + "4534408": { + "flemming": 1, + "training": 743 + }, + "4534463": { + "flemming": 1, + "training": 480 + }, + "4534485": { + "flemming": 9, + "training": 418 + }, + "4534533": { + "flemming": 5, + "training": 1355 + }, + "4534538": { + "flemming": 10, + "training": 495 + }, + "4534540": { + "flemming": 114, + "training": 959 + }, + "4534719": { + "flemming": 38, + "training": 1449 + }, + "4534872": { + "flemming": 59, + "training": 1253 + }, + "4534909": { + "flemming": 116, + "training": 1350 + }, + "5101678": { + "flemming": 238, + "training": 270 + }, + "5101745": { + "flemming": 4, + "training": 728 + }, + "5102951": { + "flemming": 168, + "training": 1484 + }, + "5103451": { + "flemming": 27, + "training": 1212 + }, + "5104442": { + "flemming": 46, + "training": 1454 + }, + "5104558": { + "flemming": 14, + "training": 952 + }, + "5105339": { + "flemming": 486, + "training": 1316 + }, + "5109821": { + "flemming": 11, + "training": 465 + }, + "5110200": { + "flemming": 46, + "training": 979 + }, + "5110213": { + "flemming": 42, + "training": 1557 + }, + "5110670": { + "flemming": 33, + "training": 1256 + }, + "5110885": { + "flemming": 31, + "training": 1431 + }, + "5111574": { + "flemming": 14, + "training": 1269 + }, + "5112155": { + "flemming": 3, + "training": 1317 + }, + "5112283": { + "flemming": 64, + "training": 1554 + }, + "5112291": { + "flemming": 3, + "training": 1535 + }, + "5112362": { + "flemming": 4, + "training": 0 + }, + "5113036": { + "flemming": 4, + "training": 1410 + }, + "5113078": { + "flemming": 15, + "training": 1332 + }, + "5113234": { + "flemming": 7, + "training": 1382 + }, + "5114198": { + "flemming": 837, + "training": 1474 + }, + "5114327": { + "flemming": 6, + "training": 1237 + }, + "5115771": { + "flemming": 77, + "training": 1372 + }, + "5115777": { + "flemming": 33, + "training": 929 + }, + "5115874": { + "flemming": 518, + "training": 1009 + }, + "5116475": { + "flemming": 2, + "training": 376 + }, + "5116609": { + "flemming": 1901, + "training": 0 + }, + "5116669": { + "flemming": 1, + "training": 0 + }, + "5116850": { + "flemming": 213, + "training": 0 + }, + "5116941": { + "flemming": 878, + "training": 0 + }, + "5117049": { + "flemming": 1232, + "training": 0 + }, + "5117089": { + "flemming": 393, + "training": 0 + }, + "5117400": { + "flemming": 2843, + "training": 1546 + }, + "5118892": { + "flemming": 7, + "training": 1356 + }, + "5118996": { + "flemming": 712, + "training": 1417 + }, + "5119245": { + "flemming": 338, + "training": 605 + }, + "5124007": { + "flemming": 248, + "training": 1373 + }, + "5124143": { + "flemming": 27, + "training": 991 + }, + "5124233": { + "flemming": 682, + "training": 1223 + }, + "5125689": { + "flemming": 141, + "training": 1559 + }, + "5126212": { + "flemming": 8, + "training": 961 + }, + "5126680": { + "flemming": 1, + "training": 1353 + }, + "5142870": { + "flemming": 30, + "training": 1533 + }, + "5142971": { + "flemming": 243, + "training": 0 + }, + "5143048": { + "flemming": 9, + "training": 1351 + }, + "5143129": { + "flemming": 301, + "training": 1511 + }, + "5143147": { + "flemming": 182, + "training": 1280 + }, + "5143380": { + "flemming": 180, + "training": 1526 + }, + "5143651": { + "flemming": 63, + "training": 1322 + }, + "5143675": { + "flemming": 72, + "training": 1476 + }, + "5143697": { + "flemming": 247, + "training": 1479 + }, + "5144190": { + "flemming": 10, + "training": 1181 + }, + "5144426": { + "flemming": 23, + "training": 1320 + }, + "5144534": { + "flemming": 229, + "training": 1508 + }, + "5144543": { + "flemming": 23, + "training": 1549 + }, + "5145009": { + "flemming": 131, + "training": 1326 + }, + "5145136": { + "flemming": 1, + "training": 740 + }, + "5145409": { + "flemming": 4, + "training": 1302 + }, + "5146342": { + "flemming": 13, + "training": 439 + }, + "5146379": { + "flemming": 85, + "training": 1252 + }, + "5146412": { + "flemming": 24, + "training": 1100 + }, + "5146496": { + "flemming": 1, + "training": 307 + }, + "5146559": { + "flemming": 345, + "training": 1672 + }, + "5146677": { + "flemming": 1, + "training": 1505 + }, + "5146961": { + "flemming": 74, + "training": 1505 + }, + "5147039": { + "flemming": 1, + "training": 2449 + }, + "5147062": { + "flemming": 1, + "training": 1078 + }, + "5147193": { + "flemming": 2, + "training": 1503 + }, + "5147208": { + "flemming": 26, + "training": 1369 + }, + "5147245": { + "flemming": 5, + "training": 1197 + }, + "5147608": { + "flemming": 30, + "training": 1326 + }, + "5148286": { + "flemming": 1, + "training": 1387 + }, + "5148424": { + "flemming": 120, + "training": 1171 + }, + "5148436": { + "flemming": 263, + "training": 454 + }, + "5148462": { + "flemming": 34, + "training": 1380 + }, + "5148486": { + "flemming": 60, + "training": 900 + }, + "5148487": { + "flemming": 570, + "training": 1293 + }, + "5149438": { + "flemming": 398, + "training": 1497 + }, + "5149665": { + "flemming": 48, + "training": 1475 + }, + "5149746": { + "flemming": 40, + "training": 1176 + }, + "5714973": { + "flemming": 199, + "training": 1526 + }, + "5768880": { + "flemming": 22, + "training": 1268 + }, + "5769068": { + "flemming": 17, + "training": 1564 + }, + "5769072": { + "flemming": 313, + "training": 1202 + }, + "5769272": { + "flemming": 1, + "training": 210 + }, + "5771259": { + "flemming": 2, + "training": 567 + }, + "5771350": { + "flemming": 163, + "training": 1007 + }, + "5771982": { + "flemming": 12, + "training": 725 + }, + "5772063": { + "flemming": 8, + "training": 2371 + }, + "5772176": { + "flemming": 2, + "training": 1564 + }, + "5772196": { + "flemming": 76, + "training": 1501 + }, + "5772202": { + "flemming": 2, + "training": 481 + }, + "5772205": { + "flemming": 2, + "training": 563 + }, + "5772210": { + "flemming": 44, + "training": 1325 + }, + "5772351": { + "flemming": 26, + "training": 1551 + }, + "5880533": { + "flemming": 406, + "training": 1539 + }, + "5880545": { + "flemming": 6, + "training": 1657 + }, + "5880552": { + "flemming": 41, + "training": 1370 + }, + "5880559": { + "flemming": 67, + "training": 1306 + }, + "5880563": { + "flemming": 2, + "training": 973 + }, + "5884851": { + "flemming": 96, + "training": 1527 + }, + "6097214": { + "flemming": 86, + "training": 1483 + }, + "6097236": { + "flemming": 1, + "training": 1524 + }, + "7438067": { + "flemming": 1, + "training": 785 + }, + "7443518": { + "flemming": 28, + "training": 1535 + }, + "7446048": { + "flemming": 1, + "training": 312 + }, + "7681733": { + "flemming": 36, + "training": 1427 + }, + "7730078": { + "flemming": 694, + "training": 0 + }, + "7752082": { + "flemming": 8, + "training": 443 + }, + "7780930": { + "flemming": 22, + "training": 1213 + }, + "7825213": { + "flemming": 44, + "training": 0 + }, + "7895336": { + "flemming": 2, + "training": 1245 + }, + "7940536": { + "flemming": 5, + "training": 1536 + }, + "7960566": { + "flemming": 8, + "training": 1266 + }, + "7972792": { + "flemming": 1, + "training": 185 + }, + "8007222": { + "flemming": 2, + "training": 492 + }, + "8015895": { + "flemming": 953, + "training": 1159 + }, + "8105817": { + "flemming": 2, + "training": 1343 + }, + "8223165": { + "flemming": 27, + "training": 1567 + }, + "8262357": { + "flemming": 30, + "training": 694 + }, + "8361848": { + "flemming": 678, + "training": 1547 + }, + "8361973": { + "flemming": 5, + "training": 40 + }, + "8397564": { + "flemming": 41, + "training": 1433 + }, + "8407461": { + "flemming": 1, + "training": 1382 + }, + "8421569": { + "flemming": 905, + "training": 1487 + }, + "8537359": { + "flemming": 21, + "training": 1302 + }, + "8581601": { + "flemming": 3, + "training": 515 + }, + "9101339": { + "flemming": 86, + "training": 757 + } + } +} diff --git a/docs/assets/mambo-loading-scaling.json b/docs/assets/mambo-loading-scaling.json new file mode 100644 index 0000000..a00ecd3 --- /dev/null +++ b/docs/assets/mambo-loading-scaling.json @@ -0,0 +1,274 @@ +{ + "cells": [ + { + "backend": "torch", + "batch": 8, + "workers": 1, + "preparation": 91.33686295883051, + "prepared": 263.73442338507033, + "end_to_end": 58.129077562830254 + }, + { + "backend": "torch", + "batch": 8, + "workers": 2, + "preparation": 181.8251242418234, + "prepared": 278.558515371201, + "end_to_end": 88.47787181454896 + }, + { + "backend": "torch", + "batch": 8, + "workers": 4, + "preparation": 216.0854611598373, + "prepared": 235.09056376076117, + "end_to_end": 98.72933981308955 + }, + { + "backend": "torch", + "batch": 8, + "workers": 8, + "preparation": 236.82045335131505, + "prepared": 235.57030306622352, + "end_to_end": 102.50269819473858 + }, + { + "backend": "torch", + "batch": 32, + "workers": 1, + "preparation": 96.71097313648941, + "prepared": 341.39592804460614, + "end_to_end": 75.83913838049648 + }, + { + "backend": "torch", + "batch": 32, + "workers": 2, + "preparation": 157.30967653664388, + "prepared": 349.5188065385458, + "end_to_end": 107.27458998016668 + }, + { + "backend": "torch", + "batch": 32, + "workers": 4, + "preparation": 223.20751755525168, + "prepared": 343.69387788430276, + "end_to_end": 129.09418839659034 + }, + { + "backend": "torch", + "batch": 32, + "workers": 8, + "preparation": 228.9704897880299, + "prepared": 330.70546502134476, + "end_to_end": 134.94756144379662 + }, + { + "backend": "torch", + "batch": 64, + "workers": 1, + "preparation": 100.15343584591987, + "prepared": 322.6752212066644, + "end_to_end": 76.66900202435194 + }, + { + "backend": "torch", + "batch": 64, + "workers": 2, + "preparation": 162.37247620891006, + "prepared": 349.73708459547316, + "end_to_end": 98.14394209806231 + }, + { + "backend": "torch", + "batch": 64, + "workers": 4, + "preparation": 224.79508391398625, + "prepared": 344.2625245357193, + "end_to_end": 131.80535667045675 + }, + { + "backend": "torch", + "batch": 64, + "workers": 8, + "preparation": 252.84517589887423, + "prepared": 354.71692002322646, + "end_to_end": 137.14388503475107 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 1, + "preparation": 102.76046860097613, + "prepared": 209.47796127843597, + "end_to_end": 70.98159021461862 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 2, + "preparation": 161.8345401630534, + "prepared": 213.9945422338676, + "end_to_end": 91.17262122903752 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 4, + "preparation": 210.83053312171324, + "prepared": 205.2858909988962, + "end_to_end": 107.06981449462224 + }, + { + "backend": "onnx", + "batch": 8, + "workers": 8, + "preparation": 260.595597089102, + "prepared": 208.69653597830774, + "end_to_end": 111.19488410570094 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 1, + "preparation": 101.66988690727861, + "prepared": 211.4091981569424, + "end_to_end": 68.26051834172199 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 2, + "preparation": 174.20073978469355, + "prepared": 207.20361095863493, + "end_to_end": 84.67745809845839 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 4, + "preparation": 206.5486747862816, + "prepared": 203.25719270324169, + "end_to_end": 100.49962793328908 + }, + { + "backend": "onnx", + "batch": 32, + "workers": 8, + "preparation": 233.883229097214, + "prepared": 203.06915935556427, + "end_to_end": 103.97221966298999 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 1, + "preparation": 99.38106111852477, + "prepared": 204.57713922660275, + "end_to_end": 61.02925607713586 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 2, + "preparation": 116.9312446490858, + "prepared": 203.92716497990443, + "end_to_end": 77.52287720107746 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 4, + "preparation": 170.29300158783053, + "prepared": 208.27633192812468, + "end_to_end": 90.78884134636633 + }, + { + "backend": "onnx", + "batch": 64, + "workers": 8, + "preparation": 210.7168454101736, + "prepared": 208.71386586142265, + "end_to_end": 88.16061887266062 + } + ], + "streams": [ + { + "backend": "torch", + "workers": 1, + "overlap": false, + "images_per_second": 74.38661931325872 + }, + { + "backend": "torch", + "workers": 1, + "overlap": true, + "images_per_second": 85.52164452534973 + }, + { + "backend": "torch", + "workers": 4, + "overlap": false, + "images_per_second": 128.17302987288383 + }, + { + "backend": "torch", + "workers": 4, + "overlap": true, + "images_per_second": 154.16087883868184 + }, + { + "backend": "torch", + "workers": 8, + "overlap": false, + "images_per_second": 133.91537642918294 + }, + { + "backend": "torch", + "workers": 8, + "overlap": true, + "images_per_second": 157.69016646575744 + }, + { + "backend": "onnx", + "workers": 1, + "overlap": false, + "images_per_second": 46.10735164453709 + }, + { + "backend": "onnx", + "workers": 1, + "overlap": true, + "images_per_second": 82.90015664523862 + }, + { + "backend": "onnx", + "workers": 4, + "overlap": false, + "images_per_second": 99.6408925107329 + }, + { + "backend": "onnx", + "workers": 4, + "overlap": true, + "images_per_second": 155.23328771967067 + }, + { + "backend": "onnx", + "workers": 8, + "overlap": false, + "images_per_second": 98.01451957072325 + }, + { + "backend": "onnx", + "workers": 8, + "overlap": true, + "images_per_second": 132.69168375969076 + } + ], + "sources_sha256": { + "local-evidence/mambo-loading-scaling-torch/report.json": "466878e68b29ee811af5dc0cfb4ca7405622d76d0c8d60ed96fdecd6ef1b906b", + "local-evidence/mambo-loading-scaling-onnx/report.json": "fe45b77d423621d3ae102f0067b770a07a4e980f75e73ae60b165ac80aa10e74" + } +} diff --git a/docs/assets/mambo-loading-scaling.svg b/docs/assets/mambo-loading-scaling.svg new file mode 100644 index 0000000..818807f --- /dev/null +++ b/docs/assets/mambo-loading-scaling.svg @@ -0,0 +1,870 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + Preparation workers + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 50 + + + + + + + + + + + + + 75 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 125 + + + + + + + + + + + + + 150 + + + + + + + + + + + + + 175 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Torch · synchronous API + + + + + + + + + + + + + Batch 8 + + + + + + + + + Batch 32 + + + + + + + + + Batch 64 + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 4 + + + + + + + + + + 8 + + + + Preparation workers + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 50 + + + + + + + + + + + + + 75 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 125 + + + + + + + + + + + + + 150 + + + + + + + + + + + + + 175 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Onnx · synchronous API + + + + + + + + + + + + + Batch 8 + + + + + + + + + Batch 32 + + + + + + + + + Batch 64 + + + + + + + + + + + + + + + + PyTorch + + + + + + + + + + ONNX + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 50 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 150 + + + + + + + + + + + + + 200 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + 128.2 + + + 99.6 + + + 154.2 + + + 155.2 + + + Experimental stream · batch 32 + + + + + + + + + + Sequential + + + + + + One-batch lookahead + + + + + Loading and scheduling still limit GPU throughput + + + RTX 3080 Ti Laptop; automatic precision; northern Europe; runtime CPU threads fixed at 4. + Worker sweep: 3 ordered trials × 3 observations. Lookahead: 128 images, 4 workers, 5 repeats in one process; experimental, not the API default. + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-tta-comparison.json b/docs/assets/mambo-tta-comparison.json new file mode 100644 index 0000000..a683d87 --- /dev/null +++ b/docs/assets/mambo-tta-comparison.json @@ -0,0 +1,14750 @@ +{ + "purpose": "fixed-subset qualification; not full-data TTA efficacy", + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "variants": [ + { + "backend": "torch", + "profile": "none", + "views": 1, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5634765625, + "micro_accuracy_known": 0.6556818181818181, + "macro_accuracy_all": 0.6133457957593857, + "macro_accuracy_known": 0.642096379935607, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.705078125, + "micro_accuracy_known": 0.705078125, + "macro_accuracy_all": 0.7689213961488385, + "macro_accuracy_known": 0.7689213961488385, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90234375, + "micro_accuracy_known": 0.90234375, + "macro_accuracy_all": 0.8455210395754881, + "macro_accuracy_known": 0.8455210395754881, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6133457957593857, + "1": 0.7689213961488385, + "2": 0.8455210395754881 + }, + "precision": { + "0": 0.38386701130917067, + "1": 0.45490795001104267, + "2": 0.43558849573976716 + }, + "recall": { + "0": 0.6133457957593857, + "1": 0.7689213961488385, + "2": 0.8455210395754881 + }, + "f1": { + "0": 0.30159751090627007, + "1": 0.3978212838878371, + "2": 0.44111747137261753 + }, + "micro_accuracy": { + "0": 0.5634765625, + "1": 0.705078125, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9798422965375859, + "1": 0.9781684255190729, + "2": 0.8328995608878204 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.642096379935607, + "1": 0.7689213961488385, + "2": 0.8455210395754881 + }, + "precision": { + "0": 0.4064149716588741, + "1": 0.45490795001104267, + "2": 0.43558849573976716 + }, + "recall": { + "0": 0.642096379935607, + "1": 0.7689213961488385, + "2": 0.8455210395754881 + }, + "f1": { + "0": 0.3240682608216244, + "1": 0.3978212838878371, + "2": 0.44111747137261753 + }, + "micro_accuracy": { + "0": 0.6556818181818181, + "1": 0.705078125, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9867618399579154, + "1": 0.9781684255190729, + "2": 0.8328995608878204 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "88184708e72f198b2f9dc3394eafe9ca1caae8732dc8983f3f1310fa0d584200" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.673828125, + "micro_accuracy_known": 0.7840909090909091, + "macro_accuracy_all": 0.727382826371436, + "macro_accuracy_known": 0.761478896357597, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8404997671606066, + "macro_accuracy_known": 0.8404997671606066, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9306640625, + "micro_accuracy_known": 0.9306640625, + "macro_accuracy_all": 0.8740778323977335, + "macro_accuracy_known": 0.8740778323977335, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.727382826371436, + "1": 0.8404997671606066, + "2": 0.8740778323977335 + }, + "precision": { + "0": 0.5208990372105127, + "1": 0.5729516072863713, + "2": 0.48648631014856 + }, + "recall": { + "0": 0.727382826371436, + "1": 0.8404997671606066, + "2": 0.8740778323977335 + }, + "f1": { + "0": 0.4459376095229831, + "1": 0.5325071475461216, + "2": 0.48813451419939924 + }, + "micro_accuracy": { + "0": 0.673828125, + "1": 0.7783203125, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.9753358609531615, + "1": 0.9764597221533328, + "2": 0.867042461641923 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.761478896357597, + "1": 0.8404997671606066, + "2": 0.8740778323977335 + }, + "precision": { + "0": 0.5485367915780287, + "1": 0.5729516072863713, + "2": 0.48648631014856 + }, + "recall": { + "0": 0.761478896357597, + "1": 0.8404997671606066, + "2": 0.8740778323977335 + }, + "f1": { + "0": 0.4803844753604072, + "1": 0.5325071475461216, + "2": 0.48813451419939924 + }, + "micro_accuracy": { + "0": 0.7840909090909091, + "1": 0.7783203125, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.978953813750611, + "1": 0.9764597221533328, + "2": 0.867042461641923 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4adb392102116241723841675aa7c654225917b164a2863470f8b7f03e4c7c36" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.689453125, + "micro_accuracy_known": 0.8022727272727272, + "macro_accuracy_all": 0.7444257582219089, + "macro_accuracy_known": 0.779320715638561, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8587220718829114, + "macro_accuracy_known": 0.8587220718829114, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8755822798046276, + "macro_accuracy_known": 0.8755822798046276, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7444257582219089, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "precision": { + "0": 0.544861724758632, + "1": 0.6018770821938243, + "2": 0.4692384071547976 + }, + "recall": { + "0": 0.7444257582219089, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "f1": { + "0": 0.4714537876361763, + "1": 0.5690866270248979, + "2": 0.4708720140695067 + }, + "micro_accuracy": { + "0": 0.689453125, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9745455803070623, + "1": 0.9748839426636258, + "2": 0.8788292243597902 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.779320715638561, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "precision": { + "0": 0.5730387118876329, + "1": 0.6018770821938243, + "2": 0.4692384071547976 + }, + "recall": { + "0": 0.779320715638561, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "f1": { + "0": 0.5077906788590152, + "1": 0.5690866270248979, + "2": 0.4708720140695067 + }, + "micro_accuracy": { + "0": 0.8022727272727272, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9783702674919692, + "1": 0.9748839426636258, + "2": 0.8788292243597902 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8d9ce855aa1728931dd551db0f3b33eec1f57d68331756d0d74e7f096ab54682" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.673828125, + "micro_accuracy_known": 0.7840909090909091, + "macro_accuracy_all": 0.727382826371436, + "macro_accuracy_known": 0.761478896357597, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8404997671606066, + "macro_accuracy_known": 0.8404997671606066, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8720217086106892, + "macro_accuracy_known": 0.8720217086106892, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.727382826371436, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5185913344708133, + "1": 0.5754212262832953, + "2": 0.4381377787821555 + }, + "recall": { + "0": 0.727382826371436, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.4438784570853463, + "1": 0.5347445725358112, + "2": 0.44453406406960855 + }, + "micro_accuracy": { + "0": 0.673828125, + "1": 0.7783203125, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9746761516565939, + "1": 0.9749378584410026, + "2": 0.8643464250458442 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.761478896357597, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5440732642263254, + "1": 0.5754212262832953, + "2": 0.4381377787821555 + }, + "recall": { + "0": 0.761478896357597, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.476431757442951, + "1": 0.5347445725358112, + "2": 0.44453406406960855 + }, + "micro_accuracy": { + "0": 0.7840909090909091, + "1": 0.7783203125, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.980104391425599, + "1": 0.9749378584410026, + "2": 0.8643464250458442 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5d734e06e264cc472f92c6f8d789517eca9f1a6ea30404d2a91e4475baf1a54b" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.685546875, + "micro_accuracy_known": 0.7977272727272727, + "macro_accuracy_all": 0.7369630716547447, + "macro_accuracy_known": 0.771508215638561, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7822265625, + "micro_accuracy_known": 0.7822265625, + "macro_accuracy_all": 0.8453887385495781, + "macro_accuracy_known": 0.8453887385495781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.875199379201428, + "macro_accuracy_known": 0.875199379201428, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7369630716547447, + "1": 0.8453887385495781, + "2": 0.875199379201428 + }, + "precision": { + "0": 0.5367841055341056, + "1": 0.5872092018109718, + "2": 0.4548694535217127 + }, + "recall": { + "0": 0.7369630716547447, + "1": 0.8453887385495781, + "2": 0.875199379201428 + }, + "f1": { + "0": 0.46220797844909955, + "1": 0.5494346893267166, + "2": 0.4554186696946595 + }, + "micro_accuracy": { + "0": 0.685546875, + "1": 0.7822265625, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9750182280188969, + "1": 0.9767525227713265, + "2": 0.8829844004396705 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.771508215638561, + "1": 0.8453887385495781, + "2": 0.875199379201428 + }, + "precision": { + "0": 0.5640922093218913, + "1": 0.5872092018109718, + "2": 0.4548694535217127 + }, + "recall": { + "0": 0.771508215638561, + "1": 0.8453887385495781, + "2": 0.875199379201428 + }, + "f1": { + "0": 0.4972739381266254, + "1": 0.5494346893267166, + "2": 0.4554186696946595 + }, + "micro_accuracy": { + "0": 0.7977272727272727, + "1": 0.7822265625, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9792636812373319, + "1": 0.9767525227713265, + "2": 0.8829844004396705 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f754f6ce3b4749c376f7a326192cb6cad07f66ab4421854d69288c7bbdfbbc36" + } + } + }, + { + "backend": "torch", + "profile": "hflip", + "views": 2, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5615234375, + "micro_accuracy_known": 0.6534090909090909, + "macro_accuracy_all": 0.6091451255139394, + "macro_accuracy_known": 0.6376988032724052, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7041015625, + "micro_accuracy_known": 0.7041015625, + "macro_accuracy_all": 0.772523051856739, + "macro_accuracy_known": 0.772523051856739, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9013671875, + "micro_accuracy_known": 0.9013671875, + "macro_accuracy_all": 0.8415025119082482, + "macro_accuracy_known": 0.8415025119082482, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6091451255139394, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "precision": { + "0": 0.383503109147439, + "1": 0.4643402764482904, + "2": 0.4046742937832088 + }, + "recall": { + "0": 0.6091451255139394, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "f1": { + "0": 0.2997544081281588, + "1": 0.40778881645336285, + "2": 0.4101173096873111 + }, + "micro_accuracy": { + "0": 0.5615234375, + "1": 0.7041015625, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9805015616924377, + "1": 0.9777968970149564, + "2": 0.8410168021297401 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6376988032724052, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "precision": { + "0": 0.4094303109371602, + "1": 0.4643402764482904, + "2": 0.4046742937832088 + }, + "recall": { + "0": 0.6376988032724052, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "f1": { + "0": 0.3244245524722784, + "1": 0.40778881645336285, + "2": 0.4101173096873111 + }, + "micro_accuracy": { + "0": 0.6534090909090909, + "1": 0.7041015625, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9861494891358263, + "1": 0.9777968970149564, + "2": 0.8410168021297401 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "189cda92192aa4274c9bdf88774480942de6ab19fff6cf45d4d5b8b58f54a5e1" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7239714356466123, + "macro_accuracy_known": 0.7579075966925473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.779296875, + "micro_accuracy_known": 0.779296875, + "macro_accuracy_all": 0.8460648058835403, + "macro_accuracy_known": 0.8460648058835403, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8684376388563206, + "macro_accuracy_known": 0.8684376388563206, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7239714356466123, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "precision": { + "0": 0.5329789562289562, + "1": 0.5789691710292569, + "2": 0.4677678477278932 + }, + "recall": { + "0": 0.7239714356466123, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "f1": { + "0": 0.4499769594286163, + "1": 0.538938226884136, + "2": 0.4680864397151781 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.779296875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9736670675959799, + "1": 0.9760534959312177, + "2": 0.8610977665331919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7579075966925473, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "precision": { + "0": 0.5577905794051627, + "1": 0.5789691710292569, + "2": 0.4677678477278932 + }, + "recall": { + "0": 0.7579075966925473, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "f1": { + "0": 0.4819315607331685, + "1": 0.538938226884136, + "2": 0.4680864397151781 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.779296875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9771410797584144, + "1": 0.9760534959312177, + "2": 0.8610977665331919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "cf8b94061be53075f6bd6ab6922ee291d27ac0b7d49d3bfff4ac58474fd61029" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6953125, + "micro_accuracy_known": 0.8090909090909091, + "macro_accuracy_all": 0.7490054272359848, + "macro_accuracy_known": 0.7841150566376717, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7900390625, + "micro_accuracy_known": 0.7900390625, + "macro_accuracy_all": 0.8663721768751217, + "macro_accuracy_known": 0.8663721768751217, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8738845020040061, + "macro_accuracy_known": 0.8738845020040061, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7490054272359848, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "precision": { + "0": 0.5691669343612807, + "1": 0.6223680640347307, + "2": 0.48996999380632916 + }, + "recall": { + "0": 0.7490054272359848, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "f1": { + "0": 0.4878421471972997, + "1": 0.5895253154735276, + "2": 0.4894596044863183 + }, + "micro_accuracy": { + "0": 0.6953125, + "1": 0.7900390625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9737375400290177, + "1": 0.9745437130474148, + "2": 0.8705705052200974 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7841150566376717, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "precision": { + "0": 0.5949420677361854, + "1": 0.6223680640347307, + "2": 0.48996999380632916 + }, + "recall": { + "0": 0.7841150566376717, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "f1": { + "0": 0.52269966665244, + "1": 0.5895253154735276, + "2": 0.4894596044863183 + }, + "micro_accuracy": { + "0": 0.8090909090909091, + "1": 0.7900390625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9772388639732228, + "1": 0.9745437130474148, + "2": 0.8705705052200974 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "7790cda916fce5ee3b2e10378160bf1ba1383c457aad3339f064b838215f8cb7" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7239714356466123, + "macro_accuracy_known": 0.7579075966925473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8453240651427995, + "macro_accuracy_known": 0.8453240651427995, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9248046875, + "micro_accuracy_known": 0.9248046875, + "macro_accuracy_all": 0.8667644156724759, + "macro_accuracy_known": 0.8667644156724759, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7239714356466123, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "precision": { + "0": 0.530553047026557, + "1": 0.5838835046627254, + "2": 0.4369691898770908 + }, + "recall": { + "0": 0.7239714356466123, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "f1": { + "0": 0.4478749957083243, + "1": 0.5432633692427183, + "2": 0.4422047830546245 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.7783203125, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9727774718765091, + "1": 0.9741674576985, + "2": 0.857522102743873 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7579075966925473, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "precision": { + "0": 0.5550931731104145, + "1": 0.5838835046627254, + "2": 0.4369691898770908 + }, + "recall": { + "0": 0.7579075966925473, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "f1": { + "0": 0.47948328149769953, + "1": 0.5432633692427183, + "2": 0.4422047830546245 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.7783203125, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9779509921966772, + "1": 0.9741674576985, + "2": 0.857522102743873 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "afafd70c5b4cbefff5790d421e55127497a3c542381f9a1790308aee5e0e5eec" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6923828125, + "micro_accuracy_known": 0.8056818181818182, + "macro_accuracy_all": 0.7424903834075083, + "macro_accuracy_known": 0.7772946201297352, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8576420181449631, + "macro_accuracy_known": 0.8576420181449631, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8707709909948831, + "macro_accuracy_known": 0.8707709909948831, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7424903834075083, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "precision": { + "0": 0.5587068602693603, + "1": 0.6091923159796464, + "2": 0.4724244574193488 + }, + "recall": { + "0": 0.7424903834075083, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "f1": { + "0": 0.4777957123182366, + "1": 0.5737266608760239, + "2": 0.4716963995052431 + }, + "micro_accuracy": { + "0": 0.6923828125, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9739043442268694, + "1": 0.9756713655030097, + "2": 0.871496008905084 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7772946201297352, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "precision": { + "0": 0.5836013565255443, + "1": 0.6091923159796464, + "2": 0.4724244574193488 + }, + "recall": { + "0": 0.7772946201297352, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "f1": { + "0": 0.5113941166899645, + "1": 0.5737266608760239, + "2": 0.4716963995052431 + }, + "micro_accuracy": { + "0": 0.8056818181818182, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9777746021348526, + "1": 0.9756713655030097, + "2": 0.871496008905084 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "753cf34759f44801850a63551ebdd5872162105016b9f9415d6cf544e6de9722" + } + } + }, + { + "backend": "torch", + "profile": "five_crop", + "views": 5, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.529296875, + "micro_accuracy_known": 0.615909090909091, + "macro_accuracy_all": 0.5813643479000902, + "macro_accuracy_known": 0.608615801707907, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.66015625, + "macro_accuracy_all": 0.7256026606965782, + "macro_accuracy_known": 0.7256026606965782, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.87109375, + "micro_accuracy_known": 0.87109375, + "macro_accuracy_all": 0.8203128497400256, + "macro_accuracy_known": 0.8203128497400256, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.5813643479000902, + "1": 0.7256026606965782, + "2": 0.8203128497400256 + }, + "precision": { + "0": 0.3539246258670719, + "1": 0.40628544132149896, + "2": 0.38287248076366676 + }, + "recall": { + "0": 0.5813643479000902, + "1": 0.7256026606965782, + "2": 0.8203128497400256 + }, + "f1": { + "0": 0.2713698750105877, + "1": 0.34802213759891104, + "2": 0.390237881759979 + }, + "micro_accuracy": { + "0": 0.529296875, + "1": 0.66015625, + "2": 0.87109375 + }, + "theilU": { + "0": 0.9748236916276373, + "1": 0.9703857848023797, + "2": 0.7926288771601431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.608615801707907, + "1": 0.7256026606965782, + "2": 0.8203128497400256 + }, + "precision": { + "0": 0.3756394839728173, + "1": 0.40628544132149896, + "2": 0.38287248076366676 + }, + "recall": { + "0": 0.608615801707907, + "1": 0.7256026606965782, + "2": 0.8203128497400256 + }, + "f1": { + "0": 0.2913359273372394, + "1": 0.34802213759891104, + "2": 0.390237881759979 + }, + "micro_accuracy": { + "0": 0.615909090909091, + "1": 0.66015625, + "2": 0.87109375 + }, + "theilU": { + "0": 0.9834727095917797, + "1": 0.9703857848023797, + "2": 0.7926288771601431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "256428ffb78393334963613d96d789a6c6a60ef9ec887668705f56a1f850b445" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6494140625, + "micro_accuracy_known": 0.7556818181818182, + "macro_accuracy_all": 0.6864679547220788, + "macro_accuracy_known": 0.7186461400996763, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7509765625, + "micro_accuracy_known": 0.7509765625, + "macro_accuracy_all": 0.8111129589394724, + "macro_accuracy_known": 0.8111129589394724, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.91015625, + "micro_accuracy_known": 0.91015625, + "macro_accuracy_all": 0.8502301735024017, + "macro_accuracy_known": 0.8502301735024017, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6864679547220788, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "precision": { + "0": 0.4694282106782107, + "1": 0.5333684296208269, + "2": 0.46691900718781665 + }, + "recall": { + "0": 0.6864679547220788, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "f1": { + "0": 0.38962188632761524, + "1": 0.48106734970677867, + "2": 0.47399147864357544 + }, + "micro_accuracy": { + "0": 0.6494140625, + "1": 0.7509765625, + "2": 0.91015625 + }, + "theilU": { + "0": 0.9751197291793138, + "1": 0.9685003685053799, + "2": 0.8284966930961688 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7186461400996763, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "precision": { + "0": 0.4989179218013084, + "1": 0.5333684296208269, + "2": 0.46691900718781665 + }, + "recall": { + "0": 0.7186461400996763, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "f1": { + "0": 0.42134237590754114, + "1": 0.48106734970677867, + "2": 0.47399147864357544 + }, + "micro_accuracy": { + "0": 0.7556818181818182, + "1": 0.7509765625, + "2": 0.91015625 + }, + "theilU": { + "0": 0.9777247222607772, + "1": 0.9685003685053799, + "2": 0.8284966930961688 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "9f019b7f1338c9e16b93b4272733ecab9d4596a6f594cce6b9d3a0bb8f7a7f48" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6650390625, + "micro_accuracy_known": 0.7738636363636363, + "macro_accuracy_all": 0.6996728719136418, + "macro_accuracy_known": 0.7324700377845937, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.763671875, + "micro_accuracy_known": 0.763671875, + "macro_accuracy_all": 0.8276382349281632, + "macro_accuracy_known": 0.8276382349281632, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9111328125, + "micro_accuracy_known": 0.9111328125, + "macro_accuracy_all": 0.85383785060624, + "macro_accuracy_known": 0.85383785060624, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6996728719136418, + "1": 0.8276382349281632, + "2": 0.85383785060624 + }, + "precision": { + "0": 0.49111882013952074, + "1": 0.5582610950725357, + "2": 0.4601804926385507 + }, + "recall": { + "0": 0.6996728719136418, + "1": 0.8276382349281632, + "2": 0.85383785060624 + }, + "f1": { + "0": 0.4136808201709315, + "1": 0.5120544331452002, + "2": 0.46467413341474983 + }, + "micro_accuracy": { + "0": 0.6650390625, + "1": 0.763671875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9743396036576268, + "1": 0.9714424257258611, + "2": 0.8399794998233961 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7324700377845937, + "1": 0.8276382349281632, + "2": 0.85383785060624 + }, + "precision": { + "0": 0.5147725480920845, + "1": 0.5582610950725357, + "2": 0.4601804926385507 + }, + "recall": { + "0": 0.7324700377845937, + "1": 0.8276382349281632, + "2": 0.85383785060624 + }, + "f1": { + "0": 0.44215291236257215, + "1": 0.5120544331452002, + "2": 0.46467413341474983 + }, + "micro_accuracy": { + "0": 0.7738636363636363, + "1": 0.763671875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9780483771504945, + "1": 0.9714424257258611, + "2": 0.8399794998233961 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "6518df0a44734b0a22940dfd23eaf8563c10f2dd72521af8a3ebe41d5a8d2083" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.646484375, + "micro_accuracy_known": 0.7522727272727273, + "macro_accuracy_all": 0.6839643850543301, + "macro_accuracy_known": 0.7160252156037519, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7470703125, + "micro_accuracy_known": 0.7470703125, + "macro_accuracy_all": 0.8075779954045089, + "macro_accuracy_known": 0.8075779954045089, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9052734375, + "micro_accuracy_known": 0.9052734375, + "macro_accuracy_all": 0.8464483991172489, + "macro_accuracy_known": 0.8464483991172489, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6839643850543301, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "precision": { + "0": 0.4658880017263703, + "1": 0.5257057521087325, + "2": 0.45979108437103 + }, + "recall": { + "0": 0.6839643850543301, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "f1": { + "0": 0.3863959918565985, + "1": 0.47348367305377786, + "2": 0.4659878669713518 + }, + "micro_accuracy": { + "0": 0.646484375, + "1": 0.7470703125, + "2": 0.9052734375 + }, + "theilU": { + "0": 0.9746054246842587, + "1": 0.9679591076324016, + "2": 0.8222229053522426 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7160252156037519, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "precision": { + "0": 0.4952058689717926, + "1": 0.5257057521087325, + "2": 0.45979108437103 + }, + "recall": { + "0": 0.7160252156037519, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "f1": { + "0": 0.41767265874023246, + "1": 0.47348367305377786, + "2": 0.4659878669713518 + }, + "micro_accuracy": { + "0": 0.7522727272727273, + "1": 0.7470703125, + "2": 0.9052734375 + }, + "theilU": { + "0": 0.9776412209536774, + "1": 0.9679591076324016, + "2": 0.8222229053522426 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "baddc6bcc91d0110edd232f95c03800c611b1db32727370d8734473009c0f327" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6611328125, + "micro_accuracy_known": 0.7693181818181818, + "macro_accuracy_all": 0.6956453902742199, + "macro_accuracy_known": 0.728253767943324, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7607421875, + "micro_accuracy_known": 0.7607421875, + "macro_accuracy_all": 0.8246852819752103, + "macro_accuracy_known": 0.8246852819752103, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9111328125, + "micro_accuracy_known": 0.9111328125, + "macro_accuracy_all": 0.8490705487907292, + "macro_accuracy_known": 0.8490705487907292, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6956453902742199, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "precision": { + "0": 0.4879724111866969, + "1": 0.5611634388877978, + "2": 0.4615299319959455 + }, + "recall": { + "0": 0.6956453902742199, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "f1": { + "0": 0.40906296151598653, + "1": 0.5122306689750561, + "2": 0.4650358026058972 + }, + "micro_accuracy": { + "0": 0.6611328125, + "1": 0.7607421875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9739383567747754, + "1": 0.970300140083669, + "2": 0.8375842132984603 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.728253767943324, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "precision": { + "0": 0.511423463774949, + "1": 0.5611634388877978, + "2": 0.4615299319959455 + }, + "recall": { + "0": 0.728253767943324, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "f1": { + "0": 0.4370672141449003, + "1": 0.5122306689750561, + "2": 0.4650358026058972 + }, + "micro_accuracy": { + "0": 0.7693181818181818, + "1": 0.7607421875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9775791299489568, + "1": 0.970300140083669, + "2": 0.8375842132984603 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "0db29b9e8bfffcb91b1023f04c20453793aec42c6c647cfafc250b2243aa31c6" + } + } + }, + { + "backend": "torch", + "profile": "ten_crop", + "views": 10, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.53125, + "micro_accuracy_known": 0.6181818181818182, + "macro_accuracy_all": 0.60343863844453, + "macro_accuracy_known": 0.6317248246216174, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.6689453125, + "micro_accuracy_known": 0.6689453125, + "macro_accuracy_all": 0.7429239407237405, + "macro_accuracy_known": 0.7429239407237405, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.8759765625, + "micro_accuracy_known": 0.8759765625, + "macro_accuracy_all": 0.8176955988576485, + "macro_accuracy_known": 0.8176955988576485, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.60343863844453, + "1": 0.7429239407237405, + "2": 0.8176955988576485 + }, + "precision": { + "0": 0.3656289623837701, + "1": 0.4202346151857552, + "2": 0.3204710902569391 + }, + "recall": { + "0": 0.60343863844453, + "1": 0.7429239407237405, + "2": 0.8176955988576485 + }, + "f1": { + "0": 0.2840043848761477, + "1": 0.36338535026066476, + "2": 0.3258295857387298 + }, + "micro_accuracy": { + "0": 0.53125, + "1": 0.6689453125, + "2": 0.8759765625 + }, + "theilU": { + "0": 0.9762496858852205, + "1": 0.9748713732141564, + "2": 0.8185167276713174 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6317248246216174, + "1": 0.7429239407237405, + "2": 0.8176955988576485 + }, + "precision": { + "0": 0.3867552278944684, + "1": 0.4202346151857552, + "2": 0.3204710902569391 + }, + "recall": { + "0": 0.6317248246216174, + "1": 0.7429239407237405, + "2": 0.8176955988576485 + }, + "f1": { + "0": 0.304694796578515, + "1": 0.36338535026066476, + "2": 0.3258295857387298 + }, + "micro_accuracy": { + "0": 0.6181818181818182, + "1": 0.6689453125, + "2": 0.8759765625 + }, + "theilU": { + "0": 0.985109077428969, + "1": 0.9748713732141564, + "2": 0.8185167276713174 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "14662d4aa23b4da4de15c0dd0bdd47a608305e29eb6287016de9de196b6b967f" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.7681818181818182, + "macro_accuracy_all": 0.7117364830935137, + "macro_accuracy_known": 0.7450991307385221, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.75390625, + "micro_accuracy_known": 0.75390625, + "macro_accuracy_all": 0.8194249310089767, + "macro_accuracy_known": 0.8194249310089767, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9091796875, + "micro_accuracy_known": 0.9091796875, + "macro_accuracy_all": 0.8571149511649796, + "macro_accuracy_known": 0.8571149511649796, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7117364830935137, + "1": 0.8194249310089767, + "2": 0.8571149511649796 + }, + "precision": { + "0": 0.4977664750110571, + "1": 0.5484536069577054, + "2": 0.4420363507892305 + }, + "recall": { + "0": 0.7117364830935137, + "1": 0.8194249310089767, + "2": 0.8571149511649796 + }, + "f1": { + "0": 0.4182302613679317, + "1": 0.49625357517655627, + "2": 0.44594584760858924 + }, + "micro_accuracy": { + "0": 0.66015625, + "1": 0.75390625, + "2": 0.9091796875 + }, + "theilU": { + "0": 0.9762931685998127, + "1": 0.9709708500223726, + "2": 0.840625656313752 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7450991307385221, + "1": 0.8194249310089767, + "2": 0.8571149511649796 + }, + "precision": { + "0": 0.5277803629595161, + "1": 0.5484536069577054, + "2": 0.4420363507892305 + }, + "recall": { + "0": 0.7450991307385221, + "1": 0.8194249310089767, + "2": 0.8571149511649796 + }, + "f1": { + "0": 0.4520071926401122, + "1": 0.49625357517655627, + "2": 0.44594584760858924 + }, + "micro_accuracy": { + "0": 0.7681818181818182, + "1": 0.75390625, + "2": 0.9091796875 + }, + "theilU": { + "0": 0.9787752837863699, + "1": 0.9709708500223726, + "2": 0.840625656313752 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8b819ced1f9471887e45d886dbd3551547d8ad3f10bb698c8a78324f32871ddb" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6796875, + "micro_accuracy_known": 0.7909090909090909, + "macro_accuracy_all": 0.7314062084977246, + "macro_accuracy_known": 0.7656908745210554, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7626953125, + "micro_accuracy_known": 0.7626953125, + "macro_accuracy_all": 0.8322399493239953, + "macro_accuracy_known": 0.8322399493239953, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9150390625, + "micro_accuracy_known": 0.9150390625, + "macro_accuracy_all": 0.8617810377922105, + "macro_accuracy_known": 0.8617810377922105, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7314062084977246, + "1": 0.8322399493239953, + "2": 0.8617810377922105 + }, + "precision": { + "0": 0.5236001240887235, + "1": 0.5638623197133835, + "2": 0.4680254975039965 + }, + "recall": { + "0": 0.7314062084977246, + "1": 0.8322399493239953, + "2": 0.8617810377922105 + }, + "f1": { + "0": 0.44724856491193016, + "1": 0.5201263495966478, + "2": 0.4700542219061204 + }, + "micro_accuracy": { + "0": 0.6796875, + "1": 0.7626953125, + "2": 0.9150390625 + }, + "theilU": { + "0": 0.9752831893435354, + "1": 0.9698132637565692, + "2": 0.847762302634304 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7656908745210554, + "1": 0.8322399493239953, + "2": 0.8617810377922105 + }, + "precision": { + "0": 0.5472812097812099, + "1": 0.5638623197133835, + "2": 0.4680254975039965 + }, + "recall": { + "0": 0.7656908745210554, + "1": 0.8322399493239953, + "2": 0.8617810377922105 + }, + "f1": { + "0": 0.4775271985236881, + "1": 0.5201263495966478, + "2": 0.4700542219061204 + }, + "micro_accuracy": { + "0": 0.7909090909090909, + "1": 0.7626953125, + "2": 0.9150390625 + }, + "theilU": { + "0": 0.9796516871847247, + "1": 0.9698132637565692, + "2": 0.847762302634304 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "102236694fd1ca9e73c7d04e4fdd5d4fa8cee005fcc2277ee6f1f76938815a03" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.65625, + "micro_accuracy_known": 0.7636363636363637, + "macro_accuracy_all": 0.7096747198377206, + "macro_accuracy_known": 0.7429407223301138, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7529296875, + "micro_accuracy_known": 0.7529296875, + "macro_accuracy_all": 0.818689195273241, + "macro_accuracy_known": 0.818689195273241, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9072265625, + "micro_accuracy_known": 0.9072265625, + "macro_accuracy_all": 0.8562264454370947, + "macro_accuracy_known": 0.8562264454370947, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7096747198377206, + "1": 0.818689195273241, + "2": 0.8562264454370947 + }, + "precision": { + "0": 0.4972589653145209, + "1": 0.5501384885606198, + "2": 0.41923313907865467 + }, + "recall": { + "0": 0.7096747198377206, + "1": 0.818689195273241, + "2": 0.8562264454370947 + }, + "f1": { + "0": 0.4162772324191029, + "1": 0.4959921727881662, + "2": 0.4237405614469208 + }, + "micro_accuracy": { + "0": 0.65625, + "1": 0.7529296875, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9751972485899153, + "1": 0.9710227259927404, + "2": 0.842218692444066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7429407223301138, + "1": 0.818689195273241, + "2": 0.8562264454370947 + }, + "precision": { + "0": 0.5255256648113792, + "1": 0.5501384885606198, + "2": 0.41923313907865467 + }, + "recall": { + "0": 0.7429407223301138, + "1": 0.818689195273241, + "2": 0.8562264454370947 + }, + "f1": { + "0": 0.44919644777330836, + "1": 0.4959921727881662, + "2": 0.4237405614469208 + }, + "micro_accuracy": { + "0": 0.7636363636363637, + "1": 0.7529296875, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9789208760981903, + "1": 0.9710227259927404, + "2": 0.842218692444066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "ad08d9ada009e6257b4adee6d18822c8282fccba25ac9034982c72e0e4c77e82" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.727693147439809, + "macro_accuracy_known": 0.76180376372605, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.759765625, + "micro_accuracy_known": 0.759765625, + "macro_accuracy_all": 0.8302264358104817, + "macro_accuracy_known": 0.8302264358104817, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9140625, + "micro_accuracy_known": 0.9140625, + "macro_accuracy_all": 0.860943275272093, + "macro_accuracy_known": 0.860943275272093, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.727693147439809, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "precision": { + "0": 0.5168657173480325, + "1": 0.5653516814155112, + "2": 0.437878914755703 + }, + "recall": { + "0": 0.727693147439809, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "f1": { + "0": 0.43964474540818893, + "1": 0.5186853820268305, + "2": 0.439343575066404 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.759765625, + "2": 0.9140625 + }, + "theilU": { + "0": 0.9757674277165843, + "1": 0.9704375019534383, + "2": 0.850375057622715 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.76180376372605, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "precision": { + "0": 0.5436081815276447, + "1": 0.5653516814155112, + "2": 0.437878914755703 + }, + "recall": { + "0": 0.76180376372605, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "f1": { + "0": 0.47191829187231765, + "1": 0.5186853820268305, + "2": 0.439343575066404 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.759765625, + "2": 0.9140625 + }, + "theilU": { + "0": 0.9791824399831869, + "1": 0.9704375019534383, + "2": 0.850375057622715 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "b0c907f76ede489782907ebd6390921e46592383dcd149c6e904ca7ccf96ec5b" + } + } + }, + { + "backend": "torch", + "profile": "d4", + "views": 8, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5751953125, + "micro_accuracy_known": 0.6693181818181818, + "macro_accuracy_all": 0.641266379365358, + "macro_accuracy_known": 0.6713257408981091, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7060546875, + "micro_accuracy_known": 0.7060546875, + "macro_accuracy_all": 0.7719404043737291, + "macro_accuracy_known": 0.7719404043737291, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9072265625, + "micro_accuracy_known": 0.9072265625, + "macro_accuracy_all": 0.8468611655625742, + "macro_accuracy_known": 0.8468611655625742, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.641266379365358, + "1": 0.7719404043737291, + "2": 0.8468611655625742 + }, + "precision": { + "0": 0.4045381076712669, + "1": 0.4702941297022569, + "2": 0.3918829546059463 + }, + "recall": { + "0": 0.641266379365358, + "1": 0.7719404043737291, + "2": 0.8468611655625742 + }, + "f1": { + "0": 0.32135803382917577, + "1": 0.41222158471469095, + "2": 0.39228952751507085 + }, + "micro_accuracy": { + "0": 0.5751953125, + "1": 0.7060546875, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9793161287014726, + "1": 0.9747919562993815, + "2": 0.8489799821290803 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6713257408981091, + "1": 0.7719404043737291, + "2": 0.8468611655625742 + }, + "precision": { + "0": 0.4309721672602559, + "1": 0.4702941297022569, + "2": 0.3918829546059463 + }, + "recall": { + "0": 0.6713257408981091, + "1": 0.7719404043737291, + "2": 0.8468611655625742 + }, + "f1": { + "0": 0.34765591821489106, + "1": 0.41222158471469095, + "2": 0.39228952751507085 + }, + "micro_accuracy": { + "0": 0.6693181818181818, + "1": 0.7060546875, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9847698178419181, + "1": 0.9747919562993815, + "2": 0.8489799821290803 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "7c69eb32350c36036c3cbc913978e1b4d86814fab7aca02abc2e623d5caa59b0" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7585867036083059, + "macro_accuracy_known": 0.7941454553399453, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7919921875, + "micro_accuracy_known": 0.7919921875, + "macro_accuracy_all": 0.8637428744037139, + "macro_accuracy_known": 0.8637428744037139, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8657818683382639, + "macro_accuracy_known": 0.8657818683382639, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7585867036083059, + "1": 0.8637428744037139, + "2": 0.8657818683382639 + }, + "precision": { + "0": 0.567236502444115, + "1": 0.613953073953074, + "2": 0.4743418234737222 + }, + "recall": { + "0": 0.7585867036083059, + "1": 0.8637428744037139, + "2": 0.8657818683382639 + }, + "f1": { + "0": 0.4870909513964597, + "1": 0.5760179600759407, + "2": 0.4708581534147482 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.7919921875, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9771099035335918, + "1": 0.9761834884274827, + "2": 0.8752121942441846 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7941454553399453, + "1": 0.8637428744037139, + "2": 0.8657818683382639 + }, + "precision": { + "0": 0.59884126984127, + "1": 0.613953073953074, + "2": 0.4743418234737222 + }, + "recall": { + "0": 0.7941454553399453, + "1": 0.8637428744037139, + "2": 0.8657818683382639 + }, + "f1": { + "0": 0.5266146874592691, + "1": 0.5760179600759407, + "2": 0.4708581534147482 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.7919921875, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9794730609767626, + "1": 0.9761834884274827, + "2": 0.8752121942441846 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8040b861c98b7420cff6e4ebff7b448c2a5c00d65320c359fb38fff6f62179ef" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7138671875, + "micro_accuracy_known": 0.8306818181818182, + "macro_accuracy_all": 0.7776770904913086, + "macro_accuracy_known": 0.8141307041080887, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7998046875, + "micro_accuracy_known": 0.7998046875, + "macro_accuracy_all": 0.8792673769282165, + "macro_accuracy_known": 0.8792673769282165, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9404296875, + "micro_accuracy_known": 0.9404296875, + "macro_accuracy_all": 0.8708708169482133, + "macro_accuracy_known": 0.8708708169482133, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7776770904913086, + "1": 0.8792673769282165, + "2": 0.8708708169482133 + }, + "precision": { + "0": 0.590415742163054, + "1": 0.650045643974489, + "2": 0.4973752870924152 + }, + "recall": { + "0": 0.7776770904913086, + "1": 0.8792673769282165, + "2": 0.8708708169482133 + }, + "f1": { + "0": 0.5137268116645758, + "1": 0.6200753418406837, + "2": 0.49302752231219377 + }, + "micro_accuracy": { + "0": 0.7138671875, + "1": 0.7998046875, + "2": 0.9404296875 + }, + "theilU": { + "0": 0.9769243920224615, + "1": 0.9716682328833156, + "2": 0.8916132518181294 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8141307041080887, + "1": 0.8792673769282165, + "2": 0.8708708169482133 + }, + "precision": { + "0": 0.6220901957274138, + "1": 0.650045643974489, + "2": 0.4973752870924152 + }, + "recall": { + "0": 0.8141307041080887, + "1": 0.8792673769282165, + "2": 0.8708708169482133 + }, + "f1": { + "0": 0.5549843559208244, + "1": 0.6200753418406837, + "2": 0.49302752231219377 + }, + "micro_accuracy": { + "0": 0.8306818181818182, + "1": 0.7998046875, + "2": 0.9404296875 + }, + "theilU": { + "0": 0.9797253575646723, + "1": 0.9716682328833156, + "2": 0.8916132518181294 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "03f0bd588de80c8db66c27338868a74c02cfc918f45c24d9c8aa797bc8d5d535" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7585867036083059, + "macro_accuracy_known": 0.7941454553399453, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.791015625, + "micro_accuracy_known": 0.791015625, + "macro_accuracy_all": 0.8604095410703805, + "macro_accuracy_known": 0.8604095410703805, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.931640625, + "micro_accuracy_known": 0.931640625, + "macro_accuracy_all": 0.8659249607879862, + "macro_accuracy_known": 0.8659249607879862, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7585867036083059, + "1": 0.8604095410703805, + "2": 0.8659249607879862 + }, + "precision": { + "0": 0.5692060736331571, + "1": 0.6206487897732138, + "2": 0.45820095845285647 + }, + "recall": { + "0": 0.7585867036083059, + "1": 0.8604095410703805, + "2": 0.8659249607879862 + }, + "f1": { + "0": 0.4886275159119059, + "1": 0.5817604713640435, + "2": 0.460793233661065 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.791015625, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9757524503255911, + "1": 0.9747375835422437, + "2": 0.8731833404456658 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7941454553399453, + "1": 0.8604095410703805, + "2": 0.8659249607879862 + }, + "precision": { + "0": 0.6032283853712427, + "1": 0.6206487897732138, + "2": 0.45820095845285647 + }, + "recall": { + "0": 0.7941454553399453, + "1": 0.8604095410703805, + "2": 0.8659249607879862 + }, + "f1": { + "0": 0.5302093269641105, + "1": 0.5817604713640435, + "2": 0.460793233661065 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.791015625, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9790038137752247, + "1": 0.9747375835422437, + "2": 0.8731833404456658 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "19497f2c5753a18d4be51a7fb2358da283c24aae38618e106326b042512cf17c" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.708984375, + "micro_accuracy_known": 0.825, + "macro_accuracy_all": 0.7677268417350898, + "macro_accuracy_known": 0.8037140374414221, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.79296875, + "micro_accuracy_known": 0.79296875, + "macro_accuracy_all": 0.8628356704965101, + "macro_accuracy_known": 0.8628356704965101, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.94140625, + "micro_accuracy_known": 0.94140625, + "macro_accuracy_all": 0.8710858707116541, + "macro_accuracy_known": 0.8710858707116541, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7677268417350898, + "1": 0.8628356704965101, + "2": 0.8710858707116541 + }, + "precision": { + "0": 0.581095209951593, + "1": 0.6291773261081851, + "2": 0.463933700196154 + }, + "recall": { + "0": 0.7677268417350898, + "1": 0.8628356704965101, + "2": 0.8710858707116541 + }, + "f1": { + "0": 0.5020076771423831, + "1": 0.5957326229821618, + "2": 0.4599044372158569 + }, + "micro_accuracy": { + "0": 0.708984375, + "1": 0.79296875, + "2": 0.94140625 + }, + "theilU": { + "0": 0.9770549805608238, + "1": 0.9735372521774825, + "2": 0.8945993887983792 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8037140374414221, + "1": 0.8628356704965101, + "2": 0.8710858707116541 + }, + "precision": { + "0": 0.614249437337124, + "1": 0.6291773261081851, + "2": 0.463933700196154 + }, + "recall": { + "0": 0.8037140374414221, + "1": 0.8628356704965101, + "2": 0.8710858707116541 + }, + "f1": { + "0": 0.5436833258600394, + "1": 0.5957326229821618, + "2": 0.4599044372158569 + }, + "micro_accuracy": { + "0": 0.825, + "1": 0.79296875, + "2": 0.94140625 + }, + "theilU": { + "0": 0.9798780772711632, + "1": 0.9735372521774825, + "2": 0.8945993887983792 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c38b7cd1d71cd9048a7faa02388b983d79c7fdcb8690329645a4ad15538bd090" + } + } + }, + { + "backend": "onnx", + "profile": "none", + "views": 1, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5615234375, + "micro_accuracy_known": 0.6534090909090909, + "macro_accuracy_all": 0.6124655814463357, + "macro_accuracy_known": 0.6411749055766326, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.705078125, + "micro_accuracy_known": 0.705078125, + "macro_accuracy_all": 0.7689213961488385, + "macro_accuracy_known": 0.7689213961488385, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9033203125, + "micro_accuracy_known": 0.9033203125, + "macro_accuracy_all": 0.8510765951310436, + "macro_accuracy_known": 0.8510765951310436, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6124655814463357, + "1": 0.7689213961488385, + "2": 0.8510765951310436 + }, + "precision": { + "0": 0.3818871026671538, + "1": 0.45335004607264867, + "2": 0.45287608745625396 + }, + "recall": { + "0": 0.6124655814463357, + "1": 0.7689213961488385, + "2": 0.8510765951310436 + }, + "f1": { + "0": 0.2999727816322662, + "1": 0.39650834235685417, + "2": 0.46046448034482446 + }, + "micro_accuracy": { + "0": 0.5615234375, + "1": 0.705078125, + "2": 0.9033203125 + }, + "theilU": { + "0": 0.9798598274637447, + "1": 0.9784885366291307, + "2": 0.8328319989828772 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6411749055766326, + "1": 0.7689213961488385, + "2": 0.8510765951310436 + }, + "precision": { + "0": 0.40420677705044283, + "1": 0.45335004607264867, + "2": 0.45287608745625396 + }, + "recall": { + "0": 0.6411749055766326, + "1": 0.7689213961488385, + "2": 0.8510765951310436 + }, + "f1": { + "0": 0.32221844927677257, + "1": 0.39650834235685417, + "2": 0.46046448034482446 + }, + "micro_accuracy": { + "0": 0.6534090909090909, + "1": 0.705078125, + "2": 0.9033203125 + }, + "theilU": { + "0": 0.9867823418942343, + "1": 0.9784885366291307, + "2": 0.8328319989828772 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "efd2c6e3976ba3132f67f254c2d1797ec3b0b0f7014600225a0ce8a2ce2d246d" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6728515625, + "micro_accuracy_known": 0.7829545454545455, + "macro_accuracy_all": 0.7270001244961968, + "macro_accuracy_known": 0.7610782553319559, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8404997671606066, + "macro_accuracy_known": 0.8404997671606066, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8732648242676523, + "macro_accuracy_known": 0.8732648242676523, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7270001244961968, + "1": 0.8404997671606066, + "2": 0.8732648242676523 + }, + "precision": { + "0": 0.5208630076662863, + "1": 0.5732660538695022, + "2": 0.4684374652974096 + }, + "recall": { + "0": 0.7270001244961968, + "1": 0.8404997671606066, + "2": 0.8732648242676523 + }, + "f1": { + "0": 0.4458096602932375, + "1": 0.5333440123117217, + "2": 0.46980213876084703 + }, + "micro_accuracy": { + "0": 0.6728515625, + "1": 0.7783203125, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9753695714909438, + "1": 0.9761396110432748, + "2": 0.8670784143304765 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7610782553319559, + "1": 0.8404997671606066, + "2": 0.8732648242676523 + }, + "precision": { + "0": 0.5484990286536678, + "1": 0.5732660538695022, + "2": 0.4684374652974096 + }, + "recall": { + "0": 0.7610782553319559, + "1": 0.8404997671606066, + "2": 0.8732648242676523 + }, + "f1": { + "0": 0.48024706364743264, + "1": 0.5333440123117217, + "2": 0.46980213876084703 + }, + "micro_accuracy": { + "0": 0.7829545454545455, + "1": 0.7783203125, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9789932372980398, + "1": 0.9761396110432748, + "2": 0.8670784143304765 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f607b67e4a1a2b1f9903fe0b68b05dd192b77e0d2a5cf835cef500c916db0b15" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6884765625, + "micro_accuracy_known": 0.8011363636363636, + "macro_accuracy_all": 0.7392023947895904, + "macro_accuracy_known": 0.7738525070453525, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8587220718829114, + "macro_accuracy_known": 0.8587220718829114, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8755822798046276, + "macro_accuracy_known": 0.8755822798046276, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7392023947895904, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "precision": { + "0": 0.5431057487758518, + "1": 0.6018770821938243, + "2": 0.4692384071547976 + }, + "recall": { + "0": 0.7392023947895904, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "f1": { + "0": 0.4692961110833382, + "1": 0.5690866270248979, + "2": 0.47087201406950674 + }, + "micro_accuracy": { + "0": 0.6884765625, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9748705890430734, + "1": 0.9748839426636258, + "2": 0.8788292243597902 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7738525070453525, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "precision": { + "0": 0.5712006219200464, + "1": 0.6018770821938243, + "2": 0.4692384071547976 + }, + "recall": { + "0": 0.7738525070453525, + "1": 0.8587220718829114, + "2": 0.8755822798046276 + }, + "f1": { + "0": 0.5054737107485856, + "1": 0.5690866270248979, + "2": 0.47087201406950674 + }, + "micro_accuracy": { + "0": 0.8011363636363636, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9787503562761231, + "1": 0.9748839426636258, + "2": 0.8788292243597902 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "237615dbf364b249e8a7b6a86bf11145222de517a45bf0cc7c81cd92aada488b" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6728515625, + "micro_accuracy_known": 0.7829545454545455, + "macro_accuracy_all": 0.7270001244961968, + "macro_accuracy_known": 0.7610782553319559, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8404997671606066, + "macro_accuracy_known": 0.8404997671606066, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8720217086106892, + "macro_accuracy_known": 0.8720217086106892, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7270001244961968, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5185555396467448, + "1": 0.5757477250983746, + "2": 0.4381377787821555 + }, + "recall": { + "0": 0.7270001244961968, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.4437512694581586, + "1": 0.5355944089881425, + "2": 0.44453406406960844 + }, + "micro_accuracy": { + "0": 0.6728515625, + "1": 0.7783203125, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9747098621943763, + "1": 0.9746177473309448, + "2": 0.8643464250458442 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7610782553319559, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5440358866379273, + "1": 0.5757477250983746, + "2": 0.4381377787821555 + }, + "recall": { + "0": 0.7610782553319559, + "1": 0.8404997671606066, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.47629565858073747, + "1": 0.5355944089881425, + "2": 0.44453406406960844 + }, + "micro_accuracy": { + "0": 0.7829545454545455, + "1": 0.7783203125, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9801438149730277, + "1": 0.9746177473309448, + "2": 0.8643464250458442 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "2d35b767abaa7375dd31e88a41a2365521bcd6d66ca763640621b3c2c9760ca8" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6865234375, + "micro_accuracy_known": 0.7988636363636363, + "macro_accuracy_all": 0.7375440199968872, + "macro_accuracy_known": 0.7721163959342413, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.783203125, + "micro_accuracy_known": 0.783203125, + "macro_accuracy_all": 0.8464998496606891, + "macro_accuracy_known": 0.8464998496606891, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.875199379201428, + "macro_accuracy_known": 0.875199379201428, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7375440199968872, + "1": 0.8464998496606891, + "2": 0.875199379201428 + }, + "precision": { + "0": 0.5385664617868008, + "1": 0.5872092018109717, + "2": 0.4548694535217127 + }, + "recall": { + "0": 0.7375440199968872, + "1": 0.8464998496606891, + "2": 0.875199379201428 + }, + "f1": { + "0": 0.46422249654321474, + "1": 0.5503623331115033, + "2": 0.4554186696946595 + }, + "micro_accuracy": { + "0": 0.6865234375, + "1": 0.783203125, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.975147341925548, + "1": 0.976857362686223, + "2": 0.8829844004396705 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7721163959342413, + "1": 0.8464998496606891, + "2": 0.875199379201428 + }, + "precision": { + "0": 0.5660535681812278, + "1": 0.5872092018109717, + "2": 0.4548694535217127 + }, + "recall": { + "0": 0.7721163959342413, + "1": 0.8464998496606891, + "2": 0.875199379201428 + }, + "f1": { + "0": 0.4995513216437478, + "1": 0.5503623331115033, + "2": 0.4554186696946595 + }, + "micro_accuracy": { + "0": 0.7988636363636363, + "1": 0.783203125, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9794146764025654, + "1": 0.976857362686223, + "2": 0.8829844004396705 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "e09a4f220edb40d8a91104ae63ebe1379858d4065288669e6fefb5be254e445c" + } + } + }, + { + "backend": "onnx", + "profile": "hflip", + "views": 2, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5595703125, + "micro_accuracy_known": 0.6511363636363636, + "macro_accuracy_all": 0.6072953997836166, + "macro_accuracy_known": 0.6357623716484736, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7041015625, + "micro_accuracy_known": 0.7041015625, + "macro_accuracy_all": 0.772523051856739, + "macro_accuracy_known": 0.772523051856739, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9013671875, + "micro_accuracy_known": 0.9013671875, + "macro_accuracy_all": 0.8415025119082482, + "macro_accuracy_known": 0.8415025119082482, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6072953997836166, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "precision": { + "0": 0.3825172399722529, + "1": 0.46272798382173375, + "2": 0.4042781382146394 + }, + "recall": { + "0": 0.6072953997836166, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "f1": { + "0": 0.2983049968783267, + "1": 0.40642039760620385, + "2": 0.4099302569872461 + }, + "micro_accuracy": { + "0": 0.5595703125, + "1": 0.7041015625, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9805015616924377, + "1": 0.9777968970149564, + "2": 0.8402286825966764 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6357623716484736, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "precision": { + "0": 0.4083116488854194, + "1": 0.46272798382173375, + "2": 0.4042781382146394 + }, + "recall": { + "0": 0.6357623716484736, + "1": 0.772523051856739, + "2": 0.8415025119082482 + }, + "f1": { + "0": 0.3228001380097893, + "1": 0.40642039760620385, + "2": 0.4099302569872461 + }, + "micro_accuracy": { + "0": 0.6511363636363636, + "1": 0.7041015625, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9861494891358263, + "1": 0.9777968970149564, + "2": 0.8402286825966764 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5011cb46c572c0ea1ce30d60a5aa5ddb994887c80e6704437796510acd55fdb4" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7239714356466123, + "macro_accuracy_known": 0.7579075966925473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.779296875, + "micro_accuracy_known": 0.779296875, + "macro_accuracy_all": 0.8460648058835403, + "macro_accuracy_known": 0.8460648058835403, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8684376388563206, + "macro_accuracy_known": 0.8684376388563206, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7239714356466123, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "precision": { + "0": 0.5312082620222155, + "1": 0.5789691710292569, + "2": 0.4677678477278932 + }, + "recall": { + "0": 0.7239714356466123, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "f1": { + "0": 0.4486216071411806, + "1": 0.5389382268841362, + "2": 0.4680864397151782 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.779296875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9736670675959799, + "1": 0.9760534959312177, + "2": 0.8610977665331919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7579075966925473, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "precision": { + "0": 0.5558605081961483, + "1": 0.5789691710292569, + "2": 0.4677678477278932 + }, + "recall": { + "0": 0.7579075966925473, + "1": 0.8460648058835403, + "2": 0.8684376388563206 + }, + "f1": { + "0": 0.48038194156682384, + "1": 0.5389382268841362, + "2": 0.4680864397151782 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.779296875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9771410797584144, + "1": 0.9760534959312177, + "2": 0.8610977665331919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "82e5c9cf55640f612650135bb38f4b8edea95a5e7713292a62f2f94d191d0d94" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6953125, + "micro_accuracy_known": 0.8090909090909091, + "macro_accuracy_all": 0.7490054272359848, + "macro_accuracy_known": 0.7841150566376717, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7900390625, + "micro_accuracy_known": 0.7900390625, + "macro_accuracy_all": 0.8663721768751217, + "macro_accuracy_known": 0.8663721768751217, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8738845020040061, + "macro_accuracy_known": 0.8738845020040061, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7490054272359848, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "precision": { + "0": 0.5671628254374734, + "1": 0.6223680640347307, + "2": 0.48996999380632916 + }, + "recall": { + "0": 0.7490054272359848, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "f1": { + "0": 0.4862885097858432, + "1": 0.5895253154735276, + "2": 0.48945960448631837 + }, + "micro_accuracy": { + "0": 0.6953125, + "1": 0.7900390625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9737375400290177, + "1": 0.9745437130474148, + "2": 0.8705705052200974 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7841150566376717, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "precision": { + "0": 0.5927627927627929, + "1": 0.6223680640347307, + "2": 0.48996999380632916 + }, + "recall": { + "0": 0.7841150566376717, + "1": 0.8663721768751217, + "2": 0.8738845020040061 + }, + "f1": { + "0": 0.5209217766298131, + "1": 0.5895253154735276, + "2": 0.48945960448631837 + }, + "micro_accuracy": { + "0": 0.8090909090909091, + "1": 0.7900390625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9772388639732228, + "1": 0.9745437130474148, + "2": 0.8705705052200974 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c2edac6edc5b463015e0a8f407d7d0271d7bfb7d195e6e9f9a43990b3f717ee0" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7239714356466123, + "macro_accuracy_known": 0.7579075966925473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7783203125, + "micro_accuracy_known": 0.7783203125, + "macro_accuracy_all": 0.8453240651427995, + "macro_accuracy_known": 0.8453240651427995, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9248046875, + "micro_accuracy_known": 0.9248046875, + "macro_accuracy_all": 0.8667644156724759, + "macro_accuracy_known": 0.8667644156724759, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7239714356466123, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "precision": { + "0": 0.5288020468713538, + "1": 0.5838835046627255, + "2": 0.4369691898770908 + }, + "recall": { + "0": 0.7239714356466123, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "f1": { + "0": 0.44653405260740103, + "1": 0.5432633692427185, + "2": 0.4422047830546245 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.7783203125, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9727774718765091, + "1": 0.9742803175973828, + "2": 0.857522102743873 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7579075966925473, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "precision": { + "0": 0.5531856364330592, + "1": 0.5838835046627255, + "2": 0.4369691898770908 + }, + "recall": { + "0": 0.7579075966925473, + "1": 0.8453240651427995, + "2": 0.8667644156724759 + }, + "f1": { + "0": 0.4779513860296556, + "1": 0.5432633692427185, + "2": 0.4422047830546245 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.7783203125, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9779509921966772, + "1": 0.9742803175973828, + "2": 0.857522102743873 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "39c9078fe6a24acf541564079008fd90b26dc15391aa1cd0b99d6482b625a69d" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6923828125, + "micro_accuracy_known": 0.8056818181818182, + "macro_accuracy_all": 0.7424903834075083, + "macro_accuracy_known": 0.7772946201297352, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8576420181449631, + "macro_accuracy_known": 0.8576420181449631, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8707709909948831, + "macro_accuracy_known": 0.8707709909948831, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7424903834075083, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "precision": { + "0": 0.5567736185383245, + "1": 0.6091923159796463, + "2": 0.4724244574193488 + }, + "recall": { + "0": 0.7424903834075083, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "f1": { + "0": 0.47629792011661193, + "1": 0.5737266608760239, + "2": 0.47169639950524317 + }, + "micro_accuracy": { + "0": 0.6923828125, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9739043442268694, + "1": 0.9759289974025427, + "2": 0.871496008905084 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7772946201297352, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "precision": { + "0": 0.5815020710704165, + "1": 0.6091923159796463, + "2": 0.4724244574193488 + }, + "recall": { + "0": 0.7772946201297352, + "1": 0.8576420181449631, + "2": 0.8707709909948831 + }, + "f1": { + "0": 0.5096837684736103, + "1": 0.5737266608760239, + "2": 0.47169639950524317 + }, + "micro_accuracy": { + "0": 0.8056818181818182, + "1": 0.787109375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9777746021348526, + "1": 0.9759289974025427, + "2": 0.871496008905084 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "91308603d84653d3a4c537a2a1f39eac075e876c884b113b2ae53d671d6ccf23" + } + } + }, + { + "backend": "onnx", + "profile": "five_crop", + "views": 5, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.529296875, + "micro_accuracy_known": 0.615909090909091, + "macro_accuracy_all": 0.5813643479000902, + "macro_accuracy_known": 0.608615801707907, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.66015625, + "macro_accuracy_all": 0.7256026606965782, + "macro_accuracy_known": 0.7256026606965782, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.8701171875, + "micro_accuracy_known": 0.8701171875, + "macro_accuracy_all": 0.8147572941844702, + "macro_accuracy_known": 0.8147572941844702, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.5813643479000902, + "1": 0.7256026606965782, + "2": 0.8147572941844702 + }, + "precision": { + "0": 0.35392462586707196, + "1": 0.4075918253771951, + "2": 0.3690999637281102 + }, + "recall": { + "0": 0.5813643479000902, + "1": 0.7256026606965782, + "2": 0.8147572941844702 + }, + "f1": { + "0": 0.2713698750105877, + "1": 0.349089690168233, + "2": 0.3752975852182212 + }, + "micro_accuracy": { + "0": 0.529296875, + "1": 0.66015625, + "2": 0.8701171875 + }, + "theilU": { + "0": 0.9748236916276373, + "1": 0.9698080417927888, + "2": 0.7928595346755765 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.608615801707907, + "1": 0.7256026606965782, + "2": 0.8147572941844702 + }, + "precision": { + "0": 0.3756394839728173, + "1": 0.4075918253771951, + "2": 0.3690999637281102 + }, + "recall": { + "0": 0.608615801707907, + "1": 0.7256026606965782, + "2": 0.8147572941844702 + }, + "f1": { + "0": 0.29133592733723945, + "1": 0.349089690168233, + "2": 0.3752975852182212 + }, + "micro_accuracy": { + "0": 0.615909090909091, + "1": 0.66015625, + "2": 0.8701171875 + }, + "theilU": { + "0": 0.9834727095917797, + "1": 0.9698080417927888, + "2": 0.7928595346755765 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "fc0cf8941cc0ed2c8d1cd3c1db0f43df2a0998b9da4664375e819d9ea439f034" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6494140625, + "micro_accuracy_known": 0.7556818181818182, + "macro_accuracy_all": 0.6864679547220788, + "macro_accuracy_known": 0.7186461400996763, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7509765625, + "micro_accuracy_known": 0.7509765625, + "macro_accuracy_all": 0.8111129589394724, + "macro_accuracy_known": 0.8111129589394724, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.91015625, + "micro_accuracy_known": 0.91015625, + "macro_accuracy_all": 0.8502301735024017, + "macro_accuracy_known": 0.8502301735024017, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6864679547220788, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "precision": { + "0": 0.4694282106782106, + "1": 0.5318897934798826, + "2": 0.46501598559523544 + }, + "recall": { + "0": 0.6864679547220788, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "f1": { + "0": 0.38962188632761535, + "1": 0.4798392220386532, + "2": 0.47312600706570296 + }, + "micro_accuracy": { + "0": 0.6494140625, + "1": 0.7509765625, + "2": 0.91015625 + }, + "theilU": { + "0": 0.9751197291793138, + "1": 0.9689413035535809, + "2": 0.8287543981297179 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7186461400996763, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "precision": { + "0": 0.49891792180130834, + "1": 0.5318897934798826, + "2": 0.46501598559523544 + }, + "recall": { + "0": 0.7186461400996763, + "1": 0.8111129589394724, + "2": 0.8502301735024017 + }, + "f1": { + "0": 0.4213423759075413, + "1": 0.4798392220386532, + "2": 0.47312600706570296 + }, + "micro_accuracy": { + "0": 0.7556818181818182, + "1": 0.7509765625, + "2": 0.91015625 + }, + "theilU": { + "0": 0.9777247222607772, + "1": 0.9689413035535809, + "2": 0.8287543981297179 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "9ea4cd4e65cd8c683840dc22b3b6a661a114c7564ece27571c18ec6f886a2eff" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6650390625, + "micro_accuracy_known": 0.7738636363636363, + "macro_accuracy_all": 0.6996728719136418, + "macro_accuracy_known": 0.7324700377845937, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.763671875, + "micro_accuracy_known": 0.763671875, + "macro_accuracy_all": 0.8276382349281632, + "macro_accuracy_known": 0.8276382349281632, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.912109375, + "micro_accuracy_known": 0.912109375, + "macro_accuracy_all": 0.8546508587363212, + "macro_accuracy_known": 0.8546508587363212, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6996728719136418, + "1": 0.8276382349281632, + "2": 0.8546508587363212 + }, + "precision": { + "0": 0.49111882013952074, + "1": 0.5582610950725357, + "2": 0.47864060684894144 + }, + "recall": { + "0": 0.6996728719136418, + "1": 0.8276382349281632, + "2": 0.8546508587363212 + }, + "f1": { + "0": 0.41368082017093166, + "1": 0.5120544331452003, + "2": 0.48353013053256666 + }, + "micro_accuracy": { + "0": 0.6650390625, + "1": 0.763671875, + "2": 0.912109375 + }, + "theilU": { + "0": 0.9743396036576268, + "1": 0.9714424257258611, + "2": 0.8399172279861942 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7324700377845937, + "1": 0.8276382349281632, + "2": 0.8546508587363212 + }, + "precision": { + "0": 0.5147725480920845, + "1": 0.5582610950725357, + "2": 0.47864060684894144 + }, + "recall": { + "0": 0.7324700377845937, + "1": 0.8276382349281632, + "2": 0.8546508587363212 + }, + "f1": { + "0": 0.4421529123625723, + "1": 0.5120544331452003, + "2": 0.48353013053256666 + }, + "micro_accuracy": { + "0": 0.7738636363636363, + "1": 0.763671875, + "2": 0.912109375 + }, + "theilU": { + "0": 0.9780483771504945, + "1": 0.9714424257258611, + "2": 0.8399172279861942 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "9ede1744f19a908ecc8ede34eff06cd3d72ae0df702a3b3744eb6c7c30a2649d" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.646484375, + "micro_accuracy_known": 0.7522727272727273, + "macro_accuracy_all": 0.6839643850543301, + "macro_accuracy_known": 0.7160252156037519, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7470703125, + "micro_accuracy_known": 0.7470703125, + "macro_accuracy_all": 0.8075779954045089, + "macro_accuracy_known": 0.8075779954045089, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9052734375, + "micro_accuracy_known": 0.9052734375, + "macro_accuracy_all": 0.8464483991172489, + "macro_accuracy_known": 0.8464483991172489, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6839643850543301, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "precision": { + "0": 0.46588800172637024, + "1": 0.5242695957669641, + "2": 0.45979108437103006 + }, + "recall": { + "0": 0.6839643850543301, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "f1": { + "0": 0.3863959918565987, + "1": 0.4722990514074956, + "2": 0.4659878669713519 + }, + "micro_accuracy": { + "0": 0.646484375, + "1": 0.7470703125, + "2": 0.9052734375 + }, + "theilU": { + "0": 0.9746054246842587, + "1": 0.9684000426806025, + "2": 0.8222229053522426 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7160252156037519, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "precision": { + "0": 0.4952058689717924, + "1": 0.5242695957669641, + "2": 0.45979108437103006 + }, + "recall": { + "0": 0.7160252156037519, + "1": 0.8075779954045089, + "2": 0.8464483991172489 + }, + "f1": { + "0": 0.4176726587402326, + "1": 0.4722990514074956, + "2": 0.4659878669713519 + }, + "micro_accuracy": { + "0": 0.7522727272727273, + "1": 0.7470703125, + "2": 0.9052734375 + }, + "theilU": { + "0": 0.9776412209536774, + "1": 0.9684000426806025, + "2": 0.8222229053522426 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "30ab0d74ef521fc7e68119c0299c2a5fe7359de7deb0cc3a43d22d5199fd5c6b" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6611328125, + "micro_accuracy_known": 0.7693181818181818, + "macro_accuracy_all": 0.6956453902742199, + "macro_accuracy_known": 0.728253767943324, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7607421875, + "micro_accuracy_known": 0.7607421875, + "macro_accuracy_all": 0.8246852819752103, + "macro_accuracy_known": 0.8246852819752103, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9111328125, + "micro_accuracy_known": 0.9111328125, + "macro_accuracy_all": 0.8490705487907292, + "macro_accuracy_known": 0.8490705487907292, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6956453902742199, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "precision": { + "0": 0.4879724111866969, + "1": 0.5611634388877977, + "2": 0.4615299319959455 + }, + "recall": { + "0": 0.6956453902742199, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "f1": { + "0": 0.40906296151598676, + "1": 0.5122306689750562, + "2": 0.4650358026058973 + }, + "micro_accuracy": { + "0": 0.6611328125, + "1": 0.7607421875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9739383567747754, + "1": 0.970300140083669, + "2": 0.8375842132984603 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.728253767943324, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "precision": { + "0": 0.511423463774949, + "1": 0.5611634388877977, + "2": 0.4615299319959455 + }, + "recall": { + "0": 0.728253767943324, + "1": 0.8246852819752103, + "2": 0.8490705487907292 + }, + "f1": { + "0": 0.4370672141449006, + "1": 0.5122306689750562, + "2": 0.4650358026058973 + }, + "micro_accuracy": { + "0": 0.7693181818181818, + "1": 0.7607421875, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9775791299489568, + "1": 0.970300140083669, + "2": 0.8375842132984603 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "51af7ed2f44539f298439e90c973f5a0efe767e27ddb223a539e737b61a5c2da" + } + } + }, + { + "backend": "onnx", + "profile": "ten_crop", + "views": 10, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.53125, + "micro_accuracy_known": 0.6181818181818182, + "macro_accuracy_all": 0.60343863844453, + "macro_accuracy_known": 0.6317248246216174, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.66796875, + "micro_accuracy_known": 0.66796875, + "macro_accuracy_all": 0.7426064804062802, + "macro_accuracy_known": 0.7426064804062802, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.876953125, + "micro_accuracy_known": 0.876953125, + "macro_accuracy_all": 0.8185086069877298, + "macro_accuracy_known": 0.8185086069877298, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.60343863844453, + "1": 0.7426064804062802, + "2": 0.8185086069877298 + }, + "precision": { + "0": 0.36610838960236547, + "1": 0.41887021708450267, + "2": 0.3393127537960845 + }, + "recall": { + "0": 0.60343863844453, + "1": 0.7426064804062802, + "2": 0.8185086069877298 + }, + "f1": { + "0": 0.28446650620972935, + "1": 0.36216024955193876, + "2": 0.3451490109373015 + }, + "micro_accuracy": { + "0": 0.53125, + "1": 0.66796875, + "2": 0.876953125 + }, + "theilU": { + "0": 0.9760683363716146, + "1": 0.9745672461273452, + "2": 0.817177110459985 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6317248246216174, + "1": 0.7426064804062802, + "2": 0.8185086069877298 + }, + "precision": { + "0": 0.387313828303676, + "1": 0.41887021708450267, + "2": 0.3393127537960845 + }, + "recall": { + "0": 0.6317248246216174, + "1": 0.7426064804062802, + "2": 0.8185086069877298 + }, + "f1": { + "0": 0.30523727617188695, + "1": 0.36216024955193876, + "2": 0.3451490109373015 + }, + "micro_accuracy": { + "0": 0.6181818181818182, + "1": 0.66796875, + "2": 0.876953125 + }, + "theilU": { + "0": 0.9848969941570566, + "1": 0.9745672461273452, + "2": 0.817177110459985 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "3502546f8e0d9ad37b3f1c735aa780b4f1b10ae8c3dcec3a8bb03efb0aa063e7" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.7681818181818182, + "macro_accuracy_all": 0.7129037238129932, + "macro_accuracy_known": 0.7463210858667272, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7529296875, + "micro_accuracy_known": 0.7529296875, + "macro_accuracy_all": 0.818684190268236, + "macro_accuracy_known": 0.818684190268236, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.908203125, + "micro_accuracy_known": 0.908203125, + "macro_accuracy_all": 0.8567603412359016, + "macro_accuracy_known": 0.8567603412359016, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7129037238129932, + "1": 0.818684190268236, + "2": 0.8567603412359016 + }, + "precision": { + "0": 0.49802447294707364, + "1": 0.5448076426734962, + "2": 0.44187827556880604 + }, + "recall": { + "0": 0.7129037238129932, + "1": 0.818684190268236, + "2": 0.8567603412359016 + }, + "f1": { + "0": 0.41871198362356904, + "1": 0.4923060359796284, + "2": 0.4457707565639457 + }, + "micro_accuracy": { + "0": 0.66015625, + "1": 0.7529296875, + "2": 0.908203125 + }, + "theilU": { + "0": 0.9762217677708296, + "1": 0.9717478802038781, + "2": 0.8378872795695889 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7463210858667272, + "1": 0.818684190268236, + "2": 0.8567603412359016 + }, + "precision": { + "0": 0.5280518070420351, + "1": 0.5448076426734962, + "2": 0.44187827556880604 + }, + "recall": { + "0": 0.7463210858667272, + "1": 0.818684190268236, + "2": 0.8567603412359016 + }, + "f1": { + "0": 0.45252563153108777, + "1": 0.4923060359796284, + "2": 0.4457707565639457 + }, + "micro_accuracy": { + "0": 0.7681818181818182, + "1": 0.7529296875, + "2": 0.908203125 + }, + "theilU": { + "0": 0.9786917824792701, + "1": 0.9717478802038781, + "2": 0.8378872795695889 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "42c1ac9b5e1d829c02774c703fa6361527dd355ff700f61ea60d43bd1190db16" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6796875, + "micro_accuracy_known": 0.7909090909090909, + "macro_accuracy_all": 0.7325734492172041, + "macro_accuracy_known": 0.7669128296492606, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.763671875, + "micro_accuracy_known": 0.763671875, + "macro_accuracy_all": 0.8333510604351063, + "macro_accuracy_known": 0.8333510604351063, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.916015625, + "micro_accuracy_known": 0.916015625, + "macro_accuracy_all": 0.8625940459222917, + "macro_accuracy_known": 0.8625940459222917, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7325734492172041, + "1": 0.8333510604351063, + "2": 0.8625940459222917 + }, + "precision": { + "0": 0.5238715681712424, + "1": 0.5620380443473664, + "2": 0.4699715742878861 + }, + "recall": { + "0": 0.7325734492172041, + "1": 0.8333510604351063, + "2": 0.8625940459222917 + }, + "f1": { + "0": 0.4477546600197871, + "1": 0.518772876751597, + "2": 0.471561161797031 + }, + "micro_accuracy": { + "0": 0.6796875, + "1": 0.763671875, + "2": 0.916015625 + }, + "theilU": { + "0": 0.9752117885145523, + "1": 0.970636789125353, + "2": 0.849650032544993 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7669128296492606, + "1": 0.8333510604351063, + "2": 0.8625940459222917 + }, + "precision": { + "0": 0.5475627413127413, + "1": 0.5620380443473664, + "2": 0.4699715742878861 + }, + "recall": { + "0": 0.7669128296492606, + "1": 0.8333510604351063, + "2": 0.8625940459222917 + }, + "f1": { + "0": 0.4780653249674853, + "1": 0.518772876751597, + "2": 0.471561161797031 + }, + "micro_accuracy": { + "0": 0.7909090909090909, + "1": 0.763671875, + "2": 0.916015625 + }, + "theilU": { + "0": 0.979568185877625, + "1": 0.970636789125353, + "2": 0.849650032544993 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "dcc8cf3fbcd17eced477e6b096083bad54a76d715d7ee8ba61400c6ef80bbe0b" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.65625, + "micro_accuracy_known": 0.7636363636363637, + "macro_accuracy_all": 0.7108419605572, + "macro_accuracy_known": 0.7441626774583187, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.751953125, + "micro_accuracy_known": 0.751953125, + "macro_accuracy_all": 0.8179484545325003, + "macro_accuracy_known": 0.8179484545325003, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90625, + "micro_accuracy_known": 0.90625, + "macro_accuracy_all": 0.8558718355080167, + "macro_accuracy_known": 0.8558718355080167, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7108419605572, + "1": 0.8179484545325003, + "2": 0.8558718355080167 + }, + "precision": { + "0": 0.4975161669606114, + "1": 0.5487093518726172, + "2": 0.41908174730608055 + }, + "recall": { + "0": 0.7108419605572, + "1": 0.8179484545325003, + "2": 0.8558718355080167 + }, + "f1": { + "0": 0.4167562407465394, + "1": 0.4940149311212579, + "2": 0.4235722356793009 + }, + "micro_accuracy": { + "0": 0.65625, + "1": 0.751953125, + "2": 0.90625 + }, + "theilU": { + "0": 0.9751258477609321, + "1": 0.971479645064188, + "2": 0.8394770876415069 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7441626774583187, + "1": 0.8179484545325003, + "2": 0.8558718355080167 + }, + "precision": { + "0": 0.5257962275819419, + "1": 0.5487093518726172, + "2": 0.41908174730608055 + }, + "recall": { + "0": 0.7441626774583187, + "1": 0.8179484545325003, + "2": 0.8558718355080167 + }, + "f1": { + "0": 0.44971174461039926, + "1": 0.4940149311212579, + "2": 0.4235722356793009 + }, + "micro_accuracy": { + "0": 0.7636363636363637, + "1": 0.751953125, + "2": 0.90625 + }, + "theilU": { + "0": 0.9788373747910906, + "1": 0.971479645064188, + "2": 0.8394770876415069 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "37c890da62315c60b58140cc632eb8a37978e0939a136a951d149d3ccd6b73b9" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7288603881592884, + "macro_accuracy_known": 0.7630257188542551, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.759765625, + "micro_accuracy_known": 0.759765625, + "macro_accuracy_all": 0.8302264358104817, + "macro_accuracy_known": 0.8302264358104817, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9140625, + "micro_accuracy_known": 0.9140625, + "macro_accuracy_all": 0.860943275272093, + "macro_accuracy_known": 0.860943275272093, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7288603881592884, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "precision": { + "0": 0.5171336701883326, + "1": 0.5662027452452983, + "2": 0.437878914755703 + }, + "recall": { + "0": 0.7288603881592884, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "f1": { + "0": 0.4401434197666639, + "1": 0.5189871549427112, + "2": 0.439343575066404 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.759765625, + "2": 0.9140625 + }, + "theilU": { + "0": 0.9756960268876012, + "1": 0.9706951338529712, + "2": 0.850375057622715 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7630257188542551, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "precision": { + "0": 0.5438878235858101, + "1": 0.5662027452452983, + "2": 0.437878914755703 + }, + "recall": { + "0": 0.7630257188542551, + "1": 0.8302264358104817, + "2": 0.860943275272093 + }, + "f1": { + "0": 0.4724513575658599, + "1": 0.5189871549427112, + "2": 0.439343575066404 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.759765625, + "2": 0.9140625 + }, + "theilU": { + "0": 0.9790989386760871, + "1": 0.9706951338529712, + "2": 0.850375057622715 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5ba81a12e0b26663034a3f333cdfa154be94ce1807c68bf0578d437693dabcef" + } + } + }, + { + "backend": "onnx", + "profile": "d4", + "views": 8, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.57421875, + "micro_accuracy_known": 0.6681818181818182, + "macro_accuracy_all": 0.6402713544897362, + "macro_accuracy_known": 0.6702840742314425, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.70703125, + "micro_accuracy_known": 0.70703125, + "macro_accuracy_all": 0.7726070710403958, + "macro_accuracy_known": 0.7726070710403958, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9072265625, + "micro_accuracy_known": 0.9072265625, + "macro_accuracy_all": 0.8468859199526105, + "macro_accuracy_known": 0.8468859199526105, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6402713544897362, + "1": 0.7726070710403958, + "2": 0.8468859199526105 + }, + "precision": { + "0": 0.4045381076712669, + "1": 0.47196183938205216, + "2": 0.3912983538152273 + }, + "recall": { + "0": 0.6402713544897362, + "1": 0.7726070710403958, + "2": 0.8468859199526105 + }, + "f1": { + "0": 0.32103123644355497, + "1": 0.41388511552455187, + "2": 0.3916713142546539 + }, + "micro_accuracy": { + "0": 0.57421875, + "1": 0.70703125, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9792061800168498, + "1": 0.9748618168983905, + "2": 0.8497734509263734 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6702840742314425, + "1": 0.7726070710403958, + "2": 0.8468859199526105 + }, + "precision": { + "0": 0.43097216726025595, + "1": 0.47196183938205216, + "2": 0.3912983538152273 + }, + "recall": { + "0": 0.6702840742314425, + "1": 0.7726070710403958, + "2": 0.8468859199526105 + }, + "f1": { + "0": 0.3473034083446149, + "1": 0.41388511552455187, + "2": 0.3916713142546539 + }, + "micro_accuracy": { + "0": 0.6681818181818182, + "1": 0.70703125, + "2": 0.9072265625 + }, + "theilU": { + "0": 0.9846412358771054, + "1": 0.9748618168983905, + "2": 0.8497734509263734 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5c99fe4670d831e1c63faca7d59e394137b74b898a7eeed02c661a566dd54fff" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7585867036083059, + "macro_accuracy_known": 0.7941454553399453, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.791015625, + "micro_accuracy_known": 0.791015625, + "macro_accuracy_all": 0.8634864641473037, + "macro_accuracy_known": 0.8634864641473037, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8657818683382639, + "macro_accuracy_known": 0.8657818683382639, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7585867036083059, + "1": 0.8634864641473037, + "2": 0.8657818683382639 + }, + "precision": { + "0": 0.567236502444115, + "1": 0.6131954981954981, + "2": 0.4743418234737222 + }, + "recall": { + "0": 0.7585867036083059, + "1": 0.8634864641473037, + "2": 0.8657818683382639 + }, + "f1": { + "0": 0.4870909513964596, + "1": 0.5755195886061406, + "2": 0.4708581534147483 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.791015625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9771099035335918, + "1": 0.9755592502306136, + "2": 0.8752121942441846 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7941454553399453, + "1": 0.8634864641473037, + "2": 0.8657818683382639 + }, + "precision": { + "0": 0.59884126984127, + "1": 0.6131954981954981, + "2": 0.4743418234737222 + }, + "recall": { + "0": 0.7941454553399453, + "1": 0.8634864641473037, + "2": 0.8657818683382639 + }, + "f1": { + "0": 0.5266146874592693, + "1": 0.5755195886061406, + "2": 0.4708581534147483 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.791015625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9794730609767626, + "1": 0.9755592502306136, + "2": 0.8752121942441846 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c5ec47de6ecc1c3a3832c6e018e5b717d82f9955c4058702827c378e215441c2" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7138671875, + "micro_accuracy_known": 0.8306818181818182, + "macro_accuracy_all": 0.7776770904913086, + "macro_accuracy_known": 0.8141307041080887, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7998046875, + "micro_accuracy_known": 0.7998046875, + "macro_accuracy_all": 0.8792673769282165, + "macro_accuracy_known": 0.8792673769282165, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.94140625, + "micro_accuracy_known": 0.94140625, + "macro_accuracy_all": 0.8731696675229259, + "macro_accuracy_known": 0.8731696675229259, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7776770904913086, + "1": 0.8792673769282165, + "2": 0.8731696675229259 + }, + "precision": { + "0": 0.590415742163054, + "1": 0.6508547054631623, + "2": 0.49756904526489676 + }, + "recall": { + "0": 0.7776770904913086, + "1": 0.8792673769282165, + "2": 0.8731696675229259 + }, + "f1": { + "0": 0.5137268116645758, + "1": 0.620508242273584, + "2": 0.4939041025478087 + }, + "micro_accuracy": { + "0": 0.7138671875, + "1": 0.7998046875, + "2": 0.94140625 + }, + "theilU": { + "0": 0.9769243920224615, + "1": 0.9719723599701269, + "2": 0.8942293128553218 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8141307041080887, + "1": 0.8792673769282165, + "2": 0.8731696675229259 + }, + "precision": { + "0": 0.6220901957274138, + "1": 0.6508547054631623, + "2": 0.49756904526489676 + }, + "recall": { + "0": 0.8141307041080887, + "1": 0.8792673769282165, + "2": 0.8731696675229259 + }, + "f1": { + "0": 0.5549843559208245, + "1": 0.620508242273584, + "2": 0.4939041025478087 + }, + "micro_accuracy": { + "0": 0.8306818181818182, + "1": 0.7998046875, + "2": 0.94140625 + }, + "theilU": { + "0": 0.9797253575646723, + "1": 0.9719723599701269, + "2": 0.8942293128553218 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "2305fcf78da614e2ac7ec39b55c155c6767030d132ce2715f6196a90247cda1d" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7585867036083059, + "macro_accuracy_known": 0.7941454553399453, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7900390625, + "micro_accuracy_known": 0.7900390625, + "macro_accuracy_all": 0.8601531308139704, + "macro_accuracy_known": 0.8601531308139704, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.931640625, + "micro_accuracy_known": 0.931640625, + "macro_accuracy_all": 0.8659249607879862, + "macro_accuracy_known": 0.8659249607879862, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7585867036083059, + "1": 0.8601531308139704, + "2": 0.8659249607879862 + }, + "precision": { + "0": 0.5692060736331571, + "1": 0.6198807406180677, + "2": 0.45820095845285647 + }, + "recall": { + "0": 0.7585867036083059, + "1": 0.8601531308139704, + "2": 0.8659249607879862 + }, + "f1": { + "0": 0.48862751591190584, + "1": 0.5812553651446515, + "2": 0.4607932336610651 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.7900390625, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9757524503255911, + "1": 0.9741133453453746, + "2": 0.8731833404456658 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7941454553399453, + "1": 0.8601531308139704, + "2": 0.8659249607879862 + }, + "precision": { + "0": 0.6032283853712427, + "1": 0.6198807406180677, + "2": 0.45820095845285647 + }, + "recall": { + "0": 0.7941454553399453, + "1": 0.8601531308139704, + "2": 0.8659249607879862 + }, + "f1": { + "0": 0.5302093269641107, + "1": 0.5812553651446515, + "2": 0.4607932336610651 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.7900390625, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9790038137752247, + "1": 0.9741133453453746, + "2": 0.8731833404456658 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c1908214e3139e3238c21d0f916ed5b122c01ccb3528b747bdf25b28ac082645" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.708984375, + "micro_accuracy_known": 0.825, + "macro_accuracy_all": 0.7677268417350898, + "macro_accuracy_known": 0.8037140374414221, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.79296875, + "micro_accuracy_known": 0.79296875, + "macro_accuracy_all": 0.8628356704965101, + "macro_accuracy_known": 0.8628356704965101, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9423828125, + "micro_accuracy_known": 0.9423828125, + "macro_accuracy_all": 0.8766414262672095, + "macro_accuracy_known": 0.8766414262672095, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7677268417350898, + "1": 0.8628356704965101, + "2": 0.8766414262672095 + }, + "precision": { + "0": 0.5831631644354065, + "1": 0.6321592091703092, + "2": 0.464109860492182 + }, + "recall": { + "0": 0.7677268417350898, + "1": 0.8628356704965101, + "2": 0.8766414262672095 + }, + "f1": { + "0": 0.5036270567460682, + "1": 0.598503472391381, + "2": 0.46168764250534716 + }, + "micro_accuracy": { + "0": 0.708984375, + "1": 0.79296875, + "2": 0.9423828125 + }, + "theilU": { + "0": 0.9765292396775955, + "1": 0.9729595091678918, + "2": 0.897968466499177 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8037140374414221, + "1": 0.8628356704965101, + "2": 0.8766414262672095 + }, + "precision": { + "0": 0.6165499970275252, + "1": 0.6321592091703092, + "2": 0.464109860492182 + }, + "recall": { + "0": 0.8037140374414221, + "1": 0.8628356704965101, + "2": 0.8766414262672095 + }, + "f1": { + "0": 0.545577692849099, + "1": 0.598503472391381, + "2": 0.46168764250534716 + }, + "micro_accuracy": { + "0": 0.825, + "1": 0.79296875, + "2": 0.9423828125 + }, + "theilU": { + "0": 0.9792632377578049, + "1": 0.9729595091678918, + "2": 0.897968466499177 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f218a2e185a66df60ccd1443f4f3355167c1e6c7193ddb8a421de1709c8a28a9" + } + } + }, + { + "backend": "torch", + "profile": "light_noise", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.55078125, + "micro_accuracy_known": 0.6409090909090909, + "macro_accuracy_all": 0.5982800921233757, + "macro_accuracy_known": 0.6263244714416589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.69140625, + "micro_accuracy_known": 0.69140625, + "macro_accuracy_all": 0.7580807482301855, + "macro_accuracy_known": 0.7580807482301855, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.8984375, + "micro_accuracy_known": 0.8984375, + "macro_accuracy_all": 0.8051683136261664, + "macro_accuracy_known": 0.8051683136261664, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.5982800921233757, + "1": 0.7580807482301855, + "2": 0.8051683136261664 + }, + "precision": { + "0": 0.37136511965192165, + "1": 0.4466613507429834, + "2": 0.41728656897993305 + }, + "recall": { + "0": 0.5982800921233757, + "1": 0.7580807482301855, + "2": 0.8051683136261664 + }, + "f1": { + "0": 0.28936644147558, + "1": 0.389230601534748, + "2": 0.41400917998632486 + }, + "micro_accuracy": { + "0": 0.55078125, + "1": 0.69140625, + "2": 0.8984375 + }, + "theilU": { + "0": 0.9796759229512882, + "1": 0.9777050390583086, + "2": 0.8304762027245132 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6263244714416589, + "1": 0.7580807482301855, + "2": 0.8051683136261664 + }, + "precision": { + "0": 0.39189523809523813, + "1": 0.4466613507429834, + "2": 0.41728656897993305 + }, + "recall": { + "0": 0.6263244714416589, + "1": 0.7580807482301855, + "2": 0.8051683136261664 + }, + "f1": { + "0": 0.30980280628467527, + "1": 0.389230601534748, + "2": 0.41400917998632486 + }, + "micro_accuracy": { + "0": 0.6409090909090909, + "1": 0.69140625, + "2": 0.8984375 + }, + "theilU": { + "0": 0.9867823418942343, + "1": 0.9777050390583086, + "2": 0.8304762027245132 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "a14dc6f66ac2ee27d361e9993192ca137d25323d171dd5f838288262dd8cb934" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6591796875, + "micro_accuracy_known": 0.7670454545454546, + "macro_accuracy_all": 0.7066941759498712, + "macro_accuracy_known": 0.7398204654475213, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7646484375, + "micro_accuracy_known": 0.7646484375, + "macro_accuracy_all": 0.8198947503791194, + "macro_accuracy_known": 0.8198947503791194, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9248046875, + "micro_accuracy_known": 0.9248046875, + "macro_accuracy_all": 0.8316144395919204, + "macro_accuracy_known": 0.8316144395919204, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7066941759498712, + "1": 0.8198947503791194, + "2": 0.8316144395919204 + }, + "precision": { + "0": 0.5042094412240044, + "1": 0.5665973813064331, + "2": 0.43825556344944144 + }, + "recall": { + "0": 0.7066941759498712, + "1": 0.8198947503791194, + "2": 0.8316144395919204 + }, + "f1": { + "0": 0.42575784674450584, + "1": 0.5211979778793738, + "2": 0.4337807078924581 + }, + "micro_accuracy": { + "0": 0.6591796875, + "1": 0.7646484375, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9735097500570096, + "1": 0.9727261971483987, + "2": 0.8657064613349735 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7398204654475213, + "1": 0.8198947503791194, + "2": 0.8316144395919204 + }, + "precision": { + "0": 0.5253379776450247, + "1": 0.5665973813064331, + "2": 0.43825556344944144 + }, + "recall": { + "0": 0.7398204654475213, + "1": 0.8198947503791194, + "2": 0.8316144395919204 + }, + "f1": { + "0": 0.45370665419403977, + "1": 0.5211979778793738, + "2": 0.4337807078924581 + }, + "micro_accuracy": { + "0": 0.7670454545454546, + "1": 0.7646484375, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9774377634791895, + "1": 0.9727261971483987, + "2": 0.8657064613349735 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "a4ea502204f6c04d7c15457072f6f287b90e5958caf75db3641722db5a6641b3" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6806640625, + "micro_accuracy_known": 0.7920454545454545, + "macro_accuracy_all": 0.7310275201968053, + "macro_accuracy_known": 0.7652944352060306, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.8397377735642478, + "macro_accuracy_known": 0.8397377735642478, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8317364468516413, + "macro_accuracy_known": 0.8317364468516413, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7310275201968053, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "precision": { + "0": 0.5340657777944467, + "1": 0.5983671820603639, + "2": 0.45308418350617835 + }, + "recall": { + "0": 0.7310275201968053, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "f1": { + "0": 0.4581880127191281, + "1": 0.561039768420785, + "2": 0.442328851485267 + }, + "micro_accuracy": { + "0": 0.6806640625, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9732635179517282, + "1": 0.9713511969856635, + "2": 0.8715700789503066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7652944352060306, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "precision": { + "0": 0.557557705297067, + "1": 0.5983671820603639, + "2": 0.45308418350617835 + }, + "recall": { + "0": 0.7652944352060306, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "f1": { + "0": 0.48983331045199946, + "1": 0.561039768420785, + "2": 0.442328851485267 + }, + "micro_accuracy": { + "0": 0.7920454545454545, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9771498017995599, + "1": 0.9713511969856635, + "2": 0.8715700789503066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "855732b36869503efb9ebdff6da0d2eb0eb34e647ff07cb19a99f5201a5b147f" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6591796875, + "micro_accuracy_known": 0.7670454545454546, + "macro_accuracy_all": 0.7066941759498712, + "macro_accuracy_known": 0.7398204654475213, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7646484375, + "micro_accuracy_known": 0.7646484375, + "macro_accuracy_all": 0.8198947503791194, + "macro_accuracy_known": 0.8198947503791194, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9228515625, + "micro_accuracy_known": 0.9228515625, + "macro_accuracy_all": 0.8305863776983983, + "macro_accuracy_known": 0.8305863776983983, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7066941759498712, + "1": 0.8198947503791194, + "2": 0.8305863776983983 + }, + "precision": { + "0": 0.5069287359465932, + "1": 0.5697716845444118, + "2": 0.42954806681327823 + }, + "recall": { + "0": 0.7066941759498712, + "1": 0.8198947503791194, + "2": 0.8305863776983983 + }, + "f1": { + "0": 0.4275983109996368, + "1": 0.5237807081274264, + "2": 0.4268059402966388 + }, + "micro_accuracy": { + "0": 0.6591796875, + "1": 0.7646484375, + "2": 0.9228515625 + }, + "theilU": { + "0": 0.9721413160677382, + "1": 0.9710435774121716, + "2": 0.8635039416351868 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7398204654475213, + "1": 0.8198947503791194, + "2": 0.8305863776983983 + }, + "precision": { + "0": 0.528229126840238, + "1": 0.5697716845444118, + "2": 0.42954806681327823 + }, + "recall": { + "0": 0.7398204654475213, + "1": 0.8198947503791194, + "2": 0.8305863776983983 + }, + "f1": { + "0": 0.4557494874883961, + "1": 0.5237807081274264, + "2": 0.4268059402966388 + }, + "micro_accuracy": { + "0": 0.7670454545454546, + "1": 0.7646484375, + "2": 0.9228515625 + }, + "theilU": { + "0": 0.9772256802072771, + "1": 0.9710435774121716, + "2": 0.8635039416351868 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4759ea5533c354124d06d6c63dc4246b2511319b0578cb15ee2b2a9523781278" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7234303708086111, + "macro_accuracy_known": 0.7573411694402647, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.771484375, + "micro_accuracy_known": 0.771484375, + "macro_accuracy_all": 0.8264044402309145, + "macro_accuracy_known": 0.8264044402309145, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8356505719183113, + "macro_accuracy_known": 0.8356505719183113, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7234303708086111, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "precision": { + "0": 0.5315749363630721, + "1": 0.5870333969106291, + "2": 0.454276939025848 + }, + "recall": { + "0": 0.7234303708086111, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "f1": { + "0": 0.45333046228949975, + "1": 0.5441119185791008, + "2": 0.44442237587410865 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.771484375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9733142789269716, + "1": 0.9729723683192005, + "2": 0.8758419778179122 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7573411694402647, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "precision": { + "0": 0.5548049515038953, + "1": 0.5870333969106291, + "2": 0.454276939025848 + }, + "recall": { + "0": 0.7573411694402647, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "f1": { + "0": 0.48445144105486015, + "1": 0.5441119185791008, + "2": 0.44442237587410865 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.771484375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9773377473297942, + "1": 0.9729723683192005, + "2": 0.8758419778179122 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "362d0905f26cafb4ce7aa6bfd923f2e98bafa7994a4cf4d4a1aa415b48f4fef6" + } + } + }, + { + "backend": "onnx", + "profile": "light_noise", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5498046875, + "micro_accuracy_known": 0.6397727272727273, + "macro_accuracy_all": 0.597948417164835, + "macro_accuracy_known": 0.6259772492194366, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.6923828125, + "micro_accuracy_known": 0.6923828125, + "macro_accuracy_all": 0.7590331291825664, + "macro_accuracy_known": 0.7590331291825664, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.8984375, + "micro_accuracy_known": 0.8984375, + "macro_accuracy_all": 0.8051683136261664, + "macro_accuracy_known": 0.8051683136261664, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.597948417164835, + "1": 0.7590331291825664, + "2": 0.8051683136261664 + }, + "precision": { + "0": 0.37136511965192165, + "1": 0.4466613507429834, + "2": 0.41728656897993305 + }, + "recall": { + "0": 0.597948417164835, + "1": 0.7590331291825664, + "2": 0.8051683136261664 + }, + "f1": { + "0": 0.28923290873335167, + "1": 0.3895772048225278, + "2": 0.41400917998632486 + }, + "micro_accuracy": { + "0": 0.5498046875, + "1": 0.6923828125, + "2": 0.8984375 + }, + "theilU": { + "0": 0.9796759229512882, + "1": 0.9777050390583086, + "2": 0.8304762027245132 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6259772492194366, + "1": 0.7590331291825664, + "2": 0.8051683136261664 + }, + "precision": { + "0": 0.39189523809523813, + "1": 0.4466613507429834, + "2": 0.41728656897993305 + }, + "recall": { + "0": 0.6259772492194366, + "1": 0.7590331291825664, + "2": 0.8051683136261664 + }, + "f1": { + "0": 0.30966028576172006, + "1": 0.3895772048225278, + "2": 0.41400917998632486 + }, + "micro_accuracy": { + "0": 0.6397727272727273, + "1": 0.6923828125, + "2": 0.8984375 + }, + "theilU": { + "0": 0.9867823418942343, + "1": 0.9777050390583086, + "2": 0.8304762027245132 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "765f4c77f25ba8a09803627df78f34e58476a9ba778c7ba466761956b5e4b387" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.7681818181818182, + "macro_accuracy_all": 0.7074049080038868, + "macro_accuracy_known": 0.7405645130665689, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7646484375, + "micro_accuracy_known": 0.7646484375, + "macro_accuracy_all": 0.8198947503791194, + "macro_accuracy_known": 0.8198947503791194, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9248046875, + "micro_accuracy_known": 0.9248046875, + "macro_accuracy_all": 0.8317539957575575, + "macro_accuracy_known": 0.8317539957575575, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7074049080038868, + "1": 0.8198947503791194, + "2": 0.8317539957575575 + }, + "precision": { + "0": 0.5042094412240044, + "1": 0.5665973813064331, + "2": 0.44999679783808183 + }, + "recall": { + "0": 0.7074049080038868, + "1": 0.8198947503791194, + "2": 0.8317539957575575 + }, + "f1": { + "0": 0.4260688749147715, + "1": 0.5211979778793738, + "2": 0.44087968017792173 + }, + "micro_accuracy": { + "0": 0.66015625, + "1": 0.7646484375, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9735811508859927, + "1": 0.9727261971483987, + "2": 0.8646978424703992 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7405645130665689, + "1": 0.8198947503791194, + "2": 0.8317539957575575 + }, + "precision": { + "0": 0.5253379776450247, + "1": 0.5665973813064331, + "2": 0.44999679783808183 + }, + "recall": { + "0": 0.7405645130665689, + "1": 0.8198947503791194, + "2": 0.8317539957575575 + }, + "f1": { + "0": 0.45403706106650266, + "1": 0.5211979778793738, + "2": 0.44087968017792173 + }, + "micro_accuracy": { + "0": 0.7681818181818182, + "1": 0.7646484375, + "2": 0.9248046875 + }, + "theilU": { + "0": 0.9775212647862893, + "1": 0.9727261971483987, + "2": 0.8646978424703992 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d73c2c6a61ac53452147c70d0bf04fb1b22bb074a1fb05a8c4429e8462331460" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6806640625, + "micro_accuracy_known": 0.7920454545454545, + "macro_accuracy_all": 0.7310275201968053, + "macro_accuracy_known": 0.7652944352060306, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.8397377735642478, + "macro_accuracy_known": 0.8397377735642478, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8317364468516413, + "macro_accuracy_known": 0.8317364468516413, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7310275201968053, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "precision": { + "0": 0.5340657777944467, + "1": 0.5983671820603639, + "2": 0.45308418350617835 + }, + "recall": { + "0": 0.7310275201968053, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "f1": { + "0": 0.4581880127191281, + "1": 0.561039768420785, + "2": 0.442328851485267 + }, + "micro_accuracy": { + "0": 0.6806640625, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9732635179517282, + "1": 0.9713511969856635, + "2": 0.8715700789503066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7652944352060306, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "precision": { + "0": 0.557557705297067, + "1": 0.5983671820603639, + "2": 0.45308418350617835 + }, + "recall": { + "0": 0.7652944352060306, + "1": 0.8397377735642478, + "2": 0.8317364468516413 + }, + "f1": { + "0": 0.48983331045199946, + "1": 0.561039768420785, + "2": 0.442328851485267 + }, + "micro_accuracy": { + "0": 0.7920454545454545, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9771498017995599, + "1": 0.9713511969856635, + "2": 0.8715700789503066 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "ac0bb059bd16ff00e329fe3c83f985b01913c8781a873c3f8b7d738ca9d7b347" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.66015625, + "micro_accuracy_known": 0.7681818181818182, + "macro_accuracy_all": 0.7074049080038868, + "macro_accuracy_known": 0.7405645130665689, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7646484375, + "micro_accuracy_known": 0.7646484375, + "macro_accuracy_all": 0.8198947503791194, + "macro_accuracy_known": 0.8198947503791194, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9228515625, + "micro_accuracy_known": 0.9228515625, + "macro_accuracy_all": 0.8307259338640354, + "macro_accuracy_known": 0.8307259338640354, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7074049080038868, + "1": 0.8198947503791194, + "2": 0.8307259338640354 + }, + "precision": { + "0": 0.5069287359465932, + "1": 0.5697716845444118, + "2": 0.43533689690966904 + }, + "recall": { + "0": 0.7074049080038868, + "1": 0.8198947503791194, + "2": 0.8307259338640354 + }, + "f1": { + "0": 0.42791025395863846, + "1": 0.5237807081274264, + "2": 0.43152376139055 + }, + "micro_accuracy": { + "0": 0.66015625, + "1": 0.7646484375, + "2": 0.9228515625 + }, + "theilU": { + "0": 0.9722127168967214, + "1": 0.9710435774121716, + "2": 0.8619312297347159 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7405645130665689, + "1": 0.8198947503791194, + "2": 0.8307259338640354 + }, + "precision": { + "0": 0.528229126840238, + "1": 0.5697716845444118, + "2": 0.43533689690966904 + }, + "recall": { + "0": 0.7405645130665689, + "1": 0.8198947503791194, + "2": 0.8307259338640354 + }, + "f1": { + "0": 0.45608092688233554, + "1": 0.5237807081274264, + "2": 0.43152376139055 + }, + "micro_accuracy": { + "0": 0.7681818181818182, + "1": 0.7646484375, + "2": 0.9228515625 + }, + "theilU": { + "0": 0.9773091815143768, + "1": 0.9710435774121716, + "2": 0.8619312297347159 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "39fa981d3975e99fb5352e118f584180b4b55e3a27d51ecc2a4ec6e630c23746" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7234303708086111, + "macro_accuracy_known": 0.7573411694402647, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.771484375, + "micro_accuracy_known": 0.771484375, + "macro_accuracy_all": 0.8264044402309145, + "macro_accuracy_known": 0.8264044402309145, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8356505719183113, + "macro_accuracy_known": 0.8356505719183113, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7234303708086111, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "precision": { + "0": 0.5315749363630721, + "1": 0.5870333969106291, + "2": 0.454276939025848 + }, + "recall": { + "0": 0.7234303708086111, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "f1": { + "0": 0.45333046228949975, + "1": 0.5441119185791008, + "2": 0.44442237587410865 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.771484375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9733142789269716, + "1": 0.9729723683192005, + "2": 0.8758419778179122 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7573411694402647, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "precision": { + "0": 0.5548049515038953, + "1": 0.5870333969106291, + "2": 0.454276939025848 + }, + "recall": { + "0": 0.7573411694402647, + "1": 0.8264044402309145, + "2": 0.8356505719183113 + }, + "f1": { + "0": 0.48445144105486015, + "1": 0.5441119185791008, + "2": 0.44442237587410865 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.771484375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9773377473297942, + "1": 0.9729723683192005, + "2": 0.8758419778179122 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4163520fcb8ff2db51f208fe3c897d7d8a33ef167029e9ff6cf08ee3cd2d8b9c" + } + } + }, + { + "backend": "torch", + "profile": "brightness", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.564453125, + "micro_accuracy_known": 0.6568181818181819, + "macro_accuracy_all": 0.6183162410283385, + "macro_accuracy_known": 0.6472998148265419, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7021484375, + "micro_accuracy_known": 0.7021484375, + "macro_accuracy_all": 0.7693243600883878, + "macro_accuracy_known": 0.7693243600883878, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.904296875, + "micro_accuracy_known": 0.904296875, + "macro_accuracy_all": 0.8518896032611248, + "macro_accuracy_known": 0.8518896032611248, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6183162410283385, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "precision": { + "0": 0.3880250305250305, + "1": 0.4516077494746436, + "2": 0.47059001308503184 + }, + "recall": { + "0": 0.6183162410283385, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "f1": { + "0": 0.304404133638732, + "1": 0.39522707704691623, + "2": 0.47894868712219413 + }, + "micro_accuracy": { + "0": 0.564453125, + "1": 0.7021484375, + "2": 0.904296875 + }, + "theilU": { + "0": 0.9788721719654571, + "1": 0.9776673557201376, + "2": 0.8301641891930855 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6472998148265419, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "precision": { + "0": 0.4118499161182088, + "1": 0.4516077494746436, + "2": 0.47059001308503184 + }, + "recall": { + "0": 0.6472998148265419, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "f1": { + "0": 0.3278804671570309, + "1": 0.39522707704691623, + "2": 0.47894868712219413 + }, + "micro_accuracy": { + "0": 0.6568181818181819, + "1": 0.7021484375, + "2": 0.904296875 + }, + "theilU": { + "0": 0.9861901698381681, + "1": 0.9776673557201376, + "2": 0.8301641891930855 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "ea9e17724e91fa8a7a1fd89f21225b5c067af7ea831da580500264621b339db5" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7294239030393783, + "macro_accuracy_known": 0.7636156484943492, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.8404213357880577, + "macro_accuracy_known": 0.8404213357880577, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.931640625, + "micro_accuracy_known": 0.931640625, + "macro_accuracy_all": 0.8747512843621778, + "macro_accuracy_known": 0.8747512843621778, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8747512843621778 + }, + "precision": { + "0": 0.5294163250289078, + "1": 0.5768299761806256, + "2": 0.47452535059984774 + }, + "recall": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8747512843621778 + }, + "f1": { + "0": 0.4516098009678518, + "1": 0.5359895169230687, + "2": 0.4816003748813493 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.77734375, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9749195921932904, + "1": 0.9758357125606513, + "2": 0.8698011914185231 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8747512843621778 + }, + "precision": { + "0": 0.5577560074955907, + "1": 0.5768299761806256, + "2": 0.47452535059984774 + }, + "recall": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8747512843621778 + }, + "f1": { + "0": 0.4868157609635364, + "1": 0.5359895169230687, + "2": 0.4816003748813493 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.77734375, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9784480772656535, + "1": 0.9758357125606513, + "2": 0.8698011914185231 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "0256522b08c3a128fad8d9c63c34954acce621a4c2338dc7692ec63cf24b4d45" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6923828125, + "micro_accuracy_known": 0.8056818181818182, + "macro_accuracy_all": 0.7466012977108814, + "macro_accuracy_known": 0.7815982335410788, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8588238206905426, + "macro_accuracy_known": 0.8588238206905426, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.935546875, + "micro_accuracy_known": 0.935546875, + "macro_accuracy_all": 0.8772082960647901, + "macro_accuracy_known": 0.8772082960647901, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7466012977108814, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "precision": { + "0": 0.5483308787432499, + "1": 0.597375942443207, + "2": 0.4875648805802487 + }, + "recall": { + "0": 0.7466012977108814, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "f1": { + "0": 0.4731994993617266, + "1": 0.5646175682149087, + "2": 0.4895885600320747 + }, + "micro_accuracy": { + "0": 0.6923828125, + "1": 0.787109375, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9743492089164368, + "1": 0.9757817967832746, + "2": 0.8813345819108521 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7815982335410788, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "precision": { + "0": 0.5746031746031746, + "1": 0.597375942443207, + "2": 0.4875648805802487 + }, + "recall": { + "0": 0.7815982335410788, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "f1": { + "0": 0.5079607025155944, + "1": 0.5646175682149087, + "2": 0.4895885600320747 + }, + "micro_accuracy": { + "0": 0.8056818181818182, + "1": 0.787109375, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9786744434452747, + "1": 0.9757817967832746, + "2": 0.8813345819108521 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "b29a21bee2dcad0c6e7e2d5cd6d2bc96f8f9a5fbc0885f89ca9600cf6c7a6c1b" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7294239030393783, + "macro_accuracy_known": 0.7636156484943492, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.8404213357880577, + "macro_accuracy_known": 0.8404213357880577, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9287109375, + "micro_accuracy_known": 0.9287109375, + "macro_accuracy_all": 0.8735081687052146, + "macro_accuracy_known": 0.8735081687052146, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8735081687052146 + }, + "precision": { + "0": 0.5270298141186299, + "1": 0.5771907265413759, + "2": 0.44917961758061403 + }, + "recall": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8735081687052146 + }, + "f1": { + "0": 0.4494980303914683, + "1": 0.5362708108752487, + "2": 0.4575318257591758 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9739699360130293, + "1": 0.9743935370803344, + "2": 0.8676031507274039 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8735081687052146 + }, + "precision": { + "0": 0.5531514209349261, + "1": 0.5771907265413759, + "2": 0.44917961758061403 + }, + "recall": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8735081687052146 + }, + "f1": { + "0": 0.4827628758095473, + "1": 0.5362708108752487, + "2": 0.4575318257591758 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9792579897039164, + "1": 0.9743935370803344, + "2": 0.8676031507274039 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "fd220b613188b66977299b3e6c030460398f5f34099f4b8b253996e9ad570fa1" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6884765625, + "micro_accuracy_known": 0.8011363636363636, + "macro_accuracy_all": 0.7391386111437172, + "macro_accuracy_known": 0.7737857335410788, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7822265625, + "micro_accuracy_known": 0.7822265625, + "macro_accuracy_all": 0.8454904873572092, + "macro_accuracy_known": 0.8454904873572092, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8768253954615906, + "macro_accuracy_known": 0.8768253954615906, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7391386111437172, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "precision": { + "0": 0.5457256622785633, + "1": 0.5872092018109717, + "2": 0.455852200251995 + }, + "recall": { + "0": 0.7391386111437172, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "f1": { + "0": 0.46824913275817853, + "1": 0.5494891732794056, + "2": 0.4568076265665338 + }, + "micro_accuracy": { + "0": 0.6884765625, + "1": 0.7822265625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9742392602318141, + "1": 0.9767525227713265, + "2": 0.8877672927386754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7737857335410788, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "precision": { + "0": 0.5716997119132351, + "1": 0.5872092018109717, + "2": 0.455852200251995 + }, + "recall": { + "0": 0.7737857335410788, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "f1": { + "0": 0.5024339900483179, + "1": 0.5494891732794056, + "2": 0.4568076265665338 + }, + "micro_accuracy": { + "0": 0.8011363636363636, + "1": 0.7822265625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9788865267171871, + "1": 0.9767525227713265, + "2": 0.8877672927386754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8e173c924e1565d936a4f5cc6c3d70004ab4615f1df65f6073f759fbaf0b4abe" + } + } + }, + { + "backend": "torch", + "profile": "contrast", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5673828125, + "micro_accuracy_known": 0.6602272727272728, + "macro_accuracy_all": 0.6196075737316901, + "macro_accuracy_known": 0.648651678750363, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7041015625, + "micro_accuracy_known": 0.7041015625, + "macro_accuracy_all": 0.7684694057953135, + "macro_accuracy_known": 0.7684694057953135, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90234375, + "micro_accuracy_known": 0.90234375, + "macro_accuracy_all": 0.8456605957411253, + "macro_accuracy_known": 0.8456605957411253, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6196075737316901, + "1": 0.7684694057953135, + "2": 0.8456605957411253 + }, + "precision": { + "0": 0.3919487847222222, + "1": 0.4558982148455831, + "2": 0.46815163882835753 + }, + "recall": { + "0": 0.6196075737316901, + "1": 0.7684694057953135, + "2": 0.8456605957411253 + }, + "f1": { + "0": 0.3091710290229334, + "1": 0.4016737979134566, + "2": 0.47463956339683483 + }, + "micro_accuracy": { + "0": 0.5673828125, + "1": 0.7041015625, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9772835814572578, + "1": 0.9765631569763479, + "2": 0.8282929804304322 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.648651678750363, + "1": 0.7684694057953135, + "2": 0.8456605957411253 + }, + "precision": { + "0": 0.4129813947436899, + "1": 0.4558982148455831, + "2": 0.46815163882835753 + }, + "recall": { + "0": 0.648651678750363, + "1": 0.7684694057953135, + "2": 0.8456605957411253 + }, + "f1": { + "0": 0.3308754587571434, + "1": 0.4016737979134566, + "2": 0.47463956339683483 + }, + "micro_accuracy": { + "0": 0.6602272727272728, + "1": 0.7041015625, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9843018341000567, + "1": 0.9765631569763479, + "2": 0.8282929804304322 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d6f50f16d41a7f7b2e73ceb5421ff0f73aa0b303f694b0db4ef32b881cdddfd0" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7333145239763464, + "macro_accuracy_known": 0.7676886422877377, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.838827523488363, + "macro_accuracy_known": 0.838827523488363, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8802629987776895, + "macro_accuracy_known": 0.8802629987776895, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7333145239763464, + "1": 0.838827523488363, + "2": 0.8802629987776895 + }, + "precision": { + "0": 0.527456414259693, + "1": 0.5769673321847235, + "2": 0.47487129838085695 + }, + "recall": { + "0": 0.7333145239763464, + "1": 0.838827523488363, + "2": 0.8802629987776895 + }, + "f1": { + "0": 0.4519260772103862, + "1": 0.5340534806303646, + "2": 0.48285486972698133 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.7763671875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9751968216370304, + "1": 0.9751952881581867, + "2": 0.8648225268384022 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7676886422877377, + "1": 0.838827523488363, + "2": 0.8802629987776895 + }, + "precision": { + "0": 0.5573248494800219, + "1": 0.5769673321847235, + "2": 0.47487129838085695 + }, + "recall": { + "0": 0.7676886422877377, + "1": 0.838827523488363, + "2": 0.8802629987776895 + }, + "f1": { + "0": 0.4885041875969866, + "1": 0.5340534806303646, + "2": 0.48285486972698133 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.7763671875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9781268909653403, + "1": 0.9751952881581867, + "2": 0.8648225268384022 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "b0879b6d50873e70132aec38b33e71e98c8ccf10928f75c73285593a06e58dd9" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6943359375, + "micro_accuracy_known": 0.8079545454545455, + "macro_accuracy_all": 0.752995488315598, + "macro_accuracy_known": 0.7882921518303917, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7861328125, + "micro_accuracy_known": 0.7861328125, + "macro_accuracy_all": 0.8584998496606892, + "macro_accuracy_known": 0.8584998496606892, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.935546875, + "micro_accuracy_known": 0.935546875, + "macro_accuracy_all": 0.8831767563769762, + "macro_accuracy_known": 0.8831767563769762, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.752995488315598, + "1": 0.8584998496606892, + "2": 0.8831767563769762 + }, + "precision": { + "0": 0.5535755195549009, + "1": 0.6009100018068628, + "2": 0.4888496466827768 + }, + "recall": { + "0": 0.752995488315598, + "1": 0.8584998496606892, + "2": 0.8831767563769762 + }, + "f1": { + "0": 0.48214921171360525, + "1": 0.5676364116280896, + "2": 0.4919872603692013 + }, + "micro_accuracy": { + "0": 0.6943359375, + "1": 0.7861328125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9738976776196072, + "1": 0.9746861387960117, + "2": 0.8789252577524179 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7882921518303917, + "1": 0.8584998496606892, + "2": 0.8831767563769762 + }, + "precision": { + "0": 0.5821599862966769, + "1": 0.6009100018068628, + "2": 0.4888496466827768 + }, + "recall": { + "0": 0.7882921518303917, + "1": 0.8584998496606892, + "2": 0.8831767563769762 + }, + "f1": { + "0": 0.5196532554902477, + "1": 0.5676364116280896, + "2": 0.4919872603692013 + }, + "micro_accuracy": { + "0": 0.8079545454545455, + "1": 0.7861328125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9776125631060896, + "1": 0.9746861387960117, + "2": 0.8789252577524179 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f10c41c5854d8bf02e3ca2ff9073f38b4843af0a09906907d0ed19e834efcf91" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6748046875, + "micro_accuracy_known": 0.7852272727272728, + "macro_accuracy_all": 0.7333145239763464, + "macro_accuracy_known": 0.7676886422877377, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.838827523488363, + "macro_accuracy_known": 0.838827523488363, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8790198831207265, + "macro_accuracy_known": 0.8790198831207265, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7333145239763464, + "1": 0.838827523488363, + "2": 0.8790198831207265 + }, + "precision": { + "0": 0.5285493104345563, + "1": 0.5823939462097357, + "2": 0.4668429384179581 + }, + "recall": { + "0": 0.7333145239763464, + "1": 0.838827523488363, + "2": 0.8790198831207265 + }, + "f1": { + "0": 0.45252667781098677, + "1": 0.5388618434605654, + "2": 0.4763147474995116 + }, + "micro_accuracy": { + "0": 0.6748046875, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9739545159440054, + "1": 0.9729908415213692, + "2": 0.8622817914940196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7676886422877377, + "1": 0.838827523488363, + "2": 0.8790198831207265 + }, + "precision": { + "0": 0.5565551191839851, + "1": 0.5823939462097357, + "2": 0.4668429384179581 + }, + "recall": { + "0": 0.7676886422877377, + "1": 0.838827523488363, + "2": 0.8790198831207265 + }, + "f1": { + "0": 0.48757352892731887, + "1": 0.5388618434605654, + "2": 0.4763147474995116 + }, + "micro_accuracy": { + "0": 0.7852272727272728, + "1": 0.7763671875, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9785961381668781, + "1": 0.9729908415213692, + "2": 0.8622817914940196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "39e0a49e02181978cf8ccf119128e3e11d4e37d65e7a71b5bc1fdff4e3a9b9f9" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6904296875, + "micro_accuracy_known": 0.803409090909091, + "macro_accuracy_all": 0.7455328017484341, + "macro_accuracy_known": 0.7804796518303919, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.78125, + "micro_accuracy_known": 0.78125, + "macro_accuracy_all": 0.8451665163273558, + "macro_accuracy_known": 0.8451665163273558, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.935546875, + "micro_accuracy_known": 0.935546875, + "macro_accuracy_all": 0.8824392458446987, + "macro_accuracy_known": 0.8824392458446987, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7455328017484341, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "precision": { + "0": 0.5531855500821018, + "1": 0.5941586316025778, + "2": 0.47314272371396204 + }, + "recall": { + "0": 0.7455328017484341, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "f1": { + "0": 0.4796255524076116, + "1": 0.5566152643229424, + "2": 0.4751092613473271 + }, + "micro_accuracy": { + "0": 0.6904296875, + "1": 0.78125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9737102335680159, + "1": 0.9749939611792631, + "2": 0.8842953741962183 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7804796518303919, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "precision": { + "0": 0.5818549080281932, + "1": 0.5941586316025778, + "2": 0.47314272371396204 + }, + "recall": { + "0": 0.7804796518303919, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "f1": { + "0": 0.516941391083468, + "1": 0.5566152643229424, + "2": 0.4751092613473271 + }, + "micro_accuracy": { + "0": 0.803409090909091, + "1": 0.78125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9777340176762319, + "1": 0.9749939611792631, + "2": 0.8842953741962183 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "b940db5d8d6cc07e40d06248f0590aa7807d78689b0bd05b6bc08de20af4685a" + } + } + }, + { + "backend": "torch", + "profile": "gamma", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5615234375, + "micro_accuracy_known": 0.6534090909090909, + "macro_accuracy_all": 0.6142377324722179, + "macro_accuracy_known": 0.6430301261818532, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.705078125, + "micro_accuracy_known": 0.705078125, + "macro_accuracy_all": 0.7690586762861187, + "macro_accuracy_known": 0.7690586762861187, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9013671875, + "micro_accuracy_known": 0.9013671875, + "macro_accuracy_all": 0.8453059858120473, + "macro_accuracy_known": 0.8453059858120473, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6142377324722179, + "1": 0.7690586762861187, + "2": 0.8453059858120473 + }, + "precision": { + "0": 0.3831822695633437, + "1": 0.456476598114529, + "2": 0.4323704148205619 + }, + "recall": { + "0": 0.6142377324722179, + "1": 0.7690586762861187, + "2": 0.8453059858120473 + }, + "f1": { + "0": 0.3013920882061196, + "1": 0.399159414905154, + "2": 0.4388522670270817 + }, + "micro_accuracy": { + "0": 0.5615234375, + "1": 0.705078125, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9805163111583765, + "1": 0.9782892494572161, + "2": 0.8344086074000754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6430301261818532, + "1": 0.7690586762861187, + "2": 0.8453059858120473 + }, + "precision": { + "0": 0.40666790416790416, + "1": 0.456476598114529, + "2": 0.4323704148205619 + }, + "recall": { + "0": 0.6430301261818532, + "1": 0.7690586762861187, + "2": 0.8453059858120473 + }, + "f1": { + "0": 0.3245318677292838, + "1": 0.399159414905154, + "2": 0.4388522670270817 + }, + "micro_accuracy": { + "0": 0.6534090909090909, + "1": 0.705078125, + "2": 0.9013671875 + }, + "theilU": { + "0": 0.9862090914492778, + "1": 0.9782892494572161, + "2": 0.8344086074000754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "ae0a3dcd403da27e10a627798bd968ee37fc9292a71eba51399e75d3ae760075" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6767578125, + "micro_accuracy_known": 0.7875, + "macro_accuracy_all": 0.7295103466647064, + "macro_accuracy_known": 0.7637061441646145, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7802734375, + "micro_accuracy_known": 0.7802734375, + "macro_accuracy_all": 0.8420738412346808, + "macro_accuracy_known": 0.8420738412346808, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8738380242442564, + "macro_accuracy_known": 0.8738380242442564, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8738380242442564 + }, + "precision": { + "0": 0.5314203976164109, + "1": 0.5867950942840812, + "2": 0.4870695136221742 + }, + "recall": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8738380242442564 + }, + "f1": { + "0": 0.45315629657657325, + "1": 0.5457626885494473, + "2": 0.4888728278137216 + }, + "micro_accuracy": { + "0": 0.6767578125, + "1": 0.7802734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9742895975077354, + "1": 0.9744925867275461, + "2": 0.8636921811065637 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8738380242442564 + }, + "precision": { + "0": 0.5599565842597202, + "1": 0.5867950942840812, + "2": 0.4870695136221742 + }, + "recall": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8738380242442564 + }, + "f1": { + "0": 0.48859279520091015, + "1": 0.5457626885494473, + "2": 0.4888728278137216 + }, + "micro_accuracy": { + "0": 0.7875, + "1": 0.7802734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.977083484952786, + "1": 0.9744925867275461, + "2": 0.8636921811065637 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "2e86f4611b731ca781edcfc4fb8c12e324607ef1f68c333c52c761f4ffc11ac4" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.693359375, + "micro_accuracy_known": 0.8068181818181818, + "macro_accuracy_all": 0.7475169287325611, + "macro_accuracy_known": 0.7825567847668999, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7880859375, + "micro_accuracy_known": 0.7880859375, + "macro_accuracy_all": 0.8591850348458744, + "macro_accuracy_known": 0.8591850348458744, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8761554797812316, + "macro_accuracy_known": 0.8761554797812316, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7475169287325611, + "1": 0.8591850348458744, + "2": 0.8761554797812316 + }, + "precision": { + "0": 0.5504761904761905, + "1": 0.6044072594072594, + "2": 0.5064686502228765 + }, + "recall": { + "0": 0.7475169287325611, + "1": 0.8591850348458744, + "2": 0.8761554797812316 + }, + "f1": { + "0": 0.4750336819989257, + "1": 0.5719363697538292, + "2": 0.5085626120950416 + }, + "micro_accuracy": { + "0": 0.693359375, + "1": 0.7880859375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9742632627716996, + "1": 0.9740924117631742, + "2": 0.8730894877122698 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7825567847668999, + "1": 0.8591850348458744, + "2": 0.8761554797812316 + }, + "precision": { + "0": 0.5790183943613546, + "1": 0.6044072594072594, + "2": 0.5064686502228765 + }, + "recall": { + "0": 0.7825567847668999, + "1": 0.8591850348458744, + "2": 0.8761554797812316 + }, + "f1": { + "0": 0.5117580970170622, + "1": 0.5719363697538292, + "2": 0.5085626120950416 + }, + "micro_accuracy": { + "0": 0.8068181818181818, + "1": 0.7880859375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9773933524395068, + "1": 0.9740924117631742, + "2": 0.8730894877122698 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "7cbad6438283e87558827da171caf8eba2994e557c7463e160b686d2a7161a08" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6767578125, + "micro_accuracy_known": 0.7875, + "macro_accuracy_all": 0.7295103466647064, + "macro_accuracy_known": 0.7637061441646145, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7802734375, + "micro_accuracy_known": 0.7802734375, + "macro_accuracy_all": 0.8420738412346808, + "macro_accuracy_known": 0.8420738412346808, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.92578125, + "micro_accuracy_known": 0.92578125, + "macro_accuracy_all": 0.871781900457212, + "macro_accuracy_known": 0.871781900457212, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.871781900457212 + }, + "precision": { + "0": 0.5307644801850099, + "1": 0.5851717239875135, + "2": 0.4549268070221989 + }, + "recall": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.871781900457212 + }, + "f1": { + "0": 0.45239147392830564, + "1": 0.5439742699115127, + "2": 0.4617406838591272 + }, + "micro_accuracy": { + "0": 0.6767578125, + "1": 0.7802734375, + "2": 0.92578125 + }, + "theilU": { + "0": 0.9733374322783351, + "1": 0.9736734244458565, + "2": 0.8573981167641367 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.871781900457212 + }, + "precision": { + "0": 0.5572348547262042, + "1": 0.5851717239875135, + "2": 0.4549268070221989 + }, + "recall": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.871781900457212 + }, + "f1": { + "0": 0.4860776314779269, + "1": 0.5439742699115127, + "2": 0.4617406838591272 + }, + "micro_accuracy": { + "0": 0.7875, + "1": 0.7802734375, + "2": 0.92578125 + }, + "theilU": { + "0": 0.9778933973910489, + "1": 0.9736734244458565, + "2": 0.8573981167641367 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "be43d3883ff28d7648642b848cf2e72894ba88d4866350891d1aca082fba8230" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6904296875, + "micro_accuracy_known": 0.803409090909091, + "macro_accuracy_all": 0.7408834295617485, + "macro_accuracy_known": 0.7756123403224554, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7841796875, + "micro_accuracy_known": 0.7841796875, + "macro_accuracy_all": 0.8469628126236521, + "macro_accuracy_known": 0.8469628126236521, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.875772579178032, + "macro_accuracy_known": 0.875772579178032, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7408834295617485, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "precision": { + "0": 0.5516256157635467, + "1": 0.5975857725857726, + "2": 0.47155516926017454 + }, + "recall": { + "0": 0.7408834295617485, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "f1": { + "0": 0.47342150107639996, + "1": 0.5600088207579762, + "2": 0.47237289123012827 + }, + "micro_accuracy": { + "0": 0.6904296875, + "1": 0.7841796875, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9741326742333372, + "1": 0.9752980882660742, + "2": 0.8808206854269369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7756123403224554, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "precision": { + "0": 0.580221763795771, + "1": 0.5975857725857726, + "2": 0.47155516926017454 + }, + "recall": { + "0": 0.7756123403224554, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "f1": { + "0": 0.5100264952854605, + "1": 0.5600088207579762, + "2": 0.47237289123012827 + }, + "micro_accuracy": { + "0": 0.803409090909091, + "1": 0.7841796875, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.977581297969741, + "1": 0.9752980882660742, + "2": 0.8808206854269369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "74ca1c35bc9fc34310c1e7a8ee68365644ae4c1d5a2538a0c34777eb01ff5b13" + } + } + }, + { + "backend": "torch", + "profile": "gaussian_noise", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6064453125, + "micro_accuracy_known": 0.7056818181818182, + "macro_accuracy_all": 0.6570185437428171, + "macro_accuracy_known": 0.6878162879807617, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7275390625, + "micro_accuracy_known": 0.7275390625, + "macro_accuracy_all": 0.8009490997750077, + "macro_accuracy_known": 0.8009490997750077, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9111328125, + "micro_accuracy_known": 0.9111328125, + "macro_accuracy_all": 0.8513848870135886, + "macro_accuracy_known": 0.8513848870135886, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6570185437428171, + "1": 0.8009490997750077, + "2": 0.8513848870135886 + }, + "precision": { + "0": 0.419501287001287, + "1": 0.48706946289363867, + "2": 0.4309082949296677 + }, + "recall": { + "0": 0.6570185437428171, + "1": 0.8009490997750077, + "2": 0.8513848870135886 + }, + "f1": { + "0": 0.3396361173544347, + "1": 0.43771174773832555, + "2": 0.44206823612927365 + }, + "micro_accuracy": { + "0": 0.6064453125, + "1": 0.7275390625, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9815691113390748, + "1": 0.980693457451239, + "2": 0.8500065528057964 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6878162879807617, + "1": 0.8009490997750077, + "2": 0.8513848870135886 + }, + "precision": { + "0": 0.4453095238095239, + "1": 0.48706946289363867, + "2": 0.4309082949296677 + }, + "recall": { + "0": 0.6878162879807617, + "1": 0.8009490997750077, + "2": 0.8513848870135886 + }, + "f1": { + "0": 0.3664652136961781, + "1": 0.43771174773832555, + "2": 0.44206823612927365 + }, + "micro_accuracy": { + "0": 0.7056818181818182, + "1": 0.7275390625, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9862999206709946, + "1": 0.980693457451239, + "2": 0.8500065528057964 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "e71935d8594ce7e3c1bb92ef2d494e75f0de26a723d60cf6c613d678827bf892" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.685546875, + "micro_accuracy_known": 0.7977272727272727, + "macro_accuracy_all": 0.7374351993853172, + "macro_accuracy_known": 0.7720024743565039, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.783203125, + "micro_accuracy_known": 0.783203125, + "macro_accuracy_all": 0.8497848690302815, + "macro_accuracy_known": 0.8497848690302815, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9326171875, + "micro_accuracy_known": 0.9326171875, + "macro_accuracy_all": 0.8717584528209592, + "macro_accuracy_known": 0.8717584528209592, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7374351993853172, + "1": 0.8497848690302815, + "2": 0.8717584528209592 + }, + "precision": { + "0": 0.5434875510962468, + "1": 0.585491616074715, + "2": 0.5462405993973666 + }, + "recall": { + "0": 0.7374351993853172, + "1": 0.8497848690302815, + "2": 0.8717584528209592 + }, + "f1": { + "0": 0.46157906832629975, + "1": 0.541951872534005, + "2": 0.5278130382928162 + }, + "micro_accuracy": { + "0": 0.685546875, + "1": 0.783203125, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.9767870804136543, + "1": 0.9802727288675025, + "2": 0.8655864765618194 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7720024743565039, + "1": 0.8497848690302815, + "2": 0.8717584528209592 + }, + "precision": { + "0": 0.5748337245696401, + "1": 0.585491616074715, + "2": 0.5462405993973666 + }, + "recall": { + "0": 0.7720024743565039, + "1": 0.8497848690302815, + "2": 0.8717584528209592 + }, + "f1": { + "0": 0.49939647126479614, + "1": 0.541951872534005, + "2": 0.5278130382928162 + }, + "micro_accuracy": { + "0": 0.7977272727272727, + "1": 0.783203125, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.9792087415340989, + "1": 0.9802727288675025, + "2": 0.8655864765618194 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f725f398d16e76c789a0090b76a1e451670960d331e57bd14852370dafcdffb6" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.703125, + "micro_accuracy_known": 0.8181818181818182, + "macro_accuracy_all": 0.7539835338440992, + "macro_accuracy_known": 0.7893265119930414, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.79296875, + "micro_accuracy_known": 0.79296875, + "macro_accuracy_all": 0.8651618758707033, + "macro_accuracy_known": 0.8651618758707033, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8751481575271653, + "macro_accuracy_known": 0.8751481575271653, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7539835338440992, + "1": 0.8651618758707033, + "2": 0.8751481575271653 + }, + "precision": { + "0": 0.5672410922410921, + "1": 0.6088815991321016, + "2": 0.5078167955033551 + }, + "recall": { + "0": 0.7539835338440992, + "1": 0.8651618758707033, + "2": 0.8751481575271653 + }, + "f1": { + "0": 0.4876931989075745, + "1": 0.5734083180440451, + "2": 0.4913008766073878 + }, + "micro_accuracy": { + "0": 0.703125, + "1": 0.79296875, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9758840928856128, + "1": 0.9774621379883017, + "2": 0.8815016691622108 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7893265119930414, + "1": 0.8651618758707033, + "2": 0.8751481575271653 + }, + "precision": { + "0": 0.596999825571254, + "1": 0.6088815991321016, + "2": 0.5078167955033551 + }, + "recall": { + "0": 0.7893265119930414, + "1": 0.8651618758707033, + "2": 0.8751481575271653 + }, + "f1": { + "0": 0.5258695150590312, + "1": 0.5734083180440451, + "2": 0.4913008766073878 + }, + "micro_accuracy": { + "0": 0.8181818181818182, + "1": 0.79296875, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9790873150823245, + "1": 0.9774621379883017, + "2": 0.8815016691622108 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "01e2e41a96566ca4a8c288f736a22b38cbc27dbbebc9ebd2710b93997f6befcd" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.685546875, + "micro_accuracy_known": 0.7977272727272727, + "macro_accuracy_all": 0.7374351993853172, + "macro_accuracy_known": 0.7720024743565039, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7841796875, + "micro_accuracy_known": 0.7841796875, + "macro_accuracy_all": 0.8514515356969482, + "macro_accuracy_known": 0.8514515356969482, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8704905827739597, + "macro_accuracy_known": 0.8704905827739597, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7374351993853172, + "1": 0.8514515356969482, + "2": 0.8704905827739597 + }, + "precision": { + "0": 0.542787037037037, + "1": 0.5908045577996316, + "2": 0.5296432768315602 + }, + "recall": { + "0": 0.7374351993853172, + "1": 0.8514515356969482, + "2": 0.8704905827739597 + }, + "f1": { + "0": 0.46078640448288666, + "1": 0.5473574593213641, + "2": 0.517960752732796 + }, + "micro_accuracy": { + "0": 0.685546875, + "1": 0.7841796875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9768010992909993, + "1": 0.9785360316052701, + "2": 0.8616391329814392 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7720024743565039, + "1": 0.8514515356969482, + "2": 0.8704905827739597 + }, + "precision": { + "0": 0.5739863547758285, + "1": 0.5908045577996316, + "2": 0.5296432768315602 + }, + "recall": { + "0": 0.7720024743565039, + "1": 0.8514515356969482, + "2": 0.8704905827739597 + }, + "f1": { + "0": 0.4984180514240615, + "1": 0.5473574593213641, + "2": 0.517960752732796 + }, + "micro_accuracy": { + "0": 0.7977272727272727, + "1": 0.7841796875, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9796779887356367, + "1": 0.9785360316052701, + "2": 0.8616391329814392 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "849195739344f7b7f691c625f65d4496b5f978b447a82c1d3716c41ce9720495" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.69921875, + "micro_accuracy_known": 0.8136363636363636, + "macro_accuracy_all": 0.7461062535787594, + "macro_accuracy_known": 0.7810799842152637, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7890625, + "micro_accuracy_known": 0.7890625, + "macro_accuracy_all": 0.8538655795744067, + "macro_accuracy_known": 0.8538655795744067, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8745254487704887, + "macro_accuracy_known": 0.8745254487704887, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7461062535787594, + "1": 0.8538655795744067, + "2": 0.8745254487704887 + }, + "precision": { + "0": 0.5627232142857141, + "1": 0.6025671475486746, + "2": 0.4888507960286553 + }, + "recall": { + "0": 0.7461062535787594, + "1": 0.8538655795744067, + "2": 0.8745254487704887 + }, + "f1": { + "0": 0.48134152182268364, + "1": 0.5629103383961787, + "2": 0.47319868251346003 + }, + "micro_accuracy": { + "0": 0.69921875, + "1": 0.7890625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9757535043472505, + "1": 0.9781060555048576, + "2": 0.887834112188216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7810799842152637, + "1": 0.8538655795744067, + "2": 0.8745254487704887 + }, + "precision": { + "0": 0.5920519480519479, + "1": 0.6025671475486746, + "2": 0.4888507960286553 + }, + "recall": { + "0": 0.7810799842152637, + "1": 0.8538655795744067, + "2": 0.8745254487704887 + }, + "f1": { + "0": 0.5187853310989861, + "1": 0.5629103383961787, + "2": 0.47319868251346003 + }, + "micro_accuracy": { + "0": 0.8136363636363636, + "1": 0.7890625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9789345953758336, + "1": 0.9781060555048576, + "2": 0.887834112188216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f47dc117b157250ad6c50b33e07db8ebbc57776598f524bb06f1837e3c8ab363" + } + } + }, + { + "backend": "torch", + "profile": "padded_scale", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6083984375, + "micro_accuracy_known": 0.7079545454545455, + "macro_accuracy_all": 0.6669499186879391, + "macro_accuracy_known": 0.6982131961264363, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.740234375, + "micro_accuracy_known": 0.740234375, + "macro_accuracy_all": 0.8163789577060379, + "macro_accuracy_known": 0.8163789577060379, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8479662801440404, + "macro_accuracy_known": 0.8479662801440404, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6669499186879391, + "1": 0.8163789577060379, + "2": 0.8479662801440404 + }, + "precision": { + "0": 0.4364708703994419, + "1": 0.5067439148326214, + "2": 0.4842115297152765 + }, + "recall": { + "0": 0.6669499186879391, + "1": 0.8163789577060379, + "2": 0.8479662801440404 + }, + "f1": { + "0": 0.3532036739574734, + "1": 0.4547825015964639, + "2": 0.4843791657478431 + }, + "micro_accuracy": { + "0": 0.6083984375, + "1": 0.740234375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9816422474131364, + "1": 0.9800040672120581, + "2": 0.87391363290345 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6982131961264363, + "1": 0.8163789577060379, + "2": 0.8479662801440404 + }, + "precision": { + "0": 0.4633005721668513, + "1": 0.5067439148326214, + "2": 0.4842115297152765 + }, + "recall": { + "0": 0.6982131961264363, + "1": 0.8163789577060379, + "2": 0.8479662801440404 + }, + "f1": { + "0": 0.3815582044617631, + "1": 0.4547825015964639, + "2": 0.4843791657478431 + }, + "micro_accuracy": { + "0": 0.7079545454545455, + "1": 0.740234375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9852723215874596, + "1": 0.9800040672120581, + "2": 0.87391363290345 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "cbb6f01b4d836722ca0f7d2ed3eff92bc45fb1a439c532acc44b921362de319a" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7001953125, + "micro_accuracy_known": 0.8147727272727273, + "macro_accuracy_all": 0.7667568738562455, + "macro_accuracy_known": 0.802698602318257, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.798828125, + "micro_accuracy_known": 0.798828125, + "macro_accuracy_all": 0.8746073406102853, + "macro_accuracy_known": 0.8746073406102853, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.947265625, + "micro_accuracy_known": 0.947265625, + "macro_accuracy_all": 0.8888149192892535, + "macro_accuracy_known": 0.8888149192892535, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7667568738562455, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "precision": { + "0": 0.5807024505708717, + "1": 0.6306489543157549, + "2": 0.5383882427898227 + }, + "recall": { + "0": 0.7667568738562455, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "f1": { + "0": 0.504696621354642, + "1": 0.5965465365721195, + "2": 0.5418149517899491 + }, + "micro_accuracy": { + "0": 0.7001953125, + "1": 0.798828125, + "2": 0.947265625 + }, + "theilU": { + "0": 0.9760580484569257, + "1": 0.9784618583466062, + "2": 0.8922071716588353 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.802698602318257, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "precision": { + "0": 0.6066511702004402, + "1": 0.6306489543157549, + "2": 0.5383882427898227 + }, + "recall": { + "0": 0.802698602318257, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "f1": { + "0": 0.5409587030055907, + "1": 0.5965465365721195, + "2": 0.5418149517899491 + }, + "micro_accuracy": { + "0": 0.8147727272727273, + "1": 0.798828125, + "2": 0.947265625 + }, + "theilU": { + "0": 0.9795255977161335, + "1": 0.9784618583466062, + "2": 0.8922071716588353 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d3c685b1f5f33848c122d91eaa2487e4ac1b7577d4b907ba24fe9bdd2493289a" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.720703125, + "micro_accuracy_known": 0.8386363636363636, + "macro_accuracy_all": 0.7868714438529836, + "macro_accuracy_known": 0.8237560427835922, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.80859375, + "micro_accuracy_known": 0.80859375, + "macro_accuracy_all": 0.8859782374811823, + "macro_accuracy_known": 0.8859782374811823, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9482421875, + "micro_accuracy_known": 0.9482421875, + "macro_accuracy_all": 0.8924122215773433, + "macro_accuracy_known": 0.8924122215773433, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7868714438529836, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "precision": { + "0": 0.6029098124098125, + "1": 0.658480184510919, + "2": 0.4869479214022333 + }, + "recall": { + "0": 0.7868714438529836, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "f1": { + "0": 0.5327519750772313, + "1": 0.631791548560156, + "2": 0.4866169641277515 + }, + "micro_accuracy": { + "0": 0.720703125, + "1": 0.80859375, + "2": 0.9482421875 + }, + "theilU": { + "0": 0.9763493466551544, + "1": 0.978439571696028, + "2": 0.9049635740626394 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8237560427835922, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "precision": { + "0": 0.6307667448292449, + "1": 0.658480184510919, + "2": 0.4869479214022333 + }, + "recall": { + "0": 0.8237560427835922, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "f1": { + "0": 0.5724425923446524, + "1": 0.631791548560156, + "2": 0.4866169641277515 + }, + "micro_accuracy": { + "0": 0.8386363636363636, + "1": 0.80859375, + "2": 0.9482421875 + }, + "theilU": { + "0": 0.9798662629528586, + "1": 0.978439571696028, + "2": 0.9049635740626394 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "cc9c41b9c6a025b694d739c857670b1bf102b27bc6900ce26de38004610f0670" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7001953125, + "micro_accuracy_known": 0.8147727272727273, + "macro_accuracy_all": 0.7667568738562455, + "macro_accuracy_known": 0.802698602318257, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.798828125, + "micro_accuracy_known": 0.798828125, + "macro_accuracy_all": 0.8746073406102853, + "macro_accuracy_known": 0.8746073406102853, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9462890625, + "micro_accuracy_known": 0.9462890625, + "macro_accuracy_all": 0.8885998655258126, + "macro_accuracy_known": 0.8885998655258126, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7667568738562455, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "precision": { + "0": 0.5827471775095014, + "1": 0.6335959120462022, + "2": 0.5453938590940303 + }, + "recall": { + "0": 0.7667568738562455, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "f1": { + "0": 0.506324674971915, + "1": 0.5992704933601202, + "2": 0.5555219206262816 + }, + "micro_accuracy": { + "0": 0.7001953125, + "1": 0.798828125, + "2": 0.9462890625 + }, + "theilU": { + "0": 0.9752153553508828, + "1": 0.9778290861722726, + "2": 0.8896163281281433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.802698602318257, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "precision": { + "0": 0.6066511702004402, + "1": 0.6335959120462022, + "2": 0.5453938590940303 + }, + "recall": { + "0": 0.802698602318257, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "f1": { + "0": 0.5409587030055907, + "1": 0.5992704933601202, + "2": 0.5555219206262816 + }, + "micro_accuracy": { + "0": 0.8147727272727273, + "1": 0.798828125, + "2": 0.9462890625 + }, + "theilU": { + "0": 0.9795255977161335, + "1": 0.9778290861722726, + "2": 0.8896163281281433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d325bab19a8963d07437c39bac5eae2e0c4edec1351c633286bca0d9a5fbe889" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7138671875, + "micro_accuracy_known": 0.8306818181818182, + "macro_accuracy_all": 0.7763348411522016, + "macro_accuracy_known": 0.8127255368312111, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.80078125, + "micro_accuracy_known": 0.80078125, + "macro_accuracy_all": 0.8750309070338517, + "macro_accuracy_known": 0.8750309070338517, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.951171875, + "micro_accuracy_known": 0.951171875, + "macro_accuracy_all": 0.8930573828676659, + "macro_accuracy_known": 0.8930573828676659, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7763348411522016, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "precision": { + "0": 0.5956685863274311, + "1": 0.6400935973500224, + "2": 0.4878422547669985 + }, + "recall": { + "0": 0.7763348411522016, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "f1": { + "0": 0.5213717799875506, + "1": 0.6078415156177399, + "2": 0.4872362891815405 + }, + "micro_accuracy": { + "0": 0.7138671875, + "1": 0.80078125, + "2": 0.951171875 + }, + "theilU": { + "0": 0.9759950984057112, + "1": 0.9794779290735068, + "2": 0.911268120895833 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8127255368312111, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "precision": { + "0": 0.6230166189282731, + "1": 0.6400935973500224, + "2": 0.4878422547669985 + }, + "recall": { + "0": 0.8127255368312111, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "f1": { + "0": 0.5598373945920889, + "1": 0.6078415156177399, + "2": 0.4872362891815405 + }, + "micro_accuracy": { + "0": 0.8306818181818182, + "1": 0.80078125, + "2": 0.951171875 + }, + "theilU": { + "0": 0.9794519793613711, + "1": 0.9794779290735068, + "2": 0.911268120895833 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "22849d340ca95225e3491f5ab4f89bb3dd9fb0293629f209a41f7ed8dcab0279" + } + } + }, + { + "backend": "torch", + "profile": "mild_blur", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5732421875, + "micro_accuracy_known": 0.6670454545454545, + "macro_accuracy_all": 0.6217608361461465, + "macro_accuracy_known": 0.6509058753404972, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.716796875, + "micro_accuracy_known": 0.716796875, + "macro_accuracy_all": 0.7760047568204345, + "macro_accuracy_known": 0.7760047568204345, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90625, + "micro_accuracy_known": 0.90625, + "macro_accuracy_all": 0.8477748787805467, + "macro_accuracy_known": 0.8477748787805467, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6217608361461465, + "1": 0.7760047568204345, + "2": 0.8477748787805467 + }, + "precision": { + "0": 0.3923747042887668, + "1": 0.4729625378561548, + "2": 0.45276748958646207 + }, + "recall": { + "0": 0.6217608361461465, + "1": 0.7760047568204345, + "2": 0.8477748787805467 + }, + "f1": { + "0": 0.3098286263224549, + "1": 0.4144457423971506, + "2": 0.4602272886546586 + }, + "micro_accuracy": { + "0": 0.5732421875, + "1": 0.716796875, + "2": 0.90625 + }, + "theilU": { + "0": 0.9808773004478276, + "1": 0.978205854812268, + "2": 0.8352572065482408 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6509058753404972, + "1": 0.7760047568204345, + "2": 0.8477748787805467 + }, + "precision": { + "0": 0.4156998450267681, + "1": 0.4729625378561548, + "2": 0.45276748958646207 + }, + "recall": { + "0": 0.6509058753404972, + "1": 0.7760047568204345, + "2": 0.8477748787805467 + }, + "f1": { + "0": 0.33323086463322443, + "1": 0.4144457423971506, + "2": 0.4602272886546586 + }, + "micro_accuracy": { + "0": 0.6670454545454545, + "1": 0.716796875, + "2": 0.90625 + }, + "theilU": { + "0": 0.9865921099044167, + "1": 0.978205854812268, + "2": 0.8352572065482408 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "41ca22bea758197a8db0b33d9b5a455f400d67e108804f682da942e29a326654" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.677734375, + "micro_accuracy_known": 0.7886363636363637, + "macro_accuracy_all": 0.7337137504949759, + "macro_accuracy_known": 0.7681065825494279, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.83885455051539, + "macro_accuracy_known": 0.83885455051539, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9306640625, + "micro_accuracy_known": 0.9306640625, + "macro_accuracy_all": 0.8745362305987369, + "macro_accuracy_known": 0.8745362305987369, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "precision": { + "0": 0.5321559536906071, + "1": 0.5786134777401153, + "2": 0.48625507832424 + }, + "recall": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "f1": { + "0": 0.4559155966904529, + "1": 0.538010966674918, + "2": 0.488163755100861 + }, + "micro_accuracy": { + "0": 0.677734375, + "1": 0.77734375, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.9753369172766678, + "1": 0.9746607413592359, + "2": 0.86322146300684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "precision": { + "0": 0.5605302905475915, + "1": 0.5786134777401153, + "2": 0.48625507832424 + }, + "recall": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "f1": { + "0": 0.4915588181246244, + "1": 0.538010966674918, + "2": 0.488163755100861 + }, + "micro_accuracy": { + "0": 0.7886363636363637, + "1": 0.77734375, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.9781961093647314, + "1": 0.9746607413592359, + "2": 0.86322146300684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "6ef80ff81f1a7894b45c5b73a90e67e423afd814188490a10feb6ab0badf8069" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6962890625, + "micro_accuracy_known": 0.8102272727272727, + "macro_accuracy_all": 0.7528041989452045, + "macro_accuracy_known": 0.7880918957707609, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7880859375, + "micro_accuracy_known": 0.7880859375, + "macro_accuracy_all": 0.8586244742853139, + "macro_accuracy_known": 0.8586244742853139, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8755575254145912, + "macro_accuracy_known": 0.8755575254145912, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7528041989452045, + "1": 0.8586244742853139, + "2": 0.8755575254145912 + }, + "precision": { + "0": 0.5511089367253751, + "1": 0.60501332001332, + "2": 0.5056457479673166 + }, + "recall": { + "0": 0.7528041989452045, + "1": 0.8586244742853139, + "2": 0.8755575254145912 + }, + "f1": { + "0": 0.478667224092499, + "1": 0.5719566879373098, + "2": 0.5074951804108911 + }, + "micro_accuracy": { + "0": 0.6962890625, + "1": 0.7880859375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9755304799098776, + "1": 0.9747166499600433, + "2": 0.8723901240942663 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7880918957707609, + "1": 0.8586244742853139, + "2": 0.8755575254145912 + }, + "precision": { + "0": 0.5794760197986004, + "1": 0.60501332001332, + "2": 0.5056457479673166 + }, + "recall": { + "0": 0.7880918957707609, + "1": 0.8586244742853139, + "2": 0.8755575254145912 + }, + "f1": { + "0": 0.5156607903768262, + "1": 0.5719566879373098, + "2": 0.5074951804108911 + }, + "micro_accuracy": { + "0": 0.8102272727272727, + "1": 0.7880859375, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9787631407810776, + "1": 0.9747166499600433, + "2": 0.8723901240942663 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "01884b8962cc9ab966540e2d837d4c7da0ec65798cd091c6ef0a267dcd27922b" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.677734375, + "micro_accuracy_known": 0.7886363636363637, + "macro_accuracy_all": 0.7337137504949759, + "macro_accuracy_known": 0.7681065825494279, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.83885455051539, + "macro_accuracy_known": 0.83885455051539, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9287109375, + "micro_accuracy_known": 0.9287109375, + "macro_accuracy_all": 0.874106123071855, + "macro_accuracy_known": 0.874106123071855, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "precision": { + "0": 0.5339180594975297, + "1": 0.5815167532272796, + "2": 0.47167273756810363 + }, + "recall": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "f1": { + "0": 0.4573013583825211, + "1": 0.5405950591250958, + "2": 0.4792877241207191 + }, + "micro_accuracy": { + "0": 0.677734375, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9736912039665129, + "1": 0.9732162767702212, + "2": 0.8610713150038116 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "precision": { + "0": 0.5605302905475915, + "1": 0.5815167532272796, + "2": 0.47167273756810363 + }, + "recall": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "f1": { + "0": 0.4915588181246244, + "1": 0.5405950591250958, + "2": 0.4792877241207191 + }, + "micro_accuracy": { + "0": 0.7886363636363637, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9781961093647314, + "1": 0.9732162767702212, + "2": 0.8610713150038116 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4f934d1618e378ffa627b23c2ac65e69844b546ebeabf8a9ff3dc1abe654cbb0" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6943359375, + "micro_accuracy_known": 0.8079545454545455, + "macro_accuracy_all": 0.7469998871707434, + "macro_accuracy_known": 0.7820155068818719, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.78515625, + "micro_accuracy_known": 0.78515625, + "macro_accuracy_all": 0.8475133631742028, + "macro_accuracy_known": 0.8475133631742028, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8762274410949502, + "macro_accuracy_known": 0.8762274410949502, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7469998871707434, + "1": 0.8475133631742028, + "2": 0.8762274410949502 + }, + "precision": { + "0": 0.5503656752803511, + "1": 0.5955039230823984, + "2": 0.4710286751638461 + }, + "recall": { + "0": 0.7469998871707434, + "1": 0.8475133631742028, + "2": 0.8762274410949502 + }, + "f1": { + "0": 0.47623388901721003, + "1": 0.5585124530677456, + "2": 0.4717937931035682 + }, + "micro_accuracy": { + "0": 0.6943359375, + "1": 0.78515625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9755159345941234, + "1": 0.9763699588725825, + "2": 0.8824764932299821 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7820155068818719, + "1": 0.8475133631742028, + "2": 0.8762274410949502 + }, + "precision": { + "0": 0.5785969387755102, + "1": 0.5955039230823984, + "2": 0.4710286751638461 + }, + "recall": { + "0": 0.7820155068818719, + "1": 0.8475133631742028, + "2": 0.8762274410949502 + }, + "f1": { + "0": 0.5129236736305953, + "1": 0.5585124530677456, + "2": 0.4717937931035682 + }, + "micro_accuracy": { + "0": 0.8079545454545455, + "1": 0.78515625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9790867956707949, + "1": 0.9763699588725825, + "2": 0.8824764932299821 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "fa64b5c9c7801925d8369b5a78606c53a0cf28dae7900891a62afd32acfb2327" + } + } + }, + { + "backend": "torch", + "profile": "padded_rotation", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.626953125, + "micro_accuracy_known": 0.7295454545454545, + "macro_accuracy_all": 0.6894825951188874, + "macro_accuracy_known": 0.7218020917650853, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.75390625, + "micro_accuracy_known": 0.75390625, + "macro_accuracy_all": 0.8186366449343132, + "macro_accuracy_known": 0.8186366449343132, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9375, + "micro_accuracy_known": 0.9375, + "macro_accuracy_all": 0.8645416888485151, + "macro_accuracy_known": 0.8645416888485151, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6894825951188874, + "1": 0.8186366449343132, + "2": 0.8645416888485151 + }, + "precision": { + "0": 0.4509606109053623, + "1": 0.5272554605887939, + "2": 0.5304839392941253 + }, + "recall": { + "0": 0.6894825951188874, + "1": 0.8186366449343132, + "2": 0.8645416888485151 + }, + "f1": { + "0": 0.3704922818453067, + "1": 0.4730675278216979, + "2": 0.5146610023586723 + }, + "micro_accuracy": { + "0": 0.626953125, + "1": 0.75390625, + "2": 0.9375 + }, + "theilU": { + "0": 0.9864696739007237, + "1": 0.9838648937298985, + "2": 0.8875129848601512 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7218020917650853, + "1": 0.8186366449343132, + "2": 0.8645416888485151 + }, + "precision": { + "0": 0.4760108754294801, + "1": 0.5272554605887939, + "2": 0.5304839392941253 + }, + "recall": { + "0": 0.7218020917650853, + "1": 0.8186366449343132, + "2": 0.8645416888485151 + }, + "f1": { + "0": 0.3985048155665983, + "1": 0.4730675278216979, + "2": 0.5146610023586723 + }, + "micro_accuracy": { + "0": 0.7295454545454545, + "1": 0.75390625, + "2": 0.9375 + }, + "theilU": { + "0": 0.9888442520276529, + "1": 0.9838648937298985, + "2": 0.8875129848601512 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8d5e8e5f5ce18ec2325e7af134d0478a8d94f3a0eb3ebdd247cd0e401fc84092" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.712890625, + "micro_accuracy_known": 0.8295454545454546, + "macro_accuracy_all": 0.7719123421401505, + "macro_accuracy_known": 0.80809573317797, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8134765625, + "micro_accuracy_known": 0.8134765625, + "macro_accuracy_all": 0.8844011564041011, + "macro_accuracy_known": 0.8844011564041011, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.955078125, + "micro_accuracy_known": 0.955078125, + "macro_accuracy_all": 0.8991172880821792, + "macro_accuracy_known": 0.8991172880821792, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8991172880821792 + }, + "precision": { + "0": 0.5971263429003927, + "1": 0.650544413167566, + "2": 0.7230667004397573 + }, + "recall": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8991172880821792 + }, + "f1": { + "0": 0.5220924268702504, + "1": 0.6175385884403772, + "2": 0.7301143161018682 + }, + "micro_accuracy": { + "0": 0.712890625, + "1": 0.8134765625, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9796983137342548, + "1": 0.9853200869428569, + "2": 0.9004091093524909 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8991172880821792 + }, + "precision": { + "0": 0.6199776006843611, + "1": 0.650544413167566, + "2": 0.7230667004397573 + }, + "recall": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8991172880821792 + }, + "f1": { + "0": 0.5567898703212179, + "1": 0.6175385884403772, + "2": 0.7301143161018682 + }, + "micro_accuracy": { + "0": 0.8295454545454546, + "1": 0.8134765625, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9818061947009191, + "1": 0.9853200869428569, + "2": 0.9004091093524909 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5800310a5af4f08ead238feb7387f8a386306fd4c73751066ed4daf5f582385e" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.728515625, + "micro_accuracy_known": 0.8477272727272728, + "macro_accuracy_all": 0.7858937788827812, + "macro_accuracy_known": 0.8227325497679115, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8193359375, + "micro_accuracy_known": 0.8193359375, + "macro_accuracy_all": 0.8938961058990507, + "macro_accuracy_known": 0.8938961058990507, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.955078125, + "micro_accuracy_known": 0.955078125, + "macro_accuracy_all": 0.8939163424557017, + "macro_accuracy_known": 0.8939163424557017, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7858937788827812, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "precision": { + "0": 0.6238971458720955, + "1": 0.6953400558572973, + "2": 0.5980668832508124 + }, + "recall": { + "0": 0.7858937788827812, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "f1": { + "0": 0.550893852568599, + "1": 0.667193195303168, + "2": 0.5989997589031988 + }, + "micro_accuracy": { + "0": 0.728515625, + "1": 0.8193359375, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9785270264033544, + "1": 0.9794440649580853, + "2": 0.9080512895705167 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8227325497679115, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "precision": { + "0": 0.6489564935604769, + "1": 0.6953400558572973, + "2": 0.5980668832508124 + }, + "recall": { + "0": 0.8227325497679115, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "f1": { + "0": 0.5893105177635807, + "1": 0.667193195303168, + "2": 0.5989997589031988 + }, + "micro_accuracy": { + "0": 0.8477272727272728, + "1": 0.8193359375, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9804364063593483, + "1": 0.9794440649580853, + "2": 0.9080512895705167 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "a4fe4f9c8227d403646e89fbd3d15e5e9d3da49117101977b3ef906a82db17b1" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.712890625, + "micro_accuracy_known": 0.8295454545454546, + "macro_accuracy_all": 0.7719123421401505, + "macro_accuracy_known": 0.80809573317797, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8134765625, + "micro_accuracy_known": 0.8134765625, + "macro_accuracy_all": 0.8844011564041011, + "macro_accuracy_known": 0.8844011564041011, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.955078125, + "micro_accuracy_known": 0.955078125, + "macro_accuracy_all": 0.8992320898577799, + "macro_accuracy_known": 0.8992320898577799, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8992320898577799 + }, + "precision": { + "0": 0.5946379820193863, + "1": 0.6467656922886267, + "2": 0.7209311146140608 + }, + "recall": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8992320898577799 + }, + "f1": { + "0": 0.51975409950049, + "1": 0.6133830868572094, + "2": 0.7285496407376173 + }, + "micro_accuracy": { + "0": 0.712890625, + "1": 0.8134765625, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9802809101307122, + "1": 0.9862804202730304, + "2": 0.9010705188644093 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8992320898577799 + }, + "precision": { + "0": 0.6172370258644769, + "1": 0.6467656922886267, + "2": 0.7209311146140608 + }, + "recall": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8992320898577799 + }, + "f1": { + "0": 0.5540617360299274, + "1": 0.6133830868572094, + "2": 0.7285496407376173 + }, + "micro_accuracy": { + "0": 0.8295454545454546, + "1": 0.8134765625, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9824875251743693, + "1": 0.9862804202730304, + "2": 0.9010705188644093 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d11300eb48e6fcd1274f8609c9a5bdcb71f3bfc46c62a08a90a3689886320de6" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.724609375, + "micro_accuracy_known": 0.8431818181818181, + "macro_accuracy_all": 0.7816133790799933, + "macro_accuracy_known": 0.8182515062243679, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8154296875, + "micro_accuracy_known": 0.8154296875, + "macro_accuracy_all": 0.886118328121273, + "macro_accuracy_known": 0.886118328121273, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9560546875, + "micro_accuracy_known": 0.9560546875, + "macro_accuracy_all": 0.8941313962191426, + "macro_accuracy_known": 0.8941313962191426, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7816133790799933, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "precision": { + "0": 0.6198174189850105, + "1": 0.681502958140456, + "2": 0.5980321652758281 + }, + "recall": { + "0": 0.7816133790799933, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "f1": { + "0": 0.5453109659396796, + "1": 0.6485020586629996, + "2": 0.5990432558914093 + }, + "micro_accuracy": { + "0": 0.724609375, + "1": 0.8154296875, + "2": 0.9560546875 + }, + "theilU": { + "0": 0.9783879870872234, + "1": 0.9816632673398754, + "2": 0.9117838595208317 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8182515062243679, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "precision": { + "0": 0.6445375626212023, + "1": 0.681502958140456, + "2": 0.5980321652758281 + }, + "recall": { + "0": 0.8182515062243679, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "f1": { + "0": 0.5830756999224902, + "1": 0.6485020586629996, + "2": 0.5990432558914093 + }, + "micro_accuracy": { + "0": 0.8431818181818181, + "1": 0.8154296875, + "2": 0.9560546875 + }, + "theilU": { + "0": 0.98027380370052, + "1": 0.9816632673398754, + "2": 0.9117838595208317 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "0730f2b99cba832193e8e2a98a046e0cb217e607da6dd911d5cfd447a0f23120" + } + } + }, + { + "backend": "onnx", + "profile": "brightness", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.564453125, + "micro_accuracy_known": 0.6568181818181819, + "macro_accuracy_all": 0.6183162410283385, + "macro_accuracy_known": 0.6472998148265419, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7021484375, + "micro_accuracy_known": 0.7021484375, + "macro_accuracy_all": 0.7693243600883878, + "macro_accuracy_known": 0.7693243600883878, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.904296875, + "micro_accuracy_known": 0.904296875, + "macro_accuracy_all": 0.8518896032611248, + "macro_accuracy_known": 0.8518896032611248, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6183162410283385, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "precision": { + "0": 0.38802503052503046, + "1": 0.4516077494746436, + "2": 0.47059001308503184 + }, + "recall": { + "0": 0.6183162410283385, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "f1": { + "0": 0.30440413363873187, + "1": 0.39522707704691634, + "2": 0.4789486871221942 + }, + "micro_accuracy": { + "0": 0.564453125, + "1": 0.7021484375, + "2": 0.904296875 + }, + "theilU": { + "0": 0.9788721719654571, + "1": 0.9776673557201376, + "2": 0.8301641891930855 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6472998148265419, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "precision": { + "0": 0.4118499161182088, + "1": 0.4516077494746436, + "2": 0.47059001308503184 + }, + "recall": { + "0": 0.6472998148265419, + "1": 0.7693243600883878, + "2": 0.8518896032611248 + }, + "f1": { + "0": 0.32788046715703073, + "1": 0.39522707704691634, + "2": 0.4789486871221942 + }, + "micro_accuracy": { + "0": 0.6568181818181819, + "1": 0.7021484375, + "2": 0.904296875 + }, + "theilU": { + "0": 0.9861901698381681, + "1": 0.9776673557201376, + "2": 0.8301641891930855 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "7ce4c55575fdf5d685b8e9fed2c97ec7d3e96db25c16f2bc317ef2bd576f741a" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7294239030393783, + "macro_accuracy_known": 0.7636156484943492, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.8404213357880577, + "macro_accuracy_known": 0.8404213357880577, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9326171875, + "micro_accuracy_known": 0.9326171875, + "macro_accuracy_all": 0.8751058942912557, + "macro_accuracy_known": 0.8751058942912557, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8751058942912557 + }, + "precision": { + "0": 0.5294163250289079, + "1": 0.5753869747376242, + "2": 0.48736023867192746 + }, + "recall": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8751058942912557 + }, + "f1": { + "0": 0.45160980096785147, + "1": 0.5352862820426186, + "2": 0.4894029252721351 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.77734375, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.9749195921932904, + "1": 0.9759565364987944, + "2": 0.8707916416488142 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8751058942912557 + }, + "precision": { + "0": 0.5577560074955908, + "1": 0.5753869747376242, + "2": 0.48736023867192746 + }, + "recall": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8751058942912557 + }, + "f1": { + "0": 0.486815760963536, + "1": 0.5352862820426186, + "2": 0.4894029252721351 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.77734375, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.9784480772656535, + "1": 0.9759565364987944, + "2": 0.8707916416488142 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "8863302017f143771a3e1a993a0cb542030f5ccad8af09fe7c7a500ded1212fb" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6923828125, + "micro_accuracy_known": 0.8056818181818182, + "macro_accuracy_all": 0.7466012977108814, + "macro_accuracy_known": 0.7815982335410788, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.787109375, + "micro_accuracy_known": 0.787109375, + "macro_accuracy_all": 0.8588238206905426, + "macro_accuracy_known": 0.8588238206905426, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.935546875, + "micro_accuracy_known": 0.935546875, + "macro_accuracy_all": 0.8772082960647901, + "macro_accuracy_known": 0.8772082960647901, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7466012977108814, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "precision": { + "0": 0.54833087874325, + "1": 0.5991659241659242, + "2": 0.4875648805802487 + }, + "recall": { + "0": 0.7466012977108814, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "f1": { + "0": 0.4731994993617265, + "1": 0.5666242339543061, + "2": 0.4895885600320747 + }, + "micro_accuracy": { + "0": 0.6923828125, + "1": 0.787109375, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9743492089164368, + "1": 0.9752040537736837, + "2": 0.8813345819108521 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7815982335410788, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "precision": { + "0": 0.5746031746031747, + "1": 0.5991659241659242, + "2": 0.4875648805802487 + }, + "recall": { + "0": 0.7815982335410788, + "1": 0.8588238206905426, + "2": 0.8772082960647901 + }, + "f1": { + "0": 0.5079607025155944, + "1": 0.5666242339543061, + "2": 0.4895885600320747 + }, + "micro_accuracy": { + "0": 0.8056818181818182, + "1": 0.787109375, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9786744434452747, + "1": 0.9752040537736837, + "2": 0.8813345819108521 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "6c767dae66770d07fb96f4e5c2445fb795a2a7f544aadbbc7c8469476eee9b34" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.67578125, + "micro_accuracy_known": 0.7863636363636364, + "macro_accuracy_all": 0.7294239030393783, + "macro_accuracy_known": 0.7636156484943492, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.8404213357880577, + "macro_accuracy_known": 0.8404213357880577, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8738627786342926, + "macro_accuracy_known": 0.8738627786342926, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8738627786342926 + }, + "precision": { + "0": 0.52702981411863, + "1": 0.5738407665131803, + "2": 0.455366299921629 + }, + "recall": { + "0": 0.7294239030393783, + "1": 0.8404213357880577, + "2": 0.8738627786342926 + }, + "f1": { + "0": 0.44949803039146796, + "1": 0.5335719393755183, + "2": 0.4625762569996856 + }, + "micro_accuracy": { + "0": 0.67578125, + "1": 0.77734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9739699360130293, + "1": 0.9751385992153466, + "2": 0.8680294530908625 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8738627786342926 + }, + "precision": { + "0": 0.5531514209349262, + "1": 0.5738407665131803, + "2": 0.455366299921629 + }, + "recall": { + "0": 0.7636156484943492, + "1": 0.8404213357880577, + "2": 0.8738627786342926 + }, + "f1": { + "0": 0.4827628758095469, + "1": 0.5335719393755183, + "2": 0.4625762569996856 + }, + "micro_accuracy": { + "0": 0.7863636363636364, + "1": 0.77734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9792579897039164, + "1": 0.9751385992153466, + "2": 0.8680294530908625 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "259a97400256b4cd082e5fbb08f0b140d8c7d27b7048fccb1d987fd45d903ca8" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6884765625, + "micro_accuracy_known": 0.8011363636363636, + "macro_accuracy_all": 0.7391386111437172, + "macro_accuracy_known": 0.7737857335410788, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7822265625, + "micro_accuracy_known": 0.7822265625, + "macro_accuracy_all": 0.8454904873572092, + "macro_accuracy_known": 0.8454904873572092, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8768253954615906, + "macro_accuracy_known": 0.8768253954615906, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7391386111437172, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "precision": { + "0": 0.5457256622785633, + "1": 0.5872092018109718, + "2": 0.455852200251995 + }, + "recall": { + "0": 0.7391386111437172, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "f1": { + "0": 0.46824913275817837, + "1": 0.5494891732794056, + "2": 0.4568076265665339 + }, + "micro_accuracy": { + "0": 0.6884765625, + "1": 0.7822265625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9742392602318141, + "1": 0.9767525227713265, + "2": 0.8877672927386754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7737857335410788, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "precision": { + "0": 0.5716997119132351, + "1": 0.5872092018109718, + "2": 0.455852200251995 + }, + "recall": { + "0": 0.7737857335410788, + "1": 0.8454904873572092, + "2": 0.8768253954615906 + }, + "f1": { + "0": 0.5024339900483179, + "1": 0.5494891732794056, + "2": 0.4568076265665339 + }, + "micro_accuracy": { + "0": 0.8011363636363636, + "1": 0.7822265625, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9788865267171871, + "1": 0.9767525227713265, + "2": 0.8877672927386754 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "5a99be9f9525e7e393c04af599aa4aa1a2ca1f71132502aabde452e8abac9f4b" + } + } + }, + { + "backend": "onnx", + "profile": "contrast", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.56640625, + "micro_accuracy_known": 0.6590909090909091, + "macro_accuracy_all": 0.6192248718564508, + "macro_accuracy_known": 0.648251037724722, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7041015625, + "micro_accuracy_known": 0.7041015625, + "macro_accuracy_all": 0.7684694057953135, + "macro_accuracy_known": 0.7684694057953135, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9033203125, + "micro_accuracy_known": 0.9033203125, + "macro_accuracy_all": 0.8458756495045662, + "macro_accuracy_known": 0.8458756495045662, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6192248718564508, + "1": 0.7684694057953135, + "2": 0.8458756495045662 + }, + "precision": { + "0": 0.39090219304505014, + "1": 0.45272122380136304, + "2": 0.4681592226653051 + }, + "recall": { + "0": 0.6192248718564508, + "1": 0.7684694057953135, + "2": 0.8458756495045662 + }, + "f1": { + "0": 0.30835454161746234, + "1": 0.39899597259403363, + "2": 0.4747118873014382 + }, + "micro_accuracy": { + "0": 0.56640625, + "1": 0.7041015625, + "2": 0.9033203125 + }, + "theilU": { + "0": 0.9773172919950401, + "1": 0.9772033791964636, + "2": 0.8282624401249864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.648251037724722, + "1": 0.7684694057953135, + "2": 0.8458756495045662 + }, + "precision": { + "0": 0.41182616203052175, + "1": 0.45272122380136304, + "2": 0.4681592226653051 + }, + "recall": { + "0": 0.648251037724722, + "1": 0.7684694057953135, + "2": 0.8458756495045662 + }, + "f1": { + "0": 0.3299506802881032, + "1": 0.39899597259403363, + "2": 0.4747118873014382 + }, + "micro_accuracy": { + "0": 0.6590909090909091, + "1": 0.7041015625, + "2": 0.9033203125 + }, + "theilU": { + "0": 0.9843412576474854, + "1": 0.9772033791964636, + "2": 0.8282624401249864 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "0170671b16f92de31bcb8ab956ad4e0a95f393a292b0c84bb2e81625e9eaed48" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.673828125, + "micro_accuracy_known": 0.7840909090909091, + "macro_accuracy_all": 0.7329318221011072, + "macro_accuracy_known": 0.7672880012620965, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.838827523488363, + "macro_accuracy_known": 0.838827523488363, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.931640625, + "micro_accuracy_known": 0.931640625, + "macro_accuracy_all": 0.8808574168602449, + "macro_accuracy_known": 0.8808574168602449, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7329318221011072, + "1": 0.838827523488363, + "2": 0.8808574168602449 + }, + "precision": { + "0": 0.5274203847154667, + "1": 0.5751911388275025, + "2": 0.4893141403945866 + }, + "recall": { + "0": 0.7329318221011072, + "1": 0.838827523488363, + "2": 0.8808574168602449 + }, + "f1": { + "0": 0.4517977437487192, + "1": 0.5325162973083407, + "2": 0.4919130847970722 + }, + "micro_accuracy": { + "0": 0.673828125, + "1": 0.7763671875, + "2": 0.931640625 + }, + "theilU": { + "0": 0.9752305321748128, + "1": 0.9756362232063878, + "2": 0.8678108446554775 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7672880012620965, + "1": 0.838827523488363, + "2": 0.8808574168602449 + }, + "precision": { + "0": 0.5572869563386805, + "1": 0.5751911388275025, + "2": 0.4893141403945866 + }, + "recall": { + "0": 0.7672880012620965, + "1": 0.838827523488363, + "2": 0.8808574168602449 + }, + "f1": { + "0": 0.48836588648781143, + "1": 0.5325162973083407, + "2": 0.4919130847970722 + }, + "micro_accuracy": { + "0": 0.7840909090909091, + "1": 0.7763671875, + "2": 0.931640625 + }, + "theilU": { + "0": 0.978166314512769, + "1": 0.9756362232063878, + "2": 0.8678108446554775 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "1d73cefc7dba54d440702638366ab83c33eda6d0f42da50c847d8722d93bd964" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.693359375, + "micro_accuracy_known": 0.8068181818181818, + "macro_accuracy_all": 0.7526127864403591, + "macro_accuracy_known": 0.787891510804751, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7861328125, + "micro_accuracy_known": 0.7861328125, + "macro_accuracy_all": 0.8584998496606892, + "macro_accuracy_known": 0.8584998496606892, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.882363748246895, + "macro_accuracy_known": 0.882363748246895, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7526127864403591, + "1": 0.8584998496606892, + "2": 0.882363748246895 + }, + "precision": { + "0": 0.5535377566305403, + "1": 0.6009100018068628, + "2": 0.4707050709009006 + }, + "recall": { + "0": 0.7526127864403591, + "1": 0.8584998496606892, + "2": 0.882363748246895 + }, + "f1": { + "0": 0.48201440085324226, + "1": 0.5676364116280895, + "2": 0.47351889197705443 + }, + "micro_accuracy": { + "0": 0.693359375, + "1": 0.7861328125, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9739313881573897, + "1": 0.9746861387960117, + "2": 0.878973670128657 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.787891510804751, + "1": 0.8584998496606892, + "2": 0.882363748246895 + }, + "precision": { + "0": 0.5821204574801698, + "1": 0.6009100018068628, + "2": 0.4707050709009006 + }, + "recall": { + "0": 0.787891510804751, + "1": 0.8584998496606892, + "2": 0.882363748246895 + }, + "f1": { + "0": 0.5195083909386035, + "1": 0.5676364116280895, + "2": 0.47351889197705443 + }, + "micro_accuracy": { + "0": 0.8068181818181818, + "1": 0.7861328125, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9776519866535184, + "1": 0.9746861387960117, + "2": 0.878973670128657 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "3e25a4a38f194e87496e204979e03829bef3c821cbc48f465af62a3d7254e839" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.673828125, + "micro_accuracy_known": 0.7840909090909091, + "macro_accuracy_all": 0.7329318221011072, + "macro_accuracy_known": 0.7672880012620965, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7763671875, + "micro_accuracy_known": 0.7763671875, + "macro_accuracy_all": 0.838827523488363, + "macro_accuracy_known": 0.838827523488363, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.927734375, + "micro_accuracy_known": 0.927734375, + "macro_accuracy_all": 0.8793744930498045, + "macro_accuracy_known": 0.8793744930498045, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7329318221011072, + "1": 0.838827523488363, + "2": 0.8793744930498045 + }, + "precision": { + "0": 0.5285132808903301, + "1": 0.5805785432422989, + "2": 0.4732703316874566 + }, + "recall": { + "0": 0.7329318221011072, + "1": 0.838827523488363, + "2": 0.8793744930498045 + }, + "f1": { + "0": 0.4523983443493198, + "1": 0.5372913996766249, + "2": 0.4815530694487088 + }, + "micro_accuracy": { + "0": 0.673828125, + "1": 0.7763671875, + "2": 0.927734375 + }, + "theilU": { + "0": 0.9739882264817878, + "1": 0.9734317765695701, + "2": 0.8626994912738378 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7672880012620965, + "1": 0.838827523488363, + "2": 0.8793744930498045 + }, + "precision": { + "0": 0.5565173562596243, + "1": 0.5805785432422989, + "2": 0.4732703316874566 + }, + "recall": { + "0": 0.7672880012620965, + "1": 0.838827523488363, + "2": 0.8793744930498045 + }, + "f1": { + "0": 0.48743567395075393, + "1": 0.5372913996766249, + "2": 0.4815530694487088 + }, + "micro_accuracy": { + "0": 0.7840909090909091, + "1": 0.7763671875, + "2": 0.927734375 + }, + "theilU": { + "0": 0.9786355617143068, + "1": 0.9734317765695701, + "2": 0.8626994912738378 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "d359546e8b23b10341ec17cc7c56dc263822ce3fc8943fb564d8451bd989e666" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.689453125, + "micro_accuracy_known": 0.8022727272727272, + "macro_accuracy_all": 0.7451500998731949, + "macro_accuracy_known": 0.780079010804751, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.78125, + "micro_accuracy_known": 0.78125, + "macro_accuracy_all": 0.8451665163273558, + "macro_accuracy_known": 0.8451665163273558, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.935546875, + "micro_accuracy_known": 0.935546875, + "macro_accuracy_all": 0.8824392458446987, + "macro_accuracy_known": 0.8824392458446987, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7451500998731949, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "precision": { + "0": 0.5531476569407604, + "1": 0.5941586316025779, + "2": 0.47314272371396204 + }, + "recall": { + "0": 0.7451500998731949, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "f1": { + "0": 0.4794907415472485, + "1": 0.5566152643229422, + "2": 0.4751092613473271 + }, + "micro_accuracy": { + "0": 0.689453125, + "1": 0.78125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9737439441057982, + "1": 0.9749939611792631, + "2": 0.8842953741962183 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.780079010804751, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "precision": { + "0": 0.5818152365083774, + "1": 0.5941586316025779, + "2": 0.47314272371396204 + }, + "recall": { + "0": 0.780079010804751, + "1": 0.8451665163273558, + "2": 0.8824392458446987 + }, + "f1": { + "0": 0.5167965265318238, + "1": 0.5566152643229422, + "2": 0.4751092613473271 + }, + "micro_accuracy": { + "0": 0.8022727272727272, + "1": 0.78125, + "2": 0.935546875 + }, + "theilU": { + "0": 0.9777734412236606, + "1": 0.9749939611792631, + "2": 0.8842953741962183 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "94611b9de35f8c83e79af9043f8d0f937c4bbacdafa44a38b0c5a08676219a01" + } + } + }, + { + "backend": "onnx", + "profile": "gamma", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5615234375, + "micro_accuracy_known": 0.6534090909090909, + "macro_accuracy_all": 0.6141808443556284, + "macro_accuracy_known": 0.6429705714347984, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.705078125, + "micro_accuracy_known": 0.705078125, + "macro_accuracy_all": 0.7690586762861187, + "macro_accuracy_known": 0.7690586762861187, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90234375, + "micro_accuracy_known": 0.90234375, + "macro_accuracy_all": 0.8461189939421286, + "macro_accuracy_known": 0.8461189939421286, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6141808443556284, + "1": 0.7690586762861187, + "2": 0.8461189939421286 + }, + "precision": { + "0": 0.38365196769042925, + "1": 0.456476598114529, + "2": 0.4333015824183962 + }, + "recall": { + "0": 0.6141808443556284, + "1": 0.7690586762861187, + "2": 0.8461189939421286 + }, + "f1": { + "0": 0.3019306606622903, + "1": 0.399159414905154, + "2": 0.43991081695457057 + }, + "micro_accuracy": { + "0": 0.5615234375, + "1": 0.705078125, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9798237660772963, + "1": 0.9782892494572161, + "2": 0.8353045799618541 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6429705714347984, + "1": 0.7690586762861187, + "2": 0.8461189939421286 + }, + "precision": { + "0": 0.40722797978895536, + "1": 0.456476598114529, + "2": 0.4333015824183962 + }, + "recall": { + "0": 0.6429705714347984, + "1": 0.7690586762861187, + "2": 0.8461189939421286 + }, + "f1": { + "0": 0.32516699289604, + "1": 0.399159414905154, + "2": 0.43991081695457057 + }, + "micro_accuracy": { + "0": 0.6534090909090909, + "1": 0.705078125, + "2": 0.90234375 + }, + "theilU": { + "0": 0.9853370880062943, + "1": 0.9782892494572161, + "2": 0.8353045799618541 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "34b9b0659cc44e54ea9916736d14d6d2ee7316403662deb2f252267564e2c8b5" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6767578125, + "micro_accuracy_known": 0.7875, + "macro_accuracy_all": 0.7295103466647064, + "macro_accuracy_known": 0.7637061441646145, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7802734375, + "micro_accuracy_known": 0.7802734375, + "macro_accuracy_all": 0.8420738412346808, + "macro_accuracy_known": 0.8420738412346808, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8732648242676523, + "macro_accuracy_known": 0.8732648242676523, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8732648242676523 + }, + "precision": { + "0": 0.531420397616411, + "1": 0.5867950942840812, + "2": 0.4870907120815545 + }, + "recall": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8732648242676523 + }, + "f1": { + "0": 0.4531562965765729, + "1": 0.5457626885494472, + "2": 0.4887087559716509 + }, + "micro_accuracy": { + "0": 0.6767578125, + "1": 0.7802734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9742895975077354, + "1": 0.9744925867275461, + "2": 0.8621675172969387 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8732648242676523 + }, + "precision": { + "0": 0.5599565842597202, + "1": 0.5867950942840812, + "2": 0.4870907120815545 + }, + "recall": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8732648242676523 + }, + "f1": { + "0": 0.48859279520090987, + "1": 0.5457626885494472, + "2": 0.4887087559716509 + }, + "micro_accuracy": { + "0": 0.7875, + "1": 0.7802734375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.977083484952786, + "1": 0.9744925867275461, + "2": 0.8621675172969387 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "53e27697e525c6fb7d44f1f491259c4e9ca0f02ca638b128ea97861cf0fd8d8b" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6943359375, + "micro_accuracy_known": 0.8079545454545455, + "macro_accuracy_all": 0.7483461161289127, + "macro_accuracy_known": 0.7834248403224554, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7890625, + "micro_accuracy_known": 0.7890625, + "macro_accuracy_all": 0.8602961459569857, + "macro_accuracy_known": 0.8602961459569857, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.93359375, + "micro_accuracy_known": 0.93359375, + "macro_accuracy_all": 0.8761554797812316, + "macro_accuracy_known": 0.8761554797812316, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7483461161289127, + "1": 0.8602961459569857, + "2": 0.8761554797812316 + }, + "precision": { + "0": 0.5523809523809525, + "1": 0.6071671099068359, + "2": 0.5064686502228765 + }, + "recall": { + "0": 0.7483461161289127, + "1": 0.8602961459569857, + "2": 0.8761554797812316 + }, + "f1": { + "0": 0.47694678582072514, + "1": 0.5750990141622918, + "2": 0.5085626120950417 + }, + "micro_accuracy": { + "0": 0.6943359375, + "1": 0.7890625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9742632627716996, + "1": 0.9740924117631742, + "2": 0.8730894877122698 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7834248403224554, + "1": 0.8602961459569857, + "2": 0.8761554797812316 + }, + "precision": { + "0": 0.5811162870945481, + "1": 0.6071671099068359, + "2": 0.5064686502228765 + }, + "recall": { + "0": 0.7834248403224554, + "1": 0.8602961459569857, + "2": 0.8761554797812316 + }, + "f1": { + "0": 0.5139374599574351, + "1": 0.5750990141622918, + "2": 0.5085626120950417 + }, + "micro_accuracy": { + "0": 0.8079545454545455, + "1": 0.7890625, + "2": 0.93359375 + }, + "theilU": { + "0": 0.9773933524395068, + "1": 0.9740924117631742, + "2": 0.8730894877122698 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "180051f31bf25e5c41d328f1d32b874d96d7da115f79bc3e816131c4fb608fcc" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6767578125, + "micro_accuracy_known": 0.7875, + "macro_accuracy_all": 0.7295103466647064, + "macro_accuracy_known": 0.7637061441646145, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7802734375, + "micro_accuracy_known": 0.7802734375, + "macro_accuracy_all": 0.8420738412346808, + "macro_accuracy_known": 0.8420738412346808, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9267578125, + "micro_accuracy_known": 0.9267578125, + "macro_accuracy_all": 0.8720217086106892, + "macro_accuracy_known": 0.8720217086106892, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5307644801850101, + "1": 0.5851717239875135, + "2": 0.45511022909489407 + }, + "recall": { + "0": 0.7295103466647064, + "1": 0.8420738412346808, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.4523914739283053, + "1": 0.5439742699115124, + "2": 0.46190078167653675 + }, + "micro_accuracy": { + "0": 0.6767578125, + "1": 0.7802734375, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9733374322783351, + "1": 0.9736734244458565, + "2": 0.859399562508141 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8720217086106892 + }, + "precision": { + "0": 0.5572348547262043, + "1": 0.5851717239875135, + "2": 0.45511022909489407 + }, + "recall": { + "0": 0.7637061441646145, + "1": 0.8420738412346808, + "2": 0.8720217086106892 + }, + "f1": { + "0": 0.4860776314779266, + "1": 0.5439742699115124, + "2": 0.46190078167653675 + }, + "micro_accuracy": { + "0": 0.7875, + "1": 0.7802734375, + "2": 0.9267578125 + }, + "theilU": { + "0": 0.9778933973910489, + "1": 0.9736734244458565, + "2": 0.859399562508141 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "70110574c273f56742a471b62a872259b1764aa8deae45f56962c339d255a420" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6904296875, + "micro_accuracy_known": 0.803409090909091, + "macro_accuracy_all": 0.7408834295617485, + "macro_accuracy_known": 0.7756123403224554, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7841796875, + "micro_accuracy_known": 0.7841796875, + "macro_accuracy_all": 0.8469628126236521, + "macro_accuracy_known": 0.8469628126236521, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.875772579178032, + "macro_accuracy_known": 0.875772579178032, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7408834295617485, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "precision": { + "0": 0.5516256157635469, + "1": 0.5975857725857726, + "2": 0.47155516926017454 + }, + "recall": { + "0": 0.7408834295617485, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "f1": { + "0": 0.4734215010763998, + "1": 0.5600088207579761, + "2": 0.4723728912301283 + }, + "micro_accuracy": { + "0": 0.6904296875, + "1": 0.7841796875, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9741326742333372, + "1": 0.9752980882660742, + "2": 0.8808206854269369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7756123403224554, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "precision": { + "0": 0.5802217637957711, + "1": 0.5975857725857726, + "2": 0.47155516926017454 + }, + "recall": { + "0": 0.7756123403224554, + "1": 0.8469628126236521, + "2": 0.875772579178032 + }, + "f1": { + "0": 0.5100264952854606, + "1": 0.5600088207579761, + "2": 0.4723728912301283 + }, + "micro_accuracy": { + "0": 0.803409090909091, + "1": 0.7841796875, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.977581297969741, + "1": 0.9752980882660742, + "2": 0.8808206854269369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "194b2630432d2be456327181e35e70a27f0a92c98a715ef1e9439a9b9ec5c71e" + } + } + }, + { + "backend": "onnx", + "profile": "gaussian_noise", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.60546875, + "micro_accuracy_known": 0.7045454545454546, + "macro_accuracy_all": 0.6545309815537624, + "macro_accuracy_known": 0.685212121314095, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7265625, + "micro_accuracy_known": 0.7265625, + "macro_accuracy_all": 0.8006316394575475, + "macro_accuracy_known": 0.8006316394575475, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9111328125, + "micro_accuracy_known": 0.9111328125, + "macro_accuracy_all": 0.8513848870135886, + "macro_accuracy_known": 0.8513848870135886, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6545309815537624, + "1": 0.8006316394575475, + "2": 0.8513848870135886 + }, + "precision": { + "0": 0.41837055576947757, + "1": 0.48698224852071004, + "2": 0.4309082949296677 + }, + "recall": { + "0": 0.6545309815537624, + "1": 0.8006316394575475, + "2": 0.8513848870135886 + }, + "f1": { + "0": 0.3380026963576196, + "1": 0.43751274823921404, + "2": 0.4420682361292737 + }, + "micro_accuracy": { + "0": 0.60546875, + "1": 0.7265625, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9815691113390748, + "1": 0.9800305538464384, + "2": 0.8500065528057964 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.685212121314095, + "1": 0.8006316394575475, + "2": 0.8513848870135886 + }, + "precision": { + "0": 0.4440408357075024, + "1": 0.48698224852071004, + "2": 0.4309082949296677 + }, + "recall": { + "0": 0.685212121314095, + "1": 0.8006316394575475, + "2": 0.8513848870135886 + }, + "f1": { + "0": 0.3646380634428373, + "1": 0.43751274823921404, + "2": 0.4420682361292737 + }, + "micro_accuracy": { + "0": 0.7045454545454546, + "1": 0.7265625, + "2": 0.9111328125 + }, + "theilU": { + "0": 0.9862999206709946, + "1": 0.9800305538464384, + "2": 0.8500065528057964 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c1a04168aec32b745922e861c532823265f846201f08cd0f44adf75cb4b13132" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6845703125, + "micro_accuracy_known": 0.7965909090909091, + "macro_accuracy_all": 0.7349476371962624, + "macro_accuracy_known": 0.7693983076898373, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7822265625, + "micro_accuracy_known": 0.7822265625, + "macro_accuracy_all": 0.8494674087128212, + "macro_accuracy_known": 0.8494674087128212, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9326171875, + "micro_accuracy_known": 0.9326171875, + "macro_accuracy_all": 0.8717584528209592, + "macro_accuracy_known": 0.8717584528209592, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7349476371962624, + "1": 0.8494674087128212, + "2": 0.8717584528209592 + }, + "precision": { + "0": 0.5411203703703703, + "1": 0.5829895151513189, + "2": 0.5462405993973666 + }, + "recall": { + "0": 0.7349476371962624, + "1": 0.8494674087128212, + "2": 0.8717584528209592 + }, + "f1": { + "0": 0.45927125296773524, + "1": 0.5395870324147068, + "2": 0.5278130382928162 + }, + "micro_accuracy": { + "0": 0.6845703125, + "1": 0.7822265625, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.976897029098277, + "1": 0.9802727288675025, + "2": 0.8655864765618194 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7693983076898373, + "1": 0.8494674087128212, + "2": 0.8717584528209592 + }, + "precision": { + "0": 0.5722319688109162, + "1": 0.5829895151513189, + "2": 0.5462405993973666 + }, + "recall": { + "0": 0.7693983076898373, + "1": 0.8494674087128212, + "2": 0.8717584528209592 + }, + "f1": { + "0": 0.49678406449595697, + "1": 0.5395870324147068, + "2": 0.5278130382928162 + }, + "micro_accuracy": { + "0": 0.7965909090909091, + "1": 0.7822265625, + "2": 0.9326171875 + }, + "theilU": { + "0": 0.9793373234989116, + "1": 0.9802727288675025, + "2": 0.8655864765618194 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c6bb08b5b09e71cf8acf65c13f5e35176145117e4aaa7b5c74b57e0862c47441" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7021484375, + "micro_accuracy_known": 0.8170454545454545, + "macro_accuracy_all": 0.7514959716550446, + "macro_accuracy_known": 0.7867223453263748, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7919921875, + "micro_accuracy_known": 0.7919921875, + "macro_accuracy_all": 0.8648444155532427, + "macro_accuracy_known": 0.8648444155532427, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8751481575271653, + "macro_accuracy_known": 0.8751481575271653, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7514959716550446, + "1": 0.8648444155532427, + "2": 0.8751481575271653 + }, + "precision": { + "0": 0.5646839223494275, + "1": 0.6061633777074048, + "2": 0.5289758286493282 + }, + "recall": { + "0": 0.7514959716550446, + "1": 0.8648444155532427, + "2": 0.8751481575271653 + }, + "f1": { + "0": 0.4852004989110314, + "1": 0.5707810457890382, + "2": 0.5109529116716834 + }, + "micro_accuracy": { + "0": 0.7021484375, + "1": 0.7919921875, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9759940415702356, + "1": 0.9774621379883017, + "2": 0.8815016691622108 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7867223453263748, + "1": 0.8648444155532427, + "2": 0.8751481575271653 + }, + "precision": { + "0": 0.5942127215849844, + "1": 0.6061633777074048, + "2": 0.5289758286493282 + }, + "recall": { + "0": 0.7867223453263748, + "1": 0.8648444155532427, + "2": 0.8751481575271653 + }, + "f1": { + "0": 0.5230604350758373, + "1": 0.5707810457890382, + "2": 0.5109529116716834 + }, + "micro_accuracy": { + "0": 0.8170454545454545, + "1": 0.7919921875, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9792158970471372, + "1": 0.9774621379883017, + "2": 0.8815016691622108 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "0405bf5f07ef0fc6de674f795de512316e5fbca542fc65e69cabe291de5ae5c6" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6845703125, + "micro_accuracy_known": 0.7965909090909091, + "macro_accuracy_all": 0.7349476371962624, + "macro_accuracy_known": 0.7693983076898373, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.783203125, + "micro_accuracy_known": 0.783203125, + "macro_accuracy_all": 0.8511340753794879, + "macro_accuracy_known": 0.8511340753794879, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8704905827739597, + "macro_accuracy_known": 0.8704905827739597, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7349476371962624, + "1": 0.8511340753794879, + "2": 0.8704905827739597 + }, + "precision": { + "0": 0.5404300479881875, + "1": 0.5858492698658453, + "2": 0.5296432768315602 + }, + "recall": { + "0": 0.7349476371962624, + "1": 0.8511340753794879, + "2": 0.8704905827739597 + }, + "f1": { + "0": 0.4584879561309747, + "1": 0.5427213874018971, + "2": 0.5179607527327961 + }, + "micro_accuracy": { + "0": 0.6845703125, + "1": 0.783203125, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9769110479756221, + "1": 0.9795975959887973, + "2": 0.8616391329814392 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7693983076898373, + "1": 0.8511340753794879, + "2": 0.8704905827739597 + }, + "precision": { + "0": 0.5713966588966588, + "1": 0.5858492698658453, + "2": 0.5296432768315602 + }, + "recall": { + "0": 0.7693983076898373, + "1": 0.8511340753794879, + "2": 0.8704905827739597 + }, + "f1": { + "0": 0.49581734115883674, + "1": 0.5427213874018971, + "2": 0.5179607527327961 + }, + "micro_accuracy": { + "0": 0.7965909090909091, + "1": 0.783203125, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9798065707004494, + "1": 0.9795975959887973, + "2": 0.8616391329814392 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "7abb665c1d6aa5d7fa4b3100bf1f26c3f18713d46a28e5674e613ed76b14ee0c" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7436186913897047, + "macro_accuracy_known": 0.7784758175485971, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7880859375, + "micro_accuracy_known": 0.7880859375, + "macro_accuracy_all": 0.8535481192569464, + "macro_accuracy_known": 0.8535481192569464, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8745254487704887, + "macro_accuracy_known": 0.8745254487704887, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7436186913897047, + "1": 0.8535481192569464, + "2": 0.8745254487704887 + }, + "precision": { + "0": 0.560199373867194, + "1": 0.5998890713373471, + "2": 0.4888507960286553 + }, + "recall": { + "0": 0.7436186913897047, + "1": 0.8535481192569464, + "2": 0.8745254487704887 + }, + "f1": { + "0": 0.47888447301192044, + "1": 0.5603515553766406, + "2": 0.47319868251346003 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.7880859375, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9758634530318733, + "1": 0.9781060555048576, + "2": 0.887834112188216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7784758175485971, + "1": 0.8535481192569464, + "2": 0.8745254487704887 + }, + "precision": { + "0": 0.5893029675638372, + "1": 0.5998890713373471, + "2": 0.4888507960286553 + }, + "recall": { + "0": 0.7784758175485971, + "1": 0.8535481192569464, + "2": 0.8745254487704887 + }, + "f1": { + "0": 0.516019164439868, + "1": 0.5603515553766406, + "2": 0.47319868251346003 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.7880859375, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9790631773406463, + "1": 0.9781060555048576, + "2": 0.887834112188216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "f24ad2ee6665be0dd7d31d08a781b3f19d0ef828ac88b25e5a5c70443b771112" + } + } + }, + { + "backend": "onnx", + "profile": "padded_scale", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6064453125, + "micro_accuracy_known": 0.7056818181818182, + "macro_accuracy_all": 0.6652441617583018, + "macro_accuracy_known": 0.6964274818407222, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7412109375, + "micro_accuracy_known": 0.7412109375, + "macro_accuracy_all": 0.8173313386584188, + "macro_accuracy_known": 0.8173313386584188, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9296875, + "micro_accuracy_known": 0.9296875, + "macro_accuracy_all": 0.8479662801440404, + "macro_accuracy_known": 0.8479662801440404, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6652441617583018, + "1": 0.8173313386584188, + "2": 0.8479662801440404 + }, + "precision": { + "0": 0.43402073033220573, + "1": 0.5068102982633171, + "2": 0.4842115297152765 + }, + "recall": { + "0": 0.6652441617583018, + "1": 0.8173313386584188, + "2": 0.8479662801440404 + }, + "f1": { + "0": 0.35089375236164183, + "1": 0.45505755746718773, + "2": 0.4843791657478432 + }, + "micro_accuracy": { + "0": 0.6064453125, + "1": 0.7412109375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.9816919778983844, + "1": 0.9803468597068008, + "2": 0.87391363290345 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6964274818407222, + "1": 0.8173313386584188, + "2": 0.8479662801440404 + }, + "precision": { + "0": 0.4605537205248188, + "1": 0.5068102982633171, + "2": 0.4842115297152765 + }, + "recall": { + "0": 0.6964274818407222, + "1": 0.8173313386584188, + "2": 0.8479662801440404 + }, + "f1": { + "0": 0.3789184247664976, + "1": 0.45505755746718773, + "2": 0.4843791657478432 + }, + "micro_accuracy": { + "0": 0.7056818181818182, + "1": 0.7412109375, + "2": 0.9296875 + }, + "theilU": { + "0": 0.985184887711333, + "1": 0.9803468597068008, + "2": 0.87391363290345 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "eac66683fb7f4e13ebecb6af3177ad2d19aeb2033c41350d70763b2e66a6749b" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7650511169266079, + "macro_accuracy_known": 0.8009128880325426, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.798828125, + "micro_accuracy_known": 0.798828125, + "macro_accuracy_all": 0.8746073406102853, + "macro_accuracy_known": 0.8746073406102853, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.947265625, + "micro_accuracy_known": 0.947265625, + "macro_accuracy_all": 0.8888149192892535, + "macro_accuracy_known": 0.8888149192892535, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7650511169266079, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "precision": { + "0": 0.5765313035783419, + "1": 0.6306489543157546, + "2": 0.5383882427898227 + }, + "recall": { + "0": 0.7650511169266079, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "f1": { + "0": 0.5007541407881484, + "1": 0.5965465365721194, + "2": 0.541814951789949 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.798828125, + "2": 0.947265625 + }, + "theilU": { + "0": 0.9761233547479233, + "1": 0.9784618583466062, + "2": 0.8922071716588353 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8009128880325426, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "precision": { + "0": 0.6021257476420521, + "1": 0.6306489543157546, + "2": 0.5383882427898227 + }, + "recall": { + "0": 0.8009128880325426, + "1": 0.8746073406102853, + "2": 0.8888149192892535 + }, + "f1": { + "0": 0.5364995883959854, + "1": 0.5965465365721194, + "2": 0.541814951789949 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.798828125, + "2": 0.947265625 + }, + "theilU": { + "0": 0.9796019716285629, + "1": 0.9784618583466062, + "2": 0.8922071716588353 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4db247754c578c947f732b83f0896213cf4341d7a9a2a05c09e2391d2aa72ea0" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.7197265625, + "micro_accuracy_known": 0.8375, + "macro_accuracy_all": 0.7861607117989678, + "macro_accuracy_known": 0.8230119951645444, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.80859375, + "micro_accuracy_known": 0.80859375, + "macro_accuracy_all": 0.8859782374811823, + "macro_accuracy_known": 0.8859782374811823, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9482421875, + "micro_accuracy_known": 0.9482421875, + "macro_accuracy_all": 0.8924122215773433, + "macro_accuracy_known": 0.8924122215773433, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7861607117989678, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "precision": { + "0": 0.6005959569818267, + "1": 0.658480184510919, + "2": 0.4869479214022333 + }, + "recall": { + "0": 0.7861607117989678, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "f1": { + "0": 0.5306972698918776, + "1": 0.6317915485601558, + "2": 0.4866169641277515 + }, + "micro_accuracy": { + "0": 0.7197265625, + "1": 0.80859375, + "2": 0.9482421875 + }, + "theilU": { + "0": 0.976414652946152, + "1": 0.978439571696028, + "2": 0.9049635740626394 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8230119951645444, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "precision": { + "0": 0.6282517220724769, + "1": 0.658480184510919, + "2": 0.4869479214022333 + }, + "recall": { + "0": 0.8230119951645444, + "1": 0.8859782374811823, + "2": 0.8924122215773433 + }, + "f1": { + "0": 0.5701003970490692, + "1": 0.6317915485601558, + "2": 0.4866169641277515 + }, + "micro_accuracy": { + "0": 0.8375, + "1": 0.80859375, + "2": 0.9482421875 + }, + "theilU": { + "0": 0.9799426368652879, + "1": 0.978439571696028, + "2": 0.9049635740626394 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "75057ab0c23ace04f5ec2b1a09bf8909febdff790493e68e833fb9374ec8934b" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6982421875, + "micro_accuracy_known": 0.8125, + "macro_accuracy_all": 0.7650511169266079, + "macro_accuracy_known": 0.8009128880325426, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.798828125, + "micro_accuracy_known": 0.798828125, + "macro_accuracy_all": 0.8746073406102853, + "macro_accuracy_known": 0.8746073406102853, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9462890625, + "micro_accuracy_known": 0.9462890625, + "macro_accuracy_all": 0.8885998655258126, + "macro_accuracy_known": 0.8885998655258126, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7650511169266079, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "precision": { + "0": 0.5785471472971473, + "1": 0.6335959120462021, + "2": 0.5453938590940303 + }, + "recall": { + "0": 0.7650511169266079, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "f1": { + "0": 0.5023591220086232, + "1": 0.59927049336012, + "2": 0.5555219206262815 + }, + "micro_accuracy": { + "0": 0.6982421875, + "1": 0.798828125, + "2": 0.9462890625 + }, + "theilU": { + "0": 0.9752806616418804, + "1": 0.9778290861722726, + "2": 0.8896163281281433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8009128880325426, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "precision": { + "0": 0.6021257476420521, + "1": 0.6335959120462021, + "2": 0.5453938590940303 + }, + "recall": { + "0": 0.8009128880325426, + "1": 0.8746073406102853, + "2": 0.8885998655258126 + }, + "f1": { + "0": 0.5364995883959854, + "1": 0.59927049336012, + "2": 0.5555219206262815 + }, + "micro_accuracy": { + "0": 0.8125, + "1": 0.798828125, + "2": 0.9462890625 + }, + "theilU": { + "0": 0.9796019716285629, + "1": 0.9778290861722726, + "2": 0.8896163281281433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "abf6ced35cbafeed58c1d07705a5951066c5ba11f5b69b869eef000343c861d0" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.712890625, + "micro_accuracy_known": 0.8295454545454546, + "macro_accuracy_all": 0.775624109098186, + "macro_accuracy_known": 0.8119814892121635, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.80078125, + "micro_accuracy_known": 0.80078125, + "macro_accuracy_all": 0.8750309070338517, + "macro_accuracy_known": 0.8750309070338517, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.951171875, + "micro_accuracy_known": 0.951171875, + "macro_accuracy_all": 0.8930573828676659, + "macro_accuracy_known": 0.8930573828676659, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.775624109098186, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "precision": { + "0": 0.5933974249172091, + "1": 0.6400935973500221, + "2": 0.4878422547669985 + }, + "recall": { + "0": 0.775624109098186, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "f1": { + "0": 0.5193747863503737, + "1": 0.6078415156177398, + "2": 0.4872362891815405 + }, + "micro_accuracy": { + "0": 0.712890625, + "1": 0.80078125, + "2": 0.951171875 + }, + "theilU": { + "0": 0.9760604046967088, + "1": 0.9794779290735068, + "2": 0.911268120895833 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8119814892121635, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "precision": { + "0": 0.6205494619820463, + "1": 0.6400935973500221, + "2": 0.4878422547669985 + }, + "recall": { + "0": 0.8119814892121635, + "1": 0.8750309070338517, + "2": 0.8930573828676659 + }, + "f1": { + "0": 0.5575643252952356, + "1": 0.6078415156177398, + "2": 0.4872362891815405 + }, + "micro_accuracy": { + "0": 0.8295454545454546, + "1": 0.80078125, + "2": 0.951171875 + }, + "theilU": { + "0": 0.9795283532738005, + "1": 0.9794779290735068, + "2": 0.911268120895833 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "aa69830d5e76007db3f08df389b19d17e1dfa6aa22e689325d9363dbf49ff526" + } + } + }, + { + "backend": "onnx", + "profile": "mild_blur", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.5732421875, + "micro_accuracy_known": 0.6670454545454545, + "macro_accuracy_all": 0.6217608361461465, + "macro_accuracy_known": 0.6509058753404972, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7158203125, + "micro_accuracy_known": 0.7158203125, + "macro_accuracy_all": 0.7756872965029742, + "macro_accuracy_known": 0.7756872965029742, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.90625, + "micro_accuracy_known": 0.90625, + "macro_accuracy_all": 0.8477748787805467, + "macro_accuracy_known": 0.8477748787805467, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6217608361461465, + "1": 0.7756872965029742, + "2": 0.8477748787805467 + }, + "precision": { + "0": 0.39135554921269206, + "1": 0.46963181575857627, + "2": 0.45276748958646207 + }, + "recall": { + "0": 0.6217608361461465, + "1": 0.7756872965029742, + "2": 0.8477748787805467 + }, + "f1": { + "0": 0.30910976640059284, + "1": 0.41152477824057, + "2": 0.4602272886546585 + }, + "micro_accuracy": { + "0": 0.5732421875, + "1": 0.7158203125, + "2": 0.90625 + }, + "theilU": { + "0": 0.9808773004478276, + "1": 0.978205854812268, + "2": 0.8352572065482408 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6509058753404972, + "1": 0.7756872965029742, + "2": 0.8477748787805467 + }, + "precision": { + "0": 0.41456094134176324, + "1": 0.46963181575857627, + "2": 0.45276748958646207 + }, + "recall": { + "0": 0.6509058753404972, + "1": 0.7756872965029742, + "2": 0.8477748787805467 + }, + "f1": { + "0": 0.33240193213413666, + "1": 0.41152477824057, + "2": 0.4602272886546585 + }, + "micro_accuracy": { + "0": 0.6670454545454545, + "1": 0.7158203125, + "2": 0.90625 + }, + "theilU": { + "0": 0.9865921099044167, + "1": 0.978205854812268, + "2": 0.8352572065482408 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "46225d87b66c2d3c7076dc116de0f205947096a097cfa2df9e812b155752d362" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.677734375, + "micro_accuracy_known": 0.7886363636363637, + "macro_accuracy_all": 0.7337137504949759, + "macro_accuracy_known": 0.7681065825494279, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.83885455051539, + "macro_accuracy_known": 0.83885455051539, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9306640625, + "micro_accuracy_known": 0.9306640625, + "macro_accuracy_all": 0.8745362305987369, + "macro_accuracy_known": 0.8745362305987369, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "precision": { + "0": 0.5321559536906072, + "1": 0.5779328415692052, + "2": 0.48625507832424 + }, + "recall": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "f1": { + "0": 0.45591559669045273, + "1": 0.5362837292627527, + "2": 0.4881637551008611 + }, + "micro_accuracy": { + "0": 0.677734375, + "1": 0.77734375, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.9753369172766678, + "1": 0.9753009635793515, + "2": 0.86322146300684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "precision": { + "0": 0.5605302905475916, + "1": 0.5779328415692052, + "2": 0.48625507832424 + }, + "recall": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.8745362305987369 + }, + "f1": { + "0": 0.4915588181246242, + "1": 0.5362837292627527, + "2": 0.4881637551008611 + }, + "micro_accuracy": { + "0": 0.7886363636363637, + "1": 0.77734375, + "2": 0.9306640625 + }, + "theilU": { + "0": 0.9781961093647314, + "1": 0.9753009635793515, + "2": 0.86322146300684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "557aa53705f7f8e04a19c32164070906d127d05becd78c6198c26a2491063ab1" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6962890625, + "micro_accuracy_known": 0.8102272727272727, + "macro_accuracy_all": 0.7528041989452045, + "macro_accuracy_known": 0.7880918957707609, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7880859375, + "micro_accuracy_known": 0.7880859375, + "macro_accuracy_all": 0.8586244742853139, + "macro_accuracy_known": 0.8586244742853139, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9345703125, + "micro_accuracy_known": 0.9345703125, + "macro_accuracy_all": 0.8757973335680683, + "macro_accuracy_known": 0.8757973335680683, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7528041989452045, + "1": 0.8586244742853139, + "2": 0.8757973335680683 + }, + "precision": { + "0": 0.5511089367253752, + "1": 0.60501332001332, + "2": 0.5058534217725785 + }, + "recall": { + "0": 0.7528041989452045, + "1": 0.8586244742853139, + "2": 0.8757973335680683 + }, + "f1": { + "0": 0.478667224092499, + "1": 0.5719566879373098, + "2": 0.507670199889413 + }, + "micro_accuracy": { + "0": 0.6962890625, + "1": 0.7880859375, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9755304799098776, + "1": 0.9747166499600433, + "2": 0.8745174114576653 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7880918957707609, + "1": 0.8586244742853139, + "2": 0.8757973335680683 + }, + "precision": { + "0": 0.5794760197986005, + "1": 0.60501332001332, + "2": 0.5058534217725785 + }, + "recall": { + "0": 0.7880918957707609, + "1": 0.8586244742853139, + "2": 0.8757973335680683 + }, + "f1": { + "0": 0.5156607903768263, + "1": 0.5719566879373098, + "2": 0.507670199889413 + }, + "micro_accuracy": { + "0": 0.8102272727272727, + "1": 0.7880859375, + "2": 0.9345703125 + }, + "theilU": { + "0": 0.9787631407810776, + "1": 0.9747166499600433, + "2": 0.8745174114576653 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "c0128e2cd246ed8e5eb30b4d1106c6bb1f8aaebaa9f9a6a7fcde5c98c688c6b8" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.677734375, + "micro_accuracy_known": 0.7886363636363637, + "macro_accuracy_all": 0.7337137504949759, + "macro_accuracy_known": 0.7681065825494279, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.77734375, + "micro_accuracy_known": 0.77734375, + "macro_accuracy_all": 0.83885455051539, + "macro_accuracy_known": 0.83885455051539, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9287109375, + "micro_accuracy_known": 0.9287109375, + "macro_accuracy_all": 0.874106123071855, + "macro_accuracy_known": 0.874106123071855, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "precision": { + "0": 0.5339180594975297, + "1": 0.5808079118948686, + "2": 0.47167273756810363 + }, + "recall": { + "0": 0.7337137504949759, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "f1": { + "0": 0.45730135838252095, + "1": 0.5388386038217756, + "2": 0.4792877241207192 + }, + "micro_accuracy": { + "0": 0.677734375, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9736912039665129, + "1": 0.9738564989903369, + "2": 0.8610713150038116 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "precision": { + "0": 0.5605302905475916, + "1": 0.5808079118948686, + "2": 0.47167273756810363 + }, + "recall": { + "0": 0.7681065825494279, + "1": 0.83885455051539, + "2": 0.874106123071855 + }, + "f1": { + "0": 0.4915588181246242, + "1": 0.5388386038217756, + "2": 0.4792877241207192 + }, + "micro_accuracy": { + "0": 0.7886363636363637, + "1": 0.77734375, + "2": 0.9287109375 + }, + "theilU": { + "0": 0.9781961093647314, + "1": 0.9738564989903369, + "2": 0.8610713150038116 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "14086f52453775765c9b9babe2defa364fe67cad7b9acd0fed361c92d640c5bb" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6943359375, + "micro_accuracy_known": 0.8079545454545455, + "macro_accuracy_all": 0.7469998871707434, + "macro_accuracy_known": 0.7820155068818719, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.78515625, + "micro_accuracy_known": 0.78515625, + "macro_accuracy_all": 0.8475133631742028, + "macro_accuracy_known": 0.8475133631742028, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9375, + "micro_accuracy_known": 0.9375, + "macro_accuracy_all": 0.8770404492250314, + "macro_accuracy_known": 0.8770404492250314, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7469998871707434, + "1": 0.8475133631742028, + "2": 0.8770404492250314 + }, + "precision": { + "0": 0.5503656752803511, + "1": 0.594654999321666, + "2": 0.47125859874654236 + }, + "recall": { + "0": 0.7469998871707434, + "1": 0.8475133631742028, + "2": 0.8770404492250314 + }, + "f1": { + "0": 0.4762338890172099, + "1": 0.5565543737657069, + "2": 0.47213505392627914 + }, + "micro_accuracy": { + "0": 0.6943359375, + "1": 0.78515625, + "2": 0.9375 + }, + "theilU": { + "0": 0.9755159345941234, + "1": 0.9770101810926982, + "2": 0.8850303971986762 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7820155068818719, + "1": 0.8475133631742028, + "2": 0.8770404492250314 + }, + "precision": { + "0": 0.5785969387755102, + "1": 0.594654999321666, + "2": 0.47125859874654236 + }, + "recall": { + "0": 0.7820155068818719, + "1": 0.8475133631742028, + "2": 0.8770404492250314 + }, + "f1": { + "0": 0.5129236736305954, + "1": 0.5565543737657069, + "2": 0.47213505392627914 + }, + "micro_accuracy": { + "0": 0.8079545454545455, + "1": 0.78515625, + "2": 0.9375 + }, + "theilU": { + "0": 0.9790867956707949, + "1": 0.9770101810926982, + "2": 0.8850303971986762 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "a96dc56e72007031c95601ad61ae52aca00a1915a50754fc905602d789e56125" + } + } + }, + { + "backend": "onnx", + "profile": "padded_rotation", + "views": 3, + "presets": { + "full": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.6279296875, + "micro_accuracy_known": 0.7306818181818182, + "macro_accuracy_all": 0.6911409699115905, + "macro_accuracy_known": 0.7235382028761963, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.7548828125, + "micro_accuracy_known": 0.7548828125, + "macro_accuracy_all": 0.8219699782676466, + "macro_accuracy_known": 0.8219699782676466, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9365234375, + "micro_accuracy_known": 0.9365234375, + "macro_accuracy_all": 0.8641870789194371, + "macro_accuracy_known": 0.8641870789194371, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.6911409699115905, + "1": 0.8219699782676466, + "2": 0.8641870789194371 + }, + "precision": { + "0": 0.4522098092735212, + "1": 0.5272554605887939, + "2": 0.5082427926198062 + }, + "recall": { + "0": 0.6911409699115905, + "1": 0.8219699782676466, + "2": 0.8641870789194371 + }, + "f1": { + "0": 0.37218973066010475, + "1": 0.4743113089162254, + "2": 0.5144778903085138 + }, + "micro_accuracy": { + "0": 0.6279296875, + "1": 0.7548828125, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9864696739007237, + "1": 0.9841850048399564, + "2": 0.8849338442132999 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7235382028761963, + "1": 0.8219699782676466, + "2": 0.8641870789194371 + }, + "precision": { + "0": 0.4773986622383124, + "1": 0.5272554605887939, + "2": 0.5082427926198062 + }, + "recall": { + "0": 0.7235382028761963, + "1": 0.8219699782676466, + "2": 0.8641870789194371 + }, + "f1": { + "0": 0.40040292647846387, + "1": 0.4743113089162254, + "2": 0.5144778903085138 + }, + "micro_accuracy": { + "0": 0.7306818181818182, + "1": 0.7548828125, + "2": 0.9365234375 + }, + "theilU": { + "0": 0.9888442520276529, + "1": 0.9841850048399564, + "2": 0.8849338442132999 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "4396183af33db05856bd225785c25e6bc68dadc2c8e3a05d5e9a3edeee01babb" + }, + "europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.712890625, + "micro_accuracy_known": 0.8295454545454546, + "macro_accuracy_all": 0.7719123421401505, + "macro_accuracy_known": 0.80809573317797, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8134765625, + "micro_accuracy_known": 0.8134765625, + "macro_accuracy_all": 0.8844011564041011, + "macro_accuracy_known": 0.8844011564041011, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9541015625, + "micro_accuracy_known": 0.9541015625, + "macro_accuracy_all": 0.8983042799520978, + "macro_accuracy_known": 0.8983042799520978, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8983042799520978 + }, + "precision": { + "0": 0.5967769675662186, + "1": 0.6498309325364402, + "2": 0.7205006342533562 + }, + "recall": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8983042799520978 + }, + "f1": { + "0": 0.5214694595648482, + "1": 0.6162228233704371, + "2": 0.7275784360193599 + }, + "micro_accuracy": { + "0": 0.712890625, + "1": 0.8134765625, + "2": 0.9541015625 + }, + "theilU": { + "0": 0.9799896119324835, + "1": 0.9856401980529147, + "2": 0.898587274213327 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8983042799520978 + }, + "precision": { + "0": 0.6195315872989173, + "1": 0.6498309325364402, + "2": 0.7205006342533562 + }, + "recall": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8983042799520978 + }, + "f1": { + "0": 0.5560058122966992, + "1": 0.6162228233704371, + "2": 0.7275784360193599 + }, + "micro_accuracy": { + "0": 0.8295454545454546, + "1": 0.8134765625, + "2": 0.9541015625 + }, + "theilU": { + "0": 0.9821468599376443, + "1": 0.9856401980529147, + "2": 0.898587274213327 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "433f0915f14a0d5098170c2c6b736b30539918ff77345a948d32e7a1437541fb" + }, + "north_europe": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.728515625, + "micro_accuracy_known": 0.8477272727272728, + "macro_accuracy_all": 0.7858937788827812, + "macro_accuracy_known": 0.8227325497679115, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8193359375, + "micro_accuracy_known": 0.8193359375, + "macro_accuracy_all": 0.8938961058990507, + "macro_accuracy_known": 0.8938961058990507, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.955078125, + "micro_accuracy_known": 0.955078125, + "macro_accuracy_all": 0.8939163424557017, + "macro_accuracy_known": 0.8939163424557017, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7858937788827812, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "precision": { + "0": 0.6238971458720955, + "1": 0.6953400558572972, + "2": 0.5980668832508124 + }, + "recall": { + "0": 0.7858937788827812, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "f1": { + "0": 0.5508938525685994, + "1": 0.667193195303168, + "2": 0.5989997589031987 + }, + "micro_accuracy": { + "0": 0.728515625, + "1": 0.8193359375, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9785270264033544, + "1": 0.9794440649580853, + "2": 0.9080512895705167 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8227325497679115, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "precision": { + "0": 0.6489564935604769, + "1": 0.6953400558572972, + "2": 0.5980668832508124 + }, + "recall": { + "0": 0.8227325497679115, + "1": 0.8938961058990507, + "2": 0.8939163424557017 + }, + "f1": { + "0": 0.5893105177635809, + "1": 0.667193195303168, + "2": 0.5989997589031987 + }, + "micro_accuracy": { + "0": 0.8477272727272728, + "1": 0.8193359375, + "2": 0.955078125 + }, + "theilU": { + "0": 0.9804364063593483, + "1": 0.9794440649580853, + "2": 0.9080512895705167 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "1f5b8f8268a5c8e2c6e7ef4c2f7b50a43d17f33dd0025b598da5d2115c3275d7" + }, + "europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.712890625, + "micro_accuracy_known": 0.8295454545454546, + "macro_accuracy_all": 0.7719123421401505, + "macro_accuracy_known": 0.80809573317797, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8134765625, + "micro_accuracy_known": 0.8134765625, + "macro_accuracy_all": 0.8844011564041011, + "macro_accuracy_known": 0.8844011564041011, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9541015625, + "micro_accuracy_known": 0.9541015625, + "macro_accuracy_all": 0.8984190817276987, + "macro_accuracy_known": 0.8984190817276987, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8984190817276987 + }, + "precision": { + "0": 0.5942999892264599, + "1": 0.64607665147976, + "2": 0.7183650484276597 + }, + "recall": { + "0": 0.7719123421401505, + "1": 0.8844011564041011, + "2": 0.8984190817276987 + }, + "f1": { + "0": 0.5191428838737127, + "1": 0.6120984549603107, + "2": 0.7260137606551089 + }, + "micro_accuracy": { + "0": 0.712890625, + "1": 0.8134765625, + "2": 0.9541015625 + }, + "theilU": { + "0": 0.9805722083289408, + "1": 0.9866005313830883, + "2": 0.8992486837252452 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8984190817276987 + }, + "precision": { + "0": 0.6168044169129475, + "1": 0.64607665147976, + "2": 0.7183650484276597 + }, + "recall": { + "0": 0.80809573317797, + "1": 0.8844011564041011, + "2": 0.8984190817276987 + }, + "f1": { + "0": 0.5532926475187895, + "1": 0.6120984549603107, + "2": 0.7260137606551089 + }, + "micro_accuracy": { + "0": 0.8295454545454546, + "1": 0.8134765625, + "2": 0.9541015625 + }, + "theilU": { + "0": 0.9828281904110945, + "1": 0.9866005313830883, + "2": 0.8992486837252452 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "83850e1bfed493df1ebed0fc8e2509f6ac9094dcda9d9662c18f16be5f1125bf" + }, + "north_europe_v3": { + "ranks": { + "species": { + "images": 1024, + "known_images": 880, + "list_coverage": 0.859375, + "truth_species_or_taxa": 201, + "micro_accuracy_all": 0.724609375, + "micro_accuracy_known": 0.8431818181818181, + "macro_accuracy_all": 0.7816133790799933, + "macro_accuracy_known": 0.8182515062243679, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 150, + "micro_accuracy_all": 0.8154296875, + "micro_accuracy_known": 0.8154296875, + "macro_accuracy_all": 0.886118328121273, + "macro_accuracy_known": 0.886118328121273, + "abstention_coverage": 1.0 + }, + "family": { + "images": 1024, + "known_images": 1024, + "list_coverage": 1.0, + "truth_species_or_taxa": 15, + "micro_accuracy_all": 0.9560546875, + "micro_accuracy_known": 0.9560546875, + "macro_accuracy_all": 0.8941313962191426, + "macro_accuracy_known": 0.8941313962191426, + "abstention_coverage": 1.0 + } + }, + "all": { + "accuracy": { + "0": 0.7816133790799933, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "precision": { + "0": 0.6198174189850105, + "1": 0.6815029581404561, + "2": 0.5980321652758281 + }, + "recall": { + "0": 0.7816133790799933, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "f1": { + "0": 0.54531096593968, + "1": 0.6485020586629996, + "2": 0.5990432558914092 + }, + "micro_accuracy": { + "0": 0.724609375, + "1": 0.8154296875, + "2": 0.9560546875 + }, + "theilU": { + "0": 0.9783879870872234, + "1": 0.9816632673398754, + "2": 0.9117838595208317 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.8182515062243679, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "precision": { + "0": 0.6445375626212023, + "1": 0.6815029581404561, + "2": 0.5980321652758281 + }, + "recall": { + "0": 0.8182515062243679, + "1": 0.886118328121273, + "2": 0.8941313962191426 + }, + "f1": { + "0": 0.5830756999224906, + "1": 0.6485020586629996, + "2": 0.5990432558914092 + }, + "micro_accuracy": { + "0": 0.8431818181818181, + "1": 0.8154296875, + "2": 0.9560546875 + }, + "theilU": { + "0": 0.98027380370052, + "1": 0.9816632673398754, + "2": 0.9117838595208317 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "source_sha256": "3f96940479c36518495be2c13756837f522087fa7e0eccd6f6c93c51e87f4aa1" + } + } + } + ], + "sample_ids_sha256": "65ba22f9553bf6742d7a83402a5b2dc4e40accafece464ccb9f525127ee17b63", + "samples": 1024 +} diff --git a/docs/assets/mambo-tta-tradeoffs.json b/docs/assets/mambo-tta-tradeoffs.json new file mode 100644 index 0000000..46472d5 --- /dev/null +++ b/docs/assets/mambo-tta-tradeoffs.json @@ -0,0 +1,479 @@ +{ + "quality": [ + { + "backend": "torch", + "profile": "none", + "macro_accuracy": 0.7444257582219089 + }, + { + "backend": "torch", + "profile": "hflip", + "macro_accuracy": 0.7490054272359848 + }, + { + "backend": "torch", + "profile": "five_crop", + "macro_accuracy": 0.6996728719136418 + }, + { + "backend": "torch", + "profile": "ten_crop", + "macro_accuracy": 0.7314062084977246 + }, + { + "backend": "torch", + "profile": "d4", + "macro_accuracy": 0.7776770904913086 + }, + { + "backend": "onnx", + "profile": "none", + "macro_accuracy": 0.7392023947895904 + }, + { + "backend": "onnx", + "profile": "hflip", + "macro_accuracy": 0.7490054272359848 + }, + { + "backend": "onnx", + "profile": "five_crop", + "macro_accuracy": 0.6996728719136418 + }, + { + "backend": "onnx", + "profile": "ten_crop", + "macro_accuracy": 0.7325734492172041 + }, + { + "backend": "onnx", + "profile": "d4", + "macro_accuracy": 0.7776770904913086 + }, + { + "backend": "torch", + "profile": "light_noise", + "macro_accuracy": 0.7310275201968053 + }, + { + "backend": "onnx", + "profile": "light_noise", + "macro_accuracy": 0.7310275201968053 + }, + { + "backend": "torch", + "profile": "brightness", + "macro_accuracy": 0.7466012977108814 + }, + { + "backend": "torch", + "profile": "contrast", + "macro_accuracy": 0.752995488315598 + }, + { + "backend": "torch", + "profile": "gamma", + "macro_accuracy": 0.7475169287325611 + }, + { + "backend": "torch", + "profile": "gaussian_noise", + "macro_accuracy": 0.7539835338440992 + }, + { + "backend": "torch", + "profile": "padded_scale", + "macro_accuracy": 0.7868714438529836 + }, + { + "backend": "torch", + "profile": "mild_blur", + "macro_accuracy": 0.7528041989452045 + }, + { + "backend": "torch", + "profile": "padded_rotation", + "macro_accuracy": 0.7858937788827812 + }, + { + "backend": "onnx", + "profile": "brightness", + "macro_accuracy": 0.7466012977108814 + }, + { + "backend": "onnx", + "profile": "contrast", + "macro_accuracy": 0.7526127864403591 + }, + { + "backend": "onnx", + "profile": "gamma", + "macro_accuracy": 0.7483461161289127 + }, + { + "backend": "onnx", + "profile": "gaussian_noise", + "macro_accuracy": 0.7514959716550446 + }, + { + "backend": "onnx", + "profile": "padded_scale", + "macro_accuracy": 0.7861607117989678 + }, + { + "backend": "onnx", + "profile": "mild_blur", + "macro_accuracy": 0.7528041989452045 + }, + { + "backend": "onnx", + "profile": "padded_rotation", + "macro_accuracy": 0.7858937788827812 + } + ], + "timing": [ + { + "backend": "torch", + "profile": "none", + "batch": 32, + "images_per_second": 130.47672431460305, + "seconds": [ + 0.24525447100313613, + 0.2421915090017137, + 0.2553590109964716 + ], + "median_seconds": 0.24525447100313613, + "p95_seconds": 0.2543485569971381 + }, + { + "backend": "torch", + "profile": "hflip", + "batch": 32, + "images_per_second": 72.44973327692519, + "seconds": [ + 0.44685296500392724, + 0.4359808239969425, + 0.4416855460003717 + ], + "median_seconds": 0.4416855460003717, + "p95_seconds": 0.4463362231035717 + }, + { + "backend": "torch", + "profile": "five_crop", + "batch": 32, + "images_per_second": 31.012842672179232, + "seconds": [ + 0.9923711820010794, + 1.0318305979963043, + 1.068035869000596 + ], + "median_seconds": 1.0318305979963043, + "p95_seconds": 1.0644153419001667 + }, + { + "backend": "torch", + "profile": "ten_crop", + "batch": 32, + "images_per_second": 16.371648930481197, + "seconds": [ + 1.951216731002205, + 1.9545984729993506, + 1.9937593849972473 + ], + "median_seconds": 1.9545984729993506, + "p95_seconds": 1.9898432937974575 + }, + { + "backend": "torch", + "profile": "d4", + "batch": 32, + "images_per_second": 19.648783629371536, + "seconds": [ + 1.6410345309996046, + 1.5830615619997843, + 1.6285995409998577 + ], + "median_seconds": 1.6285995409998577, + "p95_seconds": 1.6397910319996298 + }, + { + "backend": "torch", + "profile": "light_noise", + "batch": 32, + "images_per_second": 48.12195636430361, + "seconds": [ + 0.727293746000214, + 0.6649771209995379, + 0.6605985319984029 + ], + "median_seconds": 0.6649771209995379, + "p95_seconds": 0.7210620835001464 + }, + { + "backend": "torch", + "profile": "brightness", + "batch": 32, + "images_per_second": 45.81318643614692, + "seconds": [ + 0.682609258001321, + 0.720042809000006, + 0.6984888519946253 + ], + "median_seconds": 0.6984888519946253, + "p95_seconds": 0.7178874132994679 + }, + { + "backend": "torch", + "profile": "contrast", + "batch": 32, + "images_per_second": 46.13355564044557, + "seconds": [ + 0.6878478029975668, + 0.6936382759959088, + 0.757374400003755 + ], + "median_seconds": 0.6936382759959088, + "p95_seconds": 0.7510007876029704 + }, + { + "backend": "torch", + "profile": "gamma", + "batch": 32, + "images_per_second": 47.904035785298944, + "seconds": [ + 0.6442106480026268, + 0.6811978339974303, + 0.6680021729989676 + ], + "median_seconds": 0.6680021729989676, + "p95_seconds": 0.679878267897584 + }, + { + "backend": "torch", + "profile": "gaussian_noise", + "batch": 32, + "images_per_second": 45.67379719812919, + "seconds": [ + 0.7022767930029659, + 0.6798076190025313, + 0.7006205299985595 + ], + "median_seconds": 0.7006205299985595, + "p95_seconds": 0.7021111667025253 + }, + { + "backend": "torch", + "profile": "padded_scale", + "batch": 32, + "images_per_second": 54.521301980119496, + "seconds": [ + 0.633180684002582, + 0.5869265560031636, + 0.5804513379989658 + ], + "median_seconds": 0.5869265560031636, + "p95_seconds": 0.6285552712026401 + }, + { + "backend": "torch", + "profile": "mild_blur", + "batch": 32, + "images_per_second": 46.119469432999075, + "seconds": [ + 0.6938501330005238, + 0.6882561009988422, + 0.7521999730015523 + ], + "median_seconds": 0.6938501330005238, + "p95_seconds": 0.7463649890014494 + }, + { + "backend": "torch", + "profile": "padded_rotation", + "batch": 32, + "images_per_second": 41.746439709954565, + "seconds": [ + 0.7837554289944819, + 0.7665324330009753, + 0.7130471830023453 + ], + "median_seconds": 0.7665324330009753, + "p95_seconds": 0.7820331293951313 + }, + { + "backend": "onnx", + "profile": "none", + "batch": 32, + "images_per_second": 101.13692345485899, + "seconds": [ + 0.3329214420009521, + 0.3164027430029819, + 0.29256366500339936 + ], + "median_seconds": 0.3164027430029819, + "p95_seconds": 0.33126957210115504 + }, + { + "backend": "onnx", + "profile": "hflip", + "batch": 32, + "images_per_second": 50.46836941544529, + "seconds": [ + 0.6613259239966283, + 0.5843208910009707, + 0.6340605090008467 + ], + "median_seconds": 0.6340605090008467, + "p95_seconds": 0.6585993824970501 + }, + { + "backend": "onnx", + "profile": "five_crop", + "batch": 32, + "images_per_second": 23.1981994885199, + "seconds": [ + 1.3837044419997255, + 1.3794173990027048, + 1.2910776900025667 + ], + "median_seconds": 1.3794173990027048, + "p95_seconds": 1.3832757377000235 + }, + { + "backend": "onnx", + "profile": "ten_crop", + "batch": 32, + "images_per_second": 11.938286229113231, + "seconds": [ + 2.704058483999688, + 2.641091776000394, + 2.6804517320051673 + ], + "median_seconds": 2.6804517320051673, + "p95_seconds": 2.701697808800236 + }, + { + "backend": "onnx", + "profile": "d4", + "batch": 32, + "images_per_second": 14.328338720285078, + "seconds": [ + 2.1106114759968477, + 2.272936913999729, + 2.233336370998586 + ], + "median_seconds": 2.233336370998586, + "p95_seconds": 2.2689768596996145 + }, + { + "backend": "onnx", + "profile": "light_noise", + "batch": 32, + "images_per_second": 37.46392826629067, + "seconds": [ + 0.8541549560031854, + 0.8520317189977504, + 0.8739216520043556 + ], + "median_seconds": 0.8541549560031854, + "p95_seconds": 0.8719449824042386 + }, + { + "backend": "onnx", + "profile": "brightness", + "batch": 32, + "images_per_second": 36.6971756587782, + "seconds": [ + 0.8695674160044291, + 0.911717947004945, + 0.8720017119994736 + ], + "median_seconds": 0.8720017119994736, + "p95_seconds": 0.9077463235043979 + }, + { + "backend": "onnx", + "profile": "contrast", + "batch": 32, + "images_per_second": 35.692965342059594, + "seconds": [ + 0.94651711100596, + 0.8929979009990348, + 0.8965352049999638 + ], + "median_seconds": 0.8965352049999638, + "p95_seconds": 0.9415189204053604 + }, + { + "backend": "onnx", + "profile": "gamma", + "batch": 32, + "images_per_second": 37.54438552985212, + "seconds": [ + 0.8325451659984537, + 0.8884012240014272, + 0.8523245100004715 + ], + "median_seconds": 0.8523245100004715, + "p95_seconds": 0.8847935526013316 + }, + { + "backend": "onnx", + "profile": "gaussian_noise", + "batch": 32, + "images_per_second": 36.57123727253824, + "seconds": [ + 0.8853307109966408, + 0.8665030389965978, + 0.8750045769993449 + ], + "median_seconds": 0.8750045769993449, + "p95_seconds": 0.8842980975969112 + }, + { + "backend": "onnx", + "profile": "padded_scale", + "batch": 32, + "images_per_second": 38.11493135440417, + "seconds": [ + 0.8444289379986003, + 0.8395659879970481, + 0.8376789320027456 + ], + "median_seconds": 0.8395659879970481, + "p95_seconds": 0.8439426429984451 + }, + { + "backend": "onnx", + "profile": "mild_blur", + "batch": 32, + "images_per_second": 36.05360949104674, + "seconds": [ + 0.9718045689951396, + 0.8875671659989166, + 0.8805470950028393 + ], + "median_seconds": 0.8875671659989166, + "p95_seconds": 0.9633808286955172 + }, + { + "backend": "onnx", + "profile": "padded_rotation", + "batch": 32, + "images_per_second": 34.722319916310404, + "seconds": [ + 0.9328059729959932, + 0.9215974070029915, + 0.9118571529979818 + ], + "median_seconds": 0.9215974070029915, + "p95_seconds": 0.931685116396693 + } + ], + "sources_sha256": { + "local-evidence/mambo-tta-expanded-comparison.json": "5197e197bbca7d1f68e3e764835921c680937503eb4c4196fe69f40ebfff6d58", + "local-evidence/mambo-tta-timing-torch/report.json": "414fbc1345091cd21aac5edc532ea34a6d334259d7db5c73b69a31600310f1d6", + "local-evidence/mambo-tta-timing-onnx/report.json": "85ac6551f6c3be769492177a2e3d16f70905f2b6459e38dc272870efd6554037" + } +} diff --git a/docs/assets/mambo-tta-tradeoffs.svg b/docs/assets/mambo-tta-tradeoffs.svg new file mode 100644 index 0000000..c76d9f6 --- /dev/null +++ b/docs/assets/mambo-tta-tradeoffs.svg @@ -0,0 +1,864 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 66 + + + + + + + + + + + + + 68 + + + + + + + + + + + + + 70 + + + + + + + + + + + + + 72 + + + + + + + + + + + + + 74 + + + + + + + + + + + + + 76 + + + + + + + + + + + + + 78 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 82 + + + + Macro species accuracy (%) + + + + + + + + + + + + + + None + + + + + + + + + + Horizontal flip + + + + + + + + + + D4 rotations/reflections + + + + + + + + + + Padded scale + + + + + + + + + + Padded ±10° rotation + + + + + + + + + + Brightness + + + + + + + + + + Contrast + + + + + + + + + + Gamma + + + + + + + + + + Gaussian noise + + + + + + + + + + Salt-and-pepper noise + + + + + + + + + + Mild blur + + + + + + + + + + Five crops + + + + + + + + + + Ten crops + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fixed 1,024-image qualification subset + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPU · batch 32 · four preparation workers + + + + TTA candidates: quality and inference cost · northern Europe + + + Quality: pinned mini_metrics, all truth, threshold 0; 201 represented species. Exploratory subset, not full-set efficacy. + Speed: RTX 3080 Ti Laptop; one process per backend, one warmup + three observations per policy; decode and CPU results included. + Dots use a restricted accuracy axis for readability. All policies are opt-in; none changes the release default. + + + + + + + + + PyTorch + + + + + + + + ONNX + + + + + + + + + + + + diff --git a/docs/mambo-frequency-comparison.md b/docs/mambo-frequency-comparison.md new file mode 100644 index 0000000..426e83d --- /dev/null +++ b/docs/mambo-frequency-comparison.md @@ -0,0 +1,53 @@ +# Accuracy versus class frequency + +![Macro accuracy by training and evaluation frequency](assets/mambo-frequency-accuracy.svg) + +These curves compare MAMBO v2 with the automatic v3 PyTorch/ONNX paths on the same +58,640 Flemming images. Northern Europe leads; Europe and global use the same +legacy lists in both releases. All 522 truth species remain in the main curves. + +Every bin's macro and micro accuracy is computed by pinned `mini_metrics` +`70cc69adc05362863439277048e06386c1f885e1`, with threshold 0, no optimization, +`simple=True` and `hierarchical=False`. The plot leads with **macro species +accuracy**, giving equal weight to each ground-truth species within a bin. Lines +connect descriptive bins; they are not fitted learning curves. Labels report the +number of species in each bin, and gaps denote empty bins. + +The two axes answer different questions: + +- **Training frequency:** rows per species in the pinned v3 source metadata's + training split, `set` 2–9. The split contains 5,063,857 rows. Validation (`set=1`) + and test (`set=0`) are excluded, with no extra deduplication. This is a common + reference axis for both models, **not verified v2 training exposure**, an epoch + count or a measure of effective exposure under sampling/pretraining. +- **Flemming frequency:** images per truth species in this expert evaluation set. + It describes evaluation support, not abundance in nature or training frequency. + Species with few images have particularly uncertain individual accuracies. + +For northern Europe, v3 improves macro accuracy in every occupied Flemming-support +bin. For species with 1–4 evaluation images, it rises from about **57.2% to 61.9%**; +for 20–99 images, from **74.2% to 77.1%**. The curves are not monotonic. In particular, +the highest occupied training bin contains only six species, so its shape should +not be generalized to common species overall. The 16 species absent from the +training metadata are outside the vocabulary and have zero species accuracy here. + +The [compact data](assets/mambo-frequency-comparison.json) retains bin counts, +image denominators, all/known-truth macro and micro accuracy, per-species support, +source hashes and metric provenance. Known-only results exclude truth outside the +selected vocabulary; the plotted all-truth curves do not. + +## Reproduce + +```sh +python -m dev.releases.mambo_v3.frequency_comparison counts \ + --metadata /path/to/pinned-metadata.parquet --output /path/to/new-counts.json +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.frequency_comparison measure \ + --counts /path/to/new-counts.json --v2 /path/to/v2-full \ + --v3 /path/to/mambo-accelerated-quality --output /path/to/new-frequency.json +python -m dev.releases.mambo_v3.frequency_comparison render \ + --data /path/to/new-frequency.json --output /path/to/charts +``` + +The metadata hash must match `construction.toml`. The measurement step checks +completed prediction reports, CSV hashes and identical image/truth identities. +The rendering step needs only the compact JSON, not images or the large metadata. diff --git a/docs/mambo-loading-scaling.md b/docs/mambo-loading-scaling.md new file mode 100644 index 0000000..15aa9fb --- /dev/null +++ b/docs/mambo-loading-scaling.md @@ -0,0 +1,74 @@ +# Loading and scheduling after GPU acceleration + +**The remaining plateau is partly a loading/scheduling limit.** The synchronous +adapter waits for each batch's preparation before inference. Its preparation +threads do not intentionally run alongside that inference, but the timings include +both costs. A fixed worker count and a larger batch can leave preparation as a +similar per-image cost, even when prepared-input model execution is much faster. + +![Worker count, batch size and experimental lookahead](assets/mambo-loading-scaling.svg) + +The controlled sweep keeps runtime CPU threads at four and varies preparation +workers independently (1/2/4/8), with batches 8/32/64. It uses both backends on the +same 128-image bank, automatic GPU precision and northern Europe. Each cell has +three ordered trials (middle trial reversed), one warmup and three observations. +Trials share a loaded process per backend; these are diagnostic measurements, +not replacements for the three fresh-process release benchmark. This 128-image +bank differs from that benchmark's 32-image bank; compare interventions within +this study. + +At **four preparation workers**, images/s are: + +| Backend | Batch | Preparation alone | Prepared-input runtime | Complete synchronous API | +|---|---:|---:|---:|---:| +| PyTorch | 8 | 216.1 | 235.1 | 98.7 | +| PyTorch | 32 | 223.2 | 343.7 | 129.1 | +| PyTorch | 64 | 224.8 | 344.3 | 131.8 | +| ONNX | 8 | 210.8 | 205.3 | 107.1 | +| ONNX | 32 | 206.5 | 203.3 | 100.5 | +| ONNX | 64 | 170.3 | 208.3 | 90.8 | + +Prepared-input timing includes transfer and completed CPU species scores, but no +loading or hierarchy reduction. These are separately timed boundaries, so their +medians are not additive. Both backends show a prepared-runtime plateau, but well +above the synchronous API's throughput. Increasing workers from four to eight +raises native batch-32 throughput from 129.1 to 134.9 images/s; ONNX rises from +100.5 to 104.0. Batch 64 does not deliver a further useful gain here. + +A bounded **experimental one-batch lookahead**, with 128 images in four batches +of 32, increases throughput from **128.2 to 154.2 images/s** for native and +**99.6 to 155.2** for ONNX at four workers. It prepares the next batch while the +current batch runs, retaining at most two prepared batches. It preserves checked +top-1 predictions. Increasing to eight workers improves native slightly (157.7), +but lowers ONNX to 132.7: this is consistent with loading/inference contention, though scheduling and +laptop variability also affect this small comparison. +These lookahead numbers are five warmed repeats within one process per backend. + +## Deployment implications + +Use `preprocess_workers` / `--preprocess-workers` to tune preparation separately +from ONNX runtime `threads`. It defaults to `threads`, retaining existing behavior. +Native model CPU threads remain caller-controlled. Start with batch 8–32 and four +preparation workers on this laptop; measure before increasing either. Hosts with +fewer cores, quotas, different image sizes or concurrent workloads need their own +settings. The measured paths use a warm filesystem cache, not cold disk throughput. + +Lookahead remains a reproducible experiment, not an automatic production scheduler. +A production option needs bounded cancellation/error propagation, CPU and TTA +contention tests, and installed-runtime qualification. The current API makes no +claim that its synchronous scheduling reaches the model's throughput ceiling. + +## Reproduce + +```sh +python -m dev.releases.mambo_v3.loading_scaling \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --backend torch --output /path/to/mambo-loading-scaling-torch +# Repeat sequentially with --backend onnx and mambo-loading-scaling-onnx. +python -m dev.releases.mambo_v3.loading_charts --root /path/to \ + --output /path/to/charts +``` + +Run without competing CPU/GPU work. [Compact measurements](assets/mambo-loading-scaling.json) +regenerate the chart through `loading_charts --data`; full observations, image +identities, source hashes and hardware snapshots remain in the raw reports. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md new file mode 100644 index 0000000..ebd630c --- /dev/null +++ b/docs/mambo-tta.md @@ -0,0 +1,243 @@ +# Optional outer test-time augmentation + +TTA is an opt-in deployment feature shared by PyTorch and ONNX. View generation +operates on decoded images **before** the ordinary, unchanged preprocessing recipe. +It does not depend on backbone internals, ONNX graph changes, an intermediate crop +size or the selected class list. + +| Profile | Views | Spatial policy | +|---|---:|---| +| `none` | 1 | Ordinary single-view path; default | +| `hflip` | 2 | Original and horizontal reflection | +| `five_crop` | 5 | Original and four corner crops, each 90% of original height/width | +| `ten_crop` | 10 | Five-crop views and their horizontal reflections | +| `d4` | 8 | Rotations of 0/90/180/270 degrees and their horizontal reflections | +| `light_noise` | 3 | Original plus two independently seeded 1% salt-and-pepper views | + +`SaltAndPepper(proportion=0.01, seed=0)` is also available as a public transform. +It uses one RGB-shared black/white pixel mask and an image-keyed seed, so built-in +noise is reproducible across batch sizes and preparation worker counts. It operates +on the decoded source before normal preprocessing; this is not a claim of exact +training-pipeline RNG or noise-placement equivalence. + +These are convenience profiles, not restrictions on the interface. `TTA` accepts +an ordered finite sequence of arbitrary callables. `View` implements fractional +crops, quarter-turn rotations and reflection; arbitrary rotations, scales, color +transforms or other policies can be supplied by a caller. Each callable receives +its own uint8 RGB CHW copy of the decoded image. It can return a CHW array or PIL +image accepted by the existing preprocessing function. Random custom transforms +are the caller's responsibility; built-ins are deterministic. Give custom policies +a descriptive name for output provenance. + +For each image batch, the outer layer decodes once, prepares one view at a time, +and invokes the ordinary runtime. Runtime batches never grow by the view count. +It retains the decoded batch and the current prepared view, not all prepared views. +Host memory also depends on original image dimensions; use smaller batches for +large source images. Species logits are averaged in FP32, then the ordinary class mask, hierarchy and +confidence normalization are applied. This is **logit averaging**, not voting or +averaging already-normalized probabilities. Preset and custom-list semantics stay +aligned. Output metadata records the policy name and view count. + +When requested, each view uses the normal embedding path. Its embeddings are +averaged in FP32 and normalized to unit length; a nonfinite or near-zero mean +raises an error. Averaged embeddings have not been qualified for downstream +retrieval/clustering. The default single-view representation is unchanged. + +## Qualification + +Both automatic GPU backends passed a fixed, seeded **1,024-image / 201-species** +Flemming qualification with all six built-in profiles and all five release evaluation +presets. Metrics use pinned `mini_metrics` at the same revision and threshold-zero +policy as the full release comparison. Species results include all 1,024 images; +880 have truth inside the northern-Europe vocabulary. These are **subset results**, +not directly comparable to the full-set scores or evidence of a universal gain. + +Northern Europe, all truth: + +| Profile | PyTorch macro accuracy | ONNX macro accuracy | PyTorch macro-F1 | ONNX macro-F1 | +|---|---:|---:|---:|---:| +| None | 74.44% | 73.92% | 0.4715 | 0.4693 | +| Horizontal flip | 74.90% | 74.90% | 0.4878 | 0.4863 | +| Five crops | 69.97% | 69.97% | 0.4137 | 0.4137 | +| Ten crops | 73.14% | 73.26% | 0.4472 | 0.4478 | +| D4 rotations/reflections | 77.77% | 77.77% | 0.5137 | 0.5137 | +| Light salt-and-pepper noise | 73.10% | 73.10% | 0.4582 | 0.4582 | + +D4 improves native macro accuracy by 3.33 percentage points in this subset; +crop profiles are worse than single-view inference. Cropping can discard useful +parts of a specimen or its context. These profiles were defined before this +comparison; none is selected as a new default. Small per-image changes can have +visible macro effects when species have very little evaluation support. + +The [compact metrics](assets/mambo-tta-comparison.json) retain all/known-truth +macro and micro metrics at species/genus/family level for every profile, backend +and evaluated list. Full-data TTA efficacy, in-domain behavior and downstream +embedding usefulness remain unmeasured. Both backends passed finite-score checks, +and public prediction/embedding agreement, custom-list and unit-embedding checks +on the first eight qualification images for every profile. The installed ONNX-only +wheel passed ten-crop API/CLI inference offline against a relocated read-only bundle. + +![TTA quality and GPU inference cost](assets/mambo-tta-tradeoffs.svg) + +The [chart data](assets/mambo-tta-tradeoffs.json) retain timing observations. +Throughput includes image decoding, preparation, inference and CPU results on the +RTX 3080 Ti Laptop GPU, batch 32, four preparation workers. These are diagnostic +measurements: one process per backend, one warmup and three observations per policy, +using the same 32-image bank. They are not the full release benchmark. + +| Policy | PyTorch images/s | ONNX images/s | +|---|---:|---:| +| `none` | 130.5 | 101.1 | +| `hflip` | 72.4 | 50.5 | +| `d4` | 19.6 | 14.3 | +| `padded_scale` | 54.5 | 38.1 | +| `padded_rotation` | 41.7 | 34.7 | +| `light_noise` | 48.1 | 37.5 | + +Unit tests cover source-view isolation for mutating custom transforms, transformations +before ordinary preprocessing, bounded calls and ordering, both backend dispatches, +logit aggregation before masking, prediction/embedding consistency, normalized mean +embeddings and explicit rejection of undefined means. Existing preprocessing hashes +remain unchanged. The release code adds no dependency or shared-core modification. + +## Reproduce + +```sh +python -m dev.releases.mambo_v3.qualify_tta \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --backend torch --count 1024 --output /path/to/new-tta-torch +# Repeat with --backend onnx and another output directory. +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ + --source /path/to/new-tta-torch/ten_crop/north_europe/mini_metric.csv \ + --output /path/to/new-tta-torch/ten_crop/north_europe/metrics.json +``` + +Use `qualify_tta --profiles brightness contrast gamma gaussian_noise padded_scale +mild_blur padded_rotation` for the seven additional candidates, with another output +directory. `tta_report --root /path/to/qualification-parent` computes every retained +metric through the pinned package; `--extra-root` combines disjoint profile runs +after checking identical sample identities. + +For a cost sweep, run `qualify_tta --timing-only` separately for each backend, +with `--profiles none hflip five_crop ten_crop d4 light_noise brightness contrast +gamma gaussian_noise padded_scale mild_blur padded_rotation`, using output folders +`mambo-tta-timing-torch` and `mambo-tta-timing-onnx` under one parent directory. +Run sequentially without competing CPU/GPU work. Then render quality and cost: + +```sh +python -m dev.releases.mambo_v3.tta_charts \ + --quality /path/to/combined-tta-metrics.json --root /path/to/timing-parent \ + --output /path/to/charts +# Or regenerate solely from the retained compact data: +python -m dev.releases.mambo_v3.tta_charts \ + --data docs/assets/mambo-tta-tradeoffs.json --output /path/to/charts +``` + +The collector also supports `evaluate collect --tta PROFILE` for a full run. Its +`tta_prepare_infer_seconds` combines preparation and inference; it is a collection +timer, not an isolated speed benchmark. Use fresh outputs and preserve original +splits, fixed lists and the pinned metric policy. Do not tune a policy on Flemming +and then report its selection-set score as an independent validation. + +## Literature-informed candidate space + +The policy space should reflect plausible nuisance variation in specimen images, +not where it is easiest to insert an operation in the model pipeline. Preserving +the visible specimen is a useful design preference for this task. It is not a +claim that every extent-preserving transform improves classification. + +- [Greedy Policy Search (UAI 2020)](https://proceedings.mlr.press/v124/lyzhov20a.html) + evaluates diverse learned TTA policies on image classifiers, including + EfficientNets. It supports considering broader policies and selecting their + composition on separate validation data, rather than assuming a crop/flip list + is sufficient. This release does not implement policy learning. +- [TTAch](https://github.com/qubvel/ttach) demonstrates the community pattern of + wrapping classification with independently composed rotations, reflections, + scales and intensity changes. The release uses that separation of concerns + without adding a PyTorch-only TTA dependency to the portable runtime. +- [Cohen and Giryes (WACV 2024)](https://openaccess.thecvf.com/content/WACV2024/html/Cohen_Simple_Post-Training_Robustness_Using_Test_Time_Augmentations_and_Random_Forest_WACV_2024_paper.html) + explores color, blur, noise and geometric TTA for adversarial robustness with + a learned aggregator. Its [supplement](https://openaccess.thecvf.com/content/WACV2024/supplemental/Cohen_Simple_Post-Training_Robustness_WACV_2024_supplemental.pdf) + specifies brightness, contrast, gamma, blur and Gaussian noise. These motivate + candidate families, not a moth-specific efficacy claim or a reproduction of + that learned method. +- [PlantCLEF 2019](https://ceur-ws.org/Vol-2380/paper_247.pdf) documents multi-scale + mirrored test views in species recognition. It provides relevant precedent; + its cropped views do not establish that cropping is appropriate for these moth + photographs. +- [Better Aggregation in TTA (ICCV 2021)](https://openaccess.thecvf.com/content/ICCV2021/html/Shanmugam_Better_Aggregation_in_Test-Time_Augmentation_ICCV_2021_paper.html) + studies aggregation and changes in individual predictions. Aggregation itself + is therefore an experimental choice; this release documents its fixed logit + mean and does not claim it is optimal. + +The following additional **three-view candidates** use the original view plus two +perturbations, through ordinary public `TTA` callables in +[tta_candidates.py](../dev/releases/mambo_v3/tta_candidates.py): + +| Candidate | Two additional views | Rationale for this task | +|---|---|---| +| Brightness | Factors 0.9 / 1.1 | Exposure variation; same spatial region | +| Contrast | Factors 0.9 / 1.1 | Illumination/contrast variation without moving the specimen | +| Gamma | Exponents 0.9 / 1.1 | Moderate nonlinear tone changes | +| Gaussian noise | Two image-keyed seeds; sigma 0.005 in [0,1] | Sensor-like perturbation; unchanged extent | +| Mild blur | Gaussian radii 0.25 / 0.5 source pixels | Weak sharpness variation; may suppress fine diagnostic texture | +| Padded scale | Edge padding of 8% / 15% on each side | Smaller specimen scale without cutting away source regions | +| Padded rotation | −10 / +10 degrees; expanded canvas and 8% padding | Small orientation changes without cutting off rotated corners | + +These magnitudes are deliberately specified starting candidates, not claimed +optima. The small-rotation policy also adds padding; its result alone cannot +isolate rotation from framing/scale effects. Padding changes border statistics and apparent scale; color and noise can +change diagnostic detail even when they preserve image extent. The normal model +recipe still applies to every view. The added padding is large enough to retain +the expanded source canvas through that recipe's center crop. Unlike quarter +turns, arbitrary rotations require interpolation. + +All seven candidates passed the same 1,024-image qualification through both +backends, including the public custom-list and embedding checks. Northern Europe, +all truth, using the same pinned mini_metrics policy: + +| Candidate | PyTorch macro accuracy | ONNX macro accuracy | PyTorch macro-F1 | ONNX macro-F1 | +|---|---:|---:|---:|---:| +| Brightness | 74.66% | 74.66% | 0.4732 | 0.4732 | +| Contrast | 75.30% | 75.26% | 0.4821 | 0.4820 | +| Gamma | 74.75% | 74.83% | 0.4750 | 0.4769 | +| Gaussian Noise | 75.40% | 75.15% | 0.4877 | 0.4852 | +| Padded Scale | 78.69% | 78.62% | 0.5328 | 0.5307 | +| Mild Blur | 75.28% | 75.28% | 0.4787 | 0.4787 | +| Padded Rotation | 78.59% | 78.59% | 0.5509 | 0.5509 | + +These results favor padded scale/rotation views in this subset, with smaller gains +from several photometric/noise policies. They do not establish a general ranking +or separate padding from rotation effects. Every tested result is retained, +including the worse crop and salt-and-pepper profiles; none is silently selected +as a default. All 13 policies were tested on the same fixed subset. The additional +candidates are reproducible public-interface examples, not extra CLI profiles. + +Keep D4 and other whole-image policies prominent in consumer documentation; retain +crop profiles as optional experimental comparisons. Strong hue changes, aggressive +blur, erasing/Cutout and unbounded Cartesian products are lower-priority candidates +here because they alter diagnostic colors/details or rapidly multiply inference +cost. This priority is a task-specific inference from the literature and current +measurements, not a universal TTA ranking. A compact mixed policy can be tested +next on independent validation data; full Flemming and UCloud evaluation must +remain separate from policy selection. + +A portable custom policy can use existing Pillow functionality directly: + +```python +from PIL import Image, ImageEnhance +from mambo_deploy import Predictor, TTA, View + + +def dimmer(chw): + image = Image.fromarray(chw.transpose(1, 2, 0)) + return ImageEnhance.Brightness(image).enhance(0.9) + + +policy = TTA((View(), dimmer), name="original-plus-dimmer") +predictor = Predictor(bundle, backend="onnx", tta=policy) +``` + +This example illustrates composition; its two-view combination is not the +three-view brightness policy measured above. The measured policies can be reproduced +from the linked candidate definitions without depending on any training module. diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index f20b0eb..98d61b7 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -612,3 +612,11 @@ Flemming evaluation; BF16 has subset qualification. No shared-core changes or new model artifacts were needed. The broader [metric baseline](mambo-release-comparison.md) now leads with macro scores and retains all/known-truth results at every rank. + +The release adapter now also supports [outer TTA](mambo-tta.md), with named +profiles and custom decoded-image transforms, plus independent preparation workers. +[Class-frequency curves](mambo-frequency-comparison.md) retain both training and +Flemming support axes. The [worker-scaling study](mambo-loading-scaling.md) confirms +remaining loading/scheduling limits; one-batch lookahead is experimental and needs +production cancellation/error and CPU/TTA contention qualification before adoption. +TTA is opt-in and has subset evidence; full-data TTA efficacy remains unmeasured. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 9df38a8..f34718a 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -238,3 +238,136 @@ def forward(self, x): assert scores.dtype == embeddings.dtype == np.float32 assert predictor._torch_model.classifier is original np.testing.assert_array_equal(scores, embeddings) + + +@pytest.mark.parametrize("backend", ["torch", "onnx"]) +def test_tta_averages_leaf_logits_before_masking_and_normalizes_embeddings(bundle, monkeypatch, backend): + predictor = Predictor(bundle, backend=backend, tta="hflip", class_list=["a", "c"], batch_size=2, preprocess_workers=1) + seen = [] + + def runtime(images, embeddings): + seen.append(images.copy()) + right = images[:, 0, 0, -1] > images[:, 0, 0, 0] + scores = np.array([[4, 9, 0] if x else [0, 1, 6] for x in right], dtype=np.float32) + vectors = np.array([[1, 0] if x else [0, 1] for x in right], dtype=np.float32) + return scores, vectors if embeddings else None + + monkeypatch.setattr(predictor, "_" + backend, runtime) + image = np.tile(np.arange(8, dtype=np.uint8), (3, 8, 1)) + result, embedding = predictor.predict_with_embeddings([image] * 3) + assert [len(x) for x in seen] == [2, 2, 1, 1] + np.testing.assert_array_equal(seen[1][0], preprocess(image[..., ::-1])) + np.testing.assert_array_equal(result.raw_logits[0], [[2, 3]] * 3) + np.testing.assert_allclose(embedding, np.full((3, 2), 1 / np.sqrt(2)), rtol=1e-6) + assert result.labels == predictor.predict([image] * 3).labels + assert result.metadata["tta"] == "hflip" + assert result[0].label == ("c", "g1", "f0") + + +def test_tta_rejects_undefined_embedding_and_invalid_options(bundle, monkeypatch): + with pytest.raises(ValueError, match="tta"): + Predictor(bundle, tta="random") + with pytest.raises(ValueError, match="preprocess_workers"): + Predictor(bundle, preprocess_workers=0) + predictor = Predictor(bundle, tta="hflip", threads=2, preprocess_workers=1) + assert predictor.threads == 2 and predictor.preprocess_workers == 1 + monkeypatch.setattr(predictor, "_onnx", lambda x, e: (np.ones((len(x), 3)), np.zeros((len(x), 2)))) + with pytest.raises(RuntimeError, match="undefined mean embedding"): + predictor.predict_with_embeddings(np.zeros((3, 4, 4), dtype=np.uint8)) + + +def test_tta_views_apply_before_the_unchanged_recipe(): + from deployment.mambo_deploy import TTA, View + from deployment.mambo_deploy.augmentation import resolve_tta + + image = np.random.default_rng(31).integers(0, 256, (3, 157, 239), dtype=np.uint8) + views = resolve_tta("five_crop").transforms + np.testing.assert_array_equal(preprocess(views[0](image)), preprocess(image)) + assert len({preprocess(view(image)).tobytes() for view in views}) == 5 + crop = View(crop=(0, 0, 0.5, 1), quarter_turns=1) + assert crop(image).shape == (3, 239, 78) + assert TTA([crop]).transforms == (crop,) + with pytest.raises(ValueError, match="crop"): + View(crop=(0, 0, 0, 1)) + with pytest.raises(ValueError, match="callable"): + TTA([]) + + +@pytest.mark.parametrize(("tta", "views"), [("five_crop", 5), ("ten_crop", 10), ("d4", 8)]) +def test_multicrop_tta_bounds_calls_and_shares_prediction_embedding_path(bundle, monkeypatch, tta, views): + p = Predictor(bundle, tta=tta, batch_size=2, preprocess_workers=2) + observed = [] + + def runtime(x, embeddings): + observed.append(x.copy()) + signal = x.mean(axis=(1, 2, 3)) + return np.stack([signal, signal * 2, -signal], axis=1), np.tile(np.array([1, 0], np.float32), (len(x), 1)) + + monkeypatch.setattr(p, "_onnx", runtime) + images = [np.full((3, 20, 30), 30 + i * 50, np.uint8) for i in range(3)] + result, vectors = p.predict_with_embeddings(images) + assert [len(x) for x in observed] == [2] * views + [1] * views + expected = np.mean([x.mean(axis=(1, 2, 3)) for x in observed[:views]], axis=0) + np.testing.assert_allclose(result.raw_logits[0][:2, 0], expected, rtol=1e-6) + assert result.labels == p.predict(images).labels + np.testing.assert_array_equal(vectors, [[1, 0]] * 3) + + +def test_custom_tta_transforms_are_isolated_and_precede_preprocessing(bundle, monkeypatch): + from deployment.mambo_deploy import TTA, View + + def darken(image): + image[:] = 0 + return image + + p = Predictor(bundle, tta=TTA((darken, View()), name="dark-and-original")) + seen = [] + + def runtime(images, embeddings): + seen.append(images.copy()) + return np.zeros((len(images), 3), dtype=np.float32), None + + monkeypatch.setattr(p, "_onnx", runtime) + source = np.full((3, 7, 11), 255, dtype=np.uint8) + result = p.predict(source) + np.testing.assert_array_equal(source, np.full_like(source, 255)) + np.testing.assert_array_equal(seen[0][0], preprocess(np.zeros_like(source))) + np.testing.assert_array_equal(seen[1][0], preprocess(source)) + assert result.metadata["tta"] == "dark-and-original" + assert result.metadata["tta_views"] == 2 + + +def test_noise_preserves_extent_channels_and_reproducibility(): + from deployment.mambo_deploy import SaltAndPepper + + source = np.full((3, 64, 96), 127, dtype=np.uint8) + noise = SaltAndPepper(proportion=0.2, seed=42) + first = noise(source) + np.testing.assert_array_equal(first, noise(source)) + np.testing.assert_array_equal(first[0], first[1]) + assert first.shape == source.shape and first.dtype == np.uint8 + assert set(np.unique(first)) == {0, 127, 255} + np.testing.assert_array_equal(source, np.full_like(source, 127)) + np.testing.assert_array_equal(SaltAndPepper(proportion=0)(source), source) + assert not np.array_equal(first, SaltAndPepper(proportion=0.2, seed=43)(source)) + with pytest.raises(ValueError, match="proportion"): + SaltAndPepper(proportion=-0.1) + + +def test_whole_image_candidates_preserve_source_and_prepare_deterministically(): + from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy, pad, rotate + + image = np.random.default_rng(12).integers(0, 256, (3, 19, 31), dtype=np.uint8) + original = image.copy() + padded = pad(image, 0.08) + np.testing.assert_array_equal(padded[:, 2:21, 3:34], image) + rotated = rotate(image, 10) + assert rotated.shape[1] > image.shape[1] and rotated.shape[2] > image.shape[2] + for name in CANDIDATES: + policy = candidate_policy(name) + assert len(policy.transforms) == 3 + for transform in policy.transforms: + actual = preprocess(transform(image.copy())) + assert actual.shape == (3, 384, 384) and np.isfinite(actual).all() + np.testing.assert_array_equal(actual, preprocess(transform(image.copy()))) + np.testing.assert_array_equal(image, original) From 2607061e933e097fd321f6da3cee9c8af822857e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 00:19:41 +0200 Subject: [PATCH 035/221] feat: choose padded-scale recipe when enabling deployment TTA --- deployment/mambo_deploy/__init__.py | 4 +- deployment/mambo_deploy/augmentation.py | 27 +++++++++++- deployment/mambo_deploy/cli.py | 11 ++++- dev/releases/mambo_v3/benchmark.py | 5 ++- .../mambo_v3/benchmark_acceleration.py | 3 ++ dev/releases/mambo_v3/evaluate.py | 3 +- dev/releases/mambo_v3/run_local.py | 4 +- tests/releases/test_deployment.py | 42 +++++++++++++++++++ 8 files changed, 90 insertions(+), 9 deletions(-) diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py index cd1344c..2aca6b3 100644 --- a/deployment/mambo_deploy/__init__.py +++ b/deployment/mambo_deploy/__init__.py @@ -1,7 +1,7 @@ """Offline model-bundle inference; importing this package does not import PyTorch.""" -from .augmentation import TTA, SaltAndPepper, View +from .augmentation import TTA, EdgePad, SaltAndPepper, View from .predictor import Predictor from .results import Prediction, PredictionItem -__all__ = ["Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] +__all__ = ["EdgePad", "Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index b201113..84d7c1c 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -33,6 +33,22 @@ def __call__(self, image): return result[..., ::-1] if self.hflip else result +@dataclass(frozen=True) +class EdgePad: + """Pad each source edge by a fraction of its axis, preserving original pixels.""" + + fraction: float + + def __post_init__(self): + if not np.isfinite(self.fraction) or self.fraction < 0: + raise ValueError("Padding fraction must be finite and nonnegative") + + def __call__(self, image): + height, width = image.shape[1:] + y, x = int(np.ceil(height * self.fraction)), int(np.ceil(width * self.fraction)) + return np.pad(image, ((0, 0), (y, y), (x, x)), mode="edge") + + @dataclass(frozen=True) class SaltAndPepper: """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" @@ -72,17 +88,24 @@ def __post_init__(self): raise ValueError("TTA name must be a nonempty string") -PROFILES = ("none", "hflip", "five_crop", "ten_crop", "d4", "light_noise") +DEFAULT_TTA = "padded_scale" +PROFILES = ("none", "padded_scale", "hflip", "five_crop", "ten_crop", "d4", "light_noise") def resolve_tta(value): + if value is True: + value = DEFAULT_TTA + elif value is False: + value = "none" if isinstance(value, TTA): return value if value not in PROFILES: raise ValueError(f"tta must be a TTA object or one of {PROFILES}") if value == "none": return None - if value == "hflip": + if value == "padded_scale": + views = (View(), EdgePad(0.08), EdgePad(0.15)) + elif value == "hflip": views = (View(), View(hflip=True)) elif value == "light_noise": views = (View(), SaltAndPepper(seed=0), SaltAndPepper(seed=1)) diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py index 33604f3..841d062 100644 --- a/deployment/mambo_deploy/cli.py +++ b/deployment/mambo_deploy/cli.py @@ -6,7 +6,7 @@ import numpy as np -from .augmentation import PROFILES +from .augmentation import DEFAULT_TTA, PROFILES from .predictor import Predictor @@ -22,7 +22,14 @@ def run(default_backend="onnx", default_device="cpu"): parser.add_argument("--batch-size", type=int, default=8) parser.add_argument("--threads", type=int, default=2) parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="auto") - parser.add_argument("--tta", choices=PROFILES, default="none") + parser.add_argument( + "--tta", + nargs="?", + const=DEFAULT_TTA, + choices=PROFILES, + default="none", + help="Enable TTA (default recipe: padded_scale), or choose a recipe", + ) parser.add_argument("--preprocess-workers", type=int, help="Preparation threads; defaults to --threads") parser.add_argument("--topk", type=int, default=1) parser.add_argument("--threshold", type=float, default=0) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 440b595..4ed16c9 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -14,6 +14,7 @@ import numpy as np from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES from deployment.mambo_deploy.preprocessing import preprocess from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluate import runtime_settings @@ -112,7 +113,7 @@ def benchmark(args): "boundaries": { "end_to_end": "image path through CPU result/embedding; threaded decode/preprocess/transfer/reduction included", "preprocessing": "serial preparation diagnostic; public API uses threads for batches", - "prepared": "preprocessed CPU tensor through CPU leaf scores/embeddings; transfers included; no decode or reduction", + "prepared": "single-view diagnostic (also with TTA): CPU input to CPU output; transfers included; no decode/reduction", "cold": "first image after Predictor construction; lazy model/session load included; runtime import/config measured separately", }, } @@ -128,6 +129,7 @@ def benchmark(args): threads=args.threads, batch_size=max(args.batches), precision=args.precision, + tta=getattr(args, "tta", "none"), ) report["effective_precision"] = predictor.effective_precision report["runtime"].update( @@ -192,6 +194,7 @@ def main(): parser.add_argument("--backend", choices=["torch", "onnx"], required=True) parser.add_argument("--device", default="cpu") parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") parser.add_argument("--embeddings", action="store_true") parser.add_argument("--threads", type=int, default=4) parser.add_argument("--batches", nargs="+", type=int, default=[1, 8, 32]) diff --git a/dev/releases/mambo_v3/benchmark_acceleration.py b/dev/releases/mambo_v3/benchmark_acceleration.py index 221976c..1257250 100644 --- a/dev/releases/mambo_v3/benchmark_acceleration.py +++ b/dev/releases/mambo_v3/benchmark_acceleration.py @@ -6,6 +6,7 @@ import subprocess from pathlib import Path +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES from dev.releases.mambo_v3.evaluation_data import write_json @@ -13,6 +14,7 @@ def run(args): args.output.mkdir(parents=True, exist_ok=False) report = {"status": "running", "completed": [], "commands": []} shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] + shared += ["--tta", args.tta] variants = [(backend, device) for device in ("cuda:0", "cpu") for backend in ("torch", "onnx")] env = dict(os.environ, CUDA_VISIBLE_DEVICES="0", OMP_NUM_THREADS="4", MKL_NUM_THREADS="4", OPENBLAS_NUM_THREADS="1", PYTHONHASHSEED="0") try: @@ -64,4 +66,5 @@ def run(args): parser = argparse.ArgumentParser(description=__doc__) for name in ("python", "bundle", "manifest", "root", "output"): parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 2e2d528..12b2f61 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -12,6 +12,7 @@ import numpy as np from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES from deployment.mambo_deploy.preprocessing import preprocess from deployment.mambo_deploy.results import Prediction, hierarchy from dev.benchmarks.inference.onnx_inference import file_hash @@ -166,7 +167,7 @@ def main(): run.add_argument("--backend", choices=["torch", "onnx"], required=True) run.add_argument("--device", default="cpu") run.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") - run.add_argument("--tta", choices=["none", "hflip", "five_crop", "ten_crop", "d4", "light_noise"], default="none") + run.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") run.add_argument("--embeddings", action="store_true") run.add_argument("--count", type=int) run.add_argument("--seed", type=int, default=20260923) diff --git a/dev/releases/mambo_v3/run_local.py b/dev/releases/mambo_v3/run_local.py index 7e58b7a..2e34e9c 100644 --- a/dev/releases/mambo_v3/run_local.py +++ b/dev/releases/mambo_v3/run_local.py @@ -8,12 +8,13 @@ import sys from pathlib import Path +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES from dev.releases.mambo_v3.evaluation_data import write_json def plan(args): shared = ["--bundle", str(args.bundle.resolve()), "--manifest", str(args.manifest.resolve()), "--root", str(args.root.resolve())] - shared += ["--precision", args.precision] + shared += ["--precision", args.precision, "--tta", getattr(args, "tta", "none")] jobs = [] if args.phase in ("qualification", "full"): variants = ( @@ -80,6 +81,7 @@ def main(): parser.add_argument("--python", type=Path, default=Path(sys.executable)) parser.add_argument("--count", type=int, default=256) parser.add_argument("--precision", choices=["auto", "fp32", "fp16", "bf16", "tf32"], default="fp32") + parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") args = parser.parse_args() args.output.mkdir(parents=True, exist_ok=False) jobs = plan(args) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index f34718a..2c75599 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -371,3 +371,45 @@ def test_whole_image_candidates_preserve_source_and_prepare_deterministically(): assert actual.shape == (3, 384, 384) and np.isfinite(actual).all() np.testing.assert_array_equal(actual, preprocess(transform(image.copy()))) np.testing.assert_array_equal(image, original) + + +@pytest.mark.parametrize("option", [True, "padded_scale"]) +def test_enabled_tta_uses_qualified_padded_recipe(bundle, monkeypatch, option): + from dev.releases.mambo_v3.tta_candidates import candidate_policy + + p = Predictor(bundle, tta=option, preprocess_workers=1) + image = np.random.default_rng(18).integers(0, 256, (3, 23, 41), dtype=np.uint8) + observed = [] + + def runtime(images, embeddings): + observed.append(images[0].copy()) + return np.ones((len(images), 3), np.float32), None + + monkeypatch.setattr(p, "_onnx", runtime) + result = p.predict(image) + expected = candidate_policy("padded_scale") + assert len(observed) == 3 + for actual, transform in zip(observed, expected.transforms, strict=True): + np.testing.assert_array_equal(actual, preprocess(transform(image))) + assert result.metadata["tta"] == "padded_scale" and result.metadata["tta_views"] == 3 + assert Predictor(bundle).tta is None and Predictor(bundle, tta=False).tta is None + + +@pytest.mark.parametrize( + ("options", "recipe"), [([], None), (["--tta"], "padded_scale"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] +) +def test_cli_tta_optional_recipe(bundle, monkeypatch, options, recipe): + from deployment.mambo_deploy import cli + + class Parsed(Exception): + pass + + def capture(*args, **kwargs): + p = Predictor(*args, **kwargs) + assert (p.tta.name if p.tta else None) == recipe + raise Parsed + + monkeypatch.setattr(cli, "Predictor", capture) + monkeypatch.setattr("sys.argv", ["mambo_predict", "-i", "example.jpg", "--bundle", str(bundle), *options]) + with pytest.raises(Parsed): + cli.run() From 6a5b81b32df4ebce202dd1a5c0431469abdf7e34 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 01:33:57 +0200 Subject: [PATCH 036/221] docs: compare release defaults with full TTA evaluation --- deployment/README.md | 148 +- dev/releases/mambo_v3/benchmark.py | 2 +- dev/releases/mambo_v3/defaults_report.py | 226 ++ docs/assets/mambo-defaults-comparison.json | 3525 ++++++++++++++++++ docs/assets/mambo-defaults-memory.svg | 484 +++ docs/assets/mambo-defaults-metrics.csv | 139 + docs/assets/mambo-defaults-quality-all.svg | 1383 +++++++ docs/assets/mambo-defaults-quality-known.svg | 1338 +++++++ docs/assets/mambo-defaults-speed.svg | 940 +++++ docs/mambo-deployment-defaults.md | 158 + docs/mambo-frequency-comparison.md | 2 +- docs/mambo-tta.md | 35 +- docs/ucloud-model-release-roadmap.md | 5 +- 13 files changed, 8275 insertions(+), 110 deletions(-) create mode 100644 dev/releases/mambo_v3/defaults_report.py create mode 100644 docs/assets/mambo-defaults-comparison.json create mode 100644 docs/assets/mambo-defaults-memory.svg create mode 100644 docs/assets/mambo-defaults-metrics.csv create mode 100644 docs/assets/mambo-defaults-quality-all.svg create mode 100644 docs/assets/mambo-defaults-quality-known.svg create mode 100644 docs/assets/mambo-defaults-speed.svg create mode 100644 docs/mambo-deployment-defaults.md diff --git a/deployment/README.md b/deployment/README.md index e0799fb..cefacb9 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -62,7 +62,7 @@ metadata; the CLI exposes the same `--precision` option. Portable results use NumPy arrays; embeddings are float32 `[images, 1280]` CPU arrays from the normalized preclassification stage. Prediction-only ONNX uses the original graph; requesting embeddings selects the existing embedding graph. -Each image uses one backbone pass. `topk` ranks each hierarchy level independently; +Without TTA, each image uses one backbone pass. `topk` ranks each hierarchy level independently; a tuple is not necessarily an ancestral path. `indices` refer to the filtered rank vocabulary; `global_indices` refer to the full model vocabulary. @@ -93,106 +93,64 @@ Directory input recursively discovers images in sorted order. Outputs are `predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. Use `--class-list`, `--batch-size`, `--topk` and `--threads` as needed. `--threads` bounds parallel image preparation and controls ONNX CPU threads; native callers -configure PyTorch model threads separately. Use `--threads 1` for serial preparation. The standalone +configure PyTorch model threads separately. Use `--preprocess-workers 1` for serial preparation. The standalone wheel defaults to ONNX/CPU; the training-wheel entry point retains native/CUDA defaults, so explicit backend/device arguments are recommended in scripts. ## Optional test-time augmentation -TTA runs as an outer process: transform the decoded image, use the normal -preprocessing and backend, then average species logits before preset filtering -and hierarchical reduction. It is **off by default**. +TTA is off by default. Simply enable it to use the recommended recipe: ```python -predictor = Predictor(bundle, backend="onnx", model="north_europe", tta="d4") -result = predictor.predict(images) +predictor = Predictor(bundle, backend="onnx", model="north_europe", tta=True) +# CLI: append --tta ``` -Whole-image profiles are `hflip` (2 views), `d4` (8 rotations/reflections), -and `light_noise` (original + two seeded 1% salt-and-pepper views). Experimental -`five_crop` and `ten_crop` profiles are also available; these can remove diagnostic -parts of a specimen and performed worse in the local subset comparison. Each model call stays within `batch_size`; images -are decoded once per batch. More views cost more inference and preparation. -Embeddings are the normalized mean of the view embeddings, not the single-view -representation. TTA quality qualification and exact semantics are in the -[TTA guide](../docs/mambo-tta.md). - -Custom policies use the same outer layer, independently of backend or preset: - -```python -from mambo_deploy import TTA, SaltAndPepper, View - -policy = TTA((View(), View(quarter_turns=1), SaltAndPepper(seed=7)), name="orientation-noise") -predictor = Predictor(bundle, backend="torch", tta=policy) -``` - -A policy can also contain your own callables: each receives a separate decoded -uint8 CHW image and returns an image accepted by the normal preprocessing API. -The CLI supports the named profiles through `--tta`. - -## Qualification - -The release comparisons below use **TTA off**. Augmented results are reported -separately in the [TTA guide](../docs/mambo-tta.md). - -In the strict FP32 reference evaluation on all 58,640 Flemming images, PyTorch and -ONNX return identical top-1 species, -genus and family labels for the full list and both legacy/updated European presets. -Northern Europe reaches **71.24% macro species accuracy** (v2: **68.52%**) and -**70.79% micro species accuracy overall** (**82.04%** on images -whose true species is in the list), versus **68.71% overall for MAMBO_v2**. Updated -northern Europe reaches **70.32% micro accuracy**. All predictive metrics use pinned `mini_metrics`, with threshold 0 and no -optimization. Unknown species remain in the overall result. -CPU/GPU and prediction/embedding variants agree on a fixed 256-image subset; -this checks prediction consistency, not downstream embedding usefulness. - -On an i7-12800H / RTX 3080 Ti Laptop GPU, with four CPU threads and the legacy -northern-Europe preset, the updated defaults deliver: - -| Runtime | CPU, batch 1 | GPU, batch 1 | GPU, batch 8 | GPU, batch 32 | -|---|---:|---:|---:|---:| -| MAMBO v2 (CPU input adapter) | 1.3 | 45.2 | 44.8 | 83.5 | -| V3 ONNX auto | 10.1 | 46.7 | 114.1 | 111.3 | -| V3 PyTorch auto | 5.7 | 29.8 | 126.7 | 136.2 | - -All speeds are **images per second**, including decoding, preparation and result -handling. GPU batch-32 throughput improves by **2.62× ONNX / 3.06× PyTorch** over -the original v3 FP32 pipeline. CPU gains are not uniform. First prediction including -loading takes about 0.37 s CPU / 1.46 s GPU for ONNX, versus 42–43 s for PyTorch; -reuse a loaded predictor. ONNX uses less host memory and suits lightweight -integrations; native PyTorch suits existing callers and persistent GPU workers. - -Both automatic GPU variants were evaluated on all 58,640 Flemming images. Northern- -Europe macro species accuracy is **71.25% PyTorch / 71.24% ONNX**; macro-F1 is -**0.2543** for both. The largest macro-accuracy change from FP32 across five presets, -three ranks and both truth populations is under 0.094 percentage points. BF16 has -4,096-image qualification only. Small cross-precision label differences are expected. - -The unthresholded, all-truth **species** comparison is: - -| Preset | V2 macro accuracy | V3 PyTorch / ONNX | V2 macro-F1 | V3 PyTorch / ONNX | -|---|---:|---:|---:|---:| -| Northern Europe | 68.52% | 71.25% / 71.24% | 0.2575 | 0.2543 / 0.2543 | -| Europe | 66.04% | 69.05% / 69.06% | 0.2000 | 0.1997 / 0.1997 | -| Global | 57.21% | 58.01% / 58.03% | 0.0899 | 0.0973 / 0.0973 | - -The [frequency curves](../docs/mambo-frequency-comparison.md) compare both training -metadata counts and Flemming image counts. The [loading study](../docs/mambo-loading-scaling.md) -separates preparation from prepared-input inference: the remaining plateau is partly -loading/scheduling, not solely model throughput. `preprocess_workers` (CLI: -`--preprocess-workers`) controls preparation separately from ONNX runtime `threads`; -it defaults to the latter. Tune workers with batch size and CPU limits rather than -assuming more threads always help. - -The [accelerated comparison and charts](../docs/mambo-accelerated-deployment.md) -cover speed, memory, all/known-truth metrics and updated European lists. The -[original v2/v3 comparison](../docs/mambo-release-comparison.md) preserves the FP32 -reference and explains the metric definitions. V3 improves northern-Europe macro -accuracy over v2, but v2 retains slightly higher macro-F1 there and higher global -micro species accuracy. Choose presets for the deployment region; see the -[preset catalogue](../docs/model-presets.md). - -The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the -reproduction commands and UCloud handoff. In-domain evaluation, other operating -systems and publication/license review remain open. Small ONNX numerical -differences are expected even where top-1 labels agree. +This selects `padded_scale`: the original plus views with 8% and 15% edge padding. +It had the highest exploratory macro accuracy and lower cost than D4 or padded +rotations. Set `tta="padded_scale"` to pin the recipe explicitly; `tta=False` or +`--tta none` disables it. Result metadata records the resolved recipe and view count. + +Views use ordinary preprocessing and the chosen backend. Species logits are +averaged before preset filtering and hierarchy reduction; embeddings are the +normalized mean of view embeddings. Each model call stays within `batch_size`. +The [TTA guide](../docs/mambo-tta.md) documents costs, explicit alternative recipes +and custom image transforms through the same outer interface. + +## Release comparison + +Results below use all **58,640 Flemming images / 522 truth species**, including +species outside the selected vocabulary. All predictive metrics use pinned +`mini_metrics`, threshold zero and no threshold optimization. The main table uses +the northern-Europe legacy list, shared by V2 and V3; charts also show Europe and +global. TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; +CPU timings use FP32. + +| Pipeline | Macro accuracy | Macro-F1 | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +|---|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 68.52% | 0.2575 | 1.26 | 45.2 | 44.8 | 83.5 | +| V3 PyTorch | 71.25% | 0.2543 | 5.70 | 29.8 | 126.7 | 136.2 | +| V3 ONNX | 71.24% | 0.2543 | 10.08 | 46.7 | 114.1 | 111.3 | +| V3 PyTorch + TTA | 73.95% | 0.2935 | 2.29 | 8.5 | 42.7 | 50.4 | +| V3 ONNX + TTA | 73.98% | 0.2944 | 3.56 | 16.8 | 41.7 | 39.4 | + +Speed is **images per second**, including decoding through completed CPU results, +on an i7-12800H / RTX 3080 Ti Laptop. Three fresh-process trials use the same image +bank and four preparation/runtime CPU threads; V2 and ordinary V3 reuse retained +measurements. V2 CPU uses its documented float32 input adapter. + +![Full Flemming species metrics](../docs/assets/mambo-defaults-quality-all.svg) + +![CPU and GPU throughput](../docs/assets/mambo-defaults-speed.svg) + +The [full comparison](../docs/mambo-deployment-defaults.md) includes memory charts, +all/known-truth metrics at every rank, updated European presets and reproducible +commands. The [frequency curves](../docs/mambo-frequency-comparison.md) compare +training and Flemming support. The [loading study](../docs/mambo-loading-scaling.md) +explains remaining scheduling limits; `preprocess_workers` / `--preprocess-workers` +tunes preparation separately from ONNX runtime `threads` and defaults to it. + +Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. +The recipe was selected on a Flemming subset, so full-set results are descriptive, +not independent validation. In-domain UCloud evaluation, other operating systems, +and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 4ed16c9..913aa73 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -112,7 +112,7 @@ def benchmark(args): "cells": [], "boundaries": { "end_to_end": "image path through CPU result/embedding; threaded decode/preprocess/transfer/reduction included", - "preprocessing": "serial preparation diagnostic; public API uses threads for batches", + "preprocessing": "single-view serial preparation diagnostic (also with TTA); not public API timing", "prepared": "single-view diagnostic (also with TTA): CPU input to CPU output; transfers included; no decode/reduction", "cold": "first image after Predictor construction; lazy model/session load included; runtime import/config measured separately", }, diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py new file mode 100644 index 0000000..cbe9768 --- /dev/null +++ b/dev/releases/mambo_v3/defaults_report.py @@ -0,0 +1,226 @@ +"""Release overview: V2, automatic V3 and the enabled-TTA default on full Flemming.""" + +import argparse +import csv +import json +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.acceleration_report import METRICS, aggregate +from dev.releases.mambo_v3.comparison_charts import REGION_LABELS, REGIONS, completed +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION + +SERIES = ( + ("v2", "MAMBO v2", "#8064a2"), + ("torch", "V3 PyTorch", "#098e92"), + ("onnx", "V3 ONNX", "#e8872e"), + ("torch-tta", "V3 PyTorch + TTA", "#125351"), + ("onnx-tta", "V3 ONNX + TTA", "#98440b"), +) + + +def collect(args): + baseline = json.loads(args.baseline.read_text()) + reference = json.loads(args.reference.read_text()) + if baseline["reference"] != reference: + raise ValueError("Baseline uses a different V2/FP32 reference") + for backend in ("torch", "onnx"): + report = completed(args.quality / f"{backend}-cuda-0-prediction" / "report.json") + if report["arguments"].get("tta") != "padded_scale" or report["samples"] != 58640: + raise ValueError("Expected full-data padded-scale TTA") + for name in completed(args.performance / "plan.json")["completed"]: + report = completed(args.performance / name / "report.json") + if report["settings"].get("tta") != "padded_scale": + raise ValueError("Expected padded-scale TTA timings") + augmented = aggregate(args) + for key in ("bundle_sha256", "manifest_sha256"): + if baseline[key] != augmented[key]: + raise ValueError("Baseline and TTA artifacts differ") + data = { + "tta": "padded_scale: original + 8% / 15% edge padding; FP32 mean leaf logits", + "selection": "Chosen for highest subset macro accuracy and lower cost than D4/padded rotations; not optimal for every metric.", + "metric_revision": REVISION, + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "quality": [r for r in reference["quality"] if r["model"] == "v2"] + baseline["quality"], + "speed": [ + {**r, "trial_min_ips": r["batch"] * 1000 / r["trial_max_ms"], "trial_max_ips": r["batch"] * 1000 / r["trial_min_ms"]} + for r in reference["speed"] + if r["model"] == "v2" + ] + + baseline["speed"], + "resources": baseline["resources"].copy(), + "sources_sha256": { + str(args.baseline): file_hash(args.baseline), + **augmented["sources_sha256"], + }, + "bundle_sha256": baseline["bundle_sha256"], + "manifest_sha256": baseline["manifest_sha256"], + "timing_bank_sha256": reference["timing_bank_sha256"], + } + for row in reference["resources"]: + if row["model"] == "v2": + data["resources"].append( + { + "model": "v2", + "device": row["device"], + "rss_mib": row["rss_mib"]["median"], + "load_first_seconds": row["load_first_seconds"]["median"], + "allocated_mib": row["cuda_allocated_mib"]["median"] if row["device"] != "cpu" else None, + } + ) + for section in ("quality", "speed", "resources"): + data[section].extend({**r, "model": r["model"] + "-tta"} for r in augmented[section]) + return data + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + import numpy as np + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-defaults-v1", "axes.spines.top": False, "axes.spines.right": False}) + + def save(fig, name): + svg = output / f"{name}.svg" + fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / f"{name}.png", dpi=160, bbox_inches="tight") + plt.close(fig) + + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 2, figsize=(13, 8)) + for ax, (metric, title) in zip( + axes.flat, + ( + ("accuracy", "Macro accuracy (%)"), + ("f1", "Macro-F1"), + ("precision", "Macro precision"), + ("micro_accuracy", "Micro accuracy (%)"), + ), + strict=True, + ): + factor = 100 if "accuracy" in metric else 1 + for i, (model, label, color) in enumerate(SERIES): + values = [ + next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"][scope][metric]["0"] * factor + for preset in REGIONS + ] + bars = ax.bar(np.arange(3) + (i - 2) * 0.16, values, 0.16, label=label, color=color) + ax.bar_label(bars, fmt="%.1f" if factor == 100 else "%.3f", rotation=60, fontsize=8, padding=3) + upper = 105 if factor == 100 else min(1, max(bar.get_height() for bar in ax.patches) * 1.35) + ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle(f"MAMBO release comparison · species metrics · {scope} truth", fontsize=16) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0.\n" + "TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation.\n" + "Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.88)) + save(fig, f"mambo-defaults-quality-{scope}") + + fig, axes = plt.subplots(1, 2, figsize=(12, 5.5)) + for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): + for model, label, color in SERIES: + rows = [ + next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, "north_europe", b)) + for b in batches + ] + values = np.array([r["images_per_second"] for r in rows]) + lo = np.array([r["trial_min_ips"] for r in rows]) + hi = np.array([r["trial_max_ips"] for r in rows]) + ax.errorbar( + range(len(batches)), + values, + yerr=[values - lo, hi - values], + marker="o", + capsize=3, + color=color, + label=label, + linestyle="--" if model.endswith("tta") else "-", + ) + ax.set( + title="CPU · FP32" if device == "cpu" else "GPU · automatic precision", + xlabel="Images per batch", + ylabel="End-to-end images / second", + xticks=range(len(batches)), + xticklabels=batches, + ylim=(0, None), + ) + ax.grid(axis="y", alpha=0.2) + fig.suptitle("Complete-pipeline throughput · northern Europe", fontsize=16) + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "i7-12800H / RTX 3080 Ti Laptop, WSL2; four CPU/preparation threads; same image bank.\n" + "Three fresh processes × seven observations; bars show trial-median range. Decode through CPU results included.\n" + "V2 and unaugmented V3 reuse recorded measurements; laptop conditions vary between campaigns. V2 CPU uses input cast.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.16, 1, 0.85)) + save(fig, "mambo-defaults-speed") + + fig, axes = plt.subplots(1, 2, figsize=(11, 5)) + for ax, device in zip(axes, ("cpu", "cuda:0"), strict=True): + values = [next(r for r in data["resources"] if (r["model"], r["device"]) == (m, device))["rss_mib"] for m, _, _ in SERIES] + bars = ax.bar(range(5), values, color=[color for _, _, color in SERIES]) + ax.bar_label(bars, fmt="%.0f", padding=3) + ax.set( + title="CPU execution" if device == "cpu" else "GPU execution", + ylabel="Peak host RSS (MiB)", + xticks=range(5), + xticklabels=["V2", "V3\ntorch", "V3\nONNX", "torch\n+ TTA", "ONNX\n+ TTA"], + ylim=(0, max(values) * 1.15), + ) + ax.grid(axis="y", alpha=0.2) + ax.set_axisbelow(True) + fig.suptitle("Process memory · median of three fresh processes", fontsize=15) + fig.text( + 0.02, + 0.02, + "Host memory, not GPU VRAM; includes loading and complete CPU 1/8 or GPU 1/8/32 batch sweep.\n" + "TTA retains original decoded images for each batch; memory depends on source dimensions.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.12, 1, 0.93)) + save(fig, "mambo-defaults-memory") + + with (output / "mambo-defaults-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["variant", "preset", "scope", "rank", "images", *METRICS]) + for row in data["quality"]: + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + writer.writerow( + [ + row["model"], + row["preset"], + scope, + rank, + row["ranks"][rank]["images" if scope == "all" else "known_images"], + *[row["scores"][scope][key][str(level)] for key in METRICS], + ] + ) + write_json(output / "mambo-defaults-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path) + for name in ("baseline", "reference", "quality", "performance"): + parser.add_argument("--" + name, type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if not args.data and any(getattr(args, key) is None for key in ("baseline", "reference", "quality", "performance")): + parser.error("Supply --data or all four evidence inputs") + render(json.loads(args.data.read_text()) if args.data else collect(args), args.output) diff --git a/docs/assets/mambo-defaults-comparison.json b/docs/assets/mambo-defaults-comparison.json new file mode 100644 index 0000000..f9f4370 --- /dev/null +++ b/docs/assets/mambo-defaults-comparison.json @@ -0,0 +1,3525 @@ +{ + "tta": "padded_scale: original + 8% / 15% edge padding; FP32 mean leaf logits", + "selection": "Chosen for highest subset macro accuracy and lower cost than D4/padded rotations; not optimal for every metric.", + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "threshold=0; optimal=False; simple=True; hierarchical=False", + "quality": [ + { + "model": "v2", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.68712482946794, + "micro_accuracy_known": 0.7963358235503379, + "macro_accuracy_all": 0.6852063621352951, + "macro_accuracy_known": 0.706872966471589, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7922919508867667, + "micro_accuracy_known": 0.7923054622350313, + "macro_accuracy_all": 0.7890053947525617, + "macro_accuracy_known": 0.7914633554838781, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449351978171896, + "micro_accuracy_known": 0.9449351978171896, + "macro_accuracy_all": 0.8440271040813301, + "macro_accuracy_known": 0.8440271040813301, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.25753800338546967, + "scores": { + "all": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546967, + "1": 0.3169285074452811, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.27934832747314936, + "1": 0.3189462554934523, + "2": 0.26007435892237385 + }, + "recall": { + "0": 0.706872966471589, + "1": 0.7914633554838781, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.26468747200295195, + "1": 0.3174198331740771, + "2": 0.2691037692533918 + }, + "micro_accuracy": { + "0": 0.7963358235503379, + "1": 0.7923054622350313, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9284675700829689, + "1": 0.9286569914847851, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6" + }, + { + "model": "v2", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.669594133697135, + "micro_accuracy_known": 0.7760188149729238, + "macro_accuracy_all": 0.6604260262269301, + "macro_accuracy_known": 0.6813090626293627, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7764495225102319, + "micro_accuracy_known": 0.7764495225102319, + "macro_accuracy_all": 0.7728971632770847, + "macro_accuracy_known": 0.7728971632770847, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9423090040927694, + "micro_accuracy_known": 0.9423090040927694, + "macro_accuracy_all": 0.8353711166095457, + "macro_accuracy_known": 0.8353711166095457, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.19998360830548284, + "scores": { + "all": { + "accuracy": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.220093475997043, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6604260262269301, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.19998360830548284, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.669594133697135, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9298644970123321, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "precision": { + "0": 0.22455003199982063, + "1": 0.26145460355851485, + "2": 0.24311183116521895 + }, + "recall": { + "0": 0.6813090626293627, + "1": 0.7728971632770847, + "2": 0.8353711166095457 + }, + "f1": { + "0": 0.20496609487323514, + "1": 0.25527668172822016, + "2": 0.2512650593074731 + }, + "micro_accuracy": { + "0": 0.7760188149729238, + "1": 0.7764495225102319, + "2": 0.9423090040927694 + }, + "theilU": { + "0": 0.9324736395684865, + "1": 0.9304037751304223, + "2": 0.858730608498533 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90" + }, + { + "model": "v2", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5936050477489768, + "micro_accuracy_known": 0.6879520929681016, + "macro_accuracy_all": 0.5720627970250876, + "macro_accuracy_known": 0.5901517392235093, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7285129604365621, + "micro_accuracy_known": 0.7285129604365621, + "macro_accuracy_all": 0.7168278641037727, + "macro_accuracy_known": 0.7168278641037727, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9265006821282401, + "micro_accuracy_known": 0.9265006821282401, + "macro_accuracy_all": 0.8069699178640561, + "macro_accuracy_known": 0.8069699178640561, + "abstention_coverage": 1.0 + } + }, + "macro_f1_all": 0.08990868448899282, + "scores": { + "all": { + "accuracy": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.1100618404698789, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5720627970250876, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.08990868448899282, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.5936050477489768, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9424989337241723, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "precision": { + "0": 0.11296990063684895, + "1": 0.1327201662316462, + "2": 0.19682625488877242 + }, + "recall": { + "0": 0.5901517392235093, + "1": 0.7168278641037727, + "2": 0.8069699178640561 + }, + "f1": { + "0": 0.09231932892005533, + "1": 0.12210675669894289, + "2": 0.20522430973656694 + }, + "micro_accuracy": { + "0": 0.6879520929681016, + "1": 0.7285129604365621, + "2": 0.9265006821282401 + }, + "theilU": { + "0": 0.9472050810666933, + "1": 0.9364867523141058, + "2": 0.8320049778627998 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "sample_ids_sha256": "51a9e4ae7818a96f935527a984a61f4fd31e43f60987ca23792f2bcafd27631a", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5" + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078274215552524, + "micro_accuracy_known": 0.8203288667536266, + "macro_accuracy_all": 0.7124755690715492, + "macro_accuracy_known": 0.7350044408208473, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936903137789905, + "micro_accuracy_known": 0.7937038489742322, + "macro_accuracy_all": 0.8053483819748223, + "macro_accuracy_known": 0.8078572554389183, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9296896316507504, + "micro_accuracy_known": 0.9296896316507504, + "macro_accuracy_all": 0.8105098078966045, + "macro_accuracy_known": 0.8105098078966045, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2634270457338045, + "1": 0.31893660877341173, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168735, + "1": 0.3204124099108478, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.2676065928162877, + "1": 0.31896401442542444, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7350044408208473, + "1": 0.8078572554389183, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.2606923077861283, + "1": 0.32088253381207055, + "2": 0.2804463369346697 + }, + "micro_accuracy": { + "0": 0.8203288667536266, + "1": 0.7937038489742322, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.9313351406548803, + "1": 0.9269818797430123, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894270122783083, + "micro_accuracy_known": 0.7990039131981501, + "macro_accuracy_all": 0.6904573601499047, + "macro_accuracy_known": 0.7122900039491111, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794167803547067, + "micro_accuracy_known": 0.7794167803547067, + "macro_accuracy_all": 0.7927569371584571, + "macro_accuracy_known": 0.7927569371584571, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9285300136425648, + "micro_accuracy_known": 0.9285300136425648, + "macro_accuracy_all": 0.8061547662632332, + "macro_accuracy_known": 0.8061547662632332, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21308377178370788, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.6904573601499047, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.19974835307971503, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.6894270122783083, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9327685730735747, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "precision": { + "0": 0.21751022464426337, + "1": 0.2577674325030351, + "2": 0.2517251364434932 + }, + "recall": { + "0": 0.7122900039491111, + "1": 0.7927569371584571, + "2": 0.8061547662632332 + }, + "f1": { + "0": 0.2052193214139764, + "1": 0.25521877922468866, + "2": 0.2555840946637753 + }, + "micro_accuracy": { + "0": 0.7990039131981501, + "1": 0.7794167803547067, + "2": 0.9285300136425648 + }, + "theilU": { + "0": 0.9362130669456851, + "1": 0.9303872077924281, + "2": 0.8414042795502794 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842087312414734, + "micro_accuracy_known": 0.6770623344796237, + "macro_accuracy_all": 0.5800914186056899, + "macro_accuracy_known": 0.5984342302612058, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7057128240109141, + "micro_accuracy_known": 0.7057128240109141, + "macro_accuracy_all": 0.7129759960732965, + "macro_accuracy_known": 0.7129759960732965, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9029502046384721, + "micro_accuracy_known": 0.9029502046384721, + "macro_accuracy_all": 0.784246040298466, + "macro_accuracy_known": 0.784246040298466, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.11941327816354223, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5800914186056899, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.09729142790239681, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.5842087312414734, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9380984507134764, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "precision": { + "0": 0.12352484541958572, + "1": 0.1394431837512301, + "2": 0.1882961794945315 + }, + "recall": { + "0": 0.5984342302612058, + "1": 0.7129759960732965, + "2": 0.784246040298466 + }, + "f1": { + "0": 0.10067516090358233, + "1": 0.1268067151804599, + "2": 0.19361355430273816 + }, + "micro_accuracy": { + "0": 0.6770623344796237, + "1": 0.7057128240109141, + "2": 0.9029502046384721 + }, + "theilU": { + "0": 0.9436338812191157, + "1": 0.9278203586503335, + "2": 0.8029884477926725 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7031548431105048, + "micro_accuracy_known": 0.8149136329499189, + "macro_accuracy_all": 0.704628249754435, + "macro_accuracy_known": 0.7269089849245357, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7888472032742155, + "micro_accuracy_known": 0.7888472032742155, + "macro_accuracy_all": 0.8000993660812793, + "macro_accuracy_known": 0.8000993660812793, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9288540245566167, + "micro_accuracy_known": 0.9288540245566167, + "macro_accuracy_all": 0.8066151835359162, + "macro_accuracy_known": 0.8066151835359162, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.24730856379330513, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.704628249754435, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.2368364750172347, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.7031548431105048, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9297081356830714, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "precision": { + "0": 0.2516551965945558, + "1": 0.30404516864512815, + "2": 0.26911334290120537 + }, + "recall": { + "0": 0.7269089849245357, + "1": 0.8000993660812793, + "2": 0.8066151835359162 + }, + "f1": { + "0": 0.24302911458287843, + "1": 0.30405829620707303, + "2": 0.27317213148165537 + }, + "micro_accuracy": { + "0": 0.8149136329499189, + "1": 0.7888472032742155, + "2": 0.9288540245566167 + }, + "theilU": { + "0": 0.9329238752080722, + "1": 0.9278811825938204, + "2": 0.8463131556985152 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6879945429740791, + "micro_accuracy_known": 0.7973437685284004, + "macro_accuracy_all": 0.6886240058738285, + "macro_accuracy_known": 0.7103986779963212, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779331514324693, + "micro_accuracy_known": 0.7779331514324693, + "macro_accuracy_all": 0.7907596138745981, + "macro_accuracy_known": 0.7907596138745981, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9252899045020464, + "micro_accuracy_known": 0.9252899045020464, + "macro_accuracy_all": 0.804801469829159, + "macro_accuracy_known": 0.804801469829159, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.21178593938637336, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.6886240058738285, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.1978902721150327, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.6879945429740791, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9323203923796567, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "precision": { + "0": 0.2164221653533803, + "1": 0.25597447312765065, + "2": 0.25018741937505296 + }, + "recall": { + "0": 0.7103986779963212, + "1": 0.7907596138745981, + "2": 0.804801469829159 + }, + "f1": { + "0": 0.20351606400355202, + "1": 0.25283249885833836, + "2": 0.25394065720716125 + }, + "micro_accuracy": { + "0": 0.7973437685284004, + "1": 0.7779331514324693, + "2": 0.9252899045020464 + }, + "theilU": { + "0": 0.9362292436999937, + "1": 0.9297196214314329, + "2": 0.8382838670363196 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7078444747612551, + "micro_accuracy_known": 0.8203486303806474, + "macro_accuracy_all": 0.7123551106111988, + "macro_accuracy_known": 0.7348801733973236, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7936221009549795, + "micro_accuracy_known": 0.7936356349869541, + "macro_accuracy_all": 0.805001260196705, + "macro_accuracy_known": 0.8075090522845452, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9298601637107776, + "micro_accuracy_known": 0.9298601637107776, + "macro_accuracy_all": 0.8106416408810809, + "macro_accuracy_known": 0.8106416408810809, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.2634302800489512, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.25432102340018437, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26759865685833206, + "1": 0.31885723521848236, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7348801733973236, + "1": 0.8075090522845452, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.26071387372659355, + "1": 0.32170684925385246, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.8203486303806474, + "1": 0.7936356349869541, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.931297601666784, + "1": 0.9270216229111814, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6894952251023192, + "micro_accuracy_known": 0.7990829677062334, + "macro_accuracy_all": 0.6906260019361401, + "macro_accuracy_known": 0.712463978281947, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7794338335607094, + "micro_accuracy_known": 0.7794338335607094, + "macro_accuracy_all": 0.7928148275159873, + "macro_accuracy_known": 0.7928148275159873, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.928581173260573, + "micro_accuracy_known": 0.928581173260573, + "macro_accuracy_all": 0.8063031248841592, + "macro_accuracy_known": 0.8063031248841592, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21297537840475272, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.6906260019361401, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.19968247097445052, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.6894952251023192, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9327107183368355, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "precision": { + "0": 0.21739674629675512, + "1": 0.25814705246049136, + "2": 0.25176260717979065 + }, + "recall": { + "0": 0.712463978281947, + "1": 0.7928148275159873, + "2": 0.8063031248841592 + }, + "f1": { + "0": 0.2051505331795797, + "1": 0.2556792223856105, + "2": 0.25564879210539354 + }, + "micro_accuracy": { + "0": 0.7990829677062334, + "1": 0.7794338335607094, + "2": 0.928581173260573 + }, + "theilU": { + "0": 0.9360902428349954, + "1": 0.9303898466600729, + "2": 0.8413915880115065 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.5842769440654844, + "micro_accuracy_known": 0.677141388987707, + "macro_accuracy_all": 0.5803258635150937, + "macro_accuracy_known": 0.5986760884483774, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7058321964529332, + "micro_accuracy_known": 0.7058321964529332, + "macro_accuracy_all": 0.7132927172304062, + "macro_accuracy_known": 0.7132927172304062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9030695770804912, + "micro_accuracy_known": 0.9030695770804912, + "macro_accuracy_all": 0.7842061134551048, + "macro_accuracy_known": 0.7842061134551048, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.11940183392320727, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5803258635150937, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.09730444648358827, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.5842769440654844, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9381877433883671, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "precision": { + "0": 0.12359009712973944, + "1": 0.139506013324115, + "2": 0.18845606769929624 + }, + "recall": { + "0": 0.5986760884483774, + "1": 0.7132927172304062, + "2": 0.7842061134551048 + }, + "f1": { + "0": 0.10075026693576739, + "1": 0.12688882216850472, + "2": 0.1937730887900641 + }, + "micro_accuracy": { + "0": 0.677141388987707, + "1": 0.7058321964529332, + "2": 0.9030695770804912 + }, + "theilU": { + "0": 0.9437018925013999, + "1": 0.9279129375668055, + "2": 0.8032163508659165 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.703206002728513, + "micro_accuracy_known": 0.8149729238309814, + "macro_accuracy_all": 0.70490721102182, + "macro_accuracy_known": 0.7271967671015613, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7889324693042292, + "micro_accuracy_known": 0.7889324693042292, + "macro_accuracy_all": 0.7998011634423278, + "macro_accuracy_known": 0.7998011634423278, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9289392905866303, + "micro_accuracy_known": 0.9289392905866303, + "macro_accuracy_all": 0.8066719936597678, + "macro_accuracy_known": 0.8066719936597678, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.24693597388838318, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.70490721102182, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.23654830838429805, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.703206002728513, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9297283074523651, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "precision": { + "0": 0.2512627097909782, + "1": 0.304018206726156, + "2": 0.26915209911986615 + }, + "recall": { + "0": 0.7271967671015613, + "1": 0.7998011634423278, + "2": 0.8066719936597678 + }, + "f1": { + "0": 0.24271540486034088, + "1": 0.3048604148769131, + "2": 0.2732530547620374 + }, + "micro_accuracy": { + "0": 0.8149729238309814, + "1": 0.7889324693042292, + "2": 0.9289392905866303 + }, + "theilU": { + "0": 0.9329324973505538, + "1": 0.9279871144012297, + "2": 0.8462225486926431 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6880627557980901, + "micro_accuracy_known": 0.7974228230364837, + "macro_accuracy_all": 0.6887960648645841, + "macro_accuracy_known": 0.710576177587575, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7779672578444747, + "micro_accuracy_known": 0.7779672578444747, + "macro_accuracy_all": 0.7908120470589387, + "macro_accuracy_known": 0.7908120470589387, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9254774897680764, + "micro_accuracy_known": 0.9254774897680764, + "macro_accuracy_all": 0.805164255187583, + "macro_accuracy_known": 0.805164255187583, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21168953424574674, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.6887960648645841, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.19783273588838454, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.6880627557980901, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9322918377735964, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "precision": { + "0": 0.21632075786236368, + "1": 0.2560315293300679, + "2": 0.25025960445781553 + }, + "recall": { + "0": 0.710576177587575, + "1": 0.7908120470589387, + "2": 0.805164255187583 + }, + "f1": { + "0": 0.2034558161613722, + "1": 0.2529767781457853, + "2": 0.2540572988243291 + }, + "micro_accuracy": { + "0": 0.7974228230364837, + "1": 0.7779672578444747, + "2": 0.9254774897680764 + }, + "theilU": { + "0": 0.9361375391213514, + "1": 0.9297404742905871, + "2": 0.838470274037207 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7318724420190996, + "micro_accuracy_known": 0.8481955808529982, + "macro_accuracy_all": 0.7394942213066358, + "macro_accuracy_known": 0.7628774377906401, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8158594815825375, + "micro_accuracy_known": 0.8158733948396119, + "macro_accuracy_all": 0.8303908427754559, + "macro_accuracy_known": 0.8329777301361272, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9476637107776262, + "micro_accuracy_known": 0.9476637107776262, + "macro_accuracy_all": 0.857176291043506, + "macro_accuracy_known": 0.857176291043506, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.3045154257441182, + "1": 0.3505904633143813, + "2": 0.2854195568227899 + }, + "recall": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.29354423320755, + "1": 0.353208999336762, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.7318724420190996, + "1": 0.8158594815825375, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9406189646961585, + "1": 0.9419385064155936, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7628774377906401, + "1": 0.8329777301361272, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.31130376488612155, + "1": 0.3506444171806519, + "2": 0.2854195568227899 + }, + "recall": { + "0": 0.7628774377906401, + "1": 0.8329777301361272, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.30320298151377173, + "1": 0.353759732820872, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.8481955808529982, + "1": 0.8158733948396119, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9430153185488799, + "1": 0.9419514702058922, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7156548431105048, + "micro_accuracy_known": 0.829400371556188, + "macro_accuracy_all": 0.718077691416366, + "macro_accuracy_known": 0.7407837053741958, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.804024556616644, + "micro_accuracy_known": 0.804024556616644, + "macro_accuracy_all": 0.8293085814992414, + "macro_accuracy_known": 0.8293085814992414, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9472032742155525, + "micro_accuracy_known": 0.9472032742155525, + "macro_accuracy_all": 0.8563266688215283, + "macro_accuracy_known": 0.8563266688215283, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.718077691416366, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "precision": { + "0": 0.2429470820689653, + "1": 0.28385324239562887, + "2": 0.2653959371196337 + }, + "recall": { + "0": 0.718077691416366, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "f1": { + "0": 0.22757154948143235, + "1": 0.28200483380977825, + "2": 0.27529463404409366 + }, + "micro_accuracy": { + "0": 0.7156548431105048, + "1": 0.804024556616644, + "2": 0.9472032742155525 + }, + "theilU": { + "0": 0.944413998137816, + "1": 0.9441314851902275, + "2": 0.87467980248827 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7407837053741958, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "precision": { + "0": 0.24775255855583658, + "1": 0.28385324239562887, + "2": 0.2653959371196337 + }, + "recall": { + "0": 0.7407837053741958, + "1": 0.8293085814992414, + "2": 0.8563266688215283 + }, + "f1": { + "0": 0.23384828180126666, + "1": 0.28200483380977825, + "2": 0.27529463404409366 + }, + "micro_accuracy": { + "0": 0.829400371556188, + "1": 0.804024556616644, + "2": 0.9472032742155525 + }, + "theilU": { + "0": 0.9470276431963978, + "1": 0.9441314851902275, + "2": 0.87467980248827 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6262619372442019, + "micro_accuracy_known": 0.7257994387129926, + "macro_accuracy_all": 0.6173142553970794, + "macro_accuracy_known": 0.6368340737495563, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7451739427012278, + "micro_accuracy_known": 0.7451739427012278, + "macro_accuracy_all": 0.7510468819168783, + "macro_accuracy_known": 0.7510468819168783, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9275068212824011, + "micro_accuracy_known": 0.9275068212824011, + "macro_accuracy_all": 0.8145939456784087, + "macro_accuracy_known": 0.8145939456784087, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6173142553970794, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "precision": { + "0": 0.13138339990786518, + "1": 0.15667958535770124, + "2": 0.21261476235886365 + }, + "recall": { + "0": 0.6173142553970794, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "f1": { + "0": 0.11096250944892755, + "1": 0.14574565079611349, + "2": 0.2183082373459294 + }, + "micro_accuracy": { + "0": 0.6262619372442019, + "1": 0.7451739427012278, + "2": 0.9275068212824011 + }, + "theilU": { + "0": 0.9508870287194768, + "1": 0.9443425774705536, + "2": 0.8448686499703433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6368340737495563, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "precision": { + "0": 0.13564757725358406, + "1": 0.15667958535770124, + "2": 0.21261476235886365 + }, + "recall": { + "0": 0.6368340737495563, + "1": 0.7510468819168783, + "2": 0.8145939456784087 + }, + "f1": { + "0": 0.11490466732444428, + "1": 0.14574565079611349, + "2": 0.2183082373459294 + }, + "micro_accuracy": { + "0": 0.7257994387129926, + "1": 0.7451739427012278, + "2": 0.9275068212824011 + }, + "theilU": { + "0": 0.9551144723608224, + "1": 0.9443425774705536, + "2": 0.8448686499703433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.727575034106412, + "micro_accuracy_known": 0.8432151468437488, + "macro_accuracy_all": 0.7309514872176466, + "macro_accuracy_known": 0.7540645777225524, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8116132332878582, + "micro_accuracy_known": 0.8116132332878582, + "macro_accuracy_all": 0.8277669590594472, + "macro_accuracy_known": 0.8277669590594472, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9469304229195089, + "micro_accuracy_known": 0.9469304229195089, + "macro_accuracy_all": 0.8346576161414683, + "macro_accuracy_known": 0.8346576161414683, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7309514872176466, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "precision": { + "0": 0.2836262314662556, + "1": 0.3334921424445981, + "2": 0.27245649076352374 + }, + "recall": { + "0": 0.7309514872176466, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "f1": { + "0": 0.2712624922442485, + "1": 0.3337289068163522, + "2": 0.27776074959879515 + }, + "micro_accuracy": { + "0": 0.727575034106412, + "1": 0.8116132332878582, + "2": 0.9469304229195089 + }, + "theilU": { + "0": 0.9419128470540503, + "1": 0.9427305687063423, + "2": 0.8781254078254616 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7540645777225524, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "precision": { + "0": 0.28991904052186485, + "1": 0.3334921424445981, + "2": 0.27245649076352374 + }, + "recall": { + "0": 0.7540645777225524, + "1": 0.8277669590594472, + "2": 0.8346576161414683 + }, + "f1": { + "0": 0.2798828148296063, + "1": 0.3337289068163522, + "2": 0.27776074959879515 + }, + "micro_accuracy": { + "0": 0.8432151468437488, + "1": 0.8116132332878582, + "2": 0.9469304229195089 + }, + "theilU": { + "0": 0.9444028505698309, + "1": 0.9427305687063423, + "2": 0.8781254078254616 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "torch-tta", + "precision": "fp16", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7144270122783083, + "micro_accuracy_known": 0.8279773904106882, + "macro_accuracy_all": 0.7166090539144668, + "macro_accuracy_known": 0.7392686287418017, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8029331514324693, + "micro_accuracy_known": 0.8029331514324693, + "macro_accuracy_all": 0.8268147188498062, + "macro_accuracy_known": 0.8268147188498062, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9449693042291951, + "micro_accuracy_known": 0.9449693042291951, + "macro_accuracy_all": 0.8335264497898153, + "macro_accuracy_known": 0.8335264497898153, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7166090539144668, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "precision": { + "0": 0.24106168297359762, + "1": 0.2834023411805787, + "2": 0.2678618299824677 + }, + "recall": { + "0": 0.7166090539144668, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "f1": { + "0": 0.2253220208562535, + "1": 0.2803332160378765, + "2": 0.2729237571963636 + }, + "micro_accuracy": { + "0": 0.7144270122783083, + "1": 0.8029331514324693, + "2": 0.9449693042291951 + }, + "theilU": { + "0": 0.944113343442953, + "1": 0.9437905591277826, + "2": 0.8721280753438848 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7392686287418017, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "precision": { + "0": 0.24579080574948112, + "1": 0.2834023411805787, + "2": 0.2678618299824677 + }, + "recall": { + "0": 0.7392686287418017, + "1": 0.8268147188498062, + "2": 0.8335264497898153 + }, + "f1": { + "0": 0.23148434630648257, + "1": 0.2803332160378765, + "2": 0.2729237571963636 + }, + "micro_accuracy": { + "0": 0.8279773904106882, + "1": 0.8029331514324693, + "2": 0.9449693042291951 + }, + "theilU": { + "0": 0.9469432695851171, + "1": 0.9437905591277826, + "2": 0.8721280753438848 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "north_europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7319406548431105, + "micro_accuracy_known": 0.8482746353610815, + "macro_accuracy_all": 0.7398002960321982, + "macro_accuracy_known": 0.7631931907683942, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58639, + "list_coverage": 0.9999829467939972, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8158594815825375, + "micro_accuracy_known": 0.8158733948396119, + "macro_accuracy_all": 0.8304111700220072, + "macro_accuracy_known": 0.832998120707434, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9476978171896316, + "micro_accuracy_known": 0.9476978171896316, + "macro_accuracy_all": 0.8573137738657032, + "macro_accuracy_known": 0.8573137738657032, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.30560509035336597, + "1": 0.35093141039439896, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.29443636070255313, + "1": 0.35360877971608107, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.7319406548431105, + "1": 0.8158594815825375, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9406019271139017, + "1": 0.9419354628293558, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7631931907683942, + "1": 0.832998120707434, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.31216254534687643, + "1": 0.3509854434880796, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7631931907683942, + "1": 0.832998120707434, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.30388844140667753, + "1": 0.35416090691553337, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.8482746353610815, + "1": 0.8158733948396119, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9430067345925155, + "1": 0.9419484264795018, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "europe", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.715637789904502, + "micro_accuracy_known": 0.8293806079291671, + "macro_accuracy_all": 0.7184729389376375, + "macro_accuracy_known": 0.741191450840804, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8039733969986358, + "micro_accuracy_known": 0.8039733969986358, + "macro_accuracy_all": 0.8297204053618472, + "macro_accuracy_known": 0.8297204053618472, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9473226466575716, + "micro_accuracy_known": 0.9473226466575716, + "macro_accuracy_all": 0.8563774763022645, + "macro_accuracy_known": 0.8563774763022645, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7184729389376375, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "precision": { + "0": 0.24372650581041436, + "1": 0.2845980888173239, + "2": 0.26558303107014986 + }, + "recall": { + "0": 0.7184729389376375, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "f1": { + "0": 0.22830834852570925, + "1": 0.28278130491705644, + "2": 0.27545873472892135 + }, + "micro_accuracy": { + "0": 0.715637789904502, + "1": 0.8039733969986358, + "2": 0.9473226466575716 + }, + "theilU": { + "0": 0.9443265822955385, + "1": 0.9441410149358417, + "2": 0.8748020450770366 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.741191450840804, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "precision": { + "0": 0.24838776385935504, + "1": 0.2845980888173239, + "2": 0.26558303107014986 + }, + "recall": { + "0": 0.741191450840804, + "1": 0.8297204053618472, + "2": 0.8563774763022645 + }, + "f1": { + "0": 0.23446467584989356, + "1": 0.28278130491705644, + "2": 0.27545873472892135 + }, + "micro_accuracy": { + "0": 0.8293806079291671, + "1": 0.8039733969986358, + "2": 0.9473226466575716 + }, + "theilU": { + "0": 0.9469465408012699, + "1": 0.9441410149358417, + "2": 0.8748020450770366 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "full", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.6261425648021828, + "micro_accuracy_known": 0.7256610933238468, + "macro_accuracy_all": 0.6174475873691395, + "macro_accuracy_known": 0.6369716217523534, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.7451568894952251, + "micro_accuracy_known": 0.7451568894952251, + "macro_accuracy_all": 0.7510220833093467, + "macro_accuracy_known": 0.7510220833093467, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9275238744884038, + "micro_accuracy_known": 0.9275238744884038, + "macro_accuracy_all": 0.8145187008621275, + "macro_accuracy_known": 0.8145187008621275, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.6174475873691395, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "precision": { + "0": 0.13160765012851372, + "1": 0.15697625283734776, + "2": 0.2126777336514247 + }, + "recall": { + "0": 0.6174475873691395, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "f1": { + "0": 0.11115707584052233, + "1": 0.14605018175665105, + "2": 0.21830567803410023 + }, + "micro_accuracy": { + "0": 0.6261425648021828, + "1": 0.7451568894952251, + "2": 0.9275238744884038 + }, + "theilU": { + "0": 0.9508514561757678, + "1": 0.9443370637895987, + "2": 0.8446531494151259 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.6369716217523534, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "precision": { + "0": 0.13589123854540153, + "1": 0.15697625283734776, + "2": 0.2126777336514247 + }, + "recall": { + "0": 0.6369716217523534, + "1": 0.7510220833093467, + "2": 0.8145187008621275 + }, + "f1": { + "0": 0.11511288629482906, + "1": 0.14605018175665105, + "2": 0.21830567803410023 + }, + "micro_accuracy": { + "0": 0.7256610933238468, + "1": 0.7451568894952251, + "2": 0.9275238744884038 + }, + "theilU": { + "0": 0.9550252355096324, + "1": 0.9443370637895987, + "2": 0.8446531494151259 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "north_europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7276261937244202, + "micro_accuracy_known": 0.8432744377248113, + "macro_accuracy_all": 0.731249034719374, + "macro_accuracy_known": 0.7543715338409351, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8115961800818554, + "micro_accuracy_known": 0.8115961800818554, + "macro_accuracy_all": 0.8277501260203206, + "macro_accuracy_known": 0.8277501260203206, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9469815825375171, + "micro_accuracy_known": 0.9469815825375171, + "macro_accuracy_all": 0.8346677390702247, + "macro_accuracy_known": 0.8346677390702247, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.731249034719374, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "precision": { + "0": 0.28460861709588325, + "1": 0.3338821217092504, + "2": 0.27237041484255897 + }, + "recall": { + "0": 0.731249034719374, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "f1": { + "0": 0.2720585446067734, + "1": 0.334119400397056, + "2": 0.27775524799008994 + }, + "micro_accuracy": { + "0": 0.7276261937244202, + "1": 0.8115961800818554, + "2": 0.9469815825375171 + }, + "theilU": { + "0": 0.9418634558142434, + "1": 0.94272656175805, + "2": 0.8782213541986774 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7543715338409351, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "precision": { + "0": 0.29070206429216244, + "1": 0.3338821217092504, + "2": 0.27237041484255897 + }, + "recall": { + "0": 0.7543715338409351, + "1": 0.8277501260203206, + "2": 0.8346677390702247 + }, + "f1": { + "0": 0.2805010841484588, + "1": 0.334119400397056, + "2": 0.27775524799008994 + }, + "micro_accuracy": { + "0": 0.8432744377248113, + "1": 0.8115961800818554, + "2": 0.9469815825375171 + }, + "theilU": { + "0": 0.9443618486684395, + "1": 0.94272656175805, + "2": 0.8782213541986774 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + }, + { + "model": "onnx-tta", + "precision": "tf32", + "preset": "europe_v3", + "ranks": { + "species": { + "images": 58640, + "known_images": 50598, + "list_coverage": 0.8628581173260573, + "truth_species_or_taxa": 522, + "micro_accuracy_all": 0.7144270122783083, + "micro_accuracy_known": 0.8279773904106882, + "macro_accuracy_all": 0.7170052282421303, + "macro_accuracy_known": 0.7396773303209329, + "abstention_coverage": 1.0 + }, + "genus": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 322, + "micro_accuracy_all": 0.8028819918144611, + "micro_accuracy_known": 0.8028819918144611, + "macro_accuracy_all": 0.827226542712412, + "macro_accuracy_known": 0.827226542712412, + "abstention_coverage": 1.0 + }, + "family": { + "images": 58640, + "known_images": 58640, + "list_coverage": 1.0, + "truth_species_or_taxa": 23, + "micro_accuracy_all": 0.9451909959072305, + "micro_accuracy_known": 0.9451909959072305, + "macro_accuracy_all": 0.833675211353022, + "macro_accuracy_known": 0.833675211353022, + "abstention_coverage": 1.0 + } + }, + "scores": { + "all": { + "accuracy": { + "0": 0.7170052282421303, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "precision": { + "0": 0.2418596950431791, + "1": 0.2835769897348559, + "2": 0.2679310249615683 + }, + "recall": { + "0": 0.7170052282421303, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "f1": { + "0": 0.22605849020602678, + "1": 0.2809063608793024, + "2": 0.2730381805189929 + }, + "micro_accuracy": { + "0": 0.7144270122783083, + "1": 0.8028819918144611, + "2": 0.9451909959072305 + }, + "theilU": { + "0": 0.9440413851876268, + "1": 0.9437976224349767, + "2": 0.8724817175710519 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known": { + "accuracy": { + "0": 0.7396773303209329, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "precision": { + "0": 0.24644726654619223, + "1": 0.2835769897348559, + "2": 0.2679310249615683 + }, + "recall": { + "0": 0.7396773303209329, + "1": 0.827226542712412, + "2": 0.833675211353022 + }, + "f1": { + "0": 0.23210275866823382, + "1": 0.2809063608793024, + "2": 0.2730381805189929 + }, + "micro_accuracy": { + "0": 0.8279773904106882, + "1": 0.8028819918144611, + "2": 0.9451909959072305 + }, + "theilU": { + "0": 0.9468751626112113, + "1": 0.9437976224349767, + "2": 0.8724817175710519 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + } + } + ], + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 1, + "median_ms": 779.0169740001147, + "p95_ms": 844.8682549969817, + "trial_min_ms": 765.1125749980565, + "trial_max_ms": 795.3343949993723, + "images_per_second": 1.2836690770230288, + "trial_min_ips": 1.2573327725890557, + "trial_max_ips": 1.3069972088781054 + }, + { + "model": "v2", + "device": "cpu", + "preset": "europe", + "batch": 8, + "median_ms": 5850.575989999925, + "p95_ms": 5944.596474997525, + "trial_min_ms": 5746.777247000864, + "trial_max_ms": 5879.015160000563, + "images_per_second": 1.3673867348572124, + "trial_min_ips": 1.3607721331338145, + "trial_max_ips": 1.392084581697516 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 1, + "median_ms": 786.2400800004252, + "p95_ms": 878.9685310002824, + "trial_min_ms": 761.7254659999162, + "trial_max_ms": 859.430982000049, + "images_per_second": 1.271876142462057, + "trial_min_ips": 1.1635605661699813, + "trial_max_ips": 1.3128089379121664 + }, + { + "model": "v2", + "device": "cpu", + "preset": "full", + "batch": 8, + "median_ms": 5863.136789001146, + "p95_ms": 6006.966568002099, + "trial_min_ms": 5482.436258000234, + "trial_max_ms": 5984.705701001076, + "images_per_second": 1.3644573353648284, + "trial_min_ips": 1.3367407521245065, + "trial_max_ips": 1.459205291867464 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051, + "trial_min_ips": 1.2090231408800491, + "trial_max_ips": 1.2818313871600613 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944, + "trial_min_ips": 1.3788055719528611, + "trial_max_ips": 1.395534136800447 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "median_ms": 21.484739001607522, + "p95_ms": 29.487491003237665, + "trial_min_ms": 20.258914999431, + "trial_max_ms": 25.015052997332532, + "images_per_second": 46.5446659568533, + "trial_min_ips": 39.975929697475934, + "trial_max_ips": 49.3609850294592 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "median_ms": 184.61432399999467, + "p95_ms": 205.47707299920148, + "trial_min_ms": 180.04209799983073, + "trial_max_ms": 199.17996799995308, + "images_per_second": 43.33358228476481, + "trial_min_ips": 40.164681621004604, + "trial_max_ips": 44.43405230707499 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "median_ms": 386.83066299927304, + "p95_ms": 396.4832749989, + "trial_min_ms": 371.3045529984811, + "trial_max_ms": 390.7396550021076, + "images_per_second": 82.72353528515431, + "trial_min_ips": 81.89596215881235, + "trial_max_ips": 86.18262216712141 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "median_ms": 24.006794999877457, + "p95_ms": 30.195898001693422, + "trial_min_ms": 22.45696499812766, + "trial_max_ms": 26.05628300079843, + "images_per_second": 41.654873130924166, + "trial_min_ips": 38.378459428359655, + "trial_max_ips": 44.52961475797707 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "median_ms": 182.16871000186075, + "p95_ms": 210.70991599845001, + "trial_min_ms": 174.61328799981857, + "trial_max_ms": 198.96718300151406, + "images_per_second": 43.915335404846886, + "trial_min_ips": 40.20763564783004, + "trial_max_ips": 45.81552808288171 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "median_ms": 384.66329000220867, + "p95_ms": 399.98923299935996, + "trial_min_ms": 375.0903689979168, + "trial_max_ms": 393.06417599800625, + "images_per_second": 83.18963839730134, + "trial_min_ips": 81.41164205247317, + "trial_max_ips": 85.31277432020048 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439, + "trial_min_ips": 42.155498314706946, + "trial_max_ips": 47.44126261257847 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184, + "trial_min_ips": 44.73317672158151, + "trial_max_ips": 46.063733355015636 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422, + "trial_min_ips": 82.60617164048303, + "trial_max_ips": 87.65764209895416 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 10.347520653711559, + "trial_min_ips": 9.449655199391756, + "trial_max_ips": 10.812101015895683 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 10.52727820435193, + "trial_min_ips": 10.355297439131876, + "trial_max_ips": 10.65744350194588 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 9.872555672482052, + "trial_min_ips": 9.739427177477546, + "trial_max_ips": 9.922526205578436 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 10.733118494348869, + "trial_min_ips": 10.56679692428927, + "trial_max_ips": 10.763173933865195 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 44.90623220673182, + "trial_min_ips": 42.40445111731503, + "trial_max_ips": 49.82361940898542 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 116.40713454105308, + "trial_min_ips": 110.31223298386196, + "trial_max_ips": 118.96776369619226 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 111.8052747339908, + "trial_min_ips": 106.42003928900061, + "trial_max_ips": 116.63412022082476 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 35.75541977678956, + "trial_min_ips": 31.557083953590467, + "trial_max_ips": 40.90267960770997 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 88.21443464701524, + "trial_min_ips": 77.52627983150244, + "trial_max_ips": 100.02293651107108 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 91.63275276401218, + "trial_min_ips": 89.34198103795067, + "trial_max_ips": 95.64585858346106 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 6.172664042716186, + "trial_min_ips": 5.627297914052408, + "trial_max_ips": 6.828606710641469 + }, + { + "model": "torch", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 8.025987344454904, + "trial_min_ips": 7.857073739438581, + "trial_max_ips": 8.619013897827697 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 6.041894204300364, + "trial_min_ips": 5.731894027251844, + "trial_max_ips": 6.9101794079583225 + }, + { + "model": "torch", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 8.113175364445661, + "trial_min_ips": 7.88456031532421, + "trial_max_ips": 8.7687304782976 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 28.83568538372905, + "trial_min_ips": 22.725586903841528, + "trial_max_ips": 31.210095944870968 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 125.82158545438949, + "trial_min_ips": 119.8725311439004, + "trial_max_ips": 129.27090257523392 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 130.40128489292832, + "trial_min_ips": 127.11801504041274, + "trial_max_ips": 137.8194417258879 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 25.264118675077682, + "trial_min_ips": 18.90083587705983, + "trial_max_ips": 26.779560009971277 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 99.47971239936308, + "trial_min_ips": 93.39931185101867, + "trial_max_ips": 108.8844098127304 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 114.91888491933366, + "trial_min_ips": 113.26886770155022, + "trial_max_ips": 117.92808882913475 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 3.61616895023553, + "trial_min_ips": 3.309972079957367, + "trial_max_ips": 3.8287960728282546 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 3.7831526647157214, + "trial_min_ips": 3.6048412478956644, + "trial_max_ips": 4.082189305392044 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 3.426725175627511, + "trial_min_ips": 3.2045152080974075, + "trial_max_ips": 3.767653836566608 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 3.7782707990925255, + "trial_min_ips": 3.5553114857944736, + "trial_max_ips": 3.9089525024116125 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 3.561175286432469, + "trial_min_ips": 3.3503635775897, + "trial_max_ips": 3.886995328284915 + }, + { + "model": "onnx-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 3.6563573228202517, + "trial_min_ips": 3.5873525040903167, + "trial_max_ips": 3.7129079750674214 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 17.212647840331343, + "trial_min_ips": 16.034761308791516, + "trial_max_ips": 19.639395943527212 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 40.674625059153556, + "trial_min_ips": 39.791527214723196, + "trial_max_ips": 41.396650116654875 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 39.53910119809616, + "trial_min_ips": 38.76763306113256, + "trial_max_ips": 39.9450587171705 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 16.988359085008785, + "trial_min_ips": 16.483448739171447, + "trial_max_ips": 18.538046291746998 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 37.88373034283034, + "trial_min_ips": 37.111930975686874, + "trial_max_ips": 38.69510247278414 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 36.95819763023284, + "trial_min_ips": 36.37204595255475, + "trial_max_ips": 37.630858561833776 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 16.806574961016018, + "trial_min_ips": 16.162127342042172, + "trial_max_ips": 18.97217735757236 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 41.71013731980595, + "trial_min_ips": 40.925373232178444, + "trial_max_ips": 43.18896638486406 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 39.4235302663773, + "trial_min_ips": 39.06681027295766, + "trial_max_ips": 40.37331819506116 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "europe", + "batch": 1, + "images_per_second": 2.287118613138587, + "trial_min_ips": 2.1851129300562864, + "trial_max_ips": 2.482005528177684 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "europe", + "batch": 8, + "images_per_second": 2.7049487075161327, + "trial_min_ips": 2.622606402663152, + "trial_max_ips": 2.898235536271152 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "full", + "batch": 1, + "images_per_second": 2.278081582463175, + "trial_min_ips": 2.0602624500227362, + "trial_max_ips": 2.6011388935773456 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "full", + "batch": 8, + "images_per_second": 2.8280494369344615, + "trial_min_ips": 2.659458409424666, + "trial_max_ips": 2.9373585340775206 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 2.288530218830576, + "trial_min_ips": 2.155690346260477, + "trial_max_ips": 2.3532725837100927 + }, + { + "model": "torch-tta", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 2.632002994220812, + "trial_min_ips": 2.6257158336095183, + "trial_max_ips": 2.667819183229088 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 1, + "images_per_second": 9.741307784970735, + "trial_min_ips": 6.800286401032054, + "trial_max_ips": 10.34051919058783 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 8, + "images_per_second": 43.69933938962156, + "trial_min_ips": 43.241157850181594, + "trial_max_ips": 44.366008299944276 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "europe", + "batch": 32, + "images_per_second": 49.69719614883462, + "trial_min_ips": 47.84022965943082, + "trial_max_ips": 51.650194666057004 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 1, + "images_per_second": 9.0244513904008, + "trial_min_ips": 6.641401535478677, + "trial_max_ips": 10.127693298641633 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 8, + "images_per_second": 39.62892269354411, + "trial_min_ips": 39.00789960569874, + "trial_max_ips": 41.17620445680809 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "full", + "batch": 32, + "images_per_second": 45.352411694806676, + "trial_min_ips": 43.615200272239626, + "trial_max_ips": 46.34152205515856 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 8.487978285416776, + "trial_min_ips": 6.5431811352091485, + "trial_max_ips": 10.45855732845488 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 42.707279353003095, + "trial_min_ips": 42.11852472915729, + "trial_max_ips": 44.92890559371275 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 50.43291019095829, + "trial_min_ips": 50.35437457596695, + "trial_max_ips": 51.25424002515836 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cpu", + "rss_mib": 4122.8125, + "load_first_seconds": 209.39651592600057, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cuda:0", + "rss_mib": 4122.58203125, + "load_first_seconds": 209.60287212600088, + "allocated_mib": 1935.630859375 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "rss_mib": 2442.46875, + "load_first_seconds": 44.04954374099907, + "allocated_mib": 597.46044921875 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "rss_mib": 1628.76171875, + "load_first_seconds": 1.7244672899978468, + "allocated_mib": null + }, + { + "model": "torch-tta", + "device": "cpu", + "rss_mib": 1638.64453125, + "load_first_seconds": 43.274880386001314, + "allocated_mib": null + }, + { + "model": "onnx-tta", + "device": "cpu", + "rss_mib": 671.12890625, + "load_first_seconds": 0.5310090099956142, + "allocated_mib": null + } + ], + "sources_sha256": { + "docs/assets/mambo-accelerated-comparison.json": "c42b21e6b3e0c337457e3d9df9e4b30c02c5611dd1f2ec8fa66efe444dae941a", + "docs/assets/mambo-release-comparison.json": "b54cb1a592c2410913fc883818bf4f496a8d3a12a3da552b8b352a180d428414", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/metrics.json": "b9ebcaae7cd3eee5fffd79cd48d42ff185efb051455afc24f047dcb2819e6be2", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/europe/metrics.json": "281d586dfb7712042d3cd3449fc68871c2f77b7ce1dab5b433e34ad49bef5664", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/full/metrics.json": "97b38f29832145e64ca8b55327247b43fdbc3b98125b94cdeed8c2a559be8ce7", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe_v3/metrics.json": "bea5465b6f1f12be1227bbc98f07a8c01783c7bce9e0bcfa9487226ec746f2e9", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/europe_v3/metrics.json": "a02355914aac8e5a4245b32d1a739c6688b53002d8ab7eb63d997592c5f92037", + "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/report.json": "be8c81bb5a12d8d516186f9c9e3978f957f4cce4c19fa4865e666e837308d067", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/metrics.json": "f40b179ee0f5bd123954558df09632ed54acec0abdc4d6db187d71f9dc543c81", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/europe/metrics.json": "22eab90ec022c85a5843852f6122540f1a78e7031c4273e3be117a5046d224da", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/full/metrics.json": "a2c20f05e02d1cab911b9074f0ea9588b8ead8189fe97b0d8495cc040388f33c", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe_v3/metrics.json": "d67e2c451d69e2c68bc8ebcb533b187e7bfdb29fd052947275eec62bf4b91d99", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/europe_v3/metrics.json": "8c5bf2a1c6f39b53ee74ee2a73e9dff30d3346cee4c0875c20b15c61244347bb", + "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/report.json": "bb65c66c618f03b1309d4fceeea73a7d02452f2c95ffb29ac5e3c58d44760cde", + "local-evidence/mambo-default-tta-performance/trial-0-torch-cuda-0/report.json": "551ac51fdfd7447fa91d108fa0d8623d529d7cefd935c140eb6dc68a1d9093bb", + "local-evidence/mambo-default-tta-performance/trial-0-onnx-cuda-0/report.json": "317bc0f4dc02e1c54c023403ae50428dba5f8777aef46da7d63cf9fb2dc38ce8", + "local-evidence/mambo-default-tta-performance/trial-0-torch-cpu/report.json": "d8dc923857471613ba463397854b1826374a2d8c4ee39d31e128685aea96dcc9", + "local-evidence/mambo-default-tta-performance/trial-0-onnx-cpu/report.json": "c87fb33ad7465ed4a58dfdb0a1e8d788c42e93aa7df624b7395d5ac2c9158907", + "local-evidence/mambo-default-tta-performance/trial-1-onnx-cpu/report.json": "e6cc87602a81abc6ebed118da401fc2bb82b7646b4b452ff6ae2a4193b807251", + "local-evidence/mambo-default-tta-performance/trial-1-torch-cpu/report.json": "064f6a0db3534ddc0c49760b639141a45b575f37d833e06e3e3819d6ec42895e", + "local-evidence/mambo-default-tta-performance/trial-1-onnx-cuda-0/report.json": "54de36559b35f5c96f6a14692e22e903b531d20cc8dd73d5d221f6f8dcbc9202", + "local-evidence/mambo-default-tta-performance/trial-1-torch-cuda-0/report.json": "5df9b9cd792f2f1e95a4d48b8905f7c16436da05dbf7e8581c3b71692b47058c", + "local-evidence/mambo-default-tta-performance/trial-2-torch-cuda-0/report.json": "f72cce7a227ad057d6f0cc15b2fb7b7e2285aadda79c1af9b139ec46dcfa3eb0", + "local-evidence/mambo-default-tta-performance/trial-2-onnx-cuda-0/report.json": "dda47be5a2b4a819b8a569f554c04ef024791597b05e20571070de4c6f7c3f29", + "local-evidence/mambo-default-tta-performance/trial-2-torch-cpu/report.json": "9fd5b141fa709121a29fa458b566a4b12a4dffa6776a62656f54574d6a6f102a", + "local-evidence/mambo-default-tta-performance/trial-2-onnx-cpu/report.json": "8b4ebcaf066548faf433bf14baa89615508acbf6aef39b1846f3f4b713d8d2ed" + }, + "bundle_sha256": "c576f53f404575bb9301de16427dd4feee9b03e48292180e184e0385052ee49b", + "manifest_sha256": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f", + "timing_bank_sha256": "aa2aea4ecd76bbce46a38a4787f632763fe60b6296d27aa6a2ed633c59e15b63" +} diff --git a/docs/assets/mambo-defaults-memory.svg b/docs/assets/mambo-defaults-memory.svg new file mode 100644 index 0000000..3cd1f28 --- /dev/null +++ b/docs/assets/mambo-defaults-memory.svg @@ -0,0 +1,484 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + torch + + + + + + + + + + V3 + ONNX + + + + + + + + + + torch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 1618 + + + 689 + + + 1639 + + + 671 + + + CPU execution + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + torch + + + + + + + + + + V3 + ONNX + + + + + + + + + + torch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 2000 + + + + + + + + + + + + + 3000 + + + + + + + + + + + + + 4000 + + + + Peak host RSS (MiB) + + + + + + + + + + + + + + + + + + + + + + + + + 4123 + + + 2512 + + + 1619 + + + 2442 + + + 1629 + + + GPU execution + + + + Process memory · median of three fresh processes + + + Host memory, not GPU VRAM; includes loading and complete CPU 1/8 or GPU 1/8/32 batch sweep. + TTA retains original decoded images for each batch; memory depends on source dimensions. + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-metrics.csv b/docs/assets/mambo-defaults-metrics.csv new file mode 100644 index 0000000..c6c316f --- /dev/null +++ b/docs/assets/mambo-defaults-metrics.csv @@ -0,0 +1,139 @@ +variant,preset,scope,rank,images,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +v2,north_europe,all,species,58640,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.25753800338546967,0.68712482946794,0.9259639612074944,1.0 +v2,north_europe,all,genus,58640,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452811,0.7922919508867667,0.9286450152404832,1.0 +v2,north_europe,all,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,north_europe,known,species,50598,0.706872966471589,0.27934832747314936,0.706872966471589,0.26468747200295195,0.7963358235503379,0.9284675700829689,1.0 +v2,north_europe,known,genus,58639,0.7914633554838781,0.3189462554934523,0.7914633554838781,0.3174198331740771,0.7923054622350313,0.9286569914847851,1.0 +v2,north_europe,known,family,58640,0.8440271040813301,0.26007435892237385,0.8440271040813301,0.2691037692533918,0.9449351978171896,0.865726913911594,1.0 +v2,europe,all,species,58640,0.6604260262269301,0.220093475997043,0.6604260262269301,0.19998360830548284,0.669594133697135,0.9298644970123321,1.0 +v2,europe,all,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,all,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,europe,known,species,50598,0.6813090626293627,0.22455003199982063,0.6813090626293627,0.20496609487323514,0.7760188149729238,0.9324736395684865,1.0 +v2,europe,known,genus,58640,0.7728971632770847,0.26145460355851485,0.7728971632770847,0.25527668172822016,0.7764495225102319,0.9304037751304223,1.0 +v2,europe,known,family,58640,0.8353711166095457,0.24311183116521895,0.8353711166095457,0.2512650593074731,0.9423090040927694,0.858730608498533,1.0 +v2,full,all,species,58640,0.5720627970250876,0.1100618404698789,0.5720627970250876,0.08990868448899282,0.5936050477489768,0.9424989337241723,1.0 +v2,full,all,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,all,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +v2,full,known,species,50598,0.5901517392235093,0.11296990063684895,0.5901517392235093,0.09231932892005533,0.6879520929681016,0.9472050810666933,1.0 +v2,full,known,genus,58640,0.7168278641037727,0.1327201662316462,0.7168278641037727,0.12210675669894289,0.7285129604365621,0.9364867523141058,1.0 +v2,full,known,family,58640,0.8069699178640561,0.19682625488877242,0.8069699178640561,0.20522430973656694,0.9265006821282401,0.8320049778627998,1.0 +torch,north_europe,all,species,58640,0.7124755690715492,0.2634270457338045,0.7124755690715492,0.25428952382168735,0.7078274215552524,0.928300449968092,1.0 +torch,north_europe,all,genus,58640,0.8053483819748223,0.31893660877341173,0.8053483819748223,0.3204124099108478,0.7936903137789905,0.9269683891259273,1.0 +torch,north_europe,all,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +torch,north_europe,known,species,50598,0.7350044408208473,0.2676065928162877,0.7350044408208473,0.2606923077861283,0.8203288667536266,0.9313351406548803,1.0 +torch,north_europe,known,genus,58639,0.8078572554389183,0.31896401442542444,0.8078572554389183,0.32088253381207055,0.7937038489742322,0.9269818797430123,1.0 +torch,north_europe,known,family,58640,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.2804463369346697,0.9296896316507504,0.848717056770075,1.0 +torch,europe,all,species,58640,0.6904573601499047,0.21308377178370788,0.6904573601499047,0.19974835307971503,0.6894270122783083,0.9327685730735747,1.0 +torch,europe,all,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +torch,europe,all,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +torch,europe,known,species,50598,0.7122900039491111,0.21751022464426337,0.7122900039491111,0.2052193214139764,0.7990039131981501,0.9362130669456851,1.0 +torch,europe,known,genus,58640,0.7927569371584571,0.2577674325030351,0.7927569371584571,0.25521877922468866,0.7794167803547067,0.9303872077924281,1.0 +torch,europe,known,family,58640,0.8061547662632332,0.2517251364434932,0.8061547662632332,0.2555840946637753,0.9285300136425648,0.8414042795502794,1.0 +torch,full,all,species,58640,0.5800914186056899,0.11941327816354223,0.5800914186056899,0.09729142790239681,0.5842087312414734,0.9380984507134764,1.0 +torch,full,all,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +torch,full,all,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +torch,full,known,species,50598,0.5984342302612058,0.12352484541958572,0.5984342302612058,0.10067516090358233,0.6770623344796237,0.9436338812191157,1.0 +torch,full,known,genus,58640,0.7129759960732965,0.1394431837512301,0.7129759960732965,0.1268067151804599,0.7057128240109141,0.9278203586503335,1.0 +torch,full,known,family,58640,0.784246040298466,0.1882961794945315,0.784246040298466,0.19361355430273816,0.9029502046384721,0.8029884477926725,1.0 +torch,north_europe_v3,all,species,58640,0.704628249754435,0.24730856379330513,0.704628249754435,0.2368364750172347,0.7031548431105048,0.9297081356830714,1.0 +torch,north_europe_v3,all,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +torch,north_europe_v3,all,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +torch,north_europe_v3,known,species,50598,0.7269089849245357,0.2516551965945558,0.7269089849245357,0.24302911458287843,0.8149136329499189,0.9329238752080722,1.0 +torch,north_europe_v3,known,genus,58640,0.8000993660812793,0.30404516864512815,0.8000993660812793,0.30405829620707303,0.7888472032742155,0.9278811825938204,1.0 +torch,north_europe_v3,known,family,58640,0.8066151835359162,0.26911334290120537,0.8066151835359162,0.27317213148165537,0.9288540245566167,0.8463131556985152,1.0 +torch,europe_v3,all,species,58640,0.6886240058738285,0.21178593938637336,0.6886240058738285,0.1978902721150327,0.6879945429740791,0.9323203923796567,1.0 +torch,europe_v3,all,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +torch,europe_v3,all,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +torch,europe_v3,known,species,50598,0.7103986779963212,0.2164221653533803,0.7103986779963212,0.20351606400355202,0.7973437685284004,0.9362292436999937,1.0 +torch,europe_v3,known,genus,58640,0.7907596138745981,0.25597447312765065,0.7907596138745981,0.25283249885833836,0.7779331514324693,0.9297196214314329,1.0 +torch,europe_v3,known,family,58640,0.804801469829159,0.25018741937505296,0.804801469829159,0.25394065720716125,0.9252899045020464,0.8382838670363196,1.0 +onnx,north_europe,all,species,58640,0.7123551106111988,0.2634302800489512,0.7123551106111988,0.25432102340018437,0.7078444747612551,0.9282787583085454,1.0 +onnx,north_europe,all,genus,58640,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369,0.7936221009549795,0.9270081304640697,1.0 +onnx,north_europe,all,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +onnx,north_europe,known,species,50598,0.7348801733973236,0.26759865685833206,0.7348801733973236,0.26071387372659355,0.8203486303806474,0.931297601666784,1.0 +onnx,north_europe,known,genus,58639,0.8075090522845452,0.31885723521848236,0.8075090522845452,0.32170684925385246,0.7936356349869541,0.9270216229111814,1.0 +onnx,north_europe,known,family,58640,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.28076917349510716,0.9298601637107776,0.8488811049574605,1.0 +onnx,europe,all,species,58640,0.6906260019361401,0.21297537840475272,0.6906260019361401,0.19968247097445052,0.6894952251023192,0.9327107183368355,1.0 +onnx,europe,all,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +onnx,europe,all,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +onnx,europe,known,species,50598,0.712463978281947,0.21739674629675512,0.712463978281947,0.2051505331795797,0.7990829677062334,0.9360902428349954,1.0 +onnx,europe,known,genus,58640,0.7928148275159873,0.25814705246049136,0.7928148275159873,0.2556792223856105,0.7794338335607094,0.9303898466600729,1.0 +onnx,europe,known,family,58640,0.8063031248841592,0.25176260717979065,0.8063031248841592,0.25564879210539354,0.928581173260573,0.8413915880115065,1.0 +onnx,full,all,species,58640,0.5803258635150937,0.11940183392320727,0.5803258635150937,0.09730444648358827,0.5842769440654844,0.9381877433883671,1.0 +onnx,full,all,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +onnx,full,all,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +onnx,full,known,species,50598,0.5986760884483774,0.12359009712973944,0.5986760884483774,0.10075026693576739,0.677141388987707,0.9437018925013999,1.0 +onnx,full,known,genus,58640,0.7132927172304062,0.139506013324115,0.7132927172304062,0.12688882216850472,0.7058321964529332,0.9279129375668055,1.0 +onnx,full,known,family,58640,0.7842061134551048,0.18845606769929624,0.7842061134551048,0.1937730887900641,0.9030695770804912,0.8032163508659165,1.0 +onnx,north_europe_v3,all,species,58640,0.70490721102182,0.24693597388838318,0.70490721102182,0.23654830838429805,0.703206002728513,0.9297283074523651,1.0 +onnx,north_europe_v3,all,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +onnx,north_europe_v3,all,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +onnx,north_europe_v3,known,species,50598,0.7271967671015613,0.2512627097909782,0.7271967671015613,0.24271540486034088,0.8149729238309814,0.9329324973505538,1.0 +onnx,north_europe_v3,known,genus,58640,0.7998011634423278,0.304018206726156,0.7998011634423278,0.3048604148769131,0.7889324693042292,0.9279871144012297,1.0 +onnx,north_europe_v3,known,family,58640,0.8066719936597678,0.26915209911986615,0.8066719936597678,0.2732530547620374,0.9289392905866303,0.8462225486926431,1.0 +onnx,europe_v3,all,species,58640,0.6887960648645841,0.21168953424574674,0.6887960648645841,0.19783273588838454,0.6880627557980901,0.9322918377735964,1.0 +onnx,europe_v3,all,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +onnx,europe_v3,all,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +onnx,europe_v3,known,species,50598,0.710576177587575,0.21632075786236368,0.710576177587575,0.2034558161613722,0.7974228230364837,0.9361375391213514,1.0 +onnx,europe_v3,known,genus,58640,0.7908120470589387,0.2560315293300679,0.7908120470589387,0.2529767781457853,0.7779672578444747,0.9297404742905871,1.0 +onnx,europe_v3,known,family,58640,0.805164255187583,0.25025960445781553,0.805164255187583,0.2540572988243291,0.9254774897680764,0.838470274037207,1.0 +torch-tta,north_europe,all,species,58640,0.7394942213066358,0.3045154257441182,0.7394942213066358,0.29354423320755,0.7318724420190996,0.9406189646961585,1.0 +torch-tta,north_europe,all,genus,58640,0.8303908427754559,0.3505904633143813,0.8303908427754559,0.353208999336762,0.8158594815825375,0.9419385064155936,1.0 +torch-tta,north_europe,all,family,58640,0.857176291043506,0.2854195568227899,0.857176291043506,0.2967297720520215,0.9476637107776262,0.8801009206026382,1.0 +torch-tta,north_europe,known,species,50598,0.7628774377906401,0.31130376488612155,0.7628774377906401,0.30320298151377173,0.8481955808529982,0.9430153185488799,1.0 +torch-tta,north_europe,known,genus,58639,0.8329777301361272,0.3506444171806519,0.8329777301361272,0.353759732820872,0.8158733948396119,0.9419514702058922,1.0 +torch-tta,north_europe,known,family,58640,0.857176291043506,0.2854195568227899,0.857176291043506,0.2967297720520215,0.9476637107776262,0.8801009206026382,1.0 +torch-tta,europe,all,species,58640,0.718077691416366,0.2429470820689653,0.718077691416366,0.22757154948143235,0.7156548431105048,0.944413998137816,1.0 +torch-tta,europe,all,genus,58640,0.8293085814992414,0.28385324239562887,0.8293085814992414,0.28200483380977825,0.804024556616644,0.9441314851902275,1.0 +torch-tta,europe,all,family,58640,0.8563266688215283,0.2653959371196337,0.8563266688215283,0.27529463404409366,0.9472032742155525,0.87467980248827,1.0 +torch-tta,europe,known,species,50598,0.7407837053741958,0.24775255855583658,0.7407837053741958,0.23384828180126666,0.829400371556188,0.9470276431963978,1.0 +torch-tta,europe,known,genus,58640,0.8293085814992414,0.28385324239562887,0.8293085814992414,0.28200483380977825,0.804024556616644,0.9441314851902275,1.0 +torch-tta,europe,known,family,58640,0.8563266688215283,0.2653959371196337,0.8563266688215283,0.27529463404409366,0.9472032742155525,0.87467980248827,1.0 +torch-tta,full,all,species,58640,0.6173142553970794,0.13138339990786518,0.6173142553970794,0.11096250944892755,0.6262619372442019,0.9508870287194768,1.0 +torch-tta,full,all,genus,58640,0.7510468819168783,0.15667958535770124,0.7510468819168783,0.14574565079611349,0.7451739427012278,0.9443425774705536,1.0 +torch-tta,full,all,family,58640,0.8145939456784087,0.21261476235886365,0.8145939456784087,0.2183082373459294,0.9275068212824011,0.8448686499703433,1.0 +torch-tta,full,known,species,50598,0.6368340737495563,0.13564757725358406,0.6368340737495563,0.11490466732444428,0.7257994387129926,0.9551144723608224,1.0 +torch-tta,full,known,genus,58640,0.7510468819168783,0.15667958535770124,0.7510468819168783,0.14574565079611349,0.7451739427012278,0.9443425774705536,1.0 +torch-tta,full,known,family,58640,0.8145939456784087,0.21261476235886365,0.8145939456784087,0.2183082373459294,0.9275068212824011,0.8448686499703433,1.0 +torch-tta,north_europe_v3,all,species,58640,0.7309514872176466,0.2836262314662556,0.7309514872176466,0.2712624922442485,0.727575034106412,0.9419128470540503,1.0 +torch-tta,north_europe_v3,all,genus,58640,0.8277669590594472,0.3334921424445981,0.8277669590594472,0.3337289068163522,0.8116132332878582,0.9427305687063423,1.0 +torch-tta,north_europe_v3,all,family,58640,0.8346576161414683,0.27245649076352374,0.8346576161414683,0.27776074959879515,0.9469304229195089,0.8781254078254616,1.0 +torch-tta,north_europe_v3,known,species,50598,0.7540645777225524,0.28991904052186485,0.7540645777225524,0.2798828148296063,0.8432151468437488,0.9444028505698309,1.0 +torch-tta,north_europe_v3,known,genus,58640,0.8277669590594472,0.3334921424445981,0.8277669590594472,0.3337289068163522,0.8116132332878582,0.9427305687063423,1.0 +torch-tta,north_europe_v3,known,family,58640,0.8346576161414683,0.27245649076352374,0.8346576161414683,0.27776074959879515,0.9469304229195089,0.8781254078254616,1.0 +torch-tta,europe_v3,all,species,58640,0.7166090539144668,0.24106168297359762,0.7166090539144668,0.2253220208562535,0.7144270122783083,0.944113343442953,1.0 +torch-tta,europe_v3,all,genus,58640,0.8268147188498062,0.2834023411805787,0.8268147188498062,0.2803332160378765,0.8029331514324693,0.9437905591277826,1.0 +torch-tta,europe_v3,all,family,58640,0.8335264497898153,0.2678618299824677,0.8335264497898153,0.2729237571963636,0.9449693042291951,0.8721280753438848,1.0 +torch-tta,europe_v3,known,species,50598,0.7392686287418017,0.24579080574948112,0.7392686287418017,0.23148434630648257,0.8279773904106882,0.9469432695851171,1.0 +torch-tta,europe_v3,known,genus,58640,0.8268147188498062,0.2834023411805787,0.8268147188498062,0.2803332160378765,0.8029331514324693,0.9437905591277826,1.0 +torch-tta,europe_v3,known,family,58640,0.8335264497898153,0.2678618299824677,0.8335264497898153,0.2729237571963636,0.9449693042291951,0.8721280753438848,1.0 +onnx-tta,north_europe,all,species,58640,0.7398002960321982,0.30560509035336597,0.7398002960321982,0.29443636070255313,0.7319406548431105,0.9406019271139017,1.0 +onnx-tta,north_europe,all,genus,58640,0.8304111700220072,0.35093141039439896,0.8304111700220072,0.35360877971608107,0.8158594815825375,0.9419354628293558,1.0 +onnx-tta,north_europe,all,family,58640,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087,0.9476978171896316,0.8801548412074369,1.0 +onnx-tta,north_europe,known,species,50598,0.7631931907683942,0.31216254534687643,0.7631931907683942,0.30388844140667753,0.8482746353610815,0.9430067345925155,1.0 +onnx-tta,north_europe,known,genus,58639,0.832998120707434,0.3509854434880796,0.832998120707434,0.35416090691553337,0.8158733948396119,0.9419484264795018,1.0 +onnx-tta,north_europe,known,family,58640,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087,0.9476978171896316,0.8801548412074369,1.0 +onnx-tta,europe,all,species,58640,0.7184729389376375,0.24372650581041436,0.7184729389376375,0.22830834852570925,0.715637789904502,0.9443265822955385,1.0 +onnx-tta,europe,all,genus,58640,0.8297204053618472,0.2845980888173239,0.8297204053618472,0.28278130491705644,0.8039733969986358,0.9441410149358417,1.0 +onnx-tta,europe,all,family,58640,0.8563774763022645,0.26558303107014986,0.8563774763022645,0.27545873472892135,0.9473226466575716,0.8748020450770366,1.0 +onnx-tta,europe,known,species,50598,0.741191450840804,0.24838776385935504,0.741191450840804,0.23446467584989356,0.8293806079291671,0.9469465408012699,1.0 +onnx-tta,europe,known,genus,58640,0.8297204053618472,0.2845980888173239,0.8297204053618472,0.28278130491705644,0.8039733969986358,0.9441410149358417,1.0 +onnx-tta,europe,known,family,58640,0.8563774763022645,0.26558303107014986,0.8563774763022645,0.27545873472892135,0.9473226466575716,0.8748020450770366,1.0 +onnx-tta,full,all,species,58640,0.6174475873691395,0.13160765012851372,0.6174475873691395,0.11115707584052233,0.6261425648021828,0.9508514561757678,1.0 +onnx-tta,full,all,genus,58640,0.7510220833093467,0.15697625283734776,0.7510220833093467,0.14605018175665105,0.7451568894952251,0.9443370637895987,1.0 +onnx-tta,full,all,family,58640,0.8145187008621275,0.2126777336514247,0.8145187008621275,0.21830567803410023,0.9275238744884038,0.8446531494151259,1.0 +onnx-tta,full,known,species,50598,0.6369716217523534,0.13589123854540153,0.6369716217523534,0.11511288629482906,0.7256610933238468,0.9550252355096324,1.0 +onnx-tta,full,known,genus,58640,0.7510220833093467,0.15697625283734776,0.7510220833093467,0.14605018175665105,0.7451568894952251,0.9443370637895987,1.0 +onnx-tta,full,known,family,58640,0.8145187008621275,0.2126777336514247,0.8145187008621275,0.21830567803410023,0.9275238744884038,0.8446531494151259,1.0 +onnx-tta,north_europe_v3,all,species,58640,0.731249034719374,0.28460861709588325,0.731249034719374,0.2720585446067734,0.7276261937244202,0.9418634558142434,1.0 +onnx-tta,north_europe_v3,all,genus,58640,0.8277501260203206,0.3338821217092504,0.8277501260203206,0.334119400397056,0.8115961800818554,0.94272656175805,1.0 +onnx-tta,north_europe_v3,all,family,58640,0.8346677390702247,0.27237041484255897,0.8346677390702247,0.27775524799008994,0.9469815825375171,0.8782213541986774,1.0 +onnx-tta,north_europe_v3,known,species,50598,0.7543715338409351,0.29070206429216244,0.7543715338409351,0.2805010841484588,0.8432744377248113,0.9443618486684395,1.0 +onnx-tta,north_europe_v3,known,genus,58640,0.8277501260203206,0.3338821217092504,0.8277501260203206,0.334119400397056,0.8115961800818554,0.94272656175805,1.0 +onnx-tta,north_europe_v3,known,family,58640,0.8346677390702247,0.27237041484255897,0.8346677390702247,0.27775524799008994,0.9469815825375171,0.8782213541986774,1.0 +onnx-tta,europe_v3,all,species,58640,0.7170052282421303,0.2418596950431791,0.7170052282421303,0.22605849020602678,0.7144270122783083,0.9440413851876268,1.0 +onnx-tta,europe_v3,all,genus,58640,0.827226542712412,0.2835769897348559,0.827226542712412,0.2809063608793024,0.8028819918144611,0.9437976224349767,1.0 +onnx-tta,europe_v3,all,family,58640,0.833675211353022,0.2679310249615683,0.833675211353022,0.2730381805189929,0.9451909959072305,0.8724817175710519,1.0 +onnx-tta,europe_v3,known,species,50598,0.7396773303209329,0.24644726654619223,0.7396773303209329,0.23210275866823382,0.8279773904106882,0.9468751626112113,1.0 +onnx-tta,europe_v3,known,genus,58640,0.827226542712412,0.2835769897348559,0.827226542712412,0.2809063608793024,0.8028819918144611,0.9437976224349767,1.0 +onnx-tta,europe_v3,known,family,58640,0.833675211353022,0.2679310249615683,0.833675211353022,0.2730381805189929,0.9451909959072305,0.8724817175710519,1.0 diff --git a/docs/assets/mambo-defaults-quality-all.svg b/docs/assets/mambo-defaults-quality-all.svg new file mode 100644 index 0000000..a803e1a --- /dev/null +++ b/docs/assets/mambo-defaults-quality-all.svg @@ -0,0 +1,1383 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68.5 + + + 66.0 + + + 57.2 + + + 71.2 + + + 69.0 + + + 58.0 + + + 71.2 + + + 69.1 + + + 58.0 + + + 73.9 + + + 71.8 + + + 61.7 + + + 74.0 + + + 71.8 + + + 61.7 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + + + + + + + + + + 0.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.294 + + + 0.228 + + + 0.111 + + + 0.294 + + + 0.228 + + + 0.111 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.274 + + + 0.220 + + + 0.110 + + + 0.263 + + + 0.213 + + + 0.119 + + + 0.263 + + + 0.213 + + + 0.119 + + + 0.305 + + + 0.243 + + + 0.131 + + + 0.306 + + + 0.244 + + + 0.132 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68.7 + + + 67.0 + + + 59.4 + + + 70.8 + + + 68.9 + + + 58.4 + + + 70.8 + + + 68.9 + + + 58.4 + + + 73.2 + + + 71.6 + + + 62.6 + + + 73.2 + + + 71.6 + + + 62.6 + + + Micro accuracy (%) + + + + MAMBO release comparison · species metrics · all truth + + + Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0. + TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation. + Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-quality-known.svg b/docs/assets/mambo-defaults-quality-known.svg new file mode 100644 index 0000000..3249301 --- /dev/null +++ b/docs/assets/mambo-defaults-quality-known.svg @@ -0,0 +1,1338 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 70.7 + + + 68.1 + + + 59.0 + + + 73.5 + + + 71.2 + + + 59.8 + + + 73.5 + + + 71.2 + + + 59.9 + + + 76.3 + + + 74.1 + + + 63.7 + + + 76.3 + + + 74.1 + + + 63.7 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.265 + + + 0.205 + + + 0.092 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.261 + + + 0.205 + + + 0.101 + + + 0.303 + + + 0.234 + + + 0.115 + + + 0.304 + + + 0.234 + + + 0.115 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.279 + + + 0.225 + + + 0.113 + + + 0.268 + + + 0.218 + + + 0.124 + + + 0.268 + + + 0.217 + + + 0.124 + + + 0.311 + + + 0.248 + + + 0.136 + + + 0.312 + + + 0.248 + + + 0.136 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.6 + + + 77.6 + + + 68.8 + + + 82.0 + + + 79.9 + + + 67.7 + + + 82.0 + + + 79.9 + + + 67.7 + + + 84.8 + + + 82.9 + + + 72.6 + + + 84.8 + + + 82.9 + + + 72.6 + + + Micro accuracy (%) + + + + MAMBO release comparison · species metrics · known truth + + + Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0. + TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation. + Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-speed.svg b/docs/assets/mambo-defaults-speed.svg new file mode 100644 index 0000000..dc151f5 --- /dev/null +++ b/docs/assets/mambo-defaults-speed.svg @@ -0,0 +1,940 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + Images per batch + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CPU · FP32 + + + + + + + + + + + + + + + 1 + + + + + + + + + + 8 + + + + + + + + + + 32 + + + + Images per batch + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPU · automatic precision + + + + Complete-pipeline throughput · northern Europe + + + i7-12800H / RTX 3080 Ti Laptop, WSL2; four CPU/preparation threads; same image bank. + Three fresh processes × seven observations; bars show trial-median range. Decode through CPU results included. + V2 and unaugmented V3 reuse recorded measurements; laptop conditions vary between campaigns. V2 CPU uses input cast. + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md new file mode 100644 index 0000000..3f2b043 --- /dev/null +++ b/docs/mambo-deployment-defaults.md @@ -0,0 +1,158 @@ +# MAMBO deployment defaults and release comparison + +Ordinary inference stays single-view. Enabling TTA with `tta=True` or bare `--tta` +selects **padded scale**: the original image plus views with 8% and 15% edge padding. +Each view uses unchanged preprocessing; FP32 leaf logits are averaged before +class-list filtering and hierarchy reduction. Use `tta="padded_scale"` to pin the +recipe explicitly, or `tta=False` / `--tta none` to disable it. + +This is the best measured **accuracy/cost compromise** among the explored policies, +not a claim of optimality for every metric. It had the highest subset macro +accuracy, used only three views and was faster than D4 or padded rotations. +Padded rotations had higher subset macro-F1. The [candidate study](mambo-tta.md) +retains all 13 recipes, exact parameters, sources and their trade-offs. + +## Full Flemming comparison + +Both V3 backends were evaluated on all **58,640 images / 522 truth species**, with +and without TTA at automatic GPU precision. Main comparisons use identical legacy +northern-Europe, Europe and global vocabularies across V2/V3. Updated European lists are included in the +complete tables. All predictive metrics come from `mini_metrics` commit +`70cc69adc05362863439277048e06386c1f885e1`, using `threshold=0`, `optimal=False`, +`simple=True`, `hierarchical=False`. + +The primary chart includes **all truth**, including out-of-vocabulary species. +Macro accuracy gives equal weight to ground-truth species; macro-F1/precision +also reflect predicted-only classes under the package's metric policy. See the +[metric definitions](mambo-release-comparison.md#prediction-quality). The TTA +recipe was selected using a 1,024-image subset of this same dataset: the full +results are descriptive comparisons, **not independent validation**. + +![Full-data species quality](assets/mambo-defaults-quality-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 68.52% | 0.2575 | 68.71% | +| Northern Europe | V3 PyTorch | 71.25% | 0.2543 | 70.78% | +| Northern Europe | V3 ONNX | 71.24% | 0.2543 | 70.78% | +| Northern Europe | V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | +| Northern Europe | V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | +| Europe | MAMBO v2 | 66.04% | 0.2000 | 66.96% | +| Europe | V3 PyTorch | 69.05% | 0.1997 | 68.94% | +| Europe | V3 ONNX | 69.06% | 0.1997 | 68.95% | +| Europe | V3 PyTorch + TTA | 71.81% | 0.2276 | 71.57% | +| Europe | V3 ONNX + TTA | 71.85% | 0.2283 | 71.56% | +| Global | MAMBO v2 | 57.21% | 0.0899 | 59.36% | +| Global | V3 PyTorch | 58.01% | 0.0973 | 58.42% | +| Global | V3 ONNX | 58.03% | 0.0973 | 58.43% | +| Global | V3 PyTorch + TTA | 61.73% | 0.1110 | 62.63% | +| Global | V3 ONNX + TTA | 61.74% | 0.1112 | 62.61% | + +Padded-scale TTA raises northern-Europe macro accuracy by **2.70 / 2.74 percentage +points** for PyTorch / ONNX, with macro-F1 rising to **0.2935 / 0.2944**. Species +macro accuracy, macro-F1 and micro accuracy exceed V2 for all three primary lists. +The full export retains other ranks; this is not a claim that V3 wins every metric. + +Updated European presets (the same inference, different candidate lists): + +| Preset | Backend | Ordinary macro accuracy / F1 | TTA macro accuracy / F1 | +|---|---|---:|---:| +| `north_europe_v3` | torch | 70.46% / 0.2368 | 73.10% / 0.2713 | +| `north_europe_v3` | onnx | 70.49% / 0.2365 | 73.12% / 0.2721 | +| `europe_v3` | torch | 68.86% / 0.1979 | 71.66% / 0.2253 | +| `europe_v3` | onnx | 68.88% / 0.1978 | 71.70% / 0.2261 | + +![Species quality restricted to known truth](assets/mambo-defaults-quality-known.svg) + +The [complete metric table](assets/mambo-defaults-metrics.csv) retains macro +accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, at all +three ranks and for both all/known truth. Known-only species results contain +50,598 images; membership is checked separately at genus and family level. + +## Inference speed and memory + +![CPU and GPU throughput by batch size](assets/mambo-defaults-speed.svg) + +Northern Europe, images/second: + +| Pipeline | CPU B1 | CPU B8 | GPU B1 | GPU B8 | GPU B32 | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 1.39 | 45.2 | 44.8 | 83.5 | +| V3 PyTorch | 5.70 | 7.84 | 29.8 | 126.7 | 136.2 | +| V3 ONNX | 10.08 | 10.81 | 46.7 | 114.1 | 111.3 | +| V3 PyTorch + TTA | 2.29 | 2.63 | 8.5 | 42.7 | 50.4 | +| V3 ONNX + TTA | 3.56 | 3.66 | 16.8 | 41.7 | 39.4 | + +At GPU batch 32, TTA takes about **2.70× the native time / 2.82× the ONNX time** +per image versus ordinary V3. It is slower than V2 on GPU at that batch size, +while still faster than V2 in these CPU measurements. These are measured pipeline +trade-offs, not a uniform speed or quality ranking across every setting. + +These are complete-pipeline **images per second**, including decoding, preparation, +inference and completed CPU results. TTA runs all three views inside that boundary. +The [acceleration study](mambo-accelerated-deployment.md) retains the earlier FP32 +comparison and the AMP/preparation improvements. Both backends here use automatic +precision: FP16 backbone / FP32 head on native CUDA, +TF32 execution of the standard FP32 ONNX graph on CUDA, and FP32 on CPU. + +TTA timings use three fresh-process trials, two warmups and seven observations +per cell, the same seeded 32-image bank and four preparation/runtime CPU threads +as the retained V2 and ordinary V3 measurements. CPU batches are 1/8; GPU batches +are 1/8/32. Throughput uses the median of 21 observations; error bars show the +range of trial medians. The hardware is an i7-12800H / RTX 3080 Ti Laptop (16 GB), +Linux/WSL2 on AC power. Campaigns were run separately, so laptop conditions can +vary. V2 CPU uses the documented caller-side float32 input cast. + +![Peak host memory](assets/mambo-defaults-memory.svg) + +| Pipeline | CPU host MiB | GPU-run host MiB | CPU first-use s | GPU first-use s | Native GPU allocated MiB | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 4123 | 4123 | 209.40 | 209.60 | 1936 | +| V3 PyTorch | 1618 | 2512 | 42.04 | 42.96 | 598 | +| V3 ONNX | 689 | 1619 | 0.37 | 1.46 | — | +| V3 PyTorch + TTA | 1639 | 2442 | 43.27 | 44.05 | 597 | +| V3 ONNX + TTA | 671 | 1629 | 0.53 | 1.72 | — | + +First use includes construction, lazy loading and the first prediction, excluding +interpreter launch and explicit runtime setup. Native classifier initialization +still dominates startup; reusing a predictor avoids repeating it. Loading and +allocator variation influence process peaks. + +Peak host RSS includes model loading and the entire batch sweep. Native allocated +GPU memory is a PyTorch allocator counter, not total VRAM; an equivalent ONNX peak +is unavailable. TTA holds the decoded source batch plus the current prepared view; +it does not multiply the model batch size by the number of views. Host memory +therefore depends on source image dimensions as well as batch size. + +Use ordinary V3 for throughput-sensitive workflows and enable TTA when the measured +accuracy/cost trade-off fits the application. Reuse a loaded predictor. Tune +`preprocess_workers` independently of ONNX `threads`; the [loading study](mambo-loading-scaling.md) +explains why higher batches or more workers are not automatically faster. +In-domain UCloud evaluation, other operating systems and downstream embedding +quality remain separate qualification work. + +## Reproduce + +```sh +python -m dev.releases.mambo_v3.run_local full --precision auto --tta padded_scale \ + --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-tta-quality +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ + --collection /path/to/new-tta-quality +python -m dev.releases.mambo_v3.benchmark_acceleration --tta padded_scale \ + --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ + --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ + --output /path/to/new-tta-timings +python -m dev.releases.mambo_v3.defaults_report \ + --baseline docs/assets/mambo-accelerated-comparison.json \ + --reference docs/assets/mambo-release-comparison.json \ + --quality /path/to/new-tta-quality --performance /path/to/new-tta-timings \ + --output /path/to/charts +``` + +Run timing processes sequentially without other CPU/GPU jobs. All reported speed +is end-to-end; the benchmark's separately labelled prepared-input diagnostic is +single-view even when TTA is enabled, and is not used in these comparisons. +The [compact evidence](assets/mambo-defaults-comparison.json) includes source hashes +and regenerates the figures with `defaults_report --data FILE --output DIRECTORY`. diff --git a/docs/mambo-frequency-comparison.md b/docs/mambo-frequency-comparison.md index 426e83d..925bde5 100644 --- a/docs/mambo-frequency-comparison.md +++ b/docs/mambo-frequency-comparison.md @@ -2,7 +2,7 @@ ![Macro accuracy by training and evaluation frequency](assets/mambo-frequency-accuracy.svg) -These curves compare MAMBO v2 with the automatic v3 PyTorch/ONNX paths on the same +These curves compare MAMBO v2 with the single-view automatic v3 PyTorch/ONNX paths on the same 58,640 Flemming images. Northern Europe leads; Europe and global use the same legacy lists in both releases. All 522 truth species remain in the main curves. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index ebd630c..a2b77ed 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -8,12 +8,21 @@ size or the selected class list. | Profile | Views | Spatial policy | |---|---:|---| | `none` | 1 | Ordinary single-view path; default | +| `padded_scale` | 3 | Original plus 8% / 15% edge padding; default when TTA is enabled | | `hflip` | 2 | Original and horizontal reflection | | `five_crop` | 5 | Original and four corner crops, each 90% of original height/width | | `ten_crop` | 10 | Five-crop views and their horizontal reflections | | `d4` | 8 | Rotations of 0/90/180/270 degrees and their horizontal reflections | | `light_noise` | 3 | Original plus two independently seeded 1% salt-and-pepper views | +Enable the recommended recipe with `Predictor(..., tta=True)` or bare `--tta`. +Both resolve to `padded_scale`, which is also available explicitly. Omitting TTA +keeps single-view inference; `tta=False` and `--tta none` explicitly disable it. +The padded-scale policy was promoted from the exploratory candidates because it +had the highest subset macro accuracy and was faster than D4 or padded rotations. +It did not maximize every metric: padded rotations had higher subset macro-F1. +The public `EdgePad(fraction)` transform exposes the same source-preserving padding. + `SaltAndPepper(proportion=0.01, seed=0)` is also available as a public transform. It uses one RGB-shared black/white pixel mask and an image-keyed seed, so built-in noise is reproducible across batch sizes and preparation worker counts. It operates @@ -46,9 +55,9 @@ retrieval/clustering. The default single-view representation is unchanged. ## Qualification Both automatic GPU backends passed a fixed, seeded **1,024-image / 201-species** -Flemming qualification with all six built-in profiles and all five release evaluation -presets. Metrics use pinned `mini_metrics` at the same revision and threshold-zero -policy as the full release comparison. Species results include all 1,024 images; +Flemming qualification with the six original profiles and all five release evaluation +presets; padded scale was one of the seven additional candidates below. Metrics +use pinned `mini_metrics` at the same revision and threshold-zero policy as the full release comparison. Species results include all 1,024 images; 880 have truth inside the northern-Europe vocabulary. These are **subset results**, not directly comparable to the full-set scores or evidence of a universal gain. @@ -66,12 +75,13 @@ Northern Europe, all truth: D4 improves native macro accuracy by 3.33 percentage points in this subset; crop profiles are worse than single-view inference. Cropping can discard useful parts of a specimen or its context. These profiles were defined before this -comparison; none is selected as a new default. Small per-image changes can have +comparison; D4 is not the enabled default. Small per-image changes can have visible macro effects when species have very little evaluation support. The [compact metrics](assets/mambo-tta-comparison.json) retain all/known-truth macro and micro metrics at species/genus/family level for every profile, backend -and evaluated list. Full-data TTA efficacy, in-domain behavior and downstream +and evaluated list. The [full release comparison](mambo-deployment-defaults.md) +evaluates the promoted padded-scale recipe on all Flemming images. In-domain behavior and downstream embedding usefulness remain unmeasured. Both backends passed finite-score checks, and public prediction/embedding agreement, custom-list and unit-embedding checks on the first eight qualification images for every profile. The installed ONNX-only @@ -209,18 +219,19 @@ all truth, using the same pinned mini_metrics policy: These results favor padded scale/rotation views in this subset, with smaller gains from several photometric/noise policies. They do not establish a general ranking or separate padding from rotation effects. Every tested result is retained, -including the worse crop and salt-and-pepper profiles; none is silently selected -as a default. All 13 policies were tested on the same fixed subset. The additional -candidates are reproducible public-interface examples, not extra CLI profiles. +including the worse crop and salt-and-pepper profiles. All 13 policies were tested +on the same fixed subset. Padded scale is now the named enabled-TTA default; +the other additional candidates remain reproducible public-interface examples. -Keep D4 and other whole-image policies prominent in consumer documentation; retain -crop profiles as optional experimental comparisons. Strong hue changes, aggressive +Keep the padded-scale default and other whole-image policies prominent in consumer +documentation; retain crop profiles as optional experimental comparisons. Strong hue changes, aggressive blur, erasing/Cutout and unbounded Cartesian products are lower-priority candidates here because they alter diagnostic colors/details or rapidly multiply inference cost. This priority is a task-specific inference from the literature and current measurements, not a universal TTA ranking. A compact mixed policy can be tested -next on independent validation data; full Flemming and UCloud evaluation must -remain separate from policy selection. +next on independent validation data. Full Flemming results include the subset +used for recipe selection and are therefore descriptive, not independent +validation; UCloud evaluation remains outstanding. A portable custom policy can use existing Pillow functionality directly: diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 98d61b7..1f25026 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -619,4 +619,7 @@ profiles and custom decoded-image transforms, plus independent preparation worke Flemming support axes. The [worker-scaling study](mambo-loading-scaling.md) confirms remaining loading/scheduling limits; one-batch lookahead is experimental and needs production cancellation/error and CPU/TTA contention qualification before adoption. -TTA is opt-in and has subset evidence; full-data TTA efficacy remains unmeasured. +TTA remains opt-in; `tta=True` and bare `--tta` select the three-view padded-scale +recipe. The [default comparison](mambo-deployment-defaults.md) records full Flemming +metrics and fresh-process CPU/GPU timing against V2 and ordinary V3. The full set +includes the recipe-selection subset; independent in-domain validation remains open. From 2058da2d9df200f5b042f5362a42c3d07726b8cb Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 07:36:18 +0200 Subject: [PATCH 037/221] docs: surface genus and family release comparisons --- deployment/README.md | 18 +- dev/releases/mambo_v3/defaults_report.py | 88 +- docs/assets/mambo-defaults-quality-all.svg | 6 +- .../mambo-defaults-quality-family-all.svg | 1383 ++++++++++++ .../mambo-defaults-quality-family-known.svg | 1383 ++++++++++++ .../mambo-defaults-quality-genus-all.svg | 1338 +++++++++++ .../mambo-defaults-quality-genus-known.svg | 1338 +++++++++++ docs/assets/mambo-defaults-quality-known.svg | 6 +- docs/assets/mambo-defaults-ranks-all.svg | 1998 +++++++++++++++++ docs/mambo-deployment-defaults.md | 96 +- 10 files changed, 7615 insertions(+), 39 deletions(-) create mode 100644 docs/assets/mambo-defaults-quality-family-all.svg create mode 100644 docs/assets/mambo-defaults-quality-family-known.svg create mode 100644 docs/assets/mambo-defaults-quality-genus-all.svg create mode 100644 docs/assets/mambo-defaults-quality-genus-known.svg create mode 100644 docs/assets/mambo-defaults-ranks-all.svg diff --git a/deployment/README.md b/deployment/README.md index cefacb9..d2bfecf 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -126,7 +126,7 @@ the northern-Europe legacy list, shared by V2 and V3; charts also show Europe an global. TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; CPU timings use FP32. -| Pipeline | Macro accuracy | Macro-F1 | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +| Pipeline | Species macro accuracy | Species macro-F1 | CPU B1 | GPU B1 | GPU B8 | GPU B32 | |---|---:|---:|---:|---:|---:|---:| | MAMBO v2 | 68.52% | 0.2575 | 1.26 | 45.2 | 44.8 | 83.5 | | V3 PyTorch | 71.25% | 0.2543 | 5.70 | 29.8 | 126.7 | 136.2 | @@ -139,7 +139,21 @@ on an i7-12800H / RTX 3080 Ti Laptop. Three fresh-process trials use the same im bank and four preparation/runtime CPU threads; V2 and ordinary V3 reuse retained measurements. V2 CPU uses its documented float32 input adapter. -![Full Flemming species metrics](../docs/assets/mambo-defaults-quality-all.svg) +Northern Europe, **genus and family**, also all truth and threshold zero: + +| Pipeline | Genus macro accuracy / F1 | Family macro accuracy / F1 | +|---|---:|---:| +| MAMBO v2 | 78.90% / 0.3169 | 84.40% / 0.2691 | +| V3 PyTorch | 80.53% / 0.3204 | 81.05% / 0.2804 | +| V3 ONNX | 80.50% / 0.3212 | 81.06% / 0.2808 | +| V3 PyTorch + TTA | 83.04% / 0.3532 | 85.72% / 0.2967 | +| V3 ONNX + TTA | 83.04% / 0.3536 | 85.73% / 0.2967 | + +Ordinary V3 improves genus macro accuracy but reduces family macro accuracy +versus V2 (84.40% → about 81.05%). TTA raises these to about **83.04% genus / +85.72–85.73% family**, exceeding V2 at both ranks. + +![Species, genus and family macro metrics](../docs/assets/mambo-defaults-ranks-all.svg) ![CPU and GPU throughput](../docs/assets/mambo-defaults-speed.svg) diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py index cbe9768..b5c15e9 100644 --- a/dev/releases/mambo_v3/defaults_report.py +++ b/dev/releases/mambo_v3/defaults_report.py @@ -91,42 +91,76 @@ def save(fig, name): fig.savefig(output / f"{name}.png", dpi=160, bbox_inches="tight") plt.close(fig) - for scope in ("all", "known"): - fig, axes = plt.subplots(2, 2, figsize=(13, 8)) - for ax, (metric, title) in zip( - axes.flat, - ( - ("accuracy", "Macro accuracy (%)"), - ("f1", "Macro-F1"), - ("precision", "Macro precision"), - ("micro_accuracy", "Micro accuracy (%)"), - ), - strict=True, - ): - factor = 100 if "accuracy" in metric else 1 + for level, rank in enumerate(("species", "genus", "family")): + for scope in ("all", "known"): + fig, axes = plt.subplots(2, 2, figsize=(13, 8)) + for ax, (metric, title) in zip( + axes.flat, + ( + ("accuracy", "Macro accuracy (%)"), + ("f1", "Macro-F1"), + ("precision", "Macro precision"), + ("micro_accuracy", "Micro accuracy (%)"), + ), + strict=True, + ): + factor = 100 if "accuracy" in metric else 1 + for i, (model, label, color) in enumerate(SERIES): + values = [ + next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"][scope][metric][ + str(level) + ] + * factor + for preset in REGIONS + ] + bars = ax.bar(np.arange(3) + (i - 2) * 0.16, values, 0.16, label=label, color=color) + ax.bar_label(bars, fmt="%.1f" if factor == 100 else "%.3f", rotation=60, fontsize=8, padding=3) + upper = 105 if factor == 100 else min(1, max(bar.get_height() for bar in ax.patches) * 1.35) + ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle(f"MAMBO release comparison · {rank} metrics · {scope} truth", fontsize=16) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640.\n" + "TTA: original + two padded views; selected on a Flemming subset, not independently validated.\n" + "Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.88)) + suffix = "" if rank == "species" else f"-{rank}" + save(fig, f"mambo-defaults-quality{suffix}-{scope}") + + fig, axes = plt.subplots(3, 2, figsize=(13, 11)) + for level, rank in enumerate(("species", "genus", "family")): + for col, (metric, title, factor) in enumerate((("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1))): + ax = axes[level, col] for i, (model, label, color) in enumerate(SERIES): values = [ - next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"][scope][metric]["0"] * factor + next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"]["all"][metric][str(level)] + * factor for preset in REGIONS ] bars = ax.bar(np.arange(3) + (i - 2) * 0.16, values, 0.16, label=label, color=color) ax.bar_label(bars, fmt="%.1f" if factor == 100 else "%.3f", rotation=60, fontsize=8, padding=3) upper = 105 if factor == 100 else min(1, max(bar.get_height() for bar in ax.patches) * 1.35) - ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) + ax.set(title=f"{rank.title()} · {title}", xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) ax.grid(axis="y", alpha=0.15) ax.set_axisbelow(True) - fig.suptitle(f"MAMBO release comparison · species metrics · {scope} truth", fontsize=16) - fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) - fig.text( - 0.02, - 0.015, - "Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0.\n" - "TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation.\n" - "Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.10, 1, 0.88)) - save(fig, f"mambo-defaults-quality-{scope}") + fig.suptitle("MAMBO release comparison · species, genus and family", fontsize=16) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.965), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0.\n" + "Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision.\n" + "TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.08, 1, 0.925)) + save(fig, "mambo-defaults-ranks-all") fig, axes = plt.subplots(1, 2, figsize=(12, 5.5)) for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): diff --git a/docs/assets/mambo-defaults-quality-all.svg b/docs/assets/mambo-defaults-quality-all.svg index a803e1a..4cc839f 100644 --- a/docs/assets/mambo-defaults-quality-all.svg +++ b/docs/assets/mambo-defaults-quality-all.svg @@ -1304,9 +1304,9 @@ L 918.5475 486.2 MAMBO release comparison · species metrics · all truth - Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0. - TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation. - Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations. + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. diff --git a/docs/assets/mambo-defaults-quality-family-all.svg b/docs/assets/mambo-defaults-quality-family-all.svg new file mode 100644 index 0000000..696f3f8 --- /dev/null +++ b/docs/assets/mambo-defaults-quality-family-all.svg @@ -0,0 +1,1383 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 84.4 + + + 83.5 + + + 80.7 + + + 81.1 + + + 80.6 + + + 78.4 + + + 81.1 + + + 80.6 + + + 78.4 + + + 85.7 + + + 85.6 + + + 81.5 + + + 85.7 + + + 85.6 + + + 81.5 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.269 + + + 0.251 + + + 0.205 + + + 0.280 + + + 0.256 + + + 0.194 + + + 0.281 + + + 0.256 + + + 0.194 + + + 0.297 + + + 0.275 + + + 0.218 + + + 0.297 + + + 0.275 + + + 0.218 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + + + + + + + + + + 0.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.260 + + + 0.243 + + + 0.197 + + + 0.275 + + + 0.252 + + + 0.188 + + + 0.276 + + + 0.252 + + + 0.188 + + + 0.285 + + + 0.265 + + + 0.213 + + + 0.285 + + + 0.266 + + + 0.213 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 94.5 + + + 94.2 + + + 92.7 + + + 93.0 + + + 92.9 + + + 90.3 + + + 93.0 + + + 92.9 + + + 90.3 + + + 94.8 + + + 94.7 + + + 92.8 + + + 94.8 + + + 94.7 + + + 92.8 + + + Micro accuracy (%) + + + + MAMBO release comparison · family metrics · all truth + + + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-quality-family-known.svg b/docs/assets/mambo-defaults-quality-family-known.svg new file mode 100644 index 0000000..5de27cc --- /dev/null +++ b/docs/assets/mambo-defaults-quality-family-known.svg @@ -0,0 +1,1383 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 84.4 + + + 83.5 + + + 80.7 + + + 81.1 + + + 80.6 + + + 78.4 + + + 81.1 + + + 80.6 + + + 78.4 + + + 85.7 + + + 85.6 + + + 81.5 + + + 85.7 + + + 85.6 + + + 81.5 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.269 + + + 0.251 + + + 0.205 + + + 0.280 + + + 0.256 + + + 0.194 + + + 0.281 + + + 0.256 + + + 0.194 + + + 0.297 + + + 0.275 + + + 0.218 + + + 0.297 + + + 0.275 + + + 0.218 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + + + + + + + + + + 0.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.260 + + + 0.243 + + + 0.197 + + + 0.275 + + + 0.252 + + + 0.188 + + + 0.276 + + + 0.252 + + + 0.188 + + + 0.285 + + + 0.265 + + + 0.213 + + + 0.285 + + + 0.266 + + + 0.213 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 94.5 + + + 94.2 + + + 92.7 + + + 93.0 + + + 92.9 + + + 90.3 + + + 93.0 + + + 92.9 + + + 90.3 + + + 94.8 + + + 94.7 + + + 92.8 + + + 94.8 + + + 94.7 + + + 92.8 + + + Micro accuracy (%) + + + + MAMBO release comparison · family metrics · known truth + + + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-quality-genus-all.svg b/docs/assets/mambo-defaults-quality-genus-all.svg new file mode 100644 index 0000000..9aea9ee --- /dev/null +++ b/docs/assets/mambo-defaults-quality-genus-all.svg @@ -0,0 +1,1338 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 78.9 + + + 77.3 + + + 71.7 + + + 80.5 + + + 79.3 + + + 71.3 + + + 80.5 + + + 79.3 + + + 71.3 + + + 83.0 + + + 82.9 + + + 75.1 + + + 83.0 + + + 83.0 + + + 75.1 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.317 + + + 0.255 + + + 0.122 + + + 0.320 + + + 0.255 + + + 0.127 + + + 0.321 + + + 0.256 + + + 0.127 + + + 0.353 + + + 0.282 + + + 0.146 + + + 0.354 + + + 0.283 + + + 0.146 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.319 + + + 0.261 + + + 0.133 + + + 0.319 + + + 0.258 + + + 0.139 + + + 0.319 + + + 0.258 + + + 0.140 + + + 0.351 + + + 0.284 + + + 0.157 + + + 0.351 + + + 0.285 + + + 0.157 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2 + + + 77.6 + + + 72.9 + + + 79.4 + + + 77.9 + + + 70.6 + + + 79.4 + + + 77.9 + + + 70.6 + + + 81.6 + + + 80.4 + + + 74.5 + + + 81.6 + + + 80.4 + + + 74.5 + + + Micro accuracy (%) + + + + MAMBO release comparison · genus metrics · all truth + + + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-quality-genus-known.svg b/docs/assets/mambo-defaults-quality-genus-known.svg new file mode 100644 index 0000000..f64490e --- /dev/null +++ b/docs/assets/mambo-defaults-quality-genus-known.svg @@ -0,0 +1,1338 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.1 + + + 77.3 + + + 71.7 + + + 80.8 + + + 79.3 + + + 71.3 + + + 80.8 + + + 79.3 + + + 71.3 + + + 83.3 + + + 82.9 + + + 75.1 + + + 83.3 + + + 83.0 + + + 75.1 + + + Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.317 + + + 0.255 + + + 0.122 + + + 0.321 + + + 0.255 + + + 0.127 + + + 0.322 + + + 0.256 + + + 0.127 + + + 0.354 + + + 0.282 + + + 0.146 + + + 0.354 + + + 0.283 + + + 0.146 + + + Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.319 + + + 0.261 + + + 0.133 + + + 0.319 + + + 0.258 + + + 0.139 + + + 0.319 + + + 0.258 + + + 0.140 + + + 0.351 + + + 0.284 + + + 0.157 + + + 0.351 + + + 0.285 + + + 0.157 + + + Macro precision + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2 + + + 77.6 + + + 72.9 + + + 79.4 + + + 77.9 + + + 70.6 + + + 79.4 + + + 77.9 + + + 70.6 + + + 81.6 + + + 80.4 + + + 74.5 + + + 81.6 + + + 80.4 + + + 74.5 + + + Micro accuracy (%) + + + + MAMBO release comparison · genus metrics · known truth + + + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-defaults-quality-known.svg b/docs/assets/mambo-defaults-quality-known.svg index 3249301..a789d8c 100644 --- a/docs/assets/mambo-defaults-quality-known.svg +++ b/docs/assets/mambo-defaults-quality-known.svg @@ -1259,9 +1259,9 @@ L 918.5475 486.2 MAMBO release comparison · species metrics · known truth - Full Flemming: 58,640 images / 522 truth species; known species: 50,598 images. Pinned mini_metrics; threshold 0. - TTA: original + two edge-padded views. Selected using a subset of this dataset; full results are not independent validation. - Same legacy vocabularies across releases; tables also retain updated European lists, all ranks and both truth populations. + All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. + TTA: original + two padded views; selected on a Flemming subset, not independently validated. + Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. diff --git a/docs/assets/mambo-defaults-ranks-all.svg b/docs/assets/mambo-defaults-ranks-all.svg new file mode 100644 index 0000000..9ba2a84 --- /dev/null +++ b/docs/assets/mambo-defaults-ranks-all.svg @@ -0,0 +1,1998 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68.5 + + + 66.0 + + + 57.2 + + + 71.2 + + + 69.0 + + + 58.0 + + + 71.2 + + + 69.1 + + + 58.0 + + + 73.9 + + + 71.8 + + + 61.7 + + + 74.0 + + + 71.8 + + + 61.7 + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.05 + + + + + + + + + + + + + 0.10 + + + + + + + + + + + + + 0.15 + + + + + + + + + + + + + 0.20 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.30 + + + + + + + + + + + + + 0.35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.258 + + + 0.200 + + + 0.090 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.254 + + + 0.200 + + + 0.097 + + + 0.294 + + + 0.228 + + + 0.111 + + + 0.294 + + + 0.228 + + + 0.111 + + + Species · Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 78.9 + + + 77.3 + + + 71.7 + + + 80.5 + + + 79.3 + + + 71.3 + + + 80.5 + + + 79.3 + + + 71.3 + + + 83.0 + + + 82.9 + + + 75.1 + + + 83.0 + + + 83.0 + + + 75.1 + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.317 + + + 0.255 + + + 0.122 + + + 0.320 + + + 0.255 + + + 0.127 + + + 0.321 + + + 0.256 + + + 0.127 + + + 0.353 + + + 0.282 + + + 0.146 + + + 0.354 + + + 0.283 + + + 0.146 + + + Genus · Macro-F1 + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 84.4 + + + 83.5 + + + 80.7 + + + 81.1 + + + 80.6 + + + 78.4 + + + 81.1 + + + 80.6 + + + 78.4 + + + 85.7 + + + 85.6 + + + 81.5 + + + 85.7 + + + 85.6 + + + 81.5 + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + Northern Europe + + + + + + + + + + Europe + + + + + + + + + + Global + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.1 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.3 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.269 + + + 0.251 + + + 0.205 + + + 0.280 + + + 0.256 + + + 0.194 + + + 0.281 + + + 0.256 + + + 0.194 + + + 0.297 + + + 0.275 + + + 0.218 + + + 0.297 + + + 0.275 + + + 0.218 + + + Family · Macro-F1 + + + + MAMBO release comparison · species, genus and family + + + All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0. + Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision. + TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 3f2b043..2bbbff4 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -21,13 +21,15 @@ complete tables. All predictive metrics come from `mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`, using `threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`. -The primary chart includes **all truth**, including out-of-vocabulary species. -Macro accuracy gives equal weight to ground-truth species; macro-F1/precision +The primary charts include **all truth** at each rank, including out-of-vocabulary +taxa. Macro accuracy gives equal weight to ground-truth taxa at that rank; macro-F1/precision also reflect predicted-only classes under the package's metric policy. See the [metric definitions](mambo-release-comparison.md#prediction-quality). The TTA recipe was selected using a 1,024-image subset of this same dataset: the full results are descriptive comparisons, **not independent validation**. +### Species + ![Full-data species quality](assets/mambo-defaults-quality-all.svg) | Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | @@ -51,7 +53,8 @@ results are descriptive comparisons, **not independent validation**. Padded-scale TTA raises northern-Europe macro accuracy by **2.70 / 2.74 percentage points** for PyTorch / ONNX, with macro-F1 rising to **0.2935 / 0.2944**. Species macro accuracy, macro-F1 and micro accuracy exceed V2 for all three primary lists. -The full export retains other ranks; this is not a claim that V3 wins every metric. +Genus and family results follow below; ordinary V3 loses family macro accuracy +against V2, while TTA recovers it. Updated European presets (the same inference, different candidate lists): @@ -64,10 +67,95 @@ Updated European presets (the same inference, different candidate lists): ![Species quality restricted to known truth](assets/mambo-defaults-quality-known.svg) +### Genus + +![Full-data genus quality](assets/mambo-defaults-quality-genus-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 78.90% | 0.3169 | 79.23% | +| Northern Europe | V3 PyTorch | 80.53% | 0.3204 | 79.37% | +| Northern Europe | V3 ONNX | 80.50% | 0.3212 | 79.36% | +| Northern Europe | V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | +| Northern Europe | V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | +| Europe | MAMBO v2 | 77.29% | 0.2553 | 77.64% | +| Europe | V3 PyTorch | 79.28% | 0.2552 | 77.94% | +| Europe | V3 ONNX | 79.28% | 0.2557 | 77.94% | +| Europe | V3 PyTorch + TTA | 82.93% | 0.2820 | 80.40% | +| Europe | V3 ONNX + TTA | 82.97% | 0.2828 | 80.40% | +| Global | MAMBO v2 | 71.68% | 0.1221 | 72.85% | +| Global | V3 PyTorch | 71.30% | 0.1268 | 70.57% | +| Global | V3 ONNX | 71.33% | 0.1269 | 70.58% | +| Global | V3 PyTorch + TTA | 75.10% | 0.1457 | 74.52% | +| Global | V3 ONNX + TTA | 75.10% | 0.1461 | 74.52% | +| `north_europe_v3` | V3 PyTorch | 80.01% | 0.3041 | 78.88% | +| `north_europe_v3` | V3 ONNX | 79.98% | 0.3049 | 78.89% | +| `north_europe_v3` | V3 PyTorch + TTA | 82.78% | 0.3337 | 81.16% | +| `north_europe_v3` | V3 ONNX + TTA | 82.78% | 0.3341 | 81.16% | +| `europe_v3` | V3 PyTorch | 79.08% | 0.2528 | 77.79% | +| `europe_v3` | V3 ONNX | 79.08% | 0.2530 | 77.80% | +| `europe_v3` | V3 PyTorch + TTA | 82.68% | 0.2803 | 80.29% | +| `europe_v3` | V3 ONNX + TTA | 82.72% | 0.2809 | 80.29% | + +Northern-Europe genus macro accuracy rises from **78.90% (V2)** to +**80.53% / 80.50% (ordinary V3)** and **83.04% / 83.04% (TTA)** for PyTorch / ONNX. +Known-genus results contain 58,639 or 58,640 images depending on the preset. + +
+Known-truth genus metrics + +![Known-truth genus quality](assets/mambo-defaults-quality-genus-known.svg) + +
+ +### Family + +![Full-data family quality](assets/mambo-defaults-quality-family-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 84.40% | 0.2691 | 94.49% | +| Northern Europe | V3 PyTorch | 81.05% | 0.2804 | 92.97% | +| Northern Europe | V3 ONNX | 81.06% | 0.2808 | 92.99% | +| Northern Europe | V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | +| Northern Europe | V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | +| Europe | MAMBO v2 | 83.54% | 0.2513 | 94.23% | +| Europe | V3 PyTorch | 80.62% | 0.2556 | 92.85% | +| Europe | V3 ONNX | 80.63% | 0.2556 | 92.86% | +| Europe | V3 PyTorch + TTA | 85.63% | 0.2753 | 94.72% | +| Europe | V3 ONNX + TTA | 85.64% | 0.2755 | 94.73% | +| Global | MAMBO v2 | 80.70% | 0.2052 | 92.65% | +| Global | V3 PyTorch | 78.42% | 0.1936 | 90.30% | +| Global | V3 ONNX | 78.42% | 0.1938 | 90.31% | +| Global | V3 PyTorch + TTA | 81.46% | 0.2183 | 92.75% | +| Global | V3 ONNX + TTA | 81.45% | 0.2183 | 92.75% | +| `north_europe_v3` | V3 PyTorch | 80.66% | 0.2732 | 92.89% | +| `north_europe_v3` | V3 ONNX | 80.67% | 0.2733 | 92.89% | +| `north_europe_v3` | V3 PyTorch + TTA | 83.47% | 0.2778 | 94.69% | +| `north_europe_v3` | V3 ONNX + TTA | 83.47% | 0.2778 | 94.70% | +| `europe_v3` | V3 PyTorch | 80.48% | 0.2539 | 92.53% | +| `europe_v3` | V3 ONNX | 80.52% | 0.2541 | 92.55% | +| `europe_v3` | V3 PyTorch + TTA | 83.35% | 0.2729 | 94.50% | +| `europe_v3` | V3 ONNX + TTA | 83.37% | 0.2730 | 94.52% | + +Family macro accuracy exposes a regression that species-only reporting missed: +northern Europe falls from **84.40% (V2)** to **81.05% / 81.06% (ordinary V3)**. +TTA recovers it to **85.72% / 85.73%**, while macro-F1 reaches **0.2967** for both +backends, versus **0.2691** for V2. All 58,640 images have known family truth. + +
+Known-truth family metrics + +![Known-truth family quality](assets/mambo-defaults-quality-family-known.svg) + +
+ The [complete metric table](assets/mambo-defaults-metrics.csv) retains macro accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, at all three ranks and for both all/known truth. Known-only species results contain -50,598 images; membership is checked separately at genus and family level. +50,598 images. Known genus contains 58,639–58,640 images by preset; known family +contains all 58,640. These are already-computed `mini_metrics` results; the added +rank views do not change the model runs, score extraction or threshold policy. ## Inference speed and memory From 42159a9f53de2d054d48362c2204453e93ef9b04 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 11:16:58 +0200 Subject: [PATCH 038/221] docs: focus release comparisons on northern Europe --- deployment/README.md | 10 +- dev/releases/mambo_v3/build_presets.py | 3 +- dev/releases/mambo_v3/defaults_report.py | 81 +- docs/assets/mambo-defaults-ranks-all.svg | 2188 ++++++----------- .../assets/mambo-defaults-regional-effect.svg | 1522 ++++++++++++ docs/mambo-deployment-defaults.md | 197 +- docs/mambo-regional-comparison.md | 135 + docs/model-presets.md | 2 +- 8 files changed, 2578 insertions(+), 1560 deletions(-) create mode 100644 docs/assets/mambo-defaults-regional-effect.svg create mode 100644 docs/mambo-regional-comparison.md diff --git a/deployment/README.md b/deployment/README.md index d2bfecf..7784367 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -122,8 +122,8 @@ and custom image transforms through the same outer interface. Results below use all **58,640 Flemming images / 522 truth species**, including species outside the selected vocabulary. All predictive metrics use pinned `mini_metrics`, threshold zero and no threshold optimization. The main table uses -the northern-Europe legacy list, shared by V2 and V3; charts also show Europe and -global. TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; +the recommended northern-Europe legacy list (`north_europe`), shared by V2 and V3. +TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; CPU timings use FP32. | Pipeline | Species macro accuracy | Species macro-F1 | CPU B1 | GPU B1 | GPU B8 | GPU B32 | @@ -155,6 +155,12 @@ versus V2 (84.40% → about 81.05%). TTA raises these to about **83.04% genus / ![Species, genus and family macro metrics](../docs/assets/mambo-defaults-ranks-all.svg) +Regional filtering improves results on Flemming. The [single regional-effect figure](../docs/mambo-deployment-defaults.md#regional-filtering-effect) +summarizes global → Europe → northern Europe across pipelines and ranks. +We recommend legacy `north_europe` here: the updated list adds 222 species but +no Flemming species coverage, and lowers measured accuracy/F1. It remains available +as `north_europe_v3` for broader eligibility; the API default stays `europe`. + ![CPU and GPU throughput](../docs/assets/mambo-defaults-speed.svg) The [full comparison](../docs/mambo-deployment-defaults.md) includes memory charts, diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index f1f38fd..5c736e0 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -160,7 +160,8 @@ def build(metadata, evidence_root, write=False): "Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. " "Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; " "that equivalence does not establish equivalence at the lower threshold, so they are not silently added. " - "The deployment API discovers all lists from the bundle; preset-specific quality evaluation remains pending.", + "The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; " + "updated membership remains an explicit broader option.", "", "## Presets", "", diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py index b5c15e9..4e5621d 100644 --- a/dev/releases/mambo_v3/defaults_report.py +++ b/dev/releases/mambo_v3/defaults_report.py @@ -133,24 +133,25 @@ def save(fig, name): suffix = "" if rank == "species" else f"-{rank}" save(fig, f"mambo-defaults-quality{suffix}-{scope}") - fig, axes = plt.subplots(3, 2, figsize=(13, 11)) + scores = {(r["model"], r["preset"]): r["scores"]["all"] for r in data["quality"]} + rank_metrics = (("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1)) + labels = ["V2", "V3\nPyTorch", "V3\nONNX", "V3 PyTorch\n+ TTA", "V3 ONNX\n+ TTA"] + fig, axes = plt.subplots(3, 2, figsize=(11, 10)) for level, rank in enumerate(("species", "genus", "family")): - for col, (metric, title, factor) in enumerate((("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1))): + for col, (metric, title, factor) in enumerate(rank_metrics): ax = axes[level, col] - for i, (model, label, color) in enumerate(SERIES): - values = [ - next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"]["all"][metric][str(level)] - * factor - for preset in REGIONS - ] - bars = ax.bar(np.arange(3) + (i - 2) * 0.16, values, 0.16, label=label, color=color) - ax.bar_label(bars, fmt="%.1f" if factor == 100 else "%.3f", rotation=60, fontsize=8, padding=3) - upper = 105 if factor == 100 else min(1, max(bar.get_height() for bar in ax.patches) * 1.35) - ax.set(title=f"{rank.title()} · {title}", xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) + values = [scores[model, "north_europe"][metric][str(level)] * factor for model, _, _ in SERIES] + bars = ax.bar(range(5), values, color=[color for _, _, color in SERIES]) + ax.bar_label(bars, fmt="%.2f" if factor == 100 else "%.4f", padding=3, fontsize=9) + ax.set( + title=f"{rank.title()} · {title}", + xticks=range(5), + xticklabels=labels, + ylim=(0, 100 if factor == 100 else max(values) * 1.2), + ) ax.grid(axis="y", alpha=0.15) ax.set_axisbelow(True) - fig.suptitle("MAMBO release comparison · species, genus and family", fontsize=16) - fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.965), ncol=3, frameon=False) + fig.suptitle("V2 vs V3 vs V3 + TTA · legacy northern Europe", fontsize=16) fig.text( 0.02, 0.015, @@ -159,9 +160,59 @@ def save(fig, name): "TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated.", fontsize=9, ) - fig.tight_layout(rect=(0, 0.08, 1, 0.925)) + fig.tight_layout(rect=(0, 0.09, 1, 0.96)) save(fig, "mambo-defaults-ranks-all") + fig, axes = plt.subplots(3, 2, figsize=(11, 9)) + steps = (("full", "europe"), ("europe", "north_europe")) + for level, rank in enumerate(("species", "genus", "family")): + for col, (metric, _, factor) in enumerate(rank_metrics): + ax = axes[level, col] + for step, (source, target) in enumerate(steps): + changes = np.array( + [ + (scores[model, target][metric][str(level)] - scores[model, source][metric][str(level)]) * factor + for model, _, _ in SERIES + ] + ) + median = float(np.median(changes)) + ax.hlines(step, changes.min(), changes.max(), color="0.55", linewidth=3) + for i, (_, label, color) in enumerate(SERIES): + ax.scatter(changes[i], step + (i - 2) * 0.055, color=color, s=35, label=label if step == 0 else None) + ax.scatter(median, step, marker="|", s=200, color="black", zorder=5) + ax.annotate( + f"median {median:+.2f}" if factor == 100 else f"median {median:+.4f}", + (median, step), + xytext=(0, 22), + textcoords="offset points", + ha="center", + fontsize=9, + ) + ax.axvline(0, color="0.7", linewidth=1, linestyle=":") + ax.set( + title=rank.title(), + yticks=(0, 1), + yticklabels=("Global → Europe", "Europe → N. Europe"), + ylim=(1.35, -0.5), + xlabel="Macro accuracy change (percentage points)" if factor == 100 else "Macro-F1 change", + ) + ax.margins(x=0.2) + ax.grid(axis="x", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle("Effect of regional filtering · paired changes within each pipeline", fontsize=15) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.96), ncol=3, frameon=False) + fig.text( + 0.02, + 0.015, + "Black mark: median of five pipeline changes; grey line: min–max; coloured dots: individual pipelines.\n" + "Descriptive spread, not confidence intervals or independent replicates. " + "Legacy lists; same 58,640 images, all truth, threshold 0.\n" + "Differences summarize retained mini_metrics outputs; ranks and metric scales are never pooled.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.89)) + save(fig, "mambo-defaults-regional-effect") + fig, axes = plt.subplots(1, 2, figsize=(12, 5.5)) for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): for model, label, color in SERIES: diff --git a/docs/assets/mambo-defaults-ranks-all.svg b/docs/assets/mambo-defaults-ranks-all.svg index 9ba2a84..a86dbe9 100644 --- a/docs/assets/mambo-defaults-ranks-all.svg +++ b/docs/assets/mambo-defaults-ranks-all.svg @@ -1,7 +1,7 @@ - + @@ -20,19 +20,19 @@
- - @@ -45,1954 +45,1306 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/>
- +
- Northern Europe + V2
- + - Europe + V3 + PyTorch - + - Global + V3 + ONNX + + + + + + + + + + V3 PyTorch + + TTA + + + + + + + + + + V3 ONNX + + TTA
- - + + - + - + - - 0 + + 0 - - + + - + - + - - 20 + + 20 - - + + - + - + - - 40 + + 40 - - + + - + - + - - 60 + + 60 - - + + - + - + - - 80 + + 80 - - + + - + - + - - 100 + + 100 - +" clip-path="url(#pd4fe268f11)" style="fill: #8064a2"/> - +" clip-path="url(#pd4fe268f11)" style="fill: #098e92"/> - +" clip-path="url(#pd4fe268f11)" style="fill: #e8872e"/> - +" clip-path="url(#pd4fe268f11)" style="fill: #125351"/> - +" clip-path="url(#pd4fe268f11)" style="fill: #98440b"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - 68.5 - - - 66.0 - - 57.2 + 68.52 - 71.2 + 71.25 - 69.0 + 71.24 - 58.0 + 73.95 - 71.2 + 73.98 - 69.1 - - - 58.0 - - - 73.9 - - - 71.8 - - - 61.7 - - - 74.0 - - - 71.8 - - - 61.7 - - - Species · Macro accuracy (%) + Species · Macro accuracy (%) - - + - - + + - + - - Northern Europe + + V2 - - + + - + - - Europe + + V3 + PyTorch - - + + - + - - Global + + V3 + ONNX - - - - - - - + + - + - - 0.00 + + V3 PyTorch + + TTA - - - - + - + - - 0.05 + + V3 ONNX + + TTA - + + + - + - + - - 0.10 + + 0.0 - + - + - + - - 0.15 + + 0.1 - + - + - + - - 0.20 + + 0.2 - + - + - + - - 0.25 - - - - - - - - - - - - - 0.30 - - - - - - - - - - - - - 0.35 + + 0.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +" clip-path="url(#p5768b5af3d)" style="fill: #8064a2"/> - - + +" clip-path="url(#p5768b5af3d)" style="fill: #098e92"/> - - + +" clip-path="url(#p5768b5af3d)" style="fill: #e8872e"/> - - + +" clip-path="url(#p5768b5af3d)" style="fill: #125351"/> - - + +" clip-path="url(#p5768b5af3d)" style="fill: #98440b"/> - - + - - + - - 0.258 + + 0.2575 - - 0.200 + + 0.2543 - - 0.090 + + 0.2543 - - 0.254 + + 0.2935 - - 0.200 + + 0.2944 - - 0.097 - - - 0.254 - - - 0.200 - - - 0.097 - - - 0.294 - - - 0.228 - - - 0.111 - - - 0.294 - - - 0.228 - - - 0.111 - - - Species · Macro-F1 + + Species · Macro-F1 - - + - - + + - + - - Northern Europe + + V2 - - + + - + - - Europe + + V3 + PyTorch - - + + - + - - Global + + V3 + ONNX + + + + + + + + + + V3 PyTorch + + TTA + + + + + + + + + + V3 ONNX + + TTA - + + + + + + + + + + + 0 + + + - + - + - - 0 + + 20 - + - + - + - - 20 + + 40 - + - + - + - - 40 + + 60 - + - + - + - - 60 + + 80 - + - + - + - - 80 + + 100 - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +" clip-path="url(#p8395ded2a7)" style="fill: #8064a2"/> - - + +" clip-path="url(#p8395ded2a7)" style="fill: #098e92"/> - - + +" clip-path="url(#p8395ded2a7)" style="fill: #e8872e"/> - - + +" clip-path="url(#p8395ded2a7)" style="fill: #125351"/> - - + - - - +" clip-path="url(#p8395ded2a7)" style="fill: #98440b"/> - - + - - 78.9 - - - 77.3 - - - 71.7 - - - 80.5 - - - 79.3 - - - 71.3 - - - 80.5 - - - 79.3 - - - 71.3 - - - 83.0 + + - - 82.9 + + 78.90 - - 75.1 + + 80.53 - - 83.0 + + 80.50 - - 83.0 + + 83.04 - - 75.1 + + 83.04 - - Genus · Macro accuracy (%) + + Genus · Macro accuracy (%) - - + - + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + - + - - Northern Europe + + V3 + ONNX - + - + - - Europe + + V3 PyTorch + + TTA - + - + - - Global + + V3 ONNX + + TTA - + - + - + - - 0.0 + + 0.0 - + - + - + - - 0.1 + + 0.1 - + - + - + - - 0.2 + + 0.2 - + - + - + - - 0.3 + + 0.3 - + - + - + - - 0.4 + + 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +" clip-path="url(#p7681ea9188)" style="fill: #8064a2"/> - - + +" clip-path="url(#p7681ea9188)" style="fill: #098e92"/> - - + +" clip-path="url(#p7681ea9188)" style="fill: #e8872e"/> - - + +" clip-path="url(#p7681ea9188)" style="fill: #125351"/> - - + +" clip-path="url(#p7681ea9188)" style="fill: #98440b"/> - - + - - + - - 0.317 - - - 0.255 - - - 0.122 - - - 0.320 - - - 0.255 - - - 0.127 - - - 0.321 - - - 0.256 - - - 0.127 - - - 0.353 - - - 0.282 + + 0.3169 - - 0.146 + + 0.3204 - - 0.354 + + 0.3212 - - 0.283 + + 0.3532 - - 0.146 + + 0.3536 - - Genus · Macro-F1 + + Genus · Macro-F1 - - + - + - + - - Northern Europe + + V2 - + - + - - Europe + + V3 + PyTorch - + - + - - Global + + V3 + ONNX - - - + - + + + + + + V3 PyTorch + + TTA + + - + - - 0 + + V3 ONNX + + TTA - + + + - + - + - - 20 + + 0 - + - + - + - - 40 + + 20 - + - + - + - - 60 + + 40 - + - + - + - - 80 + + 60 - + - + - + - - 100 + + 80 + + + + + + + + + + + + + 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +" clip-path="url(#p8e67b5876e)" style="fill: #8064a2"/> - - + +" clip-path="url(#p8e67b5876e)" style="fill: #098e92"/> - - + +" clip-path="url(#p8e67b5876e)" style="fill: #e8872e"/> - - + +" clip-path="url(#p8e67b5876e)" style="fill: #125351"/> - - + +" clip-path="url(#p8e67b5876e)" style="fill: #98440b"/> - - + - - + - - 84.4 - - - 83.5 - - - 80.7 - - - 81.1 - - - 80.6 - - - 78.4 - - - 81.1 - - - 80.6 - - - 78.4 - - - 85.7 - - - 85.6 + + 84.40 - - 81.5 + + 81.05 - - 85.7 + + 81.06 - - 85.6 + + 85.72 - - 81.5 + + 85.73 - - Family · Macro accuracy (%) + + Family · Macro accuracy (%) - - + - - + + - + - - Northern Europe + + V2 - - + + - + - - Europe + + V3 + PyTorch - - + + - + - - Global + + V3 + ONNX - - - - - - - + + - + - - 0.0 + + V3 PyTorch + + TTA - - - - + - + - - 0.1 + + V3 ONNX + + TTA - + + + - + - + - - 0.2 + + 0.0 - + - + - + - - 0.3 + + 0.1 - + - + - + - - 0.4 + + 0.2 + + + + + + + + + + + + + 0.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +" clip-path="url(#p5fde332e01)" style="fill: #8064a2"/> - - + +" clip-path="url(#p5fde332e01)" style="fill: #098e92"/> - - + +" clip-path="url(#p5fde332e01)" style="fill: #e8872e"/> - - + +" clip-path="url(#p5fde332e01)" style="fill: #125351"/> - - + +" clip-path="url(#p5fde332e01)" style="fill: #98440b"/> - - + - - + - - 0.269 - - - 0.251 - - - 0.205 - - - 0.280 - - - 0.256 - - - 0.194 - - - 0.281 - - - 0.256 - - - 0.194 - - - 0.297 - - - 0.275 + + 0.2691 - - 0.218 + + 0.2804 - - 0.297 + + 0.2808 - - 0.275 + + 0.2967 - - 0.218 + + 0.2967 - - Family · Macro-F1 + + Family · Macro-F1 - - MAMBO release comparison · species, genus and family + + V2 vs V3 vs V3 + TTA · legacy northern Europe - - All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0. - Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision. - TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - + + All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0. + Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision. + TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated. - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/docs/assets/mambo-defaults-regional-effect.svg b/docs/assets/mambo-defaults-regional-effect.svg new file mode 100644 index 0000000..a7ad324 --- /dev/null +++ b/docs/assets/mambo-defaults-regional-effect.svg @@ -0,0 +1,1522 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + −2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 12 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +10.10 + + + median +2.17 + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.000 + + + + + + + + + + + + + 0.025 + + + + + + + + + + + + + 0.050 + + + + + + + + + + + + + 0.075 + + + + + + + + + + + + + 0.100 + + + + + + + + + + + + + 0.125 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.1101 + + + median +0.0576 + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +7.87 + + + median +1.22 + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + −0.025 + + + + + + + + + + + + + 0.000 + + + + + + + + + + + + + 0.025 + + + + + + + + + + + + + 0.050 + + + + + + + + + + + + + 0.075 + + + + + + + + + + + + + 0.100 + + + + + + + + + + + + + 0.125 + + + + + + + + + + + + + 0.150 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.1332 + + + median +0.0656 + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 3 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 5 + + + + Macro accuracy change (percentage points) + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +2.84 + + + median +0.43 + + + Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.02 + + + + + + + + + + + + + 0.04 + + + + + + + + + + + + + 0.06 + + + + Macro-F1 change + + + + + + + + + + + Global → Europe + + + + + + + + + + Europe → N. Europe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + median +0.0572 + + + median +0.0214 + + + Family + + + + + + + + + + + + + + Effect of regional filtering · paired changes within each pipeline + + + Black mark: median of five pipeline changes; grey line: min–max; coloured dots: individual pipelines. + Descriptive spread, not confidence intervals or independent replicates. Legacy lists; same 58,640 images, all truth, threshold 0. + Differences summarize retained mini_metrics outputs; ranks and metric scales are never pooled. + + + + + + + + + MAMBO v2 + + + + + + + + V3 PyTorch + + + + + + + + V3 ONNX + + + + + + + + V3 PyTorch + TTA + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 2bbbff4..f3adad4 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -15,9 +15,10 @@ retains all 13 recipes, exact parameters, sources and their trade-offs. ## Full Flemming comparison Both V3 backends were evaluated on all **58,640 images / 522 truth species**, with -and without TTA at automatic GPU precision. Main comparisons use identical legacy -northern-Europe, Europe and global vocabularies across V2/V3. Updated European lists are included in the -complete tables. All predictive metrics come from `mini_metrics` commit +and without TTA at automatic GPU precision. Main comparisons use the identical legacy +northern-Europe vocabulary across V2/V3. Regional effects are summarized once +below; the supplementary tables retain all regional and updated-list results. +All predictive metrics come from `mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`, using `threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`. @@ -28,134 +29,84 @@ also reflect predicted-only classes under the package's metric policy. See the recipe was selected using a 1,024-image subset of this same dataset: the full results are descriptive comparisons, **not independent validation**. +### Northern-Europe preset choice + +Use legacy `north_europe` for the northern-Europe workflow and V2/V3 comparisons. +It retains the 1,977-species V2 vocabulary. The explicit `north_europe_v3` option +adds 222 species without removals, using the same geographic filter and a minimum +of 3 regional records instead of 26 (plus the new global minimum of 25). +Both cover the same 50,598 species-labelled images in Flemming (86.29%). + +Holding PyTorch inference fixed, the updated list changes macro accuracy: + +| Rank | Legacy | Updated | Legacy + TTA | Updated + TTA | +|---|---:|---:|---:|---:| +| Species | 71.25% | 70.46% | 73.95% | 73.10% | +| Genus | 80.53% | 80.01% | 83.04% | 82.78% | +| Family | 81.05% | 80.66% | 85.72% | 83.47% | + +ONNX shows the same pattern; macro-F1 and micro accuracy also favour legacy at +all three ranks. The updated list permits additional plausible regional species, +but Flemming contains no examples of those additions. Their recognition benefit +is therefore unmeasured here. Legacy combines better measured discrimination with +backwards compatibility; updated membership remains an explicit broader option. +This is a northern-Europe recommendation, not a change to the API's legacy +`europe` default. See [geographic definitions](model-presets.md). + +![Northern-Europe comparison at all three ranks](assets/mambo-defaults-ranks-all.svg) + ### Species -![Full-data species quality](assets/mambo-defaults-quality-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 68.52% | 0.2575 | 68.71% | -| Northern Europe | V3 PyTorch | 71.25% | 0.2543 | 70.78% | -| Northern Europe | V3 ONNX | 71.24% | 0.2543 | 70.78% | -| Northern Europe | V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | -| Northern Europe | V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | -| Europe | MAMBO v2 | 66.04% | 0.2000 | 66.96% | -| Europe | V3 PyTorch | 69.05% | 0.1997 | 68.94% | -| Europe | V3 ONNX | 69.06% | 0.1997 | 68.95% | -| Europe | V3 PyTorch + TTA | 71.81% | 0.2276 | 71.57% | -| Europe | V3 ONNX + TTA | 71.85% | 0.2283 | 71.56% | -| Global | MAMBO v2 | 57.21% | 0.0899 | 59.36% | -| Global | V3 PyTorch | 58.01% | 0.0973 | 58.42% | -| Global | V3 ONNX | 58.03% | 0.0973 | 58.43% | -| Global | V3 PyTorch + TTA | 61.73% | 0.1110 | 62.63% | -| Global | V3 ONNX + TTA | 61.74% | 0.1112 | 62.61% | - -Padded-scale TTA raises northern-Europe macro accuracy by **2.70 / 2.74 percentage -points** for PyTorch / ONNX, with macro-F1 rising to **0.2935 / 0.2944**. Species -macro accuracy, macro-F1 and micro accuracy exceed V2 for all three primary lists. -Genus and family results follow below; ordinary V3 loses family macro accuracy -against V2, while TTA recovers it. - -Updated European presets (the same inference, different candidate lists): - -| Preset | Backend | Ordinary macro accuracy / F1 | TTA macro accuracy / F1 | -|---|---|---:|---:| -| `north_europe_v3` | torch | 70.46% / 0.2368 | 73.10% / 0.2713 | -| `north_europe_v3` | onnx | 70.49% / 0.2365 | 73.12% / 0.2721 | -| `europe_v3` | torch | 68.86% / 0.1979 | 71.66% / 0.2253 | -| `europe_v3` | onnx | 68.88% / 0.1978 | 71.70% / 0.2261 | - -![Species quality restricted to known truth](assets/mambo-defaults-quality-known.svg) +| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---:|---:|---:| +| MAMBO v2 | 68.52% | 0.2575 | 68.71% | +| V3 PyTorch | 71.25% | 0.2543 | 70.78% | +| V3 ONNX | 71.24% | 0.2543 | 70.78% | +| V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | +| V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | ### Genus -![Full-data genus quality](assets/mambo-defaults-quality-genus-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 78.90% | 0.3169 | 79.23% | -| Northern Europe | V3 PyTorch | 80.53% | 0.3204 | 79.37% | -| Northern Europe | V3 ONNX | 80.50% | 0.3212 | 79.36% | -| Northern Europe | V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | -| Northern Europe | V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | -| Europe | MAMBO v2 | 77.29% | 0.2553 | 77.64% | -| Europe | V3 PyTorch | 79.28% | 0.2552 | 77.94% | -| Europe | V3 ONNX | 79.28% | 0.2557 | 77.94% | -| Europe | V3 PyTorch + TTA | 82.93% | 0.2820 | 80.40% | -| Europe | V3 ONNX + TTA | 82.97% | 0.2828 | 80.40% | -| Global | MAMBO v2 | 71.68% | 0.1221 | 72.85% | -| Global | V3 PyTorch | 71.30% | 0.1268 | 70.57% | -| Global | V3 ONNX | 71.33% | 0.1269 | 70.58% | -| Global | V3 PyTorch + TTA | 75.10% | 0.1457 | 74.52% | -| Global | V3 ONNX + TTA | 75.10% | 0.1461 | 74.52% | -| `north_europe_v3` | V3 PyTorch | 80.01% | 0.3041 | 78.88% | -| `north_europe_v3` | V3 ONNX | 79.98% | 0.3049 | 78.89% | -| `north_europe_v3` | V3 PyTorch + TTA | 82.78% | 0.3337 | 81.16% | -| `north_europe_v3` | V3 ONNX + TTA | 82.78% | 0.3341 | 81.16% | -| `europe_v3` | V3 PyTorch | 79.08% | 0.2528 | 77.79% | -| `europe_v3` | V3 ONNX | 79.08% | 0.2530 | 77.80% | -| `europe_v3` | V3 PyTorch + TTA | 82.68% | 0.2803 | 80.29% | -| `europe_v3` | V3 ONNX + TTA | 82.72% | 0.2809 | 80.29% | - -Northern-Europe genus macro accuracy rises from **78.90% (V2)** to -**80.53% / 80.50% (ordinary V3)** and **83.04% / 83.04% (TTA)** for PyTorch / ONNX. -Known-genus results contain 58,639 or 58,640 images depending on the preset. - -
-Known-truth genus metrics - -![Known-truth genus quality](assets/mambo-defaults-quality-genus-known.svg) - -
+| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---:|---:|---:| +| MAMBO v2 | 78.90% | 0.3169 | 79.23% | +| V3 PyTorch | 80.53% | 0.3204 | 79.37% | +| V3 ONNX | 80.50% | 0.3212 | 79.36% | +| V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | +| V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | ### Family -![Full-data family quality](assets/mambo-defaults-quality-family-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 84.40% | 0.2691 | 94.49% | -| Northern Europe | V3 PyTorch | 81.05% | 0.2804 | 92.97% | -| Northern Europe | V3 ONNX | 81.06% | 0.2808 | 92.99% | -| Northern Europe | V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | -| Northern Europe | V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | -| Europe | MAMBO v2 | 83.54% | 0.2513 | 94.23% | -| Europe | V3 PyTorch | 80.62% | 0.2556 | 92.85% | -| Europe | V3 ONNX | 80.63% | 0.2556 | 92.86% | -| Europe | V3 PyTorch + TTA | 85.63% | 0.2753 | 94.72% | -| Europe | V3 ONNX + TTA | 85.64% | 0.2755 | 94.73% | -| Global | MAMBO v2 | 80.70% | 0.2052 | 92.65% | -| Global | V3 PyTorch | 78.42% | 0.1936 | 90.30% | -| Global | V3 ONNX | 78.42% | 0.1938 | 90.31% | -| Global | V3 PyTorch + TTA | 81.46% | 0.2183 | 92.75% | -| Global | V3 ONNX + TTA | 81.45% | 0.2183 | 92.75% | -| `north_europe_v3` | V3 PyTorch | 80.66% | 0.2732 | 92.89% | -| `north_europe_v3` | V3 ONNX | 80.67% | 0.2733 | 92.89% | -| `north_europe_v3` | V3 PyTorch + TTA | 83.47% | 0.2778 | 94.69% | -| `north_europe_v3` | V3 ONNX + TTA | 83.47% | 0.2778 | 94.70% | -| `europe_v3` | V3 PyTorch | 80.48% | 0.2539 | 92.53% | -| `europe_v3` | V3 ONNX | 80.52% | 0.2541 | 92.55% | -| `europe_v3` | V3 PyTorch + TTA | 83.35% | 0.2729 | 94.50% | -| `europe_v3` | V3 ONNX + TTA | 83.37% | 0.2730 | 94.52% | - -Family macro accuracy exposes a regression that species-only reporting missed: -northern Europe falls from **84.40% (V2)** to **81.05% / 81.06% (ordinary V3)**. -TTA recovers it to **85.72% / 85.73%**, while macro-F1 reaches **0.2967** for both -backends, versus **0.2691** for V2. All 58,640 images have known family truth. - -
-Known-truth family metrics - -![Known-truth family quality](assets/mambo-defaults-quality-family-known.svg) - -
- -The [complete metric table](assets/mambo-defaults-metrics.csv) retains macro -accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, at all -three ranks and for both all/known truth. Known-only species results contain -50,598 images. Known genus contains 58,639–58,640 images by preset; known family -contains all 58,640. These are already-computed `mini_metrics` results; the added -rank views do not change the model runs, score extraction or threshold policy. +| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---:|---:|---:| +| MAMBO v2 | 84.40% | 0.2691 | 94.49% | +| V3 PyTorch | 81.05% | 0.2804 | 92.97% | +| V3 ONNX | 81.06% | 0.2808 | 92.99% | +| V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | +| V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | + +Ordinary V3 improves species and genus macro accuracy, but family macro accuracy +falls from 84.40% to about 81.05%. TTA raises family macro accuracy to 85.72–85.73%, +and improves species and genus results as well. Species macro-F1 is slightly +lower than V2 without TTA and higher with TTA. + +### Regional filtering effect + +![Paired regional gains across pipelines](assets/mambo-defaults-regional-effect.svg) + +Each point is a difference between two presets **within the same pipeline**. +The black mark is the median of the five changes (V2, V3 PyTorch/ONNX, and each V3 +backend with TTA); grey lines show their min–max range. These related pipelines +are not independent replicates: the summary is descriptive, without confidence +intervals or significance claims. Each rank and metric is summarized separately. +All comparisons retain the same 58,640 images, including out-of-vocabulary truth. +The regional benefit is evidence for this northern-European dataset, not a reason +to apply its narrow vocabulary to images from elsewhere. + +The [supplementary regional comparison](mambo-regional-comparison.md) retains +all preset tables and all/known-truth charts. The [complete metric CSV](assets/mambo-defaults-metrics.csv) +also retains precision, recall, Theil U and coverage. For legacy northern Europe, +known truth contains 50,598 images at species, 58,639 at genus and 58,640 at family. ## Inference speed and memory diff --git a/docs/mambo-regional-comparison.md b/docs/mambo-regional-comparison.md new file mode 100644 index 0000000..8bdf920 --- /dev/null +++ b/docs/mambo-regional-comparison.md @@ -0,0 +1,135 @@ +# Supplementary regional comparisons + +Full regional tables and all/known-truth charts from the retained `mini_metrics` +evaluation. See the [main comparison](mambo-deployment-defaults.md) for the metric +policy, northern-Europe recommendation, regional summary and timing results. +These descriptive results use the same Flemming dataset used for TTA selection. + +### Species + +![Full-data species quality](assets/mambo-defaults-quality-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 68.52% | 0.2575 | 68.71% | +| Northern Europe | V3 PyTorch | 71.25% | 0.2543 | 70.78% | +| Northern Europe | V3 ONNX | 71.24% | 0.2543 | 70.78% | +| Northern Europe | V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | +| Northern Europe | V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | +| Europe | MAMBO v2 | 66.04% | 0.2000 | 66.96% | +| Europe | V3 PyTorch | 69.05% | 0.1997 | 68.94% | +| Europe | V3 ONNX | 69.06% | 0.1997 | 68.95% | +| Europe | V3 PyTorch + TTA | 71.81% | 0.2276 | 71.57% | +| Europe | V3 ONNX + TTA | 71.85% | 0.2283 | 71.56% | +| Global | MAMBO v2 | 57.21% | 0.0899 | 59.36% | +| Global | V3 PyTorch | 58.01% | 0.0973 | 58.42% | +| Global | V3 ONNX | 58.03% | 0.0973 | 58.43% | +| Global | V3 PyTorch + TTA | 61.73% | 0.1110 | 62.63% | +| Global | V3 ONNX + TTA | 61.74% | 0.1112 | 62.61% | + +Padded-scale TTA raises northern-Europe macro accuracy by **2.70 / 2.74 percentage +points** for PyTorch / ONNX, with macro-F1 rising to **0.2935 / 0.2944**. Species +macro accuracy, macro-F1 and micro accuracy exceed V2 for all three primary lists. +Genus and family results follow below; ordinary V3 loses family macro accuracy +against V2, while TTA recovers it. + +Updated European presets (the same inference, different candidate lists): + +| Preset | Backend | Ordinary macro accuracy / F1 | TTA macro accuracy / F1 | +|---|---|---:|---:| +| `north_europe_v3` | torch | 70.46% / 0.2368 | 73.10% / 0.2713 | +| `north_europe_v3` | onnx | 70.49% / 0.2365 | 73.12% / 0.2721 | +| `europe_v3` | torch | 68.86% / 0.1979 | 71.66% / 0.2253 | +| `europe_v3` | onnx | 68.88% / 0.1978 | 71.70% / 0.2261 | + +![Species quality restricted to known truth](assets/mambo-defaults-quality-known.svg) + +### Genus + +![Full-data genus quality](assets/mambo-defaults-quality-genus-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 78.90% | 0.3169 | 79.23% | +| Northern Europe | V3 PyTorch | 80.53% | 0.3204 | 79.37% | +| Northern Europe | V3 ONNX | 80.50% | 0.3212 | 79.36% | +| Northern Europe | V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | +| Northern Europe | V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | +| Europe | MAMBO v2 | 77.29% | 0.2553 | 77.64% | +| Europe | V3 PyTorch | 79.28% | 0.2552 | 77.94% | +| Europe | V3 ONNX | 79.28% | 0.2557 | 77.94% | +| Europe | V3 PyTorch + TTA | 82.93% | 0.2820 | 80.40% | +| Europe | V3 ONNX + TTA | 82.97% | 0.2828 | 80.40% | +| Global | MAMBO v2 | 71.68% | 0.1221 | 72.85% | +| Global | V3 PyTorch | 71.30% | 0.1268 | 70.57% | +| Global | V3 ONNX | 71.33% | 0.1269 | 70.58% | +| Global | V3 PyTorch + TTA | 75.10% | 0.1457 | 74.52% | +| Global | V3 ONNX + TTA | 75.10% | 0.1461 | 74.52% | +| `north_europe_v3` | V3 PyTorch | 80.01% | 0.3041 | 78.88% | +| `north_europe_v3` | V3 ONNX | 79.98% | 0.3049 | 78.89% | +| `north_europe_v3` | V3 PyTorch + TTA | 82.78% | 0.3337 | 81.16% | +| `north_europe_v3` | V3 ONNX + TTA | 82.78% | 0.3341 | 81.16% | +| `europe_v3` | V3 PyTorch | 79.08% | 0.2528 | 77.79% | +| `europe_v3` | V3 ONNX | 79.08% | 0.2530 | 77.80% | +| `europe_v3` | V3 PyTorch + TTA | 82.68% | 0.2803 | 80.29% | +| `europe_v3` | V3 ONNX + TTA | 82.72% | 0.2809 | 80.29% | + +Northern-Europe genus macro accuracy rises from **78.90% (V2)** to +**80.53% / 80.50% (ordinary V3)** and **83.04% / 83.04% (TTA)** for PyTorch / ONNX. +Known-genus results contain 58,639 or 58,640 images depending on the preset. + +
+Known-truth genus metrics + +![Known-truth genus quality](assets/mambo-defaults-quality-genus-known.svg) + +
+ +### Family + +![Full-data family quality](assets/mambo-defaults-quality-family-all.svg) + +| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | +|---|---|---:|---:|---:| +| Northern Europe | MAMBO v2 | 84.40% | 0.2691 | 94.49% | +| Northern Europe | V3 PyTorch | 81.05% | 0.2804 | 92.97% | +| Northern Europe | V3 ONNX | 81.06% | 0.2808 | 92.99% | +| Northern Europe | V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | +| Northern Europe | V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | +| Europe | MAMBO v2 | 83.54% | 0.2513 | 94.23% | +| Europe | V3 PyTorch | 80.62% | 0.2556 | 92.85% | +| Europe | V3 ONNX | 80.63% | 0.2556 | 92.86% | +| Europe | V3 PyTorch + TTA | 85.63% | 0.2753 | 94.72% | +| Europe | V3 ONNX + TTA | 85.64% | 0.2755 | 94.73% | +| Global | MAMBO v2 | 80.70% | 0.2052 | 92.65% | +| Global | V3 PyTorch | 78.42% | 0.1936 | 90.30% | +| Global | V3 ONNX | 78.42% | 0.1938 | 90.31% | +| Global | V3 PyTorch + TTA | 81.46% | 0.2183 | 92.75% | +| Global | V3 ONNX + TTA | 81.45% | 0.2183 | 92.75% | +| `north_europe_v3` | V3 PyTorch | 80.66% | 0.2732 | 92.89% | +| `north_europe_v3` | V3 ONNX | 80.67% | 0.2733 | 92.89% | +| `north_europe_v3` | V3 PyTorch + TTA | 83.47% | 0.2778 | 94.69% | +| `north_europe_v3` | V3 ONNX + TTA | 83.47% | 0.2778 | 94.70% | +| `europe_v3` | V3 PyTorch | 80.48% | 0.2539 | 92.53% | +| `europe_v3` | V3 ONNX | 80.52% | 0.2541 | 92.55% | +| `europe_v3` | V3 PyTorch + TTA | 83.35% | 0.2729 | 94.50% | +| `europe_v3` | V3 ONNX + TTA | 83.37% | 0.2730 | 94.52% | + +Family macro accuracy exposes a regression that species-only reporting missed: +northern Europe falls from **84.40% (V2)** to **81.05% / 81.06% (ordinary V3)**. +TTA recovers it to **85.72% / 85.73%**, while macro-F1 reaches **0.2967** for both +backends, versus **0.2691** for V2. All 58,640 images have known family truth. + +
+Known-truth family metrics + +![Known-truth family quality](assets/mambo-defaults-quality-family-known.svg) + +
+ +The [complete metric table](assets/mambo-defaults-metrics.csv) retains macro +accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, at all +three ranks and for both all/known truth. Known-only species results contain +50,598 images. Known genus contains 58,639–58,640 images by preset; known family +contains all 58,640. These are already-computed `mini_metrics` results; the added +rank views do not change the model runs, score extraction or threshold policy. diff --git a/docs/model-presets.md b/docs/model-presets.md index c2fadc9..00d3708 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -10,7 +10,7 @@ Each geographic preset applies the minimum row count shown below. Counts use all In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the proposed global minimum of 25. Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty. -`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; preset-specific quality evaluation remains pending. +`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; updated membership remains an explicit broader option. ## Presets From 691b98f6ff27b051c7345bef2daeb142c5c8670b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 11:38:38 +0200 Subject: [PATCH 039/221] feat: qualify release confidence thresholds with mini_metrics --- deployment/README.md | 6 + dev/releases/mambo_v3/threshold_report.py | 296 + docs/assets/mambo-threshold-comparison.json | 15613 ++++++++++++++++++ docs/assets/mambo-threshold-comparison.svg | 1779 ++ docs/assets/mambo-threshold-curves.svg | 3985 +++++ docs/assets/mambo-threshold-metrics.csv | 91 + docs/mambo-confidence-thresholds.md | 153 + docs/mambo-deployment-defaults.md | 26 + 8 files changed, 21949 insertions(+) create mode 100644 dev/releases/mambo_v3/threshold_report.py create mode 100644 docs/assets/mambo-threshold-comparison.json create mode 100644 docs/assets/mambo-threshold-comparison.svg create mode 100644 docs/assets/mambo-threshold-curves.svg create mode 100644 docs/assets/mambo-threshold-metrics.csv create mode 100644 docs/mambo-confidence-thresholds.md diff --git a/deployment/README.md b/deployment/README.md index 7784367..b41b531 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -170,6 +170,12 @@ training and Flemming support. The [loading study](../docs/mambo-loading-scaling explains remaining scheduling limits; `preprocess_workers` / `--preprocess-workers` tunes preparation separately from ONNX runtime `threads` and defaults to it. +Confidence rejection is a separate trade-off. The [threshold study](../docs/mambo-confidence-thresholds.md) +compares all five pipelines with Macro-F1-optimized thresholds, coverage and P–R +curves at every rank. V3 + TTA leads calibrated species/genus Macro-F1, while V2 +leads family Macro-F1; selected operating points accept roughly 70–79% of images. +Threshold-zero defaults remain unchanged. + Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. The recipe was selected on a Flemming subset, so full-set results are descriptive, not independent validation. In-domain UCloud evaluation, other operating systems, diff --git a/dev/releases/mambo_v3/threshold_report.py b/dev/releases/mambo_v3/threshold_report.py new file mode 100644 index 0000000..fac45ec --- /dev/null +++ b/dev/releases/mambo_v3/threshold_report.py @@ -0,0 +1,296 @@ +"""Calibrate and compare northern-Europe rejection thresholds using pinned mini_metrics.""" + +import argparse +import csv +import hashlib +import importlib.metadata +import json +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.acceleration_report import METRICS +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json + +SOURCES = { + "v2": "mambo-release-comparison-quality/v2-full", + "torch": "mambo-accelerated-quality/torch-cuda-0-prediction", + "onnx": "mambo-accelerated-quality/onnx-cuda-0-prediction", + "torch-tta": "mambo-default-tta-quality/torch-cuda-0-prediction", + "onnx-tta": "mambo-default-tta-quality/onnx-cuda-0-prediction", +} +RANKS = ("species", "genus", "family") + + +def identity(data): + """Hash ordered image/rank/truth identities, independently of predictions.""" + rows = zip(data.instance_id.tolist(), data.level.tolist(), data.label.tolist(), strict=True) + return hashlib.sha256(json.dumps(list(rows), separators=(",", ":")).encode()).hexdigest() + + +def collect(root, output): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError(f"Require mini_metrics revision {REVISION}") + output.mkdir(parents=True, exist_ok=True) + result = { + "revision": REVISION, + "preset": "north_europe", + "policy": "MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; per-rank thresholds; all truth", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); report/calibration; grouped by instance_id", + "curve": "51 uniform confidence values plus 21 calibration quantiles per rank, and selected thresholds; reporting data", + "models": {}, + } + baseline = json.loads(Path("docs/assets/mambo-defaults-comparison.json").read_text()) + reference = {r["model"]: r["scores"]["all"] for r in baseline["quality"] if r["preset"] == "north_europe"} + identities = None + pattern = "^(" + "|".join(METRICS) + ")$" + + def measure(data, thresholds, known=False, curve=False): + return finite_json( + evaluate_file( + data, + threshold=thresholds, + optimal=False, + known_only=known, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage)$" if curve else pattern, + verbose=0, + ) + ) + + for model, relative in SOURCES.items(): + source = root / relative / "north_europe/mini_metric.csv" + digest = file_hash(source) + prior = json.loads(source.with_name("metrics.json").read_text()) + if prior["source_sha256"] != digest or prior["mini_metrics_revision"] != REVISION: + raise ValueError(f"Prediction provenance mismatch: {source}") + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Require finite unthresholded predictions") + if np.any((data.confidence < 0) | (data.confidence > 1)): + raise ValueError("Confidence outside [0, 1]") + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + current = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if identities is not None and current != identities: + raise ValueError("Models do not share identical image/truth partitions") + identities = current + if set(reporting.instance_id) & set(calibration.instance_id): + raise ValueError("Calibration leakage across image IDs") + full = measure(data, 0) + for metric in METRICS: + for level in range(3): + if not np.isclose(full[metric][str(level)], reference[model][metric][str(level)], atol=1e-12, rtol=0): + raise ValueError(f"Threshold-zero baseline changed: {model}/{metric}/{level}") + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[level]) for level in range(3)] + row = { + "source": str(source), + "source_sha256": digest, + "identities": current, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + "full_zero": full, + "report_zero": measure(reporting, 0), + "report_optimized": measure(reporting, thresholds), + "known_zero": measure(reporting, 0, known=True), + "known_optimized": measure(reporting, thresholds, known=True), + "calibration_zero": measure(calibration, 0), + "calibration_optimized": measure(calibration, thresholds), + "curve": [], + } + # Public optimal=True must reproduce the explicit shared split and optimizer. + public = finite_json( + evaluate_file( + data, + optimal=True, + seed=42, + opt_crit=MacroF1, + eps=0.01, + use_quantiles=True, + simple=True, + hierarchical=False, + pattern=pattern, + verbose=0, + ) + ) + for metric in METRICS: + if public[metric] != row["report_optimized"][metric]: + raise ValueError(f"Public optimizer mismatch: {model}/{metric}") + grids = [ + np.unique( + np.r_[ + np.linspace(0, 1, 51), + np.quantile(calibration.confidence[calibration.level == level], np.linspace(0, 1, 21)), + thresholds[level], + ] + ) + for level in range(3) + ] + # One vector call handles independent operating points at all three ranks. + for i in range(max(map(len, grids))): + vector = [float(grid[min(i, len(grid) - 1)]) for grid in grids] + row["curve"].append({"thresholds": vector, "scores": measure(reporting, vector, curve=True)}) + result["models"][model] = row + write_json(output / f"{model}.json", row) + print(model, "thresholds", thresholds, "report/calibration", row["report_images"], row["calibration_images"], flush=True) + result["tta_threshold_sensitivity"] = tta_threshold_sensitivity(result) + write_json(output / "mambo-threshold-comparison.json", result) + return result + + +def tta_threshold_sensitivity(data): + """Separate backend differences from selection of near-optimal operating points.""" + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, evaluate_file + + result = {} + for model in ("torch-tta", "onnx-tta"): + row = data["models"][model] + if file_hash(row["source"]) != row["source_sha256"]: + raise ValueError("Changed sensitivity input") + reporting, calibration = MetricDF.from_source(row["source"]).split((0.9, 0.1), strata=("label",), seed=42) + calibration = calibration[calibration.level == 0] + reporting = reporting[reporting.level == 0] + curve = MacroF1().compute_threshold_curve(calibration) + result[model] = {"calibration_max_f1": float(np.max(curve.values)), "operating_points": []} + for selected_by in ("torch-tta", "onnx-tta"): + threshold = data["models"][selected_by]["thresholds"][0] + point = {"selected_by": selected_by, "threshold": threshold} + for name, partition in (("calibration", calibration), ("report", reporting)): + point[name] = finite_json( + evaluate_file( + partition, + threshold=threshold, + simple=True, + hierarchical=False, + pattern=r"^(precision|recall|f1|coverage)$", + verbose=0, + ) + ) + result[model]["operating_points"].append(point) + return result + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + output.mkdir(parents=True, exist_ok=True) + plt.rcParams.update( + {"svg.fonttype": "none", "svg.hashsalt": "mambo-threshold-v1", "axes.spines.top": False, "axes.spines.right": False} + ) + + def save(fig, name): + fig.tight_layout(rect=(0, 0.10, 1, 0.89)) + fig.text( + 0.02, + 0.015, + "Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa.\n" + "mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank.\n" + "Calibration/report split is image-level; TTA was previously selected using a subset of Flemming.", + fontsize=9, + ) + path = output / f"{name}.svg" + fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + fig.savefig(output / f"{name}.png", dpi=140, bbox_inches="tight") + plt.close(fig) + + fig, axes = plt.subplots(3, 2, figsize=(12, 10)) + for level, rank in enumerate(RANKS): + k = str(level) + for model, label, color in SERIES: + row = data["models"][model] + points = row["curve"] + axes[level, 0].plot( + [p["scores"]["recall"][k] for p in points], + [p["scores"]["precision"][k] for p in points], + color=color, + label=label, + linestyle="--" if model.startswith("onnx") else "-", + ) + axes[level, 1].plot( + [p["scores"]["coverage"][k] for p in points], + [p["scores"]["micro_accuracy"][k] for p in points], + color=color, + linestyle="--" if model.startswith("onnx") else "-", + ) + for name, marker in (("report_zero", "o"), ("report_optimized", "*")): + r = row[name] + axes[level, 0].scatter(r["recall"][k], r["precision"][k], color=color, marker=marker, s=65 if marker == "*" else 20) + axes[level, 1].scatter(r["coverage"][k], r["micro_accuracy"][k], color=color, marker=marker, s=65 if marker == "*" else 20) + axes[level, 0].set( + title=rank.title(), xlabel="Macro recall (all truth retained)", ylabel="Macro precision", xlim=(0, 1), ylim=(0, 1.03) + ) + axes[level, 1].set( + title=rank.title(), xlabel="Image coverage", ylabel="Micro accuracy among accepted", xlim=(0, 1.02), ylim=(0, 1.03) + ) + for ax in axes[level]: + ax.grid(alpha=0.15) + fig.suptitle("Confidence threshold trade-offs · circles: threshold 0 · stars: calibrated", fontsize=14) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.96), ncol=3, frameon=False) + save(fig, "mambo-threshold-curves") + + fig, axes = plt.subplots(3, 2, figsize=(12, 10)) + labels = ["V2", "V3\nPyTorch", "V3\nONNX", "PyTorch\n+ TTA", "ONNX\n+ TTA"] + for level, rank in enumerate(RANKS): + for col, metric in enumerate(("f1", "coverage")): + ax = axes[level, col] + for offset, scope, label, color in ( + (-0.18, "report_zero", "Threshold zero", "#b8c5d0"), + (0.18, "report_optimized", "Calibrated threshold", "#098e92"), + ): + values = [data["models"][model][scope][metric][str(level)] for model, _, _ in SERIES] + bars = ax.bar(np.arange(5) + offset, values, 0.36, label=label, color=color) + ax.bar_label(bars, fmt="%.3f", fontsize=8, padding=3) + ax.set( + title=f"{rank.title()} · {'Macro-F1' if metric == 'f1' else 'Image coverage'}", + xticks=range(5), + xticklabels=labels, + ylim=(0, 1.12 if metric == "coverage" else 1), + ) + ax.grid(axis="y", alpha=0.15) + ax.set_axisbelow(True) + fig.suptitle("Threshold optimization · same reporting partition before and after", fontsize=15) + fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=2, frameon=False) + save(fig, "mambo-threshold-comparison") + with (output / "mambo-threshold-metrics.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow(["model", "rank", "scope", "threshold", *METRICS]) + for model, row in data["models"].items(): + for scope in ("report_zero", "report_optimized", "known_zero", "known_optimized", "calibration_zero", "calibration_optimized"): + for level, rank in enumerate(RANKS): + writer.writerow( + [ + model, + rank, + scope, + row["thresholds"][level] if scope.endswith("optimized") else 0, + *[row[scope][m][str(level)] for m in METRICS], + ] + ) + write_json(output / "mambo-threshold-comparison.json", data) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + source = parser.add_mutually_exclusive_group(required=True) + source.add_argument("--evidence", type=Path) + source.add_argument("--data", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.evidence: + collect(args.evidence, args.output) + else: + render(json.loads(args.data.read_text()), args.output) diff --git a/docs/assets/mambo-threshold-comparison.json b/docs/assets/mambo-threshold-comparison.json new file mode 100644 index 0000000..a344868 --- /dev/null +++ b/docs/assets/mambo-threshold-comparison.json @@ -0,0 +1,15613 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "preset": "north_europe", + "policy": "MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; per-rank thresholds; all truth", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); report/calibration; grouped by instance_id", + "curve": "51 uniform confidence values plus 21 calibration quantiles per rank, and selected thresholds; reporting data", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "full_zero": { + "accuracy": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "precision": { + "0": 0.2742104381019442, + "1": 0.3188818859364664, + "2": 0.2600743589223739 + }, + "recall": { + "0": 0.6852063621352951, + "1": 0.7890053947525617, + "2": 0.8440271040813301 + }, + "f1": { + "0": 0.25753800338546956, + "1": 0.31692850744528095, + "2": 0.26910376925339174 + }, + "micro_accuracy": { + "0": 0.68712482946794, + "1": 0.7922919508867667, + "2": 0.9449351978171896 + }, + "theilU": { + "0": 0.9259639612074944, + "1": 0.9286450152404832, + "2": 0.865726913911594 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444527, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.44667552768137514, + "1": 0.5868633065886132, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7073027348676835, + "1": 0.7918398972587593, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28480672905864074, + "1": 0.32348654616668093, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.7073027348676835, + "1": 0.7918398972587593, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2693143628906898, + "1": 0.32179539408479596, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.7963467111618512, + "1": 0.7922405137628583, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9292730961939166, + "1": 0.9293424074794282, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8766863543952852, + "1": 0.9565841131242125, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6554069382956795, + "1": 0.7849689255774214, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5589457332057807, + "1": 0.6195871424934829, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.46704984507862823, + "1": 0.588501193813758, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.9549286136427261, + "1": 0.9258656246608054, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9292730961939166, + "1": 0.9293424074794282, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.7058268200579608, + "1": 0.6981264326444011, + "2": 0.7744373721300295 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7234356272559329, + "1": 0.8174898444279297, + "2": 0.8654342469799546 + }, + "precision": { + "0": 0.44773205659042525, + "1": 0.4838679824327559, + "2": 0.4026920030783285 + }, + "recall": { + "0": 0.7234356272559329, + "1": 0.8174898444279297, + "2": 0.8654342469799546 + }, + "f1": { + "0": 0.3992460838711431, + "1": 0.4620410630676452, + "2": 0.4117679180319759 + }, + "micro_accuracy": { + "0": 0.6871155160628845, + "1": 0.7928913192071086, + "2": 0.9401913875598086 + }, + "theilU": { + "0": 0.9495520172149795, + "1": 0.9531896899689808, + "2": 0.8647477723749251 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.888343995217596, + "1": 0.9732206219933451, + "2": 0.9998907975137955 + }, + "precision": { + "0": 0.807502621527049, + "1": 0.9203715569385426, + "2": 0.9981361769132305 + }, + "recall": { + "0": 0.5796937024197353, + "1": 0.6560626942847588, + "2": 0.7033521890103556 + }, + "f1": { + "0": 0.5456887340622165, + "1": 0.6840498465459532, + "2": 0.7994593831472765 + }, + "micro_accuracy": { + "0": 0.8309273305603132, + "1": 0.9286062378167641, + "2": 0.9995597622716267 + }, + "theilU": { + "0": 0.9495520172149795, + "1": 0.9531896899689808, + "2": 0.8647477723749251 + }, + "coverage": { + "0": 0.6983937115516062, + "1": 0.7012987012987013, + "2": 0.7763157894736842 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444527, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.6856251028729057, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28005676368065474, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2624237422228308, + "1": 0.3212885858575979, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6871518963361497, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0236353520303964, + 0.0323581583797931, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.6856554953032706, + "1": 0.7896992960879018, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28030051151724356, + "1": 0.32343700216381954, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26264634316477603, + "1": 0.3213056550228934, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.687216990962657, + "1": 0.7923605979650997, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9998673941047208, + "1": 0.9998295067060695, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.6862450346780916, + "1": 0.7898249229917869, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.28148926741772523, + "1": 0.32446462965904294, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856143669312551, + "1": 0.789365988482667, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26365503926272216, + "1": 0.3223073481736938, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.6878626967570642, + "1": 0.792577991736477, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.998901265439115, + "1": 0.9995074638175343, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.6894649602995151, + "1": 0.79159502768785, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2862577388741877, + "1": 0.3263148567978791, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6853793752768238, + "1": 0.7893038766814248, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.26718136558707756, + "1": 0.32386474580272234, + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "0": 0.689901833954798, + "1": 0.7940489527751932, + "2": 0.9454610896415853 + }, + "coverage": { + "0": 0.9957566113510646, + "1": 0.9976320375842994, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.692485514085883, + "1": 0.794239065221558, + "2": 0.843528389602472 + }, + "precision": { + "0": 0.29378055849853313, + "1": 0.33378858302599473, + "2": 0.26140675149806564 + }, + "recall": { + "0": 0.6851263062476582, + "1": 0.7892266548760095, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.27316182282493223, + "1": 0.33022314018658927, + "2": 0.26984083032549366 + }, + "micro_accuracy": { + "0": 0.6930047603571223, + "1": 0.7967258104476759, + "2": 0.9455327371930888 + }, + "coverage": { + "0": 0.9908880806243844, + "1": 0.9939948473137834, + "2": 0.9999242252026976 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1171935871243476 + ], + "scores": { + "accuracy": { + "0": 0.6959281587101183, + "1": 0.7976600952592978, + "2": 0.843749431285826 + }, + "precision": { + "0": 0.3046706681940116, + "1": 0.3458219283587655, + "2": 0.2655886420449551 + }, + "recall": { + "0": 0.6846986764190035, + "1": 0.788922096400204, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2818999573792663, + "1": 0.34101240009707434, + "2": 0.274144521327657 + }, + "micro_accuracy": { + "0": 0.6965821007482064, + "1": 0.7998774720961844, + "2": 0.9456760648779748 + }, + "coverage": { + "0": 0.9849018716374933, + "1": 0.9894862468742897, + "2": 0.9997726756080928 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7015813766250063, + "1": 0.8057800432810739, + "2": 0.8438187613860694 + }, + "precision": { + "0": 0.3139885481773248, + "1": 0.3523245741285125, + "2": 0.2655886420449551 + }, + "recall": { + "0": 0.6838489895700982, + "1": 0.7882107281325333, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2892051764900348, + "1": 0.34617303448414605, + "2": 0.274144521327657 + }, + "micro_accuracy": { + "0": 0.6998878012922196, + "1": 0.8032518760823552, + "2": 0.9457119035888885 + }, + "coverage": { + "0": 0.9792755929377889, + "1": 0.9845040539516556, + "2": 0.9997347882094415 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7053314100259017, + "1": 0.8098096173244427, + "2": 0.8461277280594726 + }, + "precision": { + "0": 0.32055398181288797, + "1": 0.3601468487082147, + "2": 0.2700300825566228 + }, + "recall": { + "0": 0.6826193801579724, + "1": 0.7870158946376119, + "2": 0.8434094607806111 + }, + "f1": { + "0": 0.29383272753274103, + "1": 0.35249177016000977, + "2": 0.2786493437686548 + }, + "micro_accuracy": { + "0": 0.7034845240412693, + "1": 0.8069645966337783, + "2": 0.9463554308252428 + }, + "coverage": { + "0": 0.9731378343562931, + "1": 0.9791998181404865, + "2": 0.9990149276350686 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7103311043133109, + "1": 0.8150607888193588, + "2": 0.8477136267846012 + }, + "precision": { + "0": 0.32841109200874, + "1": 0.36579334252570045, + "2": 0.27320842530636946 + }, + "recall": { + "0": 0.6818705668128108, + "1": 0.7854082647216847, + "2": 0.8433726606725157 + }, + "f1": { + "0": 0.29987313853875996, + "1": 0.35691650043182005, + "2": 0.28104534769621065 + }, + "micro_accuracy": { + "0": 0.7069076950194872, + "1": 0.810350863544422, + "2": 0.9470837208419535 + }, + "coverage": { + "0": 0.9672463438660301, + "1": 0.9740092445252709, + "2": 0.9980866863681139 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7133137126760448, + "1": 0.8182744585021388, + "2": 0.8489839201748891 + }, + "precision": { + "0": 0.3376879818611841, + "1": 0.37484274621314434, + "2": 0.275725690206896 + }, + "recall": { + "0": 0.6805931682435648, + "1": 0.7843946789124046, + "2": 0.8432952173584995 + }, + "f1": { + "0": 0.3071853108536345, + "1": 0.36474302785797924, + "2": 0.28237286932372846 + }, + "micro_accuracy": { + "0": 0.7106015497150969, + "1": 0.8138543377923805, + "2": 0.9481877102617224 + }, + "coverage": { + "0": 0.9608054860953247, + "1": 0.9686292339167992, + "2": 0.9966848526180192 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7201179313020685, + "1": 0.8219653670359793, + "2": 0.8513059873920608 + }, + "precision": { + "0": 0.3491571384717765, + "1": 0.38426061340415973, + "2": 0.2858575931117377 + }, + "recall": { + "0": 0.6799298506567768, + "1": 0.7835665938479829, + "2": 0.8430042993871405 + }, + "f1": { + "0": 0.31608755733081806, + "1": 0.3726312923407876, + "2": 0.2923904398909383 + }, + "micro_accuracy": { + "0": 0.7142630335986029, + "1": 0.8172038781490295, + "2": 0.9496496039000609 + }, + "coverage": { + "0": 0.9545540653178752, + "1": 0.9632681670076533, + "2": 0.9947715389861332 + } + } + }, + { + "thresholds": [ + 0.21000864356756208, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7228925151634673, + "1": 0.8281356676703304, + "2": 0.8530138232012336 + }, + "precision": { + "0": 0.3527922224637752, + "1": 0.3931601894136246, + "2": 0.2873166187778037 + }, + "recall": { + "0": 0.6795061239427823, + "1": 0.7825155734997562, + "2": 0.8417939049919092 + }, + "f1": { + "0": 0.3189505539928912, + "1": 0.37985883582118485, + "2": 0.2929145782298702 + }, + "micro_accuracy": { + "0": 0.7161061664974215, + "1": 0.8202047349907118, + "2": 0.9514192452325959 + }, + "coverage": { + "0": 0.9514094112298249, + "1": 0.958589073274229, + "2": 0.9924035765704327 + } + } + }, + { + "thresholds": [ + 0.22, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7260385262592369, + "1": 0.8315549902362985, + "2": 0.8548680377492878 + }, + "precision": { + "0": 0.3553603570282042, + "1": 0.40153625278408994, + "2": 0.28967378506945035 + }, + "recall": { + "0": 0.6790888780708505, + "1": 0.7779842867482618, + "2": 0.8415724187538085 + }, + "f1": { + "0": 0.3207253549039112, + "1": 0.38529662188321284, + "2": 0.29421721211302054 + }, + "micro_accuracy": { + "0": 0.7175892643182363, + "1": 0.8234463838415967, + "2": 0.9531390520655938 + }, + "coverage": { + "0": 0.9486246874289611, + "1": 0.9529059634765477, + "2": 0.9900166704554065 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24172188639640804, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7304832475377805, + "1": 0.8315952842899021, + "2": 0.8576228026630673 + }, + "precision": { + "0": 0.3641473852350683, + "1": 0.401670277233397, + "2": 0.2904030152137765 + }, + "recall": { + "0": 0.675906046358126, + "1": 0.7777840042889266, + "2": 0.8408966530289704 + }, + "f1": { + "0": 0.3266634592159669, + "1": 0.3853290714953957, + "2": 0.29457750282433676 + }, + "micro_accuracy": { + "0": 0.7214275655340294, + "1": 0.8236674622116149, + "2": 0.9548489849176804 + }, + "coverage": { + "0": 0.9416344623778131, + "1": 0.9524892020913844, + "2": 0.9872319466545427 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7363009920260201, + "1": 0.8372004986944337, + "2": 0.8629746084664507 + }, + "precision": { + "0": 0.3744643602749915, + "1": 0.4101335361275512, + "2": 0.30232394082082586 + }, + "recall": { + "0": 0.6735821034148729, + "1": 0.7761794039931362, + "2": 0.8369456149801462 + }, + "f1": { + "0": 0.3330813782828472, + "1": 0.3909835009047214, + "2": 0.3050863199216497 + }, + "micro_accuracy": { + "0": 0.7246729047676915, + "1": 0.8265867066466767, + "2": 0.9571018734235709 + }, + "coverage": { + "0": 0.935326210502387, + "1": 0.9476585587633554, + "2": 0.9838789118739107 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7396903883120828, + "1": 0.8421783821428711, + "2": 0.8645071601852107 + }, + "precision": { + "0": 0.38628673721604956, + "1": 0.41961458344435987, + "2": 0.3091410768925494 + }, + "recall": { + "0": 0.6708981307712321, + "1": 0.7743872489652027, + "2": 0.83585968740951 + }, + "f1": { + "0": 0.3412912087376304, + "1": 0.39856212996829893, + "2": 0.3111412926088325 + }, + "micro_accuracy": { + "0": 0.7280406439370753, + "1": 0.8300175011566856, + "2": 0.9590610510046368 + }, + "coverage": { + "0": 0.9284496476471925, + "1": 0.9417102371751156, + "2": 0.9805258770932788 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7417313161028707, + "1": 0.8445806477827644, + "2": 0.8664468729715237 + }, + "precision": { + "0": 0.39350167735699043, + "1": 0.4258942619665507, + "2": 0.3113815405846213 + }, + "recall": { + "0": 0.6686433995249466, + "1": 0.7724392617185202, + "2": 0.8316718476421493 + }, + "f1": { + "0": 0.34588431348802307, + "1": 0.40305476460134165, + "2": 0.31153299590021677 + }, + "micro_accuracy": { + "0": 0.7313798067036809, + "1": 0.8329723712174881, + "2": 0.9611260833317177 + }, + "coverage": { + "0": 0.9212320982041373, + "1": 0.9359134651814807, + "2": 0.9770591801166932 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7463891786671563, + "1": 0.8535494799677813, + "2": 0.8698142431594695 + }, + "precision": { + "0": 0.4053857453109944, + "1": 0.4370933438278736, + "2": 0.33028952855290117 + }, + "recall": { + "0": 0.6649505688173692, + "1": 0.7685652704423974, + "2": 0.8307462813108796 + }, + "f1": { + "0": 0.3525269879765659, + "1": 0.4112374100626365, + "2": 0.32968512135931993 + }, + "micro_accuracy": { + "0": 0.7347175597828339, + "1": 0.8361917953314051, + "2": 0.9629132372112934 + }, + "coverage": { + "0": 0.9141850420550125, + "1": 0.9300219746912177, + "2": 0.973573539440782 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7492330418965651, + "1": 0.8561133908120545, + "2": 0.8767969439734032 + }, + "precision": { + "0": 0.4163602109072065, + "1": 0.45194251085762593, + "2": 0.3446944310916479 + }, + "recall": { + "0": 0.6625732025911344, + "1": 0.7660345690111648, + "2": 0.8294255927199516 + }, + "f1": { + "0": 0.3605583190771206, + "1": 0.42269062511276906, + "2": 0.3430475330694983 + }, + "micro_accuracy": { + "0": 0.7377980042586948, + "1": 0.8390693860817874, + "2": 0.9646693488535604 + }, + "coverage": { + "0": 0.9074410850950974, + "1": 0.924168371599606, + "2": 0.9699552928695916 + } + } + }, + { + "thresholds": [ + 0.3537990897893905, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7538583339517668, + "1": 0.8593990128447897, + "2": 0.87957741512099 + }, + "precision": { + "0": 0.4212561423299973, + "1": 0.46139860633273433, + "2": 0.3553676673377232 + }, + "recall": { + "0": 0.661276805931529, + "1": 0.7642864984780214, + "2": 0.8285615094793783 + }, + "f1": { + "0": 0.3636222428292602, + "1": 0.42968035384752934, + "2": 0.35133185314648663 + }, + "micro_accuracy": { + "0": 0.7401280571008713, + "1": 0.8424179905095935, + "2": 0.9664282214600686 + }, + "coverage": { + "0": 0.902383117375161, + "1": 0.9182011063120407, + "2": 0.9666022580889596 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7565568732390137, + "1": 0.8669009187423931, + "2": 0.885232969913842 + }, + "precision": { + "0": 0.42347829588384334, + "1": 0.47166886260425755, + "2": 0.3714145064527272 + }, + "recall": { + "0": 0.6607818075996174, + "1": 0.7616744428290579, + "2": 0.8270365447898671 + }, + "f1": { + "0": 0.3650718648840585, + "1": 0.4358005310276752, + "2": 0.3662212187319817 + }, + "micro_accuracy": { + "0": 0.7412653645394848, + "1": 0.84559449857686, + "2": 0.9681924582489132 + }, + "coverage": { + "0": 0.9000530423581117, + "1": 0.9118170796393119, + "2": 0.963040842615746 + } + } + }, + { + "thresholds": [ + 0.38, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7620820129428135, + "1": 0.8696888075908672, + "2": 0.9292295136739749 + }, + "precision": { + "0": 0.43330524957634076, + "1": 0.4806609468097513, + "2": 0.3739908173250862 + }, + "recall": { + "0": 0.6559202395916996, + "1": 0.7588796988994825, + "2": 0.825863549704312 + }, + "f1": { + "0": 0.3694633222970301, + "1": 0.44190548952918013, + "2": 0.36735780811565355 + }, + "micro_accuracy": { + "0": 0.7448245111153576, + "1": 0.8488552174459001, + "2": 0.9700578696845806 + }, + "coverage": { + "0": 0.892191407137986, + "1": 0.9051678411760249, + "2": 0.9591384405546716 + } + } + }, + { + "thresholds": [ + 0.4, + 0.40697115063667294, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.76498577566663, + "1": 0.8703321851456043, + "2": 0.930997660939321 + }, + "precision": { + "0": 0.44196982487850534, + "1": 0.48533247562537324, + "2": 0.3767013980226072 + }, + "recall": { + "0": 0.6527987211199754, + "1": 0.7582318038681712, + "2": 0.8236324012919481 + }, + "f1": { + "0": 0.37431741191868334, + "1": 0.4455956070663132, + "2": 0.3685334273838971 + }, + "micro_accuracy": { + "0": 0.7485758341542811, + "1": 0.8498982823346826, + "2": 0.9720039682539683 + }, + "coverage": { + "0": 0.8845570963097674, + "1": 0.9032545275441388, + "2": 0.9547624460104569 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.45111105740070345 + ], + "scores": { + "accuracy": { + "0": 0.768864658345758, + "1": 0.8767747848694591, + "2": 0.9358799659713064 + }, + "precision": { + "0": 0.45038831483734376, + "1": 0.4898044867288474, + "2": 0.37744451148972147 + }, + "recall": { + "0": 0.6486974178982069, + "1": 0.7557248785817791, + "2": 0.8231183238338401 + }, + "f1": { + "0": 0.37920797548638824, + "1": 0.4480895039848331, + "2": 0.36875024258203765 + }, + "micro_accuracy": { + "0": 0.7520680792241733, + "1": 0.8519189451067953, + "2": 0.9726280636889498 + }, + "coverage": { + "0": 0.8770743350761536, + "1": 0.8993331817837388, + "2": 0.9530006819731757 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.7731713457187648, + "1": 0.8807751436227357, + "2": 0.9378393055260615 + }, + "precision": { + "0": 0.46026453616908874, + "1": 0.502189859660842, + "2": 0.3857539820083362 + }, + "recall": { + "0": 0.6439124383090291, + "1": 0.751809458523179, + "2": 0.8225878187878916 + }, + "f1": { + "0": 0.38519694731640847, + "1": 0.4566113420047224, + "2": 0.37666240835839665 + }, + "micro_accuracy": { + "0": 0.7558433629862201, + "1": 0.8549540564055769, + "2": 0.9735144177154692 + }, + "coverage": { + "0": 0.8688338258695159, + "1": 0.8926839433204516, + "2": 0.9512768053345457 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.7780060841455319, + "1": 0.8864871459596081, + "2": 0.9397362809363515 + }, + "precision": { + "0": 0.4699273072427158, + "1": 0.5125705228776535, + "2": 0.39646328769619704 + }, + "recall": { + "0": 0.6393549427290771, + "1": 0.7485406402662007, + "2": 0.821317725180187 + }, + "f1": { + "0": 0.38936522113210703, + "1": 0.4635460640406912, + "2": 0.3859044936095559 + }, + "micro_accuracy": { + "0": 0.7598872544701841, + "1": 0.8582542532273233, + "2": 0.9753985239114347 + }, + "coverage": { + "0": 0.8602712737743426, + "1": 0.8863378040463742, + "2": 0.9471281351822384 + } + } + }, + { + "thresholds": [ + 0.479143737256527, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.7882274037908994, + "1": 0.8960667540249149, + "2": 0.9495342523067642 + }, + "precision": { + "0": 0.4815172811000527, + "1": 0.5228375244491988, + "2": 0.3986846065549518 + }, + "recall": { + "0": 0.6337387679164644, + "1": 0.7430287851053136, + "2": 0.8198959581587275 + }, + "f1": { + "0": 0.39417035934404154, + "1": 0.46788756880748655, + "2": 0.38704027308822264 + }, + "micro_accuracy": { + "0": 0.7636638775146876, + "1": 0.8617418116738901, + "2": 0.9768637532133676 + }, + "coverage": { + "0": 0.851254072895355, + "1": 0.8785519436235508, + "2": 0.9432446768204895 + } + } + }, + { + "thresholds": [ + 0.48, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.788297189954357, + "1": 0.9007455287162172, + "2": 0.9523579503964864 + }, + "precision": { + "0": 0.4821756626078358, + "1": 0.5362543506919683, + "2": 0.4086856646229382 + }, + "recall": { + "0": 0.633623093437942, + "1": 0.7399094638419738, + "2": 0.8106313379533677 + }, + "f1": { + "0": 0.39415603359620555, + "1": 0.4769949097087, + "2": 0.39381144929482775 + }, + "micro_accuracy": { + "0": 0.763876828535168, + "1": 0.8656713169521405, + "2": 0.9785671039354188 + }, + "coverage": { + "0": 0.8508183678108661, + "1": 0.870406152913541, + "2": 0.9386603015836933 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.7933647153703338, + "1": 0.9056542611163141, + "2": 0.9548203459590092 + }, + "precision": { + "0": 0.49805879775399464, + "1": 0.5467266998338093, + "2": 0.42024626378101604 + }, + "recall": { + "0": 0.6291378012560022, + "1": 0.7347840834279914, + "2": 0.8084325392696734 + }, + "f1": { + "0": 0.40309811738918916, + "1": 0.48275685960778364, + "2": 0.4035983020645816 + }, + "micro_accuracy": { + "0": 0.7690745837657357, + "1": 0.8699746946858841, + "2": 0.9801147305049358 + }, + "coverage": { + "0": 0.8396984163067364, + "1": 0.8608964158520876, + "2": 0.9345495188300371 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.7978730000069773, + "1": 0.9093851130928823, + "2": 0.9592970568769567 + }, + "precision": { + "0": 0.5086181169997136, + "1": 0.5625874192026116, + "2": 0.422230374509393 + }, + "recall": { + "0": 0.6232342703071942, + "1": 0.7307951572236216, + "2": 0.8069656600204749 + }, + "f1": { + "0": 0.4080543002074898, + "1": 0.49164343876928324, + "2": 0.4041291595058658 + }, + "micro_accuracy": { + "0": 0.7746817474127667, + "1": 0.8736418779300997, + "2": 0.9816485732325804 + }, + "coverage": { + "0": 0.8273850117450936, + "1": 0.8525990755474729, + "2": 0.9300788057891946 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5492531061172486, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8011341211383649, + "1": 0.9105500325754434, + "2": 0.9601500162042858 + }, + "precision": { + "0": 0.5212353137342385, + "1": 0.5658138883501845, + "2": 0.43269967478992266 + }, + "recall": { + "0": 0.6154099095795471, + "1": 0.7288211220419086, + "2": 0.8042673319160089 + }, + "f1": { + "0": 0.41367078154174236, + "1": 0.49360536657314036, + "2": 0.41288287037890536 + }, + "micro_accuracy": { + "0": 0.7797818012999072, + "1": 0.8752705446593927, + "2": 0.9827557992063167 + }, + "coverage": { + "0": 0.8160945669470334, + "1": 0.8489997726756081, + "2": 0.926081685231492 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8044939569193892, + "1": 0.9116935383112089, + "2": 0.963078908887324 + }, + "precision": { + "0": 0.5269860060113801, + "1": 0.5688597908296337, + "2": 0.44356229232178634 + }, + "recall": { + "0": 0.6084913600181087, + "1": 0.7271247577253878, + "2": 0.8026937891231549 + }, + "f1": { + "0": 0.4148859064243914, + "1": 0.4944601899137064, + "2": 0.4224015604212334 + }, + "micro_accuracy": { + "0": 0.7847749888258957, + "1": 0.8766340052467544, + "2": 0.9838898592417549 + }, + "coverage": { + "0": 0.8052777146321134, + "1": 0.8448700462226264, + "2": 0.9218951276805335 + } + } + }, + { + "thresholds": [ + 0.5685244202613831, + 0.58, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8048652518808226, + "1": 0.917899111483499, + "2": 0.9644652884911543 + }, + "precision": { + "0": 0.5306960484895935, + "1": 0.5827134891781429, + "2": 0.4676284265763729 + }, + "recall": { + "0": 0.6057599338795269, + "1": 0.7228192655645438, + "2": 0.801285646799651 + }, + "f1": { + "0": 0.41609940033034637, + "1": 0.5024510541523488, + "2": 0.4440265230383049 + }, + "micro_accuracy": { + "0": 0.7870374757189558, + "1": 0.8803081803761613, + "2": 0.9851535237151293 + }, + "coverage": { + "0": 0.7996893233310601, + "1": 0.835985451238918, + "2": 0.9174244146396908 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8072856451883191, + "1": 0.9208322212088266, + "2": 0.9658143534349576 + }, + "precision": { + "0": 0.5389202554932224, + "1": 0.5946326455348465, + "2": 0.4790588345218743 + }, + "recall": { + "0": 0.602366265401922, + "1": 0.7174675406009315, + "2": 0.7968920984209682 + }, + "f1": { + "0": 0.4190124691129626, + "1": 0.5092427050461559, + "2": 0.44939580807177315 + }, + "micro_accuracy": { + "0": 0.7902848131511039, + "1": 0.8835937678738932, + "2": 0.9864242122306638 + }, + "coverage": { + "0": 0.7928317041751913, + "1": 0.8280101538228385, + "2": 0.9125937713116618 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.812982662753591, + "1": 0.9264913852359948, + "2": 0.9665404296878589 + }, + "precision": { + "0": 0.5531433602004631, + "1": 0.606383533032525, + "2": 0.49210629017188634 + }, + "recall": { + "0": 0.5947982925054555, + "1": 0.7116783087763782, + "2": 0.7938523482778995 + }, + "f1": { + "0": 0.42367825181233804, + "1": 0.5145356783318985, + "2": 0.4606037140021268 + }, + "micro_accuracy": { + "0": 0.7953244737607915, + "1": 0.8869864596330699, + "2": 0.9871161423478642 + }, + "coverage": { + "0": 0.7811623853906191, + "1": 0.8198454194135031, + "2": 0.9086724255512616 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8174102576776441, + "1": 0.9291551043477293, + "2": 0.9685809948419092 + }, + "precision": { + "0": 0.5644784141979927, + "1": 0.6248966797080169, + "2": 0.49330388424373883 + }, + "recall": { + "0": 0.5875700691321352, + "1": 0.7056831169911759, + "2": 0.7885604162130602 + }, + "f1": { + "0": 0.42761194302714567, + "1": 0.5257553143639654, + "2": 0.45988155561967103 + }, + "micro_accuracy": { + "0": 0.8012410125086181, + "1": 0.8907739764441952, + "2": 0.9879742724853868 + }, + "coverage": { + "0": 0.769341517011442, + "1": 0.8106387815412593, + "2": 0.904201712510419 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.6958589136600495 + ], + "scores": { + "accuracy": { + "0": 0.8238208754147821, + "1": 0.9307693620980368, + "2": 0.9701101050481722 + }, + "precision": { + "0": 0.5772527704462415, + "1": 0.6344426455991637, + "2": 0.5096414235730106 + }, + "recall": { + "0": 0.5824797264220842, + "1": 0.7011867959033681, + "2": 0.7859405045656769 + }, + "f1": { + "0": 0.43246034937790995, + "1": 0.5303398623621043, + "2": 0.47323396546721097 + }, + "micro_accuracy": { + "0": 0.8067985692488556, + "1": 0.8939769268879609, + "2": 0.98894783377542 + }, + "coverage": { + "0": 0.7573501553383345, + "1": 0.8029665833143896, + "2": 0.8998636053648557 + } + } + }, + { + "thresholds": [ + 0.6565299034118652, + 0.6691723704338074, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8259110593072747, + "1": 0.9316166318158218, + "2": 0.9701972493446308 + }, + "precision": { + "0": 0.5834195432185107, + "1": 0.6377036801524625, + "2": 0.5098036818136686 + }, + "recall": { + "0": 0.5780391806859115, + "1": 0.6994300091652399, + "2": 0.7817733112683922 + }, + "f1": { + "0": 0.43411673716703486, + "1": 0.5320825421328166, + "2": 0.47177548436047534 + }, + "micro_accuracy": { + "0": 0.8109893447394396, + "1": 0.8955690950902065, + "2": 0.9892303152925308 + }, + "coverage": { + "0": 0.7484845040539516, + "1": 0.7990641812533151, + "2": 0.898840645601273 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8261349410066672, + "1": 0.934281927319884, + "2": 0.9713169406676776 + }, + "precision": { + "0": 0.5858929734156744, + "1": 0.6435763836851517, + "2": 0.5238892897046304 + }, + "recall": { + "0": 0.5771664807953762, + "1": 0.6968974774260187, + "2": 0.7786746337052538 + }, + "f1": { + "0": 0.43487311930707695, + "1": 0.5355101616850729, + "2": 0.48328661415847063 + }, + "micro_accuracy": { + "0": 0.8117847083005557, + "1": 0.8975178235055676, + "2": 0.990127955258029 + }, + "coverage": { + "0": 0.7465143593240888, + "1": 0.7944798060165189, + "2": 0.8942183829658256 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8344423853510767, + "1": 0.9386135658075512, + "2": 0.974642294066771 + }, + "precision": { + "0": 0.5968463401541488, + "1": 0.6573111430970107, + "2": 0.5565963557109618 + }, + "recall": { + "0": 0.5717642523729206, + "1": 0.6898256336652248, + "2": 0.7756901330852325 + }, + "f1": { + "0": 0.4386941029811446, + "1": 0.5415852040218777, + "2": 0.5106193874853928 + }, + "micro_accuracy": { + "0": 0.8175278465346535, + "1": 0.900696234551543, + "2": 0.9911161294445983 + }, + "coverage": { + "0": 0.7347124346442373, + "1": 0.786334015306509, + "2": 0.8891983026445405 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8395841303134072, + "1": 0.9399241568767652, + "2": 0.9756140939215947 + }, + "precision": { + "0": 0.6098737913258159, + "1": 0.6704574655339746, + "2": 0.5755342260972793 + }, + "recall": { + "0": 0.5619640670374774, + "1": 0.6799613063221245, + "2": 0.7504506757358773 + }, + "f1": { + "0": 0.44092038002206324, + "1": 0.5468194132002746, + "2": 0.5157071324749651 + }, + "micro_accuracy": { + "0": 0.8226410155738778, + "1": 0.9034855155303675, + "2": 0.9920279450528255 + }, + "coverage": { + "0": 0.7237440327347124, + "1": 0.7788323103735697, + "2": 0.8839698416306736 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8423501196062877, + "1": 0.9402964583121297, + "2": 0.9768824341625362 + }, + "precision": { + "0": 0.625437304885391, + "1": 0.683561538591604, + "2": 0.5940637891203783 + }, + "recall": { + "0": 0.5528512219426744, + "1": 0.6749686656589812, + "2": 0.7470814327717062 + }, + "f1": { + "0": 0.4449499115437451, + "1": 0.5542333882041446, + "2": 0.531177040427964 + }, + "micro_accuracy": { + "0": 0.8273883827786779, + "1": 0.9063038236307268, + "2": 0.9929506111626102 + }, + "coverage": { + "0": 0.7132492233083276, + "1": 0.7699098279912101, + "2": 0.8787413806168068 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8463649579970157, + "1": 0.940216182509555, + "2": 0.9774283680831387 + }, + "precision": { + "0": 0.6371715558637081, + "1": 0.6925092932203307, + "2": 0.5969830983078246 + }, + "recall": { + "0": 0.5477329787807753, + "1": 0.6688145458396724, + "2": 0.7441754993023312 + }, + "f1": { + "0": 0.44891146151293565, + "1": 0.5580536322120937, + "2": 0.5325763988664586 + }, + "micro_accuracy": { + "0": 0.8321368813083607, + "1": 0.9090320814355758, + "2": 0.9937857158377333 + }, + "coverage": { + "0": 0.7019398348109419, + "1": 0.7611388952034553, + "2": 0.8718458740622869 + } + } + }, + { + "thresholds": [ + 0.7456764996051789, + 0.78, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8470722914376193, + "1": 0.9448668247874524, + "2": 0.9775813449374122 + }, + "precision": { + "0": 0.6391890475798446, + "1": 0.709993588972809, + "2": 0.6179778523808357 + }, + "recall": { + "0": 0.5433424478932868, + "1": 0.6624124710344891, + "2": 0.7326713495230904 + }, + "f1": { + "0": 0.4479025251155606, + "1": 0.5681195205862982, + "2": 0.5444082207241341 + }, + "micro_accuracy": { + "0": 0.8333514011599544, + "1": 0.911995162631327, + "2": 0.9945648600670626 + }, + "coverage": { + "0": 0.6989846177161476, + "1": 0.7518943699325604, + "2": 0.8643820565279988 + } + } + }, + { + "thresholds": [ + 0.7484260499477386, + 0.7870529741048813, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.945291067080785, + "2": 0.9783773542142998 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.7145816417888794, + "2": 0.6185898839417044 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6599159648524986, + "2": 0.7245824597984994 + }, + "f1": { + "0": 0.44667552768137514, + "1": 0.5697131097832999, + "2": 0.5412518110331637 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9128938377831204, + "2": 0.9952446253207113 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.7485602788512541, + "2": 0.8564825339092218 + } + } + }, + { + "thresholds": [ + 0.76, + 0.8, + 0.8514585137367249 + ], + "scores": { + "accuracy": { + "0": 0.8489431692878796, + "1": 0.9453774504583593, + "2": 0.9804985839228043 + }, + "precision": { + "0": 0.6493315943552593, + "1": 0.7247916942850378, + "2": 0.638741334793761 + }, + "recall": { + "0": 0.5385761013245209, + "1": 0.655635629605617, + "2": 0.7186775364269672 + }, + "f1": { + "0": 0.4512554180613582, + "1": 0.5742293393881358, + "2": 0.555762605625137 + }, + "micro_accuracy": { + "0": 0.8370829675153644, + "1": 0.9145912013881801, + "2": 0.9956623289956623 + }, + "coverage": { + "0": 0.6904599530196257, + "1": 0.7423656891717815, + "2": 0.8516140031825414 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8543496914643167, + "1": 0.9468540662604529, + "2": 0.9846489425961643 + }, + "precision": { + "0": 0.6667958656933289, + "1": 0.7426004170812949, + "2": 0.6814804889041144 + }, + "recall": { + "0": 0.5286308050491648, + "1": 0.6473190645399111, + "2": 0.7170747307068346 + }, + "f1": { + "0": 0.4549898339955342, + "1": 0.5826868669138732, + "2": 0.5920820321167594 + }, + "micro_accuracy": { + "0": 0.8420934976388074, + "1": 0.9173051040480381, + "2": 0.9957997274291204 + }, + "coverage": { + "0": 0.6779381677654013, + "1": 0.7319087671440478, + "2": 0.8479010381147231 + } + } + }, + { + "thresholds": [ + 0.8, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.8571043269845959, + "1": 0.9479971122287032, + "2": 0.9852665821141021 + }, + "precision": { + "0": 0.6875065744641273, + "1": 0.7519126469653977, + "2": 0.681702435173093 + }, + "recall": { + "0": 0.5189745717918203, + "1": 0.6380836030276239, + "2": 0.7112934918478875 + }, + "f1": { + "0": 0.4596967511459941, + "1": 0.5818180608519495, + "2": 0.5893607177079055 + }, + "micro_accuracy": { + "0": 0.846808631782725, + "1": 0.9198485326601451, + "2": 0.9962061334176415 + }, + "coverage": { + "0": 0.6654163825111767, + "1": 0.7203909979540805, + "2": 0.8388648935364098 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.86, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8619585155027756, + "1": 0.9531534141743057, + "2": 0.986257109518924 + }, + "precision": { + "0": 0.7071329036531397, + "1": 0.7689164934422168, + "2": 0.7071672289650286 + }, + "recall": { + "0": 0.5091597355871952, + "1": 0.6283594242093068, + "2": 0.698142746101181 + }, + "f1": { + "0": 0.46284330029270326, + "1": 0.5860897743308765, + "2": 0.6055676977756497 + }, + "micro_accuracy": { + "0": 0.8517926666279273, + "1": 0.9231344679259398, + "2": 0.9967507207908105 + }, + "coverage": { + "0": 0.6520042433886489, + "1": 0.7090437220580434, + "2": 0.8278775479275593 + } + } + }, + { + "thresholds": [ + 0.8264622539281845, + 0.8759860098361969, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8637848262532208, + "1": 0.9533632911945014, + "2": 0.988153084741252 + }, + "precision": { + "0": 0.7085403828053932, + "1": 0.784792371905105, + "2": 0.7435245532287457 + }, + "recall": { + "0": 0.5061620123123874, + "1": 0.6176629588211429, + "2": 0.6836274899557798 + }, + "f1": { + "0": 0.461866851630814, + "1": 0.5868633065886132, + "2": 0.6261130948318617 + }, + "micro_accuracy": { + "0": 0.8532459169935023, + "1": 0.9258405014517136, + "2": 0.9974399553155837 + }, + "coverage": { + "0": 0.6472304311585967, + "1": 0.6981321512464954, + "2": 0.8139728726225657 + } + } + }, + { + "thresholds": [ + 0.84, + 0.8782991468906403, + 0.9364732980728149 + ], + "scores": { + "accuracy": { + "0": 0.8670729969060553, + "1": 0.9533159076814397, + "2": 0.9927708608307263 + }, + "precision": { + "0": 0.719885379479109, + "1": 0.7870150011024752, + "2": 0.7489214434586575 + }, + "recall": { + "0": 0.5010430254085447, + "1": 0.6166634784228663, + "2": 0.6685411756299292 + }, + "f1": { + "0": 0.46257936134522293, + "1": 0.587756280670877, + "2": 0.6193749423273058 + }, + "micro_accuracy": { + "0": 0.8556964280412126, + "1": 0.9261675637470776, + "2": 0.997982818358726 + }, + "coverage": { + "0": 0.6380048495870273, + "1": 0.6968629233916799, + "2": 0.7982496021823141 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8706884912621817, + "1": 0.9535461644178388, + "2": 0.9941523987471009 + }, + "precision": { + "0": 0.7315950064925006, + "1": 0.7897417800991028, + "2": 0.7768469419092289 + }, + "recall": { + "0": 0.4896275602320039, + "1": 0.6157729176051233, + "2": 0.6652857270977391 + }, + "f1": { + "0": 0.4615205075654005, + "1": 0.5888425955261315, + "2": 0.6402708487484874 + }, + "micro_accuracy": { + "0": 0.8605266358550231, + "1": 0.926511830533395, + "2": 0.9981643064892958 + }, + "coverage": { + "0": 0.6230203834204744, + "1": 0.6957452451314693, + "2": 0.7946124119117981 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9553309082984924 + ], + "scores": { + "accuracy": { + "0": 0.8793579893163278, + "1": 0.9568801185512408, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.7550323783486348, + "1": 0.8211946224210389, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.4755547780712371, + "1": 0.6042394158387125, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.46165809067739916, + "1": 0.597889469434143, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8653810089391761, + "1": 0.929561008178935, + "2": 0.9986057092536875 + }, + "coverage": { + "0": 0.6060847162233841, + "1": 0.6809502159581723, + "2": 0.7744373721300295 + } + } + }, + { + "thresholds": [ + 0.8903758764266968, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.881825084120903, + "1": 0.9605049154328256, + "2": 0.9963510429161949 + }, + "precision": { + "0": 0.7742583039758238, + "1": 0.8442414682151989, + "2": 0.8412084293924852 + }, + "recall": { + "0": 0.46896066132093595, + "1": 0.589338697650042, + "2": 0.6390855348255022 + }, + "f1": { + "0": 0.46378207381995684, + "1": 0.5989102808804448, + "2": 0.6496969678563335 + }, + "micro_accuracy": { + "0": 0.8673708920187794, + "1": 0.9329754119427707, + "2": 0.9986414385930245 + }, + "coverage": { + "0": 0.59718117754035, + "1": 0.6633515192846859, + "2": 0.7669167234977646 + } + } + }, + { + "thresholds": [ + 0.9, + 0.9384227305650711, + 0.9707285761833192 + ], + "scores": { + "accuracy": { + "0": 0.886591232582187, + "1": 0.9655906990330169, + "2": 0.9969807550506485 + }, + "precision": { + "0": 0.7858127606113039, + "1": 0.8718273283163155, + "2": 0.8426490305365167 + }, + "recall": { + "0": 0.4632320753750467, + "1": 0.5711784918349673, + "2": 0.6148343118521129 + }, + "f1": { + "0": 0.46285037780071864, + "1": 0.6004209623980667, + "2": 0.6340292729908725 + }, + "micro_accuracy": { + "0": 0.8692711520499855, + "1": 0.9365902528139548, + "2": 0.9989575122683008 + }, + "coverage": { + "0": 0.5881829203606881, + "1": 0.6429112677123588, + "2": 0.7450367507766916 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9011322075678474, + "1": 0.9689250623553353, + "2": 0.9982386290893209 + }, + "precision": { + "0": 0.8090470115825958, + "1": 0.8777217439050252, + "2": 0.9374678404832453 + }, + "recall": { + "0": 0.4454532693078384, + "1": 0.5702029500310949, + "2": 0.5938620938982623 + }, + "f1": { + "0": 0.4571434450073653, + "1": 0.6034004690909296, + "2": 0.6850994808799825 + }, + "micro_accuracy": { + "0": 0.8740968691463741, + "1": 0.9370474360868922, + "2": 0.9991555837027655 + }, + "coverage": { + "0": 0.5663408350382663, + "1": 0.6409600666818216, + "2": 0.7178904296431007 + } + } + }, + { + "thresholds": [ + 0.9358231902122498, + 0.96, + 0.9848238646984101 + ], + "scores": { + "accuracy": { + "0": 0.906510836908015, + "1": 0.9734821989427783, + "2": 0.9984932116567069 + }, + "precision": { + "0": 0.8293059967395912, + "1": 0.9137623339505435, + "2": 0.9374350444644793 + }, + "recall": { + "0": 0.42752571910339243, + "1": 0.5371145246291884, + "2": 0.5725432168299244 + }, + "f1": { + "0": 0.4507449343115663, + "1": 0.5964815767708255, + "2": 0.6681871407805318 + }, + "micro_accuracy": { + "0": 0.8778930566640064, + "1": 0.9420434052608668, + "2": 0.999293132510467 + }, + "coverage": { + "0": 0.5459384708645905, + "1": 0.6092672577100856, + "2": 0.6967871485943775 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.9656149983406068, + 0.9913917630910873 + ], + "scores": { + "accuracy": { + "0": 0.9091312269166707, + "1": 0.97456479184628, + "2": 0.9988747475369835 + }, + "precision": { + "0": 0.8365020870222727, + "1": 0.9257302625855923, + "2": 0.9492221081967291 + }, + "recall": { + "0": 0.42232054957550946, + "1": 0.5241133346626884, + "2": 0.5328327796209631 + }, + "f1": { + "0": 0.44914814164225647, + "1": 0.5911845260376621, + "2": 0.6303100265743733 + }, + "micro_accuracy": { + "0": 0.8788388725283971, + "1": 0.944186932503651, + "2": 0.9995343964614131 + }, + "coverage": { + "0": 0.5403500795635372, + "1": 0.5966886413578844, + "2": 0.6509812836250664 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9955343961715699 + ], + "scores": { + "accuracy": { + "0": 0.9201380814593091, + "1": 0.9769537159818455, + "2": 0.9995620811336337 + }, + "precision": { + "0": 0.8823555769833847, + "1": 0.9521627782748059, + "2": 0.9937719515821347 + }, + "recall": { + "0": 0.3927936410731383, + "1": 0.4860069643277699, + "2": 0.49380290755818107 + }, + "f1": { + "0": 0.4391054394630887, + "1": 0.5680042616944154, + "2": 0.6231337382901458 + }, + "micro_accuracy": { + "0": 0.8849031772889641, + "1": 0.9509928324016599, + "2": 0.9996496703716679 + }, + "coverage": { + "0": 0.5038076835644465, + "1": 0.5523793286352959, + "2": 0.5948132151246496 + } + } + }, + { + "thresholds": [ + 0.9607052505016327, + 0.9813370376825332, + 0.9973954737186431 + ], + "scores": { + "accuracy": { + "0": 0.9203827833915593, + "1": 0.9803763280122324, + "2": 0.9995305447848821 + }, + "precision": { + "0": 0.8845675894068831, + "1": 0.9520908484587497, + "2": 0.9937235211674139 + }, + "recall": { + "0": 0.39195270168420143, + "1": 0.48121352266587647, + "2": 0.45835787078723805 + }, + "f1": { + "0": 0.4393158234480972, + "1": 0.5629300215932652, + "2": 0.5899000568822463 + }, + "micro_accuracy": { + "0": 0.8854728582745482, + "1": 0.9520213392455052, + "2": 0.9996172182204127 + }, + "coverage": { + "0": 0.5021785254224445, + "1": 0.5468477684322195, + "2": 0.5443850875198909 + } + } + }, + { + "thresholds": [ + 0.9772910118103028, + 0.9892962574958801, + 0.9983085989952087 + ], + "scores": { + "accuracy": { + "0": 0.9224784524624318, + "1": 0.9853381275150243, + "2": 0.9994750383727553 + }, + "precision": { + "0": 0.9167404636415023, + "1": 0.9628836565616, + "2": 0.9933536987752971 + }, + "recall": { + "0": 0.3500126339945987, + "1": 0.4410249313010055, + "2": 0.40695199945860056 + }, + "f1": { + "0": 0.4090910901421534, + "1": 0.5264544678877461, + "2": 0.530128710967798 + }, + "micro_accuracy": { + "0": 0.8939842414641264, + "1": 0.9584759297284965, + "2": 0.9995818921281691 + }, + "coverage": { + "0": 0.45440251572327045, + "1": 0.498181404864742, + "2": 0.49838978555732366 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9940865129232407, + 0.9988986492156983 + ], + "scores": { + "accuracy": { + "0": 0.9259260133987012, + "1": 0.9886773439576837, + "2": 0.999510892985462 + }, + "precision": { + "0": 0.9287696568079125, + "1": 0.9673937777616789, + "2": 0.9932858564489312 + }, + "recall": { + "0": 0.34305526024314237, + "1": 0.39533064865966283, + "2": 0.37802951388086015 + }, + "f1": { + "0": 0.40545315973152146, + "1": 0.48215579452674406, + "2": 0.4996853730936106 + }, + "micro_accuracy": { + "0": 0.8960351670863386, + "1": 0.9644070676180768, + "2": 0.9995806424557577 + }, + "coverage": { + "0": 0.44386981889823446, + "1": 0.44601045692202773, + "2": 0.45173145411836024 + } + } + }, + { + "thresholds": [ + 0.9875957727432252, + 0.9965847253799439, + 0.9992938041687012 + ], + "scores": { + "accuracy": { + "0": 0.9331721505692478, + "1": 0.9907195641472741, + "2": 0.9995552014846872 + }, + "precision": { + "0": 0.9422783803784637, + "1": 0.9671581118504539, + "2": 0.9924074965852764 + }, + "recall": { + "0": 0.3103849278937484, + "1": 0.3544472807213365, + "2": 0.3411563972986156 + }, + "f1": { + "0": 0.3731481520556834, + "1": 0.43949427729293655, + "2": 0.46023275905537747 + }, + "micro_accuracy": { + "0": 0.906255888449218, + "1": 0.9702378104215512, + "2": 0.9996706502305448 + }, + "coverage": { + "0": 0.4021368492839282, + "1": 0.3959043722058043, + "2": 0.4026293854663939 + } + } + }, + { + "thresholds": [ + 0.9932747930288315, + 0.9979124128818512, + 0.9995260596275328 + ], + "scores": { + "accuracy": { + "0": 0.9352463965386525, + "1": 0.9914784173418828, + "2": 0.999563264394016 + }, + "precision": { + "0": 0.9508631823086221, + "1": 0.9763256115542089, + "2": 0.9995051240748992 + }, + "recall": { + "0": 0.27226119379753927, + "1": 0.30749579213358735, + "2": 0.31424500410311856 + }, + "f1": { + "0": 0.33390137949934684, + "1": 0.3924551263234857, + "2": 0.43067504037440046 + }, + "micro_accuracy": { + "0": 0.9229348829631239, + "1": 0.9735764590271333, + "2": 0.9997324199935781 + }, + "coverage": { + "0": 0.34881033568235204, + "1": 0.34699174054709403, + "2": 0.353981965598242 + } + } + }, + { + "thresholds": [ + 0.9960826754570007, + 0.9987055897712708, + 0.9996948003768921 + ], + "scores": { + "accuracy": { + "0": 0.9573140772989064, + "1": 0.9925696431860658, + "2": 0.9997660694509847 + }, + "precision": { + "0": 0.9607018462729368, + "1": 0.9759817588055099, + "2": 0.9994063575910344 + }, + "recall": { + "0": 0.23800497399583997, + "1": 0.26067454450586236, + "2": 0.2787525297122127 + }, + "f1": { + "0": 0.2983482724305761, + "1": 0.3414928648913302, + "2": 0.39011506147599617 + }, + "micro_accuracy": { + "0": 0.9419760855884204, + "1": 0.9767953716513647, + "2": 0.9998108448928121 + }, + "coverage": { + "0": 0.3010153822838524, + "1": 0.30124270667575964, + "2": 0.30044707130408427 + } + } + }, + { + "thresholds": [ + 0.9978011250495912, + 0.9992076456546783, + 0.9997953176498412 + ], + "scores": { + "accuracy": { + "0": 0.9708235983178943, + "1": 0.9913075596255322, + "2": 0.9997214337089178 + }, + "precision": { + "0": 0.9746213607645572, + "1": 0.9755145939723172, + "2": 0.9992375117389883 + }, + "recall": { + "0": 0.19821929544214625, + "1": 0.21949172259808997, + "2": 0.20217148462215026 + }, + "f1": { + "0": 0.25544425709876367, + "1": 0.2923870092827054, + "2": 0.30481093108822277 + }, + "micro_accuracy": { + "0": 0.9604975499434603, + "1": 0.9806089986365703, + "2": 0.999771897810219 + }, + "coverage": { + "0": 0.25128817155414107, + "1": 0.250094718496628, + "2": 0.2491475335303478 + } + } + }, + { + "thresholds": [ + 0.9988435983657837, + 0.999499273300171, + 0.9998620271682739 + ], + "scores": { + "accuracy": { + "0": 0.9683993379169851, + "1": 0.9916418296737117, + "2": 0.9996706188263316 + }, + "precision": { + "0": 0.9713779728036155, + "1": 0.9792603548847767, + "2": 0.9988940585239571 + }, + "recall": { + "0": 0.15619606172629563, + "1": 0.1834233948558034, + "2": 0.1683170144739328 + }, + "f1": { + "0": 0.20716032616418617, + "1": 0.24917453600280476, + "2": 0.2614486273050826 + }, + "micro_accuracy": { + "0": 0.9705014749262537, + "1": 0.9824943224829674, + "2": 0.9997144488863506 + }, + "coverage": { + "0": 0.19907933621277563, + "1": 0.2001970144729863, + "2": 0.19902250511479883 + } + } + }, + { + "thresholds": [ + 0.9993874788284302, + 0.9997047066688538, + 0.9999080121517181 + ], + "scores": { + "accuracy": { + "0": 0.9734026054590572, + "1": 0.9890064523536952, + "2": 0.9997335081826407 + }, + "precision": { + "0": 0.9766218822426014, + "1": 0.9779898251796572, + "2": 0.9986558482321194 + }, + "recall": { + "0": 0.11601045771952677, + "1": 0.14716721280469058, + "2": 0.14282164383349263 + }, + "f1": { + "0": 0.1574276747905172, + "1": 0.2024921138815404, + "2": 0.22602166338437504 + }, + "micro_accuracy": { + "0": 0.975282038281151, + "1": 0.984552008238929, + "2": 0.9997513983840896 + }, + "coverage": { + "0": 0.14944684397969235, + "1": 0.14715465636129424, + "2": 0.15240206107448662 + } + } + }, + { + "thresholds": [ + 0.9996896624565124, + 0.9998403072357179, + 0.9999478816986085 + ], + "scores": { + "accuracy": { + "0": 0.9735666954768076, + "1": 0.9851212780383991, + "2": 0.9995986261837987 + }, + "precision": { + "0": 0.9762307984584486, + "1": 0.9801817499273991, + "2": 0.99756177540831 + }, + "recall": { + "0": 0.08287248268135407, + "1": 0.10181907018837157, + "2": 0.10147293482047917 + }, + "f1": { + "0": 0.11537168947420108, + "1": 0.1447058301405982, + "2": 0.16249847102038203 + }, + "micro_accuracy": { + "0": 0.9773798303487277, + "1": 0.9902818270165209, + "2": 0.9996181748759069 + }, + "coverage": { + "0": 0.10049632492233083, + "1": 0.09746533303023415, + "2": 0.09922709706751534 + } + } + }, + { + "thresholds": [ + 0.9998803675174713, + 0.9999271392822265, + 0.999975073337555 + ], + "scores": { + "accuracy": { + "0": 0.984, + "1": 0.9857723577235772, + "2": 0.9997667910447762 + }, + "precision": { + "0": 0.9865591397849464, + "1": 0.9838709677419355, + "2": 0.9999384842519685 + }, + "recall": { + "0": 0.04411898815251362, + "1": 0.057582958130658946, + "2": 0.06258298773516474 + }, + "f1": { + "0": 0.06412087465442835, + "1": 0.0844458044292747, + "2": 0.1037415985418921 + }, + "micro_accuracy": { + "0": 0.9918864097363083, + "1": 0.9981460882461994, + "2": 0.99962852897474 + }, + "coverage": { + "0": 0.04669621883761461, + "1": 0.05109115708115481, + "2": 0.050996438584526786 + } + } + }, + { + "thresholds": [ + 0.9999982118606568, + 0.9999982118606568, + 0.9999992847442628 + ], + "scores": { + "accuracy": { + "0": null, + "1": null, + "2": 1.0 + }, + "precision": { + "0": null, + "1": null, + "2": 1.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 9.089093550847099e-05 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.00018147404100256836 + }, + "micro_accuracy": { + "0": null, + "1": null, + "2": 1.0 + }, + "coverage": { + "0": 0.0, + "1": 0.0, + "2": 7.577479730241721e-05 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": null, + "1": null, + "2": null + }, + "precision": { + "0": null, + "1": null, + "2": null + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": null, + "1": null, + "2": null + }, + "coverage": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + } + } + } + ] + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "full_zero": { + "accuracy": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "precision": { + "0": 0.26342704573380454, + "1": 0.3189366087734117, + "2": 0.27535126159560075 + }, + "recall": { + "0": 0.7124755690715492, + "1": 0.8053483819748223, + "2": 0.8105098078966045 + }, + "f1": { + "0": 0.25428952382168724, + "1": 0.32041240991084785, + "2": 0.28044633693466975 + }, + "micro_accuracy": { + "0": 0.7078274215552524, + "1": 0.7936903137789905, + "2": 0.9296896316507504 + }, + "theilU": { + "0": 0.928300449968092, + "1": 0.9269683891259273, + "2": 0.848717056770075 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7361279236851337, + "1": 0.8078113869042769, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2738542317578795, + "1": 0.32216140875960464, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7361279236851337, + "1": 0.8078113869042769, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.26625840334333606, + "1": 0.3235133592367779, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.8202555545797839, + "1": 0.7939833671169038, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9324282979117112, + "1": 0.9278762362942725, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8950879514853453, + "1": 0.9579612101608337, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7274246435276156, + "1": 0.7455458647985177, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5957207471891266, + "1": 0.6805239272946587, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.536222132076529, + "1": 0.6035241537526418, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.969125054412039, + "1": 0.9077473241972592, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9324282979117112, + "1": 0.9278762362942725, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7061122332484412, + "1": 0.7575349991475174, + "2": 0.7305827081912556 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7431928073366078, + "1": 0.8356042367797194, + "2": 0.8492252662006303 + }, + "precision": { + "0": 0.44283216408639003, + "1": 0.47899556907578955, + "2": 0.3398730861115349 + }, + "recall": { + "0": 0.7431928073366078, + "1": 0.8356042367797194, + "2": 0.8492252662006303 + }, + "f1": { + "0": 0.4024595628388436, + "1": 0.4663674702082115, + "2": 0.34745500035047533 + }, + "micro_accuracy": { + "0": 0.7084757347915243, + "1": 0.7911825017088175, + "2": 0.9284005468215994 + }, + "theilU": { + "0": 0.954259253906316, + "1": 0.9534771364475659, + "2": 0.8586883764262561 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9087050351179481, + "1": 0.973462276709025, + "2": 0.9994922429367045 + }, + "precision": { + "0": 0.8482813983760845, + "1": 0.8843100424805983, + "2": 0.9029309874313405 + }, + "recall": { + "0": 0.6176015410523515, + "1": 0.7189420501301624, + "2": 0.7032656378963092 + }, + "f1": { + "0": 0.601488158405302, + "1": 0.7145410434590399, + "2": 0.7261852919766372 + }, + "micro_accuracy": { + "0": 0.8334935127342624, + "1": 0.9085598741855763, + "2": 0.9974648536529154 + }, + "theilU": { + "0": 0.954259253906316, + "1": 0.9534771364475659, + "2": 0.8586883764262561 + }, + "coverage": { + "0": 0.7112098427887902, + "1": 0.7605946684894054, + "2": 0.741455912508544 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0166451707482337, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7135733255087736, + "1": 0.8053167755502332, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361528, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077689582662398, + "1": 0.7939833671169038, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9999810563006744, + "1": 0.9999810563006744, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0225094985216856, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7136102579991642, + "1": 0.8053345126744323, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.26888116867259654, + "1": 0.3225856596586061, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592921813345108, + "1": 0.3234888906935371, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7078360046985714, + "1": 0.7940284934828736, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9998863378040463, + "1": 0.9999242252026976, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7154068545364011, + "1": 0.8066214784413376, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2735851339877319, + "1": 0.32479638848141157, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135168562526097, + "1": 0.8052716015282977, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2633110843139634, + "1": 0.32553059221159353, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7097693506098719, + "1": 0.7950561541963879, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9970826703038569, + "1": 0.9985602788512541, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7217586913025288, + "1": 0.8100011144830764, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2806641421279727, + "1": 0.32977259794213715, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7133346973623459, + "1": 0.8051354843772913, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2686130308855364, + "1": 0.3297199460975378, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7132840411914179, + "1": 0.7981023872577971, + "2": 0.9298325376979617 + }, + "coverage": { + "0": 0.9915321664014549, + "1": 0.9942979465029931, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.0918381661176681 + ], + "scores": { + "accuracy": { + "0": 0.7281971166083666, + "1": 0.8211596640434917, + "2": 0.8107109063197128 + }, + "precision": { + "0": 0.2912107679074111, + "1": 0.3350508616470955, + "2": 0.2753411448936671 + }, + "recall": { + "0": 0.7123636129432008, + "1": 0.8037733528980473, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2766754154991814, + "1": 0.3334172654852787, + "2": 0.28049956989146435 + }, + "micro_accuracy": { + "0": 0.7177591683511406, + "1": 0.8021659957830171, + "2": 0.9298677679687796 + }, + "coverage": { + "0": 0.9840304614685156, + "1": 0.9882927938167766, + "2": 0.9999621126013488 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7339701051859209, + "1": 0.8272389675168235, + "2": 0.8107343235819404 + }, + "precision": { + "0": 0.3018591319207022, + "1": 0.34633642849694746, + "2": 0.2753686397410408 + }, + "recall": { + "0": 0.7119125033357695, + "1": 0.8032023946505402, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2855034576590097, + "1": 0.3434322393181366, + "2": 0.28051980246178837 + }, + "micro_accuracy": { + "0": 0.7224431983546441, + "1": 0.8066103264644594, + "2": 0.9299206183809181 + }, + "coverage": { + "0": 0.9763393195423202, + "1": 0.9818140486474198, + "2": 0.999905281503372 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7394872554926166, + "1": 0.8316607829745173, + "2": 0.8114460906616722 + }, + "precision": { + "0": 0.31097177261475584, + "1": 0.3553276116660215, + "2": 0.2755653428632906 + }, + "recall": { + "0": 0.7109638550029029, + "1": 0.8023190248903622, + "2": 0.8104259307636924 + }, + "f1": { + "0": 0.292312895442343, + "1": 0.3508185508474658, + "2": 0.28070516788949856 + }, + "micro_accuracy": { + "0": 0.7269278898795558, + "1": 0.8112807958343048, + "2": 0.9304741861479249 + }, + "coverage": { + "0": 0.9688565583087065, + "1": 0.9749943168902023, + "2": 0.9991475335303478 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7452474918961705, + "1": 0.8378513950372982, + "2": 0.8127040233150439 + }, + "precision": { + "0": 0.3203662679717986, + "1": 0.3639662340510054, + "2": 0.28105675795028584 + }, + "recall": { + "0": 0.7100814488038172, + "1": 0.8011202967026021, + "2": 0.8102936343247459 + }, + "f1": { + "0": 0.2993489243985061, + "1": 0.357806660653504, + "2": 0.28597475756208096 + }, + "micro_accuracy": { + "0": 0.7311162772370858, + "1": 0.8155567728304249, + "2": 0.9314285714285714 + }, + "coverage": { + "0": 0.9615442903690232, + "1": 0.9683261347275895, + "2": 0.9978593619762067 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7481635566642026, + "1": 0.8408583755377148, + "2": 0.8147720580176724 + }, + "precision": { + "0": 0.33086660145486885, + "1": 0.3727895277165683, + "2": 0.28169910113589186 + }, + "recall": { + "0": 0.7083700228288919, + "1": 0.7998002397778846, + "2": 0.8100238466034935 + }, + "f1": { + "0": 0.30679701064976345, + "1": 0.3647895367339863, + "2": 0.28645950036895657 + }, + "micro_accuracy": { + "0": 0.735162173964826, + "1": 0.819370593564142, + "2": 0.9329363418439176 + }, + "coverage": { + "0": 0.9543456846252937, + "1": 0.9619231643555354, + "2": 0.9957187239524135 + } + } + }, + { + "thresholds": [ + 0.17741721794009208, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7501504682372294, + "1": 0.8439244930369613, + "2": 0.8177545500583719 + }, + "precision": { + "0": 0.338471701858713, + "1": 0.38025551623525655, + "2": 0.28277232493972526 + }, + "recall": { + "0": 0.7075812151832255, + "1": 0.7982677235188925, + "2": 0.8096836601224761 + }, + "f1": { + "0": 0.3123133286828766, + "1": 0.3704947464877397, + "2": 0.2872011317152052 + }, + "micro_accuracy": { + "0": 0.7381846510327195, + "1": 0.823100255744335, + "2": 0.9355300586090376 + }, + "coverage": { + "0": 0.9483594756384026, + "1": 0.9555391376828067, + "2": 0.992289914374479 + } + } + }, + { + "thresholds": [ + 0.18, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7505482335001089, + "1": 0.84841801995001, + "2": 0.82096462189951 + }, + "precision": { + "0": 0.338861844732852, + "1": 0.3894846242647861, + "2": 0.3004988096817156 + }, + "recall": { + "0": 0.707442106286529, + "1": 0.796194773322834, + "2": 0.8089263562614329 + }, + "f1": { + "0": 0.3124796799287409, + "1": 0.37797069871756794, + "2": 0.30434782501482033 + }, + "micro_accuracy": { + "0": 0.7384446221511396, + "1": 0.8268946801293052, + "2": 0.9376855736260368 + }, + "coverage": { + "0": 0.9475638402667272, + "1": 0.9493445480033341, + "2": 0.9889179358945215 + } + } + }, + { + "thresholds": [ + 0.2, + 0.20620039030909534, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7549549197088121, + "1": 0.8492134406177841, + "2": 0.8233930296461522 + }, + "precision": { + "0": 0.35218684797873306, + "1": 0.3935520754689149, + "2": 0.3072001792259708 + }, + "recall": { + "0": 0.7051558431304843, + "1": 0.7960161352250787, + "2": 0.808076625725409 + }, + "f1": { + "0": 0.3229475992554557, + "1": 0.38153619836286884, + "2": 0.31063797938220206 + }, + "micro_accuracy": { + "0": 0.7421694027595931, + "1": 0.8279460269865068, + "2": 0.9404070326626399 + }, + "coverage": { + "0": 0.9404599530196257, + "1": 0.9476585587633554, + "2": 0.9848071531408653 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.759781483157454, + "1": 0.8576466485897288, + "2": 0.8292540641410173 + }, + "precision": { + "0": 0.36486940957075936, + "1": 0.4021365583914975, + "2": 0.3148179280878986 + }, + "recall": { + "0": 0.7028600809985364, + "1": 0.7937900404114935, + "2": 0.8070714320386277 + }, + "f1": { + "0": 0.3327557381008877, + "1": 0.3885716054204484, + "2": 0.31747240135235766 + }, + "micro_accuracy": { + "0": 0.7458800129891217, + "1": 0.8307887018361525, + "2": 0.9432492509906253 + }, + "coverage": { + "0": 0.9333939531711752, + "1": 0.942979465029931, + "2": 0.9800522846101387 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7639614686211269, + "1": 0.8638938156419015, + "2": 0.8323222602465634 + }, + "precision": { + "0": 0.3746518205725823, + "1": 0.41437508362734893, + "2": 0.3166908332665429 + }, + "recall": { + "0": 0.7013874616900879, + "1": 0.7919720507755309, + "2": 0.8062429901012375 + }, + "f1": { + "0": 0.33982557035852734, + "1": 0.39885331221215237, + "2": 0.31859094405331667 + }, + "micro_accuracy": { + "0": 0.7491365392082728, + "1": 0.8341825387197218, + "2": 0.9458808913735538 + }, + "coverage": { + "0": 0.9269341517011442, + "1": 0.9369174812457377, + "2": 0.9759036144578314 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7692021797356665, + "1": 0.87035768388788, + "2": 0.8345828461626078 + }, + "precision": { + "0": 0.385110592153362, + "1": 0.42690399109403965, + "2": 0.319030308675881 + }, + "recall": { + "0": 0.6973963676410317, + "1": 0.789890028394428, + "2": 0.8051291899084394 + }, + "f1": { + "0": 0.34717732058898326, + "1": 0.4088950201797339, + "2": 0.3199881820405873 + }, + "micro_accuracy": { + "0": 0.7525107013500164, + "1": 0.8376640553464239, + "2": 0.9487149464317077 + }, + "coverage": { + "0": 0.9205122376297643, + "1": 0.9309881033568235, + "2": 0.9707319845419413 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.771618993687329, + "1": 0.8723543370982486, + "2": 0.8382416110843092 + }, + "precision": { + "0": 0.39410665229086783, + "1": 0.4409289256135193, + "2": 0.333151436869522 + }, + "recall": { + "0": 0.6960191130015355, + "1": 0.7879049358691609, + "2": 0.8042581721596772 + }, + "f1": { + "0": 0.35400391666857906, + "1": 0.42098277997242933, + "2": 0.3333683820535288 + }, + "micro_accuracy": { + "0": 0.7558129895967174, + "1": 0.8409630660879535, + "2": 0.9514054965303642 + }, + "coverage": { + "0": 0.9141092672577101, + "1": 0.9252860498598167, + "2": 0.9663938773963779 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7769960332563189, + "1": 0.8744761886845657, + "2": 0.8408557591738733 + }, + "precision": { + "0": 0.4060637790691401, + "1": 0.4510948825098404, + "2": 0.33582318659567545 + }, + "recall": { + "0": 0.6940909188904745, + "1": 0.7856560922021604, + "2": 0.8027640430676763 + }, + "f1": { + "0": 0.36245196865392665, + "1": 0.4288860683340336, + "2": 0.33503020016046964 + }, + "micro_accuracy": { + "0": 0.7589591512822654, + "1": 0.8439992580226303, + "2": 0.9537095376860676 + }, + "coverage": { + "0": 0.9071000985072365, + "1": 0.9191293475789952, + "2": 0.9621126013487914 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7805300855897349, + "1": 0.8768207344273474, + "2": 0.8424451698403806 + }, + "precision": { + "0": 0.4105520897983795, + "1": 0.4543069919433308, + "2": 0.3393223569901384 + }, + "recall": { + "0": 0.6893138132416223, + "1": 0.7805089981269553, + "2": 0.7983149286313321 + }, + "f1": { + "0": 0.3646675363038223, + "1": 0.429893957370439, + "2": 0.3365015159795294 + }, + "micro_accuracy": { + "0": 0.7618606998654105, + "1": 0.8466115222754317, + "2": 0.9562566802581054 + }, + "coverage": { + "0": 0.9008107903311359, + "1": 0.9137872243691748, + "2": 0.9570735773281807 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7839195821012004, + "1": 0.8830257472781262, + "2": 0.8442749008380109 + }, + "precision": { + "0": 0.4158189863765381, + "1": 0.46129826442321076, + "2": 0.3407272274264858 + }, + "recall": { + "0": 0.6868118605426153, + "1": 0.777684401615449, + "2": 0.7933409740227914 + }, + "f1": { + "0": 0.3681460212342982, + "1": 0.43482824882058013, + "2": 0.33640507774840056 + }, + "micro_accuracy": { + "0": 0.7643782822293749, + "1": 0.8493919355848056, + "2": 0.9589834421270498 + }, + "coverage": { + "0": 0.8945972569523376, + "1": 0.9081420019701447, + "2": 0.9518830037129651 + } + } + }, + { + "thresholds": [ + 0.34057822525501247, + 0.36, + 0.3746608167886734 + ], + "scores": { + "accuracy": { + "0": 0.7839454070579771, + "1": 0.8850077714421728, + "2": 0.8461872289403207 + }, + "precision": { + "0": 0.4159144245779362, + "1": 0.46996516016061624, + "2": 0.3427957166089875 + }, + "recall": { + "0": 0.6867397718084247, + "1": 0.7749884202065629, + "2": 0.7923438922358974 + }, + "f1": { + "0": 0.36815181692659316, + "1": 0.4402238813031856, + "2": 0.3373518837755704 + }, + "micro_accuracy": { + "0": 0.7644404905636398, + "1": 0.8521667926429831, + "2": 0.9606527253480336 + }, + "coverage": { + "0": 0.8943509888611048, + "1": 0.9022505114798818, + "2": 0.9484541941350307 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7855585734920851, + "1": 0.8870601320263148, + "2": 0.846704577115119 + }, + "precision": { + "0": 0.42410579198162157, + "1": 0.4778113262868447, + "2": 0.3441532770030813 + }, + "recall": { + "0": 0.6825445052852879, + "1": 0.7726960288150291, + "2": 0.7919513013262884 + }, + "f1": { + "0": 0.3732541513620813, + "1": 0.4457039700263973, + "2": 0.33793985793123993 + }, + "micro_accuracy": { + "0": 0.7671814342391536, + "1": 0.854509365035792, + "2": 0.9612984519380775 + }, + "coverage": { + "0": 0.888118511782981, + "1": 0.897116768962643, + "2": 0.947147078881564 + } + } + }, + { + "thresholds": [ + 0.38, + 0.3974795162677765, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7891699506446412, + "1": 0.8928088007027862, + "2": 0.8911536130216103 + }, + "precision": { + "0": 0.4325444997545349, + "1": 0.4858279965133085, + "2": 0.34724511309566586 + }, + "recall": { + "0": 0.6806544956452801, + "1": 0.7712834939939591, + "2": 0.7907016281827942 + }, + "f1": { + "0": 0.3786685031095155, + "1": 0.45085307227098625, + "2": 0.3395397819049904 + }, + "micro_accuracy": { + "0": 0.770081615120275, + "1": 0.8570518537393299, + "2": 0.9638951431328402 + }, + "coverage": { + "0": 0.8820186406001363, + "1": 0.8921345760400091, + "2": 0.9423353792528605 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7950331522220915, + "1": 0.8930853818581228, + "2": 0.8926287817301746 + }, + "precision": { + "0": 0.442080607920921, + "1": 0.4870202069124637, + "2": 0.34912024280495113 + }, + "recall": { + "0": 0.677886106390055, + "1": 0.7712146258837445, + "2": 0.7895101684485681 + }, + "f1": { + "0": 0.38395365420794386, + "1": 0.4517975899903134, + "2": 0.34043052848949945 + }, + "micro_accuracy": { + "0": 0.7726869578384926, + "1": 0.8574676980618837, + "2": 0.9659887302324642 + }, + "coverage": { + "0": 0.8757103887247102, + "1": 0.8914147154656361, + "2": 0.9379593847086459 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8012361453335349, + "1": 0.9014839621048408, + "2": 0.8942312593957857 + }, + "precision": { + "0": 0.45131483302593933, + "1": 0.4979598328306612, + "2": 0.35798665607260177 + }, + "recall": { + "0": 0.6731865176039974, + "1": 0.7684428559225457, + "2": 0.7879801015067978 + }, + "f1": { + "0": 0.38893645094491863, + "1": 0.45916219628773275, + "2": 0.3479535683375828 + }, + "micro_accuracy": { + "0": 0.7751269146131555, + "1": 0.8600761432176927, + "2": 0.9682791113277284 + }, + "coverage": { + "0": 0.8694589679472607, + "1": 0.8856937182693037, + "2": 0.9328256421914072 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.8044480111038569, + "1": 0.9053172319660167, + "2": 0.8955699999386315 + }, + "precision": { + "0": 0.457680545644752, + "1": 0.5038640500845135, + "2": 0.3604783978550451 + }, + "recall": { + "0": 0.6710198431112988, + "1": 0.7642268727261265, + "2": 0.7863542302268336 + }, + "f1": { + "0": 0.39312487249420525, + "1": 0.46282334528052266, + "2": 0.34906403870030717 + }, + "micro_accuracy": { + "0": 0.7780825525004937, + "1": 0.862358281522277, + "2": 0.9699269596441833 + }, + "coverage": { + "0": 0.8632833219671138, + "1": 0.8805599757520649, + "2": 0.9285064787451693 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8079224776983499, + "1": 0.907423323474449, + "2": 0.8988943032436549 + }, + "precision": { + "0": 0.46840498611879194, + "1": 0.5092826981387928, + "2": 0.36340273184309035 + }, + "recall": { + "0": 0.6681413216228919, + "1": 0.7617856093278055, + "2": 0.7844534905383678 + }, + "f1": { + "0": 0.4002623663272118, + "1": 0.4663649442480995, + "2": 0.3501414720820841 + }, + "micro_accuracy": { + "0": 0.7808700649896105, + "1": 0.864557865812761, + "2": 0.9717460838185844 + }, + "coverage": { + "0": 0.8569750700916875, + "1": 0.8755588391301053, + "2": 0.9239221035083731 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8114452443246722, + "1": 0.9090670195569455, + "2": 0.9032471820435628 + }, + "precision": { + "0": 0.4759716279292438, + "1": 0.5182645218164755, + "2": 0.3648374994714145 + }, + "recall": { + "0": 0.6639278709764616, + "1": 0.7594273449491095, + "2": 0.7827423163175757 + }, + "f1": { + "0": 0.4035501720427342, + "1": 0.47179298213319654, + "2": 0.3504761460148044 + }, + "micro_accuracy": { + "0": 0.7837639198218262, + "1": 0.8673227232152577, + "2": 0.9732269832436777 + }, + "coverage": { + "0": 0.8505720997196332, + "1": 0.8701030537243313, + "2": 0.9191293475789952 + } + } + }, + { + "thresholds": [ + 0.4948954820632934, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8129358550599816, + "1": 0.9101521106933558, + "2": 0.9094617166328978 + }, + "precision": { + "0": 0.48412787974962296, + "1": 0.5263975111640745, + "2": 0.37486836300271614 + }, + "recall": { + "0": 0.6604023720222549, + "1": 0.7539572680573703, + "2": 0.7807726679065837 + }, + "f1": { + "0": 0.40898817120482334, + "1": 0.4764290992179604, + "2": 0.3586930425801887 + }, + "micro_accuracy": { + "0": 0.7863038894621147, + "1": 0.8696176180563164, + "2": 0.9749311123541965 + }, + "coverage": { + "0": 0.8445480033340911, + "1": 0.8644957187239524, + "2": 0.914355535348943 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8135001913968379, + "1": 0.9123817529190185, + "2": 0.9103279199544886 + }, + "precision": { + "0": 0.48792636238553916, + "1": 0.5359219504624648, + "2": 0.3850326735658165 + }, + "recall": { + "0": 0.6597181768678811, + "1": 0.7498268022644977, + "2": 0.7772056212496301 + }, + "f1": { + "0": 0.4115777679786959, + "1": 0.4824418116040693, + "2": 0.366614532231499 + }, + "micro_accuracy": { + "0": 0.7873474067579416, + "1": 0.8722906458305744, + "2": 0.9765166340508806 + }, + "coverage": { + "0": 0.842634689702205, + "1": 0.8582632416458286, + "2": 0.9099416534060771 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8158344208155098, + "1": 0.9139550659350106, + "2": 0.9158430083356393 + }, + "precision": { + "0": 0.49900237349216514, + "1": 0.5542272154797224, + "2": 0.3950514588014782 + }, + "recall": { + "0": 0.655411664169929, + "1": 0.7459518047294019, + "2": 0.7754630923351656 + }, + "f1": { + "0": 0.41737493852373375, + "1": 0.49664657599625855, + "2": 0.3749393298702557 + }, + "micro_accuracy": { + "0": 0.7908434391606486, + "1": 0.8753004005340453, + "2": 0.9779424075004185 + }, + "coverage": { + "0": 0.8341668561036599, + "1": 0.8513298476926574, + "2": 0.9052057285746761 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5568314939737321, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8203835885086881, + "1": 0.9158805447156358, + "2": 0.9149893034808769 + }, + "precision": { + "0": 0.5156584956201206, + "1": 0.5675878936208083, + "2": 0.39555380125860373 + }, + "recall": { + "0": 0.6507387282060666, + "1": 0.7434397816109488, + "2": 0.7681940485942907 + }, + "f1": { + "0": 0.42865754433758435, + "1": 0.5070718278245269, + "2": 0.3734798339181391 + }, + "micro_accuracy": { + "0": 0.7947057878182612, + "1": 0.8775989794319733, + "2": 0.9793437105595288 + }, + "coverage": { + "0": 0.8251307115253467, + "1": 0.8464234295673259, + "2": 0.9005834659392287 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8245041246357564, + "1": 0.9161721255911156, + "2": 0.9193487474688847 + }, + "precision": { + "0": 0.527735775593821, + "1": 0.5719276708143174, + "2": 0.4092402619495512 + }, + "recall": { + "0": 0.6475941402480345, + "1": 0.7429010183896981, + "2": 0.7662127085090916 + }, + "f1": { + "0": 0.4365241327092934, + "1": 0.509969449815363, + "2": 0.38535740102209437 + }, + "micro_accuracy": { + "0": 0.7981551440424595, + "1": 0.8781766841468334, + "2": 0.9805895039539899 + }, + "coverage": { + "0": 0.817363794801849, + "1": 0.8453057513071153, + "2": 0.89592331590513 + } + } + }, + { + "thresholds": [ + 0.58, + 0.58, + 0.6074856579303741 + ], + "scores": { + "accuracy": { + "0": 0.8276782766335854, + "1": 0.9175943663332026, + "2": 0.9231255831067025 + }, + "precision": { + "0": 0.5345082182433154, + "1": 0.5780046558273265, + "2": 0.4111249044299102 + }, + "recall": { + "0": 0.6431322226048997, + "1": 0.739196289740425, + "2": 0.765343607867457 + }, + "f1": { + "0": 0.43917280118166846, + "1": 0.5134122496454819, + "2": 0.3861143959964363 + }, + "micro_accuracy": { + "0": 0.8004722274172433, + "1": 0.8803087060522634, + "2": 0.9812048397008031 + }, + "coverage": { + "0": 0.8103356823520497, + "1": 0.8394710919148292, + "2": 0.8940100022732439 + } + } + }, + { + "thresholds": [ + 0.6, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8320505820623306, + "1": 0.9248874482864945, + "2": 0.9235275777228764 + }, + "precision": { + "0": 0.5466127629418331, + "1": 0.5847240963354107, + "2": 0.41294211559494315 + }, + "recall": { + "0": 0.6388341968461365, + "1": 0.736542901937428, + "2": 0.763432253128448 + }, + "f1": { + "0": 0.44533364648194634, + "1": 0.5162191739001678, + "2": 0.38623726471563957 + }, + "micro_accuracy": { + "0": 0.8038109180204005, + "1": 0.8830389415535702, + "2": 0.9821158958001063 + }, + "coverage": { + "0": 0.8023035538379935, + "1": 0.8333143896340077, + "2": 0.8908274607865424 + } + } + }, + { + "thresholds": [ + 0.6194985747337342, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8347374149124119, + "1": 0.9263855817931299, + "2": 0.925152252639741 + }, + "precision": { + "0": 0.5549309261446816, + "1": 0.5913387861326783, + "2": 0.4258836444091773 + }, + "recall": { + "0": 0.6322797547069895, + "1": 0.7310929186515712, + "2": 0.7597125431557636 + }, + "f1": { + "0": 0.4482571520107697, + "1": 0.5190194278838909, + "2": 0.39536344604778373 + }, + "micro_accuracy": { + "0": 0.8071464351310736, + "1": 0.885593220338983, + "2": 0.9833465164503923 + }, + "coverage": { + "0": 0.7941767068273092, + "1": 0.8270819125558839, + "2": 0.8861294233537925 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8350617627834742, + "1": 0.9325280827738057, + "2": 0.9259987761544274 + }, + "precision": { + "0": 0.557293554776649, + "1": 0.6042510478725724, + "2": 0.44041472978398505 + }, + "recall": { + "0": 0.6322476162880292, + "1": 0.728606654703852, + "2": 0.7576062573194366 + }, + "f1": { + "0": 0.4499845925016404, + "1": 0.5269865801747221, + "2": 0.4056535861196955 + }, + "micro_accuracy": { + "0": 0.8072774994034837, + "1": 0.8877176796217277, + "2": 0.9845720793313135 + }, + "coverage": { + "0": 0.7939304387360764, + "1": 0.8213040842615746, + "2": 0.8816208229142987 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8391599515104731, + "1": 0.9339293023093996, + "2": 0.9267553828248155 + }, + "precision": { + "0": 0.5720678203089301, + "1": 0.6128943086510181, + "2": 0.4427599237998884 + }, + "recall": { + "0": 0.6273584799907261, + "1": 0.725833258922429, + "2": 0.7555238762157156 + }, + "f1": { + "0": 0.4568985818717488, + "1": 0.5321080178481364, + "2": 0.4061892991686389 + }, + "micro_accuracy": { + "0": 0.8100081955358435, + "1": 0.8898312961844124, + "2": 0.9855476344782891 + }, + "coverage": { + "0": 0.7858983102220202, + "1": 0.8152231567780556, + "2": 0.8769038417822232 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8416213774432921, + "1": 0.9371646913144945, + "2": 0.9280640424521848 + }, + "precision": { + "0": 0.5841379631248658, + "1": 0.6315831952962271, + "2": 0.4545105213814647 + }, + "recall": { + "0": 0.6228563044755979, + "1": 0.7222963246340339, + "2": 0.7534899200283318 + }, + "f1": { + "0": 0.4631243831262261, + "1": 0.5443775167284013, + "2": 0.415702510205127 + }, + "micro_accuracy": { + "0": 0.8126020321142272, + "1": 0.8921708601521358, + "2": 0.9865624660805383 + }, + "coverage": { + "0": 0.7774683640221263, + "1": 0.8093695536864439, + "2": 0.8726415094339622 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8473405210744432, + "1": 0.9392482138768081, + "2": 0.9298139404573997 + }, + "precision": { + "0": 0.6035118439421646, + "1": 0.6474183095508496, + "2": 0.4885059775865586 + }, + "recall": { + "0": 0.6180262989092915, + "1": 0.715647013523098, + "2": 0.7514138171417587 + }, + "f1": { + "0": 0.47311313063104304, + "1": 0.55409259513012, + "2": 0.4457704580303461 + }, + "micro_accuracy": { + "0": 0.8152637154189146, + "1": 0.8945120800302001, + "2": 0.9877883607130374 + }, + "coverage": { + "0": 0.7689815867242555, + "1": 0.8029097522164128, + "2": 0.8671667803288626 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8505915688318719, + "1": 0.9426783214354663, + "2": 0.9317399849170638 + }, + "precision": { + "0": 0.6229833054302747, + "1": 0.6655388641391287, + "2": 0.5140834989196863 + }, + "recall": { + "0": 0.6132590872112189, + "1": 0.7116307660915959, + "2": 0.7479442633520913 + }, + "f1": { + "0": 0.4831400861370421, + "1": 0.5658965325793259, + "2": 0.46763288242891465 + }, + "micro_accuracy": { + "0": 0.8182021912350598, + "1": 0.8968569321182993, + "2": 0.9888285356145405 + }, + "coverage": { + "0": 0.7607789649162688, + "1": 0.7961847389558233, + "2": 0.8614268394332045 + } + } + }, + { + "thresholds": [ + 0.72, + 0.723375940322876, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8545458227282784, + "1": 0.942957054254891, + "2": 0.9357534435042484 + }, + "precision": { + "0": 0.6391575337096764, + "1": 0.6678135935421345, + "2": 0.5148871198386059 + }, + "recall": { + "0": 0.6091834507392115, + "1": 0.7110863196012656, + "2": 0.7456663176727382 + }, + "f1": { + "0": 0.49145384680819854, + "1": 0.5670810916467267, + "2": 0.4671378311167504 + }, + "micro_accuracy": { + "0": 0.8211693548387097, + "1": 0.897107871164475, + "2": 0.9898444587030113 + }, + "coverage": { + "0": 0.7516859892399788, + "1": 0.7951807228915663, + "2": 0.8561983784193378 + } + } + }, + { + "thresholds": [ + 0.7349455654621124, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8555596144418682, + "1": 0.9447583415775558, + "2": 0.933147567003428 + }, + "precision": { + "0": 0.648779580251861, + "1": 0.6826588841262298, + "2": 0.5460424260185787 + }, + "recall": { + "0": 0.6051174032724297, + "1": 0.7084118880658226, + "2": 0.7394220424679174 + }, + "f1": { + "0": 0.4940932399586941, + "1": 0.5748512500859088, + "2": 0.4905550825247364 + }, + "micro_accuracy": { + "0": 0.8232646834477498, + "1": 0.8991477613731845, + "2": 0.9907314573446516 + }, + "coverage": { + "0": 0.7450556944760173, + "1": 0.7890997954080473, + "2": 0.850250056831098 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8551461752725971, + "1": 0.9457854684303053, + "2": 0.9337082289767283 + }, + "precision": { + "0": 0.6509242394755482, + "1": 0.6996374620219, + "2": 0.5492507000441765 + }, + "recall": { + "0": 0.6038571452918515, + "1": 0.7017571169333634, + "2": 0.7361775734923548 + }, + "f1": { + "0": 0.4949008075985547, + "1": 0.5840199967087703, + "2": 0.4900286801540286 + }, + "micro_accuracy": { + "0": 0.8239391697073307, + "1": 0.9011971694455215, + "2": 0.9912979119474287 + }, + "coverage": { + "0": 0.7424225202697583, + "1": 0.781692808971736, + "2": 0.8446427218307191 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8133293718099595 + ], + "scores": { + "accuracy": { + "0": 0.8567967846688476, + "1": 0.9467700731334758, + "2": 0.9570242618960957 + }, + "precision": { + "0": 0.6659177044601013, + "1": 0.7160208776416441, + "2": 0.5494842196858498 + }, + "recall": { + "0": 0.5974140900658498, + "1": 0.6963803016230707, + "2": 0.7335512328004075 + }, + "f1": { + "0": 0.5005653573143374, + "1": 0.5936670682814554, + "2": 0.48906739615312067 + }, + "micro_accuracy": { + "0": 0.8267610729236653, + "1": 0.9033882560015646, + "2": 0.9917247288552166 + }, + "coverage": { + "0": 0.7330832765022354, + "1": 0.7749109646131697, + "2": 0.8401341213912252 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8594768293784096, + "1": 0.9497414606795416, + "2": 0.9598160525239752 + }, + "precision": { + "0": 0.6801592462530972, + "1": 0.7248035533158547, + "2": 0.5509860155230463 + }, + "recall": { + "0": 0.5909385003050688, + "1": 0.6877655661261414, + "2": 0.7323471609196228 + }, + "f1": { + "0": 0.5053238559110679, + "1": 0.5932836839342758, + "2": 0.48942952556410124 + }, + "micro_accuracy": { + "0": 0.8295656724228153, + "1": 0.9053086419753087, + "2": 0.992153936598381 + }, + "coverage": { + "0": 0.7240281882245965, + "1": 0.7672198226869743, + "2": 0.8378040463741759 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8630110118936432, + "1": 0.9547028365067901, + "2": 0.9606917539054599 + }, + "precision": { + "0": 0.6912492840401537, + "1": 0.7431233700468567, + "2": 0.5545916355348101 + }, + "recall": { + "0": 0.5832717108841252, + "1": 0.6785525969288249, + "2": 0.7242883656484974 + }, + "f1": { + "0": 0.5055056505568667, + "1": 0.6003488312802274, + "2": 0.4876785529022798 + }, + "micro_accuracy": { + "0": 0.8324223932077475, + "1": 0.9075235501361785, + "2": 0.993035098536229 + }, + "coverage": { + "0": 0.7139880275820262, + "1": 0.7581457907100099, + "2": 0.8295635371675381 + } + } + }, + { + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9671792491234769 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.5686706031318407 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.7191850515166035 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.4949138393543726 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.9939372982941448 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.8217776767447147 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.869498450987878, + "1": 0.9560018453273437, + "2": 0.9675506137914426 + }, + "precision": { + "0": 0.7115847925239849, + "1": 0.7609893314312659, + "2": 0.6017328732151986 + }, + "recall": { + "0": 0.5730995625813546, + "1": 0.6678520880306139, + "2": 0.7132880725116423 + }, + "f1": { + "0": 0.5106737303649882, + "1": 0.6055166444307686, + "2": 0.5209196214268884 + }, + "micro_accuracy": { + "0": 0.834947005043286, + "1": 0.9094083708689711, + "2": 0.9946406934476653 + }, + "coverage": { + "0": 0.702413427294082, + "1": 0.7486171099492309, + "2": 0.8129878002576343 + } + } + }, + { + "thresholds": [ + 0.8306558251380922, + 0.8454969972372055, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8697590647610641, + "1": 0.9564807989833612, + "2": 0.976522296069616 + }, + "precision": { + "0": 0.7216050336631377, + "1": 0.7730099057714284, + "2": 0.6077983288636156 + }, + "recall": { + "0": 0.5674980482953075, + "1": 0.6654440868469829, + "2": 0.707140267165422 + }, + "f1": { + "0": 0.512671309418482, + "1": 0.6110728137192303, + "2": 0.519696439204633 + }, + "micro_accuracy": { + "0": 0.8362399673513807, + "1": 0.9101366106343, + "2": 0.9954190181586342 + }, + "coverage": { + "0": 0.6962756687125862, + "1": 0.7460407668409487, + "2": 0.8022467227400166 + } + } + }, + { + "thresholds": [ + 0.84, + 0.86, + 0.9111802697181702 + ], + "scores": { + "accuracy": { + "0": 0.8703402493615706, + "1": 0.9619788342035192, + "2": 0.9881819993607475 + }, + "precision": { + "0": 0.7235824950939453, + "1": 0.7834797660890495, + "2": 0.6259209120985145 + }, + "recall": { + "0": 0.5601275514377435, + "1": 0.6589928190641673, + "2": 0.7039713154234601 + }, + "f1": { + "0": 0.5091976680444896, + "1": 0.6134685776060603, + "2": 0.5336614440730103 + }, + "micro_accuracy": { + "0": 0.836978294871443, + "1": 0.9120496130387986, + "2": 0.9957622074613718 + }, + "coverage": { + "0": 0.6903652345229977, + "1": 0.7392210350837312, + "2": 0.7956922027733576 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8765362932344806, + "1": 0.9637579279788103, + "2": 0.9899730159540868 + }, + "precision": { + "0": 0.747093985215198, + "1": 0.8000482067246265, + "2": 0.627521757632179 + }, + "recall": { + "0": 0.5512424853531099, + "1": 0.6511869248645938, + "2": 0.700927092092323 + }, + "f1": { + "0": 0.5153313559250967, + "1": 0.6195048776940024, + "2": 0.5331282606436634 + }, + "micro_accuracy": { + "0": 0.8396556061834345, + "1": 0.9147315043557405, + "2": 0.9959246296207508 + }, + "coverage": { + "0": 0.6776729559748428, + "1": 0.7284799575661135, + "2": 0.7902174736682579 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8830208634588658, + "1": 0.9652212597814974, + "2": 0.9928076230580295 + }, + "precision": { + "0": 0.7620127130591278, + "1": 0.8156814860848794, + "2": 0.6294274446280421 + }, + "recall": { + "0": 0.5445108063190227, + "1": 0.642752102433535, + "2": 0.6855264120436473 + }, + "f1": { + "0": 0.5170218108656535, + "1": 0.6247933936292172, + "2": 0.5265848249923473 + }, + "micro_accuracy": { + "0": 0.842766757865937, + "1": 0.9168716443174906, + "2": 0.9967651815909425 + }, + "coverage": { + "0": 0.6646965219368038, + "1": 0.7162423278017731, + "2": 0.7730165946806092 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8883325240808758, + "1": 0.9661292023820532, + "2": 0.9930361990459136 + }, + "precision": { + "0": 0.7804330307655294, + "1": 0.8308755942637392, + "2": 0.6927578760132808 + }, + "recall": { + "0": 0.5299738208913127, + "1": 0.6287467301361546, + "2": 0.6641347649986203 + }, + "f1": { + "0": 0.5149058087966454, + "1": 0.6232311666966236, + "2": 0.5676737474327977 + }, + "micro_accuracy": { + "0": 0.8456088173547935, + "1": 0.9190962099125365, + "2": 0.9974476257865609 + }, + "coverage": { + "0": 0.6496931120709252, + "1": 0.7017503978176859, + "2": 0.749621126013488 + } + } + }, + { + "thresholds": [ + 0.9007869422435761, + 0.924729597568512, + 0.9662523120641708 + ], + "scores": { + "accuracy": { + "0": 0.8885312629120675, + "1": 0.9661699543515949, + "2": 0.9931839191357568 + }, + "precision": { + "0": 0.7805944969928401, + "1": 0.830765775145992, + "2": 0.715989791885142 + }, + "recall": { + "0": 0.5298358756742398, + "1": 0.6256403761924226, + "2": 0.659351951962697 + }, + "f1": { + "0": 0.5149139363519448, + "1": 0.6209799951986819, + "2": 0.5839830325420262 + }, + "micro_accuracy": { + "0": 0.84582384871301, + "1": 0.9198641304347827, + "2": 0.9977708883138179 + }, + "coverage": { + "0": 0.6491248010911571, + "1": 0.6971281351822384, + "2": 0.7393536409790104 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.970800906419754 + ], + "scores": { + "accuracy": { + "0": 0.8950164643210189, + "1": 0.9695368593184023, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.8040699749652211, + "1": 0.8582022686291958, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5153800078565562, + "1": 0.6111746156068716, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5137528881782403, + "1": 0.627273015752276, + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "0": 0.8492311388755406, + "1": 0.9224784662406224, + "2": 0.997951563553389 + }, + "coverage": { + "0": 0.6307494127453209, + "1": 0.681783738728499, + "2": 0.7305827081912556 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.8977603303553258, + "1": 0.9707026911621689, + "2": 0.9951993157465505 + }, + "precision": { + "0": 0.8348855245957182, + "1": 0.8875780882814134, + "2": 0.7677883833828869 + }, + "recall": { + "0": 0.49411409803457207, + "1": 0.5869876804314287, + "2": 0.6368870643575197 + }, + "f1": { + "0": 0.5111539192223238, + "1": 0.6268523151354871, + "2": 0.5910540442970046 + }, + "micro_accuracy": { + "0": 0.8531831690911935, + "1": 0.9263471667534873, + "2": 0.9983422903130932 + }, + "coverage": { + "0": 0.6055353489429416, + "1": 0.6545805864969311, + "2": 0.7085132984769266 + } + } + }, + { + "thresholds": [ + 0.9447115302085878, + 0.9661324799060822, + 0.9839736998081207 + ], + "scores": { + "accuracy": { + "0": 0.8976383094079616, + "1": 0.9721080173326774, + "2": 0.9952787863073226 + }, + "precision": { + "0": 0.8358835320411591, + "1": 0.8961374238668409, + "2": 0.7964153490876714 + }, + "recall": { + "0": 0.4870561307521863, + "1": 0.5793435512925595, + "2": 0.627652475953288 + }, + "f1": { + "0": 0.506078319145354, + "1": 0.6259992137233813, + "2": 0.6063101216401618 + }, + "micro_accuracy": { + "0": 0.853749683303775, + "1": 0.9279531268401837, + "2": 0.9985280488469715 + }, + "coverage": { + "0": 0.5981662499052816, + "1": 0.6434038038948245, + "2": 0.6949685534591195 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9926552206277847 + ], + "scores": { + "accuracy": { + "0": 0.8988945216145116, + "1": 0.9779900667987546, + "2": 0.9952077780141686 + }, + "precision": { + "0": 0.8617502110752365, + "1": 0.9170934717021288, + "2": 0.9062000485062581 + }, + "recall": { + "0": 0.46771055824514823, + "1": 0.5463025853809537, + "2": 0.5700390457871931 + }, + "f1": { + "0": 0.5011615066874043, + "1": 0.6065006991411882, + "2": 0.6263345006018707 + }, + "micro_accuracy": { + "0": 0.8572375617355563, + "1": 0.9325594423005104, + "2": 0.9990024352316405 + }, + "coverage": { + "0": 0.5715124649541562, + "1": 0.6086989467303175, + "2": 0.6456581041145715 + } + } + }, + { + "thresholds": [ + 0.9707445681095125, + 0.9835098385810853, + 0.9965948343276978 + ], + "scores": { + "accuracy": { + "0": 0.9062367456555975, + "1": 0.9782877846703276, + "2": 0.9959301023906816 + }, + "precision": { + "0": 0.8729027936547273, + "1": 0.9271442767909179, + "2": 0.9061013748239709 + }, + "recall": { + "0": 0.4513502052516364, + "1": 0.5347767459011784, + "2": 0.5320584791639112 + }, + "f1": { + "0": 0.49053571651818084, + "1": 0.6018785904537931, + "2": 0.5946945567639036 + }, + "micro_accuracy": { + "0": 0.8609734973150874, + "1": 0.9342619979009636, + "2": 0.9992047587237968 + }, + "coverage": { + "0": 0.5468098810335682, + "1": 0.5956467378949761, + "2": 0.5955330756990225 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9922655999660492, + 0.9982456207275392 + ], + "scores": { + "accuracy": { + "0": 0.9134660997939574, + "1": 0.9826328737370472, + "2": 0.9954052001661279 + }, + "precision": { + "0": 0.8978459042096237, + "1": 0.9437141620064265, + "2": 0.9056736601442275 + }, + "recall": { + "0": 0.425753841130749, + "1": 0.4831577994331249, + "2": 0.49812373013877775 + }, + "f1": { + "0": 0.47584327989955616, + "1": 0.559693934735415, + "2": 0.566351757760869 + }, + "micro_accuracy": { + "0": 0.8648708242989968, + "1": 0.940019494534568, + "2": 0.9992400953334946 + }, + "coverage": { + "0": 0.5154770023490187, + "1": 0.5441767068273092, + "2": 0.5484390391755702 + } + } + }, + { + "thresholds": [ + 0.9834887981414796, + 0.9964078664779664, + 0.9991312026977539 + ], + "scores": { + "accuracy": { + "0": 0.9129446757501628, + "1": 0.9825866793510077, + "2": 0.9954384327178303 + }, + "precision": { + "0": 0.9059183818231211, + "1": 0.9494286397894636, + "2": 0.9039414443226458 + }, + "recall": { + "0": 0.4124590564989005, + "1": 0.43902847454827276, + "2": 0.4497605067478926 + }, + "f1": { + "0": 0.4669122471494267, + "1": 0.5217599353693266, + "2": 0.5267491567047328 + }, + "micro_accuracy": { + "0": 0.8666641392121924, + "1": 0.9464175177963479, + "2": 0.9993084104967918 + }, + "coverage": { + "0": 0.49967795711146473, + "1": 0.48965674016822003, + "2": 0.49304766234750325 + } + } + }, + { + "thresholds": [ + 0.9916833281517028, + 0.9981183141469955, + 0.9995197594165803 + ], + "scores": { + "accuracy": { + "0": 0.926169279286835, + "1": 0.9849759073340263, + "2": 0.9948076243417509 + }, + "precision": { + "0": 0.924682739663025, + "1": 0.9557793197217371, + "2": 0.8984634941014342 + }, + "recall": { + "0": 0.36507175330192254, + "1": 0.3948965425591936, + "2": 0.4089800345815027 + }, + "f1": { + "0": 0.4271564748504445, + "1": 0.47811269852583044, + "2": 0.4887704088370563 + }, + "micro_accuracy": { + "0": 0.8732581003676156, + "1": 0.9507478081485302, + "2": 0.9993146284000857 + }, + "coverage": { + "0": 0.4431689020231871, + "1": 0.440781995908161, + "2": 0.4422406607562325 + } + } + }, + { + "thresholds": [ + 0.9955784201622011, + 0.9990368843078613, + 0.9997327446937562 + ], + "scores": { + "accuracy": { + "0": 0.9275458872885384, + "1": 0.9798781104441883, + "2": 0.9946341928707643 + }, + "precision": { + "0": 0.9257710707706125, + "1": 0.9603319105524699, + "2": 0.9406313587469497 + }, + "recall": { + "0": 0.3165966609987137, + "1": 0.3509594144678274, + "2": 0.37693654672629645 + }, + "f1": { + "0": 0.3787483978491254, + "1": 0.4358170533687341, + "2": 0.4760749136264469 + }, + "micro_accuracy": { + "0": 0.8799345272482187, + "1": 0.9549637275427236, + "2": 0.9993735845419939 + }, + "coverage": { + "0": 0.3934985223914526, + "1": 0.3890846404485868, + "2": 0.3931385921042661 + } + } + }, + { + "thresholds": [ + 0.9977071881294252, + 0.9994589567184449, + 0.9998481810092927 + ], + "scores": { + "accuracy": { + "0": 0.9384159399033912, + "1": 0.9805885361061143, + "2": 0.9992966806444485 + }, + "precision": { + "0": 0.9390249748525807, + "1": 0.9621872182903556, + "2": 0.9869590191507204 + }, + "recall": { + "0": 0.2806288674725043, + "1": 0.314098829570648, + "2": 0.34784865301516155 + }, + "f1": { + "0": 0.34246227887214714, + "1": 0.39848508974898844, + "2": 0.4652975312609765 + }, + "micro_accuracy": { + "0": 0.8862540860989528, + "1": 0.9595881737598414, + "2": 0.9996180081855389 + }, + "coverage": { + "0": 0.3419148291278321, + "1": 0.344074410850951, + "2": 0.34714329014169887 + } + } + }, + { + "thresholds": [ + 0.9988190412521363, + 0.9997101068496703, + 0.9999167561531067 + ], + "scores": { + "accuracy": { + "0": 0.9456232300240067, + "1": 0.9792949755884731, + "2": 0.999363876742606 + }, + "precision": { + "0": 0.9494363565119665, + "1": 0.9590992651373006, + "2": 0.9849631659902182 + }, + "recall": { + "0": 0.24235821495883889, + "1": 0.2665116226367584, + "2": 0.30954243184957136 + }, + "f1": { + "0": 0.30280863316490564, + "1": 0.3442207655646623, + "2": 0.4231762105109771 + }, + "micro_accuracy": { + "0": 0.8949527841094106, + "1": 0.9625408209003009, + "2": 0.9996807355852116 + }, + "coverage": { + "0": 0.2908805031446541, + "1": 0.2958437523679624, + "2": 0.296677275138289 + } + } + }, + { + "thresholds": [ + 0.9993969202041626, + 0.9998453855514526, + 0.9999547004699708 + ], + "scores": { + "accuracy": { + "0": 0.9471891418619082, + "1": 0.9862804406675553, + "2": 0.9993156445541669 + }, + "precision": { + "0": 0.951261364815079, + "1": 0.967035459961284, + "2": 0.9906737176877808 + }, + "recall": { + "0": 0.20740260924304382, + "1": 0.22009317132975698, + "2": 0.2773595069453509 + }, + "f1": { + "0": 0.2655844930571704, + "1": 0.2940482346934407, + "2": 0.3863323028181745 + }, + "micro_accuracy": { + "0": 0.9037233213896245, + "1": 0.9660385959580611, + "2": 0.9996934865900383 + }, + "coverage": { + "0": 0.24319921194210806, + "1": 0.24933697052360385, + "2": 0.24721527619913616 + } + } + }, + { + "thresholds": [ + 0.9997055649757385, + 0.9999301433563232, + 0.999976396560669 + ], + "scores": { + "accuracy": { + "0": 0.9433599930968911, + "1": 0.9836367652405504, + "2": 0.9991329584353785 + }, + "precision": { + "0": 0.9508442964593203, + "1": 0.9642508158796917, + "2": 0.9884047532947605 + }, + "recall": { + "0": 0.17020661886717497, + "1": 0.17625585238523653, + "2": 0.23947973598180503 + }, + "f1": { + "0": 0.22019243800285607, + "1": 0.24064765170914199, + "2": 0.3405196572670941 + }, + "micro_accuracy": { + "0": 0.9159769008662175, + "1": 0.9669291338582677, + "2": 0.9996179925508547 + }, + "coverage": { + "0": 0.19682503599302872, + "1": 0.19246798514813973, + "2": 0.19835947563840267 + } + } + }, + { + "thresholds": [ + 0.9998770654201508, + 0.9999669015407562, + 0.9999889135360718 + ], + "scores": { + "accuracy": { + "0": 0.951936016083128, + "1": 0.9827473504361541, + "2": 0.9989433324510965 + }, + "precision": { + "0": 0.9597348554806537, + "1": 0.969444156000138, + "2": 0.9969027613973804 + }, + "recall": { + "0": 0.12528622061406092, + "1": 0.13887605411986617, + "2": 0.15452418754703273 + }, + "f1": { + "0": 0.16880314061956103, + "1": 0.19247687991191748, + "2": 0.2411561617389106 + }, + "micro_accuracy": { + "0": 0.9376461418550273, + "1": 0.9687172774869109, + "2": 0.9996154832094335 + }, + "coverage": { + "0": 0.14582859740850193, + "1": 0.14472986284761688, + "2": 0.14779874213836477 + } + } + }, + { + "thresholds": [ + 0.9999603986740113, + 0.999985933303833, + 0.9999958276748656 + ], + "scores": { + "accuracy": { + "0": 0.96026819882481, + "1": 0.9789204097714735, + "2": 0.9994850047592663 + }, + "precision": { + "0": 0.9653640228021032, + "1": 0.977760736196319, + "2": 0.9928211439287389 + }, + "recall": { + "0": 0.08795181857286369, + "1": 0.09794033395134712, + "2": 0.10167231075686439 + }, + "f1": { + "0": 0.12132978367438589, + "1": 0.13925883750030774, + "2": 0.16583707999265668 + }, + "micro_accuracy": { + "0": 0.9502784407319014, + "1": 0.9656177156177156, + "2": 0.999589995899959 + }, + "coverage": { + "0": 0.09524892020913844, + "1": 0.09752216412821095, + "2": 0.09240736531029779 + } + } + }, + { + "thresholds": [ + 0.9999903321266175, + 0.9999959468841552, + 0.9999985694885254 + ], + "scores": { + "accuracy": { + "0": 0.9683098591549296, + "1": 0.9881345796745664, + "2": 0.9990880410135069 + }, + "precision": { + "0": 0.976823708206687, + "1": 0.9833333333333333, + "2": 0.9718771566597653 + }, + "recall": { + "0": 0.049670262265187864, + "1": 0.048793069399277786, + "2": 0.07062629466483594 + }, + "f1": { + "0": 0.07126029473242274, + "1": 0.07507472894752276, + "2": 0.11612967010875166 + }, + "micro_accuracy": { + "0": 0.9455987910842463, + "1": 0.9506781750924784, + "2": 0.9992421371731717 + }, + "coverage": { + "0": 0.05014397211487459, + "1": 0.046090020459195274, + "2": 0.04999242252026976 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.9444444444444444, + "1": 0.9682539682539684, + "2": 1.0 + }, + "precision": { + "0": 0.9444444444444444, + "1": 0.9545454545454546, + "2": 1.0 + }, + "recall": { + "0": 0.001252177557345573, + "1": 0.0019495329536034565, + "2": 0.01639557694868904 + }, + "f1": { + "0": 0.002346743016790488, + "1": 0.003650574960165601, + "2": 0.02703065176536078 + }, + "micro_accuracy": { + "0": 0.8979591836734694, + "1": 0.9298245614035088, + "2": 1.0 + }, + "coverage": { + "0": 0.0009282412669546109, + "1": 0.0010797908615594453, + "2": 0.005304235811169205 + } + } + } + ] + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "full_zero": { + "accuracy": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "precision": { + "0": 0.26343028004895147, + "1": 0.3188298295664697, + "2": 0.27563597431734277 + }, + "recall": { + "0": 0.7123551106111988, + "1": 0.805001260196705, + "2": 0.8106416408810809 + }, + "f1": { + "0": 0.2543210234001847, + "1": 0.3212342539755369, + "2": 0.28076917349510716 + }, + "micro_accuracy": { + "0": 0.7078444747612551, + "1": 0.7936221009549795, + "2": 0.9298601637107776 + }, + "theilU": { + "0": 0.9282787583085454, + "1": 0.9270081304640697, + "2": 0.8488811049574605 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812272, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7359438160598023, + "1": 0.8078688889251138, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.27389983335544515, + "1": 0.3230691966641643, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7359438160598023, + "1": 0.8078688889251138, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.266315326129971, + "1": 0.32493422231455543, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.8203214191622025, + "1": 0.7939644230587076, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9323702972359517, + "1": 0.9278920368877236, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8978307906255943, + "1": 0.958350348631966, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7337958308449367, + "1": 0.752504050056499, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5934880337746956, + "1": 0.6766713050103627, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5382986298299348, + "1": 0.6059367197707097, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.9697840827422429, + "1": 0.9086041776638263, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9323702972359517, + "1": 0.9278920368877236, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7026214103802582, + "1": 0.7536514672173072, + "2": 0.7325907403197697 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7430789391063041, + "1": 0.8315920980901614, + "2": 0.8491264519713813 + }, + "precision": { + "0": 0.4435113545221054, + "1": 0.4756659977776627, + "2": 0.3394307665358129 + }, + "recall": { + "0": 0.7430789391063041, + "1": 0.8315920980901614, + "2": 0.8491264519713813 + }, + "f1": { + "0": 0.40300238516178827, + "1": 0.46306039720704983, + "2": 0.3471036479087719 + }, + "micro_accuracy": { + "0": 0.7081339712918661, + "1": 0.7906698564593302, + "2": 0.9282296650717703 + }, + "theilU": { + "0": 0.954116113510863, + "1": 0.953655537431556, + "2": 0.8580508752393747 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9122749701335368, + "1": 0.973864726625716, + "2": 0.9994937740250923 + }, + "precision": { + "0": 0.8510626577154353, + "1": 0.8845032192436618, + "2": 0.9029315347725212 + }, + "recall": { + "0": 0.6156853061930037, + "1": 0.7124031638615914, + "2": 0.7039240888934983 + }, + "f1": { + "0": 0.6018573695717253, + "1": 0.7095377082146889, + "2": 0.7266095397411778 + }, + "micro_accuracy": { + "0": 0.8340569223347805, + "1": 0.9093990058743787, + "2": 0.9974718455527465 + }, + "theilU": { + "0": 0.954116113510863, + "1": 0.953655537431556, + "2": 0.8580508752393747 + }, + "coverage": { + "0": 0.7084757347915243, + "1": 0.7563226247436774, + "2": 0.7435064935064936 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0167619809508323, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7133948610290463, + "1": 0.8053740989933655, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341, + "1": 0.32445203101159487, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7078257904408283, + "1": 0.7939644230587076, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9999810563006744, + "1": 0.9999810563006744, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0228103883564472, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7134317985455608, + "1": 0.8054160520729053, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689498973570152, + "1": 0.32350860294694506, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.259367654211768, + "1": 0.3249149424364671, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.70789284225683, + "1": 0.7940245912509709, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9998863378040463, + "1": 0.999905281503372, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7152112462522486, + "1": 0.8067081642362355, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2732407257045685, + "1": 0.3257578168981015, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133500057504438, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.263129660580778, + "1": 0.3269914919402833, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7098238881395216, + "1": 0.7950940962209744, + "2": 0.9300409183905433 + }, + "coverage": { + "0": 0.9971395014018337, + "1": 0.9985602788512541, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7216373092458712, + "1": 0.8100811312125765, + "2": 0.8106558790565468 + }, + "precision": { + "0": 0.28070531989226544, + "1": 0.3307290260122494, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7131568167605388, + "1": 0.8052179784983853, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.26871786500526934, + "1": 0.33119161729589486, + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "0": 0.7133958767220131, + "1": 0.7981404919313354, + "2": 0.9300585371398261 + }, + "coverage": { + "0": 0.9914563916041524, + "1": 0.9942979465029931, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.092640534043312 + ], + "scores": { + "accuracy": { + "0": 0.7280194093049356, + "1": 0.821291028647412, + "2": 0.8108694056164214 + }, + "precision": { + "0": 0.29103969529517204, + "1": 0.33607184948501345, + "2": 0.27570151968741496 + }, + "recall": { + "0": 0.7121656982298983, + "1": 0.8038437553212547, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.2765706985441269, + "1": 0.33493208536973024, + "2": 0.28089507183813783 + }, + "micro_accuracy": { + "0": 0.7177507844533851, + "1": 0.8021851638872916, + "2": 0.9300937766410913 + }, + "coverage": { + "0": 0.9840683488671668, + "1": 0.9882927938167766, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7337437577396957, + "1": 0.8273640952318694, + "2": 0.8108901572825726 + }, + "precision": { + "0": 0.3016118217234353, + "1": 0.3471916627910424, + "2": 0.2757254191999838 + }, + "recall": { + "0": 0.7116501305567737, + "1": 0.8032929446988698, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.2853455658783026, + "1": 0.3448609839938559, + "2": 0.2809136063684844 + }, + "micro_accuracy": { + "0": 0.7224485836243694, + "1": 0.8066875048236475, + "2": 0.9301290188128754 + }, + "coverage": { + "0": 0.9763582632416459, + "1": 0.9818140486474198, + "2": 0.999905281503372 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7392829455512485, + "1": 0.8317072301825809, + "2": 0.811530379742219 + }, + "precision": { + "0": 0.3110133662406354, + "1": 0.35634188723499427, + "2": 0.27578901768312203 + }, + "recall": { + "0": 0.7106988817461454, + "1": 0.8023344483782012, + "2": 0.8105817652782349 + }, + "f1": { + "0": 0.29216555837922986, + "1": 0.352373753075415, + "2": 0.2809523161456017 + }, + "micro_accuracy": { + "0": 0.7270238560813453, + "1": 0.8112419367373902, + "2": 0.930647454735046 + }, + "coverage": { + "0": 0.9687807835114041, + "1": 0.9749943168902023, + "2": 0.999185420928999 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7434522917634424, + "1": 0.8377864534991097, + "2": 0.8128150155584857 + }, + "precision": { + "0": 0.32049503487492487, + "1": 0.3645434095994383, + "2": 0.2812999995556893 + }, + "recall": { + "0": 0.7097354850858043, + "1": 0.8010083202839473, + "2": 0.8104476176441149 + }, + "f1": { + "0": 0.2994558327427106, + "1": 0.35831440098258827, + "2": 0.28623588894687346 + }, + "micro_accuracy": { + "0": 0.7310707532303813, + "1": 0.8155392981495246, + "2": 0.9316550860006835 + }, + "coverage": { + "0": 0.9617337273622794, + "1": 0.9684397969235432, + "2": 0.9978404182768811 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7478115129480699, + "1": 0.8408163684650996, + "2": 0.8149719404833623 + }, + "precision": { + "0": 0.3318824250953348, + "1": 0.37279050884588305, + "2": 0.2816910156354521 + }, + "recall": { + "0": 0.7080216578515646, + "1": 0.79984731352252, + "2": 0.8101749404258952 + }, + "f1": { + "0": 0.3077048798636413, + "1": 0.3647851290304528, + "2": 0.28650271535238875 + }, + "micro_accuracy": { + "0": 0.7351872804144584, + "1": 0.8193686863714235, + "2": 0.9331265933564172 + }, + "coverage": { + "0": 0.9543646283246192, + "1": 0.9620178828521634, + "2": 0.9957187239524135 + } + } + }, + { + "thresholds": [ + 0.1771061792969703, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7498534834413028, + "1": 0.8437187068499409, + "2": 0.81867085176141 + }, + "precision": { + "0": 0.3389265462606063, + "1": 0.3803322253419352, + "2": 0.28293281417118965 + }, + "recall": { + "0": 0.7072236748245034, + "1": 0.798220287153605, + "2": 0.8098329027497043 + }, + "f1": { + "0": 0.31252314655185837, + "1": 0.37052304281430637, + "2": 0.28740523930207035 + }, + "micro_accuracy": { + "0": 0.7381351869606904, + "1": 0.8231527191260731, + "2": 0.935667379352474 + }, + "coverage": { + "0": 0.9483973630370539, + "1": 0.9555012502841554, + "2": 0.9923467454724558 + } + } + }, + { + "thresholds": [ + 0.18, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7500283518469476, + "1": 0.8483777723085861, + "2": 0.82129058287655 + }, + "precision": { + "0": 0.3399764116637914, + "1": 0.3900698230576411, + "2": 0.30614323617370987 + }, + "recall": { + "0": 0.7069388289334648, + "1": 0.7963635723215526, + "2": 0.8090155411897573 + }, + "f1": { + "0": 0.31339905672161344, + "1": 0.37852404829773845, + "2": 0.3100900376599778 + }, + "micro_accuracy": { + "0": 0.7384732274963011, + "1": 0.8269641396100657, + "2": 0.9379454364319105 + }, + "coverage": { + "0": 0.9474501780707737, + "1": 0.9492877169053573, + "2": 0.9887853299992423 + } + } + }, + { + "thresholds": [ + 0.2, + 0.20667465552687642, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7548443099009435, + "1": 0.8493215926736324, + "2": 0.8234776904699019 + }, + "precision": { + "0": 0.352804052409931, + "1": 0.393780195383966, + "2": 0.30725628084668355 + }, + "recall": { + "0": 0.7049230797621903, + "1": 0.7961661412822494, + "2": 0.8081725875403748 + }, + "f1": { + "0": 0.32351240752801413, + "1": 0.38180855139350706, + "2": 0.31073427135619536 + }, + "micro_accuracy": { + "0": 0.7421453315072908, + "1": 0.8280915725282415, + "2": 0.9404432132963989 + }, + "coverage": { + "0": 0.9405925589149049, + "1": 0.9474691217700992, + "2": 0.9847692657422141 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7594908566152528, + "1": 0.8578735565866165, + "2": 0.8293627516517791 + }, + "precision": { + "0": 0.365782686268571, + "1": 0.4020873106141575, + "2": 0.3149032896922568 + }, + "recall": { + "0": 0.7028919732322909, + "1": 0.7944982384206007, + "2": 0.807135190947241 + }, + "f1": { + "0": 0.3336533063093199, + "1": 0.38861279598418436, + "2": 0.31757721825160296 + }, + "micro_accuracy": { + "0": 0.7458958176911058, + "1": 0.8308189871637773, + "2": 0.9433437071115149 + }, + "coverage": { + "0": 0.9335265590664545, + "1": 0.9430362961279078, + "2": 0.9800143972114874 + } + } + }, + { + "thresholds": [ + 0.24, + 0.24, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7635693395683111, + "1": 0.8638377769986186, + "2": 0.8324184475643961 + }, + "precision": { + "0": 0.37576730610432946, + "1": 0.41504289383793364, + "2": 0.31679586552656464 + }, + "recall": { + "0": 0.7009253315787347, + "1": 0.791948634930954, + "2": 0.8062489590780243 + }, + "f1": { + "0": 0.34076122787194435, + "1": 0.3994767720039988, + "2": 0.318700764764693 + }, + "micro_accuracy": { + "0": 0.7491722192699178, + "1": 0.8341757308640977, + "2": 0.9459727048591563 + }, + "coverage": { + "0": 0.9268394332045162, + "1": 0.9369932560430401, + "2": 0.9758088959612033 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7692606390055128, + "1": 0.8702905462966479, + "2": 0.8344725068374593 + }, + "precision": { + "0": 0.38542521872654295, + "1": 0.42761964664120394, + "2": 0.318939168594326 + }, + "recall": { + "0": 0.6974018483494486, + "1": 0.7899179876930018, + "2": 0.8051542662357258 + }, + "f1": { + "0": 0.3474564561946686, + "1": 0.40958809993056633, + "2": 0.3199368649618886 + }, + "micro_accuracy": { + "0": 0.7526447947968551, + "1": 0.837626663411061, + "2": 0.9487354617125907 + }, + "coverage": { + "0": 0.9203985754338108, + "1": 0.9310070470561491, + "2": 0.970750928241267 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7725859507641404, + "1": 0.8726259932007965, + "2": 0.8382281099415309 + }, + "precision": { + "0": 0.3945251642393624, + "1": 0.4417248508338098, + "2": 0.33332162039942964 + }, + "recall": { + "0": 0.6959773175027597, + "1": 0.7879785533647826, + "2": 0.8042671639986306 + }, + "f1": { + "0": 0.3543253882660422, + "1": 0.4217432180931911, + "2": 0.3335362017060267 + }, + "micro_accuracy": { + "0": 0.7559125297958338, + "1": 0.8410007575292263, + "2": 0.9515585179376593 + }, + "coverage": { + "0": 0.9139387739637796, + "1": 0.925267106160491, + "2": 0.9663181025990756 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7762104804225579, + "1": 0.8747388079118475, + "2": 0.8409541022849736 + }, + "precision": { + "0": 0.40572263028215255, + "1": 0.4509636491646401, + "2": 0.3364326557863627 + }, + "recall": { + "0": 0.6937886749479651, + "1": 0.7854522072270695, + "2": 0.8029942780367477 + }, + "f1": { + "0": 0.36200012799905856, + "1": 0.4287285044431418, + "2": 0.33548591777898634 + }, + "micro_accuracy": { + "0": 0.7590809399477807, + "1": 0.8440816999525959, + "2": 0.9538616045055335 + }, + "coverage": { + "0": 0.906929605213306, + "1": 0.9191293475789952, + "2": 0.9619989391528377 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.7804208665313092, + "1": 0.8772171194307609, + "2": 0.8425552376088427 + }, + "precision": { + "0": 0.41063391420757483, + "1": 0.45534460063578913, + "2": 0.340136997194161 + }, + "recall": { + "0": 0.6893378801276361, + "1": 0.7805304800338374, + "2": 0.8014728191944541 + }, + "f1": { + "0": 0.36472232984985253, + "1": 0.4307771157453053, + "2": 0.33748500479368804 + }, + "micro_accuracy": { + "0": 0.7617866004962779, + "1": 0.8467295532289831, + "2": 0.956318654131618 + }, + "coverage": { + "0": 0.900848677729787, + "1": 0.9137493369705236, + "2": 0.9571304084261575 + } + } + }, + { + "thresholds": [ + 0.33869456946849824, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.7822079030229553, + "1": 0.8801818500043139, + "2": 0.8441365732795846 + }, + "precision": { + "0": 0.41524731842373147, + "1": 0.4617753798614477, + "2": 0.34052365497632464 + }, + "recall": { + "0": 0.6876369198237797, + "1": 0.7784225678838699, + "2": 0.7934996208700578 + }, + "f1": { + "0": 0.36790025454376546, + "1": 0.43507909693712915, + "2": 0.33638592243828563 + }, + "micro_accuracy": { + "0": 0.7642465666462112, + "1": 0.8494899555666813, + "2": 0.958930276981853 + }, + "coverage": { + "0": 0.8952223990300826, + "1": 0.9081041145714935, + "2": 0.9520345533075699 + } + } + }, + { + "thresholds": [ + 0.34, + 0.36, + 0.37503301501274106 + ], + "scores": { + "accuracy": { + "0": 0.7822974063946339, + "1": 0.8849620912252918, + "2": 0.8462833416106459 + }, + "precision": { + "0": 0.41545092096398484, + "1": 0.4693076258849002, + "2": 0.34333182839304643 + }, + "recall": { + "0": 0.687389030883057, + "1": 0.7755879029968491, + "2": 0.7924203347456775 + }, + "f1": { + "0": 0.36793005311675375, + "1": 0.43961475728672206, + "2": 0.3376777916706937 + }, + "micro_accuracy": { + "0": 0.7644244002625505, + "1": 0.8521403228853945, + "2": 0.9607670795045945 + }, + "coverage": { + "0": 0.8946919754489657, + "1": 0.9023452299765098, + "2": 0.9483215882397514 + } + } + }, + { + "thresholds": [ + 0.36, + 0.38, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.7856610421219459, + "1": 0.8875711682521333, + "2": 0.8469802392232333 + }, + "precision": { + "0": 0.4232094676571947, + "1": 0.4778495331123042, + "2": 0.34423982179188495 + }, + "recall": { + "0": 0.6828882050328446, + "1": 0.7728740302251098, + "2": 0.7921626152902179 + }, + "f1": { + "0": 0.37291943007451384, + "1": 0.4457669655974664, + "2": 0.33809399066346724 + }, + "micro_accuracy": { + "0": 0.7672340244006484, + "1": 0.8544794239986486, + "2": 0.9614553746449575 + }, + "coverage": { + "0": 0.8881563991816321, + "1": 0.8971925437599454, + "2": 0.9470713040842615 + } + } + }, + { + "thresholds": [ + 0.38, + 0.39594480991363523, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.7895340324943902, + "1": 0.8923578497459264, + "2": 0.8903402969413311 + }, + "precision": { + "0": 0.432616469514816, + "1": 0.48464342101464686, + "2": 0.3473456813283844 + }, + "recall": { + "0": 0.6806507883706033, + "1": 0.771884058275359, + "2": 0.7907041081262358 + }, + "f1": { + "0": 0.37871036247198203, + "1": 0.45014676984901103, + "2": 0.3396369640756426 + }, + "micro_accuracy": { + "0": 0.7699527491408935, + "1": 0.8567911714770798, + "2": 0.9638362883447915 + }, + "coverage": { + "0": 0.8820186406001363, + "1": 0.8926271122224748, + "2": 0.9423732666515117 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.7950450193198869, + "1": 0.893055394894665, + "2": 0.8928679951259277 + }, + "precision": { + "0": 0.44145004915870967, + "1": 0.48682206283434654, + "2": 0.3488378149157679 + }, + "recall": { + "0": 0.6780374148341559, + "1": 0.7714837033279205, + "2": 0.7896491609503584 + }, + "f1": { + "0": 0.3835340873656414, + "1": 0.45176847686667926, + "2": 0.3403865455877892 + }, + "micro_accuracy": { + "0": 0.772615184944841, + "1": 0.8573675039313188, + "2": 0.9660722580123998 + }, + "coverage": { + "0": 0.875767219822687, + "1": 0.8914526028642873, + "2": 0.9380351595059483 + } + } + }, + { + "thresholds": [ + 0.42, + 0.42, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8014953206811135, + "1": 0.9011455572341767, + "2": 0.8944244402628663 + }, + "precision": { + "0": 0.45050968074706743, + "1": 0.49590441021494636, + "2": 0.357731316313625 + }, + "recall": { + "0": 0.6732984758302977, + "1": 0.7683326618980545, + "2": 0.7879977075411427 + }, + "f1": { + "0": 0.38847065369687944, + "1": 0.4575424668272323, + "2": 0.3477580179579796 + }, + "micro_accuracy": { + "0": 0.7751655917727035, + "1": 0.8600607408674823, + "2": 0.9683577724521711 + }, + "coverage": { + "0": 0.8694400242479351, + "1": 0.8857316056679548, + "2": 0.9327498673941047 + } + } + }, + { + "thresholds": [ + 0.44, + 0.44, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.804324246118129, + "1": 0.9053463245243778, + "2": 0.8954761019572214 + }, + "precision": { + "0": 0.45855512780971547, + "1": 0.5039378607652643, + "2": 0.3605083083206587 + }, + "recall": { + "0": 0.6705908855776433, + "1": 0.764142845376752, + "2": 0.7864238843787428 + }, + "f1": { + "0": 0.39375624607090726, + "1": 0.4628240029780335, + "2": 0.34909840959853355 + }, + "micro_accuracy": { + "0": 0.7780362551024887, + "1": 0.8623152550394768, + "2": 0.9699510403916769 + }, + "coverage": { + "0": 0.8631886034704858, + "1": 0.8805599757520649, + "2": 0.928620140941123 + } + } + }, + { + "thresholds": [ + 0.46, + 0.46, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.806927045988926, + "1": 0.9070998595508281, + "2": 0.8989869918652388 + }, + "precision": { + "0": 0.4666994134626624, + "1": 0.5093823050893108, + "2": 0.36337438099804525 + }, + "recall": { + "0": 0.6681191552859147, + "1": 0.7618185636611512, + "2": 0.7844860705095039 + }, + "f1": { + "0": 0.39893352112670794, + "1": 0.466472237332488, + "2": 0.3501382750631744 + }, + "micro_accuracy": { + "0": 0.7807319984086991, + "1": 0.8644603071598529, + "2": 0.9717062369295116 + }, + "coverage": { + "0": 0.8571266196862923, + "1": 0.875767219822687, + "2": 0.9239599909070243 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8114795403201085, + "1": 0.9088299343175352, + "2": 0.9033154355994537 + }, + "precision": { + "0": 0.47582644947336944, + "1": 0.5179949315114452, + "2": 0.3648333428051001 + }, + "recall": { + "0": 0.6638326272497753, + "1": 0.759356680196707, + "2": 0.7827012814105415 + }, + "f1": { + "0": 0.40338547823703075, + "1": 0.4715346646448021, + "2": 0.350450437456427 + }, + "micro_accuracy": { + "0": 0.7838205151056056, + "1": 0.8672371744621549, + "2": 0.9733451524459379 + }, + "coverage": { + "0": 0.8502690005304235, + "1": 0.8699704478290521, + "2": 0.9189399105857392 + } + } + }, + { + "thresholds": [ + 0.49522406011819836, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8131985125810017, + "1": 0.9101458380234865, + "2": 0.9070507630394776 + }, + "precision": { + "0": 0.4853266940319181, + "1": 0.5273743814782698, + "2": 0.3750239048221222 + }, + "recall": { + "0": 0.6606467960582939, + "1": 0.7540719468184587, + "2": 0.780832701194339 + }, + "f1": { + "0": 0.410065316356706, + "1": 0.4765459648018024, + "2": 0.3587824510578402 + }, + "micro_accuracy": { + "0": 0.7864545944005743, + "1": 0.8697729464363987, + "2": 0.9749958568114021 + }, + "coverage": { + "0": 0.8444343411381374, + "1": 0.8643631128286732, + "2": 0.914450253845571 + } + } + }, + { + "thresholds": [ + 0.5, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8133431406315472, + "1": 0.9120370020002934, + "2": 0.9104159203753839 + }, + "precision": { + "0": 0.488870495928512, + "1": 0.5360001699088766, + "2": 0.38544476420516655 + }, + "recall": { + "0": 0.659636802643364, + "1": 0.7497994172091164, + "2": 0.7772239165613246 + }, + "f1": { + "0": 0.41171843402205593, + "1": 0.4824481326818766, + "2": 0.3668617961911676 + }, + "micro_accuracy": { + "0": 0.7874359204964475, + "1": 0.8723512272647007, + "2": 0.9765994212312369 + }, + "coverage": { + "0": 0.842539971205577, + "1": 0.8582253542471774, + "2": 0.9099227097067515 + } + } + }, + { + "thresholds": [ + 0.52, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8153853796607643, + "1": 0.9145300809525654, + "2": 0.9160727770931864 + }, + "precision": { + "0": 0.4987396038467206, + "1": 0.5558769751696645, + "2": 0.3951022870331049 + }, + "recall": { + "0": 0.655240680202325, + "1": 0.7462475330743252, + "2": 0.775538241217725 + }, + "f1": { + "0": 0.4172495668263773, + "1": 0.498288881992045, + "2": 0.37499806223346055 + }, + "micro_accuracy": { + "0": 0.7908746110694738, + "1": 0.8753254266705236, + "2": 0.978024737866516 + }, + "coverage": { + "0": 0.8341100250056831, + "1": 0.851348791391983, + "2": 0.9051488974766992 + } + } + }, + { + "thresholds": [ + 0.54, + 0.5573162794113159, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8202354894196735, + "1": 0.9157785993905069, + "2": 0.9150494453035672 + }, + "precision": { + "0": 0.5173863301811525, + "1": 0.568294414066488, + "2": 0.39905183282170725 + }, + "recall": { + "0": 0.6510393255023516, + "1": 0.7432729631793155, + "2": 0.7681305561704497 + }, + "f1": { + "0": 0.43019199509505107, + "1": 0.5072161808807105, + "2": 0.37694491757901133 + }, + "micro_accuracy": { + "0": 0.7946192870096183, + "1": 0.877669337869902, + "2": 0.97946862443991 + }, + "coverage": { + "0": 0.8252443737213003, + "1": 0.8462908236720467, + "2": 0.9005266348412518 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8246344703505881, + "1": 0.9161843564937088, + "2": 0.9194908009007208 + }, + "precision": { + "0": 0.5283244296815983, + "1": 0.5708352400590635, + "2": 0.40904357025412913 + }, + "recall": { + "0": 0.6474767062601254, + "1": 0.7423444494319529, + "2": 0.7661598143186765 + }, + "f1": { + "0": 0.4369698462138334, + "1": 0.5091265918004917, + "2": 0.38524340547274233 + }, + "micro_accuracy": { + "0": 0.7979379054680259, + "1": 0.8780416760026888, + "2": 0.9807379215561899 + }, + "coverage": { + "0": 0.8176100628930818, + "1": 0.8454573009017201, + "2": 0.8959422596044555 + } + } + }, + { + "thresholds": [ + 0.58, + 0.58, + 0.6062131464481354 + ], + "scores": { + "accuracy": { + "0": 0.8274376383805522, + "1": 0.9180150884080034, + "2": 0.9219844207825076 + }, + "precision": { + "0": 0.5334455169098995, + "1": 0.578460057146473, + "2": 0.40951827175125743 + }, + "recall": { + "0": 0.6425741875049275, + "1": 0.7391341990622226, + "2": 0.7654605283779076 + }, + "f1": { + "0": 0.4379589484202672, + "1": 0.5137760873762149, + "2": 0.3852807660654326 + }, + "micro_accuracy": { + "0": 0.8005798592438449, + "1": 0.880472064265728, + "2": 0.9811272796594014 + }, + "coverage": { + "0": 0.8102030764567705, + "1": 0.8395089793134803, + "2": 0.8943509888611048 + } + } + }, + { + "thresholds": [ + 0.6, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.8318500076978149, + "1": 0.924725106405336, + "2": 0.9235989194281718 + }, + "precision": { + "0": 0.5458248808505984, + "1": 0.5859917010945801, + "2": 0.4219990011447766 + }, + "recall": { + "0": 0.6385574329010715, + "1": 0.736499159988166, + "2": 0.7634893266177312 + }, + "f1": { + "0": 0.4446330401242315, + "1": 0.5172855051950217, + "2": 0.39470708140752464 + }, + "micro_accuracy": { + "0": 0.8038252656434475, + "1": 0.8830536989041968, + "2": 0.9821561496416342 + }, + "coverage": { + "0": 0.8022656664393423, + "1": 0.8332575585360309, + "2": 0.8907137985905887 + } + } + }, + { + "thresholds": [ + 0.6193500757217408, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8365708084338256, + "1": 0.9294504152877463, + "2": 0.9251719241831572 + }, + "precision": { + "0": 0.5557179364237996, + "1": 0.5922906136507499, + "2": 0.4264955299639828 + }, + "recall": { + "0": 0.6318684378664445, + "1": 0.7308566051901757, + "2": 0.7598981586682257 + }, + "f1": { + "0": 0.4486169786063067, + "1": 0.5198691864504508, + "2": 0.39566769150613273 + }, + "micro_accuracy": { + "0": 0.8070941271885883, + "1": 0.8855349945034812, + "2": 0.9834099412079103 + }, + "coverage": { + "0": 0.7941577631279836, + "1": 0.8271576873531863, + "2": 0.8860915359551413 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8368951762047117, + "1": 0.9323792253568945, + "2": 0.9259678576739241 + }, + "precision": { + "0": 0.5573096737462295, + "1": 0.6055855100696447, + "2": 0.4411144610364568 + }, + "recall": { + "0": 0.6318218646604747, + "1": 0.7285595317143749, + "2": 0.757823188780079 + }, + "f1": { + "0": 0.44976741304800766, + "1": 0.5280902298398918, + "2": 0.4062108634058074 + }, + "micro_accuracy": { + "0": 0.8072013171395166, + "1": 0.8878047655294905, + "2": 0.9845747309171375 + }, + "coverage": { + "0": 0.7939114950367507, + "1": 0.8212661968629233, + "2": 0.8817723725089035 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8391003901960424, + "1": 0.9339274656951841, + "2": 0.9268284085699229 + }, + "precision": { + "0": 0.5730440719516031, + "1": 0.6128803738519706, + "2": 0.44272558783599386 + }, + "recall": { + "0": 0.6273222466116648, + "1": 0.7259822629803604, + "2": 0.7555024910286355 + }, + "f1": { + "0": 0.4575328877972292, + "1": 0.5321926313773904, + "2": 0.4061591826041261 + }, + "micro_accuracy": { + "0": 0.8099783080260303, + "1": 0.8898336585819162, + "2": 0.9855288451154453 + }, + "coverage": { + "0": 0.7859740850193225, + "1": 0.8154125937713117, + "2": 0.8770743350761536 + } + } + }, + { + "thresholds": [ + 0.66, + 0.68, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8418760645620806, + "1": 0.9366373301191168, + "2": 0.9280709211187287 + }, + "precision": { + "0": 0.585749326188919, + "1": 0.6314766593206947, + "2": 0.45450769269215247 + }, + "recall": { + "0": 0.6228737827879822, + "1": 0.7233650421290828, + "2": 0.7535608412062839 + }, + "f1": { + "0": 0.4642532976239161, + "1": 0.5448991928030186, + "2": 0.4157281455165222 + }, + "micro_accuracy": { + "0": 0.8125350293637449, + "1": 0.8921993119105015, + "2": 0.9865624660805383 + }, + "coverage": { + "0": 0.7773925892248238, + "1": 0.8094074410850951, + "2": 0.8726415094339622 + } + } + }, + { + "thresholds": [ + 0.68, + 0.7000000000000001, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8467921998913034, + "1": 0.9393059078234464, + "2": 0.9298002907285362 + }, + "precision": { + "0": 0.6018362029086355, + "1": 0.6472896830971239, + "2": 0.4768702415515736 + }, + "recall": { + "0": 0.618499057760121, + "1": 0.7156286671982628, + "2": 0.7515516126143819 + }, + "f1": { + "0": 0.47199036999553784, + "1": 0.5539580807175407, + "2": 0.4352122380189852 + }, + "micro_accuracy": { + "0": 0.8151542023844713, + "1": 0.8945840707964602, + "2": 0.9877678512920207 + }, + "coverage": { + "0": 0.7690384178222324, + "1": 0.8027392589224824, + "2": 0.8672614988254906 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8505765431292961, + "1": 0.9426077320386232, + "2": 0.9317370154845029 + }, + "precision": { + "0": 0.6220874914824229, + "1": 0.6653497304193363, + "2": 0.5140701931039222 + }, + "recall": { + "0": 0.6130308866443115, + "1": 0.7117618603304872, + "2": 0.7478033780126322 + }, + "f1": { + "0": 0.482906771719501, + "1": 0.5659081909185883, + "2": 0.46758162541547865 + }, + "micro_accuracy": { + "0": 0.8180346648072517, + "1": 0.8966813369810872, + "2": 0.988829026937878 + }, + "coverage": { + "0": 0.7607031901189665, + "1": 0.796298401151777, + "2": 0.8614647268318557 + } + } + }, + { + "thresholds": [ + 0.72, + 0.7233478188514709, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8527641023249498, + "1": 0.9428025796463384, + "2": 0.935747565760967 + }, + "precision": { + "0": 0.6398161853149689, + "1": 0.6678128417725981, + "2": 0.5297157913073556 + }, + "recall": { + "0": 0.6091218948181332, + "1": 0.7111445780225057, + "2": 0.7456272791923845 + }, + "f1": { + "0": 0.4919561266052118, + "1": 0.5671096501037651, + "2": 0.47978322966676773 + }, + "micro_accuracy": { + "0": 0.8210192205960148, + "1": 0.8970840480274442, + "2": 0.9898887094276169 + }, + "coverage": { + "0": 0.7520080321285141, + "1": 0.7951807228915663, + "2": 0.8561983784193378 + } + } + }, + { + "thresholds": [ + 0.7342727482318878, + 0.74, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.854886409715426, + "1": 0.9446406913435519, + "2": 0.9331121388047589 + }, + "precision": { + "0": 0.6508005185872108, + "1": 0.682396027724621, + "2": 0.5460069993672308 + }, + "recall": { + "0": 0.60524633727997, + "1": 0.7080615854710526, + "2": 0.7395639540293978 + }, + "f1": { + "0": 0.4947735093153466, + "1": 0.5744176692050887, + "2": 0.49061073568146535 + }, + "micro_accuracy": { + "0": 0.8230241423125794, + "1": 0.8990185020757842, + "2": 0.9907102120834076 + }, + "coverage": { + "0": 0.7454345684625293, + "1": 0.789402894597257, + "2": 0.850344775327726 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8559040323213707, + "1": 0.9456410829987761, + "2": 0.9337720804559677 + }, + "precision": { + "0": 0.6525577751953842, + "1": 0.7016948212907842, + "2": 0.5492553753856487 + }, + "recall": { + "0": 0.6039604348976962, + "1": 0.7017802799243268, + "2": 0.7360668873626399 + }, + "f1": { + "0": 0.49510778046787124, + "1": 0.5854273782584912, + "2": 0.4899775053554504 + }, + "micro_accuracy": { + "0": 0.8240802163596469, + "1": 0.9012432445532317, + "2": 0.9913417971378583 + }, + "coverage": { + "0": 0.7424793513677351, + "1": 0.7816738652724105, + "2": 0.8445480033340911 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8138482809066773 + ], + "scores": { + "accuracy": { + "0": 0.8565514221246198, + "1": 0.9467152054730794, + "2": 0.9570008941293794 + }, + "precision": { + "0": 0.665487206634999, + "1": 0.7164905935994884, + "2": 0.549534403655428 + }, + "recall": { + "0": 0.5972797052716972, + "1": 0.6969072724197788, + "2": 0.7337048765827759 + }, + "f1": { + "0": 0.5001589047146829, + "1": 0.594083451913037, + "2": 0.48914702541363786 + }, + "micro_accuracy": { + "0": 0.8268420644561032, + "1": 0.9032329008137233, + "2": 0.991748021554348 + }, + "coverage": { + "0": 0.7329885580056074, + "1": 0.775233007501705, + "2": 0.8402098961885277 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8594425159637977, + "1": 0.9497731296606361, + "2": 0.9584460859992482 + }, + "precision": { + "0": 0.6803796479926846, + "1": 0.7250231448997243, + "2": 0.5510102272412862 + }, + "recall": { + "0": 0.5912552869226927, + "1": 0.6876225545188672, + "2": 0.7316741146348918 + }, + "f1": { + "0": 0.5055427382170709, + "1": 0.5931863584151059, + "2": 0.489199491894374 + }, + "micro_accuracy": { + "0": 0.8294744002302279, + "1": 0.9051758198340577, + "2": 0.9921530494561408 + }, + "coverage": { + "0": 0.7240850193225733, + "1": 0.7671440478896719, + "2": 0.8377093278775479 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8630288507624861, + "1": 0.9548524817476478, + "2": 0.9606842084704642 + }, + "precision": { + "0": 0.6915274520715989, + "1": 0.7451875427736744, + "2": 0.5545822389275297 + }, + "recall": { + "0": 0.5828557765175574, + "1": 0.6785600634730545, + "2": 0.7243886229400459 + }, + "f1": { + "0": 0.5053541561207143, + "1": 0.6018749578408727, + "2": 0.48771913617938517 + }, + "micro_accuracy": { + "0": 0.8323604330290809, + "1": 0.9075462268865567, + "2": 0.9930146555266401 + }, + "coverage": { + "0": 0.713950140183375, + "1": 0.7581268470106842, + "2": 0.8298476926574221 + } + } + }, + { + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9671542034207682 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.5686471940061053 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.7192232247395872 + }, + "f1": { + "0": 0.5099648536812272, + "1": 0.6043210367725153, + "2": 0.49492012335978447 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9938243156051249 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.8220807759339244 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.8695777913019803, + "1": 0.9559818537903364, + "2": 0.9675780257776521 + }, + "precision": { + "0": 0.7115585581709526, + "1": 0.7643505171945459, + "2": 0.6018716109607208 + }, + "recall": { + "0": 0.5733625467504319, + "1": 0.6712888991621954, + "2": 0.7135515603555062 + }, + "f1": { + "0": 0.5108360475147855, + "1": 0.6105340361704961, + "2": 0.5210778540335645 + }, + "micro_accuracy": { + "0": 0.8349106203995794, + "1": 0.9094864659752087, + "2": 0.9947338987790102 + }, + "coverage": { + "0": 0.702602864287338, + "1": 0.7488444343411381, + "2": 0.8129878002576343 + } + } + }, + { + "thresholds": [ + 0.8304834783077241, + 0.8466564118862152, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8700626078235132, + "1": 0.9562166588597012, + "2": 0.9765346357718081 + }, + "precision": { + "0": 0.7209237858478275, + "1": 0.7724817982894848, + "2": 0.6078089642572123 + }, + "recall": { + "0": 0.5680601982894443, + "1": 0.6624414705403012, + "2": 0.7074072356074954 + }, + "f1": { + "0": 0.5132009324373984, + "1": 0.6086201578985313, + "2": 0.519811991675415 + }, + "micro_accuracy": { + "0": 0.8361440539658361, + "1": 0.9102111334129424, + "2": 0.9954662447755555 + }, + "coverage": { + "0": 0.6964461620065167, + "1": 0.7456050617564598, + "2": 0.8022467227400166 + } + } + }, + { + "thresholds": [ + 0.84, + 0.86, + 0.9113053202629089 + ], + "scores": { + "accuracy": { + "0": 0.870807439381201, + "1": 0.9619950870917762, + "2": 0.9881806370371451 + }, + "precision": { + "0": 0.728047202771161, + "1": 0.7833968530381784, + "2": 0.6259214961933744 + }, + "recall": { + "0": 0.5622057558143685, + "1": 0.6588142802816883, + "2": 0.7038532721935533 + }, + "f1": { + "0": 0.5125140208569766, + "1": 0.6133249196210829, + "2": 0.5336202551951297 + }, + "micro_accuracy": { + "0": 0.836876903239966, + "1": 0.9118491184911849, + "2": 0.9957625101176022 + }, + "coverage": { + "0": 0.6905167841176025, + "1": 0.7392589224823823, + "2": 0.7957490338713344 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8767157778954701, + "1": 0.9639422994499816, + "2": 0.9899520627145026 + }, + "precision": { + "0": 0.7470933831005223, + "1": 0.8022760264971416, + "2": 0.6259455850635617 + }, + "recall": { + "0": 0.5511437353778985, + "1": 0.6508768221580731, + "2": 0.7012156530329198 + }, + "f1": { + "0": 0.515267763394556, + "1": 0.6209694519604654, + "2": 0.5324101288359855 + }, + "micro_accuracy": { + "0": 0.8394599278785676, + "1": 0.9146988453136378, + "2": 0.9958535065433105 + }, + "coverage": { + "0": 0.6776729559748428, + "1": 0.7284231264681367, + "2": 0.7903690232628627 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8847851535654307, + "1": 0.9652200616893406, + "2": 0.992808084240924 + }, + "precision": { + "0": 0.763315651819457, + "1": 0.8156816231675286, + "2": 0.6294835758063362 + }, + "recall": { + "0": 0.5443793258364626, + "1": 0.6427151356967854, + "2": 0.6856059888621686 + }, + "f1": { + "0": 0.5177952355850329, + "1": 0.624753431000947, + "2": 0.5266383317737757 + }, + "micro_accuracy": { + "0": 0.842573072759387, + "1": 0.9168143465495807, + "2": 0.9967661325885638 + }, + "coverage": { + "0": 0.6649617337273622, + "1": 0.7162044404031219, + "2": 0.7732439190725164 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8883033919792224, + "1": 0.9661219626084472, + "2": 0.9930330897644929 + }, + "precision": { + "0": 0.7804014626751528, + "1": 0.8284608091834336, + "2": 0.6927585802170017 + }, + "recall": { + "0": 0.529869925872639, + "1": 0.6287727428260098, + "2": 0.6642854244462157 + }, + "f1": { + "0": 0.5147923311450079, + "1": 0.6215733666268982, + "2": 0.5677697524702323 + }, + "micro_accuracy": { + "0": 0.8454966906726535, + "1": 0.9190400345544367, + "2": 0.9974228757674525 + }, + "coverage": { + "0": 0.6497120557702508, + "1": 0.7017314541183602, + "2": 0.7497726756080928 + } + } + }, + { + "thresholds": [ + 0.9003619253635406, + 0.9249056339263916, + 0.966318890452385 + ], + "scores": { + "accuracy": { + "0": 0.888431166825793, + "1": 0.9661617648520878, + "2": 0.9931833312394449 + }, + "precision": { + "0": 0.7805312748143705, + "1": 0.8355510142797448, + "2": 0.7159905461181523 + }, + "recall": { + "0": 0.5297831320812968, + "1": 0.6254696459164157, + "2": 0.6593958573831591 + }, + "f1": { + "0": 0.5148560581051409, + "1": 0.6242263512932396, + "2": 0.5840166810554773 + }, + "micro_accuracy": { + "0": 0.8456062551056133, + "1": 0.919898888315077, + "2": 0.9977710025364454 + }, + "coverage": { + "0": 0.6493142380844131, + "1": 0.696957641888308, + "2": 0.7393915283776616 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.9698503911495209 + ], + "scores": { + "accuracy": { + "0": 0.8949680288662317, + "1": 0.9695416434362019, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.8036647951367848, + "1": 0.8582292321411249, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5152955755914757, + "1": 0.6115176109990221, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5136917017851453, + "1": 0.6277394253978815, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8491257585771796, + "1": 0.9224911763888503, + "2": 0.9979571783202317 + }, + "coverage": { + "0": 0.6305599757520649, + "1": 0.6816511328332197, + "2": 0.7325907403197697 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.8977269936312184, + "1": 0.9705015349409328, + "2": 0.9928229802438632 + }, + "precision": { + "0": 0.8327788512605917, + "1": 0.8874262009098404, + "2": 0.7677890479865929 + }, + "recall": { + "0": 0.4944545944504423, + "1": 0.5867101863471069, + "2": 0.6370307716776455 + }, + "f1": { + "0": 0.5106880857768454, + "1": 0.6265915019453329, + "2": 0.5911347762196182 + }, + "micro_accuracy": { + "0": 0.8529558961526431, + "1": 0.9262195474798912, + "2": 0.9983163633448249 + }, + "coverage": { + "0": 0.6056300674395696, + "1": 0.6547321360915359, + "2": 0.7088542850647874 + } + } + }, + { + "thresholds": [ + 0.9446139454841613, + 0.9658359616994857, + 0.9839341759681702 + ], + "scores": { + "accuracy": { + "0": 0.8976354559313371, + "1": 0.9722220875670287, + "2": 0.9952787020823213 + }, + "precision": { + "0": 0.8358679963173027, + "1": 0.896742873618556, + "2": 0.7964166897977134 + }, + "recall": { + "0": 0.4873935163489439, + "1": 0.5799640461829901, + "2": 0.6278137660248637 + }, + "f1": { + "0": 0.5064991586098891, + "1": 0.6266610526291488, + "2": 0.606429423735434 + }, + "micro_accuracy": { + "0": 0.8535211267605634, + "1": 0.9278065427159332, + "2": 0.998528650445492 + }, + "coverage": { + "0": 0.598526180192468, + "1": 0.6439342274759415, + "2": 0.6952527089490036 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9926248431205751 + ], + "scores": { + "accuracy": { + "0": 0.8988020659563206, + "1": 0.9777074079525111, + "2": 0.9952084513769254 + }, + "precision": { + "0": 0.8617355210345629, + "1": 0.9141349965261888, + "2": 0.9060406925062958 + }, + "recall": { + "0": 0.46771519317829846, + "1": 0.546354721781792, + "2": 0.568569470028998 + }, + "f1": { + "0": 0.5011726074403569, + "1": 0.604802775819381, + "2": 0.6253888420051623 + }, + "micro_accuracy": { + "0": 0.8571570609485302, + "1": 0.9324849880215301, + "2": 0.9990033417365305 + }, + "coverage": { + "0": 0.5715882397514587, + "1": 0.6088694400242479, + "2": 0.6462453587936652 + } + } + }, + { + "thresholds": [ + 0.9707498282194138, + 0.9833930492401123, + 0.9965927124023437 + ], + "scores": { + "accuracy": { + "0": 0.9041524611166658, + "1": 0.9781354290873504, + "2": 0.9959302985873032 + }, + "precision": { + "0": 0.8747566682032913, + "1": 0.9243629890946211, + "2": 0.9061015022886759 + }, + "recall": { + "0": 0.4515233756188578, + "1": 0.5353090464112795, + "2": 0.5322120216455102 + }, + "f1": { + "0": 0.4915196344453004, + "1": 0.6006583644268111, + "2": 0.5948486972105078 + }, + "micro_accuracy": { + "0": 0.8610572259941804, + "1": 0.9342209793765293, + "2": 0.9992052137974885 + }, + "coverage": { + "0": 0.546866712131545, + "1": 0.5961392740774418, + "2": 0.5958740622868833 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9922053903341294, + 0.9982518643140792 + ], + "scores": { + "accuracy": { + "0": 0.9134680874449982, + "1": 0.9826931641207572, + "2": 0.9953998061075107 + }, + "precision": { + "0": 0.897838848703892, + "1": 0.9438338883168258, + "2": 0.9056735935416286 + }, + "recall": { + "0": 0.4255705880380188, + "1": 0.4845031365475568, + "2": 0.4981339316808536 + }, + "f1": { + "0": 0.4756765237545595, + "1": 0.561368904592936, + "2": 0.5663551988760385 + }, + "micro_accuracy": { + "0": 0.864705018000147, + "1": 0.9398713267257868, + "2": 0.9992054993264016 + }, + "coverage": { + "0": 0.5156853830416004, + "1": 0.5447260741077518, + "2": 0.548401151776919 + } + } + }, + { + "thresholds": [ + 0.9833782911300659, + 0.9964023232460022, + 0.9991329908370972 + ], + "scores": { + "accuracy": { + "0": 0.9127889933003995, + "1": 0.982583640893198, + "2": 0.9954386169609984 + }, + "precision": { + "0": 0.9037761212359212, + "1": 0.949428703607106, + "2": 0.9039412780170919 + }, + "recall": { + "0": 0.41259437473357397, + "1": 0.43930089909622216, + "2": 0.45009572471735165 + }, + "f1": { + "0": 0.46615016558295036, + "1": 0.5219507387484761, + "2": 0.5269565621090039 + }, + "micro_accuracy": { + "0": 0.8665025563340276, + "1": 0.9463201454151681, + "2": 0.9993080914856813 + }, + "coverage": { + "0": 0.5002083806925817, + "1": 0.4898272334621505, + "2": 0.492820337955596 + } + } + }, + { + "thresholds": [ + 0.991622605919838, + 0.998111343383789, + 0.9995186567306519 + ], + "scores": { + "accuracy": { + "0": 0.9265521907718223, + "1": 0.9849788165326858, + "2": 0.9948112868705463 + }, + "precision": { + "0": 0.9250628093426638, + "1": 0.9557801188041781, + "2": 0.8984649482877849 + }, + "recall": { + "0": 0.3665708275310541, + "1": 0.39511482207906384, + "2": 0.409339693353794 + }, + "f1": { + "0": 0.42913664891464487, + "1": 0.478303208700939, + "2": 0.4891709355450282 + }, + "micro_accuracy": { + "0": 0.8732238105397909, + "1": 0.9505562953735126, + "2": 0.9993154201608763 + }, + "coverage": { + "0": 0.4439455936955369, + "1": 0.4409903766007426, + "2": 0.4427521406380238 + } + } + }, + { + "thresholds": [ + 0.9955868721008302, + 0.9990381002426147, + 0.9997335314750672 + ], + "scores": { + "accuracy": { + "0": 0.9303506269639643, + "1": 0.979873703253866, + "2": 0.9946343568751175 + }, + "precision": { + "0": 0.9307323155284073, + "1": 0.9603318788803099, + "2": 0.9406314848417875 + }, + "recall": { + "0": 0.3165488921658092, + "1": 0.35088765928060883, + "2": 0.376952435350341 + }, + "f1": { + "0": 0.3801769563181794, + "1": 0.43570862050185327, + "2": 0.4760931491166865 + }, + "micro_accuracy": { + "0": 0.879998073032084, + "1": 0.9546008086122071, + "2": 0.9993736147248723 + }, + "coverage": { + "0": 0.39323331060089417, + "1": 0.38889520345533074, + "2": 0.39315753580359175 + } + } + }, + { + "thresholds": [ + 0.9976853013038636, + 0.9994611501693724, + 0.9998489141464233 + ], + "scores": { + "accuracy": { + "0": 0.9384070111045844, + "1": 0.9805795875434529, + "2": 0.9992972123615242 + }, + "precision": { + "0": 0.9390214129602982, + "1": 0.9621872615602298, + "2": 0.9869588473590027 + }, + "recall": { + "0": 0.28129453423745754, + "1": 0.3137939415028552, + "2": 0.3478352280835123 + }, + "f1": { + "0": 0.34308976666754587, + "1": 0.39811208002674503, + "2": 0.4652961417100612 + }, + "micro_accuracy": { + "0": 0.8858689647552757, + "1": 0.9593872265388218, + "2": 0.9996178204848221 + }, + "coverage": { + "0": 0.3429188451920891, + "1": 0.3437713116617413, + "2": 0.34697279684776844 + } + } + }, + { + "thresholds": [ + 0.9988131999969482, + 0.999712574481964, + 0.9999171137809754 + ], + "scores": { + "accuracy": { + "0": 0.945814330215107, + "1": 0.9792909112704391, + "2": 0.9993653777164007 + }, + "precision": { + "0": 0.9523051310091266, + "1": 0.9590944484739194, + "2": 0.9849629485216465 + }, + "recall": { + "0": 0.24237666257434126, + "1": 0.2662652324148882, + "2": 0.3095777449605491 + }, + "f1": { + "0": 0.30339185182846024, + "1": 0.3439837108522769, + "2": 0.4232941870140969 + }, + "micro_accuracy": { + "0": 0.8949765747006767, + "1": 0.9623307450426747, + "2": 0.9996804499265035 + }, + "coverage": { + "0": 0.2911267712358869, + "1": 0.29519966659089186, + "2": 0.29641206334773057 + } + } + }, + { + "thresholds": [ + 0.9993962049484252, + 0.9998449981212616, + 0.9999548196792604 + ], + "scores": { + "accuracy": { + "0": 0.9471868351250367, + "1": 0.9862852041416424, + "2": 0.9993156445541669 + }, + "precision": { + "0": 0.9512615874277804, + "1": 0.967035459961284, + "2": 0.9906737512044023 + }, + "recall": { + "0": 0.20736178731446436, + "1": 0.22011332416809082, + "2": 0.27753198799411855 + }, + "f1": { + "0": 0.2655225977588522, + "1": 0.2940276386707367, + "2": 0.386503668038708 + }, + "micro_accuracy": { + "0": 0.9035422343324251, + "1": 0.9659177167147411, + "2": 0.9996934631006207 + }, + "coverage": { + "0": 0.24333181783738728, + "1": 0.2495642949155111, + "2": 0.24719633249981057 + } + } + }, + { + "thresholds": [ + 0.999705684185028, + 0.9999300718307496, + 0.999976396560669 + ], + "scores": { + "accuracy": { + "0": 0.9435629698331013, + "1": 0.983635951136766, + "2": 0.9991324132858601 + }, + "precision": { + "0": 0.9510205463718836, + "1": 0.9642508097552444, + "2": 0.9884043593564951 + }, + "recall": { + "0": 0.17074003745241678, + "1": 0.1762585943166468, + "2": 0.2396072655920544 + }, + "f1": { + "0": 0.22098193800429003, + "1": 0.24071821852633785, + "2": 0.3407105854181973 + }, + "micro_accuracy": { + "0": 0.9160489072879561, + "1": 0.9666404251131667, + "2": 0.9996180290297937 + }, + "coverage": { + "0": 0.1967682048950519, + "1": 0.19250587254679094, + "2": 0.19837841933772826 + } + } + }, + { + "thresholds": [ + 0.9998770773410797, + 0.9999672174453736, + 0.9999888360500335 + ], + "scores": { + "accuracy": { + "0": 0.9521354517010403, + "1": 0.9825581953343514, + "2": 0.9989435258358806 + }, + "precision": { + "0": 0.9599033288886845, + "1": 0.9691190692590099, + "2": 0.9969035078821014 + }, + "recall": { + "0": 0.1255202818541267, + "1": 0.1383005318683087, + "2": 0.15452997931754672 + }, + "f1": { + "0": 0.1692454915356679, + "1": 0.19149385953106912, + "2": 0.2411753416551965 + }, + "micro_accuracy": { + "0": 0.9374837535742137, + "1": 0.9685122015219103, + "2": 0.9996155817529472 + }, + "coverage": { + "0": 0.1457528226111995, + "1": 0.144388876259756, + "2": 0.14783662953701598 + } + } + }, + { + "thresholds": [ + 0.99996018409729, + 0.9999860525131226, + 0.9999958276748656 + ], + "scores": { + "accuracy": { + "0": 0.9604752623031971, + "1": 0.978909465020576, + "2": 0.9994873996499771 + }, + "precision": { + "0": 0.9656180796926099, + "1": 0.977760736196319, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08838666887353218, + "1": 0.0978286003384769, + "2": 0.10085893051934469 + }, + "f1": { + "0": 0.12175430091954242, + "1": 0.13909118559469982, + "2": 0.1649098224659093 + }, + "micro_accuracy": { + "0": 0.950426333531628, + "1": 0.9656853187755898, + "2": 0.9995904157280361 + }, + "coverage": { + "0": 0.0955330756990225, + "1": 0.09716223384102447, + "2": 0.09250208380692582 + } + } + }, + { + "thresholds": [ + 0.9999903321266175, + 0.9999958813190459, + 0.9999985694885254 + ], + "scores": { + "accuracy": { + "0": 0.9683098591549296, + "1": 0.9882334581772784, + "2": 0.9990993788819876 + }, + "precision": { + "0": 0.976823708206687, + "1": 0.9834710743801653, + "2": 0.9718771566597653 + }, + "recall": { + "0": 0.04962266720621259, + "1": 0.04894005805982943, + "2": 0.07070741577200587 + }, + "f1": { + "0": 0.07119248593578795, + "1": 0.07533375615776314, + "2": 0.11626553535672922 + }, + "micro_accuracy": { + "0": 0.9451588502269289, + "1": 0.9507793273174734, + "2": 0.9992424242424243 + }, + "coverage": { + "0": 0.05008714101689778, + "1": 0.04618473895582329, + "2": 0.050011366219595364 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.9444444444444444, + "1": 0.9682539682539684, + "2": 1.0 + }, + "precision": { + "0": 0.9444444444444444, + "1": 0.9545454545454546, + "2": 1.0 + }, + "recall": { + "0": 0.001252177557345573, + "1": 0.0019495329536034565, + "2": 0.01638694523768372 + }, + "f1": { + "0": 0.002346743016790488, + "1": 0.003650574960165601, + "2": 0.02701365005451571 + }, + "micro_accuracy": { + "0": 0.8979591836734694, + "1": 0.9298245614035088, + "2": 1.0 + }, + "coverage": { + "0": 0.0009282412669546109, + "1": 0.0010797908615594453, + "2": 0.005247404713192392 + } + } + } + ] + }, + "torch-tta": { + "source": "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "full_zero": { + "accuracy": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "precision": { + "0": 0.3045154257441184, + "1": 0.3505904633143813, + "2": 0.28541955682278985 + }, + "recall": { + "0": 0.7394942213066358, + "1": 0.8303908427754559, + "2": 0.857176291043506 + }, + "f1": { + "0": 0.29354423320754985, + "1": 0.35320899933676164, + "2": 0.2967297720520215 + }, + "micro_accuracy": { + "0": 0.7318724420190996, + "1": 0.8158594815825375, + "2": 0.9476637107776262 + }, + "theilU": { + "0": 0.9406189646961585, + "1": 0.9419385064155936, + "2": 0.8801009206026382 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3001398043754676, + "1": 0.3600905137263135, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.9627590640417357, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.8166841617561862, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7031449724257084, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6655108425187298, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9116055761356989, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.7772978707281958, + "2": 0.7874327498673941 + } + }, + "known_zero": { + "accuracy": { + "0": 0.764004152241647, + "1": 0.833877676837888, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3188318073270972, + "1": 0.35795084878232625, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.764004152241647, + "1": 0.833877676837888, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3101697044824459, + "1": 0.3606630257586462, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.8485114604373408, + "1": 0.8163184117301608, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9441781207808398, + "1": 0.9429838194118607, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.8932655392845691, + "1": 0.9659260346471361, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6940179671454589, + "1": 0.8168602180942144, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.6594677739561563, + "1": 0.7053354552058507, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5535005846842079, + "1": 0.6673916212438911, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.9623646820027063, + "1": 0.9116277936194584, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9441781207808398, + "1": 0.9429838194118607, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7787828225169052, + "1": 0.7772936518460984, + "2": 0.7874327498673941 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.768414983363882, + "1": 0.8538124541139522, + "2": 0.8686121025173176 + }, + "precision": { + "0": 0.4839236475497513, + "1": 0.5172752120633655, + "2": 0.3828841637187067 + }, + "recall": { + "0": 0.768414983363882, + "1": 0.8538124541139522, + "2": 0.8686121025173176 + }, + "f1": { + "0": 0.4421948505193077, + "1": 0.5029817114927149, + "2": 0.39248243176721537 + }, + "micro_accuracy": { + "0": 0.7294941900205059, + "1": 0.8118591934381408, + "2": 0.9458304853041695 + }, + "theilU": { + "0": 0.9589075503757323, + "1": 0.9605194779995736, + "2": 0.8896158193694642 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.8911752669559129, + "1": 0.9779780541665041, + "2": 0.9996369170022905 + }, + "precision": { + "0": 0.8282279025717094, + "1": 0.9266086911891874, + "2": 0.9496721741042599 + }, + "recall": { + "0": 0.6739933965102308, + "1": 0.7404661738439429, + "2": 0.7564679389414893 + }, + "f1": { + "0": 0.6307325978180464, + "1": 0.757396958354487, + "2": 0.794600193920395 + }, + "micro_accuracy": { + "0": 0.8257460248311914, + "1": 0.9128238910847607, + "2": 0.9982769760930433 + }, + "theilU": { + "0": 0.9589075503757323, + "1": 0.9605194779995736, + "2": 0.8896158193694642 + }, + "coverage": { + "0": 0.7845181134654818, + "1": 0.7781954887218046, + "2": 0.793403964456596 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3001398043754676, + "1": 0.3600905137263135, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.0157533306628465, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.7405877461797323, + "1": 0.8313027366509226, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281690904613, + "1": 0.3579258234740001, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405771008914586, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.30013766521767266, + "1": 0.36011285013445765, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.73214488690183, + "1": 0.8163338764066229, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 0.9999621126013488, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.024413613602519, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7407467859198141, + "1": 0.8313972841596273, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3118078626006602, + "1": 0.3579578172656688, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405771008914586, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.300199623162366, + "1": 0.36015750294004456, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.732255864185835, + "1": 0.8164266767715044, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.999810563006744, + "1": 0.9998484504053952, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7424742057770811, + "1": 0.8329750260398557, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3157615393569001, + "1": 0.36006970855406867, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7403188478377138, + "1": 0.8312265272240776, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3032491538432533, + "1": 0.3620353016946325, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7342823475748822, + "1": 0.8176797677110812, + "2": 0.9478669394559369 + }, + "coverage": { + "0": 0.996741683715996, + "1": 0.9982003485640676, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7457570870307209, + "1": 0.8354760082246451, + "2": 0.8579037718989251 + }, + "precision": { + "0": 0.32682481493754706, + "1": 0.3672122795221003, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7399662265840292, + "1": 0.8309638240201127, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.31265021122739517, + "1": 0.3681471314765713, + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "0": 0.7378759506248328, + "1": 0.8206452350553576, + "2": 0.9478848959024002 + }, + "coverage": { + "0": 0.9913995605061756, + "1": 0.9941085095097371, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7492231361469615, + "1": 0.8383511538819259, + "2": 0.85790930585883 + }, + "precision": { + "0": 0.3352577327581519, + "1": 0.3757202291406542, + "2": 0.29052686274604483 + }, + "recall": { + "0": 0.739562943850595, + "1": 0.8300977897887498, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.31935790991122287, + "1": 0.3746622710374591, + "2": 0.3020787866578761 + }, + "micro_accuracy": { + "0": 0.7411057322883049, + "1": 0.8239179125906925, + "2": 0.9479208108364119 + }, + "coverage": { + "0": 0.9861332120936577, + "1": 0.989562021671592, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1001347824931144 + ], + "scores": { + "accuracy": { + "0": 0.7561552074263708, + "1": 0.8463922808087143, + "2": 0.85790930585883 + }, + "precision": { + "0": 0.3481574839858455, + "1": 0.3846236846067464, + "2": 0.29052686274604483 + }, + "recall": { + "0": 0.7386395108370444, + "1": 0.8288434857965126, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.3294680001319352, + "1": 0.3822173704726841, + "2": 0.3020787866578761 + }, + "micro_accuracy": { + "0": 0.7448103908152615, + "1": 0.8272790241274484, + "2": 0.9479208108364119 + }, + "coverage": { + "0": 0.9801091157081154, + "1": 0.9845798287489581, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7614267935706313, + "1": 0.8496113132930823, + "2": 0.8583733297981256 + }, + "precision": { + "0": 0.35868603020807677, + "1": 0.396409872399775, + "2": 0.29061359534512354 + }, + "recall": { + "0": 0.7380565234415434, + "1": 0.8278759419796428, + "2": 0.8578934569901413 + }, + "f1": { + "0": 0.3374338605639821, + "1": 0.3926065498239829, + "2": 0.30213780878952395 + }, + "micro_accuracy": { + "0": 0.7483087091757388, + "1": 0.8310115316152, + "2": 0.9484039730078095 + }, + "coverage": { + "0": 0.9744638933090854, + "1": 0.9790861559445329, + "2": 0.9993938016215806 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7671366906849528, + "1": 0.8543685515114483, + "2": 0.8601144029670225 + }, + "precision": { + "0": 0.36871626782061295, + "1": 0.4078060179550085, + "2": 0.29621104908741475 + }, + "recall": { + "0": 0.7366771700385545, + "1": 0.8271097887099927, + "2": 0.8576928136598218 + }, + "f1": { + "0": 0.34498132480138166, + "1": 0.40236437456703356, + "2": 0.30763682047163704 + }, + "micro_accuracy": { + "0": 0.7515253441802253, + "1": 0.8341729067392785, + "2": 0.9494134619034964 + }, + "coverage": { + "0": 0.9687050087141017, + "1": 0.9739903008259453, + "2": 0.9979919678714859 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.7738918977450888, + "1": 0.8588204942621896, + "2": 0.8617734756933195 + }, + "precision": { + "0": 0.38018908103209725, + "1": 0.4200834962317706, + "2": 0.2969885677059594 + }, + "recall": { + "0": 0.7337925919693249, + "1": 0.8226170484919202, + "2": 0.8573085735067174 + }, + "f1": { + "0": 0.3533428902402474, + "1": 0.41138006081988887, + "2": 0.30807460425871563 + }, + "micro_accuracy": { + "0": 0.7547656050203608, + "1": 0.8373406833997967, + "2": 0.950798782807151 + }, + "coverage": { + "0": 0.9629650678184436, + "1": 0.9690838827006137, + "2": 0.9960597105402743 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7770020080764029, + "1": 0.8649958050622745, + "2": 0.8635129725362596 + }, + "precision": { + "0": 0.38956378171053624, + "1": 0.4282056271857995, + "2": 0.30282594148422204 + }, + "recall": { + "0": 0.7331402258214638, + "1": 0.8216050408641674, + "2": 0.8570594334058912 + }, + "f1": { + "0": 0.360271510745969, + "1": 0.41802758219737846, + "2": 0.31383978666615375 + }, + "micro_accuracy": { + "0": 0.7570917429379089, + "1": 0.8399725004910626, + "2": 0.9522593432562749 + }, + "coverage": { + "0": 0.9583049177843449, + "1": 0.9644237326665152, + "2": 0.9939948473137834 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7784096740195873, + "1": 0.8704319371949272, + "2": 0.865418185811226 + }, + "precision": { + "0": 0.3983941221387625, + "1": 0.44041677282114744, + "2": 0.3037724840274606 + }, + "recall": { + "0": 0.7324496715326255, + "1": 0.8202875908890818, + "2": 0.8565891514649081 + }, + "f1": { + "0": 0.3670854467894437, + "1": 0.4277570575597303, + "2": 0.3144013181680204 + }, + "micro_accuracy": { + "0": 0.7596400262232552, + "1": 0.8426984032999782, + "2": 0.9542569866574913 + }, + "coverage": { + "0": 0.9535689929529438, + "1": 0.9598204137303933, + "2": 0.9910206865196636 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.7804987727883166, + "1": 0.872983097178873, + "2": 0.8671681662490045 + }, + "precision": { + "0": 0.4109980120582559, + "1": 0.4525172801813426, + "2": 0.30684184460202546 + }, + "recall": { + "0": 0.7314632591571847, + "1": 0.8191449161495307, + "2": 0.8558209180850981 + }, + "f1": { + "0": 0.3769584151416559, + "1": 0.4384568551778127, + "2": 0.31618659303690344 + }, + "micro_accuracy": { + "0": 0.7626830779067676, + "1": 0.8455115236621842, + "2": 0.9562616248969339 + }, + "coverage": { + "0": 0.9480753201485186, + "1": 0.9551034325983178, + "2": 0.9879328635295901 + } + } + }, + { + "thresholds": [ + 0.22111147120594973, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7806307394798084, + "1": 0.8751219507882727, + "2": 0.8742924729576368 + }, + "precision": { + "0": 0.41190501118588246, + "1": 0.46179961531661334, + "2": 0.3132934298450209 + }, + "recall": { + "0": 0.7313936205550358, + "1": 0.8178386311416572, + "2": 0.8550266993401295 + }, + "f1": { + "0": 0.3777176858846957, + "1": 0.44574480314483783, + "2": 0.3224241798918152 + }, + "micro_accuracy": { + "0": 0.7628880404581526, + "1": 0.8482377800813332, + "2": 0.958622813263794 + }, + "coverage": { + "0": 0.9476964461620065, + "1": 0.9502917329696143, + "2": 0.9843335606577253 + } + } + }, + { + "thresholds": [ + 0.24, + 0.25371578335762024, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7824357304053218, + "1": 0.877225231806333, + "2": 0.8758028231601421 + }, + "precision": { + "0": 0.42037656216113684, + "1": 0.46720974120506376, + "2": 0.31449909852466756 + }, + "recall": { + "0": 0.7304212518653747, + "1": 0.8166576999779861, + "2": 0.8540023697254082 + }, + "f1": { + "0": 0.38397524369647545, + "1": 0.44940142369388764, + "2": 0.3229578106452858 + }, + "micro_accuracy": { + "0": 0.7653795154096517, + "1": 0.8498270311343958, + "2": 0.9606544077879935 + }, + "coverage": { + "0": 0.9429036902326287, + "1": 0.9473554595741457, + "2": 0.9807532014851861 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7841371999847402, + "1": 0.8778755675810899, + "2": 0.8771015014563739 + }, + "precision": { + "0": 0.42602671244910834, + "1": 0.47067938103791307, + "2": 0.32197953451314504 + }, + "recall": { + "0": 0.7291464067082633, + "1": 0.8164485611767577, + "2": 0.8533853505207756 + }, + "f1": { + "0": 0.38752279647680893, + "1": 0.4522955062477177, + "2": 0.3299809946326001 + }, + "micro_accuracy": { + "0": 0.7675855801272342, + "1": 0.8505367299527358, + "2": 0.9625336770492121 + }, + "coverage": { + "0": 0.9379972721072971, + "1": 0.9458967947260741, + "2": 0.9773622793059028 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7927627567251719, + "1": 0.8883167833650782, + "2": 0.8783769548082113 + }, + "precision": { + "0": 0.433024914209946, + "1": 0.4772280927070614, + "2": 0.3364799675281957 + }, + "recall": { + "0": 0.7254766185960972, + "1": 0.8137255105434333, + "2": 0.8522221066252991 + }, + "f1": { + "0": 0.3912400622845851, + "1": 0.4567752605872105, + "2": 0.3436403847978977 + }, + "micro_accuracy": { + "0": 0.7701354892441448, + "1": 0.8530086536526464, + "2": 0.9645310037550829 + }, + "coverage": { + "0": 0.9325793741001743, + "1": 0.9413124194892779, + "2": 0.9736493142380844 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7977662351755508, + "1": 0.8935825243962093, + "2": 0.8798696397659453 + }, + "precision": { + "0": 0.4433320225709998, + "1": 0.48579629719950146, + "2": 0.3392200362634125 + }, + "recall": { + "0": 0.7218506916959294, + "1": 0.811113093517867, + "2": 0.851094509933296 + }, + "f1": { + "0": 0.39884102111681236, + "1": 0.46354820344018083, + "2": 0.3450321766053871 + }, + "micro_accuracy": { + "0": 0.7724988765880959, + "1": 0.8552969486178796, + "2": 0.9667389308802562 + }, + "coverage": { + "0": 0.9274456315829355, + "1": 0.9368227627491097, + "2": 0.9699363491702659 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.8015008491027902, + "1": 0.9017149435354963, + "2": 0.8825927183472111 + }, + "precision": { + "0": 0.4526353645148916, + "1": 0.4919770792072776, + "2": 0.3483574998651505 + }, + "recall": { + "0": 0.7195701088669217, + "1": 0.8090116389684526, + "2": 0.8502779863982279 + }, + "f1": { + "0": 0.4055745502423724, + "1": 0.4681079756240914, + "2": 0.35323451847027953 + }, + "micro_accuracy": { + "0": 0.7746432604455394, + "1": 0.8574997461155682, + "2": 0.9686354458667399 + }, + "coverage": { + "0": 0.9226528756535576, + "1": 0.9326930362961279, + "2": 0.9663749336970524 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.8032756297782976, + "1": 0.9037852480325208, + "2": 0.8852859668445923 + }, + "precision": { + "0": 0.46216790942585123, + "1": 0.4998985341050316, + "2": 0.3564243588372749 + }, + "recall": { + "0": 0.7177782729309229, + "1": 0.808076881532267, + "2": 0.849272944305007 + }, + "f1": { + "0": 0.4127816432054499, + "1": 0.47464011759969044, + "2": 0.36069385176930735 + }, + "micro_accuracy": { + "0": 0.7768421052631579, + "1": 0.8595761173326806, + "2": 0.9701513094465104 + }, + "coverage": { + "0": 0.9178222323255285, + "1": 0.9286769720390998, + "2": 0.9627756308251876 + } + } + }, + { + "thresholds": [ + 0.36, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.8061381059627792, + "1": 0.9054575788264251, + "2": 0.8866154752476598 + }, + "precision": { + "0": 0.47429670474927055, + "1": 0.5129235737981633, + "2": 0.3646217925602855 + }, + "recall": { + "0": 0.7153800078290851, + "1": 0.8050384213267415, + "2": 0.8480432594191671 + }, + "f1": { + "0": 0.4200739922235611, + "1": 0.48324626454035446, + "2": 0.3682736553468255 + }, + "micro_accuracy": { + "0": 0.7790482910328512, + "1": 0.861880264802935, + "2": 0.9720329442436452 + }, + "coverage": { + "0": 0.9128400394028946, + "1": 0.9242820337955596, + "2": 0.9591384405546716 + } + } + }, + { + "thresholds": [ + 0.38, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.8093184821227967, + "1": 0.9105604895663061, + "2": 0.8887698185931181 + }, + "precision": { + "0": 0.48025847980441544, + "1": 0.5196491929190563, + "2": 0.3656345363764338 + }, + "recall": { + "0": 0.7131336940713673, + "1": 0.8026259438319515, + "2": 0.8468788101285939 + }, + "f1": { + "0": 0.423673618354235, + "1": 0.48777335973733965, + "2": 0.3686677133357867 + }, + "micro_accuracy": { + "0": 0.7811547614077569, + "1": 0.8641756612012853, + "2": 0.9734657075481046 + }, + "coverage": { + "0": 0.9075168598923998, + "1": 0.9196787148594378, + "2": 0.95595589906797 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.814190463348711, + "1": 0.912992993634013, + "2": 0.8903408409704704 + }, + "precision": { + "0": 0.49007296071072415, + "1": 0.5284966024360187, + "2": 0.3769717318249915 + }, + "recall": { + "0": 0.7106139965749866, + "1": 0.799884121658498, + "2": 0.845755145355968 + }, + "f1": { + "0": 0.4301986050352946, + "1": 0.4945548677506391, + "2": 0.37860702408692926 + }, + "micro_accuracy": { + "0": 0.7830267909632989, + "1": 0.8657643114367316, + "2": 0.9751298223274507 + }, + "coverage": { + "0": 0.9022505114798818, + "1": 0.9153216640145487, + "2": 0.9521292718041979 + } + } + }, + { + "thresholds": [ + 0.4085436761379242, + 0.42, + 0.4351663589477539 + ], + "scores": { + "accuracy": { + "0": 0.8144892563273332, + "1": 0.9143323124569571, + "2": 0.9317947928846937 + }, + "precision": { + "0": 0.4924399980539364, + "1": 0.536901765831565, + "2": 0.3856310101180946 + }, + "recall": { + "0": 0.7093855720717483, + "1": 0.7979009894813711, + "2": 0.8448828121640822 + }, + "f1": { + "0": 0.43135514595533125, + "1": 0.5009079353630228, + "2": 0.3866796100261019 + }, + "micro_accuracy": { + "0": 0.7837394268400455, + "1": 0.8675107064155336, + "2": 0.9759790914350698 + }, + "coverage": { + "0": 0.9003182541486702, + "1": 0.9112298249602182, + "2": 0.9495150412972645 + } + } + }, + { + "thresholds": [ + 0.42, + 0.44, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8159504319273879, + "1": 0.9175446311011675, + "2": 0.931968981138224 + }, + "precision": { + "0": 0.49911540895707357, + "1": 0.5464809732850113, + "2": 0.387037486216462 + }, + "recall": { + "0": 0.708356339309623, + "1": 0.7965545510924884, + "2": 0.8444646565209648 + }, + "f1": { + "0": 0.43618610936538416, + "1": 0.5084794212239823, + "2": 0.3874049453259014 + }, + "micro_accuracy": { + "0": 0.7851834649326521, + "1": 0.8694852941176471, + "2": 0.976315526709935 + }, + "coverage": { + "0": 0.8972872622565735, + "1": 0.9068727741153293, + "2": 0.9486057437296356 + } + } + }, + { + "thresholds": [ + 0.44, + 0.46, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.8185307969054935, + "1": 0.9184814735543901, + "2": 0.9332969976341314 + }, + "precision": { + "0": 0.5075816027761572, + "1": 0.5574234341608942, + "2": 0.3971184047312322 + }, + "recall": { + "0": 0.7062229878556056, + "1": 0.7944260155430212, + "2": 0.8403339965993295 + }, + "f1": { + "0": 0.44140615073757483, + "1": 0.5172970281113275, + "2": 0.39590244852804596 + }, + "micro_accuracy": { + "0": 0.7873154148518007, + "1": 0.8712800588049984, + "2": 0.9779871692060946 + }, + "coverage": { + "0": 0.8915852087595666, + "1": 0.9020042433886489, + "2": 0.9449117223611427 + } + } + }, + { + "thresholds": [ + 0.46, + 0.47360937893390653, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8227497306118742, + "1": 0.9208035920851505, + "2": 0.9356590860997592 + }, + "precision": { + "0": 0.5200863712002146, + "1": 0.5650578002932166, + "2": 0.39842384692510235 + }, + "recall": { + "0": 0.7033176734320288, + "1": 0.7919918141524325, + "2": 0.8360099761731539 + }, + "f1": { + "0": 0.4502395949225765, + "1": 0.5225166479820076, + "2": 0.39588093766543786 + }, + "micro_accuracy": { + "0": 0.7896234488660676, + "1": 0.8728043354490437, + "2": 0.9794804671768023 + }, + "coverage": { + "0": 0.8854285064787452, + "1": 0.8983670531181329, + "2": 0.9407441085095097 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8252206175960227, + "1": 0.9211823534240594, + "2": 0.9403427405426371 + }, + "precision": { + "0": 0.530159022761887, + "1": 0.5695896380728542, + "2": 0.3992178074425096 + }, + "recall": { + "0": 0.6979071899947216, + "1": 0.7911100668967964, + "2": 0.8314466876398727 + }, + "f1": { + "0": 0.4562322021250188, + "1": 0.5260708045812226, + "2": 0.39543481048181933 + }, + "micro_accuracy": { + "0": 0.791896551724138, + "1": 0.8732314060058285, + "2": 0.9807299565261348 + }, + "coverage": { + "0": 0.8789876487080397, + "1": 0.8970599378646662, + "2": 0.9368606501477609 + } + } + }, + { + "thresholds": [ + 0.5, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8257679484498556, + "1": 0.9238806315798356, + "2": 0.9422231966941484 + }, + "precision": { + "0": 0.5356637417261088, + "1": 0.5758432555760209, + "2": 0.4018027505276448 + }, + "recall": { + "0": 0.6938779514436627, + "1": 0.7886470023309753, + "2": 0.8297266876274239 + }, + "f1": { + "0": 0.45840728486992033, + "1": 0.5301569975412581, + "2": 0.3964973577911489 + }, + "micro_accuracy": { + "0": 0.7946874592763129, + "1": 0.8754567083014699, + "2": 0.9819891163092918 + }, + "coverage": { + "0": 0.8722058043494734, + "1": 0.8917935894521483, + "2": 0.9329393043873607 + } + } + }, + { + "thresholds": [ + 0.52, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8282544312763146, + "1": 0.9256559818110086, + "2": 0.9457990600741752 + }, + "precision": { + "0": 0.5474108901738939, + "1": 0.5915396802073292, + "2": 0.42335753679425747 + }, + "recall": { + "0": 0.6915315709428661, + "1": 0.7867253650934746, + "2": 0.80562235734794 + }, + "f1": { + "0": 0.46628623600582575, + "1": 0.5427407402080506, + "2": 0.4092297626088781 + }, + "micro_accuracy": { + "0": 0.7981506639204172, + "1": 0.8779758088643843, + "2": 0.9832504686608525 + }, + "coverage": { + "0": 0.8645525498219292, + "1": 0.8864514662423278, + "2": 0.9296809881033569 + } + } + }, + { + "thresholds": [ + 0.54, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8294050859145015, + "1": 0.9266399265178432, + "2": 0.9464854308983579 + }, + "precision": { + "0": 0.5618323221225616, + "1": 0.6071751148151976, + "2": 0.4248732096383385 + }, + "recall": { + "0": 0.686694082070545, + "1": 0.7826451748903362, + "2": 0.8026355749174192 + }, + "f1": { + "0": 0.4753762543819342, + "1": 0.5542226868078467, + "2": 0.4093239825009507 + }, + "micro_accuracy": { + "0": 0.8015032607494197, + "1": 0.880494623655914, + "2": 0.9843085106382978 + }, + "coverage": { + "0": 0.8569182389937107, + "1": 0.8808820186406001, + "2": 0.9259680230355384 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.833645446676373, + "1": 0.9285620489388198, + "2": 0.9481742920518095 + }, + "precision": { + "0": 0.5731113797984781, + "1": 0.6185018271856951, + "2": 0.43548019200631727 + }, + "recall": { + "0": 0.6832262601675011, + "1": 0.780813848380668, + "2": 0.800934289541279 + }, + "f1": { + "0": 0.4823991265691447, + "1": 0.5632037373511436, + "2": 0.4186426629202878 + }, + "micro_accuracy": { + "0": 0.8043672213052594, + "1": 0.8827690643591131, + "2": 0.9851727112169877 + }, + "coverage": { + "0": 0.8493218155641433, + "1": 0.875672501326059, + "2": 0.922444494960976 + } + } + }, + { + "thresholds": [ + 0.564783900976181, + 0.58, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8339020746357689, + "1": 0.9296737162520987, + "2": 0.950035375136402 + }, + "precision": { + "0": 0.5757325028485333, + "1": 0.6325706462041654, + "2": 0.4392335105674446 + }, + "recall": { + "0": 0.6821227608254857, + "1": 0.7773607968172264, + "2": 0.7991374389095438 + }, + "f1": { + "0": 0.48389393195862157, + "1": 0.5727835312449313, + "2": 0.4203665167771333 + }, + "micro_accuracy": { + "0": 0.8049423540977746, + "1": 0.88468315603994, + "2": 0.9860232121874292 + }, + "coverage": { + "0": 0.8478442070167462, + "1": 0.8708229142987043, + "2": 0.9189399105857392 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.838887696675453, + "1": 0.9304725855239624, + "2": 0.9513127786332014 + }, + "precision": { + "0": 0.5836626841835245, + "1": 0.6369805642602512, + "2": 0.45624433078195364 + }, + "recall": { + "0": 0.6778259488082439, + "1": 0.7742710764789974, + "2": 0.7977250714799574 + }, + "f1": { + "0": 0.4870131206180509, + "1": 0.574846660418297, + "2": 0.4352000490121753 + }, + "micro_accuracy": { + "0": 0.806791858765321, + "1": 0.8865471735276739, + "2": 0.9870237380740495 + }, + "coverage": { + "0": 0.8423315905129953, + "1": 0.8655944532848374, + "2": 0.9153406077138744 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8433405053469263, + "1": 0.9335994359962447, + "2": 0.9518311072773475 + }, + "precision": { + "0": 0.5922917544554824, + "1": 0.6493828831713773, + "2": 0.45932417887408133 + }, + "recall": { + "0": 0.6735136238673823, + "1": 0.7711913065586354, + "2": 0.7942122965063213 + }, + "f1": { + "0": 0.49122687751793154, + "1": 0.5835878099955036, + "2": 0.4360361101763694 + }, + "micro_accuracy": { + "0": 0.8090787414078628, + "1": 0.8885290683585575, + "2": 0.9879475510670573 + }, + "coverage": { + "0": 0.8350572099719633, + "1": 0.8599113434871561, + "2": 0.9116276426460559 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8456728036086991, + "1": 0.9345386218388265, + "2": 0.9504130518791651 + }, + "precision": { + "0": 0.6017081017195444, + "1": 0.6563517938481643, + "2": 0.45950018652813823 + }, + "recall": { + "0": 0.6690029154596254, + "1": 0.7667844454936324, + "2": 0.7887529362434649 + }, + "f1": { + "0": 0.4955602532474231, + "1": 0.586873753072077, + "2": 0.43459488325704465 + }, + "micro_accuracy": { + "0": 0.8117676675210546, + "1": 0.8904722856319673, + "2": 0.9886505883334724 + }, + "coverage": { + "0": 0.8277638857316056, + "1": 0.8547586572705917, + "2": 0.9080093960748655 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.8490976179709434, + "1": 0.9413625835507294, + "2": 0.9517353620506981 + }, + "precision": { + "0": 0.6089573665135384, + "1": 0.6666909359331916, + "2": 0.4739665006434012 + }, + "recall": { + "0": 0.6622437769665233, + "1": 0.7608743136500334, + "2": 0.7861711832362505 + }, + "f1": { + "0": 0.4972320493005686, + "1": 0.592325310446054, + "2": 0.44576123038686644 + }, + "micro_accuracy": { + "0": 0.8137372525494901, + "1": 0.892263099219621, + "2": 0.9893784174470492 + }, + "coverage": { + "0": 0.8210578161703418, + "1": 0.849624914753353, + "2": 0.9042395999090702 + } + } + }, + { + "thresholds": [ + 0.66, + 0.6622604340314866, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8529801808585096, + "1": 0.941323062631637, + "2": 0.9519555188854704 + }, + "precision": { + "0": 0.6191522219838402, + "1": 0.6668541982321273, + "2": 0.4761694470533551 + }, + "recall": { + "0": 0.6573744455521335, + "1": 0.7601987118950719, + "2": 0.7847640233298259 + }, + "f1": { + "0": 0.5021227086700802, + "1": 0.5920537704757267, + "2": 0.4461110636862203 + }, + "micro_accuracy": { + "0": 0.8159633369003861, + "1": 0.8926029231284168, + "2": 0.9900698476815619 + }, + "coverage": { + "0": 0.8143138592104266, + "1": 0.8489618852769569, + "2": 0.9004319163446238 + } + } + }, + { + "thresholds": [ + 0.68, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8558937734472942, + "1": 0.9426209301478328, + "2": 0.9536376432733452 + }, + "precision": { + "0": 0.6313912007942875, + "1": 0.6747846644968789, + "2": 0.5037184619199501 + }, + "recall": { + "0": 0.6524127310036258, + "1": 0.7581639176800293, + "2": 0.7800662695865808 + }, + "f1": { + "0": 0.5074267680982871, + "1": 0.5960035751106463, + "2": 0.4651326815106287 + }, + "micro_accuracy": { + "0": 0.8187153723354306, + "1": 0.8942176184390485, + "2": 0.9909263959390863 + }, + "coverage": { + "0": 0.806925816473441, + "1": 0.8449079336212776, + "2": 0.8956581041145715 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.7000000000000001, + 0.7256358802318573 + ], + "scores": { + "accuracy": { + "0": 0.8612397149971023, + "1": 0.9458597496685615, + "2": 0.9539011552837727 + }, + "precision": { + "0": 0.6449381041264283, + "1": 0.6905251527466493, + "2": 0.5038594319488854 + }, + "recall": { + "0": 0.6492277109877416, + "1": 0.754841056305495, + "2": 0.7796118456062395 + }, + "f1": { + "0": 0.5147079585414646, + "1": 0.605764667596171, + "2": 0.46504869377039276 + }, + "micro_accuracy": { + "0": 0.8215556082523121, + "1": 0.8966646342840368, + "2": 0.9911898004998094 + }, + "coverage": { + "0": 0.7988558005607335, + "1": 0.8388838372357353, + "2": 0.8944835947563841 + } + } + }, + { + "thresholds": [ + 0.7013918280601502, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.8612592871982399, + "1": 0.9464876683184433, + "2": 0.9552692219379086 + }, + "precision": { + "0": 0.6467996328218246, + "1": 0.7033503379498547, + "2": 0.518130615014001 + }, + "recall": { + "0": 0.648741954916294, + "1": 0.749527998067361, + "2": 0.7779048994711388 + }, + "f1": { + "0": 0.5159025352577546, + "1": 0.6128222544241069, + "2": 0.4767143743192152 + }, + "micro_accuracy": { + "0": 0.8217913423201063, + "1": 0.898264607546569, + "2": 0.9915830641047441 + }, + "coverage": { + "0": 0.7982117147836629, + "1": 0.8328976282488444, + "2": 0.8912631658710313 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8627923598464875, + "1": 0.9504441370707825, + "2": 0.9566638476216514 + }, + "precision": { + "0": 0.6591134034757654, + "1": 0.7139442370214132, + "2": 0.5459362001580562 + }, + "recall": { + "0": 0.6445302772804082, + "1": 0.7460931886967076, + "2": 0.7749834423346821 + }, + "f1": { + "0": 0.520806896074642, + "1": 0.6195200372956101, + "2": 0.5009867295434599 + }, + "micro_accuracy": { + "0": 0.8235956671779141, + "1": 0.8999885465582408, + "2": 0.9923068703921359 + }, + "coverage": { + "0": 0.7904826854588164, + "1": 0.8269871940592559, + "2": 0.8864704099416534 + } + } + }, + { + "thresholds": [ + 0.7392672300338745, + 0.76, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.955701662120945, + "2": 0.9568074516033286 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.7245991333049994, + "2": 0.5613815874352024 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7387274032356047, + "2": 0.7709488290444216 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6232685759150135, + "2": 0.5132131254445778 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9020793427338395, + "2": 0.9930385458295733 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.8208494354777601, + "2": 0.8816776540122755 + } + } + }, + { + "thresholds": [ + 0.74, + 0.78, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8660251169906156, + "1": 0.9558540194054381, + "2": 0.9574691843308909 + }, + "precision": { + "0": 0.6694910040387244, + "1": 0.7315176901132866, + "2": 0.5630842396048013 + }, + "recall": { + "0": 0.6391209710195863, + "1": 0.7347075677897364, + "2": 0.768279622066695 + }, + "f1": { + "0": 0.5237770716830012, + "1": 0.623635473859606, + "2": 0.5131282859954788 + }, + "micro_accuracy": { + "0": 0.8257881874712671, + "1": 0.9037942271880819, + "2": 0.9936268579329416 + }, + "coverage": { + "0": 0.7829241494279002, + "1": 0.813821323027961, + "2": 0.8768659543835721 + } + } + }, + { + "thresholds": [ + 0.76, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8679120255990703, + "1": 0.9560909623540756, + "2": 0.9615807882397353 + }, + "precision": { + "0": 0.6861879993697683, + "1": 0.744690256607668, + "2": 0.582014385628191 + }, + "recall": { + "0": 0.6328288124972921, + "1": 0.728648284795071, + "2": 0.7641846835140491 + }, + "f1": { + "0": 0.5314997713032426, + "1": 0.6314422568258956, + "2": 0.5275589384246898 + }, + "micro_accuracy": { + "0": 0.8285217986984391, + "1": 0.9052302925019954, + "2": 0.9943459823855605 + }, + "coverage": { + "0": 0.7743047662347503, + "1": 0.8069637038720922, + "2": 0.871126013487914 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8178495526313782, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8679264283644141, + "1": 0.9575463468854754, + "2": 0.9617137032762465 + }, + "precision": { + "0": 0.6973335376338138, + "1": 0.7633606790043705, + "2": 0.6005770892222951 + }, + "recall": { + "0": 0.6264862412658959, + "1": 0.7240700762437333, + "2": 0.7613985188626582 + }, + "f1": { + "0": 0.5348002941670937, + "1": 0.6403891149209414, + "2": 0.5421165988142704 + }, + "micro_accuracy": { + "0": 0.830426164519326, + "1": 0.9070675979637741, + "2": 0.9946999561979851 + }, + "coverage": { + "0": 0.7645677047813897, + "1": 0.8000871410168978, + "2": 0.8649693112070925 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.8685561185021473, + "1": 0.9575325681771746, + "2": 0.9597647268578883 + }, + "precision": { + "0": 0.7127233427660208, + "1": 0.765338845733388, + "2": 0.6412593986657874 + }, + "recall": { + "0": 0.618199730670569, + "1": 0.7232287068426331, + "2": 0.7540449714415071 + }, + "f1": { + "0": 0.5384472833900663, + "1": 0.6414975761159004, + "2": 0.5737319020482594 + }, + "micro_accuracy": { + "0": 0.8323003186871095, + "1": 0.9071536929932682, + "2": 0.9954938039804732 + }, + "coverage": { + "0": 0.7549253618246571, + "1": 0.7991967871485943, + "2": 0.8576002121694325 + } + } + }, + { + "thresholds": [ + 0.8103895634412766, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.873068122998845, + "1": 0.9587840489386819, + "2": 0.9614561299225758 + }, + "precision": { + "0": 0.7229059700682495, + "1": 0.7841179321590122, + "2": 0.6658140379095349 + }, + "recall": { + "0": 0.6149672372822299, + "1": 0.7180443329503644, + "2": 0.7459102341523275 + }, + "f1": { + "0": 0.5425842893326037, + "1": 0.6515104166595421, + "2": 0.589880549745751 + }, + "micro_accuracy": { + "0": 0.8336744233052882, + "1": 0.9089254932005363, + "2": 0.9958784476228668 + }, + "coverage": { + "0": 0.7497726756080928, + "1": 0.7912404334318406, + "2": 0.8503068879290748 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.86, + 0.8892806261777878 + ], + "scores": { + "accuracy": { + "0": 0.8728679298631105, + "1": 0.9597792598113881, + "2": 0.9583871716477937 + }, + "precision": { + "0": 0.7302325487524555, + "1": 0.8044468108688305, + "2": 0.6637613338355366 + }, + "recall": { + "0": 0.6093728496483722, + "1": 0.7072301432900153, + "2": 0.7407173727226047 + }, + "f1": { + "0": 0.5409218879775108, + "1": 0.6586789571007916, + "2": 0.5865013528611877 + }, + "micro_accuracy": { + "0": 0.8344983604890572, + "1": 0.9106874666925052, + "2": 0.9961058144219148 + }, + "coverage": { + "0": 0.7452640751685989, + "1": 0.7820337955595968, + "2": 0.8464423732666515 + } + } + }, + { + "thresholds": [ + 0.84, + 0.869922012090683, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8769269805347432, + "1": 0.9627590640417357, + "2": 0.9645260442621209 + }, + "precision": { + "0": 0.7442978691723345, + "1": 0.8166841617561862, + "2": 0.6639873669283907 + }, + "recall": { + "0": 0.6016581018718588, + "1": 0.7031449724257084, + "2": 0.7369032513855218 + }, + "f1": { + "0": 0.5439121789284385, + "1": 0.6655108425187298, + "2": 0.5848601161863883 + }, + "micro_accuracy": { + "0": 0.8373167458187074, + "1": 0.9116055761356989, + "2": 0.9964424029541565 + }, + "coverage": { + "0": 0.7339546866712131, + "1": 0.7772978707281958, + "2": 0.8413275744487384 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8774254944722376, + "1": 0.9657849312916683, + "2": 0.9647114107133942 + }, + "precision": { + "0": 0.7596043505358325, + "1": 0.8288030433350464, + "2": 0.6869689989799962 + }, + "recall": { + "0": 0.5923256367659963, + "1": 0.6961779367427098, + "2": 0.7290421187513579 + }, + "f1": { + "0": 0.5468754480560355, + "1": 0.6696681370500921, + "2": 0.6007575543263776 + }, + "micro_accuracy": { + "0": 0.8398865337640847, + "1": 0.913005034999386, + "2": 0.996918933722841 + }, + "coverage": { + "0": 0.7212434644237327, + "1": 0.7712927180419792, + "2": 0.8300371296506782 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8882002242037912, + "1": 0.9670203717521686, + "2": 0.9781614922384197 + }, + "precision": { + "0": 0.7852154140060232, + "1": 0.8434772895799222, + "2": 0.690899900951909 + }, + "recall": { + "0": 0.582807177302222, + "1": 0.6851313873283835, + "2": 0.7171244904543138 + }, + "f1": { + "0": 0.5556971539137543, + "1": 0.6718879720187338, + "2": 0.5958883925053272 + }, + "micro_accuracy": { + "0": 0.8430841797764854, + "1": 0.9148262625255497, + "2": 0.9975143447859317 + }, + "coverage": { + "0": 0.7068462529362733, + "1": 0.7599833295445935, + "2": 0.8154694248692885 + } + } + }, + { + "thresholds": [ + 0.8939348995685578, + 0.9169912785291671, + 0.9588932752609253 + ], + "scores": { + "accuracy": { + "0": 0.8907349998898831, + "1": 0.9679171391596187, + "2": 0.9914113430862983 + }, + "precision": { + "0": 0.7992017020354023, + "1": 0.8571871263381592, + "2": 0.739293558241876 + }, + "recall": { + "0": 0.5762135216235852, + "1": 0.6745673184147293, + "2": 0.7051209174422324 + }, + "f1": { + "0": 0.5581397972687833, + "1": 0.6745765000705487, + "2": 0.6098272253678202 + }, + "micro_accuracy": { + "0": 0.8449658772669186, + "1": 0.916563204702663, + "2": 0.9980728968405025 + }, + "coverage": { + "0": 0.6967303174964007, + "1": 0.7476509812836251, + "2": 0.7962415700538001 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8946723223240497, + "1": 0.9680629104890521, + "2": 0.9914428135005212 + }, + "precision": { + "0": 0.8021353989540583, + "1": 0.857194863299276, + "2": 0.7392946941740896 + }, + "recall": { + "0": 0.5706803564139407, + "1": 0.6733765395011476, + "2": 0.7041487848093837 + }, + "f1": { + "0": 0.5547257091906621, + "1": 0.673812235658984, + "2": 0.6092976825277341 + }, + "micro_accuracy": { + "0": 0.8457640581774357, + "1": 0.9169313648260615, + "2": 0.9980928768952035 + }, + "coverage": { + "0": 0.6916155186784876, + "1": 0.7454913995605061, + "2": 0.7946502993104494 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.964760661125183 + ], + "scores": { + "accuracy": { + "0": 0.8955084410825387, + "1": 0.9728889200483483, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.8179890429357201, + "1": 0.8772322343633124, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.5558190501817113, + "1": 0.6574260341135374, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.552121099885854, + "1": 0.6739506169753227, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8481657704327261, + "1": 0.9198969099002942, + "2": 0.998243799167609 + }, + "coverage": { + "0": 0.6728612563461392, + "1": 0.7276843221944381, + "2": 0.7874327498673941 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9015217020267193, + "1": 0.9753341230239733, + "2": 0.9956952732139847 + }, + "precision": { + "0": 0.8481058742251684, + "1": 0.8964483743745064, + "2": 0.7904683826694126 + }, + "recall": { + "0": 0.5340470612441686, + "1": 0.6339597903306023, + "2": 0.6712077753964215 + }, + "f1": { + "0": 0.5485544353212021, + "1": 0.6674368946495778, + "2": 0.6326994066606993 + }, + "micro_accuracy": { + "0": 0.8513430746347012, + "1": 0.9230498945888967, + "2": 0.9986494260060526 + }, + "coverage": { + "0": 0.6495226187769948, + "1": 0.700878987648708, + "2": 0.7574259301356369 + } + } + }, + { + "thresholds": [ + 0.9400830596685409, + 0.9623951733112336, + 0.9829540997743608 + ], + "scores": { + "accuracy": { + "0": 0.9015213230483747, + "1": 0.9753094701159627, + "2": 0.9957236507443196 + }, + "precision": { + "0": 0.848095143571776, + "1": 0.8994013694018362, + "2": 0.8538416295509121 + }, + "recall": { + "0": 0.5338966062467273, + "1": 0.6314594591320635, + "2": 0.6649476693811502 + }, + "f1": { + "0": 0.5484443545793559, + "1": 0.6673585662110235, + "2": 0.6773385749353905 + }, + "micro_accuracy": { + "0": 0.8513375536042475, + "1": 0.9236145102518083, + "2": 0.9987341772151899 + }, + "coverage": { + "0": 0.64937106918239, + "1": 0.6966355989997727, + "2": 0.7482761233613701 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9931119441986084 + ], + "scores": { + "accuracy": { + "0": 0.9007307764009433, + "1": 0.9769769927601076, + "2": 0.9962757001926406 + }, + "precision": { + "0": 0.8688602149968949, + "1": 0.9238115476261227, + "2": 0.8964573976570537 + }, + "recall": { + "0": 0.5044547623579014, + "1": 0.59214124891185, + "2": 0.628755812463295 + }, + "f1": { + "0": 0.5341531841748264, + "1": 0.6500388683285047, + "2": 0.6803360283100598 + }, + "micro_accuracy": { + "0": 0.8551647743007477, + "1": 0.9283031948697209, + "2": 0.9990446294527091 + }, + "coverage": { + "0": 0.6156512843828142, + "1": 0.6557929832537698, + "2": 0.6940024247935137 + } + } + }, + { + "thresholds": [ + 0.968298327922821, + 0.9829350560903549, + 0.9968007922172547 + ], + "scores": { + "accuracy": { + "0": 0.9076298233726804, + "1": 0.9778396943746799, + "2": 0.9963518987362167 + }, + "precision": { + "0": 0.880036155615882, + "1": 0.9339767231608709, + "2": 0.9500985664224181 + }, + "recall": { + "0": 0.49063244091458935, + "1": 0.5821459983488723, + "2": 0.5982630188012411 + }, + "f1": { + "0": 0.5259996503084539, + "1": 0.6462002647532972, + "2": 0.6830633162366865 + }, + "micro_accuracy": { + "0": 0.8566122785854866, + "1": 0.9292807615465977, + "2": 0.9992660227239365 + }, + "coverage": { + "0": 0.5967644161551868, + "1": 0.6447677502462681, + "2": 0.6452413427294083 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9914740920066833, + 0.9984663963317871 + ], + "scores": { + "accuracy": { + "0": 0.9140472371288523, + "1": 0.9789688442390945, + "2": 0.9955344536572177 + }, + "precision": { + "0": 0.9043033883858217, + "1": 0.9423740513497921, + "2": 0.9472330464716916 + }, + "recall": { + "0": 0.45991964562178267, + "1": 0.5376650550381672, + "2": 0.5368175209756265 + }, + "f1": { + "0": 0.5077561422491333, + "1": 0.6104223127939457, + "2": 0.6231417007368808 + }, + "micro_accuracy": { + "0": 0.8611702667072305, + "1": 0.9341163806749826, + "2": 0.9992647763961257 + }, + "coverage": { + "0": 0.5604114571493521, + "1": 0.5983556868985376, + "2": 0.5926157460028795 + } + } + }, + { + "thresholds": [ + 0.9837267845869063, + 0.996181696653366, + 0.9991970777511597 + ], + "scores": { + "accuracy": { + "0": 0.9175154037568073, + "1": 0.9801771660058008, + "2": 0.9956182845363498 + }, + "precision": { + "0": 0.9113644580452812, + "1": 0.9526438322648789, + "2": 0.9466409618115678 + }, + "recall": { + "0": 0.4462820444958074, + "1": 0.4862104422916158, + "2": 0.4995342032615694 + }, + "f1": { + "0": 0.4967958440684157, + "1": 0.5663266039849079, + "2": 0.5923877275251487 + }, + "micro_accuracy": { + "0": 0.8626385113945223, + "1": 0.9401090832808895, + "2": 0.999478115649572 + }, + "coverage": { + "0": 0.5436462832461924, + "1": 0.5418276881109343, + "2": 0.5444798060165189 + } + } + }, + { + "thresholds": [ + 0.9909754395484924, + 0.9981385469436646, + 0.9995541572570801 + ], + "scores": { + "accuracy": { + "0": 0.9224826036781808, + "1": 0.9793222361938133, + "2": 0.9952663350372687 + }, + "precision": { + "0": 0.9259898898282758, + "1": 0.9527810434506255, + "2": 0.991246958250539 + }, + "recall": { + "0": 0.4048140396023669, + "1": 0.4343426633370291, + "2": 0.46332263246734706 + }, + "f1": { + "0": 0.4632810594153543, + "1": 0.5173491741523389, + "2": 0.5855626524516249 + }, + "micro_accuracy": { + "0": 0.8668243913607571, + "1": 0.9442163167273573, + "2": 0.9995411440807587 + }, + "coverage": { + "0": 0.4964385845267864, + "1": 0.4890126543911495, + "2": 0.4954156247632038 + } + } + }, + { + "thresholds": [ + 0.9953113883733749, + 0.9990327894687653, + 0.9997492790222169 + ], + "scores": { + "accuracy": { + "0": 0.926034547058813, + "1": 0.9812806123103641, + "2": 0.9991547104962129 + }, + "precision": { + "0": 0.9336381921423307, + "1": 0.9637883239225851, + "2": 0.99093550316367 + }, + "recall": { + "0": 0.3587794785774434, + "1": 0.39431048194782464, + "2": 0.4329618750570841 + }, + "f1": { + "0": 0.42280255210853357, + "1": 0.4791580712509513, + "2": 0.5557113491439347 + }, + "micro_accuracy": { + "0": 0.870291095890411, + "1": 0.9484438313647728, + "2": 0.9995314363605384 + }, + "coverage": { + "0": 0.44252481624611656, + "1": 0.43945593695536866, + "2": 0.44472228536788666 + } + } + }, + { + "thresholds": [ + 0.9975371837615968, + 0.9994630217552184, + 0.9998589992523194 + ], + "scores": { + "accuracy": { + "0": 0.9313125212251779, + "1": 0.981866328209891, + "2": 0.9994197487454543 + }, + "precision": { + "0": 0.9373845967320148, + "1": 0.9660388130640787, + "2": 0.9898720396996044 + }, + "recall": { + "0": 0.3147527816583985, + "1": 0.35298806003244504, + "2": 0.39130852457988263 + }, + "f1": { + "0": 0.37789084963155256, + "1": 0.43871959822191153, + "2": 0.512975274017867 + }, + "micro_accuracy": { + "0": 0.8753155952612157, + "1": 0.9522481365712911, + "2": 0.9996634453579499 + }, + "coverage": { + "0": 0.3901644313101462, + "1": 0.3939342274759415, + "2": 0.3940100022732439 + } + } + }, + { + "thresholds": [ + 0.9987033247947694, + 0.9997110962867736, + 0.9999233663082123 + ], + "scores": { + "accuracy": { + "0": 0.9475848764517509, + "1": 0.984876159942198, + "2": 0.9993426502900025 + }, + "precision": { + "0": 0.9519436863406033, + "1": 0.9657183830827069, + "2": 0.9860759975204548 + }, + "recall": { + "0": 0.28253071189734474, + "1": 0.3120263118314203, + "2": 0.34493011934877893 + }, + "f1": { + "0": 0.3453504169466674, + "1": 0.3951232081490325, + "2": 0.46324612201173226 + }, + "micro_accuracy": { + "0": 0.8811122828439807, + "1": 0.9572130513995473, + "2": 0.9996659428762318 + }, + "coverage": { + "0": 0.34130863074941276, + "1": 0.34312722588467076, + "2": 0.3402477835871789 + } + } + }, + { + "thresholds": [ + 0.9993016123771669, + 0.9998360157012939, + 0.9999556183815004 + ], + "scores": { + "accuracy": { + "0": 0.9449030971073483, + "1": 0.9825776284204991, + "2": 0.9992307228032624 + }, + "precision": { + "0": 0.9526365091195719, + "1": 0.9649247615279918, + "2": 0.9858949057426691 + }, + "recall": { + "0": 0.2436221491684348, + "1": 0.26927744439046775, + "2": 0.3173217868834379 + }, + "f1": { + "0": 0.30311496754430983, + "1": 0.34804098134974154, + "2": 0.4310795716736065 + }, + "micro_accuracy": { + "0": 0.8870395458357525, + "1": 0.9603270938478247, + "2": 0.9996105919003115 + }, + "coverage": { + "0": 0.2936462832461923, + "1": 0.29652572554368417, + "2": 0.2918845192089111 + } + } + }, + { + "thresholds": [ + 0.9996441006660463, + 0.999919891357422, + 0.9999743700027466 + ], + "scores": { + "accuracy": { + "0": 0.941897076211469, + "1": 0.9845509642684617, + "2": 0.9990765544536225 + }, + "precision": { + "0": 0.9545452898582109, + "1": 0.9663554776703325, + "2": 0.9844382224407668 + }, + "recall": { + "0": 0.20545987357608933, + "1": 0.2178058136801946, + "2": 0.28819361904854796 + }, + "f1": { + "0": 0.2599550276604233, + "1": 0.29034603423642164, + "2": 0.39689122226871193 + }, + "micro_accuracy": { + "0": 0.89789441089952, + "1": 0.9642019696732843, + "2": 0.9995376791493297 + }, + "coverage": { + "0": 0.24471470788815639, + "1": 0.24236568917178147, + "2": 0.24585132984769265 + } + } + }, + { + "thresholds": [ + 0.9998284101486207, + 0.9999610662460328, + 0.9999865293502808 + ], + "scores": { + "accuracy": { + "0": 0.9494365557600467, + "1": 0.9803029093551383, + "2": 0.9996182808397126 + }, + "precision": { + "0": 0.9562737905373998, + "1": 0.9628636594824845, + "2": 0.9914250743136911 + }, + "recall": { + "0": 0.16820896556639875, + "1": 0.16953220067607208, + "2": 0.24418626250042755 + }, + "f1": { + "0": 0.21793005404415428, + "1": 0.22996728377250691, + "2": 0.3457736191020759 + }, + "micro_accuracy": { + "0": 0.9128872487132175, + "1": 0.9658886894075404, + "2": 0.9997081144191476 + }, + "coverage": { + "0": 0.19506327195574752, + "1": 0.18992952943850874, + "2": 0.19470334166856104 + } + } + }, + { + "thresholds": [ + 0.9999265670776368, + 0.9999796569347381, + 0.9999933242797852 + ], + "scores": { + "accuracy": { + "0": 0.9550926766880073, + "1": 0.980461510518777, + "2": 0.9996448251918388 + }, + "precision": { + "0": 0.9589322615073687, + "1": 0.9695794480241675, + "2": 0.9970718641078752 + }, + "recall": { + "0": 0.12832419271073775, + "1": 0.13733663941529364, + "2": 0.159600646761486 + }, + "f1": { + "0": 0.17153110409132377, + "1": 0.18949687149517686, + "2": 0.24636893141506938 + }, + "micro_accuracy": { + "0": 0.9379662347860228, + "1": 0.9664753456822333, + "2": 0.9997364259356879 + }, + "coverage": { + "0": 0.1447488065469425, + "1": 0.1452223990300826, + "2": 0.14374479048268546 + } + } + }, + { + "thresholds": [ + 0.9999752044677734, + 0.9999914050102235, + 0.9999967694282531 + ], + "scores": { + "accuracy": { + "0": 0.9584696978696444, + "1": 0.9737095306609449, + "2": 0.9994757065129717 + }, + "precision": { + "0": 0.9645292963759694, + "1": 0.9701425438596492, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08805514296342391, + "1": 0.09684671800419796, + "2": 0.11836585198921437 + }, + "f1": { + "0": 0.120502177452844, + "1": 0.1361960229969324, + "2": 0.18861965174983022 + }, + "micro_accuracy": { + "0": 0.9503602882305845, + "1": 0.9635137814792782, + "2": 0.999618829807509 + }, + "coverage": { + "0": 0.0946427218307191, + "1": 0.0955330756990225, + "2": 0.09939759036144578 + } + } + }, + { + "thresholds": [ + 0.9999936163425446, + 0.9999970197677612, + 0.9999990463256836 + ], + "scores": { + "accuracy": { + "0": 0.963173504695996, + "1": 0.9815497382198953, + "2": 0.9990448343079924 + }, + "precision": { + "0": 0.9755425002646344, + "1": 0.983, + "2": 0.9811111111111112 + }, + "recall": { + "0": 0.05009910707616046, + "1": 0.05560983170076135, + "2": 0.07368219693482024 + }, + "f1": { + "0": 0.0715760521716819, + "1": 0.08234772695429043, + "2": 0.12131174080518332 + }, + "micro_accuracy": { + "0": 0.9420234937476317, + "1": 0.9502090459901178, + "2": 0.9992343032159265 + }, + "coverage": { + "0": 0.04999242252026976, + "1": 0.04984087292566492, + "2": 0.049480942638478444 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.95, + "1": 0.9710144927536232, + "2": 1.0 + }, + "precision": { + "0": 0.95, + "1": 0.9583333333333334, + "2": 1.0 + }, + "recall": { + "0": 0.001962286384242331, + "1": 0.002759801937539602, + "2": 0.022136315662904072 + }, + "f1": { + "0": 0.0036126928068550518, + "1": 0.005108670591177205, + "2": 0.035421981994672294 + }, + "micro_accuracy": { + "0": 0.8961038961038961, + "1": 0.9148936170212766, + "2": 1.0 + }, + "coverage": { + "0": 0.0014586648480715313, + "1": 0.0017807077366068045, + "2": 0.007065999848450405 + } + } + } + ] + }, + "onnx-tta": { + "source": "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "full_zero": { + "accuracy": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "precision": { + "0": 0.30560509035336597, + "1": 0.35093141039439896, + "2": 0.2853888893805401 + }, + "recall": { + "0": 0.7398002960321982, + "1": 0.8304111700220072, + "2": 0.8573137738657032 + }, + "f1": { + "0": 0.29443636070255275, + "1": 0.35360877971608073, + "2": 0.2967466662087087 + }, + "micro_accuracy": { + "0": 0.7319406548431105, + "1": 0.8158594815825375, + "2": 0.9476978171896316 + }, + "theilU": { + "0": 0.9406019271139017, + "1": 0.9419354628293558, + "2": 0.8801548412074369 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_zero": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3011494930237334, + "1": 0.36048522644409975, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9629823236784678, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8168891977985718, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.703150166196618, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5430735533140526, + "1": 0.6655370235633968, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.911799848813675, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7768621656437069, + "2": 0.7846859134651815 + } + }, + "known_zero": { + "accuracy": { + "0": 0.7643157679314445, + "1": 0.8339004259063546, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.32010697284017264, + "1": 0.35825712113062574, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7643157679314445, + "1": 0.8339004259063546, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.31123876107268367, + "1": 0.3610591777989773, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.8485992798805656, + "1": 0.8163184117301608, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9441435804167174, + "1": 0.942991822846314, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "known_optimized": { + "accuracy": { + "0": 0.9036381600900988, + "1": 0.966150028690568, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7641741013547309, + "1": 0.8170652541366, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6267785524056018, + "1": 0.705340665156732, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5758793313296239, + "1": 0.6674178728574118, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.9719676229020354, + "1": 0.9118220834959032, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9441435804167174, + "1": 0.942991822846314, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7377711425309563, + "1": 0.7768579385075871, + "2": 0.7846859134651815 + } + }, + "calibration_zero": { + "accuracy": { + "0": 0.7687701032394073, + "1": 0.8538124541139522, + "2": 0.8685825691446063 + }, + "precision": { + "0": 0.4847160695718284, + "1": 0.5184639515113375, + "2": 0.3826107811942373 + }, + "recall": { + "0": 0.7687701032394073, + "1": 0.8538124541139522, + "2": 0.8685825691446063 + }, + "f1": { + "0": 0.4430255135086433, + "1": 0.5041458550744518, + "2": 0.39228445312410354 + }, + "micro_accuracy": { + "0": 0.7294941900205059, + "1": 0.8118591934381408, + "2": 0.9456596035543404 + }, + "theilU": { + "0": 0.9588446607588915, + "1": 0.9603409164900499, + "2": 0.8893754433031703 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "calibration_optimized": { + "accuracy": { + "0": 0.9108463773306322, + "1": 0.9779606204147607, + "2": 0.9996735638566714 + }, + "precision": { + "0": 0.880314153798674, + "1": 0.9266086911891874, + "2": 0.9496688607549484 + }, + "recall": { + "0": 0.6377095021001528, + "1": 0.7402264841524345, + "2": 0.7548837775873369 + }, + "f1": { + "0": 0.6324462567697632, + "1": 0.7572256161677625, + "2": 0.7935862907114528 + }, + "micro_accuracy": { + "0": 0.8357933579335793, + "1": 0.912967032967033, + "2": 0.9984868136619109 + }, + "theilU": { + "0": 0.9588446607588915, + "1": 0.9603409164900499, + "2": 0.8893754433031703 + }, + "coverage": { + "0": 0.7409432672590567, + "1": 0.777511961722488, + "2": 0.790498974709501 + } + }, + "curve": [ + { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "scores": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3011494930237334, + "1": 0.36048522644409975, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.015950521454215, + 0.02, + 0.02 + ], + "scores": { + "accuracy": { + "0": 0.740889810430762, + "1": 0.8313254150701082, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592654647709, + "1": 0.3582300554179332, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408791651424883, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.30114734657128267, + "1": 0.3605068098594936, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7322206645701512, + "1": 0.8163338764066229, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.9999621126013488, + "1": 0.9999621126013488, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.02, + 0.0239239763468503, + 0.04 + ], + "scores": { + "accuracy": { + "0": 0.7410488501708439, + "1": 0.8314157287048344, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3130393082015701, + "1": 0.358263923254293, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408791651424883, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3012095157962648, + "1": 0.3605537634261564, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.732331653340407, + "1": 0.8164112085788446, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.999810563006744, + "1": 0.9998673941047208, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.04, + 0.04, + 0.06 + ], + "scores": { + "accuracy": { + "0": 0.7426095802970574, + "1": 0.8329664318414006, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.31674763275753215, + "1": 0.36037998808055566, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.740461269687722, + "1": 0.8312492056432632, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3039583606084498, + "1": 0.3624408295973815, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7343533212962083, + "1": 0.817695285811888, + "2": 0.9479237705539137 + }, + "coverage": { + "0": 0.9967227400166705, + "1": 0.9981814048647419, + "2": 1.0 + } + } + }, + { + "thresholds": [ + 0.06, + 0.06, + 0.08 + ], + "scores": { + "accuracy": { + "0": 0.7460477041142287, + "1": 0.8354982570408676, + "2": 0.8580598272214246 + }, + "precision": { + "0": 0.3278611813253453, + "1": 0.3676629877959982, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7400996168361355, + "1": 0.8309865024392983, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.3133880769684323, + "1": 0.36863595472715455, + "2": 0.297077819405652 + }, + "micro_accuracy": { + "0": 0.7379564693967247, + "1": 0.8206452350553576, + "2": 0.9479417280769886 + }, + "coverage": { + "0": 0.9913427294081988, + "1": 0.9941085095097371, + "2": 0.9999810563006744 + } + } + }, + { + "thresholds": [ + 0.08, + 0.08, + 0.0999075770378112 + ], + "scores": { + "accuracy": { + "0": 0.7493955682703097, + "1": 0.8383763190709993, + "2": 0.8580653615509174 + }, + "precision": { + "0": 0.33634125202567466, + "1": 0.3762181302522879, + "2": 0.2905124870482747 + }, + "recall": { + "0": 0.7397009819275772, + "1": 0.8301133615945212, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.32012563592243987, + "1": 0.3751806142871327, + "2": 0.3021130366837139 + }, + "micro_accuracy": { + "0": 0.7412295869356388, + "1": 0.8239145416953825, + "2": 0.9479776451643459 + }, + "coverage": { + "0": 0.986019549897704, + "1": 0.9895430779722664, + "2": 0.9999431689020232 + } + } + }, + { + "thresholds": [ + 0.1, + 0.1, + 0.1 + ], + "scores": { + "accuracy": { + "0": 0.7563665005973177, + "1": 0.8464222466897784, + "2": 0.8581003232184629 + }, + "precision": { + "0": 0.34968163802632196, + "1": 0.3846854097004968, + "2": 0.29051422175466407 + }, + "recall": { + "0": 0.7388339631243787, + "1": 0.8288795909340242, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.33056079534601945, + "1": 0.38240544445409363, + "2": 0.30211389976198105 + }, + "micro_accuracy": { + "0": 0.7449600865918008, + "1": 0.8272823472823473, + "2": 0.9479956047287057 + }, + "coverage": { + "0": 0.9800901720087899, + "1": 0.9845987724482838, + "2": 0.9999242252026976 + } + } + }, + { + "thresholds": [ + 0.12, + 0.12, + 0.12 + ], + "scores": { + "accuracy": { + "0": 0.7625714918130634, + "1": 0.8497179242133248, + "2": 0.8585294449520916 + }, + "precision": { + "0": 0.3594914502917909, + "1": 0.39687827178836016, + "2": 0.2905996046302943 + }, + "recall": { + "0": 0.7381916443987615, + "1": 0.8278936050918533, + "2": 0.8580495117510821 + }, + "f1": { + "0": 0.3379915660037187, + "1": 0.3931285955316415, + "2": 0.3021722660099376 + }, + "micro_accuracy": { + "0": 0.7484252274671437, + "1": 0.8310886644219978, + "2": 0.9484608385776025 + }, + "coverage": { + "0": 0.974388118511783, + "1": 0.9789724937485792, + "2": 0.9993938016215806 + } + } + }, + { + "thresholds": [ + 0.14, + 0.14, + 0.14 + ], + "scores": { + "accuracy": { + "0": 0.7672160919781337, + "1": 0.8544217285804823, + "2": 0.860270342500555 + }, + "precision": { + "0": 0.37002843841643523, + "1": 0.4083357577146017, + "2": 0.2961974043006112 + }, + "recall": { + "0": 0.7366712339930792, + "1": 0.8270981606071889, + "2": 0.8578392959282768 + }, + "f1": { + "0": 0.34583206444201803, + "1": 0.40293143370342366, + "2": 0.307670231670346 + }, + "micro_accuracy": { + "0": 0.7515350619891275, + "1": 0.8341502314544676, + "2": 0.9494694481881514 + }, + "coverage": { + "0": 0.9687428961127529, + "1": 0.9739713571266196, + "2": 0.9979730241721604 + } + } + }, + { + "thresholds": [ + 0.16, + 0.16, + 0.16 + ], + "scores": { + "accuracy": { + "0": 0.773475195583108, + "1": 0.8588774741931797, + "2": 0.861903012312373 + }, + "precision": { + "0": 0.38114457198207047, + "1": 0.4207728063858412, + "2": 0.29696685337608164 + }, + "recall": { + "0": 0.7341402245203328, + "1": 0.8229443946790418, + "2": 0.8574628138523821 + }, + "f1": { + "0": 0.3539517392905796, + "1": 0.4121629724367216, + "2": 0.3081029321547972 + }, + "micro_accuracy": { + "0": 0.7547262605000689, + "1": 0.8373543442558848, + "2": 0.9508377550826345 + }, + "coverage": { + "0": 0.9629650678184436, + "1": 0.9689323331060089, + "2": 0.9960786542396 + } + } + }, + { + "thresholds": [ + 0.18, + 0.18, + 0.18 + ], + "scores": { + "accuracy": { + "0": 0.7770258012636315, + "1": 0.8649499091537803, + "2": 0.8636760700222802 + }, + "precision": { + "0": 0.38994202141164924, + "1": 0.42806995201500586, + "2": 0.3027369310064925 + }, + "recall": { + "0": 0.733134576356869, + "1": 0.821629779668204, + "2": 0.8572183776637996 + }, + "f1": { + "0": 0.36059902709402175, + "1": 0.41793815824733366, + "2": 0.31384245168393615 + }, + "micro_accuracy": { + "0": 0.7571019076801423, + "1": 0.8399426472610139, + "2": 0.9523718767272104 + }, + "coverage": { + "0": 0.9582670303856937, + "1": 0.964480563764492, + "2": 0.9939569599151322 + } + } + }, + { + "thresholds": [ + 0.2, + 0.2, + 0.2 + ], + "scores": { + "accuracy": { + "0": 0.7782400632793491, + "1": 0.8703640744502253, + "2": 0.8654875492368518 + }, + "precision": { + "0": 0.3983552845987228, + "1": 0.4405734251247726, + "2": 0.3040514926875982 + }, + "recall": { + "0": 0.7321556987823791, + "1": 0.820032740939077, + "2": 0.8566580864341529 + }, + "f1": { + "0": 0.3669095026406158, + "1": 0.4277323394302547, + "2": 0.31457131145055967 + }, + "micro_accuracy": { + "0": 0.7595804279158472, + "1": 0.8426786665877198, + "2": 0.9543143326834117 + }, + "coverage": { + "0": 0.9535689929529438, + "1": 0.9598204137303933, + "2": 0.9910206865196636 + } + } + }, + { + "thresholds": [ + 0.22, + 0.22, + 0.22 + ], + "scores": { + "accuracy": { + "0": 0.780475166559865, + "1": 0.8728463326986747, + "2": 0.8673660569887384 + }, + "precision": { + "0": 0.4109821838099945, + "1": 0.4516915482504057, + "2": 0.30694292869397616 + }, + "recall": { + "0": 0.7313893790669066, + "1": 0.8190850559932441, + "2": 0.8558513359955886 + }, + "f1": { + "0": 0.37690915333104147, + "1": 0.43763882434578627, + "2": 0.3162630741384478 + }, + "micro_accuracy": { + "0": 0.7626536117494255, + "1": 0.8454321869173708, + "2": 0.9564275166369407 + }, + "coverage": { + "0": 0.9480374327498674, + "1": 0.9551034325983178, + "2": 0.9877813139349853 + } + } + }, + { + "thresholds": [ + 0.2208323277533054, + 0.24, + 0.24 + ], + "scores": { + "accuracy": { + "0": 0.7804767417089097, + "1": 0.8750586107857088, + "2": 0.8742343800372262 + }, + "precision": { + "0": 0.4109913229209418, + "1": 0.4608052531198458, + "2": 0.3132946812522768 + }, + "recall": { + "0": 0.7313579410395472, + "1": 0.817823539415891, + "2": 0.855117516899894 + }, + "f1": { + "0": 0.376905325173804, + "1": 0.4448319518546298, + "2": 0.3224616249884756 + }, + "micro_accuracy": { + "0": 0.7627203325472641, + "1": 0.8480457616646403, + "2": 0.9585730503550057 + }, + "coverage": { + "0": 0.9479048268545882, + "1": 0.9504622262635447, + "2": 0.9845229976509813 + } + } + }, + { + "thresholds": [ + 0.24, + 0.25287065804004666, + 0.26 + ], + "scores": { + "accuracy": { + "0": 0.7822990067272626, + "1": 0.876849117376825, + "2": 0.8759816752727514 + }, + "precision": { + "0": 0.4198251750146811, + "1": 0.46537126169735604, + "2": 0.31455597829884013 + }, + "recall": { + "0": 0.730366047417989, + "1": 0.8168576175441995, + "2": 0.8540780004667501 + }, + "f1": { + "0": 0.3834801337745707, + "1": 0.44849544635540844, + "2": 0.32301299921299853 + }, + "micro_accuracy": { + "0": 0.7652069104057855, + "1": 0.8496061732837551, + "2": 0.9606937979255596 + }, + "coverage": { + "0": 0.9430173524285822, + "1": 0.9476017276653785, + "2": 0.9807721451845116 + } + } + }, + { + "thresholds": [ + 0.26, + 0.26, + 0.28 + ], + "scores": { + "accuracy": { + "0": 0.7853950244533375, + "1": 0.8803953942713991, + "2": 0.877209818495524 + }, + "precision": { + "0": 0.42645032787470083, + "1": 0.47061019591107706, + "2": 0.3220549316725158 + }, + "recall": { + "0": 0.7290750804879409, + "1": 0.816417979816427, + "2": 0.8534256479368267 + }, + "f1": { + "0": 0.38786478712344546, + "1": 0.45220105526939885, + "2": 0.33004064438511554 + }, + "micro_accuracy": { + "0": 0.7673855100557305, + "1": 0.8504145139973567, + "2": 0.9626613935093637 + }, + "coverage": { + "0": 0.9381677654012276, + "1": 0.9460104569220278, + "2": 0.9771538986133212 + } + } + }, + { + "thresholds": [ + 0.28, + 0.28, + 0.3 + ], + "scores": { + "accuracy": { + "0": 0.7926786490882397, + "1": 0.888221969481094, + "2": 0.8784569475962828 + }, + "precision": { + "0": 0.43349787707271314, + "1": 0.4780525626528896, + "2": 0.3365452759866636 + }, + "recall": { + "0": 0.7256689066111349, + "1": 0.8140910718108895, + "2": 0.8522751704761103 + }, + "f1": { + "0": 0.39174992328289265, + "1": 0.4577642431530706, + "2": 0.3436941684526758 + }, + "micro_accuracy": { + "0": 0.7700948627841313, + "1": 0.8530802825688812, + "2": 0.9645337639345538 + }, + "coverage": { + "0": 0.9325793741001743, + "1": 0.9412555883913011, + "2": 0.9737250890353868 + } + } + }, + { + "thresholds": [ + 0.3, + 0.3, + 0.32 + ], + "scores": { + "accuracy": { + "0": 0.7975603803268244, + "1": 0.8936301956499766, + "2": 0.8799553730733393 + }, + "precision": { + "0": 0.443240906540024, + "1": 0.48547660584287367, + "2": 0.3392454180229264 + }, + "recall": { + "0": 0.7217650059961761, + "1": 0.8111246623146062, + "2": 0.8511832141224732 + }, + "f1": { + "0": 0.39873812189743485, + "1": 0.46328719215975306, + "2": 0.3450693440759551 + }, + "micro_accuracy": { + "0": 0.7724738035418837, + "1": 0.8552711391483683, + "2": 0.9668177024334987 + }, + "coverage": { + "0": 0.9274266878836099, + "1": 0.9369174812457377, + "2": 0.9699552928695916 + } + } + }, + { + "thresholds": [ + 0.32, + 0.32, + 0.34 + ], + "scores": { + "accuracy": { + "0": 0.8013881914660103, + "1": 0.9016524409830848, + "2": 0.8817267446769119 + }, + "precision": { + "0": 0.453709951521567, + "1": 0.49297343761660045, + "2": 0.3483860648833396 + }, + "recall": { + "0": 0.7196159172447888, + "1": 0.8092173408465396, + "2": 0.8503261568109047 + }, + "f1": { + "0": 0.406496499796794, + "1": 0.4691130078063828, + "2": 0.3532660659781026 + }, + "micro_accuracy": { + "0": 0.7745955489857929, + "1": 0.8574358766068926, + "2": 0.9686379050120548 + }, + "coverage": { + "0": 0.9227097067515344, + "1": 0.9328066984920815, + "2": 0.9664507084943548 + } + } + }, + { + "thresholds": [ + 0.34, + 0.34, + 0.36 + ], + "scores": { + "accuracy": { + "0": 0.8033671087380885, + "1": 0.9036544165403748, + "2": 0.8852853417209576 + }, + "precision": { + "0": 0.46266550747394874, + "1": 0.5006997289279373, + "2": 0.35645658525044965 + }, + "recall": { + "0": 0.7177674144559312, + "1": 0.8081598604228669, + "2": 0.8493136802696281 + }, + "f1": { + "0": 0.41319613786232107, + "1": 0.4754941469750645, + "2": 0.360730185885486 + }, + "micro_accuracy": { + "0": 0.7768306777841988, + "1": 0.8595582386653342, + "2": 0.9702097516823422 + }, + "coverage": { + "0": 0.9178601197241797, + "1": 0.9288285216337047, + "2": 0.9627566871258619 + } + } + }, + { + "thresholds": [ + 0.36, + 0.36, + 0.38 + ], + "scores": { + "accuracy": { + "0": 0.8061159791694724, + "1": 0.9053191145421334, + "2": 0.8866350891254445 + }, + "precision": { + "0": 0.4753023599260483, + "1": 0.5137904005578058, + "2": 0.3645790123282969 + }, + "recall": { + "0": 0.7152197694537384, + "1": 0.8048293901429157, + "2": 0.8480231065130868 + }, + "f1": { + "0": 0.42088392191290896, + "1": 0.48394150506753747, + "2": 0.36824251204586056 + }, + "micro_accuracy": { + "0": 0.7789445286073007, + "1": 0.8618477681682174, + "2": 0.9720290771175727 + }, + "coverage": { + "0": 0.9128400394028946, + "1": 0.9243388648935364, + "2": 0.9590058346593923 + } + } + }, + { + "thresholds": [ + 0.38, + 0.38, + 0.4 + ], + "scores": { + "accuracy": { + "0": 0.8102718744255003, + "1": 0.9106335976620314, + "2": 0.8887590601223734 + }, + "precision": { + "0": 0.48026387830211076, + "1": 0.5205366724830406, + "2": 0.365497275421929 + }, + "recall": { + "0": 0.7133108958838734, + "1": 0.8025712905191771, + "2": 0.8469842965451629 + }, + "f1": { + "0": 0.4237305192158521, + "1": 0.48860497020747673, + "2": 0.3684940650876208 + }, + "micro_accuracy": { + "0": 0.781108443795011, + "1": 0.8640932685177556, + "2": 0.9735267308683073 + }, + "coverage": { + "0": 0.9074979161930742, + "1": 0.9196787148594378, + "2": 0.9560127301659468 + } + } + }, + { + "thresholds": [ + 0.4, + 0.4, + 0.42 + ], + "scores": { + "accuracy": { + "0": 0.8142029651733383, + "1": 0.9127337753893178, + "2": 0.8903954446245749 + }, + "precision": { + "0": 0.4894925400165572, + "1": 0.5263323086213255, + "2": 0.3843170320582827 + }, + "recall": { + "0": 0.7104877698259232, + "1": 0.7997681691598476, + "2": 0.8458356381290326 + }, + "f1": { + "0": 0.42963953139139893, + "1": 0.4925337110195625, + "2": 0.38610953189122915 + }, + "micro_accuracy": { + "0": 0.7829903401931961, + "1": 0.8656580499617113, + "2": 0.9751706026301653 + }, + "coverage": { + "0": 0.9020989618852769, + "1": 0.9153027203152232, + "2": 0.9521671592028491 + } + } + }, + { + "thresholds": [ + 0.40726801455020906, + 0.42, + 0.4348362550139427 + ], + "scores": { + "accuracy": { + "0": 0.814371421668353, + "1": 0.9147977310703275, + "2": 0.8913454793916152 + }, + "precision": { + "0": 0.49265026967526404, + "1": 0.5379319699416657, + "2": 0.38699608818993664 + }, + "recall": { + "0": 0.7094086191288954, + "1": 0.7978078655614076, + "2": 0.8449444533928958 + }, + "f1": { + "0": 0.4316444171880959, + "1": 0.5018266064292585, + "2": 0.3875062521496413 + }, + "micro_accuracy": { + "0": 0.7836422155373709, + "1": 0.8674621157004179, + "2": 0.9761572226656026 + }, + "coverage": { + "0": 0.9005266348412518, + "1": 0.9113245434568462, + "2": 0.9494582101992877 + } + } + }, + { + "thresholds": [ + 0.42, + 0.44, + 0.44 + ], + "scores": { + "accuracy": { + "0": 0.8165726597160966, + "1": 0.9172908680692804, + "2": 0.9320590302683619 + }, + "precision": { + "0": 0.4992309522216963, + "1": 0.5475470219890185, + "2": 0.38732556448234834 + }, + "recall": { + "0": 0.7082293689829622, + "1": 0.7966156419980953, + "2": 0.8445572067500937 + }, + "f1": { + "0": 0.43618024574507347, + "1": 0.5094742690804192, + "2": 0.38757340693724673 + }, + "micro_accuracy": { + "0": 0.785136704317534, + "1": 0.8694181043485526, + "2": 0.9764757568495886 + }, + "coverage": { + "0": 0.8972683185572479, + "1": 0.9069864363112828, + "2": 0.9486246874289611 + } + } + }, + { + "thresholds": [ + 0.44, + 0.46, + 0.46 + ], + "scores": { + "accuracy": { + "0": 0.818202698416671, + "1": 0.9187062744587372, + "2": 0.9333303723941576 + }, + "precision": { + "0": 0.5083246840838409, + "1": 0.5598411462238067, + "2": 0.39714760012361144 + }, + "recall": { + "0": 0.7061064471834975, + "1": 0.794747283616046, + "2": 0.8402737241890896 + }, + "f1": { + "0": 0.4421810224917585, + "1": 0.5195520475653899, + "2": 0.3959015737574555 + }, + "micro_accuracy": { + "0": 0.7873307975095093, + "1": 0.871444775868588, + "2": 0.9780272654370489 + }, + "coverage": { + "0": 0.8914715465636129, + "1": 0.9018337500947184, + "2": 0.9449117223611427 + } + } + }, + { + "thresholds": [ + 0.46, + 0.4721683979034424, + 0.48 + ], + "scores": { + "accuracy": { + "0": 0.8216528268918604, + "1": 0.9191271979155018, + "2": 0.9356936341534471 + }, + "precision": { + "0": 0.5197542840367871, + "1": 0.5646489743852565, + "2": 0.39848590943735746 + }, + "recall": { + "0": 0.7033856431369601, + "1": 0.7918106282071572, + "2": 0.8359966759326691 + }, + "f1": { + "0": 0.45005094795386347, + "1": 0.5221822984510738, + "2": 0.39591057599179935 + }, + "micro_accuracy": { + "0": 0.7895299830990736, + "1": 0.8725417869864891, + "2": 0.9796000563868136 + }, + "coverage": { + "0": 0.885485337576722, + "1": 0.898745927104645, + "2": 0.9406872774115329 + } + } + }, + { + "thresholds": [ + 0.48, + 0.48, + 0.5 + ], + "scores": { + "accuracy": { + "0": 0.8250727833287097, + "1": 0.921304494230147, + "2": 0.9403285848012863 + }, + "precision": { + "0": 0.5294065693297344, + "1": 0.5684430608972063, + "2": 0.39918063028234924 + }, + "recall": { + "0": 0.6980545289622085, + "1": 0.7914010398404115, + "2": 0.8315904635233705 + }, + "f1": { + "0": 0.45566964173481894, + "1": 0.5251583572397656, + "2": 0.3954566839294379 + }, + "micro_accuracy": { + "0": 0.7918713903973795, + "1": 0.8732605528221805, + "2": 0.9807342417013707 + }, + "coverage": { + "0": 0.8790634235053422, + "1": 0.897116768962643, + "2": 0.9370690308403425 + } + } + }, + { + "thresholds": [ + 0.5, + 0.5, + 0.52 + ], + "scores": { + "accuracy": { + "0": 0.8258764744309126, + "1": 0.9239423548854965, + "2": 0.9413572060575478 + }, + "precision": { + "0": 0.5371887096441423, + "1": 0.5773885750653416, + "2": 0.40359946510948885 + }, + "recall": { + "0": 0.693896845329986, + "1": 0.7889399287021546, + "2": 0.8299056827127178 + }, + "f1": { + "0": 0.45959939045256354, + "1": 0.5314216593392571, + "2": 0.39869109560731425 + }, + "micro_accuracy": { + "0": 0.7948094255619502, + "1": 0.8755947323704333, + "2": 0.9821124015268415 + }, + "coverage": { + "0": 0.8722626354474502, + "1": 0.8918693642494506, + "2": 0.9330150791846632 + } + } + }, + { + "thresholds": [ + 0.52, + 0.52, + 0.54 + ], + "scores": { + "accuracy": { + "0": 0.8278567132033317, + "1": 0.9254899098874031, + "2": 0.9458681438289553 + }, + "precision": { + "0": 0.5475253505950252, + "1": 0.5905135861117196, + "2": 0.423434024635639 + }, + "recall": { + "0": 0.691673753255708, + "1": 0.7867644745546887, + "2": 0.8057073351862506 + }, + "f1": { + "0": 0.46647619773128607, + "1": 0.5418630290818433, + "2": 0.4092956877918488 + }, + "micro_accuracy": { + "0": 0.7980899811626583, + "1": 0.8780133356129253, + "2": 0.9833713726768829 + }, + "coverage": { + "0": 0.8648556490111389, + "1": 0.8864135788436766, + "2": 0.9296052133060544 + } + } + }, + { + "thresholds": [ + 0.54, + 0.54, + 0.56 + ], + "scores": { + "accuracy": { + "0": 0.8297028621027938, + "1": 0.926765421807196, + "2": 0.9464879313570388 + }, + "precision": { + "0": 0.5626650435675139, + "1": 0.6081904664846746, + "2": 0.42486752399223343 + }, + "recall": { + "0": 0.686856842117402, + "1": 0.782932191397333, + "2": 0.8026342561437356 + }, + "f1": { + "0": 0.4760733446836429, + "1": 0.5553838361820364, + "2": 0.4093211170854322 + }, + "micro_accuracy": { + "0": 0.8016496030780798, + "1": 0.8805832132642308, + "2": 0.9843072264506098 + }, + "coverage": { + "0": 0.8566909146018035, + "1": 0.8809009623399258, + "2": 0.925892248238236 + } + } + }, + { + "thresholds": [ + 0.56, + 0.56, + 0.58 + ], + "scores": { + "accuracy": { + "0": 0.8341827562067438, + "1": 0.9289461100033847, + "2": 0.9480548438988666 + }, + "precision": { + "0": 0.5737812635528933, + "1": 0.6197140139591367, + "2": 0.43547720360620623 + }, + "recall": { + "0": 0.6831795653950545, + "1": 0.7808420980116791, + "2": 0.8009834173515145 + }, + "f1": { + "0": 0.48277968610449334, + "1": 0.564002359186121, + "2": 0.4186556387807235 + }, + "micro_accuracy": { + "0": 0.8043720722730314, + "1": 0.8827716003980444, + "2": 0.9851546137735616 + }, + "coverage": { + "0": 0.849246040766841, + "1": 0.8756914450253845, + "2": 0.9225960445555809 + } + } + }, + { + "thresholds": [ + 0.5642488598823548, + 0.58, + 0.6 + ], + "scores": { + "accuracy": { + "0": 0.8343967507844856, + "1": 0.9296693535248078, + "2": 0.9500768780238483 + }, + "precision": { + "0": 0.576766466944545, + "1": 0.6325941970062141, + "2": 0.43934306877275126 + }, + "recall": { + "0": 0.6817380832627986, + "1": 0.7771235868551002, + "2": 0.7991651235752025 + }, + "f1": { + "0": 0.48445702278574443, + "1": 0.5726753101536495, + "2": 0.42043376133080945 + }, + "micro_accuracy": { + "0": 0.8049429063037697, + "1": 0.8847526217309951, + "2": 0.9861062439446724 + }, + "coverage": { + "0": 0.8477494885201182, + "1": 0.870690308403425, + "2": 0.9189777979843904 + } + } + }, + { + "thresholds": [ + 0.58, + 0.6, + 0.62 + ], + "scores": { + "accuracy": { + "0": 0.840016542849061, + "1": 0.9304978229804818, + "2": 0.9513026650344162 + }, + "precision": { + "0": 0.5827800373403128, + "1": 0.6373570707159779, + "2": 0.45620187988519756 + }, + "recall": { + "0": 0.676394741560293, + "1": 0.7740104276669912, + "2": 0.797676589317333 + }, + "f1": { + "0": 0.48580643509897997, + "1": 0.5750553951542571, + "2": 0.435166670753753 + }, + "micro_accuracy": { + "0": 0.8068557547403226, + "1": 0.8865491955784174, + "2": 0.9870237380740495 + }, + "coverage": { + "0": 0.8422179283170418, + "1": 0.8654429036902326, + "2": 0.9153406077138744 + } + } + }, + { + "thresholds": [ + 0.6, + 0.62, + 0.64 + ], + "scores": { + "accuracy": { + "0": 0.8434050884702118, + "1": 0.9334972883429207, + "2": 0.9518665592286801 + }, + "precision": { + "0": 0.5924877077608144, + "1": 0.6497495342411421, + "2": 0.45932648178267177 + }, + "recall": { + "0": 0.67335275941804, + "1": 0.7712223146170564, + "2": 0.7941774654119973 + }, + "f1": { + "0": 0.4912442056663382, + "1": 0.5839091456019678, + "2": 0.4360227184902962 + }, + "micro_accuracy": { + "0": 0.8090269902472216, + "1": 0.8884875448758892, + "2": 0.9879683311514245 + }, + "coverage": { + "0": 0.8352277032658938, + "1": 0.8601007804804122, + "2": 0.9116276426460559 + } + } + }, + { + "thresholds": [ + 0.62, + 0.64, + 0.66 + ], + "scores": { + "accuracy": { + "0": 0.8453515960940717, + "1": 0.9349890148369837, + "2": 0.9503677505486245 + }, + "precision": { + "0": 0.6004984612137487, + "1": 0.6580445727308348, + "2": 0.459554988014946 + }, + "recall": { + "0": 0.6672070956028153, + "1": 0.7671891885765426, + "2": 0.7889250953405956 + }, + "f1": { + "0": 0.4937547279284535, + "1": 0.5884020800330996, + "2": 0.4346883335571761 + }, + "micro_accuracy": { + "0": 0.8117420949068778, + "1": 0.8905512334596716, + "2": 0.9886522455620684 + }, + "coverage": { + "0": 0.8279533227248617, + "1": 0.8546828824732894, + "2": 0.9081420019701447 + } + } + }, + { + "thresholds": [ + 0.64, + 0.66, + 0.68 + ], + "scores": { + "accuracy": { + "0": 0.849510905460206, + "1": 0.941167926018317, + "2": 0.9517455996214104 + }, + "precision": { + "0": 0.6110614384928408, + "1": 0.6667159016221129, + "2": 0.4739752602875825 + }, + "recall": { + "0": 0.6622471197486555, + "1": 0.760417751338982, + "2": 0.7860720751349883 + }, + "f1": { + "0": 0.49888280813554536, + "1": 0.592116152062726, + "2": 0.44573157867046714 + }, + "micro_accuracy": { + "0": 0.8139336317902801, + "1": 0.8923601819641424, + "2": 0.9894403821575981 + }, + "coverage": { + "0": 0.820906266575737, + "1": 0.8495112525573995, + "2": 0.9041638251117678 + } + } + }, + { + "thresholds": [ + 0.66, + 0.6641409486532212, + 0.7000000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8530784254621185, + "1": 0.9413540245413293, + "2": 0.9519731134663748 + }, + "precision": { + "0": 0.6200853636129756, + "1": 0.6684306475816483, + "2": 0.47640811297769775 + }, + "recall": { + "0": 0.6573378313172051, + "1": 0.7600138308687868, + "2": 0.7840505827382493 + }, + "f1": { + "0": 0.5028067961767968, + "1": 0.5933555345224482, + "2": 0.4460861412747428 + }, + "micro_accuracy": { + "0": 0.8159694755944349, + "1": 0.892621944413439, + "2": 0.9901108843394281 + }, + "coverage": { + "0": 0.8142380844131242, + "1": 0.8485830112904448, + "2": 0.9003371978479957 + } + } + }, + { + "thresholds": [ + 0.68, + 0.68, + 0.72 + ], + "scores": { + "accuracy": { + "0": 0.8565870875685644, + "1": 0.9433004359366995, + "2": 0.9536276956716655 + }, + "precision": { + "0": 0.6302499175365239, + "1": 0.6747260623600524, + "2": 0.5037151109795719 + }, + "recall": { + "0": 0.6534541243833436, + "1": 0.7576792507787716, + "2": 0.7801491039086691 + }, + "f1": { + "0": 0.5070833858574163, + "1": 0.5956940628128364, + "2": 0.4651625807682649 + }, + "micro_accuracy": { + "0": 0.818482622673832, + "1": 0.8941469210249053, + "2": 0.9909058223885964 + }, + "coverage": { + "0": 0.8072478593619762, + "1": 0.8450594832158824, + "2": 0.8957149352125483 + } + } + }, + { + "thresholds": [ + 0.7000000000000001, + 0.7000000000000001, + 0.7265320539474488 + ], + "scores": { + "accuracy": { + "0": 0.8607155124745121, + "1": 0.945030910750408, + "2": 0.9550453730370514 + }, + "precision": { + "0": 0.6454744315883106, + "1": 0.6894534142252635, + "2": 0.503873671253715 + }, + "recall": { + "0": 0.6492096741301047, + "1": 0.754679270016291, + "2": 0.7795729848430055 + }, + "f1": { + "0": 0.5152711842533374, + "1": 0.6053073134285726, + "2": 0.4650402150631324 + }, + "micro_accuracy": { + "0": 0.8214980314026848, + "1": 0.8965338150615333, + "2": 0.9912304857124701 + }, + "coverage": { + "0": 0.7987042509661286, + "1": 0.8389217246343866, + "2": 0.8943131014624536 + } + } + }, + { + "thresholds": [ + 0.7015465497970581, + 0.72, + 0.74 + ], + "scores": { + "accuracy": { + "0": 0.860684518603136, + "1": 0.9464961406955328, + "2": 0.9552600432937275 + }, + "precision": { + "0": 0.6478672204501922, + "1": 0.7034869583318902, + "2": 0.5181285778325745 + }, + "recall": { + "0": 0.6485348615879072, + "1": 0.7496591280792626, + "2": 0.7779193775717113 + }, + "f1": { + "0": 0.5162958921527044, + "1": 0.6129431266588365, + "2": 0.4767210562684453 + }, + "micro_accuracy": { + "0": 0.8218049753133309, + "1": 0.8982808022922636, + "2": 0.9915828851999064 + }, + "coverage": { + "0": 0.7980601651890581, + "1": 0.8330302341441237, + "2": 0.8912442221717057 + } + } + }, + { + "thresholds": [ + 0.72, + 0.74, + 0.76 + ], + "scores": { + "accuracy": { + "0": 0.8627696913793397, + "1": 0.9504155038731678, + "2": 0.9566545408328925 + }, + "precision": { + "0": 0.6602730541638716, + "1": 0.7157350696610114, + "2": 0.5458928751562709 + }, + "recall": { + "0": 0.6446075775342126, + "1": 0.7466807871477184, + "2": 0.7749523569592671 + }, + "f1": { + "0": 0.5216387963076135, + "1": 0.621315833375916, + "2": 0.5009516162942736 + }, + "micro_accuracy": { + "0": 0.8236083487095924, + "1": 0.9000274838532363, + "2": 0.9922871488088879 + }, + "coverage": { + "0": 0.7905395165567932, + "1": 0.8271197999545351, + "2": 0.8866598469349094 + } + } + }, + { + "thresholds": [ + 0.74, + 0.76, + 0.78 + ], + "scores": { + "accuracy": { + "0": 0.8660094924837376, + "1": 0.9555635348434637, + "2": 0.9567270155114911 + }, + "precision": { + "0": 0.6696387429318983, + "1": 0.7246432737278267, + "2": 0.561379117244237 + }, + "recall": { + "0": 0.639112569953864, + "1": 0.7387340909983309, + "2": 0.7711916626337704 + }, + "f1": { + "0": 0.5237697832934405, + "1": 0.6233625307746671, + "2": 0.5132983314590772 + }, + "micro_accuracy": { + "0": 0.8257586757659359, + "1": 0.9020753018306055, + "2": 0.9930175099366205 + }, + "coverage": { + "0": 0.782791543532621, + "1": 0.8206221110858528, + "2": 0.8817344851102523 + } + } + }, + { + "thresholds": [ + 0.76, + 0.78, + 0.8 + ], + "scores": { + "accuracy": { + "0": 0.8681478259083769, + "1": 0.9557905396242385, + "2": 0.9573925336101781 + }, + "precision": { + "0": 0.6861951645200371, + "1": 0.7314738899655855, + "2": 0.5630824718743183 + }, + "recall": { + "0": 0.6327669329140457, + "1": 0.7344038157698674, + "2": 0.7683558773208468 + }, + "f1": { + "0": 0.531605423621865, + "1": 0.6234757508922391, + "2": 0.5131618146455549 + }, + "micro_accuracy": { + "0": 0.8284525993883792, + "1": 0.9036899080433012, + "2": 0.9936265825519596 + }, + "coverage": { + "0": 0.774323709934076, + "1": 0.8137266045313328, + "2": 0.8768280669849208 + } + } + }, + { + "thresholds": [ + 0.78, + 0.8, + 0.8200000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8679002098990244, + "1": 0.9561499239845278, + "2": 0.9615148807994387 + }, + "precision": { + "0": 0.6962093718459521, + "1": 0.7446893933030373, + "2": 0.5663125555899495 + }, + "recall": { + "0": 0.6263089062067271, + "1": 0.7287505110170497, + "2": 0.7641250150122423 + }, + "f1": { + "0": 0.5339012693977214, + "1": 0.6315307401552623, + "2": 0.5132892137065024 + }, + "micro_accuracy": { + "0": 0.8303677636796194, + "1": 0.9052683476545993, + "2": 0.9942804949655307 + }, + "coverage": { + "0": 0.7644161551867849, + "1": 0.8068879290747897, + "2": 0.8710881260892627 + } + } + }, + { + "thresholds": [ + 0.8, + 0.8173000812530518, + 0.84 + ], + "scores": { + "accuracy": { + "0": 0.8687396782055973, + "1": 0.9574296850635112, + "2": 0.9617420148999293 + }, + "precision": { + "0": 0.711926533395416, + "1": 0.7612636352496397, + "2": 0.6182481616565773 + }, + "recall": { + "0": 0.6187323253658831, + "1": 0.72413085327449, + "2": 0.7613421559232516 + }, + "f1": { + "0": 0.539196599080422, + "1": 0.640414254426473, + "2": 0.5580319442335372 + }, + "micro_accuracy": { + "0": 0.832396486825596, + "1": 0.9068231841526045, + "2": 0.9947650859708684 + }, + "coverage": { + "0": 0.7549064181253315, + "1": 0.8004281276047587, + "2": 0.8648745927104645 + } + } + }, + { + "thresholds": [ + 0.810045599937439, + 0.8200000000000001, + 0.86 + ], + "scores": { + "accuracy": { + "0": 0.870699432932174, + "1": 0.9576547962600784, + "2": 0.9597191423643536 + }, + "precision": { + "0": 0.7202958483088095, + "1": 0.7632958223032213, + "2": 0.6411675634636241 + }, + "recall": { + "0": 0.614955089315207, + "1": 0.7235081828489902, + "2": 0.7540666573688601 + }, + "f1": { + "0": 0.5407977871279015, + "1": 0.6417176885877567, + "2": 0.5736994601267553 + }, + "micro_accuracy": { + "0": 0.8334385654754388, + "1": 0.9070654879002631, + "2": 0.9954282432969654 + }, + "coverage": { + "0": 0.7500757747973024, + "1": 0.7992536182465712, + "2": 0.8577328180647117 + } + } + }, + { + "thresholds": [ + 0.8200000000000001, + 0.84, + 0.88 + ], + "scores": { + "accuracy": { + "0": 0.873212719635245, + "1": 0.9588407072548629, + "2": 0.9582128582385835 + }, + "precision": { + "0": 0.7284264060103924, + "1": 0.7840804997993491, + "2": 0.6636061023610282 + }, + "recall": { + "0": 0.6093998487827893, + "1": 0.7176342465242725, + "2": 0.7425988016566217 + }, + "f1": { + "0": 0.540960548228617, + "1": 0.6511774276013057, + "2": 0.5872782340256574 + }, + "micro_accuracy": { + "0": 0.8345155467419215, + "1": 0.9089820646057326, + "2": 0.995900543623563 + }, + "coverage": { + "0": 0.7451125255739941, + "1": 0.7911078275365614, + "2": 0.8502690005304235 + } + } + }, + { + "thresholds": [ + 0.8280269503593445, + 0.86, + 0.8882197618484498 + ], + "scores": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9597750860913724, + "2": 0.9583659280353924 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8044117951579158, + "2": 0.6637474101835045 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.707563243940928, + "2": 0.7409207458226198 + }, + "f1": { + "0": 0.5430735533140526, + "1": 0.6588712967338904, + "2": 0.5865824425722952 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.9106740620534308, + "2": 0.9959968690595997 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7821285140562249, + "2": 0.8470675153443965 + } + } + }, + { + "thresholds": [ + 0.84, + 0.8708856105804443, + 0.9 + ], + "scores": { + "accuracy": { + "0": 0.8769224490575912, + "1": 0.9629823236784678, + "2": 0.9645260385390046 + }, + "precision": { + "0": 0.7442543157731273, + "1": 0.8168891977985718, + "2": 0.6639873022110607 + }, + "recall": { + "0": 0.6014535765299508, + "1": 0.703150166196618, + "2": 0.7368696388075908 + }, + "f1": { + "0": 0.5437236656636083, + "1": 0.6655370235633968, + "2": 0.5848466217757495 + }, + "micro_accuracy": { + "0": 0.8371924933529518, + "1": 0.911799848813675, + "2": 0.9964420023870111 + }, + "coverage": { + "0": 0.7338599681745851, + "1": 0.7768621656437069, + "2": 0.8412328559521103 + } + } + }, + { + "thresholds": [ + 0.86, + 0.88, + 0.92 + ], + "scores": { + "accuracy": { + "0": 0.8792286866477582, + "1": 0.9657786887953099, + "2": 0.9646760912453242 + }, + "precision": { + "0": 0.7589793036489415, + "1": 0.8287011609081786, + "2": 0.686966461932264 + }, + "recall": { + "0": 0.5923447925665252, + "1": 0.6962414785381901, + "2": 0.7290134169926065 + }, + "f1": { + "0": 0.546687692148275, + "1": 0.6696744629969015, + "2": 0.6007366943693582 + }, + "micro_accuracy": { + "0": 0.8397814724345336, + "1": 0.9129708756937283, + "2": 0.9968965359864908 + }, + "coverage": { + "0": 0.7212434644237327, + "1": 0.7714253239372585, + "2": 0.8301507918466318 + } + } + }, + { + "thresholds": [ + 0.88, + 0.9, + 0.9400000000000001 + ], + "scores": { + "accuracy": { + "0": 0.8881939767019219, + "1": 0.9670996231033473, + "2": 0.9781653526457934 + }, + "precision": { + "0": 0.7851414291925571, + "1": 0.8436053547004757, + "2": 0.6909003493431481 + }, + "recall": { + "0": 0.58282573774426, + "1": 0.685594659899926, + "2": 0.7172838569843555 + }, + "f1": { + "0": 0.5556807211623839, + "1": 0.6721140489488696, + "2": 0.5959725420201509 + }, + "micro_accuracy": { + "0": 0.8430232558139535, + "1": 0.9147536080161519, + "2": 0.9975379183796715 + }, + "coverage": { + "0": 0.707054633628855, + "1": 0.7600022732439191, + "2": 0.8155830870652421 + } + } + }, + { + "thresholds": [ + 0.8937377750873566, + 0.9172637760639191, + 0.9589176177978515 + ], + "scores": { + "accuracy": { + "0": 0.8909743658123396, + "1": 0.9679024780389913, + "2": 0.9914099927551457 + }, + "precision": { + "0": 0.7999819927343933, + "1": 0.8571761492520562, + "2": 0.7392934423661511 + }, + "recall": { + "0": 0.5776174738700263, + "1": 0.6747444387942375, + "2": 0.7049905252823764 + }, + "f1": { + "0": 0.5596097287337237, + "1": 0.67482540891783, + "2": 0.6097549468736347 + }, + "micro_accuracy": { + "0": 0.8448744428742254, + "1": 0.9163794851003446, + "2": 0.9980728968405025 + }, + "coverage": { + "0": 0.697052360384936, + "1": 0.7475941501856482, + "2": 0.7962415700538001 + } + } + }, + { + "thresholds": [ + 0.9, + 0.92, + 0.96 + ], + "scores": { + "accuracy": { + "0": 0.8949919585301784, + "1": 0.9681021829095615, + "2": 0.9933949494814979 + }, + "precision": { + "0": 0.8020716238964553, + "1": 0.8573629012800298, + "2": 0.739312514650181 + }, + "recall": { + "0": 0.5711452405107444, + "1": 0.6734312365614762, + "2": 0.7043557897606709 + }, + "f1": { + "0": 0.5550549519629179, + "1": 0.6738503870324001, + "2": 0.609419602563795 + }, + "micro_accuracy": { + "0": 0.8456756312647203, + "1": 0.9167788986862501, + "2": 0.9981407322654462 + }, + "coverage": { + "0": 0.6917102371751156, + "1": 0.7454913995605061, + "2": 0.7947260741077518 + } + } + }, + { + "thresholds": [ + 0.92, + 0.9400000000000001, + 0.966471254825592 + ], + "scores": { + "accuracy": { + "0": 0.8957767835624498, + "1": 0.9726542438470203, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.8182594626456583, + "1": 0.8735618842739201, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.5554809343411186, + "1": 0.6574712200821651, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5520059255576415, + "1": 0.6714835135094154, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8480121635319293, + "1": 0.9198406706412225, + "2": 0.998285935010381 + }, + "coverage": { + "0": 0.6728044252481624, + "1": 0.727646434795787, + "2": 0.7846859134651815 + } + } + }, + { + "thresholds": [ + 0.9400000000000001, + 0.96, + 0.98 + ], + "scores": { + "accuracy": { + "0": 0.9013505089477285, + "1": 0.9752950677587091, + "2": 0.9956956033513816 + }, + "precision": { + "0": 0.8456499151805978, + "1": 0.8964360610911901, + "2": 0.7904686497581408 + }, + "recall": { + "0": 0.5339801666958917, + "1": 0.63426965311141, + "2": 0.6714464744415302 + }, + "f1": { + "0": 0.5471785556062708, + "1": 0.6676929300709147, + "2": 0.6328377333948696 + }, + "micro_accuracy": { + "0": 0.8512177337027855, + "1": 0.9229085603112841, + "2": 0.9986497299459892 + }, + "coverage": { + "0": 0.6494847313783436, + "1": 0.7010684246419641, + "2": 0.7575964234295673 + } + } + }, + { + "thresholds": [ + 0.9401487052440644, + 0.9626085698604585, + 0.9830389022827148 + ], + "scores": { + "accuracy": { + "0": 0.9013489509973637, + "1": 0.9752962778710735, + "2": 0.9957223420416491 + }, + "precision": { + "0": 0.8456525277037532, + "1": 0.9022078884997011, + "2": 0.8538413755473735 + }, + "recall": { + "0": 0.5338394045510066, + "1": 0.6313432782731246, + "2": 0.6646996767339038 + }, + "f1": { + "0": 0.5470732974105376, + "1": 0.6691753900168186, + "2": 0.6771703021147755 + }, + "micro_accuracy": { + "0": 0.8512736716174024, + "1": 0.9235498966155186, + "2": 0.9987338246093849 + }, + "coverage": { + "0": 0.6492195195877851, + "1": 0.6962946124119118, + "2": 0.7480677426687884 + } + } + }, + { + "thresholds": [ + 0.96, + 0.98, + 0.9931254148483276 + ], + "scores": { + "accuracy": { + "0": 0.9008028366870268, + "1": 0.9771462948998824, + "2": 0.9962749640577209 + }, + "precision": { + "0": 0.868852213327367, + "1": 0.9254813608920299, + "2": 0.8964573727394919 + }, + "recall": { + "0": 0.5045919142349061, + "1": 0.5924477978591141, + "2": 0.6286837426567555 + }, + "f1": { + "0": 0.5343229886512725, + "1": 0.6506375298796191, + "2": 0.6802764870917095 + }, + "micro_accuracy": { + "0": 0.8550024612355402, + "1": 0.9283094075849918, + "2": 0.999044603373915 + }, + "coverage": { + "0": 0.6157460028794423, + "1": 0.6558498143517466, + "2": 0.6939834810941881 + } + } + }, + { + "thresholds": [ + 0.9681806206703186, + 0.9829536110162734, + 0.9967779815196992 + ], + "scores": { + "accuracy": { + "0": 0.9076420542603991, + "1": 0.9778373458608859, + "2": 0.9963513658138929 + }, + "precision": { + "0": 0.8800516658493764, + "1": 0.9339767231608709, + "2": 0.9500987164349732 + }, + "recall": { + "0": 0.4910632013550715, + "1": 0.5819184449113037, + "2": 0.5992691077492797 + }, + "f1": { + "0": 0.5265140342387152, + "1": 0.6460356616121775, + "2": 0.6839936208490379 + }, + "micro_accuracy": { + "0": 0.8564268493845959, + "1": 0.9292641354178911, + "2": 0.9992665180143175 + }, + "coverage": { + "0": 0.59718117754035, + "1": 0.6446162006516633, + "2": 0.6456770478138971 + } + } + }, + { + "thresholds": [ + 0.98, + 0.9915003895759583, + 0.9984682559967042 + ], + "scores": { + "accuracy": { + "0": 0.9142480837593111, + "1": 0.9789690918523727, + "2": 0.9955358011469674 + }, + "precision": { + "0": 0.9054316601379209, + "1": 0.942373982004299, + "2": 0.9472329602333835 + }, + "recall": { + "0": 0.4601162131776475, + "1": 0.537128632439936, + "2": 0.5369684974795139 + }, + "f1": { + "0": 0.5080963898945071, + "1": 0.6099925087537343, + "2": 0.6232596136519938 + }, + "micro_accuracy": { + "0": 0.8611514926130025, + "1": 0.9341671944268525, + "2": 0.9992649878563211 + }, + "coverage": { + "0": 0.5603356823520497, + "1": 0.5982420247025839, + "2": 0.5927862392968098 + } + } + }, + { + "thresholds": [ + 0.9837145298719406, + 0.9961918264627456, + 0.9992004811763763 + ], + "scores": { + "accuracy": { + "0": 0.9173894958348995, + "1": 0.9801716842031851, + "2": 0.9956171015368966 + }, + "precision": { + "0": 0.9111944501471072, + "1": 0.9526417139935408, + "2": 0.9466402935737126 + }, + "recall": { + "0": 0.44637542453304024, + "1": 0.4860152539435413, + "2": 0.49936592815838055 + }, + "f1": { + "0": 0.49680678480018636, + "1": 0.5661640932159095, + "2": 0.5922292460696175 + }, + "micro_accuracy": { + "0": 0.8624076912358924, + "1": 0.9399216673660652, + "2": 0.9994779521804197 + }, + "coverage": { + "0": 0.5438357202394484, + "1": 0.5417140259149806, + "2": 0.5443093127225884 + } + } + }, + { + "thresholds": [ + 0.9909707605838776, + 0.9981474876403809, + 0.9995549917221069 + ], + "scores": { + "accuracy": { + "0": 0.9226732588389033, + "1": 0.9793237956348064, + "2": 0.9952654376772794 + }, + "precision": { + "0": 0.9261726468469372, + "1": 0.952780069889678, + "2": 0.9912468817743226 + }, + "recall": { + "0": 0.4040904903655869, + "1": 0.43426325079615746, + "2": 0.46421101098424783 + }, + "f1": { + "0": 0.46302311329384627, + "1": 0.5172729957093558, + "2": 0.5861461448813108 + }, + "micro_accuracy": { + "0": 0.8666056166056166, + "1": 0.9440741027827301, + "2": 0.9995410914375311 + }, + "coverage": { + "0": 0.4964764719254376, + "1": 0.48878532999924224, + "2": 0.49535879366522695 + } + } + }, + { + "thresholds": [ + 0.9953224390745163, + 0.9990358114242552, + 0.9997485339641571 + ], + "scores": { + "accuracy": { + "0": 0.9258440983335173, + "1": 0.981279466988423, + "2": 0.9991547170692637 + }, + "precision": { + "0": 0.9334567308683698, + "1": 0.9637883239225851, + "2": 0.9909366423707013 + }, + "recall": { + "0": 0.3583805534403548, + "1": 0.3942566981580702, + "2": 0.43320356126072573 + }, + "f1": { + "0": 0.42214170291497527, + "1": 0.4790830065745257, + "2": 0.5559982979186752 + }, + "micro_accuracy": { + "0": 0.8702950370402089, + "1": 0.9483896003104385, + "2": 0.9995318152798468 + }, + "coverage": { + "0": 0.4423922103508373, + "1": 0.4393612184587406, + "2": 0.4450822156550731 + } + } + }, + { + "thresholds": [ + 0.9975503087043761, + 0.9994596838951111, + 0.9998600482940674 + ], + "scores": { + "accuracy": { + "0": 0.9312329144191163, + "1": 0.9819044313738574, + "2": 0.9994197143975043 + }, + "precision": { + "0": 0.9373212181297006, + "1": 0.9660431290510416, + "2": 0.9898697504611537 + }, + "recall": { + "0": 0.3145284572888511, + "1": 0.3532791965360437, + "2": 0.3910182121031496 + }, + "f1": { + "0": 0.3776565680174864, + "1": 0.4390617579806251, + "2": 0.5126226031939918 + }, + "micro_accuracy": { + "0": 0.8752429071123202, + "1": 0.9521041506533435, + "2": 0.9996629105268227 + }, + "coverage": { + "0": 0.389937106918239, + "1": 0.39433204516177917, + "2": 0.39338486019549895 + } + } + }, + { + "thresholds": [ + 0.9987074375152587, + 0.9997126638889313, + 0.9999242186546324 + ], + "scores": { + "accuracy": { + "0": 0.9475809053982756, + "1": 0.9848708438702063, + "2": 0.9993413836634175 + }, + "precision": { + "0": 0.9519452900307181, + "1": 0.9657178541744774, + "2": 0.9860715961443066 + }, + "recall": { + "0": 0.2824123713134273, + "1": 0.31180289461222715, + "2": 0.3446676983681051 + }, + "f1": { + "0": 0.34523581308371754, + "1": 0.3948433440852503, + "2": 0.46298483021111675 + }, + "micro_accuracy": { + "0": 0.8809021219864459, + "1": 0.9570599613152805, + "2": 0.9996649167876689 + }, + "coverage": { + "0": 0.34102447525952867, + "1": 0.3427862392968099, + "2": 0.33920588012427066 + } + } + }, + { + "thresholds": [ + 0.9992964148521424, + 0.9998370170593261, + 0.9999558925628662 + ], + "scores": { + "accuracy": { + "0": 0.9452268457462674, + "1": 0.9825660745311098, + "2": 0.9992303661291769 + }, + "precision": { + "0": 0.9528131933515639, + "1": 0.9649247474174065, + "2": 0.9858947516748305 + }, + "recall": { + "0": 0.243935562331392, + "1": 0.26913270702486125, + "2": 0.31722180703378045 + }, + "f1": { + "0": 0.30341078843870073, + "1": 0.3478446447877839, + "2": 0.430965191751402 + }, + "micro_accuracy": { + "0": 0.8868495620814013, + "1": 0.9601636933307757, + "2": 0.9996102124342233 + }, + "coverage": { + "0": 0.29415776312798364, + "1": 0.29626051375312573, + "2": 0.29160036371902703 + } + } + }, + { + "thresholds": [ + 0.9996419548988341, + 0.9999200403690338, + 0.999974489212036 + ], + "scores": { + "accuracy": { + "0": 0.9420893176977566, + "1": 0.9845500541121588, + "2": 0.9992008966575969 + }, + "precision": { + "0": 0.9546981170307824, + "1": 0.966355454916321, + "2": 0.9844776002868147 + }, + "recall": { + "0": 0.20561108908174355, + "1": 0.21770495042482726, + "2": 0.28768501341099934 + }, + "f1": { + "0": 0.2601458228426709, + "1": 0.29022239076662526, + "2": 0.39653254996626364 + }, + "micro_accuracy": { + "0": 0.8978976657906941, + "1": 0.9637885186923197, + "2": 0.999614167759858 + }, + "coverage": { + "0": 0.24509358187466848, + "1": 0.24221413957717663, + "2": 0.24549139956050617 + } + } + }, + { + "thresholds": [ + 0.9998294591903688, + 0.9999610185623169, + 0.9999865055084228 + ], + "scores": { + "accuracy": { + "0": 0.9494354161129437, + "1": 0.9803022896161308, + "2": 0.9996192647871751 + }, + "precision": { + "0": 0.9562734814804871, + "1": 0.9628636594824845, + "2": 0.9914253441027162 + }, + "recall": { + "0": 0.16777048665618488, + "1": 0.16961054362513622, + "2": 0.24431723316021 + }, + "f1": { + "0": 0.21745764577817578, + "1": 0.23014525089138316, + "2": 0.3459416738939565 + }, + "micro_accuracy": { + "0": 0.9127856101118134, + "1": 0.9658886894075404, + "2": 0.9997084264748761 + }, + "coverage": { + "0": 0.19483594756384026, + "1": 0.18992952943850874, + "2": 0.19491172236114268 + } + } + }, + { + "thresholds": [ + 0.9999263703823089, + 0.9999795794486999, + 0.9999933242797852 + ], + "scores": { + "accuracy": { + "0": 0.9549007794281774, + "1": 0.9804634019892214, + "2": 0.9996446057200086 + }, + "precision": { + "0": 0.9587552453931764, + "1": 0.9695794480241675, + "2": 0.9970709091061251 + }, + "recall": { + "0": 0.1281579632885123, + "1": 0.13750461659283214, + "2": 0.15960422212144712 + }, + "f1": { + "0": 0.171261367588915, + "1": 0.1897352351749051, + "2": 0.24633039114224953 + }, + "micro_accuracy": { + "0": 0.9379743522638053, + "1": 0.9663023679417122, + "2": 0.9997366688610928 + }, + "coverage": { + "0": 0.1447677502462681, + "1": 0.14560127301659467, + "2": 0.14387739637796468 + } + } + }, + { + "thresholds": [ + 0.9999751806259155, + 0.9999914050102235, + 0.999996781349182 + ], + "scores": { + "accuracy": { + "0": 0.9586943465204335, + "1": 0.9737012523302664, + "2": 0.9994787206765261 + }, + "precision": { + "0": 0.9647220719391435, + "1": 0.9701425438596492, + "2": 0.9928221288515408 + }, + "recall": { + "0": 0.08783660917517165, + "1": 0.09667423765331769, + "2": 0.11801763526197206 + }, + "f1": { + "0": 0.12022555225276674, + "1": 0.13606838779478872, + "2": 0.18809733360001032 + }, + "micro_accuracy": { + "0": 0.9501900380076015, + "1": 0.9627279936558287, + "2": 0.9996194100856327 + }, + "coverage": { + "0": 0.09469955292869592, + "1": 0.0955520193983481, + "2": 0.09954913995605062 + } + } + }, + { + "thresholds": [ + 0.9999936163425446, + 0.9999970197677612, + 0.9999990463256836 + ], + "scores": { + "accuracy": { + "0": 0.9631740196078432, + "1": 0.9814009457861848, + "2": 0.9990448343079924 + }, + "precision": { + "0": 0.9755425002646344, + "1": 0.9828629032258065, + "2": 0.9811111111111112 + }, + "recall": { + "0": 0.05009631202973387, + "1": 0.05483541137016527, + "2": 0.07369236257631447 + }, + "f1": { + "0": 0.07155322295420898, + "1": 0.08111108089186914, + "2": 0.1213299090136771 + }, + "micro_accuracy": { + "0": 0.9424895951570186, + "1": 0.9501711677443895, + "2": 0.9992343032159265 + }, + "coverage": { + "0": 0.05006819731757218, + "1": 0.04980298552701372, + "2": 0.049480942638478444 + } + } + }, + { + "thresholds": [ + 1.0, + 1.0, + 1.0 + ], + "scores": { + "accuracy": { + "0": 0.95, + "1": 0.9723320158102766, + "2": 1.0 + }, + "precision": { + "0": 0.95, + "1": 0.9583333333333334, + "2": 1.0 + }, + "recall": { + "0": 0.001962286384242331, + "1": 0.002759801937539602, + "2": 0.02219090524518843 + }, + "f1": { + "0": 0.0036126928068550518, + "1": 0.005108670591177205, + "2": 0.03552886944676924 + }, + "micro_accuracy": { + "0": 0.8961038961038961, + "1": 0.9247311827956989, + "2": 1.0 + }, + "coverage": { + "0": 0.0014586648480715313, + "1": 0.0017617640372812003, + "2": 0.007122830946427218 + } + } + } + ] + } + }, + "tta_threshold_sensitivity": { + "torch-tta": { + "calibration_max_f1": 0.6347280058274741, + "operating_points": [ + { + "selected_by": "torch-tta", + "threshold": 0.7392672300338745, + "calibration": { + "precision": { + "0": 0.8282279025717098 + }, + "recall": { + "0": 0.6739933965102308 + }, + "f1": { + "0": 0.6307325978180466 + }, + "coverage": { + "0": 0.7845181134654818 + } + }, + "report": { + "precision": { + "0": 0.6694908268387493 + }, + "recall": { + "0": 0.639254202340642 + }, + "f1": { + "0": 0.523858147508227 + }, + "coverage": { + "0": 0.7831893612184587 + } + } + }, + { + "selected_by": "onnx-tta", + "threshold": 0.8280269503593445, + "calibration": { + "precision": { + "0": 0.8803141537986743 + }, + "recall": { + "0": 0.6376967556149961 + }, + "f1": { + "0": 0.633977006332856 + }, + "coverage": { + "0": 0.7406015037593985 + } + }, + "report": { + "precision": { + "0": 0.7366238061924407 + }, + "recall": { + "0": 0.6077235928880539 + }, + "f1": { + "0": 0.5433237416901201 + }, + "coverage": { + "0": 0.7405660377358491 + } + } + } + ] + }, + "onnx-tta": { + "calibration_max_f1": 0.6346849651181691, + "operating_points": [ + { + "selected_by": "torch-tta", + "threshold": 0.7392672300338745, + "calibration": { + "precision": { + "0": 0.8282279025717098 + }, + "recall": { + "0": 0.673688317354558 + }, + "f1": { + "0": 0.6305349204609847 + }, + "coverage": { + "0": 0.7843472317156528 + } + }, + "report": { + "precision": { + "0": 0.6696469729770929 + }, + "recall": { + "0": 0.6391918811108502 + }, + "f1": { + "0": 0.5238253429694868 + }, + "coverage": { + "0": 0.7829809805258771 + } + } + }, + { + "selected_by": "onnx-tta", + "threshold": 0.8280269503593445, + "calibration": { + "precision": { + "0": 0.8803141537986743 + }, + "recall": { + "0": 0.6377095021001528 + }, + "f1": { + "0": 0.6324462567697632 + }, + "coverage": { + "0": 0.7409432672590567 + } + }, + "report": { + "precision": { + "0": 0.7362820959348579 + }, + "recall": { + "0": 0.6075669492667327 + }, + "f1": { + "0": 0.5430735533140524 + }, + "coverage": { + "0": 0.7404902629385466 + } + } + } + ] + } + } +} diff --git a/docs/assets/mambo-threshold-comparison.svg b/docs/assets/mambo-threshold-comparison.svg new file mode 100644 index 0000000..50504fe --- /dev/null +++ b/docs/assets/mambo-threshold-comparison.svg @@ -0,0 +1,1779 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.262 + + + 0.259 + + + 0.259 + + + 0.300 + + + 0.301 + + + 0.447 + + + 0.508 + + + 0.510 + + + 0.524 + + + 0.543 + + + Species · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.697 + + + 0.708 + + + 0.705 + + + 0.783 + + + 0.740 + + + Species · Image coverage + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.321 + + + 0.323 + + + 0.324 + + + 0.360 + + + 0.360 + + + 0.587 + + + 0.602 + + + 0.604 + + + 0.666 + + + 0.666 + + + Genus · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.698 + + + 0.758 + + + 0.754 + + + 0.777 + + + 0.777 + + + Genus · Image coverage + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.270 + + + 0.280 + + + 0.281 + + + 0.297 + + + 0.297 + + + 0.655 + + + 0.581 + + + 0.582 + + + 0.607 + + + 0.607 + + + Family · Macro-F1 + + + + + + + + + + + + + + + V2 + + + + + + + + + + V3 + PyTorch + + + + + + + + + + V3 + ONNX + + + + + + + + + + PyTorch + + TTA + + + + + + + + + + ONNX + + TTA + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 1.000 + + + 0.774 + + + 0.731 + + + 0.733 + + + 0.787 + + + 0.785 + + + Family · Image coverage + + + + Threshold optimization · same reporting partition before and after + + + Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa. + mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank. + Calibration/report split is image-level; TTA was previously selected using a subset of Flemming. + + + + + + + Threshold zero + + + + + + Calibrated threshold + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-threshold-curves.svg b/docs/assets/mambo-threshold-curves.svg new file mode 100644 index 0000000..3206f06 --- /dev/null +++ b/docs/assets/mambo-threshold-curves.svg @@ -0,0 +1,3985 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Species + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Genus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Macro recall (all truth retained) + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Macro precision + + + + + + + + + + + + + + + + + + + + + + + + + Family + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + Image coverage + + + + + + + + + + + + + + 0.00 + + + + + + + + + + + + + 0.25 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.75 + + + + + + + + + + + + + 1.00 + + + + Micro accuracy among accepted + + + + + + + + + + + + + + + + + + + + + + + + + Family + + + + Confidence threshold trade-offs · circles: threshold 0 · stars: calibrated + + + Legacy northern Europe; same reporting images for all pipelines; all truth, including unknown taxa. + mini_metrics: Macro-F1 calibration on separate 10%; seed 42. Coverage = fraction of images accepted at each rank. + Calibration/report split is image-level; TTA was previously selected using a subset of Flemming. + + + + + + + MAMBO v2 + + + + + + V3 PyTorch + + + + + + V3 ONNX + + + + + + V3 PyTorch + TTA + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-threshold-metrics.csv b/docs/assets/mambo-threshold-metrics.csv new file mode 100644 index 0000000..7fd699f --- /dev/null +++ b/docs/assets/mambo-threshold-metrics.csv @@ -0,0 +1,91 @@ +model,rank,scope,threshold,accuracy,precision,recall,f1,micro_accuracy,theilU,coverage +v2,species,report_zero,0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444527,0.6871258619383193,0.9268446802176634,1.0 +v2,genus,report_zero,0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.3212885858575979,0.792225505796772,0.9293295014713818,1.0 +v2,family,report_zero,0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.2696839814067278,0.9454610896415853,0.8669636504107465,1.0 +v2,species,report_optimized,0.7484260499477386,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.44667552768137514,0.8340124966041836,0.9268446802176634,0.6973175721754944 +v2,genus,report_optimized,0.8759860098361969,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886132,0.9258405014517136,0.9293295014713818,0.6981321512464954 +v2,family,report_optimized,0.9553309082984924,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.7744373721300295 +v2,species,known_zero,0,0.7073027348676835,0.28480672905864074,0.7073027348676835,0.2693143628906898,0.7963467111618512,0.9292730961939166,1.0 +v2,genus,known_zero,0,0.7918398972587593,0.32348654616668093,0.7918398972587593,0.32179539408479596,0.7922405137628583,0.9293424074794282,1.0 +v2,family,known_zero,0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.2696839814067278,0.9454610896415853,0.8669636504107465,1.0 +v2,species,known_optimized,0.7484260499477386,0.8766863543952852,0.6554069382956795,0.5589457332057807,0.46704984507862823,0.9549286136427261,0.9292730961939166,0.7058268200579608 +v2,genus,known_optimized,0.8759860098361969,0.9565841131242125,0.7849689255774214,0.6195871424934829,0.588501193813758,0.9258656246608054,0.9293424074794282,0.6981264326444011 +v2,family,known_optimized,0.9553309082984924,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.7744373721300295 +v2,species,calibration_zero,0,0.7234356272559329,0.44773205659042525,0.7234356272559329,0.3992460838711431,0.6871155160628845,0.9495520172149795,1.0 +v2,genus,calibration_zero,0,0.8174898444279297,0.4838679824327559,0.8174898444279297,0.4620410630676452,0.7928913192071086,0.9531896899689808,1.0 +v2,family,calibration_zero,0,0.8654342469799546,0.4026920030783285,0.8654342469799546,0.4117679180319759,0.9401913875598086,0.8647477723749251,1.0 +v2,species,calibration_optimized,0.7484260499477386,0.888343995217596,0.807502621527049,0.5796937024197353,0.5456887340622165,0.8309273305603132,0.9495520172149795,0.6983937115516062 +v2,genus,calibration_optimized,0.8759860098361969,0.9732206219933451,0.9203715569385426,0.6560626942847588,0.6840498465459532,0.9286062378167641,0.9531896899689808,0.7012987012987013 +v2,family,calibration_optimized,0.9553309082984924,0.9998907975137955,0.9981361769132305,0.7033521890103556,0.7994593831472765,0.9995597622716267,0.8647477723749251,0.7763157894736842 +torch,species,report_zero,0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.2592869317361528,0.7077555505039024,0.9292211983468999,1.0 +torch,genus,report_zero,0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.32303518958457,0.7939683261347276,0.9278616328176507,1.0 +torch,family,report_zero,0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,1.0 +torch,species,report_optimized,0.8099595010280609,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044555,0.8338193199753886,0.9292211983468999,0.7081344244904145 +torch,genus,report_optimized,0.82109534740448,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725,0.9077246242716747,0.9278616328176507,0.7575395923315905 +torch,family,report_optimized,0.970800906419754,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289,0.997951563553389,0.8486962980431905,0.7305827081912556 +torch,species,known_zero,0,0.7361279236851337,0.2738542317578795,0.7361279236851337,0.26625840334333606,0.8202555545797839,0.9324282979117112,1.0 +torch,genus,known_zero,0,0.8078113869042769,0.32216140875960464,0.8078113869042769,0.3235133592367779,0.7939833671169038,0.9278762362942725,1.0 +torch,family,known_zero,0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,1.0 +torch,species,known_optimized,0.8099595010280609,0.8950879514853453,0.7274246435276156,0.5957207471891266,0.536222132076529,0.969125054412039,0.9324282979117112,0.7061122332484412 +torch,genus,known_optimized,0.82109534740448,0.9579612101608337,0.7455458647985177,0.6805239272946587,0.6035241537526418,0.9077473241972592,0.9278762362942725,0.7575349991475174 +torch,family,known_optimized,0.970800906419754,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289,0.997951563553389,0.8486962980431905,0.7305827081912556 +torch,species,calibration_zero,0,0.7431928073366078,0.44283216408639003,0.7431928073366078,0.4024595628388436,0.7084757347915243,0.954259253906316,1.0 +torch,genus,calibration_zero,0,0.8356042367797194,0.47899556907578955,0.8356042367797194,0.4663674702082115,0.7911825017088175,0.9534771364475659,1.0 +torch,family,calibration_zero,0,0.8492252662006303,0.3398730861115349,0.8492252662006303,0.34745500035047533,0.9284005468215994,0.8586883764262561,1.0 +torch,species,calibration_optimized,0.8099595010280609,0.9087050351179481,0.8482813983760845,0.6176015410523515,0.601488158405302,0.8334935127342624,0.954259253906316,0.7112098427887902 +torch,genus,calibration_optimized,0.82109534740448,0.973462276709025,0.8843100424805983,0.7189420501301624,0.7145410434590399,0.9085598741855763,0.9534771364475659,0.7605946684894054 +torch,family,calibration_optimized,0.970800906419754,0.9994922429367045,0.9029309874313405,0.7032656378963092,0.7261852919766372,0.9974648536529154,0.8586883764262561,0.741455912508544 +onnx,species,report_zero,0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.25936240461341,0.7078123816018792,0.9291859354966914,1.0 +onnx,genus,report_zero,0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159487,0.793949382435402,0.9278774326101347,1.0 +onnx,family,report_zero,0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213,0.9300409183905433,0.8489407553438706,1.0 +onnx,species,report_optimized,0.8161613345146179,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812272,0.8345029711489339,0.9291859354966914,0.7045351216185497 +onnx,genus,report_optimized,0.8301631808280945,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153,0.908581339231852,0.9278774326101347,0.7536561339698417 +onnx,family,report_optimized,0.9698503911495209,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.7325907403197697 +onnx,species,known_zero,0,0.7359438160598023,0.27389983335544515,0.7359438160598023,0.266315326129971,0.8203214191622025,0.9323702972359517,1.0 +onnx,genus,known_zero,0,0.8078688889251138,0.3230691966641643,0.8078688889251138,0.32493422231455543,0.7939644230587076,0.9278920368877236,1.0 +onnx,family,known_zero,0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213,0.9300409183905433,0.8489407553438706,1.0 +onnx,species,known_optimized,0.8161613345146179,0.8978307906255943,0.7337958308449367,0.5934880337746956,0.5382986298299348,0.9697840827422429,0.9323702972359517,0.7026214103802582 +onnx,genus,known_optimized,0.8301631808280945,0.958350348631966,0.752504050056499,0.6766713050103627,0.6059367197707097,0.9086041776638263,0.9278920368877236,0.7536514672173072 +onnx,family,known_optimized,0.9698503911495209,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.7325907403197697 +onnx,species,calibration_zero,0,0.7430789391063041,0.4435113545221054,0.7430789391063041,0.40300238516178827,0.7081339712918661,0.954116113510863,1.0 +onnx,genus,calibration_zero,0,0.8315920980901614,0.4756659977776627,0.8315920980901614,0.46306039720704983,0.7906698564593302,0.953655537431556,1.0 +onnx,family,calibration_zero,0,0.8491264519713813,0.3394307665358129,0.8491264519713813,0.3471036479087719,0.9282296650717703,0.8580508752393747,1.0 +onnx,species,calibration_optimized,0.8161613345146179,0.9122749701335368,0.8510626577154353,0.6156853061930037,0.6018573695717253,0.8340569223347805,0.954116113510863,0.7084757347915243 +onnx,genus,calibration_optimized,0.8301631808280945,0.973864726625716,0.8845032192436618,0.7124031638615914,0.7095377082146889,0.9093990058743787,0.953655537431556,0.7563226247436774 +onnx,family,calibration_optimized,0.9698503911495209,0.9994937740250923,0.9029315347725212,0.7039240888934983,0.7266095397411778,0.9974718455527465,0.8580508752393747,0.7435064935064936 +torch-tta,species,report_zero,0,0.7405864004487995,0.3117281910150932,0.7405864004487995,0.3001398043754676,0.7321360915359552,0.9416287278244636,1.0 +torch-tta,genus,report_zero,0,0.8312879946116835,0.3578921081808225,0.8312879946116835,0.3600905137263135,0.8163029476396151,0.9429697597956094,1.0 +torch-tta,family,report_zero,0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817,0.9478669394559369,0.8802152497213216,1.0 +torch-tta,species,report_optimized,0.7392672300338745,0.8659206758370823,0.6694908268387498,0.639254202340642,0.5238581475082266,0.8257020535519919,0.9416287278244636,0.7831893612184587 +torch-tta,genus,report_optimized,0.869922012090683,0.9627590640417357,0.8166841617561862,0.7031449724257084,0.6655108425187298,0.9116055761356989,0.9429697597956094,0.7772978707281958 +torch-tta,family,report_optimized,0.964760661125183,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.7874327498673941 +torch-tta,species,known_zero,0,0.764004152241647,0.3188318073270972,0.764004152241647,0.3101697044824459,0.8485114604373408,0.9441781207808398,1.0 +torch-tta,genus,known_zero,0,0.833877676837888,0.35795084878232625,0.833877676837888,0.3606630257586462,0.8163184117301608,0.9429838194118607,1.0 +torch-tta,family,known_zero,0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817,0.9478669394559369,0.8802152497213216,1.0 +torch-tta,species,known_optimized,0.7392672300338745,0.8932655392845691,0.6940179671454589,0.6594677739561563,0.5535005846842079,0.9623646820027063,0.9441781207808398,0.7787828225169052 +torch-tta,genus,known_optimized,0.869922012090683,0.9659260346471361,0.8168602180942144,0.7053354552058507,0.6673916212438911,0.9116277936194584,0.9429838194118607,0.7772936518460984 +torch-tta,family,known_optimized,0.964760661125183,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.7874327498673941 +torch-tta,species,calibration_zero,0,0.768414983363882,0.4839236475497513,0.768414983363882,0.4421948505193077,0.7294941900205059,0.9589075503757323,1.0 +torch-tta,genus,calibration_zero,0,0.8538124541139522,0.5172752120633655,0.8538124541139522,0.5029817114927149,0.8118591934381408,0.9605194779995736,1.0 +torch-tta,family,calibration_zero,0,0.8686121025173176,0.3828841637187067,0.8686121025173176,0.39248243176721537,0.9458304853041695,0.8896158193694642,1.0 +torch-tta,species,calibration_optimized,0.7392672300338745,0.8911752669559129,0.8282279025717094,0.6739933965102308,0.6307325978180464,0.8257460248311914,0.9589075503757323,0.7845181134654818 +torch-tta,genus,calibration_optimized,0.869922012090683,0.9779780541665041,0.9266086911891874,0.7404661738439429,0.757396958354487,0.9128238910847607,0.9605194779995736,0.7781954887218046 +torch-tta,family,calibration_optimized,0.964760661125183,0.9996369170022905,0.9496721741042599,0.7564679389414893,0.794600193920395,0.9982769760930433,0.8896158193694642,0.793403964456596 +onnx-tta,species,report_zero,0,0.7408884646998294,0.3129592874854792,0.7408884646998294,0.3011494930237334,0.7322118663332575,0.9416043541781303,1.0 +onnx-tta,genus,report_zero,0,0.831310673030869,0.35819829298724193,0.831310673030869,0.36048522644409975,0.8163029476396151,0.9429777628243508,1.0 +onnx-tta,family,report_zero,0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.297077819405652,0.9479237705539137,0.8802934722288728,1.0 +onnx-tta,species,report_optimized,0.8280269503593445,0.8755166405852203,0.7362820959348587,0.6075669492667327,0.5430735533140526,0.8355803422957866,0.9416043541781303,0.7404902629385466 +onnx-tta,genus,report_optimized,0.8708856105804443,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633968,0.911799848813675,0.9429777628243508,0.7768621656437069 +onnx-tta,family,report_optimized,0.966471254825592,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.7846859134651815 +onnx-tta,species,known_zero,0,0.7643157679314445,0.32010697284017264,0.7643157679314445,0.31123876107268367,0.8485992798805656,0.9441435804167174,1.0 +onnx-tta,genus,known_zero,0,0.8339004259063546,0.35825712113062574,0.8339004259063546,0.3610591777989773,0.8163184117301608,0.942991822846314,1.0 +onnx-tta,family,known_zero,0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.297077819405652,0.9479237705539137,0.8802934722288728,1.0 +onnx-tta,species,known_optimized,0.8280269503593445,0.9036381600900988,0.7641741013547309,0.6267785524056018,0.5758793313296239,0.9719676229020354,0.9441435804167174,0.7377711425309563 +onnx-tta,genus,known_optimized,0.8708856105804443,0.966150028690568,0.8170652541366,0.705340665156732,0.6674178728574118,0.9118220834959032,0.942991822846314,0.7768579385075871 +onnx-tta,family,known_optimized,0.966471254825592,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.7846859134651815 +onnx-tta,species,calibration_zero,0,0.7687701032394073,0.4847160695718284,0.7687701032394073,0.4430255135086433,0.7294941900205059,0.9588446607588915,1.0 +onnx-tta,genus,calibration_zero,0,0.8538124541139522,0.5184639515113375,0.8538124541139522,0.5041458550744518,0.8118591934381408,0.9603409164900499,1.0 +onnx-tta,family,calibration_zero,0,0.8685825691446063,0.3826107811942373,0.8685825691446063,0.39228445312410354,0.9456596035543404,0.8893754433031703,1.0 +onnx-tta,species,calibration_optimized,0.8280269503593445,0.9108463773306322,0.880314153798674,0.6377095021001528,0.6324462567697632,0.8357933579335793,0.9588446607588915,0.7409432672590567 +onnx-tta,genus,calibration_optimized,0.8708856105804443,0.9779606204147607,0.9266086911891874,0.7402264841524345,0.7572256161677625,0.912967032967033,0.9603409164900499,0.777511961722488 +onnx-tta,family,calibration_optimized,0.966471254825592,0.9996735638566714,0.9496688607549484,0.7548837775873369,0.7935862907114528,0.9984868136619109,0.8893754433031703,0.790498974709501 diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md new file mode 100644 index 0000000..59fb6be --- /dev/null +++ b/docs/mambo-confidence-thresholds.md @@ -0,0 +1,153 @@ +# Confidence thresholds and the MAMBO comparison + +Thresholding substantially changes the quality comparison, at the cost of rejecting +images. These results use **legacy northern Europe** for V2, V3 PyTorch/ONNX and +both V3 backends with padded-scale TTA. Deployment defaults remain threshold zero. + +## Method and interpretation + +Every predictive metric, threshold selection and dataset split uses the existing +`mini_metrics` machinery at revision `70cc69adc05362863439277048e06386c1f885e1`, +the same revision as the unthresholded comparison. No metric is reimplemented. + +- `MetricDF.split((0.9, 0.1), strata=("label",), seed=42)` yields **5,852 calibration + images and 52,788 reporting images**. Splitting groups all ranks by image ID. + Identity hashes verify identical partitions and truth across all five pipelines. +- `OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, + n_bootstraps=0)` selects one threshold per rank and pipeline on calibration only. + The package uses its exact F1 curve and connected near-optimal plateau selector; + “optimized” means the package's tolerance-based selection, not necessarily the + exact maximizer. Explicit results match `evaluate_file(optimal=True, seed=42)`. +- Both threshold-zero and calibrated scores below use **the same reporting partition**, + including unknown truth. Do not compare these directly with full-58,640-image + scores as though thresholding were the only difference. Full-data threshold-zero + scores were separately recomputed and matched the existing comparison. +- Coverage is `mini_metrics` image-level acceptance fraction, separately at each rank: + `confidence >= threshold`. It is not vocabulary coverage. Thresholds are independent + per rank; these are simple rank metrics (`hierarchical=False`), not an enforced + species-to-family fallback policy. +- Macro accuracy averages accuracy among accepted predictions within truth taxa, + excluding taxa with no accepted predictions. Micro accuracy is accuracy among + all accepted images. Recall retains rejected truth as misses; Macro-F1 also + penalizes rejection and includes truth-supported or retained predicted-only taxa. + Precision uses the package's predicted-class averaging. Always interpret rising + accuracy/precision with coverage and recall, especially near total rejection. + +This is a single image-level split, not observation/site-level validation or a +threshold stability study. TTA was selected earlier using a subset of Flemming; +this split does not make the entire model/TTA selection independently validated. +Threshold values are specific to these pipelines, confidence definitions and this +preset. They are candidate operating points, not universal deployment defaults. + +## Effect on the model comparison + +Calibration improves Macro-F1 for every pipeline at every rank, with reduced +coverage and recall. At species level, ordinary V3 moves ahead of V2 in Macro-F1; +with threshold zero, its F1 was slightly lower. TTA improves species and genus +Macro-F1 further. **Family reverses the unthresholded F1 ranking: V2 leads all V3 +variants after calibration** (0.6545 versus about 0.581 without TTA and 0.607 with +TTA). V3 + TTA retains more family recall than V2, so this is a trade-off rather +than uniform dominance. These operating points need not have equal coverage. + +![Macro-F1 and coverage before and after calibration](assets/mambo-threshold-comparison.svg) + +### Species + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.7484 | 0.2620 → 0.4467 | 69.73% | 84.65% | 83.40% | 0.6381 | 0.5418 | +| V3 PyTorch | 0.8100 | 0.2593 → 0.5081 | 70.81% | 86.69% | 83.38% | 0.7028 | 0.5775 | +| V3 ONNX | 0.8162 | 0.2594 → 0.5100 | 70.45% | 86.95% | 83.45% | 0.7089 | 0.5753 | +| V3 PyTorch + TTA | 0.7393 | 0.3001 → 0.5239 | 78.32% | 86.59% | 82.57% | 0.6695 | 0.6393 | +| V3 ONNX + TTA | 0.8280 | 0.3011 → 0.5431 | 74.05% | 87.55% | 83.56% | 0.7363 | 0.6076 | + +Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. + +### Genus + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.8760 | 0.3213 → 0.5869 | 69.81% | 95.34% | 92.58% | 0.7848 | 0.6177 | +| V3 PyTorch | 0.8211 | 0.3230 → 0.6019 | 75.75% | 95.48% | 90.77% | 0.7454 | 0.6784 | +| V3 ONNX | 0.8302 | 0.3245 → 0.6043 | 75.37% | 95.52% | 90.86% | 0.7523 | 0.6746 | +| V3 PyTorch + TTA | 0.8699 | 0.3601 → 0.6655 | 77.73% | 96.28% | 91.16% | 0.8167 | 0.7031 | +| V3 ONNX + TTA | 0.8709 | 0.3605 → 0.6655 | 77.69% | 96.30% | 91.18% | 0.8169 | 0.7032 | + +Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. + +### Family + +| Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | +|---|---:|---:|---:|---:|---:|---:|---:| +| MAMBO v2 | 0.9553 | 0.2697 → 0.6545 | 77.44% | 99.64% | 99.86% | 0.8413 | 0.6467 | +| V3 PyTorch | 0.9708 | 0.2805 → 0.5807 | 73.06% | 99.33% | 99.80% | 0.7406 | 0.6535 | +| V3 ONNX | 0.9699 | 0.2809 → 0.5816 | 73.26% | 99.33% | 99.80% | 0.7406 | 0.6549 | +| V3 PyTorch + TTA | 0.9648 | 0.2970 → 0.6073 | 78.74% | 99.56% | 99.82% | 0.7394 | 0.7002 | +| V3 ONNX + TTA | 0.9665 | 0.2971 → 0.6065 | 78.47% | 99.56% | 99.83% | 0.7395 | 0.6987 | + +Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. + +## TTA backend threshold sensitivity + +The selected species threshold differs substantially between PyTorch (0.7393) +and ONNX (0.8280). Applying **each threshold to both backends** isolates the effect: + +| Shared species threshold | PyTorch TTA Macro-F1 / coverage | ONNX TTA Macro-F1 / coverage | +|---|---:|---:| +| 0.7393 | 0.5239 / 78.32% | 0.5238 / 78.30% | +| 0.8280 | 0.5433 / 74.06% | 0.5431 / 74.05% | + +Both thresholds are within 0.01 of each backend's calibration maximum Macro-F1 +(about 0.6347). The package's near-optimal selector chooses different operating +points, while performance at shared thresholds is almost identical. The apparent +ONNX advantage in the calibrated species table is therefore chiefly a threshold +selection effect, not evidence of a better ONNX model. We retain the actual selected +values rather than choosing a new winner using the reporting data. This check +illustrates why threshold stability deserves validation before setting defaults. + +## Precision–recall and accuracy–coverage curves + +![Five-pipeline precision–recall and accuracy–coverage curves](assets/mambo-threshold-curves.svg) + +Left: macro precision versus macro recall for all five pipelines at each rank. +Right: accepted-image micro accuracy versus image coverage. ONNX curves are dashed. +Circles denote threshold +zero; stars denote the calibration-selected thresholds, evaluated on reporting data. +Comparing at similar coverage helps distinguish discrimination from more aggressive +rejection. The operating points optimize Macro-F1, not a common coverage target. + +These are **top-prediction rejection curves**, not one-vs-rest curves built from +every class probability, and no average-precision/AUC claim is made. Each plotted +point comes from `evaluate_file` on the reporting partition. The sampled grid uses +51 evenly spaced confidence thresholds, 21 calibration-confidence quantiles per +rank, and each selected threshold, with duplicates removed. Lines connect points +in threshold order without smoothing or a monotonic envelope; class membership +changes can make macro precision irregular. The optimizer itself uses the exact +calibration F1 curve, not this plotting grid. Undefined package results remain null. + +## Evidence and reproduction + +The [metric table](assets/mambo-threshold-metrics.csv) contains all/known-truth +reporting scores before and after thresholding, calibration scores, threshold +values, Theil U and coverage. Known-only scores reuse thresholds calibrated on all +truth; they do not recalibrate on a different population. The [compact evidence](assets/mambo-threshold-comparison.json) +also retains every curve point, source CSV hashes, partition hashes and full-data +threshold-zero checks. Predictions and inference speed are unchanged. + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.threshold_report \ + --evidence local-evidence --output local-evidence/mambo-threshold-study +.venv/bin/python -m dev.releases.mambo_v3.threshold_report \ + --data local-evidence/mambo-threshold-study/mambo-threshold-comparison.json \ + --output /tmp/mambo-threshold-charts +``` + +The collector uses the retained prediction directories named in `SOURCES` in +[the analysis script](../dev/releases/mambo_v3/threshold_report.py); those local +model outputs are not shipped in Git. The committed compact evidence can regenerate +the charts without predictions or model inference using `--data`. + +Before enabling calibrated thresholds in deployment, validate the intended +coverage/recall trade-off on the target workflow and define per-rank abstention or +fallback behavior. The current deployment CLI exposes one scalar threshold; these +three independently calibrated thresholds should not be silently substituted for it. diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index f3adad4..f51130d 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -108,6 +108,32 @@ all preset tables and all/known-truth charts. The [complete metric CSV](assets/m also retains precision, recall, Theil U and coverage. For legacy northern Europe, known truth contains 50,598 images at species, 58,639 at genus and 58,640 at family. +## Confidence threshold optimization + +Thresholding changes the comparison. Using `mini_metrics` Macro-F1 calibration on +5,852 images and reporting on the same remaining 52,788 images for every pipeline: + +| Pipeline | Species Macro-F1 / coverage | Genus Macro-F1 / coverage | Family Macro-F1 / coverage | +|---|---:|---:|---:| +| MAMBO v2 | 0.4467 / 69.73% | 0.5869 / 69.81% | 0.6545 / 77.44% | +| V3 PyTorch | 0.5081 / 70.81% | 0.6019 / 75.75% | 0.5807 / 73.06% | +| V3 ONNX | 0.5100 / 70.45% | 0.6043 / 75.37% | 0.5816 / 73.26% | +| V3 PyTorch + TTA | 0.5239 / 78.32% | 0.6655 / 77.73% | 0.6073 / 78.74% | +| V3 ONNX + TTA | 0.5431 / 74.05% | 0.6655 / 77.69% | 0.6065 / 78.47% | + +Ordinary V3 overtakes V2 on species Macro-F1 after calibration; TTA improves +species and genus further. **V2 leads calibrated family Macro-F1**, while V3 + TTA +retains more family recall. The different TTA species operating points largely +explain the backend F1 gap: at a shared threshold, PyTorch and ONNX remain closely +aligned. Higher accepted accuracy comes with abstention; coverage is the fraction +of images accepted independently at each rank. + +The [threshold study](mambo-confidence-thresholds.md) shows matched-partition +before/after metrics, exact thresholds, recall, coverage, and five-pipeline P–R and +accuracy–coverage curves for all three ranks. These 90% reporting scores are not +directly comparable with the full-data tables above. Deployment defaults remain +threshold zero; these are dataset-specific candidate operating points. + ## Inference speed and memory ![CPU and GPU throughput by batch size](assets/mambo-defaults-speed.svg) From d184bf77957115db94cc5eceffaf851dc1dbaaad Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 11:55:18 +0200 Subject: [PATCH 040/221] feat: explain predicted-only family effects on release metrics --- .../mambo_v3/family_precision_report.py | 160 + docs/assets/mambo-family-precision.csv | 913 + docs/assets/mambo-family-precision.json | 19758 ++++++++++++++++ docs/mambo-confidence-thresholds.md | 3 + docs/mambo-deployment-defaults.md | 4 +- docs/mambo-family-precision.md | 138 + tests/releases/test_release_evaluation.py | 26 + 7 files changed, 21001 insertions(+), 1 deletion(-) create mode 100644 dev/releases/mambo_v3/family_precision_report.py create mode 100644 docs/assets/mambo-family-precision.csv create mode 100644 docs/assets/mambo-family-precision.json create mode 100644 docs/mambo-family-precision.md diff --git a/dev/releases/mambo_v3/family_precision_report.py b/dev/releases/mambo_v3/family_precision_report.py new file mode 100644 index 0000000..d5c783b --- /dev/null +++ b/dev/releases/mambo_v3/family_precision_report.py @@ -0,0 +1,160 @@ +"""Audit predicted-only family contributions using pinned mini_metrics group outputs.""" + +import argparse +import csv +import importlib.metadata +import json +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.threshold_report import identity + + +def prepare_taxonomy(metadata, v2_path, v3_path): + """Read names and verify hierarchy identity without constructing a model.""" + import pyarrow.parquet as pq + import torch + + names = {} + for batch in pq.ParquetFile(metadata).iter_batches(columns=["familyKey", "family"], batch_size=500000): + columns = batch.to_pydict() + for key, name in zip(columns["familyKey"], columns["family"], strict=True): + if key is not None and name is not None: + key = str(int(key)) + if key in names and names[key] != name: + raise ValueError(f"Conflicting family name: {key}") + names[key] = name + state = torch.load(v2_path, map_location="cpu", weights_only=True) + classes = json.loads(v3_path.read_text()) + inverse = {k: {v: n for n, v in mapping.items()} for k, mapping in state["classifier._extra_state"]["cls2idx"].items()} + old = { + inverse["0"][i]: (inverse["1"][int(g)], inverse["2"][int(state["classifier.mask_1"][g])]) + for i, g in enumerate(state["classifier.mask_0"]) + } + new = { + n: (classes["labels"][1][g], classes["labels"][2][classes["parents"][1][g]]) + for n, g in zip(classes["labels"][0], classes["parents"][0], strict=True) + } + if old != new: + raise ValueError("V2/V3 taxonomy mappings differ") + active = [inverse["0"][i] for i in state["classifier.active_indices"].tolist()] + return { + "names": names, + "sources": {str(p): file_hash(p) for p in (metadata, v2_path, v3_path)}, + "taxonomy": { + "all_species_parent_mappings_identical": True, + "species": len(old), + "global_families": len(classes["labels"][2]), + "north_europe_families": sorted({old[n][1] for n in active}), + }, + } + + +def collect(study_path, taxonomy_path): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, MacroPrecision, MacroRecall, evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError("Use the pinned mini_metrics environment") + study = json.loads(study_path.read_text()) + taxonomy = json.loads(taxonomy_path.read_text()) + result = {"revision": REVISION, "study_sha256": file_hash(study_path), "taxonomy": taxonomy, "models": {}} + for model, source in study["models"].items(): + if file_hash(source["source"]) != source["source_sha256"]: + raise ValueError("Changed prediction source") + reporting, _ = MetricDF.from_source(source["source"]).split((0.9, 0.1), strata=("label",), seed=42) + if identity(reporting) != source["identities"]["report"]: + raise ValueError("Changed reporting partition") + family = reporting[reporting.level == 2] + rows = {} + for scope, threshold in (("zero", 0), ("optimized", source["thresholds"][2]), ("common_0.96", 0.96)): + data = family.with_threshold(threshold) + truth = Counter(map(str, data.label)) + accepted = np.asarray(data.prediction_made) + predicted = Counter(map(str, data.prediction[accepted])) + groups = {} + diagnostics = {} + for name, metric in (("precision", MacroPrecision()), ("recall", MacroRecall()), ("f1", MacroF1())): + values = metric(data, aggregate=False, verbose=0)[2] + groups[name] = finite_json(values) + # Reuse the package's aggregation, changing only which class groups enter it. + diagnostics[name] = float(metric._aggregate_groups({k: v for k, v in values.items() if str(k) in truth})) + official = finite_json( + evaluate_file(data, simple=True, hierarchical=False, pattern=r"^(precision|recall|f1|coverage|micro_accuracy)$", verbose=0) + ) + if scope != "common_0.96": + ref = source["report_zero" if scope == "zero" else "report_optimized"] + for metric, levels in official.items(): + if not np.isclose(levels["2"], ref[metric]["2"], atol=1e-12, rtol=0): + raise ValueError("Official metric changed") + pairs = Counter(zip(map(str, data.label[accepted]), map(str, data.prediction[accepted]), strict=True)) + rows[scope] = { + "threshold": threshold, + "images": len(data), + "accepted": int(accepted.sum()), + "truth_counts": dict(truth), + "predicted_counts": dict(predicted), + "official": official, + "truth_group_diagnostic": diagnostics, + "groups": groups, + "predicted_only": {k: v for k, v in predicted.items() if k not in truth}, + "truth_families_without_accepted_predictions": sorted(set(truth) - set(predicted)), + "false_positive_pairs": [{"truth": t, "prediction": p, "images": n} for (t, p), n in pairs.most_common() if t != p], + } + result["models"][model] = rows + return result + + +def export(data, output): + output.mkdir(parents=True, exist_ok=True) + write_json(output / "mambo-family-precision.json", data) + names = data["taxonomy"]["names"] + with (output / "mambo-family-precision.csv").open("w", newline="") as stream: + writer = csv.writer(stream, lineterminator="\n") + writer.writerow( + [ + "model", + "scope", + "threshold", + "family_id", + "family", + "truth_images", + "accepted_predictions", + "precision", + "precision_weight", + "recall", + "recall_weight", + "f1", + "f1_weight", + ] + ) + for model, scopes in data["models"].items(): + for scope, row in scopes.items(): + for family in sorted(row["groups"]["f1"]): + writer.writerow( + [ + model, + scope, + row["threshold"], + family, + names.get(family, family), + row["truth_counts"].get(family, 0), + row["predicted_counts"].get(family, 0), + *[v for metric in ("precision", "recall", "f1") for v in row["groups"][metric].get(family, (None, 0))], + ] + ) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--taxonomy", type=Path, required=True, help="Verified family names and V2/V3 taxonomy provenance JSON") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + export(collect(args.study, args.taxonomy), args.output) diff --git a/docs/assets/mambo-family-precision.csv b/docs/assets/mambo-family-precision.csv new file mode 100644 index 0000000..35621d7 --- /dev/null +++ b/docs/assets/mambo-family-precision.csv @@ -0,0 +1,913 @@ +model,scope,threshold,family_id,family,truth_images,accepted_predictions,precision,precision_weight,recall,recall_weight,f1,f1_weight +v2,zero,0,3528,Incurvariidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,3530,Lasiocampidae,728,636,0.9465408805031447,1.0,0.8269230769230769,1.0,0.8826979472140762,1.0 +v2,zero,0,3552,Ethmiidae,48,58,0.6896551724137931,1.0,0.8333333333333334,1.0,0.7547169811320755,1.0 +v2,zero,0,3553,Gelechiidae,2,119,0.0,1.0,0.0,1.0,0.0,1.0 +v2,zero,0,3554,Glyphipterigidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,3556,Hepialidae,14,23,0.6086956521739131,1.0,1.0,1.0,0.7567567567567568,1.0 +v2,zero,0,3563,Endromidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4300664,Autostichidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4300668,Peleopodidae,24,25,0.88,1.0,0.9166666666666666,1.0,0.8979591836734693,1.0 +v2,zero,0,4525436,Praydidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4525465,Argyresthiidae,0,7,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4527533,Stathmopodidae,2,4,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,zero,0,4528997,Lypusidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4532185,Erebidae,15241,14845,0.9810710676995621,1.0,0.9555803424972115,1.0,0.9681579472179751,1.0 +v2,zero,0,4538,Adelidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4542,Alucitidae,1,16,0.0625,1.0,1.0,1.0,0.11764705882352941,1.0 +v2,zero,0,4554,Batrachedridae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4705755,Depressariidae,0,32,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4864,Bedelliidae,0,7,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4865,Blastobasidae,0,10,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,4870,Choreutidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5336,Pyralidae,365,590,0.5779661016949152,1.0,0.9342465753424658,1.0,0.7141361256544502,1.0 +v2,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5340,Sesiidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5343,Tortricidae,632,887,0.6617812852311161,1.0,0.9287974683544303,1.0,0.7728768926925609,1.0 +v2,zero,0,5345,Ypsolophidae,46,55,0.6909090909090909,1.0,0.8260869565217391,1.0,0.7524752475247525,1.0 +v2,zero,0,5473,Lycaenidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5474,Limacodidae,475,345,0.991304347826087,1.0,0.72,1.0,0.8341463414634147,1.0 +v2,zero,0,5481,Pieridae,0,9,0.0,1.0,,0,0.0,1.0 +v2,zero,0,5487,Gracillariidae,0,16,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6166,Opostegidae,0,15,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6950,Geometridae,15047,14892,0.9837496642492614,1.0,0.9736160031900046,1.0,0.9786566017569057,1.0 +v2,zero,0,6953,Hesperiidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7014,Nepticulidae,0,22,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7015,Noctuidae,9243,9278,0.9372709635697348,1.0,0.9408200800605864,1.0,0.9390421683494412,1.0 +v2,zero,0,7016,Notodontidae,3321,3382,0.9278533412182141,1.0,0.9448961156278229,1.0,0.9362971803669999,1.0 +v2,zero,0,7017,Nymphalidae,0,23,0.0,1.0,,0,0.0,1.0 +v2,zero,0,7294,Drepanidae,1604,1447,0.972356599861783,1.0,0.8771820448877805,1.0,0.9223205506391349,1.0 +v2,zero,0,7297,Elachistidae,0,24,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8839,Cosmopterigidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8841,Crambidae,4542,4339,0.9504494123069832,1.0,0.9079700572435051,1.0,0.9287242427654544,1.0 +v2,zero,0,8855,Momphidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8860,Plutellidae,14,45,0.24444444444444444,1.0,0.7857142857142857,1.0,0.3728813559322034,1.0 +v2,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8863,Pterophoridae,79,74,0.9459459459459459,1.0,0.8860759493670886,1.0,0.915032679738562,1.0 +v2,zero,0,8864,Saturniidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8865,Schreckensteiniidae,0,5,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8866,Scythrididae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8868,Sphingidae,1124,1090,0.9697247706422019,1.0,0.9403914590747331,1.0,0.95483288166215,1.0 +v2,zero,0,8870,Thyrididae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8871,Tischeriidae,0,3,0.0,1.0,,0,0.0,1.0 +v2,zero,0,8874,Yponomeutidae,13,14,0.6428571428571429,1.0,0.6923076923076923,1.0,0.6666666666666666,1.0 +v2,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9410,Lyonetiidae,0,12,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9412,Tineidae,0,114,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9417,Papilionidae,0,2,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9541689,Meessiidae,0,4,0.0,1.0,,0,0.0,1.0 +v2,zero,0,9689,Oecophoridae,32,32,0.59375,1.0,0.59375,1.0,0.59375,1.0 +v2,zero,0,9717,Nolidae,191,184,0.9510869565217391,1.0,0.9162303664921466,1.0,0.9333333333333333,1.0 +v2,optimized,0.9553309082984924,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,3530,Lasiocampidae,728,458,0.9978165938864629,1.0,0.6277472527472527,1.0,0.7706576728499157,1.0 +v2,optimized,0.9553309082984924,3552,Ethmiidae,48,28,1.0,1.0,0.5833333333333334,1.0,0.7368421052631579,1.0 +v2,optimized,0.9553309082984924,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +v2,optimized,0.9553309082984924,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,3556,Hepialidae,14,13,1.0,1.0,0.9285714285714286,1.0,0.9629629629629631,1.0 +v2,optimized,0.9553309082984924,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +v2,optimized,0.9553309082984924,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +v2,optimized,0.9553309082984924,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4532185,Erebidae,15241,12512,0.9989609974424553,1.0,0.8200905452398136,1.0,0.9007314524555905,1.0 +v2,optimized,0.9553309082984924,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4542,Alucitidae,1,2,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,optimized,0.9553309082984924,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4864,Bedelliidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,4870,Choreutidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5336,Pyralidae,365,278,0.9820143884892086,1.0,0.7479452054794521,1.0,0.8491446345256611,1.0 +v2,optimized,0.9553309082984924,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5343,Tortricidae,632,399,0.9949874686716792,1.0,0.6281645569620253,1.0,0.7701260911736179,1.0 +v2,optimized,0.9553309082984924,5345,Ypsolophidae,46,22,1.0,1.0,0.4782608695652174,1.0,0.6470588235294118,1.0 +v2,optimized,0.9553309082984924,5473,Lycaenidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,5474,Limacodidae,475,218,1.0,1.0,0.4589473684210526,1.0,0.6291486291486291,1.0 +v2,optimized,0.9553309082984924,5481,Pieridae,0,2,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6166,Opostegidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6950,Geometridae,15047,12194,0.9995079547318353,1.0,0.8099953479098824,1.0,0.894827649498917,1.0 +v2,optimized,0.9553309082984924,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7015,Noctuidae,9243,6765,0.9983739837398374,1.0,0.730715135778427,1.0,0.8438280859570216,1.0 +v2,optimized,0.9553309082984924,7016,Notodontidae,3321,2804,0.9985734664764622,1.0,0.8431195423065342,1.0,0.9142857142857143,1.0 +v2,optimized,0.9553309082984924,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,7294,Drepanidae,1604,1103,1.0,1.0,0.6876558603491272,1.0,0.814924270410048,1.0 +v2,optimized,0.9553309082984924,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8838,Coleophoridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8840,Cossidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8841,Crambidae,4542,2900,0.9979310344827587,1.0,0.6371642448260678,1.0,0.777747917226552,1.0 +v2,optimized,0.9553309082984924,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8860,Plutellidae,14,11,0.8181818181818182,1.0,0.6428571428571429,1.0,0.72,1.0 +v2,optimized,0.9553309082984924,8861,Psychidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8863,Pterophoridae,79,48,1.0,1.0,0.6075949367088608,1.0,0.7559055118110237,1.0 +v2,optimized,0.9553309082984924,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8868,Sphingidae,1124,926,1.0,1.0,0.8238434163701067,1.0,0.9034146341463414,1.0 +v2,optimized,0.9553309082984924,8870,Thyrididae,0,1,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,8874,Yponomeutidae,13,5,0.8,1.0,0.3076923076923077,1.0,0.4444444444444444,1.0 +v2,optimized,0.9553309082984924,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,optimized,0.9553309082984924,9417,Papilionidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,optimized,0.9553309082984924,9689,Oecophoridae,32,14,1.0,1.0,0.4375,1.0,0.6086956521739131,1.0 +v2,optimized,0.9553309082984924,9717,Nolidae,191,157,1.0,1.0,0.8219895287958116,1.0,0.9022988505747127,1.0 +v2,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,3530,Lasiocampidae,728,450,0.9977777777777778,1.0,0.6167582417582418,1.0,0.7623089983022072,1.0 +v2,common_0.96,0.96,3552,Ethmiidae,48,28,1.0,1.0,0.5833333333333334,1.0,0.7368421052631579,1.0 +v2,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +v2,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,3556,Hepialidae,14,13,1.0,1.0,0.9285714285714286,1.0,0.9629629629629631,1.0 +v2,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +v2,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +v2,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4532185,Erebidae,15241,12417,0.9990335829910606,1.0,0.8139229709336657,1.0,0.8970279846698965,1.0 +v2,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4542,Alucitidae,1,2,0.5,1.0,1.0,1.0,0.6666666666666666,1.0 +v2,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4864,Bedelliidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,4870,Choreutidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5336,Pyralidae,365,269,0.9814126394052045,1.0,0.7232876712328767,1.0,0.832807570977918,1.0 +v2,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5343,Tortricidae,632,391,0.9948849104859335,1.0,0.615506329113924,1.0,0.7605083088954057,1.0 +v2,common_0.96,0.96,5345,Ypsolophidae,46,21,1.0,1.0,0.45652173913043476,1.0,0.626865671641791,1.0 +v2,common_0.96,0.96,5473,Lycaenidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,5474,Limacodidae,475,214,1.0,1.0,0.45052631578947366,1.0,0.6211901306240929,1.0 +v2,common_0.96,0.96,5481,Pieridae,0,2,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6166,Opostegidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6950,Geometridae,15047,12079,0.9995032701382565,1.0,0.8023526284309165,1.0,0.890142298901423,1.0 +v2,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7015,Noctuidae,9243,6683,0.9985036660182552,1.0,0.721951747268203,1.0,0.8380007534848675,1.0 +v2,common_0.96,0.96,7016,Notodontidae,3321,2789,0.9985657941914665,1.0,0.8386028304727492,1.0,0.9116202945990179,1.0 +v2,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,7294,Drepanidae,1604,1089,1.0,1.0,0.678927680798005,1.0,0.8087634608243596,1.0 +v2,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8838,Coleophoridae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8840,Cossidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8841,Crambidae,4542,2861,0.9979028311779098,1.0,0.6285777190664905,1.0,0.7713089288126435,1.0 +v2,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8860,Plutellidae,14,11,0.8181818181818182,1.0,0.6428571428571429,1.0,0.72,1.0 +v2,common_0.96,0.96,8861,Psychidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8863,Pterophoridae,79,48,1.0,1.0,0.6075949367088608,1.0,0.7559055118110237,1.0 +v2,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8868,Sphingidae,1124,921,1.0,1.0,0.8193950177935944,1.0,0.9007334963325184,1.0 +v2,common_0.96,0.96,8870,Thyrididae,0,1,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,8874,Yponomeutidae,13,5,0.8,1.0,0.3076923076923077,1.0,0.4444444444444444,1.0 +v2,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +v2,common_0.96,0.96,9417,Papilionidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +v2,common_0.96,0.96,9689,Oecophoridae,32,14,1.0,1.0,0.4375,1.0,0.6086956521739131,1.0 +v2,common_0.96,0.96,9717,Nolidae,191,156,1.0,1.0,0.8167539267015707,1.0,0.899135446685879,1.0 +torch,zero,0,3528,Incurvariidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,3530,Lasiocampidae,728,614,0.9413680781758957,1.0,0.7939560439560439,1.0,0.8614008941877793,1.0 +torch,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +torch,zero,0,3553,Gelechiidae,2,137,0.0,1.0,0.0,1.0,0.0,1.0 +torch,zero,0,3554,Glyphipterigidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,3556,Hepialidae,14,42,0.30952380952380953,1.0,0.9285714285714286,1.0,0.4642857142857143,1.0 +torch,zero,0,3563,Endromidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4300664,Autostichidae,0,11,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4300668,Peleopodidae,24,27,0.7407407407407407,1.0,0.8333333333333334,1.0,0.7843137254901962,1.0 +torch,zero,0,4525436,Praydidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,zero,0,4528997,Lypusidae,0,7,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4532185,Erebidae,15241,14478,0.983008702859511,1.0,0.9337969949478381,1.0,0.9577711228507017,1.0 +torch,zero,0,4538,Adelidae,0,22,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4542,Alucitidae,1,3,0.3333333333333333,1.0,1.0,1.0,0.5,1.0 +torch,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4705755,Depressariidae,0,51,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4864,Bedelliidae,0,132,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4865,Blastobasidae,0,20,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4867,Bucculatricidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,4870,Choreutidae,0,15,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5336,Pyralidae,365,560,0.6,1.0,0.9205479452054794,1.0,0.7264864864864864,1.0 +torch,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5343,Tortricidae,632,1311,0.463768115942029,1.0,0.9620253164556962,1.0,0.6258363355635614,1.0 +torch,zero,0,5345,Ypsolophidae,46,49,0.8571428571428571,1.0,0.9130434782608695,1.0,0.8842105263157894,1.0 +torch,zero,0,5474,Limacodidae,475,383,0.9608355091383812,1.0,0.7747368421052632,1.0,0.8578088578088578,1.0 +torch,zero,0,5481,Pieridae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,5487,Gracillariidae,0,23,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6166,Opostegidae,0,30,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,6950,Geometridae,15047,14847,0.9781774095776925,1.0,0.9651757825480162,1.0,0.971633103632836,1.0 +torch,zero,0,6954,Epermeniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7015,Noctuidae,9243,9175,0.9238147138964578,1.0,0.9170182841068917,1.0,0.9204039526550114,1.0 +torch,zero,0,7016,Notodontidae,3321,3217,0.9518184644078334,1.0,0.9220114423366456,1.0,0.9366778831446925,1.0 +torch,zero,0,7017,Nymphalidae,0,6,0.0,1.0,,0,0.0,1.0 +torch,zero,0,7294,Drepanidae,1604,1414,0.9759547383309759,1.0,0.8603491271820449,1.0,0.9145129224652088,1.0 +torch,zero,0,7297,Elachistidae,0,23,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8838,Coleophoridae,0,118,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8839,Cosmopterigidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8840,Cossidae,0,28,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8841,Crambidae,4542,4309,0.9554420979345556,1.0,0.9064288859533245,1.0,0.9302903626708845,1.0 +torch,zero,0,8855,Momphidae,0,3,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8860,Plutellidae,14,32,0.375,1.0,0.8571428571428571,1.0,0.5217391304347826,1.0 +torch,zero,0,8861,Psychidae,0,41,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8863,Pterophoridae,79,82,0.8780487804878049,1.0,0.9113924050632911,1.0,0.8944099378881988,1.0 +torch,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8866,Scythrididae,0,4,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8868,Sphingidae,1124,1021,0.9794319294809011,1.0,0.8896797153024911,1.0,0.9324009324009326,1.0 +torch,zero,0,8871,Tischeriidae,0,53,0.0,1.0,,0,0.0,1.0 +torch,zero,0,8874,Yponomeutidae,13,41,0.14634146341463414,1.0,0.46153846153846156,1.0,0.2222222222222222,1.0 +torch,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9410,Lyonetiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9412,Tineidae,0,117,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9541689,Meessiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,zero,0,9689,Oecophoridae,32,49,0.3877551020408163,1.0,0.59375,1.0,0.4691358024691358,1.0 +torch,zero,0,9717,Nolidae,191,191,0.9214659685863874,1.0,0.9214659685863874,1.0,0.9214659685863874,1.0 +torch,optimized,0.970800906419754,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,3530,Lasiocampidae,728,374,1.0,1.0,0.5137362637362637,1.0,0.6787658802177858,1.0 +torch,optimized,0.970800906419754,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch,optimized,0.970800906419754,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch,optimized,0.970800906419754,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch,optimized,0.970800906419754,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +torch,optimized,0.970800906419754,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,optimized,0.970800906419754,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4532185,Erebidae,15241,11359,0.9992957126507616,1.0,0.7447674037136671,1.0,0.8534586466165415,1.0 +torch,optimized,0.970800906419754,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch,optimized,0.970800906419754,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4864,Bedelliidae,0,21,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5336,Pyralidae,365,261,0.9885057471264368,1.0,0.7068493150684931,1.0,0.8242811501597445,1.0 +torch,optimized,0.970800906419754,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5343,Tortricidae,632,455,0.9868131868131869,1.0,0.7104430379746836,1.0,0.8261269549218031,1.0 +torch,optimized,0.970800906419754,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +torch,optimized,0.970800906419754,5474,Limacodidae,475,205,0.9951219512195122,1.0,0.42947368421052634,1.0,0.6000000000000001,1.0 +torch,optimized,0.970800906419754,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,6950,Geometridae,15047,12182,0.999179116729601,1.0,0.8089320130258524,1.0,0.8940467883506555,1.0 +torch,optimized,0.970800906419754,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7015,Noctuidae,9243,6331,0.9987363765597852,1.0,0.6840852537055069,1.0,0.811994349556954,1.0 +torch,optimized,0.970800906419754,7016,Notodontidae,3321,2622,0.9988558352402745,1.0,0.7886178861788617,1.0,0.8813730439172136,1.0 +torch,optimized,0.970800906419754,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,7294,Drepanidae,1604,1119,0.998212689901698,1.0,0.6963840399002493,1.0,0.8204186558942343,1.0 +torch,optimized,0.970800906419754,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8841,Crambidae,4542,2423,0.9987618654560462,1.0,0.5328049317481286,1.0,0.6949030868628859,1.0 +torch,optimized,0.970800906419754,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +torch,optimized,0.970800906419754,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +torch,optimized,0.970800906419754,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8868,Sphingidae,1124,855,1.0,1.0,0.7606761565836299,1.0,0.8640727640222333,1.0 +torch,optimized,0.970800906419754,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +torch,optimized,0.970800906419754,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9412,Tineidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,optimized,0.970800906419754,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,optimized,0.970800906419754,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch,optimized,0.970800906419754,9717,Nolidae,191,145,1.0,1.0,0.7591623036649214,1.0,0.863095238095238,1.0 +torch,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,3530,Lasiocampidae,728,387,1.0,1.0,0.5315934065934066,1.0,0.694170403587444,1.0 +torch,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch,common_0.96,0.96,3553,Gelechiidae,2,1,0.0,1.0,0.0,1.0,0.0,1.0 +torch,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +torch,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4532185,Erebidae,15241,11634,0.9990544954443872,1.0,0.7626140017059249,1.0,0.8649674418604651,1.0 +torch,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4705755,Depressariidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,4864,Bedelliidae,0,24,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,4870,Choreutidae,0,3,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5336,Pyralidae,365,269,0.9888475836431226,1.0,0.7287671232876712,1.0,0.8391167192429022,1.0 +torch,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5343,Tortricidae,632,468,0.9829059829059829,1.0,0.7278481012658228,1.0,0.8363636363636364,1.0 +torch,common_0.96,0.96,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +torch,common_0.96,0.96,5474,Limacodidae,475,217,0.9953917050691244,1.0,0.45473684210526316,1.0,0.624277456647399,1.0 +torch,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,6950,Geometridae,15047,12469,0.9987970166011709,1.0,0.8276732903568818,1.0,0.9052187817996801,1.0 +torch,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7015,Noctuidae,9243,6525,0.9983141762452107,1.0,0.7047495401925782,1.0,0.8262303399289701,1.0 +torch,common_0.96,0.96,7016,Notodontidae,3321,2661,0.9984968057121383,1.0,0.8000602228244504,1.0,0.8883316616516214,1.0 +torch,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,7294,Drepanidae,1604,1140,0.9982456140350877,1.0,0.7094763092269327,1.0,0.8294460641399417,1.0 +torch,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8841,Crambidae,4542,2550,0.9988235294117647,1.0,0.5607661822985469,1.0,0.7182741116751269,1.0 +torch,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +torch,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +torch,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8868,Sphingidae,1124,861,1.0,1.0,0.7660142348754448,1.0,0.8675062972292191,1.0 +torch,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +torch,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9412,Tineidae,0,4,0.0,1.0,,0,0.0,1.0 +torch,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch,common_0.96,0.96,9717,Nolidae,191,146,1.0,1.0,0.7643979057591623,1.0,0.8664688427299703,1.0 +onnx,zero,0,3528,Incurvariidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,3530,Lasiocampidae,728,616,0.939935064935065,1.0,0.7953296703296703,1.0,0.8616071428571428,1.0 +onnx,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +onnx,zero,0,3553,Gelechiidae,2,135,0.0,1.0,0.0,1.0,0.0,1.0 +onnx,zero,0,3554,Glyphipterigidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,3556,Hepialidae,14,42,0.30952380952380953,1.0,0.9285714285714286,1.0,0.4642857142857143,1.0 +onnx,zero,0,3563,Endromidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4300664,Autostichidae,0,11,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4300668,Peleopodidae,24,27,0.7407407407407407,1.0,0.8333333333333334,1.0,0.7843137254901962,1.0 +onnx,zero,0,4525436,Praydidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,zero,0,4528997,Lypusidae,0,7,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4532185,Erebidae,15241,14480,0.9831491712707182,1.0,0.9340594449183125,1.0,0.9579758419972411,1.0 +onnx,zero,0,4538,Adelidae,0,22,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4542,Alucitidae,1,3,0.3333333333333333,1.0,1.0,1.0,0.5,1.0 +onnx,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4705755,Depressariidae,0,52,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4864,Bedelliidae,0,132,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4865,Blastobasidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4867,Bucculatricidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,4870,Choreutidae,0,15,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5336,Pyralidae,365,559,0.6010733452593918,1.0,0.9205479452054794,1.0,0.7272727272727273,1.0 +onnx,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5343,Tortricidae,632,1308,0.46559633027522934,1.0,0.9636075949367089,1.0,0.6278350515463917,1.0 +onnx,zero,0,5345,Ypsolophidae,46,49,0.8571428571428571,1.0,0.9130434782608695,1.0,0.8842105263157894,1.0 +onnx,zero,0,5474,Limacodidae,475,383,0.9608355091383812,1.0,0.7747368421052632,1.0,0.8578088578088578,1.0 +onnx,zero,0,5481,Pieridae,0,5,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,5487,Gracillariidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6166,Opostegidae,0,30,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,6950,Geometridae,15047,14855,0.9778525748906092,1.0,0.9653751578387718,1.0,0.9715738077720553,1.0 +onnx,zero,0,6954,Epermeniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7015,Noctuidae,9243,9171,0.9243266819321775,1.0,0.9171264740884995,1.0,0.9207125013576627,1.0 +onnx,zero,0,7016,Notodontidae,3321,3215,0.9517884914463453,1.0,0.9214092140921409,1.0,0.9363525091799266,1.0 +onnx,zero,0,7017,Nymphalidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,7294,Drepanidae,1604,1414,0.9759547383309759,1.0,0.8603491271820449,1.0,0.9145129224652088,1.0 +onnx,zero,0,7297,Elachistidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8838,Coleophoridae,0,118,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8839,Cosmopterigidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8840,Cossidae,0,28,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8841,Crambidae,4542,4312,0.9554730983302412,1.0,0.9070893879348305,1.0,0.9306528122882314,1.0 +onnx,zero,0,8855,Momphidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8860,Plutellidae,14,31,0.3870967741935484,1.0,0.8571428571428571,1.0,0.5333333333333333,1.0 +onnx,zero,0,8861,Psychidae,0,42,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8863,Pterophoridae,79,82,0.8780487804878049,1.0,0.9113924050632911,1.0,0.8944099378881988,1.0 +onnx,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8866,Scythrididae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8868,Sphingidae,1124,1021,0.9794319294809011,1.0,0.8896797153024911,1.0,0.9324009324009326,1.0 +onnx,zero,0,8871,Tischeriidae,0,53,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,8874,Yponomeutidae,13,39,0.15384615384615385,1.0,0.46153846153846156,1.0,0.23076923076923078,1.0 +onnx,zero,0,9408,Micropterigidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9410,Lyonetiidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9412,Tineidae,0,117,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9541689,Meessiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,zero,0,9689,Oecophoridae,32,49,0.3877551020408163,1.0,0.59375,1.0,0.4691358024691358,1.0 +onnx,zero,0,9717,Nolidae,191,191,0.9214659685863874,1.0,0.9214659685863874,1.0,0.9214659685863874,1.0 +onnx,optimized,0.9698503911495209,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,3530,Lasiocampidae,728,376,1.0,1.0,0.5164835164835165,1.0,0.6811594202898551,1.0 +onnx,optimized,0.9698503911495209,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx,optimized,0.9698503911495209,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx,optimized,0.9698503911495209,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx,optimized,0.9698503911495209,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4300668,Peleopodidae,24,18,0.9444444444444444,1.0,0.7083333333333334,1.0,0.8095238095238095,1.0 +onnx,optimized,0.9698503911495209,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,optimized,0.9698503911495209,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4532185,Erebidae,15241,11389,0.9992975678286066,1.0,0.7467357784922249,1.0,0.8547502816372513,1.0 +onnx,optimized,0.9698503911495209,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx,optimized,0.9698503911495209,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4864,Bedelliidae,0,21,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5336,Pyralidae,365,262,0.9885496183206107,1.0,0.7095890410958904,1.0,0.8261562998405104,1.0 +onnx,optimized,0.9698503911495209,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5343,Tortricidae,632,458,0.9868995633187773,1.0,0.7151898734177216,1.0,0.8293577981651375,1.0 +onnx,optimized,0.9698503911495209,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +onnx,optimized,0.9698503911495209,5474,Limacodidae,475,209,0.9952153110047847,1.0,0.4378947368421053,1.0,0.608187134502924,1.0 +onnx,optimized,0.9698503911495209,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,6950,Geometridae,15047,12205,0.9991806636624334,1.0,0.8104605569216455,1.0,0.8949801849405549,1.0 +onnx,optimized,0.9698503911495209,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7015,Noctuidae,9243,6347,0.9987395619977942,1.0,0.6858162934112301,1.0,0.8132135984605516,1.0 +onnx,optimized,0.9698503911495209,7016,Notodontidae,3321,2626,0.9988575780654989,1.0,0.7898223426678711,1.0,0.8821254413990248,1.0 +onnx,optimized,0.9698503911495209,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,7294,Drepanidae,1604,1121,0.9982158786797503,1.0,0.6976309226932669,1.0,0.8212844036697247,1.0 +onnx,optimized,0.9698503911495209,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8841,Crambidae,4542,2444,0.9987725040916531,1.0,0.5374284456186702,1.0,0.6988262238763241,1.0 +onnx,optimized,0.9698503911495209,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +onnx,optimized,0.9698503911495209,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +onnx,optimized,0.9698503911495209,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8868,Sphingidae,1124,855,1.0,1.0,0.7606761565836299,1.0,0.8640727640222333,1.0 +onnx,optimized,0.9698503911495209,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +onnx,optimized,0.9698503911495209,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9412,Tineidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,optimized,0.9698503911495209,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,optimized,0.9698503911495209,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx,optimized,0.9698503911495209,9717,Nolidae,191,145,1.0,1.0,0.7591623036649214,1.0,0.863095238095238,1.0 +onnx,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,3530,Lasiocampidae,728,387,1.0,1.0,0.5315934065934066,1.0,0.694170403587444,1.0 +onnx,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx,common_0.96,0.96,3553,Gelechiidae,2,1,0.0,1.0,0.0,1.0,0.0,1.0 +onnx,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx,common_0.96,0.96,3563,Endromidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4300668,Peleopodidae,24,19,0.9473684210526315,1.0,0.75,1.0,0.8372093023255814,1.0 +onnx,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4532185,Erebidae,15241,11640,0.9990549828178694,1.0,0.7630076766616364,1.0,0.8652207879171162,1.0 +onnx,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4705755,Depressariidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,4864,Bedelliidae,0,25,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,4870,Choreutidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5336,Pyralidae,365,269,0.9888475836431226,1.0,0.7287671232876712,1.0,0.8391167192429022,1.0 +onnx,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5343,Tortricidae,632,468,0.9829059829059829,1.0,0.7278481012658228,1.0,0.8363636363636364,1.0 +onnx,common_0.96,0.96,5345,Ypsolophidae,46,27,1.0,1.0,0.5869565217391305,1.0,0.7397260273972603,1.0 +onnx,common_0.96,0.96,5474,Limacodidae,475,218,0.9954128440366973,1.0,0.4568421052631579,1.0,0.6262626262626263,1.0 +onnx,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,6166,Opostegidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,6950,Geometridae,15047,12468,0.9987969201154957,1.0,0.8276068319266299,1.0,0.9051789932763946,1.0 +onnx,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7015,Noctuidae,9243,6523,0.9983136593591906,1.0,0.7045331602293627,1.0,0.8260814410757326,1.0 +onnx,common_0.96,0.96,7016,Notodontidae,3321,2660,0.9984962406015038,1.0,0.7997591087021981,1.0,0.8881457950175556,1.0 +onnx,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,7294,Drepanidae,1604,1140,0.9982456140350877,1.0,0.7094763092269327,1.0,0.8294460641399417,1.0 +onnx,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8838,Coleophoridae,0,2,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8841,Crambidae,4542,2553,0.9988249118683902,1.0,0.5614266842800528,1.0,0.718816067653277,1.0 +onnx,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8860,Plutellidae,14,12,0.9166666666666666,1.0,0.7857142857142857,1.0,0.8461538461538461,1.0 +onnx,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,8863,Pterophoridae,79,71,0.9859154929577465,1.0,0.8860759493670886,1.0,0.9333333333333333,1.0 +onnx,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8868,Sphingidae,1124,862,1.0,1.0,0.7669039145907474,1.0,0.8680765357502517,1.0 +onnx,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,8874,Yponomeutidae,13,3,0.6666666666666666,1.0,0.15384615384615385,1.0,0.25,1.0 +onnx,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9412,Tineidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx,common_0.96,0.96,9541689,Meessiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx,common_0.96,0.96,9717,Nolidae,191,146,1.0,1.0,0.7643979057591623,1.0,0.8664688427299703,1.0 +torch-tta,zero,0,3528,Incurvariidae,0,5,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,3530,Lasiocampidae,728,634,0.9589905362776026,1.0,0.8351648351648352,1.0,0.8928046989721,1.0 +torch-tta,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +torch-tta,zero,0,3553,Gelechiidae,2,87,0.0,1.0,0.0,1.0,0.0,1.0 +torch-tta,zero,0,3554,Glyphipterigidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,3556,Hepialidae,14,35,0.4,1.0,1.0,1.0,0.5714285714285714,1.0 +torch-tta,zero,0,4300664,Autostichidae,0,6,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4300668,Peleopodidae,24,26,0.8461538461538461,1.0,0.9166666666666666,1.0,0.8799999999999999,1.0 +torch-tta,zero,0,4525436,Praydidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4527533,Stathmopodidae,2,2,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,zero,0,4528997,Lypusidae,0,3,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4532185,Erebidae,15241,14747,0.9858954363599376,1.0,0.9539400301817466,1.0,0.9696545284780579,1.0 +torch-tta,zero,0,4538,Adelidae,0,23,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4542,Alucitidae,1,4,0.25,1.0,1.0,1.0,0.4,1.0 +torch-tta,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4705755,Depressariidae,0,31,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4864,Bedelliidae,0,95,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4865,Blastobasidae,0,11,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,4870,Choreutidae,0,8,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5336,Pyralidae,365,517,0.6653771760154739,1.0,0.9424657534246575,1.0,0.780045351473923,1.0 +torch-tta,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5343,Tortricidae,632,1091,0.5637030247479377,1.0,0.9731012658227848,1.0,0.713871154962275,1.0 +torch-tta,zero,0,5345,Ypsolophidae,46,46,0.9130434782608695,1.0,0.9130434782608695,1.0,0.9130434782608695,1.0 +torch-tta,zero,0,5474,Limacodidae,475,411,0.9781021897810219,1.0,0.8463157894736842,1.0,0.9074492099322798,1.0 +torch-tta,zero,0,5481,Pieridae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,5487,Gracillariidae,0,19,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6166,Opostegidae,0,14,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6950,Geometridae,15047,14889,0.9834777352407817,1.0,0.9731507941782415,1.0,0.9782870122928914,1.0 +torch-tta,zero,0,6953,Hesperiidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7015,Noctuidae,9243,9196,0.9413875598086124,1.0,0.936600670777886,1.0,0.9389880145344109,1.0 +torch-tta,zero,0,7016,Notodontidae,3321,3266,0.9611145131659522,1.0,0.9451972297500753,1.0,0.9530894185516927,1.0 +torch-tta,zero,0,7017,Nymphalidae,0,10,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,7294,Drepanidae,1604,1472,0.9823369565217391,1.0,0.9014962593516209,1.0,0.9401820546163849,1.0 +torch-tta,zero,0,7297,Elachistidae,0,15,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8838,Coleophoridae,0,90,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8839,Cosmopterigidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8841,Crambidae,4542,4373,0.9634118454150469,1.0,0.9275649493615148,1.0,0.9451486259113854,1.0 +torch-tta,zero,0,8855,Momphidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8860,Plutellidae,14,27,0.48148148148148145,1.0,0.9285714285714286,1.0,0.6341463414634145,1.0 +torch-tta,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8863,Pterophoridae,79,83,0.891566265060241,1.0,0.9367088607594937,1.0,0.9135802469135801,1.0 +torch-tta,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8866,Scythrididae,0,6,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8868,Sphingidae,1124,1024,0.9912109375,1.0,0.9030249110320284,1.0,0.9450651769087522,1.0 +torch-tta,zero,0,8871,Tischeriidae,0,35,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,8874,Yponomeutidae,13,38,0.15789473684210525,1.0,0.46153846153846156,1.0,0.23529411764705882,1.0 +torch-tta,zero,0,9408,Micropterigidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9410,Lyonetiidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9412,Tineidae,0,84,0.0,1.0,,0,0.0,1.0 +torch-tta,zero,0,9689,Oecophoridae,32,48,0.4166666666666667,1.0,0.625,1.0,0.5,1.0 +torch-tta,zero,0,9717,Nolidae,191,188,0.9521276595744681,1.0,0.93717277486911,1.0,0.9445910290237466,1.0 +torch-tta,optimized,0.964760661125183,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,3530,Lasiocampidae,728,433,1.0,1.0,0.5947802197802198,1.0,0.7459086993970714,1.0 +torch-tta,optimized,0.964760661125183,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch-tta,optimized,0.964760661125183,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch-tta,optimized,0.964760661125183,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch-tta,optimized,0.964760661125183,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +torch-tta,optimized,0.964760661125183,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch-tta,optimized,0.964760661125183,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4532185,Erebidae,15241,12406,0.9991939384168951,1.0,0.8133324585000984,1.0,0.8967338228379209,1.0 +torch-tta,optimized,0.964760661125183,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,optimized,0.964760661125183,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5336,Pyralidae,365,295,0.9830508474576272,1.0,0.7945205479452054,1.0,0.8787878787878789,1.0 +torch-tta,optimized,0.964760661125183,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5343,Tortricidae,632,501,0.9920159680638723,1.0,0.7863924050632911,1.0,0.8773168578993822,1.0 +torch-tta,optimized,0.964760661125183,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +torch-tta,optimized,0.964760661125183,5474,Limacodidae,475,262,1.0,1.0,0.5515789473684211,1.0,0.7109905020352781,1.0 +torch-tta,optimized,0.964760661125183,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6950,Geometridae,15047,12791,0.9991400203267923,1.0,0.8493387386189938,1.0,0.918169408721891,1.0 +torch-tta,optimized,0.964760661125183,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7015,Noctuidae,9243,6860,0.9988338192419826,1.0,0.7413177539759819,1.0,0.8510215487797305,1.0 +torch-tta,optimized,0.964760661125183,7016,Notodontidae,3321,2778,0.9992800575953924,1.0,0.8358928033724782,1.0,0.910313166092802,1.0 +torch-tta,optimized,0.964760661125183,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,7294,Drepanidae,1604,1211,0.9991742361684558,1.0,0.7543640897755611,1.0,0.8596802841918295,1.0 +torch-tta,optimized,0.964760661125183,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8841,Crambidae,4542,2776,0.9985590778097982,1.0,0.6103038309114928,1.0,0.757584039355015,1.0 +torch-tta,optimized,0.964760661125183,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +torch-tta,optimized,0.964760661125183,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +torch-tta,optimized,0.964760661125183,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8868,Sphingidae,1124,864,1.0,1.0,0.7686832740213523,1.0,0.8692152917505029,1.0 +torch-tta,optimized,0.964760661125183,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +torch-tta,optimized,0.964760661125183,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,optimized,0.964760661125183,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,optimized,0.964760661125183,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch-tta,optimized,0.964760661125183,9717,Nolidae,191,155,1.0,1.0,0.8115183246073299,1.0,0.8959537572254335,1.0 +torch-tta,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,3530,Lasiocampidae,728,439,1.0,1.0,0.603021978021978,1.0,0.7523564695801199,1.0 +torch-tta,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +torch-tta,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +torch-tta,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +torch-tta,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +torch-tta,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +torch-tta,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4532185,Erebidae,15241,12523,0.9992014692964944,1.0,0.821009120136474,1.0,0.9013830860106613,1.0 +torch-tta,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +torch-tta,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5336,Pyralidae,365,296,0.9831081081081081,1.0,0.7972602739726027,1.0,0.8804841149773072,1.0 +torch-tta,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5343,Tortricidae,632,506,0.9920948616600791,1.0,0.7943037974683544,1.0,0.882249560632689,1.0 +torch-tta,common_0.96,0.96,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +torch-tta,common_0.96,0.96,5474,Limacodidae,475,268,1.0,1.0,0.5642105263157895,1.0,0.721399730820996,1.0 +torch-tta,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6950,Geometridae,15047,12884,0.9991462278795405,1.0,0.8555193726324184,1.0,0.9217715083598869,1.0 +torch-tta,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7015,Noctuidae,9243,6930,0.9985569985569985,1.0,0.7486746727253056,1.0,0.8557472330427255,1.0 +torch-tta,common_0.96,0.96,7016,Notodontidae,3321,2789,0.9992828970957333,1.0,0.8392050587172538,1.0,0.9122749590834697,1.0 +torch-tta,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,7294,Drepanidae,1604,1226,0.9975530179445351,1.0,0.7624688279301746,1.0,0.8643109540636043,1.0 +torch-tta,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8841,Crambidae,4542,2829,0.9975256274301874,1.0,0.6213121972699251,1.0,0.765703432370099,1.0 +torch-tta,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +torch-tta,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +torch-tta,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8868,Sphingidae,1124,865,1.0,1.0,0.7695729537366548,1.0,0.8697838109602816,1.0 +torch-tta,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +torch-tta,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +torch-tta,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +torch-tta,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +torch-tta,common_0.96,0.96,9717,Nolidae,191,158,1.0,1.0,0.8272251308900523,1.0,0.9054441260744984,1.0 +onnx-tta,zero,0,3528,Incurvariidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,3530,Lasiocampidae,728,635,0.9590551181102362,1.0,0.8365384615384616,1.0,0.8936170212765957,1.0 +onnx-tta,zero,0,3552,Ethmiidae,48,49,0.8571428571428571,1.0,0.875,1.0,0.865979381443299,1.0 +onnx-tta,zero,0,3553,Gelechiidae,2,87,0.0,1.0,0.0,1.0,0.0,1.0 +onnx-tta,zero,0,3554,Glyphipterigidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,3556,Hepialidae,14,35,0.4,1.0,1.0,1.0,0.5714285714285714,1.0 +onnx-tta,zero,0,4300664,Autostichidae,0,6,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4300668,Peleopodidae,24,26,0.8461538461538461,1.0,0.9166666666666666,1.0,0.8799999999999999,1.0 +onnx-tta,zero,0,4525436,Praydidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4525465,Argyresthiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4527533,Stathmopodidae,2,2,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,zero,0,4528997,Lypusidae,0,3,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4532185,Erebidae,15241,14751,0.9858314690529456,1.0,0.9541368676596024,1.0,0.9697252600693519,1.0 +onnx-tta,zero,0,4538,Adelidae,0,23,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4542,Alucitidae,1,4,0.25,1.0,1.0,1.0,0.4,1.0 +onnx-tta,zero,0,4554,Batrachedridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4705755,Depressariidae,0,31,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4864,Bedelliidae,0,96,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4865,Blastobasidae,0,11,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4867,Bucculatricidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,4870,Choreutidae,0,8,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5320,Douglasiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5336,Pyralidae,365,517,0.6673114119922631,1.0,0.9452054794520548,1.0,0.782312925170068,1.0 +onnx-tta,zero,0,5338,Roeslerstammiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5340,Sesiidae,0,5,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5343,Tortricidae,632,1087,0.5657773689052438,1.0,0.9731012658227848,1.0,0.7155322862129145,1.0 +onnx-tta,zero,0,5345,Ypsolophidae,46,46,0.9130434782608695,1.0,0.9130434782608695,1.0,0.9130434782608695,1.0 +onnx-tta,zero,0,5474,Limacodidae,475,411,0.9781021897810219,1.0,0.8463157894736842,1.0,0.9074492099322798,1.0 +onnx-tta,zero,0,5481,Pieridae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,5487,Gracillariidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6166,Opostegidae,0,14,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6946,Eriocraniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6950,Geometridae,15047,14888,0.9834766254701773,1.0,0.9730843357479896,1.0,0.9782528812426925,1.0 +onnx-tta,zero,0,6953,Hesperiidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,6954,Epermeniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7014,Nepticulidae,0,4,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7015,Noctuidae,9243,9198,0.9412915851272016,1.0,0.9367088607594937,1.0,0.9389946315275743,1.0 +onnx-tta,zero,0,7016,Notodontidae,3321,3266,0.9614206981016534,1.0,0.9454983438723276,1.0,0.9533930469105814,1.0 +onnx-tta,zero,0,7017,Nymphalidae,0,10,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,7294,Drepanidae,1604,1471,0.982324949014276,1.0,0.9008728179551122,1.0,0.9398373983739837,1.0 +onnx-tta,zero,0,7297,Elachistidae,0,15,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8838,Coleophoridae,0,87,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8839,Cosmopterigidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8840,Cossidae,0,19,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8841,Crambidae,4542,4371,0.9633951040951727,1.0,0.9271246147071774,1.0,0.944911926399641,1.0 +onnx-tta,zero,0,8855,Momphidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8860,Plutellidae,14,27,0.48148148148148145,1.0,0.9285714285714286,1.0,0.6341463414634145,1.0 +onnx-tta,zero,0,8861,Psychidae,0,22,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8863,Pterophoridae,79,83,0.891566265060241,1.0,0.9367088607594937,1.0,0.9135802469135801,1.0 +onnx-tta,zero,0,8864,Saturniidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8865,Schreckensteiniidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8866,Scythrididae,0,6,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8868,Sphingidae,1124,1024,0.9912109375,1.0,0.9030249110320284,1.0,0.9450651769087522,1.0 +onnx-tta,zero,0,8871,Tischeriidae,0,36,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,8874,Yponomeutidae,13,38,0.15789473684210525,1.0,0.46153846153846156,1.0,0.23529411764705882,1.0 +onnx-tta,zero,0,9408,Micropterigidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9410,Lyonetiidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9412,Tineidae,0,85,0.0,1.0,,0,0.0,1.0 +onnx-tta,zero,0,9689,Oecophoridae,32,48,0.4166666666666667,1.0,0.625,1.0,0.5,1.0 +onnx-tta,zero,0,9717,Nolidae,191,189,0.9470899470899471,1.0,0.93717277486911,1.0,0.9421052631578947,1.0 +onnx-tta,optimized,0.966471254825592,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,3530,Lasiocampidae,728,431,1.0,1.0,0.592032967032967,1.0,0.7437446074201899,1.0 +onnx-tta,optimized,0.966471254825592,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx-tta,optimized,0.966471254825592,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx-tta,optimized,0.966471254825592,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +onnx-tta,optimized,0.966471254825592,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx-tta,optimized,0.966471254825592,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4532185,Erebidae,15241,12376,0.9991919844861021,1.0,0.8113640837215406,1.0,0.8955353586559004,1.0 +onnx-tta,optimized,0.966471254825592,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,optimized,0.966471254825592,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4864,Bedelliidae,0,16,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5336,Pyralidae,365,294,0.9863945578231292,1.0,0.7945205479452054,1.0,0.8801213960546284,1.0 +onnx-tta,optimized,0.966471254825592,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5343,Tortricidae,632,499,0.9919839679358717,1.0,0.7832278481012658,1.0,0.8753315649867373,1.0 +onnx-tta,optimized,0.966471254825592,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +onnx-tta,optimized,0.966471254825592,5474,Limacodidae,475,259,1.0,1.0,0.5452631578947369,1.0,0.7057220708446866,1.0 +onnx-tta,optimized,0.966471254825592,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6950,Geometridae,15047,12755,0.9991375931007448,1.0,0.8469462351299263,1.0,0.9167685778001583,1.0 +onnx-tta,optimized,0.966471254825592,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7015,Noctuidae,9243,6816,0.9988262910798122,1.0,0.7365573947852428,1.0,0.8478734665919422,1.0 +onnx-tta,optimized,0.966471254825592,7016,Notodontidae,3321,2775,0.9992792792792793,1.0,0.8349894610057211,1.0,0.9097769028871392,1.0 +onnx-tta,optimized,0.966471254825592,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,7294,Drepanidae,1604,1208,0.9991721854304636,1.0,0.7524937655860349,1.0,0.8584637268847795,1.0 +onnx-tta,optimized,0.966471254825592,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8841,Crambidae,4542,2758,0.9985496736765772,1.0,0.6063408190224571,1.0,0.7545205479452055,1.0 +onnx-tta,optimized,0.966471254825592,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +onnx-tta,optimized,0.966471254825592,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +onnx-tta,optimized,0.966471254825592,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8868,Sphingidae,1124,863,1.0,1.0,0.7677935943060499,1.0,0.8686462003019627,1.0 +onnx-tta,optimized,0.966471254825592,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +onnx-tta,optimized,0.966471254825592,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,optimized,0.966471254825592,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,optimized,0.966471254825592,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx-tta,optimized,0.966471254825592,9717,Nolidae,191,154,1.0,1.0,0.806282722513089,1.0,0.8927536231884057,1.0 +onnx-tta,common_0.96,0.96,3528,Incurvariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,3530,Lasiocampidae,728,439,1.0,1.0,0.603021978021978,1.0,0.7523564695801199,1.0 +onnx-tta,common_0.96,0.96,3552,Ethmiidae,48,41,1.0,1.0,0.8541666666666666,1.0,0.9213483146067415,1.0 +onnx-tta,common_0.96,0.96,3553,Gelechiidae,2,0,1.0,0.0,0.0,1.0,0.0,1.0 +onnx-tta,common_0.96,0.96,3554,Glyphipterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,3556,Hepialidae,14,12,1.0,1.0,0.8571428571428571,1.0,0.9230769230769229,1.0 +onnx-tta,common_0.96,0.96,4300664,Autostichidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4300668,Peleopodidae,24,20,0.95,1.0,0.7916666666666666,1.0,0.8636363636363636,1.0 +onnx-tta,common_0.96,0.96,4525436,Praydidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4525465,Argyresthiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4527533,Stathmopodidae,2,1,1.0,1.0,0.5,1.0,0.6666666666666666,1.0 +onnx-tta,common_0.96,0.96,4528997,Lypusidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4532185,Erebidae,15241,12528,0.9992017879948915,1.0,0.821337182599567,1.0,0.9015808995642624,1.0 +onnx-tta,common_0.96,0.96,4538,Adelidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4542,Alucitidae,1,1,1.0,1.0,1.0,1.0,1.0,1.0 +onnx-tta,common_0.96,0.96,4554,Batrachedridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4705755,Depressariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4864,Bedelliidae,0,17,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,4865,Blastobasidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4867,Bucculatricidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,4870,Choreutidae,0,2,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,5320,Douglasiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5336,Pyralidae,365,296,0.9831081081081081,1.0,0.7972602739726027,1.0,0.8804841149773072,1.0 +onnx-tta,common_0.96,0.96,5338,Roeslerstammiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5340,Sesiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5343,Tortricidae,632,507,0.9921104536489151,1.0,0.7958860759493671,1.0,0.8832309043020192,1.0 +onnx-tta,common_0.96,0.96,5345,Ypsolophidae,46,30,1.0,1.0,0.6521739130434783,1.0,0.7894736842105263,1.0 +onnx-tta,common_0.96,0.96,5474,Limacodidae,475,269,1.0,1.0,0.5663157894736842,1.0,0.7231182795698925,1.0 +onnx-tta,common_0.96,0.96,5481,Pieridae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,5487,Gracillariidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6166,Opostegidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,6946,Eriocraniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6950,Geometridae,15047,12882,0.9991460953268126,1.0,0.8553864557719146,1.0,0.9216942962512084,1.0 +onnx-tta,common_0.96,0.96,6953,Hesperiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,6954,Epermeniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7014,Nepticulidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7015,Noctuidae,9243,6926,0.9987005486572336,1.0,0.7483501027804825,1.0,0.8555878532995239,1.0 +onnx-tta,common_0.96,0.96,7016,Notodontidae,3321,2788,0.9992826398852224,1.0,0.8389039445950015,1.0,0.9120969062039614,1.0 +onnx-tta,common_0.96,0.96,7017,Nymphalidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,7294,Drepanidae,1604,1227,0.9975550122249389,1.0,0.7630922693266833,1.0,0.86471211586012,1.0 +onnx-tta,common_0.96,0.96,7297,Elachistidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8838,Coleophoridae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8839,Cosmopterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8840,Cossidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8841,Crambidae,4542,2832,0.9978813559322034,1.0,0.6221928665785997,1.0,0.7664768104149715,1.0 +onnx-tta,common_0.96,0.96,8855,Momphidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8860,Plutellidae,14,13,0.9230769230769231,1.0,0.8571428571428571,1.0,0.8888888888888888,1.0 +onnx-tta,common_0.96,0.96,8861,Psychidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,8863,Pterophoridae,79,70,1.0,1.0,0.8860759493670886,1.0,0.9395973154362416,1.0 +onnx-tta,common_0.96,0.96,8864,Saturniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8865,Schreckensteiniidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8866,Scythrididae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8868,Sphingidae,1124,865,1.0,1.0,0.7695729537366548,1.0,0.8697838109602816,1.0 +onnx-tta,common_0.96,0.96,8871,Tischeriidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,8874,Yponomeutidae,13,5,0.6,1.0,0.23076923076923078,1.0,0.3333333333333333,1.0 +onnx-tta,common_0.96,0.96,9408,Micropterigidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,9410,Lyonetiidae,0,0,1.0,0.0,,0,1.0,0.0 +onnx-tta,common_0.96,0.96,9412,Tineidae,0,1,0.0,1.0,,0,0.0,1.0 +onnx-tta,common_0.96,0.96,9689,Oecophoridae,32,18,1.0,1.0,0.5625,1.0,0.72,1.0 +onnx-tta,common_0.96,0.96,9717,Nolidae,191,158,1.0,1.0,0.8272251308900523,1.0,0.9054441260744984,1.0 diff --git a/docs/assets/mambo-family-precision.json b/docs/assets/mambo-family-precision.json new file mode 100644 index 0000000..bd11fd6 --- /dev/null +++ b/docs/assets/mambo-family-precision.json @@ -0,0 +1,19758 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "study_sha256": "9c5f37e9c2aeb2d05de28f74d254fd913f184981057cef94cce1d4f28481dd6a", + "taxonomy": { + "names": { + "5481": "Pieridae", + "7017": "Nymphalidae", + "5473": "Lycaenidae", + "4532185": "Erebidae", + "8868": "Sphingidae", + "8863": "Pterophoridae", + "6953": "Hesperiidae", + "9417": "Papilionidae", + "6950": "Geometridae", + "7015": "Noctuidae", + "9717": "Nolidae", + "8866": "Scythrididae", + "3530": "Lasiocampidae", + "8841": "Crambidae", + "5343": "Tortricidae", + "7294": "Drepanidae", + "8840": "Cossidae", + "7016": "Notodontidae", + "8875": "Zygaenidae", + "8864": "Saturniidae", + "5336": "Pyralidae", + "1933999": "Riodinidae", + "3563": "Endromidae", + "8834": "Carposinidae", + "4528997": "Lypusidae", + "3528": "Incurvariidae", + "8870": "Thyrididae", + "9689": "Oecophoridae", + "8860": "Plutellidae", + "5340": "Sesiidae", + "4538": "Adelidae", + "8839": "Cosmopterigidae", + "5474": "Limacodidae", + "9412": "Tineidae", + "3552": "Ethmiidae", + "3553": "Gelechiidae", + "8874": "Yponomeutidae", + "4870": "Choreutidae", + "3556": "Hepialidae", + "5487": "Gracillariidae", + "5345": "Ypsolophidae", + "4705755": "Depressariidae", + "4866": "Brahmaeidae", + "3554": "Glyphipterigidae", + "4534947": "Euteliidae", + "8873": "Urodidae", + "3531": "Lecithoceridae", + "7014": "Nepticulidae", + "7297": "Elachistidae", + "4300668": "Peleopodidae", + "8861": "Psychidae", + "6954": "Epermeniidae", + "4525465": "Argyresthiidae", + "4527533": "Stathmopodidae", + "8838": "Coleophoridae", + "4864": "Bedelliidae", + "5338": "Roeslerstammiidae", + "6166": "Opostegidae", + "8871": "Tischeriidae", + "6946": "Eriocraniidae", + "5320": "Douglasiidae", + "4554": "Batrachedridae", + "9410": "Lyonetiidae", + "4525436": "Praydidae", + "4867": "Bucculatricidae", + "4865": "Blastobasidae", + "8836": "Castniidae", + "4547": "Anthelidae", + "6165": "Oenosandridae", + "4300662": "Xyloryctidae", + "9122734": "Attevidae", + "8872": "Uraniidae", + "4542": "Alucitidae", + "9409": "Megalopygidae", + "4300664": "Autostichidae", + "3256826": "Apatelodidae", + "5734720": "Phaudidae", + "9541689": "Meessiidae", + "3527": "Hyblaeidae", + "6956": "Epicopeiidae", + "9408": "Micropterigidae", + "3551": "Epipyropidae", + "6949": "Galacticidae", + "3529": "Lacturidae", + "5333": "Palaephatidae", + "3555": "Heliodinidae", + "8855": "Momphidae", + "8832": "Bombycidae", + "9407": "Mimallonidae", + "5339": "Sematuridae", + "6948": "Eupterotidae", + "8025": "Cimeliidae", + "4868": "Callidulidae", + "8865": "Schreckensteiniidae", + "6929": "Immidae", + "6947": "Eriocottidae", + "4871": "Copromorphidae", + "9414744": "Dryadaulidae", + "8833": "Brachodidae", + "6951": "Hedylidae", + "5318": "Dalceridae", + "8856": "Neopseustidae", + "3558": "Heterogynidae", + "10820875": "Ashinagidae" + }, + "sources": { + "examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "local-evidence/mambo-v3/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt": "34fe04302877de5540ed847859efb6b676876d5efc9401cd3336905e10ead568", + "local-evidence/mambo-bundle-final/classes.json": "8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db" + }, + "taxonomy": { + "all_species_parent_mappings_identical": true, + "species": 12632, + "global_families": 104, + "north_europe_families": [ + "1933999", + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "8875", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ] + } + }, + "models": { + "v2": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9278, + "3553": 119, + "3530": 636, + "7016": 3382, + "4300664": 4, + "3554": 4, + "5336": 590, + "4870": 1, + "7014": 22, + "8868": 1090, + "5343": 887, + "4532185": 14845, + "9412": 114, + "8861": 22, + "8841": 4339, + "4705755": 32, + "6950": 14892, + "9689": 32, + "7294": 1447, + "8840": 19, + "5345": 55, + "9717": 184, + "4525465": 7, + "9541689": 4, + "4538": 5, + "3556": 23, + "8863": 74, + "4528997": 2, + "5481": 9, + "3528": 3, + "4525436": 5, + "6946": 1, + "7017": 23, + "9417": 2, + "8860": 45, + "5487": 16, + "7297": 24, + "9410": 12, + "6166": 15, + "8874": 14, + "4864": 7, + "4527533": 4, + "4300668": 25, + "3552": 58, + "4865": 10, + "8865": 5, + "8839": 4, + "5474": 345, + "8871": 3, + "9408": 2, + "4867": 2, + "8866": 3, + "4542": 16, + "8870": 4, + "6953": 4, + "4554": 5, + "8855": 2, + "3563": 3, + "5473": 1, + "6954": 1, + "8864": 3, + "8838": 1, + "5338": 1, + "5340": 1 + }, + "official": { + "precision": { + "2": 0.2610923881260793 + }, + "recall": { + "2": 0.8435038466784595 + }, + "f1": { + "2": 0.2696839814067278 + }, + "micro_accuracy": { + "2": 0.9454610896415853 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7265179495682207, + "recall": 0.8435038466784595, + "f1": 0.75042499174046 + }, + "groups": { + "precision": { + "7015": [ + 0.9372709635697348, + 1.0 + ], + "3530": [ + 0.9465408805031447, + 1.0 + ], + "5343": [ + 0.6617812852311161, + 1.0 + ], + "4532185": [ + 0.9810710676995621, + 1.0 + ], + "9717": [ + 0.9510869565217391, + 1.0 + ], + "7016": [ + 0.9278533412182141, + 1.0 + ], + "3556": [ + 0.6086956521739131, + 1.0 + ], + "8874": [ + 0.6428571428571429, + 1.0 + ], + "8860": [ + 0.24444444444444444, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.88, + 1.0 + ], + "3552": [ + 0.6896551724137931, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9697247706422019, + 1.0 + ], + "5336": [ + 0.5779661016949152, + 1.0 + ], + "8841": [ + 0.9504494123069832, + 1.0 + ], + "7294": [ + 0.972356599861783, + 1.0 + ], + "6950": [ + 0.9837496642492614, + 1.0 + ], + "8863": [ + 0.9459459459459459, + 1.0 + ], + "4542": [ + 0.0625, + 1.0 + ], + "5474": [ + 0.991304347826087, + 1.0 + ], + "5345": [ + 0.6909090909090909, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "9417": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "5473": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9408200800605864, + 1.0 + ], + "3530": [ + 0.8269230769230769, + 1.0 + ], + "5343": [ + 0.9287974683544303, + 1.0 + ], + "4532185": [ + 0.9555803424972115, + 1.0 + ], + "9717": [ + 0.9162303664921466, + 1.0 + ], + "7016": [ + 0.9448961156278229, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6923076923076923, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.8333333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9403914590747331, + 1.0 + ], + "5336": [ + 0.9342465753424658, + 1.0 + ], + "8841": [ + 0.9079700572435051, + 1.0 + ], + "7294": [ + 0.8771820448877805, + 1.0 + ], + "6950": [ + 0.9736160031900046, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.72, + 1.0 + ], + "5345": [ + 0.8260869565217391, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.7547169811320755, + 1.0 + ], + "8868": [ + 0.95483288166215, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9223205506391349, + 1.0 + ], + "5345": [ + 0.7524752475247525, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9417": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7141361256544502, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.3728813559322034, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9681579472179751, + 1.0 + ], + "6950": [ + 0.9786566017569057, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8979591836734693, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8341463414634147, + 1.0 + ], + "3556": [ + 0.7567567567567568, + 1.0 + ], + "3530": [ + 0.8826979472140762, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9287242427654544, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "7015": [ + 0.9390421683494412, + 1.0 + ], + "7016": [ + 0.9362971803669999, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.7728768926925609, + 1.0 + ], + "8863": [ + 0.915032679738562, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "5473": [ + 0.0, + 1.0 + ], + "4542": [ + 0.11764705882352941, + 1.0 + ], + "9717": [ + 0.9333333333333333, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "4300664": 4, + "3554": 4, + "4870": 1, + "7014": 22, + "9412": 114, + "8861": 22, + "4705755": 32, + "8840": 19, + "4525465": 7, + "9541689": 4, + "4538": 5, + "4528997": 2, + "5481": 9, + "3528": 3, + "4525436": 5, + "6946": 1, + "7017": 23, + "9417": 2, + "5487": 16, + "7297": 24, + "9410": 12, + "6166": 15, + "4864": 7, + "4865": 10, + "8865": 5, + "8839": 4, + "8871": 3, + "9408": 2, + "4867": 2, + "8866": 3, + "8870": 4, + "6953": 4, + "4554": 5, + "8855": 2, + "3563": 3, + "5473": 1, + "6954": 1, + "8864": 3, + "8838": 1, + "5338": 1, + "5340": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "4532185", + "images": 146 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 130 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 124 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 123 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 113 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 109 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 96 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 86 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 83 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 71 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 67 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 57 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 55 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 48 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 48 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 46 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 45 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 42 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 40 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 39 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 39 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 37 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 36 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 30 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 27 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 27 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 26 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 19 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 17 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 17 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 16 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 16 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 14 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 14 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 14 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 14 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 13 + }, + { + "truth": "3530", + "prediction": "7014", + "images": 12 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 11 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 9 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 9 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 9 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 9 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 8 + }, + { + "truth": "8841", + "prediction": "5345", + "images": 8 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 8 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 7 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 7 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 7 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 6 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 6 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 6 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 6 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 6 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 6 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 6 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 6 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 5 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 5 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 5 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 5 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 4 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 4 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 4 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 4 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 4 + }, + { + "truth": "7016", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 4 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 4 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8868", + "images": 4 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 4 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 4 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 4 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 4 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8868", + "images": 3 + }, + { + "truth": "5343", + "prediction": "7015", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9410", + "images": 3 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7017", + "images": 3 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 3 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 3 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "3563", + "images": 3 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5474", + "prediction": "9689", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 3 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 3 + }, + { + "truth": "3530", + "prediction": "9412", + "images": 2 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 2 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7017", + "images": 2 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5474", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "4527533", + "images": 2 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7297", + "images": 2 + }, + { + "truth": "3530", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3554", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4870", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6946", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9417", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8874", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8874", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8860", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5343", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5345", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5343", + "images": 1 + }, + { + "truth": "9689", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 1 + }, + { + "truth": "4300668", + "prediction": "7017", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8839", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5481", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3530", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7294", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9408", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4867", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8863", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8863", + "prediction": "7015", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9417", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6166", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 1 + }, + { + "truth": "5345", + "prediction": "9412", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9410", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8855", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5473", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9717", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8871", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5474", + "prediction": "9412", + "images": 1 + }, + { + "truth": "5474", + "prediction": "6954", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5474", + "prediction": "9410", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3554", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7017", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8870", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4867", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "7294", + "prediction": "8864", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8864", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.9553309082984924, + "images": 52788, + "accepted": 40881, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 458, + "7016": 2804, + "5343": 399, + "5336": 278, + "7015": 6765, + "4532185": 12512, + "8841": 2900, + "6950": 12194, + "9717": 157, + "5481": 2, + "3556": 13, + "8874": 5, + "8860": 11, + "4527533": 1, + "9689": 14, + "4300668": 19, + "3552": 28, + "8868": 926, + "7294": 1103, + "8863": 48, + "4542": 2, + "5474": 218, + "5345": 22, + "9412": 1, + "8870": 1 + }, + "official": { + "precision": { + "2": 0.841348645086206 + }, + "recall": { + "2": 0.6466603488658192 + }, + "f1": { + "2": 0.6545226053114058 + }, + "micro_accuracy": { + "2": 0.9986057092536875 + }, + "coverage": { + "2": 0.7744373721300295 + } + }, + "truth_group_diagnostic": { + "precision": 0.9560780057797795, + "recall": 0.6466603488658192, + "f1": 0.7398951190476761 + }, + "groups": { + "precision": { + "7015": [ + 0.9983739837398374, + 1.0 + ], + "3530": [ + 0.9978165938864629, + 1.0 + ], + "5343": [ + 0.9949874686716792, + 1.0 + ], + "4532185": [ + 0.9989609974424553, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9985734664764622, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.8, + 1.0 + ], + "8860": [ + 0.8181818181818182, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9820143884892086, + 1.0 + ], + "8841": [ + 0.9979310344827587, + 1.0 + ], + "7294": [ + 1.0, + 1.0 + ], + "6950": [ + 0.9995079547318353, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "4864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.730715135778427, + 1.0 + ], + "3530": [ + 0.6277472527472527, + 1.0 + ], + "5343": [ + 0.6281645569620253, + 1.0 + ], + "4532185": [ + 0.8200905452398136, + 1.0 + ], + "9717": [ + 0.8219895287958116, + 1.0 + ], + "7016": [ + 0.8431195423065342, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.3076923076923077, + 1.0 + ], + "8860": [ + 0.6428571428571429, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.4375, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.5833333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8238434163701067, + 1.0 + ], + "5336": [ + 0.7479452054794521, + 1.0 + ], + "8841": [ + 0.6371642448260678, + 1.0 + ], + "7294": [ + 0.6876558603491272, + 1.0 + ], + "6950": [ + 0.8099953479098824, + 1.0 + ], + "8863": [ + 0.6075949367088608, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4589473684210526, + 1.0 + ], + "5345": [ + 0.4782608695652174, + 1.0 + ] + }, + "f1": { + "4864": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.7368421052631579, + 1.0 + ], + "8868": [ + 0.9034146341463414, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.814924270410048, + 1.0 + ], + "5345": [ + 0.6470588235294118, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8491446345256611, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.72, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4532185": [ + 0.9007314524555905, + 1.0 + ], + "6950": [ + 0.894827649498917, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.6086956521739131, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6291486291486291, + 1.0 + ], + "3556": [ + 0.9629629629629631, + 1.0 + ], + "3530": [ + 0.7706576728499157, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.777747917226552, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.4444444444444444, + 1.0 + ], + "7015": [ + 0.8438280859570216, + 1.0 + ], + "7016": [ + 0.9142857142857143, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.7701260911736179, + 1.0 + ], + "8863": [ + 0.7559055118110237, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "4542": [ + 0.6666666666666666, + 1.0 + ], + "9717": [ + 0.9022988505747127, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "5481": 2, + "9412": 1, + "8870": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 3 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 40484, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 450, + "7016": 2789, + "5343": 391, + "5336": 269, + "7015": 6683, + "4532185": 12417, + "8841": 2861, + "6950": 12079, + "9717": 156, + "5481": 2, + "3556": 13, + "8874": 5, + "8860": 11, + "4527533": 1, + "9689": 14, + "4300668": 18, + "3552": 28, + "8868": 921, + "7294": 1089, + "8863": 48, + "4542": 2, + "5474": 214, + "5345": 21, + "9412": 1, + "8870": 1 + }, + "official": { + "precision": { + "2": 0.8412084293924852 + }, + "recall": { + "2": 0.6390855348255022 + }, + "f1": { + "2": 0.6496969678563335 + }, + "micro_accuracy": { + "2": 0.9986414385930245 + }, + "coverage": { + "2": 0.7669167234977646 + } + }, + "truth_group_diagnostic": { + "precision": 0.9559186697641877, + "recall": 0.6390855348255022, + "f1": 0.734440050620203 + }, + "groups": { + "precision": { + "7015": [ + 0.9985036660182552, + 1.0 + ], + "3530": [ + 0.9977777777777778, + 1.0 + ], + "5343": [ + 0.9948849104859335, + 1.0 + ], + "4532185": [ + 0.9990335829910606, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9985657941914665, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.8, + 1.0 + ], + "8860": [ + 0.8181818181818182, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9814126394052045, + 1.0 + ], + "8841": [ + 0.9979028311779098, + 1.0 + ], + "7294": [ + 1.0, + 1.0 + ], + "6950": [ + 0.9995032701382565, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "4864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.721951747268203, + 1.0 + ], + "3530": [ + 0.6167582417582418, + 1.0 + ], + "5343": [ + 0.615506329113924, + 1.0 + ], + "4532185": [ + 0.8139229709336657, + 1.0 + ], + "9717": [ + 0.8167539267015707, + 1.0 + ], + "7016": [ + 0.8386028304727492, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.3076923076923077, + 1.0 + ], + "8860": [ + 0.6428571428571429, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.4375, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.5833333333333334, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8193950177935944, + 1.0 + ], + "5336": [ + 0.7232876712328767, + 1.0 + ], + "8841": [ + 0.6285777190664905, + 1.0 + ], + "7294": [ + 0.678927680798005, + 1.0 + ], + "6950": [ + 0.8023526284309165, + 1.0 + ], + "8863": [ + 0.6075949367088608, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.45052631578947366, + 1.0 + ], + "5345": [ + 0.45652173913043476, + 1.0 + ] + }, + "f1": { + "4864": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.7368421052631579, + 1.0 + ], + "8868": [ + 0.9007334963325184, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8087634608243596, + 1.0 + ], + "5345": [ + 0.626865671641791, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9417": [ + 1.0, + 0.0 + ], + "5336": [ + 0.832807570977918, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.72, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6166": [ + 1.0, + 0.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 1.0, + 0.0 + ], + "4532185": [ + 0.8970279846698965, + 1.0 + ], + "6950": [ + 0.890142298901423, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4870": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 1.0, + 0.0 + ], + "8870": [ + 0.0, + 1.0 + ], + "8838": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.6086956521739131, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6211901306240929, + 1.0 + ], + "3556": [ + 0.9629629629629631, + 1.0 + ], + "3530": [ + 0.7623089983022072, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7713089288126435, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.4444444444444444, + 1.0 + ], + "7015": [ + 0.8380007534848675, + 1.0 + ], + "7016": [ + 0.9116202945990179, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.7605083088954057, + 1.0 + ], + "8863": [ + 0.7559055118110237, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "5473": [ + 1.0, + 0.0 + ], + "4542": [ + 0.6666666666666666, + 1.0 + ], + "9717": [ + 0.899135446685879, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "5481": 2, + "9412": 1, + "8870": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "8841", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8870", + "images": 1 + } + ] + } + }, + "torch": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9175, + "7016": 3217, + "3530": 614, + "9717": 191, + "5336": 560, + "3556": 42, + "8861": 41, + "4532185": 14478, + "6950": 14847, + "5343": 1311, + "3553": 137, + "8840": 28, + "6166": 30, + "4705755": 51, + "7294": 1414, + "8868": 1021, + "8841": 4309, + "9412": 117, + "5340": 5, + "9541689": 1, + "8860": 32, + "8874": 41, + "4528997": 7, + "5474": 383, + "8838": 118, + "3552": 49, + "4300668": 27, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "5345": 49, + "8871": 53, + "8863": 82, + "9408": 2, + "5481": 5, + "9689": 49, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 5, + "8855": 3, + "4527533": 1, + "8864": 1, + "4865": 20, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4542": 3, + "4867": 1, + "8839": 2 + }, + "official": { + "precision": { + "2": 0.2753352445359579 + }, + "recall": { + "2": 0.8104767092433202 + }, + "f1": { + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "2": 0.9298325376979617 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7182658553111946, + "recall": 0.8104767092433202, + "f1": 0.7317239969421453 + }, + "groups": { + "precision": { + "7015": [ + 0.9238147138964578, + 1.0 + ], + "3530": [ + 0.9413680781758957, + 1.0 + ], + "5343": [ + 0.463768115942029, + 1.0 + ], + "4532185": [ + 0.983008702859511, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9518184644078334, + 1.0 + ], + "3556": [ + 0.30952380952380953, + 1.0 + ], + "8874": [ + 0.14634146341463414, + 1.0 + ], + "8860": [ + 0.375, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.3877551020408163, + 1.0 + ], + "4300668": [ + 0.7407407407407407, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9794319294809011, + 1.0 + ], + "5336": [ + 0.6, + 1.0 + ], + "8841": [ + 0.9554420979345556, + 1.0 + ], + "7294": [ + 0.9759547383309759, + 1.0 + ], + "6950": [ + 0.9781774095776925, + 1.0 + ], + "8863": [ + 0.8780487804878049, + 1.0 + ], + "4542": [ + 0.3333333333333333, + 1.0 + ], + "5474": [ + 0.9608355091383812, + 1.0 + ], + "5345": [ + 0.8571428571428571, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9170182841068917, + 1.0 + ], + "3530": [ + 0.7939560439560439, + 1.0 + ], + "5343": [ + 0.9620253164556962, + 1.0 + ], + "4532185": [ + 0.9337969949478381, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9220114423366456, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8333333333333334, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8896797153024911, + 1.0 + ], + "5336": [ + 0.9205479452054794, + 1.0 + ], + "8841": [ + 0.9064288859533245, + 1.0 + ], + "7294": [ + 0.8603491271820449, + 1.0 + ], + "6950": [ + 0.9651757825480162, + 1.0 + ], + "8863": [ + 0.9113924050632911, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.7747368421052632, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9324009324009326, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9145129224652088, + 1.0 + ], + "5345": [ + 0.8842105263157894, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7264864864864864, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.5217391304347826, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9577711228507017, + 1.0 + ], + "6950": [ + 0.971633103632836, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.4691358024691358, + 1.0 + ], + "4300668": [ + 0.7843137254901962, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8578088578088578, + 1.0 + ], + "3556": [ + 0.4642857142857143, + 1.0 + ], + "3530": [ + 0.8614008941877793, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9302903626708845, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.2222222222222222, + 1.0 + ], + "7015": [ + 0.9204039526550114, + 1.0 + ], + "7016": [ + 0.9366778831446925, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.6258363355635614, + 1.0 + ], + "8863": [ + 0.8944099378881988, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "8861": 41, + "8840": 28, + "6166": 30, + "4705755": 51, + "9412": 117, + "5340": 5, + "9541689": 1, + "4528997": 7, + "8838": 118, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "8871": 53, + "9408": 2, + "5481": 5, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 5, + "8855": 3, + "8864": 1, + "4865": 20, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4867": 1, + "8839": 2 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 338 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 214 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 116 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 106 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 103 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 94 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 92 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 84 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 78 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 75 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 74 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 72 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 67 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 67 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 66 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 58 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 57 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 56 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 54 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 51 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 49 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 48 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 44 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 44 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 43 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 42 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 35 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 32 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 31 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 30 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 29 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 29 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 28 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 27 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 24 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 24 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 23 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 22 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 22 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 21 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 20 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 20 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 20 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 20 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 19 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 18 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 16 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 14 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 13 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 12 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 11 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 11 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 11 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 10 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 10 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 9 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 9 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 8 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 8 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 8 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 8 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 8 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 7 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 7 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 7 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 7 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 7 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 6 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 6 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 6 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 6 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 5 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 5 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 5 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 4 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 4 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 4 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 4 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 3 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4864", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 3 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5345", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 2 + }, + { + "truth": "8868", + "prediction": "9689", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 2 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8861", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4870", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7014", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "3530", + "prediction": "9717", + "images": 1 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8863", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8855", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4527533", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4870", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3563", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8840", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7014", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3528", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8839", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 1 + }, + { + "truth": "3556", + "prediction": "8840", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.970800906419754, + "images": 52788, + "accepted": 38566, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 374, + "5343": 455, + "7015": 6331, + "4532185": 11359, + "6950": 12182, + "8863": 71, + "9717": 145, + "7016": 2622, + "7294": 1119, + "6166": 2, + "5336": 261, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "9412": 2, + "8841": 2423, + "4300668": 18, + "3552": 41, + "8868": 855, + "8861": 1, + "8838": 2, + "4864": 21, + "5474": 205, + "4542": 1, + "5345": 27, + "4870": 2, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.74059226732527 + }, + "recall": { + "2": 0.6535073068400129 + }, + "f1": { + "2": 0.5807455159791289 + }, + "micro_accuracy": { + "2": 0.997951563553389 + }, + "coverage": { + "2": 0.7305827081912556 + } + }, + "truth_group_diagnostic": { + "precision": 0.9762352614742195, + "recall": 0.6535073068400129, + "f1": 0.7574941512771247 + }, + "groups": { + "precision": { + "7015": [ + 0.9987363765597852, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9868131868131869, + 1.0 + ], + "4532185": [ + 0.9992957126507616, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9988558352402745, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9885057471264368, + 1.0 + ], + "8841": [ + 0.9987618654560462, + 1.0 + ], + "7294": [ + 0.998212689901698, + 1.0 + ], + "6950": [ + 0.999179116729601, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9951219512195122, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.6840852537055069, + 1.0 + ], + "3530": [ + 0.5137362637362637, + 1.0 + ], + "5343": [ + 0.7104430379746836, + 1.0 + ], + "4532185": [ + 0.7447674037136671, + 1.0 + ], + "9717": [ + 0.7591623036649214, + 1.0 + ], + "7016": [ + 0.7886178861788617, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7606761565836299, + 1.0 + ], + "5336": [ + 0.7068493150684931, + 1.0 + ], + "8841": [ + 0.5328049317481286, + 1.0 + ], + "7294": [ + 0.6963840399002493, + 1.0 + ], + "6950": [ + 0.8089320130258524, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.42947368421052634, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8640727640222333, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8204186558942343, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8242811501597445, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8534586466165415, + 1.0 + ], + "6950": [ + 0.8940467883506555, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6000000000000001, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.6787658802177858, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.6949030868628859, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.811994349556954, + 1.0 + ], + "7016": [ + 0.8813730439172136, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8261269549218031, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.863095238095238, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "6166": 2, + "9412": 2, + "8861": 1, + "8838": 2, + "4864": 21, + "4870": 2, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 39571, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 387, + "5343": 468, + "7015": 6525, + "9412": 4, + "4532185": 11634, + "3553": 1, + "6950": 12469, + "8863": 71, + "9717": 146, + "7016": 2661, + "7294": 1140, + "6166": 2, + "5336": 269, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "8841": 2550, + "4300668": 19, + "3552": 41, + "8868": 861, + "8861": 1, + "8838": 2, + "4864": 24, + "5474": 217, + "4542": 1, + "5345": 27, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.6927578760132808 + }, + "recall": { + "2": 0.6641347649986203 + }, + "f1": { + "2": 0.5676737474327976 + }, + "micro_accuracy": { + "2": 0.9974476257865609 + }, + "coverage": { + "2": 0.749621126013488 + } + }, + "truth_group_diagnostic": { + "precision": 0.9337171372352914, + "recall": 0.6641347649986203, + "f1": 0.7651254856702924 + }, + "groups": { + "precision": { + "7015": [ + 0.9983141762452107, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9829059829059829, + 1.0 + ], + "4532185": [ + 0.9990544954443872, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9984968057121383, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9888475836431226, + 1.0 + ], + "8841": [ + 0.9988235294117647, + 1.0 + ], + "7294": [ + 0.9982456140350877, + 1.0 + ], + "6950": [ + 0.9987970166011709, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9953917050691244, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7047495401925782, + 1.0 + ], + "3530": [ + 0.5315934065934066, + 1.0 + ], + "5343": [ + 0.7278481012658228, + 1.0 + ], + "4532185": [ + 0.7626140017059249, + 1.0 + ], + "9717": [ + 0.7643979057591623, + 1.0 + ], + "7016": [ + 0.8000602228244504, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7660142348754448, + 1.0 + ], + "5336": [ + 0.7287671232876712, + 1.0 + ], + "8841": [ + 0.5607661822985469, + 1.0 + ], + "7294": [ + 0.7094763092269327, + 1.0 + ], + "6950": [ + 0.8276732903568818, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.45473684210526316, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8675062972292191, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8294460641399417, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8391167192429022, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8649674418604651, + 1.0 + ], + "6950": [ + 0.9052187817996801, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.624277456647399, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.694170403587444, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7182741116751269, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8262303399289701, + 1.0 + ], + "7016": [ + 0.8883316616516214, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8363636363636364, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8664688427299703, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "9412": 4, + "6166": 2, + "8861": 1, + "8838": 2, + "4864": 24, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 18 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 6 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 5 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 3 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + } + }, + "onnx": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9171, + "7016": 3215, + "3530": 616, + "9717": 191, + "5336": 559, + "3556": 42, + "8861": 42, + "4532185": 14480, + "6950": 14855, + "5343": 1308, + "3553": 135, + "8840": 28, + "6166": 30, + "4705755": 52, + "7294": 1414, + "8868": 1021, + "8841": 4312, + "9412": 117, + "5340": 5, + "9541689": 1, + "8860": 31, + "8874": 39, + "4528997": 7, + "5474": 383, + "8838": 118, + "3552": 49, + "4300668": 27, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "5345": 49, + "8871": 53, + "8863": 82, + "9408": 2, + "5481": 5, + "9689": 49, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 4, + "8855": 3, + "4527533": 1, + "8864": 1, + "4865": 19, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4542": 3, + "4867": 1, + "8839": 2 + }, + "official": { + "precision": { + "2": 0.2756918885388057 + }, + "recall": { + "2": 0.8106325437578626 + }, + "f1": { + "2": 0.28088792323657213 + }, + "micro_accuracy": { + "2": 0.9300409183905433 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7191962309707975, + "recall": 0.8106325437578626, + "f1": 0.7327511040954056 + }, + "groups": { + "precision": { + "7015": [ + 0.9243266819321775, + 1.0 + ], + "3530": [ + 0.939935064935065, + 1.0 + ], + "5343": [ + 0.46559633027522934, + 1.0 + ], + "4532185": [ + 0.9831491712707182, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9517884914463453, + 1.0 + ], + "3556": [ + 0.30952380952380953, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.3870967741935484, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.3877551020408163, + 1.0 + ], + "4300668": [ + 0.7407407407407407, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9794319294809011, + 1.0 + ], + "5336": [ + 0.6010733452593918, + 1.0 + ], + "8841": [ + 0.9554730983302412, + 1.0 + ], + "7294": [ + 0.9759547383309759, + 1.0 + ], + "6950": [ + 0.9778525748906092, + 1.0 + ], + "8863": [ + 0.8780487804878049, + 1.0 + ], + "4542": [ + 0.3333333333333333, + 1.0 + ], + "5474": [ + 0.9608355091383812, + 1.0 + ], + "5345": [ + 0.8571428571428571, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9171264740884995, + 1.0 + ], + "3530": [ + 0.7953296703296703, + 1.0 + ], + "5343": [ + 0.9636075949367089, + 1.0 + ], + "4532185": [ + 0.9340594449183125, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "7016": [ + 0.9214092140921409, + 1.0 + ], + "3556": [ + 0.9285714285714286, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.59375, + 1.0 + ], + "4300668": [ + 0.8333333333333334, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.8896797153024911, + 1.0 + ], + "5336": [ + 0.9205479452054794, + 1.0 + ], + "8841": [ + 0.9070893879348305, + 1.0 + ], + "7294": [ + 0.8603491271820449, + 1.0 + ], + "6950": [ + 0.9653751578387718, + 1.0 + ], + "8863": [ + 0.9113924050632911, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.7747368421052632, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9324009324009326, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.9145129224652088, + 1.0 + ], + "5345": [ + 0.8842105263157894, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.7272727272727273, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.5333333333333333, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9579758419972411, + 1.0 + ], + "6950": [ + 0.9715738077720553, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.4691358024691358, + 1.0 + ], + "4300668": [ + 0.7843137254901962, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.8578088578088578, + 1.0 + ], + "3556": [ + 0.4642857142857143, + 1.0 + ], + "3530": [ + 0.8616071428571428, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9306528122882314, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "7015": [ + 0.9207125013576627, + 1.0 + ], + "7016": [ + 0.9363525091799266, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.6278350515463917, + 1.0 + ], + "8863": [ + 0.8944099378881988, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.5, + 1.0 + ], + "9717": [ + 0.9214659685863874, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "9541689": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "8861": 42, + "8840": 28, + "6166": 30, + "4705755": 52, + "9412": 117, + "5340": 5, + "9541689": 1, + "4528997": 7, + "8838": 118, + "4870": 15, + "3528": 6, + "5487": 23, + "4300664": 11, + "4538": 22, + "8871": 53, + "9408": 2, + "5481": 5, + "4525465": 1, + "7297": 23, + "6954": 2, + "9410": 4, + "8855": 3, + "8864": 1, + "4865": 19, + "5320": 1, + "8865": 2, + "4864": 132, + "3554": 6, + "8866": 4, + "7017": 6, + "3563": 1, + "4554": 4, + "4525436": 2, + "6946": 1, + "7014": 4, + "4867": 1, + "8839": 2 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 338 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 211 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 114 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 105 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 103 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 94 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 93 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 86 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 78 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 75 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 74 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 71 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 68 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 67 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 66 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 59 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 58 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 58 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 58 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 56 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 55 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 51 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 49 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 48 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 43 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 43 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 43 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 42 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 34 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 32 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 31 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 30 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 30 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 29 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 28 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 27 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 25 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 24 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 24 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 22 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 22 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 22 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 21 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 20 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 20 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 20 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 19 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 18 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 18 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 16 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 14 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 13 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 13 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 11 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 11 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 10 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 10 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 9 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 9 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 9 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 8 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 8 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 8 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 8 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 8 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 7 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 7 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 7 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 7 + }, + { + "truth": "6950", + "prediction": "8868", + "images": 7 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 7 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 6 + }, + { + "truth": "7015", + "prediction": "4705755", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 6 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 6 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 6 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 6 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 5 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 5 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 5 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 5 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 4 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 4 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 4 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 4 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 3 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 3 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4864", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 3 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 3 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 3 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 3 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8861", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9410", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5345", + "images": 2 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 2 + }, + { + "truth": "8868", + "prediction": "9689", + "images": 2 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 2 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 2 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8868", + "images": 2 + }, + { + "truth": "7294", + "prediction": "8861", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7297", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8868", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7016", + "prediction": "8841", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4870", + "images": 2 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7014", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "3530", + "prediction": "9717", + "images": 1 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 1 + }, + { + "truth": "3530", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9541689", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8863", + "images": 1 + }, + { + "truth": "7015", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8863", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8855", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "7015", + "images": 1 + }, + { + "truth": "8860", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4527533", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8838", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4864", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3556", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4870", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "3553", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3530", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3563", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8863", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8840", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7014", + "images": 1 + }, + { + "truth": "5474", + "prediction": "7016", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8855", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 1 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3556", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3528", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7014", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "7016", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7016", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8839", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 1 + }, + { + "truth": "3556", + "prediction": "8840", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3552", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.9698503911495209, + "images": 52788, + "accepted": 38672, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 376, + "5343": 458, + "7015": 6347, + "4532185": 11389, + "6950": 12205, + "8863": 71, + "9717": 145, + "7016": 2626, + "7294": 1121, + "6166": 2, + "5336": 262, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "9412": 2, + "8841": 2444, + "4300668": 18, + "3552": 41, + "8868": 855, + "8861": 1, + "8838": 2, + "4864": 21, + "5474": 209, + "4542": 1, + "5345": 27, + "4870": 2, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.7406007419898425 + }, + "recall": { + "2": 0.6548532928566179 + }, + "f1": { + "2": 0.5815679236552637 + }, + "micro_accuracy": { + "2": 0.9979571783202317 + }, + "coverage": { + "2": 0.7325907403197697 + } + }, + "truth_group_diagnostic": { + "precision": 0.9762464326229743, + "recall": 0.6548532928566179, + "f1": 0.7585668569416483 + }, + "groups": { + "precision": { + "7015": [ + 0.9987395619977942, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9868995633187773, + 1.0 + ], + "4532185": [ + 0.9992975678286066, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9988575780654989, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9444444444444444, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9885496183206107, + 1.0 + ], + "8841": [ + 0.9987725040916531, + 1.0 + ], + "7294": [ + 0.9982158786797503, + 1.0 + ], + "6950": [ + 0.9991806636624334, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9952153110047847, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.6858162934112301, + 1.0 + ], + "3530": [ + 0.5164835164835165, + 1.0 + ], + "5343": [ + 0.7151898734177216, + 1.0 + ], + "4532185": [ + 0.7467357784922249, + 1.0 + ], + "9717": [ + 0.7591623036649214, + 1.0 + ], + "7016": [ + 0.7898223426678711, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7083333333333334, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7606761565836299, + 1.0 + ], + "5336": [ + 0.7095890410958904, + 1.0 + ], + "8841": [ + 0.5374284456186702, + 1.0 + ], + "7294": [ + 0.6976309226932669, + 1.0 + ], + "6950": [ + 0.8104605569216455, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4378947368421053, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8640727640222333, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8212844036697247, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8261562998405104, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8547502816372513, + 1.0 + ], + "6950": [ + 0.8949801849405549, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8095238095238095, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.608187134502924, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.6811594202898551, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.6988262238763241, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8132135984605516, + 1.0 + ], + "7016": [ + 0.8821254413990248, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8293577981651375, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.863095238095238, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "6166": 2, + "9412": 2, + "8861": 1, + "8838": 2, + "4864": 21, + "4870": 2, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 15 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 39579, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 387, + "5343": 468, + "7015": 6523, + "9412": 4, + "4532185": 11640, + "3553": 1, + "6950": 12468, + "8863": 71, + "9717": 146, + "7016": 2660, + "7294": 1140, + "6166": 2, + "5336": 269, + "3556": 12, + "8874": 3, + "8860": 12, + "4527533": 1, + "9689": 18, + "8841": 2553, + "4300668": 19, + "3552": 41, + "8868": 862, + "8861": 1, + "8838": 2, + "4864": 25, + "5474": 218, + "4542": 1, + "5345": 27, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "official": { + "precision": { + "2": 0.6927585802170017 + }, + "recall": { + "2": 0.6642854244462157 + }, + "f1": { + "2": 0.5677697524702323 + }, + "micro_accuracy": { + "2": 0.9974228757674525 + }, + "coverage": { + "2": 0.7497726756080928 + } + }, + "truth_group_diagnostic": { + "precision": 0.933718086379437, + "recall": 0.6642854244462157, + "f1": 0.7652548837642261 + }, + "groups": { + "precision": { + "7015": [ + 0.9983136593591906, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9829059829059829, + 1.0 + ], + "4532185": [ + 0.9990549828178694, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9984962406015038, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6666666666666666, + 1.0 + ], + "8860": [ + 0.9166666666666666, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.9473684210526315, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9888475836431226, + 1.0 + ], + "8841": [ + 0.9988249118683902, + 1.0 + ], + "7294": [ + 0.9982456140350877, + 1.0 + ], + "6950": [ + 0.9987969201154957, + 1.0 + ], + "8863": [ + 0.9859154929577465, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.9954128440366973, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7045331602293627, + 1.0 + ], + "3530": [ + 0.5315934065934066, + 1.0 + ], + "5343": [ + 0.7278481012658228, + 1.0 + ], + "4532185": [ + 0.7630076766616364, + 1.0 + ], + "9717": [ + 0.7643979057591623, + 1.0 + ], + "7016": [ + 0.7997591087021981, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.15384615384615385, + 1.0 + ], + "8860": [ + 0.7857142857142857, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.75, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7669039145907474, + 1.0 + ], + "5336": [ + 0.7287671232876712, + 1.0 + ], + "8841": [ + 0.5614266842800528, + 1.0 + ], + "7294": [ + 0.7094763092269327, + 1.0 + ], + "6950": [ + 0.8276068319266299, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.4568421052631579, + 1.0 + ], + "5345": [ + 0.5869565217391305, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8680765357502517, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8294460641399417, + 1.0 + ], + "5345": [ + 0.7397260273972603, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8391167192429022, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8461538461538461, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8652207879171162, + 1.0 + ], + "6950": [ + 0.9051789932763946, + 1.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "3563": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8372093023255814, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.6262626262626263, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.694170403587444, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.718816067653277, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.25, + 1.0 + ], + "7015": [ + 0.8260814410757326, + 1.0 + ], + "7016": [ + 0.8881457950175556, + 1.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8363636363636364, + 1.0 + ], + "8863": [ + 0.9333333333333333, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8664688427299703, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "9541689": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "9412": 4, + "6166": 2, + "8861": 1, + "8838": 2, + "4864": 25, + "4705755": 1, + "4870": 3, + "8840": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 18 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 7 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 6 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 5 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 5 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 3 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 1 + } + ] + } + }, + "torch-tta": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9196, + "7016": 3266, + "3530": 634, + "5336": 517, + "5340": 5, + "8861": 22, + "4532185": 14747, + "6950": 14889, + "5343": 1091, + "3556": 35, + "8840": 19, + "8841": 4373, + "6166": 14, + "4705755": 31, + "7294": 1472, + "9412": 84, + "9717": 188, + "5345": 46, + "3553": 87, + "8860": 27, + "4528997": 3, + "8868": 1024, + "3552": 49, + "4300668": 26, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 90, + "8871": 35, + "9689": 48, + "8863": 83, + "8874": 38, + "5481": 4, + "7297": 15, + "7014": 4, + "5474": 411, + "5487": 19, + "4527533": 2, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 95, + "6946": 1, + "4542": 4, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "official": { + "precision": { + "2": 0.2856847483669441 + }, + "recall": { + "2": 0.8579010503993526 + }, + "f1": { + "2": 0.29704414021357817 + }, + "micro_accuracy": { + "2": 0.9478669394559369 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7452645609572454, + "recall": 0.8579010503993526, + "f1": 0.7748977570788995 + }, + "groups": { + "precision": { + "7015": [ + 0.9413875598086124, + 1.0 + ], + "3530": [ + 0.9589905362776026, + 1.0 + ], + "5343": [ + 0.5637030247479377, + 1.0 + ], + "4532185": [ + 0.9858954363599376, + 1.0 + ], + "9717": [ + 0.9521276595744681, + 1.0 + ], + "7016": [ + 0.9611145131659522, + 1.0 + ], + "3556": [ + 0.4, + 1.0 + ], + "8874": [ + 0.15789473684210525, + 1.0 + ], + "8860": [ + 0.48148148148148145, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.4166666666666667, + 1.0 + ], + "4300668": [ + 0.8461538461538461, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9912109375, + 1.0 + ], + "5336": [ + 0.6653771760154739, + 1.0 + ], + "8841": [ + 0.9634118454150469, + 1.0 + ], + "7294": [ + 0.9823369565217391, + 1.0 + ], + "6950": [ + 0.9834777352407817, + 1.0 + ], + "8863": [ + 0.891566265060241, + 1.0 + ], + "4542": [ + 0.25, + 1.0 + ], + "5474": [ + 0.9781021897810219, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.936600670777886, + 1.0 + ], + "3530": [ + 0.8351648351648352, + 1.0 + ], + "5343": [ + 0.9731012658227848, + 1.0 + ], + "4532185": [ + 0.9539400301817466, + 1.0 + ], + "9717": [ + 0.93717277486911, + 1.0 + ], + "7016": [ + 0.9451972297500753, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.9285714285714286, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.625, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9030249110320284, + 1.0 + ], + "5336": [ + 0.9424657534246575, + 1.0 + ], + "8841": [ + 0.9275649493615148, + 1.0 + ], + "7294": [ + 0.9014962593516209, + 1.0 + ], + "6950": [ + 0.9731507941782415, + 1.0 + ], + "8863": [ + 0.9367088607594937, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.8463157894736842, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9450651769087522, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "7294": [ + 0.9401820546163849, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.780045351473923, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.6341463414634145, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9696545284780579, + 1.0 + ], + "6950": [ + 0.9782870122928914, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.5, + 1.0 + ], + "4300668": [ + 0.8799999999999999, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.9074492099322798, + 1.0 + ], + "3556": [ + 0.5714285714285714, + 1.0 + ], + "3530": [ + 0.8928046989721, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.9451486259113854, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23529411764705882, + 1.0 + ], + "7015": [ + 0.9389880145344109, + 1.0 + ], + "7016": [ + 0.9530894185516927, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.713871154962275, + 1.0 + ], + "8863": [ + 0.9135802469135801, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.4, + 1.0 + ], + "9717": [ + 0.9445910290237466, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "5340": 5, + "8861": 22, + "8840": 19, + "6166": 14, + "4705755": 31, + "9412": 84, + "4528997": 3, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 90, + "8871": 35, + "5481": 4, + "7297": 15, + "7014": 4, + "5487": 19, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 95, + "6946": 1, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 247 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 142 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 95 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 95 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 80 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 74 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 68 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 64 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 63 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 61 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 57 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 57 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 52 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 52 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 50 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 47 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 46 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 46 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 45 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 42 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 38 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 36 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 36 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 34 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 31 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 30 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 30 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 30 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 27 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 25 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 24 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 22 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 22 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 22 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 21 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 20 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 20 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 18 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 18 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 18 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 14 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 13 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 13 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 13 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 12 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 11 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 11 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 11 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 9 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 9 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 7 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 7 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 7 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 7 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 6 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 6 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 6 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 6 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 5 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 5 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 4 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 4 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 4 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 4 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 4 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 3 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 3 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 3 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 3 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 2 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8874", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 2 + }, + { + "truth": "3530", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4867", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 1 + }, + { + "truth": "3552", + "prediction": "8838", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8866", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.964760661125183, + "images": 52788, + "accepted": 41567, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 433, + "8840": 1, + "5343": 501, + "7015": 6860, + "4532185": 12406, + "6950": 12791, + "9717": 155, + "8841": 2776, + "6166": 1, + "7016": 2778, + "5336": 295, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 864, + "8861": 1, + "8838": 1, + "7294": 1211, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 262, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7393905133847496 + }, + "recall": { + "2": 0.700159197162577 + }, + "f1": { + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "2": 0.998243799167609 + }, + "coverage": { + "2": 0.7874327498673941 + } + }, + "truth_group_diagnostic": { + "precision": 0.9746511312798972, + "recall": 0.700159197162577, + "f1": 0.7920737716056705 + }, + "groups": { + "precision": { + "7015": [ + 0.9988338192419826, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9920159680638723, + 1.0 + ], + "4532185": [ + 0.9991939384168951, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992800575953924, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9830508474576272, + 1.0 + ], + "8841": [ + 0.9985590778097982, + 1.0 + ], + "7294": [ + 0.9991742361684558, + 1.0 + ], + "6950": [ + 0.9991400203267923, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7413177539759819, + 1.0 + ], + "3530": [ + 0.5947802197802198, + 1.0 + ], + "5343": [ + 0.7863924050632911, + 1.0 + ], + "4532185": [ + 0.8133324585000984, + 1.0 + ], + "9717": [ + 0.8115183246073299, + 1.0 + ], + "7016": [ + 0.8358928033724782, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7686832740213523, + 1.0 + ], + "5336": [ + 0.7945205479452054, + 1.0 + ], + "8841": [ + 0.6103038309114928, + 1.0 + ], + "7294": [ + 0.7543640897755611, + 1.0 + ], + "6950": [ + 0.8493387386189938, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5515789473684211, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8692152917505029, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8596802841918295, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8787878787878789, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8967338228379209, + 1.0 + ], + "6950": [ + 0.918169408721891, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7109905020352781, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7459086993970714, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.757584039355015, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8510215487797305, + 1.0 + ], + "7016": [ + 0.910313166092802, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8773168578993822, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8959537572254335, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 41948, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 439, + "8840": 1, + "5343": 506, + "7015": 6930, + "4532185": 12523, + "6950": 12884, + "9717": 158, + "8841": 2829, + "7294": 1226, + "6166": 1, + "7016": 2789, + "5336": 296, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 865, + "8861": 1, + "8838": 1, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 268, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7392946941740896 + }, + "recall": { + "2": 0.7041487848093837 + }, + "f1": { + "2": 0.6092976825277342 + }, + "micro_accuracy": { + "2": 0.9980928768952035 + }, + "coverage": { + "2": 0.7946502993104494 + } + }, + "truth_group_diagnostic": { + "precision": 0.9745248241385727, + "recall": 0.7041487848093837, + "f1": 0.7947361076448708 + }, + "groups": { + "precision": { + "7015": [ + 0.9985569985569985, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9920948616600791, + 1.0 + ], + "4532185": [ + 0.9992014692964944, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992828970957333, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9831081081081081, + 1.0 + ], + "8841": [ + 0.9975256274301874, + 1.0 + ], + "7294": [ + 0.9975530179445351, + 1.0 + ], + "6950": [ + 0.9991462278795405, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7486746727253056, + 1.0 + ], + "3530": [ + 0.603021978021978, + 1.0 + ], + "5343": [ + 0.7943037974683544, + 1.0 + ], + "4532185": [ + 0.821009120136474, + 1.0 + ], + "9717": [ + 0.8272251308900523, + 1.0 + ], + "7016": [ + 0.8392050587172538, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7695729537366548, + 1.0 + ], + "5336": [ + 0.7972602739726027, + 1.0 + ], + "8841": [ + 0.6213121972699251, + 1.0 + ], + "7294": [ + 0.7624688279301746, + 1.0 + ], + "6950": [ + 0.8555193726324184, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5642105263157895, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8697838109602816, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8643109540636043, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8804841149773072, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9013830860106613, + 1.0 + ], + "6950": [ + 0.9217715083598869, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.721399730820996, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7523564695801199, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.765703432370099, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8557472330427255, + 1.0 + ], + "7016": [ + 0.9122749590834697, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.882249560632689, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.9054441260744984, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 3 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 1 + } + ] + } + }, + "onnx-tta": { + "zero": { + "threshold": 0, + "images": 52788, + "accepted": 52788, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "7015": 9198, + "7016": 3266, + "3530": 635, + "5336": 517, + "5340": 5, + "8861": 22, + "4532185": 14751, + "6950": 14888, + "5343": 1087, + "3556": 35, + "8840": 19, + "8841": 4371, + "6166": 14, + "4705755": 31, + "7294": 1471, + "9412": 85, + "9717": 189, + "5345": 46, + "3553": 87, + "8860": 27, + "4528997": 3, + "8868": 1024, + "3552": 49, + "4300668": 26, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 87, + "8871": 36, + "9689": 48, + "8863": 83, + "8874": 38, + "5481": 4, + "7297": 15, + "7014": 4, + "5474": 411, + "5487": 19, + "4527533": 2, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 96, + "6946": 1, + "4542": 4, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "official": { + "precision": { + "2": 0.2856706122641368 + }, + "recall": { + "2": 0.8580571051602935 + }, + "f1": { + "2": 0.297077819405652 + }, + "micro_accuracy": { + "2": 0.9479237705539137 + }, + "coverage": { + "2": 1.0 + } + }, + "truth_group_diagnostic": { + "precision": 0.7452276841673134, + "recall": 0.8580571051602935, + "f1": 0.7749856158408314 + }, + "groups": { + "precision": { + "7015": [ + 0.9412915851272016, + 1.0 + ], + "3530": [ + 0.9590551181102362, + 1.0 + ], + "5343": [ + 0.5657773689052438, + 1.0 + ], + "4532185": [ + 0.9858314690529456, + 1.0 + ], + "9717": [ + 0.9470899470899471, + 1.0 + ], + "7016": [ + 0.9614206981016534, + 1.0 + ], + "3556": [ + 0.4, + 1.0 + ], + "8874": [ + 0.15789473684210525, + 1.0 + ], + "8860": [ + 0.48148148148148145, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.4166666666666667, + 1.0 + ], + "4300668": [ + 0.8461538461538461, + 1.0 + ], + "3552": [ + 0.8571428571428571, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9912109375, + 1.0 + ], + "5336": [ + 0.6673114119922631, + 1.0 + ], + "8841": [ + 0.9633951040951727, + 1.0 + ], + "7294": [ + 0.982324949014276, + 1.0 + ], + "6950": [ + 0.9834766254701773, + 1.0 + ], + "8863": [ + 0.891566265060241, + 1.0 + ], + "4542": [ + 0.25, + 1.0 + ], + "5474": [ + 0.9781021897810219, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ] + }, + "recall": { + "7015": [ + 0.9367088607594937, + 1.0 + ], + "3530": [ + 0.8365384615384616, + 1.0 + ], + "5343": [ + 0.9731012658227848, + 1.0 + ], + "4532185": [ + 0.9541368676596024, + 1.0 + ], + "9717": [ + 0.93717277486911, + 1.0 + ], + "7016": [ + 0.9454983438723276, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.46153846153846156, + 1.0 + ], + "8860": [ + 0.9285714285714286, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 0.625, + 1.0 + ], + "4300668": [ + 0.9166666666666666, + 1.0 + ], + "3552": [ + 0.875, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.9030249110320284, + 1.0 + ], + "5336": [ + 0.9452054794520548, + 1.0 + ], + "8841": [ + 0.9271246147071774, + 1.0 + ], + "7294": [ + 0.9008728179551122, + 1.0 + ], + "6950": [ + 0.9730843357479896, + 1.0 + ], + "8863": [ + 0.9367088607594937, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.8463157894736842, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 0.0, + 1.0 + ], + "3552": [ + 0.865979381443299, + 1.0 + ], + "8868": [ + 0.9450651769087522, + 1.0 + ], + "8866": [ + 0.0, + 1.0 + ], + "4705755": [ + 0.0, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "7294": [ + 0.9398373983739837, + 1.0 + ], + "5345": [ + 0.9130434782608695, + 1.0 + ], + "6954": [ + 0.0, + 1.0 + ], + "5336": [ + 0.782312925170068, + 1.0 + ], + "8839": [ + 0.0, + 1.0 + ], + "4554": [ + 0.0, + 1.0 + ], + "8860": [ + 0.6341463414634145, + 1.0 + ], + "4300664": [ + 0.0, + 1.0 + ], + "9410": [ + 0.0, + 1.0 + ], + "6946": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9697252600693519, + 1.0 + ], + "6950": [ + 0.9782528812426925, + 1.0 + ], + "8864": [ + 0.0, + 1.0 + ], + "4867": [ + 0.0, + 1.0 + ], + "9408": [ + 0.0, + 1.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 0.0, + 1.0 + ], + "9689": [ + 0.5, + 1.0 + ], + "4300668": [ + 0.8799999999999999, + 1.0 + ], + "4525465": [ + 0.0, + 1.0 + ], + "5474": [ + 0.9074492099322798, + 1.0 + ], + "3556": [ + 0.5714285714285714, + 1.0 + ], + "3530": [ + 0.8936170212765957, + 1.0 + ], + "3528": [ + 0.0, + 1.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 0.0, + 1.0 + ], + "7014": [ + 0.0, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.944911926399641, + 1.0 + ], + "7017": [ + 0.0, + 1.0 + ], + "5340": [ + 0.0, + 1.0 + ], + "8874": [ + 0.23529411764705882, + 1.0 + ], + "7015": [ + 0.9389946315275743, + 1.0 + ], + "7016": [ + 0.9533930469105814, + 1.0 + ], + "5338": [ + 0.0, + 1.0 + ], + "7297": [ + 0.0, + 1.0 + ], + "5343": [ + 0.7155322862129145, + 1.0 + ], + "8863": [ + 0.9135802469135801, + 1.0 + ], + "8871": [ + 0.0, + 1.0 + ], + "6953": [ + 0.0, + 1.0 + ], + "4865": [ + 0.0, + 1.0 + ], + "5320": [ + 0.0, + 1.0 + ], + "3554": [ + 0.0, + 1.0 + ], + "4542": [ + 0.4, + 1.0 + ], + "9717": [ + 0.9421052631578947, + 1.0 + ], + "4525436": [ + 0.0, + 1.0 + ], + "4538": [ + 0.0, + 1.0 + ], + "5487": [ + 0.0, + 1.0 + ] + } + }, + "predicted_only": { + "5340": 5, + "8861": 22, + "8840": 19, + "6166": 14, + "4705755": 31, + "9412": 85, + "4528997": 3, + "3528": 5, + "4300664": 6, + "4538": 23, + "8838": 87, + "8871": 36, + "5481": 4, + "7297": 15, + "7014": 4, + "5487": 19, + "8864": 1, + "4865": 11, + "5320": 1, + "9410": 2, + "4867": 2, + "8865": 2, + "4554": 4, + "3554": 3, + "8866": 6, + "7017": 10, + "4525465": 1, + "4870": 8, + "4864": 96, + "6946": 1, + "6953": 1, + "8855": 1, + "4525436": 3, + "6954": 1, + "5338": 1, + "9408": 1, + "8839": 1 + }, + "truth_families_without_accepted_predictions": [], + "false_positive_pairs": [ + { + "truth": "7015", + "prediction": "5343", + "images": 245 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 141 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 95 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 95 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 80 + }, + { + "truth": "4532185", + "prediction": "4864", + "images": 75 + }, + { + "truth": "7016", + "prediction": "7015", + "images": 68 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 65 + }, + { + "truth": "4532185", + "prediction": "7016", + "images": 63 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 59 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 59 + }, + { + "truth": "6950", + "prediction": "5343", + "images": 57 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 53 + }, + { + "truth": "3530", + "prediction": "7015", + "images": 52 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 50 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 49 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 47 + }, + { + "truth": "8841", + "prediction": "7015", + "images": 47 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 45 + }, + { + "truth": "4532185", + "prediction": "8838", + "images": 44 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 42 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 38 + }, + { + "truth": "7015", + "prediction": "3553", + "images": 36 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 35 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 33 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 31 + }, + { + "truth": "3530", + "prediction": "7016", + "images": 30 + }, + { + "truth": "4532185", + "prediction": "5343", + "images": 30 + }, + { + "truth": "7016", + "prediction": "5343", + "images": 29 + }, + { + "truth": "5474", + "prediction": "7015", + "images": 27 + }, + { + "truth": "8841", + "prediction": "4532185", + "images": 26 + }, + { + "truth": "7294", + "prediction": "5343", + "images": 25 + }, + { + "truth": "7015", + "prediction": "5336", + "images": 22 + }, + { + "truth": "8868", + "prediction": "6950", + "images": 22 + }, + { + "truth": "5474", + "prediction": "5343", + "images": 22 + }, + { + "truth": "7015", + "prediction": "7016", + "images": 21 + }, + { + "truth": "7016", + "prediction": "4532185", + "images": 20 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 20 + }, + { + "truth": "8841", + "prediction": "8871", + "images": 19 + }, + { + "truth": "7015", + "prediction": "8841", + "images": 18 + }, + { + "truth": "4532185", + "prediction": "4705755", + "images": 18 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 15 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 14 + }, + { + "truth": "7015", + "prediction": "9689", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8874", + "images": 13 + }, + { + "truth": "4532185", + "prediction": "8871", + "images": 13 + }, + { + "truth": "6950", + "prediction": "5336", + "images": 13 + }, + { + "truth": "6950", + "prediction": "9412", + "images": 13 + }, + { + "truth": "7015", + "prediction": "9412", + "images": 12 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 12 + }, + { + "truth": "6950", + "prediction": "3553", + "images": 12 + }, + { + "truth": "4532185", + "prediction": "3530", + "images": 11 + }, + { + "truth": "8841", + "prediction": "3553", + "images": 11 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 10 + }, + { + "truth": "3530", + "prediction": "3556", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "7297", + "images": 10 + }, + { + "truth": "7016", + "prediction": "6950", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "3553", + "images": 10 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 9 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 9 + }, + { + "truth": "6950", + "prediction": "8861", + "images": 9 + }, + { + "truth": "7016", + "prediction": "3553", + "images": 8 + }, + { + "truth": "4532185", + "prediction": "8863", + "images": 7 + }, + { + "truth": "7016", + "prediction": "3556", + "images": 7 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 7 + }, + { + "truth": "8841", + "prediction": "9689", + "images": 7 + }, + { + "truth": "6950", + "prediction": "4538", + "images": 7 + }, + { + "truth": "7015", + "prediction": "8861", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8868", + "images": 6 + }, + { + "truth": "4532185", + "prediction": "8840", + "images": 6 + }, + { + "truth": "7016", + "prediction": "8874", + "images": 6 + }, + { + "truth": "8874", + "prediction": "9412", + "images": 6 + }, + { + "truth": "8868", + "prediction": "4538", + "images": 6 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 6 + }, + { + "truth": "6950", + "prediction": "5487", + "images": 6 + }, + { + "truth": "7015", + "prediction": "3530", + "images": 6 + }, + { + "truth": "3530", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7016", + "prediction": "3530", + "images": 5 + }, + { + "truth": "8841", + "prediction": "4538", + "images": 5 + }, + { + "truth": "7294", + "prediction": "8838", + "images": 5 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 5 + }, + { + "truth": "7294", + "prediction": "5474", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4705755", + "images": 5 + }, + { + "truth": "5474", + "prediction": "6950", + "images": 5 + }, + { + "truth": "8868", + "prediction": "5343", + "images": 5 + }, + { + "truth": "7015", + "prediction": "9717", + "images": 4 + }, + { + "truth": "7015", + "prediction": "3528", + "images": 4 + }, + { + "truth": "7015", + "prediction": "8840", + "images": 4 + }, + { + "truth": "9717", + "prediction": "5343", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "5487", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "3552", + "images": 4 + }, + { + "truth": "7016", + "prediction": "7294", + "images": 4 + }, + { + "truth": "7016", + "prediction": "9412", + "images": 4 + }, + { + "truth": "8868", + "prediction": "7016", + "images": 4 + }, + { + "truth": "5336", + "prediction": "4865", + "images": 4 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 4 + }, + { + "truth": "8841", + "prediction": "5487", + "images": 4 + }, + { + "truth": "8841", + "prediction": "4705755", + "images": 4 + }, + { + "truth": "6950", + "prediction": "8874", + "images": 4 + }, + { + "truth": "6950", + "prediction": "9689", + "images": 4 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 4 + }, + { + "truth": "5474", + "prediction": "4532185", + "images": 4 + }, + { + "truth": "6950", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4538", + "images": 4 + }, + { + "truth": "7015", + "prediction": "7017", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "4865", + "images": 4 + }, + { + "truth": "5336", + "prediction": "6950", + "images": 4 + }, + { + "truth": "3530", + "prediction": "8861", + "images": 3 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 3 + }, + { + "truth": "5343", + "prediction": "4705755", + "images": 3 + }, + { + "truth": "7015", + "prediction": "3556", + "images": 3 + }, + { + "truth": "7015", + "prediction": "8868", + "images": 3 + }, + { + "truth": "7015", + "prediction": "4300668", + "images": 3 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 3 + }, + { + "truth": "8841", + "prediction": "6166", + "images": 3 + }, + { + "truth": "7294", + "prediction": "8841", + "images": 3 + }, + { + "truth": "7294", + "prediction": "5336", + "images": 3 + }, + { + "truth": "6950", + "prediction": "7016", + "images": 3 + }, + { + "truth": "6950", + "prediction": "9717", + "images": 3 + }, + { + "truth": "6950", + "prediction": "8860", + "images": 3 + }, + { + "truth": "6950", + "prediction": "4542", + "images": 3 + }, + { + "truth": "5474", + "prediction": "5336", + "images": 3 + }, + { + "truth": "4532185", + "prediction": "9689", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3530", + "images": 3 + }, + { + "truth": "8868", + "prediction": "3553", + "images": 3 + }, + { + "truth": "5336", + "prediction": "3553", + "images": 3 + }, + { + "truth": "7294", + "prediction": "4865", + "images": 3 + }, + { + "truth": "3530", + "prediction": "5336", + "images": 2 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5343", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6166", + "images": 2 + }, + { + "truth": "7015", + "prediction": "7294", + "images": 2 + }, + { + "truth": "7015", + "prediction": "5345", + "images": 2 + }, + { + "truth": "7015", + "prediction": "8860", + "images": 2 + }, + { + "truth": "7015", + "prediction": "3552", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8874", + "images": 2 + }, + { + "truth": "9717", + "prediction": "8841", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7014", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5474", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "4528997", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "9717", + "images": 2 + }, + { + "truth": "7016", + "prediction": "4300664", + "images": 2 + }, + { + "truth": "4300668", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8868", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5343", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8840", + "images": 2 + }, + { + "truth": "8841", + "prediction": "8866", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4554", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8863", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5340", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8838", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8838", + "images": 2 + }, + { + "truth": "6950", + "prediction": "8866", + "images": 2 + }, + { + "truth": "3552", + "prediction": "9412", + "images": 2 + }, + { + "truth": "7015", + "prediction": "4870", + "images": 2 + }, + { + "truth": "5343", + "prediction": "6950", + "images": 2 + }, + { + "truth": "5474", + "prediction": "7294", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8840", + "images": 2 + }, + { + "truth": "5474", + "prediction": "8841", + "images": 2 + }, + { + "truth": "5336", + "prediction": "5487", + "images": 2 + }, + { + "truth": "6950", + "prediction": "5481", + "images": 2 + }, + { + "truth": "5343", + "prediction": "7014", + "images": 2 + }, + { + "truth": "3530", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5343", + "prediction": "5336", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5340", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4528997", + "images": 1 + }, + { + "truth": "7015", + "prediction": "4538", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8838", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8871", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5481", + "images": 1 + }, + { + "truth": "9717", + "prediction": "7015", + "images": 1 + }, + { + "truth": "9717", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9717", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3528", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5481", + "images": 1 + }, + { + "truth": "7016", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7016", + "prediction": "9689", + "images": 1 + }, + { + "truth": "8874", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8860", + "prediction": "3553", + "images": 1 + }, + { + "truth": "9689", + "prediction": "9412", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8860", + "images": 1 + }, + { + "truth": "9689", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8871", + "images": 1 + }, + { + "truth": "3553", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8868", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8864", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5340", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5336", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3552", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5320", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9410", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4867", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8865", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8841", + "prediction": "3554", + "images": 1 + }, + { + "truth": "8841", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9717", + "images": 1 + }, + { + "truth": "7294", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7294", + "prediction": "5487", + "images": 1 + }, + { + "truth": "7294", + "prediction": "7017", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8865", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4525465", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7297", + "images": 1 + }, + { + "truth": "8863", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "3554", + "images": 1 + }, + { + "truth": "6950", + "prediction": "9410", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5345", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8871", + "images": 1 + }, + { + "truth": "6950", + "prediction": "5474", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6946", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4300664", + "images": 1 + }, + { + "truth": "6950", + "prediction": "6953", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8855", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8874", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8860", + "images": 1 + }, + { + "truth": "5345", + "prediction": "8866", + "images": 1 + }, + { + "truth": "5345", + "prediction": "5487", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4705755", + "images": 1 + }, + { + "truth": "3552", + "prediction": "3553", + "images": 1 + }, + { + "truth": "3552", + "prediction": "5343", + "images": 1 + }, + { + "truth": "3552", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5336", + "prediction": "7015", + "images": 1 + }, + { + "truth": "5336", + "prediction": "9412", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "7015", + "prediction": "6954", + "images": 1 + }, + { + "truth": "7015", + "prediction": "7297", + "images": 1 + }, + { + "truth": "7015", + "prediction": "5474", + "images": 1 + }, + { + "truth": "3530", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "3553", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4867", + "images": 1 + }, + { + "truth": "5474", + "prediction": "4864", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8861", + "images": 1 + }, + { + "truth": "5474", + "prediction": "3530", + "images": 1 + }, + { + "truth": "5474", + "prediction": "8871", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "7017", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8860", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8866", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "4554", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5338", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9408", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5345", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8839", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3554", + "images": 1 + }, + { + "truth": "7016", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8868", + "prediction": "4870", + "images": 1 + }, + { + "truth": "8868", + "prediction": "5487", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5343", + "prediction": "4525436", + "images": 1 + }, + { + "truth": "5343", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "3556", + "images": 1 + } + ] + }, + "optimized": { + "threshold": 0.966471254825592, + "images": 52788, + "accepted": 41422, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 431, + "8840": 1, + "5343": 499, + "7015": 6816, + "4532185": 12376, + "6950": 12755, + "9717": 154, + "8841": 2758, + "6166": 1, + "7016": 2775, + "5336": 294, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 863, + "8861": 1, + "8838": 1, + "7294": 1208, + "8863": 70, + "4864": 16, + "4542": 1, + "5474": 259, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.7395038777892725 + }, + "recall": { + "2": 0.6986717712105687 + }, + "f1": { + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "2": 0.998285935010381 + }, + "coverage": { + "2": 0.7846859134651815 + } + }, + "truth_group_diagnostic": { + "precision": 0.9748005661767682, + "recall": 0.6986717712105687, + "f1": 0.7910991101485835 + }, + "groups": { + "precision": { + "7015": [ + 0.9988262910798122, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9919839679358717, + 1.0 + ], + "4532185": [ + 0.9991919844861021, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992792792792793, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9863945578231292, + 1.0 + ], + "8841": [ + 0.9985496736765772, + 1.0 + ], + "7294": [ + 0.9991721854304636, + 1.0 + ], + "6950": [ + 0.9991375931007448, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7365573947852428, + 1.0 + ], + "3530": [ + 0.592032967032967, + 1.0 + ], + "5343": [ + 0.7832278481012658, + 1.0 + ], + "4532185": [ + 0.8113640837215406, + 1.0 + ], + "9717": [ + 0.806282722513089, + 1.0 + ], + "7016": [ + 0.8349894610057211, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7677935943060499, + 1.0 + ], + "5336": [ + 0.7945205479452054, + 1.0 + ], + "8841": [ + 0.6063408190224571, + 1.0 + ], + "7294": [ + 0.7524937655860349, + 1.0 + ], + "6950": [ + 0.8469462351299263, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5452631578947369, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8686462003019627, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.8584637268847795, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8801213960546284, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.8955353586559004, + 1.0 + ], + "6950": [ + 0.9167685778001583, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7057220708446866, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7437446074201899, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7545205479452055, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8478734665919422, + 1.0 + ], + "7016": [ + 0.9097769028871392, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8753315649867373, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.8927536231884057, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 16, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 12 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + } + ] + }, + "common_0.96": { + "threshold": 0.96, + "images": 52788, + "accepted": 41952, + "truth_counts": { + "7015": 9243, + "3530": 728, + "5343": 632, + "4532185": 15241, + "9717": 191, + "7016": 3321, + "3556": 14, + "8874": 13, + "8860": 14, + "4527533": 2, + "9689": 32, + "4300668": 24, + "3552": 48, + "3553": 2, + "8868": 1124, + "5336": 365, + "8841": 4542, + "7294": 1604, + "6950": 15047, + "8863": 79, + "4542": 1, + "5474": 475, + "5345": 46 + }, + "predicted_counts": { + "3530": 439, + "8840": 1, + "5343": 507, + "7015": 6926, + "4532185": 12528, + "6950": 12882, + "9717": 158, + "8841": 2832, + "7294": 1227, + "6166": 1, + "7016": 2788, + "5336": 296, + "3556": 12, + "8874": 5, + "8860": 13, + "4527533": 1, + "9689": 18, + "4300668": 20, + "3552": 41, + "8868": 865, + "8861": 1, + "8838": 1, + "8863": 70, + "4864": 17, + "4542": 1, + "5474": 269, + "5345": 30, + "9412": 1, + "4870": 2 + }, + "official": { + "precision": { + "2": 0.739312514650181 + }, + "recall": { + "2": 0.7043557897606709 + }, + "f1": { + "2": 0.609419602563795 + }, + "micro_accuracy": { + "2": 0.9981407322654462 + }, + "coverage": { + "2": 0.7947260741077518 + } + }, + "truth_group_diagnostic": { + "precision": 0.9745483147661477, + "recall": 0.7043557897606709, + "f1": 0.794895133778863 + }, + "groups": { + "precision": { + "7015": [ + 0.9987005486572336, + 1.0 + ], + "3530": [ + 1.0, + 1.0 + ], + "5343": [ + 0.9921104536489151, + 1.0 + ], + "4532185": [ + 0.9992017879948915, + 1.0 + ], + "9717": [ + 1.0, + 1.0 + ], + "7016": [ + 0.9992826398852224, + 1.0 + ], + "3556": [ + 1.0, + 1.0 + ], + "8874": [ + 0.6, + 1.0 + ], + "8860": [ + 0.9230769230769231, + 1.0 + ], + "4527533": [ + 1.0, + 1.0 + ], + "9689": [ + 1.0, + 1.0 + ], + "4300668": [ + 0.95, + 1.0 + ], + "3552": [ + 1.0, + 1.0 + ], + "3553": [ + 1.0, + 0.0 + ], + "8868": [ + 1.0, + 1.0 + ], + "5336": [ + 0.9831081081081081, + 1.0 + ], + "8841": [ + 0.9978813559322034, + 1.0 + ], + "7294": [ + 0.9975550122249389, + 1.0 + ], + "6950": [ + 0.9991460953268126, + 1.0 + ], + "8863": [ + 1.0, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 1.0, + 1.0 + ], + "5345": [ + 1.0, + 1.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "4864": [ + 0.0, + 1.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "8839": [ + 1.0, + 0.0 + ] + }, + "recall": { + "7015": [ + 0.7483501027804825, + 1.0 + ], + "3530": [ + 0.603021978021978, + 1.0 + ], + "5343": [ + 0.7958860759493671, + 1.0 + ], + "4532185": [ + 0.821337182599567, + 1.0 + ], + "9717": [ + 0.8272251308900523, + 1.0 + ], + "7016": [ + 0.8389039445950015, + 1.0 + ], + "3556": [ + 0.8571428571428571, + 1.0 + ], + "8874": [ + 0.23076923076923078, + 1.0 + ], + "8860": [ + 0.8571428571428571, + 1.0 + ], + "4527533": [ + 0.5, + 1.0 + ], + "9689": [ + 0.5625, + 1.0 + ], + "4300668": [ + 0.7916666666666666, + 1.0 + ], + "3552": [ + 0.8541666666666666, + 1.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8868": [ + 0.7695729537366548, + 1.0 + ], + "5336": [ + 0.7972602739726027, + 1.0 + ], + "8841": [ + 0.6221928665785997, + 1.0 + ], + "7294": [ + 0.7630922693266833, + 1.0 + ], + "6950": [ + 0.8553864557719146, + 1.0 + ], + "8863": [ + 0.8860759493670886, + 1.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "5474": [ + 0.5663157894736842, + 1.0 + ], + "5345": [ + 0.6521739130434783, + 1.0 + ] + }, + "f1": { + "4864": [ + 0.0, + 1.0 + ], + "8865": [ + 1.0, + 0.0 + ], + "3552": [ + 0.9213483146067415, + 1.0 + ], + "8868": [ + 0.8697838109602816, + 1.0 + ], + "8866": [ + 1.0, + 0.0 + ], + "4705755": [ + 1.0, + 0.0 + ], + "4527533": [ + 0.6666666666666666, + 1.0 + ], + "7294": [ + 0.86471211586012, + 1.0 + ], + "5345": [ + 0.7894736842105263, + 1.0 + ], + "6954": [ + 1.0, + 0.0 + ], + "5336": [ + 0.8804841149773072, + 1.0 + ], + "8839": [ + 1.0, + 0.0 + ], + "4554": [ + 1.0, + 0.0 + ], + "8860": [ + 0.8888888888888888, + 1.0 + ], + "4300664": [ + 1.0, + 0.0 + ], + "9410": [ + 1.0, + 0.0 + ], + "6946": [ + 1.0, + 0.0 + ], + "6166": [ + 0.0, + 1.0 + ], + "5481": [ + 1.0, + 0.0 + ], + "8840": [ + 0.0, + 1.0 + ], + "4532185": [ + 0.9015808995642624, + 1.0 + ], + "6950": [ + 0.9216942962512084, + 1.0 + ], + "8864": [ + 1.0, + 0.0 + ], + "4867": [ + 1.0, + 0.0 + ], + "9408": [ + 1.0, + 0.0 + ], + "4870": [ + 0.0, + 1.0 + ], + "8861": [ + 0.0, + 1.0 + ], + "8838": [ + 0.0, + 1.0 + ], + "8855": [ + 1.0, + 0.0 + ], + "9689": [ + 0.72, + 1.0 + ], + "4300668": [ + 0.8636363636363636, + 1.0 + ], + "4525465": [ + 1.0, + 0.0 + ], + "5474": [ + 0.7231182795698925, + 1.0 + ], + "3556": [ + 0.9230769230769229, + 1.0 + ], + "3530": [ + 0.7523564695801199, + 1.0 + ], + "3528": [ + 1.0, + 0.0 + ], + "9412": [ + 0.0, + 1.0 + ], + "4528997": [ + 1.0, + 0.0 + ], + "7014": [ + 1.0, + 0.0 + ], + "3553": [ + 0.0, + 1.0 + ], + "8841": [ + 0.7664768104149715, + 1.0 + ], + "7017": [ + 1.0, + 0.0 + ], + "5340": [ + 1.0, + 0.0 + ], + "8874": [ + 0.3333333333333333, + 1.0 + ], + "7015": [ + 0.8555878532995239, + 1.0 + ], + "7016": [ + 0.9120969062039614, + 1.0 + ], + "5338": [ + 1.0, + 0.0 + ], + "7297": [ + 1.0, + 0.0 + ], + "5343": [ + 0.8832309043020192, + 1.0 + ], + "8863": [ + 0.9395973154362416, + 1.0 + ], + "8871": [ + 1.0, + 0.0 + ], + "6953": [ + 1.0, + 0.0 + ], + "4865": [ + 1.0, + 0.0 + ], + "5320": [ + 1.0, + 0.0 + ], + "3554": [ + 1.0, + 0.0 + ], + "4542": [ + 1.0, + 1.0 + ], + "9717": [ + 0.9054441260744984, + 1.0 + ], + "4525436": [ + 1.0, + 0.0 + ], + "4538": [ + 1.0, + 0.0 + ], + "5487": [ + 1.0, + 0.0 + ] + } + }, + "predicted_only": { + "8840": 1, + "6166": 1, + "8861": 1, + "8838": 1, + "4864": 17, + "9412": 1, + "4870": 2 + }, + "truth_families_without_accepted_predictions": [ + "3553" + ], + "false_positive_pairs": [ + { + "truth": "4532185", + "prediction": "4864", + "images": 13 + }, + { + "truth": "7015", + "prediction": "4532185", + "images": 5 + }, + { + "truth": "6950", + "prediction": "4864", + "images": 4 + }, + { + "truth": "4532185", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7294", + "prediction": "6950", + "images": 3 + }, + { + "truth": "7015", + "prediction": "5343", + "images": 3 + }, + { + "truth": "7294", + "prediction": "7015", + "images": 3 + }, + { + "truth": "7015", + "prediction": "6950", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "7294", + "images": 2 + }, + { + "truth": "9689", + "prediction": "8841", + "images": 2 + }, + { + "truth": "8841", + "prediction": "5336", + "images": 2 + }, + { + "truth": "7294", + "prediction": "7016", + "images": 2 + }, + { + "truth": "6950", + "prediction": "7015", + "images": 2 + }, + { + "truth": "4532185", + "prediction": "5336", + "images": 2 + }, + { + "truth": "8868", + "prediction": "7015", + "images": 2 + }, + { + "truth": "8868", + "prediction": "4532185", + "images": 2 + }, + { + "truth": "6950", + "prediction": "4870", + "images": 2 + }, + { + "truth": "3530", + "prediction": "8840", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "8841", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "6166", + "images": 1 + }, + { + "truth": "7016", + "prediction": "5336", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8874", + "images": 1 + }, + { + "truth": "8841", + "prediction": "5343", + "images": 1 + }, + { + "truth": "8841", + "prediction": "4300668", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8861", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8860", + "images": 1 + }, + { + "truth": "8841", + "prediction": "6950", + "images": 1 + }, + { + "truth": "8841", + "prediction": "8838", + "images": 1 + }, + { + "truth": "8863", + "prediction": "6950", + "images": 1 + }, + { + "truth": "6950", + "prediction": "7294", + "images": 1 + }, + { + "truth": "7015", + "prediction": "8874", + "images": 1 + }, + { + "truth": "3530", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "3530", + "prediction": "6950", + "images": 1 + }, + { + "truth": "4532185", + "prediction": "9412", + "images": 1 + }, + { + "truth": "8868", + "prediction": "8841", + "images": 1 + }, + { + "truth": "5336", + "prediction": "8841", + "images": 1 + }, + { + "truth": "7294", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "4532185", + "images": 1 + }, + { + "truth": "6950", + "prediction": "8841", + "images": 1 + } + ] + } + } + } +} diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md index 59fb6be..efeb1f4 100644 --- a/docs/mambo-confidence-thresholds.md +++ b/docs/mambo-confidence-thresholds.md @@ -48,6 +48,9 @@ Macro-F1 further. **Family reverses the unthresholded F1 ranking: V2 leads all V variants after calibration** (0.6545 versus about 0.581 without TTA and 0.607 with TTA). V3 + TTA retains more family recall than V2, so this is a trade-off rather than uniform dominance. These operating points need not have equal coverage. +The [family-level audit](mambo-family-precision.md) traces the reversal to 7 +predicted-only families surviving V3 thresholds versus 3 for V2. Precision within +the same 22 truth-present predicted families is actually higher for V3. ![Macro-F1 and coverage before and after calibration](assets/mambo-threshold-comparison.svg) diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index f51130d..3b58be8 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -123,7 +123,9 @@ Thresholding changes the comparison. Using `mini_metrics` Macro-F1 calibration o Ordinary V3 overtakes V2 on species Macro-F1 after calibration; TTA improves species and genus further. **V2 leads calibrated family Macro-F1**, while V3 + TTA -retains more family recall. The different TTA species operating points largely +retains more family recall. A [per-family audit](mambo-family-precision.md) shows +that V3 retains more rare predictions into families absent from Flemming truth, +which lowers its macro precision and F1. The different TTA species operating points largely explain the backend F1 gap: at a shared threshold, PyTorch and ONNX remain closely aligned. Higher accepted accuracy comes with abstention; coverage is the fraction of images accepted independently at each rank. diff --git a/docs/mambo-family-precision.md b/docs/mambo-family-precision.md new file mode 100644 index 0000000..f618281 --- /dev/null +++ b/docs/mambo-family-precision.md @@ -0,0 +1,138 @@ +# Why calibrated family Macro-F1 favours V2 + +**The difference is driven by additional predicted-only families surviving V3's +confidence thresholds.** Their image counts are small, but each family receives +equal weight in macro precision and Macro-F1. It is not a larger V3 taxonomy: +V2 and V3 have identical genus/family mappings for all 12,632 model species, and +the shared northern-Europe species list spans 67 eligible families in both. +Flemming reporting truth contains 23 families. + +This audit uses the same 52,788 reporting images, all truth, and independently +calibrated family thresholds as the [threshold study](mambo-confidence-thresholds.md). +All precision, recall and F1 values and class weights come from pinned +`mini_metrics` revision `70cc69adc05362863439277048e06386c1f885e1`. +Counts below describe retained predictions, without reimplementing metrics. + +## Which families enter the average? + +At the calibrated thresholds, every pipeline predicts the **same 22 truth-present +families**. Gelechiidae is present in truth but has no accepted predictions in any +pipeline. In addition, V2 predicts 3 families absent from reporting truth; V3 predicts +7. Those extra families have zero precision and zero F1. + +| Pipeline | Predicted-only families | Images assigned to them | Official macro precision | Precision over truth-present groups only | +|---|---:|---:|---:|---:| +| MAMBO v2 | 3 | 4 | 0.8413 | 0.9561 | +| V3 PyTorch | 7 | 31 | 0.7406 | 0.9762 | +| V3 ONNX | 7 | 31 | 0.7406 | 0.9762 | +| V3 PyTorch + TTA | 7 | 24 | 0.7394 | 0.9747 | +| V3 ONNX + TTA | 7 | 23 | 0.7395 | 0.9748 | + +The last column is a **diagnostic change to the averaging domain**, not a corrected +benchmark score. It reaggregates the package's existing per-class outputs over +truth-present families; it does not delete images, rerun predictions, or replace +the official metrics. At these operating points, all pipelines have the same 22 +active precision groups in that diagnostic. + +The package's weights give the exact decomposition: + +- V2: `0.956078 × 22 / (22 + 3) = 0.841349` macro precision. +- V3 PyTorch: `0.976235 × 22 / (22 + 7) = 0.740592` macro precision. + +V3 has higher average precision within those shared truth-present groups. Its +lower official macro precision arises from the four additional zero-precision +groups. Even one accepted prediction can activate such a group; these are errors +relative to this dataset's labels, not evidence that the family cannot occur locally. + +## Which extra families survive? + +Accepted predictions into families absent from reporting truth: + +| Family | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | +|---|---:|---:|---:|---:|---:| +| Bedelliidae | 0 | 21 | 21 | 17 | 16 | +| Choreutidae | 0 | 2 | 2 | 2 | 2 | +| Coleophoridae | 0 | 2 | 2 | 1 | 1 | +| Cossidae | 0 | 1 | 1 | 1 | 1 | +| Opostegidae | 0 | 2 | 2 | 1 | 1 | +| Pieridae | 2 | 0 | 0 | 0 | 0 | +| Psychidae | 0 | 1 | 1 | 1 | 1 | +| Thyrididae | 1 | 0 | 0 | 0 | 0 | +| Tineidae | 1 | 2 | 2 | 1 | 1 | + +Bedelliidae contributes most V3 cases: without TTA, 15 are labelled Erebidae and +6 Geometridae. With PyTorch TTA, those counts fall to 13 and 4; ONNX TTA has 12 and +4. Each of the other six predicted-only V3 families has only one or two accepted +images. V2's four cases are two Nolidae → Pieridae, one Erebidae → Tineidae and +one Geometridae → Thyrididae. These are label-based confusions; image-level expert +review has not established whether every ground-truth annotation is correct. + +## How this affects F1 and the crossing + +Macro-F1 is an average of per-family F1 values, **not** the harmonic mean of the +reported macro precision and macro recall. Its active domain includes all 23 +truth families, even the one without accepted predictions, plus predicted-only +families: 26 groups for V2 and 30 for V3. + +| Pipeline | Official family Macro-F1 | F1 over the same 23 truth families only | Macro recall | +|---|---:|---:|---:| +| MAMBO v2 | 0.6545 | 0.7399 | 0.6467 | +| V3 PyTorch | 0.5807 | 0.7575 | 0.6535 | +| V3 ONNX | 0.5816 | 0.7586 | 0.6549 | +| V3 PyTorch + TTA | 0.6073 | 0.7921 | 0.7002 | +| V3 ONNX + TTA | 0.6065 | 0.7911 | 0.6987 | + +Again, the middle column is explanatory, not a substitute benchmark. Its ranking +favours V3, especially TTA; adding the zero-F1 predicted-only groups yields the +official ranking favouring V2. Recall is unchanged by this diagnostic because +predicted-only families have no true support. + +At threshold zero, the pattern is different: **V2 predicts 41 absent families, +V3 37**, with 408 versus 756 accepted images assigned to them (535 for either TTA +backend). Thresholding removes more of V2's low-confidence predicted-only groups, +leaving 3 versus 7. This explains why the ordering changes after calibration. +A common family threshold of **0.96** still leaves 3 such groups for V2, 8 for +ordinary V3 and 7 for TTA; the effect is not solely the choice of different +optimized threshold values. Within-truth averages also vary with operating point. + +At the calibrated operating points, V3 improves recall of represented families +while retaining a wider set of rare, confident false-family predictions. +The official macro metrics expose that weakness, with considerable sensitivity +to singleton predictions. Keep both official metrics and coverage; excluding +absent families from deployment or evaluation based on Flemming would hide the +failure mode and artificially tailor the system to this benchmark. + +## Evidence and reproduction + +The [per-family CSV](assets/mambo-family-precision.csv) contains family names, +truth counts, accepted prediction counts, and the package's P/R/F1 values and +weights for threshold zero, calibrated thresholds and the common 0.96 threshold. +A blank metric with zero weight means the package did not emit that class group. +The [JSON evidence](assets/mambo-family-precision.json) retains official scores, +diagnostic aggregations, false-positive confusion counts, input hashes, and the +name/taxonomy audit. Family names come from the pinned local metadata parquet. + +The [audit script](../dev/releases/mambo_v3/family_precision_report.py) uses public +per-class metric calls (`aggregate=False`) and the pinned package's own +`_aggregate_groups` implementation for diagnostic reaggregation. No data rows or +thresholds are chosen using the diagnostic to improve the official results. + +Prepare names and verify taxonomy using `.venv` (PyArrow/PyTorch), then collect +metrics using the existing pinned metrics environment: + +```python +from pathlib import Path +from dev.releases.mambo_v3.family_precision_report import prepare_taxonomy +from dev.releases.mambo_v3.evaluation_data import write_json + +write_json(Path("/tmp/family-taxonomy.json"), prepare_taxonomy( + Path("examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet"), + Path("local-evidence/mambo-v3/MAMBO/hierarchical_bioclip2_ft_neu_v1.pt"), + Path("local-evidence/mambo-bundle-final/classes.json"), +)) +``` + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.family_precision_report \ + --taxonomy /tmp/family-taxonomy.json --output /tmp/family-precision +``` diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index b95e58e..c301a7e 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -174,3 +174,29 @@ def test_pinned_metrics_distinguish_micro_macro_and_known_truth(tmp_path): metrics = json.loads((tmp_path / "metrics.json").read_text()) assert metrics["all"]["f1"]["0"] == pytest.approx(3 / 7) assert metrics["known"]["f1"]["0"] == pytest.approx(1) + + +def test_family_audit_export_keeps_predicted_only_groups_without_recall(tmp_path): + from dev.releases.mambo_v3.family_precision_report import export + + # mini_metrics emits no recall group for a family that occurs only in predictions. + row = { + "threshold": 0.95, + "truth_counts": {"present": 2}, + "predicted_counts": {"present": 1, "absent": 1}, + "groups": { + "precision": {"present": [1, 1], "absent": [0, 1]}, + "recall": {"present": [0.5, 1]}, + "f1": {"present": [2 / 3, 1], "absent": [0, 1]}, + }, + } + data = {"taxonomy": {"names": {"absent": "Absent family"}}, "models": {"v3": {"optimized": row}}} + export(data, tmp_path) + with (tmp_path / "mambo-family-precision.csv").open() as stream: + rows = {r["family_id"]: r for r in csv.DictReader(stream)} + assert rows["absent"]["truth_images"] == "0" + assert rows["absent"]["accepted_predictions"] == "1" + assert rows["absent"]["precision"] == "0" + assert rows["absent"]["recall"] == "" + assert rows["absent"]["recall_weight"] == "0" + assert rows["absent"]["f1_weight"] == "1" From 9a0c829ab2a22fa13735c1e8594b0085457371fa Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 12:51:27 +0200 Subject: [PATCH 041/221] feat: add support-truncated release metric comparisons --- dev/releases/mambo_v3/tail_report.py | 122 + docs/assets/mambo-tail-metrics.csv | 241 + docs/assets/mambo-tail-metrics.json | 49063 ++++++++++++++++++++ docs/mambo-confidence-thresholds.md | 7 + docs/mambo-tail-metrics.md | 93 + tests/releases/test_release_evaluation.py | 10 + 6 files changed, 49536 insertions(+) create mode 100644 dev/releases/mambo_v3/tail_report.py create mode 100644 docs/assets/mambo-tail-metrics.csv create mode 100644 docs/assets/mambo-tail-metrics.json create mode 100644 docs/mambo-tail-metrics.md diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py new file mode 100644 index 0000000..737fe70 --- /dev/null +++ b/dev/releases/mambo_v3/tail_report.py @@ -0,0 +1,122 @@ +"""Supplementary support-truncated macro metrics from pinned mini_metrics class outputs.""" + +import argparse +import csv +import importlib.metadata +import json +from collections import Counter +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.threshold_report import identity + + +def eligible_classes(truth, accepted_predictions, cutoff): + """Use strict support cutoffs in both domains, without dropping evaluation rows.""" + return {label for label, count in truth.items() if count > cutoff and accepted_predictions.get(label, 0) > cutoff} + + +def collect(study): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError("Require pinned mini_metrics") + metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} + work = {} + for model, source in study["models"].items(): + if file_hash(source["source"]) != source["source_sha256"]: + raise ValueError("Changed predictions") + data, _ = MetricDF.from_source(source["source"]).split((0.9, 0.1), strata=("label",), seed=42) + if identity(data) != source["identities"]["report"]: + raise ValueError("Changed reporting partition") + work[model] = {} + for scope, threshold in (("zero", 0), ("optimized", source["thresholds"])): + df = data.with_threshold(threshold) + groups = {name: metric(df, aggregate=False, verbose=0) for name, metric in metrics.items()} + work[model][scope] = {} + for level in range(3): + rows = df[df.level == level] + work[model][scope][level] = { + "truth": Counter(map(str, rows.label)), + "predictions": Counter(map(str, rows.prediction[rows.prediction_made])), + "groups": {m: g[level] for m, g in groups.items()}, + } + result = { + "revision": REVISION, + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [], + } + for scope in ("zero", "optimized"): + for level, rank in enumerate(("species", "genus", "family")): + for cutoff in (0, 5, 10, 20): + eligible = { + model: eligible_classes(scopes[scope][level]["truth"], scopes[scope][level]["predictions"], cutoff) + for model, scopes in work.items() + } + shared = set.intersection(*eligible.values()) + for model, scopes in work.items(): + row = scopes[scope][level] + for domain, selected in (("per_model", eligible[model]), ("common", shared)): + reference = study["models"][model]["report_zero" if scope == "zero" else "report_optimized"] + result["rows"].append( + { + "model": model, + "scope": scope, + "rank": rank, + "cutoff": cutoff, + "domain": domain, + "classes": sorted(selected), + "class_count": len(selected), + "truth_images_in_retained_classes": sum(row["truth"][k] for k in selected), + "accepted_predictions_in_retained_classes": sum(row["predictions"][k] for k in selected), + "report_images": study["models"][model]["report_images"], + "overall_coverage": reference["coverage"][str(level)], + "metrics": { + name: float( + metric._aggregate_groups({k: v for k, v in row["groups"][name].items() if str(k) in selected}) + ) + if selected + else None + for name, metric in metrics.items() + }, + } + ) + return finite_json(result) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + result = collect(json.loads(args.study.read_text())) + args.output.mkdir(parents=True, exist_ok=True) + write_json(args.output / "mambo-tail-metrics.json", result) + with (args.output / "mambo-tail-metrics.csv").open("w", newline="") as stream: + writer = csv.DictWriter( + stream, + fieldnames=[ + "model", + "scope", + "rank", + "cutoff", + "domain", + "class_count", + "truth_images_in_retained_classes", + "accepted_predictions_in_retained_classes", + "report_images", + "overall_coverage", + "accuracy", + "precision", + "recall", + "f1", + ], + lineterminator="\n", + ) + writer.writeheader() + for row in result["rows"]: + writer.writerow({**{k: v for k, v in row.items() if k not in ("classes", "metrics")}, **row["metrics"]}) diff --git a/docs/assets/mambo-tail-metrics.csv b/docs/assets/mambo-tail-metrics.csv new file mode 100644 index 0000000..1c31a59 --- /dev/null +++ b/docs/assets/mambo-tail-metrics.csv @@ -0,0 +1,241 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,0,per_model,490,45522,40726,52788,1.0,0.730398334373567,0.6692785107551973,0.730398334373567,0.6442770650899289 +v2,zero,species,0,common,479,45499,40683,52788,1.0,0.7445619704447763,0.6838130903341267,0.7445619704447763,0.6579127480970971 +torch,zero,species,0,per_model,495,45527,41183,52788,1.0,0.7524863219892478,0.6854888251847001,0.7524863219892478,0.6751936464806082 +torch,zero,species,0,common,479,45499,41145,52788,1.0,0.768226992452354,0.7029581805144605,0.768226992452354,0.6921799339065436 +onnx,zero,species,0,per_model,495,45527,41196,52788,1.0,0.7522981230833534,0.6856640486185108,0.7522981230833534,0.6753901809023951 +onnx,zero,species,0,common,479,45499,41158,52788,1.0,0.7680325071529435,0.7031392569230956,0.7680325071529435,0.6923830331524404 +torch-tta,zero,species,0,per_model,491,45520,42031,52788,1.0,0.7873444012917992,0.7275774071350241,0.7873444012917992,0.7194797347248981 +torch-tta,zero,species,0,common,479,45499,42007,52788,1.0,0.7966306910945165,0.7388458738412599,0.7966306910945165,0.7300482696837085 +onnx-tta,zero,species,0,per_model,490,45519,42040,52788,1.0,0.7892730174965529,0.7287480551447586,0.7892730174965529,0.7209150108506917 +onnx-tta,zero,species,0,common,479,45499,42017,52788,1.0,0.7969598717605656,0.7385244544626272,0.7969598717605656,0.7300144608463682 +v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.8271892598535118,0.7835860088760841,0.7771880031099807 +v2,zero,species,5,common,313,44730,39306,52788,1.0,0.7884742372532278,0.8305015444074887,0.7884742372532278,0.7815287772418466 +torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.826169612130568,0.8016540743299243,0.7937632511493783 +torch,zero,species,5,common,313,44730,40012,52788,1.0,0.8112118860261139,0.8306457257526491,0.8112118860261139,0.801323823079522 +onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168297,0.8021426772632025,0.7940157823083628 +onnx,zero,species,5,common,313,44730,40027,52788,1.0,0.8117129772132781,0.8307669950260991,0.8117129772132781,0.8015828087090237 +torch-tta,zero,species,5,per_model,323,44853,41093,52788,1.0,0.8286743235345041,0.8455415603248386,0.8286743235345041,0.82010073306771 +torch-tta,zero,species,5,common,313,44730,41004,52788,1.0,0.8390964584441899,0.8519293635860035,0.8390964584441899,0.8287585120001667 +onnx-tta,zero,species,5,per_model,323,44853,41099,52788,1.0,0.8289044913540222,0.8454663089232555,0.8289044913540222,0.8200672672516621 +onnx-tta,zero,species,5,common,313,44730,41010,52788,1.0,0.8393339798681654,0.8518517079862864,0.8393339798681654,0.8287239769887177 +v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316644,0.7994793772053351,0.8020074761104699 +v2,zero,species,10,common,271,43652,38723,52788,1.0,0.8043288259343255,0.849759710747019,0.8043288259343255,0.8062320354321301 +torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965738,0.8171258284359165,0.8180429337935673 +torch,zero,species,10,common,271,43652,39130,52788,1.0,0.8236153818021188,0.8538220455561393,0.8236153818021188,0.8231516237390821 +onnx,zero,species,10,per_model,285,44492,39626,52788,1.0,0.817676149634451,0.8513280853428178,0.817676149634451,0.8183308171409442 +onnx,zero,species,10,common,271,43652,39144,52788,1.0,0.8241941328780684,0.853964176577097,0.8241941328780684,0.8234543792889069 +torch-tta,zero,species,10,per_model,284,44470,40603,52788,1.0,0.8470429977027221,0.8707776696179902,0.8470429977027221,0.8452968243564886 +torch-tta,zero,species,10,common,271,43652,40056,52788,1.0,0.8513634723466735,0.872112449562329,0.8513634723466735,0.8483517909129424 +onnx-tta,zero,species,10,per_model,284,44470,40609,52788,1.0,0.8473047730749205,0.8706920843971752,0.8473047730749205,0.8452587628826029 +onnx-tta,zero,species,10,common,271,43652,40062,52788,1.0,0.8516378052090512,0.8720227587774156,0.8516378052090512,0.8483119036118962 +v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998341 +v2,zero,species,20,common,208,42384,37437,52788,1.0,0.8136982479192534,0.8648542018939746,0.8136982479192534,0.8209483082438455 +torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.878086795953307,0.8271275510654174,0.8390189376702695 +torch,zero,species,20,common,208,42384,37796,52788,1.0,0.8339089780399618,0.8827194680660193,0.8339089780399618,0.8454184870285211 +onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089122,0.8276292942912182,0.8392847349307754 +onnx,zero,species,20,common,208,42384,37811,52788,1.0,0.8344444924444223,0.8825394050561279,0.8344444924444223,0.8455033297180401 +torch-tta,zero,species,20,per_model,223,43375,39483,52788,1.0,0.8552687902032574,0.8920154706737624,0.8552687902032574,0.8618363751815306 +torch-tta,zero,species,20,common,208,42384,38766,52788,1.0,0.859934317761158,0.8943362486856059,0.859934317761158,0.8655942697573593 +onnx-tta,zero,species,20,per_model,223,43375,39484,52788,1.0,0.8552572257583305,0.8920297055771915,0.8552572257583305,0.8618121872907233 +onnx-tta,zero,species,20,common,208,42384,38767,52788,1.0,0.8599219193418374,0.894351510144571,0.8599219193418374,0.8655683375475033 +v2,zero,genus,0,per_model,319,52782,45642,52788,1.0,0.7968044107211967,0.6975226462533961,0.7968044107211967,0.6959574069830721 +v2,zero,genus,0,common,317,52780,45639,52788,1.0,0.80183156788663,0.7019234200467929,0.80183156788663,0.7003483054498423 +torch,zero,genus,0,per_model,319,52784,45349,52788,1.0,0.8128760350980341,0.7169693814982813,0.8128760350980341,0.7220190914539127 +torch,zero,genus,0,common,317,52780,45344,52788,1.0,0.8180045905245201,0.721492847627608,0.8180045905245201,0.7265744169520447 +onnx,zero,genus,0,per_model,320,52785,45352,52788,1.0,0.8103934792030048,0.71472382411519,0.8103934792030048,0.7198779438069757 +onnx,zero,genus,0,common,317,52780,45346,52788,1.0,0.818062818122907,0.7214877719774788,0.818062818122907,0.726690668827231 +torch-tta,zero,genus,0,per_model,320,52786,45977,52788,1.0,0.8364835445780064,0.7515734271797273,0.8364835445780064,0.7584406445360485 +torch-tta,zero,genus,0,common,317,52780,45974,52788,1.0,0.8443997926339497,0.7586861094558761,0.8443997926339497,0.7656183162509008 +onnx-tta,zero,genus,0,per_model,320,52786,45980,52788,1.0,0.836506364737312,0.7510970456076229,0.836506364737312,0.7581454918652479 +onnx-tta,zero,genus,0,common,317,52780,45977,52788,1.0,0.844422828756908,0.7582052195408181,0.844422828756908,0.7653203703371588 +v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466804 +v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133609 +torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500324 +onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500324 +torch-tta,zero,genus,5,per_model,243,52575,45481,52788,1.0,0.8642862537522121,0.8433344795518117,0.8642862537522121,0.8345738246636745 +torch-tta,zero,genus,5,common,242,52567,45474,52788,1.0,0.8642419820735022,0.8426871013681415,0.8642419820735022,0.8341657275204114 +onnx-tta,zero,genus,5,per_model,243,52575,45485,52788,1.0,0.8643163049908037,0.8430323470999015,0.8643163049908037,0.8343804242225075 +onnx-tta,zero,genus,5,common,242,52567,45478,52788,1.0,0.8642721574907657,0.8423837204350251,0.8642721574907657,0.8339715279038676 +v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593797,0.8242091812881619,0.8073029077289685 +v2,zero,genus,10,common,218,52338,44570,52788,1.0,0.8246759171734157,0.8375222344229503,0.8246759171734157,0.8087106982251911 +torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.8360051629538205,0.8420595718087585,0.8201488914933474 +torch,zero,genus,10,common,218,52338,44425,52788,1.0,0.8440854196075196,0.8391956132162521,0.8440854196075196,0.8223122767531698 +onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467141,0.8421419742582609,0.8198882695930895 +onnx,zero,genus,10,common,218,52338,44429,52788,1.0,0.8441700900143477,0.8386873650181246,0.8441700900143477,0.822044481773088 +torch-tta,zero,genus,10,per_model,222,52384,45193,52788,1.0,0.8724264504229726,0.8640463448274117,0.8724264504229726,0.8517515085475369 +torch-tta,zero,genus,10,common,218,52338,45144,52788,1.0,0.8724594243641395,0.8649085173552921,0.8724594243641395,0.8519555844726409 +onnx-tta,zero,genus,10,per_model,222,52384,45198,52788,1.0,0.8724593443462958,0.8636328288870724,0.8724593443462958,0.8514582101275703 +onnx-tta,zero,genus,10,common,218,52338,45149,52788,1.0,0.8724929218456889,0.864487413966506,0.8724929218456889,0.8516569044302899 +v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462851,0.8447796356264702,0.8409068314387458 +v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290815,0.8468431185140185,0.8425197107045042 +torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251573,0.851621812405513,0.8500899477281387 +torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.879992285140897,0.8572846967941111,0.8551335240737619 +onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140181 +onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758777,0.8569783049191699,0.8548933267800544 +torch-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769067543097299,0.8943059399376526,0.8769067543097299,0.87295880197148 +torch-tta,zero,genus,20,common,174,51091,43849,52788,1.0,0.8813164944712208,0.8965073033675035,0.8813164944712208,0.8765450108644934 +onnx-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769470993427563,0.8939963574869481,0.8769470993427563,0.8728097609356607 +onnx-tta,zero,genus,20,common,174,51091,43850,52788,1.0,0.8813584625802887,0.8961383784724689,0.8813584625802887,0.876352418020288 +v2,zero,family,0,per_model,23,52788,52380,52788,1.0,0.8435038466784595,0.7265179495682207,0.8435038466784595,0.75042499174046 +v2,zero,family,0,common,23,52788,52380,52788,1.0,0.8435038466784595,0.7265179495682207,0.8435038466784595,0.75042499174046 +torch,zero,family,0,per_model,23,52788,52032,52788,1.0,0.8104767092433202,0.7182658553111946,0.8104767092433202,0.7317239969421455 +torch,zero,family,0,common,23,52788,52032,52788,1.0,0.8104767092433202,0.7182658553111946,0.8104767092433202,0.7317239969421455 +onnx,zero,family,0,per_model,23,52788,52032,52788,1.0,0.8106325437578626,0.7191962309707975,0.8106325437578626,0.7327511040954056 +onnx,zero,family,0,common,23,52788,52032,52788,1.0,0.8106325437578626,0.7191962309707975,0.8106325437578626,0.7327511040954056 +torch-tta,zero,family,0,per_model,23,52788,52253,52788,1.0,0.8579010503993526,0.7452645609572454,0.8579010503993526,0.7748977570788995 +torch-tta,zero,family,0,common,23,52788,52253,52788,1.0,0.8579010503993526,0.7452645609572454,0.8579010503993526,0.7748977570788995 +onnx-tta,zero,family,0,per_model,23,52788,52253,52788,1.0,0.8580571051602935,0.7452276841673134,0.8580571051602935,0.7749856158408315 +onnx-tta,zero,family,0,common,23,52788,52253,52788,1.0,0.8580571051602935,0.7452276841673134,0.8580571051602935,0.7749856158408315 +v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 +v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 +torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 +torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 +onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +torch-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +onnx-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +onnx-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 +v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 +torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 +torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 +onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +torch-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 +onnx-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +onnx-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 +v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579269 +v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579269 +torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152918 +torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152918 +onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +torch-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 +torch-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 +onnx-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426246,0.902659031092756,0.8814000078705927 +onnx-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426246,0.902659031092756,0.8814000078705927 +v2,optimized,species,0,per_model,433,44484,31566,52788,0.6973175721754944,0.9240191857358756,0.885700493336194,0.6531790785268475,0.7117924113167411 +v2,optimized,species,0,common,413,44369,31533,52788,0.6973175721754944,0.9385872203508142,0.9084139958383503,0.6750014601723655,0.7345720682137987 +torch,optimized,species,0,per_model,449,45205,31873,52788,0.7081344244904145,0.9398423490596125,0.9094313118847961,0.6713467663200402,0.7401393054211883 +torch,optimized,species,0,common,413,44369,31677,52788,0.7081344244904145,0.9483742161527923,0.9278828363613216,0.6933654020535126,0.7625446812254123 +onnx,optimized,species,0,per_model,449,45205,31724,52788,0.7045351216185497,0.940681805632725,0.9109585170264042,0.6688306126725968,0.7382564696944265 +onnx,optimized,species,0,common,413,44369,31534,52788,0.7045351216185497,0.948876538655318,0.92844781010515,0.6912679285399674,0.7610933438936152 +torch-tta,optimized,species,0,per_model,465,45248,35052,52788,0.7831893612184587,0.932529958593781,0.898413496661032,0.717614394885624,0.7671987063507582 +torch-tta,optimized,species,0,common,413,44369,34742,52788,0.7831893612184587,0.9456222727159702,0.9252382253232228,0.7526084931806575,0.8021001528962034 +onnx-tta,optimized,species,0,per_model,450,45148,33352,52788,0.7404902629385466,0.9483124062069127,0.9228068935716895,0.7047776611494099,0.7675439553505272 +onnx-tta,optimized,species,0,common,413,44369,33106,52788,0.7404902629385466,0.9531195374005882,0.9347573093799684,0.7229650126277268,0.7857605754515414 +v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.943736867068747,0.6916423088644161,0.7737956953842573 +v2,optimized,species,5,common,272,42778,31024,52788,0.6973175721754944,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854289 +torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942064 +torch,optimized,species,5,common,272,42778,30977,52788,0.7081344244904145,0.963494109771882,0.9626322859838098,0.7171390330256306,0.8016422382706131 +onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565229,0.7010200481362973,0.788830662496077 +onnx,optimized,species,5,common,272,42778,30845,52788,0.7045351216185497,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018762 +torch-tta,optimized,species,5,per_model,295,44279,34630,52788,0.7831893612184587,0.9565023879246428,0.9579592889257432,0.7631267851065484,0.8330906323599062 +torch-tta,optimized,species,5,common,272,42778,33853,52788,0.7831893612184587,0.9585814667783285,0.9585731812083509,0.7743974002343408,0.8413487263251005 +onnx-tta,optimized,species,5,per_model,293,44256,32979,52788,0.7404902629385466,0.9624875420542846,0.9631846488302392,0.7304548441650828,0.8110548032550082 +onnx-tta,optimized,species,5,common,272,42778,32341,52788,0.7404902629385466,0.9650388599694326,0.9639006969879437,0.7443741514376615,0.8223569195026884 +v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.7961537592407802 +v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758544,0.7164050701636104,0.8009004286169518 +torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780558,0.7171112436175308,0.8061491380093965 +torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732053,0.7266753942187194,0.8138865890143704 +onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474767,0.7146917879143063,0.8044523205064158 +onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410929,0.7245547988604122,0.8124276972685942 +torch-tta,optimized,species,10,per_model,268,43942,34313,52788,0.7831893612184587,0.9555513324900085,0.9634422815056631,0.7666899243764238,0.8398127135942168 +torch-tta,optimized,species,10,common,237,42021,33322,52788,0.7831893612184587,0.9625685565215116,0.9646515680804645,0.7845362115505334,0.8537896748755334 +onnx-tta,optimized,species,10,per_model,263,43846,32662,52788,0.7404902629385466,0.961629373180915,0.9681806145232889,0.7372508842609241,0.820284716224131 +onnx-tta,optimized,species,10,common,237,42021,31861,52788,0.7404902629385466,0.9683141861823075,0.9697003821520682,0.7555690214239896,0.8356173638868799 +v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897979 +v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.9605971055104869,0.7264566019960785,0.811036699937377 +torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830733,0.7249718216154226,0.8139613934096738 +torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.9682799478546156,0.7355230038915617,0.8220522350709073 +onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720884,0.7241073248627131,0.8134845543532355 +onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573341,0.7328357084727255,0.8202403740616804 +torch-tta,optimized,species,20,per_model,205,42565,33383,52788,0.7831893612184587,0.9591300853526652,0.9604484571118049,0.7699762479855812,0.842013462392941 +torch-tta,optimized,species,20,common,180,40455,32213,52788,0.7831893612184587,0.9705268255352514,0.9657886526261308,0.7926309175203593,0.8597488311609114 +onnx-tta,optimized,species,20,per_model,198,42291,31709,52788,0.7404902629385466,0.9719038952762132,0.9695617529783702,0.7466077391820205,0.8288133411410782 +onnx-tta,optimized,species,20,common,180,40455,30826,52788,0.7404902629385466,0.976210705701146,0.9704033057734652,0.7637449348360044,0.8420413480097139 +v2,optimized,genus,0,per_model,297,51713,34407,52788,0.6981321512464954,0.9730202662706766,0.9354090897454787,0.6696547903717441,0.7488929063874894 +v2,optimized,genus,0,common,290,47277,34382,52788,0.6981321512464954,0.9760968718601971,0.9441948263945075,0.6789075236695378,0.758894188886813 +torch,optimized,genus,0,per_model,305,52764,36639,52788,0.7575395923315905,0.9675728610989023,0.9311163097974926,0.7162235431527392,0.7854650195910905 +torch,optimized,genus,0,common,290,47277,36222,52788,0.7575395923315905,0.9717947278556177,0.9457657053357997,0.7357875537389513,0.8055286746347516 +onnx,optimized,genus,0,per_model,305,52764,36471,52788,0.7536561339698417,0.9679659039694104,0.9324066587585462,0.7121688160928734,0.7826452771316182 +onnx,optimized,genus,0,common,290,47277,36061,52788,0.7536561339698417,0.9724093229520842,0.9471708404892052,0.7319329372281088,0.8029757834023304 +torch-tta,optimized,genus,0,per_model,305,48338,37668,52788,0.7772978707281958,0.9755532044276723,0.9505668112244134,0.7423366594133708,0.8117050275966146 +torch-tta,optimized,genus,0,common,290,47277,37209,52788,0.7772978707281958,0.9767057765407489,0.9614821443720363,0.7575794509648353,0.8276206040656773 +onnx-tta,optimized,genus,0,per_model,305,48338,37653,52788,0.7768621656437069,0.9757794309698761,0.950805459732764,0.7423421426731508,0.8117369598871598 +onnx-tta,optimized,genus,0,common,290,47277,37196,52788,0.7768621656437069,0.9769436862054228,0.9615032517112784,0.7575932745608045,0.8276086187401221 +v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753265 +v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.96822735165948,0.6927141276824689,0.787485243584438 +torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648698,0.7349949980804276,0.8198300630906831 +torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921 +onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972658,0.7310313579815346,0.8173152189160264 +onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827876 +torch-tta,optimized,genus,5,per_model,228,48014,37467,52788,0.7772978707281958,0.9739289484518205,0.9704707099468884,0.7536090100054875,0.8347586230965691 +torch-tta,optimized,genus,5,common,215,46868,36949,52788,0.7772978707281958,0.9771086466542604,0.9775547270341164,0.767268013502815,0.8477428518527237 +onnx-tta,optimized,genus,5,per_model,228,48014,37452,52788,0.7768621656437069,0.9742276071763961,0.970789954662006,0.7536163450679126,0.8348013395378685 +onnx-tta,optimized,genus,5,common,215,46868,36936,52788,0.7768621656437069,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996489 +v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993277,0.7030299586868274,0.7949775034079529 +v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409167,0.7109088798148795,0.8054635075619047 +torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759429 +torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.83644361028291 +onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142044 +onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.9742219352236319,0.7503899701812965,0.8344922648164951 +torch-tta,optimized,genus,10,per_model,205,47702,37268,52788,0.7772978707281958,0.9770381133367219,0.9784954355713805,0.7643769766620188,0.8460362463804566 +torch-tta,optimized,genus,10,common,192,46467,36672,52788,0.7772978707281958,0.9775836137284416,0.9789300486595732,0.7732961033321674,0.8523256131620105 +onnx-tta,optimized,genus,10,per_model,205,47702,37255,52788,0.7768621656437069,0.9773702801133233,0.9785252947342102,0.7646418740921664,0.8462515189804946 +onnx-tta,optimized,genus,10,common,192,46467,36660,52788,0.7768621656437069,0.9776077796766862,0.978961929536553,0.7735522735935464,0.8525123269701549 +v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981802,0.7242019498914946,0.8169005762983503 +v2,optimized,genus,20,common,151,45179,33263,52788,0.6981321512464954,0.9840178517103966,0.9779005369081346,0.7276296542386876,0.8215085827272921 +torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967002,0.7571265698443955,0.841932335046979 +torch,optimized,genus,20,common,151,45179,34973,52788,0.7575395923315905,0.9859159179291114,0.9756538685518954,0.7718614744316848,0.8533020792538338 +onnx,optimized,genus,20,per_model,165,46690,35481,52788,0.7536561339698417,0.9817692866417445,0.9765223194080256,0.7541904615905834,0.8401795246684534 +onnx,optimized,genus,20,common,151,45179,34825,52788,0.7536561339698417,0.9866161345901774,0.9761653514032596,0.768748272502419,0.8513772766242688 +torch-tta,optimized,genus,20,per_model,167,46689,36692,52788,0.7772978707281958,0.9857897321742519,0.9793244688724696,0.7752481222536762,0.8561620153740219 +torch-tta,optimized,genus,20,common,151,45179,35938,52788,0.7772978707281958,0.9886115750548432,0.9809062330056775,0.7925083520312406,0.8691592136815403 +onnx-tta,optimized,genus,20,per_model,167,46689,36678,52788,0.7768621656437069,0.9858135534806919,0.9793611223358237,0.7753668121612188,0.8562508653962664 +onnx-tta,optimized,genus,20,common,151,45179,35925,52788,0.7768621656437069,0.9886423026181744,0.9809467702797179,0.792676399490679,0.8692708237591562 +v2,optimized,family,0,per_model,22,52786,40877,52788,0.7744373721300295,0.9963653352691595,0.9560780057797795,0.6760540010869929,0.7735267153680251 +v2,optimized,family,0,common,22,52786,40877,52788,0.7744373721300295,0.9963653352691595,0.9560780057797795,0.6760540010869929,0.7735267153680251 +torch,optimized,family,0,per_model,22,52786,38535,52788,0.7305827081912556,0.9932547854813464,0.9762352614742195,0.6832121844236498,0.7919257036079034 +torch,optimized,family,0,common,22,52786,38535,52788,0.7305827081912556,0.9932547854813464,0.9762352614742195,0.6832121844236498,0.7919257036079034 +onnx,optimized,family,0,per_model,22,52786,38641,52788,0.7325907403197697,0.9932599551447033,0.9762464326229743,0.6846193516228278,0.793047168620814 +onnx,optimized,family,0,common,22,52786,38641,52788,0.7325907403197697,0.9932599551447033,0.9762464326229743,0.6846193516228278,0.793047168620814 +torch-tta,optimized,family,0,per_model,22,52786,41543,52788,0.7874327498673941,0.9955823574240963,0.9746511312798972,0.7319846152154214,0.8280771248604737 +torch-tta,optimized,family,0,common,22,52786,41543,52788,0.7874327498673941,0.9955823574240963,0.9746511312798972,0.7319846152154214,0.8280771248604737 +onnx-tta,optimized,family,0,per_model,22,52786,41399,52788,0.7846859134651815,0.9955854528269081,0.9748005661767682,0.7304295789928673,0.8270581606098827 +onnx-tta,optimized,family,0,common,22,52786,41399,52788,0.7846859134651815,0.9955854528269081,0.9748005661767682,0.7304295789928673,0.8270581606098827 +v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 +v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 +torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,5,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,5,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,5,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 +onnx-tta,optimized,family,5,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 +v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 +v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 +torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,10,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,10,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,10,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 +onnx-tta,optimized,family,10,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 +v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635084 +torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635084 +onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157777 +onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157777 +torch-tta,optimized,family,20,per_model,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.997949864338721,0.7536293282011772,0.8548063047552162 +torch-tta,optimized,family,20,common,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.997949864338721,0.7536293282011772,0.8548063047552162 +onnx-tta,optimized,family,20,per_model,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207987,0.751348608408098,0.8533118238543494 +onnx-tta,optimized,family,20,common,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207987,0.751348608408098,0.8533118238543494 diff --git a/docs/assets/mambo-tail-metrics.json b/docs/assets/mambo-tail-metrics.json new file mode 100644 index 0000000..172145c --- /dev/null +++ b/docs/assets/mambo-tail-metrics.json @@ -0,0 +1,49063 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783037", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 490, + "truth_images_in_retained_classes": 45522, + "accepted_predictions_in_retained_classes": 40726, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.730398334373567, + "precision": 0.6692785107551973, + "recall": 0.730398334373567, + "f1": 0.6442770650899289 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 479, + "truth_images_in_retained_classes": 45499, + "accepted_predictions_in_retained_classes": 40683, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7445619704447763, + "precision": 0.6838130903341267, + "recall": 0.7445619704447763, + "f1": 0.6579127480970971 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783037", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532253", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 495, + "truth_images_in_retained_classes": 45527, + "accepted_predictions_in_retained_classes": 41183, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7524863219892478, + "precision": 0.6854888251847001, + "recall": 0.7524863219892478, + "f1": 0.6751936464806082 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 479, + "truth_images_in_retained_classes": 45499, + "accepted_predictions_in_retained_classes": 41145, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.768226992452354, + "precision": 0.7029581805144605, + "recall": 0.768226992452354, + "f1": 0.6921799339065436 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783037", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532253", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 495, + "truth_images_in_retained_classes": 45527, + "accepted_predictions_in_retained_classes": 41196, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7522981230833534, + "precision": 0.6856640486185108, + "recall": 0.7522981230833534, + "f1": 0.6753901809023951 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 479, + "truth_images_in_retained_classes": 45499, + "accepted_predictions_in_retained_classes": 41158, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7680325071529435, + "precision": 0.7031392569230956, + "recall": 0.7680325071529435, + "f1": 0.6923830331524404 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983260", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 491, + "truth_images_in_retained_classes": 45520, + "accepted_predictions_in_retained_classes": 42031, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7873444012917992, + "precision": 0.7275774071350241, + "recall": 0.7873444012917992, + "f1": 0.7194797347248981 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 479, + "truth_images_in_retained_classes": 45499, + "accepted_predictions_in_retained_classes": 42007, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7966306910945165, + "precision": 0.7388458738412599, + "recall": 0.7966306910945165, + "f1": 0.7300482696837085 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983260", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 490, + "truth_images_in_retained_classes": 45519, + "accepted_predictions_in_retained_classes": 42040, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7892730174965529, + "precision": 0.7287480551447586, + "recall": 0.7892730174965529, + "f1": 0.7209150108506917 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1738050", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1773309", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862580", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533433", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "7972792", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 479, + "truth_images_in_retained_classes": 45499, + "accepted_predictions_in_retained_classes": 42017, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7969598717605656, + "precision": 0.7385244544626272, + "recall": 0.7969598717605656, + "f1": 0.7300144608463682 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 320, + "truth_images_in_retained_classes": 44895, + "accepted_predictions_in_retained_classes": 39395, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7835860088760841, + "precision": 0.8271892598535118, + "recall": 0.7835860088760841, + "f1": 0.7771880031099807 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 39306, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7884742372532278, + "precision": 0.8305015444074887, + "recall": 0.7884742372532278, + "f1": 0.7815287772418466 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40080, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8016540743299243, + "precision": 0.826169612130568, + "recall": 0.8016540743299243, + "f1": 0.7937632511493783 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40012, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8112118860261139, + "precision": 0.8306457257526491, + "recall": 0.8112118860261139, + "f1": 0.801323823079522 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40095, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8021426772632025, + "precision": 0.8262878591168297, + "recall": 0.8021426772632025, + "f1": 0.7940157823083628 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40027, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8117129772132781, + "precision": 0.8307669950260991, + "recall": 0.8117129772132781, + "f1": 0.8015828087090237 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41093, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8286743235345041, + "precision": 0.8455415603248386, + "recall": 0.8286743235345041, + "f1": 0.82010073306771 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41004, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8390964584441899, + "precision": 0.8519293635860035, + "recall": 0.8390964584441899, + "f1": 0.8287585120001667 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41099, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8289044913540222, + "precision": 0.8454663089232555, + "recall": 0.8289044913540222, + "f1": 0.8200672672516621 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41010, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8393339798681654, + "precision": 0.8518517079862864, + "recall": 0.8393339798681654, + "f1": 0.8287239769887177 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 277, + "truth_images_in_retained_classes": 43835, + "accepted_predictions_in_retained_classes": 38825, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7994793772053351, + "precision": 0.8464715182316644, + "recall": 0.7994793772053351, + "f1": 0.8020074761104699 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 38723, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8043288259343255, + "precision": 0.849759710747019, + "recall": 0.8043288259343255, + "f1": 0.8062320354321301 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39612, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8171258284359165, + "precision": 0.8511929361965738, + "recall": 0.8171258284359165, + "f1": 0.8180429337935673 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39130, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8236153818021188, + "precision": 0.8538220455561393, + "recall": 0.8236153818021188, + "f1": 0.8231516237390821 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39626, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.817676149634451, + "precision": 0.8513280853428178, + "recall": 0.817676149634451, + "f1": 0.8183308171409442 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39144, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8241941328780684, + "precision": 0.853964176577097, + "recall": 0.8241941328780684, + "f1": 0.8234543792889069 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40603, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8470429977027221, + "precision": 0.8707776696179902, + "recall": 0.8470429977027221, + "f1": 0.8452968243564886 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40056, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8513634723466735, + "precision": 0.872112449562329, + "recall": 0.8513634723466735, + "f1": 0.8483517909129424 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40609, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8473047730749205, + "precision": 0.8706920843971752, + "recall": 0.8473047730749205, + "f1": 0.8452587628826029 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40062, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8516378052090512, + "precision": 0.8720227587774156, + "recall": 0.8516378052090512, + "f1": 0.8483119036118962 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1822610", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 216, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 37641, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8082495823011705, + "precision": 0.8625621889375423, + "recall": 0.8082495823011705, + "f1": 0.8168473325998341 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37437, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8136982479192534, + "precision": 0.8648542018939746, + "recall": 0.8136982479192534, + "f1": 0.8209483082438455 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38417, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8271275510654174, + "precision": 0.878086795953307, + "recall": 0.8271275510654174, + "f1": 0.8390189376702695 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37796, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8339089780399618, + "precision": 0.8827194680660193, + "recall": 0.8339089780399618, + "f1": 0.8454184870285211 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8276292942912182, + "precision": 0.8782629747089122, + "recall": 0.8276292942912182, + "f1": 0.8392847349307754 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37811, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8344444924444223, + "precision": 0.8825394050561279, + "recall": 0.8344444924444223, + "f1": 0.8455033297180401 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1741341", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39483, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8552687902032574, + "precision": 0.8920154706737624, + "recall": 0.8552687902032574, + "f1": 0.8618363751815306 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 38766, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.859934317761158, + "precision": 0.8943362486856059, + "recall": 0.859934317761158, + "f1": 0.8655942697573593 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1741341", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39484, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8552572257583305, + "precision": 0.8920297055771915, + "recall": 0.8552572257583305, + "f1": 0.8618121872907233 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 38767, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8599219193418374, + "precision": 0.894351510144571, + "recall": 0.8599219193418374, + "f1": 0.8655683375475033 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 319, + "truth_images_in_retained_classes": 52782, + "accepted_predictions_in_retained_classes": 45642, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7968044107211967, + "precision": 0.6975226462533961, + "recall": 0.7968044107211967, + "f1": 0.6959574069830721 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 317, + "truth_images_in_retained_classes": 52780, + "accepted_predictions_in_retained_classes": 45639, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.80183156788663, + "precision": 0.7019234200467929, + "recall": 0.80183156788663, + "f1": 0.7003483054498423 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 319, + "truth_images_in_retained_classes": 52784, + "accepted_predictions_in_retained_classes": 45349, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8128760350980341, + "precision": 0.7169693814982813, + "recall": 0.8128760350980341, + "f1": 0.7220190914539127 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 317, + "truth_images_in_retained_classes": 52780, + "accepted_predictions_in_retained_classes": 45344, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8180045905245201, + "precision": 0.721492847627608, + "recall": 0.8180045905245201, + "f1": 0.7265744169520447 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 320, + "truth_images_in_retained_classes": 52785, + "accepted_predictions_in_retained_classes": 45352, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8103934792030048, + "precision": 0.71472382411519, + "recall": 0.8103934792030048, + "f1": 0.7198779438069757 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 317, + "truth_images_in_retained_classes": 52780, + "accepted_predictions_in_retained_classes": 45346, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.818062818122907, + "precision": 0.7214877719774788, + "recall": 0.818062818122907, + "f1": 0.726690668827231 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 320, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 45977, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8364835445780064, + "precision": 0.7515734271797273, + "recall": 0.8364835445780064, + "f1": 0.7584406445360485 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 317, + "truth_images_in_retained_classes": 52780, + "accepted_predictions_in_retained_classes": 45974, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8443997926339497, + "precision": 0.7586861094558761, + "recall": 0.8443997926339497, + "f1": 0.7656183162509008 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 320, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 45980, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.836506364737312, + "precision": 0.7510970456076229, + "recall": 0.836506364737312, + "f1": 0.7581454918652479 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9210500" + ], + "class_count": 317, + "truth_images_in_retained_classes": 52780, + "accepted_predictions_in_retained_classes": 45977, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.844422828756908, + "precision": 0.7582052195408181, + "recall": 0.844422828756908, + "f1": 0.7653203703371588 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 44975, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8198886444355898, + "precision": 0.8176206331689666, + "recall": 0.8198886444355898, + "f1": 0.7926029899466804 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44953, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326222, + "recall": 0.8206876060779148, + "f1": 0.7941995832133609 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500324 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500324 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 243, + "truth_images_in_retained_classes": 52575, + "accepted_predictions_in_retained_classes": 45481, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642862537522121, + "precision": 0.8433344795518117, + "recall": 0.8642862537522121, + "f1": 0.8345738246636745 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45474, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642419820735022, + "precision": 0.8426871013681415, + "recall": 0.8642419820735022, + "f1": 0.8341657275204114 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 243, + "truth_images_in_retained_classes": 52575, + "accepted_predictions_in_retained_classes": 45485, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8643163049908037, + "precision": 0.8430323470999015, + "recall": 0.8643163049908037, + "f1": 0.8343804242225075 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45478, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8642721574907657, + "precision": 0.8423837204350251, + "recall": 0.8642721574907657, + "f1": 0.8339715279038676 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 52377, + "accepted_predictions_in_retained_classes": 44619, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8242091812881619, + "precision": 0.8349759270593797, + "recall": 0.8242091812881619, + "f1": 0.8073029077289685 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44570, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8246759171734157, + "precision": 0.8375222344229503, + "recall": 0.8246759171734157, + "f1": 0.8087106982251911 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44500, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8420595718087585, + "precision": 0.8360051629538205, + "recall": 0.8420595718087585, + "f1": 0.8201488914933474 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44425, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8440854196075196, + "precision": 0.8391956132162521, + "recall": 0.8440854196075196, + "f1": 0.8223122767531698 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8421419742582609, + "precision": 0.8355105285467141, + "recall": 0.8421419742582609, + "f1": 0.8198882695930895 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 44429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8441700900143477, + "precision": 0.8386873650181246, + "recall": 0.8441700900143477, + "f1": 0.822044481773088 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52384, + "accepted_predictions_in_retained_classes": 45193, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724264504229726, + "precision": 0.8640463448274117, + "recall": 0.8724264504229726, + "f1": 0.8517515085475369 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 45144, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724594243641395, + "precision": 0.8649085173552921, + "recall": 0.8724594243641395, + "f1": 0.8519555844726409 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52384, + "accepted_predictions_in_retained_classes": 45198, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724593443462958, + "precision": 0.8636328288870724, + "recall": 0.8724593443462958, + "f1": 0.8514582101275703 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 218, + "truth_images_in_retained_classes": 52338, + "accepted_predictions_in_retained_classes": 45149, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8724929218456889, + "precision": 0.864487413966506, + "recall": 0.8724929218456889, + "f1": 0.8516569044302899 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 178, + "truth_images_in_retained_classes": 51193, + "accepted_predictions_in_retained_classes": 43632, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8447796356264702, + "precision": 0.8683866368462851, + "recall": 0.8447796356264702, + "f1": 0.8409068314387458 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43532, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8468431185140185, + "precision": 0.8700188865290815, + "recall": 0.8468431185140185, + "f1": 0.8425197107045042 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43510, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.851621812405513, + "precision": 0.8767852358251573, + "recall": 0.851621812405513, + "f1": 0.8500899477281387 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572846967941111, + "precision": 0.879992285140897, + "recall": 0.8572846967941111, + "f1": 0.8551335240737619 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43511, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8514718324234797, + "precision": 0.8766263792837025, + "recall": 0.8514718324234797, + "f1": 0.8499294903140181 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8569783049191699, + "precision": 0.8797840089758777, + "recall": 0.8569783049191699, + "f1": 0.8548933267800544 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44297, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8769067543097299, + "precision": 0.8943059399376526, + "recall": 0.8769067543097299, + "f1": 0.87295880197148 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43849, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8813164944712208, + "precision": 0.8965073033675035, + "recall": 0.8813164944712208, + "f1": 0.8765450108644934 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44297, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8769470993427563, + "precision": 0.8939963574869481, + "recall": 0.8769470993427563, + "f1": 0.8728097609356607 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43850, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8813584625802887, + "precision": 0.8961383784724689, + "recall": 0.8813584625802887, + "f1": 0.876352418020288 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52380, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435038466784595, + "precision": 0.7265179495682207, + "recall": 0.8435038466784595, + "f1": 0.75042499174046 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52380, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435038466784595, + "precision": 0.7265179495682207, + "recall": 0.8435038466784595, + "f1": 0.75042499174046 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52032, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104767092433202, + "precision": 0.7182658553111946, + "recall": 0.8104767092433202, + "f1": 0.7317239969421455 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52032, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104767092433202, + "precision": 0.7182658553111946, + "recall": 0.8104767092433202, + "f1": 0.7317239969421455 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52032, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106325437578626, + "precision": 0.7191962309707975, + "recall": 0.8106325437578626, + "f1": 0.7327511040954056 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52032, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106325437578626, + "precision": 0.7191962309707975, + "recall": 0.8106325437578626, + "f1": 0.7327511040954056 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52253, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8579010503993526, + "precision": 0.7452645609572454, + "recall": 0.8579010503993526, + "f1": 0.7748977570788995 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52253, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8579010503993526, + "precision": 0.7452645609572454, + "recall": 0.8579010503993526, + "f1": 0.7748977570788995 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52253, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8580571051602935, + "precision": 0.7452276841673134, + "recall": 0.8580571051602935, + "f1": 0.7749856158408315 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 23, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52253, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8580571051602935, + "precision": 0.7452276841673134, + "recall": 0.8580571051602935, + "f1": 0.7749856158408315 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152918 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152918 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.902659031092756, + "precision": 0.8735800304426246, + "recall": 0.902659031092756, + "f1": 0.8814000078705927 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.902659031092756, + "precision": 0.8735800304426246, + "recall": 0.902659031092756, + "f1": 0.8814000078705927 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982746", + "1982885", + "1983170", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7752082", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 433, + "truth_images_in_retained_classes": 44484, + "accepted_predictions_in_retained_classes": 31566, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9240191857358756, + "precision": 0.885700493336194, + "recall": 0.6531790785268475, + "f1": 0.7117924113167411 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 413, + "truth_images_in_retained_classes": 44369, + "accepted_predictions_in_retained_classes": 31533, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9385872203508142, + "precision": 0.9084139958383503, + "recall": 0.6750014601723655, + "f1": 0.7345720682137987 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1972434", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 449, + "truth_images_in_retained_classes": 45205, + "accepted_predictions_in_retained_classes": 31873, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9398423490596125, + "precision": 0.9094313118847961, + "recall": 0.6713467663200402, + "f1": 0.7401393054211883 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 413, + "truth_images_in_retained_classes": 44369, + "accepted_predictions_in_retained_classes": 31677, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9483742161527923, + "precision": 0.9278828363613216, + "recall": 0.6933654020535126, + "f1": 0.7625446812254123 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1972434", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 449, + "truth_images_in_retained_classes": 45205, + "accepted_predictions_in_retained_classes": 31724, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.940681805632725, + "precision": 0.9109585170264042, + "recall": 0.6688306126725968, + "f1": 0.7382564696944265 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 413, + "truth_images_in_retained_classes": 44369, + "accepted_predictions_in_retained_classes": 31534, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.948876538655318, + "precision": 0.92844781010515, + "recall": 0.6912679285399674, + "f1": 0.7610933438936152 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772940", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1972434", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339" + ], + "class_count": 465, + "truth_images_in_retained_classes": 45248, + "accepted_predictions_in_retained_classes": 35052, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.932529958593781, + "precision": 0.898413496661032, + "recall": 0.717614394885624, + "f1": 0.7671987063507582 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 413, + "truth_images_in_retained_classes": 44369, + "accepted_predictions_in_retained_classes": 34742, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9456222727159702, + "precision": 0.9252382253232228, + "recall": 0.7526084931806575, + "f1": 0.8021001528962034 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1790072", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1862837", + "1864377", + "1870250", + "1871252", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1875869", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1889942", + "1890187", + "1890534", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1972434", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 450, + "truth_images_in_retained_classes": 45148, + "accepted_predictions_in_retained_classes": 33352, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9483124062069127, + "precision": 0.9228068935716895, + "recall": 0.7047776611494099, + "f1": 0.7675439553505272 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 0, + "domain": "common", + "classes": [ + "11478679", + "1732063", + "1732416", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737775", + "1739833", + "1739922", + "1740005", + "1740185", + "1741341", + "1741752", + "1742142", + "1743532", + "1743775", + "1744782", + "1745079", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1789267", + "1789694", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796678", + "1797178", + "1797258", + "1797479", + "1798346", + "1798449", + "1798807", + "1798974", + "1799132", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1831136", + "1831643", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1862837", + "1864377", + "1870250", + "1871407", + "1872368", + "1872901", + "1875008", + "1875327", + "1876329", + "1876542", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891059", + "1891326", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952062", + "1952532", + "1952806", + "1952812", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965996", + "1966017", + "1966351", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972234", + "1972250", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982500", + "1982525", + "1982541", + "1982592", + "1982636", + "1982885", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983705", + "1983755", + "1983896", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4522322", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4532022", + "4532095", + "4532297", + "4532357", + "4532544", + "4532886", + "4532888", + "4532890", + "4533136", + "4533273", + "4533360", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534398", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101745", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5112291", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126680", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146961", + "5147062", + "5147208", + "5147245", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "7438067", + "7443518", + "7446048", + "7681733", + "7780930", + "7895336", + "7940536", + "7960566", + "8015895", + "8105817", + "8223165", + "8262357", + "8361848", + "8397564", + "8407461", + "8421569", + "8537359", + "9101339" + ], + "class_count": 413, + "truth_images_in_retained_classes": 44369, + "accepted_predictions_in_retained_classes": 33106, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9531195374005882, + "precision": 0.9347573093799684, + "recall": 0.7229650126277268, + "f1": 0.7857605754515414 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 281, + "truth_images_in_retained_classes": 42875, + "accepted_predictions_in_retained_classes": 31091, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.949227254623375, + "precision": 0.943736867068747, + "recall": 0.6916423088644161, + "f1": 0.7737956953842573 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 31024, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9521428623131191, + "precision": 0.950834091298276, + "recall": 0.6967497218946193, + "f1": 0.7799317319854289 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 44180, + "accepted_predictions_in_retained_classes": 31486, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9604545336634476, + "precision": 0.9622152512833568, + "recall": 0.7039086159930352, + "f1": 0.7910306156942064 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30977, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963494109771882, + "precision": 0.9626322859838098, + "recall": 0.7171390330256306, + "f1": 0.8016422382706131 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44173, + "accepted_predictions_in_retained_classes": 31341, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9610226296998533, + "precision": 0.9619757519565229, + "recall": 0.7010200481362973, + "f1": 0.788830662496077 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30845, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9642506092928128, + "precision": 0.9626937682791291, + "recall": 0.7149144701582824, + "f1": 0.8001046982018762 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images_in_retained_classes": 44279, + "accepted_predictions_in_retained_classes": 34630, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9565023879246428, + "precision": 0.9579592889257432, + "recall": 0.7631267851065484, + "f1": 0.8330906323599062 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 33853, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9585814667783285, + "precision": 0.9585731812083509, + "recall": 0.7743974002343408, + "f1": 0.8413487263251005 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 293, + "truth_images_in_retained_classes": 44256, + "accepted_predictions_in_retained_classes": 32979, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9624875420542846, + "precision": 0.9631846488302392, + "recall": 0.7304548441650828, + "f1": 0.8110548032550082 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 32341, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9650388599694326, + "precision": 0.9639006969879437, + "recall": 0.7443741514376615, + "f1": 0.8223569195026884 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 243, + "truth_images_in_retained_classes": 42227, + "accepted_predictions_in_retained_classes": 30743, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.953448505161714, + "precision": 0.9544450850263946, + "recall": 0.7134225852923751, + "f1": 0.7961537592407802 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30611, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9552371110145412, + "precision": 0.9586140054758544, + "recall": 0.7164050701636104, + "f1": 0.8009004286169518 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31151, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963686280781054, + "precision": 0.9676952538780558, + "recall": 0.7171112436175308, + "f1": 0.8061491380093965 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30528, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9673296490095744, + "precision": 0.9672615516732053, + "recall": 0.7266753942187194, + "f1": 0.8138865890143704 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31014, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9644807475606031, + "precision": 0.9677553930474767, + "recall": 0.7146917879143063, + "f1": 0.8044523205064158 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30399, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9681978678690395, + "precision": 0.9673496769410929, + "recall": 0.7245547988604122, + "f1": 0.8124276972685942 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 268, + "truth_images_in_retained_classes": 43942, + "accepted_predictions_in_retained_classes": 34313, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9555513324900085, + "precision": 0.9634422815056631, + "recall": 0.7666899243764238, + "f1": 0.8398127135942168 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 33322, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9625685565215116, + "precision": 0.9646515680804645, + "recall": 0.7845362115505334, + "f1": 0.8537896748755334 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 263, + "truth_images_in_retained_classes": 43846, + "accepted_predictions_in_retained_classes": 32662, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.961629373180915, + "precision": 0.9681806145232889, + "recall": 0.7372508842609241, + "f1": 0.820284716224131 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 31861, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9683141861823075, + "precision": 0.9697003821520682, + "recall": 0.7555690214239896, + "f1": 0.8356173638868799 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746775", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986166", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 190, + "truth_images_in_retained_classes": 40924, + "accepted_predictions_in_retained_classes": 29917, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9610844376490718, + "precision": 0.9546242144015308, + "recall": 0.720024084306013, + "f1": 0.8034606105897979 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29626, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9646484348350589, + "precision": 0.9605971055104869, + "recall": 0.7264566019960785, + "f1": 0.811036699937377 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 194, + "truth_images_in_retained_classes": 41945, + "accepted_predictions_in_retained_classes": 30249, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9726536166037543, + "precision": 0.9673028973830733, + "recall": 0.7249718216154226, + "f1": 0.8139613934096738 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29545, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9744003816755382, + "precision": 0.9682799478546156, + "recall": 0.7355230038915617, + "f1": 0.8220522350709073 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 193, + "truth_images_in_retained_classes": 41892, + "accepted_predictions_in_retained_classes": 30094, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9730113961424189, + "precision": 0.9672414097720884, + "recall": 0.7241073248627131, + "f1": 0.8134845543532355 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29417, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9749535854270197, + "precision": 0.9683959794573341, + "recall": 0.7328357084727255, + "f1": 0.8202403740616804 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 205, + "truth_images_in_retained_classes": 42565, + "accepted_predictions_in_retained_classes": 33383, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9591300853526652, + "precision": 0.9604484571118049, + "recall": 0.7699762479855812, + "f1": 0.842013462392941 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 32213, + "report_images": 52788, + "overall_coverage": 0.7831893612184587, + "metrics": { + "accuracy": 0.9705268255352514, + "precision": 0.9657886526261308, + "recall": 0.7926309175203593, + "f1": 0.8597488311609114 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 198, + "truth_images_in_retained_classes": 42291, + "accepted_predictions_in_retained_classes": 31709, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.9719038952762132, + "precision": 0.9695617529783702, + "recall": 0.7466077391820205, + "f1": 0.8288133411410782 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 30826, + "report_images": 52788, + "overall_coverage": 0.7404902629385466, + "metrics": { + "accuracy": 0.976210705701146, + "precision": 0.9704033057734652, + "recall": 0.7637449348360044, + "f1": 0.8420413480097139 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 297, + "truth_images_in_retained_classes": 51713, + "accepted_predictions_in_retained_classes": 34407, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9730202662706766, + "precision": 0.9354090897454787, + "recall": 0.6696547903717441, + "f1": 0.7488929063874894 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 290, + "truth_images_in_retained_classes": 47277, + "accepted_predictions_in_retained_classes": 34382, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9760968718601971, + "precision": 0.9441948263945075, + "recall": 0.6789075236695378, + "f1": 0.758894188886813 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 305, + "truth_images_in_retained_classes": 52764, + "accepted_predictions_in_retained_classes": 36639, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9675728610989023, + "precision": 0.9311163097974926, + "recall": 0.7162235431527392, + "f1": 0.7854650195910905 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 290, + "truth_images_in_retained_classes": 47277, + "accepted_predictions_in_retained_classes": 36222, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9717947278556177, + "precision": 0.9457657053357997, + "recall": 0.7357875537389513, + "f1": 0.8055286746347516 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 305, + "truth_images_in_retained_classes": 52764, + "accepted_predictions_in_retained_classes": 36471, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9679659039694104, + "precision": 0.9324066587585462, + "recall": 0.7121688160928734, + "f1": 0.7826452771316182 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 290, + "truth_images_in_retained_classes": 47277, + "accepted_predictions_in_retained_classes": 36061, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9724093229520842, + "precision": 0.9471708404892052, + "recall": 0.7319329372281088, + "f1": 0.8029757834023304 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 305, + "truth_images_in_retained_classes": 48338, + "accepted_predictions_in_retained_classes": 37668, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9755532044276723, + "precision": 0.9505668112244134, + "recall": 0.7423366594133708, + "f1": 0.8117050275966146 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 290, + "truth_images_in_retained_classes": 47277, + "accepted_predictions_in_retained_classes": 37209, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9767057765407489, + "precision": 0.9614821443720363, + "recall": 0.7575794509648353, + "f1": 0.8276206040656773 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1846907", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9078901", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 305, + "truth_images_in_retained_classes": 48338, + "accepted_predictions_in_retained_classes": 37653, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9757794309698761, + "precision": 0.950805459732764, + "recall": 0.7423421426731508, + "f1": 0.8117369598871598 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 0, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1745076", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770274", + "1770396", + "1771501", + "1772155", + "1775081", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1841259", + "1845266", + "1856631", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1871384", + "1872346", + "1872845", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1876536", + "1878838", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966346", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4534532", + "4689528", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9065472", + "9095083", + "9146182", + "9181278", + "9210500" + ], + "class_count": 290, + "truth_images_in_retained_classes": 47277, + "accepted_predictions_in_retained_classes": 37196, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9769436862054228, + "precision": 0.9615032517112784, + "recall": 0.7575932745608045, + "f1": 0.8276086187401221 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 51350, + "accepted_predictions_in_retained_classes": 34216, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9716616552337888, + "precision": 0.9644034675161717, + "recall": 0.6868834008659555, + "f1": 0.7807696866753265 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 34160, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.96822735165948, + "recall": 0.6927141276824689, + "f1": 0.787485243584438 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36422, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.970284104556389, + "precision": 0.9654305304648698, + "recall": 0.7349949980804276, + "f1": 0.8198300630906831 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35966, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149172, + "recall": 0.7475533077376153, + "f1": 0.8310650157210921 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36257, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9708040563009604, + "precision": 0.9665082137972658, + "recall": 0.7310313579815346, + "f1": 0.8173152189160264 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827876 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 228, + "truth_images_in_retained_classes": 48014, + "accepted_predictions_in_retained_classes": 37467, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9739289484518205, + "precision": 0.9704707099468884, + "recall": 0.7536090100054875, + "f1": 0.8347586230965691 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 36949, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9771086466542604, + "precision": 0.9775547270341164, + "recall": 0.767268013502815, + "f1": 0.8477428518527237 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 228, + "truth_images_in_retained_classes": 48014, + "accepted_predictions_in_retained_classes": 37452, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9742276071763961, + "precision": 0.970789954662006, + "recall": 0.7536163450679126, + "f1": 0.8348013395378685 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 36936, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9774284415058453, + "precision": 0.9775831973986752, + "recall": 0.7672866592834245, + "f1": 0.8477266855996489 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 197, + "truth_images_in_retained_classes": 50958, + "accepted_predictions_in_retained_classes": 34025, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9707426742420079, + "precision": 0.9676850759993277, + "recall": 0.7030299586868274, + "f1": 0.7949775034079529 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 33937, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9752941088049124, + "precision": 0.9772224666409167, + "recall": 0.7109088798148795, + "f1": 0.8054635075619047 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 203, + "truth_images_in_retained_classes": 47662, + "accepted_predictions_in_retained_classes": 36218, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9725044668174535, + "precision": 0.973428506176096, + "recall": 0.7475181869995279, + "f1": 0.8320199105759429 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35691, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9735479156470631, + "precision": 0.9733069820326449, + "recall": 0.7535836525103417, + "f1": 0.83644361028291 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 202, + "truth_images_in_retained_classes": 47651, + "accepted_predictions_in_retained_classes": 36048, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.973280111509321, + "precision": 0.9750664954245438, + "recall": 0.7440944617898129, + "f1": 0.8301947627142044 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35536, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9741721892441434, + "precision": 0.9742219352236319, + "recall": 0.7503899701812965, + "f1": 0.8344922648164951 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 205, + "truth_images_in_retained_classes": 47702, + "accepted_predictions_in_retained_classes": 37268, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9770381133367219, + "precision": 0.9784954355713805, + "recall": 0.7643769766620188, + "f1": 0.8460362463804566 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 36672, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9775836137284416, + "precision": 0.9789300486595732, + "recall": 0.7732961033321674, + "f1": 0.8523256131620105 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 205, + "truth_images_in_retained_classes": 47702, + "accepted_predictions_in_retained_classes": 37255, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9773702801133233, + "precision": 0.9785252947342102, + "recall": 0.7646418740921664, + "f1": 0.8462515189804946 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 36660, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9776077796766862, + "precision": 0.978961929536553, + "recall": 0.7735522735935464, + "f1": 0.8525123269701549 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 156, + "truth_images_in_retained_classes": 45483, + "accepted_predictions_in_retained_classes": 33405, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9843358498587619, + "precision": 0.9748388332981802, + "recall": 0.7242019498914946, + "f1": 0.8169005762983503 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 33263, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9840178517103966, + "precision": 0.9779005369081346, + "recall": 0.7276296542386876, + "f1": 0.8215085827272921 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35635, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9810178296102066, + "precision": 0.9757921370967002, + "recall": 0.7571265698443955, + "f1": 0.841932335046979 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 34973, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9859159179291114, + "precision": 0.9756538685518954, + "recall": 0.7718614744316848, + "f1": 0.8533020792538338 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35481, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9817692866417445, + "precision": 0.9765223194080256, + "recall": 0.7541904615905834, + "f1": 0.8401795246684534 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 34825, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9866161345901774, + "precision": 0.9761653514032596, + "recall": 0.768748272502419, + "f1": 0.8513772766242688 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 167, + "truth_images_in_retained_classes": 46689, + "accepted_predictions_in_retained_classes": 36692, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9857897321742519, + "precision": 0.9793244688724696, + "recall": 0.7752481222536762, + "f1": 0.8561620153740219 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 35938, + "report_images": 52788, + "overall_coverage": 0.7772978707281958, + "metrics": { + "accuracy": 0.9886115750548432, + "precision": 0.9809062330056775, + "recall": 0.7925083520312406, + "f1": 0.8691592136815403 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 167, + "truth_images_in_retained_classes": 46689, + "accepted_predictions_in_retained_classes": 36678, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9858135534806919, + "precision": 0.9793611223358237, + "recall": 0.7753668121612188, + "f1": 0.8562508653962664 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 151, + "truth_images_in_retained_classes": 45179, + "accepted_predictions_in_retained_classes": 35925, + "report_images": 52788, + "overall_coverage": 0.7768621656437069, + "metrics": { + "accuracy": 0.9886423026181744, + "precision": 0.9809467702797179, + "recall": 0.792676399490679, + "f1": 0.8692708237591562 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 40877, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9963653352691595, + "precision": 0.9560780057797795, + "recall": 0.6760540010869929, + "f1": 0.7735267153680251 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 40877, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9963653352691595, + "precision": 0.9560780057797795, + "recall": 0.6760540010869929, + "f1": 0.7735267153680251 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 38535, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9932547854813464, + "precision": 0.9762352614742195, + "recall": 0.6832121844236498, + "f1": 0.7919257036079034 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 38535, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9932547854813464, + "precision": 0.9762352614742195, + "recall": 0.6832121844236498, + "f1": 0.7919257036079034 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 38641, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9932599551447033, + "precision": 0.9762464326229743, + "recall": 0.6846193516228278, + "f1": 0.793047168620814 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 38641, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9932599551447033, + "precision": 0.9762464326229743, + "recall": 0.6846193516228278, + "f1": 0.793047168620814 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 41543, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9955823574240963, + "precision": 0.9746511312798972, + "recall": 0.7319846152154214, + "f1": 0.8280771248604737 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 41543, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9955823574240963, + "precision": 0.9746511312798972, + "recall": 0.7319846152154214, + "f1": 0.8280771248604737 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 41399, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9955854528269081, + "precision": 0.9748005661767682, + "recall": 0.7304295789928673, + "f1": 0.8270581606098827 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 0, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 22, + "truth_images_in_retained_classes": 52786, + "accepted_predictions_in_retained_classes": 41399, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9955854528269081, + "precision": 0.9748005661767682, + "recall": 0.7304295789928673, + "f1": 0.8270581606098827 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41536, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805483 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 41392, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635084 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635084 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157777 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157777 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41473, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9970295628184992, + "precision": 0.997949864338721, + "recall": 0.7536293282011772, + "f1": 0.8548063047552162 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41473, + "report_images": 52788, + "overall_coverage": 0.7874327498673941, + "metrics": { + "accuracy": 0.9970295628184992, + "precision": 0.997949864338721, + "recall": 0.7536293282011772, + "f1": 0.8548063047552162 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41329, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9970341027426228, + "precision": 0.9981690355207987, + "recall": 0.751348608408098, + "f1": 0.8533118238543494 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 41329, + "report_images": 52788, + "overall_coverage": 0.7846859134651815, + "metrics": { + "accuracy": 0.9970341027426228, + "precision": 0.9981690355207987, + "recall": 0.751348608408098, + "f1": 0.8533118238543494 + } + } + ] +} diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md index efeb1f4..a06dff9 100644 --- a/docs/mambo-confidence-thresholds.md +++ b/docs/mambo-confidence-thresholds.md @@ -128,6 +128,13 @@ in threshold order without smoothing or a monotonic envelope; class membership changes can make macro precision irregular. The optimizer itself uses the exact calibration F1 curve, not this plotting grid. Undefined package results remain null. +## Tail-truncated supplementary metrics + +The [tail-truncated comparison](mambo-tail-metrics.md) averages classes with more +than 0, 5, 10 or 20 truth instances and accepted predictions, using a common class set +across all five pipelines. It retains coverage/support counts and the full-support +comparison: excluding rare and predicted-only families changes the interpretation. + ## Evidence and reproduction The [metric table](assets/mambo-threshold-metrics.csv) contains all/known-truth diff --git a/docs/mambo-tail-metrics.md b/docs/mambo-tail-metrics.md new file mode 100644 index 0000000..57363a1 --- /dev/null +++ b/docs/mambo-tail-metrics.md @@ -0,0 +1,93 @@ +# Tail-truncated release metrics + +These supplementary metrics summarize classes with **more than 0, 5, 10 or 20** +truth instances **and accepted predictions**, at each taxonomic rank. Main results +use the intersection of qualifying classes across all five pipelines, so each +pipeline is averaged over the same classes. Exact-boundary counts do not qualify. +Support >0 is the baseline for classes represented in both domains; it still +excludes predicted-only and never-predicted truth classes, unlike full-support metrics. + +The dataset, legacy northern-Europe preset, 52,788-image reporting partition, +calibrated thresholds and pinned `mini_metrics` revision are unchanged from the +[threshold study](mambo-confidence-thresholds.md). Classes are selected from +reporting support; this is descriptive analysis, not independent validation. + +Per-class accuracy, precision, recall and F1 are computed on the **complete reporting +partition** using `mini_metrics`. Its own aggregator then averages the retained +class groups. No image rows are dropped: mistakes from excluded truth classes into +retained predictions still contribute false positives, and mistakes from retained +truth classes into excluded predictions still contribute false negatives. + +Truncation excludes predicted-only classes and rare supported classes from the +average. It therefore intentionally hides the rare-family failure mode studied +[in the family audit](mambo-family-precision.md). Keep these results alongside the +full-support metrics. The class sets may differ between threshold zero and calibrated +thresholds; comparisons across those sections are not on a fixed class domain. + +## Calibrated thresholds · common classes + +Macro-F1 on each shared class set: + +| Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | +|---|---:|---:|---:|---:|---:|---:|---:| +| Species | 0 | 413 | 0.7346 | 0.7625 | 0.7611 | 0.8021 | 0.7858 | +| Species | 5 | 272 | 0.7799 | 0.8016 | 0.8001 | 0.8413 | 0.8224 | +| Species | 10 | 237 | 0.8009 | 0.8139 | 0.8124 | 0.8538 | 0.8356 | +| Species | 20 | 180 | 0.8110 | 0.8221 | 0.8202 | 0.8597 | 0.8420 | +| Genus | 0 | 290 | 0.7589 | 0.8055 | 0.8030 | 0.8276 | 0.8276 | +| Genus | 5 | 215 | 0.7875 | 0.8311 | 0.8290 | 0.8477 | 0.8477 | +| Genus | 10 | 192 | 0.8055 | 0.8364 | 0.8345 | 0.8523 | 0.8525 | +| Genus | 20 | 151 | 0.8215 | 0.8533 | 0.8514 | 0.8692 | 0.8693 | +| Family | 0 | 22 | 0.7735 | 0.7919 | 0.7930 | 0.8281 | 0.8271 | +| Family | 5 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | +| Family | 10 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | +| Family | 20 | 15 | 0.8074 | 0.8138 | 0.8154 | 0.8548 | 0.8533 | + +Within these commonly represented classes, V3 improves family Macro-F1 over V2, +and TTA improves it further. With support >5, all five pipelines are averaged over +19 families: F1 is 0.8021 for V2, 0.8161–0.8174 for ordinary V3 and 0.8524–0.8536 +with TTA. This is compatible with V2 leading the **full-support** family Macro-F1; +the averaging domains answer different questions. + +The TTA species backend ordering also changes in this view. Their separately +selected thresholds have different coverage; shared-threshold testing in the +[threshold study](mambo-confidence-thresholds.md#tta-backend-threshold-sensitivity) +shows closely aligned backend predictions. + +## Threshold zero · common classes + +| Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | +|---|---:|---:|---:|---:|---:|---:|---:| +| Species | 0 | 479 | 0.6579 | 0.6922 | 0.6924 | 0.7300 | 0.7300 | +| Species | 5 | 313 | 0.7815 | 0.8013 | 0.8016 | 0.8288 | 0.8287 | +| Species | 10 | 271 | 0.8062 | 0.8232 | 0.8235 | 0.8484 | 0.8483 | +| Species | 20 | 208 | 0.8209 | 0.8454 | 0.8455 | 0.8656 | 0.8656 | +| Genus | 0 | 317 | 0.7003 | 0.7266 | 0.7267 | 0.7656 | 0.7653 | +| Genus | 5 | 242 | 0.7942 | 0.8057 | 0.8055 | 0.8342 | 0.8340 | +| Genus | 10 | 218 | 0.8087 | 0.8223 | 0.8220 | 0.8520 | 0.8517 | +| Genus | 20 | 174 | 0.8425 | 0.8551 | 0.8549 | 0.8765 | 0.8764 | +| Family | 0 | 23 | 0.7504 | 0.7317 | 0.7328 | 0.7749 | 0.7750 | +| Family | 5 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | +| Family | 10 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | +| Family | 20 | 17 | 0.8635 | 0.8503 | 0.8505 | 0.8813 | 0.8814 | + +## Coverage, complete results and reproduction + +Truncating the averaging domain does not change which images the pipeline accepts. +The [CSV](assets/mambo-tail-metrics.csv) retains overall acceptance coverage, the +number of truth images and accepted predictions belonging to retained classes, +and macro accuracy/precision/recall/F1. These support counts are not interchangeable +with acceptance coverage. Both common-class and per-model class sets are included; +use the common sets for direct model comparisons. The [JSON](assets/mambo-tail-metrics.json) +additionally records every retained class ID. Empty class domains produce null metrics. + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.tail_report \ + --study docs/assets/mambo-threshold-comparison.json \ + --output /tmp/mambo-tail-metrics +``` + +[The collector](../dev/releases/mambo_v3/tail_report.py) verifies source hashes and +reporting-partition identity, uses public per-class calls and the pinned package's +`_aggregate_groups` implementation, and retains the original thresholds. No deployment +default or existing headline metric is changed. diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index c301a7e..79ffd98 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -200,3 +200,13 @@ def test_family_audit_export_keeps_predicted_only_groups_without_recall(tmp_path assert rows["absent"]["recall"] == "" assert rows["absent"]["recall_weight"] == "0" assert rows["absent"]["f1_weight"] == "1" + + +def test_tail_support_requires_both_domains_and_strict_cutoff(): + from dev.releases.mambo_v3.tail_report import eligible_classes + + truth = {"kept": 6, "at_truth_cutoff": 5, "at_prediction_cutoff": 20, "unpredicted": 30} + accepted = {"kept": 6, "at_truth_cutoff": 30, "at_prediction_cutoff": 5, "predicted_only": 100} + assert eligible_classes(truth, accepted, 0) == {"kept", "at_truth_cutoff", "at_prediction_cutoff"} + assert eligible_classes(truth, accepted, 5) == {"kept"} + assert eligible_classes(truth, accepted, 20) == set() From 67b83802a82d686984cc6125dc2f461c55bc9e13 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 13:07:05 +0200 Subject: [PATCH 042/221] fix: retain zero-support classes in tail metric baseline --- dev/releases/mambo_v3/tail_report.py | 13 +- docs/assets/mambo-tail-metrics.csv | 424 +- docs/assets/mambo-tail-metrics.json | 23692 ++++++++++---------- docs/mambo-confidence-thresholds.md | 5 +- docs/mambo-tail-metrics.md | 35 +- tests/releases/test_release_evaluation.py | 1 + 6 files changed, 11529 insertions(+), 12641 deletions(-) diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py index 737fe70..dabe22e 100644 --- a/dev/releases/mambo_v3/tail_report.py +++ b/dev/releases/mambo_v3/tail_report.py @@ -15,7 +15,11 @@ def eligible_classes(truth, accepted_predictions, cutoff): """Use strict support cutoffs in both domains, without dropping evaluation rows.""" - return {label for label, count in truth.items() if count > cutoff and accepted_predictions.get(label, 0) > cutoff} + return { + label + for label in truth.keys() | accepted_predictions.keys() + if truth.get(label, 0) > cutoff and accepted_predictions.get(label, 0) > cutoff + } def collect(study): @@ -52,7 +56,7 @@ def collect(study): } for scope in ("zero", "optimized"): for level, rank in enumerate(("species", "genus", "family")): - for cutoff in (0, 5, 10, 20): + for cutoff in (-1, 5, 10, 20): eligible = { model: eligible_classes(scopes[scope][level]["truth"], scopes[scope][level]["predictions"], cutoff) for model, scopes in work.items() @@ -60,7 +64,10 @@ def collect(study): shared = set.intersection(*eligible.values()) for model, scopes in work.items(): row = scopes[scope][level] - for domain, selected in (("per_model", eligible[model]), ("common", shared)): + domains = [("per_model", eligible[model])] + if cutoff >= 0: + domains.append(("common", shared)) + for domain, selected in domains: reference = study["models"][model]["report_zero" if scope == "zero" else "report_optimized"] result["rows"].append( { diff --git a/docs/assets/mambo-tail-metrics.csv b/docs/assets/mambo-tail-metrics.csv index 1c31a59..8b160f7 100644 --- a/docs/assets/mambo-tail-metrics.csv +++ b/docs/assets/mambo-tail-metrics.csv @@ -1,241 +1,211 @@ model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 -v2,zero,species,0,per_model,490,45522,40726,52788,1.0,0.730398334373567,0.6692785107551973,0.730398334373567,0.6442770650899289 -v2,zero,species,0,common,479,45499,40683,52788,1.0,0.7445619704447763,0.6838130903341267,0.7445619704447763,0.6579127480970971 -torch,zero,species,0,per_model,495,45527,41183,52788,1.0,0.7524863219892478,0.6854888251847001,0.7524863219892478,0.6751936464806082 -torch,zero,species,0,common,479,45499,41145,52788,1.0,0.768226992452354,0.7029581805144605,0.768226992452354,0.6921799339065436 -onnx,zero,species,0,per_model,495,45527,41196,52788,1.0,0.7522981230833534,0.6856640486185108,0.7522981230833534,0.6753901809023951 -onnx,zero,species,0,common,479,45499,41158,52788,1.0,0.7680325071529435,0.7031392569230956,0.7680325071529435,0.6923830331524404 -torch-tta,zero,species,0,per_model,491,45520,42031,52788,1.0,0.7873444012917992,0.7275774071350241,0.7873444012917992,0.7194797347248981 -torch-tta,zero,species,0,common,479,45499,42007,52788,1.0,0.7966306910945165,0.7388458738412599,0.7966306910945165,0.7300482696837085 -onnx-tta,zero,species,0,per_model,490,45519,42040,52788,1.0,0.7892730174965529,0.7287480551447586,0.7892730174965529,0.7209150108506917 -onnx-tta,zero,species,0,common,479,45499,42017,52788,1.0,0.7969598717605656,0.7385244544626272,0.7969598717605656,0.7300144608463682 -v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.8271892598535118,0.7835860088760841,0.7771880031099807 -v2,zero,species,5,common,313,44730,39306,52788,1.0,0.7884742372532278,0.8305015444074887,0.7884742372532278,0.7815287772418466 -torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.826169612130568,0.8016540743299243,0.7937632511493783 -torch,zero,species,5,common,313,44730,40012,52788,1.0,0.8112118860261139,0.8306457257526491,0.8112118860261139,0.801323823079522 -onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168297,0.8021426772632025,0.7940157823083628 -onnx,zero,species,5,common,313,44730,40027,52788,1.0,0.8117129772132781,0.8307669950260991,0.8117129772132781,0.8015828087090237 -torch-tta,zero,species,5,per_model,323,44853,41093,52788,1.0,0.8286743235345041,0.8455415603248386,0.8286743235345041,0.82010073306771 -torch-tta,zero,species,5,common,313,44730,41004,52788,1.0,0.8390964584441899,0.8519293635860035,0.8390964584441899,0.8287585120001667 -onnx-tta,zero,species,5,per_model,323,44853,41099,52788,1.0,0.8289044913540222,0.8454663089232555,0.8289044913540222,0.8200672672516621 -onnx-tta,zero,species,5,common,313,44730,41010,52788,1.0,0.8393339798681654,0.8518517079862864,0.8393339798681654,0.8287239769887177 -v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316644,0.7994793772053351,0.8020074761104699 -v2,zero,species,10,common,271,43652,38723,52788,1.0,0.8043288259343255,0.849759710747019,0.8043288259343255,0.8062320354321301 -torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965738,0.8171258284359165,0.8180429337935673 -torch,zero,species,10,common,271,43652,39130,52788,1.0,0.8236153818021188,0.8538220455561393,0.8236153818021188,0.8231516237390821 +v2,zero,species,-1,per_model,1205,52788,52788,52788,1.0,0.6856229575537315,0.27957925854223936,0.6856229575537315,0.26198818414445213 +torch,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7135646156794592,0.2688723997356786,0.7135646156794592,0.2592869317361528 +onnx,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7133861511997317,0.26894112842009715,0.7133861511997317,0.2593624046134099 +torch-tta,zero,species,-1,per_model,1177,52788,52788,52788,1.0,0.7405864004487995,0.3117281910150928,0.7405864004487995,0.3001398043754674 +onnx-tta,zero,species,-1,per_model,1173,52788,52788,52788,1.0,0.7408884646998294,0.3129592874854788,0.7408884646998294,0.30114949302373306 +v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.827189259853512,0.7835860088760841,0.7771880031099812 +v2,zero,species,5,common,313,44730,39306,52788,1.0,0.7884742372532278,0.8305015444074889,0.7884742372532278,0.7815287772418471 +torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.8261696121305688,0.8016540743299243,0.7937632511493783 +torch,zero,species,5,common,313,44730,40012,52788,1.0,0.8112118860261139,0.8306457257526494,0.8112118860261139,0.801323823079522 +onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168301,0.8021426772632025,0.7940157823083626 +onnx,zero,species,5,common,313,44730,40027,52788,1.0,0.8117129772132781,0.8307669950260996,0.8117129772132781,0.8015828087090235 +torch-tta,zero,species,5,per_model,323,44853,41093,52788,1.0,0.8286743235345041,0.8455415603248386,0.8286743235345041,0.8201007330677098 +torch-tta,zero,species,5,common,313,44730,41004,52788,1.0,0.8390964584441899,0.8519293635860037,0.8390964584441899,0.8287585120001666 +onnx-tta,zero,species,5,per_model,323,44853,41099,52788,1.0,0.8289044913540222,0.8454663089232549,0.8289044913540222,0.8200672672516621 +onnx-tta,zero,species,5,common,313,44730,41010,52788,1.0,0.8393339798681654,0.8518517079862864,0.8393339798681654,0.8287239769887179 +v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316649,0.7994793772053351,0.8020074761104702 +v2,zero,species,10,common,271,43652,38723,52788,1.0,0.8043288259343255,0.8497597107470192,0.8043288259343255,0.8062320354321302 +torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965739,0.8171258284359165,0.8180429337935671 +torch,zero,species,10,common,271,43652,39130,52788,1.0,0.8236153818021188,0.8538220455561395,0.8236153818021188,0.8231516237390822 onnx,zero,species,10,per_model,285,44492,39626,52788,1.0,0.817676149634451,0.8513280853428178,0.817676149634451,0.8183308171409442 -onnx,zero,species,10,common,271,43652,39144,52788,1.0,0.8241941328780684,0.853964176577097,0.8241941328780684,0.8234543792889069 -torch-tta,zero,species,10,per_model,284,44470,40603,52788,1.0,0.8470429977027221,0.8707776696179902,0.8470429977027221,0.8452968243564886 -torch-tta,zero,species,10,common,271,43652,40056,52788,1.0,0.8513634723466735,0.872112449562329,0.8513634723466735,0.8483517909129424 -onnx-tta,zero,species,10,per_model,284,44470,40609,52788,1.0,0.8473047730749205,0.8706920843971752,0.8473047730749205,0.8452587628826029 -onnx-tta,zero,species,10,common,271,43652,40062,52788,1.0,0.8516378052090512,0.8720227587774156,0.8516378052090512,0.8483119036118962 -v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998341 -v2,zero,species,20,common,208,42384,37437,52788,1.0,0.8136982479192534,0.8648542018939746,0.8136982479192534,0.8209483082438455 -torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.878086795953307,0.8271275510654174,0.8390189376702695 -torch,zero,species,20,common,208,42384,37796,52788,1.0,0.8339089780399618,0.8827194680660193,0.8339089780399618,0.8454184870285211 -onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089122,0.8276292942912182,0.8392847349307754 -onnx,zero,species,20,common,208,42384,37811,52788,1.0,0.8344444924444223,0.8825394050561279,0.8344444924444223,0.8455033297180401 -torch-tta,zero,species,20,per_model,223,43375,39483,52788,1.0,0.8552687902032574,0.8920154706737624,0.8552687902032574,0.8618363751815306 -torch-tta,zero,species,20,common,208,42384,38766,52788,1.0,0.859934317761158,0.8943362486856059,0.859934317761158,0.8655942697573593 -onnx-tta,zero,species,20,per_model,223,43375,39484,52788,1.0,0.8552572257583305,0.8920297055771915,0.8552572257583305,0.8618121872907233 -onnx-tta,zero,species,20,common,208,42384,38767,52788,1.0,0.8599219193418374,0.894351510144571,0.8599219193418374,0.8655683375475033 -v2,zero,genus,0,per_model,319,52782,45642,52788,1.0,0.7968044107211967,0.6975226462533961,0.7968044107211967,0.6959574069830721 -v2,zero,genus,0,common,317,52780,45639,52788,1.0,0.80183156788663,0.7019234200467929,0.80183156788663,0.7003483054498423 -torch,zero,genus,0,per_model,319,52784,45349,52788,1.0,0.8128760350980341,0.7169693814982813,0.8128760350980341,0.7220190914539127 -torch,zero,genus,0,common,317,52780,45344,52788,1.0,0.8180045905245201,0.721492847627608,0.8180045905245201,0.7265744169520447 -onnx,zero,genus,0,per_model,320,52785,45352,52788,1.0,0.8103934792030048,0.71472382411519,0.8103934792030048,0.7198779438069757 -onnx,zero,genus,0,common,317,52780,45346,52788,1.0,0.818062818122907,0.7214877719774788,0.818062818122907,0.726690668827231 -torch-tta,zero,genus,0,per_model,320,52786,45977,52788,1.0,0.8364835445780064,0.7515734271797273,0.8364835445780064,0.7584406445360485 -torch-tta,zero,genus,0,common,317,52780,45974,52788,1.0,0.8443997926339497,0.7586861094558761,0.8443997926339497,0.7656183162509008 -onnx-tta,zero,genus,0,per_model,320,52786,45980,52788,1.0,0.836506364737312,0.7510970456076229,0.836506364737312,0.7581454918652479 -onnx-tta,zero,genus,0,common,317,52780,45977,52788,1.0,0.844422828756908,0.7582052195408181,0.844422828756908,0.7653203703371588 -v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466804 -v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133609 -torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 -torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 -onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500324 -onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500324 -torch-tta,zero,genus,5,per_model,243,52575,45481,52788,1.0,0.8642862537522121,0.8433344795518117,0.8642862537522121,0.8345738246636745 -torch-tta,zero,genus,5,common,242,52567,45474,52788,1.0,0.8642419820735022,0.8426871013681415,0.8642419820735022,0.8341657275204114 -onnx-tta,zero,genus,5,per_model,243,52575,45485,52788,1.0,0.8643163049908037,0.8430323470999015,0.8643163049908037,0.8343804242225075 -onnx-tta,zero,genus,5,common,242,52567,45478,52788,1.0,0.8642721574907657,0.8423837204350251,0.8642721574907657,0.8339715279038676 -v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593797,0.8242091812881619,0.8073029077289685 +onnx,zero,species,10,common,271,43652,39144,52788,1.0,0.8241941328780684,0.8539641765770972,0.8241941328780684,0.823454379288907 +torch-tta,zero,species,10,per_model,284,44470,40603,52788,1.0,0.8470429977027221,0.8707776696179904,0.8470429977027221,0.8452968243564886 +torch-tta,zero,species,10,common,271,43652,40056,52788,1.0,0.8513634723466735,0.8721124495623291,0.8513634723466735,0.8483517909129423 +onnx-tta,zero,species,10,per_model,284,44470,40609,52788,1.0,0.8473047730749205,0.870692084397175,0.8473047730749205,0.8452587628826032 +onnx-tta,zero,species,10,common,271,43652,40062,52788,1.0,0.8516378052090512,0.8720227587774156,0.8516378052090512,0.8483119036118965 +v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998348 +v2,zero,species,20,common,208,42384,37437,52788,1.0,0.8136982479192534,0.8648542018939747,0.8136982479192534,0.8209483082438459 +torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.8780867959533072,0.8271275510654174,0.8390189376702701 +torch,zero,species,20,common,208,42384,37796,52788,1.0,0.8339089780399618,0.8827194680660194,0.8339089780399618,0.8454184870285215 +onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089125,0.8276292942912182,0.8392847349307762 +onnx,zero,species,20,common,208,42384,37811,52788,1.0,0.8344444924444223,0.8825394050561284,0.8344444924444223,0.8455033297180404 +torch-tta,zero,species,20,per_model,223,43375,39483,52788,1.0,0.8552687902032574,0.8920154706737625,0.8552687902032574,0.8618363751815307 +torch-tta,zero,species,20,common,208,42384,38766,52788,1.0,0.859934317761158,0.8943362486856059,0.859934317761158,0.8655942697573586 +onnx-tta,zero,species,20,per_model,223,43375,39484,52788,1.0,0.8552572257583305,0.8920297055771915,0.8552572257583305,0.8618121872907232 +onnx-tta,zero,species,20,common,208,42384,38767,52788,1.0,0.8599219193418374,0.8943515101445709,0.8599219193418374,0.8655683375475027 +v2,zero,genus,-1,per_model,691,52788,52788,52788,1.0,0.7893807671430488,0.3234152967366763,0.7893807671430488,0.3212885858575979 +torch,zero,genus,-1,per_model,713,52788,52788,52788,1.0,0.8053026558890463,0.3221313136590873,0.8053026558890463,0.32303518958456984 +onnx,zero,genus,-1,per_model,710,52788,52788,52788,1.0,0.8053599793321786,0.32303901654923867,0.8053599793321786,0.32445203101159475 +torch-tta,zero,genus,-1,per_model,674,52788,52788,52788,1.0,0.8312879946116835,0.3578921081808226,0.8312879946116835,0.3600905137263134 +onnx-tta,zero,genus,-1,per_model,673,52788,52788,52788,1.0,0.831310673030869,0.358198292987242,0.831310673030869,0.3604852264440997 +v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466808 +v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326218,0.8206876060779148,0.7941995832133611 +torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822782,0.8383310164872881,0.8056571781128058 +torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822782,0.8383310164872881,0.8056571781128058 +onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.816294692710962,0.8384072898289766,0.8055261341500324 +onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.816294692710962,0.8384072898289766,0.8055261341500324 +torch-tta,zero,genus,5,per_model,243,52575,45481,52788,1.0,0.8642862537522121,0.8433344795518118,0.8642862537522121,0.8345738246636738 +torch-tta,zero,genus,5,common,242,52567,45474,52788,1.0,0.8642419820735022,0.8426871013681416,0.8642419820735022,0.8341657275204107 +onnx-tta,zero,genus,5,per_model,243,52575,45485,52788,1.0,0.8643163049908037,0.8430323470999014,0.8643163049908037,0.8343804242225068 +onnx-tta,zero,genus,5,common,242,52567,45478,52788,1.0,0.8642721574907657,0.842383720435025,0.8642721574907657,0.8339715279038671 +v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593795,0.8242091812881619,0.8073029077289686 v2,zero,genus,10,common,218,52338,44570,52788,1.0,0.8246759171734157,0.8375222344229503,0.8246759171734157,0.8087106982251911 -torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.8360051629538205,0.8420595718087585,0.8201488914933474 -torch,zero,genus,10,common,218,52338,44425,52788,1.0,0.8440854196075196,0.8391956132162521,0.8440854196075196,0.8223122767531698 -onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467141,0.8421419742582609,0.8198882695930895 -onnx,zero,genus,10,common,218,52338,44429,52788,1.0,0.8441700900143477,0.8386873650181246,0.8441700900143477,0.822044481773088 -torch-tta,zero,genus,10,per_model,222,52384,45193,52788,1.0,0.8724264504229726,0.8640463448274117,0.8724264504229726,0.8517515085475369 -torch-tta,zero,genus,10,common,218,52338,45144,52788,1.0,0.8724594243641395,0.8649085173552921,0.8724594243641395,0.8519555844726409 -onnx-tta,zero,genus,10,per_model,222,52384,45198,52788,1.0,0.8724593443462958,0.8636328288870724,0.8724593443462958,0.8514582101275703 -onnx-tta,zero,genus,10,common,218,52338,45149,52788,1.0,0.8724929218456889,0.864487413966506,0.8724929218456889,0.8516569044302899 -v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462851,0.8447796356264702,0.8409068314387458 -v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290815,0.8468431185140185,0.8425197107045042 -torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251573,0.851621812405513,0.8500899477281387 -torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.879992285140897,0.8572846967941111,0.8551335240737619 -onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140181 -onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758777,0.8569783049191699,0.8548933267800544 -torch-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769067543097299,0.8943059399376526,0.8769067543097299,0.87295880197148 -torch-tta,zero,genus,20,common,174,51091,43849,52788,1.0,0.8813164944712208,0.8965073033675035,0.8813164944712208,0.8765450108644934 -onnx-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769470993427563,0.8939963574869481,0.8769470993427563,0.8728097609356607 -onnx-tta,zero,genus,20,common,174,51091,43850,52788,1.0,0.8813584625802887,0.8961383784724689,0.8813584625802887,0.876352418020288 -v2,zero,family,0,per_model,23,52788,52380,52788,1.0,0.8435038466784595,0.7265179495682207,0.8435038466784595,0.75042499174046 -v2,zero,family,0,common,23,52788,52380,52788,1.0,0.8435038466784595,0.7265179495682207,0.8435038466784595,0.75042499174046 -torch,zero,family,0,per_model,23,52788,52032,52788,1.0,0.8104767092433202,0.7182658553111946,0.8104767092433202,0.7317239969421455 -torch,zero,family,0,common,23,52788,52032,52788,1.0,0.8104767092433202,0.7182658553111946,0.8104767092433202,0.7317239969421455 -onnx,zero,family,0,per_model,23,52788,52032,52788,1.0,0.8106325437578626,0.7191962309707975,0.8106325437578626,0.7327511040954056 -onnx,zero,family,0,common,23,52788,52032,52788,1.0,0.8106325437578626,0.7191962309707975,0.8106325437578626,0.7327511040954056 -torch-tta,zero,family,0,per_model,23,52788,52253,52788,1.0,0.8579010503993526,0.7452645609572454,0.8579010503993526,0.7748977570788995 -torch-tta,zero,family,0,common,23,52788,52253,52788,1.0,0.8579010503993526,0.7452645609572454,0.8579010503993526,0.7748977570788995 -onnx-tta,zero,family,0,per_model,23,52788,52253,52788,1.0,0.8580571051602935,0.7452276841673134,0.8580571051602935,0.7749856158408315 -onnx-tta,zero,family,0,common,23,52788,52253,52788,1.0,0.8580571051602935,0.7452276841673134,0.8580571051602935,0.7749856158408315 -v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 -v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 -torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 -torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 -onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 -onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.836005162953821,0.8420595718087585,0.8201488914933475 +torch,zero,genus,10,common,218,52338,44425,52788,1.0,0.8440854196075196,0.8391956132162525,0.8440854196075196,0.8223122767531698 +onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467144,0.8421419742582609,0.8198882695930892 +onnx,zero,genus,10,common,218,52338,44429,52788,1.0,0.8441700900143477,0.8386873650181248,0.8441700900143477,0.8220444817730879 +torch-tta,zero,genus,10,per_model,222,52384,45193,52788,1.0,0.8724264504229726,0.8640463448274117,0.8724264504229726,0.8517515085475365 +torch-tta,zero,genus,10,common,218,52338,45144,52788,1.0,0.8724594243641395,0.864908517355292,0.8724594243641395,0.8519555844726405 +onnx-tta,zero,genus,10,per_model,222,52384,45198,52788,1.0,0.8724593443462958,0.8636328288870722,0.8724593443462958,0.8514582101275701 +onnx-tta,zero,genus,10,common,218,52338,45149,52788,1.0,0.8724929218456889,0.8644874139665057,0.8724929218456889,0.8516569044302893 +v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462857,0.8447796356264702,0.8409068314387455 +v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290819,0.8468431185140185,0.8425197107045038 +torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251572,0.851621812405513,0.8500899477281391 +torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.8799922851408967,0.8572846967941111,0.855133524073762 +onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140182 +onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758775,0.8569783049191699,0.8548933267800546 +torch-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769067543097299,0.8943059399376523,0.8769067543097299,0.8729588019714802 +torch-tta,zero,genus,20,common,174,51091,43849,52788,1.0,0.8813164944712208,0.8965073033675033,0.8813164944712208,0.876545010864494 +onnx-tta,zero,genus,20,per_model,181,51690,44297,52788,1.0,0.8769470993427563,0.8939963574869481,0.8769470993427563,0.872809760935661 +onnx-tta,zero,genus,20,common,174,51091,43850,52788,1.0,0.8813584625802887,0.8961383784724689,0.8813584625802887,0.8763524180202883 +v2,zero,family,-1,per_model,64,52788,52788,52788,1.0,0.8435038466784595,0.26109238812607927,0.8435038466784595,0.26968398140672784 +torch,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8104767092433202,0.27533524453595787,0.8104767092433202,0.28049419882782245 +onnx,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.28088792323657213 +torch-tta,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.29704414021357817 +onnx-tta,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8580571051602935,0.28567061226413676,0.8580571051602935,0.2970778194056521 +v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 torch-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 torch-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 onnx-tta,zero,family,5,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 onnx-tta,zero,family,5,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 -v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 -v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192 -torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 -torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339 -onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 -onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034537,0.8700294236802284,0.8237730542270192 +torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 +onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497507,0.8572274253215421,0.7843304363763831 torch-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 torch-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407346 onnx-tta,zero,family,10,per_model,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 onnx-tta,zero,family,10,common,20,52783,52160,52788,1.0,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956 -v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579269 -v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579269 -torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152918 -torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152918 -onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 -onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055043,0.8777980291519171,0.8634797826579269 +v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055043,0.8777980291519171,0.8634797826579269 +torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344529,0.8761006803143303,0.8502787174152917 +torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344529,0.8761006803143303,0.8502787174152917 +onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430295,0.8763115152457701,0.8504835558317285 +onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430295,0.8763115152457701,0.8504835558317285 torch-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 torch-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.9024478981808949,0.8736299225701798,0.9024478981808949,0.8812811401338616 -onnx-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426246,0.902659031092756,0.8814000078705927 -onnx-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426246,0.902659031092756,0.8814000078705927 -v2,optimized,species,0,per_model,433,44484,31566,52788,0.6973175721754944,0.9240191857358756,0.885700493336194,0.6531790785268475,0.7117924113167411 -v2,optimized,species,0,common,413,44369,31533,52788,0.6973175721754944,0.9385872203508142,0.9084139958383503,0.6750014601723655,0.7345720682137987 -torch,optimized,species,0,per_model,449,45205,31873,52788,0.7081344244904145,0.9398423490596125,0.9094313118847961,0.6713467663200402,0.7401393054211883 -torch,optimized,species,0,common,413,44369,31677,52788,0.7081344244904145,0.9483742161527923,0.9278828363613216,0.6933654020535126,0.7625446812254123 -onnx,optimized,species,0,per_model,449,45205,31724,52788,0.7045351216185497,0.940681805632725,0.9109585170264042,0.6688306126725968,0.7382564696944265 -onnx,optimized,species,0,common,413,44369,31534,52788,0.7045351216185497,0.948876538655318,0.92844781010515,0.6912679285399674,0.7610933438936152 -torch-tta,optimized,species,0,per_model,465,45248,35052,52788,0.7831893612184587,0.932529958593781,0.898413496661032,0.717614394885624,0.7671987063507582 -torch-tta,optimized,species,0,common,413,44369,34742,52788,0.7831893612184587,0.9456222727159702,0.9252382253232228,0.7526084931806575,0.8021001528962034 -onnx-tta,optimized,species,0,per_model,450,45148,33352,52788,0.7404902629385466,0.9483124062069127,0.9228068935716895,0.7047776611494099,0.7675439553505272 -onnx-tta,optimized,species,0,common,413,44369,33106,52788,0.7404902629385466,0.9531195374005882,0.9347573093799684,0.7229650126277268,0.7857605754515414 -v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.943736867068747,0.6916423088644161,0.7737956953842573 -v2,optimized,species,5,common,272,42778,31024,52788,0.6973175721754944,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854289 -torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942064 -torch,optimized,species,5,common,272,42778,30977,52788,0.7081344244904145,0.963494109771882,0.9626322859838098,0.7171390330256306,0.8016422382706131 -onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565229,0.7010200481362973,0.788830662496077 -onnx,optimized,species,5,common,272,42778,30845,52788,0.7045351216185497,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018762 -torch-tta,optimized,species,5,per_model,295,44279,34630,52788,0.7831893612184587,0.9565023879246428,0.9579592889257432,0.7631267851065484,0.8330906323599062 -torch-tta,optimized,species,5,common,272,42778,33853,52788,0.7831893612184587,0.9585814667783285,0.9585731812083509,0.7743974002343408,0.8413487263251005 -onnx-tta,optimized,species,5,per_model,293,44256,32979,52788,0.7404902629385466,0.9624875420542846,0.9631846488302392,0.7304548441650828,0.8110548032550082 -onnx-tta,optimized,species,5,common,272,42778,32341,52788,0.7404902629385466,0.9650388599694326,0.9639006969879437,0.7443741514376615,0.8223569195026884 -v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.7961537592407802 -v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758544,0.7164050701636104,0.8009004286169518 -torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780558,0.7171112436175308,0.8061491380093965 -torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732053,0.7266753942187194,0.8138865890143704 -onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474767,0.7146917879143063,0.8044523205064158 -onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410929,0.7245547988604122,0.8124276972685942 -torch-tta,optimized,species,10,per_model,268,43942,34313,52788,0.7831893612184587,0.9555513324900085,0.9634422815056631,0.7666899243764238,0.8398127135942168 -torch-tta,optimized,species,10,common,237,42021,33322,52788,0.7831893612184587,0.9625685565215116,0.9646515680804645,0.7845362115505334,0.8537896748755334 -onnx-tta,optimized,species,10,per_model,263,43846,32662,52788,0.7404902629385466,0.961629373180915,0.9681806145232889,0.7372508842609241,0.820284716224131 -onnx-tta,optimized,species,10,common,237,42021,31861,52788,0.7404902629385466,0.9683141861823075,0.9697003821520682,0.7555690214239896,0.8356173638868799 -v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897979 -v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.9605971055104869,0.7264566019960785,0.811036699937377 -torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830733,0.7249718216154226,0.8139613934096738 -torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.9682799478546156,0.7355230038915617,0.8220522350709073 -onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720884,0.7241073248627131,0.8134845543532355 -onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573341,0.7328357084727255,0.8202403740616804 -torch-tta,optimized,species,20,per_model,205,42565,33383,52788,0.7831893612184587,0.9591300853526652,0.9604484571118049,0.7699762479855812,0.842013462392941 -torch-tta,optimized,species,20,common,180,40455,32213,52788,0.7831893612184587,0.9705268255352514,0.9657886526261308,0.7926309175203593,0.8597488311609114 -onnx-tta,optimized,species,20,per_model,198,42291,31709,52788,0.7404902629385466,0.9719038952762132,0.9695617529783702,0.7466077391820205,0.8288133411410782 -onnx-tta,optimized,species,20,common,180,40455,30826,52788,0.7404902629385466,0.976210705701146,0.9704033057734652,0.7637449348360044,0.8420413480097139 -v2,optimized,genus,0,per_model,297,51713,34407,52788,0.6981321512464954,0.9730202662706766,0.9354090897454787,0.6696547903717441,0.7488929063874894 -v2,optimized,genus,0,common,290,47277,34382,52788,0.6981321512464954,0.9760968718601971,0.9441948263945075,0.6789075236695378,0.758894188886813 -torch,optimized,genus,0,per_model,305,52764,36639,52788,0.7575395923315905,0.9675728610989023,0.9311163097974926,0.7162235431527392,0.7854650195910905 -torch,optimized,genus,0,common,290,47277,36222,52788,0.7575395923315905,0.9717947278556177,0.9457657053357997,0.7357875537389513,0.8055286746347516 -onnx,optimized,genus,0,per_model,305,52764,36471,52788,0.7536561339698417,0.9679659039694104,0.9324066587585462,0.7121688160928734,0.7826452771316182 -onnx,optimized,genus,0,common,290,47277,36061,52788,0.7536561339698417,0.9724093229520842,0.9471708404892052,0.7319329372281088,0.8029757834023304 -torch-tta,optimized,genus,0,per_model,305,48338,37668,52788,0.7772978707281958,0.9755532044276723,0.9505668112244134,0.7423366594133708,0.8117050275966146 -torch-tta,optimized,genus,0,common,290,47277,37209,52788,0.7772978707281958,0.9767057765407489,0.9614821443720363,0.7575794509648353,0.8276206040656773 -onnx-tta,optimized,genus,0,per_model,305,48338,37653,52788,0.7768621656437069,0.9757794309698761,0.950805459732764,0.7423421426731508,0.8117369598871598 -onnx-tta,optimized,genus,0,common,290,47277,37196,52788,0.7768621656437069,0.9769436862054228,0.9615032517112784,0.7575932745608045,0.8276086187401221 -v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753265 -v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.96822735165948,0.6927141276824689,0.787485243584438 -torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648698,0.7349949980804276,0.8198300630906831 -torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921 -onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972658,0.7310313579815346,0.8173152189160264 -onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827876 -torch-tta,optimized,genus,5,per_model,228,48014,37467,52788,0.7772978707281958,0.9739289484518205,0.9704707099468884,0.7536090100054875,0.8347586230965691 -torch-tta,optimized,genus,5,common,215,46868,36949,52788,0.7772978707281958,0.9771086466542604,0.9775547270341164,0.767268013502815,0.8477428518527237 -onnx-tta,optimized,genus,5,per_model,228,48014,37452,52788,0.7768621656437069,0.9742276071763961,0.970789954662006,0.7536163450679126,0.8348013395378685 -onnx-tta,optimized,genus,5,common,215,46868,36936,52788,0.7768621656437069,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996489 -v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993277,0.7030299586868274,0.7949775034079529 -v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409167,0.7109088798148795,0.8054635075619047 -torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759429 -torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.83644361028291 -onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142044 -onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.9742219352236319,0.7503899701812965,0.8344922648164951 -torch-tta,optimized,genus,10,per_model,205,47702,37268,52788,0.7772978707281958,0.9770381133367219,0.9784954355713805,0.7643769766620188,0.8460362463804566 -torch-tta,optimized,genus,10,common,192,46467,36672,52788,0.7772978707281958,0.9775836137284416,0.9789300486595732,0.7732961033321674,0.8523256131620105 -onnx-tta,optimized,genus,10,per_model,205,47702,37255,52788,0.7768621656437069,0.9773702801133233,0.9785252947342102,0.7646418740921664,0.8462515189804946 -onnx-tta,optimized,genus,10,common,192,46467,36660,52788,0.7768621656437069,0.9776077796766862,0.978961929536553,0.7735522735935464,0.8525123269701549 -v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981802,0.7242019498914946,0.8169005762983503 -v2,optimized,genus,20,common,151,45179,33263,52788,0.6981321512464954,0.9840178517103966,0.9779005369081346,0.7276296542386876,0.8215085827272921 -torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967002,0.7571265698443955,0.841932335046979 -torch,optimized,genus,20,common,151,45179,34973,52788,0.7575395923315905,0.9859159179291114,0.9756538685518954,0.7718614744316848,0.8533020792538338 +onnx-tta,zero,family,20,per_model,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426248,0.902659031092756,0.8814000078705928 +onnx-tta,zero,family,20,common,17,52742,52060,52788,1.0,0.902659031092756,0.8735800304426248,0.902659031092756,0.8814000078705928 +v2,optimized,species,-1,per_model,690,52788,36810,52788,0.6973175721754944,0.8465208024160925,0.6381169943670086,0.5418132969389368,0.4466755276813755 +torch,optimized,species,-1,per_model,654,52788,37381,52788,0.7081344244904145,0.8669405316273155,0.7028135267405736,0.5774611074285403,0.5081384528044552 +onnx,optimized,species,-1,per_model,650,52788,37191,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812275 +torch-tta,optimized,species,-1,per_model,681,52788,41343,52788,0.7831893612184587,0.8659206758370823,0.6694908268387493,0.639254202340642,0.5238581475082267 +onnx-tta,optimized,species,-1,per_model,636,52788,39089,52788,0.7404902629385466,0.8755166405852203,0.7362820959348579,0.6075669492667327,0.5430735533140528 +v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.9437368670687469,0.6916423088644161,0.7737956953842571 +v2,optimized,species,5,common,272,42778,31024,52788,0.6973175721754944,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854288 +torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942066 +torch,optimized,species,5,common,272,42778,30977,52788,0.7081344244904145,0.963494109771882,0.9626322859838096,0.7171390330256306,0.8016422382706132 +onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565231,0.7010200481362973,0.7888306624960773 +onnx,optimized,species,5,common,272,42778,30845,52788,0.7045351216185497,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018765 +torch-tta,optimized,species,5,per_model,295,44279,34630,52788,0.7831893612184587,0.9565023879246428,0.9579592889257424,0.7631267851065484,0.8330906323599061 +torch-tta,optimized,species,5,common,272,42778,33853,52788,0.7831893612184587,0.9585814667783285,0.9585731812083507,0.7743974002343408,0.8413487263251 +onnx-tta,optimized,species,5,per_model,293,44256,32979,52788,0.7404902629385466,0.9624875420542846,0.9631846488302389,0.7304548441650828,0.8110548032550078 +onnx-tta,optimized,species,5,common,272,42778,32341,52788,0.7404902629385466,0.9650388599694326,0.9639006969879439,0.7443741514376615,0.8223569195026881 +v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.79615375924078 +v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758545,0.7164050701636104,0.8009004286169517 +torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780556,0.7171112436175308,0.8061491380093968 +torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732049,0.7266753942187194,0.8138865890143703 +onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474765,0.7146917879143063,0.8044523205064164 +onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410925,0.7245547988604122,0.8124276972685947 +torch-tta,optimized,species,10,per_model,268,43942,34313,52788,0.7831893612184587,0.9555513324900085,0.9634422815056631,0.7666899243764238,0.8398127135942166 +torch-tta,optimized,species,10,common,237,42021,33322,52788,0.7831893612184587,0.9625685565215116,0.9646515680804644,0.7845362115505334,0.8537896748755333 +onnx-tta,optimized,species,10,per_model,263,43846,32662,52788,0.7404902629385466,0.961629373180915,0.9681806145232891,0.7372508842609241,0.8202847162241308 +onnx-tta,optimized,species,10,common,237,42021,31861,52788,0.7404902629385466,0.9683141861823075,0.9697003821520683,0.7555690214239896,0.8356173638868795 +v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897977 +v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.960597105510487,0.7264566019960785,0.8110366999373771 +torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830727,0.7249718216154226,0.8139613934096733 +torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.968279947854615,0.7355230038915617,0.8220522350709067 +onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720876,0.7241073248627131,0.8134845543532353 +onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573336,0.7328357084727255,0.82024037406168 +torch-tta,optimized,species,20,per_model,205,42565,33383,52788,0.7831893612184587,0.9591300853526652,0.9604484571118049,0.7699762479855812,0.8420134623929408 +torch-tta,optimized,species,20,common,180,40455,32213,52788,0.7831893612184587,0.9705268255352514,0.9657886526261303,0.7926309175203593,0.8597488311609114 +onnx-tta,optimized,species,20,per_model,198,42291,31709,52788,0.7404902629385466,0.9719038952762132,0.9695617529783704,0.7466077391820205,0.8288133411410775 +onnx-tta,optimized,species,20,common,180,40455,30826,52788,0.7404902629385466,0.976210705701146,0.9704033057734655,0.7637449348360044,0.8420413480097133 +v2,optimized,genus,-1,per_model,379,52788,36853,52788,0.6981321512464954,0.9533632911945014,0.7847923719051053,0.6176629588211429,0.5868633065886133 +torch,optimized,genus,-1,per_model,398,52788,39989,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725 +onnx,optimized,genus,-1,per_model,395,52788,39784,52788,0.7536561339698417,0.9551874761942367,0.7523387061411552,0.6745698413302063,0.6043210367725153 +torch-tta,optimized,genus,-1,per_model,372,52788,41032,52788,0.7772978707281958,0.9627590640417357,0.8166841617561863,0.7031449724257084,0.6655108425187298 +onnx-tta,optimized,genus,-1,per_model,372,52788,41009,52788,0.7768621656437069,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633971 +v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753269 +v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.9682273516594799,0.6927141276824689,0.787485243584438 +torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648699,0.7349949980804276,0.8198300630906835 +torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149174,0.7475533077376153,0.8310650157210918 +onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972659,0.7310313579815346,0.8173152189160263 +onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827873 +torch-tta,optimized,genus,5,per_model,228,48014,37467,52788,0.7772978707281958,0.9739289484518205,0.9704707099468883,0.7536090100054875,0.8347586230965688 +torch-tta,optimized,genus,5,common,215,46868,36949,52788,0.7772978707281958,0.9771086466542604,0.9775547270341163,0.767268013502815,0.8477428518527229 +onnx-tta,optimized,genus,5,per_model,228,48014,37452,52788,0.7768621656437069,0.9742276071763961,0.970789954662006,0.7536163450679126,0.8348013395378682 +onnx-tta,optimized,genus,5,common,215,46868,36936,52788,0.7768621656437069,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996483 +v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993276,0.7030299586868274,0.7949775034079529 +v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409165,0.7109088798148795,0.8054635075619047 +torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759426 +torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.8364436102829099 +onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142042 +onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.974221935223632,0.7503899701812965,0.834492264816495 +torch-tta,optimized,genus,10,per_model,205,47702,37268,52788,0.7772978707281958,0.9770381133367219,0.9784954355713802,0.7643769766620188,0.8460362463804563 +torch-tta,optimized,genus,10,common,192,46467,36672,52788,0.7772978707281958,0.9775836137284416,0.9789300486595729,0.7732961033321674,0.85232561316201 +onnx-tta,optimized,genus,10,per_model,205,47702,37255,52788,0.7768621656437069,0.9773702801133233,0.9785252947342102,0.7646418740921664,0.8462515189804942 +onnx-tta,optimized,genus,10,common,192,46467,36660,52788,0.7768621656437069,0.9776077796766862,0.9789619295365529,0.7735522735935464,0.8525123269701546 +v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981804,0.7242019498914946,0.8169005762983504 +v2,optimized,genus,20,common,151,45179,33263,52788,0.6981321512464954,0.9840178517103966,0.9779005369081352,0.7276296542386876,0.8215085827272921 +torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967003,0.7571265698443955,0.8419323350469788 +torch,optimized,genus,20,common,151,45179,34973,52788,0.7575395923315905,0.9859159179291114,0.9756538685518957,0.7718614744316848,0.8533020792538334 onnx,optimized,genus,20,per_model,165,46690,35481,52788,0.7536561339698417,0.9817692866417445,0.9765223194080256,0.7541904615905834,0.8401795246684534 -onnx,optimized,genus,20,common,151,45179,34825,52788,0.7536561339698417,0.9866161345901774,0.9761653514032596,0.768748272502419,0.8513772766242688 -torch-tta,optimized,genus,20,per_model,167,46689,36692,52788,0.7772978707281958,0.9857897321742519,0.9793244688724696,0.7752481222536762,0.8561620153740219 -torch-tta,optimized,genus,20,common,151,45179,35938,52788,0.7772978707281958,0.9886115750548432,0.9809062330056775,0.7925083520312406,0.8691592136815403 -onnx-tta,optimized,genus,20,per_model,167,46689,36678,52788,0.7768621656437069,0.9858135534806919,0.9793611223358237,0.7753668121612188,0.8562508653962664 -onnx-tta,optimized,genus,20,common,151,45179,35925,52788,0.7768621656437069,0.9886423026181744,0.9809467702797179,0.792676399490679,0.8692708237591562 -v2,optimized,family,0,per_model,22,52786,40877,52788,0.7744373721300295,0.9963653352691595,0.9560780057797795,0.6760540010869929,0.7735267153680251 -v2,optimized,family,0,common,22,52786,40877,52788,0.7744373721300295,0.9963653352691595,0.9560780057797795,0.6760540010869929,0.7735267153680251 -torch,optimized,family,0,per_model,22,52786,38535,52788,0.7305827081912556,0.9932547854813464,0.9762352614742195,0.6832121844236498,0.7919257036079034 -torch,optimized,family,0,common,22,52786,38535,52788,0.7305827081912556,0.9932547854813464,0.9762352614742195,0.6832121844236498,0.7919257036079034 -onnx,optimized,family,0,per_model,22,52786,38641,52788,0.7325907403197697,0.9932599551447033,0.9762464326229743,0.6846193516228278,0.793047168620814 -onnx,optimized,family,0,common,22,52786,38641,52788,0.7325907403197697,0.9932599551447033,0.9762464326229743,0.6846193516228278,0.793047168620814 -torch-tta,optimized,family,0,per_model,22,52786,41543,52788,0.7874327498673941,0.9955823574240963,0.9746511312798972,0.7319846152154214,0.8280771248604737 -torch-tta,optimized,family,0,common,22,52786,41543,52788,0.7874327498673941,0.9955823574240963,0.9746511312798972,0.7319846152154214,0.8280771248604737 -onnx-tta,optimized,family,0,per_model,22,52786,41399,52788,0.7846859134651815,0.9955854528269081,0.9748005661767682,0.7304295789928673,0.8270581606098827 -onnx-tta,optimized,family,0,common,22,52786,41399,52788,0.7846859134651815,0.9955854528269081,0.9748005661767682,0.7304295789928673,0.8270581606098827 -v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 -v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 -torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 -torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 -onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 -onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 -torch-tta,optimized,family,5,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 -torch-tta,optimized,family,5,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 -onnx-tta,optimized,family,5,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 -onnx-tta,optimized,family,5,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 -v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 -v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409 -torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 -torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 -onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 -onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 -torch-tta,optimized,family,10,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 -torch-tta,optimized,family,10,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805483 -onnx-tta,optimized,family,10,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 -onnx-tta,optimized,family,10,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759 -v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 -v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 -torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635084 -torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635084 -onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157777 -onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157777 -torch-tta,optimized,family,20,per_model,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.997949864338721,0.7536293282011772,0.8548063047552162 -torch-tta,optimized,family,20,common,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.997949864338721,0.7536293282011772,0.8548063047552162 -onnx-tta,optimized,family,20,per_model,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207987,0.751348608408098,0.8533118238543494 -onnx-tta,optimized,family,20,common,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207987,0.751348608408098,0.8533118238543494 +onnx,optimized,genus,20,common,151,45179,34825,52788,0.7536561339698417,0.9866161345901774,0.9761653514032598,0.768748272502419,0.8513772766242683 +torch-tta,optimized,genus,20,per_model,167,46689,36692,52788,0.7772978707281958,0.9857897321742519,0.9793244688724693,0.7752481222536762,0.8561620153740219 +torch-tta,optimized,genus,20,common,151,45179,35938,52788,0.7772978707281958,0.9886115750548432,0.9809062330056771,0.7925083520312406,0.8691592136815407 +onnx-tta,optimized,genus,20,per_model,167,46689,36678,52788,0.7768621656437069,0.9858135534806919,0.9793611223358233,0.7753668121612188,0.8562508653962666 +onnx-tta,optimized,genus,20,common,151,45179,35925,52788,0.7768621656437069,0.9886423026181744,0.9809467702797179,0.792676399490679,0.8692708237591565 +v2,optimized,family,-1,per_model,26,52788,40881,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057 +torch,optimized,family,-1,per_model,30,52788,38566,52788,0.7305827081912556,0.9932547854813464,0.7405922673252698,0.6535073068400129,0.5807455159791289 +onnx,optimized,family,-1,per_model,30,52788,38672,52788,0.7325907403197697,0.9932599551447033,0.7406007419898424,0.6548532928566179,0.5815679236552638 +torch-tta,optimized,family,-1,per_model,30,52788,41567,52788,0.7874327498673941,0.9955823574240963,0.7393905133847497,0.700159197162577,0.607256558231014 +onnx-tta,optimized,family,-1,per_model,30,52788,41422,52788,0.7846859134651815,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805806 +v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,5,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,5,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,5,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +onnx-tta,optimized,family,5,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239552,0.6876576692748175,0.8020952610694089 +torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876927,0.7040432580775865,0.816089411195116 +onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020403,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,10,per_model,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +torch-tta,optimized,family,10,common,19,52770,41536,52788,0.7874327498673941,0.9948848349121117,0.991701309903039,0.7564680159984232,0.8535629866805483 +onnx-tta,optimized,family,10,per_model,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +onnx-tta,optimized,family,10,common,19,52770,41392,52788,0.7846859134651815,0.9948884190627355,0.9918743397836264,0.754667447740729,0.8523831333377587 +v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.99787772586138,0.6871044763195309,0.8073961361904208 +v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.99787772586138,0.6871044763195309,0.8073961361904208 +torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.9966265316436699,0.6975420951522447,0.8137962822635084 +torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.9966265316436699,0.6975420951522447,0.8137962822635084 +onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.996642915995177,0.6996059403777053,0.8154410976157778 +onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.996642915995177,0.6996059403777053,0.8154410976157778 +torch-tta,optimized,family,20,per_model,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.9979498643387211,0.7536293282011772,0.8548063047552162 +torch-tta,optimized,family,20,common,15,52686,41473,52788,0.7874327498673941,0.9970295628184992,0.9979498643387211,0.7536293282011772,0.8548063047552162 +onnx-tta,optimized,family,20,per_model,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207985,0.751348608408098,0.8533118238543497 +onnx-tta,optimized,family,20,common,15,52686,41329,52788,0.7846859134651815,0.9970341027426228,0.9981690355207985,0.751348608408098,0.8533118238543497 diff --git a/docs/assets/mambo-tail-metrics.json b/docs/assets/mambo-tail-metrics.json index 172145c..e16d674 100644 --- a/docs/assets/mambo-tail-metrics.json +++ b/docs/assets/mambo-tail-metrics.json @@ -6,56 +6,179 @@ "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "10055273", + "10638451", + "10844862", + "10922411", + "10982815", + "11052757", + "11080751", + "11287091", + "11418741", "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731826", "1732063", "1732416", + "1732452", + "1732565", + "1733258", + "1733484", "1734453", "1734704", "1734826", + "1735532", + "1735855", + "1736377", + "1736412", + "1736447", + "1736727", + "1736906", "1737491", + "1737524", "1737542", + "1737552", "1737650", "1737775", "1737776", + "1737847", "1738050", + "1738163", + "1738222", + "1738245", + "1738422", + "1738429", + "1739272", + "1739290", + "1739461", + "1739819", "1739833", "1739922", + "1739931", + "1739980", "1740005", + "1740069", + "1740174", + "1740183", "1740185", + "1740392", "1741341", + "1741368", + "1741545", + "1741593", + "1741633", "1741752", "1742142", + "1742346", + "1743196", + "1743475", "1743532", + "1743641", + "1743643", + "1743710", + "1743730", + "1743768", "1743775", + "1743828", "1744071", + "1744136", + "1744224", + "1744416", + "1744498", + "1744588", + "1744593", + "1744693", + "1744709", + "1744714", + "1744728", + "1744731", + "1744739", + "1744748", + "1744763", + "1744777", "1744782", + "1744808", + "1744810", + "1744896", "1745079", + "1745561", + "1745600", + "1745724", + "1745737", "1746027", + "1746413", "1746440", + "1746613", + "1746644", + "1746666", "1746775", "1746832", + "1746856", "1746876", + "1746910", + "1747050", + "1748805", + "1748890", + "1749164", + "1749713", + "1749948", + "1751051", + "1751298", + "1751457", "1758878", "1759069", "1759083", "1759153", + "1759407", + "1759667", + "1759668", "1760104", + "1760246", "1760593", + "1760857", + "1760887", + "1760891", "1761041", + "1761438", + "1761735", + "1761865", "1762244", + "1762608", + "1763072", "1763610", + "1764987", "1765011", + "1765017", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", "1766137", "1766210", "1766274", "1766510", + "1766646", + "1766741", + "1766814", "1767597", "1767625", + "1767655", "1768117", + "1768150", "1768341", + "1768749", + "1768771", "1769103", "1769505", "1769566", @@ -68,143 +191,416 @@ "1770880", "1771040", "1771214", + "1771245", "1771509", + "1771531", + "1771634", + "1771650", + "1771678", "1771698", + "1771772", "1772169", "1772179", + "1772793", "1772940", + "1772956", + "1773163", "1773309", + "1773328", + "1774285", + "1775152", "1775891", "1776330", + "1776371", + "1776619", "1776862", "1777253", "1778074", + "1778127", + "1778143", + "1778596", + "1779334", + "1779435", + "1779641", "1779690", "1780150", + "1780378", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", + "1782727", "1782763", "1782777", "1782841", "1782927", "1782948", + "1783016", "1783037", "1783043", + "1784359", + "1784812", + "1784826", + "1785185", "1785286", "1785888", "1785895", + "1786007", "1786902", + "1786936", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", "1787610", + "1787751", + "1787770", + "1787859", + "1788522", + "1788635", + "1788917", + "1789076", + "1789086", "1789267", + "1789481", "1789580", "1789694", "1789695", "1789730", "1789745", + "1789753", + "1789755", "1789783", "1789785", + "1789840", + "1789849", "1789982", "1790002", "1790072", + "1790160", + "1790361", + "1790364", + "1790625", + "1790692", + "1790816", "1791422", + "1792061", + "1792292", + "1792335", + "1792377", "1792383", "1792411", + "1792414", "1792418", + "1792426", "1793877", + "1793986", + "1794102", + "1794361", "1794590", "1795215", + "1795282", "1795854", + "1795946", + "1795957", + "1796007", "1796117", "1796145", + "1796169", + "1796188", + "1796463", + "1796668", "1796678", "1797178", "1797258", + "1797276", "1797367", "1797479", "1798346", + "1798372", + "1798408", "1798449", + "1798504", + "1798594", + "1798802", "1798807", + "1798971", "1798974", + "1798984", "1799132", + "1799135", "1799701", "1799708", + "1799799", "1800004", "1800032", + "1801051", "1801896", "1802280", "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1820406", + "1821856", "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", + "1824113", "1825064", "1825077", + "1825083", "1825156", + "1825176", + "1825539", "1825971", "1825983", "1826022", + "1826033", "1827125", + "1827645", "1828162", "1828637", + "1829322", + "1829363", + "1829533", + "1829776", + "1829785", + "1830122", + "1830125", + "1830131", + "1830144", + "1830191", + "1830380", "1830410", + "1830457", + "1830632", + "1830838", + "1830843", "1830937", + "1830962", + "1831002", + "1831009", + "1831128", "1831136", + "1831168", "1831643", + "1831752", + "1832819", + "1832853", "1835156", + "1835393", + "1835407", + "1835433", + "1835457", "1836899", + "1837172", + "1837420", + "1838838", + "1838911", + "1839851", "1839893", + "1840297", + "1840301", + "1840345", + "1840346", + "1840360", + "1840478", + "1840483", + "1840596", + "1841158", + "1841159", "1841261", + "1841675", + "1841813", + "1841821", + "1842196", "1845270", + "1845962", + "1846112", + "1846141", + "1846219", + "1846604", + "1847097", "1847407", + "1847956", + "1848202", + "1848356", + "1848426", + "1848657", + "1848864", + "1848920", + "1849284", + "1849630", + "1850008", + "1850238", + "1850246", + "1850279", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851555", + "1852150", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853587", + "1854202", + "1854237", + "1854347", + "1854792", + "1856289", + "1856384", + "1856595", + "1856686", + "1856701", + "1856730", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858531", + "1858698", + "1858762", + "1859046", + "1859100", + "1860408", + "1860671", + "1860688", + "1860983", + "1860987", + "1861395", + "1861644", + "1861862", + "1862578", "1862580", + "1862719", "1862837", + "1864161", + "1864358", "1864377", + "1864652", + "1866568", + "1869489", + "1869803", + "1869852", + "1869976", + "1870202", + "1870249", "1870250", + "1870450", + "1870988", "1871252", "1871407", + "1871698", + "1871826", + "1872315", "1872368", "1872901", + "1873048", + "1873079", + "1873411", + "1874375", + "1874743", "1875008", + "1875120", "1875327", + "1875827", + "1875865", "1875869", + "1875918", + "1875952", "1876329", + "1876409", "1876542", + "1876623", + "1876854", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", "1879252", + "1879452", + "1879630", + "1879735", + "1879765", "1879970", + "1880040", + "1880064", + "1880138", + "1880139", + "1880140", "1881151", + "1881834", + "1882158", "1882210", + "1882905", "1883161", + "1883386", "1884212", "1884255", "1884273", + "1884280", + "1884312", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", "1886579", "1886587", "1887108", + "1887173", + "1887177", "1887290", + "1887701", + "1888579", + "1888733", "1888743", "1888759", "1888826", + "1889287", + "1889833", "1889942", "1890187", "1890534", @@ -212,30 +608,67 @@ "1890656", "1891059", "1891326", + "1891386", + "1891426", "1891473", "1891493", + "1891494", + "1898286", + "1898544", + "1909398", + "1911112", + "1918868", + "1920496", + "1920712", + "1924494", + "1929270", + "1938214", + "1938810", + "1939432", + "1939677", + "1939680", + "1940807", + "1941377", + "1941437", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", + "1954563", + "1956440", "1956524", "1956599", + "1956710", + "1957266", + "1957300", "1957570", "1957572", "1957816", "1957845", "1957852", + "1957854", "1958024", + "1958323", "1959383", "1959395", + "1959467", + "1959682", "1959914", + "1959919", "1960617", "1961040", + "1961068", + "1961190", "1962204", "1962265", + "1962268", "1962434", "1962516", "1962636", @@ -243,25 +676,39 @@ "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", "1964653", "1964657", "1965166", "1965208", "1965763", "1965777", + "1965795", "1965825", "1965841", "1965913", "1965996", "1966017", "1966351", + "1966886", + "1967011", "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", + "1969954", "1970213", + "1970227", "1970284", + "1971986", "1972120", + "1972185", "1972187", "1972234", "1972250", @@ -270,22 +717,33 @@ "1972449", "1973414", "1973467", + "1975341", "1975546", "1975553", "1975571", + "1975733", + "1975793", "1975897", "1975903", "1976163", "1977003", + "1977007", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", "1978776", + "1978821", "1978977", "1979308", "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", "1982529", @@ -295,29 +753,45 @@ "1982636", "1982671", "1982746", + "1982791", + "1982838", "1982885", + "1983000", + "1983052", "1983170", + "1983260", "1983288", "1983387", "1983441", "1983442", "1983525", "1983548", + "1983558", "1983648", + "1983694", "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984942", + "1984949", "1984954", "1985522", "1986052", "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986452", "1986522", "1986575", "1987527", + "1987578", "1987744", "1988593", "1988881", @@ -325,272 +799,701 @@ "1990066", "1990150", "1990551", + "1991179", "1991371", "1992066", "1992504", + "1993419", + "4299368", + "4302252", + "4302268", "4522322", + "4522795", + "4522922", + "4522933", "4523522", + "4523556", + "4523560", + "4523564", + "4523880", + "4523883", "4523885", "4524054", + "4524070", "4524072", + "4524221", "4524376", "4524393", + "4524403", "4524421", "4524426", "4524636", "4524638", + "4524740", + "4524793", + "4525068", "4525078", + "4525177", + "4525189", + "4525266", + "4525273", + "4525354", + "4525443", "4525500", + "4525505", "4525510", + "4525530", "4525540", "4525547", + "4525562", + "4526048", + "4527339", + "4527342", + "4527972", + "4528539", + "4528593", + "4528658", + "4528692", + "4528694", + "4529064", + "4529248", "4529566", + "4529630", + "4529931", "4530151", + "4530424", + "4530632", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", + "4531968", + "4531975", "4532022", + "4532057", + "4532088", "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", "4532297", "4532357", + "4532405", + "4532408", + "4532412", + "4532471", + "4532500", + "4532508", + "4532516", + "4532532", "4532544", + "4532696", "4532886", "4532888", "4532890", "4533115", + "4533128", "4533136", "4533202", "4533273", "4533360", "4533431", "4533433", + "4533442", + "4533446", + "4533661", "4533671", + "4533714", "4533952", + "4534011", + "4534038", + "4534052", "4534057", "4534166", "4534207", + "4534225", + "4534245", "4534290", "4534299", + "4534389", "4534398", "4534408", + "4534458", "4534463", "4534485", + "4534486", "4534533", "4534538", "4534540", + "4534686", "4534719", + "4534767", + "4534779", + "4534782", "4534872", "4534909", + "4534914", + "4535827", + "5101394", "5101678", "5101745", + "5102287", + "5102931", "5102951", + "5102982", + "5103176", "5103451", + "5103736", "5104442", "5104558", + "5104759", + "5104891", "5105339", + "5109506", + "5109523", + "5109599", + "5109614", "5109821", "5110200", "5110213", + "5110644", "5110670", "5110885", "5111574", "5112155", + "5112254", "5112283", "5112291", + "5112345", + "5112362", "5113036", "5113078", + "5113084", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116416", "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", "5117400", "5118892", + "5118904", "5118996", + "5119143", "5119245", + "5119513", + "5119808", + "5120396", + "5120675", + "5122293", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", "5124007", + "5124029", "5124143", "5124233", + "5124911", "5125689", + "5126052", "5126212", + "5126217", "5126680", + "5130682", + "5131910", + "5134098", + "5135513", + "5141493", + "5141677", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", + "5143944", "5144190", "5144426", "5144534", "5144543", + "5144677", + "5144721", "5145009", "5145136", + "5145269", "5145409", + "5145870", + "5145965", "5146342", "5146379", "5146412", "5146496", + "5146510", "5146559", + "5146611", "5146677", + "5146837", + "5146946", "5146961", + "5147038", + "5147039", "5147062", + "5147171", "5147193", "5147208", + "5147232", "5147245", + "5147478", "5147608", + "5147638", + "5147681", + "5147827", + "5148247", + "5148248", "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", + "5149474", + "5149499", "5149665", "5149746", + "5149768", + "5149839", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769164", + "5769191", "5769272", + "5770913", + "5770942", "5771259", "5771350", "5771982", "5772063", + "5772129", + "5772172", "5772176", + "5772178", + "5772180", + "5772186", "5772196", + "5772199", "5772202", "5772205", + "5772206", "5772210", + "5772269", + "5772309", + "5772349", "5772351", + "5879654", + "5880147", "5880533", "5880545", + "5880550", "5880552", "5880559", "5880563", + "5883985", + "5884571", "5884851", "6097214", + "6097225", + "6097228", "6097236", + "6121184", + "6544687", + "7429212", "7438067", "7443518", "7446048", + "7448174", + "7588222", + "7596232", + "7624468", + "7656811", "7681733", + "7730078", + "7734292", "7752082", + "7753668", + "7762841", "7780930", + "7825213", + "7869346", + "7874258", + "7875265", + "7877231", "7895336", + "7937573", "7940536", "7960566", + "7964262", "7972792", + "7981386", + "7988195", + "7993353", + "8000103", + "8007222", "8015895", + "8049830", + "8073674", + "8086347", + "8094357", "8105817", + "8160782", + "8186212", + "8208583", "8223165", + "8237343", + "8237987", "8262357", + "8292872", + "8313553", "8361848", "8361973", + "8369868", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8424972", + "8532380", "8537359", "8581601", - "9101339" + "8742426", + "8756768", + "8823068", + "8858121", + "8869900", + "9092175", + "9101339", + "9174377", + "9242559", + "9262981", + "9414984", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" ], - "class_count": 490, - "truth_images_in_retained_classes": 45522, - "accepted_predictions_in_retained_classes": 40726, + "class_count": 1205, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.730398334373567, - "precision": 0.6692785107551973, - "recall": 0.730398334373567, - "f1": 0.6442770650899289 + "accuracy": 0.6856229575537315, + "precision": 0.27957925854223936, + "recall": 0.6856229575537315, + "f1": 0.26198818414445213 } }, { - "model": "v2", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", "1732063", "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", "1734453", "1734704", "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", "1737491", + "1737524", + "1737526", + "1737533", "1737542", + "1737552", "1737650", "1737775", "1737776", + "1737847", "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", "1739833", "1739922", + "1739980", + "1739999", "1740005", + "1740069", + "1740116", + "1740174", "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", "1741752", + "1741756", "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", "1743532", + "1743641", + "1743710", + "1743730", + "1743768", "1743775", + "1743828", + "1743862", + "1743867", + "1743898", "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", "1744782", + "1744808", + "1744810", + "1744896", + "1744901", "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", "1746027", + "1746174", "1746440", + "1746613", + "1746666", "1746775", "1746832", + "1746856", "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", "1758878", + "1759055", + "1759069", + "1759079", "1759083", "1759153", + "1759407", + "1759620", + "1759673", + "1759686", "1760104", + "1760246", "1760593", + "1760857", + "1760887", + "1760891", "1761041", + "1761438", + "1761735", + "1761865", "1762244", + "1763072", "1763610", + "1764531", + "1764987", "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", "1766137", "1766210", "1766274", + "1766418", "1766510", + "1766646", + "1766741", + "1766814", "1767597", "1767625", + "1767655", "1768117", + "1768150", "1768341", + "1768702", + "1769057", "1769103", "1769505", + "1769519", "1769566", "1769897", "1769958", "1770150", "1770307", "1770477", + "1770772", "1770880", "1771040", + "1771204", "1771214", + "1771245", + "1771385", + "1771391", "1771509", + "1771531", + "1771650", + "1771678", "1771698", + "1771772", "1772169", "1772179", + "1772793", "1772940", + "1772956", + "1773163", "1773309", + "1773328", + "1775152", "1775891", "1776330", + "1776619", "1776862", "1777253", "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", "1779690", "1780150", + "1780378", + "1781008", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", "1782763", @@ -598,266 +1501,686 @@ "1782841", "1782927", "1782948", + "1783016", + "1783037", "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", "1785286", "1785888", "1785895", + "1786007", "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", "1789267", + "1789481", + "1789553", "1789580", "1789694", "1789695", "1789730", "1789745", + "1789753", "1789783", "1789785", + "1789849", "1789982", "1790002", "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", "1792383", "1792411", + "1792414", "1792418", + "1792426", "1793877", + "1793986", + "1794102", "1794590", "1795215", "1795854", + "1796007", "1796117", "1796145", + "1796169", + "1796217", + "1796463", + "1796668", "1796678", "1797178", "1797258", + "1797276", "1797367", "1797479", "1798346", + "1798372", "1798449", + "1798504", + "1798594", + "1798802", "1798807", + "1798971", "1798974", + "1798984", "1799132", + "1799135", "1799701", "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", + "1814630", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1820406", + "1821856", "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", + "1824113", "1825064", "1825077", + "1825083", "1825156", + "1825176", + "1825539", "1825971", "1825983", "1826022", + "1826033", "1827125", + "1827645", "1828162", "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", "1830937", + "1830962", + "1831002", + "1831128", "1831136", + "1831168", "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", "1835156", + "1835457", "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", "1841261", + "1841296", + "1841616", + "1841675", + "1841813", "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848657", + "1848690", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", "1862580", + "1862719", "1862837", + "1864161", + "1864358", "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", "1870250", + "1870450", + "1870988", + "1871160", "1871252", "1871407", + "1871698", + "1871826", + "1872315", "1872368", "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875633", + "1875827", + "1875865", "1875869", + "1875918", + "1875952", "1876329", + "1876409", "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", "1879252", + "1879452", + "1879630", + "1879655", + "1879735", "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", "1881151", + "1881603", + "1881834", + "1882158", "1882210", + "1882557", + "1882905", "1883161", + "1883386", "1884212", "1884255", "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886320", "1886579", "1886587", "1887108", + "1887173", "1887290", + "1887701", + "1888579", + "1888733", "1888743", "1888759", "1888826", + "1889833", "1889942", "1890187", "1890534", "1890576", + "1890656", + "1890703", + "1890772", "1891059", "1891326", + "1891386", + "1891426", "1891473", "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", + "1954563", + "1956440", "1956524", "1956599", + "1957266", + "1957300", "1957570", "1957572", + "1957632", "1957816", "1957845", "1957852", "1958024", + "1958323", "1959383", "1959395", + "1959467", "1959914", + "1959919", "1960617", "1961040", + "1961068", + "1961190", "1962204", "1962265", + "1962268", "1962434", "1962516", "1962636", + "1962860", "1962990", "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", "1964653", "1964657", "1965166", "1965208", + "1965345", "1965763", "1965777", + "1965795", + "1965810", "1965825", "1965841", "1965913", "1965996", "1966017", "1966351", + "1966886", + "1967011", "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", + "1969291", + "1969954", "1970213", + "1970227", "1970284", + "1971888", "1972120", + "1972185", "1972187", "1972234", "1972250", + "1972278", "1972342", + "1972377", "1972434", "1972449", "1973414", "1973467", + "1975341", "1975546", "1975553", "1975571", + "1975793", "1975897", "1975903", "1976163", "1977003", + "1977007", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", "1978776", + "1978821", "1978977", "1979308", "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", "1982592", "1982636", "1982671", "1982746", + "1982791", + "1982838", "1982885", + "1983000", + "1983170", + "1983260", + "1983288", "1983387", "1983441", "1983442", "1983525", "1983548", + "1983558", "1983648", + "1983694", "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984734", + "1984942", "1984954", "1985522", "1986052", "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986367", + "1986452", "1986522", "1986575", "1987527", "1987744", "1988593", + "1988602", + "1988684", "1988881", "1989428", "1990066", "1990150", "1990551", + "1991179", "1991371", "1992066", "1992504", + "1993419", + "4299576", + "4302252", + "4302268", "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", "4523885", "4524054", "4524072", + "4524221", "4524376", "4524393", + "4524403", "4524421", "4524426", "4524636", "4524638", + "4524740", + "4524793", + "4524951", + "4525068", "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", "4525500", + "4525505", "4525510", + "4525530", "4525540", "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", "4529566", + "4529630", + "4530002", "4530151", + "4530424", + "4531158", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", + "4531713", + "4531968", + "4531975", "4532022", + "4532050", + "4532057", "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", "4532297", "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", "4532544", + "4532696", + "4532811", "4532886", "4532888", "4532890", @@ -866,209 +2189,572 @@ "4533202", "4533273", "4533360", + "4533431", "4533433", + "4533442", + "4533446", + "4533661", "4533671", + "4533714", "4533952", + "4534011", + "4534038", + "4534052", "4534057", "4534166", "4534207", + "4534225", "4534290", "4534299", + "4534389", "4534398", + "4534408", + "4534458", "4534463", "4534485", "4534533", "4534538", "4534540", + "4534686", "4534719", + "4534767", "4534872", "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", "5101678", "5101745", + "5102628", "5102951", + "5102982", + "5103066", + "5103121", + "5103185", "5103451", + "5103736", + "5103998", + "5104056", "5104442", "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", "5105339", + "5109506", + "5109523", + "5109661", "5109821", "5110200", "5110213", + "5110644", "5110670", "5110885", "5111574", "5112155", + "5112254", "5112283", "5112291", + "5112336", + "5112345", + "5112362", "5113036", "5113078", + "5113084", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116416", "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", "5117400", "5118892", + "5118904", "5118996", + "5119143", "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", "5124007", + "5124029", "5124143", "5124233", + "5124911", "5125689", + "5126052", "5126212", + "5126217", + "5126675", "5126680", + "5134667", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", + "5143944", + "5143947", "5144190", "5144426", "5144534", "5144543", + "5144677", + "5144721", "5145009", + "5145136", + "5145186", + "5145269", "5145409", + "5145965", "5146342", "5146379", "5146412", "5146496", + "5146510", "5146559", + "5146611", + "5146659", "5146677", + "5146837", + "5146883", + "5146946", "5146961", + "5147038", + "5147039", "5147062", + "5147150", + "5147171", "5147193", "5147208", + "5147232", "5147245", + "5147478", "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", + "5149474", "5149665", "5149746", + "5149820", + "5149836", + "5149839", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769164", + "5769191", "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", "5771259", "5771350", + "5771357", "5771982", "5772063", + "5772129", "5772176", + "5772178", + "5772186", "5772196", "5772202", "5772205", + "5772206", "5772210", + "5772269", + "5772349", "5772351", + "5804895", + "5879654", + "5880147", + "5880512", "5880533", "5880545", + "5880550", "5880552", "5880559", "5880563", + "5883985", + "5884571", "5884851", + "5976947", "6097214", + "6097225", + "6097228", + "6097234", "6097236", + "6121184", + "6544687", + "7429212", "7438067", "7443518", "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", "7681733", + "7725644", + "7730078", + "7734292", "7752082", + "7753668", + "7761138", "7780930", + "7825213", + "7874258", + "7875265", + "7877231", "7895336", + "7921916", + "7937573", "7940536", "7960566", + "7964262", "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", "8015895", + "8049830", + "8086347", + "8094357", "8105817", + "8186212", + "8200050", + "8208583", "8223165", + "8237343", + "8237987", + "8244266", + "8253467", "8262357", + "8292872", + "8313553", + "8329661", + "8345820", "8361848", "8361973", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8424972", + "8532380", "8537359", "8581601", - "9101339" + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" ], - "class_count": 479, - "truth_images_in_retained_classes": 45499, - "accepted_predictions_in_retained_classes": 40683, + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7445619704447763, - "precision": 0.6838130903341267, - "recall": 0.7445619704447763, - "f1": 0.6579127480970971 + "accuracy": 0.7135646156794592, + "precision": 0.2688723997356786, + "recall": 0.7135646156794592, + "f1": 0.2592869317361528 } }, { - "model": "torch", + "model": "onnx", "scope": "zero", "rank": "species", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", "1732063", "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", "1734453", "1734704", "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", "1737491", + "1737524", + "1737526", + "1737533", "1737542", + "1737552", "1737650", "1737775", "1737776", "1737847", "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", "1739833", "1739922", + "1739980", + "1739999", "1740005", "1740069", + "1740116", + "1740174", "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", "1741752", + "1741756", "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", "1743532", + "1743641", + "1743710", + "1743730", + "1743768", "1743775", + "1743828", + "1743862", + "1743867", + "1743898", "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", "1744782", + "1744808", + "1744810", + "1744896", + "1744901", "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", "1746027", + "1746174", "1746440", + "1746613", + "1746666", "1746775", "1746832", + "1746856", "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", "1758878", + "1759055", "1759069", + "1759079", "1759083", "1759153", + "1759407", + "1759620", + "1759673", + "1759686", "1760104", + "1760246", "1760593", + "1760857", + "1760887", + "1760891", "1761041", + "1761438", + "1761735", + "1761865", "1762244", + "1763072", "1763610", + "1764531", + "1764987", "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", "1766137", "1766210", "1766274", + "1766418", "1766510", + "1766646", + "1766741", + "1766814", "1767597", "1767625", + "1767655", "1768117", + "1768150", "1768341", + "1768702", + "1769057", "1769103", "1769505", + "1769519", "1769566", "1769897", "1769958", @@ -1078,22 +2764,45 @@ "1770772", "1770880", "1771040", + "1771204", "1771214", + "1771245", + "1771385", + "1771391", "1771509", + "1771531", + "1771650", + "1771678", "1771698", + "1771772", "1772169", "1772179", + "1772793", "1772940", + "1772956", + "1773163", "1773309", + "1773328", + "1775152", "1775891", "1776330", + "1776619", "1776862", "1777253", "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", "1779690", "1780150", + "1780378", + "1781008", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", "1782763", @@ -1101,213 +2810,543 @@ "1782841", "1782927", "1782948", + "1783016", "1783037", "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", "1785286", "1785888", "1785895", + "1786007", "1786902", + "1787064", "1787112", + "1787267", + "1787400", + "1787504", + "1787590", "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", "1789267", + "1789481", + "1789553", "1789580", "1789694", "1789695", "1789730", "1789745", + "1789753", "1789783", "1789785", + "1789849", "1789982", "1790002", "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", "1792383", "1792411", + "1792414", "1792418", + "1792426", "1793877", + "1793986", + "1794102", "1794590", "1795215", "1795854", + "1796007", "1796117", "1796145", "1796169", + "1796217", + "1796463", + "1796668", "1796678", "1797178", "1797258", + "1797276", "1797367", "1797479", "1798346", + "1798372", "1798449", + "1798504", + "1798594", + "1798802", "1798807", + "1798971", "1798974", + "1798984", "1799132", + "1799135", "1799701", "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", + "1814630", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1820406", + "1821856", "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", + "1824113", "1825064", "1825077", + "1825083", "1825156", + "1825176", + "1825539", "1825971", "1825983", "1826022", + "1826033", "1827125", + "1827645", "1828162", "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", "1830937", "1830962", + "1831002", + "1831128", "1831136", + "1831168", "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", "1835156", + "1835457", "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", "1841261", + "1841296", + "1841616", + "1841675", + "1841813", "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848636", + "1848657", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", "1862580", + "1862719", "1862837", + "1864161", + "1864358", "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", "1870250", + "1870450", + "1870988", + "1871160", "1871252", "1871407", + "1871698", + "1871826", + "1872315", "1872368", "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875633", + "1875827", + "1875865", "1875869", + "1875918", + "1875952", "1876329", + "1876409", "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", "1879252", + "1879452", + "1879630", + "1879655", + "1879735", "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", "1881151", + "1881603", + "1881834", + "1882158", "1882210", + "1882557", + "1882905", "1883161", + "1883386", "1884212", "1884255", "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886320", "1886579", "1886587", "1887108", + "1887173", "1887290", + "1887701", + "1888579", + "1888733", "1888743", "1888759", "1888826", + "1889833", "1889942", "1890187", "1890534", "1890576", + "1890656", + "1890703", + "1890772", "1891059", "1891326", + "1891386", + "1891426", "1891473", "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", + "1954563", "1956440", "1956524", "1956599", + "1957266", + "1957300", "1957570", "1957572", + "1957632", "1957816", "1957845", "1957852", "1958024", + "1958323", "1959383", "1959395", + "1959467", "1959914", + "1959919", "1960617", "1961040", + "1961068", + "1961190", "1962204", "1962265", + "1962268", "1962434", "1962516", "1962636", + "1962860", "1962990", "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", "1964653", "1964657", "1965166", "1965208", + "1965345", "1965763", "1965777", + "1965795", + "1965810", "1965825", "1965841", "1965913", "1965996", "1966017", "1966351", + "1966886", + "1967011", "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", + "1969291", + "1969954", "1970213", + "1970227", "1970284", + "1971888", "1972120", + "1972185", "1972187", "1972234", "1972250", + "1972278", "1972342", + "1972377", "1972434", "1972449", "1973414", "1973467", + "1975341", "1975546", "1975553", "1975571", + "1975793", "1975897", "1975903", "1976163", "1977003", + "1977007", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", "1978776", + "1978821", "1978977", "1979308", "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", "1982592", "1982636", "1982671", "1982746", + "1982791", + "1982838", "1982885", + "1983000", "1983170", "1983260", "1983288", @@ -1316,61 +3355,141 @@ "1983442", "1983525", "1983548", + "1983558", "1983648", + "1983694", "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984734", + "1984942", "1984954", "1985522", "1986052", "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986367", + "1986452", "1986522", "1986575", "1987527", "1987744", "1988593", + "1988602", + "1988684", "1988881", "1989428", "1990066", "1990150", "1990551", + "1991179", "1991371", "1992066", "1992504", + "1993419", + "4299576", + "4302252", + "4302268", "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", "4523885", "4524054", "4524072", + "4524221", "4524376", "4524393", + "4524403", "4524421", "4524426", "4524636", "4524638", + "4524740", + "4524793", + "4524951", + "4525068", "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", "4525500", + "4525505", "4525510", "4525530", "4525540", "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", "4529566", + "4529630", + "4530002", "4530151", + "4530424", + "4531158", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", + "4531713", + "4531968", + "4531975", "4532022", + "4532050", + "4532057", "4532095", + "4532122", + "4532160", + "4532239", "4532253", + "4532293", "4532297", "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", "4532544", + "4532696", + "4532811", "4532886", "4532888", "4532890", @@ -1379,206 +3498,546 @@ "4533202", "4533273", "4533360", + "4533431", "4533433", + "4533442", + "4533446", + "4533661", "4533671", + "4533714", "4533952", + "4534011", + "4534038", + "4534052", "4534057", "4534166", "4534207", + "4534225", "4534290", "4534299", + "4534389", "4534398", "4534408", + "4534458", "4534463", "4534485", "4534533", "4534538", "4534540", + "4534686", "4534719", + "4534767", "4534872", "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", "5101678", "5101745", + "5102628", "5102951", + "5102982", + "5103066", + "5103121", + "5103185", "5103451", + "5103736", + "5103998", + "5104056", "5104442", "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", "5105339", + "5109506", + "5109523", + "5109661", "5109821", "5110200", "5110213", + "5110644", "5110670", "5110885", "5111574", "5112155", + "5112254", "5112283", "5112291", + "5112336", + "5112345", + "5112362", "5113036", "5113078", + "5113084", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116416", "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", "5117400", "5118892", + "5118904", "5118996", + "5119143", "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", "5124007", + "5124029", "5124143", "5124233", + "5124911", "5125689", + "5126052", "5126212", + "5126217", + "5126675", "5126680", + "5134667", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", + "5143944", + "5143947", "5144190", "5144426", "5144534", "5144543", + "5144677", + "5144721", "5145009", + "5145136", + "5145186", + "5145269", "5145409", + "5145965", "5146342", "5146379", "5146412", "5146496", + "5146510", "5146559", + "5146611", + "5146659", "5146677", + "5146837", + "5146883", + "5146946", "5146961", + "5147038", "5147039", "5147062", + "5147150", + "5147171", "5147193", "5147208", + "5147232", "5147245", + "5147478", "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", + "5149474", "5149665", "5149746", + "5149820", + "5149836", + "5149839", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769164", + "5769191", "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", "5771259", "5771350", + "5771357", "5771982", "5772063", + "5772129", "5772176", + "5772178", + "5772186", "5772196", "5772202", "5772205", + "5772206", "5772210", + "5772269", + "5772349", "5772351", + "5804895", + "5879654", + "5880147", + "5880512", "5880533", "5880545", + "5880550", "5880552", "5880559", "5880563", + "5883985", + "5884571", "5884851", + "5976947", "6097214", + "6097225", + "6097228", + "6097234", "6097236", + "6121184", + "6544687", + "7429212", "7438067", "7443518", "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", "7681733", + "7725644", + "7730078", + "7734292", "7752082", + "7753668", + "7761138", "7780930", + "7825213", + "7874258", + "7875265", + "7877231", "7895336", + "7921916", + "7937573", "7940536", "7960566", + "7964262", "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", "8015895", + "8049830", + "8086347", + "8094357", "8105817", + "8186212", + "8200050", + "8208583", "8223165", + "8237343", + "8237987", + "8244266", + "8253467", "8262357", + "8292872", + "8313553", + "8329661", + "8345820", "8361848", "8361973", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8424972", + "8532380", "8537359", "8581601", - "9101339" + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" ], - "class_count": 495, - "truth_images_in_retained_classes": 45527, - "accepted_predictions_in_retained_classes": 41183, + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7524863219892478, - "precision": 0.6854888251847001, - "recall": 0.7524863219892478, - "f1": 0.6751936464806082 + "accuracy": 0.7133861511997317, + "precision": 0.26894112842009715, + "recall": 0.7133861511997317, + "f1": 0.2593624046134099 } }, { - "model": "torch", + "model": "torch-tta", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "10055273", + "10113008", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", "1732063", "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", "1734453", "1734704", "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", "1737491", + "1737524", + "1737533", "1737542", + "1737552", "1737650", "1737775", "1737776", + "1737847", "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", "1739833", "1739922", + "1739999", "1740005", + "1740069", + "1740116", + "1740183", "1740185", + "1740374", + "1740482", + "1740623", + "1741147", "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", "1741752", + "1741756", "1742142", + "1742263", + "1743196", + "1743475", "1743532", + "1743641", + "1743710", "1743775", + "1743828", + "1743862", "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", "1744782", + "1744808", + "1744810", "1745079", + "1745558", + "1745634", + "1745737", "1746027", + "1746174", "1746440", + "1746613", + "1746666", "1746775", "1746832", + "1746856", "1746876", + "1746910", + "1748203", + "1748321", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", "1758878", + "1759055", + "1759069", + "1759079", "1759083", "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", "1760104", + "1760246", "1760593", + "1760857", + "1760887", + "1760891", "1761041", + "1761111", + "1761438", + "1761735", + "1761865", "1762244", + "1763072", "1763610", + "1764531", + "1764987", "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", "1766137", "1766210", "1766274", + "1766410", + "1766418", "1766510", + "1766646", + "1766741", + "1766814", "1767597", "1767625", + "1767655", "1768117", + "1768150", "1768341", + "1768702", + "1769057", "1769103", "1769505", "1769566", @@ -1587,24 +4046,43 @@ "1770150", "1770307", "1770477", + "1770772", "1770880", "1771040", "1771214", + "1771245", + "1771385", + "1771391", "1771509", + "1771531", + "1771678", "1771698", + "1771772", "1772169", "1772179", + "1772793", "1772940", + "1772956", "1773309", + "1773328", + "1775152", "1775891", "1776330", + "1776619", "1776862", "1777253", "1778074", + "1778143", + "1778517", + "1778596", + "1779435", "1779690", "1780150", + "1780378", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", "1782763", @@ -1612,184 +4090,460 @@ "1782841", "1782927", "1782948", + "1783016", + "1783037", "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", "1785286", "1785888", "1785895", + "1786007", "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", "1789267", + "1789481", + "1789553", "1789580", "1789694", "1789695", "1789730", "1789745", + "1789753", + "1789755", "1789783", "1789785", + "1789849", "1789982", "1790002", "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", "1791422", + "1791784", + "1792061", + "1792379", "1792383", "1792411", "1792418", "1793877", + "1793986", + "1794102", "1794590", "1795215", "1795854", + "1796007", "1796117", "1796145", + "1796169", + "1796463", + "1796668", "1796678", "1797178", "1797258", + "1797276", "1797367", "1797479", "1798346", + "1798372", "1798449", + "1798504", + "1798594", + "1798802", "1798807", + "1798971", "1798974", "1799132", + "1799135", "1799701", "1799708", + "1799799", "1800004", "1800032", + "1801051", "1801896", "1802280", "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1820406", + "1821856", "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", + "1824113", "1825064", "1825077", + "1825083", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1826033", "1827125", + "1827645", "1828162", "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", "1830937", + "1830962", "1831136", + "1831168", "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", "1835156", + "1835433", + "1835456", + "1835457", "1836899", + "1837172", + "1837420", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841159", "1841261", + "1841296", + "1841675", + "1841813", "1845270", + "1845368", + "1845962", + "1845965", + "1846111", + "1846159", + "1846236", + "1846729", "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", "1862580", "1862837", + "1864161", "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", "1870250", + "1870450", + "1870988", + "1871160", "1871252", "1871407", + "1871698", + "1872315", "1872368", "1872901", + "1873079", + "1873411", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875865", "1875869", + "1875918", "1876329", + "1876409", "1876542", + "1877941", + "1877988", + "1878470", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", "1879252", + "1879452", + "1879735", "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", "1881151", + "1881834", + "1882158", "1882210", + "1882557", + "1882905", "1883161", + "1883386", "1884212", "1884255", "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", "1886579", "1886587", "1887108", + "1887173", "1887290", + "1887701", + "1888579", + "1888733", "1888743", "1888759", "1888826", + "1889833", "1889942", "1890187", "1890534", "1890576", + "1890656", + "1890703", + "1890772", "1891059", "1891326", + "1891386", + "1891426", "1891473", "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", + "1956440", "1956524", "1956599", + "1957266", + "1957300", "1957570", "1957572", + "1957632", + "1957718", "1957816", "1957845", "1957852", "1958024", + "1958323", "1959383", "1959395", "1959914", + "1959919", "1960617", "1961040", + "1961068", + "1961190", "1962204", "1962265", + "1962268", "1962434", "1962516", "1962636", + "1962860", "1962990", "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", "1964653", "1964657", "1965166", "1965208", "1965763", "1965777", + "1965795", "1965825", "1965841", "1965913", "1965996", "1966017", "1966351", + "1966886", + "1967011", "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", + "1969291", "1970213", + "1970227", "1970284", + "1971858", + "1971888", "1972120", + "1972185", "1972187", "1972234", "1972250", + "1972278", "1972342", "1972434", "1972449", "1973414", "1973467", + "1975341", "1975546", "1975553", "1975571", @@ -1797,81 +4551,166 @@ "1975903", "1976163", "1977003", + "1977007", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", "1978776", + "1978821", "1978977", "1979308", "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", "1982592", "1982636", "1982671", "1982746", + "1982791", + "1982838", "1982885", + "1983000", + "1983170", + "1983260", + "1983288", "1983387", "1983441", "1983442", "1983525", "1983548", + "1983558", "1983648", + "1983694", "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984734", + "1984942", "1984954", "1985522", "1986052", "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986367", + "1986452", "1986522", "1986575", "1987527", "1987744", "1988593", + "1988602", + "1988684", "1988881", "1989428", "1990066", "1990150", "1990551", + "1991179", "1991371", "1992066", "1992504", + "1993419", + "4302252", + "4302268", "4522322", + "4522795", + "4522916", + "4522922", "4523522", + "4523560", + "4523725", + "4523880", + "4523883", "4523885", "4524054", + "4524070", "4524072", "4524376", "4524393", + "4524403", "4524421", "4524426", "4524636", "4524638", + "4524740", + "4524793", + "4524890", "4525078", + "4525189", + "4525354", + "4525420", + "4525425", "4525500", + "4525505", "4525510", + "4525530", "4525540", "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", "4529566", + "4529630", + "4530002", "4530151", + "4530424", + "4531145", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", + "4531968", + "4531975", "4532022", + "4532050", + "4532057", "4532095", + "4532122", + "4532239", + "4532253", + "4532293", "4532297", "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", "4532544", + "4532696", + "4532811", "4532886", "4532888", "4532890", @@ -1880,207 +4719,521 @@ "4533202", "4533273", "4533360", + "4533431", "4533433", + "4533442", + "4533446", + "4533661", "4533671", "4533952", + "4534038", + "4534052", "4534057", "4534166", "4534207", + "4534225", "4534290", "4534299", + "4534389", "4534398", + "4534408", + "4534458", "4534463", "4534485", "4534533", "4534538", "4534540", + "4534686", "4534719", + "4534762", + "4534767", "4534872", "4534909", + "4534914", + "4535817", + "4535827", + "4536483", "5101678", "5101745", "5102951", + "5102982", + "5103066", + "5103121", "5103451", + "5103736", + "5104056", "5104442", "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", "5105339", + "5109523", + "5109661", "5109821", "5110200", "5110213", + "5110644", "5110670", + "5110871", "5110885", "5111574", "5112155", + "5112254", "5112283", "5112291", + "5112336", + "5112345", + "5112362", "5113036", "5113078", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116416", "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", "5117400", "5118892", + "5118904", "5118996", + "5119143", "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", "5124007", + "5124029", "5124143", "5124233", + "5124911", "5125689", "5126212", + "5126217", + "5126675", "5126680", + "5134667", + "5141501", + "5141677", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", + "5143944", + "5143947", "5144190", "5144426", "5144534", "5144543", + "5144677", + "5144721", "5145009", + "5145136", + "5145186", + "5145269", "5145409", + "5145965", "5146342", "5146379", "5146412", "5146496", + "5146510", "5146559", "5146677", + "5146837", + "5146883", + "5146946", "5146961", + "5147038", + "5147039", "5147062", + "5147150", + "5147171", "5147193", "5147208", + "5147232", "5147245", + "5147478", "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", + "5149474", + "5149499", "5149665", "5149746", + "5149820", + "5149839", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769191", "5769272", + "5769709", + "5770913", + "5770942", "5771259", "5771350", + "5771357", "5771982", "5772063", + "5772129", "5772176", + "5772178", + "5772186", "5772196", "5772202", "5772205", + "5772206", "5772210", + "5772269", + "5772349", "5772351", + "5804895", + "5879654", + "5880512", "5880533", "5880545", + "5880550", "5880552", "5880559", "5880563", + "5883985", + "5884571", "5884851", "6097214", + "6097225", + "6097228", + "6097234", "6097236", + "6121184", + "6544687", + "7429212", "7438067", "7443518", "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", "7681733", + "7730078", + "7734292", "7752082", + "7753668", "7780930", + "7825213", + "7874258", + "7875265", + "7877231", "7895336", + "7921916", + "7937573", "7940536", "7960566", "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", "8015895", + "8049830", + "8086347", + "8094357", "8105817", + "8186212", + "8208583", "8223165", + "8237343", + "8237987", + "8244266", + "8253467", "8262357", + "8273859", + "8292872", + "8313553", "8361848", "8361973", + "8369868", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8532380", "8537359", "8581601", - "9101339" + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" ], - "class_count": 479, - "truth_images_in_retained_classes": 45499, - "accepted_predictions_in_retained_classes": 41145, + "class_count": 1177, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.768226992452354, - "precision": 0.7029581805144605, - "recall": 0.768226992452354, - "f1": 0.6921799339065436 + "accuracy": 0.7405864004487995, + "precision": 0.3117281910150928, + "recall": 0.7405864004487995, + "f1": 0.3001398043754674 } }, { - "model": "onnx", + "model": "onnx-tta", "scope": "zero", "rank": "species", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "10055273", + "10113008", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", "1732063", "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", "1734453", "1734704", "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", "1737491", + "1737524", + "1737533", "1737542", + "1737552", "1737650", "1737775", "1737776", "1737847", "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", "1739833", "1739922", + "1739999", "1740005", "1740069", + "1740116", + "1740183", "1740185", + "1740374", + "1740482", + "1740623", + "1741147", "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", "1741752", + "1741756", "1742142", + "1742263", + "1743196", + "1743475", "1743532", + "1743641", + "1743710", "1743775", + "1743828", + "1743862", "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", "1744782", + "1744808", + "1744810", "1745079", + "1745558", + "1745634", + "1745737", "1746027", + "1746174", "1746440", + "1746613", + "1746666", "1746775", "1746832", + "1746856", "1746876", + "1746910", + "1748203", + "1748321", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", "1758878", + "1759055", "1759069", + "1759079", "1759083", "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", "1760104", + "1760246", "1760593", + "1760857", + "1760887", + "1760891", "1761041", + "1761111", + "1761438", + "1761735", + "1761865", "1762244", + "1763072", "1763610", + "1764531", + "1764987", "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", "1766137", "1766210", "1766274", + "1766418", "1766510", + "1766646", + "1766741", + "1766814", "1767597", "1767625", + "1767655", "1768117", + "1768150", "1768341", + "1768702", + "1769057", "1769103", "1769505", "1769566", @@ -2093,21 +5246,39 @@ "1770880", "1771040", "1771214", + "1771245", + "1771385", + "1771391", "1771509", + "1771531", + "1771678", "1771698", + "1771772", "1772169", "1772179", + "1772793", "1772940", + "1772956", "1773309", + "1773328", + "1775152", "1775891", "1776330", + "1776619", "1776862", "1777253", "1778074", + "1778143", + "1778517", + "1778596", + "1779435", "1779690", "1780150", + "1780378", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", "1782763", @@ -2115,189 +5286,459 @@ "1782841", "1782927", "1782948", + "1783016", "1783037", "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", "1785286", "1785888", "1785895", + "1786007", "1786902", + "1787064", "1787112", + "1787267", + "1787400", + "1787504", + "1787590", "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", "1789267", + "1789481", + "1789553", "1789580", "1789694", "1789695", "1789730", "1789745", + "1789753", + "1789755", "1789783", "1789785", + "1789849", "1789982", "1790002", "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", "1791422", + "1791784", + "1792061", + "1792379", "1792383", "1792411", "1792418", "1793877", + "1793986", + "1794102", "1794590", "1795215", "1795854", + "1796007", "1796117", "1796145", "1796169", + "1796463", + "1796668", "1796678", "1797178", "1797258", + "1797276", "1797367", "1797479", "1798346", + "1798372", "1798449", + "1798504", + "1798594", + "1798802", "1798807", + "1798971", "1798974", "1799132", + "1799135", "1799701", "1799708", + "1799799", "1800004", "1800032", + "1801051", "1801896", "1802280", "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1820406", + "1821856", "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", + "1824113", "1825064", "1825077", + "1825083", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1826033", "1827125", + "1827645", "1828162", "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", "1830937", "1830962", "1831136", + "1831168", "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", "1835156", + "1835433", + "1835456", + "1835457", "1836899", + "1837172", + "1837420", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841159", "1841261", + "1841296", + "1841675", + "1841813", "1845270", + "1845368", + "1845962", + "1845965", + "1846111", + "1846159", + "1846236", + "1846729", "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", "1862580", "1862837", + "1864161", "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", "1870250", + "1870450", + "1870988", + "1871160", "1871252", "1871407", + "1871698", + "1872315", "1872368", "1872901", + "1873079", + "1873411", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875865", "1875869", + "1875918", "1876329", + "1876409", "1876542", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", "1879252", + "1879452", + "1879735", "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", "1881151", + "1881834", + "1882158", "1882210", + "1882557", + "1882905", "1883161", + "1883386", "1884212", "1884255", "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", "1886579", "1886587", "1887108", + "1887173", "1887290", + "1887701", + "1888579", + "1888733", "1888743", "1888759", "1888826", + "1889833", "1889942", "1890187", "1890534", "1890576", + "1890656", + "1890703", + "1890772", "1891059", "1891326", + "1891386", + "1891426", "1891473", "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", "1956440", "1956524", "1956599", + "1957266", + "1957300", "1957570", "1957572", + "1957632", + "1957718", "1957816", "1957845", "1957852", "1958024", + "1958323", "1959383", "1959395", "1959914", + "1959919", "1960617", "1961040", + "1961068", + "1961190", "1962204", "1962265", + "1962268", "1962434", "1962516", "1962636", + "1962860", "1962990", "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", "1964653", "1964657", "1965166", "1965208", "1965763", "1965777", + "1965795", "1965825", "1965841", "1965913", "1965996", "1966017", "1966351", + "1966886", + "1967011", "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", + "1969291", "1970213", + "1970227", "1970284", + "1971858", + "1971888", "1972120", + "1972185", "1972187", "1972234", "1972250", + "1972278", "1972342", "1972434", "1972449", "1973414", "1973467", + "1975341", "1975546", "1975553", "1975571", @@ -2305,23 +5746,36 @@ "1975903", "1976163", "1977003", + "1977007", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", "1978776", + "1978821", "1978977", "1979308", "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", "1982592", "1982636", "1982671", "1982746", + "1982791", + "1982838", "1982885", + "1983000", "1983170", "1983260", "1983288", @@ -2330,61 +5784,128 @@ "1983442", "1983525", "1983548", + "1983558", "1983648", + "1983694", "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984734", + "1984942", "1984954", "1985522", "1986052", "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986367", + "1986452", "1986522", "1986575", "1987527", "1987744", "1988593", + "1988602", + "1988684", "1988881", "1989428", "1990066", "1990150", "1990551", + "1991179", "1991371", "1992066", "1992504", + "1993419", + "4302252", + "4302268", "4522322", + "4522795", + "4522916", + "4522922", "4523522", + "4523560", + "4523725", + "4523880", + "4523883", "4523885", "4524054", + "4524070", "4524072", "4524376", "4524393", + "4524403", "4524421", "4524426", "4524636", "4524638", + "4524740", + "4524793", + "4524890", "4525078", + "4525189", + "4525354", + "4525420", + "4525425", "4525500", + "4525505", "4525510", "4525530", "4525540", "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", "4529566", + "4529630", + "4530002", "4530151", + "4530424", + "4531145", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", + "4531968", + "4531975", "4532022", + "4532050", + "4532057", "4532095", + "4532122", + "4532239", "4532253", + "4532293", "4532297", "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", "4532544", + "4532696", + "4532811", "4532886", "4532888", "4532890", @@ -2393,185 +5914,346 @@ "4533202", "4533273", "4533360", + "4533431", "4533433", + "4533442", + "4533446", + "4533661", "4533671", "4533952", + "4534038", + "4534052", "4534057", "4534166", "4534207", + "4534225", "4534290", "4534299", + "4534389", "4534398", "4534408", + "4534458", "4534463", "4534485", "4534533", "4534538", "4534540", + "4534686", "4534719", + "4534762", + "4534767", "4534872", "4534909", + "4534914", + "4535817", + "4535827", + "4536483", "5101678", "5101745", "5102951", + "5102982", + "5103066", + "5103121", "5103451", + "5103736", + "5104056", "5104442", "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", "5105339", + "5109523", + "5109661", "5109821", "5110200", "5110213", + "5110644", "5110670", + "5110871", "5110885", "5111574", "5112155", + "5112254", "5112283", "5112291", + "5112336", + "5112345", + "5112362", "5113036", "5113078", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116416", "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", "5117400", "5118892", + "5118904", "5118996", + "5119143", "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", "5124007", + "5124029", "5124143", "5124233", + "5124911", "5125689", "5126212", + "5126217", + "5126675", "5126680", + "5134667", + "5141501", + "5141677", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", + "5143944", + "5143947", "5144190", "5144426", "5144534", "5144543", + "5144677", + "5144721", "5145009", + "5145136", + "5145186", + "5145269", "5145409", + "5145965", "5146342", "5146379", "5146412", "5146496", + "5146510", "5146559", "5146677", + "5146837", + "5146883", + "5146946", "5146961", + "5147038", "5147039", "5147062", + "5147150", + "5147171", "5147193", "5147208", + "5147232", "5147245", + "5147478", "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", + "5149474", + "5149499", "5149665", "5149746", + "5149820", + "5149839", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769191", "5769272", + "5769709", + "5770913", + "5770942", "5771259", "5771350", + "5771357", "5771982", "5772063", + "5772129", "5772176", + "5772178", + "5772186", "5772196", "5772202", "5772205", + "5772206", "5772210", + "5772269", + "5772349", "5772351", + "5804895", + "5879654", + "5880512", "5880533", "5880545", + "5880550", "5880552", "5880559", "5880563", + "5883985", + "5884571", "5884851", "6097214", + "6097225", + "6097228", + "6097234", "6097236", + "6121184", + "6544687", + "7429212", "7438067", "7443518", "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", "7681733", + "7730078", + "7734292", "7752082", + "7753668", "7780930", + "7825213", + "7874258", + "7875265", + "7877231", "7895336", + "7921916", + "7937573", "7940536", "7960566", "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", "8015895", + "8049830", + "8086347", + "8094357", "8105817", + "8186212", + "8208583", "8223165", + "8237343", + "8237987", + "8244266", "8262357", + "8273859", + "8292872", + "8313553", "8361848", "8361973", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8532380", "8537359", "8581601", - "9101339" + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" ], - "class_count": 495, - "truth_images_in_retained_classes": 45527, - "accepted_predictions_in_retained_classes": 41196, + "class_count": 1173, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7522981230833534, - "precision": 0.6856640486185108, - "recall": 0.7522981230833534, - "f1": 0.6753901809023951 + "accuracy": 0.7408884646998294, + "precision": 0.3129592874854788, + "recall": 0.7408884646998294, + "f1": 0.30114949302373306 } }, { - "model": "onnx", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "common", + "cutoff": 5, + "domain": "per_model", "classes": [ - "11478679", "1732063", "1732416", "1734453", "1734704", - "1734826", "1737491", "1737542", - "1737650", "1737775", - "1737776", - "1738050", - "1739833", "1739922", - "1740005", - "1740185", "1741341", - "1741752", "1742142", "1743532", - "1743775", - "1744071", "1744782", - "1745079", - "1746027", "1746440", "1746775", "1746832", @@ -2580,25 +6262,16 @@ "1759083", "1759153", "1760104", - "1760593", "1761041", "1762244", "1763610", "1765011", "1766137", - "1766210", "1766274", - "1766510", "1767597", - "1767625", - "1768117", - "1768341", "1769103", - "1769505", "1769566", "1769897", - "1769958", - "1770150", "1770307", "1770477", "1770880", @@ -2608,22 +6281,12 @@ "1771698", "1772169", "1772179", - "1772940", - "1773309", - "1775891", - "1776330", - "1776862", "1777253", "1778074", - "1779690", "1780150", - "1781694", - "1782560", "1782672", - "1782726", "1782763", "1782777", - "1782841", "1782927", "1782948", "1783043", @@ -2633,43 +6296,26 @@ "1786902", "1787610", "1789267", - "1789580", - "1789694", "1789695", "1789730", "1789745", - "1789783", "1789785", - "1789982", - "1790002", - "1790072", "1791422", "1792383", "1792411", "1792418", - "1793877", "1794590", "1795215", - "1795854", - "1796117", "1796145", "1796678", - "1797178", "1797258", - "1797367", "1797479", - "1798346", - "1798449", "1798807", - "1798974", "1799132", - "1799701", - "1799708", "1800004", "1800032", "1801896", "1802280", - "1803012", "1803073", "1804071", "1804906", @@ -2684,10 +6330,8 @@ "1822346", "1822587", "1822610", - "1822613", "1822796", "1822819", - "1822830", "1823726", "1825064", "1825077", @@ -2700,78 +6344,51 @@ "1828637", "1830410", "1830937", - "1831136", - "1831643", "1835156", - "1836899", - "1839893", "1841261", "1845270", - "1847407", "1862580", - "1862837", "1864377", - "1870250", - "1871252", - "1871407", "1872368", - "1872901", "1875008", "1875327", - "1875869", "1876329", - "1876542", "1879252", "1879970", "1881151", "1882210", "1883161", - "1884212", "1884255", - "1884273", "1884370", "1884403", "1884465", "1884970", - "1886579", - "1886587", "1887108", "1887290", - "1888743", "1888759", - "1888826", "1889942", "1890187", - "1890534", "1890576", - "1891059", - "1891326", "1891473", "1891493", "1951557", "1951649", "1952014", - "1952062", "1952532", "1952806", "1952812", - "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", "1957852", - "1958024", "1959383", - "1959395", "1959914", "1960617", - "1961040", "1962204", "1962265", "1962434", - "1962516", "1962636", "1962990", "1963011", @@ -2782,137 +6399,88 @@ "1965166", "1965208", "1965763", - "1965777", - "1965825", "1965841", - "1965913", "1965996", "1966017", - "1966351", - "1967245", "1967815", "1968678", "1968867", "1970213", "1970284", - "1972120", "1972187", - "1972234", "1972250", "1972342", - "1972434", - "1972449", "1973414", "1973467", - "1975546", "1975553", "1975571", "1975897", - "1975903", "1976163", "1977003", "1978114", - "1978375", "1978445", "1978776", "1978977", "1979308", - "1979430", "1979473", - "1979781", "1982500", "1982525", "1982541", - "1982592", "1982636", - "1982671", - "1982746", "1982885", - "1983387", "1983441", "1983442", "1983525", - "1983548", "1983648", - "1983705", "1983755", "1983896", "1984117", - "1984954", "1985522", - "1986052", - "1986056", "1986157", "1986166", "1986220", "1986522", "1986575", - "1987527", - "1987744", "1988593", "1988881", "1989428", - "1990066", "1990150", - "1990551", "1991371", "1992066", - "1992504", "4522322", "4523522", "4523885", "4524054", - "4524072", "4524376", - "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", - "4525500", "4525510", "4525540", - "4525547", "4529566", - "4530151", "4531284", - "4531402", "4531517", "4531687", "4531690", - "4532022", - "4532095", "4532297", - "4532357", "4532544", "4532886", - "4532888", "4532890", - "4533115", "4533136", - "4533202", "4533273", - "4533360", - "4533433", - "4533671", - "4533952", - "4534057", "4534166", "4534207", "4534290", - "4534299", "4534398", - "4534463", "4534485", - "4534533", "4534538", "4534540", "4534719", "4534872", "4534909", "5101678", - "5101745", "5102951", "5103451", "5104442", @@ -2924,20 +6492,14 @@ "5110670", "5110885", "5111574", - "5112155", "5112283", - "5112291", - "5113036", "5113078", "5113234", "5114198", - "5114327", "5115771", "5115777", "5115874", - "5116475", "5117400", - "5118892", "5118996", "5119245", "5124007", @@ -2945,7 +6507,6 @@ "5124233", "5125689", "5126212", - "5126680", "5142870", "5143048", "5143129", @@ -2959,20 +6520,13 @@ "5144534", "5144543", "5145009", - "5145409", "5146342", "5146379", "5146412", - "5146496", "5146559", - "5146677", "5146961", - "5147062", - "5147193", "5147208", - "5147245", "5147608", - "5148286", "5148424", "5148436", "5148462", @@ -2985,124 +6539,78 @@ "5768880", "5769068", "5769072", - "5769272", - "5771259", "5771350", "5771982", "5772063", - "5772176", "5772196", - "5772202", - "5772205", "5772210", "5772351", "5880533", - "5880545", "5880552", "5880559", - "5880563", "5884851", "6097214", - "6097236", - "7438067", "7443518", - "7446048", "7681733", - "7752082", "7780930", - "7895336", - "7940536", "7960566", - "7972792", "8015895", - "8105817", "8223165", "8262357", "8361848", - "8361973", "8397564", - "8407461", "8421569", "8537359", - "8581601", "9101339" ], - "class_count": 479, - "truth_images_in_retained_classes": 45499, - "accepted_predictions_in_retained_classes": 41158, + "class_count": 320, + "truth_images_in_retained_classes": 44895, + "accepted_predictions_in_retained_classes": 39395, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7680325071529435, - "precision": 0.7031392569230956, - "recall": 0.7680325071529435, - "f1": 0.6923830331524404 + "accuracy": 0.7835860088760841, + "precision": 0.827189259853512, + "recall": 0.7835860088760841, + "f1": 0.7771880031099812 } }, { - "model": "torch-tta", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "per_model", + "cutoff": 5, + "domain": "common", "classes": [ - "11478679", "1732063", "1732416", "1734453", "1734704", - "1734826", "1737491", "1737542", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1739833", "1739922", - "1740005", - "1740069", - "1740185", "1741341", - "1741752", "1742142", "1743532", - "1743775", - "1744071", "1744782", - "1745079", - "1746027", "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1760593", "1761041", "1762244", "1763610", - "1765011", "1766137", - "1766210", "1766274", - "1766510", "1767597", - "1767625", - "1768117", - "1768341", "1769103", - "1769505", "1769566", "1769897", - "1769958", - "1770150", "1770307", "1770477", - "1770772", "1770880", "1771040", "1771214", @@ -3110,71 +6618,40 @@ "1771698", "1772169", "1772179", - "1772940", - "1773309", - "1775891", - "1776330", - "1776862", "1777253", "1778074", - "1779690", "1780150", - "1781694", - "1782560", - "1782615", "1782672", - "1782726", "1782763", "1782777", - "1782841", "1782927", "1782948", "1783043", "1785286", "1785888", "1785895", - "1786902", - "1787112", "1787610", "1789267", - "1789580", - "1789694", "1789695", "1789730", "1789745", - "1789783", "1789785", - "1789982", - "1790002", - "1790072", "1791422", "1792383", "1792411", "1792418", - "1793877", "1794590", "1795215", - "1795854", - "1796117", "1796145", - "1796169", "1796678", - "1797178", "1797258", - "1797367", "1797479", - "1798346", - "1798449", "1798807", - "1798974", "1799132", - "1799701", - "1799708", "1800004", "1800032", "1801896", "1802280", - "1803012", "1803073", "1804071", "1804906", @@ -3189,10 +6666,8 @@ "1822346", "1822587", "1822610", - "1822613", "1822796", "1822819", - "1822830", "1823726", "1825064", "1825077", @@ -3205,83 +6680,52 @@ "1828637", "1830410", "1830937", - "1830962", - "1831136", - "1831643", "1835156", - "1836899", - "1839893", "1841261", "1845270", - "1847407", - "1862580", - "1862837", "1864377", - "1870250", - "1871252", - "1871407", "1872368", - "1872901", "1875008", "1875327", - "1875869", "1876329", - "1876542", "1879252", "1879970", "1881151", "1882210", "1883161", - "1884212", "1884255", - "1884273", "1884370", "1884403", "1884465", "1884970", - "1886579", - "1886587", "1887108", "1887290", - "1888743", "1888759", - "1888826", "1889942", "1890187", - "1890534", "1890576", - "1891059", - "1891326", "1891473", "1891493", "1951557", "1951649", "1952014", - "1952062", "1952532", "1952806", "1952812", - "1956440", - "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", "1957852", - "1958024", "1959383", - "1959395", "1959914", "1960617", - "1961040", "1962204", "1962265", "1962434", - "1962516", "1962636", "1962990", - "1963011", "1963306", "1963446", "1964653", @@ -3289,140 +6733,87 @@ "1965166", "1965208", "1965763", - "1965777", - "1965825", "1965841", - "1965913", "1965996", "1966017", - "1966351", - "1967245", "1967815", "1968678", "1968867", "1970213", "1970284", - "1972120", "1972187", - "1972234", "1972250", "1972342", - "1972434", - "1972449", "1973414", "1973467", - "1975546", "1975553", - "1975571", "1975897", - "1975903", "1976163", "1977003", "1978114", - "1978375", "1978445", "1978776", "1978977", "1979308", - "1979430", "1979473", - "1979781", "1982500", "1982525", "1982541", - "1982542", - "1982592", "1982636", - "1982671", - "1982746", "1982885", - "1983260", - "1983387", "1983441", "1983442", "1983525", - "1983548", "1983648", - "1983705", "1983755", "1983896", "1984117", - "1984954", "1985522", - "1986052", - "1986056", "1986157", "1986166", "1986220", "1986522", "1986575", - "1987527", - "1987744", "1988593", "1988881", "1989428", - "1990066", "1990150", - "1990551", "1991371", "1992066", - "1992504", "4522322", "4523522", "4523885", "4524054", - "4524072", "4524376", - "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", - "4525500", "4525510", - "4525530", "4525540", - "4525547", "4529566", - "4530151", "4531284", - "4531402", "4531517", "4531687", "4531690", - "4532022", - "4532095", "4532297", - "4532357", "4532544", "4532886", - "4532888", "4532890", - "4533115", "4533136", - "4533202", "4533273", - "4533360", - "4533433", - "4533671", - "4533952", - "4534057", "4534166", "4534207", "4534290", - "4534299", "4534398", - "4534463", "4534485", - "4534533", "4534538", "4534540", "4534719", "4534872", "4534909", "5101678", - "5101745", "5102951", "5103451", "5104442", @@ -3434,20 +6825,14 @@ "5110670", "5110885", "5111574", - "5112155", "5112283", - "5112291", - "5113036", "5113078", "5113234", "5114198", - "5114327", "5115771", "5115777", "5115874", - "5116475", "5117400", - "5118892", "5118996", "5119245", "5124007", @@ -3455,7 +6840,6 @@ "5124233", "5125689", "5126212", - "5126680", "5142870", "5143048", "5143129", @@ -3469,21 +6853,13 @@ "5144534", "5144543", "5145009", - "5145409", "5146342", "5146379", "5146412", - "5146496", "5146559", - "5146677", "5146961", - "5147039", - "5147062", - "5147193", "5147208", - "5147245", "5147608", - "5148286", "5148424", "5148436", "5148462", @@ -3496,119 +6872,78 @@ "5768880", "5769068", "5769072", - "5769272", - "5771259", "5771350", "5771982", "5772063", - "5772176", "5772196", - "5772202", - "5772205", "5772210", "5772351", "5880533", - "5880545", "5880552", "5880559", - "5880563", "5884851", "6097214", - "6097236", - "7438067", "7443518", - "7446048", "7681733", - "7752082", "7780930", - "7895336", - "7940536", "7960566", - "7972792", "8015895", - "8105817", "8223165", "8262357", "8361848", - "8361973", "8397564", - "8407461", "8421569", "8537359", - "8581601", "9101339" ], - "class_count": 491, - "truth_images_in_retained_classes": 45520, - "accepted_predictions_in_retained_classes": 42031, + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 39306, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7873444012917992, - "precision": 0.7275774071350241, - "recall": 0.7873444012917992, - "f1": 0.7194797347248981 + "accuracy": 0.7884742372532278, + "precision": 0.8305015444074889, + "recall": 0.7884742372532278, + "f1": 0.7815287772418471 } }, { - "model": "torch-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "common", + "cutoff": 5, + "domain": "per_model", "classes": [ - "11478679", "1732063", "1732416", "1734453", "1734704", - "1734826", "1737491", "1737542", - "1737650", "1737775", - "1737776", - "1738050", - "1739833", "1739922", - "1740005", - "1740185", "1741341", - "1741752", "1742142", "1743532", - "1743775", - "1744071", "1744782", - "1745079", - "1746027", "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1760593", "1761041", "1762244", "1763610", - "1765011", "1766137", "1766210", "1766274", - "1766510", "1767597", - "1767625", - "1768117", - "1768341", "1769103", - "1769505", "1769566", "1769897", - "1769958", - "1770150", "1770307", "1770477", "1770880", @@ -3618,68 +6953,42 @@ "1771698", "1772169", "1772179", - "1772940", - "1773309", - "1775891", - "1776330", - "1776862", "1777253", "1778074", - "1779690", "1780150", - "1781694", - "1782560", "1782672", - "1782726", "1782763", "1782777", - "1782841", "1782927", "1782948", "1783043", "1785286", "1785888", "1785895", - "1786902", "1787610", "1789267", - "1789580", - "1789694", "1789695", "1789730", "1789745", "1789783", "1789785", - "1789982", - "1790002", - "1790072", "1791422", "1792383", "1792411", "1792418", - "1793877", "1794590", "1795215", - "1795854", - "1796117", "1796145", "1796678", - "1797178", "1797258", - "1797367", "1797479", - "1798346", - "1798449", "1798807", "1798974", "1799132", - "1799701", - "1799708", "1800004", "1800032", "1801896", "1802280", - "1803012", "1803073", "1804071", "1804906", @@ -3694,10 +7003,8 @@ "1822346", "1822587", "1822610", - "1822613", "1822796", "1822819", - "1822830", "1823726", "1825064", "1825077", @@ -3710,78 +7017,53 @@ "1828637", "1830410", "1830937", - "1831136", - "1831643", "1835156", - "1836899", "1839893", "1841261", "1845270", - "1847407", - "1862580", - "1862837", "1864377", - "1870250", - "1871252", - "1871407", "1872368", - "1872901", "1875008", "1875327", "1875869", "1876329", - "1876542", "1879252", "1879970", "1881151", "1882210", "1883161", - "1884212", "1884255", - "1884273", "1884370", "1884403", "1884465", "1884970", - "1886579", - "1886587", "1887108", "1887290", - "1888743", "1888759", - "1888826", "1889942", "1890187", - "1890534", "1890576", - "1891059", - "1891326", "1891473", "1891493", "1951557", "1951649", "1952014", - "1952062", "1952532", "1952806", "1952812", - "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", "1957852", - "1958024", "1959383", "1959395", "1959914", "1960617", - "1961040", "1962204", "1962265", "1962434", - "1962516", "1962636", "1962990", "1963011", @@ -3792,137 +7074,87 @@ "1965166", "1965208", "1965763", - "1965777", - "1965825", "1965841", - "1965913", "1965996", "1966017", - "1966351", - "1967245", "1967815", "1968678", "1968867", "1970213", "1970284", - "1972120", "1972187", - "1972234", "1972250", "1972342", - "1972434", - "1972449", "1973414", "1973467", - "1975546", "1975553", - "1975571", "1975897", - "1975903", "1976163", "1977003", "1978114", - "1978375", "1978445", "1978776", "1978977", "1979308", - "1979430", "1979473", - "1979781", "1982500", "1982525", "1982541", - "1982592", "1982636", - "1982671", - "1982746", "1982885", - "1983387", "1983441", "1983442", "1983525", - "1983548", "1983648", - "1983705", "1983755", "1983896", "1984117", - "1984954", "1985522", - "1986052", - "1986056", "1986157", "1986166", "1986220", "1986522", "1986575", - "1987527", - "1987744", "1988593", "1988881", "1989428", - "1990066", "1990150", - "1990551", "1991371", "1992066", - "1992504", "4522322", "4523522", "4523885", "4524054", - "4524072", "4524376", - "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", - "4525500", "4525510", "4525540", - "4525547", "4529566", - "4530151", "4531284", - "4531402", "4531517", "4531687", "4531690", - "4532022", - "4532095", "4532297", - "4532357", "4532544", "4532886", - "4532888", "4532890", - "4533115", "4533136", - "4533202", "4533273", - "4533360", - "4533433", - "4533671", - "4533952", - "4534057", "4534166", "4534207", "4534290", - "4534299", "4534398", - "4534463", "4534485", - "4534533", "4534538", "4534540", "4534719", "4534872", "4534909", "5101678", - "5101745", "5102951", "5103451", "5104442", @@ -3934,20 +7166,14 @@ "5110670", "5110885", "5111574", - "5112155", "5112283", - "5112291", - "5113036", "5113078", "5113234", "5114198", - "5114327", "5115771", "5115777", "5115874", - "5116475", "5117400", - "5118892", "5118996", "5119245", "5124007", @@ -3955,7 +7181,6 @@ "5124233", "5125689", "5126212", - "5126680", "5142870", "5143048", "5143129", @@ -3969,20 +7194,13 @@ "5144534", "5144543", "5145009", - "5145409", "5146342", "5146379", "5146412", - "5146496", "5146559", - "5146677", "5146961", - "5147062", - "5147193", "5147208", - "5147245", "5147608", - "5148286", "5148424", "5148436", "5148462", @@ -3995,121 +7213,76 @@ "5768880", "5769068", "5769072", - "5769272", - "5771259", "5771350", "5771982", "5772063", - "5772176", "5772196", - "5772202", - "5772205", "5772210", "5772351", "5880533", - "5880545", "5880552", "5880559", - "5880563", "5884851", "6097214", - "6097236", - "7438067", "7443518", - "7446048", "7681733", - "7752082", "7780930", - "7895336", - "7940536", "7960566", - "7972792", "8015895", - "8105817", "8223165", "8262357", "8361848", - "8361973", "8397564", - "8407461", "8421569", "8537359", - "8581601", "9101339" ], - "class_count": 479, - "truth_images_in_retained_classes": 45499, - "accepted_predictions_in_retained_classes": 42007, + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40080, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7966306910945165, - "precision": 0.7388458738412599, - "recall": 0.7966306910945165, - "f1": 0.7300482696837085 + "accuracy": 0.8016540743299243, + "precision": 0.8261696121305688, + "recall": 0.8016540743299243, + "f1": 0.7937632511493783 } }, { - "model": "onnx-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "per_model", + "cutoff": 5, + "domain": "common", "classes": [ - "11478679", "1732063", "1732416", "1734453", "1734704", - "1734826", "1737491", "1737542", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1739833", "1739922", - "1740005", - "1740069", - "1740185", "1741341", - "1741752", "1742142", "1743532", - "1743775", - "1744071", "1744782", - "1745079", - "1746027", "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1760593", "1761041", "1762244", "1763610", - "1765011", "1766137", - "1766210", "1766274", - "1766510", "1767597", - "1767625", - "1768117", - "1768341", "1769103", - "1769505", "1769566", "1769897", - "1769958", - "1770150", "1770307", "1770477", "1770880", @@ -4119,71 +7292,40 @@ "1771698", "1772169", "1772179", - "1772940", - "1773309", - "1775891", - "1776330", - "1776862", "1777253", "1778074", - "1779690", "1780150", - "1781694", - "1782560", - "1782615", "1782672", - "1782726", "1782763", "1782777", - "1782841", "1782927", "1782948", "1783043", "1785286", "1785888", "1785895", - "1786902", - "1787112", "1787610", "1789267", - "1789580", - "1789694", "1789695", "1789730", "1789745", - "1789783", "1789785", - "1789982", - "1790002", - "1790072", "1791422", "1792383", "1792411", "1792418", - "1793877", "1794590", "1795215", - "1795854", - "1796117", "1796145", - "1796169", "1796678", - "1797178", "1797258", - "1797367", "1797479", - "1798346", - "1798449", "1798807", - "1798974", "1799132", - "1799701", - "1799708", "1800004", "1800032", "1801896", "1802280", - "1803012", "1803073", "1804071", "1804906", @@ -4198,10 +7340,8 @@ "1822346", "1822587", "1822610", - "1822613", "1822796", "1822819", - "1822830", "1823726", "1825064", "1825077", @@ -4214,83 +7354,52 @@ "1828637", "1830410", "1830937", - "1830962", - "1831136", - "1831643", "1835156", - "1836899", - "1839893", "1841261", "1845270", - "1847407", - "1862580", - "1862837", "1864377", - "1870250", - "1871252", - "1871407", "1872368", - "1872901", "1875008", "1875327", - "1875869", "1876329", - "1876542", "1879252", "1879970", "1881151", "1882210", "1883161", - "1884212", "1884255", - "1884273", "1884370", "1884403", "1884465", "1884970", - "1886579", - "1886587", "1887108", "1887290", - "1888743", "1888759", - "1888826", "1889942", "1890187", - "1890534", "1890576", - "1891059", - "1891326", "1891473", "1891493", "1951557", "1951649", "1952014", - "1952062", "1952532", "1952806", "1952812", - "1956440", - "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", "1957852", - "1958024", "1959383", - "1959395", "1959914", "1960617", - "1961040", "1962204", "1962265", "1962434", - "1962516", "1962636", "1962990", - "1963011", "1963306", "1963446", "1964653", @@ -4298,140 +7407,87 @@ "1965166", "1965208", "1965763", - "1965777", - "1965825", "1965841", - "1965913", "1965996", "1966017", - "1966351", - "1967245", "1967815", "1968678", "1968867", "1970213", "1970284", - "1972120", "1972187", - "1972234", "1972250", "1972342", - "1972434", - "1972449", "1973414", "1973467", - "1975546", "1975553", - "1975571", "1975897", - "1975903", "1976163", "1977003", "1978114", - "1978375", "1978445", "1978776", "1978977", "1979308", - "1979430", "1979473", - "1979781", "1982500", "1982525", "1982541", - "1982542", - "1982592", "1982636", - "1982671", - "1982746", "1982885", - "1983260", - "1983387", "1983441", "1983442", "1983525", - "1983548", "1983648", - "1983705", "1983755", "1983896", "1984117", - "1984954", "1985522", - "1986052", - "1986056", "1986157", "1986166", "1986220", "1986522", "1986575", - "1987527", - "1987744", "1988593", "1988881", "1989428", - "1990066", "1990150", - "1990551", "1991371", "1992066", - "1992504", "4522322", "4523522", "4523885", "4524054", - "4524072", "4524376", - "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", - "4525500", "4525510", - "4525530", "4525540", - "4525547", "4529566", - "4530151", "4531284", - "4531402", "4531517", "4531687", "4531690", - "4532022", - "4532095", "4532297", - "4532357", "4532544", "4532886", - "4532888", "4532890", - "4533115", "4533136", - "4533202", "4533273", - "4533360", - "4533433", - "4533671", - "4533952", - "4534057", "4534166", "4534207", "4534290", - "4534299", "4534398", - "4534463", "4534485", - "4534533", "4534538", "4534540", "4534719", "4534872", "4534909", "5101678", - "5101745", "5102951", "5103451", "5104442", @@ -4443,20 +7499,14 @@ "5110670", "5110885", "5111574", - "5112155", "5112283", - "5112291", - "5113036", "5113078", "5113234", "5114198", - "5114327", "5115771", "5115777", "5115874", - "5116475", "5117400", - "5118892", "5118996", "5119245", "5124007", @@ -4464,7 +7514,6 @@ "5124233", "5125689", "5126212", - "5126680", "5142870", "5143048", "5143129", @@ -4478,21 +7527,13 @@ "5144534", "5144543", "5145009", - "5145409", "5146342", "5146379", "5146412", - "5146496", "5146559", - "5146677", "5146961", - "5147039", - "5147062", - "5147193", "5147208", - "5147245", "5147608", - "5148286", "5148424", "5148436", "5148462", @@ -4505,119 +7546,78 @@ "5768880", "5769068", "5769072", - "5769272", - "5771259", "5771350", "5771982", "5772063", - "5772176", "5772196", - "5772202", - "5772205", "5772210", "5772351", "5880533", - "5880545", "5880552", "5880559", - "5880563", "5884851", "6097214", - "6097236", - "7438067", "7443518", - "7446048", "7681733", - "7752082", "7780930", - "7895336", - "7940536", "7960566", - "7972792", "8015895", - "8105817", "8223165", "8262357", "8361848", - "8361973", "8397564", - "8407461", "8421569", "8537359", - "8581601", "9101339" ], - "class_count": 490, - "truth_images_in_retained_classes": 45519, - "accepted_predictions_in_retained_classes": 42040, + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40012, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7892730174965529, - "precision": 0.7287480551447586, - "recall": 0.7892730174965529, - "f1": 0.7209150108506917 + "accuracy": 0.8112118860261139, + "precision": 0.8306457257526494, + "recall": 0.8112118860261139, + "f1": 0.801323823079522 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "zero", "rank": "species", - "cutoff": 0, - "domain": "common", + "cutoff": 5, + "domain": "per_model", "classes": [ - "11478679", "1732063", "1732416", "1734453", "1734704", - "1734826", "1737491", "1737542", - "1737650", "1737775", - "1737776", - "1738050", - "1739833", "1739922", - "1740005", - "1740185", "1741341", - "1741752", "1742142", "1743532", - "1743775", - "1744071", "1744782", - "1745079", - "1746027", "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1760593", "1761041", "1762244", "1763610", - "1765011", "1766137", "1766210", "1766274", - "1766510", "1767597", - "1767625", - "1768117", - "1768341", "1769103", - "1769505", "1769566", "1769897", - "1769958", - "1770150", "1770307", "1770477", "1770880", @@ -4627,68 +7627,42 @@ "1771698", "1772169", "1772179", - "1772940", - "1773309", - "1775891", - "1776330", - "1776862", "1777253", "1778074", - "1779690", "1780150", - "1781694", - "1782560", "1782672", - "1782726", "1782763", "1782777", - "1782841", "1782927", "1782948", "1783043", "1785286", "1785888", "1785895", - "1786902", "1787610", "1789267", - "1789580", - "1789694", "1789695", "1789730", "1789745", "1789783", "1789785", - "1789982", - "1790002", - "1790072", "1791422", "1792383", "1792411", "1792418", - "1793877", "1794590", "1795215", - "1795854", - "1796117", "1796145", "1796678", - "1797178", "1797258", - "1797367", "1797479", - "1798346", - "1798449", "1798807", "1798974", "1799132", - "1799701", - "1799708", "1800004", "1800032", "1801896", "1802280", - "1803012", "1803073", "1804071", "1804906", @@ -4703,10 +7677,8 @@ "1822346", "1822587", "1822610", - "1822613", "1822796", "1822819", - "1822830", "1823726", "1825064", "1825077", @@ -4719,78 +7691,53 @@ "1828637", "1830410", "1830937", - "1831136", - "1831643", "1835156", - "1836899", "1839893", "1841261", "1845270", - "1847407", - "1862580", - "1862837", "1864377", - "1870250", - "1871252", - "1871407", "1872368", - "1872901", "1875008", "1875327", "1875869", "1876329", - "1876542", "1879252", "1879970", "1881151", "1882210", "1883161", - "1884212", "1884255", - "1884273", "1884370", "1884403", "1884465", "1884970", - "1886579", - "1886587", "1887108", "1887290", - "1888743", "1888759", - "1888826", "1889942", "1890187", - "1890534", "1890576", - "1891059", - "1891326", "1891473", "1891493", "1951557", "1951649", "1952014", - "1952062", "1952532", "1952806", "1952812", - "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", "1957852", - "1958024", "1959383", "1959395", "1959914", "1960617", - "1961040", "1962204", "1962265", "1962434", - "1962516", "1962636", "1962990", "1963011", @@ -4801,137 +7748,87 @@ "1965166", "1965208", "1965763", - "1965777", - "1965825", "1965841", - "1965913", "1965996", "1966017", - "1966351", - "1967245", "1967815", "1968678", "1968867", "1970213", "1970284", - "1972120", "1972187", - "1972234", "1972250", "1972342", - "1972434", - "1972449", "1973414", "1973467", - "1975546", "1975553", - "1975571", "1975897", - "1975903", "1976163", "1977003", "1978114", - "1978375", "1978445", "1978776", "1978977", "1979308", - "1979430", "1979473", - "1979781", "1982500", "1982525", "1982541", - "1982592", "1982636", - "1982671", - "1982746", "1982885", - "1983387", "1983441", "1983442", "1983525", - "1983548", "1983648", - "1983705", "1983755", "1983896", "1984117", - "1984954", "1985522", - "1986052", - "1986056", "1986157", "1986166", "1986220", "1986522", "1986575", - "1987527", - "1987744", "1988593", "1988881", "1989428", - "1990066", "1990150", - "1990551", "1991371", "1992066", - "1992504", "4522322", "4523522", "4523885", "4524054", - "4524072", "4524376", - "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", - "4525500", "4525510", "4525540", - "4525547", "4529566", - "4530151", "4531284", - "4531402", "4531517", "4531687", "4531690", - "4532022", - "4532095", "4532297", - "4532357", "4532544", "4532886", - "4532888", "4532890", - "4533115", "4533136", - "4533202", "4533273", - "4533360", - "4533433", - "4533671", - "4533952", - "4534057", "4534166", "4534207", "4534290", - "4534299", "4534398", - "4534463", "4534485", - "4534533", "4534538", "4534540", "4534719", "4534872", "4534909", "5101678", - "5101745", "5102951", "5103451", "5104442", @@ -4943,20 +7840,14 @@ "5110670", "5110885", "5111574", - "5112155", "5112283", - "5112291", - "5113036", "5113078", "5113234", "5114198", - "5114327", "5115771", "5115777", "5115874", - "5116475", "5117400", - "5118892", "5118996", "5119245", "5124007", @@ -4964,7 +7855,6 @@ "5124233", "5125689", "5126212", - "5126680", "5142870", "5143048", "5143129", @@ -4978,20 +7868,13 @@ "5144534", "5144543", "5145009", - "5145409", "5146342", "5146379", "5146412", - "5146496", "5146559", - "5146677", "5146961", - "5147062", - "5147193", "5147208", - "5147245", "5147608", - "5148286", "5148424", "5148436", "5148462", @@ -5004,66 +7887,48 @@ "5768880", "5769068", "5769072", - "5769272", - "5771259", "5771350", "5771982", "5772063", - "5772176", "5772196", - "5772202", - "5772205", "5772210", "5772351", "5880533", - "5880545", "5880552", "5880559", - "5880563", "5884851", "6097214", - "6097236", - "7438067", "7443518", - "7446048", "7681733", - "7752082", "7780930", - "7895336", - "7940536", "7960566", - "7972792", "8015895", - "8105817", "8223165", "8262357", "8361848", - "8361973", "8397564", - "8407461", "8421569", "8537359", - "8581601", "9101339" ], - "class_count": 479, - "truth_images_in_retained_classes": 45499, - "accepted_predictions_in_retained_classes": 42017, + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40095, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7969598717605656, - "precision": 0.7385244544626272, - "recall": 0.7969598717605656, - "f1": 0.7300144608463682 + "accuracy": 0.8021426772632025, + "precision": 0.8262878591168301, + "recall": 0.8021426772632025, + "f1": 0.7940157823083626 } }, { - "model": "v2", + "model": "onnx", "scope": "zero", "rank": "species", "cutoff": 5, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", @@ -5071,7 +7936,6 @@ "1734704", "1737491", "1737542", - "1737775", "1739922", "1741341", "1742142", @@ -5082,13 +7946,11 @@ "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", "1761041", "1762244", "1763610", - "1765011", "1766137", "1766274", "1767597", @@ -5116,7 +7978,6 @@ "1785286", "1785888", "1785895", - "1786902", "1787610", "1789267", "1789695", @@ -5170,7 +8031,6 @@ "1835156", "1841261", "1845270", - "1862580", "1864377", "1872368", "1875008", @@ -5214,7 +8074,6 @@ "1962434", "1962636", "1962990", - "1963011", "1963306", "1963446", "1964653", @@ -5236,7 +8095,6 @@ "1973414", "1973467", "1975553", - "1975571", "1975897", "1976163", "1977003", @@ -5386,24 +8244,24 @@ "8537359", "9101339" ], - "class_count": 320, - "truth_images_in_retained_classes": 44895, - "accepted_predictions_in_retained_classes": 39395, + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 40027, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7835860088760841, - "precision": 0.8271892598535118, - "recall": 0.7835860088760841, - "f1": 0.7771880031099807 + "accuracy": 0.8117129772132781, + "precision": 0.8307669950260996, + "recall": 0.8117129772132781, + "f1": 0.8015828087090235 } }, { - "model": "v2", + "model": "torch-tta", "scope": "zero", "rank": "species", "cutoff": 5, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", @@ -5421,12 +8279,15 @@ "1746832", "1746876", "1758878", + "1759083", "1759153", "1760104", "1761041", "1762244", "1763610", + "1765011", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -5453,11 +8314,13 @@ "1785286", "1785888", "1785895", + "1786902", "1787610", "1789267", "1789695", "1789730", "1789745", + "1789783", "1789785", "1791422", "1792383", @@ -5470,6 +8333,7 @@ "1797258", "1797479", "1798807", + "1798974", "1799132", "1800004", "1800032", @@ -5510,6 +8374,7 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -5542,6 +8407,7 @@ "1957845", "1957852", "1959383", + "1959395", "1959914", "1960617", "1962204", @@ -5656,6 +8522,7 @@ "5115777", "5115874", "5117400", + "5118892", "5118996", "5119245", "5124007", @@ -5708,6 +8575,7 @@ "6097214", "7443518", "7681733", + "7752082", "7780930", "7960566", "8015895", @@ -5719,24 +8587,24 @@ "8537359", "9101339" ], - "class_count": 313, - "truth_images_in_retained_classes": 44730, - "accepted_predictions_in_retained_classes": 39306, + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41093, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7884742372532278, - "precision": 0.8305015444074887, - "recall": 0.7884742372532278, - "f1": 0.7815287772418466 + "accuracy": 0.8286743235345041, + "precision": 0.8455415603248386, + "recall": 0.8286743235345041, + "f1": 0.8201007330677098 } }, { - "model": "torch", + "model": "torch-tta", "scope": "zero", "rank": "species", "cutoff": 5, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", @@ -5744,7 +8612,6 @@ "1734704", "1737491", "1737542", - "1737775", "1739922", "1741341", "1742142", @@ -5761,7 +8628,6 @@ "1762244", "1763610", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -5793,7 +8659,6 @@ "1789695", "1789730", "1789745", - "1789783", "1789785", "1791422", "1792383", @@ -5806,7 +8671,6 @@ "1797258", "1797479", "1798807", - "1798974", "1799132", "1800004", "1800032", @@ -5841,14 +8705,12 @@ "1830410", "1830937", "1835156", - "1839893", "1841261", "1845270", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -5881,7 +8743,6 @@ "1957845", "1957852", "1959383", - "1959395", "1959914", "1960617", "1962204", @@ -5889,7 +8750,6 @@ "1962434", "1962636", "1962990", - "1963011", "1963306", "1963446", "1964653", @@ -6060,24 +8920,24 @@ "8537359", "9101339" ], - "class_count": 321, - "truth_images_in_retained_classes": 44848, - "accepted_predictions_in_retained_classes": 40080, + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41004, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8016540743299243, - "precision": 0.826169612130568, - "recall": 0.8016540743299243, - "f1": 0.7937632511493783 + "accuracy": 0.8390964584441899, + "precision": 0.8519293635860037, + "recall": 0.8390964584441899, + "f1": 0.8287585120001666 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 5, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", @@ -6095,12 +8955,15 @@ "1746832", "1746876", "1758878", + "1759083", "1759153", "1760104", "1761041", "1762244", "1763610", + "1765011", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -6127,11 +8990,13 @@ "1785286", "1785888", "1785895", + "1786902", "1787610", "1789267", "1789695", "1789730", "1789745", + "1789783", "1789785", "1791422", "1792383", @@ -6144,6 +9009,7 @@ "1797258", "1797479", "1798807", + "1798974", "1799132", "1800004", "1800032", @@ -6184,6 +9050,7 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -6216,6 +9083,7 @@ "1957845", "1957852", "1959383", + "1959395", "1959914", "1960617", "1962204", @@ -6330,6 +9198,7 @@ "5115777", "5115874", "5117400", + "5118892", "5118996", "5119245", "5124007", @@ -6382,6 +9251,7 @@ "6097214", "7443518", "7681733", + "7752082", "7780930", "7960566", "8015895", @@ -6393,24 +9263,24 @@ "8537359", "9101339" ], - "class_count": 313, - "truth_images_in_retained_classes": 44730, - "accepted_predictions_in_retained_classes": 40012, + "class_count": 323, + "truth_images_in_retained_classes": 44853, + "accepted_predictions_in_retained_classes": 41099, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8112118860261139, - "precision": 0.8306457257526491, - "recall": 0.8112118860261139, - "f1": 0.801323823079522 + "accuracy": 0.8289044913540222, + "precision": 0.8454663089232549, + "recall": 0.8289044913540222, + "f1": 0.8200672672516621 } }, { - "model": "onnx", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 5, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", @@ -6418,7 +9288,6 @@ "1734704", "1737491", "1737542", - "1737775", "1739922", "1741341", "1742142", @@ -6435,7 +9304,6 @@ "1762244", "1763610", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -6467,7 +9335,6 @@ "1789695", "1789730", "1789745", - "1789783", "1789785", "1791422", "1792383", @@ -6480,7 +9347,6 @@ "1797258", "1797479", "1798807", - "1798974", "1799132", "1800004", "1800032", @@ -6515,14 +9381,12 @@ "1830410", "1830937", "1835156", - "1839893", "1841261", "1845270", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -6555,7 +9419,6 @@ "1957845", "1957852", "1959383", - "1959395", "1959914", "1960617", "1962204", @@ -6563,7 +9426,6 @@ "1962434", "1962636", "1962990", - "1963011", "1963306", "1963446", "1964653", @@ -6734,44 +9596,41 @@ "8537359", "9101339" ], - "class_count": 321, - "truth_images_in_retained_classes": 44848, - "accepted_predictions_in_retained_classes": 40095, + "class_count": 313, + "truth_images_in_retained_classes": 44730, + "accepted_predictions_in_retained_classes": 41010, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8021426772632025, - "precision": 0.8262878591168297, - "recall": 0.8021426772632025, - "f1": 0.7940157823083628 + "accuracy": 0.8393339798681654, + "precision": 0.8518517079862864, + "recall": 0.8393339798681654, + "f1": 0.8287239769887179 } }, { - "model": "onnx", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 5, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", "1737491", - "1737542", "1739922", "1741341", "1742142", "1743532", "1744782", - "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", - "1761041", "1762244", "1763610", "1766137", @@ -6783,7 +9642,6 @@ "1770307", "1770477", "1770880", - "1771040", "1771214", "1771509", "1771698", @@ -6791,7 +9649,6 @@ "1772179", "1777253", "1778074", - "1780150", "1782672", "1782763", "1782777", @@ -6802,7 +9659,6 @@ "1785888", "1785895", "1787610", - "1789267", "1789695", "1789730", "1789745", @@ -6833,9 +9689,7 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822587", "1822610", "1822796", "1822819", @@ -6846,14 +9700,13 @@ "1825971", "1825983", "1826022", - "1827125", "1828162", "1828637", "1830410", "1830937", "1835156", "1841261", - "1845270", + "1862580", "1864377", "1872368", "1875008", @@ -6872,11 +9725,9 @@ "1887108", "1887290", "1888759", - "1889942", "1890187", "1890576", "1891473", - "1891493", "1951557", "1951649", "1952014", @@ -6886,10 +9737,7 @@ "1956599", "1957570", "1957572", - "1957816", "1957845", - "1957852", - "1959383", "1959914", "1960617", "1962204", @@ -6914,17 +9762,14 @@ "1970284", "1972187", "1972250", - "1972342", "1973414", "1973467", - "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -6932,8 +9777,6 @@ "1982541", "1982636", "1982885", - "1983441", - "1983442", "1983525", "1983648", "1983755", @@ -6961,12 +9804,10 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", - "4531687", "4531690", "4532297", "4532544", @@ -6978,27 +9819,20 @@ "4534207", "4534290", "4534398", - "4534485", - "4534538", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", - "5109821", "5110200", "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", - "5113234", "5114198", "5115771", "5115777", @@ -7010,21 +9844,17 @@ "5124143", "5124233", "5125689", - "5126212", "5142870", - "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", - "5144190", "5144426", "5144534", "5144543", "5145009", - "5146342", "5146379", "5146412", "5146559", @@ -7041,11 +9871,8 @@ "5149746", "5714973", "5768880", - "5769068", "5769072", "5771350", - "5771982", - "5772063", "5772196", "5772210", "5772351", @@ -7057,7 +9884,6 @@ "7443518", "7681733", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -7067,50 +9893,42 @@ "8537359", "9101339" ], - "class_count": 313, - "truth_images_in_retained_classes": 44730, - "accepted_predictions_in_retained_classes": 40027, + "class_count": 277, + "truth_images_in_retained_classes": 43835, + "accepted_predictions_in_retained_classes": 38825, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8117129772132781, - "precision": 0.8307669950260991, - "recall": 0.8117129772132781, - "f1": 0.8015828087090237 + "accuracy": 0.7994793772053351, + "precision": 0.8464715182316649, + "recall": 0.7994793772053351, + "f1": 0.8020074761104702 } }, { - "model": "torch-tta", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 5, - "domain": "per_model", + "cutoff": 10, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", - "1737542", "1739922", "1741341", "1742142", "1743532", - "1744782", - "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1761041", "1762244", "1763610", - "1765011", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -7119,7 +9937,6 @@ "1770307", "1770477", "1770880", - "1771040", "1771214", "1771509", "1771698", @@ -7127,7 +9944,6 @@ "1772179", "1777253", "1778074", - "1780150", "1782672", "1782763", "1782777", @@ -7137,13 +9953,10 @@ "1785286", "1785888", "1785895", - "1786902", "1787610", - "1789267", "1789695", "1789730", "1789745", - "1789783", "1789785", "1791422", "1792383", @@ -7156,7 +9969,6 @@ "1797258", "1797479", "1798807", - "1798974", "1799132", "1800004", "1800032", @@ -7172,9 +9984,7 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822587", "1822610", "1822796", "1822819", @@ -7185,19 +9995,15 @@ "1825971", "1825983", "1826022", - "1827125", "1828162", "1828637", - "1830410", "1830937", "1835156", "1841261", - "1845270", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -7212,11 +10018,9 @@ "1887108", "1887290", "1888759", - "1889942", "1890187", "1890576", "1891473", - "1891493", "1951557", "1951649", "1952014", @@ -7226,14 +10030,9 @@ "1956599", "1957570", "1957572", - "1957816", "1957845", - "1957852", - "1959383", - "1959395", "1959914", "1960617", - "1962204", "1962265", "1962434", "1962636", @@ -7246,7 +10045,6 @@ "1965208", "1965763", "1965841", - "1965996", "1966017", "1967815", "1968678", @@ -7255,17 +10053,14 @@ "1970284", "1972187", "1972250", - "1972342", "1973414", "1973467", - "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -7273,8 +10068,6 @@ "1982541", "1982636", "1982885", - "1983441", - "1983442", "1983525", "1983648", "1983755", @@ -7302,12 +10095,10 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", - "4531687", "4531690", "4532297", "4532544", @@ -7319,54 +10110,42 @@ "4534207", "4534290", "4534398", - "4534485", - "4534538", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", - "5109821", "5110200", "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", - "5113234", "5114198", "5115771", "5115777", "5115874", "5117400", - "5118892", "5118996", "5119245", "5124007", "5124143", "5124233", "5125689", - "5126212", "5142870", - "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", - "5144190", "5144426", "5144534", "5144543", "5145009", - "5146342", "5146379", "5146412", "5146559", @@ -7383,11 +10162,8 @@ "5149746", "5714973", "5768880", - "5769068", "5769072", "5771350", - "5771982", - "5772063", "5772196", "5772210", "5772351", @@ -7398,9 +10174,7 @@ "6097214", "7443518", "7681733", - "7752082", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -7410,36 +10184,34 @@ "8537359", "9101339" ], - "class_count": 323, - "truth_images_in_retained_classes": 44853, - "accepted_predictions_in_retained_classes": 41093, + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 38723, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8286743235345041, - "precision": 0.8455415603248386, - "recall": 0.8286743235345041, - "f1": 0.82010073306771 + "accuracy": 0.8043288259343255, + "precision": 0.8497597107470192, + "recall": 0.8043288259343255, + "f1": 0.8062320354321302 } }, { - "model": "torch-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 5, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", "1737542", "1739922", "1741341", "1742142", "1743532", - "1744782", "1746440", "1746775", "1746832", @@ -7451,6 +10223,7 @@ "1762244", "1763610", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -7459,7 +10232,6 @@ "1770307", "1770477", "1770880", - "1771040", "1771214", "1771509", "1771698", @@ -7467,7 +10239,6 @@ "1772179", "1777253", "1778074", - "1780150", "1782672", "1782763", "1782777", @@ -7478,7 +10249,6 @@ "1785888", "1785895", "1787610", - "1789267", "1789695", "1789730", "1789745", @@ -7511,7 +10281,6 @@ "1820372", "1821911", "1822346", - "1822587", "1822610", "1822796", "1822819", @@ -7522,18 +10291,16 @@ "1825971", "1825983", "1826022", - "1827125", "1828162", "1828637", - "1830410", "1830937", "1835156", "1841261", - "1845270", "1864377", "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -7548,7 +10315,6 @@ "1887108", "1887290", "1888759", - "1889942", "1890187", "1890576", "1891473", @@ -7562,13 +10328,9 @@ "1956599", "1957570", "1957572", - "1957816", "1957845", - "1957852", - "1959383", "1959914", "1960617", - "1962204", "1962265", "1962434", "1962636", @@ -7581,7 +10343,6 @@ "1965208", "1965763", "1965841", - "1965996", "1966017", "1967815", "1968678", @@ -7590,17 +10351,14 @@ "1970284", "1972187", "1972250", - "1972342", "1973414", "1973467", - "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -7637,12 +10395,10 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", - "4531687", "4531690", "4532297", "4532544", @@ -7654,8 +10410,6 @@ "4534207", "4534290", "4534398", - "4534485", - "4534538", "4534540", "4534719", "4534872", @@ -7666,7 +10420,6 @@ "5104442", "5104558", "5105339", - "5109821", "5110200", "5110213", "5110670", @@ -7674,7 +10427,6 @@ "5111574", "5112283", "5113078", - "5113234", "5114198", "5115771", "5115777", @@ -7686,16 +10438,13 @@ "5124143", "5124233", "5125689", - "5126212", "5142870", - "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", - "5144190", "5144426", "5144534", "5144543", @@ -7717,11 +10466,9 @@ "5149746", "5714973", "5768880", - "5769068", "5769072", "5771350", "5771982", - "5772063", "5772196", "5772210", "5772351", @@ -7733,7 +10480,6 @@ "7443518", "7681733", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -7743,50 +10489,42 @@ "8537359", "9101339" ], - "class_count": 313, - "truth_images_in_retained_classes": 44730, - "accepted_predictions_in_retained_classes": 41004, + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39612, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8390964584441899, - "precision": 0.8519293635860035, - "recall": 0.8390964584441899, - "f1": 0.8287585120001667 + "accuracy": 0.8171258284359165, + "precision": 0.8511929361965739, + "recall": 0.8171258284359165, + "f1": 0.8180429337935671 } }, { - "model": "onnx-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 5, - "domain": "per_model", + "cutoff": 10, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", - "1737542", "1739922", "1741341", "1742142", "1743532", - "1744782", - "1746440", "1746775", "1746832", "1746876", "1758878", - "1759083", "1759153", "1760104", - "1761041", "1762244", "1763610", - "1765011", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -7795,7 +10533,6 @@ "1770307", "1770477", "1770880", - "1771040", "1771214", "1771509", "1771698", @@ -7803,7 +10540,6 @@ "1772179", "1777253", "1778074", - "1780150", "1782672", "1782763", "1782777", @@ -7813,13 +10549,10 @@ "1785286", "1785888", "1785895", - "1786902", "1787610", - "1789267", "1789695", "1789730", "1789745", - "1789783", "1789785", "1791422", "1792383", @@ -7832,7 +10565,6 @@ "1797258", "1797479", "1798807", - "1798974", "1799132", "1800004", "1800032", @@ -7848,9 +10580,7 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822587", "1822610", "1822796", "1822819", @@ -7861,19 +10591,15 @@ "1825971", "1825983", "1826022", - "1827125", "1828162", "1828637", - "1830410", "1830937", "1835156", "1841261", - "1845270", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -7888,11 +10614,9 @@ "1887108", "1887290", "1888759", - "1889942", "1890187", "1890576", "1891473", - "1891493", "1951557", "1951649", "1952014", @@ -7902,14 +10626,9 @@ "1956599", "1957570", "1957572", - "1957816", "1957845", - "1957852", - "1959383", - "1959395", "1959914", "1960617", - "1962204", "1962265", "1962434", "1962636", @@ -7922,7 +10641,6 @@ "1965208", "1965763", "1965841", - "1965996", "1966017", "1967815", "1968678", @@ -7931,17 +10649,14 @@ "1970284", "1972187", "1972250", - "1972342", "1973414", "1973467", - "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -7949,8 +10664,6 @@ "1982541", "1982636", "1982885", - "1983441", - "1983442", "1983525", "1983648", "1983755", @@ -7978,12 +10691,10 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", - "4531687", "4531690", "4532297", "4532544", @@ -7995,54 +10706,42 @@ "4534207", "4534290", "4534398", - "4534485", - "4534538", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", - "5109821", "5110200", "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", - "5113234", "5114198", "5115771", "5115777", "5115874", "5117400", - "5118892", "5118996", "5119245", "5124007", "5124143", "5124233", "5125689", - "5126212", "5142870", - "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", - "5144190", "5144426", "5144534", "5144543", "5145009", - "5146342", "5146379", "5146412", "5146559", @@ -8059,11 +10758,8 @@ "5149746", "5714973", "5768880", - "5769068", "5769072", "5771350", - "5771982", - "5772063", "5772196", "5772210", "5772351", @@ -8074,9 +10770,7 @@ "6097214", "7443518", "7681733", - "7752082", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -8086,36 +10780,34 @@ "8537359", "9101339" ], - "class_count": 323, - "truth_images_in_retained_classes": 44853, - "accepted_predictions_in_retained_classes": 41099, + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39130, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8289044913540222, - "precision": 0.8454663089232555, - "recall": 0.8289044913540222, - "f1": 0.8200672672516621 + "accuracy": 0.8236153818021188, + "precision": 0.8538220455561395, + "recall": 0.8236153818021188, + "f1": 0.8231516237390822 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "zero", "rank": "species", - "cutoff": 5, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", "1737542", "1739922", "1741341", "1742142", "1743532", - "1744782", "1746440", "1746775", "1746832", @@ -8127,6 +10819,7 @@ "1762244", "1763610", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -8135,7 +10828,6 @@ "1770307", "1770477", "1770880", - "1771040", "1771214", "1771509", "1771698", @@ -8143,7 +10835,6 @@ "1772179", "1777253", "1778074", - "1780150", "1782672", "1782763", "1782777", @@ -8154,7 +10845,6 @@ "1785888", "1785895", "1787610", - "1789267", "1789695", "1789730", "1789745", @@ -8187,7 +10877,6 @@ "1820372", "1821911", "1822346", - "1822587", "1822610", "1822796", "1822819", @@ -8198,18 +10887,16 @@ "1825971", "1825983", "1826022", - "1827125", "1828162", "1828637", - "1830410", "1830937", "1835156", "1841261", - "1845270", "1864377", "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -8224,7 +10911,6 @@ "1887108", "1887290", "1888759", - "1889942", "1890187", "1890576", "1891473", @@ -8238,13 +10924,9 @@ "1956599", "1957570", "1957572", - "1957816", "1957845", - "1957852", - "1959383", "1959914", "1960617", - "1962204", "1962265", "1962434", "1962636", @@ -8257,7 +10939,6 @@ "1965208", "1965763", "1965841", - "1965996", "1966017", "1967815", "1968678", @@ -8266,17 +10947,14 @@ "1970284", "1972187", "1972250", - "1972342", "1973414", "1973467", - "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -8313,12 +10991,10 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", - "4531687", "4531690", "4532297", "4532544", @@ -8330,8 +11006,6 @@ "4534207", "4534290", "4534398", - "4534485", - "4534538", "4534540", "4534719", "4534872", @@ -8342,7 +11016,6 @@ "5104442", "5104558", "5105339", - "5109821", "5110200", "5110213", "5110670", @@ -8350,7 +11023,6 @@ "5111574", "5112283", "5113078", - "5113234", "5114198", "5115771", "5115777", @@ -8362,16 +11034,13 @@ "5124143", "5124233", "5125689", - "5126212", "5142870", - "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", - "5144190", "5144426", "5144534", "5144543", @@ -8393,11 +11062,9 @@ "5149746", "5714973", "5768880", - "5769068", "5769072", "5771350", "5771982", - "5772063", "5772196", "5772210", "5772351", @@ -8409,7 +11076,6 @@ "7443518", "7681733", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -8419,35 +11085,33 @@ "8537359", "9101339" ], - "class_count": 313, - "truth_images_in_retained_classes": 44730, - "accepted_predictions_in_retained_classes": 41010, + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39626, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8393339798681654, - "precision": 0.8518517079862864, - "recall": 0.8393339798681654, - "f1": 0.8287239769887177 + "accuracy": 0.817676149634451, + "precision": 0.8513280853428178, + "recall": 0.817676149634451, + "f1": 0.8183308171409442 } }, { - "model": "v2", + "model": "onnx", "scope": "zero", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", "1739922", "1741341", "1742142", "1743532", - "1744782", "1746775", "1746832", "1746876", @@ -8525,11 +11189,9 @@ "1826022", "1828162", "1828637", - "1830410", "1830937", "1835156", "1841261", - "1862580", "1864377", "1872368", "1875008", @@ -8563,7 +11225,6 @@ "1957845", "1959914", "1960617", - "1962204", "1962265", "1962434", "1962636", @@ -8576,7 +11237,6 @@ "1965208", "1965763", "1965841", - "1965996", "1966017", "1967815", "1968678", @@ -8716,42 +11376,47 @@ "8537359", "9101339" ], - "class_count": 277, - "truth_images_in_retained_classes": 43835, - "accepted_predictions_in_retained_classes": 38825, + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 39144, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.7994793772053351, - "precision": 0.8464715182316644, - "recall": 0.7994793772053351, - "f1": 0.8020074761104699 + "accuracy": 0.8241941328780684, + "precision": 0.8539641765770972, + "recall": 0.8241941328780684, + "f1": 0.823454379288907 } }, { - "model": "v2", + "model": "torch-tta", "scope": "zero", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737491", + "1737542", "1739922", "1741341", "1742142", "1743532", + "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", + "1761041", "1762244", "1763610", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -8807,6 +11472,7 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", "1822610", "1822796", @@ -8827,6 +11493,7 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -8844,6 +11511,7 @@ "1890187", "1890576", "1891473", + "1891493", "1951557", "1951649", "1952014", @@ -8891,6 +11559,7 @@ "1982541", "1982636", "1982885", + "1983442", "1983525", "1983648", "1983755", @@ -8937,7 +11606,9 @@ "4534719", "4534872", "4534909", + "5101678", "5102951", + "5103451", "5104442", "5104558", "5105339", @@ -8945,6 +11616,7 @@ "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -8987,6 +11659,7 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", "5772210", "5772351", @@ -9007,46 +11680,42 @@ "8537359", "9101339" ], - "class_count": 271, - "truth_images_in_retained_classes": 43652, - "accepted_predictions_in_retained_classes": 38723, + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40603, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8043288259343255, - "precision": 0.849759710747019, - "recall": 0.8043288259343255, - "f1": 0.8062320354321301 + "accuracy": 0.8470429977027221, + "precision": 0.8707776696179904, + "recall": 0.8470429977027221, + "f1": 0.8452968243564886 } }, { - "model": "torch", + "model": "torch-tta", "scope": "zero", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737542", "1739922", "1741341", "1742142", "1743532", - "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", - "1761041", "1762244", "1763610", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -9102,7 +11771,6 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", "1822610", "1822796", @@ -9123,7 +11791,6 @@ "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -9141,7 +11808,6 @@ "1890187", "1890576", "1891473", - "1891493", "1951557", "1951649", "1952014", @@ -9189,8 +11855,6 @@ "1982541", "1982636", "1982885", - "1983441", - "1983442", "1983525", "1983648", "1983755", @@ -9237,9 +11901,7 @@ "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", @@ -9247,7 +11909,6 @@ "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", "5114198", @@ -9272,7 +11933,6 @@ "5144534", "5144543", "5145009", - "5146342", "5146379", "5146412", "5146559", @@ -9291,7 +11951,6 @@ "5768880", "5769072", "5771350", - "5771982", "5772196", "5772210", "5772351", @@ -9312,42 +11971,47 @@ "8537359", "9101339" ], - "class_count": 285, - "truth_images_in_retained_classes": 44492, - "accepted_predictions_in_retained_classes": 39612, + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40056, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8171258284359165, - "precision": 0.8511929361965738, - "recall": 0.8171258284359165, - "f1": 0.8180429337935673 + "accuracy": 0.8513634723466735, + "precision": 0.8721124495623291, + "recall": 0.8513634723466735, + "f1": 0.8483517909129423 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737491", + "1737542", "1739922", "1741341", "1742142", "1743532", + "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", + "1761041", "1762244", "1763610", "1766137", + "1766210", "1766274", "1767597", "1769103", @@ -9403,6 +12067,7 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", "1822610", "1822796", @@ -9423,6 +12088,7 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", "1879252", "1879970", @@ -9440,6 +12106,7 @@ "1890187", "1890576", "1891473", + "1891493", "1951557", "1951649", "1952014", @@ -9487,6 +12154,7 @@ "1982541", "1982636", "1982885", + "1983442", "1983525", "1983648", "1983755", @@ -9533,7 +12201,9 @@ "4534719", "4534872", "4534909", + "5101678", "5102951", + "5103451", "5104442", "5104558", "5105339", @@ -9541,6 +12211,7 @@ "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -9583,6 +12254,7 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", "5772210", "5772351", @@ -9603,46 +12275,42 @@ "8537359", "9101339" ], - "class_count": 271, - "truth_images_in_retained_classes": 43652, - "accepted_predictions_in_retained_classes": 39130, + "class_count": 284, + "truth_images_in_retained_classes": 44470, + "accepted_predictions_in_retained_classes": 40609, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8236153818021188, - "precision": 0.8538220455561393, - "recall": 0.8236153818021188, - "f1": 0.8231516237390821 + "accuracy": 0.8473047730749205, + "precision": 0.870692084397175, + "recall": 0.8473047730749205, + "f1": 0.8452587628826032 } }, { - "model": "onnx", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737542", "1739922", "1741341", "1742142", "1743532", - "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", - "1761041", "1762244", "1763610", "1766137", - "1766210", "1766274", "1767597", "1769103", @@ -9698,7 +12366,6 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", "1822610", "1822796", @@ -9719,7 +12386,6 @@ "1872368", "1875008", "1875327", - "1875869", "1876329", "1879252", "1879970", @@ -9737,7 +12403,6 @@ "1890187", "1890576", "1891473", - "1891493", "1951557", "1951649", "1952014", @@ -9785,8 +12450,6 @@ "1982541", "1982636", "1982885", - "1983441", - "1983442", "1983525", "1983648", "1983755", @@ -9833,9 +12496,7 @@ "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", @@ -9843,7 +12504,6 @@ "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", "5114198", @@ -9868,7 +12528,6 @@ "5144534", "5144543", "5145009", - "5146342", "5146379", "5146412", "5146559", @@ -9887,7 +12546,6 @@ "5768880", "5769072", "5771350", - "5771982", "5772196", "5772210", "5772351", @@ -9908,84 +12566,63 @@ "8537359", "9101339" ], - "class_count": 285, - "truth_images_in_retained_classes": 44492, - "accepted_predictions_in_retained_classes": 39626, + "class_count": 271, + "truth_images_in_retained_classes": 43652, + "accepted_predictions_in_retained_classes": 40062, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.817676149634451, - "precision": 0.8513280853428178, - "recall": 0.817676149634451, - "f1": 0.8183308171409442 + "accuracy": 0.8516378052090512, + "precision": 0.8720227587774156, + "recall": 0.8516378052090512, + "f1": 0.8483119036118965 } }, { - "model": "onnx", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 10, - "domain": "common", + "cutoff": 20, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", - "1741341", "1742142", "1743532", "1746775", "1746832", - "1746876", "1758878", "1759153", - "1760104", - "1762244", "1763610", - "1766137", "1766274", - "1767597", "1769103", "1769566", "1769897", - "1770307", "1770477", "1770880", - "1771214", "1771509", "1771698", "1772169", "1772179", - "1777253", - "1778074", - "1782672", "1782763", "1782777", "1782927", "1782948", - "1783043", "1785286", "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", - "1795215", "1796145", - "1796678", - "1797258", "1797479", "1798807", - "1799132", - "1800004", "1800032", "1801896", "1802280", @@ -9996,30 +12633,23 @@ "1812394", "1813114", "1819145", - "1819873", "1820039", "1820372", "1822346", "1822610", - "1822796", - "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", - "1826022", "1828162", - "1828637", - "1830937", - "1835156", "1841261", + "1862580", "1864377", "1872368", "1875008", "1875327", - "1876329", "1879252", "1879970", "1881151", @@ -10030,14 +12660,10 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", - "1888759", "1890187", "1890576", - "1891473", "1951557", - "1951649", "1952014", "1952532", "1952806", @@ -10047,10 +12673,8 @@ "1957572", "1957845", "1959914", - "1960617", "1962265", "1962434", - "1962636", "1962990", "1963306", "1963446", @@ -10059,20 +12683,16 @@ "1965166", "1965208", "1965763", - "1965841", "1966017", - "1967815", "1968678", "1968867", "1970213", - "1970284", "1972187", "1972250", "1973414", "1973467", "1975897", "1976163", - "1977003", "1978114", "1978445", "1978776", @@ -10082,17 +12702,14 @@ "1982525", "1982541", "1982636", - "1982885", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", "1986220", - "1986522", "1986575", "1988593", "1988881", @@ -10112,7 +12729,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -10120,25 +12736,19 @@ "4532886", "4532890", "4533136", - "4533273", - "4534166", - "4534207", "4534290", - "4534398", "4534540", "4534719", "4534872", "4534909", "5102951", "5104442", - "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", "5112283", - "5113078", "5114198", "5115771", "5115777", @@ -10159,14 +12769,12 @@ "5143697", "5144426", "5144534", - "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", - "5147608", "5148424", "5148436", "5148462", @@ -10176,112 +12784,77 @@ "5149665", "5149746", "5714973", - "5768880", "5769072", "5771350", "5772196", "5772210", - "5772351", "5880533", "5880552", "5880559", "5884851", "6097214", - "7443518", "7681733", - "7780930", "8015895", "8223165", "8262357", "8361848", "8397564", "8421569", - "8537359", "9101339" ], - "class_count": 271, - "truth_images_in_retained_classes": 43652, - "accepted_predictions_in_retained_classes": 39144, + "class_count": 216, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 37641, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8241941328780684, - "precision": 0.853964176577097, - "recall": 0.8241941328780684, - "f1": 0.8234543792889069 + "accuracy": 0.8082495823011705, + "precision": 0.8625621889375423, + "recall": 0.8082495823011705, + "f1": 0.8168473325998348 } }, { - "model": "torch-tta", + "model": "v2", "scope": "zero", "rank": "species", - "cutoff": 10, - "domain": "per_model", + "cutoff": 20, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", "1742142", "1743532", - "1746440", - "1746775", "1746832", - "1746876", - "1758878", "1759153", - "1760104", - "1761041", - "1762244", "1763610", - "1766137", - "1766210", "1766274", - "1767597", "1769103", "1769566", "1769897", - "1770307", "1770477", "1770880", - "1771214", "1771509", "1771698", "1772169", "1772179", - "1777253", - "1778074", - "1782672", "1782763", "1782777", "1782927", - "1782948", - "1783043", "1785286", "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", - "1795215", "1796145", - "1796678", - "1797258", "1797479", "1798807", - "1799132", - "1800004", "1800032", "1801896", "1802280", @@ -10292,32 +12865,21 @@ "1812394", "1813114", "1819145", - "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822610", - "1822796", - "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", - "1826022", "1828162", - "1828637", - "1830937", - "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1875869", - "1876329", "1879252", "1879970", "1881151", @@ -10328,15 +12890,10 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", - "1888759", "1890187", "1890576", - "1891473", - "1891493", "1951557", - "1951649", "1952014", "1952532", "1952806", @@ -10346,10 +12903,8 @@ "1957572", "1957845", "1959914", - "1960617", "1962265", "1962434", - "1962636", "1962990", "1963306", "1963446", @@ -10358,20 +12913,15 @@ "1965166", "1965208", "1965763", - "1965841", "1966017", - "1967815", "1968678", "1968867", "1970213", - "1970284", "1972187", "1972250", - "1973414", "1973467", "1975897", "1976163", - "1977003", "1978114", "1978445", "1978776", @@ -10381,18 +12931,14 @@ "1982525", "1982541", "1982636", - "1982885", - "1983442", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", "1986220", - "1986522", "1986575", "1988593", "1988881", @@ -10412,7 +12958,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -10420,28 +12965,19 @@ "4532886", "4532890", "4533136", - "4533273", - "4534166", - "4534207", "4534290", - "4534398", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", - "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", - "5111574", "5112283", - "5113078", "5114198", "5115771", "5115777", @@ -10462,14 +12998,12 @@ "5143697", "5144426", "5144534", - "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", - "5147608", "5148424", "5148436", "5148462", @@ -10479,108 +13013,81 @@ "5149665", "5149746", "5714973", - "5768880", "5769072", "5771350", - "5771982", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", "5884851", "6097214", - "7443518", "7681733", - "7780930", "8015895", "8223165", "8262357", "8361848", "8397564", "8421569", - "8537359", "9101339" ], - "class_count": 284, - "truth_images_in_retained_classes": 44470, - "accepted_predictions_in_retained_classes": 40603, + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37437, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8470429977027221, - "precision": 0.8707776696179902, - "recall": 0.8470429977027221, - "f1": 0.8452968243564886 + "accuracy": 0.8136982479192534, + "precision": 0.8648542018939747, + "recall": 0.8136982479192534, + "f1": 0.8209483082438459 } }, { - "model": "torch-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 10, - "domain": "common", + "cutoff": 20, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", "1741341", "1742142", "1743532", - "1746775", "1746832", - "1746876", - "1758878", "1759153", "1760104", - "1762244", "1763610", - "1766137", "1766274", - "1767597", "1769103", "1769566", "1769897", - "1770307", "1770477", "1770880", - "1771214", "1771509", "1771698", "1772169", "1772179", - "1777253", - "1778074", - "1782672", "1782763", "1782777", "1782927", "1782948", - "1783043", "1785286", "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", "1795215", "1796145", - "1796678", - "1797258", "1797479", "1798807", - "1799132", - "1800004", "1800032", "1801896", "1802280", @@ -10591,12 +13098,10 @@ "1812394", "1813114", "1819145", - "1819873", "1820039", "1820372", + "1821911", "1822346", - "1822610", - "1822796", "1822819", "1823726", "1825064", @@ -10604,17 +13109,12 @@ "1825156", "1825971", "1825983", - "1826022", "1828162", - "1828637", - "1830937", - "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1876329", "1879252", "1879970", "1881151", @@ -10630,9 +13130,7 @@ "1888759", "1890187", "1890576", - "1891473", "1951557", - "1951649", "1952014", "1952532", "1952806", @@ -10642,10 +13140,8 @@ "1957572", "1957845", "1959914", - "1960617", "1962265", "1962434", - "1962636", "1962990", "1963306", "1963446", @@ -10654,20 +13150,16 @@ "1965166", "1965208", "1965763", - "1965841", "1966017", - "1967815", "1968678", "1968867", "1970213", "1970284", "1972187", "1972250", - "1973414", "1973467", "1975897", "1976163", - "1977003", "1978114", "1978445", "1978776", @@ -10677,17 +13169,15 @@ "1982525", "1982541", "1982636", - "1982885", + "1983442", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", "1986220", - "1986522", "1986575", "1988593", "1988881", @@ -10707,7 +13197,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -10715,25 +13204,21 @@ "4532886", "4532890", "4533136", - "4533273", - "4534166", "4534207", "4534290", - "4534398", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", - "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", "5112283", - "5113078", "5114198", "5115771", "5115777", @@ -10754,14 +13239,12 @@ "5143697", "5144426", "5144534", - "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", - "5147608", "5148424", "5148436", "5148462", @@ -10771,12 +13254,9 @@ "5149665", "5149746", "5714973", - "5768880", "5769072", "5771350", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", @@ -10784,99 +13264,67 @@ "6097214", "7443518", "7681733", - "7780930", "8015895", "8223165", "8262357", "8361848", "8397564", "8421569", - "8537359", "9101339" ], - "class_count": 271, - "truth_images_in_retained_classes": 43652, - "accepted_predictions_in_retained_classes": 40056, + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38417, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8513634723466735, - "precision": 0.872112449562329, - "recall": 0.8513634723466735, - "f1": 0.8483517909129424 + "accuracy": 0.8271275510654174, + "precision": 0.8780867959533072, + "recall": 0.8271275510654174, + "f1": 0.8390189376702701 } }, { - "model": "onnx-tta", + "model": "torch", "scope": "zero", "rank": "species", - "cutoff": 10, - "domain": "per_model", + "cutoff": 20, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", "1742142", "1743532", - "1746440", - "1746775", "1746832", - "1746876", - "1758878", "1759153", - "1760104", - "1761041", - "1762244", "1763610", - "1766137", - "1766210", "1766274", - "1767597", "1769103", "1769566", "1769897", - "1770307", "1770477", "1770880", - "1771214", "1771509", "1771698", "1772169", "1772179", - "1777253", - "1778074", - "1782672", "1782763", "1782777", "1782927", - "1782948", - "1783043", "1785286", "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", - "1795215", "1796145", - "1796678", - "1797258", "1797479", "1798807", - "1799132", - "1800004", "1800032", "1801896", "1802280", @@ -10887,32 +13335,21 @@ "1812394", "1813114", "1819145", - "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822610", - "1822796", - "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", - "1826022", "1828162", - "1828637", - "1830937", - "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1875869", - "1876329", "1879252", "1879970", "1881151", @@ -10923,15 +13360,10 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", - "1888759", "1890187", "1890576", - "1891473", - "1891493", "1951557", - "1951649", "1952014", "1952532", "1952806", @@ -10941,10 +13373,8 @@ "1957572", "1957845", "1959914", - "1960617", "1962265", "1962434", - "1962636", "1962990", "1963306", "1963446", @@ -10953,20 +13383,15 @@ "1965166", "1965208", "1965763", - "1965841", "1966017", - "1967815", "1968678", "1968867", "1970213", - "1970284", "1972187", "1972250", - "1973414", "1973467", "1975897", "1976163", - "1977003", "1978114", "1978445", "1978776", @@ -10976,18 +13401,14 @@ "1982525", "1982541", "1982636", - "1982885", - "1983442", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", "1986220", - "1986522", "1986575", "1988593", "1988881", @@ -11007,7 +13428,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -11015,28 +13435,19 @@ "4532886", "4532890", "4533136", - "4533273", - "4534166", - "4534207", "4534290", - "4534398", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", - "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", - "5111574", "5112283", - "5113078", "5114198", "5115771", "5115777", @@ -11057,14 +13468,12 @@ "5143697", "5144426", "5144534", - "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", - "5147608", "5148424", "5148436", "5148462", @@ -11074,108 +13483,81 @@ "5149665", "5149746", "5714973", - "5768880", "5769072", "5771350", - "5771982", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", "5884851", "6097214", - "7443518", "7681733", - "7780930", "8015895", "8223165", "8262357", "8361848", "8397564", "8421569", - "8537359", "9101339" ], - "class_count": 284, - "truth_images_in_retained_classes": 44470, - "accepted_predictions_in_retained_classes": 40609, + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37796, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8473047730749205, - "precision": 0.8706920843971752, - "recall": 0.8473047730749205, - "f1": 0.8452587628826029 + "accuracy": 0.8339089780399618, + "precision": 0.8827194680660194, + "recall": 0.8339089780399618, + "f1": 0.8454184870285215 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "zero", "rank": "species", - "cutoff": 10, - "domain": "common", + "cutoff": 20, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", "1741341", "1742142", "1743532", - "1746775", "1746832", - "1746876", - "1758878", "1759153", "1760104", - "1762244", "1763610", - "1766137", "1766274", - "1767597", "1769103", "1769566", "1769897", - "1770307", "1770477", "1770880", - "1771214", "1771509", "1771698", "1772169", "1772179", - "1777253", - "1778074", - "1782672", "1782763", "1782777", "1782927", "1782948", - "1783043", "1785286", "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", "1795215", "1796145", - "1796678", - "1797258", "1797479", "1798807", - "1799132", - "1800004", "1800032", "1801896", "1802280", @@ -11186,12 +13568,10 @@ "1812394", "1813114", "1819145", - "1819873", "1820039", "1820372", + "1821911", "1822346", - "1822610", - "1822796", "1822819", "1823726", "1825064", @@ -11199,17 +13579,12 @@ "1825156", "1825971", "1825983", - "1826022", "1828162", - "1828637", - "1830937", - "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1876329", "1879252", "1879970", "1881151", @@ -11225,9 +13600,7 @@ "1888759", "1890187", "1890576", - "1891473", "1951557", - "1951649", "1952014", "1952532", "1952806", @@ -11237,10 +13610,8 @@ "1957572", "1957845", "1959914", - "1960617", "1962265", "1962434", - "1962636", "1962990", "1963306", "1963446", @@ -11249,20 +13620,16 @@ "1965166", "1965208", "1965763", - "1965841", "1966017", - "1967815", "1968678", "1968867", "1970213", "1970284", "1972187", "1972250", - "1973414", "1973467", "1975897", "1976163", - "1977003", "1978114", "1978445", "1978776", @@ -11272,17 +13639,15 @@ "1982525", "1982541", "1982636", - "1982885", + "1983442", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", "1986220", - "1986522", "1986575", "1988593", "1988881", @@ -11302,7 +13667,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -11310,25 +13674,21 @@ "4532886", "4532890", "4533136", - "4533273", - "4534166", "4534207", "4534290", - "4534398", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", - "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", "5112283", - "5113078", "5114198", "5115771", "5115777", @@ -11349,14 +13709,12 @@ "5143697", "5144426", "5144534", - "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", - "5147608", "5148424", "5148436", "5148462", @@ -11366,12 +13724,9 @@ "5149665", "5149746", "5714973", - "5768880", "5769072", "5771350", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", @@ -11379,44 +13734,39 @@ "6097214", "7443518", "7681733", - "7780930", "8015895", "8223165", "8262357", "8361848", "8397564", "8421569", - "8537359", "9101339" ], - "class_count": 271, - "truth_images_in_retained_classes": 43652, - "accepted_predictions_in_retained_classes": 40062, + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38429, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8516378052090512, - "precision": 0.8720227587774156, - "recall": 0.8516378052090512, - "f1": 0.8483119036118962 + "accuracy": 0.8276292942912182, + "precision": 0.8782629747089125, + "recall": 0.8276292942912182, + "f1": 0.8392847349307762 } }, { - "model": "v2", + "model": "onnx", "scope": "zero", "rank": "species", "cutoff": 20, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1734704", "1742142", "1743532", - "1746775", "1746832", - "1758878", "1759153", "1763610", "1766274", @@ -11432,7 +13782,6 @@ "1782763", "1782777", "1782927", - "1782948", "1785286", "1785888", "1785895", @@ -11459,7 +13808,241 @@ "1820039", "1820372", "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42384, + "accepted_predictions_in_retained_classes": 37811, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8344444924444223, + "precision": 0.8825394050561284, + "recall": 0.8344444924444223, + "f1": 0.8455033297180404 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1741341", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", "1822610", + "1822819", "1823726", "1825064", "1825077", @@ -11468,7 +14051,6 @@ "1825983", "1828162", "1841261", - "1862580", "1864377", "1872368", "1875008", @@ -11483,7 +14065,9 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", + "1888759", "1890187", "1890576", "1951557", @@ -11510,9 +14094,9 @@ "1968678", "1968867", "1970213", + "1970284", "1972187", "1972250", - "1973414", "1973467", "1975897", "1976163", @@ -11525,6 +14109,7 @@ "1982525", "1982541", "1982636", + "1983442", "1983525", "1983648", "1983755", @@ -11559,11 +14144,13 @@ "4532886", "4532890", "4533136", + "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", "5105339", @@ -11616,6 +14203,7 @@ "5880559", "5884851", "6097214", + "7443518", "7681733", "8015895", "8223165", @@ -11625,20 +14213,20 @@ "8421569", "9101339" ], - "class_count": 216, - "truth_images_in_retained_classes": 42698, - "accepted_predictions_in_retained_classes": 37641, + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39483, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8082495823011705, - "precision": 0.8625621889375423, - "recall": 0.8082495823011705, - "f1": 0.8168473325998341 + "accuracy": 0.8552687902032574, + "precision": 0.8920154706737625, + "recall": 0.8552687902032574, + "f1": 0.8618363751815307 } }, { - "model": "v2", + "model": "torch-tta", "scope": "zero", "rank": "species", "cutoff": 20, @@ -11855,18 +14443,18 @@ ], "class_count": 208, "truth_images_in_retained_classes": 42384, - "accepted_predictions_in_retained_classes": 37437, + "accepted_predictions_in_retained_classes": 38766, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8136982479192534, - "precision": 0.8648542018939746, - "recall": 0.8136982479192534, - "f1": 0.8209483082438455 + "accuracy": 0.859934317761158, + "precision": 0.8943362486856059, + "recall": 0.859934317761158, + "f1": 0.8655942697573586 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 20, @@ -11875,11 +14463,11 @@ "1732063", "1732416", "1734453", - "1734704", "1741341", "1742142", "1743532", "1746832", + "1758878", "1759153", "1760104", "1763610", @@ -11896,477 +14484,6 @@ "1782763", "1782777", "1782927", - "1782948", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1821911", - "1822346", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 222, - "truth_images_in_retained_classes": 43361, - "accepted_predictions_in_retained_classes": 38417, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8271275510654174, - "precision": 0.878086795953307, - "recall": 0.8271275510654174, - "f1": 0.8390189376702695 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1742142", - "1743532", - "1746832", - "1759153", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 208, - "truth_images_in_retained_classes": 42384, - "accepted_predictions_in_retained_classes": 37796, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8339089780399618, - "precision": 0.8827194680660193, - "recall": 0.8339089780399618, - "f1": 0.8454184870285211 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746832", - "1759153", - "1760104", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1782948", "1785286", "1785888", "1785895", @@ -12395,6 +14512,7 @@ "1820372", "1821911", "1822346", + "1822610", "1822819", "1823726", "1825064", @@ -12550,6 +14668,7 @@ "5769072", "5771350", "5772196", + "5772210", "5880533", "5880552", "5880559", @@ -12565,20 +14684,20 @@ "8421569", "9101339" ], - "class_count": 222, - "truth_images_in_retained_classes": 43361, - "accepted_predictions_in_retained_classes": 38429, + "class_count": 223, + "truth_images_in_retained_classes": 43375, + "accepted_predictions_in_retained_classes": 39484, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8276292942912182, - "precision": 0.8782629747089122, - "recall": 0.8276292942912182, - "f1": 0.8392847349307754 + "accuracy": 0.8552572257583305, + "precision": 0.8920297055771915, + "recall": 0.8552572257583305, + "f1": 0.8618121872907232 } }, { - "model": "onnx", + "model": "onnx-tta", "scope": "zero", "rank": "species", "cutoff": 20, @@ -12795,1685 +14914,145 @@ ], "class_count": 208, "truth_images_in_retained_classes": 42384, - "accepted_predictions_in_retained_classes": 37811, + "accepted_predictions_in_retained_classes": 38767, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8344444924444223, - "precision": 0.8825394050561279, - "recall": 0.8344444924444223, - "f1": 0.8455033297180401 + "accuracy": 0.8599219193418374, + "precision": 0.8943515101445709, + "recall": 0.8599219193418374, + "f1": 0.8655683375475027 } }, { - "model": "torch-tta", + "model": "v2", "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1741341", - "1742142", - "1743532", - "1746832", - "1758878", - "1759153", - "1760104", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 223, - "truth_images_in_retained_classes": 43375, - "accepted_predictions_in_retained_classes": 39483, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8552687902032574, - "precision": 0.8920154706737624, - "recall": 0.8552687902032574, - "f1": 0.8618363751815306 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1742142", - "1743532", - "1746832", - "1759153", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 208, - "truth_images_in_retained_classes": 42384, - "accepted_predictions_in_retained_classes": 38766, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.859934317761158, - "precision": 0.8943362486856059, - "recall": 0.859934317761158, - "f1": 0.8655942697573593 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1741341", - "1742142", - "1743532", - "1746832", - "1758878", - "1759153", - "1760104", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 223, - "truth_images_in_retained_classes": 43375, - "accepted_predictions_in_retained_classes": 39484, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8552572257583305, - "precision": 0.8920297055771915, - "recall": 0.8552572257583305, - "f1": 0.8618121872907233 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1742142", - "1743532", - "1746832", - "1759153", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1966017", - "1968678", - "1968867", - "1970213", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 208, - "truth_images_in_retained_classes": 42384, - "accepted_predictions_in_retained_classes": 38767, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8599219193418374, - "precision": 0.894351510144571, - "recall": 0.8599219193418374, - "f1": 0.8655683375475033 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744049", - "1744761", - "1745076", - "1746012", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1760588", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3256950", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4533660", - "4534405", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9118632", - "9146182", - "9181278", - "9210500" - ], - "class_count": 319, - "truth_images_in_retained_classes": 52782, - "accepted_predictions_in_retained_classes": 45642, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7968044107211967, - "precision": 0.6975226462533961, - "recall": 0.7968044107211967, - "f1": 0.6959574069830721 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 0, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746012", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1760588", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3256950", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4533660", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9118632", - "9146182", - "9181278", - "9210500" - ], - "class_count": 317, - "truth_images_in_retained_classes": 52780, - "accepted_predictions_in_retained_classes": 45639, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.80183156788663, - "precision": 0.7019234200467929, - "recall": 0.80183156788663, - "f1": 0.7003483054498423 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 0, + "rank": "genus", + "cutoff": -1, "domain": "per_model", "classes": [ + "11064851", + "11495707", + "12031311", "12105049", + "1730815", + "1731584", + "1731817", "1732062", "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", "1733840", "1734388", "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736409", + "1736444", + "1736460", + "1736725", + "1736895", + "1737021", "1737335", "1737519", "1737647", "1737701", "1738049", + "1738143", + "1738215", + "1738242", + "1738265", "1738583", + "1739000", + "1739060", + "1739418", + "1739446", "1739724", + "1740664", + "1741141", "1741338", + "1741540", + "1741585", "1741717", "1742061", + "1742345", "1742419", + "1743188", + "1743467", + "1743485", "1743516", + "1743637", + "1743690", + "1743723", "1743762", + "1743811", + "1744049", + "1744133", + "1744237", + "1744240", + "1744587", + "1744691", "1744761", + "1744928", "1745076", + "1745086", + "1745549", "1746012", + "1746399", "1746437", + "1746600", "1746749", + "1747044", "1747242", "1747949", + "1748277", + "1748799", + "1748889", + "1749137", + "1749712", + "1749732", + "1750339", + "1750759", + "1751227", "1758873", "1759029", "1759152", + "1759405", + "1759552", "1760088", "1760588", + "1760738", + "1760849", "1761017", + "1761401", + "1761728", + "1761857", "1762232", + "1762605", + "1763285", "1763597", "1764920", + "1765763", "1766123", "1766265", "1766366", + "1766624", + "1766708", "1767590", "1767644", "1768106", + "1768136", "1768222", "1768302", "1768411", + "1768691", "1769098", "1769504", "1769819", @@ -14481,69 +15060,112 @@ "1770123", "1770274", "1770396", + "1770592", "1771501", "1772155", + "1772359", + "1772783", "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", + "1778114", + "1778136", + "1778574", "1778695", + "1779429", + "1779630", "1779682", "1780139", + "1780300", "1781683", "1782524", + "1782607", "1782659", "1783394", "1784809", + "1785140", "1785281", "1785873", + "1785931", "1786886", + "1786930", + "1787061", "1787107", + "1787399", "1787522", + "1788466", + "1788764", + "1788916", + "1789061", "1789246", + "1789474", "1789545", "1789671", + "1789826", "1789978", + "1790356", + "1790601", + "1790683", + "1790794", "1791382", "1791874", + "1792055", + "1792280", "1792324", "1792405", "1793856", + "1793981", + "1794099", "1794570", "1795126", + "1795443", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", "1798083", "1798340", + "1798362", + "1798377", "1798440", + "1798478", "1798514", "1798902", "1799687", "1799702", + "1799789", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", + "1808720", "1808961", "1809069", "1810097", + "1811612", "1812976", + "1814095", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -14551,90 +15173,252 @@ "1822545", "1822778", "1823714", + "1824090", + "1824246", "1825057", "1825076", "1825121", "1825444", + "1825535", "1825963", "1826021", "1826192", "1827111", + "1827279", "1827547", + "1827641", "1828161", "1828636", + "1829298", + "1829702", + "1830036", + "1830118", "1830379", + "1830630", "1830909", "1831127", + "1831272", "1831446", + "1831747", + "1832810", + "1833623", + "1835027", "1835151", + "1835366", + "1835429", "1836898", + "1837168", + "1837338", "1839730", + "1840273", + "1841152", "1841259", + "1841529", + "1842184", + "1842261", + "1843897", "1845266", + "1845958", + "1846094", "1846907", + "1847591", + "1847952", + "1848192", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849514", + "1849628", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851496", + "1852133", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853431", + "1853583", + "1853873", + "1854160", + "1854326", + "1854459", + "1854789", + "1855383", + "1856286", + "1856382", + "1856563", + "1856586", "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1859284", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1861796", "1862568", "1862681", + "1863292", "1863647", "1864355", "1864404", + "1864584", + "1866475", + "1867343", + "1869438", + "1869760", + "1869851", + "1869974", + "1870168", "1870242", + "1870449", + "1870982", "1871206", "1871384", + "1871695", + "1871825", "1872346", "1872845", + "1873021", + "1873074", + "1873408", "1873980", + "1874152", + "1874374", + "1874624", "1874958", + "1875103", "1875317", "1875650", + "1875821", "1875849", + "1875890", "1876280", + "1876391", "1876536", + "1876613", + "1876846", + "1877650", + "1877937", + "1878460", "1878838", "1879226", + "1879451", "1879494", + "1879512", "1879915", "1881145", "1881186", + "1881825", "1882028", + "1882902", "1883132", + "1883373", "1884090", "1884194", "1884425", + "1884886", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1887682", + "1888256", + "1888455", + "1888578", "1888698", + "1889286", "1889936", "1890111", "1890369", "1891054", "1891305", "1891353", + "1894469", + "1894779", + "1898261", + "1898474", + "1906451", + "1909334", + "1911078", + "1912583", + "1918607", + "1920481", + "1920704", + "1929153", + "1938213", + "1938238", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1944007", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", + "1954555", "1954587", "1955508", "1955900", "1956434", "1956522", "1956545", + "1956709", + "1956900", + "1957281", "1957545", "1957620", "1957829", + "1957999", "1958023", + "1958238", "1959381", + "1959409", + "1959668", "1959888", "1960592", "1960966", + "1961066", + "1961188", "1962165", "1962369", "1962632", @@ -14642,6 +15426,8 @@ "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -14649,36 +15435,55 @@ "1965888", "1965967", "1966346", + "1966883", "1966929", + "1966982", "1967196", "1967242", + "1967263", + "1967583", "1967722", "1968199", "1968665", "1968854", + "1968975", + "1969918", "1970179", + "1970226", "1970279", "1970574", + "1971819", "1972114", "1972425", "1973405", "1973909", "1975292", + "1975336", "1975542", "1975570", + "1975729", + "1975783", "1975885", "1976155", + "1976515", "1976949", + "1977104", + "1977419", + "1977775", + "1978019", "1978112", "1978364", "1978506", "1978749", + "1978814", "1978974", "1979106", "1979243", "1979727", "1980342", + "1980511", "1980718", + "1981690", "1982367", "1984922", "1985507", @@ -14686,7 +15491,9 @@ "1986081", "1987269", "1987509", + "1987555", "1987711", + "1987792", "1988533", "1988779", "1988876", @@ -14694,463 +15501,283 @@ "1989996", "1990136", "1990531", + "1990677", + "1991135", "1991357", + "1991817", "1991946", + "1993403", "2278098", + "3255940", + "3255956", + "3256169", + "3256188", "3256294", "3256322", + "3256356", + "3256568", + "3256934", "3256950", + "3257150", "3257220", "3257225", "3257328", + "3257405", + "3257500", "3257694", "3257798", + "3257894", "3261008", + "4301067", "4301098", + "4301121", "4301340", + "4302289", "4404424", + "4404934", "4405245", "4405430", + "4405493", "4406069", + "4406268", + "4406291", + "4406298", "4406360", "4406622", + "4406931", "4407165", "4407354", "4408190", + "4408204", "4524069", + "4524400", + "4524792", "4525072", + "4525607", + "4527338", "4533124", "4533660", - "4534405", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9118632", - "9146182", - "9181278", - "9210500" - ], - "class_count": 319, - "truth_images_in_retained_classes": 52784, - "accepted_predictions_in_retained_classes": 45349, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8128760350980341, - "precision": 0.7169693814982813, - "recall": 0.8128760350980341, - "f1": 0.7220190914539127 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 0, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746012", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1760588", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3256950", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4533660", + "4534405", + "4534456", "4534532", + "4687068", + "4687943", "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5104758", "5105328", "5114254", "5115807", "5116471", + "5119806", + "5123346", + "5123443", + "5130576", + "5135400", "5144176", "5146397", "7236046", + "7236059", + "7236098", + "7354470", "7384515", "7396883", + "7494486", + "7510496", "7721234", "7739898", + "7742506", + "7786896", "7852351", + "8057237", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "9005880", + "9021546", + "9061491", "9065472", + "9073940", + "9078027", "9078901", "9095083", + "9108102", "9118632", "9146182", + "9151414", "9181278", - "9210500" + "9183600", + "9210500", + "9220793", + "9605252" ], - "class_count": 317, - "truth_images_in_retained_classes": 52780, - "accepted_predictions_in_retained_classes": 45344, + "class_count": 691, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8180045905245201, - "precision": 0.721492847627608, - "recall": 0.8180045905245201, - "f1": 0.7265744169520447 + "accuracy": 0.7893807671430488, + "precision": 0.3234152967366763, + "recall": 0.7893807671430488, + "f1": 0.3212885858575979 } }, { - "model": "onnx", + "model": "torch", "scope": "zero", "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11064851", + "11495707", + "12031311", "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", "1732062", "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", "1733840", "1734388", "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", "1737335", "1737519", "1737647", "1737701", "1738049", + "1738143", + "1738215", + "1738242", + "1738265", "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", "1741338", + "1741404", + "1741547", + "1741585", "1741717", "1742061", + "1742345", "1742419", + "1743188", + "1743404", + "1743467", + "1743485", "1743516", + "1743637", + "1743690", "1743762", + "1743811", "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", "1744761", + "1744928", "1745076", + "1745086", + "1745549", "1746012", + "1746172", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", "1758873", "1759029", "1759152", + "1759405", + "1759552", "1760088", "1760588", + "1760738", + "1760849", "1761017", + "1761401", + "1761728", + "1761857", "1762232", + "1763285", "1763597", + "1764524", "1764920", + "1765763", + "1765949", "1766123", "1766265", "1766366", + "1766624", + "1766708", "1767590", "1767644", "1768106", + "1768136", "1768222", "1768302", "1768411", + "1768691", "1769098", "1769504", "1769819", @@ -15158,69 +15785,114 @@ "1770123", "1770274", "1770396", + "1770592", + "1771363", "1771501", "1772155", + "1772359", + "1772783", "1772926", "1775081", + "1775149", + "1775633", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", + "1778136", + "1778497", + "1778574", "1778695", + "1779429", "1779682", "1780139", + "1780300", + "1780913", "1781683", "1782524", + "1782607", "1782659", "1783394", + "1783845", + "1784356", "1784809", + "1785140", "1785281", "1785873", + "1785931", "1786886", + "1787061", "1787107", + "1787399", + "1787496", "1787522", + "1788411", + "1788466", + "1788764", + "1789061", "1789246", + "1789474", "1789545", "1789671", + "1789826", "1789978", + "1790356", + "1790683", + "1790794", "1791382", + "1791769", "1791874", + "1792055", "1792324", "1792405", "1793856", + "1793981", + "1794099", "1794570", "1795126", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", "1798083", "1798340", + "1798362", + "1798377", "1798440", + "1798478", "1798514", "1798902", "1799687", "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", + "1808720", "1808961", "1809069", "1810097", + "1811612", "1812976", + "1814095", + "1814595", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -15228,6 +15900,8 @@ "1822545", "1822778", "1823714", + "1824090", + "1824246", "1825057", "1825076", "1825121", @@ -15236,52 +15910,189 @@ "1826021", "1826192", "1827111", + "1827279", "1827547", + "1827641", "1828161", "1828636", + "1829298", + "1829702", + "1830036", + "1830118", "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", "1830909", "1831127", + "1831272", "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", "1835151", + "1835429", "1836898", + "1837168", + "1837338", + "1838964", "1839730", + "1840273", + "1841152", "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", "1845266", + "1845958", + "1846094", + "1846636", "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", "1862568", "1862681", + "1863292", "1863647", + "1864153", "1864355", "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", "1870242", + "1870449", + "1870982", + "1871157", "1871206", "1871384", + "1871695", + "1871825", "1872346", "1872845", + "1873074", + "1873408", "1873980", + "1874152", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", + "1875821", "1875849", + "1875890", "1876280", + "1876391", "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", "1878838", "1879226", + "1879451", "1879494", + "1879512", "1879915", "1881145", "1881186", + "1881601", + "1881825", "1882028", + "1882413", + "1882902", "1883132", + "1883373", "1884090", "1884194", "1884425", + "1884886", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1887682", + "1888256", + "1888578", "1888698", "1889936", "1890111", @@ -15289,29 +16100,58 @@ "1891054", "1891305", "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", + "1954555", "1954587", "1955508", "1955900", "1956434", "1956522", "1956545", + "1956900", + "1957193", + "1957281", "1957545", "1957620", "1957829", + "1957999", "1958023", + "1958238", "1959381", + "1959409", "1959888", "1960592", "1960966", + "1961066", + "1961188", "1962165", "1962369", "1962632", @@ -15319,6 +16159,8 @@ "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -15326,37 +16168,57 @@ "1965888", "1965967", "1966346", + "1966883", "1966929", + "1966982", "1967196", "1967242", + "1967263", + "1967583", "1967722", "1968199", "1968665", "1968854", + "1968975", + "1969122", "1970179", + "1970226", "1970279", "1970574", + "1971819", "1972114", "1972425", "1973405", "1973909", "1975292", + "1975336", "1975542", "1975570", + "1975729", + "1975783", "1975885", "1976155", + "1976515", "1976949", + "1977104", + "1977419", + "1977775", + "1978019", "1978112", "1978364", "1978506", "1978749", + "1978814", "1978974", "1979106", "1979243", "1979727", "1980342", + "1980511", "1980718", + "1981690", "1982367", + "1984731", "1984922", "1985507", "1985969", @@ -15364,6 +16226,7 @@ "1987269", "1987509", "1987711", + "1987792", "1988533", "1988779", "1988876", @@ -15371,463 +16234,282 @@ "1989996", "1990136", "1990531", + "1990677", + "1991135", "1991357", + "1991817", "1991946", + "1993403", "2278098", + "3255940", + "3255956", + "3256169", + "3256188", "3256294", "3256322", + "3256568", + "3256934", "3256950", + "3257150", + "3257152", "3257220", "3257225", "3257328", + "3257405", + "3257500", "3257694", "3257798", + "3257894", "3261008", + "4301067", "4301098", + "4301121", "4301340", + "4302289", "4404424", + "4404729", + "4404934", "4405245", "4405430", + "4405493", + "4405983", "4406069", + "4406268", + "4406291", + "4406298", "4406360", "4406622", + "4406931", + "4407138", "4407165", + "4407310", "4407354", "4408190", + "4408204", "4524069", + "4524400", + "4524792", + "4524913", "4525072", + "4525607", + "4527338", + "4529834", "4533124", "4533660", "4534405", + "4534456", "4534532", + "4684145", + "4687068", + "4687943", "4689528", + "4706578", + "4706723", + "4709385", "5105328", + "5110641", "5114254", "5115807", "5116471", + "5123346", + "5123443", "5144176", "5146397", "7236046", + "7236091", + "7354470", "7384515", "7396883", + "7494486", "7721234", "7739898", + "7742506", "7852351", + "8057237", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", "9065472", + "9073940", + "9078027", "9078901", "9095083", + "9108102", "9118632", "9146182", + "9151414", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 320, - "truth_images_in_retained_classes": 52785, - "accepted_predictions_in_retained_classes": 45352, + "class_count": 713, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8103934792030048, - "precision": 0.71472382411519, - "recall": 0.8103934792030048, - "f1": 0.7198779438069757 + "accuracy": 0.8053026558890463, + "precision": 0.3221313136590873, + "recall": 0.8053026558890463, + "f1": 0.32303518958456984 } }, { "model": "onnx", "scope": "zero", "rank": "genus", - "cutoff": 0, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746012", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1760588", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3256950", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4533660", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9118632", - "9146182", - "9181278", - "9210500" - ], - "class_count": 317, - "truth_images_in_retained_classes": 52780, - "accepted_predictions_in_retained_classes": 45346, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.818062818122907, - "precision": 0.7214877719774788, - "recall": 0.818062818122907, - "f1": 0.726690668827231 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11064851", + "11495707", + "12031311", "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", "1732062", "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", "1733840", "1734388", "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", "1737335", "1737519", "1737647", "1737701", "1738049", + "1738143", + "1738215", + "1738242", + "1738265", "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", "1741338", + "1741404", + "1741547", + "1741585", "1741717", "1742061", + "1742345", "1742419", + "1743188", + "1743404", + "1743467", + "1743485", "1743516", + "1743637", + "1743690", "1743762", + "1743811", "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", "1744761", + "1744928", "1745076", + "1745086", + "1745549", "1746012", + "1746172", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748201", + "1748277", + "1748368", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", "1758873", "1759029", "1759152", + "1759405", + "1759552", "1760088", "1760588", + "1760738", + "1760849", "1761017", + "1761401", + "1761728", + "1761857", "1762232", + "1763285", "1763597", + "1764524", "1764920", + "1765763", + "1765949", "1766123", "1766265", "1766366", + "1766624", + "1766708", "1767590", "1767644", "1768106", + "1768136", "1768222", "1768302", "1768411", + "1768691", "1769098", "1769504", "1769819", @@ -15835,70 +16517,114 @@ "1770123", "1770274", "1770396", + "1770592", + "1771363", "1771501", "1772155", + "1772359", + "1772783", "1772926", "1775081", + "1775149", + "1775633", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", + "1778136", + "1778497", + "1778574", "1778695", + "1779429", "1779682", "1780139", + "1780300", + "1780913", "1781683", "1782524", "1782607", "1782659", "1783394", + "1783845", + "1784356", "1784809", + "1785140", "1785281", "1785873", + "1785931", "1786886", + "1787061", "1787107", + "1787399", + "1787496", "1787522", + "1788411", + "1788466", + "1788764", + "1789061", "1789246", + "1789474", "1789545", "1789671", + "1789826", "1789978", + "1790356", + "1790683", + "1790794", "1791382", + "1791769", "1791874", + "1792055", "1792324", "1792405", "1793856", + "1793981", + "1794099", "1794570", "1795126", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", "1798083", "1798340", + "1798362", + "1798377", "1798440", + "1798478", "1798514", "1798902", "1799687", "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", + "1808720", "1808961", "1809069", "1810097", + "1811612", "1812976", + "1814095", + "1814595", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -15906,6 +16632,8 @@ "1822545", "1822778", "1823714", + "1824090", + "1824246", "1825057", "1825076", "1825121", @@ -15914,52 +16642,189 @@ "1826021", "1826192", "1827111", + "1827279", "1827547", + "1827641", "1828161", "1828636", + "1829298", + "1829702", + "1830036", + "1830118", "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", "1830909", "1831127", + "1831272", "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", "1835151", + "1835429", "1836898", + "1837168", + "1837338", + "1838964", "1839730", + "1840273", + "1841152", "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", "1845266", + "1845958", + "1846094", + "1846636", "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", "1862568", "1862681", + "1863292", "1863647", + "1864153", "1864355", "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", "1870242", + "1870449", + "1870982", + "1871157", "1871206", "1871384", + "1871695", + "1871825", "1872346", "1872845", + "1873074", + "1873408", "1873980", + "1874152", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", + "1875821", "1875849", + "1875890", "1876280", + "1876391", "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", "1878838", "1879226", + "1879451", "1879494", + "1879512", "1879915", "1881145", "1881186", + "1881601", + "1881825", "1882028", + "1882413", + "1882902", "1883132", + "1883373", "1884090", "1884194", "1884425", + "1884886", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1887682", + "1888256", + "1888578", "1888698", "1889936", "1890111", @@ -15967,29 +16832,58 @@ "1891054", "1891305", "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", + "1954555", "1954587", "1955508", "1955900", "1956434", "1956522", "1956545", + "1956900", + "1957193", + "1957281", "1957545", "1957620", "1957829", + "1957999", "1958023", + "1958238", "1959381", + "1959409", "1959888", "1960592", "1960966", + "1961066", + "1961188", "1962165", "1962369", "1962632", @@ -15997,6 +16891,8 @@ "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -16004,37 +16900,57 @@ "1965888", "1965967", "1966346", + "1966883", "1966929", + "1966982", "1967196", "1967242", + "1967263", + "1967583", "1967722", "1968199", "1968665", "1968854", + "1968975", + "1969122", "1970179", + "1970226", "1970279", "1970574", + "1971819", "1972114", "1972425", "1973405", "1973909", "1975292", + "1975336", "1975542", "1975570", + "1975729", + "1975783", "1975885", "1976155", + "1976515", "1976949", + "1977104", + "1977419", + "1977775", + "1978019", "1978112", "1978364", "1978506", "1978749", + "1978814", "1978974", "1979106", "1979243", "1979727", "1980342", + "1980511", "1980718", + "1981690", "1982367", + "1984731", "1984922", "1985507", "1985969", @@ -16049,462 +16965,273 @@ "1989996", "1990136", "1990531", + "1990677", + "1991135", "1991357", + "1991817", "1991946", + "1993403", "2278098", + "3255940", + "3255956", + "3256169", + "3256188", "3256294", "3256322", + "3256568", + "3256934", "3256950", + "3257150", + "3257152", "3257220", "3257225", "3257328", + "3257405", + "3257500", "3257694", "3257798", + "3257894", "3261008", + "4301067", "4301098", + "4301121", "4301340", + "4302289", "4404424", + "4404729", + "4404934", "4405245", "4405430", + "4405493", + "4405983", "4406069", + "4406268", + "4406291", + "4406298", "4406360", "4406622", + "4406931", + "4407138", "4407165", + "4407310", "4407354", "4408190", + "4408204", "4524069", + "4524400", + "4524792", + "4524913", "4525072", + "4525607", + "4527338", + "4529834", "4533124", "4533660", + "4534405", + "4534456", "4534532", + "4684145", + "4687068", + "4687943", "4689528", + "4706578", + "4706723", + "4709385", "5105328", + "5110641", "5114254", "5115807", "5116471", + "5123346", + "5123443", "5144176", "5146397", "7236046", + "7236091", + "7354470", "7384515", "7396883", + "7494486", "7721234", "7739898", + "7742506", "7852351", + "8057237", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", "9065472", + "9073940", "9078901", "9095083", + "9108102", "9118632", "9146182", + "9151414", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 320, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 45977, + "class_count": 710, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8364835445780064, - "precision": 0.7515734271797273, - "recall": 0.8364835445780064, - "f1": 0.7584406445360485 + "accuracy": 0.8053599793321786, + "precision": 0.32303901654923867, + "recall": 0.8053599793321786, + "f1": 0.32445203101159475 } }, { "model": "torch-tta", "scope": "zero", "rank": "genus", - "cutoff": 0, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746012", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1760588", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3256950", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4533660", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9118632", - "9146182", - "9181278", - "9210500" - ], - "class_count": 317, - "truth_images_in_retained_classes": 52780, - "accepted_predictions_in_retained_classes": 45974, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8443997926339497, - "precision": 0.7586861094558761, - "recall": 0.8443997926339497, - "f1": 0.7656183162509008 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11495707", + "12031311", "12105049", + "1730935", + "1731584", + "1731817", + "1731859", "1732062", "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", "1733840", "1734388", "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", "1737335", "1737519", "1737647", "1737701", "1738049", + "1738143", + "1738215", + "1738242", + "1738265", "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", "1739724", + "1740434", + "1740515", + "1740664", + "1741141", "1741338", + "1741404", + "1741540", + "1741585", "1741717", "1742061", "1742419", + "1743188", + "1743467", + "1743485", "1743516", + "1743637", + "1743690", "1743762", + "1743811", "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", "1744761", "1745076", + "1745086", + "1745549", "1746012", + "1746172", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748201", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", "1758873", "1759029", "1759152", + "1759405", + "1759552", "1760088", "1760588", + "1760738", + "1760849", "1761017", + "1761094", + "1761401", + "1761728", + "1761857", "1762232", + "1763285", "1763597", + "1764524", "1764920", + "1765763", + "1765949", "1766123", "1766265", "1766366", + "1766624", + "1766708", "1767590", "1767644", "1768106", + "1768136", "1768222", "1768302", "1768411", + "1768691", + "1769051", "1769098", "1769504", "1769819", @@ -16512,70 +17239,112 @@ "1770123", "1770274", "1770396", + "1770592", + "1771363", "1771501", "1772155", + "1772359", + "1772783", "1772926", "1775081", + "1775149", + "1775633", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", + "1778136", + "1778497", + "1778574", "1778695", + "1779429", "1779682", "1780139", + "1780300", + "1780913", "1781683", "1782524", "1782607", "1782659", "1783394", + "1784356", "1784809", + "1785140", "1785281", "1785873", + "1785931", "1786886", + "1787061", "1787107", + "1787399", + "1787496", "1787522", + "1788411", + "1788466", + "1789061", "1789246", + "1789474", "1789545", "1789671", + "1789826", "1789978", + "1790356", + "1790683", + "1790794", "1791382", + "1791769", "1791874", + "1792055", "1792324", "1792405", "1793856", + "1793981", + "1794099", "1794570", "1795126", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", "1798083", "1798340", + "1798362", + "1798377", "1798440", + "1798478", "1798514", "1798902", "1799687", "1799702", + "1799789", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", + "1808720", "1808961", "1809069", "1810097", + "1811612", "1812976", + "1814095", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -16583,6 +17352,8 @@ "1822545", "1822778", "1823714", + "1824090", + "1824246", "1825057", "1825076", "1825121", @@ -16591,52 +17362,172 @@ "1826021", "1826192", "1827111", + "1827279", "1827547", + "1827641", "1828161", "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", "1830909", "1831127", "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", "1835151", + "1835429", "1836898", + "1837168", + "1837338", + "1839258", "1839730", + "1840273", + "1841152", "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", "1845266", + "1845958", + "1846094", + "1846636", "1846907", + "1847952", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856286", + "1856563", + "1856586", "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", "1862568", "1862681", + "1863292", "1863647", + "1864153", "1864355", "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", "1870242", + "1870449", + "1870982", + "1871157", "1871206", "1871384", + "1871695", "1872346", "1872845", + "1873074", + "1873408", "1873980", + "1874152", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", "1875849", + "1875890", "1876280", + "1876391", "1876536", + "1877292", + "1877937", + "1878460", + "1878578", "1878838", "1879226", + "1879451", "1879494", + "1879512", "1879915", "1881145", "1881186", + "1881825", "1882028", + "1882413", "1883132", + "1883373", "1884090", "1884194", "1884425", + "1884886", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1887682", + "1888256", + "1888578", "1888698", "1889936", "1890111", @@ -16644,12 +17535,34 @@ "1891054", "1891305", "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", @@ -16659,21 +17572,28 @@ "1956434", "1956522", "1956545", + "1957193", + "1957281", "1957545", "1957620", "1957829", + "1957999", "1958023", "1959381", "1959888", "1960592", "1960966", + "1961066", "1962165", "1962369", "1962632", + "1962857", "1962956", "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -16681,37 +17601,56 @@ "1965888", "1965967", "1966346", + "1966883", "1966929", + "1966982", "1967196", "1967242", + "1967263", + "1967583", "1967722", "1968199", "1968665", "1968854", + "1968975", + "1969122", "1970179", + "1970226", "1970279", "1970574", + "1971819", "1972114", "1972425", "1973405", "1973909", "1975292", + "1975336", "1975542", "1975570", "1975885", "1976155", + "1976515", "1976949", + "1977104", + "1977419", + "1977775", + "1978019", "1978112", "1978364", "1978506", + "1978607", "1978749", + "1978814", "1978974", "1979106", "1979243", "1979727", "1980342", + "1980511", "1980718", + "1981690", "1982367", + "1984731", "1984922", "1985507", "1985969", @@ -16726,124 +17665,267 @@ "1989996", "1990136", "1990531", + "1990677", + "1991135", "1991357", + "1991817", "1991946", + "1993403", "2278098", + "3255940", + "3255956", + "3256169", + "3256188", "3256294", "3256322", + "3256568", + "3256934", "3256950", + "3257150", + "3257152", "3257220", "3257225", "3257328", + "3257500", "3257694", "3257798", + "3257894", "3261008", "4301098", + "4301121", "4301340", + "4302289", "4404424", + "4404729", + "4404934", "4405245", "4405430", + "4405493", + "4405983", "4406069", + "4406268", + "4406291", + "4406298", "4406360", "4406622", + "4406931", + "4407138", "4407165", + "4407310", "4407354", "4408190", "4524069", + "4524400", + "4524792", "4525072", + "4525607", + "4527338", "4533124", "4533660", + "4534405", + "4534456", "4534532", + "4684145", + "4687068", + "4687943", "4689528", + "4706578", + "4706723", + "4709385", "5105328", + "5110641", "5114254", "5115807", "5116471", + "5123346", + "5123443", "5144176", "5146397", "7236046", + "7236091", + "7354470", "7384515", "7396883", + "7494486", "7721234", "7739898", + "7742506", "7852351", + "8057237", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", "9065472", + "9073940", "9078901", "9095083", + "9108102", "9118632", "9146182", + "9151414", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 320, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 45980, + "class_count": 674, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.836506364737312, - "precision": 0.7510970456076229, - "recall": 0.836506364737312, - "f1": 0.7581454918652479 + "accuracy": 0.8312879946116835, + "precision": 0.3578921081808226, + "recall": 0.8312879946116835, + "f1": 0.3600905137263134 } }, { "model": "onnx-tta", "scope": "zero", "rank": "genus", - "cutoff": 0, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "11495707", + "12031311", "12105049", + "1730935", + "1731584", + "1731817", + "1731859", "1732062", "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", "1733840", "1734388", "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", "1737335", "1737519", "1737647", "1737701", "1738049", + "1738143", + "1738215", + "1738242", + "1738265", "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", "1739724", + "1740434", + "1740515", + "1740664", + "1741141", "1741338", + "1741404", + "1741540", + "1741585", "1741717", "1742061", "1742419", + "1743188", + "1743467", + "1743485", "1743516", + "1743637", + "1743690", "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", "1744761", "1745076", + "1745086", + "1745549", "1746012", + "1746172", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748201", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", "1758873", "1759029", "1759152", + "1759405", + "1759552", "1760088", "1760588", + "1760738", + "1760849", "1761017", + "1761094", + "1761401", + "1761728", + "1761857", "1762232", + "1763285", "1763597", + "1764524", "1764920", + "1765763", + "1765949", "1766123", "1766265", "1766366", + "1766624", + "1766708", "1767590", "1767644", "1768106", + "1768136", "1768222", "1768302", "1768411", + "1768691", + "1769051", "1769098", "1769504", "1769819", @@ -16851,69 +17933,112 @@ "1770123", "1770274", "1770396", + "1770592", + "1771363", "1771501", "1772155", + "1772359", + "1772783", "1772926", "1775081", + "1775149", + "1775633", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", + "1778136", + "1778497", + "1778574", "1778695", + "1779429", "1779682", "1780139", + "1780300", + "1780913", "1781683", "1782524", + "1782607", "1782659", "1783394", + "1784356", "1784809", + "1785140", "1785281", "1785873", + "1785931", "1786886", + "1787061", "1787107", + "1787399", + "1787496", "1787522", + "1788411", + "1788466", + "1789061", "1789246", + "1789474", "1789545", "1789671", + "1789826", "1789978", + "1790356", + "1790683", + "1790794", "1791382", + "1791769", "1791874", + "1792055", "1792324", "1792405", "1793856", + "1793981", + "1794099", "1794570", "1795126", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", "1798083", "1798340", + "1798362", + "1798377", "1798440", + "1798478", "1798514", "1798902", "1799687", "1799702", + "1799789", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", + "1808720", "1808961", "1809069", "1810097", + "1811612", "1812976", + "1814095", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -16921,6 +18046,8 @@ "1822545", "1822778", "1823714", + "1824090", + "1824246", "1825057", "1825076", "1825121", @@ -16929,52 +18056,171 @@ "1826021", "1826192", "1827111", + "1827279", "1827547", + "1827641", "1828161", "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", "1830909", "1831127", "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", "1835151", + "1835429", "1836898", + "1837168", + "1837338", + "1839258", "1839730", + "1840273", + "1841152", "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", "1845266", + "1845958", + "1846094", + "1846636", "1846907", + "1847952", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856286", + "1856563", + "1856586", "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", "1862568", "1862681", + "1863292", "1863647", + "1864153", "1864355", "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", "1870242", + "1870449", + "1870982", + "1871157", "1871206", "1871384", + "1871695", "1872346", "1872845", + "1873074", + "1873408", "1873980", + "1874152", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", "1875849", + "1875890", "1876280", + "1876391", "1876536", + "1877292", + "1877937", + "1878460", "1878838", "1879226", + "1879451", "1879494", + "1879512", "1879915", "1881145", "1881186", + "1881825", "1882028", + "1882413", "1883132", + "1883373", "1884090", "1884194", "1884425", + "1884886", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1887682", + "1888256", + "1888578", "1888698", "1889936", "1890111", @@ -16982,35 +18228,65 @@ "1891054", "1891305", "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", + "1957193", + "1957281", "1957545", "1957620", "1957829", + "1957999", "1958023", "1959381", "1959888", "1960592", "1960966", + "1961066", "1962165", "1962369", "1962632", + "1962857", "1962956", "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -17018,37 +18294,56 @@ "1965888", "1965967", "1966346", + "1966883", "1966929", + "1966982", "1967196", "1967242", + "1967263", + "1967583", "1967722", "1968199", "1968665", "1968854", + "1968975", + "1969122", "1970179", + "1970226", "1970279", "1970574", + "1971819", "1972114", "1972425", "1973405", "1973909", "1975292", + "1975336", "1975542", "1975570", "1975885", "1976155", + "1976515", "1976949", + "1977104", + "1977419", + "1977775", + "1978019", "1978112", "1978364", "1978506", + "1978607", "1978749", + "1978814", "1978974", "1979106", "1979243", "1979727", "1980342", + "1980511", "1980718", + "1981690", "1982367", + "1984731", "1984922", "1985507", "1985969", @@ -17063,71 +18358,131 @@ "1989996", "1990136", "1990531", + "1990677", + "1991135", "1991357", + "1991817", "1991946", + "1993403", "2278098", + "3255940", + "3255956", + "3256169", + "3256188", "3256294", "3256322", + "3256568", + "3256934", "3256950", + "3257150", + "3257152", "3257220", "3257225", "3257328", + "3257500", "3257694", "3257798", + "3257894", "3261008", "4301098", + "4301121", "4301340", + "4302289", "4404424", + "4404729", + "4404934", "4405245", "4405430", + "4405493", + "4405983", "4406069", + "4406268", + "4406291", + "4406298", "4406360", "4406622", + "4406931", + "4407138", "4407165", + "4407310", "4407354", "4408190", "4524069", + "4524400", + "4524792", "4525072", + "4525607", + "4527338", "4533124", "4533660", + "4534405", + "4534456", "4534532", + "4684145", + "4687068", + "4687943", "4689528", + "4706578", + "4706723", + "4709385", "5105328", + "5110641", "5114254", "5115807", "5116471", + "5123346", + "5123443", "5144176", "5146397", "7236046", + "7236091", + "7354470", "7384515", "7396883", + "7494486", "7721234", "7739898", + "7742506", "7852351", + "8057237", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", "9065472", + "9073940", "9078901", "9095083", + "9108102", "9118632", "9146182", + "9151414", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 317, - "truth_images_in_retained_classes": 52780, - "accepted_predictions_in_retained_classes": 45977, + "class_count": 673, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.844422828756908, - "precision": 0.7582052195408181, - "recall": 0.844422828756908, - "f1": 0.7653203703371588 + "accuracy": 0.831310673030869, + "precision": 0.358198292987242, + "recall": 0.831310673030869, + "f1": 0.3604852264440997 } }, { @@ -17391,7 +18746,7 @@ "accuracy": 0.8198886444355898, "precision": 0.8176206331689666, "recall": 0.8198886444355898, - "f1": 0.7926029899466804 + "f1": 0.7926029899466808 } }, { @@ -17651,9 +19006,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8206876060779148, - "precision": 0.8201078560326222, + "precision": 0.8201078560326218, "recall": 0.8206876060779148, - "f1": 0.7941995832133609 + "f1": 0.7941995832133611 } }, { @@ -17913,9 +19268,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8383310164872881, - "precision": 0.8166147950822779, + "precision": 0.8166147950822782, "recall": 0.8383310164872881, - "f1": 0.8056571781128056 + "f1": 0.8056571781128058 } }, { @@ -18175,9 +19530,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8383310164872881, - "precision": 0.8166147950822779, + "precision": 0.8166147950822782, "recall": 0.8383310164872881, - "f1": 0.8056571781128056 + "f1": 0.8056571781128058 } }, { @@ -18437,7 +19792,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8384072898289766, - "precision": 0.8162946927109619, + "precision": 0.816294692710962, "recall": 0.8384072898289766, "f1": 0.8055261341500324 } @@ -18699,7 +20054,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8384072898289766, - "precision": 0.8162946927109619, + "precision": 0.816294692710962, "recall": 0.8384072898289766, "f1": 0.8055261341500324 } @@ -18962,9 +20317,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8642862537522121, - "precision": 0.8433344795518117, + "precision": 0.8433344795518118, "recall": 0.8642862537522121, - "f1": 0.8345738246636745 + "f1": 0.8345738246636738 } }, { @@ -19224,9 +20579,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8642419820735022, - "precision": 0.8426871013681415, + "precision": 0.8426871013681416, "recall": 0.8642419820735022, - "f1": 0.8341657275204114 + "f1": 0.8341657275204107 } }, { @@ -19487,9 +20842,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8643163049908037, - "precision": 0.8430323470999015, + "precision": 0.8430323470999014, "recall": 0.8643163049908037, - "f1": 0.8343804242225075 + "f1": 0.8343804242225068 } }, { @@ -19749,9 +21104,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8642721574907657, - "precision": 0.8423837204350251, + "precision": 0.842383720435025, "recall": 0.8642721574907657, - "f1": 0.8339715279038676 + "f1": 0.8339715279038671 } }, { @@ -19990,9 +21345,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8242091812881619, - "precision": 0.8349759270593797, + "precision": 0.8349759270593795, "recall": 0.8242091812881619, - "f1": 0.8073029077289685 + "f1": 0.8073029077289686 } }, { @@ -20472,9 +21827,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8420595718087585, - "precision": 0.8360051629538205, + "precision": 0.836005162953821, "recall": 0.8420595718087585, - "f1": 0.8201488914933474 + "f1": 0.8201488914933475 } }, { @@ -20710,7 +22065,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8440854196075196, - "precision": 0.8391956132162521, + "precision": 0.8391956132162525, "recall": 0.8440854196075196, "f1": 0.8223122767531698 } @@ -20954,9 +22309,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8421419742582609, - "precision": 0.8355105285467141, + "precision": 0.8355105285467144, "recall": 0.8421419742582609, - "f1": 0.8198882695930895 + "f1": 0.8198882695930892 } }, { @@ -21192,9 +22547,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8441700900143477, - "precision": 0.8386873650181246, + "precision": 0.8386873650181248, "recall": 0.8441700900143477, - "f1": 0.822044481773088 + "f1": 0.8220444817730879 } }, { @@ -21436,7 +22791,7 @@ "accuracy": 0.8724264504229726, "precision": 0.8640463448274117, "recall": 0.8724264504229726, - "f1": 0.8517515085475369 + "f1": 0.8517515085475365 } }, { @@ -21672,9 +23027,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8724594243641395, - "precision": 0.8649085173552921, + "precision": 0.864908517355292, "recall": 0.8724594243641395, - "f1": 0.8519555844726409 + "f1": 0.8519555844726405 } }, { @@ -21914,9 +23269,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8724593443462958, - "precision": 0.8636328288870724, + "precision": 0.8636328288870722, "recall": 0.8724593443462958, - "f1": 0.8514582101275703 + "f1": 0.8514582101275701 } }, { @@ -22152,9 +23507,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8724929218456889, - "precision": 0.864487413966506, + "precision": 0.8644874139665057, "recall": 0.8724929218456889, - "f1": 0.8516569044302899 + "f1": 0.8516569044302893 } }, { @@ -22350,9 +23705,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8447796356264702, - "precision": 0.8683866368462851, + "precision": 0.8683866368462857, "recall": 0.8447796356264702, - "f1": 0.8409068314387458 + "f1": 0.8409068314387455 } }, { @@ -22544,9 +23899,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8468431185140185, - "precision": 0.8700188865290815, + "precision": 0.8700188865290819, "recall": 0.8468431185140185, - "f1": 0.8425197107045042 + "f1": 0.8425197107045038 } }, { @@ -22744,9 +24099,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.851621812405513, - "precision": 0.8767852358251573, + "precision": 0.8767852358251572, "recall": 0.851621812405513, - "f1": 0.8500899477281387 + "f1": 0.8500899477281391 } }, { @@ -22938,9 +24293,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8572846967941111, - "precision": 0.879992285140897, + "precision": 0.8799922851408967, "recall": 0.8572846967941111, - "f1": 0.8551335240737619 + "f1": 0.855133524073762 } }, { @@ -23140,7 +24495,7 @@ "accuracy": 0.8514718324234797, "precision": 0.8766263792837025, "recall": 0.8514718324234797, - "f1": 0.8499294903140181 + "f1": 0.8499294903140182 } }, { @@ -23332,9 +24687,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8569783049191699, - "precision": 0.8797840089758777, + "precision": 0.8797840089758775, "recall": 0.8569783049191699, - "f1": 0.8548933267800544 + "f1": 0.8548933267800546 } }, { @@ -23533,9 +24888,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8769067543097299, - "precision": 0.8943059399376526, + "precision": 0.8943059399376523, "recall": 0.8769067543097299, - "f1": 0.87295880197148 + "f1": 0.8729588019714802 } }, { @@ -23727,9 +25082,9 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8813164944712208, - "precision": 0.8965073033675035, + "precision": 0.8965073033675033, "recall": 0.8813164944712208, - "f1": 0.8765450108644934 + "f1": 0.876545010864494 } }, { @@ -23930,7 +25285,7 @@ "accuracy": 0.8769470993427563, "precision": 0.8939963574869481, "recall": 0.8769470993427563, - "f1": 0.8728097609356607 + "f1": 0.872809760935661 } }, { @@ -24115,853 +25470,427 @@ "9146182", "9181278" ], - "class_count": 174, - "truth_images_in_retained_classes": 51091, - "accepted_predictions_in_retained_classes": 43850, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8813584625802887, - "precision": 0.8961383784724689, - "recall": 0.8813584625802887, - "f1": 0.876352418020288 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52380, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8435038466784595, - "precision": 0.7265179495682207, - "recall": 0.8435038466784595, - "f1": 0.75042499174046 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52380, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8435038466784595, - "precision": 0.7265179495682207, - "recall": 0.8435038466784595, - "f1": 0.75042499174046 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52032, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8104767092433202, - "precision": 0.7182658553111946, - "recall": 0.8104767092433202, - "f1": 0.7317239969421455 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52032, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8104767092433202, - "precision": 0.7182658553111946, - "recall": 0.8104767092433202, - "f1": 0.7317239969421455 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52032, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8106325437578626, - "precision": 0.7191962309707975, - "recall": 0.8106325437578626, - "f1": 0.7327511040954056 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52032, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8106325437578626, - "precision": 0.7191962309707975, - "recall": 0.8106325437578626, - "f1": 0.7327511040954056 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52253, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8579010503993526, - "precision": 0.7452645609572454, - "recall": 0.8579010503993526, - "f1": 0.7748977570788995 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52253, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8579010503993526, - "precision": 0.7452645609572454, - "recall": 0.8579010503993526, - "f1": 0.7748977570788995 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52253, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8580571051602935, - "precision": 0.7452276841673134, - "recall": 0.8580571051602935, - "f1": 0.7749856158408315 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3553", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 23, - "truth_images_in_retained_classes": 52788, - "accepted_predictions_in_retained_classes": 52253, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8580571051602935, - "precision": 0.7452276841673134, - "recall": 0.8580571051602935, - "f1": 0.7749856158408315 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52241, + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43850, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8700294236802284, - "precision": 0.8073706420034539, - "recall": 0.8700294236802284, - "f1": 0.8237730542270192 + "accuracy": 0.8813584625802887, + "precision": 0.8961383784724689, + "recall": 0.8813584625802887, + "f1": 0.8763524180202883 } }, { "model": "v2", "scope": "zero", "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52241, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8700294236802284, - "precision": 0.8073706420034539, - "recall": 0.8700294236802284, - "f1": 0.8237730542270192 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "3528", "3530", "3552", + "3553", + "3554", "3556", + "3563", + "4300664", "4300668", + "4525436", + "4525465", + "4527533", + "4528997", "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", "5336", + "5338", + "5340", "5343", "5345", + "5473", "5474", + "5481", + "5487", + "6166", + "6946", "6950", + "6953", + "6954", + "7014", "7015", "7016", + "7017", "7294", + "7297", + "8838", + "8839", + "8840", "8841", + "8855", "8860", + "8861", "8863", + "8864", + "8865", + "8866", "8868", + "8870", + "8871", "8874", + "9408", + "9410", + "9412", + "9417", + "9541689", "9689", "9717" ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 51891, + "class_count": 64, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8570482156298184, - "precision": 0.7593390669412071, - "recall": 0.8570482156298184, - "f1": 0.7831492631501339 + "accuracy": 0.8435038466784595, + "precision": 0.26109238812607927, + "recall": 0.8435038466784595, + "f1": 0.26968398140672784 } }, { "model": "torch", "scope": "zero", "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 51891, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8570482156298184, - "precision": 0.7593390669412071, - "recall": 0.8570482156298184, - "f1": 0.7831492631501339 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "3528", "3530", "3552", + "3553", + "3554", "3556", + "3563", + "4300664", "4300668", + "4525436", + "4525465", + "4527533", + "4528997", "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", "5336", + "5340", "5343", "5345", "5474", + "5481", + "5487", + "6166", + "6946", "6950", + "6954", + "7014", "7015", "7016", + "7017", "7294", + "7297", + "8838", + "8839", + "8840", "8841", + "8855", "8860", + "8861", "8863", + "8864", + "8865", + "8866", "8868", + "8871", "8874", + "9408", + "9410", + "9412", + "9541689", "9689", "9717" ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 51893, + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8572274253215421, - "precision": 0.7604089989497506, - "recall": 0.8572274253215421, - "f1": 0.7843304363763831 + "accuracy": 0.8104767092433202, + "precision": 0.27533524453595787, + "recall": 0.8104767092433202, + "f1": 0.28049419882782245 } }, { "model": "onnx", "scope": "zero", "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 51893, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8572274253215421, - "precision": 0.7604089989497506, - "recall": 0.8572274253215421, - "f1": 0.7843304363763831 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "3528", "3530", "3552", + "3553", + "3554", "3556", + "3563", + "4300664", "4300668", + "4525436", + "4525465", + "4527533", + "4528997", "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", "5336", + "5340", "5343", "5345", "5474", + "5481", + "5487", + "6166", + "6946", "6950", + "6954", + "7014", "7015", "7016", + "7017", "7294", + "7297", + "8838", + "8839", + "8840", "8841", + "8855", "8860", + "8861", "8863", + "8864", + "8865", + "8866", "8868", + "8871", "8874", + "9408", + "9410", + "9412", + "9541689", "9689", "9717" ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52160, + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8865862079592552, - "precision": 0.7945542451008321, - "recall": 0.8865862079592552, - "f1": 0.8211324206407346 + "accuracy": 0.8106325437578626, + "precision": 0.2756918885388057, + "recall": 0.8106325437578626, + "f1": 0.28088792323657213 } }, { "model": "torch-tta", "scope": "zero", "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52160, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8865862079592552, - "precision": 0.7945542451008321, - "recall": 0.8865862079592552, - "f1": 0.8211324206407346 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "3528", "3530", "3552", + "3553", + "3554", "3556", + "4300664", "4300668", + "4525436", + "4525465", + "4527533", + "4528997", "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", "5336", + "5338", + "5340", "5343", "5345", "5474", + "5481", + "5487", + "6166", + "6946", "6950", + "6953", + "6954", + "7014", "7015", "7016", + "7017", "7294", + "7297", + "8838", + "8839", + "8840", "8841", + "8855", "8860", + "8861", "8863", + "8864", + "8865", + "8866", "8868", + "8871", "8874", + "9408", + "9410", + "9412", "9689", "9717" ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52160, + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8867656709343373, - "precision": 0.7945118367924103, - "recall": 0.8867656709343373, - "f1": 0.821233458216956 + "accuracy": 0.8579010503993526, + "precision": 0.2856847483669441, + "recall": 0.8579010503993526, + "f1": 0.29704414021357817 } }, { "model": "onnx-tta", "scope": "zero", "rank": "family", - "cutoff": 5, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "3528", "3530", "3552", + "3553", + "3554", "3556", + "4300664", "4300668", + "4525436", + "4525465", + "4527533", + "4528997", "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", "5336", + "5338", + "5340", "5343", "5345", "5474", + "5481", + "5487", + "6166", + "6946", "6950", + "6953", + "6954", + "7014", "7015", "7016", + "7017", "7294", + "7297", + "8838", + "8839", + "8840", "8841", + "8855", "8860", + "8861", "8863", + "8864", + "8865", + "8866", "8868", + "8871", "8874", + "9408", + "9410", + "9412", "9689", "9717" ], - "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52160, + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.8867656709343373, - "precision": 0.7945118367924103, - "recall": 0.8867656709343373, - "f1": 0.821233458216956 + "accuracy": 0.8580571051602935, + "precision": 0.28567061226413676, + "recall": 0.8580571051602935, + "f1": 0.2970778194056521 } }, { "model": "v2", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "per_model", "classes": [ "3530", @@ -24992,7 +25921,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8700294236802284, - "precision": 0.8073706420034539, + "precision": 0.8073706420034537, "recall": 0.8700294236802284, "f1": 0.8237730542270192 } @@ -25001,7 +25930,7 @@ "model": "v2", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "common", "classes": [ "3530", @@ -25032,7 +25961,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8700294236802284, - "precision": 0.8073706420034539, + "precision": 0.8073706420034537, "recall": 0.8700294236802284, "f1": 0.8237730542270192 } @@ -25041,7 +25970,7 @@ "model": "torch", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "per_model", "classes": [ "3530", @@ -25074,14 +26003,14 @@ "accuracy": 0.8570482156298184, "precision": 0.7593390669412071, "recall": 0.8570482156298184, - "f1": 0.7831492631501339 + "f1": 0.7831492631501338 } }, { "model": "torch", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "common", "classes": [ "3530", @@ -25114,14 +26043,14 @@ "accuracy": 0.8570482156298184, "precision": 0.7593390669412071, "recall": 0.8570482156298184, - "f1": 0.7831492631501339 + "f1": 0.7831492631501338 } }, { "model": "onnx", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "per_model", "classes": [ "3530", @@ -25152,7 +26081,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8572274253215421, - "precision": 0.7604089989497506, + "precision": 0.7604089989497507, "recall": 0.8572274253215421, "f1": 0.7843304363763831 } @@ -25161,7 +26090,7 @@ "model": "onnx", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "common", "classes": [ "3530", @@ -25192,7 +26121,7 @@ "overall_coverage": 1.0, "metrics": { "accuracy": 0.8572274253215421, - "precision": 0.7604089989497506, + "precision": 0.7604089989497507, "recall": 0.8572274253215421, "f1": 0.7843304363763831 } @@ -25201,7 +26130,7 @@ "model": "torch-tta", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "per_model", "classes": [ "3530", @@ -25241,7 +26170,7 @@ "model": "torch-tta", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "common", "classes": [ "3530", @@ -25281,7 +26210,7 @@ "model": "onnx-tta", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "per_model", "classes": [ "3530", @@ -25321,7 +26250,7 @@ "model": "onnx-tta", "scope": "zero", "rank": "family", - "cutoff": 10, + "cutoff": 5, "domain": "common", "classes": [ "3530", @@ -25346,285 +26275,27 @@ "9717" ], "class_count": 20, - "truth_images_in_retained_classes": 52783, - "accepted_predictions_in_retained_classes": 52160, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8867656709343373, - "precision": 0.7945118367924103, - "recall": 0.8867656709343373, - "f1": 0.821233458216956 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52159, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8777980291519171, - "precision": 0.8618479765055044, - "recall": 0.8777980291519171, - "f1": 0.8634797826579269 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52159, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8777980291519171, - "precision": 0.8618479765055044, - "recall": 0.8777980291519171, - "f1": 0.8634797826579269 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 51776, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8761006803143303, - "precision": 0.8444656509344528, - "recall": 0.8761006803143303, - "f1": 0.8502787174152918 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 51776, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8761006803143303, - "precision": 0.8444656509344528, - "recall": 0.8761006803143303, - "f1": 0.8502787174152918 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 51781, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8763115152457701, - "precision": 0.8445713671430294, - "recall": 0.8763115152457701, - "f1": 0.8504835558317285 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 51781, - "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8763115152457701, - "precision": 0.8445713671430294, - "recall": 0.8763115152457701, - "f1": 0.8504835558317285 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52060, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9024478981808949, - "precision": 0.8736299225701798, - "recall": 0.9024478981808949, - "f1": 0.8812811401338616 + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 } }, { - "model": "torch-tta", + "model": "v2", "scope": "zero", "rank": "family", - "cutoff": 20, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "3530", "3552", + "3556", "4300668", "4532185", "5336", @@ -25636,32 +26307,35 @@ "7016", "7294", "8841", + "8860", "8863", "8868", + "8874", "9689", "9717" ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52060, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9024478981808949, - "precision": 0.8736299225701798, - "recall": 0.9024478981808949, - "f1": 0.8812811401338616 + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 } }, { - "model": "onnx-tta", + "model": "v2", "scope": "zero", "rank": "family", - "cutoff": 20, - "domain": "per_model", + "cutoff": 10, + "domain": "common", "classes": [ "3530", "3552", + "3556", "4300668", "4532185", "5336", @@ -25673,32 +26347,35 @@ "7016", "7294", "8841", + "8860", "8863", "8868", + "8874", "9689", "9717" ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52060, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, "report_images": 52788, "overall_coverage": 1.0, "metrics": { - "accuracy": 0.902659031092756, - "precision": 0.8735800304426246, - "recall": 0.902659031092756, - "f1": 0.8814000078705927 + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034537, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 } }, { - "model": "onnx-tta", + "model": "torch", "scope": "zero", "rank": "family", - "cutoff": 20, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "3530", "3552", + "3556", "4300668", "4532185", "5336", @@ -25710,3671 +26387,741 @@ "7016", "7294", "8841", + "8860", "8863", "8868", + "8874", "9689", "9717" ], - "class_count": 17, - "truth_images_in_retained_classes": 52742, - "accepted_predictions_in_retained_classes": 52060, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, "report_images": 52788, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.902659031092756, - "precision": 0.8735800304426246, - "recall": 0.902659031092756, - "f1": 0.8814000078705927 - } - }, - { - "model": "v2", - "scope": "optimized", - "rank": "species", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768117", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1772940", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782560", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1862837", - "1864377", - "1870250", - "1871252", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965996", - "1966017", - "1966351", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972120", - "1972187", - "1972234", - "1972250", - "1972342", - "1972449", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982746", - "1982885", - "1983170", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533136", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112155", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116475", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5145409", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146961", - "5147062", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772210", - "5772351", - "5880533", - "5880545", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7752082", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" ], - "class_count": 433, - "truth_images_in_retained_classes": 44484, - "accepted_predictions_in_retained_classes": 31566, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9240191857358756, - "precision": 0.885700493336194, - "recall": 0.6531790785268475, - "f1": 0.7117924113167411 + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 } }, { - "model": "v2", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, "domain": "common", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965996", - "1966017", - "1966351", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533136", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146961", - "5147062", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" ], - "class_count": 413, - "truth_images_in_retained_classes": 44369, - "accepted_predictions_in_retained_classes": 31533, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9385872203508142, - "precision": 0.9084139958383503, - "recall": 0.6750014601723655, - "f1": 0.7345720682137987 + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497507, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 } }, { - "model": "torch", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, "domain": "per_model", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1737776", - "1737847", - "1738050", - "1739833", - "1739922", - "1740005", - "1740069", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1789982", - "1790072", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797367", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1830962", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1847407", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1875869", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884273", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888743", - "1888759", - "1889942", - "1890187", - "1890534", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1972434", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1984117", - "1984954", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525500", - "4525510", - "4525530", - "4525540", - "4525547", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534299", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146677", - "5146961", - "5147039", - "5147062", - "5147193", - "5147208", - "5147245", - "5147608", - "5148286", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772202", - "5772205", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "6097236", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" ], - "class_count": 449, - "truth_images_in_retained_classes": 45205, - "accepted_predictions_in_retained_classes": 31873, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9398423490596125, - "precision": 0.9094313118847961, - "recall": 0.6713467663200402, - "f1": 0.7401393054211883 + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407346 } }, { - "model": "torch", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, "domain": "common", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965996", - "1966017", - "1966351", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533136", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146961", - "5147062", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" ], - "class_count": 413, - "truth_images_in_retained_classes": 44369, - "accepted_predictions_in_retained_classes": 31677, + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52160, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9483742161527923, - "precision": 0.9278828363613216, - "recall": 0.6933654020535126, - "f1": 0.7625446812254123 + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 } }, { - "model": "onnx", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, "domain": "per_model", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1737776", - "1737847", - "1738050", - "1739833", - "1739922", - "1740005", - "1740069", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1789982", - "1790072", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797367", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1830962", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1847407", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1875869", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884273", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888743", - "1888759", - "1889942", - "1890187", - "1890534", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1972434", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1984117", - "1984954", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525500", - "4525510", - "4525530", - "4525540", - "4525547", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534299", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146677", - "5146961", - "5147039", - "5147062", - "5147193", - "5147208", - "5147245", - "5147608", - "5148286", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772202", - "5772205", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "6097236", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055043, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" ], - "class_count": 449, - "truth_images_in_retained_classes": 45205, - "accepted_predictions_in_retained_classes": 31724, + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.940681805632725, - "precision": 0.9109585170264042, - "recall": 0.6688306126725968, - "f1": 0.7382564696944265 + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055043, + "recall": 0.8777980291519171, + "f1": 0.8634797826579269 } }, { - "model": "onnx", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344529, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, "domain": "common", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965996", - "1966017", - "1966351", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533136", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146961", - "5147062", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344529, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" ], - "class_count": 413, - "truth_images_in_retained_classes": 44369, - "accepted_predictions_in_retained_classes": 31534, + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.948876538655318, - "precision": 0.92844781010515, - "recall": 0.6912679285399674, - "f1": 0.7610933438936152 + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430295, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 } }, { - "model": "torch-tta", - "scope": "optimized", - "rank": "species", - "cutoff": 0, - "domain": "per_model", + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1739833", - "1739922", - "1740005", - "1740069", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1760593", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768117", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1772940", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782560", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1789982", - "1790002", - "1790072", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797367", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1830962", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1847407", - "1862837", - "1864377", - "1870250", - "1871252", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1875869", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884273", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888743", - "1888759", - "1889942", - "1890187", - "1890534", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1972434", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982671", - "1982746", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1984117", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525500", - "4525510", - "4525530", - "4525540", - "4525547", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533671", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534299", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112155", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116475", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146677", - "5146961", - "5147039", - "5147062", - "5147193", - "5147208", - "5147245", - "5147608", - "5148286", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772202", - "5772205", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "6097236", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "8581601", - "9101339" + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430295, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" ], - "class_count": 465, - "truth_images_in_retained_classes": 45248, - "accepted_predictions_in_retained_classes": 35052, + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.932529958593781, - "precision": 0.898413496661032, - "recall": 0.717614394885624, - "f1": 0.7671987063507582 + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 } }, { "model": "torch-tta", - "scope": "optimized", - "rank": "species", - "cutoff": 0, + "scope": "zero", + "rank": "family", + "cutoff": 20, "domain": "common", "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1862837", - "1864377", - "1870250", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965996", - "1966017", - "1966351", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533136", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146961", - "5147062", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9024478981808949, + "precision": 0.8736299225701798, + "recall": 0.9024478981808949, + "f1": 0.8812811401338616 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" ], - "class_count": 413, - "truth_images_in_retained_classes": 44369, - "accepted_predictions_in_retained_classes": 34742, + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 1.0, "metrics": { - "accuracy": 0.9456222727159702, - "precision": 0.9252382253232228, - "recall": 0.7526084931806575, - "f1": 0.8021001528962034 + "accuracy": 0.902659031092756, + "precision": 0.8735800304426248, + "recall": 0.902659031092756, + "f1": 0.8814000078705928 } }, { "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52060, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.902659031092756, + "precision": 0.8735800304426248, + "recall": 0.902659031092756, + "f1": 0.8814000078705928 + } + }, + { + "model": "v2", "scope": "optimized", "rank": "species", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "10638451", + "11418741", "11478679", + "11571523", + "11598540", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", "1732063", "1732416", + "1732452", + "1733258", "1734453", "1734704", "1734826", + "1735532", + "1736727", "1737491", "1737542", + "1737650", "1737775", "1737776", "1737847", "1738050", + "1739819", "1739833", "1739922", + "1739931", "1740005", "1740069", "1740185", "1741341", + "1741633", "1741752", "1742142", "1743532", "1743775", + "1744071", "1744782", "1745079", + "1746027", "1746440", "1746775", "1746832", "1746876", + "1746910", "1758878", + "1759069", + "1759083", "1759153", + "1759407", "1760104", + "1760246", "1760593", "1761041", + "1761735", + "1761865", "1762244", "1763610", "1765011", @@ -29382,9 +27129,13 @@ "1766210", "1766274", "1766510", + "1766741", "1767597", "1767625", + "1768117", + "1768150", "1768341", + "1768749", "1769103", "1769505", "1769566", @@ -29393,6 +27144,7 @@ "1770150", "1770307", "1770477", + "1770772", "1770880", "1771040", "1771214", @@ -29400,34 +27152,59 @@ "1771698", "1772169", "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1775152", "1775891", "1776330", "1776862", "1777253", "1778074", + "1779435", "1779690", "1780150", "1781694", "1782560", + "1782615", + "1782627", "1782672", "1782726", "1782763", "1782777", "1782841", "1782927", + "1782948", + "1783016", + "1783037", "1783043", + "1784826", + "1785185", "1785286", "1785888", "1785895", "1786902", + "1787112", + "1787267", "1787610", + "1787770", + "1788635", + "1788917", "1789267", + "1789580", "1789694", "1789695", "1789730", "1789745", + "1789755", + "1789783", "1789785", + "1789982", + "1790002", "1790072", + "1790160", + "1790692", "1791422", "1792383", "1792411", @@ -29438,6 +27215,10 @@ "1795854", "1796117", "1796145", + "1796169", + "1796188", + "1796463", + "1796668", "1796678", "1797178", "1797258", @@ -29445,528 +27226,118 @@ "1797479", "1798346", "1798449", + "1798504", + "1798802", "1798807", "1798974", "1799132", + "1799135", "1799701", "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", + "1803012", "1803073", "1804071", "1804906", + "1807206", + "1807969", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1822830", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1830962", - "1831136", - "1831643", - "1835156", - "1836899", - "1839893", - "1841261", - "1845270", - "1847407", - "1862837", - "1864377", - "1870250", - "1871252", - "1871407", - "1872368", - "1872901", - "1875008", - "1875327", - "1875869", - "1876329", - "1876542", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884273", - "1884370", - "1884403", - "1884465", - "1884970", - "1886579", - "1886587", - "1887108", - "1887290", - "1888743", - "1888759", - "1889942", - "1890187", - "1890534", - "1890576", - "1891059", - "1891326", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952062", - "1952532", - "1952806", - "1952812", - "1956524", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1961040", - "1962204", - "1962265", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972234", - "1972250", - "1972434", - "1973414", - "1973467", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1978114", - "1978375", - "1978445", - "1978776", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1982500", - "1982525", - "1982541", - "1982592", - "1982636", - "1982885", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983648", - "1983705", - "1983755", - "1983896", - "1984117", - "1984954", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991371", - "1992066", - "1992504", - "4522322", - "4523522", - "4523885", - "4524054", - "4524072", - "4524376", - "4524393", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525500", - "4525510", - "4525530", - "4525540", - "4525547", - "4529566", - "4530151", - "4531284", - "4531402", - "4531517", - "4531687", - "4531690", - "4532022", - "4532095", - "4532297", - "4532357", - "4532544", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533952", - "4534057", - "4534166", - "4534207", - "4534290", - "4534299", - "4534398", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5101745", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5112291", - "5113036", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116475", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5126680", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146496", - "5146559", - "5146677", - "5146961", - "5147039", - "5147062", - "5147193", - "5147208", - "5147245", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771259", - "5771350", - "5771982", - "5772063", - "5772176", - "5772196", - "5772202", - "5772205", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5880563", - "5884851", - "6097214", - "7438067", - "7443518", - "7446048", - "7681733", - "7780930", - "7895336", - "7940536", - "7960566", - "8015895", - "8105817", - "8223165", - "8262357", - "8361848", - "8397564", - "8407461", - "8421569", - "8537359", - "9101339" - ], - "class_count": 450, - "truth_images_in_retained_classes": 45148, - "accepted_predictions_in_retained_classes": 33352, - "report_images": 52788, - "overall_coverage": 0.7404902629385466, - "metrics": { - "accuracy": 0.9483124062069127, - "precision": 0.9228068935716895, - "recall": 0.7047776611494099, - "f1": 0.7675439553505272 - } - }, - { - "model": "onnx-tta", - "scope": "optimized", - "rank": "species", - "cutoff": 0, - "domain": "common", - "classes": [ - "11478679", - "1732063", - "1732416", - "1734453", - "1734704", - "1734826", - "1737491", - "1737542", - "1737775", - "1739833", - "1739922", - "1740005", - "1740185", - "1741341", - "1741752", - "1742142", - "1743532", - "1743775", - "1744782", - "1745079", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1766510", - "1767597", - "1767625", - "1768341", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1775891", - "1776330", - "1776862", - "1777253", - "1778074", - "1779690", - "1780150", - "1781694", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1789267", - "1789694", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1793877", - "1794590", - "1795215", - "1795854", - "1796117", - "1796145", - "1796678", - "1797178", - "1797258", - "1797479", - "1798346", - "1798449", - "1798807", - "1798974", - "1799132", - "1799701", - "1799708", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", + "1821911", "1822346", "1822587", "1822610", "1822613", + "1822787", "1822796", "1822819", "1822830", "1823726", "1825064", "1825077", + "1825083", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1826033", "1827125", "1828162", "1828637", "1830410", + "1830457", + "1830843", "1830937", + "1830962", + "1831009", "1831136", + "1831168", "1831643", + "1832853", "1835156", "1836899", "1839893", "1841261", "1845270", + "1847407", + "1850246", + "1850538", + "1850781", + "1852177", + "1857577", + "1857626", + "1857828", + "1861644", + "1862580", "1862837", "1864377", + "1869803", + "1870202", "1870250", + "1870988", + "1871252", "1871407", + "1872315", "1872368", "1872901", + "1873411", + "1874375", "1875008", + "1875120", "1875327", + "1875869", "1876329", "1876542", + "1877988", + "1878879", + "1878895", "1879252", + "1879452", "1879970", + "1880064", + "1880139", + "1880140", "1881151", + "1881834", "1882210", "1883161", "1884212", "1884255", + "1884273", + "1884332", "1884370", "1884403", "1884465", @@ -29975,31 +27346,49 @@ "1886587", "1887108", "1887290", + "1887701", + "1888579", + "1888743", "1888759", + "1888826", "1889942", "1890187", + "1890534", "1890576", + "1890656", "1891059", "1891326", + "1891426", "1891473", "1891493", + "1891494", + "1920712", "1951557", "1951649", + "1951713", "1952014", "1952062", + "1952130", + "1952229", + "1952449", "1952532", "1952806", "1952812", + "1956440", "1956524", "1956599", + "1957300", "1957570", "1957572", "1957816", "1957845", + "1957852", "1958024", + "1958323", "1959383", "1959395", "1959914", + "1959919", "1960617", "1961040", "1962204", @@ -30011,6 +27400,10 @@ "1963011", "1963306", "1963446", + "1963463", + "1964191", + "1964471", + "1964637", "1964653", "1964657", "1965166", @@ -30019,26 +27412,40 @@ "1965777", "1965825", "1965841", + "1965913", "1965996", "1966017", "1966351", + "1967011", + "1967245", + "1967273", + "1967597", "1967815", "1968678", "1968867", "1970213", + "1970227", "1970284", + "1972120", "1972187", "1972234", "1972250", + "1972342", + "1972434", + "1972449", "1973414", "1973467", "1975546", "1975553", "1975571", + "1975793", "1975897", "1975903", "1976163", "1977003", + "1977068", + "1978056", + "1978065", "1978114", "1978375", "1978445", @@ -30048,26 +27455,48 @@ "1979430", "1979473", "1979781", + "1980521", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", "1982592", "1982636", + "1982671", + "1982746", "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", "1983387", "1983441", "1983442", "1983525", "1983548", "1983648", + "1983694", "1983705", "1983755", "1983896", + "1983922", + "1983997", + "1984117", + "1984942", + "1984949", + "1984954", "1985522", "1986052", + "1986056", "1986157", "1986166", + "1986171", "1986220", + "1986452", "1986522", "1986575", "1987527", @@ -30081,10 +27510,14 @@ "1991371", "1992066", "1992504", + "1993419", + "4302268", "4522322", "4523522", + "4523880", "4523885", "4524054", + "4524070", "4524072", "4524376", "4524393", @@ -30092,33 +27525,53 @@ "4524426", "4524636", "4524638", + "4524793", "4525078", + "4525500", "4525510", + "4525530", "4525540", + "4525547", "4529566", + "4529630", "4530151", "4531284", "4531402", + "4531506", "4531517", "4531687", "4531690", + "4531708", "4532022", "4532095", + "4532253", + "4532293", "4532297", "4532357", + "4532500", "4532544", + "4532696", "4532886", "4532888", "4532890", + "4533115", "4533136", + "4533202", "4533273", "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", "4533952", "4534057", "4534166", "4534207", "4534290", + "4534299", "4534398", + "4534408", "4534463", "4534485", "4534533", @@ -30127,8 +27580,11 @@ "4534719", "4534872", "4534909", + "4534914", + "5101678", "5101745", "5102951", + "5102982", "5103451", "5104442", "5104558", @@ -30139,30 +27595,52 @@ "5110670", "5110885", "5111574", + "5112155", "5112283", "5112291", + "5112345", + "5112362", "5113036", "5113078", "5113234", + "5113847", "5114198", "5114327", "5115771", "5115777", "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", "5117400", + "5118892", "5118996", + "5119143", "5119245", + "5120396", + "5123922", "5124007", + "5124029", "5124143", "5124233", "5125689", + "5126052", "5126212", + "5126217", "5126680", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", "5143651", "5143675", "5143697", @@ -30171,287 +27649,640 @@ "5144534", "5144543", "5145009", + "5145136", + "5145409", + "5145965", "5146342", "5146379", "5146412", "5146496", "5146559", + "5146677", "5146961", + "5147039", "5147062", + "5147193", "5147208", + "5147232", "5147245", "5147608", + "5147638", + "5147827", + "5148286", + "5148394", "5148424", "5148436", "5148462", + "5148475", "5148486", "5148487", + "5149414", "5149438", "5149665", "5149746", "5714973", "5768880", + "5769028", + "5769062", "5769068", "5769072", + "5769191", + "5769272", "5771259", "5771350", "5771982", "5772063", "5772176", + "5772180", + "5772186", "5772196", + "5772199", + "5772202", + "5772205", + "5772206", "5772210", + "5772309", "5772351", "5880533", + "5880545", "5880552", "5880559", "5880563", "5884851", "6097214", + "6097236", + "7429212", "7438067", "7443518", "7446048", + "7596232", "7681733", + "7730078", + "7734292", + "7752082", "7780930", + "7825213", + "7874258", + "7875265", "7895336", + "7937573", "7940536", "7960566", + "7972792", + "7993353", + "8000103", + "8007222", "8015895", "8105817", + "8160782", "8223165", + "8237343", + "8237987", "8262357", "8361848", + "8361973", + "8388883", + "8394261", "8397564", "8407461", "8421569", + "8532380", "8537359", - "9101339" + "8581601", + "9092175", + "9101339", + "9473121", + "9674732" ], - "class_count": 413, - "truth_images_in_retained_classes": 44369, - "accepted_predictions_in_retained_classes": 33106, + "class_count": 690, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36810, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9531195374005882, - "precision": 0.9347573093799684, - "recall": 0.7229650126277268, - "f1": 0.7857605754515414 + "accuracy": 0.8465208024160925, + "precision": 0.6381169943670086, + "recall": 0.5418132969389368, + "f1": 0.4466755276813755 } }, { - "model": "v2", + "model": "torch", "scope": "optimized", "rank": "species", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", "1732063", "1732416", + "1732452", "1734453", "1734704", + "1734826", "1737491", "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", "1739922", + "1740005", + "1740069", + "1740185", "1741341", + "1741633", + "1741752", "1742142", "1743532", + "1743775", + "1744071", + "1744739", "1744782", + "1745079", + "1746027", + "1746440", + "1746613", "1746775", "1746832", "1746876", + "1748890", "1758878", + "1759069", + "1759083", "1759153", + "1759673", "1760104", + "1760593", + "1761041", "1762244", "1763610", + "1765011", + "1765767", + "1766130", "1766137", + "1766210", "1766274", + "1766510", "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", "1769103", + "1769505", "1769566", "1769897", + "1769958", + "1770150", "1770307", "1770477", + "1770772", "1770880", + "1771040", "1771214", "1771509", + "1771531", "1771698", + "1771772", "1772169", "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", "1777253", "1778074", + "1779435", + "1779690", "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", "1782763", "1782777", + "1782841", "1782927", + "1782948", + "1783016", + "1783037", "1783043", + "1784359", + "1784826", "1785286", "1785888", "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", "1789267", + "1789580", + "1789694", "1789695", "1789730", "1789745", + "1789783", "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", "1791422", "1792383", "1792411", "1792418", + "1793877", "1794590", "1795215", + "1795854", + "1796117", "1796145", + "1796169", + "1796668", "1796678", + "1797178", "1797258", + "1797367", "1797479", + "1798346", + "1798372", + "1798449", + "1798802", "1798807", + "1798974", "1799132", + "1799135", + "1799701", + "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", + "1803012", "1803073", "1804071", "1804906", + "1807206", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822587", + "1822610", + "1822613", + "1822787", "1822796", + "1822819", + "1822830", "1823726", "1825064", "1825077", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1827125", "1828162", "1828637", "1830410", + "1830584", + "1830879", "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", "1841261", "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", "1864377", + "1870250", + "1870988", + "1871252", + "1871407", "1872368", + "1872901", + "1873079", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875865", + "1875869", "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", "1879970", + "1880064", + "1880140", + "1880143", "1881151", + "1881834", "1882210", "1883161", + "1884212", "1884255", + "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886579", + "1886587", "1887108", "1887290", + "1888743", "1888759", + "1888826", + "1889833", + "1889942", "1890187", + "1890534", "1890576", + "1890656", + "1891059", + "1891326", "1891473", "1891493", + "1939432", "1951557", "1951649", + "1951713", "1952014", + "1952062", + "1952130", + "1952229", "1952532", "1952806", "1952812", + "1956440", + "1956524", "1956599", + "1957300", "1957570", "1957572", "1957816", "1957845", + "1957852", + "1958024", "1959383", + "1959395", "1959914", + "1959919", "1960617", + "1961040", + "1962204", "1962265", "1962434", + "1962516", "1962636", "1962990", + "1963011", "1963306", "1963446", + "1963463", + "1964195", "1964653", "1964657", "1965166", "1965208", "1965763", + "1965777", + "1965825", "1965841", + "1965913", + "1965996", "1966017", + "1966351", + "1967245", + "1967273", "1967815", "1968678", "1968867", "1970213", + "1970227", "1970284", + "1972120", + "1972185", "1972187", + "1972234", "1972250", + "1972342", + "1972434", + "1972449", "1973414", "1973467", + "1975546", "1975553", "1975571", "1975897", + "1975903", "1976163", "1977003", + "1978065", "1978114", + "1978375", "1978445", "1978776", + "1978977", "1979308", + "1979430", "1979473", + "1979781", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", "1983525", + "1983548", "1983648", + "1983694", + "1983705", "1983755", + "1983888", "1983896", + "1983922", + "1983999", + "1984117", + "1984954", "1985522", + "1986052", + "1986056", "1986157", "1986166", + "1986171", "1986220", "1986522", "1986575", + "1987527", + "1987744", "1988593", + "1988684", "1988881", "1989428", + "1990066", "1990150", + "1990551", "1991371", "1992066", + "1992504", + "4302252", + "4302268", "4522322", + "4522922", "4523522", + "4523880", "4523885", "4524054", + "4524072", "4524376", + "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", + "4525189", + "4525500", + "4525510", + "4525530", "4525540", + "4525547", + "4527972", "4529566", + "4529630", + "4530151", "4531284", + "4531402", "4531517", "4531687", "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", "4532297", + "4532357", + "4532516", + "4532534", "4532544", "4532886", + "4532888", "4532890", + "4533115", "4533136", + "4533202", "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", "4534166", "4534207", "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", "4534540", "4534719", "4534872", "4534909", + "4534914", + "5101678", + "5101745", "5102951", + "5103451", + "5104056", "5104442", "5104558", "5105339", @@ -30461,24 +28292,48 @@ "5110670", "5110885", "5111574", + "5112155", "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", "5113078", + "5113234", "5114198", + "5114327", "5115771", "5115777", "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", "5117400", + "5118892", "5118996", "5119245", + "5120675", + "5123461", "5124007", "5124143", "5124233", "5125689", + "5126212", + "5126217", + "5126680", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", "5143651", "5143675", "5143697", @@ -30487,13 +28342,25 @@ "5144534", "5144543", "5145009", + "5145136", + "5145409", + "5146342", "5146379", "5146412", + "5146496", "5146559", + "5146677", "5146961", + "5147039", + "5147062", + "5147193", "5147208", + "5147245", "5147608", + "5148286", + "5148394", "5148424", + "5148436", "5148462", "5148486", "5148487", @@ -30504,248 +28371,589 @@ "5768880", "5769068", "5769072", + "5769191", + "5769272", + "5771259", "5771350", "5771982", + "5772063", + "5772176", "5772196", + "5772202", + "5772205", "5772210", "5772351", "5880533", + "5880545", + "5880550", "5880552", "5880559", + "5880563", "5884851", "6097214", + "6097236", + "7438067", "7443518", + "7446048", + "7596232", "7681733", + "7730078", + "7752082", "7780930", + "7825213", + "7874258", + "7895336", + "7940536", "7960566", + "7972792", + "8000103", + "8007222", "8015895", + "8049830", + "8105817", "8223165", + "8237343", + "8237987", + "8244266", "8262357", "8361848", + "8361973", "8397564", + "8407461", "8421569", "8537359", - "9101339" + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" ], - "class_count": 281, - "truth_images_in_retained_classes": 42875, - "accepted_predictions_in_retained_classes": 31091, + "class_count": 654, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37381, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.949227254623375, - "precision": 0.943736867068747, - "recall": 0.6916423088644161, - "f1": 0.7737956953842573 + "accuracy": 0.8669405316273155, + "precision": 0.7028135267405736, + "recall": 0.5774611074285403, + "f1": 0.5081384528044552 } }, { - "model": "v2", + "model": "onnx", "scope": "optimized", "rank": "species", - "cutoff": 5, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "10055273", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", "1732063", "1732416", + "1732452", "1734453", "1734704", + "1734826", + "1737491", "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", "1739922", + "1740005", + "1740069", + "1740185", "1741341", + "1741633", + "1741752", "1742142", "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", "1746775", "1746832", "1746876", + "1748890", "1758878", + "1759069", + "1759083", "1759153", + "1759673", "1760104", + "1760593", + "1761041", "1762244", "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", "1766274", + "1766510", "1767597", + "1767625", + "1768117", + "1768150", + "1768341", "1769103", + "1769505", "1769566", "1769897", + "1769958", + "1770150", "1770307", "1770477", + "1770772", "1770880", + "1771040", "1771214", "1771509", + "1771531", "1771698", + "1771772", "1772169", "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", "1777253", "1778074", + "1779435", + "1779690", "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", "1782763", "1782777", + "1782841", "1782927", + "1782948", + "1783016", + "1783037", "1783043", + "1784359", + "1784826", "1785286", "1785888", "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", "1789267", + "1789580", + "1789694", "1789695", "1789730", "1789745", + "1789783", "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", "1791422", "1792383", "1792411", "1792418", + "1793877", "1794590", "1795215", + "1795854", + "1796117", "1796145", + "1796169", + "1796668", "1796678", + "1797178", "1797258", + "1797367", "1797479", + "1798346", + "1798372", + "1798449", + "1798802", "1798807", + "1798974", "1799132", + "1799135", + "1799701", + "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", + "1803012", "1803073", "1804071", "1804906", + "1807206", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822587", + "1822610", + "1822613", + "1822787", "1822796", + "1822819", + "1822830", "1823726", "1825064", "1825077", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1827125", "1828162", "1828637", + "1830410", + "1830584", + "1830879", "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", "1841261", "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", "1864377", + "1870250", + "1870988", + "1871252", + "1871407", "1872368", + "1872901", + "1873079", + "1874375", "1875008", + "1875120", "1875327", + "1875631", + "1875865", + "1875869", "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", "1879970", + "1880064", + "1880140", + "1880143", "1881151", + "1881834", "1882210", "1883161", + "1884212", "1884255", + "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886579", + "1886587", "1887108", "1887290", + "1888743", "1888759", + "1888826", + "1889833", + "1889942", "1890187", + "1890534", "1890576", + "1890656", + "1891059", + "1891326", "1891473", "1891493", + "1939432", "1951557", "1951649", + "1951713", "1952014", + "1952062", + "1952130", + "1952229", "1952532", "1952806", "1952812", + "1956440", + "1956524", "1956599", + "1957300", "1957570", "1957572", "1957816", "1957845", + "1957852", + "1958024", + "1959383", + "1959395", "1959914", + "1959919", "1960617", + "1961040", + "1962204", "1962265", "1962434", + "1962516", "1962636", "1962990", + "1963011", "1963306", "1963446", + "1963463", + "1964195", "1964653", "1964657", "1965166", "1965208", "1965763", + "1965777", + "1965825", "1965841", + "1965913", + "1965996", "1966017", + "1966351", + "1967245", + "1967273", "1967815", "1968678", "1968867", "1970213", + "1970227", "1970284", + "1972120", + "1972185", "1972187", + "1972234", "1972250", + "1972342", + "1972434", + "1972449", "1973414", "1973467", + "1975546", "1975553", + "1975571", "1975897", + "1975903", "1976163", "1977003", + "1978065", "1978114", + "1978375", "1978445", "1978776", + "1978977", "1979308", + "1979430", "1979473", + "1979781", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", "1983525", + "1983548", "1983648", + "1983694", + "1983705", "1983755", "1983896", + "1983922", + "1983999", + "1984117", + "1984954", "1985522", + "1986052", + "1986056", "1986157", "1986166", + "1986171", "1986220", "1986522", "1986575", + "1987527", + "1987744", "1988593", + "1988684", "1988881", "1989428", + "1990066", "1990150", + "1990551", "1991371", "1992066", + "1992504", + "4302252", + "4302268", "4522322", + "4522922", "4523522", + "4523880", "4523885", "4524054", + "4524072", "4524376", + "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", + "4525189", + "4525500", + "4525510", + "4525530", "4525540", + "4525547", + "4527972", "4529566", + "4529630", + "4530151", "4531284", + "4531402", "4531517", + "4531687", "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", "4532297", + "4532357", + "4532516", + "4532534", "4532544", "4532886", + "4532888", "4532890", + "4533115", "4533136", + "4533202", "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", "4534166", "4534207", "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", "4534540", "4534719", "4534872", "4534909", + "4534914", + "5101678", + "5101745", "5102951", + "5103451", + "5104056", "5104442", "5104558", "5105339", @@ -30755,20 +28963,43 @@ "5110670", "5110885", "5111574", + "5112155", "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", "5113078", + "5113234", "5114198", + "5114327", "5115771", "5115777", "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", "5117400", + "5118892", "5118996", "5119245", + "5120675", + "5123461", "5124007", "5124143", "5124233", "5125689", + "5126212", + "5126217", + "5126680", "5142870", + "5142971", "5143048", "5143129", "5143147", @@ -30781,13 +29012,25 @@ "5144534", "5144543", "5145009", + "5145136", + "5145409", + "5146342", "5146379", "5146412", + "5146496", "5146559", + "5146677", "5146961", + "5147039", + "5147062", + "5147193", "5147208", + "5147245", "5147608", + "5148286", + "5148394", "5148424", + "5148436", "5148462", "5148486", "5148487", @@ -30796,263 +29039,610 @@ "5149746", "5714973", "5768880", + "5769068", "5769072", + "5769191", + "5769272", + "5771259", "5771350", "5771982", + "5772063", + "5772176", "5772196", + "5772202", + "5772205", "5772210", "5772351", "5880533", + "5880545", + "5880550", "5880552", "5880559", + "5880563", "5884851", "6097214", + "6097236", + "7438067", "7443518", + "7446048", + "7596232", "7681733", + "7730078", + "7752082", "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", "8015895", + "8049830", + "8105817", "8223165", + "8237343", + "8237987", + "8244266", "8262357", "8361848", + "8361973", "8397564", + "8407461", "8421569", "8537359", - "9101339" + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" ], - "class_count": 272, - "truth_images_in_retained_classes": 42778, - "accepted_predictions_in_retained_classes": 31024, + "class_count": 650, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37191, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9521428623131191, - "precision": 0.950834091298276, - "recall": 0.6967497218946193, - "f1": 0.7799317319854289 + "accuracy": 0.8695378035260483, + "precision": 0.7088741319668206, + "recall": 0.5752968296743217, + "f1": 0.5099648536812275 } }, { - "model": "torch", + "model": "torch-tta", "scope": "optimized", "rank": "species", - "cutoff": 5, + "cutoff": -1, "domain": "per_model", "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", "1732063", "1732416", + "1732452", + "1733484", "1734453", "1734704", + "1734826", + "1735532", + "1737491", "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", "1739922", + "1740005", + "1740069", + "1740185", + "1740374", "1741341", + "1741633", + "1741752", "1742142", "1743532", + "1743775", + "1743828", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", "1746440", + "1746613", "1746775", "1746832", "1746876", "1758878", + "1759069", + "1759083", "1759153", + "1759673", "1760104", + "1760593", "1761041", + "1761865", "1762244", "1763610", + "1765011", + "1765767", + "1766130", + "1766137", "1766210", "1766274", + "1766510", "1767597", + "1767625", + "1767655", + "1768117", + "1768341", "1769103", + "1769505", "1769566", "1769897", + "1769958", + "1770150", "1770307", "1770477", + "1770772", "1770880", + "1771040", "1771214", "1771509", + "1771531", "1771698", + "1771772", "1772169", "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", "1777253", "1778074", + "1778143", + "1779435", + "1779690", "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", "1782763", "1782777", + "1782841", "1782927", + "1782948", + "1783016", + "1783037", "1783043", + "1784359", + "1784812", + "1784826", "1785286", "1785888", "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", "1789267", + "1789580", + "1789694", "1789695", "1789730", "1789745", + "1789783", "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", "1791422", + "1791784", "1792383", "1792411", "1792418", + "1793877", "1794590", "1795215", + "1795854", + "1796117", "1796145", + "1796169", + "1796668", "1796678", + "1797178", "1797258", + "1797276", + "1797367", "1797479", + "1798346", + "1798372", + "1798449", + "1798594", + "1798802", "1798807", + "1798974", "1799132", + "1799135", + "1799701", + "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", + "1803012", "1803073", "1804071", "1804906", + "1807206", + "1808752", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", "1821911", "1822346", + "1822587", + "1822610", + "1822613", + "1822787", "1822796", "1822819", + "1822830", "1823726", "1825064", "1825077", + "1825083", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1827125", "1828162", "1828637", + "1830410", + "1830584", + "1830843", + "1830879", "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", "1835156", + "1836899", + "1837420", + "1839893", + "1840346", + "1840360", "1841261", + "1841813", "1845270", + "1847407", + "1850971", + "1852978", + "1854202", + "1857626", + "1857829", + "1857978", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872315", "1872368", + "1872901", + "1873079", + "1874375", "1875008", + "1875120", "1875327", + "1875865", "1875869", "1876329", + "1876542", + "1877941", + "1878862", + "1878879", + "1878895", + "1878907", "1879252", + "1879452", "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", "1881151", + "1881834", "1882210", "1883161", + "1884212", "1884255", + "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886579", + "1886587", "1887108", "1887290", + "1888579", + "1888733", + "1888743", "1888759", + "1888826", + "1889833", + "1889942", "1890187", + "1890534", "1890576", + "1890656", + "1891059", + "1891326", "1891473", "1891493", + "1939432", "1951557", "1951649", + "1951713", "1952014", + "1952062", + "1952130", + "1952229", "1952532", "1952806", "1952812", + "1956440", + "1956524", "1956599", + "1957266", "1957570", "1957572", "1957816", "1957845", + "1957852", + "1958024", "1959383", + "1959395", "1959914", + "1959919", "1960617", + "1961040", + "1962204", "1962265", "1962434", + "1962516", "1962636", "1962990", + "1963011", "1963306", "1963446", + "1964195", "1964653", "1964657", "1965166", "1965208", "1965763", + "1965777", + "1965825", "1965841", + "1965913", + "1965996", "1966017", + "1966351", + "1967245", + "1967273", "1967815", "1968678", "1968867", "1970213", + "1970227", "1970284", + "1972120", + "1972185", "1972187", + "1972234", "1972250", + "1972342", + "1972434", + "1972449", "1973414", "1973467", + "1975546", "1975553", + "1975571", "1975897", + "1975903", "1976163", "1977003", + "1978065", "1978114", + "1978375", "1978445", "1978776", + "1978977", "1979308", + "1979430", "1979473", + "1979781", + "1981696", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", + "1982592", "1982636", + "1982671", + "1982746", "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", "1983525", + "1983548", "1983648", + "1983694", + "1983705", "1983755", "1983896", + "1983922", + "1983997", + "1983999", "1984117", + "1984734", + "1984954", "1985522", + "1986052", + "1986056", "1986157", "1986166", + "1986171", "1986220", "1986522", "1986575", + "1987527", + "1987744", "1988593", + "1988684", "1988881", "1989428", + "1990066", "1990150", + "1990551", "1991371", "1992066", + "1992504", + "4302252", + "4302268", "4522322", "4523522", + "4523880", "4523885", "4524054", + "4524072", "4524376", + "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", + "4525189", + "4525500", "4525510", + "4525530", "4525540", + "4525547", + "4527972", "4529566", + "4529630", + "4530151", "4531284", + "4531402", + "4531506", "4531517", + "4531687", "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", "4532297", + "4532357", + "4532534", "4532544", + "4532696", "4532886", + "4532888", "4532890", + "4533115", "4533136", + "4533202", "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534038", + "4534057", "4534166", "4534207", "4534290", + "4534299", "4534398", + "4534408", + "4534458", + "4534463", "4534485", + "4534533", + "4534538", "4534540", "4534719", "4534872", "4534909", + "4534914", "5101678", + "5101745", "5102951", "5103451", + "5104056", "5104442", "5104558", "5105339", @@ -31062,24 +29652,51 @@ "5110670", "5110885", "5111574", + "5112155", + "5112254", "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", "5113078", + "5113234", "5114198", + "5114327", "5115771", "5115777", "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117399", "5117400", + "5118892", "5118996", "5119245", + "5120675", + "5123461", "5124007", "5124143", "5124233", "5125689", + "5126212", + "5126217", + "5126680", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", + "5143477", "5143651", "5143675", "5143697", @@ -31088,188 +29705,437 @@ "5144534", "5144543", "5145009", + "5145136", + "5145409", + "5146342", "5146379", "5146412", + "5146496", "5146559", + "5146677", + "5146946", "5146961", + "5147039", + "5147062", + "5147193", "5147208", + "5147245", "5147608", + "5147827", + "5148286", + "5148394", "5148424", + "5148436", "5148462", "5148486", "5148487", "5149438", "5149665", "5149746", + "5149820", "5714973", "5768880", + "5769068", "5769072", + "5769191", + "5769272", + "5771259", "5771350", "5771982", + "5772063", + "5772176", + "5772186", "5772196", + "5772202", + "5772205", "5772210", + "5772349", "5772351", "5880533", + "5880545", + "5880550", "5880552", "5880559", + "5880563", "5884851", "6097214", + "6097236", + "7438067", "7443518", + "7446048", + "7596232", "7681733", + "7730078", + "7752082", "7780930", + "7825213", + "7874258", + "7895336", + "7940536", "7960566", + "7972792", + "8000103", + "8007222", "8015895", + "8049830", + "8105817", + "8186212", "8223165", + "8237343", + "8237987", + "8244266", "8262357", "8361848", + "8361973", + "8394261", "8397564", + "8407461", "8421569", + "8532380", "8537359", - "9101339" + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" ], - "class_count": 288, - "truth_images_in_retained_classes": 44180, - "accepted_predictions_in_retained_classes": 31486, + "class_count": 681, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41343, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9604545336634476, - "precision": 0.9622152512833568, - "recall": 0.7039086159930352, - "f1": 0.7910306156942064 + "accuracy": 0.8659206758370823, + "precision": 0.6694908268387493, + "recall": 0.639254202340642, + "f1": 0.5238581475082267 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "optimized", "rank": "species", - "cutoff": 5, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", "1732063", "1732416", + "1732452", + "1733484", "1734453", "1734704", + "1734826", + "1735532", + "1737491", "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", "1739922", + "1740005", + "1740069", + "1740185", + "1740374", "1741341", + "1741633", + "1741752", "1742142", "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", "1746775", "1746832", "1746876", "1758878", + "1759069", + "1759083", "1759153", + "1759673", "1760104", + "1760593", + "1761041", + "1761865", "1762244", "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", "1766274", + "1766510", "1767597", + "1767625", + "1767655", + "1768117", + "1768341", "1769103", + "1769505", "1769566", "1769897", + "1769958", + "1770150", "1770307", "1770477", + "1770772", "1770880", + "1771040", "1771214", "1771509", + "1771531", "1771698", + "1771772", "1772169", "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", "1777253", "1778074", + "1778143", + "1779690", "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", "1782763", "1782777", + "1782841", "1782927", + "1782948", + "1783016", + "1783037", "1783043", + "1784359", + "1784826", "1785286", "1785888", "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", "1789267", + "1789580", + "1789694", "1789695", "1789730", "1789745", + "1789783", "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", "1791422", "1792383", "1792411", "1792418", + "1793877", "1794590", "1795215", + "1795854", + "1796117", "1796145", + "1796169", + "1796668", "1796678", + "1797178", "1797258", + "1797367", "1797479", + "1798346", + "1798372", + "1798449", + "1798802", "1798807", + "1798974", "1799132", + "1799135", + "1799701", + "1799708", "1800004", "1800032", + "1801051", "1801896", "1802280", + "1803012", "1803073", "1804071", "1804906", + "1807206", "1810099", + "1811789", + "1811896", "1812394", "1813114", "1819145", + "1819268", "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822587", + "1822610", + "1822613", "1822796", + "1822819", + "1822830", "1823726", "1825064", "1825077", "1825156", + "1825176", "1825971", "1825983", "1826022", + "1827125", "1828162", "1828637", + "1830410", + "1830584", "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", "1835156", + "1836899", + "1839893", "1841261", + "1841813", "1845270", + "1847407", + "1850971", + "1854202", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", "1864377", + "1870250", + "1870988", + "1871252", + "1871407", "1872368", + "1872901", + "1873079", + "1874375", "1875008", + "1875120", "1875327", + "1875865", + "1875869", "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", "1879970", + "1880064", + "1880139", + "1880140", "1881151", + "1881834", "1882210", "1883161", + "1884212", "1884255", + "1884273", + "1884332", "1884370", "1884403", "1884465", "1884970", + "1886084", + "1886579", + "1886587", "1887108", "1887290", + "1888579", + "1888743", "1888759", + "1888826", + "1889833", + "1889942", "1890187", + "1890534", "1890576", + "1890656", + "1891059", + "1891326", "1891473", "1891493", + "1939432", "1951557", "1951649", + "1951713", "1952014", + "1952062", + "1952130", + "1952229", "1952532", "1952806", "1952812", + "1956440", + "1956524", "1956599", "1957570", "1957572", "1957816", "1957845", + "1957852", + "1958024", + "1959383", + "1959395", "1959914", + "1959919", "1960617", + "1961040", + "1962204", "1962265", "1962434", + "1962516", "1962636", "1962990", + "1963011", "1963306", "1963446", "1964653", @@ -31277,75 +30143,172 @@ "1965166", "1965208", "1965763", + "1965777", + "1965825", "1965841", + "1965913", + "1965996", "1966017", + "1966351", + "1967245", + "1967273", "1967815", "1968678", "1968867", "1970213", + "1970227", "1970284", + "1972120", + "1972185", "1972187", + "1972234", "1972250", + "1972342", + "1972434", + "1972449", "1973414", "1973467", + "1975546", "1975553", + "1975571", "1975897", + "1975903", "1976163", "1977003", + "1978065", "1978114", + "1978375", "1978445", "1978776", + "1978977", "1979308", + "1979430", "1979473", + "1979781", + "1982406", "1982500", "1982525", + "1982529", "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", "1983525", + "1983548", "1983648", + "1983694", + "1983705", "1983755", "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984954", "1985522", + "1986052", + "1986056", "1986157", "1986166", + "1986171", "1986220", "1986522", "1986575", + "1987527", + "1987744", "1988593", "1988881", "1989428", + "1990066", "1990150", + "1990551", "1991371", "1992066", + "1992504", + "4302268", "4522322", "4523522", + "4523880", "4523885", "4524054", + "4524072", "4524376", + "4524393", "4524421", "4524426", "4524636", "4524638", "4525078", + "4525189", + "4525500", + "4525510", + "4525530", "4525540", + "4525547", + "4527972", "4529566", + "4529630", + "4530151", "4531284", + "4531402", "4531517", + "4531687", "4531690", + "4531708", + "4532022", + "4532095", + "4532253", + "4532293", "4532297", + "4532357", + "4532534", "4532544", "4532886", + "4532888", "4532890", + "4533115", "4533136", + "4533202", "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", "4534166", "4534207", "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", "4534540", "4534719", "4534872", "4534909", + "4534914", + "5101678", + "5101745", "5102951", + "5103451", + "5104056", "5104442", "5104558", "5105339", @@ -31355,24 +30318,49 @@ "5110670", "5110885", "5111574", + "5112155", + "5112254", "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", "5113078", + "5113234", "5114198", + "5114327", "5115771", "5115777", "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", "5117400", + "5118892", "5118996", "5119245", + "5120675", + "5123461", "5124007", "5124143", "5124233", "5125689", + "5126212", + "5126217", + "5126680", "5142870", + "5142971", "5143048", "5143129", "5143147", "5143380", + "5143453", "5143651", "5143675", "5143697", @@ -31381,13 +30369,25 @@ "5144534", "5144543", "5145009", + "5145136", + "5145409", + "5146342", "5146379", "5146412", + "5146496", "5146559", + "5146677", "5146961", + "5147039", + "5147062", + "5147193", "5147208", + "5147245", "5147608", + "5148286", + "5148394", "5148424", + "5148436", "5148462", "5148486", "5148487", @@ -31396,43 +30396,79 @@ "5149746", "5714973", "5768880", + "5769068", "5769072", + "5769191", + "5769272", + "5771259", "5771350", "5771982", + "5772063", + "5772176", + "5772186", "5772196", + "5772202", + "5772205", "5772210", "5772351", "5880533", + "5880545", + "5880550", "5880552", "5880559", + "5880563", "5884851", "6097214", + "6097236", + "7438067", "7443518", + "7446048", + "7596232", "7681733", + "7730078", + "7752082", "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", "8015895", + "8049830", + "8105817", "8223165", + "8237343", + "8237987", + "8244266", "8262357", "8361848", + "8361973", "8397564", + "8407461", "8421569", "8537359", - "9101339" + "8581601", + "9101339", + "9473121", + "9674732" ], - "class_count": 272, - "truth_images_in_retained_classes": 42778, - "accepted_predictions_in_retained_classes": 30977, + "class_count": 636, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39089, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.963494109771882, - "precision": 0.9626322859838098, - "recall": 0.7171390330256306, - "f1": 0.8016422382706131 + "accuracy": 0.8755166405852203, + "precision": 0.7362820959348579, + "recall": 0.6075669492667327, + "f1": 0.5430735533140528 } }, { - "model": "onnx", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 5, @@ -31442,22 +30478,22 @@ "1732416", "1734453", "1734704", + "1737491", "1737542", "1739922", "1741341", "1742142", "1743532", - "1746440", + "1744782", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", - "1761041", "1762244", "1763610", - "1766210", + "1766137", "1766274", "1767597", "1769103", @@ -31512,10 +30548,8 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", "1822796", - "1822819", "1823726", "1825064", "1825077", @@ -31525,6 +30559,7 @@ "1826022", "1828162", "1828637", + "1830410", "1830937", "1835156", "1841261", @@ -31533,9 +30568,7 @@ "1872368", "1875008", "1875327", - "1875869", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -31589,6 +30622,7 @@ "1973414", "1973467", "1975553", + "1975571", "1975897", "1976163", "1977003", @@ -31600,13 +30634,11 @@ "1982500", "1982525", "1982541", - "1982636", "1982885", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", @@ -31629,11 +30661,11 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", "4531517", + "4531687", "4531690", "4532297", "4532544", @@ -31644,15 +30676,11 @@ "4534166", "4534207", "4534290", - "4534398", - "4534485", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", @@ -31703,6 +30731,7 @@ "5149746", "5714973", "5768880", + "5769068", "5769072", "5771350", "5771982", @@ -31717,6 +30746,7 @@ "7443518", "7681733", "7780930", + "7960566", "8015895", "8223165", "8262357", @@ -31726,20 +30756,20 @@ "8537359", "9101339" ], - "class_count": 287, - "truth_images_in_retained_classes": 44173, - "accepted_predictions_in_retained_classes": 31341, + "class_count": 281, + "truth_images_in_retained_classes": 42875, + "accepted_predictions_in_retained_classes": 31091, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9610226296998533, - "precision": 0.9619757519565229, - "recall": 0.7010200481362973, - "f1": 0.788830662496077 + "accuracy": 0.949227254623375, + "precision": 0.9437368670687469, + "recall": 0.6916423088644161, + "f1": 0.7737956953842571 } }, { - "model": "onnx", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 5, @@ -32020,18 +31050,18 @@ ], "class_count": 272, "truth_images_in_retained_classes": 42778, - "accepted_predictions_in_retained_classes": 30845, + "accepted_predictions_in_retained_classes": 31024, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9642506092928128, - "precision": 0.9626937682791291, - "recall": 0.7149144701582824, - "f1": 0.8001046982018762 + "accuracy": 0.9521428623131191, + "precision": 0.950834091298276, + "recall": 0.6967497218946193, + "f1": 0.7799317319854288 } }, { - "model": "torch-tta", + "model": "torch", "scope": "optimized", "rank": "species", "cutoff": 5, @@ -32041,7 +31071,6 @@ "1732416", "1734453", "1734704", - "1737491", "1737542", "1739922", "1741341", @@ -32081,7 +31110,6 @@ "1785286", "1785888", "1785895", - "1787610", "1789267", "1789695", "1789730", @@ -32115,7 +31143,6 @@ "1820372", "1821911", "1822346", - "1822610", "1822796", "1822819", "1823726", @@ -32166,7 +31193,6 @@ "1957816", "1957845", "1959383", - "1959395", "1959914", "1960617", "1962265", @@ -32198,7 +31224,6 @@ "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", @@ -32206,7 +31231,6 @@ "1982541", "1982636", "1982885", - "1983442", "1983525", "1983648", "1983755", @@ -32280,7 +31304,6 @@ "5124143", "5124233", "5125689", - "5126212", "5142870", "5143048", "5143129", @@ -32323,7 +31346,299 @@ "7443518", "7681733", "7780930", - "7960566", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 44180, + "accepted_predictions_in_retained_classes": 31486, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9604545336634476, + "precision": 0.9622152512833568, + "recall": 0.7039086159930352, + "f1": 0.7910306156942066 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", "8015895", "8223165", "8262357", @@ -32333,24 +31648,24 @@ "8537359", "9101339" ], - "class_count": 295, - "truth_images_in_retained_classes": 44279, - "accepted_predictions_in_retained_classes": 34630, + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30977, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.9565023879246428, - "precision": 0.9579592889257432, - "recall": 0.7631267851065484, - "f1": 0.8330906323599062 + "accuracy": 0.963494109771882, + "precision": 0.9626322859838096, + "recall": 0.7171390330256306, + "f1": 0.8016422382706132 } }, { - "model": "torch-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 5, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", @@ -32361,14 +31676,17 @@ "1741341", "1742142", "1743532", + "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", + "1761041", "1762244", "1763610", + "1766210", "1766274", "1767597", "1769103", @@ -32423,8 +31741,10 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", "1822796", + "1822819", "1823726", "1825064", "1825077", @@ -32442,7 +31762,9 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -32470,6 +31792,7 @@ "1957572", "1957816", "1957845", + "1959383", "1959914", "1960617", "1962265", @@ -32506,11 +31829,13 @@ "1982500", "1982525", "1982541", + "1982636", "1982885", "1983525", "1983648", "1983755", "1983896", + "1984117", "1985522", "1986157", "1986166", @@ -32533,6 +31858,7 @@ "4524636", "4524638", "4525078", + "4525510", "4525540", "4529566", "4531284", @@ -32547,11 +31873,15 @@ "4534166", "4534207", "4534290", + "4534398", + "4534485", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", + "5103451", "5104442", "5104558", "5105339", @@ -32625,46 +31955,42 @@ "8537359", "9101339" ], - "class_count": 272, - "truth_images_in_retained_classes": 42778, - "accepted_predictions_in_retained_classes": 33853, + "class_count": 287, + "truth_images_in_retained_classes": 44173, + "accepted_predictions_in_retained_classes": 31341, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9585814667783285, - "precision": 0.9585731812083509, - "recall": 0.7743974002343408, - "f1": 0.8413487263251005 + "accuracy": 0.9610226296998533, + "precision": 0.9619757519565231, + "recall": 0.7010200481362973, + "f1": 0.7888306624960773 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 5, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1737491", "1737542", "1739922", "1741341", "1742142", "1743532", - "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", - "1761041", "1762244", "1763610", - "1766210", "1766274", "1767597", "1769103", @@ -32688,7 +32014,6 @@ "1785286", "1785888", "1785895", - "1787610", "1789267", "1789695", "1789730", @@ -32720,11 +32045,8 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822610", "1822796", - "1822819", "1823726", "1825064", "1825077", @@ -32742,9 +32064,7 @@ "1872368", "1875008", "1875327", - "1875869", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -32772,7 +32092,6 @@ "1957572", "1957816", "1957845", - "1959395", "1959914", "1960617", "1962265", @@ -32804,20 +32123,16 @@ "1978114", "1978445", "1978776", - "1978977", "1979308", "1979473", "1982500", "1982525", "1982541", - "1982636", "1982885", - "1983442", "1983525", "1983648", "1983755", "1983896", - "1984117", "1985522", "1986157", "1986166", @@ -32840,7 +32155,6 @@ "4524636", "4524638", "4525078", - "4525510", "4525540", "4529566", "4531284", @@ -32855,14 +32169,11 @@ "4534166", "4534207", "4534290", - "4534485", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", - "5103451", "5104442", "5104558", "5105339", @@ -32885,7 +32196,6 @@ "5124143", "5124233", "5125689", - "5126212", "5142870", "5143048", "5143129", @@ -32928,7 +32238,6 @@ "7443518", "7681733", "7780930", - "7960566", "8015895", "8223165", "8262357", @@ -32938,42 +32247,46 @@ "8537359", "9101339" ], - "class_count": 293, - "truth_images_in_retained_classes": 44256, - "accepted_predictions_in_retained_classes": 32979, + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 30845, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9624875420542846, - "precision": 0.9631846488302392, - "recall": 0.7304548441650828, - "f1": 0.8110548032550082 + "accuracy": 0.9642506092928128, + "precision": 0.9626937682791291, + "recall": 0.7149144701582824, + "f1": 0.8001046982018765 } }, { - "model": "onnx-tta", + "model": "torch-tta", "scope": "optimized", "rank": "species", "cutoff": 5, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737491", "1737542", "1739922", "1741341", "1742142", "1743532", + "1746440", "1746775", "1746832", "1746876", "1758878", "1759153", "1760104", + "1761041", "1762244", "1763610", + "1766210", "1766274", "1767597", "1769103", @@ -32997,6 +32310,7 @@ "1785286", "1785888", "1785895", + "1787610", "1789267", "1789695", "1789730", @@ -33028,8 +32342,11 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822610", "1822796", + "1822819", "1823726", "1825064", "1825077", @@ -33047,7 +32364,9 @@ "1872368", "1875008", "1875327", + "1875869", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -33075,6 +32394,8 @@ "1957572", "1957816", "1957845", + "1959383", + "1959395", "1959914", "1960617", "1962265", @@ -33106,16 +32427,20 @@ "1978114", "1978445", "1978776", + "1978977", "1979308", "1979473", "1982500", "1982525", "1982541", + "1982636", "1982885", + "1983442", "1983525", "1983648", "1983755", "1983896", + "1984117", "1985522", "1986157", "1986166", @@ -33138,6 +32463,7 @@ "4524636", "4524638", "4525078", + "4525510", "4525540", "4529566", "4531284", @@ -33152,11 +32478,15 @@ "4534166", "4534207", "4534290", + "4534398", + "4534485", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", + "5103451", "5104442", "5104558", "5105339", @@ -33179,6 +32509,7 @@ "5124143", "5124233", "5125689", + "5126212", "5142870", "5143048", "5143129", @@ -33221,6 +32552,7 @@ "7443518", "7681733", "7780930", + "7960566", "8015895", "8223165", "8262357", @@ -33230,36 +32562,40 @@ "8537359", "9101339" ], - "class_count": 272, - "truth_images_in_retained_classes": 42778, - "accepted_predictions_in_retained_classes": 32341, + "class_count": 295, + "truth_images_in_retained_classes": 44279, + "accepted_predictions_in_retained_classes": 34630, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9650388599694326, - "precision": 0.9639006969879437, - "recall": 0.7443741514376615, - "f1": 0.8223569195026884 + "accuracy": 0.9565023879246428, + "precision": 0.9579592889257424, + "recall": 0.7631267851065484, + "f1": 0.8330906323599061 } }, { - "model": "v2", + "model": "torch-tta", "scope": "optimized", "rank": "species", - "cutoff": 10, - "domain": "per_model", + "cutoff": 5, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737542", + "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", + "1746876", "1758878", "1759153", + "1760104", "1762244", "1763610", "1766274", @@ -33267,6 +32603,7 @@ "1769103", "1769566", "1769897", + "1770307", "1770477", "1770880", "1771214", @@ -33276,21 +32613,27 @@ "1772179", "1777253", "1778074", + "1780150", "1782763", "1782777", "1782927", "1783043", "1785286", + "1785888", "1785895", + "1789267", "1789695", + "1789730", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", "1795215", "1796145", + "1796678", "1797258", "1797479", "1798807", @@ -33320,8 +32663,10 @@ "1826022", "1828162", "1828637", + "1830937", "1835156", "1841261", + "1845270", "1864377", "1872368", "1875008", @@ -33336,11 +32681,13 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", + "1891493", "1951557", "1951649", "1952014", @@ -33350,11 +32697,13 @@ "1956599", "1957570", "1957572", + "1957816", "1957845", "1959914", "1960617", "1962265", "1962434", + "1962636", "1962990", "1963306", "1963446", @@ -33374,6 +32723,7 @@ "1972250", "1973414", "1973467", + "1975553", "1975897", "1976163", "1977003", @@ -33388,6 +32738,7 @@ "1982885", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986157", @@ -33413,6 +32764,7 @@ "4525078", "4525540", "4529566", + "4531284", "4531517", "4531690", "4532297", @@ -33421,6 +32773,8 @@ "4532890", "4533136", "4533273", + "4534166", + "4534207", "4534290", "4534540", "4534719", @@ -33430,10 +32784,12 @@ "5104442", "5104558", "5105339", + "5109821", "5110200", "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -33448,12 +32804,14 @@ "5124233", "5125689", "5142870", + "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", + "5144190", "5144426", "5144534", "5144543", @@ -33475,7 +32833,10 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", + "5772210", + "5772351", "5880533", "5880552", "5880559", @@ -33493,42 +32854,52 @@ "8537359", "9101339" ], - "class_count": 243, - "truth_images_in_retained_classes": 42227, - "accepted_predictions_in_retained_classes": 30743, + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 33853, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.953448505161714, - "precision": 0.9544450850263946, - "recall": 0.7134225852923751, - "f1": 0.7961537592407802 + "accuracy": 0.9585814667783285, + "precision": 0.9585731812083507, + "recall": 0.7743974002343408, + "f1": 0.8413487263251 } }, { - "model": "v2", + "model": "onnx-tta", "scope": "optimized", "rank": "species", - "cutoff": 10, - "domain": "common", + "cutoff": 5, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737491", + "1737542", + "1739922", "1741341", "1742142", "1743532", + "1746440", "1746775", "1746832", + "1746876", + "1758878", "1759153", + "1760104", + "1761041", "1762244", "1763610", + "1766210", "1766274", "1767597", "1769103", "1769566", "1769897", + "1770307", "1770477", "1770880", "1771214", @@ -33538,21 +32909,28 @@ "1772179", "1777253", "1778074", + "1780150", "1782763", "1782777", "1782927", "1783043", "1785286", + "1785888", "1785895", + "1787610", + "1789267", "1789695", + "1789730", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", "1795215", "1796145", + "1796678", "1797258", "1797479", "1798807", @@ -33571,22 +32949,31 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822610", + "1822796", + "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", + "1826022", "1828162", "1828637", + "1830937", "1835156", "1841261", + "1845270", "1864377", "1872368", "1875008", "1875327", + "1875869", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -33596,12 +32983,15 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", + "1891493", "1951557", + "1951649", "1952014", "1952532", "1952806", @@ -33609,11 +32999,14 @@ "1956599", "1957570", "1957572", + "1957816", "1957845", + "1959395", "1959914", "1960617", "1962265", "1962434", + "1962636", "1962990", "1963306", "1963446", @@ -33633,22 +33026,30 @@ "1972250", "1973414", "1973467", + "1975553", "1975897", "1976163", "1977003", "1978114", "1978445", "1978776", + "1978977", "1979308", "1979473", "1982500", "1982525", "1982541", + "1982636", + "1982885", + "1983442", "1983525", "1983648", + "1983755", "1983896", + "1984117", "1985522", "1986157", + "1986166", "1986220", "1986522", "1986575", @@ -33668,8 +33069,10 @@ "4524636", "4524638", "4525078", + "4525510", "4525540", "4529566", + "4531284", "4531517", "4531690", "4532297", @@ -33678,19 +33081,26 @@ "4532890", "4533136", "4533273", + "4534166", + "4534207", "4534290", + "4534485", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", + "5103451", "5104442", "5104558", "5105339", + "5109821", "5110200", "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -33704,13 +33114,16 @@ "5124143", "5124233", "5125689", + "5126212", "5142870", + "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", + "5144190", "5144426", "5144534", "5144543", @@ -33732,7 +33145,10 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", + "5772210", + "5772351", "5880533", "5880552", "5880559", @@ -33741,6 +33157,7 @@ "7443518", "7681733", "7780930", + "7960566", "8015895", "8223165", "8262357", @@ -33750,29 +33167,30 @@ "8537359", "9101339" ], - "class_count": 237, - "truth_images_in_retained_classes": 42021, - "accepted_predictions_in_retained_classes": 30611, + "class_count": 293, + "truth_images_in_retained_classes": 44256, + "accepted_predictions_in_retained_classes": 32979, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.9552371110145412, - "precision": 0.9586140054758544, - "recall": 0.7164050701636104, - "f1": 0.8009004286169518 + "accuracy": 0.9624875420542846, + "precision": 0.9631846488302389, + "recall": 0.7304548441650828, + "f1": 0.8110548032550078 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "optimized", "rank": "species", - "cutoff": 10, - "domain": "per_model", + "cutoff": 5, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1737542", "1739922", "1741341", "1742142", @@ -33780,6 +33198,7 @@ "1746775", "1746832", "1746876", + "1758878", "1759153", "1760104", "1762244", @@ -33789,6 +33208,7 @@ "1769103", "1769566", "1769897", + "1770307", "1770477", "1770880", "1771214", @@ -33798,6 +33218,7 @@ "1772179", "1777253", "1778074", + "1780150", "1782763", "1782777", "1782927", @@ -33805,7 +33226,9 @@ "1785286", "1785888", "1785895", + "1789267", "1789695", + "1789730", "1789745", "1789785", "1791422", @@ -33834,26 +33257,26 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822819", + "1822796", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", + "1826022", "1828162", "1828637", "1830937", "1835156", "1841261", + "1845270", "1864377", "1872368", "1875008", "1875327", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -33871,6 +33294,7 @@ "1891473", "1891493", "1951557", + "1951649", "1952014", "1952532", "1952806", @@ -33878,11 +33302,13 @@ "1956599", "1957570", "1957572", + "1957816", "1957845", "1959914", "1960617", "1962265", "1962434", + "1962636", "1962990", "1963306", "1963446", @@ -33902,6 +33328,7 @@ "1972250", "1973414", "1973467", + "1975553", "1975897", "1976163", "1977003", @@ -33913,13 +33340,14 @@ "1982500", "1982525", "1982541", - "1982636", + "1982885", "1983525", "1983648", "1983755", "1983896", "1985522", "1986157", + "1986166", "1986220", "1986522", "1986575", @@ -33950,21 +33378,23 @@ "4532890", "4533136", "4533273", + "4534166", "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", "5104442", "5104558", "5105339", + "5109821", "5110200", "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -33979,12 +33409,14 @@ "5124233", "5125689", "5142870", + "5143048", "5143129", "5143147", "5143380", "5143651", "5143675", "5143697", + "5144190", "5144426", "5144534", "5144543", @@ -34006,7 +33438,9 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", + "5772210", "5772351", "5880533", "5880552", @@ -34025,24 +33459,24 @@ "8537359", "9101339" ], - "class_count": 255, - "truth_images_in_retained_classes": 43584, - "accepted_predictions_in_retained_classes": 31151, + "class_count": 272, + "truth_images_in_retained_classes": 42778, + "accepted_predictions_in_retained_classes": 32341, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.963686280781054, - "precision": 0.9676952538780558, - "recall": 0.7171112436175308, - "f1": 0.8061491380093965 + "accuracy": 0.9650388599694326, + "precision": 0.9639006969879439, + "recall": 0.7443741514376615, + "f1": 0.8223569195026881 } }, { - "model": "torch", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", @@ -34053,6 +33487,7 @@ "1743532", "1746775", "1746832", + "1758878", "1759153", "1762244", "1763610", @@ -34104,12 +33539,14 @@ "1820039", "1820372", "1822346", + "1822796", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", + "1826022", "1828162", "1828637", "1835156", @@ -34134,6 +33571,7 @@ "1890576", "1891473", "1951557", + "1951649", "1952014", "1952532", "1952806", @@ -34176,11 +33614,13 @@ "1982500", "1982525", "1982541", + "1982885", "1983525", "1983648", "1983896", "1985522", "1986157", + "1986166", "1986220", "1986522", "1986575", @@ -34282,38 +33722,35 @@ "8537359", "9101339" ], - "class_count": 237, - "truth_images_in_retained_classes": 42021, - "accepted_predictions_in_retained_classes": 30528, + "class_count": 243, + "truth_images_in_retained_classes": 42227, + "accepted_predictions_in_retained_classes": 30743, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9673296490095744, - "precision": 0.9672615516732053, - "recall": 0.7266753942187194, - "f1": 0.8138865890143704 + "accuracy": 0.953448505161714, + "precision": 0.9544450850263946, + "recall": 0.7134225852923751, + "f1": 0.79615375924078 } }, { - "model": "onnx", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", - "1746876", "1759153", - "1760104", "1762244", "1763610", "1766274", @@ -34335,19 +33772,16 @@ "1782927", "1783043", "1785286", - "1785888", "1785895", "1789695", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", "1795215", "1796145", - "1796678", "1797258", "1797479", "1798807", @@ -34366,9 +33800,7 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822819", "1823726", "1825064", "1825077", @@ -34377,7 +33809,6 @@ "1825983", "1828162", "1828637", - "1830937", "1835156", "1841261", "1864377", @@ -34385,7 +33816,6 @@ "1875008", "1875327", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -34395,13 +33825,11 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", - "1891493", "1951557", "1952014", "1952532", @@ -34445,10 +33873,8 @@ "1982500", "1982525", "1982541", - "1982636", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986157", @@ -34473,7 +33899,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -34482,13 +33907,11 @@ "4532890", "4533136", "4533273", - "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", "5104442", "5104558", @@ -34539,7 +33962,6 @@ "5769072", "5771350", "5772196", - "5772351", "5880533", "5880552", "5880559", @@ -34557,35 +33979,38 @@ "8537359", "9101339" ], - "class_count": 255, - "truth_images_in_retained_classes": 43584, - "accepted_predictions_in_retained_classes": 31014, + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30611, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9644807475606031, - "precision": 0.9677553930474767, - "recall": 0.7146917879143063, - "f1": 0.8044523205064158 + "accuracy": 0.9552371110145412, + "precision": 0.9586140054758545, + "recall": 0.7164050701636104, + "f1": 0.8009004286169517 } }, { - "model": "onnx", + "model": "torch", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", + "1746876", "1759153", + "1760104", "1762244", "1763610", "1766274", @@ -34607,16 +34032,19 @@ "1782927", "1783043", "1785286", + "1785888", "1785895", "1789695", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", "1795215", "1796145", + "1796678", "1797258", "1797479", "1798807", @@ -34635,7 +34063,9 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822819", "1823726", "1825064", "1825077", @@ -34644,6 +34074,7 @@ "1825983", "1828162", "1828637", + "1830937", "1835156", "1841261", "1864377", @@ -34651,6 +34082,7 @@ "1875008", "1875327", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -34660,11 +34092,13 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", + "1891493", "1951557", "1952014", "1952532", @@ -34708,8 +34142,10 @@ "1982500", "1982525", "1982541", + "1982636", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986157", @@ -34734,6 +34170,7 @@ "4525078", "4525540", "4529566", + "4531284", "4531517", "4531690", "4532297", @@ -34742,11 +34179,13 @@ "4532890", "4533136", "4533273", + "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", "5104558", @@ -34797,6 +34236,7 @@ "5769072", "5771350", "5772196", + "5772351", "5880533", "5880552", "5880559", @@ -34814,39 +34254,35 @@ "8537359", "9101339" ], - "class_count": 237, - "truth_images_in_retained_classes": 42021, - "accepted_predictions_in_retained_classes": 30399, + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31151, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.9681978678690395, - "precision": 0.9673496769410929, - "recall": 0.7245547988604122, - "f1": 0.8124276972685942 + "accuracy": 0.963686280781054, + "precision": 0.9676952538780556, + "recall": 0.7171112436175308, + "f1": 0.8061491380093968 } }, { - "model": "torch-tta", + "model": "torch", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", - "1746876", - "1758878", "1759153", - "1760104", "1762244", "1763610", "1766274", @@ -34868,21 +34304,16 @@ "1782927", "1783043", "1785286", - "1785888", "1785895", - "1787610", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", "1795215", "1796145", - "1796678", "1797258", "1797479", "1798807", @@ -34901,30 +34332,22 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822610", - "1822796", - "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", - "1826022", "1828162", "1828637", - "1830937", "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -34934,13 +34357,11 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", - "1891493", "1951557", "1952014", "1952532", @@ -34984,16 +34405,11 @@ "1982500", "1982525", "1982541", - "1982636", - "1982885", - "1983442", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986157", - "1986166", "1986220", "1986522", "1986575", @@ -35015,7 +34431,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -35024,13 +34439,11 @@ "4532890", "4533136", "4533273", - "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", "5104442", "5104558", @@ -35039,7 +34452,6 @@ "5110213", "5110670", "5110885", - "5111574", "5112283", "5113078", "5114198", @@ -35081,10 +34493,7 @@ "5768880", "5769072", "5771350", - "5771982", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", @@ -35102,35 +34511,38 @@ "8537359", "9101339" ], - "class_count": 268, - "truth_images_in_retained_classes": 43942, - "accepted_predictions_in_retained_classes": 34313, + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30528, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.9555513324900085, - "precision": 0.9634422815056631, - "recall": 0.7666899243764238, - "f1": 0.8398127135942168 + "accuracy": 0.9673296490095744, + "precision": 0.9672615516732049, + "recall": 0.7266753942187194, + "f1": 0.8138865890143703 } }, { - "model": "torch-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", + "1746876", "1759153", + "1760104", "1762244", "1763610", "1766274", @@ -35152,16 +34564,19 @@ "1782927", "1783043", "1785286", + "1785888", "1785895", "1789695", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", "1795215", "1796145", + "1796678", "1797258", "1797479", "1798807", @@ -35180,7 +34595,9 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822819", "1823726", "1825064", "1825077", @@ -35189,6 +34606,7 @@ "1825983", "1828162", "1828637", + "1830937", "1835156", "1841261", "1864377", @@ -35196,6 +34614,7 @@ "1875008", "1875327", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -35205,11 +34624,13 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", + "1891493", "1951557", "1952014", "1952532", @@ -35253,8 +34674,10 @@ "1982500", "1982525", "1982541", + "1982636", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986157", @@ -35279,6 +34702,7 @@ "4525078", "4525540", "4529566", + "4531284", "4531517", "4531690", "4532297", @@ -35287,11 +34711,13 @@ "4532890", "4533136", "4533273", + "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", "5104558", @@ -35342,6 +34768,7 @@ "5769072", "5771350", "5772196", + "5772351", "5880533", "5880552", "5880559", @@ -35359,39 +34786,35 @@ "8537359", "9101339" ], - "class_count": 237, - "truth_images_in_retained_classes": 42021, - "accepted_predictions_in_retained_classes": 33322, + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31014, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9625685565215116, - "precision": 0.9646515680804645, - "recall": 0.7845362115505334, - "f1": 0.8537896748755334 + "accuracy": 0.9644807475606031, + "precision": 0.9677553930474765, + "recall": 0.7146917879143063, + "f1": 0.8044523205064164 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", "1734704", - "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", - "1746876", - "1758878", "1759153", - "1760104", "1762244", "1763610", "1766274", @@ -35413,20 +34836,16 @@ "1782927", "1783043", "1785286", - "1785888", "1785895", "1789695", - "1789730", "1789745", "1789785", "1791422", "1792383", - "1792411", "1792418", "1794590", "1795215", "1796145", - "1796678", "1797258", "1797479", "1798807", @@ -35445,10 +34864,7 @@ "1819873", "1820039", "1820372", - "1821911", "1822346", - "1822796", - "1822819", "1823726", "1825064", "1825077", @@ -35457,16 +34873,13 @@ "1825983", "1828162", "1828637", - "1830937", "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1875869", "1876329", - "1879252", "1879970", "1881151", "1882210", @@ -35476,13 +34889,11 @@ "1884403", "1884465", "1884970", - "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", - "1891493", "1951557", "1952014", "1952532", @@ -35526,15 +34937,11 @@ "1982500", "1982525", "1982541", - "1982636", - "1982885", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986157", - "1986166", "1986220", "1986522", "1986575", @@ -35556,7 +34963,6 @@ "4525078", "4525540", "4529566", - "4531284", "4531517", "4531690", "4532297", @@ -35565,13 +34971,11 @@ "4532890", "4533136", "4533273", - "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", - "5101678", "5102951", "5104442", "5104558", @@ -35621,10 +35025,7 @@ "5768880", "5769072", "5771350", - "5771982", "5772196", - "5772210", - "5772351", "5880533", "5880552", "5880559", @@ -35642,35 +35043,39 @@ "8537359", "9101339" ], - "class_count": 263, - "truth_images_in_retained_classes": 43846, - "accepted_predictions_in_retained_classes": 32662, + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30399, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.961629373180915, - "precision": 0.9681806145232889, - "recall": 0.7372508842609241, - "f1": 0.820284716224131 + "accuracy": 0.9681978678690395, + "precision": 0.9673496769410925, + "recall": 0.7245547988604122, + "f1": 0.8124276972685947 } }, { - "model": "onnx-tta", + "model": "torch-tta", "scope": "optimized", "rank": "species", "cutoff": 10, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1734704", + "1739922", "1741341", "1742142", "1743532", "1746775", "1746832", + "1746876", + "1758878", "1759153", + "1760104", "1762244", "1763610", "1766274", @@ -35692,16 +35097,21 @@ "1782927", "1783043", "1785286", + "1785888", "1785895", + "1787610", "1789695", + "1789730", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", "1795215", "1796145", + "1796678", "1797258", "1797479", "1798807", @@ -35720,22 +35130,30 @@ "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822610", + "1822796", + "1822819", "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", + "1826022", "1828162", "1828637", + "1830937", "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", + "1875869", "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -35745,11 +35163,13 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", "1888759", "1890187", "1890576", "1891473", + "1891493", "1951557", "1952014", "1952532", @@ -35793,11 +35213,16 @@ "1982500", "1982525", "1982541", + "1982636", + "1982885", + "1983442", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986157", + "1986166", "1986220", "1986522", "1986575", @@ -35819,6 +35244,7 @@ "4525078", "4525540", "4529566", + "4531284", "4531517", "4531690", "4532297", @@ -35827,11 +35253,13 @@ "4532890", "4533136", "4533273", + "4534207", "4534290", "4534540", "4534719", "4534872", "4534909", + "5101678", "5102951", "5104442", "5104558", @@ -35840,6 +35268,7 @@ "5110213", "5110670", "5110885", + "5111574", "5112283", "5113078", "5114198", @@ -35881,7 +35310,10 @@ "5768880", "5769072", "5771350", + "5771982", "5772196", + "5772210", + "5772351", "5880533", "5880552", "5880559", @@ -35899,45 +35331,55 @@ "8537359", "9101339" ], - "class_count": 237, - "truth_images_in_retained_classes": 42021, - "accepted_predictions_in_retained_classes": 31861, + "class_count": 268, + "truth_images_in_retained_classes": 43942, + "accepted_predictions_in_retained_classes": 34313, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9683141861823075, - "precision": 0.9697003821520682, - "recall": 0.7555690214239896, - "f1": 0.8356173638868799 + "accuracy": 0.9555513324900085, + "precision": 0.9634422815056631, + "recall": 0.7666899243764238, + "f1": 0.8398127135942166 } }, { - "model": "v2", + "model": "torch-tta", "scope": "optimized", "rank": "species", - "cutoff": 20, - "domain": "per_model", + "cutoff": 10, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", + "1734704", + "1741341", + "1742142", "1743532", "1746775", "1746832", "1759153", + "1762244", "1763610", "1766274", + "1767597", "1769103", "1769566", "1769897", "1770477", "1770880", + "1771214", "1771509", "1771698", + "1772169", "1772179", + "1777253", + "1778074", "1782763", "1782777", "1782927", + "1783043", "1785286", "1785895", "1789695", @@ -35947,18 +35389,24 @@ "1792383", "1792418", "1794590", + "1795215", "1796145", + "1797258", "1797479", "1798807", + "1799132", + "1800004", "1800032", "1801896", "1802280", "1803073", "1804071", "1804906", + "1810099", "1812394", "1813114", "1819145", + "1819873", "1820039", "1820372", "1822346", @@ -35969,11 +35417,14 @@ "1825971", "1825983", "1828162", + "1828637", + "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", + "1876329", "1879970", "1881151", "1882210", @@ -35984,8 +35435,10 @@ "1884465", "1884970", "1887290", + "1888759", "1890187", "1890576", + "1891473", "1951557", "1952014", "1952532", @@ -35996,6 +35449,7 @@ "1957572", "1957845", "1959914", + "1960617", "1962265", "1962434", "1962990", @@ -36004,35 +35458,47 @@ "1964653", "1964657", "1965166", + "1965208", "1965763", + "1965841", "1966017", + "1967815", "1968678", "1968867", "1970213", + "1970284", "1972187", "1972250", + "1973414", "1973467", "1975897", "1976163", + "1977003", "1978114", "1978445", "1978776", "1979308", "1979473", "1982500", + "1982525", "1982541", "1983525", "1983648", "1983896", "1985522", - "1986166", + "1986157", "1986220", + "1986522", + "1986575", "1988593", "1988881", "1989428", "1990150", + "1991371", "1992066", + "4522322", "4523522", + "4523885", "4524054", "4524376", "4524421", @@ -36049,17 +35515,22 @@ "4532886", "4532890", "4533136", + "4533273", + "4534290", "4534540", "4534719", "4534872", "4534909", "5102951", "5104442", + "5104558", "5105339", "5110200", + "5110213", "5110670", "5110885", "5112283", + "5113078", "5114198", "5115771", "5115777", @@ -36068,6 +35539,7 @@ "5118996", "5119245", "5124007", + "5124143", "5124233", "5125689", "5142870", @@ -36079,12 +35551,14 @@ "5143697", "5144426", "5144534", + "5144543", "5145009", "5146379", "5146412", "5146559", "5146961", "5147208", + "5147608", "5148424", "5148462", "5148486", @@ -36093,6 +35567,7 @@ "5149665", "5149746", "5714973", + "5768880", "5769072", "5771350", "5772196", @@ -36101,86 +35576,126 @@ "5880559", "5884851", "6097214", + "7443518", "7681733", + "7780930", "8015895", + "8223165", "8262357", "8361848", "8397564", "8421569", + "8537359", "9101339" ], - "class_count": 190, - "truth_images_in_retained_classes": 40924, - "accepted_predictions_in_retained_classes": 29917, + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 33322, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9610844376490718, - "precision": 0.9546242144015308, - "recall": 0.720024084306013, - "f1": 0.8034606105897979 + "accuracy": 0.9625685565215116, + "precision": 0.9646515680804644, + "recall": 0.7845362115505334, + "f1": 0.8537896748755333 } }, { - "model": "v2", + "model": "onnx-tta", "scope": "optimized", "rank": "species", - "cutoff": 20, - "domain": "common", + "cutoff": 10, + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", + "1734704", + "1739922", + "1741341", + "1742142", "1743532", + "1746775", "1746832", + "1746876", + "1758878", "1759153", + "1760104", + "1762244", "1763610", "1766274", + "1767597", "1769103", "1769566", "1769897", "1770477", "1770880", + "1771214", "1771509", "1771698", + "1772169", "1772179", + "1777253", + "1778074", "1782763", "1782777", "1782927", + "1783043", "1785286", + "1785888", "1785895", "1789695", + "1789730", "1789745", "1789785", "1791422", "1792383", + "1792411", "1792418", "1794590", + "1795215", "1796145", + "1796678", + "1797258", "1797479", "1798807", + "1799132", + "1800004", "1800032", "1801896", "1802280", + "1803073", "1804071", "1804906", + "1810099", "1812394", "1813114", "1819145", + "1819873", "1820039", "1820372", + "1821911", "1822346", + "1822796", + "1822819", + "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", "1828162", + "1828637", + "1830937", + "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", + "1875869", + "1876329", + "1879252", "1879970", "1881151", "1882210", @@ -36190,9 +35705,13 @@ "1884403", "1884465", "1884970", + "1887108", "1887290", + "1888759", "1890187", "1890576", + "1891473", + "1891493", "1951557", "1952014", "1952532", @@ -36203,41 +35722,60 @@ "1957572", "1957845", "1959914", + "1960617", "1962265", "1962434", "1962990", "1963306", "1963446", "1964653", + "1964657", "1965166", + "1965208", "1965763", + "1965841", "1966017", + "1967815", "1968678", "1968867", "1970213", + "1970284", "1972187", "1972250", + "1973414", "1973467", "1975897", "1976163", + "1977003", "1978114", "1978445", "1978776", "1979308", "1979473", "1982500", + "1982525", "1982541", + "1982636", + "1982885", "1983525", "1983648", + "1983755", "1983896", "1985522", + "1986157", + "1986166", "1986220", + "1986522", + "1986575", "1988593", "1988881", "1989428", "1990150", + "1991371", "1992066", + "4522322", "4523522", + "4523885", "4524054", "4524376", "4524421", @@ -36247,21 +35785,32 @@ "4525078", "4525540", "4529566", + "4531284", + "4531517", "4531690", "4532297", "4532544", "4532886", "4532890", "4533136", + "4533273", + "4534207", + "4534290", "4534540", "4534719", + "4534872", "4534909", + "5101678", "5102951", "5104442", + "5104558", "5105339", "5110200", + "5110213", "5110670", "5110885", + "5112283", + "5113078", "5114198", "5115771", "5115777", @@ -36270,8 +35819,10 @@ "5118996", "5119245", "5124007", + "5124143", "5124233", "5125689", + "5142870", "5143129", "5143147", "5143380", @@ -36280,11 +35831,14 @@ "5143697", "5144426", "5144534", + "5144543", "5145009", "5146379", + "5146412", "5146559", "5146961", "5147208", + "5147608", "5148424", "5148462", "5148486", @@ -36293,62 +35847,79 @@ "5149665", "5149746", "5714973", + "5768880", "5769072", "5771350", + "5771982", "5772196", + "5772210", + "5772351", "5880533", "5880552", "5880559", "5884851", "6097214", + "7443518", "7681733", + "7780930", "8015895", + "8223165", "8262357", "8361848", "8397564", "8421569", + "8537359", "9101339" ], - "class_count": 180, - "truth_images_in_retained_classes": 40455, - "accepted_predictions_in_retained_classes": 29626, + "class_count": 263, + "truth_images_in_retained_classes": 43846, + "accepted_predictions_in_retained_classes": 32662, "report_images": 52788, - "overall_coverage": 0.6973175721754944, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.9646484348350589, - "precision": 0.9605971055104869, - "recall": 0.7264566019960785, - "f1": 0.811036699937377 + "accuracy": 0.961629373180915, + "precision": 0.9681806145232891, + "recall": 0.7372508842609241, + "f1": 0.8202847162241308 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "optimized", "rank": "species", - "cutoff": 20, - "domain": "per_model", + "cutoff": 10, + "domain": "common", "classes": [ "1732063", "1732416", "1734453", + "1734704", + "1741341", "1742142", "1743532", + "1746775", "1746832", "1759153", + "1762244", "1763610", "1766274", + "1767597", "1769103", "1769566", "1769897", "1770477", "1770880", + "1771214", "1771509", "1771698", "1772169", "1772179", + "1777253", + "1778074", "1782763", "1782777", "1782927", + "1783043", "1785286", "1785895", "1789695", @@ -36360,33 +35931,40 @@ "1794590", "1795215", "1796145", + "1797258", "1797479", "1798807", + "1799132", + "1800004", "1800032", "1801896", "1802280", + "1803073", "1804071", "1804906", "1810099", "1812394", "1813114", "1819145", + "1819873", "1820039", "1820372", - "1821911", "1822346", + "1823726", "1825064", "1825077", "1825156", "1825971", "1825983", "1828162", + "1828637", + "1835156", "1841261", "1864377", "1872368", "1875008", "1875327", - "1879252", + "1876329", "1879970", "1881151", "1882210", @@ -36397,8 +35975,10 @@ "1884465", "1884970", "1887290", + "1888759", "1890187", "1890576", + "1891473", "1951557", "1952014", "1952532", @@ -36409,42 +35989,52 @@ "1957572", "1957845", "1959914", + "1960617", "1962265", "1962434", "1962990", "1963306", "1963446", "1964653", + "1964657", "1965166", "1965208", "1965763", + "1965841", "1966017", + "1967815", "1968678", "1968867", "1970213", + "1970284", "1972187", "1972250", + "1973414", "1973467", "1975897", "1976163", + "1977003", "1978114", "1978445", "1978776", "1979308", "1979473", "1982500", + "1982525", "1982541", "1983525", "1983648", - "1983755", "1983896", "1985522", + "1986157", "1986220", + "1986522", "1986575", "1988593", "1988881", "1989428", "1990150", + "1991371", "1992066", "4522322", "4523522", @@ -36458,23 +36048,29 @@ "4525078", "4525540", "4529566", + "4531517", "4531690", "4532297", "4532544", "4532886", "4532890", "4533136", + "4533273", + "4534290", "4534540", "4534719", "4534872", "4534909", "5102951", "5104442", + "5104558", "5105339", "5110200", "5110213", "5110670", "5110885", + "5112283", + "5113078", "5114198", "5115771", "5115777", @@ -36486,6 +36082,7 @@ "5124143", "5124233", "5125689", + "5142870", "5143129", "5143147", "5143380", @@ -36494,11 +36091,14 @@ "5143697", "5144426", "5144534", + "5144543", "5145009", "5146379", + "5146412", "5146559", "5146961", "5147208", + "5147608", "5148424", "5148462", "5148486", @@ -36507,6 +36107,7 @@ "5149665", "5149746", "5714973", + "5768880", "5769072", "5771350", "5772196", @@ -36515,37 +36116,42 @@ "5880559", "5884851", "6097214", + "7443518", "7681733", + "7780930", "8015895", + "8223165", "8262357", "8361848", "8397564", "8421569", + "8537359", "9101339" ], - "class_count": 194, - "truth_images_in_retained_classes": 41945, - "accepted_predictions_in_retained_classes": 30249, + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 31861, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.9726536166037543, - "precision": 0.9673028973830733, - "recall": 0.7249718216154226, - "f1": 0.8139613934096738 + "accuracy": 0.9683141861823075, + "precision": 0.9697003821520683, + "recall": 0.7555690214239896, + "f1": 0.8356173638868795 } }, { - "model": "torch", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", "1743532", + "1746775", "1746832", "1759153", "1763610", @@ -36576,6 +36182,7 @@ "1800032", "1801896", "1802280", + "1803073", "1804071", "1804906", "1812394", @@ -36584,6 +36191,7 @@ "1820039", "1820372", "1822346", + "1823726", "1825064", "1825077", "1825156", @@ -36623,6 +36231,7 @@ "1963306", "1963446", "1964653", + "1964657", "1965166", "1965763", "1966017", @@ -36645,6 +36254,7 @@ "1983648", "1983896", "1985522", + "1986166", "1986220", "1988593", "1988881", @@ -36661,6 +36271,7 @@ "4525078", "4525540", "4529566", + "4531517", "4531690", "4532297", "4532544", @@ -36669,6 +36280,7 @@ "4533136", "4534540", "4534719", + "4534872", "4534909", "5102951", "5104442", @@ -36676,6 +36288,7 @@ "5110200", "5110670", "5110885", + "5112283", "5114198", "5115771", "5115777", @@ -36686,6 +36299,7 @@ "5124007", "5124233", "5125689", + "5142870", "5143129", "5143147", "5143380", @@ -36696,6 +36310,7 @@ "5144534", "5145009", "5146379", + "5146412", "5146559", "5146961", "5147208", @@ -36723,29 +36338,28 @@ "8421569", "9101339" ], - "class_count": 180, - "truth_images_in_retained_classes": 40455, - "accepted_predictions_in_retained_classes": 29545, + "class_count": 190, + "truth_images_in_retained_classes": 40924, + "accepted_predictions_in_retained_classes": 29917, "report_images": 52788, - "overall_coverage": 0.7081344244904145, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9744003816755382, - "precision": 0.9682799478546156, - "recall": 0.7355230038915617, - "f1": 0.8220522350709073 + "accuracy": 0.9610844376490718, + "precision": 0.9546242144015308, + "recall": 0.720024084306013, + "f1": 0.8034606105897977 } }, { - "model": "onnx", + "model": "v2", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1742142", "1743532", "1746832", "1759153", @@ -36758,7 +36372,6 @@ "1770880", "1771509", "1771698", - "1772169", "1772179", "1782763", "1782777", @@ -36772,7 +36385,6 @@ "1792383", "1792418", "1794590", - "1795215", "1796145", "1797479", "1798807", @@ -36781,13 +36393,11 @@ "1802280", "1804071", "1804906", - "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", - "1821911", "1822346", "1825064", "1825077", @@ -36800,7 +36410,6 @@ "1872368", "1875008", "1875327", - "1879252", "1879970", "1881151", "1882210", @@ -36830,7 +36439,6 @@ "1963446", "1964653", "1965166", - "1965208", "1965763", "1966017", "1968678", @@ -36850,19 +36458,15 @@ "1982541", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986220", - "1986575", "1988593", "1988881", "1989428", "1990150", "1992066", - "4522322", "4523522", - "4523885", "4524054", "4524376", "4524421", @@ -36885,7 +36489,6 @@ "5104442", "5105339", "5110200", - "5110213", "5110670", "5110885", "5114198", @@ -36896,7 +36499,6 @@ "5118996", "5119245", "5124007", - "5124143", "5124233", "5125689", "5143129", @@ -36936,28 +36538,29 @@ "8421569", "9101339" ], - "class_count": 193, - "truth_images_in_retained_classes": 41892, - "accepted_predictions_in_retained_classes": 30094, + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29626, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.6973175721754944, "metrics": { - "accuracy": 0.9730113961424189, - "precision": 0.9672414097720884, - "recall": 0.7241073248627131, - "f1": 0.8134845543532355 + "accuracy": 0.9646484348350589, + "precision": 0.960597105510487, + "recall": 0.7264566019960785, + "f1": 0.8110366999373771 } }, { - "model": "onnx", + "model": "torch", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", + "1742142", "1743532", "1746832", "1759153", @@ -36970,6 +36573,7 @@ "1770880", "1771509", "1771698", + "1772169", "1772179", "1782763", "1782777", @@ -36983,6 +36587,7 @@ "1792383", "1792418", "1794590", + "1795215", "1796145", "1797479", "1798807", @@ -36991,11 +36596,13 @@ "1802280", "1804071", "1804906", + "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", + "1821911", "1822346", "1825064", "1825077", @@ -37008,6 +36615,7 @@ "1872368", "1875008", "1875327", + "1879252", "1879970", "1881151", "1882210", @@ -37037,6 +36645,7 @@ "1963446", "1964653", "1965166", + "1965208", "1965763", "1966017", "1968678", @@ -37056,15 +36665,19 @@ "1982541", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986220", + "1986575", "1988593", "1988881", "1989428", "1990150", "1992066", + "4522322", "4523522", + "4523885", "4524054", "4524376", "4524421", @@ -37082,11 +36695,13 @@ "4533136", "4534540", "4534719", + "4534872", "4534909", "5102951", "5104442", "5105339", "5110200", + "5110213", "5110670", "5110885", "5114198", @@ -37097,6 +36712,7 @@ "5118996", "5119245", "5124007", + "5124143", "5124233", "5125689", "5143129", @@ -37136,29 +36752,28 @@ "8421569", "9101339" ], - "class_count": 180, - "truth_images_in_retained_classes": 40455, - "accepted_predictions_in_retained_classes": 29417, + "class_count": 194, + "truth_images_in_retained_classes": 41945, + "accepted_predictions_in_retained_classes": 30249, "report_images": 52788, - "overall_coverage": 0.7045351216185497, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.9749535854270197, - "precision": 0.9683959794573341, - "recall": 0.7328357084727255, - "f1": 0.8202403740616804 + "accuracy": 0.9726536166037543, + "precision": 0.9673028973830727, + "recall": 0.7249718216154226, + "f1": 0.8139613934096733 } }, { - "model": "torch-tta", + "model": "torch", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1742142", "1743532", "1746832", "1759153", @@ -37171,13 +36786,11 @@ "1770880", "1771509", "1771698", - "1772169", "1772179", "1782763", "1782777", "1782927", "1785286", - "1785888", "1785895", "1789695", "1789745", @@ -37186,25 +36799,20 @@ "1792383", "1792418", "1794590", - "1795215", "1796145", "1797479", "1798807", "1800032", "1801896", "1802280", - "1803073", "1804071", "1804906", - "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", - "1821911", "1822346", - "1823726", "1825064", "1825077", "1825156", @@ -37216,7 +36824,6 @@ "1872368", "1875008", "1875327", - "1879252", "1879970", "1881151", "1882210", @@ -37245,15 +36852,12 @@ "1963306", "1963446", "1964653", - "1964657", "1965166", - "1965208", "1965763", "1966017", "1968678", "1968867", "1970213", - "1970284", "1972187", "1972250", "1973467", @@ -37265,24 +36869,18 @@ "1979308", "1979473", "1982500", - "1982525", "1982541", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986220", - "1986575", "1988593", "1988881", "1989428", "1990150", - "1991371", "1992066", - "4522322", "4523522", - "4523885", "4524054", "4524376", "4524421", @@ -37300,17 +36898,13 @@ "4533136", "4534540", "4534719", - "4534872", "4534909", - "5101678", "5102951", "5104442", "5105339", "5110200", - "5110213", "5110670", "5110885", - "5112283", "5114198", "5115771", "5115777", @@ -37319,10 +36913,8 @@ "5118996", "5119245", "5124007", - "5124143", "5124233", "5125689", - "5142870", "5143129", "5143147", "5143380", @@ -37352,7 +36944,6 @@ "5880559", "5884851", "6097214", - "7443518", "7681733", "8015895", "8262357", @@ -37361,28 +36952,29 @@ "8421569", "9101339" ], - "class_count": 205, - "truth_images_in_retained_classes": 42565, - "accepted_predictions_in_retained_classes": 33383, + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29545, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7081344244904145, "metrics": { - "accuracy": 0.9591300853526652, - "precision": 0.9604484571118049, - "recall": 0.7699762479855812, - "f1": 0.842013462392941 + "accuracy": 0.9744003816755382, + "precision": 0.968279947854615, + "recall": 0.7355230038915617, + "f1": 0.8220522350709067 } }, { - "model": "torch-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", + "1742142", "1743532", "1746832", "1759153", @@ -37395,6 +36987,7 @@ "1770880", "1771509", "1771698", + "1772169", "1772179", "1782763", "1782777", @@ -37408,6 +37001,7 @@ "1792383", "1792418", "1794590", + "1795215", "1796145", "1797479", "1798807", @@ -37416,11 +37010,13 @@ "1802280", "1804071", "1804906", + "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", + "1821911", "1822346", "1825064", "1825077", @@ -37433,6 +37029,7 @@ "1872368", "1875008", "1875327", + "1879252", "1879970", "1881151", "1882210", @@ -37462,6 +37059,7 @@ "1963446", "1964653", "1965166", + "1965208", "1965763", "1966017", "1968678", @@ -37481,15 +37079,19 @@ "1982541", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986220", + "1986575", "1988593", "1988881", "1989428", "1990150", "1992066", + "4522322", "4523522", + "4523885", "4524054", "4524376", "4524421", @@ -37512,6 +37114,7 @@ "5104442", "5105339", "5110200", + "5110213", "5110670", "5110885", "5114198", @@ -37522,6 +37125,7 @@ "5118996", "5119245", "5124007", + "5124143", "5124233", "5125689", "5143129", @@ -37561,29 +37165,28 @@ "8421569", "9101339" ], - "class_count": 180, - "truth_images_in_retained_classes": 40455, - "accepted_predictions_in_retained_classes": 32213, + "class_count": 193, + "truth_images_in_retained_classes": 41892, + "accepted_predictions_in_retained_classes": 30094, "report_images": 52788, - "overall_coverage": 0.7831893612184587, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9705268255352514, - "precision": 0.9657886526261308, - "recall": 0.7926309175203593, - "f1": 0.8597488311609114 + "accuracy": 0.9730113961424189, + "precision": 0.9672414097720876, + "recall": 0.7241073248627131, + "f1": 0.8134845543532353 } }, { - "model": "onnx-tta", + "model": "onnx", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "per_model", + "domain": "common", "classes": [ "1732063", "1732416", "1734453", - "1742142", "1743532", "1746832", "1759153", @@ -37596,7 +37199,6 @@ "1770880", "1771509", "1771698", - "1772169", "1772179", "1782763", "1782777", @@ -37610,7 +37212,6 @@ "1792383", "1792418", "1794590", - "1795215", "1796145", "1797479", "1798807", @@ -37619,15 +37220,12 @@ "1802280", "1804071", "1804906", - "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", - "1821911", "1822346", - "1823726", "1825064", "1825077", "1825156", @@ -37639,7 +37237,6 @@ "1872368", "1875008", "1875327", - "1879252", "1879970", "1881151", "1882210", @@ -37669,7 +37266,6 @@ "1963446", "1964653", "1965166", - "1965208", "1965763", "1966017", "1968678", @@ -37686,23 +37282,18 @@ "1979308", "1979473", "1982500", - "1982525", "1982541", "1983525", "1983648", - "1983755", "1983896", "1985522", "1986220", - "1986575", "1988593", "1988881", "1989428", "1990150", "1992066", - "4522322", "4523522", - "4523885", "4524054", "4524376", "4524421", @@ -37720,17 +37311,13 @@ "4533136", "4534540", "4534719", - "4534872", "4534909", - "5101678", "5102951", "5104442", "5105339", "5110200", - "5110213", "5110670", "5110885", - "5112283", "5114198", "5115771", "5115777", @@ -37739,7 +37326,6 @@ "5118996", "5119245", "5124007", - "5124143", "5124233", "5125689", "5143129", @@ -37779,28 +37365,29 @@ "8421569", "9101339" ], - "class_count": 198, - "truth_images_in_retained_classes": 42291, - "accepted_predictions_in_retained_classes": 31709, + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29417, "report_images": 52788, - "overall_coverage": 0.7404902629385466, + "overall_coverage": 0.7045351216185497, "metrics": { - "accuracy": 0.9719038952762132, - "precision": 0.9695617529783702, - "recall": 0.7466077391820205, - "f1": 0.8288133411410782 + "accuracy": 0.9749535854270197, + "precision": 0.9683959794573336, + "recall": 0.7328357084727255, + "f1": 0.82024037406168 } }, { - "model": "onnx-tta", + "model": "torch-tta", "scope": "optimized", "rank": "species", "cutoff": 20, - "domain": "common", + "domain": "per_model", "classes": [ "1732063", "1732416", "1734453", + "1742142", "1743532", "1746832", "1759153", @@ -37813,11 +37400,13 @@ "1770880", "1771509", "1771698", + "1772169", "1772179", "1782763", "1782777", "1782927", "1785286", + "1785888", "1785895", "1789695", "1789745", @@ -37826,20 +37415,25 @@ "1792383", "1792418", "1794590", + "1795215", "1796145", "1797479", "1798807", "1800032", "1801896", "1802280", + "1803073", "1804071", "1804906", + "1810099", "1812394", "1813114", "1819145", "1820039", "1820372", + "1821911", "1822346", + "1823726", "1825064", "1825077", "1825156", @@ -37851,6 +37445,7 @@ "1872368", "1875008", "1875327", + "1879252", "1879970", "1881151", "1882210", @@ -37879,12 +37474,15 @@ "1963306", "1963446", "1964653", + "1964657", "1965166", + "1965208", "1965763", "1966017", "1968678", "1968867", "1970213", + "1970284", "1972187", "1972250", "1973467", @@ -37896,18 +37494,24 @@ "1979308", "1979473", "1982500", + "1982525", "1982541", "1983525", "1983648", + "1983755", "1983896", "1985522", "1986220", + "1986575", "1988593", "1988881", "1989428", "1990150", + "1991371", "1992066", + "4522322", "4523522", + "4523885", "4524054", "4524376", "4524421", @@ -37925,13 +37529,17 @@ "4533136", "4534540", "4534719", + "4534872", "4534909", + "5101678", "5102951", "5104442", "5105339", "5110200", + "5110213", "5110670", "5110885", + "5112283", "5114198", "5115771", "5115777", @@ -37940,1346 +37548,713 @@ "5118996", "5119245", "5124007", + "5124143", "5124233", "5125689", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146559", - "5146961", - "5147208", - "5148424", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5769072", - "5771350", - "5772196", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "8015895", - "8262357", - "8361848", - "8397564", - "8421569", - "9101339" - ], - "class_count": 180, - "truth_images_in_retained_classes": 40455, - "accepted_predictions_in_retained_classes": 30826, - "report_images": 52788, - "overall_coverage": 0.7404902629385466, - "metrics": { - "accuracy": 0.976210705701146, - "precision": 0.9704033057734652, - "recall": 0.7637449348360044, - "f1": 0.8420413480097139 - } - }, - { - "model": "v2", - "scope": "optimized", - "rank": "genus", - "cutoff": 0, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768106", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1771501", - "1772155", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782524", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787107", - "1787522", - "1789246", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871206", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1876280", - "1876536", - "1878838", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966346", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5116471", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9095083", - "9146182", - "9181278", - "9210500" + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" ], - "class_count": 297, - "truth_images_in_retained_classes": 51713, - "accepted_predictions_in_retained_classes": 34407, + "class_count": 205, + "truth_images_in_retained_classes": 42565, + "accepted_predictions_in_retained_classes": 33383, "report_images": 52788, - "overall_coverage": 0.6981321512464954, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9730202662706766, - "precision": 0.9354090897454787, - "recall": 0.6696547903717441, - "f1": 0.7488929063874894 + "accuracy": 0.9591300853526652, + "precision": 0.9604484571118049, + "recall": 0.7699762479855812, + "f1": 0.8420134623929408 } }, { - "model": "v2", + "model": "torch-tta", "scope": "optimized", - "rank": "genus", - "cutoff": 0, + "rank": "species", + "cutoff": 20, "domain": "common", "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770274", - "1770396", - "1771501", - "1772155", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1876280", - "1876536", - "1878838", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966346", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9095083", - "9146182", - "9181278", - "9210500" + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" ], - "class_count": 290, - "truth_images_in_retained_classes": 47277, - "accepted_predictions_in_retained_classes": 34382, + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 32213, "report_images": 52788, - "overall_coverage": 0.6981321512464954, + "overall_coverage": 0.7831893612184587, "metrics": { - "accuracy": 0.9760968718601971, - "precision": 0.9441948263945075, - "recall": 0.6789075236695378, - "f1": 0.758894188886813 + "accuracy": 0.9705268255352514, + "precision": 0.9657886526261303, + "recall": 0.7926309175203593, + "f1": 0.8597488311609114 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "optimized", - "rank": "genus", - "cutoff": 0, + "rank": "species", + "cutoff": 20, "domain": "per_model", "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738049", - "1738583", - "1739724", - "1741338", - "1741717", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770274", - "1770396", - "1771501", - "1772155", - "1772926", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1846907", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1876536", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "2278098", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406360", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9078901", - "9095083", - "9146182", - "9181278", - "9210500" + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" ], - "class_count": 305, - "truth_images_in_retained_classes": 52764, - "accepted_predictions_in_retained_classes": 36639, + "class_count": 198, + "truth_images_in_retained_classes": 42291, + "accepted_predictions_in_retained_classes": 31709, "report_images": 52788, - "overall_coverage": 0.7575395923315905, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.9675728610989023, - "precision": 0.9311163097974926, - "recall": 0.7162235431527392, - "f1": 0.7854650195910905 + "accuracy": 0.9719038952762132, + "precision": 0.9695617529783704, + "recall": 0.7466077391820205, + "f1": 0.8288133411410775 } }, { - "model": "torch", + "model": "onnx-tta", "scope": "optimized", - "rank": "genus", - "cutoff": 0, + "rank": "species", + "cutoff": 20, "domain": "common", "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770274", - "1770396", - "1771501", - "1772155", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1876280", - "1876536", - "1878838", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966346", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9095083", - "9146182", - "9181278", - "9210500" + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" ], - "class_count": 290, - "truth_images_in_retained_classes": 47277, - "accepted_predictions_in_retained_classes": 36222, + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 30826, "report_images": 52788, - "overall_coverage": 0.7575395923315905, + "overall_coverage": 0.7404902629385466, "metrics": { - "accuracy": 0.9717947278556177, - "precision": 0.9457657053357997, - "recall": 0.7357875537389513, - "f1": 0.8055286746347516 + "accuracy": 0.976210705701146, + "precision": 0.9704033057734655, + "recall": 0.7637449348360044, + "f1": 0.8420413480097133 } }, { - "model": "onnx", + "model": "v2", "scope": "optimized", "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11495707", "12105049", + "1731584", "1732062", "1732397", "1733840", "1734388", "1734683", + "1735487", "1737335", "1737519", + "1737647", "1737701", "1738049", "1738583", "1739724", "1741338", + "1741585", "1741717", "1742061", "1742419", "1743516", "1743762", + "1744049", + "1744691", "1744761", "1745076", + "1746012", "1746437", "1746749", "1747242", @@ -39287,8 +38262,11 @@ "1758873", "1759029", "1759152", + "1759405", "1760088", + "1760588", "1761017", + "1761857", "1762232", "1763597", "1764920", @@ -39297,6 +38275,8 @@ "1766366", "1767590", "1767644", + "1768106", + "1768136", "1768222", "1768302", "1768411", @@ -39304,12 +38284,16 @@ "1769504", "1769819", "1769945", + "1770123", "1770274", "1770396", + "1770592", "1771501", "1772155", + "1772783", "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", @@ -39323,17 +38307,22 @@ "1779682", "1780139", "1781683", + "1782524", + "1782607", "1782659", "1783394", "1784809", + "1785140", "1785281", "1785873", "1786886", + "1787107", "1787522", "1789246", "1789545", "1789671", "1789978", + "1790683", "1791382", "1791874", "1792324", @@ -39343,6 +38332,7 @@ "1795126", "1795782", "1796225", + "1796408", "1796469", "1796639", "1797073", @@ -39355,18 +38345,21 @@ "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1807965", "1808961", "1809069", "1810097", "1812976", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -39374,6 +38367,7 @@ "1822545", "1822778", "1823714", + "1824246", "1825057", "1825076", "1825121", @@ -39382,6 +38376,7 @@ "1826021", "1826192", "1827111", + "1827279", "1827547", "1828161", "1828636", @@ -39392,32 +38387,47 @@ "1835151", "1836898", "1839730", + "1840273", "1841259", "1845266", "1846907", + "1850525", + "1850777", "1856631", + "1857624", + "1857825", + "1861607", "1862568", "1862681", + "1863292", "1863647", "1864355", "1864404", + "1869760", + "1870168", "1870242", + "1871206", "1871384", "1872346", "1872845", + "1873408", "1873980", + "1874374", "1874958", "1875317", "1875650", "1875849", "1876280", "1876536", + "1877937", "1878838", "1879226", + "1879451", "1879494", "1879915", "1881145", "1881186", + "1881825", "1882028", "1883132", "1884090", @@ -39434,24 +38444,30 @@ "1891054", "1891305", "1891353", + "1920704", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", + "1952222", "1952300", + "1952446", "1952526", "1952736", "1952801", "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", "1957545", "1957620", "1957829", "1958023", + "1958238", "1959381", "1959888", "1960592", @@ -39463,6 +38479,8 @@ "1962995", "1963299", "1963445", + "1964175", + "1964392", "1964577", "1964936", "1965123", @@ -39478,6 +38496,7 @@ "1968665", "1968854", "1970179", + "1970226", "1970279", "1970574", "1972114", @@ -39487,9 +38506,12 @@ "1975292", "1975542", "1975570", + "1975783", "1975885", "1976155", "1976949", + "1977104", + "1977419", "1978112", "1978364", "1978506", @@ -39517,9 +38539,12 @@ "1990531", "1991357", "1991946", + "1993403", "2278098", + "3255940", "3256294", "3256322", + "3256950", "3257220", "3257225", "3257328", @@ -39527,7 +38552,9 @@ "3257798", "3261008", "4301098", + "4301121", "4301340", + "4302289", "4404424", "4405245", "4405430", @@ -39540,11 +38567,17 @@ "4524069", "4525072", "4533124", + "4533660", + "4534405", "4534532", + "4687068", "4689528", + "4706723", + "4709385", "5105328", "5114254", "5115807", + "5116471", "5144176", "5146397", "7236046", @@ -39559,379 +38592,94 @@ "8379138", "8407958", "8494978", + "8782295", + "8875114", + "8875890", + "8921795", + "9021546", "9065472", "9078901", "9095083", + "9108102", + "9118632", "9146182", "9181278", + "9183600", "9210500" ], - "class_count": 305, - "truth_images_in_retained_classes": 52764, - "accepted_predictions_in_retained_classes": 36471, - "report_images": 52788, - "overall_coverage": 0.7536561339698417, - "metrics": { - "accuracy": 0.9679659039694104, - "precision": 0.9324066587585462, - "recall": 0.7121688160928734, - "f1": 0.7826452771316182 - } - }, - { - "model": "onnx", - "scope": "optimized", - "rank": "genus", - "cutoff": 0, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1745076", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1766366", - "1767590", - "1767644", - "1768222", - "1768302", - "1768411", - "1769098", - "1769504", - "1769819", - "1769945", - "1770274", - "1770396", - "1771501", - "1772155", - "1775081", - "1775887", - "1775910", - "1776168", - "1776299", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778695", - "1779682", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1793856", - "1794570", - "1795126", - "1795782", - "1796225", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798440", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1831127", - "1831446", - "1835151", - "1836898", - "1839730", - "1841259", - "1845266", - "1856631", - "1862568", - "1862681", - "1863647", - "1864355", - "1864404", - "1870242", - "1871384", - "1872346", - "1872845", - "1873980", - "1874958", - "1875317", - "1875650", - "1876280", - "1876536", - "1878838", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1886576", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956522", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966346", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1979727", - "1980342", - "1980718", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4524069", - "4525072", - "4533124", - "4534532", - "4689528", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7236046", - "7384515", - "7396883", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9065472", - "9095083", - "9146182", - "9181278", - "9210500" - ], - "class_count": 290, - "truth_images_in_retained_classes": 47277, - "accepted_predictions_in_retained_classes": 36061, + "class_count": 379, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36853, "report_images": 52788, - "overall_coverage": 0.7536561339698417, + "overall_coverage": 0.6981321512464954, "metrics": { - "accuracy": 0.9724093229520842, - "precision": 0.9471708404892052, - "recall": 0.7319329372281088, - "f1": 0.8029757834023304 + "accuracy": 0.9533632911945014, + "precision": 0.7847923719051053, + "recall": 0.6176629588211429, + "f1": 0.5868633065886133 } }, { - "model": "torch-tta", + "model": "torch", "scope": "optimized", "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11495707", "12105049", + "1731584", "1732062", "1732397", + "1732442", "1733840", "1734388", "1734683", "1737335", "1737519", + "1737647", "1737701", "1738049", "1738583", + "1739060", "1739724", "1741338", + "1741585", "1741717", "1742061", "1742419", + "1743188", "1743516", "1743762", + "1744049", + "1744691", "1744761", "1745076", + "1746012", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748889", "1758873", "1759029", "1759152", + "1759552", "1760088", + "1760588", "1761017", "1762232", "1763597", "1764920", + "1765763", "1766123", "1766265", "1766366", "1767590", "1767644", + "1768106", + "1768136", "1768222", "1768302", "1768411", @@ -39946,31 +38694,40 @@ "1772155", "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", "1778695", + "1779429", "1779682", "1780139", "1781683", "1782524", + "1782607", "1782659", "1783394", + "1784356", "1784809", "1785281", "1785873", "1786886", + "1787061", + "1787107", "1787522", + "1788411", "1789246", "1789545", "1789671", "1789978", + "1790794", "1791382", "1791874", "1792324", @@ -39985,6 +38742,7 @@ "1797073", "1798083", "1798340", + "1798362", "1798440", "1798514", "1798902", @@ -39992,18 +38750,21 @@ "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", "1803951", "1804905", "1807195", + "1808720", "1808961", "1809069", "1810097", "1812976", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -40023,39 +38784,64 @@ "1828161", "1828636", "1830379", + "1830581", + "1830873", "1830909", "1831127", "1831446", + "1831747", + "1832810", "1835151", "1836898", + "1837338", "1839730", + "1840273", "1841259", + "1843897", "1845266", "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", "1856631", + "1857825", + "1858055", + "1861151", "1862568", "1862681", "1863647", "1864355", "1864404", "1870242", + "1870982", "1871206", "1871384", "1872346", "1872845", + "1873074", "1873980", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", "1875849", "1876280", "1876536", "1878838", "1879226", + "1879451", "1879494", "1879915", "1881145", "1881186", + "1881825", "1882028", "1883132", "1884090", @@ -40065,6 +38851,7 @@ "1886289", "1886576", "1887269", + "1888256", "1888698", "1889936", "1890111", @@ -40072,11 +38859,14 @@ "1891054", "1891305", "1891353", + "1894469", + "1939401", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", "1952300", "1952526", "1952736", @@ -40084,8 +38874,10 @@ "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", + "1957281", "1957545", "1957620", "1957829", @@ -40101,6 +38893,7 @@ "1962995", "1963299", "1963445", + "1964175", "1964577", "1964936", "1965123", @@ -40111,11 +38904,13 @@ "1966929", "1967196", "1967242", + "1967263", "1967722", "1968199", "1968665", "1968854", "1970179", + "1970226", "1970279", "1970574", "1972114", @@ -40128,15 +38923,18 @@ "1975885", "1976155", "1976949", + "1978019", "1978112", "1978364", "1978506", "1978749", "1978974", + "1979106", "1979243", "1979727", "1980342", "1980718", + "1981690", "1982367", "1984922", "1985507", @@ -40154,13 +38952,19 @@ "1990531", "1991357", "1991946", + "2278098", + "3255940", + "3256169", "3256294", "3256322", + "3256934", + "3256950", "3257220", "3257225", "3257328", "3257694", "3257798", + "3257894", "3261008", "4301098", "4301340", @@ -40168,93 +38972,132 @@ "4405245", "4405430", "4406069", + "4406291", + "4406298", "4406360", "4406622", + "4406931", "4407165", "4407354", "4408190", "4524069", "4525072", "4533124", + "4533660", + "4534405", + "4534456", "4534532", + "4687068", "4689528", + "4706723", + "4709385", "5105328", "5114254", "5115807", + "5116471", + "5123443", "5144176", "5146397", "7236046", "7384515", "7396883", + "7494486", + "7721234", "7739898", "7852351", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8875890", + "8921795", + "8936210", "9065472", "9078901", "9095083", + "9118632", "9146182", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 305, - "truth_images_in_retained_classes": 48338, - "accepted_predictions_in_retained_classes": 37668, + "class_count": 398, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39989, "report_images": 52788, - "overall_coverage": 0.7772978707281958, + "overall_coverage": 0.7575395923315905, "metrics": { - "accuracy": 0.9755532044276723, - "precision": 0.9505668112244134, - "recall": 0.7423366594133708, - "f1": 0.8117050275966146 + "accuracy": 0.9547996220084877, + "precision": 0.745381822803767, + "recall": 0.678410498949023, + "f1": 0.6019267109931725 } }, { - "model": "torch-tta", + "model": "onnx", "scope": "optimized", "rank": "genus", - "cutoff": 0, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "11495707", "12105049", + "1731584", "1732062", "1732397", + "1732442", "1733840", "1734388", "1734683", "1737335", "1737519", + "1737647", "1737701", + "1738049", "1738583", + "1739060", "1739724", "1741338", + "1741585", + "1741717", "1742061", "1742419", + "1743188", "1743516", "1743762", + "1744049", + "1744691", "1744761", "1745076", + "1746012", "1746437", + "1746600", "1746749", "1747242", "1747949", + "1748889", "1758873", "1759029", "1759152", + "1759552", "1760088", + "1760588", "1761017", "1762232", "1763597", "1764920", + "1765763", "1766123", "1766265", "1766366", "1767590", "1767644", + "1768106", + "1768136", "1768222", "1768302", "1768411", @@ -40262,33 +39105,46 @@ "1769504", "1769819", "1769945", + "1770123", "1770274", "1770396", "1771501", "1772155", + "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", "1777868", "1778073", "1778695", + "1779429", "1779682", "1780139", "1781683", + "1782524", + "1782607", "1782659", "1783394", + "1784356", "1784809", "1785281", "1785873", + "1786886", + "1787061", + "1787107", "1787522", + "1788411", "1789246", "1789545", "1789671", + "1789978", "1791382", "1791874", "1792324", @@ -40303,6 +39159,7 @@ "1797073", "1798083", "1798340", + "1798362", "1798440", "1798514", "1798902", @@ -40310,6 +39167,7 @@ "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", @@ -40322,6 +39180,7 @@ "1812976", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -40341,35 +39200,64 @@ "1828161", "1828636", "1830379", + "1830581", + "1830873", "1830909", "1831127", "1831446", + "1831747", + "1832810", "1835151", "1836898", + "1837338", "1839730", + "1840273", "1841259", + "1843897", "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", "1856631", + "1857825", + "1858055", + "1861151", "1862568", "1862681", "1863647", "1864355", "1864404", "1870242", + "1870982", + "1871206", "1871384", "1872346", "1872845", + "1873074", "1873980", + "1874374", "1874958", + "1875103", "1875317", + "1875600", "1875650", + "1875849", "1876280", "1876536", "1878838", + "1879226", + "1879451", "1879494", "1879915", "1881145", "1881186", + "1881825", "1882028", "1883132", "1884090", @@ -40386,11 +39274,14 @@ "1891054", "1891305", "1891353", + "1894469", + "1939401", "1951549", "1951569", "1951645", "1952001", "1952029", + "1952118", "1952300", "1952526", "1952736", @@ -40398,8 +39289,10 @@ "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", + "1957281", "1957545", "1957620", "1957829", @@ -40415,19 +39308,24 @@ "1962995", "1963299", "1963445", + "1964175", "1964577", "1964936", "1965123", "1965758", + "1965888", "1965967", "1966346", "1966929", "1967196", + "1967242", + "1967263", "1967722", "1968199", "1968665", "1968854", "1970179", + "1970226", "1970279", "1970574", "1972114", @@ -40440,15 +39338,18 @@ "1975885", "1976155", "1976949", + "1978019", "1978112", "1978364", "1978506", "1978749", "1978974", + "1979106", "1979243", "1979727", "1980342", "1980718", + "1981690", "1982367", "1984922", "1985507", @@ -40466,13 +39367,19 @@ "1990531", "1991357", "1991946", + "2278098", + "3255940", + "3256169", "3256294", "3256322", + "3256934", + "3256950", "3257220", "3257225", "3257328", "3257694", "3257798", + "3257894", "3261008", "4301098", "4301340", @@ -40480,93 +39387,132 @@ "4405245", "4405430", "4406069", + "4406291", + "4406298", + "4406360", "4406622", + "4406931", "4407165", "4407354", "4408190", "4524069", "4525072", "4533124", + "4533660", + "4534405", + "4534456", "4534532", + "4687068", "4689528", + "4706723", + "4709385", "5105328", "5114254", "5115807", + "5116471", + "5123443", "5144176", "5146397", "7236046", "7384515", "7396883", + "7494486", + "7721234", "7739898", "7852351", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8875890", + "8921795", + "8936210", "9065472", + "9078901", "9095083", + "9118632", "9146182", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 290, - "truth_images_in_retained_classes": 47277, - "accepted_predictions_in_retained_classes": 37209, + "class_count": 395, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39784, "report_images": 52788, - "overall_coverage": 0.7772978707281958, + "overall_coverage": 0.7536561339698417, "metrics": { - "accuracy": 0.9767057765407489, - "precision": 0.9614821443720363, - "recall": 0.7575794509648353, - "f1": 0.8276206040656773 + "accuracy": 0.9551874761942367, + "precision": 0.7523387061411552, + "recall": 0.6745698413302063, + "f1": 0.6043210367725153 } }, { - "model": "onnx-tta", + "model": "torch-tta", "scope": "optimized", "rank": "genus", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ + "11495707", "12105049", + "1731584", "1732062", "1732397", + "1733338", "1733840", "1734388", "1734683", + "1735487", "1737335", "1737519", + "1737647", "1737701", "1738049", "1738583", + "1739060", "1739724", "1741338", + "1741585", "1741717", "1742061", "1742419", + "1743188", "1743516", "1743762", + "1744049", + "1744691", "1744761", "1745076", + "1746012", "1746437", + "1746600", "1746749", "1747242", "1747949", "1758873", "1759029", "1759152", + "1759552", "1760088", + "1760588", "1761017", + "1761857", "1762232", "1763597", "1764920", + "1765763", "1766123", "1766265", "1766366", "1767590", "1767644", + "1768106", "1768222", "1768302", "1768411", @@ -40581,10 +39527,12 @@ "1772155", "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", @@ -40595,13 +39543,18 @@ "1780139", "1781683", "1782524", + "1782607", "1782659", "1783394", + "1784356", "1784809", "1785281", "1785873", "1786886", + "1787061", + "1787107", "1787522", + "1788411", "1789246", "1789545", "1789671", @@ -40627,6 +39580,7 @@ "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", @@ -40639,6 +39593,7 @@ "1812976", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -40661,25 +39616,36 @@ "1830909", "1831127", "1831446", + "1831747", + "1832810", "1835151", "1836898", "1839730", "1841259", + "1843897", "1845266", "1846907", + "1852064", + "1854160", "1856631", + "1857825", + "1858055", "1862568", "1862681", "1863647", "1864355", "1864404", "1870242", + "1870982", "1871206", "1871384", "1872346", "1872845", + "1873074", "1873980", + "1874374", "1874958", + "1875103", "1875317", "1875650", "1875849", @@ -40687,19 +39653,23 @@ "1876536", "1878838", "1879226", + "1879451", "1879494", "1879915", "1881145", "1881186", + "1881825", "1882028", "1883132", "1884090", "1884194", "1884425", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1888578", "1888698", "1889936", "1890111", @@ -40712,6 +39682,7 @@ "1951645", "1952001", "1952029", + "1952118", "1952300", "1952526", "1952736", @@ -40719,6 +39690,7 @@ "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", "1957545", @@ -40751,6 +39723,7 @@ "1968665", "1968854", "1970179", + "1970226", "1970279", "1970574", "1972114", @@ -40763,11 +39736,13 @@ "1975885", "1976155", "1976949", + "1978019", "1978112", "1978364", "1978506", "1978749", "1978974", + "1979106", "1979243", "1979727", "1980342", @@ -40789,8 +39764,13 @@ "1990531", "1991357", "1991946", + "2278098", + "3255940", + "3256169", "3256294", "3256322", + "3256934", + "3256950", "3257220", "3257225", "3257328", @@ -40803,6 +39783,7 @@ "4405245", "4405430", "4406069", + "4406291", "4406360", "4406622", "4407165", @@ -40811,85 +39792,119 @@ "4524069", "4525072", "4533124", + "4533660", + "4534405", "4534532", + "4687068", "4689528", + "4706723", + "4709385", "5105328", "5114254", "5115807", + "5116471", + "5123443", "5144176", "5146397", "7236046", "7384515", "7396883", + "7721234", "7739898", "7852351", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8875890", + "8921795", + "8936210", "9065472", "9078901", "9095083", + "9118632", "9146182", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 305, - "truth_images_in_retained_classes": 48338, - "accepted_predictions_in_retained_classes": 37653, + "class_count": 372, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41032, "report_images": 52788, - "overall_coverage": 0.7768621656437069, + "overall_coverage": 0.7772978707281958, "metrics": { - "accuracy": 0.9757794309698761, - "precision": 0.950805459732764, - "recall": 0.7423421426731508, - "f1": 0.8117369598871598 + "accuracy": 0.9627590640417357, + "precision": 0.8166841617561863, + "recall": 0.7031449724257084, + "f1": 0.6655108425187298 } }, { "model": "onnx-tta", "scope": "optimized", "rank": "genus", - "cutoff": 0, - "domain": "common", + "cutoff": -1, + "domain": "per_model", "classes": [ + "11495707", "12105049", + "1731584", "1732062", "1732397", + "1733338", "1733840", "1734388", "1734683", + "1735487", "1737335", "1737519", + "1737647", "1737701", + "1738049", "1738583", + "1739060", "1739724", "1741338", + "1741585", + "1741717", "1742061", "1742419", + "1743188", "1743516", "1743762", + "1744049", + "1744691", "1744761", "1745076", + "1746012", "1746437", + "1746600", "1746749", "1747242", "1747949", "1758873", "1759029", "1759152", + "1759552", "1760088", + "1760588", "1761017", + "1761857", "1762232", "1763597", "1764920", + "1765763", "1766123", "1766265", "1766366", "1767590", "1767644", + "1768106", "1768222", "1768302", "1768411", @@ -40897,15 +39912,19 @@ "1769504", "1769819", "1769945", + "1770123", "1770274", "1770396", "1771501", "1772155", + "1772926", "1775081", + "1775149", "1775887", "1775910", "1776168", "1776299", + "1776576", "1776846", "1776978", "1777243", @@ -40915,15 +39934,23 @@ "1779682", "1780139", "1781683", + "1782524", + "1782607", "1782659", "1783394", + "1784356", "1784809", "1785281", "1785873", + "1786886", + "1787061", + "1787107", "1787522", + "1788411", "1789246", "1789545", "1789671", + "1789978", "1791382", "1791874", "1792324", @@ -40945,6 +39972,7 @@ "1799702", "1799993", "1800016", + "1801046", "1801758", "1802269", "1802997", @@ -40957,6 +39985,7 @@ "1812976", "1815226", "1819125", + "1819252", "1819372", "1819865", "1820270", @@ -40979,41 +40008,60 @@ "1830909", "1831127", "1831446", + "1831747", + "1832810", "1835151", "1836898", "1839730", "1841259", + "1843897", "1845266", + "1846907", + "1852064", + "1854160", "1856631", + "1857825", + "1858055", "1862568", "1862681", "1863647", "1864355", "1864404", "1870242", + "1870982", + "1871206", "1871384", "1872346", "1872845", + "1873074", "1873980", + "1874374", "1874958", + "1875103", "1875317", "1875650", + "1875849", "1876280", "1876536", "1878838", + "1879226", + "1879451", "1879494", "1879915", "1881145", "1881186", + "1881825", "1882028", "1883132", "1884090", "1884194", "1884425", "1884939", + "1886069", "1886289", "1886576", "1887269", + "1888578", "1888698", "1889936", "1890111", @@ -41026,6 +40074,7 @@ "1951645", "1952001", "1952029", + "1952118", "1952300", "1952526", "1952736", @@ -41033,6 +40082,7 @@ "1954587", "1955508", "1955900", + "1956434", "1956522", "1956545", "1957545", @@ -41054,15 +40104,18 @@ "1964936", "1965123", "1965758", + "1965888", "1965967", "1966346", "1966929", "1967196", + "1967242", "1967722", "1968199", "1968665", "1968854", "1970179", + "1970226", "1970279", "1970574", "1972114", @@ -41075,11 +40128,13 @@ "1975885", "1976155", "1976949", + "1978019", "1978112", "1978364", "1978506", "1978749", "1978974", + "1979106", "1979243", "1979727", "1980342", @@ -41101,8 +40156,13 @@ "1990531", "1991357", "1991946", + "2278098", + "3255940", + "3256169", "3256294", "3256322", + "3256934", + "3256950", "3257220", "3257225", "3257328", @@ -41115,6 +40175,8 @@ "4405245", "4405430", "4406069", + "4406291", + "4406360", "4406622", "4407165", "4407354", @@ -41122,40 +40184,56 @@ "4524069", "4525072", "4533124", + "4533660", + "4534405", "4534532", + "4687068", "4689528", + "4706723", + "4709385", "5105328", "5114254", "5115807", + "5116471", + "5123443", "5144176", "5146397", "7236046", "7384515", "7396883", + "7721234", "7739898", "7852351", "8107362", "8249110", + "8317469", "8331787", "8379138", "8407958", "8494978", + "8875890", + "8921795", + "8936210", "9065472", + "9078901", "9095083", + "9118632", "9146182", "9181278", - "9210500" + "9183600", + "9210500", + "9220793" ], - "class_count": 290, - "truth_images_in_retained_classes": 47277, - "accepted_predictions_in_retained_classes": 37196, + "class_count": 372, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41009, "report_images": 52788, "overall_coverage": 0.7768621656437069, "metrics": { - "accuracy": 0.9769436862054228, - "precision": 0.9615032517112784, - "recall": 0.7575932745608045, - "f1": 0.8276086187401221 + "accuracy": 0.9629823236784678, + "precision": 0.8168891977985718, + "recall": 0.703150166196618, + "f1": 0.6655370235633971 } }, { @@ -41396,7 +40474,7 @@ "accuracy": 0.9716616552337888, "precision": 0.9644034675161717, "recall": 0.6868834008659555, - "f1": 0.7807696866753265 + "f1": 0.7807696866753269 } }, { @@ -41629,7 +40707,7 @@ "overall_coverage": 0.6981321512464954, "metrics": { "accuracy": 0.9754975181801082, - "precision": 0.96822735165948, + "precision": 0.9682273516594799, "recall": 0.6927141276824689, "f1": 0.787485243584438 } @@ -41875,9 +40953,9 @@ "overall_coverage": 0.7575395923315905, "metrics": { "accuracy": 0.970284104556389, - "precision": 0.9654305304648698, + "precision": 0.9654305304648699, "recall": 0.7349949980804276, - "f1": 0.8198300630906831 + "f1": 0.8198300630906835 } }, { @@ -42110,9 +41188,9 @@ "overall_coverage": 0.7575395923315905, "metrics": { "accuracy": 0.9730526458225819, - "precision": 0.9696226974149172, + "precision": 0.9696226974149174, "recall": 0.7475533077376153, - "f1": 0.8310650157210921 + "f1": 0.8310650157210918 } }, { @@ -42356,9 +41434,9 @@ "overall_coverage": 0.7536561339698417, "metrics": { "accuracy": 0.9708040563009604, - "precision": 0.9665082137972658, + "precision": 0.9665082137972659, "recall": 0.7310313579815346, - "f1": 0.8173152189160264 + "f1": 0.8173152189160263 } }, { @@ -42593,7 +41671,7 @@ "accuracy": 0.9738759173936625, "precision": 0.9708203215753252, "recall": 0.7439396812388471, - "f1": 0.8289781701827876 + "f1": 0.8289781701827873 } }, { @@ -42839,9 +41917,9 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9739289484518205, - "precision": 0.9704707099468884, + "precision": 0.9704707099468883, "recall": 0.7536090100054875, - "f1": 0.8347586230965691 + "f1": 0.8347586230965688 } }, { @@ -43074,9 +42152,9 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9771086466542604, - "precision": 0.9775547270341164, + "precision": 0.9775547270341163, "recall": 0.767268013502815, - "f1": 0.8477428518527237 + "f1": 0.8477428518527229 } }, { @@ -43324,7 +42402,7 @@ "accuracy": 0.9742276071763961, "precision": 0.970789954662006, "recall": 0.7536163450679126, - "f1": 0.8348013395378685 + "f1": 0.8348013395378682 } }, { @@ -43559,7 +42637,7 @@ "accuracy": 0.9774284415058453, "precision": 0.9775831973986752, "recall": 0.7672866592834245, - "f1": 0.8477266855996489 + "f1": 0.8477266855996483 } }, { @@ -43774,7 +42852,7 @@ "overall_coverage": 0.6981321512464954, "metrics": { "accuracy": 0.9707426742420079, - "precision": 0.9676850759993277, + "precision": 0.9676850759993276, "recall": 0.7030299586868274, "f1": 0.7949775034079529 } @@ -43986,7 +43064,7 @@ "overall_coverage": 0.6981321512464954, "metrics": { "accuracy": 0.9752941088049124, - "precision": 0.9772224666409167, + "precision": 0.9772224666409165, "recall": 0.7109088798148795, "f1": 0.8054635075619047 } @@ -44211,7 +43289,7 @@ "accuracy": 0.9725044668174535, "precision": 0.973428506176096, "recall": 0.7475181869995279, - "f1": 0.8320199105759429 + "f1": 0.8320199105759426 } }, { @@ -44423,7 +43501,7 @@ "accuracy": 0.9735479156470631, "precision": 0.9733069820326449, "recall": 0.7535836525103417, - "f1": 0.83644361028291 + "f1": 0.8364436102829099 } }, { @@ -44645,7 +43723,7 @@ "accuracy": 0.973280111509321, "precision": 0.9750664954245438, "recall": 0.7440944617898129, - "f1": 0.8301947627142044 + "f1": 0.8301947627142042 } }, { @@ -44855,9 +43933,9 @@ "overall_coverage": 0.7536561339698417, "metrics": { "accuracy": 0.9741721892441434, - "precision": 0.9742219352236319, + "precision": 0.974221935223632, "recall": 0.7503899701812965, - "f1": 0.8344922648164951 + "f1": 0.834492264816495 } }, { @@ -45080,9 +44158,9 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9770381133367219, - "precision": 0.9784954355713805, + "precision": 0.9784954355713802, "recall": 0.7643769766620188, - "f1": 0.8460362463804566 + "f1": 0.8460362463804563 } }, { @@ -45292,9 +44370,9 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9775836137284416, - "precision": 0.9789300486595732, + "precision": 0.9789300486595729, "recall": 0.7732961033321674, - "f1": 0.8523256131620105 + "f1": 0.85232561316201 } }, { @@ -45519,7 +44597,7 @@ "accuracy": 0.9773702801133233, "precision": 0.9785252947342102, "recall": 0.7646418740921664, - "f1": 0.8462515189804946 + "f1": 0.8462515189804942 } }, { @@ -45729,9 +44807,9 @@ "overall_coverage": 0.7768621656437069, "metrics": { "accuracy": 0.9776077796766862, - "precision": 0.978961929536553, + "precision": 0.9789619295365529, "recall": 0.7735522735935464, - "f1": 0.8525123269701549 + "f1": 0.8525123269701546 } }, { @@ -45905,9 +44983,9 @@ "overall_coverage": 0.6981321512464954, "metrics": { "accuracy": 0.9843358498587619, - "precision": 0.9748388332981802, + "precision": 0.9748388332981804, "recall": 0.7242019498914946, - "f1": 0.8169005762983503 + "f1": 0.8169005762983504 } }, { @@ -46076,7 +45154,7 @@ "overall_coverage": 0.6981321512464954, "metrics": { "accuracy": 0.9840178517103966, - "precision": 0.9779005369081346, + "precision": 0.9779005369081352, "recall": 0.7276296542386876, "f1": 0.8215085827272921 } @@ -46261,9 +45339,9 @@ "overall_coverage": 0.7575395923315905, "metrics": { "accuracy": 0.9810178296102066, - "precision": 0.9757921370967002, + "precision": 0.9757921370967003, "recall": 0.7571265698443955, - "f1": 0.841932335046979 + "f1": 0.8419323350469788 } }, { @@ -46432,9 +45510,9 @@ "overall_coverage": 0.7575395923315905, "metrics": { "accuracy": 0.9859159179291114, - "precision": 0.9756538685518954, + "precision": 0.9756538685518957, "recall": 0.7718614744316848, - "f1": 0.8533020792538338 + "f1": 0.8533020792538334 } }, { @@ -46788,9 +45866,9 @@ "overall_coverage": 0.7536561339698417, "metrics": { "accuracy": 0.9866161345901774, - "precision": 0.9761653514032596, + "precision": 0.9761653514032598, "recall": 0.768748272502419, - "f1": 0.8513772766242688 + "f1": 0.8513772766242683 } }, { @@ -46975,7 +46053,7 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9857897321742519, - "precision": 0.9793244688724696, + "precision": 0.9793244688724693, "recall": 0.7752481222536762, "f1": 0.8561620153740219 } @@ -47146,9 +46224,9 @@ "overall_coverage": 0.7772978707281958, "metrics": { "accuracy": 0.9886115750548432, - "precision": 0.9809062330056775, + "precision": 0.9809062330056771, "recall": 0.7925083520312406, - "f1": 0.8691592136815403 + "f1": 0.8691592136815407 } }, { @@ -47333,9 +46411,9 @@ "overall_coverage": 0.7768621656437069, "metrics": { "accuracy": 0.9858135534806919, - "precision": 0.9793611223358237, + "precision": 0.9793611223358233, "recall": 0.7753668121612188, - "f1": 0.8562508653962664 + "f1": 0.8562508653962666 } }, { @@ -47506,18 +46584,19 @@ "accuracy": 0.9886423026181744, "precision": 0.9809467702797179, "recall": 0.792676399490679, - "f1": 0.8692708237591562 + "f1": 0.8692708237591565 } }, { "model": "v2", "scope": "optimized", "rank": "family", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ "3530", "3552", + "3553", "3556", "4300668", "4527533", @@ -47527,6 +46606,7 @@ "5343", "5345", "5474", + "5481", "6950", "7015", "7016", @@ -47535,398 +46615,222 @@ "8860", "8863", "8868", + "8870", "8874", + "9412", "9689", "9717" ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 40877, - "report_images": 52788, - "overall_coverage": 0.7744373721300295, - "metrics": { - "accuracy": 0.9963653352691595, - "precision": 0.9560780057797795, - "recall": 0.6760540010869929, - "f1": 0.7735267153680251 - } - }, - { - "model": "v2", - "scope": "optimized", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 40877, + "class_count": 26, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 40881, "report_images": 52788, "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9963653352691595, - "precision": 0.9560780057797795, - "recall": 0.6760540010869929, - "f1": 0.7735267153680251 + "precision": 0.841348645086206, + "recall": 0.6466603488658192, + "f1": 0.6545226053114057 } }, { "model": "torch", "scope": "optimized", "rank": "family", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ "3530", "3552", + "3553", "3556", "4300668", "4527533", "4532185", "4542", + "4864", + "4870", "5336", "5343", "5345", "5474", + "6166", "6950", "7015", "7016", "7294", + "8838", + "8840", "8841", "8860", + "8861", "8863", "8868", "8874", + "9412", "9689", "9717" ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 38535, - "report_images": 52788, - "overall_coverage": 0.7305827081912556, - "metrics": { - "accuracy": 0.9932547854813464, - "precision": 0.9762352614742195, - "recall": 0.6832121844236498, - "f1": 0.7919257036079034 - } - }, - { - "model": "torch", - "scope": "optimized", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 38535, + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38566, "report_images": 52788, "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.9932547854813464, - "precision": 0.9762352614742195, - "recall": 0.6832121844236498, - "f1": 0.7919257036079034 + "precision": 0.7405922673252698, + "recall": 0.6535073068400129, + "f1": 0.5807455159791289 } }, { "model": "onnx", "scope": "optimized", "rank": "family", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ "3530", "3552", + "3553", "3556", "4300668", "4527533", "4532185", "4542", + "4864", + "4870", "5336", "5343", "5345", "5474", + "6166", "6950", "7015", "7016", "7294", + "8838", + "8840", "8841", "8860", + "8861", "8863", "8868", "8874", + "9412", "9689", "9717" ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 38641, - "report_images": 52788, - "overall_coverage": 0.7325907403197697, - "metrics": { - "accuracy": 0.9932599551447033, - "precision": 0.9762464326229743, - "recall": 0.6846193516228278, - "f1": 0.793047168620814 - } - }, - { - "model": "onnx", - "scope": "optimized", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 38641, + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38672, "report_images": 52788, "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9932599551447033, - "precision": 0.9762464326229743, - "recall": 0.6846193516228278, - "f1": 0.793047168620814 + "precision": 0.7406007419898424, + "recall": 0.6548532928566179, + "f1": 0.5815679236552638 } }, { "model": "torch-tta", "scope": "optimized", "rank": "family", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ "3530", "3552", + "3553", "3556", "4300668", "4527533", "4532185", "4542", + "4864", + "4870", "5336", "5343", "5345", "5474", + "6166", "6950", "7015", "7016", "7294", + "8838", + "8840", "8841", "8860", + "8861", "8863", "8868", "8874", + "9412", "9689", "9717" ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 41543, - "report_images": 52788, - "overall_coverage": 0.7874327498673941, - "metrics": { - "accuracy": 0.9955823574240963, - "precision": 0.9746511312798972, - "recall": 0.7319846152154214, - "f1": 0.8280771248604737 - } - }, - { - "model": "torch-tta", - "scope": "optimized", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 41543, + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41567, "report_images": 52788, "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9955823574240963, - "precision": 0.9746511312798972, - "recall": 0.7319846152154214, - "f1": 0.8280771248604737 + "precision": 0.7393905133847497, + "recall": 0.700159197162577, + "f1": 0.607256558231014 } }, { "model": "onnx-tta", "scope": "optimized", "rank": "family", - "cutoff": 0, + "cutoff": -1, "domain": "per_model", "classes": [ "3530", "3552", + "3553", "3556", "4300668", "4527533", "4532185", "4542", + "4864", + "4870", "5336", "5343", "5345", "5474", + "6166", "6950", "7015", "7016", "7294", + "8838", + "8840", "8841", "8860", + "8861", "8863", "8868", "8874", + "9412", "9689", "9717" ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 41399, - "report_images": 52788, - "overall_coverage": 0.7846859134651815, - "metrics": { - "accuracy": 0.9955854528269081, - "precision": 0.9748005661767682, - "recall": 0.7304295789928673, - "f1": 0.8270581606098827 - } - }, - { - "model": "onnx-tta", - "scope": "optimized", - "rank": "family", - "cutoff": 0, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4527533", - "4532185", - "4542", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 22, - "truth_images_in_retained_classes": 52786, - "accepted_predictions_in_retained_classes": 41399, + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 41422, "report_images": 52788, "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9955854528269081, - "precision": 0.9748005661767682, - "recall": 0.7304295789928673, - "f1": 0.8270581606098827 + "precision": 0.7395038777892725, + "recall": 0.6986717712105687, + "f1": 0.6065093177805806 } }, { @@ -47963,9 +46867,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9957914408379742, - "precision": 0.9859850593239553, + "precision": 0.9859850593239552, "recall": 0.6876576692748175, - "f1": 0.802095261069409 + "f1": 0.8020952610694089 } }, { @@ -48002,9 +46906,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9957914408379742, - "precision": 0.9859850593239553, + "precision": 0.9859850593239552, "recall": 0.6876576692748175, - "f1": 0.802095261069409 + "f1": 0.8020952610694089 } }, { @@ -48041,7 +46945,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.99218975160998, - "precision": 0.9900267939876928, + "precision": 0.9900267939876927, "recall": 0.7040432580775865, "f1": 0.816089411195116 } @@ -48080,7 +46984,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.99218975160998, - "precision": 0.9900267939876928, + "precision": 0.9900267939876927, "recall": 0.7040432580775865, "f1": 0.816089411195116 } @@ -48119,7 +47023,7 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9921957375359722, - "precision": 0.9900397290020405, + "precision": 0.9900397290020403, "recall": 0.7056726095713715, "f1": 0.817387949631118 } @@ -48158,7 +47062,7 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9921957375359722, - "precision": 0.9900397290020405, + "precision": 0.9900397290020403, "recall": 0.7056726095713715, "f1": 0.817387949631118 } @@ -48197,7 +47101,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9948848349121117, - "precision": 0.9917013099030386, + "precision": 0.991701309903039, "recall": 0.7564680159984232, "f1": 0.8535629866805483 } @@ -48236,7 +47140,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9948848349121117, - "precision": 0.9917013099030386, + "precision": 0.991701309903039, "recall": 0.7564680159984232, "f1": 0.8535629866805483 } @@ -48275,9 +47179,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9948884190627355, - "precision": 0.9918743397836266, + "precision": 0.9918743397836264, "recall": 0.754667447740729, - "f1": 0.852383133337759 + "f1": 0.8523831333377587 } }, { @@ -48314,9 +47218,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9948884190627355, - "precision": 0.9918743397836266, + "precision": 0.9918743397836264, "recall": 0.754667447740729, - "f1": 0.852383133337759 + "f1": 0.8523831333377587 } }, { @@ -48353,9 +47257,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9957914408379742, - "precision": 0.9859850593239553, + "precision": 0.9859850593239552, "recall": 0.6876576692748175, - "f1": 0.802095261069409 + "f1": 0.8020952610694089 } }, { @@ -48392,9 +47296,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9957914408379742, - "precision": 0.9859850593239553, + "precision": 0.9859850593239552, "recall": 0.6876576692748175, - "f1": 0.802095261069409 + "f1": 0.8020952610694089 } }, { @@ -48431,7 +47335,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.99218975160998, - "precision": 0.9900267939876928, + "precision": 0.9900267939876927, "recall": 0.7040432580775865, "f1": 0.816089411195116 } @@ -48470,7 +47374,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.99218975160998, - "precision": 0.9900267939876928, + "precision": 0.9900267939876927, "recall": 0.7040432580775865, "f1": 0.816089411195116 } @@ -48509,7 +47413,7 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9921957375359722, - "precision": 0.9900397290020405, + "precision": 0.9900397290020403, "recall": 0.7056726095713715, "f1": 0.817387949631118 } @@ -48548,7 +47452,7 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9921957375359722, - "precision": 0.9900397290020405, + "precision": 0.9900397290020403, "recall": 0.7056726095713715, "f1": 0.817387949631118 } @@ -48587,7 +47491,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9948848349121117, - "precision": 0.9917013099030386, + "precision": 0.991701309903039, "recall": 0.7564680159984232, "f1": 0.8535629866805483 } @@ -48626,7 +47530,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9948848349121117, - "precision": 0.9917013099030386, + "precision": 0.991701309903039, "recall": 0.7564680159984232, "f1": 0.8535629866805483 } @@ -48665,9 +47569,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9948884190627355, - "precision": 0.9918743397836266, + "precision": 0.9918743397836264, "recall": 0.754667447740729, - "f1": 0.852383133337759 + "f1": 0.8523831333377587 } }, { @@ -48704,9 +47608,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9948884190627355, - "precision": 0.9918743397836266, + "precision": 0.9918743397836264, "recall": 0.754667447740729, - "f1": 0.852383133337759 + "f1": 0.8523831333377587 } }, { @@ -48739,9 +47643,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9946691583947672, - "precision": 0.9978777258613801, + "precision": 0.99787772586138, "recall": 0.6871044763195309, - "f1": 0.8073961361904209 + "f1": 0.8073961361904208 } }, { @@ -48774,9 +47678,9 @@ "overall_coverage": 0.7744373721300295, "metrics": { "accuracy": 0.9946691583947672, - "precision": 0.9978777258613801, + "precision": 0.99787772586138, "recall": 0.6871044763195309, - "f1": 0.8073961361904209 + "f1": 0.8073961361904208 } }, { @@ -48809,7 +47713,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.9967736853726413, - "precision": 0.99662653164367, + "precision": 0.9966265316436699, "recall": 0.6975420951522447, "f1": 0.8137962822635084 } @@ -48844,7 +47748,7 @@ "overall_coverage": 0.7305827081912556, "metrics": { "accuracy": 0.9967736853726413, - "precision": 0.99662653164367, + "precision": 0.9966265316436699, "recall": 0.6975420951522447, "f1": 0.8137962822635084 } @@ -48879,9 +47783,9 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9967812675455647, - "precision": 0.9966429159951768, + "precision": 0.996642915995177, "recall": 0.6996059403777053, - "f1": 0.8154410976157777 + "f1": 0.8154410976157778 } }, { @@ -48914,9 +47818,9 @@ "overall_coverage": 0.7325907403197697, "metrics": { "accuracy": 0.9967812675455647, - "precision": 0.9966429159951768, + "precision": 0.996642915995177, "recall": 0.6996059403777053, - "f1": 0.8154410976157777 + "f1": 0.8154410976157778 } }, { @@ -48949,7 +47853,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9970295628184992, - "precision": 0.997949864338721, + "precision": 0.9979498643387211, "recall": 0.7536293282011772, "f1": 0.8548063047552162 } @@ -48984,7 +47888,7 @@ "overall_coverage": 0.7874327498673941, "metrics": { "accuracy": 0.9970295628184992, - "precision": 0.997949864338721, + "precision": 0.9979498643387211, "recall": 0.7536293282011772, "f1": 0.8548063047552162 } @@ -49019,9 +47923,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9970341027426228, - "precision": 0.9981690355207987, + "precision": 0.9981690355207985, "recall": 0.751348608408098, - "f1": 0.8533118238543494 + "f1": 0.8533118238543497 } }, { @@ -49054,9 +47958,9 @@ "overall_coverage": 0.7846859134651815, "metrics": { "accuracy": 0.9970341027426228, - "precision": 0.9981690355207987, + "precision": 0.9981690355207985, "recall": 0.751348608408098, - "f1": 0.8533118238543494 + "f1": 0.8533118238543497 } } ] diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md index a06dff9..54321bd 100644 --- a/docs/mambo-confidence-thresholds.md +++ b/docs/mambo-confidence-thresholds.md @@ -131,8 +131,9 @@ calibration F1 curve, not this plotting grid. Undefined package results remain n ## Tail-truncated supplementary metrics The [tail-truncated comparison](mambo-tail-metrics.md) averages classes with more -than 0, 5, 10 or 20 truth instances and accepted predictions, using a common class set -across all five pipelines. It retains coverage/support counts and the full-support +than 5, 10 or 20 truth instances and accepted predictions, using a common class set +across all five pipelines, alongside an untruncated support >−1 baseline that retains +each model’s full class domain. It retains coverage/support counts and the full-support comparison: excluding rare and predicted-only families changes the interpretation. ## Evidence and reproduction diff --git a/docs/mambo-tail-metrics.md b/docs/mambo-tail-metrics.md index 57363a1..781c4ff 100644 --- a/docs/mambo-tail-metrics.md +++ b/docs/mambo-tail-metrics.md @@ -1,11 +1,15 @@ # Tail-truncated release metrics -These supplementary metrics summarize classes with **more than 0, 5, 10 or 20** +These supplementary metrics summarize classes with **more than 5, 10 or 20** truth instances **and accepted predictions**, at each taxonomic rank. Main results use the intersection of qualifying classes across all five pipelines, so each pipeline is averaged over the same classes. Exact-boundary counts do not qualify. -Support >0 is the baseline for classes represented in both domains; it still -excludes predicted-only and never-predicted truth classes, unlike full-support metrics. +The **support >−1 baseline is untruncated**: it includes the union of truth and +accepted-prediction classes for each model, including zero-support classes in either +domain. It reproduces the original full-support metrics. Unlike the truncated rows, +it does not intersect class sets across models, which would hide model-specific +predicted-only families. Baseline class counts are listed in model-column order; +each metric retains mini_metrics’ own handling of undefined class groups. The dataset, legacy northern-Europe preset, 52,788-image reporting partition, calibrated thresholds and pinned `mini_metrics` revision are unchanged from the @@ -18,27 +22,27 @@ class groups. No image rows are dropped: mistakes from excluded truth classes in retained predictions still contribute false positives, and mistakes from retained truth classes into excluded predictions still contribute false negatives. -Truncation excludes predicted-only classes and rare supported classes from the +Positive-cutoff truncation excludes predicted-only classes and rare supported classes from the average. It therefore intentionally hides the rare-family failure mode studied [in the family audit](mambo-family-precision.md). Keep these results alongside the full-support metrics. The class sets may differ between threshold zero and calibrated thresholds; comparisons across those sections are not on a fixed class domain. -## Calibrated thresholds · common classes +## Calibrated thresholds -Macro-F1 on each shared class set: +Macro-F1: full-support baseline, followed by the shared truncated class sets. | Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | |---|---:|---:|---:|---:|---:|---:|---:| -| Species | 0 | 413 | 0.7346 | 0.7625 | 0.7611 | 0.8021 | 0.7858 | +| Species | −1 | 690 / 654 / 650 / 681 / 636 | 0.4467 | 0.5081 | 0.5100 | 0.5239 | 0.5431 | | Species | 5 | 272 | 0.7799 | 0.8016 | 0.8001 | 0.8413 | 0.8224 | | Species | 10 | 237 | 0.8009 | 0.8139 | 0.8124 | 0.8538 | 0.8356 | | Species | 20 | 180 | 0.8110 | 0.8221 | 0.8202 | 0.8597 | 0.8420 | -| Genus | 0 | 290 | 0.7589 | 0.8055 | 0.8030 | 0.8276 | 0.8276 | +| Genus | −1 | 379 / 398 / 395 / 372 / 372 | 0.5869 | 0.6019 | 0.6043 | 0.6655 | 0.6655 | | Genus | 5 | 215 | 0.7875 | 0.8311 | 0.8290 | 0.8477 | 0.8477 | | Genus | 10 | 192 | 0.8055 | 0.8364 | 0.8345 | 0.8523 | 0.8525 | | Genus | 20 | 151 | 0.8215 | 0.8533 | 0.8514 | 0.8692 | 0.8693 | -| Family | 0 | 22 | 0.7735 | 0.7919 | 0.7930 | 0.8281 | 0.8271 | +| Family | −1 | 26 / 30 / 30 / 30 / 30 | 0.6545 | 0.5807 | 0.5816 | 0.6073 | 0.6065 | | Family | 5 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | | Family | 10 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | | Family | 20 | 15 | 0.8074 | 0.8138 | 0.8154 | 0.8548 | 0.8533 | @@ -54,19 +58,19 @@ selected thresholds have different coverage; shared-threshold testing in the [threshold study](mambo-confidence-thresholds.md#tta-backend-threshold-sensitivity) shows closely aligned backend predictions. -## Threshold zero · common classes +## Threshold zero | Rank | Support > | Classes retained | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | |---|---:|---:|---:|---:|---:|---:|---:| -| Species | 0 | 479 | 0.6579 | 0.6922 | 0.6924 | 0.7300 | 0.7300 | +| Species | −1 | 1205 / 1289 / 1289 / 1177 / 1173 | 0.2620 | 0.2593 | 0.2594 | 0.3001 | 0.3011 | | Species | 5 | 313 | 0.7815 | 0.8013 | 0.8016 | 0.8288 | 0.8287 | | Species | 10 | 271 | 0.8062 | 0.8232 | 0.8235 | 0.8484 | 0.8483 | | Species | 20 | 208 | 0.8209 | 0.8454 | 0.8455 | 0.8656 | 0.8656 | -| Genus | 0 | 317 | 0.7003 | 0.7266 | 0.7267 | 0.7656 | 0.7653 | +| Genus | −1 | 691 / 713 / 710 / 674 / 673 | 0.3213 | 0.3230 | 0.3245 | 0.3601 | 0.3605 | | Genus | 5 | 242 | 0.7942 | 0.8057 | 0.8055 | 0.8342 | 0.8340 | | Genus | 10 | 218 | 0.8087 | 0.8223 | 0.8220 | 0.8520 | 0.8517 | | Genus | 20 | 174 | 0.8425 | 0.8551 | 0.8549 | 0.8765 | 0.8764 | -| Family | 0 | 23 | 0.7504 | 0.7317 | 0.7328 | 0.7749 | 0.7750 | +| Family | −1 | 64 / 60 / 60 / 60 / 60 | 0.2697 | 0.2805 | 0.2809 | 0.2970 | 0.2971 | | Family | 5 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | | Family | 10 | 20 | 0.8238 | 0.7831 | 0.7843 | 0.8211 | 0.8212 | | Family | 20 | 17 | 0.8635 | 0.8503 | 0.8505 | 0.8813 | 0.8814 | @@ -77,8 +81,9 @@ Truncating the averaging domain does not change which images the pipeline accept The [CSV](assets/mambo-tail-metrics.csv) retains overall acceptance coverage, the number of truth images and accepted predictions belonging to retained classes, and macro accuracy/precision/recall/F1. These support counts are not interchangeable -with acceptance coverage. Both common-class and per-model class sets are included; -use the common sets for direct model comparisons. The [JSON](assets/mambo-tail-metrics.json) +with acceptance coverage. Positive cutoffs include both common-class and per-model class sets; +use the common sets for truncated comparisons. The >−1 baseline includes only +per-model sets, preserving all original class groups. The [JSON](assets/mambo-tail-metrics.json) additionally records every retained class ID. Empty class domains produce null metrics. ```sh diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index 79ffd98..9f00684 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -207,6 +207,7 @@ def test_tail_support_requires_both_domains_and_strict_cutoff(): truth = {"kept": 6, "at_truth_cutoff": 5, "at_prediction_cutoff": 20, "unpredicted": 30} accepted = {"kept": 6, "at_truth_cutoff": 30, "at_prediction_cutoff": 5, "predicted_only": 100} + assert eligible_classes(truth, accepted, -1) == set(truth) | set(accepted) assert eligible_classes(truth, accepted, 0) == {"kept", "at_truth_cutoff", "at_prediction_cutoff"} assert eligible_classes(truth, accepted, 5) == {"kept"} assert eligible_classes(truth, accepted, 20) == set() From 941fce5a5a360e3cfbb24e0f41c4347242337c83 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 13:18:39 +0200 Subject: [PATCH 043/221] docs: compare full and tail-truncated deployment metrics --- deployment/README.md | 50 +- dev/releases/mambo_v3/tail_charts.py | 80 + dev/releases/mambo_v3/tail_report.py | 25 +- docs/assets/mambo-defaults-tail.csv | 106 + docs/assets/mambo-defaults-tail.json | 27695 +++++++++++++++++++++++++ docs/assets/mambo-defaults-tail.svg | 1670 ++ docs/mambo-deployment-defaults.md | 36 + 7 files changed, 29639 insertions(+), 23 deletions(-) create mode 100644 dev/releases/mambo_v3/tail_charts.py create mode 100644 docs/assets/mambo-defaults-tail.csv create mode 100644 docs/assets/mambo-defaults-tail.json create mode 100644 docs/assets/mambo-defaults-tail.svg diff --git a/deployment/README.md b/deployment/README.md index b41b531..2c97404 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -124,36 +124,54 @@ species outside the selected vocabulary. All predictive metrics use pinned `mini_metrics`, threshold zero and no threshold optimization. The main table uses the recommended northern-Europe legacy list (`north_europe`), shared by V2 and V3. TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; -CPU timings use FP32. +CPU timings use FP32. Quality cells show **full support → support >5**, retaining +classes with more than five truth instances and predictions in **every pipeline**. +Full-support metrics retain each model’s complete class domain. -| Pipeline | Species macro accuracy | Species macro-F1 | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +| Pipeline | Species macro accuracy (full → >5) | Species macro-F1 (full → >5) | CPU B1 | GPU B1 | GPU B8 | GPU B32 | |---|---:|---:|---:|---:|---:|---:| -| MAMBO v2 | 68.52% | 0.2575 | 1.26 | 45.2 | 44.8 | 83.5 | -| V3 PyTorch | 71.25% | 0.2543 | 5.70 | 29.8 | 126.7 | 136.2 | -| V3 ONNX | 71.24% | 0.2543 | 10.08 | 46.7 | 114.1 | 111.3 | -| V3 PyTorch + TTA | 73.95% | 0.2935 | 2.29 | 8.5 | 42.7 | 50.4 | -| V3 ONNX + TTA | 73.98% | 0.2944 | 3.56 | 16.8 | 41.7 | 39.4 | +| MAMBO v2 | 68.52% → 78.93% | 0.2575 → 0.7762 | 1.26 | 45.2 | 44.8 | 83.5 | +| V3 PyTorch | 71.25% → 80.76% | 0.2543 → 0.7935 | 5.70 | 29.8 | 126.7 | 136.2 | +| V3 ONNX | 71.24% → 80.80% | 0.2543 → 0.7937 | 10.08 | 46.7 | 114.1 | 111.3 | +| V3 PyTorch + TTA | 73.95% → 83.63% | 0.2935 → 0.8213 | 2.29 | 8.5 | 42.7 | 50.4 | +| V3 ONNX + TTA | 73.98% → 83.65% | 0.2944 → 0.8213 | 3.56 | 16.8 | 41.7 | 39.4 | Speed is **images per second**, including decoding through completed CPU results, on an i7-12800H / RTX 3080 Ti Laptop. Three fresh-process trials use the same image bank and four preparation/runtime CPU threads; V2 and ordinary V3 reuse retained measurements. V2 CPU uses its documented float32 input adapter. -Northern Europe, **genus and family**, also all truth and threshold zero: +Northern Europe, **genus and family**, on the same images at threshold zero: -| Pipeline | Genus macro accuracy / F1 | Family macro accuracy / F1 | -|---|---:|---:| -| MAMBO v2 | 78.90% / 0.3169 | 84.40% / 0.2691 | -| V3 PyTorch | 80.53% / 0.3204 | 81.05% / 0.2804 | -| V3 ONNX | 80.50% / 0.3212 | 81.06% / 0.2808 | -| V3 PyTorch + TTA | 83.04% / 0.3532 | 85.72% / 0.2967 | -| V3 ONNX + TTA | 83.04% / 0.3536 | 85.73% / 0.2967 | +| Pipeline | Genus macro accuracy (full → >5) | Genus macro-F1 (full → >5) | Family macro accuracy (full → >5) | Family macro-F1 (full → >5) | +|---|---:|---:|---:|---:| +| MAMBO v2 | 78.90% → 82.27% | 0.3169 → 0.7920 | 84.40% → 87.06% | 0.2691 → 0.8222 | +| V3 PyTorch | 80.53% → 83.85% | 0.3204 → 0.8001 | 81.05% → 85.71% | 0.2804 → 0.7830 | +| V3 ONNX | 80.50% → 83.81% | 0.3212 → 0.7997 | 81.06% → 85.72% | 0.2808 → 0.7840 | +| V3 PyTorch + TTA | 83.04% → 86.48% | 0.3532 → 0.8303 | 85.72% → 88.58% | 0.2967 → 0.8202 | +| V3 ONNX + TTA | 83.04% → 86.48% | 0.3536 → 0.8301 | 85.73% → 88.59% | 0.2967 → 0.8202 | Ordinary V3 improves genus macro accuracy but reduces family macro accuracy versus V2 (84.40% → about 81.05%). TTA raises these to about **83.04% genus / 85.72–85.73% family**, exceeding V2 at both ranks. -![Species, genus and family macro metrics](../docs/assets/mambo-defaults-ranks-all.svg) +Support >5 excludes the following images’ **truth classes from the macro average**. +No image rows are discarded: their false-positive/false-negative contributions to +retained classes still count. Predicted-only classes are excluded, so keep the +full-support baseline alongside the truncated results. Confidence coverage remains +100% at threshold zero; these percentages are not rejection rates. + +| Rank | Shared classes retained | Images with truth outside retained classes | Images with predictions outside (range across pipelines) | +|---|---:|---:|---:| +| Species | 323 | 8,869 / 15.12% | 12,981–14,847 / 22.14%–25.32% | +| Genus | 248 | 201 / 0.34% | 8,074–8,834 / 13.77%–15.06% | +| Family | 20 | 5 / 0.01% | 605–1,015 / 1.03%–1.73% | + +The [full-data metric export](../docs/assets/mambo-defaults-tail.csv) also includes +macro precision/recall and per-model class sets. The [tail-metric methodology](../docs/mambo-tail-metrics.md) +explains the calculation; its threshold-study tables use a different reporting partition. + +![Full-support and support >5 macro metrics at all three ranks](../docs/assets/mambo-defaults-tail.svg) Regional filtering improves results on Flemming. The [single regional-effect figure](../docs/mambo-deployment-defaults.md#regional-filtering-effect) summarizes global → Europe → northern Europe across pipelines and ranks. diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py new file mode 100644 index 0000000..144cd64 --- /dev/null +++ b/dev/releases/mambo_v3/tail_charts.py @@ -0,0 +1,80 @@ +"""Plot full-data macro metrics beside common-class support >5 metrics.""" + +import argparse +import json +from pathlib import Path + +from dev.releases.mambo_v3.defaults_report import SERIES + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.lines import Line2D + + if data.get("population") != "full_dataset": + raise ValueError("Expected full-dataset results") + rows = {(r["model"], r["rank"], r["cutoff"], r["domain"]): r for r in data["rows"] if r["scope"] == "zero"} + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-tail-v1", "axes.spines.top": False, "axes.spines.right": False}) + fig, axes = plt.subplots(3, 2, figsize=(12, 11)) + for level, rank in enumerate(("species", "genus", "family")): + retained = rows["v2", rank, 5, "common"] + total = retained["report_images"] + excluded = total - retained["truth_images_in_retained_classes"] + for col, (metric, title, factor) in enumerate((("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1))): + ax = axes[level, col] + for i, (model, _, color) in enumerate(SERIES): + baseline = rows[model, rank, -1, "per_model"]["metrics"][metric] * factor + truncated = rows[model, rank, 5, "common"]["metrics"][metric] * factor + ax.plot([baseline, truncated], [i, i], color=color, alpha=0.5) + ax.scatter(baseline, i, facecolors="white", edgecolors=color, s=65, zorder=3) + ax.scatter(truncated, i, color=color, s=65, zorder=3) + ax.set( + title=( + f"{rank.title()} · {title}\n>5: {retained['class_count']} classes; " + f"{excluded:,} truth images outside ({excluded / total:.2%})" + ), + yticks=range(5), + yticklabels=[label for _, label, _ in SERIES] if col == 0 else [], + xlim=(0, factor), + ylim=(4.6, -0.6), + ) + ax.grid(axis="x", alpha=0.15) + fig.suptitle("Full support and tail-truncated metrics · legacy northern Europe", fontsize=15) + fig.legend( + handles=[ + Line2D( + [], [], marker="o", color="gray", markerfacecolor="white", linestyle="none", label="Full support (>−1; per-model classes)" + ), + Line2D([], [], marker="o", color="gray", linestyle="none", label="Support >5 in truth AND predictions (common classes)"), + ], + loc="upper center", + bbox_to_anchor=(0.5, 0.955), + ncol=2, + ) + fig.text( + 0.03, + 0.02, + "58,640 Flemming images; confidence threshold 0; pinned mini_metrics. TTA: padded scale.\n" + "No evaluation rows removed: FP/FN remain; only the macro averaging domain changes.\n" + "Outside counts refer to truth classes, not confidence rejection. Truncation excludes predicted-only classes.\n" + "Descriptive comparison; TTA was selected on a subset of the same dataset.", + fontsize=10, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.92)) + output.mkdir(parents=True, exist_ok=True) + path = output / "mambo-defaults-tail.svg" + fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-defaults-tail.png", dpi=160, bbox_inches="tight") + plt.close(fig) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + render(json.loads(args.data.read_text()), args.output) diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py index dabe22e..49ff494 100644 --- a/dev/releases/mambo_v3/tail_report.py +++ b/dev/releases/mambo_v3/tail_report.py @@ -22,7 +22,7 @@ def eligible_classes(truth, accepted_predictions, cutoff): } -def collect(study): +def collect(study, *, full_dataset=False): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall @@ -31,14 +31,19 @@ def collect(study): raise ValueError("Require pinned mini_metrics") metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} work = {} + identities = {} for model, source in study["models"].items(): if file_hash(source["source"]) != source["source_sha256"]: raise ValueError("Changed predictions") - data, _ = MetricDF.from_source(source["source"]).split((0.9, 0.1), strata=("label",), seed=42) - if identity(data) != source["identities"]["report"]: + data = MetricDF.from_source(source["source"]) + if not full_dataset: + data, _ = data.split((0.9, 0.1), strata=("label",), seed=42) + identities[model] = identity(data) + if not full_dataset and identity(data) != source["identities"]["report"]: raise ValueError("Changed reporting partition") work[model] = {} - for scope, threshold in (("zero", 0), ("optimized", source["thresholds"])): + scopes = (("zero", 0),) if full_dataset else (("zero", 0), ("optimized", source["thresholds"])) + for scope, threshold in scopes: df = data.with_threshold(threshold) groups = {name: metric(df, aggregate=False, verbose=0) for name, metric in metrics.items()} work[model][scope] = {} @@ -49,12 +54,17 @@ def collect(study): "predictions": Counter(map(str, rows.prediction[rows.prediction_made])), "groups": {m: g[level] for m, g in groups.items()}, } + if len(set(identities.values())) != 1: + raise ValueError("Model evaluation populations differ") result = { + "population": "full_dataset" if full_dataset else "reporting_partition", + "identities": identities, + "sources_sha256": {model: source["source_sha256"] for model, source in study["models"].items()}, "revision": REVISION, "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", "rows": [], } - for scope in ("zero", "optimized"): + for scope in ("zero",) if full_dataset else ("zero", "optimized"): for level, rank in enumerate(("species", "genus", "family")): for cutoff in (-1, 5, 10, 20): eligible = { @@ -80,7 +90,7 @@ def collect(study): "class_count": len(selected), "truth_images_in_retained_classes": sum(row["truth"][k] for k in selected), "accepted_predictions_in_retained_classes": sum(row["predictions"][k] for k in selected), - "report_images": study["models"][model]["report_images"], + "report_images": sum(row["truth"].values()), "overall_coverage": reference["coverage"][str(level)], "metrics": { name: float( @@ -99,8 +109,9 @@ def collect(study): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--full-dataset", action="store_true", help="Use all source images at threshold zero only") args = parser.parse_args() - result = collect(json.loads(args.study.read_text())) + result = collect(json.loads(args.study.read_text()), full_dataset=args.full_dataset) args.output.mkdir(parents=True, exist_ok=True) write_json(args.output / "mambo-tail-metrics.json", result) with (args.output / "mambo-tail-metrics.csv").open("w", newline="") as stream: diff --git a/docs/assets/mambo-defaults-tail.csv b/docs/assets/mambo-defaults-tail.csv new file mode 100644 index 0000000..4020d17 --- /dev/null +++ b/docs/assets/mambo-defaults-tail.csv @@ -0,0 +1,106 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,1221,58640,58640,58640,1.0,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.2575380033854696 +torch,zero,species,-1,per_model,1309,58640,58640,58640,1.0,0.7124755690715492,0.26342704573380454,0.7124755690715492,0.25428952382168746 +onnx,zero,species,-1,per_model,1309,58640,58640,58640,1.0,0.7123551106111988,0.26343028004895147,0.7123551106111988,0.25432102340018486 +torch-tta,zero,species,-1,per_model,1197,58640,58640,58640,1.0,0.7394942213066358,0.3045154257441184,0.7394942213066358,0.29354423320755 +onnx-tta,zero,species,-1,per_model,1193,58640,58640,58640,1.0,0.7398002960321982,0.30560509035336597,0.7398002960321982,0.2944363607025529 +v2,zero,species,5,per_model,332,49965,43906,58640,1.0,0.7804519827952229,0.8132613221595489,0.7804519827952229,0.767750987431369 +v2,zero,species,5,common,323,49771,43793,58640,1.0,0.7893403332535088,0.8209378703317131,0.7893403332535088,0.7761503968624853 +torch,zero,species,5,per_model,333,50028,44632,58640,1.0,0.7955403347220553,0.8148667864853998,0.7955403347220553,0.7836676630026933 +torch,zero,species,5,common,323,49771,44546,58640,1.0,0.8075564989092358,0.8206160162011501,0.8075564989092358,0.7934690725468392 +onnx,zero,species,5,per_model,333,50028,44645,58640,1.0,0.7959521085469712,0.8149813536593272,0.7959521085469712,0.7838792936205538 +onnx,zero,species,5,common,323,49771,44559,58640,1.0,0.8079810211497839,0.8207341303464063,0.8079810211497839,0.7936872551962122 +torch-tta,zero,species,5,per_model,335,49924,45758,58640,1.0,0.8233452008601031,0.8361083038702228,0.8233452008601031,0.8111919297581796 +torch-tta,zero,species,5,common,323,49771,45653,58640,1.0,0.8362560793198487,0.8424552838647043,0.8362560793198487,0.8212732179011305 +onnx-tta,zero,species,5,per_model,335,49924,45764,58640,1.0,0.8235925081132986,0.8360886919210944,0.8235925081132986,0.8112089254223764 +onnx-tta,zero,species,5,common,323,49771,45659,58640,1.0,0.836512574458612,0.8424349432982707,0.836512574458612,0.8212908449831922 +v2,zero,species,10,per_model,281,48752,43179,58640,1.0,0.8015233937799323,0.8489418368710229,0.8015233937799323,0.8047301032307933 +v2,zero,species,10,common,276,48569,43085,58640,1.0,0.8036358015042979,0.8491944063795561,0.8036358015042979,0.8060694564714563 +torch,zero,species,10,per_model,288,49474,44016,58640,1.0,0.8164188665527266,0.8504866560247468,0.8164188665527266,0.8174147604399674 +torch,zero,species,10,common,276,48569,43509,58640,1.0,0.8231034842915722,0.852620913533206,0.8231034842915722,0.8225526620461225 +onnx,zero,species,10,per_model,288,49474,44028,58640,1.0,0.8168949800377856,0.8506207534510775,0.8168949800377856,0.8176623311125982 +onnx,zero,species,10,common,276,48569,43521,58640,1.0,0.8236002983629384,0.8527608412824206,0.8236002983629384,0.8228109966610416 +torch-tta,zero,species,10,per_model,290,49491,45165,58640,1.0,0.8448147812478007,0.8686351477620251,0.8448147812478007,0.8430944324410347 +torch-tta,zero,species,10,common,276,48569,44545,58640,1.0,0.8500633958998807,0.8701711239397353,0.8500633958998807,0.8468123522603528 +onnx-tta,zero,species,10,per_model,290,49491,45171,58640,1.0,0.8451004637644232,0.8686124925794111,0.8451004637644232,0.843114065363469 +onnx-tta,zero,species,10,common,276,48569,44551,58640,1.0,0.8503635695586504,0.8701473195811916,0.8503635695586504,0.8468329810556643 +v2,zero,species,20,per_model,227,47718,42116,58640,1.0,0.8104473759200309,0.8578518423290517,0.8104473759200309,0.8156127676262825 +v2,zero,species,20,common,221,47442,41948,58640,1.0,0.8155338436417237,0.8608672123211786,0.8155338436417237,0.8199232466589719 +torch,zero,species,20,per_model,238,48599,43096,58640,1.0,0.8228758500302792,0.8709627588948129,0.8228758500302792,0.8324260662998175 +torch,zero,species,20,common,221,47442,42352,58640,1.0,0.8343864499962018,0.8780167850519418,0.8343864499962018,0.8425720959185982 +onnx,zero,species,20,per_model,238,48599,43106,58640,1.0,0.8232769173287262,0.871128430219949,0.8232769173287262,0.8326386862169237 +onnx,zero,species,20,common,221,47442,42364,58640,1.0,0.8348183686252988,0.8779740426087514,0.8348183686252988,0.8426753449878298 +torch-tta,zero,species,20,per_model,238,48571,44234,58640,1.0,0.8532633086198458,0.8867066977362028,0.8532633086198458,0.8577020245523158 +torch-tta,zero,species,20,common,221,47442,43414,58640,1.0,0.8607764714822107,0.8906618013155634,0.8607764714822107,0.8639878535451234 +onnx-tta,zero,species,20,per_model,238,48571,44235,58640,1.0,0.8533112891172909,0.8867157309673706,0.8533112891172909,0.8577134774255251 +onnx-tta,zero,species,20,common,221,47442,43415,58640,1.0,0.8608281427871516,0.8906715294106673,0.8608281427871516,0.8640001874085796 +v2,zero,genus,-1,per_model,698,58640,58640,58640,1.0,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452808 +torch,zero,genus,-1,per_model,716,58640,58640,58640,1.0,0.8053483819748223,0.3189366087734117,0.8053483819748223,0.3204124099108477 +onnx,zero,genus,-1,per_model,714,58640,58640,58640,1.0,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369 +torch-tta,zero,genus,-1,per_model,684,58640,58640,58640,1.0,0.8303908427754559,0.3505904633143813,0.8303908427754559,0.3532089993367619 +onnx-tta,zero,genus,-1,per_model,683,58640,58640,58640,1.0,0.8304111700220072,0.35093141039439896,0.8304111700220072,0.35360877971608085 +v2,zero,genus,5,per_model,249,58447,50027,58640,1.0,0.8219266550615453,0.8127690860219302,0.8219266550615453,0.7906389901996281 +v2,zero,genus,5,common,248,58439,50013,58640,1.0,0.8227207141545352,0.814606288557733,0.8227207141545352,0.7919942060692015 +torch,zero,genus,5,per_model,249,58445,49813,58640,1.0,0.8371687635869385,0.8073826948942792,0.8371687635869385,0.7987426899052846 +torch,zero,genus,5,common,248,58439,49806,58640,1.0,0.8385283150530148,0.8089101596778391,0.8385283150530148,0.8001023843745056 +onnx,zero,genus,5,per_model,249,58445,49815,58640,1.0,0.8367198751831082,0.8068419286188611,0.8367198751831082,0.7982979243110807 +onnx,zero,genus,5,common,248,58439,49808,58640,1.0,0.8380776166152981,0.8083672128932459,0.8380776166152981,0.7996558253706477 +torch-tta,zero,genus,5,per_model,250,58457,50573,58640,1.0,0.8627747780438068,0.8368451276595528,0.8627747780438068,0.8294985728477161 +torch-tta,zero,genus,5,common,248,58439,50561,58640,1.0,0.8647931230280309,0.8362014055707858,0.8647931230280309,0.8302836995872716 +onnx-tta,zero,genus,5,per_model,250,58457,50578,58640,1.0,0.8628009595373644,0.8366096008903584,0.8628009595373644,0.8293435494948899 +onnx-tta,zero,genus,5,common,248,58439,50566,58640,1.0,0.8648195156626658,0.8359639793921624,0.8648195156626658,0.830127426046116 +v2,zero,genus,10,per_model,225,58236,49619,58640,1.0,0.8252783249476032,0.8350504050502193,0.8252783249476032,0.808013110047685 +v2,zero,genus,10,common,222,58195,49570,58640,1.0,0.824807504370962,0.83600915965762,0.824807504370962,0.8081287197161677 +torch,zero,genus,10,per_model,229,58287,49484,58640,1.0,0.8393961784927966,0.8310502469637352,0.8393961784927966,0.8162838077724298 +torch,zero,genus,10,common,222,58195,49396,58640,1.0,0.8435690095177734,0.8357508875265129,0.8435690095177734,0.8203775192436712 +onnx,zero,genus,10,per_model,229,58287,49488,58640,1.0,0.8394539373899418,0.8304974781117134,0.8394539373899418,0.8159503793944154 +onnx,zero,genus,10,common,222,58195,49400,58640,1.0,0.8436285896414052,0.8351806890260037,0.8436285896414052,0.820033577358242 +torch-tta,zero,genus,10,per_model,227,58252,50242,58640,1.0,0.872971488300815,0.8617786609173839,0.872971488300815,0.8511810260087067 +torch-tta,zero,genus,10,common,222,58195,50177,58640,1.0,0.8708612365358183,0.8620785961078308,0.8708612365358183,0.8500270973391464 +onnx-tta,zero,genus,10,per_model,227,58252,50248,58640,1.0,0.8730003225448212,0.8614328920388118,0.8730003225448212,0.8509289670806535 +onnx-tta,zero,genus,10,common,222,58195,50183,58640,1.0,0.8708907201997347,0.8617250396419035,0.8708907201997347,0.849769361408209 +v2,zero,genus,20,per_model,186,57097,48695,58640,1.0,0.8426420260480435,0.8630959679849289,0.8426420260480435,0.8367937129642364 +v2,zero,genus,20,common,182,56984,48586,58640,1.0,0.8445786450365945,0.8643626549359886,0.8445786450365945,0.8381676091588163 +torch,zero,genus,20,per_model,190,57639,48638,58640,1.0,0.8508484895699264,0.8654633778215377,0.8508484895699264,0.8430006758307964 +torch,zero,genus,20,common,182,56984,48209,58640,1.0,0.8568681861269765,0.868294149775848,0.8568681861269765,0.8478182354988681 +onnx,zero,genus,20,per_model,190,57639,48640,58640,1.0,0.8506988059950821,0.865078476895734,0.8506988059950821,0.8426656582962279 +onnx,zero,genus,20,common,182,56984,48211,58640,1.0,0.8567119230543369,0.8678923301280309,0.8567119230543369,0.8474684919188242 +torch-tta,zero,genus,20,per_model,191,57679,49466,58640,1.0,0.8757982151851574,0.8874148819339942,0.8757982151851574,0.8682678780741216 +torch-tta,zero,genus,20,common,182,56984,48969,58640,1.0,0.8814254761776787,0.889035213147546,0.8814254761776787,0.8724320940695854 +onnx-tta,zero,genus,20,per_model,191,57679,49469,58640,1.0,0.8758324841557825,0.8869192117831547,0.8758324841557825,0.8679852506887044 +onnx-tta,zero,genus,20,common,182,56984,48972,58640,1.0,0.8814614397677304,0.8885150318354011,0.8814614397677304,0.8721354906046694 +v2,zero,family,-1,per_model,64,58640,58640,58640,1.0,0.8440271040813301,0.2600743589223739,0.8440271040813301,0.2691037692533918 +torch,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.28044633693466975 +onnx,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.2807691734951072 +torch-tta,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.857176291043506,0.28541955682278985,0.857176291043506,0.29672977205202156 +onnx-tta,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087 +v2,zero,family,5,per_model,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 +v2,zero,family,5,common,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 +torch,zero,family,5,per_model,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 +torch,zero,family,5,common,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 +onnx,zero,family,5,per_model,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 +onnx,zero,family,5,common,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 +torch-tta,zero,family,5,per_model,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 +torch-tta,zero,family,5,common,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 +onnx-tta,zero,family,5,per_model,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 +onnx-tta,zero,family,5,common,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 +v2,zero,family,10,per_model,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 +v2,zero,family,10,common,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 +torch,zero,family,10,per_model,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 +torch,zero,family,10,common,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 +onnx,zero,family,10,per_model,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 +onnx,zero,family,10,common,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 +torch-tta,zero,family,10,per_model,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 +torch-tta,zero,family,10,common,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 +onnx-tta,zero,family,10,per_model,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 +onnx-tta,zero,family,10,common,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 +v2,zero,family,20,per_model,17,58591,57945,58640,1.0,0.8805744853537323,0.8603318425866534,0.8805744853537323,0.8641945097882205 +v2,zero,family,20,common,17,58591,57945,58640,1.0,0.8805744853537323,0.8603318425866534,0.8805744853537323,0.8641945097882205 +torch,zero,family,20,per_model,17,58591,57498,58640,1.0,0.8772443619441458,0.8454930600394824,0.8772443619441458,0.8513978587998544 +torch,zero,family,20,common,17,58591,57498,58640,1.0,0.8772443619441458,0.8454930600394824,0.8772443619441458,0.8513978587998544 +onnx,zero,family,20,per_model,17,58591,57505,58640,1.0,0.8774227242172608,0.8454826219027971,0.8774227242172608,0.8514947560248236 +onnx,zero,family,20,common,17,58591,57505,58640,1.0,0.8774227242172608,0.8454826219027971,0.8774227242172608,0.8514947560248236 +torch-tta,zero,family,20,per_model,17,58591,57813,58640,1.0,0.903126466593875,0.8742034082733955,0.903126466593875,0.8819814890011932 +torch-tta,zero,family,20,common,17,58591,57813,58640,1.0,0.903126466593875,0.8742034082733955,0.903126466593875,0.8819814890011932 +onnx-tta,zero,family,20,per_model,17,58591,57813,58640,1.0,0.903312472765083,0.8740951702419255,0.903312472765083,0.8820411154365596 +onnx-tta,zero,family,20,common,17,58591,57813,58640,1.0,0.903312472765083,0.8740951702419255,0.903312472765083,0.8820411154365596 diff --git a/docs/assets/mambo-defaults-tail.json b/docs/assets/mambo-defaults-tail.json new file mode 100644 index 0000000..c0c484f --- /dev/null +++ b/docs/assets/mambo-defaults-tail.json @@ -0,0 +1,27695 @@ +{ + "population": "full_dataset", + "identities": { + "v2": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "torch": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "onnx": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "torch-tta": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "onnx-tta": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165" + }, + "sources_sha256": { + "v2": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "torch": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "onnx": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "torch-tta": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", + "onnx-tta": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5" + }, + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10638451", + "10844862", + "10922411", + "10982815", + "11052757", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731826", + "1732063", + "1732416", + "1732452", + "1732565", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736412", + "1736447", + "1736727", + "1736906", + "1737491", + "1737524", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738422", + "1738429", + "1739272", + "1739290", + "1739461", + "1739819", + "1739833", + "1739922", + "1739931", + "1739980", + "1740005", + "1740069", + "1740174", + "1740183", + "1740185", + "1740392", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741752", + "1742142", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743643", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1744071", + "1744136", + "1744224", + "1744416", + "1744498", + "1744588", + "1744593", + "1744693", + "1744709", + "1744714", + "1744728", + "1744731", + "1744739", + "1744748", + "1744763", + "1744777", + "1744782", + "1744808", + "1744810", + "1744896", + "1745079", + "1745561", + "1745600", + "1745724", + "1745737", + "1746027", + "1746413", + "1746440", + "1746613", + "1746644", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1747050", + "1748805", + "1748890", + "1749164", + "1749713", + "1749948", + "1751051", + "1751298", + "1751457", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1759667", + "1759668", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1762608", + "1763072", + "1763610", + "1764987", + "1765011", + "1765017", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768749", + "1768771", + "1768815", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771509", + "1771531", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1774285", + "1775152", + "1775891", + "1776330", + "1776371", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778596", + "1779334", + "1779435", + "1779641", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782727", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1786936", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787751", + "1787770", + "1787859", + "1788522", + "1788635", + "1788917", + "1789076", + "1789086", + "1789267", + "1789481", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789840", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790625", + "1790692", + "1790816", + "1791422", + "1792061", + "1792292", + "1792335", + "1792377", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1795946", + "1795957", + "1796007", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829533", + "1829776", + "1829785", + "1830122", + "1830125", + "1830131", + "1830144", + "1830191", + "1830380", + "1830410", + "1830457", + "1830632", + "1830838", + "1830843", + "1830937", + "1830962", + "1831002", + "1831009", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1832819", + "1832853", + "1835031", + "1835156", + "1835393", + "1835407", + "1835433", + "1835457", + "1836899", + "1837172", + "1837420", + "1838838", + "1838911", + "1839851", + "1839893", + "1840297", + "1840301", + "1840345", + "1840346", + "1840360", + "1840478", + "1840483", + "1840596", + "1841158", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1841821", + "1842196", + "1845270", + "1845962", + "1846112", + "1846141", + "1846219", + "1846604", + "1846729", + "1847097", + "1847407", + "1847956", + "1848202", + "1848356", + "1848426", + "1848657", + "1848864", + "1848920", + "1849284", + "1849630", + "1849924", + "1850008", + "1850238", + "1850246", + "1850279", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851555", + "1852150", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853587", + "1854202", + "1854237", + "1854347", + "1854792", + "1856289", + "1856384", + "1856595", + "1856686", + "1856701", + "1856730", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858531", + "1858698", + "1858762", + "1859046", + "1859100", + "1860408", + "1860671", + "1860688", + "1860983", + "1860987", + "1861395", + "1861644", + "1861862", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1869489", + "1869803", + "1869852", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873048", + "1873079", + "1873411", + "1874211", + "1874375", + "1874743", + "1875008", + "1875120", + "1875327", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876623", + "1876854", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879735", + "1879765", + "1879970", + "1880040", + "1880064", + "1880138", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884280", + "1884312", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889287", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1898286", + "1898544", + "1909398", + "1911112", + "1918868", + "1920496", + "1920712", + "1924494", + "1929270", + "1938214", + "1938810", + "1939432", + "1939677", + "1939680", + "1940807", + "1941377", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959682", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975733", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987578", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299368", + "4302252", + "4302268", + "4522322", + "4522795", + "4522922", + "4522933", + "4523522", + "4523556", + "4523560", + "4523564", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525068", + "4525078", + "4525177", + "4525189", + "4525266", + "4525273", + "4525354", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4526048", + "4527339", + "4527342", + "4527972", + "4528539", + "4528593", + "4528658", + "4528692", + "4528694", + "4529064", + "4529248", + "4529566", + "4529630", + "4529931", + "4530151", + "4530424", + "4530632", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532088", + "4532095", + "4532097", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532408", + "4532412", + "4532471", + "4532500", + "4532508", + "4532516", + "4532532", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533128", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534245", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534779", + "4534782", + "4534872", + "4534909", + "4534914", + "4535827", + "5101394", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103176", + "5103451", + "5103736", + "5104442", + "5104558", + "5104759", + "5104891", + "5104903", + "5105339", + "5108761", + "5109506", + "5109523", + "5109599", + "5109614", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5119808", + "5120396", + "5120675", + "5122037", + "5122293", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5130682", + "5131910", + "5134098", + "5135513", + "5141493", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145269", + "5145409", + "5145870", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146677", + "5146837", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149768", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5770913", + "5770942", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7869346", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7981386", + "7988195", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8073674", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8262357", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8823068", + "8858121", + "8869900", + "8890502", + "9092175", + "9101339", + "9174377", + "9242559", + "9262981", + "9414984", + "9473121", + "9530977", + "9674732", + "9734171", + "9782192", + "9812211" + ], + "class_count": 1221, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.6852063621352951, + "precision": 0.2742104381019442, + "recall": 0.6852063621352951, + "f1": 0.2575380033854696 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749869", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751368", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787697", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841158", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848426", + "1848596", + "1848610", + "1848657", + "1848690", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851220", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877368", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525476", + "4525487", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528539", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531147", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532088", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536292", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104759", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109498", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149315", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1309, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7124755690715492, + "precision": 0.26342704573380454, + "recall": 0.7124755690715492, + "f1": 0.25428952382168746 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749869", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751368", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787697", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841158", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848426", + "1848596", + "1848610", + "1848636", + "1848657", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851220", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877368", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525476", + "4525487", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528539", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531147", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532088", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536292", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104759", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109498", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149315", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1309, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7123551106111988, + "precision": 0.26343028004895147, + "recall": 0.7123551106111988, + "f1": 0.25432102340018486 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10450501", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", + "1737491", + "1737524", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", + "1739833", + "1739922", + "1739999", + "1740005", + "1740069", + "1740116", + "1740183", + "1740185", + "1740374", + "1740482", + "1740623", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", + "1741752", + "1741756", + "1742142", + "1742263", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743775", + "1743828", + "1743862", + "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744808", + "1744810", + "1745079", + "1745558", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", + "1751368", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766410", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835433", + "1835456", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841158", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846111", + "1846159", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851220", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860709", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", + "1862580", + "1862837", + "1864161", + "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1873783", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1876329", + "1876409", + "1876542", + "1877368", + "1877941", + "1877988", + "1878470", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879735", + "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", + "1881151", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957718", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1970213", + "1970227", + "1970284", + "1971858", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522911", + "4522916", + "4522922", + "4523522", + "4523560", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524890", + "4525078", + "4525189", + "4525354", + "4525420", + "4525425", + "4525487", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531145", + "4531147", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533952", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534762", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536292", + "4536483", + "5101678", + "5101745", + "5102951", + "5102982", + "5103066", + "5103121", + "5103451", + "5103736", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5141501", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149315", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5769709", + "5770913", + "5770942", + "5771230", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8273859", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1197, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7394942213066358, + "precision": 0.3045154257441184, + "recall": 0.7394942213066358, + "f1": 0.29354423320755 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10450501", + "10580256", + "10638451", + "10844862", + "10915497", + "10982815", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "12318291", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736601", + "1736898", + "1737491", + "1737524", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738794", + "1738839", + "1739272", + "1739290", + "1739381", + "1739449", + "1739451", + "1739461", + "1739819", + "1739833", + "1739922", + "1739999", + "1740005", + "1740069", + "1740116", + "1740183", + "1740185", + "1740374", + "1740482", + "1740623", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741667", + "1741752", + "1741756", + "1742142", + "1742263", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743775", + "1743828", + "1743862", + "1744071", + "1744136", + "1744180", + "1744224", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744808", + "1744810", + "1745079", + "1745558", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748942", + "1749070", + "1749164", + "1749596", + "1749948", + "1751051", + "1751207", + "1751216", + "1751299", + "1751368", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759661", + "1759667", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766410", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789076", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830152", + "1830241", + "1830372", + "1830380", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835433", + "1835456", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1837515", + "1838911", + "1838969", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840478", + "1840483", + "1840555", + "1841158", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846111", + "1846159", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848610", + "1848657", + "1848864", + "1848920", + "1849273", + "1849284", + "1849294", + "1849477", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851220", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1856005", + "1856289", + "1856595", + "1856620", + "1856691", + "1856701", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858775", + "1859305", + "1860628", + "1860688", + "1860709", + "1860768", + "1860852", + "1860983", + "1860987", + "1861395", + "1861644", + "1862578", + "1862580", + "1862837", + "1864161", + "1864377", + "1864652", + "1867820", + "1869478", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1873783", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1876329", + "1876409", + "1876542", + "1877368", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879735", + "1879970", + "1880062", + "1880064", + "1880104", + "1880139", + "1880140", + "1880143", + "1881151", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1892242", + "1902533", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940744", + "1940807", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957718", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1970213", + "1970227", + "1970284", + "1971858", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522922", + "4523522", + "4523560", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524890", + "4525078", + "4525189", + "4525354", + "4525420", + "4525425", + "4525487", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4525610", + "4525859", + "4526048", + "4527339", + "4527342", + "4527957", + "4527972", + "4528692", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531145", + "4531147", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533952", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534762", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536292", + "4536483", + "5101678", + "5101745", + "5102951", + "5102982", + "5103066", + "5103121", + "5103451", + "5103736", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5141501", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5147834", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149315", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5769709", + "5770913", + "5770942", + "5771230", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8292872", + "8313553", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8869900", + "8890502", + "9101339", + "9242559", + "9262981", + "9359597", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1193, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7398002960321982, + "precision": 0.30560509035336597, + "recall": 0.7398002960321982, + "f1": 0.2944363607025529 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986052", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 332, + "truth_images_in_retained_classes": 49965, + "accepted_predictions_in_retained_classes": 43906, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7804519827952229, + "precision": 0.8132613221595489, + "recall": 0.7804519827952229, + "f1": 0.767750987431369 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 49771, + "accepted_predictions_in_retained_classes": 43793, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7893403332535088, + "precision": 0.8209378703317131, + "recall": 0.7893403332535088, + "f1": 0.7761503968624853 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1781694", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 333, + "truth_images_in_retained_classes": 50028, + "accepted_predictions_in_retained_classes": 44632, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7955403347220553, + "precision": 0.8148667864853998, + "recall": 0.7955403347220553, + "f1": 0.7836676630026933 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 49771, + "accepted_predictions_in_retained_classes": 44546, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8075564989092358, + "precision": 0.8206160162011501, + "recall": 0.8075564989092358, + "f1": 0.7934690725468392 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1781694", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 333, + "truth_images_in_retained_classes": 50028, + "accepted_predictions_in_retained_classes": 44645, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7959521085469712, + "precision": 0.8149813536593272, + "recall": 0.7959521085469712, + "f1": 0.7838792936205538 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 49771, + "accepted_predictions_in_retained_classes": 44559, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8079810211497839, + "precision": 0.8207341303464063, + "recall": 0.8079810211497839, + "f1": 0.7936872551962122 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1781694", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 335, + "truth_images_in_retained_classes": 49924, + "accepted_predictions_in_retained_classes": 45758, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8233452008601031, + "precision": 0.8361083038702228, + "recall": 0.8233452008601031, + "f1": 0.8111919297581796 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 49771, + "accepted_predictions_in_retained_classes": 45653, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8362560793198487, + "precision": 0.8424552838647043, + "recall": 0.8362560793198487, + "f1": 0.8212732179011305 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1781694", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118892", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7752082", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 335, + "truth_images_in_retained_classes": 49924, + "accepted_predictions_in_retained_classes": 45764, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8235925081132986, + "precision": 0.8360886919210944, + "recall": 0.8235925081132986, + "f1": 0.8112089254223764 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1743775", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884212", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532357", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 323, + "truth_images_in_retained_classes": 49771, + "accepted_predictions_in_retained_classes": 45659, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.836512574458612, + "precision": 0.8424349432982707, + "recall": 0.836512574458612, + "f1": 0.8212908449831922 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 281, + "truth_images_in_retained_classes": 48752, + "accepted_predictions_in_retained_classes": 43179, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8015233937799323, + "precision": 0.8489418368710229, + "recall": 0.8015233937799323, + "f1": 0.8047301032307933 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 276, + "truth_images_in_retained_classes": 48569, + "accepted_predictions_in_retained_classes": 43085, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8036358015042979, + "precision": 0.8491944063795561, + "recall": 0.8036358015042979, + "f1": 0.8060694564714563 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 49474, + "accepted_predictions_in_retained_classes": 44016, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8164188665527266, + "precision": 0.8504866560247468, + "recall": 0.8164188665527266, + "f1": 0.8174147604399674 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 276, + "truth_images_in_retained_classes": 48569, + "accepted_predictions_in_retained_classes": 43509, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8231034842915722, + "precision": 0.852620913533206, + "recall": 0.8231034842915722, + "f1": 0.8225526620461225 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 49474, + "accepted_predictions_in_retained_classes": 44028, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8168949800377856, + "precision": 0.8506207534510775, + "recall": 0.8168949800377856, + "f1": 0.8176623311125982 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 276, + "truth_images_in_retained_classes": 48569, + "accepted_predictions_in_retained_classes": 43521, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8236002983629384, + "precision": 0.8527608412824206, + "recall": 0.8236002983629384, + "f1": 0.8228109966610416 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 290, + "truth_images_in_retained_classes": 49491, + "accepted_predictions_in_retained_classes": 45165, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8448147812478007, + "precision": 0.8686351477620251, + "recall": 0.8448147812478007, + "f1": 0.8430944324410347 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 276, + "truth_images_in_retained_classes": 48569, + "accepted_predictions_in_retained_classes": 44545, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8500633958998807, + "precision": 0.8701711239397353, + "recall": 0.8500633958998807, + "f1": 0.8468123522603528 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 290, + "truth_images_in_retained_classes": 49491, + "accepted_predictions_in_retained_classes": 45171, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8451004637644232, + "precision": 0.8686124925794111, + "recall": 0.8451004637644232, + "f1": 0.843114065363469 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 276, + "truth_images_in_retained_classes": 48569, + "accepted_predictions_in_retained_classes": 44551, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8503635695586504, + "precision": 0.8701473195811916, + "recall": 0.8503635695586504, + "f1": 0.8468329810556643 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1778074", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 227, + "truth_images_in_retained_classes": 47718, + "accepted_predictions_in_retained_classes": 42116, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104473759200309, + "precision": 0.8578518423290517, + "recall": 0.8104473759200309, + "f1": 0.8156127676262825 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 221, + "truth_images_in_retained_classes": 47442, + "accepted_predictions_in_retained_classes": 41948, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8155338436417237, + "precision": 0.8608672123211786, + "recall": 0.8155338436417237, + "f1": 0.8199232466589719 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 238, + "truth_images_in_retained_classes": 48599, + "accepted_predictions_in_retained_classes": 43096, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8228758500302792, + "precision": 0.8709627588948129, + "recall": 0.8228758500302792, + "f1": 0.8324260662998175 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 221, + "truth_images_in_retained_classes": 47442, + "accepted_predictions_in_retained_classes": 42352, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8343864499962018, + "precision": 0.8780167850519418, + "recall": 0.8343864499962018, + "f1": 0.8425720959185982 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 238, + "truth_images_in_retained_classes": 48599, + "accepted_predictions_in_retained_classes": 43106, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8232769173287262, + "precision": 0.871128430219949, + "recall": 0.8232769173287262, + "f1": 0.8326386862169237 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 221, + "truth_images_in_retained_classes": 47442, + "accepted_predictions_in_retained_classes": 42364, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8348183686252988, + "precision": 0.8779740426087514, + "recall": 0.8348183686252988, + "f1": 0.8426753449878298 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782672", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 238, + "truth_images_in_retained_classes": 48571, + "accepted_predictions_in_retained_classes": 44234, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8532633086198458, + "precision": 0.8867066977362028, + "recall": 0.8532633086198458, + "f1": 0.8577020245523158 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 221, + "truth_images_in_retained_classes": 47442, + "accepted_predictions_in_retained_classes": 43414, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8607764714822107, + "precision": 0.8906618013155634, + "recall": 0.8607764714822107, + "f1": 0.8639878535451234 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782672", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 238, + "truth_images_in_retained_classes": 48571, + "accepted_predictions_in_retained_classes": 44235, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8533112891172909, + "precision": 0.8867157309673706, + "recall": 0.8533112891172909, + "f1": 0.8577134774255251 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 221, + "truth_images_in_retained_classes": 47442, + "accepted_predictions_in_retained_classes": 43415, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8608281427871516, + "precision": 0.8906715294106673, + "recall": 0.8608281427871516, + "f1": 0.8640001874085796 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1731584", + "1731817", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736409", + "1736444", + "1736460", + "1736725", + "1736895", + "1737021", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1739000", + "1739060", + "1739418", + "1739446", + "1739724", + "1740664", + "1741141", + "1741338", + "1741540", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743723", + "1743762", + "1743811", + "1744049", + "1744133", + "1744237", + "1744240", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746399", + "1746437", + "1746600", + "1746749", + "1747044", + "1747242", + "1747949", + "1748277", + "1748799", + "1748889", + "1749137", + "1749712", + "1749732", + "1750339", + "1750759", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1762605", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778574", + "1778695", + "1779429", + "1779630", + "1779682", + "1780139", + "1780300", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1786930", + "1787061", + "1787107", + "1787399", + "1787522", + "1788466", + "1788764", + "1788916", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790601", + "1790683", + "1790794", + "1791382", + "1791874", + "1792055", + "1792280", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795443", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830630", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837168", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842184", + "1842261", + "1843897", + "1845266", + "1845958", + "1846094", + "1846907", + "1847591", + "1847952", + "1848192", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849514", + "1849628", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851049", + "1851496", + "1852133", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853431", + "1853583", + "1853873", + "1854160", + "1854326", + "1854459", + "1854789", + "1855383", + "1856286", + "1856382", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1859284", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1861796", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1869438", + "1869760", + "1869851", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873021", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874624", + "1874958", + "1875103", + "1875317", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876613", + "1876846", + "1877650", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888455", + "1888578", + "1888698", + "1889286", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1898261", + "1898474", + "1906451", + "1909334", + "1911078", + "1912583", + "1918607", + "1920481", + "1920704", + "1929153", + "1938213", + "1938238", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1944007", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1956900", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959668", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987555", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256568", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5104758", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5119806", + "5123346", + "5123443", + "5130576", + "5135400", + "5144176", + "5146397", + "7236046", + "7236059", + "7236098", + "7354470", + "7384515", + "7396883", + "7494486", + "7510496", + "7721234", + "7739898", + "7742506", + "7786896", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875134", + "8875890", + "8903953", + "8921795", + "9005880", + "9021546", + "9061491", + "9065472", + "9073940", + "9077410", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793", + "9605252" + ], + "class_count": 698, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7890053947525617, + "precision": 0.3188818859364664, + "recall": 0.7890053947525617, + "f1": 0.3169285074452808 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848374", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1986953", + "1987269", + "1987509", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5104758", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 716, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053483819748223, + "precision": 0.3189366087734117, + "recall": 0.8053483819748223, + "f1": 0.3204124099108477 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848374", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1986953", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5104758", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 714, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.805001260196705, + "precision": 0.3188298295664697, + "recall": 0.805001260196705, + "f1": 0.3212342539755369 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740515", + "1740664", + "1741141", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769051", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1839258", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847952", + "1848217", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851212", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1872346", + "1872845", + "1873074", + "1873408", + "1873775", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1962165", + "1962369", + "1962632", + "1962857", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978607", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1986953", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7543161", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 684, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8303908427754559, + "precision": 0.3505904633143813, + "recall": 0.8303908427754559, + "f1": 0.3532089993367619 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735631", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740515", + "1740664", + "1741141", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1750759", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769051", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830355", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1839258", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847952", + "1848217", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849474", + "1849663", + "1849983", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851212", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853721", + "1853873", + "1854160", + "1854326", + "1854459", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859082", + "1860613", + "1860657", + "1860720", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1867343", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1872346", + "1872845", + "1873074", + "1873408", + "1873775", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1895130", + "1902519", + "1906451", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940133", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1949704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1962165", + "1962369", + "1962632", + "1962857", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978607", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1986953", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7543161", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 683, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8304111700220072, + "precision": 0.35093141039439896, + "recall": 0.8304111700220072, + "f1": 0.35360877971608085 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 249, + "truth_images_in_retained_classes": 58447, + "accepted_predictions_in_retained_classes": 50027, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8219266550615453, + "precision": 0.8127690860219302, + "recall": 0.8219266550615453, + "f1": 0.7906389901996281 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 248, + "truth_images_in_retained_classes": 58439, + "accepted_predictions_in_retained_classes": 50013, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8227207141545352, + "precision": 0.814606288557733, + "recall": 0.8227207141545352, + "f1": 0.7919942060692015 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 249, + "truth_images_in_retained_classes": 58445, + "accepted_predictions_in_retained_classes": 49813, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8371687635869385, + "precision": 0.8073826948942792, + "recall": 0.8371687635869385, + "f1": 0.7987426899052846 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 248, + "truth_images_in_retained_classes": 58439, + "accepted_predictions_in_retained_classes": 49806, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8385283150530148, + "precision": 0.8089101596778391, + "recall": 0.8385283150530148, + "f1": 0.8001023843745056 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 249, + "truth_images_in_retained_classes": 58445, + "accepted_predictions_in_retained_classes": 49815, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8367198751831082, + "precision": 0.8068419286188611, + "recall": 0.8367198751831082, + "f1": 0.7982979243110807 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 248, + "truth_images_in_retained_classes": 58439, + "accepted_predictions_in_retained_classes": 49808, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8380776166152981, + "precision": 0.8083672128932459, + "recall": 0.8380776166152981, + "f1": 0.7996558253706477 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 250, + "truth_images_in_retained_classes": 58457, + "accepted_predictions_in_retained_classes": 50573, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8627747780438068, + "precision": 0.8368451276595528, + "recall": 0.8627747780438068, + "f1": 0.8294985728477161 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 248, + "truth_images_in_retained_classes": 58439, + "accepted_predictions_in_retained_classes": 50561, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8647931230280309, + "precision": 0.8362014055707858, + "recall": 0.8647931230280309, + "f1": 0.8302836995872716 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1781683", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 250, + "truth_images_in_retained_classes": 58457, + "accepted_predictions_in_retained_classes": 50578, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8628009595373644, + "precision": 0.8366096008903584, + "recall": 0.8628009595373644, + "f1": 0.8293435494948899 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1743762", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1871384", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5114254", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 248, + "truth_images_in_retained_classes": 58439, + "accepted_predictions_in_retained_classes": 50566, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8648195156626658, + "precision": 0.8359639793921624, + "recall": 0.8648195156626658, + "f1": 0.830127426046116 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 225, + "truth_images_in_retained_classes": 58236, + "accepted_predictions_in_retained_classes": 49619, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8252783249476032, + "precision": 0.8350504050502193, + "recall": 0.8252783249476032, + "f1": 0.808013110047685 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 58195, + "accepted_predictions_in_retained_classes": 49570, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.824807504370962, + "precision": 0.83600915965762, + "recall": 0.824807504370962, + "f1": 0.8081287197161677 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 229, + "truth_images_in_retained_classes": 58287, + "accepted_predictions_in_retained_classes": 49484, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8393961784927966, + "precision": 0.8310502469637352, + "recall": 0.8393961784927966, + "f1": 0.8162838077724298 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 58195, + "accepted_predictions_in_retained_classes": 49396, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435690095177734, + "precision": 0.8357508875265129, + "recall": 0.8435690095177734, + "f1": 0.8203775192436712 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 229, + "truth_images_in_retained_classes": 58287, + "accepted_predictions_in_retained_classes": 49488, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8394539373899418, + "precision": 0.8304974781117134, + "recall": 0.8394539373899418, + "f1": 0.8159503793944154 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 58195, + "accepted_predictions_in_retained_classes": 49400, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8436285896414052, + "precision": 0.8351806890260037, + "recall": 0.8436285896414052, + "f1": 0.820033577358242 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 227, + "truth_images_in_retained_classes": 58252, + "accepted_predictions_in_retained_classes": 50242, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.872971488300815, + "precision": 0.8617786609173839, + "recall": 0.872971488300815, + "f1": 0.8511810260087067 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 58195, + "accepted_predictions_in_retained_classes": 50177, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8708612365358183, + "precision": 0.8620785961078308, + "recall": 0.8708612365358183, + "f1": 0.8500270973391464 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 227, + "truth_images_in_retained_classes": 58252, + "accepted_predictions_in_retained_classes": 50248, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8730003225448212, + "precision": 0.8614328920388118, + "recall": 0.8730003225448212, + "f1": 0.8509289670806535 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 58195, + "accepted_predictions_in_retained_classes": 50183, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8708907201997347, + "precision": 0.8617250396419035, + "recall": 0.8708907201997347, + "f1": 0.849769361408209 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 186, + "truth_images_in_retained_classes": 57097, + "accepted_predictions_in_retained_classes": 48695, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8426420260480435, + "precision": 0.8630959679849289, + "recall": 0.8426420260480435, + "f1": 0.8367937129642364 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 182, + "truth_images_in_retained_classes": 56984, + "accepted_predictions_in_retained_classes": 48586, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8445786450365945, + "precision": 0.8643626549359886, + "recall": 0.8445786450365945, + "f1": 0.8381676091588163 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 190, + "truth_images_in_retained_classes": 57639, + "accepted_predictions_in_retained_classes": 48638, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8508484895699264, + "precision": 0.8654633778215377, + "recall": 0.8508484895699264, + "f1": 0.8430006758307964 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 182, + "truth_images_in_retained_classes": 56984, + "accepted_predictions_in_retained_classes": 48209, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8568681861269765, + "precision": 0.868294149775848, + "recall": 0.8568681861269765, + "f1": 0.8478182354988681 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 190, + "truth_images_in_retained_classes": 57639, + "accepted_predictions_in_retained_classes": 48640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8506988059950821, + "precision": 0.865078476895734, + "recall": 0.8506988059950821, + "f1": 0.8426656582962279 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 182, + "truth_images_in_retained_classes": 56984, + "accepted_predictions_in_retained_classes": 48211, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8567119230543369, + "precision": 0.8678923301280309, + "recall": 0.8567119230543369, + "f1": 0.8474684919188242 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 191, + "truth_images_in_retained_classes": 57679, + "accepted_predictions_in_retained_classes": 49466, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8757982151851574, + "precision": 0.8874148819339942, + "recall": 0.8757982151851574, + "f1": 0.8682678780741216 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 182, + "truth_images_in_retained_classes": 56984, + "accepted_predictions_in_retained_classes": 48969, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8814254761776787, + "precision": 0.889035213147546, + "recall": 0.8814254761776787, + "f1": 0.8724320940695854 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 191, + "truth_images_in_retained_classes": 57679, + "accepted_predictions_in_retained_classes": 49469, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8758324841557825, + "precision": 0.8869192117831547, + "recall": 0.8758324841557825, + "f1": 0.8679852506887044 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 182, + "truth_images_in_retained_classes": 56984, + "accepted_predictions_in_retained_classes": 48972, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8814614397677304, + "precision": 0.8885150318354011, + "recall": 0.8814614397677304, + "f1": 0.8721354906046694 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ], + "class_count": 64, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8440271040813301, + "precision": 0.2600743589223739, + "recall": 0.8440271040813301, + "f1": 0.2691037692533918 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8105098078966045, + "precision": 0.27535126159560075, + "recall": 0.8105098078966045, + "f1": 0.28044633693466975 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106416408810809, + "precision": 0.27563597431734277, + "recall": 0.8106416408810809, + "f1": 0.2807691734951072 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.857176291043506, + "precision": 0.28541955682278985, + "recall": 0.857176291043506, + "f1": 0.29672977205202156 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5338", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 58640, + "accepted_predictions_in_retained_classes": 58640, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8573137738657032, + "precision": 0.2853888893805401, + "recall": 0.8573137738657032, + "f1": 0.2967466662087087 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 58035, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8706311696935296, + "precision": 0.8042967720810082, + "recall": 0.8706311696935296, + "f1": 0.8222431727219648 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 58035, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8706311696935296, + "precision": 0.8042967720810082, + "recall": 0.8706311696935296, + "f1": 0.8222431727219648 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57625, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570862790810952, + "precision": 0.7593871181201356, + "recall": 0.8570862790810952, + "f1": 0.7830056774706758 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57625, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570862790810952, + "precision": 0.7593871181201356, + "recall": 0.8570862790810952, + "f1": 0.7830056774706758 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57629, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572378870132431, + "precision": 0.7602412562853618, + "recall": 0.8572378870132431, + "f1": 0.7839741871519881 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57629, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572378870132431, + "precision": 0.7602412562853618, + "recall": 0.8572378870132431, + "f1": 0.7839741871519881 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8857527347000319, + "precision": 0.7937586704683698, + "recall": 0.8857527347000319, + "f1": 0.8201893161560646 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8857527347000319, + "precision": 0.7937586704683698, + "recall": 0.8857527347000319, + "f1": 0.8201893161560646 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8859108399455587, + "precision": 0.7936666681416203, + "recall": 0.8859108399455587, + "f1": 0.8202399986261261 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8859108399455587, + "precision": 0.7936666681416203, + "recall": 0.8859108399455587, + "f1": 0.8202399986261261 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 58035, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8706311696935296, + "precision": 0.8042967720810082, + "recall": 0.8706311696935296, + "f1": 0.8222431727219648 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 58035, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8706311696935296, + "precision": 0.8042967720810082, + "recall": 0.8706311696935296, + "f1": 0.8222431727219648 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57625, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570862790810952, + "precision": 0.7593871181201356, + "recall": 0.8570862790810952, + "f1": 0.7830056774706758 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57625, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570862790810952, + "precision": 0.7593871181201356, + "recall": 0.8570862790810952, + "f1": 0.7830056774706758 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57629, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572378870132431, + "precision": 0.7602412562853618, + "recall": 0.8572378870132431, + "f1": 0.7839741871519881 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57629, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572378870132431, + "precision": 0.7602412562853618, + "recall": 0.8572378870132431, + "f1": 0.7839741871519881 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8857527347000319, + "precision": 0.7937586704683698, + "recall": 0.8857527347000319, + "f1": 0.8201893161560646 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8857527347000319, + "precision": 0.7937586704683698, + "recall": 0.8857527347000319, + "f1": 0.8201893161560646 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8859108399455587, + "precision": 0.7936666681416203, + "recall": 0.8859108399455587, + "f1": 0.8202399986261261 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 58635, + "accepted_predictions_in_retained_classes": 57922, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8859108399455587, + "precision": 0.7936666681416203, + "recall": 0.8859108399455587, + "f1": 0.8202399986261261 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57945, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8805744853537323, + "precision": 0.8603318425866534, + "recall": 0.8805744853537323, + "f1": 0.8641945097882205 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57945, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8805744853537323, + "precision": 0.8603318425866534, + "recall": 0.8805744853537323, + "f1": 0.8641945097882205 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57498, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8772443619441458, + "precision": 0.8454930600394824, + "recall": 0.8772443619441458, + "f1": 0.8513978587998544 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57498, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8772443619441458, + "precision": 0.8454930600394824, + "recall": 0.8772443619441458, + "f1": 0.8513978587998544 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57505, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8774227242172608, + "precision": 0.8454826219027971, + "recall": 0.8774227242172608, + "f1": 0.8514947560248236 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57505, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8774227242172608, + "precision": 0.8454826219027971, + "recall": 0.8774227242172608, + "f1": 0.8514947560248236 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57813, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903126466593875, + "precision": 0.8742034082733955, + "recall": 0.903126466593875, + "f1": 0.8819814890011932 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57813, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903126466593875, + "precision": 0.8742034082733955, + "recall": 0.903126466593875, + "f1": 0.8819814890011932 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57813, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903312472765083, + "precision": 0.8740951702419255, + "recall": 0.903312472765083, + "f1": 0.8820411154365596 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 58591, + "accepted_predictions_in_retained_classes": 57813, + "report_images": 58640, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903312472765083, + "precision": 0.8740951702419255, + "recall": 0.903312472765083, + "f1": 0.8820411154365596 + } + } + ] +} diff --git a/docs/assets/mambo-defaults-tail.svg b/docs/assets/mambo-defaults-tail.svg new file mode 100644 index 0000000..b51f6f2 --- /dev/null +++ b/docs/assets/mambo-defaults-tail.svg @@ -0,0 +1,1670 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + >5: 323 classes; 8,869 truth images outside (15.12%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + >5: 323 classes; 8,869 truth images outside (15.12%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + >5: 248 classes; 201 truth images outside (0.34%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + >5: 248 classes; 201 truth images outside (0.34%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + >5: 20 classes; 5 truth images outside (0.01%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + >5: 20 classes; 5 truth images outside (0.01%) + + + + Full support and tail-truncated metrics · legacy northern Europe + + + 58,640 Flemming images; confidence threshold 0; pinned mini_metrics. TTA: padded scale. + No evaluation rows removed: FP/FN remain; only the macro averaging domain changes. + Outside counts refer to truth classes, not confidence rejection. Truncation excludes predicted-only classes. + Descriptive comparison; TTA was selected on a subset of the same dataset. + + + + + + + + + + + + + + + Full support (>−1; per-model classes) + + + + + + + + + + + Support >5 in truth AND predictions (common classes) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 3b58be8..f31cb25 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -90,6 +90,32 @@ falls from 84.40% to about 81.05%. TTA raises family macro accuracy to 85.72–8 and improves species and genus results as well. Species macro-F1 is slightly lower than V2 without TTA and higher with TTA. +### Tail-truncated comparison + +The [deployment README](../deployment/README.md#release-comparison) pairs these full-support +results with support >5 metrics on the same 58,640 images at confidence threshold zero. +The truncated average uses classes with more than five truth instances and predictions +in every pipeline. No evaluation rows are removed; per-class false positives and false +negatives remain intact. Predicted-only classes disappear from the average. + +![Full-support and support >5 macro metrics](assets/mambo-defaults-tail.svg) + +Support >5 excludes the following images’ **truth classes from the macro average**. +No image rows are discarded: their false-positive/false-negative contributions to +retained classes still count. Predicted-only classes are excluded, so keep the +full-support baseline alongside the truncated results. Confidence coverage remains +100% at threshold zero; these percentages are not rejection rates. + +| Rank | Shared classes retained | Images with truth outside retained classes | Images with predictions outside (range across pipelines) | +|---|---:|---:|---:| +| Species | 323 | 8,869 / 15.12% | 12,981–14,847 / 22.14%–25.32% | +| Genus | 248 | 201 / 0.34% | 8,074–8,834 / 13.77%–15.06% | +| Family | 20 | 5 / 0.01% | 605–1,015 / 1.03%–1.73% | + +The [full-data metric export](assets/mambo-defaults-tail.csv) also includes +macro precision/recall and per-model class sets. The [tail-metric methodology](mambo-tail-metrics.md) +explains the calculation; its threshold-study tables use a different reporting partition. + ### Regional filtering effect ![Paired regional gains across pipelines](assets/mambo-defaults-regional-effect.svg) @@ -223,3 +249,13 @@ is end-to-end; the benchmark's separately labelled prepared-input diagnostic is single-view even when TTA is enabled, and is not used in these comparisons. The [compact evidence](assets/mambo-defaults-comparison.json) includes source hashes and regenerates the figures with `defaults_report --data FILE --output DIRECTORY`. + +Regenerate the full-data tail comparison from retained predictions (no inference): + +```sh +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.tail_report \ + --full-dataset --study docs/assets/mambo-threshold-comparison.json \ + --output /tmp/mambo-tail-full +python -m dev.releases.mambo_v3.tail_charts \ + --data /tmp/mambo-tail-full/mambo-tail-metrics.json --output /tmp/mambo-tail-full +``` From 9797e2ad62627d279526b84ef260afbc499430d1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 13:32:14 +0200 Subject: [PATCH 044/221] fix: show thresholded and unthresholded deployment comparisons together --- deployment/README.md | 157 +- dev/releases/mambo_v3/tail_charts.py | 73 +- docs/assets/mambo-threshold-tail.svg | 3036 ++++++++++++++++++++++++++ docs/mambo-deployment-defaults.md | 40 +- 4 files changed, 3222 insertions(+), 84 deletions(-) create mode 100644 docs/assets/mambo-threshold-tail.svg diff --git a/deployment/README.md b/deployment/README.md index 2c97404..cd1c6fc 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -119,59 +119,90 @@ and custom image transforms through the same outer interface. ## Release comparison -Results below use all **58,640 Flemming images / 522 truth species**, including -species outside the selected vocabulary. All predictive metrics use pinned -`mini_metrics`, threshold zero and no threshold optimization. The main table uses -the recommended northern-Europe legacy list (`north_europe`), shared by V2 and V3. -TTA means the enabled padded-scale default. V3 quality uses automatic GPU precision; -CPU timings use FP32. Quality cells show **full support → support >5**, retaining -classes with more than five truth instances and predictions in **every pipeline**. -Full-support metrics retain each model’s complete class domain. - -| Pipeline | Species macro accuracy (full → >5) | Species macro-F1 (full → >5) | CPU B1 | GPU B1 | GPU B8 | GPU B32 | -|---|---:|---:|---:|---:|---:|---:| -| MAMBO v2 | 68.52% → 78.93% | 0.2575 → 0.7762 | 1.26 | 45.2 | 44.8 | 83.5 | -| V3 PyTorch | 71.25% → 80.76% | 0.2543 → 0.7935 | 5.70 | 29.8 | 126.7 | 136.2 | -| V3 ONNX | 71.24% → 80.80% | 0.2543 → 0.7937 | 10.08 | 46.7 | 114.1 | 111.3 | -| V3 PyTorch + TTA | 73.95% → 83.63% | 0.2935 → 0.8213 | 2.29 | 8.5 | 42.7 | 50.4 | -| V3 ONNX + TTA | 73.98% → 83.65% | 0.2944 → 0.8213 | 3.56 | 16.8 | 41.7 | 39.4 | - -Speed is **images per second**, including decoding through completed CPU results, -on an i7-12800H / RTX 3080 Ti Laptop. Three fresh-process trials use the same image -bank and four preparation/runtime CPU threads; V2 and ordinary V3 reuse retained -measurements. V2 CPU uses its documented float32 input adapter. - -Northern Europe, **genus and family**, on the same images at threshold zero: - -| Pipeline | Genus macro accuracy (full → >5) | Genus macro-F1 (full → >5) | Family macro accuracy (full → >5) | Family macro-F1 (full → >5) | -|---|---:|---:|---:|---:| -| MAMBO v2 | 78.90% → 82.27% | 0.3169 → 0.7920 | 84.40% → 87.06% | 0.2691 → 0.8222 | -| V3 PyTorch | 80.53% → 83.85% | 0.3204 → 0.8001 | 81.05% → 85.71% | 0.2804 → 0.7830 | -| V3 ONNX | 80.50% → 83.81% | 0.3212 → 0.7997 | 81.06% → 85.72% | 0.2808 → 0.7840 | -| V3 PyTorch + TTA | 83.04% → 86.48% | 0.3532 → 0.8303 | 85.72% → 88.58% | 0.2967 → 0.8202 | -| V3 ONNX + TTA | 83.04% → 86.48% | 0.3536 → 0.8301 | 85.73% → 88.59% | 0.2967 → 0.8202 | - -Ordinary V3 improves genus macro accuracy but reduces family macro accuracy -versus V2 (84.40% → about 81.05%). TTA raises these to about **83.04% genus / -85.72–85.73% family**, exceeding V2 at both ranks. - -Support >5 excludes the following images’ **truth classes from the macro average**. -No image rows are discarded: their false-positive/false-negative contributions to -retained classes still count. Predicted-only classes are excluded, so keep the -full-support baseline alongside the truncated results. Confidence coverage remains -100% at threshold zero; these percentages are not rejection rates. - -| Rank | Shared classes retained | Images with truth outside retained classes | Images with predictions outside (range across pipelines) | -|---|---:|---:|---:| -| Species | 323 | 8,869 / 15.12% | 12,981–14,847 / 22.14%–25.32% | -| Genus | 248 | 201 / 0.34% | 8,074–8,834 / 13.77%–15.06% | -| Family | 20 | 5 / 0.01% | 605–1,015 / 1.03%–1.73% | - -The [full-data metric export](../docs/assets/mambo-defaults-tail.csv) also includes -macro precision/recall and per-model class sets. The [tail-metric methodology](../docs/mambo-tail-metrics.md) -explains the calculation; its threshold-study tables use a different reporting partition. - -![Full-support and support >5 macro metrics at all three ranks](../docs/assets/mambo-defaults-tail.svg) +Results use the **same 52,788 Flemming reporting images** for both confidence +settings, including out-of-vocabulary truth. Calibrated thresholds were fitted on +5,852 separate images using pinned `mini_metrics` Macro-F1, independently for each +pipeline and rank. No-threshold results use threshold zero. All comparisons use +the shared legacy `north_europe` preset; TTA is the enabled padded-scale recipe. +V3 uses automatic GPU precision. Deployment defaults remain threshold zero. + +In each metric cell, values are **full support / support >5**. Full support retains +each model’s complete class domain, including predicted-only classes. Support >5 +retains classes with more than five truth instances and **accepted predictions in +every pipeline**, separately for each confidence setting. These class sets can differ +between settings; truncation is a change in averaging domain, not improved predictions. +Coverage is the percentage of reporting images accepted, and is identical for both +averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact. + +### Species + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 68.56% / 78.85% | 0.2620 / 0.7815 | 100.00% | +| MAMBO v2 | Calibrated | 84.65% / 95.21% | 0.4467 / 0.7799 | 69.73% | +| V3 PyTorch | None | 71.36% / 81.12% | 0.2593 / 0.8013 | 100.00% | +| V3 PyTorch | Calibrated | 86.69% / 96.35% | 0.5081 / 0.8016 | 70.81% | +| V3 ONNX | None | 71.34% / 81.17% | 0.2594 / 0.8016 | 100.00% | +| V3 ONNX | Calibrated | 86.95% / 96.43% | 0.5100 / 0.8001 | 70.45% | +| V3 PyTorch + TTA | None | 74.06% / 83.91% | 0.3001 / 0.8288 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 86.59% / 95.86% | 0.5239 / 0.8413 | 78.32% | +| V3 ONNX + TTA | None | 74.09% / 83.93% | 0.3011 / 0.8287 | 100.00% | +| V3 ONNX + TTA | Calibrated | 87.55% / 96.50% | 0.5431 / 0.8224 | 74.05% | + +### Genus + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | +| MAMBO v2 | Calibrated | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | +| V3 PyTorch | None | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | +| V3 PyTorch | Calibrated | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | +| V3 ONNX | None | 80.54% / 83.84% | 0.3245 / 0.8055 | 100.00% | +| V3 ONNX | Calibrated | 95.52% / 97.39% | 0.6043 / 0.8290 | 75.37% | +| V3 PyTorch + TTA | None | 83.13% / 86.42% | 0.3601 / 0.8342 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 96.28% / 97.71% | 0.6655 / 0.8477 | 77.73% | +| V3 ONNX + TTA | None | 83.13% / 86.43% | 0.3605 / 0.8340 | 100.00% | +| V3 ONNX + TTA | Calibrated | 96.30% / 97.74% | 0.6655 / 0.8477 | 77.69% | + +### Family + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | +| MAMBO v2 | Calibrated | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | +| V3 PyTorch | None | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | +| V3 PyTorch | Calibrated | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | +| V3 ONNX | None | 81.06% / 85.72% | 0.2809 / 0.7843 | 100.00% | +| V3 ONNX | Calibrated | 99.33% / 99.22% | 0.5816 / 0.8174 | 73.26% | +| V3 PyTorch + TTA | None | 85.79% / 88.66% | 0.2970 / 0.8211 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 99.56% / 99.49% | 0.6073 / 0.8536 | 78.74% | +| V3 ONNX + TTA | None | 85.81% / 88.68% | 0.2971 / 0.8212 | 100.00% | +| V3 ONNX + TTA | Calibrated | 99.56% / 99.49% | 0.6065 / 0.8524 | 78.47% | + +### Support retained and comparison figure + +Images whose **truth classes fall outside the truncated average** are counted below. +Predicted-only classes have zero truth images, so these counts alone do not describe +the effect on macro-F1. The final column counts accepted predictions into excluded +classes as a percentage of **all 52,788 reporting images**, not of accepted images. +These are not rejection rates, and the truth/prediction counts must not be added. + +| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) | +|---|---|---:|---:|---:| +| None | Species | 313 | 8,058 / 15.26% | 11,778–13,482 / 22.31%–25.54% | +| None | Genus | 242 | 221 / 0.42% | 7,310–8,015 / 13.85%–15.18% | +| None | Family | 20 | 5 / 0.01% | 547–897 / 1.04%–1.70% | +| Calibrated | Species | 272 | 10,010 / 18.96% | 5,786–7,490 / 10.96%–14.19% | +| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,083 / 5.10%–7.73% | +| Calibrated | Family | 19 | 18 / 0.03% | 12–36 / 0.02%–0.07% | + +![Both confidence settings, full and truncated macro metrics, and coverage](../docs/assets/mambo-threshold-tail.svg) + +The [metric export](../docs/assets/mambo-tail-metrics.csv) retains precision, recall, +all support cutoffs and per-model class sets. The [tail-metric tables](../docs/mambo-tail-metrics.md) +use this same reporting partition. The [threshold study](../docs/mambo-confidence-thresholds.md) +provides exact thresholds and P–R curves. Thresholding and truncation can change model +rankings; neither should be confused with an improvement in the underlying predictions. Regional filtering improves results on Flemming. The [single regional-effect figure](../docs/mambo-deployment-defaults.md#regional-filtering-effect) summarizes global → Europe → northern Europe across pipelines and ranks. @@ -179,6 +210,18 @@ We recommend legacy `north_europe` here: the updated list adds 222 species but no Flemming species coverage, and lowers measured accuracy/F1. It remains available as `north_europe_v3` for broader eligibility; the API default stays `europe`. +Speed remains **images per second**, measured end to end on an i7-12800H / RTX +3080 Ti Laptop, with four preparation/runtime CPU threads. Quality postprocessing +above does not alter these retained inference measurements; CPU uses FP32. + +| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +|---|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 45.2 | 44.8 | 83.5 | +| V3 PyTorch | 5.70 | 29.8 | 126.7 | 136.2 | +| V3 ONNX | 10.08 | 46.7 | 114.1 | 111.3 | +| V3 PyTorch + TTA | 2.29 | 8.5 | 42.7 | 50.4 | +| V3 ONNX + TTA | 3.56 | 16.8 | 41.7 | 39.4 | + ![CPU and GPU throughput](../docs/assets/mambo-defaults-speed.svg) The [full comparison](../docs/mambo-deployment-defaults.md) includes memory charts, @@ -188,13 +231,7 @@ training and Flemming support. The [loading study](../docs/mambo-loading-scaling explains remaining scheduling limits; `preprocess_workers` / `--preprocess-workers` tunes preparation separately from ONNX runtime `threads` and defaults to it. -Confidence rejection is a separate trade-off. The [threshold study](../docs/mambo-confidence-thresholds.md) -compares all five pipelines with Macro-F1-optimized thresholds, coverage and P–R -curves at every rank. V3 + TTA leads calibrated species/genus Macro-F1, while V2 -leads family Macro-F1; selected operating points accept roughly 70–79% of images. -Threshold-zero defaults remain unchanged. - Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. -The recipe was selected on a Flemming subset, so full-set results are descriptive, +The recipe was selected on a Flemming subset, so these results are descriptive, not independent validation. In-domain UCloud evaluation, other operating systems, and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index 144cd64..afe903a 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -1,4 +1,4 @@ -"""Plot full-data macro metrics beside common-class support >5 metrics.""" +"""Plot full and truncated macro metrics, optionally comparing confidence settings.""" import argparse import json @@ -72,9 +72,78 @@ def render(data, output): plt.close(fig) +def render_paired(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.lines import Line2D + + rows = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in data["rows"]} + if {r["report_images"] for r in data["rows"]} != {52788} or {r["scope"] for r in data["rows"]} != {"zero", "optimized"}: + raise ValueError("Expected both confidence settings on the 52,788-image reporting partition") + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-paired-tail-v1"}) + fig, axes = plt.subplots(3, 3, figsize=(16, 11), gridspec_kw={"width_ratios": [1, 1, 0.75]}) + for level, rank in enumerate(("species", "genus", "family")): + for col, metric in enumerate(("accuracy", "f1", "coverage")): + ax = axes[level, col] + for i, (model, _, color) in enumerate(SERIES): + for scope, marker, offset in (("zero", "o", -0.16), ("optimized", "s", 0.16)): + full = rows[model, scope, rank, -1, "per_model"] + tail = rows[model, scope, rank, 5, "common"] + y = i + offset + if metric == "coverage": + value = full["overall_coverage"] * 100 + ax.scatter(value, y, color=color, marker=marker, s=35) + ax.annotate(f"{value:.1f}%", (value, y), xytext=(-7, -3), textcoords="offset points", ha="right", fontsize=8) + else: + factor = 100 if metric == "accuracy" else 1 + a, b = full["metrics"][metric] * factor, tail["metrics"][metric] * factor + ax.plot([a, b], [y, y], color=color, alpha=0.4) + ax.scatter(a, y, facecolors="white", edgecolors=color, marker=marker, s=45, zorder=3) + ax.scatter(b, y, color=color, marker=marker, s=45, zorder=3) + title = {"accuracy": "Macro accuracy (%)", "f1": "Macro-F1", "coverage": "Acceptance coverage (%)"}[metric] + ax.set( + title=f"{rank.title()} · {title}", + yticks=range(5), + yticklabels=[label for _, label, _ in SERIES] if col == 0 else [], + xlim=(0, 1) if metric == "f1" else (0, 105), + ylim=(4.6, -0.6), + ) + ax.grid(axis="x", alpha=0.15) + ax.spines[["top", "right"]].set_visible(False) + handles = [] + for marker, setting in (("o", "No threshold"), ("s", "Calibrated")): + for fill, domain in (("white", "full support"), ("gray", "support >5")): + handles.append( + Line2D([], [], marker=marker, color="gray", markerfacecolor=fill, linestyle="none", label=f"{setting} · {domain}") + ) + fig.suptitle("V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe", fontsize=16) + fig.legend(handles=handles, loc="upper center", bbox_to_anchor=(0.5, 0.955), ncol=4) + fig.text( + 0.03, + 0.02, + "Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1.\n" + "Hollow → filled changes the averaging domain, not predictions. " + ">5 requires truth AND accepted-prediction support in every pipeline.\n" + "Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact.\n" + "Coverage is unchanged by class truncation. TTA: padded scale; " + "recipe selection used the same dataset, so results remain descriptive.", + fontsize=10, + ) + fig.tight_layout(rect=(0, 0.10, 1, 0.91)) + output.mkdir(parents=True, exist_ok=True) + path = output / "mambo-threshold-tail.svg" + fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-threshold-tail.png", dpi=150, bbox_inches="tight") + plt.close(fig) + + if __name__ == "__main__": parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--data", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--paired", action="store_true", help="Compare both confidence settings on the reporting partition") args = parser.parse_args() - render(json.loads(args.data.read_text()), args.output) + (render_paired if args.paired else render)(json.loads(args.data.read_text()), args.output) diff --git a/docs/assets/mambo-threshold-tail.svg b/docs/assets/mambo-threshold-tail.svg new file mode 100644 index 0000000..871fe78 --- /dev/null +++ b/docs/assets/mambo-threshold-tail.svg @@ -0,0 +1,3036 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.7% + + + 100.0% + + + 70.8% + + + 100.0% + + + 70.5% + + + 100.0% + + + 78.3% + + + 100.0% + + + 74.0% + + + Species · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.8% + + + 100.0% + + + 75.8% + + + 100.0% + + + 75.4% + + + 100.0% + + + 77.7% + + + 100.0% + + + 77.7% + + + Genus · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 77.4% + + + 100.0% + + + 73.1% + + + 100.0% + + + 73.3% + + + 100.0% + + + 78.7% + + + 100.0% + + + 78.5% + + + Family · Acceptance coverage (%) + + + + V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe + + + Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1. + Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. + Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. + Coverage is unchanged by class truncation. TTA: padded scale; recipe selection used the same dataset, so results remain descriptive. + + + + + + + + + + + + + + + No threshold · full support + + + + + + + + + + + No threshold · support >5 + + + + + + + + + + + Calibrated · full support + + + + + + + + + + + Calibrated · support >5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index f31cb25..729d44c 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -90,31 +90,20 @@ falls from 84.40% to about 81.05%. TTA raises family macro accuracy to 85.72–8 and improves species and genus results as well. Species macro-F1 is slightly lower than V2 without TTA and higher with TTA. -### Tail-truncated comparison +### Matched threshold and tail comparison -The [deployment README](../deployment/README.md#release-comparison) pairs these full-support -results with support >5 metrics on the same 58,640 images at confidence threshold zero. -The truncated average uses classes with more than five truth instances and predictions -in every pipeline. No evaluation rows are removed; per-class false positives and false -negatives remain intact. Predicted-only classes disappear from the average. +The [main deployment comparison](../deployment/README.md#release-comparison) now +shows both confidence settings, full support and support >5, with coverage and +excluded-support counts on the same **52,788 reporting images**. Thresholds use +5,852 separate calibration images. Its figures differ from the historical +58,640-image full-data tables above; do not mix their populations. -![Full-support and support >5 macro metrics](assets/mambo-defaults-tail.svg) +![Both confidence settings and averaging domains, with coverage](assets/mambo-threshold-tail.svg) -Support >5 excludes the following images’ **truth classes from the macro average**. -No image rows are discarded: their false-positive/false-negative contributions to -retained classes still count. Predicted-only classes are excluded, so keep the -full-support baseline alongside the truncated results. Confidence coverage remains -100% at threshold zero; these percentages are not rejection rates. - -| Rank | Shared classes retained | Images with truth outside retained classes | Images with predictions outside (range across pipelines) | -|---|---:|---:|---:| -| Species | 323 | 8,869 / 15.12% | 12,981–14,847 / 22.14%–25.32% | -| Genus | 248 | 201 / 0.34% | 8,074–8,834 / 13.77%–15.06% | -| Family | 20 | 5 / 0.01% | 605–1,015 / 1.03%–1.73% | - -The [full-data metric export](assets/mambo-defaults-tail.csv) also includes -macro precision/recall and per-model class sets. The [tail-metric methodology](mambo-tail-metrics.md) -explains the calculation; its threshold-study tables use a different reporting partition. +The [tail-metric tables](mambo-tail-metrics.md) and [CSV](assets/mambo-tail-metrics.csv) +provide the same reporting-partition evidence. Support >5 class sets are shared +across pipelines within each confidence setting, but can differ between settings. +Truncation changes only the macro averaging domain; all per-class FP/FN remain. ### Regional filtering effect @@ -259,3 +248,10 @@ Regenerate the full-data tail comparison from retained predictions (no inference python -m dev.releases.mambo_v3.tail_charts \ --data /tmp/mambo-tail-full/mambo-tail-metrics.json --output /tmp/mambo-tail-full ``` + +Regenerate the main matched-population figure from retained mini_metrics results: + +```sh +python -m dev.releases.mambo_v3.tail_charts --paired \ + --data docs/assets/mambo-tail-metrics.json --output /tmp/mambo-paired +``` From bb5055bd37dbaf4bb016fd9bd9727bca1ea9e476 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 13:48:38 +0200 Subject: [PATCH 045/221] docs: separate shape and fill keys in comparison legend --- dev/releases/mambo_v3/tail_charts.py | 17 +++-- docs/assets/mambo-threshold-tail.svg | 99 ++++++++++++++++------------ 2 files changed, 66 insertions(+), 50 deletions(-) diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index afe903a..95227a6 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -112,14 +112,17 @@ def render_paired(data, output): ) ax.grid(axis="x", alpha=0.15) ax.spines[["top", "right"]].set_visible(False) - handles = [] - for marker, setting in (("o", "No threshold"), ("s", "Calibrated")): - for fill, domain in (("white", "full support"), ("gray", "support >5")): - handles.append( - Line2D([], [], marker=marker, color="gray", markerfacecolor=fill, linestyle="none", label=f"{setting} · {domain}") - ) + shape_handles = [ + Line2D([], [], marker=marker, color="gray", markerfacecolor="white", linestyle="none", label=label) + for marker, label in (("o", "Unthresholded"), ("s", "Calibrated")) + ] + fill_handles = [ + Line2D([], [], marker="o", color="gray", markerfacecolor=fill, linestyle="none", label=label) + for fill, label in (("white", "Full support"), ("gray", "Truncated (support >5)")) + ] fig.suptitle("V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe", fontsize=16) - fig.legend(handles=handles, loc="upper center", bbox_to_anchor=(0.5, 0.955), ncol=4) + fig.legend(handles=shape_handles, title="Shape = confidence setting", loc="upper center", bbox_to_anchor=(0.30, 0.955), ncol=2) + fig.legend(handles=fill_handles, title="Fill = averaging domain", loc="upper center", bbox_to_anchor=(0.70, 0.955), ncol=2) fig.text( 0.03, 0.02, diff --git a/docs/assets/mambo-threshold-tail.svg b/docs/assets/mambo-threshold-tail.svg index 871fe78..d7b948e 100644 --- a/docs/assets/mambo-threshold-tail.svg +++ b/docs/assets/mambo-threshold-tail.svg @@ -2916,42 +2916,24 @@ L 1137.720313 676.28
- - - - - - - - - - No threshold · full support + Shape = confidence setting - + - - + - No threshold · support >5 + Unthresholded - + - + - Calibrated · full support + Calibrated + + + + + + + + Fill = averaging domain + + + + + + + + Full support - +" style="stroke: #808080"/> - + - - Calibrated · support >5 + + Truncated (support >5) From c65e77ad7c441f97144c7c94e0f7910d75b67057 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 14:02:49 +0200 Subject: [PATCH 046/221] feat: qualify composed padding and rotation TTA recipes --- dev/releases/mambo_v3/compact_tta.py | 130 + dev/releases/mambo_v3/compact_tta_metrics.py | 85 + docs/assets/mambo-compact-tta.json | 4808 ++++++++++++++++++ docs/mambo-compact-tta.md | 172 + docs/mambo-tta.md | 8 + tests/releases/test_deployment.py | 11 + 6 files changed, 5214 insertions(+) create mode 100644 dev/releases/mambo_v3/compact_tta.py create mode 100644 dev/releases/mambo_v3/compact_tta_metrics.py create mode 100644 docs/assets/mambo-compact-tta.json create mode 100644 docs/mambo-compact-tta.md diff --git a/dev/releases/mambo_v3/compact_tta.py b/dev/releases/mambo_v3/compact_tta.py new file mode 100644 index 0000000..a1837da --- /dev/null +++ b/dev/releases/mambo_v3/compact_tta.py @@ -0,0 +1,130 @@ +"""Bounded, compositional padding/rotation TTA qualification; no default changes.""" + +import argparse +import csv +import hashlib +import json +import time +from concurrent.futures import ThreadPoolExecutor +from functools import partial +from pathlib import Path + +import numpy as np +from PIL import Image + +from deployment.mambo_deploy import TTA, EdgePad, Predictor, View +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, write_json + + +def rotate_pad(image, degrees, padding): + """Rotate on an expanded canvas once, then edge-pad before ordinary preprocessing.""" + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + return EdgePad(padding)(np.asarray(rotated).transpose(2, 0, 1)) + + +def policies(): + views = {"original": View(), "pad08": EdgePad(0.08), "pad15": EdgePad(0.15)} + parameters = {"original": {}, "pad08": {"padding": 0.08}, "pad15": {"padding": 0.15}} + for degrees, padding in [(d, p) for d in (-10, 10, -30, 30) for p in (0.08, 0.15)] + [(-30, 0.25), (30, 0.25)]: + name = f"rot{degrees}_pad{padding}" + parameters[name] = {"degrees": degrees, "padding": padding} + views[name] = partial(rotate_pad, **parameters[name]) + recipes = { + "none": ["original"], + "padded_scale": ["original", "pad08", "pad15"], + "wide_rotation_5": ["original", *[f"rot{d}_pad0.08" for d in (-10, 10, -30, 30)]], + "wide_rotation_pad15_5": ["original", *[f"rot{d}_pad0.15" for d in (-10, 10, -30, 30)]], + "wide_rotation_mixed_padding_5": ["original", "rot-10_pad0.15", "rot10_pad0.15", "rot-30_pad0.25", "rot30_pad0.25"], + "rotation10_3": ["original", "rot-10_pad0.08", "rot10_pad0.08"], + "rotation30_3": ["original", "rot-30_pad0.08", "rot30_pad0.08"], + "rotation10_pad15_3": ["original", "rot-10_pad0.15", "rot10_pad0.15"], + "rotation30_pad15_3": ["original", "rot-30_pad0.15", "rot30_pad0.15"], + "rotation30_pad25_3": ["original", "rot-30_pad0.25", "rot30_pad0.25"], + "mixed_3": ["original", "rot-10_pad0.08", "rot30_pad0.15"], + "mixed_mirrored_3": ["original", "rot10_pad0.08", "rot-30_pad0.15"], + } + return views, parameters, recipes + + +def run(args): + if args.output.exists(): + raise ValueError("Use a fresh output directory") + args.output.mkdir(parents=True) + samples = json.loads(args.samples.read_text()) + reporting = json.loads(args.reporting_ids.read_text()) + candidates = sorted(set(reporting) - set(samples["ids"])) + random_ids = sorted(map(int, np.random.default_rng(20260925).choice(candidates, args.count, replace=False))) + ids = samples["ids"] + random_ids + manifest = json.loads(args.manifest.read_text()) + records = [manifest["records"][i] for i in ids] + paths = [args.root / r["path"] for r in records] + for path, record in zip(paths, records, strict=True): + if hashlib.sha256(path.read_bytes()).hexdigest() != record["sha256"]: + raise ValueError(f"Changed image: {path}") + views, parameters, recipes = policies() + settings = runtime_settings(4, "torch") + predictor = Predictor(args.bundle, backend="torch", device="cuda:0", model="north_europe", batch_size=32, threads=4) + splits = { + "focus": [0, len(samples["focus"])], + "controls": [len(samples["focus"]), len(samples["ids"])], + "random": [len(samples["ids"]), len(ids)], + } + report = { + "inputs_sha256": { + str(path): hashlib.sha256(path.read_bytes()).hexdigest() for path in (args.samples, args.reporting_ids, args.manifest) + }, + "status": "running", + "ids": ids, + "records": records, + "splits": splits, + "seed": 20260925, + "runtime": settings, + "parameters": parameters, + "recipes": recipes, + "seconds_per_view": {}, + "selection": "Existing flagged cases and controls plus a disjoint uniform random reporting sample; exploratory only", + } + write_json(args.output / "report.json", report) + logits = {} + with ThreadPoolExecutor(max_workers=4) as pool: + for name, transform in views.items(): + predictor.tta = TTA((transform,), name) + start = time.monotonic() + logits[name] = np.concatenate([predictor._infer_batch(paths[i : i + 32], pool=pool)[0] for i in range(0, len(paths), 32)]) + report["seconds_per_view"][name] = time.monotonic() - start + print(name, round(report["seconds_per_view"][name], 2), flush=True) + report["effective_precision"] = predictor.effective_precision + for name, keys in recipes.items(): + raw = sum(logits[key] / np.float32(len(keys)) for key in keys) + folder = args.output / name + folder.mkdir() + for subset, (start, end) in splits.items(): + pred = Prediction(*hierarchy(raw[start:end], predictor.selected, predictor.bundle.classes)) + with (folder / f"{subset}.csv").open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + writer.writerows(canonical_rows(records[start:end], pred)) + if name == "rotation30_pad15_3": + predictor.tta = TTA(tuple(views[k] for k in keys), name) + actual = predictor._infer_batch(paths[:32], pool=pool)[0] + np.testing.assert_allclose(actual, raw[:32], rtol=0, atol=1e-6) + np.savez_compressed(args.output / "view_logits.npz", **logits) + report["aggregation_check"] = "Normal TTA API agrees at atol=1e-6 with identical batch shape" + report["status"] = "complete" + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--bundle", type=Path, required=True) + parser.add_argument("--manifest", type=Path, required=True) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--samples", type=Path, required=True) + parser.add_argument("--reporting-ids", type=Path, required=True) + parser.add_argument("--count", type=int, default=1024) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/compact_tta_metrics.py b/dev/releases/mambo_v3/compact_tta_metrics.py new file mode 100644 index 0000000..dd2a77a --- /dev/null +++ b/dev/releases/mambo_v3/compact_tta_metrics.py @@ -0,0 +1,85 @@ +"""Evaluate compact TTA qualification predictions using pinned mini_metrics.""" + +import argparse +import csv +import importlib.metadata +import json +from pathlib import Path + +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json + + +def collect(root, study): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError("Require pinned mini_metrics") + report = json.loads((root / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError("Incomplete inference") + thresholds = study["models"]["torch"]["thresholds"] + scores, transitions = {}, {} + for name in report["recipes"]: + scores[name], transitions[name] = {}, {} + for subset in report["splits"]: + path = root / name / f"{subset}.csv" + data = MetricDF.from_source(path) + scores[name][subset] = { + scope: finite_json( + evaluate_file( + data, + threshold=threshold, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage)$", + verbose=0, + ) + ) + for scope, threshold in (("zero", 0), ("fixed", thresholds)) + } + with (root / "none" / f"{subset}.csv").open() as stream: + baseline = list(csv.DictReader(stream)) + with path.open() as stream: + candidate = list(csv.DictReader(stream)) + transitions[name][subset] = {} + for level, rank in enumerate(("species", "genus", "family")): + counts = dict.fromkeys( + ( + "correct", + "accepted_wrong", + "wrong_to_correct", + "correct_to_wrong", + "wrong_accepted_to_rejected", + "correct_accepted_to_rejected", + ), + 0, + ) + for a, b in zip(baseline, candidate, strict=True): + if a["level"] != str(level): + continue + assert (a["instance_id"], a["label"], a["level"]) == (b["instance_id"], b["label"], b["level"]) + ac, bc = a["prediction"] == a["label"], b["prediction"] == b["label"] + aa, ba = float(a["confidence"]) >= thresholds[level], float(b["confidence"]) >= thresholds[level] + for key, test in ( + ("correct", bc), + ("accepted_wrong", not bc and ba), + ("wrong_to_correct", not ac and bc), + ("correct_to_wrong", ac and not bc), + ("wrong_accepted_to_rejected", not ac and aa and not ba), + ("correct_accepted_to_rejected", ac and aa and not ba), + ): + counts[key] += int(test) + transitions[name][subset][rank] = counts + print(name, flush=True) + return {"revision": REVISION, "fixed_thresholds": thresholds, "scores": scores, "transitions": transitions} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + args = parser.parse_args() + write_json(args.root / "metrics.json", collect(args.root, json.loads(args.study.read_text()))) diff --git a/docs/assets/mambo-compact-tta.json b/docs/assets/mambo-compact-tta.json new file mode 100644 index 0000000..303856b --- /dev/null +++ b/docs/assets/mambo-compact-tta.json @@ -0,0 +1,4808 @@ +{ + "status": "complete", + "ids": [ + 499, + 7456, + 7545, + 13157, + 13446, + 15935, + 17643, + 19324, + 19712, + 29688, + 29743, + 29748, + 29759, + 29771, + 29795, + 41098, + 43023, + 43076, + 43198, + 43200, + 43210, + 43242, + 43328, + 43413, + 43544, + 43628, + 43642, + 43786, + 43909, + 44089, + 44150, + 44841, + 45793, + 47361, + 52031, + 52147, + 53598, + 56808, + 443, + 1306, + 2024, + 2656, + 2755, + 3705, + 3777, + 3988, + 4040, + 4232, + 4369, + 4755, + 5460, + 6601, + 6831, + 6915, + 7378, + 7774, + 8013, + 8764, + 8812, + 9004, + 9251, + 9396, + 9621, + 9623, + 9828, + 9909, + 9947, + 10010, + 10235, + 10916, + 12912, + 13059, + 13604, + 14120, + 14545, + 14557, + 15151, + 15190, + 15236, + 15506, + 15558, + 16105, + 16194, + 16213, + 16329, + 16675, + 17035, + 18155, + 18468, + 21097, + 21206, + 21436, + 22879, + 23642, + 24081, + 24313, + 24898, + 25166, + 26201, + 26298, + 26862, + 27120, + 28939, + 29659, + 29918, + 30862, + 30943, + 31051, + 31453, + 31482, + 31485, + 31682, + 31925, + 32216, + 32680, + 32682, + 32993, + 33059, + 33604, + 34254, + 34828, + 35033, + 35085, + 35248, + 37336, + 37379, + 37421, + 38628, + 38846, + 39101, + 39663, + 39896, + 40027, + 40476, + 40686, + 42502, + 42754, + 43348, + 43540, + 44394, + 46722, + 46814, + 46827, + 47313, + 47859, + 48899, + 49511, + 49521, + 50032, + 51394, + 52335, + 52643, + 52730, + 52767, + 52978, + 53078, + 53239, + 53538, + 54524, + 54759, + 55437, + 56094, + 57155, + 57447, + 57933, + 58035, + 45, + 70, + 83, + 99, + 257, + 299, + 494, + 544, + 586, + 593, + 625, + 639, + 684, + 792, + 882, + 910, + 947, + 965, + 1102, + 1103, + 1173, + 1229, + 1231, + 1290, + 1342, + 1417, + 1426, + 1492, + 1578, + 1668, + 1672, + 1695, + 1748, + 1762, + 1780, + 1806, + 1836, + 1890, + 2100, + 2106, + 2147, + 2205, + 2265, + 2290, + 2328, + 2407, + 2469, + 2496, + 2497, + 2502, + 2512, + 2531, + 2634, + 2654, + 2690, + 2724, + 2764, + 2769, + 2792, + 2801, + 2878, + 2892, + 2907, + 2938, + 2955, + 2971, + 3130, + 3150, + 3153, + 3215, + 3286, + 3377, + 3404, + 3444, + 3496, + 3539, + 3622, + 3706, + 3709, + 3714, + 3717, + 3727, + 3744, + 3759, + 3795, + 3831, + 3844, + 3897, + 4063, + 4064, + 4084, + 4140, + 4241, + 4363, + 4507, + 4510, + 4608, + 4630, + 4678, + 4705, + 4729, + 4794, + 4862, + 4866, + 4900, + 4972, + 5015, + 5042, + 5046, + 5056, + 5071, + 5075, + 5158, + 5201, + 5272, + 5289, + 5421, + 5433, + 5448, + 5518, + 5581, + 5613, + 5739, + 5835, + 5890, + 5936, + 5985, + 6035, + 6076, + 6107, + 6169, + 6320, + 6354, + 6496, + 6527, + 6529, + 6532, + 6595, + 6636, + 6642, + 6827, + 6916, + 6930, + 6946, + 6957, + 6975, + 7129, + 7167, + 7222, + 7288, + 7298, + 7347, + 7386, + 7551, + 7581, + 7752, + 7773, + 7828, + 7880, + 8070, + 8149, + 8151, + 8157, + 8260, + 8313, + 8358, + 8368, + 8369, + 8452, + 8460, + 8498, + 8503, + 8515, + 8584, + 8588, + 8772, + 8808, + 8838, + 8859, + 8931, + 8932, + 9143, + 9149, + 9164, + 9227, + 9332, + 9417, + 9484, + 9512, + 9518, + 9669, + 9695, + 9702, + 9723, + 9772, + 9806, + 9811, + 9860, + 9927, + 9937, + 9941, + 9980, + 10011, + 10042, + 10192, + 10244, + 10303, + 10386, + 10387, + 10466, + 10693, + 10808, + 10913, + 10950, + 10983, + 11003, + 11012, + 11017, + 11156, + 11230, + 11233, + 11292, + 11303, + 11312, + 11375, + 11448, + 11574, + 11584, + 11602, + 11688, + 11694, + 11997, + 12054, + 12091, + 12138, + 12139, + 12240, + 12255, + 12281, + 12319, + 12340, + 12366, + 12412, + 12461, + 12554, + 12581, + 12587, + 12649, + 12701, + 12945, + 12954, + 12969, + 12974, + 13044, + 13077, + 13192, + 13215, + 13263, + 13324, + 13528, + 13542, + 13547, + 13618, + 13869, + 13958, + 14311, + 14349, + 14377, + 14441, + 14474, + 14549, + 14594, + 14639, + 14727, + 14864, + 14921, + 14936, + 15093, + 15116, + 15135, + 15262, + 15388, + 15405, + 15449, + 15469, + 15609, + 15681, + 15683, + 15695, + 15719, + 15857, + 15869, + 15923, + 15963, + 15985, + 16023, + 16113, + 16127, + 16182, + 16199, + 16258, + 16365, + 16379, + 16385, + 16408, + 16496, + 16557, + 16571, + 16728, + 16743, + 16972, + 17057, + 17059, + 17071, + 17078, + 17235, + 17277, + 17293, + 17306, + 17581, + 17591, + 17702, + 17825, + 17839, + 17879, + 17920, + 17926, + 18053, + 18096, + 18141, + 18162, + 18182, + 18315, + 18380, + 18399, + 18406, + 18479, + 18512, + 18573, + 18596, + 18611, + 18630, + 18646, + 18676, + 18701, + 18786, + 18929, + 18945, + 18975, + 19108, + 19115, + 19158, + 19180, + 19487, + 19492, + 19503, + 19508, + 19509, + 19538, + 19617, + 19698, + 19725, + 19795, + 19883, + 19907, + 20009, + 20020, + 20067, + 20103, + 20199, + 20383, + 20457, + 20475, + 20543, + 20584, + 20620, + 20685, + 20705, + 20712, + 20785, + 20803, + 20851, + 20875, + 20898, + 20899, + 20905, + 20990, + 21029, + 21039, + 21075, + 21079, + 21083, + 21085, + 21221, + 21308, + 21335, + 21467, + 21570, + 21623, + 21687, + 21757, + 21802, + 21907, + 21924, + 21929, + 21982, + 22245, + 22267, + 22282, + 22320, + 22374, + 22384, + 22524, + 22557, + 22668, + 22674, + 22812, + 22874, + 23128, + 23226, + 23343, + 23376, + 23471, + 23587, + 23594, + 23635, + 23658, + 23661, + 24003, + 24055, + 24125, + 24216, + 24278, + 24352, + 24423, + 24539, + 24562, + 24592, + 24659, + 24714, + 24822, + 25090, + 25123, + 25145, + 25241, + 25262, + 25275, + 25340, + 25354, + 25436, + 25504, + 25529, + 25591, + 25631, + 25635, + 25692, + 25952, + 26029, + 26070, + 26077, + 26089, + 26126, + 26127, + 26131, + 26178, + 26189, + 26197, + 26344, + 26349, + 26359, + 26364, + 26409, + 26415, + 26434, + 26545, + 26716, + 26750, + 26839, + 26932, + 26948, + 27009, + 27016, + 27050, + 27059, + 27084, + 27142, + 27183, + 27186, + 27284, + 27388, + 27408, + 27420, + 27534, + 27573, + 27601, + 27729, + 27820, + 27882, + 27981, + 27990, + 28169, + 28184, + 28212, + 28219, + 28258, + 28435, + 28525, + 28585, + 28586, + 28834, + 28865, + 28893, + 28902, + 29000, + 29066, + 29068, + 29137, + 29211, + 29218, + 29285, + 29338, + 29380, + 29394, + 29434, + 29476, + 29531, + 29565, + 29998, + 30067, + 30128, + 30208, + 30263, + 30273, + 30326, + 30364, + 30429, + 30514, + 30643, + 30677, + 30683, + 30703, + 30895, + 30931, + 30993, + 31056, + 31217, + 31301, + 31480, + 31640, + 31671, + 31728, + 31761, + 31846, + 31864, + 31935, + 32015, + 32040, + 32062, + 32110, + 32137, + 32144, + 32159, + 32240, + 32261, + 32283, + 32285, + 32317, + 32431, + 32483, + 32673, + 32749, + 32813, + 32883, + 32956, + 32965, + 33012, + 33072, + 33170, + 33360, + 33368, + 33487, + 33488, + 33529, + 33536, + 33580, + 33610, + 33639, + 33646, + 33792, + 33896, + 33966, + 33995, + 34000, + 34012, + 34070, + 34122, + 34133, + 34134, + 34140, + 34194, + 34206, + 34217, + 34243, + 34290, + 34329, + 34333, + 34376, + 34388, + 34390, + 34669, + 34735, + 34825, + 34827, + 34863, + 34896, + 34909, + 34915, + 34941, + 35107, + 35166, + 35271, + 35456, + 35460, + 35507, + 35542, + 35556, + 35654, + 35674, + 35687, + 35734, + 35758, + 35836, + 35858, + 35877, + 36120, + 36226, + 36243, + 36341, + 36422, + 36434, + 36600, + 36601, + 36667, + 36709, + 36769, + 36818, + 36829, + 36866, + 36999, + 37039, + 37061, + 37100, + 37189, + 37276, + 37392, + 37433, + 37455, + 37479, + 37488, + 37607, + 37610, + 37660, + 37864, + 37905, + 37934, + 37974, + 37996, + 38017, + 38037, + 38059, + 38085, + 38261, + 38314, + 38323, + 38442, + 38546, + 38580, + 38658, + 38747, + 38786, + 38826, + 38839, + 38841, + 38849, + 38885, + 38901, + 38913, + 39019, + 39062, + 39085, + 39095, + 39143, + 39165, + 39222, + 39264, + 39291, + 39340, + 39559, + 39610, + 39845, + 39921, + 39931, + 39982, + 40101, + 40232, + 40242, + 40263, + 40279, + 40294, + 40329, + 40338, + 40344, + 40485, + 40528, + 40605, + 40629, + 40637, + 40672, + 40872, + 40878, + 40925, + 40941, + 40982, + 40986, + 41034, + 41060, + 41160, + 41217, + 41254, + 41262, + 41414, + 41611, + 41722, + 41814, + 41832, + 41877, + 41886, + 41942, + 41955, + 42023, + 42044, + 42096, + 42237, + 42262, + 42463, + 42467, + 42572, + 42584, + 42590, + 42594, + 42670, + 42727, + 42748, + 42777, + 42852, + 42960, + 43033, + 43095, + 43129, + 43180, + 43329, + 43537, + 43624, + 43680, + 43687, + 43729, + 43802, + 43809, + 43819, + 43839, + 43870, + 43874, + 43899, + 43905, + 43917, + 43922, + 44213, + 44235, + 44247, + 44328, + 44372, + 44456, + 44460, + 44530, + 44561, + 44576, + 44601, + 44605, + 44666, + 44732, + 44863, + 44886, + 45035, + 45075, + 45209, + 45234, + 45293, + 45574, + 45600, + 45675, + 45679, + 45691, + 45744, + 45851, + 45892, + 46002, + 46418, + 46440, + 46450, + 46529, + 46761, + 46776, + 46836, + 46926, + 46941, + 46949, + 46955, + 46956, + 47039, + 47044, + 47052, + 47090, + 47094, + 47105, + 47129, + 47136, + 47185, + 47191, + 47213, + 47372, + 47490, + 47524, + 47765, + 47793, + 47805, + 47958, + 48142, + 48181, + 48410, + 48491, + 48522, + 48536, + 48632, + 48700, + 48712, + 48772, + 48774, + 48791, + 48811, + 48864, + 48947, + 48953, + 49038, + 49039, + 49074, + 49117, + 49234, + 49327, + 49333, + 49338, + 49406, + 49429, + 49441, + 49475, + 49617, + 49688, + 49773, + 49791, + 49854, + 49861, + 49878, + 49937, + 49963, + 50017, + 50041, + 50087, + 50154, + 50328, + 50360, + 50416, + 50439, + 50573, + 50843, + 50855, + 50921, + 50952, + 50964, + 50972, + 50974, + 51005, + 51080, + 51133, + 51257, + 51334, + 51411, + 51432, + 51461, + 51589, + 51637, + 51662, + 51841, + 51890, + 51971, + 52013, + 52123, + 52319, + 52340, + 52350, + 52355, + 52472, + 52502, + 52544, + 52729, + 52737, + 52845, + 52936, + 53027, + 53058, + 53106, + 53209, + 53241, + 53274, + 53291, + 53309, + 53387, + 53397, + 53403, + 53409, + 53416, + 53455, + 53480, + 53519, + 53553, + 53668, + 53671, + 53693, + 53870, + 53893, + 53960, + 54070, + 54335, + 54391, + 54405, + 54478, + 54500, + 54505, + 54545, + 54646, + 54651, + 54720, + 54753, + 54780, + 54787, + 54851, + 54924, + 54939, + 54964, + 55028, + 55197, + 55431, + 55462, + 55507, + 55606, + 55659, + 55692, + 55703, + 55734, + 55743, + 55770, + 55808, + 55821, + 55843, + 55924, + 55933, + 55997, + 56005, + 56168, + 56201, + 56206, + 56269, + 56295, + 56301, + 56348, + 56361, + 56413, + 56515, + 56570, + 56582, + 56594, + 56617, + 56631, + 56654, + 56694, + 56703, + 56780, + 56782, + 56913, + 56939, + 56989, + 57001, + 57014, + 57063, + 57154, + 57198, + 57288, + 57350, + 57365, + 57368, + 57387, + 57394, + 57438, + 57460, + 57467, + 57661, + 57818, + 57854, + 57891, + 57950, + 57963, + 58044, + 58270, + 58290, + 58392, + 58430 + ], + "splits": { + "focus": [ + 0, + 38 + ], + "controls": [ + 38, + 166 + ], + "random": [ + 166, + 1190 + ] + }, + "seed": 20260925, + "parameters": { + "original": {}, + "pad08": { + "padding": 0.08 + }, + "pad15": { + "padding": 0.15 + }, + "rot-10_pad0.08": { + "degrees": -10, + "padding": 0.08 + }, + "rot-10_pad0.15": { + "degrees": -10, + "padding": 0.15 + }, + "rot10_pad0.08": { + "degrees": 10, + "padding": 0.08 + }, + "rot10_pad0.15": { + "degrees": 10, + "padding": 0.15 + }, + "rot-30_pad0.08": { + "degrees": -30, + "padding": 0.08 + }, + "rot-30_pad0.15": { + "degrees": -30, + "padding": 0.15 + }, + "rot30_pad0.08": { + "degrees": 30, + "padding": 0.08 + }, + "rot30_pad0.15": { + "degrees": 30, + "padding": 0.15 + }, + "rot-30_pad0.25": { + "degrees": -30, + "padding": 0.25 + }, + "rot30_pad0.25": { + "degrees": 30, + "padding": 0.25 + } + }, + "recipes": { + "none": [ + "original" + ], + "padded_scale": [ + "original", + "pad08", + "pad15" + ], + "wide_rotation_5": [ + "original", + "rot-10_pad0.08", + "rot10_pad0.08", + "rot-30_pad0.08", + "rot30_pad0.08" + ], + "rotation10_3": [ + "original", + "rot-10_pad0.08", + "rot10_pad0.08" + ], + "rotation30_3": [ + "original", + "rot-30_pad0.08", + "rot30_pad0.08" + ], + "rotation10_pad15_3": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15" + ], + "rotation30_pad15_3": [ + "original", + "rot-30_pad0.15", + "rot30_pad0.15" + ], + "rotation30_pad25_3": [ + "original", + "rot-30_pad0.25", + "rot30_pad0.25" + ], + "mixed_3": [ + "original", + "rot-10_pad0.08", + "rot30_pad0.15" + ], + "mixed_mirrored_3": [ + "original", + "rot10_pad0.08", + "rot-30_pad0.15" + ], + "wide_rotation_pad15_5": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15", + "rot-30_pad0.15", + "rot30_pad0.15" + ], + "wide_rotation_mixed_padding_5": [ + "original", + "rot-10_pad0.15", + "rot10_pad0.15", + "rot-30_pad0.25", + "rot30_pad0.25" + ] + }, + "selection": "Existing flagged cases and controls plus a disjoint uniform random reporting sample; exploratory only", + "effective_precision": "fp16", + "aggregation_check": "Normal TTA API agrees at atol=1e-6 with identical batch shape", + "composition_followup": "Two five-view composed policies added after inspecting first qualification; same cached individual views, no new inference", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": false, + "precision": "float32", + "platform": "Linux-5.15.167.4-microsoft-standard-WSL2-x86_64-with-glibc2.35", + "torch": "2.12.0+cu130", + "cuda": "13.0" + }, + "metrics": { + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "fixed_thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "scores": { + "none": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.1 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07142857142857142 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.05263157894736842 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.8421052631578947, + "1": 0.8421052631578947, + "2": 0.8157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.809047619047619, + "1": 0.9534412955465588, + "2": 1.0 + }, + "precision": { + "0": 0.8077464788732395, + "1": 0.8870967741935484, + "2": 1.0 + }, + "recall": { + "0": 0.809047619047619, + "1": 0.9534412955465588, + "2": 1.0 + }, + "f1": { + "0": 0.682683113406005, + "1": 0.8528645833333333, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.734375, + "1": 0.90625, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8345588235294118, + "1": 0.9793956043956044, + "2": 1.0 + }, + "precision": { + "0": 0.8537878787878788, + "1": 0.9322033898305084, + "2": 1.0 + }, + "recall": { + "0": 0.8014285714285715, + "1": 0.9534412955465588, + "2": 1.0 + }, + "f1": { + "0": 0.7091621458710066, + "1": 0.8948087431693988, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.773109243697479, + "1": 0.9354838709677419, + "2": 1.0 + }, + "coverage": { + "0": 0.9296875, + "1": 0.96875, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7287591645265503, + "1": 0.8120645062193705, + "2": 0.8462340874847639 + }, + "precision": { + "0": 0.5739530083616106, + "1": 0.6302851947218145, + "2": 0.5380594603502131 + }, + "recall": { + "0": 0.7287591645265503, + "1": 0.8120645062193705, + "2": 0.8462340874847639 + }, + "f1": { + "0": 0.4848822757072845, + "1": 0.5679075771932561, + "2": 0.5015645407987354 + }, + "micro_accuracy": { + "0": 0.7138671875, + "1": 0.7958984375, + "2": 0.92578125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8661252354048965, + "1": 0.9638258680695261, + "2": 0.9992480583870744 + }, + "precision": { + "0": 0.8685714285714285, + "1": 0.9159920887193612, + "2": 0.9994813278008299 + }, + "recall": { + "0": 0.6136500174996423, + "1": 0.6947424739533938, + "2": 0.7229324171297198 + }, + "f1": { + "0": 0.5978964265884702, + "1": 0.6982229322444271, + "2": 0.8094967567216647 + }, + "micro_accuracy": { + "0": 0.8401639344262295, + "1": 0.918075422626788, + "2": 0.9973009446693657 + }, + "coverage": { + "0": 0.71484375, + "1": 0.7509765625, + "2": 0.7236328125 + } + } + } + }, + "padded_scale": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "precision": { + "0": 0.09090909090909091, + "1": 0.09090909090909091, + "2": 0.1 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14285714285714285 + }, + "f1": { + "0": 0.043478260869565216, + "1": 0.045454545454545456, + "2": 0.07142857142857142 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.05263157894736842 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.08333333333333333, + "1": 0.09090909090909091, + "2": 0.2 + }, + "precision": { + "0": 0.1111111111111111, + "1": 0.1111111111111111, + "2": 0.14285714285714285 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.07142857142857142 + }, + "f1": { + "0": 0.047619047619047616, + "1": 0.05, + "2": 0.05128205128205128 + }, + "micro_accuracy": { + "0": 0.05714285714285714, + "1": 0.058823529411764705, + "2": 0.045454545454545456 + }, + "coverage": { + "0": 0.9210526315789473, + "1": 0.8947368421052632, + "2": 0.5789473684210527 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9032258064516129, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7002032520325203, + "1": 0.8822751322751322, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.734375, + "1": 0.9140625, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8433823529411765, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8085714285714286, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7086309523809523, + "1": 0.8965053763440859, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7666666666666667, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.745465291998228, + "1": 0.8330189970124037, + "2": 0.8842807681031762 + }, + "precision": { + "0": 0.6099473825709565, + "1": 0.683049558096778, + "2": 0.5729386752991159 + }, + "recall": { + "0": 0.745465291998228, + "1": 0.8330189970124037, + "2": 0.8842807681031762 + }, + "f1": { + "0": 0.5194714677110217, + "1": 0.6213163990235893, + "2": 0.5717441179819487 + }, + "micro_accuracy": { + "0": 0.7353515625, + "1": 0.8134765625, + "2": 0.9404296875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8716931216931216, + "1": 0.9643968604246995, + "2": 0.9993111168518041 + }, + "precision": { + "0": 0.8595505617977528, + "1": 0.9151865881032547, + "2": 0.9994877049180327 + }, + "recall": { + "0": 0.632523326105755, + "1": 0.7189973821597091, + "2": 0.7567291181807575 + }, + "f1": { + "0": 0.6043949140738758, + "1": 0.7153219743976313, + "2": 0.8334463255800845 + }, + "micro_accuracy": { + "0": 0.8457516339869281, + "1": 0.9204968944099379, + "2": 0.9974937343358395 + }, + "coverage": { + "0": 0.7470703125, + "1": 0.7861328125, + "2": 0.779296875 + } + } + } + }, + "wide_rotation_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.25 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.0922077922077922 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.1, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.14285714285714285, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.03508771929824561, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.038461538461538464, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.6842105263157895, + "1": 0.6578947368421053, + "2": 0.34210526315789475 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.718058005095042, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7295057263411694, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7833333333333333, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7454409265848465, + "1": 0.8427438194836951, + "2": 0.9057782692968482 + }, + "precision": { + "0": 0.6447761742942466, + "1": 0.7092450965974649, + "2": 0.6184699149071605 + }, + "recall": { + "0": 0.7454409265848465, + "1": 0.8427438194836951, + "2": 0.9057782692968482 + }, + "f1": { + "0": 0.5409941419863084, + "1": 0.6490658911536241, + "2": 0.6260749858957066 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.8291015625, + "2": 0.951171875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8805063830320342, + "1": 0.9581741243283846, + "2": 0.940559205500382 + }, + "precision": { + "0": 0.8678766588602654, + "1": 0.9126635482340179, + "2": 0.9986735993208828 + }, + "recall": { + "0": 0.6710841125403528, + "1": 0.7586561169139849, + "2": 0.7770944143698603 + }, + "f1": { + "0": 0.639757550272372, + "1": 0.7450404248178341, + "2": 0.8451510613258479 + }, + "micro_accuracy": { + "0": 0.840937114673243, + "1": 0.911660777385159, + "2": 0.9964454976303317 + }, + "coverage": { + "0": 0.7919921875, + "1": 0.8291015625, + "2": 0.82421875 + } + } + } + }, + "rotation10_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07272727272727272 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7631578947368421, + "1": 0.7631578947368421, + "2": 0.4473684210526316 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8352380952380951, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8352380952380951, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7197040956300215, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8456521739130435, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8133333333333334, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7148809523809523, + "1": 0.8965053763440859, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.768595041322314, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.741665582935361, + "1": 0.8368075421544521, + "2": 0.8893875924049287 + }, + "precision": { + "0": 0.6195335413940065, + "1": 0.6839432278341946, + "2": 0.5975073991572308 + }, + "recall": { + "0": 0.741665582935361, + "1": 0.8368075421544521, + "2": 0.8893875924049287 + }, + "f1": { + "0": 0.5210162752523081, + "1": 0.6228038402704332, + "2": 0.5972137338849455 + }, + "micro_accuracy": { + "0": 0.7451171875, + "1": 0.8251953125, + "2": 0.9453125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8696417362392495, + "1": 0.9662524671802257, + "2": 0.9993186823909892 + }, + "precision": { + "0": 0.8533697632058289, + "1": 0.9134099122354156, + "2": 0.9994877049180327 + }, + "recall": { + "0": 0.654373877627191, + "1": 0.7419456609322663, + "2": 0.753317605354283 + }, + "f1": { + "0": 0.6177175932772172, + "1": 0.73435932685898, + "2": 0.8302999782092606 + }, + "micro_accuracy": { + "0": 0.8422391857506362, + "1": 0.9161603888213852, + "2": 0.9975339087546239 + }, + "coverage": { + "0": 0.767578125, + "1": 0.8037109375, + "2": 0.7919921875 + } + } + } + }, + "rotation30_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.6052631578947368, + "1": 0.5789473684210527, + "2": 0.23684210526315788 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.84, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.84, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7221732314324906, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.765625, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8252380952380952, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7333031946955997, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7851239669421488, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7452822316506098, + "1": 0.839252438624142, + "2": 0.9059825176628613 + }, + "precision": { + "0": 0.6418742611969704, + "1": 0.7069412829112952, + "2": 0.6489490489712278 + }, + "recall": { + "0": 0.7452822316506098, + "1": 0.839252438624142, + "2": 0.9059825176628613 + }, + "f1": { + "0": 0.5387700719541371, + "1": 0.6453682873513557, + "2": 0.6657532111557237 + }, + "micro_accuracy": { + "0": 0.748046875, + "1": 0.826171875, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8802237654320989, + "1": 0.9579540918796495, + "2": 0.9405563476770906 + }, + "precision": { + "0": 0.871941594317285, + "1": 0.9126025354213273, + "2": 0.9987027878849998 + }, + "recall": { + "0": 0.6687776810678153, + "1": 0.7546912409025844, + "2": 0.7868290365641832 + }, + "f1": { + "0": 0.6392070152898363, + "1": 0.7419251820560702, + "2": 0.8522206769876662 + }, + "micro_accuracy": { + "0": 0.8415841584158416, + "1": 0.9081272084805654, + "2": 0.9964497041420118 + }, + "coverage": { + "0": 0.7890625, + "1": 0.8291015625, + "2": 0.8251953125 + } + } + } + }, + "rotation10_pad15_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.07692307692307693, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.041666666666666664, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.09090909090909091, + "1": 0.1, + "2": 0.0 + }, + "precision": { + "0": 0.1111111111111111, + "1": 0.1111111111111111, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.031746031746031744, + "1": 0.03333333333333333, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.03333333333333333, + "1": 0.03225806451612903, + "2": 0.0 + }, + "coverage": { + "0": 0.7894736842105263, + "1": 0.8157894736842105, + "2": 0.3684210526315789 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8433823529411765, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.7990476190476191, + "1": 0.9709851551956815, + "2": 0.9969135802469135 + }, + "f1": { + "0": 0.7023809523809523, + "1": 0.8965053763440859, + "2": 0.9984350547730829 + }, + "micro_accuracy": { + "0": 0.7666666666666667, + "1": 0.9285714285714286, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.984375, + "2": 0.9921875 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7426050842366203, + "1": 0.8422604352105022, + "2": 0.8984576995595194 + }, + "precision": { + "0": 0.6301201369436664, + "1": 0.6995078995078996, + "2": 0.6009209981111495 + }, + "recall": { + "0": 0.7426050842366203, + "1": 0.8422604352105022, + "2": 0.8984576995595194 + }, + "f1": { + "0": 0.5289175898666085, + "1": 0.6383376824908955, + "2": 0.6021230603848032 + }, + "micro_accuracy": { + "0": 0.74609375, + "1": 0.828125, + "2": 0.9482421875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8705389433551199, + "1": 0.9621791406006243, + "2": 0.9403301105388392 + }, + "precision": { + "0": 0.8576459255030684, + "1": 0.9145996620828836, + "2": 0.9953032658807512 + }, + "recall": { + "0": 0.6557838891061579, + "1": 0.7490912754027216, + "2": 0.7688329636947574 + }, + "f1": { + "0": 0.6210745598216204, + "1": 0.7391529209868354, + "2": 0.8396085584841956 + }, + "micro_accuracy": { + "0": 0.8402515723270441, + "1": 0.9138755980861244, + "2": 0.9952095808383233 + }, + "coverage": { + "0": 0.7763671875, + "1": 0.81640625, + "2": 0.8154296875 + } + } + } + }, + "rotation30_pad15_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.5526315789473685, + "1": 0.5526315789473685, + "2": 0.21052631578947367 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8492647058823529, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8712121212121212, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.810952380952381, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7298840048840048, + "1": 0.9166666666666666, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7899159663865546, + "1": 0.9365079365079365, + "2": 1.0 + }, + "coverage": { + "0": 0.9296875, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.746946392145336, + "1": 0.8429559184422715, + "2": 0.9038285435129828 + }, + "precision": { + "0": 0.6375276195039041, + "1": 0.7121206532688331, + "2": 0.6185782533611139 + }, + "recall": { + "0": 0.746946392145336, + "1": 0.8429559184422715, + "2": 0.9038285435129828 + }, + "f1": { + "0": 0.5357718847296176, + "1": 0.6491874070914907, + "2": 0.6359736267198427 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.826171875, + "2": 0.953125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8883789778015406, + "1": 0.9668934715764436, + "2": 0.9405612447408113 + }, + "precision": { + "0": 0.8880952380952382, + "1": 0.9318216175359031, + "2": 0.9987027878849998 + }, + "recall": { + "0": 0.6803776952607089, + "1": 0.7702213561149207, + "2": 0.7987399114292636 + }, + "f1": { + "0": 0.6579714146318916, + "1": 0.767104901340909, + "2": 0.8595692011036523 + }, + "micro_accuracy": { + "0": 0.8479604449938195, + "1": 0.9142185663924794, + "2": 0.9964705882352941 + }, + "coverage": { + "0": 0.7900390625, + "1": 0.8310546875, + "2": 0.830078125 + } + } + } + }, + "rotation30_pad25_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.10256410256410256, + "1": 0.1111111111111111, + "2": 0.1723356009070295 + }, + "precision": { + "0": 0.13333333333333333, + "1": 0.14285714285714285, + "2": 0.25 + }, + "recall": { + "0": 0.10256410256410256, + "1": 0.1111111111111111, + "2": 0.1723356009070295 + }, + "f1": { + "0": 0.057692307692307696, + "1": 0.0625, + "2": 0.09159420289855073 + }, + "micro_accuracy": { + "0": 0.07894736842105263, + "1": 0.07894736842105263, + "2": 0.13157894736842105 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.2, + "1": 0.16666666666666666, + "2": 0.25 + }, + "precision": { + "0": 0.16666666666666666, + "1": 0.14285714285714285, + "2": 0.25 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.07142857142857142 + }, + "f1": { + "0": 0.05555555555555555, + "1": 0.05555555555555555, + "2": 0.06666666666666667 + }, + "micro_accuracy": { + "0": 0.125, + "1": 0.11764705882352941, + "2": 0.2 + }, + "coverage": { + "0": 0.42105263157894735, + "1": 0.4473684210526316, + "2": 0.13157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8639705882352942, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8768656716417911, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8180952380952381, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7402625152625151, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7966101694915254, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.921875, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7630355840929575, + "1": 0.8416665920574038, + "2": 0.9041031362537907 + }, + "precision": { + "0": 0.649440935267707, + "1": 0.7067288667804132, + "2": 0.6428022493693895 + }, + "recall": { + "0": 0.7630355840929575, + "1": 0.8416665920574038, + "2": 0.9041031362537907 + }, + "f1": { + "0": 0.5522561853862159, + "1": 0.6423359001887395, + "2": 0.6520928954298746 + }, + "micro_accuracy": { + "0": 0.751953125, + "1": 0.826171875, + "2": 0.9541015625 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8844092274886111, + "1": 0.9645494413509481, + "2": 0.9405601429271455 + }, + "precision": { + "0": 0.8749024199843872, + "1": 0.9254504504504503, + "2": 0.9987202649804277 + }, + "recall": { + "0": 0.6842780346873641, + "1": 0.7732837086077714, + "2": 0.8053658297569687 + }, + "f1": { + "0": 0.6515157419701599, + "1": 0.7688269140158974, + "2": 0.8642902296431367 + }, + "micro_accuracy": { + "0": 0.8439803439803439, + "1": 0.9130434782608695, + "2": 0.9964912280701754 + }, + "coverage": { + "0": 0.794921875, + "1": 0.8310546875, + "2": 0.8349609375 + } + } + } + }, + "mixed_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7105263157894737, + "1": 0.7105263157894737, + "2": 0.3157894736842105 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8335714285714286, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8328571428571429, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.718058005095042, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7578125, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8602941176470589, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8204761904761906, + "1": 0.9709851551956815, + "2": 0.9969135802469135 + }, + "f1": { + "0": 0.7295057263411694, + "1": 0.9112021857923497, + "2": 0.9984350547730829 + }, + "micro_accuracy": { + "0": 0.7833333333333333, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 0.9921875 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7483787051805199, + "1": 0.8441241147015702, + "2": 0.8973686936504582 + }, + "precision": { + "0": 0.644046291872379, + "1": 0.706639359135763, + "2": 0.6252674536709237 + }, + "recall": { + "0": 0.7483787051805199, + "1": 0.8441241147015702, + "2": 0.8973686936504582 + }, + "f1": { + "0": 0.5434526186121773, + "1": 0.6435879597662877, + "2": 0.6271769650286804 + }, + "micro_accuracy": { + "0": 0.7490234375, + "1": 0.828125, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8755316583355257, + "1": 0.9580742573167165, + "2": 0.9405548114248862 + }, + "precision": { + "0": 0.859083850931677, + "1": 0.9133160463697375, + "2": 0.9986357055351376 + }, + "recall": { + "0": 0.6639728113888039, + "1": 0.7492925540790846, + "2": 0.7847286008044015 + }, + "f1": { + "0": 0.6288275726168414, + "1": 0.7396604464261424, + "2": 0.8513149188082024 + }, + "micro_accuracy": { + "0": 0.8395522388059702, + "1": 0.9117997616209773, + "2": 0.9964200477326969 + }, + "coverage": { + "0": 0.78515625, + "1": 0.8193359375, + "2": 0.818359375 + } + } + } + }, + "mixed_mirrored_3": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "precision": { + "0": 0.08333333333333333, + "1": 0.08333333333333333, + "2": 0.18181818181818182 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.14965986394557823 + }, + "f1": { + "0": 0.041666666666666664, + "1": 0.043478260869565216, + "2": 0.07792207792207792 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.07894736842105263 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "precision": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "recall": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "f1": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.0, + "1": 0.0, + "2": 0.0 + }, + "coverage": { + "0": 0.7105263157894737, + "1": 0.7105263157894737, + "2": 0.34210526315789475 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8392857142857143, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8580882352941177, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8133333333333334, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.723930078360458, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.775, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.9375, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7491680009458922, + "1": 0.8394557063229706, + "2": 0.9043482342930064 + }, + "precision": { + "0": 0.6419566630470978, + "1": 0.7070699475962634, + "2": 0.6143888250977109 + }, + "recall": { + "0": 0.7491680009458922, + "1": 0.8394557063229706, + "2": 0.9043482342930064 + }, + "f1": { + "0": 0.5419177446497941, + "1": 0.6466704666481984, + "2": 0.6235559520324294 + }, + "micro_accuracy": { + "0": 0.7490234375, + "1": 0.828125, + "2": 0.953125 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8769426980800575, + "1": 0.9600812529099573, + "2": 0.9405557640017973 + }, + "precision": { + "0": 0.8721783741120759, + "1": 0.9258372579801151, + "2": 0.9986543715846994 + }, + "recall": { + "0": 0.6730232466776292, + "1": 0.7590380103213561, + "2": 0.7691659777283154 + }, + "f1": { + "0": 0.642535529030425, + "1": 0.7538350402378683, + "2": 0.8408666689289438 + }, + "micro_accuracy": { + "0": 0.8451053283767038, + "1": 0.9162735849056604, + "2": 0.9964071856287425 + }, + "coverage": { + "0": 0.7880859375, + "1": 0.828125, + "2": 0.8154296875 + } + } + } + }, + "wide_rotation_pad15_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07142857142857142, + "2": 0.23076923076923078 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.16553287981859413 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.04, + "2": 0.08606060606060605 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.10526315789473684 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.1111111111111111, + "1": 0.125, + "2": 0.0 + }, + "precision": { + "0": 0.125, + "1": 0.125, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.03333333333333333, + "1": 0.03508771929824561, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.047619047619047616, + "1": 0.047619047619047616, + "2": 0.0 + }, + "coverage": { + "0": 0.5526315789473685, + "1": 0.5526315789473685, + "2": 0.23684210526315788 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8314285714285715, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7150205761316872, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8369565217391305, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8559701492537314, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.810952380952381, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7192887281494875, + "1": 0.9166666666666666, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.7768595041322314, + "1": 0.9365079365079365, + "2": 1.0 + }, + "coverage": { + "0": 0.9453125, + "1": 0.984375, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.747328759098207, + "1": 0.8454837273735764, + "2": 0.9036214184094202 + }, + "precision": { + "0": 0.6395222105684603, + "1": 0.7136946895200903, + "2": 0.5967611146335022 + }, + "recall": { + "0": 0.747328759098207, + "1": 0.8454837273735764, + "2": 0.9036214184094202 + }, + "f1": { + "0": 0.5377248861803071, + "1": 0.6503312097081253, + "2": 0.611951126722742 + }, + "micro_accuracy": { + "0": 0.7470703125, + "1": 0.830078125, + "2": 0.9521484375 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8822807082760246, + "1": 0.9601694423038531, + "2": 0.940561322568243 + }, + "precision": { + "0": 0.8693050193050194, + "1": 0.9200274557657107, + "2": 0.9987048285014292 + }, + "recall": { + "0": 0.6837322998924033, + "1": 0.7691893860695195, + "2": 0.8028337651698323 + }, + "f1": { + "0": 0.6499633289417417, + "1": 0.7580175265318646, + "2": 0.8627144973850691 + }, + "micro_accuracy": { + "0": 0.843520782396088, + "1": 0.9137529137529138, + "2": 0.9964994165694282 + }, + "coverage": { + "0": 0.798828125, + "1": 0.837890625, + "2": 0.8369140625 + } + } + } + }, + "wide_rotation_mixed_padding_5": { + "focus": { + "zero": { + "accuracy": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.18140589569160998 + }, + "precision": { + "0": 0.07142857142857142, + "1": 0.07692307692307693, + "2": 0.2727272727272727 + }, + "recall": { + "0": 0.07692307692307693, + "1": 0.08333333333333333, + "2": 0.18140589569160998 + }, + "f1": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.1038961038961039 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.05263157894736842, + "2": 0.13157894736842105 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.14285714285714285, + "1": 0.125, + "2": 0.0 + }, + "precision": { + "0": 0.16666666666666666, + "1": 0.125, + "2": 0.0 + }, + "recall": { + "0": 0.038461538461538464, + "1": 0.041666666666666664, + "2": 0.0 + }, + "f1": { + "0": 0.037037037037037035, + "1": 0.03508771929824561, + "2": 0.0 + }, + "micro_accuracy": { + "0": 0.05263157894736842, + "1": 0.047619047619047616, + "2": 0.0 + }, + "coverage": { + "0": 0.5, + "1": 0.5526315789473685, + "2": 0.21052631578947367 + } + } + }, + "controls": { + "zero": { + "accuracy": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.819718309859155, + "1": 0.9180327868852459, + "2": 1.0 + }, + "recall": { + "0": 0.8300000000000001, + "1": 0.979757085020243, + "2": 1.0 + }, + "f1": { + "0": 0.7063008130081301, + "1": 0.9018817204301075, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.75, + "1": 0.921875, + "2": 1.0 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8492647058823529, + "1": 0.979757085020243, + "2": 1.0 + }, + "precision": { + "0": 0.8712121212121212, + "1": 0.9333333333333333, + "2": 1.0 + }, + "recall": { + "0": 0.8038095238095238, + "1": 0.9709851551956815, + "2": 1.0 + }, + "f1": { + "0": 0.7256105006105005, + "1": 0.9112021857923497, + "2": 1.0 + }, + "micro_accuracy": { + "0": 0.788135593220339, + "1": 0.936, + "2": 1.0 + }, + "coverage": { + "0": 0.921875, + "1": 0.9765625, + "2": 1.0 + } + } + }, + "random": { + "zero": { + "accuracy": { + "0": 0.7627640719793399, + "1": 0.84525571348092, + "2": 0.9045848540981611 + }, + "precision": { + "0": 0.6522622017963633, + "1": 0.7027911741020109, + "2": 0.6263418165501418 + }, + "recall": { + "0": 0.7627640719793399, + "1": 0.84525571348092, + "2": 0.9045848540981611 + }, + "f1": { + "0": 0.554575595992837, + "1": 0.6425760919272666, + "2": 0.6307037971623958 + }, + "micro_accuracy": { + "0": 0.75390625, + "1": 0.8291015625, + "2": 0.9560546875 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "fixed": { + "accuracy": { + "0": 0.8856378783397417, + "1": 0.9624757566791329, + "2": 0.9405711179188797 + }, + "precision": { + "0": 0.8762548262548263, + "1": 0.920560606060606, + "2": 0.9987126771255062 + }, + "recall": { + "0": 0.6880541222348207, + "1": 0.7749690157465541, + "2": 0.8043901127509411 + }, + "f1": { + "0": 0.6570247465701876, + "1": 0.7631441652575413, + "2": 0.8637128066391334 + }, + "micro_accuracy": { + "0": 0.8447432762836186, + "1": 0.9126891734575088, + "2": 0.9965156794425087 + }, + "coverage": { + "0": 0.798828125, + "1": 0.8388671875, + "2": 0.8408203125 + } + } + } + } + }, + "transitions": { + "none": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 2, + "accepted_wrong": 31, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 94, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 116, + "accepted_wrong": 8, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 731, + "accepted_wrong": 117, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 815, + "accepted_wrong": 63, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 948, + "accepted_wrong": 2, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + } + }, + "padded_scale": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 33, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 32, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 94, + "accepted_wrong": 28, + "wrong_to_correct": 1, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 117, + "accepted_wrong": 9, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 753, + "accepted_wrong": 118, + "wrong_to_correct": 25, + "correct_to_wrong": 3, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 8 + }, + "genus": { + "correct": 833, + "accepted_wrong": 64, + "wrong_to_correct": 20, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 4, + "correct_accepted_to_rejected": 4 + }, + "family": { + "correct": 963, + "accepted_wrong": 2, + "wrong_to_correct": 19, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 3 + } + } + }, + "wide_rotation_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 25, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 25, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 13, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 768, + "accepted_wrong": 129, + "wrong_to_correct": 44, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 13 + }, + "genus": { + "correct": 849, + "accepted_wrong": 75, + "wrong_to_correct": 40, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 974, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "rotation10_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 17, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 15, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 28, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 763, + "accepted_wrong": 124, + "wrong_to_correct": 38, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 10 + }, + "genus": { + "correct": 845, + "accepted_wrong": 69, + "wrong_to_correct": 34, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 968, + "accepted_wrong": 2, + "wrong_to_correct": 25, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "rotation30_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 23, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 9, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 22, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 22, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 98, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 766, + "accepted_wrong": 128, + "wrong_to_correct": 45, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 13 + }, + "genus": { + "correct": 846, + "accepted_wrong": 78, + "wrong_to_correct": 39, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 6, + "correct_accepted_to_rejected": 7 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 35, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 8 + } + } + }, + "rotation10_pad15_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 29, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 30, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 14, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 28, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + } + }, + "random": { + "species": { + "correct": 764, + "accepted_wrong": 127, + "wrong_to_correct": 42, + "correct_to_wrong": 9, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 848, + "accepted_wrong": 72, + "wrong_to_correct": 37, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 4 + }, + "family": { + "correct": 971, + "accepted_wrong": 4, + "wrong_to_correct": 30, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 5 + } + } + }, + "rotation30_pad15_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 21, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 23, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 25, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 768, + "accepted_wrong": 123, + "wrong_to_correct": 49, + "correct_to_wrong": 12, + "wrong_accepted_to_rejected": 13, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 846, + "accepted_wrong": 73, + "wrong_to_correct": 41, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 6 + }, + "family": { + "correct": 976, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "rotation30_pad25_3": { + "focus": { + "species": { + "correct": 3, + "accepted_wrong": 14, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 18, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 3, + "accepted_wrong": 15, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 17, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 5, + "accepted_wrong": 4, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 27, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 24, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 3, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 770, + "accepted_wrong": 127, + "wrong_to_correct": 51, + "correct_to_wrong": 12, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 846, + "accepted_wrong": 74, + "wrong_to_correct": 42, + "correct_to_wrong": 11, + "wrong_accepted_to_rejected": 8, + "correct_accepted_to_rejected": 7 + }, + "family": { + "correct": 977, + "accepted_wrong": 3, + "wrong_to_correct": 35, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "mixed_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 12, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 19, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 97, + "accepted_wrong": 26, + "wrong_to_correct": 4, + "correct_to_wrong": 1, + "wrong_accepted_to_rejected": 1, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + } + }, + "random": { + "species": { + "correct": 767, + "accepted_wrong": 129, + "wrong_to_correct": 42, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 11 + }, + "genus": { + "correct": 848, + "accepted_wrong": 74, + "wrong_to_correct": 36, + "correct_to_wrong": 3, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 6 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 31, + "correct_to_wrong": 4, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "mixed_mirrored_3": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 27, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 5, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 3, + "accepted_wrong": 13, + "wrong_to_correct": 1, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 18, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 27, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 1 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 767, + "accepted_wrong": 125, + "wrong_to_correct": 44, + "correct_to_wrong": 8, + "wrong_accepted_to_rejected": 10, + "correct_accepted_to_rejected": 9 + }, + "genus": { + "correct": 848, + "accepted_wrong": 71, + "wrong_to_correct": 38, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 2 + }, + "family": { + "correct": 976, + "accepted_wrong": 3, + "wrong_to_correct": 33, + "correct_to_wrong": 5, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 6 + } + } + }, + "wide_rotation_pad15_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 4, + "accepted_wrong": 9, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 22, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 27, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 765, + "accepted_wrong": 128, + "wrong_to_correct": 47, + "correct_to_wrong": 13, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 850, + "accepted_wrong": 74, + "wrong_to_correct": 44, + "correct_to_wrong": 9, + "wrong_accepted_to_rejected": 7, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 975, + "accepted_wrong": 3, + "wrong_to_correct": 34, + "correct_to_wrong": 7, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 9 + } + } + }, + "wide_rotation_mixed_padding_5": { + "focus": { + "species": { + "correct": 2, + "accepted_wrong": 18, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 14, + "correct_accepted_to_rejected": 0 + }, + "genus": { + "correct": 2, + "accepted_wrong": 20, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 12, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 5, + "accepted_wrong": 8, + "wrong_to_correct": 3, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 24, + "correct_accepted_to_rejected": 0 + } + }, + "controls": { + "species": { + "correct": 96, + "accepted_wrong": 25, + "wrong_to_correct": 4, + "correct_to_wrong": 2, + "wrong_accepted_to_rejected": 2, + "correct_accepted_to_rejected": 2 + }, + "genus": { + "correct": 118, + "accepted_wrong": 8, + "wrong_to_correct": 2, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + }, + "family": { + "correct": 128, + "accepted_wrong": 0, + "wrong_to_correct": 0, + "correct_to_wrong": 0, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 0 + } + }, + "random": { + "species": { + "correct": 772, + "accepted_wrong": 127, + "wrong_to_correct": 52, + "correct_to_wrong": 11, + "wrong_accepted_to_rejected": 11, + "correct_accepted_to_rejected": 12 + }, + "genus": { + "correct": 849, + "accepted_wrong": 75, + "wrong_to_correct": 44, + "correct_to_wrong": 10, + "wrong_accepted_to_rejected": 6, + "correct_accepted_to_rejected": 5 + }, + "family": { + "correct": 979, + "accepted_wrong": 3, + "wrong_to_correct": 37, + "correct_to_wrong": 6, + "wrong_accepted_to_rejected": 0, + "correct_accepted_to_rejected": 7 + } + } + } + } + }, + "timing": { + "method": "Exploratory warm single-process, 32 identical images, 3 interleaved rounds x 3 measurements, one warmup per recipe; decode to CPU results; not fresh-process release benchmark", + "batch": 32, + "seconds": { + "none": [ + 0.2144804639974609, + 0.21811851099482737, + 0.21199875899765175, + 0.2025995919975685, + 0.2070328289992176, + 0.2339461060037138, + 0.2246835510013625, + 0.2197865449998062, + 0.2400066670088563 + ], + "padded_scale": [ + 0.6202133540064096, + 0.6080010169971501, + 0.6066630909917876, + 0.583017093988019, + 0.5802010240004165, + 0.5892352749942802, + 0.6062776319886325, + 0.6001413670019247, + 0.5942272360116476 + ], + "wide_rotation_5": [ + 0.992464380004094, + 0.9940366090013413, + 1.0267372250091285, + 1.0365073889988707, + 0.9982934959989507, + 1.0329979649977759, + 1.0356882339983713, + 1.0375133589986945, + 1.0317529160092818 + ], + "rotation30_3": [ + 0.6086884120013565, + 0.6424980370065896, + 0.6187205320020439, + 0.630254628995317, + 0.6108514070074307, + 0.6221653319953475, + 0.6147350599931087, + 0.6545881219935836, + 0.6308053899992956 + ], + "rotation30_pad15_3": [ + 0.6207602969952859, + 0.6105574930115836, + 0.6377247320051538, + 0.6011321569967549, + 0.6059658189915353, + 0.5964651920075994, + 0.6439924529986456, + 0.6569824749894906, + 0.6281276770023396 + ], + "rotation30_pad25_3": [ + 0.5991483570105629, + 0.6064385210047476, + 0.6497168549976777, + 0.6321360770089086, + 0.617195097001968, + 0.6384922729921527, + 0.6308419309934834, + 0.6193708399950992, + 0.6806321479962207 + ], + "mixed_3": [ + 0.6288331899995683, + 0.6368726570071885, + 0.6247023649921175, + 0.7049452380015282, + 0.6457830569997896, + 0.6081822200067108, + 0.7204734019906027, + 0.6742006679996848, + 0.6673803730082 + ] + }, + "images_per_second": { + "none": 146.709235516278, + "padded_scale": 53.3207703375951, + "wide_rotation_5": 31.015177668479808, + "rotation30_3": 51.43327400993679, + "rotation30_pad15_3": 51.54968859138072, + "rotation30_pad25_3": 50.72586083427381, + "mixed_3": 49.55224460156506 + }, + "script_sha256": "1177b71a6eea7b03ed0c79019a9059684061574fcb39a6b168dd3d33c2287d0c" + }, + "inputs_sha256": { + "local-evidence/mambo-error-trace/samples.json": "fbcbd120960076b989b3148d68964d03f0574f20cec87c6dfc1f117bbf710dac", + "local-evidence/mambo-family-exploration/reporting-ids.json": "85148a818f9316d36f622bc5a9a346cb75325f2d0eb9f86fde6a81d3d89dd92d", + "local-evidence/mambo-v3/flemming-manifest.json": "04e56e9189933b6758b192f587e296e49012fd935baa00c04ca91e0a3ce3795f" + } +} diff --git a/docs/mambo-compact-tta.md b/docs/mambo-compact-tta.md new file mode 100644 index 0000000..09aae0b --- /dev/null +++ b/docs/mambo-compact-tta.md @@ -0,0 +1,172 @@ +# Compact padding-and-rotation TTA qualification + +**Composing stronger padding into existing rotation views improves the preliminary +five-view recipe without adding passes.** The leading five-view candidate uses +original, ±10° with 15% padding, and ±30° with 25% padding. Three-view candidates +remain useful cost/quality alternatives. This is exploratory qualification, not +a release-default change or a replacement for full-data evaluation. + +Each transformed view rotates the decoded image once with bilinear interpolation, +expands the canvas to retain the image extent, fills rotation corners with RGB +(124,116,104), then edge-pads **each side** by the specified fraction of its axis. +Ordinary deployment preprocessing follows. Padding produces a wider framing; +it is combined with rotation in each view, rather than added as separate model +passes. There is no additional crop transform. Mean FP32 leaf logits feed the +existing regional filter and hierarchy. The earlier `wide_rotation_5` already +pads every rotated view by 8%; its five views are original and ±10°/±30°. + +## Evidence population and controls + +Native CUDA automatic precision (FP16 backbone, FP32 head), legacy northern Europe, +batch 32, four preparation/runtime threads. Thirteen cached individual views form +ten initial recipes through the existing public callable TTA interface. Two +five-view compositions were then added using the same cached views; these are +explicitly post-hoc candidates, not independent confirmation. + +- The same 38 flagged family-error images and 128 controls correct/accepted at + family level in both V2 and ordinary V3. +- A disjoint uniform random sample of 1,024 reporting images, seed 20260925, + selected without reference to prediction correctness. It is not an independent + validation set: it comes from the already-studied Flemming reporting partition. +- All predictive metrics use pinned `mini_metrics`; both threshold zero and the + **same ordinary-V3 thresholds** are reported. No recipe-specific optimization. + Thresholds at species/genus/family are 0.8099595 / 0.8210953 / 0.9708009. +- Raw cached aggregation agrees with the ordinary TTA API at atol=1e-6 for identical + batch shape. Regression checks show the composed 8% transform exactly reproduces + the earlier rotation transform. + +## Random sample: no confidence threshold + +All truth, no class truncation. These small-sample macro metrics are not comparable +to the headline full-data or 52,788-image tables. + +| Recipe | Views | Species macro accuracy | Macro-F1: species / genus / family | +|---|---:|---:|---:| +| `none` | 1 | 72.88% | 0.4849 / 0.5679 / 0.5016 | +| `padded_scale` | 3 | 74.55% | 0.5195 / 0.6213 / 0.5717 | +| `wide_rotation_5` | 5 | 74.54% | 0.5410 / 0.6491 / 0.6261 | +| `wide_rotation_pad15_5` | 5 | 74.73% | 0.5377 / 0.6503 / 0.6120 | +| `wide_rotation_mixed_padding_5` | 5 | 76.28% | 0.5546 / 0.6426 / 0.6307 | +| `rotation30_3` | 3 | 74.53% | 0.5388 / 0.6454 / 0.6658 | +| `rotation30_pad15_3` | 3 | 74.69% | 0.5358 / 0.6492 / 0.6360 | +| `rotation30_pad25_3` | 3 | 76.30% | 0.5523 / 0.6423 / 0.6521 | +| `mixed_3` | 3 | 74.84% | 0.5435 / 0.6436 / 0.6272 | +| `mixed_mirrored_3` | 3 | 74.92% | 0.5419 / 0.6467 / 0.6236 | + +## Random sample: fixed confidence thresholds + +Each cell is **macro-F1 / coverage**. These thresholds were calibrated for ordinary +V3, so the candidates will need their own calibration before selecting deployment +operating points. + +| Recipe | Species | Genus | Family | +|---|---:|---:|---:| +| `none` | 0.5979 / 71.48% | 0.6982 / 75.10% | 0.8095 / 72.36% | +| `padded_scale` | 0.6044 / 74.71% | 0.7153 / 78.61% | 0.8334 / 77.93% | +| `wide_rotation_5` | 0.6398 / 79.20% | 0.7450 / 82.91% | 0.8452 / 82.42% | +| `wide_rotation_pad15_5` | 0.6500 / 79.88% | 0.7580 / 83.79% | 0.8627 / 83.69% | +| `wide_rotation_mixed_padding_5` | 0.6570 / 79.88% | 0.7631 / 83.89% | 0.8637 / 84.08% | +| `rotation30_3` | 0.6392 / 78.91% | 0.7419 / 82.91% | 0.8522 / 82.52% | +| `rotation30_pad15_3` | 0.6580 / 79.00% | 0.7671 / 83.11% | 0.8596 / 83.01% | +| `rotation30_pad25_3` | 0.6515 / 79.49% | 0.7688 / 83.11% | 0.8643 / 83.50% | +| `mixed_3` | 0.6288 / 78.52% | 0.7397 / 81.93% | 0.8513 / 81.84% | +| `mixed_mirrored_3` | 0.6425 / 78.81% | 0.7538 / 82.81% | 0.8409 / 81.54% | + +The 25% recipe has higher species macro accuracy and F1 without thresholding than +the default and five-view recipe. At fixed thresholds, 15% has slightly higher +species F1; 25% has slightly higher genus/family F1 and coverage. Neither dominates +all metrics. Three-view ±30° with 8% padding has the highest unthresholded family +F1 among these candidates, further showing that there is no single universal winner. + +## Targeted errors and possible harm + +Family-level diagnostic counts at the same fixed threshold: + +| Recipe | Correct flagged cases /38 | Accepted wrong flagged cases /38 | Previously accepted errors now rejected | Correct/accepted controls becoming rejected /128 | +|---|---:|---:|---:|---:| +| `none` | 2 | 31 | 0 | 0 | +| `padded_scale` | 2 | 21 | 11 | 0 | +| `wide_rotation_5` | 4 | 13 | 19 | 0 | +| `wide_rotation_pad15_5` | 4 | 9 | 22 | 0 | +| `wide_rotation_mixed_padding_5` | 5 | 8 | 24 | 0 | +| `rotation30_3` | 4 | 9 | 22 | 0 | +| `rotation30_pad15_3` | 4 | 8 | 23 | 0 | +| `rotation30_pad25_3` | 5 | 4 | 27 | 0 | +| `mixed_3` | 3 | 12 | 19 | 1 | +| `mixed_mirrored_3` | 3 | 13 | 18 | 0 | + +With the three-view 25% recipe, only three initially wrong family predictions become correct; +27 previously accepted errors become rejected. Confidence suppression is the main +benefit on the flagged cases. All 128 selected controls remain family-correct; +the 15% and 25% recipes also keep them all accepted. Some flagged images are visually +similar, and 16 have truth species absent from the model vocabulary, so these 38 +cases are not independent or representative. + +The random sample exposes trade-offs that the easy family controls cannot: +the three-view 25% recipe has 127 accepted species errors versus 118 with the default, while +species coverage rises from 74.71% to 79.49%. Accepted family errors rise from two +to three. Relative to single-view inference, it corrects 51 species predictions +but breaks 12; the default corrects 25 and breaks three. Better aggregate metrics +therefore do not mean every image improves or every wrong confidence decreases. + +## Five-view composition: equal-budget comparison + +At the same five-view budget, replacing 8% padding with 15% on the ±10° views and +25% on the ±30° views improves fixed-threshold macro-F1 at every rank: +0.6398 → 0.6570 species, 0.7450 → 0.7631 genus, 0.8452 → 0.8637 family. +Coverage also increases (79.20% → 79.88%, 82.91% → 83.89%, 82.42% → 84.08%). +Flagged accepted family errors fall from 13 to eight, while all 128 family controls +stay correct and accepted. On the random sample, correct family predictions rise +from 974 to 979; accepted family errors remain three. + +This is direct support for composing transformations rather than adding standalone +views. The mixed-padding five-view candidate has better genus accuracy and family +micro accuracy than the three-view 25% candidate, while the latter rejects more +flagged errors and costs fewer passes. Both deserve broader qualification. There +is no blanket preference for three views or prohibition on additional views when +they supply useful diversity. + +## Inference cost + +Exploratory warm native-GPU timings on the same 32-image bank, three interleaved +rounds of three observations per recipe, after one warmup per recipe. Includes +image decoding through completed CPU results. These single-process timings are +not the fresh-process release benchmark and have no CPU or new ONNX counterpart. + +| Recipe | Views | Images/s | +|---|---:|---:| +| `none` | 1 | 146.7 | +| `padded_scale` | 3 | 53.3 | +| `wide_rotation_5` | 5 | 31.0 | +| `rotation30_3` | 3 | 51.4 | +| `rotation30_pad15_3` | 3 | 51.5 | +| `rotation30_pad25_3` | 3 | 50.7 | +| `mixed_3` | 3 | 49.6 | + +The three-view 25% recipe is about 1.64× as fast as five-view wide rotation, and about 5% +slower than the current three-view default in this warm diagnostic. Composition +therefore preserves the three-pass budget with only modest transform overhead. +The two added five-view compositions have not yet been timed. + +## Next qualification and reproduction + +Advance mixed-padding five-view and the 15%/25% three-view recipes to full-data native/ONNX evaluation, +with separate calibration/reporting, full and support >5 metrics, and coverage. +Then compare at matched coverage as well as each recipe’s optimized thresholds, +and benchmark CPU/GPU end-to-end cost before changing the enabled-TTA default. +This study does not establish in-domain behavior or independent generalization. + +The [compact evidence](assets/mambo-compact-tta.json) includes all twelve recipes, +all ranks, precision/recall, both confidence settings, sample IDs and transitions. +Raw view logits, canonical predictions and input records remain in ignored local evidence. +The [inference collector](../dev/releases/mambo_v3/compact_tta.py) and +[mini_metrics collector](../dev/releases/mambo_v3/compact_tta_metrics.py) reproduce it: + +```sh +CUDA_VISIBLE_DEVICES=0 /path/to/gpu-env/bin/python -m dev.releases.mambo_v3.compact_tta \ + --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ + --root /path/to/flemming --samples /path/to/original-error-study/samples.json \ + --reporting-ids /path/to/reporting-ids.json --output /path/to/fresh-output +/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.compact_tta_metrics \ + --root /path/to/fresh-output +``` diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index a2b77ed..a58c79d 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -52,6 +52,14 @@ averaged in FP32 and normalized to unit length; a nonfinite or near-zero mean raises an error. Averaged embeddings have not been qualified for downstream retrieval/clustering. The default single-view representation is unchanged. +## Compact composition follow-up + +The [padding-and-rotation study](mambo-compact-tta.md) tests compositions within three and five views +against the current default and earlier five-view wide rotation on flagged cases and a separate random sample. +It identifies promising compositions at both three- and five-view budgets, +with confidence/coverage trade-offs. These remain experimental; `tta=True` still +selects the qualified padded-scale default. + ## Qualification Both automatic GPU backends passed a fixed, seeded **1,024-image / 201-species** diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 2c75599..1654677 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -413,3 +413,14 @@ def capture(*args, **kwargs): monkeypatch.setattr("sys.argv", ["mambo_predict", "-i", "example.jpg", "--bundle", str(bundle), *options]) with pytest.raises(Parsed): cli.run() + + +@pytest.mark.parametrize("degrees", [-30, -10, 10, 30]) +def test_composed_rotation_reproduces_existing_padded_rotation(degrees): + from dev.releases.mambo_v3.compact_tta import rotate_pad + from dev.releases.mambo_v3.tta_candidates import rotate + + image = np.random.default_rng(42).integers(0, 256, (3, 47, 83), dtype=np.uint8) + original = image.copy() + np.testing.assert_array_equal(rotate_pad(image, degrees, 0.08), rotate(image, degrees)) + np.testing.assert_array_equal(image, original) From 637316c29f854d12f3173f81d4cb465a083d4217 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 14:12:07 +0200 Subject: [PATCH 047/221] feat: collect full composed TTA and matched-coverage comparisons --- dev/releases/mambo_v3/composed_full.py | 106 +++++++++++++ dev/releases/mambo_v3/composed_metrics.py | 176 ++++++++++++++++++++++ tests/releases/test_release_evaluation.py | 31 ++++ 3 files changed, 313 insertions(+) create mode 100644 dev/releases/mambo_v3/composed_full.py create mode 100644 dev/releases/mambo_v3/composed_metrics.py diff --git a/dev/releases/mambo_v3/composed_full.py b/dev/releases/mambo_v3/composed_full.py new file mode 100644 index 0000000..9744bb2 --- /dev/null +++ b/dev/releases/mambo_v3/composed_full.py @@ -0,0 +1,106 @@ +"""Stream three composed TTA policies from seven shared views per image.""" + +import argparse +import csv +import time +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from functools import partial +from pathlib import Path + +import numpy as np + +from deployment.mambo_deploy import TTA, Predictor +from deployment.mambo_deploy.preprocessing import _rgb, preprocess +from deployment.mambo_deploy.results import Prediction, hierarchy +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.compact_tta import policies +from dev.releases.mambo_v3.evaluate import runtime_settings +from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, canonical_rows, load_records, write_json + +SHORTLIST = ("rotation30_pad15_3", "rotation30_pad25_3", "wide_rotation_mixed_padding_5") + + +def prepare(image, transform): + return preprocess(transform(image.copy())) + + +def collect(args): + args.output.mkdir(parents=True, exist_ok=False) + _, records = load_records(args.manifest, args.root, args.count, 20260923) + views, parameters, all_recipes = policies() + recipes = {name: all_recipes[name] for name in SHORTLIST} + keys = list(dict.fromkeys(key for names in recipes.values() for key in names)) + report = { + "status": "running", + "backend": args.backend, + "samples": len(records), + "processed": 0, + "recipes": recipes, + "parameters": {key: parameters[key] for key in keys}, + "manifest_sha256": file_hash(args.manifest), + "bundle_sha256": file_hash(args.bundle / "release.json"), + "runner_sha256": file_hash(__file__), + "transforms_sha256": file_hash(Path(__file__).with_name("compact_tta.py")), + "runtime": runtime_settings(4, args.backend), + "batch_size": args.batch_size, + } + predictor = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=args.batch_size) + report["effective_precision"] = predictor.effective_precision + start = time.perf_counter() + write_json(args.output / "report.json", report) + try: + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=4)) + writers = {} + for name in recipes: + folder = args.output / name + folder.mkdir() + stream = stack.enter_context((folder / "mini_metric.csv").open("w", newline="")) + writers[name] = csv.writer(stream) + writers[name].writerow(CSV_COLUMNS) + for offset in range(0, len(records), args.batch_size): + batch = records[offset : offset + args.batch_size] + paths = [args.root / r["path"] for r in batch] + for path, record in zip(paths, batch, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError(f"Changed image: {path}") + decoded = list(pool.map(_rgb, paths)) + raw = {} + for key in keys: + prepared = np.stack(list(pool.map(partial(prepare, transform=views[key]), decoded))) + raw[key] = predictor._infer(prepared, False)[0].astype(np.float32) + if not np.isfinite(raw[key]).all(): + raise ValueError("Nonfinite logits") + for name, names in recipes.items(): + averaged = sum(raw[key] / np.float32(len(names)) for key in names) + prediction = Prediction(*hierarchy(averaged, predictor.selected, predictor.bundle.classes)) + writers[name].writerows(canonical_rows(batch, prediction, offset)) + if offset == 0: + predictor.tta = TTA(tuple(views[key] for key in names), name) + check = predictor._infer_batch(paths, pool=pool)[0] + np.testing.assert_allclose(check, averaged, rtol=0, atol=1e-6) + report["processed"] = offset + len(batch) + if offset % (args.batch_size * 25) == 0: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(args.output / "report.json", report) + print(args.backend, report["processed"], len(records), round(report["elapsed_seconds"], 1), flush=True) + report.update(status="complete", csv_sha256={n: file_hash(args.output / n / "mini_metric.csv") for n in recipes}) + if args.backend == "onnx": + report["providers"] = {k: s.get_providers() for k, s in predictor._sessions.items()} + except Exception as error: + report.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + report["elapsed_seconds"] = time.perf_counter() - start + write_json(args.output / "report.json", report) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument(f"--{name}", type=Path, required=True) + parser.add_argument("--backend", choices=("torch", "onnx"), required=True) + parser.add_argument("--batch-size", type=int, default=32) + parser.add_argument("--count", type=int) + collect(parser.parse_args()) diff --git a/dev/releases/mambo_v3/composed_metrics.py b/dev/releases/mambo_v3/composed_metrics.py new file mode 100644 index 0000000..ca96899 --- /dev/null +++ b/dev/releases/mambo_v3/composed_metrics.py @@ -0,0 +1,176 @@ +"""Full composed-TTA calibration, matched-coverage diagnostics and support truncation.""" + +import argparse +import csv +import importlib.metadata +import json +from collections import Counter +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.composed_full import SHORTLIST +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.tail_report import eligible_classes +from dev.releases.mambo_v3.threshold_report import identity + + +def matched_thresholds(data, coverage): + """Label-free reporting-score operating points; never used as deployment calibration.""" + return [float(np.quantile(data.confidence[data.level == level], 1 - coverage, method="higher")) for level in range(3)] + + +def collect(args): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall, OptimalConfidenceThreshold, evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError("Require pinned mini_metrics") + args.output.mkdir(parents=True, exist_ok=True) + baseline = json.loads(args.baseline.read_text()) + sources = {model: row["source"] for model, row in baseline["models"].items()} + for backend in args.backends: + folder = args.root / backend + report = json.loads((folder / "report.json").read_text()) + if report["status"] != "complete" or report["samples"] != 58640: + raise ValueError(f"Incomplete full run: {folder}") + for recipe in SHORTLIST: + source = folder / recipe / "mini_metric.csv" + if file_hash(source) != report["csv_sha256"][recipe]: + raise ValueError("Changed prediction source") + sources[f"{backend}:{recipe}"] = str(source) + class_metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} + groups, result = ( + {}, + { + "revision": REVISION, + "calibration": "MacroF1 eps=0.01 use_quantiles=True n_bootstraps=0; shared stratified seed42 90/10 report/calibration split", + "matched_coverage": ( + "Label-free quantiles of reporting confidences; realized coverage computed by mini_metrics, ties retained. " + "Diagnostic only, not deployable calibration." + ), + "support": ( + "Full per-model class domain; >5 common truth and accepted-prediction support " + "across all compared models separately per operating point" + ), + "models": {}, + }, + ) + expected = baseline["models"]["torch"]["identities"] + for model, source in sources.items(): + digest = file_hash(source) + if model in baseline["models"] and digest != baseline["models"][model]["source_sha256"]: + raise ValueError("Changed baseline predictions") + data = MetricDF.from_source(source) + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + identities = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if identities != expected: + raise ValueError(f"Changed evaluation populations: {model}") + if model in baseline["models"]: + thresholds = baseline["models"][model]["thresholds"] + else: + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[k]) for k in range(3)] + row = { + "source": source, + "source_sha256": digest, + "identities": identities, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + "operating_points": {}, + } + points = {"zero": [0.0] * 3, "optimized": thresholds} + points.update({f"coverage_{int(c * 100)}": matched_thresholds(reporting, c) for c in (0.7, 0.8, 0.9)}) + groups[model] = {} + for scope, vector in points.items(): + df = reporting.with_threshold(vector) + score = evaluate_file( + reporting, + threshold=vector, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + if model in baseline["models"] and scope in ("zero", "optimized"): + previous = baseline["models"][model][f"report_{scope}"] + for metric, levels in score.items(): + for level, value in levels.items(): + if not np.isclose(value, previous[metric][str(level)], atol=1e-12, rtol=0, equal_nan=True): + raise ValueError(f"Baseline changed: {model}/{scope}/{metric}/{level}") + row["operating_points"][scope] = {"thresholds": vector, "full": finite_json(score), "tail": {}} + per_class = {name: metric(df, aggregate=False, verbose=0) for name, metric in class_metrics.items()} + groups[model][scope] = {} + for level in range(3): + part = df[df.level == level] + groups[model][scope][level] = { + "truth": Counter(map(str, part.label)), + "predicted": Counter(map(str, part.prediction[part.prediction_made])), + "metrics": {name: values[level] for name, values in per_class.items()}, + } + result["models"][model] = row + write_json(args.output / f"{model.replace(':', '-')}.json", row) + print(model, thresholds, flush=True) + for scope in ("zero", "optimized", "coverage_70", "coverage_80", "coverage_90"): + for level in range(3): + domains = [eligible_classes(g[scope][level]["truth"], g[scope][level]["predicted"], 5) for g in groups.values()] + selected = set.intersection(*domains) + for model, g in groups.items(): + item = g[scope][level] + result["models"][model]["operating_points"][scope]["tail"][str(level)] = { + "classes": sorted(selected), + "class_count": len(selected), + "truth_images": sum(item["truth"][k] for k in selected), + "accepted_predictions": sum(item["predicted"][k] for k in selected), + "metrics": { + name: float(metric._aggregate_groups({k: v for k, v in item["metrics"][name].items() if str(k) in selected})) + if selected + else None + for name, metric in class_metrics.items() + }, + } + result = finite_json(result) + write_json(args.output / "composed-comparison.json", result) + export_csv(result, args.output / "composed-comparison.csv") + return result + + +def export_csv(data, path): + rows = [] + for model, result in data["models"].items(): + for scope, point in result["operating_points"].items(): + for k, rank in enumerate(("species", "genus", "family")): + level = str(k) + tail = point["tail"][level] + rows.append( + { + "model": model, + "scope": scope, + "rank": rank, + "threshold": point["thresholds"][k], + "report_images": result["report_images"], + "coverage": point["full"]["coverage"][level], + **{f"full_{name}": levels[level] for name, levels in point["full"].items() if name != "coverage"}, + **{f"tail_{name}": value for name, value in tail["metrics"].items()}, + "tail_classes": tail["class_count"], + "tail_truth_images": tail["truth_images"], + "tail_accepted_predictions": tail["accepted_predictions"], + } + ) + with path.open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=list(rows[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) + parser.add_argument("--backends", nargs="+", choices=("torch", "onnx"), default=["torch", "onnx"]) + parser.add_argument("--output", type=Path, required=True) + collect(parser.parse_args()) diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index 9f00684..af4d02f 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -211,3 +211,34 @@ def test_tail_support_requires_both_domains_and_strict_cutoff(): assert eligible_classes(truth, accepted, 0) == {"kept", "at_truth_cutoff", "at_prediction_cutoff"} assert eligible_classes(truth, accepted, 5) == {"kept"} assert eligible_classes(truth, accepted, 20) == set() + + +def test_matched_coverage_keeps_ties_and_does_not_use_truth(tmp_path): + import os + import subprocess + + executable = os.environ.get("MAMBO_METRICS_PYTHON") + if not executable: + pytest.skip("Set MAMBO_METRICS_PYTHON to the pinned metric environment") + source = tmp_path / "ties.csv" + with source.open("w", newline="") as stream: + writer = csv.writer(stream) + writer.writerow(CSV_COLUMNS) + for i, confidence in enumerate((0.1, 0.5, 0.5, 0.9)): + for rank in range(3): + writer.writerow([i, f"{i}.jpg", rank, "truth", "prediction", confidence, 0, 0, 1, -1]) + script = """ +import json,sys +from mini_metrics.data import MetricDF +from mini_metrics.metrics import evaluate_file +from dev.releases.mambo_v3.composed_metrics import matched_thresholds +from dev.releases.mambo_v3.metrics import finite_json +d = MetricDF.from_source(sys.argv[1]) +t = matched_thresholds(d, .5) +r = evaluate_file(d, threshold=t, simple=True, hierarchical=False, pattern='^coverage$', verbose=0) +print(json.dumps({'thresholds':t, 'coverage':finite_json(r)['coverage']})) +""" + result = json.loads(subprocess.check_output([executable, "-c", script, str(source)], text=True)) + assert result["thresholds"] == [0.5, 0.5, 0.5] + # A shared score must not be arbitrarily split to manufacture exact target coverage. + assert result["coverage"] == {"0": 0.75, "1": 0.75, "2": 0.75} From bcfe9e535334e2a0680f0c9a9f6310f076f98d64 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 16:44:46 +0200 Subject: [PATCH 048/221] docs: report full composed TTA quality and coverage comparison --- dev/releases/mambo_v3/composed_full.py | 5 + dev/releases/mambo_v3/composed_metrics.py | 17 + dev/releases/mambo_v3/composed_report.py | 141 + docs/assets/mambo-composed-tta.csv | 166 + docs/assets/mambo-composed-tta.json | 34064 ++++++++++++++++++++ docs/assets/mambo-composed-tta.svg | 3013 ++ docs/mambo-compact-tta.md | 3 + docs/mambo-composed-tta.md | 200 + docs/mambo-tta.md | 3 + 9 files changed, 37612 insertions(+) create mode 100644 dev/releases/mambo_v3/composed_report.py create mode 100644 docs/assets/mambo-composed-tta.csv create mode 100644 docs/assets/mambo-composed-tta.json create mode 100644 docs/assets/mambo-composed-tta.svg create mode 100644 docs/mambo-composed-tta.md diff --git a/dev/releases/mambo_v3/composed_full.py b/dev/releases/mambo_v3/composed_full.py index 9744bb2..ca81947 100644 --- a/dev/releases/mambo_v3/composed_full.py +++ b/dev/releases/mambo_v3/composed_full.py @@ -47,6 +47,11 @@ def collect(args): } predictor = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=args.batch_size) report["effective_precision"] = predictor.effective_precision + report["runtime"].update( + precision=predictor.effective_precision, + autocast=predictor.effective_precision in ("fp16", "bf16"), + tf32=predictor.effective_precision == "tf32", + ) start = time.perf_counter() write_json(args.output / "report.json", report) try: diff --git a/dev/releases/mambo_v3/composed_metrics.py b/dev/releases/mambo_v3/composed_metrics.py index ca96899..5327731 100644 --- a/dev/releases/mambo_v3/composed_metrics.py +++ b/dev/releases/mambo_v3/composed_metrics.py @@ -112,6 +112,23 @@ def collect(args): "predicted": Counter(map(str, part.prediction[part.prediction_made])), "metrics": {name: values[level] for name, values in per_class.items()}, } + if model.startswith("onnx:"): + native = model.replace("onnx:", "torch:", 1) + if native in result["models"]: + vector = result["models"][native]["thresholds"] + row["native_threshold_alignment"] = { + "thresholds": vector, + "scores": finite_json( + evaluate_file( + reporting, + threshold=vector, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + ), + } result["models"][model] = row write_json(args.output / f"{model.replace(':', '-')}.json", row) print(model, thresholds, flush=True) diff --git a/dev/releases/mambo_v3/composed_report.py b/dev/releases/mambo_v3/composed_report.py new file mode 100644 index 0000000..1575740 --- /dev/null +++ b/dev/releases/mambo_v3/composed_report.py @@ -0,0 +1,141 @@ +"""Readable full-data composed-TTA report from pinned metric evidence.""" + +import argparse +import json +from pathlib import Path + +SERIES = ( + ("v2", "MAMBO v2", "#8064a2"), + ("torch", "V3 single view", "#777777"), + ("torch-tta", "Current padded scale", "#098e92"), + ("torch:rotation30_pad15_3", "±30° / pad15 · 3 views", "#2d6cc0"), + ("torch:rotation30_pad25_3", "±30° / pad25 · 3 views", "#e8872e"), + ("torch:wide_rotation_mixed_padding_5", "Mixed padding · 5 views", "#98440b"), +) + + +def render(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + from matplotlib.lines import Line2D + + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "composed-tta-full-v1"}) + output.mkdir(parents=True, exist_ok=True) + fig, axes = plt.subplots(3, 3, figsize=(16, 12)) + for level, rank in enumerate(("species", "genus", "family")): + k = str(level) + for i, (model, label, color) in enumerate(SERIES): + points = data["models"][model]["operating_points"] + for col, scope in enumerate(("zero", "optimized")): + point = points[scope] + a, b = point["full"]["f1"][k], point["tail"][k]["metrics"]["f1"] + axes[level, col].plot([a, b], [i, i], color=color, alpha=0.5) + axes[level, col].scatter(a, i, facecolors="white", edgecolors=color, s=45) + axes[level, col].scatter(b, i, color=color, s=45) + cov = [points[f"coverage_{c}"]["full"]["coverage"][k] * 100 for c in (70, 80, 90)] + score = [points[f"coverage_{c}"]["full"]["f1"][k] for c in (70, 80, 90)] + axes[level, 2].plot(cov, score, marker="o", color=color, label=label) + for col, setting in enumerate(("Unthresholded", "Calibrated")): + axes[level, col].set( + title=f"{rank.title()} · {setting} Macro-F1", + xlim=(0, 1), + ylim=(len(SERIES) - 0.4, -0.6), + yticks=range(len(SERIES)), + yticklabels=[s[1] for s in SERIES] if col == 0 else [], + ) + axes[level, 2].set(title=f"{rank.title()} · Matched-coverage full F1", xlabel="Realized coverage (%)", ylabel="Macro-F1") + for ax in axes[level]: + ax.grid(alpha=0.15) + ax.spines[["top", "right"]].set_visible(False) + fig.suptitle("Composed TTA · shared 52,788-image reporting partition · native PyTorch", fontsize=16) + fig.legend( + handles=[ + Line2D([], [], marker="o", color="gray", markerfacecolor="white", linestyle="none", label="Full support"), + Line2D([], [], marker="o", color="gray", linestyle="none", label="Support >5 in truth and accepted predictions"), + ], + loc="upper center", + bbox_to_anchor=(0.5, 0.96), + ncol=2, + title="Fill = averaging domain (left and middle columns)", + ) + fig.text( + 0.03, + 0.02, + "Calibration: 5,852 separate images, per-recipe/rank mini_metrics Macro-F1 thresholds. All truth; legacy northern Europe.\n" + "Matched-coverage points use label-free reporting confidences; actual coverage includes score ties. " + "Lines are guides, not fitted curves.\n" + "Support >5 classes are common across all compared native/ONNX pipelines within each operating point; no evaluation rows removed.\n" + "Recipe exploration used this dataset. These are descriptive comparisons, " + "not independent validation; CSV includes all metrics/backends.", + fontsize=10, + ) + fig.tight_layout(rect=(0, 0.11, 1, 0.91)) + path = output / "mambo-composed-tta.svg" + fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-composed-tta.png", dpi=150, bbox_inches="tight") + plt.close(fig) + + +def tables(data, output): + text = "# Full composed-TTA comparison\n\n" + text += ( + "All quality results below use the same **52,788 reporting images**, with thresholds fitted on\n" + "5,852 separate calibration images. Every model uses legacy northern Europe and all truth,\n" + "including out-of-vocabulary labels. Metrics come from pinned `mini_metrics`. Recipe selection\n" + "used this dataset, including a reporting subset; this is not independent validation.\n\n" + "Metric cells show **full support / common support >5**. The latter requires more than five\n" + "truth instances and accepted predictions in every compared pipeline, separately per operating\n" + "point. Classes can differ between operating points. No evaluation rows are dropped.\n\n" + ) + for scope, title in (("zero", "No confidence threshold"), ("optimized", "Recipe-specific calibrated thresholds")): + text += f"## {title}\n\n" + for level, rank in enumerate(("species", "genus", "family")): + k = str(level) + text += ( + f"### {rank.title()}\n\n| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage |\n|---|---:|---:|---:|\n" + ) + for model, label, _ in SERIES: + point = data["models"][model]["operating_points"][scope] + full, tail = point["full"], point["tail"][k]["metrics"] + text += ( + f"| {label} | {full['accuracy'][k]:.2%} / {tail['accuracy']:.2%} " + f"| {full['f1'][k]:.4f} / {tail['f1']:.4f} | {full['coverage'][k]:.2%} |\n" + ) + text += "\n" + text += "![Calibrated, unthresholded and matched-coverage comparison](assets/mambo-composed-tta.svg)\n\n" + text += ( + "## Support excluded from the averaging domain\n\n" + "| Setting | Rank | Common classes | Truth images outside / % |\n|---|---|---:|---:|\n" + ) + for scope in ("zero", "optimized", "coverage_70", "coverage_80", "coverage_90"): + for k, rank in enumerate(("species", "genus", "family")): + row = data["models"]["torch"]["operating_points"][scope]["tail"][str(k)] + missing = 52788 - row["truth_images"] + text += f"| {scope} | {rank} | {row['class_count']} | {missing:,} / {missing / 52788:.2%} |\n" + text += ( + "\nPredicted-only classes have zero truth images and can still strongly affect macro-F1.\n" + "These are not rejection counts. Coverage is unchanged by support truncation.\n\n" + "## Evidence and interpretation\n\n" + "The [CSV](assets/mambo-composed-tta.csv) includes both backends, all ranks, macro accuracy,\n" + "precision, recall, F1, micro accuracy, Theil U, coverage, thresholds and retained-support counts.\n" + "The [JSON](assets/mambo-composed-tta.json) also records exact class sets, source hashes and\n" + "partition identities. Its ONNX entries include native-threshold comparisons to distinguish\n" + "backend differences from calibration differences.\n\n" + "Matched-coverage thresholds are selected from reporting confidence scores without using truth\n" + "labels; their realized coverage is computed by mini_metrics and may differ slightly because of\n" + "ties. They are diagnostic operating points, not deployment-calibrated thresholds.\n" + ) + (output / "mambo-composed-tta.md").write_text(text) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--data", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + data = json.loads(args.data.read_text()) + render(data, args.output) + tables(data, args.output) diff --git a/docs/assets/mambo-composed-tta.csv b/docs/assets/mambo-composed-tta.csv new file mode 100644 index 0000000..6a891c3 --- /dev/null +++ b/docs/assets/mambo-composed-tta.csv @@ -0,0 +1,166 @@ +model,scope,rank,threshold,report_images,coverage,full_accuracy,full_precision,full_recall,full_f1,full_micro_accuracy,full_theilU,tail_accuracy,tail_precision,tail_recall,tail_f1,tail_classes,tail_truth_images,tail_accepted_predictions +v2,zero,species,0.0,52788,1.0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444525,0.6871258619383193,0.9268446802176634,0.7950271126103922,0.8372379328631292,0.7950271126103922,0.7878300075502476,308,44643,39243 +v2,zero,genus,0.0,52788,1.0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.32128858585759745,0.792225505796772,0.9293295014713818,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133607,242,52567,44953 +v2,zero,family,0.0,52788,1.0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.26968398140672784,0.9454610896415853,0.8669636504107465,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270192,20,52783,52241 +v2,optimized,species,0.7484260499477386,52788,0.6973175721754944,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.4466755276813756,0.8340124966041836,0.9268446802176634,0.9521428623131191,0.950834091298276,0.6967497218946193,0.7799317319854288,272,42778,31024 +v2,optimized,genus,0.8759860098361969,52788,0.6981321512464954,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886133,0.9258405014517136,0.9293295014713818,0.9754975181801082,0.96822735165948,0.6927141276824689,0.7874852435844386,215,46868,34160 +v2,optimized,family,0.9553309082984924,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057,0.9986057092536875,0.8669636504107465,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.802095261069409,19,52770,40869 +v2,coverage_70,species,0.7434713244438171,52788,0.6999886337804047,0.8482344975724038,0.6389619346119313,0.5468981617462098,0.44937087163076467,0.8329409217612513,0.9268446802176634,0.9525904825539635,0.9530383920489972,0.701565632554905,0.7839107916744207,270,42705,31043 +v2,coverage_70,genus,0.8737562894821167,52788,0.6999886337804047,0.9531039745578903,0.7845297024249248,0.6206686411587036,0.5893305682633164,0.9254418013044302,0.9293295014713818,0.9746620588690518,0.9765518838609734,0.7007712382965899,0.7966054093358439,210,46789,34167 +v2,coverage_70,family,0.98415607213974,52788,0.6999886337804047,0.9984960251371973,0.9374379812137319,0.5742612899561486,0.6694678519956686,0.9992963654569565,0.8669636504107465,0.9982585554220179,0.9900565035745176,0.6040652862222203,0.7393484528820418,19,52770,36944 +v2,coverage_80,species,0.5681188702583313,52788,0.7999924225202698,0.8048570287937525,0.5306305982463984,0.6058964372202109,0.4161430255270702,0.7869287236561686,0.9268446802176634,0.9218031816400422,0.9314233316840236,0.7492859566639438,0.808804322038378,282,43436,34074 +v2,coverage_80,genus,0.6667134761810303,52788,0.7999924225202698,0.9313529816901988,0.6375035137033628,0.6996475066439409,0.5320636902859176,0.8951693109164102,0.9293295014713818,0.9495748403153426,0.9434952597958767,0.7611632950298957,0.8249046274137032,220,47497,38066 +v2,coverage_80,family,0.9347575902938844,52788,0.7999924225202698,0.9927903326406756,0.7487148238957816,0.670547749394969,0.6204806481364462,0.9979161733364906,0.8669636504107465,0.991651964110256,0.982316582583257,0.7165739962311568,0.820825282633827,19,52770,42212 +v2,coverage_90,species,0.3602153062820434,52788,0.8999962112601348,0.7565649535631609,0.42349111509646353,0.6607818075996174,0.365080834230572,0.7413121724304869,0.9268446802176634,0.8722225832302668,0.894765673851891,0.7823544809151759,0.8117772424631506,295,44256,36932 +v2,coverage_90,genus,0.4175159633159637,52788,0.8999962112601348,0.8750784339645986,0.4898323702122493,0.7565919852211191,0.44838372230079665,0.851628112568145,0.9293295014713818,0.9040361245609442,0.9005023638621836,0.8030735550598104,0.828518735633285,231,48032,41304 +v2,coverage_90,family,0.6952391862869263,52788,0.8999962112601348,0.9701041183589592,0.5096266926670753,0.7859717639076295,0.47323785280021996,0.9889073649203309,0.8669636504107465,0.9653837159945841,0.9451986498604876,0.8218848478072115,0.8736386001087222,19,52770,47443 +torch,zero,species,0.0,52788,1.0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.2592869317361531,0.7077555505039024,0.9292211983468999,0.8203118253354881,0.8392678347823381,0.8203118253354881,0.8100326163861944,308,44643,39953 +torch,zero,genus,0.0,52788,1.0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.32303518958457,0.7939683261347276,0.9278616328176507,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.805657178112806,242,52567,44773 +torch,zero,family,0.0,52788,1.0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224,0.9298325376979617,0.8486962980431905,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501339,20,52783,51891 +torch,optimized,species,0.8099595010280609,52788,0.7081344244904145,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044555,0.8338193199753886,0.9292211983468999,0.963494109771882,0.9626322859838098,0.7171390330256306,0.8016422382706134,272,42778,30977 +torch,optimized,genus,0.82109534740448,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725,0.9077246242716747,0.9278616328176507,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921,215,46868,35966 +torch,optimized,family,0.970800906419754,52788,0.7305827081912556,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791292,0.997951563553389,0.8486962980431905,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116,19,52770,38530 +torch,coverage_70,species,0.8241381645202637,52788,0.6999886337804047,0.86958680967719,0.7167252898445411,0.5705474537929165,0.5122730291185364,0.8354577683959838,0.9292211983468999,0.9672316998030942,0.9647766155724887,0.7128409633763704,0.7993028119491851,270,42705,30647 +torch,coverage_70,genus,0.9218662977218628,52788,0.6999886337804047,0.9660439693907655,0.8305261428723821,0.6273798603264148,0.6221364731441472,0.9193255933533598,0.9278616328176507,0.9824288448238584,0.9833895891353926,0.7075405452013525,0.8063455181681898,210,46789,33607 +torch,coverage_70,family,0.9825798273086548,52788,0.6999886337804047,0.9952393276120065,0.7964173234185559,0.6300210433137761,0.6078073153329585,0.9984844794457525,0.8486962980431905,0.9944876424981127,0.9914000560860179,0.6756125180195103,0.7948388506661144,19,52770,36926 +torch,coverage_80,species,0.6061448454856873,52788,0.7999924225202698,0.8333841588302096,0.5485047799955343,0.6370545006054973,0.445901326225418,0.804735969689794,0.9292211983468999,0.941697838071395,0.9410961417102457,0.7691340926734198,0.8312080391987352,282,43436,34441 +torch,coverage_80,genus,0.7092886567115784,52788,0.7999924225202698,0.9392760079927347,0.6547210280772727,0.7133811913319552,0.5584780260317714,0.8955008287946957,0.9278616328176507,0.9649697784339673,0.9547964398255602,0.7703699933851422,0.8399359589724344,220,47497,37907 +torch,coverage_80,family,0.9039735794067384,52788,0.7999924225202698,0.9767480012163248,0.6257303180264047,0.7059032105438684,0.5344474480496143,0.9955481884915937,0.8486962980431905,0.9862345277241655,0.9749910954156714,0.7634212953547233,0.8500844942394542,19,52770,42152 +torch,coverage_90,species,0.3223742842674255,52788,0.8999962112601348,0.7822620703147596,0.4110337432773394,0.6886066265817404,0.3648914489871293,0.7621503294112695,0.9292211983468999,0.891242198240585,0.898524732525704,0.8065329569944766,0.8353160761309999,295,44256,37604 +torch,coverage_90,genus,0.3692984879016876,52788,0.8999962112601348,0.8858347939502168,0.4723629331651541,0.7735925323689193,0.44134032210625124,0.8531015176071902,0.9278616328176507,0.9209837212851842,0.9006552910895744,0.8167651188996207,0.8434500014751452,231,48032,41630 +torch,coverage_90,family,0.5828610062599182,52788,0.8999962112601348,0.9151360267321503,0.39997022219300904,0.7680035104129965,0.37744401953419926,0.9795196699572712,0.8486962980431905,0.9543680309530158,0.9164661252394816,0.834546759568769,0.8677728056848387,19,52770,47224 +onnx,zero,species,0.0,52788,1.0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.25936240461341026,0.7078123816018792,0.9291859354966914,0.8208210511198463,0.8393910727128245,0.8208210511198463,0.8102958063278631,308,44643,39968 +onnx,zero,genus,0.0,52788,1.0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159487,0.793949382435402,0.9278774326101347,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500325,242,52567,44776 +onnx,zero,family,0.0,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.2808879232365721,0.9300409183905433,0.8489407553438706,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.784330436376383,20,52783,51893 +onnx,optimized,species,0.8161613345146179,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812275,0.8345029711489339,0.9291859354966914,0.9642506092928128,0.9626937682791291,0.7149144701582824,0.8001046982018766,272,42778,30845 +onnx,optimized,genus,0.8301631808280945,52788,0.7536561339698417,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153,0.908581339231852,0.9278774326101347,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827877,215,46868,35808 +onnx,optimized,family,0.9698503911495209,52788,0.7325907403197697,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552638,0.9979571783202317,0.8489407553438706,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118,19,52770,38636 +onnx,coverage_70,species,0.8243970274925232,52788,0.6999886337804047,0.8696078641344749,0.7154987852188989,0.5707796582704833,0.5116109757516245,0.8354036426619036,0.9291859354966914,0.9672641785336684,0.9648328354991503,0.7132879118596801,0.7996140862205406,270,42705,30645 +onnx,coverage_70,genus,0.9216671586036682,52788,0.6999886337804047,0.9661254181481168,0.8307688580940611,0.6277109684720645,0.6224978354796963,0.9192444047522395,0.9278774326101347,0.9825450538711241,0.9833893298187405,0.7076905240002949,0.8064963735413154,210,46789,33604 +onnx,coverage_70,family,0.982620656490326,52788,0.6999886337804047,0.9952396475419057,0.7964181852175016,0.630096313240106,0.6078714628660602,0.9984844794457525,0.8489407553438706,0.9944880129432593,0.9914012807476776,0.6757036342461201,0.7949333838727902,19,52770,36926 +onnx,coverage_80,species,0.6067228317260742,52788,0.7999924225202698,0.8328452370529146,0.5484999836385683,0.6369039477216849,0.44584696550387404,0.804759649538243,0.9291859354966914,0.9418513574630873,0.9410921687024294,0.7693785658461272,0.8313117853878524,282,43436,34446 +onnx,coverage_80,genus,0.7099964618682861,52788,0.7999924225202698,0.9392543348174218,0.654560571667988,0.7132182241768983,0.5583048362404305,0.8955245086431447,0.9278774326101347,0.9649382493245952,0.9544211478616387,0.7704551175301809,0.8398638030564497,220,47497,37907 +onnx,coverage_80,family,0.9041854739189148,52788,0.7999924225202698,0.9767639732185658,0.6257865447269096,0.7059843462574676,0.5345107480456108,0.9955718683400426,0.8489407553438706,0.9862530216214973,0.9750917116165754,0.7635195122711856,0.8501977679165007,19,52770,42152 +onnx,coverage_90,species,0.3231773376464844,52788,0.8999962112601348,0.7807145222813506,0.4112190997898548,0.6889577322256099,0.36507446215024497,0.7621082321244396,0.9291859354966914,0.8914832210371341,0.8988812031034508,0.807154235455831,0.835765327942146,295,44256,37602 +onnx,coverage_90,genus,0.3690774440765381,52788,0.8999962112601348,0.8861895291699214,0.47246294916839016,0.7740196989711382,0.4415744427244726,0.8532699067545096,0.9278774326101347,0.9214659032255056,0.9007912188383919,0.8173605632542287,0.8438589052760838,231,48032,41634 +onnx,coverage_90,family,0.5826917886734009,52788,0.8999962112601348,0.9151606889053974,0.3990993533111283,0.7680131308693198,0.37693960009408994,0.979603864530931,0.8489407553438706,0.9543965871536181,0.914266035432625,0.8345584053843181,0.8664984828887731,19,52770,47228 +torch-tta,zero,species,0.0,52788,1.0,0.7405864004487995,0.3117281910150932,0.7405864004487995,0.30013980437546733,0.7321360915359552,0.9416287278244636,0.8480295198511346,0.8592040363096476,0.8480295198511346,0.8369055759103206,308,44643,40958 +torch-tta,zero,genus,0.0,52788,1.0,0.8312879946116835,0.3578921081808225,0.8312879946116835,0.3600905137263133,0.8163029476396151,0.9429697597956094,0.8642419820735022,0.8426871013681415,0.8642419820735022,0.8341657275204103,242,52567,45474 +torch-tta,zero,family,0.0,52788,1.0,0.8579010503993526,0.2856847483669441,0.8579010503993526,0.2970441402135782,0.9478669394559369,0.8802152497213216,0.8865862079592552,0.7945542451008321,0.8865862079592552,0.8211324206407348,20,52783,52160 +torch-tta,optimized,species,0.7392672300338745,52788,0.7831893612184587,0.8659206758370823,0.6694908268387498,0.639254202340642,0.5238581475082266,0.8257020535519919,0.9416287278244636,0.9585814667783285,0.9585731812083509,0.7743974002343408,0.8413487263251,272,42778,33853 +torch-tta,optimized,genus,0.869922012090683,52788,0.7772978707281958,0.9627590640417357,0.8166841617561862,0.7031449724257084,0.6655108425187299,0.9116055761356989,0.9429697597956094,0.9771086466542604,0.9775547270341164,0.767268013502815,0.8477428518527236,215,46868,36949 +torch-tta,optimized,family,0.964760661125183,52788,0.7874327498673941,0.9955823574240963,0.7393905133847496,0.700159197162577,0.6072565582310141,0.998243799167609,0.8802152497213216,0.9948848349121117,0.9917013099030386,0.7564680159984232,0.8535629866805485,19,52770,41536 +torch-tta,coverage_70,species,0.8902084827423096,52788,0.6999886337804047,0.8906144707778789,0.7981732822929044,0.5796377324768266,0.5609290214340181,0.8444697031203485,0.9416287278244636,0.9733088758873599,0.9705609441193396,0.7175113900443769,0.8041322816170898,270,42705,30831 +torch-tta,coverage_70,genus,0.9606042504310608,52788,0.6999886337804047,0.9753286103689284,0.8964480054302681,0.6333947441461268,0.6669758159190942,0.9231414576060187,0.9429697597956094,0.9855571610067058,0.9869624081036315,0.7108155553452893,0.8092113545878005,210,46789,33743 +torch-tta,coverage_70,family,0.9924046397209167,52788,0.6999886337804047,0.9955883069989272,0.8894957303016392,0.6322405391393889,0.68215984063641,0.9989174853183946,0.8802152497213216,0.9948917238934942,0.9919946066968074,0.6782992761241996,0.7974755385050802,19,52770,36933 +torch-tta,coverage_80,species,0.6967090368270874,52788,0.7999924225202698,0.8608792923180646,0.6433940716376311,0.649735408471136,0.5139660613219256,0.821193464361828,0.9416287278244636,0.9554226848332942,0.9554094003741878,0.7845211799685287,0.8473164347855004,282,43436,34887 +torch-tta,coverage_80,genus,0.818070650100708,52788,0.7999924225202698,0.9575457407732273,0.7633603696735349,0.7240369843261408,0.6403702471656528,0.907056594837793,0.9429697597956094,0.974270531476802,0.9716244705685136,0.7802435176207189,0.8534011844503622,220,47497,38196 +torch-tta,coverage_80,family,0.9556875824928284,52788,0.7999924225202698,0.980043657507525,0.7392855318346994,0.7065130086457477,0.6105337132313392,0.9979872128818376,0.8802152497213216,0.9900505507981868,0.9915410749055935,0.7641594720043668,0.8587374419442199,19,52770,42196 +torch-tta,coverage_90,species,0.4103786051273346,52788,0.8999962112601348,0.8145174796850042,0.4925946020576832,0.7092768556597198,0.43138462249532483,0.783914626702309,0.9416287278244636,0.9175215805336097,0.9199110408254955,0.8271822185719119,0.8577180591837419,295,44256,38345 +torch-tta,coverage_90,genus,0.4679165780544281,52788,0.8999962112601348,0.9206265600944382,0.5628702690668548,0.7929657144502366,0.5213308664991891,0.8721294912542886,0.9429697597956094,0.9452283281513972,0.9293840070922701,0.8394534910703915,0.8708704993487821,231,48032,42116 +torch-tta,coverage_90,family,0.7022547125816345,52788,0.8999962112601348,0.9519711626779341,0.4890308893157449,0.7839285171996123,0.4572527582331337,0.9901702835252268,0.8802152497213216,0.9707034515218184,0.9500140243129231,0.8497758163671418,0.8936445866068157,19,52770,47370 +onnx-tta,zero,species,0.0,52788,1.0,0.7408884646998294,0.3129592874854792,0.7408884646998294,0.30114949302373306,0.7322118663332575,0.9416043541781303,0.8482708971423827,0.859125120067078,0.8482708971423827,0.8368704802655687,308,44643,40964 +onnx-tta,zero,genus,0.0,52788,1.0,0.831310673030869,0.35819829298724193,0.831310673030869,0.3604852264440997,0.8163029476396151,0.9429777628243508,0.8642721574907657,0.8423837204350251,0.8642721574907657,0.8339715279038667,242,52567,45478 +onnx-tta,zero,family,0.0,52788,1.0,0.8580571051602935,0.2856706122641368,0.8580571051602935,0.2970778194056521,0.9479237705539137,0.8802934722288728,0.8867656709343373,0.7945118367924103,0.8867656709343373,0.821233458216956,20,52783,52160 +onnx-tta,optimized,species,0.8280269503593445,52788,0.7404902629385466,0.8755166405852203,0.7362820959348587,0.6075669492667327,0.5430735533140522,0.8355803422957866,0.9416043541781303,0.9650388599694326,0.9639006969879437,0.7443741514376615,0.8223569195026883,272,42778,32341 +onnx-tta,optimized,genus,0.8708856105804443,52788,0.7768621656437069,0.9629823236784678,0.8168891977985718,0.703150166196618,0.6655370235633972,0.911799848813675,0.9429777628243508,0.9774284415058453,0.9775831973986752,0.7672866592834245,0.8477266855996487,215,46868,36936 +onnx-tta,optimized,family,0.966471254825592,52788,0.7846859134651815,0.9955854528269081,0.7395038777892725,0.6986717712105687,0.6065093177805807,0.998285935010381,0.8802934722288728,0.9948884190627355,0.9918743397836266,0.754667447740729,0.852383133337759,19,52770,41392 +onnx-tta,coverage_70,species,0.8901577591896057,52788,0.6999886337804047,0.8906299010400511,0.7966276731934266,0.5796284078643174,0.5599772016156898,0.8443073259181078,0.9416043541781303,0.9732493733693959,0.9705461373032799,0.7174933624601928,0.8041016918766225,270,42705,30827 +onnx-tta,coverage_70,genus,0.9606157541275024,52788,0.6999886337804047,0.9754350362986757,0.8965238930921287,0.6335466562733132,0.6671841623210293,0.9231414576060187,0.9429777628243508,0.9857081844689186,0.9870787691851511,0.7107978607072257,0.809253042786544,210,46789,33740 +onnx-tta,coverage_70,family,0.9924092292785645,52788,0.6999886337804047,0.9955876317644935,0.8894957438238706,0.6319719604359404,0.6819831887822367,0.9989174853183946,0.8802934722288728,0.9948909420430975,0.9919946237775208,0.6779741545358146,0.797243101854852,19,52770,36933 +onnx-tta,coverage_80,species,0.6970725059509277,52788,0.7999924225202698,0.8605050796504391,0.6425824308630953,0.6502626044247952,0.5141028667288083,0.8211697845133791,0.9416043541781303,0.95544016618753,0.9552347846466682,0.7851829659454762,0.8475942364745017,282,43436,34886 +onnx-tta,coverage_80,genus,0.8184317350387573,52788,0.7999924225202698,0.957481163977273,0.7612239102518993,0.7238724141381434,0.6402488255798201,0.9069145157470992,0.9429777628243508,0.9741774842920884,0.9714040423387499,0.7799920264882948,0.8531731226964174,220,47497,38190 +onnx-tta,coverage_80,family,0.9559080004692078,52788,0.7999924225202698,0.9800427091207768,0.7392855395634923,0.7064178836065658,0.6104810675107896,0.9979872128818376,0.8802934722288728,0.9900494526661626,0.9915410867021727,0.7640443206411466,0.8586543171222992,19,52770,42196 +onnx-tta,coverage_90,species,0.4094218313694,52788,0.8999962112601348,0.8145125280066268,0.49342728859876867,0.7093314621998333,0.4322191163505195,0.7838935780588941,0.9416043541781303,0.9179067496797524,0.9195647545876909,0.8271376014440223,0.8573977653891341,295,44256,38344 +onnx-tta,coverage_90,genus,0.4677167236804962,52788,0.8999962112601348,0.9189803824252353,0.5617081860676382,0.7928671954824282,0.5202478106264234,0.8720452966806289,0.9429777628243508,0.945175513586682,0.9293802024440366,0.8393151839568592,0.870823331898205,231,48032,42114 +onnx-tta,coverage_90,family,0.701670229434967,52788,0.8999962112601348,0.9520347449957101,0.4890652942611772,0.7838848111299506,0.4572588673034217,0.9902123808120566,0.8802934722288728,0.9707770731529273,0.9500882665635927,0.8497229090196569,0.8936577693374371,19,52770,47370 +torch:rotation30_pad15_3,zero,species,0.0,52788,1.0,0.7513310721181966,0.33541184570095794,0.7513310721181966,0.3207141524325515,0.7501515495946048,0.9506821380005821,0.8681389941924458,0.8803148570115105,0.8681389941924458,0.8587890346597373,308,44643,41699 +torch:rotation30_pad15_3,zero,genus,0.0,52788,1.0,0.8514761457282455,0.3869580883721579,0.8514761457282455,0.3880631831613022,0.8322156550731227,0.9530656934912801,0.8816751995436959,0.862662277317664,0.8816751995436959,0.8542468147491235,242,52567,45979 +torch:rotation30_pad15_3,zero,family,0.0,52788,1.0,0.8625346236914426,0.33597390634364505,0.8625346236914426,0.34855638987709453,0.9608244297946503,0.904888479697919,0.8919148172451592,0.8153308518106595,0.8919148172451592,0.8403410998409673,20,52783,52370 +torch:rotation30_pad15_3,optimized,species,0.7703565061092377,52788,0.8067363794801848,0.8643190221276298,0.7142382786297836,0.6585389181056288,0.5614510327382695,0.8301084863570187,0.9506821380005821,0.9633823854628971,0.9620682860611799,0.7992089334141771,0.8594740388924278,272,42778,34929 +torch:rotation30_pad15_3,optimized,genus,0.797132283449173,52788,0.8429188451920892,0.9624906870799902,0.7650612786044926,0.7634804910051127,0.66391037346047,0.9039014742898238,0.9530656934912801,0.9754344482950037,0.9752199938369727,0.8251593289180623,0.8840371546219599,215,46868,39740 +torch:rotation30_pad15_3,optimized,family,0.9761196076869965,52788,0.8184435856634084,0.989187457175979,0.8090769758102975,0.7304671232556951,0.6688685629268447,0.998750115730025,0.904888479697919,0.9874802135721861,0.9918462287830544,0.7931565581111449,0.8782448997518413,19,52770,43191 +torch:rotation30_pad15_3,coverage_70,species,0.93315851688385,52788,0.6999886337804047,0.8991772347974494,0.8456689437195946,0.5806579657362848,0.5804015634850642,0.8519931801575059,0.9506821380005821,0.9776436854882747,0.9755378203406662,0.722004661286145,0.8087591090852428,270,42705,31010 +torch:rotation30_pad15_3,coverage_70,genus,0.9804478883743286,52788,0.6999886337804047,0.9765122298670562,0.9212082467863876,0.6323255412674224,0.6760711493673188,0.9276880192687613,0.9530656934912801,0.9868260875650243,0.9869714825698337,0.7128497701246634,0.8100365271492445,210,46789,33975 +torch:rotation30_pad15_3,coverage_70,family,0.9972013235092164,52788,0.6999886337804047,0.9940919372828998,0.9105909518507277,0.6474373549878735,0.695180588011688,0.9994858055262374,0.904888479697919,0.9931590852749367,0.9923254128640772,0.6966954216249965,0.8129569140504668,19,52770,36945 +torch:rotation30_pad15_3,coverage_80,species,0.7864558100700378,52788,0.7999924225202698,0.8681525695853197,0.7256230124848712,0.6516322902727562,0.5638804990406792,0.8320625147999052,0.9506821380005821,0.964118819588285,0.9638007386543088,0.7943988204601052,0.857186007121519,282,43436,35175 +torch:rotation30_pad15_3,coverage_80,genus,0.8991661667823792,52788,0.7999924225202698,0.9690887320773804,0.8392267277587339,0.7280547849656653,0.6932378251822574,0.9128107980108927,0.9530656934912801,0.9788034405604307,0.9793962322786787,0.7879772281995084,0.8606213313448622,220,47497,38462 +torch:rotation30_pad15_3,coverage_80,family,0.9839562773704528,52788,0.7999924225202698,0.9893177583735553,0.8092924516803065,0.715811313718187,0.6613289841826895,0.9990054463651432,0.904888479697919,0.9876310886430639,0.9921524313351724,0.7754153149867931,0.8671339416025601,19,52770,42219 +torch:rotation30_pad15_3,coverage_90,species,0.4981422424316406,52788,0.8999962112601348,0.8275277881335519,0.5698267633908097,0.7148264203986453,0.49048063270161796,0.8008798332947441,0.9506821380005821,0.9332526939814978,0.939363112800583,0.8425608778485374,0.8754335683136774,295,44256,38822 +torch:rotation30_pad15_3,coverage_90,genus,0.5704049468040466,52788,0.8999962112601348,0.9323397607229976,0.6453578889070587,0.8030574959232933,0.5914681212088754,0.8852848933886212,0.9530656934912801,0.9539446830499735,0.9493471909350284,0.8504964110432653,0.8858621014410463,231,48032,42567 +torch:rotation30_pad15_3,coverage_90,family,0.8255183696746826,52788,0.8999962112601348,0.9662851300685152,0.6620438247654835,0.8161730537339364,0.6181949611573065,0.9956218821696942,0.904888479697919,0.9806985716582809,0.9658983715348495,0.8624928869086922,0.9082064719768487,19,52770,47456 +torch:rotation30_pad25_3,zero,species,0.0,52788,1.0,0.7493898333756177,0.3361085016262147,0.7493898333756177,0.3201483357303684,0.7508714101689778,0.9512236692214211,0.8695966338189322,0.8832470040020461,0.8695966338189322,0.8611832508395522,308,44643,41703 +torch:rotation30_pad25_3,zero,genus,0.0,52788,1.0,0.8472767012256567,0.3871858468468912,0.8472767012256567,0.38731172619778687,0.8324808668636812,0.9537143645936615,0.8812527981807469,0.8646719138069031,0.8812527981807469,0.855181947419072,242,52567,45974 +torch:rotation30_pad25_3,zero,family,0.0,52788,1.0,0.86366836103727,0.3473357735776554,0.86366836103727,0.35919021330288153,0.9622830946427219,0.9062358679592668,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541583,20,52783,52402 +torch:rotation30_pad25_3,optimized,species,0.7562050521373749,52788,0.8116049102068652,0.8633843418309688,0.7190416496691577,0.6588299780195079,0.566106644915547,0.8300772588287468,0.9512236692214211,0.963817038901828,0.961489880265137,0.8035377762915177,0.8618349502484031,272,42778,35185 +torch:rotation30_pad25_3,optimized,genus,0.7952321171760559,52788,0.8432030006819732,0.95774560113418,0.7891877764219916,0.7626880651777854,0.6776129515770067,0.9032149356338882,0.9537143645936615,0.9754640055183043,0.9744657384691411,0.8284961369731623,0.8857838500606222,215,46868,39827 +torch:rotation30_pad25_3,optimized,family,0.9765909910202026,52788,0.8209441539743881,0.9892254689058468,0.8402573230856973,0.7546408071160894,0.7073928412638566,0.9988231493446557,0.9062358679592668,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118,19,52770,43325 +torch:rotation30_pad25_3,coverage_70,species,0.9330438375473022,52788,0.6999886337804047,0.8958773246343307,0.8488359655175162,0.575642556980122,0.5778389555534205,0.8523720602960677,0.9512236692214211,0.977274427695301,0.9759679510257172,0.7245807100491324,0.810278348194081,270,42705,31144 +torch:rotation30_pad25_3,coverage_70,genus,0.9808310866355896,52788,0.6999886337804047,0.9766589295185959,0.9346999594698736,0.6367137848251249,0.68706311679764,0.928012773673243,0.9537143645936615,0.9871863309136562,0.9865580047875915,0.7144975277360381,0.8109127926788642,210,46789,34055 +torch:rotation30_pad25_3,coverage_70,family,0.9974275231361388,52788,0.6999886337804047,0.9934599375766446,0.9498878737701825,0.6454812993243774,0.7241944754879999,0.9994858055262374,0.9062358679592668,0.992427296141378,0.9919695314060105,0.6902789817732341,0.8073158286865963,19,52770,36945 +torch:rotation30_pad25_3,coverage_80,species,0.7825590372085571,52788,0.7999924225202698,0.8685831581947409,0.7408341935752873,0.6520466646970331,0.5728841408568456,0.8331754676770069,0.9512236692214211,0.9653788722710366,0.9636915943413662,0.7956290746750607,0.8575515862096464,282,43436,35239 +torch:rotation30_pad25_3,coverage_80,genus,0.9008587002754213,52788,0.7999924225202698,0.9684925893463145,0.8495310596183734,0.7285668935695543,0.6990184834220075,0.9127397584655458,0.9537143645936615,0.9788881421171708,0.9794636846683936,0.7901320143472512,0.8618171291762662,220,47497,38506 +torch:rotation30_pad25_3,coverage_80,family,0.9850324392318726,52788,0.7999924225202698,0.989354070043887,0.9107072776433661,0.7405947769417649,0.7559779769818279,0.9991001657589391,0.9062358679592668,0.9876731337350272,0.9924723507074099,0.7791005599416505,0.8697078644497735,19,52770,42222 +torch:rotation30_pad25_3,coverage_90,species,0.5055776238441467,52788,0.8999962112601348,0.8259918976166272,0.5745198109152063,0.713123054577747,0.492042775668204,0.8011534656591383,0.9512236692214211,0.9350519930314937,0.9387344030835514,0.8431093052722285,0.8753944002330876,295,44256,38826 +torch:rotation30_pad25_3,coverage_90,genus,0.5816248059272766,52788,0.8999962112601348,0.9275599703862233,0.6663984622722228,0.8037295174574243,0.6076394789666649,0.885305942032036,0.9537143645936615,0.9576218533224137,0.9504064753538914,0.8531971719555743,0.8879077068258153,231,48032,42580 +torch:rotation30_pad25_3,coverage_90,family,0.8369399309158325,52788,0.8999962112601348,0.9632627273411767,0.6557361064788253,0.8187844116433781,0.6053891583355393,0.9960849523248226,0.9062358679592668,0.9771989474476782,0.981015342831644,0.8656540043780165,0.9169624562903813,19,52770,47470 +torch:wide_rotation_mixed_padding_5,zero,species,0.0,52788,1.0,0.7552353473768904,0.33652687002568266,0.7552353473768904,0.32157178232724193,0.753731908767144,0.9525401112314309,0.8715579516601252,0.883662054978781,0.8715579516601252,0.8628306472516105,308,44643,41807 +torch:wide_rotation_mixed_padding_5,zero,genus,0.0,52788,1.0,0.8526658727375439,0.3940356914835521,0.8526658727375439,0.3957580012454397,0.8360043949382435,0.9550597834064932,0.8853243404403656,0.8667563365049132,0.8853243404403656,0.8585900247512551,242,52567,46080 +torch:wide_rotation_mixed_padding_5,zero,family,0.0,52788,1.0,0.8682120684665646,0.34808262594697054,0.8682120684665646,0.3600973207633851,0.9631734485110253,0.9086734404521702,0.8984438787365493,0.8300148274621234,0.8984438787365493,0.8529197006514678,20,52783,52398 +torch:wide_rotation_mixed_padding_5,optimized,species,0.7889324426651001,52788,0.8034212320982042,0.8703941893724045,0.7403659908254208,0.6565552978086161,0.57525880404229,0.8329914408997666,0.9525401112314309,0.9641487530176069,0.9614697038990926,0.7971390965681312,0.8576154488683261,272,42778,34859 +torch:wide_rotation_mixed_padding_5,optimized,genus,0.810388594865799,52788,0.8446048344320679,0.9607022983572389,0.7909544340740902,0.7604445669279044,0.6825116641787987,0.9049456095099249,0.9550597834064932,0.975113981160547,0.9740507775184749,0.8280259319833198,0.8854528533073914,215,46868,39833 +torch:wide_rotation_mixed_padding_5,optimized,family,0.9926556646823883,52788,0.7671629915889975,0.9945725610665762,0.8742831111794982,0.6934443095310503,0.6990191600388408,0.9993332839469591,0.9086734404521702,0.9937155970244568,0.9924777778677608,0.7483394678128908,0.8490963944391154,19,52770,40489 +torch:wide_rotation_mixed_padding_5,coverage_70,species,0.9378145933151244,52788,0.6999886337804047,0.8981579179311403,0.8482357262407203,0.5783557942848305,0.5797706028761002,0.8516413628859841,0.9525401112314309,0.9779798176414025,0.9763347531347621,0.7251636762866198,0.8110997447784023,270,42705,31006 +torch:wide_rotation_mixed_padding_5,coverage_70,genus,0.9829131960868835,52788,0.6999886337804047,0.9772508883665877,0.9332838510987757,0.6363193807367752,0.6865936749446687,0.9270385104597981,0.9550597834064932,0.9877629577875913,0.9879968037128767,0.7139534005861962,0.8109341992830557,210,46789,33950 +torch:wide_rotation_mixed_padding_5,coverage_70,family,0.9976515173912048,52788,0.6999886337804047,0.9941883574173919,0.9104544472981865,0.649008190569088,0.6981880604454596,0.9995128683932776,0.9086734404521702,0.9932707296411906,0.9921529860608669,0.6945483764378839,0.8112123602352538,19,52770,36944 +torch:wide_rotation_mixed_padding_5,coverage_80,species,0.7969815731048584,52788,0.7999924225202698,0.8703860488155565,0.7478527799932727,0.6541611168700917,0.5769583914374429,0.8337437840397821,0.9525401112314309,0.9642272032183972,0.9621322595440107,0.7940774494750392,0.8559202478885654,282,43436,35208 +torch:wide_rotation_mixed_padding_5,coverage_80,genus,0.909421443939209,52788,0.7999924225202698,0.9702370068158972,0.8641071843621503,0.7311401849680091,0.7126052675987479,0.9137106322519536,0.9550597834064932,0.9798380770766145,0.9813582892523279,0.7881178200935575,0.8613988006364001,220,47497,38452 +torch:wide_rotation_mixed_padding_5,coverage_80,family,0.9860424399375916,52788,0.7999924225202698,0.9895760191358332,0.8401325897859828,0.7351839613471405,0.6968757347312367,0.9990764859104901,0.9086734404521702,0.9879301274204382,0.9917603860229236,0.7725506252744735,0.8652970967233362,19,52770,42219 +torch:wide_rotation_mixed_padding_5,coverage_90,species,0.513369619846344,52788,0.8999962112601348,0.8297329234230693,0.5765988016597196,0.7158386940830017,0.4952952124369994,0.8030057462796523,0.9525401112314309,0.934962103106059,0.9381498118770788,0.8439005661627716,0.8761809466681394,295,44256,38932 +torch:wide_rotation_mixed_padding_5,coverage_90,genus,0.5913177728652954,52788,0.8999962112601348,0.9371673280837497,0.6672605314057598,0.8028247469715531,0.6092459823242529,0.8878317792418279,0.9550597834064932,0.9564080257719563,0.9529007912283691,0.8523142992788373,0.8890123517529243,231,48032,42643 +torch:wide_rotation_mixed_padding_5,coverage_90,family,0.8463716506958008,52788,0.8999962112601348,0.9685322979359694,0.6394863690228767,0.8178052140525619,0.5946226332779055,0.996295438758972,0.9086734404521702,0.9786013073845059,0.9791079040923648,0.8644686599259757,0.9158065618920347,19,52770,47467 +onnx:rotation30_pad15_3,zero,species,0.0,52788,1.0,0.7513525957454966,0.3357177251908713,0.7513525957454966,0.32100616569668566,0.7501704932939305,0.9506293360700655,0.8681754725478049,0.8800706763295238,0.8681754725478049,0.8586965864033043,308,44643,41703 +onnx:rotation30_pad15_3,zero,genus,0.0,52788,1.0,0.8515498392515479,0.3869534389691655,0.8515498392515479,0.3880775533670641,0.8322724861710995,0.9530907894039403,0.8817732545623048,0.8625063923843291,0.8817732545623048,0.8541158274741251,242,52567,45983 +onnx:rotation30_pad15_3,zero,family,0.0,52788,1.0,0.8624898678796847,0.3360275595138312,0.8624898678796847,0.3485676456240567,0.9608812608926272,0.904985777478236,0.8918633480616375,0.8154730327116526,0.8918633480616375,0.840370927570417,20,52783,52372 +onnx:rotation30_pad15_3,optimized,species,0.770552396774292,52788,0.8067174357808593,0.864259698288895,0.7129414582230171,0.6581485418241365,0.5603296083270611,0.82996360220735,0.9506293360700655,0.9632906010281114,0.9619290738861205,0.7985746451092541,0.8589686091730018,272,42778,34924 +onnx:rotation30_pad15_3,optimized,genus,0.7823580801486969,52788,0.8480336440100023,0.9602256286013219,0.7545606744376422,0.7659093737952452,0.6569306030813745,0.902649332082384,0.9530907894039403,0.9746103739038117,0.9741038410766583,0.8283883340772565,0.885697418184335,215,46868,39933 +onnx:rotation30_pad15_3,optimized,family,0.9773475527763367,52788,0.8160566795483822,0.9891968996008379,0.8090777567603441,0.7291856145583755,0.6682212708489148,0.9988161010260458,0.904985777478236,0.9874911469062333,0.9918473385541731,0.7916052581091266,0.8772909956369972,19,52770,43066 +onnx:rotation30_pad15_3,coverage_70,species,0.9332101345062256,52788,0.6999886337804047,0.8993042897125594,0.8457863797403911,0.580673410297893,0.5804525856869176,0.8519661172904658,0.9506293360700655,0.9778664722783771,0.9755371093676788,0.7220718478185935,0.8088370437219299,270,42705,31014 +onnx:rotation30_pad15_3,coverage_70,genus,0.9805076718330384,52788,0.6999886337804047,0.9765118678772962,0.9212369149917536,0.6322483811758616,0.6760309577391611,0.9276609564017212,0.9530907894039403,0.9868259053778615,0.9870146798561634,0.7130376570404691,0.810235529476725,210,46789,33976 +onnx:rotation30_pad15_3,coverage_70,family,0.9972158670425416,52788,0.6999886337804047,0.9940916257004148,0.9104815309041331,0.6457444404845172,0.6942029367124118,0.9994858055262374,0.904985777478236,0.9931587244952169,0.9921871969315368,0.6946461040683022,0.8116705307619455,19,52770,36945 +onnx:rotation30_pad15_3,coverage_80,species,0.7865936160087585,52788,0.7999924225202698,0.8690130364323082,0.724230514194755,0.6526380166096016,0.5635018832857759,0.8319441155576605,0.9506293360700655,0.9638203303886238,0.9635345560148336,0.7944708639020808,0.8571265688892376,282,43436,35170 +onnx:rotation30_pad15_3,coverage_80,genus,0.8993590474128723,52788,0.7999924225202698,0.9690858326600882,0.8392258546323281,0.7280490051317001,0.693231705845092,0.9128344778593417,0.9530907894039403,0.9787994209137294,0.9793948511514551,0.7879687686243412,0.8606111788082011,220,47497,38463 +onnx:rotation30_pad15_3,coverage_80,family,0.98397696018219,52788,0.7999924225202698,0.9893179755256315,0.8092930222080731,0.7157724451265104,0.6613159259846374,0.9990054463651432,0.904985777478236,0.9876313400823101,0.9921532420851567,0.775368263533711,0.8671146979422726,19,52770,42219 +onnx:rotation30_pad15_3,coverage_90,species,0.4986054003238678,52788,0.8999962112601348,0.824975364170027,0.5675215824090611,0.7147823674053605,0.4885422007895161,0.8008377360079143,0.9506293360700655,0.9328288030848192,0.9394816322721306,0.8424987667797293,0.8753591320112727,295,44256,38821 +onnx:rotation30_pad15_3,coverage_90,genus,0.5710593461990356,52788,0.8999962112601348,0.9323193587651343,0.6453036088704217,0.8029731865161972,0.5914080450287946,0.8852217474583763,0.9530907894039403,0.9539171260637532,0.9492454452386484,0.8503788888394346,0.8857468904117138,231,48032,42566 +onnx:rotation30_pad15_3,coverage_90,family,0.8259501457214355,52788,0.8999962112601348,0.9662856355824953,0.6620438236169384,0.8162293842273993,0.6182197789183784,0.9956218821696942,0.904985777478236,0.9806991569902577,0.9658983696004576,0.8625610764534104,0.9082482703112855,19,52770,47456 +onnx:rotation30_pad25_3,zero,species,0.0,52788,1.0,0.7493378530417095,0.335607011455683,0.7493378530417095,0.31973098589694526,0.7507577479730242,0.9512268480417431,0.8698036966650652,0.883195544629941,0.8698036966650652,0.8612589983083873,308,44643,41703 +onnx:rotation30_pad25_3,zero,genus,0.0,52788,1.0,0.8472504239634208,0.38755157575495597,0.8472504239634208,0.38771743876773856,0.8323861483670532,0.9536588165415049,0.8812178342202511,0.864319570078447,0.8812178342202511,0.8548890385082205,242,52567,45971 +onnx:rotation30_pad25_3,zero,family,0.0,52788,1.0,0.8636665098420966,0.34712795694828363,0.8636665098420966,0.35905067781483396,0.9622830946427219,0.9062460655947492,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235,20,52783,52403 +onnx:rotation30_pad25_3,optimized,species,0.7529366910457611,52788,0.8132530120481928,0.8635268756201978,0.7198655161183526,0.6615516920144863,0.5675578092246022,0.8296529233636152,0.9512268480417431,0.963573617550616,0.9613612115206147,0.8049544911995276,0.8626739450453852,272,42778,35245 +onnx:rotation30_pad25_3,optimized,genus,0.7956856787204742,52788,0.843070394786694,0.9578599395148406,0.7876914346408369,0.7626601078847843,0.6759673575495095,0.9032895919467913,0.9536588165415049,0.975627801896181,0.9744124082410346,0.8284542660506211,0.8857427309465413,215,46868,39824 +onnx:rotation30_pad25_3,optimized,family,0.9765951335430146,52788,0.8212661968629233,0.9892268920132548,0.8402600553286454,0.7551948103314396,0.7076764729156302,0.9988236108227805,0.9062460655947492,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638,19,52770,43342 +onnx:rotation30_pad25_3,coverage_70,species,0.9330078959465028,52788,0.6999886337804047,0.8958818981982676,0.8488301817076527,0.5755733928870285,0.5777980098982209,0.8522096830938269,0.9512268480417431,0.9772824895065618,0.9759576331858164,0.7244536661424917,0.8101974819931572,270,42705,31139 +onnx:rotation30_pad25_3,coverage_70,genus,0.9808727502822876,52788,0.6999886337804047,0.9766731633485423,0.9349450037960787,0.6367466549994095,0.6871119307217507,0.9280668994073232,0.9536588165415049,0.9872066649564367,0.9869220706436679,0.7145479286699414,0.8109908949574413,210,46789,34056 +onnx:rotation30_pad25_3,coverage_70,family,0.9974356293678284,52788,0.6999886337804047,0.9934599851689291,0.9498876210445948,0.6455188522788526,0.7242275050366153,0.9994858055262374,0.9062460655947492,0.9924273512482334,0.9919692254750357,0.690324440612862,0.8073575502216895,19,52770,36945 +onnx:rotation30_pad25_3,coverage_80,species,0.7826480269432068,52788,0.7999924225202698,0.8686288052834912,0.738927432680573,0.6516737035411767,0.5714027645948971,0.8331991475254559,0.9512268480417431,0.9653183066765808,0.9636871772572874,0.7956245433056017,0.8575482217269305,282,43436,35240 +onnx:rotation30_pad25_3,coverage_80,genus,0.900927484035492,52788,0.7999924225202698,0.9685256384356089,0.8470595060946164,0.7294362252336144,0.6978836889168124,0.9127397584655458,0.9536588165415049,0.9789418689306925,0.9794493441862221,0.7902786563673672,0.8619247098397643,220,47497,38507 +onnx:rotation30_pad25_3,coverage_80,family,0.9850951433181764,52788,0.7999924225202698,0.9893592346950689,0.9107134038486736,0.7408230332730312,0.7561339190719285,0.9991238456073881,0.9062460655947492,0.9876791138574482,0.9924800890720088,0.7793768702373942,0.8699130514104324,19,52770,42222 +onnx:rotation30_pad25_3,coverage_90,species,0.506381094455719,52788,0.8999962112601348,0.8258580566003837,0.5753514931278402,0.7130878850154326,0.4926253112229873,0.8011745143025532,0.9512268480417431,0.9350108762911535,0.9390448569451352,0.843502482502277,0.8756459313060244,295,44256,38828 +onnx:rotation30_pad25_3,coverage_90,genus,0.5820246338844299,52788,0.8999962112601348,0.9274427710014347,0.6679624600829293,0.8023516736810761,0.6083311670068455,0.8853480393188659,0.9536588165415049,0.9578232936969145,0.950365265908976,0.8534410434015306,0.8880107864781295,231,48032,42585 +onnx:rotation30_pad25_3,coverage_90,family,0.8370890021324158,52788,0.8999962112601348,0.9632609424279068,0.655704275245192,0.8188781084613986,0.6054171988779777,0.9960639036814077,0.9062460655947492,0.9771968807059972,0.9809600570048073,0.8657674268419359,0.9170111582851428,19,52770,47470 +onnx:wide_rotation_mixed_padding_5,zero,species,0.0,52788,1.0,0.755234026103822,0.33687151585862535,0.755234026103822,0.32185110296574626,0.7538455709630977,0.9525711652800813,0.8715557123596651,0.8834840123715941,0.8715557123596651,0.8627053901084056,308,44643,41811 +onnx:wide_rotation_mixed_padding_5,zero,genus,0.0,52788,1.0,0.8526484792215151,0.3940384661527601,0.8526484792215151,0.3957398655739386,0.835985451238918,0.9551413947992818,0.8853011970016827,0.8667635483517392,0.8853011970016827,0.8585426621711364,242,52567,46078 +onnx:wide_rotation_mixed_padding_5,zero,family,0.0,52788,1.0,0.8682812241104954,0.3481035571052136,0.8682812241104954,0.3601292312019684,0.9631923922103508,0.9087502982629312,0.8985234077270696,0.8300692484735555,0.8985234077270696,0.8530026677917844,20,52783,52397 +onnx:wide_rotation_mixed_padding_5,optimized,species,0.7873642444610596,52788,0.8043115859665075,0.8695089438155129,0.7394833663961508,0.6572822588494145,0.5750160386991705,0.8327523670450798,0.9525711652800813,0.9639295303005937,0.9614004632913131,0.7979042954631081,0.8581004496525564,272,42778,34889 +onnx:wide_rotation_mixed_padding_5,optimized,genus,0.8101237118244171,52788,0.8447563840266727,0.9606679222736707,0.7910805789285074,0.7604214628645327,0.6826130391618014,0.9048729621241002,0.9551413947992818,0.9750633809126213,0.9738767467913795,0.82798046241586,0.8853555685268851,215,46868,39838 +onnx:wide_rotation_mixed_padding_5,optimized,family,0.9925266802310944,52788,0.7681859513525802,0.9945735885843039,0.8742836172330374,0.6939901432993258,0.6993534817995831,0.9993341717836798,0.9087502982629312,0.9937167867818257,0.9924784437276808,0.749000213953435,0.849553887374868,19,52770,40543 +onnx:wide_rotation_mixed_padding_5,coverage_70,species,0.9377490878105164,52788,0.6999886337804047,0.8981484684758387,0.848225714611513,0.5783582894392819,0.5797842021095846,0.8515331114178236,0.9525711652800813,0.9779636889139668,0.9763167556362732,0.7251751735918991,0.8111347887875858,270,42705,31004 +onnx:wide_rotation_mixed_padding_5,coverage_70,genus,0.9829234480857848,52788,0.6999886337804047,0.9772528484978749,0.933284851520251,0.6360370412463672,0.686210878766654,0.9270385104597981,0.9551413947992818,0.9877665840630739,0.9879987085886791,0.7139705404842976,0.8109186480358266,210,46789,33953 +onnx:wide_rotation_mixed_padding_5,coverage_70,family,0.9976534247398376,52788,0.6999886337804047,0.9941884144043752,0.9104544641431674,0.6490372022402425,0.6982079283911002,0.9995128683932776,0.9087502982629312,0.9932707956261188,0.9921530073387378,0.6945834958292815,0.8112385022689916,19,52770,36944 +onnx:wide_rotation_mixed_padding_5,coverage_80,species,0.7969450950622559,52788,0.7999924225202698,0.870493077157555,0.747828534071083,0.6542467064292844,0.5770189946103015,0.8337911437366801,0.9525711652800813,0.9642930734756164,0.9620844555272111,0.7942358812122685,0.8560547783361164,282,43436,35209 +onnx:wide_rotation_mixed_padding_5,coverage_80,genus,0.9094918370246888,52788,0.7999924225202698,0.9702347124009509,0.8626430540125154,0.7311824992272253,0.7116937076075048,0.9137106322519536,0.9551413947992818,0.9798368925772063,0.9813682696210738,0.7881903730029471,0.8614467778949001,220,47497,38452 +onnx:wide_rotation_mixed_padding_5,coverage_80,family,0.9860803484916688,52788,0.7999924225202698,0.9895768602990621,0.8401327366486231,0.7354484625565733,0.6970330018229233,0.9990764859104901,0.9087502982629312,0.987931101398914,0.9917605869928529,0.7728708109490503,0.8655205815378383,19,52770,42219 +onnx:wide_rotation_mixed_padding_5,coverage_90,species,0.5132138729095459,52788,0.8999962112601348,0.8306881085608662,0.5780671544235811,0.7158430899566303,0.4965186149296989,0.8030267949230672,0.9525711652800813,0.93498406973104,0.9380106126608642,0.8440867567559296,0.8762121177514529,295,44256,38934 +onnx:wide_rotation_mixed_padding_5,coverage_90,genus,0.5910288095474243,52788,0.8999962112601348,0.9372401160760394,0.6644000128149382,0.8029277732982208,0.6066165586959505,0.8878528278852428,0.9551413947992818,0.9565060217269441,0.9534398462019361,0.852457911734192,0.8893584622879612,231,48032,42641 +onnx:wide_rotation_mixed_padding_5,coverage_90,family,0.8467361330986023,52788,0.8999962112601348,0.9685237018777774,0.6394279268346845,0.8178313547101703,0.5946051952129192,0.9962533414721422,0.9087502982629312,0.9785913540539676,0.9790063992391888,0.8645003038799225,0.9157762747265321,19,52770,47467 diff --git a/docs/assets/mambo-composed-tta.json b/docs/assets/mambo-composed-tta.json new file mode 100644 index 0000000..8af97ca --- /dev/null +++ b/docs/assets/mambo-composed-tta.json @@ -0,0 +1,34064 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "calibration": "MacroF1 eps=0.01 use_quantiles=True n_bootstraps=0; shared stratified seed42 90/10 report/calibration split", + "matched_coverage": "Label-free quantiles of reporting confidences; realized coverage computed by mini_metrics, ties retained. Diagnostic only, not deployable calibration.", + "support": "Full per-model class domain; >5 common truth and accepted-prediction support across all compared models separately per operating point", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444525, + "1": 0.32128858585759745, + "2": 0.26968398140672784 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39243, + "metrics": { + "accuracy": 0.7950271126103922, + "precision": 0.8372379328631292, + "recall": 0.7950271126103922, + "f1": 0.7878300075502476 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44953, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326222, + "recall": 0.8206876060779148, + "f1": 0.7941995832133607 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52241, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270192 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "full": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.4466755276813756, + "1": 0.5868633065886133, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 31024, + "metrics": { + "accuracy": 0.9521428623131191, + "precision": 0.950834091298276, + "recall": 0.6967497218946193, + "f1": 0.7799317319854288 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 34160, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.96822735165948, + "recall": 0.6927141276824689, + "f1": 0.7874852435844386 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40869, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.802095261069409 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.7434713244438171, + 0.8737562894821167, + 0.98415607213974 + ], + "full": { + "accuracy": { + "0": 0.8482344975724038, + "1": 0.9531039745578903, + "2": 0.9984960251371973 + }, + "precision": { + "0": 0.6389619346119313, + "1": 0.7845297024249248, + "2": 0.9374379812137319 + }, + "recall": { + "0": 0.5468981617462098, + "1": 0.6206686411587036, + "2": 0.5742612899561486 + }, + "f1": { + "0": 0.44937087163076467, + "1": 0.5893305682633164, + "2": 0.6694678519956686 + }, + "micro_accuracy": { + "0": 0.8329409217612513, + "1": 0.9254418013044302, + "2": 0.9992963654569565 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31043, + "metrics": { + "accuracy": 0.9525904825539635, + "precision": 0.9530383920489972, + "recall": 0.701565632554905, + "f1": 0.7839107916744207 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34167, + "metrics": { + "accuracy": 0.9746620588690518, + "precision": 0.9765518838609734, + "recall": 0.7007712382965899, + "f1": 0.7966054093358439 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9982585554220179, + "precision": 0.9900565035745176, + "recall": 0.6040652862222203, + "f1": 0.7393484528820418 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.5681188702583313, + 0.6667134761810303, + 0.9347575902938844 + ], + "full": { + "accuracy": { + "0": 0.8048570287937525, + "1": 0.9313529816901988, + "2": 0.9927903326406756 + }, + "precision": { + "0": 0.5306305982463984, + "1": 0.6375035137033628, + "2": 0.7487148238957816 + }, + "recall": { + "0": 0.6058964372202109, + "1": 0.6996475066439409, + "2": 0.670547749394969 + }, + "f1": { + "0": 0.4161430255270702, + "1": 0.5320636902859176, + "2": 0.6204806481364462 + }, + "micro_accuracy": { + "0": 0.7869287236561686, + "1": 0.8951693109164102, + "2": 0.9979161733364906 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34074, + "metrics": { + "accuracy": 0.9218031816400422, + "precision": 0.9314233316840236, + "recall": 0.7492859566639438, + "f1": 0.808804322038378 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38066, + "metrics": { + "accuracy": 0.9495748403153426, + "precision": 0.9434952597958767, + "recall": 0.7611632950298957, + "f1": 0.8249046274137032 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42212, + "metrics": { + "accuracy": 0.991651964110256, + "precision": 0.982316582583257, + "recall": 0.7165739962311568, + "f1": 0.820825282633827 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3602153062820434, + 0.4175159633159637, + 0.6952391862869263 + ], + "full": { + "accuracy": { + "0": 0.7565649535631609, + "1": 0.8750784339645986, + "2": 0.9701041183589592 + }, + "precision": { + "0": 0.42349111509646353, + "1": 0.4898323702122493, + "2": 0.5096266926670753 + }, + "recall": { + "0": 0.6607818075996174, + "1": 0.7565919852211191, + "2": 0.7859717639076295 + }, + "f1": { + "0": 0.365080834230572, + "1": 0.44838372230079665, + "2": 0.47323785280021996 + }, + "micro_accuracy": { + "0": 0.7413121724304869, + "1": 0.851628112568145, + "2": 0.9889073649203309 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 36932, + "metrics": { + "accuracy": 0.8722225832302668, + "precision": 0.894765673851891, + "recall": 0.7823544809151759, + "f1": 0.8117772424631506 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41304, + "metrics": { + "accuracy": 0.9040361245609442, + "precision": 0.9005023638621836, + "recall": 0.8030735550598104, + "f1": 0.828518735633285 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47443, + "metrics": { + "accuracy": 0.9653837159945841, + "precision": 0.9451986498604876, + "recall": 0.8218848478072115, + "f1": 0.8736386001087222 + } + } + } + } + } + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361531, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39953, + "metrics": { + "accuracy": 0.8203118253354881, + "precision": 0.8392678347823381, + "recall": 0.8203118253354881, + "f1": 0.8100326163861944 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44773, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.805657178112806 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 51891, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501339 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "full": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791292 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 30977, + "metrics": { + "accuracy": 0.963494109771882, + "precision": 0.9626322859838098, + "recall": 0.7171390330256306, + "f1": 0.8016422382706134 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 35966, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149172, + "recall": 0.7475533077376153, + "f1": 0.8310650157210921 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 38530, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8241381645202637, + 0.9218662977218628, + 0.9825798273086548 + ], + "full": { + "accuracy": { + "0": 0.86958680967719, + "1": 0.9660439693907655, + "2": 0.9952393276120065 + }, + "precision": { + "0": 0.7167252898445411, + "1": 0.8305261428723821, + "2": 0.7964173234185559 + }, + "recall": { + "0": 0.5705474537929165, + "1": 0.6273798603264148, + "2": 0.6300210433137761 + }, + "f1": { + "0": 0.5122730291185364, + "1": 0.6221364731441472, + "2": 0.6078073153329585 + }, + "micro_accuracy": { + "0": 0.8354577683959838, + "1": 0.9193255933533598, + "2": 0.9984844794457525 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30647, + "metrics": { + "accuracy": 0.9672316998030942, + "precision": 0.9647766155724887, + "recall": 0.7128409633763704, + "f1": 0.7993028119491851 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33607, + "metrics": { + "accuracy": 0.9824288448238584, + "precision": 0.9833895891353926, + "recall": 0.7075405452013525, + "f1": 0.8063455181681898 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36926, + "metrics": { + "accuracy": 0.9944876424981127, + "precision": 0.9914000560860179, + "recall": 0.6756125180195103, + "f1": 0.7948388506661144 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6061448454856873, + 0.7092886567115784, + 0.9039735794067384 + ], + "full": { + "accuracy": { + "0": 0.8333841588302096, + "1": 0.9392760079927347, + "2": 0.9767480012163248 + }, + "precision": { + "0": 0.5485047799955343, + "1": 0.6547210280772727, + "2": 0.6257303180264047 + }, + "recall": { + "0": 0.6370545006054973, + "1": 0.7133811913319552, + "2": 0.7059032105438684 + }, + "f1": { + "0": 0.445901326225418, + "1": 0.5584780260317714, + "2": 0.5344474480496143 + }, + "micro_accuracy": { + "0": 0.804735969689794, + "1": 0.8955008287946957, + "2": 0.9955481884915937 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34441, + "metrics": { + "accuracy": 0.941697838071395, + "precision": 0.9410961417102457, + "recall": 0.7691340926734198, + "f1": 0.8312080391987352 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 37907, + "metrics": { + "accuracy": 0.9649697784339673, + "precision": 0.9547964398255602, + "recall": 0.7703699933851422, + "f1": 0.8399359589724344 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42152, + "metrics": { + "accuracy": 0.9862345277241655, + "precision": 0.9749910954156714, + "recall": 0.7634212953547233, + "f1": 0.8500844942394542 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3223742842674255, + 0.3692984879016876, + 0.5828610062599182 + ], + "full": { + "accuracy": { + "0": 0.7822620703147596, + "1": 0.8858347939502168, + "2": 0.9151360267321503 + }, + "precision": { + "0": 0.4110337432773394, + "1": 0.4723629331651541, + "2": 0.39997022219300904 + }, + "recall": { + "0": 0.6886066265817404, + "1": 0.7735925323689193, + "2": 0.7680035104129965 + }, + "f1": { + "0": 0.3648914489871293, + "1": 0.44134032210625124, + "2": 0.37744401953419926 + }, + "micro_accuracy": { + "0": 0.7621503294112695, + "1": 0.8531015176071902, + "2": 0.9795196699572712 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 37604, + "metrics": { + "accuracy": 0.891242198240585, + "precision": 0.898524732525704, + "recall": 0.8065329569944766, + "f1": 0.8353160761309999 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41630, + "metrics": { + "accuracy": 0.9209837212851842, + "precision": 0.9006552910895744, + "recall": 0.8167651188996207, + "f1": 0.8434500014751452 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47224, + "metrics": { + "accuracy": 0.9543680309530158, + "precision": 0.9164661252394816, + "recall": 0.834546759568769, + "f1": 0.8677728056848387 + } + } + } + } + } + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341026, + "1": 0.32445203101159487, + "2": 0.2808879232365721 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 39968, + "metrics": { + "accuracy": 0.8208210511198463, + "precision": 0.8393910727128245, + "recall": 0.8208210511198463, + "f1": 0.8102958063278631 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 44776, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500325 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 51893, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.784330436376383 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "full": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812275, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 30845, + "metrics": { + "accuracy": 0.9642506092928128, + "precision": 0.9626937682791291, + "recall": 0.7149144701582824, + "f1": 0.8001046982018766 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 35808, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827877 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 38636, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8243970274925232, + 0.9216671586036682, + 0.982620656490326 + ], + "full": { + "accuracy": { + "0": 0.8696078641344749, + "1": 0.9661254181481168, + "2": 0.9952396475419057 + }, + "precision": { + "0": 0.7154987852188989, + "1": 0.8307688580940611, + "2": 0.7964181852175016 + }, + "recall": { + "0": 0.5707796582704833, + "1": 0.6277109684720645, + "2": 0.630096313240106 + }, + "f1": { + "0": 0.5116109757516245, + "1": 0.6224978354796963, + "2": 0.6078714628660602 + }, + "micro_accuracy": { + "0": 0.8354036426619036, + "1": 0.9192444047522395, + "2": 0.9984844794457525 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30645, + "metrics": { + "accuracy": 0.9672641785336684, + "precision": 0.9648328354991503, + "recall": 0.7132879118596801, + "f1": 0.7996140862205406 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33604, + "metrics": { + "accuracy": 0.9825450538711241, + "precision": 0.9833893298187405, + "recall": 0.7076905240002949, + "f1": 0.8064963735413154 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36926, + "metrics": { + "accuracy": 0.9944880129432593, + "precision": 0.9914012807476776, + "recall": 0.6757036342461201, + "f1": 0.7949333838727902 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6067228317260742, + 0.7099964618682861, + 0.9041854739189148 + ], + "full": { + "accuracy": { + "0": 0.8328452370529146, + "1": 0.9392543348174218, + "2": 0.9767639732185658 + }, + "precision": { + "0": 0.5484999836385683, + "1": 0.654560571667988, + "2": 0.6257865447269096 + }, + "recall": { + "0": 0.6369039477216849, + "1": 0.7132182241768983, + "2": 0.7059843462574676 + }, + "f1": { + "0": 0.44584696550387404, + "1": 0.5583048362404305, + "2": 0.5345107480456108 + }, + "micro_accuracy": { + "0": 0.804759649538243, + "1": 0.8955245086431447, + "2": 0.9955718683400426 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34446, + "metrics": { + "accuracy": 0.9418513574630873, + "precision": 0.9410921687024294, + "recall": 0.7693785658461272, + "f1": 0.8313117853878524 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 37907, + "metrics": { + "accuracy": 0.9649382493245952, + "precision": 0.9544211478616387, + "recall": 0.7704551175301809, + "f1": 0.8398638030564497 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42152, + "metrics": { + "accuracy": 0.9862530216214973, + "precision": 0.9750917116165754, + "recall": 0.7635195122711856, + "f1": 0.8501977679165007 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.3231773376464844, + 0.3690774440765381, + 0.5826917886734009 + ], + "full": { + "accuracy": { + "0": 0.7807145222813506, + "1": 0.8861895291699214, + "2": 0.9151606889053974 + }, + "precision": { + "0": 0.4112190997898548, + "1": 0.47246294916839016, + "2": 0.3990993533111283 + }, + "recall": { + "0": 0.6889577322256099, + "1": 0.7740196989711382, + "2": 0.7680131308693198 + }, + "f1": { + "0": 0.36507446215024497, + "1": 0.4415744427244726, + "2": 0.37693960009408994 + }, + "micro_accuracy": { + "0": 0.7621082321244396, + "1": 0.8532699067545096, + "2": 0.979603864530931 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 37602, + "metrics": { + "accuracy": 0.8914832210371341, + "precision": 0.8988812031034508, + "recall": 0.807154235455831, + "f1": 0.835765327942146 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 41634, + "metrics": { + "accuracy": 0.9214659032255056, + "precision": 0.9007912188383919, + "recall": 0.8173605632542287, + "f1": 0.8438589052760838 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47228, + "metrics": { + "accuracy": 0.9543965871536181, + "precision": 0.914266035432625, + "recall": 0.8345584053843181, + "f1": 0.8664984828887731 + } + } + } + } + } + }, + "torch-tta": { + "source": "local-evidence/mambo-default-tta-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "precision": { + "0": 0.3117281910150932, + "1": 0.3578921081808225, + "2": 0.2856847483669441 + }, + "recall": { + "0": 0.7405864004487995, + "1": 0.8312879946116835, + "2": 0.8579010503993526 + }, + "f1": { + "0": 0.30013980437546733, + "1": 0.3600905137263133, + "2": 0.2970441402135782 + }, + "micro_accuracy": { + "0": 0.7321360915359552, + "1": 0.8163029476396151, + "2": 0.9478669394559369 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 40958, + "metrics": { + "accuracy": 0.8480295198511346, + "precision": 0.8592040363096476, + "recall": 0.8480295198511346, + "f1": 0.8369055759103206 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45474, + "metrics": { + "accuracy": 0.8642419820735022, + "precision": 0.8426871013681415, + "recall": 0.8642419820735022, + "f1": 0.8341657275204103 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52160, + "metrics": { + "accuracy": 0.8865862079592552, + "precision": 0.7945542451008321, + "recall": 0.8865862079592552, + "f1": 0.8211324206407348 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7392672300338745, + 0.869922012090683, + 0.964760661125183 + ], + "full": { + "accuracy": { + "0": 0.8659206758370823, + "1": 0.9627590640417357, + "2": 0.9955823574240963 + }, + "precision": { + "0": 0.6694908268387498, + "1": 0.8166841617561862, + "2": 0.7393905133847496 + }, + "recall": { + "0": 0.639254202340642, + "1": 0.7031449724257084, + "2": 0.700159197162577 + }, + "f1": { + "0": 0.5238581475082266, + "1": 0.6655108425187299, + "2": 0.6072565582310141 + }, + "micro_accuracy": { + "0": 0.8257020535519919, + "1": 0.9116055761356989, + "2": 0.998243799167609 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7831893612184587, + "1": 0.7772978707281958, + "2": 0.7874327498673941 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 33853, + "metrics": { + "accuracy": 0.9585814667783285, + "precision": 0.9585731812083509, + "recall": 0.7743974002343408, + "f1": 0.8413487263251 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 36949, + "metrics": { + "accuracy": 0.9771086466542604, + "precision": 0.9775547270341164, + "recall": 0.767268013502815, + "f1": 0.8477428518527236 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 41536, + "metrics": { + "accuracy": 0.9948848349121117, + "precision": 0.9917013099030386, + "recall": 0.7564680159984232, + "f1": 0.8535629866805485 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8902084827423096, + 0.9606042504310608, + 0.9924046397209167 + ], + "full": { + "accuracy": { + "0": 0.8906144707778789, + "1": 0.9753286103689284, + "2": 0.9955883069989272 + }, + "precision": { + "0": 0.7981732822929044, + "1": 0.8964480054302681, + "2": 0.8894957303016392 + }, + "recall": { + "0": 0.5796377324768266, + "1": 0.6333947441461268, + "2": 0.6322405391393889 + }, + "f1": { + "0": 0.5609290214340181, + "1": 0.6669758159190942, + "2": 0.68215984063641 + }, + "micro_accuracy": { + "0": 0.8444697031203485, + "1": 0.9231414576060187, + "2": 0.9989174853183946 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30831, + "metrics": { + "accuracy": 0.9733088758873599, + "precision": 0.9705609441193396, + "recall": 0.7175113900443769, + "f1": 0.8041322816170898 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33743, + "metrics": { + "accuracy": 0.9855571610067058, + "precision": 0.9869624081036315, + "recall": 0.7108155553452893, + "f1": 0.8092113545878005 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36933, + "metrics": { + "accuracy": 0.9948917238934942, + "precision": 0.9919946066968074, + "recall": 0.6782992761241996, + "f1": 0.7974755385050802 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6967090368270874, + 0.818070650100708, + 0.9556875824928284 + ], + "full": { + "accuracy": { + "0": 0.8608792923180646, + "1": 0.9575457407732273, + "2": 0.980043657507525 + }, + "precision": { + "0": 0.6433940716376311, + "1": 0.7633603696735349, + "2": 0.7392855318346994 + }, + "recall": { + "0": 0.649735408471136, + "1": 0.7240369843261408, + "2": 0.7065130086457477 + }, + "f1": { + "0": 0.5139660613219256, + "1": 0.6403702471656528, + "2": 0.6105337132313392 + }, + "micro_accuracy": { + "0": 0.821193464361828, + "1": 0.907056594837793, + "2": 0.9979872128818376 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34887, + "metrics": { + "accuracy": 0.9554226848332942, + "precision": 0.9554094003741878, + "recall": 0.7845211799685287, + "f1": 0.8473164347855004 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38196, + "metrics": { + "accuracy": 0.974270531476802, + "precision": 0.9716244705685136, + "recall": 0.7802435176207189, + "f1": 0.8534011844503622 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42196, + "metrics": { + "accuracy": 0.9900505507981868, + "precision": 0.9915410749055935, + "recall": 0.7641594720043668, + "f1": 0.8587374419442199 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4103786051273346, + 0.4679165780544281, + 0.7022547125816345 + ], + "full": { + "accuracy": { + "0": 0.8145174796850042, + "1": 0.9206265600944382, + "2": 0.9519711626779341 + }, + "precision": { + "0": 0.4925946020576832, + "1": 0.5628702690668548, + "2": 0.4890308893157449 + }, + "recall": { + "0": 0.7092768556597198, + "1": 0.7929657144502366, + "2": 0.7839285171996123 + }, + "f1": { + "0": 0.43138462249532483, + "1": 0.5213308664991891, + "2": 0.4572527582331337 + }, + "micro_accuracy": { + "0": 0.783914626702309, + "1": 0.8721294912542886, + "2": 0.9901702835252268 + }, + "theilU": { + "0": 0.9416287278244636, + "1": 0.9429697597956094, + "2": 0.8802152497213216 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38345, + "metrics": { + "accuracy": 0.9175215805336097, + "precision": 0.9199110408254955, + "recall": 0.8271822185719119, + "f1": 0.8577180591837419 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42116, + "metrics": { + "accuracy": 0.9452283281513972, + "precision": 0.9293840070922701, + "recall": 0.8394534910703915, + "f1": 0.8708704993487821 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47370, + "metrics": { + "accuracy": 0.9707034515218184, + "precision": 0.9500140243129231, + "recall": 0.8497758163671418, + "f1": 0.8936445866068157 + } + } + } + } + } + }, + "onnx-tta": { + "source": "local-evidence/mambo-default-tta-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "precision": { + "0": 0.3129592874854792, + "1": 0.35819829298724193, + "2": 0.2856706122641368 + }, + "recall": { + "0": 0.7408884646998294, + "1": 0.831310673030869, + "2": 0.8580571051602935 + }, + "f1": { + "0": 0.30114949302373306, + "1": 0.3604852264440997, + "2": 0.2970778194056521 + }, + "micro_accuracy": { + "0": 0.7322118663332575, + "1": 0.8163029476396151, + "2": 0.9479237705539137 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 40964, + "metrics": { + "accuracy": 0.8482708971423827, + "precision": 0.859125120067078, + "recall": 0.8482708971423827, + "f1": 0.8368704802655687 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45478, + "metrics": { + "accuracy": 0.8642721574907657, + "precision": 0.8423837204350251, + "recall": 0.8642721574907657, + "f1": 0.8339715279038667 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52160, + "metrics": { + "accuracy": 0.8867656709343373, + "precision": 0.7945118367924103, + "recall": 0.8867656709343373, + "f1": 0.821233458216956 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.8280269503593445, + 0.8708856105804443, + 0.966471254825592 + ], + "full": { + "accuracy": { + "0": 0.8755166405852203, + "1": 0.9629823236784678, + "2": 0.9955854528269081 + }, + "precision": { + "0": 0.7362820959348587, + "1": 0.8168891977985718, + "2": 0.7395038777892725 + }, + "recall": { + "0": 0.6075669492667327, + "1": 0.703150166196618, + "2": 0.6986717712105687 + }, + "f1": { + "0": 0.5430735533140522, + "1": 0.6655370235633972, + "2": 0.6065093177805807 + }, + "micro_accuracy": { + "0": 0.8355803422957866, + "1": 0.911799848813675, + "2": 0.998285935010381 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7404902629385466, + "1": 0.7768621656437069, + "2": 0.7846859134651815 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 32341, + "metrics": { + "accuracy": 0.9650388599694326, + "precision": 0.9639006969879437, + "recall": 0.7443741514376615, + "f1": 0.8223569195026883 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 36936, + "metrics": { + "accuracy": 0.9774284415058453, + "precision": 0.9775831973986752, + "recall": 0.7672866592834245, + "f1": 0.8477266855996487 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 41392, + "metrics": { + "accuracy": 0.9948884190627355, + "precision": 0.9918743397836266, + "recall": 0.754667447740729, + "f1": 0.852383133337759 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.8901577591896057, + 0.9606157541275024, + 0.9924092292785645 + ], + "full": { + "accuracy": { + "0": 0.8906299010400511, + "1": 0.9754350362986757, + "2": 0.9955876317644935 + }, + "precision": { + "0": 0.7966276731934266, + "1": 0.8965238930921287, + "2": 0.8894957438238706 + }, + "recall": { + "0": 0.5796284078643174, + "1": 0.6335466562733132, + "2": 0.6319719604359404 + }, + "f1": { + "0": 0.5599772016156898, + "1": 0.6671841623210293, + "2": 0.6819831887822367 + }, + "micro_accuracy": { + "0": 0.8443073259181078, + "1": 0.9231414576060187, + "2": 0.9989174853183946 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 30827, + "metrics": { + "accuracy": 0.9732493733693959, + "precision": 0.9705461373032799, + "recall": 0.7174933624601928, + "f1": 0.8041016918766225 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33740, + "metrics": { + "accuracy": 0.9857081844689186, + "precision": 0.9870787691851511, + "recall": 0.7107978607072257, + "f1": 0.809253042786544 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36933, + "metrics": { + "accuracy": 0.9948909420430975, + "precision": 0.9919946237775208, + "recall": 0.6779741545358146, + "f1": 0.797243101854852 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.6970725059509277, + 0.8184317350387573, + 0.9559080004692078 + ], + "full": { + "accuracy": { + "0": 0.8605050796504391, + "1": 0.957481163977273, + "2": 0.9800427091207768 + }, + "precision": { + "0": 0.6425824308630953, + "1": 0.7612239102518993, + "2": 0.7392855395634923 + }, + "recall": { + "0": 0.6502626044247952, + "1": 0.7238724141381434, + "2": 0.7064178836065658 + }, + "f1": { + "0": 0.5141028667288083, + "1": 0.6402488255798201, + "2": 0.6104810675107896 + }, + "micro_accuracy": { + "0": 0.8211697845133791, + "1": 0.9069145157470992, + "2": 0.9979872128818376 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 34886, + "metrics": { + "accuracy": 0.95544016618753, + "precision": 0.9552347846466682, + "recall": 0.7851829659454762, + "f1": 0.8475942364745017 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38190, + "metrics": { + "accuracy": 0.9741774842920884, + "precision": 0.9714040423387499, + "recall": 0.7799920264882948, + "f1": 0.8531731226964174 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42196, + "metrics": { + "accuracy": 0.9900494526661626, + "precision": 0.9915410867021727, + "recall": 0.7640443206411466, + "f1": 0.8586543171222992 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4094218313694, + 0.4677167236804962, + 0.701670229434967 + ], + "full": { + "accuracy": { + "0": 0.8145125280066268, + "1": 0.9189803824252353, + "2": 0.9520347449957101 + }, + "precision": { + "0": 0.49342728859876867, + "1": 0.5617081860676382, + "2": 0.4890652942611772 + }, + "recall": { + "0": 0.7093314621998333, + "1": 0.7928671954824282, + "2": 0.7838848111299506 + }, + "f1": { + "0": 0.4322191163505195, + "1": 0.5202478106264234, + "2": 0.4572588673034217 + }, + "micro_accuracy": { + "0": 0.7838935780588941, + "1": 0.8720452966806289, + "2": 0.9902123808120566 + }, + "theilU": { + "0": 0.9416043541781303, + "1": 0.9429777628243508, + "2": 0.8802934722288728 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38344, + "metrics": { + "accuracy": 0.9179067496797524, + "precision": 0.9195647545876909, + "recall": 0.8271376014440223, + "f1": 0.8573977653891341 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42114, + "metrics": { + "accuracy": 0.945175513586682, + "precision": 0.9293802024440366, + "recall": 0.8393151839568592, + "f1": 0.870823331898205 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47370, + "metrics": { + "accuracy": 0.9707770731529273, + "precision": 0.9500882665635927, + "recall": 0.8497229090196569, + "f1": 0.8936577693374371 + } + } + } + } + } + }, + "torch:rotation30_pad15_3": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad15_3/mini_metric.csv", + "source_sha256": "b368dea7e789d47f3ab82f0f9b22a4f6e32392ec1ecc2a6b8452acc317c4800c", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7513310721181966, + "1": 0.8514761457282455, + "2": 0.8625346236914426 + }, + "precision": { + "0": 0.33541184570095794, + "1": 0.3869580883721579, + "2": 0.33597390634364505 + }, + "recall": { + "0": 0.7513310721181966, + "1": 0.8514761457282455, + "2": 0.8625346236914426 + }, + "f1": { + "0": 0.3207141524325515, + "1": 0.3880631831613022, + "2": 0.34855638987709453 + }, + "micro_accuracy": { + "0": 0.7501515495946048, + "1": 0.8322156550731227, + "2": 0.9608244297946503 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41699, + "metrics": { + "accuracy": 0.8681389941924458, + "precision": 0.8803148570115105, + "recall": 0.8681389941924458, + "f1": 0.8587890346597373 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45979, + "metrics": { + "accuracy": 0.8816751995436959, + "precision": 0.862662277317664, + "recall": 0.8816751995436959, + "f1": 0.8542468147491235 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52370, + "metrics": { + "accuracy": 0.8919148172451592, + "precision": 0.8153308518106595, + "recall": 0.8919148172451592, + "f1": 0.8403410998409673 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "full": { + "accuracy": { + "0": 0.8643190221276298, + "1": 0.9624906870799902, + "2": 0.989187457175979 + }, + "precision": { + "0": 0.7142382786297836, + "1": 0.7650612786044926, + "2": 0.8090769758102975 + }, + "recall": { + "0": 0.6585389181056288, + "1": 0.7634804910051127, + "2": 0.7304671232556951 + }, + "f1": { + "0": 0.5614510327382695, + "1": 0.66391037346047, + "2": 0.6688685629268447 + }, + "micro_accuracy": { + "0": 0.8301084863570187, + "1": 0.9039014742898238, + "2": 0.998750115730025 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.8067363794801848, + "1": 0.8429188451920892, + "2": 0.8184435856634084 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34929, + "metrics": { + "accuracy": 0.9633823854628971, + "precision": 0.9620682860611799, + "recall": 0.7992089334141771, + "f1": 0.8594740388924278 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39740, + "metrics": { + "accuracy": 0.9754344482950037, + "precision": 0.9752199938369727, + "recall": 0.8251593289180623, + "f1": 0.8840371546219599 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43191, + "metrics": { + "accuracy": 0.9874802135721861, + "precision": 0.9918462287830544, + "recall": 0.7931565581111449, + "f1": 0.8782448997518413 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.93315851688385, + 0.9804478883743286, + 0.9972013235092164 + ], + "full": { + "accuracy": { + "0": 0.8991772347974494, + "1": 0.9765122298670562, + "2": 0.9940919372828998 + }, + "precision": { + "0": 0.8456689437195946, + "1": 0.9212082467863876, + "2": 0.9105909518507277 + }, + "recall": { + "0": 0.5806579657362848, + "1": 0.6323255412674224, + "2": 0.6474373549878735 + }, + "f1": { + "0": 0.5804015634850642, + "1": 0.6760711493673188, + "2": 0.695180588011688 + }, + "micro_accuracy": { + "0": 0.8519931801575059, + "1": 0.9276880192687613, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31010, + "metrics": { + "accuracy": 0.9776436854882747, + "precision": 0.9755378203406662, + "recall": 0.722004661286145, + "f1": 0.8087591090852428 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33975, + "metrics": { + "accuracy": 0.9868260875650243, + "precision": 0.9869714825698337, + "recall": 0.7128497701246634, + "f1": 0.8100365271492445 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9931590852749367, + "precision": 0.9923254128640772, + "recall": 0.6966954216249965, + "f1": 0.8129569140504668 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7864558100700378, + 0.8991661667823792, + 0.9839562773704528 + ], + "full": { + "accuracy": { + "0": 0.8681525695853197, + "1": 0.9690887320773804, + "2": 0.9893177583735553 + }, + "precision": { + "0": 0.7256230124848712, + "1": 0.8392267277587339, + "2": 0.8092924516803065 + }, + "recall": { + "0": 0.6516322902727562, + "1": 0.7280547849656653, + "2": 0.715811313718187 + }, + "f1": { + "0": 0.5638804990406792, + "1": 0.6932378251822574, + "2": 0.6613289841826895 + }, + "micro_accuracy": { + "0": 0.8320625147999052, + "1": 0.9128107980108927, + "2": 0.9990054463651432 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35175, + "metrics": { + "accuracy": 0.964118819588285, + "precision": 0.9638007386543088, + "recall": 0.7943988204601052, + "f1": 0.857186007121519 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38462, + "metrics": { + "accuracy": 0.9788034405604307, + "precision": 0.9793962322786787, + "recall": 0.7879772281995084, + "f1": 0.8606213313448622 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9876310886430639, + "precision": 0.9921524313351724, + "recall": 0.7754153149867931, + "f1": 0.8671339416025601 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4981422424316406, + 0.5704049468040466, + 0.8255183696746826 + ], + "full": { + "accuracy": { + "0": 0.8275277881335519, + "1": 0.9323397607229976, + "2": 0.9662851300685152 + }, + "precision": { + "0": 0.5698267633908097, + "1": 0.6453578889070587, + "2": 0.6620438247654835 + }, + "recall": { + "0": 0.7148264203986453, + "1": 0.8030574959232933, + "2": 0.8161730537339364 + }, + "f1": { + "0": 0.49048063270161796, + "1": 0.5914681212088754, + "2": 0.6181949611573065 + }, + "micro_accuracy": { + "0": 0.8008798332947441, + "1": 0.8852848933886212, + "2": 0.9956218821696942 + }, + "theilU": { + "0": 0.9506821380005821, + "1": 0.9530656934912801, + "2": 0.904888479697919 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38822, + "metrics": { + "accuracy": 0.9332526939814978, + "precision": 0.939363112800583, + "recall": 0.8425608778485374, + "f1": 0.8754335683136774 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42567, + "metrics": { + "accuracy": 0.9539446830499735, + "precision": 0.9493471909350284, + "recall": 0.8504964110432653, + "f1": 0.8858621014410463 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47456, + "metrics": { + "accuracy": 0.9806985716582809, + "precision": 0.9658983715348495, + "recall": 0.8624928869086922, + "f1": 0.9082064719768487 + } + } + } + } + } + }, + "torch:rotation30_pad25_3": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "precision": { + "0": 0.3361085016262147, + "1": 0.3871858468468912, + "2": 0.3473357735776554 + }, + "recall": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "f1": { + "0": 0.3201483357303684, + "1": 0.38731172619778687, + "2": 0.35919021330288153 + }, + "micro_accuracy": { + "0": 0.7508714101689778, + "1": 0.8324808668636812, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8695966338189322, + "precision": 0.8832470040020461, + "recall": 0.8695966338189322, + "f1": 0.8611832508395522 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45974, + "metrics": { + "accuracy": 0.8812527981807469, + "precision": 0.8646719138069031, + "recall": 0.8812527981807469, + "f1": 0.855181947419072 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52402, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541583 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "full": { + "accuracy": { + "0": 0.8633843418309688, + "1": 0.95774560113418, + "2": 0.9892254689058468 + }, + "precision": { + "0": 0.7190416496691577, + "1": 0.7891877764219916, + "2": 0.8402573230856973 + }, + "recall": { + "0": 0.6588299780195079, + "1": 0.7626880651777854, + "2": 0.7546408071160894 + }, + "f1": { + "0": 0.566106644915547, + "1": 0.6776129515770067, + "2": 0.7073928412638566 + }, + "micro_accuracy": { + "0": 0.8300772588287468, + "1": 0.9032149356338882, + "2": 0.9988231493446557 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8116049102068652, + "1": 0.8432030006819732, + "2": 0.8209441539743881 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 35185, + "metrics": { + "accuracy": 0.963817038901828, + "precision": 0.961489880265137, + "recall": 0.8035377762915177, + "f1": 0.8618349502484031 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39827, + "metrics": { + "accuracy": 0.9754640055183043, + "precision": 0.9744657384691411, + "recall": 0.8284961369731623, + "f1": 0.8857838500606222 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43325, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9330438375473022, + 0.9808310866355896, + 0.9974275231361388 + ], + "full": { + "accuracy": { + "0": 0.8958773246343307, + "1": 0.9766589295185959, + "2": 0.9934599375766446 + }, + "precision": { + "0": 0.8488359655175162, + "1": 0.9346999594698736, + "2": 0.9498878737701825 + }, + "recall": { + "0": 0.575642556980122, + "1": 0.6367137848251249, + "2": 0.6454812993243774 + }, + "f1": { + "0": 0.5778389555534205, + "1": 0.68706311679764, + "2": 0.7241944754879999 + }, + "micro_accuracy": { + "0": 0.8523720602960677, + "1": 0.928012773673243, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31144, + "metrics": { + "accuracy": 0.977274427695301, + "precision": 0.9759679510257172, + "recall": 0.7245807100491324, + "f1": 0.810278348194081 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34055, + "metrics": { + "accuracy": 0.9871863309136562, + "precision": 0.9865580047875915, + "recall": 0.7144975277360381, + "f1": 0.8109127926788642 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.992427296141378, + "precision": 0.9919695314060105, + "recall": 0.6902789817732341, + "f1": 0.8073158286865963 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7825590372085571, + 0.9008587002754213, + 0.9850324392318726 + ], + "full": { + "accuracy": { + "0": 0.8685831581947409, + "1": 0.9684925893463145, + "2": 0.989354070043887 + }, + "precision": { + "0": 0.7408341935752873, + "1": 0.8495310596183734, + "2": 0.9107072776433661 + }, + "recall": { + "0": 0.6520466646970331, + "1": 0.7285668935695543, + "2": 0.7405947769417649 + }, + "f1": { + "0": 0.5728841408568456, + "1": 0.6990184834220075, + "2": 0.7559779769818279 + }, + "micro_accuracy": { + "0": 0.8331754676770069, + "1": 0.9127397584655458, + "2": 0.9991001657589391 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35239, + "metrics": { + "accuracy": 0.9653788722710366, + "precision": 0.9636915943413662, + "recall": 0.7956290746750607, + "f1": 0.8575515862096464 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38506, + "metrics": { + "accuracy": 0.9788881421171708, + "precision": 0.9794636846683936, + "recall": 0.7901320143472512, + "f1": 0.8618171291762662 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42222, + "metrics": { + "accuracy": 0.9876731337350272, + "precision": 0.9924723507074099, + "recall": 0.7791005599416505, + "f1": 0.8697078644497735 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.5055776238441467, + 0.5816248059272766, + 0.8369399309158325 + ], + "full": { + "accuracy": { + "0": 0.8259918976166272, + "1": 0.9275599703862233, + "2": 0.9632627273411767 + }, + "precision": { + "0": 0.5745198109152063, + "1": 0.6663984622722228, + "2": 0.6557361064788253 + }, + "recall": { + "0": 0.713123054577747, + "1": 0.8037295174574243, + "2": 0.8187844116433781 + }, + "f1": { + "0": 0.492042775668204, + "1": 0.6076394789666649, + "2": 0.6053891583355393 + }, + "micro_accuracy": { + "0": 0.8011534656591383, + "1": 0.885305942032036, + "2": 0.9960849523248226 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38826, + "metrics": { + "accuracy": 0.9350519930314937, + "precision": 0.9387344030835514, + "recall": 0.8431093052722285, + "f1": 0.8753944002330876 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42580, + "metrics": { + "accuracy": 0.9576218533224137, + "precision": 0.9504064753538914, + "recall": 0.8531971719555743, + "f1": 0.8879077068258153 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47470, + "metrics": { + "accuracy": 0.9771989474476782, + "precision": 0.981015342831644, + "recall": 0.8656540043780165, + "f1": 0.9169624562903813 + } + } + } + } + } + }, + "torch:wide_rotation_mixed_padding_5": { + "source": "local-evidence/mambo-composed-full/torch/wide_rotation_mixed_padding_5/mini_metric.csv", + "source_sha256": "6d0ddb34780461d1bb033b42b3d739e0bf134b914e90d6d6c47ba967ea1586f8", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7552353473768904, + "1": 0.8526658727375439, + "2": 0.8682120684665646 + }, + "precision": { + "0": 0.33652687002568266, + "1": 0.3940356914835521, + "2": 0.34808262594697054 + }, + "recall": { + "0": 0.7552353473768904, + "1": 0.8526658727375439, + "2": 0.8682120684665646 + }, + "f1": { + "0": 0.32157178232724193, + "1": 0.3957580012454397, + "2": 0.3600973207633851 + }, + "micro_accuracy": { + "0": 0.753731908767144, + "1": 0.8360043949382435, + "2": 0.9631734485110253 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41807, + "metrics": { + "accuracy": 0.8715579516601252, + "precision": 0.883662054978781, + "recall": 0.8715579516601252, + "f1": 0.8628306472516105 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 46080, + "metrics": { + "accuracy": 0.8853243404403656, + "precision": 0.8667563365049132, + "recall": 0.8853243404403656, + "f1": 0.8585900247512551 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52398, + "metrics": { + "accuracy": 0.8984438787365493, + "precision": 0.8300148274621234, + "recall": 0.8984438787365493, + "f1": 0.8529197006514678 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "full": { + "accuracy": { + "0": 0.8703941893724045, + "1": 0.9607022983572389, + "2": 0.9945725610665762 + }, + "precision": { + "0": 0.7403659908254208, + "1": 0.7909544340740902, + "2": 0.8742831111794982 + }, + "recall": { + "0": 0.6565552978086161, + "1": 0.7604445669279044, + "2": 0.6934443095310503 + }, + "f1": { + "0": 0.57525880404229, + "1": 0.6825116641787987, + "2": 0.6990191600388408 + }, + "micro_accuracy": { + "0": 0.8329914408997666, + "1": 0.9049456095099249, + "2": 0.9993332839469591 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.8034212320982042, + "1": 0.8446048344320679, + "2": 0.7671629915889975 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34859, + "metrics": { + "accuracy": 0.9641487530176069, + "precision": 0.9614697038990926, + "recall": 0.7971390965681312, + "f1": 0.8576154488683261 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39833, + "metrics": { + "accuracy": 0.975113981160547, + "precision": 0.9740507775184749, + "recall": 0.8280259319833198, + "f1": 0.8854528533073914 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40489, + "metrics": { + "accuracy": 0.9937155970244568, + "precision": 0.9924777778677608, + "recall": 0.7483394678128908, + "f1": 0.8490963944391154 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9378145933151244, + 0.9829131960868835, + 0.9976515173912048 + ], + "full": { + "accuracy": { + "0": 0.8981579179311403, + "1": 0.9772508883665877, + "2": 0.9941883574173919 + }, + "precision": { + "0": 0.8482357262407203, + "1": 0.9332838510987757, + "2": 0.9104544472981865 + }, + "recall": { + "0": 0.5783557942848305, + "1": 0.6363193807367752, + "2": 0.649008190569088 + }, + "f1": { + "0": 0.5797706028761002, + "1": 0.6865936749446687, + "2": 0.6981880604454596 + }, + "micro_accuracy": { + "0": 0.8516413628859841, + "1": 0.9270385104597981, + "2": 0.9995128683932776 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31006, + "metrics": { + "accuracy": 0.9779798176414025, + "precision": 0.9763347531347621, + "recall": 0.7251636762866198, + "f1": 0.8110997447784023 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33950, + "metrics": { + "accuracy": 0.9877629577875913, + "precision": 0.9879968037128767, + "recall": 0.7139534005861962, + "f1": 0.8109341992830557 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9932707296411906, + "precision": 0.9921529860608669, + "recall": 0.6945483764378839, + "f1": 0.8112123602352538 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7969815731048584, + 0.909421443939209, + 0.9860424399375916 + ], + "full": { + "accuracy": { + "0": 0.8703860488155565, + "1": 0.9702370068158972, + "2": 0.9895760191358332 + }, + "precision": { + "0": 0.7478527799932727, + "1": 0.8641071843621503, + "2": 0.8401325897859828 + }, + "recall": { + "0": 0.6541611168700917, + "1": 0.7311401849680091, + "2": 0.7351839613471405 + }, + "f1": { + "0": 0.5769583914374429, + "1": 0.7126052675987479, + "2": 0.6968757347312367 + }, + "micro_accuracy": { + "0": 0.8337437840397821, + "1": 0.9137106322519536, + "2": 0.9990764859104901 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35208, + "metrics": { + "accuracy": 0.9642272032183972, + "precision": 0.9621322595440107, + "recall": 0.7940774494750392, + "f1": 0.8559202478885654 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38452, + "metrics": { + "accuracy": 0.9798380770766145, + "precision": 0.9813582892523279, + "recall": 0.7881178200935575, + "f1": 0.8613988006364001 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9879301274204382, + "precision": 0.9917603860229236, + "recall": 0.7725506252744735, + "f1": 0.8652970967233362 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.513369619846344, + 0.5913177728652954, + 0.8463716506958008 + ], + "full": { + "accuracy": { + "0": 0.8297329234230693, + "1": 0.9371673280837497, + "2": 0.9685322979359694 + }, + "precision": { + "0": 0.5765988016597196, + "1": 0.6672605314057598, + "2": 0.6394863690228767 + }, + "recall": { + "0": 0.7158386940830017, + "1": 0.8028247469715531, + "2": 0.8178052140525619 + }, + "f1": { + "0": 0.4952952124369994, + "1": 0.6092459823242529, + "2": 0.5946226332779055 + }, + "micro_accuracy": { + "0": 0.8030057462796523, + "1": 0.8878317792418279, + "2": 0.996295438758972 + }, + "theilU": { + "0": 0.9525401112314309, + "1": 0.9550597834064932, + "2": 0.9086734404521702 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38932, + "metrics": { + "accuracy": 0.934962103106059, + "precision": 0.9381498118770788, + "recall": 0.8439005661627716, + "f1": 0.8761809466681394 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42643, + "metrics": { + "accuracy": 0.9564080257719563, + "precision": 0.9529007912283691, + "recall": 0.8523142992788373, + "f1": 0.8890123517529243 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47467, + "metrics": { + "accuracy": 0.9786013073845059, + "precision": 0.9791079040923648, + "recall": 0.8644686599259757, + "f1": 0.9158065618920347 + } + } + } + } + } + }, + "onnx:rotation30_pad15_3": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad15_3/mini_metric.csv", + "source_sha256": "ed98946456c97f788a7bbcd2d2dfdd449f39c272643df67916788979b388c788", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.770552396774292, + 0.7823580801486969, + 0.9773475527763367 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7513525957454966, + "1": 0.8515498392515479, + "2": 0.8624898678796847 + }, + "precision": { + "0": 0.3357177251908713, + "1": 0.3869534389691655, + "2": 0.3360275595138312 + }, + "recall": { + "0": 0.7513525957454966, + "1": 0.8515498392515479, + "2": 0.8624898678796847 + }, + "f1": { + "0": 0.32100616569668566, + "1": 0.3880775533670641, + "2": 0.3485676456240567 + }, + "micro_accuracy": { + "0": 0.7501704932939305, + "1": 0.8322724861710995, + "2": 0.9608812608926272 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8681754725478049, + "precision": 0.8800706763295238, + "recall": 0.8681754725478049, + "f1": 0.8586965864033043 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45983, + "metrics": { + "accuracy": 0.8817732545623048, + "precision": 0.8625063923843291, + "recall": 0.8817732545623048, + "f1": 0.8541158274741251 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52372, + "metrics": { + "accuracy": 0.8918633480616375, + "precision": 0.8154730327116526, + "recall": 0.8918633480616375, + "f1": 0.840370927570417 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.770552396774292, + 0.7823580801486969, + 0.9773475527763367 + ], + "full": { + "accuracy": { + "0": 0.864259698288895, + "1": 0.9602256286013219, + "2": 0.9891968996008379 + }, + "precision": { + "0": 0.7129414582230171, + "1": 0.7545606744376422, + "2": 0.8090777567603441 + }, + "recall": { + "0": 0.6581485418241365, + "1": 0.7659093737952452, + "2": 0.7291856145583755 + }, + "f1": { + "0": 0.5603296083270611, + "1": 0.6569306030813745, + "2": 0.6682212708489148 + }, + "micro_accuracy": { + "0": 0.82996360220735, + "1": 0.902649332082384, + "2": 0.9988161010260458 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8067174357808593, + "1": 0.8480336440100023, + "2": 0.8160566795483822 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34924, + "metrics": { + "accuracy": 0.9632906010281114, + "precision": 0.9619290738861205, + "recall": 0.7985746451092541, + "f1": 0.8589686091730018 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39933, + "metrics": { + "accuracy": 0.9746103739038117, + "precision": 0.9741038410766583, + "recall": 0.8283883340772565, + "f1": 0.885697418184335 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43066, + "metrics": { + "accuracy": 0.9874911469062333, + "precision": 0.9918473385541731, + "recall": 0.7916052581091266, + "f1": 0.8772909956369972 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9332101345062256, + 0.9805076718330384, + 0.9972158670425416 + ], + "full": { + "accuracy": { + "0": 0.8993042897125594, + "1": 0.9765118678772962, + "2": 0.9940916257004148 + }, + "precision": { + "0": 0.8457863797403911, + "1": 0.9212369149917536, + "2": 0.9104815309041331 + }, + "recall": { + "0": 0.580673410297893, + "1": 0.6322483811758616, + "2": 0.6457444404845172 + }, + "f1": { + "0": 0.5804525856869176, + "1": 0.6760309577391611, + "2": 0.6942029367124118 + }, + "micro_accuracy": { + "0": 0.8519661172904658, + "1": 0.9276609564017212, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31014, + "metrics": { + "accuracy": 0.9778664722783771, + "precision": 0.9755371093676788, + "recall": 0.7220718478185935, + "f1": 0.8088370437219299 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33976, + "metrics": { + "accuracy": 0.9868259053778615, + "precision": 0.9870146798561634, + "recall": 0.7130376570404691, + "f1": 0.810235529476725 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9931587244952169, + "precision": 0.9921871969315368, + "recall": 0.6946461040683022, + "f1": 0.8116705307619455 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7865936160087585, + 0.8993590474128723, + 0.98397696018219 + ], + "full": { + "accuracy": { + "0": 0.8690130364323082, + "1": 0.9690858326600882, + "2": 0.9893179755256315 + }, + "precision": { + "0": 0.724230514194755, + "1": 0.8392258546323281, + "2": 0.8092930222080731 + }, + "recall": { + "0": 0.6526380166096016, + "1": 0.7280490051317001, + "2": 0.7157724451265104 + }, + "f1": { + "0": 0.5635018832857759, + "1": 0.693231705845092, + "2": 0.6613159259846374 + }, + "micro_accuracy": { + "0": 0.8319441155576605, + "1": 0.9128344778593417, + "2": 0.9990054463651432 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35170, + "metrics": { + "accuracy": 0.9638203303886238, + "precision": 0.9635345560148336, + "recall": 0.7944708639020808, + "f1": 0.8571265688892376 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38463, + "metrics": { + "accuracy": 0.9787994209137294, + "precision": 0.9793948511514551, + "recall": 0.7879687686243412, + "f1": 0.8606111788082011 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.9876313400823101, + "precision": 0.9921532420851567, + "recall": 0.775368263533711, + "f1": 0.8671146979422726 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.4986054003238678, + 0.5710593461990356, + 0.8259501457214355 + ], + "full": { + "accuracy": { + "0": 0.824975364170027, + "1": 0.9323193587651343, + "2": 0.9662856355824953 + }, + "precision": { + "0": 0.5675215824090611, + "1": 0.6453036088704217, + "2": 0.6620438236169384 + }, + "recall": { + "0": 0.7147823674053605, + "1": 0.8029731865161972, + "2": 0.8162293842273993 + }, + "f1": { + "0": 0.4885422007895161, + "1": 0.5914080450287946, + "2": 0.6182197789183784 + }, + "micro_accuracy": { + "0": 0.8008377360079143, + "1": 0.8852217474583763, + "2": 0.9956218821696942 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38821, + "metrics": { + "accuracy": 0.9328288030848192, + "precision": 0.9394816322721306, + "recall": 0.8424987667797293, + "f1": 0.8753591320112727 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42566, + "metrics": { + "accuracy": 0.9539171260637532, + "precision": 0.9492454452386484, + "recall": 0.8503788888394346, + "f1": 0.8857468904117138 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47456, + "metrics": { + "accuracy": 0.9806991569902577, + "precision": 0.9658983696004576, + "recall": 0.8625610764534104, + "f1": 0.9082482703112855 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7703565061092377, + 0.797132283449173, + 0.9761196076869965 + ], + "scores": { + "accuracy": { + "0": 0.86426052434185, + "1": 0.9624662292079148, + "2": 0.9891975467051032 + }, + "precision": { + "0": 0.7129390273470394, + "1": 0.7657638578159159, + "2": 0.809085199968088 + }, + "recall": { + "0": 0.6581794698627934, + "1": 0.763559424742198, + "2": 0.7304825952879369 + }, + "f1": { + "0": 0.5603471015576356, + "1": 0.6647801072084766, + "2": 0.6688791573982424 + }, + "micro_accuracy": { + "0": 0.8299366048368162, + "1": 0.9038651685393259, + "2": 0.9987966027169007 + }, + "theilU": { + "0": 0.9506293360700655, + "1": 0.9530907894039403, + "2": 0.904985777478236 + }, + "coverage": { + "0": 0.8068121542774873, + "1": 0.8429946199893915, + "2": 0.8185761915586875 + } + } + } + }, + "onnx:rotation30_pad25_3": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "precision": { + "0": 0.335607011455683, + "1": 0.38755157575495597, + "2": 0.34712795694828363 + }, + "recall": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "f1": { + "0": 0.31973098589694526, + "1": 0.38771743876773856, + "2": 0.35905067781483396 + }, + "micro_accuracy": { + "0": 0.7507577479730242, + "1": 0.8323861483670532, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41703, + "metrics": { + "accuracy": 0.8698036966650652, + "precision": 0.883195544629941, + "recall": 0.8698036966650652, + "f1": 0.8612589983083873 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 45971, + "metrics": { + "accuracy": 0.8812178342202511, + "precision": 0.864319570078447, + "recall": 0.8812178342202511, + "f1": 0.8548890385082205 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52403, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "full": { + "accuracy": { + "0": 0.8635268756201978, + "1": 0.9578599395148406, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7198655161183526, + "1": 0.7876914346408369, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6615516920144863, + "1": 0.7626601078847843, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5675578092246022, + "1": 0.6759673575495095, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8296529233636152, + "1": 0.9032895919467913, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8132530120481928, + "1": 0.843070394786694, + "2": 0.8212661968629233 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 35245, + "metrics": { + "accuracy": 0.963573617550616, + "precision": 0.9613612115206147, + "recall": 0.8049544911995276, + "f1": 0.8626739450453852 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39824, + "metrics": { + "accuracy": 0.975627801896181, + "precision": 0.9744124082410346, + "recall": 0.8284542660506211, + "f1": 0.8857427309465413 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 43342, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9330078959465028, + 0.9808727502822876, + 0.9974356293678284 + ], + "full": { + "accuracy": { + "0": 0.8958818981982676, + "1": 0.9766731633485423, + "2": 0.9934599851689291 + }, + "precision": { + "0": 0.8488301817076527, + "1": 0.9349450037960787, + "2": 0.9498876210445948 + }, + "recall": { + "0": 0.5755733928870285, + "1": 0.6367466549994095, + "2": 0.6455188522788526 + }, + "f1": { + "0": 0.5777980098982209, + "1": 0.6871119307217507, + "2": 0.7242275050366153 + }, + "micro_accuracy": { + "0": 0.8522096830938269, + "1": 0.9280668994073232, + "2": 0.9994858055262374 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31139, + "metrics": { + "accuracy": 0.9772824895065618, + "precision": 0.9759576331858164, + "recall": 0.7244536661424917, + "f1": 0.8101974819931572 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 34056, + "metrics": { + "accuracy": 0.9872066649564367, + "precision": 0.9869220706436679, + "recall": 0.7145479286699414, + "f1": 0.8109908949574413 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36945, + "metrics": { + "accuracy": 0.9924273512482334, + "precision": 0.9919692254750357, + "recall": 0.690324440612862, + "f1": 0.8073575502216895 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7826480269432068, + 0.900927484035492, + 0.9850951433181764 + ], + "full": { + "accuracy": { + "0": 0.8686288052834912, + "1": 0.9685256384356089, + "2": 0.9893592346950689 + }, + "precision": { + "0": 0.738927432680573, + "1": 0.8470595060946164, + "2": 0.9107134038486736 + }, + "recall": { + "0": 0.6516737035411767, + "1": 0.7294362252336144, + "2": 0.7408230332730312 + }, + "f1": { + "0": 0.5714027645948971, + "1": 0.6978836889168124, + "2": 0.7561339190719285 + }, + "micro_accuracy": { + "0": 0.8331991475254559, + "1": 0.9127397584655458, + "2": 0.9991238456073881 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35240, + "metrics": { + "accuracy": 0.9653183066765808, + "precision": 0.9636871772572874, + "recall": 0.7956245433056017, + "f1": 0.8575482217269305 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38507, + "metrics": { + "accuracy": 0.9789418689306925, + "precision": 0.9794493441862221, + "recall": 0.7902786563673672, + "f1": 0.8619247098397643 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42222, + "metrics": { + "accuracy": 0.9876791138574482, + "precision": 0.9924800890720088, + "recall": 0.7793768702373942, + "f1": 0.8699130514104324 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.506381094455719, + 0.5820246338844299, + 0.8370890021324158 + ], + "full": { + "accuracy": { + "0": 0.8258580566003837, + "1": 0.9274427710014347, + "2": 0.9632609424279068 + }, + "precision": { + "0": 0.5753514931278402, + "1": 0.6679624600829293, + "2": 0.655704275245192 + }, + "recall": { + "0": 0.7130878850154326, + "1": 0.8023516736810761, + "2": 0.8188781084613986 + }, + "f1": { + "0": 0.4926253112229873, + "1": 0.6083311670068455, + "2": 0.6054171988779777 + }, + "micro_accuracy": { + "0": 0.8011745143025532, + "1": 0.8853480393188659, + "2": 0.9960639036814077 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38828, + "metrics": { + "accuracy": 0.9350108762911535, + "precision": 0.9390448569451352, + "recall": 0.843502482502277, + "f1": 0.8756459313060244 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42585, + "metrics": { + "accuracy": 0.9578232936969145, + "precision": 0.950365265908976, + "recall": 0.8534410434015306, + "f1": 0.8880107864781295 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47470, + "metrics": { + "accuracy": 0.9771968807059972, + "precision": 0.9809600570048073, + "recall": 0.8657674268419359, + "f1": 0.9170111582851428 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "scores": { + "accuracy": { + "0": 0.8633950623295443, + "1": 0.9577182088953489, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7190458657983405, + "1": 0.7876773050674551, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6587922723184866, + "1": 0.7627253495053744, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5660150187297233, + "1": 0.6759937887132027, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8299843636957689, + "1": 0.9032620416966212, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8117185724028189, + "1": 0.8432219443812988, + "2": 0.8212661968629233 + } + } + } + }, + "onnx:wide_rotation_mixed_padding_5": { + "source": "local-evidence/mambo-composed-full/onnx/wide_rotation_mixed_padding_5/mini_metric.csv", + "source_sha256": "48c8f7f6dddb93f35614454d6ffbb14ed525e2ae68f670b805a072b53567ab8d", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7873642444610596, + 0.8101237118244171, + 0.9925266802310944 + ], + "operating_points": { + "zero": { + "thresholds": [ + 0.0, + 0.0, + 0.0 + ], + "full": { + "accuracy": { + "0": 0.755234026103822, + "1": 0.8526484792215151, + "2": 0.8682812241104954 + }, + "precision": { + "0": 0.33687151585862535, + "1": 0.3940384661527601, + "2": 0.3481035571052136 + }, + "recall": { + "0": 0.755234026103822, + "1": 0.8526484792215151, + "2": 0.8682812241104954 + }, + "f1": { + "0": 0.32185110296574626, + "1": 0.3957398655739386, + "2": 0.3601292312019684 + }, + "micro_accuracy": { + "0": 0.7538455709630977, + "1": 0.835985451238918, + "2": 0.9631923922103508 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 308, + "truth_images": 44643, + "accepted_predictions": 41811, + "metrics": { + "accuracy": 0.8715557123596651, + "precision": 0.8834840123715941, + "recall": 0.8715557123596651, + "f1": 0.8627053901084056 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images": 52567, + "accepted_predictions": 46078, + "metrics": { + "accuracy": 0.8853011970016827, + "precision": 0.8667635483517392, + "recall": 0.8853011970016827, + "f1": 0.8585426621711364 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images": 52783, + "accepted_predictions": 52397, + "metrics": { + "accuracy": 0.8985234077270696, + "precision": 0.8300692484735555, + "recall": 0.8985234077270696, + "f1": 0.8530026677917844 + } + } + } + }, + "optimized": { + "thresholds": [ + 0.7873642444610596, + 0.8101237118244171, + 0.9925266802310944 + ], + "full": { + "accuracy": { + "0": 0.8695089438155129, + "1": 0.9606679222736707, + "2": 0.9945735885843039 + }, + "precision": { + "0": 0.7394833663961508, + "1": 0.7910805789285074, + "2": 0.8742836172330374 + }, + "recall": { + "0": 0.6572822588494145, + "1": 0.7604214628645327, + "2": 0.6939901432993258 + }, + "f1": { + "0": 0.5750160386991705, + "1": 0.6826130391618014, + "2": 0.6993534817995831 + }, + "micro_accuracy": { + "0": 0.8327523670450798, + "1": 0.9048729621241002, + "2": 0.9993341717836798 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8043115859665075, + "1": 0.8447563840266727, + "2": 0.7681859513525802 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images": 42778, + "accepted_predictions": 34889, + "metrics": { + "accuracy": 0.9639295303005937, + "precision": 0.9614004632913131, + "recall": 0.7979042954631081, + "f1": 0.8581004496525564 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images": 46868, + "accepted_predictions": 39838, + "metrics": { + "accuracy": 0.9750633809126213, + "precision": 0.9738767467913795, + "recall": 0.82798046241586, + "f1": 0.8853555685268851 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 40543, + "metrics": { + "accuracy": 0.9937167867818257, + "precision": 0.9924784437276808, + "recall": 0.749000213953435, + "f1": 0.849553887374868 + } + } + } + }, + "coverage_70": { + "thresholds": [ + 0.9377490878105164, + 0.9829234480857848, + 0.9976534247398376 + ], + "full": { + "accuracy": { + "0": 0.8981484684758387, + "1": 0.9772528484978749, + "2": 0.9941884144043752 + }, + "precision": { + "0": 0.848225714611513, + "1": 0.933284851520251, + "2": 0.9104544641431674 + }, + "recall": { + "0": 0.5783582894392819, + "1": 0.6360370412463672, + "2": 0.6490372022402425 + }, + "f1": { + "0": 0.5797842021095846, + "1": 0.686210878766654, + "2": 0.6982079283911002 + }, + "micro_accuracy": { + "0": 0.8515331114178236, + "1": 0.9270385104597981, + "2": 0.9995128683932776 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.6999886337804047, + "1": 0.6999886337804047, + "2": 0.6999886337804047 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 270, + "truth_images": 42705, + "accepted_predictions": 31004, + "metrics": { + "accuracy": 0.9779636889139668, + "precision": 0.9763167556362732, + "recall": 0.7251751735918991, + "f1": 0.8111347887875858 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789246", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 210, + "truth_images": 46789, + "accepted_predictions": 33953, + "metrics": { + "accuracy": 0.9877665840630739, + "precision": 0.9879987085886791, + "recall": 0.7139705404842976, + "f1": 0.8109186480358266 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 36944, + "metrics": { + "accuracy": 0.9932707956261188, + "precision": 0.9921530073387378, + "recall": 0.6945834958292815, + "f1": 0.8112385022689916 + } + } + } + }, + "coverage_80": { + "thresholds": [ + 0.7969450950622559, + 0.9094918370246888, + 0.9860803484916688 + ], + "full": { + "accuracy": { + "0": 0.870493077157555, + "1": 0.9702347124009509, + "2": 0.9895768602990621 + }, + "precision": { + "0": 0.747828534071083, + "1": 0.8626430540125154, + "2": 0.8401327366486231 + }, + "recall": { + "0": 0.6542467064292844, + "1": 0.7311824992272253, + "2": 0.7354484625565733 + }, + "f1": { + "0": 0.5770189946103015, + "1": 0.7116937076075048, + "2": 0.6970330018229233 + }, + "micro_accuracy": { + "0": 0.8337911437366801, + "1": 0.9137106322519536, + "2": 0.9990764859104901 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.7999924225202698, + "1": 0.7999924225202698, + "2": 0.7999924225202698 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 282, + "truth_images": 43436, + "accepted_predictions": 35209, + "metrics": { + "accuracy": 0.9642930734756164, + "precision": 0.9620844555272111, + "recall": 0.7942358812122685, + "f1": 0.8560547783361164 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 220, + "truth_images": 47497, + "accepted_predictions": 38452, + "metrics": { + "accuracy": 0.9798368925772063, + "precision": 0.9813682696210738, + "recall": 0.7881903730029471, + "f1": 0.8614467778949001 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 42219, + "metrics": { + "accuracy": 0.987931101398914, + "precision": 0.9917605869928529, + "recall": 0.7728708109490503, + "f1": 0.8655205815378383 + } + } + } + }, + "coverage_90": { + "thresholds": [ + 0.5132138729095459, + 0.5910288095474243, + 0.8467361330986023 + ], + "full": { + "accuracy": { + "0": 0.8306881085608662, + "1": 0.9372401160760394, + "2": 0.9685237018777774 + }, + "precision": { + "0": 0.5780671544235811, + "1": 0.6644000128149382, + "2": 0.6394279268346845 + }, + "recall": { + "0": 0.7158430899566303, + "1": 0.8029277732982208, + "2": 0.8178313547101703 + }, + "f1": { + "0": 0.4965186149296989, + "1": 0.6066165586959505, + "2": 0.5946051952129192 + }, + "micro_accuracy": { + "0": 0.8030267949230672, + "1": 0.8878528278852428, + "2": 0.9962533414721422 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8999962112601348, + "1": 0.8999962112601348, + "2": 0.8999962112601348 + } + }, + "tail": { + "0": { + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 295, + "truth_images": 44256, + "accepted_predictions": 38934, + "metrics": { + "accuracy": 0.93498406973104, + "precision": 0.9380106126608642, + "recall": 0.8440867567559296, + "f1": 0.8762121177514529 + } + }, + "1": { + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 231, + "truth_images": 48032, + "accepted_predictions": 42641, + "metrics": { + "accuracy": 0.9565060217269441, + "precision": 0.9534398462019361, + "recall": 0.852457911734192, + "f1": 0.8893584622879612 + } + }, + "2": { + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images": 52770, + "accepted_predictions": 47467, + "metrics": { + "accuracy": 0.9785913540539676, + "precision": 0.9790063992391888, + "recall": 0.8645003038799225, + "f1": 0.9157762747265321 + } + } + } + } + }, + "native_threshold_alignment": { + "thresholds": [ + 0.7889324426651001, + 0.810388594865799, + 0.9926556646823883 + ], + "scores": { + "accuracy": { + "0": 0.8703479707377185, + "1": 0.96067989127921, + "2": 0.9945795017525476 + }, + "precision": { + "0": 0.7403401572665786, + "1": 0.7911071747194021, + "2": 0.8742863897999358 + }, + "recall": { + "0": 0.6567271492564797, + "1": 0.7600610723177453, + "2": 0.6934517477758068 + }, + "f1": { + "0": 0.575343447122764, + "1": 0.682391475443265, + "2": 0.6990231546090787 + }, + "micro_accuracy": { + "0": 0.8330150647146192, + "1": 0.9048825890954763, + "2": 0.9993581197847232 + }, + "theilU": { + "0": 0.9525711652800813, + "1": 0.9551413947992818, + "2": 0.9087502982629312 + }, + "coverage": { + "0": 0.8035348942941578, + "1": 0.8446427218307191, + "2": 0.767333484882928 + } + } + } + } + } +} diff --git a/docs/assets/mambo-composed-tta.svg b/docs/assets/mambo-composed-tta.svg new file mode 100644 index 0000000..1bcad34 --- /dev/null +++ b/docs/assets/mambo-composed-tta.svg @@ -0,0 +1,3013 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Current padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.40 + + + + + + + + + + + + + 0.45 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.55 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Matched-coverage full F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Current padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.45 + + + + + + + + + + + + + 0.50 + + + + + + + + + + + + + 0.55 + + + + + + + + + + + + + 0.60 + + + + + + + + + + + + + 0.65 + + + + + + + + + + + + + 0.70 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Matched-coverage full F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + V3 single view + + + + + + + + + + + + + Current padded scale + + + + + + + + + + + + + ±30° / pad15 · 3 views + + + + + + + + + + + + + ±30° / pad25 · 3 views + + + + + + + + + + + + + Mixed padding · 5 views + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Unthresholded Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Calibrated Macro-F1 + + + + + + + + + + + + + + + + + + 70.0 + + + + + + + + + + + + + 72.5 + + + + + + + + + + + + + 75.0 + + + + + + + + + + + + + 77.5 + + + + + + + + + + + + + 80.0 + + + + + + + + + + + + + 82.5 + + + + + + + + + + + + + 85.0 + + + + + + + + + + + + + 87.5 + + + + + + + + + + + + + 90.0 + + + + Realized coverage (%) + + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.5 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.7 + + + + Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Matched-coverage full F1 + + + + Composed TTA · shared 52,788-image reporting partition · native PyTorch + + + Calibration: 5,852 separate images, per-recipe/rank mini_metrics Macro-F1 thresholds. All truth; legacy northern Europe. + Matched-coverage points use label-free reporting confidences; actual coverage includes score ties. Lines are guides, not fitted curves. + Support >5 classes are common across all compared native/ONNX pipelines within each operating point; no evaluation rows removed. + Recipe exploration used this dataset. These are descriptive comparisons, not independent validation; CSV includes all metrics/backends. + + + + + + + Fill = averaging domain (left and middle columns) + + + + + + + + + + + Full support + + + + + + + + + + + Support >5 in truth and accepted predictions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/mambo-compact-tta.md b/docs/mambo-compact-tta.md index 09aae0b..d2ed8ff 100644 --- a/docs/mambo-compact-tta.md +++ b/docs/mambo-compact-tta.md @@ -1,5 +1,8 @@ # Compact padding-and-rotation TTA qualification +The completed [full composed-TTA comparison](mambo-composed-tta.md) evaluates the +three shortlisted recipes on both backends, with calibration and matched coverage. + **Composing stronger padding into existing rotation views improves the preliminary five-view recipe without adding passes.** The leading five-view candidate uses original, ±10° with 15% padding, and ±30° with 25% padding. Three-view candidates diff --git a/docs/mambo-composed-tta.md b/docs/mambo-composed-tta.md new file mode 100644 index 0000000..6af68cb --- /dev/null +++ b/docs/mambo-composed-tta.md @@ -0,0 +1,200 @@ +# Full composed-TTA comparison + +**The best balanced candidate is original + ±30° rotation with 25% edge padding +(three views).** The full Flemming comparison confirms the preliminary improvement +over `padded_scale` on both native PyTorch and standard ONNX. The composed five-view +recipe gives smaller additional species/genus gains, but is not consistently better +at family level. The release TTA default remains `padded_scale` pending integration +and standalone runtime qualification of the selected candidate. + +## Findings + +- **Three views, stronger composition:** unthresholded native macro-F1 improves + from 0.3001/0.3601/0.2970 to 0.3201/0.3873/0.3592 at species/genus/family. + On the common support >5 domain, the corresponding scores improve from + 0.8369/0.8342/0.8211 to 0.8612/0.8552/0.8506. +- **The benefit persists at matched coverage.** At approximately 80% coverage, + full-support macro-F1 improves from 0.5140/0.6404/0.6105 to + 0.5729/0.6990/0.7560. This is more than merely accepting more predictions. +- **Recipe-specific calibration:** the three-view candidate reaches + 0.5661/0.6776/0.7074 full-support macro-F1 at 81.16%/84.32%/82.09% coverage, + versus the current TTA's 0.5239/0.6655/0.6073 at 78.32%/77.73%/78.74%. + Its calibrated family macro accuracy is lower (98.92% versus 99.56%), so the + improvement is a coverage/F1 trade-off, not a win on every metric. +- **Five views remain an option, not the clear default.** Original + ±10° with + 15% padding + ±30° with 25% padding has the strongest unthresholded scores + among these candidates. At 80% coverage its species/genus F1 is slightly higher + than the three-view candidate (0.5770/0.7126), but family F1 is lower (0.6969). + Its calibrated family threshold is also more restrictive: 76.72% coverage. +- **Backend agreement:** across all three new recipes, ranks, and unthresholded + or matched-coverage points, the largest native/ONNX full-support macro-F1 + difference is 0.00263. Independently selected thresholds can differ; the JSON + also evaluates ONNX at the corresponding native thresholds. + +These are descriptive results from one out-of-domain dataset, without uncertainty +intervals. Recipe exploration used part of the reporting data; the separate +calibration partition does not make recipe selection independently validated. +Full-support macro-F1 is sensitive to rare and predicted-only classes, so the +common-support results and coverage must remain visible alongside it. + +## Recipes and runtime scope + +Every transformed view rotates the original decoded image on an expanded canvas +with bilinear interpolation, fills corners with RGB (124,116,104), then edge-pads +each side by the stated fraction of that axis. Ordinary deployment preprocessing +follows. Padding and rotation are nested within each view; no extra crop transform +is added. Recipes average FP32 leaf logits before regional filtering and hierarchy. + +All 58,640 images were collected for each backend; seven shared views reconstruct +the three candidate recipes. Native used an FP16 backbone with an FP32 head; +ONNX used the standard floating graph with CUDA TF32, batch 32 and four workers. +First-batch aggregates matched the ordinary TTA API for every recipe within 1e-6. +The processes overlapped on the laptop GPU, so **collection elapsed times are not +inference-speed benchmarks**. The earlier [small warm benchmark](mambo-compact-tta.md) +measured roughly 50.7 images/s for this three-view candidate versus 53.3 for current +TTA; the new composed five-view recipe still needs standalone timing. + +All quality results below use the same **52,788 reporting images**, with thresholds fitted on +5,852 separate calibration images. Every model uses legacy northern Europe and all truth, +including out-of-vocabulary labels. Metrics come from pinned `mini_metrics`. Recipe selection +used this dataset, including a reporting subset; this is not independent validation. + +Metric cells show **full support / common support >5**. The latter requires more than five +truth instances and accepted predictions in every compared pipeline, separately per operating +point. Classes can differ between operating points. No evaluation rows are dropped. + +## No confidence threshold + +### Species + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 68.56% / 79.50% | 0.2620 / 0.7878 | 100.00% | +| V3 single view | 71.36% / 82.03% | 0.2593 / 0.8100 | 100.00% | +| Current padded scale | 74.06% / 84.80% | 0.3001 / 0.8369 | 100.00% | +| ±30° / pad15 · 3 views | 75.13% / 86.81% | 0.3207 / 0.8588 | 100.00% | +| ±30° / pad25 · 3 views | 74.94% / 86.96% | 0.3201 / 0.8612 | 100.00% | +| Mixed padding · 5 views | 75.52% / 87.16% | 0.3216 / 0.8628 | 100.00% | + +### Genus + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | +| V3 single view | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | +| Current padded scale | 83.13% / 86.42% | 0.3601 / 0.8342 | 100.00% | +| ±30° / pad15 · 3 views | 85.15% / 88.17% | 0.3881 / 0.8542 | 100.00% | +| ±30° / pad25 · 3 views | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | +| Mixed padding · 5 views | 85.27% / 88.53% | 0.3958 / 0.8586 | 100.00% | + +### Family + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | +| V3 single view | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | +| Current padded scale | 85.79% / 88.66% | 0.2970 / 0.8211 | 100.00% | +| ±30° / pad15 · 3 views | 86.25% / 89.19% | 0.3486 / 0.8403 | 100.00% | +| ±30° / pad25 · 3 views | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | +| Mixed padding · 5 views | 86.82% / 89.84% | 0.3601 / 0.8529 | 100.00% | + +## Recipe-specific calibrated thresholds + +### Species + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 84.65% / 95.21% | 0.4467 / 0.7799 | 69.73% | +| V3 single view | 86.69% / 96.35% | 0.5081 / 0.8016 | 70.81% | +| Current padded scale | 86.59% / 95.86% | 0.5239 / 0.8413 | 78.32% | +| ±30° / pad15 · 3 views | 86.43% / 96.34% | 0.5615 / 0.8595 | 80.67% | +| ±30° / pad25 · 3 views | 86.34% / 96.38% | 0.5661 / 0.8618 | 81.16% | +| Mixed padding · 5 views | 87.04% / 96.41% | 0.5753 / 0.8576 | 80.34% | + +### Genus + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | +| V3 single view | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | +| Current padded scale | 96.28% / 97.71% | 0.6655 / 0.8477 | 77.73% | +| ±30° / pad15 · 3 views | 96.25% / 97.54% | 0.6639 / 0.8840 | 84.29% | +| ±30° / pad25 · 3 views | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | +| Mixed padding · 5 views | 96.07% / 97.51% | 0.6825 / 0.8855 | 84.46% | + +### Family + +| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | +|---|---:|---:|---:| +| MAMBO v2 | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | +| V3 single view | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | +| Current padded scale | 99.56% / 99.49% | 0.6073 / 0.8536 | 78.74% | +| ±30° / pad15 · 3 views | 98.92% / 98.75% | 0.6689 / 0.8782 | 81.84% | +| ±30° / pad25 · 3 views | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | +| Mixed padding · 5 views | 99.46% / 99.37% | 0.6990 / 0.8491 | 76.72% | + +![Calibrated, unthresholded and matched-coverage comparison](assets/mambo-composed-tta.svg) + +## Support excluded from the averaging domain + +| Setting | Rank | Common classes | Truth images outside / % | +|---|---|---:|---:| +| zero | species | 308 | 8,145 / 15.43% | +| zero | genus | 242 | 221 / 0.42% | +| zero | family | 20 | 5 / 0.01% | +| optimized | species | 272 | 10,010 / 18.96% | +| optimized | genus | 215 | 5,920 / 11.21% | +| optimized | family | 19 | 18 / 0.03% | +| coverage_70 | species | 270 | 10,083 / 19.10% | +| coverage_70 | genus | 210 | 5,999 / 11.36% | +| coverage_70 | family | 19 | 18 / 0.03% | +| coverage_80 | species | 282 | 9,352 / 17.72% | +| coverage_80 | genus | 220 | 5,291 / 10.02% | +| coverage_80 | family | 19 | 18 / 0.03% | +| coverage_90 | species | 295 | 8,532 / 16.16% | +| coverage_90 | genus | 231 | 4,756 / 9.01% | +| coverage_90 | family | 19 | 18 / 0.03% | + +Predicted-only classes have zero truth images and can still strongly affect macro-F1. +These are not rejection counts. Coverage is unchanged by support truncation. + +## Evidence and interpretation + +The [CSV](assets/mambo-composed-tta.csv) includes both backends, all ranks, macro accuracy, +precision, recall, F1, micro accuracy, Theil U, coverage, thresholds and retained-support counts. +The [JSON](assets/mambo-composed-tta.json) also records exact class sets, source hashes and +partition identities. Its ONNX entries include native-threshold comparisons to distinguish +backend differences from calibration differences. + +Matched-coverage thresholds are selected from reporting confidence scores without using truth +labels; their realized coverage is computed by mini_metrics and may differ slightly because of +ties. They are diagnostic operating points, not deployment-calibrated thresholds. + +## Reproduction and provenance + +Collection: `dev.releases.mambo_v3.composed_full`, with `--backend torch` or +`--backend onnx`, the verified release bundle, full Flemming manifest and image root. +Use a fresh output directory for each backend. Analysis and figure generation: + +```bash +/tmp/mambo-release-metrics/bin/python -m dev.releases.mambo_v3.composed_metrics \ + --root local-evidence/mambo-composed-full \ + --output local-evidence/mambo-composed-full/analysis +.venv/bin/python -m dev.releases.mambo_v3.composed_report \ + --data local-evidence/mambo-composed-full/analysis/composed-comparison.json \ + --output local-evidence/mambo-composed-report +``` + +The metric environment must contain the pinned mini_metrics revision recorded in +the JSON. The figure/table generator recreates the numeric report; the findings +above are the accompanying interpretation. Retained local `torch/report.json` and +`onnx/report.json` contain manifest, bundle, runner, transform and prediction hashes. +The native run predates the runtime-metadata correction: its top-level +`effective_precision=fp16` describes execution; its older nested initial runtime +flags do not. Original evidence is preserved without rewriting those records. + +All five retained baseline models reproduced their previous unthresholded and +calibrated full-support metrics within 1e-12. The support >5 domain here intersects +**all eleven pipelines**, so it need not equal the five-pipeline domain in earlier +reports. Source hashes and exact reporting/calibration identities are checked +before evaluation. No core-module behavior or deployment defaults changed. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index a58c79d..72505a7 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -1,5 +1,8 @@ # Optional outer test-time augmentation +The completed [full composed-TTA comparison](mambo-composed-tta.md) evaluates the +three shortlisted recipes on both backends, with calibration and matched coverage. + TTA is an opt-in deployment feature shared by PyTorch and ONNX. View generation operates on decoded images **before** the ordinary, unchanged preprocessing recipe. It does not depend on backbone internals, ONNX graph changes, an intermediate crop From 6b6c1ec04fdc46f6beeafd7697b71e75b5fbd131 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:06:42 +0200 Subject: [PATCH 049/221] feat: promote composed rotation TTA and refresh deployment comparisons --- deployment/README.md | 131 +- deployment/mambo_deploy/__init__.py | 4 +- deployment/mambo_deploy/augmentation.py | 40 +- deployment/mambo_deploy/cli.py | 2 +- .../mambo_v3/benchmark_acceleration.py | 5 +- .../mambo_v3/deployment-qualification.md | 69 + dev/releases/mambo_v3/promoted_report.py | 204 + dev/releases/mambo_v3/tail_charts.py | 2 +- docs/assets/mambo-promoted-quality.svg | 3049 + docs/assets/mambo-promoted-speed.json | 319 + docs/assets/mambo-promoted-speed.svg | 998 + docs/assets/mambo-promoted-tail.csv | 211 + docs/assets/mambo-promoted-tail.json | 47874 ++++++++++++++++ docs/assets/mambo-promoted-thresholds.json | 501 + docs/mambo-composed-tta.md | 8 +- docs/mambo-confidence-thresholds.md | 3 + docs/mambo-deployment-defaults.md | 3 + docs/mambo-frequency-comparison.md | 3 + docs/mambo-tail-metrics.md | 3 + docs/mambo-tta.md | 21 +- tests/releases/test_deployment.py | 34 +- 21 files changed, 53401 insertions(+), 83 deletions(-) create mode 100644 dev/releases/mambo_v3/promoted_report.py create mode 100644 docs/assets/mambo-promoted-quality.svg create mode 100644 docs/assets/mambo-promoted-speed.json create mode 100644 docs/assets/mambo-promoted-speed.svg create mode 100644 docs/assets/mambo-promoted-tail.csv create mode 100644 docs/assets/mambo-promoted-tail.json create mode 100644 docs/assets/mambo-promoted-thresholds.json diff --git a/deployment/README.md b/deployment/README.md index cd1c6fc..62b09c4 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -106,10 +106,15 @@ predictor = Predictor(bundle, backend="onnx", model="north_europe", tta=True) # CLI: append --tta ``` -This selects `padded_scale`: the original plus views with 8% and 15% edge padding. -It had the highest exploratory macro accuracy and lower cost than D4 or padded -rotations. Set `tta="padded_scale"` to pin the recipe explicitly; `tta=False` or -`--tta none` disables it. Result metadata records the resolved recipe and view count. +This selects `rotation30_pad25_3`: the original image plus −30° and +30° rotations, +each followed by 25% edge padding on each side. Rotation expands the canvas to +retain the image extent; ordinary preprocessing follows. This three-view recipe +improved all three ranks over the previous recipe, including at matched coverage. +Pin it with `tta="rotation30_pad25_3"`; `tta=False` or `--tta none` disables TTA. +The previous `padded_scale` remains available explicitly. The optional +`wide_rotation_mixed_padding_5` adds ±10° views with 15% padding: modest additional +species/genus gains, but no consistent family advantage. Result metadata records +the resolved recipe and view count. Views use ordinary preprocessing and the chosen backend. Species logits are averaged before preset filtering and hierarchy reduction; embeddings are the @@ -123,7 +128,7 @@ Results use the **same 52,788 Flemming reporting images** for both confidence settings, including out-of-vocabulary truth. Calibrated thresholds were fitted on 5,852 separate images using pinned `mini_metrics` Macro-F1, independently for each pipeline and rank. No-threshold results use threshold zero. All comparisons use -the shared legacy `north_europe` preset; TTA is the enabled padded-scale recipe. +the shared legacy `north_europe` preset; TTA uses `rotation30_pad25_3`. V3 uses automatic GPU precision. Deployment defaults remain threshold zero. In each metric cell, values are **full support / support >5**. Full support retains @@ -138,16 +143,16 @@ averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact | Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | |---|---|---:|---:|---:| -| MAMBO v2 | None | 68.56% / 78.85% | 0.2620 / 0.7815 | 100.00% | -| MAMBO v2 | Calibrated | 84.65% / 95.21% | 0.4467 / 0.7799 | 69.73% | -| V3 PyTorch | None | 71.36% / 81.12% | 0.2593 / 0.8013 | 100.00% | -| V3 PyTorch | Calibrated | 86.69% / 96.35% | 0.5081 / 0.8016 | 70.81% | -| V3 ONNX | None | 71.34% / 81.17% | 0.2594 / 0.8016 | 100.00% | -| V3 ONNX | Calibrated | 86.95% / 96.43% | 0.5100 / 0.8001 | 70.45% | -| V3 PyTorch + TTA | None | 74.06% / 83.91% | 0.3001 / 0.8288 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 86.59% / 95.86% | 0.5239 / 0.8413 | 78.32% | -| V3 ONNX + TTA | None | 74.09% / 83.93% | 0.3011 / 0.8287 | 100.00% | -| V3 ONNX + TTA | Calibrated | 87.55% / 96.50% | 0.5431 / 0.8224 | 74.05% | +| MAMBO v2 | None | 68.56% / 79.01% | 0.2620 / 0.7836 | 100.00% | +| MAMBO v2 | Calibrated | 84.65% / 95.23% | 0.4467 / 0.7800 | 69.73% | +| V3 PyTorch | None | 71.36% / 81.59% | 0.2593 / 0.8066 | 100.00% | +| V3 PyTorch | Calibrated | 86.69% / 96.36% | 0.5081 / 0.8016 | 70.81% | +| V3 ONNX | None | 71.34% / 81.64% | 0.2594 / 0.8068 | 100.00% | +| V3 ONNX | Calibrated | 86.95% / 96.44% | 0.5100 / 0.8001 | 70.45% | +| V3 PyTorch + TTA | None | 74.94% / 86.53% | 0.3201 / 0.8574 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 86.34% / 96.39% | 0.5661 / 0.8619 | 81.16% | +| V3 ONNX + TTA | None | 74.93% / 86.55% | 0.3197 / 0.8575 | 100.00% | +| V3 ONNX + TTA | Calibrated | 86.35% / 96.37% | 0.5676 / 0.8627 | 81.33% | ### Genus @@ -159,10 +164,10 @@ averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact | V3 PyTorch | Calibrated | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | | V3 ONNX | None | 80.54% / 83.84% | 0.3245 / 0.8055 | 100.00% | | V3 ONNX | Calibrated | 95.52% / 97.39% | 0.6043 / 0.8290 | 75.37% | -| V3 PyTorch + TTA | None | 83.13% / 86.42% | 0.3601 / 0.8342 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 96.28% / 97.71% | 0.6655 / 0.8477 | 77.73% | -| V3 ONNX + TTA | None | 83.13% / 86.43% | 0.3605 / 0.8340 | 100.00% | -| V3 ONNX + TTA | Calibrated | 96.30% / 97.74% | 0.6655 / 0.8477 | 77.69% | +| V3 PyTorch + TTA | None | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | +| V3 ONNX + TTA | None | 84.73% / 88.12% | 0.3877 / 0.8549 | 100.00% | +| V3 ONNX + TTA | Calibrated | 95.79% / 97.56% | 0.6760 / 0.8857 | 84.31% | ### Family @@ -174,64 +179,70 @@ averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact | V3 PyTorch | Calibrated | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | | V3 ONNX | None | 81.06% / 85.72% | 0.2809 / 0.7843 | 100.00% | | V3 ONNX | Calibrated | 99.33% / 99.22% | 0.5816 / 0.8174 | 73.26% | -| V3 PyTorch + TTA | None | 85.79% / 88.66% | 0.2970 / 0.8211 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 99.56% / 99.49% | 0.6073 / 0.8536 | 78.74% | -| V3 ONNX + TTA | None | 85.81% / 88.68% | 0.2971 / 0.8212 | 100.00% | -| V3 ONNX + TTA | Calibrated | 99.56% / 99.49% | 0.6065 / 0.8524 | 78.47% | +| V3 PyTorch + TTA | None | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | +| V3 ONNX + TTA | None | 86.37% / 89.32% | 0.3591 / 0.8502 | 100.00% | +| V3 ONNX + TTA | Calibrated | 98.92% / 98.75% | 0.7077 / 0.8806 | 82.13% | ### Support retained and comparison figure -Images whose **truth classes fall outside the truncated average** are counted below. -Predicted-only classes have zero truth images, so these counts alone do not describe -the effect on macro-F1. The final column counts accepted predictions into excluded -classes as a percentage of **all 52,788 reporting images**, not of accepted images. -These are not rejection rates, and the truth/prediction counts must not be added. +Counts below describe truth classes outside the truncated average, not rejected images. +The prediction range counts accepted predictions into excluded classes, divided by all +52,788 reporting images. Truth and prediction counts must not be added. | Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) | |---|---|---:|---:|---:| -| None | Species | 313 | 8,058 / 15.26% | 11,778–13,482 / 22.31%–25.54% | -| None | Genus | 242 | 221 / 0.42% | 7,310–8,015 / 13.85%–15.18% | -| None | Family | 20 | 5 / 0.01% | 547–897 / 1.04%–1.70% | -| Calibrated | Species | 272 | 10,010 / 18.96% | 5,786–7,490 / 10.96%–14.19% | -| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,083 / 5.10%–7.73% | -| Calibrated | Family | 19 | 18 / 0.03% | 12–36 / 0.02%–0.07% | - -![Both confidence settings, full and truncated macro metrics, and coverage](../docs/assets/mambo-threshold-tail.svg) - -The [metric export](../docs/assets/mambo-tail-metrics.csv) retains precision, recall, -all support cutoffs and per-model class sets. The [tail-metric tables](../docs/mambo-tail-metrics.md) -use this same reporting partition. The [threshold study](../docs/mambo-confidence-thresholds.md) -provides exact thresholds and P–R curves. Thresholding and truncation can change model -rankings; neither should be confused with an improvement in the underlying predictions. +| None | Species | 311 | 8,079 / 15.30% | 11,060–13,504 / 20.95%–25.58% | +| None | Genus | 242 | 221 / 0.42% | 6,814–8,015 / 12.91%–15.18% | +| None | Family | 20 | 5 / 0.01% | 385–897 / 0.73%–1.70% | +| Calibrated | Species | 273 | 10,001 / 18.95% | 5,780–7,678 / 10.95%–14.54% | +| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,684 / 5.10%–8.87% | +| Calibrated | Family | 19 | 18 / 0.03% | 11–36 / 0.02%–0.07% | + +![Both confidence settings, full and truncated macro metrics, and coverage](../docs/assets/mambo-promoted-quality.svg) + +The [metric export](../docs/assets/mambo-promoted-tail.csv) retains macro precision, +recall and support cutoffs −1/5/10/20; the [JSON](../docs/assets/mambo-promoted-tail.json) +records exact class sets. The [threshold evidence](../docs/assets/mambo-promoted-thresholds.json) +contains per-rank calibrated thresholds, all full-support metrics and prediction hashes. +These are optional study operating points, not automatic deployment thresholds; +the CLI's `--threshold` applies one scalar to all ranks. The +[recipe comparison](../docs/mambo-composed-tta.md) shows the prior and new recipes +at matched coverage. Thresholding and truncation can change rankings; neither +should be confused with an improvement in underlying predictions. Regional filtering improves results on Flemming. The [single regional-effect figure](../docs/mambo-deployment-defaults.md#regional-filtering-effect) -summarizes global → Europe → northern Europe across pipelines and ranks. +summarizes global → Europe → northern Europe across pipelines and ranks using +the earlier padded-scale TTA; the new recipe has been fully evaluated only for northern Europe. We recommend legacy `north_europe` here: the updated list adds 222 species but no Flemming species coverage, and lowers measured accuracy/F1. It remains available as `north_europe_v3` for broader eligibility; the API default stays `europe`. Speed remains **images per second**, measured end to end on an i7-12800H / RTX -3080 Ti Laptop, with four preparation/runtime CPU threads. Quality postprocessing -above does not alter these retained inference measurements; CPU uses FP32. +3080 Ti Laptop, with four preparation/runtime CPU threads. CPU uses FP32. +New TTA timings use three fresh processes per backend/device, +with seven observations per cell. V2 and single-view V3 reuse the same earlier +image-bank measurements; laptop conditions can vary between campaigns. | Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | |---|---:|---:|---:|---:| -| MAMBO v2 | 1.26 | 45.2 | 44.8 | 83.5 | -| V3 PyTorch | 5.70 | 29.8 | 126.7 | 136.2 | -| V3 ONNX | 10.08 | 46.7 | 114.1 | 111.3 | -| V3 PyTorch + TTA | 2.29 | 8.5 | 42.7 | 50.4 | -| V3 ONNX + TTA | 3.56 | 16.8 | 41.7 | 39.4 | - -![CPU and GPU throughput](../docs/assets/mambo-defaults-speed.svg) - -The [full comparison](../docs/mambo-deployment-defaults.md) includes memory charts, -all/known-truth metrics at every rank, updated European presets and reproducible -commands. The [frequency curves](../docs/mambo-frequency-comparison.md) compare -training and Flemming support. The [loading study](../docs/mambo-loading-scaling.md) -explains remaining scheduling limits; `preprocess_workers` / `--preprocess-workers` -tunes preparation separately from ONNX runtime `threads` and defaults to it. +| MAMBO v2 | 1.26 | 45.19 | 44.85 | 83.49 | +| V3 PyTorch | 5.70 | 29.84 | 126.73 | 136.24 | +| V3 ONNX | 10.08 | 46.71 | 114.11 | 111.27 | +| V3 PyTorch + TTA | 2.04 | 10.10 | 41.74 | 50.89 | +| V3 ONNX + TTA | 3.39 | 16.50 | 39.40 | 38.27 | + +![CPU and GPU throughput](../docs/assets/mambo-promoted-speed.svg) + +The [timing evidence](../docs/assets/mambo-promoted-speed.json) retains trial ranges +and process-memory measurements. The [earlier comparison](../docs/mambo-deployment-defaults.md) +and [frequency curves](../docs/mambo-frequency-comparison.md) use the previous +padded-scale TTA and remain historical evidence, not measurements of the new recipe. +The [loading study](../docs/mambo-loading-scaling.md) explains scheduling limits; +`preprocess_workers` / `--preprocess-workers` tunes preparation separately from +ONNX runtime `threads` and defaults to it. Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. -The recipe was selected on a Flemming subset, so these results are descriptive, +Recipe exploration used this Flemming dataset, so these results are descriptive, not independent validation. In-domain UCloud evaluation, other operating systems, and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py index 2aca6b3..30b84d3 100644 --- a/deployment/mambo_deploy/__init__.py +++ b/deployment/mambo_deploy/__init__.py @@ -1,7 +1,7 @@ """Offline model-bundle inference; importing this package does not import PyTorch.""" -from .augmentation import TTA, EdgePad, SaltAndPepper, View +from .augmentation import TTA, EdgePad, RotatePad, SaltAndPepper, View from .predictor import Predictor from .results import Prediction, PredictionItem -__all__ = ["EdgePad", "Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] +__all__ = ["RotatePad", "EdgePad", "Predictor", "Prediction", "PredictionItem", "TTA", "View", "SaltAndPepper"] diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index 84d7c1c..56d0c5a 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -5,6 +5,7 @@ from functools import partial import numpy as np +from PIL import Image from .preprocessing import _rgb, preprocess @@ -49,6 +50,25 @@ def __call__(self, image): return np.pad(image, ((0, 0), (y, y), (x, x)), mode="edge") +@dataclass(frozen=True) +class RotatePad: + """Rotate on an expanded canvas, then edge-pad before ordinary preprocessing.""" + + degrees: float + padding: float = 0.25 + + def __post_init__(self): + if not np.isfinite(self.degrees): + raise ValueError("Rotation must be finite") + EdgePad(self.padding) + + def __call__(self, image): + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + self.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + return EdgePad(self.padding)(np.asarray(rotated).transpose(2, 0, 1)) + + @dataclass(frozen=True) class SaltAndPepper: """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" @@ -88,8 +108,18 @@ def __post_init__(self): raise ValueError("TTA name must be a nonempty string") -DEFAULT_TTA = "padded_scale" -PROFILES = ("none", "padded_scale", "hflip", "five_crop", "ten_crop", "d4", "light_noise") +DEFAULT_TTA = "rotation30_pad25_3" +PROFILES = ( + "none", + "rotation30_pad25_3", + "wide_rotation_mixed_padding_5", + "padded_scale", + "hflip", + "five_crop", + "ten_crop", + "d4", + "light_noise", +) def resolve_tta(value): @@ -103,7 +133,11 @@ def resolve_tta(value): raise ValueError(f"tta must be a TTA object or one of {PROFILES}") if value == "none": return None - if value == "padded_scale": + if value == "rotation30_pad25_3": + views = (View(), RotatePad(-30), RotatePad(30)) + elif value == "wide_rotation_mixed_padding_5": + views = (View(), RotatePad(-10, 0.15), RotatePad(10, 0.15), RotatePad(-30), RotatePad(30)) + elif value == "padded_scale": views = (View(), EdgePad(0.08), EdgePad(0.15)) elif value == "hflip": views = (View(), View(hflip=True)) diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py index 841d062..55f1de7 100644 --- a/deployment/mambo_deploy/cli.py +++ b/deployment/mambo_deploy/cli.py @@ -28,7 +28,7 @@ def run(default_backend="onnx", default_device="cpu"): const=DEFAULT_TTA, choices=PROFILES, default="none", - help="Enable TTA (default recipe: padded_scale), or choose a recipe", + help=f"Enable TTA (default recipe: {DEFAULT_TTA}), or choose a recipe", ) parser.add_argument("--preprocess-workers", type=int, help="Preparation threads; defaults to --threads") parser.add_argument("--topk", type=int, default=1) diff --git a/dev/releases/mambo_v3/benchmark_acceleration.py b/dev/releases/mambo_v3/benchmark_acceleration.py index 1257250..464c2fd 100644 --- a/dev/releases/mambo_v3/benchmark_acceleration.py +++ b/dev/releases/mambo_v3/benchmark_acceleration.py @@ -35,9 +35,7 @@ def run(args): "--threads", "4", "--presets", - "north_europe", - "europe", - "full", + *args.presets, "--batches", "1", "8", @@ -67,4 +65,5 @@ def run(args): for name in ("python", "bundle", "manifest", "root", "output"): parser.add_argument("--" + name, type=Path, required=True) parser.add_argument("--tta", nargs="?", const=DEFAULT_TTA, choices=PROFILES, default="none") + parser.add_argument("--presets", nargs="+", default=["north_europe", "europe", "full"]) run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index d97905a..7e33ca5 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -90,3 +90,72 @@ Four deterministic images establish execution contracts, not representative accuracy, embedding quality or speed. Windows/macOS, clean CUDA installations, additional architectures, training revision/best-epoch provenance and redistribution notices remain unqualified. Nothing has been uploaded, tagged or promoted. + +## Enabled-TTA promotion — 2026-09-24 + +The deployment default when TTA is requested is now `rotation30_pad25_3`: original, +−30° with 25% edge padding, +30° with 25% edge padding. Rotation expands the canvas +and uses bilinear interpolation and RGB (124,116,104) corner fill, exactly as in +the full-data study. TTA stays off when omitted. Explicit `padded_scale` is retained; +`wide_rotation_mixed_padding_5` is also available as an opt-in named profile. + +The [current deployment comparison](../../../deployment/README.md#release-comparison) +uses the full-study predictions, with macro metrics computed by pinned mini_metrics. +Support intersections are recomputed across the five displayed pipelines; do not +copy the eleven-pipeline exploratory tail scores into that table. Both threshold +settings use the same 52,788 reporting images, with 5,852 calibration images. + +Reproduce the current quality tables and figure: + +```sh +/tmp/mambo-release-metrics/bin/python -m dev.releases.mambo_v3.promoted_report \ + --quality docs/assets/mambo-composed-tta.json --output /tmp/promoted-report +.venv/bin/python -m dev.releases.mambo_v3.tail_charts --paired \ + --data /tmp/promoted-report/mambo-promoted-tail.json --output /tmp/promoted-report +``` + +The figure command writes `mambo-threshold-tail.svg`; publish it under the distinct +name `mambo-promoted-quality.svg` to preserve earlier studies. JSON/CSV outputs use +`mambo-promoted-*`. `quality-tables.md` supplies the README metric and support rows. +The JSON threshold artifact retains full macro/micro scores, coverage, recipe, +source hashes and exact reporting/calibration identities; thresholds are not +silently installed as runtime defaults. + +Measure the selected recipe independently, on the same bank as earlier timings: + +```sh +CUDA_VISIBLE_DEVICES=0 /tmp/mambo-deploy-qualification-gpu/bin/python \ + -m dev.releases.mambo_v3.benchmark_acceleration \ + --python /tmp/mambo-deploy-qualification-gpu/bin/python \ + --bundle local-evidence/mambo-bundle-presets-v2 \ + --manifest local-evidence/mambo-v3/flemming-manifest.json \ + --root /home/asger/data/flemming --output /tmp/promoted-speed \ + --presets north_europe --tta rotation30_pad25_3 +.venv/bin/python -m dev.releases.mambo_v3.promoted_report \ + --performance /tmp/promoted-speed --output /tmp/promoted-report +.venv/bin/python -m dev.releases.mambo_v3.promoted_report \ + --render-speed /tmp/promoted-report/mambo-promoted-speed.json --output /tmp/promoted-report +``` + +These commands use three fresh processes per backend/device, seven observations, +CPU batches 1/8 and GPU batches 1/8/32, without concurrent model workloads. They +reuse earlier V2 and single-view V3 timings; temperature/power differences between +campaigns remain a limitation. Timing does not reuse full-evaluation wall time. +Resource records retain host peak RSS. New runs cover northern Europe only; +earlier resource sweeps also covered other presets, so RSS is descriptive. + +Promotion checks: 53 focused release checks passed (including the two pinned-metric +checks run separately), static/import checks passed, and preset transforms match +the full-study transforms byte-for-byte. The standalone wheel builds offline and +its enabled default imports without torch or mini_trainer in a clean Python 3.13 +environment. Python 3.14 installation was not qualified: its wheels were absent +from the offline cache. Older regional/frequency/threshold studies are preserved +and labelled historical rather than relabelled as new-recipe evidence. + +The installed ONNX-only wheel also passed prediction-only/embedding API and CLI +inference with the selected recipe against a relocated read-only bundle, with +Python socket connections blocked and model hashes unchanged. Evidence: +`local-evidence/mambo-promoted-portable.json`. The twelve timing trials completed; +GPU batch-32 throughput was 50.89 images/s native and 38.27 ONNX. CPU batch-1 was +2.04 and 3.39 images/s. Trial ranges and input hashes are in +`docs/assets/mambo-promoted-speed.json`. diff --git a/dev/releases/mambo_v3/promoted_report.py b/dev/releases/mambo_v3/promoted_report.py new file mode 100644 index 0000000..8904f14 --- /dev/null +++ b/dev/releases/mambo_v3/promoted_report.py @@ -0,0 +1,204 @@ +"""Publish the selected TTA comparison from verified full-run evidence and fresh timings.""" + +import argparse +import csv +import hashlib +import json +import statistics +from collections import defaultdict +from pathlib import Path + +from deployment.mambo_deploy.augmentation import DEFAULT_TTA +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.tail_report import collect + + +def quality(source, output): + data = json.loads(source.read_text()) + study = {"tta": DEFAULT_TTA, "source_sha256": file_hash(source), "revision": data["revision"], "models": {}} + for model, _, _ in SERIES: + key = model.replace("-tta", f":{DEFAULT_TTA}") + row = data["models"][key] + study["models"][model] = { + **row, + "report_zero": row["operating_points"]["zero"]["full"], + "report_optimized": row["operating_points"]["optimized"]["full"], + } + # Eleven-model tail domains belong to the exploratory comparison, not this five-model table. + study["models"][model].pop("operating_points") + tails = collect(study) + tails["tta"] = DEFAULT_TTA + write_json(output / "mambo-promoted-thresholds.json", study) + write_json(output / "mambo-promoted-tail.json", tails) + rows = tails["rows"] + with (output / "mambo-promoted-tail.csv").open("w", newline="") as stream: + flattened = [{**{k: v for k, v in r.items() if k not in ("metrics", "classes")}, **r["metrics"]} for r in rows] + writer = csv.DictWriter(stream, fieldnames=list(flattened[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(flattened) + lookup = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in rows} + text = "" + for rank in ("species", "genus", "family"): + text += f"### {rank.title()}\n\n" + text += "| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage |\n|---|---|---:|---:|---:|\n" + for model, label, _ in SERIES: + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + full = lookup[model, scope, rank, -1, "per_model"] + tail = lookup[model, scope, rank, 5, "common"] + a, b = full["metrics"], tail["metrics"] + text += ( + f"| {label} | {name} | {a['accuracy']:.2%} / {b['accuracy']:.2%} | " + f"{a['f1']:.4f} / {b['f1']:.4f} | {full['overall_coverage']:.2%} |\n" + ) + text += "\n" + text += "### Support retained and comparison figure\n\n" + text += ( + "Counts below describe truth classes outside the truncated average, not rejected images.\n" + "The prediction range counts accepted predictions into excluded classes, divided by all\n" + "52,788 reporting images. Truth and prediction counts must not be added.\n\n" + "| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) |\n" + "|---|---|---:|---:|---:|\n" + ) + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + for rank in ("species", "genus", "family"): + selected = [lookup[m, scope, rank, 5, "common"] for m, _, _ in SERIES] + row = selected[0] + n = row["report_images"] + truth = n - row["truth_images_in_retained_classes"] + outside = [round(r["overall_coverage"] * n) - r["accepted_predictions_in_retained_classes"] for r in selected] + lo, hi = min(outside), max(outside) + text += ( + f"| {name} | {rank.title()} | {row['class_count']} | {truth:,} / {truth / n:.2%} | " + f"{lo:,}–{hi:,} / {lo / n:.2%}–{hi / n:.2%} |\n" + ) + (output / "quality-tables.md").write_text(text) + + +def performance(root, baseline, output): + old = json.loads(baseline.read_text()) + plan = json.loads((root / "plan.json").read_text()) + if plan["status"] != "complete" or len(plan["completed"]) != 12: + raise ValueError("Require all twelve fresh-process trials") + grouped, resources, provenance = defaultdict(list), defaultdict(list), {} + for name in plan["completed"]: + path = root / name / "report.json" + r = json.loads(path.read_text()) + s = r["settings"] + bank = hashlib.sha256(json.dumps(r["samples"], sort_keys=True).encode()).hexdigest() + if r["status"] != "complete" or s["tta"] != DEFAULT_TTA or bank != old["timing_bank_sha256"]: + raise ValueError("Changed recipe or timing bank") + if any(r[k] != old[k] for k in ("bundle_sha256", "manifest_sha256")): + raise ValueError("Changed benchmark inputs") + if s["threads"] != 4 or s["embeddings"] or s["precision"] != "auto": + raise ValueError("Unexpected timing configuration") + model, device = s["backend"] + "-tta", s["device"] + for cell in r["cells"]: + if cell["preset"] != "north_europe": + raise ValueError("Expected northern Europe") + grouped[model, device, cell["batch_size"]].append(cell["end_to_end"]) + resources[model, device].append(r["peak_rss_kib_linux"] / 1024) + provenance[str(path)] = file_hash(path) + data = { + "tta": DEFAULT_TTA, + "sources_sha256": {str(baseline): file_hash(baseline), **provenance}, + "speed": [r for r in old["speed"] if not r["model"].endswith("-tta") and r["preset"] == "north_europe"], + "resources": [r for r in old["resources"] if not r["model"].endswith("-tta")], + } + expected = {(m, d, b) for m in ("torch-tta", "onnx-tta") for d in ("cpu", "cuda:0") for b in ((1, 8) if d == "cpu" else (1, 8, 32))} + if set(grouped) != expected: + raise ValueError("Incomplete benchmark matrix") + for (model, device, batch), trials in grouped.items(): + if len(trials) != 3 or any(len(t["seconds"]) != 7 for t in trials): + raise ValueError("Require three trials of seven observations") + values = [v for t in trials for v in t["seconds"]] + data["speed"].append( + { + "model": model, + "device": device, + "batch": batch, + "images_per_second": batch / statistics.median(values), + "trial_min_ips": batch / max(t["median_seconds"] for t in trials), + "trial_max_ips": batch / min(t["median_seconds"] for t in trials), + } + ) + for (model, device), values in resources.items(): + data["resources"].append({"model": model, "device": device, "rss_mib": statistics.median(values)}) + write_json(output / "mambo-promoted-speed.json", data) + text = "| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 |\n|---|---:|---:|---:|---:|\n" + for model, label, _ in SERIES: + values = [ + next(r["images_per_second"] for r in data["speed"] if (r["model"], r["device"], r["batch"]) == (model, device, batch)) + for device, batch in (("cpu", 1), ("cuda:0", 1), ("cuda:0", 8), ("cuda:0", 32)) + ] + text += f"| {label} | " + " | ".join(f"{v:.2f}" for v in values) + " |\n" + (output / "speed-table.md").write_text(text) + + +def render_speed(data, output): + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-promoted-speed-v1"}) + fig, axes = plt.subplots(1, 2, figsize=(12, 6)) + for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): + for model, label, color in SERIES: + rows = [next(r for r in data["speed"] if (r["model"], r["device"], r["batch"]) == (model, device, b)) for b in batches] + values = [r["images_per_second"] for r in rows] + ax.errorbar( + range(len(batches)), + values, + yerr=[ + [max(0, v - r["trial_min_ips"]) for v, r in zip(values, rows)], + [max(0, r["trial_max_ips"] - v) for v, r in zip(values, rows)], + ], + marker="o", + capsize=3, + color=color, + label=label, + ) + ax.set( + title="CPU · FP32" if device == "cpu" else "GPU · automatic precision", + xlabel="Images per batch", + ylabel="End-to-end images / second", + xticks=range(len(batches)), + xticklabels=batches, + ylim=(0, None), + ) + ax.grid(alpha=0.15) + fig.suptitle("Release throughput · northern Europe · TTA: ±30° with 25% padding") + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=3) + fig.text( + 0.03, + 0.02, + "i7-12800H / RTX 3080 Ti Laptop; four preparation/runtime threads; same image bank.\n" + "Three fresh processes × seven observations; bars: trial-median range. Decode through CPU results included.\n" + "V2 and single-view V3 reuse earlier measurements; laptop conditions vary between campaigns.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.15, 1, 0.84)) + path = output / "mambo-promoted-speed.svg" + fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + fig.savefig(output / "mambo-promoted-speed.png", dpi=140, bbox_inches="tight") + plt.close(fig) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--quality", type=Path) + parser.add_argument("--performance", type=Path) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-defaults-comparison.json")) + parser.add_argument("--render-speed", type=Path) + args = parser.parse_args() + args.output.mkdir(parents=True, exist_ok=True) + if args.quality: + quality(args.quality, args.output) + if args.performance: + performance(args.performance, args.baseline, args.output) + if args.render_speed: + render_speed(json.loads(args.render_speed.read_text()), args.output) diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index 95227a6..0013f88 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -130,7 +130,7 @@ def render_paired(data, output): "Hollow → filled changes the averaging domain, not predictions. " ">5 requires truth AND accepted-prediction support in every pipeline.\n" "Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact.\n" - "Coverage is unchanged by class truncation. TTA: padded scale; " + f"Coverage is unchanged by class truncation. TTA: {data.get('tta', 'padded_scale')}; " "recipe selection used the same dataset, so results remain descriptive.", fontsize=10, ) diff --git a/docs/assets/mambo-promoted-quality.svg b/docs/assets/mambo-promoted-quality.svg new file mode 100644 index 0000000..861267f --- /dev/null +++ b/docs/assets/mambo-promoted-quality.svg @@ -0,0 +1,3049 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.7% + + + 100.0% + + + 70.8% + + + 100.0% + + + 70.5% + + + 100.0% + + + 81.2% + + + 100.0% + + + 81.3% + + + Species · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 69.8% + + + 100.0% + + + 75.8% + + + 100.0% + + + 75.4% + + + 100.0% + + + 84.3% + + + 100.0% + + + 84.3% + + + Genus · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 77.4% + + + 100.0% + + + 73.1% + + + 100.0% + + + 73.3% + + + 100.0% + + + 82.1% + + + 100.0% + + + 82.1% + + + Family · Acceptance coverage (%) + + + + V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe + + + Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1. + Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. + Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. + Coverage is unchanged by class truncation. TTA: rotation30_pad25_3; recipe selection used the same dataset, so results remain descriptive. + + + + + + + Shape = confidence setting + + + + + + + + + + + Unthresholded + + + + + + + + + + + Calibrated + + + + + + + + Fill = averaging domain + + + + + + + + Full support + + + + + + + + + + + Truncated (support >5) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-promoted-speed.json b/docs/assets/mambo-promoted-speed.json new file mode 100644 index 0000000..096f8c8 --- /dev/null +++ b/docs/assets/mambo-promoted-speed.json @@ -0,0 +1,319 @@ +{ + "tta": "rotation30_pad25_3", + "sources_sha256": { + "docs/assets/mambo-defaults-comparison.json": "99224200e66e3d0d44195ab684f8f71580ed829a4ac8fd1c8c1681ed3e6dae52", + "local-evidence/mambo-promoted-tta-speed/trial-0-torch-cuda-0/report.json": "25891a868390b8bbabf491966e90fa8f5c6624c3c66be2c874ac9f6c16878aab", + "local-evidence/mambo-promoted-tta-speed/trial-0-onnx-cuda-0/report.json": "5ef51afe133be77309bbd3fab303fb61869080e328cd8de30e4639c3715907f6", + "local-evidence/mambo-promoted-tta-speed/trial-0-torch-cpu/report.json": "b3392bee4e0d81c29df653a412f777b35a580b2b22fe308a8eb81a7399c83625", + "local-evidence/mambo-promoted-tta-speed/trial-0-onnx-cpu/report.json": "7a9c3b52b8a072d9cbc27462433cb6c235bb9c7207d365334a6ef84535f25faa", + "local-evidence/mambo-promoted-tta-speed/trial-1-onnx-cpu/report.json": "f7def2387215747e68b5b3e7036e94c70d78da9cb4e06b19123b29d38e243665", + "local-evidence/mambo-promoted-tta-speed/trial-1-torch-cpu/report.json": "6212e23be3e73cf0bae031ff98c72715c443e78ffb18566440657e73215974c4", + "local-evidence/mambo-promoted-tta-speed/trial-1-onnx-cuda-0/report.json": "7d8c3d953e5ba5711af8e4f4746a73a2cfef9f96c9ec51cb51fd941633c96ec3", + "local-evidence/mambo-promoted-tta-speed/trial-1-torch-cuda-0/report.json": "a5106112a7127df413139f2369a02bdd5ca592be700de30996c9fffda7006ebe", + "local-evidence/mambo-promoted-tta-speed/trial-2-torch-cuda-0/report.json": "8ac283bbc8e0273ccd9da170fefb1050006a61302761fb9612188e9360000966", + "local-evidence/mambo-promoted-tta-speed/trial-2-onnx-cuda-0/report.json": "70418cb3a4c4162782525acf2cf6eea19a82863decd64dcd070bb7b3de816dbd", + "local-evidence/mambo-promoted-tta-speed/trial-2-torch-cpu/report.json": "1609821796674aec8d0abedbecd9bfb1877da212b9aed3bcf67c50032f141119", + "local-evidence/mambo-promoted-tta-speed/trial-2-onnx-cpu/report.json": "eaa507bdc4d39d172a3e4f1eca05083546b91674ae3899e2bfc5387df5f15768" + }, + "speed": [ + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "median_ms": 796.1964119967888, + "p95_ms": 855.2797960001044, + "trial_min_ms": 780.1338070021302, + "trial_max_ms": 827.1140280012332, + "images_per_second": 1.255971497651051, + "trial_min_ips": 1.2090231408800491, + "trial_max_ips": 1.2818313871600613 + }, + { + "model": "v2", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "median_ms": 5765.8902689981915, + "p95_ms": 5890.259110001352, + "trial_min_ms": 5732.572058997903, + "trial_max_ms": 5802.123346998997, + "images_per_second": 1.387470039624944, + "trial_min_ips": 1.3788055719528611, + "trial_max_ips": 1.395534136800447 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "median_ms": 22.129188000690192, + "p95_ms": 28.487998999480624, + "trial_min_ms": 21.078697001939872, + "trial_max_ms": 23.72169799855328, + "images_per_second": 45.18918633475439, + "trial_min_ips": 42.155498314706946, + "trial_max_ips": 47.44126261257847 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "median_ms": 178.38607100202353, + "p95_ms": 190.12071899851435, + "trial_min_ms": 173.67241900137742, + "trial_max_ms": 178.83818200061796, + "images_per_second": 44.84655082688184, + "trial_min_ips": 44.73317672158151, + "trial_max_ips": 46.063733355015636 + }, + { + "model": "v2", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "median_ms": 383.29957200039644, + "p95_ms": 395.5446789987036, + "trial_min_ms": 365.05659100293997, + "trial_max_ms": 387.3802570014959, + "images_per_second": 83.48561370156422, + "trial_min_ips": 82.60617164048303, + "trial_max_ips": 87.65764209895416 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 10.076177412511877, + "trial_min_ips": 9.60250986545771, + "trial_max_ips": 11.353111385069457 + }, + { + "model": "onnx", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 10.80969808387532, + "trial_min_ips": 10.570796505012908, + "trial_max_ips": 11.102500782573706 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 46.70691057432178, + "trial_min_ips": 41.11976015977681, + "trial_max_ips": 49.97505245293308 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 114.11464013589269, + "trial_min_ips": 107.34320509031689, + "trial_max_ips": 115.69758682083888 + }, + { + "model": "onnx", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 111.27186960045317, + "trial_min_ips": 104.95228749163802, + "trial_max_ips": 118.23092267562323 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 1, + "images_per_second": 5.695199765540664, + "trial_min_ips": 5.453077416494641, + "trial_max_ips": 6.445979740616736 + }, + { + "model": "torch", + "device": "cpu", + "preset": "north_europe", + "batch": 8, + "images_per_second": 7.839122148750051, + "trial_min_ips": 6.663612338884881, + "trial_max_ips": 9.242605998110642 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 1, + "images_per_second": 29.838347764184938, + "trial_min_ips": 28.22843215050167, + "trial_max_ips": 32.58000010949372 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 8, + "images_per_second": 126.73135226080092, + "trial_min_ips": 125.63045484784077, + "trial_max_ips": 134.262307658797 + }, + { + "model": "torch", + "device": "cuda:0", + "preset": "north_europe", + "batch": 32, + "images_per_second": 136.24360110822388, + "trial_min_ips": 134.1900518259908, + "trial_max_ips": 142.79165057586877 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 1, + "images_per_second": 10.095289640929265, + "trial_min_ips": 9.08992225583603, + "trial_max_ips": 11.395943605042223 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 8, + "images_per_second": 41.74452237473382, + "trial_min_ips": 40.17425321046774, + "trial_max_ips": 43.20922520587249 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "batch": 32, + "images_per_second": 50.89189233994259, + "trial_min_ips": 49.60486323902889, + "trial_max_ips": 51.93386894396018 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 1, + "images_per_second": 16.501620755811338, + "trial_min_ips": 10.600381997176049, + "trial_max_ips": 17.32238535488025 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 8, + "images_per_second": 39.403995458090144, + "trial_min_ips": 36.333391293363185, + "trial_max_ips": 40.734567059530676 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "batch": 32, + "images_per_second": 38.26903509578927, + "trial_min_ips": 36.8244774584263, + "trial_max_ips": 42.60271935994335 + }, + { + "model": "torch-tta", + "device": "cpu", + "batch": 1, + "images_per_second": 2.0418394631211805, + "trial_min_ips": 1.8675565638482772, + "trial_max_ips": 2.199971756725526 + }, + { + "model": "torch-tta", + "device": "cpu", + "batch": 8, + "images_per_second": 2.725476601953184, + "trial_min_ips": 2.604504798702578, + "trial_max_ips": 2.9239933313665523 + }, + { + "model": "onnx-tta", + "device": "cpu", + "batch": 1, + "images_per_second": 3.392641317598269, + "trial_min_ips": 2.8475503305697205, + "trial_max_ips": 3.7037390675348525 + }, + { + "model": "onnx-tta", + "device": "cpu", + "batch": 8, + "images_per_second": 3.577990190138483, + "trial_min_ips": 3.523486466759631, + "trial_max_ips": 3.7463472031954144 + } + ], + "resources": [ + { + "model": "torch", + "device": "cuda:0", + "rss_mib": 2511.96484375, + "load_first_seconds": 42.957718928999384, + "allocated_mib": 597.53125 + }, + { + "model": "onnx", + "device": "cuda:0", + "rss_mib": 1618.86328125, + "load_first_seconds": 1.4639206969950465, + "allocated_mib": null + }, + { + "model": "torch", + "device": "cpu", + "rss_mib": 1618.265625, + "load_first_seconds": 42.038206298006116, + "allocated_mib": null + }, + { + "model": "onnx", + "device": "cpu", + "rss_mib": 688.5390625, + "load_first_seconds": 0.3738440049928613, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cpu", + "rss_mib": 4122.8125, + "load_first_seconds": 209.39651592600057, + "allocated_mib": null + }, + { + "model": "v2", + "device": "cuda:0", + "rss_mib": 4122.58203125, + "load_first_seconds": 209.60287212600088, + "allocated_mib": 1935.630859375 + }, + { + "model": "torch-tta", + "device": "cuda:0", + "rss_mib": 2538.8203125 + }, + { + "model": "onnx-tta", + "device": "cuda:0", + "rss_mib": 1670.91796875 + }, + { + "model": "torch-tta", + "device": "cpu", + "rss_mib": 1742.23828125 + }, + { + "model": "onnx-tta", + "device": "cpu", + "rss_mib": 687.20703125 + } + ] +} diff --git a/docs/assets/mambo-promoted-speed.svg b/docs/assets/mambo-promoted-speed.svg new file mode 100644 index 0000000..8ecad58 --- /dev/null +++ b/docs/assets/mambo-promoted-speed.svg @@ -0,0 +1,998 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + Images per batch + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + + + + + + + + 4 + + + + + + + + + + + + + 6 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 10 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CPU · FP32 + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 32 + + + + Images per batch + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 120 + + + + + + + + + + + + + 140 + + + + End-to-end images / second + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GPU · automatic precision + + + + Release throughput · northern Europe · TTA: ±30° with 25% padding + + + i7-12800H / RTX 3080 Ti Laptop; four preparation/runtime threads; same image bank. + Three fresh processes × seven observations; bars: trial-median range. Decode through CPU results included. + V2 and single-view V3 reuse earlier measurements; laptop conditions vary between campaigns. + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + diff --git a/docs/assets/mambo-promoted-tail.csv b/docs/assets/mambo-promoted-tail.csv new file mode 100644 index 0000000..dabb4ee --- /dev/null +++ b/docs/assets/mambo-promoted-tail.csv @@ -0,0 +1,211 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,1205,52788,52788,52788,1.0,0.6856229575537315,0.2795792585422393,0.6856229575537315,0.2619881841444524 +torch,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7135646156794592,0.2688723997356787,0.7135646156794592,0.25928693173615297 +onnx,zero,species,-1,per_model,1289,52788,52788,52788,1.0,0.7133861511997317,0.2689411284200973,0.7133861511997317,0.2593624046134101 +torch-tta,zero,species,-1,per_model,1131,52788,52788,52788,1.0,0.7493898333756177,0.3361085016262147,0.7493898333756177,0.32014833573036827 +onnx-tta,zero,species,-1,per_model,1132,52788,52788,52788,1.0,0.7493378530417095,0.335607011455683,0.7493378530417095,0.3197309858969451 +v2,zero,species,5,per_model,320,44895,39395,52788,1.0,0.7835860088760841,0.8271892598535118,0.7835860088760841,0.7771880031099807 +v2,zero,species,5,common,311,44709,39284,52788,1.0,0.7900550443728065,0.8335510054241905,0.7900550443728065,0.7835569174460332 +torch,zero,species,5,per_model,321,44848,40080,52788,1.0,0.8016540743299243,0.826169612130568,0.8016540743299243,0.7937632511493784 +torch,zero,species,5,common,311,44709,39989,52788,1.0,0.8159055366992773,0.837066966065252,0.8159055366992773,0.8065774964710728 +onnx,zero,species,5,per_model,321,44848,40095,52788,1.0,0.8021426772632025,0.8262878591168297,0.8021426772632025,0.794015782308363 +onnx,zero,species,5,common,311,44709,40004,52788,1.0,0.8164098503378058,0.8371890152054124,0.8164098503378058,0.806838147603015 +torch-tta,zero,species,5,per_model,321,44929,41848,52788,1.0,0.8567411793921805,0.8760937958534148,0.8567411793921805,0.850373233680162 +torch-tta,zero,species,5,common,311,44709,41727,52788,1.0,0.865303260260028,0.8809281307434137,0.865303260260028,0.8573956478024776 +onnx-tta,zero,species,5,per_model,321,44929,41848,52788,1.0,0.8566566506248902,0.8757776830894549,0.8566566506248902,0.8502587874803171 +onnx-tta,zero,species,5,common,311,44709,41728,52788,1.0,0.8655083257153624,0.8807049123666298,0.8655083257153624,0.8574639236363765 +v2,zero,species,10,per_model,277,43835,38825,52788,1.0,0.7994793772053351,0.8464715182316644,0.7994793772053351,0.8020074761104694 +v2,zero,species,10,common,269,43592,38684,52788,1.0,0.807434274731362,0.8524634178075089,0.807434274731362,0.8090415998072698 +torch,zero,species,10,per_model,285,44492,39612,52788,1.0,0.8171258284359165,0.8511929361965738,0.8171258284359165,0.8180429337935674 +torch,zero,species,10,common,269,43592,39084,52788,1.0,0.8256404609528794,0.8567343194106741,0.8256404609528794,0.8257371612732255 +onnx,zero,species,10,per_model,285,44492,39626,52788,1.0,0.817676149634451,0.8513280853428178,0.817676149634451,0.8183308171409448 +onnx,zero,species,10,common,269,43592,39098,52788,1.0,0.8262235150108063,0.856877507167847,0.8262235150108063,0.8260421677936811 +torch-tta,zero,species,10,per_model,287,44585,41383,52788,1.0,0.8650597753206963,0.890822796453379,0.8650597753206963,0.866596355497898 +torch-tta,zero,species,10,common,269,43592,40689,52788,1.0,0.8758483940155001,0.8978559590586308,0.8758483940155001,0.8761006747537562 +onnx-tta,zero,species,10,per_model,287,44585,41382,52788,1.0,0.8649652326924728,0.8906558948204186,0.8649652326924728,0.8664756558669171 +onnx-tta,zero,species,10,common,269,43592,40689,52788,1.0,0.8760941628080915,0.897846903368685,0.8760941628080915,0.8762293688340541 +v2,zero,species,20,per_model,216,42698,37641,52788,1.0,0.8082495823011705,0.8625621889375423,0.8082495823011705,0.8168473325998337 +v2,zero,species,20,common,207,42149,37370,52788,1.0,0.8175661534139832,0.8679692809334503,0.8175661534139832,0.8251439958793457 +torch,zero,species,20,per_model,222,43361,38417,52788,1.0,0.8271275510654174,0.878086795953307,0.8271275510654174,0.8390189376702694 +torch,zero,species,20,common,207,42149,37749,52788,1.0,0.8380264705318411,0.8870648514468934,0.8380264705318411,0.8498822675305044 +onnx,zero,species,20,per_model,222,43361,38429,52788,1.0,0.8276292942912182,0.8782629747089122,0.8276292942912182,0.8392847349307755 +onnx,zero,species,20,common,207,42149,37764,52788,1.0,0.8385645719624101,0.8868839185673889,0.8385645719624101,0.8499675200880887 +torch-tta,zero,species,20,per_model,226,43341,40350,52788,1.0,0.8779440296582359,0.9091124323290416,0.8779440296582359,0.8834258152556967 +torch-tta,zero,species,20,common,207,42149,39473,52788,1.0,0.8847402108374071,0.9092002957022167,0.8847402108374071,0.8877589946240976 +onnx-tta,zero,species,20,per_model,226,43341,40349,52788,1.0,0.8779933384089511,0.9089448421313119,0.8779933384089511,0.8833793412304258 +onnx-tta,zero,species,20,common,207,42149,39471,52788,1.0,0.884644302107583,0.9090587633916279,0.884644302107583,0.8876136773297221 +v2,zero,genus,-1,per_model,691,52788,52788,52788,1.0,0.7893807671430488,0.3234152967366764,0.7893807671430488,0.32128858585759756 +torch,zero,genus,-1,per_model,713,52788,52788,52788,1.0,0.8053026558890463,0.3221313136590869,0.8053026558890463,0.3230351895845698 +onnx,zero,genus,-1,per_model,710,52788,52788,52788,1.0,0.8053599793321786,0.32303901654923844,0.8053599793321786,0.32445203101159475 +torch-tta,zero,genus,-1,per_model,643,52788,52788,52788,1.0,0.8472767012256567,0.3871858468468912,0.8472767012256567,0.38731172619778687 +onnx-tta,zero,genus,-1,per_model,642,52788,52788,52788,1.0,0.8472504239634208,0.38755157575495597,0.8472504239634208,0.38771743876773856 +v2,zero,genus,5,per_model,244,52582,44975,52788,1.0,0.8198886444355898,0.8176206331689666,0.8198886444355898,0.7926029899466802 +v2,zero,genus,5,common,242,52567,44953,52788,1.0,0.8206876060779148,0.8201078560326222,0.8206876060779148,0.7941995832133606 +torch,zero,genus,5,per_model,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +torch,zero,genus,5,common,242,52567,44773,52788,1.0,0.8383310164872881,0.8166147950822779,0.8383310164872881,0.8056571781128056 +onnx,zero,genus,5,per_model,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500322 +onnx,zero,genus,5,common,242,52567,44776,52788,1.0,0.8384072898289766,0.8162946927109619,0.8384072898289766,0.8055261341500322 +torch-tta,zero,genus,5,per_model,244,52582,45986,52788,1.0,0.8801037705609983,0.8650981003057536,0.8801037705609983,0.8548827619376147 +torch-tta,zero,genus,5,common,242,52567,45974,52788,1.0,0.8812527981807469,0.8646719138069031,0.8812527981807469,0.8551819474190718 +onnx-tta,zero,genus,5,per_model,244,52582,45983,52788,1.0,0.8800690931903428,0.8647486446406456,0.8800690931903428,0.8545922539194751 +onnx-tta,zero,genus,5,common,242,52567,45971,52788,1.0,0.8812178342202511,0.864319570078447,0.8812178342202511,0.8548890385082203 +v2,zero,genus,10,per_model,221,52377,44619,52788,1.0,0.8242091812881619,0.8349759270593797,0.8242091812881619,0.8073029077289685 +v2,zero,genus,10,common,219,52349,44584,52788,1.0,0.8245607328459141,0.8365957191270255,0.8245607328459141,0.8083056265437976 +torch,zero,genus,10,per_model,224,52409,44500,52788,1.0,0.8420595718087585,0.8360051629538205,0.8420595718087585,0.8201488914933474 +torch,zero,genus,10,common,219,52349,44429,52788,1.0,0.8411427176898308,0.8376300487556162,0.8411427176898308,0.8202795396773236 +onnx,zero,genus,10,per_model,224,52409,44504,52788,1.0,0.8421419742582609,0.8355105285467141,0.8421419742582609,0.8198882695930891 +onnx,zero,genus,10,common,219,52349,44433,52788,1.0,0.8412270014737968,0.8371241213255166,0.8412270014737968,0.8200129675053699 +torch-tta,zero,genus,10,per_model,222,52387,45701,52788,1.0,0.887280993797046,0.8844442695435504,0.887280993797046,0.8716325700875605 +torch-tta,zero,genus,10,common,219,52349,45660,52788,1.0,0.8874178652560551,0.8854839580503524,0.8874178652560551,0.87205931213225 +onnx-tta,zero,genus,10,per_model,222,52387,45697,52788,1.0,0.8872428799301995,0.8840784199971973,0.8872428799301995,0.8713393860561334 +onnx-tta,zero,genus,10,common,219,52349,45656,52788,1.0,0.8873792292814436,0.8851130968663781,0.8873792292814436,0.8717621118812142 +v2,zero,genus,20,per_model,178,51193,43632,52788,1.0,0.8447796356264702,0.8683866368462851,0.8447796356264702,0.8409068314387458 +v2,zero,genus,20,common,174,51091,43532,52788,1.0,0.8468431185140185,0.8700188865290815,0.8468431185140185,0.8425197107045042 +torch,zero,genus,20,per_model,180,51668,43510,52788,1.0,0.851621812405513,0.8767852358251573,0.851621812405513,0.8500899477281391 +torch,zero,genus,20,common,174,51091,43120,52788,1.0,0.8572846967941111,0.879992285140897,0.8572846967941111,0.8551335240737619 +onnx,zero,genus,20,per_model,180,51668,43511,52788,1.0,0.8514718324234797,0.8766263792837025,0.8514718324234797,0.8499294903140182 +onnx,zero,genus,20,common,174,51091,43120,52788,1.0,0.8569783049191699,0.8797840089758777,0.8569783049191699,0.8548933267800543 +torch-tta,zero,genus,20,per_model,181,51690,44870,52788,1.0,0.8952201890577778,0.9132784407726137,0.8952201890577778,0.8933677281815686 +torch-tta,zero,genus,20,common,174,51091,44453,52788,1.0,0.899597539923479,0.9135145414371996,0.899597539923479,0.8960360409484771 +onnx-tta,zero,genus,20,per_model,181,51690,44864,52788,1.0,0.8951734416630821,0.9130696781092725,0.8951734416630821,0.8931898883411497 +onnx-tta,zero,genus,20,common,174,51091,44448,52788,1.0,0.8995623397519747,0.9132974690072101,0.8995623397519747,0.8958616326578391 +v2,zero,family,-1,per_model,64,52788,52788,52788,1.0,0.8435038466784595,0.2610923881260793,0.8435038466784595,0.26968398140672784 +torch,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8104767092433202,0.2753352445359579,0.8104767092433202,0.2804941988278224 +onnx,zero,family,-1,per_model,60,52788,52788,52788,1.0,0.8106325437578626,0.2756918885388057,0.8106325437578626,0.2808879232365722 +torch-tta,zero,family,-1,per_model,52,52788,52788,52788,1.0,0.86366836103727,0.3473357735776554,0.86366836103727,0.35919021330288153 +onnx-tta,zero,family,-1,per_model,52,52788,52788,52788,1.0,0.8636665098420966,0.34712795694828363,0.8636665098420966,0.359050677814834 +v2,zero,family,5,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +v2,zero,family,5,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +torch,zero,family,5,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,5,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,5,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,5,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,5,per_model,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +torch-tta,zero,family,5,common,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +onnx-tta,zero,family,5,per_model,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +onnx-tta,zero,family,5,common,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +v2,zero,family,10,per_model,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +v2,zero,family,10,common,20,52783,52241,52788,1.0,0.8700294236802284,0.8073706420034539,0.8700294236802284,0.8237730542270191 +torch,zero,family,10,per_model,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +torch,zero,family,10,common,20,52783,51891,52788,1.0,0.8570482156298184,0.7593390669412071,0.8570482156298184,0.7831492631501338 +onnx,zero,family,10,per_model,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +onnx,zero,family,10,common,20,52783,51893,52788,1.0,0.8572274253215421,0.7604089989497506,0.8572274253215421,0.7843304363763831 +torch-tta,zero,family,10,per_model,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +torch-tta,zero,family,10,common,20,52783,52402,52788,1.0,0.8932186151928605,0.8280730113019039,0.8932186151928605,0.8505612212541586 +onnx-tta,zero,family,10,per_model,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +onnx-tta,zero,family,10,common,20,52783,52403,52788,1.0,0.8932164863184111,0.8275326880655373,0.8932164863184111,0.850198428985235 +v2,zero,family,20,per_model,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579268 +v2,zero,family,20,common,17,52742,52159,52788,1.0,0.8777980291519171,0.8618479765055044,0.8777980291519171,0.8634797826579268 +torch,zero,family,20,per_model,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152917 +torch,zero,family,20,common,17,52742,51776,52788,1.0,0.8761006803143303,0.8444656509344528,0.8761006803143303,0.8502787174152917 +onnx,zero,family,20,per_model,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +onnx,zero,family,20,common,17,52742,51781,52788,1.0,0.8763115152457701,0.8445713671430294,0.8763115152457701,0.8504835558317285 +torch-tta,zero,family,20,per_model,17,52742,52332,52788,1.0,0.9186540915649681,0.8978901347538473,0.9186540915649681,0.9040916328480296 +torch-tta,zero,family,20,common,17,52742,52332,52788,1.0,0.9186540915649681,0.8978901347538473,0.9186540915649681,0.9040916328480296 +onnx-tta,zero,family,20,per_model,17,52742,52333,52788,1.0,0.9186515870067923,0.897254460358122,0.9186515870067923,0.903664818414002 +onnx-tta,zero,family,20,common,17,52742,52333,52788,1.0,0.9186515870067923,0.897254460358122,0.9186515870067923,0.903664818414002 +v2,optimized,species,-1,per_model,690,52788,36810,52788,0.6973175721754944,0.8465208024160925,0.6381169943670084,0.5418132969389368,0.4466755276813748 +torch,optimized,species,-1,per_model,654,52788,37381,52788,0.7081344244904145,0.8669405316273155,0.7028135267405738,0.5774611074285403,0.5081384528044552 +onnx,optimized,species,-1,per_model,650,52788,37191,52788,0.7045351216185497,0.8695378035260483,0.7088741319668206,0.5752968296743217,0.5099648536812272 +torch-tta,optimized,species,-1,per_model,641,52788,42843,52788,0.8116049102068652,0.8633843418309688,0.7190416496691577,0.6588299780195079,0.5661066449155471 +onnx-tta,optimized,species,-1,per_model,641,52788,42930,52788,0.8132530120481928,0.8635268756201978,0.7198655161183526,0.6615516920144863,0.5675578092246024 +v2,optimized,species,5,per_model,281,42875,31091,52788,0.6973175721754944,0.949227254623375,0.943736867068747,0.6916423088644161,0.7737956953842567 +v2,optimized,species,5,common,273,42787,31030,52788,0.6973175721754944,0.9523181631837667,0.9510141862019456,0.696639527553125,0.7800052421246759 +torch,optimized,species,5,per_model,288,44180,31486,52788,0.7081344244904145,0.9604545336634476,0.9622152512833568,0.7039086159930352,0.7910306156942064 +torch,optimized,species,5,common,273,42787,30983,52788,0.7081344244904145,0.9636278309815087,0.9627691640571292,0.7169541525627774,0.8016362227458123 +onnx,optimized,species,5,per_model,287,44173,31341,52788,0.7045351216185497,0.9610226296998533,0.9619757519565229,0.7010200481362973,0.7888306624960767 +onnx,optimized,species,5,common,273,42787,30851,52788,0.7045351216185497,0.9643815594419234,0.9628304211425756,0.7147377382773606,0.800104314691979 +torch-tta,optimized,species,5,per_model,299,44421,36047,52788,0.8116049102068652,0.9603653330244,0.9597405841266853,0.790768730570598,0.8516449621343269 +torch-tta,optimized,species,5,common,273,42787,35192,52788,0.8116049102068652,0.9639495772208692,0.9616309429747886,0.8034434173226027,0.8618831738738654 +onnx-tta,optimized,species,5,per_model,299,44421,36110,52788,0.8132530120481928,0.9601405781654884,0.9596554572863384,0.7921758700534698,0.8525263322194031 +onnx-tta,optimized,species,5,common,273,42787,35252,52788,0.8132530120481928,0.963707047522958,0.9615027455443487,0.8048549427987153,0.8627190954298332 +v2,optimized,species,10,per_model,243,42227,30743,52788,0.6973175721754944,0.953448505161714,0.9544450850263946,0.7134225852923751,0.7961537592407799 +v2,optimized,species,10,common,237,42021,30611,52788,0.6973175721754944,0.9552371110145412,0.9586140054758544,0.7164050701636104,0.8009004286169517 +torch,optimized,species,10,per_model,255,43584,31151,52788,0.7081344244904145,0.963686280781054,0.9676952538780558,0.7171112436175308,0.8061491380093966 +torch,optimized,species,10,common,237,42021,30528,52788,0.7081344244904145,0.9673296490095744,0.9672615516732053,0.7266753942187194,0.8138865890143704 +onnx,optimized,species,10,per_model,255,43584,31014,52788,0.7045351216185497,0.9644807475606031,0.9677553930474767,0.7146917879143063,0.8044523205064156 +onnx,optimized,species,10,common,237,42021,30399,52788,0.7045351216185497,0.9681978678690395,0.9673496769410929,0.7245547988604122,0.812427697268594 +torch-tta,optimized,species,10,per_model,272,44032,35745,52788,0.8116049102068652,0.96173064446984,0.9639011820682567,0.7946782620839412,0.8587308953151547 +torch-tta,optimized,species,10,common,237,42021,34617,52788,0.8116049102068652,0.9662994503676685,0.9671449526169773,0.8130146967116284,0.8731615665583466 +onnx-tta,optimized,species,10,per_model,272,44032,35808,52788,0.8132530120481928,0.9614835793859626,0.9638076051371401,0.7962250808537157,0.8596997543424995 +onnx-tta,optimized,species,10,common,237,42021,34676,52788,0.8132530120481928,0.9661761234598567,0.9669972821591288,0.8146008253728714,0.8740844405084152 +v2,optimized,species,20,per_model,190,40924,29917,52788,0.6973175721754944,0.9610844376490718,0.9546242144015308,0.720024084306013,0.8034606105897976 +v2,optimized,species,20,common,180,40455,29626,52788,0.6973175721754944,0.9646484348350589,0.9605971055104869,0.7264566019960785,0.8110366999373768 +torch,optimized,species,20,per_model,194,41945,30249,52788,0.7081344244904145,0.9726536166037543,0.9673028973830733,0.7249718216154226,0.8139613934096738 +torch,optimized,species,20,common,180,40455,29545,52788,0.7081344244904145,0.9744003816755382,0.9682799478546156,0.7355230038915617,0.8220522350709071 +onnx,optimized,species,20,per_model,193,41892,30094,52788,0.7045351216185497,0.9730113961424189,0.9672414097720884,0.7241073248627131,0.8134845543532351 +onnx,optimized,species,20,common,180,40455,29417,52788,0.7045351216185497,0.9749535854270197,0.9683959794573341,0.7328357084727255,0.8202403740616799 +torch-tta,optimized,species,20,per_model,208,42698,34800,52788,0.8116049102068652,0.9690231333557542,0.9664275821917379,0.8041659814144588,0.8667271886805571 +torch-tta,optimized,species,20,common,180,40455,33471,52788,0.8116049102068652,0.9745037354217521,0.9676455135705991,0.8221975995005899,0.8798559733558071 +onnx-tta,optimized,species,20,per_model,208,42698,34860,52788,0.8132530120481928,0.9690034400769387,0.9662594248129517,0.8055424722904401,0.8675612517319938 +onnx-tta,optimized,species,20,common,180,40455,33526,52788,0.8132530120481928,0.974385117261553,0.9674510808010985,0.8234979435636558,0.8805603057062933 +v2,optimized,genus,-1,per_model,379,52788,36853,52788,0.6981321512464954,0.9533632911945014,0.784792371905105,0.6176629588211429,0.5868633065886133 +torch,optimized,genus,-1,per_model,398,52788,39989,52788,0.7575395923315905,0.9547996220084877,0.745381822803767,0.678410498949023,0.6019267109931725 +onnx,optimized,genus,-1,per_model,395,52788,39784,52788,0.7536561339698417,0.9551874761942367,0.7523387061411551,0.6745698413302063,0.6043210367725153 +torch-tta,optimized,genus,-1,per_model,383,52788,44511,52788,0.8432030006819732,0.95774560113418,0.7891877764219916,0.7626880651777854,0.6776129515770071 +onnx-tta,optimized,genus,-1,per_model,384,52788,44504,52788,0.843070394786694,0.9578599395148406,0.7876914346408369,0.7626601078847843,0.67596735754951 +v2,optimized,genus,5,per_model,221,51350,34216,52788,0.6981321512464954,0.9716616552337888,0.9644034675161717,0.6868834008659555,0.7807696866753272 +v2,optimized,genus,5,common,215,46868,34160,52788,0.6981321512464954,0.9754975181801082,0.96822735165948,0.6927141276824689,0.7874852435844385 +torch,optimized,genus,5,per_model,226,47997,36422,52788,0.7575395923315905,0.970284104556389,0.9654305304648698,0.7349949980804276,0.8198300630906832 +torch,optimized,genus,5,common,215,46868,35966,52788,0.7575395923315905,0.9730526458225819,0.9696226974149172,0.7475533077376153,0.8310650157210921 +onnx,optimized,genus,5,per_model,226,47997,36257,52788,0.7536561339698417,0.9708040563009604,0.9665082137972658,0.7310313579815346,0.8173152189160264 +onnx,optimized,genus,5,common,215,46868,35808,52788,0.7536561339698417,0.9738759173936625,0.9708203215753252,0.7439396812388471,0.8289781701827873 +torch-tta,optimized,genus,5,per_model,232,48047,40448,52788,0.8432030006819732,0.9740978260964577,0.9682301236825241,0.8146523892286389,0.8726172137759266 +torch-tta,optimized,genus,5,common,215,46868,39827,52788,0.8432030006819732,0.9754640055183043,0.9744657384691411,0.8284961369731623,0.8857838500606219 +onnx-tta,optimized,genus,5,per_model,232,48047,40445,52788,0.843070394786694,0.9742496201535418,0.9681807012728565,0.8146135864340426,0.8725791077003775 +onnx-tta,optimized,genus,5,common,215,46868,39824,52788,0.843070394786694,0.975627801896181,0.9744124082410346,0.8284542660506211,0.885742730946541 +v2,optimized,genus,10,per_model,197,50958,34025,52788,0.6981321512464954,0.9707426742420079,0.9676850759993277,0.7030299586868274,0.7949775034079533 +v2,optimized,genus,10,common,192,46467,33937,52788,0.6981321512464954,0.9752941088049124,0.9772224666409167,0.7109088798148795,0.8054635075619051 +torch,optimized,genus,10,per_model,203,47662,36218,52788,0.7575395923315905,0.9725044668174535,0.973428506176096,0.7475181869995279,0.8320199105759429 +torch,optimized,genus,10,common,192,46467,35691,52788,0.7575395923315905,0.9735479156470631,0.9733069820326449,0.7535836525103417,0.83644361028291 +onnx,optimized,genus,10,per_model,202,47651,36048,52788,0.7536561339698417,0.973280111509321,0.9750664954245438,0.7440944617898129,0.8301947627142044 +onnx,optimized,genus,10,common,192,46467,35536,52788,0.7536561339698417,0.9741721892441434,0.9742219352236319,0.7503899701812965,0.834492264816495 +torch-tta,optimized,genus,10,per_model,213,47821,40290,52788,0.8432030006819732,0.9738984553007208,0.9728876041784816,0.8217613324322757,0.8806777740048471 +torch-tta,optimized,genus,10,common,192,46467,39511,52788,0.8432030006819732,0.9767219347209566,0.9780098953790074,0.8329662619360828,0.8901119825986873 +onnx-tta,optimized,genus,10,per_model,213,47821,40287,52788,0.843070394786694,0.9740637896727561,0.9728337731970597,0.8217190683555322,0.8806362687957985 +onnx-tta,optimized,genus,10,common,192,46467,39508,52788,0.843070394786694,0.9769053525399332,0.9779501766339919,0.8329193752259455,0.8900659377573991 +v2,optimized,genus,20,per_model,156,45483,33405,52788,0.6981321512464954,0.9843358498587619,0.9748388332981802,0.7242019498914946,0.8169005762983504 +v2,optimized,genus,20,common,152,45330,33296,52788,0.6981321512464954,0.9839236353813609,0.9778465660712192,0.7242368310515996,0.8183922505182741 +torch,optimized,genus,20,per_model,165,46690,35635,52788,0.7575395923315905,0.9810178296102066,0.9757921370967002,0.7571265698443955,0.8419323350469783 +torch,optimized,genus,20,common,152,45330,34996,52788,0.7575395923315905,0.983752937266044,0.9758140404693171,0.7677855297367047,0.8494275117330315 +onnx,optimized,genus,20,per_model,165,46690,35481,52788,0.7536561339698417,0.9817692866417445,0.9765223194080256,0.7541904615905834,0.8401795246684531 +onnx,optimized,genus,20,common,152,45330,34847,52788,0.7536561339698417,0.9843822049121461,0.9763221583019224,0.7646492402112083,0.847449368620922 +torch-tta,optimized,genus,20,per_model,173,46980,39700,52788,0.8432030006819732,0.9828021400489438,0.9770325613675723,0.8323906948783845,0.8906387985645831 +torch-tta,optimized,genus,20,common,152,45330,38714,52788,0.8432030006819732,0.9872680813408571,0.9795773240581996,0.847432505635241,0.9016662303355456 +onnx-tta,optimized,genus,20,per_model,173,46980,39697,52788,0.843070394786694,0.9827521780380808,0.976966283916457,0.8323386587607753,0.8905876967754076 +onnx-tta,optimized,genus,20,common,152,45330,38711,52788,0.843070394786694,0.9872112166837566,0.9795018898539696,0.8473732803171727,0.9016080684307602 +v2,optimized,family,-1,per_model,26,52788,40881,52788,0.7744373721300295,0.9963653352691595,0.841348645086206,0.6466603488658192,0.6545226053114057 +torch,optimized,family,-1,per_model,30,52788,38566,52788,0.7305827081912556,0.9932547854813464,0.74059226732527,0.6535073068400129,0.5807455159791289 +onnx,optimized,family,-1,per_model,30,52788,38672,52788,0.7325907403197697,0.9932599551447033,0.7406007419898425,0.6548532928566179,0.5815679236552637 +torch-tta,optimized,family,-1,per_model,27,52788,43336,52788,0.8209441539743881,0.9892254689058468,0.8402573230856973,0.7546408071160894,0.7073928412638565 +onnx-tta,optimized,family,-1,per_model,27,52788,43353,52788,0.8212661968629233,0.9892268920132548,0.8402600553286454,0.7551948103314396,0.7076764729156301 +v2,optimized,family,5,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +v2,optimized,family,5,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +torch,optimized,family,5,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,5,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,5,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,5,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,5,per_model,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +torch-tta,optimized,family,5,common,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +onnx-tta,optimized,family,5,per_model,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +onnx-tta,optimized,family,5,common,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +v2,optimized,family,10,per_model,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +v2,optimized,family,10,common,19,52770,40869,52788,0.7744373721300295,0.9957914408379742,0.9859850593239553,0.6876576692748175,0.8020952610694091 +torch,optimized,family,10,per_model,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +torch,optimized,family,10,common,19,52770,38530,52788,0.7305827081912556,0.99218975160998,0.9900267939876928,0.7040432580775865,0.816089411195116 +onnx,optimized,family,10,per_model,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +onnx,optimized,family,10,common,19,52770,38636,52788,0.7325907403197697,0.9921957375359722,0.9900397290020405,0.7056726095713715,0.817387949631118 +torch-tta,optimized,family,10,per_model,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +torch-tta,optimized,family,10,common,19,52770,43325,52788,0.8209441539743881,0.9875242271541385,0.9919310736962174,0.7961036491000434,0.8802424586381118 +onnx-tta,optimized,family,10,per_model,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +onnx-tta,optimized,family,10,common,19,52770,43342,52788,0.8212661968629233,0.987525874962716,0.9919348125549885,0.796774284571257,0.8806455141432638 +v2,optimized,family,20,per_model,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +v2,optimized,family,20,common,15,52686,40812,52788,0.7744373721300295,0.9946691583947672,0.9978777258613801,0.6871044763195309,0.8073961361904209 +torch,optimized,family,20,per_model,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635083 +torch,optimized,family,20,common,15,52686,38470,52788,0.7305827081912556,0.9967736853726413,0.99662653164367,0.6975420951522447,0.8137962822635083 +onnx,optimized,family,20,per_model,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157778 +onnx,optimized,family,20,common,15,52686,38576,52788,0.7325907403197697,0.9967812675455647,0.9966429159951768,0.6996059403777053,0.8154410976157778 +torch-tta,optimized,family,20,per_model,16,52710,43281,52788,0.8209441539743881,0.9982058530788728,0.9952258423219504,0.8011208511634444,0.8854714289339141 +torch-tta,optimized,family,20,common,15,52686,43259,52788,0.8209441539743881,0.9980862432841311,0.9979378681737169,0.7961955745743408,0.8836332923121171 +onnx-tta,optimized,family,20,per_model,16,52710,43298,52788,0.8212661968629233,0.9982078098515587,0.995230282216741,0.8019172307855106,0.885950057346282 +onnx-tta,optimized,family,20,common,15,52686,43276,52788,0.8212661968629233,0.9980883305083292,0.9979426040614935,0.7970450461712113,0.8841438292853094 diff --git a/docs/assets/mambo-promoted-tail.json b/docs/assets/mambo-promoted-tail.json new file mode 100644 index 0000000..ff4f98b --- /dev/null +++ b/docs/assets/mambo-promoted-tail.json @@ -0,0 +1,47874 @@ +{ + "population": "reporting_partition", + "identities": { + "v2": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "torch": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "onnx": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "torch-tta": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "onnx-tta": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed" + }, + "sources_sha256": { + "v2": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "torch": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "onnx": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "torch-tta": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "onnx-tta": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444" + }, + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "10844862", + "10922411", + "10982815", + "11052757", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731826", + "1732063", + "1732416", + "1732452", + "1732565", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736412", + "1736447", + "1736727", + "1736906", + "1737491", + "1737524", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738422", + "1738429", + "1739272", + "1739290", + "1739461", + "1739819", + "1739833", + "1739922", + "1739931", + "1739980", + "1740005", + "1740069", + "1740174", + "1740183", + "1740185", + "1740392", + "1741341", + "1741368", + "1741545", + "1741593", + "1741633", + "1741752", + "1742142", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743643", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1744071", + "1744136", + "1744224", + "1744416", + "1744498", + "1744588", + "1744593", + "1744693", + "1744709", + "1744714", + "1744728", + "1744731", + "1744739", + "1744748", + "1744763", + "1744777", + "1744782", + "1744808", + "1744810", + "1744896", + "1745079", + "1745561", + "1745600", + "1745724", + "1745737", + "1746027", + "1746413", + "1746440", + "1746613", + "1746644", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1747050", + "1748805", + "1748890", + "1749164", + "1749713", + "1749948", + "1751051", + "1751298", + "1751457", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1759667", + "1759668", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1762608", + "1763072", + "1763610", + "1764987", + "1765011", + "1765017", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768749", + "1768771", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771245", + "1771509", + "1771531", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1774285", + "1775152", + "1775891", + "1776330", + "1776371", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778596", + "1779334", + "1779435", + "1779641", + "1779690", + "1780150", + "1780378", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782727", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1786936", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787751", + "1787770", + "1787859", + "1788522", + "1788635", + "1788917", + "1789076", + "1789086", + "1789267", + "1789481", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789840", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790625", + "1790692", + "1790816", + "1791422", + "1792061", + "1792292", + "1792335", + "1792377", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1795946", + "1795957", + "1796007", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1799799", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829533", + "1829776", + "1829785", + "1830122", + "1830125", + "1830131", + "1830144", + "1830191", + "1830380", + "1830410", + "1830457", + "1830632", + "1830838", + "1830843", + "1830937", + "1830962", + "1831002", + "1831009", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1832819", + "1832853", + "1835156", + "1835393", + "1835407", + "1835433", + "1835457", + "1836899", + "1837172", + "1837420", + "1838838", + "1838911", + "1839851", + "1839893", + "1840297", + "1840301", + "1840345", + "1840346", + "1840360", + "1840478", + "1840483", + "1840596", + "1841158", + "1841159", + "1841261", + "1841675", + "1841813", + "1841821", + "1842196", + "1845270", + "1845962", + "1846112", + "1846141", + "1846219", + "1846604", + "1847097", + "1847407", + "1847956", + "1848202", + "1848356", + "1848426", + "1848657", + "1848864", + "1848920", + "1849284", + "1849630", + "1850008", + "1850238", + "1850246", + "1850279", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851555", + "1852150", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853587", + "1854202", + "1854237", + "1854347", + "1854792", + "1856289", + "1856384", + "1856595", + "1856686", + "1856701", + "1856730", + "1856768", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858531", + "1858698", + "1858762", + "1859046", + "1859100", + "1860408", + "1860671", + "1860688", + "1860983", + "1860987", + "1861395", + "1861644", + "1861862", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1869489", + "1869803", + "1869852", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873048", + "1873079", + "1873411", + "1874375", + "1874743", + "1875008", + "1875120", + "1875327", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876623", + "1876854", + "1877941", + "1877988", + "1878470", + "1878490", + "1878862", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879630", + "1879735", + "1879765", + "1879970", + "1880040", + "1880064", + "1880138", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884280", + "1884312", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889287", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1898286", + "1898544", + "1909398", + "1911112", + "1918868", + "1920496", + "1920712", + "1924494", + "1929270", + "1938214", + "1938810", + "1939432", + "1939677", + "1939680", + "1940807", + "1941377", + "1941437", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959682", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965795", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975733", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987578", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299368", + "4302252", + "4302268", + "4522322", + "4522795", + "4522922", + "4522933", + "4523522", + "4523556", + "4523560", + "4523564", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525068", + "4525078", + "4525177", + "4525189", + "4525266", + "4525273", + "4525354", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525562", + "4526048", + "4527339", + "4527342", + "4527972", + "4528539", + "4528593", + "4528658", + "4528692", + "4528694", + "4529064", + "4529248", + "4529566", + "4529630", + "4529931", + "4530151", + "4530424", + "4530632", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532088", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532405", + "4532408", + "4532412", + "4532471", + "4532500", + "4532508", + "4532516", + "4532532", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533128", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534245", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534779", + "4534782", + "4534872", + "4534909", + "4534914", + "4535827", + "5101394", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103176", + "5103451", + "5103736", + "5104442", + "5104558", + "5104759", + "5104891", + "5105339", + "5109506", + "5109523", + "5109599", + "5109614", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5119808", + "5120396", + "5120675", + "5122293", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5130682", + "5131910", + "5134098", + "5135513", + "5141493", + "5141677", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145269", + "5145409", + "5145870", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146677", + "5146837", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149499", + "5149665", + "5149746", + "5149768", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5770913", + "5770942", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "6097214", + "6097225", + "6097228", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624468", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7869346", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7981386", + "7988195", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8073674", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8208583", + "8223165", + "8237343", + "8237987", + "8262357", + "8292872", + "8313553", + "8361848", + "8361973", + "8369868", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8742426", + "8756768", + "8823068", + "8858121", + "8869900", + "9092175", + "9101339", + "9174377", + "9242559", + "9262981", + "9414984", + "9473121", + "9530977", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1205, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.6856229575537315, + "precision": 0.2795792585422393, + "recall": 0.6856229575537315, + "f1": 0.2619881841444524 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848657", + "1848690", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7135646156794592, + "precision": 0.2688723997356787, + "recall": 0.7135646156794592, + "f1": 0.25928693173615297 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10450501", + "10580256", + "10638451", + "10787705", + "10844862", + "10915497", + "10982815", + "11080751", + "11287091", + "11418741", + "11478679", + "11571523", + "11576787", + "11598540", + "11728049", + "11962292", + "11992983", + "12089608", + "12135372", + "12253343", + "1730978", + "1731598", + "1731826", + "1731860", + "1732063", + "1732416", + "1732452", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1735855", + "1736377", + "1736425", + "1736484", + "1736560", + "1736727", + "1736898", + "1736906", + "1737491", + "1737524", + "1737526", + "1737533", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738245", + "1738317", + "1738700", + "1738794", + "1738839", + "1739272", + "1739290", + "1739461", + "1739605", + "1739819", + "1739833", + "1739922", + "1739980", + "1739999", + "1740005", + "1740069", + "1740116", + "1740174", + "1740185", + "1740374", + "1740482", + "1740623", + "1741056", + "1741147", + "1741341", + "1741368", + "1741545", + "1741551", + "1741615", + "1741633", + "1741634", + "1741667", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1742346", + "1743196", + "1743475", + "1743532", + "1743641", + "1743710", + "1743730", + "1743768", + "1743775", + "1743828", + "1743862", + "1743867", + "1743898", + "1744071", + "1744136", + "1744180", + "1744224", + "1744498", + "1744542", + "1744588", + "1744709", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744782", + "1744808", + "1744810", + "1744896", + "1744901", + "1745079", + "1745131", + "1745558", + "1745579", + "1745600", + "1745634", + "1745737", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748203", + "1748321", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749608", + "1749948", + "1750097", + "1751207", + "1751216", + "1751298", + "1751299", + "1751457", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759620", + "1759673", + "1759686", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1764531", + "1764987", + "1765011", + "1765017", + "1765044", + "1765767", + "1765954", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766418", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768702", + "1769057", + "1769103", + "1769505", + "1769519", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771391", + "1771509", + "1771531", + "1771650", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1773328", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1778596", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1784853", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787504", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789481", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789849", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1793877", + "1793986", + "1794102", + "1794590", + "1795215", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1814630", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1829785", + "1830241", + "1830380", + "1830408", + "1830410", + "1830537", + "1830584", + "1830632", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831128", + "1831136", + "1831168", + "1831643", + "1831752", + "1831780", + "1832853", + "1833626", + "1835031", + "1835156", + "1835457", + "1836899", + "1837172", + "1837420", + "1837429", + "1838838", + "1838911", + "1838969", + "1839293", + "1839296", + "1839851", + "1839893", + "1840301", + "1840346", + "1840360", + "1840380", + "1840408", + "1840478", + "1840555", + "1840581", + "1841159", + "1841261", + "1841296", + "1841616", + "1841675", + "1841813", + "1845270", + "1845368", + "1845962", + "1845965", + "1846107", + "1846112", + "1846236", + "1846729", + "1847407", + "1847956", + "1848356", + "1848596", + "1848610", + "1848636", + "1848657", + "1848730", + "1848753", + "1848864", + "1848920", + "1849284", + "1849294", + "1849477", + "1849630", + "1849897", + "1850008", + "1850246", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851010", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852430", + "1852956", + "1852978", + "1853064", + "1853079", + "1853587", + "1853723", + "1854202", + "1854237", + "1854287", + "1854347", + "1854792", + "1856005", + "1856289", + "1856595", + "1856620", + "1856658", + "1856686", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858531", + "1858698", + "1858775", + "1859046", + "1859305", + "1860408", + "1860621", + "1860628", + "1860668", + "1860688", + "1860768", + "1860852", + "1860987", + "1861031", + "1861395", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864161", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869478", + "1869489", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1871698", + "1871826", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874192", + "1874211", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875633", + "1875827", + "1875865", + "1875869", + "1875918", + "1875952", + "1876329", + "1876409", + "1876542", + "1876854", + "1877341", + "1877941", + "1877988", + "1878470", + "1878490", + "1878782", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879630", + "1879655", + "1879735", + "1879970", + "1880040", + "1880062", + "1880064", + "1880104", + "1880138", + "1880139", + "1880140", + "1880143", + "1881151", + "1881603", + "1881834", + "1882158", + "1882210", + "1882557", + "1882905", + "1883161", + "1883386", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886320", + "1886579", + "1886587", + "1887108", + "1887173", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891386", + "1891426", + "1891473", + "1891493", + "1891494", + "1911112", + "1918868", + "1920496", + "1920712", + "1926260", + "1939432", + "1939658", + "1939677", + "1940510", + "1940807", + "1941377", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1954563", + "1956440", + "1956524", + "1956599", + "1957266", + "1957300", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959467", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962860", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965345", + "1965763", + "1965777", + "1965795", + "1965810", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969291", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972377", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984117", + "1984734", + "1984942", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991179", + "1991371", + "1992066", + "1992504", + "1993419", + "4299576", + "4302252", + "4302268", + "4522322", + "4522795", + "4522886", + "4522911", + "4522916", + "4522922", + "4523522", + "4523556", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524072", + "4524221", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4524951", + "4525068", + "4525078", + "4525189", + "4525266", + "4525354", + "4525369", + "4525420", + "4525425", + "4525443", + "4525500", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527957", + "4527972", + "4528593", + "4528692", + "4528818", + "4529064", + "4529248", + "4529566", + "4529630", + "4530002", + "4530151", + "4530424", + "4531158", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532050", + "4532057", + "4532095", + "4532122", + "4532160", + "4532239", + "4532253", + "4532293", + "4532297", + "4532357", + "4532412", + "4532471", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533661", + "4533671", + "4533714", + "4533952", + "4534011", + "4534038", + "4534052", + "4534057", + "4534166", + "4534207", + "4534225", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534767", + "4534872", + "4534909", + "4534914", + "4535817", + "4535827", + "4536483", + "5101394", + "5101678", + "5101745", + "5102628", + "5102951", + "5102982", + "5103066", + "5103121", + "5103185", + "5103451", + "5103736", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104882", + "5104891", + "5104903", + "5105339", + "5109506", + "5109523", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116416", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118904", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120465", + "5120668", + "5120675", + "5120767", + "5121040", + "5121177", + "5121517", + "5121737", + "5122439", + "5123042", + "5123221", + "5123339", + "5123394", + "5123461", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126052", + "5126212", + "5126217", + "5126675", + "5126680", + "5134667", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143944", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146837", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147150", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147681", + "5147827", + "5147834", + "5148247", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149836", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771230", + "5771236", + "5771259", + "5771350", + "5771357", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772269", + "5772349", + "5772351", + "5804895", + "5879654", + "5880147", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7588222", + "7596232", + "7624468", + "7624494", + "7656811", + "7661023", + "7681733", + "7725644", + "7730078", + "7734292", + "7752082", + "7753668", + "7761138", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7921916", + "7937573", + "7940536", + "7960566", + "7964262", + "7972792", + "7976145", + "7981386", + "7993353", + "8000103", + "8007222", + "8015612", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8186212", + "8200050", + "8208583", + "8223165", + "8237343", + "8237987", + "8244266", + "8253467", + "8262357", + "8292872", + "8313553", + "8329661", + "8345820", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8424972", + "8532380", + "8537359", + "8581601", + "8632989", + "8691947", + "8708745", + "8742426", + "8756768", + "8856895", + "8858121", + "8890502", + "9101339", + "9242559", + "9262981", + "9400895", + "9473121", + "9674732", + "9734171", + "9812211" + ], + "class_count": 1289, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7133861511997317, + "precision": 0.2689411284200973, + "recall": 0.7133861511997317, + "f1": 0.2593624046134101 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10580256", + "10638451", + "10844862", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731860", + "1732063", + "1732416", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1736377", + "1736425", + "1736484", + "1736528", + "1736560", + "1736601", + "1737437", + "1737491", + "1737524", + "1737526", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738794", + "1738839", + "1738883", + "1739128", + "1739272", + "1739284", + "1739377", + "1739461", + "1739819", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1740392", + "1740482", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741615", + "1741633", + "1741634", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1743196", + "1743475", + "1743532", + "1743604", + "1743641", + "1743710", + "1743768", + "1743775", + "1743828", + "1744071", + "1744224", + "1744588", + "1744593", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744810", + "1744896", + "1745079", + "1745558", + "1745600", + "1745634", + "1745737", + "1745830", + "1745925", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749449", + "1749635", + "1749713", + "1749936", + "1751216", + "1751299", + "1758878", + "1759055", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759673", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765017", + "1765044", + "1765767", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768771", + "1768815", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1774285", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792377", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808450", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830241", + "1830380", + "1830407", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831136", + "1831643", + "1831752", + "1831780", + "1832853", + "1833096", + "1833626", + "1835031", + "1835156", + "1835393", + "1835407", + "1835456", + "1835457", + "1836899", + "1837429", + "1837515", + "1838691", + "1838905", + "1838911", + "1838969", + "1839851", + "1839893", + "1840346", + "1840380", + "1840478", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1842695", + "1845270", + "1845368", + "1845962", + "1846133", + "1846236", + "1846729", + "1847407", + "1848356", + "1848657", + "1848920", + "1849273", + "1849294", + "1849477", + "1849897", + "1850008", + "1850045", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1854202", + "1854237", + "1854287", + "1854347", + "1854849", + "1856005", + "1856289", + "1856595", + "1856668", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858698", + "1858775", + "1859305", + "1860688", + "1860983", + "1860987", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1875940", + "1876329", + "1876409", + "1876542", + "1877310", + "1877368", + "1877941", + "1877988", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879731", + "1879735", + "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882459", + "1882905", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1892242", + "1898286", + "1902533", + "1918868", + "1920506", + "1920712", + "1928248", + "1939432", + "1939879", + "1940744", + "1940807", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1984117", + "1984734", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522919", + "4522922", + "4523522", + "4523556", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525078", + "4525189", + "4525354", + "4525369", + "4525420", + "4525500", + "4525503", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527972", + "4528539", + "4528692", + "4529248", + "4529566", + "4529915", + "4530002", + "4530138", + "4530151", + "4530424", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532095", + "4532122", + "4532253", + "4532293", + "4532297", + "4532357", + "4532408", + "4532412", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533285", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533714", + "4533952", + "4534038", + "4534046", + "4534052", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103066", + "5103451", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109599", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120668", + "5120675", + "5120767", + "5121517", + "5121613", + "5122206", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123474", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5141493", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5770913", + "5771230", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880258", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7389824", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624494", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8219149", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8313553", + "8361848", + "8361973", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8691947", + "8742426", + "8756768", + "8858121", + "8890502", + "9092175", + "9101339", + "9242559", + "9473121", + "9530977", + "9674732", + "9724183", + "9734171", + "9812211" + ], + "class_count": 1131, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7493898333756177, + "precision": 0.3361085016262147, + "recall": 0.7493898333756177, + "f1": 0.32014833573036827 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10113008", + "10312073", + "10580256", + "10638451", + "10844862", + "11418741", + "11478679", + "11571523", + "11598540", + "11728049", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1731860", + "1732063", + "1732416", + "1732565", + "1732662", + "1732685", + "1733258", + "1733484", + "1734453", + "1734704", + "1734826", + "1735532", + "1736377", + "1736425", + "1736484", + "1736528", + "1736560", + "1736601", + "1737437", + "1737491", + "1737524", + "1737526", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1738163", + "1738222", + "1738794", + "1738839", + "1738883", + "1739128", + "1739272", + "1739284", + "1739377", + "1739461", + "1739819", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1740392", + "1740482", + "1741147", + "1741341", + "1741368", + "1741545", + "1741593", + "1741615", + "1741633", + "1741634", + "1741752", + "1741756", + "1742142", + "1742185", + "1742263", + "1743196", + "1743475", + "1743532", + "1743604", + "1743641", + "1743710", + "1743768", + "1743775", + "1743828", + "1744071", + "1744224", + "1744588", + "1744728", + "1744731", + "1744739", + "1744748", + "1744782", + "1744810", + "1744896", + "1745079", + "1745558", + "1745600", + "1745634", + "1745737", + "1745830", + "1745925", + "1746027", + "1746174", + "1746440", + "1746613", + "1746666", + "1746775", + "1746832", + "1746856", + "1746876", + "1746910", + "1748456", + "1748805", + "1748890", + "1748942", + "1749070", + "1749164", + "1749449", + "1749635", + "1749713", + "1749936", + "1751216", + "1751299", + "1758878", + "1759069", + "1759079", + "1759083", + "1759153", + "1759407", + "1759673", + "1760104", + "1760246", + "1760593", + "1760857", + "1760887", + "1760891", + "1761041", + "1761111", + "1761438", + "1761735", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765017", + "1765044", + "1765767", + "1766128", + "1766130", + "1766131", + "1766137", + "1766210", + "1766274", + "1766410", + "1766510", + "1766646", + "1766741", + "1766814", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1768771", + "1768815", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771204", + "1771214", + "1771245", + "1771385", + "1771509", + "1771531", + "1771678", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773163", + "1773309", + "1774285", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1778127", + "1778143", + "1778517", + "1779435", + "1779690", + "1780150", + "1780378", + "1781008", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1783855", + "1784359", + "1784812", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786007", + "1786902", + "1787064", + "1787112", + "1787267", + "1787400", + "1787590", + "1787610", + "1787770", + "1788425", + "1788522", + "1788635", + "1789086", + "1789267", + "1789553", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790361", + "1790364", + "1790692", + "1790816", + "1791422", + "1791784", + "1792061", + "1792377", + "1792379", + "1792383", + "1792411", + "1792418", + "1793877", + "1793986", + "1794102", + "1794361", + "1794590", + "1795215", + "1795282", + "1795854", + "1796007", + "1796117", + "1796145", + "1796169", + "1796217", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797276", + "1797367", + "1797479", + "1798346", + "1798372", + "1798408", + "1798449", + "1798504", + "1798594", + "1798802", + "1798807", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1808450", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1820406", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1824113", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825539", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1829322", + "1829363", + "1829776", + "1830241", + "1830380", + "1830407", + "1830410", + "1830457", + "1830537", + "1830584", + "1830632", + "1830802", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831136", + "1831643", + "1831752", + "1831780", + "1832853", + "1833096", + "1833626", + "1835031", + "1835156", + "1835393", + "1835407", + "1835456", + "1835457", + "1836899", + "1837429", + "1837515", + "1838691", + "1838905", + "1838911", + "1838969", + "1839851", + "1839893", + "1840346", + "1840380", + "1840478", + "1841159", + "1841261", + "1841296", + "1841675", + "1841813", + "1842695", + "1845270", + "1845368", + "1845962", + "1846133", + "1846236", + "1846729", + "1847407", + "1848356", + "1848657", + "1848920", + "1849273", + "1849294", + "1849477", + "1849897", + "1850008", + "1850045", + "1850450", + "1850506", + "1850522", + "1850538", + "1850781", + "1850971", + "1851203", + "1851337", + "1851555", + "1852177", + "1852311", + "1852956", + "1852978", + "1853064", + "1853079", + "1854202", + "1854237", + "1854287", + "1854347", + "1854849", + "1856005", + "1856289", + "1856595", + "1856668", + "1856691", + "1856701", + "1856730", + "1856867", + "1857577", + "1857626", + "1857828", + "1857829", + "1857878", + "1857924", + "1857978", + "1858074", + "1858113", + "1858163", + "1858698", + "1858775", + "1859305", + "1860688", + "1860983", + "1860987", + "1861644", + "1862578", + "1862580", + "1862719", + "1862837", + "1864358", + "1864377", + "1864652", + "1866568", + "1867820", + "1869512", + "1869803", + "1869976", + "1870202", + "1870249", + "1870250", + "1870450", + "1870988", + "1871160", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1873411", + "1874204", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1875918", + "1875940", + "1876329", + "1876409", + "1876542", + "1877310", + "1877368", + "1877941", + "1877988", + "1878490", + "1878586", + "1878862", + "1878879", + "1878895", + "1878907", + "1878939", + "1879252", + "1879452", + "1879731", + "1879735", + "1879970", + "1880064", + "1880104", + "1880139", + "1880140", + "1881151", + "1881834", + "1882158", + "1882210", + "1882459", + "1882905", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887173", + "1887177", + "1887290", + "1887701", + "1888579", + "1888733", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1890703", + "1890772", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1892242", + "1898286", + "1902533", + "1918868", + "1920506", + "1920712", + "1928248", + "1939432", + "1939879", + "1940744", + "1940807", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1956710", + "1957266", + "1957570", + "1957572", + "1957632", + "1957816", + "1957845", + "1957852", + "1957854", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1961068", + "1961190", + "1962204", + "1962265", + "1962268", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964195", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1966886", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1969954", + "1970213", + "1970227", + "1970284", + "1971888", + "1971986", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975341", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1977007", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978821", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982791", + "1982838", + "1982885", + "1983000", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983558", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1984117", + "1984734", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986367", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988602", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302252", + "4302268", + "4522322", + "4522795", + "4522916", + "4522919", + "4522922", + "4522933", + "4523522", + "4523556", + "4523725", + "4523880", + "4523883", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524403", + "4524421", + "4524426", + "4524636", + "4524638", + "4524740", + "4524793", + "4525078", + "4525189", + "4525354", + "4525369", + "4525420", + "4525500", + "4525503", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4526048", + "4526050", + "4527339", + "4527342", + "4527972", + "4528539", + "4528692", + "4529248", + "4529566", + "4529915", + "4530002", + "4530138", + "4530151", + "4530424", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4531975", + "4532022", + "4532057", + "4532095", + "4532122", + "4532253", + "4532293", + "4532297", + "4532357", + "4532408", + "4532412", + "4532493", + "4532500", + "4532516", + "4532532", + "4532534", + "4532544", + "4532696", + "4532811", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533285", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533714", + "4533952", + "4534038", + "4534046", + "4534052", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534686", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102287", + "5102931", + "5102951", + "5102982", + "5103066", + "5103451", + "5103998", + "5104056", + "5104442", + "5104558", + "5104641", + "5104781", + "5104891", + "5104903", + "5105088", + "5105339", + "5109523", + "5109599", + "5109661", + "5109821", + "5110200", + "5110213", + "5110644", + "5110670", + "5110871", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113084", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117399", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5119513", + "5120396", + "5120668", + "5120675", + "5120767", + "5121517", + "5121613", + "5122206", + "5122439", + "5123221", + "5123339", + "5123394", + "5123461", + "5123474", + "5123582", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5124911", + "5125689", + "5126212", + "5126217", + "5126675", + "5126680", + "5141493", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143477", + "5143651", + "5143675", + "5143697", + "5143947", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5144721", + "5145009", + "5145136", + "5145186", + "5145269", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146611", + "5146659", + "5146677", + "5146883", + "5146946", + "5146961", + "5147038", + "5147039", + "5147062", + "5147171", + "5147193", + "5147208", + "5147232", + "5147245", + "5147478", + "5147608", + "5147638", + "5147681", + "5147827", + "5148248", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149474", + "5149665", + "5149746", + "5149820", + "5149839", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5770913", + "5771230", + "5771259", + "5771350", + "5771982", + "5772063", + "5772129", + "5772176", + "5772178", + "5772186", + "5772196", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772349", + "5772351", + "5879654", + "5880147", + "5880258", + "5880512", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5883985", + "5884571", + "5884851", + "5976947", + "6097214", + "6097225", + "6097228", + "6097234", + "6097236", + "6121184", + "6544687", + "7389824", + "7429212", + "7438067", + "7443518", + "7446048", + "7448174", + "7588222", + "7596232", + "7624494", + "7656811", + "7681733", + "7730078", + "7734292", + "7752082", + "7753668", + "7762841", + "7780930", + "7825213", + "7874258", + "7875265", + "7877231", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7981386", + "7993353", + "8000103", + "8007222", + "8015895", + "8049830", + "8086347", + "8094357", + "8105817", + "8160782", + "8186212", + "8219149", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8273859", + "8313553", + "8361848", + "8361973", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "8691947", + "8742426", + "8756768", + "8858121", + "8890502", + "9092175", + "9101339", + "9242559", + "9473121", + "9530977", + "9674732", + "9724183", + "9734171", + "9812211" + ], + "class_count": 1132, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7493378530417095, + "precision": 0.335607011455683, + "recall": 0.7493378530417095, + "f1": 0.3197309858969451 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 320, + "truth_images_in_retained_classes": 44895, + "accepted_predictions_in_retained_classes": 39395, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7835860088760841, + "precision": 0.8271892598535118, + "recall": 0.7835860088760841, + "f1": 0.7771880031099807 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 39284, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7900550443728065, + "precision": 0.8335510054241905, + "recall": 0.7900550443728065, + "f1": 0.7835569174460332 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40080, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8016540743299243, + "precision": 0.826169612130568, + "recall": 0.8016540743299243, + "f1": 0.7937632511493784 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 39989, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8159055366992773, + "precision": 0.837066966065252, + "recall": 0.8159055366992773, + "f1": 0.8065774964710728 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1798974", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1839893", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1972342", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44848, + "accepted_predictions_in_retained_classes": 40095, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8021426772632025, + "precision": 0.8262878591168297, + "recall": 0.8021426772632025, + "f1": 0.794015782308363 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 40004, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8164098503378058, + "precision": 0.8371890152054124, + "recall": 0.8164098503378058, + "f1": 0.806838147603015 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1790002", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44929, + "accepted_predictions_in_retained_classes": 41848, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8567411793921805, + "precision": 0.8760937958534148, + "recall": 0.8567411793921805, + "f1": 0.850373233680162 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 41727, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.865303260260028, + "precision": 0.8809281307434137, + "recall": 0.865303260260028, + "f1": 0.8573956478024776 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1786902", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1790002", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 321, + "truth_images_in_retained_classes": 44929, + "accepted_predictions_in_retained_classes": 41848, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8566566506248902, + "precision": 0.8757776830894549, + "recall": 0.8566566506248902, + "f1": 0.8502587874803171 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1737775", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1978977", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772063", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 311, + "truth_images_in_retained_classes": 44709, + "accepted_predictions_in_retained_classes": 41728, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8655083257153624, + "precision": 0.8807049123666298, + "recall": 0.8655083257153624, + "f1": 0.8574639236363765 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1965996", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 277, + "truth_images_in_retained_classes": 43835, + "accepted_predictions_in_retained_classes": 38825, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7994793772053351, + "precision": 0.8464715182316644, + "recall": 0.7994793772053351, + "f1": 0.8020074761104694 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 38684, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.807434274731362, + "precision": 0.8524634178075089, + "recall": 0.807434274731362, + "f1": 0.8090415998072698 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39612, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8171258284359165, + "precision": 0.8511929361965738, + "recall": 0.8171258284359165, + "f1": 0.8180429337935674 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 39084, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8256404609528794, + "precision": 0.8567343194106741, + "recall": 0.8256404609528794, + "f1": 0.8257371612732255 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1782948", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983441", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146342", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 285, + "truth_images_in_retained_classes": 44492, + "accepted_predictions_in_retained_classes": 39626, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.817676149634451, + "precision": 0.8513280853428178, + "recall": 0.817676149634451, + "f1": 0.8183308171409448 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 39098, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8262235150108063, + "precision": 0.856877507167847, + "recall": 0.8262235150108063, + "f1": 0.8260421677936811 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44585, + "accepted_predictions_in_retained_classes": 41383, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8650597753206963, + "precision": 0.890822796453379, + "recall": 0.8650597753206963, + "f1": 0.866596355497898 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 40689, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8758483940155001, + "precision": 0.8978559590586308, + "recall": 0.8758483940155001, + "f1": 0.8761006747537562 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759083", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766137", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962204", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44585, + "accepted_predictions_in_retained_classes": 41382, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8649652326924728, + "precision": 0.8906558948204186, + "recall": 0.8649652326924728, + "f1": 0.8664756558669171 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 269, + "truth_images_in_retained_classes": 43592, + "accepted_predictions_in_retained_classes": 40689, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8760941628080915, + "precision": 0.897846903368685, + "recall": 0.8760941628080915, + "f1": 0.8762293688340541 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1822610", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 216, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 37641, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8082495823011705, + "precision": 0.8625621889375423, + "recall": 0.8082495823011705, + "f1": 0.8168473325998337 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37370, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8175661534139832, + "precision": 0.8679692809334503, + "recall": 0.8175661534139832, + "f1": 0.8251439958793457 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38417, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8271275510654174, + "precision": 0.878086795953307, + "recall": 0.8271275510654174, + "f1": 0.8390189376702694 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37749, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8380264705318411, + "precision": 0.8870648514468934, + "recall": 0.8380264705318411, + "f1": 0.8498822675305044 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746832", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1782948", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 222, + "truth_images_in_retained_classes": 43361, + "accepted_predictions_in_retained_classes": 38429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8276292942912182, + "precision": 0.8782629747089122, + "recall": 0.8276292942912182, + "f1": 0.8392847349307755 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 37764, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8385645719624101, + "precision": 0.8868839185673889, + "recall": 0.8385645719624101, + "f1": 0.8499675200880887 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 226, + "truth_images_in_retained_classes": 43341, + "accepted_predictions_in_retained_classes": 40350, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8779440296582359, + "precision": 0.9091124323290416, + "recall": 0.8779440296582359, + "f1": 0.8834258152556967 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 39473, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8847402108374071, + "precision": 0.9092002957022167, + "recall": 0.8847402108374071, + "f1": 0.8877589946240976 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1760104", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5772210", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 226, + "truth_images_in_retained_classes": 43341, + "accepted_predictions_in_retained_classes": 40349, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8779933384089511, + "precision": 0.9089448421313119, + "recall": 0.8779933384089511, + "f1": 0.8833793412304258 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 207, + "truth_images_in_retained_classes": 42149, + "accepted_predictions_in_retained_classes": 39471, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.884644302107583, + "precision": 0.9090587633916279, + "recall": 0.884644302107583, + "f1": 0.8876136773297221 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1731584", + "1731817", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736409", + "1736444", + "1736460", + "1736725", + "1736895", + "1737021", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1739000", + "1739060", + "1739418", + "1739446", + "1739724", + "1740664", + "1741141", + "1741338", + "1741540", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743723", + "1743762", + "1743811", + "1744049", + "1744133", + "1744237", + "1744240", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746399", + "1746437", + "1746600", + "1746749", + "1747044", + "1747242", + "1747949", + "1748277", + "1748799", + "1748889", + "1749137", + "1749712", + "1749732", + "1750339", + "1750759", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1762605", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778574", + "1778695", + "1779429", + "1779630", + "1779682", + "1780139", + "1780300", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1786930", + "1787061", + "1787107", + "1787399", + "1787522", + "1788466", + "1788764", + "1788916", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790601", + "1790683", + "1790794", + "1791382", + "1791874", + "1792055", + "1792280", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795443", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799789", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830630", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837168", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841529", + "1842184", + "1842261", + "1843897", + "1845266", + "1845958", + "1846094", + "1846907", + "1847591", + "1847952", + "1848192", + "1848253", + "1848374", + "1848655", + "1848843", + "1849256", + "1849514", + "1849628", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851496", + "1852133", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853431", + "1853583", + "1853873", + "1854160", + "1854326", + "1854459", + "1854789", + "1855383", + "1856286", + "1856382", + "1856563", + "1856586", + "1856631", + "1856650", + "1856766", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1859284", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1861796", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1869438", + "1869760", + "1869851", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873021", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874624", + "1874958", + "1875103", + "1875317", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876613", + "1876846", + "1877650", + "1877937", + "1878460", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888455", + "1888578", + "1888698", + "1889286", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1898261", + "1898474", + "1906451", + "1909334", + "1911078", + "1912583", + "1918607", + "1920481", + "1920704", + "1929153", + "1938213", + "1938238", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1942857", + "1944007", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1956900", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959668", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987555", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256568", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404934", + "4405245", + "4405430", + "4405493", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5104758", + "5105328", + "5114254", + "5115807", + "5116471", + "5119806", + "5123346", + "5123443", + "5130576", + "5135400", + "5144176", + "5146397", + "7236046", + "7236059", + "7236098", + "7354470", + "7384515", + "7396883", + "7494486", + "7510496", + "7721234", + "7739898", + "7742506", + "7786896", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "9005880", + "9021546", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793", + "9605252" + ], + "class_count": 691, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.7893807671430488, + "precision": 0.3234152967366764, + "recall": 0.7893807671430488, + "f1": 0.32128858585759756 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748757", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1987792", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078027", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 713, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053026558890463, + "precision": 0.3221313136590869, + "recall": 0.8053026558890463, + "f1": 0.3230351895845698 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11064851", + "11495707", + "12031311", + "12105049", + "1730815", + "1730935", + "1731584", + "1731817", + "1731859", + "1732062", + "1732397", + "1732442", + "1732496", + "1732661", + "1733242", + "1733338", + "1733574", + "1733840", + "1734388", + "1734683", + "1735487", + "1735652", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1736656", + "1736725", + "1736895", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1739000", + "1739060", + "1739418", + "1739446", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1741043", + "1741141", + "1741338", + "1741404", + "1741547", + "1741585", + "1741717", + "1742061", + "1742345", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744133", + "1744165", + "1744219", + "1744481", + "1744587", + "1744691", + "1744761", + "1744928", + "1745076", + "1745086", + "1745549", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748201", + "1748277", + "1748368", + "1748799", + "1748889", + "1748902", + "1749068", + "1749137", + "1749732", + "1750339", + "1751200", + "1751227", + "1755294", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760738", + "1760849", + "1761017", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764524", + "1764920", + "1765763", + "1765949", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775633", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778136", + "1778497", + "1778574", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787496", + "1787522", + "1788411", + "1788466", + "1788764", + "1789061", + "1789246", + "1789474", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808720", + "1808961", + "1809069", + "1810097", + "1811612", + "1812976", + "1814095", + "1814595", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830873", + "1830909", + "1831127", + "1831272", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835429", + "1836898", + "1837168", + "1837338", + "1838964", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1843855", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1847591", + "1847952", + "1848217", + "1848253", + "1848582", + "1848655", + "1848677", + "1848843", + "1849256", + "1849474", + "1849514", + "1849628", + "1849663", + "1849983", + "1850022", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852416", + "1852745", + "1852917", + "1853060", + "1853074", + "1853583", + "1853721", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854789", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856615", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858529", + "1858722", + "1859036", + "1859082", + "1860403", + "1860613", + "1860657", + "1861151", + "1861387", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864153", + "1864355", + "1864404", + "1864584", + "1866475", + "1867810", + "1869438", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871157", + "1871206", + "1871384", + "1871695", + "1871825", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875821", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1876846", + "1877292", + "1877650", + "1877937", + "1878460", + "1878757", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881601", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1883373", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1894779", + "1895130", + "1906451", + "1911078", + "1912319", + "1913456", + "1918607", + "1920481", + "1920554", + "1920704", + "1939401", + "1939616", + "1940447", + "1940500", + "1940797", + "1941316", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954555", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956900", + "1957193", + "1957281", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958238", + "1959381", + "1959409", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1966982", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969122", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991135", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256568", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257405", + "3257500", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4404934", + "4405245", + "4405430", + "4405493", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407138", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525607", + "4527338", + "4529834", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 710, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8053599793321786, + "precision": 0.32303901654923844, + "recall": 0.8053599793321786, + "f1": 0.32445203101159475 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1731584", + "1731859", + "1732062", + "1732397", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738215", + "1738583", + "1738667", + "1738881", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740664", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744219", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1745922", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747723", + "1747949", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749401", + "1749712", + "1749732", + "1750339", + "1751200", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796209", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808097", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1842684", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1848253", + "1848374", + "1848655", + "1849256", + "1849474", + "1849663", + "1849983", + "1850022", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854845", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858684", + "1858722", + "1859284", + "1859454", + "1860613", + "1860657", + "1860720", + "1861151", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1867810", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870449", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1898261", + "1902519", + "1918607", + "1920481", + "1920704", + "1928217", + "1939401", + "1940133", + "1940500", + "1940797", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4405245", + "4405430", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236059", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "7876391", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 643, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8472767012256567, + "precision": 0.3871858468468912, + "recall": 0.8472767012256567, + "f1": 0.38731172619778687 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12031311", + "12105049", + "1731584", + "1731859", + "1732062", + "1732397", + "1732496", + "1732661", + "1733242", + "1733338", + "1733840", + "1734388", + "1734683", + "1735487", + "1735814", + "1735869", + "1736266", + "1736359", + "1736418", + "1736460", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738215", + "1738583", + "1738667", + "1738881", + "1739000", + "1739060", + "1739336", + "1739418", + "1739446", + "1739724", + "1740434", + "1740664", + "1741338", + "1741404", + "1741540", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743404", + "1743467", + "1743485", + "1743516", + "1743637", + "1743690", + "1743762", + "1743811", + "1744049", + "1744219", + "1744587", + "1744691", + "1744761", + "1745076", + "1745086", + "1745549", + "1745922", + "1746012", + "1746172", + "1746437", + "1746600", + "1746749", + "1747242", + "1747723", + "1747949", + "1748277", + "1748757", + "1748799", + "1748902", + "1749068", + "1749137", + "1749401", + "1749712", + "1749732", + "1750339", + "1751200", + "1751227", + "1758873", + "1759029", + "1759152", + "1759405", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761094", + "1761401", + "1761728", + "1761857", + "1762232", + "1763285", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1766624", + "1766708", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1768691", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771363", + "1771501", + "1772155", + "1772359", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778114", + "1778136", + "1778695", + "1779429", + "1779682", + "1780139", + "1780300", + "1780913", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1783845", + "1784356", + "1784809", + "1785140", + "1785281", + "1785873", + "1785931", + "1786886", + "1787061", + "1787107", + "1787399", + "1787522", + "1788411", + "1788466", + "1789061", + "1789246", + "1789545", + "1789671", + "1789826", + "1789978", + "1790356", + "1790683", + "1790794", + "1791382", + "1791769", + "1791874", + "1792055", + "1792324", + "1792405", + "1793856", + "1793981", + "1794099", + "1794570", + "1795126", + "1795782", + "1796209", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798377", + "1798440", + "1798478", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808097", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824090", + "1825057", + "1825076", + "1825121", + "1825444", + "1825535", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1829298", + "1829702", + "1830036", + "1830118", + "1830379", + "1830507", + "1830535", + "1830581", + "1830630", + "1830799", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1831776", + "1832810", + "1833623", + "1835027", + "1835151", + "1835366", + "1835429", + "1836898", + "1837338", + "1839730", + "1840273", + "1841152", + "1841259", + "1841294", + "1841529", + "1842261", + "1842684", + "1843897", + "1845266", + "1845958", + "1846094", + "1846636", + "1846907", + "1848253", + "1848374", + "1848655", + "1849256", + "1849474", + "1849663", + "1849983", + "1850022", + "1850276", + "1850474", + "1850521", + "1850525", + "1850777", + "1850865", + "1851201", + "1851334", + "1851496", + "1852064", + "1852176", + "1852212", + "1852745", + "1852917", + "1853060", + "1853074", + "1853873", + "1854160", + "1854280", + "1854326", + "1854459", + "1854845", + "1855383", + "1856000", + "1856286", + "1856563", + "1856586", + "1856631", + "1856650", + "1856845", + "1857569", + "1857624", + "1857825", + "1857968", + "1858055", + "1858684", + "1858722", + "1859284", + "1859454", + "1860613", + "1860657", + "1860720", + "1861151", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1864584", + "1866475", + "1867343", + "1867810", + "1869504", + "1869760", + "1869974", + "1870168", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873408", + "1873980", + "1874152", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1875890", + "1876280", + "1876391", + "1876536", + "1877292", + "1877937", + "1878460", + "1878578", + "1878838", + "1879226", + "1879451", + "1879494", + "1879512", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1882413", + "1882902", + "1883132", + "1884090", + "1884194", + "1884425", + "1884886", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1887682", + "1888256", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1892238", + "1894469", + "1898261", + "1902519", + "1918607", + "1920481", + "1920704", + "1928217", + "1939401", + "1940133", + "1940500", + "1940797", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1956709", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1961066", + "1961188", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966883", + "1966929", + "1967196", + "1967242", + "1967263", + "1967583", + "1967722", + "1968199", + "1968665", + "1968854", + "1968975", + "1969918", + "1970179", + "1970226", + "1970279", + "1970574", + "1971819", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975336", + "1975542", + "1975570", + "1975729", + "1975783", + "1975885", + "1976155", + "1976515", + "1976949", + "1977104", + "1977419", + "1977775", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978814", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980511", + "1980718", + "1981690", + "1982367", + "1984731", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1990677", + "1991357", + "1991817", + "1991946", + "1993403", + "2278098", + "3255940", + "3255956", + "3256169", + "3256188", + "3256294", + "3256322", + "3256934", + "3256950", + "3257150", + "3257220", + "3257225", + "3257328", + "3257405", + "3257694", + "3257798", + "3257894", + "3261008", + "4301067", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4404729", + "4405245", + "4405430", + "4405983", + "4406069", + "4406268", + "4406291", + "4406298", + "4406360", + "4406622", + "4407165", + "4407310", + "4407354", + "4408190", + "4408204", + "4524069", + "4524400", + "4524792", + "4525072", + "4525607", + "4527338", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4684145", + "4687068", + "4687943", + "4689528", + "4706578", + "4706723", + "4709385", + "5102272", + "5105328", + "5110641", + "5114254", + "5115807", + "5116471", + "5123346", + "5123443", + "5144176", + "5146397", + "7236046", + "7236059", + "7236091", + "7354470", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7742506", + "7852351", + "7876391", + "8057237", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8903953", + "8921795", + "8936210", + "9021546", + "9026655", + "9046214", + "9061491", + "9065472", + "9073940", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9151414", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 642, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8472504239634208, + "precision": 0.38755157575495597, + "recall": 0.8472504239634208, + "f1": 0.38771743876773856 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 44975, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8198886444355898, + "precision": 0.8176206331689666, + "recall": 0.8198886444355898, + "f1": 0.7926029899466802 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44953, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8206876060779148, + "precision": 0.8201078560326222, + "recall": 0.8206876060779148, + "f1": 0.7941995832133606 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44773, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8383310164872881, + "precision": 0.8166147950822779, + "recall": 0.8383310164872881, + "f1": 0.8056571781128056 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500322 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 44776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8384072898289766, + "precision": 0.8162946927109619, + "recall": 0.8384072898289766, + "f1": 0.8055261341500322 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 45986, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8801037705609983, + "precision": 0.8650981003057536, + "recall": 0.8801037705609983, + "f1": 0.8548827619376147 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45974, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8812527981807469, + "precision": 0.8646719138069031, + "recall": 0.8812527981807469, + "f1": 0.8551819474190718 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1786886", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 244, + "truth_images_in_retained_classes": 52582, + "accepted_predictions_in_retained_classes": 45983, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8800690931903428, + "precision": 0.8647486446406456, + "recall": 0.8800690931903428, + "f1": 0.8545922539194751 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1839730", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1985969", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4407354", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 242, + "truth_images_in_retained_classes": 52567, + "accepted_predictions_in_retained_classes": 45971, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8812178342202511, + "precision": 0.864319570078447, + "recall": 0.8812178342202511, + "f1": 0.8548890385082203 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 52377, + "accepted_predictions_in_retained_classes": 44619, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8242091812881619, + "precision": 0.8349759270593797, + "recall": 0.8242091812881619, + "f1": 0.8073029077289685 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44584, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8245607328459141, + "precision": 0.8365957191270255, + "recall": 0.8245607328459141, + "f1": 0.8083056265437976 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44500, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8420595718087585, + "precision": 0.8360051629538205, + "recall": 0.8420595718087585, + "f1": 0.8201488914933474 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44429, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8411427176898308, + "precision": 0.8376300487556162, + "recall": 0.8411427176898308, + "f1": 0.8202795396773236 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 224, + "truth_images_in_retained_classes": 52409, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8421419742582609, + "precision": 0.8355105285467141, + "recall": 0.8421419742582609, + "f1": 0.8198882695930891 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 44433, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8412270014737968, + "precision": 0.8371241213255166, + "recall": 0.8412270014737968, + "f1": 0.8200129675053699 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52387, + "accepted_predictions_in_retained_classes": 45701, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.887280993797046, + "precision": 0.8844442695435504, + "recall": 0.887280993797046, + "f1": 0.8716325700875605 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 45660, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8874178652560551, + "precision": 0.8854839580503524, + "recall": 0.8874178652560551, + "f1": 0.87205931213225 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 222, + "truth_images_in_retained_classes": 52387, + "accepted_predictions_in_retained_classes": 45697, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8872428799301995, + "precision": 0.8840784199971973, + "recall": 0.8872428799301995, + "f1": 0.8713393860561334 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 219, + "truth_images_in_retained_classes": 52349, + "accepted_predictions_in_retained_classes": 45656, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8873792292814436, + "precision": 0.8851130968663781, + "recall": 0.8873792292814436, + "f1": 0.8717621118812142 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 178, + "truth_images_in_retained_classes": 51193, + "accepted_predictions_in_retained_classes": 43632, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8447796356264702, + "precision": 0.8683866368462851, + "recall": 0.8447796356264702, + "f1": 0.8409068314387458 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43532, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8468431185140185, + "precision": 0.8700188865290815, + "recall": 0.8468431185140185, + "f1": 0.8425197107045042 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43510, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.851621812405513, + "precision": 0.8767852358251573, + "recall": 0.851621812405513, + "f1": 0.8500899477281391 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572846967941111, + "precision": 0.879992285140897, + "recall": 0.8572846967941111, + "f1": 0.8551335240737619 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 180, + "truth_images_in_retained_classes": 51668, + "accepted_predictions_in_retained_classes": 43511, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8514718324234797, + "precision": 0.8766263792837025, + "recall": 0.8514718324234797, + "f1": 0.8499294903140182 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 43120, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8569783049191699, + "precision": 0.8797840089758777, + "recall": 0.8569783049191699, + "f1": 0.8548933267800543 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44870, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8952201890577778, + "precision": 0.9132784407726137, + "recall": 0.8952201890577778, + "f1": 0.8933677281815686 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 44453, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.899597539923479, + "precision": 0.9135145414371996, + "recall": 0.899597539923479, + "f1": 0.8960360409484771 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1758873", + "1759152", + "1760088", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1798902", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 181, + "truth_images_in_retained_classes": 51690, + "accepted_predictions_in_retained_classes": 44864, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8951734416630821, + "precision": 0.9130696781092725, + "recall": 0.8951734416630821, + "f1": 0.8931898883411497 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 174, + "truth_images_in_retained_classes": 51091, + "accepted_predictions_in_retained_classes": 44448, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8995623397519747, + "precision": 0.9132974690072101, + "recall": 0.8995623397519747, + "f1": 0.8958616326578391 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5336", + "5338", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6953", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8874", + "9408", + "9410", + "9412", + "9417", + "9541689", + "9689", + "9717" + ], + "class_count": 64, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8435038466784595, + "precision": 0.2610923881260793, + "recall": 0.8435038466784595, + "f1": 0.26968398140672784 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8104767092433202, + "precision": 0.2753352445359579, + "recall": 0.8104767092433202, + "f1": 0.2804941988278224 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "3563", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5481", + "5487", + "6166", + "6946", + "6950", + "6954", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8871", + "8874", + "9408", + "9410", + "9412", + "9541689", + "9689", + "9717" + ], + "class_count": 60, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8106325437578626, + "precision": 0.2756918885388057, + "recall": 0.8106325437578626, + "f1": 0.2808879232365722 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300668", + "4525436", + "4525465", + "4527533", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5487", + "6166", + "6946", + "6950", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8866", + "8868", + "8871", + "8874", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 52, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.86366836103727, + "precision": 0.3473357735776554, + "recall": 0.86366836103727, + "f1": 0.35919021330288153 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3528", + "3530", + "3552", + "3553", + "3554", + "3556", + "4300668", + "4525436", + "4525465", + "4527533", + "4532185", + "4538", + "4542", + "4554", + "4705755", + "4864", + "4865", + "4867", + "4870", + "5320", + "5336", + "5340", + "5343", + "5345", + "5474", + "5487", + "6166", + "6946", + "6950", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8838", + "8839", + "8840", + "8841", + "8855", + "8860", + "8861", + "8863", + "8864", + "8866", + "8868", + "8871", + "8874", + "9410", + "9412", + "9689", + "9717" + ], + "class_count": 52, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 52788, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8636665098420966, + "precision": 0.34712795694828363, + "recall": 0.8636665098420966, + "f1": 0.359050677814834 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52241, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8700294236802284, + "precision": 0.8073706420034539, + "recall": 0.8700294236802284, + "f1": 0.8237730542270191 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51891, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8570482156298184, + "precision": 0.7593390669412071, + "recall": 0.8570482156298184, + "f1": 0.7831492631501338 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 51893, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8572274253215421, + "precision": 0.7604089989497506, + "recall": 0.8572274253215421, + "f1": 0.7843304363763831 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52402, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932186151928605, + "precision": 0.8280730113019039, + "recall": 0.8932186151928605, + "f1": 0.8505612212541586 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8874", + "9689", + "9717" + ], + "class_count": 20, + "truth_images_in_retained_classes": 52783, + "accepted_predictions_in_retained_classes": 52403, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8932164863184111, + "precision": 0.8275326880655373, + "recall": 0.8932164863184111, + "f1": 0.850198428985235 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579268 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52159, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8777980291519171, + "precision": 0.8618479765055044, + "recall": 0.8777980291519171, + "f1": 0.8634797826579268 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51776, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8761006803143303, + "precision": 0.8444656509344528, + "recall": 0.8761006803143303, + "f1": 0.8502787174152917 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 51781, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8763115152457701, + "precision": 0.8445713671430294, + "recall": 0.8763115152457701, + "f1": 0.8504835558317285 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52332, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186540915649681, + "precision": 0.8978901347538473, + "recall": 0.9186540915649681, + "f1": 0.9040916328480296 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52332, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186540915649681, + "precision": 0.8978901347538473, + "recall": 0.9186540915649681, + "f1": 0.9040916328480296 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52333, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186515870067923, + "precision": 0.897254460358122, + "recall": 0.9186515870067923, + "f1": 0.903664818414002 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 17, + "truth_images_in_retained_classes": 52742, + "accepted_predictions_in_retained_classes": 52333, + "report_images": 52788, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9186515870067923, + "precision": 0.897254460358122, + "recall": 0.9186515870067923, + "f1": 0.903664818414002 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11598540", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1733258", + "1734453", + "1734704", + "1734826", + "1735532", + "1736727", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739819", + "1739833", + "1739922", + "1739931", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744782", + "1745079", + "1746027", + "1746440", + "1746775", + "1746832", + "1746876", + "1746910", + "1758878", + "1759069", + "1759083", + "1759153", + "1759407", + "1760104", + "1760246", + "1760593", + "1761041", + "1761735", + "1761865", + "1762244", + "1763610", + "1765011", + "1766137", + "1766210", + "1766274", + "1766510", + "1766741", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1768749", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1772793", + "1772940", + "1772956", + "1773309", + "1775152", + "1775891", + "1776330", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784826", + "1785185", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787267", + "1787610", + "1787770", + "1788635", + "1788917", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789755", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790692", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796188", + "1796463", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798504", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1807969", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1826033", + "1827125", + "1828162", + "1828637", + "1830410", + "1830457", + "1830843", + "1830937", + "1830962", + "1831009", + "1831136", + "1831168", + "1831643", + "1832853", + "1835156", + "1836899", + "1839893", + "1841261", + "1845270", + "1847407", + "1850246", + "1850538", + "1850781", + "1852177", + "1857577", + "1857626", + "1857828", + "1861644", + "1862580", + "1862837", + "1864377", + "1869803", + "1870202", + "1870250", + "1870988", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873411", + "1874375", + "1875008", + "1875120", + "1875327", + "1875869", + "1876329", + "1876542", + "1877988", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880139", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886579", + "1886587", + "1887108", + "1887290", + "1887701", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891426", + "1891473", + "1891493", + "1891494", + "1920712", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952449", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1958323", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964191", + "1964471", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967011", + "1967245", + "1967273", + "1967597", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975793", + "1975897", + "1975903", + "1976163", + "1977003", + "1977068", + "1978056", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1980521", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983000", + "1983052", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983997", + "1984117", + "1984942", + "1984949", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986452", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "1993419", + "4302268", + "4522322", + "4523522", + "4523880", + "4523885", + "4524054", + "4524070", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4524793", + "4525078", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532500", + "4532544", + "4532696", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5113847", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117189", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5120396", + "5123922", + "5124007", + "5124029", + "5124143", + "5124233", + "5125689", + "5126052", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5145965", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147232", + "5147245", + "5147608", + "5147638", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5149414", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772309", + "5772351", + "5880533", + "5880545", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7429212", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7734292", + "7752082", + "7780930", + "7825213", + "7874258", + "7875265", + "7895336", + "7937573", + "7940536", + "7960566", + "7972792", + "7993353", + "8000103", + "8007222", + "8015895", + "8105817", + "8160782", + "8223165", + "8237343", + "8237987", + "8262357", + "8361848", + "8361973", + "8388883", + "8394261", + "8397564", + "8407461", + "8421569", + "8532380", + "8537359", + "8581601", + "9092175", + "9101339", + "9473121", + "9674732" + ], + "class_count": 690, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36810, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.8465208024160925, + "precision": 0.6381169943670084, + "recall": 0.5418132969389368, + "f1": 0.4466755276813748 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1767655", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983888", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 654, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37381, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.8669405316273155, + "precision": 0.7028135267405738, + "recall": 0.5774611074285403, + "f1": 0.5081384528044552 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10055273", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732452", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737552", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739272", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1741341", + "1741633", + "1741752", + "1742142", + "1743532", + "1743775", + "1744071", + "1744739", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1748890", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1762244", + "1763610", + "1765011", + "1765767", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768150", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771531", + "1771698", + "1771772", + "1772169", + "1772179", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779435", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787064", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798372", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801051", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830410", + "1830584", + "1830879", + "1830937", + "1830962", + "1831136", + "1831168", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1837420", + "1839893", + "1840301", + "1840346", + "1840360", + "1841261", + "1845270", + "1847407", + "1848657", + "1850971", + "1852177", + "1852311", + "1854202", + "1854237", + "1857829", + "1858074", + "1858113", + "1858163", + "1862578", + "1862580", + "1862837", + "1864377", + "1870250", + "1870988", + "1871252", + "1871407", + "1872368", + "1872901", + "1873079", + "1874375", + "1875008", + "1875120", + "1875327", + "1875631", + "1875865", + "1875869", + "1876329", + "1876542", + "1878879", + "1878895", + "1878907", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1880143", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888743", + "1888759", + "1888826", + "1889833", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952229", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957300", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964195", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967273", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1981696", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1983922", + "1983999", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302252", + "4302268", + "4522322", + "4522922", + "4523522", + "4523880", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4527972", + "4529566", + "4529630", + "4530151", + "4531284", + "4531402", + "4531517", + "4531687", + "4531690", + "4531708", + "4531968", + "4532022", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532516", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119245", + "5120675", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146559", + "5146677", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772196", + "5772202", + "5772205", + "5772210", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884851", + "6097214", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8049830", + "8105817", + "8223165", + "8237343", + "8237987", + "8244266", + "8262357", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "8742426", + "9101339", + "9473121", + "9674732" + ], + "class_count": 650, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 37191, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.8695378035260483, + "precision": 0.7088741319668206, + "recall": 0.5752968296743217, + "f1": 0.5099648536812272 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732685", + "1733484", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1742263", + "1743532", + "1743775", + "1744071", + "1744588", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765767", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1838911", + "1839893", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1852311", + "1854202", + "1857829", + "1858074", + "1858113", + "1861644", + "1862578", + "1862580", + "1862837", + "1864377", + "1870202", + "1870250", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1875008", + "1875120", + "1875327", + "1875631", + "1875869", + "1876329", + "1876409", + "1876542", + "1878862", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302268", + "4522322", + "4522916", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146946", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772349", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884571", + "5884851", + "6097214", + "6097228", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8105817", + "8223165", + "8237343", + "8237987", + "8262357", + "8313553", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339", + "9530977", + "9674732" + ], + "class_count": 641, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 42843, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.8633843418309688, + "precision": 0.7190416496691577, + "recall": 0.6588299780195079, + "f1": 0.5661066449155471 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "10638451", + "11418741", + "11478679", + "11571523", + "11962292", + "12089608", + "12135372", + "12253343", + "1731598", + "1732063", + "1732416", + "1732685", + "1733484", + "1734453", + "1734704", + "1734826", + "1737491", + "1737542", + "1737650", + "1737775", + "1737776", + "1737847", + "1738050", + "1739833", + "1739922", + "1740005", + "1740069", + "1740185", + "1740374", + "1741341", + "1741633", + "1741752", + "1742142", + "1742263", + "1743532", + "1743775", + "1744071", + "1744588", + "1744782", + "1745079", + "1746027", + "1746440", + "1746613", + "1746775", + "1746832", + "1746876", + "1758878", + "1759069", + "1759083", + "1759153", + "1759673", + "1760104", + "1760593", + "1761041", + "1761865", + "1762244", + "1763072", + "1763610", + "1765011", + "1765767", + "1766128", + "1766130", + "1766137", + "1766210", + "1766274", + "1766510", + "1767597", + "1767625", + "1768117", + "1768341", + "1769103", + "1769505", + "1769566", + "1769897", + "1769958", + "1770150", + "1770307", + "1770477", + "1770772", + "1770880", + "1771040", + "1771214", + "1771509", + "1771698", + "1771772", + "1772169", + "1772179", + "1772793", + "1772940", + "1773309", + "1775152", + "1775891", + "1776330", + "1776619", + "1776862", + "1777253", + "1778074", + "1779690", + "1780150", + "1781694", + "1782560", + "1782615", + "1782627", + "1782672", + "1782726", + "1782763", + "1782777", + "1782841", + "1782927", + "1782948", + "1783016", + "1783037", + "1783043", + "1784359", + "1784812", + "1784826", + "1785286", + "1785888", + "1785895", + "1786902", + "1787112", + "1787590", + "1787610", + "1788425", + "1788635", + "1789267", + "1789580", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789783", + "1789785", + "1789982", + "1790002", + "1790072", + "1790160", + "1790816", + "1791422", + "1792383", + "1792411", + "1792418", + "1793877", + "1794590", + "1795215", + "1795854", + "1796117", + "1796145", + "1796169", + "1796668", + "1796678", + "1797178", + "1797258", + "1797367", + "1797479", + "1798346", + "1798449", + "1798802", + "1798807", + "1798974", + "1799132", + "1799135", + "1799701", + "1799708", + "1800004", + "1800032", + "1801896", + "1802280", + "1803012", + "1803073", + "1804071", + "1804906", + "1807206", + "1808752", + "1810099", + "1811789", + "1811896", + "1812394", + "1813114", + "1819145", + "1819268", + "1819873", + "1820039", + "1820372", + "1821856", + "1821911", + "1822346", + "1822587", + "1822610", + "1822613", + "1822787", + "1822796", + "1822819", + "1822830", + "1823726", + "1825064", + "1825077", + "1825083", + "1825156", + "1825176", + "1825971", + "1825983", + "1826022", + "1827125", + "1827645", + "1828162", + "1828637", + "1830410", + "1830937", + "1830962", + "1831136", + "1831643", + "1831752", + "1832853", + "1835156", + "1836899", + "1838911", + "1839893", + "1841261", + "1841813", + "1845270", + "1847407", + "1850971", + "1852311", + "1854202", + "1857829", + "1858074", + "1858113", + "1861644", + "1862578", + "1862580", + "1862837", + "1864377", + "1870202", + "1870250", + "1871252", + "1871407", + "1872315", + "1872368", + "1872901", + "1873079", + "1875008", + "1875120", + "1875327", + "1875631", + "1875869", + "1876329", + "1876409", + "1876542", + "1878862", + "1878879", + "1878895", + "1879252", + "1879452", + "1879970", + "1880064", + "1880140", + "1881151", + "1881834", + "1882210", + "1883161", + "1884212", + "1884255", + "1884273", + "1884332", + "1884370", + "1884403", + "1884465", + "1884970", + "1886084", + "1886579", + "1886587", + "1887108", + "1887290", + "1888579", + "1888743", + "1888759", + "1888826", + "1889942", + "1890187", + "1890534", + "1890576", + "1890656", + "1891059", + "1891326", + "1891473", + "1891493", + "1939432", + "1951557", + "1951649", + "1951713", + "1952014", + "1952062", + "1952130", + "1952532", + "1952806", + "1952812", + "1956440", + "1956524", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1957852", + "1958024", + "1959383", + "1959395", + "1959914", + "1959919", + "1960617", + "1961040", + "1962204", + "1962265", + "1962434", + "1962516", + "1962636", + "1962990", + "1963011", + "1963306", + "1963446", + "1963463", + "1964637", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965777", + "1965825", + "1965841", + "1965913", + "1965996", + "1966017", + "1966351", + "1967245", + "1967815", + "1968678", + "1968867", + "1970213", + "1970227", + "1970284", + "1972120", + "1972187", + "1972234", + "1972250", + "1972342", + "1972434", + "1972449", + "1973414", + "1973467", + "1975546", + "1975553", + "1975571", + "1975897", + "1975903", + "1976163", + "1977003", + "1978065", + "1978114", + "1978375", + "1978445", + "1978776", + "1978977", + "1979308", + "1979430", + "1979473", + "1979781", + "1982406", + "1982500", + "1982525", + "1982529", + "1982541", + "1982542", + "1982592", + "1982636", + "1982671", + "1982746", + "1982885", + "1983170", + "1983260", + "1983288", + "1983387", + "1983441", + "1983442", + "1983525", + "1983548", + "1983648", + "1983694", + "1983705", + "1983755", + "1983896", + "1984117", + "1984954", + "1985522", + "1986052", + "1986056", + "1986157", + "1986166", + "1986171", + "1986220", + "1986522", + "1986575", + "1987527", + "1987744", + "1988593", + "1988684", + "1988881", + "1989428", + "1990066", + "1990150", + "1990551", + "1991371", + "1992066", + "1992504", + "4302268", + "4522322", + "4522916", + "4523522", + "4523885", + "4524054", + "4524072", + "4524376", + "4524393", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525189", + "4525500", + "4525510", + "4525530", + "4525540", + "4525547", + "4529566", + "4530151", + "4531284", + "4531402", + "4531506", + "4531517", + "4531687", + "4531690", + "4531708", + "4532022", + "4532057", + "4532095", + "4532253", + "4532293", + "4532297", + "4532357", + "4532534", + "4532544", + "4532886", + "4532888", + "4532890", + "4533115", + "4533136", + "4533202", + "4533273", + "4533360", + "4533431", + "4533433", + "4533442", + "4533446", + "4533671", + "4533952", + "4534057", + "4534166", + "4534207", + "4534290", + "4534299", + "4534398", + "4534408", + "4534463", + "4534485", + "4534533", + "4534538", + "4534540", + "4534719", + "4534872", + "4534909", + "4534914", + "5101678", + "5101745", + "5102951", + "5102982", + "5103451", + "5104056", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112155", + "5112254", + "5112283", + "5112291", + "5112336", + "5112345", + "5112362", + "5113036", + "5113078", + "5113234", + "5114198", + "5114327", + "5115771", + "5115777", + "5115874", + "5116475", + "5116609", + "5116669", + "5116698", + "5116850", + "5116941", + "5117049", + "5117089", + "5117400", + "5118892", + "5118996", + "5119143", + "5119245", + "5123461", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5126217", + "5126680", + "5142870", + "5142971", + "5143048", + "5143129", + "5143147", + "5143380", + "5143453", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5144677", + "5145009", + "5145136", + "5145409", + "5146342", + "5146379", + "5146412", + "5146496", + "5146510", + "5146559", + "5146677", + "5146946", + "5146961", + "5147039", + "5147062", + "5147193", + "5147208", + "5147245", + "5147608", + "5147827", + "5148286", + "5148394", + "5148424", + "5148436", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5769191", + "5769272", + "5771259", + "5771350", + "5771982", + "5772063", + "5772176", + "5772186", + "5772196", + "5772202", + "5772205", + "5772210", + "5772349", + "5772351", + "5880533", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5884571", + "5884851", + "6097214", + "6097228", + "6097236", + "7438067", + "7443518", + "7446048", + "7596232", + "7681733", + "7730078", + "7752082", + "7780930", + "7825213", + "7874258", + "7895336", + "7940536", + "7960566", + "7972792", + "8000103", + "8007222", + "8015895", + "8105817", + "8223165", + "8237343", + "8237987", + "8262357", + "8313553", + "8361848", + "8361973", + "8397564", + "8407461", + "8421569", + "8537359", + "8581601", + "9101339", + "9530977", + "9674732" + ], + "class_count": 641, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 42930, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.8635268756201978, + "precision": 0.7198655161183526, + "recall": 0.6615516920144863, + "f1": 0.5675578092246024 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766137", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830410", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975571", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769068", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 281, + "truth_images_in_retained_classes": 42875, + "accepted_predictions_in_retained_classes": 31091, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.949227254623375, + "precision": 0.943736867068747, + "recall": 0.6916423088644161, + "f1": 0.7737956953842567 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 31030, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9523181631837667, + "precision": 0.9510141862019456, + "recall": 0.696639527553125, + "f1": 0.7800052421246759 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 288, + "truth_images_in_retained_classes": 44180, + "accepted_predictions_in_retained_classes": 31486, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9604545336634476, + "precision": 0.9622152512833568, + "recall": 0.7039086159930352, + "f1": 0.7910306156942064 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 30983, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9636278309815087, + "precision": 0.9627691640571292, + "recall": 0.7169541525627774, + "f1": 0.8016362227458123 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525510", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534398", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 287, + "truth_images_in_retained_classes": 44173, + "accepted_predictions_in_retained_classes": 31341, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9610226296998533, + "precision": 0.9619757519565229, + "recall": 0.7010200481362973, + "f1": 0.7888306624960767 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 30851, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9643815594419234, + "precision": 0.9628304211425756, + "recall": 0.7147377382773606, + "f1": 0.800104314691979 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 299, + "truth_images_in_retained_classes": 44421, + "accepted_predictions_in_retained_classes": 36047, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9603653330244, + "precision": 0.9597405841266853, + "recall": 0.790768730570598, + "f1": 0.8516449621343269 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 35192, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9639495772208692, + "precision": 0.9616309429747886, + "recall": 0.8034434173226027, + "f1": 0.8618831738738654 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1744782", + "1746440", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1761041", + "1762244", + "1763610", + "1766210", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782672", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1827125", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1862580", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1889942", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959395", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1984117", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531687", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534485", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5113234", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5126212", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "7960566", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 299, + "truth_images_in_retained_classes": 44421, + "accepted_predictions_in_retained_classes": 36110, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9601405781654884, + "precision": 0.9596554572863384, + "recall": 0.7921758700534698, + "f1": 0.8525263322194031 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1780150", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789267", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1845270", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957816", + "1957845", + "1959383", + "1959914", + "1960617", + "1962265", + "1962434", + "1962636", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975553", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534166", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5109821", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143048", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144190", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5771982", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 273, + "truth_images_in_retained_classes": 42787, + "accepted_predictions_in_retained_classes": 35252, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.963707047522958, + "precision": 0.9615027455443487, + "recall": 0.8048549427987153, + "f1": 0.8627190954298332 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1758878", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1822796", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982885", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 243, + "truth_images_in_retained_classes": 42227, + "accepted_predictions_in_retained_classes": 30743, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.953448505161714, + "precision": 0.9544450850263946, + "recall": 0.7134225852923751, + "f1": 0.7961537592407799 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30611, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9552371110145412, + "precision": 0.9586140054758544, + "recall": 0.7164050701636104, + "f1": 0.8009004286169517 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31151, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.963686280781054, + "precision": 0.9676952538780558, + "recall": 0.7171112436175308, + "f1": 0.8061491380093966 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30528, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9673296490095744, + "precision": 0.9672615516732053, + "recall": 0.7266753942187194, + "f1": 0.8138865890143704 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 255, + "truth_images_in_retained_classes": 43584, + "accepted_predictions_in_retained_classes": 31014, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9644807475606031, + "precision": 0.9677553930474767, + "recall": 0.7146917879143063, + "f1": 0.8044523205064156 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 30399, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9681978678690395, + "precision": 0.9673496769410929, + "recall": 0.7245547988604122, + "f1": 0.812427697268594 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 44032, + "accepted_predictions_in_retained_classes": 35745, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.96173064446984, + "precision": 0.9639011820682567, + "recall": 0.7946782620839412, + "f1": 0.8587308953151547 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 34617, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9662994503676685, + "precision": 0.9671449526169773, + "recall": 0.8130146967116284, + "f1": 0.8731615665583466 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1737491", + "1737542", + "1739922", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1746876", + "1758878", + "1759153", + "1760104", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770307", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785888", + "1785895", + "1787610", + "1789695", + "1789730", + "1789745", + "1789785", + "1791422", + "1792383", + "1792411", + "1792418", + "1794590", + "1795215", + "1796145", + "1796678", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1821911", + "1822346", + "1822610", + "1822796", + "1822819", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1826022", + "1828162", + "1828637", + "1830937", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1875869", + "1876329", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887108", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1891493", + "1951557", + "1951649", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1982885", + "1983442", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986157", + "1986166", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531284", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534207", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5103451", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5111574", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5772210", + "5772351", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 272, + "truth_images_in_retained_classes": 44032, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9614835793859626, + "precision": 0.9638076051371401, + "recall": 0.7962250808537157, + "f1": 0.8596997543424995 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1734704", + "1741341", + "1742142", + "1743532", + "1746775", + "1746832", + "1759153", + "1762244", + "1763610", + "1766274", + "1767597", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771214", + "1771509", + "1771698", + "1772169", + "1772179", + "1777253", + "1778074", + "1782763", + "1782777", + "1782927", + "1783043", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797258", + "1797479", + "1798807", + "1799132", + "1800004", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1819873", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1828637", + "1835156", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1876329", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1888759", + "1890187", + "1890576", + "1891473", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1960617", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965208", + "1965763", + "1965841", + "1966017", + "1967815", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973414", + "1973467", + "1975897", + "1976163", + "1977003", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986157", + "1986220", + "1986522", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1991371", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4533273", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5104558", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5113078", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5144543", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5147608", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5768880", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "7780930", + "8015895", + "8223165", + "8262357", + "8361848", + "8397564", + "8421569", + "8537359", + "9101339" + ], + "class_count": 237, + "truth_images_in_retained_classes": 42021, + "accepted_predictions_in_retained_classes": 34676, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9661761234598567, + "precision": 0.9669972821591288, + "recall": 0.8146008253728714, + "f1": 0.8740844405084152 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746775", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1964657", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986166", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 190, + "truth_images_in_retained_classes": 40924, + "accepted_predictions_in_retained_classes": 29917, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9610844376490718, + "precision": 0.9546242144015308, + "recall": 0.720024084306013, + "f1": 0.8034606105897976 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29626, + "report_images": 52788, + "overall_coverage": 0.6973175721754944, + "metrics": { + "accuracy": 0.9646484348350589, + "precision": 0.9605971055104869, + "recall": 0.7264566019960785, + "f1": 0.8110366999373768 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534872", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 194, + "truth_images_in_retained_classes": 41945, + "accepted_predictions_in_retained_classes": 30249, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9726536166037543, + "precision": 0.9673028973830733, + "recall": 0.7249718216154226, + "f1": 0.8139613934096738 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29545, + "report_images": 52788, + "overall_coverage": 0.7081344244904145, + "metrics": { + "accuracy": 0.9744003816755382, + "precision": 0.9682799478546156, + "recall": 0.7355230038915617, + "f1": 0.8220522350709071 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 193, + "truth_images_in_retained_classes": 41892, + "accepted_predictions_in_retained_classes": 30094, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9730113961424189, + "precision": 0.9672414097720884, + "recall": 0.7241073248627131, + "f1": 0.8134845543532351 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 29417, + "report_images": 52788, + "overall_coverage": 0.7045351216185497, + "metrics": { + "accuracy": 0.9749535854270197, + "precision": 0.9683959794573341, + "recall": 0.7328357084727255, + "f1": 0.8202403740616799 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 34800, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9690231333557542, + "precision": 0.9664275821917379, + "recall": 0.8041659814144588, + "f1": 0.8667271886805571 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 33471, + "report_images": 52788, + "overall_coverage": 0.8116049102068652, + "metrics": { + "accuracy": 0.9745037354217521, + "precision": 0.9676455135705991, + "recall": 0.8221975995005899, + "f1": 0.8798559733558071 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732063", + "1732416", + "1734453", + "1742142", + "1743532", + "1746832", + "1758878", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772169", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1795215", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1803073", + "1804071", + "1804906", + "1810099", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1821911", + "1822346", + "1823726", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879252", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965208", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1970284", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982525", + "1982541", + "1982636", + "1983525", + "1983648", + "1983755", + "1983896", + "1985522", + "1986166", + "1986220", + "1986575", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4522322", + "4523522", + "4523885", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531517", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534290", + "4534540", + "4534719", + "4534872", + "4534909", + "5101678", + "5102951", + "5104442", + "5105339", + "5110200", + "5110213", + "5110670", + "5110885", + "5112283", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124143", + "5124233", + "5125689", + "5142870", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146412", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7443518", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 208, + "truth_images_in_retained_classes": 42698, + "accepted_predictions_in_retained_classes": 34860, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.9690034400769387, + "precision": 0.9662594248129517, + "recall": 0.8055424722904401, + "f1": 0.8675612517319938 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732063", + "1732416", + "1734453", + "1743532", + "1746832", + "1759153", + "1763610", + "1766274", + "1769103", + "1769566", + "1769897", + "1770477", + "1770880", + "1771509", + "1771698", + "1772179", + "1782763", + "1782777", + "1782927", + "1785286", + "1785895", + "1789695", + "1789745", + "1789785", + "1791422", + "1792383", + "1792418", + "1794590", + "1796145", + "1797479", + "1798807", + "1800032", + "1801896", + "1802280", + "1804071", + "1804906", + "1812394", + "1813114", + "1819145", + "1820039", + "1820372", + "1822346", + "1825064", + "1825077", + "1825156", + "1825971", + "1825983", + "1828162", + "1841261", + "1864377", + "1872368", + "1875008", + "1875327", + "1879970", + "1881151", + "1882210", + "1883161", + "1884255", + "1884370", + "1884403", + "1884465", + "1884970", + "1887290", + "1890187", + "1890576", + "1951557", + "1952014", + "1952532", + "1952806", + "1952812", + "1956599", + "1957570", + "1957572", + "1957845", + "1959914", + "1962265", + "1962434", + "1962990", + "1963306", + "1963446", + "1964653", + "1965166", + "1965763", + "1966017", + "1968678", + "1968867", + "1970213", + "1972187", + "1972250", + "1973467", + "1975897", + "1976163", + "1978114", + "1978445", + "1978776", + "1979308", + "1979473", + "1982500", + "1982541", + "1983525", + "1983648", + "1983896", + "1985522", + "1986220", + "1988593", + "1988881", + "1989428", + "1990150", + "1992066", + "4523522", + "4524054", + "4524376", + "4524421", + "4524426", + "4524636", + "4524638", + "4525078", + "4525540", + "4529566", + "4531690", + "4532297", + "4532544", + "4532886", + "4532890", + "4533136", + "4534540", + "4534719", + "4534909", + "5102951", + "5104442", + "5105339", + "5110200", + "5110670", + "5110885", + "5114198", + "5115771", + "5115777", + "5115874", + "5117400", + "5118996", + "5119245", + "5124007", + "5124233", + "5125689", + "5143129", + "5143147", + "5143380", + "5143651", + "5143675", + "5143697", + "5144426", + "5144534", + "5145009", + "5146379", + "5146559", + "5146961", + "5147208", + "5148424", + "5148462", + "5148486", + "5148487", + "5149438", + "5149665", + "5149746", + "5714973", + "5769072", + "5771350", + "5772196", + "5880533", + "5880552", + "5880559", + "5884851", + "6097214", + "7681733", + "8015895", + "8262357", + "8361848", + "8397564", + "8421569", + "9101339" + ], + "class_count": 180, + "truth_images_in_retained_classes": 40455, + "accepted_predictions_in_retained_classes": 33526, + "report_images": 52788, + "overall_coverage": 0.8132530120481928, + "metrics": { + "accuracy": 0.974385117261553, + "precision": 0.9674510808010985, + "recall": 0.8234979435636558, + "f1": 0.8805603057062933 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1735487", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759405", + "1760088", + "1760588", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1770592", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784809", + "1785140", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1790683", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796408", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1807965", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1824246", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1835151", + "1836898", + "1839730", + "1840273", + "1841259", + "1845266", + "1846907", + "1850525", + "1850777", + "1856631", + "1857624", + "1857825", + "1861607", + "1862568", + "1862681", + "1863292", + "1863647", + "1864355", + "1864404", + "1869760", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873408", + "1873980", + "1874374", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1876536", + "1877937", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1920704", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952222", + "1952300", + "1952446", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1958238", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964392", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975783", + "1975885", + "1976155", + "1976949", + "1977104", + "1977419", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "1993403", + "2278098", + "3255940", + "3256294", + "3256322", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8782295", + "8875114", + "8875890", + "8921795", + "9021546", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 379, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 36853, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9533632911945014, + "precision": 0.784792371905105, + "recall": 0.6176629588211429, + "f1": 0.5868633065886133 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1790794", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888256", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 398, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39989, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9547996220084877, + "precision": 0.745381822803767, + "recall": 0.678410498949023, + "f1": 0.6019267109931725 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732442", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739060", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1748889", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1761017", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768136", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779429", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787061", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798362", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801046", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830379", + "1830581", + "1830873", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1837338", + "1839730", + "1840273", + "1841259", + "1843897", + "1845266", + "1846907", + "1848655", + "1850865", + "1852064", + "1852176", + "1852212", + "1852745", + "1854160", + "1855383", + "1856631", + "1857825", + "1858055", + "1861151", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870242", + "1870982", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874374", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886289", + "1886576", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1894469", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957281", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964175", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967263", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1981690", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3257894", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406298", + "4406360", + "4406622", + "4406931", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7494486", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8317469", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500", + "9220793" + ], + "class_count": 395, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 39784, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9551874761942367, + "precision": 0.7523387061411551, + "recall": 0.6745698413302063, + "f1": 0.6043210367725153 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732661", + "1733338", + "1733840", + "1734388", + "1734683", + "1735869", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743516", + "1743762", + "1744049", + "1744587", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1841529", + "1843897", + "1845266", + "1846907", + "1850865", + "1852212", + "1854160", + "1856631", + "1857825", + "1858055", + "1861151", + "1861607", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876391", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 383, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 44511, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.95774560113418, + "precision": 0.7891877764219916, + "recall": 0.7626880651777854, + "f1": 0.6776129515770071 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "11495707", + "12105049", + "1731584", + "1732062", + "1732397", + "1732661", + "1733338", + "1733840", + "1734388", + "1734683", + "1735869", + "1737335", + "1737519", + "1737647", + "1737701", + "1738049", + "1738583", + "1739724", + "1741338", + "1741585", + "1741717", + "1742061", + "1742419", + "1743188", + "1743516", + "1743762", + "1744049", + "1744587", + "1744691", + "1744761", + "1745076", + "1746012", + "1746437", + "1746600", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1759552", + "1760088", + "1760588", + "1760849", + "1761017", + "1761857", + "1762232", + "1763597", + "1764920", + "1765763", + "1766123", + "1766265", + "1766366", + "1767590", + "1767644", + "1768106", + "1768222", + "1768302", + "1768411", + "1769098", + "1769504", + "1769819", + "1769945", + "1770123", + "1770274", + "1770396", + "1771501", + "1772155", + "1772783", + "1772926", + "1775081", + "1775149", + "1775887", + "1775910", + "1776168", + "1776299", + "1776576", + "1776846", + "1776978", + "1777243", + "1777868", + "1778073", + "1778695", + "1779682", + "1780139", + "1781683", + "1782524", + "1782607", + "1782659", + "1783394", + "1784356", + "1784809", + "1785281", + "1785873", + "1786886", + "1787107", + "1787522", + "1788411", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1793856", + "1794570", + "1795126", + "1795782", + "1796225", + "1796469", + "1796639", + "1797073", + "1798083", + "1798340", + "1798440", + "1798514", + "1798902", + "1799687", + "1799702", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808720", + "1808961", + "1809069", + "1810097", + "1812976", + "1814095", + "1815226", + "1819125", + "1819252", + "1819372", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827279", + "1827547", + "1827641", + "1828161", + "1828636", + "1830379", + "1830909", + "1831127", + "1831446", + "1831747", + "1832810", + "1835151", + "1836898", + "1839730", + "1841259", + "1841529", + "1843897", + "1845266", + "1846907", + "1850865", + "1852212", + "1854160", + "1856631", + "1857825", + "1858055", + "1861151", + "1861607", + "1862568", + "1862681", + "1863647", + "1864355", + "1864404", + "1870168", + "1870242", + "1871206", + "1871384", + "1872346", + "1872845", + "1873074", + "1873980", + "1874958", + "1875103", + "1875317", + "1875600", + "1875650", + "1875849", + "1876280", + "1876391", + "1876536", + "1878838", + "1879226", + "1879451", + "1879494", + "1879915", + "1881145", + "1881186", + "1881825", + "1882028", + "1883132", + "1884090", + "1884194", + "1884425", + "1884939", + "1886069", + "1886289", + "1886576", + "1887269", + "1888578", + "1888698", + "1889936", + "1890111", + "1890369", + "1891054", + "1891305", + "1891353", + "1939401", + "1951549", + "1951569", + "1951645", + "1952001", + "1952029", + "1952118", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956434", + "1956522", + "1956545", + "1957545", + "1957620", + "1957829", + "1958023", + "1959381", + "1959888", + "1960592", + "1960966", + "1962165", + "1962369", + "1962632", + "1962956", + "1962995", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965888", + "1965967", + "1966346", + "1966929", + "1967196", + "1967242", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970226", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975570", + "1975885", + "1976155", + "1976949", + "1978019", + "1978112", + "1978364", + "1978506", + "1978749", + "1978974", + "1979106", + "1979243", + "1979727", + "1980342", + "1980718", + "1982367", + "1984922", + "1985507", + "1985969", + "1986081", + "1987269", + "1987509", + "1987711", + "1988533", + "1988779", + "1988876", + "1989161", + "1989996", + "1990136", + "1990531", + "1991357", + "1991946", + "2278098", + "3255940", + "3256169", + "3256294", + "3256322", + "3256934", + "3256950", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301121", + "4301340", + "4302289", + "4404424", + "4405245", + "4405430", + "4406069", + "4406291", + "4406360", + "4406622", + "4407165", + "4407354", + "4408190", + "4524069", + "4525072", + "4533124", + "4533660", + "4534405", + "4534532", + "4687068", + "4689528", + "4706723", + "4709385", + "5105328", + "5114254", + "5115807", + "5116471", + "5123443", + "5144176", + "5146397", + "7236046", + "7384515", + "7396883", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "8875890", + "8921795", + "8936210", + "9065472", + "9078901", + "9095083", + "9108102", + "9118632", + "9146182", + "9181278", + "9183600", + "9210500" + ], + "class_count": 384, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 44504, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9578599395148406, + "precision": 0.7876914346408369, + "recall": 0.7626601078847843, + "f1": 0.67596735754951 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830379", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1972425", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 221, + "truth_images_in_retained_classes": 51350, + "accepted_predictions_in_retained_classes": 34216, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9716616552337888, + "precision": 0.9644034675161717, + "recall": 0.6868834008659555, + "f1": 0.7807696866753272 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 34160, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9754975181801082, + "precision": 0.96822735165948, + "recall": 0.6927141276824689, + "f1": 0.7874852435844385 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36422, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.970284104556389, + "precision": 0.9654305304648698, + "recall": 0.7349949980804276, + "f1": 0.8198300630906832 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35966, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9730526458225819, + "precision": 0.9696226974149172, + "recall": 0.7475533077376153, + "f1": 0.8310650157210921 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4407165", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 226, + "truth_images_in_retained_classes": 47997, + "accepted_predictions_in_retained_classes": 36257, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9708040563009604, + "precision": 0.9665082137972658, + "recall": 0.7310313579815346, + "f1": 0.8173152189160264 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 35808, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9738759173936625, + "precision": 0.9708203215753252, + "recall": 0.7439396812388471, + "f1": 0.8289781701827873 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 232, + "truth_images_in_retained_classes": 48047, + "accepted_predictions_in_retained_classes": 40448, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9740978260964577, + "precision": 0.9682301236825241, + "recall": 0.8146523892286389, + "f1": 0.8726172137759266 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 39827, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9754640055183043, + "precision": 0.9744657384691411, + "recall": 0.8284961369731623, + "f1": 0.8857838500606219 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1737701", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1744761", + "1746437", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1761017", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770274", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1789978", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827111", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879494", + "1879915", + "1881145", + "1881186", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1889936", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957620", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7396883", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 232, + "truth_images_in_retained_classes": 48047, + "accepted_predictions_in_retained_classes": 40445, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9742496201535418, + "precision": 0.9681807012728565, + "recall": 0.8146135864340426, + "f1": 0.8725791077003775 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "classes": [ + "12105049", + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1780139", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789246", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962632", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975542", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3257798", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5144176", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 215, + "truth_images_in_retained_classes": 46868, + "accepted_predictions_in_retained_classes": 39824, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.975627801896181, + "precision": 0.9744124082410346, + "recall": 0.8284542660506211, + "f1": 0.885742730946541 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7721234", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 197, + "truth_images_in_retained_classes": 50958, + "accepted_predictions_in_retained_classes": 34025, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9707426742420079, + "precision": 0.9676850759993277, + "recall": 0.7030299586868274, + "f1": 0.7949775034079533 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 33937, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9752941088049124, + "precision": 0.9772224666409167, + "recall": 0.7109088798148795, + "f1": 0.8054635075619051 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 203, + "truth_images_in_retained_classes": 47662, + "accepted_predictions_in_retained_classes": 36218, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9725044668174535, + "precision": 0.973428506176096, + "recall": 0.7475181869995279, + "f1": 0.8320199105759429 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35691, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9735479156470631, + "precision": 0.9733069820326449, + "recall": 0.7535836525103417, + "f1": 0.83644361028291 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 202, + "truth_images_in_retained_classes": 47651, + "accepted_predictions_in_retained_classes": 36048, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.973280111509321, + "precision": 0.9750664954245438, + "recall": 0.7440944617898129, + "f1": 0.8301947627142044 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 35536, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9741721892441434, + "precision": 0.9742219352236319, + "recall": 0.7503899701812965, + "f1": 0.834492264816495 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 213, + "truth_images_in_retained_classes": 47821, + "accepted_predictions_in_retained_classes": 40290, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9738984553007208, + "precision": 0.9728876041784816, + "recall": 0.8217613324322757, + "f1": 0.8806777740048471 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 39511, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9767219347209566, + "precision": 0.9780098953790074, + "recall": 0.8329662619360828, + "f1": 0.8901119825986873 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1737335", + "1737519", + "1738583", + "1739724", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1758873", + "1759029", + "1759152", + "1760088", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1778695", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1787522", + "1789545", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1796225", + "1796639", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826021", + "1826192", + "1827547", + "1828161", + "1828636", + "1830909", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1875650", + "1875849", + "1876280", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1951645", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959381", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967196", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301098", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 213, + "truth_images_in_retained_classes": 47821, + "accepted_predictions_in_retained_classes": 40287, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9740637896727561, + "precision": 0.9728337731970597, + "recall": 0.8217190683555322, + "f1": 0.8806362687957985 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 10, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1739724", + "1741338", + "1742419", + "1743516", + "1746749", + "1747242", + "1747949", + "1759152", + "1762232", + "1763597", + "1766123", + "1766265", + "1767590", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777243", + "1777868", + "1778073", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1791874", + "1792324", + "1792405", + "1794570", + "1795782", + "1796225", + "1797073", + "1798514", + "1798902", + "1799993", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1828636", + "1835151", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1876280", + "1878838", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1886289", + "1887269", + "1888698", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1960592", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1967722", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973405", + "1973909", + "1975292", + "1975885", + "1976155", + "1976949", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1987269", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991357", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405245", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9146182", + "9181278" + ], + "class_count": 192, + "truth_images_in_retained_classes": 46467, + "accepted_predictions_in_retained_classes": 39508, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9769053525399332, + "precision": 0.9779501766339919, + "recall": 0.8329193752259455, + "f1": 0.8900659377573991 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 156, + "truth_images_in_retained_classes": 45483, + "accepted_predictions_in_retained_classes": 33405, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9843358498587619, + "precision": 0.9748388332981802, + "recall": 0.7242019498914946, + "f1": 0.8169005762983504 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 33296, + "report_images": 52788, + "overall_coverage": 0.6981321512464954, + "metrics": { + "accuracy": 0.9839236353813609, + "precision": 0.9778465660712192, + "recall": 0.7242368310515996, + "f1": 0.8183922505182741 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35635, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.9810178296102066, + "precision": 0.9757921370967002, + "recall": 0.7571265698443955, + "f1": 0.8419323350469783 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 34996, + "report_images": 52788, + "overall_coverage": 0.7575395923315905, + "metrics": { + "accuracy": 0.983752937266044, + "precision": 0.9758140404693171, + "recall": 0.7677855297367047, + "f1": 0.8494275117330315 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 165, + "truth_images_in_retained_classes": 46690, + "accepted_predictions_in_retained_classes": 35481, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9817692866417445, + "precision": 0.9765223194080256, + "recall": 0.7541904615905834, + "f1": 0.8401795246684531 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 34847, + "report_images": 52788, + "overall_coverage": 0.7536561339698417, + "metrics": { + "accuracy": 0.9843822049121461, + "precision": 0.9763221583019224, + "recall": 0.7646492402112083, + "f1": 0.847449368620922 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 173, + "truth_images_in_retained_classes": 46980, + "accepted_predictions_in_retained_classes": 39700, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9828021400489438, + "precision": 0.9770325613675723, + "recall": 0.8323906948783845, + "f1": 0.8906387985645831 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 38714, + "report_images": 52788, + "overall_coverage": 0.8432030006819732, + "metrics": { + "accuracy": 0.9872680813408571, + "precision": 0.9795773240581996, + "recall": 0.847432505635241, + "f1": 0.9016662303355456 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1741338", + "1742061", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766123", + "1766265", + "1767644", + "1768222", + "1768411", + "1769098", + "1769504", + "1769819", + "1770396", + "1771501", + "1772155", + "1775910", + "1776168", + "1777868", + "1782659", + "1783394", + "1784809", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795126", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1810097", + "1812976", + "1815226", + "1819125", + "1819865", + "1820270", + "1822307", + "1822545", + "1822778", + "1823714", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1841259", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879226", + "1879915", + "1881145", + "1882028", + "1883132", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1951569", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970279", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406069", + "4406622", + "4408190", + "4525072", + "4533124", + "5105328", + "5115807", + "5146397", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "8494978", + "9078901", + "9146182", + "9181278" + ], + "class_count": 173, + "truth_images_in_retained_classes": 46980, + "accepted_predictions_in_retained_classes": 39697, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9827521780380808, + "precision": 0.976966283916457, + "recall": 0.8323386587607753, + "f1": 0.8905876967754076 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 20, + "domain": "common", + "classes": [ + "1732062", + "1732397", + "1733840", + "1734388", + "1734683", + "1738583", + "1742419", + "1743516", + "1746749", + "1747242", + "1759152", + "1763597", + "1766265", + "1767644", + "1768222", + "1769098", + "1769504", + "1769819", + "1771501", + "1772155", + "1775910", + "1776168", + "1782659", + "1783394", + "1785281", + "1785873", + "1789671", + "1791382", + "1792324", + "1792405", + "1794570", + "1795782", + "1797073", + "1798514", + "1800016", + "1801758", + "1802269", + "1802997", + "1803951", + "1804905", + "1807195", + "1808961", + "1809069", + "1812976", + "1815226", + "1819125", + "1820270", + "1822307", + "1822545", + "1822778", + "1825057", + "1825076", + "1825121", + "1825444", + "1825963", + "1826192", + "1827547", + "1828161", + "1845266", + "1862568", + "1863647", + "1864355", + "1864404", + "1872346", + "1873980", + "1874958", + "1875317", + "1878838", + "1879915", + "1881145", + "1882028", + "1884090", + "1884425", + "1884939", + "1887269", + "1890111", + "1890369", + "1891353", + "1951549", + "1952001", + "1952300", + "1952526", + "1952736", + "1952801", + "1954587", + "1955508", + "1955900", + "1956545", + "1957545", + "1957829", + "1959888", + "1962165", + "1962369", + "1962956", + "1963299", + "1963445", + "1964577", + "1964936", + "1965123", + "1965758", + "1965967", + "1966929", + "1968199", + "1968665", + "1968854", + "1970179", + "1970574", + "1972114", + "1973909", + "1975885", + "1976155", + "1978112", + "1978364", + "1978506", + "1978749", + "1979243", + "1980342", + "1980718", + "1982367", + "1985507", + "1986081", + "1988533", + "1988779", + "1988876", + "1989161", + "1990136", + "1991946", + "3256294", + "3256322", + "3257220", + "3257225", + "3257328", + "3257694", + "3261008", + "4301340", + "4404424", + "4405430", + "4406622", + "4525072", + "4533124", + "5105328", + "5115807", + "7384515", + "7739898", + "7852351", + "8107362", + "8249110", + "8331787", + "8379138", + "8407958", + "9146182", + "9181278" + ], + "class_count": 152, + "truth_images_in_retained_classes": 45330, + "accepted_predictions_in_retained_classes": 38711, + "report_images": 52788, + "overall_coverage": 0.843070394786694, + "metrics": { + "accuracy": 0.9872112166837566, + "precision": 0.9795018898539696, + "recall": 0.8473732803171727, + "f1": 0.9016080684307602 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "5336", + "5343", + "5345", + "5474", + "5481", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "8870", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 26, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 40881, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9963653352691595, + "precision": 0.841348645086206, + "recall": 0.6466603488658192, + "f1": 0.6545226053114057 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38566, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9932547854813464, + "precision": 0.74059226732527, + "recall": 0.6535073068400129, + "f1": 0.5807455159791289 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6166", + "6950", + "7015", + "7016", + "7294", + "8838", + "8840", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 30, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 38672, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9932599551447033, + "precision": 0.7406007419898425, + "recall": 0.6548532928566179, + "f1": 0.5815679236552637 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 27, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 43336, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9892254689058468, + "precision": 0.8402573230856973, + "recall": 0.7546408071160894, + "f1": 0.7073928412638565 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3553", + "3556", + "4300668", + "4527533", + "4532185", + "4542", + "4864", + "4870", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8861", + "8863", + "8868", + "8874", + "9412", + "9689", + "9717" + ], + "class_count": 27, + "truth_images_in_retained_classes": 52788, + "accepted_predictions_in_retained_classes": 43353, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9892268920132548, + "precision": 0.8402600553286454, + "recall": 0.7551948103314396, + "f1": 0.7076764729156301 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 40869, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9957914408379742, + "precision": 0.9859850593239553, + "recall": 0.6876576692748175, + "f1": 0.8020952610694091 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38530, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.99218975160998, + "precision": 0.9900267939876928, + "recall": 0.7040432580775865, + "f1": 0.816089411195116 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 38636, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9921957375359722, + "precision": 0.9900397290020405, + "recall": 0.7056726095713715, + "f1": 0.817387949631118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43325, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9875242271541385, + "precision": 0.9919310736962174, + "recall": 0.7961036491000434, + "f1": 0.8802424586381118 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 10, + "domain": "common", + "classes": [ + "3530", + "3552", + "3556", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8860", + "8863", + "8868", + "9689", + "9717" + ], + "class_count": 19, + "truth_images_in_retained_classes": 52770, + "accepted_predictions_in_retained_classes": 43342, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.987525874962716, + "precision": 0.9919348125549885, + "recall": 0.796774284571257, + "f1": 0.8806455141432638 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 40812, + "report_images": 52788, + "overall_coverage": 0.7744373721300295, + "metrics": { + "accuracy": 0.9946691583947672, + "precision": 0.9978777258613801, + "recall": 0.6871044763195309, + "f1": 0.8073961361904209 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635083 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38470, + "report_images": 52788, + "overall_coverage": 0.7305827081912556, + "metrics": { + "accuracy": 0.9967736853726413, + "precision": 0.99662653164367, + "recall": 0.6975420951522447, + "f1": 0.8137962822635083 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 38576, + "report_images": 52788, + "overall_coverage": 0.7325907403197697, + "metrics": { + "accuracy": 0.9967812675455647, + "precision": 0.9966429159951768, + "recall": 0.6996059403777053, + "f1": 0.8154410976157778 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 16, + "truth_images_in_retained_classes": 52710, + "accepted_predictions_in_retained_classes": 43281, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9982058530788728, + "precision": 0.9952258423219504, + "recall": 0.8011208511634444, + "f1": 0.8854714289339141 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 43259, + "report_images": 52788, + "overall_coverage": 0.8209441539743881, + "metrics": { + "accuracy": 0.9980862432841311, + "precision": 0.9979378681737169, + "recall": 0.7961955745743408, + "f1": 0.8836332923121171 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "per_model", + "classes": [ + "3530", + "3552", + "4300668", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 16, + "truth_images_in_retained_classes": 52710, + "accepted_predictions_in_retained_classes": 43298, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9982078098515587, + "precision": 0.995230282216741, + "recall": 0.8019172307855106, + "f1": 0.885950057346282 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 20, + "domain": "common", + "classes": [ + "3530", + "3552", + "4532185", + "5336", + "5343", + "5345", + "5474", + "6950", + "7015", + "7016", + "7294", + "8841", + "8863", + "8868", + "9717" + ], + "class_count": 15, + "truth_images_in_retained_classes": 52686, + "accepted_predictions_in_retained_classes": 43276, + "report_images": 52788, + "overall_coverage": 0.8212661968629233, + "metrics": { + "accuracy": 0.9980883305083292, + "precision": 0.9979426040614935, + "recall": 0.7970450461712113, + "f1": 0.8841438292853094 + } + } + ], + "tta": "rotation30_pad25_3" +} diff --git a/docs/assets/mambo-promoted-thresholds.json b/docs/assets/mambo-promoted-thresholds.json new file mode 100644 index 0000000..96cc63c --- /dev/null +++ b/docs/assets/mambo-promoted-thresholds.json @@ -0,0 +1,501 @@ +{ + "tta": "rotation30_pad25_3", + "source_sha256": "170381fd1da92ad5ebcb6ff3ee9935c1d7be042cbca08596bd1013f4f02f95f7", + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "models": { + "v2": { + "source": "local-evidence/mambo-release-comparison-quality/v2-full/north_europe/mini_metric.csv", + "source_sha256": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7484260499477386, + 0.8759860098361969, + 0.9553309082984924 + ], + "report_zero": { + "accuracy": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "precision": { + "0": 0.2795792585422393, + "1": 0.3234152967366764, + "2": 0.2610923881260793 + }, + "recall": { + "0": 0.6856229575537315, + "1": 0.7893807671430488, + "2": 0.8435038466784595 + }, + "f1": { + "0": 0.2619881841444525, + "1": 0.32128858585759745, + "2": 0.26968398140672784 + }, + "micro_accuracy": { + "0": 0.6871258619383193, + "1": 0.792225505796772, + "2": 0.9454610896415853 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8465208024160925, + "1": 0.9533632911945014, + "2": 0.9963653352691595 + }, + "precision": { + "0": 0.6381169943670084, + "1": 0.784792371905105, + "2": 0.841348645086206 + }, + "recall": { + "0": 0.5418132969389368, + "1": 0.6176629588211429, + "2": 0.6466603488658192 + }, + "f1": { + "0": 0.4466755276813756, + "1": 0.5868633065886133, + "2": 0.6545226053114057 + }, + "micro_accuracy": { + "0": 0.8340124966041836, + "1": 0.9258405014517136, + "2": 0.9986057092536875 + }, + "theilU": { + "0": 0.9268446802176634, + "1": 0.9293295014713818, + "2": 0.8669636504107465 + }, + "coverage": { + "0": 0.6973175721754944, + "1": 0.6981321512464954, + "2": 0.7744373721300295 + } + } + }, + "torch": { + "source": "local-evidence/mambo-accelerated-quality/torch-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8099595010280609, + 0.82109534740448, + 0.970800906419754 + ], + "report_zero": { + "accuracy": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "precision": { + "0": 0.2688723997356787, + "1": 0.3221313136590869, + "2": 0.2753352445359579 + }, + "recall": { + "0": 0.7135646156794592, + "1": 0.8053026558890463, + "2": 0.8104767092433202 + }, + "f1": { + "0": 0.2592869317361531, + "1": 0.32303518958457, + "2": 0.2804941988278224 + }, + "micro_accuracy": { + "0": 0.7077555505039024, + "1": 0.7939683261347276, + "2": 0.9298325376979617 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8669405316273155, + "1": 0.9547996220084877, + "2": 0.9932547854813464 + }, + "precision": { + "0": 0.7028135267405738, + "1": 0.745381822803767, + "2": 0.74059226732527 + }, + "recall": { + "0": 0.5774611074285403, + "1": 0.678410498949023, + "2": 0.6535073068400129 + }, + "f1": { + "0": 0.5081384528044555, + "1": 0.6019267109931725, + "2": 0.5807455159791292 + }, + "micro_accuracy": { + "0": 0.8338193199753886, + "1": 0.9077246242716747, + "2": 0.997951563553389 + }, + "theilU": { + "0": 0.9292211983468999, + "1": 0.9278616328176507, + "2": 0.8486962980431905 + }, + "coverage": { + "0": 0.7081344244904145, + "1": 0.7575395923315905, + "2": 0.7305827081912556 + } + } + }, + "onnx": { + "source": "local-evidence/mambo-accelerated-quality/onnx-cuda-0-prediction/north_europe/mini_metric.csv", + "source_sha256": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.8161613345146179, + 0.8301631808280945, + 0.9698503911495209 + ], + "report_zero": { + "accuracy": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "precision": { + "0": 0.2689411284200973, + "1": 0.32303901654923844, + "2": 0.2756918885388057 + }, + "recall": { + "0": 0.7133861511997317, + "1": 0.8053599793321786, + "2": 0.8106325437578626 + }, + "f1": { + "0": 0.25936240461341026, + "1": 0.32445203101159487, + "2": 0.2808879232365721 + }, + "micro_accuracy": { + "0": 0.7078123816018792, + "1": 0.793949382435402, + "2": 0.9300409183905433 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8695378035260483, + "1": 0.9551874761942367, + "2": 0.9932599551447033 + }, + "precision": { + "0": 0.7088741319668206, + "1": 0.7523387061411551, + "2": 0.7406007419898425 + }, + "recall": { + "0": 0.5752968296743217, + "1": 0.6745698413302063, + "2": 0.6548532928566179 + }, + "f1": { + "0": 0.5099648536812275, + "1": 0.6043210367725153, + "2": 0.5815679236552638 + }, + "micro_accuracy": { + "0": 0.8345029711489339, + "1": 0.908581339231852, + "2": 0.9979571783202317 + }, + "theilU": { + "0": 0.9291859354966914, + "1": 0.9278774326101347, + "2": 0.8489407553438706 + }, + "coverage": { + "0": 0.7045351216185497, + "1": 0.7536561339698417, + "2": 0.7325907403197697 + } + } + }, + "torch-tta": { + "source": "local-evidence/mambo-composed-full/torch/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "52ff1ecff46d20c955b51c17db9bc51b7c4c763741999573eb09bb566e1d75dc", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "report_zero": { + "accuracy": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "precision": { + "0": 0.3361085016262147, + "1": 0.3871858468468912, + "2": 0.3473357735776554 + }, + "recall": { + "0": 0.7493898333756177, + "1": 0.8472767012256567, + "2": 0.86366836103727 + }, + "f1": { + "0": 0.3201483357303684, + "1": 0.38731172619778687, + "2": 0.35919021330288153 + }, + "micro_accuracy": { + "0": 0.7508714101689778, + "1": 0.8324808668636812, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8633843418309688, + "1": 0.95774560113418, + "2": 0.9892254689058468 + }, + "precision": { + "0": 0.7190416496691577, + "1": 0.7891877764219916, + "2": 0.8402573230856973 + }, + "recall": { + "0": 0.6588299780195079, + "1": 0.7626880651777854, + "2": 0.7546408071160894 + }, + "f1": { + "0": 0.566106644915547, + "1": 0.6776129515770067, + "2": 0.7073928412638566 + }, + "micro_accuracy": { + "0": 0.8300772588287468, + "1": 0.9032149356338882, + "2": 0.9988231493446557 + }, + "theilU": { + "0": 0.9512236692214211, + "1": 0.9537143645936615, + "2": 0.9062358679592668 + }, + "coverage": { + "0": 0.8116049102068652, + "1": 0.8432030006819732, + "2": 0.8209441539743881 + } + } + }, + "onnx-tta": { + "source": "local-evidence/mambo-composed-full/onnx/rotation30_pad25_3/mini_metric.csv", + "source_sha256": "581928fd3578c35463770a036ff08e6035ee0276c3fac64673868a1ced542444", + "identities": { + "full": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", + "report": "80144bd4f34d9705bcae1dad496ccf13a7160b5709139b34710e5d75a3252fed", + "calibration": "07e2e6f88b36f3e9f348adaf4526ed62e8725eba4116780a0410bf5d18f5d3fd" + }, + "report_images": 52788, + "calibration_images": 5852, + "thresholds": [ + 0.7529366910457611, + 0.7956856787204742, + 0.9765951335430146 + ], + "native_threshold_alignment": { + "thresholds": [ + 0.7562050521373749, + 0.7952321171760559, + 0.9765909910202026 + ], + "scores": { + "accuracy": { + "0": 0.8633950623295443, + "1": 0.9577182088953489, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7190458657983405, + "1": 0.7876773050674551, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6587922723184866, + "1": 0.7627253495053744, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5660150187297233, + "1": 0.6759937887132027, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8299843636957689, + "1": 0.9032620416966212, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8117185724028189, + "1": 0.8432219443812988, + "2": 0.8212661968629233 + } + } + }, + "report_zero": { + "accuracy": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "precision": { + "0": 0.335607011455683, + "1": 0.38755157575495597, + "2": 0.34712795694828363 + }, + "recall": { + "0": 0.7493378530417095, + "1": 0.8472504239634208, + "2": 0.8636665098420966 + }, + "f1": { + "0": 0.31973098589694526, + "1": 0.38771743876773856, + "2": 0.35905067781483396 + }, + "micro_accuracy": { + "0": 0.7507577479730242, + "1": 0.8323861483670532, + "2": 0.9622830946427219 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.8635268756201978, + "1": 0.9578599395148406, + "2": 0.9892268920132548 + }, + "precision": { + "0": 0.7198655161183526, + "1": 0.7876914346408369, + "2": 0.8402600553286454 + }, + "recall": { + "0": 0.6615516920144863, + "1": 0.7626601078847843, + "2": 0.7551948103314396 + }, + "f1": { + "0": 0.5675578092246022, + "1": 0.6759673575495095, + "2": 0.7076764729156302 + }, + "micro_accuracy": { + "0": 0.8296529233636152, + "1": 0.9032895919467913, + "2": 0.9988236108227805 + }, + "theilU": { + "0": 0.9512268480417431, + "1": 0.9536588165415049, + "2": 0.9062460655947492 + }, + "coverage": { + "0": 0.8132530120481928, + "1": 0.843070394786694, + "2": 0.8212661968629233 + } + } + } + } +} diff --git a/docs/mambo-composed-tta.md b/docs/mambo-composed-tta.md index 6af68cb..6bbed9d 100644 --- a/docs/mambo-composed-tta.md +++ b/docs/mambo-composed-tta.md @@ -4,8 +4,9 @@ (three views).** The full Flemming comparison confirms the preliminary improvement over `padded_scale` on both native PyTorch and standard ONNX. The composed five-view recipe gives smaller additional species/genus gains, but is not consistently better -at family level. The release TTA default remains `padded_scale` pending integration -and standalone runtime qualification of the selected candidate. +at family level. The selected three-view recipe is now the enabled-TTA default; see the +[deployment README](../deployment/README.md) for the current five-pipeline comparison +and standalone runtime measurements. Explicit `padded_scale` retains the prior behavior. ## Findings @@ -197,4 +198,5 @@ All five retained baseline models reproduced their previous unthresholded and calibrated full-support metrics within 1e-12. The support >5 domain here intersects **all eleven pipelines**, so it need not equal the five-pipeline domain in earlier reports. Source hashes and exact reporting/calibration identities are checked -before evaluation. No core-module behavior or deployment defaults changed. +before evaluation. This study did not change core-module behavior. The subsequent deployment promotion +changes only the enabled-TTA preset, while TTA remains off by default. diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md index 54321bd..8c41d2a 100644 --- a/docs/mambo-confidence-thresholds.md +++ b/docs/mambo-confidence-thresholds.md @@ -1,5 +1,8 @@ # Confidence thresholds and the MAMBO comparison +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + Thresholding substantially changes the quality comparison, at the cost of rejecting images. These results use **legacy northern Europe** for V2, V3 PyTorch/ONNX and both V3 backends with padded-scale TTA. Deployment defaults remain threshold zero. diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 729d44c..1ed6d48 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -1,5 +1,8 @@ # MAMBO deployment defaults and release comparison +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + Ordinary inference stays single-view. Enabling TTA with `tta=True` or bare `--tta` selects **padded scale**: the original image plus views with 8% and 15% edge padding. Each view uses unchanged preprocessing; FP32 leaf logits are averaged before diff --git a/docs/mambo-frequency-comparison.md b/docs/mambo-frequency-comparison.md index 925bde5..e4afed4 100644 --- a/docs/mambo-frequency-comparison.md +++ b/docs/mambo-frequency-comparison.md @@ -1,5 +1,8 @@ # Accuracy versus class frequency +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + ![Macro accuracy by training and evaluation frequency](assets/mambo-frequency-accuracy.svg) These curves compare MAMBO v2 with the single-view automatic v3 PyTorch/ONNX paths on the same diff --git a/docs/mambo-tail-metrics.md b/docs/mambo-tail-metrics.md index 781c4ff..22f1996 100644 --- a/docs/mambo-tail-metrics.md +++ b/docs/mambo-tail-metrics.md @@ -1,5 +1,8 @@ # Tail-truncated release metrics +**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) +contains the current rotation-and-padding default comparison. + These supplementary metrics summarize classes with **more than 5, 10 or 20** truth instances **and accepted predictions**, at each taxonomic rank. Main results use the intersection of qualifying classes across all five pipelines, so each diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index 72505a7..3686d00 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -11,7 +11,9 @@ size or the selected class list. | Profile | Views | Spatial policy | |---|---:|---| | `none` | 1 | Ordinary single-view path; default | -| `padded_scale` | 3 | Original plus 8% / 15% edge padding; default when TTA is enabled | +| `rotation30_pad25_3` | 3 | Original plus ±30° rotations, each with 25% edge padding; default when TTA is enabled | +| `wide_rotation_mixed_padding_5` | 5 | Original, ±10° with 15% padding, ±30° with 25% padding | +| `padded_scale` | 3 | Original plus 8% / 15% edge padding; previous default, available explicitly | | `hflip` | 2 | Original and horizontal reflection | | `five_crop` | 5 | Original and four corner crops, each 90% of original height/width | | `ten_crop` | 10 | Five-crop views and their horizontal reflections | @@ -19,12 +21,17 @@ size or the selected class list. | `light_noise` | 3 | Original plus two independently seeded 1% salt-and-pepper views | Enable the recommended recipe with `Predictor(..., tta=True)` or bare `--tta`. -Both resolve to `padded_scale`, which is also available explicitly. Omitting TTA +Both resolve to `rotation30_pad25_3`, also available explicitly. Omitting TTA keeps single-view inference; `tta=False` and `--tta none` explicitly disable it. -The padded-scale policy was promoted from the exploratory candidates because it -had the highest subset macro accuracy and was faster than D4 or padded rotations. -It did not maximize every metric: padded rotations had higher subset macro-F1. -The public `EdgePad(fraction)` transform exposes the same source-preserving padding. +Expanded-canvas rotations preserve the source extent, fill corners with RGB +(124,116,104), then edge-pad each axis by 25% per side before ordinary preprocessing. +The full-data comparison supports this promotion on both backends. Explicit +`padded_scale` retains the former behavior. `RotatePad(degrees, padding)` and +`EdgePad(fraction)` expose these transforms for custom policies. + +**Historical study below:** exploratory measurements and earlier promotion notes +refer to padded-scale TTA unless explicitly stated. For current quality, thresholds +and speed, use the [deployment README](../deployment/README.md#release-comparison). `SaltAndPepper(proportion=0.01, seed=0)` is also available as a public transform. It uses one RGB-shared black/white pixel mask and an image-keyed seed, so built-in @@ -60,7 +67,7 @@ retrieval/clustering. The default single-view representation is unchanged. The [padding-and-rotation study](mambo-compact-tta.md) tests compositions within three and five views against the current default and earlier five-view wide rotation on flagged cases and a separate random sample. It identifies promising compositions at both three- and five-view budgets, -with confidence/coverage trade-offs. These remain experimental; `tta=True` still +with confidence/coverage trade-offs. At the time of that preliminary study these remained experimental; `tta=True` then selects the qualified padded-scale default. ## Qualification diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 1654677..ec8ddc5 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -293,7 +293,7 @@ def test_tta_views_apply_before_the_unchanged_recipe(): TTA([]) -@pytest.mark.parametrize(("tta", "views"), [("five_crop", 5), ("ten_crop", 10), ("d4", 8)]) +@pytest.mark.parametrize(("tta", "views"), [("five_crop", 5), ("ten_crop", 10), ("d4", 8), (True, 3), ("wide_rotation_mixed_padding_5", 5)]) def test_multicrop_tta_bounds_calls_and_shares_prediction_embedding_path(bundle, monkeypatch, tta, views): p = Predictor(bundle, tta=tta, batch_size=2, preprocess_workers=2) observed = [] @@ -373,7 +373,7 @@ def test_whole_image_candidates_preserve_source_and_prepare_deterministically(): np.testing.assert_array_equal(image, original) -@pytest.mark.parametrize("option", [True, "padded_scale"]) +@pytest.mark.parametrize("option", ["padded_scale"]) def test_enabled_tta_uses_qualified_padded_recipe(bundle, monkeypatch, option): from dev.releases.mambo_v3.tta_candidates import candidate_policy @@ -396,7 +396,7 @@ def runtime(images, embeddings): @pytest.mark.parametrize( - ("options", "recipe"), [([], None), (["--tta"], "padded_scale"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] + ("options", "recipe"), [([], None), (["--tta"], "rotation30_pad25_3"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] ) def test_cli_tta_optional_recipe(bundle, monkeypatch, options, recipe): from deployment.mambo_deploy import cli @@ -424,3 +424,31 @@ def test_composed_rotation_reproduces_existing_padded_rotation(degrees): original = image.copy() np.testing.assert_array_equal(rotate_pad(image, degrees, 0.08), rotate(image, degrees)) np.testing.assert_array_equal(image, original) + + +@pytest.mark.parametrize("recipe", ["rotation30_pad25_3", "wide_rotation_mixed_padding_5"]) +def test_promoted_tta_matches_full_evaluation_views(bundle, monkeypatch, recipe): + from deployment.mambo_deploy.augmentation import resolve_tta + from dev.releases.mambo_v3.compact_tta import policies + + views, _, recipes = policies() + source = np.random.default_rng(19).integers(0, 256, (3, 47, 83), dtype=np.uint8) + original = source.copy() + expected = [preprocess(views[key](source)) for key in recipes[recipe]] + for option in [True, recipe] if recipe == "rotation30_pad25_3" else [recipe]: + policy = resolve_tta(option) + for transform, key in zip(policy.transforms, recipes[recipe], strict=True): + np.testing.assert_array_equal(transform(source), views[key](source)) + predictor = Predictor(bundle, tta=option, preprocess_workers=1) + observed = [] + + def runtime(images, embeddings): + observed.append(images[0].copy()) + return np.ones((len(images), 3), np.float32), None + + monkeypatch.setattr(predictor, "_onnx", runtime) + result = predictor.predict(source) + np.testing.assert_array_equal(observed, expected) + assert result.metadata["tta"] == recipe + assert result.metadata["tta_views"] == len(expected) + np.testing.assert_array_equal(source, original) From 522c2f76f23dcd8f5f2b8e6203fbc1667250a4b7 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:11:29 +0200 Subject: [PATCH 050/221] docs: focus deployment guide on integration decisions --- deployment/README.md | 344 +++++++++++------------------- docs/mambo-deployment-evidence.md | 128 +++++++++++ 2 files changed, 258 insertions(+), 214 deletions(-) create mode 100644 docs/mambo-deployment-evidence.md diff --git a/deployment/README.md b/deployment/README.md index 62b09c4..6d3b4ea 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,14 +1,13 @@ # MAMBO deployment — release candidate -Use a local model bundle with native PyTorch or standard ONNX. Inference needs no -network, taxonomy service, administrator permissions or writable model directory. -The runtime is separate from the model files; keep each ONNX graph beside its -`model.onnx.data` file. This candidate has not been publicly released. +Run a local model bundle with ONNX or PyTorch, on CPU or NVIDIA CUDA. Inference +requires no network access or writable model directory. This candidate has not +been publicly released. Keep each ONNX graph beside its `model.onnx.data` file. ## Quick start -Install the supplied `mambo_deploy` wheel with the `onnx` extra for CPU inference. -For example, in a virtual environment: +Start with ONNX/CPU for the smallest installation: it needs no training package. +Install the supplied wheel in your environment, then reuse one predictor across calls. ```sh pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' @@ -18,211 +17,140 @@ pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' from mambo_deploy import Predictor predictor = Predictor(bundle="/path/to/mambo-bundle", backend="onnx", device="cpu", model="europe") -result = predictor.predict("moth.jpg") +result = predictor.predict(["moth.jpg"]) print(result[0].label) # species, genus, family IDs -print(result[0].confidence) # conditional probabilities for those ranks -result, embeddings = predictor.predict_with_embeddings(["moth.jpg"]) +print(result[0].confidence) # confidence at each rank ``` -Choose a preset using `model`, inspect `predictor.available_presets()`, or replace -it with `class_list=["GBIF_SPECIES_ID", ...]` (also accepts a UTF-8 filename). -Unknown IDs and empty lists are errors; duplicates are removed and model ordering -is preserved. Filtering happens before ranking and hierarchy normalization. -See PRESETS.md in the bundle for short geographic scopes and provisional cutoffs. -Use `europe_v3` or `north_europe_v3` for updated lists requiring at least 3 regional -and 25 global records. `europe` (the default) and `north_europe` retain their legacy -membership. The updated versions use the same explicit geographic filters. -Presets retain species with qualifying occurrence records; they are practical -prediction filters, not maps of native distributions or exhaustive checklists. - -Inputs are paths, PIL images, CHW/BCHW NumPy arrays or tensors. Arrays must be -uint8 or floats in [0,1]; transpose HWC arrays explicitly. Images are decoded RGB -without EXIF rotation, alpha is discarded, then the recorded campaign resize, -crop and normalization recipe is applied. Both backends use the same CPU image -preparation. `batch_size=8` bounds model batches; returned results remain in memory. - -## PyTorch and GPU - -For native inference, install the matching `mini_trainer` wheel with your chosen -PyTorch/CUDA build and use `backend="torch"`. The checkpoint is loaded with -`weights_only=True`; the architecture is constructed without pretrained downloads. -CUDA PyTorch defaults to FP16 backbone autocast with an FP32 classifier and -FP32 outputs. Set `precision="fp32"` to disable autocast, or -`precision="bf16"` on CUDA devices with native BF16 support. Native inference -respects the caller's PyTorch TF32 backend flags; reference benchmarks disable them. -For ONNX CUDA, install `onnxruntime-gpu` instead of the CPU ONNX Runtime package, -with its matching CUDA/cuDNN dependencies. Select `device="cuda:0"` explicitly. -Unavailable CUDA raises an error rather than silently changing to CPU-only -execution. ONNX CUDA may still place individual unsupported operators on CPU. Its automatic -precision enables TF32 using the standard FP32 graph; `precision="fp32"` disables -TF32. ONNX FP16/BF16 is not selected by PyTorch autocast. CPU always uses FP32. -The resolved choice is available as `predictor.effective_precision` and in result -metadata; the CLI exposes the same `--precision` option. - -Portable results use NumPy arrays; embeddings are float32 `[images, 1280]` CPU -arrays from the normalized preclassification stage. Prediction-only ONNX uses -the original graph; requesting embeddings selects the existing embedding graph. -Without TTA, each image uses one backbone pass. `topk` ranks each hierarchy level independently; -a tuple is not necessarily an ancestral path. `indices` refer to the filtered -rank vocabulary; `global_indices` refer to the full model vocabulary. - -## Existing MAMBO callers - -The matching training wheel restores `mini_trainer.deploy.Predictor`, with native -PyTorch and CUDA defaults, Europe as the default preset, callable/predict methods, -`class_mask` (including `-1` reset) and `(predictions, embeddings)` output. Install -the deployment wheel too and set `MAMBO_BUNDLE`, or pass `bundle=` explicitly. -Native compatibility results use the existing hierarchical prediction container -and device tensors. The portable API defaults to ONNX/CPU; choose it for new code. - -Migration limits: inference no longer implicitly downloads a model; pass a local -bundle. Local `weights=` overrides must match this release checkpoint; arbitrary -legacy BioCLIP weights/state dictionaries are not supported by this release adapter. -Legacy pins remain the way to run those models. Embedding dimensions change with -the backbone. Legacy top-k serialization defects are not a portable API guarantee. -New portable preprocessing always applies the documented recipe to array inputs; -old callers that supplied already-resized or preprocessed tensors should review it. - -## Command line +For ONNX/CUDA, install `onnxruntime-gpu` instead of `onnxruntime`, with matching +CUDA/cuDNN libraries, and select `device="cuda:0"`. For PyTorch, install the matching +`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend="torch"` and +an explicit device. Requested but unavailable CUDA raises an error; individual +ONNX operators may still execute on CPU. CPU and CUDA are the supported device +choices; other OS/accelerator combinations remain unqualified. + +## Choose the configuration that matters + +| Setting | Starting point | When to change it | +|---|---|---| +| `model` / `class_list` | Set the region explicitly; default is `europe` | Match your sampling location. Use `full` when geography is unknown, or a custom list for your project's eligible species. This changes predictions and confidence. | +| `backend`, `device` | ONNX/CPU for portable integration | Use CUDA for throughput. On this laptop, ONNX was faster on CPU; PyTorch scaled better at GPU batch 32. Choose by dependencies and measurements on your hardware. | +| `tta` | Off | Enable `tta=True` when improved quality justifies three model passes. Keep the recommended recipe unless you validate an alternative on your own data. | +| `batch_size` | `8` | For GPU bulk processing, try 8 then 32; reduce for memory limits or interactive requests. Larger batches do not guarantee higher throughput. | +| `threads`, `preprocess_workers` | `threads=2`; preparation workers follow it | Tune under the real application's CPU budget. Preparation workers handle decoding/transforms; `threads` also controls ONNX runtime threads, but does **not** set PyTorch model threads. Avoid multiplying workers across competing processes. | +| `precision` | `"auto"` | Usually leave it alone. Use `"fp32"` to investigate runtime/numerical issues. BF16 is a native CUDA option requiring hardware support, not an established improvement over the default. | +| Embeddings / `topk` | Predictions only; `topk=1` | Request embeddings for similarity/search or downstream features; request more candidates with `predict(images, topk=k)`. Neither improves the classifier itself. | + +`precision="auto"` means FP32 on CPU, FP16 backbone with FP32 head for native +CUDA, and TF32 execution of the standard floating ONNX graph on CUDA. It does not +select quantized weights or an FP16 ONNX export. Results record the resolved +precision, preset, class-list hash and TTA recipe; retain these with the bundle +version when comparing runs. + +### Geographic scope + +Use `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list; +the [preset catalogue](../docs/model-presets.md) documents exact scope and construction. +Presets cover species that **can occur** in a region, including introduced species; +they are neither native-distribution maps nor exhaustive checklists. + +`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated +occurrence requirements and broader eligibility; newer does not necessarily mean +more accurate. Legacy `north_europe` performed better on Flemming. Choose it for +comparable northern-European use, not as a universal default for other locations. +A custom `class_list=["GBIF_SPECIES_ID", ...]` or UTF-8 list file overrides the preset. +Unknown IDs and empty lists fail; duplicates are removed and model ordering retained. + +### Optional test-time augmentation + +`tta=True` or bare `--tta` selects `rotation30_pad25_3`: original, −30° and +30° +views, with 25% edge padding on each rotated view. Rotation expands the canvas; +ordinary model preprocessing follows. Pin that name explicitly for reproducibility. +TTA remains off when omitted. `padded_scale` preserves the previous recipe; +`wide_rotation_mixed_padding_5` is an optional higher-cost alternative with no +consistent family-level advantage. See the [TTA reference](../docs/mambo-tta.md) +for custom transforms and aggregation details. + +## Inputs, outputs and acceptance + +Supply paths, PIL images, or CHW/BCHW arrays/tensors: uint8, or floats in [0,1]. +Transpose HWC arrays explicitly. Supply original pixels, **not normalized model +inputs**. The runtime converts to RGB, discards alpha and ignores EXIF orientation; +apply any required orientation correction before passing a PIL image or array. +Keep the supplied preprocessing recipe unchanged. + +Results are on CPU. `label` contains taxon IDs in species/genus/family order; +`topk` ranks each level independently, so a returned tuple need not be an ancestral +path. `indices` refer to the filtered vocabulary; `global_indices` to the full one. +`predict_with_embeddings(images)` returns `(result, vectors)`, with float32 +`[N,1280]` unit-length vectors; the ONNX bundle must include the embedding graph. +With TTA, embeddings are the normalized mean across views. + +`batch_size` bounds model calls, **not total request memory**: outputs and logits +accumulate for the whole request. Submit large collections in bounded chunks. +Calls on one predictor are serialized; increasing caller threads alone will not +parallelize its inference. + +Confidence is conditional on the selected vocabulary, not a guarantee of correctness. +If your workflow can reject uncertain predictions, choose thresholds on representative +labelled data and report acceptance coverage alongside quality. Recalibrate when +changing the preset, TTA or pipeline. The study thresholds below are not universal +production defaults. In Python, apply your acceptance rule to `result.confidence`. +CLI `--threshold` defaults to zero and marks acceptance in `mini_metric.csv`; it +uses one scalar for all ranks and does not remove predictions from JSON output. + +## Command line and migration ```sh -mambo_predict -i moth.jpg --bundle /path/to/mambo-bundle --backend onnx --device cpu -M europe -o . --name results +mambo_predict -i moth.jpg --bundle /path/to/mambo-bundle --backend onnx --device cpu -M europe --tta -o . --name results ``` -Directory input recursively discovers images in sorted order. Outputs are -`predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. -Use `--class-list`, `--batch-size`, `--topk` and `--threads` as needed. `--threads` -bounds parallel image preparation and controls ONNX CPU threads; native callers -configure PyTorch model threads separately. Use `--preprocess-workers 1` for serial preparation. The standalone -wheel defaults to ONNX/CPU; the training-wheel entry point retains native/CUDA -defaults, so explicit backend/device arguments are recommended in scripts. +Outputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and +`embeddings.npy` when `--embeddings` is requested. Directory input is recursive. +The main controls above have corresponding CLI flags; use `mambo_predict --help`. -## Optional test-time augmentation - -TTA is off by default. Simply enable it to use the recommended recipe: - -```python -predictor = Predictor(bundle, backend="onnx", model="north_europe", tta=True) -# CLI: append --tta -``` - -This selects `rotation30_pad25_3`: the original image plus −30° and +30° rotations, -each followed by 25% edge padding on each side. Rotation expands the canvas to -retain the image extent; ordinary preprocessing follows. This three-view recipe -improved all three ranks over the previous recipe, including at matched coverage. -Pin it with `tta="rotation30_pad25_3"`; `tta=False` or `--tta none` disables TTA. -The previous `padded_scale` remains available explicitly. The optional -`wide_rotation_mixed_padding_5` adds ±10° views with 15% padding: modest additional -species/genus gains, but no consistent family advantage. Result metadata records -the resolved recipe and view count. - -Views use ordinary preprocessing and the chosen backend. Species logits are -averaged before preset filtering and hierarchy reduction; embeddings are the -normalized mean of view embeddings. Each model call stays within `batch_size`. -The [TTA guide](../docs/mambo-tta.md) documents costs, explicit alternative recipes -and custom image transforms through the same outer interface. +Existing callers can use `mini_trainer.deploy.Predictor` with both wheels installed. +It preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets +it), with native result containers/device tensors. The portable API above defaults +to ONNX/CPU. Pass `bundle=` or set `MAMBO_BUNDLE`; downloads are no longer implicit. +Do not use `weights=` as a model-selection control: overrides must match the pinned +release checkpoint. Legacy weights and already-preprocessed inputs need migration; +embedding dimensions may differ from V2. ## Release comparison -Results use the **same 52,788 Flemming reporting images** for both confidence -settings, including out-of-vocabulary truth. Calibrated thresholds were fitted on -5,852 separate images using pinned `mini_metrics` Macro-F1, independently for each -pipeline and rank. No-threshold results use threshold zero. All comparisons use -the shared legacy `north_europe` preset; TTA uses `rotation30_pad25_3`. -V3 uses automatic GPU precision. Deployment defaults remain threshold zero. - -In each metric cell, values are **full support / support >5**. Full support retains -each model’s complete class domain, including predicted-only classes. Support >5 -retains classes with more than five truth instances and **accepted predictions in -every pipeline**, separately for each confidence setting. These class sets can differ -between settings; truncation is a change in averaging domain, not improved predictions. -Coverage is the percentage of reporting images accepted, and is identical for both -averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact. - -### Species - -| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | -|---|---|---:|---:|---:| -| MAMBO v2 | None | 68.56% / 79.01% | 0.2620 / 0.7836 | 100.00% | -| MAMBO v2 | Calibrated | 84.65% / 95.23% | 0.4467 / 0.7800 | 69.73% | -| V3 PyTorch | None | 71.36% / 81.59% | 0.2593 / 0.8066 | 100.00% | -| V3 PyTorch | Calibrated | 86.69% / 96.36% | 0.5081 / 0.8016 | 70.81% | -| V3 ONNX | None | 71.34% / 81.64% | 0.2594 / 0.8068 | 100.00% | -| V3 ONNX | Calibrated | 86.95% / 96.44% | 0.5100 / 0.8001 | 70.45% | -| V3 PyTorch + TTA | None | 74.94% / 86.53% | 0.3201 / 0.8574 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 86.34% / 96.39% | 0.5661 / 0.8619 | 81.16% | -| V3 ONNX + TTA | None | 74.93% / 86.55% | 0.3197 / 0.8575 | 100.00% | -| V3 ONNX + TTA | Calibrated | 86.35% / 96.37% | 0.5676 / 0.8627 | 81.33% | - -### Genus - -| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | -|---|---|---:|---:|---:| -| MAMBO v2 | None | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | -| MAMBO v2 | Calibrated | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | -| V3 PyTorch | None | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | -| V3 PyTorch | Calibrated | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | -| V3 ONNX | None | 80.54% / 83.84% | 0.3245 / 0.8055 | 100.00% | -| V3 ONNX | Calibrated | 95.52% / 97.39% | 0.6043 / 0.8290 | 75.37% | -| V3 PyTorch + TTA | None | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | -| V3 ONNX + TTA | None | 84.73% / 88.12% | 0.3877 / 0.8549 | 100.00% | -| V3 ONNX + TTA | Calibrated | 95.79% / 97.56% | 0.6760 / 0.8857 | 84.31% | - -### Family - -| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | -|---|---|---:|---:|---:| -| MAMBO v2 | None | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | -| MAMBO v2 | Calibrated | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | -| V3 PyTorch | None | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | -| V3 PyTorch | Calibrated | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | -| V3 ONNX | None | 81.06% / 85.72% | 0.2809 / 0.7843 | 100.00% | -| V3 ONNX | Calibrated | 99.33% / 99.22% | 0.5816 / 0.8174 | 73.26% | -| V3 PyTorch + TTA | None | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | -| V3 PyTorch + TTA | Calibrated | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | -| V3 ONNX + TTA | None | 86.37% / 89.32% | 0.3591 / 0.8502 | 100.00% | -| V3 ONNX + TTA | Calibrated | 98.92% / 98.75% | 0.7077 / 0.8806 | 82.13% | - -### Support retained and comparison figure - -Counts below describe truth classes outside the truncated average, not rejected images. -The prediction range counts accepted predictions into excluded classes, divided by all -52,788 reporting images. Truth and prediction counts must not be added. - -| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) | -|---|---|---:|---:|---:| -| None | Species | 311 | 8,079 / 15.30% | 11,060–13,504 / 20.95%–25.58% | -| None | Genus | 242 | 221 / 0.42% | 6,814–8,015 / 12.91%–15.18% | -| None | Family | 20 | 5 / 0.01% | 385–897 / 0.73%–1.70% | -| Calibrated | Species | 273 | 10,001 / 18.95% | 5,780–7,678 / 10.95%–14.54% | -| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,684 / 5.10%–8.87% | -| Calibrated | Family | 19 | 18 / 0.03% | 11–36 / 0.02%–0.07% | - -![Both confidence settings, full and truncated macro metrics, and coverage](../docs/assets/mambo-promoted-quality.svg) - -The [metric export](../docs/assets/mambo-promoted-tail.csv) retains macro precision, -recall and support cutoffs −1/5/10/20; the [JSON](../docs/assets/mambo-promoted-tail.json) -records exact class sets. The [threshold evidence](../docs/assets/mambo-promoted-thresholds.json) -contains per-rank calibrated thresholds, all full-support metrics and prediction hashes. -These are optional study operating points, not automatic deployment thresholds; -the CLI's `--threshold` applies one scalar to all ranks. The -[recipe comparison](../docs/mambo-composed-tta.md) shows the prior and new recipes -at matched coverage. Thresholding and truncation can change rankings; neither -should be confused with an improvement in underlying predictions. - -Regional filtering improves results on Flemming. The [single regional-effect figure](../docs/mambo-deployment-defaults.md#regional-filtering-effect) -summarizes global → Europe → northern Europe across pipelines and ranks using -the earlier padded-scale TTA; the new recipe has been fully evaluated only for northern Europe. -We recommend legacy `north_europe` here: the updated list adds 222 species but -no Flemming species coverage, and lowers measured accuracy/F1. It remains available -as `north_europe_v3` for broader eligibility; the API default stays `europe`. - -Speed remains **images per second**, measured end to end on an i7-12800H / RTX -3080 Ti Laptop, with four preparation/runtime CPU threads. CPU uses FP32. -New TTA timings use three fresh processes per backend/device, -with seven observations per cell. V2 and single-view V3 reuse the same earlier -image-bank measurements; laptop conditions can vary between campaigns. +These results help choose TTA and runtime; they do not establish accuracy in every +region. All models use legacy northern Europe on the same 52,788 Flemming reporting +images, including out-of-vocabulary truth. `mini_metrics` selects calibrated +thresholds per pipeline/rank on 5,852 separate images. Recipe exploration used +Flemming too, so this is descriptive evidence, not independent validation. + +The compact table shows **macro-F1 for common classes with support >5 in truth and +accepted predictions**. Coverage is over all reporting images. The averaging domain +excludes truth classes accounting for 15.30% / 0.42% / 0.01% of images at +species/genus/family without thresholds, and 18.95% / 11.21% / 0.03% after calibration. +No evaluation rows are discarded; the class sets differ between confidence settings. + +| Pipeline | Confidence | Species F1 | Genus F1 | Family F1 | Coverage: species / genus / family | +|---|---|---:|---:|---:|---:| +| V2 | None | 0.784 | 0.794 | 0.824 | 100% / 100% / 100% | +| V2 | Calibrated | 0.780 | 0.787 | 0.802 | 69.7% / 69.8% / 77.4% | +| V3 PyTorch | None | 0.807 | 0.806 | 0.783 | 100% / 100% / 100% | +| V3 PyTorch | Calibrated | 0.802 | 0.831 | 0.816 | 70.8% / 75.8% / 73.1% | +| V3 ONNX | None | 0.807 | 0.806 | 0.784 | 100% / 100% / 100% | +| V3 ONNX | Calibrated | 0.800 | 0.829 | 0.817 | 70.5% / 75.4% / 73.3% | +| V3 PyTorch + TTA | None | 0.857 | 0.855 | 0.851 | 100% / 100% / 100% | +| V3 PyTorch + TTA | Calibrated | 0.862 | 0.886 | 0.880 | 81.2% / 84.3% / 82.1% | +| V3 ONNX + TTA | None | 0.857 | 0.855 | 0.850 | 100% / 100% / 100% | +| V3 ONNX + TTA | Calibrated | 0.863 | 0.886 | 0.881 | 81.3% / 84.3% / 82.1% | + +Full-support metrics can give different rankings, especially for rare or predicted-only +families. The [complete comparison and quality figure](../docs/mambo-deployment-evidence.md) +retain both support domains, macro accuracy/precision/recall/F1, coverage and exact thresholds. + +Measured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with +four preparation/runtime threads. V3 uses automatic precision; compare on your own +hardware before choosing a batch size. V2 and single-view V3 reuse earlier runs. | Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | |---|---:|---:|---:|---:| @@ -232,17 +160,5 @@ image-bank measurements; laptop conditions can vary between campaigns. | V3 PyTorch + TTA | 2.04 | 10.10 | 41.74 | 50.89 | | V3 ONNX + TTA | 3.39 | 16.50 | 39.40 | 38.27 | -![CPU and GPU throughput](../docs/assets/mambo-promoted-speed.svg) - -The [timing evidence](../docs/assets/mambo-promoted-speed.json) retains trial ranges -and process-memory measurements. The [earlier comparison](../docs/mambo-deployment-defaults.md) -and [frequency curves](../docs/mambo-frequency-comparison.md) use the previous -padded-scale TTA and remain historical evidence, not measurements of the new recipe. -The [loading study](../docs/mambo-loading-scaling.md) explains scheduling limits; -`preprocess_workers` / `--preprocess-workers` tunes preparation separately from -ONNX runtime `threads` and defaults to it. - -Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. -Recipe exploration used this Flemming dataset, so these results are descriptive, -not independent validation. In-domain UCloud evaluation, other operating systems, -and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). +The [evidence reference](../docs/mambo-deployment-evidence.md) includes timing ranges, +plots and limitations. In-domain UCloud evaluation remains outstanding. diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md new file mode 100644 index 0000000..9b073b7 --- /dev/null +++ b/docs/mambo-deployment-evidence.md @@ -0,0 +1,128 @@ +# Deployment comparison evidence + +Complete results supporting the [integration guide](../deployment/README.md). +This reference retains both confidence settings, full and truncated support, +all three ranks, coverage, timing ranges and historical-study boundaries. + +Results use the **same 52,788 Flemming reporting images** for both confidence +settings, including out-of-vocabulary truth. Calibrated thresholds were fitted on +5,852 separate images using pinned `mini_metrics` Macro-F1, independently for each +pipeline and rank. No-threshold results use threshold zero. All comparisons use +the shared legacy `north_europe` preset; TTA uses `rotation30_pad25_3`. +V3 uses automatic GPU precision. Deployment defaults remain threshold zero. + +In each metric cell, values are **full support / support >5**. Full support retains +each model’s complete class domain, including predicted-only classes. Support >5 +retains classes with more than five truth instances and **accepted predictions in +every pipeline**, separately for each confidence setting. These class sets can differ +between settings; truncation is a change in averaging domain, not improved predictions. +Coverage is the percentage of reporting images accepted, and is identical for both +averaging domains. No evaluation rows are dropped; per-class FP/FN remain intact. + +### Species + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 68.56% / 79.01% | 0.2620 / 0.7836 | 100.00% | +| MAMBO v2 | Calibrated | 84.65% / 95.23% | 0.4467 / 0.7800 | 69.73% | +| V3 PyTorch | None | 71.36% / 81.59% | 0.2593 / 0.8066 | 100.00% | +| V3 PyTorch | Calibrated | 86.69% / 96.36% | 0.5081 / 0.8016 | 70.81% | +| V3 ONNX | None | 71.34% / 81.64% | 0.2594 / 0.8068 | 100.00% | +| V3 ONNX | Calibrated | 86.95% / 96.44% | 0.5100 / 0.8001 | 70.45% | +| V3 PyTorch + TTA | None | 74.94% / 86.53% | 0.3201 / 0.8574 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 86.34% / 96.39% | 0.5661 / 0.8619 | 81.16% | +| V3 ONNX + TTA | None | 74.93% / 86.55% | 0.3197 / 0.8575 | 100.00% | +| V3 ONNX + TTA | Calibrated | 86.35% / 96.37% | 0.5676 / 0.8627 | 81.33% | + +### Genus + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | +| MAMBO v2 | Calibrated | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | +| V3 PyTorch | None | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | +| V3 PyTorch | Calibrated | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | +| V3 ONNX | None | 80.54% / 83.84% | 0.3245 / 0.8055 | 100.00% | +| V3 ONNX | Calibrated | 95.52% / 97.39% | 0.6043 / 0.8290 | 75.37% | +| V3 PyTorch + TTA | None | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | +| V3 ONNX + TTA | None | 84.73% / 88.12% | 0.3877 / 0.8549 | 100.00% | +| V3 ONNX + TTA | Calibrated | 95.79% / 97.56% | 0.6760 / 0.8857 | 84.31% | + +### Family + +| Pipeline | Confidence | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:| +| MAMBO v2 | None | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | +| MAMBO v2 | Calibrated | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | +| V3 PyTorch | None | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | +| V3 PyTorch | Calibrated | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | +| V3 ONNX | None | 81.06% / 85.72% | 0.2809 / 0.7843 | 100.00% | +| V3 ONNX | Calibrated | 99.33% / 99.22% | 0.5816 / 0.8174 | 73.26% | +| V3 PyTorch + TTA | None | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | +| V3 ONNX + TTA | None | 86.37% / 89.32% | 0.3591 / 0.8502 | 100.00% | +| V3 ONNX + TTA | Calibrated | 98.92% / 98.75% | 0.7077 / 0.8806 | 82.13% | + +### Support retained and comparison figure + +Counts below describe truth classes outside the truncated average, not rejected images. +The prediction range counts accepted predictions into excluded classes, divided by all +52,788 reporting images. Truth and prediction counts must not be added. + +| Confidence | Rank | Shared classes | Truth outside: images / % | Accepted predictions outside: images / % (pipeline range) | +|---|---|---:|---:|---:| +| None | Species | 311 | 8,079 / 15.30% | 11,060–13,504 / 20.95%–25.58% | +| None | Genus | 242 | 221 / 0.42% | 6,814–8,015 / 12.91%–15.18% | +| None | Family | 20 | 5 / 0.01% | 385–897 / 0.73%–1.70% | +| Calibrated | Species | 273 | 10,001 / 18.95% | 5,780–7,678 / 10.95%–14.54% | +| Calibrated | Genus | 215 | 5,920 / 11.21% | 2,693–4,684 / 5.10%–8.87% | +| Calibrated | Family | 19 | 18 / 0.03% | 11–36 / 0.02%–0.07% | + +![Both confidence settings, full and truncated macro metrics, and coverage](assets/mambo-promoted-quality.svg) + +The [metric export](assets/mambo-promoted-tail.csv) retains macro precision, +recall and support cutoffs −1/5/10/20; the [JSON](assets/mambo-promoted-tail.json) +records exact class sets. The [threshold evidence](assets/mambo-promoted-thresholds.json) +contains per-rank calibrated thresholds, all full-support metrics and prediction hashes. +These are optional study operating points, not automatic deployment thresholds; +the CLI's `--threshold` applies one scalar to all ranks. The +[recipe comparison](mambo-composed-tta.md) shows the prior and new recipes +at matched coverage. Thresholding and truncation can change rankings; neither +should be confused with an improvement in underlying predictions. + +Regional filtering improves results on Flemming. The [single regional-effect figure](mambo-deployment-defaults.md#regional-filtering-effect) +summarizes global → Europe → northern Europe across pipelines and ranks using +the earlier padded-scale TTA; the new recipe has been fully evaluated only for northern Europe. +We recommend legacy `north_europe` here: the updated list adds 222 species but +no Flemming species coverage, and lowers measured accuracy/F1. It remains available +as `north_europe_v3` for broader eligibility; the API default stays `europe`. + +Speed remains **images per second**, measured end to end on an i7-12800H / RTX +3080 Ti Laptop, with four preparation/runtime CPU threads. CPU uses FP32. +New TTA timings use three fresh processes per backend/device, +with seven observations per cell. V2 and single-view V3 reuse the same earlier +image-bank measurements; laptop conditions can vary between campaigns. + +| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | +|---|---:|---:|---:|---:| +| MAMBO v2 | 1.26 | 45.19 | 44.85 | 83.49 | +| V3 PyTorch | 5.70 | 29.84 | 126.73 | 136.24 | +| V3 ONNX | 10.08 | 46.71 | 114.11 | 111.27 | +| V3 PyTorch + TTA | 2.04 | 10.10 | 41.74 | 50.89 | +| V3 ONNX + TTA | 3.39 | 16.50 | 39.40 | 38.27 | + +![CPU and GPU throughput](assets/mambo-promoted-speed.svg) + +The [timing evidence](assets/mambo-promoted-speed.json) retains trial ranges +and process-memory measurements. The [earlier comparison](mambo-deployment-defaults.md) +and [frequency curves](mambo-frequency-comparison.md) use the previous +padded-scale TTA and remain historical evidence, not measurements of the new recipe. +The [loading study](mambo-loading-scaling.md) explains scheduling limits; +`preprocess_workers` / `--preprocess-workers` tunes preparation separately from +ONNX runtime `threads` and defaults to it. + +Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. +Recipe exploration used this Flemming dataset, so these results are descriptive, +not independent validation. In-domain UCloud evaluation, other operating systems, +and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). From 0f9d0bb983acd5a77a598aaae52b76462e8d41af Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:13:48 +0200 Subject: [PATCH 051/221] docs: restore deployment quality and throughput figures --- deployment/README.md | 51 +++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 6d3b4ea..d330281 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -125,40 +125,29 @@ images, including out-of-vocabulary truth. `mini_metrics` selects calibrated thresholds per pipeline/rank on 5,852 separate images. Recipe exploration used Flemming too, so this is descriptive evidence, not independent validation. -The compact table shows **macro-F1 for common classes with support >5 in truth and -accepted predictions**. Coverage is over all reporting images. The averaging domain -excludes truth classes accounting for 15.30% / 0.42% / 0.01% of images at -species/genus/family without thresholds, and 18.95% / 11.21% / 0.03% after calibration. -No evaluation rows are discarded; the class sets differ between confidence settings. - -| Pipeline | Confidence | Species F1 | Genus F1 | Family F1 | Coverage: species / genus / family | -|---|---|---:|---:|---:|---:| -| V2 | None | 0.784 | 0.794 | 0.824 | 100% / 100% / 100% | -| V2 | Calibrated | 0.780 | 0.787 | 0.802 | 69.7% / 69.8% / 77.4% | -| V3 PyTorch | None | 0.807 | 0.806 | 0.783 | 100% / 100% / 100% | -| V3 PyTorch | Calibrated | 0.802 | 0.831 | 0.816 | 70.8% / 75.8% / 73.1% | -| V3 ONNX | None | 0.807 | 0.806 | 0.784 | 100% / 100% / 100% | -| V3 ONNX | Calibrated | 0.800 | 0.829 | 0.817 | 70.5% / 75.4% / 73.3% | -| V3 PyTorch + TTA | None | 0.857 | 0.855 | 0.851 | 100% / 100% / 100% | -| V3 PyTorch + TTA | Calibrated | 0.862 | 0.886 | 0.880 | 81.2% / 84.3% / 82.1% | -| V3 ONNX + TTA | None | 0.857 | 0.855 | 0.850 | 100% / 100% / 100% | -| V3 ONNX + TTA | Calibrated | 0.863 | 0.886 | 0.881 | 81.3% / 84.3% / 82.1% | - -Full-support metrics can give different rankings, especially for rare or predicted-only -families. The [complete comparison and quality figure](../docs/mambo-deployment-evidence.md) -retain both support domains, macro accuracy/precision/recall/F1, coverage and exact thresholds. +The quality figure compares **unthresholded and calibrated predictions**, with +full-support and support >5 macro metrics alongside acceptance coverage. TTA uses +`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below. + +![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg) + +Support >5 requires more than five truth instances and accepted predictions in +every compared pipeline. Truth classes outside that average account for +15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds, +and 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded; +the averaging class sets differ between confidence settings. Full-support metrics +retain rare and predicted-only classes, which can change model rankings. Measured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with four preparation/runtime threads. V3 uses automatic precision; compare on your own hardware before choosing a batch size. V2 and single-view V3 reuse earlier runs. -| Pipeline | CPU B1 | GPU B1 | GPU B8 | GPU B32 | -|---|---:|---:|---:|---:| -| MAMBO v2 | 1.26 | 45.19 | 44.85 | 83.49 | -| V3 PyTorch | 5.70 | 29.84 | 126.73 | 136.24 | -| V3 ONNX | 10.08 | 46.71 | 114.11 | 111.27 | -| V3 PyTorch + TTA | 2.04 | 10.10 | 41.74 | 50.89 | -| V3 ONNX + TTA | 3.39 | 16.50 | 39.40 | 38.27 | +![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg) + +On this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger +GPU batches. TTA improves quality but reduces throughput, so enable it according +to your accuracy and processing-budget requirements. -The [evidence reference](../docs/mambo-deployment-evidence.md) includes timing ranges, -plots and limitations. In-domain UCloud evaluation remains outstanding. +The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains +exact metric tables, calibrated thresholds, timing ranges and limitations. +In-domain UCloud evaluation remains outstanding. From 8656d0ae529642fe962cbcb646c1d8cd7a6ebea2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:18:23 +0200 Subject: [PATCH 052/221] docs: move configuration table to end of deployment guide --- deployment/README.md | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index d330281..1404991 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -31,15 +31,10 @@ choices; other OS/accelerator combinations remain unqualified. ## Choose the configuration that matters -| Setting | Starting point | When to change it | -|---|---|---| -| `model` / `class_list` | Set the region explicitly; default is `europe` | Match your sampling location. Use `full` when geography is unknown, or a custom list for your project's eligible species. This changes predictions and confidence. | -| `backend`, `device` | ONNX/CPU for portable integration | Use CUDA for throughput. On this laptop, ONNX was faster on CPU; PyTorch scaled better at GPU batch 32. Choose by dependencies and measurements on your hardware. | -| `tta` | Off | Enable `tta=True` when improved quality justifies three model passes. Keep the recommended recipe unless you validate an alternative on your own data. | -| `batch_size` | `8` | For GPU bulk processing, try 8 then 32; reduce for memory limits or interactive requests. Larger batches do not guarantee higher throughput. | -| `threads`, `preprocess_workers` | `threads=2`; preparation workers follow it | Tune under the real application's CPU budget. Preparation workers handle decoding/transforms; `threads` also controls ONNX runtime threads, but does **not** set PyTorch model threads. Avoid multiplying workers across competing processes. | -| `precision` | `"auto"` | Usually leave it alone. Use `"fp32"` to investigate runtime/numerical issues. BF16 is a native CUDA option requiring hardware support, not an established improvement over the default. | -| Embeddings / `topk` | Predictions only; `topk=1` | Request embeddings for similarity/search or downstream features; request more candidates with `predict(images, topk=k)`. Neither improves the classifier itself. | +Choose the region and runtime for your application, then decide whether TTA is worth +the processing cost. Leave precision on `auto`; tune batching and workers against +your hardware and memory budget. See the [configuration reference](#configuration-reference) +at the end for defaults and when to change each option. `precision="auto"` means FP32 on CPU, FP16 backbone with FP32 head for native CUDA, and TF32 execution of the standard floating ONNX graph on CUDA. It does not @@ -151,3 +146,15 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. In-domain UCloud evaluation remains outstanding. + +## Configuration reference + +| Setting | Starting point | When to change it | +|---|---|---| +| `model` / `class_list` | Set the region explicitly; default is `europe` | Match your sampling location. Use `full` when geography is unknown, or a custom list for your project's eligible species. This changes predictions and confidence. | +| `backend`, `device` | ONNX/CPU for portable integration | Use CUDA for throughput. On this laptop, ONNX was faster on CPU; PyTorch scaled better at GPU batch 32. Choose by dependencies and measurements on your hardware. | +| `tta` | Off | Enable `tta=True` when improved quality justifies three model passes. Keep the recommended recipe unless you validate an alternative on your own data. | +| `batch_size` | `8` | For GPU bulk processing, try 8 then 32; reduce for memory limits or interactive requests. Larger batches do not guarantee higher throughput. | +| `threads`, `preprocess_workers` | `threads=2`; preparation workers follow it | Tune under the real application's CPU budget. Preparation workers handle decoding/transforms; `threads` also controls ONNX runtime threads, but does **not** set PyTorch model threads. Avoid multiplying workers across competing processes. | +| `precision` | `"auto"` | Usually leave it alone. Use `"fp32"` to investigate runtime/numerical issues. BF16 is a native CUDA option requiring hardware support, not an established improvement over the default. | +| Embeddings / `topk` | Predictions only; `topk=1` | Request embeddings for similarity/search or downstream features; request more candidates with `predict(images, topk=k)`. Neither improves the classifier itself. | From 35d36299acf550fd1b83eea7ffcc746663edf1a5 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:25:41 +0200 Subject: [PATCH 053/221] docs: separate configuration guidance from option reference --- deployment/README.md | 54 ++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 1404991..832dfca 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -31,16 +31,28 @@ choices; other OS/accelerator combinations remain unqualified. ## Choose the configuration that matters -Choose the region and runtime for your application, then decide whether TTA is worth -the processing cost. Leave precision on `auto`; tune batching and workers against -your hardware and memory budget. See the [configuration reference](#configuration-reference) -at the end for defaults and when to change each option. - -`precision="auto"` means FP32 on CPU, FP16 backbone with FP32 head for native -CUDA, and TF32 execution of the standard floating ONNX graph on CUDA. It does not -select quantized weights or an FP16 ONNX export. Results record the resolved -precision, preset, class-list hash and TTA recipe; retain these with the bundle -version when comparing runs. +**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for +simple integration, or use your existing PyTorch/CUDA environment. Keep +`precision="auto"` and the default TTA recipe; these are better starting points +across machines than copying benchmark-specific settings. + +Leave TTA off for throughput, or enable `tta=True` when quality matters more. +Start with the default batch size and worker counts. Tune those only when speed +or memory becomes limiting, using representative inputs on the target machine; +the laptop's best batch size need not be yours. Request embeddings or extra +candidates only when your application needs them. + +| Setting | Default | Role / main trade-off | +|---|---|---| +| `model` / `class_list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. | +| `backend`, `device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. | +| `tta` | Off; `True` selects `rotation30_pad25_3` | Quality versus compute: the recommended recipe uses three views. [Recipe details](../docs/mambo-tta.md). | +| `batch_size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. | +| `threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. | +| `preprocess_workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. | +| `precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. | +| Embeddings | Off | Additional output for similarity/search or downstream features. | +| `topk` | `1` | Number of returned candidates at each taxonomic rank. | ### Geographic scope @@ -56,16 +68,6 @@ comparable northern-European use, not as a universal default for other locations A custom `class_list=["GBIF_SPECIES_ID", ...]` or UTF-8 list file overrides the preset. Unknown IDs and empty lists fail; duplicates are removed and model ordering retained. -### Optional test-time augmentation - -`tta=True` or bare `--tta` selects `rotation30_pad25_3`: original, −30° and +30° -views, with 25% edge padding on each rotated view. Rotation expands the canvas; -ordinary model preprocessing follows. Pin that name explicitly for reproducibility. -TTA remains off when omitted. `padded_scale` preserves the previous recipe; -`wide_rotation_mixed_padding_5` is an optional higher-cost alternative with no -consistent family-level advantage. See the [TTA reference](../docs/mambo-tta.md) -for custom transforms and aggregation details. - ## Inputs, outputs and acceptance Supply paths, PIL images, or CHW/BCHW arrays/tensors: uint8, or floats in [0,1]. @@ -146,15 +148,3 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. In-domain UCloud evaluation remains outstanding. - -## Configuration reference - -| Setting | Starting point | When to change it | -|---|---|---| -| `model` / `class_list` | Set the region explicitly; default is `europe` | Match your sampling location. Use `full` when geography is unknown, or a custom list for your project's eligible species. This changes predictions and confidence. | -| `backend`, `device` | ONNX/CPU for portable integration | Use CUDA for throughput. On this laptop, ONNX was faster on CPU; PyTorch scaled better at GPU batch 32. Choose by dependencies and measurements on your hardware. | -| `tta` | Off | Enable `tta=True` when improved quality justifies three model passes. Keep the recommended recipe unless you validate an alternative on your own data. | -| `batch_size` | `8` | For GPU bulk processing, try 8 then 32; reduce for memory limits or interactive requests. Larger batches do not guarantee higher throughput. | -| `threads`, `preprocess_workers` | `threads=2`; preparation workers follow it | Tune under the real application's CPU budget. Preparation workers handle decoding/transforms; `threads` also controls ONNX runtime threads, but does **not** set PyTorch model threads. Avoid multiplying workers across competing processes. | -| `precision` | `"auto"` | Usually leave it alone. Use `"fp32"` to investigate runtime/numerical issues. BF16 is a native CUDA option requiring hardware support, not an established improvement over the default. | -| Embeddings / `topk` | Predictions only; `topk=1` | Request embeddings for similarity/search or downstream features; request more candidates with `predict(images, topk=k)`. Neither improves the classifier itself. | From 061e1d07fc052b3be90b18c29b9640ddafad18b9 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:32:55 +0200 Subject: [PATCH 054/221] docs: clarify configuration syntax and TTA throughput cost --- deployment/README.md | 45 +++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 832dfca..f7d73cd 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -32,27 +32,30 @@ choices; other OS/accelerator combinations remain unqualified. ## Choose the configuration that matters **Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for -simple integration, or use your existing PyTorch/CUDA environment. Keep -`precision="auto"` and the default TTA recipe; these are better starting points -across machines than copying benchmark-specific settings. - -Leave TTA off for throughput, or enable `tta=True` when quality matters more. -Start with the default batch size and worker counts. Tune those only when speed -or memory becomes limiting, using representative inputs on the target machine; -the laptop's best batch size need not be yours. Request embeddings or extra -candidates only when your application needs them. - -| Setting | Default | Role / main trade-off | -|---|---|---| -| `model` / `class_list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. | -| `backend`, `device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. | -| `tta` | Off; `True` selects `rotation30_pad25_3` | Quality versus compute: the recommended recipe uses three views. [Recipe details](../docs/mambo-tta.md). | -| `batch_size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. | -| `threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. | -| `preprocess_workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. | -| `precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. | -| Embeddings | Off | Additional output for similarity/search or downstream features. | -| `topk` | `1` | Number of returned candidates at each taxonomic rank. | +simple integration, or use your existing PyTorch/CUDA environment. Leave +`precision="auto"` to select the backend/device's default precision, and keep the +recommended recipe when enabling TTA. + +Leave TTA off for throughput, or enable `tta=True` when quality matters more: +expect roughly **one-third the throughput (about 3× slower)** with the default +three-view recipe; the exact cost depends on the workload. Start with the default +batch size and worker counts. Tune these on the target machine if speed or memory +becomes limiting. Request embeddings or extra candidates only when needed. + +API settings below are `Predictor(...)` keyword arguments, except the prediction +methods shown in the last two rows. CLI equivalents are listed alongside them. + +| Python API | CLI | Default | Role / main trade-off | +|---|---|---|---| +| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. | +| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. | +| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). | +| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. | +| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. | +| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. | +| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. | +| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. | +| `predict(images, topk=k)` | `--topk k` | `1` | Number of returned candidates at each taxonomic rank. | ### Geographic scope From bb627a28639be2139247c464991fc55c761ca0af Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 17:41:15 +0200 Subject: [PATCH 055/221] docs: consolidate deployment input output and threshold guidance --- deployment/README.md | 50 +++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index f7d73cd..916e227 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -22,6 +22,17 @@ print(result[0].label) # species, genus, family IDs print(result[0].confidence) # confidence at each rank ``` +**Input/output contract** + +- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels + or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose + HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied. +- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family + order, one result per image. Each rank is predicted independently. +- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`; + `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows. + ONNX requires the bundle's embedding graph. + For ONNX/CUDA, install `onnxruntime-gpu` instead of `onnxruntime`, with matching CUDA/cuDNN libraries, and select `device="cuda:0"`. For PyTorch, install the matching `mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend="torch"` and @@ -42,8 +53,12 @@ three-view recipe; the exact cost depends on the workload. Start with the defaul batch size and worker counts. Tune these on the target machine if speed or memory becomes limiting. Request embeddings or extra candidates only when needed. -API settings below are `Predictor(...)` keyword arguments, except the prediction -methods shown in the last two rows. CLI equivalents are listed alongside them. +For large collections, call `predict()` on smaller groups and save or discard each +result before the next call; lowering `batch_size` alone does not limit the memory +used to retain results for the whole collection. + +Pass API option values to `Predictor(...)`; prediction-method calls and CLI-only +options are shown explicitly. | Python API | CLI | Default | Role / main trade-off | |---|---|---|---| @@ -55,7 +70,8 @@ methods shown in the last two rows. CLI equivalents are listed alongside them. | `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. | | `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. | | `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. | -| `predict(images, topk=k)` | `--topk k` | `1` | Number of returned candidates at each taxonomic rank. | +| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. | +| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. | ### Geographic scope @@ -71,34 +87,6 @@ comparable northern-European use, not as a universal default for other locations A custom `class_list=["GBIF_SPECIES_ID", ...]` or UTF-8 list file overrides the preset. Unknown IDs and empty lists fail; duplicates are removed and model ordering retained. -## Inputs, outputs and acceptance - -Supply paths, PIL images, or CHW/BCHW arrays/tensors: uint8, or floats in [0,1]. -Transpose HWC arrays explicitly. Supply original pixels, **not normalized model -inputs**. The runtime converts to RGB, discards alpha and ignores EXIF orientation; -apply any required orientation correction before passing a PIL image or array. -Keep the supplied preprocessing recipe unchanged. - -Results are on CPU. `label` contains taxon IDs in species/genus/family order; -`topk` ranks each level independently, so a returned tuple need not be an ancestral -path. `indices` refer to the filtered vocabulary; `global_indices` to the full one. -`predict_with_embeddings(images)` returns `(result, vectors)`, with float32 -`[N,1280]` unit-length vectors; the ONNX bundle must include the embedding graph. -With TTA, embeddings are the normalized mean across views. - -`batch_size` bounds model calls, **not total request memory**: outputs and logits -accumulate for the whole request. Submit large collections in bounded chunks. -Calls on one predictor are serialized; increasing caller threads alone will not -parallelize its inference. - -Confidence is conditional on the selected vocabulary, not a guarantee of correctness. -If your workflow can reject uncertain predictions, choose thresholds on representative -labelled data and report acceptance coverage alongside quality. Recalibrate when -changing the preset, TTA or pipeline. The study thresholds below are not universal -production defaults. In Python, apply your acceptance rule to `result.confidence`. -CLI `--threshold` defaults to zero and marks acceptance in `mini_metric.csv`; it -uses one scalar for all ranks and does not remove predictions from JSON output. - ## Command line and migration ```sh From eb289fad726538dbd52270140bffb53d37be052d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 21:39:12 +0200 Subject: [PATCH 056/221] feat: restore cached model downloads and prepare uv UCloud evaluation --- deployment/README.md | 32 +- deployment/mambo_deploy/__init__.py | 2 +- deployment/mambo_deploy/bundle.py | 10 +- deployment/mambo_deploy/default_bundle.json | 39 + deployment/mambo_deploy/download.py | 69 + deployment/mambo_deploy/predictor.py | 6 +- dev/releases/mambo_v3/benchmark.py | 5 +- dev/releases/mambo_v3/evaluation.md | 29 +- dev/releases/mambo_v3/legacy_evaluation.py | 19 +- .../mambo_v3/package_download_metadata.py | 31 + dev/releases/mambo_v3/setup_ucloud_release.py | 122 ++ dev/releases/mambo_v3/ucloud-release.md | 114 ++ .../mambo_v3/ucloud_env/pyproject.toml | 31 + dev/releases/mambo_v3/ucloud_env/uv.lock | 1533 +++++++++++++++++ dev/releases/mambo_v3/ucloud_release.json | 23 + dev/releases/mambo_v3/ucloud_release.py | 229 +++ dev/releases/mambo_v3/ucloud_summary.py | 101 ++ docs/ucloud-model-release-roadmap.md | 6 +- tests/releases/test_release_download.py | 69 + tests/releases/test_ucloud_release.py | 135 ++ 20 files changed, 2555 insertions(+), 50 deletions(-) create mode 100644 deployment/mambo_deploy/default_bundle.json create mode 100644 deployment/mambo_deploy/download.py create mode 100644 dev/releases/mambo_v3/package_download_metadata.py create mode 100644 dev/releases/mambo_v3/setup_ucloud_release.py create mode 100644 dev/releases/mambo_v3/ucloud-release.md create mode 100644 dev/releases/mambo_v3/ucloud_env/pyproject.toml create mode 100644 dev/releases/mambo_v3/ucloud_env/uv.lock create mode 100644 dev/releases/mambo_v3/ucloud_release.json create mode 100644 dev/releases/mambo_v3/ucloud_release.py create mode 100644 dev/releases/mambo_v3/ucloud_summary.py create mode 100644 tests/releases/test_release_download.py create mode 100644 tests/releases/test_ucloud_release.py diff --git a/deployment/README.md b/deployment/README.md index 916e227..74fd93b 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,22 +1,23 @@ # MAMBO deployment — release candidate -Run a local model bundle with ONNX or PyTorch, on CPU or NVIDIA CUDA. Inference -requires no network access or writable model directory. This candidate has not -been publicly released. Keep each ONNX graph beside its `model.onnx.data` file. +Run MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files +download automatically from public ERDA storage on first use and are verified +before caching. This candidate has not been publicly released; use the supplied wheel. ## Quick start Start with ONNX/CPU for the smallest installation: it needs no training package. -Install the supplied wheel in your environment, then reuse one predictor across calls. +Add the supplied wheel to your `uv` project, then run your script with `uv run python +your_script.py`. Reuse one predictor across calls. ```sh -pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' +uv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' ``` ```python from mambo_deploy import Predictor -predictor = Predictor(bundle="/path/to/mambo-bundle", backend="onnx", device="cpu", model="europe") +predictor = Predictor(backend="onnx", device="cpu", model="europe") result = predictor.predict(["moth.jpg"]) print(result[0].label) # species, genus, family IDs print(result[0].confidence) # confidence at each rank @@ -33,13 +34,19 @@ print(result[0].confidence) # confidence at each rank `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows. ONNX requires the bundle's embedding graph. -For ONNX/CUDA, install `onnxruntime-gpu` instead of `onnxruntime`, with matching +For ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching CUDA/cuDNN libraries, and select `device="cuda:0"`. For PyTorch, install the matching `mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend="torch"` and an explicit device. Requested but unavailable CUDA raises an error; individual ONNX operators may still execute on CPU. CPU and CUDA are the supported device choices; other OS/accelerator combinations remain unqualified. +Models are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set +`MAMBO_CACHE` to choose another location. After the required model files are cached, +`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle, +pass `bundle="/path/to/mambo-bundle"`, `--bundle`, or set `MAMBO_BUNDLE`. +Keep each ONNX graph beside its `model.onnx.data` file. + ## Choose the configuration that matters **Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for @@ -89,10 +96,15 @@ Unknown IDs and empty lists fail; duplicates are removed and model ordering reta ## Command line and migration +Run once without adding a project dependency: + ```sh -mambo_predict -i moth.jpg --bundle /path/to/mambo-bundle --backend onnx --device cpu -M europe --tta -o . --name results +uvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \ + -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results ``` +Inside a configured project, use `uv run mambo_predict` with the same arguments. + Outputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and `embeddings.npy` when `--embeddings` is requested. Directory input is recursive. The main controls above have corresponding CLI flags; use `mambo_predict --help`. @@ -100,7 +112,7 @@ The main controls above have corresponding CLI flags; use `mambo_predict --help` Existing callers can use `mini_trainer.deploy.Predictor` with both wheels installed. It preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets it), with native result containers/device tensors. The portable API above defaults -to ONNX/CPU. Pass `bundle=` or set `MAMBO_BUNDLE`; downloads are no longer implicit. +to ONNX/CPU. Both interfaces download the default release when no bundle is supplied. Do not use `weights=` as a model-selection control: overrides must match the pinned release checkpoint. Legacy weights and already-preprocessed inputs need migration; embedding dimensions may differ from V2. @@ -138,4 +150,4 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. -In-domain UCloud evaluation remains outstanding. +In-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification. diff --git a/deployment/mambo_deploy/__init__.py b/deployment/mambo_deploy/__init__.py index 30b84d3..681857b 100644 --- a/deployment/mambo_deploy/__init__.py +++ b/deployment/mambo_deploy/__init__.py @@ -1,4 +1,4 @@ -"""Offline model-bundle inference; importing this package does not import PyTorch.""" +"""Portable model-bundle inference; importing this package does not import PyTorch.""" from .augmentation import TTA, EdgePad, RotatePad, SaltAndPepper, View from .predictor import Predictor diff --git a/deployment/mambo_deploy/bundle.py b/deployment/mambo_deploy/bundle.py index 8f66bd2..a1edeaf 100644 --- a/deployment/mambo_deploy/bundle.py +++ b/deployment/mambo_deploy/bundle.py @@ -1,12 +1,16 @@ -"""Validated, relocatable bundle paths. Inference never downloads or writes files.""" +"""Validated, relocatable bundle paths. Explicit local bundles stay offline; the default cache can fetch missing files.""" import hashlib import json +import os from pathlib import Path +from .download import fetch_file + class Bundle: - def __init__(self, root): + def __init__(self, root, *, download=False): + self.download = download self.root = Path(root).expanduser().resolve() with (self.root / "release.json").open() as stream: self.manifest = json.load(stream) @@ -37,6 +41,8 @@ def file(self, relative): if item is None: raise ValueError(f"Unlisted bundle file: {relative}") if relative not in self._verified: + if not path.exists() and self.download and relative in self.manifest.get("origins", {}): + fetch_file(self.manifest["origins"][relative], path, **item, offline=os.environ.get("MAMBO_OFFLINE") == "1") if path.stat().st_size != item["size"]: raise ValueError(f"Bundle size mismatch: {relative}") with path.open("rb") as stream: diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json new file mode 100644 index 0000000..2cbe145 --- /dev/null +++ b/deployment/mambo_deploy/default_bundle.json @@ -0,0 +1,39 @@ +{ + "metadata": { + "CODE_LICENSE": "Copyright 2026 Asger Svenning\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n", + "MODEL_CARD.md": "# MAMBO_v3 candidate\n\nEfficientNetV2-S; September 2026 UCloud run; 12,632 species. Original FP32 artifacts; no quantization. Native weights and ONNX variants share the vocabulary.\n\nThis is an unpublished consumer release candidate. Training revision/best-epoch provenance, weight/data redistribution notices, full task metrics and cross-OS qualification remain release gates. CODE_LICENSE covers repository code only; it does not assert a license for model weights or source images.\n", + "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", + "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", + "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", + "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching\nCUDA/cuDNN libraries, and select `device=\"cuda:0\"`. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", + "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", + "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", + "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", + "regions/africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n1733755\n1734704\n6113959\n11529292\n1845270\n1845574\n1845616\n4528100\n1847111\n9546514\n9868978\n1850640\n1850781\n5119338\n1845952\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n4532500\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1783882\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1790692\n1791715\n1792210\n1795074\n1796984\n1797542\n4532473\n5884245\n6117055\n6117124\n1798481\n1798504\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1805110\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n5117189\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n9331464\n1819928\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n8148822\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780869\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n1860857\n5123339\n5123474\n1869595\n1870450\n1870988\n1871252\n1871407\n8766638\n4531365\n1871754\n1871783\n7673242\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n4531237\n1873890\n1875409\n1875687\n1876542\n1876922\n9111961\n5126052\n1877788\n4531417\n1890024\n5884888\n1877035\n5125780\n1871504\n1941330\n10309794\n12231385\n1736623\n1737131\n1737509\n4530608\n1739833\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922572\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n1924082\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1925918\n1926324\n1926385\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n4535106\n1931046\n1931403\n1931437\n1931788\n1932177\n1932302\n1932332\n1932354\n8833509\n1932393\n1932411\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933647\n1933649\n1926166\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n1919333\n4535280\n4535285\n7981372\n1919346\n1919660\n1919663\n1919665\n1919703\n1919924\n1919929\n1919930\n1919966\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n1920709\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1920218\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1957266\n1957286\n8172949\n1959839\n1960105\n1961013\n1961025\n4302252\n1963168\n1964076\n1964195\n1964836\n1966255\n1967025\n1967209\n1967265\n1967324\n1967438\n1967606\n1969958\n5144691\n5144805\n5144900\n5145075\n5145396\n5145468\n5145502\n5145842\n8014296\n1973171\n7996464\n5146510\n5146611\n5146774\n5146837\n5147039\n5147043\n5147058\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147560\n1978017\n5148264\n1980521\n1980525\n1980533\n1982267\n1983039\n1983062\n1983525\n1983528\n1985742\n4525093\n4525097\n6118530\n6214843\n4524223\n1988019\n1988064\n1992066\n11654024\n7507369\n1989594\n4525034\n4524541\n4523519\n6119299\n6119323\n6119359\n6119488\n9220953\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8277078\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142338\n5142352\n1949954\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772172\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n1775329\n5110858\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n1787770\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1792996\n1794507\n1795068\n4532908\n1795483\n9803522\n1796451\n4532811\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n4533714\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n1824131\n5118892\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n4535632\n8049830\n4535809\n4535819\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n1911461\n5133610\n10203260\n1912506\n8964866\n5134098\n5134301\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1916352\n1916554\n1918207\n1918212\n1918632\n1918688\n1918776\n4535539\n5137397\n7988274\n8404037\n9902073\n7762841\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1899737\n7934873\n8393082\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1881362\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1885931\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888484\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1890898\n1891167\n1891171\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n8218441\n1886207\n1883885\n4532150\n4532160\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861494\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n7761138\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n8225376\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n4690079\n5141297\n1939314\n5770913\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", + "regions/arctic.classes": "1860621\n1860628\n1860659\n1860664\n1860668\n1860688\n1860709\n1860711\n1732063\n1732416\n1732452\n1732521\n1732565\n1732662\n1732717\n1733258\n1733484\n4525266\n4525273\n1734453\n1734826\n1845270\n1845368\n1845607\n1846604\n1846657\n1846729\n1846916\n1847572\n1848150\n10450501\n1848219\n1848273\n1848312\n1848356\n1848378\n1848596\n1848636\n1848669\n1848690\n1848713\n1848714\n1848730\n1848753\n1848864\n1848868\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1850008\n1850042\n1850045\n1850076\n1850106\n1850238\n11576787\n1850302\n1850335\n1850386\n1850394\n1850450\n4527903\n1850522\n1850538\n1850971\n1851000\n1851010\n1851011\n5122037\n5122131\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n1852177\n1852311\n11287091\n1848920\n1829533\n1829776\n1829785\n1829799\n1829823\n1829974\n1828637\n1829021\n6097236\n5769272\n10176413\n5879654\n7448174\n4525610\n1861395\n1845962\n1830843\n1830122\n1830125\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n1831643\n8271010\n1853723\n5880147\n9734171\n11418741\n1761111\n1764531\n1769103\n1769897\n9564612\n9607447\n1772793\n1777631\n1780150\n5113078\n5113084\n5113234\n1797178\n1797258\n1797367\n1797373\n1797374\n1797436\n1797479\n4532471\n8355390\n1798346\n1798408\n1798449\n1798594\n1798807\n4532351\n4532357\n9621113\n1799708\n1804071\n1804906\n7874258\n1808752\n5115771\n1810099\n5116416\n1813114\n5117189\n5117400\n1817729\n1819145\n4532293\n4532297\n1819268\n1819873\n7657803\n1820372\n10551407\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n12089608\n11962292\n12135372\n5115872\n5115874\n9530200\n5116475\n4532405\n4532408\n4532412\n8000103\n4532534\n1760246\n5113036\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n4522916\n4522919\n4522922\n12318291\n4522886\n4522891\n1860768\n7767114\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840380\n1840408\n1840485\n1840555\n1840566\n1840581\n1840596\n5119808\n4529630\n1751236\n1751290\n1751298\n1751368\n1751457\n4535884\n1860408\n4525177\n5123394\n5769164\n5123461\n1751216\n1869803\n1869852\n1869976\n1870202\n1870250\n1870988\n1871407\n4531402\n1871698\n10787705\n1872901\n1872904\n1873079\n1873776\n1873780\n4531264\n1874204\n4531147\n1875120\n8219149\n1875376\n4531242\n1875631\n4531284\n1875827\n1875869\n1875918\n1875940\n1875952\n1876329\n1876409\n1876854\n1877310\n1877341\n1877368\n4531246\n1877941\n1878470\n1878490\n1872315\n1748805\n1939964\n11667300\n5141493\n5141501\n1940510\n1940575\n1940639\n1940744\n1940768\n1940807\n1940838\n1939879\n1736377\n1736511\n1736528\n1736560\n1736601\n5102666\n1736800\n1736898\n4530406\n4529931\n1737342\n1737403\n1737491\n1737497\n7350238\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737847\n1737893\n1737924\n4530002\n1738218\n1738222\n1738245\n1738317\n1738322\n1738337\n1738422\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739337\n1739377\n1739381\n5102982\n1739451\n1739461\n1739471\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740174\n1740183\n1740185\n1740305\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1741253\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741551\n1741615\n1741633\n1741634\n1741747\n1741752\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103736\n5103948\n5771350\n7975250\n8313553\n5103998\n7661023\n1743475\n7877231\n1743532\n1743588\n1743604\n5104056\n6097235\n1743643\n1743714\n4530214\n1743768\n1743775\n4529908\n4529915\n1743828\n1743855\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n1744416\n1744498\n1744588\n1744593\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744789\n1744810\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745606\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745737\n1745756\n1745762\n1745771\n1745787\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746831\n1746832\n1746856\n1747141\n4530138\n5104558\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103185\n5103227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771249\n5771256\n5771259\n4525500\n4525503\n4525510\n4525530\n4525540\n4525547\n4525562\n1920851\n1920889\n1921239\n1921247\n1922937\n5138387\n5138543\n5138561\n1923796\n1924097\n1924106\n12185456\n1925918\n4300000\n1925962\n1926054\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n11720834\n1929270\n1929659\n1929697\n1930110\n8643155\n1931553\n1931779\n10570752\n1932411\n1932417\n1932960\n5140244\n1933793\n1926260\n1933138\n1919327\n1919328\n1919712\n1919719\n1920237\n1920259\n5137791\n5137803\n1920494\n1920496\n1920506\n5137882\n5137894\n5137903\n5137908\n5804895\n1920712\n5714914\n5137582\n5137595\n5137636\n5137672\n5137689\n5137693\n5137700\n5137706\n5137711\n5137714\n1920218\n1748890\n1749050\n1749070\n1749164\n1749713\n1749744\n1749846\n1749959\n1750097\n1750166\n1750288\n5104772\n5104781\n5104797\n5104891\n5104940\n5105054\n5105088\n5105158\n5976947\n1751051\n5104759\n1749591\n1749608\n1735532\n4527339\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n1955497\n5143651\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n1957266\n1957300\n1957570\n1957816\n1957845\n1957854\n4524421\n4524426\n5143964\n1959735\n1959914\n1959919\n1960617\n1961040\n1961190\n1962204\n1962265\n1962434\n1962516\n9812211\n1962860\n1963011\n1963306\n1963446\n1963463\n1964191\n1964195\n1964653\n1964657\n8361848\n5144424\n5144426\n1965078\n1965166\n1965763\n1965777\n1965795\n1965807\n1965810\n1965823\n1965825\n1965841\n1965865\n1965913\n1965996\n1966017\n5144534\n5144543\n1967245\n1967273\n1967597\n1967815\n1967873\n7681733\n1968867\n1969291\n1969954\n1970213\n5144721\n5145009\n5145136\n5145260\n5145409\n1971888\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145965\n7541913\n7960566\n1972434\n1972447\n1972449\n1972454\n1973414\n1973487\n5146496\n5146559\n5146659\n5146677\n5146883\n5146946\n5146961\n5147039\n5147062\n5147208\n5147245\n5147608\n5147638\n1975546\n1975553\n1975571\n1975733\n1975741\n8329661\n1975793\n5715277\n5715278\n8160782\n1975897\n1975903\n1976163\n5147681\n5147713\n7973517\n1976993\n1977003\n1977007\n1977068\n5147827\n5147834\n5769028\n1978056\n1978065\n1978114\n1978375\n1978445\n1978493\n4524636\n4524638\n4524890\n1978751\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148436\n5148462\n5148486\n5148487\n8421569\n1982406\n1982500\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982791\n1982867\n1982885\n1983000\n1983052\n1983170\n1983260\n1983288\n1983441\n1983442\n1983525\n1983558\n1983648\n1983705\n1983755\n1983896\n1983922\n1983997\n1983999\n7752082\n7993353\n8015895\n8026858\n8262357\n1984734\n1984942\n1984949\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986623\n5149307\n5149315\n5768880\n1987744\n1988593\n1988684\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n1991371\n5149836\n1992066\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n9261296\n9272461\n5769068\n5769072\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4524070\n4524072\n4524951\n4525078\n5144190\n5146412\n5715275\n5149499\n7769543\n4523880\n4523883\n4523885\n5149665\n5149704\n5149746\n5149819\n5146342\n5146379\n1972942\n4302268\n5141677\n1943954\n8133678\n7389824\n1947282\n1947306\n1947335\n1949794\n1949852\n1950006\n8109173\n5977179\n5977250\n7633472\n1869478\n1869489\n1869512\n9359597\n9400895\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759083\n4533952\n1759407\n1759620\n1759661\n1759667\n1759668\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760887\n1761041\n1761438\n1762608\n1762615\n5109506\n5109523\n5109599\n5109722\n1763610\n1765011\n1765044\n4534245\n4534257\n1765767\n1766128\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766650\n1766741\n1767597\n1767625\n5772176\n5772196\n5772199\n5772205\n5772210\n1768117\n5110200\n1768341\n1768702\n1768749\n1768771\n1768815\n1769057\n1769505\n1769566\n1769947\n1769958\n1770132\n1770150\n1770477\n4532696\n1771385\n1771391\n7725644\n1771509\n1771531\n1771997\n1772013\n1772169\n1772179\n1772940\n1772956\n1772977\n1773163\n1773328\n1774314\n4534052\n4534057\n5772269\n4534719\n1776067\n1776330\n1776371\n5110756\n5772446\n1776459\n1776462\n1776619\n1776862\n4534463\n5110871\n5110885\n4534299\n1778517\n1778596\n5111574\n8253467\n1779435\n1779641\n1779690\n1779959\n1780378\n1781694\n1782560\n1782615\n1782622\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782927\n1782948\n1782978\n1783037\n1783043\n1783045\n5112155\n5112191\n5112283\n5112291\n5112336\n5112345\n5112377\n5714951\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1783861\n1784826\n4534290\n1785286\n4532886\n4532890\n1785888\n1785895\n1785951\n1785955\n1785964\n1785992\n1786007\n8292872\n1786308\n1786902\n1786936\n1787112\n1787213\n1787504\n1787506\n1787590\n1787610\n1787697\n1787770\n1787841\n1787859\n1788425\n1788522\n4534011\n1788917\n1788929\n1789086\n1789267\n1789481\n1789505\n1789553\n1789580\n4534166\n1789695\n1789745\n1789753\n10068024\n10113008\n10312073\n1789982\n1790002\n1790072\n1790084\n1790160\n11693171\n1790359\n1790361\n9174377\n1790625\n1791422\n1791784\n1792292\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792442\n1792449\n1792475\n1793369\n1793877\n1793983\n1793986\n1794102\n1794590\n1795215\n1795854\n1795871\n1795930\n1795946\n1795983\n1796007\n1796032\n1796117\n1796145\n1796169\n1796181\n1796188\n4534485\n7438067\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n1798916\n1798931\n1798971\n1798974\n1798984\n1799135\n1799701\n1799799\n1799957\n1800032\n8742426\n4534389\n4534207\n10638451\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534533\n11478679\n5110644\n1779334\n5114198\n1771678\n1771698\n8581601\n9623131\n1770880\n1771169\n1771214\n7940536\n4533347\n4533360\n1822587\n1822610\n1822613\n5118524\n1822787\n1822796\n1822819\n1822830\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n1825539\n1825967\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119245\n1828162\n1894102\n1894164\n1894268\n1894298\n5882039\n7712938\n1894714\n4535614\n4535630\n4535636\n8049830\n1894840\n1894896\n4535827\n4535817\n5128250\n5128266\n5128323\n5128326\n5128357\n9804158\n1895875\n1896841\n1898286\n4299368\n1898544\n5129374\n5129378\n5129405\n5129432\n1902533\n1902749\n1905187\n1905299\n6221746\n1905383\n1905396\n1908044\n1909398\n1911112\n1911168\n1911278\n1911461\n7809779\n8078362\n1912325\n1912372\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n7428726\n8810143\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134759\n5135355\n5714507\n7738295\n8314088\n9967126\n8176911\n1918988\n5130587\n5130682\n5131096\n5132084\n5132183\n5131910\n8138711\n1902143\n1902182\n1899433\n7768674\n5142870\n1951649\n1952014\n5142903\n1952229\n5143048\n1952532\n5143129\n5143147\n1952806\n1832819\n1832853\n1832915\n1832927\n1832936\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n5120668\n5120675\n5121046\n5121177\n5121517\n5121613\n5121737\n8273859\n5120396\n5101394\n4525641\n1731598\n1872368\n1878782\n1878862\n1878879\n1878895\n1878939\n1879452\n5126212\n1879534\n1879630\n1879703\n1879731\n10915497\n1879939\n1879970\n1880040\n1880062\n1880064\n1880088\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n4531687\n1881603\n4531713\n1881834\n4531975\n1882195\n1882210\n1882437\n1882459\n1882729\n5126834\n8325294\n1883161\n4531690\n1884212\n4531708\n1884465\n1884970\n8223165\n1886587\n1887290\n1887701\n1888743\n1888759\n1888823\n1889942\n5127521\n1890187\n1890534\n1890576\n1890679\n1890699\n1890772\n1890802\n7431428\n1891059\n1891167\n1891426\n1891473\n1891493\n1891494\n4532022\n9674732\n1884255\n1884273\n1884332\n1884337\n1884370\n1884403\n5884851\n5126675\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n1887108\n1887177\n1887178\n4532050\n4532088\n4532095\n4532097\n1846107\n1846111\n1846133\n1846141\n1846210\n1846219\n1846236\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122439\n1854849\n4526050\n1858637\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n1859285\n1859287\n1859305\n1859471\n1859480\n1859488\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n5124911\n1867820\n7734292\n1841813\n1861644\n1861797\n1861851\n1861862\n1862572\n1862580\n1862624\n1862837\n5123922\n5124007\n5124029\n1864165\n1864358\n1864377\n5124121\n5124143\n5124233\n1864652\n1993419\n4525189\n5119513\n1830361\n1830374\n1830380\n1830407\n1830457\n4525420\n7976145\n1830537\n1830802\n4525364\n1754332\n5107219\n5107644\n7778368\n7955974\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n7646066\n1829322\n1829363\n1856005\n1856384\n1856620\n1856658\n1856668\n1856686\n1856691\n1856768\n1856867\n1857626\n9790007\n1857856\n1857863\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1937739\n8225376\n1938520\n1938810\n1938955\n1938975\n1939056\n12253844\n1858531\n1838691\n1838905\n1838911\n4528692\n1835396\n1837172\n1839893\n5770922\n5770942\n1801051\n1801896\n4534779\n4534782\n1802280\n1803073\n4534762\n5114311\n8244266\n", + "regions/asia.classes": "1837646\n1934693\n1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1860668\n1732063\n1732114\n1732115\n1732416\n1732452\n1732508\n1732521\n1732525\n1732565\n1732662\n1732685\n1732763\n1732830\n1732842\n5101640\n1733154\n1733155\n1733243\n1733258\n1733394\n1733412\n1733484\n4525266\n5734897\n5101745\n5769191\n1734453\n5102207\n5102242\n1734496\n1734519\n1734690\n1734704\n1734826\n5734891\n5102287\n5102300\n1831890\n1832143\n5734640\n11453841\n1832235\n1832248\n1832254\n5734645\n1832612\n11505614\n8825467\n1845270\n1845547\n1845548\n1845607\n4529566\n4528100\n1846604\n10785815\n11730078\n1847062\n1847097\n1847157\n1847260\n1847392\n4528547\n1847641\n9546514\n1848219\n9868978\n1848273\n1848356\n1848378\n4528539\n1848864\n5122013\n1849284\n9007213\n1849656\n4527903\n1850570\n1850633\n1850781\n1851337\n1851543\n1851555\n1852165\n1852177\n6133343\n11287091\n1829533\n1829659\n1829776\n1828637\n6097236\n8871600\n7448174\n4525610\n10835385\n10855556\n5125130\n1861395\n1868428\n1868527\n5734146\n1845866\n1845962\n1834980\n8503184\n1839094\n1841261\n1830152\n1830191\n1830241\n1831458\n1831631\n1831643\n9379855\n8834672\n1839625\n5880147\n9734171\n10679326\n10746289\n11382064\n10698858\n11570545\n10701190\n11807833\n12199936\n11095591\n11418741\n7908344\n12259113\n12208733\n12235234\n12217030\n1758625\n1759150\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n10889719\n1760970\n1761111\n1761213\n1761353\n1761387\n9257793\n1762151\n11562374\n1762219\n1762226\n1762298\n1763589\n5109766\n1763650\n1763782\n1763812\n1763976\n1764021\n1764032\n1764043\n1764060\n9278311\n1764531\n1764640\n1764880\n1764886\n1765653\n1765863\n1766260\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767044\n1767755\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769103\n1769168\n11467034\n10848620\n1769410\n1769425\n1769465\n1769737\n1769772\n10881384\n12148290\n1769823\n1769827\n1769840\n1769852\n1769897\n1769901\n6132966\n6132967\n7701550\n8837162\n1771839\n1771975\n1771977\n1772352\n1772793\n4532500\n5110397\n5110417\n5110447\n5110490\n1774575\n1774576\n1775148\n5110546\n5110765\n5110769\n1777166\n1777631\n5110837\n1777695\n9372988\n6132953\n4687991\n6133029\n5110981\n5110986\n5110993\n5111007\n5111044\n6133058\n9610080\n1779399\n1779456\n6132938\n1780150\n5111830\n10203499\n1780705\n1780716\n1782115\n1783302\n1783652\n1783882\n1784804\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n6132974\n1786980\n1786985\n1787009\n10860091\n6132805\n1788045\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n1790331\n1790692\n1790816\n10749137\n10766319\n1790876\n1790888\n1791010\n1791094\n1791097\n10743044\n6132950\n1791514\n1791698\n1791715\n11016336\n11725043\n11971514\n5113078\n5113082\n5113084\n5113148\n5113330\n5113352\n1792541\n1792695\n5113385\n5884243\n9504222\n1793429\n1793610\n1793613\n1793631\n1793635\n1793646\n1793656\n1793892\n5113925\n1796984\n10108671\n6132979\n10600368\n1797178\n1797258\n1797259\n1797276\n1797299\n1797333\n1797344\n1797349\n1797374\n1797429\n1797454\n1797479\n1797527\n4532461\n4532471\n4532473\n8355390\n8756768\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798346\n1798408\n1798449\n1798481\n1798488\n1798504\n6132841\n6132850\n11732472\n11976273\n1787072\n1787079\n1798523\n1798529\n1798580\n1798594\n1798700\n1798794\n1798802\n1798807\n1798823\n1798863\n1798868\n4301310\n4532351\n4532352\n6115426\n6115437\n6133046\n6133051\n8793873\n1799417\n1799708\n1799743\n1799751\n1799757\n6132824\n6132825\n10722110\n1803148\n1803163\n1803197\n1803302\n1803824\n1804071\n1804477\n9343385\n1804906\n1805044\n1805111\n11494627\n12229237\n1805580\n5115166\n5115167\n5115198\n9663271\n1806814\n1806871\n1806936\n7874258\n1807969\n11453492\n1808140\n1808145\n1808161\n1808166\n1808180\n1808195\n1808221\n1808236\n1808286\n1808340\n1808348\n1808381\n1808440\n1808450\n1808559\n6198302\n9219266\n1808752\n5115701\n5115771\n1809019\n5115777\n1809115\n1809210\n1809308\n10189965\n1809387\n5116095\n10183056\n12006709\n1810099\n1810464\n10882244\n5116395\n5116412\n12176559\n12182061\n1811686\n1812500\n10671425\n10821201\n11736162\n12209759\n1813010\n1813036\n1813114\n1813263\n5117189\n7656811\n1814538\n1814653\n1814913\n1814928\n1814971\n5117399\n5117400\n1815260\n1815680\n10826443\n12249986\n1816029\n1816065\n1816138\n1816246\n1816276\n1816292\n1816299\n1816362\n1816881\n5117779\n1817797\n5734900\n11461056\n11860565\n1818413\n8326103\n1818659\n1818991\n1819050\n10822185\n1819128\n1819145\n4532293\n4532297\n6134023\n6134027\n6197200\n7346382\n7346384\n1819268\n1819270\n1819280\n11656384\n1819421\n8407461\n1819668\n6134035\n1819873\n5118348\n6122092\n7657803\n5118422\n10546538\n1820275\n1820282\n1820291\n1820318\n1820352\n1820372\n1820393\n1820401\n1820406\n1820414\n1820429\n1820440\n1820450\n1820451\n1820458\n1820477\n1820478\n5734655\n5734657\n7346381\n9420824\n1820565\n1820753\n1820888\n1821105\n1821260\n1822141\n1822142\n11731502\n12253343\n12037602\n9276279\n9347308\n5884571\n10503495\n8897869\n7596232\n12176367\n7346231\n12183285\n6097214\n4532544\n4532516\n6133081\n6133083\n4532532\n4532565\n10864524\n12021153\n12021649\n12089608\n9673208\n10270464\n8741750\n9473918\n9400545\n9559336\n6133292\n11332355\n6133340\n10062933\n10717837\n8148822\n12216332\n12242422\n9852545\n10806460\n6133252\n10072380\n6133325\n9754232\n10972780\n11142432\n10629533\n10309234\n12171522\n9493317\n9315833\n11962292\n10399906\n6133266\n6133269\n6133270\n6133271\n10754772\n10812069\n11232431\n6112449\n6133311\n6133312\n6133313\n6133315\n6133317\n8452092\n8526388\n8543494\n8624848\n9927378\n5734901\n6133262\n12257250\n10166724\n8831819\n12135372\n5115872\n5115874\n5116475\n8038357\n6133264\n6097254\n1774829\n5116698\n5116843\n12171068\n9266866\n10178326\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n6133033\n5116504\n1788635\n9336001\n1781413\n1781421\n1803461\n4532405\n4532408\n4532412\n10866411\n6133241\n6133242\n6133244\n6133248\n7346227\n8000103\n9478424\n1781598\n1794273\n4532534\n1763761\n6115388\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n1774682\n1774702\n1768626\n6132809\n1819852\n1780287\n1813174\n4532508\n1793515\n1793533\n5111643\n1804532\n1768461\n1760246\n5113036\n5109796\n1821455\n1821464\n1821478\n1821479\n1821505\n1821547\n1821651\n1821863\n1821920\n1821934\n1821940\n1822017\n1819337\n1819362\n1804182\n1774997\n6122364\n1815315\n1781446\n1781473\n6116076\n1783713\n1783725\n1812394\n8237987\n4532366\n4687933\n4687935\n6116646\n10926224\n11088003\n1820118\n1820137\n1819057\n4532453\n6116413\n1820039\n5118396\n1781531\n1798329\n1798331\n1798335\n1784947\n1785072\n1785105\n1765996\n1765999\n1766022\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132916\n6132917\n5110012\n1772822\n12185656\n1809594\n1781350\n1781353\n6133013\n1796943\n1819685\n10098436\n11717028\n1771772\n1782310\n10094256\n6197138\n10765884\n9792270\n5108435\n5108440\n1771903\n1788813\n4301309\n10506164\n1777500\n1777517\n5112440\n1795542\n1860979\n1860983\n1860987\n1860994\n4522890\n4522891\n1860765\n1860768\n1992504\n1852956\n1835432\n1835433\n1835457\n9724183\n1837420\n4529064\n1839293\n1839296\n1840301\n1840346\n1840566\n1840581\n1840596\n1831752\n5125075\n10371735\n1869359\n1869363\n9883856\n1939510\n1939520\n5141344\n1860259\n1860261\n1860274\n4525177\n5123339\n5123394\n5123419\n5769164\n5880040\n5880041\n6132546\n5123449\n5123461\n5123474\n5123485\n5123489\n1869595\n1869706\n1869803\n1869976\n1870202\n1870237\n1870249\n1870250\n1870450\n1870650\n5125306\n1871212\n1871407\n4531402\n4531409\n8766638\n1871451\n1871630\n1871683\n1871698\n1871783\n1871988\n1872094\n1872169\n4531427\n7673242\n10787705\n1872848\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873417\n1873776\n1873780\n1873783\n4531237\n4531264\n1873843\n1873890\n5125569\n5125596\n5125602\n5125633\n5125635\n5125689\n1874269\n1874274\n4531147\n1874743\n1874937\n1875120\n8219149\n1875327\n1875376\n1875827\n1875830\n1875865\n1875869\n1875918\n1875958\n1876168\n1876329\n1876409\n1876542\n1876592\n1876854\n1876922\n1877038\n1877345\n1877368\n9111961\n1877498\n5126052\n1877788\n1877941\n1877988\n4531417\n1878406\n1878470\n9835867\n1883045\n1888454\n5884888\n6133441\n4525884\n5141493\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n4525777\n4525803\n1940807\n12211069\n1939879\n1736358\n1736377\n1736499\n1736560\n1736601\n1736623\n1736727\n1736905\n1736993\n1737015\n4529931\n10842267\n1737313\n1737342\n1737368\n1737491\n1737497\n1737524\n1737526\n1737533\n1737542\n1737650\n1737753\n1737776\n1737847\n8186212\n1738192\n1738222\n1738373\n1738422\n5102931\n5102951\n1738700\n8086347\n1739151\n1739337\n5102982\n1739471\n1739605\n1739833\n1739919\n1739922\n1739980\n1739999\n1740183\n1740185\n1740392\n7797515\n1740469\n1740482\n1740524\n1740623\n8094357\n1740797\n1740828\n1741056\n1741341\n1741368\n4530151\n5103061\n1741633\n1741752\n1742185\n1742263\n1742346\n5103613\n5103736\n5103948\n5771350\n8313553\n5103998\n11846897\n1743475\n7877231\n1743532\n1743604\n5104056\n1743768\n1743775\n1743782\n4529908\n1743828\n1743856\n1743862\n1743867\n1743898\n1743998\n1744071\n1744136\n1744180\n4530632\n1744526\n1744588\n1744593\n1744699\n1744728\n1744731\n1744739\n1744896\n1745013\n10844862\n1745561\n1745579\n1745600\n1745630\n1745634\n1745771\n1745781\n1745816\n1745895\n1745947\n1745952\n1745957\n1746027\n1746174\n1746327\n1746413\n1746440\n1746613\n1746644\n1746666\n1746714\n1746775\n1746832\n1746856\n1746876\n1747141\n5104442\n1747738\n5104597\n6097234\n1748605\n8691947\n5103121\n5103176\n5103227\n5771229\n5771232\n5771236\n5771239\n5771249\n5771258\n4525510\n4525530\n4525540\n1920851\n1920864\n10159697\n10707501\n9916153\n1920957\n1920991\n1920996\n1921009\n1921010\n1921021\n1921040\n1921044\n7346426\n1921055\n10581870\n10825466\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n10556522\n1921466\n7387466\n1921633\n7346430\n5138069\n1921897\n1922057\n1922085\n1922111\n1922143\n1922163\n1922244\n1922285\n1922288\n10384044\n10442031\n9904499\n1922311\n1922343\n8016522\n5138200\n1922572\n1922584\n4535092\n1922689\n8782891\n1922745\n1922771\n1922937\n5138257\n1922994\n1923019\n5138298\n5138543\n5138561\n5714680\n1923458\n1923491\n1923525\n1923649\n1923650\n1923651\n1923668\n4708977\n1923796\n1923809\n1923883\n1923917\n1924044\n1924057\n1924097\n1924193\n5138681\n1924298\n1924323\n10656713\n1924390\n1924417\n1924458\n1924558\n1924713\n1925233\n4535172\n1925381\n1925454\n1925543\n1925609\n1925628\n1925679\n1925711\n1925731\n1925743\n1925877\n1925918\n1925962\n1926054\n9816676\n1926324\n1926436\n1926437\n1926446\n1926448\n1926456\n1926546\n1926550\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926722\n1926800\n1926861\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709111\n5883052\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927439\n1927445\n1927707\n1927717\n5882965\n7680748\n1927897\n1928248\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n5139156\n1928628\n5139201\n1928754\n1928849\n1928908\n1928915\n9856663\n1928960\n1929270\n1929402\n1929659\n1929697\n5139309\n5139339\n8356768\n1930110\n1930832\n1930904\n1930916\n1930935\n4535106\n1930954\n1930968\n1931109\n1931132\n8643155\n1931148\n1931179\n1931509\n1931561\n5734268\n7346434\n1931655\n1931656\n1931706\n1931729\n1931735\n1931779\n5139915\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932172\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932411\n1932551\n7346444\n1932607\n5139990\n6132685\n1932752\n1932812\n1932814\n1932863\n1932960\n1932976\n5806412\n1933028\n1933044\n1933084\n4535162\n5140214\n5140244\n5140436\n5140443\n7634721\n7664111\n1933583\n1933647\n1933649\n7346407\n1933679\n1933793\n1933844\n1933845\n5140534\n5140561\n1934187\n1934188\n1934192\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n1935459\n1926260\n5138929\n7346417\n10879371\n11874998\n4709102\n1933095\n1933138\n1924494\n11055981\n9623220\n1752161\n5734556\n1752373\n1752483\n1752492\n1752494\n1752603\n1752651\n1752749\n1752758\n1752849\n1752903\n1753081\n1753215\n1753395\n5105458\n5105467\n5105547\n5105560\n5105570\n1753432\n1753435\n11014495\n1753636\n5734560\n1753759\n5105588\n10955682\n10932946\n7345843\n6133481\n10017342\n5105339\n5105259\n10795141\n11673056\n1919151\n1919160\n1919161\n1919176\n1919181\n1919221\n1919223\n1919320\n1919328\n1919333\n1919340\n1919344\n1919346\n1919348\n1919407\n1919412\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919697\n1919706\n1919712\n1919716\n1919720\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n1919966\n5137747\n5137748\n1920181\n1920237\n1920247\n1920258\n1920259\n5137790\n5137808\n5137823\n5137828\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5805954\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n1920395\n5137861\n1920454\n1920467\n1920469\n1920472\n1920491\n1920494\n1920496\n1920502\n1920506\n1920512\n4535307\n5137889\n5137891\n5804932\n5805036\n5805407\n1920515\n5137902\n5137903\n5137908\n5137912\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920707\n1920709\n1920711\n1920712\n1920718\n1920786\n5804166\n5714914\n5137573\n5137578\n5137582\n5137595\n5137605\n5137612\n5137636\n5137663\n5137677\n5137682\n5137689\n5137706\n5137708\n5803588\n8203812\n1920218\n5137763\n7207679\n1749070\n1750166\n5104891\n5104759\n1758003\n1758440\n1758441\n1758461\n1855241\n1868837\n1868952\n1869057\n1869178\n1869187\n11794362\n1963095\n1963096\n1973530\n11826016\n5143303\n5143311\n5143315\n1954496\n1954563\n5143338\n5143354\n5143368\n5143380\n5143384\n5143437\n5143453\n5143506\n5143511\n5143525\n5143575\n5734335\n1954891\n1954911\n6133648\n1955389\n5143651\n1955552\n1955581\n6133676\n1955694\n1955725\n1955806\n1955856\n5143675\n5143697\n1956309\n1956384\n5734542\n5734543\n1956440\n1956496\n1956524\n1956536\n1956629\n1956710\n6133593\n4525068\n1957161\n1957174\n1957266\n1957300\n1957333\n1957368\n1957413\n1957460\n1957523\n1957572\n1957579\n1957583\n1957611\n1957718\n1957746\n1957791\n1957816\n1957852\n1957854\n5143947\n1958024\n1958045\n1958152\n1958158\n1958163\n1958241\n1958252\n1958255\n1958259\n1958260\n1958275\n1958282\n1958290\n1958305\n1958307\n1958323\n1958324\n6544637\n1958422\n1958454\n1958463\n1958483\n5144027\n1959395\n1959461\n1959494\n1959645\n1959652\n1959666\n1959667\n1959682\n1959735\n6133552\n1959876\n1959914\n1959919\n1959948\n1960002\n10694777\n1960023\n1960181\n1960182\n6133509\n1960484\n5144092\n5144093\n1960571\n1960595\n1960617\n6133518\n1960686\n1960854\n1960963\n1961013\n1961037\n1961040\n5734344\n1961052\n1961126\n1961162\n7346236\n1961190\n1961252\n1961647\n1962204\n1962265\n1962268\n1962434\n1962447\n1962516\n9812211\n1962636\n1962678\n1962839\n1962860\n1963011\n4302252\n5734349\n1963168\n1963306\n5144345\n1963446\n1963629\n1963709\n1963710\n1963733\n1963827\n11644349\n1964024\n1964025\n1964029\n6133500\n1964113\n1964116\n1964195\n1964247\n1964316\n1964331\n1964437\n1964471\n6133502\n1964637\n1964653\n8361848\n1964738\n5144426\n1965166\n1965197\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1966017\n5144431\n5144438\n5144472\n9919915\n9370070\n5144499\n1966286\n1966302\n1966310\n5734448\n10670854\n1966362\n1966367\n5144534\n1967003\n1967006\n1967011\n1967039\n5144543\n1967245\n1967265\n1967273\n1967445\n1967590\n1967595\n1967597\n1967672\n1967688\n7346240\n1967815\n1967873\n1968147\n1968182\n1968193\n7681733\n1968304\n1968363\n1968730\n1968746\n1968837\n1968867\n1968951\n11598540\n1968990\n1969357\n1969463\n1969491\n1969581\n6133643\n1969621\n1970034\n1970136\n1970213\n1970284\n1970322\n1970436\n5734405\n6133513\n7346252\n5144677\n5144721\n5144782\n5144787\n5144805\n5144806\n5144864\n5144880\n5144900\n5144936\n5145009\n5145075\n5145136\n5145186\n5145255\n5145260\n5145269\n5145396\n5145409\n5145495\n5145502\n5145522\n5145560\n5145624\n5145729\n5145735\n8014296\n9194811\n1971847\n1971858\n1971888\n6133516\n1972094\n1972185\n1972187\n1972234\n1972250\n5145870\n5145965\n5146038\n5146062\n7541913\n1972443\n1972613\n1972614\n1972616\n1972620\n1972631\n10732353\n1972754\n5146282\n1973242\n1973338\n1973358\n1973393\n1973397\n1973414\n5146434\n5146476\n5146483\n5146496\n5146508\n5146559\n5146566\n5146567\n5146599\n5146601\n5146608\n5146611\n5146659\n5146677\n5146746\n5146752\n5146762\n5146763\n5146833\n5146837\n5146883\n5146894\n5146946\n5146961\n5147030\n5147039\n5147043\n5147058\n5147062\n5147150\n5147171\n5147208\n5147214\n5147232\n5147245\n5147306\n5147354\n5147415\n5147441\n5147478\n5147492\n5147498\n5147516\n8366158\n1975164\n1975198\n6133559\n9875420\n5147608\n5147638\n11856219\n1975546\n1975553\n1975571\n1975583\n1975597\n1975711\n1975733\n8329661\n1975793\n8160782\n1975805\n1975806\n10835542\n1975892\n1975897\n1975903\n1975964\n1975979\n5734539\n9356491\n9410573\n9548993\n1976163\n1976212\n1976213\n1976224\n1976228\n1976311\n1976462\n1976463\n1976469\n1976470\n1976483\n5147681\n6097233\n7973517\n1976928\n1977003\n1977007\n1977068\n5147819\n5147827\n5147834\n1977182\n1977184\n1977297\n5734420\n6133548\n5147917\n5147968\n5148043\n5148055\n5148115\n5148214\n5769028\n1977813\n1977833\n1977863\n6133582\n1977962\n1977967\n1978010\n1978034\n1978045\n1978056\n1978065\n1978114\n1978375\n1978385\n1978398\n1978405\n1978407\n1978422\n1978424\n1978445\n5734388\n1978499\n1978524\n1978529\n4524636\n4524638\n5734519\n6133560\n5148252\n10738407\n1978789\n1978821\n5734396\n1978977\n1978996\n1978999\n6133546\n1979021\n5148286\n1979222\n1979229\n1979308\n1979473\n1979521\n1979561\n1979562\n1979758\n1979781\n1979787\n1979801\n1979806\n1979822\n1980269\n5148436\n5148487\n1980521\n1980532\n11449815\n1980694\n1980811\n1980827\n1980917\n8421569\n1981063\n6133585\n1981357\n1981457\n1981696\n11173690\n10592969\n7345811\n7345813\n1981937\n1981938\n1981998\n1982007\n1982203\n1982221\n1982267\n1982291\n1982406\n1982500\n1982529\n1982541\n1982636\n1982865\n1982885\n1983052\n1983393\n1983442\n1983525\n1983528\n1983648\n1983755\n1983922\n1983999\n1984033\n11121180\n5149012\n1984734\n5149081\n5149136\n5149174\n5149203\n1984942\n1984949\n1985061\n1985152\n1985158\n1985167\n1985181\n1985191\n1985192\n1985228\n1985230\n1985573\n1985707\n6133659\n1985926\n1985993\n1986009\n1986032\n1986052\n1986054\n1986056\n1986061\n5734345\n1986157\n1986166\n1986171\n1986191\n1986220\n1986452\n1986508\n1986522\n1986575\n1986623\n1986650\n1986779\n1986787\n1986936\n5149308\n5149315\n6133614\n1987203\n1987204\n5768880\n1987362\n1987377\n1987527\n9137631\n1987629\n1987665\n1987740\n1987744\n1987766\n1987767\n1987775\n1987776\n1987786\n1987787\n6133591\n4524221\n11650277\n6133534\n11190148\n1988002\n5734451\n1988225\n1988257\n1988306\n1988420\n1988487\n1988593\n1988642\n8388883\n5149414\n5149438\n5734528\n6133644\n1989355\n1989393\n1989428\n1989942\n1990043\n1990050\n1990066\n1990088\n1990105\n1990150\n5734390\n1990551\n1990582\n5149474\n1991123\n1991179\n6133501\n5149609\n1991277\n1991310\n1991371\n1991378\n1991394\n1991779\n1991783\n5149836\n5149843\n10155932\n11098546\n11869776\n1991945\n5734515\n11635419\n1992066\n5149929\n5149986\n6133619\n5734398\n5880533\n5880539\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n7429212\n9442902\n9414984\n1989594\n4524740\n7990739\n4523560\n4524054\n4523461\n4524998\n4525034\n4524376\n4524822\n11828714\n4524712\n10422582\n10574156\n10632124\n4523522\n5880392\n6133595\n6133596\n6133597\n4523519\n4524070\n4524072\n4524955\n4524962\n10530208\n11555221\n4525078\n6133667\n6133670\n6133673\n6133674\n6133675\n7346249\n9220953\n9249651\n6133637\n6133620\n6133519\n11780161\n6133604\n6133607\n10629052\n7346237\n6133520\n6133562\n10864093\n5734379\n11548960\n7345819\n6133523\n6133525\n6133528\n6133542\n6133497\n6133498\n10477629\n6133575\n9962269\n6133517\n6133586\n6133635\n10175639\n9617411\n9932090\n7346256\n7345829\n11652557\n5734535\n7345801\n5734362\n11477039\n5880478\n6133540\n10755716\n5144190\n5146412\n5734482\n5149499\n5149659\n5149665\n5149704\n5149746\n5149768\n5149787\n5734422\n7443518\n5146303\n5146335\n5146342\n5146379\n1991462\n1991466\n4302268\n4524393\n1942522\n1942060\n1942067\n1942244\n1942251\n5141643\n10773498\n1942378\n1942383\n1942618\n1942621\n1942636\n1942697\n1942715\n1942769\n1942808\n1942836\n4689929\n5141677\n1942878\n1943212\n1943223\n1943236\n1943308\n1943397\n8178854\n8277078\n5141795\n1943505\n1943519\n1943619\n1943625\n1943757\n8073674\n8133678\n8273661\n1944462\n1944483\n1944503\n1944504\n1944521\n1944591\n1944778\n5141924\n1945066\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945286\n1945569\n1945589\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945877\n1945878\n5142001\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n7346354\n1946695\n1946731\n1946737\n1946738\n7389824\n1946916\n1946917\n1947117\n1947306\n1947335\n1947385\n1947409\n1947446\n1947449\n1947456\n1947491\n1947492\n1947496\n1947626\n1947661\n1947673\n1947703\n1947727\n1947740\n1947745\n1947753\n1947765\n1947775\n5734665\n1947805\n1947846\n1948061\n1948062\n1948073\n1948088\n5142213\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n5142338\n5142352\n1949784\n1949794\n1949850\n1949877\n1949929\n5142499\n5142599\n8109173\n1950013\n7346356\n1950156\n1950169\n1950171\n1950302\n1950362\n1950521\n1950533\n1950879\n1950936\n1951157\n5977247\n5977257\n8270406\n7633472\n5142725\n5142729\n5142730\n4535396\n5142006\n5142032\n5142042\n1869512\n1952878\n1952883\n1952909\n10744228\n1800191\n5109821\n1758613\n9355953\n1758874\n1758878\n1759055\n1759069\n1759079\n1759083\n4533952\n7972792\n1759153\n1759177\n1759620\n1759667\n1759686\n5108636\n10329023\n1760104\n7444489\n1760593\n1760620\n1794361\n4534225\n1760857\n1760891\n4533255\n1760939\n1760943\n1761041\n1761438\n1761735\n1761778\n1762244\n6132749\n1762608\n1762657\n6132957\n1762680\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763727\n1763741\n1764174\n1764553\n1764791\n1765010\n1765011\n1765017\n1765038\n1765044\n4534245\n4534252\n5109830\n5109843\n5109848\n5109855\n5109872\n5109882\n5109898\n5109931\n5109943\n8352161\n1765508\n1765658\n1765767\n1765954\n1766130\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766741\n1766910\n11034779\n1767134\n1767368\n1767393\n1767511\n1767597\n1767625\n10575632\n1767655\n1767674\n5110120\n5734744\n5772169\n5772171\n5772172\n5772176\n5772178\n5772186\n5772196\n5772199\n5772202\n5772206\n5772210\n5802396\n5883914\n5883925\n6132943\n7345742\n7388922\n8045644\n1768117\n5110200\n1768341\n5110213\n1768568\n1768698\n1768702\n1768771\n1768815\n1768819\n5110256\n5110258\n1769057\n1769095\n1769194\n1769209\n1769505\n1769519\n1769566\n1769958\n1769978\n1770150\n1770172\n1770353\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n1771555\n1772013\n1772094\n6133806\n1772169\n1772179\n5772129\n1772977\n1773163\n8222049\n1774272\n1774347\n1774470\n1774797\n4301304\n6115946\n4534046\n4534052\n4534057\n5772269\n4534719\n1775962\n1775963\n1776067\n1776330\n1776371\n1776619\n1776862\n6132861\n4534463\n1777253\n5110818\n5110871\n5110885\n1778074\n4534299\n1778109\n1778143\n5111481\n5111501\n5111535\n5111574\n5772222\n1779258\n1779435\n1779633\n1779641\n1779690\n1780378\n4533325\n1781233\n1781234\n5111974\n5111980\n1781803\n1781841\n1782168\n1782177\n1782341\n1782354\n1782457\n11763567\n1782543\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782757\n1782763\n1782777\n1782803\n1782841\n1782872\n1782927\n1782948\n1783043\n6133026\n5112283\n5112291\n5714973\n5715004\n5734845\n5772349\n5772351\n1783855\n1783861\n1783971\n1784349\n1784359\n1784513\n1784761\n1784853\n4534290\n1785145\n1785162\n1785181\n1785185\n1785286\n4532886\n4532888\n4532890\n1785314\n1785322\n1785329\n1785361\n1785367\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786448\n1786452\n1786515\n1786573\n1786619\n1786664\n1786902\n1787064\n1787112\n1787213\n1787267\n1787279\n1787367\n1787373\n1787381\n4687681\n9268082\n1787400\n1787504\n1787506\n1787590\n1787610\n1787631\n1787751\n1787770\n1787825\n1787841\n4534086\n1788522\n4534011\n1788846\n1788856\n1788917\n1789071\n1789076\n1789086\n4533924\n1789553\n4534166\n1789695\n1789730\n1789745\n1789753\n1789755\n1789957\n1790002\n1790072\n1790084\n1790153\n4533115\n1790361\n1790364\n1790376\n9174377\n1790625\n1791384\n1791422\n1791660\n1791784\n1792061\n1792292\n1792300\n1792335\n1792377\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n10684776\n1792768\n5113370\n1792996\n1793238\n1793243\n1793246\n7918000\n1793689\n1793877\n1793986\n1795065\n1795068\n4532908\n6133011\n1795215\n7869346\n7922810\n1795597\n1795854\n1795900\n1795957\n1796007\n1796117\n1796145\n1796169\n1796217\n4532700\n4688166\n4688169\n4688172\n1796423\n1796451\n1796463\n8105817\n1796678\n1797030\n1797735\n1798060\n4533431\n4533433\n4533444\n6133001\n6133002\n6133006\n6133007\n6133010\n1798090\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1799135\n5113951\n1799695\n1799701\n1800004\n1800032\n1800149\n9536457\n6097260\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n8890502\n4533202\n4534398\n6544687\n4534538\n4532269\n4533123\n4533125\n4534408\n4534533\n6132989\n6132762\n6133075\n5883985\n6132781\n8021109\n11478679\n10121804\n11311045\n5110644\n7654770\n6116899\n6132797\n1779334\n5114198\n1763072\n5109385\n5772063\n9038042\n8491927\n4534675\n4534681\n4534683\n4534685\n4534686\n1792555\n8108800\n1771634\n1771650\n1771675\n1771678\n1771698\n1770772\n1770821\n1770880\n1771040\n1771214\n1771245\n4533714\n6132931\n7940536\n1765751\n10841562\n5113847\n5113853\n5772309\n5108660\n5108671\n5108705\n5108724\n5108737\n5108752\n5108761\n5108787\n5108794\n5108796\n5734817\n6132880\n9243764\n1773904\n1759394\n1789512\n1789530\n4533360\n10933525\n5110282\n11566649\n11615549\n11731155\n4532203\n4532206\n4532208\n4532239\n4532253\n4532260\n4532266\n6115772\n6115820\n6115822\n6115830\n1782249\n1782273\n1782279\n1782289\n10063383\n1767293\n8363507\n9325654\n10458175\n10683012\n10702885\n1822487\n1822490\n1822493\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1822848\n1822852\n1823294\n1823444\n6133742\n1823573\n5118565\n7346263\n6133720\n1823706\n10996761\n1823726\n5118582\n1824113\n1824117\n1824242\n5734235\n6133692\n7875265\n1824330\n1824338\n1824354\n1824390\n1824666\n1824751\n1824766\n1824845\n1824997\n1825064\n5118859\n1825077\n1825082\n1825083\n4534909\n4534914\n1825156\n1825176\n1825336\n7346284\n5118904\n7624468\n1825539\n5118974\n5118978\n1825786\n7345777\n1825920\n1825956\n1825967\n1825971\n1825983\n1826022\n1826033\n1826108\n1826129\n11322712\n5118996\n5119000\n6133700\n10510959\n11059353\n6133750\n1827125\n1827349\n1827408\n1827414\n1827484\n4534869\n6133691\n9883140\n5119181\n5119211\n5119223\n5119239\n5119245\n1827649\n1827650\n1827687\n1827711\n11435704\n1828162\n1828180\n4534872\n6201790\n7346286\n6133680\n6133681\n6133684\n6133687\n6133688\n7346276\n9921001\n5118837\n5118841\n7346271\n7346273\n9486293\n1822502\n1892554\n1892555\n5127748\n5806166\n11464595\n1892821\n5127835\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n7346346\n9963153\n1893137\n1893177\n1893204\n1893241\n1893266\n5792081\n5128034\n1893329\n1893341\n10055104\n10477747\n12106975\n1893526\n1893538\n1893546\n1893551\n1893558\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n9136904\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n1894164\n1894268\n5882039\n5128161\n5128169\n5128182\n7712938\n10398658\n1894714\n4535614\n4535630\n4535632\n4535636\n8049830\n10639484\n1894840\n4535827\n1895037\n4535809\n4535817\n1895159\n5128323\n5128326\n5128353\n5128357\n9804158\n1895448\n1895499\n1895527\n1895609\n1895667\n1895670\n1895867\n1895875\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896105\n1896141\n1896142\n1896152\n1896304\n5128519\n1896841\n1896915\n1896922\n1897664\n1897677\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n1897834\n1897873\n10383968\n1898234\n1898250\n1898286\n4299368\n5129293\n7346344\n1898434\n1898441\n1898521\n1898544\n5129378\n5129417\n1898946\n1898958\n1898970\n1898988\n1899071\n1899187\n1900093\n1900890\n1900897\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901832\n1901850\n5130369\n5130392\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902533\n1902543\n1902560\n1902568\n1902572\n1902586\n1902749\n8140883\n8189761\n4535689\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130908\n5130944\n5130971\n5131058\n9968404\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n6221746\n1905383\n1905396\n1906552\n8208583\n1907430\n1907432\n1907436\n1907475\n1907498\n1907511\n1907534\n1907541\n1907547\n1907576\n1907580\n1907620\n1907625\n1907637\n1907666\n1907672\n1907687\n4535754\n5881946\n7976131\n1908352\n1908367\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909398\n1909607\n1909649\n1909659\n1909810\n1909818\n1909838\n1909854\n1909865\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n1911093\n1911112\n1911168\n1911198\n1911278\n1911298\n1911300\n1911461\n1911503\n7728366\n5133687\n5133689\n1911633\n4535592\n4535596\n1911736\n1911755\n7809779\n8078362\n5133693\n5133695\n1912325\n1912372\n1912395\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5133920\n5133990\n5772890\n7428726\n10097687\n10137350\n4535581\n5134098\n5134301\n8312017\n1913091\n1913105\n1913175\n1913178\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134810\n5135026\n5135191\n5135355\n5714507\n7738295\n8233062\n8314088\n9915028\n9967126\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915154\n1915160\n1915262\n1915270\n1915275\n1915325\n1915332\n8669164\n11372793\n11516142\n11535847\n5135643\n5136306\n1916376\n1916410\n1916412\n1916509\n7854318\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137156\n5137166\n5137291\n5137330\n5137388\n1918026\n1918321\n1918394\n1918406\n1918408\n1918411\n1918416\n1918467\n1918495\n1918497\n1918509\n1918517\n1918532\n1918533\n1918547\n1918553\n1918554\n1918627\n1918667\n1918669\n1918736\n1918776\n1918843\n1918854\n8035998\n11645316\n4535618\n4535620\n4535510\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n5130587\n5130682\n7762841\n10376507\n5131096\n5131142\n5131192\n5131256\n5131293\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n5131585\n5131593\n10228568\n10277877\n10508423\n11425145\n5132154\n5132183\n5132191\n5132238\n5132479\n7346328\n7346335\n8001799\n5806167\n5881397\n6100725\n6100726\n7642610\n5135513\n5135546\n11525418\n1896957\n5128569\n5128587\n5128644\n5128663\n5129000\n5129025\n5129091\n9087922\n10201273\n5131910\n5881551\n8138711\n8549720\n1910576\n1910628\n1910629\n1910648\n1910662\n1902143\n1902182\n1899349\n1899433\n1899818\n5129913\n7768674\n7934873\n8168644\n8393082\n1914701\n1914708\n1914734\n1914749\n7346340\n1918584\n1951370\n1951412\n1951462\n1951505\n1951507\n1951522\n1951529\n1951542\n1951557\n5142870\n1951631\n9512631\n1951649\n1951671\n1951675\n1951747\n9156165\n1951791\n5734305\n1951818\n1951840\n1951844\n1951859\n1951874\n1951881\n5734326\n1951919\n1952014\n1952034\n1952052\n1952062\n1952147\n1952175\n1952177\n1952229\n5142948\n1952281\n5143007\n5143048\n5143049\n5143076\n5143080\n1952449\n1952481\n1952532\n10782264\n1952551\n1952611\n1952685\n1952704\n5143116\n5143129\n5143147\n1952816\n1952857\n9502606\n5885428\n8604089\n6097228\n1868211\n1868409\n4702564\n1868499\n6544581\n1868470\n5141581\n5141590\n1735121\n1941864\n5121613\n1842097\n1842485\n4301036\n1842695\n9755262\n1843564\n1843602\n1730519\n1730543\n8292351\n5101394\n1730948\n1730978\n1731263\n4525641\n1731598\n10450446\n8008237\n8130866\n8402212\n1872359\n1872361\n1872368\n1878626\n6133117\n1878744\n1878782\n1878862\n1878879\n1878895\n1878904\n1878939\n1879001\n1879125\n1879141\n1879227\n1879337\n1879339\n1879340\n1879379\n5734212\n1879408\n1879452\n1879471\n1879490\n5126212\n5126217\n1879630\n1879691\n1879731\n1879735\n1879765\n10915497\n1879970\n1880062\n1880064\n1880138\n1880140\n1880143\n5126635\n5126637\n1880353\n1880451\n1880464\n1880465\n9524458\n6133225\n1880852\n1880858\n1880907\n1880931\n1880968\n1881089\n1881121\n1881126\n1881151\n1881170\n9819403\n4531687\n1881293\n1881320\n1881329\n1881336\n1881340\n1881362\n1881515\n4531713\n1881834\n1881964\n1882021\n1882210\n1882253\n1882266\n1882272\n1882310\n5126834\n1882753\n1882767\n1882771\n1882884\n1882901\n1882905\n10156181\n1882930\n1882941\n1882960\n1882965\n1883067\n1883161\n1883386\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884061\n4531690\n1884212\n4531708\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884461\n1884465\n1884479\n1884671\n6120980\n1884774\n1884816\n1884835\n1884844\n1884858\n1884877\n1884890\n4532122\n1884908\n1884909\n4532146\n1884970\n1885012\n1885262\n1885263\n1885569\n1885623\n1885630\n6133181\n1885745\n1885763\n1885826\n1885836\n1885919\n1885937\n1885945\n1885994\n1886015\n1886084\n1886088\n1886241\n1886251\n1886320\n1886362\n8223165\n1886526\n1886587\n1886700\n1886720\n1886726\n1886729\n7562564\n1886929\n1887054\n1887290\n1887509\n1887586\n4531670\n1887691\n1887701\n1888027\n1888040\n1888092\n4531968\n1888324\n1888346\n10922411\n1888484\n1888537\n1888579\n1888619\n1888733\n1888743\n1888759\n1888891\n1888893\n1888906\n1888911\n1888913\n9535420\n1889039\n1889043\n1889053\n1889071\n1889074\n1889239\n1889249\n1889270\n1889272\n1889277\n1889287\n1889356\n1889358\n1889370\n1889531\n1889552\n1889563\n1889942\n1890012\n1890031\n5127521\n1890097\n1890187\n9519191\n1890287\n1890320\n1890335\n1890343\n7543006\n10180624\n1890410\n1890487\n1890512\n1890522\n1890534\n1890576\n1890656\n1890670\n1890699\n1890724\n1890772\n1890776\n1890898\n1891059\n1891129\n1891167\n1891177\n1891190\n1891217\n1891326\n1891339\n1891366\n1891386\n1891426\n1891473\n1891493\n1891494\n4532022\n4532024\n1891533\n1891583\n1891636\n1891758\n1891889\n1891936\n1892153\n1892242\n1892245\n1892476\n10141437\n11056379\n9674732\n1884255\n1884370\n1884403\n5884851\n6133139\n6133140\n6133141\n5771877\n10227418\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10513366\n10502505\n10397209\n6133154\n10959264\n6133158\n10375403\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n9137965\n1886374\n1889716\n1889765\n1889833\n5127592\n5127609\n5127629\n5127644\n5127656\n5127669\n5127675\n5127683\n5127688\n5127698\n5802339\n1887108\n4532050\n4532088\n4532095\n6121184\n1888638\n1888639\n1883885\n4532150\n4532160\n5771880\n10410699\n1846111\n1846133\n1939597\n1830879\n1831009\n1831136\n4708183\n1854202\n5122430\n5122439\n1854615\n1854824\n1854849\n4526050\n1858637\n1858674\n1858698\n1858775\n1858930\n1859046\n1859177\n1859305\n1859453\n9749806\n6133397\n1859932\n1860026\n4536472\n4536483\n1973467\n5123180\n5123221\n1864897\n1865593\n10014340\n1865650\n1865659\n1865660\n1865666\n1865671\n9914882\n9972403\n1865930\n1866237\n5734291\n1866356\n6106943\n1866491\n1866530\n1866549\n1866556\n1866568\n1866573\n9906979\n5124880\n5124911\n10047346\n1867820\n1867928\n8439879\n9983244\n1867991\n1867993\n11643393\n11670751\n11729388\n5124673\n5124716\n5120278\n1841813\n1841946\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861510\n1861644\n1861663\n1861665\n1861673\n1861697\n1861705\n1861714\n1861721\n1861797\n1861842\n1861862\n5123674\n1861933\n1861936\n1861937\n1861938\n1861949\n1861951\n6106744\n1861975\n1862008\n1862026\n1862061\n1862066\n1862072\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n10374414\n11907754\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1862572\n1862578\n1862580\n1862692\n1862719\n1862765\n1862774\n1862837\n1863034\n5123922\n5734719\n1863354\n1863388\n1863394\n1863467\n1863646\n5124007\n5124029\n9310369\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n9578319\n1864126\n1864135\n1864161\n8133328\n1864358\n1864377\n5124121\n5124143\n5124233\n11738734\n11954157\n1864652\n5124300\n5124304\n5124305\n5124332\n5124348\n5124374\n5124415\n5124433\n1864793\n1864796\n5734713\n5885399\n6099041\n6106759\n7346401\n10193618\n6106647\n5123815\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123889\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1992883\n10842838\n10994020\n1993036\n1993043\n1993419\n1993496\n6133769\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n6132715\n1953407\n1953423\n1953729\n11467944\n6132725\n6132726\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1830099\n1830380\n1830407\n1754135\n1754263\n5105642\n1754332\n1754368\n1754380\n1754400\n1754465\n1754511\n1754516\n1754535\n11737872\n12075408\n11175615\n1754902\n1754919\n1754933\n1755131\n5734138\n1755237\n1755248\n1755253\n1755276\n5106115\n5106160\n5106249\n5107076\n5107219\n5107644\n7410701\n7674502\n7778368\n7903078\n7955974\n8201251\n8426357\n1757652\n5108318\n5108334\n5108335\n11140464\n11860016\n1757853\n5108346\n5108349\n4522753\n9004359\n1939688\n1829322\n1855630\n1855747\n8734090\n1856105\n1856289\n5122798\n1856384\n1856620\n1856668\n1856768\n1856867\n1856971\n1857258\n1857267\n1857380\n1857581\n1857626\n1857828\n1857829\n1857924\n1857938\n1857978\n1858163\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937754\n1937769\n1937792\n1937819\n1937826\n1937847\n1937856\n1937892\n1937911\n1937931\n1937937\n1937966\n1937975\n1937988\n1938007\n1938029\n1938052\n1938058\n1938069\n1938074\n1938088\n1938114\n1938122\n1938125\n1938129\n1938131\n1938147\n1938156\n1938162\n1938168\n1938174\n4692485\n4692504\n4693382\n5734569\n8225376\n9017206\n1936969\n1936988\n1936993\n1937011\n1937037\n1937055\n5141144\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937490\n1937514\n1937530\n10761559\n1937556\n1937566\n1937570\n1937580\n1937582\n1937594\n1937613\n1938214\n1938226\n1938230\n1938233\n1938300\n1938520\n1938612\n1938796\n1938810\n1938955\n1939056\n1939086\n1939156\n1939168\n1939180\n1939215\n1939225\n5141311\n5141317\n5141262\n5141291\n5141305\n8546322\n8574752\n1835031\n5770913\n1835098\n1837172\n1839560\n1841159\n5770922\n5770942\n4529032\n12188993\n1800238\n10213314\n1800441\n6133777\n1800528\n1800539\n10737993\n1800562\n1800572\n1800686\n1800691\n1800696\n1800821\n5114394\n5114400\n5114409\n11873966\n4534796\n4534798\n9544823\n1800881\n5114425\n1800934\n6133780\n1801000\n1801001\n1801051\n1801073\n1801080\n1801084\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n4534773\n4534776\n4534778\n4534779\n4534782\n6112606\n6112613\n6112661\n6133809\n6133811\n6133813\n6133814\n9894093\n1801993\n1802090\n8883183\n1802113\n1802120\n1802229\n1802244\n1802280\n1802337\n1802702\n1802783\n1802827\n1802833\n1802919\n1802939\n1803022\n1803035\n1803039\n1803060\n1803065\n1803073\n1803078\n1803108\n10942408\n4534767\n4534769\n6133803\n5114303\n5114311\n8244266\n10987178\n", + "regions/australia.classes": "1992268\n1992283\n1992301\n1992315\n10648791\n1758114\n1758146\n10083877\n9840570\n9960252\n10190647\n10341307\n10435406\n1732978\n1733504\n1733507\n1733511\n1733535\n10155026\n1734851\n10730270\n1831974\n1831999\n1832023\n1832518\n1832533\n1832553\n1832569\n1832649\n1845271\n1845503\n1845586\n1846858\n1847066\n1847111\n1847622\n1847639\n8797017\n5122013\n1850156\n1850633\n1850764\n1850798\n1851039\n1851543\n1852292\n10023115\n10498365\n11706893\n1850463\n9977181\n1829703\n1829866\n1828424\n1828455\n1828456\n6196939\n1828471\n1828491\n1828540\n1828543\n1828544\n10707366\n10833593\n10882997\n5119346\n5119349\n5119350\n5119353\n5119354\n5119361\n10288636\n10639943\n4695709\n1828976\n1837706\n1834428\n4684910\n4686897\n4686905\n4686907\n4686913\n1835848\n1835862\n1835874\n1835886\n1835897\n1835908\n1835928\n1838084\n1838978\n4685802\n1839600\n1839604\n4685468\n4684220\n4685557\n4685946\n1830812\n1830814\n1831458\n1831499\n1831508\n1831655\n5119868\n1839396\n10042504\n10094594\n10379915\n10531480\n10548275\n11919216\n9851221\n9985020\n6132868\n1761572\n1761573\n1761751\n1761752\n1761820\n5109196\n1762849\n1762852\n10256550\n1762887\n1763957\n1763976\n1763994\n1764060\n5109782\n5109784\n5109786\n5109787\n5109788\n1764886\n1765653\n10099906\n10647358\n1766558\n1766560\n1767215\n10340332\n1772543\n5110490\n1774069\n5110546\n1777165\n1777166\n5110837\n11457930\n11609422\n4687991\n5110981\n10403441\n9610080\n1779671\n1780716\n1780856\n1780860\n1780862\n10154280\n1782185\n1782326\n1782328\n1783173\n1783991\n10157400\n5112407\n5112410\n1784646\n1786317\n5112500\n1786958\n1786990\n1787003\n1787010\n5112531\n1788553\n6132936\n7346446\n9494526\n1788881\n6132826\n1788986\n1789225\n10090168\n1789794\n1790450\n10598407\n1790900\n1790910\n9967251\n9983957\n5112940\n1791379\n1791514\n1791715\n9504222\n9860902\n10267570\n1795657\n10573746\n1796984\n10108671\n1797039\n6132979\n1798014\n1798018\n1798023\n1798025\n1798101\n5113950\n5884247\n11636323\n9440183\n9635978\n9923283\n10657151\n1798511\n10096855\n1787090\n1798529\n1798687\n1798768\n1798868\n4532352\n6115437\n8793873\n1799165\n1799167\n1799743\n1799757\n1803148\n1803197\n11909090\n1803781\n1803788\n1804246\n1804429\n1804430\n1804610\n10053130\n1804721\n1804727\n1804742\n10156470\n1805043\n1805505\n1805524\n1805806\n1806704\n1807473\n1807477\n1807478\n1807479\n1807480\n1807483\n1807485\n1807488\n1807490\n1807491\n1807503\n11900897\n1808232\n6198302\n12214821\n1809244\n1809248\n1809381\n10010700\n1810752\n1810851\n5116397\n1812437\n1812453\n1812465\n1812658\n1814913\n10074808\n1815338\n1816029\n1816110\n1816434\n1817065\n11703980\n1817160\n1817171\n1817217\n1817810\n1818413\n5118171\n10556853\n5118291\n1819970\n1820383\n1820401\n1820435\n10274769\n1821448\n10503495\n10106475\n9956017\n10270464\n9473918\n9559336\n12180031\n12203022\n12216332\n9852545\n10496181\n10629533\n10004820\n10248689\n10454874\n10443878\n10637588\n10643533\n10166724\n10480609\n8363709\n10178326\n10469564\n9621271\n5116504\n1818216\n9336001\n1781413\n1781428\n1781598\n1763761\n6115388\n1816634\n1816648\n1816673\n1774598\n1774604\n1774654\n1774691\n1774712\n1768630\n5111643\n1766892\n10164453\n1768190\n9400916\n1768462\n9989156\n5113001\n5109796\n1821464\n1821468\n1821542\n1822003\n1804120\n1804148\n6116076\n1782507\n1783715\n9918092\n4687933\n4687934\n4687935\n1820137\n1799821\n1781531\n1798331\n1798335\n1784936\n1785072\n1765999\n1766007\n10330198\n10598038\n1786597\n4687389\n5884188\n9935660\n5110013\n10196956\n10392889\n1811455\n1811462\n1811465\n1796941\n1782310\n12266659\n5108421\n1771903\n10097776\n4301309\n5112440\n1795542\n1860849\n1992434\n1992489\n1731886\n1731890\n1731906\n1731923\n1731926\n1731927\n1731980\n1732001\n1732005\n1732031\n1732033\n1732044\n1732052\n10640865\n9950697\n1833779\n1833782\n1833794\n1834524\n1834547\n4685588\n4685595\n1834793\n1835086\n1835348\n1835814\n1837968\n1838058\n1838065\n1838071\n1839658\n1839721\n4684986\n1840346\n1831752\n1852832\n1852859\n1860259\n1860260\n5123339\n10361029\n10625116\n5123419\n5880040\n5880041\n10208422\n1853222\n10005632\n10433914\n11756119\n1869707\n1869714\n1870237\n1870450\n1870452\n1870459\n1870506\n1870509\n1870703\n1870988\n1871171\n1871333\n1872169\n9969513\n1872255\n1872470\n1872735\n1872812\n1872827\n1872850\n1872873\n1872901\n1873049\n1873079\n1873222\n1873285\n1873290\n1873291\n1873373\n1873620\n9858922\n1873773\n1873843\n5125591\n5125600\n5125602\n5125629\n1874146\n1875534\n1875554\n1875584\n1875844\n1876479\n1876542\n10356445\n1876876\n10442332\n1876922\n1876955\n1877406\n1877453\n5125943\n1877988\n1878173\n1878406\n1878470\n9835867\n1890056\n1890065\n10211808\n5884888\n10526954\n10065676\n10129011\n10279983\n11591775\n9857679\n10423263\n1748780\n1836906\n1940575\n1736623\n5102683\n1737015\n10146436\n10469532\n1737115\n1737131\n1737182\n1737187\n1737847\n1738045\n1738192\n1739051\n1739316\n1740586\n1740797\n1740828\n12259151\n1741074\n9826405\n1741084\n11906255\n10250474\n1741593\n1743319\n4707896\n4707900\n10073044\n1743680\n9867379\n1745019\n9586705\n1745957\n4707848\n6219423\n10021059\n10023049\n10080502\n10358334\n10476233\n1747639\n1747672\n1747914\n1747924\n10355898\n1748425\n1748442\n1748473\n1748486\n1748751\n10185271\n9952043\n10302660\n10530383\n9909775\n10606887\n10624577\n10153630\n10549715\n12057008\n10462612\n11688440\n5138967\n5138984\n1921010\n1921262\n1921263\n1921300\n5138069\n1922244\n1922745\n1923744\n1923782\n4708972\n4708973\n4708977\n1924362\n1924390\n1924558\n1924713\n1925555\n4708984\n1925628\n1925711\n5138732\n5138743\n5806391\n1926436\n1926448\n1926460\n1927274\n4709107\n1927707\n1927894\n1927895\n1927897\n1927900\n1928018\n4708927\n5139050\n1928382\n1928829\n4709030\n1928923\n1931189\n5139914\n1931889\n1931956\n1931958\n4709051\n1932159\n1932246\n4709095\n4708995\n1932563\n7346444\n1932908\n4709133\n5806412\n1933647\n5138929\n4709102\n4709147\n1752534\n1752536\n1752537\n1752539\n1752545\n1752547\n1752903\n1752946\n1752947\n1753461\n1753902\n1753906\n10368234\n9880359\n10203493\n9959898\n10560849\n10988070\n1919176\n1919340\n1919342\n1919344\n1919348\n1919381\n1919419\n1919421\n1919432\n1919444\n1919540\n1919626\n1919744\n5137828\n5137832\n5137833\n5137842\n5137849\n5137850\n5137854\n1920496\n1920534\n1920535\n1920538\n1920541\n5137929\n5137949\n1749124\n1749529\n1750131\n1750326\n5104822\n5104903\n5105081\n1750934\n1751024\n1828310\n1828317\n9882683\n9451208\n1758596\n1758602\n9943941\n10118678\n1962159\n1962162\n9875141\n1970460\n1970463\n1970473\n1970485\n1964995\n1964996\n10295646\n1954236\n1954522\n1954911\n10634980\n9213204\n10217455\n1955039\n1955093\n1955153\n1955199\n1955202\n1955318\n1955736\n1955737\n1955743\n1955745\n10560674\n11720357\n9593393\n10003902\n10048667\n10062202\n10075732\n10132475\n10177276\n10341059\n10363151\n10398979\n10434798\n10456933\n10457796\n10471477\n10528420\n10623003\n11451126\n11468089\n11638437\n1955899\n10078526\n10360329\n11690145\n1956384\n9234402\n10257899\n1956416\n1956955\n1956958\n1956963\n1956978\n1956983\n10167252\n1957058\n1957062\n1957333\n1957413\n1957523\n1958454\n1959341\n1959500\n1959595\n1959782\n1960106\n1960128\n1960201\n1960411\n5144115\n5144129\n1960521\n1960524\n1960940\n1960941\n1961180\n5144204\n1962829\n1962841\n1962842\n1962934\n1963297\n5144353\n1963782\n1964066\n1964305\n1964331\n1964565\n1964702\n10184940\n10523304\n1965643\n1965649\n1965650\n9952367\n9976926\n5144505\n1966977\n5144553\n1967703\n10174909\n10268303\n10379201\n1967716\n9833933\n1968115\n1968131\n5144633\n1969104\n1969568\n11858774\n1969581\n6133643\n1970093\n1970094\n1970108\n1970159\n1970265\n9939530\n10085335\n10109201\n10505033\n10054019\n5144806\n5144937\n5144942\n5144976\n5145079\n5145422\n5145495\n5145503\n1972407\n1972606\n9119710\n5146262\n11533770\n1972903\n5146294\n1973719\n5146426\n5146456\n5146472\n5146578\n5146719\n5146805\n5146880\n5146937\n5147046\n5147109\n5147121\n5147150\n5147160\n5147225\n5147522\n1975164\n1975212\n1975248\n1975249\n9975134\n10018221\n10572729\n9875420\n1975704\n1975722\n1976123\n1976142\n1976213\n1976243\n1976303\n1976341\n1976342\n1976345\n10118849\n9183738\n10089194\n1976890\n1976891\n1977350\n5147917\n5147923\n5147930\n5148066\n5148097\n5148214\n5148223\n10188228\n1978082\n10058263\n10626099\n10530515\n1978904\n1978915\n1978919\n1978937\n1979041\n1980035\n1980041\n1980044\n1980063\n1980491\n1980659\n10378314\n10571987\n1980821\n1980827\n10860751\n11660632\n1982024\n1982033\n1982043\n1982047\n1982055\n1982071\n1982072\n1982085\n1982100\n1982102\n1982103\n1982120\n1982148\n1982221\n12116722\n5149182\n10199372\n1984913\n1985167\n1985181\n1985228\n1985267\n1985490\n6133659\n1985809\n1985816\n1985826\n1985931\n1986223\n1986650\n1986693\n1986720\n1986774\n1986846\n1986942\n1987203\n1987747\n1987766\n1987775\n1987785\n6133591\n10533589\n5149369\n5149370\n5149371\n5149387\n9987116\n1988302\n1988354\n1988360\n1988361\n1988362\n1988370\n1988376\n1988382\n1988384\n1988820\n1988894\n1989170\n1989181\n1989282\n1989283\n1989377\n1989522\n1989538\n9906229\n1990164\n1990165\n1990167\n1990178\n11465014\n1990255\n1990256\n1990371\n1991394\n1991468\n10155932\n5149873\n5149880\n5149940\n5149941\n1992167\n5880539\n9577234\n10224300\n9830270\n11799357\n10864093\n4702878\n10078800\n8501203\n9629450\n6133635\n10175639\n9617411\n10438474\n10411202\n10146771\n10210935\n10263383\n1963532\n1942060\n1942067\n1942618\n1942621\n1942623\n1942636\n1942641\n5141650\n1942674\n1943089\n1943090\n1943096\n1943101\n4689912\n1943236\n1943250\n1944106\n1944113\n4689963\n1944456\n1944462\n1944520\n1944523\n1944618\n1944619\n1944627\n1944629\n1944631\n1944635\n1944638\n4689905\n1945122\n1945225\n1945715\n1945863\n1945893\n5142067\n1946720\n1946763\n1947446\n1947449\n1947459\n1947491\n1947492\n1950272\n1950591\n1951157\n1951170\n5142749\n1758839\n1758850\n1760172\n1760175\n1761788\n1761789\n1762657\n1762900\n1762902\n1764178\n1764553\n5109848\n5109870\n5109872\n5109882\n8352161\n1765508\n4687817\n4687827\n7800469\n1765898\n11034779\n1767368\n1767381\n1767430\n10575632\n10597823\n5883925\n9356770\n1768972\n1769095\n1769114\n1769209\n1769225\n1769245\n1769250\n1769260\n1769271\n1769272\n1769283\n1769293\n1769294\n1769298\n1769308\n1769310\n4688049\n4688075\n4688092\n4688098\n1771357\n1772668\n4687565\n1774797\n4301304\n6115946\n1774918\n10032003\n1775279\n1775631\n1777120\n5111064\n5111195\n5111214\n5111249\n5111535\n5111600\n1779269\n1779276\n1779382\n1780072\n5111967\n1782354\n1782466\n4687661\n1784513\n1784761\n1785145\n1785149\n1785166\n1785181\n1785217\n1785220\n1785314\n1785329\n1785725\n1787165\n1787185\n1787226\n4687681\n10161728\n1789637\n1789957\n4687906\n1791793\n1791837\n4687930\n1791862\n5113394\n1793661\n1795068\n1795110\n4688166\n4688169\n4688172\n1798084\n1802776\n4532269\n10659737\n10378302\n9890366\n9910243\n10967713\n11054256\n10121804\n5109270\n5109349\n5109418\n5109437\n4688142\n1792555\n1792560\n8108800\n1770849\n1771203\n1771245\n1771296\n1771308\n1765752\n5113853\n5108671\n5108724\n5108737\n5108787\n1759351\n1789530\n10370112\n11437060\n11615549\n4532266\n6115772\n6115820\n6115822\n6115830\n9893740\n1782277\n1781248\n1767259\n1792814\n9325654\n10458175\n10683012\n10658576\n1822257\n1822916\n1822917\n1823493\n5118798\n1824280\n1826020\n1825238\n1825950\n1825956\n1826017\n1826823\n1827429\n1827507\n11905965\n1827802\n1827810\n1827826\n1827829\n10194663\n10551923\n5806166\n1892821\n1893699\n1893787\n4704279\n5128224\n5128225\n1895448\n1895956\n5806175\n5806177\n4704400\n4704401\n4704404\n4704407\n1899931\n1899932\n1899940\n1899943\n1899947\n1899950\n1899956\n1900939\n1901669\n5130456\n5130464\n5130476\n1902233\n1902244\n1902248\n1904728\n1904798\n1904996\n1907683\n1909216\n1909436\n1909453\n1909457\n4704352\n4704356\n1910753\n1910809\n1911755\n1913091\n1915031\n1915144\n11535847\n5135839\n5136594\n5136713\n5136868\n5136939\n5137128\n5137257\n4704500\n4704501\n5131493\n5133088\n5806167\n6100725\n7642610\n1910629\n1910648\n1951492\n1951874\n10548683\n5102423\n1735273\n5102432\n1941683\n1941702\n1941713\n5121177\n1843313\n1843326\n1843331\n1843362\n1843370\n1843379\n5120341\n5120343\n5120357\n5120368\n5120379\n11854390\n9755262\n1843429\n1843485\n1843590\n1731097\n1731221\n11431507\n10535684\n11563728\n11904618\n5101502\n10049887\n10134558\n10307487\n5806352\n5806353\n10629470\n1878744\n1878826\n1879227\n1879339\n1879340\n1879405\n1879408\n1879465\n1879471\n12231152\n5126376\n10489219\n5126635\n5126637\n1880352\n1880353\n1880858\n1880982\n1880986\n1881018\n1881019\n1881031\n1881041\n1881089\n1881132\n1881157\n9819403\n1881228\n1881320\n1881329\n1881336\n1881340\n10046436\n10348110\n10441857\n1881424\n1881485\n1881504\n1881515\n10751438\n1882215\n1882266\n1882272\n1882355\n5126798\n5126843\n5126922\n5127020\n5127039\n5127044\n1882753\n1882767\n1882771\n1882773\n1882884\n1882905\n10156181\n10643403\n1882965\n10464411\n1883024\n1883028\n1883067\n4687288\n1883394\n5127097\n10069243\n1883775\n1883881\n1883943\n1883968\n1884228\n9294363\n10171108\n10209845\n1884434\n1884437\n1884449\n1884461\n1884479\n9837762\n1884531\n6120980\n1884816\n1884890\n1884909\n1885263\n1885569\n1885572\n1885605\n1885630\n6133182\n9957790\n1885702\n1885763\n1885836\n1885919\n1885945\n1886088\n1886251\n1886362\n1886526\n10610809\n1886720\n1886729\n10613467\n1887036\n1887052\n1887054\n1887462\n1887580\n1887585\n1887691\n1887894\n1888123\n1888537\n5127394\n1888906\n1888913\n1888926\n1889043\n1889050\n1889071\n1889074\n1889239\n1889242\n1889249\n1889272\n1889277\n1889356\n1889381\n1889552\n1889563\n1890031\n1890187\n10058481\n1890320\n1890335\n5127530\n10180624\n1890410\n1890670\n1891236\n1891299\n10071588\n1891308\n1891533\n1891583\n10072800\n1892458\n1892462\n10446295\n6133140\n5771877\n10117959\n10227418\n4532125\n9967529\n9900218\n10145421\n10348945\n10521368\n10579230\n10594210\n6120803\n6133232\n6121010\n10257673\n10556366\n6121218\n10502505\n10397209\n6133154\n10462708\n6133158\n10063575\n10375403\n1886374\n1889769\n1889875\n5127592\n5127595\n5127629\n5127638\n5127644\n5127669\n5127675\n5127698\n5802339\n1888638\n1888639\n1883885\n1831136\n4708183\n1731292\n5122307\n1853578\n10222583\n1853855\n1854019\n1854021\n10452421\n10546013\n11428453\n1854249\n5122430\n5122455\n5806333\n1858674\n1858718\n1858762\n1858930\n1858973\n1859061\n4536292\n9768621\n1859453\n9675743\n9749806\n6133397\n1859932\n1860026\n6097269\n9759340\n1864897\n1867788\n10883659\n1868025\n1861457\n1861458\n1861644\n5123663\n1861951\n1861953\n1861958\n1862026\n1862293\n1862331\n1862363\n1862370\n1862403\n9836014\n1862434\n1862441\n1862449\n1862455\n1862475\n1862516\n1862521\n1862526\n6106708\n1862757\n1863034\n1863051\n1863384\n9899724\n1863880\n1863955\n4703479\n5124080\n8133328\n11954157\n5124423\n5123852\n1992634\n9893936\n1992889\n1992907\n1992936\n1992938\n1993021\n1993045\n6133769\n10022517\n1953217\n10132811\n10644798\n11503857\n1954025\n5143279\n1954120\n1830419\n1830435\n1754619\n1754803\n1754806\n1754814\n4689394\n1830669\n8254441\n1855804\n1855807\n1855813\n1856005\n5122779\n1857020\n1857033\n1857097\n1857143\n1857180\n1857258\n1857315\n1857380\n1857626\n1857828\n1857829\n1857840\n1857882\n1857900\n1857935\n1857948\n1858100\n1858163\n1858283\n1858404\n1858411\n1858488\n1937698\n1937712\n1937745\n1937769\n1937988\n1938069\n1938074\n5141177\n5141187\n5141254\n5803065\n1937444\n1937474\n4693675\n1937618\n1939131\n1939156\n1838251\n1838255\n1838276\n1838289\n1838297\n1838304\n1838308\n1838331\n4685893\n4685097\n1833477\n4685485\n1833562\n4686368\n1833600\n1833653\n1833834\n1834019\n1834078\n4685138\n4685219\n4685271\n1834497\n1834850\n1835082\n1835121\n1835123\n1835128\n1835345\n1835555\n1835609\n1835612\n1835635\n1835644\n4685116\n1835790\n1835821\n1835828\n4686483\n1836873\n1836899\n4685431\n4685448\n1837053\n1837057\n1837150\n1837159\n1837172\n1837569\n4686743\n1838034\n4685065\n1838218\n1838224\n4685299\n4685306\n1838333\n4686617\n4686620\n4686621\n4686628\n1838958\n1838960\n4528702\n4685566\n4685576\n1839317\n1839323\n1839325\n1839333\n1839494\n5120053\n5120058\n5120063\n4685645\n4685650\n4685653\n4685655\n4685662\n4685669\n4685678\n4685683\n1840258\n1840260\n1840726\n1840774\n1840776\n1840796\n1840812\n1840844\n1840974\n4686042\n4686055\n4686111\n4686133\n4686164\n4686190\n4686214\n4686264\n4686266\n1841101\n1841221\n1841302\n4685972\n5802248\n5802256\n5802257\n5802259\n4686039\n4686015\n4686016\n4686018\n4686022\n4686027\n4686029\n4684521\n4684591\n4684789\n4684888\n4684893\n4684925\n4684958\n4685629\n4685631\n4685778\n4685810\n4685980\n4685981\n4686355\n4686385\n4686386\n4686531\n4686532\n4686656\n4686697\n4686702\n4686844\n4686956\n10213314\n10225227\n1800441\n1800473\n1800522\n1800562\n10010361\n9859868\n9883274\n1800691\n1800843\n1800844\n5114394\n5114409\n9267364\n10240592\n1801170\n5114515\n1801303\n1801305\n1801316\n1801432\n1801461\n1801519\n10026605\n10066605\n10088502\n10372377\n10448500\n10573425\n11496990\n11508472\n11594541\n11596898\n11698552\n11836409\n11871044\n1801787\n1801903\n1801922\n1802978\n4534792\n6112610\n6112661\n6133811\n9960072\n1802090\n1802702\n1802830\n1802833\n1802888\n1802998\n1803014\n1803021\n1803035\n1803039\n1803078\n1803091\n9485481\n10942408\n10264193\n5114303\n5114353\n", + "regions/caribbean.classes": "12170988\n1921992\n1921993\n1922015\n5140627\n1934570\n1935078\n1935295\n1935301\n1935343\n5140969\n5140980\n1936161\n1936378\n1936388\n1936565\n1936566\n1936649\n10331171\n9620499\n1868575\n1992315\n1846849\n1846860\n1850798\n5110390\n5108951\n8331687\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n1767307\n1767499\n1768283\n1769000\n1770038\n1771859\n5110326\n5110327\n5110533\n1776163\n1777179\n1777737\n1777942\n1781029\n1782211\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1790240\n1790246\n1790248\n1790308\n7785540\n5112843\n1792827\n1794637\n1795049\n1796338\n1798427\n4532352\n1803163\n1803218\n1803266\n1804331\n5115046\n1804759\n1804760\n1805691\n1805717\n1806702\n1806871\n1806872\n1806887\n1807553\n1807569\n1809066\n1809135\n1809491\n1809499\n1810145\n5116145\n5116198\n5116252\n1810846\n7535515\n5116423\n1814182\n1814692\n1815373\n5117414\n1816570\n5117685\n1817940\n1818252\n10395440\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n8177591\n1775796\n5884258\n7716829\n8299504\n8968321\n1784959\n1785072\n6117485\n7611914\n1780646\n1780668\n1777463\n5123542\n8766638\n1872514\n1872873\n1873051\n1873079\n1873398\n7372375\n1876542\n1877002\n5125525\n5143284\n5143285\n5131957\n1736623\n1739617\n1741823\n1741826\n1935498\n4299071\n9457324\n9622955\n1936026\n1920844\n1920900\n1920923\n1921123\n1922455\n10278292\n1922637\n1922868\n1923678\n1923679\n1923997\n8992718\n9157410\n4300393\n4300399\n8389961\n8904480\n1927301\n1927302\n1927988\n1927996\n1928009\n4300406\n1928589\n1929046\n1929129\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930263\n1930270\n1930361\n1930391\n1930410\n1930422\n1930563\n1930581\n1930621\n1930653\n1930654\n1930728\n1930772\n1930779\n1930830\n1931119\n5139864\n1931310\n5139897\n5139908\n5139909\n1932172\n1932175\n5140033\n5140054\n1933260\n5140534\n1935853\n1935872\n1935888\n1935912\n1935916\n1935935\n5139928\n4300268\n9469139\n9156458\n1751980\n1752034\n1752109\n1752477\n1752775\n5105379\n5105447\n5105491\n5105553\n1753603\n1753604\n1753661\n1753833\n1753871\n1919128\n1919130\n1919149\n1919239\n1919282\n1919287\n1919289\n5137540\n1919646\n1919652\n1919653\n1919656\n4701298\n7661785\n5137553\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n5137819\n5137851\n5714819\n1920463\n1920552\n1920571\n1920574\n1920581\n1920691\n1920803\n12234544\n12236627\n1920621\n1956099\n1956215\n1959637\n10650351\n1962051\n1962086\n1962118\n1962120\n1963433\n5144363\n1966088\n1966185\n1968313\n1968315\n1968324\n1968942\n5145560\n1973665\n9590066\n1975287\n1976073\n1976255\n1976651\n1978464\n9243264\n1981160\n1981973\n5148593\n5149237\n1985647\n1985952\n1989582\n1990594\n1990998\n5880539\n5150002\n5150027\n12252926\n11423843\n12239491\n1942141\n1942170\n12286003\n1942416\n1942455\n1942509\n1942558\n5141662\n5141763\n1943571\n1943588\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n1943942\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944421\n1944574\n1944769\n4301934\n1944815\n1944832\n5141913\n9551544\n1945302\n1945312\n1945462\n1945477\n1946074\n1946097\n4301426\n1946167\n1946177\n1946333\n1946469\n1946520\n1946544\n1946550\n1946577\n1946582\n1947021\n1947037\n1947048\n1947147\n5142176\n1947577\n1947587\n1947597\n12208168\n1947973\n1947979\n1947980\n1948042\n1948046\n1948158\n7603634\n1948446\n1948521\n1948630\n4301945\n1948823\n1948858\n1948890\n1948947\n1949049\n1949105\n1949322\n1949451\n1949515\n1949592\n1949621\n7726809\n9395000\n5142436\n1950017\n1950019\n1950044\n1950052\n1950153\n1950197\n1950654\n1951097\n1951121\n1951125\n5715127\n5142829\n5977203\n1945374\n12175154\n9366762\n1761892\n1764686\n1764693\n1765155\n5109850\n5109855\n5109881\n5109954\n5109958\n1767571\n1767719\n1777727\n1777730\n1780330\n1780390\n1780440\n1782424\n1783811\n5112414\n1785168\n1785331\n7400814\n1791331\n5113365\n1796274\n1796276\n7383338\n7689966\n7882824\n8405656\n1798288\n10118643\n11615055\n9307254\n1770955\n5108665\n1797903\n1824189\n1825373\n1825391\n1826772\n10043566\n1903598\n1892509\n1892729\n1892770\n4299095\n1892851\n5127805\n5127814\n5128005\n5128007\n5128011\n5128034\n1894076\n1894329\n1895250\n1895709\n1895768\n1895789\n9016382\n1895886\n1896087\n5128433\n5128475\n5128488\n5128491\n1896628\n1896749\n10353400\n1896756\n1896774\n1896932\n5129251\n9590057\n11701883\n5925238\n1897977\n1897990\n1898143\n1898174\n1898348\n1898350\n1898367\n1898374\n1898391\n1898424\n6228464\n5129473\n5129480\n5129481\n5129489\n5129496\n5129524\n5129535\n9255328\n1898686\n1899048\n4299211\n4299213\n1899893\n9446281\n1900024\n1900026\n1900172\n1900175\n1900195\n1900197\n1900199\n1900233\n1900249\n1900303\n1900408\n1900485\n1900618\n1900632\n1900787\n1900830\n1900872\n9072828\n1901261\n8247566\n5130314\n5130322\n5130326\n5130330\n1901744\n1901801\n5130514\n5130528\n5130548\n9357385\n1902378\n1902406\n1902451\n1902458\n1902479\n1902620\n1902623\n1902642\n1902670\n1902676\n1902699\n1902880\n1903607\n5131608\n1904382\n5131951\n1905451\n1907190\n1907272\n1907395\n1908168\n1908199\n1908203\n1908204\n1908256\n1908262\n1908299\n1908302\n1908577\n1908995\n1909019\n1909128\n1909170\n1909185\n1909191\n8727750\n5133255\n5133265\n5133451\n5133523\n5133565\n1910773\n5133581\n1911076\n5133591\n5133595\n5133621\n5133622\n8548427\n12322536\n1911966\n1912003\n1912036\n1912119\n5133736\n5133786\n1914416\n1914424\n1914465\n1914501\n1914697\n1915193\n1915339\n1915396\n1915401\n5136372\n1916701\n1917827\n1917830\n1917834\n1918077\n1918078\n1918082\n1918086\n1918094\n1918097\n1918149\n1918268\n1918269\n1918280\n1918596\n5137408\n1918972\n1918984\n1919010\n5128045\n5128067\n5128118\n5131982\n5132137\n5132221\n5132347\n5132360\n5132374\n5132429\n5132483\n5714312\n9541133\n5133088\n5714299\n5714302\n5130557\n1910628\n5132917\n5132940\n5133008\n9964857\n5125118\n1941570\n1941717\n5101371\n5101527\n7628188\n1879052\n1879160\n1879253\n1879413\n5126494\n5126585\n5126637\n1880505\n1880623\n5126663\n10861282\n11968849\n1881079\n5126721\n5126751\n1881917\n5126756\n1882786\n10107015\n1882819\n1882941\n1882960\n1883067\n10807787\n8981028\n5127090\n1883968\n8324720\n1884479\n1884774\n1884923\n1885099\n1885158\n1885950\n1886251\n1886729\n10510138\n1887634\n1888047\n1888292\n1888306\n1888336\n1888646\n1888955\n1889536\n1890089\n1890247\n11044778\n7543006\n1890368\n1890876\n1891035\n1891932\n1892131\n1892311\n1892477\n5771877\n7864212\n8146570\n8425580\n6120803\n6121010\n6121218\n1886374\n1889721\n1889850\n5127631\n1886123\n1853242\n7946946\n1858930\n9760511\n6133397\n9547681\n1864905\n1865107\n1865132\n5124557\n5124595\n5124598\n1865547\n1865557\n1865709\n1865764\n1865837\n1866105\n1866220\n1866311\n1866902\n1867218\n1867224\n5124873\n1867773\n10591617\n9634178\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1862033\n1862044\n1862049\n1862078\n1862087\n1862088\n1862094\n1862096\n1862123\n1862139\n1862163\n1862181\n1862198\n1862207\n5123701\n5123704\n1862547\n1862551\n1862658\n1862928\n1863109\n1863151\n5123784\n5123801\n7803585\n1863366\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863724\n1863732\n1863734\n1863742\n1863757\n1863856\n1863858\n1863864\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n5124249\n5124250\n5124268\n5124442\n5124448\n5124452\n5123954\n5123956\n5123961\n5123971\n5123979\n5123983\n5123991\n5123996\n1863978\n1863982\n1864004\n1864021\n1864058\n1864068\n1864084\n1864098\n1864103\n1992634\n5150053\n1953499\n5143232\n5143234\n1953998\n1954084\n1830681\n1953166\n1751497\n1751524\n1751588\n1751590\n1751625\n5105217\n5105227\n5122556\n5122581\n1857068\n1858283\n10038125\n1937655\n1937793\n1937885\n1938069\n1938112\n1938159\n4299871\n10600208\n12200213\n1937064\n1937090\n1937110\n1937136\n1937144\n1937162\n1937167\n1937530\n1939130\n1939136\n5141324\n1856555\n4534796\n9385576\n8924506\n", + "regions/central_america.classes": "12170988\n1934715\n1934991\n1935301\n5140969\n5140980\n1936161\n1936378\n1936388\n1936391\n1936566\n5141085\n10331171\n1868535\n10100176\n10517417\n1868575\n1992315\n1732901\n1734384\n5102324\n1845314\n1845385\n1845455\n1846439\n1846849\n1846860\n1850729\n1850771\n1850798\n5122062\n5122121\n5122131\n1851845\n10508467\n5119890\n5110390\n1760385\n1760397\n1760400\n5108951\n1761101\n1761838\n8331687\n8379616\n9354496\n9546910\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n5110044\n1766839\n1766880\n1767320\n1767499\n9384861\n1768283\n1769000\n1770038\n1770044\n1770263\n1771859\n5110326\n5110327\n5110533\n1776163\n1777052\n1777179\n1777737\n1777942\n5110891\n9610080\n1779740\n1781029\n9305011\n9630748\n1781944\n1781946\n5112060\n1782214\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1788891\n5112626\n1790230\n1790240\n1790246\n1790248\n1790257\n1790258\n1790268\n1790274\n1790281\n1790287\n1790308\n1790787\n1790945\n7785540\n5112843\n1791151\n1791372\n9382044\n1792827\n1792831\n1794637\n1795042\n1795049\n9622322\n1797121\n1797521\n9410076\n7598729\n1798427\n4532352\n8150450\n1799183\n1803218\n10033898\n1804404\n1804409\n1804522\n5115046\n1804759\n11907485\n1804974\n1805197\n1805271\n1805537\n1805691\n1805717\n1805938\n1805955\n1806687\n1806690\n1806702\n9394138\n9491341\n1806872\n5115500\n1807514\n1808592\n8929537\n1809066\n1809127\n1809135\n1809294\n1809299\n1809348\n1809491\n1809499\n1810121\n1810172\n5116128\n5116134\n5116145\n5116198\n5116252\n5116293\n9350900\n1810743\n1810824\n1810846\n1810866\n9389851\n7535515\n1811019\n1811079\n1811439\n5116332\n5116358\n5116423\n1814182\n1814336\n1814359\n1814365\n5117348\n1814665\n1814692\n1814863\n5117414\n9434954\n5117430\n5117462\n1816570\n5117685\n1817086\n1817734\n1817749\n1817797\n11725616\n1817864\n1818252\n5118046\n11758730\n1818454\n1819310\n9391467\n1820940\n10395440\n9290866\n9315577\n9406984\n9599150\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n1813413\n1813415\n8177591\n1775796\n5884258\n7716829\n8299504\n8968321\n1784959\n1785024\n5884188\n6117485\n7611914\n7924383\n1780646\n1777463\n1777471\n1838360\n1860184\n10308365\n5123419\n1870037\n1870308\n1870727\n1870988\n1871175\n10336328\n1872452\n1872514\n1872873\n1873079\n5125545\n1873398\n7372375\n1873753\n10143814\n1875478\n1876542\n1876665\n5125916\n5125917\n1877282\n1877443\n5976937\n5125525\n5143284\n5143285\n12018158\n5131957\n1941294\n1736623\n10274976\n1736860\n4530608\n1737904\n1737929\n1741820\n1741823\n1741826\n11923027\n10073044\n9948031\n1935498\n4299071\n9457324\n1936026\n1920844\n1920889\n1920900\n1920923\n1921053\n10657453\n1921123\n8825450\n1922039\n1922041\n1922219\n1922455\n10278292\n1922637\n1922865\n1922868\n1922889\n1922890\n1923505\n8913017\n1923678\n1923679\n1923997\n1924106\n1924176\n1924518\n1924521\n8840017\n8992718\n9157410\n9478718\n10120854\n1925429\n1925498\n1925515\n4300384\n4300393\n8904480\n1925922\n1926834\n1927988\n1927996\n1928009\n4300406\n1928214\n1928215\n8846776\n1928584\n1928589\n1929046\n1929129\n5139578\n1929962\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930270\n1930288\n1930289\n1930331\n1930361\n1930410\n1930422\n1930451\n1930563\n1930653\n1930728\n1930772\n1930830\n1931119\n1931122\n1931126\n5139864\n1931310\n5139897\n5139898\n5139908\n10113190\n11417741\n1932056\n1932172\n1932386\n1932576\n1932879\n5140033\n5140054\n5140063\n1933260\n1935853\n1935872\n1935878\n1935888\n1935901\n1935912\n1935916\n1935925\n1935931\n1935935\n9867272\n5139928\n4300268\n9469139\n9975698\n9156458\n1751980\n1751986\n1752034\n1752109\n1752111\n9776414\n9941073\n1752775\n1752825\n1752832\n11507608\n5105367\n5105369\n5105379\n5105380\n5105447\n5105491\n5105508\n1753603\n1753604\n1753661\n1753833\n1753864\n1753871\n10514620\n5137512\n12181811\n12226416\n12251247\n1919125\n1919128\n1919130\n1919145\n1919146\n1919149\n1919173\n1919235\n1919239\n1919245\n1919282\n1919289\n5137540\n1919646\n1919649\n1919652\n1919653\n1919656\n4701298\n4701336\n7661785\n5137553\n1919700\n1919705\n10703948\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n1920192\n5137800\n4701136\n5137817\n5137819\n5137851\n5714819\n1920426\n1920437\n1920461\n1920463\n1920496\n1920552\n1920571\n1920581\n1920691\n1920803\n1920809\n5137672\n5137694\n12191141\n12206386\n12234544\n12236627\n1920621\n1956098\n1956099\n1958049\n5143964\n1958121\n1959637\n1960090\n1960166\n1960255\n1960268\n1960315\n1960503\n1961155\n1961361\n10650351\n1962051\n1962086\n1962118\n1962120\n9592714\n9264326\n4302252\n1963433\n1963633\n5144363\n1964698\n1965586\n1965697\n1965887\n1966088\n1966185\n1967226\n1967346\n1968313\n1968321\n1968324\n1968538\n5144583\n1968942\n10088253\n5144953\n5145078\n5145466\n5145560\n1972101\n5146179\n1973245\n1973665\n10404426\n5146820\n5147018\n5147139\n5147179\n5147211\n9469300\n9590066\n1975287\n1976073\n1976651\n1976746\n9617496\n1978464\n1978671\n9243264\n5148277\n5806132\n1978958\n1978959\n1980245\n1980247\n1981144\n1981160\n1981252\n1981277\n1981959\n1981973\n5148531\n5148593\n9307713\n9544337\n5148743\n5148952\n1985485\n5149222\n1985647\n1985952\n1986192\n1986906\n1987330\n1989582\n1990270\n1990331\n1990335\n1990357\n1990594\n1990998\n5880539\n9392058\n9438677\n4302221\n9621086\n9281181\n9403481\n9448761\n9545331\n9497623\n9619088\n9237031\n9299326\n10221195\n10288719\n9363893\n9391442\n5149753\n5149811\n1980462\n9256786\n5150002\n5150027\n12200261\n11470872\n11654707\n11776315\n11892494\n12252926\n11423843\n11670842\n12173621\n12247340\n12252340\n12239491\n1942098\n1942141\n1942170\n1942171\n12286003\n1942341\n1942416\n1942455\n1942509\n4301744\n1942558\n1942670\n5141662\n1942854\n5141697\n1943054\n4302008\n5141743\n5141763\n1943563\n1943571\n1943588\n4301355\n1943631\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n1943954\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944574\n1944769\n4301934\n1944798\n1944815\n1944832\n5141913\n9551544\n1945081\n1945302\n1945312\n1945462\n1945476\n1945477\n4301942\n1945957\n1946074\n1946078\n1946079\n1946097\n1946163\n1946177\n1946310\n1946327\n1946333\n1946469\n12233838\n1946500\n1946509\n4302101\n1946520\n1946544\n1946550\n1946577\n1946582\n5142086\n1946853\n1946865\n1946901\n1946981\n1946983\n1946989\n1946992\n1947021\n1947037\n1947048\n1947147\n5142166\n5142175\n5142176\n1947402\n1947507\n1947568\n1947587\n1947588\n1947597\n1947842\n1947894\n12208168\n1947973\n1947976\n1947979\n1947980\n1948042\n1948046\n1948158\n7603634\n1948439\n1948446\n1948521\n1948826\n1948865\n1948890\n1948947\n1949049\n1949105\n12353663\n1949285\n1949322\n1949449\n1949451\n1949466\n1949492\n10574663\n1949512\n1949515\n1949592\n1949621\n7726809\n9395000\n1949687\n5142424\n5142436\n5142583\n1950017\n1950019\n4301876\n1950044\n1950052\n1950133\n1950153\n1950197\n1950578\n1950654\n1950767\n1950856\n1951062\n1951097\n1951116\n1951121\n1951125\n1951133\n1951217\n4301897\n5715127\n12180041\n12206694\n1951340\n5142829\n5977259\n5977260\n1948771\n1948779\n1948789\n1948799\n1948800\n1948802\n1948803\n1948810\n1945374\n1945378\n12175154\n12263736\n1758767\n1758771\n1758781\n1758783\n7911151\n9366762\n1759799\n1759881\n1760309\n1761143\n1761892\n1764686\n1764693\n1764917\n1765155\n5109845\n5109850\n5109855\n5109881\n5109954\n8352161\n1766237\n1766287\n1767052\n1767571\n1767584\n9511345\n5772169\n1767719\n1770659\n1773783\n1774243\n9550265\n6115953\n1775509\n1776467\n1777727\n1777728\n9310286\n5111141\n5111568\n1780309\n1780390\n1780407\n1780437\n1780440\n9374443\n9289753\n9457757\n9500945\n1783811\n9348210\n9465978\n9492640\n1784422\n1784461\n5112414\n4534290\n1785168\n1785331\n9636267\n7400814\n1786360\n1786733\n1786808\n1787438\n1788485\n1791331\n1792430\n5113365\n9240216\n1792817\n1792996\n11781335\n1796276\n7383338\n7882824\n1798288\n1799433\n1799675\n1799774\n9388726\n9571514\n1799900\n1799925\n10446574\n8729319\n8562506\n9241105\n9452702\n9484411\n9363692\n9556427\n7779226\n8818378\n8928353\n9538684\n10118643\n9342344\n11452421\n11615055\n11626773\n11627464\n11660145\n11713256\n11753804\n5109299\n5109369\n5109413\n8943174\n9038042\n9307254\n9404919\n5112130\n7398419\n1792564\n1774929\n1770955\n1765751\n5108665\n11783188\n1797903\n1776094\n9354669\n5118509\n1824259\n1825373\n1825391\n1825428\n5118944\n1826156\n1826169\n1826181\n1826222\n5119046\n1826772\n1827716\n1828105\n1828268\n10043566\n1903598\n1892509\n1892729\n1892736\n1892742\n1892759\n4299095\n1892851\n1892858\n1892863\n5127805\n5128005\n5128007\n5128034\n1893337\n1893480\n9113409\n10653980\n1894074\n1894087\n1894088\n1894329\n1894342\n1895176\n1895185\n1895203\n1895733\n1895768\n1895820\n8763986\n9016382\n1895886\n1895904\n1896087\n5128433\n5128438\n5128475\n5128488\n5128491\n1896614\n1896628\n1896658\n1896749\n1896754\n10353400\n1896763\n1896774\n1896876\n1896932\n5129251\n9590057\n11701883\n5925238\n8367663\n1897985\n1897990\n10073321\n10365587\n1898143\n1898174\n1898203\n10321900\n1898286\n4299368\n4299370\n5714369\n1898358\n1898367\n1898391\n1898402\n1898414\n1898416\n1898424\n1898431\n5129387\n5129451\n6228464\n5129473\n5129481\n5129489\n5129496\n5129515\n5129517\n5129520\n5129524\n5129531\n5129535\n9208233\n9255328\n1898686\n1898841\n1898865\n1899048\n4299211\n4299213\n1899873\n1899893\n1899994\n1900024\n1900026\n8847500\n9208918\n9925669\n1900131\n1900134\n1900175\n1900197\n1900199\n1900233\n1900249\n1900295\n1900303\n1900345\n1900485\n1900578\n1900618\n1900626\n1900787\n1900825\n1900830\n1900872\n9190731\n1901001\n1901189\n1901261\n1901268\n8247566\n1901735\n1901744\n1901794\n1901801\n1901804\n1901810\n11135155\n11219489\n12258652\n5130400\n5130514\n5130528\n5130548\n9357385\n1902211\n1902300\n1902378\n1902406\n1902430\n1902458\n1902479\n1902502\n5130559\n1902620\n1902642\n1902670\n1902676\n1902680\n1902692\n1902702\n1902703\n1902704\n4299218\n1902880\n1902885\n1903028\n1903607\n1903658\n1903683\n5131597\n5131608\n5131637\n1904382\n7776011\n5131951\n1905242\n1905451\n1907153\n1907235\n1907250\n1908011\n1908055\n1908123\n1908144\n1908146\n1908148\n1908150\n1908199\n1908203\n1908204\n1908207\n1908256\n1908258\n1908302\n1908577\n5133035\n10542548\n1908995\n1909019\n1909064\n10046510\n1909070\n1909128\n1909170\n1909185\n1909211\n9851867\n8727750\n5133142\n5133251\n5133265\n5133523\n10558140\n5133565\n5133568\n1910773\n5133581\n1911076\n5133595\n5133609\n5133621\n5133623\n5133634\n5133635\n5133637\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n5133736\n10638244\n9277330\n1914410\n1914416\n1914420\n1914424\n1914433\n1914435\n1914440\n1914442\n1914465\n1914477\n1914496\n1914498\n1914500\n1914501\n1914511\n4299201\n1914697\n1915193\n9185656\n9988287\n1915339\n1915396\n1915401\n1915417\n1915427\n1915430\n1915456\n1915506\n10487080\n1916700\n1917827\n1917830\n1917834\n1918077\n1918078\n1918082\n1918094\n1918097\n1918133\n10250149\n1918220\n1918269\n1918280\n1918293\n1918596\n1918968\n1918972\n1918984\n1918988\n1919007\n5128045\n10415847\n5130682\n10259880\n5131982\n5132003\n5132079\n5132084\n5132137\n5132225\n5132246\n5132254\n5132317\n5132346\n5132347\n5132360\n5132398\n5132429\n5132446\n5714312\n9541133\n5133088\n5714299\n5714302\n5130557\n10662329\n12045866\n4299778\n5132917\n5132940\n5132956\n5133008\n9964857\n5142842\n1868334\n1868360\n5125118\n1941570\n1941717\n1941719\n5101371\n9114044\n5101527\n1731812\n7628188\n1878688\n1878705\n1879052\n1879160\n1879253\n1879348\n1879398\n1879413\n10366679\n10874932\n1879452\n1879471\n5126494\n5126517\n5126533\n5126585\n5126637\n1880505\n10056494\n1880537\n1880623\n5126663\n10861282\n11968849\n1881079\n1881111\n1881139\n1881166\n5126721\n1881767\n1881822\n5126751\n1881917\n1882089\n1882190\n1882195\n5126963\n10107015\n1882812\n1882816\n1882818\n1882941\n1882960\n1883067\n10807787\n8981028\n5127089\n1883968\n1883975\n8324720\n9864281\n1884001\n1884479\n1884685\n9308930\n1884774\n1884923\n1885099\n1885158\n1885642\n1885950\n1886251\n5127209\n1886501\n1886729\n10510138\n1887004\n1887024\n1887341\n1887459\n5127339\n5127355\n1887565\n1887634\n1888009\n1888047\n1888292\n1888306\n1888338\n1888435\n5127378\n1888646\n1888695\n1888823\n12106417\n1888955\n1889028\n1889267\n1889536\n1890089\n1890247\n1890368\n1890374\n1890417\n1890487\n1890512\n1890599\n1890730\n1890737\n1890794\n1890876\n1890885\n6207059\n1891035\n1891074\n1891167\n1891488\n10310835\n1891755\n1891932\n1892131\n1892230\n1892311\n1892355\n1892420\n1892427\n1892477\n1892488\n5771877\n7864212\n8146570\n8425580\n6121010\n6121218\n8876855\n1886374\n1889721\n1889745\n1889850\n5127562\n5127631\n5127680\n5802339\n1886123\n1886207\n1831136\n1853242\n1853312\n1854143\n7946946\n1858615\n9777614\n1858674\n1858930\n1859046\n1859161\n8790054\n9700261\n10103570\n1864905\n8877458\n9240588\n9355107\n9531432\n9606779\n1865102\n1865107\n1865108\n1865132\n1865299\n1865333\n1865353\n5124557\n5124589\n5124595\n5806244\n1865572\n1865590\n1865709\n1865764\n1865837\n1865842\n1865853\n1865963\n1866003\n1866085\n1866100\n1866105\n1866123\n1866201\n1866214\n1866311\n1866330\n1866496\n1866550\n1866570\n1866601\n1866902\n5124873\n1867515\n1867525\n1867535\n1867773\n10247309\n10591617\n9634178\n10248521\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1861823\n1861887\n1862033\n1862044\n1862047\n1862049\n1862078\n1862083\n1862087\n1862088\n1862091\n1862094\n1862096\n1862123\n1862129\n1862139\n1862163\n1862181\n1862198\n1862207\n1862225\n5123701\n5123704\n1862547\n1862551\n1862595\n1862624\n1862658\n1862841\n1862923\n1862928\n1863021\n1863088\n5123775\n1863109\n1863151\n5123784\n5123801\n7803585\n1863366\n1863407\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863732\n1863734\n1863742\n1863757\n1863856\n1863858\n1863864\n1864164\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n5124172\n5124200\n5124249\n5124250\n5124268\n5124442\n5124443\n5124450\n5124452\n5123954\n5123956\n5123961\n5123968\n5123971\n5123979\n5123983\n5123991\n5123996\n5124000\n8849480\n1863978\n1864004\n1864008\n1864021\n1864046\n1864058\n1864068\n1864070\n1864084\n1864098\n1864103\n1864106\n1993643\n1992817\n1953499\n5143232\n9053308\n9424853\n1953970\n1953998\n1954084\n5105649\n5105656\n5105671\n10322104\n1830681\n1953166\n1751497\n1751524\n1751572\n1751588\n1751590\n1751609\n1751625\n1751626\n9332550\n1751670\n1751684\n1751785\n5105193\n5105217\n5105218\n5105227\n1854920\n5122526\n5122538\n5122581\n5122646\n5122647\n5122696\n1855358\n1856581\n1857143\n1857380\n1858283\n10038125\n1937642\n1937655\n1937688\n1937722\n1937751\n1937758\n1937793\n1937803\n1937816\n1937846\n1937885\n1938016\n1938059\n1938112\n4299871\n10600208\n12211009\n1937090\n1937109\n1937110\n1937124\n1937136\n1937144\n1937162\n1937167\n1937527\n1939130\n1939136\n5141321\n5141324\n5141333\n5141342\n4694313\n1856555\n4534796\n1800963\n8924506\n9426252\n", + "regions/east_asia.classes": "1837646\n1935849\n1992277\n1992283\n1992315\n1860668\n1732063\n1732114\n1732115\n1732416\n1732452\n1732508\n1732521\n1732525\n1732565\n1732662\n1732685\n1732763\n1732830\n1732842\n5101640\n1733154\n1733155\n1733243\n1733258\n1733394\n1733412\n1733484\n4525266\n5734897\n5101745\n5769191\n1734453\n5102207\n5102242\n1734496\n1734519\n1734704\n1734826\n5734891\n5102287\n5102300\n1832143\n5734640\n11453841\n1832235\n1832248\n1832254\n5734645\n1832612\n11505614\n8825467\n1845270\n1845547\n1845607\n4529566\n1846604\n10785815\n11730078\n1847062\n1847157\n1847260\n1847392\n4528547\n1847641\n1848273\n1848356\n1848378\n4528539\n1848864\n5122013\n1849284\n9007213\n4527903\n1850570\n1850633\n1851337\n1851543\n1851555\n1852177\n6133343\n11287091\n1829533\n1829659\n1829776\n1828637\n6097236\n7448174\n4525610\n10835385\n10855556\n5125130\n1861395\n1868428\n1868527\n5734146\n1834980\n8503184\n1839094\n1830152\n1830241\n1831458\n1831631\n1831643\n9379855\n8834672\n1839625\n5880147\n9734171\n10679326\n10746289\n11382064\n10698858\n11570545\n10701190\n11807833\n12199936\n11095591\n11418741\n7908344\n12235234\n12217030\n1758625\n1759150\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n10889719\n1760970\n1761111\n1761213\n1761353\n1761387\n9257793\n1762151\n11562374\n1762219\n1762226\n1762298\n1763589\n5109766\n1763650\n1763782\n1763812\n1763976\n1764021\n1764032\n1764043\n1764060\n9278311\n1764531\n1764880\n1764886\n1765653\n1765863\n1766260\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767044\n1767755\n5110190\n11097510\n1768440\n5110232\n1768898\n10820762\n1769103\n1769168\n11467034\n10848620\n1769410\n1769425\n1769465\n1769737\n1769772\n10881384\n12148290\n1769823\n1769827\n1769840\n1769852\n1769897\n1769901\n6132966\n6132967\n1771839\n1771975\n1771977\n1772793\n4532500\n5110397\n5110417\n5110447\n5110490\n1774575\n1774576\n1775148\n5110546\n5110765\n5110769\n1777166\n1777631\n5110837\n1777695\n9372988\n6132953\n4687991\n6133029\n5110986\n5110993\n5111007\n5111044\n6133058\n9610080\n1779456\n6132938\n1780150\n5111830\n1780705\n1780716\n1782115\n1783302\n1783652\n1784804\n10208792\n1785744\n1785832\n1786317\n1786711\n5112500\n6132971\n6132974\n1786980\n1787009\n10860091\n6132805\n1788045\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n1790331\n1790692\n10749137\n10766319\n1790876\n1790888\n1791010\n1791094\n1791097\n10743044\n6132950\n1791514\n1791698\n1791715\n11016336\n11725043\n11971514\n5113078\n5113082\n5113084\n5113148\n5113330\n5113352\n1792541\n1792695\n5113385\n5884243\n9504222\n1793429\n1793610\n1793613\n1793631\n1793635\n1793646\n1793656\n1793892\n5113925\n1796984\n10600368\n1797258\n1797259\n1797299\n1797344\n1797374\n1797454\n1797479\n4532471\n8355390\n8756768\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798346\n1798408\n1798449\n1798488\n1798504\n6132841\n6132850\n11976273\n1787072\n1787079\n1798523\n1798580\n1798594\n1798700\n1798794\n1798802\n1798807\n1798823\n1798863\n1798868\n4301310\n4532351\n4532352\n6115426\n6115437\n6133046\n6133051\n8793873\n1799417\n1799708\n1799743\n1799751\n1799757\n6132824\n6132825\n10722110\n1803148\n1803163\n1803197\n1803824\n1804071\n1804477\n9343385\n1804906\n1805044\n11494627\n12229237\n1805580\n5115166\n5115167\n5115198\n9663271\n1806936\n7874258\n11453492\n1808140\n1808145\n1808161\n1808195\n1808221\n1808236\n1808286\n1808348\n1808559\n6198302\n9219266\n1808752\n5115701\n5115771\n1809019\n5115777\n1809115\n1809210\n1809308\n5116095\n10183056\n12006709\n1810099\n1810464\n10882244\n5116395\n5116412\n12176559\n1811686\n1812500\n10671425\n10821201\n1813010\n1813114\n1813263\n5117189\n7656811\n1814653\n1814913\n1814928\n1814971\n5117399\n5117400\n1815260\n10826443\n12249986\n1816065\n1816138\n1816246\n1816276\n1816292\n1816299\n1816362\n1816881\n5117779\n1817797\n5734900\n11461056\n11860565\n1818413\n8326103\n1818659\n1818991\n10822185\n1819128\n1819145\n4532293\n4532297\n6134023\n6134027\n7346382\n7346384\n1819268\n1819270\n1819280\n11656384\n8407461\n6134035\n1819873\n5118348\n7657803\n5118422\n1820352\n1820372\n1820406\n1820414\n1820450\n1820451\n1820477\n5734655\n5734657\n7346381\n9420824\n1820565\n1820753\n1820888\n1821105\n1821260\n1822141\n1822142\n11731502\n12253343\n12037602\n9276279\n9347308\n5884571\n10503495\n8897869\n7596232\n12176367\n7346231\n6097214\n4532544\n4532516\n6133081\n6133083\n4532565\n10864524\n12021153\n12021649\n12089608\n9673208\n10270464\n8741750\n9473918\n9400545\n9559336\n6133292\n11332355\n6133340\n10062933\n10717837\n8148822\n10806460\n6133252\n10072380\n6133325\n10972780\n11142432\n10309234\n12171522\n9493317\n9315833\n11962292\n10399906\n6133266\n6133269\n6133270\n6133271\n11232431\n6133311\n6133312\n6133313\n6133315\n6133317\n8526388\n8624848\n5734901\n6133262\n12257250\n8831819\n5115872\n5115874\n5116475\n8038357\n6133264\n1774829\n5116843\n12171068\n9266866\n10178326\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n6133033\n5116504\n9336001\n1781413\n1781421\n1803461\n4532405\n4532408\n4532412\n10866411\n6133241\n6133242\n6133244\n6133248\n7346227\n8000103\n9478424\n1794273\n6115388\n6133297\n1774583\n1774598\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n6132809\n1819852\n1780287\n4532508\n1793515\n1793533\n5111643\n1768461\n1760246\n5113036\n5109796\n1821455\n1821478\n1821479\n1821505\n1821651\n1821863\n1821920\n1821934\n1821940\n1822017\n1819337\n1819362\n1804182\n1774997\n6122364\n1781473\n1783713\n1783725\n1812394\n8237987\n4532366\n4687933\n6116646\n10926224\n11088003\n1820118\n1820137\n1819057\n1820039\n5118396\n1781531\n1798329\n1798335\n1784947\n1785072\n1765996\n1765999\n1766022\n6133069\n11513188\n1786597\n5884188\n6132915\n6132916\n6132917\n5110012\n12185656\n1809594\n1781350\n1781353\n6133013\n1796943\n1819685\n10098436\n11717028\n1771772\n1782310\n10094256\n10765884\n9792270\n5108435\n5108440\n1771903\n1788813\n4301309\n10506164\n1777500\n1777517\n5112440\n1795542\n1860979\n1860983\n1860987\n4522891\n1860768\n1852956\n1835432\n1835433\n1835457\n9724183\n1837420\n4529064\n1839293\n1839296\n1840301\n1840346\n1840566\n1840581\n1840596\n1831752\n10371735\n1869359\n1869363\n9883856\n1939510\n1939520\n5141344\n1860261\n1860274\n4525177\n5123339\n5123394\n5123419\n5769164\n5880040\n5880041\n6132546\n5123449\n5123461\n5123474\n5123485\n5123489\n1869706\n1869803\n1870202\n1870237\n1870249\n1870250\n1870450\n1871407\n4531402\n1871630\n1871683\n1871698\n1871783\n1871988\n1872169\n10787705\n1872848\n1872850\n1872873\n1872901\n1873079\n1873215\n1873417\n1873776\n1873780\n1873783\n4531264\n1873843\n1873890\n5125569\n5125596\n5125602\n5125633\n5125635\n5125689\n1874274\n4531147\n1874743\n1874937\n1875120\n8219149\n1875376\n1875827\n1875830\n1875865\n1875869\n1875918\n1875958\n1876168\n1876329\n1876409\n1876542\n1876592\n1876854\n1876922\n1877038\n1877368\n1877498\n5126052\n1877788\n1877941\n1877988\n4531417\n1878406\n1878470\n9835867\n1883045\n1888454\n5884888\n6133441\n5141493\n1940510\n1940575\n1940639\n1940807\n1939879\n1736358\n1736377\n1736499\n1736560\n1736601\n1736623\n1736727\n1736905\n1736993\n1737015\n4529931\n10842267\n1737313\n1737342\n1737368\n1737491\n1737497\n1737524\n1737526\n1737533\n1737542\n1737650\n1737753\n1737847\n1738192\n1738222\n1738373\n1738422\n5102951\n1738700\n8086347\n1739337\n5102982\n1739471\n1739605\n1739833\n1739919\n1739980\n1739999\n1740183\n1740185\n1740392\n7797515\n1740469\n1740482\n1740524\n1740797\n1740828\n1741341\n1741368\n4530151\n5103061\n1741633\n1741752\n1742185\n1742263\n1742346\n5103736\n5103948\n5771350\n8313553\n5103998\n1743475\n7877231\n1743532\n1743604\n5104056\n1743768\n1743775\n1743782\n4529908\n1743828\n1743856\n1743862\n1743867\n1743898\n1743998\n1744071\n1744136\n1744180\n1744526\n1744588\n1744593\n1744699\n1744728\n1744731\n1744739\n1744896\n10844862\n1745561\n1745579\n1745600\n1745630\n1745634\n1745771\n1745816\n1745895\n1745947\n1745952\n1745957\n1746027\n1746174\n1746327\n1746613\n1746644\n1746666\n1746714\n1746775\n1746832\n1746856\n1746876\n1747141\n6097234\n1748605\n8691947\n5103121\n5103176\n5103227\n5771229\n5771232\n5771236\n5771239\n5771249\n5771258\n4525510\n4525530\n4525540\n1920851\n1920864\n10159697\n9916153\n1920957\n1920996\n1921009\n1921010\n1921040\n7346426\n10581870\n1921092\n1921150\n1921163\n1921263\n7387466\n1921633\n7346430\n1921897\n1922111\n1922143\n1922244\n1922285\n1922311\n1922343\n8016522\n5138200\n1922584\n8782891\n1922937\n5138543\n5138561\n5714680\n1923491\n1923649\n1923651\n1923668\n1923796\n1923809\n1923917\n1924044\n1924057\n1924097\n1924193\n5138681\n1924298\n1924390\n1924458\n1924713\n4535172\n1925381\n1925543\n1925731\n1925877\n1925918\n1925962\n1926054\n1926436\n1926448\n1926574\n5883255\n1926593\n1926611\n10116946\n10361239\n1926800\n1926861\n1927034\n1927217\n4709111\n5883052\n1927393\n1927439\n1927717\n5882965\n1928248\n5139050\n1928349\n1928361\n1928419\n5139156\n1928849\n1928908\n1928915\n1929270\n1929659\n1929697\n8356768\n1930110\n1930832\n1930968\n1931132\n8643155\n1931148\n1931561\n5734268\n7346434\n1931706\n1931735\n1931779\n5139915\n1931956\n1931958\n1931997\n1932020\n1932043\n1932159\n1932166\n1932273\n4708995\n1932411\n1932551\n7346444\n1932607\n6132685\n1932814\n1932960\n5806412\n1933028\n1933044\n5140214\n5140244\n5140436\n7634721\n7664111\n1933583\n1933647\n7346407\n1933793\n1933844\n1933845\n1934187\n1934188\n1934192\n1934211\n1934213\n1934221\n1935377\n1935410\n1935454\n1935459\n1926260\n5138929\n7346417\n11874998\n4709102\n1933138\n1924494\n11055981\n9623220\n5734556\n1752373\n1752483\n1752494\n1752603\n1752651\n1752749\n1752758\n1752849\n1753081\n1753215\n1753395\n5105458\n5105467\n5105547\n5105560\n1753432\n1753435\n11014495\n1753636\n5734560\n1753759\n5105588\n10955682\n10932946\n7345843\n6133481\n10017342\n5105339\n5105259\n10795141\n11673056\n1919151\n1919320\n1919328\n1919340\n1919344\n1919348\n1919438\n1919534\n1919551\n1919581\n1919589\n1919635\n1919697\n1919712\n1919720\n1919728\n1919731\n1919741\n1919951\n5137748\n1920237\n1920247\n1920259\n5137808\n5137823\n5137828\n5137832\n5137833\n5137849\n5805954\n5137861\n1920454\n1920467\n1920469\n1920494\n1920496\n1920506\n5137889\n5137891\n5804932\n5805407\n1920515\n5137903\n5137908\n5137912\n5137920\n5137926\n5137932\n5137938\n5137945\n5137946\n5137949\n1920711\n1920712\n1920718\n5804166\n5714914\n5137573\n5137578\n5137582\n5137595\n5137605\n5137612\n5137636\n5137677\n5137689\n5137706\n5137708\n5803588\n1920218\n5137763\n1749070\n1750166\n5104891\n5104759\n1758003\n1758440\n1758441\n1758461\n1855241\n1868837\n1869057\n1869178\n1869187\n1963096\n1973530\n11826016\n5143303\n5143311\n5143315\n1954496\n1954563\n5143338\n5143354\n5143368\n5143380\n5143384\n5143437\n5143453\n5143506\n5143511\n5143525\n5143575\n5734335\n1954891\n1954911\n6133648\n1955389\n5143651\n1955552\n1955581\n6133676\n1955725\n1955806\n5143675\n5143697\n1956309\n1956384\n5734542\n5734543\n1956440\n1956524\n1956536\n1956629\n1956710\n6133593\n4525068\n1957161\n1957174\n1957266\n1957300\n1957333\n1957368\n1957460\n1957572\n1957583\n1957791\n1957816\n1957854\n5143947\n1958024\n1958045\n1958152\n1958158\n1958163\n1958241\n1958252\n1958255\n1958259\n1958260\n1958275\n1958282\n1958290\n1958305\n1958323\n6544637\n1958454\n1958463\n1958483\n5144027\n1959494\n1959645\n1959652\n1959666\n1959667\n1959682\n1959735\n6133552\n1959876\n1959914\n1959919\n1959948\n10694777\n1960023\n1960181\n1960182\n6133509\n5144092\n5144093\n1960571\n1960595\n1960617\n6133518\n1960686\n1960854\n1960963\n1961013\n1961040\n5734344\n1961052\n1961126\n1961162\n7346236\n1961190\n1961252\n1961647\n1962204\n1962265\n1962268\n1962434\n1962447\n1962516\n9812211\n1962678\n1962839\n1962860\n1963011\n4302252\n5734349\n1963306\n5144345\n1963446\n1963709\n1963733\n1963827\n11644349\n1964024\n1964025\n1964029\n6133500\n1964113\n1964116\n1964195\n1964247\n1964316\n1964437\n6133502\n1964653\n8361848\n1964738\n5144426\n1965166\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1966017\n5144431\n5144438\n9919915\n9370070\n5144499\n1966286\n1966302\n1966310\n5734448\n10670854\n1966362\n5144534\n1967011\n1967039\n5144543\n1967245\n1967265\n1967273\n1967445\n1967590\n1967595\n1967597\n1967672\n1967688\n7346240\n1967815\n1967873\n1968147\n1968182\n1968193\n7681733\n1968304\n1968363\n1968730\n1968746\n1968867\n1968951\n11598540\n1968990\n1969357\n1969491\n6133643\n1969621\n1970034\n1970136\n1970213\n1970322\n1970436\n5734405\n6133513\n7346252\n5144677\n5144721\n5144782\n5144787\n5144805\n5144806\n5144864\n5144900\n5144936\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n5145522\n5145624\n5145729\n5145735\n9194811\n1971888\n6133516\n1972094\n1972185\n1972234\n1972250\n5145870\n5145965\n5146038\n5146062\n7541913\n1972443\n1972613\n1972614\n1972616\n1972620\n1972631\n10732353\n1972754\n5146282\n1973242\n1973338\n1973358\n1973393\n1973397\n1973414\n5146434\n5146483\n5146496\n5146508\n5146559\n5146566\n5146567\n5146599\n5146601\n5146611\n5146659\n5146677\n5146746\n5146752\n5146762\n5146763\n5146833\n5146837\n5146883\n5146946\n5146961\n5147039\n5147062\n5147150\n5147171\n5147208\n5147214\n5147232\n5147245\n5147306\n5147354\n5147441\n5147478\n5147498\n5147516\n1975198\n6133559\n5147608\n5147638\n11856219\n1975546\n1975553\n1975571\n1975583\n1975597\n1975711\n1975733\n8329661\n1975793\n8160782\n1975805\n1975806\n1975892\n1975897\n1975903\n1975964\n1975979\n5734539\n9356491\n9410573\n9548993\n1976163\n1976212\n1976213\n1976224\n1976228\n1976311\n1976462\n1976463\n1976469\n1976470\n1976483\n5147681\n6097233\n7973517\n1976928\n1977003\n1977007\n1977068\n5147819\n5147827\n5147834\n1977182\n1977184\n1977297\n5734420\n6133548\n5147917\n5147968\n5148043\n5148055\n5148115\n5769028\n1977813\n1977833\n1977863\n6133582\n1977962\n1977967\n1978010\n1978034\n1978045\n1978056\n1978065\n1978114\n1978375\n1978385\n1978398\n1978405\n1978407\n1978422\n1978424\n1978445\n5734388\n1978499\n1978524\n1978529\n4524636\n4524638\n5734519\n6133560\n5148252\n10738407\n1978789\n1978821\n5734396\n1978977\n1978996\n1978999\n6133546\n1979021\n5148286\n1979222\n1979229\n1979308\n1979473\n1979521\n1979561\n1979562\n1979758\n1979781\n1979787\n1979801\n1979806\n1979822\n1980269\n5148436\n5148487\n1980521\n1980532\n11449815\n1980694\n1980811\n1980827\n1980917\n8421569\n1981063\n6133585\n1981357\n1981457\n1981696\n11173690\n10592969\n7345811\n7345813\n1981937\n1981938\n1981998\n1982007\n1982203\n1982267\n1982291\n1982406\n1982500\n1982529\n1982541\n1982636\n1982865\n1982885\n1983052\n1983525\n1983648\n1983755\n1983922\n1983999\n11121180\n5149012\n1984734\n5149174\n1984949\n1985061\n1985152\n1985158\n1985167\n1985191\n1985192\n1985230\n1985707\n6133659\n1985926\n1985993\n1986009\n1986032\n1986052\n1986054\n1986056\n1986061\n5734345\n1986157\n1986166\n1986171\n1986191\n1986220\n1986452\n1986508\n1986522\n1986575\n1986623\n1986779\n1986787\n1986936\n5149308\n5149315\n6133614\n1987204\n5768880\n1987362\n1987377\n1987527\n1987629\n1987665\n1987740\n1987744\n1987766\n1987767\n1987775\n1987776\n1987786\n1987787\n6133591\n4524221\n11650277\n6133534\n11190148\n1988002\n5734451\n1988225\n1988257\n1988306\n1988420\n1988487\n1988593\n8388883\n5149414\n5149438\n5734528\n6133644\n1989355\n1989393\n1989428\n1989942\n1990043\n1990050\n1990066\n1990088\n1990105\n1990150\n5734390\n1990551\n1990582\n1991123\n1991179\n6133501\n5149609\n1991277\n1991310\n1991371\n1991378\n1991779\n1991783\n5149836\n5149843\n10155932\n11098546\n11869776\n1991945\n5734515\n11635419\n1992066\n5149929\n5149986\n6133619\n5734398\n5880533\n5880539\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n7429212\n9442902\n4524740\n4523560\n4524054\n4524998\n4524376\n4524822\n11828714\n10422582\n10574156\n5880392\n6133595\n6133596\n6133597\n4524070\n4524072\n4524955\n10530208\n11555221\n4525078\n6133667\n6133670\n6133673\n6133674\n6133675\n7346249\n6133637\n6133620\n6133519\n11780161\n6133604\n6133607\n7346237\n6133520\n6133562\n5734379\n11548960\n7345819\n6133523\n6133525\n6133528\n6133542\n6133497\n6133498\n6133575\n6133517\n6133586\n6133635\n10175639\n9932090\n7346256\n7345829\n11652557\n5734535\n7345801\n5734362\n5880478\n6133540\n10755716\n5144190\n5146412\n5734482\n5149499\n5149704\n5149746\n5149768\n5734422\n7443518\n5146303\n5146342\n5146379\n1991462\n1991466\n4302268\n4524393\n10773498\n1942378\n1942383\n1942697\n1942808\n4689929\n5141677\n1943212\n1943223\n1943236\n1943397\n8277078\n5141795\n1943505\n1943619\n8133678\n1944503\n1944504\n1944591\n1944778\n5141924\n1945066\n9050611\n1945088\n1945137\n1945143\n1945173\n1945225\n1945227\n1945569\n1945605\n1945694\n1945710\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946051\n1946058\n5142067\n1946432\n7346354\n1946695\n1946738\n7389824\n1946917\n1947306\n1947335\n1947385\n1947409\n1947449\n1947456\n1947492\n1947626\n1947673\n1947703\n1947727\n1947740\n1947753\n1947765\n5734665\n1948062\n1948073\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n7346351\n8828146\n1949794\n1949929\n5142499\n5142599\n8109173\n1950013\n7346356\n1950171\n1950362\n1950521\n1950879\n5977257\n8270406\n7633472\n5142725\n5142729\n5142730\n5142006\n5142032\n5142042\n1869512\n1952878\n1952883\n1952909\n10744228\n1800191\n5109821\n1758613\n9355953\n1758874\n1758878\n1759055\n1759069\n1759083\n4533952\n7972792\n1759153\n1759177\n1759620\n1759667\n1759686\n10329023\n1760104\n1760593\n1760620\n1794361\n4534225\n1760891\n4533255\n1760939\n1760943\n1761041\n1761438\n1761778\n1762244\n6132749\n1762608\n1762657\n6132957\n1762680\n5109506\n5109523\n5109599\n5109670\n5109722\n1763610\n1763727\n1763741\n1764791\n1765010\n1765011\n1765038\n4534245\n5109830\n5109843\n5109848\n5109872\n5109882\n5109898\n5109943\n8352161\n1765658\n1765767\n1766130\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766741\n1766910\n11034779\n1767134\n1767368\n1767393\n1767511\n1767597\n1767625\n10575632\n1767655\n5110120\n5734744\n5772176\n5772196\n5772199\n5772202\n5772206\n5772210\n5802396\n5883914\n5883925\n6132943\n7345742\n7388922\n8045644\n1768117\n5110200\n1768341\n5110213\n1768568\n1768698\n1768702\n1768771\n1768819\n5110256\n5110258\n1769057\n1769095\n1769194\n1769505\n1769519\n1769566\n1769958\n1769978\n1770150\n1770172\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n1771555\n1772013\n1772094\n6133806\n1772169\n1772179\n5772129\n1772977\n1773163\n1774272\n1774347\n1774797\n4301304\n6115946\n4534046\n4534052\n4534057\n4534719\n1775962\n1775963\n1776067\n1776330\n1776371\n1776619\n1776862\n6132861\n4534463\n5110871\n5110885\n4534299\n1778109\n1778143\n5111535\n5111574\n5772222\n1779435\n1779633\n1779641\n1779690\n1780378\n1781233\n1781234\n5111974\n5111980\n1781803\n1781841\n1782168\n1782177\n1782341\n1782354\n1782457\n11763567\n1782543\n1782560\n1782615\n1782627\n1782672\n1782726\n1782757\n1782763\n1782777\n1782803\n1782841\n1782872\n1782927\n1782948\n1783043\n6133026\n5112291\n5714973\n5715004\n5734845\n5772349\n5772351\n1783855\n1783861\n1784359\n1784513\n1784761\n1784853\n4534290\n1785145\n1785162\n1785181\n1785185\n1785286\n4532886\n4532888\n4532890\n1785314\n1785322\n1785329\n1785367\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786448\n1786452\n1786515\n1786573\n1786619\n1786902\n1787112\n1787213\n1787267\n1787367\n1787373\n1787381\n4687681\n9268082\n1787400\n1787504\n1787506\n1787590\n1787610\n1787631\n1787841\n1788522\n4534011\n1788846\n1788856\n1788917\n1789071\n1789076\n1789086\n4533924\n1789553\n4534166\n1789753\n1789957\n1790002\n1790084\n4533115\n1790361\n1790364\n1790376\n9174377\n1791384\n1791422\n1791784\n1792061\n1792292\n1792377\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n10684776\n5113370\n1792996\n1793243\n1793246\n1793689\n1793877\n1793986\n1795065\n1795068\n4532908\n6133011\n7869346\n1795854\n1795957\n1796007\n1796117\n1796145\n1796169\n1796217\n4688172\n1796423\n1796463\n8105817\n1796678\n1797030\n1797735\n1798060\n4533431\n4533433\n4533444\n6133001\n6133002\n6133006\n6133007\n6133010\n1798090\n1798372\n1798916\n1798931\n1798971\n1798974\n1799135\n5113951\n1799695\n1799701\n1800004\n1800032\n1800149\n9536457\n4534389\n4534207\n10638451\n4532811\n4533273\n8890502\n4534398\n6544687\n4532269\n4533123\n4534408\n4534533\n6132989\n6132762\n6133075\n6132781\n11311045\n5110644\n6132797\n5114198\n1763072\n5109385\n5772063\n9038042\n8491927\n4534681\n4534685\n4534686\n1792555\n8108800\n1771634\n1771650\n1771678\n1771698\n1770880\n1771040\n1771214\n1771245\n6132931\n7940536\n10841562\n5113847\n5113853\n5772309\n5108671\n5108705\n5108724\n5108737\n5108752\n5108761\n5108787\n5108794\n5108796\n5734817\n6132880\n9243764\n1759394\n1789512\n4533360\n10933525\n5110282\n11566649\n11615549\n11731155\n4532208\n4532239\n4532253\n4532266\n6115772\n6115820\n6115822\n6115830\n1782249\n1782273\n1782279\n1782289\n10063383\n1767293\n9325654\n10458175\n10683012\n10702885\n1822487\n1822490\n1822493\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1822848\n1822852\n1823294\n1823444\n6133742\n1823573\n5118565\n7346263\n6133720\n1823706\n10996761\n5118582\n1824242\n5734235\n6133692\n7875265\n1824330\n1824338\n1824354\n1824390\n1824666\n1824751\n1824766\n1824845\n1824997\n1825064\n5118859\n1825077\n1825082\n1825083\n4534909\n4534914\n1825156\n1825176\n1825336\n7346284\n1825539\n5118974\n5118978\n1825786\n7345777\n1825967\n1825971\n1825983\n1826022\n1826033\n1826108\n1826129\n11322712\n5118996\n5119000\n6133700\n10510959\n11059353\n6133750\n1827125\n1827349\n1827408\n1827414\n1827484\n4534869\n6133691\n9883140\n5119181\n5119211\n5119223\n5119239\n5119245\n1827649\n1827650\n1827687\n1827711\n11435704\n1828162\n1828180\n6201790\n7346286\n6133680\n6133681\n6133684\n6133687\n6133688\n7346276\n9921001\n5118837\n5118841\n7346271\n7346273\n9486293\n1822502\n5806166\n11464595\n1892821\n5127867\n5127893\n5127932\n5127955\n7346346\n1893137\n1893266\n1893329\n12106975\n1893546\n1893612\n1893793\n1893923\n1893951\n4704279\n8832485\n8982591\n1894002\n1894012\n1894164\n1894268\n5882039\n5128161\n5128182\n7712938\n1894714\n4535614\n4535630\n4535636\n8049830\n10639484\n1894840\n4535827\n1895037\n4535809\n4535817\n1895159\n5128323\n5128326\n5128353\n5128357\n9804158\n1895499\n1895609\n1895667\n1895867\n1895875\n1895956\n1895992\n1896105\n1896304\n5128519\n1896841\n1896922\n1897664\n1897685\n1897747\n1897817\n1898250\n1898286\n4299368\n5129293\n7346344\n1898434\n1898441\n1898544\n5129378\n5129417\n1898946\n1898970\n1898988\n1900890\n1900897\n1901213\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901832\n1901850\n5130369\n5130444\n5130464\n5130471\n5130476\n5130521\n5130542\n1902533\n1902543\n1902560\n1902568\n1902572\n1902586\n1902749\n8140883\n8189761\n4535689\n10577473\n5130775\n5130813\n5130814\n5130851\n5130904\n5130908\n5130944\n1904272\n1904701\n1904719\n1904887\n1904938\n1904943\n1904948\n1904996\n1905079\n6221746\n1905383\n1905396\n1906552\n8208583\n1907436\n1907498\n1907511\n1907534\n1907541\n1907547\n1907580\n1907620\n1907625\n1907687\n4535754\n1908352\n1908367\n1908660\n1908702\n1908840\n1908871\n1908929\n1909123\n7346301\n8978362\n1909319\n10656625\n1909398\n1909607\n1909659\n1909810\n1909865\n1910706\n1910809\n1911093\n1911112\n1911168\n1911278\n1911298\n1911461\n1911503\n7728366\n5133687\n5133689\n4535592\n1911736\n7809779\n8078362\n5133693\n5133695\n1912325\n1912372\n1912428\n4299535\n4299565\n4299576\n4299597\n4299599\n5772890\n7428726\n4535581\n5134098\n8312017\n1913105\n1913175\n1913178\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134810\n5135026\n5135191\n5135355\n5714507\n7738295\n8233062\n8314088\n9915028\n9967126\n1915079\n1915080\n1915140\n1915154\n1915325\n11516142\n11535847\n1916410\n1916509\n1916758\n5136594\n5136681\n5136713\n5136939\n5137085\n5137166\n1918321\n1918394\n1918406\n1918408\n1918411\n1918416\n1918467\n1918495\n1918497\n1918509\n1918533\n1918553\n1918554\n1918627\n1918669\n1918843\n4535510\n10000384\n10043827\n5130587\n5130682\n5131096\n5131142\n5131192\n5131293\n5131339\n5131443\n5131467\n5131495\n5131520\n5131555\n5131585\n5131593\n10228568\n10277877\n10508423\n11425145\n5132154\n5132183\n5132191\n5132238\n5132479\n7346328\n7346335\n8001799\n5806167\n7642610\n11525418\n5128644\n5129000\n10201273\n5131910\n5881551\n8138711\n8549720\n1910628\n1910629\n1910662\n1902143\n1902182\n1899433\n1899818\n5129913\n7768674\n7934873\n8168644\n8393082\n1914701\n1914708\n1914734\n1914749\n7346340\n1918584\n1951370\n1951412\n1951462\n1951505\n1951507\n1951522\n1951529\n1951542\n1951557\n5142870\n1951631\n9512631\n1951649\n1951671\n1951675\n1951747\n9156165\n1951791\n5734305\n1951818\n1951840\n1951844\n1951859\n1951881\n5734326\n1951919\n1952014\n1952034\n1952052\n1952062\n1952147\n1952175\n1952177\n1952229\n5142948\n1952281\n5143007\n5143048\n5143049\n5143076\n5143080\n1952449\n1952481\n1952532\n10782264\n1952551\n1952611\n1952685\n5143116\n5143129\n5143147\n1952857\n9502606\n5885428\n8604089\n6097228\n1868211\n1868409\n4702564\n6544581\n1868470\n5141581\n5141590\n1735121\n1941864\n5121613\n1842097\n1842695\n9755262\n1843564\n1843602\n1730519\n1730543\n8292351\n5101394\n1730948\n1730978\n4525641\n1731598\n10450446\n8402212\n1872359\n1872361\n1872368\n1878626\n6133117\n1878744\n1878782\n1878862\n1878879\n1878895\n1878904\n1878939\n1879125\n1879141\n1879227\n1879337\n1879339\n1879340\n1879379\n5734212\n1879408\n1879452\n1879471\n5126212\n5126217\n1879630\n1879731\n1879735\n10915497\n1879970\n1880062\n1880064\n1880138\n1880140\n5126635\n5126637\n1880353\n1880451\n1880464\n1880465\n9524458\n6133225\n1880852\n1880858\n1880968\n1881089\n1881121\n1881151\n9819403\n4531687\n1881329\n1881336\n1881515\n4531713\n1881834\n1881964\n1882021\n1882210\n1882253\n1882266\n1882272\n5126834\n1882753\n1882767\n1882884\n1882901\n1882905\n10156181\n1882930\n1882965\n1883067\n1883161\n5127097\n1883873\n1883943\n1883951\n1884051\n1884061\n4531690\n1884212\n4531708\n1884229\n9294363\n1884434\n1884437\n1884449\n1884461\n1884465\n1884479\n6120980\n1884816\n1884835\n1884844\n1884858\n1884877\n4532122\n1884908\n1884909\n4532146\n1884970\n1885012\n1885262\n1885263\n1885569\n1885623\n1885630\n6133181\n1885745\n1885826\n1885919\n1885945\n1885994\n1886251\n1886320\n1886362\n8223165\n1886526\n1886587\n1886700\n1886720\n1886726\n1886729\n7562564\n1886929\n1887054\n1887290\n1887509\n1887586\n1887691\n1887701\n1888027\n1888092\n4531968\n1888324\n1888346\n1888484\n1888537\n1888619\n1888733\n1888743\n1888759\n1888891\n1888893\n1888906\n1888911\n1888913\n9535420\n1889039\n1889043\n1889053\n1889071\n1889074\n1889239\n1889249\n1889270\n1889272\n1889277\n1889287\n1889356\n1889358\n1889370\n1889552\n1889563\n1889942\n1890012\n1890031\n5127521\n1890097\n1890187\n9519191\n1890287\n1890320\n1890335\n1890343\n10180624\n1890410\n1890487\n1890534\n1890576\n1890670\n1890699\n1890772\n1890898\n1891059\n1891167\n1891190\n1891326\n1891339\n1891386\n1891426\n1891473\n1891493\n4532022\n1891533\n1891583\n1891636\n1891758\n1891889\n1892153\n1892242\n10141437\n11056379\n9674732\n1884255\n1884370\n5884851\n6133139\n6133141\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10513366\n10397209\n6133154\n10959264\n6133158\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n9137965\n1886374\n1889716\n1889765\n1889833\n5127592\n5127609\n5127629\n5127644\n5127656\n5127669\n5127675\n5127683\n5127688\n5127698\n5802339\n1887108\n4532050\n4532088\n4532095\n6121184\n1888638\n1883885\n4532150\n4532160\n5771880\n10410699\n1846111\n1846133\n1939597\n1830879\n1831009\n1831136\n4708183\n5122430\n5122439\n1854824\n1854849\n1858637\n1858674\n1858698\n1858775\n1859046\n1859177\n1859305\n1859453\n9749806\n6133397\n1859932\n1860026\n4536472\n4536483\n1973467\n5123221\n1865593\n10014340\n1865650\n1865659\n1865660\n1865666\n1865671\n9914882\n9972403\n1866237\n5734291\n1866356\n6106943\n1866491\n1866530\n1866549\n1866556\n1866568\n5124880\n5124911\n10047346\n1867820\n1867928\n8439879\n9983244\n1867991\n1867993\n11643393\n11670751\n11729388\n5124716\n5120278\n1841946\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861663\n1861665\n1861673\n1861697\n1861705\n1861714\n1861721\n1861797\n1861862\n5123674\n1861933\n1861936\n1861937\n1861938\n1861949\n1861951\n6106744\n1861975\n1862008\n1862061\n1862066\n1862072\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n10374414\n11907754\n1862430\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n5123707\n5123709\n1862572\n1862578\n1862580\n1862719\n1862765\n1862774\n1862837\n1863034\n5123922\n5734719\n1863354\n1863394\n1863467\n1863646\n5124007\n5124029\n9310369\n1863829\n1863848\n1863909\n1863910\n1863944\n9578319\n1864126\n1864135\n1864161\n1864358\n1864377\n5124121\n5124143\n5124233\n11738734\n11954157\n1864652\n5124300\n5124304\n5124305\n5124332\n5124348\n5124374\n5124415\n5124433\n1864793\n1864796\n5734713\n5885399\n6099041\n6106759\n7346401\n10193618\n6106647\n5123815\n5123876\n5123889\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1992883\n10842838\n10994020\n1993036\n1993043\n1993419\n1993637\n1953196\n1953326\n1953356\n6132711\n6132712\n6132715\n1953407\n1953423\n1953729\n11467944\n6132725\n6132726\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1830099\n1830380\n1830407\n1754135\n5105642\n1754368\n1754380\n1754400\n1754465\n1754511\n1754516\n1754535\n11737872\n12075408\n11175615\n1754902\n1754919\n1754933\n1755131\n5734138\n1755237\n1755248\n1755253\n1755276\n5106160\n5107644\n7410701\n7674502\n7778368\n7903078\n7955974\n8426357\n1757652\n5108318\n5108334\n11140464\n11860016\n1757853\n5108346\n5108349\n4522753\n9004359\n1939688\n1855630\n1855747\n8734090\n1856384\n1856620\n1856668\n1856768\n1856867\n1856971\n1857258\n1857267\n1857380\n1857626\n1857828\n1857829\n1857924\n1857938\n1857978\n1858283\n8178453\n1858557\n1937707\n1937723\n1937754\n1937819\n1937826\n1937892\n1937911\n1938007\n1938052\n1938058\n1938069\n1938088\n1938114\n1938162\n1938168\n1938174\n4692485\n4692504\n4693382\n5734569\n8225376\n1936988\n1936993\n5141144\n5141177\n5141179\n5141185\n5141187\n5141199\n5141212\n5141215\n5141226\n5141229\n5141233\n5141242\n1937490\n10761559\n1937556\n1937566\n1937570\n1937580\n1937582\n1937594\n1937613\n1938214\n1938226\n1938230\n1938233\n1938300\n1938612\n1938796\n1938810\n1938955\n1939056\n1939086\n1939168\n5141311\n5141317\n8546322\n8574752\n1835098\n1837172\n1839560\n5770922\n5770942\n12188993\n1800238\n10213314\n6133777\n1800528\n1800539\n10737993\n1800572\n1800686\n1800696\n1800821\n5114394\n5114400\n11873966\n4534798\n9544823\n1800881\n5114425\n1800934\n6133780\n1801000\n1801001\n1801073\n1801080\n1801084\n1801170\n1801196\n5114465\n1801461\n1801490\n10066605\n10510325\n4534779\n4534782\n6112606\n6112613\n6112661\n6133809\n6133811\n6133813\n6133814\n1801993\n1802090\n8883183\n1802113\n1802120\n1802229\n1802244\n1802280\n1802337\n1802702\n1802783\n1802827\n1802919\n1802939\n1803022\n1803035\n1803039\n1803065\n1803073\n1803108\n10942408\n4534767\n6133803\n5114311\n8244266\n10987178\n", + "regions/europe.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847111\n1847407\n4528547\n1847572\n9262981\n1847956\n9546514\n1848150\n1848202\n10450501\n1848219\n9868978\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848741\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830221\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n8837162\n1772793\n4532500\n1777289\n8141741\n1777631\n1777695\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n9310626\n1792210\n1797178\n1797258\n1797276\n1797333\n1797349\n1797367\n1797374\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n1805110\n1805155\n4532608\n7874258\n1807969\n1808195\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532293\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8038357\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n1860857\n7767114\n7851302\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n1852831\n9473121\n4529630\n5125075\n5125104\n8416348\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n10787705\n1872848\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873780\n1873783\n4531237\n4531264\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n4531242\n1875631\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876063\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n4531246\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878470\n1878471\n1878490\n1878500\n1878586\n1890065\n5884888\n11728049\n1877035\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n1736623\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739151\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741258\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741752\n1741756\n1741765\n4530424\n1741820\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n11846897\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745013\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745781\n1745787\n1745788\n1745816\n1745827\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n7588222\n9242559\n1748456\n1748720\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771255\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1920864\n1920892\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10854079\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n12165672\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926861\n5882965\n1928248\n5139040\n5139156\n1928945\n1928960\n1929270\n1929659\n1929697\n5792092\n8356768\n1930110\n1930904\n4535106\n1931179\n1931509\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933649\n1933793\n1926166\n1926260\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535285\n7981372\n1919698\n1919706\n1919712\n1919716\n1919966\n1920237\n1920258\n1920259\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5137902\n5137903\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137595\n5137612\n5137636\n5137677\n5137682\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n1750326\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1855235\n1855241\n1954490\n1954563\n5143380\n5143453\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956710\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960617\n1961013\n1961037\n1961040\n1961068\n1961190\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n1963011\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146528\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n1975198\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982791\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983111\n1983170\n1983260\n1983288\n1983387\n1983393\n1983441\n1983442\n1983525\n1983528\n1983548\n1983558\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4525034\n4524376\n4524822\n4524712\n4523522\n4522974\n4524541\n4523519\n4524070\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945877\n1946661\n7389824\n1947306\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n1950006\n5142394\n5142599\n7683096\n8109173\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762271\n1762383\n1762608\n1762680\n5109498\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764716\n1764986\n1764987\n1765010\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534252\n4534257\n4534275\n5109843\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n8150836\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n4532986\n1772013\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1773062\n1773163\n1773231\n1773309\n1773328\n1773377\n1773484\n1773572\n8222049\n1774272\n1774347\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n1776067\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778524\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786515\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787381\n1787400\n1787417\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787841\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10068024\n10113008\n10290084\n10312073\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1792645\n1792768\n5113370\n1792996\n1793212\n7918000\n1793877\n1793986\n1794102\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4534669\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4534360\n4533123\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n9549172\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n4532203\n4532206\n4532216\n4532236\n4532239\n4532253\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824121\n1824131\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894268\n5882039\n7712938\n1894714\n4535614\n4535627\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n5128323\n5128357\n6231906\n1895875\n1896841\n1897852\n1898286\n1898290\n4299368\n1898521\n1898544\n5129378\n1901850\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911461\n7728366\n8396242\n4535592\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299576\n4299597\n4299599\n5133990\n5772890\n7428726\n7799370\n8810143\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134667\n5134682\n5134686\n5134815\n5134837\n5134884\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916410\n1916412\n1916458\n1916554\n7854318\n1918632\n1918669\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902143\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5976910\n1735193\n1941864\n5120465\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842097\n1842196\n5120396\n1842485\n1842542\n4301036\n1842690\n1842695\n4529738\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885931\n1885937\n1886084\n1886251\n1886320\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888743\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n1890187\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n11761541\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854259\n1854287\n1854347\n5122439\n1854615\n1854792\n1854824\n1854849\n1854237\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5123042\n5124512\n1866356\n1866568\n5124911\n1867820\n1867928\n7764232\n7734292\n1841460\n1841476\n1841616\n1841675\n1841706\n1841813\n1841821\n1841946\n1841989\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862572\n1862578\n1862580\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830534\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106160\n5106249\n5106539\n5106894\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856384\n1856595\n1856620\n1856658\n1856663\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n9790007\n1857785\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1858321\n1938050\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1835422\n1836899\n1837172\n4528702\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n5114409\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n4534762\n4534766\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/europe_v3.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847111\n1847407\n4528547\n1847572\n9262981\n1847956\n9546514\n1848150\n1848202\n10450501\n1848219\n9868978\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848741\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830221\n1830241\n1830243\n1830262\n1830266\n1830271\n1830284\n4525476\n4525487\n1831458\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n8837162\n1772793\n4532500\n1777289\n8141741\n1777631\n1777695\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n9310626\n1792210\n1797178\n1797258\n1797276\n1797333\n1797344\n1797349\n1797367\n1797374\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8355390\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n1805110\n1805155\n4532608\n7874258\n1807969\n1808195\n1808348\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532293\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532549\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8038357\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n1860857\n7767114\n7851302\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n1852831\n9473121\n4529630\n5125075\n5125104\n8416348\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n10787705\n1872848\n1872873\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873780\n1873783\n4531237\n4531264\n1873890\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n4531242\n1875631\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876063\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n4531246\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878370\n1878470\n1878471\n1878490\n1878500\n1878586\n1890065\n5884888\n11728049\n1877035\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736499\n1736511\n1736528\n1736560\n1736565\n1736601\n1736623\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739151\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741258\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741747\n1741752\n1741756\n1741765\n4530424\n1741820\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n11846897\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745013\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745781\n1745787\n1745788\n1745816\n1745827\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n7588222\n9242559\n1748456\n1748720\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771255\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1920864\n1920892\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10442031\n10854079\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n12165672\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926550\n1926722\n1926861\n5882965\n1928248\n5139040\n5139156\n1928945\n1928960\n1929270\n1929402\n1929659\n1929697\n5792092\n8356768\n1930110\n1930904\n4535106\n1931179\n1931509\n1931561\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933647\n1933649\n1933793\n1926166\n1926260\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535280\n4535285\n7981372\n1919698\n1919706\n1919712\n1919716\n1919966\n1920237\n1920247\n1920258\n1920259\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5805036\n5137902\n5137903\n5137908\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137595\n5137612\n5137636\n5137677\n5137682\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n1750326\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1855235\n1855241\n1954490\n1954563\n5143380\n5143453\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956710\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960484\n1960617\n1961013\n1961037\n1961040\n1961068\n1961190\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n1963011\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967324\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146528\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146894\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n1975198\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982533\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982791\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983111\n1983170\n1983260\n1983288\n1983387\n1983393\n1983441\n1983442\n1983525\n1983528\n1983548\n1983558\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986623\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n4524223\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n6133619\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4524998\n4525034\n4524376\n4524822\n4524712\n4523522\n4522974\n4524541\n4523519\n4524070\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149664\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945589\n1945877\n1946661\n7389824\n1947306\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n1950006\n5142394\n5142599\n7683096\n8109173\n5977247\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n5142042\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762271\n1762383\n1762608\n1762680\n5109498\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764716\n1764986\n1764987\n1765010\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534252\n4534257\n4534275\n5109843\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n8150836\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n4532986\n1771997\n1772013\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1772977\n1773062\n1773163\n1773231\n1773309\n1773328\n1773377\n1773484\n1773572\n8222049\n1774272\n1774347\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n1776067\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778524\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779633\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784349\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786515\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787381\n1787400\n1787417\n1787438\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787841\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10068024\n10113008\n10290084\n10312073\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1792645\n1792768\n5113370\n1792996\n1793212\n7918000\n1793877\n1793986\n1794102\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n9803522\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4534669\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4534360\n4533123\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n9549172\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n4532203\n4532206\n4532216\n4532236\n4532239\n4532253\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824121\n1824131\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894164\n1894268\n5882039\n7712938\n1894714\n4535614\n4535627\n4535630\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n5128323\n5128353\n5128357\n6231906\n9804158\n1895875\n1896841\n1897852\n1898286\n1898290\n4299368\n4299370\n1898521\n1898544\n5129378\n1901850\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1905396\n1906552\n8208583\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911461\n7728366\n8396242\n1911633\n4535592\n4535596\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5133990\n5772890\n7428726\n7799370\n8810143\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134667\n5134682\n5134686\n5134693\n5134815\n5134837\n5134884\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916410\n1916412\n1916458\n1916554\n7854318\n1918627\n1918632\n1918669\n1918688\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n4535539\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n5133088\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902143\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5976910\n1735193\n1941864\n5120465\n5120577\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842097\n1842196\n5120396\n1842485\n1842542\n4301036\n1842690\n1842695\n4529738\n1843602\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885931\n1885937\n1886084\n1886251\n1886320\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888743\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n5127521\n1890187\n1890346\n1890487\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n6133232\n11761541\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n9137965\n1889833\n5127656\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854259\n1854287\n1854347\n5122439\n1854615\n1854792\n1854824\n1854849\n1854237\n4526094\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858778\n1858873\n1858930\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860026\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5123042\n5124512\n1866356\n1866556\n1866568\n5124911\n1867820\n1867928\n7764232\n5124716\n7734292\n1841460\n1841476\n1841616\n1841675\n1841706\n1841813\n1841821\n1841946\n1841989\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862572\n1862578\n1862580\n1862692\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830534\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106160\n5106249\n5106539\n5106894\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n8254441\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856384\n1856595\n1856620\n1856658\n1856663\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n9790007\n1857785\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1858321\n1938050\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833500\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1835422\n1836899\n1837172\n4528702\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n5114409\n4534796\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n1803108\n4534762\n4534766\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/japan.classes": "1992315\n1733154\n1733412\n5101745\n5102287\n1832235\n1847392\n1829659\n8503184\n1831458\n1831631\n9379855\n10679326\n12199936\n1759775\n1760927\n1761353\n1762151\n1764021\n1764032\n1764060\n1764531\n1766260\n1766570\n11097510\n5110232\n1769410\n1769772\n1769901\n6132967\n1775148\n5110765\n1777695\n6132953\n1780705\n1780716\n1783652\n5112500\n6132974\n1787009\n10860091\n1788553\n1788953\n1789225\n1791698\n1791715\n5113082\n5113352\n5884243\n5113925\n1796984\n10600368\n1797259\n1797299\n1797479\n8756768\n9332506\n5113950\n5884247\n1798449\n1787072\n1798700\n1798868\n4301310\n4532352\n6133046\n10722110\n1803148\n1803824\n1805044\n5115167\n1808286\n9219266\n1808752\n5115771\n5116412\n12176559\n1813114\n1813263\n1814913\n1814928\n1815260\n1816299\n1816362\n8326103\n1818991\n4532293\n6134023\n7346384\n1819268\n8407461\n5118348\n1820372\n1820406\n1820450\n9420824\n12037602\n5884571\n8897869\n6133083\n6133292\n11142432\n10399906\n6133271\n11232431\n8831819\n5115874\n10178326\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n9478424\n6115388\n1774583\n1774598\n1774618\n1774626\n1774654\n1768461\n5113036\n5109796\n1821934\n1821940\n6122364\n8237987\n4687933\n6116646\n1798329\n1785072\n1765999\n1786597\n5884188\n6132915\n6132916\n1782310\n5112440\n1860987\n9883856\n1939510\n1939520\n1860261\n1860274\n1869706\n4531402\n1872848\n1873079\n5125569\n5125633\n1874274\n1874937\n1875120\n1875830\n1877038\n6133441\n1736499\n1736993\n5102982\n1740482\n1740797\n1743532\n1745952\n1746775\n1920851\n1920996\n10581870\n1921150\n1921163\n8782891\n5714680\n1924044\n1924193\n1924713\n4535172\n1925918\n1926448\n5883255\n1927034\n5883052\n1927393\n5882965\n5139050\n1928849\n1928908\n1929697\n1931132\n1931561\n7346434\n1931706\n1931956\n1932043\n1933844\n1752849\n5105547\n5105560\n1753636\n5105588\n6133481\n1919720\n1919951\n5137832\n5805954\n1920496\n5137889\n5137908\n5137912\n5137949\n1920711\n5803588\n1920218\n11826016\n1954496\n1956524\n1956629\n6133593\n1957854\n1958252\n1958454\n5144027\n1959645\n1959876\n1959914\n1959919\n1960023\n1960181\n5144093\n1960686\n1960854\n1961052\n1961162\n7346236\n1961252\n1961647\n1962265\n1964024\n6133500\n1964247\n1964316\n1965913\n5144431\n1967595\n1967815\n1967873\n1968147\n1968193\n7681733\n1968304\n1968363\n1968867\n6133643\n1970136\n5144677\n5145409\n9194811\n1972443\n1973338\n5146434\n5147062\n1975198\n1975805\n1975806\n1975892\n1975964\n1975979\n9548993\n1976212\n1976213\n1976311\n5148115\n1977833\n1978422\n4524636\n4524638\n1979781\n1980521\n1980811\n8421569\n11173690\n1981937\n1981938\n1982267\n1985061\n1985152\n1985158\n1985167\n1985191\n1986052\n1986056\n1986508\n5149308\n1987377\n1987665\n1987776\n11650277\n1988225\n1988306\n5149414\n1989428\n1990050\n1991123\n1991277\n1991378\n1991783\n5149986\n6133619\n5880539\n9442902\n11828714\n10574156\n5880392\n4524070\n7345819\n6133542\n7345829\n5880478\n6133540\n5146379\n1942697\n4689929\n1943212\n5141924\n1945066\n1945225\n1945227\n1945694\n1945878\n1946695\n7389824\n1947492\n1947626\n1947740\n1949336\n5142499\n5977257\n5142725\n1952883\n1952909\n1758874\n1758878\n7972792\n1759620\n1759667\n1760593\n1760939\n1761438\n1762680\n1764791\n5109830\n5109882\n8352161\n1766130\n1767368\n1767655\n5802396\n1768698\n1769519\n1769566\n1770172\n4532696\n1772179\n6115946\n1775962\n1776067\n5772222\n1781233\n1781234\n1782168\n1782177\n1782457\n1782543\n1782672\n1782726\n1782757\n5715004\n1784513\n1784761\n1785145\n1785314\n1785367\n1786360\n1786448\n1788522\n1788856\n1788917\n1789957\n1790376\n9174377\n1791422\n1795065\n4532908\n1795957\n4688172\n1797030\n6133007\n5113951\n1800004\n1800032\n1800149\n6544687\n4532269\n4533123\n4534533\n6132989\n6132781\n4534685\n1771678\n1771698\n1771040\n1771245\n5113853\n5108737\n5108761\n5108787\n5108794\n9243764\n1759394\n4532266\n1767293\n9325654\n10458175\n1822610\n1822613\n1822787\n1822830\n1822848\n1823294\n1824242\n1824390\n1824666\n5118859\n1825176\n1825539\n5118978\n1825786\n7345777\n1825967\n1826108\n5118996\n1827125\n1827408\n4534869\n9883140\n5119181\n5119223\n1827649\n1827650\n11435704\n6133687\n6133688\n9921001\n5118841\n9486293\n1893266\n1893546\n1893923\n7712938\n4535614\n4535630\n4535827\n1895499\n1895867\n1895875\n1895956\n1895992\n5128519\n1897664\n1897685\n4299368\n5129293\n7346344\n1898434\n1898441\n1898544\n5129378\n5129417\n1901399\n1901832\n5130464\n5130471\n5130476\n1902543\n1902749\n8140883\n1904948\n1905079\n6221746\n1907436\n1907498\n1907625\n1908702\n10656625\n1909398\n1909607\n1909865\n1911093\n7428726\n1913105\n5134682\n5135026\n5136681\n5137085\n1918411\n1918467\n4535510\n5130587\n5131096\n5131142\n5131293\n5131339\n5131585\n5806167\n7642610\n8138711\n1910629\n1910662\n1914701\n1951412\n1951462\n1951507\n5142870\n1951791\n1952062\n1952175\n1952177\n5143007\n5143080\n1952449\n5143147\n5885428\n4702564\n6544581\n5141590\n1730948\n1879379\n1879408\n1879471\n5126635\n1880852\n1880858\n1880968\n1881151\n1881329\n1881336\n1882253\n1882767\n1882884\n1882905\n1882930\n1884051\n9294363\n4532122\n1884908\n1885919\n1886251\n1886320\n1886726\n1886729\n1886929\n1887509\n1887691\n1887701\n1888027\n1888092\n1888891\n1888913\n1889039\n1889074\n1889277\n1889370\n1890320\n1890410\n1890487\n1891326\n1891758\n1892153\n11056379\n6133141\n5771877\n4532125\n6120803\n6133232\n5126680\n1889765\n5127592\n5127669\n5127688\n6121184\n1831136\n5122430\n9749806\n1865659\n1866356\n1866568\n5124880\n8439879\n9983244\n1867993\n5124716\n10005133\n1861456\n1861488\n1861494\n1861644\n1861665\n1861697\n5123674\n1861938\n1861949\n1862072\n5123685\n1862293\n1862363\n1862370\n1862401\n11907754\n1862430\n1862449\n1862475\n1862517\n1862578\n1863034\n5124029\n1863829\n1863848\n1863944\n1864126\n1864377\n5124121\n11954157\n5124304\n5124332\n5124348\n5124415\n5124433\n1864793\n5885399\n7346401\n5123815\n5123890\n1992883\n6132711\n6132726\n5143249\n5105642\n1754368\n1754535\n1754933\n1755237\n1757853\n5108349\n1858557\n1937723\n1937819\n1937892\n1938058\n1938088\n1938114\n1938162\n1938168\n4693382\n8225376\n5141212\n5141226\n1937490\n1937556\n1938230\n1938233\n1938612\n1938796\n1939168\n8546322\n1839560\n1800238\n10213314\n1800528\n1800572\n1800696\n5114394\n9544823\n5114425\n1800934\n1801080\n1801084\n1801490\n6112661\n1802090\n1802113\n1802244\n1802280\n1802783\n1803022\n1803065\n1803108\n10942408\n6133803\n", + "regions/madagascar.classes": "1766612\n1776265\n1776268\n1786980\n1788553\n1790287\n5884245\n6117055\n6115437\n1803163\n5117776\n5116504\n8723161\n1780897\n6115388\n6116661\n1765997\n4687389\n1922063\n1922244\n1923465\n8023645\n1924713\n1932302\n1932332\n8177775\n1933649\n5138841\n1919181\n1919213\n1919346\n5137827\n1920374\n5137863\n1943236\n1946661\n1947113\n5109848\n6116899\n1892554\n5806166\n1895956\n1897972\n1898017\n5130392\n5130464\n5130487\n5130502\n5130542\n1906621\n11378273\n5133610\n1915499\n11372793\n11375508\n5131347\n7642610\n5128597\n1910628\n1910629\n1879452\n1879490\n5126637\n1883067\n1883124\n1884051\n1884437\n1884449\n6120980\n1884774\n1885262\n1886104\n1886729\n1887054\n8955839\n4531670\n1889272\n1889277\n1889543\n7543006\n1890410\n1890670\n1892456\n5771877\n6121010\n5127644\n1867014\n1868049\n1868060\n1861433\n1861510\n1861544\n1861644\n1862293\n1862311\n1862401\n1862765\n1863034\n1863282\n9178932\n5124088\n5124352\n1938125\n1938166\n1939314\n1802662\n1802868\n", + "regions/mediterranean.classes": "1934693\n1860628\n1860659\n1860664\n1860671\n1860711\n4522933\n1732063\n1732072\n1732416\n1732419\n1732452\n1732457\n1732521\n1732565\n1732662\n1732680\n1732685\n1732697\n1733258\n1733484\n4525266\n4525268\n4525270\n4525273\n1733620\n1733755\n5101678\n5101717\n5101745\n5769191\n1734453\n1734690\n1734704\n1734794\n1734826\n5102287\n11529292\n1831861\n1831863\n1831890\n1845270\n1845368\n1845548\n1845565\n1845607\n4529566\n4528100\n1846374\n1846604\n1846657\n1847061\n1847097\n1847111\n1847407\n4528547\n9262981\n1847956\n9546514\n1848150\n1848202\n1848219\n9868978\n1848273\n4528539\n1848596\n1848610\n1848636\n1848657\n1848690\n1848741\n1848864\n1849104\n1849477\n11080751\n1849531\n1849539\n1849552\n1849630\n1849856\n1849924\n1850008\n1850238\n1850246\n1850335\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n1850640\n1850781\n1851010\n5122037\n5122113\n1851220\n1851337\n1851347\n5122206\n4527972\n1852150\n1852159\n1852165\n1852177\n1852311\n11287091\n4527957\n1848920\n1829533\n1829776\n1829785\n1829823\n4525354\n1828637\n6097236\n8871600\n9182336\n5769272\n7623903\n8912441\n5879654\n7448174\n4525610\n1751852\n1861395\n1845866\n1845952\n1845962\n1845965\n1845982\n1839094\n1841261\n1830838\n1830843\n1830125\n1830131\n1830152\n1830191\n1830241\n1830271\n4525476\n4525487\n1831458\n1831643\n1841296\n4528593\n5880147\n11418741\n11513018\n11571523\n12151997\n12160125\n12022449\n7908344\n1761111\n1764531\n1769103\n1769897\n7701550\n1772793\n4532500\n5110490\n1777289\n8141741\n1777631\n1779399\n1780149\n1780150\n8193562\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113078\n5113084\n5113234\n1792210\n1797178\n1797258\n1797276\n1797333\n1797349\n1797367\n1797429\n1797454\n1797479\n1797527\n1797542\n4532461\n4532471\n4532473\n8016905\n8756768\n1798346\n1798408\n4532493\n1798449\n1798481\n1798504\n1798594\n1798802\n1798807\n4532351\n4532352\n4532357\n1799708\n1803148\n1803163\n1804071\n1804906\n1805110\n1805111\n1805155\n4532608\n7874258\n1807969\n1808166\n1808440\n1808450\n1808752\n5115701\n5115771\n5115777\n1809210\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814538\n1814552\n1814630\n1814653\n5117399\n5117400\n1816881\n1817797\n8326103\n1819050\n1819145\n4532297\n1819268\n8407461\n1819699\n9331464\n1819873\n1819928\n6122092\n7657803\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532614\n4532549\n4532516\n4532532\n4532565\n12089608\n10062933\n8148822\n11962292\n12135372\n11033463\n11812181\n5115854\n5115872\n5115874\n5116475\n8165185\n6097254\n5116698\n1805535\n9198767\n1788635\n4532395\n4532405\n4532408\n4532412\n1780869\n8000103\n4532534\n1768626\n4532508\n4532510\n1760244\n1760246\n5113030\n5113036\n1821547\n1821856\n1821911\n1819170\n1812394\n8237987\n4532366\n4532453\n1820039\n1772822\n1771772\n1771779\n1777517\n1860979\n1860983\n1860987\n1860994\n1861011\n1861031\n4522911\n4522916\n4522919\n4522886\n4522890\n4522891\n1860765\n1860768\n1860852\n1860857\n7767114\n7961640\n1992378\n1992504\n1852956\n1852978\n1835432\n1835457\n1837420\n1837429\n8015612\n1840297\n1840301\n1840346\n1840360\n1840380\n1840478\n1840483\n1840555\n1840570\n1840581\n1840596\n1840621\n4529186\n1831752\n1852751\n1852831\n9473121\n5125075\n5125104\n8416348\n1751236\n1751298\n1751457\n1860408\n5123339\n5123419\n5769164\n5123461\n5123474\n1869595\n1869656\n1869803\n1869852\n1869858\n1869976\n1870202\n1870249\n1870250\n1870450\n1870650\n1870988\n5125306\n1871160\n1871212\n1871217\n1871252\n1871264\n1871407\n4531402\n4531409\n1871451\n4531365\n4531376\n1871683\n1871698\n1871783\n1871826\n4531427\n7673242\n1872848\n1872873\n1872901\n1872904\n1873048\n1873051\n1873079\n1873215\n1873411\n4530947\n4530951\n1873776\n1873783\n4531237\n1873890\n5125689\n1874168\n1874192\n1874204\n1874211\n1874229\n1874269\n1874280\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875409\n1875429\n1875633\n1875680\n1875682\n1875687\n4531284\n1875827\n1875830\n1875865\n1875869\n1875918\n1875940\n1875952\n1875958\n1876329\n1876357\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877345\n1877368\n9111961\n5126052\n1877941\n1877986\n1877988\n1878067\n4531417\n4531425\n4531429\n1878197\n1878350\n1878370\n1878470\n1878471\n1878490\n1878500\n1878586\n5884888\n11728049\n1877035\n1872315\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n4525846\n1941330\n1941348\n1941377\n1941437\n10309794\n12211069\n1939879\n1736377\n1736425\n1736447\n1736499\n1736560\n1736601\n1736623\n5102628\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n4529931\n1737131\n1737342\n1737368\n1737413\n1737437\n1737491\n1737497\n1737509\n4530608\n7466487\n1737524\n1737526\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737847\n1737893\n4530002\n8186212\n1738163\n1738222\n1738245\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738700\n1738722\n1738794\n1738839\n1738883\n1739151\n1739272\n1739290\n1739337\n1739377\n1739381\n5102982\n1739461\n1739605\n1739748\n1739797\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1740069\n1740120\n1740174\n1740185\n1740392\n1740482\n1740533\n1740567\n1740623\n8094357\n1740762\n1741056\n1741147\n1741258\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n10838422\n1741590\n1741593\n1741615\n1741633\n1741667\n1741752\n1741756\n4530424\n1741820\n1742185\n1742346\n5103451\n5103502\n5103613\n5103948\n5771350\n7975250\n1743196\n5103998\n7661023\n11846897\n7877231\n1743532\n1743588\n1743604\n5104056\n6097235\n1743643\n1743710\n1743768\n1743775\n1743782\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n4530632\n1744416\n1744498\n1744526\n1744588\n1744593\n1744728\n1744731\n1744739\n1744763\n1744782\n1744789\n1744808\n1744810\n1744896\n1745013\n1745079\n10844862\n1745558\n1745561\n1745600\n1745634\n1745643\n1745659\n1745678\n1745705\n1745737\n1745762\n1745781\n1745827\n1745830\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n4530138\n5104558\n1748203\n1748321\n5104597\n6097234\n1748456\n1748720\n5104641\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771229\n5771232\n5771239\n5771243\n5771249\n5771255\n5771259\n1831780\n4525503\n4525505\n4525510\n4525530\n4525540\n4525557\n4525562\n1920851\n1920864\n1920892\n10581870\n10825466\n10556522\n1921466\n1921521\n1921590\n7387466\n1922197\n10384044\n10442031\n10854079\n9904499\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922937\n1923019\n1923037\n5138298\n5138492\n5138543\n5138561\n5714680\n1923796\n1924077\n1924082\n1924097\n5138681\n10656713\n1924713\n11470119\n1924867\n1925221\n1925233\n7354189\n4535172\n1925381\n1925410\n1925454\n1925918\n1925962\n1926054\n9816676\n1926324\n1926385\n1926546\n1926550\n1926722\n1926861\n5882965\n7680748\n1928248\n5139040\n5139156\n1928754\n1928945\n1928960\n1929270\n1929402\n1929659\n1929697\n5139339\n5792092\n8356768\n1930110\n1930904\n1930916\n4535106\n1931179\n1931509\n1931779\n1931788\n1932393\n1932411\n1932473\n1932517\n1932551\n1932752\n1932960\n1932976\n4535162\n5140214\n5140244\n5140436\n5140443\n5772702\n5772749\n7634721\n7664111\n9954885\n1933583\n1933647\n1933649\n1933793\n1926166\n1926260\n10879371\n11874998\n1933095\n1933126\n1933138\n1933163\n1933204\n1924494\n1752383\n4522322\n5105339\n1919181\n1919221\n1919223\n1919317\n1919320\n1919330\n1919333\n4535280\n4535285\n7981372\n1919346\n1919698\n1919703\n1919706\n1919712\n1919716\n1919966\n1920237\n1920247\n1920258\n1920259\n5137790\n1920357\n1920359\n1920369\n1920395\n1920491\n1920494\n1920496\n1920498\n1920502\n1920506\n1920509\n1920512\n4535307\n5805036\n5137902\n5137903\n5804895\n1920707\n1920709\n1920712\n4535271\n5137578\n5137582\n5137612\n5137682\n5137695\n5137706\n8203812\n1920218\n1748890\n1748922\n1748942\n1749070\n1749449\n1749713\n1749869\n1749921\n1749929\n1749936\n1750051\n1750131\n1750159\n1750326\n5104891\n5104940\n5105106\n1751051\n5104759\n1749635\n8741260\n1735532\n4527339\n1731860\n1855235\n1954490\n1954563\n5143380\n5143477\n1955479\n1955484\n5143651\n1955694\n1955856\n4524588\n5143675\n5143697\n1956440\n1956524\n1956599\n1956639\n1956897\n4525068\n1957266\n1957286\n1957300\n1957556\n1957565\n1957570\n1957572\n1957579\n1957583\n1957611\n1957632\n1957673\n1957706\n1957718\n1957746\n1957791\n1957816\n1957822\n4524320\n8172949\n1957845\n1957852\n1957854\n4524421\n4524424\n4524426\n5143944\n5143947\n1958024\n11554842\n1958065\n1958323\n1958515\n1959383\n1959395\n1959423\n1959436\n1959461\n1959467\n1959473\n1959682\n1959735\n1959799\n1959876\n1959914\n1959919\n1960002\n1960484\n1960617\n1961013\n1961037\n1961040\n1961068\n7741315\n1962204\n1962265\n1962268\n1962434\n1962516\n10004969\n1962584\n4524568\n1962636\n1962860\n1962961\n1962972\n1962990\n4302252\n1963168\n1963306\n1963446\n1963463\n1963587\n1963709\n1963710\n1963755\n1964189\n1964191\n1964195\n1964401\n1964471\n1964637\n1964653\n1964657\n8361848\n1964836\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965795\n1965825\n1965841\n1965913\n1966017\n1966351\n1966358\n1966854\n1966886\n5144534\n1967003\n1967006\n1967011\n1967025\n5144543\n1967245\n1967265\n1967273\n1967324\n1967452\n1967597\n1967803\n1967815\n1967873\n7681733\n1968678\n1968686\n1968837\n1968867\n11598540\n1968990\n1969291\n1969339\n1969463\n1969954\n1969958\n4523707\n1970213\n1970227\n1970243\n1970259\n1970284\n5144677\n5144721\n5144782\n5144787\n5144805\n5144880\n5144900\n5145009\n5145136\n5145186\n5145255\n5145260\n5145269\n5145409\n5145502\n5145522\n5145729\n5145842\n7753668\n8014296\n9627567\n1971847\n1971852\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972374\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973300\n1973323\n1973327\n1973414\n7996464\n5146420\n5146440\n5146476\n5146496\n5146510\n5146525\n5146559\n5146599\n5146601\n5146611\n5146651\n5146659\n5146677\n5146693\n5146720\n5146762\n5146774\n5146786\n5146815\n5146833\n5146837\n5146842\n5146852\n5146862\n5146883\n5146894\n5146899\n5146908\n5146920\n5146927\n5146946\n5146961\n5147002\n5147030\n5147038\n5147039\n5147041\n5147043\n5147058\n5147062\n5147071\n5147099\n5147145\n5147150\n5147155\n5147165\n5147171\n5147193\n5147208\n5147212\n5147232\n5147245\n5147259\n5147287\n5147319\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147492\n5147513\n5147516\n5147534\n5147560\n7919880\n7988195\n8067894\n8366158\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n8955497\n5147794\n1977003\n1977068\n4523725\n5147827\n5147834\n1977300\n5769028\n5148247\n5148248\n1977962\n1977967\n1977971\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n5148264\n1978770\n1978776\n1978821\n5148286\n1979308\n1979430\n1979473\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n1980525\n8421569\n1981696\n1981998\n1982406\n1982458\n1982500\n1982525\n1982529\n1982533\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982779\n1982790\n1982838\n1982867\n1982885\n1982918\n1982924\n1983000\n1983034\n1983039\n1983052\n1983062\n1983101\n1983170\n1983260\n1983288\n1983387\n1983393\n1983442\n1983525\n1983528\n1983548\n1983648\n1983705\n1983755\n1983756\n1983888\n1983896\n1983922\n1983967\n1983997\n1983999\n1984033\n1984117\n7752082\n8015895\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n7905361\n1985522\n1985573\n1985734\n1985742\n1985760\n1986052\n1986056\n1986157\n1986166\n1986171\n1986220\n1986367\n1986452\n1986522\n1986575\n1986604\n1986877\n5149315\n5768880\n1987527\n9137631\n1987578\n4525091\n4525093\n4525097\n4525103\n6118530\n1987650\n1987737\n1987744\n4524221\n4524223\n1988007\n1988019\n1988064\n4524513\n1988390\n1988506\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n1988762\n5149438\n1988881\n1989428\n1990066\n1990150\n1990533\n1990551\n1990582\n5149474\n1991179\n1991371\n1991532\n5149836\n5149839\n5149843\n1991846\n1992066\n8180900\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n11654024\n7507369\n9414984\n9563355\n1989594\n4524740\n7990739\n4523556\n4523560\n4523564\n4524052\n4524054\n4523486\n4523461\n4525034\n4524376\n4524822\n4524712\n4523522\n4524541\n4523519\n4524072\n4524403\n4524793\n4524914\n4524922\n4524929\n4524951\n4524955\n4524961\n4524962\n4525078\n9220953\n9249651\n5144190\n5146412\n5768597\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149664\n5149665\n5149667\n5149704\n5149717\n5149746\n5149768\n5149780\n5149784\n5149787\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n4535386\n8178854\n8277078\n8073674\n8133678\n8273661\n1945569\n1945589\n1945877\n1946661\n7389824\n1947335\n5142338\n5142352\n1949715\n1949784\n1949794\n1949850\n1949852\n1949877\n1949929\n1949938\n1949954\n5142394\n5142599\n7683096\n8109173\n5977247\n8270406\n7633472\n10715410\n4535396\n5142006\n5142032\n5142042\n1869467\n1869512\n5769709\n9530977\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759159\n4533211\n1759407\n1759597\n1759661\n1759667\n1759668\n1759673\n1760104\n7444489\n9060267\n1760593\n1794361\n4533957\n4534225\n8708745\n1760857\n1760867\n1760887\n1760891\n1760893\n4533255\n5108958\n1761041\n1761392\n1761438\n1761735\n1761865\n1762244\n1762383\n1762680\n5109498\n5109506\n5109523\n5109599\n5109614\n5109646\n5109661\n5109722\n1763610\n1763697\n8167743\n1764174\n1764673\n1764986\n1764987\n1765011\n1765017\n1765038\n1765044\n1765069\n1765073\n4534245\n4534250\n4534252\n4534257\n4534275\n5109843\n5109855\n5109931\n8352161\n1765604\n1765767\n1765954\n1766086\n1766128\n1766130\n1766131\n1766137\n1766210\n4534691\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766773\n1766784\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n7388922\n7768584\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110211\n5110213\n1768702\n1768727\n1768729\n1768735\n1768741\n1768749\n1768771\n1768815\n1768819\n1769029\n1769057\n1769505\n1769519\n1769543\n1769566\n1769944\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n4532986\n1772169\n1772179\n1772255\n5772129\n1772940\n1772956\n1773062\n1773163\n1773328\n1773484\n1773572\n8222049\n1774272\n1774859\n1774873\n1774878\n1774959\n1775112\n4534046\n4534052\n4534057\n1775172\n1775299\n1775301\n1775329\n5110593\n5772269\n5883881\n1775891\n1775913\n4534719\n5110670\n1776207\n1776330\n1776371\n5772446\n1776619\n1776862\n1777253\n5110818\n5110858\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111147\n5111481\n5111501\n5111513\n5111574\n5772222\n8253467\n1779258\n1779435\n1779641\n1779690\n1780378\n4533937\n1780926\n1780928\n1780954\n1781008\n1781016\n4533285\n4533325\n7664771\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783043\n1783090\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5112388\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783777\n1783855\n1783971\n1784349\n1784359\n1784812\n1784824\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785329\n1785361\n1785883\n1785887\n1785888\n1785895\n1786017\n8292872\n1786360\n1786619\n1786651\n1786658\n1786664\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787279\n1787400\n1787417\n1787438\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787825\n1787859\n1787905\n4534086\n7917033\n1788425\n1788522\n1788734\n9216200\n4534011\n4534017\n1788917\n1789071\n1789073\n1789076\n1789086\n1789250\n1789255\n1789267\n9805848\n1789403\n4533882\n4533924\n1789481\n1789491\n1789553\n1789580\n4534162\n4534166\n4534170\n4534194\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n1789957\n10904813\n1789982\n1789984\n1790002\n1790023\n1790059\n1790062\n1790072\n1790084\n1790153\n4533115\n8047343\n9092175\n1790364\n1790625\n1790671\n1791384\n1791422\n1791784\n1791846\n1792061\n1792292\n1792300\n1792335\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792645\n1792768\n1792996\n1793212\n7918000\n1793877\n1794351\n1794532\n1794534\n1794590\n1794599\n1794609\n1795068\n4532908\n1795180\n1795215\n1795282\n7869346\n1795483\n7922810\n1795854\n1795862\n1795896\n1795900\n1795930\n1795946\n1795957\n1796007\n1796032\n1796117\n1796139\n1796145\n1796169\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n4532700\n9803522\n1796423\n1796451\n1796463\n8105817\n1796678\n4533431\n4533433\n4533446\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n6097260\n7712384\n7981386\n8304206\n8742426\n9069966\n4534389\n4534207\n10638451\n4532273\n4532283\n4532811\n4534663\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n6544687\n4534538\n4534360\n4533125\n4533128\n4533136\n4533661\n4533663\n4533671\n4534408\n4534458\n4534533\n5883985\n8021109\n11478679\n5110644\n7654770\n6116899\n1774283\n1774285\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n1770772\n1770773\n1770821\n1770869\n1770880\n1771040\n1771143\n1771169\n1771204\n1771214\n1771245\n4533695\n4533714\n4533720\n7940536\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4534525\n1773901\n1773904\n4533344\n4533345\n4533347\n4533360\n4533362\n11819666\n4532203\n4532206\n4532216\n4532236\n4532239\n4532260\n4532264\n4532266\n8103163\n8363507\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823604\n1823726\n1824113\n1824117\n1824121\n1824131\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n4534826\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n5118996\n1827125\n5119143\n5119193\n5119245\n1827645\n1828162\n4534872\n6201790\n1893137\n1894268\n7712938\n1894714\n4535614\n4535627\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n4535819\n9519321\n6231906\n1896841\n1896915\n1897852\n1898286\n1898290\n4299368\n4299370\n1898521\n1898544\n5129378\n1901850\n5130464\n5130542\n1902533\n1902749\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n4535754\n1909398\n1909838\n1911093\n1911112\n1911122\n1911168\n1911182\n1911278\n1911298\n1911300\n1911461\n7728366\n8396242\n1911633\n4535592\n4535596\n7809779\n8078362\n1912325\n1912372\n1912395\n1912470\n4299535\n4299597\n5133990\n5772890\n7428726\n7799370\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n1913351\n1913371\n11046092\n5134469\n5134543\n5134569\n5134583\n5134607\n5134621\n5134659\n5134682\n5134686\n5134815\n5134837\n5135191\n5772948\n7509928\n7700512\n7738295\n7791190\n7791558\n7798382\n7940299\n8047165\n8137978\n8167638\n8214814\n8233062\n8262258\n8295666\n8298764\n8314088\n1916347\n1916352\n1916376\n1916410\n1916412\n1916458\n1916554\n7854318\n1918632\n1918667\n1918669\n1918688\n1918694\n1918733\n1918736\n1918776\n1918789\n1918795\n1918843\n1918854\n1918859\n1918868\n4535539\n8035998\n8176911\n7622059\n7988274\n8404037\n4535618\n4535620\n4535510\n5130587\n5130682\n7762841\n5131096\n5131142\n5132183\n8001799\n5133088\n7642610\n5135513\n5135546\n1896957\n5131910\n8138711\n1902169\n1902182\n1899349\n1899433\n1899737\n1899818\n5129913\n6229058\n7768674\n7867379\n7934873\n8168644\n8393082\n1951557\n4527355\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1952816\n1951713\n1951725\n1832853\n1833096\n1853064\n4529248\n5976910\n1735193\n1941864\n5120465\n5120577\n5120675\n5121040\n5121177\n5121613\n1842097\n5120396\n1842485\n1842508\n1842542\n4301036\n1842690\n1842695\n4529738\n1843602\n8292351\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878804\n1878845\n1878862\n1878879\n1878895\n1878904\n1878907\n1878939\n1878951\n4531506\n4531517\n1879001\n1879227\n1879252\n1879408\n1879427\n1879452\n1879471\n5126212\n5126217\n1879534\n1879630\n1879655\n1879691\n1879703\n1879731\n1879735\n1879765\n1879970\n1880064\n1880094\n1880104\n1880139\n1880140\n1880143\n1880818\n1880907\n1880931\n4531643\n1881122\n1881126\n1881151\n9819403\n4531687\n1881208\n1881362\n1881393\n1881404\n1881418\n1881603\n4531713\n1881834\n4531975\n1882158\n1882165\n1882210\n1882437\n1882459\n1882557\n5126834\n1882905\n1882965\n1883067\n1883161\n1883168\n1883386\n1883634\n4531690\n4531708\n1884465\n1884774\n4532122\n4532146\n1884970\n1885931\n1885937\n1886084\n1886251\n8223165\n1886579\n1886587\n1886648\n7562564\n1886951\n1887290\n4531670\n1887701\n4531968\n1888346\n10922411\n1888463\n1888484\n1888491\n1888579\n1888619\n1888623\n1888733\n1888736\n1888759\n1888826\n1889287\n9228024\n1889905\n1889942\n1890187\n1890346\n1890487\n1890522\n1890534\n1890540\n1890576\n1890656\n1890670\n1890679\n1890699\n1890701\n1890703\n1890724\n1890772\n1890776\n1890823\n1890898\n1890957\n1890975\n1891013\n1891059\n1891129\n1891167\n1891171\n1891177\n1891186\n1891190\n1891217\n1891326\n1891366\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n4532024\n8411753\n1892242\n1892245\n1892476\n9674732\n1884240\n1884254\n1884255\n1884273\n1884274\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n5771877\n11761541\n5126675\n5126680\n7446048\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n4532088\n4532095\n4532097\n6121184\n8218441\n4532150\n4532155\n4532160\n5771880\n1846107\n1846111\n1846112\n1846133\n1846159\n1830879\n1830937\n1831002\n1831009\n1831128\n1831136\n5122293\n4526048\n1854202\n1854259\n1854347\n5122439\n1854615\n1854824\n1854849\n1854237\n4526050\n7717983\n1858637\n1858674\n1858698\n1858762\n1858775\n1858930\n1859046\n1859177\n1859285\n1860026\n1860063\n4536472\n8200050\n12046692\n1973467\n4525132\n5123221\n6097269\n5124512\n1866356\n1866556\n1866568\n5124911\n1867820\n1867928\n7764232\n7734292\n1841460\n1841616\n1841706\n1841813\n1841946\n1841989\n1861494\n1861510\n1861644\n1861673\n1861797\n1861842\n1861862\n1862293\n1862401\n1862517\n1862578\n1862580\n1862692\n1862701\n1862719\n1862765\n1862774\n1862837\n1862894\n5123922\n5124007\n1864161\n1864358\n1864377\n5124143\n5124151\n5124233\n1864652\n1993419\n1939432\n4525189\n5119506\n5119513\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525425\n7976145\n1830534\n1830632\n1830802\n4525364\n1754183\n1754332\n5105929\n5106115\n5106249\n5106539\n5106894\n5107076\n5107128\n5107219\n5107640\n5107644\n5107829\n7410701\n7586742\n7674502\n7761138\n7778368\n7870336\n7903078\n7909858\n7955974\n8048904\n8102790\n8111395\n8158342\n8201251\n8348761\n8426357\n8964772\n4522753\n1939647\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1855452\n1855799\n1856005\n1856105\n1856289\n5122798\n1856595\n1856663\n1856686\n1856701\n1856730\n1856772\n1856867\n1857068\n1857143\n1857577\n1857581\n1857626\n1857785\n1857828\n1857829\n1857878\n1858074\n1858113\n1858163\n1858283\n1858321\n1938050\n1938069\n1938131\n8225376\n1936969\n1938214\n4690079\n1938520\n1938810\n1938955\n5141262\n5141288\n5141291\n5141297\n5141305\n5802625\n1856503\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n1833627\n4528658\n1834589\n1834775\n1835031\n5770913\n1835156\n1835393\n1835396\n1835422\n1836899\n1837172\n1838969\n1839770\n1839851\n1839878\n1839893\n1841158\n1841159\n4529032\n5119893\n5114409\n4534796\n4534798\n4534757\n1801051\n1801896\n4534773\n4534776\n4534778\n4534779\n4534782\n4534787\n4534788\n4534792\n9894093\n1802280\n1803012\n1803060\n1803073\n1803108\n4534762\n4534767\n4534769\n5114311\n5114316\n5114327\n8244266\n", + "regions/middle_east.classes": "1934693\n1732115\n1733484\n5101745\n5769191\n1734690\n1734704\n1831890\n1845270\n1845548\n4528100\n9546514\n1848219\n9868978\n1850781\n1852165\n11287091\n6097236\n8871600\n1845866\n1845962\n1839094\n1841261\n1831458\n1764531\n1769103\n1769897\n7701550\n4532500\n5110490\n1779399\n1783882\n1786980\n1786985\n1788553\n1790692\n1790816\n5113084\n1797178\n1797258\n1797276\n1797333\n1797349\n1797429\n1797454\n1797479\n1797527\n4532461\n4532473\n8016905\n1798346\n1798408\n1798481\n1798504\n1798802\n4532352\n1803148\n1803163\n1804071\n1805111\n1807969\n1808166\n1808195\n1808440\n1808450\n1808752\n5115701\n5115771\n1810099\n7656811\n1814538\n1814653\n5117400\n1819050\n1819145\n8407461\n6122092\n1820372\n1820406\n12253343\n5884571\n6097214\n4532544\n4532516\n4532532\n12089608\n10062933\n8148822\n6112449\n5115874\n5116698\n1788635\n4532412\n8000103\n4532534\n4532508\n1760246\n1821547\n1804182\n1812394\n8237987\n4532453\n1820039\n4687389\n1772822\n1777517\n1860987\n4522890\n1860765\n1831752\n5125075\n5123339\n5123419\n5123474\n1870450\n5125306\n1871212\n1871407\n4531402\n4531409\n1871451\n1871783\n4531427\n1872848\n1872901\n1873051\n1873079\n1873215\n4531237\n5125689\n1874280\n1875120\n1875827\n1875918\n1875958\n1876329\n1876542\n1877345\n9111961\n5126052\n1877941\n1877988\n1878067\n4531417\n1878470\n5884888\n4525884\n1940644\n1940717\n1940744\n4525777\n4525803\n12211069\n1939879\n1736623\n1737368\n1737526\n1737776\n1737847\n8186212\n1739833\n1740623\n8094357\n1741341\n1742185\n11846897\n1743898\n1744526\n1746832\n5104442\n5104597\n1920851\n1920864\n1921044\n10581870\n10825466\n1921150\n10556522\n1921466\n7387466\n1922244\n1922288\n10384044\n10442031\n9904499\n1922311\n1922343\n8016522\n1922572\n1922584\n4535092\n1922689\n1923019\n5138298\n5138543\n5714680\n1923650\n1924077\n1924097\n5138681\n10656713\n1924713\n1925233\n1925381\n1925454\n1925609\n1925918\n1925962\n9816676\n1926324\n1926448\n1926546\n1926550\n1926722\n1926861\n5882965\n7680748\n1928248\n5139040\n5139050\n5139156\n5139201\n1928754\n1928960\n1929270\n1929402\n1929659\n1929697\n5139339\n8356768\n1930110\n1930904\n1930916\n4535106\n1931179\n1931509\n1931779\n1932166\n1932172\n1932411\n1932752\n1932976\n5806412\n4535162\n5140214\n5140244\n5140436\n5140443\n7634721\n7664111\n1933583\n1933647\n1933649\n1933793\n1934192\n1926260\n10879371\n11874998\n1933095\n1933138\n1924494\n5105339\n1919181\n1919221\n1919223\n1919320\n1919333\n1919346\n1919348\n1919706\n1919712\n1919716\n1919966\n5137748\n1920181\n1920237\n1920247\n1920258\n1920259\n5137790\n5137849\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n1920395\n1920491\n1920496\n1920502\n1920506\n1920512\n4535307\n5137891\n5805036\n5137902\n5137903\n1920707\n1920709\n1920712\n5137578\n5137605\n5137612\n5137663\n5137682\n5137706\n8203812\n1920218\n7207679\n1954490\n1954563\n5143380\n5143651\n1955694\n1955856\n1956440\n4525068\n1957266\n1957300\n1957572\n1957579\n1957583\n1957611\n1957718\n1957852\n1959395\n1959461\n1959682\n1960002\n1960484\n1960617\n1961013\n1962268\n1962636\n4302252\n1963168\n1963306\n1963710\n1964471\n1964637\n1965197\n1965913\n1967003\n1967006\n1967011\n1967265\n1967873\n11598540\n1968990\n1969463\n5144677\n5144782\n5144805\n5144880\n5144900\n5145186\n5145255\n5145502\n5145522\n8014296\n1971847\n5146476\n5146599\n5146601\n5146677\n5146762\n5146833\n5146837\n5146894\n5147030\n5147043\n5147062\n5147150\n5147171\n5147232\n5147354\n5147415\n5147441\n5147516\n8366158\n5147681\n1977068\n1977962\n4524638\n1980521\n1981998\n1983525\n1984033\n1984734\n1984942\n1985573\n1985760\n1986157\n9137631\n1987744\n4524221\n1989428\n1990582\n5149474\n1991371\n1992066\n5880550\n7429212\n9414984\n1989594\n4524998\n4525034\n4524376\n4524712\n4523522\n4523519\n4525078\n9220953\n9249651\n5149659\n5149768\n5149787\n7443518\n1942769\n4689929\n5141677\n1943236\n1943397\n8178854\n8277078\n8073674\n8273661\n1944504\n1945569\n1945589\n1945605\n1945877\n1945878\n1946661\n1946695\n7389824\n1947117\n1948941\n5142338\n5142352\n1949784\n1949794\n1949850\n1949877\n1949929\n5142599\n8109173\n1950156\n5977247\n8270406\n7633472\n4535396\n5142032\n1759079\n1759083\n1759153\n1760593\n1794361\n1760857\n1760891\n4533255\n1761438\n1761735\n1762680\n5109646\n5109661\n1764174\n1765017\n4534245\n4534252\n5109843\n5109855\n5109931\n8352161\n1765767\n1765954\n1766137\n1766210\n1766646\n1767511\n1767625\n1767674\n5772169\n5772171\n5772172\n5772176\n5772178\n5772186\n5772199\n5772206\n1768117\n5110213\n1769057\n1770353\n1770477\n4532696\n1772013\n8222049\n1776619\n1777253\n5110818\n1778074\n5111481\n5111513\n5772222\n1779641\n1780378\n4533325\n1782560\n1782672\n1782726\n1782948\n1783043\n5112283\n5714973\n5772349\n1783971\n1784349\n1784853\n1785185\n4532890\n1785361\n1786360\n1786619\n1786664\n1787064\n1787279\n1787610\n1787825\n1788522\n4534011\n1789071\n1789076\n1789086\n4534166\n1789695\n1789730\n1789745\n1789753\n1789755\n1790153\n4533115\n1792061\n1792418\n1792768\n1792996\n7918000\n1795068\n1795215\n7922810\n1795900\n1796169\n4532700\n1796451\n6097260\n4532811\n4534538\n4533125\n5883985\n8021109\n7654770\n6116899\n5114198\n1763072\n5772063\n9038042\n4534675\n4534681\n4534683\n8108800\n1771650\n1770772\n1770821\n1771040\n1771245\n4533714\n1765751\n5113847\n5113853\n5772309\n5108660\n5108761\n4532203\n4532206\n4532236\n4532260\n4532266\n8363507\n1822610\n1822796\n1823726\n1824113\n1824117\n1825077\n4534909\n4534914\n1825156\n5118904\n5118996\n5119245\n1892554\n1892555\n5806166\n1893137\n1893558\n1894268\n10398658\n1894714\n4535632\n4535636\n8049830\n10639484\n1894840\n4535809\n1896915\n1898286\n4299368\n5129293\n7346344\n1898521\n1898544\n1899071\n1901850\n5130392\n5130464\n5130471\n5130542\n8140883\n8189761\n4535689\n6221746\n1905383\n1906552\n8208583\n4535754\n5881946\n10656625\n1909398\n1909838\n1911298\n1911300\n1911461\n7728366\n5133687\n1911633\n4535596\n7809779\n8078362\n5133693\n1912395\n4299535\n5133990\n5772890\n4535581\n5134098\n5134301\n8312017\n1913175\n1913178\n1913328\n5135191\n8233062\n8314088\n11372793\n5136306\n1916376\n1916410\n1916412\n1918497\n1918667\n1918736\n1918776\n1918789\n1918843\n1918854\n8035998\n11645316\n4535618\n4535620\n4535510\n5130587\n7762841\n5131096\n8001799\n7642610\n5135513\n5135546\n1896957\n5129091\n9087922\n8138711\n1910628\n1899349\n1899433\n1899818\n5129913\n7934873\n8168644\n8393082\n5142870\n1952062\n1952816\n1941864\n1842097\n4301036\n8292351\n5101394\n1730978\n1731263\n1731598\n1878862\n1878895\n1878904\n1879001\n1879227\n1879408\n1879452\n1879471\n1879765\n1880907\n1880931\n1881126\n1881151\n9819403\n1881362\n1882210\n1882965\n1883067\n1883386\n1884465\n1884774\n1885937\n1886084\n1886088\n1886251\n1886587\n7562564\n4531670\n1888346\n10922411\n1888484\n1888579\n1888619\n1888759\n1889287\n1890187\n1890320\n1890534\n1890576\n1890670\n1890772\n1890776\n1890898\n1891129\n1891167\n1891177\n1891190\n1891217\n1891326\n1891386\n1891494\n4532022\n4532024\n1892242\n1892245\n1892476\n9674732\n1884255\n1884403\n5771877\n6133232\n5126680\n1889833\n5127656\n6121184\n4532150\n4532160\n5771880\n1831136\n1854615\n1858674\n1859046\n1973467\n5123221\n1867928\n1861494\n1861510\n1861644\n1861673\n1861797\n1861842\n1862293\n1862401\n1862517\n1862580\n1862692\n1862719\n1862765\n1862774\n5123922\n5124007\n1864161\n1864358\n1864652\n1993419\n5106115\n5106249\n5107076\n5107219\n7410701\n7674502\n7903078\n8201251\n8426357\n4522753\n1856289\n5122798\n1857581\n1857626\n1857829\n1858283\n1938069\n1938125\n1938131\n8225376\n1936969\n1938214\n1938520\n1938810\n5141262\n5141291\n5141305\n1835031\n5770913\n1841159\n5114409\n4534796\n1801051\n4534776\n4534779\n4534788\n9894093\n1802280\n1803060\n4534769\n", + "regions/new_zealand.classes": "1831999\n1832649\n1849007\n1849010\n1850156\n1850184\n1850781\n5806361\n11528968\n1851347\n1829776\n1829814\n4705103\n4695719\n1828395\n1828400\n1828402\n8150089\n1828426\n1828826\n1845965\n1830812\n1831473\n1831499\n1831565\n1831667\n4708342\n1761751\n1761752\n1762849\n1780857\n1798023\n5113950\n1803197\n5115777\n1816110\n1816264\n1781413\n9400916\n5113036\n4687389\n4529064\n1837724\n1837726\n1837727\n1839714\n1840346\n1841095\n1831752\n1852832\n5123339\n1870703\n1870988\n1872735\n1872827\n1872901\n1873079\n1874146\n1875534\n1876542\n10142569\n1877453\n1877988\n1878470\n1878490\n1890056\n1890065\n1836907\n1940575\n1736623\n1737131\n1737847\n1737893\n1738045\n1738081\n1739128\n1739220\n1739553\n1739567\n1743182\n1743184\n1743319\n4707896\n4707900\n1744998\n1745307\n1746462\n1746512\n1747068\n1747215\n1747222\n1747814\n1748103\n1748425\n1748518\n1748648\n1748661\n1738196\n1924713\n5139357\n5139524\n5139673\n11636481\n1932563\n7346444\n1920496\n1749531\n1749664\n1750131\n1750326\n5104903\n1954236\n1954514\n5143586\n1955271\n1955272\n1955413\n1955416\n1955422\n1955753\n1955755\n1955763\n1955899\n1956416\n1959379\n1960004\n4702961\n1962656\n1962657\n1962659\n1962689\n1964137\n1964141\n1964143\n1964144\n1964151\n1964153\n1964155\n1964158\n1964174\n1966978\n5144554\n5144558\n1970145\n1970148\n1970150\n5144937\n4702783\n4702784\n1972797\n1972800\n1972806\n5146856\n1976933\n1976934\n1976939\n1976941\n5148096\n1977759\n1977764\n1977767\n1977773\n1978274\n1978281\n1978282\n1978283\n4702599\n4702603\n4702609\n1980055\n1980063\n1980068\n1986101\n4702731\n1987855\n4702892\n4702893\n4702911\n4702912\n1988894\n1989282\n1989377\n1992167\n1954338\n1954344\n1954346\n1954351\n1954353\n1954356\n1954359\n10263383\n1758727\n1760173\n1762902\n5109882\n5802396\n1768546\n1768554\n1768557\n1768560\n1769302\n4688049\n9493016\n1776182\n5111195\n1785145\n1785149\n1785314\n1785329\n5112457\n5112460\n5112461\n5112464\n5112465\n5112467\n5112469\n5112474\n5112475\n5112480\n5112481\n1787165\n1791793\n1791862\n1794425\n1795068\n10690739\n10700540\n10706419\n10716234\n10732033\n10741837\n10747908\n10799294\n10814936\n10824750\n10840540\n10840565\n10850393\n10850415\n10866199\n10891794\n11539735\n11858666\n1796791\n1798084\n1792560\n8108800\n1770849\n1771245\n1771296\n1894054\n7712938\n5806175\n5806176\n5806177\n1902106\n1902108\n1909216\n1908108\n5133088\n7642610\n1910629\n1853190\n1735168\n1735391\n1735398\n5102432\n5120675\n5121177\n5121613\n8273859\n1842119\n1842124\n5120396\n1842508\n1879405\n10851840\n10857326\n5126231\n5126240\n5126241\n5126259\n5126284\n5126287\n5126292\n5126315\n5126332\n5126344\n5126357\n5126381\n5126396\n5126397\n5126398\n5126434\n5126445\n5126449\n5126454\n5126458\n5802331\n5802333\n1880353\n1880439\n1881122\n1881132\n1881157\n1881504\n1882297\n1882355\n5126866\n5126870\n5126889\n5126905\n5126916\n5126946\n5127024\n5127045\n5127054\n1882905\n1882965\n1884503\n1884539\n1884595\n1884607\n1884610\n4687228\n1884936\n1886251\n1887580\n1887686\n1888958\n1892462\n6133232\n5802339\n10245924\n10769553\n1887126\n1880275\n1880286\n1880293\n1880305\n1880310\n1880316\n1880318\n1880321\n1880350\n1831097\n1831136\n4708183\n10546013\n11428453\n1854028\n1854249\n1854906\n1858674\n1858762\n1859061\n4536292\n9590272\n9801765\n5123118\n5123137\n5123276\n1861644\n1992976\n1757853\n8254441\n1856005\n5122779\n1856348\n1856374\n1856516\n1857143\n1857180\n1857213\n1857233\n1857241\n1857295\n1857385\n1857410\n1857626\n1857829\n1857882\n1857900\n1857935\n1858100\n1858523\n1858526\n1856893\n1838289\n1838304\n1838308\n1838331\n1833518\n1833523\n1833525\n1833531\n1833532\n1833535\n1833539\n1833600\n1833664\n1835082\n1836871\n1836899\n1837172\n1837572\n1837857\n1837870\n1837894\n1838626\n1838629\n1838633\n1838635\n1838641\n1838649\n8958353\n1838960\n4528702\n1839370\n1841180\n1841183\n1841188\n1841215\n1841219\n1801432\n", + "regions/north_africa.classes": "1733755\n1734704\n11529292\n1845270\n9868978\n1850640\n1850781\n1845952\n4532500\n1783882\n1786980\n1786985\n1788553\n1790692\n1792210\n1797542\n4532473\n1798481\n1798504\n1798802\n4532352\n1803148\n1803163\n1805110\n5117189\n1814552\n9331464\n1819928\n8148822\n1780869\n4532453\n1777517\n1860857\n1871252\n1871783\n7673242\n1872901\n1873079\n1873215\n1875409\n1875687\n1876542\n9111961\n5126052\n4531417\n5884888\n1941330\n10309794\n1736623\n1739833\n10581870\n1922572\n1924082\n10656713\n1924713\n1925918\n1926324\n1926385\n1926546\n1926550\n1929697\n1930904\n1930916\n4535106\n1931788\n1932393\n1932411\n1932752\n1932976\n9954885\n1933647\n1933649\n1926166\n1933204\n1919223\n1919333\n7981372\n1919346\n1919703\n1919966\n1920258\n5137790\n1920359\n1920369\n1920395\n1920496\n1920506\n1920709\n5137612\n1920218\n1955694\n1957266\n1957286\n8172949\n1961013\n1964195\n1964836\n1967025\n1967265\n1969958\n5144805\n5144900\n5145502\n5145842\n8014296\n7996464\n5146611\n5146774\n5146837\n5147039\n5147043\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147560\n5148264\n1983039\n1983062\n1983525\n1983528\n1985742\n4525093\n6118530\n1988019\n1988064\n1992066\n11654024\n7507369\n1989594\n4525034\n4524541\n9220953\n5149787\n8277078\n8073674\n1946661\n5142338\n1949954\n4534275\n5109843\n5109931\n8352161\n5772171\n5772172\n1775329\n5110858\n5772222\n1785185\n1786360\n1787770\n4534166\n4534194\n1792418\n1795068\n4532908\n1795483\n4532811\n1763072\n4534675\n4534681\n8108800\n1770821\n1771040\n4533714\n1765751\n4532203\n4532206\n4532266\n1824131\n5118892\n4535632\n8049830\n4535809\n4535819\n4299368\n1901850\n5130542\n1911461\n5134098\n5134301\n1916352\n1916554\n1918632\n1918776\n7988274\n8404037\n7762841\n7642610\n1896957\n1899737\n7934873\n8393082\n1879001\n1879408\n1879427\n1879452\n1879471\n1879691\n1881126\n1881151\n9819403\n1881362\n1882905\n1882965\n1885931\n1886251\n7562564\n1888484\n1890534\n1890898\n1891171\n1891217\n1892476\n1889833\n6121184\n8218441\n4532150\n4532160\n1831136\n1861494\n1861510\n1862293\n1862401\n1862692\n1862765\n1864652\n7761138\n1857581\n8225376\n4690079\n5141297\n4534796\n1803060\n", + "regions/north_america.classes": "12170988\n1934991\n1935301\n5140969\n5140980\n1936378\n1936388\n10331171\n1868535\n10100176\n10517417\n1992315\n1860664\n1860736\n5101556\n5101559\n1732717\n1732901\n1733525\n5101763\n5101811\n5715280\n5715281\n1734384\n5102304\n5102324\n5102335\n5102365\n5102396\n1833475\n4302388\n1845270\n1845279\n1845314\n1845329\n1845335\n1845385\n1845442\n1845448\n1845455\n1845502\n1845513\n1845604\n1845605\n1846313\n1846351\n1846439\n5121847\n5121850\n1846849\n1846860\n1846914\n1846941\n1846945\n1846971\n1846992\n1847013\n1847059\n1847064\n1847068\n1847111\n1847149\n1847225\n1847249\n1847274\n1847308\n1847343\n1847392\n1847407\n1847426\n1847457\n1847484\n1847498\n1847568\n1847572\n8559137\n1847919\n1847930\n1847944\n10427568\n1848114\n1848259\n1848272\n1848274\n1848295\n1848312\n1848322\n1848325\n1848490\n1848505\n1848610\n1848639\n1848730\n1848864\n9973217\n1849294\n1849457\n1849470\n1850045\n1850156\n1850184\n1850225\n1850321\n1850575\n1850585\n1850589\n1850597\n1850673\n1850690\n1850722\n1850729\n1850771\n1850773\n1850774\n1850781\n1850798\n1850868\n1850884\n1850908\n1850922\n1850923\n1850962\n1850971\n1851002\n1851011\n8986624\n5122062\n5122086\n5122121\n5122131\n1851213\n1851237\n1851243\n1851300\n1851337\n1851347\n1851453\n1851462\n1851670\n1851714\n1851750\n5122206\n1851828\n1851845\n1852165\n1852320\n1852382\n9123440\n1848212\n1848213\n1848920\n1849498\n11430021\n1829533\n1829659\n1829612\n1829799\n8779506\n10508467\n12031071\n11642411\n1829021\n1829029\n10053809\n10176413\n10067382\n5879654\n1835460\n1845793\n1845866\n1845962\n1846035\n1846052\n9159662\n1846505\n10594478\n8503184\n1834710\n1841261\n5119890\n1830843\n1830125\n1830137\n1830191\n1830194\n1830202\n1830203\n1830229\n1830241\n1830243\n1830284\n1830293\n9998920\n5110390\n1758860\n1758861\n1758866\n1760384\n1760385\n1760396\n1760397\n1760398\n1760400\n5108951\n1760927\n1761101\n1761102\n1761110\n1761838\n1762151\n1762286\n9553692\n1762474\n8331687\n8379616\n9354496\n9546910\n1763163\n1763184\n1763199\n1763223\n1763256\n1764525\n1765097\n1765182\n5110044\n1766839\n1766845\n1766880\n1767031\n1767320\n1767499\n1767508\n9384861\n1768283\n1769000\n1769336\n1769841\n1770038\n1770044\n1770263\n1770380\n1770383\n1770384\n1770385\n11728240\n7396517\n5110297\n5110299\n5110305\n8963926\n9256436\n9279670\n9283228\n9323382\n9327042\n9395422\n9399145\n9440644\n9560782\n9564612\n9607447\n9636442\n1771846\n1771848\n1771859\n5110326\n5110327\n1772260\n1772427\n1772428\n1772716\n9237599\n9424441\n9534690\n5110492\n5110533\n1774907\n9287097\n1775980\n1777024\n1777034\n1777052\n1777075\n8345991\n1777179\n9257908\n1777737\n1777942\n5110891\n1778548\n1778549\n1778551\n1778555\n9423248\n9610080\n1779740\n1780150\n1781029\n1781038\n7672864\n9305011\n9390065\n9630748\n1781944\n1781946\n5112051\n5112053\n5112060\n5112068\n5112078\n5112080\n9008379\n1782208\n1782214\n8384839\n1783365\n1785913\n1785916\n9520799\n1786219\n1786247\n7480993\n1786912\n1786913\n1787106\n1787464\n11495556\n5112542\n1788278\n11890681\n10295290\n7346446\n1788891\n1789190\n1789191\n1789193\n5112626\n1789794\n1790230\n1790240\n1790246\n1790248\n1790257\n1790258\n1790268\n1790274\n1790281\n1790287\n1790308\n5112798\n1790692\n1790787\n1790832\n1790937\n1790945\n7785540\n9345545\n5112843\n1791151\n5112892\n5112900\n5112908\n5112911\n5112915\n5112917\n5112923\n5112927\n5112940\n5112944\n5112947\n5112959\n5112960\n5112961\n5112963\n5112968\n5112990\n1791372\n1792276\n9382044\n1792831\n1793566\n1794518\n10850929\n1795042\n1795045\n1795049\n9340452\n9622322\n1796257\n1796288\n1796338\n1797111\n1797121\n1797122\n1797135\n1797137\n1797146\n1797194\n1797198\n1797206\n1797210\n1797218\n1797252\n1797257\n1797275\n1797285\n1797290\n1797296\n1797300\n1797339\n1797365\n1797373\n1797375\n1797379\n1797394\n1797409\n1797432\n1797433\n1797436\n1797440\n1797445\n1797464\n1797474\n1797475\n1797478\n1797488\n1797507\n1797521\n1797556\n8874140\n9022399\n9236138\n9240357\n9252524\n9273409\n9289908\n9310510\n9312545\n9340070\n9344456\n9350484\n9367471\n9406020\n9410076\n9416645\n9455404\n9468297\n9483647\n9547311\n9549475\n9554074\n9560404\n9604825\n9607036\n9611624\n9618068\n9622725\n5113950\n7598729\n1798393\n1798402\n1798427\n1798449\n4532352\n8150450\n8793873\n9238900\n9243875\n9292394\n9314022\n9353360\n9358521\n9425857\n9499599\n9527919\n9533271\n9545713\n9579730\n9608673\n9621113\n9626500\n1799183\n1799703\n9249036\n1803127\n1803218\n10033898\n5114892\n5114903\n11713970\n5114923\n5114930\n5114934\n5114946\n1804071\n1804074\n1804331\n1804394\n1804398\n1804401\n1804404\n1804407\n1804409\n1804512\n1804513\n5115046\n1804759\n11508076\n11907485\n1804963\n1804969\n1804971\n1804974\n1805197\n1805537\n1805540\n1805542\n1805549\n1805682\n1805691\n1805938\n1805955\n1806145\n1806170\n1806176\n1806687\n1806690\n1806702\n1806737\n1806740\n9235225\n9278398\n9394138\n9417594\n9491341\n9541734\n9565980\n9588105\n1806872\n1807271\n1807273\n5115500\n1807514\n1807881\n1808088\n1808590\n1808592\n1808752\n8929537\n1809066\n5115777\n1809127\n1809135\n9463067\n1809294\n1809299\n1809305\n1809348\n1809499\n1810025\n1810121\n1810469\n5116128\n5116134\n5116145\n5116293\n1810743\n1810846\n9389851\n7535515\n1811019\n1811079\n1811122\n1811439\n5116332\n5116338\n5116353\n5116358\n5116423\n1813248\n1814182\n1814336\n1814338\n1814357\n1814359\n1814365\n1814800\n1814827\n1814838\n1814843\n1814863\n5117414\n9434954\n5117430\n5117462\n1816570\n5117685\n1817086\n1817690\n1817693\n1817696\n1817727\n1817729\n1817732\n1817734\n1817749\n1817797\n11725616\n1817864\n1817940\n5118046\n11758730\n1818454\n1818463\n1819310\n1819873\n5118327\n5925317\n8720118\n9391467\n9568710\n1820406\n1820711\n1820714\n1820722\n1820764\n1820791\n1820940\n1821051\n1821113\n8178238\n10551407\n11873825\n8872165\n9288386\n9291075\n9362560\n9480768\n9601788\n9400545\n10395440\n8774985\n8908724\n9135886\n9247563\n9288596\n9290866\n9315577\n9334851\n9406984\n9432644\n9452274\n9526331\n9552703\n9555094\n9599150\n10214972\n10851228\n12194283\n5115854\n5115874\n9530200\n9359871\n9379595\n9387353\n9407200\n9432438\n9452497\n9460510\n9498206\n9552466\n9627917\n5114949\n5114950\n5114956\n8429622\n1788711\n1788717\n7560807\n9301336\n5114912\n5114915\n5114921\n1781413\n1781420\n9446902\n1796523\n8805966\n8905759\n9051758\n9254017\n9298735\n9324570\n9368974\n9443159\n9469928\n9488783\n9637664\n1793538\n1793542\n1813468\n1813413\n1813415\n1760233\n1760257\n9235027\n9522383\n8177591\n5109796\n1821856\n1775796\n1811814\n1811948\n1812026\n1812105\n1812207\n1812262\n1812339\n5884258\n7716829\n8299504\n8968321\n9451320\n1820039\n1784959\n1785024\n1785072\n5884188\n6117485\n7611914\n7924383\n1780617\n1780646\n1780668\n1780676\n1777463\n1777471\n5112440\n1791735\n1791736\n1860974\n1860989\n1860993\n1860996\n1861030\n7472845\n1852956\n1852978\n1835430\n1835436\n1835438\n1835449\n1835451\n1835467\n1835819\n10610041\n1837360\n1837420\n4529064\n10017792\n1838360\n1838465\n1838512\n1838584\n1839296\n1840311\n1840346\n1840360\n1840379\n1840441\n1840448\n1840485\n1840520\n1840543\n1840553\n1840592\n1840656\n1841081\n1841084\n1841091\n10187154\n1831752\n9473121\n1852901\n9851261\n1751299\n1751336\n1751400\n1860184\n10165831\n1860443\n10308365\n9913863\n5123394\n5123419\n5769164\n5123461\n1735408\n4302389\n8797666\n1869666\n1869825\n1869852\n1870017\n1870037\n1870202\n1870250\n1870267\n1870308\n1870415\n1870426\n1870450\n1870607\n1870721\n1870727\n1870733\n1870751\n1870777\n1870988\n1871175\n1871379\n10246305\n10588642\n10817208\n1871407\n8766638\n9944922\n1871414\n1871419\n1871457\n1871509\n1871560\n1871597\n1871698\n1871763\n1871890\n1871923\n1871940\n1872200\n1872210\n10336328\n1872452\n1872456\n1872466\n1872514\n1872515\n1872873\n1872901\n1873051\n1873079\n1873267\n1873319\n5125545\n10807383\n1873376\n1873381\n1873383\n1873384\n1873398\n1873585\n7372375\n1873753\n10143814\n10165457\n10366580\n10410048\n10518163\n10561589\n9971850\n1874158\n1874160\n1874179\n1874248\n1874257\n1874274\n1874279\n4531145\n1874317\n1874513\n1874552\n10244305\n1874901\n1875196\n1875319\n1875407\n1875451\n1875478\n1875483\n1875485\n1875606\n1875607\n1875631\n1875914\n1876409\n1876542\n1876548\n1876549\n1876665\n1876987\n10142569\n1877002\n5125916\n5125917\n1877282\n1877321\n1877338\n1877353\n1877364\n1877365\n1877372\n1877443\n1877492\n1877537\n5125939\n1877643\n5126000\n5126013\n1877940\n1877941\n1877975\n1877988\n1877995\n1878158\n1878370\n1878392\n1878490\n5976937\n5884888\n1875885\n1873697\n5143284\n5143285\n11950325\n12018158\n12060941\n12087490\n1939962\n1939964\n1940110\n11667300\n5131957\n5141493\n5714558\n5714572\n5714575\n5714600\n10267561\n10286565\n10451589\n10509408\n1940517\n1940546\n1940575\n1940580\n1940601\n1940604\n1940609\n1940612\n1940694\n1940744\n1940757\n4525777\n8956729\n9930604\n10402067\n1941310\n1941437\n10495733\n10584071\n12252570\n1941266\n1941294\n1941299\n1939833\n1939879\n9146244\n1736315\n1736390\n10132596\n11645405\n1736499\n1736623\n10274976\n5102635\n5102637\n5102651\n5102666\n5102668\n5102671\n5102678\n1736760\n10355428\n1736803\n1736807\n1736809\n1736811\n1736821\n1736826\n1736836\n1736860\n10638589\n1736915\n1736918\n1736937\n1736939\n1736995\n1737015\n1737072\n1737131\n1737231\n1737374\n1737403\n1737417\n1737491\n4530608\n7350238\n7466487\n1737526\n1737542\n1737544\n1737551\n1737552\n1737753\n1737768\n1737847\n1737904\n1737929\n1737964\n1737968\n1737973\n1737978\n8485254\n1738218\n10090105\n10370026\n1738422\n5102693\n5102735\n5102773\n5102782\n5102807\n5102809\n5102830\n8420632\n9953996\n5102931\n1738700\n1738791\n1738794\n1738809\n1738839\n1738888\n1739034\n8086347\n1739272\n1739284\n1739290\n1739362\n1739364\n1739381\n1739400\n10596756\n1739612\n1739617\n1739629\n1739646\n1739656\n1739668\n1739677\n10229731\n1739727\n1739767\n1739770\n1739833\n1739867\n1739884\n1739922\n1739924\n1739927\n1739954\n1739956\n1739964\n1739973\n1739983\n1740003\n1740037\n1740060\n1740069\n1740116\n1740120\n1740133\n1740148\n1740155\n1740163\n1740225\n1740246\n1740305\n1740370\n1740389\n1740392\n1740400\n1740449\n1740533\n8094357\n1741056\n1741130\n1741131\n1741324\n1741361\n1741368\n4530151\n1741398\n1741400\n5103066\n5771357\n10709446\n10776625\n10869347\n1741633\n1741719\n1741747\n1741812\n1741818\n1741820\n1741823\n1741824\n1741826\n9880932\n1742081\n1742089\n1742091\n1742106\n1742121\n1742150\n1742168\n1742178\n1742180\n1742198\n1742203\n1742214\n1742239\n1742241\n1742260\n1742263\n1742268\n1742272\n1742273\n1742287\n1742293\n1742304\n1742310\n1742335\n10000103\n10044107\n10137001\n10194727\n10395101\n10695966\n11508404\n11899754\n5103394\n5103451\n9849625\n9885192\n10534945\n1743323\n10095278\n10134865\n11923027\n1743461\n10073044\n10295171\n10365884\n10388627\n10446580\n10539598\n12197284\n5104063\n5104088\n5104093\n5104116\n9051888\n9958147\n9971153\n1743653\n1743657\n1743658\n1743663\n1743694\n1743768\n1743825\n1743828\n1743838\n1743855\n1743898\n10205587\n10450442\n1744071\n10271464\n1744130\n1744136\n5104157\n1744212\n1744416\n12276630\n9860684\n9953708\n1744700\n1744709\n1744724\n1744731\n1744949\n1744953\n1745022\n10483734\n1745558\n1745606\n1745634\n1745666\n1745669\n1745675\n1745724\n1745729\n1745746\n1745756\n1745761\n1745787\n1745814\n1745830\n9991710\n1746000\n10593489\n1746068\n1746586\n1746666\n1746695\n1746751\n1746754\n1746763\n1746774\n1746775\n1746831\n1746856\n1746859\n1746876\n1746881\n1746898\n1746927\n1746949\n4302199\n4302202\n1747024\n1747140\n1747147\n1747150\n1747155\n1747160\n1747161\n1747163\n1747166\n1747171\n1747188\n1747189\n10046698\n10442122\n12066849\n12107129\n12126779\n1747196\n9040133\n9896144\n10380465\n10445629\n10446898\n10481441\n10503464\n10547716\n10776919\n12223349\n1747523\n1747738\n1747740\n1748109\n1748148\n1748149\n1748151\n1748152\n9176043\n10580256\n9911298\n9948031\n10002059\n8734154\n8843927\n10236521\n5103083\n5103100\n5103118\n5103154\n5103166\n5103183\n5103201\n5103227\n5771230\n5771232\n5771256\n9023222\n1743651\n10545267\n1831775\n10310599\n10346267\n4525540\n1935498\n4299071\n1920844\n1920889\n1920900\n1920923\n1921053\n10657453\n1921123\n1921239\n1921240\n1921247\n1921248\n1921255\n1921910\n8825450\n1922038\n1922039\n1922041\n1922044\n1922049\n1922219\n1922223\n1922455\n10278292\n1922676\n1922851\n1922865\n1922868\n1922889\n1922890\n1922937\n5138387\n5138602\n5714679\n5714689\n9002107\n1923498\n1923505\n8913017\n1923678\n1923679\n1924050\n1924106\n1924176\n12174634\n12185456\n12188086\n12205404\n12212066\n12222885\n12229400\n12233602\n12250854\n12257418\n12258984\n12265590\n1924223\n1924232\n1924513\n1924518\n1924521\n1924713\n8992718\n9157410\n1924770\n10120854\n1925429\n1925458\n1925498\n1925500\n1925501\n1925509\n1925515\n4300384\n4300393\n4300399\n8904480\n12195040\n1925918\n1925922\n4300000\n4300011\n4300012\n12219036\n1926001\n1926009\n11797637\n1926054\n4300259\n1926823\n1926834\n1926861\n1927301\n1927302\n5139026\n5139029\n5714747\n5714755\n5714788\n5139034\n1927909\n1927988\n1928009\n4300406\n1928214\n1928215\n8846776\n5139064\n1928584\n1928589\n1929046\n1929129\n11720834\n5139346\n5139540\n5139578\n5139700\n5714618\n1929772\n1929962\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930183\n1930263\n1930270\n1930288\n1930289\n1930331\n1930361\n1930391\n1930410\n1930422\n1930481\n1930563\n1930581\n1930653\n1930660\n1930678\n1930728\n1930772\n1930830\n1931116\n1931119\n1931122\n1931126\n5139864\n1931310\n1931553\n1931784\n1931787\n5139897\n5139908\n5139909\n10113190\n10357476\n10570752\n11417741\n11802190\n1932056\n1932172\n1932175\n1932386\n1932406\n1932409\n1932414\n1932417\n1932428\n4300277\n4300363\n7346444\n1932576\n1932879\n5140033\n5140054\n5140063\n1933260\n1933998\n1935853\n1935872\n1935878\n1935884\n1935888\n1935899\n1935904\n1935912\n1935931\n1935935\n5139928\n4300268\n9469139\n9975698\n1752109\n1752111\n9776414\n1752281\n1752285\n1752286\n1752825\n1752832\n1752894\n1752923\n10376685\n1753105\n1753106\n1753111\n11507608\n5105365\n5105367\n5105369\n5105376\n5105447\n5105469\n5105491\n5105508\n11014495\n1753604\n1753668\n5105588\n1753833\n1753922\n1753929\n5105603\n10515719\n10413588\n10514620\n5105336\n5105344\n5105352\n5806127\n5137511\n5137512\n12181811\n12226416\n12251247\n1919125\n1919128\n1919130\n1919145\n1919149\n1919173\n1919235\n1919245\n1919282\n1919289\n5137540\n1919316\n1919326\n1919327\n1919328\n1919338\n1919646\n1919652\n1919653\n1919656\n4701298\n4701336\n7661785\n1919700\n1919701\n1919702\n1919705\n1919711\n1919719\n10703948\n1919939\n1919943\n1919947\n1919949\n1920192\n5137791\n5137800\n5137802\n5137803\n4701136\n5137817\n5137819\n5714819\n1920426\n1920461\n1920463\n1920496\n5137882\n5137890\n5137894\n1920552\n1920571\n1920574\n1920581\n1920691\n1920803\n1920809\n1920810\n5714914\n5137582\n5137595\n5137601\n5137615\n5137626\n5137636\n5137659\n5137664\n5137672\n5137674\n5137679\n5137689\n5137693\n5137694\n5137700\n5137711\n5137714\n12191141\n12206386\n12234544\n12236627\n1920621\n1748922\n1749050\n1749287\n1749713\n1749760\n1749929\n1749936\n5104815\n5104891\n5104903\n5104948\n5104986\n5105031\n5105057\n5105068\n5105120\n5105124\n9942354\n1750924\n1751146\n1751163\n1749591\n1749656\n8741260\n11840028\n1758461\n1731826\n1731862\n1992547\n1954930\n1954933\n1954992\n1954993\n1955497\n1955498\n5143657\n5143703\n1956098\n1956099\n1956215\n1956462\n1956505\n1956510\n1956597\n1956626\n1956716\n8793973\n1956904\n1957441\n1957845\n1957870\n8775810\n5143952\n1958049\n5143960\n5143964\n1958121\n1958528\n1959543\n1959637\n1959858\n1959890\n1959898\n1959917\n1959919\n1959934\n9320916\n1960090\n1960166\n1960255\n1960503\n1960632\n1960951\n4302240\n9468667\n1961361\n1961388\n1961718\n10650351\n1962051\n1962076\n1962118\n9368382\n9592714\n5144227\n5144318\n1962432\n1962434\n1962479\n1962490\n1962516\n1962722\n1962727\n9264326\n1962895\n1962900\n1962925\n4302252\n1963052\n1963201\n1963207\n1963212\n12214993\n1963433\n1963619\n1963633\n1963848\n1963854\n1963874\n1963879\n1963892\n1964041\n1964585\n8361848\n1964715\n5144424\n1965024\n1965038\n1965058\n1965069\n1965078\n1965100\n5880367\n6214734\n1965586\n1965671\n1965697\n1965699\n1965763\n1965794\n1965797\n1965805\n1965807\n1965823\n1965825\n1965831\n1965838\n1965861\n1965865\n1965887\n5144457\n1966088\n1966185\n1966195\n1966198\n1967127\n1967128\n1967212\n1967226\n1967240\n9277294\n9492499\n1967433\n1968205\n5144564\n5144575\n8793278\n1968313\n1968315\n1968321\n1968324\n1968538\n5144583\n5144588\n5144593\n5144596\n5144597\n1968942\n1969961\n1969978\n1970119\n5144729\n5144870\n5144935\n5144953\n5145078\n5145139\n5145238\n5145466\n5145521\n5145547\n5145560\n5145713\n7700568\n1971835\n1971995\n1971998\n1971999\n1972010\n1972101\n1972250\n5145998\n5146030\n5146082\n5146091\n1972447\n1972449\n1972454\n9558845\n5146179\n1972691\n1973146\n1973147\n1973164\n1973165\n1973245\n1973487\n1973493\n1973665\n10404426\n5146497\n5146598\n5146677\n5146820\n5146832\n5147018\n5147039\n5147114\n5147139\n5147179\n5147211\n9370933\n9469300\n9590066\n1975365\n1975607\n9477531\n1975741\n5715277\n5715278\n1975897\n1975914\n1976073\n8793324\n1976248\n1976333\n8820198\n5147703\n5147713\n1976651\n1977003\n1977007\n1977054\n1977068\n5147827\n5147838\n5147858\n5147868\n5147871\n5147879\n5147883\n5147894\n5147898\n5147899\n5147909\n8951618\n5148184\n9617496\n1978445\n9308082\n1978464\n1978493\n1978494\n1978526\n1978671\n9243264\n1978751\n5148277\n5148280\n5806132\n1978958\n1978959\n1978977\n1979255\n1979289\n1979344\n1979358\n1979380\n1979427\n1979430\n1979473\n1979475\n1979501\n1979721\n1979726\n1980025\n1980245\n1980247\n1980250\n1980290\n5148379\n5148462\n1980505\n1980509\n1980559\n8421569\n1981144\n1981160\n1981161\n1981162\n1981191\n1981202\n1981209\n1981210\n1981222\n1981252\n1981258\n1981277\n1981280\n1981281\n1981284\n1981312\n1981718\n10247981\n1981951\n1981959\n1981973\n5148520\n1982406\n1982447\n1982533\n1982613\n1982746\n1982780\n1982824\n1982898\n1982951\n1983260\n1983263\n1983434\n1983441\n1983491\n1983705\n1983709\n1983799\n1983896\n1984073\n1984110\n9577547\n5148531\n5148544\n5148576\n9237621\n9307713\n9370312\n9424464\n9488754\n9544337\n9610059\n5148719\n5148743\n5148753\n5148766\n5148850\n5148934\n5148952\n5148954\n1984654\n9382415\n1984942\n1985405\n1985406\n1985409\n1985421\n1985423\n9332369\n1985485\n1985487\n5149222\n5149237\n1985945\n1985952\n1985956\n1986004\n1986020\n1986040\n1986091\n1986113\n1986171\n1986192\n1986367\n1986497\n1986623\n1986807\n1986906\n5149307\n1986998\n4302274\n5149317\n1987145\n1987146\n1987301\n1987330\n9538525\n1987633\n4524223\n1988495\n1989083\n1989084\n1989538\n1989582\n1989903\n1990155\n1990198\n1990200\n1990270\n1990331\n1990335\n1990357\n1990594\n1990998\n1991012\n1991280\n1991281\n1991289\n1991294\n1991295\n1991298\n1991299\n1991303\n5149630\n5149631\n1991371\n1991429\n1992172\n12010643\n12225687\n5880539\n5880552\n5880559\n5880563\n7657419\n8941993\n9110918\n9243319\n9251088\n9259786\n9261296\n9272461\n9311081\n9330467\n9339487\n9366016\n9368398\n9392058\n9392076\n9400977\n9402536\n9413168\n9419734\n9428900\n9438677\n9454444\n9456004\n9474405\n9489399\n9502724\n9530135\n9532702\n9558873\n9574939\n9616438\n9624918\n9632824\n5144381\n5144386\n5144407\n9533293\n4302221\n9621086\n4302230\n4523560\n9281181\n9352348\n9352978\n9403481\n9436173\n9448761\n9453490\n9494431\n9516038\n9516680\n9523379\n9534291\n9545331\n4524072\n9288979\n9307098\n9423863\n9497623\n9581695\n9619088\n9273963\n9479525\n9237031\n9274899\n9321500\n9299326\n9309575\n9415669\n5144196\n5715276\n5715275\n10221195\n1978197\n9363893\n9391442\n4523885\n5149713\n5149753\n5149777\n5149782\n5149811\n5149819\n5146305\n5146326\n5146389\n1980462\n1972942\n4302268\n9256786\n9291092\n5150027\n12200261\n11470872\n11654707\n11776315\n11834445\n11892494\n12252926\n11423843\n11670842\n12173621\n12247340\n12252340\n12239491\n12258146\n1942141\n1942170\n1942171\n12286003\n1942341\n1942416\n1942455\n1942509\n4301744\n4301749\n1942558\n1942670\n5141662\n1942945\n1942947\n1942964\n1942967\n1942971\n1942980\n1942982\n1942994\n5141697\n1943054\n1943066\n4302008\n5141743\n5141763\n1943563\n1943571\n1943573\n1943588\n4301355\n1943631\n1943655\n1943673\n1943823\n1943824\n1943830\n1943832\n1943901\n12198522\n12233808\n1943942\n1943953\n1943954\n1943960\n1943962\n1943964\n1943990\n1944004\n8133678\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944574\n1944769\n4301934\n1944798\n1944815\n1944832\n5141913\n9551544\n1945081\n1945302\n1945312\n1945462\n1945476\n1945477\n1945605\n4301942\n1945957\n1946074\n1946078\n1946079\n1946163\n1946177\n5142061\n5142062\n1946310\n1946327\n1946333\n1946469\n12223105\n12233838\n1946495\n1946500\n1946509\n4302101\n1946544\n1946550\n1946577\n1946582\n1946610\n1946612\n1946618\n1946628\n1946737\n5142086\n1946810\n1946853\n1946865\n1946901\n11753578\n1946980\n1946981\n1946983\n1946989\n1946991\n1946992\n1946995\n1946999\n1947037\n1947055\n1947147\n1947282\n1947333\n1947335\n5142166\n5142175\n1947402\n1947507\n1947568\n1947577\n1947587\n1947588\n1947597\n1947842\n1947894\n1947915\n12208168\n1947973\n1947976\n1947979\n1947980\n1948042\n1948054\n1948158\n7603634\n1948439\n1948446\n1948521\n4301945\n1948826\n1948865\n1948890\n1948947\n1949049\n12353663\n1949285\n1949322\n1949331\n1949449\n1949451\n1949466\n1949492\n10574663\n1949512\n1949515\n1949520\n1949544\n1949545\n1949549\n1949592\n1949621\n7726809\n9395000\n1949687\n1949697\n1950006\n5142372\n5142424\n5142436\n5142583\n1950017\n1950019\n4301876\n1950044\n1950047\n1950052\n1950133\n1950153\n1950197\n11967675\n1950384\n1950396\n1950408\n1950409\n1950567\n1950578\n1950654\n1950767\n1950856\n1951062\n1951097\n1951116\n1951121\n1951125\n1951133\n1951217\n1951218\n4301897\n5715127\n12180041\n12206694\n1951340\n5142829\n5977179\n5977185\n5977197\n5977203\n5977207\n5977208\n5977214\n5977216\n5977220\n5977235\n5977250\n5977251\n5977259\n5977260\n5977261\n5977262\n5142249\n5142254\n5142267\n5142269\n5142273\n5142278\n5142283\n5142298\n5142300\n5142314\n5142317\n5142319\n5142322\n5142328\n7633472\n1948771\n1948774\n1948779\n1948789\n1948799\n1948800\n1948802\n1948803\n1948804\n1948808\n1948809\n1948810\n1945374\n1945378\n12175154\n9400895\n9245604\n1758767\n1758771\n1758781\n1758783\n7911151\n9366762\n9445489\n5108416\n5108417\n5108419\n1758879\n1758898\n1758906\n1758916\n1759037\n1759040\n1759041\n1759092\n9447614\n1759338\n1759553\n1759563\n1759573\n1759585\n1759605\n1759610\n1759611\n1759621\n1759624\n1759631\n1759632\n1759633\n1759634\n1759671\n1759677\n1759678\n1759688\n1759691\n1759694\n1759719\n1759799\n1759881\n9306367\n1760261\n1760309\n1760361\n1760454\n1760455\n1760682\n5108957\n1761143\n1761498\n1761553\n1761563\n1761798\n1761892\n9418549\n9616055\n1762609\n1762615\n5109523\n5109535\n5109566\n5109596\n5109651\n9337858\n1763610\n9328683\n9438913\n1764238\n1764691\n1764693\n1764917\n1764929\n1765011\n1765044\n4534245\n1765172\n5109829\n5109845\n5109848\n5109850\n5109852\n5109855\n5109881\n5109954\n5109958\n8352161\n1765733\n11487320\n1765769\n1765779\n1765798\n1765962\n1766193\n1766205\n1766210\n1766237\n1766287\n1766392\n1766410\n1766489\n1766509\n4301071\n4301081\n7895336\n9362190\n1766646\n1766650\n1766917\n1766919\n1766921\n1767052\n1767140\n1767142\n1767335\n1767336\n1767337\n1767338\n1767347\n7598945\n9062262\n1767484\n9471709\n1767571\n1767579\n1767584\n9511345\n1767602\n1767612\n1767628\n5772169\n9381852\n1767719\n1768132\n1768172\n1768174\n1769592\n9373686\n1769814\n1769934\n1769947\n1769958\n1770132\n1770144\n9148810\n1770461\n1770659\n1771441\n1771872\n1771997\n1772013\n9242609\n9244973\n9254157\n9396755\n9463442\n9476708\n9495306\n9562175\n9616658\n9625112\n9630930\n9633562\n1772043\n1772169\n5110333\n5110341\n5110356\n9539128\n1772422\n1772462\n9605631\n1772954\n1772977\n1773002\n1773069\n1773081\n1773248\n1773313\n1773315\n1773510\n1773577\n1773662\n1773677\n1773728\n4301148\n9369576\n1773742\n1773743\n1773744\n1773746\n9367674\n9399288\n9593475\n1773783\n1773784\n9283948\n9560018\n1774092\n1774095\n9322646\n1774243\n1774253\n1774254\n1774262\n1774268\n9243117\n9409309\n9550265\n1774314\n1774358\n1774792\n4301304\n6115953\n1775046\n1775055\n9547676\n1775089\n1775118\n1775290\n1775291\n1775508\n1775509\n1775672\n1775680\n1775791\n1775866\n1775970\n1776167\n5110723\n5110728\n5110752\n5110754\n5110756\n1776397\n1776406\n1776415\n1776459\n1776462\n1776467\n1776470\n1776472\n1776473\n1776476\n1776618\n1776861\n1776871\n1776880\n1777139\n1777261\n1777728\n1777730\n9310286\n5110863\n5715009\n5715010\n5715013\n1777974\n1777976\n1777980\n1777982\n1777994\n1777996\n1778000\n1778006\n1778007\n1778013\n1778015\n1778024\n1778031\n1778033\n1778034\n1778037\n1778045\n1778049\n9456735\n1778337\n1778534\n1778688\n5111076\n5111139\n5111141\n5111343\n5111360\n5111372\n5111397\n5111521\n5111528\n5111546\n5111568\n7593392\n9175037\n9596498\n1779430\n1779633\n1779643\n1779709\n1779713\n1779959\n1780209\n1780213\n1780214\n1780215\n1780272\n1780309\n1780313\n1780326\n1780330\n1780344\n1780390\n1780407\n1780414\n1780437\n1780440\n1780450\n8802610\n9284849\n1780852\n7825945\n9374443\n9392614\n5111956\n1781692\n1781819\n1782031\n1782422\n1782424\n1782523\n1782542\n1782585\n1782595\n9289753\n9433772\n9525172\n1782622\n10441062\n1782682\n1782689\n1782700\n1782705\n1782706\n1782707\n1782708\n1782709\n1782743\n1782744\n1782745\n1782747\n1782762\n1782776\n1782803\n1782808\n1782809\n1782819\n1782822\n1782826\n1782833\n1782837\n1782840\n1782853\n1782870\n1782871\n1782878\n1782921\n1782928\n1782934\n1782961\n1782972\n1782978\n1782993\n1783002\n1783008\n1783013\n1783035\n1783055\n1783059\n4301044\n9581976\n1783313\n9457757\n9500945\n1783371\n1783372\n1783373\n1783376\n1783378\n5112153\n5112191\n5112199\n5112229\n5112233\n5112283\n5112302\n5112377\n5714951\n5714973\n5714984\n5714994\n5715004\n1783811\n9348210\n9465978\n9492640\n1783841\n1783842\n1783861\n1783940\n1784276\n1784278\n1784281\n1784282\n1784283\n1784422\n1784461\n1784582\n1784610\n9320776\n1784688\n5112414\n4534290\n1784893\n1785145\n1785168\n1785185\n1785280\n9633615\n1785331\n1785399\n1785403\n9636267\n1785728\n1785730\n1785732\n1785733\n7400814\n9250744\n9329292\n1785875\n1785886\n1785951\n1785955\n1785964\n1785982\n1785992\n1785997\n1786007\n1786035\n1786036\n1786308\n1786360\n1786455\n1786514\n1786565\n1786566\n1786567\n1786691\n1786733\n1786808\n1786918\n4687681\n9305798\n1787438\n1787506\n1788034\n1788037\n1788063\n1788070\n1788139\n9547140\n1788425\n9282469\n1788485\n1788673\n1788677\n1788679\n1788680\n1788681\n1788720\n4301312\n1788917\n1788929\n1789076\n1789155\n9612009\n1789212\n9248329\n9449132\n1789505\n4534166\n4534198\n1789695\n1789730\n1790013\n1790084\n1790151\n9092175\n9410414\n1790339\n1790343\n11693171\n1790359\n1790362\n1790369\n1790371\n1790737\n9297059\n1791331\n1791590\n1791593\n1791680\n1791784\n1791862\n1792072\n1792073\n1792087\n1792091\n1792095\n1792096\n1792097\n1792099\n9426771\n9622117\n1792318\n9241669\n9338769\n9530319\n9548726\n1792430\n1792442\n1792449\n1792456\n1792465\n1792478\n1792485\n1792497\n1792517\n5113365\n9240216\n1792817\n9233420\n9539292\n1792996\n1793189\n1793192\n1793368\n1793369\n1793419\n1793453\n1793455\n4301052\n4301055\n1793589\n1793699\n1793983\n1794102\n1794510\n4301238\n11781335\n1795788\n1795802\n1795812\n1795871\n1795983\n1796032\n1796035\n1796040\n1796051\n1796100\n1796117\n1796154\n1796180\n1796181\n1796188\n4534486\n9377268\n9541908\n1796217\n1796274\n1796276\n7689966\n7882824\n8405656\n9256638\n9327259\n9589234\n1796310\n1796312\n1796463\n8105817\n1796678\n1796686\n1796842\n1796958\n1797587\n1797592\n1797593\n1797595\n1797601\n4301242\n4301249\n4301255\n1798288\n1798371\n1798375\n1798419\n5113985\n5114011\n5114021\n5114039\n5114043\n5114081\n5114083\n5114096\n5114107\n5114128\n5114151\n5114159\n9500553\n1799433\n1799675\n1799680\n9368026\n9593098\n1799774\n9388726\n9571514\n1799870\n1799877\n1799880\n1799884\n1799894\n1799900\n1799901\n1799911\n1799917\n1799925\n1799938\n1799944\n1799956\n1799957\n1799958\n1799967\n1799977\n1800017\n1800024\n1800028\n10446574\n9496311\n8729319\n4301068\n4301282\n4301283\n4301306\n4301307\n8751100\n9395261\n9564779\n12103087\n7558165\n8050639\n8440999\n8551997\n8562506\n8647523\n8761810\n8781370\n8998296\n9042018\n9163659\n9241105\n9247947\n9255102\n9261458\n9281907\n9288185\n9291297\n9362785\n9373309\n9390293\n9424681\n9452702\n9474256\n9481002\n9484411\n9485070\n9488551\n9530271\n9530928\n9533506\n9534429\n9544558\n9545480\n9552253\n9573163\n9577379\n9590907\n9591877\n9594509\n9595155\n9602019\n9634575\n11922580\n9406822\n9432810\n4534533\n9248830\n9363692\n9556427\n9597741\n9503548\n9415435\n9424082\n9610447\n7589577\n7779226\n8818378\n8928353\n9538684\n9486411\n7717385\n8424964\n9511749\n6132781\n10118643\n9875111\n9342344\n9496896\n9629365\n9478331\n5108640\n5110377\n5114189\n5114192\n11452421\n11466090\n11470672\n11590674\n11615055\n11619030\n11626773\n11627464\n11660145\n11713256\n11749278\n11753804\n11781300\n11859640\n11887065\n5109299\n5109369\n5109413\n8755207\n8943174\n9038042\n9307254\n9334639\n9387782\n9404919\n9506719\n5112130\n5112131\n9244066\n9551316\n7398419\n1792564\n1800130\n1800140\n9623131\n1774929\n1770828\n1770918\n1770955\n1771019\n1771055\n1771067\n1771245\n1765751\n5108665\n5108670\n9374637\n9586329\n1768196\n1768199\n1768201\n11783188\n4533347\n9490756\n1797903\n6115793\n6115822\n11501104\n1776094\n9354669\n10714961\n10867462\n9253819\n9517291\n9561820\n11562243\n5118459\n5118474\n5118509\n5118524\n1822667\n9778438\n1822784\n1822788\n1822805\n1822848\n1823637\n1824080\n1824259\n1824442\n1824449\n1824571\n5118828\n1825083\n9426054\n1825218\n1825373\n1825428\n1825430\n5118934\n5118944\n5118949\n1825967\n1826048\n1826058\n1826084\n1826156\n1826163\n1826164\n1826167\n1826169\n1826172\n1826173\n1826175\n1826181\n1826222\n5119009\n5119011\n5119013\n5119016\n5119026\n5119039\n5119046\n5119050\n10115073\n1826772\n9807789\n1827103\n1827112\n1827113\n1827132\n1827133\n1827161\n1827716\n1828105\n1828268\n9454052\n9255512\n1892509\n1892729\n1892736\n1892742\n4299095\n1892851\n1892858\n1892863\n5127805\n5128005\n5128007\n5128034\n9113409\n10653980\n1894074\n1894087\n1894088\n1894102\n1894164\n1894293\n1894298\n5882039\n1894329\n1894342\n1894896\n4535827\n1895138\n1895185\n1895203\n5128232\n5128250\n5128266\n5128326\n5128357\n5128363\n5128380\n9804158\n1895768\n1895820\n8763986\n1895886\n1895904\n5128475\n5128488\n5128491\n1896614\n1896658\n1896749\n10353400\n1896774\n1896932\n5129251\n11701883\n5925238\n8367663\n1897990\n10073321\n10365587\n1898143\n1898174\n1898203\n10321900\n1898286\n4299368\n4299370\n5714367\n5714369\n1898391\n1898402\n1898414\n1898416\n1898424\n1898431\n5129374\n5129378\n5129387\n5129405\n5129430\n5129432\n5129451\n5714356\n5714361\n6228464\n5129473\n5129481\n5129489\n5129496\n5129515\n5129517\n5129520\n5129531\n5129535\n9208233\n9255328\n5129544\n1898686\n1898841\n1899048\n4299211\n4299213\n1899873\n1899893\n1900024\n8847500\n9208918\n1900131\n1900175\n1900199\n1900233\n1900249\n1900485\n1900618\n1900830\n1900872\n9190731\n1901001\n1901189\n1901261\n1901268\n8247566\n1901735\n1901744\n1901794\n1901801\n1901810\n11135155\n11219489\n12258652\n5130400\n5130514\n5130528\n5130548\n9357385\n1902378\n1902406\n1902430\n1902458\n1902479\n1902502\n5130559\n1902620\n1902642\n1902670\n1902676\n1902680\n1902692\n1902699\n1902702\n1902703\n1902704\n4299218\n1902880\n1903607\n1903658\n1903683\n5131608\n1904382\n7776011\n5131951\n1905161\n1905162\n1905172\n1905187\n1905189\n1905242\n1905257\n1905267\n1905281\n1905297\n1905299\n1905301\n1905310\n1905317\n1905451\n1907153\n1907235\n1907250\n1907272\n1908011\n1908044\n1908052\n1908055\n1908148\n1908199\n1908203\n1908204\n1908207\n1908256\n1908302\n5133035\n10542548\n1908995\n1909064\n10046510\n1909128\n1909170\n1909185\n9851867\n8727750\n12234977\n1909800\n5133251\n5133265\n10558140\n5133565\n5133568\n1910773\n5133581\n1911112\n1911178\n1911246\n5133595\n5133621\n5133637\n8548427\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n1912428\n4299535\n4299565\n4299576\n4299599\n5133864\n5714410\n10638244\n9277330\n5134517\n5134559\n5134661\n5134687\n5134693\n5134759\n5135355\n5714507\n8233062\n1914410\n1914416\n1914421\n1914424\n1914435\n1914439\n1914440\n1914442\n1914458\n1914464\n1914465\n1914477\n1914484\n1914496\n1914498\n1914500\n1914501\n1914511\n4299191\n4299201\n8918036\n1915193\n9185656\n9988287\n1915339\n1915396\n1915401\n1915417\n1915427\n1915430\n1915469\n1915470\n1915487\n1915492\n1915506\n10487080\n1916700\n1917827\n1917830\n1918082\n1918094\n10250149\n1918269\n1918280\n1918293\n1918395\n4299802\n4299804\n1918964\n1918968\n1918972\n1918984\n1918986\n1918988\n1919007\n5128045\n5130682\n5130696\n5131982\n5132003\n5132079\n5132084\n5132246\n5132254\n5132317\n5132347\n5132360\n5132398\n5132446\n5132461\n5132505\n5714312\n5714333\n9541133\n5133088\n5714299\n5714302\n5130557\n1910628\n1902175\n10662329\n12045866\n4299778\n5132917\n5132940\n5132956\n5132973\n5133009\n9964857\n1951448\n5142842\n1951657\n1951660\n1951784\n5142903\n1952032\n1952043\n1952093\n1952730\n5143107\n6097225\n10045595\n1853064\n4529248\n1868334\n10597291\n5102424\n1941717\n1843888\n1843889\n5120577\n5120675\n5120767\n5121517\n5121613\n1842043\n5120396\n1842446\n1842508\n4301036\n4529738\n5120453\n1843444\n10327658\n10619048\n5101371\n10304313\n10607329\n11484123\n9114044\n1730978\n10458960\n10469497\n5101527\n1731750\n1731811\n1731812\n7628188\n1878688\n1878705\n1878751\n1878753\n1878789\n1878810\n1878837\n1878879\n1878937\n1878958\n1879052\n1879253\n1879272\n1879274\n1879348\n1879398\n1879408\n1879413\n10366679\n10874932\n1879443\n1879452\n1879471\n10177508\n5126229\n5126352\n5126365\n5126404\n5126494\n5126517\n5126533\n10915497\n10922201\n1879939\n1879970\n1879975\n1880013\n1880019\n1880025\n1880044\n1880049\n1880062\n1880064\n1880078\n1880083\n1880088\n1880123\n1880132\n1880133\n1880156\n5126585\n5126637\n1880379\n1880381\n1880411\n4302319\n1880505\n5126663\n10861282\n11968849\n1881079\n1881094\n1881111\n1881139\n1881151\n1881166\n9819403\n4531687\n5126697\n5126718\n5126721\n5126726\n5126729\n1881767\n1881822\n5126751\n1881917\n1881955\n1882089\n1882190\n1882195\n1882218\n1882253\n1882316\n5126785\n5126892\n5126958\n5126963\n1882785\n1882786\n10107015\n1882812\n1882816\n1882818\n1882819\n10191785\n11891668\n1882927\n1882941\n1882958\n1882959\n1882960\n1882965\n1882977\n1882979\n8725248\n1883020\n1883038\n1883067\n5127089\n5127107\n5127116\n5127118\n5127130\n5127132\n1883829\n1883897\n1883968\n1883975\n8324720\n9864281\n1883993\n1884001\n1884213\n1884428\n1884435\n1884439\n1884453\n1884464\n1884479\n1884685\n9308930\n1884703\n1884774\n1884790\n4532122\n1884923\n1884997\n1885001\n1885158\n1885202\n1885229\n1885642\n5127170\n1885950\n1886251\n1886262\n5127203\n1886292\n8223165\n1886378\n1886398\n1886400\n1886419\n4302333\n5127209\n1886490\n1886501\n1886579\n1886583\n1886650\n1886729\n10510138\n1886868\n1886906\n1886929\n1886935\n5127222\n1887004\n1887024\n1887031\n1887285\n1887309\n1887341\n1887459\n10437872\n5127325\n5127335\n5127336\n5127337\n5127339\n5127350\n5127353\n5127354\n5127355\n5127357\n1887565\n1887634\n1888009\n1888047\n4531968\n1888306\n1888307\n1888336\n1888338\n1888410\n1888435\n5127378\n5127380\n1888579\n1888646\n1888695\n1888823\n12106417\n1888946\n1888955\n1889028\n1889267\n1889327\n1889536\n1889939\n5127521\n1890089\n1890187\n1890247\n11044778\n7543006\n1890368\n1890374\n1890404\n1890410\n1890417\n1890487\n1890491\n1890508\n1890512\n1890520\n1890560\n1890599\n1890622\n1890629\n1890654\n1890730\n1890737\n1890783\n1890794\n1890800\n1890802\n1890854\n1890876\n1890885\n1890917\n1890934\n1890936\n6207059\n7431428\n1891035\n10034831\n1891048\n1891074\n1891167\n1891438\n1891473\n1891484\n1891488\n1891493\n10310835\n1891755\n9884308\n1891932\n1892131\n1892193\n1892301\n1892302\n1892311\n1892320\n1892355\n1892420\n1892427\n1892433\n9059564\n1892477\n1892488\n1884326\n1884337\n10179389\n10259280\n10330376\n10482025\n10655790\n9181627\n9935837\n5771877\n7864212\n8146570\n8425580\n6120803\n6121218\n8876855\n10106345\n10432184\n10444331\n5126675\n8858121\n9530406\n1886374\n1889717\n1889721\n1889745\n1889760\n1889828\n1889838\n1889850\n1889870\n5127631\n5127656\n5802339\n1887119\n1887122\n1887125\n1887178\n1886123\n1886207\n1846099\n1846103\n1846111\n1846112\n1846133\n1846141\n1846190\n1846229\n1846236\n1846240\n1846259\n1846261\n1831136\n1831168\n4525443\n9958241\n1853312\n1854143\n1854202\n7946946\n5880063\n12239445\n4526094\n1858615\n1858637\n9777614\n1858659\n1858660\n1858674\n1858706\n9689122\n1858930\n1859046\n1859161\n1859287\n9760511\n8790054\n9675743\n9686431\n9746673\n9748079\n6133397\n1859929\n1859932\n9752950\n1860026\n4536472\n9700261\n1973458\n1973466\n5123046\n5124468\n1864905\n8877458\n9240588\n9355107\n9531432\n9547535\n9606779\n1865102\n1865107\n1865108\n11754954\n1865295\n1865299\n1865313\n1865319\n1865328\n1865333\n1865341\n1865345\n1865347\n1865348\n1865353\n5124557\n5124589\n5124595\n5806244\n1865555\n1865571\n1865590\n1865668\n1865709\n1865837\n1865839\n1865842\n1865853\n1865856\n1865862\n1865963\n1866003\n1866085\n1866123\n1866214\n1866311\n1866330\n1866336\n1866338\n1866341\n1866496\n1866550\n1866570\n1866601\n1866902\n1867021\n1867022\n1867029\n1867032\n1867037\n1867525\n1867535\n1867773\n10247309\n10591617\n1736271\n7734292\n1841764\n1841782\n1841813\n1841946\n10309331\n5123615\n1861456\n1861559\n1861604\n5123636\n1861759\n1861773\n1861783\n1861784\n1861823\n1861834\n1861836\n1861851\n11529603\n1861887\n1861892\n1861893\n1862044\n1862047\n1862049\n1862078\n1862087\n1862088\n1862123\n1862129\n1862139\n1862181\n1862198\n1862207\n1862363\n1862401\n1862475\n1862547\n1862569\n1862595\n1862624\n1862719\n1862757\n1862837\n1862841\n1862916\n1862917\n1862923\n1862928\n1863021\n1863025\n1863075\n1863080\n1863088\n5123775\n7803585\n1863366\n1863405\n1863407\n4301348\n1863412\n1863416\n1863584\n5124049\n1863699\n1863706\n1863714\n1863732\n1863734\n1863742\n1863757\n5124050\n1863856\n1863864\n1864156\n1864164\n1864165\n8956567\n1864204\n11468731\n1864316\n1864320\n1864321\n1864328\n1864329\n1864352\n1864377\n11141784\n5124118\n5124119\n5124136\n5124147\n5124172\n5124199\n5124200\n5124208\n5124219\n5124232\n5124249\n5124250\n5124268\n1864652\n5124332\n5124442\n5124443\n5124448\n5124450\n5123954\n5123956\n5123968\n5123971\n5123979\n5123983\n5123991\n5123999\n5124000\n8849480\n9513830\n1863978\n1863982\n1864004\n1864008\n1864021\n1864046\n1864070\n1864090\n1864098\n1992573\n1992634\n5150053\n5150092\n1993643\n1992817\n1939460\n1953499\n5143232\n9053308\n9424853\n1953970\n1953998\n1954084\n1860108\n1860118\n1830031\n10650211\n5119482\n1830442\n1830457\n4525369\n1754270\n5105642\n5105649\n5105656\n5105671\n1757839\n10174151\n10322104\n1830681\n10604375\n1953124\n1751497\n1751557\n1751572\n1751575\n1751588\n1751590\n1751609\n1751625\n1751626\n1751670\n1751684\n1751690\n5105217\n5105218\n1829287\n1829363\n1854920\n5122526\n5122538\n5122556\n5122571\n5122574\n5122581\n5122620\n5122646\n5122647\n5122668\n5122683\n5122691\n5122696\n5122702\n9015218\n1855358\n10055273\n1856005\n1856581\n1856686\n1856701\n1856720\n1856730\n1857068\n1857143\n1857258\n1857380\n1857626\n1857809\n1857828\n1857829\n1857856\n1857863\n1857918\n1857924\n1857938\n1857945\n1857973\n1858163\n5122876\n5122969\n1858283\n1856891\n10038125\n1937642\n1937655\n1937688\n1937691\n1937722\n1937739\n1937751\n1937758\n1937793\n1937803\n1937816\n1937819\n1937846\n1937885\n1937974\n1938016\n1938022\n1938059\n1938081\n1938104\n1938112\n1938159\n4299870\n4299871\n8225376\n10600208\n12200213\n12211009\n1937110\n1937124\n1937136\n1937144\n1937162\n1937167\n1937527\n1938446\n1938955\n1938975\n1939056\n1939130\n1939134\n1939136\n5141321\n5141324\n5141333\n5141342\n4694313\n11561676\n12219250\n12229940\n12247359\n12253844\n12262562\n1856368\n1856394\n1856555\n1857690\n5123018\n1838811\n1838838\n1838911\n1833497\n1833499\n1833500\n1833626\n8546322\n5770913\n1835500\n5119905\n5119961\n5119969\n10304283\n1836899\n1837172\n1837900\n1838666\n1838960\n9895629\n1841159\n10511237\n5119893\n5119895\n4534796\n1800963\n5114431\n5114435\n5114436\n5114439\n9313634\n9385576\n9454291\n9574801\n9579309\n9626037\n8924506\n10942408\n9239301\n9426252\n5114295\n5114317\n5114340\n", + "regions/north_europe.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732416\n1732452\n1732565\n1732662\n1732685\n1733258\n1733484\n4525266\n4525273\n5101678\n5101745\n5769191\n1734453\n1734704\n1734826\n5102287\n1845270\n1845368\n1845565\n4529566\n4528100\n1846604\n1846657\n1846715\n1846729\n1846916\n1847097\n1847407\n1847572\n9262981\n1847956\n1848150\n1848202\n10450501\n1848219\n1848273\n1848356\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850506\n4527903\n1850522\n1850533\n1850538\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n5769272\n5879654\n7448174\n4525610\n1861395\n1845866\n1845962\n1845965\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11571523\n1761111\n1764531\n1769103\n1769897\n1772793\n4532500\n1780150\n1790692\n1790816\n5113078\n5113084\n5113234\n1797178\n1797258\n1797276\n1797367\n1797479\n4532471\n8756768\n1798346\n1798408\n4532493\n1798449\n1798504\n1798594\n1798802\n1798807\n4532357\n1799708\n1804071\n1804906\n7874258\n1807969\n1808450\n1808752\n5115771\n5115777\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814630\n5117399\n5117400\n1819145\n4532293\n4532297\n1819268\n8407461\n1819873\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n4532532\n12089608\n11962292\n12135372\n5115874\n5116475\n5116698\n1788635\n4532405\n4532408\n4532412\n8000103\n4532534\n4532508\n1760246\n5113036\n1821856\n1821911\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n1860987\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522891\n1860768\n1860852\n7767114\n7851302\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n9473121\n4529630\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869803\n1869852\n1869976\n1870202\n1870249\n1870250\n1870450\n1870988\n1871160\n1871252\n1871407\n4531402\n1871698\n1871826\n10787705\n1872901\n1873048\n1873079\n1873411\n1873776\n1873780\n1873783\n4531264\n5125689\n1874192\n1874204\n1874211\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n4531242\n1875631\n1875633\n4531284\n1875827\n1875865\n1875869\n1875918\n1875940\n1875952\n1876329\n1876409\n1876542\n1876623\n1876854\n1877310\n1877341\n1877368\n4531246\n5126052\n1877941\n1877988\n1878470\n1878490\n1878586\n11728049\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n1940807\n1940838\n1941377\n1941437\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n5102628\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737342\n1737368\n1737437\n1737491\n1737497\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1741056\n1741147\n1741253\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741752\n1741756\n1741765\n4530424\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745787\n1745788\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5771227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n1922311\n1922343\n8016522\n1922584\n1922937\n5138543\n5138561\n5714680\n1923796\n1924097\n5138681\n1925221\n1925233\n4535172\n1925454\n1925918\n1925962\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n1929270\n1929659\n1929697\n8356768\n1930110\n1931179\n1931779\n1932411\n1932960\n5140436\n7634721\n1933793\n1926260\n1933095\n1933138\n1924494\n4522322\n5105339\n1919712\n1920259\n1920491\n1920494\n1920496\n1920506\n4535307\n5137903\n5804895\n1920712\n5137582\n5137595\n5137612\n5137636\n5137695\n5137706\n8203812\n1920218\n1748890\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750143\n1750159\n1750288\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n5143651\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n4525068\n1957266\n1957300\n1957570\n1957572\n1957632\n1957718\n1957816\n1957845\n1957852\n1957854\n4524421\n4524426\n5143944\n5143947\n1958024\n1958323\n1959383\n1959395\n1959467\n1959682\n1959735\n1959914\n1959919\n1960617\n1961040\n1961068\n1961190\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n1962636\n1962860\n1962990\n1963011\n4302252\n1963306\n1963446\n1963463\n1964191\n1964195\n1964471\n1964637\n1964653\n1964657\n8361848\n5144426\n1965166\n1965208\n1965345\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966886\n5144534\n1967011\n5144543\n1967245\n1967273\n1967597\n1967815\n1967873\n7681733\n1968678\n1968867\n11598540\n1969291\n1969954\n1970213\n1970227\n1970284\n5144677\n5144721\n5144805\n5144900\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n7753668\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973414\n5146496\n5146510\n5146559\n5146611\n5146659\n5146677\n5146762\n5146837\n5146883\n5146946\n5146961\n5147038\n5147039\n5147062\n5147150\n5147171\n5147193\n5147208\n5147232\n5147245\n5147354\n5147478\n7988195\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n5769028\n5148247\n5148248\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n4524890\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n8421569\n1981696\n1982406\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982791\n1982838\n1982885\n1983000\n1983052\n1983111\n1983170\n1983260\n1983288\n1983387\n1983441\n1983442\n1983525\n1983548\n1983558\n1983648\n1983705\n1983755\n1983888\n1983896\n1983922\n1983997\n1983999\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n5149315\n5768880\n1987527\n1987578\n1987744\n4524221\n1988593\n1988602\n1988684\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n5149474\n1991179\n1991371\n5149836\n5149839\n1992066\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n9414984\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4523522\n4524070\n4524072\n4524403\n4524793\n4524951\n4525078\n5144190\n5146412\n5149499\n7769543\n4523880\n4523883\n4523885\n5149659\n5149665\n5149704\n5149746\n5149768\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n8277078\n8073674\n8133678\n8273661\n1945569\n7389824\n1947306\n1947335\n1949784\n1949794\n1949852\n1949938\n1950006\n8109173\n8270406\n7633472\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n4533952\n7972792\n1759153\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760857\n1760887\n1760891\n1761041\n1761438\n1761735\n1761865\n1762244\n1762608\n5109498\n5109506\n5109523\n5109599\n5109614\n5109661\n5109722\n1763610\n1764987\n1765011\n1765017\n1765044\n4534245\n4534257\n1765767\n1765954\n1766128\n1766130\n1766131\n1766137\n1766210\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766741\n1766814\n1767597\n1767625\n1767655\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n1768117\n1768150\n5110200\n1768341\n5110213\n1768702\n1768729\n1768749\n1768771\n1768815\n1769057\n1769505\n1769519\n1769566\n1769958\n1770150\n1770307\n1770477\n4532696\n1771385\n1771391\n7725644\n1771509\n1771531\n1772013\n1772169\n1772179\n5772129\n1772940\n1772956\n1773163\n1773309\n1773328\n4534046\n4534052\n4534057\n5772269\n1775891\n4534719\n5110670\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111574\n8253467\n1779435\n1779641\n1779690\n1780378\n1780926\n1781008\n4533285\n1781694\n1782560\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n5112155\n5112254\n5112283\n5112291\n5112336\n5112345\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1784359\n1784812\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785888\n1785895\n1786007\n8292872\n1786902\n1786936\n1787064\n1787112\n1787267\n1787400\n1787504\n1787590\n1787610\n1787697\n1787751\n1787770\n1787841\n1787859\n1788425\n1788522\n4534011\n1788917\n1789076\n1789086\n1789267\n1789481\n1789553\n1789580\n4534166\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n10068024\n10113008\n10312073\n10904813\n1789982\n1790002\n1790062\n1790072\n1790084\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1791422\n1791784\n1792061\n1792292\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792449\n1792475\n1793877\n1793986\n1794102\n1794590\n1795215\n1795282\n7869346\n1795854\n1795930\n1795946\n1795957\n1796007\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n7981386\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534458\n4534533\n5883985\n11478679\n5110644\n1774285\n1779334\n5114198\n1763072\n5772063\n4534686\n1771634\n1771650\n1771678\n1771698\n8581601\n1770772\n1770869\n1770880\n1771040\n1771204\n1771214\n1771245\n4533714\n7940536\n5113847\n5772309\n5108761\n4534525\n4533347\n4533360\n4532239\n4532253\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823726\n1824113\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119245\n1827645\n1828162\n4534872\n1894268\n7712938\n1894714\n4535614\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n5128323\n5128357\n1895875\n1896841\n1898286\n4299368\n1898544\n1902533\n1902749\n8140883\n6221746\n1905383\n8208583\n1909398\n1911112\n1911168\n1911278\n1911461\n7728366\n7809779\n8078362\n1912325\n1912372\n1912470\n4299535\n4299576\n4299597\n4299599\n5772890\n7428726\n7799370\n8810143\n5134098\n1913175\n1913178\n1913328\n1913351\n5134469\n5134667\n5134682\n5134815\n5135191\n7738295\n7791190\n7791558\n7798382\n8298764\n8314088\n7854318\n1918868\n8176911\n7622059\n4535510\n5130587\n5130682\n7762841\n5132183\n5135513\n5131910\n8138711\n1902169\n1899433\n7768674\n7934873\n8168644\n8393082\n1951557\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1951713\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n5120465\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842196\n5120396\n1842485\n1842542\n1842690\n1842695\n5101394\n1730978\n1731598\n1872368\n1878782\n1878862\n1878879\n1878895\n1878907\n1878939\n4531506\n4531517\n1879252\n1879452\n5126212\n5126217\n1879534\n1879630\n1879655\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1881151\n4531687\n1881603\n4531713\n1881834\n4531975\n1882158\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1883161\n1883386\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1886084\n1886320\n8223165\n1886579\n1886587\n1887290\n1887701\n4531968\n10922411\n1888579\n1888733\n1888743\n1888759\n1888826\n1889287\n1889942\n1890187\n1890522\n1890534\n1890576\n1890656\n1890699\n1890703\n1890772\n1891059\n1891326\n1891386\n1891426\n1891473\n1891493\n1891494\n4532022\n1892242\n9674732\n1884255\n1884273\n1884280\n1884312\n1884332\n1884370\n1884403\n5884851\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n4532160\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854287\n1854347\n5122439\n1854792\n1854849\n1854237\n4526050\n7717983\n1858637\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n1866568\n5124911\n1867820\n7734292\n1841616\n1841675\n1841813\n1841821\n1861644\n1861797\n1861862\n1862578\n1862580\n1862719\n1862837\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124233\n1864652\n1993419\n1939432\n4525189\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830537\n1830584\n1830632\n1830802\n4525364\n1754332\n5107128\n5107219\n5107644\n5107829\n7410701\n7674502\n7761138\n7778368\n7903078\n7955974\n8158342\n8201251\n8348761\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n10055273\n1856005\n1856289\n1856384\n1856595\n1856620\n1856658\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857577\n1857626\n9790007\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858113\n1858163\n8225376\n1938214\n1938520\n1938810\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833626\n4528658\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1836899\n1837172\n1838969\n1839851\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n1801051\n1801896\n4534779\n4534782\n1802280\n1803012\n1803073\n4534762\n4534767\n5114327\n8244266\n", + "regions/north_europe_v3.classes": "1934693\n1860621\n1860628\n4522795\n1860659\n1860664\n1860668\n1860671\n1860688\n1860709\n1860711\n4522933\n5123582\n1732063\n1732416\n1732452\n1732521\n1732565\n1732662\n1732685\n1733258\n1733484\n4525266\n4525273\n5101678\n5101745\n5769191\n1734453\n1734704\n1734826\n5102287\n1845270\n1845368\n1845565\n1845607\n4529566\n4528100\n1846604\n1846657\n1846715\n1846729\n1846916\n1847061\n1847097\n1847407\n4528547\n1847572\n9262981\n1847956\n1848150\n1848202\n10450501\n1848219\n1848273\n1848356\n1848378\n1848426\n4528539\n1848596\n1848610\n1848636\n1848657\n1848669\n1848690\n1848713\n1848714\n1848717\n1848730\n1848753\n1848864\n1848868\n1849104\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1849897\n1849924\n1850008\n1850042\n1850045\n1850076\n1850077\n1850106\n1850238\n1850246\n11576787\n1850279\n1850302\n1850335\n1850386\n1850394\n1850450\n1850497\n1850506\n4527903\n1850522\n1850533\n1850538\n1850570\n4528529\n1850781\n1850971\n1851000\n1851010\n1851011\n5122037\n5122113\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n4527972\n1852150\n1852159\n1852177\n1852311\n1852430\n11287091\n4527957\n1848920\n1829533\n1829588\n1829776\n1829785\n1829799\n1829823\n1829974\n4525354\n1828637\n6097236\n5769272\n5879654\n7448174\n4525610\n1861395\n1845866\n1845962\n1845965\n1841261\n1830838\n1830843\n1830122\n1830125\n1830131\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n4525487\n1831643\n1841296\n4528593\n8271010\n1853723\n5880147\n9734171\n11418741\n11571523\n7908344\n1761111\n1764531\n1769103\n1769897\n1772793\n4532500\n1777631\n1780150\n1790692\n1790816\n5113078\n5113084\n5113234\n1797178\n1797258\n1797276\n1797367\n1797374\n1797479\n4532471\n8355390\n8756768\n1798346\n1798408\n4532493\n1798449\n1798504\n1798594\n1798802\n1798807\n4532351\n4532357\n1799708\n1803163\n1803824\n1804071\n1804906\n7874258\n1807969\n1808450\n1808752\n5115771\n5115777\n1810099\n5116416\n1813114\n5117189\n5117200\n7656811\n1814630\n5117399\n5117400\n1816881\n8326103\n1819145\n4532293\n4532297\n1819268\n8407461\n1819873\n7657803\n8361973\n1820372\n1820406\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n4532532\n4532565\n12089608\n8148822\n11962292\n12135372\n5115874\n5116475\n8165185\n6097254\n5116698\n1788635\n4532405\n4532408\n4532412\n8000103\n4532534\n4532508\n1760246\n5113030\n5113036\n1821856\n1821911\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n1860987\n1861031\n4522911\n4522916\n4522919\n4522922\n12318291\n4522886\n4522890\n4522891\n4522896\n1860765\n1860768\n1860852\n7767114\n7851302\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n8015612\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840371\n1840380\n1840408\n1840478\n1840483\n1840485\n1840555\n1840566\n1840570\n1840581\n1840596\n1840621\n4529186\n5119808\n1831752\n1852751\n1852787\n9473121\n4529630\n5125104\n1751236\n1751290\n1751298\n1751299\n1751368\n1751457\n4535884\n4535904\n1860408\n4525177\n5123339\n5123394\n5769164\n5123461\n5123474\n1751207\n1751216\n1869803\n1869852\n1869976\n1870202\n1870249\n1870250\n1870450\n1870988\n1871160\n1871252\n1871407\n4531402\n1871698\n1871826\n10787705\n1872848\n1872901\n1872904\n1873048\n1873079\n1873215\n1873411\n1873776\n1873780\n1873783\n4531264\n1873890\n5125689\n1874192\n1874204\n1874211\n1874295\n4531145\n4531147\n4531158\n1874375\n1874743\n9782192\n1875008\n1875120\n8219149\n1875327\n1875376\n1875429\n4531242\n1875631\n1875633\n1875682\n4531284\n1875827\n1875865\n1875869\n1875918\n1875940\n1875952\n1876329\n1876357\n1876409\n1876512\n1876542\n1876623\n1876854\n1877038\n1877310\n1877341\n1877368\n4531246\n5126052\n1877941\n1877988\n1878470\n1878471\n1878490\n1878586\n1890065\n11728049\n1872315\n1748805\n1940158\n4525859\n4525884\n5141493\n5141501\n1940504\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n1940768\n4525777\n4525803\n1940807\n1940838\n1941377\n1941437\n1939879\n1736377\n1736412\n1736425\n1736447\n1736484\n1736511\n1736528\n1736560\n1736565\n1736601\n5102628\n5102642\n1736727\n1736800\n1736898\n1736904\n1736905\n1736906\n1736945\n4530406\n4529931\n1737342\n1737368\n1737437\n1737491\n1737497\n7466487\n1737524\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737776\n1737783\n1737847\n1737893\n1737924\n4530002\n8186212\n1738050\n1738163\n1738222\n1738245\n1738317\n1738322\n1738337\n1738373\n1738422\n1738429\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739290\n1739337\n1739377\n1739381\n5102982\n1739449\n1739451\n1739461\n1739471\n1739605\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739931\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740155\n1740174\n1740183\n1740185\n1740305\n1740374\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1740623\n8094357\n1740762\n1741056\n1741147\n1741253\n1741340\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741545\n1741551\n10838422\n1741590\n1741593\n1741615\n1741633\n1741634\n1741667\n1741747\n1741752\n1741756\n1741765\n4530424\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103613\n5103736\n5103948\n5771350\n7975250\n1743196\n8313553\n5103998\n7661023\n1743453\n1743475\n7877231\n1743532\n1743588\n1743604\n1743613\n5104056\n6097235\n1743641\n1743643\n1743710\n1743714\n4530214\n1743730\n1743768\n1743775\n4529900\n4529908\n4529915\n1743828\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n4530632\n1744416\n1744498\n1744526\n1744542\n1744588\n1744593\n1744693\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744782\n1744789\n1744808\n1744810\n1744860\n1744896\n1744901\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745725\n1745737\n1745756\n1745762\n1745771\n1745787\n1745788\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n8424972\n1746174\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746832\n1746856\n1746876\n1746910\n1747050\n1747141\n5104442\n1747738\n4530138\n5104558\n1748203\n1748321\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103181\n5103185\n5103227\n5771227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771243\n5771249\n5771256\n5771258\n5771259\n1831780\n4525500\n4525503\n4525505\n4525510\n4525530\n4525540\n4525547\n4525557\n4525562\n1920851\n7387466\n1922311\n1922343\n8016522\n1922584\n1922937\n5138543\n5138561\n5714680\n1923796\n1924097\n5138681\n1925221\n1925233\n4535172\n1925454\n1925918\n1925962\n1926054\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n1929270\n1929659\n1929697\n8356768\n1930110\n1931179\n1931779\n1932411\n1932960\n5140214\n5140244\n5140436\n7634721\n7664111\n1933583\n1933793\n1926260\n1933095\n1933138\n1924494\n4522322\n5105339\n1919712\n1920237\n1920259\n1920491\n1920494\n1920496\n1920506\n4535307\n5137903\n5804895\n1920712\n5137582\n5137595\n5137612\n5137636\n5137695\n5137706\n5137708\n8203812\n1920218\n1748890\n1748922\n1748942\n1749050\n1749070\n1749164\n1749449\n1749661\n1749713\n1749744\n1749846\n1749869\n1749908\n1749921\n1749929\n1749936\n1749948\n1749954\n1749959\n1749975\n1750051\n1750076\n1750097\n1750131\n1750143\n1750159\n1750166\n1750288\n5104772\n5104781\n5104797\n5104829\n5104882\n5104891\n5104903\n5104927\n5104940\n5105054\n5105088\n5105106\n5105158\n5976947\n1751051\n5104759\n1749596\n1749608\n1749635\n8741260\n1735532\n4527339\n4527342\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n5143651\n1955694\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n4525068\n1957266\n1957300\n1957570\n1957572\n1957632\n1957706\n1957718\n1957746\n1957816\n1957845\n1957852\n1957854\n4524421\n4524426\n5143944\n5143947\n1958024\n1958323\n1959383\n1959395\n1959467\n1959682\n1959735\n1959914\n1959919\n1960617\n1961037\n1961040\n1961068\n1961190\n1962204\n1962265\n1962268\n1962434\n1962516\n9812211\n1962636\n1962860\n1962972\n1962990\n1963011\n4302252\n1963306\n1963446\n1963463\n1964191\n1964195\n1964437\n1964471\n1964637\n1964653\n1964657\n8361848\n5144426\n1965166\n1965197\n1965208\n1965345\n1965640\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1965996\n1966017\n1966351\n1966886\n5144534\n1967006\n1967011\n5144543\n1967245\n1967265\n1967273\n1967452\n1967597\n1967815\n1967873\n7681733\n1968678\n1968867\n11598540\n1968990\n1969291\n1969339\n1969954\n1970213\n1970227\n1970284\n5144677\n5144721\n5144782\n5144805\n5144900\n5145009\n5145136\n5145186\n5145260\n5145269\n5145409\n5145729\n7753668\n8014296\n9627567\n1971847\n1971858\n1971888\n1971986\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145870\n5145965\n7541913\n7624494\n7960566\n1972434\n1972449\n1973414\n5146496\n5146510\n5146559\n5146599\n5146611\n5146659\n5146677\n5146762\n5146837\n5146842\n5146883\n5146946\n5146961\n5147038\n5147039\n5147062\n5147150\n5147171\n5147193\n5147208\n5147232\n5147245\n5147354\n5147441\n5147478\n7988195\n5147608\n5147638\n1975341\n1975546\n1975553\n1975571\n1975733\n8329661\n1975793\n8160782\n1975897\n1975903\n1976163\n5147681\n6097233\n7973517\n8414310\n1976993\n1977003\n1977007\n1977068\n4523725\n5147827\n5147834\n5769028\n5148247\n5148248\n1977967\n1978056\n1978065\n1978114\n1978375\n1978445\n4524636\n4524638\n10712554\n4524890\n4524902\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148394\n5148424\n5148436\n5148462\n5148475\n5148486\n5148487\n1980521\n8421569\n1981696\n1982406\n1982500\n1982525\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982791\n1982838\n1982867\n1982885\n1983000\n1983052\n1983111\n1983170\n1983260\n1983288\n1983387\n1983441\n1983442\n1983525\n1983548\n1983558\n1983648\n1983705\n1983755\n1983888\n1983896\n1983922\n1983997\n1983999\n1984117\n7752082\n7993353\n8015895\n8026858\n8262357\n8394261\n1984734\n1984942\n1984949\n1984954\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986623\n5149315\n5768880\n1987527\n1987578\n1987737\n1987744\n4524221\n1988064\n1988593\n1988602\n1988642\n1988684\n7555991\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n1990582\n5149474\n1991179\n1991371\n5149836\n5149839\n1992066\n5880512\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n5769062\n5769068\n5769072\n7429212\n9414984\n9563355\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4523522\n4524070\n4524072\n4524403\n4524793\n4524914\n4524951\n4524955\n4525078\n9220953\n5144190\n5146412\n5149499\n5149569\n7769543\n8851663\n4523880\n4523883\n4523885\n5149659\n5149665\n5149704\n5149717\n5149746\n5149768\n5149784\n5149820\n7443518\n5146342\n5146379\n4302268\n4524393\n5141677\n1943397\n8277078\n8073674\n8133678\n8273661\n1945569\n7389824\n1947306\n1947335\n1949784\n1949794\n1949852\n1949929\n1949938\n1950006\n5142394\n7683096\n8109173\n8270406\n7633472\n1869467\n1869478\n1869489\n1869512\n9359597\n5769709\n1735844\n1735855\n9400895\n9530977\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759079\n1759083\n1759097\n4533952\n7972792\n1759153\n1759407\n1759597\n1759620\n1759661\n1759667\n1759668\n1759673\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760857\n1760887\n1760891\n1761041\n1761438\n1761735\n1761865\n1762244\n1762608\n5109498\n5109506\n5109523\n5109599\n5109614\n5109661\n5109670\n5109722\n1763610\n1764673\n1764987\n1765011\n1765017\n1765044\n4534245\n4534257\n8352161\n1765767\n1765954\n1766128\n1766130\n1766131\n1766137\n1766210\n1766274\n1766410\n1766418\n1766510\n7895336\n1766646\n1766718\n1766721\n1766741\n1766814\n1767511\n1767597\n1767608\n1767625\n1767655\n5772172\n5772176\n5772178\n5772180\n5772186\n5772196\n5772199\n5772202\n5772205\n5772206\n5772210\n8045644\n1768117\n1768150\n5110200\n1768308\n1768341\n5110213\n1768702\n1768729\n1768749\n1768771\n1768815\n1769057\n1769505\n1769519\n1769543\n1769566\n1769958\n1770150\n1770307\n1770353\n1770416\n1770477\n1770530\n1770573\n4532696\n8393221\n1771385\n1771391\n7725644\n1771509\n1771531\n1771997\n1772013\n1772169\n1772179\n5772129\n1772940\n1772956\n1772977\n1773062\n1773163\n1773309\n1773328\n1773484\n1774347\n4534046\n4534052\n4534057\n1775172\n5110593\n5772269\n1775891\n4534719\n1776067\n5110670\n1776330\n1776371\n5772446\n1776619\n1776862\n4534463\n1777253\n5110871\n5110885\n1778074\n4534299\n1778127\n1778143\n1778517\n1778596\n5111574\n5772222\n8253467\n1779435\n1779641\n1779690\n1780378\n1780926\n1780954\n1781008\n4533285\n1781694\n1782319\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782872\n1782927\n1782948\n1783016\n1783037\n1783043\n1783045\n5112155\n5112160\n5112254\n5112283\n5112291\n5112336\n5112345\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1784359\n1784812\n1784826\n1784853\n4534290\n1785185\n1785286\n4532886\n4532888\n4532890\n1785887\n1785888\n1785895\n1786007\n8292872\n1786360\n1786515\n1786619\n1786902\n1786936\n1787064\n1787112\n1787213\n1787267\n1787400\n1787504\n1787590\n1787610\n1787631\n1787697\n1787751\n1787770\n1787841\n1787859\n4534086\n1788425\n1788522\n4534011\n1788917\n1789076\n1789086\n1789267\n4533882\n1789481\n1789553\n1789580\n4534162\n4534166\n1789694\n1789695\n1789730\n1789745\n1789753\n1789755\n1789783\n1789785\n1789840\n1789849\n10068024\n10113008\n10312073\n10904813\n1789982\n1790002\n1790062\n1790072\n1790084\n1790160\n4533115\n8047343\n9092175\n1790361\n1790364\n9174377\n1790625\n1790671\n1791422\n1791784\n1792061\n1792292\n1792335\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n1793877\n1793986\n1794102\n1794590\n1794599\n1795068\n1795215\n1795282\n7869346\n1795854\n1795930\n1795946\n1795957\n1796007\n1796117\n1796139\n1796145\n1796169\n1796188\n4534485\n4534486\n7438067\n8007222\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n11992983\n1798916\n1798931\n1798971\n1798974\n1798984\n1799132\n1799135\n1799701\n1799799\n1800004\n1800032\n7981386\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534398\n6544687\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534458\n4534533\n5883985\n11478679\n5110644\n1774283\n1774285\n1779334\n5114198\n1763072\n5772063\n4534681\n4534685\n4534686\n8108800\n1771634\n1771650\n1771678\n1771698\n8581601\n1770772\n1770773\n1770869\n1770880\n1771040\n1771169\n1771204\n1771214\n1771245\n4533714\n7940536\n5113847\n5772309\n5108761\n4534525\n1773901\n1773904\n4533347\n4533360\n4532203\n4532206\n4532239\n4532253\n1822346\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1823726\n1824113\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n5118892\n5118904\n7624468\n7937573\n8397564\n1825539\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119143\n5119245\n1827645\n1828162\n4534872\n1894164\n1894268\n5882039\n7712938\n1894714\n4535614\n4535632\n4535636\n8049830\n1894840\n4535827\n4535809\n4535817\n5128323\n5128357\n6231906\n9804158\n1895875\n1896841\n1897852\n1898286\n4299368\n1898544\n1902533\n1902749\n8140883\n6221746\n1905383\n8208583\n1909398\n1911093\n1911112\n1911168\n1911278\n1911461\n7728366\n7809779\n8078362\n1912325\n1912372\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5772890\n7428726\n7799370\n8810143\n5134098\n1913175\n1913178\n1913328\n1913351\n5134469\n5134569\n5134667\n5134682\n5134693\n5134815\n5134837\n5135191\n7700512\n7738295\n7791190\n7791558\n7798382\n8047165\n8167638\n8233062\n8298764\n8314088\n7854318\n1918669\n1918868\n8035998\n8176911\n7622059\n4535510\n5130587\n5130682\n7762841\n5132183\n8001799\n5135513\n5131910\n8138711\n1902143\n1902169\n1899433\n7768674\n7934873\n8168644\n8393082\n1951557\n5142870\n1951649\n1952014\n1952062\n1952130\n1952229\n5143048\n1952449\n1952532\n5143129\n5143147\n1952806\n1952812\n1951713\n1832819\n1832853\n1832862\n1832915\n1832927\n1832936\n1833096\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n1853079\n4529248\n1941864\n5120465\n5120577\n5120668\n5120675\n5120767\n5121040\n5121046\n5121177\n5121244\n5121517\n5121613\n5121737\n8273859\n1842196\n5120396\n1842485\n1842542\n1842690\n1842695\n5101394\n1730978\n1731263\n4525641\n1731598\n1872368\n1878782\n1878798\n1878862\n1878879\n1878895\n1878907\n1878939\n4531506\n4531517\n1879252\n1879408\n1879452\n5126212\n5126217\n1879534\n1879630\n1879655\n1879703\n1879731\n1879735\n1879765\n10915497\n1879970\n1880040\n1880062\n1880064\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n1881126\n1881151\n9819403\n4531687\n1881208\n1881603\n4531713\n1881834\n4531975\n1882158\n1882210\n1882437\n1882459\n1882557\n1882729\n5126834\n8325294\n1882905\n1883067\n1883161\n1883386\n1883634\n4531690\n1884212\n4531708\n1884465\n4532122\n1884970\n1885937\n1886084\n1886320\n8223165\n1886579\n1886587\n1886951\n1887290\n1887701\n4531968\n10922411\n1888484\n1888579\n1888733\n1888743\n1888759\n1888826\n1889287\n1889942\n1890187\n1890522\n1890534\n1890540\n1890576\n1890656\n1890679\n1890699\n1890701\n1890703\n1890772\n1890823\n1890898\n1891013\n1891059\n1891167\n1891326\n1891386\n1891426\n1891453\n1891473\n1891493\n1891494\n4532022\n1892242\n9674732\n1884240\n1884255\n1884273\n1884280\n1884312\n1884332\n1884365\n1884370\n1884403\n5884851\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8856895\n8858121\n9100030\n9101339\n1889833\n1887108\n1887173\n1887177\n1887178\n4532050\n4532057\n4532088\n4532095\n4532097\n6121184\n4532160\n1846107\n1846111\n1846112\n1846133\n1846141\n1846149\n1846159\n1846210\n1846219\n1846236\n4528813\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122293\n1853587\n4526048\n1854202\n1854287\n1854347\n5122439\n1854792\n1854824\n1854849\n1854237\n4526094\n4526050\n7717983\n1858637\n1858698\n1858762\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n4536292\n1859285\n1859305\n1859471\n1859480\n1859488\n1859534\n1859952\n1860063\n1860076\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n1866568\n5124911\n1867820\n7734292\n1841460\n1841616\n1841675\n1841813\n1841821\n1841989\n1861510\n1861644\n1861797\n1861862\n1862578\n1862580\n1862719\n1862765\n1862837\n5123922\n5124007\n5124029\n1864161\n1864358\n1864377\n5124143\n5124233\n1864652\n1993419\n1939432\n4525189\n1860108\n5119506\n5119513\n1830361\n1830372\n1830374\n1830380\n1830407\n1830408\n1830410\n1830457\n4525369\n1830498\n4525420\n4525425\n7976145\n1830537\n1830584\n1830632\n1830802\n4525364\n1754183\n1754332\n5107128\n5107219\n5107644\n5107829\n7410701\n7674502\n7761138\n7778368\n7903078\n7955974\n8158342\n8201251\n8348761\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n1939717\n7646066\n1829322\n1829363\n8254441\n10055273\n1856005\n1856289\n1856384\n1856595\n1856620\n1856658\n1856668\n1856686\n1856691\n1856701\n1856730\n1856768\n1856772\n1856867\n1857068\n1857143\n1857577\n1857626\n9790007\n1857828\n1857829\n1857856\n1857863\n1857878\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n8225376\n1938214\n1938520\n1938810\n1858531\n1838691\n1838811\n1838838\n1838905\n1838911\n4528692\n4528694\n1833500\n1833626\n4528658\n1834589\n1835031\n5770913\n1835156\n1835393\n1835396\n1835407\n1836899\n1837172\n1838969\n1839851\n1839893\n1841158\n1841159\n5770922\n5770942\n4529032\n5119893\n1801051\n1801896\n4534779\n4534782\n1802280\n1803012\n1803073\n4534762\n4534767\n5114311\n5114327\n8244266\n", + "regions/oceania.classes": "1992268\n1992283\n1992301\n1992315\n10648791\n1758114\n1758146\n10083877\n9840570\n9960252\n10190647\n10341307\n10435406\n1732978\n1733504\n1733507\n1733511\n1733535\n10155026\n1734851\n10730270\n1831974\n1831999\n1832023\n1832518\n1832533\n1832553\n1832569\n1832649\n1845271\n1845503\n1845586\n1846858\n1847066\n1847111\n1847622\n1847639\n8797017\n1849007\n1849010\n5122013\n1850156\n1850184\n1850633\n1850764\n1850781\n1850798\n1851039\n5806361\n11528968\n1851347\n1851543\n1852292\n10023115\n10498365\n11706893\n1850463\n9977181\n1829703\n1829776\n1829814\n1829866\n4705103\n4695719\n1828395\n1828400\n1828402\n8150089\n1828424\n1828426\n1828455\n1828456\n6196939\n1828471\n1828491\n1828540\n1828543\n1828544\n10707366\n10833593\n10882997\n5119346\n5119349\n5119350\n5119353\n5119354\n5119361\n10288636\n10639943\n1828826\n4695709\n1828976\n1837706\n1834428\n4684910\n4686897\n4686905\n4686907\n4686913\n1835848\n1835862\n1835874\n1835886\n1835897\n1835908\n1835928\n1838084\n1838978\n4685802\n1839600\n1839604\n4685468\n4684220\n4685557\n4685946\n1835460\n1845965\n1830812\n1830814\n1831458\n1831473\n1831499\n1831508\n1831565\n1831655\n1831667\n4708342\n5119868\n1839396\n10042504\n10094594\n10379915\n10531480\n10548275\n11919216\n9851221\n9985020\n6132868\n1761572\n1761573\n1761751\n1761752\n1761820\n1762151\n5109196\n1762849\n1762852\n10256550\n1762887\n1763957\n1763976\n1763994\n1764060\n5109782\n5109784\n5109786\n5109787\n5109788\n1764886\n1765653\n10099906\n10647358\n1766558\n1766560\n1767215\n10340332\n1772543\n5110490\n1774069\n5110546\n1777165\n1777166\n5110837\n11457930\n11609422\n4687991\n5110981\n10403441\n9610080\n1779671\n1780716\n1780856\n1780857\n1780860\n1780862\n10154280\n1782185\n1782326\n1782328\n1783173\n1783991\n10157400\n5112407\n5112410\n1784646\n1785832\n1786317\n5112500\n1786958\n1786990\n1787003\n1787009\n1787010\n5112531\n1788553\n6132936\n7346446\n9494526\n1788881\n6132826\n1788986\n1789225\n10090168\n1789794\n1790257\n1790450\n10598407\n1790900\n1790910\n9967251\n9983957\n5112940\n1791379\n1791514\n1791715\n9504222\n9860902\n10267570\n1795657\n10573746\n1796984\n10108671\n1797039\n6132979\n1798014\n1798018\n1798023\n1798025\n1798101\n5113950\n5884247\n11636323\n9440183\n9635978\n9923283\n10657151\n1798511\n10096855\n1787090\n1798529\n1798687\n1798768\n1798868\n4532352\n6115437\n8793873\n1799165\n1799167\n1799743\n1799757\n1803148\n1803197\n11909090\n1803781\n1803788\n1804246\n1804429\n1804430\n1804610\n10053130\n1804721\n1804727\n1804742\n10156470\n1805043\n1805505\n1805524\n1805806\n1806704\n1806871\n1807473\n1807477\n1807478\n1807479\n1807480\n1807483\n1807485\n1807488\n1807490\n1807491\n1807503\n11900897\n1808232\n6198302\n5115777\n12214821\n1809244\n1809248\n10189965\n1809381\n10010700\n1810752\n1810851\n5116397\n1812437\n1812453\n1812465\n1812658\n1814913\n10074808\n1815338\n1816029\n1816110\n1816264\n1816434\n1817065\n11703980\n1817160\n1817171\n1817217\n1817810\n1818413\n5118171\n10556853\n5118291\n1819970\n1820383\n1820401\n1820435\n10274769\n1821448\n10503495\n10106475\n9956017\n10270464\n9473918\n9559336\n12180031\n12203022\n12216332\n9852545\n10496181\n10629533\n10004820\n10248689\n10454874\n10443878\n10637588\n10643533\n10166724\n10480609\n8363709\n10178326\n10469564\n9621271\n5116504\n1818216\n9336001\n1781413\n1781428\n1781598\n1763761\n6115388\n1816634\n1816648\n1816673\n1774598\n1774604\n1774654\n1774691\n1774712\n1768630\n5111643\n1766892\n1813468\n10164453\n1768190\n9400916\n1768462\n9989156\n5113001\n5113036\n5109796\n1821464\n1821468\n1821542\n1822003\n1804120\n1804148\n6116076\n1782507\n1783715\n9918092\n1775796\n4687933\n4687934\n4687935\n1820137\n1799821\n1781531\n1798331\n1798335\n1784936\n1785072\n1765999\n1766007\n10330198\n10598038\n11612469\n1786597\n4687389\n5884188\n9935660\n5110013\n10196956\n10392889\n1811455\n1811462\n1811465\n1796941\n1782310\n12266659\n5108421\n1771903\n10097776\n4301309\n5112440\n1795542\n1860849\n1992434\n1992489\n1731886\n1731890\n1731906\n1731923\n1731926\n1731927\n1731980\n1732001\n1732005\n1732031\n1732033\n1732044\n1732052\n10640865\n9950697\n1833779\n1833782\n1833794\n1834524\n1834547\n4685588\n4685595\n1834793\n1835086\n1835348\n1835814\n4529064\n1837724\n1837726\n1837727\n1837968\n1838058\n1838065\n1838071\n1839658\n1839714\n1839721\n4684986\n1840346\n1841095\n1831752\n1852832\n1852859\n1860259\n1860260\n5123339\n10361029\n10625116\n5123419\n5880040\n5880041\n6132546\n10208422\n1853222\n10005632\n10433914\n11756119\n1869707\n1869714\n1870237\n1870450\n1870452\n1870459\n1870506\n1870509\n1870703\n1870988\n1871171\n1871333\n1872169\n9969513\n1872255\n1872470\n1872735\n1872812\n1872827\n1872850\n1872873\n1872901\n1873049\n1873079\n1873222\n1873285\n1873290\n1873291\n1873373\n1873620\n9858922\n1873773\n1873843\n5125591\n5125600\n5125602\n5125629\n1874146\n1875478\n1875534\n1875554\n1875584\n1875844\n1876479\n1876542\n10356445\n1876876\n10442332\n1876922\n1876955\n10142569\n1877406\n1877453\n5125943\n1877988\n1878173\n1878406\n1878470\n1878490\n9835867\n1888454\n1890056\n1890065\n10211808\n5884888\n10526954\n10065676\n10129011\n10279983\n11591775\n9857679\n10423263\n1748780\n1836906\n1836907\n1940575\n1736623\n5102683\n1736995\n1737015\n10146436\n10469532\n1737115\n1737131\n1737182\n1737187\n1737847\n1737893\n1738045\n1738081\n1738192\n1739051\n1739128\n1739220\n1739316\n1739553\n1739567\n1740586\n1740797\n1740828\n12259151\n1741074\n9826405\n1741084\n11906255\n10250474\n1741593\n1741820\n1741826\n1743182\n1743184\n1743319\n4707896\n4707900\n10073044\n1743680\n9867379\n1744998\n1745019\n1745307\n9586705\n1745957\n1746000\n1746462\n1746512\n4707848\n1747068\n1747215\n1747222\n6219423\n10021059\n10023049\n10080502\n10358334\n10476233\n1747639\n1747672\n1747814\n1747914\n1747924\n10355898\n1748103\n1748425\n1748442\n1748473\n1748486\n1748518\n1748648\n1748661\n1748751\n10185271\n9952043\n10302660\n10530383\n9909775\n10606887\n10624577\n10153630\n10549715\n12057008\n10462612\n11688440\n1738196\n5138967\n5138984\n1921010\n10581870\n1921123\n1921262\n1921263\n1921300\n5138069\n1922244\n1922745\n1923744\n1923782\n4708972\n4708973\n4708977\n1924362\n1924390\n1924558\n1924713\n4300393\n1925555\n4708984\n1925628\n1925711\n5138732\n5138743\n5806391\n1925877\n1926436\n1926448\n1926460\n1926574\n4300259\n1927274\n4709107\n1927707\n1927894\n1927895\n1927897\n1927900\n1928018\n4708927\n5139050\n1928382\n1928829\n1928915\n4709030\n1928923\n5139357\n5139524\n5139673\n1931189\n5139914\n1931889\n1931943\n1931956\n1931958\n4709051\n1932159\n1932172\n1932206\n1932246\n1932273\n4709095\n4708995\n11636481\n1932563\n7346444\n1932908\n4709133\n5806412\n1933647\n5138929\n4709102\n4709147\n1752534\n1752536\n1752537\n1752539\n1752545\n1752547\n1752903\n1752946\n1752947\n1753461\n11014495\n1753902\n1753906\n10368234\n9880359\n10203493\n9959898\n10560849\n10988070\n1919176\n1919340\n1919342\n1919344\n1919348\n1919381\n1919419\n1919421\n1919432\n1919444\n1919540\n1919626\n1919652\n1919744\n1919758\n5137808\n5137828\n5137832\n5137833\n5137842\n5137849\n5137850\n5137854\n1920496\n1920534\n1920535\n1920538\n1920541\n5137929\n5137949\n1920621\n1749124\n1749529\n1749531\n1749664\n1750131\n1750326\n5104822\n5104903\n5105081\n1750934\n1751024\n1828310\n1828317\n9882683\n9451208\n1758461\n1758596\n1758602\n9943941\n10118678\n1962159\n1962162\n9875141\n1970460\n1970463\n1970473\n1970485\n1964995\n1964996\n10295646\n1954236\n1954514\n1954522\n1954911\n10634980\n5143586\n9213204\n10217455\n1955039\n1955093\n1955153\n1955199\n1955202\n1955271\n1955272\n1955318\n1955413\n1955416\n1955422\n1955736\n1955737\n1955743\n1955745\n10560674\n11720357\n1955753\n1955755\n9593393\n1955763\n10003902\n10048667\n10062202\n10075732\n10132475\n10177276\n10341059\n10363151\n10398979\n10434798\n10456933\n10457796\n10471477\n10528420\n10623003\n11451126\n11468089\n11638437\n1955899\n10078526\n10360329\n11690145\n1956384\n9234402\n10257899\n1956416\n1956955\n1956958\n1956963\n1956978\n1956983\n10167252\n1957058\n1957062\n1957333\n1957413\n1957523\n1958454\n1959341\n1959379\n1959500\n1959595\n1959782\n1960004\n4702961\n1960106\n1960128\n1960201\n1960411\n5144115\n5144129\n1960521\n1960524\n1960940\n1960941\n1961180\n5144204\n1962656\n1962657\n1962659\n1962689\n1962829\n1962841\n1962842\n1962934\n1963297\n5144353\n1963782\n1964066\n1964137\n1964141\n1964143\n1964144\n1964151\n1964153\n1964155\n1964158\n1964174\n1964305\n1964331\n1964565\n1964702\n10184940\n10523304\n1965643\n1965649\n1965650\n9952367\n9976926\n1966185\n5144505\n1966977\n1966978\n5144553\n1967703\n10174909\n10268303\n10379201\n1967716\n9833933\n1968115\n1968131\n5144554\n5144558\n5144633\n1969104\n1969568\n11858774\n1969581\n6133643\n1970093\n1970094\n1970108\n1970145\n1970148\n1970150\n1970159\n1970265\n9939530\n10085335\n10109201\n10505033\n10054019\n5144806\n5144937\n5144942\n5144976\n5145079\n5145422\n5145495\n5145503\n1972407\n4702783\n4702784\n1972606\n9119710\n5146262\n11533770\n1972797\n1972800\n1972806\n1972903\n5146294\n1973719\n5146426\n5146456\n5146472\n5146578\n5146719\n5146805\n5146856\n5146880\n5146937\n5147046\n5147109\n5147121\n5147150\n5147160\n5147225\n5147522\n1975164\n1975212\n1975248\n1975249\n9975134\n10018221\n10572729\n9875420\n1975704\n1975722\n1976123\n1976142\n1976213\n1976243\n1976303\n1976341\n1976342\n1976345\n10118849\n9183738\n10089194\n1976890\n1976891\n1976933\n1976934\n1976939\n1976941\n1977350\n5147917\n5147923\n5147930\n5148066\n5148096\n5148097\n5148214\n5148223\n1977759\n1977764\n1977767\n1977773\n10188228\n1978082\n1978274\n1978281\n1978282\n1978283\n10058263\n10626099\n10530515\n1978904\n1978915\n1978919\n1978937\n1979041\n4702599\n4702603\n4702609\n1980035\n1980041\n1980044\n1980055\n1980063\n1980068\n1980491\n1980659\n1980694\n10378314\n10571987\n1980821\n1980827\n10860751\n11660632\n1982024\n1982033\n1982043\n1982047\n1982055\n1982071\n1982072\n1982085\n1982100\n1982102\n1982103\n1982120\n1982148\n1982221\n12116722\n9488754\n5149182\n10199372\n1984913\n1985167\n1985181\n1985228\n1985267\n1985490\n6133659\n1985809\n1985816\n1985826\n1985931\n1986101\n1986223\n4702731\n1986650\n1986693\n1986720\n1986774\n1986846\n1986942\n1987203\n1987747\n1987766\n1987775\n1987785\n6133591\n10533589\n5149369\n5149370\n5149371\n5149387\n9987116\n1987855\n4702892\n4702893\n4702911\n4702912\n1988302\n1988354\n1988360\n1988361\n1988362\n1988370\n1988376\n1988382\n1988384\n1988820\n1988894\n1989170\n1989181\n1989282\n1989283\n1989377\n1989522\n1989538\n9906229\n1990164\n1990165\n1990167\n1990178\n11465014\n1990255\n1990256\n1990371\n1991394\n1991468\n10155932\n5149873\n5149880\n5149940\n5149941\n1992167\n5880539\n9577234\n10224300\n9830270\n11799357\n10864093\n4702878\n10078800\n8501203\n9629450\n6133635\n10175639\n9617411\n10438474\n10411202\n10146771\n1954338\n1954344\n1954346\n1954351\n1954353\n1954356\n1954359\n10210935\n10263383\n5149753\n1963532\n1942060\n1942067\n1942618\n1942621\n1942623\n1942636\n1942641\n5141650\n1942674\n1943089\n1943090\n1943096\n1943101\n4689912\n1943236\n1943250\n1944106\n1944113\n4689963\n1944456\n1944462\n1944520\n1944523\n1944618\n1944619\n1944627\n1944629\n1944631\n1944635\n1944638\n4689905\n1945122\n1945225\n1945694\n1945715\n1945863\n1945893\n5142067\n1946720\n1946737\n1946763\n1947446\n1947449\n1947459\n1947491\n1947492\n1950272\n1950591\n1951157\n1951170\n5715127\n5142749\n1758727\n1758839\n1758850\n1760172\n1760173\n1760175\n1761788\n1761789\n1762657\n1762900\n1762902\n1764178\n1764553\n5109848\n5109855\n5109870\n5109872\n5109882\n8352161\n1765508\n4687817\n4687827\n7800469\n1765898\n11034779\n1767368\n1767381\n1767430\n10575632\n10597823\n5802396\n5883925\n9356770\n1768546\n1768554\n1768557\n1768560\n1768972\n1769095\n1769114\n1769209\n1769225\n1769245\n1769250\n1769260\n1769271\n1769272\n1769283\n1769293\n1769294\n1769298\n1769302\n1769308\n1769310\n4688049\n4688075\n4688092\n4688098\n9493016\n1771357\n1772668\n4687565\n1774797\n4301304\n6115946\n1774918\n10032003\n1775279\n1775631\n1776182\n1777120\n5111064\n5111195\n5111214\n5111249\n5111535\n5111600\n1779269\n1779276\n1779382\n1780072\n1780330\n5111967\n1782354\n1782466\n4687661\n1784513\n5112414\n1784761\n1785145\n1785149\n1785166\n1785181\n1785217\n1785220\n1785314\n1785329\n1785725\n7400814\n5112457\n5112460\n5112461\n5112464\n5112465\n5112467\n5112469\n5112474\n5112475\n5112480\n5112481\n1787165\n1787185\n1787226\n4687681\n10161728\n1789637\n1789957\n4687906\n1791793\n1791837\n4687930\n1791862\n1792996\n5113394\n1793661\n1794425\n1795068\n1795110\n1795597\n4688166\n4688169\n4688172\n10690739\n10700540\n10706419\n10716234\n10732033\n10741837\n10747908\n10799294\n10814936\n10824750\n10840540\n10840565\n10850393\n10850415\n10866199\n10891794\n11539735\n11858666\n1796791\n1798084\n1802776\n8729319\n4532269\n10659737\n6132989\n10378302\n9890366\n9910243\n10967713\n11054256\n10121804\n5109270\n5109349\n5109418\n5109437\n4688142\n1792555\n1792560\n8108800\n1770849\n1771203\n1771245\n1771296\n1771308\n1765752\n5113853\n5108665\n5108671\n5108724\n5108737\n5108787\n1759351\n1789530\n10370112\n11437060\n11615549\n4532208\n4532266\n6115772\n6115820\n6115822\n6115830\n9893740\n1782277\n1781248\n1767259\n1792814\n9325654\n10458175\n10683012\n10658576\n1822257\n1822916\n1822917\n1823493\n5118798\n1824280\n1826020\n1825238\n1825950\n1825956\n1826017\n1826823\n1827429\n1827507\n11905965\n1827802\n1827810\n1827826\n1827829\n10194663\n10551923\n5127748\n5806166\n1892821\n1893660\n1893699\n1893787\n4704279\n1894054\n7712938\n5128224\n5128225\n1895448\n1895956\n1896304\n11701883\n5129266\n5714367\n5806175\n5806176\n5806177\n1898970\n4704400\n4704401\n4704404\n4704407\n1899931\n1899932\n1899940\n1899943\n1899947\n1899950\n1899956\n1900872\n1900939\n1901669\n5130439\n5130456\n5130464\n5130476\n1902106\n1902108\n1902233\n1902244\n1902248\n1904728\n1904798\n1904884\n1904996\n1907569\n1907683\n1908700\n1908713\n1909216\n10656625\n1909436\n1909453\n1909457\n4704352\n4704356\n1909659\n1909854\n1910753\n1910809\n1910812\n1911755\n1913091\n1908108\n1915031\n1915144\n11535847\n5135839\n5136594\n5136713\n5136790\n5136868\n5136939\n5137085\n5137128\n5137257\n9251096\n4704316\n4704500\n4704501\n5131493\n5133088\n5806167\n6100725\n7642610\n1910576\n1910628\n1910629\n1910648\n1910662\n1951492\n1951874\n1853190\n10548683\n1735168\n1735391\n1735398\n5102423\n1735273\n5102432\n1941683\n1941702\n1941713\n5120675\n5121177\n5121613\n8273859\n1843313\n1843326\n1843331\n1843362\n1843370\n1843379\n1842119\n1842124\n5120341\n5120343\n5120357\n5120368\n5120379\n5120396\n1842508\n11854390\n9755262\n1843429\n1843485\n1843590\n1730519\n1730543\n1731097\n1731221\n11431507\n10535684\n11563728\n11904618\n5101502\n10049887\n10134558\n10307487\n5806352\n5806353\n10629470\n8008237\n1878744\n1878826\n1879227\n1879339\n1879340\n1879405\n1879408\n1879465\n1879471\n10851840\n10857326\n12231152\n5126231\n5126240\n5126241\n5126259\n5126284\n5126287\n5126292\n5126315\n5126332\n5126344\n5126357\n5126376\n5126381\n5126396\n5126397\n5126398\n5126434\n5126445\n5126449\n5126454\n5126458\n5802331\n5802333\n10489219\n5126635\n5126637\n1880352\n1880353\n1880439\n1880852\n1880858\n1880982\n1880986\n1881018\n1881019\n1881031\n1881041\n1881089\n1881122\n1881132\n1881151\n1881157\n9819403\n1881228\n1881320\n1881329\n1881336\n1881340\n10046436\n10348110\n10441857\n1881424\n1881485\n1881504\n1881515\n10751438\n1882297\n1882215\n1882253\n1882266\n1882272\n1882355\n5126798\n5126843\n5126866\n5126870\n5126889\n5126905\n5126916\n5126922\n5126946\n5127020\n5127024\n5127039\n5127044\n5127045\n5127054\n1882753\n1882767\n1882771\n1882773\n1882884\n1882905\n10156181\n10643403\n1882965\n10464411\n1883024\n1883028\n1883067\n4687288\n1883394\n5127097\n10069243\n1883775\n1883881\n1883943\n1883968\n1884228\n9294363\n10171108\n10209845\n1884434\n1884437\n1884449\n1884461\n1884479\n9837762\n1884503\n1884531\n1884539\n1884595\n1884607\n1884610\n4687228\n6120980\n1884816\n1884890\n1884909\n1884936\n1885263\n1885569\n1885572\n1885605\n1885630\n6133182\n9957790\n1885702\n1885763\n1885836\n1885919\n1885945\n1886088\n1886251\n1886362\n1886526\n10610809\n1886720\n1886729\n10613467\n1887036\n1887052\n1887054\n1887462\n1887580\n1887585\n1887686\n1887691\n1887894\n1888123\n1888537\n5127394\n1888906\n1888913\n1888926\n1888958\n1889043\n1889050\n1889071\n1889074\n1889239\n1889242\n1889249\n1889272\n1889277\n1889356\n1889381\n1889552\n1889563\n1890031\n1890187\n1890247\n10058481\n1890320\n1890335\n7543006\n5127530\n10180624\n1890410\n1890670\n1891236\n1891299\n10071588\n1891308\n1891533\n1891583\n10072800\n1892458\n1892462\n10446295\n6133140\n5771877\n10117959\n10227418\n4532125\n9967529\n9900218\n10145421\n10348945\n10521368\n10579230\n10594210\n6120803\n6133232\n6121010\n10257673\n10556366\n6121218\n10502505\n10397209\n6133154\n10462708\n6133158\n10063575\n10375403\n1886374\n1889769\n1889833\n1889875\n5127592\n5127595\n5127629\n5127638\n5127644\n5127669\n5127675\n5127698\n5802339\n10245924\n10769553\n1887126\n1888638\n1888639\n1886123\n1883885\n1880275\n1880286\n1880293\n1880305\n1880310\n1880316\n1880318\n1880321\n1880350\n1831097\n1831136\n4708183\n1731292\n5122307\n1853578\n10222583\n1853855\n1854019\n1854021\n10452421\n10546013\n11428453\n1854028\n1854249\n5122430\n5122455\n5806333\n1854906\n1858674\n1858718\n1858762\n1858930\n1858973\n1859061\n4536292\n9768621\n9590272\n9801765\n1859453\n9675743\n9749806\n6133397\n1859932\n1860026\n5123118\n5123137\n5123276\n6097269\n9759340\n1864897\n1867788\n10883659\n1868025\n7734292\n10019169\n1861451\n1861456\n1861457\n1861458\n1861488\n1861644\n5123636\n5123663\n1861951\n1861953\n1861958\n1862026\n1862293\n1862331\n1862363\n1862370\n1862401\n1862403\n1862414\n9836014\n1862434\n1862441\n1862449\n1862455\n1862475\n1862516\n1862521\n1862526\n6106708\n1862757\n1863034\n1863051\n1863384\n9899724\n1863467\n1863880\n1863955\n1864135\n4703479\n5124080\n8133328\n11954157\n5124332\n5124423\n5123852\n1992634\n9893936\n1992889\n1992907\n1992936\n1992938\n1992976\n1993021\n1993045\n6133769\n10022517\n1953217\n10132811\n10644798\n11503857\n1954025\n5143279\n1954120\n1830419\n1830435\n1754619\n1754803\n1754806\n1754814\n1757853\n4689394\n1830669\n8254441\n1855804\n1855807\n1855813\n1856005\n5122779\n1856348\n1856374\n1856516\n1857020\n1857033\n1857068\n1857097\n1857143\n1857180\n1857213\n1857233\n1857241\n1857258\n1857295\n1857315\n1857380\n1857385\n1857410\n1857626\n1857828\n1857829\n1857840\n1857882\n1857900\n1857935\n1857948\n1858100\n1858163\n1858283\n1858404\n1858411\n1858488\n1858523\n1858526\n1856891\n1856893\n1937698\n1937712\n1937745\n1937769\n1937819\n1937856\n1937988\n1938069\n1938074\n1938088\n1938129\n5141177\n5141187\n5141252\n5141254\n5803065\n1937444\n1937474\n4693675\n1937618\n1939131\n1939156\n1838251\n1838255\n1838276\n1838289\n1838297\n1838304\n1838308\n1838331\n4685893\n1833518\n1833523\n1833525\n1833531\n1833532\n1833535\n1833539\n4685097\n1833477\n4685485\n1833562\n4686368\n1833600\n1833653\n1833664\n1833834\n1834019\n1834078\n4685138\n4685219\n4685271\n1834497\n1834850\n1835082\n1835121\n1835123\n1835128\n1835345\n1835555\n1835609\n1835612\n1835635\n1835644\n4685116\n1835790\n1835821\n1835828\n4686483\n1836871\n1836873\n1836899\n4685431\n4685448\n1837053\n1837057\n1837150\n1837159\n1837172\n1837569\n1837572\n4686743\n1837857\n1837870\n1837894\n1838034\n4685065\n1838218\n1838224\n4685299\n4685306\n1838333\n4686617\n4686620\n4686621\n4686628\n1838626\n1838629\n1838633\n1838635\n1838641\n1838649\n8958353\n1838958\n1838960\n4528702\n4685566\n4685576\n1839317\n1839323\n1839325\n1839333\n1839370\n1839494\n5120053\n5120058\n5120063\n4685645\n4685650\n4685653\n4685655\n4685662\n4685669\n4685678\n4685683\n1840258\n1840260\n1840726\n1840774\n1840776\n1840796\n1840812\n1840844\n1840974\n4686042\n4686055\n4686111\n4686133\n4686164\n4686190\n4686214\n4686264\n4686266\n1841101\n1841180\n1841183\n1841188\n1841215\n1841219\n1841221\n1841302\n4685972\n5802248\n5802256\n5802257\n5802259\n4686039\n4686015\n4686016\n4686018\n4686022\n4686027\n4686029\n4684521\n4684591\n4684789\n4684888\n4684893\n4684925\n4684958\n4685629\n4685631\n4685778\n4685810\n4685980\n4685981\n4686355\n4686385\n4686386\n4686531\n4686532\n4686656\n4686697\n4686702\n4686844\n4686956\n10213314\n10225227\n1800441\n1800473\n1800522\n1800562\n10010361\n9859868\n9883274\n1800691\n1800843\n1800844\n5114394\n5114409\n9267364\n10240592\n1801170\n5114515\n1801303\n1801305\n1801316\n1801432\n1801461\n1801490\n1801519\n10026605\n10066605\n10088502\n10372377\n10448500\n10573425\n11496990\n11508472\n11594541\n11596898\n11698552\n11836409\n11871044\n1801787\n1801903\n1801922\n1802978\n4534792\n6112610\n6112661\n6133811\n9960072\n1802090\n1802702\n1802830\n1802833\n1802888\n1802998\n1803014\n1803021\n1803035\n1803039\n1803078\n1803091\n9485481\n10942408\n10264193\n5114303\n5114353\n", + "regions/oceania_excluding_australia_nz.classes": "1849007\n1850798\n1835460\n1831655\n1762151\n1763976\n1764060\n1765653\n1766560\n1777166\n4687991\n5110981\n9610080\n1780716\n1785832\n1786990\n7346446\n1789794\n1790257\n1791514\n9504222\n1796984\n10108671\n6132979\n1798023\n1798101\n5113950\n5884247\n1787090\n4532352\n6115437\n8793873\n1803148\n1803197\n1806871\n10189965\n1809381\n1816029\n1820401\n10270464\n12216332\n9852545\n10178326\n5116504\n1781413\n1763761\n6115388\n1816648\n1774598\n1774604\n1774654\n1813468\n9400916\n5109796\n1775796\n4687933\n4687935\n1781531\n10330198\n10598038\n11612469\n1786597\n4687389\n5884188\n9935660\n4301309\n5112440\n5880040\n6132546\n1872873\n5125602\n1875478\n1736623\n1736995\n1737015\n1740828\n1741820\n1741826\n1746000\n10581870\n1921123\n1921263\n1921300\n5138069\n1922244\n1922745\n4708972\n4708977\n1924558\n1924713\n4300393\n1925628\n1925877\n1926436\n1926448\n1926574\n4300259\n1927274\n4709107\n1928382\n1928915\n1931889\n1931943\n1931956\n1931958\n4709051\n1932159\n1932172\n1932206\n1932246\n1932273\n4709095\n4708995\n1932563\n7346444\n4709102\n11014495\n1919176\n1919340\n1919348\n1919444\n1919652\n1919744\n1919758\n5137808\n5137849\n5137854\n1920496\n5137949\n1920621\n1758461\n9593393\n1956384\n1957523\n1958454\n1964305\n1964331\n1966185\n11858774\n6133643\n9875420\n1976213\n5148214\n1980694\n1982221\n9488754\n1985181\n1985228\n1986774\n1987775\n6133591\n1989538\n10155932\n5880539\n9617411\n5149753\n1942060\n1942621\n1942636\n1944462\n1945225\n1945694\n1945715\n5142067\n1946737\n5715127\n1758839\n1762657\n5109848\n5109872\n5109882\n1765508\n1767430\n4301304\n5111195\n1780330\n5112414\n1785145\n1785725\n7400814\n4687681\n1791862\n1792996\n1795068\n1795597\n4688169\n8729319\n6132989\n10121804\n1771245\n5108665\n4532208\n6115822\n1825956\n5127748\n1892821\n1893660\n1893787\n4704279\n1895448\n1895956\n1896304\n11701883\n5129266\n5714367\n1898970\n1900872\n1900939\n5130439\n5130456\n5130476\n1904798\n1904884\n1904996\n1907569\n1907683\n1908700\n1908713\n1909216\n10656625\n1909659\n1909854\n1910753\n1910809\n1910812\n1911755\n1913091\n1915031\n1915144\n5135839\n5136713\n5136790\n5136939\n5137085\n5137128\n9251096\n4704316\n5131493\n5133088\n6100725\n7642610\n1910576\n1910629\n1910648\n1910662\n1951492\n1951874\n5102432\n1730519\n1730543\n8008237\n1879408\n1879471\n5126635\n1880852\n1880858\n1881151\n1881320\n1881329\n1881504\n1882253\n1882771\n1882884\n1882965\n1883067\n1884228\n9294363\n6120980\n1884890\n1884909\n1886251\n1886720\n1886729\n1887054\n1888913\n1889272\n1889277\n1890247\n1890335\n7543006\n5771877\n10145421\n6121218\n10502505\n5127698\n5802339\n1888638\n1888639\n1886123\n1858930\n1859932\n1864897\n7734292\n10019169\n1861451\n1861456\n1861457\n1861488\n1861644\n5123636\n1861951\n1862026\n1862293\n1862331\n1862363\n1862370\n1862401\n1862403\n1862414\n9836014\n1862475\n1862516\n1862526\n6106708\n1863467\n1863880\n1864135\n11954157\n5124332\n5123852\n1953217\n1954120\n1856348\n1857068\n1857143\n1857258\n1857380\n1856891\n1937698\n1937712\n1937819\n1937856\n1937988\n1938069\n1938074\n1938088\n1938129\n5141177\n5141187\n5141252\n5141254\n1937444\n1937618\n1939156\n10213314\n1800441\n1800691\n1801490\n1802090\n1802702\n1803035\n10942408\n", + "regions/south_america.classes": "12170988\n11871190\n1921992\n1921993\n1922015\n1922024\n5140603\n5140627\n1934331\n1934447\n1934570\n1934715\n1934991\n1935078\n1935295\n1935301\n1935343\n1935346\n1935350\n5140969\n5140980\n1936161\n1936233\n1936312\n1936378\n1936388\n1936391\n1936565\n1936566\n5141085\n1936649\n10132775\n10331171\n9620499\n10075196\n1868575\n1732901\n1845385\n1850798\n5110390\n5108951\n8331687\n1763156\n1763163\n1763184\n1763199\n1763223\n1763256\n8028211\n1767307\n1767499\n1768283\n1770038\n1770044\n1770263\n5110326\n5110327\n5110533\n1776163\n1777052\n1777179\n1777737\n1777942\n5110891\n9610080\n1781029\n9630748\n1782211\n8384839\n1786217\n1786219\n1786247\n7480993\n1787464\n11495556\n5112542\n11890681\n10295290\n1788372\n5112626\n1790230\n1790240\n1790246\n1790248\n1790257\n1790281\n1790287\n1790308\n1790787\n1790945\n5112843\n5112990\n1792827\n1794637\n1795042\n1795049\n7598729\n1798427\n4532352\n8150450\n1803163\n1803218\n1803266\n1803628\n1804522\n5115046\n1805184\n1805271\n1805691\n1805717\n1805955\n1805976\n1805982\n1806064\n1806075\n5115406\n1806702\n1806871\n1806872\n1806878\n1806887\n1807353\n1807355\n1807514\n1807553\n1807569\n1807787\n1808648\n1809066\n1809127\n1809294\n1809348\n1809491\n1809499\n1810145\n1810172\n1810318\n5116145\n5116198\n5116238\n5116252\n9350900\n1810824\n1810846\n1810866\n1810867\n7535515\n1811019\n1811026\n1811081\n5116423\n1812573\n1812881\n1814182\n1814323\n1814336\n1814359\n5117245\n5117347\n5117348\n5117361\n1814658\n1814665\n1814692\n1814823\n1814863\n8933773\n1815373\n5117413\n5117414\n5117430\n5117462\n5117463\n5117553\n1815856\n1816570\n5117685\n5117687\n1817086\n1817734\n11725616\n1817808\n1817852\n1817854\n1818252\n1819310\n1819873\n11904675\n10395440\n10214972\n10830546\n10851228\n12194283\n8429622\n1781420\n1793538\n1813413\n8177591\n1775796\n5117941\n5884258\n7716829\n8299504\n1784959\n1785024\n1785072\n5884188\n6117485\n7611914\n7924383\n1780646\n1780668\n1860184\n5123542\n1870308\n1870450\n1870988\n1871407\n8766638\n1872514\n1872873\n1872901\n1873079\n1873398\n7372375\n1876542\n1876665\n5125916\n1877282\n1877988\n5125525\n5143284\n5143285\n5131957\n4525777\n1740623\n8094357\n1741826\n10407953\n1935498\n4299071\n8345567\n9457324\n9622955\n1936026\n1936810\n1936859\n1934172\n1920844\n1920900\n1920923\n10657453\n1921123\n8825450\n1922455\n10278292\n1922637\n1922739\n1922849\n1922865\n1922867\n1922868\n8913017\n1923678\n1923679\n1923997\n10436850\n1924754\n8837974\n8840017\n8992718\n9157410\n9478718\n1924759\n10120854\n10307383\n10411472\n4300384\n4300393\n8389961\n8904480\n1925922\n1927988\n1927992\n1927996\n1928009\n4300406\n1928584\n1928589\n1929046\n1929049\n1929129\n5139578\n1929966\n1930079\n1930146\n1930167\n1930178\n1930179\n1930181\n1930270\n1930289\n1930361\n1930410\n1930422\n1930451\n1930466\n1930539\n1930563\n1930621\n1930653\n1930654\n1930728\n1930772\n1930779\n1930830\n1931119\n1931122\n5139864\n1931310\n5139898\n1932172\n1932576\n5140033\n5140054\n5140056\n1933260\n5140534\n1935869\n1935872\n1935888\n1935901\n1935912\n1935916\n1935925\n1935935\n10176954\n10573187\n9867272\n9960318\n5139928\n4300268\n9469139\n10068544\n9975698\n9156458\n11554226\n1751980\n1751986\n1752034\n1752109\n9941073\n1752477\n1752775\n1752825\n11507608\n5105367\n5105379\n5105380\n5105447\n5105491\n5105553\n1753603\n1753604\n1753661\n1753833\n1753864\n1753871\n12181811\n12226416\n12251247\n1919125\n1919128\n1919129\n1919130\n1919146\n1919149\n1919173\n1919233\n1919235\n1919239\n1919245\n1919267\n1919277\n1919282\n1919289\n5137540\n1919646\n1919649\n1919652\n1919653\n1919656\n4701298\n7661785\n5137553\n10703948\n1919937\n1919939\n1919943\n1919945\n1919947\n1919949\n1920266\n1920275\n5137819\n5137851\n1920426\n1920431\n1920437\n1920461\n1920463\n1920506\n1920552\n1920571\n1920581\n1920586\n1920691\n5137969\n1920803\n1920809\n5137588\n5137593\n5137608\n12191141\n12206386\n12234544\n12236627\n1955694\n1956099\n1959637\n1960090\n1960255\n1960268\n1960315\n1961155\n1961361\n10650351\n1962051\n1962086\n1962118\n1962120\n4302252\n10084195\n1963425\n1963433\n1963633\n5144363\n1964698\n1965887\n1966088\n1966185\n1967346\n1968313\n1968315\n1968321\n1968324\n1968538\n1968942\n10088253\n5145466\n5145560\n1972101\n5146179\n5146253\n1973665\n10404426\n9590066\n1975287\n1976073\n1976255\n1976651\n1976746\n1978268\n1978464\n9243264\n1978958\n1978959\n1981160\n1981252\n1981951\n1981973\n5148593\n1985485\n5149222\n1985647\n1987330\n1989582\n1990594\n1990998\n1991405\n1991410\n5880539\n9438677\n9497623\n9619088\n9237031\n10464824\n10221195\n10288719\n9391442\n5149753\n5149811\n5150002\n5150027\n5142358\n12200261\n11654707\n10713577\n12252926\n11423843\n11729494\n12239491\n1942098\n1942141\n1942170\n1942206\n12286003\n1942327\n1942370\n1942372\n1942416\n1942455\n1942509\n1942558\n5141662\n1942854\n5141763\n1943475\n1943563\n1943571\n1943588\n1943823\n1943824\n1943830\n1943832\n1943901\n1943936\n12198522\n12243973\n1943962\n1944004\n1944273\n1944275\n1944283\n1944286\n1944314\n1944324\n1944329\n1944335\n1944343\n1944361\n1944374\n1944421\n1944574\n1944580\n1944744\n1944769\n1944815\n1944832\n5141913\n6205994\n9551544\n1944977\n1945302\n1945312\n1945396\n1945462\n1945476\n1945477\n4301942\n1946074\n1946097\n1946163\n1946167\n1946174\n1946177\n1946290\n1946310\n1946327\n1946333\n1946469\n1946520\n1946544\n1946550\n1946577\n1946582\n1946756\n5142086\n1947021\n1947037\n1947048\n1947049\n5142176\n1947402\n1947506\n1947568\n1947587\n1947588\n1947597\n1947890\n1947894\n1947973\n1947979\n1947980\n1948046\n1948158\n7603634\n1948439\n1948446\n1948521\n1948630\n1948826\n1948858\n1948861\n1948883\n1948890\n8792353\n1948947\n1949049\n1949068\n1949105\n1949219\n1949322\n1949451\n1949492\n10574663\n1949515\n1949592\n1949621\n7726809\n9395000\n10202439\n1949687\n5142424\n5142436\n1950017\n1950019\n1950024\n1950044\n1950052\n1950133\n1950153\n1950197\n1950243\n1950654\n1950767\n1951062\n1951072\n12231344\n1951097\n1951103\n1951121\n1951125\n1951133\n5142822\n5142825\n5715127\n12180041\n5142829\n5977260\n1945374\n12175154\n12263736\n7911151\n1760309\n1761892\n1764686\n1764690\n1764693\n1765155\n5109845\n5109850\n5109855\n5109881\n5109954\n5109958\n1766285\n1767052\n1767571\n9511345\n1767719\n1770659\n6115953\n1777727\n5111546\n1780309\n1780390\n1780407\n1780437\n1780440\n1782031\n1782424\n1783811\n5112414\n1785168\n1785331\n1785462\n7400814\n1786360\n1786733\n1791331\n1791870\n5113365\n1792817\n1792996\n1796276\n7383338\n7689966\n7882824\n8405656\n1799900\n10446574\n8729319\n10118643\n9342344\n11615055\n11626773\n1792564\n1774929\n5108665\n1797903\n1824189\n1825373\n1825391\n1826772\n1827145\n10043566\n10266782\n1896863\n1903598\n1892915\n1908317\n1908337\n1908339\n1892509\n1892634\n1892729\n1892736\n1892742\n1892746\n1892759\n1892761\n1892770\n4299095\n8941801\n1892837\n1892851\n1892855\n1892856\n1892858\n1892863\n5127814\n1892944\n5128005\n5128007\n5128011\n5128034\n1893337\n1893377\n1893381\n1893480\n10653980\n1894074\n1894082\n1894085\n1894087\n1894088\n1894329\n1894342\n1894349\n10412261\n1895176\n1895185\n1895203\n1895250\n1895709\n9192882\n1895733\n1895745\n1895768\n1895773\n1895789\n1895809\n1895818\n1895820\n1895829\n9016382\n1895838\n1895886\n1896087\n1896126\n5128398\n5128423\n5128432\n5128433\n5128438\n5128446\n5128475\n5128488\n5128491\n9981187\n1896316\n1896614\n1896628\n10465059\n1896658\n1896749\n1896754\n10353400\n1896756\n1896763\n1896774\n1896876\n9361954\n1896932\n5129251\n9590057\n11701883\n5129257\n5925238\n8367663\n1897977\n1897980\n1897985\n10073321\n10365587\n10375186\n10401396\n1898077\n1898133\n1898143\n1898174\n1898200\n1898203\n10321900\n10208801\n10265559\n4299370\n8961830\n9396180\n9563837\n1898348\n1898350\n1898352\n1898358\n1898367\n1898368\n1898370\n1898374\n1898391\n1898402\n6228464\n5129473\n5129479\n5129480\n5129481\n5129489\n5129496\n5129502\n5129524\n5129531\n5129535\n9208233\n9255328\n1898686\n1898789\n1898841\n1898848\n1898858\n1898865\n1899048\n5129636\n4299211\n4299213\n10474236\n1899835\n1899873\n1899893\n1899922\n9028122\n9446281\n1899989\n8445010\n1899994\n1900014\n1900024\n1900026\n9925669\n1900112\n1900121\n1900131\n1900134\n1900172\n1900175\n1900195\n1900197\n1900199\n1900233\n1900249\n1900295\n1900303\n1900345\n1900408\n1900485\n1900523\n1900565\n1900578\n1900618\n1900626\n1900632\n1900768\n1900787\n1900825\n1900830\n1900872\n1900918\n9392084\n11701991\n1901001\n1901153\n1901189\n9072828\n1901257\n1901261\n8247566\n5130296\n1901533\n1901580\n1901744\n1901794\n1901801\n1901804\n1901810\n11832697\n5130528\n5130548\n9357385\n1902110\n1902111\n1902114\n1902117\n1902118\n1902211\n1902300\n1902346\n1902378\n1902384\n1902388\n1902406\n1902410\n1902451\n1902458\n1902479\n1902502\n5130559\n1902615\n1902623\n1902642\n1902660\n1902676\n1902680\n1902692\n1902702\n1902704\n10512675\n1902814\n1902880\n1902882\n1902885\n5130562\n5130574\n1903028\n1903607\n1903634\n1903636\n1903646\n10114865\n5131597\n5131608\n5131637\n1904382\n1905321\n10312760\n10615631\n1905451\n1906715\n1907190\n1907250\n1907272\n1907727\n1908123\n1908138\n1908144\n1908146\n1908148\n1908150\n1908168\n1908174\n1908199\n1908203\n1908204\n1908217\n1908256\n1908258\n1908262\n1908299\n1908302\n1908309\n1908577\n5133035\n10542548\n1908995\n1909004\n1909019\n1909025\n1909039\n1909064\n10046510\n1909070\n1909108\n1909128\n1909135\n1909155\n1909185\n1909191\n1909209\n1909211\n1909213\n9851867\n8727750\n1909241\n1909489\n1909532\n1909573\n5133142\n5133255\n5133265\n5133366\n5133451\n5133503\n5133523\n1910378\n10558140\n5133565\n5133568\n1910773\n5133581\n5133589\n1911076\n1911077\n5133591\n5133595\n5133609\n5133615\n5133621\n5133622\n5133623\n5133634\n5133635\n9086331\n9219529\n1911577\n1911939\n12322536\n12335869\n1911966\n1912003\n1912036\n1912119\n5133736\n5133786\n9277330\n1914416\n1914420\n1914424\n1914433\n1914440\n1914465\n1914500\n1914501\n1914511\n1914693\n1914697\n1915193\n9988287\n1915339\n1915368\n1915369\n1915396\n1915401\n1915415\n1915417\n1915427\n1915456\n10078453\n10196441\n10487080\n11572120\n5136372\n1916700\n1916701\n1916772\n1916790\n1917830\n1917834\n1917840\n1917911\n1918076\n1918077\n1918078\n1918086\n1918094\n1918097\n1918133\n1918149\n10250149\n1918220\n1918263\n1918268\n1918269\n1918280\n1918596\n1918601\n5137408\n1919007\n1919010\n5128045\n5128067\n5128118\n10059034\n10415847\n10454590\n10455658\n11573394\n5881748\n10259880\n5131982\n5132003\n5132008\n5132078\n5132137\n5132225\n5132239\n5132252\n5132283\n5132289\n5132317\n5132346\n5132347\n5132360\n5132374\n5132429\n5132440\n5132446\n5132483\n5714312\n9541133\n5133088\n5714299\n5714302\n5881400\n5130557\n1910628\n8643309\n10265841\n10511167\n12045866\n5132917\n5133008\n9964857\n9745549\n5142842\n1868334\n1868360\n5125118\n1941570\n1941717\n1941719\n1941864\n5101371\n5101374\n5101527\n7628188\n1879052\n1879160\n1879253\n1879413\n1879471\n5126494\n5126517\n5126533\n5126585\n5126637\n1880411\n1880505\n10056494\n1880537\n1880623\n5126663\n10861282\n11968849\n1881079\n1881151\n5126721\n5126751\n5126756\n1882786\n10107015\n1882812\n1882818\n1882819\n1882941\n1882960\n1883067\n10807787\n8981028\n5127090\n1883968\n8324720\n1884428\n1884437\n1884449\n1884479\n1884685\n1884774\n1884923\n1885099\n1885158\n1885950\n1886251\n1886729\n10510138\n1887004\n1887634\n1888047\n1888292\n1888646\n1888955\n1889267\n1889536\n1890089\n1890247\n11044778\n7543006\n1890368\n1890410\n1890512\n1890737\n1890876\n1891035\n10310835\n1891932\n1892131\n1892230\n1892311\n1892355\n1892477\n1892488\n5771877\n7864212\n8146570\n8425580\n6121010\n6121218\n8876855\n1886374\n1889721\n1889850\n5127562\n5127631\n5127680\n1886123\n1886207\n1831136\n1853242\n11773446\n7946946\n1858674\n1858930\n9645309\n9700261\n10103570\n9547681\n10129812\n1864905\n1865107\n1865108\n1865120\n1865132\n5124542\n5124557\n5124595\n5124597\n5124598\n5124607\n5806244\n10534664\n1865547\n1865557\n1865572\n1865578\n1865709\n1865711\n1865764\n1865827\n1865837\n1865869\n1865963\n1866003\n1866006\n1866100\n1866105\n1866162\n1866164\n1866201\n1866220\n1866311\n1866496\n1866838\n1866902\n1867108\n1867171\n1867218\n1867224\n1867231\n5124873\n1867426\n1867515\n1867535\n1867547\n1867552\n1867709\n1867722\n1867773\n10108753\n10591617\n9634178\n10248521\n10302305\n10547404\n5123615\n1861479\n1861559\n5123636\n1861773\n1861783\n1861784\n1861967\n1862033\n1862044\n1862046\n1862047\n1862049\n1862078\n1862083\n1862087\n1862088\n1862091\n1862094\n1862096\n1862123\n1862139\n1862163\n1862181\n1862198\n1862207\n1862225\n9559671\n5123701\n5123704\n1862547\n1862551\n1862658\n1862805\n1862874\n1862923\n1863109\n1863143\n1863151\n5123784\n5123801\n7803585\n1863366\n1863412\n1863416\n1863426\n1863699\n1863701\n1863706\n1863714\n1863724\n1863732\n1863734\n1863735\n1863742\n1863750\n1863757\n1863856\n1863858\n1863864\n11468731\n1864316\n1864320\n1864321\n1864329\n1864352\n5124249\n5124250\n5124268\n5124442\n5124443\n5124448\n5124450\n5124452\n5123954\n5123956\n5123961\n5123971\n5123979\n5123980\n5123983\n5123991\n5123996\n1864004\n1864021\n1864046\n1864058\n1864068\n1864070\n1864084\n1864098\n1864103\n1864106\n1992634\n1992817\n1953499\n5143232\n5143234\n9424853\n1953970\n1953998\n1830681\n1953166\n1751497\n1751507\n1751509\n1751524\n1751572\n1751588\n1751590\n1751606\n1751625\n1751626\n9332550\n1751670\n1751785\n5105193\n5105194\n5105212\n5105217\n5105218\n5105227\n5122556\n10055273\n1857380\n1857829\n1858163\n1858283\n10038125\n1937655\n1937793\n1937816\n1937885\n1938022\n1938059\n1938112\n1938148\n10600208\n11716362\n1937064\n1937090\n1937109\n1937110\n1937124\n1937129\n1937136\n1937144\n1937155\n1937162\n1937165\n1937167\n1937530\n1937540\n1939130\n1939136\n1939143\n5141321\n5141324\n5141331\n5141340\n1939336\n1836899\n1837172\n4534796\n9385576\n8924506\n", + "regions/south_asia.classes": "1935849\n1992277\n1992315\n1732115\n1732525\n1732830\n5101640\n1733154\n5102242\n1734519\n5102300\n1845547\n1849656\n1850633\n1831458\n11095591\n12208733\n1758625\n1759775\n1760140\n6132868\n1760201\n1760927\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n5109766\n1763650\n1763976\n1764032\n1764043\n1764640\n1764886\n1765653\n1765863\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n5110232\n1768898\n10820762\n11467034\n10848620\n1769465\n1769772\n10881384\n1769827\n1769840\n1771977\n1772352\n5110417\n5110447\n5110490\n1775148\n5110546\n5110769\n1777166\n5110837\n9372988\n4687991\n5110986\n5110993\n6133058\n9610080\n5111830\n10203499\n1780716\n1782115\n1783302\n1785744\n1785832\n1786317\n1786711\n5112500\n1786980\n1786985\n1787009\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789794\n1790876\n1790888\n1791010\n10743044\n1791514\n1791715\n11725043\n5113148\n5113330\n5113352\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798481\n1798488\n1798504\n6132841\n6132850\n11732472\n1787079\n1798529\n1798700\n1798794\n1798807\n4532352\n6115437\n6133046\n8793873\n1799743\n1799751\n6132825\n1803148\n1803163\n1803197\n1803302\n1805044\n1805580\n1806814\n1806871\n1808180\n1808236\n1808381\n5115701\n5115771\n1809115\n10189965\n1809387\n12006709\n10882244\n5116395\n12182061\n1811686\n11736162\n12209759\n1813036\n1814653\n1814913\n1814928\n1814971\n1815260\n1815680\n1816065\n1816138\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819280\n8407461\n6134035\n5118348\n5118422\n10546538\n1820275\n1820282\n1820318\n1820352\n1820393\n1820414\n1820440\n1820450\n1820458\n1820477\n1820478\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n12183285\n10864524\n10270464\n9473918\n9559336\n6133292\n10062933\n10717837\n8148822\n12242422\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n10812069\n6112449\n8452092\n8526388\n8543494\n8624848\n12257250\n10166724\n8831819\n1774829\n10178326\n10282389\n10400868\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n8000103\n9478424\n1781598\n1794273\n1763761\n6115388\n6133297\n1774583\n1774598\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n1774682\n1819852\n1804532\n1768461\n5109796\n1821920\n1822017\n1819337\n1819362\n1804182\n6122364\n1815315\n1781446\n6116076\n1783713\n1812394\n4687933\n6116646\n1820118\n1820137\n4532453\n6116413\n1781531\n1798329\n1798331\n1798335\n1784947\n1785072\n1785105\n1765999\n6133069\n10272611\n10598038\n11513188\n1786597\n4687389\n5884188\n6132915\n6132916\n5110012\n1819685\n10098436\n11717028\n1782310\n10094256\n6197138\n5108435\n1771903\n5112440\n10371735\n1869363\n1939510\n5141344\n6132546\n1870237\n1870450\n8766638\n1871988\n1872094\n1872850\n1872873\n1873079\n5125602\n5125635\n1874937\n1876168\n1876542\n1876592\n1876922\n1877788\n1878406\n1883045\n1888454\n6133441\n1736623\n1740469\n1740797\n1740828\n1743998\n1745947\n1746714\n1920851\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n10825466\n1921092\n1921150\n1921163\n1921633\n7346430\n1922085\n1922111\n1922143\n1922244\n1922285\n1922288\n5138200\n1922584\n1922745\n1923019\n1923458\n1923491\n1923525\n1923649\n1923650\n1923651\n1923668\n1923809\n1923917\n1924193\n1924298\n1924323\n1924390\n1924458\n1924713\n1925381\n1925543\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926546\n1926550\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n11008182\n1927034\n1927219\n1927242\n1927284\n4709111\n7408690\n1927348\n1927393\n1927445\n1927707\n1927717\n7680748\n5139040\n5139050\n1928349\n1928361\n1928376\n1928419\n1928628\n1928849\n1928908\n1928915\n9856663\n1929697\n5139309\n5139339\n8356768\n1930904\n1930935\n4535106\n1930954\n1930968\n1931109\n1931148\n1931509\n1931655\n1931656\n1931706\n1931735\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n1932043\n1932159\n1932166\n1932273\n4708995\n1932551\n7346444\n1932607\n5139990\n1932814\n1932863\n5806412\n1933028\n1933044\n1933084\n5140436\n1933583\n1933647\n1933679\n1933845\n1934187\n1934188\n1934192\n1934211\n1934221\n1935377\n1935405\n1935410\n1935454\n7346417\n10879371\n4709102\n1933095\n1752161\n1752483\n1752492\n1753215\n5105458\n5105547\n1753759\n6133481\n11673056\n1919151\n1919161\n1919181\n1919340\n1919344\n1919348\n1919412\n1919438\n1919534\n1919551\n1919581\n1919589\n1919635\n1919716\n1919728\n1919731\n1919741\n1919951\n5137747\n5137748\n1920237\n1920247\n1920259\n5137790\n5137808\n5137823\n5137828\n5137832\n5137849\n5137858\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n5137861\n1920454\n1920467\n1920469\n1920472\n1920502\n1920506\n1920512\n4535307\n5137889\n5137891\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137578\n5137605\n5137612\n1920218\n5137763\n7207679\n1758003\n1868952\n1869057\n1963095\n5143311\n5143315\n5143354\n5143384\n1954911\n6133648\n1955552\n1955694\n1955725\n1956384\n1956496\n1956536\n6133593\n1957161\n1957333\n1957368\n1957413\n1957611\n1958152\n1958158\n1958290\n1958305\n1958307\n1958454\n1958463\n1958483\n1959645\n1959667\n6133552\n1959948\n1960181\n6133509\n5144092\n5144093\n1960617\n6133518\n1960686\n1961647\n1962678\n1962839\n4302252\n1963168\n1963629\n1963733\n11644349\n1964024\n1964025\n1964029\n1964116\n1964316\n5144431\n5144472\n1966367\n1967590\n7346240\n1968147\n7681733\n1968363\n1968730\n1968746\n1969581\n6133643\n1970322\n7346252\n5144806\n5145075\n5145396\n5145502\n5145560\n5145624\n9194811\n6133516\n5146062\n1972614\n1972620\n10732353\n1972754\n1973242\n1973338\n1973358\n5146508\n5146566\n5146608\n5146677\n5146752\n5146763\n5147306\n1975164\n6133559\n11856219\n1975805\n1975806\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976224\n1976228\n1976311\n1976469\n1976928\n1977182\n1977184\n5147917\n5147968\n5148043\n5148055\n1977813\n1977833\n1977863\n6133582\n1977962\n1978385\n1978405\n1978499\n1978524\n5148252\n1978789\n1978999\n6133546\n1979787\n1980521\n11449815\n1980827\n1981063\n7345811\n1982007\n1982221\n1982267\n1982865\n5149081\n5149136\n5149174\n1985152\n1985158\n1985167\n1985192\n6133659\n1985926\n1986032\n1986054\n1986508\n1986650\n1986779\n1986936\n1987203\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988306\n1988420\n1988487\n1989355\n1989942\n1990043\n1991123\n5149609\n1991310\n1991378\n1991779\n10155932\n11098546\n11869776\n5734515\n10422582\n10632124\n6133595\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n6133519\n11780161\n6133604\n10629052\n7346237\n6133562\n5734379\n6133523\n6133525\n6133542\n6133498\n10477629\n6133517\n10175639\n9617411\n9932090\n7345829\n11477039\n6133540\n10755716\n5149768\n5146303\n5146335\n1942522\n1942244\n1942251\n10773498\n1942378\n1942769\n1942808\n4689929\n1943212\n1943223\n1943236\n8277078\n5141795\n1943505\n1943519\n1943619\n1944503\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945137\n1945173\n1945225\n1945227\n1945274\n1945286\n1945569\n1945605\n1945715\n1945738\n1945742\n1945748\n1945814\n1945856\n1945863\n1945874\n1945877\n1945878\n5142001\n1946051\n1946058\n1946067\n5142067\n1946432\n1946695\n1946737\n1946738\n1946917\n1947385\n1947409\n1947446\n1947492\n1947496\n1947661\n1947673\n1947727\n1947745\n1947753\n1947765\n1947805\n1947846\n1948062\n1948088\n5142213\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n1949404\n7346351\n8828146\n9068968\n5142338\n1950013\n7346356\n1950156\n1950171\n1950521\n1950533\n1950879\n1950936\n1951157\n5977247\n7633472\n5142725\n5142729\n5142730\n1758613\n5108636\n10329023\n1760620\n1761438\n1762657\n6132957\n1764174\n1764553\n5109843\n5109848\n5109882\n5109898\n5109931\n8352161\n1765658\n1766910\n1767368\n1767393\n5772171\n5802396\n5883925\n1769095\n1769978\n1771555\n1774797\n6115946\n5111535\n5772222\n1779641\n1782341\n1782354\n1782543\n5714973\n1784513\n1784761\n1785145\n1785181\n1785185\n1785314\n1786452\n1786573\n1787373\n4687681\n1789957\n1791660\n1793246\n7918000\n1793689\n1795068\n6133011\n4688169\n4688172\n1798090\n1800149\n6132989\n6132797\n5109385\n4534681\n1792555\n8108800\n1771675\n1771245\n5113853\n5108671\n5108724\n5108787\n5108794\n1789530\n10933525\n11615549\n4532206\n4532208\n4532266\n6115820\n6115822\n6115830\n1782273\n10063383\n9325654\n10458175\n1822490\n1822493\n5118565\n1824338\n1824751\n1824766\n1824997\n1825336\n7346284\n1825920\n5118996\n5119000\n6133700\n1827484\n5119239\n1827711\n6133680\n6133684\n7346276\n9921001\n5118841\n1892555\n5127748\n5806166\n11464595\n1892821\n5127835\n5127867\n5127893\n5127932\n5127971\n5127992\n9963153\n1893177\n5792081\n1893329\n1893341\n10477747\n1893538\n1893546\n1893612\n1893793\n1893923\n1893951\n4704279\n8832485\n9136904\n10333787\n1894002\n1894012\n5128161\n5128169\n5128182\n10398658\n10639484\n1895037\n1895159\n1895499\n1895527\n1895609\n1895667\n1895956\n1895984\n1895992\n1896061\n1896105\n1896304\n1896922\n1897664\n1897677\n1897685\n1897692\n1897747\n1897808\n1897814\n1897817\n1897834\n1897873\n4299368\n5129293\n7346344\n1898434\n1898521\n1898946\n1898958\n1898988\n1899187\n5130277\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901850\n5130369\n5130444\n5130464\n5130471\n5130521\n5130542\n8189761\n4535689\n10577473\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n9968404\n9999965\n1904272\n1904701\n1904719\n1904943\n1904948\n1904996\n1905079\n1905142\n6221746\n1905383\n1906552\n1907576\n1907620\n1907637\n1907672\n1907687\n4535754\n5881946\n7976131\n1908352\n1908702\n1908775\n1908840\n1908871\n1908929\n7346301\n8978362\n10656625\n1909607\n1909649\n1909659\n1909810\n1909818\n1909838\n1909865\n1910706\n1911298\n1911300\n5133687\n5133689\n1911633\n1911736\n8078362\n5133693\n5133695\n10097687\n4535581\n5134098\n5134301\n8312017\n1913105\n1915079\n1915080\n1915110\n1915140\n1915154\n1915160\n1915262\n1915275\n1915325\n11516142\n11535847\n5135643\n1916410\n1916412\n1916758\n5136594\n5136681\n5136713\n5136752\n5136790\n5137156\n5137166\n5137291\n5137330\n1918026\n1918321\n1918394\n1918406\n1918408\n1918495\n1918497\n1918517\n1918533\n1918547\n1918554\n1918667\n1918736\n11645316\n4535618\n10595994\n10000384\n10043827\n5130587\n7762841\n5131142\n5131339\n5131372\n5131407\n5131443\n5131467\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n8001799\n5806167\n6100726\n7642610\n5135546\n5128587\n5128644\n5129000\n5129025\n10201273\n1910628\n1910629\n1899818\n5129913\n1914708\n1914749\n1918584\n1951505\n1951507\n5142870\n1951675\n1951747\n1951859\n1952034\n1952177\n1952281\n5143080\n1952481\n1952551\n1952685\n1952704\n5143116\n1952857\n5885428\n1868409\n4702564\n1868499\n5141581\n1730519\n1730543\n1730948\n8008237\n8130866\n8402212\n1872361\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n1879490\n5126635\n5126637\n1880451\n1880852\n1880858\n1880968\n1881089\n1881121\n1881126\n1881151\n1881170\n9819403\n1881293\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882884\n1882901\n10156181\n1882930\n1882941\n1882960\n1882965\n1883067\n5127097\n1883943\n1884051\n1884229\n1884434\n1884437\n1884449\n1884461\n1884479\n1884671\n6120980\n1884774\n1884835\n1884844\n1884890\n1884908\n1884909\n4532146\n1885012\n1885262\n1885263\n1885630\n6133181\n1885745\n1885763\n1885826\n1885836\n1885919\n1885945\n1885994\n1886015\n1886241\n1886251\n1886362\n1886526\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888324\n1888346\n1888537\n1888906\n1888911\n1888913\n1889043\n1889071\n1889074\n1889249\n1889272\n1889277\n1889356\n1889552\n1889563\n1890031\n1890287\n1890320\n1890335\n7543006\n10180624\n1890410\n1890512\n1890670\n1891167\n1891339\n1891583\n1891636\n1891758\n1891936\n1892153\n1892476\n10141437\n11056379\n9674732\n6133140\n5771877\n10227418\n4532125\n10145421\n6120803\n6133232\n6121010\n10397209\n6133154\n10959264\n6133158\n10375403\n5126680\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127698\n5802339\n1888638\n1883885\n10410699\n1831136\n5122430\n1858674\n1858930\n1859453\n1859932\n1860026\n1865593\n1865660\n9914882\n1865930\n1866356\n6106943\n1866530\n1866556\n1866573\n11729388\n5124673\n5124716\n5120278\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861714\n1861721\n5123674\n1861933\n1861936\n1861937\n1861949\n1861951\n1862008\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862430\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862526\n5123707\n1862765\n1862774\n1863034\n1863354\n1863394\n1863467\n1863646\n1863829\n1863909\n1863910\n1863944\n9578319\n1864126\n1864135\n8133328\n11738734\n11954157\n1864652\n5124305\n5124332\n5124348\n5124374\n5124415\n1864796\n6099041\n6106759\n7346401\n10193618\n5123837\n5123876\n5123884\n5123890\n8810912\n10191275\n10436020\n1992634\n1993496\n6133769\n1993637\n1953196\n1953326\n6132712\n1953407\n1953423\n11467944\n6132725\n6132729\n1954037\n5143241\n5143249\n1954120\n1754135\n1754368\n1754535\n1754919\n1754933\n1755248\n1757652\n5108318\n5108334\n11860016\n5108346\n1857380\n1857828\n1857938\n1858283\n8178453\n1858557\n1937707\n1937723\n1937792\n1937826\n1937892\n1937911\n1937931\n1938029\n1938052\n1938069\n1938088\n1938114\n1938147\n1938156\n1938174\n4692504\n8225376\n1936988\n1936993\n1937055\n5141144\n5141163\n5141177\n5141179\n5141185\n5141187\n5141199\n5141212\n5141215\n5141226\n5141233\n5141242\n5141254\n1937570\n1937580\n1937613\n1938520\n1939086\n1939168\n1939180\n1939215\n5141311\n5141317\n8546322\n10213314\n1800528\n1800539\n1800562\n1800572\n1800686\n1800821\n5114394\n5114400\n5114409\n11873966\n9544823\n5114425\n1801073\n1801080\n1801461\n1801503\n1801519\n10510325\n6112606\n6112661\n6133809\n6133811\n1801993\n1802090\n1802229\n1802337\n1802702\n1802827\n1802833\n1802939\n1803022\n1803035\n1803039\n1803060\n1803078\n10942408\n", + "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", + "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", + "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9026,\n \"sha256\": \"9c180ecd975fcf83e5e3bcad4bbead93158d3a85497ca1244c07157125076c56\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + } +} diff --git a/deployment/mambo_deploy/download.py b/deployment/mambo_deploy/download.py new file mode 100644 index 0000000..771c7d6 --- /dev/null +++ b/deployment/mambo_deploy/download.py @@ -0,0 +1,69 @@ +"""Pinned ERDA downloads with atomic, verified caching and explicit offline support.""" + +import hashlib +import json +import os +import tempfile +from pathlib import Path +from urllib.request import urlopen + + +def fetch_file(url, destination, *, size, sha256, offline=False): + destination = Path(destination) + if destination.exists(): + with destination.open("rb") as stream: + digest = hashlib.file_digest(stream, "sha256").hexdigest() + if destination.stat().st_size != size or digest != sha256: + raise ValueError(f"Cached artifact integrity mismatch: {destination}") + return destination + if offline: + raise FileNotFoundError(f"Artifact is not cached: {destination}. Disable offline mode to download it first.") + if not url.startswith("https://"): + raise ValueError("Artifact URL must use HTTPS") + destination.parent.mkdir(parents=True, exist_ok=True) + partial = None + try: + with tempfile.NamedTemporaryFile(dir=destination.parent, prefix=".download-", delete=False) as stream: + partial = Path(stream.name) + digest = hashlib.sha256() + total = 0 + with urlopen(url, timeout=60) as response: + while chunk := response.read(1024 * 1024): + total += len(chunk) + if total > size: + raise ValueError(f"Downloaded artifact exceeds expected size: {url}") + stream.write(chunk) + digest.update(chunk) + if total != size or digest.hexdigest() != sha256: + raise ValueError(f"Downloaded artifact integrity mismatch: {url}") + partial.replace(destination) + finally: + if partial is not None: + partial.unlink(missing_ok=True) + return destination + + +def default_bundle(): + """Install small packaged metadata; model files are fetched lazily by Bundle.""" + descriptor = json.loads(Path(__file__).with_name("default_bundle.json").read_text()) + revision = hashlib.sha256(json.dumps(descriptor, sort_keys=True).encode()).hexdigest()[:16] + cache = Path(os.environ.get("MAMBO_CACHE", Path(os.environ.get("XDG_CACHE_HOME", Path.home() / ".cache")) / "mambo")) + root = cache.expanduser() / revision + offline = os.environ.get("MAMBO_OFFLINE") == "1" + for relative, content in descriptor["metadata"].items(): + path = (root / relative).resolve() + if not path.is_relative_to(root.resolve()): + raise ValueError("Packaged metadata path escapes cache") + data = content.encode() + if path.exists(): + if path.read_bytes() != data: + raise ValueError(f"Cached metadata differs from this release: {path}") + continue + if offline: + raise FileNotFoundError("Default bundle is not cached; download once before setting MAMBO_OFFLINE=1") + path.parent.mkdir(parents=True, exist_ok=True) + with tempfile.NamedTemporaryFile(dir=path.parent, delete=False) as stream: + temp = Path(stream.name) + stream.write(data) + temp.replace(path) + return root diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index cc70c8d..52c82a1 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -13,6 +13,7 @@ from .augmentation import infer_augmented, resolve_tta from .bundle import Bundle +from .download import default_bundle from .preprocessing import RECIPE, image_items, preprocess from .results import Prediction, hierarchy @@ -63,9 +64,8 @@ def __init__( if weights is not None and backend != "torch": raise ValueError("weights override is only supported by the PyTorch backend") bundle = bundle or os.environ.get("MAMBO_BUNDLE") - if not bundle: - raise ValueError("Pass bundle='/path/to/bundle' or set MAMBO_BUNDLE. Inference does not download files.") - self.bundle = Bundle(bundle) + automatic = not bundle + self.bundle = Bundle(default_bundle() if automatic else bundle, download=automatic) if self.bundle.preprocessing != RECIPE: raise ValueError("Unsupported preprocessing recipe; use the matching deployment runtime") self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 913aa73..24d4db6 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -118,7 +118,7 @@ def benchmark(args): }, } try: - _, records = load_records(args.manifest, args.root, max(32, max(args.batches)), args.seed) + _, records = load_records(args.manifest, args.root, max(args.bank_size, max(args.batches)), args.seed) report["samples"] = records t = time.perf_counter() predictor = Predictor( @@ -201,9 +201,10 @@ def main(): parser.add_argument("--presets", nargs="+", default=["full", "europe_v3"]) parser.add_argument("--warmup", type=int, default=2) parser.add_argument("--repeats", type=int, default=7) + parser.add_argument("--bank-size", type=int, default=32) parser.add_argument("--seed", type=int, default=20260923) args = parser.parse_args() - if min(args.batches) < 1 or args.warmup < 1 or args.repeats < 3: + if args.bank_size < 1 or min(args.batches) < 1 or args.warmup < 1 or args.repeats < 3: parser.error("Positive batches/warmup and at least three repeats required") benchmark(args) diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index 5e303b1..4d8e629 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -123,30 +123,11 @@ locally against the pinned Parquet (`set == "0"`), archived staging map and arch prediction CSV. Staged numeric filenames are never used as original identities. This does not verify image availability or content on UCloud. -Clone this release revision onto the manually allocated UCloud SSH node, or copy -the checkout including `dev/releases/mambo_v3`, `deployment`, and the bundle. -Prepare the runtime and pinned metric environments there. The scripts execute on -that node; they do not submit or allocate a UCloud job automatically. - -```sh -python -m dev.releases.mambo_v3.prepare_ucloud \ - --metadata /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ - --staging /path/to/production/evaluation/in-domain/provenance/staging.json \ - --reference /path/to/production/evaluation/in-domain/predictions/mini_metric.csv \ - --root /work/global_lepi --output /work/global-lepi-test-manifest.json - -python -m dev.releases.mambo_v3.run_local qualification \ - --python /path/to/runtime-env/bin/python \ - --bundle /path/to/bundle --manifest /work/global-lepi-test-manifest.json \ - --root /work/global_lepi --output /work/mambo-indomain-qualification -``` - -Confirm the actual metadata mount path first. Preparation requires the pinned -metadata hash, exact original membership/taxonomy and readable images, then hashes -all test images. Inspect the bounded results before running `full` with the same -arguments and a fresh output directory. CPU qualification can be slow on a shared -node; resource selection is explicit. Keep UCloud throughput separate from laptop -benchmarks. No in-domain inference has been run locally. +Use the [UCloud release workflow](ucloud-release.md) for isolated `uv` setup, +automatic artifact downloads, five-pipeline qualification, full collection and +CPU/GPU benchmarks. Only the original Parquet location is required as dataset +input when images retain their original layout. No in-domain inference has been +run locally. ## Publication preparation diff --git a/dev/releases/mambo_v3/legacy_evaluation.py b/dev/releases/mambo_v3/legacy_evaluation.py index b21fc77..bfdddc1 100644 --- a/dev/releases/mambo_v3/legacy_evaluation.py +++ b/dev/releases/mambo_v3/legacy_evaluation.py @@ -111,7 +111,9 @@ def run(args): for name, mask in masks.items() } del states - manifest, records = load_records(args.manifest, args.root, 32 if args.phase == "benchmark" else args.count) + manifest, records = load_records( + args.manifest, args.root, max(args.bank_size, max(args.batches or [32])) if args.phase == "benchmark" else args.count + ) write_json(args.output / "samples.json", records) report.update( samples=len(records), @@ -149,8 +151,8 @@ def features(paths, pool): if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): raise ValueError("Benchmark images changed") report["cells"] = [] - for size in [1, 8] if args.device == "cpu" else [1, 8, 32]: - for preset in PRESETS: + for size in args.batches or ([1, 8] if args.device == "cpu" else [1, 8, 32]): + for preset in args.presets: predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) def call(): @@ -169,7 +171,7 @@ def call(): with ExitStack() as stack: pool = stack.enter_context(ThreadPoolExecutor(max_workers=4)) writers = {} - for preset in PRESETS: + for preset in args.presets: directory = args.output / preset directory.mkdir() writer = csv.writer(stack.enter_context((directory / "mini_metric.csv").open("w", newline=""))) @@ -182,7 +184,7 @@ def call(): raise ValueError("Evaluation image changed") encoded = features(paths, pool) with torch.inference_mode(), torch.autocast(device_type=predictor.device.type, enabled=predictor.device.type == "cuda"): - for preset in PRESETS: + for preset in args.presets: predictor._apply_class_mask(-1 if preset == "full" else masks[preset]) prediction = classifier.predict(encoded) if args.phase == "qualification" or offset == 0: @@ -193,7 +195,7 @@ def call(): writers[preset].writerows(canonical_rows(selected, prediction, offset)) if offset % (args.batch_size * 50) == 0: print(offset + len(selected), len(records), flush=True) - report["csv_sha256"] = {name: file_hash(args.output / name / "mini_metric.csv") for name in PRESETS} + report["csv_sha256"] = {name: file_hash(args.output / name / "mini_metric.csv") for name in args.presets} if args.device != "cpu": report["torch_peak_allocated_bytes"] = torch.cuda.max_memory_allocated() report["torch_peak_reserved_bytes"] = torch.cuda.max_memory_reserved() @@ -217,7 +219,12 @@ def main(): parser.add_argument("--batch-size", type=int, default=32) parser.add_argument("--count", type=int) parser.add_argument("--cpu-float32", action="store_true", help="Ancillary CPU run: cast original preprocessor output to float32") + parser.add_argument("--presets", nargs="+", choices=PRESETS, default=list(PRESETS)) + parser.add_argument("--batches", nargs="+", type=int) + parser.add_argument("--bank-size", type=int, default=32) args = parser.parse_args() + if min(args.batches or [1]) < 1 or args.bank_size < 1 or args.threads < 1 or args.batch_size < 1: + parser.error("Batch sizes, bank size and threads must be positive") if args.phase == "qualification" and args.count is None: args.count = 256 run(args) diff --git a/dev/releases/mambo_v3/package_download_metadata.py b/dev/releases/mambo_v3/package_download_metadata.py new file mode 100644 index 0000000..cf37a90 --- /dev/null +++ b/dev/releases/mambo_v3/package_download_metadata.py @@ -0,0 +1,31 @@ +"""Freeze a verified local bundle's small metadata for automatic ERDA bootstrap.""" + +import argparse +import hashlib +import json +from pathlib import Path + +from deployment.mambo_deploy.bundle import Bundle + + +def package(source, output): + bundle = Bundle(source) + metadata = {} + for relative in bundle.manifest["files"]: + if relative not in bundle.manifest["origins"]: + metadata[relative] = bundle.file(relative).read_text() + # Ship current integration guidance, not the README frozen in the local bundle. + readme = Path(__file__).resolve().parents[3] / "deployment/README.md" + metadata["README.md"] = readme.read_text() + data = metadata["README.md"].encode() + bundle.manifest["files"]["README.md"] = {"size": len(data), "sha256": hashlib.sha256(data).hexdigest()} + metadata["release.json"] = json.dumps(bundle.manifest, indent=2) + "\n" + output.write_text(json.dumps({"metadata": metadata}, ensure_ascii=False, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("source", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + package(args.source, args.output) diff --git a/dev/releases/mambo_v3/setup_ucloud_release.py b/dev/releases/mambo_v3/setup_ucloud_release.py new file mode 100644 index 0000000..5c394fa --- /dev/null +++ b/dev/releases/mambo_v3/setup_ucloud_release.py @@ -0,0 +1,122 @@ +"""Prepare cached public models and the original test split from one Parquet path.""" + +import argparse +import io +import json +import os +import socket +import subprocess +import sys +import tarfile +import tomllib +from pathlib import Path + +from deployment.mambo_deploy.bundle import Bundle +from deployment.mambo_deploy.download import default_bundle, fetch_file +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.audit import HERE +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.legacy_evaluation import COMMIT +from dev.releases.mambo_v3.prepare_ucloud import recover + + +def setup(args): + metadata = args.metadata.resolve() + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"]["sha256"] + if file_hash(metadata) != expected: + raise ValueError("Original metadata snapshot hash mismatch") + root = (args.root or metadata.parent).resolve() + cache = args.cache.expanduser().resolve() + cache.mkdir(parents=True, exist_ok=True) + os.environ["MAMBO_CACHE"] = str(cache / "models") + if args.offline: + os.environ["MAMBO_OFFLINE"] = "1" + bundle_path = default_bundle() + bundle = Bundle(bundle_path, download=True) + for relative in bundle.manifest["files"]: + bundle.file(relative) + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + production = inventory["production"] + suffixes = ("evaluation/in-domain/provenance/staging.json", "evaluation/in-domain/predictions/mini_metric.csv") + needed = [a for a in inventory["artifacts"] if a["path"].startswith("MAMBO/") or a["path"] in [f"{production}/{p}" for p in suffixes]] + for item in needed: + fetch_file(item["url"], cache / "archives" / item["path"], size=item["size"], sha256=item["sha256"], offline=args.offline) + source = cache / "legacy-source" / COMMIT + if not source.exists(): + source.parent.mkdir(parents=True, exist_ok=True) + archive = subprocess.check_output(["git", "archive", COMMIT, "mini_trainer"], cwd=HERE) + source.mkdir() + with tarfile.open(fileobj=io.BytesIO(archive)) as stream: + stream.extractall(source, filter="data") + from huggingface_hub import hf_hub_download + + hf_cache = cache / "huggingface/hub" + for name, digest in { + "open_clip_config.json": "1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8", + "open_clip_model.safetensors": "b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef", + }.items(): + path = hf_hub_download( + "imageomics/bioclip-2", + name, + revision="2957b322090f9cb17ae72c71981c7218a28d81e0", + cache_dir=hf_cache, + local_files_only=args.offline, + ) + if file_hash(path) != digest: + raise ValueError("Unexpected BioCLIP-2 backbone") + # The legacy API requests the default branch; point its offline ref to the verified snapshot. + refs = hf_cache / "models--imageomics--bioclip-2/refs" + refs.mkdir(parents=True, exist_ok=True) + (refs / "main").write_text("2957b322090f9cb17ae72c71981c7218a28d81e0") + staging, reference = [cache / "archives" / production / suffix for suffix in suffixes] + manifest = cache / "global-lepi-test-manifest.json" + provenance = {k: file_hash(v) for k, v in [("metadata", metadata), ("staging", staging), ("reference", reference)]} + provenance["test_set"] = "0" + if manifest.exists(): + prior = json.loads(manifest.read_text()) + if prior.get("provenance") != provenance or len(prior["records"]) != 632913: + raise ValueError("Cached manifest differs from original split provenance") + else: + records = recover(metadata, staging, reference) + if len(records) != 632913: + raise ValueError("Expected original 632,913-image test split") + for i, record in enumerate(records): + path = (root / record["path"]).resolve() + if not path.is_relative_to(root): + raise ValueError("Unsafe image path") + record["sha256"] = file_hash(path) + if i % 10000 == 0: + print(f"Hashed {i}/{len(records)} test images", flush=True) + temporary = manifest.with_suffix(".partial.json") + write_json(temporary, {"schema_version": 1, "dataset": "global-lepi-test", "provenance": provenance, "records": records}) + temporary.replace(manifest) + config = json.loads((HERE / "ucloud_release.json").read_text()) + config.update( + environment_id=socket.gethostname(), + v2_python=str(args.v2_python or sys.executable), + v3_python=sys.executable, + metrics_python=str(args.metrics_python or sys.executable), + legacy_source=str(source), + legacy_weights=str(cache / "archives/MAMBO"), + hf_cache=str(hf_cache), + bundle=str(bundle_path), + manifest=str(manifest), + root=str(root), + output=str(cache / "runs"), + ) + output = cache / "ucloud-release.json" + if output.exists() and json.loads(output.read_text()) != config: + raise ValueError("Existing run configuration differs; preserve it or choose a new cache") + write_json(output, config) + print(f"Ready: {output}", flush=True) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--metadata", type=Path, required=True) + parser.add_argument("--root", type=Path, help="Defaults to the Parquet parent; expects images/species/filename below it") + parser.add_argument("--cache", type=Path, default=Path.home() / ".cache/mambo-ucloud") + parser.add_argument("--v2-python", type=Path) + parser.add_argument("--metrics-python", type=Path) + parser.add_argument("--offline", action="store_true") + setup(parser.parse_args()) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md new file mode 100644 index 0000000..2cdb9e5 --- /dev/null +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -0,0 +1,114 @@ +# UCloud release comparison + +Run this workflow **inside a manually allocated UCloud SSH node** with the original +global-lepi dataset mounted. Clone this release branch with its Git history there; +the scripts live in `dev/releases/mambo_v3` and are not included in the deployment +wheel. No allocation or remote submission is performed by these commands. + +## Setup with uv + +From the checkout root: + +```sh +uv sync --project dev/releases/mambo_v3/ucloud_env --locked +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.setup_ucloud_release \ + --metadata /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet +``` + +The Parquet path is the only required dataset argument. Images are expected at +`images//` below its parent; use `--root` if mounted elsewhere. +Preparation verifies the metadata snapshot, recovers original `set == "0"` +membership and species/genus/family labels, and hashes all 632,913 test images. +It does not resplit the data. This first preparation pass reads the entire test set. + +The isolated uv project pins the metric implementation and runtime dependencies, +with an [explicit CUDA PyTorch index](https://docs.astral.sh/uv/guides/integration/pytorch/). +It creates its own environment without changing the checkout's `.venv`. The current +lock targets Python 3.13 and CUDA 13.0; qualify the node's driver/runtime before a +full run. This environment has resolved locally but has not been GPU-qualified on UCloud. + +Models, V2 heads and archived split provenance download automatically from public +ERDA storage with size/SHA-256 verification. The V2 BioCLIP backbone comes from its +pinned Hugging Face revision. Original V2 source is extracted from the pinned Git +commit, and run in a separate process with that source first on its import path. +The comparison therefore measures the released pipelines, not just their weights. + +Preparation writes `~/.cache/mambo-ucloud/ucloud-release.json`. Use `--cache` to +choose a writable volume with room for models, image manifests and prediction CSVs. +Completed downloads and manifests are reused; `--offline` requires all downloads +to be cached. A checksum mismatch fails rather than silently replacing evidence. + +## Qualify, collect, measure + +Use the generated configuration path below (change it if using `--cache`). Review +its environment label, visible GPU, threads and batch sizes **before qualification**. +A MIG slice is one visible CUDA device; the default selects device `0`. + +```sh +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/ucloud-release.json +``` + +This runs 256 identical test images through V2, V3 PyTorch, V3 ONNX, and each V3 +backend with `rotation30_pad25_3` TTA. Inspect each log/report for successful +inference, runtime versions, placement and memory use. This is a compatibility +qualification, not a reliable quality estimate or a requirement for numerical +identity between backends. Confirm the assigned GPU/MIG profile (`nvidia-smi -L`), +CPU allocation and storage mount alongside the generated environment label. + +After qualification: + +```sh +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/ucloud-release.json +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs/full +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/ucloud-release.json +uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ + -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs \ + --output ~/.cache/mambo-ucloud/summary +``` + +`--dry-run` prints the planned commands without accessing images. `--resume` +verifies and reuses completed jobs; preserve/move partial job directories before +retrying. Changed code, inputs or configuration require a new output campaign and +qualification. A process starting is not completion: check `plan.json` status. + +## Evidence scope + +Quality uses the **global vocabulary** and every original test image. All predictive +metrics come from pinned `mini_metrics`: macro accuracy/precision/recall/F1, micro +accuracy, Theil U and coverage, at species/genus/family, for all truth and known +truth separately. Predictions are unthresholded. Do not optimize thresholds on this +test split; any later calibrated comparison must freeze thresholds from separate +data and report acceptance coverage. Regional quality can be added explicitly, +but is ancillary because geographic restriction excludes part of this global set. + +Speed uses CPU and GPU, global and northern-Europe lists, three isolated process +trials, two warmups and seven observations per cell. CPU batches default to 1/8; +GPU batches to 1/8/32. Each uses the same deterministic image bank (at least 32 +images, expanded to the largest requested batch). Timings include image loading, +preparation, transfer and completed CPU predictions; they describe warm repeated +inference, not cold storage throughput. Do not run competing collections during +benchmarking. V2 CPU includes the documented float32 input adapter required for +that pipeline; there is no qualified V2 ONNX artifact in this comparison. + +The summary exports labelled quality/speed CSVs plus the runtime evidence, raw +timings and process peak host memory. Retain the job reports for GPU memory and +placement details. Keep **UCloud and laptop results as separate environment panels** +in future charts, consistently using images/second. Default UCloud timings use +in-domain images; differences from Flemming laptop timings cannot be attributed +solely to hardware. For a like-for-like hardware comparison, set `timing_manifest` +and `timing_root` to the same Flemming inputs before qualification. + +No UCloud inference results are claimed yet. Preserve current laptop figures; +add UCloud quality and speed figures only after the completed evidence passes the +summary checks. Cross-OS support and clean CUDA installation remain separate +qualification tasks. diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml new file mode 100644 index 0000000..6fe3d7a --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -0,0 +1,31 @@ +[project] +name = "mambo-ucloud-release" +version = "0.1.0" +requires-python = ">=3.13,<3.14" +dependencies = [ + "mini_trainer[recommended,bioclip,timm]", + "mambo-deploy", + "mini_metrics", + "torch==2.12.0", + "torchvision==0.27.0", + "onnxruntime-gpu==1.30.0", + "open_clip_torch==3.3.0", + "timm==1.0.25", + "huggingface_hub==0.36.2", + "safetensors==0.6.2", +] + +[tool.uv] +package = false + +[tool.uv.sources] +mini_trainer = { path = "../../../.." } +mambo-deploy = { path = "../../../../deployment" } +mini_metrics = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git", rev = "70cc69adc05362863439277048e06386c1f885e1" } +torch = { index = "pytorch-cu130" } +torchvision = { index = "pytorch-cu130" } + +[[tool.uv.index]] +name = "pytorch-cu130" +url = "https://download.pytorch.org/whl/cu130" +explicit = true diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock new file mode 100644 index 0000000..5f330fa --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -0,0 +1,1533 @@ +version = 1 +revision = 3 +requires-python = "==3.13.*" +resolution-markers = [ + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", +] + +[[package]] +name = "absl-py" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/4f/d79676ab82f2e42fc3611618139f13a9c4c31d0cff4b486982047679a802/absl_py-2.5.0.tar.gz", hash = "sha256:0c996f25c0490700fadabe6351630f6111534fa0ae252cc6d2014ea3b141135f", size = 118119, upload-time = "2026-07-03T10:57:48.157Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/0a/a10b45aab35b175aded078a462dc8d0c698f5b13946e7cb0869097b78bb6/absl_py-2.5.0-py3-none-any.whl", hash = "sha256:0f17b89f2a4eaaedc4f28c622998aa690564b3012a396a4ffad0821007fe03ba", size = 137410, upload-time = "2026-07-03T10:57:46.735Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.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" } +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" }, +] + +[[package]] +name = "biopython" +version = "1.88" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/a0/cf657d076ec56a5f9e5c29a560c1f97b8eb6ae6608dc8bc95b4e2437f129/biopython-1.88.tar.gz", hash = "sha256:9aaa31c0bda4d059f7b2ee00bfdb5cbb73ade3057aa4b737a7cc0187091d071a", size = 19858058, upload-time = "2026-08-06T12:13:36.003Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/9a/333f14a9228f5dc702d8a7570482e096b8503d3b6679054772b79cf05358/biopython-1.88-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:465caece761b9ec22e0dc63bb5969517c901587a27104c4f1cee69f414b4df2d", size = 2681139, upload-time = "2026-08-06T12:30:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/c3d6060ee8b08af4118817fe5ac455f1faf776c26e9c08f2d0232c687a72/biopython-1.88-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df709eabdce2fc2cc1059fcefbbea245d2b2c41fc2026eda6194b810474e68d6", size = 3220838, upload-time = "2026-08-06T12:59:31.92Z" }, + { url = "https://files.pythonhosted.org/packages/30/9b/1075a762fc3595d4b8ca688246be9f9ca68a29d0c05c336197670fbc7eff/biopython-1.88-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:410eaa083fcc308b44c7051e597ae2f39e4068754bdd605cc32aed025aa132d0", size = 3246944, upload-time = "2026-08-06T12:59:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/e4/50/f3089c4f36d9d877475bfd2cb0d066b0a6be638aae7238be136d890a433b/biopython-1.88-cp313-cp313-win32.whl", hash = "sha256:e3ac69b8abddac75dce301cbe77fc2650cbe0bd62ab2d2662d0f6f378b8c8018", size = 2709206, upload-time = "2026-08-06T12:32:29.601Z" }, + { url = "https://files.pythonhosted.org/packages/db/80/3890552b57771e87ba8f4d7936ad6a9074252fcc615d1a8599c977a4bed4/biopython-1.88-cp313-cp313-win_amd64.whl", hash = "sha256:f0aaf49f0c8919fb7a02cdc3db9e7f89165f53417a18d80508e0f167121cb7c1", size = 2744168, upload-time = "2026-08-06T12:32:25.365Z" }, +] + +[[package]] +name = "certifi" +version = "2026.7.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/3f/143b048436775b0f76ac3eec145c019e8173ccc2885c8f20319b996d5e83/charset_normalizer-3.5.1.tar.gz", hash = "sha256:6117b84ea48435e5356dc737f5121485c30920ba43375fa7b434fd753df0eac3", size = 171764, upload-time = "2026-08-15T08:20:44.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/61/2cb6ad133dbbb449fa2d37ccae973232f4827e799af258d15e589a3d1e9e/charset_normalizer-3.5.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:4f298bdadb8f0b9e5672877f647d1be9373ef5320c9e2f049795e26cad28b6a9", size = 211584, upload-time = "2026-08-15T08:17:33.597Z" }, + { url = "https://files.pythonhosted.org/packages/18/57/a305c968be1ca13f3dd1b32f445877e97addf55d80b65c7cb35fac82b777/charset_normalizer-3.5.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:88ca277405c2d3b71c4e1c2ee0e7966e807bcba86a69d11e19ba199d18ae4491", size = 223359, upload-time = "2026-08-15T08:17:35.022Z" }, + { url = "https://files.pythonhosted.org/packages/09/0a/d3646670292ce8d8f8cc11ac067d44885e697a5591f57a9221128da5e7b3/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:9362dd90aa7dab48c0054a21187791ccf05473f7dba5d92b8033ae62164675e7", size = 194464, upload-time = "2026-08-15T08:17:36.452Z" }, + { url = "https://files.pythonhosted.org/packages/de/93/d51ec556e01042fed6f993ea859311bc7917b466684182fbbceb6ca24762/charset_normalizer-3.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:977cdbd483a9cff38179bea4fd754289a6f2195c7abd414aba85410b3e66cc5e", size = 197676, upload-time = "2026-08-15T08:17:37.819Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a0/562247944386f7d4ef94467e84876600cc1e0f1b93239aaa9213d2bc3cbd/charset_normalizer-3.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d", size = 340473, upload-time = "2026-08-15T08:17:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/31/e7/1d994be1b93d41e9502b8b0460eaa88a1dd8df335df415db87d6c3e91ab2/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a", size = 240156, upload-time = "2026-08-15T08:17:40.66Z" }, + { url = "https://files.pythonhosted.org/packages/09/53/27923ce5cc6cbccb832037b27dca98882d9c53e9b69e866bbbef4aae7fc8/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d59b75732e9b6f27388e10c14b0259cc5f2e48c78627d185e6a177b58ad3cffe", size = 228246, upload-time = "2026-08-15T08:17:42.003Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5a97e84d63af1d55c07439cb80e56d99a8efb4295700eb4e18c0d1615d2c/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0d929fc574b4d6fd9e7c0f5c2ede8716a41911923aa7fa5fce38e0818aa4a1ac", size = 263660, upload-time = "2026-08-15T08:17:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c2/071575791dcc88316c0a9a65ce38897a82e4cfe4a325f0f7fe1b1ac47bcf/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:394fea06235c8543390050ed5f529187074b029fb027213f6c46ac11ab5d950e", size = 260354, upload-time = "2026-08-15T08:17:45.094Z" }, + { url = "https://files.pythonhosted.org/packages/fb/af/63240b0c0248c075c2535a1f1bd992821d8251b9f173abc13329661d09e4/charset_normalizer-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3", size = 250638, upload-time = "2026-08-15T08:17:46.496Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/70dfad64f15be09c15ccfee81330a7e515895dbe296dd23114e9a231268a/charset_normalizer-3.5.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa48b1b63d639f9483e0633e092f5851e2348c352f1f9bb6c8182f87884ef876", size = 244583, upload-time = "2026-08-15T08:17:47.963Z" }, + { url = "https://files.pythonhosted.org/packages/c0/24/ef36367d38b9ddd4bccbf72888c342e8de1f5ae506fa0b2dcf970e2732a1/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c71fb0d56c920c269cd3e2e3fe7c610e3f1fdb21a6ce60efa6430ff63676cea6", size = 242038, upload-time = "2026-08-15T08:17:49.481Z" }, + { url = "https://files.pythonhosted.org/packages/db/ab/55e683ba0fff2e43adafc10daa3001eac90fdaa419a97227d5a7067eedde/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:485a0d363cafefcd2538a73c7c838daa2035f09b2c9f9b5e3133f80c6aeb84c2", size = 233677, upload-time = "2026-08-15T08:17:50.845Z" }, + { url = "https://files.pythonhosted.org/packages/bd/67/0f40eaf8d1b6e7cf15e82382a2965efaca787fc1c2794b7021d37aaf5036/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0ea61a470e070686aa30892fed79e297d2c8d0ab46b8bcdf027d38c51da591", size = 264491, upload-time = "2026-08-15T08:17:52.61Z" }, + { url = "https://files.pythonhosted.org/packages/5c/64/12b4c2a11ee8df4fcc518c78b0d93e3a92bd3d5253d1617ce74ff0e8c7ef/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:90b7481fb62fbe172c558bc6fd1c4c98d82004a54a7551f20e11ac9bf0b8708c", size = 245196, upload-time = "2026-08-15T08:17:54.023Z" }, + { url = "https://files.pythonhosted.org/packages/37/2e/651d910af6d0fba325eee1cda37ec5443462ed25360e666c144166eb6091/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:35fe081843b35aad20ffeccec3eeffbe637b15d14f3fb22cc1b59cd8ec17e93c", size = 261660, upload-time = "2026-08-15T08:17:55.491Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/b09e05e6db7f64338e0dc067c79577b1138da86c1e38369096851d96be88/charset_normalizer-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f", size = 252618, upload-time = "2026-08-15T08:17:57.025Z" }, + { url = "https://files.pythonhosted.org/packages/76/4e/362d4f9fdcdf5556fb2aa3ce7d4a58ebce03ed1ff03aa1d9aca8d02f13f3/charset_normalizer-3.5.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:9d9a0dc7cbe9bec24c3f767c9122c41fe5a1bc43f47cd099d00d393e09769de4", size = 140362, upload-time = "2026-08-15T08:17:58.425Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d4/703be739b26acce318bd29eb3b25b7209e1b1f527f9eae3d1f1f01fdde2b/charset_normalizer-3.5.1-cp313-cp313-win32.whl", hash = "sha256:d63600d620ad0064c3a748b950ac5ea38a80190e5498532efefa4b7b3f1da1f3", size = 177755, upload-time = "2026-08-15T08:18:00.037Z" }, + { url = "https://files.pythonhosted.org/packages/8a/33/56d97ade41c8db611e727168c52ae46c9224c362ec28d4b65d7e9869e8da/charset_normalizer-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6", size = 199295, upload-time = "2026-08-15T08:18:01.506Z" }, + { url = "https://files.pythonhosted.org/packages/5b/75/5b20dd1e6573a01a08158fe104104fa2c8abf941745596954185726cd46c/charset_normalizer-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0", size = 179856, upload-time = "2026-08-15T08:18:02.929Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/fb4e82231aba271ffd775a1b4993b0defc4e3059f286ae41d9433409fe85/charset_normalizer-3.5.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2", size = 331467, upload-time = "2026-08-15T08:19:50.959Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2f/fe3f187327aac18e2d54e9d2b08e15d27bf9b642d9e51c219f130fc34d1a/charset_normalizer-3.5.1-cp37-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99", size = 253057, upload-time = "2026-08-15T08:19:52.654Z" }, + { url = "https://files.pythonhosted.org/packages/d7/c7/9e48cee5c161fe24da823b61bf381921d77cb994a0a4de148e95018c1984/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2", size = 240930, upload-time = "2026-08-15T08:19:54.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/716601f3cc69be7b198951150c75ead1ece33c3c8036ff6ffa46029659a0/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:343fb4f2821043bd87095f7b08a1a181febc8e36ac64212143bbfd0a0e1bc235", size = 230822, upload-time = "2026-08-15T08:19:55.807Z" }, + { url = "https://files.pythonhosted.org/packages/d3/05/71bfc5caa0abcc45aea1f6a4d50ac68e59605ddc7666fe8494f4cd229665/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae4a097991662cd4fff0ddc74e0fe7874f82e00042fa0ea00855645ed0c79598", size = 260037, upload-time = "2026-08-15T08:19:57.312Z" }, + { url = "https://files.pythonhosted.org/packages/c3/92/de7e32ed05341e7a9c4c877c318418197b7f2d66a3b68d561bf2ac57ca3e/charset_normalizer-3.5.1-cp37-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b599739b93b2cbeded49645ae3c8d1405c29ddfbceac1545c87a3f9580a9e96", size = 255097, upload-time = "2026-08-15T08:19:59.056Z" }, + { url = "https://files.pythonhosted.org/packages/f5/7b/ade0a122600319dfa0b1000ab0f9731c94a817904cf3c5de408c73a4ede7/charset_normalizer-3.5.1-cp37-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b39b69b347e5e47a3b5b8cfc005c68c1ba347474e3960236c4944a8ecd174962", size = 250166, upload-time = "2026-08-15T08:20:00.612Z" }, + { url = "https://files.pythonhosted.org/packages/75/9c/019fbb9f4834491a160951349b1a3714439376f66e5f7cf18b4f18f0c7aa/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a2028475ba855475b8b4d3cfeb4994269c967aea8b9892dfba907f4263a863a3", size = 241821, upload-time = "2026-08-15T08:20:02.321Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b8/11d4840bfc99330cc7fbcc2681ee5a044553a6e77655508d8f9b2bff7b34/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:36047af20e17097c3bb9476c2b7655f2f7aa51322c0ba58c07695bedf755a950", size = 232529, upload-time = "2026-08-15T08:20:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/18/96/2b3a21492d9f65171ac75d872f5018260013d00bfa0ff70ec9f179148cbd/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4c4fb141a727957c93edfe5c32a26ceb6b5f6461d67146e2d39f51e16170bea8", size = 260348, upload-time = "2026-08-15T08:20:05.877Z" }, + { url = "https://files.pythonhosted.org/packages/d6/aa/a69a2028e8bd052476c245460ab19d7de595de084dd968f2d75cd50c3e25/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:2f293479cce755c75f1697e87c409b7ae4c555c7dfecb6e988ad13abba943031", size = 247234, upload-time = "2026-08-15T08:20:07.487Z" }, + { url = "https://files.pythonhosted.org/packages/35/8a/3d130aeabcaf3d2466af76b7b141c08d9e89c9016ab4b7cdd0f7dc2d1c62/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_s390x.whl", hash = "sha256:3588e376b3ea2eea84976f67273d679f229e24c66dce7b82ae45aef04ff6e072", size = 256917, upload-time = "2026-08-15T08:20:09.142Z" }, + { url = "https://files.pythonhosted.org/packages/80/c2/a7379b840292d0c1ab9fbd17d1f3967aa81794dc95bc74be8999d7fedcf7/charset_normalizer-3.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e199fb99720074809a7720f1c0b4d919eea8b87e88713e0f8f602f7bef543d9d", size = 254846, upload-time = "2026-08-15T08:20:10.727Z" }, + { url = "https://files.pythonhosted.org/packages/01/65/d43b714731bb2f40d4053dfa00ecfc1c5a301f8e3316c5db3a09af59fe94/charset_normalizer-3.5.1-cp37-abi3-win32.whl", hash = "sha256:dd732602a7009217f658d5863d12d79d373a4de0eebc111094bcdd3bb8e0a6cc", size = 174216, upload-time = "2026-08-15T08:20:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/35/4f/b911ed898b26a09789eba9c9200c999aff6c61b4bafaf4838e56d1a1e1a3/charset_normalizer-3.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959", size = 199764, upload-time = "2026-08-15T08:20:13.908Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a7/920baf467bfd9bf689f3b318340f37aee4572a71f162bd8db51da55ba4fa/charset_normalizer-3.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:87e4f41d375c0b9be2fb5251aee4b8a689169e134535aed81bf085c3b647451e", size = 287318, upload-time = "2026-08-15T08:20:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/cc/61/d01fc49b8dea277640b55a9e15960dbca9fdc8c9fde18e572d39c59f4019/charset_normalizer-3.5.1-py3-none-any.whl", hash = "sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6", size = 68658, upload-time = "2026-08-15T08:20:43.306Z" }, +] + +[[package]] +name = "click" +version = "8.5.0" +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" } +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" }, +] + +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "contourpy" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/5a/a55177dd22553a277388e8a1b3220e92de91bacb28356cdc73caa240121d/contourpy-1.4.0.tar.gz", hash = "sha256:20156f5a1ac4f8ce02656e39a61e82164a3d359796dc8026f75b062783d500e1", size = 13323726, upload-time = "2026-09-11T19:05:05.808Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/8b/62a6eacea08ea0b6ab0159a7783df7ed421ff9c1ff58fef7c31f58fa5e52/contourpy-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e21d1d4a9db5b3a793649c7ab0ddb4697f2818929eec871a7b9c45fce7b2a1ea", size = 297330, upload-time = "2026-09-11T19:03:11.809Z" }, + { url = "https://files.pythonhosted.org/packages/3f/2f/103cdc5b7077cd569989d3ddb99ee3d4e96ee31bde8df2a6e426b2dc6195/contourpy-1.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:196759a3e4db60e1546167e361090ebb6d199aa3aafc9e34ea17a5ac3b23e814", size = 285037, upload-time = "2026-09-11T19:03:13.781Z" }, + { url = "https://files.pythonhosted.org/packages/bf/25/97001d1fdf940e6f5adfc592d4f5899fff95daf7dceead3988fe09987d2d/contourpy-1.4.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c0e07c691f3b3321913ed9b8161c50ea5f77fadd006f52f5e755359b0dcbfc5", size = 356675, upload-time = "2026-09-11T19:03:15.374Z" }, + { url = "https://files.pythonhosted.org/packages/a6/5e/9a7241a89e2f74402aefa2569e1349ad2750ff77823c04c788eaaedb7fdd/contourpy-1.4.0-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f861af508fca2384eef392bc1d8377cfa349b2b854cb11b45d89c75780e2561", size = 406990, upload-time = "2026-09-11T19:03:17.44Z" }, + { url = "https://files.pythonhosted.org/packages/36/81/3a4fbbf6a806eada5453a6d16f6c7d96b9f4b3e57a3127368fb545986b8a/contourpy-1.4.0-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a03b32c2e7eda8b17757c022162c13c86f5c3d6f937dddf9ba3c3ff7b513953b", size = 407271, upload-time = "2026-09-11T19:03:19.523Z" }, + { url = "https://files.pythonhosted.org/packages/68/77/8f93ecbde1a4d11dfd460cd19a0c159f5487352e751fa87f5d78cc9db08e/contourpy-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f1219a8898523cba821085f2da8a1b962cc696325763f09d7f93538ba43b2d70", size = 384707, upload-time = "2026-09-11T19:03:21.208Z" }, + { url = "https://files.pythonhosted.org/packages/05/07/e5cdf94d68961ee464de6b4fedd3d2f666584f59ccd124bb1290597122ab/contourpy-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:20da2f86bfaed60dbba729fe738c8241b1dd22b6cf7e8cbbf30df290bd04ba28", size = 1356741, upload-time = "2026-09-11T19:03:23.621Z" }, + { url = "https://files.pythonhosted.org/packages/fd/8a/2301d07accb257ac08daeb631875fada06fedd019c20ff7b00ee07e9d211/contourpy-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ced1670fafee703b8277ab1645072a226e74f167166eae146fb743916119b67", size = 1426793, upload-time = "2026-09-11T19:03:25.955Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5d/a62648f06259d15c139b14eb8cf3c58fe53cb970a55f2bb77d1070e80a41/contourpy-1.4.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:abd0f7e51ecc52bf8c95713bd80b1c17c516a71fa391c54475308a4377903c2b", size = 117961, upload-time = "2026-09-11T19:03:27.713Z" }, + { url = "https://files.pythonhosted.org/packages/71/31/c5b7771ba6982f319ec90c0cf5c425b36891adfeee2d9f667f90b2d0c166/contourpy-1.4.0-cp313-cp313-win32.whl", hash = "sha256:510f7d93d94cf6ebf4e2cd0640bea16ab8affac7547230175b6745b596ce0599", size = 347438, upload-time = "2026-09-11T19:03:29.829Z" }, + { url = "https://files.pythonhosted.org/packages/68/c1/a59df0754bf83a6f3e153cc19d550a5b01f607e389b1c4d57f436f9139e0/contourpy-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:6507a016976a75a15aee47809a34605de6244ccc056e6164bf9fb14b27eecad4", size = 234084, upload-time = "2026-09-11T19:03:31.657Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/97224f5decb1efa5a610f912195deb45321f73ec9b9dac485cd6fe2d5a6a/contourpy-1.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:423bd5f4b3f11d54a8c597234e513382e3454bb106b8ec7ae32ba4ed63f8d99b", size = 559559, upload-time = "2026-09-11T19:03:33.528Z" }, +] + +[[package]] +name = "cuda-bindings" +version = "13.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/a9/c83eb5aa055a4b0c3776d83f6f88b9e778a6fe0415210977c889c6a0bb8a/cuda_bindings-13.4.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7c6c9f46fca7f3fc61959ef9a2398ac656172145b43f408e0a6492360cf1c0c", size = 6316533, upload-time = "2026-09-23T02:22:09.694Z" }, + { url = "https://files.pythonhosted.org/packages/8a/24/9c01edfd2210737ee9471b47db857a079e5a23f2677e5d9778c0ff23d099/cuda_bindings-13.4.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fd7d8459b364aedc11f3e59703453ced823135f78a9111ca70feef8d56d4d21", size = 6929124, upload-time = "2026-09-23T02:22:11.765Z" }, +] + +[[package]] +name = "cuda-pathfinder" +version = "1.8.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/59/239c7259e669c46ddbcac0aa60e3a0ef00bfeaaa687f905b24dd6a7a10fe/cuda_pathfinder-1.8.2-py3-none-any.whl", hash = "sha256:4e65059febdb4d19d5cbc4798677e19db2b582f2f702f457b609e571690d357e", size = 62551, upload-time = "2026-09-17T22:19:09.396Z" }, +] + +[[package]] +name = "cuda-toolkit" +version = "13.0.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, +] + +[package.optional-dependencies] +cudart = [ + { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +cufft = [ + { name = "nvidia-cufft", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +cufile = [ + { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, +] +cupti = [ + { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +curand = [ + { name = "nvidia-curand", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +cusolver = [ + { name = "nvidia-cusolver", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +cusparse = [ + { name = "nvidia-cusparse", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +nvjitlink = [ + { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +nvrtc = [ + { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] +nvtx = [ + { name = "nvidia-nvtx", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, +] + +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + +[[package]] +name = "filelock" +version = "4.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/b8/9ba8f569df649beb7058db5eb392a5f779bdbc3b82cf3942f0be439fb99e/filelock-4.0.3.tar.gz", hash = "sha256:87296d60478e14204fd9406e79831400fef76693bae2895deec236c98e87a8aa", size = 244309, upload-time = "2026-09-23T23:40:22.569Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/6d/db8b86e168fef0cf904737e275bccb683558088ef971e92d3b41ce980699/filelock-4.0.3-py3-none-any.whl", hash = "sha256:30cd166e2aee2c7534ce2c33c6367c4cd051b8368e20e2c4eb0c34f699bacfab", size = 108444, upload-time = "2026-09-23T23:40:20.819Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "fonttools" +version = "4.66.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/24/86f9930b930b97fc82266083320f3c34643ef67261c32651e893db525aca/fonttools-4.66.0.tar.gz", hash = "sha256:ef0610dfe7bb5bf574d9bdad6f597403ebc9807d124ac6f148d7604b2609be98", size = 3692007, upload-time = "2026-09-23T17:59:14.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c8/1cf0a4f54c8cf351a4d9f8fcad5201dc0c5fb8676efdb1ba7cc3136ca523/fonttools-4.66.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c144e68572af1dfcb05fe065827d0920d4118b265504928e1d2262e3701a25a1", size = 3094615, upload-time = "2026-09-23T17:57:27.942Z" }, + { url = "https://files.pythonhosted.org/packages/c5/ed/89baf1795841eaad6fcf0ee6f319c236f4379dd98653b4bff294b83d4172/fonttools-4.66.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ada87643b20a8fa5763e6dd4fa0f5e2901cbdbe0833deb6d5c5a9c3186782b94", size = 2586645, upload-time = "2026-09-23T17:57:30.248Z" }, + { url = "https://files.pythonhosted.org/packages/56/f9/982609322f92532bdd769a225c9b3e2bbac0a077c37f7780710db9a8e018/fonttools-4.66.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700c448f190cc7bbd9f059bd96131f4770e90938c9692550b142153bea73b14c", size = 5389194, upload-time = "2026-09-23T17:57:33.07Z" }, + { url = "https://files.pythonhosted.org/packages/7d/22/12177031dd8be493d5afda574323da19f6ea5488c85202f3a5708c94757c/fonttools-4.66.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c519433e8632284dbe64ee4c81b609a17e205bc1afff285553723964880d1c89", size = 5371422, upload-time = "2026-09-23T17:57:35.915Z" }, + { url = "https://files.pythonhosted.org/packages/19/e1/e8ed0950eb846f4a404ff84aea89e4c93393c2475cdfdf1c03a1b3f4e2ef/fonttools-4.66.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8739d77810aeb6d2ecd55cc2e4864d98a00c317fb6131a6d22ca58b3f50cf22a", size = 5332183, upload-time = "2026-09-23T17:57:39.041Z" }, + { url = "https://files.pythonhosted.org/packages/3e/fb/c0310cf9838859d74130530ef351a903735c6ecf47418d7d0dc4cf459a9b/fonttools-4.66.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cffa168522a0e057d3a5628c8ebd43ddf66a34613f42e116bffb85b0b32ce5a0", size = 5490019, upload-time = "2026-09-23T17:57:41.945Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7b/928f334aea18c77f6892895bb1e28388c9e2466e04bc924f93043024c780/fonttools-4.66.0-cp313-cp313-win32.whl", hash = "sha256:379b94fe10651d26caf398eb646b3ecde886a9c504d3cce5e46164d58a78e32d", size = 2432785, upload-time = "2026-09-23T17:57:44.484Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5b/576072a97256f06fe6d0112c522c118fe72390482baf52ad9bfa3b0d1db6/fonttools-4.66.0-cp313-cp313-win_amd64.whl", hash = "sha256:ee4f85d1341af630d787514eef1a0e1ad883f9d6c11a4c1465faeb9cd0bb5ced", size = 2484475, upload-time = "2026-09-23T17:57:46.625Z" }, + { url = "https://files.pythonhosted.org/packages/83/65/826290863c9df6041f2e36a5ae5d604cd8247fffc8ec7b45581fd2473e4d/fonttools-4.66.0-py3-none-any.whl", hash = "sha256:bc7b7ddc1a1f46c363354304e9a8dd93722e4a6a24f785015650898dacf40df9", size = 1201583, upload-time = "2026-09-23T17:59:12.104Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/77/cd/9be253869fc42e764de7f3dedd6969af7d44ff9c3375214a3442a6f3fc08/fsspec-2026.9.0.tar.gz", hash = "sha256:0f08147951c8cb31d844c3547d631053b127863b60be04cf06e121333ee0e2fe", size = 333545, upload-time = "2026-09-18T17:50:42.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/c0/a98505f18594f1bce828bb159cec0fcf9860562f1a2c85913409fc8f3d9e/fsspec-2026.9.0-py3-none-any.whl", hash = "sha256:8dd6e646e99ea382bd85f97a45e6b526a442d79423a7dc673f1e2756d05fcb5f", size = 221738, upload-time = "2026-09-18T17:50:41.341Z" }, +] + +[[package]] +name = "ftfy" +version = "6.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/d3/8650919bc3c7c6e90ee3fa7fd618bf373cbbe55dff043bd67353dbb20cd8/ftfy-6.3.1.tar.gz", hash = "sha256:9b3c3d90f84fb267fe64d375a07b7f8912d817cf86009ae134aa03e1819506ec", size = 308927, upload-time = "2024-10-26T00:50:35.149Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083", size = 44821, upload-time = "2024-10-26T00:50:33.425Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/c5/4353a188e2c335aee33269e8b654af228278cca8e5f0b4b5f11e5d0e9adb/googleapis_common_protos-1.75.3.tar.gz", hash = "sha256:57c435ac2c68b108999b6db075d9053e4d7a936ba57b4a3d45667b1346f1738a", size = 153905, upload-time = "2026-09-03T22:31:21.869Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/7a/7d79170c6ce6f12e109df2b3879d6b934010cf4f99aea8de8b7e5408c174/googleapis_common_protos-1.75.3-py3-none-any.whl", hash = "sha256:a018d2bf098ca9fb6faa08d5bb780e2a2c2f73c566f069761331386c9596d3f2", size = 306984, upload-time = "2026-09-03T22:30:45.133Z" }, +] + +[[package]] +name = "grpcio" +version = "1.84.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/4f/4435c0aae54657258d9cfcba78598f3d9e5fe4c82ff18d78558567b90faf/grpcio-1.84.0.tar.gz", hash = "sha256:19aaf172fc2edbefccce3f6e92c5150975dbe56c45744e9e87cf72ebdf85bfbe", size = 13493876, upload-time = "2026-09-14T06:59:33.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/51/40f99701adb01d4e5316a2aaf13838da1a24d5c879cd8c95156d7c364454/grpcio-1.84.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:209414080da8c20af94df1395b635da52dd57b5edc9e917e1deca0dc1c4bb55e", size = 6427619, upload-time = "2026-09-14T06:58:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4b/ed8e22a1237e6b2be6ef4f221d074a5b0e0dd8a0da8c944c04aea731f0eb/grpcio-1.84.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:e41c3993eee896c617dbd8a505085d28b6e84a0445ed9a1f40f95808473cf678", size = 12336549, upload-time = "2026-09-14T06:58:08.583Z" }, + { url = "https://files.pythonhosted.org/packages/d3/50/00165b05cd73f45996748ea67ce9e55d08936f2fea94a7fd8541cc2d0e54/grpcio-1.84.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fff5ef3fe1bba7d6147e5f19e01e5e122ac2c076486887ddcb8d42e663400fbe", size = 6989458, upload-time = "2026-09-14T06:58:11.884Z" }, + { url = "https://files.pythonhosted.org/packages/26/38/d0486230e684d916f97429a53041db88410e662a38f2a8d09e2d90375840/grpcio-1.84.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b8c62888c3e49debf37ad9773e3c02f77b0c1e811f8fb0962f2b6c3bbab5b97a", size = 7757778, upload-time = "2026-09-14T06:58:14.849Z" }, + { url = "https://files.pythonhosted.org/packages/da/56/548a643decb059ca244499c675ae2c13a15f523ba94592c2774bd80a13c1/grpcio-1.84.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:986e9751d416d7a6eaa2fecdac38da63153d63a4b340ba7d624889c490451500", size = 7159572, upload-time = "2026-09-14T06:58:17.87Z" }, + { url = "https://files.pythonhosted.org/packages/db/f5/42caac81a79ec680f1f7a8eaf7ca90d2f93936ce0c3a073141ba96757f77/grpcio-1.84.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5933a052946873d01a42119a05420d669bdca436aeba2d1851988ccb12b421c0", size = 7710547, upload-time = "2026-09-14T06:58:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/57/a4/828ad990b2410fee0a55cc73aa1bf98eb5b911c54847374ef4f24b9e877b/grpcio-1.84.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e094dd21f077af8194923fc263cad872eaa1802bb0156fd7e5ae18e99cd86715", size = 8761519, upload-time = "2026-09-14T06:58:23.875Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a5/1f91af098919eaf5d80d5a61126ad9fae074e5190c25a3014ce1d8d0d890/grpcio-1.84.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:08735e3d08d24ab3132cf87e2e5dea8746cabcc7d676c2b0b7362f195feef9d9", size = 8121424, upload-time = "2026-09-14T06:58:27.006Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8f/77fd4a7a913b636785479922349c4cb98d94d05d15652e556b3ca0df6663/grpcio-1.84.0-cp313-cp313-win32.whl", hash = "sha256:70bb4ce8be0c5606bec259cbd7152374470396413b7863a658a08c849e6b29ff", size = 4477974, upload-time = "2026-09-14T06:58:29.528Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9a/1fa59ddbfc8898e5518d1447e46f771f387f0ed6132ad531395338e51a5c/grpcio-1.84.0-cp313-cp313-win_amd64.whl", hash = "sha256:b61692f0069b3eee2fc8a3a1b7f6c044df9e03fede6ce69b3ca832e1c39f26c5", size = 5255326, upload-time = "2026-09-14T06:58:31.781Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/ab/522a2ab67f27971a9d48ca666d4fca85ef7d5282d142e31fd087e27b1bbe/hf_xet-1.6.0.tar.gz", hash = "sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef", size = 920527, upload-time = "2026-08-03T22:33:13.243Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/50/7afa2c9c787405864fc47a0d1bbc02c62e9101947ed43c1f43899fc7d91d/hf_xet-1.6.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d", size = 4071729, upload-time = "2026-08-03T22:33:00.721Z" }, + { url = "https://files.pythonhosted.org/packages/4b/69/55b8dcf636142ae660fec1869fcac14c4da2e8412e14d6eee1523be77e9f/hf_xet-1.6.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a", size = 3876287, upload-time = "2026-08-03T22:33:02.251Z" }, + { url = "https://files.pythonhosted.org/packages/67/4e/a28359bf1c1ecf11eba22123168c138698f7cb576ac678f5a2e16cd5da08/hf_xet-1.6.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f", size = 4464663, upload-time = "2026-08-03T22:33:03.802Z" }, + { url = "https://files.pythonhosted.org/packages/9a/69/1f0cbc2fb22ae6082d094f743d1b8945a3f36f6089cb95f42b7ee348cda7/hf_xet-1.6.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7", size = 4262538, upload-time = "2026-08-03T22:33:05.287Z" }, + { url = "https://files.pythonhosted.org/packages/d1/3a/4f4f2301ade26e404462d3336fa11f7958d914cabbabdd6e03c3c5d5658c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb", size = 4460520, upload-time = "2026-08-03T22:33:06.81Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/311725e2a905534dfee2dcb5b08414f249147f1f12252bfc2bd24caa075c/hf_xet-1.6.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c", size = 4675937, upload-time = "2026-08-03T22:33:08.616Z" }, + { url = "https://files.pythonhosted.org/packages/98/b7/8c59a66d15205024662f1d66968136f13893f96df1ddc5087e2e281fc95f/hf_xet-1.6.0-cp38-abi3-win_amd64.whl", hash = "sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b", size = 4033128, upload-time = "2026-08-03T22:33:10.171Z" }, + { url = "https://files.pythonhosted.org/packages/73/63/ca511b6f802f28cf3489b280fe77475bcca8de85e81a6299d7916b5b5555/hf_xet-1.6.0-cp38-abi3-win_arm64.whl", hash = "sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3", size = 3859359, upload-time = "2026-08-03T22:33:11.725Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, +] + +[[package]] +name = "idna" +version = "3.20" +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" } +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" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "joblib" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cloudpickle" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/1d/537ab090f302b838943a1b56497dd53059b9a9b46a074936470173a2e207/joblib-1.6.0.tar.gz", hash = "sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03", size = 327903, upload-time = "2026-08-31T09:39:04.122Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/53/84099323c2ec4be98d935f63c033ac4151ee83836ca1050ede3b3aadf155/joblib-1.6.0-py3-none-any.whl", hash = "sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba", size = 306115, upload-time = "2026-08-31T09:39:02.298Z" }, +] + +[[package]] +name = "kiwisolver" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/07/bd78e6a8fae171ea041ef5bba3ed21a003522fa088834b069b1909981f30/kiwisolver-1.5.1.tar.gz", hash = "sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a", size = 104395, upload-time = "2026-08-28T10:28:27.153Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/c1/88018321d976f53c421e379c43bc6993e70ce0c8a3ec5edc4bfe102257f6/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450", size = 62272, upload-time = "2026-08-28T10:25:51.02Z" }, + { url = "https://files.pythonhosted.org/packages/85/d2/712bc17ea4f1d216034928069d612defbc6c95a471c55a7203a39faecb1a/kiwisolver-1.5.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724", size = 64481, upload-time = "2026-08-28T10:25:52.22Z" }, + { url = "https://files.pythonhosted.org/packages/1b/e6/6c5380d676f43b6d918033962ea5e72360ca69e5a404154bc496b598ffdb/kiwisolver-1.5.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a", size = 66260, upload-time = "2026-08-28T10:25:53.387Z" }, + { url = "https://files.pythonhosted.org/packages/92/6a/7087f5822cc8bb272679641404b1966a42504dac9ee74e2b33840475a0aa/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee", size = 123876, upload-time = "2026-08-28T10:25:54.644Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4b/9f385087ca09ee5ab9c09c6832561a7d2f7c78d3e5661d511e669f70e439/kiwisolver-1.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2", size = 66487, upload-time = "2026-08-28T10:25:55.899Z" }, + { url = "https://files.pythonhosted.org/packages/47/8b/40d33ffd2f378094ed462e9a9a0907e59d4de9845e65a59561272da350d4/kiwisolver-1.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3", size = 64673, upload-time = "2026-08-28T10:25:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/ab/43/86aacc027959108b4c66eeae8b73cedb057dfa6eb3a335d05ad65197081c/kiwisolver-1.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d", size = 1477992, upload-time = "2026-08-28T10:25:58.479Z" }, + { url = "https://files.pythonhosted.org/packages/ed/40/b1d0369048c79733a32c8abb0f2718532e6630641368e33a81384246e844/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851", size = 1278821, upload-time = "2026-08-28T10:26:00.121Z" }, + { url = "https://files.pythonhosted.org/packages/61/a1/fa71c1792272ff9461432715ae60ffb7e11a4d7ac3bf68961b9cab6c60cf/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe", size = 1296805, upload-time = "2026-08-28T10:26:01.868Z" }, + { url = "https://files.pythonhosted.org/packages/a3/49/3f0bd94af8e06ecc47eb834b195a06f05d48711ceb2352c56d6835160f0e/kiwisolver-1.5.1-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89", size = 1346109, upload-time = "2026-08-28T10:26:03.59Z" }, + { url = "https://files.pythonhosted.org/packages/a4/44/3afe6ef9cf06d61220953a8963e94eca978491be1d9547cb01d82a1efa08/kiwisolver-1.5.1-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad", size = 988252, upload-time = "2026-08-28T10:26:05.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/30/a12bd7a7285a211e1747c3eec77b8c614dbfcc1dad942f7611a1a6921ae5/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a", size = 2228846, upload-time = "2026-08-28T10:26:07.312Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6b/233e2958abf0dab7b18d07e52f286e02e519d7651bfbbe97af9347564109/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8", size = 2325583, upload-time = "2026-08-28T10:26:09.093Z" }, + { url = "https://files.pythonhosted.org/packages/42/8e/7673060a27b01405b580058510adef34687069d229800239f5e44682d4d0/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f", size = 1978221, upload-time = "2026-08-28T10:26:11.127Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7b/1b882fc1a8b4a0bb8084e7d1d85004116d08c92c0705d31f2928dec607f2/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127", size = 2491819, upload-time = "2026-08-28T10:26:13.348Z" }, + { url = "https://files.pythonhosted.org/packages/39/9c/426deb49e62c5f69464b64bbeca064d3b758a7506b8913d986ef34f4619c/kiwisolver-1.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b", size = 2295520, upload-time = "2026-08-28T10:26:15.042Z" }, + { url = "https://files.pythonhosted.org/packages/f5/22/deabbb3ad6d918d74b7831b2d8ae7151b09d21c87974e5ee8a456f58c94c/kiwisolver-1.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524", size = 70758, upload-time = "2026-08-28T10:26:16.504Z" }, + { url = "https://files.pythonhosted.org/packages/b9/71/02fa5c2fd92068bb8952847e70ee6c5cb280e7febe11653d17812acc53dd/kiwisolver-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5", size = 68329, upload-time = "2026-08-28T10:26:17.658Z" }, +] + +[[package]] +name = "mambo-deploy" +version = "0.3.0" +source = { directory = "../../../../deployment" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, +] + +[package.metadata] +requires-dist = [ + { name = "mini-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0" }, + { name = "numpy", specifier = ">=2.4" }, + { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, + { name = "onnxruntime-gpu", marker = "extra == 'onnx-cuda'", specifier = ">=1.20" }, + { name = "pillow", specifier = ">=11" }, +] +provides-extras = ["onnx", "onnx-cuda", "torch"] + +[[package]] +name = "mambo-ucloud-release" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "huggingface-hub" }, + { name = "mambo-deploy" }, + { name = "mini-metrics" }, + { name = "mini-trainer", extra = ["bioclip", "recommended", "timm"] }, + { name = "onnxruntime-gpu" }, + { name = "open-clip-torch" }, + { name = "safetensors" }, + { name = "timm" }, + { name = "torch" }, + { name = "torchvision" }, +] + +[package.metadata] +requires-dist = [ + { name = "huggingface-hub", specifier = "==0.36.2" }, + { name = "mambo-deploy", directory = "../../../../deployment" }, + { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, + { name = "mini-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, + { name = "onnxruntime-gpu", specifier = "==1.30.0" }, + { name = "open-clip-torch", specifier = "==3.3.0" }, + { name = "safetensors", specifier = "==0.6.2" }, + { name = "timm", specifier = "==1.0.25" }, + { name = "torch", specifier = "==2.12.0", index = "https://download.pytorch.org/whl/cu130" }, + { name = "torchvision", specifier = "==0.27.0", index = "https://download.pytorch.org/whl/cu130" }, +] + +[[package]] +name = "markdown" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/29/6f/da4c6aea59b3001f2e8c0ec7497475aadaf3b021c10cab5b2858f0f32b26/markdown-3.10.3.tar.gz", hash = "sha256:3589362618f743188b4d955b874402bc814f4f83f544dc207719f4baa7d9c45f", size = 372596, upload-time = "2026-07-30T19:05:29.005Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/69/4a5af2bc115a9a33fefe51709749de8262be3f9ba063d1753a837cdbc49c/markdown-3.10.3-py3-none-any.whl", hash = "sha256:fa6c92a00a4a3c98b22728c64a935ae1928250ae65058a6ded814d2cc29a4cea", size = 110757, upload-time = "2026-07-30T19:05:27.883Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, +] + +[[package]] +name = "matplotlib" +version = "3.11.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e7/c8/9aa712a0afb882649424dd8de8ad9aa6235e796e84c6052e8f6dc1598d0d/matplotlib-3.11.2.tar.gz", hash = "sha256:cec596316640f2b394b8f0daa0ea61a8eae82d017b620b9f202befb972a59ea4", size = 32660610, upload-time = "2026-09-11T19:05:31.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/ce/fc58855a3d17f6cb8a87b6f9ccd100f65432a3a7ffed57309cbf14c78987/matplotlib-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d43ff8cebb50840648cb6429b2228621dbd709010f3117b3740abb20abf21c0", size = 9476987, upload-time = "2026-09-11T19:03:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/a9/29/2a47b700545aca050e0ed73c89ba21e08407e11f5f42a567421b220de6c1/matplotlib-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2a8285cea8ef4d92aa041d1c33788bcae82248503300f93f1ca2136b9049452f", size = 9306050, upload-time = "2026-09-11T19:03:43.103Z" }, + { url = "https://files.pythonhosted.org/packages/a9/df/e7c10292f348cf55178a5b3c0092a38ea68891a3945f199ae8b7b8ac9dc1/matplotlib-3.11.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1944895967f87c84c9b4bad29a707b31f5b36df4a3a2339ea1f8ea3ce5105539", size = 9861060, upload-time = "2026-09-11T19:03:46.044Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b9/b978de6d43d47f1d4d8e653fac32c16d8d2e5f46bbbb822e26d7cb1adece/matplotlib-3.11.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af2661f6ac6bbd1d081996f54fdd9385715c625ace8cec0869055c0cfbf38981", size = 10670885, upload-time = "2026-09-11T19:03:48.942Z" }, + { url = "https://files.pythonhosted.org/packages/a3/80/d72f61bb2631ac15d17fada1f17e0f99fecba69d8376d34f17cf93b7eddd/matplotlib-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7e5a90f8a707ebb6004a713b1cff091a40cc5df4c7c1cb165e5a505ebc11c292", size = 10811222, upload-time = "2026-09-11T19:03:51.665Z" }, + { url = "https://files.pythonhosted.org/packages/94/2e/6d1d33f242c705b5c6c6fb3f0fc141add51cb1abb62912e59de0835d28c4/matplotlib-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:bc067c462a86f0e57bf52fc6e058d90171a5420007dac00c46e90153050c69a7", size = 9349539, upload-time = "2026-09-11T19:03:54.534Z" }, + { url = "https://files.pythonhosted.org/packages/bb/bb/c0aa86a7f4c0e62f1c3c0711e361f6f23f87eb9018732a5e11994bd1b7ec/matplotlib-3.11.2-cp313-cp313-win_arm64.whl", hash = "sha256:3e8576f7c47e02fd4f21f44171302d2d1d58d4471d46da3d71fe8899d19539d9", size = 9028295, upload-time = "2026-09-11T19:03:57.261Z" }, +] + +[[package]] +name = "mini-metrics" +version = "0.3.0" +source = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1#70cc69adc05362863439277048e06386c1f885e1" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "scikit-learn" }, + { name = "tqdm" }, +] + +[[package]] +name = "mini-trainer" +version = "0.3.0" +source = { directory = "../../../../" } +dependencies = [ + { name = "diskcache" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] + +[package.optional-dependencies] +bioclip = [ + { name = "open-clip-torch" }, +] +recommended = [ + { name = "biopython" }, + { name = "pyarrow" }, + { name = "pycirclize" }, + { name = "scipy" }, + { name = "setuptools" }, + { name = "tensorboard" }, + { name = "wandb" }, +] +timm = [ + { name = "timm" }, +] + +[package.metadata] +requires-dist = [ + { name = "biopython", marker = "extra == 'recommended'", specifier = ">=1.80" }, + { name = "diskcache" }, + { name = "ipykernel", marker = "extra == 'notebook'" }, + { name = "ipywidgets", marker = "extra == 'notebook'" }, + { name = "matplotlib" }, + { name = "mini-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "mini-trainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "mini-trainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "mini-trainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "mini-trainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "mini-trainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "numpy", specifier = ">=2.4.0" }, + { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, + { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, + { name = "onnxscript", marker = "extra == 'export'", specifier = ">=0.3" }, + { name = "open-clip-torch", marker = "extra == 'bioclip'" }, + { name = "psutil" }, + { name = "pyarrow", marker = "extra == 'recommended'" }, + { name = "pycirclize", marker = "extra == 'recommended'", specifier = ">=1.10.1" }, + { name = "pyremotedata", marker = "extra == 'notebook'" }, + { name = "pyyaml", specifier = ">=6.0.3" }, + { name = "scipy", marker = "extra == 'recommended'" }, + { name = "setuptools", marker = "extra == 'recommended'", specifier = "<=81.0.0" }, + { name = "tensorboard", marker = "extra == 'recommended'" }, + { name = "timm", marker = "extra == 'timm'" }, + { name = "torch", specifier = ">=2.11" }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, + { name = "torchvision" }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "tqdm" }, + { name = "transformers", marker = "extra == 'transformers'" }, + { name = "wandb", marker = "extra == 'recommended'" }, +] +provides-extras = ["recommended", "all", "quantization", "export", "minimal", "notebook", "bioclip", "transformers", "timm", "cpu", "cu126", "cu130", "cu132"] + +[package.metadata.requires-dev] +dev = [ + { name = "import-linter", specifier = ">=2.0" }, + { name = "pytest", specifier = ">=8.0.0" }, + { name = "pytest-cov", specifier = ">=5.0.0" }, + { name = "ruff", specifier = ">=0.14.5" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "narwhals" +version = "2.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/68/5351e34623d253423240ea7de3f8fc74fa8ab14b1ab3c0ec4ac8997413c9/narwhals-2.26.0.tar.gz", hash = "sha256:6b9cadca82f375c7e4cf584fdc86ca25da54827307a9c58f94547ee6104b82dd", size = 686970, upload-time = "2026-09-08T13:32:08.964Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/b5/1b84b2c784db76d69442334bc8b8748c840f13ca53be086f4f250ad4a0bc/narwhals-2.26.0-py3-none-any.whl", hash = "sha256:29326d74f107c347fd1009bd58e38d9f7c7c5b51e6de97bc93dbc325d9038b54", size = 474034, upload-time = "2026-09-08T13:32:07.159Z" }, +] + +[[package]] +name = "networkx" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +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 = "numpy" +version = "2.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/01/11703282db468b85f6f7b8c7f22d058de5970d5c7e60a3a8aaa313c3de36/numpy-2.5.3.tar.gz", hash = "sha256:df2d5874ff183595a4ba404edd04f6bd9b5505c1d7708573f6a6c17489a67563", size = 20791231, upload-time = "2026-09-06T16:27:47.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/e5/8fb89cd46d14e35699d13bf943a5f5f441ecee8667120a1f6105ab89e349/numpy-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:66a78fe4556c60aceda5916f9eacd638b18e9e681016ec302dcb4682d6d4d034", size = 16991061, upload-time = "2026-09-06T16:25:00.411Z" }, + { url = "https://files.pythonhosted.org/packages/2f/06/9dc9e48b5e5e941c8b10350c5ff2d721da42a20517d911d15544246775ff/numpy-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92f30e89b8ee0ecf363033576c422b2f58fed6a80bed0aa48dff6d14c654663e", size = 12003676, upload-time = "2026-09-06T16:25:03.475Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2a/98282aa5b8f58b1157d440bb6282eed47e3632a5de53a714fbab17e659fe/numpy-2.5.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f9a2353b37a1a9e78fd82b27ad7e2a32a2d036604d18f02b05e3136c62ca3b09", size = 5439695, upload-time = "2026-09-06T16:25:05.978Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f9/b6533d777be9d6ffd29dc1be0867e563e6e8cc9a220ff1b716adc317f060/numpy-2.5.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:ccbc4665079665c3cf3bab4db9f6b095370cd6437d66be549b6c2a1fd19e1958", size = 6779395, upload-time = "2026-09-06T16:25:08.599Z" }, + { url = "https://files.pythonhosted.org/packages/73/85/735720d04ec197c5dcfacdfc9922667c7f1f5f496a279b7ba4d7c74c4cc7/numpy-2.5.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c76d5dde9f445058f83d0c02af00557a4db91de9a9a57c0df87d1535001d654b", size = 15681750, upload-time = "2026-09-06T16:25:11.173Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1b/3b16a9bc514a440a7a0883684111dcb1ef1aee960af2ca95da8fc775f124/numpy-2.5.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5fa86b80fd24bcd1aff83ad23be44ea323de3f787be8f8b15d4a65621e25321", size = 16708577, upload-time = "2026-09-06T16:25:14.171Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/386f397831b07328b639c96c5b62719346cf4baf07c68d927239752b1534/numpy-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd4cb9ad3c7889b9b3fe0a9a9fb5d2ed26f9879bff2608d9f01aed147a20d231", size = 17042047, upload-time = "2026-09-06T16:25:17.582Z" }, + { url = "https://files.pythonhosted.org/packages/5f/3e/a700ecbf36e85ae8328fd3b0e12eeddc22ed6358a64cb2bd913e0d195d65/numpy-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1302b90c0e52281681b2975adfe8a860cb7b12216a27b4b0b4207c44bf7bccf0", size = 18465724, upload-time = "2026-09-06T16:25:20.949Z" }, + { url = "https://files.pythonhosted.org/packages/41/ee/38e785e88a4045f6ad1d1f2808dcdfafdca48c760260c0587bf171e29fc9/numpy-2.5.3-cp313-cp313-win32.whl", hash = "sha256:1c80eabb4035ecf4ca9cd49cde8a9fdd69a729e63e6474887d1523ade7aa277f", size = 6129003, upload-time = "2026-09-06T16:25:23.664Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ec/100f2b1794ede74a9b3d7ec6b9736927f56713414c1dfe19ab6c383494bf/numpy-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:71cad2b2a7451ab79d8f5e71b453485b6775963d5cf794179144a7463fe6e8ec", size = 12560965, upload-time = "2026-09-06T16:25:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/80/b1/7dc825ca94c12acebbce4c37caa5e198695eb31424bc579679f32b1bb49d/numpy-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:8e4dd766076855b5ff7ea52fa5f07ce26286726e0f8bff446b7739d02e6ea204", size = 10482343, upload-time = "2026-09-06T16:25:29.772Z" }, +] + +[[package]] +name = "nvidia-cublas" +version = "13.1.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-nvrtc" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, + { url = "https://files.pythonhosted.org/packages/3b/cd/154ca20c38269e05eff77c1464e6c1da89f50a6390b565e9d82e06bc11e1/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436", size = 423138758, upload-time = "2026-04-08T18:46:58.655Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime" +version = "13.0.96" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, + { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu13" +version = "9.20.0.48" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5e/edb9c0ae051602c3ccaffe424256463636d639e27d7f302dde9975ef9e7a/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304", size = 366173588, upload-time = "2026-03-09T19:29:34.474Z" }, +] + +[[package]] +name = "nvidia-cufft" +version = "12.0.0.61" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, +] + +[[package]] +name = "nvidia-cufile" +version = "1.15.1.6" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, +] + +[[package]] +name = "nvidia-curand" +version = "10.4.0.35" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, +] + +[[package]] +name = "nvidia-cusolver" +version = "12.0.4.66" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas" }, + { name = "nvidia-cusparse" }, + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, +] + +[[package]] +name = "nvidia-cusparse" +version = "12.6.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, + { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu13" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/e1/cdc1797eadf82d3a9a575a19b33fdc871a97edbec42c00b5b5e914f4aff4/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f", size = 221051344, upload-time = "2025-09-05T18:49:51.289Z" }, + { url = "https://files.pythonhosted.org/packages/34/7d/2661f2fb3ac4302f3a246f5fc030213ac60c1fe0bce84f9783dbd831dbb7/nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0", size = 170148586, upload-time = "2025-09-05T18:50:50.248Z" }, +] + +[[package]] +name = "nvidia-nccl-cu13" +version = "2.29.7" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/0d/daf50d44177ee0cbc7ff0a0c91eb5ff676c82be42f9a970bc7597f440c3a/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5", size = 206014712, upload-time = "2026-03-03T05:34:20.843Z" }, + { url = "https://files.pythonhosted.org/packages/67/f4/58e4e91b6919367c7aafb8e36fce9aad1a3047e536bf7e2fd560927d3a4c/nvidia_nccl_cu13-2.29.7-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d", size = 205976000, upload-time = "2026-03-03T05:36:24.472Z" }, +] + +[[package]] +name = "nvidia-nvjitlink" +version = "13.0.88" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, + { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu13" +version = "3.4.5" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, +] + +[[package]] +name = "nvidia-nvtx" +version = "13.0.85" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, + { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, +] + +[[package]] +name = "onnxruntime-gpu" +version = "1.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flatbuffers" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/ae/cfec0c21d039e4125fdc333e2e2032ed0a49eb50f9dd70b7f3819b339018/onnxruntime_gpu-1.30.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9aba23f903f434cc55d851aeb801afee19e287c202f4ab8f59d02f04caa90aed", size = 246688669, upload-time = "2026-09-10T16:13:21.504Z" }, + { url = "https://files.pythonhosted.org/packages/07/cd/99171c84362c9a3292ec909c2e8edd922dec21d65e28e83e9d809ad178c6/onnxruntime_gpu-1.30.0-cp313-cp313-manylinux_2_34_aarch64.whl", hash = "sha256:0c68878729527a28202af6c1b7ebc2fc5a687e9f6e02bfb8796e39d1fe775fd7", size = 205732148, upload-time = "2026-09-10T15:53:16.111Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d3/50fba71f4174f25f1e677ffe4b2ebc9f6c2a2aa8093c12e82c93792fd4e8/onnxruntime_gpu-1.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:cf494da233f3fc02bbeb2a3178e3ace7361b6b4fef7031b19c1e5aed5e9328ce", size = 160479611, upload-time = "2026-09-10T15:56:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/8e/41/3ebd7b9648259adcf3abd245be862a0cb4c24d4b12f4f7b82d3e9fcf18f0/onnxruntime_gpu-1.30.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:675d519cab613bc42685ecb998f8e8e8c6d73143496681650d30ef14fedeade7", size = 246684982, upload-time = "2026-09-10T16:13:31.799Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b0/6187754ea45ce90c116730115e4d856a6107b9e708580093c112def9a567/onnxruntime_gpu-1.30.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:c6df4b62538f98482dd5cebc91cba668c4b82156e872517c314a383c904a191d", size = 205776779, upload-time = "2026-09-10T15:53:24.926Z" }, +] + +[[package]] +name = "open-clip-torch" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ftfy" }, + { name = "huggingface-hub" }, + { name = "regex" }, + { name = "safetensors" }, + { name = "timm" }, + { name = "torch" }, + { name = "torchvision" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/b5/41c315ccd94ca332ead3e832e83eee343ab245005c3e43d9d3e75eae34eb/open_clip_torch-3.3.0-py3-none-any.whl", hash = "sha256:c549ad5ed6bfc119cc11105033c0a2b9d7a2a4afeb40a58a09aab3da1a0043ce", size = 1547268, upload-time = "2026-02-27T00:32:44.902Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/8b/aa9e2d8b8dfa7c946f7dec5d1f8f6ba8eca062f43509a06bdb5ce93d26c0/opentelemetry_api-1.44.0.tar.gz", hash = "sha256:67647e5e9566edcf421166fdf022b3537f818635daa852b289e34604dc6fb33a", size = 72406, upload-time = "2026-07-16T15:25:32.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/6f/a04e900f465ff3221ccc395522503e2d10e79fa21f2723c8e177aae1e0d1/opentelemetry_api-1.44.0-py3-none-any.whl", hash = "sha256:94b98c893a91b88657eaac1e3ba89618cdb85be6918196705354f34728b2cdef", size = 60018, upload-time = "2026-07-16T15:25:11.657Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/09/4d717852c1cf3f854b76c7110a5d00883bc3c99288b9b0dbcbeb9e306eb6/opentelemetry_exporter_otlp_proto_common-1.44.0.tar.gz", hash = "sha256:dc87a5a5bc58f149a56d1547e4691588fa12994cdc3bc039a694ccb3375862ac", size = 20202, upload-time = "2026-07-16T15:25:37.658Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/71/65fd9d54c10b860f87c045ccee1264cab7011268895d3528818a29c1172a/opentelemetry_exporter_otlp_proto_common-1.44.0-py3-none-any.whl", hash = "sha256:9a9fe61bba73d802904bc989f1d6b4a7b1ee40f06c40e98d6f85af65aaebb694", size = 17045, upload-time = "2026-07-16T15:25:18.201Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1a/87/95e2a5aaa795b4e2260d74e16df2d5541deb2ea9de010bcd615f4dee2654/opentelemetry_exporter_otlp_proto_http-1.44.0.tar.gz", hash = "sha256:c633d7270ad6b57cd4cfbe8b0007a9e2e7c0cb50bd6c50fe2a7b245f721a09d8", size = 25806, upload-time = "2026-07-16T15:25:39.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/d0/fdeb1a98d8d3a6205f5f297c51b4a9bfe65126ab60339669bbe3dd54c2e2/opentelemetry_exporter_otlp_proto_http-1.44.0-py3-none-any.whl", hash = "sha256:838592fce774c1c8bb7b9a0a7facbfa82e17be5a8a4e94cef10cb84ae026bae3", size = 21850, upload-time = "2026-07-16T15:25:20.006Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/01/40ac4ae9a149263cc52c2cee200ddd80cb6d8db1a4610abf8eabce0fe771/opentelemetry_proto-1.44.0.tar.gz", hash = "sha256:c547a79c2f8c0c515d31509154682e5921c7cfd5ca67b70e1f9266e2c3e103f3", size = 46488, upload-time = "2026-07-16T15:25:45.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/7c/8be563d68e93bbefa5c8affb82ddcff91b3ad858ce49957ba7b16fd3e0ab/opentelemetry_proto-1.44.0-py3-none-any.whl", hash = "sha256:898b155a0e1557afd867478fb6158e8122a46329ca0bb8dc53cc55e98f017f56", size = 72483, upload-time = "2026-07-16T15:25:28.429Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/77/a6592cbc7c8d9bcc9d6757a9df45e04a7c585e3e6e7a13456da522b21109/opentelemetry_sdk-1.44.0.tar.gz", hash = "sha256:cebe7f65dc12f26ead75c6064de12fd2a9052e5060c0272d402cfa203aae123b", size = 208624, upload-time = "2026-07-16T15:25:46.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/23/ff077e61886ee020a17ce9c8b6fa11c601c8d8345b09ea24f605445df62a/opentelemetry_sdk-1.44.0-py3-none-any.whl", hash = "sha256:df081c4c6bcfdb1211e3e86140376792643128a25f8d72d1d27675936e7e96ad", size = 137221, upload-time = "2026-07-16T15:25:29.534Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.65b0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/73/0cbdebcb4cf545fdd328da14f5137e37d0770c3f26185e478b0d15d94f50/opentelemetry_semantic_conventions-0.65b0.tar.gz", hash = "sha256:f9b2b81e9d5b64f11bc952075e7e9c7fb0aab075c7fd1c46d597f1b919852d60", size = 148774, upload-time = "2026-07-16T15:25:46.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/0e/49df70d9b81fb5cbae4bbf2a49d865b09bcbcbc4eb53f5851b1027738d78/opentelemetry_semantic_conventions-0.65b0-py3-none-any.whl", hash = "sha256:1cacde7b0ad306f84c5ef08c3dbe1bbaf20165bba6f8bff43b670e555a086bcb", size = 204645, upload-time = "2026-07-16T15:25:30.688Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +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" } +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" }, +] + +[[package]] +name = "pandas" +version = "3.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/17/d7b106e05bfa642e8694451e7d3d759c6a241c5386a5d962e4f66c047e06/pandas-3.0.6.tar.gz", hash = "sha256:66b07ef7315a31bfe1089cd3d71a7de781c9dca986762d0b4fe7c0ef17465d10", size = 4667686, upload-time = "2026-09-17T23:23:18.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/1c/143605a1f6443ad50ebda78a31e5a3a10147fec2590e931584aaa5ff0a09/pandas-3.0.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ae8073aed8e21d1a7fe263dcdc6840743549722a6738198a0a46000fa9476f2", size = 10418900, upload-time = "2026-09-17T23:21:16.594Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ca/87f8548f73d452aab35e4a90f8b39ae303295e0f2ef0b4055c44d6b3f1be/pandas-3.0.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:60d81f9e1799b36f3739e7fff44d1fbb2e8fd5a271b3863e03de9715fccda0fa", size = 10064785, upload-time = "2026-09-17T23:21:19.677Z" }, + { url = "https://files.pythonhosted.org/packages/43/1a/d951442e5607c6e3b2462eff8f420797d428aa74b87c6ecfe4f48553626e/pandas-3.0.6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:097090508a1dd335013d39106fc10b20f4fd4a171638e47b77d55798ed9dab6c", size = 10245290, upload-time = "2026-09-17T23:21:22.797Z" }, + { url = "https://files.pythonhosted.org/packages/50/fa/96d50e1e6cd0b08b5e2b7c838f65ae644940f75a124063380b5ef73b6866/pandas-3.0.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e92d9fa834c7d877130027cddc0cad8dcff97c1f6cca26bd6310f847228b658", size = 10757657, upload-time = "2026-09-17T23:21:25.673Z" }, + { url = "https://files.pythonhosted.org/packages/7b/12/f82d13a2cb703e1a8acee7e01fdc2b898d9cd0c00f07d1dfce63af43e350/pandas-3.0.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b27c8d890e4aa2171437ae2a39de1d215e674158e4865c4023a8b31c932513b2", size = 11249114, upload-time = "2026-09-17T23:21:28.898Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ce/8aef2e561a2f2c8b38c913c67373c65ba6748174e763d27c80271b24bd17/pandas-3.0.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8029ec0f1f89e4f985929ce1f6626dabf3140d61a4e9c1215afdab34eaf9a5d", size = 11820511, upload-time = "2026-09-17T23:21:32.11Z" }, + { url = "https://files.pythonhosted.org/packages/c0/bd/63cb67e6903ef6d9c2871916dbcbc09d254da0fe8b870cf62e16b21945f2/pandas-3.0.6-cp313-cp313-win_amd64.whl", hash = "sha256:f3ce8a6968045481e91a3990e797e348ce13db45ee164a7095bbc824e26c09dd", size = 9638092, upload-time = "2026-09-17T23:21:34.883Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/e7b35b712edb068d382ddc8b2bea8a04974100515ba2daa22b478b265842/pandas-3.0.6-cp313-cp313-win_arm64.whl", hash = "sha256:cc39303913e2ea129915670de5d1c9fbd647f543bb72e5543bac8baa94e9e42f", size = 8952032, upload-time = "2026-09-17T23:21:37.729Z" }, +] + +[[package]] +name = "pillow" +version = "12.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/3d/bb7fca845737cf9d7dbde16ed1843984665ff2e0a518f5db43e77ec540b9/pillow-12.3.0.tar.gz", hash = "sha256:3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce", size = 47025035, upload-time = "2026-07-01T11:56:38.965Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/ac/31fb64e1e7efb5a4b50cd3d92049ba89ac6e4d8d3bb6a74e15048ca3353e/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:21900ce7ba264168cd50defae43cd75d25c833ad4ad6e73ffc5596d12e25ac89", size = 4161684, upload-time = "2026-07-01T11:54:25.934Z" }, + { url = "https://files.pythonhosted.org/packages/87/b4/9805e23d2b4d77842b468513841fda254ee42f0289d25088340e4ff46e2d/pillow-12.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:4e8c2a84d977f50b9daed6eeaf3baef67d00d5d74d932288f02cb94518ee3ace", size = 4255487, upload-time = "2026-07-01T11:54:27.935Z" }, + { url = "https://files.pythonhosted.org/packages/df/39/ecf519435a200c693fe053a6ee4d835b41cf963a4dfc2551c4e637cb2a71/pillow-12.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:ae26d61dfa7a47befdc7572b521024e8745f3d809bd95ca9505a7bba9ef849ec", size = 3696433, upload-time = "2026-07-01T11:54:29.813Z" }, + { url = "https://files.pythonhosted.org/packages/42/92/2fc3ffad878ae8dd5469ec1bc8eb83b71f48e13efdf68f02709003982a32/pillow-12.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66", size = 5345889, upload-time = "2026-07-01T11:54:31.97Z" }, + { url = "https://files.pythonhosted.org/packages/10/76/8803c13605b763d33d156c4678fc77f8443389c0c51c8aef707bb02015f4/pillow-12.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d69141514cc30b774ceea5e3ed3a6635c8d8a96edf664689b890f4089111fb35", size = 4780109, upload-time = "2026-07-01T11:54:34.026Z" }, + { url = "https://files.pythonhosted.org/packages/1f/01/e18aff37cb0b4aac47ac90f016d347a49aca667ef97f190b06ac2aabc928/pillow-12.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65", size = 6263736, upload-time = "2026-07-01T11:54:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/f7/62/de5bdd77d935331f4f802edc11e4d82950f642caad6cb2f949837b8560e2/pillow-12.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3", size = 6937129, upload-time = "2026-07-01T11:54:38.216Z" }, + { url = "https://files.pythonhosted.org/packages/70/4d/105627a13300c5e0df1d174230b32fd1273062c96f7745fd552b945d1e1d/pillow-12.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:571b9fcb07b97ef3a492028fb3d2dc0993ca23a06138b0315286566d29ef718a", size = 6339562, upload-time = "2026-07-01T11:54:40.354Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1d/f13de01a553988ab895ba1c722e06cf3144d4f57656fd5b81b6d881f1179/pillow-12.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:756c768d0c9c2955feb7a56c37ea24aea2e369f8d36a88da270b6a9f19e62b5e", size = 7049439, upload-time = "2026-07-01T11:54:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f9/066794cca041b969964f779ee5fa66a9498bbf34248ac39c5d7954e4198f/pillow-12.3.0-cp313-cp313-win32.whl", hash = "sha256:a876864214e136f0eb367788dbd7df045f4806801518e2cfe9e13229cfe06d8f", size = 6473287, upload-time = "2026-07-01T11:54:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/7a58e61d62be561da3a356fe2384d4059a6345fc130e23ef1c36a5b81d24/pillow-12.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8", size = 7239691, upload-time = "2026-07-01T11:54:47.141Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b0/c4ed4f0ef8f8fa5ee8351537db6650bb8189f7e118842978dd6589065692/pillow-12.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:b629de27fda84b42cde7edef0d85f13b958b47f6e9bbcbba9b673c562a89bd8b", size = 2568185, upload-time = "2026-07-01T11:54:49.137Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/dd/65804b0c2925a1c821a05502ea57517b69a073ff400d25ab9faa3a2cf012/platformdirs-4.11.12.tar.gz", hash = "sha256:e8dc1cb58f1153fd7f61db1374317770baababec2480b37b8f01c6cc25b45267", size = 40016, upload-time = "2026-09-22T01:02:36.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/2b/69de6317fbf48865bb12aa56c9cfcfff46b3add0cd45250725d96146dce0/platformdirs-4.11.12-py3-none-any.whl", hash = "sha256:b1ba966ac76153d9985a0787ffab951e7c18416189873d4e4ddb2c8a04a0a254", size = 24976, upload-time = "2026-09-22T01:02:35.742Z" }, +] + +[[package]] +name = "protobuf" +version = "7.36.2" +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" } +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" }, +] + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pyarrow" +version = "25.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/e3/27f57f80141379d60defe6703eb50a707325706f07fedfd1312c7a751995/pyarrow-25.0.1.tar.gz", hash = "sha256:9150a83248bfed9813ea3c3af74c3856c1984d444aa28e58bf7733b9750ddf6a", size = 1201653, upload-time = "2026-08-10T12:40:53.904Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/8d/8f271a7a034c834910ec925d56fa4b29733b1380f5289419f5aaa3b02777/pyarrow-25.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:c7c534ec03c358a76ea3e505e74c1b6aef290af90c444dfd092dbfe23e755b85", size = 35855328, upload-time = "2026-08-10T12:38:45.489Z" }, + { url = "https://files.pythonhosted.org/packages/d2/cd/5bac242f4e841b9971d5eb94fdfe2577e2b70be983e27401e72055786037/pyarrow-25.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dda9470024204d7bbf2042b47c6e8a0e47a3eeb8e34405882dfaea6577e0c153", size = 37622415, upload-time = "2026-08-10T12:38:51.107Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/96d03b4e1506524f7087adb0fd6b2f69f0c9c7aaff1ec36d8030082e15a5/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:44a9120ce5bd81936b8ab9a88076e3fd47c2c6838e0e43630fed83626aca81d9", size = 46813813, upload-time = "2026-08-10T12:38:57.773Z" }, + { url = "https://files.pythonhosted.org/packages/98/d6/33a411115b61dbfc16ad6ad73e71730f6fea654ee3667673bc53ab0e2fe7/pyarrow-25.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:0befcf816e45a1af33ac775a9970b749e4868a230c7372f0ae5e932bee27039f", size = 50104452, upload-time = "2026-08-10T12:39:04.579Z" }, + { url = "https://files.pythonhosted.org/packages/33/ae/b1b97c9ca87f9f9ddbb5230c798df94eccce61bd79b9b45458c69a478588/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3f89685964f46e4216103c75483aac0c0692a5f72212d7ca835adba5ede56ce3", size = 49951343, upload-time = "2026-08-10T12:39:11.8Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a112df5cfd5a68cb1d9fc31cfe38c28d5aec9f10865ce37ecef2e4450873/pyarrow-25.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6943e2fe7954d29d84de45d29d34c8dc36ce96570e67d89aa9976e650a4a9138", size = 53144784, upload-time = "2026-08-10T12:39:20.503Z" }, + { url = "https://files.pythonhosted.org/packages/31/24/97e8bd98f1e3b07e2ba08bcdff690674fbe16d69a7d2712cc3884665e615/pyarrow-25.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:31e49a7888fcdf3a835da33ae777f6bb9a866334e5a789282fc26dcf426f7f15", size = 27870159, upload-time = "2026-08-10T12:39:26.161Z" }, +] + +[[package]] +name = "pycirclize" +version = "1.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "biopython" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/07/500623e3db04a4a64d7cf5ab946e5e5e860c198900650a8ea05e1d870d0a/pycirclize-1.10.1.tar.gz", hash = "sha256:c67c0bcae01b0c37a07c12f0436540f72c3f1068bfc964f388266ec92812b983", size = 20031483, upload-time = "2025-10-03T17:59:38.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/ef/a0090b20af352b9e8ca7b5ccef81940df63ba15cf5c66baf5c6145620537/pycirclize-1.10.1-py3-none-any.whl", hash = "sha256:fc571b0223195b651edd22011963628bddd92861a4053526b31035bb3347f43e", size = 83513, upload-time = "2025-10-03T17:59:34.857Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/37/5abe39a8372a61d3dc3c1338fc504281c01b32fdb3169cd7187153b56d3e/pydantic_core-2.46.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0", size = 2075885, upload-time = "2026-08-28T09:58:47.856Z" }, + { url = "https://files.pythonhosted.org/packages/21/43/6323b1f8b217780454c61304bcd2b38ae4762f50754414124603ccc90bb2/pydantic_core-2.46.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff", size = 1922768, upload-time = "2026-08-28T09:58:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a3/c05ca796e1197618a774b01e596aeedfefc2f7d8c01ae3054e910b120e8a/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931", size = 1951241, upload-time = "2026-08-28T09:58:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/68/32/33bc39ac705c52cffc908e8389f9754fdb208aea5c69cceddf4eb3ce99af/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f", size = 2031975, upload-time = "2026-08-28T09:58:53.166Z" }, + { url = "https://files.pythonhosted.org/packages/b0/70/2333e885c0f6a67bc105c5916965dac9b57f2718ee20d81d1a06a4ebdc13/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038", size = 2208542, upload-time = "2026-08-28T09:58:55.017Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ea/296debfb4264207bbda5936133892e027c0a58875ad53ebd512fba8ec3a2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f", size = 2264692, upload-time = "2026-08-28T09:58:56.767Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f2/9e4de77a6271e07a76d2d58b11c091a979c191ed2939bf80067568b369d2/pydantic_core-2.46.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1", size = 2066633, upload-time = "2026-08-28T09:58:58.531Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/f9e9d0c97445987b2084823d5c240de88087338f04fc2cfaa2df186b8049/pydantic_core-2.46.5-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761", size = 2105235, upload-time = "2026-08-28T09:59:00.421Z" }, + { url = "https://files.pythonhosted.org/packages/07/c5/79169b047b3b2c3e99e04bc76372af9637e0bf6db638274fa927df96369e/pydantic_core-2.46.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5", size = 2157367, upload-time = "2026-08-28T09:59:02.442Z" }, + { url = "https://files.pythonhosted.org/packages/26/b5/ba6057afb7c291bd449f51b867f95aef2072941c4ce4e5c31d6ffd132d3b/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e", size = 2158420, upload-time = "2026-08-28T09:59:04.2Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/2057abecaafdc22912afa819603a51f0a62d40643b7c4871c51721fea9be/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed", size = 2309588, upload-time = "2026-08-28T09:59:06.048Z" }, + { url = "https://files.pythonhosted.org/packages/71/9d/881156dc404e27479c4246128d73538464cab4a239bec61995e227644c30/pydantic_core-2.46.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519", size = 2341866, upload-time = "2026-08-28T09:59:08.539Z" }, + { url = "https://files.pythonhosted.org/packages/5a/38/d66f443a259f84d13babdceae568e572b0ed26da17ca5d0a649ebb110a67/pydantic_core-2.46.5-cp313-cp313-win32.whl", hash = "sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea", size = 1938580, upload-time = "2026-08-28T09:59:10.402Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1e/1d5371213f4cc9a7ed70c0bfcc7911de22311ee99a662a56077d7292d2ac/pydantic_core-2.46.5-cp313-cp313-win_amd64.whl", hash = "sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5", size = 2041980, upload-time = "2026-08-28T09:59:12.396Z" }, + { url = "https://files.pythonhosted.org/packages/5a/48/4222d90b1c67568bace4dec6dca6271449c66de3595d72b6d098f5fde597/pydantic_core-2.46.5-cp313-cp313-win_arm64.whl", hash = "sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575", size = 1997213, upload-time = "2026-08-28T09:59:14.245Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/11/b213bebff182584360cb8d17c72c1677fec5c5c228de439e63bcf8ab1c8f/pyparsing-3.3.3.tar.gz", hash = "sha256:928ae7e20211f3b6f3915a72f06a0cfd29ab9d24279dd6346b6b1a7146397d36", size = 1050487, upload-time = "2026-09-20T20:59:05.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/bb/d215ee7c73b61497b28a5503f9f53523f294fcc936762b7caf90e0c1c2b5/pyparsing-3.3.3-py3-none-any.whl", hash = "sha256:ece8c00a69cf01b45d0b1dedabb469c90d8caf996d4fda40f147627a122849a4", size = 126420, upload-time = "2026-09-20T20:59:04.025Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +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/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 = "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/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" }, +] + +[[package]] +name = "regex" +version = "2026.9.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/5c/f403115361de25809e8f785686ec7096e30fef73be9ae35aa51da4e80abb/regex-2026.9.10.tar.gz", hash = "sha256:1e321e2c84f0e52c457f5ea5944f796d6e8e09cb99738ea98dcc1bfe402a128d", size = 417072, upload-time = "2026-09-09T21:00:21.521Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/90/d4452bf1ef7dbe406980e8b921a257024482203c1dafac535eae207611bc/regex-2026.9.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ef5a059ea1c6ee5d1c7e99a2484e628608d010921efe876c6f0e2029d2f35eca", size = 496408, upload-time = "2026-09-09T20:57:36.757Z" }, + { url = "https://files.pythonhosted.org/packages/6a/35/c763c6424a0f99d021d46dc1f9065147bb5a40c2b2cdf28d2ebdbcd96508/regex-2026.9.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dce932f8e3ba936475ea3d0d8b59f7b050a9e206e994f53f8fd80299871e87da", size = 296931, upload-time = "2026-09-09T20:57:38.811Z" }, + { url = "https://files.pythonhosted.org/packages/fa/68/241f88458b17c46ed2f80147a60a03b2ada7fb815c23b6bc76c298abb0a5/regex-2026.9.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d8c668af8f7bdb1d18739c27d30cd9f4b371495a883f75a002fb7a39d740fecd", size = 291741, upload-time = "2026-09-09T20:57:40.482Z" }, + { url = "https://files.pythonhosted.org/packages/90/9e/974d6de404c63e2d09525f4ddb99874c7ab8e1f781ccbe0dd3e26fa6f6e5/regex-2026.9.10-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6aebdd9a946de328b3f6f61dbf48dd064a36eb6dddf96e34ae6651d37f6e9383", size = 800088, upload-time = "2026-09-09T20:57:42.098Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fd/3875b73f9e7ba3321dcaa02c19f650c05c61345328acf84599ac6f45ceed/regex-2026.9.10-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f2374c27deb189b282ec7e16106752c22ad39b056bbd8018960b1e4cc95d67a1", size = 871212, upload-time = "2026-09-09T20:57:44.03Z" }, + { url = "https://files.pythonhosted.org/packages/c5/f5/2358e791c0e171194dd6a8b97b520579098a21397fb79dbe6b7edc9e3fa7/regex-2026.9.10-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e0dc78251154b66dc60211563fc115345da332eaa881e4e2523fb1edae3772f4", size = 919752, upload-time = "2026-09-09T20:57:45.691Z" }, + { url = "https://files.pythonhosted.org/packages/20/3b/000c79c3f9c06b7542225a5d3a7f9a85405da7224b3b9af94a491d07abea/regex-2026.9.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bafa41b0dd63669e5c0f8adf3d24819efeb73c847f492eb011212eb352e69041", size = 804578, upload-time = "2026-09-09T20:57:47.548Z" }, + { url = "https://files.pythonhosted.org/packages/30/6d/195eedb1de87f26639191e7487e41eb81e2ce255bc7563a64f3f5a95eb08/regex-2026.9.10-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ebb2ba68e4641a994061f70bf44ed448fba0b9b1d18c94ffb9efc1cca805b39b", size = 777345, upload-time = "2026-09-09T20:57:49.63Z" }, + { url = "https://files.pythonhosted.org/packages/79/11/11fe2b313fcd92cb75c583648f2746031b9f4da9e9ed4241204a5e8b3721/regex-2026.9.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:048a89ee797db10160bd2bd519286577a6b43a100279bd4b7d8456a3d69c80a0", size = 790556, upload-time = "2026-09-09T20:57:51.27Z" }, + { url = "https://files.pythonhosted.org/packages/7a/c0/07ec9b4c43b0e16d62454971a5ab3886eccb0bfa161300a02d801ab28620/regex-2026.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:79e9432995e14c749d34209413de5e621ec8e67789bf4f46dbfabea9d06a2406", size = 865572, upload-time = "2026-09-09T20:57:53.163Z" }, + { url = "https://files.pythonhosted.org/packages/19/07/43bc9a9cf9fc8e37d2ba47980dfe4a6e151d2cf3ab969e0031e2a9b21484/regex-2026.9.10-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5847e22bbf959764d776937d791d034cc2d19b787e361c88d97e859e8dc68502", size = 767971, upload-time = "2026-09-09T20:57:54.805Z" }, + { url = "https://files.pythonhosted.org/packages/9c/49/3b9286a3a94f3c89ed4ddbe74e72bdde21c1a5eadd520d5f4ed4a61936cb/regex-2026.9.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c103b3b14e011774af4fb7e4617ad4d72b9171905cd3b231a70a4efd76e477d7", size = 858835, upload-time = "2026-09-09T20:57:56.627Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9e/e5d27ce9fee8e3ef95f886c7b6ecec211efa4cfc18bd73bd5cf26cca4741/regex-2026.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6b34a778c695d24e77c140e3b4c95da69282e34f2f6b02b55656aa4a0379f643", size = 791793, upload-time = "2026-09-09T20:57:58.313Z" }, + { url = "https://files.pythonhosted.org/packages/63/03/c28a6bebedc3e2d86ee27ec2de16f7ec0419dcd10e771d43dcc9c58a2e99/regex-2026.9.10-cp313-cp313-win32.whl", hash = "sha256:7abb38b8c40f3a235235a44da452c64b7b5c1d650ec6351027db0e090804f2e5", size = 267298, upload-time = "2026-09-09T20:58:00.009Z" }, + { url = "https://files.pythonhosted.org/packages/cd/fd/5c85fa6cfb8e034080bda5a72fa0a4df2b7777a35eb7e73c2799c2adda7a/regex-2026.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:20e8bfb07ad79a282f8b95b56fe67f9750b1b7f775724e4ba1f23cb296115ce4", size = 277894, upload-time = "2026-09-09T20:58:01.731Z" }, + { url = "https://files.pythonhosted.org/packages/c1/28/f5a25f6f65501675977fda35d9f61abb1468c4b87c0f73e536d8b21a60b8/regex-2026.9.10-cp313-cp313-win_arm64.whl", hash = "sha256:3bdeed3318a8eb2bbadc9c56347e0ff651639e934a47e168d05a3b12929fd0e7", size = 277436, upload-time = "2026-09-09T20:58:03.422Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { 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" } +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" }, +] + +[[package]] +name = "safetensors" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/cc/738f3011628920e027a11754d9cae9abec1aed00f7ae860abbf843755233/safetensors-0.6.2.tar.gz", hash = "sha256:43ff2aa0e6fa2dc3ea5524ac7ad93a9839256b8703761e76e2d0b2a3fa4f15d9", size = 197968, upload-time = "2025-08-08T13:13:58.654Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/b1/3f5fd73c039fc87dba3ff8b5d528bfc5a32b597fea8e7a6a4800343a17c7/safetensors-0.6.2-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9c85ede8ec58f120bad982ec47746981e210492a6db876882aa021446af8ffba", size = 454797, upload-time = "2025-08-08T13:13:52.066Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c9/bb114c158540ee17907ec470d01980957fdaf87b4aa07914c24eba87b9c6/safetensors-0.6.2-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d6675cf4b39c98dbd7d940598028f3742e0375a6b4d4277e76beb0c35f4b843b", size = 432206, upload-time = "2025-08-08T13:13:50.931Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/f70c34e47df3110e8e0bb268d90db8d4be8958a54ab0336c9be4fe86dac8/safetensors-0.6.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d2d2b3ce1e2509c68932ca03ab8f20570920cd9754b05063d4368ee52833ecd", size = 473261, upload-time = "2025-08-08T13:13:41.259Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/be9c6a7c7ef773e1996dc214e73485286df1836dbd063e8085ee1976f9cb/safetensors-0.6.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:93de35a18f46b0f5a6a1f9e26d91b442094f2df02e9fd7acf224cfec4238821a", size = 485117, upload-time = "2025-08-08T13:13:43.506Z" }, + { url = "https://files.pythonhosted.org/packages/c9/55/23f2d0a2c96ed8665bf17a30ab4ce5270413f4d74b6d87dd663258b9af31/safetensors-0.6.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89a89b505f335640f9120fac65ddeb83e40f1fd081cb8ed88b505bdccec8d0a1", size = 616154, upload-time = "2025-08-08T13:13:45.096Z" }, + { url = "https://files.pythonhosted.org/packages/98/c6/affb0bd9ce02aa46e7acddbe087912a04d953d7a4d74b708c91b5806ef3f/safetensors-0.6.2-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4d0d0b937e04bdf2ae6f70cd3ad51328635fe0e6214aa1fc811f3b576b3bda", size = 520713, upload-time = "2025-08-08T13:13:46.25Z" }, + { url = "https://files.pythonhosted.org/packages/fe/5d/5a514d7b88e310c8b146e2404e0dc161282e78634d9358975fd56dfd14be/safetensors-0.6.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8045db2c872db8f4cbe3faa0495932d89c38c899c603f21e9b6486951a5ecb8f", size = 485835, upload-time = "2025-08-08T13:13:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/7a/7b/4fc3b2ba62c352b2071bea9cfbad330fadda70579f617506ae1a2f129cab/safetensors-0.6.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81e67e8bab9878bb568cffbc5f5e655adb38d2418351dc0859ccac158f753e19", size = 521503, upload-time = "2025-08-08T13:13:47.651Z" }, + { url = "https://files.pythonhosted.org/packages/5a/50/0057e11fe1f3cead9254315a6c106a16dd4b1a19cd247f7cc6414f6b7866/safetensors-0.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0e4d029ab0a0e0e4fdf142b194514695b1d7d3735503ba700cf36d0fc7136ce", size = 652256, upload-time = "2025-08-08T13:13:53.167Z" }, + { url = "https://files.pythonhosted.org/packages/e9/29/473f789e4ac242593ac1656fbece6e1ecd860bb289e635e963667807afe3/safetensors-0.6.2-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:fa48268185c52bfe8771e46325a1e21d317207bcabcb72e65c6e28e9ffeb29c7", size = 747281, upload-time = "2025-08-08T13:13:54.656Z" }, + { url = "https://files.pythonhosted.org/packages/68/52/f7324aad7f2df99e05525c84d352dc217e0fa637a4f603e9f2eedfbe2c67/safetensors-0.6.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:d83c20c12c2d2f465997c51b7ecb00e407e5f94d7dec3ea0cc11d86f60d3fde5", size = 692286, upload-time = "2025-08-08T13:13:55.884Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/cad1d9762868c7c5dc70c8620074df28ebb1a8e4c17d4c0cb031889c457e/safetensors-0.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d944cea65fad0ead848b6ec2c37cc0b197194bec228f8020054742190e9312ac", size = 655957, upload-time = "2025-08-08T13:13:57.029Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/e2158e17bbe57d104f0abbd95dff60dda916cf277c9f9663b4bf9bad8b6e/safetensors-0.6.2-cp38-abi3-win32.whl", hash = "sha256:cab75ca7c064d3911411461151cb69380c9225798a20e712b102edda2542ddb1", size = 308926, upload-time = "2025-08-08T13:14:01.095Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c3/c0be1135726618dc1e28d181b8c442403d8dbb9e273fd791de2d4384bcdd/safetensors-0.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:c7b214870df923cbc1593c3faee16bec59ea462758699bd3fee399d00aac072c", size = 320192, upload-time = "2025-08-08T13:13:59.467Z" }, +] + +[[package]] +name = "scikit-learn" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "joblib" }, + { name = "narwhals" }, + { name = "numpy" }, + { name = "scipy" }, + { name = "threadpoolctl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d2/eb/eaf5e07fcc0da7149b0e084f24e54edd7441b9a89ce7e034032ae97fe3a0/scikit_learn-1.9.1.tar.gz", hash = "sha256:629cada3e33e2b9bf376cdc7614a47a4140b8aedc1d836579e359736fbd82977", size = 7786908, upload-time = "2026-09-10T18:34:04.679Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bb/8d/b60d5e7354ff0ff5cc9400e60273696589d87a30b8b2235886a76d80d062/scikit_learn-1.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c2b312fd8c02951a364fa120ea08c1cec10d863466bf1701b013152d7537835", size = 8739300, upload-time = "2026-09-10T18:32:55.483Z" }, + { url = "https://files.pythonhosted.org/packages/2f/81/3c6392c03665d2899457a76e535a9a6f597dddddf3220fd2e1d790da88c5/scikit_learn-1.9.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:61cd968ab831a76d0ecbaf0347ab2270268716da28f94fd022497e3d6f205f13", size = 8262364, upload-time = "2026-09-10T18:32:57.966Z" }, + { url = "https://files.pythonhosted.org/packages/0f/35/a15b8653499692879821301d48059376d6e68e8b65cd0f22d19b6ee83cd9/scikit_learn-1.9.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5990f9c69e431bfaddcde1a6d7c5355243e026bc9b9e560c13893b90dab53fb4", size = 8823698, upload-time = "2026-09-10T18:33:00.632Z" }, + { url = "https://files.pythonhosted.org/packages/23/e5/688703d357e5393f708d98eb189fd415ae69e39f6de03c6bd4005aef6118/scikit_learn-1.9.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:55e79d6e9b0923f1a978179822bd43d7f5543f45e970a00fe861f43486380aba", size = 9121732, upload-time = "2026-09-10T18:33:02.825Z" }, + { url = "https://files.pythonhosted.org/packages/96/45/a10add34c08184d373be9384660c75758128ca881ed27b503b6f6a742478/scikit_learn-1.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:2070f271e5375dc42c6bb93b461ab1c0aa5841d4009267e0cfd95a39dca94a43", size = 8237244, upload-time = "2026-09-10T18:33:05.26Z" }, + { url = "https://files.pythonhosted.org/packages/9e/08/7a89bcdadd1fff0d464d01056417b646c9abcbc54f7297a0a1203bba5ebb/scikit_learn-1.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:613f0a783ca05aa844a4e1ac42d48425058f2c52be73f40f8cd98b7cd111acd6", size = 7875398, upload-time = "2026-09-10T18:33:07.506Z" }, +] + +[[package]] +name = "scipy" +version = "1.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/74/66de6258867beb2ef08f35f9f2ac017a52cacd5081714d239ff1a442d458/scipy-1.18.1.tar.gz", hash = "sha256:52c4b7422442aba924d03ad4019852b08a92e64ea187b933135687bfe2747307", size = 30781235, upload-time = "2026-08-21T23:28:50.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/55/4540ee0f9c42a9ad7109d0d1a8cc70de54c3572b01c6693a2b1c70e90ceb/scipy-1.18.1-cp313-cp313-macosx_10_15_x86_64.whl", hash = "sha256:3ab3523da44749156e1f68b464dc56af11ae4cbc5c739a49d05f32b982eca9f3", size = 31089958, upload-time = "2026-08-21T23:24:35.8Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f5/769f36d14922b8071a43e95d24d18b6bdafad10d7f5cf647867e1ac052bc/scipy-1.18.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e6fb6a55cc0ba97b59a1f288fb86dc6fce8bdfc0fffcbfd015e3a954bf2a2d93", size = 28715106, upload-time = "2026-08-21T23:24:40.775Z" }, + { url = "https://files.pythonhosted.org/packages/9a/d7/21d890274f75ea37a8209d5519e72da3da90302e3b9fb8397a0918386a62/scipy-1.18.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ea324d9dd34c38bfb9bec8ca4d1b407db97dbb74029f566b8e322b1b6fe56fe6", size = 20456846, upload-time = "2026-08-21T23:24:45.066Z" }, + { url = "https://files.pythonhosted.org/packages/ec/01/798430ecea2e78ec7c02663d5f71c007bb6abeca931080debd40d7fa55ea/scipy-1.18.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:75b00eb8fb802090aa903f4ea1c7f5a584779f967361e68b7e98e531cc2d7174", size = 23087986, upload-time = "2026-08-21T23:24:49.539Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5f/4634e9d35c68496e4e34cb6946eafab044458e6cedab42b40b6588e475b6/scipy-1.18.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d416b16cccfd70fbf62400e84d0bb2f4e6af519a45557f1692c749b37f14b315", size = 33998146, upload-time = "2026-08-21T23:24:54.714Z" }, + { url = "https://files.pythonhosted.org/packages/41/48/6450ed9243315322bbc19ac57b9b70d66a20bf1d38d124c96bc4bf6af9ea/scipy-1.18.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fdaf5ea890a6183d0565f51a61799d67081bd5b1cf03c5f4b3fd3732108625c9", size = 35312578, upload-time = "2026-08-21T23:25:00.44Z" }, + { url = "https://files.pythonhosted.org/packages/00/bd/bf5a4be6a3525676499f6dff307991739ff6fdcad1481b1aeb6745339f58/scipy-1.18.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c825cef2f49e46753726a7181a8e199804a912b29519ada542c6ebc654951899", size = 35612621, upload-time = "2026-08-21T23:25:06.144Z" }, + { url = "https://files.pythonhosted.org/packages/bd/4e/3c45c33e00a77996c4b1cb707929f833ba7b1d522ee29f882512c330676d/scipy-1.18.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e3b417bf8c2c7c16e8f58ad91db17783ec911ac16e7b50eb6eab6e809b4f5b07", size = 37457323, upload-time = "2026-08-21T23:25:12.483Z" }, + { url = "https://files.pythonhosted.org/packages/93/0e/e0348fbc0dbab65c114cf78957e7dfeb49f8e8b556b4d930cc12ff195e18/scipy-1.18.1-cp313-cp313-win_amd64.whl", hash = "sha256:559ed65f60c1af5a03f3912605a1b5114f522c7c32fb23c3376ae8f03219fe28", size = 36622841, upload-time = "2026-08-21T23:25:18.722Z" }, + { url = "https://files.pythonhosted.org/packages/50/a8/6a77f5f267c555108f0a864b6db714363dab567a8266422a79a385f9232b/scipy-1.18.1-cp313-cp313-win_arm64.whl", hash = "sha256:cd479fc04dd9401e3b4f49e76518768ef99c4f517a98c284eb091fd725719adf", size = 24399315, upload-time = "2026-08-21T23:25:23.458Z" }, +] + +[[package]] +name = "setuptools" +version = "81.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/1c/73e719955c59b8e424d015ab450f51c0af856ae46ea2da83eba51cc88de1/setuptools-81.0.0.tar.gz", hash = "sha256:487b53915f52501f0a79ccfd0c02c165ffe06631443a886740b91af4b7a5845a", size = 1198299, upload-time = "2026-02-06T21:10:39.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/e3/c164c88b2e5ce7b24d667b9bd83589cf4f3520d97cad01534cd3c4f55fdb/setuptools-81.0.0-py3-none-any.whl", hash = "sha256:fdd925d5c5d9f62e4b74b30d6dd7828ce236fd6ed998a08d81de62ce5a6310d6", size = 1062021, upload-time = "2026-02-06T21:10:37.175Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tensorboard" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "grpcio" }, + { name = "markdown" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "protobuf" }, + { name = "setuptools" }, + { name = "tensorboard-data-server" }, + { name = "werkzeug" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/4b/cd2eec9642781a8f5b2fb9994e3933a7b259ab18e9d49aeede9b5acf6311/tensorboard-2.21.0-py3-none-any.whl", hash = "sha256:7279316dcb6bd5bc391d623dea841531299cde1887310e8133bc34a996d32255", size = 5516204, upload-time = "2026-06-29T20:48:04.472Z" }, +] + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356, upload-time = "2023-10-23T21:23:32.16Z" }, + { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598, upload-time = "2023-10-23T21:23:33.714Z" }, + { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363, upload-time = "2023-10-23T21:23:35.583Z" }, +] + +[[package]] +name = "threadpoolctl" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/dc/6c58154c1c65f758ea979e7139cb76993a9cfc662d14e9be3c4a667cfb77/threadpoolctl-3.7.0.tar.gz", hash = "sha256:61348cfb77d53b9242e0017029244b559b810c142ced65b4e21eeca1843959a7", size = 31961, upload-time = "2026-09-15T15:46:20.263Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/3f/f88a53f60a472b46f4023f56d204dd7de33d34c5d2acbfa0d70a674e639e/threadpoolctl-3.7.0-py3-none-any.whl", hash = "sha256:cd8b60b5641b45c67bbf73c64c843235fc2d8a480c87389f52f5dbee893b86be", size = 26362, upload-time = "2026-09-15T15:46:19.168Z" }, +] + +[[package]] +name = "timm" +version = "1.0.25" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "torchvision" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d7/2c/593109822fe735e637382aca6640c1102c19797f7791f1fd1dab2d6c3cb1/timm-1.0.25.tar.gz", hash = "sha256:47f59fc2754725735cc81bb83bcbfce5bec4ebd5d4bb9e69da57daa92fcfa768", size = 2414743, upload-time = "2026-02-23T16:49:00.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/50/de09f69a74278a16f08f1d562047a2d6713783765ee3c6971881a2b21a3f/timm-1.0.25-py3-none-any.whl", hash = "sha256:bef7f61dd717cb2dbbb7e326f143e13d660a47ecbd84116e6fe33732bed5c484", size = 2565837, upload-time = "2026-02-23T16:48:58.324Z" }, +] + +[[package]] +name = "torch" +version = "2.12.0+cu130" +source = { registry = "https://download.pytorch.org/whl/cu130" } +dependencies = [ + { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, + { name = "cuda-toolkit", extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, + { name = "filelock" }, + { name = "fsspec" }, + { name = "jinja2" }, + { name = "networkx" }, + { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, + { name = "setuptools" }, + { name = "sympy" }, + { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "typing-extensions" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:bf5f067d3a4d713b75ccd6a0141f8133c7495a016b917ce6dcec1492e3da98b0", upload-time = "2026-05-12T23:51:35Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:fe5fefb784a370d1ba4959de6e87bcd3b35441040a99bffe32f5cd03bbc834c0", upload-time = "2026-05-12T23:52:00Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313-win_amd64.whl", hash = "sha256:6e728c5fdeffa19b3fa6a759ff585147851772789f3dc84dec5f8cbde0f7a5b0", upload-time = "2026-05-12T23:53:01Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fce821712a2881eafcfe9ddf646d953683ae39f2e4c9f9066c6ebe4adcc76495", upload-time = "2026-05-12T23:53:55Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:180389b4cebb5d8988e453ca35df8fbbf709734c35e882b6e9f4abaca979454a", upload-time = "2026-05-12T23:54:20Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp313-cp313t-win_amd64.whl", hash = "sha256:eb22ad632b19f6ab9e0852aa2229e9b1c7f5bab5220e39012b3056c31391ea02", upload-time = "2026-05-12T23:55:24Z" }, +] + +[[package]] +name = "torchvision" +version = "0.27.0+cu130" +source = { registry = "https://download.pytorch.org/whl/cu130" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, + { name = "torch" }, +] +wheels = [ + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:da81245777c47f6dfd60e02f510d9778fb7f6e23119e2fc1ea1bb06777aae338", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:afa4128f37066b83af9d426841a53147dd3c208efea893c93dc3eb6fa2af2287", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313-win_amd64.whl", hash = "sha256:31533c28f23bf642989a9ae12caa40a2f8cc9b443d556ba2ffb7a51f759e6a11", upload-time = "2026-05-13T02:00:46Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:bb511f033cd3d6f304dc25753d2a28a1d77aa4dd54a219242d9df7fa57d8dd0a", upload-time = "2026-05-12T16:20:44Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:0c375ac4e9a1c09308f81b73d111d50b76eec335dc91a1811ae370467db2cf47", upload-time = "2026-05-12T16:20:45Z" }, + { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp313-cp313t-win_amd64.whl", hash = "sha256:34d108e1ce8255e017bf1f732a51ab2e9ddffb443d118db499a0fbbeb0164650", upload-time = "2026-05-13T02:00:47Z" }, +] + +[[package]] +name = "tqdm" +version = "4.70.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0d/ea/b2a5bd54b28a324dae8211928b2d730b6547500342c7e6c6dea08bd0a485/tqdm-4.70.1.tar.gz", hash = "sha256:cefd0eca11b2a37a3aee776544d4f4ae913f02688135b5556b8788dfa474afc4", size = 171846, upload-time = "2026-09-11T07:25:16.601Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/03/921a3d3c75785aca9ebfbfcabfbc3a1be12e2ab5265deb026d55a5a3f83e/tqdm-4.70.1-py3-none-any.whl", hash = "sha256:c293e525e6fef9c20e8728fd4612df02a0aa31bb5fe91ecd93e123b1b7bffa73", size = 80199, upload-time = "2026-09-11T07:25:14.599Z" }, +] + +[[package]] +name = "triton" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/e1/a59a583de59b8f62c495d67c80ee3ea97d09e91ac80c4c6e76456ed8d8ac/triton-3.7.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:abdf6beaa89b1bcfb9a43cd990536ce66091a997841a4814b260b7bee4c88c3c", size = 188503209, upload-time = "2026-05-07T19:05:17.935Z" }, + { url = "https://files.pythonhosted.org/packages/30/b1/b7507bb9815d403927c8dd51d4158ed2e11751a92dbc118a044f247b6848/triton-3.7.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a35d7afe3f3f058e7ec49fcce09794049e0ffc5c59019ac25ec3413741b8c4e7", size = 201453566, upload-time = "2026-05-07T18:46:20.427Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8f/0bea7a6a0c989315c9135a1d7fb37e41905cfb3a17cbc1f10044ebd4cc3a/triton-3.7.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc1d61c172d257db80ddf42595131fb196ad2e9bdd751e90fe2ef13531734e8b", size = 188612899, upload-time = "2026-05-07T19:05:24.955Z" }, + { url = "https://files.pythonhosted.org/packages/e1/02/d96f57828d0912aec733b9bc7e0e7dbfd2c6f079a8fa433ac25cb93d1a30/triton-3.7.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70fb9bbdc9f400afc54bbf6eb2670af28829a6ae3996863317964783141daf56", size = 201553816, upload-time = "2026-05-07T18:46:27.49Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +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" } +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" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +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" } +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.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/31/3d74fa778a63b98b7374323befcc0be5ab3bd94afd4096a0124e7379152c/tzdata-2026.4.tar.gz", hash = "sha256:f1b8bd365d8d210c55353f4d7f8d6d8561c0ba50d704b700d195a9424bba0d79", size = 199350, upload-time = "2026-09-12T12:56:03.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/bc/8737e8d54cf51106118039b83f485a4783112fab49ea9d044b234978a46e/tzdata-2026.4-py2.py3-none-any.whl", hash = "sha256:c2169a8b0a7a5e9674da5a135ccdfb2b3e671b333ed9fed17b41f73c34476e81", size = 347494, upload-time = "2026-09-12T12:56:01.67Z" }, +] + +[[package]] +name = "urllib3" +version = "2.8.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" } +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" }, +] + +[[package]] +name = "wandb" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-sdk" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/10/c4481d12b26f57606d1ef7c8d56825ad6af769cbb8cd29ee501ac6bbbc2d/wandb-0.30.0.tar.gz", hash = "sha256:f2d7de3c2019204f493f3f9e9166071c2be36f74140af2e1409b4de0fd84c454", size = 40862616, upload-time = "2026-09-09T00:16:41.551Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/5a/83201590d1e84a3b7d0a0cc7b53ee1318def18ba5431a32b26a44e6694f6/wandb-0.30.0-py3-none-macosx_13_0_arm64.whl", hash = "sha256:f4f908ace761db42d239d100230df0b77eb9684924d962a762bba176d829a236", size = 23464329, upload-time = "2026-09-09T00:16:20.505Z" }, + { url = "https://files.pythonhosted.org/packages/35/b6/c0acf63242a0b8a3df9f877249ca260be80b86ecb08396fc34982967a50e/wandb-0.30.0-py3-none-macosx_13_0_x86_64.whl", hash = "sha256:9cf2492acd5c66ba7217667386e2a90535ccaec08079b97c389c3da5d15cde48", size = 25250085, upload-time = "2026-09-09T00:16:23.401Z" }, + { url = "https://files.pythonhosted.org/packages/91/69/0593b9e43cd3fc257a0f6ceaf5e078f2b28baf1968e00dfa1be98261ee68/wandb-0.30.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:72b564712e85e10d78d37ccdaef4a908d28cbb39240c9c00fa4dde567150c764", size = 24049519, upload-time = "2026-09-09T00:16:25.874Z" }, + { url = "https://files.pythonhosted.org/packages/26/13/775a4c7d87fb771a2ddb104ce7c5c5d393e48720e448b4e8c43aac7cd4ce/wandb-0.30.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:bad9412f137d02303bf178513e0109f4fed37a6c817604085a1a4151047d8790", size = 26105520, upload-time = "2026-09-09T00:16:28.146Z" }, + { url = "https://files.pythonhosted.org/packages/58/36/4974e9ec44c23dd28a39c8ee699f1b8911dd6619c932c3fe94b016bc8a1f/wandb-0.30.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f2cc20c033f1650d387ca073177e629f1e2a1b5c4be393698e3db4752b9cf3a", size = 24112309, upload-time = "2026-09-09T00:16:30.3Z" }, + { url = "https://files.pythonhosted.org/packages/05/77/5eddd97f33f581f4d167f41bbf4736f2a51ad7271b9c9ed5dceb6994cbd6/wandb-0.30.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e7dc3b0b1567f6a121d8f7a58131b5d085861139a653ef8bed1569c9be796721", size = 26320243, upload-time = "2026-09-09T00:16:32.878Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e7/821c363f0a74aa9826ca058d3f6f8f8e41697001a0a869b5ccc7eca5b0e4/wandb-0.30.0-py3-none-win_amd64.whl", hash = "sha256:217bde0a7c49482f26166a1a7bee760bb9e2658135b2d45a33aacabffec68817", size = 24083356, upload-time = "2026-09-09T00:16:36.766Z" }, + { url = "https://files.pythonhosted.org/packages/3a/60/fd40e8b1a6136f4df97739a503c239fb4dab67f093cb9cccb5a1dd9d1895/wandb-0.30.0-py3-none-win_arm64.whl", hash = "sha256:36d6d8a5b88b36ad82b0f7ffab79033a8bbba047b5a90c0b7e26d0cf3a09f0b6", size = 21788859, upload-time = "2026-09-09T00:16:39.088Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/ac/3a943d2792c9bb368aaa8b50121c0f778460ba2d7fbdc0a0366201d9e761/wcwidth-0.9.1.tar.gz", hash = "sha256:5823209b0d43af322ce698c689380d7c15ca31fa8e6e3be8459f27031bef0af5", size = 952410, upload-time = "2026-09-23T20:23:49.127Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/7c/130de33c0a7f6efecee28fef5711fc1f8d55ac33885a6b85f4f6689004ba/wcwidth-0.9.1-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:10b00ba23482e352f874d2e8135e7ace9da838646c7dd800566246bbd46125ff", size = 604219, upload-time = "2026-09-23T20:23:22.071Z" }, + { url = "https://files.pythonhosted.org/packages/33/7c/c7bb03da54de7ac5a08753e186b963f91847b04ed8ae5be136a4d5f52b75/wcwidth-0.9.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:40d936d72c9bdc10df43f93a8be502bc5024b487259139f66a328722c07f34a9", size = 609038, upload-time = "2026-09-23T20:23:24.941Z" }, + { url = "https://files.pythonhosted.org/packages/0b/71/f57effdf895c2d6d49333f1d6833a9f5438725c55a04ed3124a1c95bb3aa/wcwidth-0.9.1-cp310-abi3-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:69bb970cf5652b88cfdb9d3fdd1764fc15e5f8ad531643e7bb3e894cd969740e", size = 761464, upload-time = "2026-09-23T20:23:32.425Z" }, + { url = "https://files.pythonhosted.org/packages/4f/16/15b03d8fb7a747d0d2cf4a33da7b1b3e092493c58780f6589d5b1e9e3b49/wcwidth-0.9.1-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b5da43d6967668982e44a52fb551967d293f86d26cd86036ac95bbdd34394ed9", size = 770483, upload-time = "2026-09-23T20:23:28.128Z" }, + { url = "https://files.pythonhosted.org/packages/e2/a0/834886b30e3b885a5a96e8358f1b3917bc0bac43ae4178d77f0c210d079b/wcwidth-0.9.1-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:747fb724223f417a17541a95a17c1dac3a8ef9a0cf41684950f0eab191a35f65", size = 768443, upload-time = "2026-09-23T20:23:33.875Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ae/1b7597e0132ebc2c920632f39d8c1c61881345c9b480c0a95eb91e7460fa/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6e1272b7986cefe79783737e38bdb9eaae0682b333c7bd132024441193dd5ce7", size = 781171, upload-time = "2026-09-23T20:23:29.46Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/32149e3b481953f4ef35f38f166e2532886d33ae54ccdd71393f821dfad9/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:fe021c4d8de9d36c31a0cb41d0d2546dadd3b0708a301f1a0c66ce200851831f", size = 781576, upload-time = "2026-09-23T20:23:35.504Z" }, + { url = "https://files.pythonhosted.org/packages/d6/72/1ee3dff67697bda93bc56ec9f7b3b89609cd64b9abb328512a2f22eb9e47/wcwidth-0.9.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:708158c082364af442f9983de7b6ec9ac0d2e1b825ada25f0911b1f138d55405", size = 783526, upload-time = "2026-09-23T20:23:36.937Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0a/e94f19a60f6127bcf3dfcf223ca05a37650d57b37b5ed623597c842ce7ca/wcwidth-0.9.1-cp310-abi3-win32.whl", hash = "sha256:356376852357b8fca71fe5415808ec421679e04b4a98eb7c9cb6a7984b911a05", size = 592136, upload-time = "2026-09-23T20:23:43.774Z" }, + { url = "https://files.pythonhosted.org/packages/3c/ff/d884d2ec7dcdc86cda742a86c7160bc726dbccae76d7ae1f9ac833c26680/wcwidth-0.9.1-cp310-abi3-win_amd64.whl", hash = "sha256:991d1c8834f548e9c1f16432075ee84638e122312556bbf1ed595ea8fffc4673", size = 596738, upload-time = "2026-09-23T20:23:44.989Z" }, + { url = "https://files.pythonhosted.org/packages/fa/93/16e30d617b937272a2310a6e3c1f9d8f94984e19ad4a96eb935628e3e6b6/wcwidth-0.9.1-cp310-abi3-win_arm64.whl", hash = "sha256:61bd7aef9cafb6cb77a37a169998d7928ce82a51522146d11f60db9e7d1cb43a", size = 594700, upload-time = "2026-09-23T20:23:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/96/a2/f06f2e0be4895e5943d358755b51968ace85774cf0a4cc42b4dafb793832/wcwidth-0.9.1-py3-none-any.whl", hash = "sha256:e0c3a1c45c5b9550c6919a4449e95f5b177f6e165786376981db8f1addae9b21", size = 300656, upload-time = "2026-09-23T20:23:20.674Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", size = 226459, upload-time = "2026-04-02T18:49:12.72Z" }, +] + +[[package]] +name = "xxhash" +version = "4.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/a5/1386f35da1475fcaeef42581deae73417c6d2a6a0b2d2e8914de18844dcd/xxhash-4.0.1.tar.gz", hash = "sha256:d55bf4ef10eb09b8b6866790e083d26d087d84caa3cc0946ba87c3ca7ecaf7b7", size = 101513, upload-time = "2026-08-17T08:24:08.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/dd/c707286b527722f776e1fb81dd202c45623355ba1a2972337a2a26075b2b/xxhash-4.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:8c9fe122444e129881afd1d4d1c7ac0d3ce2d91b68c2b40173b6025ff1c31f9a", size = 43639, upload-time = "2026-08-17T08:20:54.945Z" }, + { url = "https://files.pythonhosted.org/packages/1b/3b/bb71639a0f95635f61936a6f2653599c4261b645ddddd8d00f9dfe3613e2/xxhash-4.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:1f3346c5c287ac3c7f38b20380f55e8768230e7252af59fabcf3b87ab21e4256", size = 40657, upload-time = "2026-08-17T08:22:12.616Z" }, + { url = "https://files.pythonhosted.org/packages/3c/91/76f3f5385faa9886a36f21fcc603f40b4c0c40ce622382f133160c48b4d9/xxhash-4.0.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:4e5141543c7f7fe3087500bbb4ac2845cb528a980aa91f8f1e661e2292ff4a5d", size = 34708, upload-time = "2026-08-17T08:35:24.614Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4a/f48f0e3e1b1ab072979fff2a5be899234e28090883e8b519d0b10215d708/xxhash-4.0.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:f09ee747e2a5f876cc5ad56947734811828335e13b403dd8ea1e06d77a9dd48d", size = 35650, upload-time = "2026-08-17T08:21:09.337Z" }, + { url = "https://files.pythonhosted.org/packages/c4/53/b73d7472b196101ad1f57ed0674af3af803ac3e9ec2feadd650a7b262562/xxhash-4.0.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:acf52474b2494ef66dc7e0fb6d5e2b50c18313039ad4d275fbf9f9907c804bc5", size = 37958, upload-time = "2026-08-17T08:22:10.616Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f2/024946ad8fa532074af4e4380179da54b7ec9facc8bd0b279ec0fac4e63a/xxhash-4.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1b3cccf75eeb5b01639b2feadb042a8e07889293b7ca72fa2985e7dcb64763cf", size = 38032, upload-time = "2026-08-17T08:22:09.535Z" }, + { url = "https://files.pythonhosted.org/packages/da/e0/934af8d99bb5885711006bec30a691f728edd513d2c40f053f887d8e7577/xxhash-4.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd878d32f5c6cbce9783f8d6897561fb772211edba9dde49d85672b88ed45276", size = 35895, upload-time = "2026-08-17T08:35:16.53Z" }, + { url = "https://files.pythonhosted.org/packages/20/5f/a8011f6a1558f7ca66d9077bb4f192b1871afcea62fbd5733605d2015755/xxhash-4.0.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:41e579025a6e13a99e6d71e39c9cfc621a0dcdbbf19106325e145fa858f2d794", size = 259464, upload-time = "2026-08-17T08:21:06.72Z" }, + { url = "https://files.pythonhosted.org/packages/ff/89/9665a44397547e7a3d58c0942425a976d58dcfd4b538f33220a312bf6912/xxhash-4.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74379a577a9f3b6afbdedf1b90e5c7764467051977f18a326d7d607336d743bd", size = 283949, upload-time = "2026-08-17T08:22:17.003Z" }, + { url = "https://files.pythonhosted.org/packages/34/2d/78774141266457468f29f3f5803092df4db87d8148ba74e4debd041649db/xxhash-4.0.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:acb31ecdd1a97fab5cd39a84ee9f515e727d319f796fec48703b8339b9998360", size = 303898, upload-time = "2026-08-17T08:35:27.951Z" }, + { url = "https://files.pythonhosted.org/packages/59/48/d78d22de576b42528bff87c14207de50de4f0b888221a50ff7c9d675d670/xxhash-4.0.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5b7875ac1a2edcb691f27642b8b94b904baa6bcecb7d79c72df2228ba8cb5c51", size = 287241, upload-time = "2026-08-17T08:21:13.042Z" }, + { url = "https://files.pythonhosted.org/packages/4c/de/7a1755a59c59fd46176f293bbdd99e399a6537ba9537fc723aa4d1bf6e27/xxhash-4.0.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4751f1d7eecae6b2d2a773630f1a7248f125c9a92a456694d03c15bceffc9d68", size = 519856, upload-time = "2026-08-17T08:22:15.35Z" }, + { url = "https://files.pythonhosted.org/packages/6f/fb/76580c08e916507859b0f335393cb5fdc59452c4402edbc6bcca6e47e7df/xxhash-4.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a51b061d54cda8b83e62c44458bfbf0dabbef9b975dd9649952ba5076b9f349", size = 268572, upload-time = "2026-08-17T08:22:14.533Z" }, + { url = "https://files.pythonhosted.org/packages/d0/2b/1abde3e07b8f2077a38b4fbfaf764115008bfe0ff03bc7756a52c9fd0607/xxhash-4.0.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:74a164e8b63f1e9cf35c9a7809d082b033d1a00e7375d5d814415436e7867e57", size = 344967, upload-time = "2026-08-17T08:35:23.569Z" }, + { url = "https://files.pythonhosted.org/packages/5c/15/80b6ddf0732eef48a8b5fe717398274794392bd6dbe82af38d189d214772/xxhash-4.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f5e5c6df4b703afcbe9352d238a51efd97c3b91fdc3a2052e40fdacb1e7505f", size = 279956, upload-time = "2026-08-17T08:21:24.97Z" }, + { url = "https://files.pythonhosted.org/packages/77/e0/11cbc43c205bf81fad50d69c7319cd1b1ccc01a66cd4fb8766357126c43d/xxhash-4.0.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d54b8ae068af532c8cdf56abb9e09a60fbe7b10792444c9c27987bb6d3b450fa", size = 307583, upload-time = "2026-08-17T08:22:22.541Z" }, + { url = "https://files.pythonhosted.org/packages/1c/11/cf0bc07feb2791045b6ac075d4bf64f1a5beedef2f46ae70d7104d63a19f/xxhash-4.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1749f0688020209fe0d357ce1e1cd9ec9c6161ed0405ea949d24581c4c43fa91", size = 265848, upload-time = "2026-08-17T08:35:31.298Z" }, + { url = "https://files.pythonhosted.org/packages/d4/c4/7ada4bea2a2795073dfc42d96842930efbe7a0c1857ef4b522e4e90e5d83/xxhash-4.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:94ac8a6b8c47951173f0b67bf862bcb971bf24e493b9fbbdb0e010cbbc7d9f54", size = 284409, upload-time = "2026-08-17T08:21:23.156Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f4/d8ce83dd6b99ccfbdadaf2db968ae40334d2e5f73a0297e593b9ddb3df39/xxhash-4.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a33de7633c948ab2dc144af370a66e7e7af29b425dcd0f7e4f59689fb9391b53", size = 335921, upload-time = "2026-08-17T08:22:21.802Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9f/f47d8724bd8bc45b395b06b7cacea2dae0d00031af1b707184a091161df6/xxhash-4.0.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:247ece770647c0aef080561fa996f9774b4dadce2d0c42eeb98229db7dcf820d", size = 487023, upload-time = "2026-08-17T08:22:19.729Z" }, + { url = "https://files.pythonhosted.org/packages/57/54/2d87098f3371cc1e42dd04d2285ad56bca4c56667bc501bff02d2b9fd6b5/xxhash-4.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a4553d36cc0b7fce1f35ba8a94dfd775aa3ed12f5eab2dc3b46ac75a0706b0bb", size = 264333, upload-time = "2026-08-17T08:35:27.001Z" }, + { url = "https://files.pythonhosted.org/packages/27/b8/93795ca5898ec7d7d0455283ad261c0fc76b4f0c0a69e86233bd7badb0bd/xxhash-4.0.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:87aa309a93bd5ec13f14309a305ff4e9bf74c5363fc46c264c0a22edfd5b0670", size = 20581, upload-time = "2026-08-17T08:21:39.207Z" }, + { url = "https://files.pythonhosted.org/packages/b6/96/926f7335a0a1647952c00421e8da877f658094f61336306c7cadc335c94d/xxhash-4.0.1-cp313-cp313-win32.whl", hash = "sha256:cba763d84b06bda2c38d5185dee76f1b9dfdc0789e96e476d9e10005526d0788", size = 34449, upload-time = "2026-08-17T08:22:29.362Z" }, + { url = "https://files.pythonhosted.org/packages/ea/61/8a5aeb811de093bab3434e77eff0e9461624a1a56a6a93d315d080aab2aa/xxhash-4.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:97b94fb29abf21f5f0bde15f7dbdd3a4aa2dc59f37026adc7b4bee8563b84375", size = 36520, upload-time = "2026-08-17T08:35:34.852Z" }, + { url = "https://files.pythonhosted.org/packages/04/14/97f3c74000ca36955e9cb86f6d270dcd5848b5c65afa623453f5cf2d83d6/xxhash-4.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:08ed8da18cd4fd0a6a5d6a444852d8fbd0e565388a74a4937085451b5f1a312a", size = 33428, upload-time = "2026-08-17T08:21:31.713Z" }, +] diff --git a/dev/releases/mambo_v3/ucloud_release.json b/dev/releases/mambo_v3/ucloud_release.json new file mode 100644 index 0000000..9d4c8bf --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_release.json @@ -0,0 +1,23 @@ +{ + "environment_id": "ucloud-replace-with-allocation-and-gpu", + "v2_python": "/work/envs/mambo-v2/bin/python", + "v3_python": "/work/envs/mambo-v3/bin/python", + "metrics_python": "/work/envs/mambo-metrics/bin/python", + "legacy_source": "/work/mambo-v2-source", + "legacy_weights": "/work/models/MAMBO", + "hf_cache": "/work/models/huggingface/hub", + "bundle": "/work/models/mambo-v3-bundle", + "manifest": "/work/global-lepi-test-manifest.json", + "root": "/work/global_lepi", + "output": "/work/mambo-release-ucloud", + "cuda_visible_devices": "0", + "quality_device": "cuda:0", + "quality_batch_size": 32, + "qualification_count": 256, + "threads": 4, + "quality_presets": ["full"], + "timing_presets": ["full", "north_europe"], + "timing_devices": ["cpu", "cuda:0"], + "cpu_batches": [1, 8], + "gpu_batches": [1, 8, 32] +} diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py new file mode 100644 index 0000000..975e4e5 --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -0,0 +1,229 @@ +"""Plan and run the five release pipelines on an allocated UCloud node.""" + +import argparse +import hashlib +import json +import os +import platform +import subprocess +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +ROOT = Path(__file__).resolve().parents[3] +RECIPE = "rotation30_pad25_3" +VARIANTS = ("v2", "torch", "onnx", "torch-tta", "onnx-tta") +PATHS = ("v2_python", "v3_python", "metrics_python", "legacy_source", "legacy_weights", "hf_cache", "bundle", "manifest", "root", "output") + + +def configuration(path): + data = json.loads(path.read_text()) + for key in (*PATHS, "timing_manifest", "timing_root"): + if key in data: + data[key] = str((path.parent / data[key]).resolve()) + for key in ("quality_batch_size", "qualification_count", "threads"): + if not isinstance(data[key], int) or data[key] < 1: + raise ValueError(f"Positive integer required: {key}") + for key in ("cpu_batches", "gpu_batches"): + if not data[key] or any(not isinstance(b, int) or b < 1 for b in data[key]): + raise ValueError(f"Positive batches required: {key}") + for key in ("quality_presets", "timing_presets"): + if not data[key] or not set(data[key]) <= {"full", "europe", "north_europe"}: + raise ValueError("Use presets shared with V2") + if "full" not in data["quality_presets"]: + raise ValueError("In-domain quality must include the global vocabulary") + if not data["environment_id"] or not data["timing_devices"] or not set(data["timing_devices"]) <= {"cpu", "cuda:0"}: + raise ValueError("Require environment identity and CPU/CUDA timing devices") + if data["quality_device"] not in ("cpu", "cuda:0"): + raise ValueError("Unsupported quality device") + return data + + +def jobs(config, phase): + """Pure plan construction: no dataset access, imports of runtimes, or execution.""" + timing = phase == "benchmark" + manifest = config.get("timing_manifest", config["manifest"]) if timing else config["manifest"] + root = config.get("timing_root", config["root"]) if timing else config["root"] + shared = ["--manifest", manifest, "--root", root, "--threads", str(config["threads"])] + bank_size = max(32, *config["cpu_batches"], *config["gpu_batches"]) + planned = [] + for trial in range(3 if timing else 1): + variants = list(VARIANTS) + if trial == 1: + variants.reverse() + devices = config["timing_devices"] if timing else [config["quality_device"]] + for device in devices: + for variant in variants: + legacy = variant == "v2" + if legacy: + command = [ + config["v2_python"], + "-P", + "-m", + "dev.releases.mambo_v3.legacy_evaluation", + phase, + "--source", + config["legacy_source"], + "--weights", + config["legacy_weights"], + ] + if device == "cpu": + command += ["--cpu-float32"] + else: + module = "benchmark" if timing else "evaluate" + command = [config["v3_python"], "-m", f"dev.releases.mambo_v3.{module}"] + if not timing: + command += ["collect", "--decode-workers", str(config["threads"])] + command += [ + "--bundle", + config["bundle"], + "--backend", + variant.split("-")[0], + "--precision", + "auto", + "--tta", + RECIPE if variant.endswith("-tta") else "none", + ] + command += [*shared, "--device", device, "--presets", *config["timing_presets" if timing else "quality_presets"]] + if timing: + command += [ + "--batches", + *map(str, config["cpu_batches"] if device == "cpu" else config["gpu_batches"]), + "--bank-size", + str(bank_size), + ] + else: + command += ["--batch-size", str(config["quality_batch_size"])] + if phase == "qualification": + command += ["--count", str(config["qualification_count"])] + name = f"trial-{trial}-{variant}-{device.replace(':', '-')}" if timing else variant + command += ["--output", str(Path(config["output"]) / phase / name)] + planned.append({"name": name, "variant": variant, "device": device, "legacy": legacy, "command": command}) + return planned + + +def fingerprint(config): + manifest = json.loads(Path(config["manifest"]).read_text()) + if manifest.get("dataset") != "global-lepi-test" or len(manifest["records"]) != 632913: + raise ValueError("Require the verified original 632,913-image UCloud test manifest") + if any(r["split"] != "test" for r in manifest["records"]) or manifest.get("provenance", {}).get("test_set") != "0": + raise ValueError("Preserve original test membership; no resplitting") + hashes = {key: file_hash(config[key]) for key in ("manifest", "timing_manifest") if key in config} + hashes["bundle"] = file_hash(Path(config["bundle"]) / "release.json") + hashes["scripts"] = { + str(p.relative_to(ROOT)): file_hash(p) + for folder in (ROOT / "dev/releases/mambo_v3", ROOT / "deployment/mambo_deploy") + for p in sorted(folder.glob("*.py")) + } + hashes["environment_lock"] = file_hash(Path(__file__).with_name("ucloud_env") / "uv.lock") + hashes["revision"] = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + return {"config": config, "inputs": hashes} + + +def validated_report(directory): + report = json.loads((directory / "report.json").read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete job: {directory}; preserve it elsewhere before resuming") + for preset, digest in report.get("csv_sha256", {}).items(): + if file_hash(directory / preset / "mini_metric.csv") != digest: + raise ValueError(f"Changed predictions: {directory}") + return report + + +def bank_identity(directory, report): + records = report["samples"] + if isinstance(records, int): + records = json.loads((directory / "samples.json").read_text()) + if len(records) != report["samples"] or file_hash(directory / "samples.json") != report["sample_ids_sha256"]: + raise ValueError("Changed legacy timing image bank") + return hashlib.sha256(json.dumps(records, sort_keys=True).encode()).hexdigest() + + +def run(config, phase, resume=False): + frozen = fingerprint(config) + output = Path(config["output"]) / phase + planned = jobs(config, phase) + if phase in ("full", "benchmark"): + prior = json.loads((Path(config["output"]) / "qualification/plan.json").read_text()) + if prior["status"] != "complete" or prior["fingerprint"] != frozen: + raise ValueError("Complete qualification with this exact configuration and revision first") + for job in prior["jobs"]: + directory = Path(config["output"]) / "qualification" / job["name"] + validated_report(directory) + if file_hash(directory / "report.json") != prior["reports_sha256"][job["name"]]: + raise ValueError("Qualification report changed") + if output.exists(): + if not resume: + raise FileExistsError("Use a fresh output or --resume to verify and reuse completed jobs") + plan = json.loads((output / "plan.json").read_text()) + if plan["fingerprint"] != frozen or plan["jobs"] != planned: + raise ValueError("Changed campaign configuration, inputs or code; use a fresh output") + else: + output.mkdir(parents=True) + plan = { + "fingerprint": frozen, + "environment_id": config["environment_id"], + "platform": platform.platform(), + "jobs": planned, + "completed": [], + "reports_sha256": {}, + } + plan.pop("error", None) + plan["status"] = "running" + write_json(output / "plan.json", plan) + identities = set() + try: + for job in planned: + directory = output / job["name"] + if directory.exists() and not (directory / "report.json").exists(): + raise ValueError(f"Partial job {directory}; preserve it elsewhere before resuming") + if not directory.exists(): + env = dict( + os.environ, + CUDA_VISIBLE_DEVICES=config["cuda_visible_devices"], + OMP_NUM_THREADS=str(config["threads"]), + MKL_NUM_THREADS=str(config["threads"]), + OPENBLAS_NUM_THREADS="1", + PYTHONHASHSEED="0", + HF_HUB_OFFLINE="1", + HF_HUB_CACHE=config["hf_cache"], + PYTHONPATH=f"{config['legacy_source']}:{ROOT}" if job["legacy"] else str(ROOT), + ) + print(job["name"], flush=True) + with (output / f"{job['name']}.log").open("w") as stream: + subprocess.run(job["command"], cwd=ROOT, env=env, check=True, stdout=stream, stderr=subprocess.STDOUT) + report = validated_report(directory) + digest = file_hash(directory / "report.json") + if job["name"] in plan["reports_sha256"] and plan["reports_sha256"][job["name"]] != digest: + raise ValueError("A completed job report changed") + if phase != "benchmark": + identities.add(report["sample_ids_sha256"]) + else: + identities.add(bank_identity(directory, report)) + if len(identities) != 1: + raise ValueError("Different sample identities across pipelines") + plan["reports_sha256"][job["name"]] = digest + if job["name"] not in plan["completed"]: + plan["completed"].append(job["name"]) + write_json(output / "plan.json", plan) + plan["status"] = "complete" + except Exception as error: + plan.update(status="failed", error=f"{type(error).__name__}: {error}") + raise + finally: + write_json(output / "plan.json", plan) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("phase", choices=("qualification", "full", "benchmark")) + parser.add_argument("--config", type=Path, required=True) + parser.add_argument("--dry-run", action="store_true", help="Print jobs without accessing data or starting processes") + parser.add_argument("--resume", action="store_true", help="Verify/reuse complete jobs; never overwrite partial results") + args = parser.parse_args() + config = configuration(args.config.resolve()) + if args.dry_run: + print(json.dumps(jobs(config, args.phase), indent=2)) + else: + run(config, args.phase, args.resume) diff --git a/dev/releases/mambo_v3/ucloud_summary.py b/dev/releases/mambo_v3/ucloud_summary.py new file mode 100644 index 0000000..49b15fd --- /dev/null +++ b/dev/releases/mambo_v3/ucloud_summary.py @@ -0,0 +1,101 @@ +"""Validate completed UCloud evidence and export environment-labelled quality/speed tables.""" + +import argparse +import csv +import json +import statistics +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION +from dev.releases.mambo_v3.ucloud_release import VARIANTS, bank_identity, validated_report + + +def summarize(root, output): + plans = {phase: json.loads((root / phase / "plan.json").read_text()) for phase in ("full", "benchmark")} + if any(p["status"] != "complete" for p in plans.values()): + raise ValueError("Both collection and benchmark phases must be complete") + if plans["full"]["fingerprint"] != plans["benchmark"]["fingerprint"]: + raise ValueError("Quality and timing campaign identities differ") + data = { + "environment_id": plans["full"]["environment_id"], + "fingerprint": plans["full"]["fingerprint"], + "quality": [], + "speed": [], + "runtime_reports": {}, + "metric_revision": REVISION, + "policy": "Original full test split; no threshold selection on test; all and known truth; timings isolated from collection", + } + identities, banks = set(), set() + for phase, plan in plans.items(): + if set(plan["completed"]) != {j["name"] for j in plan["jobs"]}: + raise ValueError("Incomplete job list") + if {j["variant"] for j in plan["jobs"]} != set(VARIANTS): + raise ValueError("Missing release variant") + for job in plan["jobs"]: + directory = root / phase / job["name"] + r = validated_report(directory) + if file_hash(directory / "report.json") != plan["reports_sha256"][job["name"]]: + raise ValueError("Changed job report") + data["runtime_reports"][f"{phase}/{job['name']}"] = {k: v for k, v in r.items() if k not in ("samples", "cells")} + if phase == "full": + if r["samples"] != 632913: + raise ValueError("Not the complete original test set") + identities.add(r["sample_ids_sha256"]) + for preset, digest in r["csv_sha256"].items(): + m = json.loads((directory / preset / "metrics.json").read_text()) + if m["source_sha256"] != digest or m["metric_schema"] != METRIC_SCHEMA or m["mini_metrics_revision"] != REVISION: + raise ValueError("Stale or incompatible mini_metrics output") + for scope in ("all", "known"): + for level, rank in enumerate(("species", "genus", "family")): + data["quality"].append( + { + "environment_id": data["environment_id"], + "variant": job["variant"], + "preset": preset, + "scope": scope, + "rank": rank, + **m["ranks"][rank], + **{k: v[str(level)] for k, v in m[scope].items()}, + } + ) + else: + banks.add(bank_identity(directory, r)) + for c in r["cells"]: + seconds = c["end_to_end"]["seconds"] + if len(seconds) != 7 or any(v <= 0 for v in seconds): + raise ValueError("Require seven positive completed observations") + data["speed"].append( + { + "environment_id": data["environment_id"], + "variant": job["variant"], + "device": job["device"], + "trial": job["name"], + "preset": c["preset"], + "batch_size": c["batch_size"], + "images_per_second": c["batch_size"] / statistics.median(seconds), + "seconds": seconds, + "peak_host_rss_mib": r["peak_rss_kib_linux"] / 1024, + } + ) + if len(identities) != 1 or len(banks) != 1: + raise ValueError("Mismatched quality populations or timing image banks") + data["sample_ids_sha256"] = next(iter(identities)) + data["timing_bank_sha256"] = next(iter(banks)) + output.mkdir(parents=True, exist_ok=False) + write_json(output / "ucloud-summary.json", data) + for name in ("quality", "speed"): + with (output / f"{name}.csv").open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=list(data[name][0]), lineterminator="\n") + writer.writeheader() + writer.writerows(data[name]) + return data + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + summarize(args.root, args.output) diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 1f25026..f2f7c6e 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -590,8 +590,10 @@ the [measured release report](mambo-v3-evaluation.md), [real-world MAMBO_v2/v3 comparison](mambo-release-comparison.md), [deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) and [consumer guide](../deployment/README.md). The -[evaluation workflow](../dev/releases/mambo_v3/evaluation.md) prepares the remaining -in-domain work on UCloud using the original split. D remains preparation only: +[UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) now prepares the +original in-domain split, public model downloads and five-pipeline CPU/GPU +comparison with an isolated, locked `uv` environment. Remote qualification and +full evaluation remain outstanding. D remains preparation only: training-source/best-epoch provenance, redistribution notices and final publication review are open. No model release has been published or tagged. diff --git a/tests/releases/test_release_download.py b/tests/releases/test_release_download.py new file mode 100644 index 0000000..3425f82 --- /dev/null +++ b/tests/releases/test_release_download.py @@ -0,0 +1,69 @@ +"""Verified automatic model caching, offline behavior and local-bundle isolation.""" + +import hashlib +import io +import json +from pathlib import Path + +import pytest + +from deployment.mambo_deploy import download +from deployment.mambo_deploy.bundle import Bundle + + +def test_download_publishes_only_verified_bytes_and_reuses_cache(tmp_path, monkeypatch): + payload = b"model bytes" + calls = [] + + def get(url, timeout): + calls.append(url) + return io.BytesIO(payload) + + monkeypatch.setattr(download, "urlopen", get) + target = tmp_path / "weights" + args = dict(size=len(payload), sha256=hashlib.sha256(payload).hexdigest()) + download.fetch_file("https://example.test/weights", target, **args) + download.fetch_file("https://example.test/weights", target, **args, offline=True) + assert target.read_bytes() == payload and len(calls) == 1 + target.write_bytes(b"changed") + with pytest.raises(ValueError, match="integrity"): + download.fetch_file("https://example.test/weights", target, **args) + assert len(calls) == 1 + + +@pytest.mark.parametrize("payload", [b"short", b"bad-data", b"too-long-data"]) +def test_failed_download_never_leaves_a_completed_file(tmp_path, monkeypatch, payload): + monkeypatch.setattr(download, "urlopen", lambda *a, **k: io.BytesIO(payload)) + with pytest.raises(ValueError): + download.fetch_file("https://example.test/weights", tmp_path / "model", size=8, sha256=hashlib.sha256(b"expected").hexdigest()) + assert list(tmp_path.iterdir()) == [] + + +def test_offline_missing_cache_does_not_connect(tmp_path, monkeypatch): + monkeypatch.setattr(download, "urlopen", lambda *a, **k: pytest.fail("network used")) + with pytest.raises(FileNotFoundError, match="not cached"): + download.fetch_file("https://example.test/weights", tmp_path / "model", size=0, sha256="0" * 64, offline=True) + + +def test_packaged_metadata_and_automatic_predictor(tmp_path, monkeypatch): + from deployment.mambo_deploy import Predictor + + monkeypatch.delenv("MAMBO_BUNDLE", raising=False) + monkeypatch.delenv("MAMBO_OFFLINE", raising=False) + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + monkeypatch.setattr(download, "urlopen", lambda *a, **k: pytest.fail("metadata should be packaged")) + p = Predictor() + assert p.bundle.download and p.preset == "europe" + monkeypatch.setenv("MAMBO_OFFLINE", "1") + assert Predictor().bundle.root == p.bundle.root + with pytest.raises(FileNotFoundError, match="not cached"): + p.bundle.profile("onnx") + explicit = Predictor(bundle=p.bundle.root) + assert not explicit.bundle.download + with pytest.raises(FileNotFoundError): + explicit.bundle.profile("onnx") + manifest = json.loads((p.bundle.root / "release.json").read_text()) + for relative in manifest["files"]: + if relative not in manifest["origins"]: + Bundle(p.bundle.root).file(relative) + assert Path(download.__file__).with_name("default_bundle.json").exists() diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py new file mode 100644 index 0000000..9f2b3ab --- /dev/null +++ b/tests/releases/test_ucloud_release.py @@ -0,0 +1,135 @@ +"""Offline UCloud plan and evidence-integrity contracts.""" + +import json +from pathlib import Path + +import pytest + +from dev.releases.mambo_v3.ucloud_release import RECIPE, configuration, jobs, validated_report + +CONFIG = Path("dev/releases/mambo_v3/ucloud_release.json") + + +def test_quality_plan_preserves_global_population_and_legacy_isolation(): + config = configuration(CONFIG.resolve()) + plan = jobs(config, "qualification") + assert len(plan) == 5 + for job in plan: + command = job["command"] + assert command[command.index("--presets") + 1] == "full" + assert command[command.index("--count") + 1] == "256" + if job["legacy"]: + assert "-P" in command and "--precision" not in command + else: + assert command[command.index("--precision") + 1] == "auto" + assert command[command.index("--tta") + 1] == (RECIPE if job["variant"].endswith("tta") else "none") + assert all("--count" not in j["command"] for j in jobs(config, "full")) + + +def test_benchmark_bank_and_trials_match_across_backends(): + config = configuration(CONFIG.resolve()) + config["gpu_batches"] = [1, 8, 32, 64] + plan = jobs(config, "benchmark") + assert len(plan) == 30 and len({j["name"] for j in plan}) == 30 + for j in plan: + c = j["command"] + assert c[c.index("--bank-size") + 1] == "64" + if j["legacy"] and j["device"] == "cpu": + assert "--cpu-float32" in c + assert plan[0]["variant"] == "v2" and plan[10]["variant"] == "onnx-tta" + + +def test_configuration_rejects_regional_only_quality(tmp_path): + config = json.loads(CONFIG.read_text()) + config["quality_presets"] = ["north_europe"] + p = tmp_path / "config.json" + p.write_text(json.dumps(config)) + with pytest.raises(ValueError, match="global"): + configuration(p) + + +def test_completed_job_rejects_changed_predictions(tmp_path): + p = tmp_path / "full" + p.mkdir() + (p / "mini_metric.csv").write_text("changed") + (tmp_path / "report.json").write_text(json.dumps({"status": "complete", "csv_sha256": {"full": "0" * 64}})) + with pytest.raises(ValueError, match="Changed predictions"): + validated_report(tmp_path) + (tmp_path / "report.json").write_text(json.dumps({"status": "failed"})) + with pytest.raises(ValueError, match="Incomplete job"): + validated_report(tmp_path) + + +def test_bank_identity_matches_legacy_and_portable_reports(tmp_path): + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.ucloud_release import bank_identity + + records = [{"path": "image.jpg", "sha256": "a" * 64}] + write_json(tmp_path / "samples.json", records) + legacy = {"samples": 1, "sample_ids_sha256": file_hash(tmp_path / "samples.json")} + assert bank_identity(tmp_path, legacy) == bank_identity(tmp_path, {"samples": records}) + write_json(tmp_path / "samples.json", [{"path": "different.jpg"}]) + with pytest.raises(ValueError, match="Changed legacy"): + bank_identity(tmp_path, legacy) + + +def test_summary_preserves_ranks_scopes_and_rejects_changed_evidence(tmp_path): + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION + from dev.releases.mambo_v3.ucloud_release import VARIANTS + from dev.releases.mambo_v3.ucloud_summary import summarize + + for phase in ("full", "benchmark"): + plan = dict(status="complete", fingerprint={"inputs": "same"}, environment_id="fixture", jobs=[], completed=[], reports_sha256={}) + for variant in VARIANTS: + directory = tmp_path / phase / variant + directory.mkdir(parents=True) + job = dict(name=variant, variant=variant, device="cpu") + plan["jobs"].append(job) + plan["completed"].append(variant) + report = dict(status="complete", peak_rss_kib_linux=1024) + if phase == "full": + (directory / "full").mkdir() + csv = directory / "full/mini_metric.csv" + csv.write_text("fixture predictions") + digest = file_hash(csv) + report.update(samples=632913, sample_ids_sha256="same-population", csv_sha256={"full": digest}) + metrics = dict( + source_sha256=digest, + metric_schema=METRIC_SCHEMA, + mini_metrics_revision=REVISION, + ranks={r: {"images": 632913} for r in ("species", "genus", "family")}, + all={"f1": {str(i): 0.4 for i in range(3)}}, + known={"f1": {str(i): 0.5 for i in range(3)}}, + ) + write_json(directory / "full/metrics.json", metrics) + else: + records = [{"path": "image.jpg"}] + report.update(samples=records, cells=[dict(preset="full", batch_size=8, end_to_end={"seconds": [2] * 7})]) + if variant == "v2": + write_json(directory / "samples.json", records) + report.update(samples=1, sample_ids_sha256=file_hash(directory / "samples.json")) + write_json(directory / "report.json", report) + plan["reports_sha256"][variant] = file_hash(directory / "report.json") + write_json(tmp_path / phase / "plan.json", plan) + result = summarize(tmp_path, tmp_path / "summary") + assert len(result["quality"]) == 30 and len(result["speed"]) == 5 + assert {r["f1"] for r in result["quality"]} == {0.4, 0.5} + assert all(r["images_per_second"] == 4 for r in result["speed"]) + (tmp_path / "full/v2/full/mini_metric.csv").write_text("changed") + with pytest.raises(ValueError, match="Changed predictions"): + summarize(tmp_path, tmp_path / "changed-summary") + + +def test_setup_rejects_wrong_metadata_before_downloads(tmp_path, monkeypatch): + from types import SimpleNamespace + + from dev.releases.mambo_v3 import setup_ucloud_release + + path = tmp_path / "wrong.parquet" + path.write_bytes(b"not the original snapshot") + monkeypatch.setattr(setup_ucloud_release, "default_bundle", lambda: pytest.fail("Downloaded before metadata validation")) + with pytest.raises(ValueError, match="metadata snapshot"): + setup_ucloud_release.setup(SimpleNamespace(metadata=path)) From 35398132347e5158b68f38985b064983558d49ad Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 21:47:41 +0200 Subject: [PATCH 057/221] fix: archive legacy UCloud source from repository root --- dev/releases/mambo_v3/setup_ucloud_release.py | 17 +++++++++++------ tests/releases/test_ucloud_release.py | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/dev/releases/mambo_v3/setup_ucloud_release.py b/dev/releases/mambo_v3/setup_ucloud_release.py index 5c394fa..400a8cf 100644 --- a/dev/releases/mambo_v3/setup_ucloud_release.py +++ b/dev/releases/mambo_v3/setup_ucloud_release.py @@ -20,6 +20,16 @@ from dev.releases.mambo_v3.prepare_ucloud import recover +def prepare_legacy_source(source): + """Extract the pinned package with paths relative to the repository root.""" + if not source.exists(): + source.parent.mkdir(parents=True, exist_ok=True) + archive = subprocess.check_output(["git", "archive", COMMIT, "mini_trainer"], cwd=HERE.parents[2]) + source.mkdir() + with tarfile.open(fileobj=io.BytesIO(archive)) as stream: + stream.extractall(source, filter="data") + + def setup(args): metadata = args.metadata.resolve() expected = tomllib.loads((HERE / "construction.toml").read_text())["source"]["sha256"] @@ -42,12 +52,7 @@ def setup(args): for item in needed: fetch_file(item["url"], cache / "archives" / item["path"], size=item["size"], sha256=item["sha256"], offline=args.offline) source = cache / "legacy-source" / COMMIT - if not source.exists(): - source.parent.mkdir(parents=True, exist_ok=True) - archive = subprocess.check_output(["git", "archive", COMMIT, "mini_trainer"], cwd=HERE) - source.mkdir() - with tarfile.open(fileobj=io.BytesIO(archive)) as stream: - stream.extractall(source, filter="data") + prepare_legacy_source(source) from huggingface_hub import hf_hub_download hf_cache = cache / "huggingface/hub" diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 9f2b3ab..a8440c9 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -133,3 +133,17 @@ def test_setup_rejects_wrong_metadata_before_downloads(tmp_path, monkeypatch): monkeypatch.setattr(setup_ucloud_release, "default_bundle", lambda: pytest.fail("Downloaded before metadata validation")) with pytest.raises(ValueError, match="metadata snapshot"): setup_ucloud_release.setup(SimpleNamespace(metadata=path)) + + +def test_legacy_archive_uses_repository_root_from_any_working_directory(tmp_path, monkeypatch): + import subprocess + + from dev.releases.mambo_v3.setup_ucloud_release import COMMIT, HERE, prepare_legacy_source + + monkeypatch.chdir(tmp_path) + source = tmp_path / "legacy" / COMMIT + prepare_legacy_source(source) + expected = subprocess.check_output(["git", "show", f"{COMMIT}:mini_trainer/__init__.py"], cwd=HERE.parents[2]) + assert (source / "mini_trainer/__init__.py").read_bytes() == expected + assert (source / "mini_trainer/deploy.py").is_file() + prepare_legacy_source(source) # Reuse the completed extraction on setup retries. From b2bd1a04518172bf4aa31ed04b27d34f61b00126 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 21:59:02 +0200 Subject: [PATCH 058/221] perf: overlap UCloud image hashing with resumable concurrent reads --- dev/releases/mambo_v3/hash_images.py | 91 +++++++++++++++++++ dev/releases/mambo_v3/setup_ucloud_release.py | 10 +- dev/releases/mambo_v3/ucloud-release.md | 9 +- tests/releases/test_hash_images.py | 69 ++++++++++++++ 4 files changed, 171 insertions(+), 8 deletions(-) create mode 100644 dev/releases/mambo_v3/hash_images.py create mode 100644 tests/releases/test_hash_images.py diff --git a/dev/releases/mambo_v3/hash_images.py b/dev/releases/mambo_v3/hash_images.py new file mode 100644 index 0000000..e6637d3 --- /dev/null +++ b/dev/releases/mambo_v3/hash_images.py @@ -0,0 +1,91 @@ +"""Concurrent image reads for cache warmup, with resumable verified hashes.""" + +import hashlib +import json +import os +import sqlite3 +import time +from concurrent.futures import FIRST_COMPLETED, ThreadPoolExecutor, wait +from pathlib import Path + +from dev.benchmarks.inference.onnx_inference import file_hash + + +def default_workers(): + cpus = len(os.sched_getaffinity(0)) if hasattr(os, "sched_getaffinity") else os.cpu_count() or 1 + return min(256, max(8, 2 * cpus)) + + +def hash_images(records, root, checkpoint, provenance, workers=None): + """Preserve record ordering; overlap cold reads without queuing the whole dataset.""" + workers = default_workers() if workers is None else workers + if workers < 1: + raise ValueError("Hash workers must be positive") + root = Path(root).resolve() + identity = hashlib.sha256(json.dumps([str(root), provenance, records], sort_keys=True).encode()).hexdigest() + connection = sqlite3.connect(checkpoint) + try: + connection.execute("CREATE TABLE IF NOT EXISTS identity (value TEXT NOT NULL)") + previous = connection.execute("SELECT value FROM identity").fetchone() + if previous and previous[0] != identity: + raise ValueError("Hash checkpoint belongs to different inputs; use a fresh cache") + if not previous: + connection.execute("INSERT INTO identity VALUES (?)", (identity,)) + connection.execute("CREATE TABLE IF NOT EXISTS hashes (idx INTEGER PRIMARY KEY, digest TEXT, size INTEGER, mtime INTEGER)") + connection.commit() + cached = {i: (digest, size, mtime) for i, digest, size, mtime in connection.execute("SELECT * FROM hashes")} + + def read(index): + path = (root / records[index]["path"]).resolve() + if not path.is_relative_to(root): + raise ValueError(f"Unsafe image path: {records[index]['path']}") + before = path.stat() + stamp = (before.st_size, before.st_mtime_ns) + prior = cached.get(index) + if prior and prior[1:] == stamp: + return index, prior[0], *stamp, True + digest = file_hash(path) + after = path.stat() + if (after.st_size, after.st_mtime_ns) != stamp: + raise ValueError(f"Image changed while hashing: {path}") + return index, digest, *stamp, False + + done_count = reused = 0 + started = reported = time.monotonic() + print(f"Hashing {len(records):,} images with {workers} concurrent readers; checkpoint: {checkpoint}", flush=True) + indices = iter(range(len(records))) + pending = set() + with ThreadPoolExecutor(max_workers=workers) as pool: + try: + for index in indices: + pending.add(pool.submit(read, index)) + if len(pending) >= workers * 2: + break + while pending: + finished, pending = wait(pending, timeout=5, return_when=FIRST_COMPLETED) + for future in finished: + index, digest, size, mtime, was_cached = future.result() + records[index]["sha256"] = digest + if not was_cached: + connection.execute("INSERT OR REPLACE INTO hashes VALUES (?, ?, ?, ?)", (index, digest, size, mtime)) + done_count += 1 + reused += was_cached + following = next(indices, None) + if following is not None: + pending.add(pool.submit(read, following)) + now = time.monotonic() + if now - reported >= 5 or not pending: + connection.commit() + elapsed = max(now - started, 0.001) + print( + f"Hashed {done_count:,}/{len(records):,} ({reused:,} reused); " + f"{done_count / elapsed:.1f} images/s; {len(pending)} queued/running; {elapsed:.0f}s elapsed", + flush=True, + ) + reported = now + finally: + connection.commit() + for future in pending: + future.cancel() + finally: + connection.close() diff --git a/dev/releases/mambo_v3/setup_ucloud_release.py b/dev/releases/mambo_v3/setup_ucloud_release.py index 400a8cf..351669c 100644 --- a/dev/releases/mambo_v3/setup_ucloud_release.py +++ b/dev/releases/mambo_v3/setup_ucloud_release.py @@ -16,6 +16,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.audit import HERE from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.hash_images import hash_images from dev.releases.mambo_v3.legacy_evaluation import COMMIT from dev.releases.mambo_v3.prepare_ucloud import recover @@ -85,13 +86,7 @@ def setup(args): records = recover(metadata, staging, reference) if len(records) != 632913: raise ValueError("Expected original 632,913-image test split") - for i, record in enumerate(records): - path = (root / record["path"]).resolve() - if not path.is_relative_to(root): - raise ValueError("Unsafe image path") - record["sha256"] = file_hash(path) - if i % 10000 == 0: - print(f"Hashed {i}/{len(records)} test images", flush=True) + hash_images(records, root, cache / "image-hashes.sqlite3", provenance, workers=args.hash_workers) temporary = manifest.with_suffix(".partial.json") write_json(temporary, {"schema_version": 1, "dataset": "global-lepi-test", "provenance": provenance, "records": records}) temporary.replace(manifest) @@ -123,5 +118,6 @@ def setup(args): parser.add_argument("--cache", type=Path, default=Path.home() / ".cache/mambo-ucloud") parser.add_argument("--v2-python", type=Path) parser.add_argument("--metrics-python", type=Path) + parser.add_argument("--hash-workers", type=int, help="Concurrent image readers; default twice CPU affinity, minimum 8, maximum 256") parser.add_argument("--offline", action="store_true") setup(parser.parse_args()) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 2cdb9e5..a1b2136 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -20,7 +20,14 @@ The Parquet path is the only required dataset argument. Images are expected at `images//` below its parent; use `--root` if mounted elsewhere. Preparation verifies the metadata snapshot, recovers original `set == "0"` membership and species/genus/family labels, and hashes all 632,913 test images. -It does not resplit the data. This first preparation pass reads the entire test set. +It does not resplit the data. Concurrent readers overlap cold WEKA reads to warm +the cache while hashing: by default twice the available CPU affinity (96 readers +for 48 CPUs), bounded to 8–256 readers. Override with `--hash-workers` if needed. +Progress prints every five seconds, including while reads are waiting. Completed +hashes are checkpointed to `image-hashes.sqlite3` and reused on retry when the +input identity and file size/modification time match; changed files are rehashed. +The final manifest is published only after every image completes. This first +preparation pass reads the entire test set; run only one preparation process per cache. The isolated uv project pins the metric implementation and runtime dependencies, with an [explicit CUDA PyTorch index](https://docs.astral.sh/uv/guides/integration/pytorch/). diff --git a/tests/releases/test_hash_images.py b/tests/releases/test_hash_images.py new file mode 100644 index 0000000..9c72767 --- /dev/null +++ b/tests/releases/test_hash_images.py @@ -0,0 +1,69 @@ +"""Concurrent cold reads retain serial hashes and resumable input identity.""" + +import hashlib +import threading + +import pytest + +from dev.releases.mambo_v3 import hash_images as module + + +def inputs(root, count=12): + records = [] + for i in range(count): + path = root / f"{i}.jpg" + path.write_bytes(f"image {i}".encode()) + records.append({"path": path.name, "labels": ["species", "genus", "family"]}) + return records + + +def test_concurrent_reads_preserve_hashes_order_and_resume(tmp_path, monkeypatch): + records = inputs(tmp_path) + original = module.file_hash + barrier = threading.Barrier(4) + lock = threading.Lock() + calls = [] + + def read(path): + with lock: + calls.append(path) + first = len(calls) <= 4 + if first: + barrier.wait(timeout=5) # A serial implementation cannot complete this. + return original(path) + + monkeypatch.setattr(module, "file_hash", read) + checkpoint = tmp_path / "hashes.sqlite3" + module.hash_images(records, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert len(calls) == 12 + assert [r["sha256"] for r in records] == [hashlib.sha256(f"image {i}".encode()).hexdigest() for i in range(12)] + fresh = [{k: v for k, v in r.items() if k != "sha256"} for r in records] + monkeypatch.setattr(module, "file_hash", lambda path: pytest.fail("Unchanged cached file was reread")) + module.hash_images(fresh, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert fresh == records + (tmp_path / "0.jpg").write_bytes(b"changed image bytes") + monkeypatch.setattr(module, "file_hash", original) + fresh = [{k: v for k, v in r.items() if k != "sha256"} for r in records] + module.hash_images(fresh, tmp_path, checkpoint, {"snapshot": "original"}, workers=4) + assert fresh[0]["sha256"] == original(tmp_path / "0.jpg") + with pytest.raises(ValueError, match="different inputs"): + module.hash_images([], tmp_path, checkpoint, {"snapshot": "other"}, workers=4) + + +def test_failure_saves_completed_hashes_and_rejects_unsafe_paths(tmp_path): + records = inputs(tmp_path) + (tmp_path / "5.jpg").unlink() + checkpoint = tmp_path / "hashes.sqlite3" + with pytest.raises(FileNotFoundError): + module.hash_images(records, tmp_path, checkpoint, {}, workers=1) + import sqlite3 + + with sqlite3.connect(checkpoint) as connection: + assert connection.execute("SELECT COUNT(*) FROM hashes").fetchone()[0] > 0 + with pytest.raises(ValueError, match="Unsafe"): + module.hash_images([{"path": "../escape.jpg"}], tmp_path, tmp_path / "unsafe.sqlite3", {}, workers=1) + + +def test_default_readers_use_allocated_cpu_affinity(monkeypatch): + monkeypatch.setattr(module.os, "sched_getaffinity", lambda pid: set(range(48))) + assert module.default_workers() == 96 From ba4416d2df4e9e76a197f74c77362c18a1e8299c Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 22:16:25 +0200 Subject: [PATCH 059/221] fix: preserve virtual environment interpreters in UCloud jobs --- dev/releases/mambo_v3/ucloud_release.py | 11 +++++++++-- tests/releases/test_ucloud_release.py | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index 975e4e5..ef3e1fd 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -21,7 +21,9 @@ def configuration(path): data = json.loads(path.read_text()) for key in (*PATHS, "timing_manifest", "timing_root"): if key in data: - data[key] = str((path.parent / data[key]).resolve()) + value = path.parent / Path(data[key]).expanduser() + # Resolving a venv Python symlink selects the base interpreter and loses its packages. + data[key] = os.path.abspath(value) if key.endswith("_python") else str(value.resolve()) for key in ("quality_batch_size", "qualification_count", "threads"): if not isinstance(data[key], int) or data[key] < 1: raise ValueError(f"Positive integer required: {key}") @@ -192,7 +194,12 @@ def run(config, phase, resume=False): ) print(job["name"], flush=True) with (output / f"{job['name']}.log").open("w") as stream: - subprocess.run(job["command"], cwd=ROOT, env=env, check=True, stdout=stream, stderr=subprocess.STDOUT) + try: + subprocess.run(job["command"], cwd=ROOT, env=env, check=True, stdout=stream, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + log = output / f"{job['name']}.log" + print(f"Job failed; log: {log}\n" + "\n".join(log.read_text(errors="replace").splitlines()[-25:]), flush=True) + raise report = validated_report(directory) digest = file_hash(directory / "report.json") if job["name"] in plan["reports_sha256"] and plan["reports_sha256"][job["name"]] != digest: diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index a8440c9..1466fa1 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -147,3 +147,22 @@ def test_legacy_archive_uses_repository_root_from_any_working_directory(tmp_path assert (source / "mini_trainer/__init__.py").read_bytes() == expected assert (source / "mini_trainer/deploy.py").is_file() prepare_legacy_source(source) # Reuse the completed extraction on setup retries. + + +def test_configuration_preserves_virtual_environment_interpreter(tmp_path): + import subprocess + import venv + + environment = tmp_path / "runtime" + venv.EnvBuilder(with_pip=False, symlinks=True).create(environment) + interpreter = environment / "bin/python" + config = json.loads(CONFIG.read_text()) + for key in ("v2_python", "v3_python", "metrics_python"): + config[key] = "runtime/bin/python" + path = tmp_path / "config.json" + path.write_text(json.dumps(config)) + loaded = configuration(path) + for key in ("v2_python", "v3_python", "metrics_python"): + assert loaded[key] == str(interpreter) + prefix = subprocess.check_output([loaded["v2_python"], "-c", "import sys; print(sys.prefix)"], text=True).strip() + assert Path(prefix) == environment From d60894a37466da0505490064f1a5ab33e549140d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 22:56:27 +0200 Subject: [PATCH 060/221] feat: validate ONNX CUDA optimization profiles at first use --- deployment/README.md | 8 +++ deployment/mambo_deploy/default_bundle.json | 4 +- deployment/mambo_deploy/onnx_session.py | 62 ++++++++++++++++++ deployment/mambo_deploy/predictor.py | 12 ++-- dev/releases/mambo_v3/benchmark.py | 1 + .../mambo_v3/deployment-qualification.md | 17 +++++ dev/releases/mambo_v3/evaluate.py | 1 + dev/releases/mambo_v3/qualify_bundle.py | 1 + dev/releases/mambo_v3/ucloud-release.md | 11 +++- tests/releases/test_deployment.py | 64 +++++++++++++++++++ 10 files changed, 169 insertions(+), 12 deletions(-) create mode 100644 deployment/mambo_deploy/onnx_session.py diff --git a/deployment/README.md b/deployment/README.md index 74fd93b..5ecb9bf 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -41,6 +41,14 @@ an explicit device. Requested but unavailable CUDA raises an error; individual ONNX operators may still execute on CPU. CPU and CUDA are the supported device choices; other OS/accelerator combinations remain unqualified. + +ONNX/CUDA checks each graph once with a synthetic batch-one input when its session +first loads. A GPU-kernel compatibility failure triggers a checked retry with graph +optimizations disabled, with a warning about potentially lower throughput. It does +not switch to CPU. Sessions are reused, so this adds first-use work, not a probe to +every prediction. `predictor.onnx_session_info` reports the selected profiles; the +probe does not guarantee every later batch-dependent execution path. + Models are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set `MAMBO_CACHE` to choose another location. After the required model files are cached, `MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle, diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index 2cbe145..39215b2 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -5,7 +5,7 @@ "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", - "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching\nCUDA/cuDNN libraries, and select `device=\"cuda:0\"`. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", + "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching\nCUDA/cuDNN libraries, and select `device=\"cuda:0\"`. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", @@ -34,6 +34,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9026,\n \"sha256\": \"9c180ecd975fcf83e5e3bcad4bbead93158d3a85497ca1244c07157125076c56\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9514,\n \"sha256\": \"98dd88689b842e4ab3f3395b0697bec38b9b38885f66b9854ca3fc0babadc702\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/deployment/mambo_deploy/onnx_session.py b/deployment/mambo_deploy/onnx_session.py new file mode 100644 index 0000000..67ae87d --- /dev/null +++ b/deployment/mambo_deploy/onnx_session.py @@ -0,0 +1,62 @@ +"""Validate CUDA graph optimizations once before admitting a session for inference.""" + +import time +import warnings + +import numpy as np + +from .preprocessing import RECIPE + + +def create_session(ort, path, providers, threads, *, cuda, embeddings): + started = time.perf_counter() + attempts = [] + outputs = ["output_0", "embedding"] if embeddings else ["output_0"] + profiles = [("optimized", ort.GraphOptimizationLevel.ORT_ENABLE_ALL)] + if cuda: + profiles.append(("unoptimized", ort.GraphOptimizationLevel.ORT_DISABLE_ALL)) + for name, level in profiles: + options = ort.SessionOptions() + options.intra_op_num_threads = threads + options.inter_op_num_threads = 1 + options.enable_profiling = False + options.graph_optimization_level = level + session = None + probe_seconds = 0.0 + try: + session = ort.InferenceSession(str(path), sess_options=options, providers=providers) + session.disable_fallback() + if cuda and session.get_providers()[0] != "CUDAExecutionProvider": + raise RuntimeError("Requested ONNX CUDA provider failed to initialize; refusing CPU-only fallback") + if cuda: + # CPU outputs make completion synchronous. No image decoding or dataset access. + probe_started = time.perf_counter() + session.run(outputs, {"images": np.zeros((1, 3, RECIPE["crop_size"], RECIPE["crop_size"]), dtype=np.float32)}) + probe_seconds = time.perf_counter() - probe_started + except Exception as error: + session = None + compatibility_error = any(code in str(error) for code in ("cudaErrorNoKernelImageForDevice", "cudaErrorInvalidDeviceFunction")) + if not cuda or not compatibility_error: + raise + attempts.append({"profile": name, "error": str(error)}) + if name == "unoptimized": + raise RuntimeError( + "ONNX CUDA baseline compatibility check failed with graph optimizations disabled. " + "This runtime/device cannot execute the baseline model; use a compatible CUDA runtime build. " + "No CPU fallback was performed." + ) from error + continue + if name == "unoptimized": + warnings.warn( + "ONNX CUDA optimized graph failed its kernel compatibility probe; using a validated session with " + "graph optimizations disabled. GPU execution is retained; throughput may be lower.", + RuntimeWarning, + stacklevel=2, + ) + return session, { + "profile": name, + "probe_batch_size": 1 if cuda else None, + "probe_seconds": probe_seconds, + "initialization_seconds": time.perf_counter() - started, + "failed_attempts": attempts, + } diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 52c82a1..e7d21ea 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -14,6 +14,7 @@ from .augmentation import infer_augmented, resolve_tta from .bundle import Bundle from .download import default_bundle +from .onnx_session import create_session from .preprocessing import RECIPE, image_items, preprocess from .results import Prediction, hierarchy @@ -70,6 +71,7 @@ def __init__( raise ValueError("Unsupported preprocessing recipe; use the matching deployment runtime") self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads self._sessions, self._torch_model = {}, None + self.onnx_session_info = {} self._lock = threading.RLock() self.weights = weights if weights is not None: @@ -162,10 +164,6 @@ def _onnx(self, images, embeddings): key = "onnx-embedding" if embeddings else "onnx" if key not in self._sessions: path = self.bundle.profile(key) - options = ort.SessionOptions() - options.intra_op_num_threads = self.threads - options.inter_op_num_threads = 1 - options.enable_profiling = False if self.device == "cpu": providers = ["CPUExecutionProvider"] else: @@ -183,10 +181,8 @@ def _onnx(self, images, embeddings): ), "CPUExecutionProvider", ] - session = ort.InferenceSession(str(path), sess_options=options, providers=providers) - session.disable_fallback() - if self.device != "cpu" and session.get_providers()[0] != "CUDAExecutionProvider": - raise RuntimeError("Requested ONNX CUDA provider failed to initialize; refusing CPU-only fallback") + session, info = create_session(ort, path, providers, self.threads, cuda=self.device != "cpu", embeddings=embeddings) + self.onnx_session_info[key] = info self._sessions[key] = session outputs = ["output_0", "embedding"] if embeddings else ["output_0"] values = self._sessions[key].run(outputs, {"images": images}) diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 24d4db6..d23755c 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -169,6 +169,7 @@ def benchmark(args): import onnxruntime as ort report["runtime"]["onnxruntime"] = ort.__version__ + report["onnx_session_info"] = predictor.onnx_session_info report["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} if args.device != "cpu" and args.backend == "torch": diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index 7e33ca5..4c7fa54 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -159,3 +159,20 @@ Python socket connections blocked and model hashes unchanged. Evidence: GPU batch-32 throughput was 50.89 images/s native and 38.27 ONNX. CPU batch-1 was 2.04 and 3.39 images/s. Trial ranges and input hashes are in `docs/assets/mambo-promoted-speed.json`. + +## CUDA optimization compatibility probe — 2026-09-24 + +Each CUDA session now executes a synthetic batch-one input before its first user +prediction. Kernel-image/device-function incompatibility retries with ORT graph +optimizations disabled; no CPU-only fallback or retry of unrelated errors occurs. +The selected profile and initialization/probe timings are retained in reports. +A batch-one check does not establish every batch-dependent execution path. + +On the RTX 3080 Ti laptop with ORT GPU 1.30.0, both optimized graphs executed, +including default TTA and embedding output. Injecting the initial compatibility +error exercised recovery into real unoptimized CUDA execution for both graphs. +This validates local recovery mechanics, not resolution of the reported B200 +failure. The installed ONNX-only wheel also passed CPU prediction, embeddings and +TTA without importing torch. Focused deployment/download/evaluation checks passed +(64 tests); nine UCloud harness tests passed separately. Static/import checks and +the standalone deployment lint/format checks passed. No full suite was run. diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 12b2f61..2da88bd 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -141,6 +141,7 @@ def collect(args): import onnxruntime as ort report["runtime"]["onnxruntime"] = ort.__version__ + report["onnx_session_info"] = predictor.onnx_session_info report["providers"] = {key: session.get_providers() for key, session in predictor._sessions.items()} report["provider_options"] = {key: session.get_provider_options() for key, session in predictor._sessions.items()} report.update(status="complete", timings=timings) diff --git a/dev/releases/mambo_v3/qualify_bundle.py b/dev/releases/mambo_v3/qualify_bundle.py index af6b8f3..bbd2d75 100644 --- a/dev/releases/mambo_v3/qualify_bundle.py +++ b/dev/releases/mambo_v3/qualify_bundle.py @@ -60,6 +60,7 @@ def qualify(bundle, dataset, device, backends, tta="none"): "prediction_modes_agree": True, } if backend == "onnx": + report["variants"][backend]["onnx_session_info"] = predictor.onnx_session_info report["variants"][backend]["providers"] = {name: session.get_providers() for name, session in predictor._sessions.items()} if len(backends) == 2: for mode in ("full", "europe", "custom"): diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index a1b2136..3c346a6 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -60,7 +60,12 @@ uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ This runs 256 identical test images through V2, V3 PyTorch, V3 ONNX, and each V3 backend with `rotation30_pad25_3` TTA. Inspect each log/report for successful -inference, runtime versions, placement and memory use. This is a compatibility +inference, runtime versions, placement and memory use. ONNX reports include +`onnx_session_info`: the graph optimization profile, initialization time and any +failed compatibility-probe attempts. A CUDA kernel-image/device-function failure +retries once with graph optimizations disabled; unrelated failures are not retried. +Both profiles retain CUDA, with individual CPU operators still allowed. A failure +of the unoptimized graph is reported as baseline incompatibility. This is a compatibility qualification, not a reliable quality estimate or a requirement for numerical identity between backends. Confirm the assigned GPU/MIG profile (`nvidia-smi -L`), CPU allocation and storage mount alongside the generated environment label. @@ -101,7 +106,9 @@ but is ancillary because geographic restriction excludes part of this global set Speed uses CPU and GPU, global and northern-Europe lists, three isolated process trials, two warmups and seven observations per cell. CPU batches default to 1/8; GPU batches to 1/8/32. Each uses the same deterministic image bank (at least 32 -images, expanded to the largest requested batch). Timings include image loading, +images, expanded to the largest requested batch). The one-time ONNX synthetic probe is included in cold first-use timing and excluded +from warmed timing cells. Do not combine throughput from different selected +optimization profiles without labelling them. Timings include image loading, preparation, transfer and completed CPU predictions; they describe warm repeated inference, not cold storage throughput. Do not run competing collections during benchmarking. V2 CPU includes the documented float32 input adapter required for diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index ec8ddc5..6512efc 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -164,6 +164,7 @@ def session(path, sess_options, providers): "onnxruntime", SimpleNamespace( SessionOptions=SimpleNamespace, + GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], InferenceSession=session, ), @@ -452,3 +453,66 @@ def runtime(images, embeddings): assert result.metadata["tta"] == recipe assert result.metadata["tta_views"] == len(expected) np.testing.assert_array_equal(source, original) + + +@pytest.mark.parametrize( + "failure", [None, "cudaErrorNoKernelImageForDevice", "cudaErrorInvalidDeviceFunction", "CUDA out of memory", "baseline"] +) +def test_cuda_probe_profiles_and_reuse(bundle, monkeypatch, failure): + import sys + from types import SimpleNamespace + + p = Predictor(bundle, device="cuda:0") + monkeypatch.setattr(p.bundle, "profile", lambda key: bundle / key) + sessions, calls = [], [] + + def create(path, sess_options, providers): + level = sess_options.graph_optimization_level + sessions.append((path, level)) + + def run(outputs, feed): + calls.append((path, level, len(feed["images"]))) + assert feed["images"].dtype == np.float32 + if failure == "baseline": + raise RuntimeError("cudaErrorNoKernelImageForDevice") + if failure and level == 99: + raise RuntimeError(failure) + return [np.zeros((len(feed["images"]), 3)) for _ in outputs] + + return SimpleNamespace( + run=run, disable_fallback=lambda: None, get_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"] + ) + + monkeypatch.setitem( + sys.modules, + "onnxruntime", + SimpleNamespace( + SessionOptions=SimpleNamespace, + GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), + get_available_providers=lambda: ["CUDAExecutionProvider"], + InferenceSession=create, + ), + ) + batch = np.zeros((2, 3, 384, 384), dtype=np.float32) + if failure in ("CUDA out of memory", "baseline"): + with pytest.raises(RuntimeError, match="out of memory" if failure != "baseline" else "baseline compatibility"): + p._onnx(batch, False) + assert not p._sessions + assert len(sessions) == (2 if failure == "baseline" else 1) + return + if failure: + with pytest.warns(RuntimeWarning, match="graph optimizations disabled"): + p._onnx(batch, False) + else: + p._onnx(batch, False) + before = len(calls) + p._onnx(batch, False) + assert len(calls) == before + 1 # No second probe on a reused session. + assert [level for _, level in sessions] == ([99, 0] if failure else [99]) + assert p.onnx_session_info["onnx"]["profile"] == ("unoptimized" if failure else "optimized") + assert calls[-1][2] == 2 and calls[0][2] == 1 + if not failure: + p._onnx(batch, True) + assert len(sessions) == 2 + assert "onnx-embedding" in p.onnx_session_info + assert [n for _, _, n in calls[-2:]] == [1, 2] From 1cbd03aae3f68b19960bc6d2a7d63d5f65818826 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 23:20:31 +0200 Subject: [PATCH 061/221] fix: delegate ONNX CUDA dependencies to upstream package metadata --- deployment/README.md | 7 ++- deployment/mambo_deploy/default_bundle.json | 4 +- deployment/pyproject.toml | 2 +- dev/releases/mambo_v3/ucloud-release.md | 25 ++++++++- .../mambo_v3/ucloud_env/pyproject.toml | 2 +- dev/releases/mambo_v3/ucloud_env/uv.lock | 52 +++++++++++++------ 6 files changed, 67 insertions(+), 25 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 5ecb9bf..af48dc7 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -34,8 +34,11 @@ print(result[0].confidence) # confidence at each rank `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows. ONNX requires the bundle's embedding graph. -For ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching -CUDA/cuDNN libraries, and select `device="cuda:0"`. For PyTorch, install the matching +For ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device="cuda:0"`. +This requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA +driver is still required. To reuse an already provisioned ONNX/CUDA environment, +add the base wheel without extras. Runtime versions are selected by your package +manager, not replaced during inference. For PyTorch, install the matching `mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend="torch"` and an explicit device. Requested but unavailable CUDA raises an error; individual ONNX operators may still execute on CPU. CPU and CUDA are the supported device diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index 39215b2..850d4a1 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -5,7 +5,7 @@ "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", - "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use the wheel’s `[onnx-cuda]` extra instead of `[onnx]`, with matching\nCUDA/cuDNN libraries, and select `device=\"cuda:0\"`. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", + "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device=\"cuda:0\"`.\nThis requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA\ndriver is still required. To reuse an already provisioned ONNX/CUDA environment,\nadd the base wheel without extras. Runtime versions are selected by your package\nmanager, not replaced during inference. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", @@ -34,6 +34,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9514,\n \"sha256\": \"98dd88689b842e4ab3f3395b0697bec38b9b38885f66b9854ca3fc0babadc702\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9740,\n \"sha256\": \"faf46d1b5b63f0a875d05145d4d3cc30cf86f2100cb274aafb8cc85e21e81001\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index b3fdcf1..d4414c7 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -10,7 +10,7 @@ license-files = ["LICENSE"] [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] -onnx-cuda = ["onnxruntime-gpu>=1.20"] +onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] torch = ["mini_trainer>=0.3.0"] [project.scripts] diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 3c346a6..375081c 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -29,11 +29,32 @@ input identity and file size/modification time match; changed files are rehashed The final manifest is published only after every image completes. This first preparation pass reads the entire test set; run only one preparation process per cache. -The isolated uv project pins the metric implementation and runtime dependencies, +The isolated uv project pins the metric implementation and records exact runtime +dependencies in its lockfile, with an [explicit CUDA PyTorch index](https://docs.astral.sh/uv/guides/integration/pytorch/). It creates its own environment without changing the checkout's `.venv`. The current lock targets Python 3.13 and CUDA 13.0; qualify the node's driver/runtime before a -full run. This environment has resolved locally but has not been GPU-qualified on UCloud. +full run. ONNX Runtime requests its own matching CUDA/cuDNN dependencies. The +CUDA-13 evaluation project allows ORT 1.27 or newer within major version 1; the +consumer package also allows older CUDA runtime families. These are dependency +ranges, not a claim that every allowed version/device combination has been tested. +The locked ORT 1.30.0 build failed CUDA qualification on the allocated B200; this +dependency-policy change does not establish a fix for that failure. + +Use uv’s normal targeted resolution to select another runtime version without +editing the dependency declaration by hand: + +```sh +uv lock --project dev/releases/mambo_v3/ucloud_env \ + --upgrade-package onnxruntime-gpu==1.29.0 +uv sync --project dev/releases/mambo_v3/ucloud_env --locked +``` + +Here 1.29.0 illustrates version selection, not a B200-qualified recommendation. +Omit `==1.29.0` to request the newest version allowed by the project. Keep the +resulting lockfile with the campaign, and start fresh qualification after changing +it; reports retain the runtime actually used. The resolver retains other locked +versions where constraints permit. Existing models and image hashes are reusable. Models, V2 heads and archived split provenance download automatically from public ERDA storage with size/SHA-256 verification. The V2 BioCLIP backbone comes from its diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml index 6fe3d7a..ca591b7 100644 --- a/dev/releases/mambo_v3/ucloud_env/pyproject.toml +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -8,7 +8,7 @@ dependencies = [ "mini_metrics", "torch==2.12.0", "torchvision==0.27.0", - "onnxruntime-gpu==1.30.0", + "onnxruntime-gpu[cuda,cudnn]>=1.27,<2", "open_clip_torch==3.3.0", "timm==1.0.25", "huggingface_hub==0.36.2", diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock index 5f330fa..01ce3c8 100644 --- a/dev/releases/mambo_v3/ucloud_env/uv.lock +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -151,7 +151,7 @@ name = "cuda-bindings" version = "13.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder" }, + { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/a9/c83eb5aa055a4b0c3776d83f6f88b9e778a6fe0415210977c889c6a0bb8a/cuda_bindings-13.4.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7c6c9f46fca7f3fc61959ef9a2398ac656172145b43f408e0a6492360cf1c0c", size = 6316533, upload-time = "2026-09-23T02:22:09.694Z" }, @@ -176,34 +176,34 @@ wheels = [ [package.optional-dependencies] cudart = [ - { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" }, ] cufft = [ - { name = "nvidia-cufft", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cufft", marker = "sys_platform == 'linux'" }, ] cufile = [ { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, ] cupti = [ - { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" }, ] curand = [ - { name = "nvidia-curand", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-curand", marker = "sys_platform == 'linux'" }, ] cusolver = [ - { name = "nvidia-cusolver", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cusolver", marker = "sys_platform == 'linux'" }, ] cusparse = [ - { name = "nvidia-cusparse", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" }, ] nvtx = [ - { name = "nvidia-nvtx", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, ] [[package]] @@ -420,7 +420,7 @@ requires-dist = [ { name = "mini-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0" }, { name = "numpy", specifier = ">=2.4" }, { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, - { name = "onnxruntime-gpu", marker = "extra == 'onnx-cuda'", specifier = ">=1.20" }, + { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, { name = "pillow", specifier = ">=11" }, ] provides-extras = ["onnx", "onnx-cuda", "torch"] @@ -434,7 +434,7 @@ dependencies = [ { name = "mambo-deploy" }, { name = "mini-metrics" }, { name = "mini-trainer", extra = ["bioclip", "recommended", "timm"] }, - { name = "onnxruntime-gpu" }, + { name = "onnxruntime-gpu", extra = ["cuda", "cudnn"] }, { name = "open-clip-torch" }, { name = "safetensors" }, { name = "timm" }, @@ -448,7 +448,7 @@ requires-dist = [ { name = "mambo-deploy", directory = "../../../../deployment" }, { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, { name = "mini-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, - { name = "onnxruntime-gpu", specifier = "==1.30.0" }, + { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], specifier = ">=1.27,<2" }, { name = "open-clip-torch", specifier = "==3.3.0" }, { name = "safetensors", specifier = "==0.6.2" }, { name = "timm", specifier = "==1.0.25" }, @@ -673,6 +673,7 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, { url = "https://files.pythonhosted.org/packages/3b/cd/154ca20c38269e05eff77c1464e6c1da89f50a6390b565e9d82e06bc11e1/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436", size = 423138758, upload-time = "2026-04-08T18:46:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/45/9e/2f562daf80eb8f7a685fb7bea4fda71f6048e4f359d6fdd1b6e70206cb2f/nvidia_cublas-13.1.1.3-py3-none-win_amd64.whl", hash = "sha256:b6cdce694e47ff6aadf0a69df1cab6628d696f5ff56e8d16af50309d855fa20f", size = 404358158, upload-time = "2026-04-08T18:47:26.987Z" }, ] [[package]] @@ -691,6 +692,7 @@ source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/4a/af/345fedb9f4c76c84ab4fa445b36bd4048a4d9db60e6bc76b4f913ff4b852/nvidia_cuda_nvrtc-13.0.88-py3-none-win_amd64.whl", hash = "sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872", size = 76807835, upload-time = "2025-09-04T08:39:15.274Z" }, ] [[package]] @@ -700,6 +702,7 @@ source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/b7/94/6b867483bec07da24ffa32736c79fabb94ef3a7af4d787a9d4a974868576/nvidia_cuda_runtime-13.0.96-py3-none-win_amd64.whl", hash = "sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492", size = 2927037, upload-time = "2025-10-09T09:04:23.782Z" }, ] [[package]] @@ -712,6 +715,7 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, { url = "https://files.pythonhosted.org/packages/6e/5e/edb9c0ae051602c3ccaffe424256463636d639e27d7f302dde9975ef9e7a/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304", size = 366173588, upload-time = "2026-03-09T19:29:34.474Z" }, + { url = "https://files.pythonhosted.org/packages/78/39/21507455b1bca8b5702a9e9fc6ce73735f216f558dac2c9ede58e4d456b8/nvidia_cudnn_cu13-9.20.0.48-py3-none-win_amd64.whl", hash = "sha256:af8139732b99c0118be65ea5aac97f0d46018f8c552889e49d2fb0c6261a4a24", size = 350712614, upload-time = "2026-03-09T19:31:11.398Z" }, ] [[package]] @@ -724,6 +728,7 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, + { url = "https://files.pythonhosted.org/packages/85/b2/f8af21a2ed1beed337a6a02c5a28aeb85441f4d578ec3d529543c775ea4b/nvidia_cufft-12.0.0.61-py3-none-win_amd64.whl", hash = "sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb", size = 213342123, upload-time = "2025-09-04T08:40:51.145Z" }, ] [[package]] @@ -742,6 +747,7 @@ source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, + { url = "https://files.pythonhosted.org/packages/99/27/72103153b1ffc00e09fdc40ac970235343dcd1ea8bd762e84d2d73219ffa/nvidia_curand-10.4.0.35-py3-none-win_amd64.whl", hash = "sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f", size = 55242481, upload-time = "2025-08-04T10:30:41.831Z" }, ] [[package]] @@ -749,9 +755,9 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas" }, - { name = "nvidia-cusparse" }, - { name = "nvidia-nvjitlink" }, + { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -763,7 +769,7 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink" }, + { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -795,6 +801,7 @@ source = { registry = "https://pypi.org/simple" } wheels = [ { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, + { url = "https://files.pythonhosted.org/packages/e4/01/07530b0e37546231052e30234540289c42eaffa486f1a34a87fed340157b/nvidia_nvjitlink-13.0.88-py3-none-win_amd64.whl", hash = "sha256:634e96e3da9ef845ae744097a1f289238ecf946ce0b82e93cdce14b9782e682f", size = 36035115, upload-time = "2025-09-04T08:43:03.001Z" }, ] [[package]] @@ -833,6 +840,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f5/b0/6187754ea45ce90c116730115e4d856a6107b9e708580093c112def9a567/onnxruntime_gpu-1.30.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:c6df4b62538f98482dd5cebc91cba668c4b82156e872517c314a383c904a191d", size = 205776779, upload-time = "2026-09-10T15:53:24.926Z" }, ] +[package.optional-dependencies] +cuda = [ + { name = "nvidia-cuda-nvrtc" }, + { name = "nvidia-cuda-runtime" }, + { name = "nvidia-cufft" }, + { name = "nvidia-curand" }, +] +cudnn = [ + { name = "nvidia-cudnn-cu13" }, +] + [[package]] name = "open-clip-torch" version = "3.3.0" From 060bc34025c7cd5a2669ba1b3c5eaea87bce17d3 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 23:50:27 +0200 Subject: [PATCH 062/221] Use fresh runtime resolution for release qualification --- .gitignore | 1 + dev/releases/mambo_v3/runtime-requirements.in | 5 + dev/releases/mambo_v3/ucloud-release.md | 106 ++++++++++++------ dev/releases/mambo_v3/ucloud_release.py | 16 ++- tests/releases/test_ucloud_release.py | 23 ++++ 5 files changed, 113 insertions(+), 38 deletions(-) create mode 100644 dev/releases/mambo_v3/runtime-requirements.in diff --git a/.gitignore b/.gitignore index 4845e96..f4201c1 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ examples/test.ipynb /local-evidence/ /.worktrees/ /.venv +/.venv-mambo-runtime/ diff --git a/dev/releases/mambo_v3/runtime-requirements.in b/dev/releases/mambo_v3/runtime-requirements.in new file mode 100644 index 0000000..c08fb48 --- /dev/null +++ b/dev/releases/mambo_v3/runtime-requirements.in @@ -0,0 +1,5 @@ +# Install from the repository root. Runtime ranges come from the packages; +# only the metric implementation is fixed to preserve comparison semantics. +./deployment[onnx-cuda] +.[recommended,bioclip,timm] +mini_metrics @ git+https://github.com/GuillaumeMougeot/mini_metrics.git@70cc69adc05362863439277048e06386c1f885e1 diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 375081c..2d5c98b 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -7,15 +7,25 @@ wheel. No allocation or remote submission is performed by these commands. ## Setup with uv -From the checkout root: +From the checkout root, resolve runtime dependencies afresh for this machine. +If already prepared, run only the first two commands, then follow +[the existing-campaign instructions](#existing-prepared-campaign-reuse-models-and-image-hashes): ```sh -uv sync --project dev/releases/mambo_v3/ucloud_env --locked -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.setup_ucloud_release \ - --metadata /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet +uv venv --python 3.13 .venv-mambo-runtime +uv pip install --python .venv-mambo-runtime/bin/python --torch-backend=auto \ + -r dev/releases/mambo_v3/runtime-requirements.in +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.setup_ucloud_release \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet ``` +This uses the deployment/training packages' dependency ranges, without reading +repository lockfiles or the evaluation project's exact runtime pins. Only the +`mini_metrics` revision remains fixed, to preserve metric semantics. uv selects the +PyTorch backend from the driver; ONNX Runtime's upstream CUDA/cuDNN extras supply +its runtime dependencies. GPU execution still needs the qualification below. +The separate environment preserves the checkout's existing `.venv`. + The Parquet path is the only required dataset argument. Images are expected at `images//` below its parent; use `--root` if mounted elsewhere. Preparation verifies the metadata snapshot, recovers original `set == "0"` @@ -29,32 +39,59 @@ input identity and file size/modification time match; changed files are rehashed The final manifest is published only after every image completes. This first preparation pass reads the entire test set; run only one preparation process per cache. -The isolated uv project pins the metric implementation and records exact runtime -dependencies in its lockfile, -with an [explicit CUDA PyTorch index](https://docs.astral.sh/uv/guides/integration/pytorch/). -It creates its own environment without changing the checkout's `.venv`. The current -lock targets Python 3.13 and CUDA 13.0; qualify the node's driver/runtime before a -full run. ONNX Runtime requests its own matching CUDA/cuDNN dependencies. The -CUDA-13 evaluation project allows ORT 1.27 or newer within major version 1; the -consumer package also allows older CUDA runtime families. These are dependency -ranges, not a claim that every allowed version/device combination has been tested. -The locked ORT 1.30.0 build failed CUDA qualification on the allocated B200; this -dependency-policy change does not establish a fix for that failure. - -Use uv’s normal targeted resolution to select another runtime version without -editing the dependency declaration by hand: +The old `ucloud_env/uv.lock` remains available for reproducing earlier installs; +it is not the default installation path. Record the resolved environment after +qualification (`uv pip freeze --python .venv-mambo-runtime/bin/python`), and keep +it unchanged during the campaign. Each phase records installed package versions +and source metadata and refuses to continue from qualification if they change. +The first fresh local resolution (24 September 2026, RTX 3080 Ti Laptop GPU) +passed PyTorch and ONNX inference on CPU and CUDA with default TTA, both +prediction/embedding modes, regional and custom lists. Both CUDA ONNX graphs used +full optimization without fallback. This is a four-image contract check, not a +quality or speed comparison. The original V2 pipeline also passed a four-image +CUDA qualification in the same environment. B200 qualification remains pending. + +| Dependency | Previous evaluation lock | Fresh laptop resolution | +| --- | --- | --- | +| PyTorch | 2.12.0+cu130 | 2.14.0+cu130 | +| torchvision | 0.27.0+cu130 | 0.29.0+cu130 | +| ONNX Runtime GPU | 1.30.0 | 1.30.0 | +| cuDNN | 9.20.0.48 | 9.24.0.43 | +| timm | 1.0.25 | 1.0.30 | + +These are recorded results, not new installation pins. A fresh resolution on +UCloud may differ; retain its qualification evidence before drawing conclusions. + +### Existing prepared campaign: reuse models and image hashes + +After installing the environment above, **skip preparation** if you already have +`~/.cache/mambo-ucloud/ucloud-release.json`. Copy that configuration to use the new +interpreter and a new results directory; retain the old failure evidence: ```sh -uv lock --project dev/releases/mambo_v3/ucloud_env \ - --upgrade-package onnxruntime-gpu==1.29.0 -uv sync --project dev/releases/mambo_v3/ucloud_env --locked +.venv-mambo-runtime/bin/python - <<'PYTHON' +import json +import os +from pathlib import Path +import sys + +cache = Path.home() / ".cache/mambo-ucloud" +config = json.loads((cache / "ucloud-release.json").read_text()) +for key in ("v2_python", "v3_python", "metrics_python"): + config[key] = os.path.abspath(sys.executable) +config["output"] = str(cache / "runs-fresh-runtime") +path = cache / "ucloud-release-fresh.json" +with path.open("x") as stream: + json.dump(config, stream, indent=2) +print(path) +PYTHON +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/ucloud-release-fresh.json ``` -Here 1.29.0 illustrates version selection, not a B200-qualified recommendation. -Omit `==1.29.0` to request the newest version allowed by the project. Keep the -resulting lockfile with the campaign, and start fresh qualification after changing -it; reports retain the runtime actually used. The resolver retains other locked -versions where constraints permit. Existing models and image hashes are reusable. +For subsequent phases below, use `ucloud-release-fresh.json`, `runs-fresh-runtime` +and a separate summary directory. No model downloads or image rehashing are needed. +Do not reinstall packages between qualification and full collection/benchmarking. Models, V2 heads and archived split provenance download automatically from public ERDA storage with size/SHA-256 verification. The V2 BioCLIP backbone comes from its @@ -74,8 +111,7 @@ its environment label, visible GPU, threads and batch sizes **before qualificati A MIG slice is one visible CUDA device; the default selects device `0`. ```sh -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.ucloud_release qualification \ +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release qualification \ --config ~/.cache/mambo-ucloud/ucloud-release.json ``` @@ -94,17 +130,13 @@ CPU allocation and storage mount alongside the generated environment label. After qualification: ```sh -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.ucloud_release full \ +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release full \ --config ~/.cache/mambo-ucloud/ucloud-release.json -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.metrics \ +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.metrics \ --collection ~/.cache/mambo-ucloud/runs/full -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.ucloud_release benchmark \ +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release benchmark \ --config ~/.cache/mambo-ucloud/ucloud-release.json -uv run --project dev/releases/mambo_v3/ucloud_env --no-sync python \ - -m dev.releases.mambo_v3.ucloud_summary \ +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_summary \ --root ~/.cache/mambo-ucloud/runs \ --output ~/.cache/mambo-ucloud/summary ``` diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index ef3e1fd..a893163 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -105,6 +105,20 @@ def jobs(config, phase): return planned +def runtime_environments(config): + """Record installed environments, independently of how they were resolved.""" + script = ( + "import importlib.metadata as m, json, sys; " + "print(json.dumps({'python': sys.version, 'packages': sorted(" + "[d.metadata['Name'], d.version, d.read_text('direct_url.json')] " + "for d in m.distributions())}))" + ) + return { + interpreter: json.loads(subprocess.check_output([interpreter, "-I", "-c", script], text=True)) + for interpreter in sorted({config[key] for key in ("v2_python", "v3_python", "metrics_python")}) + } + + def fingerprint(config): manifest = json.loads(Path(config["manifest"]).read_text()) if manifest.get("dataset") != "global-lepi-test" or len(manifest["records"]) != 632913: @@ -118,7 +132,7 @@ def fingerprint(config): for folder in (ROOT / "dev/releases/mambo_v3", ROOT / "deployment/mambo_deploy") for p in sorted(folder.glob("*.py")) } - hashes["environment_lock"] = file_hash(Path(__file__).with_name("ucloud_env") / "uv.lock") + hashes["environments"] = runtime_environments(config) hashes["revision"] = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() return {"config": config, "inputs": hashes} diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 1466fa1..0d85c86 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -166,3 +166,26 @@ def test_configuration_preserves_virtual_environment_interpreter(tmp_path): assert loaded[key] == str(interpreter) prefix = subprocess.check_output([loaded["v2_python"], "-c", "import sys; print(sys.prefix)"], text=True).strip() assert Path(prefix) == environment + + +def test_runtime_evidence_detects_installed_package_changes(tmp_path): + import subprocess + import venv + + from dev.releases.mambo_v3.ucloud_release import runtime_environments + + environment = tmp_path / "runtime" + venv.EnvBuilder(with_pip=False).create(environment) + interpreter = str(environment / "bin/python") + config = {key: interpreter for key in ("v2_python", "v3_python", "metrics_python")} + before = runtime_environments(config) + site = Path(subprocess.check_output([interpreter, "-c", "import sysconfig; print(sysconfig.get_path('purelib'))"], text=True).strip()) + dist = site / "example-1.0.dist-info" + dist.mkdir() + metadata = dist / "METADATA" + metadata.write_text("Metadata-Version: 2.1\nName: example\nVersion: 1.0\n") + installed = runtime_environments(config) + assert before != installed + assert installed[interpreter]["packages"] == [["example", "1.0", None]] + metadata.write_text("Metadata-Version: 2.1\nName: example\nVersion: 2.0\n") + assert runtime_environments(config) != installed From d44c18dbb283290769496cdf33fd4e2671df1b90 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Thu, 24 Sep 2026 23:53:41 +0200 Subject: [PATCH 063/221] Align deployment environment setup and simplify campaign retries --- deployment/README.md | 16 +++--- deployment/mambo_deploy/default_bundle.json | 4 +- dev/releases/mambo_v3/ucloud-release.md | 58 +++++++++------------ dev/releases/mambo_v3/ucloud_release.py | 22 ++++++++ tests/releases/test_ucloud_release.py | 21 ++++++++ 5 files changed, 79 insertions(+), 42 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index af48dc7..64f14a6 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -7,11 +7,14 @@ before caching. This candidate has not been publicly released; use the supplied ## Quick start Start with ONNX/CPU for the smallest installation: it needs no training package. -Add the supplied wheel to your `uv` project, then run your script with `uv run python -your_script.py`. Reuse one predictor across calls. +Create and activate an environment (or activate an existing one), then install +the supplied wheel. Run your script with `python your_script.py` and reuse one +predictor across calls. ```sh -uv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' +uv venv --python 3.13 .venv +source .venv/bin/activate +uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' ``` ```python @@ -39,8 +42,8 @@ This requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA driver is still required. To reuse an already provisioned ONNX/CUDA environment, add the base wheel without extras. Runtime versions are selected by your package manager, not replaced during inference. For PyTorch, install the matching -`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend="torch"` and -an explicit device. Requested but unavailable CUDA raises an error; individual +`mini_trainer` wheel with `uv pip install --torch-backend=auto`, then select +`backend="torch"` and an explicit device. Requested but unavailable CUDA raises an error; individual ONNX operators may still execute on CPU. CPU and CUDA are the supported device choices; other OS/accelerator combinations remain unqualified. @@ -114,7 +117,8 @@ uvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \ -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results ``` -Inside a configured project, use `uv run mambo_predict` with the same arguments. +Inside the activated environment, use `mambo_predict` directly. If using +`uv run`, add `--no-sync` to preserve the installed runtime dependencies. Outputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and `embeddings.npy` when `--embeddings` is requested. Directory input is recursive. diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index 850d4a1..e309b75 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -5,7 +5,7 @@ "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", - "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nAdd the supplied wheel to your `uv` project, then run your script with `uv run python\nyour_script.py`. Reuse one predictor across calls.\n\n```sh\nuv add './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device=\"cuda:0\"`.\nThis requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA\ndriver is still required. To reuse an already provisioned ONNX/CUDA environment,\nadd the base wheel without extras. Runtime versions are selected by your package\nmanager, not replaced during inference. For PyTorch, install the matching\n`mini_trainer` wheel and CPU/CUDA PyTorch build, then select `backend=\"torch\"` and\nan explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside a configured project, use `uv run mambo_predict` with the same arguments.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", + "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nCreate and activate an environment (or activate an existing one), then install\nthe supplied wheel. Run your script with `python your_script.py` and reuse one\npredictor across calls.\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate\nuv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device=\"cuda:0\"`.\nThis requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA\ndriver is still required. To reuse an already provisioned ONNX/CUDA environment,\nadd the base wheel without extras. Runtime versions are selected by your package\nmanager, not replaced during inference. For PyTorch, install the matching\n`mini_trainer` wheel with `uv pip install --torch-backend=auto`, then select\n`backend=\"torch\"` and an explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside the activated environment, use `mambo_predict` directly. If using\n`uv run`, add `--no-sync` to preserve the installed runtime dependencies.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", @@ -34,6 +34,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9740,\n \"sha256\": \"faf46d1b5b63f0a875d05145d4d3cc30cf86f2100cb274aafb8cc85e21e81001\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9929,\n \"sha256\": \"1e0085320a15948df50ed4c0904fe28f4b129ced399a37315ea06a1713d4f969\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 2d5c98b..aa163a3 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -8,14 +8,15 @@ wheel. No allocation or remote submission is performed by these commands. ## Setup with uv From the checkout root, resolve runtime dependencies afresh for this machine. -If already prepared, run only the first two commands, then follow +If already prepared, run the environment creation, activation and installation commands, then follow [the existing-campaign instructions](#existing-prepared-campaign-reuse-models-and-image-hashes): ```sh uv venv --python 3.13 .venv-mambo-runtime -uv pip install --python .venv-mambo-runtime/bin/python --torch-backend=auto \ +source .venv-mambo-runtime/bin/activate +uv pip install --torch-backend=auto \ -r dev/releases/mambo_v3/runtime-requirements.in -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.setup_ucloud_release \ +python -m dev.releases.mambo_v3.setup_ucloud_release \ --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet ``` @@ -41,8 +42,7 @@ preparation pass reads the entire test set; run only one preparation process per The old `ucloud_env/uv.lock` remains available for reproducing earlier installs; it is not the default installation path. Record the resolved environment after -qualification (`uv pip freeze --python .venv-mambo-runtime/bin/python`), and keep -it unchanged during the campaign. Each phase records installed package versions +qualification (`uv pip freeze`), and keep it unchanged during the campaign. Each phase records installed package versions and source metadata and refuses to continue from qualification if they change. The first fresh local resolution (24 September 2026, RTX 3080 Ti Laptop GPU) passed PyTorch and ONNX inference on CPU and CUDA with default TTA, both @@ -64,34 +64,24 @@ UCloud may differ; retain its qualification evidence before drawing conclusions. ### Existing prepared campaign: reuse models and image hashes -After installing the environment above, **skip preparation** if you already have -`~/.cache/mambo-ucloud/ucloud-release.json`. Copy that configuration to use the new -interpreter and a new results directory; retain the old failure evidence: +With the new environment activated, **skip preparation** and run: ```sh -.venv-mambo-runtime/bin/python - <<'PYTHON' -import json -import os -from pathlib import Path -import sys - -cache = Path.home() / ".cache/mambo-ucloud" -config = json.loads((cache / "ucloud-release.json").read_text()) -for key in ("v2_python", "v3_python", "metrics_python"): - config[key] = os.path.abspath(sys.executable) -config["output"] = str(cache / "runs-fresh-runtime") -path = cache / "ucloud-release-fresh.json" -with path.open("x") as stream: - json.dump(config, stream, indent=2) -print(path) -PYTHON -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/ucloud-release-fresh.json +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/ucloud-release.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-fresh-runtime ``` -For subsequent phases below, use `ucloud-release-fresh.json`, `runs-fresh-runtime` -and a separate summary directory. No model downloads or image rehashing are needed. -Do not reinstall packages between qualification and full collection/benchmarking. +`--new-campaign` uses the active Python for all five variants and metrics, reuses +prepared assets, and writes `runs-fresh-runtime/config.json`. It requires a new +results directory, preserving previous evidence. For subsequent phases below, +use that config, `runs-fresh-runtime` and a separate summary directory. To retry, +use the saved config without `--new-campaign` and follow the resume rules below. +No model downloads or image rehashing are needed. + +Keep this environment activated and unchanged throughout the campaign. Run +`python` directly; if using `uv run`, always add `--no-sync` to avoid an implicit +synchronization with the checkout's project environment. Models, V2 heads and archived split provenance download automatically from public ERDA storage with size/SHA-256 verification. The V2 BioCLIP backbone comes from its @@ -111,7 +101,7 @@ its environment label, visible GPU, threads and batch sizes **before qualificati A MIG slice is one visible CUDA device; the default selects device `0`. ```sh -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release qualification \ +python -m dev.releases.mambo_v3.ucloud_release qualification \ --config ~/.cache/mambo-ucloud/ucloud-release.json ``` @@ -130,13 +120,13 @@ CPU allocation and storage mount alongside the generated environment label. After qualification: ```sh -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release full \ +python -m dev.releases.mambo_v3.ucloud_release full \ --config ~/.cache/mambo-ucloud/ucloud-release.json -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.metrics \ +python -m dev.releases.mambo_v3.metrics \ --collection ~/.cache/mambo-ucloud/runs/full -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_release benchmark \ +python -m dev.releases.mambo_v3.ucloud_release benchmark \ --config ~/.cache/mambo-ucloud/ucloud-release.json -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.ucloud_summary \ +python -m dev.releases.mambo_v3.ucloud_summary \ --root ~/.cache/mambo-ucloud/runs \ --output ~/.cache/mambo-ucloud/summary ``` diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index a893163..0bb3bf7 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -6,6 +6,7 @@ import os import platform import subprocess +import sys from pathlib import Path from dev.benchmarks.inference.onnx_inference import file_hash @@ -42,6 +43,18 @@ def configuration(path): return data +def new_campaign(config, output): + """Reuse prepared assets with the active interpreter and a fresh results directory.""" + updated = dict(config) + for key in ("v2_python", "v3_python", "metrics_python"): + updated[key] = os.path.abspath(sys.executable) + output = output.expanduser().resolve() + updated["output"] = str(output) + output.mkdir(parents=True, exist_ok=False) + write_json(output / "config.json", updated) + return updated + + def jobs(config, phase): """Pure plan construction: no dataset access, imports of runtimes, or execution.""" timing = phase == "benchmark" @@ -242,8 +255,17 @@ def run(config, phase, resume=False): parser.add_argument("--config", type=Path, required=True) parser.add_argument("--dry-run", action="store_true", help="Print jobs without accessing data or starting processes") parser.add_argument("--resume", action="store_true", help="Verify/reuse complete jobs; never overwrite partial results") + parser.add_argument( + "--new-campaign", + type=Path, + help="Qualification only: reuse prepared assets with the active Python; save config.json in a new results directory", + ) args = parser.parse_args() + if args.new_campaign and (args.phase != "qualification" or args.resume or args.dry_run): + parser.error("--new-campaign requires qualification without --resume or --dry-run") config = configuration(args.config.resolve()) + if args.new_campaign: + config = new_campaign(config, args.new_campaign) if args.dry_run: print(json.dumps(jobs(config, args.phase), indent=2)) else: diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 0d85c86..0d20d2d 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -189,3 +189,24 @@ def test_runtime_evidence_detects_installed_package_changes(tmp_path): assert installed[interpreter]["packages"] == [["example", "1.0", None]] metadata.write_text("Metadata-Version: 2.1\nName: example\nVersion: 2.0\n") assert runtime_environments(config) != installed + + +def test_new_campaign_reuses_assets_and_preserves_existing_evidence(tmp_path, monkeypatch): + from dev.releases.mambo_v3 import ucloud_release + + original = configuration(CONFIG.resolve()) + interpreter = str(tmp_path / "venv/bin/python") + monkeypatch.setattr(ucloud_release.sys, "executable", interpreter) + output = tmp_path / "new-campaign" + updated = ucloud_release.new_campaign(original, output) + assert configuration(output / "config.json") == updated + for key in ("v2_python", "v3_python", "metrics_python"): + assert updated[key] == interpreter + assert original[key] != interpreter + for key in ("manifest", "root", "bundle", "legacy_source", "legacy_weights", "hf_cache"): + assert updated[key] == original[key] + assert updated["output"] == str(output) + before = (output / "config.json").read_bytes() + with pytest.raises(FileExistsError): + ucloud_release.new_campaign(original, output) + assert (output / "config.json").read_bytes() == before From 01605b01b70d60c6c445d7d43d092129e3f0fad3 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 00:02:04 +0200 Subject: [PATCH 064/221] agent: prioritize durable fixes and low-friction deployment experiments --- .agents/rules/code-contribution.md | 35 ++++++++++++++++++++++++++++++ AGENTS.md | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/.agents/rules/code-contribution.md b/.agents/rules/code-contribution.md index 440d9df..8a4c10e 100644 --- a/.agents/rules/code-contribution.md +++ b/.agents/rules/code-contribution.md @@ -8,3 +8,38 @@ its callers before changing it. Keep behavior fixes separate from mechanical cle Follow [the agent workspace policy](../README.md) for note locations and separate `agent:` commits. Keep application changes and developer-facing docs out of those commits; the prefix records purpose, not authorship. + +## Choosing fixes and experiments + +- Start from the user's intended outcome and constraints. When corrected about + priorities or scope, revise the proposed work instead of repeatedly defending + the previous approach. For deployment, count recurring developer effort across + environments as part of the cost, alongside implementation complexity. +- Separate the observed failure, suspected mechanism, and the layer we control. + Prefer the smallest durable change in that layer, using existing package-manager + and framework capabilities. A kernel workaround, diagnostic probe, or clearer + error may help investigation; identify whether it prevents the failure or only + detects/contains it. Do not present a guardrail as a compatibility fix. +- Test cheap, reversible hypotheses before adding custom infrastructure or + repeatedly debating their limitations. State what the experiment changes, what + result would support it, and what remains uncertain. Inspect environment details + when they distinguish hypotheses or guide action, rather than as an end in itself. +- For dependency hypotheses, test the actual resolved and installed environment + in isolation. Changing version ranges while retaining the same locked packages + does not test fresh resolution. Compare installed versions and exercise real + inference; successful dependency resolution alone is insufficient. Follow the + root README's environment conventions and preserve working environments. +- Distinguish reproducibility within an evaluation campaign from adaptability of + deployment installation. Preserve resolved versions as evidence without assuming + one evaluation lock must govern all future installations. Neither removing locks + nor pinning versions is automatically a compatibility solution. +- Use available representative environments for bounded qualification. Agreement + across them supports a practical improvement without proving universal support + or identifying which changed dependency caused it. Expand the matrix or isolate + individual changes when that would change the decision; do not require exhaustive + architecture access before trying a useful fix. +- Review the complete operator workflow before handing it over. Minimize new flags, + configuration copies, path edits, and environment switches; count these as real + complexity even when the code is short. If a setup change alters paths or commands, + update downstream steps consistently rather than asking users to translate them. + State exactly what must be rerun and what existing assets/results can be reused. diff --git a/AGENTS.md b/AGENTS.md index 884e126..a5bedcc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,6 +27,10 @@ ## Priorities +Prioritize the user's intended outcome and recurring integration effort when +choosing fixes. For diagnosis and experiment selection, follow +[the contribution guidance](.agents/rules/code-contribution.md#choosing-fixes-and-experiments). + ### Release branch scope On `release/mambo-v3`, restrict direct work to the MAMBO release: deployment From 3e92eeddd41c71c76bda28ebea6ad58b0c7df191 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 00:21:15 +0200 Subject: [PATCH 065/221] Add bounded CUDA probe and document PTX runtime candidate --- dev/releases/mambo_v3/probe_onnx_cuda.py | 30 ++++++++++++++++++++++ dev/releases/mambo_v3/ucloud-release.md | 32 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 dev/releases/mambo_v3/probe_onnx_cuda.py diff --git a/dev/releases/mambo_v3/probe_onnx_cuda.py b/dev/releases/mambo_v3/probe_onnx_cuda.py new file mode 100644 index 0000000..c360819 --- /dev/null +++ b/dev/releases/mambo_v3/probe_onnx_cuda.py @@ -0,0 +1,30 @@ +"""Test an ORT CUDA kernel without model assets, PyTorch, or CPU fallback.""" + +import base64 +import os + +import numpy as np +import onnxruntime as ort + + +def main(): + # ONNX opset 18 / IR 10: one FP32 Sigmoid with input/output shape [4]. + # Embedded protobuf avoids requiring the onnx export package for this probe. + model = base64.b64decode("CAo6RwoPCgF4EgF5IgdTaWdtb2lkEhJjdWRhX3NpZ21vaWRfcHJvYmVaDwoBeBIKCggIARIECgIIBGIPCgF5EgoKCAgBEgQKAggEQgQKABAS") + print("ORT:", ort.__version__, ort.__file__, flush=True) + print("JIT settings:", {k: v for k, v in os.environ.items() if k.startswith(("CUDA_FORCE", "CUDA_DISABLE"))}, flush=True) + ort.preload_dlls() + options = ort.SessionOptions() + options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_DISABLE_ALL + options.add_session_config_entry("session.disable_cpu_ep_fallback", "1") + session = ort.InferenceSession(model, sess_options=options, providers=["CUDAExecutionProvider"]) + session.disable_fallback() + if session.get_providers()[0] != "CUDAExecutionProvider": + raise RuntimeError("CUDA provider not selected") + result = session.run(None, {"x": np.array([-1, 0, 1, 2], dtype=np.float32)})[0] + np.testing.assert_allclose(result, [0.26894142, 0.5, 0.73105858, 0.88079708], rtol=1e-5) + print("PASS: standalone CUDA Sigmoid", result, flush=True) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index aa163a3..c373417 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -169,3 +169,35 @@ No UCloud inference results are claimed yet. Preserve current laptop figures; add UCloud quality and speed figures only after the completed evidence passes the summary checks. Cross-OS support and clean CUDA installation remain separate qualification tasks. + +## B200 runtime candidate: PTX-enabled upstream wheel + +The tested Linux CPython 3.13 ORT 1.30.0 CUDA provider has no SM 100 kernels +and no PTX; its SHA-256 is +`afd77f8d1e05544456476e244601ff08d444ff90921d6d73b2066c124f109bd2`. +The same binary failed standalone CUDA Sigmoid on B200, independently of MAMBO. +Fresh dependency resolution retained that binary and did not fix the failure. + +The upstream ORT 1.22.0 wheel is a bounded compatibility candidate: inspection +with CUDA 12.9 cuobjdump found 158 generic SM 90 PTX units, including FP32 +Sigmoid and QuickGelu. Generic PTX provides a path to newer architectures through +[driver compilation](https://docs.nvidia.com/cuda/blackwell-compatibility-guide/index.html#application-compatibility-on-blackwell-architecture). +On 25 September 2026 it passed standalone Sigmoid and the four-image MAMBO +contract check on the RTX 3080 Ti Laptop GPU: both ONNX graphs, default TTA, +embeddings and regional/custom masks, with full optimization and no retry. +This does not establish B200 execution or new quality/speed results. + +After pulling the helper, test on B200 from the checkout root in an isolated +environment; this leaves the CUDA 13 PyTorch campaign environment intact: + +```sh +uv venv --python 3.13 /tmp/mambo-ort-ptx +source /tmp/mambo-ort-ptx/bin/activate +uv pip install 'onnxruntime-gpu[cuda,cudnn]==1.22.0' numpy +python dev/releases/mambo_v3/probe_onnx_cuda.py +``` + +These extras install the candidate's CUDA 12 libraries. The exact version selects +the inspected upstream wheel; it is not a general deployment pin. Do not replace +the campaign runtime or repeat full qualification until this probe passes. Restore +the campaign environment with `source .venv-mambo-runtime/bin/activate`. From bba25090df8a85e513799abc15d69d650d6d67f8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 00:24:37 +0200 Subject: [PATCH 066/221] Support isolated ONNX runtime in release campaigns --- dev/releases/mambo_v3/ucloud-release.md | 42 ++++++++++++++++++++++--- dev/releases/mambo_v3/ucloud_release.py | 12 +++++-- tests/releases/test_ucloud_release.py | 11 +++++++ 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index c373417..3a12ee3 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -185,7 +185,8 @@ Sigmoid and QuickGelu. Generic PTX provides a path to newer architectures throug On 25 September 2026 it passed standalone Sigmoid and the four-image MAMBO contract check on the RTX 3080 Ti Laptop GPU: both ONNX graphs, default TTA, embeddings and regional/custom masks, with full optimization and no retry. -This does not establish B200 execution or new quality/speed results. +The user also confirmed the standalone CUDA Sigmoid probe passes on B200. +Full-model B200 qualification and quality/speed results remain outstanding. After pulling the helper, test on B200 from the checkout root in an isolated environment; this leaves the CUDA 13 PyTorch campaign environment intact: @@ -198,6 +199,39 @@ python dev/releases/mambo_v3/probe_onnx_cuda.py ``` These extras install the candidate's CUDA 12 libraries. The exact version selects -the inspected upstream wheel; it is not a general deployment pin. Do not replace -the campaign runtime or repeat full qualification until this probe passes. Restore -the campaign environment with `source .venv-mambo-runtime/bin/activate`. +the inspected upstream wheel; it is not a general deployment pin. Keep it separate from the CUDA 13 PyTorch environment. + +### Continue after the B200 probe passes + +Install only the deployment package into the existing ONNX environment, then run +qualification from the PyTorch environment. The optional `onnx_python` setting +routes both ONNX variants to the isolated interpreter, including full collection +and CPU/GPU benchmarks. Its installed dependencies are included in the campaign +fingerprint. Existing configurations without it continue to use `v3_python`. + +```sh +uv pip install --python /tmp/mambo-ort-ptx/bin/python ./deployment +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-fresh-runtime/config.json \ + --onnx-python /tmp/mambo-ort-ptx/bin/python \ + --new-campaign ~/.cache/mambo-ucloud/runs-ptx +``` + +This preserves models, manifests and previous results. After successful +qualification, keep the PyTorch environment activated and run: + +```sh +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-ptx/config.json +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-ptx/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-ptx/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-ptx \ + --output ~/.cache/mambo-ucloud/summary-ptx +``` + +The ONNX environment is in `/tmp` for this experiment; retain it for the campaign's +lifetime. Recreate and requalify it if the node's temporary storage is discarded. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index 0bb3bf7..aff5591 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -20,7 +20,7 @@ def configuration(path): data = json.loads(path.read_text()) - for key in (*PATHS, "timing_manifest", "timing_root"): + for key in (*PATHS, "onnx_python", "timing_manifest", "timing_root"): if key in data: value = path.parent / Path(data[key]).expanduser() # Resolving a venv Python symlink selects the base interpreter and loses its packages. @@ -87,7 +87,8 @@ def jobs(config, phase): command += ["--cpu-float32"] else: module = "benchmark" if timing else "evaluate" - command = [config["v3_python"], "-m", f"dev.releases.mambo_v3.{module}"] + interpreter = config.get("onnx_python", config["v3_python"]) if variant.startswith("onnx") else config["v3_python"] + command = [interpreter, "-m", f"dev.releases.mambo_v3.{module}"] if not timing: command += ["collect", "--decode-workers", str(config["threads"])] command += [ @@ -128,7 +129,7 @@ def runtime_environments(config): ) return { interpreter: json.loads(subprocess.check_output([interpreter, "-I", "-c", script], text=True)) - for interpreter in sorted({config[key] for key in ("v2_python", "v3_python", "metrics_python")}) + for interpreter in sorted({config[key] for key in ("v2_python", "v3_python", "metrics_python", "onnx_python") if key in config}) } @@ -260,10 +261,15 @@ def run(config, phase, resume=False): type=Path, help="Qualification only: reuse prepared assets with the active Python; save config.json in a new results directory", ) + parser.add_argument("--onnx-python", type=Path, help="With --new-campaign: use a separate interpreter for ONNX jobs") args = parser.parse_args() + if args.onnx_python and not args.new_campaign: + parser.error("--onnx-python requires --new-campaign; subsequent phases use the saved config") if args.new_campaign and (args.phase != "qualification" or args.resume or args.dry_run): parser.error("--new-campaign requires qualification without --resume or --dry-run") config = configuration(args.config.resolve()) + if args.onnx_python: + config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) if args.new_campaign: config = new_campaign(config, args.new_campaign) if args.dry_run: diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 0d20d2d..d1638d5 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -195,6 +195,7 @@ def test_new_campaign_reuses_assets_and_preserves_existing_evidence(tmp_path, mo from dev.releases.mambo_v3 import ucloud_release original = configuration(CONFIG.resolve()) + original["onnx_python"] = str(tmp_path / "onnx/bin/python") interpreter = str(tmp_path / "venv/bin/python") monkeypatch.setattr(ucloud_release.sys, "executable", interpreter) output = tmp_path / "new-campaign" @@ -205,8 +206,18 @@ def test_new_campaign_reuses_assets_and_preserves_existing_evidence(tmp_path, mo assert original[key] != interpreter for key in ("manifest", "root", "bundle", "legacy_source", "legacy_weights", "hf_cache"): assert updated[key] == original[key] + assert updated["onnx_python"] == original["onnx_python"] assert updated["output"] == str(output) before = (output / "config.json").read_bytes() with pytest.raises(FileExistsError): ucloud_release.new_campaign(original, output) assert (output / "config.json").read_bytes() == before + + +@pytest.mark.parametrize("phase", ["qualification", "full", "benchmark"]) +def test_separate_onnx_interpreter_only_routes_onnx_jobs(phase): + config = configuration(CONFIG.resolve()) + config["onnx_python"] = "/isolated/onnx/bin/python" + for job in jobs(config, phase): + expected = config["onnx_python"] if job["variant"].startswith("onnx") else config["v2_python" if job["legacy"] else "v3_python"] + assert job["command"][0] == expected From d1b45a9353d28b6c1db70edfafe40b2d617fc2c6 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 00:38:04 +0200 Subject: [PATCH 067/221] Add read-only progress and ETA monitor for release collections --- dev/monitor_mambo_release.py | 125 ++++++++++++++++++++++++ dev/releases/mambo_v3/ucloud-release.md | 44 ++++++++- tests/releases/test_release_monitor.py | 55 +++++++++++ 3 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 dev/monitor_mambo_release.py create mode 100644 tests/releases/test_release_monitor.py diff --git a/dev/monitor_mambo_release.py b/dev/monitor_mambo_release.py new file mode 100644 index 0000000..b5bf04c --- /dev/null +++ b/dev/monitor_mambo_release.py @@ -0,0 +1,125 @@ +"""Read-only progress/ETA monitor for existing MAMBO collection logs; standard library only.""" + +import argparse +import json +import re +import sys +import time +from collections import deque +from pathlib import Path + +PROGRESS = re.compile(r"^(?:(?:torch|onnx) \S+: )?(\d+)[ /](\d+)\s*$", re.MULTILINE) + + +def read_json(path): + try: + return json.loads(path.read_text()) + except (FileNotFoundError, json.JSONDecodeError): + return None # The producer may be between truncating and writing its report. + + +def checkpoint(path): + try: + with path.open("rb") as stream: + stream.seek(0, 2) + stream.seek(max(0, stream.tell() - 65536)) + matches = list(PROGRESS.finditer(stream.read().decode(errors="replace"))) + if matches: + done, total = map(int, matches[-1].groups()) + if 0 < done <= total: + return done, total, path.stat().st_mtime + except FileNotFoundError: + pass + return None + + +class Rate: + def __init__(self): + self.points = deque() + + def estimate(self, done, total, timestamp, now): + if self.points and (done < self.points[-1][1] or timestamp < self.points[-1][0]): + self.points.clear() + if not self.points or done > self.points[-1][1]: + self.points.append((timestamp, done)) + while len(self.points) > 2 and self.points[1][0] < timestamp - 300: + self.points.popleft() + if len(self.points) < 2: + return None + first, last = self.points[0], self.points[-1] + elapsed = last[0] - first[0] + if elapsed <= 0: + return None + cadence = elapsed / (len(self.points) - 1) + if now - last[0] > max(60, 3 * cadence): + return None # Do not continue projecting throughput while logs stop advancing. + rate = (last[1] - first[1]) / elapsed + return rate, (total - done) / rate + + +def duration(seconds): + seconds = max(0, int(seconds)) + return f"{seconds // 3600}h {(seconds % 3600) // 60:02}m {seconds % 60:02}s" + + +def snapshot(directory, rates, now): + plan = read_json(directory / "plan.json") + if plan is None: + return [f"Waiting for readable {directory / 'plan.json'}"], False + rows = [] + completed = 0 + for job in plan["jobs"]: + name = job["name"] + report = read_json(directory / name / "report.json") + status = report.get("status") if report else None + if name in plan["completed"] or status == "complete": + rows.append(f"{name}: complete") + completed += 1 + continue + log = directory / f"{name}.log" + point = checkpoint(log) + if point is None: + state = status or ("initializing; no image checkpoint yet" if log.exists() else "queued") + rows.append(f"{name}: {state}") + continue + done, total, timestamp = point + estimate = rates.setdefault(name, Rate()).estimate(done, total, timestamp, now) + text = f"{name}: {done:,}/{total:,} ({100 * done / total:.1f}%) | checkpoint age {duration(now - timestamp)}" + if status == "failed": + text += " | FAILED" + elif done == total: + text += " | finalizing; completion not yet confirmed" + elif estimate: + rate, eta = estimate + text += f" | ~{rate:.1f} images/s | remaining at last checkpoint ~{duration(eta)}" + else: + text += " | ETA unavailable: need advancing checkpoints" + rows.append(text) + header = f"{directory.name}: {plan['status']} | {completed}/{len(plan['jobs'])} jobs complete" + return [header, *rows], plan["status"] in ("complete", "failed") + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("directory", type=Path, help="Campaign phase directory, e.g. runs-ptx/full") + parser.add_argument("--interval", type=float, default=10, help="Poll seconds (default 10)") + parser.add_argument("--once", action="store_true", help="Print counts/status once; rate needs multiple observations") + args = parser.parse_args() + if args.interval <= 0: + parser.error("--interval must be positive") + rates = {} + try: + while True: + rows, finished = snapshot(args.directory.expanduser(), rates, time.time()) + if sys.stdout.isatty() and not args.once: + print("\033[2J\033[H", end="") + print(time.strftime("%Y-%m-%d %H:%M:%S"), *rows, sep="\n", flush=True) + if args.once or finished: + break + time.sleep(args.interval) + except KeyboardInterrupt: + pass + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 3a12ee3..2e60779 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -136,6 +136,48 @@ verifies and reuses completed jobs; preserve/move partial job directories before retrying. Changed code, inputs or configuration require a new output campaign and qualification. A process starting is not completion: check `plan.json` status. +## Watch an existing collection + +The standalone [monitor](../../monitor_mambo_release.py) reads only the phase's +plan, reports and the last 64 KiB of each log. It needs no model packages and works +with logs from runs started before the monitor was added: + +```sh +python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-ptx/full +``` + +It shows job completion, image counts, percentages, recent images/second and +estimated time remaining for the current job at its last checkpoint. Leave it +running: ETA requires two observed progress checkpoints (the collectors log every +50 batches, normally 1,600 images). Initialization has no image ETA. Stale +checkpoints suppress ETA; finalization is not complete until the report confirms +it. Different variants have different throughput, so no whole-campaign ETA is +inferred from the current model. This monitors collection/qualification, not metrics +reduction or benchmark timing cells. Ctrl-C stops only the monitor. + +**For a campaign already running, keep its checkout and environments unchanged.** +After the monitor commit has been pushed, fetch and extract just this standalone +file on UCloud; do not pull the new revision into the running campaign checkout: + +```sh +git fetch origin release/mambo-v3 +git show FETCH_HEAD:dev/monitor_mambo_release.py > /tmp/monitor_mambo_release.py +python /tmp/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-ptx/full +``` + +Fetching leaves the checked-out revision unchanged. Subsequent full/benchmark +phases can continue using the already qualified checkout. `--once` prints a single +status snapshot; it cannot infer throughput from old logs without timestamps. + +For result transfer after completion, retain the campaign configuration, each +phase's `plan.json`, per-job `report.json` and `samples.json`, generated +`metrics.json` files, logs and summary outputs. Keep the prediction +`mini_metric.csv` files too: compressed copies permit additional mini_metrics +analyses and reproduction locally. Dataset images and downloaded model archives +are not required for documentation integration. Package completed evidence only; +transfer instructions and completeness checks will follow once collection and +metrics/benchmark phases finish. + ## Evidence scope Quality uses the **global vocabulary** and every original test image. All predictive @@ -165,7 +207,7 @@ in-domain images; differences from Flemming laptop timings cannot be attributed solely to hardware. For a like-for-like hardware comparison, set `timing_manifest` and `timing_root` to the same Flemming inputs before qualification. -No UCloud inference results are claimed yet. Preserve current laptop figures; +Full UCloud quality and speed results are not yet available. Preserve current laptop figures; add UCloud quality and speed figures only after the completed evidence passes the summary checks. Cross-OS support and clean CUDA installation remain separate qualification tasks. diff --git a/tests/releases/test_release_monitor.py b/tests/releases/test_release_monitor.py new file mode 100644 index 0000000..850e703 --- /dev/null +++ b/tests/releases/test_release_monitor.py @@ -0,0 +1,55 @@ +"""Monitoring existing logs must not change evidence or invent throughput.""" + +import json +import os + +import pytest + +from dev.monitor_mambo_release import Rate, checkpoint, snapshot + + +@pytest.mark.parametrize("line", ["1600 632913\n", "torch cuda:0: 1600/632913\n", "onnx cpu: 1600/632913\n"]) +def test_reads_existing_formats(tmp_path, line): + path = tmp_path / "job.log" + path.write_text("warning from runtime\n" + line + "another warning\n") + assert checkpoint(path)[:2] == (1600, 632913) + assert path.read_text().endswith("another warning\n") + + +def test_rate_waits_for_progress_and_rejects_stale_or_restarted_logs(): + rate = Rate() + assert rate.estimate(100, 1000, 100, 100) is None + assert rate.estimate(100, 1000, 100, 105) is None + assert rate.estimate(200, 1000, 110, 110) == (10, 80) + assert rate.estimate(200, 1000, 110, 200) is None + assert rate.estimate(32, 1000, 210, 210) is None + + +def test_snapshot_distinguishes_completed_active_queued_and_failed(tmp_path): + plan = {"status": "running", "completed": ["v2"], "jobs": [{"name": n} for n in ("v2", "torch", "onnx")]} + p = tmp_path / "plan.json" + p.write_text(json.dumps(plan)) + log = tmp_path / "torch.log" + log.write_text("torch cuda:0: 32/632913\n") + os.utime(log, (100, 100)) + original = p.read_bytes(), log.read_bytes() + rates = {} + rows, finished = snapshot(tmp_path, rates, 100) + assert not finished + assert "v2: complete" in rows and "onnx: queued" in rows + assert "ETA unavailable" in rows[2] + log.write_text("torch cuda:0: 32/632913\ntorch cuda:0: 1632/632913\n") + os.utime(log, (110, 110)) + rows, _ = snapshot(tmp_path, rates, 110) + assert "160.0 images/s" in rows[2] + assert p.read_bytes() == original[0] + (tmp_path / "torch").mkdir() + (tmp_path / "torch/report.json").write_text('{"status": "failed"}') + rows, _ = snapshot(tmp_path, rates, 110) + assert "FAILED" in rows[2] and "images/s" not in rows[2] + + +def test_partial_plan_write_is_retryable(tmp_path): + (tmp_path / "plan.json").write_text('{"status":') + rows, finished = snapshot(tmp_path, {}, 100) + assert not finished and "Waiting" in rows[0] From 218afc94c70e8f241ef91543a5135aea55aece90 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 01:12:50 +0200 Subject: [PATCH 068/221] perf: overlap release collection with bounded image preparation --- deployment/mambo_deploy/augmentation.py | 13 +++-- dev/releases/mambo_v3/evaluate.py | 57 +++++++++--------- dev/releases/mambo_v3/prefetch.py | 66 +++++++++++++++++++++ dev/releases/mambo_v3/ucloud-release.md | 68 +++++++++++++++++++++- dev/releases/mambo_v3/ucloud_release.py | 73 ++++++++++++++++++++++- tests/releases/test_prefetch.py | 77 +++++++++++++++++++++++++ tests/releases/test_ucloud_release.py | 63 ++++++++++++++++++++ 7 files changed, 382 insertions(+), 35 deletions(-) create mode 100644 dev/releases/mambo_v3/prefetch.py create mode 100644 tests/releases/test_prefetch.py diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index 56d0c5a..bad7577 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -163,14 +163,19 @@ def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] decoded = mapped(_rgb, items) + views = (np.stack(mapped(partial(_prepare_view, transform=transform), decoded)) for transform in tta.transforms) + return infer_prepared(runtime, views, len(tta.transforms), embeddings) + + +def infer_prepared(runtime, views, view_count, embeddings=False): + """Aggregate prepared views in recipe order, identically for streaming and prefetched inputs.""" leaves, vectors = None, None - for transform in tta.transforms: - prepared = np.stack(mapped(partial(_prepare_view, transform=transform), decoded)) + for prepared in views: scores, embedding = runtime(prepared, embeddings) - scores = scores.astype(np.float32) / np.float32(len(tta.transforms)) + scores = scores.astype(np.float32) / np.float32(view_count) leaves = scores if leaves is None else leaves + scores if embeddings: - embedding = embedding.astype(np.float32) / np.float32(len(tta.transforms)) + embedding = embedding.astype(np.float32) / np.float32(view_count) vectors = embedding if vectors is None else vectors + embedding if embeddings: norms = np.linalg.norm(vectors, axis=1, keepdims=True) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 2da88bd..db67c5c 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -5,18 +5,18 @@ import hashlib import platform import time -from concurrent.futures import ThreadPoolExecutor from contextlib import ExitStack from pathlib import Path import numpy as np from deployment.mambo_deploy import Predictor -from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES, infer_prepared from deployment.mambo_deploy.preprocessing import preprocess from deployment.mambo_deploy.results import Prediction, hierarchy from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json +from dev.releases.mambo_v3.prefetch import prepared_batches def runtime_settings(threads, backend="torch"): @@ -88,7 +88,6 @@ def collect(args): for name, selected in selectors.items() } with ExitStack() as stack: - pool = stack.enter_context(ThreadPoolExecutor(max_workers=args.decode_workers)) if args.decode_workers else None writers = {} for name in selectors: directory = output / name @@ -99,28 +98,26 @@ def collect(args): embeddings = None if args.embeddings: embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) - timings = { - "decode_preprocess_seconds": 0.0, - "runtime_seconds": 0.0, - "reduce_write_seconds": 0.0, - "tta_prepare_infer_seconds": 0.0, - } - for offset in range(0, len(records), args.batch_size): - batch = records[offset : offset + args.batch_size] - paths = [args.root / r["path"] for r in batch] - for path, record in zip(paths, batch, strict=True): - if file_hash(path) != record["sha256"]: - raise ValueError(f"Image bytes changed: {path}") + timings = {"prepare_worker_seconds": 0.0, "input_wait_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} + report["pipeline"] = {"decode_workers": args.decode_workers, "prefetch_batches": args.prefetch_batches, "read_once": True} + batches = prepared_batches(records, args.root, args.batch_size, args.decode_workers, args.prefetch_batches, predictor.tta) + stack.callback(batches.close) + completed = 0 + progress_start = last_progress = time.perf_counter() + while True: + waiting = time.perf_counter() + try: + offset, batch, views, prepare_seconds = next(batches) + except StopIteration: + break + timings["input_wait_seconds"] += time.perf_counter() - waiting + timings["prepare_worker_seconds"] += prepare_seconds t = time.perf_counter() if predictor.tta is not None: - leaf, vectors = predictor._infer_batch(paths, args.embeddings, pool) - timings["tta_prepare_infer_seconds"] += time.perf_counter() - t + leaf, vectors = infer_prepared(predictor._infer, views, len(views), args.embeddings) else: - images = predictor._prepare(paths, pool) - timings["decode_preprocess_seconds"] += time.perf_counter() - t - t = time.perf_counter() - leaf, vectors = predictor._infer(images, args.embeddings) - timings["runtime_seconds"] += time.perf_counter() - t + leaf, vectors = predictor._infer(views[0], args.embeddings) + timings["runtime_seconds"] += time.perf_counter() - t if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): raise ValueError("Invalid leaf scores") if embeddings is not None: @@ -133,8 +130,15 @@ def collect(args): result = Prediction(*hierarchy(leaf, selected, predictor.bundle.classes)) writers[name].writerows(canonical_rows(batch, result, offset)) timings["reduce_write_seconds"] += time.perf_counter() - t - if offset % (args.batch_size * 50) == 0: - print(f"{args.backend} {args.device}: {offset + len(batch)}/{len(records)}", flush=True) + del views + completed += len(batch) + now = time.perf_counter() + if now - last_progress >= 5 or completed == len(records): + rate = completed / (now - progress_start) + # Retain the existing machine-readable count line for live monitors. + print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) + print(f"{rate:.1f} images/s; ETA {(len(records) - completed) / rate / 60:.1f} min", flush=True) + last_progress = now if embeddings is not None: embeddings.flush() if args.backend == "onnx": @@ -175,13 +179,14 @@ def main(): run.add_argument("--batch-size", type=int, default=32) run.add_argument("--threads", type=int, default=4) run.add_argument("--decode-workers", type=int, default=4) + run.add_argument("--prefetch-batches", type=int, default=2, help="Prepared batches queued ahead; 0 disables overlap") run.add_argument("--presets", nargs="+", default=list(PRESETS)) args = parser.parse_args() if args.command == "prepare": prepare_flemming(args.root, args.reference, args.output) else: - if args.batch_size < 1 or args.decode_workers < 0: - parser.error("batch-size must be positive and decode-workers nonnegative") + if args.batch_size < 1 or args.decode_workers < 0 or args.prefetch_batches < 0: + parser.error("batch-size must be positive; decode-workers and prefetch-batches must be nonnegative") collect(args) diff --git a/dev/releases/mambo_v3/prefetch.py b/dev/releases/mambo_v3/prefetch.py new file mode 100644 index 0000000..037fc27 --- /dev/null +++ b/dev/releases/mambo_v3/prefetch.py @@ -0,0 +1,66 @@ +"""Bounded, ordered CPU preparation for release collection; no runtime calls in workers.""" + +import hashlib +import io +import time +from collections import deque +from concurrent.futures import ThreadPoolExecutor +from contextlib import ExitStack +from functools import partial + +import numpy as np +from PIL import Image + +from deployment.mambo_deploy.augmentation import _prepare_view +from deployment.mambo_deploy.preprocessing import _rgb, preprocess + + +def prepare_record(record, root, tta): + path = root / record["path"] + data = path.read_bytes() + if hashlib.sha256(data).hexdigest() != record["sha256"]: + raise ValueError(f"Image bytes changed: {path}") + with Image.open(io.BytesIO(data)) as image: + decoded = _rgb(image) + if tta is None: + return (preprocess(decoded),) + return tuple(_prepare_view(decoded, transform) for transform in tta.transforms) + + +def prepared_batches(records, root, batch_size, workers, prefetch_batches, tta=None): + """Keep at most prefetch_batches queued batches plus the batch held by the consumer.""" + if batch_size < 1 or workers < 0 or prefetch_batches < 0: + raise ValueError("Positive batch size and nonnegative workers/prefetch required") + with ExitStack() as stack: + pool = stack.enter_context(ThreadPoolExecutor(max_workers=workers)) if workers else None + prepare = partial(prepare_record, root=root, tta=tta) + + def batch(offset): + start = time.perf_counter() + selected = records[offset : offset + batch_size] + images = list(pool.map(prepare, selected)) if pool else [prepare(record) for record in selected] + views = tuple(np.stack(view) for view in zip(*images, strict=True)) + return offset, selected, views, time.perf_counter() - start + + offsets = iter(range(0, len(records), batch_size)) + if not prefetch_batches: + for offset in offsets: + yield batch(offset) + return + # A single coordinator uses the loading pool; no GPU/model state crosses threads. + producer = ThreadPoolExecutor(max_workers=1) + pending = deque() + try: + for _ in range(prefetch_batches): + if (offset := next(offsets, None)) is not None: + pending.append(producer.submit(batch, offset)) + while pending: + result = pending.popleft().result() + if (offset := next(offsets, None)) is not None: + pending.append(producer.submit(batch, offset)) + yield result + del result + finally: + for future in pending: + future.cancel() + producer.shutdown(wait=True, cancel_futures=True) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 2e60779..fa2a2b4 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -49,7 +49,7 @@ passed PyTorch and ONNX inference on CPU and CUDA with default TTA, both prediction/embedding modes, regional and custom lists. Both CUDA ONNX graphs used full optimization without fallback. This is a four-image contract check, not a quality or speed comparison. The original V2 pipeline also passed a four-image -CUDA qualification in the same environment. B200 qualification remains pending. +CUDA qualification in the same environment. B200 qualification subsequently passed with the separate ONNX runtime described below. | Dependency | Previous evaluation lock | Fresh laptop resolution | | --- | --- | --- | @@ -149,7 +149,7 @@ python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-ptx/full It shows job completion, image counts, percentages, recent images/second and estimated time remaining for the current job at its last checkpoint. Leave it running: ETA requires two observed progress checkpoints (the collectors log every -50 batches, normally 1,600 images). Initialization has no image ETA. Stale +50 batches in older collectors; the concurrent V3 collector logs approximately every five seconds). Initialization has no image ETA. Stale checkpoints suppress ETA; finalization is not complete until the report confirms it. Different variants have different throughput, so no whole-campaign ETA is inferred from the current model. This monitors collection/qualification, not metrics @@ -228,7 +228,7 @@ On 25 September 2026 it passed standalone Sigmoid and the four-image MAMBO contract check on the RTX 3080 Ti Laptop GPU: both ONNX graphs, default TTA, embeddings and regional/custom masks, with full optimization and no retry. The user also confirmed the standalone CUDA Sigmoid probe passes on B200. -Full-model B200 qualification and quality/speed results remain outstanding. +The user subsequently confirmed full-model B200 qualification passed for all five variants. Full quality/speed results remain outstanding. After pulling the helper, test on B200 from the checkout root in an isolated environment; this leaves the CUDA 13 PyTorch campaign environment intact: @@ -277,3 +277,65 @@ python -m dev.releases.mambo_v3.ucloud_summary \ The ONNX environment is in `/tmp` for this experiment; retain it for the campaign's lifetime. Recreate and requalify it if the node's temporary storage is discarded. + +## Restart V3 collection with concurrent preparation + +For the 48-vCPU B200 allocation, start with **16 preparation workers and two +prefetched batches**. V3 collection now reads each image once for both SHA-256 +verification and decoding, and prepares subsequent batches (including all TTA +views) while the main thread runs inference and writes predictions. Ordering, +preprocessing and prediction aggregation are unchanged. The queue bounds prepared +image memory; it does not cache the dataset. This targets IO latency and idle GPU +time without changing model precision, batch size or postprocessing. + +Stop the old collection and cancel any queued shell follow-up commands **before +pulling this change**. Keep its results and both runtime environments. No package +installation or dataset preparation is needed. From the updated checkout: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-ptx/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-prefetch \ + --decode-workers 16 --prefetch-batches 2 \ + --reuse-v2-from ~/.cache/mambo-ucloud/runs-ptx +``` + +This inherits the separate ONNX interpreter. Completed V2 qualification/full +results are copied only after checking the invocation, inputs, environment, +relevant code and output hashes. V3 variants are requalified and recollected; +partial old V3 results remain untouched. After qualification succeeds: + +```sh +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-prefetch/config.json +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-prefetch/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-prefetch/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-prefetch \ + --output ~/.cache/mambo-ucloud/summary-prefetch +``` + +Monitor from another terminal: + +```sh +python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-prefetch/full +``` + +V3 logs counts and throughput/ETA approximately every five seconds. Reports +separate `input_wait_seconds`, `runtime_seconds` and `reduce_write_seconds`; +`prepare_worker_seconds` overlaps these and must not be added to them as elapsed +time. Runtime time includes first-use initialization. These counters help assess +whether preparation keeps inference supplied before changing worker or queue sizes. +Set `--prefetch-batches 0` when creating a campaign to disable overlap. + +A 256-image laptop ONNX check (batch 32; four workers before, sixteen afterward) +produced byte-identical prediction CSVs, and byte-identical TTA embeddings. +Collection elapsed time decreased from 5.49 to 4.64 seconds without TTA and from +9.41 to 7.48 seconds with default TTA and embeddings. These short checks establish +local benefit and output preservation, not B200 throughput. B200 full collection +remains to be measured. The dedicated speed benchmarks still measure the deployment +API unchanged, not this prefetched evaluation collector; all benchmark variants +run afresh, including V2. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index aff5591..302f070 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -5,6 +5,7 @@ import json import os import platform +import shutil import subprocess import sys from pathlib import Path @@ -20,7 +21,7 @@ def configuration(path): data = json.loads(path.read_text()) - for key in (*PATHS, "onnx_python", "timing_manifest", "timing_root"): + for key in (*PATHS, "onnx_python", "reuse_v2_from", "timing_manifest", "timing_root"): if key in data: value = path.parent / Path(data[key]).expanduser() # Resolving a venv Python symlink selects the base interpreter and loses its packages. @@ -28,6 +29,9 @@ def configuration(path): for key in ("quality_batch_size", "qualification_count", "threads"): if not isinstance(data[key], int) or data[key] < 1: raise ValueError(f"Positive integer required: {key}") + for key, minimum in (("decode_workers", 0), ("prefetch_batches", 0)): + if key in data and (not isinstance(data[key], int) or data[key] < minimum): + raise ValueError(f"Nonnegative integer required: {key}") for key in ("cpu_batches", "gpu_batches"): if not data[key] or any(not isinstance(b, int) or b < 1 for b in data[key]): raise ValueError(f"Positive batches required: {key}") @@ -90,7 +94,13 @@ def jobs(config, phase): interpreter = config.get("onnx_python", config["v3_python"]) if variant.startswith("onnx") else config["v3_python"] command = [interpreter, "-m", f"dev.releases.mambo_v3.{module}"] if not timing: - command += ["collect", "--decode-workers", str(config["threads"])] + command += [ + "collect", + "--decode-workers", + str(config.get("decode_workers", config["threads"])), + "--prefetch-batches", + str(config.get("prefetch_batches", 2)), + ] command += [ "--bundle", config["bundle"], @@ -170,6 +180,51 @@ def bank_identity(directory, report): return hashlib.sha256(json.dumps(records, sort_keys=True).encode()).hexdigest() +def reuse_v2(config, phase, job, frozen): + """Copy completed V2 evidence only when its inputs, runtime and implementation still match.""" + source = Path(config["reuse_v2_from"]) / phase + plan_path = source / "plan.json" + prior = json.loads(plan_path.read_text()) + if "v2" not in prior["completed"]: + raise ValueError(f"No completed V2 evidence in {source}") + previous = next(item for item in prior["jobs"] if item["name"] == "v2") + + def invocation(command): + command = list(command) + command[command.index("--output") + 1] = "" + return command + + if invocation(previous["command"]) != invocation(job["command"]): + raise ValueError("Cannot reuse V2 with changed invocation") + old, new = prior["fingerprint"]["inputs"], frozen["inputs"] + for key in ("manifest", "bundle"): + if old[key] != new[key]: + raise ValueError(f"Cannot reuse V2 with changed {key}") + interpreter = config["v2_python"] + if old["environments"][interpreter] != new["environments"][interpreter]: + raise ValueError("Cannot reuse V2 with changed environment") + # These changes implement V3 collection/prefetch and campaign orchestration only. + allowed = { + "dev/releases/mambo_v3/evaluate.py", + "dev/releases/mambo_v3/prefetch.py", + "dev/releases/mambo_v3/ucloud_release.py", + "deployment/mambo_deploy/augmentation.py", + } + changed = {name for name in old["scripts"].keys() | new["scripts"].keys() if old["scripts"].get(name) != new["scripts"].get(name)} + if changed - allowed: + raise ValueError(f"Cannot reuse V2 with changed scripts: {sorted(changed - allowed)}") + report = validated_report(source / "v2") + if file_hash(source / "v2/samples.json") != report["sample_ids_sha256"]: + raise ValueError("Changed source V2 sample identities") + digest = file_hash(source / "v2/report.json") + if digest != prior["reports_sha256"]["v2"]: + raise ValueError("Changed source V2 report") + destination = Path(config["output"]) / phase / "v2" + shutil.copytree(source / "v2", destination) + print(f"Reused completed V2 {phase} from {source}", flush=True) + return {"source": str(source), "plan_sha256": file_hash(plan_path), "report_sha256": digest} + + def run(config, phase, resume=False): frozen = fingerprint(config) output = Path(config["output"]) / phase @@ -208,6 +263,8 @@ def run(config, phase, resume=False): directory = output / job["name"] if directory.exists() and not (directory / "report.json").exists(): raise ValueError(f"Partial job {directory}; preserve it elsewhere before resuming") + if not directory.exists() and job["legacy"] and phase != "benchmark" and config.get("reuse_v2_from"): + plan.setdefault("reused", {})[job["name"]] = reuse_v2(config, phase, job, frozen) if not directory.exists(): env = dict( os.environ, @@ -262,7 +319,14 @@ def run(config, phase, resume=False): help="Qualification only: reuse prepared assets with the active Python; save config.json in a new results directory", ) parser.add_argument("--onnx-python", type=Path, help="With --new-campaign: use a separate interpreter for ONNX jobs") + parser.add_argument("--decode-workers", type=int, help="With --new-campaign: V3 image preparation workers") + parser.add_argument("--prefetch-batches", type=int, help="With --new-campaign: bounded V3 preparation queue (0 disables)") + parser.add_argument("--reuse-v2-from", type=Path, help="With --new-campaign: verified completed V2 qualification/full evidence") args = parser.parse_args() + if any(value is not None for value in (args.decode_workers, args.prefetch_batches, args.reuse_v2_from)) and not args.new_campaign: + parser.error("Collection overrides require --new-campaign") + if any(value is not None and value < 0 for value in (args.decode_workers, args.prefetch_batches)): + parser.error("Workers and prefetch must be nonnegative") if args.onnx_python and not args.new_campaign: parser.error("--onnx-python requires --new-campaign; subsequent phases use the saved config") if args.new_campaign and (args.phase != "qualification" or args.resume or args.dry_run): @@ -270,6 +334,11 @@ def run(config, phase, resume=False): config = configuration(args.config.resolve()) if args.onnx_python: config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) + for key in ("decode_workers", "prefetch_batches"): + if (value := getattr(args, key)) is not None: + config[key] = value + if args.reuse_v2_from: + config["reuse_v2_from"] = str(args.reuse_v2_from.expanduser().resolve()) if args.new_campaign: config = new_campaign(config, args.new_campaign) if args.dry_run: diff --git a/tests/releases/test_prefetch.py b/tests/releases/test_prefetch.py new file mode 100644 index 0000000..aa57ff9 --- /dev/null +++ b/tests/releases/test_prefetch.py @@ -0,0 +1,77 @@ +"""Verify ordered, bounded overlap preserves the original pixels and TTA aggregation.""" + +import hashlib +import threading + +import numpy as np +import pytest +from PIL import Image + +from deployment.mambo_deploy.augmentation import infer_augmented, infer_prepared, resolve_tta +from deployment.mambo_deploy.preprocessing import preprocess +from dev.releases.mambo_v3 import prefetch + + +@pytest.mark.parametrize("recipe", ["none", "rotation30_pad25_3"]) +def test_prepared_views_and_results_are_identical(tmp_path, recipe): + records = [] + for i in range(3): + path = tmp_path / f"{i}.png" + Image.fromarray(np.random.default_rng(i).integers(0, 256, (31, 47, 3), dtype=np.uint8)).save(path) + records.append({"path": path.name, "sha256": hashlib.sha256(path.read_bytes()).hexdigest()}) + paths = [tmp_path / r["path"] for r in records] + tta = resolve_tta(recipe) + + def runtime(images, embeddings): + values = images.mean(axis=(2, 3)) + return values, values.copy() if embeddings else None + + batches = list(prefetch.prepared_batches(records, tmp_path, 3, 2, 2, tta)) + views = batches[0][2] + if tta is None: + np.testing.assert_array_equal(views[0], np.stack([preprocess(path) for path in paths])) + else: + expected = infer_augmented(runtime, paths, tta, True) + observed = infer_prepared(runtime, views, len(views), True) + for a, b in zip(expected, observed, strict=True): + np.testing.assert_array_equal(a, b) + + +def test_corrupt_image_fails_before_decode(tmp_path): + (tmp_path / "bad").write_bytes(b"wrong bytes") + records = [{"path": "bad", "sha256": "0" * 64}] + with pytest.raises(ValueError, match="Image bytes changed"): + list(prefetch.prepared_batches(records, tmp_path, 1, 2, 2)) + + +def test_prefetch_is_bounded_and_advances_while_consumer_is_busy(monkeypatch, tmp_path): + prepared = [] + third = threading.Event() + + def prepare(record, root, tta): + prepared.append(record) + if record == 2: + third.set() + return (np.full((1,), record),) + + monkeypatch.setattr(prefetch, "prepare_record", prepare) + batches = prefetch.prepared_batches(list(range(20)), tmp_path, 1, 1, 2) + assert next(batches)[0] == 0 + assert third.wait(timeout=2), "Producer should advance while consumer holds the first batch" + assert prepared == [0, 1, 2] # current batch + two ahead; not the entire request + assert next(batches)[0] == 1 + batches.close() + + +def test_unprefetched_mode_remains_lazy(monkeypatch, tmp_path): + prepared = [] + + def prepare(record, root, tta): + prepared.append(record) + return (np.full((1,), record),) + + monkeypatch.setattr(prefetch, "prepare_record", prepare) + batches = prefetch.prepared_batches(list(range(5)), tmp_path, 1, 0, 0) + assert next(batches)[0] == 0 + assert prepared == [0] + batches.close() diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index d1638d5..5be1f3d 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -221,3 +221,66 @@ def test_separate_onnx_interpreter_only_routes_onnx_jobs(phase): for job in jobs(config, phase): expected = config["onnx_python"] if job["variant"].startswith("onnx") else config["v2_python" if job["legacy"] else "v3_python"] assert job["command"][0] == expected + + +@pytest.mark.parametrize("tamper", [None, "manifest", "environment", "script", "csv", "samples"]) +def test_reuse_completed_v2_only_when_evidence_matches(tmp_path, tamper): + import copy + + from dev.benchmarks.inference.onnx_inference import file_hash + from dev.releases.mambo_v3.evaluation_data import write_json + from dev.releases.mambo_v3.ucloud_release import reuse_v2 + + source = tmp_path / "old/full" + (source / "v2/full").mkdir(parents=True) + (source / "v2/full/mini_metric.csv").write_text("original predictions") + (source / "v2/samples.json").write_text("[]") + report = dict( + status="complete", + csv_sha256={"full": file_hash(source / "v2/full/mini_metric.csv")}, + sample_ids_sha256=file_hash(source / "v2/samples.json"), + ) + write_json(source / "v2/report.json", report) + inputs = dict( + manifest="manifest", + bundle="bundle", + environments={"python": {"version": "same"}}, + scripts={"legacy.py": "same", "dev/releases/mambo_v3/evaluate.py": "old"}, + ) + job = dict(name="v2", command=["python", "--output", "old-output"]) + plan = dict(completed=["v2"], jobs=[job], fingerprint={"inputs": inputs}, reports_sha256={"v2": file_hash(source / "v2/report.json")}) + write_json(source / "plan.json", plan) + frozen = {"inputs": copy.deepcopy(inputs)} + frozen["inputs"]["scripts"]["dev/releases/mambo_v3/evaluate.py"] = "updated-v3-only" + config = dict(reuse_v2_from=str(source.parent), output=str(tmp_path / "new"), v2_python="python") + if tamper == "manifest": + frozen["inputs"]["manifest"] = "different" + elif tamper == "environment": + frozen["inputs"]["environments"]["python"] = {"version": "different"} + elif tamper == "script": + frozen["inputs"]["scripts"]["legacy.py"] = "different" + elif tamper == "csv": + (source / "v2/full/mini_metric.csv").write_text("changed") + elif tamper == "samples": + (source / "v2/samples.json").write_text("changed") + if tamper: + with pytest.raises(ValueError): + reuse_v2(config, "full", job, frozen) + assert not (tmp_path / "new/full/v2").exists() + else: + result = reuse_v2(config, "full", job, frozen) + assert result["source"] == str(source) + assert (tmp_path / "new/full/v2/full/mini_metric.csv").read_text() == "original predictions" + + +def test_loading_controls_apply_only_to_v3_collection(): + config = configuration(CONFIG.resolve()) + config.update(decode_workers=16, prefetch_batches=2) + for phase in ("qualification", "full", "benchmark"): + for job in jobs(config, phase): + command = job["command"] + if phase != "benchmark" and not job["legacy"]: + assert command[command.index("--decode-workers") + 1] == "16" + assert command[command.index("--prefetch-batches") + 1] == "2" + else: + assert "--prefetch-batches" not in command From 9ee06f96a6e0a27a31b7396d99c57999b7c8ac7f Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 01:33:05 +0200 Subject: [PATCH 069/221] perf: stream deployment inputs with independent IO and preparation pools --- deployment/README.md | 28 ++++ deployment/mambo_deploy/predictor.py | 57 +++++++- deployment/mambo_deploy/streaming.py | 170 ++++++++++++++++++++++++ dev/releases/mambo_v3/benchmark.py | 34 +++++ dev/releases/mambo_v3/evaluate.py | 27 +++- dev/releases/mambo_v3/ucloud-release.md | 62 ++++++++- dev/releases/mambo_v3/ucloud_release.py | 33 ++++- dev/releases/mambo_v3/ucloud_summary.py | 22 ++- tests/releases/test_deployment.py | 23 ++++ tests/releases/test_streaming.py | 72 ++++++++++ tests/releases/test_ucloud_release.py | 7 +- 11 files changed, 521 insertions(+), 14 deletions(-) create mode 100644 deployment/mambo_deploy/streaming.py create mode 100644 tests/releases/test_streaming.py diff --git a/deployment/README.md b/deployment/README.md index 64f14a6..34a72e9 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -166,3 +166,31 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. In-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification. + +### Streaming image collections + +For large path collections, `predict_stream` overlaps reading and preparation with +inference and yields one prediction batch at a time, without accumulating outputs: + +```python +from contextlib import closing + +with closing(predictor.predict_stream(image_paths)) as batches: + for prediction in batches: + consume(prediction) +``` + +Use `embeddings=True` to yield `(prediction, embeddings)` pairs. Input order, +class selection and TTA semantics match `predict`. `closing` also releases workers +when you stop early; shutdown waits for filesystem calls already in progress. + +Tune `read_workers` and `read_window` to hide storage latency; tune +`prepare_workers` for decoding/TTA CPU capacity. `prefetch_batches` bounds prepared +images and `encoded_budget` bounds reserved encoded bytes (including active reads). +An individual file larger than that budget fails explicitly. The defaults are +32 readers, a 128-image window, the predictor's preparation worker count, two +prefetched batches and 256 MiB encoded storage. These controls are API-only and +independent of model batch size, which the read window must accommodate. A supplied +`stats={}` receives queue counts, reserved bytes and cumulative input-wait time. +The byte budget is not a total-process memory limit: decoding temporaries, prepared +views, the model and yielded results also consume memory. diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index e7d21ea..38a7f9f 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -5,18 +5,19 @@ import re import threading from concurrent.futures import ThreadPoolExecutor -from contextlib import nullcontext +from contextlib import closing, nullcontext from itertools import islice from pathlib import Path import numpy as np -from .augmentation import infer_augmented, resolve_tta +from .augmentation import infer_augmented, infer_prepared, resolve_tta from .bundle import Bundle from .download import default_bundle from .onnx_session import create_session from .preprocessing import RECIPE, image_items, preprocess from .results import Prediction, hierarchy +from .streaming import prepared_stream class Predictor: @@ -276,3 +277,55 @@ def __call__(self, x, **kwargs): def predict_with_embeddings(self, x, topk=1): return self._predict(x, embeddings=True, topk=topk) + + def predict_stream( + self, + paths, + *, + embeddings=False, + topk=1, + read_workers=32, + prepare_workers=None, + read_window=128, + prefetch_batches=2, + encoded_budget=256 * 1024**2, + stats=None, + ): + """Yield one Prediction (or Prediction/embedding pair) per batch of paths. + + Use contextlib.closing when stopping before exhaustion. Input paths are lazy; + outputs are not accumulated. Loading settings are explicit per stream. + """ + batches = prepared_stream( + ((path, None) for path in paths), + self.batch_size, + tta=self.tta, + read_workers=read_workers, + prepare_workers=self.preprocess_workers if prepare_workers is None else prepare_workers, + read_window=read_window, + prefetch_batches=prefetch_batches, + encoded_budget=encoded_budget, + stats=stats, + ) + with closing(batches): + for _, views in batches: + with self._lock: + leaves, vectors = ( + infer_prepared(self._infer, views, len(views), embeddings) + if self.tta is not None + else self._infer(views[0], embeddings) + ) + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + result = Prediction( + *hierarchy(leaves, self.selected, self.bundle.classes), + topk, + model_id=self.bundle.manifest["model_id"], + backend=self.backend, + preset=self.preset, + class_list_sha256=self.class_list_sha256, + precision=self.effective_precision, + tta=self.tta.name if self.tta else "none", + tta_views=len(views), + ) + yield (result, vectors) if embeddings else result diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py new file mode 100644 index 0000000..63326b3 --- /dev/null +++ b/deployment/mambo_deploy/streaming.py @@ -0,0 +1,170 @@ +"""Bounded path streaming with independent IO and image preparation concurrency.""" + +import hashlib +import io +import threading +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np +from PIL import Image + +from .augmentation import _prepare_view +from .preprocessing import _rgb, preprocess + + +def read_image(path, size, digest): + with path.open("rb") as stream: + data = stream.read(size + 1) + if len(data) != size: + raise ValueError(f"Image size changed: {path}") + if digest is not None and hashlib.sha256(data).hexdigest() != digest: + raise ValueError(f"Image bytes changed: {path}") + return data + + +def prepare_image(data, tta): + with Image.open(io.BytesIO(data)) as image: + decoded = _rgb(image) + return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) + + +def prepared_stream( + items, + batch_size, + *, + tta=None, + read_workers=32, + prepare_workers=4, + read_window=128, + prefetch_batches=2, + encoded_budget=256 * 1024**2, + stats=None, +): + """Yield (offset, stacked views) from (path, optional SHA256) items; close on early exit. + + IO reservations include in-flight reads and bytes held by preparation. Prepared + images are bounded by (prefetch_batches + 1) * batch_size, plus a stacked batch. + Workers never touch the runtime. Shutdown waits for already-running filesystem calls. + """ + values = (batch_size, read_workers, prepare_workers, read_window, encoded_budget) + if any(not isinstance(v, int) or v < 1 for v in values) or not isinstance(prefetch_batches, int) or prefetch_batches < 0: + raise ValueError("Positive batch/workers/window/budget and nonnegative prefetch required") + if read_window < batch_size: + raise ValueError("read_window must cover at least one batch") + stats = {} if stats is None else stats + condition = threading.Condition() + state = dict(stop=False, consumed=0, end=None, error=None) + ready = {} + source = iter(items) + capacity = batch_size * (prefetch_batches + 1) + + def produce(): + reads, decoding, buffers, sizes = {}, {}, {}, {} + next_index, reserved = 0, 0 + pending = None + exhausted = False + readers = ThreadPoolExecutor(max_workers=read_workers) + preparers = ThreadPoolExecutor(max_workers=prepare_workers) + try: + while True: + with condition: + if state["stop"]: + break + consumed = state["consumed"] + for index, future in list(reads.items()): + if future.done(): + buffers[index] = future.result() + del reads[index] + for index, future in list(decoding.items()): + if future.done(): + result = future.result() + del decoding[index] + reserved -= sizes.pop(index) + with condition: + ready[index] = result + condition.notify_all() + for index in sorted(buffers): + if index < consumed + capacity and len(decoding) < prepare_workers: + decoding[index] = preparers.submit(prepare_image, buffers.pop(index), tta) + while not exhausted and next_index < consumed + read_window and len(reads) < read_workers: + if pending is None: + try: + path, digest = next(source) + except StopIteration: + exhausted = True + with condition: + state["end"] = next_index + condition.notify_all() + break + path = Path(path) + size = path.stat().st_size + if size > encoded_budget: + raise ValueError(f"Image exceeds encoded byte budget: {path}") + pending = path, digest, size + path, digest, size = pending + if reserved + size > encoded_budget: + break + sizes[next_index] = size + reserved += size + reads[next_index] = readers.submit(read_image, path, size, digest) + next_index += 1 + pending = None + with condition: + stats.update( + reading=len(reads), + encoded_ready=len(buffers), + preparing=len(decoding), + prepared_images=len(ready), + encoded_bytes=reserved, + ) + stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) + stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), len(ready) + len(decoding)) + if exhausted and not reads and not decoding and not buffers: + break + condition.wait(timeout=0.005) + except BaseException as error: + with condition: + state["error"] = error + condition.notify_all() + finally: + for future in (*reads.values(), *decoding.values()): + future.cancel() + readers.shutdown(wait=True, cancel_futures=True) + preparers.shutdown(wait=True, cancel_futures=True) + + producer = threading.Thread(target=produce, name="mambo-stream") + producer.start() + offset = 0 + try: + while True: + start = time.perf_counter() + with condition: + while True: + if state["error"] is not None: + raise state["error"] + end = min(offset + batch_size, state["end"]) if state["end"] is not None else offset + batch_size + if end == offset: + return + if all(index in ready for index in range(offset, end)): + images = [ready.pop(index) for index in range(offset, end)] + break + condition.wait() + views = tuple(np.stack(view) for view in zip(*images, strict=True)) + del images + with condition: + stats["prepared_images"] = len(ready) + stats["input_wait_seconds"] = stats.get("input_wait_seconds", 0.0) + time.perf_counter() - start + condition.notify_all() + yield offset, views + del views + offset = end + with condition: + state["consumed"] = end + condition.notify_all() + finally: + with condition: + state["stop"] = True + condition.notify_all() + producer.join() diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index d23755c..4010da5 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -142,6 +142,12 @@ def benchmark(args): for path, record in zip(paths, records, strict=True): if file_hash(path) != record["sha256"]: raise ValueError("Benchmark image bytes changed") + _, stream_records = load_records(args.manifest, args.root, args.stream_images, args.seed) + stream_paths = [args.root / record["path"] for record in stream_records] + for path, record in zip(stream_paths, stream_records, strict=True): + if file_hash(path) != record["sha256"]: + raise ValueError("Streaming benchmark image bytes changed") + report["stream_samples"] = stream_records predict = predictor.predict_with_embeddings if args.embeddings else predictor.predict report["load_components_seconds"] = {} cold_start = time.perf_counter() @@ -162,6 +168,28 @@ def benchmark(args): cell["end_to_end"] = timing(lambda: predict(paths[:size]), args.repeats) cell["prepared"] = timing(lambda: runtime(prepared, args.embeddings), args.repeats) cell["images_per_second"] = size / cell["end_to_end"]["median_seconds"] + if size == max(args.batches): + predictor.batch_size = size + stream_stats = {} + + def stream_call(): + for _ in predictor.predict_stream( + stream_paths, + embeddings=args.embeddings, + read_workers=args.read_workers, + prepare_workers=args.stream_workers, + read_window=max(size, args.read_window), + prefetch_batches=args.prefetch_batches, + encoded_budget=args.encoded_budget_mib * 1024**2, + stats=stream_stats, + ): + pass + + cell["streaming"] = timing(stream_call, 3) + cell["streaming"]["images"] = len(stream_paths) + cell["streaming"]["images_per_second"] = cell["streaming"]["images"] / cell["streaming"]["median_seconds"] + cell["streaming"]["pipeline"] = stream_stats + predictor.batch_size = max(args.batches) cell["resources"] = snapshot() report["cells"].append(cell) print(args.backend, args.device, args.embeddings, size, preset, round(cell["images_per_second"], 2), flush=True) @@ -204,6 +232,12 @@ def main(): parser.add_argument("--repeats", type=int, default=7) parser.add_argument("--bank-size", type=int, default=32) parser.add_argument("--seed", type=int, default=20260923) + parser.add_argument("--stream-images", type=int, default=1024) + parser.add_argument("--stream-workers", type=int, default=4) + parser.add_argument("--read-workers", type=int, default=32) + parser.add_argument("--read-window", type=int, default=128) + parser.add_argument("--prefetch-batches", type=int, default=2) + parser.add_argument("--encoded-budget-mib", type=int, default=256) args = parser.parse_args() if args.bank_size < 1 or min(args.batches) < 1 or args.warmup < 1 or args.repeats < 3: parser.error("Positive batches/warmup and at least three repeats required") diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index db67c5c..3388ad6 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -14,9 +14,9 @@ from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES, infer_prepared from deployment.mambo_deploy.preprocessing import preprocess from deployment.mambo_deploy.results import Prediction, hierarchy +from deployment.mambo_deploy.streaming import prepared_stream from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json -from dev.releases.mambo_v3.prefetch import prepared_batches def runtime_settings(threads, backend="torch"): @@ -98,20 +98,32 @@ def collect(args): embeddings = None if args.embeddings: embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) - timings = {"prepare_worker_seconds": 0.0, "input_wait_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} + timings = {"input_wait_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} report["pipeline"] = {"decode_workers": args.decode_workers, "prefetch_batches": args.prefetch_batches, "read_once": True} - batches = prepared_batches(records, args.root, args.batch_size, args.decode_workers, args.prefetch_batches, predictor.tta) + stream_stats = {} + report["streaming"] = stream_stats + batches = prepared_stream( + ((args.root / record["path"], record["sha256"]) for record in records), + args.batch_size, + tta=predictor.tta, + read_workers=args.read_workers, + prepare_workers=max(1, args.decode_workers), + read_window=args.read_window, + prefetch_batches=args.prefetch_batches, + encoded_budget=args.encoded_budget_mib * 1024**2, + stats=stream_stats, + ) stack.callback(batches.close) completed = 0 progress_start = last_progress = time.perf_counter() while True: waiting = time.perf_counter() try: - offset, batch, views, prepare_seconds = next(batches) + offset, views = next(batches) + batch = records[offset : offset + len(views[0])] except StopIteration: break timings["input_wait_seconds"] += time.perf_counter() - waiting - timings["prepare_worker_seconds"] += prepare_seconds t = time.perf_counter() if predictor.tta is not None: leaf, vectors = infer_prepared(predictor._infer, views, len(views), args.embeddings) @@ -137,7 +149,7 @@ def collect(args): rate = completed / (now - progress_start) # Retain the existing machine-readable count line for live monitors. print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) - print(f"{rate:.1f} images/s; ETA {(len(records) - completed) / rate / 60:.1f} min", flush=True) + print(f"{rate:.1f} images/s; ETA {(len(records) - completed) / rate / 60:.1f} min; pipeline={stream_stats}", flush=True) last_progress = now if embeddings is not None: embeddings.flush() @@ -180,6 +192,9 @@ def main(): run.add_argument("--threads", type=int, default=4) run.add_argument("--decode-workers", type=int, default=4) run.add_argument("--prefetch-batches", type=int, default=2, help="Prepared batches queued ahead; 0 disables overlap") + run.add_argument("--read-workers", type=int, default=32) + run.add_argument("--read-window", type=int, default=128) + run.add_argument("--encoded-budget-mib", type=int, default=256) run.add_argument("--presets", nargs="+", default=list(PRESETS)) args = parser.parse_args() if args.command == "prepare": diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index fa2a2b4..2712052 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -329,7 +329,8 @@ separate `input_wait_seconds`, `runtime_seconds` and `reduce_write_seconds`; `prepare_worker_seconds` overlaps these and must not be added to them as elapsed time. Runtime time includes first-use initialization. These counters help assess whether preparation keeps inference supplied before changing worker or queue sizes. -Set `--prefetch-batches 0` when creating a campaign to disable overlap. +In the continuous scheduler below, `--prefetch-batches 0` minimizes decoded +lookahead; encoded read-ahead remains active. A 256-image laptop ONNX check (batch 32; four workers before, sixteen afterward) produced byte-identical prediction CSVs, and byte-identical TTA embeddings. @@ -339,3 +340,62 @@ local benefit and output preservation, not B200 throughput. B200 full collection remains to be measured. The dedicated speed benchmarks still measure the deployment API unchanged, not this prefetched evaluation collector; all benchmark variants run afresh, including V2. + +## Continuous IO and preparation campaign + +This supersedes the batch-at-a-time collector above. The shared deployment +`prepared_stream` scheduler reads ahead independently of decoding, prepares ready +images across batch boundaries, and emits ordered batches. Collection and +`Predictor.predict_stream` use the same scheduler. Start aggressively on the +48-vCPU B200/WEKA allocation: **256 readers, 48 preparation workers, 1,024 outstanding +images, eight prefetched batches, 2 GiB encoded-byte budget**. These are explicit +campaign settings, not portable deployment defaults. They follow the +[prior storage evidence](../../../docs/training-workflow-postmortem.md#1-storage-behavior-invalidated-small-subset-extrapolation). +Prepared views have a separate count bound; TTA multiplies their memory cost. + +Stop collection and pending shell follow-ups, push/pull the implementation, then +reuse the existing environments and original completed V2 evidence: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-prefetch/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-streaming \ + --reuse-v2-from ~/.cache/mambo-ucloud/runs-ptx \ + --read-workers 256 --decode-workers 48 --read-window 1024 \ + --prefetch-batches 8 --encoded-budget-mib 2048 +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-streaming/config.json +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-streaming/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-streaming/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-streaming \ + --output ~/.cache/mambo-ucloud/summary-streaming +``` + +Monitor with `python dev/monitor_mambo_release.py +~/.cache/mambo-ucloud/runs-streaming/full`. Inspect the first roughly two minutes +of steady V3 collection before queuing the later phases. Logs report reading, +encoded-ready, preparing and prepared-image counts, reserved encoded bytes and +cumulative input-wait time. Compare changes in wait time over that interval; model +initialization and the initial fill are not steady-state evidence. If preparation +still starves inference with spare CPU capacity, the next bounded candidate is +512 readers, keeping the window and byte budget unchanged. A different setting +requires a new campaign; do not edit a qualified config mid-run. + +The old single-request timing cells remain unchanged. Additional streaming cells +use 1,024 images, the largest requested batch per device and preset, and three +observations per fresh-process trial. They include stream startup, IO, preparation, +inference, reduction and drain; integrity verification occurs before timing. +They use repeated inputs and describe warm storage, not cold WEKA throughput. +`streaming_speed.csv` exports these separately; V2 retains its original API timings +and has no new streaming cell. Keep sample-bank and execution-mode differences +visible when presenting results. Peak process memory includes both benchmark modes. + +Local validation: the aggressive settings retained byte-identical prediction CSVs +and embeddings on a 256-image ONNX CUDA/default-TTA check. That short laptop run +took about 10.8 seconds (the earlier smaller pool took 7.5 seconds); it does not +establish a speed gain on B200. The UCloud run must establish the throughput benefit. +No dependencies changed; release scripts import deployment code from the checkout. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index 302f070..d060897 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -29,7 +29,13 @@ def configuration(path): for key in ("quality_batch_size", "qualification_count", "threads"): if not isinstance(data[key], int) or data[key] < 1: raise ValueError(f"Positive integer required: {key}") - for key, minimum in (("decode_workers", 0), ("prefetch_batches", 0)): + for key, minimum in ( + ("decode_workers", 0), + ("prefetch_batches", 0), + ("read_workers", 1), + ("read_window", 1), + ("encoded_budget_mib", 1), + ): if key in data and (not isinstance(data[key], int) or data[key] < minimum): raise ValueError(f"Nonnegative integer required: {key}") for key in ("cpu_batches", "gpu_batches"): @@ -101,6 +107,15 @@ def jobs(config, phase): "--prefetch-batches", str(config.get("prefetch_batches", 2)), ] + for key, default in (("read_workers", 32), ("read_window", 128), ("encoded_budget_mib", 256)): + command += ["--" + key.replace("_", "-"), str(config.get(key, default))] + if timing: + command += [ + "--stream-workers", + str(config.get("decode_workers", config["threads"])), + "--prefetch-batches", + str(config.get("prefetch_batches", 2)), + ] command += [ "--bundle", config["bundle"], @@ -209,6 +224,10 @@ def invocation(command): "dev/releases/mambo_v3/prefetch.py", "dev/releases/mambo_v3/ucloud_release.py", "deployment/mambo_deploy/augmentation.py", + "deployment/mambo_deploy/streaming.py", + "deployment/mambo_deploy/predictor.py", + "dev/releases/mambo_v3/benchmark.py", + "dev/releases/mambo_v3/ucloud_summary.py", } changed = {name for name in old["scripts"].keys() | new["scripts"].keys() if old["scripts"].get(name) != new["scripts"].get(name)} if changed - allowed: @@ -320,9 +339,17 @@ def run(config, phase, resume=False): ) parser.add_argument("--onnx-python", type=Path, help="With --new-campaign: use a separate interpreter for ONNX jobs") parser.add_argument("--decode-workers", type=int, help="With --new-campaign: V3 image preparation workers") - parser.add_argument("--prefetch-batches", type=int, help="With --new-campaign: bounded V3 preparation queue (0 disables)") + parser.add_argument( + "--prefetch-batches", type=int, help="With --new-campaign: bounded V3 preparation queue (0 minimizes decoded lookahead)" + ) parser.add_argument("--reuse-v2-from", type=Path, help="With --new-campaign: verified completed V2 qualification/full evidence") + for key in ("read-workers", "read-window", "encoded-budget-mib"): + parser.add_argument("--" + key, type=int, help="With --new-campaign: streaming input control") args = parser.parse_args() + for key in ("read_workers", "read_window", "encoded_budget_mib"): + value = getattr(args, key) + if value is not None and (not args.new_campaign or value < 1): + parser.error("Positive streaming controls require --new-campaign") if any(value is not None for value in (args.decode_workers, args.prefetch_batches, args.reuse_v2_from)) and not args.new_campaign: parser.error("Collection overrides require --new-campaign") if any(value is not None and value < 0 for value in (args.decode_workers, args.prefetch_batches)): @@ -334,7 +361,7 @@ def run(config, phase, resume=False): config = configuration(args.config.resolve()) if args.onnx_python: config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) - for key in ("decode_workers", "prefetch_batches"): + for key in ("decode_workers", "prefetch_batches", "read_workers", "read_window", "encoded_budget_mib"): if (value := getattr(args, key)) is not None: config[key] = value if args.reuse_v2_from: diff --git a/dev/releases/mambo_v3/ucloud_summary.py b/dev/releases/mambo_v3/ucloud_summary.py index 49b15fd..b824e06 100644 --- a/dev/releases/mambo_v3/ucloud_summary.py +++ b/dev/releases/mambo_v3/ucloud_summary.py @@ -23,6 +23,7 @@ def summarize(root, output): "fingerprint": plans["full"]["fingerprint"], "quality": [], "speed": [], + "streaming_speed": [], "runtime_reports": {}, "metric_revision": REVISION, "policy": "Original full test split; no threshold selection on test; all and known truth; timings isolated from collection", @@ -63,6 +64,23 @@ def summarize(root, output): else: banks.add(bank_identity(directory, r)) for c in r["cells"]: + if "streaming" in c: + stream = c["streaming"] + if len(stream["seconds"]) != 3 or any(v <= 0 for v in stream["seconds"]): + raise ValueError("Require three positive streaming observations") + data["streaming_speed"].append( + { + "environment_id": data["environment_id"], + "variant": job["variant"], + "device": job["device"], + "trial": job["name"], + "preset": c["preset"], + "batch_size": c["batch_size"], + "images": stream["images"], + "images_per_second": stream["images"] / statistics.median(stream["seconds"]), + "seconds": stream["seconds"], + } + ) seconds = c["end_to_end"]["seconds"] if len(seconds) != 7 or any(v <= 0 for v in seconds): raise ValueError("Require seven positive completed observations") @@ -85,7 +103,9 @@ def summarize(root, output): data["timing_bank_sha256"] = next(iter(banks)) output.mkdir(parents=True, exist_ok=False) write_json(output / "ucloud-summary.json", data) - for name in ("quality", "speed"): + for name in ("quality", "speed", "streaming_speed"): + if not data[name]: + continue with (output / f"{name}.csv").open("w", newline="") as stream: writer = csv.DictWriter(stream, fieldnames=list(data[name][0]), lineterminator="\n") writer.writeheader() diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 6512efc..4022ab4 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -516,3 +516,26 @@ def run(outputs, feed): assert len(sessions) == 2 assert "onnx-embedding" in p.onnx_session_info assert [n for _, _, n in calls[-2:]] == [1, 2] + + +@pytest.mark.parametrize("tta", ["none", "rotation30_pad25_3"]) +def test_streaming_api_matches_request(bundle, tmp_path, monkeypatch, tta): + from PIL import Image + + predictor = Predictor(bundle, batch_size=2, tta=tta) + + def infer(images, embeddings=False): + values = images.mean(axis=(2, 3)) + return values, values.copy() if embeddings else None + + monkeypatch.setattr(predictor, "_infer", infer) + paths = [] + for i in range(5): + path = tmp_path / f"stream-{i}.png" + Image.fromarray(np.random.default_rng(i).integers(0, 256, (23, 29, 3), dtype=np.uint8)).save(path) + paths.append(path) + expected, vectors = predictor.predict_with_embeddings(paths) + observed = list(predictor.predict_stream(iter(paths), embeddings=True, read_workers=8, prepare_workers=3)) + np.testing.assert_array_equal(np.concatenate([v for _, v in observed]), vectors) + np.testing.assert_array_equal(np.concatenate([r.indices for r, _ in observed]), expected.indices) + np.testing.assert_array_equal(np.concatenate([r.confidence for r, _ in observed]), expected.confidence) diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py new file mode 100644 index 0000000..6ab3efe --- /dev/null +++ b/tests/releases/test_streaming.py @@ -0,0 +1,72 @@ +import hashlib +import threading +from contextlib import closing + +import numpy as np +import pytest +from PIL import Image + +from deployment.mambo_deploy import streaming +from deployment.mambo_deploy.augmentation import resolve_tta +from deployment.mambo_deploy.preprocessing import preprocess + + +def inputs(tmp_path, count=9): + items = [] + for i in range(count): + path = tmp_path / f"{i}.png" + Image.fromarray(np.full((20, 30, 3), i, dtype=np.uint8)).save(path) + items.append((path, hashlib.sha256(path.read_bytes()).hexdigest())) + return items + + +@pytest.mark.parametrize("tta", [None, resolve_tta("rotation30_pad25_3")]) +def test_order_pixels_and_bounds(tmp_path, tta): + items = inputs(tmp_path) + stats = {} + batches = list( + streaming.prepared_stream( + items, 2, tta=tta, read_workers=8, prepare_workers=3, read_window=8, prefetch_batches=2, encoded_budget=400, stats=stats + ) + ) + assert [offset for offset, _ in batches] == [0, 2, 4, 6, 8] + for offset, views in batches: + expected = [streaming.prepare_image(p.read_bytes(), tta) for p, _ in items[offset : offset + len(views[0])]] + for i, view in enumerate(views): + np.testing.assert_array_equal(view, np.stack([image[i] for image in expected])) + assert stats["peak_encoded_bytes"] <= 400 + assert stats["peak_prepared_images"] <= 6 + + +def test_slow_first_read_does_not_block_later_preparation(tmp_path, monkeypatch): + items = inputs(tmp_path) + later = threading.Event() + original_read, original_prepare = streaming.read_image, streaming.prepare_image + + def read(path, size, digest): + if path == items[0][0]: + assert later.wait(3), "later images must prepare while first read waits" + return original_read(path, size, digest) + + def prepare(data, tta): + result = original_prepare(data, tta) + later.set() + return result + + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + assert len(list(streaming.prepared_stream(items, 2, read_window=8))) == 5 + + +def test_failure_close_and_empty(tmp_path): + items = inputs(tmp_path) + with pytest.raises(ValueError, match="bytes changed"): + list(streaming.prepared_stream([(items[0][0], "bad")], 2)) + with pytest.raises(ValueError, match="budget"): + list(streaming.prepared_stream(items, 2, encoded_budget=1)) + assert list(streaming.prepared_stream([], 2)) == [] + with closing(streaming.prepared_stream(items, 2)) as stream: + offset, views = next(stream) + assert offset == 0 + np.testing.assert_array_equal(views[0][0], preprocess(items[0][0])) + assert not any(t.name == "mambo-stream" for t in threading.enumerate()) diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 5be1f3d..306f7d3 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -108,6 +108,8 @@ def test_summary_preserves_ranks_scopes_and_rejects_changed_evidence(tmp_path): else: records = [{"path": "image.jpg"}] report.update(samples=records, cells=[dict(preset="full", batch_size=8, end_to_end={"seconds": [2] * 7})]) + if variant != "v2": + report["cells"][0]["streaming"] = {"images": 1024, "seconds": [4, 4, 4]} if variant == "v2": write_json(directory / "samples.json", records) report.update(samples=1, sample_ids_sha256=file_hash(directory / "samples.json")) @@ -118,6 +120,9 @@ def test_summary_preserves_ranks_scopes_and_rejects_changed_evidence(tmp_path): assert len(result["quality"]) == 30 and len(result["speed"]) == 5 assert {r["f1"] for r in result["quality"]} == {0.4, 0.5} assert all(r["images_per_second"] == 4 for r in result["speed"]) + assert len(result["streaming_speed"]) == 4 + assert all(r["images_per_second"] == 256 for r in result["streaming_speed"]) + assert (tmp_path / "summary/streaming_speed.csv").is_file() (tmp_path / "full/v2/full/mini_metric.csv").write_text("changed") with pytest.raises(ValueError, match="Changed predictions"): summarize(tmp_path, tmp_path / "changed-summary") @@ -282,5 +287,5 @@ def test_loading_controls_apply_only_to_v3_collection(): if phase != "benchmark" and not job["legacy"]: assert command[command.index("--decode-workers") + 1] == "16" assert command[command.index("--prefetch-batches") + 1] == "2" - else: + elif job["legacy"]: assert "--prefetch-batches" not in command From 1f6a4338bc3899b199417decc1187e6778f354b4 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 01:45:45 +0200 Subject: [PATCH 070/221] perf: assemble streaming batches off the inference thread --- deployment/README.md | 4 +- deployment/mambo_deploy/streaming.py | 57 +++++++++++++++++++------ dev/releases/mambo_v3/evaluate.py | 15 ++++++- dev/releases/mambo_v3/ucloud-release.md | 44 +++++++++++++++++++ tests/releases/test_streaming.py | 27 ++++++++++++ 5 files changed, 130 insertions(+), 17 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 34a72e9..01e50e6 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -191,6 +191,8 @@ An individual file larger than that budget fails explicitly. The defaults are 32 readers, a 128-image window, the predictor's preparation worker count, two prefetched batches and 256 MiB encoded storage. These controls are API-only and independent of model batch size, which the read window must accommodate. A supplied -`stats={}` receives queue counts, reserved bytes and cumulative input-wait time. +`stats={}` receives queue counts, reserved bytes, actual batch-queue waiting and +background batch-assembly time. Complete batches are assembled off the inference +thread; background times overlap inference. The byte budget is not a total-process memory limit: decoding temporaries, prepared views, the model and yielded results also consume memory. diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 63326b3..199f256 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -30,6 +30,14 @@ def prepare_image(data, tta): return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) +def assemble_batch(images): + """Stack and release per-image arrays on the assembler thread.""" + start = time.perf_counter() + views = tuple(np.stack(view) for view in zip(*images, strict=True)) + images.clear() + return views, time.perf_counter() - start + + def prepared_stream( items, batch_size, @@ -56,17 +64,21 @@ def prepared_stream( stats = {} if stats is None else stats condition = threading.Condition() state = dict(stop=False, consumed=0, end=None, error=None) - ready = {} + batches = {} source = iter(items) capacity = batch_size * (prefetch_batches + 1) def produce(): reads, decoding, buffers, sizes = {}, {}, {}, {} - next_index, reserved = 0, 0 + ready = {} + next_index, reserved, assemble_offset = 0, 0, 0 + assembling = None + assembling_count = 0 pending = None exhausted = False readers = ThreadPoolExecutor(max_workers=read_workers) preparers = ThreadPoolExecutor(max_workers=prepare_workers) + assembler = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-assemble") try: while True: with condition: @@ -82,9 +94,8 @@ def produce(): result = future.result() del decoding[index] reserved -= sizes.pop(index) - with condition: - ready[index] = result - condition.notify_all() + ready[index] = result + del result for index in sorted(buffers): if index < consumed + capacity and len(decoding) < prepare_workers: decoding[index] = preparers.submit(prepare_image, buffers.pop(index), tta) @@ -111,17 +122,34 @@ def produce(): reads[next_index] = readers.submit(read_image, path, size, digest) next_index += 1 pending = None + if assembling is not None and assembling.done(): + views, elapsed = assembling.result() + with condition: + batches[assemble_offset] = views + stats["batch_assembly_seconds"] = stats.get("batch_assembly_seconds", 0.0) + elapsed + condition.notify_all() + del views + assembling = None + assemble_offset += assembling_count + assembling_count = 0 + end = min(assemble_offset + batch_size, next_index) if exhausted else assemble_offset + batch_size + if assembling is None and end > assemble_offset and all(i in ready for i in range(assemble_offset, end)): + assembling_count = end - assemble_offset + assembling = assembler.submit(assemble_batch, [ready.pop(i) for i in range(assemble_offset, end)]) with condition: + prepared_count = len(ready) + sum(len(views[0]) for views in batches.values()) + assembling_count stats.update( reading=len(reads), encoded_ready=len(buffers), preparing=len(decoding), - prepared_images=len(ready), + prepared_images=prepared_count, + prepared_batches=len(batches), + assembling=assembling_count, encoded_bytes=reserved, ) stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) - stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), len(ready) + len(decoding)) - if exhausted and not reads and not decoding and not buffers: + stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), prepared_count + len(decoding)) + if exhausted and not reads and not decoding and not buffers and not ready and assembling is None: break condition.wait(timeout=0.005) except BaseException as error: @@ -133,6 +161,7 @@ def produce(): future.cancel() readers.shutdown(wait=True, cancel_futures=True) preparers.shutdown(wait=True, cancel_futures=True) + assembler.shutdown(wait=True, cancel_futures=True) producer = threading.Thread(target=produce, name="mambo-stream") producer.start() @@ -147,15 +176,15 @@ def produce(): end = min(offset + batch_size, state["end"]) if state["end"] is not None else offset + batch_size if end == offset: return - if all(index in ready for index in range(offset, end)): - images = [ready.pop(index) for index in range(offset, end)] + if offset in batches: + views = batches.pop(offset) + stats["prepared_batches"] = len(batches) + stats["prepared_images"] = max(0, stats.get("prepared_images", 0) - len(views[0])) break condition.wait() - views = tuple(np.stack(view) for view in zip(*images, strict=True)) - del images with condition: - stats["prepared_images"] = len(ready) - stats["input_wait_seconds"] = stats.get("input_wait_seconds", 0.0) + time.perf_counter() - start + stats["queue_wait_seconds"] = stats.get("queue_wait_seconds", 0.0) + time.perf_counter() - start + stats["input_wait_seconds"] = stats["queue_wait_seconds"] condition.notify_all() yield offset, views del views diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 3388ad6..97b01d3 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -115,7 +115,10 @@ def collect(args): ) stack.callback(batches.close) completed = 0 - progress_start = last_progress = time.perf_counter() + last_progress = time.perf_counter() + previous_completed = 0 + previous_timings = dict(timings) + previous_assembly = 0.0 while True: waiting = time.perf_counter() try: @@ -146,10 +149,18 @@ def collect(args): completed += len(batch) now = time.perf_counter() if now - last_progress >= 5 or completed == len(records): - rate = completed / (now - progress_start) + interval = now - last_progress + rate = (completed - previous_completed) / interval + phase_seconds = {name: round(value - previous_timings[name], 3) for name, value in timings.items()} + assembly = stream_stats.get("batch_assembly_seconds", 0.0) + phase_seconds["background_assembly_seconds"] = round(assembly - previous_assembly, 3) # Retain the existing machine-readable count line for live monitors. print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) print(f"{rate:.1f} images/s; ETA {(len(records) - completed) / rate / 60:.1f} min; pipeline={stream_stats}", flush=True) + print(f"interval={interval:.3f}s; phases={phase_seconds}", flush=True) + previous_timings = dict(timings) + previous_completed = completed + previous_assembly = assembly last_progress = now if embeddings is not None: embeddings.flush() diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 2712052..19c7533 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -399,3 +399,47 @@ and embeddings on a 256-image ONNX CUDA/default-TTA check. That short laptop run took about 10.8 seconds (the earlier smaller pool took 7.5 seconds); it does not establish a speed gain on B200. The UCloud run must establish the throughput benefit. No dependencies changed; release scripts import deployment code from the checkout. + +### Move batch assembly off the consumer thread + +The first streaming run on B200 showed 736 encoded and 256 prepared images queued, +while the old `input_wait_seconds` increased by about 8.6 seconds over a 25-second +interval. That counter included serial batch stacking on the inference thread; +it did not isolate storage waiting. Assembly now runs in a separate worker, +including release of per-image buffers. Ordered, contiguous batches are delivered +to inference without stacking there. Reader and preparation settings stay unchanged. + +Logs now show **interval** images/s and separate interval seconds for input delivery, +runtime calls and reduction/writing, plus background assembly. Background assembly +overlaps consumer work and must not be added to its timings. The pipeline counter +`queue_wait_seconds` (also exposed as `input_wait_seconds`) measures waiting for a +complete batch, including initial fill. `prepared_batches` counts complete queued +batches, and `assembling` counts images being assembled. Initial runtime loading +is still included in the first runtime interval. + +Stop the old run and queued follow-ups before pulling. Reuse the same environments, +concurrency settings and completed V2 evidence; no installation is needed: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-streaming/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-assembly +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-assembly/config.json +``` + +After inspecting roughly two minutes of steady V3 progress, continue with: + +```sh +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-assembly/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-assembly/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-assembly \ + --output ~/.cache/mambo-ucloud/summary-assembly +``` + +The standalone monitor takes `~/.cache/mambo-ucloud/runs-assembly/full`. Both full +collection and deployment streaming benchmarks use the corrected assembly path. diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index 6ab3efe..7920e55 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -70,3 +70,30 @@ def test_failure_close_and_empty(tmp_path): assert offset == 0 np.testing.assert_array_equal(views[0][0], preprocess(items[0][0])) assert not any(t.name == "mambo-stream" for t in threading.enumerate()) + + +def test_assembly_runs_in_background_and_errors_propagate(tmp_path, monkeypatch): + items = inputs(tmp_path, 5) + original = streaming.assemble_batch + calls = [] + + def assemble(images): + calls.append(threading.current_thread().name) + result = original(images) + assert images == [] # Per-image buffers are released by the assembler. + return result + + monkeypatch.setattr(streaming, "assemble_batch", assemble) + stats = {} + assert len(list(streaming.prepared_stream(items, 2, stats=stats))) == 3 + assert len(calls) == 3 and all(name.startswith("mambo-assemble") for name in calls) + assert stats["batch_assembly_seconds"] > 0 + assert stats["queue_wait_seconds"] == stats["input_wait_seconds"] + + def fail(images): + raise ValueError("assembly failure") + + monkeypatch.setattr(streaming, "assemble_batch", fail) + with pytest.raises(ValueError, match="assembly failure"): + list(streaming.prepared_stream(items, 2)) + assert not any(t.name.startswith("mambo-assemble") for t in threading.enumerate()) From ec4130d5f63c9ebd589c5422d3b63ea3b3364342 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 01:56:32 +0200 Subject: [PATCH 071/221] perf: overlap ordered results and configure V3 batch 256 --- deployment/README.md | 4 +- deployment/mambo_deploy/predictor.py | 36 ++++++++++------ deployment/mambo_deploy/result_worker.py | 27 ++++++++++++ deployment/mambo_deploy/results.py | 7 +++- dev/releases/mambo_v3/evaluate.py | 53 ++++++++++++++++++++---- dev/releases/mambo_v3/ucloud-release.md | 47 +++++++++++++++++++++ dev/releases/mambo_v3/ucloud_release.py | 21 +++++++--- tests/releases/test_deployment.py | 9 ++++ tests/releases/test_streaming.py | 27 ++++++++++++ tests/releases/test_ucloud_release.py | 15 +++++++ 10 files changed, 219 insertions(+), 27 deletions(-) create mode 100644 deployment/mambo_deploy/result_worker.py diff --git a/deployment/README.md b/deployment/README.md index 01e50e6..600f8b5 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -170,7 +170,9 @@ In-domain UCloud results will be reported separately; the [UCloud workflow](../d ### Streaming image collections For large path collections, `predict_stream` overlaps reading and preparation with -inference and yields one prediction batch at a time, without accumulating outputs: +inference and yields one prediction batch at a time, without accumulating outputs. +Ordered result processing also overlaps inference, with at most two result batches +outstanding: ```python from contextlib import closing diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 38a7f9f..b9c951c 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -16,6 +16,7 @@ from .download import default_bundle from .onnx_session import create_session from .preprocessing import RECIPE, image_items, preprocess +from .result_worker import ResultWorker from .results import Prediction, hierarchy from .streaming import prepared_stream @@ -307,7 +308,12 @@ def predict_stream( encoded_budget=encoded_budget, stats=stats, ) - with closing(batches): + + def process(leaves, vectors, selected, metadata): + result = Prediction(*hierarchy(leaves, selected, self.bundle.classes), topk, **metadata) + return (result, vectors) if embeddings else result + + with closing(batches), ResultWorker(process) as worker: for _, views in batches: with self._lock: leaves, vectors = ( @@ -317,15 +323,21 @@ def predict_stream( ) if not np.isfinite(leaves).all(): raise RuntimeError("Model returned non-finite species scores") - result = Prediction( - *hierarchy(leaves, self.selected, self.bundle.classes), - topk, - model_id=self.bundle.manifest["model_id"], - backend=self.backend, - preset=self.preset, - class_list_sha256=self.class_list_sha256, - precision=self.effective_precision, - tta=self.tta.name if self.tta else "none", - tta_views=len(views), + worker.submit( + leaves, + vectors, + self.selected.copy(), + dict( + model_id=self.bundle.manifest["model_id"], + backend=self.backend, + preset=self.preset, + class_list_sha256=self.class_list_sha256, + precision=self.effective_precision, + tta=self.tta.name if self.tta else "none", + tta_views=len(views), + ), ) - yield (result, vectors) if embeddings else result + if len(worker.pending) == 2: + yield worker.pop() + while worker.pending: + yield worker.pop() diff --git a/deployment/mambo_deploy/result_worker.py b/deployment/mambo_deploy/result_worker.py new file mode 100644 index 0000000..eef71b2 --- /dev/null +++ b/deployment/mambo_deploy/result_worker.py @@ -0,0 +1,27 @@ +"""Ordered result processing, overlapped with inference and bounded to two batches.""" + +from collections import deque +from concurrent.futures import ThreadPoolExecutor + + +class ResultWorker: + def __init__(self, function): + self.function = function + self.pending = deque() + self.pool = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-results") + + def __enter__(self): + return self + + def submit(self, *args): + if len(self.pending) >= 2: + raise RuntimeError("Drain a result before submitting another batch") + self.pending.append(self.pool.submit(self.function, *args)) + + def pop(self): + return self.pending.popleft().result() + + def __exit__(self, *exc): + for future in self.pending: + future.cancel() + self.pool.shutdown(wait=True, cancel_futures=True) diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index 172b2f5..09382d3 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -40,7 +40,12 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): raise ValueError("topk must be positive and no larger than the smallest retained rank") self.topk, self.metadata, self.raw_logits = topk, metadata, raw self.cls2idx = {str(rank): {label: i for i, label in enumerate(names)} for rank, names in enumerate(labels)} - indices = [np.argsort(-values, axis=1, kind="stable")[:, :topk] for values in raw] + indices = [ + np.argmax(values, axis=1)[:, None] + if topk == 1 and not np.isnan(values).any() + else np.argsort(-values, axis=1, kind="stable")[:, :topk] + for values in raw + ] self.indices = np.stack(indices, axis=-1) self.global_indices = np.stack([mapping[idx] for mapping, idx in zip(global_indices, indices)], axis=-1) self.logits = np.stack([np.take_along_axis(values, idx, axis=1) for values, idx in zip(raw, indices)], axis=-1) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 97b01d3..019ffa1 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -13,6 +13,7 @@ from deployment.mambo_deploy import Predictor from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES, infer_prepared from deployment.mambo_deploy.preprocessing import preprocess +from deployment.mambo_deploy.result_worker import ResultWorker from deployment.mambo_deploy.results import Prediction, hierarchy from deployment.mambo_deploy.streaming import prepared_stream from dev.benchmarks.inference.onnx_inference import file_hash @@ -98,7 +99,42 @@ def collect(args): embeddings = None if args.embeddings: embeddings = np.lib.format.open_memmap(output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(records), 1280)) - timings = {"input_wait_seconds": 0.0, "runtime_seconds": 0.0, "reduce_write_seconds": 0.0} + timings = { + name: 0.0 + for name in ( + "input_wait_seconds", + "runtime_seconds", + "output_wait_seconds", + "hierarchy_seconds", + "prediction_seconds", + "write_seconds", + ) + } + + def process(batch, leaf, offset): + phase = {name: 0.0 for name in ("hierarchy_seconds", "prediction_seconds", "write_seconds")} + for name, selected in selectors.items(): + t = time.perf_counter() + reduced = hierarchy(leaf, selected, predictor.bundle.classes) + phase["hierarchy_seconds"] += time.perf_counter() - t + t = time.perf_counter() + result = Prediction(*reduced) + phase["prediction_seconds"] += time.perf_counter() - t + t = time.perf_counter() + writers[name].writerows(canonical_rows(batch, result, offset)) + phase["write_seconds"] += time.perf_counter() - t + return len(batch), phase + + worker = stack.enter_context(ResultWorker(process)) + + def finish_one(): + t = time.perf_counter() + count, phase = worker.pop() + timings["output_wait_seconds"] += time.perf_counter() - t + for name, value in phase.items(): + timings[name] += value + return count + report["pipeline"] = {"decode_workers": args.decode_workers, "prefetch_batches": args.prefetch_batches, "read_once": True} stream_stats = {} report["streaming"] = stream_stats @@ -125,6 +161,9 @@ def collect(args): offset, views = next(batches) batch = records[offset : offset + len(views[0])] except StopIteration: + while worker.pending: + completed += finish_one() + print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) break timings["input_wait_seconds"] += time.perf_counter() - waiting t = time.perf_counter() @@ -140,13 +179,10 @@ def collect(args): raise ValueError("Invalid embeddings") np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) embeddings[offset : offset + len(batch)] = vectors - t = time.perf_counter() - for name, selected in selectors.items(): - result = Prediction(*hierarchy(leaf, selected, predictor.bundle.classes)) - writers[name].writerows(canonical_rows(batch, result, offset)) - timings["reduce_write_seconds"] += time.perf_counter() - t + worker.submit(batch, leaf, offset) del views - completed += len(batch) + if len(worker.pending) == 2: + completed += finish_one() now = time.perf_counter() if now - last_progress >= 5 or completed == len(records): interval = now - last_progress @@ -156,7 +192,8 @@ def collect(args): phase_seconds["background_assembly_seconds"] = round(assembly - previous_assembly, 3) # Retain the existing machine-readable count line for live monitors. print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) - print(f"{rate:.1f} images/s; ETA {(len(records) - completed) / rate / 60:.1f} min; pipeline={stream_stats}", flush=True) + eta = f"{(len(records) - completed) / rate / 60:.1f} min" if rate else "waiting for first written batch" + print(f"{rate:.1f} images/s; ETA {eta}; pipeline={stream_stats}", flush=True) print(f"interval={interval:.3f}s; phases={phase_seconds}", flush=True) previous_timings = dict(timings) previous_completed = completed diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 19c7533..8d78d78 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -443,3 +443,50 @@ python -m dev.releases.mambo_v3.ucloud_summary \ The standalone monitor takes `~/.cache/mambo-ucloud/runs-assembly/full`. Both full collection and deployment streaming benchmarks use the corrected assembly path. + +### Batch 256 with overlapped result processing + +Use this campaign for the next B200 run. All four V3 variants collect at batch +**256**, without a batch-size search. The original V2 collection invocation and +completed results remain unchanged. V3 GPU benchmarks retain their existing request +sizes and add 256; their streaming cell uses 256. All variants use the same enlarged +request timing image bank, while V2 retains its original batch sizes. + +Top-1 selection now uses a maximum instead of sorting every class. Confidence +normalization and hierarchical reduction are unchanged. Collection and the public +streaming API process results in a single ordered background worker with at most +two batches outstanding. CSV output order and failure propagation are preserved; +completion counts advance only after results have been written. Final reports are +published after the output queue drains. + +Keep 256 readers, 48 preparation workers and the 1,024-image read window. Use **one +prepared batch ahead** at batch 256: the preparation window holds at most 512 +images plus assembly temporaries, rather than nine batches of 256. TTA multiplies +prepared-image storage. The encoded budget remains 2 GiB. + +Stop the previous run and queued commands before pulling this change. No venv +update is needed. The new campaign inherits runtime paths and V2 reuse: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-assembly/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-batch256 \ + --v3-batch-size 256 --prefetch-batches 1 +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-batch256/config.json +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-batch256/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-batch256/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-batch256 \ + --output ~/.cache/mambo-ucloud/summary-batch256 +``` + +Watch `~/.cache/mambo-ucloud/runs-batch256/full/torch.log`. Interval timings now +separate `hierarchy_seconds`, `prediction_seconds` and `write_seconds` for completed +background jobs. They overlap inference and must not be added to foreground times. +`output_wait_seconds` measures consumer backpressure while retiring results. +B200 qualification exercises batch 256; local output checks use laptop-sized +batches and do not establish B200 memory use or throughput. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index d060897..d07a590 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -38,6 +38,8 @@ def configuration(path): ): if key in data and (not isinstance(data[key], int) or data[key] < minimum): raise ValueError(f"Nonnegative integer required: {key}") + if "v3_batch_size" in data and (not isinstance(data["v3_batch_size"], int) or data["v3_batch_size"] < 1): + raise ValueError("Positive v3_batch_size required") for key in ("cpu_batches", "gpu_batches"): if not data[key] or any(not isinstance(b, int) or b < 1 for b in data[key]): raise ValueError(f"Positive batches required: {key}") @@ -71,7 +73,7 @@ def jobs(config, phase): manifest = config.get("timing_manifest", config["manifest"]) if timing else config["manifest"] root = config.get("timing_root", config["root"]) if timing else config["root"] shared = ["--manifest", manifest, "--root", root, "--threads", str(config["threads"])] - bank_size = max(32, *config["cpu_batches"], *config["gpu_batches"]) + bank_size = max(32, *config["cpu_batches"], *config["gpu_batches"], config.get("v3_batch_size", 1)) planned = [] for trial in range(3 if timing else 1): variants = list(VARIANTS) @@ -128,14 +130,20 @@ def jobs(config, phase): ] command += [*shared, "--device", device, "--presets", *config["timing_presets" if timing else "quality_presets"]] if timing: + sizes = list(config["cpu_batches"] if device == "cpu" else config["gpu_batches"]) + if not legacy and device != "cpu" and "v3_batch_size" in config: + sizes = sorted(set([*sizes, config["v3_batch_size"]])) command += [ "--batches", - *map(str, config["cpu_batches"] if device == "cpu" else config["gpu_batches"]), + *map(str, sizes), "--bank-size", str(bank_size), ] else: - command += ["--batch-size", str(config["quality_batch_size"])] + command += [ + "--batch-size", + str(config["quality_batch_size"] if legacy else config.get("v3_batch_size", config["quality_batch_size"])), + ] if phase == "qualification": command += ["--count", str(config["qualification_count"])] name = f"trial-{trial}-{variant}-{device.replace(':', '-')}" if timing else variant @@ -225,6 +233,8 @@ def invocation(command): "dev/releases/mambo_v3/ucloud_release.py", "deployment/mambo_deploy/augmentation.py", "deployment/mambo_deploy/streaming.py", + "deployment/mambo_deploy/result_worker.py", + "deployment/mambo_deploy/results.py", "deployment/mambo_deploy/predictor.py", "dev/releases/mambo_v3/benchmark.py", "dev/releases/mambo_v3/ucloud_summary.py", @@ -345,8 +355,9 @@ def run(config, phase, resume=False): parser.add_argument("--reuse-v2-from", type=Path, help="With --new-campaign: verified completed V2 qualification/full evidence") for key in ("read-workers", "read-window", "encoded-budget-mib"): parser.add_argument("--" + key, type=int, help="With --new-campaign: streaming input control") + parser.add_argument("--v3-batch-size", type=int, help="With --new-campaign: V3 collection batch size") args = parser.parse_args() - for key in ("read_workers", "read_window", "encoded_budget_mib"): + for key in ("read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): value = getattr(args, key) if value is not None and (not args.new_campaign or value < 1): parser.error("Positive streaming controls require --new-campaign") @@ -361,7 +372,7 @@ def run(config, phase, resume=False): config = configuration(args.config.resolve()) if args.onnx_python: config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) - for key in ("decode_workers", "prefetch_batches", "read_workers", "read_window", "encoded_budget_mib"): + for key in ("decode_workers", "prefetch_batches", "read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): if (value := getattr(args, key)) is not None: config[key] = value if args.reuse_v2_from: diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 4022ab4..6374ea8 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -539,3 +539,12 @@ def infer(images, embeddings=False): np.testing.assert_array_equal(np.concatenate([v for _, v in observed]), vectors) np.testing.assert_array_equal(np.concatenate([r.indices for r, _ in observed]), expected.indices) np.testing.assert_array_equal(np.concatenate([r.confidence for r, _ in observed]), expected.confidence) + + +@pytest.mark.parametrize("topk", [1, 2]) +def test_top1_fast_path_preserves_stable_ties(topk): + raw = [np.array([[2, 2, -1], [-3, -3, -3], [0, 2, 1]], dtype=np.float32)] * 3 + labels = [["a", "b", "c"]] * 3 + result = Prediction(raw, labels, [np.arange(3)] * 3, topk) + expected = np.stack([np.argsort(-v, axis=1, kind="stable")[:, :topk] for v in raw], axis=-1) + np.testing.assert_array_equal(result.indices, expected) diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index 7920e55..4027a1f 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -97,3 +97,30 @@ def fail(images): with pytest.raises(ValueError, match="assembly failure"): list(streaming.prepared_stream(items, 2)) assert not any(t.name.startswith("mambo-assemble") for t in threading.enumerate()) + + +def test_result_worker_order_bounds_overlap_and_failure(): + from deployment.mambo_deploy.result_worker import ResultWorker + + release = threading.Event() + started = threading.Event() + + def process(value): + started.set() + assert release.wait(3) + if value < 0: + raise ValueError("result failed") + return value + + with ResultWorker(process) as worker: + worker.submit(1) + assert started.wait(3) + worker.submit(2) # Caller can advance while first result is still blocked. + with pytest.raises(RuntimeError, match="Drain"): + worker.submit(3) + release.set() + assert worker.pop() == 1 + assert worker.pop() == 2 + worker.submit(-1) + with pytest.raises(ValueError, match="result failed"): + worker.pop() diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 306f7d3..98fd572 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -289,3 +289,18 @@ def test_loading_controls_apply_only_to_v3_collection(): assert command[command.index("--prefetch-batches") + 1] == "2" elif job["legacy"]: assert "--prefetch-batches" not in command + + +def test_large_v3_batch_preserves_v2_reuse_and_shared_timing_bank(): + config = configuration(CONFIG.resolve()) + original = jobs(config, "full")[0]["command"] + config["v3_batch_size"] = 256 + assert jobs(config, "full")[0]["command"] == original + for job in jobs(config, "full")[1:]: + c = job["command"] + assert c[c.index("--batch-size") + 1] == "256" + for job in jobs(config, "benchmark"): + c = job["command"] + assert c[c.index("--bank-size") + 1] == "256" + sizes = c[c.index("--batches") + 1 : c.index("--bank-size")] + assert ("256" in sizes) == (not job["legacy"] and job["device"] != "cpu") From 5f65a0de12d7e2378f4c85f1e66e98d78f5ad125 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 02:17:34 +0200 Subject: [PATCH 072/221] perf: reuse native hierarchy and batch standalone reductions --- deployment/mambo_deploy/augmentation.py | 10 +++- deployment/mambo_deploy/predictor.py | 76 ++++++++++++++++++++----- deployment/mambo_deploy/results.py | 68 +++++++++++++++++----- dev/releases/mambo_v3/evaluate.py | 17 +++--- dev/releases/mambo_v3/ucloud-release.md | 39 +++++++++++++ tests/releases/test_deployment.py | 45 ++++++++++++++- 6 files changed, 212 insertions(+), 43 deletions(-) diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index bad7577..f58d11d 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -156,15 +156,19 @@ def _prepare_view(image, transform): return preprocess(transform(image.copy())) -def infer_augmented(runtime, items, tta, embeddings=False, pool=None): - """Generate a view, run ordinary preprocessing/inference, then aggregate leaves.""" +def prepared_views(items, tta, pool=None): + """Decode once and lazily prepare views in recipe order.""" def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] decoded = mapped(_rgb, items) views = (np.stack(mapped(partial(_prepare_view, transform=transform), decoded)) for transform in tta.transforms) - return infer_prepared(runtime, views, len(tta.transforms), embeddings) + return views + + +def infer_augmented(runtime, items, tta, embeddings=False, pool=None): + return infer_prepared(runtime, prepared_views(items, tta, pool), len(tta.transforms), embeddings) def infer_prepared(runtime, views, view_count, embeddings=False): diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index b9c951c..beb52a8 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -11,13 +11,13 @@ import numpy as np -from .augmentation import infer_augmented, infer_prepared, resolve_tta +from .augmentation import infer_augmented, infer_prepared, prepared_views, resolve_tta from .bundle import Bundle from .download import default_bundle from .onnx_session import create_session from .preprocessing import RECIPE, image_items, preprocess from .result_worker import ResultWorker -from .results import Prediction, hierarchy +from .results import HierarchyPlan, Prediction from .streaming import prepared_stream @@ -73,6 +73,7 @@ def __init__( raise ValueError("Unsupported preprocessing recipe; use the matching deployment runtime") self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads self._sessions, self._torch_model = {}, None + self._hierarchy_plans = {} self.onnx_session_info = {} self._lock = threading.RLock() self.weights = weights @@ -190,7 +191,7 @@ def _onnx(self, images, embeddings): values = self._sessions[key].run(outputs, {"images": images}) return values[0], values[1] if embeddings else None - def _torch(self, images, embeddings): + def _torch(self, images, embeddings, *, tensors=False): try: import torch @@ -227,7 +228,44 @@ def _torch(self, images, embeddings): features = features.float() output = head(features) embedding = head.preclassification(features).cpu().numpy() if embeddings else None - return output[0].float().cpu().numpy(), embedding + return (output if tensors else output[0].float().cpu().numpy()), embedding + + def hierarchy_plan(self, selected): + key = tuple(selected) + if key not in self._hierarchy_plans: + self._hierarchy_plans[key] = HierarchyPlan(selected, self.bundle.classes) + return self._hierarchy_plans[key] + + def _ranked_views(self, views, view_count, selectors, embeddings=False): + """Keep native ranks on Torch; reduce masked/averaged leaves on the same device.""" + if self.backend != "torch": + leaf, vectors = ( + infer_prepared(self._infer, views, view_count, embeddings) + if self.tta is not None + else self._infer(next(iter(views)), embeddings) + ) + return leaf, vectors, None + import torch + + leaf, vectors, output = None, None, None + with torch.inference_mode(): + for view in views: + output, embedding = self._torch(view, embeddings, tensors=True) + part = output[0].float() / view_count if self.tta is not None else output[0].float() + leaf = part if leaf is None else leaf + part + if embeddings: + part = embedding.astype(np.float32) / np.float32(view_count) if self.tta is not None else embedding + vectors = part if vectors is None else vectors + part + if embeddings and self.tta is not None: + norms = np.linalg.norm(vectors, axis=1, keepdims=True) + if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): + raise RuntimeError("TTA produced an undefined mean embedding") + vectors /= norms + native = output if self.tta is None else None + ranks = {name: self.hierarchy_plan(selected).torch(leaf, native) for name, selected in selectors.items()} + full_name = next((name for name, selected in selectors.items() if self.hierarchy_plan(selected).full), None) + leaf_array = ranks[full_name][0][0] if full_name is not None else leaf.cpu().numpy() + return leaf_array, vectors, ranks def _prepare(self, batch, pool=None): return np.stack(list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch]) @@ -242,11 +280,18 @@ def _infer_batch(self, batch, embeddings=False, pool=None): def _predict(self, x, embeddings=False, topk=1): with self._lock: - leaf_batches, embedding_batches = [], [] + leaf_batches, embedding_batches, rank_batches = [], [], [] items = image_items(x) with ThreadPoolExecutor(max_workers=self.preprocess_workers) if self.preprocess_workers > 1 else nullcontext(None) as pool: while batch := list(islice(items, self.batch_size)): - leaves, vectors = self._infer_batch(batch, embeddings, pool) + if self.backend == "torch": + views = prepared_views(batch, self.tta, pool) if self.tta else (self._prepare(batch, pool),) + leaves, vectors, ranks = self._ranked_views( + views, len(self.tta.transforms) if self.tta else 1, {"selected": self.selected}, embeddings + ) + rank_batches.append(ranks["selected"]) + else: + leaves, vectors = self._infer_batch(batch, embeddings, pool) if not np.isfinite(leaves).all(): raise RuntimeError("Model returned non-finite species scores") leaf_batches.append(leaves) @@ -254,7 +299,11 @@ def _predict(self, x, embeddings=False, topk=1): embedding_batches.append(vectors) if not leaf_batches: raise ValueError("No images supplied") - raw, labels, mappings = hierarchy(np.concatenate(leaf_batches), self.selected, self.bundle.classes) + if rank_batches: + raw = [np.concatenate([batch[0][rank] for batch in rank_batches]) for rank in range(len(rank_batches[0][0]))] + labels, mappings = rank_batches[0][1:] + else: + raw, labels, mappings = self.hierarchy_plan(self.selected).numpy(np.concatenate(leaf_batches)) result = Prediction( raw, labels, @@ -309,24 +358,21 @@ def predict_stream( stats=stats, ) - def process(leaves, vectors, selected, metadata): - result = Prediction(*hierarchy(leaves, selected, self.bundle.classes), topk, **metadata) + def process(leaves, vectors, plan, ranks, metadata): + result = Prediction(*(ranks if ranks is not None else plan.numpy(leaves)), topk, **metadata) return (result, vectors) if embeddings else result with closing(batches), ResultWorker(process) as worker: for _, views in batches: with self._lock: - leaves, vectors = ( - infer_prepared(self._infer, views, len(views), embeddings) - if self.tta is not None - else self._infer(views[0], embeddings) - ) + leaves, vectors, ranks = self._ranked_views(views, len(views), {"selected": self.selected}, embeddings) if not np.isfinite(leaves).all(): raise RuntimeError("Model returned non-finite species scores") worker.submit( leaves, vectors, - self.selected.copy(), + self.hierarchy_plan(self.selected), + ranks["selected"] if ranks is not None else None, dict( model_id=self.bundle.manifest["model_id"], backend=self.backend, diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index 09382d3..92df190 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -16,22 +16,60 @@ def to_dict(self): return asdict(self) +class HierarchyPlan: + """Cache vocabulary order and parent groups; no runtime dependency for NumPy.""" + + def __init__(self, selected, classes): + indices = np.asarray(selected, dtype=np.int64) + self.full = np.array_equal(indices, np.arange(len(classes["labels"][0]))) + self.indices = [indices] + self.groups = [] + for parents in classes["parents"]: + indices, inverse = np.unique(np.asarray(parents, dtype=np.int64)[indices], return_inverse=True) + order = np.argsort(inverse, kind="stable") + starts = np.r_[0, np.flatnonzero(np.diff(inverse[order])) + 1] + self.groups.append((inverse, order, starts)) + self.indices.append(indices) + self.labels = [[classes["labels"][rank][int(i)] for i in indices] for rank, indices in enumerate(self.indices)] + self._devices = {} + + def numpy(self, leaf): + values = np.asarray(leaf if self.full else leaf[:, self.indices[0]], dtype=np.float32) + logits = [values] + for inverse, order, starts in self.groups: + ordered = values[:, order] + maxima = np.maximum.reduceat(ordered, starts, axis=1) + shifts = np.where(np.isfinite(maxima), maxima, 0) + with np.errstate(over="ignore", divide="ignore", invalid="ignore"): + shifted = np.exp(ordered - shifts[:, inverse[order]]) + values = np.log(np.add.reduceat(shifted, starts, axis=1)) + shifts + logits.append(values) + return logits, self.labels, self.indices + + def torch(self, leaf, native=None): + import torch + + from mini_trainer.hierarchical.utils import batched_scatter_logsumexp + + if self.full and native is not None: + values = native + else: + key = str(leaf.device) + if key not in self._devices: + self._devices[key] = ( + torch.as_tensor(self.indices[0], device=leaf.device), + [torch.as_tensor(group[0], device=leaf.device) for group in self.groups], + ) + selected, parents = self._devices[key] + values = [leaf.index_select(1, selected)] + for rank, index in enumerate(parents, start=1): + values.append(batched_scatter_logsumexp(values[-1], index, dim_size=len(self.indices[rank]))) + return [value.float().cpu().numpy() for value in values], self.labels, self.indices + + def hierarchy(leaf, selected, classes): - """Mask leaves first; preserve original rank ordering and recompute every parent.""" - indices = np.asarray(selected, dtype=np.int64) - values = np.asarray(leaf[:, indices], dtype=np.float32) - logits, global_indices = [values], [indices] - for parents in classes["parents"]: - selected_parents = np.asarray(parents, dtype=np.int64)[indices] - indices, inverse = np.unique(selected_parents, return_inverse=True) - grouped = np.full((len(values), len(indices)), -np.inf, dtype=np.float32) - for row in range(len(values)): - np.logaddexp.at(grouped[row], inverse, values[row]) - values = grouped - logits.append(values) - global_indices.append(indices) - labels = [[classes["labels"][rank][int(i)] for i in indices] for rank, indices in enumerate(global_indices)] - return logits, labels, global_indices + """Mask leaves before batched stable parent reduction, preserving class order.""" + return HierarchyPlan(selected, classes).numpy(leaf) class Prediction: diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 019ffa1..15d1ea7 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -11,10 +11,10 @@ import numpy as np from deployment.mambo_deploy import Predictor -from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES, infer_prepared +from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES from deployment.mambo_deploy.preprocessing import preprocess from deployment.mambo_deploy.result_worker import ResultWorker -from deployment.mambo_deploy.results import Prediction, hierarchy +from deployment.mambo_deploy.results import Prediction from deployment.mambo_deploy.streaming import prepared_stream from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json @@ -111,11 +111,13 @@ def collect(args): ) } - def process(batch, leaf, offset): + plans = {name: predictor.hierarchy_plan(selected) for name, selected in selectors.items()} + + def process(batch, leaf, ranks, offset): phase = {name: 0.0 for name in ("hierarchy_seconds", "prediction_seconds", "write_seconds")} for name, selected in selectors.items(): t = time.perf_counter() - reduced = hierarchy(leaf, selected, predictor.bundle.classes) + reduced = ranks[name] if ranks is not None else plans[name].numpy(leaf) phase["hierarchy_seconds"] += time.perf_counter() - t t = time.perf_counter() result = Prediction(*reduced) @@ -167,10 +169,7 @@ def finish_one(): break timings["input_wait_seconds"] += time.perf_counter() - waiting t = time.perf_counter() - if predictor.tta is not None: - leaf, vectors = infer_prepared(predictor._infer, views, len(views), args.embeddings) - else: - leaf, vectors = predictor._infer(views[0], args.embeddings) + leaf, vectors, ranks = predictor._ranked_views(views, len(views), selectors, args.embeddings) timings["runtime_seconds"] += time.perf_counter() - t if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): raise ValueError("Invalid leaf scores") @@ -179,7 +178,7 @@ def finish_one(): raise ValueError("Invalid embeddings") np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) embeddings[offset : offset + len(batch)] = vectors - worker.submit(batch, leaf, offset) + worker.submit(batch, leaf, ranks, offset) del views if len(worker.pending) == 2: completed += finish_one() diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 8d78d78..2bbb009 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -490,3 +490,42 @@ background jobs. They overlap inference and must not be added to foreground time `output_wait_seconds` measures consumer backpressure while retiring results. B200 qualification exercises batch 256; local output checks use laptop-sized batches and do not establish B200 memory use or throughput. + +### Reuse native hierarchy reduction + +The PyTorch deployment adapter now retains the head's existing global rank outputs +instead of transferring species logits and recomputing their hierarchy on CPU. +Regional/custom lists use the existing `batched_scatter_logsumexp` on the model +device after species selection. TTA still averages species logits before masking +and hierarchy reduction; parent logits are not averaged across views. + +The standalone ONNX path uses cached parent groups and batched stable max/exp/sum/log +reductions in NumPy. It does not require PyTorch. Parent confidence values can differ +slightly from the previous sequential reduction because summation order changes. +Both request and streaming APIs, collection and benchmarks use these paths. +For PyTorch, device-side hierarchy work is included in `runtime_seconds`; the +background `hierarchy_seconds` now measures retrieval of the prepared ranks. +For ONNX it continues to measure CPU reduction. + +Stop the active run before pulling; no dependency installation is needed. Inherit +batch 256, the current buffers and completed V2 reuse into the updated campaign: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-batch256/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-hierarchy +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-hierarchy/config.json +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-hierarchy/full +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-hierarchy/config.json +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-hierarchy \ + --output ~/.cache/mambo-ucloud/summary-hierarchy +``` + +Monitor `~/.cache/mambo-ucloud/runs-hierarchy/full/torch.log`. Existing output timing +fields and counters remain available. Requalify all V3 variants; reuse of the +unchanged V2 evidence is still checked against its original inputs and code. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 6374ea8..5670182 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -246,11 +246,15 @@ def test_tta_averages_leaf_logits_before_masking_and_normalizes_embeddings(bundl predictor = Predictor(bundle, backend=backend, tta="hflip", class_list=["a", "c"], batch_size=2, preprocess_workers=1) seen = [] - def runtime(images, embeddings): + def runtime(images, embeddings, *, tensors=False): seen.append(images.copy()) right = images[:, 0, 0, -1] > images[:, 0, 0, 0] scores = np.array([[4, 9, 0] if x else [0, 1, 6] for x in right], dtype=np.float32) vectors = np.array([[1, 0] if x else [0, 1] for x in right], dtype=np.float32) + if tensors: + import torch + + scores = [torch.from_numpy(scores)] return scores, vectors if embeddings else None monkeypatch.setattr(predictor, "_" + backend, runtime) @@ -548,3 +552,42 @@ def test_top1_fast_path_preserves_stable_ties(topk): result = Prediction(raw, labels, [np.arange(3)] * 3, topk) expected = np.stack([np.argsort(-v, axis=1, kind="stable")[:, :topk] for v in raw], axis=-1) np.testing.assert_array_equal(result.indices, expected) + + +@pytest.mark.parametrize("selected", [[0, 1, 2], [0, 2], [1]]) +def test_batched_hierarchy_matches_original_and_torch(selected): + import torch + + from deployment.mambo_deploy.results import HierarchyPlan + + leaves = np.random.default_rng(9).normal(size=(256, 3)).astype(np.float32) * 100 + plan = HierarchyPlan(selected, CLASSES) + actual = plan.numpy(leaves)[0] + expected = [leaves[:, selected]] + for inverse, _, _ in plan.groups: + grouped = np.full((len(leaves), int(inverse.max()) + 1), -np.inf, dtype=np.float32) + for row in range(len(leaves)): + np.logaddexp.at(grouped[row], inverse, expected[-1][row]) + expected.append(grouped) + native = plan.torch(torch.from_numpy(leaves))[0] + for a, b, c in zip(actual, expected, native, strict=True): + np.testing.assert_allclose(a, b, atol=3e-5, rtol=1e-6) + np.testing.assert_allclose(a, c, atol=3e-5, rtol=1e-6) + + +def test_global_native_ranks_are_reused(monkeypatch): + import torch + + from deployment.mambo_deploy.results import HierarchyPlan + from mini_trainer.hierarchical import utils + + plan = HierarchyPlan([0, 1, 2], CLASSES) + native = [torch.ones((2, n)) for n in (3, 2, 1)] + + def fail(*args, **kwargs): + pytest.fail("Global hierarchy should not be recomputed") + + monkeypatch.setattr(utils, "batched_scatter_logsumexp", fail) + raw, _, _ = plan.torch(native[0], native) + for values, tensor in zip(raw, native, strict=True): + np.testing.assert_array_equal(values, tensor.numpy()) From 9d6e29e2ab7250835754305f0fe219dc2a146f39 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 02:46:16 +0200 Subject: [PATCH 073/221] Improve deployment streaming buffer reuse and CUDA transfers --- deployment/README.md | 5 + deployment/mambo_deploy/predictor.py | 80 +++++++++++++--- deployment/mambo_deploy/results.py | 10 +- deployment/mambo_deploy/streaming.py | 45 ++++++++- deployment/mambo_deploy/transfers.py | 121 ++++++++++++++++++++++++ dev/releases/mambo_v3/benchmark.py | 2 + dev/releases/mambo_v3/evaluate.py | 14 ++- dev/releases/mambo_v3/ucloud-release.md | 52 ++++++++++ dev/releases/mambo_v3/ucloud_release.py | 8 ++ tests/releases/test_deployment.py | 2 + tests/releases/test_streaming.py | 45 +++++++++ 11 files changed, 360 insertions(+), 24 deletions(-) create mode 100644 deployment/mambo_deploy/transfers.py diff --git a/deployment/README.md b/deployment/README.md index 600f8b5..eff5063 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -196,5 +196,10 @@ independent of model batch size, which the read window must accommodate. A suppl `stats={}` receives queue counts, reserved bytes, actual batch-queue waiting and background batch-assembly time. Complete batches are assembled off the inference thread; background times overlap inference. +CUDA streaming reuses device buffers and stages the next batch in a transfer worker. +PyTorch uses pinned host buffers and a separate CUDA copy stream; ONNX uses device +inputs with I/O binding, with copy overlap determined by the runtime. Set +`device_prefetch=False` to disable device staging for comparison. PyTorch downloads +ranks and embeddings together with one completion wait. The byte budget is not a total-process memory limit: decoding temporaries, prepared views, the model and yielded results also consume memory. diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index beb52a8..d533dfe 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -19,6 +19,7 @@ from .result_worker import ResultWorker from .results import HierarchyPlan, Prediction from .streaming import prepared_stream +from .transfers import device_batches, download_tensors, pinned_factory class Predictor: @@ -74,6 +75,8 @@ def __init__( self.backend, self.device, self.batch_size, self.threads = backend, str(device), batch_size, threads self._sessions, self._torch_model = {}, None self._hierarchy_plans = {} + self.runtime_timings = {} + self._model_events = [] self.onnx_session_info = {} self._lock = threading.RLock() self.weights = weights @@ -188,7 +191,15 @@ def _onnx(self, images, embeddings): self.onnx_session_info[key] = info self._sessions[key] = session outputs = ["output_0", "embedding"] if embeddings else ["output_0"] - values = self._sessions[key].run(outputs, {"images": images}) + if isinstance(images, ort.OrtValue): + binding = self._sessions[key].io_binding() + binding.bind_ortvalue_input("images", images) + for name in outputs: + binding.bind_output(name, "cpu") + self._sessions[key].run_with_iobinding(binding) + values = [value.numpy() for value in binding.get_outputs()] + else: + values = self._sessions[key].run(outputs, {"images": images}) return values[0], values[1] if embeddings else None def _torch(self, images, embeddings, *, tensors=False): @@ -223,11 +234,21 @@ def _torch(self, images, embeddings, *, tensors=False): torch.autocast(device_type, dtype=dtype, enabled=amp), bypass_submodule(self._torch_model, self._torch_model._backbone_output_name), ): - features = self._torch_model(torch.from_numpy(images).to(self.device)) + tensor = images if isinstance(images, torch.Tensor) else torch.from_numpy(images).to(self.device) + events = None + if tensors and tensor.device.type == "cuda": + events = (torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)) + events[0].record(torch.cuda.current_stream(tensor.device)) + features = self._torch_model(tensor) with torch.autocast(device_type, enabled=False): features = features.float() output = head(features) - embedding = head.preclassification(features).cpu().numpy() if embeddings else None + embedding = head.preclassification(features) if embeddings else None + if events is not None: + events[1].record(torch.cuda.current_stream(tensor.device)) + self._model_events.append(events) + if embedding is not None and not tensors: + embedding = embedding.cpu().numpy() return (output if tensors else output[0].float().cpu().numpy()), embedding def hierarchy_plan(self, selected): @@ -247,26 +268,58 @@ def _ranked_views(self, views, view_count, selectors, embeddings=False): return leaf, vectors, None import torch - leaf, vectors, output = None, None, None + leaf, vectors, output, norms = None, None, None, None + self._model_events.clear() with torch.inference_mode(): for view in views: output, embedding = self._torch(view, embeddings, tensors=True) part = output[0].float() / view_count if self.tta is not None else output[0].float() leaf = part if leaf is None else leaf + part if embeddings: - part = embedding.astype(np.float32) / np.float32(view_count) if self.tta is not None else embedding + embedding = torch.as_tensor(embedding, device=leaf.device).float() + part = embedding / view_count if self.tta is not None else embedding vectors = part if vectors is None else vectors + part if embeddings and self.tta is not None: - norms = np.linalg.norm(vectors, axis=1, keepdims=True) - if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): - raise RuntimeError("TTA produced an undefined mean embedding") + norms = torch.linalg.vector_norm(vectors, dim=1, keepdim=True) vectors /= norms native = output if self.tta is None else None - ranks = {name: self.hierarchy_plan(selected).torch(leaf, native) for name, selected in selectors.items()} + ranks = {name: self.hierarchy_plan(selected).torch_values(leaf, native) for name, selected in selectors.items()} + tensors = [value for raw, _, _ in ranks.values() for value in raw] full_name = next((name for name, selected in selectors.items() if self.hierarchy_plan(selected).full), None) - leaf_array = ranks[full_name][0][0] if full_name is not None else leaf.cpu().numpy() + if full_name is None: + tensors.append(leaf) + if vectors is not None: + tensors.append(vectors) + if norms is not None: + tensors.append(norms) + downloaded = iter(download_tensors(tensors, self.runtime_timings)) + for begin, end in self._model_events: + self.runtime_timings["model_stream_seconds"] = ( + self.runtime_timings.get("model_stream_seconds", 0.0) + begin.elapsed_time(end) / 1000 + ) + self._model_events.clear() + ranks = {name: ([next(downloaded) for _ in raw], labels, mapping) for name, (raw, labels, mapping) in ranks.items()} + leaf_array = ranks[full_name][0][0] if full_name is not None else next(downloaded) + vectors = next(downloaded) if vectors is not None else None + if norms is not None: + norms = next(downloaded) + if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): + raise RuntimeError("TTA produced an undefined mean embedding") return leaf_array, vectors, ranks + def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=None, **options): + """Shared streaming preparation; device slots remain valid until the next iteration.""" + stats = {} if stats is None else stats + accelerated = device_prefetch and self.device != "cpu" + factory = pinned_factory(self.device) if accelerated and self.backend == "torch" else None + source = prepared_stream(items, batch_size, tta=self.tta, stats=stats, reuse_buffers=True, buffer_factory=factory, **options) + if accelerated: + yield from device_batches(source, self.backend, self.device, stats) + else: + with closing(source): + for offset, views in source: + yield offset, views, len(views[0]) + def _prepare(self, batch, pool=None): return np.stack(list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch]) @@ -340,16 +393,17 @@ def predict_stream( prefetch_batches=2, encoded_budget=256 * 1024**2, stats=None, + device_prefetch=True, ): """Yield one Prediction (or Prediction/embedding pair) per batch of paths. Use contextlib.closing when stopping before exhaustion. Input paths are lazy; outputs are not accumulated. Loading settings are explicit per stream. """ - batches = prepared_stream( + batches = self.prepared_batches( ((path, None) for path in paths), self.batch_size, - tta=self.tta, + device_prefetch=device_prefetch, read_workers=read_workers, prepare_workers=self.preprocess_workers if prepare_workers is None else prepare_workers, read_window=read_window, @@ -363,7 +417,7 @@ def process(leaves, vectors, plan, ranks, metadata): return (result, vectors) if embeddings else result with closing(batches), ResultWorker(process) as worker: - for _, views in batches: + for _, views, _ in batches: with self._lock: leaves, vectors, ranks = self._ranked_views(views, len(views), {"selected": self.selected}, embeddings) if not np.isfinite(leaves).all(): diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index 92df190..30d0a4f 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -46,7 +46,7 @@ def numpy(self, leaf): logits.append(values) return logits, self.labels, self.indices - def torch(self, leaf, native=None): + def torch_values(self, leaf, native=None): import torch from mini_trainer.hierarchical.utils import batched_scatter_logsumexp @@ -64,7 +64,13 @@ def torch(self, leaf, native=None): values = [leaf.index_select(1, selected)] for rank, index in enumerate(parents, start=1): values.append(batched_scatter_logsumexp(values[-1], index, dim_size=len(self.indices[rank]))) - return [value.float().cpu().numpy() for value in values], self.labels, self.indices + return values, self.labels, self.indices + + def torch(self, leaf, native=None): + from .transfers import download_tensors + + values, labels, indices = self.torch_values(leaf, native) + return download_tensors(values), labels, indices def hierarchy(leaf, selected, classes): diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 199f256..17d208c 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -30,10 +30,38 @@ def prepare_image(data, tta): return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) -def assemble_batch(images): +class BatchBuffers: + def __init__(self, factory=None): + self.factory = factory or (lambda shape: np.empty(shape, dtype=np.float32)) + self.available = [] + self.lock = threading.Lock() + self.allocations = 0 + + def acquire(self, shapes): + with self.lock: + for i, buffers in enumerate(self.available): + if all(b.shape[0] >= s[0] and b.shape[1:] == s[1:] for b, s in zip(buffers, shapes, strict=True)): + return self.available.pop(i) + self.allocations += len(shapes) + return tuple(self.factory(shape) for shape in shapes) + + def release(self, views): + # Partial batches retain the full allocation via .base; no further work follows the final partial batch. + with self.lock: + self.available.append(views) + + +def assemble_batch(images, pool=None): """Stack and release per-image arrays on the assembler thread.""" start = time.perf_counter() - views = tuple(np.stack(view) for view in zip(*images, strict=True)) + if pool is None: + views = tuple(np.stack(view) for view in zip(*images, strict=True)) + else: + shapes = [(len(images), *view.shape) for view in images[0]] + buffers = pool.acquire(shapes) + views = tuple(buffer[: len(images)] for buffer in buffers) + for index, view in enumerate(zip(*images, strict=True)): + np.stack(view, out=views[index]) images.clear() return views, time.perf_counter() - start @@ -49,12 +77,14 @@ def prepared_stream( prefetch_batches=2, encoded_budget=256 * 1024**2, stats=None, + reuse_buffers=False, + buffer_factory=None, ): """Yield (offset, stacked views) from (path, optional SHA256) items; close on early exit. IO reservations include in-flight reads and bytes held by preparation. Prepared images are bounded by (prefetch_batches + 1) * batch_size, plus a stacked batch. - Workers never touch the runtime. Shutdown waits for already-running filesystem calls. + Preparation workers do not call models or sessions. Shutdown waits for running filesystem calls. """ values = (batch_size, read_workers, prepare_workers, read_window, encoded_budget) if any(not isinstance(v, int) or v < 1 for v in values) or not isinstance(prefetch_batches, int) or prefetch_batches < 0: @@ -65,6 +95,7 @@ def prepared_stream( condition = threading.Condition() state = dict(stop=False, consumed=0, end=None, error=None) batches = {} + buffer_pool = BatchBuffers(buffer_factory) if reuse_buffers else None source = iter(items) capacity = batch_size * (prefetch_batches + 1) @@ -135,7 +166,10 @@ def produce(): end = min(assemble_offset + batch_size, next_index) if exhausted else assemble_offset + batch_size if assembling is None and end > assemble_offset and all(i in ready for i in range(assemble_offset, end)): assembling_count = end - assemble_offset - assembling = assembler.submit(assemble_batch, [ready.pop(i) for i in range(assemble_offset, end)]) + images = [ready.pop(i) for i in range(assemble_offset, end)] + assembling = ( + assembler.submit(assemble_batch, images, buffer_pool) if buffer_pool else assembler.submit(assemble_batch, images) + ) with condition: prepared_count = len(ready) + sum(len(views[0]) for views in batches.values()) + assembling_count stats.update( @@ -146,6 +180,7 @@ def produce(): prepared_batches=len(batches), assembling=assembling_count, encoded_bytes=reserved, + host_buffer_allocations=buffer_pool.allocations if buffer_pool else None, ) stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), prepared_count + len(decoding)) @@ -187,6 +222,8 @@ def produce(): stats["input_wait_seconds"] = stats["queue_wait_seconds"] condition.notify_all() yield offset, views + if buffer_pool is not None: + buffer_pool.release(views) del views offset = end with condition: diff --git a/deployment/mambo_deploy/transfers.py b/deployment/mambo_deploy/transfers.py new file mode 100644 index 0000000..283b521 --- /dev/null +++ b/deployment/mambo_deploy/transfers.py @@ -0,0 +1,121 @@ +"""Two-slot device staging; runtime imports remain optional and lazy.""" + +import time +from concurrent.futures import ThreadPoolExecutor + + +def pinned_factory(device): + import torch + + def allocate(shape): + with torch.cuda.device(device): + return torch.empty(shape, dtype=torch.float32, pin_memory=True).numpy() + + return allocate + + +def download_tensors(values, stats=None): + """One completed D2H copy for all ranks/embeddings, with owning NumPy views.""" + import torch + + if values[0].device.type == "cpu": + return [value.float().numpy() for value in values] + start = time.perf_counter() + packed = torch.cat([value.float().reshape(-1) for value in values]) + host = torch.empty(packed.shape, dtype=torch.float32, pin_memory=True) + begin = torch.cuda.Event(enable_timing=True) + begin.record(torch.cuda.current_stream(packed.device)) + host.copy_(packed, non_blocking=True) + done = torch.cuda.Event(enable_timing=True) + done.record(torch.cuda.current_stream(packed.device)) + done.synchronize() # CPU results must be complete before the result worker reads them. + if stats is not None: + stats["d2h_device_seconds"] = stats.get("d2h_device_seconds", 0.0) + begin.elapsed_time(done) / 1000 + stats["download_host_seconds"] = stats.get("download_host_seconds", 0.0) + time.perf_counter() - start + array = host.numpy() + result, offset = [], 0 + for value in values: + end = offset + value.numel() + result.append(array[offset:end].reshape(tuple(value.shape))) + offset = end + return result + + +def device_batches(source, backend, device, stats): + """Stage N+1 while N executes; yielded buffers are leased until the next iteration.""" + device_id = int(device.split(":")[-1]) if ":" in device else 0 + slots = [{"buffers": [], "used": None}, {"buffers": [], "used": None}] + counter = 0 + if backend == "torch": + import torch + + copy_stream = torch.cuda.Stream(device=device) + else: + import onnxruntime as ort + + ort.preload_dlls() if hasattr(ort, "preload_dlls") else None + pool = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-transfer") + + def stage(): + nonlocal counter + try: + offset, views = next(source) + except StopIteration: + return None + slot = slots[counter % 2] + counter += 1 + start = time.perf_counter() + if backend == "torch": + with torch.cuda.device(device), torch.cuda.stream(copy_stream): + if slot["used"] is not None: + copy_stream.wait_event(slot["used"]) + begin, end = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + begin.record(copy_stream) + staged = [] + for index, view in enumerate(views): + if index == len(slot["buffers"]): + slot["buffers"].append(torch.empty(view.shape, dtype=torch.float32, device=device)) + stats["device_buffer_allocations"] = stats.get("device_buffer_allocations", 0) + 1 + target = slot["buffers"][index][: len(view)] + target.copy_(torch.from_numpy(view), non_blocking=True) + staged.append(target) + end.record(copy_stream) + end.synchronize() # The source may recycle its pinned host buffers on next(). + stats["h2d_device_seconds"] = stats.get("h2d_device_seconds", 0.0) + begin.elapsed_time(end) / 1000 + else: + staged = [] + for index, view in enumerate(views): + if index == len(slot["buffers"]) or tuple(slot["buffers"][index].shape()) != view.shape: + value = ort.OrtValue.ortvalue_from_numpy(view, "cuda", device_id) + if index == len(slot["buffers"]): + slot["buffers"].append(value) + else: + slot["buffers"][index] = value + stats["device_buffer_allocations"] = stats.get("device_buffer_allocations", 0) + 1 + else: + slot["buffers"][index].update_inplace(view) + staged.append(slot["buffers"][index]) + stats["transfer_worker_seconds"] = stats.get("transfer_worker_seconds", 0.0) + time.perf_counter() - start + return offset, tuple(staged), slot, len(views[0]) + + future = pool.submit(stage) + try: + while True: + result = future.result() + if result is None: + break + offset, views, slot, count = result + future = pool.submit(stage) + try: + yield offset, views, count + finally: + if backend == "torch": + with torch.cuda.device(device): + slot["used"] = torch.cuda.Event() + slot["used"].record(torch.cuda.current_stream(device)) + finally: + future.cancel() + pool.shutdown(wait=True, cancel_futures=True) + source.close() + if backend == "torch": + copy_stream.synchronize() diff --git a/dev/releases/mambo_v3/benchmark.py b/dev/releases/mambo_v3/benchmark.py index 4010da5..09b216d 100644 --- a/dev/releases/mambo_v3/benchmark.py +++ b/dev/releases/mambo_v3/benchmark.py @@ -182,6 +182,7 @@ def stream_call(): prefetch_batches=args.prefetch_batches, encoded_budget=args.encoded_budget_mib * 1024**2, stats=stream_stats, + device_prefetch=not args.no_device_prefetch, ): pass @@ -232,6 +233,7 @@ def main(): parser.add_argument("--repeats", type=int, default=7) parser.add_argument("--bank-size", type=int, default=32) parser.add_argument("--seed", type=int, default=20260923) + parser.add_argument("--no-device-prefetch", action="store_true") parser.add_argument("--stream-images", type=int, default=1024) parser.add_argument("--stream-workers", type=int, default=4) parser.add_argument("--read-workers", type=int, default=32) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 15d1ea7..54ebce8 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -15,7 +15,6 @@ from deployment.mambo_deploy.preprocessing import preprocess from deployment.mambo_deploy.result_worker import ResultWorker from deployment.mambo_deploy.results import Prediction -from deployment.mambo_deploy.streaming import prepared_stream from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, prepare_flemming, write_json @@ -108,6 +107,9 @@ def collect(args): "hierarchy_seconds", "prediction_seconds", "write_seconds", + "model_stream_seconds", + "d2h_device_seconds", + "download_host_seconds", ) } @@ -140,16 +142,16 @@ def finish_one(): report["pipeline"] = {"decode_workers": args.decode_workers, "prefetch_batches": args.prefetch_batches, "read_once": True} stream_stats = {} report["streaming"] = stream_stats - batches = prepared_stream( + batches = predictor.prepared_batches( ((args.root / record["path"], record["sha256"]) for record in records), args.batch_size, - tta=predictor.tta, read_workers=args.read_workers, prepare_workers=max(1, args.decode_workers), read_window=args.read_window, prefetch_batches=args.prefetch_batches, encoded_budget=args.encoded_budget_mib * 1024**2, stats=stream_stats, + device_prefetch=not args.no_device_prefetch, ) stack.callback(batches.close) completed = 0 @@ -160,8 +162,8 @@ def finish_one(): while True: waiting = time.perf_counter() try: - offset, views = next(batches) - batch = records[offset : offset + len(views[0])] + offset, views, batch_count = next(batches) + batch = records[offset : offset + batch_count] except StopIteration: while worker.pending: completed += finish_one() @@ -171,6 +173,7 @@ def finish_one(): t = time.perf_counter() leaf, vectors, ranks = predictor._ranked_views(views, len(views), selectors, args.embeddings) timings["runtime_seconds"] += time.perf_counter() - t + timings.update(predictor.runtime_timings) if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): raise ValueError("Invalid leaf scores") if embeddings is not None: @@ -239,6 +242,7 @@ def main(): run.add_argument("--threads", type=int, default=4) run.add_argument("--decode-workers", type=int, default=4) run.add_argument("--prefetch-batches", type=int, default=2, help="Prepared batches queued ahead; 0 disables overlap") + run.add_argument("--no-device-prefetch", action="store_true") run.add_argument("--read-workers", type=int, default=32) run.add_argument("--read-window", type=int, default=128) run.add_argument("--encoded-budget-mib", type=int, default=256) diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 2bbb009..7d90039 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -529,3 +529,55 @@ python -m dev.releases.mambo_v3.ucloud_summary \ Monitor `~/.cache/mambo-ucloud/runs-hierarchy/full/torch.log`. Existing output timing fields and counters remain available. Requalify all V3 variants; reuse of the unchanged V2 evidence is still checked against its original inputs and code. + + +### Reusable buffers and device staging (current campaign) + +Collection and deployment streaming now reuse assembled host buffers and two device +buffer slots. PyTorch uses pinned host buffers and a separate CUDA copy stream to +stage the next batch during inference. Rank outputs and embeddings share one packed +CPU transfer and completion wait. ONNX uses reusable device inputs with I/O binding; +copy overlap depends on its runtime, and this path does not require PyTorch. + +Stop the previous campaign and any queued follow-up commands, then pull the change. +No environment rebuild or dependency installation is required. Inherit batch 256, +256 readers, 48 preparation workers, a 4096-image window, eight prefetched batches, +and verified V2 reuse from the existing campaign: + +```sh +source .venv-mambo-runtime/bin/activate +python -m dev.releases.mambo_v3.ucloud_release qualification \ + --config ~/.cache/mambo-ucloud/runs-prefetch8/config.json \ + --new-campaign ~/.cache/mambo-ucloud/runs-transfers && +python -m dev.releases.mambo_v3.ucloud_release full \ + --config ~/.cache/mambo-ucloud/runs-transfers/config.json +``` + +After collection succeeds, use the same campaign for all subsequent stages: + +```sh +python -m dev.releases.mambo_v3.metrics \ + --collection ~/.cache/mambo-ucloud/runs-transfers/full && +python -m dev.releases.mambo_v3.ucloud_release benchmark \ + --config ~/.cache/mambo-ucloud/runs-transfers/config.json && +python -m dev.releases.mambo_v3.ucloud_summary \ + --root ~/.cache/mambo-ucloud/runs-transfers \ + --output ~/.cache/mambo-ucloud/summary-transfers +``` + +Monitor with `python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-transfers/full`. +The `pipeline=` counters include host/device buffer allocations and transfer-worker +time; PyTorch also reports CUDA-event H2D time. Its `phases=` fields now include +`model_stream_seconds` (CUDA-stream elapsed time around model execution), +`d2h_device_seconds` (output-copy event time), and `download_host_seconds` (packing, +allocation and waiting for GPU results). Stream elapsed time is not kernel-only +time or GPU utilization. These measurements overlap: **do not add them together**. +Pinned buffers count against host RAM, not GPU memory. + +For a controlled staging comparison, pass `--no-device-prefetch` when creating a +separate new campaign; it applies to both collection and streaming benchmarks. +Single-request benchmark cells retain their existing execution path. + +Local validation covers CUDA buffer reuse and source lifetime, real PyTorch +predictions with global/regional lists and TTA/embeddings, and real ONNX CUDA +TTA/embedding collection. B200 throughput is not yet established for this change. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index d07a590..8b8be67 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -109,6 +109,8 @@ def jobs(config, phase): "--prefetch-batches", str(config.get("prefetch_batches", 2)), ] + if not config.get("device_prefetch", True): + command.append("--no-device-prefetch") for key, default in (("read_workers", 32), ("read_window", 128), ("encoded_budget_mib", 256)): command += ["--" + key.replace("_", "-"), str(config.get(key, default))] if timing: @@ -234,6 +236,7 @@ def invocation(command): "deployment/mambo_deploy/augmentation.py", "deployment/mambo_deploy/streaming.py", "deployment/mambo_deploy/result_worker.py", + "deployment/mambo_deploy/transfers.py", "deployment/mambo_deploy/results.py", "deployment/mambo_deploy/predictor.py", "dev/releases/mambo_v3/benchmark.py", @@ -356,7 +359,10 @@ def run(config, phase, resume=False): for key in ("read-workers", "read-window", "encoded-budget-mib"): parser.add_argument("--" + key, type=int, help="With --new-campaign: streaming input control") parser.add_argument("--v3-batch-size", type=int, help="With --new-campaign: V3 collection batch size") + parser.add_argument("--no-device-prefetch", action="store_true", help="With --new-campaign: disable device input staging") args = parser.parse_args() + if args.no_device_prefetch and not args.new_campaign: + parser.error("--no-device-prefetch requires --new-campaign") for key in ("read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): value = getattr(args, key) if value is not None and (not args.new_campaign or value < 1): @@ -370,6 +376,8 @@ def run(config, phase, resume=False): if args.new_campaign and (args.phase != "qualification" or args.resume or args.dry_run): parser.error("--new-campaign requires qualification without --resume or --dry-run") config = configuration(args.config.resolve()) + if args.no_device_prefetch: + config["device_prefetch"] = False if args.onnx_python: config["onnx_python"] = os.path.abspath(args.onnx_python.expanduser()) for key in ("decode_workers", "prefetch_batches", "read_workers", "read_window", "encoded_budget_mib", "v3_batch_size"): diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 5670182..30d3d4b 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -165,6 +165,7 @@ def session(path, sess_options, providers): SimpleNamespace( SessionOptions=SimpleNamespace, GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), + OrtValue=type("FakeOrtValue", (), {}), get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], InferenceSession=session, ), @@ -493,6 +494,7 @@ def run(outputs, feed): SimpleNamespace( SessionOptions=SimpleNamespace, GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), + OrtValue=type("FakeOrtValue", (), {}), get_available_providers=lambda: ["CUDAExecutionProvider"], InferenceSession=create, ), diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index 4027a1f..c793a6b 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -124,3 +124,48 @@ def process(value): worker.submit(-1) with pytest.raises(ValueError, match="result failed"): worker.pop() + + +def test_reusable_batch_buffers_are_bounded(tmp_path, monkeypatch): + items = inputs(tmp_path, 21) + stats = {} + # Keep the test about ownership/reuse, not expensive image interpolation. + monkeypatch.setattr(streaming, "prepare_image", lambda data, tta: (np.full((3, 2, 2), len(data), dtype=np.float32),)) + pointers = set() + count = 0 + with closing(streaming.prepared_stream(items, 2, prefetch_batches=2, reuse_buffers=True, stats=stats)) as batches: + for offset, views in batches: + pointers.add(views[0].ctypes.data) + assert offset == count + count += len(views[0]) + assert count == 21 + assert len(pointers) <= 4 + assert stats["host_buffer_allocations"] <= 4 + + +def test_cuda_device_slots_and_pinned_source_lifetime(): + import torch + + from deployment.mambo_deploy.transfers import device_batches, download_tensors, pinned_factory + + if not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + allocate = pinned_factory("cuda:0") + host = allocate((2, 3, 4, 4)) + assert torch.from_numpy(host).is_pinned() + + def source(): + for i in range(7): + host.fill(i) + yield i * 2, (host[:1] if i == 6 else host,) + + stats = {} + pointers = set() + with closing(device_batches(source(), "torch", "cuda:0", stats)) as batches: + for offset, views, count in batches: + pointers.add(views[0].data_ptr()) + result = download_tensors([views[0] * 2])[0] + np.testing.assert_array_equal(result, np.full((count, 3, 4, 4), offset, dtype=np.float32)) + assert len(pointers) == 2 + assert stats["device_buffer_allocations"] == 2 + assert stats["h2d_device_seconds"] >= 0 From 0eb90b24c140c550acf9295185b376232d991b58 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 08:18:54 +0200 Subject: [PATCH 074/221] Present calibrated in-domain quality and UCloud throughput evidence --- deployment/README.md | 28 +- dev/releases/mambo_v3/indomain_report.py | 200 + dev/releases/mambo_v3/indomain_speed.py | 81 + dev/releases/mambo_v3/tail_charts.py | 18 +- docs/assets/mambo-indomain-campaign.json | 733 + docs/assets/mambo-indomain-quality.svg | 3049 ++ docs/assets/mambo-indomain-speed.csv | 175 + docs/assets/mambo-indomain-speed.svg | 1516 + .../assets/mambo-indomain-streaming-speed.csv | 49 + docs/assets/mambo-indomain-support.json | 30775 ++++++++++++++++ docs/assets/mambo-indomain-tail.csv | 211 + docs/assets/mambo-indomain-thresholds.json | 460 + docs/mambo-deployment-evidence.md | 2 + docs/mambo-indomain-evidence.md | 84 + 14 files changed, 37375 insertions(+), 6 deletions(-) create mode 100644 dev/releases/mambo_v3/indomain_report.py create mode 100644 dev/releases/mambo_v3/indomain_speed.py create mode 100644 docs/assets/mambo-indomain-campaign.json create mode 100644 docs/assets/mambo-indomain-quality.svg create mode 100644 docs/assets/mambo-indomain-speed.csv create mode 100644 docs/assets/mambo-indomain-speed.svg create mode 100644 docs/assets/mambo-indomain-streaming-speed.csv create mode 100644 docs/assets/mambo-indomain-support.json create mode 100644 docs/assets/mambo-indomain-tail.csv create mode 100644 docs/assets/mambo-indomain-thresholds.json create mode 100644 docs/mambo-indomain-evidence.md diff --git a/deployment/README.md b/deployment/README.md index eff5063..646533f 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -165,7 +165,33 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. -In-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification. +### Complementary in-domain and HPC results + +The original global-lepi test split adds a comparison on general photographs using +the global vocabulary. It complements Flemming's deployment-relevant monitoring +crops; the image domains and class lists differ, so their absolute scores should +not be compared as a controlled domain-effect estimate. The same `mini_metrics` +calibration/support policy uses 568,939 reporting images and 63,974 separate +calibration images, with both confidence settings evaluated on the reporting split. + +![In-domain quality at all ranks, with calibration, support truncation and coverage](../docs/assets/mambo-indomain-quality.svg) + +V3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces +in-domain performance, illustrating that its benefit depends on the input domain; +this does not override its benefit on the more deployment-relevant Flemming crops. +Support >5 changes the class average, not the evaluation rows. Truth classes outside +that average represent 1.70% / 0.34% / <0.01% of species/genus/family images without +thresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete +metrics are in the [in-domain evidence](../docs/mambo-indomain-evidence.md). + +![EPYC CPU and B200 request throughput, with separate streaming measurements](../docs/assets/mambo-indomain-speed.svg) + +Measured on UCloud (AMD EPYC 9655 / NVIDIA B200), using four runtime threads; +streaming uses 48 preparation workers and 256 readers. Lines show median and range +across three process trials. Streaming includes startup over 1,024 images and is +shown separately from single-request measurements. These are measured pipeline +rates, not GPU throughput ceilings; preparation remains a bottleneck. Keep the +laptop results above when assessing consumer-device deployments. ### Streaming image collections diff --git a/dev/releases/mambo_v3/indomain_report.py b/dev/releases/mambo_v3/indomain_report.py new file mode 100644 index 0000000..d7bf9d6 --- /dev/null +++ b/dev/releases/mambo_v3/indomain_report.py @@ -0,0 +1,200 @@ +"""Apply the Flemming calibration and support policy to the UCloud test predictions.""" + +import argparse +import csv +import importlib.metadata +import json +from pathlib import Path + +import numpy as np + +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.defaults_report import SERIES +from dev.releases.mambo_v3.evaluation_data import write_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.tail_charts import render_paired +from dev.releases.mambo_v3.tail_report import collect as collect_tails +from dev.releases.mambo_v3.threshold_report import identity +from dev.releases.mambo_v3.ucloud_release import validated_report + + +def collect(root, output): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file + + provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) + if provenance.get("vcs_info", {}).get("commit_id") != REVISION: + raise ValueError("Require pinned mini_metrics") + plan = json.loads((root / "full/plan.json").read_text()) + if plan["status"] != "complete" or set(plan["completed"]) != {m for m, _, _ in SERIES}: + raise ValueError("Require five completed models") + output.mkdir(parents=True, exist_ok=True) + study = { + "revision": REVISION, + "plan_sha256": file_hash(root / "full/plan.json"), + "preset": "full", + "tta": "rotation30_pad25_3", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); reporting/calibration; grouped by instance_id", + "policy": "Per-rank MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; all truth", + "models": {}, + } + expected = None + for model, _, _ in SERIES: + folder = root / "full" / model + report = validated_report(folder) + if file_hash(folder / "report.json") != plan["reports_sha256"][model] or report["samples"] != 632913: + raise ValueError("Changed or incomplete report") + source = folder / "full/mini_metric.csv" + data = MetricDF.from_source(source) + if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): + raise ValueError("Require unthresholded finite predictions") + reporting, calibration = data.split((0.9, 0.1), strata=("label",), seed=42) + identities = {"full": identity(data), "report": identity(reporting), "calibration": identity(calibration)} + if expected is not None and expected != identities: + raise ValueError("Models differ in reporting/calibration populations") + expected = identities + if set(reporting.instance_id) & set(calibration.instance_id): + raise ValueError("Calibration leakage") + selected = OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, n_bootstraps=0)(calibration, verbose=0) + thresholds = [float(selected[k]) for k in range(3)] + row = { + "source": str(source), + "source_sha256": file_hash(source), + "identities": identities, + "report_images": len(set(reporting.instance_id)), + "calibration_images": len(set(calibration.instance_id)), + "thresholds": thresholds, + } + for scope, vector in (("zero", 0), ("optimized", thresholds)): + row[f"report_{scope}"] = finite_json( + evaluate_file( + reporting, + threshold=vector, + optimal=False, + known_only=False, + simple=True, + hierarchical=False, + pattern=r"^(accuracy|micro_accuracy|precision|recall|f1|coverage|theilU)$", + verbose=0, + ) + ) + study["models"][model] = row + write_json(output / "mambo-indomain-thresholds.json", study) + print(model, thresholds, row["report_images"], row["calibration_images"], flush=True) + tails = collect_tails(study) + first = next(iter(study["models"].values())) + tails.update( + tta=study["tta"], + report_images=first["report_images"], + calibration_images=first["calibration_images"], + dataset_title="In-domain global-lepi test · global vocabulary", + independent_recipe=True, + ) + write_json(output / "mambo-indomain-tail.json", tails) + rows = [{**{k: v for k, v in row.items() if k not in ("metrics", "classes")}, **row["metrics"]} for row in tails["rows"]] + with (output / "mambo-indomain-tail.csv").open("w") as stream: + writer = csv.DictWriter(stream, fieldnames=list(rows[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + publish(output) + + +def publish(output): + tails = json.loads((output / "mambo-indomain-tail.json").read_text()) + study = json.loads((output / "mambo-indomain-thresholds.json").read_text()) + compact = {k: v for k, v in tails.items() if k != "rows"} + compact["rows"] = [ + {k: v for k, v in r.items() if k != "classes"} + for r in tails["rows"] + if r["cutoff"] == -1 or (r["cutoff"] == 5 and r["domain"] == "common") + ] + compact["shared_class_domains"] = { + f"{r['scope']}/{r['rank']}": r["classes"] + for r in tails["rows"] + if r["model"] == "torch" and r["cutoff"] == 5 and r["domain"] == "common" + } + write_json(output / "mambo-indomain-support.json", compact) + render_paired(tails, output) + for suffix in ("svg", "png"): + (output / f"mambo-threshold-tail.{suffix}").rename(output / f"mambo-indomain-quality.{suffix}") + + lookup = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in tails["rows"]} + text = "# In-domain deployment evidence\n\n" + text += ( + f"Global vocabulary; {tails['report_images']:,} reporting images and {tails['calibration_images']:,} " + "separate calibration images from the original 632,913-image test split. " + "All truth is in vocabulary. Shared label-stratified 90/10 split, seed 42, grouped by image ID; " + "per-rank mini_metrics Macro-F1 calibration, eps=0.01, quantiles, no bootstraps.\n\n" + "The recipe was selected on Flemming. These general photographs complement the more deployment-relevant " + "Flemming monitoring crops; their different TTA response does not invalidate that deployment evidence.\n\n" + "Full support / >5 values use the same reporting rows. >5 requires truth and accepted-prediction support " + "in every pipeline, separately per confidence setting. No rows are removed; per-class FP/FN remain intact.\n\n" + ) + for level, rank in enumerate(("species", "genus", "family")): + text += ( + f"## {rank.title()}\n\n| Pipeline | Confidence | Threshold | " + "Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage |\n|---|---|---:|---:|---:|---:|\n" + ) + for model, label, _ in SERIES: + for scope, name in (("zero", "None"), ("optimized", "Calibrated")): + a = lookup[model, scope, rank, -1, "per_model"] + b = lookup[model, scope, rank, 5, "common"] + t = study["models"][model]["thresholds"][level] if scope == "optimized" else 0 + text += ( + f"| {label} | {name} | {t:.4f} | {a['metrics']['accuracy']:.2%} / {b['metrics']['accuracy']:.2%} | " + f"{a['metrics']['f1']:.4f} / {b['metrics']['f1']:.4f} | {a['overall_coverage']:.2%} |\n" + ) + text += "\n" + text += ( + "## Support outside the truncated average\n\n" + "| Confidence | Rank | Shared classes | Truth images outside | Proportion |\n|---|---|---:|---:|---:|\n" + ) + for scope in ("zero", "optimized"): + for rank in ("species", "genus", "family"): + row = lookup["torch", scope, rank, 5, "common"] + n = row["report_images"] - row["truth_images_in_retained_classes"] + text += f"| {scope} | {rank} | {row['class_count']} | {n:,} | {n / row['report_images']:.2%} |\n" + text += ( + "\nMachine-readable [metrics](assets/mambo-indomain-tail.csv), " + "[thresholds and split identities](assets/mambo-indomain-thresholds.json), and " + "[class domains](assets/mambo-indomain-support.json) retain provenance and supplementary metrics. " + "Thresholds are dataset-specific evidence, not new deployment defaults.\n" + ) + text += ( + "\n## HPC timing boundaries\n\n" + "The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations " + "per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. " + "CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. " + "Request, streaming and prepared-input diagnostics have different boundaries; do not pool them. " + "The short streaming bank contains 1,024 images and includes pipeline startup. " + "Prepared-input diagnostics exclude decoding/hierarchy reduction but include transfers, and remain supplementary.\n\n" + "[Request observations](assets/mambo-indomain-speed.csv) and " + "[streaming observations](assets/mambo-indomain-streaming-speed.csv) retain all trials. " + "[Campaign provenance](assets/mambo-indomain-campaign.json) identifies source hashes and runtime environments. " + "Peak host memory spans each complete benchmark process and its tested batch sizes; it is not per-cell model memory. " + "V2 was tested through batch 32 on GPU, V3 through batch 256.\n\n" + "## Reproduce\n\n" + "Use the pinned mini_metrics environment described in the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md). " + "From the repository root, with the extracted archive beneath `local-evidence/ucloud-2026-09-25/`:\n\n" + "```sh\npython -m dev.releases.mambo_v3.indomain_report \\\n" + " --root local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers \\\n" + " --output local-evidence/ucloud-2026-09-25/presentation\n" + "python -m dev.releases.mambo_v3.indomain_speed \\\n" + " --source local-evidence/ucloud-2026-09-25/mambo-results/summary-transfers \\\n" + " --output local-evidence/ucloud-2026-09-25/presentation\n```\n" + ) + (output / "mambo-indomain-evidence.md").write_text(text) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path) + parser.add_argument("--render-only", action="store_true") + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + if args.render_only: + publish(args.output) + elif args.root is None: + parser.error("--root is required for collection") + else: + collect(args.root, args.output) diff --git a/dev/releases/mambo_v3/indomain_speed.py b/dev/releases/mambo_v3/indomain_speed.py new file mode 100644 index 0000000..78d8ec4 --- /dev/null +++ b/dev/releases/mambo_v3/indomain_speed.py @@ -0,0 +1,81 @@ +"""Render environment-specific throughput from the validated UCloud summary.""" + +import argparse +import csv +import hashlib +import json +import shutil +import statistics +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +from dev.releases.mambo_v3.defaults_report import SERIES + +parser = argparse.ArgumentParser(description="Render HPC request and streaming throughput separately") +parser.add_argument("--source", type=Path, required=True) +parser.add_argument("--output", type=Path, required=True) +args = parser.parse_args() +root, out = args.source, args.output +out.mkdir(parents=True, exist_ok=True) +rows = list(csv.DictReader((root / "speed.csv").open())) +streams = list(csv.DictReader((root / "streaming_speed.csv").open())) +fig, axes = plt.subplots(1, 3, figsize=(15, 4.8)) +plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-indomain-speed-v1"}) +for ax, device in zip(axes[:2], ["cpu", "cuda:0"]): + for model, label, color in SERIES: + subset = [r for r in rows if r["device"] == device and r["preset"] == "full" and r["variant"] == model] + batches = sorted({int(r["batch_size"]) for r in subset}) + groups = [[float(r["images_per_second"]) for r in subset if int(r["batch_size"]) == b] for b in batches] + med = [statistics.median(g) for g in groups] + ax.errorbar( + batches, + med, + yerr=[[m - min(g) for m, g in zip(med, groups)], [max(g) - m for m, g in zip(med, groups)]], + label=label, + color=color, + marker="o", + capsize=3, + ) + ax.set( + xscale="log", + xlabel="Batch size", + ylabel="Images/s", + title="EPYC CPU · request" if device == "cpu" else "B200 · request", + xticks=batches, + ) + ax.set_xticklabels(batches) + ax.grid(alpha=0.15) +ax = axes[2] +for i, (model, label, color) in enumerate(SERIES[1:]): + vals = [float(r["images_per_second"]) for r in streams if r["device"] == "cuda:0" and r["preset"] == "full" and r["variant"] == model] + med = statistics.median(vals) + ax.barh(i, med, color=color) + ax.errorbar(med, i, xerr=[[med - min(vals)], [max(vals) - med]], color="black", capsize=3) +ax.set(yticks=range(4), yticklabels=[r[1] for r in SERIES[1:]], xlabel="Images/s", title="B200 · streaming, batch 256") +ax.invert_yaxis() +fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", ncol=5) +fig.text( + 0.02, + 0.02, + "Global vocabulary; median and range of 3 process trials. CPU runtime threads: 4. Streaming: 1,024 images, startup included.\n" + "Request and streaming are different execution modes; these are measured pipeline rates, not GPU throughput ceilings.", + fontsize=10, +) +fig.tight_layout(rect=(0, 0.1, 1, 0.91)) +fig.savefig(out / "mambo-indomain-speed.svg", metadata={"Date": None}) +path = out / "mambo-indomain-speed.svg" +path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + +# Retain the exact source observations and campaign identities alongside the figure. +for source, destination in (("speed.csv", "speed.csv"), ("streaming_speed.csv", "streaming-speed.csv")): + shutil.copy2(root / source, out / ("mambo-indomain-" + destination)) +data = json.loads((root / "ucloud-summary.json").read_text()) +provenance = {k: data[k] for k in ("environment_id", "fingerprint", "metric_revision", "policy", "sample_ids_sha256", "timing_bank_sha256")} +for name in ("ucloud-summary.json", "speed.csv", "streaming_speed.csv"): + with (root / name).open("rb") as stream: + provenance.setdefault("source_sha256", {})[name] = hashlib.file_digest(stream, "sha256").hexdigest() +(out / "mambo-indomain-campaign.json").write_text(json.dumps(provenance, indent=2) + "\n") diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index 0013f88..c00cf06 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -80,8 +80,11 @@ def render_paired(data, output): from matplotlib.lines import Line2D rows = {(r["model"], r["scope"], r["rank"], r["cutoff"], r["domain"]): r for r in data["rows"]} - if {r["report_images"] for r in data["rows"]} != {52788} or {r["scope"] for r in data["rows"]} != {"zero", "optimized"}: - raise ValueError("Expected both confidence settings on the 52,788-image reporting partition") + if {r["report_images"] for r in data["rows"]} != {data.get("report_images", 52788)} or {r["scope"] for r in data["rows"]} != { + "zero", + "optimized", + }: + raise ValueError("Expected both confidence settings on the shared reporting partition") plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-paired-tail-v1"}) fig, axes = plt.subplots(3, 3, figsize=(16, 11), gridspec_kw={"width_ratios": [1, 1, 0.75]}) for level, rank in enumerate(("species", "genus", "family")): @@ -120,18 +123,23 @@ def render_paired(data, output): Line2D([], [], marker="o", color="gray", markerfacecolor=fill, linestyle="none", label=label) for fill, label in (("white", "Full support"), ("gray", "Truncated (support >5)")) ] - fig.suptitle("V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe", fontsize=16) + fig.suptitle(data.get("dataset_title", "V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe"), fontsize=16) fig.legend(handles=shape_handles, title="Shape = confidence setting", loc="upper center", bbox_to_anchor=(0.30, 0.955), ncol=2) fig.legend(handles=fill_handles, title="Fill = averaging domain", loc="upper center", bbox_to_anchor=(0.70, 0.955), ncol=2) fig.text( 0.03, 0.02, - "Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1.\n" + f"Same {data.get('report_images', 52788):,} reporting images throughout; thresholds fitted on " + f"{data.get('calibration_images', 5852):,} separate images using mini_metrics Macro-F1.\n" "Hollow → filled changes the averaging domain, not predictions. " ">5 requires truth AND accepted-prediction support in every pipeline.\n" "Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact.\n" f"Coverage is unchanged by class truncation. TTA: {data.get('tta', 'padded_scale')}; " - "recipe selection used the same dataset, so results remain descriptive.", + + ( + "recipe selected on Flemming, not this test set." + if data.get("independent_recipe") + else "recipe selection used the same dataset, so results remain descriptive." + ), fontsize=10, ) fig.tight_layout(rect=(0, 0.10, 1, 0.91)) diff --git a/docs/assets/mambo-indomain-campaign.json b/docs/assets/mambo-indomain-campaign.json new file mode 100644 index 0000000..8ff2fb1 --- /dev/null +++ b/docs/assets/mambo-indomain-campaign.json @@ -0,0 +1,733 @@ +{ + "environment_id": "j-12402286-job-0", + "fingerprint": { + "config": { + "environment_id": "j-12402286-job-0", + "v2_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "v3_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "metrics_python": "/work/mini_trainer/.venv-mambo-runtime/bin/python", + "legacy_source": "/home/ucloud/.cache/mambo-ucloud/legacy-source/32b3cd661778356b2e8c4cff5b10fa9061aa6f5d", + "legacy_weights": "/home/ucloud/.cache/mambo-ucloud/archives/MAMBO", + "hf_cache": "/home/ucloud/.cache/mambo-ucloud/huggingface/hub", + "bundle": "/home/ucloud/.cache/mambo-ucloud/models/2c327f197991d396", + "manifest": "/home/ucloud/.cache/mambo-ucloud/global-lepi-test-manifest.json", + "root": "/work/datasets/global_lepi", + "output": "/home/ucloud/.cache/mambo-ucloud/runs-transfers", + "cuda_visible_devices": "0", + "quality_device": "cuda:0", + "quality_batch_size": 32, + "qualification_count": 256, + "threads": 4, + "quality_presets": [ + "full" + ], + "timing_presets": [ + "full", + "north_europe" + ], + "timing_devices": [ + "cpu", + "cuda:0" + ], + "cpu_batches": [ + 1, + 8 + ], + "gpu_batches": [ + 1, + 8, + 32 + ], + "onnx_python": "/tmp/mambo-ort-ptx/bin/python", + "decode_workers": 48, + "prefetch_batches": 8, + "reuse_v2_from": "/home/ucloud/.cache/mambo-ucloud/runs-ptx", + "read_workers": 256, + "read_window": 4096, + "encoded_budget_mib": 2048, + "v3_batch_size": 256 + }, + "inputs": { + "manifest": "b5bc0f190efe00f5d7455faebce7541cd18e62bb1dc2841407bf98a8c3a6c590", + "bundle": "91118482591a966ea514594b11e784657898de7c9f4e6cb12b11700df9b84304", + "scripts": { + "dev/releases/mambo_v3/acceleration_report.py": "6abcdc616409397fca367b11e15c4c14818164d0aaca2e9fcbd37dacdf614388", + "dev/releases/mambo_v3/audit.py": "afead9cba151356d173de5d3d9d1eecd439f6713462b2099c2fb1698cbe09bd8", + "dev/releases/mambo_v3/benchmark.py": "3ae7b1f967076e71d665ca3c4bc063acb070598fa83255f009143940b0afc094", + "dev/releases/mambo_v3/benchmark_acceleration.py": "6cfb746d84ab722a2b2ced5058b154ad5b20b8b3eb877595e169362f052064d6", + "dev/releases/mambo_v3/build_bundle.py": "0219ff29a720fc2739d75ecce78c8eaf66604eb3750a5e2f69b23c731f313179", + "dev/releases/mambo_v3/build_presets.py": "878df0e46914b2e583940da7d1700cb8b0ea976a889118b543df1d42b98d2904", + "dev/releases/mambo_v3/check_legacy_fixture.py": "5ce2829176884f58da9b77df96333c57fba7cfde2ce0d1e8b8cf7e3764bcf2eb", + "dev/releases/mambo_v3/check_portable_install.py": "faa86fa2915f1b50292f792ad8aea92dbb5813b475bb02376bb2c8d583e63f6d", + "dev/releases/mambo_v3/compact_tta.py": "eb6309a4a689d8b4e62663f5d33fd06cbdecf30101cba11f60460147a2a030d1", + "dev/releases/mambo_v3/compact_tta_metrics.py": "c4a40db1643bb2544bbfbd0559f4cbcd4e5f677093a3eba1fddcce4551e89720", + "dev/releases/mambo_v3/compare_quality.py": "8ec7c46c877523c41e8ab2977b88d8e40f9240d4f469e76032818ec0dc9b108d", + "dev/releases/mambo_v3/comparison_charts.py": "ec653dcc738e8e10a7abd3a4d9edb1f8f2fdd4a238c5239a4cfe8eb1e87b409b", + "dev/releases/mambo_v3/composed_full.py": "706aae887e68e7001a000985aa492f0d8ec05dca4d8dd1ba72d1247a65a5b09f", + "dev/releases/mambo_v3/composed_metrics.py": "1b01531d64d74ca02ba5a250ff05917313cd1c4264bd97a7c63f784c91e1c2b0", + "dev/releases/mambo_v3/composed_report.py": "3d3f5adcb38471e6f610e381c997c39c7640dca706b6265172fe6b9db143261d", + "dev/releases/mambo_v3/defaults_report.py": "ec8831cbd75e378c021015298a840cd708cd036e9ac4fd3138dc1637e500e166", + "dev/releases/mambo_v3/evaluate.py": "deafad8bc562018a936ee7b6135dfa30cd0f2ae33229e6418d6b9b3cb0a00a5a", + "dev/releases/mambo_v3/evaluation_data.py": "45e277bd8ad011141ff892c8e608c89de2915efb52aae6f05c50d49ee0ef192a", + "dev/releases/mambo_v3/family_precision_report.py": "136e36cc6a0dca06c670df864ded8a238c9c5ee088beb729856a69770b1468a5", + "dev/releases/mambo_v3/frequency_comparison.py": "e4b3a66c52eeb4b1888aed7b032162564a5e720bf4fd8e1d84c9046ccbc26c69", + "dev/releases/mambo_v3/hash_images.py": "b5ff032b0baaeddde78859e9c961f6528ba8e189e477dcc6f6627f408536979e", + "dev/releases/mambo_v3/legacy_evaluation.py": "f6c2acc02b1d1d51d6a057ef4bc551ab398c7091c23c603e353484193aed4668", + "dev/releases/mambo_v3/loading_charts.py": "b66c20788825e4ecf73612079aa8ced924b6fd4bee04ba19d922909975466a49", + "dev/releases/mambo_v3/loading_scaling.py": "f36e0e6b83ce985a7da034d3f781976da8a13b655b1ed2818f4aab9c401fbf93", + "dev/releases/mambo_v3/metrics.py": "1c2116b5d98d19de685f4611e289abbaad5c66f537b8e7b9f3e34954c9c27e71", + "dev/releases/mambo_v3/package_download_metadata.py": "356312b595c573764ad06d0968c022cc39502968730769f4def7e7a76d3a9a90", + "dev/releases/mambo_v3/plot_overlap.py": "a646fb4ce31e5e84faff89501345e3f5ad05b4b3a7e2b7bcea8a16d6525d197b", + "dev/releases/mambo_v3/prefetch.py": "9224e3837ae64b8a329915284b5e7d79b39225e478a0bc6a426937755e7abb52", + "dev/releases/mambo_v3/prepare_ucloud.py": "4711c898b64c7f8f8a242fe479baace9da78950b496f31dd5298e623395a653a", + "dev/releases/mambo_v3/probe_onnx_cuda.py": "d9d27bb61807f0d94a2b9a806f31fbbc22bd86eb12fc5820aa24e5067883fafe", + "dev/releases/mambo_v3/probe_preprocessing.py": "81db56e6961dbb1c6e7e201ffcd0981428e496135743914c1683cedc5fed0252", + "dev/releases/mambo_v3/profile_batch_scaling.py": "2e8ae5c53ad97c6173adb9ec01960e0b3cc07dca6b2b218c3499799b00768008", + "dev/releases/mambo_v3/profile_onnx_batch.py": "c66395fe4060f5f5a275636ec116dbbb8a4acb19570add4730f04a7d96e7fa1b", + "dev/releases/mambo_v3/profile_preprocessing.py": "5805c5c61e07c90c1dc0093fe1609c001dda0121e2d6831082fd108b0cb3027c", + "dev/releases/mambo_v3/promoted_report.py": "3c87fd0abb76a308c4ffa453e4005834520214a8821f53783155364a7e5a9c14", + "dev/releases/mambo_v3/qualify_bundle.py": "441a5295079e60cea66aab49e86a7ee03fe22b044ce275b478c6f648abe78d45", + "dev/releases/mambo_v3/qualify_precision.py": "e36c31ae6624a5927a2370b57d70296fdcaee8d5bb254a89aa645bb575dcb769", + "dev/releases/mambo_v3/qualify_tta.py": "fa8023179228dd3192ea535e4726744aa25c1138fcb0c34f0b1a6706118c4fa6", + "dev/releases/mambo_v3/reconstruct_presets.py": "4be1c2073f5bfd298e78a761353f8632dd38e5819ec9a37ef650635379cd7067", + "dev/releases/mambo_v3/release_comparison.py": "7340be6992c730920a8f8ab0dcb430e60b16c4c791b4764a6e5e66b3f147a7d6", + "dev/releases/mambo_v3/run_local.py": "20a3032a3a294a517b226362ae7e9940b4cbfdbe1caa8bce1bab5a91ebc230c3", + "dev/releases/mambo_v3/setup_ucloud_release.py": "fb566e87b0114f9fda34a94aebe2984845dbe07e9db5c4309403186b7ad43404", + "dev/releases/mambo_v3/summarize.py": "f336b3a989cd30c2c24ccc18b5d39378985f7e1ef53988e9a08d5834358a05cc", + "dev/releases/mambo_v3/summarize_batch_scaling.py": "2e5f01d9257b9138664c0e08ea2c1e004a8398f1d4adcded35e43ebe8ecef7a4", + "dev/releases/mambo_v3/tail_charts.py": "d3eb76ebee762841337ace7adee06130d29293a63112a0076489b2673b7298d1", + "dev/releases/mambo_v3/tail_report.py": "115156ae1c9e4a801bd943c35a833be8c48b00dcdb54ddead49026070f5d5c94", + "dev/releases/mambo_v3/threshold_report.py": "3682d8c7a96829c371e09b3e9c82add0534eff97cb28c3f5aa1f95c4f61cb1fc", + "dev/releases/mambo_v3/tta_candidates.py": "88cc7d74a095656000ab50bf0fe8741886c8283d7d4345e32d29609cb04f7c6a", + "dev/releases/mambo_v3/tta_charts.py": "2366dd549128719cc47265d8ead1007af5ba394f0da774697f559a640c396333", + "dev/releases/mambo_v3/tta_report.py": "698c5e081ff3eef9ad9ceb28be37de0836a613b94763f462878804157d4237ca", + "dev/releases/mambo_v3/ucloud_release.py": "676e3676c2abc890635c65b49672830ff6dd45926ee902cdf3beddd87034c480", + "dev/releases/mambo_v3/ucloud_summary.py": "e0efad6426b6c8d8f39e5c627b8bf5c52397f3e01020728b2db1c1d7ed76f994", + "deployment/mambo_deploy/__init__.py": "30a425a6bc569f7037fbdf058a59b7abbf1cc55fb951735b0d231edad926ccd9", + "deployment/mambo_deploy/augmentation.py": "a633c4b75577c18cfd987287d5b961448c1e49b197d48bdf234efb70b1986cc9", + "deployment/mambo_deploy/bundle.py": "e4e2b7f135c1a1d5d8990ab0c535eeb3e21a2380c8cf8c469bcc1ebbbda2a38e", + "deployment/mambo_deploy/cli.py": "0259e7cc6a93bd952866218166c962c82964714faa3267d7773fee07ba65240f", + "deployment/mambo_deploy/download.py": "cd388130e064790c17b510829c58a0dc1b00af2311e91d575090ced96c3c48f6", + "deployment/mambo_deploy/onnx_session.py": "c5b38486690a5183cec73ad745adba89825d70da7a65b85ea772499e17ea0124", + "deployment/mambo_deploy/predictor.py": "b0ee2d2585b52bdb3e86e934e14f7f3793b18467eb8ff4484b110c90eb7c4c11", + "deployment/mambo_deploy/preprocessing.py": "40d0667c25f85dccf2811c51d7dc8113aa1b236d48a68ebe61c6b1073fe40bd5", + "deployment/mambo_deploy/result_worker.py": "4126c2da2fb6b21bb89ee38405a6787c7fd5e9bcb2282c3a7cd537321c1c9139", + "deployment/mambo_deploy/results.py": "0b15face20eaa2b19b19b612285f44c94752ed8a208c3d5bace631c4743b128e", + "deployment/mambo_deploy/streaming.py": "c6c72fe53fc4651fec75bdc00377ea4028bde2d0c90e17ee660250535df8af69", + "deployment/mambo_deploy/transfers.py": "119fa1986acaa616dd0ff23892d90c85cfad13071362c2aad81e702802642e24" + }, + "environments": { + "/tmp/mambo-ort-ptx/bin/python": { + "python": "3.13.15 (main, Sep 1 2026, 14:18:08) [Clang 22.1.3 ]", + "packages": [ + [ + "coloredlogs", + "15.0.1", + null + ], + [ + "flatbuffers", + "25.12.19", + null + ], + [ + "humanfriendly", + "10.0", + null + ], + [ + "mambo-deploy", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer/deployment\",\"dir_info\":{}}" + ], + [ + "mpmath", + "1.3.0", + null + ], + [ + "numpy", + "2.5.3", + null + ], + [ + "nvidia-cublas-cu12", + "12.9.2.10", + null + ], + [ + "nvidia-cuda-nvrtc-cu12", + "12.9.86", + null + ], + [ + "nvidia-cuda-runtime-cu12", + "12.9.79", + null + ], + [ + "nvidia-cudnn-cu12", + "9.26.0.51", + null + ], + [ + "nvidia-cufft-cu12", + "11.4.1.4", + null + ], + [ + "nvidia-curand-cu12", + "10.3.10.19", + null + ], + [ + "nvidia-nvjitlink-cu12", + "12.9.86", + null + ], + [ + "onnxruntime-gpu", + "1.22.0", + null + ], + [ + "packaging", + "26.3", + null + ], + [ + "pillow", + "12.3.0", + null + ], + [ + "protobuf", + "7.36.2", + null + ], + [ + "sympy", + "1.14.0", + null + ] + ] + }, + "/work/mini_trainer/.venv-mambo-runtime/bin/python": { + "python": "3.13.15 (main, Sep 1 2026, 14:18:08) [Clang 22.1.3 ]", + "packages": [ + [ + "Jinja2", + "3.1.6", + null + ], + [ + "Markdown", + "3.10.3", + null + ], + [ + "MarkupSafe", + "3.0.3", + null + ], + [ + "PyYAML", + "6.0.3", + null + ], + [ + "Werkzeug", + "3.1.8", + null + ], + [ + "absl-py", + "2.5.0", + null + ], + [ + "annotated-types", + "0.8.0", + null + ], + [ + "anyio", + "4.15.1", + null + ], + [ + "biopython", + "1.88", + null + ], + [ + "certifi", + "2026.7.22", + null + ], + [ + "charset-normalizer", + "3.5.1", + null + ], + [ + "click", + "8.5.0", + null + ], + [ + "cloudpickle", + "3.1.2", + null + ], + [ + "contourpy", + "1.4.0", + null + ], + [ + "cuda-bindings", + "13.4.3", + null + ], + [ + "cuda-pathfinder", + "1.8.2", + null + ], + [ + "cuda-toolkit", + "13.2.1", + null + ], + [ + "cycler", + "0.12.1", + null + ], + [ + "diskcache", + "5.6.3", + null + ], + [ + "filelock", + "4.0.3", + null + ], + [ + "flatbuffers", + "25.12.19", + null + ], + [ + "fonttools", + "4.66.0", + null + ], + [ + "fsspec", + "2026.9.0", + null + ], + [ + "ftfy", + "6.3.1", + null + ], + [ + "googleapis-common-protos", + "1.75.3", + null + ], + [ + "grpcio", + "1.84.0", + null + ], + [ + "h11", + "0.16.0", + null + ], + [ + "hf-xet", + "1.6.0", + null + ], + [ + "httpcore2", + "2.13.1", + null + ], + [ + "httpx2", + "2.13.1", + null + ], + [ + "huggingface_hub", + "2.0.0", + null + ], + [ + "idna", + "3.20", + null + ], + [ + "joblib", + "1.6.0", + null + ], + [ + "kiwisolver", + "1.5.1", + null + ], + [ + "mambo-deploy", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer/deployment\",\"dir_info\":{}}" + ], + [ + "matplotlib", + "3.11.2", + null + ], + [ + "mini_metrics", + "0.3.0", + "{\"url\":\"https://github.com/GuillaumeMougeot/mini_metrics.git\",\"vcs_info\":{\"vcs\":\"git\",\"commit_id\":\"70cc69adc05362863439277048e06386c1f885e1\",\"requested_revision\":\"70cc69adc05362863439277048e06386c1f885e1\"}}" + ], + [ + "mini_trainer", + "0.3.0", + "{\"url\":\"file:///work/mini_trainer\",\"dir_info\":{}}" + ], + [ + "mpmath", + "1.3.0", + null + ], + [ + "narwhals", + "2.26.0", + null + ], + [ + "networkx", + "3.7", + null + ], + [ + "numpy", + "2.5.3", + null + ], + [ + "nvidia-cublas", + "13.4.0.1", + null + ], + [ + "nvidia-cuda-cupti", + "13.2.75", + null + ], + [ + "nvidia-cuda-nvrtc", + "13.2.78", + null + ], + [ + "nvidia-cuda-runtime", + "13.2.75", + null + ], + [ + "nvidia-cudnn-cu13", + "9.24.0.43", + null + ], + [ + "nvidia-cufft", + "12.2.0.46", + null + ], + [ + "nvidia-cufile", + "1.17.1.22", + null + ], + [ + "nvidia-curand", + "10.4.2.55", + null + ], + [ + "nvidia-cusolver", + "12.2.0.1", + null + ], + [ + "nvidia-cusparse", + "12.7.10.1", + null + ], + [ + "nvidia-cusparselt-cu13", + "0.8.1", + null + ], + [ + "nvidia-nccl-cu13", + "2.30.7", + null + ], + [ + "nvidia-nvjitlink", + "13.4.92", + null + ], + [ + "nvidia-nvshmem-cu13", + "3.4.5", + null + ], + [ + "nvidia-nvtx", + "13.2.75", + null + ], + [ + "onnxruntime-gpu", + "1.30.0", + null + ], + [ + "open_clip_torch", + "3.3.0", + null + ], + [ + "opentelemetry-api", + "1.44.0", + null + ], + [ + "opentelemetry-exporter-otlp-proto-common", + "1.44.0", + null + ], + [ + "opentelemetry-exporter-otlp-proto-http", + "1.44.0", + null + ], + [ + "opentelemetry-proto", + "1.44.0", + null + ], + [ + "opentelemetry-sdk", + "1.44.0", + null + ], + [ + "opentelemetry-semantic-conventions", + "0.65b0", + null + ], + [ + "packaging", + "26.3", + null + ], + [ + "pandas", + "3.0.6", + null + ], + [ + "pillow", + "12.3.0", + null + ], + [ + "platformdirs", + "4.11.12", + null + ], + [ + "protobuf", + "7.36.2", + null + ], + [ + "psutil", + "7.2.2", + null + ], + [ + "pyCirclize", + "1.10.1", + null + ], + [ + "pyarrow", + "25.0.1", + null + ], + [ + "pydantic", + "2.13.5", + null + ], + [ + "pydantic_core", + "2.46.5", + null + ], + [ + "pyparsing", + "3.3.3", + null + ], + [ + "python-dateutil", + "2.9.0.post0", + null + ], + [ + "regex", + "2026.9.10", + null + ], + [ + "requests", + "2.34.2", + null + ], + [ + "safetensors", + "0.8.0", + null + ], + [ + "scikit-learn", + "1.9.1", + null + ], + [ + "scipy", + "1.18.1", + null + ], + [ + "setuptools", + "81.0.0", + null + ], + [ + "six", + "1.17.0", + null + ], + [ + "sympy", + "1.14.0", + null + ], + [ + "tensorboard", + "2.21.0", + null + ], + [ + "tensorboard-data-server", + "0.7.2", + null + ], + [ + "threadpoolctl", + "3.7.0", + null + ], + [ + "timm", + "1.0.30", + null + ], + [ + "torch", + "2.14.0+cu132", + null + ], + [ + "torchvision", + "0.29.0+cu132", + null + ], + [ + "tqdm", + "4.70.1", + null + ], + [ + "triton", + "3.8.0", + null + ], + [ + "truststore", + "0.10.4", + null + ], + [ + "typing-inspection", + "0.4.4", + null + ], + [ + "typing_extensions", + "4.16.0", + null + ], + [ + "urllib3", + "2.8.0", + null + ], + [ + "wandb", + "0.30.0", + null + ], + [ + "wcwidth", + "0.9.1", + null + ], + [ + "xxhash", + "4.0.1", + null + ] + ] + } + }, + "revision": "9d6e29e2ab7250835754305f0fe219dc2a146f39" + } + }, + "metric_revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Original full test split; no threshold selection on test; all and known truth; timings isolated from collection", + "sample_ids_sha256": "b1a0ce749a3534e35a283cbe7c17c0fc273ad60affcca6d2866bb24283090bd7", + "timing_bank_sha256": "2301b147066a2545f7bef9ea9698bad2210f0702e4056fd11ea2938cdb5bcb6f", + "source_sha256": { + "ucloud-summary.json": "084595c8c4380f6b59fb521706fa862adfc37d67c450d6fcffd06fc58dff5c22", + "speed.csv": "604180640f24d7ed180832d0b2ac4fbfea4dbf7a5b8be173edb760388e51820f", + "streaming_speed.csv": "acadae4e9b747afa63af2db6e198db4694afd66dbeadd111e5ba41ed1956d4bc" + } +} diff --git a/docs/assets/mambo-indomain-quality.svg b/docs/assets/mambo-indomain-quality.svg new file mode 100644 index 0000000..a017ec0 --- /dev/null +++ b/docs/assets/mambo-indomain-quality.svg @@ -0,0 +1,3049 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.11.2, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Species · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 96.0% + + + 100.0% + + + 97.5% + + + 100.0% + + + 97.5% + + + 100.0% + + + 97.0% + + + 100.0% + + + 97.0% + + + Species · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Genus · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 96.3% + + + 100.0% + + + 98.0% + + + 100.0% + + + 98.0% + + + 100.0% + + + 97.3% + + + 100.0% + + + 97.3% + + + Genus · Acceptance coverage (%) + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro accuracy (%) + + + + + + + + + + + + + + + + + + 0.0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Family · Macro-F1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 40 + + + + + + + + + + + + + 60 + + + + + + + + + + + + + 80 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0% + + + 98.5% + + + 100.0% + + + 99.0% + + + 100.0% + + + 99.0% + + + 100.0% + + + 97.7% + + + 100.0% + + + 97.7% + + + Family · Acceptance coverage (%) + + + + In-domain global-lepi test · global vocabulary + + + Same 568,939 reporting images throughout; thresholds fitted on 63,974 separate images using mini_metrics Macro-F1. + Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. + Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. + Coverage is unchanged by class truncation. TTA: rotation30_pad25_3; recipe selected on Flemming, not this test set. + + + + + + + Shape = confidence setting + + + + + + + + + + + Unthresholded + + + + + + + + + + + Calibrated + + + + + + + + Fill = averaging domain + + + + + + + + Full support + + + + + + + + + + + Truncated (support >5) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-indomain-speed.csv b/docs/assets/mambo-indomain-speed.csv new file mode 100644 index 0000000..fed5c4d --- /dev/null +++ b/docs/assets/mambo-indomain-speed.csv @@ -0,0 +1,175 @@ +environment_id,variant,device,trial,preset,batch_size,images_per_second,seconds,peak_host_rss_mib +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,full,1,1.8118844130674805,"[0.5598056560847908, 0.5531074069440365, 0.5593097188975662, 0.5500260358676314, 0.5513407660182565, 0.5519115859642625, 0.5502322369720787]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,north_europe,1,1.8378617180208665,"[0.5421012500301003, 0.5449547581374645, 0.5411054699216038, 0.5458362558856606, 0.5441105770878494, 0.5461597528774291, 0.5435048039071262]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,full,8,1.9819228538278038,"[4.0097632319666445, 4.035052950959653, 4.036484056152403, 4.052431344985962, 4.046968417009339, 4.031886751996353, 4.04219921422191]",4581.8515625 +j-12402286-job-0,v2,cpu,trial-0-v2-cpu,north_europe,8,1.9873168667309,"[4.016418604878709, 4.015866093803197, 4.026619980111718, 4.025528155034408, 4.040538410888985, 4.028720021946356, 4.01123312395066]",4581.8515625 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,1,18.773565083969793,"[0.05192704009823501, 0.053253568010404706, 0.053063621977344155, 0.053309903014451265, 0.05326638789847493, 0.053548603085801005, 0.053931969916448]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,1,19.608615518753595,"[0.0493916308041662, 0.0506248080637306, 0.05397037696093321, 0.05188810080289841, 0.05133753200061619, 0.05099799111485481, 0.05074841505847871]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,8,32.06470541085348,"[0.24803464789874852, 0.24921914213337004, 0.25404071412049234, 0.25220209499821067, 0.24949550908058882, 0.25121114193461835, 0.2479143759701401]",3438.1953125 +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,8,32.4939802296532,"[0.24331936007365584, 0.24609336792491376, 0.2490320538636297, 0.24619944812729955, 0.24873223202303052, 0.24366387887857854, 0.24782164092175663]",3438.1953125 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,1,25.252030387472338,"[0.039362087147310376, 0.03960077604278922, 0.039295236114412546, 0.040591028053313494, 0.040940073085948825, 0.03971679089590907, 0.03933157119899988]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,1,21.086797547826855,"[0.03908186499029398, 0.055052950978279114, 0.048711427953094244, 0.04716102289967239, 0.04788451315835118, 0.0474230379331857, 0.04727510595694184]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,8,34.45055136496956,"[0.23389615188352764, 0.23221689299680293, 0.24549970892257988, 0.23073260695673525, 0.23048642603680491, 0.24050917197018862, 0.23132266593165696]",2684.859375 +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,8,36.84371633820095,"[0.21713336207903922, 0.21594624407589436, 0.21369783696718514, 0.21867421292699873, 0.22980202292092144, 0.22040039184503257, 0.21298504318110645]",2684.859375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,1,5.982112764439149,"[0.16745743993669748, 0.16899099084548652, 0.1671650200150907, 0.16742447996512055, 0.16586729395203292, 0.16567778890021145, 0.1668674210086465]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,1,6.129117001871484,"[0.16287323297001421, 0.16466836794279516, 0.16084106196649373, 0.16607555793598294, 0.16198024689219892, 0.1659450209699571, 0.16315563884563744]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,8,9.86198241896518,"[0.8111959300003946, 0.8157305719796568, 0.8271116188261658, 0.8432108249980956, 0.8080304500181228, 0.791286783060059, 0.7902445029467344]",4314.37109375 +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,8,11.090379432408348,"[0.7179365169722587, 0.7207825449295342, 0.7228529239073396, 0.7213459240738302, 0.7223941530101001, 0.7208065008744597, 0.7257726530078799]",4314.37109375 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,1,8.262693364512673,"[0.1206235159188509, 0.12110480992123485, 0.12121195206418633, 0.12076002103276551, 0.12792122596874833, 0.12102591199800372, 0.12068235385231674]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,1,8.32628728459142,"[0.11874060006812215, 0.12130865687504411, 0.11909768707118928, 0.12351267598569393, 0.1201015489641577, 0.11952165607362986, 0.12335676187649369]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,8,12.08724553155887,"[0.6653836239129305, 0.6583668161183596, 0.663738896837458, 0.6546928018797189, 0.6508324679452926, 0.6618546780664474, 0.6636198570486158]",3404.2265625 +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,8,12.360899894394624,"[0.6507734870538116, 0.6397130631376058, 0.6421967730857432, 0.6472020701039582, 0.6472110629547387, 0.6474834938999265, 0.639450018061325]",3404.2265625 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,1,159.71356264433828,"[0.0063039930537343025, 0.006305434973910451, 0.006233125925064087, 0.0062791050877422094, 0.006261209025979042, 0.006236240966245532, 0.006178524112328887]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,1,171.7041858561048,"[0.00606002495624125, 0.005808257032185793, 0.0058175798039883375, 0.005840705940499902, 0.005831901915371418, 0.005823969841003418, 0.005822147009894252]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,8,422.20877286715364,"[0.018486206885427237, 0.018466537119820714, 0.019866775954142213, 0.018947971984744072, 0.01934968796558678, 0.019701206823810935, 0.018616032088175416]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,8,441.3241336330918,"[0.018405034905299544, 0.018186987144872546, 0.01842442387714982, 0.01792710507288575, 0.01810313994064927, 0.017758831847459078, 0.01812726608477533]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,full,32,534.519888907689,"[0.06067607691511512, 0.0638898469042033, 0.05983407003805041, 0.059084321139380336, 0.0659339448902756, 0.05947311595082283, 0.05986680882051587]",4587.48828125 +j-12402286-job-0,v2,cuda:0,trial-0-v2-cuda-0,north_europe,32,500.9336702458657,"[0.06388071295805275, 0.06535172904841602, 0.0697851839940995, 0.059929753886535764, 0.06386400805786252, 0.05971407890319824, 0.08290322800166905]",4587.48828125 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,1,82.88776326642262,"[0.012180011020973325, 0.01211761706508696, 0.012061351910233498, 0.012064506998285651, 0.012174042174592614, 0.011996163986623287, 0.01205331995151937]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,1,94.66606958628452,"[0.010772902052849531, 0.010660764062777162, 0.010575013933703303, 0.010551288956776261, 0.010558669921010733, 0.010563446907326579, 0.010562114883214235]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,8,329.676534848332,"[0.023103289073333144, 0.02612714283168316, 0.024266209919005632, 0.026091889943927526, 0.024249885929748416, 0.02413583407178521, 0.029060428962111473]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,8,321.5584914015297,"[0.02506410190835595, 0.025000977097079158, 0.02487883297726512, 0.024151788093149662, 0.02245876914821565, 0.025216581067070365, 0.02454782510176301]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,32,478.5154067344906,"[0.06442678486928344, 0.07067755796015263, 0.06746875704266131, 0.06502768979407847, 0.06610617507249117, 0.06687349989078939, 0.06953839189372957]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,32,440.29805404109663,"[0.0623072839807719, 0.07974362000823021, 0.06216668197885156, 0.07500562607310712, 0.0722976780962199, 0.07267804094590247, 0.07345631183125079]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,256,473.30187695540536,"[0.5903866898734123, 0.5399209200404584, 0.5256964520085603, 0.5408810158260167, 0.5698406419251114, 0.5487330839969218, 0.5309413929935545]",8748.5859375 +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,256,509.63960405887036,"[0.5185853492002934, 0.4925630991347134, 0.5023157501127571, 0.4884355610702187, 0.5026476308703423, 0.5019327839836478, 0.5080248010344803]",8748.5859375 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,1,113.6131370481929,"[0.009512839838862419, 0.008801799034699798, 0.008537750924006104, 0.008859846973791718, 0.008465873776003718, 0.008470541099086404, 0.011722298106178641]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,1,138.7928342669094,"[0.007262099999934435, 0.007271014153957367, 0.007194858975708485, 0.007155319210141897, 0.007141758920624852, 0.007326576858758926, 0.007204982917755842]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,8,330.6140063438729,"[0.02645369991660118, 0.022592162946239114, 0.02583598904311657, 0.023288171039894223, 0.021401920123025775, 0.02419740194454789, 0.024584023980423808]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,8,352.037172129845,"[0.021658926969394088, 0.020491539034992456, 0.02164299297146499, 0.02360737300477922, 0.02395508694462478, 0.022724872920662165, 0.023543456103652716]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,32,447.84025525941945,"[0.07305560284294188, 0.07298052008263767, 0.06922221789136529, 0.07145405001938343, 0.07235863315872848, 0.07027801894582808, 0.07113562989979982]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,32,454.4771033525177,"[0.07847378496080637, 0.0703329520765692, 0.07661737804301083, 0.07041058782488108, 0.07012881408445537, 0.07049964205361903, 0.0671302869450301]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,256,440.1144009851269,"[0.5717368379700929, 0.5882077501155436, 0.5647427421063185, 0.5975073499139398, 0.591107077896595, 0.5810348049271852, 0.5816669471096247]",6922.67578125 +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,256,466.1911936968771,"[0.54900794592686, 0.5328393769450486, 0.5351080049294978, 0.5714165659155697, 0.5491309219505638, 0.5547846788540483, 0.5674031691160053]",6922.67578125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,1,25.77278001663632,"[0.038760185008868575, 0.03895626007579267, 0.03880062606185675, 0.03898235014639795, 0.0388006460852921, 0.038777069887146354, 0.03862898703664541]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,1,27.227900600986786,"[0.03650639997795224, 0.03680428885854781, 0.036754583939909935, 0.03654780308715999, 0.03689834079705179, 0.03672703285701573, 0.036662244936451316]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,8,99.54417969759442,"[0.08036632603034377, 0.08473288198001683, 0.07552051800303161, 0.08759120712056756, 0.07841285387985408, 0.08712896122597158, 0.0796153349801898]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,8,101.10871662764575,"[0.07481043902225792, 0.07912275288254023, 0.08086353493854403, 0.07912016892805696, 0.08882537600584328, 0.07169873197562993, 0.08031963580287993]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,32,141.62023365612262,"[0.22613058588467538, 0.21947938902303576, 0.22595641296356916, 0.22569528897292912, 0.22925979807041585, 0.22593854600563645, 0.22688736487179995]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,32,134.61613589128336,"[0.23786216299049556, 0.26676358096301556, 0.22510312893427908, 0.2543662399984896, 0.23771295906044543, 0.22919729398563504, 0.22667260188609362]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,256,145.4563147380399,"[1.7471032990142703, 1.848585378145799, 1.7710895768832415, 1.7599785919301212, 1.789674888830632, 1.7099389729555696, 1.7481422240380198]",13732.86328125 +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,256,146.1398414161973,"[1.7028252279851586, 1.7517468030564487, 1.688165568979457, 1.6661955381277949, 1.7871254589408636, 2.218830683035776, 2.1324612388852984]",13732.86328125 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,1,35.532385252582785,"[0.03191231586970389, 0.028284823056310415, 0.028143340023234487, 0.027871930971741676, 0.02781070815399289, 0.027790748979896307, 0.028204301139339805]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,1,36.771653484791806,"[0.026865995954722166, 0.027348933974280953, 0.027257435023784637, 0.02724255295470357, 0.027194860856980085, 0.027023043017834425, 0.027147690067067742]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,8,105.27877679395911,"[0.07678151899017394, 0.07287920103408396, 0.08103566593490541, 0.07533648214302957, 0.07598872482776642, 0.07834966108202934, 0.07468052417971194]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,8,109.99565276327142,"[0.07799976388923824, 0.08511138521134853, 0.07269248994998634, 0.08088010200299323, 0.07137880194932222, 0.07246160204522312, 0.07273014704696834]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,32,128.75608088994497,"[0.25812575104646385, 0.2496226339135319, 0.2479465790092945, 0.24618305289186537, 0.2497298049274832, 0.24853195110335946, 0.24478664994239807]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,32,128.09036729403115,"[0.25169501500204206, 0.250091538997367, 0.24174840305931866, 0.26207018201239407, 0.240036133909598, 0.24713967298157513, 0.24982362589798868]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,256,130.43032693926654,"[2.0292546290438622, 1.944513760972768, 1.9627337139099836, 1.9228567408863455, 1.972897453000769, 1.9226515630725771, 1.9808490499854088]",11555.5859375 +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,256,122.26377819115693,"[1.9955810110550374, 2.071103529073298, 2.103893836028874, 2.0938335440587252, 2.0483566790353507, 2.1093847670126706, 2.221062398981303]",11555.5859375 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,1,6.75596119134303,"[0.14646412897855043, 0.1483337450772524, 0.1580319299828261, 0.1475024321116507, 0.1476692531723529, 0.1480174281168729, 0.14868402178399265]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,1,6.822651158921427,"[0.14547044201754034, 0.14632983691990376, 0.14671937306411564, 0.15039914404042065, 0.1462649789173156, 0.14657058916054666, 0.1586985040921718]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,8,11.63371514486247,"[0.6962012129370123, 0.6839959709905088, 0.6876565138809383, 0.6862769259605557, 0.6919130848255008, 0.7119086098391563, 0.6861587781459093]",3397.5078125 +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,8,12.23551158111812,"[0.6762029870878905, 0.6538345329463482, 0.6545771821402013, 0.6430737329646945, 0.6487431330606341, 0.6449008660856634, 0.6622776610311121]",3397.5078125 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,1,6.353911302672763,"[0.15525876404717565, 0.15712836012244225, 0.1568535859696567, 0.15738337417133152, 0.16014939080923796, 0.1585964011028409, 0.16081210877746344]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,1,6.4244713318004605,"[0.15356798795983195, 0.16920459899120033, 0.1559280229266733, 0.15602170280180871, 0.15537062310613692, 0.15565483109094203, 0.15532190003432333]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,8,9.365779609516762,"[0.899784438079223, 0.908878515008837, 0.8541734199970961, 0.8452214368153363, 0.8457925170660019, 0.8704305361025035, 0.8485985330771655]",4187.859375 +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,8,10.925273754071165,"[0.7698587840422988, 0.7589555780868977, 0.7167077970225364, 0.7322470978833735, 0.7229400761425495, 0.739312743069604, 0.7238768371753395]",4187.859375 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,1,25.31768884347062,"[0.03936560498550534, 0.03948273207060993, 0.03973217704333365, 0.039527239045128226, 0.03957147593609989, 0.03948797006160021, 0.039498076075688004]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,1,26.028760793685077,"[0.037499195197597146, 0.03831630595959723, 0.040990792913362384, 0.040651271818205714, 0.03841903991997242, 0.03850294603034854, 0.03840801282785833]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,8,35.421368387507336,"[0.23015617206692696, 0.22585237002931535, 0.23093353305011988, 0.22976073599420488, 0.22319298493675888, 0.22484666598029435, 0.22235849895514548]",2511.6328125 +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,8,35.33864022342065,"[0.23100770101882517, 0.22638109303079545, 0.22427077498286963, 0.2259297240525484, 0.2347594320308417, 0.22617309098131955, 0.23673859285190701]",2511.6328125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,1,16.198527038428924,"[0.0780041329562664, 0.06189068499952555, 0.06168139888904989, 0.061740308068692684, 0.06173161510378122, 0.0617340081371367, 0.06163357710465789]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,1,16.39848742407414,"[0.05901055596768856, 0.061691835056990385, 0.06055515306070447, 0.060981234069913626, 0.06096916692331433, 0.061089548049494624, 0.06128282891586423]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,8,27.642719112441718,"[0.2936432999558747, 0.2894071298651397, 0.27978958492167294, 0.29107873793691397, 0.2889334859792143, 0.3011715980246663, 0.27577853412367404]",3156.78125 +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,8,32.034914488899396,"[0.25042425701394677, 0.24972752784378827, 0.24844128102995455, 0.25887357210740447, 0.2495469560381025, 0.2495462349615991, 0.25269569805823267]",3156.78125 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,full,1,1.817772373081537,"[0.5532833931501955, 0.555746752070263, 0.5485153030604124, 0.5501238850411028, 0.5486917190719396, 0.545396656030789, 0.551491835154593]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,north_europe,1,1.8455031230447507,"[0.5427428509574383, 0.5418576579540968, 0.539818748133257, 0.5418447989504784, 0.5432270499877632, 0.5479880489874631, 0.5392957900185138]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,full,8,1.974068964640723,"[4.0525433220900595, 4.035881021991372, 4.061371466144919, 4.046101082116365, 4.062707477947697, 4.041825053049251, 4.059707231121138]",4580.44921875 +j-12402286-job-0,v2,cpu,trial-1-v2-cpu,north_europe,8,1.9795949405909192,"[4.009429252007976, 4.046103483065963, 4.060272793984041, 4.080001945141703, 4.041230777045712, 3.979067053180188, 3.93344496213831]",4580.44921875 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,1,35.10418007739652,"[0.02980828401632607, 0.028706395998597145, 0.02852801699191332, 0.02844588295556605, 0.02846583304926753, 0.028482699068263173, 0.028486636001616716]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,1,36.685243230182216,"[0.02692680712789297, 0.02726262202486396, 0.027258916990831494, 0.027281691087409854, 0.027256052009761333, 0.02738477708771825, 0.027240809984505177]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,8,109.5386863539322,"[0.07469335710629821, 0.07088668621145189, 0.07199720805510879, 0.07259518885985017, 0.07546746218577027, 0.07648908998817205, 0.07303355797193944]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,8,111.41391264979623,"[0.07389426394365728, 0.08379421709105372, 0.06892463192343712, 0.06975421193055809, 0.06943008303642273, 0.07180431787855923, 0.07927897991612554]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,32,129.50510416208104,"[0.24829960195347667, 0.24574094987474382, 0.24102568090893328, 0.24115416500717402, 0.24709450802765787, 0.25395536608994007, 0.24713992583565414]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,32,133.27963667415108,"[0.23764376994222403, 0.23839785484597087, 0.27552488818764687, 0.24364052806049585, 0.24009669292718172, 0.24040215299464762, 0.23919702880084515]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,256,129.12878613530611,"[1.982516893884167, 1.9731587800197303, 1.979680062038824, 1.9286577210295945, 2.003313892055303, 2.12636016192846, 2.1826345180161297]",11622.4375 +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,256,130.03771532567654,"[2.089646345935762, 1.9014787450432777, 1.9645583529490978, 1.8932036010082811, 1.9686596258543432, 1.9741132739000022, 2.2100263938773423]",11622.4375 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,1,25.00895319189691,"[0.03944537718780339, 0.04006013204343617, 0.040014814119786024, 0.03990480909124017, 0.039944858988747, 0.040130988927558064, 0.039985680021345615]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,1,25.693376156511338,"[0.03870765585452318, 0.038914378033950925, 0.038999626180157065, 0.03899268596433103, 0.0388798660133034, 0.03895947616547346, 0.0389205371029675]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,8,102.28573707861345,"[0.078212273074314, 0.07666598493233323, 0.07563351094722748, 0.08347646496258676, 0.08239176287315786, 0.08907328895293176, 0.0779165280982852]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,8,95.89452986057971,"[0.08519353996962309, 0.08176997792907059, 0.07896921201609075, 0.07469155290164053, 0.09002882707864046, 0.08342498796992004, 0.09594587213359773]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,32,127.29254314298657,"[0.23686125595122576, 0.2459776159375906, 0.22779894596897066, 0.25679213204421103, 0.2529080470558256, 0.25138943106867373, 0.25198757206089795]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,32,136.72982352121235,"[0.29182543884962797, 0.2322860099375248, 0.22935751313343644, 0.23567410907708108, 0.22680777497589588, 0.23403818695805967, 0.2375326359178871]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,256,146.3969568946306,"[1.7486702280584723, 1.7503152440767735, 1.8470838381908834, 1.9163033759687096, 1.7106920420192182, 1.748026367975399, 1.7277893908321857]",13812.69140625 +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,256,147.82696242852057,"[1.6979348661843687, 1.7317544498946518, 1.6914874098729342, 1.6777222258970141, 1.7644795370288193, 1.7319374058861285, 1.7670164369046688]",13812.69140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,1,117.63046498321172,"[0.00919535499997437, 0.008699428057298064, 0.008524524047970772, 0.008501199074089527, 0.008469022111967206, 0.008432967122644186, 0.008470023050904274]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,1,138.6048844539578,"[0.007311638910323381, 0.007264276966452599, 0.007204758003354073, 0.007197878090664744, 0.007214271929115057, 0.007214752957224846, 0.007239228812977672]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,8,302.3480963834994,"[0.026133797131478786, 0.026719619054347277, 0.02645956794731319, 0.02858591009862721, 0.025771782966330647, 0.023208813974633813, 0.026863716077059507]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,8,338.34249170542535,"[0.022100324975326657, 0.023982940008863807, 0.024858698016032577, 0.02364468015730381, 0.022694980027154088, 0.026994443964213133, 0.02106905193068087]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,32,442.1959705074405,"[0.07352107507176697, 0.07236610492691398, 0.07438836991786957, 0.07151586492545903, 0.06982674193568528, 0.07485655602067709, 0.07161813997663558]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,32,480.35072199877527,"[0.0709644251037389, 0.06823060917668045, 0.0666179908439517, 0.06489726016297936, 0.06573307886719704, 0.0661705881357193, 0.07377067091874778]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,256,439.46688003057005,"[0.5825239890255034, 0.5645170279312879, 0.5834215709473938, 0.5691107539460063, 0.5670419801026583, 0.6174930001143366, 0.5911674541421235]",6995.44140625 +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,256,468.5478437832685,"[0.5618854460772127, 0.5501534920185804, 0.5374202101957053, 0.5463689640164375, 0.5567910959944129, 0.5443950810004026, 0.5368676378857344]",6995.44140625 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,1,77.15462941990037,"[0.012598931090906262, 0.013577082892879844, 0.012706432957202196, 0.012960985070094466, 0.012506511062383652, 0.013051111018285155, 0.01495455694384873]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,1,89.40391873994095,"[0.011546565918251872, 0.011185192037373781, 0.011236910009756684, 0.011101445881649852, 0.011377390939742327, 0.01118481089361012, 0.011019441997632384]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,8,311.46445262946304,"[0.02640065085142851, 0.024855625117197633, 0.025351922027766705, 0.02701724017970264, 0.028978002024814487, 0.02506327792070806, 0.02568511408753693]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,8,326.8468549682898,"[0.024476294871419668, 0.026545919943600893, 0.025650982977822423, 0.023425891995429993, 0.021990061039105058, 0.026437897933647037, 0.02316271699965]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,32,493.7255957211627,"[0.06481333007104695, 0.06772171892225742, 0.06364572211168706, 0.06241707084700465, 0.06580415111966431, 0.06383994384668767, 0.0668210128787905]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,32,491.75291090046,"[0.06315053603611887, 0.0666959248483181, 0.06507333111949265, 0.06123319920152426, 0.06664490816183388, 0.06254803878255188, 0.06628210097551346]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,256,367.63960694873936,"[0.7084685349836946, 0.7001728950999677, 0.6916666671168059, 0.6998157668858767, 0.6384113600943238, 0.6963341140653938, 0.6908263708464801]",8100.1953125 +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,256,470.3901109870499,"[0.5538813420571387, 0.5384540820959955, 0.5442291281651706, 0.571407072013244, 0.5495763490907848, 0.5196307881269604, 0.5318822769913822]",8100.1953125 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,1,162.30103644077124,"[0.006237654015421867, 0.006227159174159169, 0.006161390105262399, 0.006178766023367643, 0.0061166922096163034, 0.006160348886623979, 0.006114738993346691]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,1,169.28273731364027,"[0.006207118974998593, 0.005907276878133416, 0.005898222792893648, 0.005931344116106629, 0.00581088219769299, 0.005852275062352419, 0.006088610040023923]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,8,437.8569345603938,"[0.01845841109752655, 0.018357458990067244, 0.01828199508599937, 0.01827080803923309, 0.01818935596384108, 0.018189395079389215, 0.018088093027472496]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,8,452.67259312175884,"[0.018221714068204165, 0.01794675993733108, 0.017731456086039543, 0.01767281722277403, 0.017497373977676034, 0.017558936029672623, 0.017560458043590188]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,full,32,539.4992257828832,"[0.05852341395802796, 0.05764063401147723, 0.060999603010714054, 0.05931426491588354, 0.06890516099520028, 0.05869247787632048, 0.05931656784377992]",4595.41796875 +j-12402286-job-0,v2,cuda:0,trial-1-v2-cuda-0,north_europe,32,559.4076499953098,"[0.05751471407711506, 0.057311567943543196, 0.05758101399987936, 0.05686114099808037, 0.05686043878085911, 0.05720336502417922, 0.05677030282095075]",4595.41796875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,full,1,1.9392516010325764,"[0.5145874070003629, 0.5160089780110866, 0.5162893699016422, 0.5155025550629944, 0.5156215140596032, 0.5156628461554646, 0.5165060760919005]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,north_europe,1,1.9569581532938247,"[0.5102189481258392, 0.5121426749974489, 0.5104478730354458, 0.512342827161774, 0.5109971300698817, 0.5137192090041935, 0.5095693198964]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,full,8,2.054081456231529,"[3.907884922111407, 3.899646857054904, 3.8973819261882454, 3.892451951978728, 3.8930711839348078, 3.8896946699824184, 3.8946848849300295]",4571.9296875 +j-12402286-job-0,v2,cpu,trial-2-v2-cpu,north_europe,8,2.056526996062075,"[3.9068993870168924, 3.8936226449441165, 3.8872487179469317, 3.8911931777838618, 3.88358885794878, 3.8886565680149943, 3.890053481096402]",4571.9296875 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,1,16.210259269276104,"[0.060125784017145634, 0.06232575583271682, 0.061606443021446466, 0.06168932793661952, 0.06175602786242962, 0.06163156102411449, 0.061742307152599096]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,1,16.843928286078263,"[0.05653630895540118, 0.059587083058431745, 0.05904392385855317, 0.05940318596549332, 0.059616656973958015, 0.05924672004766762, 0.059368573827669024]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,8,28.6694632884164,"[0.2817683289758861, 0.28499519801698625, 0.2783872978761792, 0.274959767004475, 0.2746768419165164, 0.2826676538679749, 0.2790425450075418]",3276.0703125 +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,8,33.9929018600177,"[0.23534324998036027, 0.24000865500420332, 0.2358923179563135, 0.2338446439243853, 0.23344438197091222, 0.2317175311036408, 0.23604794219136238]",3276.0703125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,1,25.309400322870264,"[0.03936077491380274, 0.039631843101233244, 0.03990678698755801, 0.039661316899582744, 0.03951101121492684, 0.039362187031656504, 0.03942448110319674]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,1,21.600097606027113,"[0.046296087093651295, 0.046415665885433555, 0.046329667093232274, 0.04623448383063078, 0.04611725686118007, 0.04921415005810559, 0.046228053979575634]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,8,35.103085698640115,"[0.22518651699647307, 0.2253997081425041, 0.23186038597486913, 0.22569125704467297, 0.22790019284002483, 0.2390748281031847, 0.23001277400180697]",2597.8125 +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,8,35.31670132080987,"[0.22448562597855926, 0.22652172204107046, 0.23036780301481485, 0.22548158606514335, 0.23154534585773945, 0.22438515489920974, 0.23444966902025044]",2597.8125 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,1,5.2870796177288,"[0.18914033309556544, 0.19262751913629472, 0.19075547205284238, 0.19067009398713708, 0.1878105418290943, 0.18679662700742483, 0.185512974858284]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,1,5.316373845373524,"[0.18603909690864384, 0.1879474378656596, 0.1880981340073049, 0.19465805310755968, 0.18374116998165846, 0.19301294907927513, 0.1915520909242332]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,8,9.05434979700814,"[0.8835324679967016, 0.8796126821544021, 0.8855883809737861, 0.8819976099766791, 0.8911263120826334, 0.8835532290395349, 0.8942501419223845]",4371.82421875 +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,8,10.218024881652804,"[0.7836182001046836, 0.7942637118976563, 0.7978434439282864, 0.7829301741439849, 0.7703375180717558, 0.7731695030815899, 0.7766604509670287]",4371.82421875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,1,8.335461585337839,"[0.11936624301597476, 0.12028716993518174, 0.1198898209258914, 0.11996936099603772, 0.1255479718092829, 0.12052882392890751, 0.11988089792430401]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,1,8.307580034360607,"[0.11943842214532197, 0.12223849911242723, 0.120665960945189, 0.12022164114750922, 0.11999344709329307, 0.12037199712358415, 0.12117222300730646]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,8,11.97845406650308,"[0.6678658160381019, 0.6683775060810149, 0.6729175630025566, 0.6567499758675694, 0.6998441310133785, 0.6584836170077324, 0.6549387990962714]",3368.6796875 +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,8,11.473912593637586,"[0.6960745120886713, 0.6921091279946268, 0.6972338280174881, 0.6884630040731281, 0.697710475884378, 0.7003450850024819, 0.7081587959546596]",3368.6796875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,1,161.00975047984645,"[0.006225686054676771, 0.006210803985595703, 0.006231123814359307, 0.006214058957993984, 0.006176542025059462, 0.006152705987915397, 0.00617922586388886]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,1,171.7774120541947,"[0.006263743154704571, 0.005925494013354182, 0.005821487167850137, 0.00581612903624773, 0.005780805833637714, 0.005824531894177198, 0.005644029937684536]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,8,435.1032856195977,"[0.018386438954621553, 0.01836164202541113, 0.018457697005942464, 0.01846104208379984, 0.01831840700469911, 0.01843027607537806, 0.018302613869309425]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,8,429.62701399199307,"[0.01856072200462222, 0.018697799183428288, 0.018580020871013403, 0.018620803020894527, 0.018468794180080295, 0.021927202120423317, 0.01866384781897068]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,full,32,540.2155170998104,"[0.059235617984086275, 0.07875998201780021, 0.058841024059802294, 0.059210200095549226, 0.058656576089560986, 0.06043864996172488, 0.05931689101271331]",4594.6171875 +j-12402286-job-0,v2,cuda:0,trial-2-v2-cuda-0,north_europe,32,541.4671452872406,"[0.05885743908584118, 0.05875717801973224, 0.06654259306378663, 0.07518674014136195, 0.08202483900822699, 0.05909869191236794, 0.058883367804810405]",4594.6171875 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,1,81.16874539926094,"[0.012348076095804572, 0.012338540982455015, 0.012180212885141373, 0.012737762182950974, 0.012134294025599957, 0.012320013018324971, 0.012225921964272857]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,1,90.32262553783906,"[0.011130701983347535, 0.011071423068642616, 0.010942748980596662, 0.010968978982418776, 0.011071813991293311, 0.01107259513810277, 0.010944021865725517]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,8,322.7760557412565,"[0.026956066023558378, 0.022869671927765012, 0.02351571386680007, 0.02464865008369088, 0.025352459866553545, 0.024784985929727554, 0.025594915030524135]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,8,337.08009179125736,"[0.02318065892904997, 0.023733231937512755, 0.025676697958260775, 0.024033724097535014, 0.024936974048614502, 0.023559550056234002, 0.02298811892978847]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,32,480.7295415676908,"[0.066565495217219, 0.0720324581488967, 0.06391856912523508, 0.0682739180047065, 0.06204661983065307, 0.069828248815611, 0.06434879591688514]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,32,500.9489927365889,"[0.06387875904329121, 0.06351401889696717, 0.06271800096146762, 0.06341045419685543, 0.06653846404515207, 0.06531310896389186, 0.06620164797641337]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,256,484.9186025150553,"[0.5886720470152795, 0.5194524850230664, 0.5279236529022455, 0.5321383089758456, 0.5185856700409204, 0.5090254629030824, 0.5419068799819797]",8188.09375 +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,256,481.25928590028155,"[0.5301802209578454, 0.5235195609275252, 0.5218246579170227, 0.5581743190996349, 0.5647571920417249, 0.5319377880077809, 0.5332872800063342]",8188.09375 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,1,117.43148124386231,"[0.009210751159116626, 0.008725019870325923, 0.008515604073181748, 0.008552378974854946, 0.008464035810902715, 0.008427952183410525, 0.0084298150613904]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,1,134.13082380094173,"[0.007412181934341788, 0.01019041589461267, 0.0075198139529675245, 0.0074878770392388105, 0.007455407874658704, 0.007364019984379411, 0.007341606076806784]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,8,325.31454366855536,"[0.024591584224253893, 0.02307168487459421, 0.02683611516840756, 0.0241467640735209, 0.02690870384685695, 0.022939695976674557, 0.026479606982320547]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,8,340.8623552706615,"[0.02758285799063742, 0.021402932005003095, 0.023720962926745415, 0.021846329793334007, 0.023469884181395173, 0.023912010015919805, 0.02184208296239376]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,32,423.8299274486698,"[0.0741583900526166, 0.07550198305398226, 0.0761240900028497, 0.07465476705692708, 0.07128015486523509, 0.08219688618555665, 0.0815178130287677]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,32,450.86059104277984,"[0.07909955084323883, 0.07021824596449733, 0.069404860958457, 0.07097537606023252, 0.0775834871456027, 0.0735903240274638, 0.07062368700280786]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,256,434.5044535105278,"[0.574277161154896, 0.5931331771425903, 0.5964784759562463, 0.5891769300214946, 0.5599386470858008, 0.5884639860596508, 0.6193525118287653]",7060.80078125 +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,256,478.92680686887013,"[0.5445930592250079, 0.5345284421928227, 0.5330053579527885, 0.5284217949956656, 0.5155887200962752, 0.5453968490473926, 0.5621617650613189]",7060.80078125 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,1,26.260199396954842,"[0.037721110973507166, 0.03801258001476526, 0.03808044199831784, 0.03809234988875687, 0.03801942989230156, 0.038160863099619746, 0.038136095041409135]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,1,27.230164064477638,"[0.03656417992897332, 0.03672397998161614, 0.03676391998305917, 0.03692037612199783, 0.03687181300483644, 0.03671504696831107, 0.03668679506517947]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,8,99.30083520557004,"[0.08817261201329529, 0.08056327002122998, 0.08243331499397755, 0.07751480210572481, 0.07711792504414916, 0.07972776307724416, 0.09396216599270701]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,8,106.39880955051781,"[0.07518881116993725, 0.07190941600129008, 0.07072232896462083, 0.07734115002676845, 0.07790594105608761, 0.08185646589845419, 0.07008080300875008]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,32,132.9525566642423,"[0.2475315509364009, 0.23692860314622521, 0.24068736098706722, 0.24118130397982895, 0.23645635298453271, 0.27485791803337634, 0.23347910190932453]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,32,138.92376989105296,"[0.22001846390776336, 0.2268230440095067, 0.23034215113148093, 0.24066580785438418, 0.23546897689811885, 0.2404360631480813, 0.22566359979100525]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,256,122.06936407090326,"[2.336555507965386, 2.2735475189983845, 2.097168294014409, 2.4015583801083267, 2.064423801843077, 1.9175253270659596, 1.9486562099773437]",14292.49609375 +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,256,135.18809740356323,"[1.9579639059957117, 1.7155220229178667, 1.942531730979681, 1.734958509216085, 1.8936578361317515, 1.915506506105885, 1.7982790840324014]",14292.49609375 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,1,36.14877051834988,"[0.028116188943386078, 0.03089137887582183, 0.027929709060117602, 0.0276634581387043, 0.027452199021354318, 0.0275122900493443, 0.02757573500275612]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,1,37.56068717253849,"[0.026412914041429758, 0.02669455809518695, 0.026539754820987582, 0.02662358107045293, 0.026637681992724538, 0.026736621977761388, 0.026592865120619535]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,8,104.12237774423836,"[0.07774468092247844, 0.07633712119422853, 0.0736997879575938, 0.08207742706872523, 0.07361253700219095, 0.09045886108651757, 0.07683266722597182]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,8,107.9165737978222,"[0.0715147671289742, 0.07413133792579174, 0.07240796298719943, 0.07436913577839732, 0.07409627479501069, 0.0758538031950593, 0.08407669910229743]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,32,126.85090984687861,"[0.24829021096229553, 0.2550519860815257, 0.24642864800989628, 0.24601408280432224, 0.2557852999307215, 0.2522646470461041, 0.2615428620483726]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,32,130.58932515296468,"[0.23987787100486457, 0.24645433598197997, 0.24504299997352064, 0.2538256689440459, 0.24065447016619146, 0.24092900287359953, 0.248415068956092]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,256,117.77401530612686,"[1.999306048033759, 2.1736543441656977, 2.234514598036185, 2.359678902197629, 2.0039377121720463, 2.0673675059806556, 2.207722074119374]",11595.35546875 +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,256,121.47803542354946,"[2.080478888936341, 2.138539368053898, 1.9661309530492872, 1.9944482129067183, 2.107376853004098, 2.2597598631400615, 2.1151587599888444]",11595.35546875 diff --git a/docs/assets/mambo-indomain-speed.svg b/docs/assets/mambo-indomain-speed.svg new file mode 100644 index 0000000..6ede5b7 --- /dev/null +++ b/docs/assets/mambo-indomain-speed.svg @@ -0,0 +1,1516 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + + + + 2 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + 3 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + 4 + × + 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + 6 + × + 1 + 0 + 0 + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + + + 10 + + + + + + + + + + + + + 15 + + + + + + + + + + + + + 20 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 30 + + + + + + + + + + + + + 35 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EPYC CPU · request + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + + + + 32 + + + + + + + + + + + + + 256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Batch size + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 100 + + + + + + + + + + + + + 200 + + + + + + + + + + + + + 300 + + + + + + + + + + + + + 400 + + + + + + + + + + + + + 500 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · request + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 100 + + + + + + + + + + 200 + + + + + + + + + + 300 + + + + + + + + + + 400 + + + + + + + + + + 500 + + + + + + + + + + 600 + + + + Images/s + + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · streaming, batch 256 + + + + Global vocabulary; median and range of 3 process trials. CPU runtime threads: 4. Streaming: 1,024 images, startup included. + Request and streaming are different execution modes; these are measured pipeline rates, not GPU throughput ceilings. + + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + diff --git a/docs/assets/mambo-indomain-streaming-speed.csv b/docs/assets/mambo-indomain-streaming-speed.csv new file mode 100644 index 0000000..103306f --- /dev/null +++ b/docs/assets/mambo-indomain-streaming-speed.csv @@ -0,0 +1,49 @@ +environment_id,variant,device,trial,preset,batch_size,images,images_per_second,seconds +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,full,8,1024,34.04237830107543,"[30.104328206041828, 29.858235927997157, 30.08015453396365]" +j-12402286-job-0,torch,cpu,trial-0-torch-cpu,north_europe,8,1024,33.76846736338423,"[30.324147938983515, 30.27414759597741, 30.42432832112536]" +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,full,8,1024,36.823971100312555,"[28.11732700583525, 27.807973159942776, 27.415707787964493]" +j-12402286-job-0,onnx,cpu,trial-0-onnx-cpu,north_europe,8,1024,39.83486966086653,"[26.015997915994376, 25.70612151408568, 25.70504664396867]" +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,full,8,1024,11.528776720330582,"[87.47479516896419, 91.94617670285515, 88.82121883705258]" +j-12402286-job-0,torch-tta,cpu,trial-0-torch-tta-cpu,north_europe,8,1024,11.597935503144953,"[88.08198932395317, 91.0903279799968, 88.29157566209324]" +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,full,8,1024,13.112669940257966,"[80.34720183187164, 76.71521435119212, 78.09241021587513]" +j-12402286-job-0,onnx-tta,cpu,trial-0-onnx-tta-cpu,north_europe,8,1024,13.27009582554481,"[76.73085354687646, 77.16598383779638, 78.50553843402304]" +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,full,256,1024,640.1449324127675,"[1.715137304039672, 1.5996377510018647, 1.453258153051138]" +j-12402286-job-0,torch,cuda:0,trial-0-torch-cuda-0,north_europe,256,1024,673.265728397876,"[1.5714211959857494, 1.462558472994715, 1.5209447871893644]" +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,full,256,1024,597.5332456895293,"[1.7360637581441551, 1.6371290409006178, 1.713712178170681]" +j-12402286-job-0,onnx,cuda:0,trial-0-onnx-cuda-0,north_europe,256,1024,605.545513577582,"[1.7592463069595397, 1.5975160330999643, 1.6910372169222683]" +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,full,256,1024,198.6388734870403,"[5.8052552349399775, 4.933058385970071, 5.155083604855463]" +j-12402286-job-0,torch-tta,cuda:0,trial-0-torch-tta-cuda-0,north_europe,256,1024,204.0579378060664,"[5.018182634841651, 5.161591398064047, 4.959914960898459]" +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,full,256,1024,203.2502389535636,"[5.038124458165839, 5.011830616975203, 5.688519447110593]" +j-12402286-job-0,onnx-tta,cuda:0,trial-0-onnx-tta-cuda-0,north_europe,256,1024,200.95524826672832,"[5.0116610820405185, 5.095661889063194, 5.30839680810459]" +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,full,8,1024,12.45846871420143,"[82.94655893812887, 82.1930867661722, 80.58071889891289]" +j-12402286-job-0,onnx-tta,cpu,trial-1-onnx-tta-cpu,north_europe,8,1024,13.154451338979724,"[77.8443717348855, 78.10592608293518, 76.9228190148715]" +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,full,8,1024,11.796456440349788,"[87.78689663484693, 86.26503587304614, 86.80572892189957]" +j-12402286-job-0,torch-tta,cpu,trial-1-torch-tta-cpu,north_europe,8,1024,11.927875241130472,"[85.84932180284522, 86.64871792611666, 85.50610742717981]" +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,full,8,1024,36.7664823775916,"[27.401659866794944, 27.906167353037745, 27.851454199058935]" +j-12402286-job-0,onnx,cpu,trial-1-onnx-cpu,north_europe,8,1024,37.27682596375597,"[27.463112919824198, 27.470149979926646, 27.61266869190149]" +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,full,8,1024,34.13436588072897,"[29.999092515092343, 28.876937593100592, 30.756536277011037]" +j-12402286-job-0,torch,cpu,trial-1-torch-cpu,north_europe,8,1024,35.825671462891485,"[28.5828557619825, 28.79824579693377, 28.507902273908257]" +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,full,256,1024,172.91579640944386,"[5.92195751494728, 5.623914316063747, 5.9630442429333925]" +j-12402286-job-0,onnx-tta,cuda:0,trial-1-onnx-tta-cuda-0,north_europe,256,1024,179.717056857759,"[5.754108743974939, 5.637985749868676, 5.697845368180424]" +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,full,256,1024,187.80079185498832,"[6.130035428097472, 5.452586167957634, 5.228225806960836]" +j-12402286-job-0,torch-tta,cuda:0,trial-1-torch-tta-cuda-0,north_europe,256,1024,198.12210776240224,"[5.097536427201703, 5.374059800058603, 5.168529709102586]" +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,full,256,1024,548.3844976335021,"[1.9139710620511323, 1.867302967933938, 1.8485038930084556]" +j-12402286-job-0,onnx,cuda:0,trial-1-onnx-cuda-0,north_europe,256,1024,583.7695669243686,"[1.751705561997369, 1.7930034210439771, 1.7541167919989675]" +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,full,256,1024,624.8821454763469,"[1.6678844741545618, 1.63870900683105, 1.3959779811557382]" +j-12402286-job-0,torch,cuda:0,trial-1-torch-cuda-0,north_europe,256,1024,660.7434552564797,"[1.6962513069156557, 1.4128376580774784, 1.549769417848438]" +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,full,8,1024,33.77712455072364,"[30.412344111828133, 30.316375760827214, 30.313768835971132]" +j-12402286-job-0,torch,cpu,trial-2-torch-cpu,north_europe,8,1024,34.90248137459078,"[28.671414472861215, 29.965245082974434, 29.33888823003508]" +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,full,8,1024,37.398608869274646,"[27.90463216905482, 27.328506266931072, 27.38069759705104]" +j-12402286-job-0,onnx,cpu,trial-2-onnx-cpu,north_europe,8,1024,37.35046048678505,"[27.334079992957413, 27.50279205595143, 27.415993983857334]" +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,full,8,1024,10.974689425392665,"[90.90350299398415, 94.55241905595176, 93.30560167203657]" +j-12402286-job-0,torch-tta,cpu,trial-2-torch-tta-cpu,north_europe,8,1024,11.236805637224117,"[91.85084778792225, 91.12910137092695, 89.62535597500391]" +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,full,8,1024,12.674192128337234,"[79.93258225917816, 80.79410424199887, 83.54928972292691]" +j-12402286-job-0,onnx-tta,cpu,trial-2-onnx-tta-cpu,north_europe,8,1024,12.318173490485412,"[81.82937749195844, 83.39652918488719, 83.12920749094337]" +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,full,256,1024,602.551311029026,"[1.699440331896767, 1.7066811660770327, 1.6270493438933045]" +j-12402286-job-0,torch,cuda:0,trial-2-torch-cuda-0,north_europe,256,1024,665.9971522368938,"[1.7486076559871435, 1.345568273914978, 1.5375441119540483]" +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,full,256,1024,534.1732952570765,"[1.9169808919541538, 1.766346275107935, 1.9942841969896108]" +j-12402286-job-0,onnx,cuda:0,trial-2-onnx-cuda-0,north_europe,256,1024,609.4847832527348,"[1.6801075730472803, 1.6768436080310494, 1.6913127771113068]" +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,full,256,1024,212.92829863859407,"[4.809130616020411, 4.391952194040641, 5.296736722113565]" +j-12402286-job-0,torch-tta,cuda:0,trial-2-torch-tta-cuda-0,north_europe,256,1024,196.22635814432056,"[5.218463052995503, 5.365933086024597, 5.179876493057236]" +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,full,256,1024,208.15033145920478,"[4.893261830089614, 4.919521351810545, 5.14984557707794]" +j-12402286-job-0,onnx-tta,cuda:0,trial-2-onnx-tta-cuda-0,north_europe,256,1024,205.2013555896214,"[4.872062952956185, 4.990220444975421, 5.018525517079979]" diff --git a/docs/assets/mambo-indomain-support.json b/docs/assets/mambo-indomain-support.json new file mode 100644 index 0000000..4666201 --- /dev/null +++ b/docs/assets/mambo-indomain-support.json @@ -0,0 +1,30775 @@ +{ + "population": "reporting_partition", + "identities": { + "v2": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "torch": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "onnx": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "torch-tta": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "onnx-tta": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7" + }, + "sources_sha256": { + "v2": "c8c2b3d0b3eb4726fe2578c1076cf26294a4c8122043e41b77150e9d4e8bb337", + "torch": "bbcd9cda9db39a5aa42908c0f7af718b7b13e33b6b8013a7c9fa6eb6799f94f1", + "onnx": "484eb6474495cac4826fb97097bac7313cce242a988831c152a348d7b4af2eec", + "torch-tta": "82bb7a7c36cc59d49ef38b4d27137c3c0acbe623e438d7ea9dd679e47dc5a01c", + "onnx-tta": "34324a27a65c3ef98ec95b0db443efc5f65bbf270dccb33a572afb37ddba6526" + }, + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", + "tta": "rotation30_pad25_3", + "report_images": 568939, + "calibration_images": 63974, + "dataset_title": "In-domain global-lepi test \u00b7 global vocabulary", + "independent_recipe": true, + "rows": [ + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.8775332728247491, + "precision": 0.8448274823412316, + "recall": 0.8775332728247491, + "f1": 0.850372188202817 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9295522392148737, + "precision": 0.9084034020798256, + "recall": 0.9295522392148737, + "f1": 0.9144754993404935 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.929545760642923, + "precision": 0.9083939953917602, + "recall": 0.929545760642923, + "f1": 0.9144694069143972 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9031914801618097, + "precision": 0.8957682319690011, + "recall": 0.9031914801618097, + "f1": 0.8931233034667367 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.903254258165182, + "precision": 0.8958363209627044, + "recall": 0.903254258165182, + "f1": 0.8931813750062196 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 556775, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.892042637746108, + "precision": 0.8624807091335043, + "recall": 0.892042637746108, + "f1": 0.870130409847651 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558238, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9371951539678676, + "precision": 0.920053780228017, + "recall": 0.9371951539678676, + "f1": 0.9257802069792285 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558236, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9372070517025534, + "precision": 0.9200666309904021, + "recall": 0.9372070517025534, + "f1": 0.9257949069356713 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558982, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9160969130174343, + "precision": 0.9061800058338343, + "recall": 0.9160969130174343, + "f1": 0.9073461234817897 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10732, + "truth_images_in_retained_classes": 559258, + "accepted_predictions_in_retained_classes": 558984, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9161801232055252, + "precision": 0.9062393050497608, + "recall": 0.9161801232055252, + "f1": 0.9074189531592058 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9449328592412035, + "precision": 0.9072671198812579, + "recall": 0.9449328592412035, + "f1": 0.9213682143792531 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9700441575339722, + "precision": 0.9534379966946678, + "recall": 0.9700441575339722, + "f1": 0.9600051179818128 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9700350462704753, + "precision": 0.9534572983167396, + "recall": 0.9700350462704753, + "f1": 0.9600143434479116 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9525452203980439, + "precision": 0.9370642917998594, + "recall": 0.9525452203980439, + "f1": 0.9422165624061323 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9524334553173022, + "precision": 0.9371069603411143, + "recall": 0.9524334553173022, + "f1": 0.9421777591016375 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566720, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9479651709033954, + "precision": 0.913798169374068, + "recall": 0.9479651709033954, + "f1": 0.9272747658088364 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566882, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9714171324802696, + "precision": 0.9581319473622291, + "recall": 0.9714171324802696, + "f1": 0.9636531390879689 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566883, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9714071295331486, + "precision": 0.9581122582265235, + "recall": 0.9714071295331486, + "f1": 0.9636409693787092 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566891, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9554622976340493, + "precision": 0.9419053142860855, + "recall": 0.9554622976340493, + "f1": 0.946826548337692 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4077, + "truth_images_in_retained_classes": 567027, + "accepted_predictions_in_retained_classes": 566890, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9553804742750274, + "precision": 0.9419864197387074, + "recall": 0.9553804742750274, + "f1": 0.9468334279086545 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9705788744761545, + "precision": 0.9509880328905062, + "recall": 0.9705788744761545, + "f1": 0.9597726462561909 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9847079901805926, + "precision": 0.9765407345826963, + "recall": 0.9847079901805926, + "f1": 0.980351974922878 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9845608356725373, + "precision": 0.9760061052351259, + "recall": 0.9845608356725373, + "f1": 0.9799783228875365 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9681161624170399, + "precision": 0.9623314442357818, + "recall": 0.9681161624170399, + "f1": 0.9645304134232945 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 568939, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9681041671465577, + "precision": 0.9623128857780121, + "recall": 0.9681041671465577, + "f1": 0.9645148542838584 + } + }, + { + "model": "v2", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568924, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9697049796586146, + "precision": 0.9523610862012567, + "recall": 0.9697049796586146, + "f1": 0.9602279393793121 + } + }, + { + "model": "torch", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568926, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9842537720671449, + "precision": 0.975843924718816, + "recall": 0.9842537720671449, + "f1": 0.9797683702176169 + } + }, + { + "model": "onnx", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568926, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9841022466331076, + "precision": 0.9752934152916147, + "recall": 0.9841022466331076, + "f1": 0.9793836196069683 + } + }, + { + "model": "torch-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568925, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9671691177363579, + "precision": 0.9628627412592868, + "recall": 0.9671691177363579, + "f1": 0.9643769513557596 + } + }, + { + "model": "onnx-tta", + "scope": "zero", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 568925, + "report_images": 568939, + "overall_coverage": 1.0, + "metrics": { + "accuracy": 0.9671567661707129, + "precision": 0.9628436315601973, + "recall": 0.9671567661707129, + "f1": 0.9643609300636667 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 546194, + "report_images": 568939, + "overall_coverage": 0.9600220761803989, + "metrics": { + "accuracy": 0.9037265793690537, + "precision": 0.8744630133499443, + "recall": 0.8617359559506923, + "f1": 0.8577212237023112 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 554475, + "report_images": 568939, + "overall_coverage": 0.9745772393877024, + "metrics": { + "accuracy": 0.9459195194605763, + "precision": 0.9308209935558278, + "recall": 0.9187824413723291, + "f1": 0.9207369197765051 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 554457, + "report_images": 568939, + "overall_coverage": 0.974545601549551, + "metrics": { + "accuracy": 0.9459922827275581, + "precision": 0.9308488990338033, + "recall": 0.9188180504133524, + "f1": 0.920776413807909 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 551819, + "report_images": 568939, + "overall_coverage": 0.9699089006027009, + "metrics": { + "accuracy": 0.924348693798147, + "precision": 0.9180616415933389, + "recall": 0.8923771863774734, + "f1": 0.8990523856912974 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": -1, + "domain": "per_model", + "class_count": 12632, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 551892, + "report_images": 568939, + "overall_coverage": 0.9700372096129813, + "metrics": { + "accuracy": 0.9243532804255711, + "precision": 0.9180792238778338, + "recall": 0.892479370530307, + "f1": 0.8991069244273215 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 534450, + "report_images": 568939, + "overall_coverage": 0.9600220761803989, + "metrics": { + "accuracy": 0.9177121083679098, + "precision": 0.891762023479617, + "recall": 0.8801101949128962, + "f1": 0.8795222528459896 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 543718, + "report_images": 568939, + "overall_coverage": 0.9745772393877024, + "metrics": { + "accuracy": 0.9532783476173154, + "precision": 0.9407074772137323, + "recall": 0.9290829607634777, + "f1": 0.9325396241152072 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 543696, + "report_images": 568939, + "overall_coverage": 0.974545601549551, + "metrics": { + "accuracy": 0.9532904839498968, + "precision": 0.9407443752022229, + "recall": 0.9291231422275786, + "f1": 0.932580761385352 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 541677, + "report_images": 568939, + "overall_coverage": 0.9699089006027009, + "metrics": { + "accuracy": 0.9363450738235962, + "precision": 0.9279542708375016, + "recall": 0.9080426198963741, + "f1": 0.9146258206280785 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "species", + "cutoff": 5, + "domain": "common", + "class_count": 10602, + "truth_images_in_retained_classes": 558259, + "accepted_predictions_in_retained_classes": 541751, + "report_images": 568939, + "overall_coverage": 0.9700372096129813, + "metrics": { + "accuracy": 0.9363638260678422, + "precision": 0.9279653724002486, + "recall": 0.9081549374042587, + "f1": 0.9146897500425569 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 547692, + "report_images": 568939, + "overall_coverage": 0.9626550473776626, + "metrics": { + "accuracy": 0.9709681846201991, + "precision": 0.945956754906805, + "recall": 0.924476997515889, + "f1": 0.9315715620856552 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 557792, + "report_images": 568939, + "overall_coverage": 0.9804073898959291, + "metrics": { + "accuracy": 0.9843532446734725, + "precision": 0.9768370043872598, + "recall": 0.9598662398316677, + "f1": 0.9670807734237682 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 557681, + "report_images": 568939, + "overall_coverage": 0.9802122898939957, + "metrics": { + "accuracy": 0.9843807286145065, + "precision": 0.9770218695519097, + "recall": 0.9596964890327477, + "f1": 0.9670747932811063 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 553424, + "report_images": 568939, + "overall_coverage": 0.9727299411711976, + "metrics": { + "accuracy": 0.9715101613252839, + "precision": 0.9625019705071297, + "recall": 0.9403692157002803, + "f1": 0.9493424432950821 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": -1, + "domain": "per_model", + "class_count": 4476, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 553316, + "report_images": 568939, + "overall_coverage": 0.9725401141422895, + "metrics": { + "accuracy": 0.9717039507950574, + "precision": 0.9627559769001354, + "recall": 0.9402188527993052, + "f1": 0.9493781942192143 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 545570, + "report_images": 568939, + "overall_coverage": 0.9626550473776626, + "metrics": { + "accuracy": 0.9734046694197016, + "precision": 0.9512441119322542, + "recall": 0.9305841568761081, + "f1": 0.9383497485198514 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 555695, + "report_images": 568939, + "overall_coverage": 0.9804073898959291, + "metrics": { + "accuracy": 0.9852486590471086, + "precision": 0.9794558453427681, + "recall": 0.9630513085239086, + "f1": 0.9704594874167481 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 555586, + "report_images": 568939, + "overall_coverage": 0.9802122898939957, + "metrics": { + "accuracy": 0.9852790940100151, + "precision": 0.9795451055630318, + "recall": 0.9628633311424227, + "f1": 0.9704073117357285 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 551321, + "report_images": 568939, + "overall_coverage": 0.9727299411711976, + "metrics": { + "accuracy": 0.9741322556482092, + "precision": 0.9663131588925964, + "recall": 0.944725691696706, + "f1": 0.9541105972556507 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "genus", + "cutoff": 5, + "domain": "common", + "class_count": 4042, + "truth_images_in_retained_classes": 566796, + "accepted_predictions_in_retained_classes": 551215, + "report_images": 568939, + "overall_coverage": 0.9725401141422895, + "metrics": { + "accuracy": 0.9743203454081207, + "precision": 0.9665903152380758, + "recall": 0.9446519597954779, + "f1": 0.9542041917775816 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 560532, + "report_images": 568939, + "overall_coverage": 0.985223371925637, + "metrics": { + "accuracy": 0.9886094792660989, + "precision": 0.9786092510915618, + "recall": 0.9509273853934727, + "f1": 0.9637305558575113 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 563145, + "report_images": 568939, + "overall_coverage": 0.9898161314306103, + "metrics": { + "accuracy": 0.9948948540363234, + "precision": 0.9928704939132356, + "recall": 0.9735711206973268, + "f1": 0.9828384466133122 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 563126, + "report_images": 568939, + "overall_coverage": 0.9897827359347838, + "metrics": { + "accuracy": 0.994899624212835, + "precision": 0.9928702233945721, + "recall": 0.9735459402580976, + "f1": 0.9828257658861518 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 555940, + "report_images": 568939, + "overall_coverage": 0.9771522078816886, + "metrics": { + "accuracy": 0.9884734442452687, + "precision": 0.9837783443784444, + "recall": 0.951186192254207, + "f1": 0.966613846478881 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": -1, + "domain": "per_model", + "class_count": 104, + "truth_images_in_retained_classes": 568939, + "accepted_predictions_in_retained_classes": 555880, + "report_images": 568939, + "overall_coverage": 0.977046748421184, + "metrics": { + "accuracy": 0.9884830018540828, + "precision": 0.9837869141498093, + "recall": 0.9509704435277845, + "f1": 0.9665038797027707 + } + }, + { + "model": "v2", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 560519, + "report_images": 568939, + "overall_coverage": 0.985223371925637, + "metrics": { + "accuracy": 0.9882711469670721, + "precision": 0.979624047328605, + "recall": 0.9519450305041699, + "f1": 0.9649677628014595 + } + }, + { + "model": "torch", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 563132, + "report_images": 568939, + "overall_coverage": 0.9898161314306103, + "metrics": { + "accuracy": 0.9947432160374022, + "precision": 0.992658726405708, + "recall": 0.9727861044804157, + "f1": 0.9823286975028166 + } + }, + { + "model": "onnx", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 563113, + "report_images": 568939, + "overall_coverage": 0.9897827359347838, + "metrics": { + "accuracy": 0.994748127902325, + "precision": 0.9926584478518367, + "recall": 0.9727601761073481, + "f1": 0.9823156401203942 + } + }, + { + "model": "torch-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 555926, + "report_images": 568939, + "overall_coverage": 0.9771522078816886, + "metrics": { + "accuracy": 0.9881310713020588, + "precision": 0.9849466780398504, + "recall": 0.9497362771726487, + "f1": 0.9665222685615121 + } + }, + { + "model": "onnx-tta", + "scope": "optimized", + "rank": "family", + "cutoff": 5, + "domain": "common", + "class_count": 101, + "truth_images_in_retained_classes": 568926, + "accepted_predictions_in_retained_classes": 555866, + "report_images": 568939, + "overall_coverage": 0.977046748421184, + "metrics": { + "accuracy": 0.9881409128002436, + "precision": 0.9849555023588796, + "recall": 0.9495141200682138, + "f1": 0.9664090354455174 + } + } + ], + "shared_class_domains": { + "zero/species": [ + "10000103", + "10000384", + "10002059", + "10003902", + "10004820", + "10004969", + "10005133", + "10005632", + "10010361", + "10010700", + "10014340", + "10017792", + "10018221", + "10019169", + "10023049", + "10023821", + "10026605", + "10032003", + "10033898", + "10034831", + "10038125", + "10042504", + "10043566", + "10043827", + "10044107", + "10046510", + "10046698", + "10047346", + "10049887", + "10053130", + "10053809", + "10054019", + "10055104", + "10055273", + "10058263", + "10058481", + "10059034", + "10062202", + "10062933", + "10063383", + "10066605", + "10067382", + "10068024", + "10069243", + "10071588", + "10072380", + "10073044", + "10073321", + "10074808", + "10075196", + "10075732", + "10078526", + "10078800", + "10085335", + "10088253", + "10089194", + "10090105", + "10090168", + "10094256", + "10094594", + "10095278", + "10096855", + "10097776", + "10098436", + "10100176", + "10103570", + "10106345", + "10106475", + "10108753", + "10109201", + "10113008", + "10113190", + "10114865", + "10115073", + "10116946", + "10117959", + "10118643", + "10118678", + "10120854", + "10121804", + "10129812", + "10132475", + "10132596", + "10132811", + "10134558", + "10134865", + "10137001", + "10137350", + "10141437", + "10142569", + "10143814", + "10145421", + "10146436", + "10146771", + "10153630", + "10154280", + "10155026", + "10155932", + "10156181", + "10156470", + "10157400", + "10159697", + "10164453", + "10165457", + "10165831", + "10166724", + "10167252", + "10174909", + "10175639", + "10176413", + "10176954", + "10177508", + "10178326", + "10179389", + "10180624", + "10183056", + "10184940", + "10187154", + "10188228", + "10189661", + "10191275", + "10191785", + "10194663", + "10194727", + "10196956", + "10201273", + "10202439", + "10203493", + "10203499", + "10205587", + "10208422", + "10208792", + "10208801", + "10209845", + "10210935", + "10211808", + "10213314", + "10214972", + "10217455", + "10221195", + "10222583", + "10224300", + "10225227", + "10228568", + "10236521", + "10240592", + "10244305", + "10245924", + "10246305", + "10247309", + "10248521", + "10250474", + "10256550", + "10257673", + "10257899", + "10259280", + "10259880", + "10263383", + "10264193", + "10265559", + "10265841", + "10266782", + "10267561", + "10267570", + "10268303", + "10270464", + "10271464", + "10272611", + "10274769", + "10274976", + "10277877", + "10278292", + "10279983", + "10288636", + "10290084", + "10295171", + "10295290", + "10295646", + "10302305", + "10302660", + "10304313", + "10307487", + "10308365", + "10309794", + "10310599", + "10310835", + "10312073", + "10312760", + "10321900", + "10327658", + "10329023", + "10330376", + "10331171", + "10333787", + "10336328", + "10340332", + "10341307", + "10346267", + "10348110", + "10348945", + "10353400", + "10355428", + "10355898", + "10357476", + "10358334", + "10360329", + "10361029", + "10361239", + "10363151", + "10365587", + "10365884", + "10366580", + "10366679", + "10368234", + "10370026", + "10371735", + "10372377", + "10374414", + "10375186", + "10375403", + "10376507", + "10376685", + "10378314", + "10379201", + "10380465", + "10383968", + "10388627", + "10392889", + "10394962", + "10395440", + "10397209", + "10398658", + "10399906", + "10400868", + "10401396", + "10402067", + "10403441", + "10404426", + "10407953", + "10410048", + "10410699", + "10411202", + "10411472", + "10413588", + "10415847", + "10422582", + "10423263", + "10427568", + "10432184", + "10433914", + "10435406", + "10436020", + "10436850", + "10437872", + "10441062", + "10441857", + "10442122", + "10442332", + "10443878", + "10444331", + "10445629", + "10446295", + "10446574", + "10446580", + "10446898", + "10448500", + "10450442", + "10450446", + "10450501", + "10451589", + "10452421", + "10454590", + "10456933", + "10457796", + "10458175", + "10458960", + "10462612", + "10464411", + "10464824", + "10465059", + "10469497", + "10469564", + "10471477", + "10474236", + "10476233", + "10477629", + "10480609", + "10481441", + "10482025", + "10487080", + "10495733", + "10496181", + "10502505", + "10503464", + "10503495", + "10505033", + "10506164", + "10508423", + "10508467", + "10509408", + "10510138", + "10510325", + "10510959", + "10512675", + "10514620", + "10515719", + "10517417", + "10517500", + "10518163", + "10521368", + "10523304", + "10526954", + "10528420", + "10530208", + "10530383", + "10530515", + "10531480", + "10534945", + "10535684", + "10539598", + "10542548", + "10545267", + "10546013", + "10546538", + "10547404", + "10547716", + "10548275", + "10548683", + "10549715", + "10551407", + "10551923", + "10556366", + "10556522", + "10556853", + "10558140", + "10560674", + "10560849", + "10561589", + "10569879", + "10570752", + "10571987", + "10572729", + "10573425", + "10575632", + "10577473", + "10579230", + "10580256", + "10581870", + "10584071", + "10587253", + "10588642", + "10591617", + "10592969", + "10593489", + "10594478", + "10596756", + "10597291", + "10597823", + "10598038", + "10598407", + "10600208", + "10604375", + "10606547", + "10606887", + "10607329", + "10613467", + "10615631", + "10619048", + "10626099", + "10629052", + "10629533", + "10632124", + "10634980", + "10637588", + "10638244", + "10638451", + "10638589", + "10639484", + "10639943", + "10640865", + "10643533", + "10644798", + "10647358", + "10648791", + "10653980", + "10655790", + "10656625", + "10657151", + "10657453", + "10658576", + "10659737", + "10662329", + "10679326", + "10683012", + "10684776", + "10690739", + "10698858", + "10700540", + "10701190", + "10703948", + "10706419", + "10707501", + "10709446", + "10712554", + "10713577", + "10714961", + "10715410", + "10716234", + "10717680", + "10717837", + "10730270", + "10732033", + "10732353", + "10737993", + "10738407", + "10741837", + "10746289", + "10747908", + "10749137", + "10755716", + "10761559", + "10765884", + "10766319", + "10769553", + "10773498", + "10776919", + "10782264", + "10787705", + "10795141", + "10799294", + "10806460", + "10807169", + "10807383", + "10807787", + "10813849", + "10814936", + "10817208", + "10820762", + "10822185", + "10826443", + "10830546", + "10833593", + "10835385", + "10838422", + "10840540", + "10840565", + "10841562", + "10842267", + "10844862", + "10850393", + "10850415", + "10850929", + "10851228", + "10851840", + "10854079", + "10855556", + "10857326", + "10858809", + "10860091", + "10861282", + "10866199", + "10866411", + "10867462", + "10869347", + "10873137", + "10874932", + "10879371", + "10882244", + "10882997", + "10883659", + "10889719", + "10891794", + "10904813", + "10922201", + "10922411", + "10926224", + "10932946", + "10933525", + "10942408", + "10955682", + "10959264", + "10963226", + "10967713", + "10972780", + "10982648", + "10982815", + "10987178", + "10988070", + "10994020", + "10996761", + "11008182", + "11014495", + "11016336", + "11033463", + "11044778", + "11046092", + "11052757", + "11054256", + "11055981", + "11056379", + "11059353", + "11080751", + "11088003", + "11093909", + "11095591", + "11097510", + "11098546", + "11121180", + "11135155", + "11140464", + "11141784", + "11142432", + "11173690", + "11175615", + "11190148", + "11219489", + "11232431", + "11287091", + "11311045", + "11322712", + "11372793", + "11374171", + "11375508", + "11378273", + "11378618", + "11382064", + "11414590", + "11417741", + "11418741", + "11423843", + "11428453", + "11430021", + "11431507", + "11435704", + "11437060", + "11449815", + "11451126", + "11452421", + "11453492", + "11457930", + "11461056", + "11464362", + "11464595", + "11465014", + "11466090", + "11467034", + "11467944", + "11468089", + "11468731", + "11470119", + "11470672", + "11478679", + "11484123", + "11487320", + "11494627", + "11495556", + "11496990", + "11501104", + "11503857", + "11508076", + "11508404", + "11508472", + "11513018", + "11513188", + "11516142", + "11529292", + "11529603", + "11535847", + "11539735", + "11546465", + "11548960", + "11554226", + "11554842", + "11555221", + "11562243", + "11563728", + "11566649", + "11570545", + "11571523", + "11590674", + "11591775", + "11594541", + "11596898", + "11598540", + "11608942", + "11609422", + "11615055", + "11615549", + "11619030", + "11623814", + "11626773", + "11627464", + "11635419", + "11636323", + "11636481", + "11638437", + "11642411", + "11643393", + "11644349", + "11645405", + "11650277", + "11652557", + "11654024", + "11654707", + "11656384", + "11660145", + "11660632", + "11667300", + "11667997", + "11670842", + "11673056", + "11688440", + "11688586", + "11693171", + "11698552", + "11701883", + "11701991", + "11703980", + "11706893", + "11713256", + "11713970", + "11714235", + "11716362", + "11717028", + "11720834", + "11725043", + "11725616", + "11726907", + "11728049", + "11728240", + "11729388", + "11729494", + "11730078", + "11731502", + "11736162", + "11737872", + "11738734", + "11749278", + "11753804", + "11754954", + "11756119", + "11758730", + "11760688", + "11763567", + "11776315", + "11780161", + "11794114", + "11797637", + "11807833", + "11812181", + "11819666", + "11826016", + "11832697", + "11834445", + "11840028", + "11840957", + "11841763", + "11846897", + "11854390", + "11856219", + "11858666", + "11860016", + "11860565", + "11871044", + "11871190", + "11873825", + "11874998", + "11887065", + "11891668", + "11892494", + "11900897", + "11905965", + "11906255", + "11907485", + "11907754", + "11909090", + "11919216", + "11922580", + "11923027", + "11950325", + "11954157", + "11962292", + "11967675", + "11976273", + "11992983", + "12006709", + "12010643", + "12018158", + "12022449", + "12031071", + "12037602", + "12046692", + "12057008", + "12060941", + "12066849", + "12087490", + "12089608", + "12103087", + "12106417", + "12106975", + "12116722", + "12126779", + "12135372", + "12151997", + "12160125", + "12170988", + "12171068", + "12171522", + "12173621", + "12174634", + "12175154", + "12176367", + "12176559", + "12180031", + "12180041", + "12181811", + "12183285", + "12185456", + "12185656", + "12188086", + "12191141", + "12194283", + "12195040", + "12197284", + "12198522", + "12203022", + "12206386", + "12206694", + "12208168", + "12208733", + "12209759", + "12211009", + "12212066", + "12214821", + "12214993", + "12216332", + "12217030", + "12219036", + "12219250", + "12222885", + "12223105", + "12223349", + "12226416", + "12229237", + "12229400", + "12229940", + "12231152", + "12231344", + "12231385", + "12233602", + "12233808", + "12233838", + "12234544", + "12234977", + "12235234", + "12236627", + "12239491", + "12242422", + "12247340", + "12247359", + "12249986", + "12250854", + "12251247", + "12252340", + "12252926", + "12253343", + "12253844", + "12257250", + "12257418", + "12258146", + "12258652", + "12258984", + "12262562", + "12263736", + "12265590", + "12266659", + "12276630", + "12286003", + "12301192", + "12322536", + "12335869", + "12353663", + "12357826", + "12358748", + "1730519", + "1730543", + "1730948", + "1730978", + "1731097", + "1731221", + "1731263", + "1731292", + "1731598", + "1731750", + "1731811", + "1731812", + "1731826", + "1731837", + "1731860", + "1731862", + "1731886", + "1731890", + "1731906", + "1731923", + "1731926", + "1731927", + "1732001", + "1732005", + "1732031", + "1732052", + "1732063", + "1732087", + "1732114", + "1732115", + "1732416", + "1732419", + "1732452", + "1732457", + "1732508", + "1732521", + "1732525", + "1732565", + "1732660", + "1732662", + "1732680", + "1732685", + "1732697", + "1732717", + "1732763", + "1732830", + "1732842", + "1732901", + "1732978", + "1733154", + "1733155", + "1733243", + "1733258", + "1733394", + "1733484", + "1733504", + "1733511", + "1733525", + "1733535", + "1733620", + "1733755", + "1734384", + "1734453", + "1734519", + "1734690", + "1734704", + "1734794", + "1734826", + "1734851", + "1735168", + "1735273", + "1735391", + "1735398", + "1735408", + "1735532", + "1735844", + "1735855", + "1736271", + "1736315", + "1736358", + "1736377", + "1736390", + "1736412", + "1736425", + "1736447", + "1736484", + "1736499", + "1736511", + "1736528", + "1736560", + "1736565", + "1736601", + "1736623", + "1736727", + "1736760", + "1736800", + "1736803", + "1736809", + "1736811", + "1736821", + "1736826", + "1736836", + "1736860", + "1736898", + "1736904", + "1736905", + "1736906", + "1736915", + "1736918", + "1736937", + "1736939", + "1736945", + "1736993", + "1736995", + "1737015", + "1737072", + "1737115", + "1737131", + "1737182", + "1737187", + "1737231", + "1737342", + "1737368", + "1737374", + "1737403", + "1737413", + "1737417", + "1737437", + "1737491", + "1737497", + "1737509", + "1737524", + "1737526", + "1737533", + "1737542", + "1737544", + "1737551", + "1737552", + "1737650", + "1737753", + "1737775", + "1737776", + "1737847", + "1737893", + "1737904", + "1737924", + "1737929", + "1737964", + "1737973", + "1737978", + "1738045", + "1738050", + "1738081", + "1738163", + "1738196", + "1738218", + "1738222", + "1738245", + "1738317", + "1738337", + "1738422", + "1738429", + "1738514", + "1738687", + "1738700", + "1738722", + "1738777", + "1738794", + "1738839", + "1738883", + "1738888", + "1739034", + "1739042", + "1739051", + "1739151", + "1739220", + "1739272", + "1739284", + "1739290", + "1739337", + "1739377", + "1739381", + "1739400", + "1739461", + "1739553", + "1739567", + "1739605", + "1739612", + "1739617", + "1739629", + "1739646", + "1739656", + "1739668", + "1739727", + "1739748", + "1739767", + "1739797", + "1739819", + "1739833", + "1739867", + "1739884", + "1739919", + "1739922", + "1739924", + "1739927", + "1739931", + "1739956", + "1739964", + "1739973", + "1739980", + "1739983", + "1739999", + "1740003", + "1740005", + "1740037", + "1740053", + "1740060", + "1740069", + "1740116", + "1740120", + "1740133", + "1740148", + "1740155", + "1740163", + "1740174", + "1740183", + "1740185", + "1740225", + "1740246", + "1740305", + "1740370", + "1740374", + "1740389", + "1740392", + "1740400", + "1740449", + "1740469", + "1740482", + "1740518", + "1740524", + "1740533", + "1740567", + "1740570", + "1740623", + "1740797", + "1740828", + "1741056", + "1741074", + "1741084", + "1741130", + "1741131", + "1741147", + "1741258", + "1741324", + "1741340", + "1741341", + "1741361", + "1741368", + "1741398", + "1741400", + "1741545", + "1741551", + "1741590", + "1741593", + "1741615", + "1741633", + "1741634", + "1741667", + "1741719", + "1741747", + "1741752", + "1741756", + "1741765", + "1741812", + "1741818", + "1741820", + "1741823", + "1741824", + "1741826", + "1742081", + "1742091", + "1742121", + "1742142", + "1742150", + "1742168", + "1742178", + "1742185", + "1742198", + "1742214", + "1742241", + "1742260", + "1742263", + "1742268", + "1742272", + "1742273", + "1742287", + "1742293", + "1742304", + "1742310", + "1742335", + "1742346", + "1742402", + "1743184", + "1743196", + "1743319", + "1743461", + "1743475", + "1743532", + "1743588", + "1743604", + "1743651", + "1743653", + "1743658", + "1743663", + "1743680", + "1743710", + "1743714", + "1743768", + "1743775", + "1743782", + "1743825", + "1743828", + "1743838", + "1743855", + "1743856", + "1743862", + "1743867", + "1743898", + "1743998", + "1744071", + "1744130", + "1744136", + "1744180", + "1744212", + "1744224", + "1744416", + "1744498", + "1744526", + "1744542", + "1744588", + "1744593", + "1744700", + "1744709", + "1744714", + "1744724", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744763", + "1744782", + "1744789", + "1744808", + "1744810", + "1744860", + "1744896", + "1744949", + "1744953", + "1744998", + "1745019", + "1745022", + "1745079", + "1745307", + "1745558", + "1745561", + "1745579", + "1745600", + "1745606", + "1745630", + "1745634", + "1745636", + "1745643", + "1745659", + "1745666", + "1745669", + "1745676", + "1745678", + "1745705", + "1745724", + "1745729", + "1745737", + "1745746", + "1745756", + "1745762", + "1745771", + "1745781", + "1745787", + "1745814", + "1745816", + "1745827", + "1745830", + "1745895", + "1745925", + "1745952", + "1745957", + "1746027", + "1746174", + "1746327", + "1746413", + "1746440", + "1746462", + "1746512", + "1746586", + "1746613", + "1746644", + "1746666", + "1746689", + "1746695", + "1746714", + "1746751", + "1746754", + "1746763", + "1746774", + "1746775", + "1746831", + "1746832", + "1746856", + "1746876", + "1746881", + "1746898", + "1746910", + "1746927", + "1746949", + "1747024", + "1747050", + "1747068", + "1747141", + "1747147", + "1747150", + "1747160", + "1747161", + "1747163", + "1747166", + "1747171", + "1747189", + "1747196", + "1747215", + "1747222", + "1747523", + "1747639", + "1747738", + "1747740", + "1747814", + "1747924", + "1748103", + "1748148", + "1748149", + "1748151", + "1748152", + "1748203", + "1748321", + "1748425", + "1748442", + "1748456", + "1748473", + "1748486", + "1748518", + "1748648", + "1748661", + "1748751", + "1748780", + "1748805", + "1748890", + "1748922", + "1748942", + "1749050", + "1749070", + "1749124", + "1749164", + "1749287", + "1749449", + "1749531", + "1749591", + "1749596", + "1749635", + "1749664", + "1749713", + "1749744", + "1749869", + "1749908", + "1749929", + "1749936", + "1749948", + "1749975", + "1750076", + "1750131", + "1750143", + "1750166", + "1750326", + "1750934", + "1751051", + "1751163", + "1751207", + "1751216", + "1751236", + "1751298", + "1751299", + "1751368", + "1751400", + "1751457", + "1751497", + "1751557", + "1751572", + "1751575", + "1751588", + "1751625", + "1751670", + "1751684", + "1751690", + "1751852", + "1751980", + "1751986", + "1752034", + "1752109", + "1752111", + "1752161", + "1752281", + "1752285", + "1752286", + "1752327", + "1752373", + "1752383", + "1752492", + "1752494", + "1752536", + "1752537", + "1752539", + "1752545", + "1752547", + "1752603", + "1752651", + "1752749", + "1752758", + "1752775", + "1752805", + "1752825", + "1752832", + "1752849", + "1752894", + "1752903", + "1752923", + "1752947", + "1753081", + "1753105", + "1753106", + "1753111", + "1753215", + "1753461", + "1753603", + "1753604", + "1753636", + "1753668", + "1753759", + "1753871", + "1753902", + "1753906", + "1753922", + "1753929", + "1754135", + "1754183", + "1754263", + "1754270", + "1754332", + "1754368", + "1754380", + "1754400", + "1754511", + "1754516", + "1754535", + "1754806", + "1754814", + "1754902", + "1754919", + "1754933", + "1755237", + "1755248", + "1755253", + "1755276", + "1757652", + "1757839", + "1757853", + "1758003", + "1758114", + "1758146", + "1758441", + "1758461", + "1758596", + "1758602", + "1758613", + "1758625", + "1758727", + "1758767", + "1758771", + "1758781", + "1758783", + "1758850", + "1758860", + "1758861", + "1758866", + "1758878", + "1758879", + "1758898", + "1758906", + "1758916", + "1759037", + "1759040", + "1759041", + "1759055", + "1759069", + "1759079", + "1759083", + "1759092", + "1759153", + "1759159", + "1759338", + "1759351", + "1759394", + "1759407", + "1759553", + "1759573", + "1759585", + "1759597", + "1759605", + "1759610", + "1759611", + "1759620", + "1759621", + "1759624", + "1759631", + "1759632", + "1759633", + "1759634", + "1759661", + "1759667", + "1759668", + "1759671", + "1759673", + "1759677", + "1759678", + "1759686", + "1759688", + "1759691", + "1759694", + "1759719", + "1759775", + "1759799", + "1759881", + "1760104", + "1760172", + "1760173", + "1760175", + "1760201", + "1760233", + "1760244", + "1760246", + "1760257", + "1760261", + "1760309", + "1760361", + "1760385", + "1760396", + "1760397", + "1760398", + "1760400", + "1760454", + "1760455", + "1760593", + "1760620", + "1760682", + "1760857", + "1760867", + "1760887", + "1760891", + "1760893", + "1760927", + "1760939", + "1761041", + "1761102", + "1761110", + "1761111", + "1761143", + "1761213", + "1761353", + "1761392", + "1761438", + "1761439", + "1761498", + "1761553", + "1761563", + "1761572", + "1761573", + "1761735", + "1761751", + "1761752", + "1761778", + "1761788", + "1761798", + "1761820", + "1761838", + "1761865", + "1761892", + "1762151", + "1762219", + "1762226", + "1762244", + "1762271", + "1762286", + "1762383", + "1762474", + "1762608", + "1762609", + "1762615", + "1762657", + "1762680", + "1762849", + "1762852", + "1762887", + "1762900", + "1762902", + "1763072", + "1763163", + "1763184", + "1763199", + "1763223", + "1763589", + "1763610", + "1763650", + "1763697", + "1763727", + "1763761", + "1763782", + "1763976", + "1764021", + "1764043", + "1764060", + "1764174", + "1764178", + "1764238", + "1764525", + "1764531", + "1764553", + "1764640", + "1764673", + "1764691", + "1764693", + "1764791", + "1764880", + "1764886", + "1764917", + "1764929", + "1764986", + "1764987", + "1765010", + "1765011", + "1765017", + "1765044", + "1765069", + "1765073", + "1765097", + "1765172", + "1765182", + "1765604", + "1765653", + "1765658", + "1765733", + "1765751", + "1765752", + "1765767", + "1765779", + "1765798", + "1765863", + "1765954", + "1765962", + "1765996", + "1765999", + "1766007", + "1766072", + "1766086", + "1766128", + "1766130", + "1766131", + "1766137", + "1766193", + "1766205", + "1766210", + "1766237", + "1766260", + "1766274", + "1766285", + "1766287", + "1766392", + "1766410", + "1766418", + "1766509", + "1766510", + "1766558", + "1766560", + "1766570", + "1766584", + "1766601", + "1766612", + "1766618", + "1766646", + "1766650", + "1766721", + "1766741", + "1766773", + "1766814", + "1766839", + "1766845", + "1766888", + "1766892", + "1766910", + "1766919", + "1766921", + "1767031", + "1767044", + "1767052", + "1767140", + "1767142", + "1767215", + "1767293", + "1767302", + "1767307", + "1767320", + "1767338", + "1767347", + "1767368", + "1767381", + "1767393", + "1767430", + "1767484", + "1767499", + "1767508", + "1767511", + "1767571", + "1767579", + "1767584", + "1767597", + "1767602", + "1767608", + "1767612", + "1767625", + "1767655", + "1767674", + "1767719", + "1767755", + "1767780", + "1767883", + "1768042", + "1768048", + "1768117", + "1768132", + "1768150", + "1768172", + "1768174", + "1768190", + "1768196", + "1768199", + "1768283", + "1768341", + "1768440", + "1768461", + "1768462", + "1768546", + "1768557", + "1768560", + "1768568", + "1768626", + "1768630", + "1768698", + "1768702", + "1768727", + "1768729", + "1768749", + "1768771", + "1768815", + "1768819", + "1768898", + "1768972", + "1769000", + "1769029", + "1769057", + "1769103", + "1769114", + "1769168", + "1769194", + "1769209", + "1769225", + "1769250", + "1769260", + "1769271", + "1769272", + "1769293", + "1769294", + "1769310", + "1769336", + "1769410", + "1769425", + "1769465", + "1769505", + "1769519", + "1769543", + "1769566", + "1769592", + "1769737", + "1769739", + "1769772", + "1769814", + "1769823", + "1769827", + "1769841", + "1769852", + "1769897", + "1769901", + "1769934", + "1769944", + "1769947", + "1769958", + "1769978", + "1770038", + "1770044", + "1770132", + "1770144", + "1770150", + "1770172", + "1770307", + "1770353", + "1770380", + "1770383", + "1770384", + "1770385", + "1770416", + "1770461", + "1770477", + "1770530", + "1770659", + "1770772", + "1770773", + "1770821", + "1770828", + "1770849", + "1770869", + "1770880", + "1770918", + "1770955", + "1771019", + "1771040", + "1771055", + "1771067", + "1771143", + "1771203", + "1771204", + "1771214", + "1771245", + "1771296", + "1771308", + "1771357", + "1771385", + "1771391", + "1771441", + "1771455", + "1771509", + "1771531", + "1771555", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1771779", + "1771846", + "1771848", + "1771859", + "1771872", + "1771903", + "1771977", + "1771997", + "1772013", + "1772043", + "1772094", + "1772169", + "1772179", + "1772255", + "1772260", + "1772352", + "1772374", + "1772422", + "1772427", + "1772428", + "1772447", + "1772462", + "1772543", + "1772668", + "1772716", + "1772793", + "1772822", + "1772940", + "1772956", + "1772977", + "1773002", + "1773062", + "1773069", + "1773081", + "1773163", + "1773248", + "1773309", + "1773313", + "1773328", + "1773484", + "1773572", + "1773577", + "1773662", + "1773677", + "1773728", + "1773742", + "1773744", + "1773746", + "1773783", + "1773901", + "1773904", + "1774092", + "1774095", + "1774243", + "1774253", + "1774262", + "1774268", + "1774283", + "1774285", + "1774314", + "1774347", + "1774358", + "1774470", + "1774575", + "1774576", + "1774583", + "1774598", + "1774600", + "1774604", + "1774618", + "1774626", + "1774635", + "1774640", + "1774654", + "1774661", + "1774682", + "1774691", + "1774702", + "1774712", + "1774792", + "1774797", + "1774859", + "1774873", + "1774878", + "1774907", + "1774918", + "1774929", + "1774959", + "1774997", + "1775046", + "1775055", + "1775089", + "1775112", + "1775118", + "1775148", + "1775172", + "1775290", + "1775291", + "1775301", + "1775329", + "1775508", + "1775509", + "1775631", + "1775672", + "1775680", + "1775796", + "1775866", + "1775891", + "1775913", + "1775962", + "1775963", + "1775970", + "1775980", + "1776067", + "1776094", + "1776167", + "1776182", + "1776207", + "1776265", + "1776268", + "1776330", + "1776371", + "1776397", + "1776459", + "1776462", + "1776467", + "1776470", + "1776472", + "1776473", + "1776476", + "1776618", + "1776619", + "1776861", + "1776862", + "1776871", + "1777024", + "1777034", + "1777052", + "1777075", + "1777120", + "1777165", + "1777166", + "1777179", + "1777253", + "1777261", + "1777289", + "1777463", + "1777471", + "1777517", + "1777631", + "1777727", + "1777728", + "1777730", + "1777737", + "1777942", + "1777974", + "1777976", + "1777980", + "1777982", + "1777994", + "1777996", + "1778000", + "1778006", + "1778007", + "1778013", + "1778015", + "1778024", + "1778031", + "1778033", + "1778034", + "1778037", + "1778045", + "1778049", + "1778074", + "1778109", + "1778127", + "1778143", + "1778337", + "1778430", + "1778517", + "1778534", + "1778548", + "1778551", + "1778555", + "1778596", + "1778688", + "1779258", + "1779269", + "1779276", + "1779334", + "1779399", + "1779430", + "1779435", + "1779456", + "1779633", + "1779641", + "1779643", + "1779671", + "1779690", + "1779740", + "1779959", + "1780049", + "1780072", + "1780149", + "1780150", + "1780209", + "1780213", + "1780214", + "1780215", + "1780272", + "1780309", + "1780313", + "1780326", + "1780330", + "1780344", + "1780378", + "1780390", + "1780414", + "1780437", + "1780440", + "1780450", + "1780617", + "1780646", + "1780668", + "1780705", + "1780716", + "1780852", + "1780856", + "1780857", + "1780860", + "1780862", + "1780897", + "1780926", + "1780928", + "1780954", + "1781008", + "1781016", + "1781029", + "1781234", + "1781350", + "1781413", + "1781420", + "1781421", + "1781446", + "1781473", + "1781503", + "1781531", + "1781598", + "1781694", + "1781803", + "1781819", + "1781841", + "1781944", + "1781946", + "1782031", + "1782115", + "1782177", + "1782185", + "1782208", + "1782214", + "1782249", + "1782267", + "1782273", + "1782277", + "1782279", + "1782289", + "1782310", + "1782319", + "1782326", + "1782328", + "1782354", + "1782422", + "1782424", + "1782457", + "1782466", + "1782507", + "1782523", + "1782542", + "1782543", + "1782560", + "1782579", + "1782585", + "1782595", + "1782615", + "1782622", + "1782627", + "1782645", + "1782672", + "1782682", + "1782689", + "1782700", + "1782705", + "1782706", + "1782707", + "1782709", + "1782726", + "1782727", + "1782743", + "1782744", + "1782745", + "1782747", + "1782762", + "1782763", + "1782776", + "1782777", + "1782803", + "1782808", + "1782809", + "1782822", + "1782833", + "1782837", + "1782840", + "1782841", + "1782853", + "1782870", + "1782871", + "1782878", + "1782921", + "1782927", + "1782928", + "1782934", + "1782948", + "1782961", + "1782972", + "1782978", + "1782993", + "1783002", + "1783008", + "1783013", + "1783016", + "1783035", + "1783037", + "1783043", + "1783045", + "1783055", + "1783059", + "1783090", + "1783173", + "1783302", + "1783313", + "1783371", + "1783376", + "1783378", + "1783652", + "1783713", + "1783725", + "1783777", + "1783811", + "1783841", + "1783842", + "1783855", + "1783882", + "1783906", + "1783940", + "1783971", + "1784281", + "1784282", + "1784349", + "1784359", + "1784422", + "1784461", + "1784513", + "1784582", + "1784610", + "1784646", + "1784688", + "1784761", + "1784812", + "1784826", + "1784853", + "1784893", + "1784936", + "1784959", + "1785024", + "1785072", + "1785105", + "1785145", + "1785149", + "1785162", + "1785166", + "1785168", + "1785181", + "1785185", + "1785220", + "1785280", + "1785286", + "1785314", + "1785329", + "1785331", + "1785361", + "1785367", + "1785399", + "1785403", + "1785725", + "1785728", + "1785730", + "1785732", + "1785733", + "1785744", + "1785832", + "1785875", + "1785886", + "1785887", + "1785888", + "1785895", + "1785913", + "1785916", + "1785951", + "1785955", + "1785992", + "1785997", + "1786007", + "1786017", + "1786035", + "1786036", + "1786190", + "1786217", + "1786219", + "1786247", + "1786308", + "1786317", + "1786360", + "1786455", + "1786565", + "1786566", + "1786567", + "1786573", + "1786597", + "1786619", + "1786651", + "1786658", + "1786664", + "1786711", + "1786733", + "1786808", + "1786902", + "1786912", + "1786913", + "1786936", + "1786958", + "1786980", + "1786984", + "1786985", + "1786990", + "1787003", + "1787009", + "1787010", + "1787064", + "1787072", + "1787079", + "1787090", + "1787106", + "1787112", + "1787165", + "1787213", + "1787226", + "1787267", + "1787279", + "1787381", + "1787400", + "1787417", + "1787438", + "1787504", + "1787506", + "1787590", + "1787610", + "1787631", + "1787697", + "1787751", + "1787770", + "1787825", + "1787859", + "1787905", + "1788034", + "1788037", + "1788045", + "1788063", + "1788070", + "1788139", + "1788278", + "1788372", + "1788425", + "1788485", + "1788522", + "1788553", + "1788635", + "1788673", + "1788677", + "1788679", + "1788680", + "1788681", + "1788711", + "1788717", + "1788720", + "1788734", + "1788813", + "1788846", + "1788856", + "1788881", + "1788891", + "1788917", + "1788953", + "1789057", + "1789071", + "1789073", + "1789076", + "1789086", + "1789155", + "1789191", + "1789193", + "1789212", + "1789225", + "1789250", + "1789255", + "1789267", + "1789403", + "1789481", + "1789498", + "1789505", + "1789512", + "1789553", + "1789580", + "1789604", + "1789637", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789794", + "1789805", + "1789840", + "1789849", + "1789957", + "1789982", + "1789984", + "1790002", + "1790013", + "1790062", + "1790072", + "1790084", + "1790153", + "1790230", + "1790240", + "1790246", + "1790248", + "1790257", + "1790258", + "1790268", + "1790274", + "1790287", + "1790308", + "1790331", + "1790343", + "1790359", + "1790361", + "1790364", + "1790369", + "1790371", + "1790376", + "1790450", + "1790625", + "1790671", + "1790692", + "1790737", + "1790787", + "1790816", + "1790832", + "1790876", + "1790888", + "1790900", + "1790910", + "1790937", + "1790945", + "1791010", + "1791094", + "1791331", + "1791372", + "1791379", + "1791384", + "1791422", + "1791514", + "1791590", + "1791660", + "1791680", + "1791698", + "1791715", + "1791735", + "1791736", + "1791784", + "1791793", + "1791837", + "1791846", + "1791862", + "1792061", + "1792072", + "1792073", + "1792087", + "1792091", + "1792095", + "1792096", + "1792099", + "1792210", + "1792276", + "1792292", + "1792300", + "1792318", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1792430", + "1792431", + "1792442", + "1792449", + "1792456", + "1792465", + "1792475", + "1792478", + "1792485", + "1792497", + "1792517", + "1792555", + "1792560", + "1792564", + "1792645", + "1792695", + "1792768", + "1792817", + "1792827", + "1792831", + "1792996", + "1793189", + "1793192", + "1793243", + "1793246", + "1793368", + "1793369", + "1793419", + "1793453", + "1793455", + "1793515", + "1793533", + "1793538", + "1793542", + "1793613", + "1793631", + "1793635", + "1793646", + "1793661", + "1793689", + "1793699", + "1793877", + "1793983", + "1793986", + "1794102", + "1794273", + "1794351", + "1794361", + "1794425", + "1794507", + "1794510", + "1794518", + "1794532", + "1794590", + "1794609", + "1795042", + "1795045", + "1795049", + "1795065", + "1795068", + "1795074", + "1795110", + "1795215", + "1795282", + "1795483", + "1795542", + "1795657", + "1795788", + "1795802", + "1795812", + "1795854", + "1795862", + "1795871", + "1795896", + "1795900", + "1795930", + "1795946", + "1795957", + "1796007", + "1796032", + "1796035", + "1796040", + "1796100", + "1796117", + "1796139", + "1796145", + "1796169", + "1796180", + "1796181", + "1796188", + "1796217", + "1796257", + "1796274", + "1796310", + "1796312", + "1796338", + "1796423", + "1796451", + "1796463", + "1796523", + "1796678", + "1796791", + "1796842", + "1796941", + "1796958", + "1796984", + "1797039", + "1797111", + "1797121", + "1797122", + "1797135", + "1797137", + "1797146", + "1797178", + "1797194", + "1797198", + "1797206", + "1797210", + "1797218", + "1797252", + "1797257", + "1797258", + "1797275", + "1797276", + "1797285", + "1797290", + "1797296", + "1797300", + "1797333", + "1797339", + "1797349", + "1797365", + "1797367", + "1797373", + "1797374", + "1797375", + "1797394", + "1797409", + "1797429", + "1797432", + "1797433", + "1797436", + "1797440", + "1797445", + "1797454", + "1797464", + "1797475", + "1797479", + "1797488", + "1797507", + "1797521", + "1797527", + "1797542", + "1797556", + "1797587", + "1797592", + "1797593", + "1797595", + "1797601", + "1797727", + "1797735", + "1797793", + "1797903", + "1798014", + "1798018", + "1798023", + "1798025", + "1798060", + "1798084", + "1798090", + "1798101", + "1798288", + "1798329", + "1798335", + "1798346", + "1798371", + "1798372", + "1798375", + "1798393", + "1798402", + "1798408", + "1798427", + "1798449", + "1798481", + "1798488", + "1798504", + "1798511", + "1798529", + "1798580", + "1798594", + "1798687", + "1798794", + "1798802", + "1798807", + "1798823", + "1798863", + "1798868", + "1798916", + "1798922", + "1798931", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799165", + "1799167", + "1799183", + "1799417", + "1799433", + "1799675", + "1799680", + "1799701", + "1799703", + "1799708", + "1799743", + "1799751", + "1799757", + "1799774", + "1799799", + "1799821", + "1799870", + "1799877", + "1799880", + "1799884", + "1799894", + "1799900", + "1799901", + "1799917", + "1799925", + "1799938", + "1799944", + "1799956", + "1799957", + "1799967", + "1800004", + "1800017", + "1800024", + "1800028", + "1800032", + "1800130", + "1800140", + "1800149", + "1800191", + "1800238", + "1800441", + "1800473", + "1800522", + "1800528", + "1800539", + "1800562", + "1800642", + "1800696", + "1800821", + "1800843", + "1800844", + "1800881", + "1800963", + "1801001", + "1801051", + "1801073", + "1801080", + "1801084", + "1801170", + "1801196", + "1801303", + "1801305", + "1801316", + "1801432", + "1801461", + "1801787", + "1801896", + "1801903", + "1801922", + "1801993", + "1802120", + "1802229", + "1802244", + "1802280", + "1802337", + "1802662", + "1802702", + "1802776", + "1802783", + "1802827", + "1802850", + "1802868", + "1802888", + "1802919", + "1802939", + "1802978", + "1802998", + "1803012", + "1803021", + "1803022", + "1803025", + "1803035", + "1803039", + "1803060", + "1803065", + "1803073", + "1803091", + "1803108", + "1803148", + "1803163", + "1803197", + "1803218", + "1803461", + "1803544", + "1803545", + "1803590", + "1803781", + "1803788", + "1803824", + "1804071", + "1804074", + "1804120", + "1804148", + "1804182", + "1804331", + "1804394", + "1804398", + "1804409", + "1804430", + "1804477", + "1804512", + "1804610", + "1804721", + "1804727", + "1804742", + "1804759", + "1804906", + "1804963", + "1804969", + "1804971", + "1804974", + "1805043", + "1805044", + "1805110", + "1805111", + "1805155", + "1805271", + "1805524", + "1805535", + "1805537", + "1805540", + "1805549", + "1805682", + "1805691", + "1805717", + "1805806", + "1805938", + "1805955", + "1805982", + "1806064", + "1806075", + "1806145", + "1806170", + "1806176", + "1806690", + "1806702", + "1806704", + "1806737", + "1806740", + "1806814", + "1806871", + "1806872", + "1806878", + "1806887", + "1806936", + "1807271", + "1807273", + "1807473", + "1807477", + "1807478", + "1807479", + "1807480", + "1807483", + "1807485", + "1807488", + "1807491", + "1807503", + "1807553", + "1807569", + "1807634", + "1807881", + "1807969", + "1808088", + "1808145", + "1808161", + "1808172", + "1808180", + "1808195", + "1808221", + "1808232", + "1808236", + "1808286", + "1808359", + "1808381", + "1808440", + "1808450", + "1808559", + "1808590", + "1808592", + "1808752", + "1809019", + "1809066", + "1809115", + "1809127", + "1809135", + "1809158", + "1809159", + "1809210", + "1809244", + "1809248", + "1809294", + "1809299", + "1809305", + "1809308", + "1809348", + "1809381", + "1809387", + "1809491", + "1809499", + "1809585", + "1809594", + "1810025", + "1810099", + "1810121", + "1810145", + "1810172", + "1810464", + "1810469", + "1810743", + "1810752", + "1810846", + "1810851", + "1810867", + "1811019", + "1811026", + "1811079", + "1811081", + "1811122", + "1811439", + "1811455", + "1811462", + "1811465", + "1811686", + "1811814", + "1811948", + "1812026", + "1812105", + "1812207", + "1812262", + "1812394", + "1812437", + "1812453", + "1812465", + "1812500", + "1812573", + "1812658", + "1812881", + "1813010", + "1813114", + "1813248", + "1813263", + "1813413", + "1813415", + "1813460", + "1813468", + "1814182", + "1814323", + "1814336", + "1814338", + "1814357", + "1814359", + "1814365", + "1814538", + "1814552", + "1814630", + "1814653", + "1814665", + "1814800", + "1814823", + "1814827", + "1814838", + "1814843", + "1814863", + "1814877", + "1814913", + "1814928", + "1814971", + "1815260", + "1815315", + "1815338", + "1815856", + "1816029", + "1816065", + "1816110", + "1816138", + "1816264", + "1816276", + "1816292", + "1816299", + "1816362", + "1816434", + "1816570", + "1816634", + "1816648", + "1816673", + "1816775", + "1816881", + "1817065", + "1817086", + "1817160", + "1817171", + "1817217", + "1817696", + "1817727", + "1817729", + "1817732", + "1817734", + "1817797", + "1817808", + "1817810", + "1817852", + "1817854", + "1817864", + "1817940", + "1817973", + "1818216", + "1818413", + "1818454", + "1818463", + "1818659", + "1818991", + "1819057", + "1819128", + "1819145", + "1819170", + "1819268", + "1819270", + "1819280", + "1819337", + "1819362", + "1819668", + "1819685", + "1819699", + "1819852", + "1819873", + "1819928", + "1819970", + "1820039", + "1820118", + "1820137", + "1820275", + "1820282", + "1820352", + "1820372", + "1820406", + "1820414", + "1820435", + "1820450", + "1820451", + "1820458", + "1820477", + "1820478", + "1820565", + "1820573", + "1820711", + "1820714", + "1820722", + "1820753", + "1820791", + "1820888", + "1820940", + "1821051", + "1821105", + "1821113", + "1821448", + "1821455", + "1821464", + "1821468", + "1821478", + "1821505", + "1821542", + "1821547", + "1821651", + "1821856", + "1821863", + "1821911", + "1821920", + "1821934", + "1821940", + "1822017", + "1822141", + "1822142", + "1822257", + "1822346", + "1822487", + "1822493", + "1822587", + "1822610", + "1822613", + "1822784", + "1822787", + "1822788", + "1822796", + "1822805", + "1822819", + "1822830", + "1822848", + "1822916", + "1822917", + "1823294", + "1823444", + "1823493", + "1823573", + "1823604", + "1823706", + "1823726", + "1824080", + "1824113", + "1824117", + "1824121", + "1824131", + "1824242", + "1824259", + "1824280", + "1824330", + "1824338", + "1824354", + "1824390", + "1824442", + "1824449", + "1824571", + "1824751", + "1824845", + "1825064", + "1825077", + "1825082", + "1825083", + "1825156", + "1825176", + "1825218", + "1825238", + "1825373", + "1825391", + "1825428", + "1825430", + "1825539", + "1825786", + "1825950", + "1825956", + "1825967", + "1825971", + "1825983", + "1826022", + "1826033", + "1826048", + "1826058", + "1826084", + "1826108", + "1826129", + "1826156", + "1826163", + "1826164", + "1826167", + "1826169", + "1826172", + "1826173", + "1826175", + "1826181", + "1826222", + "1826772", + "1827103", + "1827112", + "1827113", + "1827125", + "1827132", + "1827133", + "1827161", + "1827349", + "1827408", + "1827429", + "1827484", + "1827507", + "1827645", + "1827650", + "1827687", + "1827711", + "1827716", + "1827775", + "1827802", + "1827810", + "1827826", + "1827829", + "1828105", + "1828162", + "1828268", + "1828310", + "1828317", + "1828395", + "1828400", + "1828402", + "1828455", + "1828456", + "1828471", + "1828491", + "1828540", + "1828543", + "1828544", + "1828637", + "1828826", + "1828976", + "1829021", + "1829029", + "1829287", + "1829322", + "1829363", + "1829533", + "1829588", + "1829612", + "1829659", + "1829703", + "1829776", + "1829785", + "1829823", + "1829866", + "1829974", + "1830031", + "1830099", + "1830122", + "1830125", + "1830131", + "1830137", + "1830147", + "1830152", + "1830191", + "1830203", + "1830207", + "1830241", + "1830243", + "1830262", + "1830266", + "1830271", + "1830284", + "1830372", + "1830374", + "1830380", + "1830407", + "1830408", + "1830410", + "1830419", + "1830435", + "1830437", + "1830442", + "1830457", + "1830459", + "1830498", + "1830632", + "1830669", + "1830681", + "1830802", + "1830812", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831009", + "1831097", + "1831136", + "1831168", + "1831458", + "1831473", + "1831499", + "1831508", + "1831565", + "1831631", + "1831643", + "1831667", + "1831752", + "1831775", + "1831780", + "1831861", + "1831999", + "1832235", + "1832254", + "1832518", + "1832533", + "1832553", + "1832569", + "1832612", + "1832649", + "1832853", + "1832915", + "1832927", + "1833475", + "1833477", + "1833497", + "1833499", + "1833500", + "1833518", + "1833523", + "1833525", + "1833531", + "1833539", + "1833562", + "1833600", + "1833626", + "1833627", + "1833653", + "1833782", + "1833794", + "1834078", + "1834428", + "1834497", + "1834524", + "1834547", + "1834589", + "1834710", + "1834793", + "1834850", + "1834980", + "1835031", + "1835082", + "1835086", + "1835121", + "1835128", + "1835156", + "1835348", + "1835393", + "1835396", + "1835407", + "1835430", + "1835432", + "1835433", + "1835436", + "1835438", + "1835449", + "1835451", + "1835456", + "1835457", + "1835467", + "1835500", + "1835555", + "1835609", + "1835612", + "1835790", + "1835814", + "1835819", + "1835821", + "1835848", + "1835862", + "1835908", + "1835928", + "1836871", + "1836899", + "1836906", + "1836907", + "1837053", + "1837159", + "1837172", + "1837343", + "1837420", + "1837429", + "1837464", + "1837515", + "1837569", + "1837646", + "1837706", + "1837724", + "1837726", + "1837727", + "1837857", + "1837870", + "1837894", + "1837900", + "1837968", + "1838058", + "1838065", + "1838071", + "1838084", + "1838224", + "1838251", + "1838255", + "1838276", + "1838289", + "1838297", + "1838304", + "1838308", + "1838331", + "1838333", + "1838360", + "1838465", + "1838512", + "1838584", + "1838626", + "1838633", + "1838635", + "1838641", + "1838649", + "1838691", + "1838811", + "1838838", + "1838905", + "1838911", + "1838958", + "1838960", + "1838969", + "1839094", + "1839293", + "1839296", + "1839317", + "1839323", + "1839325", + "1839333", + "1839396", + "1839560", + "1839604", + "1839625", + "1839658", + "1839714", + "1839721", + "1839851", + "1839878", + "1839893", + "1840260", + "1840297", + "1840301", + "1840311", + "1840345", + "1840346", + "1840360", + "1840371", + "1840379", + "1840380", + "1840408", + "1840441", + "1840448", + "1840478", + "1840483", + "1840520", + "1840543", + "1840553", + "1840555", + "1840566", + "1840570", + "1840581", + "1840592", + "1840596", + "1840656", + "1840726", + "1840774", + "1840776", + "1840812", + "1840844", + "1841081", + "1841084", + "1841091", + "1841158", + "1841159", + "1841183", + "1841188", + "1841219", + "1841221", + "1841261", + "1841296", + "1841302", + "1841460", + "1841476", + "1841616", + "1841706", + "1841782", + "1841813", + "1841946", + "1842097", + "1842124", + "1842196", + "1842446", + "1842485", + "1842542", + "1842690", + "1842695", + "1843313", + "1843326", + "1843331", + "1843370", + "1843444", + "1843485", + "1843564", + "1843602", + "1845270", + "1845271", + "1845314", + "1845329", + "1845335", + "1845368", + "1845385", + "1845442", + "1845448", + "1845455", + "1845502", + "1845503", + "1845513", + "1845547", + "1845565", + "1845574", + "1845586", + "1845604", + "1845605", + "1845607", + "1845616", + "1845793", + "1845866", + "1845952", + "1845962", + "1845965", + "1845982", + "1846035", + "1846052", + "1846099", + "1846103", + "1846107", + "1846111", + "1846112", + "1846133", + "1846141", + "1846149", + "1846159", + "1846190", + "1846219", + "1846229", + "1846236", + "1846259", + "1846261", + "1846313", + "1846351", + "1846374", + "1846439", + "1846505", + "1846604", + "1846657", + "1846715", + "1846729", + "1846849", + "1846858", + "1846860", + "1846916", + "1846941", + "1846945", + "1846971", + "1846992", + "1847059", + "1847061", + "1847064", + "1847066", + "1847068", + "1847097", + "1847111", + "1847149", + "1847157", + "1847249", + "1847260", + "1847274", + "1847308", + "1847343", + "1847392", + "1847407", + "1847426", + "1847484", + "1847498", + "1847572", + "1847639", + "1847641", + "1847919", + "1847930", + "1847944", + "1847956", + "1848114", + "1848150", + "1848202", + "1848212", + "1848219", + "1848272", + "1848273", + "1848274", + "1848295", + "1848312", + "1848322", + "1848325", + "1848356", + "1848378", + "1848426", + "1848490", + "1848596", + "1848610", + "1848636", + "1848639", + "1848669", + "1848690", + "1848713", + "1848714", + "1848717", + "1848730", + "1848741", + "1848864", + "1848868", + "1848920", + "1849007", + "1849010", + "1849104", + "1849267", + "1849273", + "1849284", + "1849294", + "1849457", + "1849470", + "1849477", + "1849630", + "1849656", + "1849856", + "1849897", + "1849924", + "1850008", + "1850042", + "1850076", + "1850106", + "1850156", + "1850184", + "1850225", + "1850238", + "1850246", + "1850279", + "1850321", + "1850335", + "1850386", + "1850394", + "1850450", + "1850463", + "1850497", + "1850506", + "1850522", + "1850533", + "1850538", + "1850570", + "1850575", + "1850585", + "1850597", + "1850640", + "1850673", + "1850690", + "1850722", + "1850729", + "1850764", + "1850771", + "1850773", + "1850774", + "1850781", + "1850798", + "1850868", + "1850908", + "1850922", + "1850923", + "1851000", + "1851002", + "1851010", + "1851011", + "1851039", + "1851203", + "1851213", + "1851220", + "1851237", + "1851243", + "1851300", + "1851337", + "1851347", + "1851453", + "1851462", + "1851543", + "1851555", + "1851670", + "1851714", + "1851845", + "1852150", + "1852159", + "1852165", + "1852177", + "1852320", + "1852382", + "1852430", + "1852751", + "1852787", + "1852831", + "1852832", + "1852901", + "1852956", + "1853064", + "1853190", + "1853242", + "1853312", + "1853578", + "1854019", + "1854021", + "1854143", + "1854202", + "1854237", + "1854249", + "1854259", + "1854287", + "1854347", + "1854615", + "1854792", + "1854824", + "1854849", + "1854906", + "1854920", + "1855241", + "1855358", + "1855452", + "1855630", + "1855747", + "1855799", + "1855804", + "1855807", + "1855813", + "1856005", + "1856105", + "1856289", + "1856348", + "1856368", + "1856384", + "1856394", + "1856503", + "1856516", + "1856555", + "1856581", + "1856595", + "1856620", + "1856663", + "1856668", + "1856691", + "1856701", + "1856730", + "1856768", + "1856772", + "1856867", + "1856891", + "1856893", + "1857020", + "1857143", + "1857180", + "1857213", + "1857233", + "1857258", + "1857295", + "1857315", + "1857385", + "1857410", + "1857577", + "1857581", + "1857626", + "1857690", + "1857785", + "1857809", + "1857828", + "1857829", + "1857840", + "1857856", + "1857863", + "1857878", + "1857882", + "1857900", + "1857918", + "1857924", + "1857935", + "1857938", + "1857948", + "1857973", + "1857978", + "1858074", + "1858100", + "1858113", + "1858163", + "1858283", + "1858404", + "1858411", + "1858523", + "1858526", + "1858531", + "1858557", + "1858615", + "1858637", + "1858659", + "1858660", + "1858674", + "1858698", + "1858706", + "1858718", + "1858762", + "1858775", + "1858778", + "1858873", + "1858930", + "1859046", + "1859061", + "1859100", + "1859161", + "1859177", + "1859285", + "1859287", + "1859305", + "1859453", + "1859471", + "1859480", + "1859488", + "1859534", + "1859932", + "1859952", + "1860026", + "1860063", + "1860108", + "1860118", + "1860184", + "1860259", + "1860261", + "1860274", + "1860408", + "1860443", + "1860621", + "1860628", + "1860659", + "1860664", + "1860668", + "1860671", + "1860688", + "1860711", + "1860736", + "1860765", + "1860768", + "1860857", + "1860974", + "1860979", + "1860983", + "1860987", + "1860989", + "1860993", + "1860994", + "1860996", + "1861011", + "1861030", + "1861031", + "1861395", + "1861433", + "1861451", + "1861456", + "1861457", + "1861458", + "1861479", + "1861488", + "1861494", + "1861510", + "1861544", + "1861559", + "1861584", + "1861592", + "1861604", + "1861644", + "1861663", + "1861665", + "1861673", + "1861697", + "1861705", + "1861714", + "1861721", + "1861759", + "1861773", + "1861783", + "1861784", + "1861797", + "1861823", + "1861834", + "1861836", + "1861851", + "1861862", + "1861887", + "1861892", + "1861893", + "1861933", + "1861937", + "1861938", + "1861949", + "1861951", + "1861953", + "1861958", + "1861967", + "1861975", + "1862008", + "1862026", + "1862033", + "1862044", + "1862046", + "1862047", + "1862049", + "1862066", + "1862078", + "1862083", + "1862087", + "1862088", + "1862091", + "1862094", + "1862096", + "1862123", + "1862129", + "1862163", + "1862181", + "1862198", + "1862293", + "1862311", + "1862331", + "1862363", + "1862370", + "1862394", + "1862401", + "1862403", + "1862414", + "1862430", + "1862433", + "1862434", + "1862441", + "1862449", + "1862454", + "1862468", + "1862475", + "1862481", + "1862516", + "1862517", + "1862521", + "1862526", + "1862547", + "1862551", + "1862569", + "1862572", + "1862578", + "1862580", + "1862595", + "1862624", + "1862658", + "1862692", + "1862701", + "1862719", + "1862757", + "1862765", + "1862774", + "1862805", + "1862837", + "1862841", + "1862894", + "1862916", + "1862917", + "1862923", + "1862928", + "1863021", + "1863025", + "1863034", + "1863051", + "1863075", + "1863080", + "1863088", + "1863109", + "1863143", + "1863282", + "1863354", + "1863366", + "1863405", + "1863407", + "1863412", + "1863416", + "1863426", + "1863467", + "1863584", + "1863640", + "1863646", + "1863699", + "1863701", + "1863706", + "1863714", + "1863724", + "1863732", + "1863734", + "1863735", + "1863742", + "1863757", + "1863829", + "1863848", + "1863856", + "1863858", + "1863864", + "1863880", + "1863944", + "1863955", + "1863978", + "1863982", + "1864004", + "1864008", + "1864021", + "1864058", + "1864070", + "1864090", + "1864103", + "1864106", + "1864126", + "1864135", + "1864156", + "1864161", + "1864164", + "1864204", + "1864316", + "1864320", + "1864321", + "1864329", + "1864352", + "1864358", + "1864377", + "1864576", + "1864652", + "1864793", + "1864796", + "1864897", + "1864905", + "1865102", + "1865107", + "1865108", + "1865120", + "1865132", + "1865295", + "1865299", + "1865319", + "1865328", + "1865333", + "1865341", + "1865345", + "1865347", + "1865353", + "1865555", + "1865571", + "1865572", + "1865578", + "1865590", + "1865650", + "1865659", + "1865660", + "1865666", + "1865668", + "1865671", + "1865709", + "1865764", + "1865827", + "1865837", + "1865839", + "1865842", + "1865853", + "1865856", + "1865862", + "1865869", + "1865930", + "1866006", + "1866085", + "1866105", + "1866123", + "1866162", + "1866164", + "1866214", + "1866237", + "1866249", + "1866252", + "1866262", + "1866311", + "1866330", + "1866336", + "1866338", + "1866341", + "1866356", + "1866421", + "1866491", + "1866549", + "1866550", + "1866556", + "1866568", + "1866570", + "1866573", + "1866601", + "1866838", + "1866902", + "1867009", + "1867014", + "1867021", + "1867022", + "1867029", + "1867032", + "1867037", + "1867218", + "1867224", + "1867295", + "1867312", + "1867426", + "1867515", + "1867525", + "1867535", + "1867552", + "1867673", + "1867722", + "1867751", + "1867773", + "1867788", + "1867820", + "1867928", + "1867991", + "1867993", + "1868014", + "1868025", + "1868060", + "1868211", + "1868334", + "1868360", + "1868409", + "1868428", + "1868470", + "1868499", + "1868527", + "1868535", + "1868837", + "1868884", + "1868952", + "1869043", + "1869057", + "1869178", + "1869238", + "1869359", + "1869363", + "1869478", + "1869489", + "1869512", + "1869595", + "1869656", + "1869666", + "1869706", + "1869707", + "1869714", + "1869803", + "1869825", + "1869852", + "1869976", + "1870037", + "1870202", + "1870237", + "1870249", + "1870250", + "1870267", + "1870308", + "1870415", + "1870426", + "1870450", + "1870452", + "1870459", + "1870506", + "1870509", + "1870703", + "1870721", + "1870727", + "1870733", + "1870751", + "1870777", + "1870988", + "1871175", + "1871212", + "1871217", + "1871252", + "1871379", + "1871407", + "1871414", + "1871419", + "1871451", + "1871457", + "1871504", + "1871597", + "1871630", + "1871683", + "1871698", + "1871754", + "1871763", + "1871783", + "1871826", + "1871890", + "1871923", + "1871940", + "1871988", + "1872169", + "1872210", + "1872255", + "1872315", + "1872359", + "1872361", + "1872368", + "1872452", + "1872456", + "1872466", + "1872470", + "1872514", + "1872515", + "1872735", + "1872848", + "1872850", + "1872873", + "1872901", + "1873048", + "1873051", + "1873079", + "1873215", + "1873267", + "1873285", + "1873290", + "1873291", + "1873319", + "1873373", + "1873376", + "1873381", + "1873384", + "1873398", + "1873411", + "1873417", + "1873585", + "1873620", + "1873697", + "1873753", + "1873773", + "1873776", + "1873780", + "1873783", + "1873843", + "1874146", + "1874158", + "1874160", + "1874168", + "1874179", + "1874192", + "1874204", + "1874211", + "1874229", + "1874248", + "1874257", + "1874269", + "1874274", + "1874280", + "1874317", + "1874375", + "1874552", + "1874743", + "1874937", + "1875008", + "1875120", + "1875319", + "1875327", + "1875407", + "1875409", + "1875451", + "1875478", + "1875483", + "1875485", + "1875534", + "1875554", + "1875584", + "1875606", + "1875607", + "1875631", + "1875633", + "1875682", + "1875687", + "1875827", + "1875844", + "1875865", + "1875869", + "1875885", + "1875914", + "1875918", + "1875958", + "1876168", + "1876329", + "1876409", + "1876479", + "1876512", + "1876542", + "1876548", + "1876549", + "1876592", + "1876623", + "1876665", + "1876854", + "1876922", + "1876955", + "1876987", + "1877002", + "1877038", + "1877282", + "1877310", + "1877321", + "1877338", + "1877341", + "1877345", + "1877353", + "1877364", + "1877365", + "1877368", + "1877372", + "1877406", + "1877443", + "1877453", + "1877492", + "1877498", + "1877537", + "1877788", + "1877940", + "1877941", + "1877975", + "1877986", + "1877988", + "1877995", + "1878067", + "1878158", + "1878173", + "1878197", + "1878350", + "1878370", + "1878392", + "1878406", + "1878470", + "1878471", + "1878490", + "1878500", + "1878586", + "1878626", + "1878656", + "1878705", + "1878744", + "1878751", + "1878753", + "1878782", + "1878789", + "1878804", + "1878810", + "1878826", + "1878837", + "1878862", + "1878879", + "1878895", + "1878904", + "1878907", + "1878937", + "1878939", + "1878951", + "1878958", + "1879001", + "1879125", + "1879141", + "1879227", + "1879252", + "1879253", + "1879272", + "1879274", + "1879339", + "1879340", + "1879379", + "1879398", + "1879405", + "1879408", + "1879413", + "1879443", + "1879452", + "1879465", + "1879471", + "1879490", + "1879534", + "1879630", + "1879655", + "1879691", + "1879703", + "1879731", + "1879735", + "1879765", + "1879939", + "1879970", + "1879975", + "1880011", + "1880013", + "1880019", + "1880025", + "1880040", + "1880044", + "1880049", + "1880064", + "1880078", + "1880083", + "1880094", + "1880104", + "1880123", + "1880132", + "1880133", + "1880138", + "1880139", + "1880140", + "1880143", + "1880156", + "1880286", + "1880305", + "1880310", + "1880316", + "1880318", + "1880321", + "1880350", + "1880352", + "1880353", + "1880379", + "1880381", + "1880408", + "1880411", + "1880439", + "1880451", + "1880464", + "1880465", + "1880505", + "1880537", + "1880623", + "1880852", + "1880858", + "1880865", + "1880907", + "1880931", + "1880968", + "1880982", + "1881018", + "1881019", + "1881031", + "1881041", + "1881079", + "1881089", + "1881094", + "1881111", + "1881122", + "1881126", + "1881132", + "1881151", + "1881157", + "1881166", + "1881170", + "1881208", + "1881293", + "1881303", + "1881320", + "1881329", + "1881336", + "1881340", + "1881362", + "1881393", + "1881404", + "1881418", + "1881424", + "1881485", + "1881504", + "1881515", + "1881603", + "1881767", + "1881822", + "1881834", + "1881955", + "1881964", + "1882021", + "1882089", + "1882110", + "1882158", + "1882165", + "1882190", + "1882195", + "1882210", + "1882215", + "1882253", + "1882266", + "1882272", + "1882297", + "1882316", + "1882355", + "1882437", + "1882459", + "1882557", + "1882729", + "1882753", + "1882767", + "1882771", + "1882773", + "1882785", + "1882786", + "1882812", + "1882816", + "1882818", + "1882884", + "1882901", + "1882905", + "1882927", + "1882930", + "1882941", + "1882959", + "1882960", + "1882965", + "1882977", + "1882979", + "1883020", + "1883024", + "1883028", + "1883067", + "1883124", + "1883161", + "1883386", + "1883458", + "1883634", + "1883829", + "1883873", + "1883881", + "1883885", + "1883897", + "1883943", + "1883951", + "1883968", + "1883975", + "1883993", + "1884001", + "1884051", + "1884212", + "1884213", + "1884228", + "1884229", + "1884240", + "1884254", + "1884255", + "1884273", + "1884274", + "1884280", + "1884326", + "1884332", + "1884337", + "1884370", + "1884403", + "1884428", + "1884434", + "1884435", + "1884437", + "1884439", + "1884449", + "1884453", + "1884461", + "1884464", + "1884465", + "1884479", + "1884503", + "1884531", + "1884539", + "1884595", + "1884607", + "1884685", + "1884703", + "1884774", + "1884816", + "1884844", + "1884858", + "1884877", + "1884890", + "1884908", + "1884909", + "1884923", + "1884936", + "1884970", + "1884997", + "1885001", + "1885012", + "1885099", + "1885158", + "1885202", + "1885229", + "1885262", + "1885263", + "1885569", + "1885605", + "1885623", + "1885630", + "1885642", + "1885702", + "1885745", + "1885763", + "1885764", + "1885826", + "1885836", + "1885919", + "1885931", + "1885937", + "1885945", + "1885950", + "1885994", + "1886015", + "1886084", + "1886104", + "1886123", + "1886207", + "1886251", + "1886262", + "1886292", + "1886320", + "1886362", + "1886374", + "1886378", + "1886400", + "1886419", + "1886490", + "1886501", + "1886526", + "1886579", + "1886583", + "1886587", + "1886648", + "1886650", + "1886700", + "1886720", + "1886726", + "1886729", + "1886906", + "1886929", + "1886935", + "1887004", + "1887024", + "1887031", + "1887054", + "1887108", + "1887119", + "1887122", + "1887125", + "1887173", + "1887177", + "1887178", + "1887285", + "1887290", + "1887309", + "1887341", + "1887459", + "1887462", + "1887509", + "1887565", + "1887580", + "1887585", + "1887586", + "1887634", + "1887686", + "1887691", + "1887694", + "1887701", + "1888009", + "1888027", + "1888047", + "1888092", + "1888123", + "1888292", + "1888306", + "1888307", + "1888324", + "1888336", + "1888338", + "1888346", + "1888410", + "1888435", + "1888454", + "1888463", + "1888484", + "1888537", + "1888579", + "1888619", + "1888623", + "1888638", + "1888646", + "1888695", + "1888733", + "1888736", + "1888743", + "1888759", + "1888823", + "1888826", + "1888891", + "1888893", + "1888906", + "1888913", + "1888915", + "1888926", + "1888955", + "1888958", + "1889039", + "1889053", + "1889071", + "1889074", + "1889239", + "1889242", + "1889249", + "1889272", + "1889277", + "1889287", + "1889356", + "1889358", + "1889370", + "1889381", + "1889536", + "1889543", + "1889563", + "1889721", + "1889745", + "1889765", + "1889769", + "1889828", + "1889833", + "1889838", + "1889850", + "1889870", + "1889905", + "1889939", + "1889942", + "1890031", + "1890056", + "1890065", + "1890089", + "1890097", + "1890187", + "1890247", + "1890287", + "1890320", + "1890335", + "1890343", + "1890346", + "1890374", + "1890404", + "1890410", + "1890417", + "1890487", + "1890491", + "1890508", + "1890512", + "1890520", + "1890522", + "1890534", + "1890540", + "1890560", + "1890576", + "1890622", + "1890629", + "1890654", + "1890656", + "1890670", + "1890679", + "1890699", + "1890703", + "1890724", + "1890730", + "1890737", + "1890772", + "1890776", + "1890783", + "1890794", + "1890800", + "1890802", + "1890854", + "1890876", + "1890885", + "1890898", + "1890936", + "1890957", + "1890975", + "1891013", + "1891035", + "1891048", + "1891059", + "1891074", + "1891129", + "1891167", + "1891171", + "1891190", + "1891217", + "1891236", + "1891299", + "1891308", + "1891326", + "1891366", + "1891386", + "1891426", + "1891453", + "1891473", + "1891488", + "1891493", + "1891494", + "1891583", + "1891636", + "1891755", + "1891758", + "1891889", + "1891932", + "1891936", + "1892131", + "1892153", + "1892193", + "1892242", + "1892245", + "1892301", + "1892302", + "1892311", + "1892320", + "1892355", + "1892420", + "1892427", + "1892433", + "1892456", + "1892458", + "1892462", + "1892476", + "1892477", + "1892488", + "1892509", + "1892544", + "1892554", + "1892555", + "1892621", + "1892634", + "1892729", + "1892736", + "1892742", + "1892746", + "1892759", + "1892761", + "1892770", + "1892811", + "1892814", + "1892821", + "1892837", + "1892851", + "1892856", + "1892858", + "1892863", + "1892944", + "1893137", + "1893177", + "1893204", + "1893241", + "1893266", + "1893329", + "1893381", + "1893480", + "1893538", + "1893546", + "1893551", + "1893558", + "1893562", + "1893612", + "1893645", + "1893660", + "1893663", + "1893699", + "1893787", + "1893793", + "1893901", + "1893921", + "1893923", + "1893951", + "1893989", + "1893993", + "1894002", + "1894012", + "1894057", + "1894074", + "1894085", + "1894087", + "1894088", + "1894102", + "1894164", + "1894268", + "1894293", + "1894298", + "1894329", + "1894342", + "1894349", + "1894714", + "1894840", + "1894896", + "1895037", + "1895138", + "1895159", + "1895176", + "1895185", + "1895203", + "1895250", + "1895448", + "1895499", + "1895527", + "1895609", + "1895667", + "1895670", + "1895709", + "1895733", + "1895768", + "1895773", + "1895789", + "1895809", + "1895820", + "1895838", + "1895867", + "1895875", + "1895886", + "1895904", + "1895956", + "1895984", + "1895992", + "1896073", + "1896087", + "1896105", + "1896126", + "1896141", + "1896142", + "1896152", + "1896304", + "1896316", + "1896600", + "1896603", + "1896614", + "1896628", + "1896658", + "1896749", + "1896754", + "1896756", + "1896763", + "1896774", + "1896841", + "1896876", + "1896922", + "1896932", + "1896957", + "1897664", + "1897677", + "1897685", + "1897692", + "1897747", + "1897770", + "1897808", + "1897814", + "1897817", + "1897834", + "1897852", + "1897873", + "1897904", + "1897965", + "1897970", + "1897972", + "1897977", + "1897980", + "1897990", + "1898002", + "1898017", + "1898077", + "1898133", + "1898143", + "1898174", + "1898200", + "1898203", + "1898286", + "1898290", + "1898348", + "1898350", + "1898352", + "1898358", + "1898367", + "1898368", + "1898370", + "1898374", + "1898391", + "1898402", + "1898414", + "1898416", + "1898424", + "1898431", + "1898434", + "1898441", + "1898521", + "1898544", + "1898686", + "1898789", + "1898848", + "1898858", + "1898865", + "1898946", + "1898970", + "1898988", + "1899048", + "1899071", + "1899187", + "1899198", + "1899349", + "1899433", + "1899818", + "1899873", + "1899893", + "1899931", + "1899932", + "1899940", + "1899943", + "1899947", + "1899950", + "1899956", + "1899989", + "1899994", + "1900024", + "1900026", + "1900053", + "1900093", + "1900112", + "1900121", + "1900131", + "1900134", + "1900172", + "1900175", + "1900197", + "1900199", + "1900233", + "1900249", + "1900295", + "1900303", + "1900345", + "1900408", + "1900485", + "1900523", + "1900565", + "1900578", + "1900618", + "1900626", + "1900632", + "1900768", + "1900787", + "1900825", + "1900830", + "1900872", + "1900890", + "1900897", + "1900918", + "1900939", + "1901001", + "1901153", + "1901189", + "1901213", + "1901257", + "1901261", + "1901268", + "1901399", + "1901404", + "1901411", + "1901427", + "1901428", + "1901429", + "1901435", + "1901463", + "1901533", + "1901580", + "1901669", + "1901735", + "1901744", + "1901782", + "1901801", + "1901810", + "1901832", + "1901850", + "1902106", + "1902108", + "1902110", + "1902111", + "1902114", + "1902117", + "1902169", + "1902175", + "1902182", + "1902211", + "1902233", + "1902244", + "1902248", + "1902300", + "1902378", + "1902384", + "1902406", + "1902430", + "1902451", + "1902458", + "1902479", + "1902502", + "1902533", + "1902543", + "1902560", + "1902572", + "1902586", + "1902615", + "1902623", + "1902642", + "1902660", + "1902670", + "1902676", + "1902692", + "1902699", + "1902702", + "1902703", + "1902704", + "1902749", + "1902814", + "1902880", + "1902882", + "1903009", + "1903598", + "1903607", + "1903634", + "1903636", + "1903646", + "1903683", + "1904272", + "1904281", + "1904382", + "1904701", + "1904719", + "1904728", + "1904764", + "1904798", + "1904884", + "1904887", + "1904888", + "1904916", + "1904938", + "1904943", + "1904948", + "1904996", + "1905079", + "1905142", + "1905161", + "1905162", + "1905172", + "1905187", + "1905189", + "1905242", + "1905257", + "1905267", + "1905281", + "1905297", + "1905299", + "1905301", + "1905317", + "1905383", + "1905451", + "1906006", + "1906014", + "1906030", + "1906117", + "1906552", + "1906604", + "1906621", + "1906679", + "1906715", + "1907153", + "1907190", + "1907235", + "1907250", + "1907272", + "1907395", + "1907430", + "1907432", + "1907475", + "1907498", + "1907534", + "1907620", + "1907625", + "1907637", + "1907666", + "1907672", + "1907683", + "1907687", + "1907727", + "1908011", + "1908044", + "1908052", + "1908055", + "1908108", + "1908123", + "1908146", + "1908148", + "1908150", + "1908168", + "1908199", + "1908203", + "1908204", + "1908207", + "1908256", + "1908258", + "1908299", + "1908302", + "1908317", + "1908337", + "1908352", + "1908356", + "1908367", + "1908577", + "1908660", + "1908700", + "1908702", + "1908707", + "1908713", + "1908775", + "1908840", + "1908871", + "1908929", + "1908953", + "1908995", + "1909019", + "1909039", + "1909064", + "1909070", + "1909123", + "1909128", + "1909135", + "1909155", + "1909170", + "1909185", + "1909191", + "1909209", + "1909211", + "1909213", + "1909216", + "1909281", + "1909319", + "1909398", + "1909436", + "1909453", + "1909457", + "1909489", + "1909532", + "1909573", + "1909607", + "1909649", + "1909659", + "1909736", + "1909800", + "1909810", + "1909838", + "1909865", + "1909879", + "1909884", + "1910371", + "1910496", + "1910628", + "1910629", + "1910648", + "1910662", + "1910663", + "1910706", + "1910753", + "1910773", + "1910809", + "1911076", + "1911077", + "1911093", + "1911112", + "1911122", + "1911168", + "1911178", + "1911182", + "1911246", + "1911278", + "1911298", + "1911461", + "1911503", + "1911577", + "1911633", + "1911736", + "1911755", + "1911939", + "1911966", + "1912003", + "1912036", + "1912119", + "1912325", + "1912372", + "1912395", + "1912428", + "1912470", + "1912506", + "1913091", + "1913105", + "1913175", + "1913178", + "1913328", + "1913351", + "1914410", + "1914416", + "1914421", + "1914424", + "1914435", + "1914439", + "1914440", + "1914442", + "1914458", + "1914464", + "1914465", + "1914477", + "1914484", + "1914496", + "1914500", + "1914501", + "1914511", + "1914693", + "1914697", + "1914701", + "1914708", + "1915031", + "1915079", + "1915080", + "1915110", + "1915144", + "1915160", + "1915193", + "1915262", + "1915270", + "1915275", + "1915325", + "1915339", + "1915368", + "1915369", + "1915396", + "1915417", + "1915430", + "1915456", + "1915469", + "1915470", + "1915487", + "1915492", + "1915499", + "1915506", + "1916347", + "1916352", + "1916376", + "1916410", + "1916412", + "1916458", + "1916509", + "1916554", + "1916700", + "1916758", + "1916772", + "1916790", + "1917827", + "1917830", + "1917834", + "1917840", + "1918026", + "1918076", + "1918077", + "1918078", + "1918082", + "1918094", + "1918097", + "1918133", + "1918212", + "1918220", + "1918263", + "1918269", + "1918280", + "1918293", + "1918321", + "1918394", + "1918395", + "1918406", + "1918408", + "1918411", + "1918467", + "1918495", + "1918497", + "1918509", + "1918517", + "1918532", + "1918533", + "1918547", + "1918553", + "1918554", + "1918584", + "1918596", + "1918627", + "1918632", + "1918667", + "1918669", + "1918688", + "1918694", + "1918736", + "1918776", + "1918789", + "1918795", + "1918843", + "1918854", + "1918859", + "1918868", + "1918964", + "1918968", + "1918972", + "1918984", + "1918986", + "1918988", + "1919010", + "1919125", + "1919128", + "1919129", + "1919130", + "1919145", + "1919146", + "1919149", + "1919151", + "1919160", + "1919173", + "1919176", + "1919181", + "1919194", + "1919210", + "1919213", + "1919214", + "1919223", + "1919233", + "1919235", + "1919239", + "1919245", + "1919277", + "1919282", + "1919287", + "1919289", + "1919316", + "1919317", + "1919320", + "1919326", + "1919327", + "1919328", + "1919330", + "1919333", + "1919338", + "1919340", + "1919342", + "1919344", + "1919346", + "1919348", + "1919381", + "1919412", + "1919419", + "1919421", + "1919432", + "1919438", + "1919444", + "1919534", + "1919540", + "1919551", + "1919564", + "1919589", + "1919626", + "1919635", + "1919646", + "1919649", + "1919652", + "1919653", + "1919656", + "1919660", + "1919663", + "1919665", + "1919698", + "1919700", + "1919701", + "1919702", + "1919705", + "1919711", + "1919712", + "1919716", + "1919719", + "1919720", + "1919728", + "1919731", + "1919741", + "1919744", + "1919756", + "1919924", + "1919929", + "1919930", + "1919937", + "1919939", + "1919943", + "1919945", + "1919947", + "1919949", + "1919951", + "1919966", + "1920181", + "1920192", + "1920218", + "1920237", + "1920247", + "1920258", + "1920259", + "1920275", + "1920348", + "1920349", + "1920353", + "1920356", + "1920357", + "1920362", + "1920363", + "1920369", + "1920370", + "1920374", + "1920378", + "1920381", + "1920390", + "1920395", + "1920401", + "1920405", + "1920426", + "1920431", + "1920437", + "1920454", + "1920463", + "1920467", + "1920469", + "1920491", + "1920494", + "1920496", + "1920502", + "1920506", + "1920509", + "1920512", + "1920515", + "1920534", + "1920535", + "1920541", + "1920552", + "1920571", + "1920574", + "1920581", + "1920621", + "1920691", + "1920709", + "1920712", + "1920718", + "1920786", + "1920795", + "1920803", + "1920809", + "1920810", + "1920815", + "1920816", + "1920844", + "1920851", + "1920864", + "1920889", + "1920892", + "1920900", + "1920923", + "1920957", + "1920996", + "1921009", + "1921010", + "1921021", + "1921044", + "1921053", + "1921055", + "1921064", + "1921092", + "1921093", + "1921123", + "1921150", + "1921163", + "1921239", + "1921240", + "1921247", + "1921248", + "1921255", + "1921262", + "1921263", + "1921300", + "1921466", + "1921521", + "1921590", + "1921633", + "1921650", + "1921910", + "1921992", + "1921993", + "1922038", + "1922039", + "1922041", + "1922044", + "1922049", + "1922057", + "1922064", + "1922085", + "1922111", + "1922143", + "1922163", + "1922197", + "1922219", + "1922223", + "1922244", + "1922285", + "1922288", + "1922291", + "1922311", + "1922343", + "1922455", + "1922468", + "1922572", + "1922584", + "1922637", + "1922676", + "1922679", + "1922694", + "1922701", + "1922739", + "1922745", + "1922851", + "1922865", + "1922867", + "1922868", + "1922889", + "1922890", + "1922937", + "1922994", + "1923019", + "1923465", + "1923473", + "1923491", + "1923498", + "1923505", + "1923525", + "1923649", + "1923650", + "1923651", + "1923668", + "1923679", + "1923744", + "1923796", + "1923809", + "1923883", + "1923917", + "1923997", + "1924044", + "1924050", + "1924057", + "1924077", + "1924082", + "1924097", + "1924106", + "1924176", + "1924193", + "1924223", + "1924232", + "1924298", + "1924323", + "1924362", + "1924390", + "1924392", + "1924417", + "1924429", + "1924458", + "1924494", + "1924513", + "1924518", + "1924521", + "1924558", + "1924713", + "1924754", + "1924770", + "1924867", + "1925221", + "1925233", + "1925381", + "1925410", + "1925429", + "1925454", + "1925458", + "1925498", + "1925500", + "1925501", + "1925509", + "1925515", + "1925543", + "1925555", + "1925609", + "1925615", + "1925628", + "1925676", + "1925694", + "1925711", + "1925731", + "1925743", + "1925877", + "1925918", + "1925922", + "1925962", + "1926001", + "1926009", + "1926054", + "1926166", + "1926260", + "1926324", + "1926385", + "1926436", + "1926437", + "1926446", + "1926448", + "1926456", + "1926460", + "1926530", + "1926531", + "1926539", + "1926546", + "1926550", + "1926574", + "1926593", + "1926611", + "1926800", + "1926817", + "1926823", + "1926834", + "1926861", + "1927034", + "1927217", + "1927242", + "1927272", + "1927274", + "1927284", + "1927301", + "1927313", + "1927348", + "1927393", + "1927707", + "1927894", + "1927895", + "1927897", + "1927900", + "1927909", + "1927943", + "1927979", + "1927988", + "1927992", + "1927996", + "1928009", + "1928018", + "1928070", + "1928076", + "1928214", + "1928215", + "1928248", + "1928349", + "1928361", + "1928376", + "1928419", + "1928584", + "1928628", + "1928746", + "1928829", + "1928849", + "1928908", + "1928915", + "1928945", + "1928960", + "1929046", + "1929049", + "1929059", + "1929129", + "1929270", + "1929659", + "1929697", + "1929772", + "1929962", + "1929966", + "1930079", + "1930110", + "1930167", + "1930178", + "1930179", + "1930181", + "1930183", + "1930263", + "1930270", + "1930288", + "1930289", + "1930331", + "1930361", + "1930391", + "1930422", + "1930563", + "1930581", + "1930621", + "1930653", + "1930660", + "1930678", + "1930728", + "1930772", + "1930779", + "1930830", + "1930832", + "1930904", + "1930916", + "1930923", + "1930931", + "1930935", + "1930954", + "1930968", + "1931046", + "1931109", + "1931116", + "1931119", + "1931122", + "1931126", + "1931148", + "1931179", + "1931189", + "1931310", + "1931403", + "1931437", + "1931553", + "1931561", + "1931655", + "1931656", + "1931706", + "1931779", + "1931784", + "1931787", + "1931788", + "1931889", + "1931906", + "1931908", + "1931943", + "1931956", + "1931958", + "1931997", + "1932020", + "1932043", + "1932056", + "1932159", + "1932166", + "1932172", + "1932175", + "1932189", + "1932206", + "1932246", + "1932273", + "1932287", + "1932302", + "1932332", + "1932354", + "1932386", + "1932393", + "1932406", + "1932411", + "1932414", + "1932417", + "1932428", + "1932473", + "1932517", + "1932551", + "1932563", + "1932576", + "1932580", + "1932607", + "1932629", + "1932751", + "1932752", + "1932753", + "1932812", + "1932814", + "1932863", + "1932879", + "1932908", + "1932960", + "1932976", + "1933028", + "1933044", + "1933084", + "1933095", + "1933126", + "1933138", + "1933163", + "1933204", + "1933260", + "1933583", + "1933647", + "1933649", + "1933679", + "1933793", + "1933844", + "1933845", + "1933998", + "1934172", + "1934187", + "1934192", + "1934211", + "1934213", + "1934221", + "1934331", + "1934447", + "1934570", + "1934693", + "1934715", + "1934991", + "1935078", + "1935295", + "1935301", + "1935343", + "1935346", + "1935350", + "1935363", + "1935372", + "1935377", + "1935405", + "1935408", + "1935410", + "1935454", + "1935459", + "1935498", + "1935614", + "1935838", + "1935849", + "1935869", + "1935872", + "1935888", + "1935899", + "1935901", + "1935904", + "1935912", + "1935916", + "1935925", + "1935931", + "1935935", + "1936026", + "1936161", + "1936233", + "1936312", + "1936378", + "1936388", + "1936391", + "1936565", + "1936566", + "1936649", + "1936810", + "1936969", + "1936988", + "1936993", + "1937011", + "1937055", + "1937064", + "1937090", + "1937109", + "1937110", + "1937124", + "1937129", + "1937136", + "1937144", + "1937155", + "1937162", + "1937165", + "1937167", + "1937444", + "1937474", + "1937490", + "1937514", + "1937527", + "1937530", + "1937540", + "1937556", + "1937566", + "1937570", + "1937582", + "1937594", + "1937613", + "1937618", + "1937642", + "1937655", + "1937665", + "1937667", + "1937688", + "1937691", + "1937698", + "1937699", + "1937702", + "1937707", + "1937712", + "1937722", + "1937723", + "1937739", + "1937751", + "1937754", + "1937758", + "1937769", + "1937792", + "1937793", + "1937803", + "1937816", + "1937819", + "1937826", + "1937846", + "1937847", + "1937849", + "1937885", + "1937892", + "1937911", + "1937931", + "1937937", + "1937959", + "1937966", + "1937974", + "1937975", + "1937988", + "1938007", + "1938016", + "1938022", + "1938029", + "1938050", + "1938052", + "1938058", + "1938059", + "1938069", + "1938074", + "1938081", + "1938088", + "1938104", + "1938112", + "1938114", + "1938122", + "1938125", + "1938129", + "1938131", + "1938147", + "1938148", + "1938159", + "1938162", + "1938166", + "1938168", + "1938214", + "1938226", + "1938230", + "1938233", + "1938300", + "1938446", + "1938520", + "1938612", + "1938796", + "1938810", + "1938955", + "1938975", + "1939056", + "1939086", + "1939130", + "1939131", + "1939134", + "1939136", + "1939156", + "1939168", + "1939180", + "1939215", + "1939225", + "1939314", + "1939336", + "1939432", + "1939510", + "1939520", + "1939597", + "1939647", + "1939658", + "1939677", + "1939688", + "1939717", + "1939833", + "1939879", + "1939962", + "1939964", + "1940110", + "1940158", + "1940504", + "1940510", + "1940517", + "1940546", + "1940575", + "1940604", + "1940609", + "1940639", + "1940644", + "1940694", + "1940717", + "1940744", + "1940757", + "1940768", + "1940807", + "1940838", + "1941266", + "1941294", + "1941299", + "1941310", + "1941330", + "1941377", + "1941437", + "1941570", + "1941683", + "1941713", + "1941717", + "1941719", + "1941864", + "1942060", + "1942067", + "1942141", + "1942170", + "1942171", + "1942244", + "1942251", + "1942341", + "1942370", + "1942378", + "1942383", + "1942416", + "1942455", + "1942509", + "1942522", + "1942558", + "1942618", + "1942621", + "1942623", + "1942636", + "1942641", + "1942670", + "1942674", + "1942697", + "1942762", + "1942769", + "1942790", + "1942793", + "1942808", + "1942854", + "1942945", + "1942947", + "1942964", + "1942967", + "1942971", + "1942980", + "1942982", + "1942994", + "1943054", + "1943066", + "1943089", + "1943090", + "1943096", + "1943101", + "1943212", + "1943223", + "1943236", + "1943250", + "1943308", + "1943397", + "1943475", + "1943505", + "1943519", + "1943563", + "1943571", + "1943573", + "1943588", + "1943619", + "1943631", + "1943655", + "1943757", + "1943824", + "1943830", + "1943901", + "1943936", + "1943942", + "1943953", + "1943954", + "1943960", + "1943962", + "1943964", + "1943990", + "1944004", + "1944106", + "1944113", + "1944234", + "1944273", + "1944283", + "1944286", + "1944314", + "1944324", + "1944329", + "1944335", + "1944343", + "1944361", + "1944374", + "1944421", + "1944456", + "1944462", + "1944483", + "1944503", + "1944504", + "1944520", + "1944521", + "1944523", + "1944574", + "1944591", + "1944618", + "1944627", + "1944629", + "1944631", + "1944635", + "1944638", + "1944769", + "1944778", + "1944815", + "1944832", + "1944910", + "1944977", + "1945066", + "1945081", + "1945088", + "1945122", + "1945137", + "1945143", + "1945173", + "1945225", + "1945227", + "1945270", + "1945274", + "1945286", + "1945302", + "1945312", + "1945374", + "1945396", + "1945462", + "1945476", + "1945477", + "1945569", + "1945571", + "1945605", + "1945694", + "1945710", + "1945715", + "1945738", + "1945742", + "1945748", + "1945786", + "1945814", + "1945837", + "1945856", + "1945863", + "1945874", + "1945877", + "1945878", + "1945893", + "1945957", + "1946019", + "1946037", + "1946051", + "1946058", + "1946067", + "1946074", + "1946078", + "1946079", + "1946097", + "1946163", + "1946167", + "1946177", + "1946310", + "1946327", + "1946333", + "1946432", + "1946469", + "1946495", + "1946500", + "1946520", + "1946544", + "1946550", + "1946577", + "1946610", + "1946612", + "1946618", + "1946628", + "1946661", + "1946695", + "1946720", + "1946731", + "1946737", + "1946738", + "1946756", + "1946763", + "1946810", + "1946853", + "1946865", + "1946901", + "1946916", + "1946917", + "1946980", + "1946981", + "1946983", + "1946989", + "1946995", + "1946999", + "1947021", + "1947037", + "1947049", + "1947055", + "1947112", + "1947113", + "1947117", + "1947282", + "1947306", + "1947333", + "1947335", + "1947385", + "1947409", + "1947446", + "1947449", + "1947456", + "1947459", + "1947491", + "1947492", + "1947506", + "1947507", + "1947568", + "1947577", + "1947587", + "1947588", + "1947597", + "1947626", + "1947661", + "1947673", + "1947703", + "1947727", + "1947740", + "1947745", + "1947765", + "1947842", + "1947846", + "1947890", + "1947915", + "1947973", + "1947976", + "1947980", + "1948054", + "1948061", + "1948073", + "1948088", + "1948371", + "1948439", + "1948446", + "1948464", + "1948465", + "1948521", + "1948771", + "1948774", + "1948779", + "1948789", + "1948799", + "1948800", + "1948802", + "1948803", + "1948804", + "1948809", + "1948810", + "1948826", + "1948861", + "1948865", + "1948883", + "1948890", + "1948941", + "1948947", + "1948994", + "1949008", + "1949049", + "1949219", + "1949285", + "1949322", + "1949331", + "1949336", + "1949366", + "1949404", + "1949449", + "1949451", + "1949466", + "1949492", + "1949512", + "1949515", + "1949544", + "1949549", + "1949592", + "1949621", + "1949687", + "1949697", + "1949715", + "1949784", + "1949794", + "1949850", + "1949852", + "1949877", + "1949929", + "1949938", + "1949954", + "1950006", + "1950013", + "1950017", + "1950019", + "1950024", + "1950044", + "1950047", + "1950052", + "1950133", + "1950156", + "1950169", + "1950171", + "1950197", + "1950272", + "1950302", + "1950362", + "1950396", + "1950408", + "1950409", + "1950521", + "1950533", + "1950567", + "1950578", + "1950591", + "1950654", + "1950877", + "1950879", + "1950936", + "1951097", + "1951103", + "1951116", + "1951121", + "1951125", + "1951133", + "1951157", + "1951170", + "1951217", + "1951218", + "1951340", + "1951370", + "1951412", + "1951448", + "1951462", + "1951492", + "1951507", + "1951522", + "1951529", + "1951542", + "1951557", + "1951649", + "1951657", + "1951660", + "1951671", + "1951675", + "1951713", + "1951725", + "1951747", + "1951784", + "1951840", + "1951844", + "1951881", + "1952014", + "1952032", + "1952034", + "1952043", + "1952062", + "1952093", + "1952130", + "1952147", + "1952175", + "1952177", + "1952229", + "1952281", + "1952449", + "1952481", + "1952532", + "1952551", + "1952611", + "1952685", + "1952730", + "1952806", + "1952812", + "1952816", + "1952857", + "1952878", + "1952883", + "1952909", + "1953124", + "1953192", + "1953196", + "1953217", + "1953407", + "1953423", + "1953998", + "1954037", + "1954084", + "1954120", + "1954236", + "1954338", + "1954344", + "1954346", + "1954351", + "1954353", + "1954382", + "1954490", + "1954496", + "1954514", + "1954522", + "1954563", + "1954911", + "1954930", + "1954933", + "1955039", + "1955093", + "1955153", + "1955199", + "1955271", + "1955272", + "1955318", + "1955389", + "1955416", + "1955422", + "1955479", + "1955484", + "1955498", + "1955552", + "1955694", + "1955725", + "1955736", + "1955737", + "1955743", + "1955745", + "1955753", + "1955755", + "1955763", + "1955856", + "1955899", + "1956098", + "1956215", + "1956384", + "1956416", + "1956440", + "1956462", + "1956505", + "1956510", + "1956524", + "1956536", + "1956597", + "1956599", + "1956626", + "1956639", + "1956710", + "1956716", + "1956897", + "1956904", + "1956955", + "1956958", + "1956963", + "1956978", + "1956983", + "1957058", + "1957062", + "1957161", + "1957174", + "1957266", + "1957286", + "1957300", + "1957333", + "1957368", + "1957413", + "1957441", + "1957460", + "1957523", + "1957556", + "1957565", + "1957570", + "1957572", + "1957579", + "1957583", + "1957611", + "1957673", + "1957706", + "1957718", + "1957746", + "1957791", + "1957816", + "1957822", + "1957845", + "1957852", + "1957854", + "1957870", + "1958024", + "1958045", + "1958049", + "1958065", + "1958121", + "1958152", + "1958158", + "1958163", + "1958241", + "1958252", + "1958255", + "1958259", + "1958260", + "1958275", + "1958290", + "1958305", + "1958307", + "1958323", + "1958324", + "1958454", + "1958463", + "1958483", + "1958515", + "1958528", + "1959341", + "1959379", + "1959383", + "1959395", + "1959423", + "1959436", + "1959461", + "1959473", + "1959500", + "1959543", + "1959637", + "1959645", + "1959652", + "1959666", + "1959667", + "1959682", + "1959735", + "1959782", + "1959799", + "1959839", + "1959858", + "1959890", + "1959898", + "1959914", + "1959917", + "1959919", + "1959934", + "1959948", + "1960004", + "1960023", + "1960090", + "1960105", + "1960106", + "1960128", + "1960166", + "1960181", + "1960182", + "1960255", + "1960268", + "1960315", + "1960484", + "1960503", + "1960521", + "1960524", + "1960571", + "1960595", + "1960617", + "1960632", + "1960686", + "1960854", + "1960940", + "1960941", + "1961013", + "1961037", + "1961040", + "1961052", + "1961068", + "1961126", + "1961155", + "1961162", + "1961180", + "1961190", + "1961252", + "1961361", + "1961647", + "1961718", + "1962051", + "1962076", + "1962086", + "1962118", + "1962159", + "1962162", + "1962204", + "1962265", + "1962268", + "1962434", + "1962447", + "1962479", + "1962490", + "1962516", + "1962584", + "1962636", + "1962656", + "1962657", + "1962678", + "1962689", + "1962722", + "1962727", + "1962829", + "1962839", + "1962841", + "1962842", + "1962860", + "1962895", + "1962900", + "1962925", + "1962934", + "1962961", + "1962972", + "1962990", + "1963011", + "1963052", + "1963096", + "1963168", + "1963201", + "1963297", + "1963306", + "1963425", + "1963433", + "1963446", + "1963463", + "1963532", + "1963587", + "1963619", + "1963629", + "1963633", + "1963709", + "1963710", + "1963733", + "1963755", + "1963782", + "1963848", + "1963854", + "1963874", + "1963879", + "1963892", + "1964024", + "1964025", + "1964029", + "1964041", + "1964066", + "1964113", + "1964116", + "1964141", + "1964143", + "1964144", + "1964151", + "1964153", + "1964155", + "1964158", + "1964174", + "1964189", + "1964191", + "1964195", + "1964247", + "1964305", + "1964401", + "1964437", + "1964471", + "1964565", + "1964585", + "1964637", + "1964653", + "1964657", + "1964702", + "1964715", + "1964738", + "1964836", + "1964995", + "1965024", + "1965038", + "1965069", + "1965100", + "1965166", + "1965197", + "1965208", + "1965345", + "1965586", + "1965640", + "1965643", + "1965649", + "1965650", + "1965671", + "1965697", + "1965699", + "1965763", + "1965777", + "1965794", + "1965795", + "1965797", + "1965805", + "1965810", + "1965823", + "1965825", + "1965831", + "1965838", + "1965841", + "1965861", + "1965865", + "1965887", + "1965913", + "1965996", + "1966017", + "1966088", + "1966185", + "1966195", + "1966198", + "1966255", + "1966302", + "1966310", + "1966351", + "1966358", + "1966362", + "1966367", + "1966886", + "1966977", + "1967003", + "1967006", + "1967011", + "1967039", + "1967127", + "1967128", + "1967209", + "1967226", + "1967240", + "1967245", + "1967265", + "1967273", + "1967346", + "1967433", + "1967445", + "1967452", + "1967590", + "1967595", + "1967597", + "1967606", + "1967672", + "1967703", + "1967716", + "1967803", + "1967815", + "1967873", + "1968115", + "1968131", + "1968147", + "1968182", + "1968205", + "1968313", + "1968321", + "1968324", + "1968363", + "1968678", + "1968686", + "1968730", + "1968746", + "1968837", + "1968867", + "1968942", + "1968951", + "1968990", + "1969291", + "1969339", + "1969357", + "1969463", + "1969491", + "1969568", + "1969581", + "1969954", + "1969958", + "1969961", + "1970034", + "1970093", + "1970094", + "1970108", + "1970119", + "1970136", + "1970145", + "1970148", + "1970150", + "1970159", + "1970213", + "1970227", + "1970243", + "1970259", + "1970265", + "1970284", + "1970322", + "1970436", + "1970460", + "1970463", + "1970473", + "1970485", + "1971835", + "1971847", + "1971852", + "1971858", + "1971888", + "1971986", + "1971995", + "1971998", + "1971999", + "1972010", + "1972094", + "1972101", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972374", + "1972377", + "1972407", + "1972434", + "1972447", + "1972449", + "1972454", + "1972606", + "1972613", + "1972620", + "1972631", + "1972691", + "1972754", + "1972797", + "1972800", + "1972806", + "1972903", + "1972942", + "1973146", + "1973147", + "1973164", + "1973171", + "1973242", + "1973300", + "1973323", + "1973327", + "1973338", + "1973358", + "1973393", + "1973414", + "1973466", + "1973467", + "1973487", + "1973493", + "1973665", + "1973719", + "1975164", + "1975198", + "1975212", + "1975248", + "1975287", + "1975341", + "1975365", + "1975546", + "1975553", + "1975571", + "1975583", + "1975597", + "1975607", + "1975711", + "1975722", + "1975733", + "1975741", + "1975793", + "1975805", + "1975806", + "1975892", + "1975897", + "1975903", + "1975914", + "1975964", + "1975979", + "1976073", + "1976123", + "1976142", + "1976163", + "1976212", + "1976213", + "1976224", + "1976228", + "1976248", + "1976255", + "1976303", + "1976311", + "1976333", + "1976342", + "1976462", + "1976463", + "1976469", + "1976470", + "1976483", + "1976651", + "1976746", + "1976890", + "1976928", + "1976933", + "1976934", + "1976939", + "1976941", + "1976993", + "1977003", + "1977007", + "1977054", + "1977068", + "1977182", + "1977184", + "1977350", + "1977759", + "1977764", + "1977767", + "1977813", + "1977833", + "1977863", + "1977962", + "1977967", + "1977971", + "1978017", + "1978034", + "1978045", + "1978056", + "1978065", + "1978082", + "1978114", + "1978197", + "1978268", + "1978274", + "1978281", + "1978282", + "1978283", + "1978375", + "1978385", + "1978398", + "1978405", + "1978407", + "1978422", + "1978424", + "1978445", + "1978464", + "1978493", + "1978494", + "1978499", + "1978524", + "1978526", + "1978529", + "1978671", + "1978751", + "1978776", + "1978789", + "1978821", + "1978904", + "1978919", + "1978937", + "1978958", + "1978959", + "1978977", + "1978996", + "1979021", + "1979041", + "1979222", + "1979255", + "1979289", + "1979308", + "1979344", + "1979358", + "1979380", + "1979427", + "1979430", + "1979473", + "1979521", + "1979561", + "1979562", + "1979721", + "1979726", + "1979758", + "1979781", + "1979787", + "1979801", + "1979822", + "1980025", + "1980035", + "1980041", + "1980044", + "1980055", + "1980063", + "1980245", + "1980247", + "1980250", + "1980269", + "1980290", + "1980462", + "1980491", + "1980505", + "1980521", + "1980525", + "1980533", + "1980559", + "1980659", + "1980811", + "1980821", + "1980827", + "1980917", + "1981063", + "1981144", + "1981160", + "1981161", + "1981162", + "1981191", + "1981202", + "1981209", + "1981210", + "1981252", + "1981258", + "1981277", + "1981284", + "1981312", + "1981457", + "1981696", + "1981938", + "1981951", + "1981959", + "1981973", + "1981998", + "1982024", + "1982055", + "1982071", + "1982085", + "1982100", + "1982102", + "1982103", + "1982148", + "1982221", + "1982267", + "1982406", + "1982447", + "1982458", + "1982500", + "1982525", + "1982529", + "1982533", + "1982541", + "1982542", + "1982613", + "1982636", + "1982671", + "1982746", + "1982779", + "1982780", + "1982790", + "1982791", + "1982824", + "1982838", + "1982865", + "1982885", + "1982898", + "1982918", + "1982924", + "1982951", + "1983000", + "1983039", + "1983052", + "1983101", + "1983111", + "1983170", + "1983260", + "1983263", + "1983288", + "1983387", + "1983393", + "1983434", + "1983441", + "1983442", + "1983491", + "1983525", + "1983528", + "1983548", + "1983558", + "1983648", + "1983705", + "1983709", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984033", + "1984073", + "1984110", + "1984117", + "1984654", + "1984734", + "1984913", + "1984942", + "1984949", + "1984954", + "1985061", + "1985152", + "1985158", + "1985167", + "1985181", + "1985191", + "1985192", + "1985228", + "1985230", + "1985267", + "1985405", + "1985406", + "1985423", + "1985487", + "1985490", + "1985522", + "1985573", + "1985734", + "1985742", + "1985816", + "1985826", + "1985931", + "1985945", + "1985952", + "1985993", + "1986004", + "1986020", + "1986032", + "1986040", + "1986052", + "1986054", + "1986056", + "1986061", + "1986091", + "1986113", + "1986157", + "1986166", + "1986171", + "1986192", + "1986220", + "1986223", + "1986367", + "1986452", + "1986497", + "1986508", + "1986522", + "1986575", + "1986623", + "1986650", + "1986693", + "1986774", + "1986779", + "1986787", + "1986807", + "1986846", + "1986877", + "1986906", + "1986936", + "1986942", + "1986998", + "1987145", + "1987146", + "1987203", + "1987204", + "1987301", + "1987330", + "1987362", + "1987377", + "1987527", + "1987578", + "1987629", + "1987633", + "1987650", + "1987665", + "1987737", + "1987740", + "1987744", + "1987747", + "1987767", + "1987775", + "1987776", + "1987787", + "1987855", + "1988002", + "1988019", + "1988064", + "1988225", + "1988257", + "1988302", + "1988306", + "1988354", + "1988360", + "1988361", + "1988362", + "1988376", + "1988382", + "1988384", + "1988390", + "1988420", + "1988487", + "1988495", + "1988593", + "1988602", + "1988684", + "1988762", + "1988820", + "1988881", + "1988894", + "1989083", + "1989170", + "1989181", + "1989282", + "1989283", + "1989355", + "1989377", + "1989428", + "1989522", + "1989538", + "1989582", + "1989594", + "1989903", + "1989942", + "1990043", + "1990050", + "1990066", + "1990088", + "1990105", + "1990150", + "1990155", + "1990164", + "1990165", + "1990167", + "1990178", + "1990198", + "1990200", + "1990255", + "1990256", + "1990270", + "1990331", + "1990335", + "1990357", + "1990371", + "1990533", + "1990551", + "1990582", + "1990594", + "1990998", + "1991012", + "1991123", + "1991179", + "1991280", + "1991289", + "1991294", + "1991295", + "1991298", + "1991299", + "1991303", + "1991310", + "1991371", + "1991378", + "1991394", + "1991429", + "1991466", + "1991532", + "1991783", + "1991846", + "1991945", + "1992066", + "1992167", + "1992172", + "1992268", + "1992277", + "1992315", + "1992434", + "1992504", + "1992547", + "1992573", + "1992634", + "1992817", + "1992889", + "1992907", + "1992936", + "1992956", + "1992969", + "1992976", + "1993021", + "1993036", + "1993045", + "1993419", + "1993496", + "1993637", + "3257809", + "4299071", + "4299095", + "4299191", + "4299201", + "4299211", + "4299213", + "4299218", + "4299368", + "4299370", + "4299535", + "4299565", + "4299576", + "4299597", + "4299599", + "4299778", + "4299802", + "4299804", + "4299870", + "4299871", + "4300000", + "4300259", + "4300268", + "4300277", + "4300384", + "4300393", + "4300406", + "4301036", + "4301044", + "4301052", + "4301055", + "4301068", + "4301071", + "4301148", + "4301238", + "4301242", + "4301282", + "4301283", + "4301304", + "4301306", + "4301307", + "4301309", + "4301312", + "4301348", + "4301355", + "4301426", + "4301744", + "4301749", + "4301876", + "4301897", + "4301934", + "4301942", + "4301945", + "4302008", + "4302101", + "4302199", + "4302202", + "4302221", + "4302230", + "4302240", + "4302252", + "4302268", + "4302274", + "4302319", + "4302333", + "4302388", + "4522322", + "4522753", + "4522886", + "4522890", + "4522891", + "4522911", + "4522916", + "4522919", + "4522933", + "4522974", + "4523461", + "4523486", + "4523519", + "4523522", + "4523556", + "4523560", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524052", + "4524054", + "4524070", + "4524072", + "4524221", + "4524223", + "4524376", + "4524393", + "4524403", + "4524421", + "4524424", + "4524426", + "4524513", + "4524541", + "4524568", + "4524588", + "4524636", + "4524638", + "4524712", + "4524740", + "4524793", + "4524822", + "4524890", + "4524914", + "4524922", + "4524929", + "4524951", + "4524961", + "4524962", + "4525034", + "4525068", + "4525078", + "4525091", + "4525093", + "4525097", + "4525103", + "4525132", + "4525177", + "4525189", + "4525266", + "4525268", + "4525270", + "4525354", + "4525364", + "4525369", + "4525425", + "4525476", + "4525487", + "4525500", + "4525503", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4525641", + "4525777", + "4525803", + "4525859", + "4525884", + "4526050", + "4527339", + "4527342", + "4527355", + "4527903", + "4527972", + "4528100", + "4528539", + "4528547", + "4528593", + "4528658", + "4528692", + "4528694", + "4528702", + "4528813", + "4528818", + "4529032", + "4529064", + "4529186", + "4529248", + "4529566", + "4529630", + "4529738", + "4529908", + "4529915", + "4529931", + "4530002", + "4530138", + "4530151", + "4530214", + "4530424", + "4530608", + "4530632", + "4530947", + "4531145", + "4531147", + "4531158", + "4531237", + "4531242", + "4531246", + "4531264", + "4531284", + "4531376", + "4531402", + "4531409", + "4531417", + "4531425", + "4531506", + "4531517", + "4531643", + "4531670", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532024", + "4532050", + "4532088", + "4532095", + "4532097", + "4532122", + "4532125", + "4532150", + "4532160", + "4532203", + "4532206", + "4532216", + "4532236", + "4532239", + "4532253", + "4532260", + "4532264", + "4532266", + "4532269", + "4532283", + "4532293", + "4532297", + "4532351", + "4532352", + "4532357", + "4532366", + "4532395", + "4532405", + "4532408", + "4532412", + "4532453", + "4532461", + "4532471", + "4532473", + "4532493", + "4532500", + "4532508", + "4532516", + "4532532", + "4532534", + "4532544", + "4532565", + "4532608", + "4532614", + "4532696", + "4532700", + "4532811", + "4532886", + "4532888", + "4532890", + "4532908", + "4532986", + "4533115", + "4533123", + "4533125", + "4533128", + "4533136", + "4533202", + "4533211", + "4533255", + "4533273", + "4533285", + "4533325", + "4533344", + "4533345", + "4533347", + "4533360", + "4533431", + "4533433", + "4533442", + "4533444", + "4533446", + "4533661", + "4533671", + "4533695", + "4533714", + "4533720", + "4533882", + "4533924", + "4533937", + "4533952", + "4533957", + "4534011", + "4534017", + "4534038", + "4534046", + "4534052", + "4534057", + "4534086", + "4534162", + "4534166", + "4534194", + "4534207", + "4534225", + "4534245", + "4534252", + "4534257", + "4534275", + "4534290", + "4534299", + "4534360", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534525", + "4534533", + "4534538", + "4534540", + "4534663", + "4534669", + "4534675", + "4534681", + "4534683", + "4534685", + "4534686", + "4534691", + "4534719", + "4534757", + "4534762", + "4534767", + "4534769", + "4534773", + "4534778", + "4534779", + "4534782", + "4534787", + "4534788", + "4534792", + "4534796", + "4534798", + "4534826", + "4534869", + "4534872", + "4534909", + "4534914", + "4535092", + "4535106", + "4535172", + "4535271", + "4535280", + "4535307", + "4535386", + "4535396", + "4535510", + "4535539", + "4535581", + "4535592", + "4535614", + "4535618", + "4535620", + "4535627", + "4535630", + "4535632", + "4535636", + "4535689", + "4535754", + "4535809", + "4535817", + "4535819", + "4535827", + "4535904", + "4536472", + "4536483", + "4684220", + "4684789", + "4684893", + "4684910", + "4684925", + "4684958", + "4684986", + "4685097", + "4685116", + "4685219", + "4685271", + "4685299", + "4685306", + "4685431", + "4685468", + "4685485", + "4685557", + "4685566", + "4685629", + "4685631", + "4685653", + "4685655", + "4685669", + "4685678", + "4685778", + "4685802", + "4685946", + "4685972", + "4685980", + "4685981", + "4686018", + "4686022", + "4686029", + "4686039", + "4686055", + "4686111", + "4686164", + "4686190", + "4686214", + "4686264", + "4686266", + "4686355", + "4686368", + "4686385", + "4686483", + "4686531", + "4686532", + "4686617", + "4686620", + "4686628", + "4686656", + "4686702", + "4686743", + "4686844", + "4686897", + "4686907", + "4686913", + "4686956", + "4687228", + "4687288", + "4687389", + "4687565", + "4687661", + "4687681", + "4687827", + "4687906", + "4687930", + "4687933", + "4687934", + "4687935", + "4687991", + "4688049", + "4688092", + "4688142", + "4688166", + "4688169", + "4688172", + "4689905", + "4689912", + "4689929", + "4689963", + "4690079", + "4692485", + "4693382", + "4693675", + "4695709", + "4695719", + "4699245", + "4701136", + "4701298", + "4701336", + "4702564", + "4702599", + "4702603", + "4702731", + "4702783", + "4702784", + "4702878", + "4702892", + "4702893", + "4702911", + "4702912", + "4702961", + "4703479", + "4704279", + "4704316", + "4704352", + "4704356", + "4704400", + "4704401", + "4704404", + "4704407", + "4704501", + "4705103", + "4707848", + "4707896", + "4707900", + "4708183", + "4708342", + "4708927", + "4708972", + "4708995", + "4709051", + "4709102", + "4709107", + "4709111", + "4709133", + "4709147", + "5101371", + "5101394", + "5101502", + "5101527", + "5101556", + "5101640", + "5101678", + "5101717", + "5101745", + "5101763", + "5101811", + "5102207", + "5102287", + "5102300", + "5102304", + "5102324", + "5102335", + "5102396", + "5102424", + "5102432", + "5102628", + "5102635", + "5102637", + "5102642", + "5102651", + "5102666", + "5102668", + "5102671", + "5102678", + "5102693", + "5102735", + "5102773", + "5102809", + "5102830", + "5102931", + "5102951", + "5102982", + "5103066", + "5103083", + "5103118", + "5103121", + "5103154", + "5103166", + "5103176", + "5103181", + "5103183", + "5103185", + "5103201", + "5103227", + "5103394", + "5103451", + "5103502", + "5103613", + "5103736", + "5103948", + "5103998", + "5104056", + "5104063", + "5104088", + "5104116", + "5104157", + "5104442", + "5104558", + "5104641", + "5104759", + "5104772", + "5104797", + "5104815", + "5104822", + "5104882", + "5104891", + "5104903", + "5104927", + "5104940", + "5104948", + "5104986", + "5105057", + "5105068", + "5105081", + "5105088", + "5105106", + "5105120", + "5105124", + "5105212", + "5105217", + "5105259", + "5105336", + "5105339", + "5105344", + "5105352", + "5105365", + "5105367", + "5105369", + "5105376", + "5105379", + "5105380", + "5105447", + "5105458", + "5105467", + "5105469", + "5105491", + "5105508", + "5105547", + "5105560", + "5105588", + "5105603", + "5105642", + "5105649", + "5105656", + "5105671", + "5105929", + "5106115", + "5106249", + "5106539", + "5106894", + "5107076", + "5107128", + "5107219", + "5107640", + "5107644", + "5107829", + "5108318", + "5108334", + "5108335", + "5108346", + "5108349", + "5108416", + "5108417", + "5108419", + "5108421", + "5108435", + "5108440", + "5108636", + "5108660", + "5108665", + "5108670", + "5108671", + "5108724", + "5108752", + "5108761", + "5108787", + "5108794", + "5108796", + "5108808", + "5108951", + "5108957", + "5108958", + "5109196", + "5109259", + "5109299", + "5109345", + "5109369", + "5109385", + "5109413", + "5109418", + "5109437", + "5109498", + "5109506", + "5109523", + "5109535", + "5109566", + "5109596", + "5109599", + "5109614", + "5109646", + "5109651", + "5109661", + "5109766", + "5109782", + "5109784", + "5109786", + "5109787", + "5109788", + "5109796", + "5109821", + "5109829", + "5109830", + "5109843", + "5109845", + "5109848", + "5109850", + "5109852", + "5109855", + "5109870", + "5109872", + "5109881", + "5109882", + "5109898", + "5109931", + "5109954", + "5109958", + "5110012", + "5110013", + "5110044", + "5110120", + "5110190", + "5110200", + "5110211", + "5110213", + "5110232", + "5110282", + "5110297", + "5110299", + "5110305", + "5110326", + "5110327", + "5110333", + "5110341", + "5110356", + "5110377", + "5110390", + "5110397", + "5110492", + "5110533", + "5110546", + "5110593", + "5110644", + "5110670", + "5110723", + "5110754", + "5110756", + "5110765", + "5110769", + "5110818", + "5110837", + "5110858", + "5110863", + "5110871", + "5110885", + "5110981", + "5110986", + "5111044", + "5111064", + "5111139", + "5111141", + "5111147", + "5111195", + "5111214", + "5111249", + "5111343", + "5111360", + "5111372", + "5111397", + "5111481", + "5111501", + "5111513", + "5111521", + "5111535", + "5111546", + "5111568", + "5111574", + "5111600", + "5111643", + "5111956", + "5111967", + "5111974", + "5112051", + "5112053", + "5112060", + "5112068", + "5112078", + "5112080", + "5112130", + "5112131", + "5112153", + "5112155", + "5112191", + "5112199", + "5112233", + "5112254", + "5112283", + "5112291", + "5112302", + "5112336", + "5112345", + "5112377", + "5112388", + "5112407", + "5112410", + "5112414", + "5112440", + "5112457", + "5112461", + "5112464", + "5112465", + "5112467", + "5112469", + "5112474", + "5112500", + "5112531", + "5112542", + "5112626", + "5112798", + "5112892", + "5112900", + "5112908", + "5112915", + "5112917", + "5112923", + "5112927", + "5112940", + "5112944", + "5112947", + "5112959", + "5112961", + "5112963", + "5112968", + "5112990", + "5113001", + "5113036", + "5113078", + "5113082", + "5113084", + "5113148", + "5113234", + "5113330", + "5113352", + "5113365", + "5113385", + "5113394", + "5113847", + "5113853", + "5113925", + "5113950", + "5113985", + "5114021", + "5114039", + "5114043", + "5114081", + "5114083", + "5114096", + "5114107", + "5114128", + "5114151", + "5114159", + "5114189", + "5114192", + "5114198", + "5114295", + "5114303", + "5114311", + "5114316", + "5114317", + "5114327", + "5114340", + "5114353", + "5114394", + "5114409", + "5114425", + "5114431", + "5114435", + "5114436", + "5114439", + "5114465", + "5114892", + "5114903", + "5114912", + "5114915", + "5114921", + "5114923", + "5114930", + "5114934", + "5114946", + "5114949", + "5114950", + "5114956", + "5115046", + "5115166", + "5115167", + "5115198", + "5115381", + "5115406", + "5115500", + "5115701", + "5115771", + "5115777", + "5115854", + "5115872", + "5115874", + "5116095", + "5116128", + "5116134", + "5116145", + "5116198", + "5116252", + "5116293", + "5116332", + "5116338", + "5116353", + "5116358", + "5116395", + "5116397", + "5116412", + "5116416", + "5116475", + "5116504", + "5116698", + "5116843", + "5117189", + "5117200", + "5117245", + "5117347", + "5117348", + "5117361", + "5117399", + "5117400", + "5117414", + "5117430", + "5117463", + "5117685", + "5117687", + "5117776", + "5117779", + "5117791", + "5117805", + "5117941", + "5118046", + "5118171", + "5118223", + "5118291", + "5118327", + "5118348", + "5118396", + "5118422", + "5118459", + "5118474", + "5118509", + "5118524", + "5118565", + "5118798", + "5118828", + "5118837", + "5118841", + "5118859", + "5118892", + "5118904", + "5118934", + "5118944", + "5118949", + "5118974", + "5118996", + "5119000", + "5119009", + "5119013", + "5119016", + "5119039", + "5119046", + "5119050", + "5119143", + "5119181", + "5119193", + "5119211", + "5119223", + "5119239", + "5119245", + "5119346", + "5119349", + "5119350", + "5119353", + "5119354", + "5119482", + "5119506", + "5119513", + "5119808", + "5119868", + "5119890", + "5119893", + "5119895", + "5119905", + "5119961", + "5119969", + "5120053", + "5120058", + "5120063", + "5120278", + "5120343", + "5120357", + "5120368", + "5120379", + "5120396", + "5120453", + "5120465", + "5120577", + "5120675", + "5121046", + "5121177", + "5121613", + "5121847", + "5121850", + "5122013", + "5122037", + "5122062", + "5122086", + "5122121", + "5122131", + "5122206", + "5122293", + "5122307", + "5122430", + "5122439", + "5122455", + "5122526", + "5122538", + "5122556", + "5122571", + "5122574", + "5122581", + "5122646", + "5122647", + "5122668", + "5122683", + "5122691", + "5122696", + "5122702", + "5122798", + "5122876", + "5122969", + "5123018", + "5123042", + "5123046", + "5123137", + "5123180", + "5123221", + "5123276", + "5123339", + "5123394", + "5123419", + "5123449", + "5123461", + "5123474", + "5123485", + "5123489", + "5123542", + "5123582", + "5123615", + "5123636", + "5123663", + "5123674", + "5123676", + "5123685", + "5123701", + "5123704", + "5123707", + "5123709", + "5123775", + "5123801", + "5123837", + "5123852", + "5123870", + "5123876", + "5123884", + "5123890", + "5123922", + "5123954", + "5123956", + "5123961", + "5123968", + "5123971", + "5123979", + "5123980", + "5123983", + "5123991", + "5123996", + "5123999", + "5124000", + "5124007", + "5124029", + "5124049", + "5124050", + "5124071", + "5124080", + "5124088", + "5124093", + "5124109", + "5124118", + "5124119", + "5124136", + "5124143", + "5124147", + "5124151", + "5124172", + "5124200", + "5124208", + "5124219", + "5124232", + "5124233", + "5124249", + "5124250", + "5124268", + "5124304", + "5124332", + "5124348", + "5124352", + "5124374", + "5124415", + "5124423", + "5124433", + "5124442", + "5124443", + "5124448", + "5124450", + "5124452", + "5124468", + "5124512", + "5124557", + "5124589", + "5124595", + "5124597", + "5124598", + "5124607", + "5124673", + "5124716", + "5124813", + "5124873", + "5124880", + "5124911", + "5125075", + "5125104", + "5125118", + "5125130", + "5125306", + "5125525", + "5125545", + "5125569", + "5125591", + "5125600", + "5125602", + "5125629", + "5125633", + "5125635", + "5125689", + "5125780", + "5125916", + "5125917", + "5125939", + "5126000", + "5126013", + "5126052", + "5126204", + "5126212", + "5126217", + "5126229", + "5126231", + "5126240", + "5126241", + "5126259", + "5126284", + "5126287", + "5126292", + "5126315", + "5126332", + "5126344", + "5126352", + "5126357", + "5126376", + "5126381", + "5126396", + "5126397", + "5126398", + "5126404", + "5126434", + "5126445", + "5126454", + "5126494", + "5126517", + "5126585", + "5126635", + "5126637", + "5126663", + "5126668", + "5126675", + "5126680", + "5126697", + "5126718", + "5126721", + "5126729", + "5126751", + "5126756", + "5126785", + "5126798", + "5126834", + "5126843", + "5126870", + "5126889", + "5126892", + "5126905", + "5126922", + "5126946", + "5126958", + "5126963", + "5127020", + "5127024", + "5127039", + "5127045", + "5127054", + "5127089", + "5127094", + "5127097", + "5127107", + "5127116", + "5127118", + "5127130", + "5127170", + "5127203", + "5127222", + "5127325", + "5127335", + "5127336", + "5127337", + "5127339", + "5127350", + "5127354", + "5127355", + "5127357", + "5127378", + "5127380", + "5127394", + "5127521", + "5127562", + "5127592", + "5127595", + "5127629", + "5127631", + "5127638", + "5127644", + "5127656", + "5127669", + "5127675", + "5127680", + "5127683", + "5127688", + "5127698", + "5127748", + "5127805", + "5127814", + "5127822", + "5127835", + "5127893", + "5127916", + "5127932", + "5127955", + "5127971", + "5127998", + "5128005", + "5128007", + "5128011", + "5128034", + "5128045", + "5128067", + "5128182", + "5128224", + "5128225", + "5128232", + "5128250", + "5128266", + "5128326", + "5128353", + "5128357", + "5128363", + "5128380", + "5128432", + "5128446", + "5128475", + "5128488", + "5128519", + "5128545", + "5128569", + "5128587", + "5128597", + "5128644", + "5128663", + "5128984", + "5129000", + "5129091", + "5129190", + "5129251", + "5129257", + "5129293", + "5129374", + "5129378", + "5129387", + "5129405", + "5129417", + "5129430", + "5129432", + "5129451", + "5129473", + "5129479", + "5129480", + "5129481", + "5129489", + "5129496", + "5129502", + "5129515", + "5129517", + "5129524", + "5129531", + "5129535", + "5129544", + "5130277", + "5130296", + "5130322", + "5130326", + "5130330", + "5130335", + "5130347", + "5130369", + "5130392", + "5130393", + "5130400", + "5130439", + "5130444", + "5130448", + "5130456", + "5130464", + "5130467", + "5130471", + "5130476", + "5130487", + "5130502", + "5130514", + "5130521", + "5130528", + "5130542", + "5130548", + "5130557", + "5130559", + "5130574", + "5130587", + "5130682", + "5130696", + "5130748", + "5130775", + "5130813", + "5130814", + "5130851", + "5130908", + "5130944", + "5131058", + "5131096", + "5131142", + "5131192", + "5131256", + "5131293", + "5131339", + "5131347", + "5131372", + "5131407", + "5131442", + "5131443", + "5131467", + "5131493", + "5131495", + "5131520", + "5131540", + "5131565", + "5131597", + "5131608", + "5131910", + "5131951", + "5131957", + "5131982", + "5132003", + "5132078", + "5132079", + "5132084", + "5132137", + "5132154", + "5132183", + "5132191", + "5132239", + "5132246", + "5132252", + "5132254", + "5132283", + "5132317", + "5132346", + "5132347", + "5132360", + "5132374", + "5132398", + "5132429", + "5132440", + "5132446", + "5132505", + "5132523", + "5132540", + "5132550", + "5132917", + "5132940", + "5132956", + "5132973", + "5133008", + "5133009", + "5133035", + "5133051", + "5133088", + "5133142", + "5133251", + "5133255", + "5133265", + "5133451", + "5133503", + "5133523", + "5133565", + "5133568", + "5133581", + "5133589", + "5133591", + "5133595", + "5133609", + "5133610", + "5133615", + "5133621", + "5133622", + "5133623", + "5133634", + "5133635", + "5133687", + "5133689", + "5133693", + "5133695", + "5133736", + "5133786", + "5133864", + "5134098", + "5134301", + "5134469", + "5134517", + "5134543", + "5134559", + "5134569", + "5134583", + "5134607", + "5134621", + "5134659", + "5134661", + "5134667", + "5134682", + "5134686", + "5134687", + "5134693", + "5134759", + "5134810", + "5134815", + "5134837", + "5135026", + "5135191", + "5135355", + "5135513", + "5135546", + "5135573", + "5135643", + "5135839", + "5135944", + "5136059", + "5136113", + "5136200", + "5136306", + "5136372", + "5136594", + "5136681", + "5136713", + "5136752", + "5136790", + "5136868", + "5136939", + "5137085", + "5137086", + "5137128", + "5137156", + "5137166", + "5137257", + "5137291", + "5137330", + "5137408", + "5137511", + "5137512", + "5137540", + "5137553", + "5137578", + "5137582", + "5137588", + "5137593", + "5137595", + "5137601", + "5137605", + "5137608", + "5137612", + "5137615", + "5137626", + "5137659", + "5137663", + "5137664", + "5137672", + "5137674", + "5137677", + "5137679", + "5137682", + "5137689", + "5137693", + "5137694", + "5137695", + "5137700", + "5137706", + "5137708", + "5137711", + "5137714", + "5137747", + "5137748", + "5137763", + "5137790", + "5137791", + "5137799", + "5137800", + "5137802", + "5137803", + "5137808", + "5137819", + "5137823", + "5137827", + "5137828", + "5137832", + "5137833", + "5137842", + "5137847", + "5137849", + "5137850", + "5137851", + "5137858", + "5137861", + "5137863", + "5137882", + "5137889", + "5137890", + "5137891", + "5137894", + "5137903", + "5137920", + "5137926", + "5137932", + "5137938", + "5137945", + "5137946", + "5137949", + "5137955", + "5137988", + "5137996", + "5137998", + "5138069", + "5138200", + "5138257", + "5138387", + "5138543", + "5138561", + "5138681", + "5138701", + "5138732", + "5138743", + "5138841", + "5138929", + "5138967", + "5138984", + "5139026", + "5139029", + "5139034", + "5139040", + "5139050", + "5139064", + "5139156", + "5139201", + "5139309", + "5139357", + "5139524", + "5139578", + "5139673", + "5139864", + "5139897", + "5139898", + "5139908", + "5139909", + "5139914", + "5139928", + "5139990", + "5140006", + "5140033", + "5140054", + "5140056", + "5140063", + "5140214", + "5140244", + "5140436", + "5140443", + "5140534", + "5140561", + "5140603", + "5140627", + "5140969", + "5140980", + "5141085", + "5141144", + "5141154", + "5141163", + "5141172", + "5141177", + "5141179", + "5141185", + "5141187", + "5141188", + "5141195", + "5141197", + "5141198", + "5141199", + "5141202", + "5141212", + "5141215", + "5141216", + "5141226", + "5141230", + "5141233", + "5141234", + "5141236", + "5141242", + "5141248", + "5141250", + "5141254", + "5141262", + "5141291", + "5141297", + "5141311", + "5141317", + "5141324", + "5141340", + "5141342", + "5141344", + "5141493", + "5141501", + "5141581", + "5141590", + "5141643", + "5141650", + "5141662", + "5141677", + "5141697", + "5141743", + "5141763", + "5141795", + "5141913", + "5141924", + "5142001", + "5142006", + "5142032", + "5142061", + "5142062", + "5142067", + "5142086", + "5142130", + "5142160", + "5142166", + "5142176", + "5142213", + "5142249", + "5142254", + "5142267", + "5142269", + "5142273", + "5142283", + "5142298", + "5142300", + "5142314", + "5142317", + "5142319", + "5142328", + "5142338", + "5142352", + "5142372", + "5142394", + "5142424", + "5142436", + "5142499", + "5142583", + "5142599", + "5142725", + "5142729", + "5142730", + "5142749", + "5142822", + "5142825", + "5142829", + "5142842", + "5142870", + "5142903", + "5142948", + "5143048", + "5143049", + "5143080", + "5143107", + "5143116", + "5143129", + "5143147", + "5143232", + "5143234", + "5143241", + "5143249", + "5143266", + "5143279", + "5143284", + "5143285", + "5143303", + "5143311", + "5143315", + "5143338", + "5143354", + "5143380", + "5143384", + "5143453", + "5143477", + "5143506", + "5143511", + "5143525", + "5143586", + "5143651", + "5143657", + "5143675", + "5143697", + "5143703", + "5143944", + "5143947", + "5143952", + "5143960", + "5143964", + "5144027", + "5144092", + "5144093", + "5144129", + "5144190", + "5144196", + "5144204", + "5144227", + "5144318", + "5144345", + "5144363", + "5144381", + "5144386", + "5144407", + "5144424", + "5144426", + "5144431", + "5144457", + "5144472", + "5144499", + "5144505", + "5144534", + "5144543", + "5144554", + "5144558", + "5144564", + "5144575", + "5144583", + "5144588", + "5144593", + "5144596", + "5144633", + "5144677", + "5144721", + "5144729", + "5144782", + "5144787", + "5144805", + "5144806", + "5144864", + "5144880", + "5144900", + "5144935", + "5144936", + "5144937", + "5144942", + "5144953", + "5145009", + "5145075", + "5145078", + "5145079", + "5145136", + "5145139", + "5145186", + "5145238", + "5145255", + "5145260", + "5145269", + "5145409", + "5145422", + "5145466", + "5145495", + "5145502", + "5145503", + "5145521", + "5145522", + "5145560", + "5145713", + "5145729", + "5145842", + "5145965", + "5145998", + "5146030", + "5146038", + "5146062", + "5146082", + "5146091", + "5146179", + "5146253", + "5146262", + "5146282", + "5146294", + "5146303", + "5146305", + "5146326", + "5146342", + "5146379", + "5146389", + "5146412", + "5146420", + "5146426", + "5146434", + "5146472", + "5146476", + "5146483", + "5146496", + "5146497", + "5146508", + "5146510", + "5146525", + "5146559", + "5146566", + "5146567", + "5146578", + "5146598", + "5146599", + "5146601", + "5146608", + "5146611", + "5146651", + "5146659", + "5146677", + "5146693", + "5146720", + "5146746", + "5146752", + "5146762", + "5146774", + "5146805", + "5146820", + "5146832", + "5146833", + "5146837", + "5146842", + "5146852", + "5146856", + "5146862", + "5146880", + "5146883", + "5146894", + "5146899", + "5146908", + "5146920", + "5146927", + "5146937", + "5146946", + "5146961", + "5147002", + "5147018", + "5147038", + "5147039", + "5147041", + "5147043", + "5147046", + "5147058", + "5147062", + "5147071", + "5147099", + "5147109", + "5147114", + "5147121", + "5147139", + "5147145", + "5147150", + "5147155", + "5147160", + "5147165", + "5147171", + "5147179", + "5147193", + "5147208", + "5147211", + "5147212", + "5147225", + "5147232", + "5147245", + "5147287", + "5147306", + "5147319", + "5147354", + "5147395", + "5147415", + "5147437", + "5147441", + "5147478", + "5147492", + "5147513", + "5147516", + "5147522", + "5147534", + "5147560", + "5147608", + "5147638", + "5147681", + "5147703", + "5147713", + "5147827", + "5147834", + "5147838", + "5147858", + "5147868", + "5147871", + "5147879", + "5147883", + "5147894", + "5147898", + "5147899", + "5147909", + "5147917", + "5147923", + "5147968", + "5148043", + "5148055", + "5148096", + "5148097", + "5148184", + "5148214", + "5148223", + "5148247", + "5148248", + "5148252", + "5148264", + "5148277", + "5148280", + "5148286", + "5148379", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5148520", + "5148531", + "5148544", + "5148576", + "5148593", + "5148719", + "5148743", + "5148753", + "5148766", + "5148850", + "5148934", + "5148952", + "5148954", + "5149012", + "5149081", + "5149136", + "5149174", + "5149182", + "5149237", + "5149307", + "5149308", + "5149315", + "5149317", + "5149369", + "5149370", + "5149371", + "5149414", + "5149438", + "5149474", + "5149499", + "5149569", + "5149609", + "5149630", + "5149631", + "5149659", + "5149664", + "5149665", + "5149667", + "5149704", + "5149713", + "5149746", + "5149753", + "5149768", + "5149777", + "5149780", + "5149782", + "5149784", + "5149787", + "5149819", + "5149820", + "5149836", + "5149839", + "5149843", + "5149873", + "5149880", + "5149940", + "5149986", + "5150053", + "5150092", + "5714299", + "5714302", + "5714312", + "5714333", + "5714356", + "5714361", + "5714367", + "5714369", + "5714410", + "5714507", + "5714558", + "5714572", + "5714575", + "5714618", + "5714680", + "5714747", + "5714755", + "5714788", + "5714914", + "5714973", + "5714984", + "5714994", + "5715004", + "5715009", + "5715010", + "5715013", + "5715127", + "5715275", + "5715276", + "5715277", + "5715278", + "5715280", + "5715281", + "5734138", + "5734146", + "5734212", + "5734291", + "5734305", + "5734326", + "5734335", + "5734344", + "5734345", + "5734349", + "5734362", + "5734379", + "5734388", + "5734396", + "5734398", + "5734405", + "5734420", + "5734448", + "5734451", + "5734515", + "5734519", + "5734528", + "5734535", + "5734539", + "5734542", + "5734543", + "5734556", + "5734560", + "5734569", + "5734655", + "5734657", + "5734713", + "5734719", + "5734744", + "5734817", + "5734891", + "5734897", + "5734900", + "5734901", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771227", + "5771230", + "5771232", + "5771236", + "5771239", + "5771243", + "5771249", + "5771255", + "5771256", + "5771258", + "5771259", + "5771350", + "5771357", + "5771877", + "5771982", + "5772063", + "5772129", + "5772169", + "5772171", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772222", + "5772269", + "5772309", + "5772349", + "5772351", + "5772446", + "5772702", + "5772749", + "5772890", + "5772948", + "5792081", + "5792092", + "5802248", + "5802256", + "5802257", + "5802331", + "5802333", + "5802339", + "5802396", + "5802625", + "5803065", + "5803588", + "5804166", + "5804895", + "5805407", + "5805954", + "5806127", + "5806132", + "5806166", + "5806167", + "5806175", + "5806176", + "5806177", + "5806244", + "5806333", + "5806352", + "5806353", + "5806391", + "5806412", + "5879654", + "5880040", + "5880041", + "5880063", + "5880147", + "5880258", + "5880367", + "5880392", + "5880478", + "5880512", + "5880533", + "5880539", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5881397", + "5881400", + "5881551", + "5881748", + "5881946", + "5882039", + "5882965", + "5883052", + "5883255", + "5883881", + "5883925", + "5883985", + "5884188", + "5884243", + "5884245", + "5884247", + "5884258", + "5884571", + "5884851", + "5884888", + "5885399", + "5885428", + "5925238", + "5925317", + "5976937", + "5977179", + "5977185", + "5977197", + "5977203", + "5977207", + "5977208", + "5977214", + "5977216", + "5977220", + "5977235", + "5977247", + "5977250", + "5977251", + "5977257", + "5977259", + "5977260", + "5977261", + "5977262", + "6097214", + "6097225", + "6097228", + "6097233", + "6097234", + "6097235", + "6097236", + "6097254", + "6097260", + "6097269", + "6099041", + "6100725", + "6100726", + "6106647", + "6106744", + "6106759", + "6106943", + "6112449", + "6112547", + "6112606", + "6112610", + "6112613", + "6112634", + "6112661", + "6113873", + "6113959", + "6115283", + "6115388", + "6115426", + "6115437", + "6115504", + "6115793", + "6115822", + "6115830", + "6115946", + "6115953", + "6115973", + "6116073", + "6116341", + "6116368", + "6116440", + "6116646", + "6116661", + "6116674", + "6116699", + "6116754", + "6116899", + "6117055", + "6117124", + "6117485", + "6118530", + "6119299", + "6119323", + "6119488", + "6120803", + "6120861", + "6120980", + "6121010", + "6121184", + "6121218", + "6121912", + "6122103", + "6122301", + "6122364", + "6122527", + "6132711", + "6132712", + "6132715", + "6132723", + "6132728", + "6132729", + "6132781", + "6132797", + "6132809", + "6132824", + "6132826", + "6132841", + "6132850", + "6132868", + "6132869", + "6132915", + "6132916", + "6132917", + "6132936", + "6132938", + "6132953", + "6132957", + "6132966", + "6132967", + "6132971", + "6132974", + "6132979", + "6132989", + "6133001", + "6133002", + "6133007", + "6133011", + "6133013", + "6133026", + "6133029", + "6133033", + "6133051", + "6133058", + "6133069", + "6133075", + "6133081", + "6133083", + "6133117", + "6133141", + "6133154", + "6133158", + "6133181", + "6133182", + "6133232", + "6133241", + "6133242", + "6133244", + "6133248", + "6133252", + "6133262", + "6133264", + "6133269", + "6133270", + "6133271", + "6133292", + "6133297", + "6133311", + "6133312", + "6133313", + "6133315", + "6133317", + "6133325", + "6133340", + "6133343", + "6133397", + "6133441", + "6133481", + "6133498", + "6133500", + "6133501", + "6133502", + "6133509", + "6133513", + "6133516", + "6133517", + "6133518", + "6133519", + "6133520", + "6133523", + "6133525", + "6133528", + "6133534", + "6133540", + "6133542", + "6133546", + "6133548", + "6133552", + "6133559", + "6133560", + "6133562", + "6133575", + "6133582", + "6133585", + "6133586", + "6133591", + "6133593", + "6133595", + "6133604", + "6133607", + "6133614", + "6133619", + "6133635", + "6133637", + "6133643", + "6133648", + "6133659", + "6133667", + "6133670", + "6133673", + "6133674", + "6133676", + "6133680", + "6133681", + "6133684", + "6133687", + "6133688", + "6133691", + "6133700", + "6133720", + "6133742", + "6133750", + "6133769", + "6133777", + "6133780", + "6133803", + "6133806", + "6133809", + "6133811", + "6133813", + "6133858", + "6134027", + "6134035", + "6196939", + "6197138", + "6198302", + "6201790", + "6205994", + "6207059", + "6214734", + "6219423", + "6221746", + "6228464", + "6229058", + "6231906", + "6544581", + "6544637", + "6544687", + "7207679", + "7345742", + "7345777", + "7345801", + "7345811", + "7345813", + "7345819", + "7345829", + "7345843", + "7346231", + "7346236", + "7346237", + "7346240", + "7346249", + "7346252", + "7346256", + "7346263", + "7346276", + "7346284", + "7346286", + "7346301", + "7346328", + "7346335", + "7346340", + "7346344", + "7346346", + "7346351", + "7346354", + "7346356", + "7346381", + "7346382", + "7346384", + "7346401", + "7346407", + "7346417", + "7346426", + "7346430", + "7346434", + "7346444", + "7346446", + "7350238", + "7354189", + "7372375", + "7383338", + "7387466", + "7388922", + "7389824", + "7390086", + "7396517", + "7398419", + "7400814", + "7410701", + "7428726", + "7429212", + "7431428", + "7438067", + "7443518", + "7444489", + "7446048", + "7448174", + "7466487", + "7472845", + "7480993", + "7507369", + "7509928", + "7535515", + "7541913", + "7543006", + "7555991", + "7558165", + "7560807", + "7562564", + "7586742", + "7588222", + "7589577", + "7593392", + "7596232", + "7598729", + "7598945", + "7603634", + "7611914", + "7622059", + "7623903", + "7624468", + "7624494", + "7628188", + "7633472", + "7634721", + "7642610", + "7646066", + "7654770", + "7656811", + "7657419", + "7661023", + "7661785", + "7664111", + "7664771", + "7672864", + "7673242", + "7674502", + "7681733", + "7683096", + "7689966", + "7700512", + "7700568", + "7701550", + "7712384", + "7712938", + "7716829", + "7717385", + "7717983", + "7725644", + "7726809", + "7728366", + "7734292", + "7738295", + "7741315", + "7752082", + "7753668", + "7761138", + "7762841", + "7764232", + "7767114", + "7768584", + "7768674", + "7769543", + "7776011", + "7778368", + "7779226", + "7780930", + "7785540", + "7791190", + "7791558", + "7798382", + "7799370", + "7800469", + "7803585", + "7809779", + "7825945", + "7851302", + "7854318", + "7864212", + "7867379", + "7869346", + "7870336", + "7874258", + "7875265", + "7877231", + "7882824", + "7895336", + "7903078", + "7905361", + "7909858", + "7911151", + "7917033", + "7918000", + "7919880", + "7921916", + "7924383", + "7934873", + "7937573", + "7940536", + "7946946", + "7955974", + "7958169", + "7960566", + "7964262", + "7964910", + "7972792", + "7973517", + "7975250", + "7976145", + "7981372", + "7981386", + "7988195", + "7988274", + "7993353", + "7996464", + "8000103", + "8001799", + "8007222", + "8008237", + "8014296", + "8015612", + "8015895", + "8016522", + "8016905", + "8021109", + "8023645", + "8035998", + "8038357", + "8043500", + "8045644", + "8047165", + "8047343", + "8048904", + "8049830", + "8050639", + "8067894", + "8073674", + "8078362", + "8086347", + "8094357", + "8102790", + "8103163", + "8105817", + "8108800", + "8109173", + "8111395", + "8133328", + "8133678", + "8137978", + "8138711", + "8140883", + "8141741", + "8146570", + "8148822", + "8150089", + "8150450", + "8158342", + "8160782", + "8165185", + "8167638", + "8167743", + "8168644", + "8172949", + "8176911", + "8177775", + "8178453", + "8178854", + "8180900", + "8186212", + "8189761", + "8193562", + "8200050", + "8201251", + "8203812", + "8208583", + "8214814", + "8215326", + "8218441", + "8219149", + "8222049", + "8223165", + "8225376", + "8233062", + "8237987", + "8244266", + "8247566", + "8253467", + "8254441", + "8262357", + "8270406", + "8271010", + "8273661", + "8273859", + "8277078", + "8292351", + "8292872", + "8295666", + "8298764", + "8312017", + "8313553", + "8314088", + "8322165", + "8324720", + "8325294", + "8326103", + "8329661", + "8331687", + "8345567", + "8345820", + "8345991", + "8348761", + "8352161", + "8355390", + "8356768", + "8361848", + "8363507", + "8363709", + "8366158", + "8367663", + "8369868", + "8379616", + "8384839", + "8388883", + "8389961", + "8393082", + "8393221", + "8394261", + "8396242", + "8397564", + "8402212", + "8404037", + "8405656", + "8407461", + "8411753", + "8414310", + "8416348", + "8420632", + "8421569", + "8424964", + "8424972", + "8425580", + "8426357", + "8429622", + "8439879", + "8440999", + "8445010", + "8491927", + "8501203", + "8503184", + "8532380", + "8537359", + "8543494", + "8546322", + "8548427", + "8549720", + "8551997", + "8559137", + "8562506", + "8574752", + "8581601", + "8604089", + "8624848", + "8643155", + "8643309", + "8647523", + "8669164", + "8691947", + "8708745", + "8720118", + "8723161", + "8725248", + "8727750", + "8729319", + "8734090", + "8734154", + "8741260", + "8742426", + "8751100", + "8755207", + "8756768", + "8763986", + "8766638", + "8774985", + "8775810", + "8779506", + "8782891", + "8790054", + "8792353", + "8793278", + "8793324", + "8793873", + "8793973", + "8797666", + "8802610", + "8805966", + "8810143", + "8810912", + "8818378", + "8823068", + "8825450", + "8825467", + "8828146", + "8831819", + "8832485", + "8833509", + "8834672", + "8837162", + "8837974", + "8843927", + "8846776", + "8847500", + "8849480", + "8851663", + "8856895", + "8858121", + "8869900", + "8871600", + "8872165", + "8874140", + "8874633", + "8876855", + "8877458", + "8883183", + "8890502", + "8897869", + "8904480", + "8905759", + "8908724", + "8918036", + "8924506", + "8928353", + "8929537", + "8933773", + "8941801", + "8941993", + "8943174", + "8951523", + "8951618", + "8955839", + "8956567", + "8956729", + "8958353", + "8963926", + "8964866", + "8968321", + "8978362", + "8981028", + "8982591", + "8992718", + "9002107", + "9007213", + "9008379", + "9015218", + "9016382", + "9017206", + "9022399", + "9023222", + "9028122", + "9038042", + "9050611", + "9051758", + "9051888", + "9053308", + "9059564", + "9062262", + "9068968", + "9072828", + "9086331", + "9087922", + "9092175", + "9100030", + "9101339", + "9105656", + "9110918", + "9111961", + "9113409", + "9114044", + "9119710", + "9135821", + "9135886", + "9136904", + "9137631", + "9146244", + "9148810", + "9156165", + "9156458", + "9157410", + "9159662", + "9163659", + "9174377", + "9175037", + "9176043", + "9181627", + "9183738", + "9190731", + "9192882", + "9208233", + "9208918", + "9213204", + "9216200", + "9219266", + "9219529", + "9220953", + "9228024", + "9233420", + "9235027", + "9235225", + "9236138", + "9237031", + "9237599", + "9237621", + "9238900", + "9240216", + "9240357", + "9240588", + "9241105", + "9242559", + "9242609", + "9243117", + "9243264", + "9243764", + "9243875", + "9244066", + "9244973", + "9247563", + "9247947", + "9248329", + "9248830", + "9249036", + "9249651", + "9250744", + "9251088", + "9251096", + "9252524", + "9253819", + "9254017", + "9254157", + "9255102", + "9255328", + "9255512", + "9256436", + "9256786", + "9257793", + "9257908", + "9261296", + "9261458", + "9262981", + "9264326", + "9266866", + "9267364", + "9268082", + "9272461", + "9273409", + "9273963", + "9274899", + "9276279", + "9277294", + "9277330", + "9278311", + "9278398", + "9279670", + "9281181", + "9282469", + "9283228", + "9283948", + "9287097", + "9288185", + "9288386", + "9288596", + "9288979", + "9289753", + "9289908", + "9290866", + "9291075", + "9291092", + "9291297", + "9292394", + "9294363", + "9297059", + "9298735", + "9299326", + "9301336", + "9305011", + "9305798", + "9306367", + "9307098", + "9307254", + "9307713", + "9308082", + "9308930", + "9309575", + "9310286", + "9310369", + "9310510", + "9310626", + "9311081", + "9312545", + "9313634", + "9314022", + "9315577", + "9315833", + "9320776", + "9320916", + "9321500", + "9322646", + "9323382", + "9324570", + "9325654", + "9327042", + "9327259", + "9328683", + "9330467", + "9331464", + "9332369", + "9332550", + "9334639", + "9334851", + "9336001", + "9337858", + "9338769", + "9339487", + "9340070", + "9340452", + "9342344", + "9343385", + "9344456", + "9345545", + "9347308", + "9348210", + "9350484", + "9352348", + "9352978", + "9353360", + "9354496", + "9355107", + "9355953", + "9356491", + "9357385", + "9358521", + "9359597", + "9359871", + "9362190", + "9362560", + "9362785", + "9363692", + "9366016", + "9366762", + "9367471", + "9367674", + "9368026", + "9368398", + "9368974", + "9369576", + "9370070", + "9370312", + "9370933", + "9372988", + "9373309", + "9373686", + "9374637", + "9377268", + "9379595", + "9379855", + "9381852", + "9382044", + "9382415", + "9385576", + "9387353", + "9387782", + "9388726", + "9390065", + "9390293", + "9391442", + "9391467", + "9392058", + "9392076", + "9392084", + "9392614", + "9394138", + "9395000", + "9395261", + "9396180", + "9399145", + "9399288", + "9400545", + "9400895", + "9400916", + "9400977", + "9402536", + "9403481", + "9404919", + "9406020", + "9406822", + "9406984", + "9407200", + "9410076", + "9410414", + "9414984", + "9415435", + "9415669", + "9416645", + "9418549", + "9419734", + "9420824", + "9423248", + "9423863", + "9424082", + "9424441", + "9424464", + "9424681", + "9424853", + "9425857", + "9426054", + "9426252", + "9426771", + "9428900", + "9432438", + "9432644", + "9432810", + "9433772", + "9434954", + "9436173", + "9438677", + "9438913", + "9440183", + "9440644", + "9442902", + "9443159", + "9445489", + "9446281", + "9446902", + "9447614", + "9448761", + "9449132", + "9451320", + "9452274", + "9452497", + "9452702", + "9453490", + "9454052", + "9454291", + "9454444", + "9455404", + "9456004", + "9456735", + "9457324", + "9457757", + "9460510", + "9463442", + "9465978", + "9468297", + "9468667", + "9469139", + "9469300", + "9469928", + "9471709", + "9473121", + "9473918", + "9474256", + "9474405", + "9477531", + "9478331", + "9478424", + "9478718", + "9479525", + "9480768", + "9484411", + "9485481", + "9486293", + "9486411", + "9488754", + "9488783", + "9489399", + "9491341", + "9492499", + "9492640", + "9493016", + "9493317", + "9494431", + "9494526", + "9495306", + "9496311", + "9496896", + "9497623", + "9498206", + "9499599", + "9500553", + "9500945", + "9502606", + "9502724", + "9503548", + "9504222", + "9508913", + "9511345", + "9511749", + "9512631", + "9513830", + "9516038", + "9516680", + "9517291", + "9519191", + "9519321", + "9520799", + "9524458", + "9525172", + "9526331", + "9527919", + "9530135", + "9530200", + "9530271", + "9530406", + "9530928", + "9530977", + "9533271", + "9533293", + "9534291", + "9534429", + "9534690", + "9535420", + "9538525", + "9538684", + "9539128", + "9539292", + "9541133", + "9541734", + "9541908", + "9544337", + "9544558", + "9545331", + "9545480", + "9545713", + "9546514", + "9546910", + "9547140", + "9547535", + "9547676", + "9548726", + "9548993", + "9549172", + "9549475", + "9550265", + "9551544", + "9552253", + "9552466", + "9552703", + "9553692", + "9554074", + "9555094", + "9556427", + "9558845", + "9558873", + "9559336", + "9560018", + "9560404", + "9560782", + "9561820", + "9562175", + "9563355", + "9563837", + "9564612", + "9564779", + "9565980", + "9568710", + "9571514", + "9573163", + "9574801", + "9574939", + "9577234", + "9577547", + "9578319", + "9579309", + "9579730", + "9581695", + "9581976", + "9586329", + "9586705", + "9589234", + "9590057", + "9590066", + "9590272", + "9591877", + "9592714", + "9593098", + "9593393", + "9593475", + "9594509", + "9595155", + "9596498", + "9597741", + "9599150", + "9601788", + "9604825", + "9606779", + "9607036", + "9607447", + "9608673", + "9610059", + "9610080", + "9610447", + "9611624", + "9612009", + "9616658", + "9617411", + "9617496", + "9618068", + "9619088", + "9621086", + "9621113", + "9621271", + "9622117", + "9622725", + "9622955", + "9623131", + "9623220", + "9624918", + "9625112", + "9626037", + "9626500", + "9627567", + "9627917", + "9629365", + "9629450", + "9630748", + "9632824", + "9633615", + "9634575", + "9636267", + "9636442", + "9637664", + "9645309", + "9663271", + "9674732", + "9675743", + "9686431", + "9689122", + "9700261", + "9724183", + "9734171", + "9745549", + "9746673", + "9748079", + "9749806", + "9752950", + "9754232", + "9755262", + "9759340", + "9760511", + "9776414", + "9777614", + "9778438", + "9782192", + "9790007", + "9792270", + "9801765", + "9803522", + "9804158", + "9805848", + "9807789", + "9812211", + "9816676", + "9819403", + "9826405", + "9830270", + "9833933", + "9835867", + "9836014", + "9837762", + "9840570", + "9849625", + "9851221", + "9851261", + "9851867", + "9852545", + "9857679", + "9858922", + "9859868", + "9860684", + "9860902", + "9864281", + "9867379", + "9875111", + "9875141", + "9880932", + "9882683", + "9883140", + "9883274", + "9883856", + "9885192", + "9890366", + "9893740", + "9894093", + "9895629", + "9896144", + "9899724", + "9904499", + "9906229", + "9906979", + "9909775", + "9911298", + "9913863", + "9914882", + "9916153", + "9919915", + "9921001", + "9923283", + "9925669", + "9927378", + "9932090", + "9935837", + "9939530", + "9941073", + "9942354", + "9943941", + "9944922", + "9948031", + "9950697", + "9952043", + "9953708", + "9954885", + "9956017", + "9957790", + "9958147", + "9959898", + "9960072", + "9960318", + "9963153", + "9964857", + "9967251", + "9967529", + "9968404", + "9971153", + "9972403", + "9973217", + "9975134", + "9976926", + "9977181", + "9981187", + "9983244", + "9983957", + "9985020", + "9987116", + "9988287", + "9989156", + "9994384", + "9998920", + "9999965" + ], + "zero/genus": [ + "10017524", + "10025997", + "10175914", + "10268975", + "10272567", + "10283055", + "10330071", + "10381192", + "10416544", + "10484957", + "10494601", + "10527924", + "10552471", + "10583848", + "10777718", + "10800539", + "10836135", + "10836231", + "10864898", + "10874367", + "10874844", + "10876650", + "10903022", + "10956237", + "10962816", + "10965723", + "10976134", + "10988777", + "10990846", + "11024850", + "11027113", + "11057282", + "11064851", + "11070822", + "11425419", + "11442724", + "11462628", + "11486436", + "11491719", + "11495707", + "11527985", + "11556078", + "11596224", + "11654220", + "11715392", + "11748480", + "11760262", + "11760445", + "11783346", + "11879268", + "11902924", + "11907720", + "11954625", + "11955428", + "12031311", + "12047421", + "12076089", + "12105049", + "1214429", + "12152411", + "12206130", + "12225180", + "12246183", + "12260643", + "1369661", + "1555575", + "1730471", + "1730685", + "1730705", + "1730737", + "1730763", + "1730815", + "1730935", + "1731096", + "1731220", + "1731226", + "1731291", + "1731363", + "1731505", + "1731584", + "1731712", + "1731748", + "1731800", + "1731817", + "1731859", + "1731885", + "1731891", + "1732047", + "1732062", + "1732085", + "1732089", + "1732160", + "1732397", + "1732442", + "1732496", + "1732599", + "1732658", + "1732661", + "1732761", + "1732814", + "1732834", + "1732862", + "1732883", + "1732969", + "1733135", + "1733242", + "1733338", + "1733502", + "1733524", + "1733529", + "1733574", + "1733617", + "1733670", + "1733831", + "1733840", + "1734381", + "1734388", + "1734505", + "1734548", + "1734683", + "1734849", + "1734934", + "1735093", + "1735256", + "1735272", + "1735289", + "1735406", + "1735409", + "1735487", + "1735631", + "1735652", + "1735814", + "1735869", + "1736266", + "1736314", + "1736354", + "1736359", + "1736388", + "1736409", + "1736418", + "1736444", + "1736460", + "1736612", + "1736656", + "1736725", + "1736758", + "1736793", + "1736802", + "1736834", + "1736895", + "1736951", + "1737021", + "1737063", + "1737084", + "1737110", + "1737177", + "1737228", + "1737303", + "1737335", + "1737519", + "1737647", + "1737701", + "1738021", + "1738049", + "1738065", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1738881", + "1739000", + "1739048", + "1739060", + "1739336", + "1739398", + "1739418", + "1739446", + "1739550", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1740796", + "1740814", + "1741043", + "1741073", + "1741082", + "1741128", + "1741141", + "1741314", + "1741338", + "1741383", + "1741404", + "1741540", + "1741547", + "1741557", + "1741585", + "1741717", + "1741805", + "1742045", + "1742061", + "1742345", + "1742398", + "1742419", + "1743173", + "1743188", + "1743269", + "1743318", + "1743343", + "1743404", + "1743452", + "1743459", + "1743467", + "1743485", + "1743516", + "1743637", + "1743652", + "1743656", + "1743673", + "1743690", + "1743762", + "1743811", + "1743926", + "1743994", + "1744049", + "1744129", + "1744133", + "1744165", + "1744208", + "1744219", + "1744237", + "1744240", + "1744481", + "1744587", + "1744687", + "1744691", + "1744761", + "1744928", + "1744946", + "1744993", + "1745017", + "1745021", + "1745076", + "1745086", + "1745285", + "1745549", + "1745894", + "1745922", + "1745927", + "1746012", + "1746172", + "1746324", + "1746399", + "1746437", + "1746461", + "1746562", + "1746600", + "1746694", + "1746712", + "1746749", + "1746994", + "1747019", + "1747044", + "1747067", + "1747122", + "1747195", + "1747209", + "1747242", + "1747506", + "1747611", + "1747625", + "1747723", + "1747904", + "1747949", + "1748099", + "1748143", + "1748201", + "1748277", + "1748368", + "1748560", + "1748645", + "1748748", + "1748757", + "1748777", + "1748799", + "1748889", + "1748902", + "1749042", + "1749068", + "1749116", + "1749137", + "1749286", + "1749401", + "1749505", + "1749662", + "1749712", + "1749732", + "1750313", + "1750339", + "1750759", + "1751200", + "1751227", + "1751482", + "1751552", + "1751655", + "1751789", + "1751846", + "1751979", + "1752035", + "1752100", + "1752158", + "1752234", + "1752236", + "1752277", + "1752321", + "1752361", + "1752382", + "1752482", + "1752533", + "1752552", + "1752650", + "1752744", + "1752804", + "1752820", + "1752848", + "1752891", + "1752899", + "1752915", + "1752944", + "1752965", + "1753080", + "1753104", + "1753147", + "1753211", + "1753224", + "1753410", + "1753458", + "1753548", + "1753594", + "1753630", + "1753657", + "1753747", + "1753802", + "1753826", + "1753830", + "1753896", + "1753921", + "1753981", + "1754133", + "1754176", + "1754253", + "1754269", + "1754315", + "1754329", + "1754344", + "1754391", + "1754412", + "1754508", + "1754609", + "1754799", + "1754857", + "1754901", + "1754916", + "1754927", + "1755149", + "1755233", + "1755294", + "1757647", + "1757668", + "1757834", + "1757850", + "1757883", + "1757993", + "1758098", + "1758439", + "1758446", + "1758610", + "1758620", + "1758718", + "1758724", + "1758765", + "1758790", + "1758812", + "1758827", + "1758859", + "1758873", + "1758939", + "1759029", + "1759152", + "1759329", + "1759405", + "1759552", + "1759711", + "1759767", + "1759797", + "1759812", + "1759878", + "1759882", + "1760088", + "1760135", + "1760168", + "1760198", + "1760260", + "1760285", + "1760355", + "1760382", + "1760401", + "1760447", + "1760583", + "1760588", + "1760678", + "1760738", + "1760849", + "1760914", + "1760928", + "1760946", + "1760969", + "1761017", + "1761094", + "1761132", + "1761207", + "1761351", + "1761388", + "1761401", + "1761495", + "1761539", + "1761550", + "1761561", + "1761571", + "1761728", + "1761750", + "1761775", + "1761787", + "1761797", + "1761815", + "1761829", + "1761857", + "1761889", + "1762149", + "1762194", + "1762212", + "1762225", + "1762232", + "1762280", + "1762346", + "1762414", + "1762605", + "1762640", + "1762666", + "1762711", + "1762841", + "1762885", + "1762898", + "1763151", + "1763285", + "1763588", + "1763591", + "1763597", + "1763649", + "1763693", + "1763713", + "1763777", + "1763951", + "1764015", + "1764140", + "1764158", + "1764187", + "1764234", + "1764504", + "1764524", + "1764537", + "1764638", + "1764670", + "1764684", + "1764737", + "1764851", + "1764916", + "1764920", + "1765092", + "1765161", + "1765176", + "1765207", + "1765601", + "1765652", + "1765657", + "1765726", + "1765763", + "1765861", + "1765877", + "1765949", + "1765960", + "1766066", + "1766077", + "1766123", + "1766234", + "1766259", + "1766265", + "1766280", + "1766366", + "1766538", + "1766547", + "1766624", + "1766671", + "1766708", + "1766838", + "1766883", + "1766908", + "1766914", + "1767029", + "1767032", + "1767046", + "1767093", + "1767210", + "1767304", + "1767334", + "1767360", + "1767483", + "1767496", + "1767504", + "1767509", + "1767566", + "1767590", + "1767644", + "1767714", + "1767752", + "1767796", + "1767878", + "1767949", + "1768106", + "1768130", + "1768136", + "1768165", + "1768222", + "1768281", + "1768302", + "1768411", + "1768432", + "1768542", + "1768561", + "1768579", + "1768691", + "1768896", + "1768949", + "1768971", + "1768999", + "1769024", + "1769051", + "1769098", + "1769110", + "1769165", + "1769189", + "1769208", + "1769212", + "1769311", + "1769330", + "1769393", + "1769504", + "1769735", + "1769812", + "1769819", + "1769933", + "1769943", + "1769945", + "1769972", + "1770011", + "1770123", + "1770169", + "1770274", + "1770379", + "1770396", + "1770488", + "1770592", + "1770658", + "1771356", + "1771363", + "1771448", + "1771454", + "1771501", + "1771541", + "1771549", + "1771562", + "1771845", + "1771850", + "1771866", + "1771871", + "1771881", + "1771972", + "1771980", + "1772042", + "1772053", + "1772092", + "1772151", + "1772155", + "1772253", + "1772259", + "1772349", + "1772359", + "1772421", + "1772425", + "1772445", + "1772455", + "1772540", + "1772660", + "1772714", + "1772783", + "1772826", + "1772926", + "1773740", + "1773781", + "1773846", + "1773983", + "1774090", + "1774237", + "1774251", + "1774256", + "1774309", + "1774357", + "1774366", + "1774573", + "1774778", + "1774846", + "1774853", + "1774906", + "1774917", + "1774940", + "1774947", + "1775029", + "1775058", + "1775081", + "1775144", + "1775149", + "1775234", + "1775285", + "1775298", + "1775310", + "1775505", + "1775624", + "1775633", + "1775663", + "1775833", + "1775864", + "1775887", + "1775910", + "1775959", + "1775969", + "1775975", + "1775986", + "1776166", + "1776168", + "1776181", + "1776205", + "1776246", + "1776299", + "1776391", + "1776454", + "1776498", + "1776576", + "1776846", + "1776978", + "1777014", + "1777101", + "1777140", + "1777156", + "1777174", + "1777243", + "1777260", + "1777277", + "1777560", + "1777629", + "1777724", + "1777734", + "1777760", + "1777863", + "1777868", + "1777907", + "1777925", + "1777971", + "1778073", + "1778108", + "1778114", + "1778136", + "1778156", + "1778332", + "1778406", + "1778497", + "1778527", + "1778544", + "1778574", + "1778600", + "1778626", + "1778686", + "1778695", + "1779253", + "1779398", + "1779429", + "1779445", + "1779611", + "1779630", + "1779666", + "1779682", + "1779739", + "1779957", + "1780042", + "1780068", + "1780139", + "1780207", + "1780269", + "1780300", + "1780615", + "1780700", + "1780844", + "1780855", + "1780861", + "1780913", + "1781027", + "1781044", + "1781086", + "1781160", + "1781226", + "1781546", + "1781630", + "1781683", + "1781695", + "1781924", + "1781971", + "1782029", + "1782041", + "1782106", + "1782167", + "1782184", + "1782205", + "1782317", + "1782325", + "1782330", + "1782414", + "1782456", + "1782460", + "1782522", + "1782524", + "1782594", + "1782607", + "1782659", + "1783087", + "1783166", + "1783299", + "1783311", + "1783337", + "1783344", + "1783367", + "1783394", + "1783651", + "1783739", + "1783783", + "1783838", + "1783845", + "1783880", + "1783931", + "1783955", + "1784240", + "1784275", + "1784342", + "1784356", + "1784395", + "1784645", + "1784686", + "1784696", + "1784759", + "1784809", + "1784892", + "1785140", + "1785216", + "1785279", + "1785281", + "1785305", + "1785398", + "1785439", + "1785723", + "1785726", + "1785742", + "1785830", + "1785833", + "1785873", + "1785909", + "1785931", + "1786031", + "1786211", + "1786307", + "1786313", + "1786329", + "1786447", + "1786454", + "1786513", + "1786563", + "1786570", + "1786601", + "1786710", + "1786730", + "1786807", + "1786859", + "1786886", + "1786909", + "1786930", + "1786955", + "1787011", + "1787061", + "1787105", + "1787107", + "1787399", + "1787427", + "1787496", + "1787522", + "1787996", + "1788033", + "1788044", + "1788051", + "1788069", + "1788100", + "1788138", + "1788243", + "1788326", + "1788411", + "1788466", + "1788535", + "1788663", + "1788678", + "1788719", + "1788724", + "1788764", + "1788807", + "1788844", + "1788860", + "1788916", + "1788941", + "1789056", + "1789061", + "1789150", + "1789189", + "1789210", + "1789222", + "1789246", + "1789286", + "1789407", + "1789474", + "1789493", + "1789503", + "1789545", + "1789602", + "1789628", + "1789643", + "1789671", + "1789793", + "1789826", + "1789953", + "1789978", + "1790228", + "1790322", + "1790328", + "1790337", + "1790356", + "1790449", + "1790601", + "1790683", + "1790726", + "1790784", + "1790791", + "1790794", + "1790829", + "1790837", + "1790850", + "1790931", + "1790999", + "1791093", + "1791152", + "1791180", + "1791315", + "1791371", + "1791378", + "1791382", + "1791497", + "1791585", + "1791654", + "1791678", + "1791696", + "1791769", + "1791792", + "1791827", + "1791843", + "1791861", + "1791874", + "1792055", + "1792199", + "1792250", + "1792270", + "1792280", + "1792316", + "1792324", + "1792405", + "1792635", + "1792687", + "1792712", + "1792752", + "1792764", + "1792816", + "1792825", + "1792984", + "1793188", + "1793190", + "1793222", + "1793290", + "1793320", + "1793366", + "1793417", + "1793452", + "1793571", + "1793603", + "1793660", + "1793684", + "1793697", + "1793856", + "1793887", + "1793981", + "1794099", + "1794349", + "1794423", + "1794496", + "1794509", + "1794512", + "1794529", + "1794570", + "1794630", + "1795041", + "1795061", + "1795072", + "1795103", + "1795126", + "1795443", + "1795478", + "1795656", + "1795782", + "1796204", + "1796209", + "1796225", + "1796256", + "1796272", + "1796302", + "1796328", + "1796358", + "1796408", + "1796469", + "1796639", + "1796782", + "1796837", + "1796957", + "1796971", + "1797038", + "1797073", + "1797586", + "1797726", + "1797730", + "1798007", + "1798027", + "1798083", + "1798089", + "1798097", + "1798277", + "1798308", + "1798340", + "1798362", + "1798377", + "1798421", + "1798440", + "1798478", + "1798509", + "1798514", + "1798902", + "1799163", + "1799180", + "1799416", + "1799429", + "1799669", + "1799687", + "1799702", + "1799723", + "1799771", + "1799789", + "1799868", + "1799993", + "1800016", + "1800085", + "1800142", + "1800236", + "1800430", + "1800437", + "1800464", + "1800482", + "1800518", + "1800523", + "1800542", + "1800639", + "1800662", + "1800668", + "1800838", + "1800845", + "1800870", + "1800879", + "1800891", + "1800918", + "1800952", + "1800985", + "1800996", + "1801046", + "1801072", + "1801082", + "1801085", + "1801146", + "1801195", + "1801203", + "1801278", + "1801431", + "1801449", + "1801758", + "1801990", + "1802070", + "1802118", + "1802159", + "1802213", + "1802234", + "1802269", + "1802330", + "1802660", + "1802775", + "1802779", + "1802864", + "1802886", + "1802894", + "1802935", + "1802997", + "1803137", + "1803474", + "1803699", + "1803780", + "1803812", + "1803951", + "1804321", + "1804391", + "1804414", + "1804474", + "1804500", + "1804552", + "1804609", + "1804645", + "1804714", + "1804755", + "1804829", + "1804905", + "1804961", + "1805025", + "1805088", + "1805171", + "1805233", + "1805340", + "1805496", + "1805498", + "1805536", + "1805680", + "1805688", + "1805749", + "1805805", + "1805917", + "1806046", + "1806123", + "1806539", + "1806678", + "1806703", + "1806731", + "1806813", + "1806818", + "1806869", + "1806884", + "1806935", + "1807195", + "1807270", + "1807288", + "1807352", + "1807453", + "1807502", + "1807552", + "1807557", + "1807878", + "1807965", + "1808083", + "1808097", + "1808588", + "1808720", + "1808910", + "1808961", + "1809017", + "1809035", + "1809063", + "1809069", + "1809113", + "1809124", + "1809150", + "1809201", + "1809226", + "1809292", + "1809304", + "1809307", + "1809346", + "1809379", + "1809452", + "1809913", + "1809946", + "1809948", + "1809950", + "1810097", + "1810107", + "1810140", + "1810463", + "1810465", + "1810505", + "1810530", + "1810734", + "1810746", + "1810845", + "1810849", + "1810852", + "1810969", + "1810973", + "1811436", + "1811507", + "1811612", + "1811679", + "1812433", + "1812492", + "1812534", + "1812649", + "1812874", + "1812976", + "1813237", + "1813262", + "1814095", + "1814174", + "1814314", + "1814401", + "1814534", + "1814563", + "1814595", + "1814654", + "1814799", + "1814885", + "1814969", + "1815226", + "1815259", + "1815337", + "1815380", + "1815439", + "1815844", + "1815859", + "1815923", + "1816024", + "1816417", + "1816564", + "1816799", + "1816867", + "1816956", + "1817060", + "1817084", + "1817136", + "1817669", + "1817786", + "1817807", + "1817809", + "1817848", + "1817918", + "1817933", + "1818401", + "1818428", + "1818431", + "1818477", + "1818650", + "1818989", + "1819125", + "1819252", + "1819276", + "1819372", + "1819648", + "1819696", + "1819785", + "1819865", + "1819968", + "1820080", + "1820270", + "1820536", + "1820708", + "1821441", + "1822129", + "1822137", + "1822252", + "1822307", + "1822481", + "1822545", + "1822666", + "1822778", + "1822912", + "1823292", + "1823440", + "1823479", + "1823488", + "1823572", + "1823574", + "1823601", + "1823616", + "1823667", + "1823698", + "1823714", + "1824079", + "1824090", + "1824237", + "1824246", + "1824253", + "1824255", + "1824279", + "1824326", + "1824336", + "1824350", + "1824384", + "1824440", + "1824562", + "1824749", + "1824762", + "1824842", + "1824870", + "1825057", + "1825076", + "1825121", + "1825216", + "1825235", + "1825334", + "1825340", + "1825424", + "1825444", + "1825535", + "1825551", + "1825734", + "1825783", + "1825887", + "1825946", + "1825951", + "1825963", + "1826021", + "1826045", + "1826053", + "1826107", + "1826124", + "1826153", + "1826180", + "1826192", + "1826217", + "1826417", + "1826511", + "1826572", + "1826650", + "1827099", + "1827111", + "1827158", + "1827279", + "1827342", + "1827405", + "1827428", + "1827482", + "1827506", + "1827539", + "1827547", + "1827641", + "1827686", + "1827708", + "1827714", + "1827772", + "1827798", + "1827827", + "1828102", + "1828161", + "1828267", + "1828308", + "1828314", + "1828383", + "1828394", + "1828435", + "1828463", + "1828636", + "1828802", + "1828825", + "1828975", + "1829019", + "1829282", + "1829298", + "1829472", + "1829593", + "1829658", + "1829702", + "1830030", + "1830036", + "1830098", + "1830118", + "1830355", + "1830379", + "1830497", + "1830507", + "1830630", + "1830657", + "1830799", + "1830873", + "1830909", + "1831096", + "1831127", + "1831270", + "1831272", + "1831446", + "1831720", + "1831747", + "1831773", + "1831776", + "1831858", + "1831868", + "1832142", + "1832233", + "1832249", + "1832512", + "1832608", + "1832635", + "1832647", + "1832810", + "1833468", + "1833476", + "1833495", + "1833543", + "1833560", + "1833568", + "1833578", + "1833623", + "1833651", + "1833778", + "1833818", + "1834426", + "1834431", + "1834515", + "1834551", + "1834557", + "1834588", + "1834598", + "1834737", + "1834792", + "1834827", + "1835027", + "1835064", + "1835077", + "1835084", + "1835118", + "1835151", + "1835346", + "1835366", + "1835429", + "1835465", + "1835499", + "1835546", + "1835599", + "1835641", + "1835688", + "1835789", + "1835812", + "1835818", + "1835820", + "1835832", + "1836865", + "1836870", + "1836898", + "1836903", + "1837045", + "1837050", + "1837148", + "1837168", + "1837338", + "1837568", + "1837645", + "1837649", + "1837723", + "1837816", + "1837898", + "1837967", + "1838053", + "1838074", + "1838215", + "1838242", + "1838332", + "1838338", + "1838624", + "1838956", + "1838964", + "1839010", + "1839258", + "1839316", + "1839385", + "1839399", + "1839559", + "1839565", + "1839598", + "1839623", + "1839652", + "1839706", + "1839730", + "1839906", + "1840063", + "1840223", + "1840257", + "1840273", + "1840664", + "1841075", + "1841152", + "1841169", + "1841220", + "1841259", + "1841294", + "1841301", + "1841303", + "1841459", + "1841475", + "1841486", + "1841529", + "1842085", + "1842184", + "1842261", + "1842436", + "1842479", + "1842684", + "1842699", + "1842803", + "1842889", + "1843000", + "1843441", + "1843479", + "1843855", + "1843887", + "1843897", + "1845266", + "1845791", + "1845807", + "1845950", + "1845958", + "1845981", + "1846006", + "1846094", + "1846239", + "1846311", + "1846350", + "1846370", + "1846392", + "1846480", + "1846510", + "1846586", + "1846636", + "1846848", + "1846907", + "1847533", + "1847591", + "1847866", + "1847914", + "1847952", + "1847974", + "1848019", + "1848113", + "1848149", + "1848192", + "1848217", + "1848253", + "1848374", + "1848475", + "1848582", + "1848634", + "1848660", + "1848677", + "1848843", + "1849005", + "1849103", + "1849117", + "1849249", + "1849256", + "1849449", + "1849474", + "1849514", + "1849528", + "1849628", + "1849652", + "1849663", + "1849983", + "1850022", + "1850144", + "1850224", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850669", + "1850689", + "1850721", + "1850762", + "1850769", + "1850777", + "1850790", + "1850865", + "1851038", + "1851049", + "1851201", + "1851212", + "1851293", + "1851334", + "1851406", + "1851496", + "1851662", + "1851754", + "1851826", + "1852064", + "1852133", + "1852176", + "1852212", + "1852315", + "1852327", + "1852379", + "1852416", + "1852499", + "1852745", + "1852897", + "1852917", + "1853060", + "1853074", + "1853161", + "1853239", + "1853306", + "1853431", + "1853516", + "1853563", + "1853643", + "1854016", + "1854023", + "1854108", + "1854160", + "1854245", + "1854255", + "1854280", + "1854326", + "1854387", + "1854459", + "1854565", + "1854610", + "1854789", + "1854815", + "1854845", + "1854905", + "1854910", + "1854934", + "1855231", + "1855355", + "1855383", + "1855394", + "1855624", + "1855745", + "1855776", + "1855800", + "1855955", + "1856000", + "1856086", + "1856286", + "1856344", + "1856367", + "1856382", + "1856393", + "1856417", + "1856514", + "1856554", + "1856563", + "1856580", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1856880", + "1857014", + "1857207", + "1857231", + "1857569", + "1857624", + "1857689", + "1857773", + "1857782", + "1857808", + "1857825", + "1857968", + "1858055", + "1858281", + "1858294", + "1858396", + "1858522", + "1858529", + "1858556", + "1858614", + "1858636", + "1858640", + "1858658", + "1858672", + "1858684", + "1858716", + "1858722", + "1858866", + "1858921", + "1859036", + "1859059", + "1859070", + "1859082", + "1859284", + "1859311", + "1859451", + "1859454", + "1859503", + "1859540", + "1859547", + "1859925", + "1859936", + "1860010", + "1860060", + "1860106", + "1860109", + "1860181", + "1860256", + "1860403", + "1860411", + "1860613", + "1860657", + "1860720", + "1860732", + "1861151", + "1861387", + "1861408", + "1861428", + "1861448", + "1861476", + "1861483", + "1861543", + "1861552", + "1861578", + "1861601", + "1861607", + "1861659", + "1861757", + "1861768", + "1861796", + "1861878", + "1861897", + "1861930", + "1861962", + "1861971", + "1861997", + "1862020", + "1862031", + "1862058", + "1862076", + "1862247", + "1862280", + "1862288", + "1862391", + "1862420", + "1862542", + "1862560", + "1862568", + "1862655", + "1862681", + "1862914", + "1862922", + "1863017", + "1863031", + "1863074", + "1863091", + "1863101", + "1863132", + "1863163", + "1863281", + "1863292", + "1863349", + "1863351", + "1863363", + "1863382", + "1863385", + "1863395", + "1863411", + "1863413", + "1863457", + "1863583", + "1863638", + "1863644", + "1863647", + "1863693", + "1863697", + "1863702", + "1863713", + "1863752", + "1863755", + "1863825", + "1863827", + "1863846", + "1863852", + "1863877", + "1863942", + "1863953", + "1863956", + "1864124", + "1864132", + "1864141", + "1864153", + "1864203", + "1864258", + "1864315", + "1864355", + "1864404", + "1864537", + "1864562", + "1864584", + "1864760", + "1864782", + "1864813", + "1864888", + "1864901", + "1865097", + "1865294", + "1865361", + "1865411", + "1865543", + "1865647", + "1865704", + "1865750", + "1865826", + "1865838", + "1865859", + "1865866", + "1865923", + "1865957", + "1866221", + "1866248", + "1866293", + "1866333", + "1866345", + "1866416", + "1866475", + "1866597", + "1866812", + "1866898", + "1866912", + "1866984", + "1867018", + "1867046", + "1867268", + "1867280", + "1867305", + "1867343", + "1867412", + "1867481", + "1867545", + "1867669", + "1867674", + "1867739", + "1867761", + "1867780", + "1867783", + "1867810", + "1867983", + "1867998", + "1868017", + "1868048", + "1868162", + "1868207", + "1868327", + "1868353", + "1868393", + "1868427", + "1868491", + "1868497", + "1868520", + "1868532", + "1868563", + "1868660", + "1868834", + "1868875", + "1868887", + "1869041", + "1869056", + "1869176", + "1869237", + "1869255", + "1869358", + "1869438", + "1869504", + "1869593", + "1869643", + "1869653", + "1869664", + "1869690", + "1869760", + "1869823", + "1869851", + "1869974", + "1870028", + "1870168", + "1870229", + "1870242", + "1870302", + "1870413", + "1870421", + "1870449", + "1870504", + "1870697", + "1870714", + "1870982", + "1871131", + "1871172", + "1871206", + "1871366", + "1871384", + "1871413", + "1871446", + "1871456", + "1871596", + "1871604", + "1871695", + "1871753", + "1871761", + "1871764", + "1871825", + "1871885", + "1871922", + "1871939", + "1871986", + "1872162", + "1872209", + "1872254", + "1872346", + "1872446", + "1872465", + "1872468", + "1872509", + "1872602", + "1872732", + "1872845", + "1873021", + "1873074", + "1873212", + "1873259", + "1873280", + "1873310", + "1873335", + "1873372", + "1873374", + "1873396", + "1873408", + "1873583", + "1873619", + "1873642", + "1873750", + "1873755", + "1873763", + "1873768", + "1873775", + "1873830", + "1873980", + "1874141", + "1874152", + "1874309", + "1874374", + "1874450", + "1874624", + "1874935", + "1874958", + "1875103", + "1875317", + "1875450", + "1875477", + "1875532", + "1875600", + "1875650", + "1875821", + "1875840", + "1875849", + "1875890", + "1876167", + "1876280", + "1876391", + "1876474", + "1876511", + "1876536", + "1876547", + "1876588", + "1876613", + "1876663", + "1876846", + "1876889", + "1876920", + "1876954", + "1876978", + "1876990", + "1877001", + "1877036", + "1877266", + "1877274", + "1877292", + "1877401", + "1877430", + "1877452", + "1877472", + "1877491", + "1877495", + "1877536", + "1877619", + "1877650", + "1877771", + "1877937", + "1878008", + "1878156", + "1878171", + "1878192", + "1878317", + "1878365", + "1878404", + "1878460", + "1878522", + "1878578", + "1878610", + "1878653", + "1878661", + "1878678", + "1878743", + "1878750", + "1878757", + "1878808", + "1878812", + "1878835", + "1878838", + "1878989", + "1879124", + "1879138", + "1879226", + "1879271", + "1879334", + "1879355", + "1879396", + "1879428", + "1879435", + "1879451", + "1879463", + "1879487", + "1879494", + "1879512", + "1879809", + "1879915", + "1880172", + "1880351", + "1880354", + "1880423", + "1880436", + "1880444", + "1880501", + "1880506", + "1880703", + "1880744", + "1880848", + "1880855", + "1880878", + "1880977", + "1881078", + "1881085", + "1881092", + "1881102", + "1881145", + "1881167", + "1881178", + "1881186", + "1881206", + "1881226", + "1881296", + "1881319", + "1881357", + "1881484", + "1881495", + "1881521", + "1881601", + "1881764", + "1881804", + "1881825", + "1881858", + "1881870", + "1882019", + "1882028", + "1882213", + "1882239", + "1882249", + "1882263", + "1882314", + "1882354", + "1882413", + "1882752", + "1882757", + "1882784", + "1882809", + "1882877", + "1882900", + "1882902", + "1882925", + "1883019", + "1883022", + "1883064", + "1883116", + "1883132", + "1883364", + "1883373", + "1883417", + "1883459", + "1883586", + "1883632", + "1883698", + "1883828", + "1883872", + "1883890", + "1883941", + "1883950", + "1883962", + "1883990", + "1884002", + "1884090", + "1884194", + "1884225", + "1884236", + "1884425", + "1884486", + "1884679", + "1884683", + "1884687", + "1884699", + "1884771", + "1884810", + "1884842", + "1884886", + "1884895", + "1884921", + "1884933", + "1884939", + "1884996", + "1885008", + "1885027", + "1885190", + "1885256", + "1885564", + "1885588", + "1885639", + "1885697", + "1885731", + "1885739", + "1885792", + "1885916", + "1885924", + "1885944", + "1885946", + "1886069", + "1886102", + "1886248", + "1886261", + "1886268", + "1886289", + "1886376", + "1886474", + "1886505", + "1886576", + "1886591", + "1886649", + "1886699", + "1886711", + "1886725", + "1886760", + "1886832", + "1886921", + "1886948", + "1886993", + "1887021", + "1887028", + "1887048", + "1887269", + "1887308", + "1887335", + "1887457", + "1887460", + "1887463", + "1887501", + "1887564", + "1887573", + "1887584", + "1887632", + "1887640", + "1887682", + "1887721", + "1888041", + "1888256", + "1888291", + "1888299", + "1888308", + "1888334", + "1888342", + "1888406", + "1888428", + "1888451", + "1888455", + "1888536", + "1888562", + "1888578", + "1888594", + "1888618", + "1888641", + "1888688", + "1888698", + "1888885", + "1888933", + "1888956", + "1889037", + "1889065", + "1889233", + "1889266", + "1889286", + "1889343", + "1889366", + "1889380", + "1889533", + "1889540", + "1889551", + "1889900", + "1889936", + "1890026", + "1890044", + "1890053", + "1890086", + "1890094", + "1890111", + "1890245", + "1890256", + "1890281", + "1890345", + "1890369", + "1891030", + "1891043", + "1891047", + "1891054", + "1891073", + "1891127", + "1891152", + "1891231", + "1891297", + "1891305", + "1891353", + "1891506", + "1891594", + "1891928", + "1892130", + "1892238", + "1892295", + "1892303", + "1892318", + "1892354", + "1892404", + "1892453", + "1892505", + "1892536", + "1892615", + "1892625", + "1892653", + "1892700", + "1892707", + "1892804", + "1892818", + "1892833", + "1892844", + "1892890", + "1892917", + "1892942", + "1892952", + "1893128", + "1893171", + "1893282", + "1893309", + "1893327", + "1893378", + "1893479", + "1893521", + "1893525", + "1893971", + "1894055", + "1894073", + "1894097", + "1894323", + "1894354", + "1894417", + "1894469", + "1894779", + "1895036", + "1895130", + "1895141", + "1895152", + "1895168", + "1895235", + "1895260", + "1895438", + "1895691", + "1895732", + "1895837", + "1895859", + "1895882", + "1895908", + "1896057", + "1896080", + "1896124", + "1896129", + "1896175", + "1896289", + "1896310", + "1896317", + "1896605", + "1896644", + "1896746", + "1896752", + "1896755", + "1896785", + "1896799", + "1896874", + "1896877", + "1896917", + "1896928", + "1897636", + "1897643", + "1897659", + "1897807", + "1897825", + "1897886", + "1897974", + "1898000", + "1898018", + "1898215", + "1898246", + "1898261", + "1898343", + "1898397", + "1898410", + "1898433", + "1898474", + "1898578", + "1898587", + "1898669", + "1898683", + "1898687", + "1898853", + "1898929", + "1899046", + "1899069", + "1899077", + "1899181", + "1899194", + "1899830", + "1899832", + "1899856", + "1899908", + "1899913", + "1899924", + "1899929", + "1899985", + "1899991", + "1900021", + "1900039", + "1900063", + "1900111", + "1900140", + "1900889", + "1900916", + "1900919", + "1900968", + "1900982", + "1901205", + "1901256", + "1901287", + "1901337", + "1901363", + "1901470", + "1901530", + "1901577", + "1901581", + "1901729", + "1901739", + "1901776", + "1901786", + "1901823", + "1901885", + "1902105", + "1902109", + "1902206", + "1902221", + "1902275", + "1902399", + "1902425", + "1902433", + "1902519", + "1902562", + "1902610", + "1902619", + "1902626", + "1902644", + "1902707", + "1902795", + "1902801", + "1902813", + "1902873", + "1902993", + "1903008", + "1903193", + "1903601", + "1903625", + "1903637", + "1903653", + "1903673", + "1904271", + "1904294", + "1904380", + "1904688", + "1904817", + "1904851", + "1904981", + "1905071", + "1905123", + "1905150", + "1905339", + "1905450", + "1906002", + "1906139", + "1906171", + "1906451", + "1906565", + "1906714", + "1907130", + "1907355", + "1907390", + "1907407", + "1907726", + "1907997", + "1908109", + "1908197", + "1908298", + "1908348", + "1908354", + "1908361", + "1908573", + "1908624", + "1908757", + "1908769", + "1908788", + "1908800", + "1908980", + "1909067", + "1909115", + "1909124", + "1909215", + "1909276", + "1909297", + "1909334", + "1909428", + "1909462", + "1909588", + "1909799", + "1909804", + "1909876", + "1909881", + "1909888", + "1910363", + "1910384", + "1910682", + "1910771", + "1910782", + "1910796", + "1911072", + "1911078", + "1911518", + "1911573", + "1911580", + "1911627", + "1911690", + "1911763", + "1911932", + "1911943", + "1912138", + "1912162", + "1912319", + "1912473", + "1912488", + "1912583", + "1913046", + "1913113", + "1913456", + "1914398", + "1914692", + "1914695", + "1915017", + "1915189", + "1915248", + "1915337", + "1915371", + "1915464", + "1915497", + "1915504", + "1915529", + "1916334", + "1916665", + "1916677", + "1916752", + "1916765", + "1916794", + "1917818", + "1918025", + "1918071", + "1918203", + "1918214", + "1918262", + "1918291", + "1918309", + "1918594", + "1918607", + "1918933", + "1918940", + "1918999", + "1919016", + "1919119", + "1919124", + "1919127", + "1919144", + "1919150", + "1919168", + "1919175", + "1919219", + "1919227", + "1919238", + "1919243", + "1919305", + "1919315", + "1919339", + "1919351", + "1919645", + "1919659", + "1919675", + "1919696", + "1919721", + "1919919", + "1919936", + "1919950", + "1919962", + "1920160", + "1920180", + "1920190", + "1920236", + "1920261", + "1920274", + "1920283", + "1920346", + "1920412", + "1920425", + "1920451", + "1920460", + "1920465", + "1920481", + "1920513", + "1920523", + "1920551", + "1920554", + "1920570", + "1920580", + "1920622", + "1920682", + "1920704", + "1920723", + "1920785", + "1920793", + "1920808", + "1920814", + "1920834", + "1920921", + "1920925", + "1920934", + "1921052", + "1921054", + "1921060", + "1921065", + "1921088", + "1921118", + "1921120", + "1921138", + "1921156", + "1921235", + "1921257", + "1921287", + "1921439", + "1921642", + "1921657", + "1921908", + "1921918", + "1921987", + "1922028", + "1922054", + "1922059", + "1922068", + "1922152", + "1922191", + "1922218", + "1922236", + "1922270", + "1922297", + "1922308", + "1922454", + "1922465", + "1922516", + "1922569", + "1922635", + "1922672", + "1922677", + "1922682", + "1922712", + "1922735", + "1922740", + "1922827", + "1922888", + "1922918", + "1922953", + "1922993", + "1923013", + "1923058", + "1923462", + "1923487", + "1923497", + "1923499", + "1923510", + "1923621", + "1923675", + "1923699", + "1923795", + "1923808", + "1923835", + "1923996", + "1924035", + "1924047", + "1924171", + "1924181", + "1924221", + "1924241", + "1924272", + "1924315", + "1924333", + "1924447", + "1924511", + "1924522", + "1924548", + "1924564", + "1924749", + "1924767", + "1924772", + "1924798", + "1925355", + "1925375", + "1925409", + "1925423", + "1925542", + "1925550", + "1925584", + "1925782", + "1925804", + "1925960", + "1925996", + "1926044", + "1926317", + "1926384", + "1926426", + "1926526", + "1926552", + "1926588", + "1926709", + "1926780", + "1926814", + "1926818", + "1926956", + "1927299", + "1927305", + "1927317", + "1927390", + "1927405", + "1927696", + "1927718", + "1927884", + "1927901", + "1927903", + "1927916", + "1927984", + "1928008", + "1928015", + "1928054", + "1928073", + "1928213", + "1928217", + "1928254", + "1928328", + "1928373", + "1928404", + "1928447", + "1928581", + "1928626", + "1928632", + "1928733", + "1928780", + "1928931", + "1929039", + "1929057", + "1929128", + "1929153", + "1929768", + "1930893", + "1930950", + "1931032", + "1931092", + "1931110", + "1931125", + "1931131", + "1931144", + "1931173", + "1931187", + "1931306", + "1931309", + "1931390", + "1931542", + "1931560", + "1931647", + "1931775", + "1931802", + "1931823", + "1931848", + "1932039", + "1932052", + "1932134", + "1932169", + "1932182", + "1932194", + "1932323", + "1932378", + "1932450", + "1932562", + "1932574", + "1932578", + "1932636", + "1932749", + "1932810", + "1932850", + "1932878", + "1932904", + "1932941", + "1932963", + "1933012", + "1933083", + "1933256", + "1933268", + "1933579", + "1933641", + "1933677", + "1933756", + "1933795", + "1933942", + "1933996", + "1934046", + "1934186", + "1934326", + "1934442", + "1934515", + "1934690", + "1934713", + "1934983", + "1935072", + "1935294", + "1935340", + "1935356", + "1935610", + "1935826", + "1935852", + "1935968", + "1936158", + "1936231", + "1936309", + "1936370", + "1936473", + "1936531", + "1936609", + "1936648", + "1936964", + "1936968", + "1936987", + "1937063", + "1937188", + "1937440", + "1937489", + "1937511", + "1937519", + "1937555", + "1937592", + "1937617", + "1938213", + "1938225", + "1938238", + "1939085", + "1939129", + "1939152", + "1939221", + "1939297", + "1939301", + "1939330", + "1939342", + "1939401", + "1939497", + "1939519", + "1939594", + "1939616", + "1939952", + "1940108", + "1940133", + "1940447", + "1940500", + "1940797", + "1940810", + "1941309", + "1941316", + "1941561", + "1941674", + "1941716", + "1941863", + "1941927", + "1942052", + "1942128", + "1942234", + "1942250", + "1942255", + "1942264", + "1942339", + "1942369", + "1942373", + "1942404", + "1942442", + "1942503", + "1942523", + "1942552", + "1942608", + "1942628", + "1942655", + "1942669", + "1942671", + "1942686", + "1942692", + "1942755", + "1942827", + "1942846", + "1942857", + "1942944", + "1942996", + "1943046", + "1943068", + "1943127", + "1943165", + "1943205", + "1943211", + "1943307", + "1943357", + "1943433", + "1943469", + "1943497", + "1943555", + "1943613", + "1943627", + "1943654", + "1943753", + "1943820", + "1943934", + "1943941", + "1944003", + "1944007", + "1944103", + "1944230", + "1944270", + "1944355", + "1944409", + "1944441", + "1944474", + "1944558", + "1944586", + "1944617", + "1944767", + "1944774", + "1944792", + "1944831", + "1944895", + "1944946", + "1944973", + "1944985", + "1945035", + "1945078", + "1945083", + "1945113", + "1945266", + "1945298", + "1945307", + "1945390", + "1945451", + "1945528", + "1945660", + "1945809", + "1945854", + "1945902", + "1945949", + "1945956", + "1946009", + "1946033", + "1946052", + "1946065", + "1946071", + "1946077", + "1946084", + "1946099", + "1946158", + "1946263", + "1946282", + "1946331", + "1946375", + "1946413", + "1946463", + "1946490", + "1946517", + "1946541", + "1946554", + "1946599", + "1946630", + "1946647", + "1946718", + "1946721", + "1946753", + "1946762", + "1946766", + "1946802", + "1946900", + "1946907", + "1946979", + "1947018", + "1947024", + "1947108", + "1947191", + "1947272", + "1947353", + "1947384", + "1947405", + "1947504", + "1947532", + "1947624", + "1947649", + "1947701", + "1947815", + "1947844", + "1947872", + "1947971", + "1948041", + "1948052", + "1948058", + "1948143", + "1948367", + "1948418", + "1948434", + "1948459", + "1948519", + "1948624", + "1948816", + "1948855", + "1948868", + "1948909", + "1948936", + "1948942", + "1948964", + "1949003", + "1949041", + "1949143", + "1949308", + "1949330", + "1949334", + "1949354", + "1949424", + "1949446", + "1949486", + "1949496", + "1949517", + "1949579", + "1949610", + "1949632", + "1949647", + "1949686", + "1949704", + "1950012", + "1950015", + "1950034", + "1950046", + "1950114", + "1950154", + "1950166", + "1950193", + "1950257", + "1950299", + "1950334", + "1950360", + "1950380", + "1950406", + "1950496", + "1950566", + "1950585", + "1950649", + "1950763", + "1951093", + "1951144", + "1951213", + "1951289", + "1951332", + "1951348", + "1951358", + "1951407", + "1951430", + "1951549", + "1951569", + "1951642", + "1951645", + "1951655", + "1951664", + "1951744", + "1951782", + "1951788", + "1951819", + "1951910", + "1952001", + "1952029", + "1952092", + "1952118", + "1952144", + "1952174", + "1952222", + "1952259", + "1952279", + "1952300", + "1952419", + "1952446", + "1952453", + "1952526", + "1952547", + "1952607", + "1952673", + "1952727", + "1952736", + "1952801", + "1952827", + "1952875", + "1952907", + "1953000", + "1953102", + "1953190", + "1953347", + "1953396", + "1953411", + "1953522", + "1953540", + "1953948", + "1953971", + "1953975", + "1953996", + "1954033", + "1954038", + "1954074", + "1954083", + "1954119", + "1954159", + "1954235", + "1954313", + "1954391", + "1954478", + "1954494", + "1954512", + "1954521", + "1954555", + "1954587", + "1954875", + "1954921", + "1954924", + "1955016", + "1955038", + "1955270", + "1955304", + "1955356", + "1955408", + "1955475", + "1955495", + "1955508", + "1955551", + "1955678", + "1955716", + "1955730", + "1955752", + "1955761", + "1955843", + "1955898", + "1955900", + "1955981", + "1955998", + "1956214", + "1956376", + "1956415", + "1956434", + "1956504", + "1956522", + "1956545", + "1956709", + "1956715", + "1956824", + "1956900", + "1956949", + "1957057", + "1957136", + "1957172", + "1957193", + "1957281", + "1957327", + "1957367", + "1957436", + "1957459", + "1957508", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958047", + "1958056", + "1958067", + "1958104", + "1958143", + "1958238", + "1958411", + "1958489", + "1958507", + "1959339", + "1959374", + "1959381", + "1959409", + "1959498", + "1959541", + "1959635", + "1959643", + "1959662", + "1959668", + "1959781", + "1959797", + "1959834", + "1959852", + "1959888", + "1960003", + "1960016", + "1960087", + "1960098", + "1960125", + "1960162", + "1960170", + "1960225", + "1960422", + "1960500", + "1960519", + "1960570", + "1960592", + "1960628", + "1960671", + "1960844", + "1960939", + "1960966", + "1961048", + "1961066", + "1961117", + "1961145", + "1961158", + "1961179", + "1961188", + "1961229", + "1961264", + "1961334", + "1961371", + "1961643", + "1961716", + "1961719", + "1962047", + "1962165", + "1962369", + "1962577", + "1962632", + "1962655", + "1962676", + "1962688", + "1962704", + "1962828", + "1962830", + "1962840", + "1962857", + "1962893", + "1962932", + "1962956", + "1962995", + "1963049", + "1963058", + "1963165", + "1963199", + "1963296", + "1963299", + "1963418", + "1963424", + "1963445", + "1963584", + "1963618", + "1963627", + "1963630", + "1963706", + "1963753", + "1963777", + "1963835", + "1963873", + "1963933", + "1964020", + "1964040", + "1964064", + "1964095", + "1964131", + "1964175", + "1964246", + "1964299", + "1964392", + "1964549", + "1964562", + "1964577", + "1964699", + "1964714", + "1964733", + "1964835", + "1964936", + "1965018", + "1965123", + "1965633", + "1965641", + "1965663", + "1965758", + "1965881", + "1965888", + "1965967", + "1966069", + "1966159", + "1966180", + "1966193", + "1966215", + "1966235", + "1966280", + "1966346", + "1966360", + "1966883", + "1966927", + "1966929", + "1966975", + "1966982", + "1967123", + "1967196", + "1967207", + "1967220", + "1967234", + "1967242", + "1967263", + "1967337", + "1967427", + "1967444", + "1967447", + "1967583", + "1967604", + "1967660", + "1967699", + "1967715", + "1967722", + "1968101", + "1968135", + "1968166", + "1968199", + "1968257", + "1968271", + "1968306", + "1968362", + "1968582", + "1968643", + "1968665", + "1968683", + "1968722", + "1968827", + "1968854", + "1968925", + "1968975", + "1969122", + "1969566", + "1969571", + "1969918", + "1970019", + "1970091", + "1970117", + "1970120", + "1970142", + "1970157", + "1970163", + "1970179", + "1970226", + "1970264", + "1970279", + "1970314", + "1970403", + "1970435", + "1970574", + "1971819", + "1971994", + "1972072", + "1972076", + "1972097", + "1972114", + "1972404", + "1972425", + "1972461", + "1972472", + "1972604", + "1972607", + "1972689", + "1972702", + "1972707", + "1972791", + "1972822", + "1972901", + "1972997", + "1973136", + "1973159", + "1973239", + "1973295", + "1973321", + "1973331", + "1973392", + "1973405", + "1973483", + "1973488", + "1973578", + "1973718", + "1973722", + "1973909", + "1975155", + "1975197", + "1975208", + "1975278", + "1975285", + "1975292", + "1975336", + "1975361", + "1975464", + "1975542", + "1975570", + "1975577", + "1975703", + "1975714", + "1975729", + "1975783", + "1975804", + "1975885", + "1976058", + "1976118", + "1976141", + "1976155", + "1976211", + "1976245", + "1976250", + "1976296", + "1976321", + "1976338", + "1976460", + "1976496", + "1976515", + "1976638", + "1976884", + "1976925", + "1976930", + "1976949", + "1977104", + "1977179", + "1977323", + "1977351", + "1977402", + "1977419", + "1977757", + "1977775", + "1977811", + "1977864", + "1977960", + "1977963", + "1978014", + "1978019", + "1978075", + "1978112", + "1978245", + "1978273", + "1978364", + "1978451", + "1978455", + "1978481", + "1978495", + "1978506", + "1978607", + "1978643", + "1978697", + "1978732", + "1978736", + "1978749", + "1978784", + "1978814", + "1978835", + "1978893", + "1978948", + "1978974", + "1978994", + "1979019", + "1979040", + "1979106", + "1979213", + "1979243", + "1979517", + "1979554", + "1979719", + "1979727", + "1980021", + "1980033", + "1980239", + "1980263", + "1980288", + "1980342", + "1980490", + "1980504", + "1980511", + "1980556", + "1980650", + "1980718", + "1981051", + "1981142", + "1981449", + "1981690", + "1981744", + "1981855", + "1981933", + "1981941", + "1981987", + "1981996", + "1982017", + "1982147", + "1982199", + "1982367", + "1984142", + "1984231", + "1984651", + "1984667", + "1984731", + "1984741", + "1984909", + "1984922", + "1985058", + "1985146", + "1985258", + "1985404", + "1985486", + "1985489", + "1985492", + "1985507", + "1985570", + "1985578", + "1985716", + "1985728", + "1985787", + "1985928", + "1985934", + "1985969", + "1986081", + "1986645", + "1986772", + "1986805", + "1986845", + "1986868", + "1986905", + "1986930", + "1986939", + "1986953", + "1986997", + "1987067", + "1987141", + "1987202", + "1987269", + "1987300", + "1987326", + "1987346", + "1987509", + "1987555", + "1987626", + "1987632", + "1987645", + "1987660", + "1987711", + "1987746", + "1987792", + "1987820", + "1987849", + "1987861", + "1987995", + "1988224", + "1988251", + "1988282", + "1988304", + "1988350", + "1988388", + "1988399", + "1988485", + "1988488", + "1988533", + "1988760", + "1988779", + "1988815", + "1988876", + "1988887", + "1988893", + "1989045", + "1989161", + "1989580", + "1989902", + "1989927", + "1989996", + "1990136", + "1990163", + "1990193", + "1990247", + "1990257", + "1990356", + "1990367", + "1990531", + "1990591", + "1990677", + "1990989", + "1991004", + "1991120", + "1991135", + "1991234", + "1991279", + "1991309", + "1991325", + "1991357", + "1991401", + "1991426", + "1991531", + "1991777", + "1991817", + "1991843", + "1991934", + "1991946", + "1992166", + "1992168", + "1992205", + "1992267", + "1992537", + "1992572", + "1992586", + "1992729", + "1992877", + "1992906", + "1992944", + "1992973", + "1992975", + "1993011", + "1993034", + "1993044", + "1993403", + "1993451", + "1993564", + "1993634", + "1994549", + "2048233", + "2080450", + "2278098", + "3231212", + "3255365", + "3255832", + "3255940", + "3255943", + "3255956", + "3256116", + "3256119", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256453", + "3256512", + "3256568", + "3256584", + "3256657", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257351", + "3257405", + "3257500", + "3257514", + "3257524", + "3257628", + "3257649", + "3257662", + "3257694", + "3257794", + "3257798", + "3257836", + "3257894", + "3258063", + "3258105", + "3258127", + "3258133", + "3258147", + "3261008", + "3262002", + "4300267", + "4300486", + "4301067", + "4301098", + "4301121", + "4301281", + "4301305", + "4301308", + "4301340", + "4302220", + "4302229", + "4302289", + "4404325", + "4404424", + "4404729", + "4404732", + "4404934", + "4405001", + "4405135", + "4405245", + "4405258", + "4405430", + "4405493", + "4405533", + "4405983", + "4406051", + "4406069", + "4406074", + "4406145", + "4406268", + "4406291", + "4406298", + "4406360", + "4406481", + "4406516", + "4406551", + "4406622", + "4406889", + "4406931", + "4407165", + "4407218", + "4407310", + "4407354", + "4407363", + "4407476", + "4407554", + "4407697", + "4407786", + "4408085", + "4408190", + "4408204", + "4408275", + "4523515", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525111", + "4525607", + "4525713", + "4527338", + "4529834", + "4531185", + "4532562", + "4533122", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4534661", + "4571921", + "4572640", + "4573369", + "4573720", + "4574082", + "4575600", + "4575996", + "4576037", + "4576177", + "4684087", + "4684088", + "4684145", + "4684219", + "4684253", + "4684258", + "4684781", + "4684892", + "4684924", + "4684951", + "4685556", + "4685628", + "4685777", + "4685945", + "4685979", + "4686308", + "4686350", + "4686384", + "4686517", + "4686655", + "4686699", + "4686843", + "4686955", + "4687068", + "4687117", + "4687205", + "4687250", + "4687253", + "4687264", + "4687385", + "4687388", + "4687398", + "4687438", + "4687494", + "4687545", + "4687701", + "4687726", + "4687791", + "4687851", + "4687877", + "4687937", + "4687943", + "4687984", + "4688073", + "4688136", + "4688148", + "4688298", + "4688408", + "4688500", + "4688533", + "4688624", + "4688641", + "4688690", + "4688714", + "4688717", + "4688727", + "4688768", + "4688975", + "4689025", + "4689117", + "4689138", + "4689300", + "4689316", + "4689527", + "4689528", + "4689548", + "4689585", + "4689628", + "4689644", + "4689708", + "4689790", + "4695593", + "4695668", + "4695734", + "4695875", + "4695897", + "4695929", + "4696040", + "4696100", + "4696103", + "4696201", + "4696228", + "4702183", + "4702229", + "4702368", + "4702379", + "4702515", + "4702588", + "4702630", + "4702642", + "4702651", + "4702781", + "4702805", + "4702831", + "4702862", + "4702877", + "4702889", + "4702891", + "4702939", + "4702953", + "4703000", + "4703014", + "4703048", + "4703184", + "4703248", + "4703308", + "4703444", + "4703460", + "4703509", + "4703670", + "4703719", + "4704034", + "4704072", + "4704098", + "4704315", + "4704380", + "4704499", + "4704582", + "4704716", + "4704719", + "4704752", + "4704946", + "4704959", + "4705145", + "4705151", + "4705537", + "4705623", + "4705630", + "4705637", + "4705641", + "4705666", + "4705796", + "4705876", + "4705882", + "4705945", + "4705981", + "4706535", + "4706578", + "4706585", + "4706694", + "4706723", + "4706738", + "4706892", + "4706983", + "4707050", + "4707100", + "4707419", + "4707431", + "4707529", + "4707641", + "4707698", + "4707710", + "4707748", + "4707821", + "4707834", + "4708040", + "4708154", + "4708197", + "4708288", + "4708365", + "4708407", + "4708493", + "4708566", + "4708587", + "4708592", + "4708606", + "4708611", + "4708626", + "4708638", + "4708646", + "4708648", + "4708684", + "4708698", + "4708709", + "4708713", + "4708745", + "4708885", + "4708919", + "4709100", + "4709103", + "4709146", + "4709187", + "4709268", + "4709333", + "4709385", + "4709474", + "5102272", + "5104758", + "5105328", + "5110374", + "5110641", + "5114254", + "5115213", + "5115807", + "5116471", + "5118829", + "5119806", + "5119880", + "5123346", + "5123443", + "5123811", + "5124670", + "5130576", + "5131088", + "5131972", + "5133087", + "5135400", + "5141261", + "5142228", + "5142691", + "5144176", + "5146397", + "5430630", + "6007566", + "6116898", + "6132796", + "6133263", + "6133753", + "6757561", + "7236046", + "7236053", + "7236059", + "7236069", + "7236091", + "7236092", + "7236098", + "7354470", + "7362601", + "7384515", + "7396883", + "7494486", + "7510496", + "7514692", + "7535296", + "7543161", + "7566147", + "7568341", + "7588628", + "7641205", + "7659598", + "7704040", + "7704258", + "7714017", + "7721234", + "7729420", + "7733971", + "7739898", + "7742506", + "7744105", + "7769987", + "7772509", + "7777102", + "7786896", + "7841677", + "7842819", + "7852351", + "7876391", + "7881632", + "7963991", + "7969922", + "7973780", + "8057237", + "8095945", + "8107362", + "8109351", + "8178582", + "8194136", + "8203799", + "8213918", + "8249110", + "8296807", + "8314432", + "8317469", + "8319926", + "8331787", + "8338704", + "8363558", + "8379138", + "8389051", + "8396912", + "8406574", + "8407958", + "8494978", + "8636720", + "8659047", + "8679775", + "8697176", + "8710303", + "8728355", + "8744407", + "8757056", + "8766106", + "8782295", + "8786726", + "8787356", + "8793999", + "8806645", + "8810582", + "8814442", + "8828194", + "8832257", + "8834745", + "8843351", + "8844327", + "8875114", + "8875134", + "8875890", + "8895291", + "8896182", + "8903953", + "8915575", + "8921795", + "8928010", + "8930863", + "8931287", + "8934672", + "8935025", + "8936210", + "8946062", + "8952756", + "8952983", + "8955545", + "8968124", + "8970409", + "8974541", + "8978064", + "8978428", + "8981907", + "8982056", + "8983556", + "8983629", + "8997710", + "9000709", + "9002818", + "9005880", + "9020610", + "9021546", + "9026388", + "9026655", + "9029051", + "9036849", + "9040198", + "9042695", + "9044302", + "9044770", + "9046185", + "9046214", + "9046977", + "9053842", + "9055772", + "9059321", + "9059730", + "9060128", + "9061491", + "9065472", + "9069808", + "9073940", + "9077304", + "9077410", + "9078027", + "9078901", + "9080469", + "9090334", + "9092234", + "9095083", + "9095230", + "9099004", + "9103399", + "9106541", + "9108102", + "9111044", + "9111269", + "9112567", + "9118632", + "9119424", + "9121178", + "9123839", + "9128871", + "9130093", + "9131390", + "9136607", + "9137617", + "9141856", + "9146182", + "9151414", + "9154466", + "9155713", + "9167802", + "9168716", + "9175687", + "9176590", + "9177092", + "9179511", + "9180373", + "9181278", + "9182266", + "9183339", + "9183600", + "9185801", + "9186977", + "9188678", + "9189318", + "9189502", + "9197007", + "9197112", + "9199756", + "9203611", + "9203720", + "9205220", + "9206138", + "9209436", + "9210500", + "9211050", + "9211520", + "9211630", + "9212903", + "9218657", + "9220793", + "9230208", + "9230236", + "9260167", + "9262994", + "9329912", + "9334318", + "9340110", + "9345724", + "9357810", + "9457004", + "9496267", + "9514086", + "9529506", + "9550689", + "9558288", + "9585354", + "9600123", + "9601813", + "9605252", + "9607541", + "9675443", + "9759554", + "9762611", + "9878063", + "9905626" + ], + "zero/family": [ + "10820875", + "1933999", + "3256826", + "3527", + "3528", + "3529", + "3530", + "3531", + "3551", + "3552", + "3553", + "3554", + "3555", + "3556", + "3558", + "3563", + "4300662", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4534947", + "4538", + "4542", + "4547", + "4554", + "4705755", + "4864", + "4865", + "4866", + "4867", + "4868", + "4870", + "4871", + "5320", + "5336", + "5338", + "5339", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "5734720", + "6165", + "6166", + "6929", + "6946", + "6947", + "6948", + "6949", + "6950", + "6951", + "6953", + "6954", + "6956", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8832", + "8833", + "8834", + "8836", + "8838", + "8839", + "8840", + "8841", + "8855", + "8856", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8872", + "8873", + "8874", + "8875", + "9122734", + "9407", + "9408", + "9409", + "9410", + "9412", + "9414744", + "9417", + "9541689", + "9689", + "9717" + ], + "optimized/species": [ + "10000103", + "10000384", + "10002059", + "10003902", + "10004820", + "10004969", + "10005133", + "10005632", + "10010361", + "10010700", + "10014340", + "10017792", + "10018221", + "10019169", + "10023049", + "10023821", + "10026605", + "10032003", + "10033898", + "10034831", + "10038125", + "10042504", + "10043566", + "10043827", + "10044107", + "10046510", + "10046698", + "10047346", + "10049887", + "10053130", + "10053809", + "10054019", + "10055104", + "10055273", + "10058263", + "10058481", + "10059034", + "10062202", + "10062933", + "10063383", + "10066605", + "10067382", + "10068024", + "10069243", + "10071588", + "10072380", + "10073044", + "10073321", + "10074808", + "10075196", + "10075732", + "10078526", + "10078800", + "10085335", + "10088253", + "10089194", + "10090105", + "10090168", + "10094256", + "10094594", + "10095278", + "10096855", + "10097776", + "10098436", + "10100176", + "10103570", + "10106345", + "10106475", + "10108753", + "10109201", + "10113008", + "10113190", + "10114865", + "10115073", + "10116946", + "10117959", + "10118643", + "10118678", + "10120854", + "10121804", + "10129812", + "10132475", + "10132596", + "10132811", + "10134558", + "10134865", + "10137001", + "10137350", + "10141437", + "10142569", + "10143814", + "10145421", + "10146436", + "10146771", + "10153630", + "10154280", + "10155026", + "10155932", + "10156181", + "10156470", + "10157400", + "10159697", + "10164453", + "10165457", + "10165831", + "10166724", + "10167252", + "10174909", + "10175639", + "10176413", + "10176954", + "10177508", + "10178326", + "10179389", + "10180624", + "10183056", + "10184940", + "10187154", + "10188228", + "10189661", + "10191275", + "10191785", + "10194663", + "10194727", + "10196956", + "10201273", + "10203493", + "10203499", + "10205587", + "10208422", + "10208792", + "10208801", + "10209845", + "10210935", + "10211808", + "10213314", + "10214972", + "10217455", + "10221195", + "10222583", + "10224300", + "10225227", + "10228568", + "10236521", + "10240592", + "10244305", + "10245924", + "10246305", + "10247309", + "10248521", + "10250474", + "10256550", + "10257673", + "10257899", + "10259280", + "10259880", + "10263383", + "10264193", + "10265559", + "10265841", + "10266782", + "10267561", + "10267570", + "10268303", + "10270464", + "10271464", + "10272611", + "10274769", + "10274976", + "10278292", + "10279983", + "10288636", + "10290084", + "10295171", + "10295290", + "10295646", + "10302305", + "10302660", + "10304313", + "10307487", + "10308365", + "10309794", + "10310599", + "10310835", + "10312073", + "10312760", + "10321900", + "10327658", + "10329023", + "10330376", + "10331171", + "10333787", + "10336328", + "10340332", + "10341307", + "10346267", + "10348110", + "10348945", + "10353400", + "10355428", + "10355898", + "10357476", + "10358334", + "10360329", + "10361029", + "10361239", + "10363151", + "10365587", + "10365884", + "10366580", + "10366679", + "10368234", + "10370026", + "10371735", + "10372377", + "10374414", + "10375186", + "10375403", + "10376507", + "10376685", + "10378314", + "10379201", + "10380465", + "10383968", + "10388627", + "10392889", + "10394962", + "10395440", + "10397209", + "10398658", + "10399906", + "10400868", + "10401396", + "10402067", + "10403441", + "10404426", + "10407953", + "10410048", + "10410699", + "10411202", + "10411472", + "10413588", + "10415847", + "10423263", + "10427568", + "10432184", + "10433914", + "10435406", + "10436020", + "10436850", + "10437872", + "10441062", + "10441857", + "10442122", + "10442332", + "10443878", + "10445629", + "10446295", + "10446574", + "10446580", + "10446898", + "10448500", + "10450442", + "10450446", + "10450501", + "10451589", + "10452421", + "10454590", + "10456933", + "10457796", + "10458175", + "10458960", + "10462612", + "10464411", + "10464824", + "10465059", + "10469497", + "10469564", + "10471477", + "10474236", + "10476233", + "10477629", + "10480609", + "10481441", + "10482025", + "10487080", + "10495733", + "10496181", + "10502505", + "10503464", + "10503495", + "10505033", + "10506164", + "10508423", + "10508467", + "10509408", + "10510138", + "10510325", + "10510959", + "10512675", + "10514620", + "10515719", + "10517417", + "10517500", + "10518163", + "10521368", + "10523304", + "10526954", + "10530208", + "10530383", + "10530515", + "10531480", + "10534945", + "10535684", + "10539598", + "10542548", + "10545267", + "10546013", + "10546538", + "10547716", + "10548275", + "10548683", + "10549715", + "10551407", + "10551923", + "10556366", + "10556522", + "10556853", + "10558140", + "10560674", + "10560849", + "10561589", + "10569879", + "10570752", + "10571987", + "10572729", + "10573425", + "10575632", + "10577473", + "10579230", + "10580256", + "10581870", + "10584071", + "10587253", + "10588642", + "10591617", + "10592969", + "10593489", + "10594478", + "10596756", + "10597291", + "10597823", + "10598038", + "10598407", + "10600208", + "10604375", + "10606547", + "10606887", + "10607329", + "10613467", + "10615631", + "10619048", + "10626099", + "10629052", + "10629533", + "10632124", + "10634980", + "10637588", + "10638451", + "10638589", + "10639484", + "10639943", + "10640865", + "10643533", + "10644798", + "10647358", + "10648791", + "10653980", + "10655790", + "10656625", + "10657151", + "10657453", + "10659737", + "10662329", + "10679326", + "10683012", + "10684776", + "10698858", + "10700540", + "10701190", + "10703948", + "10706419", + "10707501", + "10709446", + "10712554", + "10713577", + "10714961", + "10715410", + "10716234", + "10717680", + "10717837", + "10730270", + "10732033", + "10732353", + "10737993", + "10738407", + "10741837", + "10746289", + "10747908", + "10749137", + "10755716", + "10761559", + "10765884", + "10766319", + "10769553", + "10773498", + "10776919", + "10782264", + "10787705", + "10795141", + "10799294", + "10806460", + "10807169", + "10807383", + "10807787", + "10813849", + "10814936", + "10817208", + "10820762", + "10822185", + "10826443", + "10830546", + "10833593", + "10835385", + "10838422", + "10840540", + "10840565", + "10841562", + "10842267", + "10844862", + "10850393", + "10850415", + "10850929", + "10851228", + "10851840", + "10854079", + "10855556", + "10857326", + "10858809", + "10860091", + "10861282", + "10866199", + "10866411", + "10867462", + "10869347", + "10873137", + "10874932", + "10879371", + "10882244", + "10883659", + "10889719", + "10891794", + "10904813", + "10922201", + "10922411", + "10926224", + "10932946", + "10933525", + "10942408", + "10955682", + "10959264", + "10963226", + "10967713", + "10972780", + "10982648", + "10982815", + "10987178", + "10988070", + "10994020", + "10996761", + "11008182", + "11014495", + "11016336", + "11033463", + "11044778", + "11046092", + "11052757", + "11054256", + "11055981", + "11056379", + "11059353", + "11080751", + "11088003", + "11093909", + "11095591", + "11097510", + "11098546", + "11121180", + "11135155", + "11140464", + "11141784", + "11142432", + "11173690", + "11175615", + "11190148", + "11219489", + "11232431", + "11287091", + "11311045", + "11322712", + "11372793", + "11374171", + "11375508", + "11378273", + "11378618", + "11382064", + "11414590", + "11417741", + "11418741", + "11423843", + "11428453", + "11430021", + "11431507", + "11437060", + "11449815", + "11451126", + "11452421", + "11453492", + "11457930", + "11461056", + "11464362", + "11464595", + "11465014", + "11466090", + "11467034", + "11467944", + "11468089", + "11468731", + "11470119", + "11470672", + "11478679", + "11484123", + "11487320", + "11494627", + "11495556", + "11496990", + "11501104", + "11503857", + "11508076", + "11508404", + "11508472", + "11513018", + "11513188", + "11516142", + "11529292", + "11529603", + "11535847", + "11539735", + "11546465", + "11548960", + "11554226", + "11554842", + "11555221", + "11562243", + "11563728", + "11566649", + "11570545", + "11571523", + "11590674", + "11591775", + "11594541", + "11596898", + "11598540", + "11608942", + "11609422", + "11615055", + "11615549", + "11619030", + "11623814", + "11626773", + "11627464", + "11635419", + "11636323", + "11636481", + "11638437", + "11642411", + "11643393", + "11644349", + "11650277", + "11652557", + "11654024", + "11654707", + "11656384", + "11660145", + "11667300", + "11667997", + "11670842", + "11673056", + "11688440", + "11688586", + "11693171", + "11698552", + "11701883", + "11701991", + "11703980", + "11713256", + "11713970", + "11714235", + "11716362", + "11717028", + "11720834", + "11725043", + "11725616", + "11726907", + "11728049", + "11728240", + "11729388", + "11729494", + "11730078", + "11731502", + "11736162", + "11737872", + "11738734", + "11749278", + "11753804", + "11754954", + "11756119", + "11758730", + "11760688", + "11763567", + "11776315", + "11780161", + "11794114", + "11797637", + "11807833", + "11812181", + "11819666", + "11826016", + "11832697", + "11834445", + "11840028", + "11840957", + "11841763", + "11846897", + "11854390", + "11856219", + "11858666", + "11860016", + "11860565", + "11871044", + "11871190", + "11873825", + "11874998", + "11887065", + "11891668", + "11892494", + "11900897", + "11905965", + "11906255", + "11907485", + "11907754", + "11909090", + "11919216", + "11922580", + "11923027", + "11954157", + "11962292", + "11967675", + "11976273", + "11992983", + "12006709", + "12010643", + "12018158", + "12022449", + "12031071", + "12037602", + "12046692", + "12057008", + "12060941", + "12066849", + "12087490", + "12089608", + "12103087", + "12106417", + "12116722", + "12126779", + "12135372", + "12151997", + "12160125", + "12170988", + "12171068", + "12171522", + "12173621", + "12174634", + "12175154", + "12176367", + "12176559", + "12180031", + "12180041", + "12181811", + "12183285", + "12185456", + "12185656", + "12188086", + "12191141", + "12194283", + "12195040", + "12197284", + "12198522", + "12203022", + "12206386", + "12206694", + "12208168", + "12208733", + "12209759", + "12211009", + "12212066", + "12214821", + "12214993", + "12216332", + "12217030", + "12219036", + "12219250", + "12222885", + "12223105", + "12223349", + "12226416", + "12229237", + "12229400", + "12229940", + "12231152", + "12231344", + "12231385", + "12233602", + "12233808", + "12233838", + "12234544", + "12234977", + "12235234", + "12236627", + "12239491", + "12242422", + "12247340", + "12247359", + "12249986", + "12250854", + "12251247", + "12252340", + "12252926", + "12253343", + "12253844", + "12257250", + "12257418", + "12258146", + "12258652", + "12258984", + "12262562", + "12263736", + "12265590", + "12266659", + "12276630", + "12286003", + "12301192", + "12353663", + "12357826", + "12358748", + "1730519", + "1730543", + "1730948", + "1730978", + "1731097", + "1731221", + "1731263", + "1731598", + "1731750", + "1731811", + "1731812", + "1731826", + "1731837", + "1731860", + "1731862", + "1731886", + "1731890", + "1731906", + "1731923", + "1731926", + "1731927", + "1732001", + "1732005", + "1732031", + "1732052", + "1732063", + "1732087", + "1732114", + "1732115", + "1732416", + "1732419", + "1732452", + "1732457", + "1732508", + "1732521", + "1732525", + "1732565", + "1732660", + "1732662", + "1732680", + "1732685", + "1732697", + "1732717", + "1732763", + "1732830", + "1732842", + "1732901", + "1732978", + "1733154", + "1733155", + "1733243", + "1733258", + "1733394", + "1733484", + "1733504", + "1733511", + "1733525", + "1733535", + "1733620", + "1733755", + "1734384", + "1734453", + "1734519", + "1734690", + "1734704", + "1734794", + "1734826", + "1734851", + "1735168", + "1735273", + "1735391", + "1735398", + "1735408", + "1735532", + "1735844", + "1735855", + "1736271", + "1736315", + "1736358", + "1736377", + "1736390", + "1736412", + "1736425", + "1736447", + "1736484", + "1736499", + "1736511", + "1736528", + "1736560", + "1736565", + "1736601", + "1736623", + "1736727", + "1736760", + "1736800", + "1736803", + "1736809", + "1736811", + "1736821", + "1736836", + "1736860", + "1736898", + "1736904", + "1736905", + "1736906", + "1736915", + "1736918", + "1736937", + "1736939", + "1736945", + "1736993", + "1736995", + "1737015", + "1737072", + "1737115", + "1737131", + "1737182", + "1737187", + "1737231", + "1737342", + "1737368", + "1737374", + "1737403", + "1737413", + "1737417", + "1737437", + "1737491", + "1737497", + "1737509", + "1737524", + "1737526", + "1737533", + "1737542", + "1737544", + "1737551", + "1737552", + "1737650", + "1737753", + "1737775", + "1737776", + "1737847", + "1737893", + "1737904", + "1737924", + "1737929", + "1737964", + "1737973", + "1737978", + "1738045", + "1738050", + "1738081", + "1738163", + "1738196", + "1738218", + "1738222", + "1738245", + "1738317", + "1738337", + "1738422", + "1738429", + "1738514", + "1738687", + "1738700", + "1738722", + "1738777", + "1738794", + "1738839", + "1738883", + "1738888", + "1739034", + "1739042", + "1739051", + "1739151", + "1739220", + "1739272", + "1739284", + "1739290", + "1739337", + "1739377", + "1739381", + "1739400", + "1739461", + "1739553", + "1739567", + "1739605", + "1739612", + "1739617", + "1739629", + "1739646", + "1739656", + "1739668", + "1739727", + "1739748", + "1739767", + "1739797", + "1739819", + "1739833", + "1739867", + "1739919", + "1739922", + "1739924", + "1739927", + "1739931", + "1739956", + "1739964", + "1739973", + "1739980", + "1739983", + "1739999", + "1740003", + "1740005", + "1740037", + "1740053", + "1740060", + "1740069", + "1740116", + "1740120", + "1740133", + "1740148", + "1740155", + "1740163", + "1740174", + "1740183", + "1740185", + "1740225", + "1740246", + "1740305", + "1740370", + "1740374", + "1740389", + "1740392", + "1740400", + "1740449", + "1740469", + "1740482", + "1740518", + "1740524", + "1740533", + "1740567", + "1740570", + "1740623", + "1740797", + "1740828", + "1741056", + "1741074", + "1741084", + "1741130", + "1741131", + "1741147", + "1741258", + "1741324", + "1741340", + "1741341", + "1741361", + "1741368", + "1741398", + "1741400", + "1741545", + "1741551", + "1741590", + "1741593", + "1741615", + "1741633", + "1741634", + "1741667", + "1741719", + "1741747", + "1741752", + "1741756", + "1741765", + "1741812", + "1741818", + "1741820", + "1741823", + "1741824", + "1741826", + "1742081", + "1742091", + "1742121", + "1742142", + "1742150", + "1742168", + "1742178", + "1742185", + "1742198", + "1742214", + "1742241", + "1742260", + "1742263", + "1742268", + "1742272", + "1742273", + "1742287", + "1742293", + "1742304", + "1742310", + "1742335", + "1742346", + "1742402", + "1743184", + "1743196", + "1743319", + "1743461", + "1743475", + "1743532", + "1743588", + "1743604", + "1743651", + "1743653", + "1743658", + "1743663", + "1743680", + "1743710", + "1743714", + "1743768", + "1743775", + "1743782", + "1743825", + "1743828", + "1743838", + "1743855", + "1743856", + "1743862", + "1743867", + "1743898", + "1743998", + "1744071", + "1744130", + "1744136", + "1744180", + "1744212", + "1744224", + "1744416", + "1744498", + "1744526", + "1744542", + "1744588", + "1744593", + "1744700", + "1744709", + "1744714", + "1744724", + "1744728", + "1744731", + "1744739", + "1744742", + "1744748", + "1744763", + "1744782", + "1744789", + "1744808", + "1744810", + "1744860", + "1744896", + "1744949", + "1744953", + "1744998", + "1745019", + "1745022", + "1745079", + "1745307", + "1745558", + "1745561", + "1745579", + "1745600", + "1745606", + "1745630", + "1745634", + "1745636", + "1745643", + "1745659", + "1745666", + "1745669", + "1745676", + "1745678", + "1745705", + "1745724", + "1745729", + "1745737", + "1745746", + "1745756", + "1745762", + "1745771", + "1745781", + "1745787", + "1745814", + "1745816", + "1745827", + "1745830", + "1745895", + "1745925", + "1745952", + "1745957", + "1746027", + "1746174", + "1746327", + "1746413", + "1746440", + "1746462", + "1746586", + "1746613", + "1746644", + "1746666", + "1746689", + "1746695", + "1746714", + "1746751", + "1746754", + "1746763", + "1746774", + "1746775", + "1746831", + "1746832", + "1746856", + "1746876", + "1746881", + "1746898", + "1746910", + "1746927", + "1746949", + "1747024", + "1747050", + "1747068", + "1747141", + "1747147", + "1747150", + "1747160", + "1747161", + "1747163", + "1747166", + "1747171", + "1747189", + "1747196", + "1747215", + "1747222", + "1747523", + "1747639", + "1747738", + "1747740", + "1747814", + "1747924", + "1748103", + "1748148", + "1748149", + "1748151", + "1748152", + "1748203", + "1748321", + "1748425", + "1748442", + "1748456", + "1748473", + "1748486", + "1748518", + "1748648", + "1748661", + "1748751", + "1748780", + "1748805", + "1748890", + "1748942", + "1749050", + "1749070", + "1749124", + "1749164", + "1749287", + "1749449", + "1749531", + "1749591", + "1749596", + "1749635", + "1749664", + "1749713", + "1749744", + "1749869", + "1749908", + "1749929", + "1749936", + "1749948", + "1749975", + "1750076", + "1750131", + "1750143", + "1750166", + "1750326", + "1750934", + "1751051", + "1751163", + "1751207", + "1751216", + "1751236", + "1751298", + "1751299", + "1751368", + "1751400", + "1751457", + "1751497", + "1751557", + "1751572", + "1751575", + "1751588", + "1751625", + "1751670", + "1751684", + "1751690", + "1751852", + "1751980", + "1751986", + "1752034", + "1752109", + "1752111", + "1752161", + "1752281", + "1752285", + "1752286", + "1752327", + "1752373", + "1752383", + "1752492", + "1752494", + "1752536", + "1752537", + "1752539", + "1752545", + "1752547", + "1752603", + "1752651", + "1752749", + "1752758", + "1752775", + "1752805", + "1752825", + "1752832", + "1752849", + "1752894", + "1752903", + "1752923", + "1752947", + "1753081", + "1753105", + "1753106", + "1753111", + "1753215", + "1753461", + "1753603", + "1753604", + "1753636", + "1753668", + "1753759", + "1753871", + "1753902", + "1753906", + "1753922", + "1753929", + "1754135", + "1754183", + "1754263", + "1754270", + "1754332", + "1754368", + "1754380", + "1754400", + "1754511", + "1754516", + "1754535", + "1754806", + "1754814", + "1754902", + "1754919", + "1754933", + "1755237", + "1755248", + "1755253", + "1755276", + "1757652", + "1757839", + "1757853", + "1758003", + "1758114", + "1758146", + "1758441", + "1758461", + "1758596", + "1758602", + "1758613", + "1758625", + "1758727", + "1758767", + "1758771", + "1758781", + "1758783", + "1758850", + "1758860", + "1758861", + "1758866", + "1758878", + "1758879", + "1758898", + "1758906", + "1758916", + "1759037", + "1759040", + "1759041", + "1759055", + "1759069", + "1759079", + "1759083", + "1759092", + "1759153", + "1759159", + "1759338", + "1759351", + "1759394", + "1759407", + "1759553", + "1759573", + "1759585", + "1759597", + "1759605", + "1759610", + "1759611", + "1759620", + "1759621", + "1759624", + "1759631", + "1759632", + "1759633", + "1759634", + "1759661", + "1759667", + "1759668", + "1759671", + "1759673", + "1759677", + "1759678", + "1759686", + "1759688", + "1759691", + "1759694", + "1759719", + "1759775", + "1759799", + "1759881", + "1760104", + "1760172", + "1760173", + "1760175", + "1760201", + "1760233", + "1760244", + "1760246", + "1760257", + "1760261", + "1760309", + "1760361", + "1760385", + "1760396", + "1760397", + "1760398", + "1760400", + "1760454", + "1760455", + "1760593", + "1760620", + "1760682", + "1760857", + "1760867", + "1760887", + "1760891", + "1760893", + "1760927", + "1760939", + "1761041", + "1761102", + "1761110", + "1761111", + "1761143", + "1761213", + "1761353", + "1761392", + "1761438", + "1761439", + "1761498", + "1761553", + "1761563", + "1761572", + "1761573", + "1761735", + "1761751", + "1761752", + "1761778", + "1761788", + "1761798", + "1761820", + "1761838", + "1761865", + "1761892", + "1762151", + "1762219", + "1762226", + "1762244", + "1762271", + "1762286", + "1762383", + "1762474", + "1762608", + "1762609", + "1762615", + "1762657", + "1762680", + "1762849", + "1762852", + "1762887", + "1762900", + "1762902", + "1763072", + "1763163", + "1763184", + "1763199", + "1763223", + "1763589", + "1763610", + "1763650", + "1763697", + "1763727", + "1763761", + "1763782", + "1763976", + "1764021", + "1764043", + "1764060", + "1764174", + "1764178", + "1764238", + "1764525", + "1764531", + "1764553", + "1764673", + "1764691", + "1764693", + "1764791", + "1764880", + "1764886", + "1764917", + "1764929", + "1764986", + "1764987", + "1765010", + "1765011", + "1765017", + "1765044", + "1765069", + "1765073", + "1765097", + "1765172", + "1765182", + "1765604", + "1765653", + "1765658", + "1765733", + "1765751", + "1765752", + "1765767", + "1765779", + "1765798", + "1765863", + "1765954", + "1765962", + "1765996", + "1765999", + "1766007", + "1766072", + "1766086", + "1766128", + "1766130", + "1766131", + "1766137", + "1766193", + "1766205", + "1766210", + "1766260", + "1766274", + "1766285", + "1766287", + "1766392", + "1766410", + "1766418", + "1766509", + "1766510", + "1766558", + "1766560", + "1766570", + "1766584", + "1766601", + "1766612", + "1766618", + "1766646", + "1766650", + "1766721", + "1766741", + "1766773", + "1766814", + "1766839", + "1766845", + "1766888", + "1766892", + "1766910", + "1766919", + "1766921", + "1767031", + "1767044", + "1767052", + "1767140", + "1767142", + "1767215", + "1767293", + "1767302", + "1767307", + "1767320", + "1767338", + "1767347", + "1767368", + "1767381", + "1767393", + "1767430", + "1767484", + "1767499", + "1767508", + "1767511", + "1767571", + "1767579", + "1767584", + "1767597", + "1767602", + "1767608", + "1767612", + "1767625", + "1767655", + "1767674", + "1767719", + "1767755", + "1767780", + "1767883", + "1768042", + "1768048", + "1768117", + "1768132", + "1768150", + "1768172", + "1768174", + "1768190", + "1768196", + "1768199", + "1768283", + "1768341", + "1768440", + "1768461", + "1768462", + "1768546", + "1768557", + "1768560", + "1768568", + "1768626", + "1768630", + "1768698", + "1768702", + "1768727", + "1768729", + "1768749", + "1768771", + "1768815", + "1768819", + "1768898", + "1768972", + "1769000", + "1769029", + "1769057", + "1769103", + "1769114", + "1769168", + "1769194", + "1769209", + "1769225", + "1769250", + "1769260", + "1769271", + "1769272", + "1769293", + "1769294", + "1769310", + "1769336", + "1769410", + "1769425", + "1769465", + "1769505", + "1769519", + "1769543", + "1769566", + "1769592", + "1769737", + "1769739", + "1769772", + "1769814", + "1769823", + "1769827", + "1769841", + "1769852", + "1769897", + "1769901", + "1769934", + "1769944", + "1769947", + "1769958", + "1769978", + "1770038", + "1770044", + "1770132", + "1770144", + "1770150", + "1770172", + "1770307", + "1770353", + "1770380", + "1770383", + "1770384", + "1770385", + "1770416", + "1770461", + "1770477", + "1770530", + "1770659", + "1770772", + "1770773", + "1770821", + "1770828", + "1770849", + "1770869", + "1770880", + "1770918", + "1770955", + "1771019", + "1771040", + "1771055", + "1771067", + "1771143", + "1771203", + "1771204", + "1771214", + "1771245", + "1771296", + "1771308", + "1771357", + "1771385", + "1771391", + "1771441", + "1771455", + "1771509", + "1771531", + "1771555", + "1771634", + "1771650", + "1771678", + "1771698", + "1771772", + "1771779", + "1771846", + "1771848", + "1771859", + "1771872", + "1771903", + "1771977", + "1771997", + "1772013", + "1772043", + "1772094", + "1772169", + "1772179", + "1772255", + "1772260", + "1772352", + "1772374", + "1772422", + "1772427", + "1772428", + "1772447", + "1772462", + "1772543", + "1772668", + "1772716", + "1772793", + "1772822", + "1772940", + "1772956", + "1772977", + "1773002", + "1773062", + "1773069", + "1773081", + "1773163", + "1773248", + "1773309", + "1773313", + "1773328", + "1773484", + "1773572", + "1773577", + "1773662", + "1773677", + "1773728", + "1773742", + "1773744", + "1773746", + "1773783", + "1773901", + "1773904", + "1774092", + "1774095", + "1774243", + "1774253", + "1774262", + "1774268", + "1774283", + "1774285", + "1774314", + "1774347", + "1774358", + "1774470", + "1774575", + "1774576", + "1774583", + "1774598", + "1774600", + "1774604", + "1774618", + "1774626", + "1774635", + "1774640", + "1774654", + "1774661", + "1774682", + "1774691", + "1774702", + "1774712", + "1774792", + "1774797", + "1774859", + "1774873", + "1774878", + "1774907", + "1774918", + "1774929", + "1774959", + "1774997", + "1775046", + "1775055", + "1775089", + "1775112", + "1775118", + "1775148", + "1775172", + "1775290", + "1775291", + "1775301", + "1775329", + "1775508", + "1775509", + "1775631", + "1775672", + "1775680", + "1775796", + "1775866", + "1775891", + "1775913", + "1775962", + "1775963", + "1775970", + "1775980", + "1776067", + "1776094", + "1776167", + "1776182", + "1776207", + "1776265", + "1776268", + "1776330", + "1776371", + "1776397", + "1776459", + "1776462", + "1776467", + "1776470", + "1776472", + "1776473", + "1776476", + "1776618", + "1776619", + "1776861", + "1776862", + "1776871", + "1777024", + "1777034", + "1777052", + "1777075", + "1777120", + "1777165", + "1777166", + "1777179", + "1777253", + "1777261", + "1777289", + "1777463", + "1777471", + "1777517", + "1777631", + "1777727", + "1777728", + "1777730", + "1777737", + "1777942", + "1777974", + "1777976", + "1777980", + "1777982", + "1777994", + "1777996", + "1778000", + "1778006", + "1778007", + "1778013", + "1778015", + "1778024", + "1778031", + "1778033", + "1778034", + "1778037", + "1778045", + "1778049", + "1778074", + "1778109", + "1778127", + "1778143", + "1778337", + "1778430", + "1778517", + "1778534", + "1778548", + "1778551", + "1778555", + "1778596", + "1778688", + "1779258", + "1779269", + "1779276", + "1779334", + "1779399", + "1779430", + "1779435", + "1779456", + "1779633", + "1779641", + "1779643", + "1779671", + "1779690", + "1779740", + "1779959", + "1780049", + "1780072", + "1780149", + "1780150", + "1780209", + "1780213", + "1780214", + "1780215", + "1780272", + "1780309", + "1780313", + "1780326", + "1780330", + "1780344", + "1780378", + "1780390", + "1780414", + "1780437", + "1780440", + "1780450", + "1780617", + "1780646", + "1780668", + "1780705", + "1780716", + "1780856", + "1780857", + "1780860", + "1780862", + "1780897", + "1780926", + "1780928", + "1780954", + "1781008", + "1781016", + "1781029", + "1781234", + "1781350", + "1781413", + "1781420", + "1781421", + "1781446", + "1781473", + "1781503", + "1781531", + "1781598", + "1781694", + "1781803", + "1781819", + "1781944", + "1781946", + "1782031", + "1782115", + "1782177", + "1782185", + "1782208", + "1782214", + "1782249", + "1782267", + "1782273", + "1782277", + "1782279", + "1782289", + "1782310", + "1782319", + "1782326", + "1782328", + "1782354", + "1782422", + "1782424", + "1782457", + "1782466", + "1782507", + "1782523", + "1782542", + "1782543", + "1782560", + "1782579", + "1782585", + "1782595", + "1782615", + "1782622", + "1782627", + "1782645", + "1782672", + "1782682", + "1782689", + "1782700", + "1782706", + "1782707", + "1782709", + "1782726", + "1782727", + "1782743", + "1782744", + "1782745", + "1782747", + "1782762", + "1782763", + "1782776", + "1782777", + "1782803", + "1782808", + "1782809", + "1782822", + "1782833", + "1782837", + "1782840", + "1782841", + "1782853", + "1782870", + "1782871", + "1782878", + "1782921", + "1782927", + "1782928", + "1782934", + "1782948", + "1782961", + "1782972", + "1782978", + "1782993", + "1783002", + "1783008", + "1783013", + "1783016", + "1783035", + "1783037", + "1783043", + "1783045", + "1783055", + "1783059", + "1783090", + "1783173", + "1783302", + "1783313", + "1783371", + "1783378", + "1783652", + "1783713", + "1783725", + "1783777", + "1783811", + "1783841", + "1783842", + "1783855", + "1783882", + "1783906", + "1783940", + "1783971", + "1784281", + "1784282", + "1784349", + "1784359", + "1784422", + "1784461", + "1784513", + "1784582", + "1784610", + "1784646", + "1784688", + "1784761", + "1784812", + "1784826", + "1784853", + "1784893", + "1784936", + "1784959", + "1785024", + "1785072", + "1785105", + "1785145", + "1785149", + "1785162", + "1785166", + "1785168", + "1785181", + "1785185", + "1785220", + "1785280", + "1785286", + "1785314", + "1785329", + "1785331", + "1785361", + "1785367", + "1785399", + "1785403", + "1785725", + "1785728", + "1785730", + "1785732", + "1785733", + "1785744", + "1785832", + "1785875", + "1785886", + "1785887", + "1785888", + "1785895", + "1785913", + "1785916", + "1785951", + "1785955", + "1785992", + "1785997", + "1786007", + "1786017", + "1786035", + "1786036", + "1786217", + "1786219", + "1786247", + "1786308", + "1786317", + "1786360", + "1786455", + "1786565", + "1786566", + "1786567", + "1786573", + "1786597", + "1786619", + "1786651", + "1786658", + "1786664", + "1786711", + "1786733", + "1786808", + "1786902", + "1786912", + "1786913", + "1786936", + "1786958", + "1786980", + "1786984", + "1786985", + "1786990", + "1787003", + "1787009", + "1787010", + "1787064", + "1787072", + "1787079", + "1787090", + "1787106", + "1787112", + "1787165", + "1787213", + "1787226", + "1787267", + "1787279", + "1787381", + "1787400", + "1787417", + "1787438", + "1787504", + "1787506", + "1787590", + "1787610", + "1787631", + "1787697", + "1787751", + "1787770", + "1787825", + "1787859", + "1787905", + "1788034", + "1788037", + "1788045", + "1788063", + "1788070", + "1788139", + "1788278", + "1788372", + "1788425", + "1788485", + "1788522", + "1788553", + "1788635", + "1788673", + "1788677", + "1788679", + "1788680", + "1788681", + "1788711", + "1788717", + "1788720", + "1788734", + "1788813", + "1788846", + "1788856", + "1788881", + "1788891", + "1788917", + "1788953", + "1789057", + "1789071", + "1789073", + "1789076", + "1789086", + "1789155", + "1789191", + "1789193", + "1789212", + "1789225", + "1789250", + "1789255", + "1789267", + "1789403", + "1789481", + "1789498", + "1789505", + "1789512", + "1789553", + "1789580", + "1789604", + "1789637", + "1789694", + "1789695", + "1789730", + "1789745", + "1789753", + "1789755", + "1789783", + "1789785", + "1789794", + "1789805", + "1789840", + "1789849", + "1789957", + "1789982", + "1789984", + "1790002", + "1790013", + "1790062", + "1790072", + "1790084", + "1790153", + "1790230", + "1790240", + "1790246", + "1790248", + "1790257", + "1790258", + "1790268", + "1790274", + "1790287", + "1790308", + "1790331", + "1790343", + "1790361", + "1790364", + "1790369", + "1790371", + "1790376", + "1790450", + "1790625", + "1790671", + "1790692", + "1790737", + "1790787", + "1790816", + "1790832", + "1790876", + "1790888", + "1790900", + "1790910", + "1790937", + "1790945", + "1791010", + "1791094", + "1791331", + "1791372", + "1791379", + "1791384", + "1791422", + "1791514", + "1791590", + "1791660", + "1791680", + "1791698", + "1791715", + "1791735", + "1791736", + "1791784", + "1791793", + "1791837", + "1791846", + "1791862", + "1792061", + "1792072", + "1792073", + "1792087", + "1792091", + "1792095", + "1792096", + "1792099", + "1792210", + "1792276", + "1792292", + "1792300", + "1792318", + "1792335", + "1792377", + "1792379", + "1792383", + "1792411", + "1792414", + "1792418", + "1792426", + "1792430", + "1792431", + "1792442", + "1792449", + "1792456", + "1792465", + "1792475", + "1792478", + "1792485", + "1792497", + "1792517", + "1792555", + "1792560", + "1792564", + "1792645", + "1792695", + "1792768", + "1792817", + "1792827", + "1792831", + "1792996", + "1793189", + "1793192", + "1793243", + "1793246", + "1793368", + "1793369", + "1793419", + "1793453", + "1793455", + "1793515", + "1793533", + "1793538", + "1793542", + "1793613", + "1793631", + "1793635", + "1793646", + "1793661", + "1793689", + "1793699", + "1793877", + "1793983", + "1793986", + "1794102", + "1794273", + "1794351", + "1794361", + "1794425", + "1794507", + "1794510", + "1794518", + "1794532", + "1794590", + "1794609", + "1795042", + "1795045", + "1795049", + "1795065", + "1795068", + "1795074", + "1795110", + "1795215", + "1795282", + "1795483", + "1795542", + "1795657", + "1795788", + "1795802", + "1795812", + "1795854", + "1795862", + "1795871", + "1795900", + "1795930", + "1795946", + "1795957", + "1796007", + "1796032", + "1796035", + "1796040", + "1796100", + "1796117", + "1796139", + "1796145", + "1796169", + "1796180", + "1796181", + "1796188", + "1796217", + "1796257", + "1796274", + "1796310", + "1796312", + "1796338", + "1796423", + "1796451", + "1796463", + "1796523", + "1796678", + "1796791", + "1796842", + "1796941", + "1796958", + "1796984", + "1797039", + "1797111", + "1797121", + "1797122", + "1797135", + "1797137", + "1797146", + "1797178", + "1797194", + "1797198", + "1797206", + "1797210", + "1797218", + "1797252", + "1797257", + "1797258", + "1797275", + "1797276", + "1797285", + "1797290", + "1797296", + "1797300", + "1797333", + "1797339", + "1797349", + "1797365", + "1797367", + "1797373", + "1797374", + "1797375", + "1797394", + "1797409", + "1797429", + "1797432", + "1797433", + "1797436", + "1797440", + "1797445", + "1797454", + "1797464", + "1797475", + "1797479", + "1797488", + "1797507", + "1797521", + "1797527", + "1797542", + "1797556", + "1797587", + "1797592", + "1797593", + "1797595", + "1797601", + "1797727", + "1797735", + "1797793", + "1797903", + "1798014", + "1798018", + "1798023", + "1798025", + "1798060", + "1798084", + "1798090", + "1798101", + "1798288", + "1798329", + "1798335", + "1798346", + "1798371", + "1798372", + "1798375", + "1798393", + "1798402", + "1798408", + "1798427", + "1798449", + "1798481", + "1798488", + "1798504", + "1798511", + "1798529", + "1798580", + "1798594", + "1798687", + "1798794", + "1798802", + "1798807", + "1798823", + "1798863", + "1798868", + "1798916", + "1798922", + "1798931", + "1798971", + "1798974", + "1798984", + "1799132", + "1799135", + "1799165", + "1799167", + "1799183", + "1799417", + "1799433", + "1799675", + "1799680", + "1799701", + "1799703", + "1799708", + "1799743", + "1799751", + "1799757", + "1799774", + "1799799", + "1799821", + "1799870", + "1799877", + "1799880", + "1799884", + "1799894", + "1799900", + "1799901", + "1799917", + "1799925", + "1799938", + "1799944", + "1799956", + "1799957", + "1799967", + "1800004", + "1800017", + "1800024", + "1800028", + "1800032", + "1800130", + "1800140", + "1800149", + "1800191", + "1800238", + "1800441", + "1800473", + "1800522", + "1800528", + "1800539", + "1800562", + "1800642", + "1800696", + "1800821", + "1800843", + "1800844", + "1800881", + "1800963", + "1801001", + "1801051", + "1801073", + "1801080", + "1801084", + "1801170", + "1801196", + "1801303", + "1801305", + "1801316", + "1801432", + "1801461", + "1801787", + "1801896", + "1801903", + "1801922", + "1801993", + "1802120", + "1802229", + "1802244", + "1802280", + "1802337", + "1802662", + "1802702", + "1802776", + "1802783", + "1802827", + "1802850", + "1802868", + "1802888", + "1802919", + "1802939", + "1802978", + "1802998", + "1803012", + "1803021", + "1803022", + "1803025", + "1803035", + "1803039", + "1803060", + "1803065", + "1803073", + "1803091", + "1803108", + "1803148", + "1803163", + "1803197", + "1803218", + "1803461", + "1803544", + "1803545", + "1803590", + "1803781", + "1803788", + "1803824", + "1804071", + "1804074", + "1804120", + "1804148", + "1804182", + "1804331", + "1804394", + "1804398", + "1804409", + "1804430", + "1804477", + "1804512", + "1804610", + "1804721", + "1804727", + "1804742", + "1804759", + "1804906", + "1804963", + "1804969", + "1804971", + "1804974", + "1805043", + "1805044", + "1805110", + "1805111", + "1805155", + "1805271", + "1805524", + "1805535", + "1805537", + "1805540", + "1805549", + "1805682", + "1805691", + "1805717", + "1805806", + "1805938", + "1805955", + "1805982", + "1806064", + "1806075", + "1806145", + "1806170", + "1806176", + "1806690", + "1806702", + "1806704", + "1806737", + "1806740", + "1806814", + "1806871", + "1806872", + "1806878", + "1806887", + "1806936", + "1807271", + "1807273", + "1807473", + "1807477", + "1807478", + "1807479", + "1807480", + "1807483", + "1807485", + "1807488", + "1807491", + "1807503", + "1807553", + "1807569", + "1807634", + "1807881", + "1807969", + "1808088", + "1808145", + "1808161", + "1808172", + "1808180", + "1808195", + "1808221", + "1808232", + "1808236", + "1808286", + "1808359", + "1808381", + "1808440", + "1808450", + "1808559", + "1808590", + "1808592", + "1808752", + "1809019", + "1809066", + "1809115", + "1809127", + "1809135", + "1809158", + "1809159", + "1809210", + "1809244", + "1809248", + "1809294", + "1809299", + "1809305", + "1809308", + "1809348", + "1809381", + "1809387", + "1809491", + "1809499", + "1809585", + "1809594", + "1810025", + "1810099", + "1810121", + "1810145", + "1810172", + "1810464", + "1810469", + "1810743", + "1810752", + "1810846", + "1810851", + "1810867", + "1811019", + "1811026", + "1811079", + "1811081", + "1811122", + "1811439", + "1811455", + "1811462", + "1811465", + "1811686", + "1811814", + "1811948", + "1812026", + "1812105", + "1812207", + "1812262", + "1812394", + "1812437", + "1812453", + "1812465", + "1812500", + "1812573", + "1812658", + "1812881", + "1813010", + "1813114", + "1813248", + "1813263", + "1813415", + "1813460", + "1813468", + "1814182", + "1814323", + "1814336", + "1814338", + "1814357", + "1814359", + "1814365", + "1814538", + "1814552", + "1814630", + "1814653", + "1814665", + "1814800", + "1814823", + "1814827", + "1814838", + "1814843", + "1814863", + "1814877", + "1814913", + "1814928", + "1814971", + "1815260", + "1815315", + "1815338", + "1815856", + "1816029", + "1816065", + "1816110", + "1816138", + "1816264", + "1816276", + "1816292", + "1816299", + "1816362", + "1816434", + "1816570", + "1816634", + "1816648", + "1816673", + "1816775", + "1816881", + "1817065", + "1817086", + "1817160", + "1817171", + "1817217", + "1817696", + "1817727", + "1817729", + "1817732", + "1817734", + "1817797", + "1817808", + "1817810", + "1817852", + "1817854", + "1817864", + "1817940", + "1817973", + "1818216", + "1818413", + "1818454", + "1818463", + "1818659", + "1818991", + "1819057", + "1819128", + "1819145", + "1819170", + "1819268", + "1819270", + "1819280", + "1819337", + "1819362", + "1819668", + "1819685", + "1819699", + "1819852", + "1819873", + "1819970", + "1820039", + "1820118", + "1820137", + "1820275", + "1820282", + "1820352", + "1820372", + "1820406", + "1820414", + "1820435", + "1820450", + "1820451", + "1820458", + "1820477", + "1820478", + "1820565", + "1820573", + "1820711", + "1820722", + "1820753", + "1820791", + "1820888", + "1820940", + "1821051", + "1821105", + "1821113", + "1821448", + "1821455", + "1821464", + "1821468", + "1821478", + "1821505", + "1821542", + "1821547", + "1821651", + "1821856", + "1821863", + "1821920", + "1821934", + "1821940", + "1822017", + "1822141", + "1822142", + "1822257", + "1822346", + "1822487", + "1822493", + "1822587", + "1822610", + "1822613", + "1822784", + "1822787", + "1822788", + "1822796", + "1822805", + "1822819", + "1822830", + "1822848", + "1822916", + "1822917", + "1823294", + "1823444", + "1823493", + "1823573", + "1823604", + "1823706", + "1823726", + "1824080", + "1824113", + "1824117", + "1824121", + "1824131", + "1824242", + "1824259", + "1824280", + "1824330", + "1824338", + "1824354", + "1824390", + "1824442", + "1824449", + "1824571", + "1824751", + "1824845", + "1825064", + "1825077", + "1825082", + "1825083", + "1825156", + "1825176", + "1825218", + "1825238", + "1825373", + "1825391", + "1825428", + "1825430", + "1825539", + "1825786", + "1825956", + "1825967", + "1825971", + "1825983", + "1826022", + "1826033", + "1826048", + "1826058", + "1826084", + "1826108", + "1826129", + "1826156", + "1826163", + "1826164", + "1826167", + "1826169", + "1826172", + "1826173", + "1826175", + "1826181", + "1826222", + "1826772", + "1827103", + "1827112", + "1827113", + "1827125", + "1827132", + "1827133", + "1827161", + "1827349", + "1827408", + "1827429", + "1827484", + "1827507", + "1827645", + "1827650", + "1827687", + "1827711", + "1827716", + "1827775", + "1827802", + "1827810", + "1827826", + "1827829", + "1828105", + "1828162", + "1828268", + "1828310", + "1828317", + "1828395", + "1828400", + "1828402", + "1828455", + "1828456", + "1828471", + "1828491", + "1828540", + "1828543", + "1828544", + "1828637", + "1828826", + "1828976", + "1829021", + "1829029", + "1829287", + "1829322", + "1829363", + "1829533", + "1829588", + "1829612", + "1829659", + "1829703", + "1829776", + "1829785", + "1829823", + "1829866", + "1829974", + "1830031", + "1830099", + "1830122", + "1830125", + "1830131", + "1830137", + "1830147", + "1830152", + "1830191", + "1830203", + "1830207", + "1830241", + "1830243", + "1830262", + "1830266", + "1830271", + "1830284", + "1830372", + "1830374", + "1830380", + "1830407", + "1830408", + "1830410", + "1830419", + "1830435", + "1830442", + "1830457", + "1830459", + "1830498", + "1830632", + "1830669", + "1830681", + "1830802", + "1830812", + "1830838", + "1830843", + "1830879", + "1830937", + "1830962", + "1831002", + "1831009", + "1831097", + "1831136", + "1831168", + "1831458", + "1831473", + "1831499", + "1831508", + "1831565", + "1831631", + "1831643", + "1831667", + "1831752", + "1831775", + "1831780", + "1831861", + "1831999", + "1832235", + "1832254", + "1832518", + "1832533", + "1832553", + "1832569", + "1832612", + "1832649", + "1832853", + "1832915", + "1832927", + "1833475", + "1833477", + "1833497", + "1833499", + "1833500", + "1833518", + "1833523", + "1833525", + "1833531", + "1833539", + "1833562", + "1833600", + "1833626", + "1833627", + "1833653", + "1833782", + "1833794", + "1834078", + "1834428", + "1834497", + "1834524", + "1834547", + "1834589", + "1834710", + "1834793", + "1834850", + "1834980", + "1835031", + "1835082", + "1835086", + "1835121", + "1835128", + "1835156", + "1835348", + "1835393", + "1835396", + "1835407", + "1835430", + "1835432", + "1835433", + "1835436", + "1835438", + "1835449", + "1835451", + "1835456", + "1835457", + "1835467", + "1835500", + "1835555", + "1835609", + "1835612", + "1835790", + "1835814", + "1835819", + "1835821", + "1835848", + "1835862", + "1835908", + "1835928", + "1836871", + "1836899", + "1836906", + "1836907", + "1837053", + "1837159", + "1837172", + "1837343", + "1837420", + "1837429", + "1837464", + "1837515", + "1837569", + "1837646", + "1837706", + "1837724", + "1837726", + "1837727", + "1837857", + "1837870", + "1837894", + "1837900", + "1837968", + "1838058", + "1838065", + "1838071", + "1838084", + "1838224", + "1838251", + "1838255", + "1838276", + "1838289", + "1838297", + "1838304", + "1838308", + "1838331", + "1838333", + "1838360", + "1838465", + "1838512", + "1838584", + "1838626", + "1838633", + "1838635", + "1838641", + "1838649", + "1838691", + "1838811", + "1838838", + "1838905", + "1838911", + "1838958", + "1838960", + "1838969", + "1839094", + "1839293", + "1839296", + "1839317", + "1839323", + "1839325", + "1839333", + "1839396", + "1839560", + "1839604", + "1839625", + "1839658", + "1839714", + "1839721", + "1839851", + "1839878", + "1839893", + "1840260", + "1840297", + "1840301", + "1840311", + "1840345", + "1840346", + "1840360", + "1840371", + "1840379", + "1840380", + "1840408", + "1840441", + "1840448", + "1840478", + "1840483", + "1840520", + "1840543", + "1840553", + "1840555", + "1840566", + "1840570", + "1840581", + "1840592", + "1840596", + "1840656", + "1840726", + "1840774", + "1840776", + "1840812", + "1840844", + "1841081", + "1841084", + "1841091", + "1841158", + "1841159", + "1841183", + "1841188", + "1841219", + "1841221", + "1841261", + "1841296", + "1841302", + "1841460", + "1841476", + "1841616", + "1841706", + "1841782", + "1841813", + "1841946", + "1842097", + "1842124", + "1842196", + "1842446", + "1842485", + "1842542", + "1842690", + "1842695", + "1843313", + "1843326", + "1843331", + "1843370", + "1843444", + "1843485", + "1843564", + "1843602", + "1845270", + "1845271", + "1845314", + "1845329", + "1845335", + "1845368", + "1845385", + "1845442", + "1845448", + "1845455", + "1845502", + "1845503", + "1845513", + "1845547", + "1845565", + "1845574", + "1845586", + "1845604", + "1845605", + "1845607", + "1845616", + "1845793", + "1845866", + "1845952", + "1845962", + "1845965", + "1845982", + "1846035", + "1846052", + "1846099", + "1846103", + "1846107", + "1846111", + "1846112", + "1846133", + "1846141", + "1846149", + "1846159", + "1846190", + "1846219", + "1846229", + "1846236", + "1846259", + "1846261", + "1846313", + "1846351", + "1846374", + "1846439", + "1846505", + "1846604", + "1846657", + "1846715", + "1846729", + "1846849", + "1846858", + "1846860", + "1846916", + "1846941", + "1846945", + "1846971", + "1846992", + "1847059", + "1847061", + "1847064", + "1847066", + "1847068", + "1847097", + "1847111", + "1847149", + "1847157", + "1847249", + "1847260", + "1847274", + "1847308", + "1847343", + "1847392", + "1847407", + "1847426", + "1847484", + "1847498", + "1847572", + "1847639", + "1847641", + "1847919", + "1847930", + "1847944", + "1847956", + "1848114", + "1848150", + "1848202", + "1848212", + "1848219", + "1848272", + "1848273", + "1848274", + "1848295", + "1848312", + "1848322", + "1848325", + "1848356", + "1848378", + "1848426", + "1848490", + "1848596", + "1848610", + "1848636", + "1848639", + "1848669", + "1848690", + "1848713", + "1848714", + "1848717", + "1848730", + "1848741", + "1848864", + "1848868", + "1848920", + "1849007", + "1849010", + "1849104", + "1849267", + "1849273", + "1849284", + "1849294", + "1849457", + "1849470", + "1849477", + "1849630", + "1849656", + "1849856", + "1849897", + "1849924", + "1850008", + "1850042", + "1850076", + "1850106", + "1850156", + "1850184", + "1850225", + "1850238", + "1850246", + "1850279", + "1850321", + "1850335", + "1850386", + "1850394", + "1850450", + "1850463", + "1850497", + "1850506", + "1850522", + "1850533", + "1850538", + "1850570", + "1850585", + "1850597", + "1850640", + "1850673", + "1850690", + "1850722", + "1850729", + "1850764", + "1850771", + "1850773", + "1850774", + "1850781", + "1850798", + "1850868", + "1850908", + "1850922", + "1850923", + "1851000", + "1851002", + "1851010", + "1851011", + "1851039", + "1851203", + "1851213", + "1851220", + "1851237", + "1851243", + "1851300", + "1851337", + "1851347", + "1851453", + "1851462", + "1851543", + "1851555", + "1851670", + "1851714", + "1851845", + "1852150", + "1852159", + "1852165", + "1852177", + "1852320", + "1852382", + "1852430", + "1852751", + "1852787", + "1852831", + "1852901", + "1852956", + "1853064", + "1853190", + "1853242", + "1853312", + "1853578", + "1854021", + "1854143", + "1854202", + "1854237", + "1854249", + "1854259", + "1854287", + "1854347", + "1854615", + "1854792", + "1854824", + "1854849", + "1854906", + "1854920", + "1855241", + "1855358", + "1855452", + "1855630", + "1855799", + "1855804", + "1855807", + "1855813", + "1856005", + "1856105", + "1856289", + "1856348", + "1856368", + "1856384", + "1856394", + "1856503", + "1856516", + "1856555", + "1856581", + "1856595", + "1856620", + "1856663", + "1856668", + "1856691", + "1856701", + "1856730", + "1856768", + "1856772", + "1856867", + "1856891", + "1856893", + "1857020", + "1857143", + "1857180", + "1857213", + "1857233", + "1857258", + "1857295", + "1857315", + "1857385", + "1857410", + "1857577", + "1857581", + "1857626", + "1857690", + "1857785", + "1857809", + "1857828", + "1857829", + "1857840", + "1857856", + "1857863", + "1857878", + "1857882", + "1857900", + "1857918", + "1857924", + "1857935", + "1857938", + "1857948", + "1857973", + "1857978", + "1858074", + "1858100", + "1858113", + "1858163", + "1858283", + "1858404", + "1858411", + "1858526", + "1858531", + "1858557", + "1858615", + "1858637", + "1858659", + "1858660", + "1858674", + "1858698", + "1858706", + "1858762", + "1858775", + "1858778", + "1858873", + "1858930", + "1859046", + "1859061", + "1859100", + "1859161", + "1859177", + "1859285", + "1859287", + "1859305", + "1859453", + "1859471", + "1859480", + "1859534", + "1859932", + "1859952", + "1860026", + "1860063", + "1860108", + "1860118", + "1860184", + "1860259", + "1860261", + "1860274", + "1860408", + "1860443", + "1860621", + "1860628", + "1860659", + "1860664", + "1860668", + "1860671", + "1860688", + "1860711", + "1860736", + "1860765", + "1860768", + "1860857", + "1860974", + "1860979", + "1860983", + "1860987", + "1860989", + "1860993", + "1860994", + "1860996", + "1861011", + "1861030", + "1861031", + "1861395", + "1861433", + "1861451", + "1861456", + "1861457", + "1861458", + "1861479", + "1861488", + "1861494", + "1861510", + "1861544", + "1861559", + "1861584", + "1861592", + "1861604", + "1861644", + "1861663", + "1861665", + "1861673", + "1861697", + "1861705", + "1861714", + "1861721", + "1861759", + "1861773", + "1861783", + "1861784", + "1861797", + "1861823", + "1861834", + "1861836", + "1861851", + "1861862", + "1861887", + "1861892", + "1861893", + "1861933", + "1861937", + "1861938", + "1861949", + "1861951", + "1861953", + "1861958", + "1861967", + "1861975", + "1862008", + "1862026", + "1862033", + "1862044", + "1862046", + "1862047", + "1862049", + "1862066", + "1862078", + "1862083", + "1862087", + "1862088", + "1862091", + "1862094", + "1862096", + "1862123", + "1862129", + "1862163", + "1862181", + "1862198", + "1862293", + "1862311", + "1862331", + "1862363", + "1862370", + "1862394", + "1862401", + "1862403", + "1862414", + "1862430", + "1862433", + "1862434", + "1862441", + "1862449", + "1862454", + "1862468", + "1862475", + "1862481", + "1862516", + "1862517", + "1862521", + "1862526", + "1862547", + "1862551", + "1862569", + "1862572", + "1862578", + "1862580", + "1862595", + "1862624", + "1862658", + "1862692", + "1862701", + "1862719", + "1862757", + "1862765", + "1862774", + "1862805", + "1862837", + "1862841", + "1862916", + "1862917", + "1862923", + "1862928", + "1863021", + "1863025", + "1863034", + "1863051", + "1863075", + "1863080", + "1863088", + "1863109", + "1863143", + "1863282", + "1863354", + "1863366", + "1863405", + "1863407", + "1863412", + "1863426", + "1863467", + "1863584", + "1863640", + "1863646", + "1863699", + "1863701", + "1863706", + "1863714", + "1863724", + "1863732", + "1863734", + "1863735", + "1863742", + "1863757", + "1863829", + "1863848", + "1863856", + "1863858", + "1863864", + "1863880", + "1863944", + "1863955", + "1863978", + "1863982", + "1864004", + "1864008", + "1864021", + "1864058", + "1864070", + "1864090", + "1864103", + "1864106", + "1864126", + "1864135", + "1864156", + "1864161", + "1864164", + "1864204", + "1864316", + "1864320", + "1864321", + "1864329", + "1864352", + "1864358", + "1864377", + "1864576", + "1864652", + "1864793", + "1864796", + "1864897", + "1864905", + "1865102", + "1865107", + "1865108", + "1865120", + "1865132", + "1865295", + "1865299", + "1865319", + "1865328", + "1865333", + "1865341", + "1865345", + "1865347", + "1865353", + "1865555", + "1865571", + "1865572", + "1865578", + "1865590", + "1865650", + "1865659", + "1865660", + "1865666", + "1865668", + "1865671", + "1865709", + "1865764", + "1865837", + "1865839", + "1865842", + "1865853", + "1865856", + "1865862", + "1865869", + "1865930", + "1866006", + "1866085", + "1866105", + "1866123", + "1866162", + "1866164", + "1866214", + "1866237", + "1866252", + "1866262", + "1866311", + "1866336", + "1866338", + "1866341", + "1866356", + "1866421", + "1866491", + "1866549", + "1866550", + "1866556", + "1866568", + "1866570", + "1866573", + "1866601", + "1866838", + "1866902", + "1867009", + "1867014", + "1867021", + "1867022", + "1867029", + "1867032", + "1867037", + "1867218", + "1867224", + "1867312", + "1867426", + "1867515", + "1867525", + "1867552", + "1867673", + "1867722", + "1867751", + "1867773", + "1867788", + "1867820", + "1867928", + "1867991", + "1867993", + "1868014", + "1868025", + "1868060", + "1868211", + "1868334", + "1868360", + "1868409", + "1868428", + "1868470", + "1868499", + "1868527", + "1868535", + "1868837", + "1868884", + "1868952", + "1869043", + "1869057", + "1869178", + "1869238", + "1869359", + "1869363", + "1869478", + "1869489", + "1869512", + "1869595", + "1869656", + "1869666", + "1869706", + "1869707", + "1869714", + "1869803", + "1869825", + "1869852", + "1869976", + "1870037", + "1870202", + "1870237", + "1870249", + "1870250", + "1870267", + "1870415", + "1870426", + "1870450", + "1870452", + "1870459", + "1870506", + "1870509", + "1870703", + "1870721", + "1870727", + "1870733", + "1870751", + "1870777", + "1870988", + "1871175", + "1871212", + "1871217", + "1871252", + "1871379", + "1871407", + "1871414", + "1871419", + "1871451", + "1871457", + "1871504", + "1871597", + "1871630", + "1871683", + "1871698", + "1871754", + "1871763", + "1871783", + "1871826", + "1871890", + "1871923", + "1871940", + "1871988", + "1872169", + "1872210", + "1872255", + "1872315", + "1872359", + "1872361", + "1872368", + "1872452", + "1872456", + "1872466", + "1872470", + "1872514", + "1872515", + "1872735", + "1872848", + "1872850", + "1872873", + "1872901", + "1873048", + "1873051", + "1873079", + "1873215", + "1873267", + "1873285", + "1873290", + "1873291", + "1873319", + "1873373", + "1873376", + "1873381", + "1873384", + "1873398", + "1873411", + "1873417", + "1873585", + "1873620", + "1873697", + "1873753", + "1873773", + "1873776", + "1873780", + "1873783", + "1873843", + "1874146", + "1874158", + "1874160", + "1874168", + "1874179", + "1874192", + "1874204", + "1874211", + "1874229", + "1874248", + "1874257", + "1874269", + "1874274", + "1874280", + "1874317", + "1874375", + "1874552", + "1874743", + "1874937", + "1875008", + "1875120", + "1875319", + "1875327", + "1875407", + "1875409", + "1875451", + "1875478", + "1875483", + "1875485", + "1875534", + "1875554", + "1875584", + "1875606", + "1875607", + "1875631", + "1875682", + "1875687", + "1875827", + "1875844", + "1875865", + "1875869", + "1875885", + "1875914", + "1875918", + "1875958", + "1876168", + "1876329", + "1876409", + "1876479", + "1876512", + "1876542", + "1876548", + "1876549", + "1876592", + "1876623", + "1876665", + "1876854", + "1876922", + "1876955", + "1876987", + "1877002", + "1877282", + "1877310", + "1877321", + "1877338", + "1877341", + "1877345", + "1877353", + "1877364", + "1877365", + "1877368", + "1877372", + "1877406", + "1877443", + "1877453", + "1877492", + "1877498", + "1877537", + "1877788", + "1877940", + "1877941", + "1877975", + "1877986", + "1877988", + "1877995", + "1878067", + "1878158", + "1878173", + "1878197", + "1878350", + "1878370", + "1878392", + "1878406", + "1878471", + "1878490", + "1878500", + "1878586", + "1878626", + "1878656", + "1878705", + "1878744", + "1878751", + "1878753", + "1878782", + "1878789", + "1878804", + "1878810", + "1878826", + "1878837", + "1878862", + "1878879", + "1878895", + "1878904", + "1878937", + "1878939", + "1878951", + "1878958", + "1879001", + "1879125", + "1879141", + "1879227", + "1879252", + "1879253", + "1879272", + "1879274", + "1879339", + "1879340", + "1879379", + "1879398", + "1879405", + "1879408", + "1879413", + "1879443", + "1879452", + "1879465", + "1879471", + "1879490", + "1879534", + "1879630", + "1879655", + "1879691", + "1879703", + "1879731", + "1879735", + "1879765", + "1879939", + "1879970", + "1879975", + "1880011", + "1880013", + "1880019", + "1880025", + "1880040", + "1880044", + "1880049", + "1880064", + "1880078", + "1880083", + "1880094", + "1880104", + "1880123", + "1880132", + "1880133", + "1880138", + "1880139", + "1880140", + "1880143", + "1880156", + "1880286", + "1880305", + "1880310", + "1880316", + "1880318", + "1880321", + "1880350", + "1880352", + "1880353", + "1880379", + "1880381", + "1880408", + "1880411", + "1880439", + "1880451", + "1880464", + "1880465", + "1880505", + "1880537", + "1880623", + "1880852", + "1880858", + "1880865", + "1880907", + "1880931", + "1880968", + "1880982", + "1881018", + "1881019", + "1881031", + "1881041", + "1881079", + "1881089", + "1881094", + "1881111", + "1881122", + "1881126", + "1881132", + "1881151", + "1881157", + "1881166", + "1881170", + "1881208", + "1881293", + "1881303", + "1881320", + "1881329", + "1881336", + "1881340", + "1881362", + "1881393", + "1881404", + "1881418", + "1881424", + "1881485", + "1881504", + "1881515", + "1881603", + "1881767", + "1881822", + "1881834", + "1881955", + "1881964", + "1882021", + "1882089", + "1882110", + "1882158", + "1882165", + "1882190", + "1882195", + "1882210", + "1882215", + "1882253", + "1882266", + "1882272", + "1882297", + "1882316", + "1882355", + "1882437", + "1882459", + "1882557", + "1882729", + "1882753", + "1882767", + "1882771", + "1882773", + "1882785", + "1882786", + "1882812", + "1882816", + "1882818", + "1882884", + "1882901", + "1882905", + "1882927", + "1882930", + "1882941", + "1882959", + "1882960", + "1882965", + "1882977", + "1882979", + "1883020", + "1883024", + "1883028", + "1883067", + "1883124", + "1883161", + "1883386", + "1883458", + "1883634", + "1883829", + "1883873", + "1883881", + "1883885", + "1883897", + "1883943", + "1883951", + "1883968", + "1883975", + "1883993", + "1884001", + "1884051", + "1884212", + "1884213", + "1884228", + "1884229", + "1884240", + "1884254", + "1884255", + "1884273", + "1884274", + "1884280", + "1884326", + "1884332", + "1884337", + "1884370", + "1884403", + "1884428", + "1884434", + "1884435", + "1884437", + "1884439", + "1884449", + "1884453", + "1884461", + "1884464", + "1884465", + "1884479", + "1884503", + "1884531", + "1884539", + "1884595", + "1884607", + "1884685", + "1884703", + "1884774", + "1884816", + "1884844", + "1884858", + "1884877", + "1884890", + "1884908", + "1884909", + "1884923", + "1884936", + "1884970", + "1884997", + "1885001", + "1885012", + "1885099", + "1885158", + "1885202", + "1885229", + "1885262", + "1885263", + "1885569", + "1885605", + "1885623", + "1885630", + "1885642", + "1885702", + "1885745", + "1885763", + "1885764", + "1885826", + "1885836", + "1885919", + "1885931", + "1885937", + "1885945", + "1885950", + "1885994", + "1886015", + "1886084", + "1886104", + "1886123", + "1886207", + "1886251", + "1886262", + "1886292", + "1886320", + "1886362", + "1886374", + "1886378", + "1886400", + "1886419", + "1886490", + "1886501", + "1886526", + "1886579", + "1886583", + "1886587", + "1886648", + "1886650", + "1886700", + "1886720", + "1886726", + "1886729", + "1886906", + "1886929", + "1886935", + "1887004", + "1887024", + "1887031", + "1887054", + "1887108", + "1887119", + "1887122", + "1887125", + "1887173", + "1887177", + "1887178", + "1887285", + "1887290", + "1887309", + "1887341", + "1887459", + "1887462", + "1887509", + "1887565", + "1887580", + "1887585", + "1887586", + "1887634", + "1887686", + "1887691", + "1887694", + "1887701", + "1888009", + "1888027", + "1888092", + "1888123", + "1888306", + "1888307", + "1888324", + "1888336", + "1888338", + "1888346", + "1888410", + "1888435", + "1888454", + "1888463", + "1888484", + "1888537", + "1888579", + "1888619", + "1888623", + "1888638", + "1888646", + "1888695", + "1888733", + "1888736", + "1888743", + "1888759", + "1888823", + "1888826", + "1888891", + "1888893", + "1888906", + "1888913", + "1888915", + "1888926", + "1888955", + "1888958", + "1889039", + "1889053", + "1889071", + "1889074", + "1889239", + "1889242", + "1889249", + "1889272", + "1889277", + "1889287", + "1889356", + "1889358", + "1889370", + "1889381", + "1889536", + "1889543", + "1889563", + "1889721", + "1889745", + "1889765", + "1889769", + "1889828", + "1889833", + "1889838", + "1889850", + "1889870", + "1889905", + "1889939", + "1889942", + "1890031", + "1890056", + "1890065", + "1890089", + "1890097", + "1890187", + "1890247", + "1890287", + "1890320", + "1890335", + "1890343", + "1890346", + "1890374", + "1890404", + "1890410", + "1890417", + "1890487", + "1890491", + "1890508", + "1890512", + "1890520", + "1890522", + "1890534", + "1890540", + "1890560", + "1890576", + "1890622", + "1890629", + "1890654", + "1890656", + "1890670", + "1890679", + "1890699", + "1890703", + "1890724", + "1890730", + "1890737", + "1890772", + "1890776", + "1890783", + "1890794", + "1890800", + "1890802", + "1890854", + "1890876", + "1890885", + "1890898", + "1890936", + "1890957", + "1890975", + "1891013", + "1891035", + "1891048", + "1891059", + "1891074", + "1891129", + "1891167", + "1891171", + "1891190", + "1891217", + "1891236", + "1891299", + "1891308", + "1891326", + "1891366", + "1891386", + "1891426", + "1891453", + "1891473", + "1891488", + "1891493", + "1891494", + "1891583", + "1891636", + "1891755", + "1891758", + "1891889", + "1891932", + "1891936", + "1892131", + "1892153", + "1892193", + "1892242", + "1892245", + "1892301", + "1892302", + "1892311", + "1892320", + "1892355", + "1892420", + "1892427", + "1892433", + "1892456", + "1892458", + "1892462", + "1892476", + "1892477", + "1892488", + "1892509", + "1892544", + "1892554", + "1892555", + "1892621", + "1892634", + "1892729", + "1892736", + "1892742", + "1892746", + "1892759", + "1892761", + "1892770", + "1892811", + "1892814", + "1892821", + "1892837", + "1892851", + "1892856", + "1892858", + "1892863", + "1892944", + "1893137", + "1893177", + "1893204", + "1893241", + "1893266", + "1893329", + "1893381", + "1893480", + "1893538", + "1893546", + "1893551", + "1893558", + "1893562", + "1893612", + "1893645", + "1893660", + "1893663", + "1893699", + "1893787", + "1893793", + "1893901", + "1893921", + "1893923", + "1893951", + "1893989", + "1893993", + "1894002", + "1894012", + "1894057", + "1894074", + "1894085", + "1894087", + "1894088", + "1894102", + "1894164", + "1894268", + "1894293", + "1894298", + "1894329", + "1894342", + "1894349", + "1894714", + "1894840", + "1894896", + "1895037", + "1895138", + "1895159", + "1895176", + "1895185", + "1895203", + "1895250", + "1895448", + "1895499", + "1895527", + "1895609", + "1895667", + "1895670", + "1895709", + "1895733", + "1895768", + "1895773", + "1895789", + "1895809", + "1895820", + "1895838", + "1895867", + "1895875", + "1895886", + "1895904", + "1895956", + "1895984", + "1895992", + "1896073", + "1896087", + "1896126", + "1896141", + "1896142", + "1896152", + "1896304", + "1896316", + "1896600", + "1896603", + "1896614", + "1896628", + "1896658", + "1896749", + "1896754", + "1896756", + "1896763", + "1896774", + "1896841", + "1896876", + "1896922", + "1896932", + "1896957", + "1897664", + "1897677", + "1897685", + "1897692", + "1897747", + "1897770", + "1897808", + "1897814", + "1897817", + "1897834", + "1897852", + "1897873", + "1897904", + "1897965", + "1897970", + "1897972", + "1897980", + "1897990", + "1898002", + "1898017", + "1898077", + "1898133", + "1898143", + "1898174", + "1898200", + "1898203", + "1898286", + "1898290", + "1898348", + "1898350", + "1898352", + "1898358", + "1898367", + "1898368", + "1898370", + "1898374", + "1898391", + "1898402", + "1898414", + "1898416", + "1898424", + "1898431", + "1898434", + "1898441", + "1898521", + "1898544", + "1898686", + "1898789", + "1898848", + "1898858", + "1898865", + "1898946", + "1898970", + "1898988", + "1899048", + "1899071", + "1899187", + "1899198", + "1899349", + "1899433", + "1899818", + "1899873", + "1899893", + "1899931", + "1899932", + "1899940", + "1899943", + "1899947", + "1899950", + "1899956", + "1899989", + "1899994", + "1900024", + "1900026", + "1900053", + "1900093", + "1900112", + "1900121", + "1900131", + "1900134", + "1900172", + "1900175", + "1900197", + "1900199", + "1900233", + "1900249", + "1900295", + "1900303", + "1900345", + "1900408", + "1900485", + "1900523", + "1900565", + "1900578", + "1900618", + "1900626", + "1900632", + "1900768", + "1900787", + "1900825", + "1900830", + "1900872", + "1900890", + "1900897", + "1900918", + "1900939", + "1901001", + "1901153", + "1901189", + "1901213", + "1901257", + "1901261", + "1901268", + "1901399", + "1901404", + "1901411", + "1901427", + "1901428", + "1901429", + "1901435", + "1901463", + "1901533", + "1901580", + "1901669", + "1901735", + "1901744", + "1901782", + "1901801", + "1901810", + "1901832", + "1901850", + "1902106", + "1902108", + "1902110", + "1902111", + "1902114", + "1902117", + "1902169", + "1902175", + "1902182", + "1902211", + "1902233", + "1902244", + "1902248", + "1902300", + "1902378", + "1902384", + "1902406", + "1902430", + "1902451", + "1902458", + "1902479", + "1902502", + "1902533", + "1902543", + "1902560", + "1902572", + "1902586", + "1902623", + "1902642", + "1902660", + "1902676", + "1902692", + "1902699", + "1902702", + "1902703", + "1902704", + "1902749", + "1902814", + "1902880", + "1902882", + "1903009", + "1903598", + "1903607", + "1903634", + "1903636", + "1903646", + "1903683", + "1904272", + "1904281", + "1904382", + "1904701", + "1904719", + "1904728", + "1904764", + "1904798", + "1904884", + "1904887", + "1904888", + "1904916", + "1904938", + "1904943", + "1904948", + "1904996", + "1905079", + "1905142", + "1905161", + "1905162", + "1905172", + "1905187", + "1905189", + "1905242", + "1905257", + "1905267", + "1905281", + "1905297", + "1905299", + "1905301", + "1905317", + "1905383", + "1905451", + "1906006", + "1906014", + "1906030", + "1906117", + "1906552", + "1906604", + "1906621", + "1906679", + "1906715", + "1907153", + "1907190", + "1907235", + "1907250", + "1907272", + "1907395", + "1907430", + "1907432", + "1907475", + "1907498", + "1907534", + "1907620", + "1907625", + "1907637", + "1907666", + "1907672", + "1907683", + "1907687", + "1907727", + "1908011", + "1908044", + "1908052", + "1908055", + "1908108", + "1908123", + "1908146", + "1908148", + "1908150", + "1908168", + "1908199", + "1908203", + "1908204", + "1908207", + "1908256", + "1908258", + "1908299", + "1908302", + "1908317", + "1908337", + "1908352", + "1908356", + "1908367", + "1908577", + "1908660", + "1908700", + "1908702", + "1908707", + "1908713", + "1908775", + "1908840", + "1908871", + "1908929", + "1908953", + "1908995", + "1909019", + "1909039", + "1909064", + "1909070", + "1909123", + "1909128", + "1909135", + "1909155", + "1909170", + "1909185", + "1909191", + "1909209", + "1909211", + "1909213", + "1909216", + "1909281", + "1909319", + "1909398", + "1909436", + "1909453", + "1909457", + "1909489", + "1909573", + "1909607", + "1909649", + "1909659", + "1909736", + "1909800", + "1909810", + "1909838", + "1909865", + "1909879", + "1909884", + "1910371", + "1910496", + "1910628", + "1910629", + "1910648", + "1910662", + "1910663", + "1910706", + "1910753", + "1910773", + "1910809", + "1911076", + "1911077", + "1911093", + "1911112", + "1911122", + "1911168", + "1911178", + "1911182", + "1911246", + "1911278", + "1911298", + "1911461", + "1911503", + "1911577", + "1911633", + "1911736", + "1911755", + "1911939", + "1911966", + "1912003", + "1912036", + "1912119", + "1912325", + "1912372", + "1912395", + "1912428", + "1912470", + "1912506", + "1913091", + "1913105", + "1913175", + "1913178", + "1913328", + "1913351", + "1914410", + "1914416", + "1914421", + "1914424", + "1914435", + "1914439", + "1914440", + "1914442", + "1914458", + "1914464", + "1914465", + "1914477", + "1914484", + "1914496", + "1914500", + "1914501", + "1914511", + "1914693", + "1914697", + "1914701", + "1914708", + "1915031", + "1915079", + "1915080", + "1915110", + "1915144", + "1915160", + "1915193", + "1915262", + "1915270", + "1915275", + "1915325", + "1915339", + "1915368", + "1915369", + "1915396", + "1915417", + "1915430", + "1915456", + "1915469", + "1915470", + "1915487", + "1915492", + "1915499", + "1915506", + "1916347", + "1916352", + "1916376", + "1916410", + "1916412", + "1916458", + "1916509", + "1916554", + "1916700", + "1916758", + "1916772", + "1916790", + "1917827", + "1917830", + "1917834", + "1917840", + "1918026", + "1918076", + "1918077", + "1918078", + "1918082", + "1918094", + "1918097", + "1918133", + "1918212", + "1918220", + "1918263", + "1918269", + "1918280", + "1918293", + "1918321", + "1918394", + "1918395", + "1918406", + "1918408", + "1918411", + "1918467", + "1918495", + "1918497", + "1918509", + "1918517", + "1918532", + "1918533", + "1918547", + "1918553", + "1918554", + "1918584", + "1918596", + "1918627", + "1918632", + "1918667", + "1918669", + "1918694", + "1918736", + "1918776", + "1918789", + "1918795", + "1918854", + "1918859", + "1918868", + "1918964", + "1918968", + "1918972", + "1918984", + "1918986", + "1918988", + "1919010", + "1919125", + "1919128", + "1919129", + "1919130", + "1919146", + "1919149", + "1919151", + "1919160", + "1919173", + "1919176", + "1919181", + "1919194", + "1919210", + "1919213", + "1919214", + "1919223", + "1919235", + "1919239", + "1919245", + "1919277", + "1919282", + "1919287", + "1919289", + "1919316", + "1919317", + "1919320", + "1919326", + "1919327", + "1919328", + "1919330", + "1919333", + "1919338", + "1919340", + "1919342", + "1919344", + "1919346", + "1919348", + "1919381", + "1919412", + "1919419", + "1919421", + "1919432", + "1919438", + "1919444", + "1919534", + "1919540", + "1919551", + "1919564", + "1919589", + "1919626", + "1919635", + "1919646", + "1919649", + "1919652", + "1919653", + "1919656", + "1919660", + "1919663", + "1919665", + "1919698", + "1919700", + "1919701", + "1919702", + "1919705", + "1919711", + "1919712", + "1919716", + "1919719", + "1919720", + "1919728", + "1919731", + "1919741", + "1919744", + "1919756", + "1919924", + "1919929", + "1919930", + "1919937", + "1919939", + "1919943", + "1919945", + "1919947", + "1919949", + "1919951", + "1919966", + "1920181", + "1920192", + "1920218", + "1920237", + "1920247", + "1920258", + "1920259", + "1920275", + "1920348", + "1920349", + "1920353", + "1920356", + "1920357", + "1920362", + "1920363", + "1920369", + "1920370", + "1920374", + "1920378", + "1920381", + "1920390", + "1920395", + "1920401", + "1920405", + "1920426", + "1920431", + "1920437", + "1920454", + "1920463", + "1920467", + "1920469", + "1920491", + "1920494", + "1920496", + "1920502", + "1920506", + "1920509", + "1920512", + "1920515", + "1920534", + "1920535", + "1920541", + "1920552", + "1920571", + "1920574", + "1920581", + "1920621", + "1920691", + "1920709", + "1920712", + "1920718", + "1920786", + "1920795", + "1920803", + "1920809", + "1920810", + "1920815", + "1920816", + "1920844", + "1920851", + "1920864", + "1920889", + "1920892", + "1920900", + "1920923", + "1920957", + "1920996", + "1921009", + "1921010", + "1921021", + "1921044", + "1921053", + "1921055", + "1921064", + "1921092", + "1921093", + "1921123", + "1921150", + "1921163", + "1921239", + "1921240", + "1921247", + "1921248", + "1921255", + "1921262", + "1921263", + "1921300", + "1921466", + "1921521", + "1921590", + "1921650", + "1921910", + "1921992", + "1921993", + "1922038", + "1922039", + "1922041", + "1922044", + "1922049", + "1922057", + "1922064", + "1922085", + "1922111", + "1922143", + "1922163", + "1922197", + "1922219", + "1922223", + "1922244", + "1922285", + "1922288", + "1922291", + "1922311", + "1922343", + "1922455", + "1922468", + "1922572", + "1922584", + "1922637", + "1922676", + "1922679", + "1922694", + "1922701", + "1922739", + "1922745", + "1922851", + "1922865", + "1922867", + "1922868", + "1922889", + "1922890", + "1922937", + "1922994", + "1923019", + "1923465", + "1923473", + "1923491", + "1923498", + "1923505", + "1923525", + "1923649", + "1923650", + "1923651", + "1923668", + "1923679", + "1923744", + "1923796", + "1923809", + "1923917", + "1923997", + "1924044", + "1924050", + "1924057", + "1924077", + "1924082", + "1924097", + "1924106", + "1924176", + "1924193", + "1924223", + "1924232", + "1924298", + "1924323", + "1924362", + "1924390", + "1924392", + "1924417", + "1924429", + "1924458", + "1924494", + "1924518", + "1924521", + "1924558", + "1924713", + "1924754", + "1924770", + "1924867", + "1925221", + "1925233", + "1925381", + "1925410", + "1925429", + "1925454", + "1925458", + "1925498", + "1925500", + "1925501", + "1925509", + "1925515", + "1925543", + "1925555", + "1925609", + "1925615", + "1925628", + "1925676", + "1925694", + "1925711", + "1925731", + "1925743", + "1925877", + "1925918", + "1925922", + "1925962", + "1926001", + "1926009", + "1926054", + "1926166", + "1926260", + "1926324", + "1926385", + "1926436", + "1926437", + "1926446", + "1926448", + "1926456", + "1926460", + "1926530", + "1926531", + "1926539", + "1926546", + "1926550", + "1926574", + "1926593", + "1926611", + "1926800", + "1926817", + "1926823", + "1926834", + "1926861", + "1927034", + "1927217", + "1927242", + "1927272", + "1927274", + "1927284", + "1927301", + "1927313", + "1927348", + "1927393", + "1927707", + "1927894", + "1927895", + "1927897", + "1927900", + "1927909", + "1927943", + "1927979", + "1927988", + "1927992", + "1927996", + "1928009", + "1928018", + "1928070", + "1928076", + "1928214", + "1928215", + "1928248", + "1928349", + "1928361", + "1928376", + "1928419", + "1928584", + "1928628", + "1928746", + "1928829", + "1928849", + "1928908", + "1928915", + "1928945", + "1928960", + "1929046", + "1929049", + "1929059", + "1929129", + "1929270", + "1929659", + "1929697", + "1929772", + "1929962", + "1929966", + "1930079", + "1930110", + "1930167", + "1930178", + "1930179", + "1930181", + "1930183", + "1930263", + "1930270", + "1930288", + "1930289", + "1930331", + "1930361", + "1930391", + "1930422", + "1930563", + "1930581", + "1930621", + "1930653", + "1930660", + "1930678", + "1930728", + "1930772", + "1930779", + "1930830", + "1930832", + "1930904", + "1930916", + "1930923", + "1930931", + "1930935", + "1930954", + "1930968", + "1931046", + "1931109", + "1931116", + "1931119", + "1931122", + "1931126", + "1931148", + "1931179", + "1931189", + "1931310", + "1931403", + "1931437", + "1931553", + "1931561", + "1931655", + "1931656", + "1931706", + "1931779", + "1931784", + "1931787", + "1931788", + "1931889", + "1931906", + "1931908", + "1931943", + "1931956", + "1931958", + "1931997", + "1932020", + "1932043", + "1932056", + "1932159", + "1932166", + "1932172", + "1932175", + "1932189", + "1932206", + "1932246", + "1932273", + "1932287", + "1932302", + "1932332", + "1932354", + "1932386", + "1932393", + "1932406", + "1932411", + "1932414", + "1932417", + "1932428", + "1932473", + "1932517", + "1932551", + "1932563", + "1932576", + "1932580", + "1932607", + "1932629", + "1932751", + "1932752", + "1932753", + "1932812", + "1932814", + "1932863", + "1932879", + "1932908", + "1932960", + "1932976", + "1933028", + "1933044", + "1933084", + "1933095", + "1933126", + "1933138", + "1933163", + "1933204", + "1933260", + "1933583", + "1933647", + "1933649", + "1933679", + "1933793", + "1933844", + "1933845", + "1933998", + "1934172", + "1934187", + "1934192", + "1934211", + "1934213", + "1934221", + "1934331", + "1934447", + "1934570", + "1934693", + "1934715", + "1934991", + "1935078", + "1935295", + "1935301", + "1935343", + "1935346", + "1935350", + "1935363", + "1935372", + "1935377", + "1935405", + "1935408", + "1935410", + "1935454", + "1935459", + "1935498", + "1935614", + "1935838", + "1935849", + "1935869", + "1935872", + "1935888", + "1935899", + "1935901", + "1935904", + "1935912", + "1935916", + "1935925", + "1935931", + "1935935", + "1936161", + "1936233", + "1936312", + "1936378", + "1936388", + "1936391", + "1936565", + "1936566", + "1936649", + "1936810", + "1936969", + "1936988", + "1936993", + "1937011", + "1937055", + "1937064", + "1937090", + "1937109", + "1937110", + "1937124", + "1937129", + "1937136", + "1937144", + "1937155", + "1937162", + "1937165", + "1937167", + "1937444", + "1937474", + "1937490", + "1937514", + "1937527", + "1937530", + "1937540", + "1937556", + "1937566", + "1937570", + "1937582", + "1937594", + "1937613", + "1937618", + "1937642", + "1937655", + "1937665", + "1937667", + "1937688", + "1937691", + "1937698", + "1937699", + "1937702", + "1937707", + "1937712", + "1937722", + "1937723", + "1937739", + "1937751", + "1937754", + "1937758", + "1937769", + "1937792", + "1937793", + "1937803", + "1937816", + "1937819", + "1937826", + "1937846", + "1937847", + "1937849", + "1937885", + "1937892", + "1937911", + "1937931", + "1937937", + "1937959", + "1937966", + "1937974", + "1937975", + "1937988", + "1938007", + "1938016", + "1938022", + "1938029", + "1938050", + "1938052", + "1938058", + "1938059", + "1938069", + "1938074", + "1938081", + "1938088", + "1938104", + "1938112", + "1938114", + "1938122", + "1938125", + "1938129", + "1938131", + "1938147", + "1938148", + "1938159", + "1938162", + "1938166", + "1938168", + "1938214", + "1938226", + "1938230", + "1938233", + "1938300", + "1938446", + "1938520", + "1938612", + "1938796", + "1938810", + "1938955", + "1938975", + "1939056", + "1939086", + "1939130", + "1939131", + "1939134", + "1939136", + "1939156", + "1939168", + "1939180", + "1939215", + "1939225", + "1939314", + "1939336", + "1939432", + "1939510", + "1939520", + "1939597", + "1939647", + "1939658", + "1939677", + "1939688", + "1939717", + "1939833", + "1939879", + "1939962", + "1939964", + "1940110", + "1940158", + "1940504", + "1940510", + "1940517", + "1940546", + "1940575", + "1940604", + "1940609", + "1940639", + "1940644", + "1940694", + "1940717", + "1940744", + "1940757", + "1940768", + "1940807", + "1940838", + "1941266", + "1941294", + "1941299", + "1941310", + "1941330", + "1941377", + "1941437", + "1941570", + "1941683", + "1941713", + "1941717", + "1941719", + "1941864", + "1942060", + "1942067", + "1942141", + "1942170", + "1942171", + "1942244", + "1942251", + "1942341", + "1942370", + "1942378", + "1942383", + "1942416", + "1942509", + "1942522", + "1942558", + "1942618", + "1942621", + "1942623", + "1942636", + "1942670", + "1942674", + "1942697", + "1942762", + "1942769", + "1942790", + "1942793", + "1942808", + "1942854", + "1942945", + "1942947", + "1942964", + "1942967", + "1942971", + "1942980", + "1942982", + "1942994", + "1943054", + "1943066", + "1943089", + "1943090", + "1943096", + "1943101", + "1943212", + "1943223", + "1943236", + "1943250", + "1943308", + "1943397", + "1943475", + "1943505", + "1943519", + "1943563", + "1943571", + "1943573", + "1943588", + "1943619", + "1943631", + "1943655", + "1943757", + "1943824", + "1943830", + "1943901", + "1943936", + "1943942", + "1943953", + "1943954", + "1943960", + "1943962", + "1943964", + "1943990", + "1944004", + "1944106", + "1944113", + "1944234", + "1944273", + "1944283", + "1944286", + "1944314", + "1944324", + "1944329", + "1944335", + "1944343", + "1944361", + "1944374", + "1944421", + "1944456", + "1944462", + "1944483", + "1944503", + "1944504", + "1944520", + "1944521", + "1944523", + "1944574", + "1944591", + "1944618", + "1944627", + "1944629", + "1944631", + "1944635", + "1944638", + "1944769", + "1944778", + "1944815", + "1944832", + "1944977", + "1945066", + "1945081", + "1945088", + "1945122", + "1945137", + "1945143", + "1945173", + "1945225", + "1945227", + "1945270", + "1945274", + "1945286", + "1945302", + "1945312", + "1945374", + "1945396", + "1945462", + "1945476", + "1945477", + "1945569", + "1945571", + "1945605", + "1945694", + "1945710", + "1945715", + "1945738", + "1945742", + "1945748", + "1945786", + "1945814", + "1945837", + "1945856", + "1945863", + "1945874", + "1945877", + "1945878", + "1945893", + "1945957", + "1946019", + "1946037", + "1946051", + "1946058", + "1946067", + "1946074", + "1946078", + "1946079", + "1946097", + "1946163", + "1946167", + "1946177", + "1946310", + "1946327", + "1946333", + "1946432", + "1946469", + "1946495", + "1946500", + "1946520", + "1946544", + "1946550", + "1946577", + "1946610", + "1946612", + "1946618", + "1946628", + "1946661", + "1946695", + "1946731", + "1946737", + "1946738", + "1946756", + "1946763", + "1946810", + "1946853", + "1946865", + "1946901", + "1946916", + "1946917", + "1946980", + "1946981", + "1946983", + "1946989", + "1946995", + "1946999", + "1947021", + "1947037", + "1947049", + "1947055", + "1947112", + "1947113", + "1947117", + "1947282", + "1947306", + "1947333", + "1947335", + "1947385", + "1947409", + "1947449", + "1947456", + "1947459", + "1947491", + "1947492", + "1947506", + "1947507", + "1947568", + "1947577", + "1947587", + "1947588", + "1947597", + "1947626", + "1947661", + "1947673", + "1947703", + "1947727", + "1947740", + "1947745", + "1947765", + "1947842", + "1947846", + "1947890", + "1947915", + "1947973", + "1947976", + "1947980", + "1948054", + "1948061", + "1948073", + "1948088", + "1948371", + "1948439", + "1948446", + "1948464", + "1948465", + "1948521", + "1948771", + "1948774", + "1948779", + "1948789", + "1948799", + "1948800", + "1948802", + "1948803", + "1948804", + "1948809", + "1948810", + "1948826", + "1948865", + "1948883", + "1948890", + "1948947", + "1948994", + "1949008", + "1949049", + "1949219", + "1949285", + "1949322", + "1949331", + "1949336", + "1949366", + "1949404", + "1949451", + "1949466", + "1949492", + "1949512", + "1949544", + "1949549", + "1949592", + "1949621", + "1949687", + "1949697", + "1949715", + "1949784", + "1949794", + "1949850", + "1949852", + "1949877", + "1949929", + "1949938", + "1949954", + "1950006", + "1950013", + "1950017", + "1950019", + "1950024", + "1950044", + "1950047", + "1950052", + "1950133", + "1950156", + "1950169", + "1950171", + "1950197", + "1950272", + "1950302", + "1950362", + "1950396", + "1950408", + "1950409", + "1950521", + "1950533", + "1950567", + "1950578", + "1950591", + "1950654", + "1950877", + "1950879", + "1950936", + "1951097", + "1951103", + "1951116", + "1951121", + "1951125", + "1951133", + "1951157", + "1951170", + "1951217", + "1951218", + "1951340", + "1951370", + "1951412", + "1951448", + "1951462", + "1951507", + "1951522", + "1951529", + "1951542", + "1951557", + "1951649", + "1951657", + "1951660", + "1951671", + "1951675", + "1951713", + "1951725", + "1951747", + "1951784", + "1951840", + "1951844", + "1951881", + "1952014", + "1952032", + "1952034", + "1952043", + "1952062", + "1952093", + "1952130", + "1952147", + "1952175", + "1952177", + "1952229", + "1952281", + "1952449", + "1952481", + "1952532", + "1952551", + "1952611", + "1952685", + "1952730", + "1952806", + "1952812", + "1952816", + "1952857", + "1952878", + "1952883", + "1952909", + "1953124", + "1953192", + "1953196", + "1953217", + "1953407", + "1953423", + "1953998", + "1954037", + "1954084", + "1954120", + "1954236", + "1954338", + "1954344", + "1954346", + "1954351", + "1954353", + "1954382", + "1954490", + "1954496", + "1954514", + "1954522", + "1954563", + "1954911", + "1954930", + "1954933", + "1955039", + "1955093", + "1955153", + "1955199", + "1955271", + "1955272", + "1955318", + "1955389", + "1955416", + "1955422", + "1955479", + "1955484", + "1955498", + "1955552", + "1955694", + "1955725", + "1955736", + "1955737", + "1955743", + "1955745", + "1955753", + "1955755", + "1955763", + "1955856", + "1955899", + "1956098", + "1956215", + "1956384", + "1956416", + "1956440", + "1956462", + "1956505", + "1956510", + "1956524", + "1956536", + "1956597", + "1956599", + "1956626", + "1956639", + "1956710", + "1956716", + "1956904", + "1956955", + "1956958", + "1956963", + "1956978", + "1956983", + "1957058", + "1957062", + "1957161", + "1957174", + "1957266", + "1957286", + "1957300", + "1957333", + "1957368", + "1957413", + "1957441", + "1957460", + "1957523", + "1957556", + "1957565", + "1957570", + "1957572", + "1957579", + "1957583", + "1957611", + "1957673", + "1957706", + "1957718", + "1957746", + "1957791", + "1957816", + "1957822", + "1957845", + "1957852", + "1957854", + "1957870", + "1958024", + "1958045", + "1958049", + "1958065", + "1958121", + "1958152", + "1958158", + "1958163", + "1958241", + "1958252", + "1958255", + "1958259", + "1958260", + "1958275", + "1958290", + "1958305", + "1958307", + "1958323", + "1958324", + "1958454", + "1958463", + "1958483", + "1958515", + "1958528", + "1959341", + "1959379", + "1959383", + "1959395", + "1959423", + "1959436", + "1959461", + "1959473", + "1959500", + "1959543", + "1959637", + "1959645", + "1959666", + "1959667", + "1959682", + "1959735", + "1959782", + "1959799", + "1959839", + "1959858", + "1959890", + "1959898", + "1959914", + "1959917", + "1959919", + "1959934", + "1959948", + "1960004", + "1960023", + "1960090", + "1960105", + "1960106", + "1960128", + "1960166", + "1960181", + "1960182", + "1960255", + "1960268", + "1960315", + "1960484", + "1960503", + "1960521", + "1960524", + "1960571", + "1960595", + "1960617", + "1960632", + "1960686", + "1960854", + "1960940", + "1960941", + "1961013", + "1961037", + "1961040", + "1961052", + "1961068", + "1961126", + "1961155", + "1961162", + "1961180", + "1961190", + "1961252", + "1961361", + "1961647", + "1961718", + "1962051", + "1962076", + "1962086", + "1962118", + "1962159", + "1962162", + "1962204", + "1962265", + "1962268", + "1962434", + "1962447", + "1962479", + "1962490", + "1962516", + "1962584", + "1962636", + "1962656", + "1962657", + "1962678", + "1962689", + "1962722", + "1962727", + "1962829", + "1962839", + "1962841", + "1962842", + "1962860", + "1962895", + "1962900", + "1962925", + "1962934", + "1962961", + "1962972", + "1962990", + "1963011", + "1963052", + "1963096", + "1963168", + "1963201", + "1963297", + "1963306", + "1963425", + "1963433", + "1963446", + "1963463", + "1963532", + "1963587", + "1963619", + "1963629", + "1963633", + "1963709", + "1963710", + "1963733", + "1963755", + "1963782", + "1963848", + "1963854", + "1963874", + "1963879", + "1963892", + "1964024", + "1964025", + "1964029", + "1964041", + "1964066", + "1964113", + "1964116", + "1964141", + "1964143", + "1964144", + "1964151", + "1964153", + "1964155", + "1964158", + "1964174", + "1964189", + "1964191", + "1964195", + "1964247", + "1964305", + "1964401", + "1964471", + "1964565", + "1964585", + "1964637", + "1964653", + "1964657", + "1964702", + "1964715", + "1964738", + "1964836", + "1964995", + "1965024", + "1965038", + "1965069", + "1965100", + "1965166", + "1965197", + "1965208", + "1965345", + "1965586", + "1965640", + "1965643", + "1965649", + "1965650", + "1965671", + "1965697", + "1965699", + "1965763", + "1965777", + "1965794", + "1965795", + "1965797", + "1965805", + "1965810", + "1965823", + "1965825", + "1965831", + "1965838", + "1965841", + "1965861", + "1965865", + "1965887", + "1965913", + "1965996", + "1966017", + "1966088", + "1966185", + "1966195", + "1966198", + "1966255", + "1966302", + "1966310", + "1966351", + "1966358", + "1966362", + "1966367", + "1966886", + "1966977", + "1967006", + "1967011", + "1967039", + "1967127", + "1967128", + "1967209", + "1967226", + "1967240", + "1967245", + "1967265", + "1967273", + "1967346", + "1967433", + "1967445", + "1967452", + "1967590", + "1967595", + "1967597", + "1967606", + "1967672", + "1967703", + "1967716", + "1967803", + "1967815", + "1967873", + "1968115", + "1968131", + "1968147", + "1968182", + "1968205", + "1968313", + "1968321", + "1968324", + "1968363", + "1968678", + "1968686", + "1968730", + "1968746", + "1968837", + "1968867", + "1968942", + "1968990", + "1969291", + "1969339", + "1969357", + "1969463", + "1969491", + "1969568", + "1969581", + "1969954", + "1969958", + "1969961", + "1970034", + "1970093", + "1970094", + "1970108", + "1970119", + "1970136", + "1970145", + "1970148", + "1970150", + "1970159", + "1970213", + "1970227", + "1970243", + "1970259", + "1970265", + "1970284", + "1970322", + "1970436", + "1970460", + "1970463", + "1970473", + "1970485", + "1971835", + "1971847", + "1971858", + "1971888", + "1971986", + "1971995", + "1971998", + "1971999", + "1972010", + "1972094", + "1972101", + "1972120", + "1972185", + "1972187", + "1972234", + "1972250", + "1972278", + "1972342", + "1972374", + "1972377", + "1972407", + "1972434", + "1972447", + "1972449", + "1972454", + "1972606", + "1972613", + "1972631", + "1972691", + "1972754", + "1972797", + "1972800", + "1972806", + "1972903", + "1972942", + "1973146", + "1973147", + "1973164", + "1973300", + "1973323", + "1973327", + "1973338", + "1973358", + "1973393", + "1973414", + "1973466", + "1973467", + "1973487", + "1973493", + "1973665", + "1973719", + "1975164", + "1975198", + "1975212", + "1975248", + "1975287", + "1975341", + "1975365", + "1975546", + "1975553", + "1975571", + "1975583", + "1975597", + "1975607", + "1975711", + "1975722", + "1975733", + "1975741", + "1975793", + "1975805", + "1975806", + "1975892", + "1975897", + "1975903", + "1975914", + "1975964", + "1975979", + "1976073", + "1976123", + "1976142", + "1976163", + "1976212", + "1976213", + "1976224", + "1976228", + "1976248", + "1976255", + "1976303", + "1976311", + "1976333", + "1976342", + "1976462", + "1976463", + "1976469", + "1976470", + "1976483", + "1976651", + "1976746", + "1976890", + "1976928", + "1976933", + "1976934", + "1976939", + "1976941", + "1976993", + "1977003", + "1977007", + "1977054", + "1977068", + "1977182", + "1977184", + "1977350", + "1977759", + "1977764", + "1977767", + "1977813", + "1977833", + "1977863", + "1977962", + "1977967", + "1977971", + "1978017", + "1978034", + "1978045", + "1978056", + "1978065", + "1978082", + "1978114", + "1978197", + "1978274", + "1978281", + "1978282", + "1978283", + "1978375", + "1978385", + "1978398", + "1978405", + "1978407", + "1978422", + "1978424", + "1978445", + "1978464", + "1978493", + "1978494", + "1978499", + "1978524", + "1978526", + "1978529", + "1978671", + "1978751", + "1978776", + "1978789", + "1978821", + "1978904", + "1978919", + "1978937", + "1978958", + "1978959", + "1978977", + "1979021", + "1979041", + "1979222", + "1979255", + "1979289", + "1979308", + "1979344", + "1979358", + "1979380", + "1979427", + "1979430", + "1979473", + "1979521", + "1979561", + "1979562", + "1979721", + "1979726", + "1979758", + "1979781", + "1979787", + "1979801", + "1979822", + "1980025", + "1980035", + "1980041", + "1980044", + "1980055", + "1980063", + "1980245", + "1980247", + "1980250", + "1980269", + "1980290", + "1980462", + "1980491", + "1980505", + "1980521", + "1980525", + "1980533", + "1980559", + "1980659", + "1980811", + "1980821", + "1980827", + "1980917", + "1981063", + "1981144", + "1981160", + "1981161", + "1981162", + "1981191", + "1981202", + "1981209", + "1981210", + "1981252", + "1981258", + "1981277", + "1981284", + "1981312", + "1981457", + "1981696", + "1981938", + "1981951", + "1981959", + "1981973", + "1981998", + "1982024", + "1982055", + "1982071", + "1982085", + "1982102", + "1982103", + "1982148", + "1982221", + "1982267", + "1982406", + "1982447", + "1982458", + "1982500", + "1982525", + "1982529", + "1982533", + "1982541", + "1982542", + "1982613", + "1982636", + "1982671", + "1982746", + "1982779", + "1982780", + "1982790", + "1982791", + "1982824", + "1982838", + "1982865", + "1982885", + "1982898", + "1982918", + "1982924", + "1982951", + "1983000", + "1983039", + "1983052", + "1983101", + "1983111", + "1983170", + "1983260", + "1983263", + "1983288", + "1983387", + "1983393", + "1983434", + "1983441", + "1983442", + "1983491", + "1983525", + "1983528", + "1983548", + "1983558", + "1983648", + "1983705", + "1983709", + "1983755", + "1983888", + "1983896", + "1983922", + "1983997", + "1983999", + "1984033", + "1984073", + "1984110", + "1984117", + "1984654", + "1984734", + "1984913", + "1984942", + "1984949", + "1984954", + "1985061", + "1985152", + "1985158", + "1985167", + "1985181", + "1985191", + "1985192", + "1985228", + "1985230", + "1985267", + "1985405", + "1985406", + "1985487", + "1985490", + "1985522", + "1985573", + "1985734", + "1985742", + "1985816", + "1985826", + "1985931", + "1985945", + "1985952", + "1985993", + "1986004", + "1986020", + "1986032", + "1986040", + "1986052", + "1986054", + "1986056", + "1986061", + "1986091", + "1986113", + "1986157", + "1986166", + "1986171", + "1986192", + "1986220", + "1986223", + "1986367", + "1986452", + "1986497", + "1986508", + "1986522", + "1986575", + "1986623", + "1986650", + "1986693", + "1986774", + "1986779", + "1986787", + "1986807", + "1986846", + "1986877", + "1986906", + "1986936", + "1986942", + "1986998", + "1987145", + "1987146", + "1987204", + "1987301", + "1987330", + "1987362", + "1987377", + "1987527", + "1987578", + "1987629", + "1987633", + "1987650", + "1987665", + "1987737", + "1987740", + "1987744", + "1987747", + "1987767", + "1987775", + "1987776", + "1987787", + "1987855", + "1988002", + "1988019", + "1988064", + "1988225", + "1988257", + "1988302", + "1988306", + "1988354", + "1988360", + "1988361", + "1988362", + "1988376", + "1988382", + "1988384", + "1988390", + "1988420", + "1988487", + "1988495", + "1988593", + "1988602", + "1988684", + "1988762", + "1988820", + "1988881", + "1988894", + "1989083", + "1989170", + "1989181", + "1989282", + "1989283", + "1989355", + "1989377", + "1989428", + "1989522", + "1989538", + "1989582", + "1989594", + "1989903", + "1989942", + "1990043", + "1990050", + "1990066", + "1990088", + "1990105", + "1990150", + "1990155", + "1990164", + "1990165", + "1990167", + "1990178", + "1990198", + "1990200", + "1990255", + "1990256", + "1990270", + "1990331", + "1990335", + "1990357", + "1990371", + "1990533", + "1990551", + "1990582", + "1990594", + "1990998", + "1991012", + "1991123", + "1991179", + "1991280", + "1991289", + "1991294", + "1991295", + "1991298", + "1991299", + "1991303", + "1991310", + "1991371", + "1991378", + "1991394", + "1991429", + "1991466", + "1991532", + "1991783", + "1991846", + "1991945", + "1992066", + "1992167", + "1992172", + "1992268", + "1992277", + "1992315", + "1992434", + "1992504", + "1992547", + "1992573", + "1992634", + "1992817", + "1992889", + "1992907", + "1992936", + "1992956", + "1992969", + "1992976", + "1993021", + "1993036", + "1993045", + "1993419", + "1993496", + "1993637", + "3257809", + "4299071", + "4299095", + "4299191", + "4299201", + "4299211", + "4299213", + "4299218", + "4299368", + "4299370", + "4299535", + "4299565", + "4299576", + "4299597", + "4299599", + "4299778", + "4299802", + "4299804", + "4299870", + "4299871", + "4300000", + "4300259", + "4300268", + "4300277", + "4300384", + "4300393", + "4300406", + "4301036", + "4301044", + "4301052", + "4301055", + "4301068", + "4301071", + "4301148", + "4301238", + "4301242", + "4301282", + "4301283", + "4301304", + "4301306", + "4301307", + "4301309", + "4301312", + "4301348", + "4301355", + "4301426", + "4301744", + "4301876", + "4301934", + "4301942", + "4301945", + "4302008", + "4302101", + "4302199", + "4302202", + "4302221", + "4302230", + "4302240", + "4302252", + "4302268", + "4302274", + "4302319", + "4302333", + "4302388", + "4522322", + "4522753", + "4522886", + "4522890", + "4522891", + "4522911", + "4522916", + "4522919", + "4522933", + "4522974", + "4523461", + "4523486", + "4523519", + "4523522", + "4523556", + "4523560", + "4523564", + "4523725", + "4523880", + "4523883", + "4523885", + "4524052", + "4524054", + "4524070", + "4524072", + "4524221", + "4524223", + "4524376", + "4524393", + "4524403", + "4524421", + "4524424", + "4524426", + "4524513", + "4524541", + "4524568", + "4524588", + "4524636", + "4524638", + "4524712", + "4524740", + "4524793", + "4524822", + "4524890", + "4524914", + "4524922", + "4524929", + "4524951", + "4524961", + "4525034", + "4525068", + "4525078", + "4525091", + "4525097", + "4525103", + "4525132", + "4525177", + "4525189", + "4525266", + "4525268", + "4525270", + "4525354", + "4525364", + "4525369", + "4525425", + "4525476", + "4525487", + "4525500", + "4525503", + "4525505", + "4525510", + "4525530", + "4525540", + "4525547", + "4525557", + "4525562", + "4525610", + "4525641", + "4525777", + "4525803", + "4525859", + "4525884", + "4526050", + "4527339", + "4527342", + "4527355", + "4527903", + "4527972", + "4528100", + "4528539", + "4528547", + "4528593", + "4528658", + "4528692", + "4528694", + "4528702", + "4528813", + "4528818", + "4529032", + "4529064", + "4529186", + "4529248", + "4529566", + "4529630", + "4529738", + "4529908", + "4529915", + "4529931", + "4530002", + "4530138", + "4530151", + "4530214", + "4530424", + "4530608", + "4530632", + "4530947", + "4531145", + "4531147", + "4531158", + "4531237", + "4531242", + "4531246", + "4531264", + "4531284", + "4531376", + "4531402", + "4531409", + "4531417", + "4531425", + "4531506", + "4531517", + "4531643", + "4531670", + "4531687", + "4531690", + "4531708", + "4531713", + "4531968", + "4531975", + "4532022", + "4532024", + "4532050", + "4532088", + "4532095", + "4532097", + "4532122", + "4532125", + "4532150", + "4532160", + "4532203", + "4532206", + "4532216", + "4532236", + "4532239", + "4532260", + "4532264", + "4532266", + "4532269", + "4532283", + "4532293", + "4532297", + "4532351", + "4532352", + "4532357", + "4532366", + "4532395", + "4532405", + "4532408", + "4532412", + "4532453", + "4532461", + "4532471", + "4532473", + "4532493", + "4532500", + "4532508", + "4532516", + "4532532", + "4532534", + "4532544", + "4532565", + "4532608", + "4532614", + "4532696", + "4532700", + "4532811", + "4532886", + "4532888", + "4532890", + "4532908", + "4532986", + "4533115", + "4533123", + "4533125", + "4533128", + "4533136", + "4533202", + "4533211", + "4533255", + "4533273", + "4533285", + "4533325", + "4533344", + "4533345", + "4533347", + "4533360", + "4533431", + "4533433", + "4533442", + "4533444", + "4533446", + "4533661", + "4533671", + "4533695", + "4533714", + "4533720", + "4533924", + "4533937", + "4533952", + "4533957", + "4534011", + "4534017", + "4534038", + "4534046", + "4534052", + "4534057", + "4534086", + "4534162", + "4534166", + "4534194", + "4534207", + "4534225", + "4534245", + "4534252", + "4534257", + "4534275", + "4534290", + "4534299", + "4534360", + "4534389", + "4534398", + "4534408", + "4534458", + "4534463", + "4534485", + "4534486", + "4534525", + "4534533", + "4534538", + "4534540", + "4534663", + "4534669", + "4534675", + "4534681", + "4534683", + "4534685", + "4534686", + "4534691", + "4534719", + "4534757", + "4534762", + "4534767", + "4534769", + "4534773", + "4534779", + "4534782", + "4534787", + "4534788", + "4534792", + "4534796", + "4534798", + "4534826", + "4534869", + "4534872", + "4534909", + "4534914", + "4535092", + "4535106", + "4535172", + "4535271", + "4535280", + "4535307", + "4535386", + "4535396", + "4535510", + "4535581", + "4535614", + "4535618", + "4535620", + "4535627", + "4535630", + "4535632", + "4535636", + "4535689", + "4535754", + "4535809", + "4535817", + "4535819", + "4535827", + "4535904", + "4536472", + "4536483", + "4684220", + "4684789", + "4684893", + "4684910", + "4684925", + "4684958", + "4684986", + "4685097", + "4685116", + "4685219", + "4685271", + "4685299", + "4685306", + "4685431", + "4685468", + "4685485", + "4685557", + "4685566", + "4685629", + "4685631", + "4685653", + "4685655", + "4685669", + "4685678", + "4685778", + "4685802", + "4685946", + "4685972", + "4685980", + "4685981", + "4686018", + "4686029", + "4686039", + "4686055", + "4686111", + "4686164", + "4686190", + "4686214", + "4686264", + "4686266", + "4686355", + "4686368", + "4686385", + "4686483", + "4686531", + "4686532", + "4686617", + "4686620", + "4686628", + "4686656", + "4686702", + "4686743", + "4686844", + "4686897", + "4686907", + "4686913", + "4686956", + "4687228", + "4687288", + "4687389", + "4687565", + "4687661", + "4687681", + "4687827", + "4687906", + "4687930", + "4687933", + "4687934", + "4687935", + "4687991", + "4688049", + "4688092", + "4688142", + "4688166", + "4688169", + "4688172", + "4689905", + "4689912", + "4689929", + "4689963", + "4690079", + "4692485", + "4693382", + "4693675", + "4695709", + "4695719", + "4699245", + "4701136", + "4701298", + "4701336", + "4702564", + "4702599", + "4702603", + "4702731", + "4702783", + "4702784", + "4702878", + "4702892", + "4702893", + "4702911", + "4702912", + "4702961", + "4703479", + "4704279", + "4704316", + "4704352", + "4704356", + "4704400", + "4704401", + "4704404", + "4704407", + "4704501", + "4705103", + "4707896", + "4707900", + "4708183", + "4708342", + "4708927", + "4708972", + "4708995", + "4709051", + "4709102", + "4709107", + "4709111", + "4709133", + "5101371", + "5101394", + "5101502", + "5101527", + "5101556", + "5101640", + "5101678", + "5101717", + "5101745", + "5101763", + "5101811", + "5102207", + "5102287", + "5102300", + "5102304", + "5102324", + "5102335", + "5102396", + "5102424", + "5102432", + "5102628", + "5102635", + "5102637", + "5102642", + "5102651", + "5102666", + "5102668", + "5102671", + "5102678", + "5102693", + "5102735", + "5102773", + "5102809", + "5102830", + "5102931", + "5102951", + "5102982", + "5103066", + "5103083", + "5103118", + "5103121", + "5103154", + "5103166", + "5103176", + "5103181", + "5103183", + "5103185", + "5103201", + "5103227", + "5103394", + "5103451", + "5103502", + "5103613", + "5103736", + "5103948", + "5103998", + "5104056", + "5104063", + "5104088", + "5104116", + "5104157", + "5104442", + "5104558", + "5104641", + "5104759", + "5104772", + "5104797", + "5104815", + "5104822", + "5104882", + "5104891", + "5104903", + "5104927", + "5104940", + "5104948", + "5104986", + "5105057", + "5105068", + "5105081", + "5105088", + "5105106", + "5105120", + "5105124", + "5105212", + "5105217", + "5105259", + "5105336", + "5105339", + "5105344", + "5105352", + "5105365", + "5105367", + "5105369", + "5105376", + "5105379", + "5105380", + "5105447", + "5105458", + "5105467", + "5105469", + "5105491", + "5105508", + "5105547", + "5105560", + "5105588", + "5105603", + "5105642", + "5105649", + "5105656", + "5105671", + "5105929", + "5106115", + "5106249", + "5106539", + "5106894", + "5107076", + "5107128", + "5107219", + "5107640", + "5107644", + "5107829", + "5108318", + "5108334", + "5108335", + "5108346", + "5108349", + "5108416", + "5108417", + "5108419", + "5108421", + "5108435", + "5108440", + "5108636", + "5108660", + "5108665", + "5108670", + "5108671", + "5108724", + "5108752", + "5108761", + "5108787", + "5108794", + "5108796", + "5108808", + "5108951", + "5108957", + "5108958", + "5109196", + "5109259", + "5109299", + "5109345", + "5109369", + "5109385", + "5109413", + "5109418", + "5109437", + "5109498", + "5109506", + "5109523", + "5109535", + "5109566", + "5109596", + "5109599", + "5109614", + "5109646", + "5109651", + "5109661", + "5109766", + "5109782", + "5109784", + "5109786", + "5109787", + "5109788", + "5109796", + "5109821", + "5109829", + "5109830", + "5109843", + "5109845", + "5109848", + "5109850", + "5109852", + "5109855", + "5109870", + "5109872", + "5109881", + "5109882", + "5109898", + "5109931", + "5109954", + "5109958", + "5110012", + "5110013", + "5110044", + "5110120", + "5110190", + "5110200", + "5110211", + "5110213", + "5110232", + "5110282", + "5110297", + "5110299", + "5110305", + "5110326", + "5110327", + "5110333", + "5110341", + "5110356", + "5110377", + "5110390", + "5110397", + "5110492", + "5110533", + "5110546", + "5110593", + "5110644", + "5110670", + "5110723", + "5110754", + "5110756", + "5110765", + "5110769", + "5110818", + "5110837", + "5110858", + "5110863", + "5110871", + "5110885", + "5110981", + "5110986", + "5111044", + "5111064", + "5111139", + "5111141", + "5111147", + "5111195", + "5111214", + "5111249", + "5111343", + "5111360", + "5111372", + "5111397", + "5111481", + "5111501", + "5111513", + "5111521", + "5111535", + "5111546", + "5111568", + "5111574", + "5111600", + "5111643", + "5111956", + "5111967", + "5111974", + "5112051", + "5112053", + "5112060", + "5112068", + "5112078", + "5112080", + "5112130", + "5112131", + "5112153", + "5112155", + "5112191", + "5112199", + "5112233", + "5112254", + "5112283", + "5112291", + "5112302", + "5112336", + "5112345", + "5112377", + "5112388", + "5112407", + "5112410", + "5112414", + "5112440", + "5112457", + "5112461", + "5112464", + "5112465", + "5112467", + "5112469", + "5112474", + "5112500", + "5112531", + "5112542", + "5112626", + "5112798", + "5112892", + "5112900", + "5112908", + "5112915", + "5112917", + "5112923", + "5112927", + "5112940", + "5112944", + "5112947", + "5112959", + "5112961", + "5112963", + "5112968", + "5112990", + "5113001", + "5113036", + "5113078", + "5113082", + "5113084", + "5113148", + "5113234", + "5113330", + "5113352", + "5113365", + "5113385", + "5113394", + "5113847", + "5113853", + "5113925", + "5113950", + "5113985", + "5114021", + "5114039", + "5114043", + "5114081", + "5114083", + "5114096", + "5114107", + "5114128", + "5114151", + "5114159", + "5114189", + "5114192", + "5114198", + "5114295", + "5114303", + "5114311", + "5114316", + "5114317", + "5114327", + "5114340", + "5114353", + "5114394", + "5114409", + "5114425", + "5114431", + "5114435", + "5114436", + "5114439", + "5114465", + "5114892", + "5114903", + "5114912", + "5114915", + "5114921", + "5114923", + "5114930", + "5114934", + "5114946", + "5114949", + "5114950", + "5114956", + "5115046", + "5115166", + "5115167", + "5115198", + "5115381", + "5115406", + "5115500", + "5115701", + "5115771", + "5115777", + "5115854", + "5115872", + "5115874", + "5116095", + "5116128", + "5116134", + "5116145", + "5116198", + "5116252", + "5116293", + "5116332", + "5116338", + "5116353", + "5116358", + "5116395", + "5116397", + "5116412", + "5116416", + "5116475", + "5116504", + "5116698", + "5116843", + "5117189", + "5117200", + "5117245", + "5117347", + "5117348", + "5117361", + "5117399", + "5117400", + "5117414", + "5117430", + "5117463", + "5117685", + "5117687", + "5117776", + "5117779", + "5117791", + "5117805", + "5117941", + "5118046", + "5118171", + "5118223", + "5118291", + "5118327", + "5118348", + "5118396", + "5118422", + "5118459", + "5118474", + "5118509", + "5118524", + "5118565", + "5118798", + "5118828", + "5118837", + "5118841", + "5118859", + "5118892", + "5118904", + "5118934", + "5118944", + "5118949", + "5118974", + "5118996", + "5119000", + "5119009", + "5119013", + "5119016", + "5119039", + "5119046", + "5119050", + "5119143", + "5119181", + "5119193", + "5119211", + "5119223", + "5119239", + "5119245", + "5119346", + "5119349", + "5119350", + "5119353", + "5119354", + "5119482", + "5119506", + "5119513", + "5119808", + "5119868", + "5119890", + "5119893", + "5119895", + "5119905", + "5119961", + "5119969", + "5120053", + "5120058", + "5120063", + "5120278", + "5120343", + "5120357", + "5120368", + "5120379", + "5120396", + "5120453", + "5120465", + "5120577", + "5120675", + "5121046", + "5121177", + "5121613", + "5121847", + "5121850", + "5122013", + "5122037", + "5122062", + "5122086", + "5122121", + "5122131", + "5122206", + "5122293", + "5122307", + "5122430", + "5122439", + "5122455", + "5122526", + "5122538", + "5122556", + "5122571", + "5122574", + "5122581", + "5122646", + "5122647", + "5122668", + "5122683", + "5122691", + "5122696", + "5122702", + "5122798", + "5122876", + "5122969", + "5123018", + "5123042", + "5123046", + "5123180", + "5123221", + "5123276", + "5123339", + "5123394", + "5123419", + "5123449", + "5123461", + "5123474", + "5123485", + "5123489", + "5123542", + "5123582", + "5123615", + "5123636", + "5123663", + "5123674", + "5123676", + "5123685", + "5123701", + "5123704", + "5123707", + "5123709", + "5123775", + "5123801", + "5123852", + "5123876", + "5123884", + "5123890", + "5123922", + "5123954", + "5123956", + "5123961", + "5123968", + "5123971", + "5123979", + "5123980", + "5123983", + "5123991", + "5123996", + "5123999", + "5124000", + "5124007", + "5124029", + "5124049", + "5124050", + "5124071", + "5124080", + "5124088", + "5124093", + "5124109", + "5124118", + "5124119", + "5124136", + "5124143", + "5124147", + "5124151", + "5124172", + "5124200", + "5124208", + "5124219", + "5124232", + "5124233", + "5124249", + "5124250", + "5124268", + "5124304", + "5124332", + "5124348", + "5124352", + "5124374", + "5124415", + "5124423", + "5124433", + "5124442", + "5124443", + "5124450", + "5124468", + "5124512", + "5124557", + "5124589", + "5124595", + "5124597", + "5124598", + "5124607", + "5124673", + "5124716", + "5124813", + "5124873", + "5124880", + "5124911", + "5125075", + "5125104", + "5125118", + "5125130", + "5125306", + "5125525", + "5125545", + "5125569", + "5125591", + "5125600", + "5125602", + "5125629", + "5125633", + "5125635", + "5125689", + "5125780", + "5125916", + "5125917", + "5125939", + "5126000", + "5126013", + "5126052", + "5126204", + "5126212", + "5126217", + "5126229", + "5126231", + "5126240", + "5126241", + "5126259", + "5126284", + "5126287", + "5126292", + "5126315", + "5126332", + "5126344", + "5126352", + "5126357", + "5126376", + "5126381", + "5126396", + "5126397", + "5126398", + "5126404", + "5126434", + "5126445", + "5126454", + "5126494", + "5126517", + "5126585", + "5126635", + "5126637", + "5126663", + "5126668", + "5126675", + "5126680", + "5126697", + "5126718", + "5126721", + "5126729", + "5126751", + "5126756", + "5126785", + "5126798", + "5126834", + "5126843", + "5126870", + "5126889", + "5126892", + "5126905", + "5126922", + "5126946", + "5126958", + "5126963", + "5127020", + "5127024", + "5127039", + "5127045", + "5127054", + "5127089", + "5127094", + "5127097", + "5127107", + "5127116", + "5127118", + "5127130", + "5127170", + "5127203", + "5127222", + "5127325", + "5127335", + "5127336", + "5127337", + "5127339", + "5127350", + "5127354", + "5127355", + "5127357", + "5127378", + "5127380", + "5127394", + "5127521", + "5127562", + "5127592", + "5127595", + "5127629", + "5127631", + "5127638", + "5127644", + "5127656", + "5127669", + "5127675", + "5127680", + "5127683", + "5127688", + "5127698", + "5127748", + "5127805", + "5127814", + "5127822", + "5127835", + "5127893", + "5127916", + "5127932", + "5127955", + "5127971", + "5127998", + "5128005", + "5128007", + "5128011", + "5128034", + "5128045", + "5128067", + "5128182", + "5128224", + "5128225", + "5128232", + "5128250", + "5128266", + "5128326", + "5128353", + "5128357", + "5128363", + "5128380", + "5128432", + "5128446", + "5128475", + "5128488", + "5128519", + "5128545", + "5128569", + "5128587", + "5128597", + "5128644", + "5128663", + "5128984", + "5129000", + "5129091", + "5129190", + "5129251", + "5129257", + "5129293", + "5129374", + "5129378", + "5129387", + "5129405", + "5129417", + "5129430", + "5129432", + "5129451", + "5129473", + "5129479", + "5129480", + "5129481", + "5129489", + "5129496", + "5129502", + "5129515", + "5129517", + "5129524", + "5129531", + "5129535", + "5129544", + "5130277", + "5130296", + "5130322", + "5130326", + "5130330", + "5130335", + "5130347", + "5130369", + "5130392", + "5130393", + "5130400", + "5130439", + "5130444", + "5130448", + "5130456", + "5130464", + "5130467", + "5130471", + "5130476", + "5130487", + "5130502", + "5130514", + "5130521", + "5130528", + "5130542", + "5130548", + "5130557", + "5130559", + "5130574", + "5130587", + "5130682", + "5130696", + "5130748", + "5130775", + "5130813", + "5130814", + "5130851", + "5130908", + "5130944", + "5131058", + "5131096", + "5131142", + "5131192", + "5131256", + "5131293", + "5131339", + "5131347", + "5131372", + "5131407", + "5131442", + "5131443", + "5131467", + "5131493", + "5131495", + "5131520", + "5131540", + "5131565", + "5131597", + "5131608", + "5131910", + "5131951", + "5131957", + "5131982", + "5132078", + "5132079", + "5132084", + "5132137", + "5132154", + "5132183", + "5132191", + "5132239", + "5132246", + "5132252", + "5132254", + "5132283", + "5132317", + "5132346", + "5132347", + "5132360", + "5132374", + "5132398", + "5132429", + "5132440", + "5132446", + "5132505", + "5132523", + "5132540", + "5132550", + "5132917", + "5132940", + "5132956", + "5132973", + "5133009", + "5133035", + "5133051", + "5133088", + "5133142", + "5133251", + "5133255", + "5133265", + "5133451", + "5133503", + "5133523", + "5133565", + "5133568", + "5133581", + "5133589", + "5133591", + "5133595", + "5133609", + "5133610", + "5133615", + "5133621", + "5133622", + "5133623", + "5133634", + "5133635", + "5133687", + "5133689", + "5133693", + "5133695", + "5133736", + "5133786", + "5133864", + "5134098", + "5134301", + "5134469", + "5134517", + "5134543", + "5134559", + "5134569", + "5134583", + "5134607", + "5134621", + "5134659", + "5134661", + "5134667", + "5134682", + "5134686", + "5134687", + "5134693", + "5134759", + "5134810", + "5134815", + "5134837", + "5135026", + "5135191", + "5135355", + "5135513", + "5135546", + "5135573", + "5135643", + "5135839", + "5135944", + "5136059", + "5136113", + "5136200", + "5136306", + "5136372", + "5136594", + "5136681", + "5136713", + "5136752", + "5136790", + "5136868", + "5136939", + "5137085", + "5137086", + "5137128", + "5137156", + "5137166", + "5137257", + "5137291", + "5137330", + "5137408", + "5137511", + "5137512", + "5137540", + "5137553", + "5137578", + "5137582", + "5137588", + "5137593", + "5137595", + "5137601", + "5137605", + "5137608", + "5137612", + "5137615", + "5137626", + "5137659", + "5137663", + "5137664", + "5137672", + "5137674", + "5137677", + "5137679", + "5137682", + "5137689", + "5137693", + "5137694", + "5137695", + "5137700", + "5137706", + "5137708", + "5137711", + "5137714", + "5137747", + "5137748", + "5137763", + "5137790", + "5137791", + "5137799", + "5137800", + "5137802", + "5137803", + "5137808", + "5137819", + "5137823", + "5137827", + "5137828", + "5137832", + "5137833", + "5137842", + "5137847", + "5137849", + "5137850", + "5137851", + "5137858", + "5137861", + "5137863", + "5137882", + "5137889", + "5137890", + "5137891", + "5137894", + "5137903", + "5137920", + "5137926", + "5137932", + "5137938", + "5137945", + "5137946", + "5137949", + "5137955", + "5137988", + "5137996", + "5137998", + "5138069", + "5138200", + "5138257", + "5138387", + "5138543", + "5138561", + "5138681", + "5138701", + "5138732", + "5138743", + "5138841", + "5138929", + "5138967", + "5138984", + "5139026", + "5139029", + "5139034", + "5139040", + "5139050", + "5139064", + "5139156", + "5139201", + "5139309", + "5139357", + "5139524", + "5139578", + "5139673", + "5139864", + "5139897", + "5139898", + "5139908", + "5139909", + "5139914", + "5139928", + "5139990", + "5140006", + "5140033", + "5140054", + "5140056", + "5140063", + "5140214", + "5140244", + "5140436", + "5140443", + "5140534", + "5140561", + "5140603", + "5140627", + "5140969", + "5140980", + "5141085", + "5141144", + "5141154", + "5141163", + "5141172", + "5141177", + "5141179", + "5141185", + "5141187", + "5141188", + "5141195", + "5141197", + "5141198", + "5141199", + "5141202", + "5141212", + "5141215", + "5141216", + "5141226", + "5141230", + "5141233", + "5141234", + "5141236", + "5141242", + "5141248", + "5141250", + "5141254", + "5141262", + "5141291", + "5141297", + "5141311", + "5141317", + "5141324", + "5141340", + "5141342", + "5141344", + "5141493", + "5141501", + "5141581", + "5141590", + "5141643", + "5141650", + "5141662", + "5141677", + "5141697", + "5141743", + "5141763", + "5141795", + "5141913", + "5141924", + "5142001", + "5142006", + "5142032", + "5142061", + "5142062", + "5142067", + "5142086", + "5142130", + "5142160", + "5142166", + "5142176", + "5142213", + "5142249", + "5142254", + "5142267", + "5142269", + "5142273", + "5142283", + "5142298", + "5142300", + "5142314", + "5142317", + "5142319", + "5142328", + "5142338", + "5142352", + "5142372", + "5142394", + "5142424", + "5142436", + "5142499", + "5142583", + "5142599", + "5142725", + "5142729", + "5142730", + "5142749", + "5142822", + "5142825", + "5142829", + "5142842", + "5142870", + "5142903", + "5142948", + "5143048", + "5143049", + "5143080", + "5143107", + "5143116", + "5143129", + "5143147", + "5143232", + "5143234", + "5143241", + "5143249", + "5143266", + "5143279", + "5143284", + "5143285", + "5143303", + "5143311", + "5143315", + "5143338", + "5143354", + "5143380", + "5143384", + "5143453", + "5143477", + "5143506", + "5143511", + "5143525", + "5143586", + "5143651", + "5143657", + "5143675", + "5143697", + "5143703", + "5143944", + "5143947", + "5143952", + "5143960", + "5143964", + "5144027", + "5144092", + "5144093", + "5144129", + "5144190", + "5144196", + "5144204", + "5144227", + "5144318", + "5144345", + "5144363", + "5144381", + "5144386", + "5144407", + "5144424", + "5144426", + "5144431", + "5144457", + "5144472", + "5144499", + "5144505", + "5144534", + "5144543", + "5144554", + "5144558", + "5144564", + "5144575", + "5144583", + "5144588", + "5144593", + "5144596", + "5144633", + "5144677", + "5144721", + "5144729", + "5144782", + "5144787", + "5144805", + "5144806", + "5144864", + "5144880", + "5144900", + "5144935", + "5144936", + "5144937", + "5144942", + "5144953", + "5145009", + "5145075", + "5145078", + "5145079", + "5145136", + "5145139", + "5145186", + "5145238", + "5145255", + "5145260", + "5145269", + "5145409", + "5145422", + "5145466", + "5145495", + "5145502", + "5145503", + "5145521", + "5145522", + "5145560", + "5145713", + "5145729", + "5145842", + "5145965", + "5145998", + "5146030", + "5146038", + "5146062", + "5146082", + "5146091", + "5146179", + "5146253", + "5146262", + "5146282", + "5146294", + "5146303", + "5146305", + "5146326", + "5146342", + "5146379", + "5146389", + "5146412", + "5146420", + "5146426", + "5146434", + "5146472", + "5146476", + "5146483", + "5146496", + "5146497", + "5146508", + "5146510", + "5146525", + "5146559", + "5146566", + "5146567", + "5146578", + "5146598", + "5146599", + "5146601", + "5146608", + "5146611", + "5146659", + "5146677", + "5146693", + "5146720", + "5146746", + "5146752", + "5146762", + "5146774", + "5146805", + "5146820", + "5146832", + "5146833", + "5146837", + "5146842", + "5146852", + "5146856", + "5146862", + "5146880", + "5146883", + "5146894", + "5146899", + "5146908", + "5146920", + "5146937", + "5146946", + "5146961", + "5147002", + "5147018", + "5147038", + "5147039", + "5147041", + "5147043", + "5147046", + "5147058", + "5147062", + "5147071", + "5147099", + "5147109", + "5147114", + "5147121", + "5147139", + "5147145", + "5147150", + "5147155", + "5147160", + "5147165", + "5147171", + "5147179", + "5147193", + "5147208", + "5147211", + "5147212", + "5147225", + "5147232", + "5147245", + "5147287", + "5147306", + "5147319", + "5147354", + "5147395", + "5147415", + "5147437", + "5147441", + "5147478", + "5147492", + "5147513", + "5147516", + "5147522", + "5147534", + "5147560", + "5147608", + "5147638", + "5147681", + "5147703", + "5147713", + "5147827", + "5147834", + "5147838", + "5147858", + "5147868", + "5147871", + "5147879", + "5147883", + "5147894", + "5147898", + "5147899", + "5147909", + "5147917", + "5147923", + "5147968", + "5148043", + "5148055", + "5148096", + "5148097", + "5148184", + "5148214", + "5148223", + "5148247", + "5148248", + "5148252", + "5148264", + "5148277", + "5148280", + "5148286", + "5148379", + "5148394", + "5148424", + "5148436", + "5148462", + "5148475", + "5148486", + "5148487", + "5148520", + "5148531", + "5148544", + "5148576", + "5148593", + "5148719", + "5148743", + "5148753", + "5148766", + "5148850", + "5148934", + "5148952", + "5148954", + "5149012", + "5149081", + "5149136", + "5149174", + "5149182", + "5149237", + "5149307", + "5149308", + "5149315", + "5149317", + "5149369", + "5149370", + "5149371", + "5149414", + "5149438", + "5149474", + "5149499", + "5149569", + "5149609", + "5149630", + "5149631", + "5149659", + "5149665", + "5149667", + "5149704", + "5149713", + "5149746", + "5149753", + "5149768", + "5149777", + "5149780", + "5149782", + "5149784", + "5149787", + "5149819", + "5149820", + "5149836", + "5149839", + "5149843", + "5149873", + "5149880", + "5149940", + "5149986", + "5150053", + "5150092", + "5714299", + "5714302", + "5714312", + "5714333", + "5714356", + "5714361", + "5714367", + "5714369", + "5714410", + "5714507", + "5714558", + "5714572", + "5714575", + "5714618", + "5714680", + "5714747", + "5714755", + "5714788", + "5714914", + "5714973", + "5714984", + "5714994", + "5715004", + "5715009", + "5715010", + "5715013", + "5715127", + "5715275", + "5715276", + "5715277", + "5715278", + "5715280", + "5715281", + "5734138", + "5734146", + "5734212", + "5734291", + "5734305", + "5734326", + "5734335", + "5734344", + "5734345", + "5734349", + "5734362", + "5734379", + "5734388", + "5734396", + "5734398", + "5734405", + "5734420", + "5734448", + "5734451", + "5734515", + "5734519", + "5734528", + "5734535", + "5734539", + "5734542", + "5734543", + "5734556", + "5734560", + "5734569", + "5734655", + "5734657", + "5734713", + "5734719", + "5734744", + "5734817", + "5734891", + "5734897", + "5734900", + "5734901", + "5768880", + "5769028", + "5769062", + "5769068", + "5769072", + "5769164", + "5769191", + "5769272", + "5769709", + "5770913", + "5770922", + "5770942", + "5771227", + "5771230", + "5771232", + "5771236", + "5771239", + "5771243", + "5771249", + "5771255", + "5771256", + "5771258", + "5771259", + "5771350", + "5771357", + "5771877", + "5771982", + "5772063", + "5772129", + "5772169", + "5772171", + "5772172", + "5772176", + "5772178", + "5772180", + "5772186", + "5772196", + "5772199", + "5772202", + "5772205", + "5772206", + "5772210", + "5772222", + "5772269", + "5772309", + "5772349", + "5772351", + "5772446", + "5772702", + "5772749", + "5772890", + "5772948", + "5792092", + "5802248", + "5802256", + "5802257", + "5802331", + "5802333", + "5802339", + "5802396", + "5802625", + "5803065", + "5803588", + "5804166", + "5804895", + "5805407", + "5805954", + "5806127", + "5806132", + "5806166", + "5806167", + "5806175", + "5806176", + "5806177", + "5806244", + "5806333", + "5806352", + "5806353", + "5806391", + "5806412", + "5879654", + "5880040", + "5880041", + "5880063", + "5880147", + "5880258", + "5880367", + "5880392", + "5880478", + "5880512", + "5880533", + "5880539", + "5880545", + "5880550", + "5880552", + "5880559", + "5880563", + "5881397", + "5881400", + "5881551", + "5881748", + "5881946", + "5882039", + "5882965", + "5883052", + "5883255", + "5883881", + "5883925", + "5883985", + "5884188", + "5884243", + "5884245", + "5884247", + "5884258", + "5884571", + "5884851", + "5884888", + "5885399", + "5885428", + "5925238", + "5925317", + "5976937", + "5977179", + "5977185", + "5977197", + "5977203", + "5977207", + "5977208", + "5977214", + "5977216", + "5977220", + "5977235", + "5977247", + "5977250", + "5977251", + "5977257", + "5977259", + "5977260", + "5977261", + "5977262", + "6097214", + "6097225", + "6097228", + "6097233", + "6097234", + "6097235", + "6097236", + "6097254", + "6097260", + "6097269", + "6099041", + "6100725", + "6100726", + "6106647", + "6106744", + "6106759", + "6106943", + "6112449", + "6112547", + "6112606", + "6112610", + "6112613", + "6112634", + "6112661", + "6113873", + "6113959", + "6115283", + "6115388", + "6115426", + "6115437", + "6115504", + "6115793", + "6115822", + "6115830", + "6115946", + "6115953", + "6115973", + "6116073", + "6116341", + "6116368", + "6116440", + "6116646", + "6116661", + "6116674", + "6116699", + "6116754", + "6116899", + "6117055", + "6117124", + "6117485", + "6118530", + "6119299", + "6119323", + "6119488", + "6120803", + "6120861", + "6120980", + "6121010", + "6121184", + "6121218", + "6121912", + "6122103", + "6122301", + "6122364", + "6122527", + "6132711", + "6132712", + "6132715", + "6132723", + "6132728", + "6132729", + "6132781", + "6132797", + "6132809", + "6132824", + "6132826", + "6132841", + "6132850", + "6132868", + "6132869", + "6132915", + "6132916", + "6132917", + "6132936", + "6132938", + "6132953", + "6132957", + "6132966", + "6132967", + "6132971", + "6132974", + "6132979", + "6132989", + "6133001", + "6133002", + "6133007", + "6133011", + "6133013", + "6133026", + "6133029", + "6133033", + "6133051", + "6133058", + "6133069", + "6133075", + "6133081", + "6133083", + "6133117", + "6133141", + "6133154", + "6133158", + "6133181", + "6133182", + "6133232", + "6133241", + "6133242", + "6133244", + "6133248", + "6133252", + "6133262", + "6133264", + "6133269", + "6133270", + "6133271", + "6133292", + "6133297", + "6133311", + "6133312", + "6133313", + "6133315", + "6133317", + "6133325", + "6133340", + "6133343", + "6133397", + "6133441", + "6133481", + "6133498", + "6133500", + "6133501", + "6133502", + "6133509", + "6133513", + "6133516", + "6133517", + "6133518", + "6133519", + "6133520", + "6133523", + "6133525", + "6133528", + "6133534", + "6133540", + "6133542", + "6133546", + "6133548", + "6133552", + "6133559", + "6133560", + "6133562", + "6133575", + "6133582", + "6133585", + "6133586", + "6133591", + "6133593", + "6133595", + "6133604", + "6133607", + "6133614", + "6133619", + "6133635", + "6133637", + "6133643", + "6133648", + "6133659", + "6133667", + "6133670", + "6133673", + "6133674", + "6133676", + "6133680", + "6133681", + "6133684", + "6133687", + "6133688", + "6133691", + "6133700", + "6133720", + "6133742", + "6133750", + "6133769", + "6133777", + "6133780", + "6133803", + "6133806", + "6133809", + "6133811", + "6133813", + "6133858", + "6134027", + "6134035", + "6196939", + "6197138", + "6198302", + "6201790", + "6205994", + "6207059", + "6214734", + "6219423", + "6221746", + "6228464", + "6229058", + "6231906", + "6544581", + "6544637", + "6544687", + "7207679", + "7345742", + "7345777", + "7345801", + "7345811", + "7345813", + "7345819", + "7345829", + "7345843", + "7346231", + "7346236", + "7346237", + "7346240", + "7346249", + "7346252", + "7346256", + "7346263", + "7346276", + "7346284", + "7346286", + "7346301", + "7346328", + "7346335", + "7346340", + "7346344", + "7346346", + "7346351", + "7346354", + "7346356", + "7346381", + "7346382", + "7346384", + "7346401", + "7346407", + "7346417", + "7346426", + "7346430", + "7346434", + "7346444", + "7346446", + "7350238", + "7354189", + "7372375", + "7383338", + "7387466", + "7388922", + "7389824", + "7390086", + "7396517", + "7398419", + "7400814", + "7410701", + "7428726", + "7429212", + "7431428", + "7438067", + "7443518", + "7446048", + "7448174", + "7466487", + "7472845", + "7480993", + "7507369", + "7509928", + "7535515", + "7541913", + "7543006", + "7555991", + "7558165", + "7560807", + "7562564", + "7586742", + "7588222", + "7589577", + "7593392", + "7596232", + "7598729", + "7598945", + "7603634", + "7611914", + "7622059", + "7623903", + "7624468", + "7624494", + "7628188", + "7633472", + "7634721", + "7642610", + "7646066", + "7654770", + "7656811", + "7657419", + "7661023", + "7661785", + "7664111", + "7664771", + "7672864", + "7673242", + "7674502", + "7681733", + "7683096", + "7689966", + "7700512", + "7700568", + "7701550", + "7712384", + "7712938", + "7716829", + "7717385", + "7717983", + "7725644", + "7726809", + "7728366", + "7734292", + "7738295", + "7741315", + "7752082", + "7753668", + "7761138", + "7762841", + "7764232", + "7767114", + "7768584", + "7768674", + "7769543", + "7776011", + "7778368", + "7779226", + "7780930", + "7785540", + "7791190", + "7791558", + "7798382", + "7799370", + "7800469", + "7803585", + "7809779", + "7825945", + "7851302", + "7854318", + "7864212", + "7867379", + "7869346", + "7870336", + "7874258", + "7875265", + "7877231", + "7882824", + "7895336", + "7903078", + "7905361", + "7909858", + "7911151", + "7917033", + "7918000", + "7919880", + "7921916", + "7924383", + "7934873", + "7937573", + "7940536", + "7946946", + "7955974", + "7958169", + "7960566", + "7964262", + "7964910", + "7972792", + "7973517", + "7975250", + "7976145", + "7981372", + "7981386", + "7988195", + "7988274", + "7993353", + "7996464", + "8000103", + "8001799", + "8007222", + "8008237", + "8014296", + "8015612", + "8015895", + "8016522", + "8016905", + "8021109", + "8023645", + "8035998", + "8038357", + "8043500", + "8045644", + "8047165", + "8047343", + "8048904", + "8049830", + "8050639", + "8067894", + "8073674", + "8078362", + "8086347", + "8094357", + "8102790", + "8103163", + "8105817", + "8108800", + "8109173", + "8111395", + "8133328", + "8133678", + "8137978", + "8138711", + "8140883", + "8141741", + "8146570", + "8148822", + "8150089", + "8150450", + "8158342", + "8160782", + "8165185", + "8167638", + "8167743", + "8168644", + "8172949", + "8176911", + "8177775", + "8178453", + "8178854", + "8180900", + "8186212", + "8189761", + "8193562", + "8200050", + "8201251", + "8203812", + "8208583", + "8214814", + "8215326", + "8218441", + "8219149", + "8222049", + "8223165", + "8225376", + "8233062", + "8237987", + "8244266", + "8247566", + "8253467", + "8262357", + "8270406", + "8271010", + "8273661", + "8277078", + "8292351", + "8292872", + "8295666", + "8298764", + "8312017", + "8313553", + "8314088", + "8322165", + "8324720", + "8325294", + "8326103", + "8329661", + "8331687", + "8345567", + "8345820", + "8345991", + "8348761", + "8352161", + "8355390", + "8356768", + "8361848", + "8363507", + "8363709", + "8366158", + "8367663", + "8369868", + "8379616", + "8384839", + "8388883", + "8389961", + "8393082", + "8393221", + "8394261", + "8396242", + "8397564", + "8402212", + "8404037", + "8405656", + "8407461", + "8411753", + "8414310", + "8416348", + "8420632", + "8421569", + "8424964", + "8424972", + "8425580", + "8426357", + "8429622", + "8439879", + "8440999", + "8445010", + "8491927", + "8501203", + "8503184", + "8532380", + "8537359", + "8543494", + "8546322", + "8548427", + "8549720", + "8551997", + "8559137", + "8562506", + "8574752", + "8581601", + "8604089", + "8624848", + "8643155", + "8643309", + "8647523", + "8669164", + "8691947", + "8708745", + "8720118", + "8723161", + "8725248", + "8727750", + "8729319", + "8734090", + "8734154", + "8741260", + "8742426", + "8751100", + "8755207", + "8756768", + "8763986", + "8766638", + "8774985", + "8775810", + "8779506", + "8782891", + "8790054", + "8792353", + "8793278", + "8793324", + "8793873", + "8793973", + "8797666", + "8802610", + "8805966", + "8810143", + "8810912", + "8818378", + "8823068", + "8825450", + "8825467", + "8831819", + "8832485", + "8833509", + "8834672", + "8837162", + "8837974", + "8843927", + "8846776", + "8847500", + "8849480", + "8851663", + "8856895", + "8858121", + "8869900", + "8871600", + "8872165", + "8874140", + "8874633", + "8876855", + "8877458", + "8883183", + "8890502", + "8897869", + "8904480", + "8905759", + "8908724", + "8918036", + "8924506", + "8928353", + "8929537", + "8933773", + "8941801", + "8941993", + "8943174", + "8951523", + "8951618", + "8955839", + "8956567", + "8956729", + "8958353", + "8963926", + "8968321", + "8978362", + "8981028", + "8982591", + "8992718", + "9002107", + "9007213", + "9008379", + "9015218", + "9016382", + "9017206", + "9022399", + "9023222", + "9028122", + "9038042", + "9050611", + "9051758", + "9051888", + "9053308", + "9059564", + "9062262", + "9068968", + "9072828", + "9086331", + "9087922", + "9092175", + "9100030", + "9101339", + "9105656", + "9110918", + "9111961", + "9113409", + "9114044", + "9119710", + "9135821", + "9135886", + "9136904", + "9137631", + "9146244", + "9148810", + "9156165", + "9156458", + "9157410", + "9159662", + "9163659", + "9174377", + "9175037", + "9176043", + "9181627", + "9183738", + "9190731", + "9192882", + "9208233", + "9208918", + "9213204", + "9216200", + "9219266", + "9219529", + "9220953", + "9228024", + "9233420", + "9235027", + "9235225", + "9236138", + "9237031", + "9237599", + "9237621", + "9238900", + "9240216", + "9240357", + "9240588", + "9241105", + "9242559", + "9242609", + "9243117", + "9243264", + "9243875", + "9244066", + "9244973", + "9247563", + "9247947", + "9248329", + "9248830", + "9249036", + "9249651", + "9250744", + "9251088", + "9251096", + "9252524", + "9253819", + "9254017", + "9254157", + "9255102", + "9255328", + "9255512", + "9256436", + "9256786", + "9257793", + "9257908", + "9261296", + "9261458", + "9262981", + "9264326", + "9266866", + "9267364", + "9268082", + "9272461", + "9273409", + "9273963", + "9274899", + "9276279", + "9277294", + "9277330", + "9278311", + "9278398", + "9279670", + "9281181", + "9282469", + "9283228", + "9287097", + "9288185", + "9288386", + "9288596", + "9288979", + "9289753", + "9289908", + "9290866", + "9291075", + "9291092", + "9291297", + "9292394", + "9294363", + "9297059", + "9298735", + "9299326", + "9301336", + "9305011", + "9305798", + "9306367", + "9307098", + "9307254", + "9307713", + "9308082", + "9308930", + "9309575", + "9310286", + "9310369", + "9310510", + "9310626", + "9311081", + "9312545", + "9313634", + "9314022", + "9315577", + "9315833", + "9320776", + "9320916", + "9321500", + "9322646", + "9323382", + "9324570", + "9325654", + "9327042", + "9327259", + "9328683", + "9330467", + "9331464", + "9332369", + "9332550", + "9334639", + "9336001", + "9337858", + "9338769", + "9339487", + "9340070", + "9340452", + "9342344", + "9343385", + "9344456", + "9345545", + "9347308", + "9348210", + "9350484", + "9352348", + "9352978", + "9353360", + "9354496", + "9355107", + "9355953", + "9356491", + "9357385", + "9358521", + "9359597", + "9359871", + "9362190", + "9362560", + "9362785", + "9363692", + "9366016", + "9366762", + "9367471", + "9367674", + "9368026", + "9368398", + "9368974", + "9369576", + "9370070", + "9370312", + "9370933", + "9372988", + "9373309", + "9373686", + "9374637", + "9377268", + "9379595", + "9379855", + "9381852", + "9382044", + "9382415", + "9385576", + "9387353", + "9387782", + "9388726", + "9390065", + "9390293", + "9391442", + "9391467", + "9392058", + "9392076", + "9392084", + "9392614", + "9394138", + "9395000", + "9395261", + "9396180", + "9399145", + "9399288", + "9400545", + "9400895", + "9400916", + "9400977", + "9402536", + "9403481", + "9404919", + "9406020", + "9406822", + "9406984", + "9407200", + "9410076", + "9410414", + "9414984", + "9415435", + "9415669", + "9416645", + "9418549", + "9419734", + "9420824", + "9423248", + "9423863", + "9424082", + "9424441", + "9424464", + "9424681", + "9424853", + "9425857", + "9426054", + "9426252", + "9426771", + "9428900", + "9432438", + "9432644", + "9432810", + "9433772", + "9434954", + "9436173", + "9438677", + "9438913", + "9440183", + "9440644", + "9442902", + "9443159", + "9445489", + "9446281", + "9446902", + "9447614", + "9448761", + "9449132", + "9451320", + "9452274", + "9452497", + "9452702", + "9453490", + "9454052", + "9454291", + "9454444", + "9455404", + "9456004", + "9456735", + "9457324", + "9457757", + "9460510", + "9463442", + "9465978", + "9468297", + "9468667", + "9469139", + "9469300", + "9469928", + "9471709", + "9473121", + "9473918", + "9474256", + "9474405", + "9477531", + "9478331", + "9478424", + "9478718", + "9479525", + "9480768", + "9484411", + "9485481", + "9486293", + "9486411", + "9488754", + "9488783", + "9489399", + "9491341", + "9492499", + "9492640", + "9493016", + "9493317", + "9494431", + "9494526", + "9495306", + "9496311", + "9496896", + "9497623", + "9498206", + "9499599", + "9500553", + "9500945", + "9502606", + "9502724", + "9503548", + "9504222", + "9508913", + "9511345", + "9511749", + "9512631", + "9513830", + "9516038", + "9516680", + "9517291", + "9519191", + "9519321", + "9520799", + "9524458", + "9525172", + "9526331", + "9527919", + "9530135", + "9530200", + "9530271", + "9530406", + "9530928", + "9530977", + "9533271", + "9533293", + "9534291", + "9534690", + "9535420", + "9538525", + "9538684", + "9539128", + "9539292", + "9541133", + "9541734", + "9541908", + "9544337", + "9544558", + "9545331", + "9545480", + "9545713", + "9546514", + "9546910", + "9547140", + "9547535", + "9547676", + "9548726", + "9548993", + "9549172", + "9549475", + "9550265", + "9551544", + "9552253", + "9552466", + "9552703", + "9553692", + "9554074", + "9555094", + "9556427", + "9558845", + "9558873", + "9559336", + "9560018", + "9560404", + "9560782", + "9561820", + "9562175", + "9563355", + "9563837", + "9564612", + "9564779", + "9565980", + "9568710", + "9571514", + "9573163", + "9574801", + "9574939", + "9577234", + "9577547", + "9578319", + "9579309", + "9579730", + "9581695", + "9581976", + "9586329", + "9586705", + "9589234", + "9590057", + "9590066", + "9590272", + "9591877", + "9592714", + "9593098", + "9593393", + "9593475", + "9594509", + "9595155", + "9596498", + "9597741", + "9599150", + "9601788", + "9604825", + "9606779", + "9607036", + "9607447", + "9608673", + "9610059", + "9610080", + "9610447", + "9611624", + "9612009", + "9616658", + "9617411", + "9617496", + "9618068", + "9619088", + "9621086", + "9621113", + "9621271", + "9622117", + "9622725", + "9622955", + "9623131", + "9623220", + "9624918", + "9625112", + "9626037", + "9626500", + "9627567", + "9627917", + "9629365", + "9629450", + "9630748", + "9632824", + "9633615", + "9634575", + "9636267", + "9636442", + "9637664", + "9645309", + "9663271", + "9674732", + "9675743", + "9686431", + "9689122", + "9700261", + "9734171", + "9745549", + "9748079", + "9749806", + "9752950", + "9754232", + "9755262", + "9759340", + "9760511", + "9776414", + "9777614", + "9778438", + "9782192", + "9790007", + "9792270", + "9801765", + "9803522", + "9804158", + "9805848", + "9807789", + "9812211", + "9816676", + "9819403", + "9826405", + "9830270", + "9833933", + "9835867", + "9836014", + "9837762", + "9840570", + "9849625", + "9851221", + "9851261", + "9851867", + "9852545", + "9857679", + "9858922", + "9859868", + "9860684", + "9860902", + "9864281", + "9867379", + "9875111", + "9875141", + "9880932", + "9882683", + "9883140", + "9883274", + "9883856", + "9885192", + "9890366", + "9893740", + "9894093", + "9895629", + "9896144", + "9899724", + "9904499", + "9906229", + "9906979", + "9909775", + "9911298", + "9913863", + "9914882", + "9916153", + "9919915", + "9921001", + "9923283", + "9925669", + "9927378", + "9932090", + "9935837", + "9939530", + "9941073", + "9942354", + "9943941", + "9944922", + "9948031", + "9950697", + "9952043", + "9953708", + "9954885", + "9956017", + "9957790", + "9958147", + "9959898", + "9960072", + "9960318", + "9963153", + "9964857", + "9967251", + "9967529", + "9968404", + "9971153", + "9972403", + "9973217", + "9975134", + "9976926", + "9977181", + "9981187", + "9983244", + "9983957", + "9985020", + "9987116", + "9988287", + "9989156", + "9994384", + "9998920", + "9999965" + ], + "optimized/genus": [ + "10017524", + "10175914", + "10268975", + "10272567", + "10283055", + "10330071", + "10381192", + "10416544", + "10494601", + "10527924", + "10552471", + "10583848", + "10777718", + "10800539", + "10836135", + "10836231", + "10864898", + "10874367", + "10874844", + "10876650", + "10903022", + "10956237", + "10962816", + "10965723", + "10976134", + "10988777", + "10990846", + "11024850", + "11027113", + "11057282", + "11064851", + "11070822", + "11425419", + "11442724", + "11462628", + "11486436", + "11491719", + "11495707", + "11527985", + "11556078", + "11596224", + "11654220", + "11748480", + "11760262", + "11760445", + "11783346", + "11879268", + "11902924", + "11907720", + "11954625", + "11955428", + "12031311", + "12047421", + "12076089", + "12105049", + "1214429", + "12152411", + "12206130", + "12225180", + "12246183", + "12260643", + "1369661", + "1555575", + "1730471", + "1730685", + "1730705", + "1730763", + "1730815", + "1730935", + "1731096", + "1731220", + "1731226", + "1731363", + "1731505", + "1731584", + "1731712", + "1731748", + "1731800", + "1731817", + "1731859", + "1731885", + "1731891", + "1732047", + "1732062", + "1732085", + "1732089", + "1732160", + "1732397", + "1732442", + "1732496", + "1732599", + "1732658", + "1732661", + "1732761", + "1732814", + "1732834", + "1732862", + "1732883", + "1732969", + "1733135", + "1733242", + "1733338", + "1733502", + "1733524", + "1733529", + "1733574", + "1733617", + "1733670", + "1733831", + "1733840", + "1734381", + "1734388", + "1734505", + "1734548", + "1734683", + "1734849", + "1734934", + "1735093", + "1735256", + "1735272", + "1735289", + "1735406", + "1735409", + "1735487", + "1735631", + "1735652", + "1735814", + "1735869", + "1736266", + "1736314", + "1736354", + "1736359", + "1736388", + "1736409", + "1736418", + "1736444", + "1736460", + "1736612", + "1736656", + "1736725", + "1736758", + "1736793", + "1736802", + "1736834", + "1736895", + "1736951", + "1737021", + "1737063", + "1737084", + "1737110", + "1737177", + "1737228", + "1737303", + "1737335", + "1737519", + "1737647", + "1737701", + "1738021", + "1738049", + "1738065", + "1738143", + "1738215", + "1738242", + "1738265", + "1738583", + "1738667", + "1738881", + "1739000", + "1739048", + "1739060", + "1739336", + "1739398", + "1739418", + "1739446", + "1739550", + "1739599", + "1739724", + "1740434", + "1740515", + "1740664", + "1740796", + "1740814", + "1741043", + "1741073", + "1741082", + "1741128", + "1741141", + "1741314", + "1741338", + "1741383", + "1741404", + "1741540", + "1741547", + "1741557", + "1741585", + "1741717", + "1741805", + "1742045", + "1742061", + "1742345", + "1742398", + "1742419", + "1743173", + "1743188", + "1743269", + "1743318", + "1743343", + "1743404", + "1743452", + "1743459", + "1743467", + "1743485", + "1743516", + "1743637", + "1743652", + "1743656", + "1743673", + "1743690", + "1743762", + "1743811", + "1743926", + "1743994", + "1744049", + "1744129", + "1744133", + "1744165", + "1744208", + "1744219", + "1744237", + "1744240", + "1744481", + "1744587", + "1744687", + "1744691", + "1744761", + "1744928", + "1744946", + "1744993", + "1745017", + "1745021", + "1745076", + "1745086", + "1745285", + "1745549", + "1745894", + "1745922", + "1745927", + "1746012", + "1746172", + "1746324", + "1746399", + "1746437", + "1746461", + "1746562", + "1746600", + "1746694", + "1746712", + "1746749", + "1747019", + "1747044", + "1747067", + "1747122", + "1747195", + "1747209", + "1747242", + "1747506", + "1747611", + "1747625", + "1747723", + "1747904", + "1747949", + "1748099", + "1748143", + "1748201", + "1748277", + "1748368", + "1748560", + "1748645", + "1748748", + "1748757", + "1748777", + "1748799", + "1748889", + "1748902", + "1749042", + "1749068", + "1749116", + "1749137", + "1749286", + "1749401", + "1749505", + "1749662", + "1749712", + "1749732", + "1750313", + "1750339", + "1750759", + "1751200", + "1751227", + "1751482", + "1751552", + "1751655", + "1751789", + "1751846", + "1751979", + "1752035", + "1752100", + "1752158", + "1752234", + "1752236", + "1752277", + "1752321", + "1752361", + "1752382", + "1752482", + "1752533", + "1752552", + "1752650", + "1752744", + "1752804", + "1752820", + "1752891", + "1752899", + "1752915", + "1752944", + "1752965", + "1753080", + "1753104", + "1753147", + "1753211", + "1753224", + "1753410", + "1753458", + "1753548", + "1753594", + "1753630", + "1753657", + "1753747", + "1753802", + "1753826", + "1753830", + "1753896", + "1753921", + "1753981", + "1754133", + "1754176", + "1754253", + "1754269", + "1754315", + "1754329", + "1754344", + "1754391", + "1754412", + "1754508", + "1754609", + "1754799", + "1754857", + "1754901", + "1754916", + "1754927", + "1755149", + "1755233", + "1755294", + "1757647", + "1757668", + "1757834", + "1757850", + "1757883", + "1757993", + "1758098", + "1758439", + "1758446", + "1758610", + "1758620", + "1758718", + "1758724", + "1758765", + "1758790", + "1758812", + "1758827", + "1758859", + "1758873", + "1758939", + "1759029", + "1759152", + "1759329", + "1759405", + "1759552", + "1759711", + "1759767", + "1759797", + "1759812", + "1759878", + "1759882", + "1760088", + "1760135", + "1760168", + "1760198", + "1760260", + "1760285", + "1760355", + "1760382", + "1760401", + "1760447", + "1760583", + "1760588", + "1760678", + "1760738", + "1760849", + "1760914", + "1760928", + "1760946", + "1760969", + "1761017", + "1761094", + "1761132", + "1761207", + "1761351", + "1761388", + "1761401", + "1761495", + "1761539", + "1761550", + "1761571", + "1761728", + "1761750", + "1761775", + "1761787", + "1761797", + "1761815", + "1761829", + "1761857", + "1761889", + "1762149", + "1762194", + "1762212", + "1762225", + "1762232", + "1762280", + "1762346", + "1762414", + "1762605", + "1762640", + "1762666", + "1762711", + "1762841", + "1762885", + "1762898", + "1763151", + "1763285", + "1763588", + "1763591", + "1763597", + "1763649", + "1763693", + "1763713", + "1763777", + "1763951", + "1764015", + "1764140", + "1764158", + "1764187", + "1764234", + "1764504", + "1764524", + "1764537", + "1764670", + "1764684", + "1764737", + "1764851", + "1764916", + "1764920", + "1765092", + "1765161", + "1765176", + "1765207", + "1765601", + "1765652", + "1765657", + "1765726", + "1765763", + "1765861", + "1765877", + "1765949", + "1765960", + "1766066", + "1766077", + "1766123", + "1766259", + "1766265", + "1766280", + "1766366", + "1766538", + "1766547", + "1766624", + "1766671", + "1766708", + "1766838", + "1766883", + "1766908", + "1766914", + "1767029", + "1767032", + "1767046", + "1767093", + "1767210", + "1767304", + "1767334", + "1767360", + "1767483", + "1767496", + "1767504", + "1767509", + "1767566", + "1767590", + "1767644", + "1767714", + "1767752", + "1767796", + "1767878", + "1767949", + "1768106", + "1768130", + "1768136", + "1768165", + "1768222", + "1768281", + "1768302", + "1768411", + "1768432", + "1768542", + "1768561", + "1768579", + "1768691", + "1768896", + "1768949", + "1768971", + "1768999", + "1769024", + "1769051", + "1769098", + "1769110", + "1769165", + "1769189", + "1769208", + "1769212", + "1769311", + "1769330", + "1769393", + "1769504", + "1769735", + "1769812", + "1769819", + "1769933", + "1769943", + "1769945", + "1769972", + "1770011", + "1770123", + "1770169", + "1770274", + "1770379", + "1770396", + "1770488", + "1770592", + "1770658", + "1771356", + "1771363", + "1771448", + "1771454", + "1771501", + "1771541", + "1771549", + "1771562", + "1771845", + "1771850", + "1771866", + "1771871", + "1771881", + "1771972", + "1771980", + "1772042", + "1772053", + "1772092", + "1772151", + "1772155", + "1772253", + "1772259", + "1772349", + "1772359", + "1772421", + "1772425", + "1772445", + "1772455", + "1772540", + "1772660", + "1772714", + "1772783", + "1772826", + "1772926", + "1773740", + "1773781", + "1773846", + "1773983", + "1774090", + "1774237", + "1774251", + "1774256", + "1774309", + "1774357", + "1774366", + "1774573", + "1774778", + "1774846", + "1774853", + "1774906", + "1774917", + "1774940", + "1774947", + "1775029", + "1775058", + "1775081", + "1775144", + "1775149", + "1775234", + "1775285", + "1775298", + "1775310", + "1775505", + "1775624", + "1775633", + "1775663", + "1775833", + "1775864", + "1775887", + "1775910", + "1775959", + "1775969", + "1775975", + "1775986", + "1776166", + "1776168", + "1776181", + "1776205", + "1776246", + "1776299", + "1776391", + "1776454", + "1776498", + "1776576", + "1776846", + "1776978", + "1777014", + "1777101", + "1777140", + "1777156", + "1777174", + "1777243", + "1777260", + "1777277", + "1777560", + "1777629", + "1777724", + "1777734", + "1777760", + "1777863", + "1777868", + "1777907", + "1777925", + "1777971", + "1778073", + "1778108", + "1778114", + "1778136", + "1778156", + "1778332", + "1778406", + "1778497", + "1778527", + "1778544", + "1778574", + "1778600", + "1778626", + "1778686", + "1778695", + "1779253", + "1779398", + "1779429", + "1779445", + "1779611", + "1779630", + "1779666", + "1779682", + "1779739", + "1779957", + "1780042", + "1780068", + "1780139", + "1780207", + "1780269", + "1780300", + "1780615", + "1780700", + "1780844", + "1780855", + "1780861", + "1780913", + "1781027", + "1781044", + "1781086", + "1781160", + "1781226", + "1781546", + "1781630", + "1781683", + "1781695", + "1781924", + "1781971", + "1782029", + "1782041", + "1782106", + "1782167", + "1782184", + "1782205", + "1782317", + "1782325", + "1782330", + "1782414", + "1782456", + "1782460", + "1782522", + "1782524", + "1782594", + "1782607", + "1782659", + "1783087", + "1783166", + "1783299", + "1783311", + "1783337", + "1783344", + "1783367", + "1783394", + "1783651", + "1783739", + "1783783", + "1783838", + "1783845", + "1783880", + "1783931", + "1783955", + "1784240", + "1784275", + "1784342", + "1784356", + "1784395", + "1784645", + "1784686", + "1784696", + "1784759", + "1784809", + "1784892", + "1785140", + "1785216", + "1785279", + "1785281", + "1785305", + "1785398", + "1785439", + "1785723", + "1785726", + "1785742", + "1785830", + "1785833", + "1785873", + "1785909", + "1785931", + "1786031", + "1786211", + "1786307", + "1786313", + "1786329", + "1786447", + "1786454", + "1786513", + "1786563", + "1786570", + "1786601", + "1786710", + "1786730", + "1786807", + "1786859", + "1786886", + "1786909", + "1786930", + "1786955", + "1787011", + "1787061", + "1787105", + "1787107", + "1787399", + "1787427", + "1787496", + "1787522", + "1787996", + "1788033", + "1788044", + "1788051", + "1788069", + "1788100", + "1788138", + "1788243", + "1788326", + "1788411", + "1788466", + "1788535", + "1788663", + "1788678", + "1788719", + "1788724", + "1788764", + "1788807", + "1788844", + "1788860", + "1788916", + "1788941", + "1789056", + "1789061", + "1789150", + "1789189", + "1789210", + "1789222", + "1789246", + "1789286", + "1789407", + "1789474", + "1789493", + "1789503", + "1789545", + "1789602", + "1789628", + "1789643", + "1789671", + "1789793", + "1789826", + "1789953", + "1789978", + "1790228", + "1790322", + "1790328", + "1790337", + "1790356", + "1790449", + "1790601", + "1790683", + "1790726", + "1790784", + "1790791", + "1790794", + "1790829", + "1790837", + "1790850", + "1790931", + "1790999", + "1791093", + "1791152", + "1791180", + "1791315", + "1791371", + "1791378", + "1791382", + "1791497", + "1791585", + "1791654", + "1791678", + "1791696", + "1791769", + "1791792", + "1791827", + "1791843", + "1791861", + "1791874", + "1792055", + "1792199", + "1792250", + "1792270", + "1792280", + "1792316", + "1792324", + "1792405", + "1792635", + "1792687", + "1792712", + "1792752", + "1792764", + "1792816", + "1792825", + "1792984", + "1793188", + "1793190", + "1793222", + "1793290", + "1793320", + "1793366", + "1793417", + "1793452", + "1793571", + "1793603", + "1793660", + "1793684", + "1793697", + "1793856", + "1793887", + "1793981", + "1794099", + "1794349", + "1794423", + "1794496", + "1794509", + "1794512", + "1794529", + "1794570", + "1794630", + "1795041", + "1795061", + "1795072", + "1795103", + "1795126", + "1795443", + "1795478", + "1795656", + "1795782", + "1796204", + "1796209", + "1796225", + "1796256", + "1796272", + "1796302", + "1796328", + "1796358", + "1796408", + "1796469", + "1796639", + "1796782", + "1796837", + "1796957", + "1796971", + "1797038", + "1797073", + "1797586", + "1797726", + "1797730", + "1798007", + "1798027", + "1798083", + "1798089", + "1798097", + "1798277", + "1798308", + "1798340", + "1798362", + "1798377", + "1798421", + "1798440", + "1798478", + "1798509", + "1798514", + "1798902", + "1799163", + "1799180", + "1799416", + "1799429", + "1799669", + "1799687", + "1799702", + "1799723", + "1799771", + "1799789", + "1799868", + "1799993", + "1800016", + "1800085", + "1800142", + "1800236", + "1800430", + "1800437", + "1800464", + "1800482", + "1800518", + "1800523", + "1800542", + "1800639", + "1800662", + "1800668", + "1800838", + "1800845", + "1800870", + "1800879", + "1800891", + "1800918", + "1800952", + "1800985", + "1800996", + "1801046", + "1801072", + "1801082", + "1801085", + "1801146", + "1801195", + "1801203", + "1801278", + "1801431", + "1801449", + "1801758", + "1801990", + "1802070", + "1802118", + "1802159", + "1802213", + "1802234", + "1802269", + "1802330", + "1802660", + "1802775", + "1802779", + "1802864", + "1802886", + "1802894", + "1802935", + "1802997", + "1803137", + "1803474", + "1803699", + "1803780", + "1803812", + "1803951", + "1804321", + "1804391", + "1804414", + "1804474", + "1804500", + "1804552", + "1804609", + "1804645", + "1804714", + "1804755", + "1804829", + "1804905", + "1804961", + "1805025", + "1805088", + "1805171", + "1805233", + "1805340", + "1805496", + "1805498", + "1805536", + "1805680", + "1805688", + "1805749", + "1805805", + "1805917", + "1806046", + "1806123", + "1806539", + "1806678", + "1806703", + "1806731", + "1806813", + "1806818", + "1806869", + "1806884", + "1806935", + "1807195", + "1807270", + "1807288", + "1807352", + "1807453", + "1807502", + "1807552", + "1807557", + "1807878", + "1807965", + "1808083", + "1808097", + "1808588", + "1808720", + "1808910", + "1808961", + "1809017", + "1809035", + "1809063", + "1809069", + "1809113", + "1809124", + "1809150", + "1809201", + "1809226", + "1809292", + "1809304", + "1809307", + "1809346", + "1809379", + "1809452", + "1809913", + "1809946", + "1809948", + "1809950", + "1810097", + "1810107", + "1810140", + "1810463", + "1810465", + "1810505", + "1810530", + "1810734", + "1810746", + "1810845", + "1810849", + "1810852", + "1810969", + "1810973", + "1811436", + "1811507", + "1811612", + "1811679", + "1812433", + "1812492", + "1812534", + "1812649", + "1812874", + "1812976", + "1813237", + "1813262", + "1814095", + "1814174", + "1814314", + "1814401", + "1814534", + "1814563", + "1814595", + "1814654", + "1814799", + "1814885", + "1814969", + "1815226", + "1815259", + "1815337", + "1815380", + "1815439", + "1815844", + "1815859", + "1815923", + "1816024", + "1816417", + "1816564", + "1816799", + "1816867", + "1816956", + "1817060", + "1817084", + "1817136", + "1817669", + "1817786", + "1817807", + "1817809", + "1817848", + "1817918", + "1817933", + "1818401", + "1818428", + "1818431", + "1818477", + "1818650", + "1818989", + "1819125", + "1819252", + "1819276", + "1819372", + "1819648", + "1819696", + "1819785", + "1819865", + "1819968", + "1820080", + "1820270", + "1820536", + "1820708", + "1821441", + "1822129", + "1822137", + "1822252", + "1822307", + "1822481", + "1822545", + "1822666", + "1822778", + "1822912", + "1823292", + "1823440", + "1823479", + "1823488", + "1823572", + "1823574", + "1823601", + "1823616", + "1823667", + "1823698", + "1823714", + "1824079", + "1824090", + "1824237", + "1824246", + "1824253", + "1824255", + "1824279", + "1824326", + "1824336", + "1824350", + "1824384", + "1824440", + "1824562", + "1824749", + "1824762", + "1824842", + "1824870", + "1825057", + "1825076", + "1825121", + "1825216", + "1825235", + "1825334", + "1825340", + "1825424", + "1825444", + "1825535", + "1825551", + "1825734", + "1825783", + "1825887", + "1825951", + "1825963", + "1826021", + "1826045", + "1826053", + "1826107", + "1826124", + "1826153", + "1826180", + "1826192", + "1826217", + "1826417", + "1826511", + "1826572", + "1826650", + "1827099", + "1827111", + "1827158", + "1827279", + "1827342", + "1827405", + "1827428", + "1827482", + "1827506", + "1827539", + "1827547", + "1827641", + "1827686", + "1827708", + "1827714", + "1827772", + "1827798", + "1827827", + "1828102", + "1828161", + "1828267", + "1828308", + "1828314", + "1828383", + "1828394", + "1828435", + "1828463", + "1828636", + "1828802", + "1828825", + "1828975", + "1829019", + "1829282", + "1829298", + "1829472", + "1829593", + "1829658", + "1829702", + "1830030", + "1830036", + "1830098", + "1830118", + "1830355", + "1830379", + "1830497", + "1830507", + "1830630", + "1830657", + "1830799", + "1830873", + "1830909", + "1831096", + "1831127", + "1831270", + "1831272", + "1831446", + "1831720", + "1831747", + "1831773", + "1831776", + "1831858", + "1831868", + "1832142", + "1832233", + "1832249", + "1832512", + "1832608", + "1832635", + "1832647", + "1832810", + "1833468", + "1833476", + "1833495", + "1833543", + "1833560", + "1833568", + "1833578", + "1833623", + "1833651", + "1833778", + "1833818", + "1834426", + "1834431", + "1834515", + "1834551", + "1834557", + "1834588", + "1834598", + "1834737", + "1834792", + "1834827", + "1835027", + "1835064", + "1835077", + "1835084", + "1835118", + "1835151", + "1835346", + "1835366", + "1835429", + "1835465", + "1835499", + "1835546", + "1835599", + "1835641", + "1835688", + "1835789", + "1835812", + "1835818", + "1835820", + "1835832", + "1836865", + "1836870", + "1836898", + "1836903", + "1837045", + "1837050", + "1837148", + "1837168", + "1837338", + "1837568", + "1837645", + "1837649", + "1837723", + "1837816", + "1837898", + "1837967", + "1838053", + "1838074", + "1838215", + "1838242", + "1838332", + "1838338", + "1838624", + "1838956", + "1838964", + "1839010", + "1839258", + "1839316", + "1839385", + "1839399", + "1839559", + "1839565", + "1839598", + "1839623", + "1839652", + "1839706", + "1839730", + "1839906", + "1840063", + "1840223", + "1840257", + "1840273", + "1840664", + "1841075", + "1841152", + "1841169", + "1841220", + "1841259", + "1841294", + "1841301", + "1841303", + "1841459", + "1841475", + "1841486", + "1841529", + "1842085", + "1842184", + "1842261", + "1842436", + "1842479", + "1842684", + "1842699", + "1842803", + "1842889", + "1843000", + "1843441", + "1843479", + "1843855", + "1843887", + "1843897", + "1845266", + "1845791", + "1845807", + "1845950", + "1845958", + "1845981", + "1846006", + "1846094", + "1846239", + "1846311", + "1846350", + "1846370", + "1846392", + "1846480", + "1846510", + "1846586", + "1846636", + "1846848", + "1846907", + "1847533", + "1847591", + "1847866", + "1847914", + "1847952", + "1847974", + "1848019", + "1848113", + "1848149", + "1848192", + "1848217", + "1848253", + "1848374", + "1848475", + "1848582", + "1848634", + "1848660", + "1848677", + "1848843", + "1849005", + "1849103", + "1849117", + "1849249", + "1849256", + "1849449", + "1849474", + "1849514", + "1849528", + "1849628", + "1849652", + "1849663", + "1850022", + "1850144", + "1850224", + "1850231", + "1850276", + "1850474", + "1850521", + "1850525", + "1850669", + "1850689", + "1850721", + "1850762", + "1850769", + "1850777", + "1850790", + "1850865", + "1851038", + "1851049", + "1851201", + "1851212", + "1851293", + "1851334", + "1851406", + "1851496", + "1851662", + "1851754", + "1851826", + "1852064", + "1852133", + "1852176", + "1852212", + "1852315", + "1852327", + "1852379", + "1852416", + "1852499", + "1852745", + "1852897", + "1852917", + "1853060", + "1853074", + "1853161", + "1853239", + "1853306", + "1853516", + "1853563", + "1853643", + "1854016", + "1854023", + "1854108", + "1854160", + "1854245", + "1854255", + "1854280", + "1854326", + "1854387", + "1854459", + "1854565", + "1854610", + "1854789", + "1854815", + "1854845", + "1854905", + "1854910", + "1854934", + "1855231", + "1855355", + "1855383", + "1855394", + "1855624", + "1855776", + "1855800", + "1855955", + "1856000", + "1856086", + "1856286", + "1856344", + "1856367", + "1856382", + "1856393", + "1856417", + "1856514", + "1856554", + "1856563", + "1856580", + "1856586", + "1856615", + "1856631", + "1856650", + "1856766", + "1856845", + "1856880", + "1857014", + "1857207", + "1857231", + "1857569", + "1857624", + "1857689", + "1857773", + "1857782", + "1857808", + "1857825", + "1857968", + "1858055", + "1858281", + "1858294", + "1858396", + "1858522", + "1858529", + "1858556", + "1858614", + "1858636", + "1858640", + "1858658", + "1858672", + "1858684", + "1858722", + "1858866", + "1858921", + "1859036", + "1859059", + "1859082", + "1859284", + "1859311", + "1859451", + "1859454", + "1859503", + "1859540", + "1859547", + "1859925", + "1859936", + "1860010", + "1860060", + "1860106", + "1860109", + "1860181", + "1860256", + "1860403", + "1860411", + "1860613", + "1860657", + "1860732", + "1861151", + "1861387", + "1861408", + "1861428", + "1861448", + "1861476", + "1861483", + "1861543", + "1861552", + "1861578", + "1861601", + "1861607", + "1861659", + "1861757", + "1861768", + "1861796", + "1861878", + "1861897", + "1861930", + "1861962", + "1861971", + "1861997", + "1862020", + "1862031", + "1862058", + "1862076", + "1862247", + "1862280", + "1862288", + "1862391", + "1862420", + "1862542", + "1862560", + "1862568", + "1862655", + "1862681", + "1862914", + "1862922", + "1863017", + "1863031", + "1863074", + "1863091", + "1863101", + "1863132", + "1863163", + "1863281", + "1863292", + "1863349", + "1863351", + "1863363", + "1863382", + "1863385", + "1863395", + "1863411", + "1863413", + "1863457", + "1863583", + "1863638", + "1863644", + "1863647", + "1863693", + "1863697", + "1863702", + "1863713", + "1863752", + "1863755", + "1863825", + "1863827", + "1863846", + "1863852", + "1863877", + "1863942", + "1863953", + "1863956", + "1864124", + "1864132", + "1864141", + "1864153", + "1864203", + "1864258", + "1864315", + "1864355", + "1864404", + "1864537", + "1864562", + "1864584", + "1864760", + "1864782", + "1864813", + "1864888", + "1864901", + "1865097", + "1865294", + "1865361", + "1865411", + "1865543", + "1865647", + "1865704", + "1865750", + "1865826", + "1865838", + "1865859", + "1865866", + "1865923", + "1865957", + "1866221", + "1866248", + "1866293", + "1866333", + "1866345", + "1866416", + "1866475", + "1866597", + "1866812", + "1866898", + "1866912", + "1866984", + "1867018", + "1867046", + "1867268", + "1867305", + "1867343", + "1867412", + "1867481", + "1867545", + "1867669", + "1867674", + "1867739", + "1867761", + "1867780", + "1867783", + "1867810", + "1867983", + "1867998", + "1868017", + "1868048", + "1868162", + "1868207", + "1868327", + "1868353", + "1868393", + "1868427", + "1868491", + "1868497", + "1868520", + "1868532", + "1868563", + "1868660", + "1868834", + "1868875", + "1868887", + "1869041", + "1869056", + "1869176", + "1869237", + "1869255", + "1869358", + "1869438", + "1869504", + "1869593", + "1869643", + "1869653", + "1869664", + "1869690", + "1869760", + "1869823", + "1869851", + "1869974", + "1870028", + "1870168", + "1870229", + "1870242", + "1870413", + "1870421", + "1870449", + "1870504", + "1870697", + "1870714", + "1870982", + "1871131", + "1871172", + "1871206", + "1871366", + "1871384", + "1871413", + "1871446", + "1871596", + "1871604", + "1871695", + "1871753", + "1871761", + "1871764", + "1871825", + "1871885", + "1871922", + "1871939", + "1871986", + "1872162", + "1872209", + "1872254", + "1872346", + "1872446", + "1872465", + "1872468", + "1872509", + "1872602", + "1872732", + "1872845", + "1873021", + "1873074", + "1873212", + "1873259", + "1873280", + "1873310", + "1873335", + "1873372", + "1873374", + "1873396", + "1873408", + "1873583", + "1873619", + "1873642", + "1873750", + "1873755", + "1873763", + "1873768", + "1873775", + "1873830", + "1873980", + "1874141", + "1874152", + "1874309", + "1874374", + "1874450", + "1874624", + "1874935", + "1874958", + "1875103", + "1875317", + "1875450", + "1875477", + "1875532", + "1875600", + "1875650", + "1875821", + "1875840", + "1875849", + "1875890", + "1876167", + "1876280", + "1876391", + "1876474", + "1876511", + "1876536", + "1876547", + "1876588", + "1876613", + "1876663", + "1876846", + "1876889", + "1876954", + "1876978", + "1876990", + "1877001", + "1877266", + "1877274", + "1877292", + "1877401", + "1877430", + "1877452", + "1877472", + "1877491", + "1877495", + "1877536", + "1877619", + "1877650", + "1877771", + "1877937", + "1878008", + "1878156", + "1878171", + "1878192", + "1878317", + "1878365", + "1878404", + "1878460", + "1878522", + "1878578", + "1878610", + "1878653", + "1878661", + "1878678", + "1878743", + "1878750", + "1878757", + "1878808", + "1878812", + "1878835", + "1878838", + "1878989", + "1879124", + "1879138", + "1879226", + "1879271", + "1879334", + "1879355", + "1879396", + "1879428", + "1879435", + "1879451", + "1879463", + "1879487", + "1879494", + "1879512", + "1879809", + "1879915", + "1880172", + "1880351", + "1880354", + "1880423", + "1880436", + "1880444", + "1880501", + "1880506", + "1880703", + "1880744", + "1880848", + "1880855", + "1880878", + "1880977", + "1881078", + "1881085", + "1881092", + "1881102", + "1881145", + "1881167", + "1881178", + "1881186", + "1881206", + "1881226", + "1881296", + "1881319", + "1881357", + "1881484", + "1881495", + "1881521", + "1881601", + "1881764", + "1881804", + "1881825", + "1881858", + "1881870", + "1882019", + "1882028", + "1882213", + "1882239", + "1882249", + "1882263", + "1882314", + "1882354", + "1882413", + "1882752", + "1882757", + "1882784", + "1882809", + "1882877", + "1882900", + "1882902", + "1882925", + "1883019", + "1883022", + "1883064", + "1883116", + "1883132", + "1883364", + "1883373", + "1883417", + "1883459", + "1883586", + "1883632", + "1883698", + "1883828", + "1883872", + "1883890", + "1883941", + "1883950", + "1883962", + "1883990", + "1884002", + "1884090", + "1884194", + "1884225", + "1884236", + "1884425", + "1884486", + "1884679", + "1884683", + "1884687", + "1884699", + "1884771", + "1884810", + "1884842", + "1884886", + "1884895", + "1884921", + "1884933", + "1884939", + "1884996", + "1885008", + "1885027", + "1885190", + "1885256", + "1885564", + "1885588", + "1885639", + "1885697", + "1885731", + "1885739", + "1885792", + "1885916", + "1885924", + "1885944", + "1885946", + "1886069", + "1886102", + "1886248", + "1886261", + "1886268", + "1886289", + "1886376", + "1886474", + "1886505", + "1886576", + "1886591", + "1886649", + "1886699", + "1886711", + "1886725", + "1886760", + "1886832", + "1886921", + "1886948", + "1886993", + "1887021", + "1887028", + "1887048", + "1887269", + "1887308", + "1887335", + "1887457", + "1887460", + "1887463", + "1887501", + "1887564", + "1887573", + "1887584", + "1887632", + "1887640", + "1887682", + "1887721", + "1888041", + "1888256", + "1888299", + "1888308", + "1888334", + "1888342", + "1888406", + "1888428", + "1888451", + "1888455", + "1888536", + "1888562", + "1888578", + "1888594", + "1888618", + "1888641", + "1888698", + "1888885", + "1888933", + "1888956", + "1889037", + "1889065", + "1889233", + "1889266", + "1889286", + "1889343", + "1889366", + "1889380", + "1889533", + "1889540", + "1889551", + "1889900", + "1889936", + "1890026", + "1890044", + "1890053", + "1890086", + "1890094", + "1890111", + "1890245", + "1890256", + "1890281", + "1890345", + "1890369", + "1891030", + "1891043", + "1891047", + "1891054", + "1891073", + "1891127", + "1891152", + "1891231", + "1891297", + "1891305", + "1891353", + "1891506", + "1891594", + "1891928", + "1892130", + "1892238", + "1892295", + "1892303", + "1892318", + "1892354", + "1892404", + "1892453", + "1892505", + "1892536", + "1892615", + "1892625", + "1892653", + "1892700", + "1892707", + "1892804", + "1892818", + "1892833", + "1892844", + "1892890", + "1892917", + "1892942", + "1892952", + "1893128", + "1893171", + "1893282", + "1893309", + "1893327", + "1893378", + "1893479", + "1893521", + "1893525", + "1893971", + "1894055", + "1894073", + "1894097", + "1894323", + "1894354", + "1894417", + "1894469", + "1894779", + "1895036", + "1895130", + "1895141", + "1895152", + "1895168", + "1895235", + "1895260", + "1895438", + "1895691", + "1895732", + "1895837", + "1895859", + "1895882", + "1895908", + "1896057", + "1896080", + "1896124", + "1896129", + "1896175", + "1896289", + "1896310", + "1896317", + "1896605", + "1896644", + "1896746", + "1896752", + "1896755", + "1896785", + "1896799", + "1896874", + "1896877", + "1896917", + "1896928", + "1897636", + "1897643", + "1897659", + "1897807", + "1897825", + "1897886", + "1897974", + "1898000", + "1898018", + "1898215", + "1898246", + "1898261", + "1898343", + "1898397", + "1898410", + "1898433", + "1898474", + "1898578", + "1898587", + "1898669", + "1898683", + "1898687", + "1898853", + "1898929", + "1899046", + "1899069", + "1899077", + "1899181", + "1899194", + "1899830", + "1899832", + "1899856", + "1899908", + "1899913", + "1899924", + "1899929", + "1899985", + "1899991", + "1900021", + "1900039", + "1900063", + "1900111", + "1900140", + "1900889", + "1900916", + "1900919", + "1900968", + "1900982", + "1901205", + "1901256", + "1901287", + "1901337", + "1901363", + "1901470", + "1901530", + "1901577", + "1901581", + "1901729", + "1901739", + "1901776", + "1901786", + "1901823", + "1901885", + "1902105", + "1902109", + "1902206", + "1902221", + "1902275", + "1902399", + "1902425", + "1902433", + "1902519", + "1902562", + "1902610", + "1902619", + "1902626", + "1902644", + "1902707", + "1902795", + "1902801", + "1902813", + "1902873", + "1902993", + "1903008", + "1903193", + "1903601", + "1903625", + "1903637", + "1903653", + "1903673", + "1904271", + "1904294", + "1904380", + "1904688", + "1904817", + "1904851", + "1904981", + "1905071", + "1905123", + "1905150", + "1905339", + "1905450", + "1906002", + "1906139", + "1906171", + "1906451", + "1906565", + "1906714", + "1907130", + "1907355", + "1907390", + "1907407", + "1907726", + "1907997", + "1908109", + "1908197", + "1908298", + "1908348", + "1908354", + "1908361", + "1908573", + "1908624", + "1908757", + "1908769", + "1908788", + "1908800", + "1908980", + "1909067", + "1909115", + "1909124", + "1909215", + "1909276", + "1909297", + "1909334", + "1909428", + "1909462", + "1909588", + "1909799", + "1909804", + "1909876", + "1909881", + "1909888", + "1910363", + "1910384", + "1910682", + "1910771", + "1910782", + "1910796", + "1911072", + "1911078", + "1911518", + "1911573", + "1911580", + "1911627", + "1911690", + "1911763", + "1911932", + "1911943", + "1912138", + "1912162", + "1912319", + "1912473", + "1912488", + "1912583", + "1913046", + "1913113", + "1913456", + "1914398", + "1914692", + "1914695", + "1915017", + "1915189", + "1915248", + "1915337", + "1915371", + "1915464", + "1915497", + "1915504", + "1915529", + "1916334", + "1916665", + "1916677", + "1916752", + "1916765", + "1916794", + "1917818", + "1918025", + "1918071", + "1918203", + "1918214", + "1918262", + "1918291", + "1918309", + "1918594", + "1918607", + "1918933", + "1918940", + "1918999", + "1919016", + "1919119", + "1919124", + "1919127", + "1919144", + "1919150", + "1919168", + "1919175", + "1919219", + "1919227", + "1919238", + "1919243", + "1919305", + "1919315", + "1919339", + "1919351", + "1919645", + "1919659", + "1919675", + "1919696", + "1919721", + "1919919", + "1919936", + "1919950", + "1919962", + "1920160", + "1920180", + "1920190", + "1920236", + "1920261", + "1920274", + "1920283", + "1920346", + "1920412", + "1920425", + "1920451", + "1920460", + "1920465", + "1920481", + "1920513", + "1920523", + "1920551", + "1920554", + "1920570", + "1920580", + "1920622", + "1920682", + "1920704", + "1920723", + "1920785", + "1920793", + "1920808", + "1920814", + "1920834", + "1920921", + "1920925", + "1920934", + "1921052", + "1921054", + "1921060", + "1921065", + "1921088", + "1921118", + "1921120", + "1921138", + "1921156", + "1921235", + "1921257", + "1921287", + "1921439", + "1921642", + "1921657", + "1921908", + "1921918", + "1921987", + "1922028", + "1922054", + "1922059", + "1922068", + "1922152", + "1922191", + "1922218", + "1922236", + "1922270", + "1922297", + "1922308", + "1922454", + "1922465", + "1922516", + "1922569", + "1922635", + "1922672", + "1922677", + "1922682", + "1922712", + "1922735", + "1922740", + "1922827", + "1922888", + "1922918", + "1922953", + "1922993", + "1923013", + "1923058", + "1923462", + "1923487", + "1923497", + "1923499", + "1923510", + "1923621", + "1923675", + "1923699", + "1923795", + "1923808", + "1923835", + "1923996", + "1924035", + "1924047", + "1924171", + "1924181", + "1924221", + "1924241", + "1924272", + "1924315", + "1924333", + "1924447", + "1924511", + "1924522", + "1924548", + "1924564", + "1924749", + "1924767", + "1924772", + "1924798", + "1925355", + "1925375", + "1925409", + "1925423", + "1925542", + "1925550", + "1925584", + "1925782", + "1925804", + "1925960", + "1925996", + "1926044", + "1926317", + "1926384", + "1926426", + "1926526", + "1926552", + "1926588", + "1926709", + "1926780", + "1926814", + "1926818", + "1926956", + "1927299", + "1927305", + "1927317", + "1927390", + "1927405", + "1927696", + "1927718", + "1927884", + "1927901", + "1927903", + "1927916", + "1927984", + "1928008", + "1928015", + "1928054", + "1928073", + "1928213", + "1928217", + "1928254", + "1928328", + "1928373", + "1928404", + "1928447", + "1928581", + "1928626", + "1928632", + "1928733", + "1928780", + "1928931", + "1929039", + "1929057", + "1929128", + "1929153", + "1929768", + "1930893", + "1930950", + "1931032", + "1931092", + "1931110", + "1931125", + "1931131", + "1931144", + "1931173", + "1931187", + "1931306", + "1931309", + "1931390", + "1931542", + "1931560", + "1931647", + "1931775", + "1931802", + "1931823", + "1931848", + "1932039", + "1932052", + "1932134", + "1932169", + "1932194", + "1932323", + "1932378", + "1932450", + "1932562", + "1932574", + "1932578", + "1932636", + "1932749", + "1932810", + "1932850", + "1932878", + "1932904", + "1932941", + "1932963", + "1933012", + "1933083", + "1933256", + "1933268", + "1933579", + "1933641", + "1933677", + "1933756", + "1933795", + "1933942", + "1933996", + "1934046", + "1934186", + "1934326", + "1934442", + "1934515", + "1934690", + "1934713", + "1934983", + "1935072", + "1935294", + "1935340", + "1935356", + "1935610", + "1935826", + "1935852", + "1935968", + "1936158", + "1936231", + "1936309", + "1936370", + "1936473", + "1936531", + "1936609", + "1936648", + "1936964", + "1936968", + "1936987", + "1937063", + "1937188", + "1937440", + "1937489", + "1937511", + "1937519", + "1937555", + "1937592", + "1937617", + "1938213", + "1938225", + "1938238", + "1939085", + "1939129", + "1939152", + "1939221", + "1939297", + "1939301", + "1939330", + "1939342", + "1939401", + "1939497", + "1939519", + "1939594", + "1939616", + "1939952", + "1940108", + "1940133", + "1940447", + "1940500", + "1940797", + "1940810", + "1941309", + "1941316", + "1941561", + "1941674", + "1941716", + "1941863", + "1941927", + "1942052", + "1942128", + "1942234", + "1942250", + "1942255", + "1942264", + "1942339", + "1942369", + "1942373", + "1942404", + "1942503", + "1942523", + "1942552", + "1942608", + "1942628", + "1942655", + "1942669", + "1942671", + "1942686", + "1942692", + "1942755", + "1942827", + "1942846", + "1942857", + "1942944", + "1942996", + "1943046", + "1943068", + "1943127", + "1943165", + "1943205", + "1943211", + "1943307", + "1943357", + "1943433", + "1943469", + "1943497", + "1943555", + "1943613", + "1943627", + "1943654", + "1943753", + "1943820", + "1943934", + "1943941", + "1944003", + "1944007", + "1944103", + "1944230", + "1944270", + "1944355", + "1944409", + "1944441", + "1944474", + "1944558", + "1944586", + "1944617", + "1944767", + "1944774", + "1944792", + "1944831", + "1944946", + "1944973", + "1944985", + "1945035", + "1945078", + "1945083", + "1945113", + "1945266", + "1945298", + "1945307", + "1945390", + "1945451", + "1945528", + "1945660", + "1945809", + "1945854", + "1945902", + "1945949", + "1945956", + "1946009", + "1946033", + "1946052", + "1946065", + "1946071", + "1946077", + "1946084", + "1946099", + "1946158", + "1946263", + "1946282", + "1946331", + "1946375", + "1946413", + "1946463", + "1946490", + "1946517", + "1946541", + "1946554", + "1946599", + "1946630", + "1946647", + "1946721", + "1946753", + "1946762", + "1946766", + "1946802", + "1946900", + "1946907", + "1946979", + "1947018", + "1947024", + "1947108", + "1947191", + "1947272", + "1947353", + "1947384", + "1947405", + "1947504", + "1947532", + "1947624", + "1947649", + "1947701", + "1947815", + "1947844", + "1947872", + "1947971", + "1948041", + "1948052", + "1948058", + "1948143", + "1948367", + "1948418", + "1948434", + "1948459", + "1948519", + "1948624", + "1948816", + "1948855", + "1948868", + "1948909", + "1948942", + "1948964", + "1949003", + "1949041", + "1949143", + "1949308", + "1949330", + "1949334", + "1949354", + "1949424", + "1949446", + "1949486", + "1949496", + "1949517", + "1949579", + "1949610", + "1949632", + "1949647", + "1949686", + "1949704", + "1950012", + "1950015", + "1950034", + "1950046", + "1950114", + "1950154", + "1950166", + "1950193", + "1950257", + "1950299", + "1950334", + "1950360", + "1950380", + "1950406", + "1950496", + "1950566", + "1950585", + "1950649", + "1950763", + "1951093", + "1951144", + "1951213", + "1951289", + "1951332", + "1951348", + "1951358", + "1951407", + "1951430", + "1951549", + "1951569", + "1951642", + "1951645", + "1951655", + "1951664", + "1951744", + "1951782", + "1951788", + "1951819", + "1951910", + "1952001", + "1952029", + "1952092", + "1952118", + "1952144", + "1952174", + "1952222", + "1952259", + "1952279", + "1952300", + "1952419", + "1952446", + "1952453", + "1952526", + "1952547", + "1952607", + "1952673", + "1952727", + "1952736", + "1952801", + "1952827", + "1952875", + "1952907", + "1953000", + "1953102", + "1953190", + "1953347", + "1953396", + "1953411", + "1953522", + "1953540", + "1953948", + "1953971", + "1953975", + "1953996", + "1954033", + "1954038", + "1954074", + "1954083", + "1954119", + "1954159", + "1954235", + "1954313", + "1954391", + "1954478", + "1954494", + "1954512", + "1954521", + "1954555", + "1954587", + "1954875", + "1954921", + "1954924", + "1955016", + "1955038", + "1955270", + "1955304", + "1955356", + "1955408", + "1955475", + "1955495", + "1955508", + "1955551", + "1955678", + "1955716", + "1955730", + "1955752", + "1955761", + "1955843", + "1955898", + "1955900", + "1955981", + "1955998", + "1956214", + "1956376", + "1956415", + "1956434", + "1956504", + "1956522", + "1956545", + "1956709", + "1956715", + "1956824", + "1956900", + "1956949", + "1957057", + "1957136", + "1957172", + "1957193", + "1957281", + "1957327", + "1957367", + "1957436", + "1957459", + "1957508", + "1957545", + "1957620", + "1957829", + "1957999", + "1958023", + "1958047", + "1958056", + "1958067", + "1958104", + "1958143", + "1958238", + "1958411", + "1958489", + "1958507", + "1959339", + "1959374", + "1959381", + "1959409", + "1959498", + "1959541", + "1959635", + "1959643", + "1959662", + "1959668", + "1959781", + "1959797", + "1959834", + "1959852", + "1959888", + "1960003", + "1960016", + "1960087", + "1960098", + "1960125", + "1960162", + "1960170", + "1960225", + "1960422", + "1960500", + "1960519", + "1960570", + "1960592", + "1960628", + "1960671", + "1960844", + "1960939", + "1960966", + "1961048", + "1961066", + "1961117", + "1961145", + "1961158", + "1961179", + "1961188", + "1961229", + "1961264", + "1961334", + "1961371", + "1961643", + "1961716", + "1961719", + "1962047", + "1962165", + "1962369", + "1962577", + "1962632", + "1962655", + "1962676", + "1962688", + "1962704", + "1962828", + "1962830", + "1962840", + "1962857", + "1962893", + "1962932", + "1962956", + "1962995", + "1963049", + "1963058", + "1963165", + "1963199", + "1963296", + "1963299", + "1963418", + "1963424", + "1963445", + "1963584", + "1963618", + "1963627", + "1963630", + "1963706", + "1963753", + "1963777", + "1963835", + "1963873", + "1963933", + "1964020", + "1964040", + "1964064", + "1964095", + "1964131", + "1964175", + "1964246", + "1964299", + "1964392", + "1964549", + "1964562", + "1964577", + "1964699", + "1964714", + "1964733", + "1964835", + "1964936", + "1965018", + "1965123", + "1965633", + "1965641", + "1965663", + "1965758", + "1965881", + "1965888", + "1965967", + "1966069", + "1966159", + "1966180", + "1966193", + "1966215", + "1966235", + "1966280", + "1966346", + "1966360", + "1966883", + "1966927", + "1966929", + "1966975", + "1966982", + "1967123", + "1967196", + "1967207", + "1967220", + "1967234", + "1967242", + "1967263", + "1967337", + "1967427", + "1967444", + "1967447", + "1967583", + "1967604", + "1967660", + "1967699", + "1967715", + "1967722", + "1968101", + "1968135", + "1968166", + "1968199", + "1968257", + "1968271", + "1968306", + "1968362", + "1968582", + "1968643", + "1968665", + "1968683", + "1968722", + "1968827", + "1968854", + "1968925", + "1968975", + "1969122", + "1969566", + "1969571", + "1969918", + "1970019", + "1970091", + "1970117", + "1970120", + "1970142", + "1970157", + "1970163", + "1970179", + "1970226", + "1970264", + "1970279", + "1970314", + "1970403", + "1970435", + "1970574", + "1971819", + "1971994", + "1972072", + "1972076", + "1972097", + "1972114", + "1972404", + "1972425", + "1972461", + "1972472", + "1972604", + "1972607", + "1972689", + "1972702", + "1972707", + "1972791", + "1972822", + "1972901", + "1972997", + "1973136", + "1973159", + "1973295", + "1973321", + "1973331", + "1973392", + "1973405", + "1973483", + "1973488", + "1973578", + "1973718", + "1973722", + "1973909", + "1975155", + "1975197", + "1975208", + "1975278", + "1975285", + "1975292", + "1975336", + "1975361", + "1975464", + "1975542", + "1975570", + "1975577", + "1975703", + "1975714", + "1975729", + "1975783", + "1975804", + "1975885", + "1976058", + "1976118", + "1976141", + "1976155", + "1976211", + "1976245", + "1976250", + "1976296", + "1976321", + "1976338", + "1976460", + "1976496", + "1976515", + "1976638", + "1976884", + "1976925", + "1976930", + "1976949", + "1977104", + "1977179", + "1977323", + "1977351", + "1977402", + "1977419", + "1977757", + "1977775", + "1977811", + "1977864", + "1977960", + "1977963", + "1978014", + "1978019", + "1978075", + "1978112", + "1978273", + "1978364", + "1978451", + "1978455", + "1978481", + "1978495", + "1978506", + "1978607", + "1978643", + "1978697", + "1978732", + "1978736", + "1978749", + "1978784", + "1978814", + "1978835", + "1978893", + "1978948", + "1978974", + "1978994", + "1979019", + "1979040", + "1979106", + "1979213", + "1979243", + "1979517", + "1979554", + "1979719", + "1979727", + "1980021", + "1980033", + "1980239", + "1980263", + "1980288", + "1980342", + "1980490", + "1980504", + "1980511", + "1980556", + "1980650", + "1980718", + "1981051", + "1981142", + "1981690", + "1981744", + "1981855", + "1981933", + "1981941", + "1981987", + "1981996", + "1982017", + "1982147", + "1982199", + "1982367", + "1984142", + "1984231", + "1984651", + "1984667", + "1984731", + "1984741", + "1984909", + "1984922", + "1985058", + "1985146", + "1985258", + "1985404", + "1985486", + "1985489", + "1985492", + "1985507", + "1985570", + "1985578", + "1985716", + "1985728", + "1985787", + "1985928", + "1985934", + "1985969", + "1986081", + "1986645", + "1986772", + "1986805", + "1986845", + "1986868", + "1986905", + "1986930", + "1986939", + "1986953", + "1986997", + "1987067", + "1987141", + "1987202", + "1987269", + "1987300", + "1987326", + "1987346", + "1987509", + "1987555", + "1987626", + "1987632", + "1987645", + "1987660", + "1987711", + "1987746", + "1987792", + "1987820", + "1987849", + "1987861", + "1987995", + "1988224", + "1988251", + "1988282", + "1988304", + "1988350", + "1988388", + "1988399", + "1988485", + "1988488", + "1988533", + "1988760", + "1988779", + "1988815", + "1988876", + "1988887", + "1988893", + "1989045", + "1989161", + "1989580", + "1989902", + "1989927", + "1989996", + "1990136", + "1990163", + "1990193", + "1990247", + "1990257", + "1990356", + "1990367", + "1990531", + "1990591", + "1990677", + "1990989", + "1991004", + "1991120", + "1991135", + "1991234", + "1991279", + "1991309", + "1991325", + "1991357", + "1991401", + "1991426", + "1991531", + "1991777", + "1991817", + "1991843", + "1991934", + "1991946", + "1992166", + "1992168", + "1992205", + "1992267", + "1992537", + "1992572", + "1992586", + "1992729", + "1992877", + "1992906", + "1992944", + "1992973", + "1992975", + "1993011", + "1993034", + "1993044", + "1993403", + "1993451", + "1993564", + "1993634", + "1994549", + "2048233", + "2080450", + "2278098", + "3231212", + "3255365", + "3255832", + "3255940", + "3255943", + "3255956", + "3256116", + "3256119", + "3256169", + "3256188", + "3256294", + "3256322", + "3256356", + "3256453", + "3256512", + "3256568", + "3256584", + "3256657", + "3256934", + "3256950", + "3257150", + "3257152", + "3257220", + "3257225", + "3257328", + "3257351", + "3257405", + "3257500", + "3257514", + "3257524", + "3257628", + "3257649", + "3257662", + "3257694", + "3257794", + "3257798", + "3257836", + "3257894", + "3258063", + "3258105", + "3258127", + "3258133", + "3258147", + "3261008", + "3262002", + "4300267", + "4300486", + "4301067", + "4301098", + "4301121", + "4301281", + "4301305", + "4301308", + "4301340", + "4302220", + "4302229", + "4302289", + "4404325", + "4404424", + "4404729", + "4404732", + "4404934", + "4405001", + "4405135", + "4405245", + "4405258", + "4405430", + "4405493", + "4405533", + "4405983", + "4406051", + "4406069", + "4406074", + "4406145", + "4406268", + "4406291", + "4406298", + "4406360", + "4406481", + "4406516", + "4406551", + "4406622", + "4406889", + "4406931", + "4407165", + "4407218", + "4407310", + "4407354", + "4407363", + "4407476", + "4407554", + "4407697", + "4407786", + "4408085", + "4408190", + "4408204", + "4408275", + "4523515", + "4524069", + "4524400", + "4524792", + "4524913", + "4525072", + "4525111", + "4525607", + "4525713", + "4527338", + "4529834", + "4531185", + "4532562", + "4533122", + "4533124", + "4533660", + "4534405", + "4534456", + "4534532", + "4534661", + "4571921", + "4572640", + "4573369", + "4573720", + "4574082", + "4575600", + "4575996", + "4576037", + "4576177", + "4684087", + "4684088", + "4684145", + "4684219", + "4684253", + "4684258", + "4684781", + "4684892", + "4684924", + "4684951", + "4685556", + "4685628", + "4685777", + "4685945", + "4685979", + "4686308", + "4686350", + "4686384", + "4686517", + "4686655", + "4686699", + "4686843", + "4686955", + "4687068", + "4687117", + "4687205", + "4687250", + "4687253", + "4687264", + "4687385", + "4687388", + "4687398", + "4687438", + "4687494", + "4687545", + "4687701", + "4687726", + "4687791", + "4687851", + "4687877", + "4687937", + "4687943", + "4687984", + "4688073", + "4688136", + "4688148", + "4688298", + "4688408", + "4688500", + "4688533", + "4688624", + "4688641", + "4688690", + "4688714", + "4688717", + "4688727", + "4688768", + "4688975", + "4689025", + "4689117", + "4689138", + "4689300", + "4689316", + "4689527", + "4689528", + "4689548", + "4689585", + "4689628", + "4689644", + "4689708", + "4689790", + "4695593", + "4695668", + "4695734", + "4695875", + "4695897", + "4695929", + "4696040", + "4696100", + "4696103", + "4696201", + "4696228", + "4702183", + "4702229", + "4702368", + "4702379", + "4702515", + "4702588", + "4702630", + "4702642", + "4702651", + "4702781", + "4702805", + "4702831", + "4702862", + "4702877", + "4702889", + "4702891", + "4702939", + "4702953", + "4703000", + "4703014", + "4703048", + "4703184", + "4703248", + "4703308", + "4703444", + "4703460", + "4703509", + "4703670", + "4703719", + "4704034", + "4704072", + "4704098", + "4704315", + "4704380", + "4704499", + "4704582", + "4704716", + "4704719", + "4704752", + "4704946", + "4704959", + "4705145", + "4705151", + "4705537", + "4705623", + "4705630", + "4705637", + "4705641", + "4705666", + "4705796", + "4705876", + "4705882", + "4705945", + "4705981", + "4706535", + "4706578", + "4706585", + "4706694", + "4706723", + "4706738", + "4706892", + "4706983", + "4707050", + "4707100", + "4707419", + "4707431", + "4707529", + "4707641", + "4707698", + "4707710", + "4707748", + "4707821", + "4707834", + "4708040", + "4708154", + "4708197", + "4708288", + "4708365", + "4708407", + "4708493", + "4708566", + "4708587", + "4708592", + "4708606", + "4708611", + "4708626", + "4708638", + "4708646", + "4708648", + "4708684", + "4708698", + "4708709", + "4708713", + "4708745", + "4708885", + "4708919", + "4709100", + "4709103", + "4709187", + "4709268", + "4709333", + "4709385", + "4709474", + "5102272", + "5104758", + "5105328", + "5110374", + "5110641", + "5114254", + "5115213", + "5115807", + "5116471", + "5118829", + "5119806", + "5119880", + "5123346", + "5123443", + "5123811", + "5124670", + "5130576", + "5131088", + "5131972", + "5133087", + "5135400", + "5141261", + "5142228", + "5142691", + "5144176", + "5146397", + "5430630", + "6007566", + "6116898", + "6132796", + "6133263", + "6133753", + "6757561", + "7236046", + "7236053", + "7236059", + "7236069", + "7236091", + "7236092", + "7236098", + "7354470", + "7362601", + "7384515", + "7396883", + "7494486", + "7510496", + "7514692", + "7535296", + "7543161", + "7566147", + "7568341", + "7588628", + "7641205", + "7659598", + "7704040", + "7704258", + "7714017", + "7721234", + "7729420", + "7733971", + "7739898", + "7742506", + "7744105", + "7769987", + "7772509", + "7777102", + "7786896", + "7841677", + "7842819", + "7852351", + "7876391", + "7881632", + "7963991", + "7969922", + "7973780", + "8057237", + "8095945", + "8107362", + "8109351", + "8178582", + "8194136", + "8203799", + "8213918", + "8249110", + "8296807", + "8314432", + "8317469", + "8319926", + "8331787", + "8338704", + "8363558", + "8379138", + "8389051", + "8396912", + "8406574", + "8407958", + "8494978", + "8636720", + "8659047", + "8679775", + "8697176", + "8710303", + "8728355", + "8744407", + "8757056", + "8766106", + "8782295", + "8786726", + "8787356", + "8793999", + "8806645", + "8810582", + "8814442", + "8828194", + "8832257", + "8834745", + "8843351", + "8844327", + "8875114", + "8875134", + "8875890", + "8895291", + "8896182", + "8903953", + "8915575", + "8921795", + "8928010", + "8930863", + "8931287", + "8934672", + "8935025", + "8936210", + "8946062", + "8952756", + "8952983", + "8955545", + "8968124", + "8970409", + "8974541", + "8978064", + "8978428", + "8981907", + "8982056", + "8983556", + "8983629", + "8997710", + "9000709", + "9002818", + "9005880", + "9020610", + "9021546", + "9026388", + "9026655", + "9029051", + "9036849", + "9040198", + "9042695", + "9044302", + "9044770", + "9046185", + "9046977", + "9053842", + "9055772", + "9059321", + "9059730", + "9060128", + "9061491", + "9065472", + "9069808", + "9073940", + "9077304", + "9077410", + "9078027", + "9078901", + "9080469", + "9090334", + "9092234", + "9095083", + "9095230", + "9099004", + "9103399", + "9106541", + "9108102", + "9111044", + "9111269", + "9112567", + "9118632", + "9119424", + "9121178", + "9123839", + "9128871", + "9130093", + "9131390", + "9136607", + "9137617", + "9141856", + "9146182", + "9151414", + "9154466", + "9155713", + "9167802", + "9168716", + "9175687", + "9176590", + "9177092", + "9179511", + "9180373", + "9181278", + "9182266", + "9183339", + "9183600", + "9185801", + "9186977", + "9188678", + "9189318", + "9189502", + "9197007", + "9197112", + "9199756", + "9203611", + "9203720", + "9205220", + "9206138", + "9209436", + "9210500", + "9211050", + "9211520", + "9211630", + "9212903", + "9218657", + "9220793", + "9230208", + "9230236", + "9260167", + "9262994", + "9329912", + "9334318", + "9340110", + "9345724", + "9357810", + "9457004", + "9496267", + "9514086", + "9529506", + "9550689", + "9558288", + "9585354", + "9601813", + "9605252", + "9607541", + "9675443", + "9759554", + "9762611", + "9878063", + "9905626" + ], + "optimized/family": [ + "10820875", + "1933999", + "3256826", + "3527", + "3528", + "3529", + "3530", + "3531", + "3551", + "3552", + "3553", + "3554", + "3555", + "3556", + "3558", + "3563", + "4300662", + "4300664", + "4300668", + "4525436", + "4525465", + "4527533", + "4528997", + "4532185", + "4534947", + "4538", + "4542", + "4547", + "4554", + "4705755", + "4864", + "4865", + "4866", + "4867", + "4868", + "4870", + "4871", + "5320", + "5336", + "5338", + "5339", + "5340", + "5343", + "5345", + "5473", + "5474", + "5481", + "5487", + "5734720", + "6165", + "6166", + "6929", + "6946", + "6947", + "6948", + "6949", + "6950", + "6951", + "6953", + "6954", + "6956", + "7014", + "7015", + "7016", + "7017", + "7294", + "7297", + "8832", + "8833", + "8834", + "8836", + "8838", + "8839", + "8840", + "8841", + "8855", + "8856", + "8860", + "8861", + "8863", + "8864", + "8865", + "8866", + "8868", + "8870", + "8871", + "8872", + "8873", + "8874", + "8875", + "9122734", + "9407", + "9408", + "9409", + "9410", + "9412", + "9414744", + "9417", + "9541689", + "9689", + "9717" + ] + } +} diff --git a/docs/assets/mambo-indomain-tail.csv b/docs/assets/mambo-indomain-tail.csv new file mode 100644 index 0000000..00f313f --- /dev/null +++ b/docs/assets/mambo-indomain-tail.csv @@ -0,0 +1,211 @@ +model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 +v2,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.8775332728247491,0.8448274823412316,0.8775332728247491,0.850372188202817 +torch,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.9295522392148737,0.9084034020798256,0.9295522392148737,0.9144754993404935 +onnx,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.929545760642923,0.9083939953917602,0.929545760642923,0.9144694069143972 +torch-tta,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.9031914801618097,0.8957682319690011,0.9031914801618097,0.8931233034667367 +onnx-tta,zero,species,-1,per_model,12632,568939,568939,568939,1.0,0.903254258165182,0.8958363209627044,0.903254258165182,0.8931813750062196 +v2,zero,species,5,per_model,10916,560528,558639,568939,1.0,0.8898344938001994,0.859133756872216,0.8898344938001994,0.8671738560913168 +v2,zero,species,5,common,10732,559258,556775,568939,1.0,0.892042637746108,0.8624807091335043,0.892042637746108,0.870130409847651 +torch,zero,species,5,per_model,11024,561352,560419,568939,1.0,0.9348916502566212,0.9176309501354614,0.9348916502566212,0.923323778252479 +torch,zero,species,5,common,10732,559258,558238,568939,1.0,0.9371951539678676,0.920053780228017,0.9371951539678676,0.9257802069792285 +onnx,zero,species,5,per_model,11023,561346,560412,568939,1.0,0.9349063992486292,0.9176431065400046,0.9349063992486292,0.9233383284058694 +onnx,zero,species,5,common,10732,559258,558236,568939,1.0,0.9372070517025534,0.9200666309904021,0.9372070517025534,0.9257949069356713 +torch-tta,zero,species,5,per_model,10906,560439,560252,568939,1.0,0.9145122082372219,0.9040744836279291,0.9145122082372219,0.9054421933610873 +torch-tta,zero,species,5,common,10732,559258,558982,568939,1.0,0.9160969130174343,0.9061800058338343,0.9160969130174343,0.9073461234817897 +onnx-tta,zero,species,5,per_model,10907,560445,560258,568939,1.0,0.9145713598093338,0.9041187052013864,0.9145713598093338,0.905496546764529 +onnx-tta,zero,species,5,common,10732,559258,558984,568939,1.0,0.9161801232055252,0.9062393050497608,0.9161801232055252,0.9074189531592058 +v2,zero,species,10,per_model,8357,539923,534214,568939,1.0,0.8951105023339889,0.8803886049108982,0.8951105023339889,0.8829762240880302 +v2,zero,species,10,common,8220,538215,531734,568939,1.0,0.8971896508002563,0.8841533826265109,0.8971896508002563,0.8861137420840434 +torch,zero,species,10,per_model,8418,540767,538164,568939,1.0,0.9380158443604093,0.9296376645105903,0.9380158443604093,0.9320805568483266 +torch,zero,species,10,common,8220,538215,535520,568939,1.0,0.9402949033689514,0.9320804614980398,0.9402949033689514,0.9344958099860401 +onnx,zero,species,10,per_model,8418,540767,538167,568939,1.0,0.9380428919356814,0.9296503994930084,0.9380428919356814,0.9321018436377108 +onnx,zero,species,10,common,8220,538215,535522,568939,1.0,0.9403226024551605,0.9320974182871349,0.9403226024551605,0.9345190051373535 +torch-tta,zero,species,10,per_model,8319,539488,538099,568939,1.0,0.9203211708443862,0.9166550444469626,0.9203211708443862,0.9159746062189662 +torch-tta,zero,species,10,common,8220,538215,536830,568939,1.0,0.9211332254340128,0.9175233686268738,0.9211332254340128,0.9168731065085346 +onnx-tta,zero,species,10,per_model,8319,539483,538098,568939,1.0,0.92037212552277,0.9167108005058885,0.92037212552277,0.9160385012807551 +onnx-tta,zero,species,10,common,8220,538215,536830,568939,1.0,0.9211467767684987,0.9175744487497752,0.9211467767684987,0.9169124697458879 +v2,zero,species,20,per_model,5848,501474,491150,568939,1.0,0.9017298315234328,0.9059592212945008,0.9017298315234328,0.9009425455604116 +v2,zero,species,20,common,5731,498591,487865,568939,1.0,0.9038010699656939,0.90938248738554,0.9038010699656939,0.9038380155005598 +torch,zero,species,20,per_model,5902,502780,498324,568939,1.0,0.9426777967218563,0.9440419050324644,0.9426777967218563,0.9424333577615158 +torch,zero,species,20,common,5731,498591,494107,568939,1.0,0.9443702914364024,0.9458085393432879,0.9443702914364024,0.944187060216263 +onnx,zero,species,20,per_model,5901,502758,498305,568939,1.0,0.9427320388202419,0.9440874403033691,0.9427320388202419,0.9424850295533255 +onnx,zero,species,20,common,5731,498591,494107,568939,1.0,0.9444129968792908,0.945849455959867,0.9444129968792908,0.9442310591069565 +torch-tta,zero,species,20,per_model,5837,500984,498762,568939,1.0,0.927167942433883,0.92839515030944,0.927167942433883,0.926323530505297 +torch-tta,zero,species,20,common,5731,498591,496322,568939,1.0,0.9279814852456145,0.9294383563309784,0.9279814852456145,0.9272619166439888 +onnx-tta,zero,species,20,per_model,5836,500962,498747,568939,1.0,0.9272175462279626,0.9284436495884548,0.9272175462279626,0.9263759507200151 +onnx-tta,zero,species,20,common,5731,498591,496329,568939,1.0,0.9279913018908342,0.9294415780050014,0.9279913018908342,0.9272719293868689 +v2,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9449328592412035,0.9072671198812579,0.9449328592412035,0.9213682143792531 +torch,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9700441575339722,0.9534379966946678,0.9700441575339722,0.9600051179818128 +onnx,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9700350462704753,0.9534572983167396,0.9700350462704753,0.9600143434479116 +torch-tta,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9525452203980439,0.9370642917998594,0.9525452203980439,0.9422165624061323 +onnx-tta,zero,genus,-1,per_model,4476,568939,568939,568939,1.0,0.9524334553173022,0.9371069603411143,0.9524334553173022,0.9421777591016375 +v2,zero,genus,5,per_model,4096,567151,566855,568939,1.0,0.9472634049157832,0.9131916817978536,0.9472634049157832,0.9265881804644791 +v2,zero,genus,5,common,4077,567027,566720,568939,1.0,0.9479651709033954,0.913798169374068,0.9479651709033954,0.9272747658088364 +torch,zero,genus,5,per_model,4107,567216,567078,568939,1.0,0.971127350882503,0.9577638403342953,0.971127350882503,0.9633165216188838 +torch,zero,genus,5,common,4077,567027,566882,568939,1.0,0.9714171324802696,0.9581319473622291,0.9714171324802696,0.9636531390879689 +onnx,zero,genus,5,per_model,4107,567216,567079,568939,1.0,0.9711174210029285,0.9577442950198877,0.9711174210029285,0.9633044408045054 +onnx,zero,genus,5,common,4077,567027,566883,568939,1.0,0.9714071295331486,0.9581122582265235,0.9714071295331486,0.9636409693787092 +torch-tta,zero,genus,5,per_model,4098,567160,567039,568939,1.0,0.955211201010184,0.9413856953684685,0.955211201010184,0.9464056106523142 +torch-tta,zero,genus,5,common,4077,567027,566891,568939,1.0,0.9554622976340493,0.9419053142860855,0.9554622976340493,0.946826548337692 +onnx-tta,zero,genus,5,per_model,4097,567154,567032,568939,1.0,0.9551188449853553,0.9414520982548996,0.9551188449853553,0.9463993752658038 +onnx-tta,zero,genus,5,common,4077,567027,566890,568939,1.0,0.9553804742750274,0.9419864197387074,0.9553804742750274,0.9468334279086545 +v2,zero,genus,10,per_model,3458,562081,561074,568939,1.0,0.9491963374320637,0.9236764435595063,0.9491963374320637,0.9340308144742723 +v2,zero,genus,10,common,3431,561762,560668,568939,1.0,0.9501714517217695,0.9249819852768866,0.9501714517217695,0.9352580486950688 +torch,zero,genus,10,per_model,3465,562162,561762,568939,1.0,0.9723113450903962,0.962961804837905,0.9723113450903962,0.966981073692487 +torch,zero,genus,10,common,3431,561762,561337,568939,1.0,0.9726570872678164,0.963524847606718,0.9726570872678164,0.9674634884761172 +onnx,zero,genus,10,per_model,3465,562162,561763,568939,1.0,0.9722995753889785,0.9629677896848711,0.9722995753889785,0.9669757734240944 +onnx,zero,genus,10,common,3431,561762,561338,568939,1.0,0.9726452009328085,0.9635308917614068,0.9726452009328085,0.9674581356839339 +torch-tta,zero,genus,10,per_model,3452,562005,561552,568939,1.0,0.9570998065013813,0.9482638561509876,0.9570998065013813,0.9515461269141664 +torch-tta,zero,genus,10,common,3431,561762,561309,568939,1.0,0.9573515304014386,0.9484564997611858,0.9573515304014386,0.951766676155064 +onnx-tta,zero,genus,10,per_model,3452,562005,561556,568939,1.0,0.9570393795504154,0.9482498429778413,0.9570393795504154,0.9515066189636512 +onnx-tta,zero,genus,10,common,3431,561762,561313,568939,1.0,0.9572907335973774,0.9484424008181076,0.9572907335973774,0.9517269263896374 +v2,zero,genus,20,per_model,2775,551765,549650,568939,1.0,0.9514523669537318,0.9362851124691781,0.9514523669537318,0.9424419495154486 +v2,zero,genus,20,common,2754,551296,549021,568939,1.0,0.9524285882296903,0.9379631196001276,0.9524285882296903,0.9438613537384478 +torch,zero,genus,20,per_model,2779,551854,551141,568939,1.0,0.9735092290300909,0.9676010415739535,0.9735092290300909,0.9701842471206528 +torch,zero,genus,20,common,2754,551296,550567,568939,1.0,0.9741215463330197,0.96827917122569,0.9741215463330197,0.9708441875318052 +onnx,zero,genus,20,per_model,2779,551854,551145,568939,1.0,0.9735180277959813,0.9675625563261884,0.9735180277959813,0.9701656109250639 +onnx,zero,genus,20,common,2754,551296,550570,568939,1.0,0.9741304249715125,0.9682452187473357,0.9741304249715125,0.9708282639734884 +torch-tta,zero,genus,20,per_model,2766,551560,550843,568939,1.0,0.9597015608526598,0.9537068881488286,0.9597015608526598,0.9559567736922241 +torch-tta,zero,genus,20,common,2754,551296,550569,568939,1.0,0.9599314581499482,0.9540423387101321,0.9599314581499482,0.9562438389126422 +onnx-tta,zero,genus,20,per_model,2767,551582,550868,568939,1.0,0.9596078837704425,0.9536848297971696,0.9596078837704425,0.955899607636505 +onnx-tta,zero,genus,20,common,2754,551296,550575,568939,1.0,0.9598722209352499,0.954013741345455,0.9598722209352499,0.9561988978480757 +v2,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9705788744761545,0.9509880328905062,0.9705788744761545,0.9597726462561909 +torch,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9847079901805926,0.9765407345826963,0.9847079901805926,0.980351974922878 +onnx,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9845608356725373,0.9760061052351259,0.9845608356725373,0.9799783228875365 +torch-tta,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9681161624170399,0.9623314442357818,0.9681161624170399,0.9645304134232945 +onnx-tta,zero,family,-1,per_model,104,568939,568939,568939,1.0,0.9681041671465577,0.9623128857780121,0.9681041671465577,0.9645148542838584 +v2,zero,family,5,per_model,101,568926,568924,568939,1.0,0.9697049796586146,0.9523610862012567,0.9697049796586146,0.9602279393793121 +v2,zero,family,5,common,101,568926,568924,568939,1.0,0.9697049796586146,0.9523610862012567,0.9697049796586146,0.9602279393793121 +torch,zero,family,5,per_model,101,568926,568926,568939,1.0,0.9842537720671449,0.975843924718816,0.9842537720671449,0.9797683702176169 +torch,zero,family,5,common,101,568926,568926,568939,1.0,0.9842537720671449,0.975843924718816,0.9842537720671449,0.9797683702176169 +onnx,zero,family,5,per_model,101,568926,568926,568939,1.0,0.9841022466331076,0.9752934152916147,0.9841022466331076,0.9793836196069683 +onnx,zero,family,5,common,101,568926,568926,568939,1.0,0.9841022466331076,0.9752934152916147,0.9841022466331076,0.9793836196069683 +torch-tta,zero,family,5,per_model,101,568926,568925,568939,1.0,0.9671691177363579,0.9628627412592868,0.9671691177363579,0.9643769513557596 +torch-tta,zero,family,5,common,101,568926,568925,568939,1.0,0.9671691177363579,0.9628627412592868,0.9671691177363579,0.9643769513557596 +onnx-tta,zero,family,5,per_model,101,568926,568925,568939,1.0,0.9671567661707129,0.9628436315601973,0.9671567661707129,0.9643609300636667 +onnx-tta,zero,family,5,common,101,568926,568925,568939,1.0,0.9671567661707129,0.9628436315601973,0.9671567661707129,0.9643609300636667 +v2,zero,family,10,per_model,100,568917,568916,568939,1.0,0.9705131405663119,0.9518846970632694,0.9705131405663119,0.9604184540672229 +v2,zero,family,10,common,99,568905,568905,568939,1.0,0.9718987951848268,0.9523169575478387,0.9718987951848268,0.9613361635285959 +torch,zero,family,10,per_model,99,568905,568908,568939,1.0,0.9867415025915093,0.9753559231979841,0.9867415025915093,0.9808721011343452 +torch,zero,family,10,common,99,568905,568908,568939,1.0,0.9867415025915093,0.9753559231979841,0.9867415025915093,0.9808721011343452 +onnx,zero,family,10,per_model,99,568905,568908,568939,1.0,0.9865869160375925,0.974794292368213,0.9865869160375925,0.9804795777840875 +onnx,zero,family,10,common,99,568905,568908,568939,1.0,0.9865869160375925,0.974794292368213,0.9865869160375925,0.9804795777840875 +torch-tta,zero,family,10,per_model,99,568905,568908,568939,1.0,0.970153454570538,0.9621124936079593,0.970153454570538,0.9656944723151579 +torch-tta,zero,family,10,common,99,568905,568908,568939,1.0,0.970153454570538,0.9621124936079593,0.970153454570538,0.9656944723151579 +onnx-tta,zero,family,10,per_model,99,568905,568908,568939,1.0,0.970140853478314,0.9620929978543427,0.970140853478314,0.9656781273605988 +onnx-tta,zero,family,10,common,99,568905,568908,568939,1.0,0.970140853478314,0.9620929978543427,0.970140853478314,0.9656781273605988 +v2,zero,family,20,per_model,95,568844,568840,568939,1.0,0.9741493045458317,0.9558568315711183,0.9741493045458317,0.9643318929324275 +v2,zero,family,20,common,95,568844,568840,568939,1.0,0.9741493045458317,0.9558568315711183,0.9741493045458317,0.9643318929324275 +torch,zero,family,20,per_model,95,568844,568844,568939,1.0,0.9861832500690465,0.9760726638238643,0.9861832500690465,0.9809866628450878 +torch,zero,family,20,common,95,568844,568844,568939,1.0,0.9861832500690465,0.9760726638238643,0.9861832500690465,0.9809866628450878 +onnx,zero,family,20,per_model,95,568844,568843,568939,1.0,0.9860221546075963,0.975979844598429,0.9860221546075963,0.9808606727885303 +onnx,zero,family,20,common,95,568844,568843,568939,1.0,0.9860221546075963,0.975979844598429,0.9860221546075963,0.9808606727885303 +torch-tta,zero,family,20,per_model,95,568844,568841,568939,1.0,0.9704728907663592,0.964964176423538,0.9704728907663592,0.9674882117511958 +torch-tta,zero,family,20,common,95,568844,568841,568939,1.0,0.9704728907663592,0.964964176423538,0.9704728907663592,0.9674882117511958 +onnx-tta,zero,family,20,per_model,95,568844,568841,568939,1.0,0.9704597591018311,0.964943859796085,0.9704597591018311,0.9674711785880233 +onnx-tta,zero,family,20,common,95,568844,568841,568939,1.0,0.9704597591018311,0.964943859796085,0.9704597591018311,0.9674711785880233 +v2,optimized,species,-1,per_model,12632,568939,546194,568939,0.9600220761803989,0.9037265793690537,0.8744630133499443,0.8617359559506923,0.8577212237023112 +torch,optimized,species,-1,per_model,12632,568939,554475,568939,0.9745772393877024,0.9459195194605763,0.9308209935558278,0.9187824413723291,0.9207369197765051 +onnx,optimized,species,-1,per_model,12632,568939,554457,568939,0.974545601549551,0.9459922827275581,0.9308488990338033,0.9188180504133524,0.920776413807909 +torch-tta,optimized,species,-1,per_model,12632,568939,551819,568939,0.9699089006027009,0.924348693798147,0.9180616415933389,0.8923771863774734,0.8990523856912974 +onnx-tta,optimized,species,-1,per_model,12632,568939,551892,568939,0.9700372096129813,0.9243532804255711,0.9180792238778338,0.892479370530307,0.8991069244273215 +v2,optimized,species,5,per_model,10804,559672,536383,568939,0.9600220761803989,0.9158611562057326,0.8878390711410652,0.8776764147426164,0.8761661941794936 +v2,optimized,species,5,common,10602,558259,534450,568939,0.9600220761803989,0.9177121083679098,0.891762023479617,0.8801101949128962,0.8795222528459896 +torch,optimized,species,5,per_model,10937,560779,546176,568939,0.9745772393877024,0.9513947315854316,0.9384133494807109,0.9266526292978261,0.9300604171769342 +torch,optimized,species,5,common,10602,558259,543718,568939,0.9745772393877024,0.9532783476173154,0.9407074772137323,0.9290829607634777,0.9325396241152072 +onnx,optimized,species,5,per_model,10936,560772,546150,568939,0.974545601549551,0.9514303559397785,0.9384500205116991,0.9267201467445534,0.9301162917573901 +onnx,optimized,species,5,common,10602,558259,543696,568939,0.974545601549551,0.9532904839498968,0.9407443752022229,0.9291231422275786,0.932580761385352 +torch-tta,optimized,species,5,per_model,10825,559907,543290,568939,0.9699089006027009,0.9345626371964706,0.9252272362524564,0.9057840551177695,0.9120214401052257 +torch-tta,optimized,species,5,common,10602,558259,541677,568939,0.9699089006027009,0.9363450738235962,0.9279542708375016,0.9080426198963741,0.9146258206280785 +onnx-tta,optimized,species,5,per_model,10824,559900,543357,568939,0.9700372096129813,0.9346673465396608,0.925332388146371,0.9059777519279791,0.912173055325448 +onnx-tta,optimized,species,5,common,10602,558259,541751,568939,0.9700372096129813,0.9363638260678422,0.9279653724002486,0.9081549374042587,0.9146897500425569 +v2,optimized,species,10,per_model,8253,538583,513453,568939,0.9600220761803989,0.919702396828417,0.9059511438670541,0.8834063629447468,0.8899652418620435 +v2,optimized,species,10,common,8098,536616,510817,568939,0.9600220761803989,0.9215043345441031,0.9099653600413793,0.8855370730719558,0.8932241894066936 +torch,optimized,species,10,per_model,8346,539898,524917,568939,0.9745772393877024,0.9538984340441033,0.9473939736393223,0.9301602417862408,0.937148187830096 +torch,optimized,species,10,common,8098,536616,521708,568939,0.9745772393877024,0.9557823065433836,0.9496750937304543,0.9325411959209317,0.939535293611614 +onnx,optimized,species,10,per_model,8346,539898,524893,568939,0.974545601549551,0.9539206501272308,0.9474282931419843,0.9301672088051162,0.9371699294742781 +onnx,optimized,species,10,common,8098,536616,521686,568939,0.974545601549551,0.955801772788383,0.9496911211579956,0.9325483763036845,0.9395489940596635 +torch-tta,optimized,species,10,per_model,8249,538601,522010,568939,0.9699089006027009,0.9393834246589234,0.9350057267421275,0.9114834461988911,0.9208747951169612 +torch-tta,optimized,species,10,common,8098,536616,520083,568939,0.9699089006027009,0.9407200968998959,0.9367295913481962,0.9130456217866014,0.922581735577435 +onnx-tta,optimized,species,10,per_model,8250,538612,522092,568939,0.9700372096129813,0.93934641972003,0.9349791393850145,0.9115472154224278,0.9208988400212919 +onnx-tta,optimized,species,10,common,8098,536616,520154,568939,0.9700372096129813,0.9406749119997709,0.9366904984361594,0.9130996572941806,0.922594828425376 +v2,optimized,species,20,per_model,5743,498972,472082,568939,0.9600220761803989,0.9250972898319929,0.9288745734119677,0.8907524166746096,0.9064159828472291 +v2,optimized,species,20,common,5619,495885,468673,568939,0.9600220761803989,0.9264955543696868,0.9322684160108836,0.8924860724765344,0.9091256637933713 +torch,optimized,species,20,per_model,5839,501367,486352,568939,0.9745772393877024,0.9573531978360545,0.9579644649920425,0.9347857154368387,0.9453054680104727 +torch,optimized,species,20,common,5619,495885,481020,568939,0.9745772393877024,0.9590960455020283,0.960085603968183,0.9369176471418931,0.9474691370958213 +onnx,optimized,species,20,per_model,5839,501366,486333,568939,0.974545601549551,0.9573343733074557,0.9579445192550318,0.9347554839982136,0.945279034518881 +onnx,optimized,species,20,common,5619,495885,481001,568939,0.974545601549551,0.9590794950769043,0.9600785045004131,0.9368942906754668,0.9474527915410534 +torch-tta,optimized,species,20,per_model,5768,499433,483547,568939,0.9699089006027009,0.9453421202510482,0.9452047271577229,0.9179877458923795,0.9300978516335463 +torch-tta,optimized,species,20,common,5619,495885,480062,568939,0.9699089006027009,0.9467143599325811,0.9471899070701052,0.9195557591284796,0.931901907237806 +onnx-tta,optimized,species,20,per_model,5767,499411,483596,568939,0.9700372096129813,0.9453315110109051,0.9452038535954121,0.9181109692132279,0.9301645658053365 +onnx-tta,optimized,species,20,common,5619,495885,480131,568939,0.9700372096129813,0.9466355110164897,0.947119470617321,0.9196145270414563,0.9319011751009653 +v2,optimized,genus,-1,per_model,4476,568939,547692,568939,0.9626550473776626,0.9709681846201991,0.945956754906805,0.924476997515889,0.9315715620856552 +torch,optimized,genus,-1,per_model,4476,568939,557792,568939,0.9804073898959291,0.9843532446734725,0.9768370043872598,0.9598662398316677,0.9670807734237682 +onnx,optimized,genus,-1,per_model,4476,568939,557681,568939,0.9802122898939957,0.9843807286145065,0.9770218695519097,0.9596964890327477,0.9670747932811063 +torch-tta,optimized,genus,-1,per_model,4476,568939,553424,568939,0.9727299411711976,0.9715101613252839,0.9625019705071297,0.9403692157002803,0.9493424432950821 +onnx-tta,optimized,genus,-1,per_model,4476,568939,553316,568939,0.9725401141422895,0.9717039507950574,0.9627559769001354,0.9402188527993052,0.9493781942192143 +v2,optimized,genus,5,per_model,4062,566924,545706,568939,0.9626550473776626,0.9730233189102614,0.9504203032640921,0.9299499941848702,0.9376102329360426 +v2,optimized,genus,5,common,4042,566796,545570,568939,0.9626550473776626,0.9734046694197016,0.9512441119322542,0.9305841568761081,0.9383497485198514 +torch,optimized,genus,5,per_model,4091,567116,556011,568939,0.9804073898959291,0.9850364631575421,0.9789962410446256,0.9626984563003262,0.9700444306631667 +torch,optimized,genus,5,common,4042,566796,555695,568939,0.9804073898959291,0.9852486590471086,0.9794558453427681,0.9630513085239086,0.9704594874167481 +onnx,optimized,genus,5,per_model,4091,567116,555902,568939,0.9802122898939957,0.9850665335853271,0.9790844321495648,0.9625127304201095,0.9699928799169721 +onnx,optimized,genus,5,common,4042,566796,555586,568939,0.9802122898939957,0.9852790940100151,0.9795451055630318,0.9628633311424227,0.9704073117357285 +torch-tta,optimized,genus,5,per_model,4087,567091,551619,568939,0.9727299411711976,0.9739612141159694,0.9654057218177811,0.9441101844287167,0.9533108456199497 +torch-tta,optimized,genus,5,common,4042,566796,551321,568939,0.9727299411711976,0.9741322556482092,0.9663131588925964,0.944725691696706,0.9541105972556507 +onnx-tta,optimized,genus,5,per_model,4087,567091,551512,568939,0.9725401141422895,0.9741122788741553,0.9656716705858495,0.9440066795731344,0.9533858183708201 +onnx-tta,optimized,genus,5,common,4042,566796,551215,568939,0.9725401141422895,0.9743203454081207,0.9665903152380758,0.9446519597954779,0.9542041917775816 +v2,optimized,genus,10,per_model,3422,561652,540352,568939,0.9626550473776626,0.9734800560246962,0.9565101129613048,0.9320816173013914,0.9423840637091992 +v2,optimized,genus,10,common,3399,561375,540016,568939,0.9626550473776626,0.9739032617284332,0.9574089837386313,0.9326845149652051,0.943205268402783 +torch,optimized,genus,10,per_model,3450,561991,550937,568939,0.9804073898959291,0.9853176604244238,0.9808685545250592,0.9634766998535845,0.9716169229580529 +torch,optimized,genus,10,common,3399,561375,550339,568939,0.9804073898959291,0.9855862214845251,0.9812407816841605,0.9640623745508275,0.9721216914659299 +onnx,optimized,genus,10,per_model,3450,561991,550832,568939,0.9802122898939957,0.9853671204730292,0.9809384610579636,0.9632926985272173,0.9715536681027205 +onnx,optimized,genus,10,common,3399,561375,550234,568939,0.9802122898939957,0.9856364236521301,0.9813117371235606,0.9638756123925556,0.9720574875086198 +torch-tta,optimized,genus,10,per_model,3429,561730,546343,568939,0.9727299411711976,0.9749187044499045,0.9691224108929244,0.946350886524944,0.9567459154446961 +torch-tta,optimized,genus,10,common,3399,561375,546001,568939,0.9727299411711976,0.9750657062256015,0.969389941537953,0.9466740165053914,0.9570462433877086 +onnx-tta,optimized,genus,10,per_model,3429,561730,546244,568939,0.9725401141422895,0.9750748967756228,0.9692801960108036,0.9462848043513266,0.9567847024096895 +onnx-tta,optimized,genus,10,common,3399,561375,545902,568939,0.9725401141422895,0.9751938567065922,0.9695491192870581,0.9466073510822276,0.9570853726913163 +v2,optimized,genus,20,per_model,2744,551057,529652,568939,0.9626550473776626,0.9744155465355695,0.9644172200469284,0.9346448055336697,0.9481401135118747 +v2,optimized,genus,20,common,2718,550466,528977,568939,0.9626550473776626,0.9751246579562103,0.9660046083551682,0.9356240006265886,0.9494673272983457 +torch,optimized,genus,20,per_model,2765,551534,540646,568939,0.9804073898959291,0.9859898736016124,0.9831207620917415,0.9651332754412042,0.973745902522698 +torch,optimized,genus,20,common,2718,550466,539612,568939,0.9804073898959291,0.986426765336266,0.9837622659851191,0.9659565896782382,0.9744900650585153 +onnx,optimized,genus,20,per_model,2765,551534,540545,568939,0.9802122898939957,0.9860515868629824,0.9831907018461258,0.9649737261528443,0.9736958816120121 +onnx,optimized,genus,20,common,2718,550466,539512,568939,0.9802122898939957,0.9865090020445816,0.9838374142507886,0.9658089981468492,0.974448877687717 +torch-tta,optimized,genus,20,per_model,2746,551117,535951,568939,0.9727299411711976,0.9766830689435503,0.9727816384005233,0.9485632489700034,0.959941393384285 +torch-tta,optimized,genus,20,common,2718,550466,535325,568939,0.9727299411711976,0.977064542064375,0.973306888624378,0.9491793130959524,0.9605169357740369 +onnx-tta,optimized,genus,20,per_model,2745,551095,535834,568939,0.9725401141422895,0.9767764438699172,0.972898378196236,0.9484647219147074,0.9599463383428157 +onnx-tta,optimized,genus,20,common,2718,550466,535228,568939,0.9725401141422895,0.9771848509403817,0.9734489057083235,0.9490820082537109,0.9605342527571652 +v2,optimized,family,-1,per_model,104,568939,560532,568939,0.985223371925637,0.9886094792660989,0.9786092510915618,0.9509273853934727,0.9637305558575113 +torch,optimized,family,-1,per_model,104,568939,563145,568939,0.9898161314306103,0.9948948540363234,0.9928704939132356,0.9735711206973268,0.9828384466133122 +onnx,optimized,family,-1,per_model,104,568939,563126,568939,0.9897827359347838,0.994899624212835,0.9928702233945721,0.9735459402580976,0.9828257658861518 +torch-tta,optimized,family,-1,per_model,104,568939,555940,568939,0.9771522078816886,0.9884734442452687,0.9837783443784444,0.951186192254207,0.966613846478881 +onnx-tta,optimized,family,-1,per_model,104,568939,555880,568939,0.977046748421184,0.9884830018540828,0.9837869141498093,0.9509704435277845,0.9665038797027707 +v2,optimized,family,5,per_model,101,568926,560519,568939,0.985223371925637,0.9882711469670721,0.979624047328605,0.9519450305041699,0.9649677628014595 +v2,optimized,family,5,common,101,568926,560519,568939,0.985223371925637,0.9882711469670721,0.979624047328605,0.9519450305041699,0.9649677628014595 +torch,optimized,family,5,per_model,101,568926,563132,568939,0.9898161314306103,0.9947432160374022,0.992658726405708,0.9727861044804157,0.9823286975028166 +torch,optimized,family,5,common,101,568926,563132,568939,0.9898161314306103,0.9947432160374022,0.992658726405708,0.9727861044804157,0.9823286975028166 +onnx,optimized,family,5,per_model,101,568926,563113,568939,0.9897827359347838,0.994748127902325,0.9926584478518367,0.9727601761073481,0.9823156401203942 +onnx,optimized,family,5,common,101,568926,563113,568939,0.9897827359347838,0.994748127902325,0.9926584478518367,0.9727601761073481,0.9823156401203942 +torch-tta,optimized,family,5,per_model,101,568926,555926,568939,0.9771522078816886,0.9881310713020588,0.9849466780398504,0.9497362771726487,0.9665222685615121 +torch-tta,optimized,family,5,common,101,568926,555926,568939,0.9771522078816886,0.9881310713020588,0.9849466780398504,0.9497362771726487,0.9665222685615121 +onnx-tta,optimized,family,5,per_model,101,568926,555866,568939,0.977046748421184,0.9881409128002436,0.9849555023588796,0.9495141200682138,0.9664090354455174 +onnx-tta,optimized,family,5,common,101,568926,555866,568939,0.977046748421184,0.9881409128002436,0.9849555023588796,0.9495141200682138,0.9664090354455174 +v2,optimized,family,10,per_model,98,568894,560492,568939,0.985223371925637,0.9906950318000157,0.979000293675399,0.955086411050422,0.9664392220697487 +v2,optimized,family,10,common,98,568894,560492,568939,0.985223371925637,0.9906950318000157,0.979000293675399,0.955086411050422,0.9664392220697487 +torch,optimized,family,10,per_model,99,568905,563115,568939,0.9898161314306103,0.9956471193916931,0.9925104178482475,0.9758839157942737,0.9840088800005394 +torch,optimized,family,10,common,98,568894,563104,568939,0.9898161314306103,0.9956027022426288,0.9924339935405765,0.9756378333023785,0.9838457053066675 +onnx,optimized,family,10,per_model,99,568905,563096,568939,0.9897827359347838,0.9956521304862104,0.9925101336670252,0.9758574636156896,0.9839955588326134 +onnx,optimized,family,10,common,98,568894,563085,568939,0.9897827359347838,0.9956077644707635,0.9924337064595459,0.9756111112036048,0.9838322482084564 +torch-tta,optimized,family,10,per_model,99,568905,555909,568939,0.9771522078816886,0.9908501767114873,0.9846425705255039,0.9523684354095822,0.9678831292624407 +torch-tta,optimized,family,10,common,98,568894,555898,568939,0.9771522078816886,0.990756811167727,0.9854135058462651,0.9528100428209972,0.968483049876436 +onnx-tta,optimized,family,10,per_model,99,568905,555849,568939,0.977046748421184,0.9908602170278172,0.9846515731136045,0.9521417902828354,0.9677676086087491 +onnx-tta,optimized,family,10,common,98,568894,555838,568939,0.977046748421184,0.9907669539362643,0.9854226002975096,0.9525810849888755,0.9683663504405639 +v2,optimized,family,20,per_model,95,568844,560443,568939,0.985223371925637,0.9904011906989638,0.9809102444698268,0.9567640624210547,0.9682912665531597 +v2,optimized,family,20,common,94,568821,560416,568939,0.985223371925637,0.9902990757063995,0.9830712281580402,0.9572291750185034,0.969656067261172 +torch,optimized,family,20,per_model,95,568844,563053,568939,0.9898161314306103,0.9954638402081855,0.9928142620672449,0.9748685017224537,0.9836545489511204 +torch,optimized,family,20,common,94,568821,563031,568939,0.9898161314306103,0.9954155831891236,0.9927378180466837,0.9750636800479007,0.9837170677933899 +onnx,optimized,family,20,per_model,95,568844,563034,568939,0.9897827359347838,0.9954690622961561,0.9928139659204974,0.9748409357679292,0.9836406668919132 +onnx,optimized,family,20,common,94,568821,563012,568939,0.9897827359347838,0.9954208608312215,0.9927375187494388,0.9750358208385408,0.9837030380527018 +torch-tta,optimized,family,20,per_model,94,568821,555830,568939,0.9771522078816886,0.9916046187351479,0.9859748370643096,0.9545294449805456,0.9698103692137126 +torch-tta,optimized,family,20,common,94,568821,555830,568939,0.9771522078816886,0.9916046187351479,0.9859748370643096,0.9545294449805456,0.9698103692137126 +onnx-tta,optimized,family,20,per_model,94,568821,555770,568939,0.977046748421184,0.9916151931108571,0.9859843185134793,0.9542907442619505,0.9696887038443989 +onnx-tta,optimized,family,20,common,94,568821,555770,568939,0.977046748421184,0.9916151931108571,0.9859843185134793,0.9542907442619505,0.9696887038443989 diff --git a/docs/assets/mambo-indomain-thresholds.json b/docs/assets/mambo-indomain-thresholds.json new file mode 100644 index 0000000..c7534df --- /dev/null +++ b/docs/assets/mambo-indomain-thresholds.json @@ -0,0 +1,460 @@ +{ + "revision": "70cc69adc05362863439277048e06386c1f885e1", + "plan_sha256": "1c07a9d9b29542d5bebabe8e4c01ab3a01732ab82874ee1eb59e6e7fddb36096", + "preset": "full", + "tta": "rotation30_pad25_3", + "split": "MetricDF.split((0.9, 0.1), strata=('label',), seed=42); reporting/calibration; grouped by instance_id", + "policy": "Per-rank MacroF1; eps=0.01; use_quantiles=True; n_bootstraps=0; all truth", + "models": { + "v2": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/v2/full/mini_metric.csv", + "source_sha256": "c8c2b3d0b3eb4726fe2578c1076cf26294a4c8122043e41b77150e9d4e8bb337", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.3832911252975464, + 0.5076181292533875, + 0.6285408735275269 + ], + "report_zero": { + "accuracy": { + "0": 0.8775332728247491, + "1": 0.9449328592412035, + "2": 0.9705788744761545 + }, + "precision": { + "0": 0.8448274823412316, + "1": 0.9072671198812579, + "2": 0.9509880328905062 + }, + "recall": { + "0": 0.8775332728247491, + "1": 0.9449328592412035, + "2": 0.9705788744761545 + }, + "f1": { + "0": 0.850372188202817, + "1": 0.9213682143792531, + "2": 0.9597726462561909 + }, + "micro_accuracy": { + "0": 0.8994373737782082, + "1": 0.9548897157691774, + "2": 0.9908320575668041 + }, + "theilU": { + "0": 0.9593104177462006, + "1": 0.9696401775440752, + "2": 0.9753149712577738 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9037265793690537, + "1": 0.9709681846201991, + "2": 0.9886094792660989 + }, + "precision": { + "0": 0.8744630133499443, + "1": 0.945956754906805, + "2": 0.9786092510915618 + }, + "recall": { + "0": 0.8617359559506923, + "1": 0.924476997515889, + "2": 0.9509273853934727 + }, + "f1": { + "0": 0.8577212237023112, + "1": 0.9315715620856552, + "2": 0.9637305558575113 + }, + "micro_accuracy": { + "0": 0.922842433274624, + "1": 0.9749439465977228, + "2": 0.9970153354313402 + }, + "theilU": { + "0": 0.9593104177462006, + "1": 0.9696401775440752, + "2": 0.9753149712577738 + }, + "coverage": { + "0": 0.9600220761803989, + "1": 0.9626550473776626, + "2": 0.985223371925637 + } + } + }, + "torch": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/torch/full/mini_metric.csv", + "source_sha256": "bbcd9cda9db39a5aa42908c0f7af718b7b13e33b6b8013a7c9fa6eb6799f94f1", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.5271667838096619, + 0.6511092782020569, + 0.864630401134491 + ], + "report_zero": { + "accuracy": { + "0": 0.9295522392148737, + "1": 0.9700441575339722, + "2": 0.9847079901805926 + }, + "precision": { + "0": 0.9084034020798256, + "1": 0.9534379966946678, + "2": 0.9765407345826963 + }, + "recall": { + "0": 0.9295522392148737, + "1": 0.9700441575339722, + "2": 0.9847079901805926 + }, + "f1": { + "0": 0.9144754993404935, + "1": 0.9600051179818128, + "2": 0.980351974922878 + }, + "micro_accuracy": { + "0": 0.9420816642908993, + "1": 0.9764298105772323, + "2": 0.99502055580651 + }, + "theilU": { + "0": 0.9747176517382631, + "1": 0.9828386941879742, + "2": 0.9854982417951158 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9459195194605763, + "1": 0.9843532446734725, + "2": 0.9948948540363234 + }, + "precision": { + "0": 0.9308209935558278, + "1": 0.9768370043872598, + "2": 0.9928704939132356 + }, + "recall": { + "0": 0.9187824413723291, + "1": 0.9598662398316677, + "2": 0.9735711206973268 + }, + "f1": { + "0": 0.9207369197765051, + "1": 0.9670807734237682, + "2": 0.9828384466133122 + }, + "micro_accuracy": { + "0": 0.9573253978989134, + "1": 0.9873555016923872, + "2": 0.9988013744239939 + }, + "theilU": { + "0": 0.9747176517382631, + "1": 0.9828386941879742, + "2": 0.9854982417951158 + }, + "coverage": { + "0": 0.9745772393877024, + "1": 0.9804073898959291, + "2": 0.9898161314306103 + } + } + }, + "onnx": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/onnx/full/mini_metric.csv", + "source_sha256": "484eb6474495cac4826fb97097bac7313cce242a988831c152a348d7b4af2eec", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.5274821221828461, + 0.6540825068950653, + 0.8653896152973175 + ], + "report_zero": { + "accuracy": { + "0": 0.929545760642923, + "1": 0.9700350462704753, + "2": 0.9845608356725373 + }, + "precision": { + "0": 0.9083939953917602, + "1": 0.9534572983167396, + "2": 0.9760061052351259 + }, + "recall": { + "0": 0.929545760642923, + "1": 0.9700350462704753, + "2": 0.9845608356725373 + }, + "f1": { + "0": 0.9144694069143972, + "1": 0.9600143434479116, + "2": 0.9799783228875365 + }, + "micro_accuracy": { + "0": 0.9421097868137006, + "1": 0.9764280529195573, + "2": 0.9950117675181346 + }, + "theilU": { + "0": 0.9747257627941226, + "1": 0.9828421268076857, + "2": 0.9854807021530904 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9459922827275581, + "1": 0.9843807286145065, + "2": 0.994899624212835 + }, + "precision": { + "0": 0.9308488990338033, + "1": 0.9770218695519097, + "2": 0.9928702233945721 + }, + "recall": { + "0": 0.9188180504133524, + "1": 0.9596964890327477, + "2": 0.9735459402580976 + }, + "f1": { + "0": 0.920776413807909, + "1": 0.9670747932811063, + "2": 0.9828257658861518 + }, + "micro_accuracy": { + "0": 0.9573384410332992, + "1": 0.9874318831016298, + "2": 0.9988066613866169 + }, + "theilU": { + "0": 0.9747257627941226, + "1": 0.9828421268076857, + "2": 0.9854807021530904 + }, + "coverage": { + "0": 0.974545601549551, + "1": 0.9802122898939957, + "2": 0.9897827359347838 + } + } + }, + "torch-tta": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/torch-tta/full/mini_metric.csv", + "source_sha256": "82bb7a7c36cc59d49ef38b4d27137c3c0acbe623e438d7ea9dd679e47dc5a01c", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.35428521037101746, + 0.42676515877246857, + 0.6618353724479675 + ], + "report_zero": { + "accuracy": { + "0": 0.9031914801618097, + "1": 0.9525452203980439, + "2": 0.9681161624170399 + }, + "precision": { + "0": 0.8957682319690011, + "1": 0.9370642917998594, + "2": 0.9623314442357818 + }, + "recall": { + "0": 0.9031914801618097, + "1": 0.9525452203980439, + "2": 0.9681161624170399 + }, + "f1": { + "0": 0.8931233034667367, + "1": 0.9422165624061323, + "2": 0.9645304134232945 + }, + "micro_accuracy": { + "0": 0.9252292425022718, + "1": 0.9634319320700462, + "2": 0.9896034548519261 + }, + "theilU": { + "0": 0.9651516073355686, + "1": 0.97249651687663, + "2": 0.9708502978510457 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.924348693798147, + "1": 0.9715101613252839, + "2": 0.9884734442452687 + }, + "precision": { + "0": 0.9180616415933389, + "1": 0.9625019705071297, + "2": 0.9837783443784444 + }, + "recall": { + "0": 0.8923771863774734, + "1": 0.9403692157002803, + "2": 0.951186192254207 + }, + "f1": { + "0": 0.8990523856912974, + "1": 0.9493424432950821, + "2": 0.966613846478881 + }, + "micro_accuracy": { + "0": 0.9434633457709865, + "1": 0.9786583162277025, + "2": 0.9977119833075512 + }, + "theilU": { + "0": 0.9651516073355686, + "1": 0.97249651687663, + "2": 0.9708502978510457 + }, + "coverage": { + "0": 0.9699089006027009, + "1": 0.9727299411711976, + "2": 0.9771522078816886 + } + } + }, + "onnx-tta": { + "source": "local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/full/onnx-tta/full/mini_metric.csv", + "source_sha256": "34324a27a65c3ef98ec95b0db443efc5f65bbf270dccb33a572afb37ddba6526", + "identities": { + "full": "3c3f71983ab8b996928643377c0a012c162af2873f19d0a1587d73e96419f966", + "report": "295fbfef0a168abb06caff10a46f36a297b884e9526312d27ee4e83cd487add7", + "calibration": "86151935a854e42edb398ca83a1ac2c590bad14ecb54f709b129926d808aebdb" + }, + "report_images": 568939, + "calibration_images": 63974, + "thresholds": [ + 0.3528517037630081, + 0.4292137175798416, + 0.664017528295517 + ], + "report_zero": { + "accuracy": { + "0": 0.903254258165182, + "1": 0.9524334553173022, + "2": 0.9681041671465577 + }, + "precision": { + "0": 0.8958363209627044, + "1": 0.9371069603411143, + "2": 0.9623128857780121 + }, + "recall": { + "0": 0.903254258165182, + "1": 0.9524334553173022, + "2": 0.9681041671465577 + }, + "f1": { + "0": 0.8931813750062196, + "1": 0.9421777591016375, + "2": 0.9645148542838584 + }, + "micro_accuracy": { + "0": 0.9252679109711235, + "1": 0.9634231437816708, + "2": 0.989599939536576 + }, + "theilU": { + "0": 0.9651642678177648, + "1": 0.9724822373011625, + "2": 0.9708438808651052 + }, + "coverage": { + "0": 1.0, + "1": 1.0, + "2": 1.0 + } + }, + "report_optimized": { + "accuracy": { + "0": 0.9243532804255711, + "1": 0.9717039507950574, + "2": 0.9884830018540828 + }, + "precision": { + "0": 0.9180792238778338, + "1": 0.9627559769001354, + "2": 0.9837869141498093 + }, + "recall": { + "0": 0.892479370530307, + "1": 0.9402188527993052, + "2": 0.9509704435277845 + }, + "f1": { + "0": 0.8991069244273215, + "1": 0.9493781942192143, + "2": 0.9665038797027707 + }, + "micro_accuracy": { + "0": 0.9434182774890739, + "1": 0.978773431456889, + "2": 0.9977279268906958 + }, + "theilU": { + "0": 0.9651642678177648, + "1": 0.9724822373011625, + "2": 0.9708438808651052 + }, + "coverage": { + "0": 0.9700372096129813, + "1": 0.9725401141422895, + "2": 0.977046748421184 + } + } + } + } +} diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md index 9b073b7..2d80bd0 100644 --- a/docs/mambo-deployment-evidence.md +++ b/docs/mambo-deployment-evidence.md @@ -1,6 +1,8 @@ # Deployment comparison evidence Complete results supporting the [integration guide](../deployment/README.md). +The complementary [in-domain/HPC evidence](mambo-indomain-evidence.md) uses the same +calibration and support policy on a separate image domain; the tables below remain Flemming-only. This reference retains both confidence settings, full and truncated support, all three ranks, coverage, timing ranges and historical-study boundaries. diff --git a/docs/mambo-indomain-evidence.md b/docs/mambo-indomain-evidence.md new file mode 100644 index 0000000..9a0fdfb --- /dev/null +++ b/docs/mambo-indomain-evidence.md @@ -0,0 +1,84 @@ +# In-domain deployment evidence + +Global vocabulary; 568,939 reporting images and 63,974 separate calibration images from the original 632,913-image test split. All truth is in vocabulary. Shared label-stratified 90/10 split, seed 42, grouped by image ID; per-rank mini_metrics Macro-F1 calibration, eps=0.01, quantiles, no bootstraps. + +The recipe was selected on Flemming. These general photographs complement the more deployment-relevant Flemming monitoring crops; their different TTA response does not invalidate that deployment evidence. + +Full support / >5 values use the same reporting rows. >5 requires truth and accepted-prediction support in every pipeline, separately per confidence setting. No rows are removed; per-class FP/FN remain intact. + +## Species + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 87.75% / 89.20% | 0.8504 / 0.8701 | 100.00% | +| MAMBO v2 | Calibrated | 0.3833 | 90.37% / 91.77% | 0.8577 / 0.8795 | 96.00% | +| V3 PyTorch | None | 0.0000 | 92.96% / 93.72% | 0.9145 / 0.9258 | 100.00% | +| V3 PyTorch | Calibrated | 0.5272 | 94.59% / 95.33% | 0.9207 / 0.9325 | 97.46% | +| V3 ONNX | None | 0.0000 | 92.95% / 93.72% | 0.9145 / 0.9258 | 100.00% | +| V3 ONNX | Calibrated | 0.5275 | 94.60% / 95.33% | 0.9208 / 0.9326 | 97.45% | +| V3 PyTorch + TTA | None | 0.0000 | 90.32% / 91.61% | 0.8931 / 0.9073 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.3543 | 92.43% / 93.63% | 0.8991 / 0.9146 | 96.99% | +| V3 ONNX + TTA | None | 0.0000 | 90.33% / 91.62% | 0.8932 / 0.9074 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.3529 | 92.44% / 93.64% | 0.8991 / 0.9147 | 97.00% | + +## Genus + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 94.49% / 94.80% | 0.9214 / 0.9273 | 100.00% | +| MAMBO v2 | Calibrated | 0.5076 | 97.10% / 97.34% | 0.9316 / 0.9383 | 96.27% | +| V3 PyTorch | None | 0.0000 | 97.00% / 97.14% | 0.9600 / 0.9637 | 100.00% | +| V3 PyTorch | Calibrated | 0.6511 | 98.44% / 98.52% | 0.9671 / 0.9705 | 98.04% | +| V3 ONNX | None | 0.0000 | 97.00% / 97.14% | 0.9600 / 0.9636 | 100.00% | +| V3 ONNX | Calibrated | 0.6541 | 98.44% / 98.53% | 0.9671 / 0.9704 | 98.02% | +| V3 PyTorch + TTA | None | 0.0000 | 95.25% / 95.55% | 0.9422 / 0.9468 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.4268 | 97.15% / 97.41% | 0.9493 / 0.9541 | 97.27% | +| V3 ONNX + TTA | None | 0.0000 | 95.24% / 95.54% | 0.9422 / 0.9468 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.4292 | 97.17% / 97.43% | 0.9494 / 0.9542 | 97.25% | + +## Family + +| Pipeline | Confidence | Threshold | Macro accuracy (full / >5) | Macro-F1 (full / >5) | Coverage | +|---|---|---:|---:|---:|---:| +| MAMBO v2 | None | 0.0000 | 97.06% / 96.97% | 0.9598 / 0.9602 | 100.00% | +| MAMBO v2 | Calibrated | 0.6285 | 98.86% / 98.83% | 0.9637 / 0.9650 | 98.52% | +| V3 PyTorch | None | 0.0000 | 98.47% / 98.43% | 0.9804 / 0.9798 | 100.00% | +| V3 PyTorch | Calibrated | 0.8646 | 99.49% / 99.47% | 0.9828 / 0.9823 | 98.98% | +| V3 ONNX | None | 0.0000 | 98.46% / 98.41% | 0.9800 / 0.9794 | 100.00% | +| V3 ONNX | Calibrated | 0.8654 | 99.49% / 99.47% | 0.9828 / 0.9823 | 98.98% | +| V3 PyTorch + TTA | None | 0.0000 | 96.81% / 96.72% | 0.9645 / 0.9644 | 100.00% | +| V3 PyTorch + TTA | Calibrated | 0.6618 | 98.85% / 98.81% | 0.9666 / 0.9665 | 97.72% | +| V3 ONNX + TTA | None | 0.0000 | 96.81% / 96.72% | 0.9645 / 0.9644 | 100.00% | +| V3 ONNX + TTA | Calibrated | 0.6640 | 98.85% / 98.81% | 0.9665 / 0.9664 | 97.70% | + +## Support outside the truncated average + +| Confidence | Rank | Shared classes | Truth images outside | Proportion | +|---|---|---:|---:|---:| +| zero | species | 10732 | 9,681 | 1.70% | +| zero | genus | 4077 | 1,912 | 0.34% | +| zero | family | 101 | 13 | 0.00% | +| optimized | species | 10602 | 10,680 | 1.88% | +| optimized | genus | 4042 | 2,143 | 0.38% | +| optimized | family | 101 | 13 | 0.00% | + +Machine-readable [metrics](assets/mambo-indomain-tail.csv), [thresholds and split identities](assets/mambo-indomain-thresholds.json), and [class domains](assets/mambo-indomain-support.json) retain provenance and supplementary metrics. Thresholds are dataset-specific evidence, not new deployment defaults. + +## HPC timing boundaries + +The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. Request, streaming and prepared-input diagnostics have different boundaries; do not pool them. The short streaming bank contains 1,024 images and includes pipeline startup. Prepared-input diagnostics exclude decoding/hierarchy reduction but include transfers, and remain supplementary. + +[Request observations](assets/mambo-indomain-speed.csv) and [streaming observations](assets/mambo-indomain-streaming-speed.csv) retain all trials. [Campaign provenance](assets/mambo-indomain-campaign.json) identifies source hashes and runtime environments. Peak host memory spans each complete benchmark process and its tested batch sizes; it is not per-cell model memory. V2 was tested through batch 32 on GPU, V3 through batch 256. + +## Reproduce + +Use the pinned mini_metrics environment described in the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md). From the repository root, with the extracted archive beneath `local-evidence/ucloud-2026-09-25/`: + +```sh +python -m dev.releases.mambo_v3.indomain_report \ + --root local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers \ + --output local-evidence/ucloud-2026-09-25/presentation +python -m dev.releases.mambo_v3.indomain_speed \ + --source local-evidence/ucloud-2026-09-25/mambo-results/summary-transfers \ + --output local-evidence/ucloud-2026-09-25/presentation +``` From 7a8f53afe7ebb722ea91c45ae8c3e5fdce12e8c0 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 08:45:45 +0200 Subject: [PATCH 075/221] Review V2 and V3 deployment pipeline efficiency and simplification --- docs/mambo-inference-pipeline-review.md | 350 ++++++++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 docs/mambo-inference-pipeline-review.md diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md new file mode 100644 index 0000000..c39962e --- /dev/null +++ b/docs/mambo-inference-pipeline-review.md @@ -0,0 +1,350 @@ +# V2/V3 inference pipeline review + +Review date: 25 September 2026. Code baseline: `0eb90b2`; V2 source: +`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. This is a design review, not an +implementation change. Evidence is the completed UCloud campaign and source +inspection. No new B200 measurements have been made. + +The concern is substantially justified: several V3 changes restored efficiency +lost by the initial portable adapter, and the streaming implementation accumulated +coordination mechanisms around an expensive CPU/NumPy boundary. The next change +should replace that structure, not add another independent queue or worker knob. +This does not mean reverting release features or copying V2 wholesale. + +## What the measurements establish + +Global vocabulary; median of three process trials, images/s: + +| Pipeline | CPU request B=8 | B200 request B=32 | B200 request B=256 | B200 streaming B=256 | Prepared-input B=256 | +|---|---:|---:|---:|---:|---:| +| V2 | 2.0 | 539.5 | Not tested | Not tested | Not tested | +| V3 Torch | 28.7 | 480.7 | 473.3 | 624.9 | 2,957.3 | +| V3 ONNX | 35.1 | 442.2 | 439.5 | 548.4 | 2,243.8 | + +Sources: [request observations](assets/mambo-indomain-speed.csv), +[streaming observations](assets/mambo-indomain-streaming-speed.csv), and the +raw benchmark reports in `local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/`. +Prepared-input diagnostics include transfers and model execution, exclude image +preparation and public result processing, and are not a pure GPU-compute ceiling. +The Torch head still computes hierarchy inside that diagnostic; the report's +"no decode/reduction" wording is too broad for Torch and means no adapter-side +result reduction. Streaming measures only 1,024 images including startup. +CPU tests use four runtime threads, not a tuned full 48-vCPU node. + +At the common GPU batch size, V3 Torch is about 11% slower than V2 and ONNX 18% +slower. V3's separate streaming path surpasses V2's request rate, but at a larger +batch and with a different execution mode. That is not evidence of a controlled +backend speedup. Conversely, the CPU improvements are real measured pipeline +improvements; it is inaccurate to say that every V3 gain merely recovered a V2 +regression. V2 and V3 also differ in backbone, input resolution, preprocessing, +and runtime precision. There is no matched V2 prepared-input benchmark to infer +their isolated model speed ratio from this campaign. + +The full Torch single-view collection provides stronger pipeline evidence than +GPU utilization samples: + +| Recorded quantity | Seconds | +|---|---:| +| Entire collection, including setup | 875.7 | +| Consumer waiting for staged input | 549.3 | +| Runtime call wall time | 265.2 | +| Model CUDA-stream event intervals | 212.9 | +| Background assembly wall time | 647.2 | +| H2D CUDA-event intervals | 27.5 | +| D2H CUDA-event intervals | 1.36 | +| Background prediction construction | 121.4 | +| Background CSV writing | 11.2 | + +These overlap and must not be added. Runtime wall time includes device completion; +model event intervals can include device idle gaps while the host submits work. +Sampled GPU utilization is neither pipeline time attribution nor SM occupancy. +The dominant observed single-view problem is delivery of ready batches, not +bulk PCIe output bandwidth or CSV storage. The latest H2D staging change did not +produce a demonstrated end-to-end improvement on B200. + +An unresolved TTA signal is important: Torch model event time is 2,524.5 seconds +for three views, versus 212.9 seconds for one view, while its input wait falls to +6.7 seconds. ONNX TTA instead records 1,750.7 seconds waiting for input and 768.6 +seconds in runtime. Similar overall throughput can therefore hide different +critical paths. Host launch starvation, scheduling, allocator contention and +actual GPU execution need distinguishing; the event totals alone do not prove a +fourfold kernel slowdown beyond the three-view multiplier. + +## V2 versus V3: where the work moved + +The inspected V2 `mini_trainer/deploy.py:Predictor` uses the reader in +`mini_trainer/utils/io.py:make_read_and_resize_fn` and native classifier prediction. + +| Responsibility | V2 deployment | Current V3 deployment | +|---|---|---| +| Reading | torchvision decode, CPU resize to 512 square, uint8 transfer per image | PIL decode; portable NumPy preparation; optional independent reading pool | +| Model preprocessing | Batched checkpoint transform on the device for path inputs; final input 224 square | Per-image CPU interpolation, normalization and CHW float32 materialization; final input 384 square | +| Batching | Caller supplies one batch; device tensors stacked | Request batching plus a separate streaming scheduler and host assembly pool | +| Precision | Existing CUDA autocast | Initially FP32; later restored backbone AMP, with FP32 head | +| Hierarchy | Existing batched native reduction | Initially discarded/recomputed on CPU; now native Torch ranks or batched NumPy for ONNX | +| Selection/confidence | Torch top-k and softmax on device | All rank logits downloaded; NumPy top-k/softmax; eager Python result objects | +| Optional features | Masks and embeddings already available | Expanded preset provenance, custom lists, portable ONNX, configurable TTA, bounded streaming | + +V2 was not an ideal asynchronous engine: request reading is serial, transfers +are per image, and label translation uses GPU scalar `.item()` operations. Its +full evaluation harness also differs from the public API, using four reading +threads and shared backbone features. Do not conflate that full-run rate with +the public request benchmark. + +Nevertheless, V2 kept batched work in the native runtime. V3's portability layer +moved substantial numerical work back to CPU and imposed CPU-return boundaries. +Portability requires matching semantics, not matching every backend's physical +execution location. Restoring AMP and native hierarchy were regression repairs, +not novel HPC optimizations. TTA, audited presets, portable ONNX and standalone +CPU integration are useful features worth retaining independently of speed. + +## Concrete architectural problems + +### 1. Preparation performs avoidable work before concurrency can help + +[preprocessing.py](../deployment/mambo_deploy/preprocessing.py) reconstructs fixed +interpolation coordinates and normalization constants for every image. More +significantly, subtracting int64 `lo` indices from float32 coordinates produces +float64 fractions; both bilinear passes consequently use float64 intermediate +arrays. The chained indexing `image[:, yy][:, :, xx]` also materializes a +source-width intermediate before selecting columns. Several full image arrays +are allocated for arithmetic and layout conversions. + +This is verified directly with the installed NumPy. A small isolated laptop +probe on an already-decoded synthetic 2000x3000 image compared the current +function with cached float32 coefficients, direct two-axis gathering and +in-place normalization. At four threads the probe increased from 235 to 444 +images/s and traced single-call peak allocation fell from 16.0 to 8.9 MB. +At 48 threads the corresponding rates were 209 and 395 images/s. This is a +cost/mechanism experiment, not a deployment speed or quality qualification; +32 calls per observation also do not fully occupy 48 workers. The local probe +and output are retained in `local-evidence/pipeline-review/`. It is not a proposed +second production implementation. Its lesson is that fewer allocations and +operations can improve both work and contention without another scheduler. + +Torchvision explicitly recommends tensor transforms, uint8 resizing and attention +to memory layout. Reuse native transforms when they implement the release recipe; +do not silently substitute PIL/torchvision interpolation, antialiasing or transform +order and assume the model input is unchanged. Small rounding differences are not +the gate; unintended geometry/normalization changes are. [Torchvision guidance](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations). + +TTA additionally copies and rotates/pads full-resolution originals before model +resizing, even for the identity transform. This is much more expensive for the +large in-domain photos than Flemming crops. Reordering resize and rotation is a +recipe change and should not be smuggled into a pipeline refactor. + +### 2. Too many ownership transitions, despite bounded queues + +[streaming.py](../deployment/mambo_deploy/streaming.py) maintains in-flight reads, +encoded buffers, decode futures, per-image results, assembling batches and completed +batches. A coordinator scans futures, sorts ready indices and wakes every 5 ms. +Filesystem `stat()` runs on that coordinator, so slow metadata can also delay +handling completions. There is a single stacking executor after per-image +preparation, followed by another transfer executor and a result executor. + +At batch 256, one V3 float32 input is **432 MiB**. The recorded nine allocated host +batch buffers represent about **3.8 GiB**; three-view TTA's 27 allocations represent +about **11.4 GiB**, before all decoded originals, intermediates and other results. +The 2 GiB encoded-byte budget does not bound those allocations. A per-image +prepared count obscures the actual batch and view byte footprint. + +Background assembly takes roughly 262 ms per 256-image batch over the Torch +single-view collection. That is about 1.6 GiB/s of payload copying, not a measurement +of the node's DRAM bandwidth. Allocation, descheduling, GIL reacquisition and +contention may be included. This makes it important but does not justify declaring +`np.stack` intrinsically slow. Preparation should own final batch storage rather +than hand off thousands of independently allocated arrays to a serial stacker. + +### 3. Transfers are partly overlapped; completion still gates submission + +The Torch H2D worker uses a separate copy stream and pinned source buffers, but +host-synchronizes each staged batch before returning it. This protects buffer +lifetimes and can overlap the previous model; it is not wholly serialized. The +larger issue is [download_tensors](../deployment/mambo_deploy/transfers.py): pack +all ranks, allocate pinned host output, copy on the current compute stream, then +synchronize in the main inference caller. The next model batch is not submitted +until that finishes. A background result thread only starts after this barrier. + +The ONNX path binds inputs on CUDA but outputs on CPU and calls synchronous +`run_with_iobinding`; each TTA view returns its logits to CPU. It has not established +an asynchronous output pipeline. Simply adding `non_blocking` or disabling ORT +synchronization would be incorrect without completion events and explicit buffer +lifetimes. PyTorch documents the pinned-memory/separate-stream requirements; +ORT documents device I/O binding and the caller's synchronization responsibility. +[PyTorch transfer guidance](https://docs.pytorch.org/tutorials/intermediate/pinmem_nonblock.html), +[ORT CUDA performance guidance](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning). + +The current Torch H2D payload is also 2.25 times V2's uint8 512-square payload per +image (384-square float32 versus 512-square uint8). Its model sees 2.94 times the +pixel count (384 versus 224 square), though architecture differs and pixel count +is not a compute-time ratio. Float32 staging is convenient, not inevitable. + +### 4. Device results are converted too early and too broadly + +[results.py](../deployment/mambo_deploy/results.py) performs full softmax and +selection on CPU, rebuilds class dictionaries for every prediction object, and +eagerly creates nested labels/items. Torch copies 12,632 species, 4,476 genus and +104 family scores per image even when the consumer only needs one label/confidence +per rank. For regional selectors it can additionally download all global leaves +for the finite-value check. V2 selected on device. + +The public `raw_logits` property is an existing contract: do not remove it silently. +A compact-result path must be explicit, or lazily materialize raw outputs with +clearly bounded device ownership. Preserve the existing raw mode while avoiding +its cost in a collector that only saves top-1 predictions. Optional embeddings +likewise should incur their cost only when requested. + +For masked/TTA Torch inference, `head(features)` computes full native hierarchy +for every view, which is discarded before masked/averaged hierarchy is recomputed. +Embeddings requested separately call `preclassification` again. These are concrete +redundancies, but their speed impact has not been isolated. Use an existing leaf/ +embedding boundary where possible; any necessary shared-core API belongs on a +feature branch and must be merged into the release branch. + +### 5. Request, stream and evaluator have diverged + +`predict()` creates a preparation pool per request, alternates preparation and +inference, retains whole-request outputs and concatenates them. `predict_stream()` +uses the custom scheduler and result worker. The collector calls private methods +and manages another result loop. Thus improving the latter does not necessarily +improve the interface an integration developer uses. Benchmarks currently measure +these materially different paths. One batch primitive and one streaming executor +should serve request collection, streaming and evaluation. Already-device raw tensors +also pass through `_rgb().detach().cpu().numpy()` today; the public API has no +explicit prepared-device-batch boundary for integration with an existing GPU +pipeline. A typed/explicit prepared-input interface would avoid that round trip +without ambiguously treating raw images as normalized model inputs. + +## First-principles resource model + +For a batch, let service demands be loading/preparation, H2D, backend work, D2H and +postprocessing. A fully serial loop pays approximately their sum. With adequate +buffers and independent resources, steady-state batch time approaches the largest +stage service time. In practice preparation/postprocessing share CPU, RAM bandwidth +and sometimes the GIL; transfers and kernels share memory fabrics. Their resource +demands must be combined where resources are shared. Concurrency cannot remove work. + +For a target near 3,000 images/s, batch 256 needs a ready batch every ~85 ms. The +serial preprocessing diagnostic near 191 images/s implies about 15.7 effective CPU +seconds per wall second at that target, before accounting for scaling losses or +other work. Forty-eight Python threads do not establish that capacity. NumPy often +releases the GIL inside native operations, but surrounding Python, allocator and +scheduler activity can still interfere with the inference thread's launches. +The TTA event anomaly makes launch starvation a serious hypothesis, not a finding. +[NumPy thread behavior](https://numpy.org/doc/stable/reference/thread_safety.html). + +Reading concurrency addresses latency: outstanding requests are approximately +target images/s multiplied by mean request latency. At 3,000 images/s and 100 ms, +roughly 300 requests may be justified before bandwidth and memory constraints. +That does **not** imply 300 preprocessing workers. Once the encoded queue remains +full, increasing read concurrency cannot address a downstream capacity deficit. +This also agrees with the project's [UCloud training experience](training-workflow-postmortem.md). + +| Environment/regime | Likely limiting resource | Appropriate adaptation | +|---|---|---| +| Cold network filesystem/object store | Metadata/read latency, then storage throughput | High bounded read concurrency; keep metadata off the compute scheduler; optional local staging for repeated runs | +| Warm cache/local NVMe plus fast GPU | Decode, resize, memory traffic, host kernel submission | Batch-oriented preparation, native kernels, few allocations; isolate Python-heavy preparation if needed | +| Multi-socket enterprise node | CPU quota, NUMA placement, cross-socket memory/PCIe path | Budget against effective cpuset/quota, place workers and memory near the GPU; don't infer 384 usable CPUs from affinity alone | +| CPU deployment | Competition between backend native threads and preprocessing | Share one CPU budget; avoid multiplying preprocessing workers by backend threads | +| Small images/fast accelerator | Python dispatch, per-batch barriers, result materialization | Coarse tasks, compact outputs, backend event dependencies; compilation/graphs only if launch overhead remains limiting | +| Multi-GPU node | Per-GPU host supply and aggregate storage/CPU bandwidth | One ownership domain per GPU, partition sources; no assumption that one device's reader budget scales independently | +| Restricted/shared environment | Process/shared-memory limits, RAM and installation constraints | Portable bounded thread/synchronous execution remains functional; acceleration remains optional | + +NVIDIA recommends considering transfer minimization, overlap and NUMA locality as +separate resource issues. These are placement policies, not reasons to add more +per-image machinery. [CUDA best practices](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/). + +## Simpler target design + +Use **three ownership domains** for the user's five logical phases: + +```text +Batch producer Backend executor Result consumer +read/decode/prepare -> H2D -> inference -> D2H -> format/save/yield +owns ready batch storage owns in-flight buffers/events owns completed CPU results +``` + +Transfers are backend dependencies, not independent application schedulers. A +small ring of batch slots supplies backpressure and lifetime accounting. Enqueue +the next batch before retiring the previous completed output; only the consumer +waits for output readiness. The exact number of copy streams is backend-dependent, +not automatically one thread/stream for each logical phase. + +The producer should accept an external prepared-batch iterable as well as paths. +Path loading remains a convenience adapter. A CPU worker prepares into an assigned +batch slice or owns a complete batch, rather than returning standalone image arrays +for serial stacking. Read latency can retain a bounded IO service without another +prepared-image state machine. Keep logical sample IDs/order explicit; a slow image +must not corrupt alignment. Out-of-order internal completion is optional and needs +bounded reordering, not a changed public output order. + +Keep arrays compact until conversion is needed. Prefer optimized CPU uint8 +geometry and late normalization; on Torch CUDA, batch tensor transforms can live +in the backend using existing torchvision operators. ONNX-only installations must +not acquire a mandatory Torch dependency. A portable CPU preprocessing path is a +legitimate backend implementation, not a reason to route Torch through NumPy too. +A graph-integrated ONNX preprocessing/postprocessing wrapper is a later artifact +choice if profiling justifies it, not required for the first simplification. + +Result reduction should remain native where practical. TTA aggregates leaves once +and reduces the final hierarchy once; requested embeddings are computed once per +view. Provide a compact prediction mode for the evaluator while preserving raw +outputs for developers who use them. Reuse vocabulary metadata. Ordinary request +prediction can collect the same batch execution results, with a lightweight path +for one small batch rather than launching every service unconditionally. + +## What established implementations suggest + +| Existing implementation | Relevant mechanism | Recommendation here | +|---|---|---| +| PyTorch DataLoader | Batch collation, worker processes, bounded prefetch, pinned transfer preparation | First baseline for the Torch producer; accept caller-provided batches instead of rebuilding its scheduler. Tune process and internal thread budgets together. | +| torchvision transforms | Native CPU/CUDA batch operations, uint8/layout-aware paths | Reuse compatible operators; remove accidental float64 and redundant passes. | +| NVIDIA DALI | CPU/mixed/GPU pipeline execution, managed prefetch, accelerated decode and fused transforms | Architectural reference and optional HPC candidate if native preparation remains limiting; not a mandatory dependency for this portable release. | +| ONNX Runtime I/O binding | Device input/output buffers, execution stream controls | Use for an explicit asynchronous backend contract, not as a claim that CPU-bound outputs already overlap. | +| Triton Inference Server | Dynamic batching of independent requests and model-instance scheduling | Appropriate optional serving layer for many clients; not the fix for a single offline producer that cannot supply batches. | + +DataLoader documents multiprocessing to avoid blocking inference with Python +loading, batch-aware fetching, and the costs/constraints of worker processes. +Its automatic batching still involves collation and pinning copies: it is a +maintained baseline, not a zero-copy guarantee. [DataLoader documentation](https://docs.pytorch.org/docs/main/data.html). + +DALI's pipeline exposes bounded CPU/GPU queues and explicit asynchronous output +completion; its crop/mirror/normalize operator combines work rather than inserting +another Python stage. Those are the useful design lessons even without adopting +DALI. [DALI executor](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html), +[fused transform](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/operations/nvidia.dali.fn.crop_mirror_normalize.html). +Triton's dynamic batcher solves combining independent requests, which our already +batched offline campaign does not require. [Triton batching](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/batcher.html). + +## Bounded implementation and validation sequence + +1. Establish one backend batch boundary and preserve public behavior: preprocessing + geometry, ordering, presets/custom masks, TTA logit averaging, embeddings, partial + batches, failure/early-close behavior and standalone ONNX. Keep existing evidence + immutable. No new runtime or format is necessary for this boundary. +2. Replace per-image NumPy/assembly handoffs with batch-oriented preparation. + Remove redundant copies/constants/float64 work, the serial stacker and polling + where a standard producer suffices. Use one explicit resource budget, not another + layer of automatically multiplying pools. This is the strongest first increment. +3. Make backend submission/completion explicit and move waiting to retirement. + Retain pinned source/output ownership until completion; do not just delete + synchronization. Fold the current transfer worker into that ownership model. + Keep a correct synchronous capability path for CPU and restrictive runtimes. +4. Reduce results where they already reside, with an explicit compact mode, and + unify request/stream/evaluation execution. Remove per-view hierarchy and duplicate + embedding work through existing interfaces or a separately reviewed core change. +5. Validate with a short representative run, not another full quality campaign: + identical image bank/config for V2/V3, request versus stream clearly separated; + both small Flemming crops and larger photographs; cold/warm IO distinguished. + A resident-batch replay isolates runtime from producer contention, and one short + CPU/GPU timeline checks the launch-starvation hypothesis. Measure steady-state + images/s plus latency/memory and buffer occupancy; synchronize at measurement + boundaries. Use a few justified settings, not a combinatorial worker sweep. + +The first success criterion is less work and fewer independently coordinated stages, +with a measured throughput improvement and unchanged meaningful outputs. GPU +utilization need not become flat or reach 100%. A claimed 2–3k application rate +would need an actual sustained end-to-end measurement; the prepared-input numbers +only show that the current hundreds-of-images/s plateau is not an established +model ceiling. Existing CUDA compilation/graph and decoder accelerators can follow +if the simplified pipeline exposes those as the next material limit. From eeea3d6b610cbc0e8805c97e36196bfcd5f70a4b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 09:13:01 +0200 Subject: [PATCH 076/221] perf: simplify deployment batch preparation and output completion --- deployment/README.md | 8 +- deployment/mambo_deploy/augmentation.py | 9 +- deployment/mambo_deploy/predictor.py | 82 ++++++++++------ deployment/mambo_deploy/preprocessing.py | 65 ++++++++---- deployment/mambo_deploy/results.py | 16 ++- deployment/mambo_deploy/streaming.py | 120 +++++++++++------------ deployment/mambo_deploy/transfers.py | 53 +++++----- dev/releases/mambo_v3/evaluate.py | 45 ++++----- dev/releases/mambo_v3/ucloud-release.md | 29 ++++++ dev/releases/mambo_v3/ucloud_release.py | 1 + docs/mambo-inference-pipeline-review.md | 74 +++++++++++++- tests/releases/test_streaming.py | 64 ++++++++---- 12 files changed, 375 insertions(+), 191 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 646533f..fb4cf23 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -220,12 +220,14 @@ An individual file larger than that budget fails explicitly. The defaults are prefetched batches and 256 MiB encoded storage. These controls are API-only and independent of model batch size, which the read window must accommodate. A supplied `stats={}` receives queue counts, reserved bytes, actual batch-queue waiting and -background batch-assembly time. Complete batches are assembled off the inference -thread; background times overlap inference. +summed preparation-worker time. Workers fill batch storage directly; preparation +time overlaps inference and sums concurrent workers, so it is not elapsed time. CUDA streaming reuses device buffers and stages the next batch in a transfer worker. PyTorch uses pinned host buffers and a separate CUDA copy stream; ONNX uses device inputs with I/O binding, with copy overlap determined by the runtime. Set `device_prefetch=False` to disable device staging for comparison. PyTorch downloads -ranks and embeddings together with one completion wait. +ranks and embeddings together; the result worker waits for completion while the +next batch can be submitted. ONNX currently completes its output copy inside the +runtime call. The byte budget is not a total-process memory limit: decoding temporaries, prepared views, the model and yielded results also consume memory. diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index f58d11d..9f73e51 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -2,12 +2,11 @@ import hashlib from dataclasses import dataclass -from functools import partial import numpy as np from PIL import Image -from .preprocessing import _rgb, preprocess +from .preprocessing import _rgb, prepare_batch, preprocess @dataclass(frozen=True) @@ -152,8 +151,8 @@ def resolve_tta(value): return TTA(views, value) -def _prepare_view(image, transform): - return preprocess(transform(image.copy())) +def _prepare_view(image, transform, out=None): + return preprocess(transform(image.copy()), out=out) def prepared_views(items, tta, pool=None): @@ -163,7 +162,7 @@ def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] decoded = mapped(_rgb, items) - views = (np.stack(mapped(partial(_prepare_view, transform=transform), decoded)) for transform in tta.transforms) + views = (prepare_batch(decoded, pool, transform) for transform in tta.transforms) return views diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index d533dfe..ca2a839 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -6,6 +6,7 @@ import threading from concurrent.futures import ThreadPoolExecutor from contextlib import closing, nullcontext +from functools import cached_property from itertools import islice from pathlib import Path @@ -15,7 +16,7 @@ from .bundle import Bundle from .download import default_bundle from .onnx_session import create_session -from .preprocessing import RECIPE, image_items, preprocess +from .preprocessing import RECIPE, image_items, prepare_batch from .result_worker import ResultWorker from .results import HierarchyPlan, Prediction from .streaming import prepared_stream @@ -77,6 +78,7 @@ def __init__( self._hierarchy_plans = {} self.runtime_timings = {} self._model_events = [] + self._download_stream = None self.onnx_session_info = {} self._lock = threading.RLock() self.weights = weights @@ -162,11 +164,26 @@ def _apply_class_mask(self, mask): def available_presets(self): return {"full": {"count": len(self.bundle.classes["labels"][0]), "scope": "All model species"}, **self.bundle.regions} - def _onnx(self, images, embeddings): + @cached_property + def _onnx_api(self): try: import onnxruntime as ort except ImportError as error: raise ImportError("Install mambo-deploy[onnx], or onnxruntime-gpu for CUDA") from error + return ort + + @cached_property + def _torch_api(self): + try: + import torch + + from mini_trainer.modeling.classifier import bypass_submodule + except ImportError as error: + raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error + return torch, bypass_submodule + + def _onnx(self, images, embeddings): + ort = self._onnx_api key = "onnx-embedding" if embeddings else "onnx" if key not in self._sessions: path = self.bundle.profile(key) @@ -203,14 +220,10 @@ def _onnx(self, images, embeddings): return values[0], values[1] if embeddings else None def _torch(self, images, embeddings, *, tensors=False): - try: - import torch - - from mini_trainer.builders import BaseBuilder - from mini_trainer.modeling.classifier import bypass_submodule - except ImportError as error: - raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error + torch, bypass_submodule = self._torch_api if self._torch_model is None: + from mini_trainer.builders import BaseBuilder + path = self.weights or self.bundle.profile("torch") if self.device != "cpu" and not torch.cuda.is_available(): raise RuntimeError("PyTorch CUDA is unavailable; explicitly choose device='cpu' or install/configure CUDA") @@ -257,7 +270,7 @@ def hierarchy_plan(self, selected): self._hierarchy_plans[key] = HierarchyPlan(selected, self.bundle.classes) return self._hierarchy_plans[key] - def _ranked_views(self, views, view_count, selectors, embeddings=False): + def _ranked_views(self, views, view_count, selectors, embeddings=False, *, defer=False): """Keep native ranks on Torch; reduce masked/averaged leaves on the same device.""" if self.backend != "torch": leaf, vectors = ( @@ -265,8 +278,8 @@ def _ranked_views(self, views, view_count, selectors, embeddings=False): if self.tta is not None else self._infer(next(iter(views)), embeddings) ) - return leaf, vectors, None - import torch + return (lambda: (leaf, vectors, None)) if defer else (leaf, vectors, None) + torch, _ = self._torch_api leaf, vectors, output, norms = None, None, None, None self._model_events.clear() @@ -292,20 +305,30 @@ def _ranked_views(self, views, view_count, selectors, embeddings=False): tensors.append(vectors) if norms is not None: tensors.append(norms) - downloaded = iter(download_tensors(tensors, self.runtime_timings)) - for begin, end in self._model_events: + if defer and leaf.device.type == "cuda" and self._download_stream is None: + self._download_stream = torch.cuda.Stream(device=leaf.device) + download = download_tensors( + tensors, self.runtime_timings, torch=torch, defer=True, stream=self._download_stream if defer else None + ) + events = tuple(self._model_events) + self._model_events.clear() + + def finish(): + downloaded = iter(download()) + for begin, end in events: self.runtime_timings["model_stream_seconds"] = ( self.runtime_timings.get("model_stream_seconds", 0.0) + begin.elapsed_time(end) / 1000 ) - self._model_events.clear() - ranks = {name: ([next(downloaded) for _ in raw], labels, mapping) for name, (raw, labels, mapping) in ranks.items()} - leaf_array = ranks[full_name][0][0] if full_name is not None else next(downloaded) - vectors = next(downloaded) if vectors is not None else None + completed = {name: ([next(downloaded) for _ in raw], labels, mapping) for name, (raw, labels, mapping) in ranks.items()} + leaf_array = completed[full_name][0][0] if full_name is not None else next(downloaded) + embedding_array = next(downloaded) if vectors is not None else None if norms is not None: - norms = next(downloaded) - if not np.isfinite(norms).all() or np.any(norms <= np.finfo(np.float32).eps): + norm_array = next(downloaded) + if not np.isfinite(norm_array).all() or np.any(norm_array <= np.finfo(np.float32).eps): raise RuntimeError("TTA produced an undefined mean embedding") - return leaf_array, vectors, ranks + return leaf_array, embedding_array, completed + + return finish if defer else finish() def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=None, **options): """Shared streaming preparation; device slots remain valid until the next iteration.""" @@ -321,7 +344,7 @@ def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=Non yield offset, views, len(views[0]) def _prepare(self, batch, pool=None): - return np.stack(list(pool.map(preprocess, batch)) if pool and len(batch) > 1 else [preprocess(item) for item in batch]) + return prepare_batch(batch, pool) def _infer(self, images, embeddings=False): return (self._torch if self.backend == "torch" else self._onnx)(images, embeddings) @@ -412,21 +435,20 @@ def predict_stream( stats=stats, ) - def process(leaves, vectors, plan, ranks, metadata): - result = Prediction(*(ranks if ranks is not None else plan.numpy(leaves)), topk, **metadata) + def process(resolve, plan, metadata): + leaves, vectors, ranks = resolve() + if not np.isfinite(leaves).all(): + raise RuntimeError("Model returned non-finite species scores") + result = Prediction(*(ranks["selected"] if ranks is not None else plan.numpy(leaves)), topk, **metadata) return (result, vectors) if embeddings else result with closing(batches), ResultWorker(process) as worker: for _, views, _ in batches: with self._lock: - leaves, vectors, ranks = self._ranked_views(views, len(views), {"selected": self.selected}, embeddings) - if not np.isfinite(leaves).all(): - raise RuntimeError("Model returned non-finite species scores") + resolve = self._ranked_views(views, len(views), {"selected": self.selected}, embeddings, defer=True) worker.submit( - leaves, - vectors, + resolve, self.hierarchy_plan(self.selected), - ranks["selected"] if ranks is not None else None, dict( model_id=self.bundle.manifest["model_id"], backend=self.backend, diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index dac8c69..3057f96 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -46,26 +46,53 @@ def _rgb(item): return array -def preprocess(item): +# The model-space interpolation grid is fixed; source-size indexing is per image. +_SIZE, _RESIZED = RECIPE["crop_size"], RECIPE["resize_size"] +_GRID = np.arange(_SIZE, dtype=np.float32) +_COORD = np.maximum((np.arange(_RESIZED, dtype=np.float32) + 0.5) * np.float32(_SIZE / _RESIZED) - 0.5, 0) +_COORD = _COORD[(_RESIZED - _SIZE) // 2 : (_RESIZED + _SIZE) // 2] +_LO = np.floor(_COORD).astype(np.intp) +_HI = np.minimum(_LO + 1, _SIZE - 1) +# Keep release rounding at half-integer pixels; constants are cached once. +_FRACTION = _COORD - _LO +_MEAN = np.array(RECIPE["mean"], dtype=np.float32)[:, None, None] +_STD = np.array(RECIPE["std"], dtype=np.float32)[:, None, None] + + +def preprocess(item, out=None): + """Apply the release geometry and normalize directly into optional batch storage.""" image = _rgb(item) - size, resized = 384, 438 - yy = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[1] / size)).astype(int), image.shape[1] - 1) - xx = np.minimum((np.arange(size, dtype=np.float32) * np.float32(image.shape[2] / size)).astype(int), image.shape[2] - 1) - image = np.ascontiguousarray(image[:, yy][:, :, xx], dtype=np.float32) - # Upsampling uses a bilinear support of one pixel (no downsampling antialias filter). - coordinates = np.maximum((np.arange(resized, dtype=np.float32) + 0.5) * np.float32(size / resized) - 0.5, 0) - offset = (resized - size) // 2 - coordinates = coordinates[offset : offset + size] - lo = np.floor(coordinates).astype(int) - hi = np.minimum(lo + 1, size - 1) - fraction = coordinates - lo - rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None] - rows = np.ascontiguousarray(rows) - pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :] - pixels = np.ascontiguousarray(np.rint(pixels).astype(np.float32) / 255) - return np.ascontiguousarray( - (pixels - np.array(RECIPE["mean"], dtype=np.float32)[:, None, None]) / np.array(RECIPE["std"], dtype=np.float32)[:, None, None] - ) + yy = np.minimum((_GRID * np.float32(image.shape[1] / _SIZE)).astype(np.intp), image.shape[1] - 1) + xx = np.minimum((_GRID * np.float32(image.shape[2] / _SIZE)).astype(np.intp), image.shape[2] - 1) + image = np.ascontiguousarray(image[:, yy[:, None], xx[None, :]], dtype=np.float32) + rows = image[:, _LO] * (1 - _FRACTION)[None, :, None] + image[:, _HI] * _FRACTION[None, :, None] + pixels = rows[:, :, _LO] * (1 - _FRACTION)[None, None, :] + rows[:, :, _HI] * _FRACTION[None, None, :] + if out is None: + out = np.empty((3, _SIZE, _SIZE), dtype=np.float32) + np.rint(pixels, out=out) + out /= 255 + out -= _MEAN + out /= _STD + return out + + +def prepare_batch(items, pool=None, transform=None): + """Fill one contiguous batch without per-image output allocations and stacking.""" + output = np.empty((len(items), 3, _SIZE, _SIZE), dtype=np.float32) + + def fill(index): + item = items[index] + if transform is not None: + item = transform(item.copy()) + preprocess(item, out=output[index]) + + if pool is not None and len(items) > 1: + for _ in pool.map(fill, range(len(items))): + pass + else: + for index in range(len(items)): + fill(index) + return output def image_items(value): diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index 30d0a4f..e5af2c2 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -2,9 +2,12 @@ import json from dataclasses import asdict, dataclass +from functools import cached_property import numpy as np +from .transfers import download_tensors + @dataclass class PredictionItem: @@ -46,11 +49,16 @@ def numpy(self, leaf): logits.append(values) return logits, self.labels, self.indices - def torch_values(self, leaf, native=None): + @cached_property + def _torch_api(self): import torch from mini_trainer.hierarchical.utils import batched_scatter_logsumexp + return torch, batched_scatter_logsumexp + + def torch_values(self, leaf, native=None): + torch, batched_scatter_logsumexp = self._torch_api if self.full and native is not None: values = native else: @@ -67,10 +75,8 @@ def torch_values(self, leaf, native=None): return values, self.labels, self.indices def torch(self, leaf, native=None): - from .transfers import download_tensors - values, labels, indices = self.torch_values(leaf, native) - return download_tensors(values), labels, indices + return download_tensors(values, torch=self._torch_api[0]), labels, indices def hierarchy(leaf, selected, classes): @@ -96,7 +102,7 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): probabilities = [] for values, idx in zip(raw, indices): exp = np.exp(values - values.max(axis=1, keepdims=True)) - probabilities.append(np.take_along_axis(exp / exp.sum(axis=1, keepdims=True), idx, axis=1)) + probabilities.append(np.take_along_axis(exp, idx, axis=1) / exp.sum(axis=1, keepdims=True)) self.confidence = np.stack(probabilities, axis=-1) self.labels = [[[labels[r][int(self.indices[b, k, r])] for r in range(3)] for k in range(topk)] for b in range(len(raw[0]))] nested = [ diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 17d208c..1310d0c 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -11,7 +11,7 @@ from PIL import Image from .augmentation import _prepare_view -from .preprocessing import _rgb, preprocess +from .preprocessing import RECIPE, _rgb, preprocess def read_image(path, size, digest): @@ -24,10 +24,17 @@ def read_image(path, size, digest): return data -def prepare_image(data, tta): +def prepare_image(data, tta, out=None): with Image.open(io.BytesIO(data)) as image: decoded = _rgb(image) - return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) + if out is None: + return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) + if tta is None: + preprocess(decoded, out=out[0]) + else: + for transform, target in zip(tta.transforms, out, strict=True): + _prepare_view(decoded, transform, out=target) + return out class BatchBuffers: @@ -51,21 +58,6 @@ def release(self, views): self.available.append(views) -def assemble_batch(images, pool=None): - """Stack and release per-image arrays on the assembler thread.""" - start = time.perf_counter() - if pool is None: - views = tuple(np.stack(view) for view in zip(*images, strict=True)) - else: - shapes = [(len(images), *view.shape) for view in images[0]] - buffers = pool.acquire(shapes) - views = tuple(buffer[: len(images)] for buffer in buffers) - for index, view in enumerate(zip(*images, strict=True)): - np.stack(view, out=views[index]) - images.clear() - return views, time.perf_counter() - start - - def prepared_stream( items, batch_size, @@ -80,10 +72,11 @@ def prepared_stream( reuse_buffers=False, buffer_factory=None, ): - """Yield (offset, stacked views) from (path, optional SHA256) items; close on early exit. + """Yield (offset, batch views) from (path, optional SHA256) items; close on early exit. IO reservations include in-flight reads and bytes held by preparation. Prepared - images are bounded by (prefetch_batches + 1) * batch_size, plus a stacked batch. + images are bounded by (prefetch_batches + 1) * batch_size, plus the consumed batch. + Workers write directly to disjoint batch slices; completion callbacks wake the coordinator. Preparation workers do not call models or sessions. Shutdown waits for running filesystem calls. """ values = (batch_size, read_workers, prepare_workers, read_window, encoded_budget) @@ -99,37 +92,56 @@ def prepared_stream( source = iter(items) capacity = batch_size * (prefetch_batches + 1) + def wake(_=None): + with condition: + state["generation"] += 1 + condition.notify_all() + + state["generation"] = 0 + def produce(): - reads, decoding, buffers, sizes = {}, {}, {}, {} - ready = {} - next_index, reserved, assemble_offset = 0, 0, 0 - assembling = None - assembling_count = 0 + reads, decoding, buffers, sizes, active = {}, {}, {}, {}, {} + next_index, reserved = 0, 0 pending = None exhausted = False - readers = ThreadPoolExecutor(max_workers=read_workers) - preparers = ThreadPoolExecutor(max_workers=prepare_workers) - assembler = ThreadPoolExecutor(max_workers=1, thread_name_prefix="mambo-assemble") + readers = ThreadPoolExecutor(max_workers=read_workers, thread_name_prefix="mambo-read") + preparers = ThreadPoolExecutor(max_workers=prepare_workers, thread_name_prefix="mambo-prepare") + shape = (batch_size, 3, RECIPE["crop_size"], RECIPE["crop_size"]) + shapes = [shape] * (1 if tta is None else len(tta.transforms)) + pool = buffer_pool or BatchBuffers(buffer_factory) try: while True: with condition: if state["stop"]: break - consumed = state["consumed"] + generation, consumed = state["generation"], state["consumed"] for index, future in list(reads.items()): if future.done(): buffers[index] = future.result() del reads[index] for index, future in list(decoding.items()): if future.done(): - result = future.result() + elapsed = future.result() del decoding[index] reserved -= sizes.pop(index) - ready[index] = result - del result - for index in sorted(buffers): + active[index // batch_size][1] += 1 + stats["preparation_worker_seconds"] = stats.get("preparation_worker_seconds", 0.0) + elapsed + for number, (views, count) in list(active.items()): + expected = min(batch_size, next_index - number * batch_size) if exhausted else batch_size + if count == expected: + with condition: + batches[number * batch_size] = tuple(view[:count] for view in views) + condition.notify_all() + del active[number] + for index in list(buffers): if index < consumed + capacity and len(decoding) < prepare_workers: - decoding[index] = preparers.submit(prepare_image, buffers.pop(index), tta) + number, slot = divmod(index, batch_size) + if number not in active: + active[number] = [pool.acquire(shapes), 0] + target = tuple(view[slot] for view in active[number][0]) + future = preparers.submit(prepare_into, buffers.pop(index), target) + decoding[index] = future + future.add_done_callback(wake) while not exhausted and next_index < consumed + read_window and len(reads) < read_workers: if pending is None: try: @@ -138,7 +150,7 @@ def produce(): exhausted = True with condition: state["end"] = next_index - condition.notify_all() + wake() break path = Path(path) size = path.stat().st_size @@ -150,43 +162,27 @@ def produce(): break sizes[next_index] = size reserved += size - reads[next_index] = readers.submit(read_image, path, size, digest) + future = readers.submit(read_image, path, size, digest) + reads[next_index] = future + future.add_done_callback(wake) next_index += 1 pending = None - if assembling is not None and assembling.done(): - views, elapsed = assembling.result() - with condition: - batches[assemble_offset] = views - stats["batch_assembly_seconds"] = stats.get("batch_assembly_seconds", 0.0) + elapsed - condition.notify_all() - del views - assembling = None - assemble_offset += assembling_count - assembling_count = 0 - end = min(assemble_offset + batch_size, next_index) if exhausted else assemble_offset + batch_size - if assembling is None and end > assemble_offset and all(i in ready for i in range(assemble_offset, end)): - assembling_count = end - assemble_offset - images = [ready.pop(i) for i in range(assemble_offset, end)] - assembling = ( - assembler.submit(assemble_batch, images, buffer_pool) if buffer_pool else assembler.submit(assemble_batch, images) - ) with condition: - prepared_count = len(ready) + sum(len(views[0]) for views in batches.values()) + assembling_count + prepared_count = sum(count for _, count in active.values()) + sum(len(v[0]) for v in batches.values()) stats.update( reading=len(reads), encoded_ready=len(buffers), preparing=len(decoding), prepared_images=prepared_count, prepared_batches=len(batches), - assembling=assembling_count, encoded_bytes=reserved, - host_buffer_allocations=buffer_pool.allocations if buffer_pool else None, + host_buffer_allocations=pool.allocations, ) stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), prepared_count + len(decoding)) - if exhausted and not reads and not decoding and not buffers and not ready and assembling is None: + if exhausted and not reads and not decoding and not buffers and not active: break - condition.wait(timeout=0.005) + condition.wait_for(lambda: state["stop"] or state["generation"] != generation) except BaseException as error: with condition: state["error"] = error @@ -196,7 +192,11 @@ def produce(): future.cancel() readers.shutdown(wait=True, cancel_futures=True) preparers.shutdown(wait=True, cancel_futures=True) - assembler.shutdown(wait=True, cancel_futures=True) + + def prepare_into(data, target): + start = time.perf_counter() + prepare_image(data, tta, out=target) + return time.perf_counter() - start producer = threading.Thread(target=produce, name="mambo-stream") producer.start() @@ -228,7 +228,7 @@ def produce(): offset = end with condition: state["consumed"] = end - condition.notify_all() + wake() finally: with condition: state["stop"] = True diff --git a/deployment/mambo_deploy/transfers.py b/deployment/mambo_deploy/transfers.py index 283b521..9a912ac 100644 --- a/deployment/mambo_deploy/transfers.py +++ b/deployment/mambo_deploy/transfers.py @@ -1,5 +1,6 @@ """Two-slot device staging; runtime imports remain optional and lazy.""" +import math import time from concurrent.futures import ThreadPoolExecutor @@ -14,31 +15,39 @@ def allocate(shape): return allocate -def download_tensors(values, stats=None): - """One completed D2H copy for all ranks/embeddings, with owning NumPy views.""" - import torch - +def download_tensors(values, stats=None, *, torch, defer=False, stream=None): + """Return CPU arrays, or a completion callable retaining buffers until D2H finishes.""" if values[0].device.type == "cpu": - return [value.float().numpy() for value in values] - start = time.perf_counter() + arrays = [value.float().numpy() for value in values] + return (lambda: arrays) if defer else arrays packed = torch.cat([value.float().reshape(-1) for value in values]) + shapes = [tuple(value.shape) for value in values] host = torch.empty(packed.shape, dtype=torch.float32, pin_memory=True) - begin = torch.cuda.Event(enable_timing=True) - begin.record(torch.cuda.current_stream(packed.device)) - host.copy_(packed, non_blocking=True) - done = torch.cuda.Event(enable_timing=True) - done.record(torch.cuda.current_stream(packed.device)) - done.synchronize() # CPU results must be complete before the result worker reads them. - if stats is not None: - stats["d2h_device_seconds"] = stats.get("d2h_device_seconds", 0.0) + begin.elapsed_time(done) / 1000 - stats["download_host_seconds"] = stats.get("download_host_seconds", 0.0) + time.perf_counter() - start - array = host.numpy() - result, offset = [], 0 - for value in values: - end = offset + value.numel() - result.append(array[offset:end].reshape(tuple(value.shape))) - offset = end - return result + current = torch.cuda.current_stream(packed.device) + stream = stream or current + stream.wait_stream(current) + with torch.cuda.stream(stream): + begin, done = torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True) + begin.record(stream) + host.copy_(packed, non_blocking=True) + done.record(stream) + packed.record_stream(stream) + + def finish(): + start = time.perf_counter() + done.synchronize() # Only the result consumer waits; no CPU access before completion. + if stats is not None: + stats["d2h_device_seconds"] = stats.get("d2h_device_seconds", 0.0) + begin.elapsed_time(done) / 1000 + stats["output_completion_wait_seconds"] = stats.get("output_completion_wait_seconds", 0.0) + time.perf_counter() - start + array = host.numpy() + result, offset = [], 0 + for shape in shapes: + end = offset + math.prod(shape) + result.append(array[offset:end].reshape(shape)) + offset = end + return result + + return finish if defer else finish() def device_batches(source, backend, device, stats): diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 54ebce8..3a4b9c0 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -12,7 +12,7 @@ from deployment.mambo_deploy import Predictor from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES -from deployment.mambo_deploy.preprocessing import preprocess +from deployment.mambo_deploy.preprocessing import prepare_batch as prepare_batch from deployment.mambo_deploy.result_worker import ResultWorker from deployment.mambo_deploy.results import Prediction from dev.benchmarks.inference.onnx_inference import file_hash @@ -36,11 +36,6 @@ def runtime_settings(threads, backend="torch"): return result -def prepare_batch(paths, pool=None): - """Ordered results and at most one model batch of prepared images.""" - return np.stack(list(pool.map(preprocess, paths)) if pool else [preprocess(path) for path in paths]) - - def collect(args): output = args.output output.mkdir(parents=True, exist_ok=False) @@ -102,20 +97,28 @@ def collect(args): name: 0.0 for name in ( "input_wait_seconds", - "runtime_seconds", + "runtime_submit_seconds", "output_wait_seconds", "hierarchy_seconds", "prediction_seconds", "write_seconds", "model_stream_seconds", "d2h_device_seconds", - "download_host_seconds", + "output_completion_wait_seconds", ) } plans = {name: predictor.hierarchy_plan(selected) for name, selected in selectors.items()} - def process(batch, leaf, ranks, offset): + def process(batch, resolve, offset): + leaf, vectors, ranks = resolve() + if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): + raise ValueError("Invalid leaf scores") + if embeddings is not None: + if vectors.shape != (len(batch), 1280) or not np.isfinite(vectors).all(): + raise ValueError("Invalid embeddings") + np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) + embeddings[offset : offset + len(batch)] = vectors phase = {name: 0.0 for name in ("hierarchy_seconds", "prediction_seconds", "write_seconds")} for name, selected in selectors.items(): t = time.perf_counter() @@ -158,7 +161,7 @@ def finish_one(): last_progress = time.perf_counter() previous_completed = 0 previous_timings = dict(timings) - previous_assembly = 0.0 + previous_preparation = 0.0 while True: waiting = time.perf_counter() try: @@ -171,18 +174,11 @@ def finish_one(): break timings["input_wait_seconds"] += time.perf_counter() - waiting t = time.perf_counter() - leaf, vectors, ranks = predictor._ranked_views(views, len(views), selectors, args.embeddings) - timings["runtime_seconds"] += time.perf_counter() - t + resolve = predictor._ranked_views(views, len(views), selectors, args.embeddings, defer=True) + timings["runtime_submit_seconds"] += time.perf_counter() - t timings.update(predictor.runtime_timings) - if leaf.shape != (len(batch), len(predictor.bundle.classes["labels"][0])) or not np.isfinite(leaf).all(): - raise ValueError("Invalid leaf scores") - if embeddings is not None: - if vectors.shape != (len(batch), 1280) or not np.isfinite(vectors).all(): - raise ValueError("Invalid embeddings") - np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) - embeddings[offset : offset + len(batch)] = vectors - worker.submit(batch, leaf, ranks, offset) - del views + worker.submit(batch, resolve, offset) + if len(worker.pending) == 2: completed += finish_one() now = time.perf_counter() @@ -190,8 +186,8 @@ def finish_one(): interval = now - last_progress rate = (completed - previous_completed) / interval phase_seconds = {name: round(value - previous_timings[name], 3) for name, value in timings.items()} - assembly = stream_stats.get("batch_assembly_seconds", 0.0) - phase_seconds["background_assembly_seconds"] = round(assembly - previous_assembly, 3) + preparation = stream_stats.get("preparation_worker_seconds", 0.0) + phase_seconds["background_preparation_worker_seconds"] = round(preparation - previous_preparation, 3) # Retain the existing machine-readable count line for live monitors. print(f"{args.backend} {args.device}: {completed}/{len(records)}", flush=True) eta = f"{(len(records) - completed) / rate / 60:.1f} min" if rate else "waiting for first written batch" @@ -199,8 +195,9 @@ def finish_one(): print(f"interval={interval:.3f}s; phases={phase_seconds}", flush=True) previous_timings = dict(timings) previous_completed = completed - previous_assembly = assembly + previous_preparation = preparation last_progress = now + timings.update(predictor.runtime_timings) if embeddings is not None: embeddings.flush() if args.backend == "onnx": diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 7d90039..ce024af 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -581,3 +581,32 @@ Single-request benchmark cells retain their existing execution path. Local validation covers CUDA buffer reuse and source lifetime, real PyTorch predictions with global/regional lists and TTA/embeddings, and real ONNX CUDA TTA/embedding collection. B200 throughput is not yet established for this change. + + +## Simplified preparation and Torch result completion + +The deployment runtime now fills reusable batch slices directly from preparation +workers. The separate batch-assembly executor and polling loop have been removed; +request prediction and release diagnostic helpers also avoid per-image output +allocation followed by stacking. The release geometry and pixel rounding are +preserved. These changes need no dependency or environment update. + +Torch streaming submits packed output downloads on a separate CUDA stream. The +existing result worker waits for completion before accessing CPU arrays, allowing +the inference thread to submit the next batch. ONNX still returns completed CPU +outputs from its runtime call. Both paths preserve ordered, bounded results. + +For new reports, `runtime_submit_seconds` replaces `runtime_seconds`: Torch's +value no longer includes waiting for output completion; ONNX's still includes its +synchronous execution. `output_completion_wait_seconds` measures the result +worker's D2H completion wait. `preparation_worker_seconds` replaces the removed +assembly counter and **sums concurrent worker durations**, so it can exceed wall +time. `model_stream_seconds` and `d2h_device_seconds` remain CUDA-event intervals. +None of these overlapping measurements should be summed into elapsed time. + +Existing completed campaign results remain valid historical evidence. A new +campaign is needed only to measure the revised implementation; do not overwrite +`runs-transfers` or mix its benchmark reports with new measurements. Completed V2 +qualification/full results can still be reused with `--reuse-v2-from`. See the +[implementation follow-up](../../../docs/mambo-inference-pipeline-review.md#implementation-follow-up) +for local qualification and the limits of the current changes. diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index 8b8be67..3aeb8c8 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -234,6 +234,7 @@ def invocation(command): "dev/releases/mambo_v3/prefetch.py", "dev/releases/mambo_v3/ucloud_release.py", "deployment/mambo_deploy/augmentation.py", + "deployment/mambo_deploy/preprocessing.py", "deployment/mambo_deploy/streaming.py", "deployment/mambo_deploy/result_worker.py", "deployment/mambo_deploy/transfers.py", diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index c39962e..4039dbc 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -1,8 +1,8 @@ # V2/V3 inference pipeline review Review date: 25 September 2026. Code baseline: `0eb90b2`; V2 source: -`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. This is a design review, not an -implementation change. Evidence is the completed UCloud campaign and source +`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. The review below records the original design baseline; the +[implementation follow-up](#implementation-follow-up) records subsequent changes. Evidence is the completed UCloud campaign and source inspection. No new B200 measurements have been made. The concern is substantially justified: several V3 changes restored efficiency @@ -348,3 +348,73 @@ would need an actual sustained end-to-end measurement; the prepared-input number only show that the current hundreds-of-images/s plateau is not an established model ceiling. Existing CUDA compilation/graph and decoder accelerators can follow if the simplified pipeline exposes those as the next material limit. + + +## Implementation follow-up + +Implemented on 25 September 2026 against baseline `7a8f53a`, confined to deployment +and the release harness. This is a bounded replacement of the preparation and +completion boundaries, not a claim that all proposed architecture work is finished. + +- Preparation workers now normalize directly into disjoint reusable batch slices. + Removed the serial assembly executor, per-image output/stack copies, repeated + buffer sorting and 5 ms polling. Completion callbacks wake the coordinator. + Request prediction, TTA and release diagnostic helpers use the same direct-fill + preparation operations. Separate read/prepare concurrency remains useful for + high storage latency and is still independently bounded. +- Cached the fixed interpolation geometry and normalization constants, and replaced + source-width intermediate indexing with direct two-axis selection. Retained the + original interpolation precision and release pixel hashes. The earlier float32 + coefficient probe remains experimental; its larger speedup is not claimed here. +- Torch output copies now run on a dedicated CUDA stream. The existing bounded + result worker owns completion waits and CPU processing, allowing the submitting + thread to continue. Device buffer reuse remains protected by CUDA events; output + allocations retain their lifetime until completion. Standalone ONNX retains its + synchronous output boundary without acquiring a Torch dependency. +- Top-k confidence construction normalizes only selected entries, avoiding a full + normalized probability matrix. The full raw-logit public contract is preserved. +- Backend imports and hierarchy helpers are cached on first use. Transfer setup + imports remain at stream initialization; repeated batch execution reuses loaded + backend references. No new dependency or configuration control was introduced. + +The remaining scheduler, two device slots and result worker retain explicit bounded +ownership. This removes one execution stage rather than adding another executor. +The request and streaming APIs still have different scheduling because requests +accept in-memory images and return accumulated results. Torch still computes +parent ranks per TTA view and repeats embedding preparation when requested; those +are not solved by this change. Moving resize work to GPU or compacting the public +result contract also remains separate work. The current core embedding context is +process-global, so using it across independent predictors would require a core +concurrency change through the prescribed feature-branch workflow. + +### Local evidence + +RTX 3080 Ti Laptop GPU, 256 real Flemming images, warm filesystem, batch 16, +global vocabulary, Torch auto precision, four preparation/runtime threads for +inference; median of three process-local trials after model warmup: + +| Measurement | Before, images/s | After, images/s | +|---|---:|---:| +| Host preparation, 4 workers | 204.2 | 290.4 | +| Host preparation, 16 workers | 248.2 | 340.2 | +| GPU request, including preparation/results | 162.5 | 163.9 | +| GPU streaming, including preparation/results | 183.7 | 202.3 | + +Preparation includes reading, decode, transforms and batch delivery, with buffer +reuse. The request result is essentially unchanged. Streaming trial ranges overlap +(before 160–198, after 189–214 images/s), so its roughly 10% median increase is +preliminary. This short, sequential local comparison is neither a B200 projection +nor a replacement for the published campaign benchmarks. It tests smaller cropped +images, not large in-domain photographs or cold WEKA storage. + +All before/after predicted classes matched at all three ranks. Scripts and raw +measurements are retained, uncommitted, in `local-evidence/pipeline-review/` +(`compare_pipeline.py`, `before.json`, `after-final.json` and prediction arrays). +Focused checks cover release pixels, custom transforms, ordering, bounds, errors, +early close, CUDA slot reuse and deferred download ownership. Real-model CUDA +checks cover global/northern-Europe lists, default TTA, embeddings and partial +batches, for Torch and standalone ONNX (without importing Torch). A 65-image +Torch release collection additionally verified both preset CSVs, embeddings and +final timing totals. Static checks passed; the affected suite passed 95 tests with +two metric-environment tests skipped. No metric code changed. B200 throughput and +a full quality campaign have not been rerun. diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index c793a6b..49928c5 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -48,8 +48,8 @@ def read(path, size, digest): assert later.wait(3), "later images must prepare while first read waits" return original_read(path, size, digest) - def prepare(data, tta): - result = original_prepare(data, tta) + def prepare(data, tta, out=None): + result = original_prepare(data, tta, out=out) later.set() return result @@ -72,31 +72,32 @@ def test_failure_close_and_empty(tmp_path): assert not any(t.name == "mambo-stream" for t in threading.enumerate()) -def test_assembly_runs_in_background_and_errors_propagate(tmp_path, monkeypatch): +def test_workers_fill_batch_storage_and_errors_propagate(tmp_path, monkeypatch): items = inputs(tmp_path, 5) - original = streaming.assemble_batch - calls = [] + original = streaming.prepare_image + targets = [] - def assemble(images): - calls.append(threading.current_thread().name) - result = original(images) - assert images == [] # Per-image buffers are released by the assembler. - return result + def prepare(data, tta, out=None): + assert out is not None + targets.append((threading.current_thread().name, out[0])) + return original(data, tta, out=out) - monkeypatch.setattr(streaming, "assemble_batch", assemble) + monkeypatch.setattr(streaming, "prepare_image", prepare) stats = {} - assert len(list(streaming.prepared_stream(items, 2, stats=stats))) == 3 - assert len(calls) == 3 and all(name.startswith("mambo-assemble") for name in calls) - assert stats["batch_assembly_seconds"] > 0 + batches = list(streaming.prepared_stream(items, 2, stats=stats)) + assert len(targets) == 5 + assert all(name.startswith("mambo-prepare") for name, _ in targets) + assert all(any(np.shares_memory(target, views[0]) for _, views in batches) for _, target in targets) + assert stats["preparation_worker_seconds"] > 0 assert stats["queue_wait_seconds"] == stats["input_wait_seconds"] - def fail(images): - raise ValueError("assembly failure") + def fail(data, tta, out=None): + raise ValueError("preparation failure") - monkeypatch.setattr(streaming, "assemble_batch", fail) - with pytest.raises(ValueError, match="assembly failure"): + monkeypatch.setattr(streaming, "prepare_image", fail) + with pytest.raises(ValueError, match="preparation failure"): list(streaming.prepared_stream(items, 2)) - assert not any(t.name.startswith("mambo-assemble") for t in threading.enumerate()) + assert not any(t.name.startswith("mambo-prepare") for t in threading.enumerate()) def test_result_worker_order_bounds_overlap_and_failure(): @@ -130,7 +131,7 @@ def test_reusable_batch_buffers_are_bounded(tmp_path, monkeypatch): items = inputs(tmp_path, 21) stats = {} # Keep the test about ownership/reuse, not expensive image interpolation. - monkeypatch.setattr(streaming, "prepare_image", lambda data, tta: (np.full((3, 2, 2), len(data), dtype=np.float32),)) + monkeypatch.setattr(streaming, "prepare_image", lambda data, tta, out: out[0].fill(len(data))) pointers = set() count = 0 with closing(streaming.prepared_stream(items, 2, prefetch_batches=2, reuse_buffers=True, stats=stats)) as batches: @@ -164,8 +165,29 @@ def source(): with closing(device_batches(source(), "torch", "cuda:0", stats)) as batches: for offset, views, count in batches: pointers.add(views[0].data_ptr()) - result = download_tensors([views[0] * 2])[0] + result = download_tensors([views[0] * 2], torch=torch)[0] np.testing.assert_array_equal(result, np.full((count, 3, 4, 4), offset, dtype=np.float32)) assert len(pointers) == 2 assert stats["device_buffer_allocations"] == 2 assert stats["h2d_device_seconds"] >= 0 + + +def test_cuda_deferred_download_retains_outputs_after_slot_reuse(): + import torch + + from deployment.mambo_deploy.transfers import download_tensors + + if not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + stream = torch.cuda.Stream() + source = torch.empty((8, 128), device="cuda") + pending = [] + for index in range(6): + source.fill_(index) + # Completing later must retain this batch, not expose a reused device slot. + pending.append(download_tensors([source[: index + 1], source.sum(1)], torch=torch, defer=True, stream=stream)) + del source + for index, complete in enumerate(pending): + values, sums = complete() + np.testing.assert_array_equal(values, np.full((index + 1, 128), index)) + np.testing.assert_array_equal(sums, np.full(8, index * 128)) From dcb00d0de694e8212cc5c06feb8d547b4b7a3e84 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 09:22:19 +0200 Subject: [PATCH 077/221] dev: add a bounded four-variant UCloud speed smoke test --- dev/releases/mambo_v3/speed-smoke.md | 61 ++++++++++ dev/releases/mambo_v3/speed_smoke.py | 142 ++++++++++++++++++++++++ dev/releases/mambo_v3/ucloud-release.md | 3 + tests/releases/test_speed_smoke.py | 70 ++++++++++++ 4 files changed, 276 insertions(+) create mode 100644 dev/releases/mambo_v3/speed-smoke.md create mode 100644 dev/releases/mambo_v3/speed_smoke.py create mode 100644 tests/releases/test_speed_smoke.py diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md new file mode 100644 index 0000000..821573b --- /dev/null +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -0,0 +1,61 @@ +# Short UCloud speed check: full B200, then one MIG slice + +Run from this checkout on each manually allocated node with `/work/datasets` mounted. +This measures **V3 PyTorch, ONNX, and each with default TTA**. No V2 run, quality +metrics, full-dataset preparation, campaign configuration or tuning sweep. + +Use the existing working Torch and qualified ONNX environments. Pull the release +branch first; no reinstall is needed when those environments already exist. + +```sh +export MAMBO_CACHE=/work/mambo-cache +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --onnx-python /tmp/mambo-ort-ptx/bin/python \ + --output /work/mambo-speed/b200-full +``` + +On the second node, run the same command with `--output /work/mambo-speed/b200-mig`. +Use a **single visible MIG slice**, not the entire parent GPU. `environment.json` +records `nvidia-smi -L`, visible-device settings and the CPU quota, so retain the +exact MIG profile when comparing results. The full node and slice may also differ +in their CPU allocation; this is a deployment comparison, not isolated GPU scaling. + +The script selects the same 4,096 original test images, hashes/warms only those, +and downloads standard release weights if absent. Each variant uses batch 256, +the global list, auto precision, no embeddings, and three streaming passes. +Preparation workers follow the exposed CPU quota (maximum 48); override with +`--workers N` if the container does not expose the UCloud CPU allocation correctly. +Keep both runs on the same commit and runtime versions. + +Expect minutes, with the small MIG slice potentially taking tens of minutes; +initial model downloads and cold storage add setup time. Each completed variant +prints a row and updates `summary.csv`. Runtime output and errors are in its `.log`. +Stop after these four variants on each node unless the results expose a specific +failure or unexplained regression. + +**Return the two output folders**, or initially just both `summary.csv` and +`environment.json` files. The JSON reports retain raw trial timings, runtime +versions, preparation counters, host memory, and Torch allocator peak GPU memory. +The primary comparison is streaming images/s. Request timing is a separate API +measurement; the prepared-input diagnostic is single-view even in TTA reports. +Memory figures are not all-backend GPU peak measurements. This is a warm-storage +speed check, not a quality evaluation or a measurement of cold WEKA throughput. + +## Only if the new node needs environments + +These commands reuse the previously successful split between Torch and ONNX; +they do not revisit runtime selection during this speed test. + +```sh +uv venv --python 3.13 .venv-mambo-runtime +uv pip install --python .venv-mambo-runtime/bin/python --torch-backend=auto \ + -e '.[timm]' -e ./deployment pyarrow +uv venv --python 3.13 /tmp/mambo-ort-ptx +uv pip install --python /tmp/mambo-ort-ptx/bin/python \ + 'onnxruntime-gpu[cuda,cudnn]==1.22.0' -e ./deployment +``` + +Use the ONNX version already qualified on B200 here. This is an environment-specific +test setup, not a new deployment-wide dependency pin. Existing environments need +none of these installation commands. diff --git a/dev/releases/mambo_v3/speed_smoke.py b/dev/releases/mambo_v3/speed_smoke.py new file mode 100644 index 0000000..9861e00 --- /dev/null +++ b/dev/releases/mambo_v3/speed_smoke.py @@ -0,0 +1,142 @@ +"""One small four-variant GPU speed check; no campaign setup or full-data hashing.""" + +import argparse +import json +import math +import os +import random +import subprocess +import sys +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import pyarrow.compute as pc +import pyarrow.parquet as pq + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.augmentation import DEFAULT_TTA +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + +SEED = 20260923 + + +def workers(): + count = len(os.sched_getaffinity(0)) + quota = Path("/sys/fs/cgroup/cpu.max") + if quota.exists(): + limit, period = quota.read_text().split() + if limit != "max": + count = min(count, math.ceil(int(limit) / int(period))) + return min(count, 48) + + +def sample(metadata, count=4096): + table = pq.read_table(metadata, columns=["filename", "set", "speciesKey", "genusKey", "familyKey"]) + table = table.filter(pc.equal(table["set"], "0")) + if len(table) < count: + raise ValueError(f"Need {count} test images, found {len(table)}") + rows = table.take(random.Random(SEED).sample(range(len(table)), count)).to_pylist() + records = [] + root = metadata.parent.resolve() + for row in rows: + path = f"images/{row['speciesKey']}/{row['filename']}" + if not (root / path).resolve().is_relative_to(root): + raise ValueError(f"Unsafe image path: {path}") + records.append({"path": path, "labels": [row[k] for k in ("speciesKey", "genusKey", "familyKey")], "split": "test"}) + return records + + +def run(args): + args.output.mkdir(parents=True, exist_ok=False) + prepare_workers = args.workers or workers() + root = args.metadata.resolve().parent + print("Selecting and warming 4,096 test images; the full dataset is not scanned for images.", flush=True) + records = sample(args.metadata) + with ThreadPoolExecutor(max_workers=128) as pool: + for record, digest in zip(records, pool.map(file_hash, (root / r["path"] for r in records)), strict=True): + record["sha256"] = digest + manifest = args.output / "sample.json" + write_json(manifest, {"schema_version": 1, "dataset": "global-lepi-speed-sample", "records": records}) + write_json( + args.output / "environment.json", + { + "commit": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "gpu": subprocess.check_output(["nvidia-smi"], text=True), + "gpu_instances": subprocess.check_output(["nvidia-smi", "-L"], text=True), + "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"), + "cpu_max": Path("/sys/fs/cgroup/cpu.max").read_text() if Path("/sys/fs/cgroup/cpu.max").exists() else None, + "prepare_workers": prepare_workers, + "metadata_sha256": file_hash(args.metadata), + "sample_sha256": file_hash(manifest), + }, + ) + print("Checking/downloading the standard release weights.", flush=True) + bundle = Predictor().bundle + bundle.profile("torch") + bundle.profile("onnx") + summary = ["variant,stream_images_per_second,request_images_per_second,peak_host_gib"] + for backend, tta in (("torch", "none"), ("onnx", "none"), ("torch", DEFAULT_TTA), ("onnx", DEFAULT_TTA)): + name = backend + ("-tta" if tta != "none" else "") + print(f"{name}: batch 256, {prepare_workers} preparation workers; three streaming passes", flush=True) + output = args.output / name + options = { + "bundle": bundle.root, + "manifest": manifest, + "root": root, + "output": output, + "backend": backend, + "device": "cuda:0", + "precision": "auto", + "tta": tta, + "batches": 256, + "presets": "full", + "bank-size": 256, + "stream-images": 4096, + "repeats": 3, + "warmup": 2, + "threads": 4, + "stream-workers": prepare_workers, + "read-workers": 128, + "read-window": 4096, + "prefetch-batches": 2, + "encoded-budget-mib": 1024, + } + interpreter = str(args.onnx_python) if backend == "onnx" else sys.executable + command = [interpreter, "-m", "dev.releases.mambo_v3.benchmark"] + command.extend(part for key, value in options.items() for part in ("--" + key, str(value))) + with (args.output / f"{name}.log").open("w") as log: + try: + subprocess.run(command, check=True, stdout=log, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + print(f"Failed; inspect {args.output / (name + '.log')}", flush=True) + raise + report = json.loads((output / "report.json").read_text()) + cell = report["cells"][0] + row = ( + f"{name},{cell['streaming']['images_per_second']:.1f}," + f"{cell['images_per_second']:.1f},{report['peak_rss_kib_linux'] / 1024**2:.2f}" + ) + summary.append(row) + (args.output / "summary.csv").write_text("\n".join(summary) + "\n") + print(row, flush=True) + print(f"Done: {args.output / 'summary.csv'}", flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--metadata", type=Path, required=True) + parser.add_argument("--onnx-python", type=Path, required=True, help="Interpreter in the already qualified ONNX environment") + parser.add_argument("--output", type=Path, required=True, help="New persistent directory under /work") + parser.add_argument("--workers", type=int, help="Preparation workers; defaults to CPU quota, capped at 48") + args = parser.parse_args() + if args.workers is not None and args.workers < 1: + parser.error("--workers must be positive") + args.onnx_python = args.onnx_python.absolute() + if not args.onnx_python.is_file(): + parser.error("--onnx-python must identify an existing interpreter") + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index ce024af..9b2c8c7 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -5,6 +5,9 @@ global-lepi dataset mounted. Clone this release branch with its Git history ther the scripts live in `dev/releases/mambo_v3` and are not included in the deployment wheel. No allocation or remote submission is performed by these commands. +For a short full-B200 versus MIG speed check, use the +[four-variant speed smoke test](speed-smoke.md) instead of this campaign workflow. + ## Setup with uv From the checkout root, resolve runtime dependencies afresh for this machine. diff --git a/tests/releases/test_speed_smoke.py b/tests/releases/test_speed_smoke.py new file mode 100644 index 0000000..d8e4b86 --- /dev/null +++ b/tests/releases/test_speed_smoke.py @@ -0,0 +1,70 @@ +import argparse +import json +from pathlib import Path +from types import SimpleNamespace + +import pyarrow as pa +import pyarrow.parquet as pq +import pytest + +from dev.releases.mambo_v3 import speed_smoke + + +def metadata(tmp_path): + path = tmp_path / "metadata.parquet" + pq.write_table( + pa.table( + { + "filename": [f"{i}.jpg" for i in range(8)], + "set": ["0"] * 6 + ["1"] * 2, + "speciesKey": ["species"] * 8, + "genusKey": ["genus"] * 8, + "familyKey": ["family"] * 8, + } + ), + path, + ) + return path + + +def test_sample_preserves_original_test_membership(tmp_path): + path = metadata(tmp_path) + records = speed_smoke.sample(path, 4) + assert records == speed_smoke.sample(path, 4) + assert len({r["path"] for r in records}) == 4 + assert all(int(Path(r["path"]).stem) < 6 and r["labels"] == ["species", "genus", "family"] for r in records) + with pytest.raises(ValueError, match="Need 7 test images"): + speed_smoke.sample(path, 7) + + +def test_four_variants_reuse_sample_and_route_interpreters(tmp_path, monkeypatch): + path = metadata(tmp_path) + original = speed_smoke.sample + monkeypatch.setattr(speed_smoke, "sample", lambda p: original(p, 4)) + for r in original(path, 4): + image = tmp_path / r["path"] + image.parent.mkdir(parents=True, exist_ok=True) + image.write_bytes(b"sample bytes") + bundle = SimpleNamespace(root=tmp_path, profile=lambda name: None) + monkeypatch.setattr(speed_smoke, "Predictor", lambda: SimpleNamespace(bundle=bundle)) + monkeypatch.setattr(speed_smoke.subprocess, "check_output", lambda *a, **k: "fixture") + calls = [] + + def benchmark(command, **kwargs): + calls.append(command) + output = Path(command[command.index("--output") + 1]) + output.mkdir() + (output / "report.json").write_text( + json.dumps({"cells": [{"streaming": {"images_per_second": 123}, "images_per_second": 100}], "peak_rss_kib_linux": 1024}) + ) + + monkeypatch.setattr(speed_smoke.subprocess, "run", benchmark) + args = argparse.Namespace(metadata=path, output=tmp_path / "results", onnx_python=Path("/separate-onnx/bin/python"), workers=6) + speed_smoke.run(args) + assert [c[0] for c in calls] == [speed_smoke.sys.executable, str(args.onnx_python)] * 2 + assert [c[c.index("--tta") + 1] for c in calls] == ["none", "none", speed_smoke.DEFAULT_TTA, speed_smoke.DEFAULT_TTA] + assert len({c[c.index("--manifest") + 1] for c in calls}) == 1 + assert all(c[c.index("--batches") + 1] == "256" for c in calls) + assert len((args.output / "summary.csv").read_text().splitlines()) == 5 + with pytest.raises(FileExistsError): + speed_smoke.run(args) From 9ad49095c1cd06bb99a12c83dcfa4baa72f88fd0 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 10:07:39 +0200 Subject: [PATCH 078/221] perf: stage compact images and batch Torch preprocessing on device --- deployment/README.md | 3 +- deployment/mambo_deploy/augmentation.py | 11 ++--- deployment/mambo_deploy/predictor.py | 32 +++++++++++--- deployment/mambo_deploy/preprocessing.py | 47 ++++++++++++++++---- deployment/mambo_deploy/streaming.py | 22 +++++----- deployment/mambo_deploy/transfers.py | 9 ++-- dev/releases/mambo_v3/speed-smoke.md | 5 +++ docs/mambo-inference-pipeline-review.md | 56 ++++++++++++++++++++++++ tests/releases/test_deployment.py | 35 ++++++++++++++- tests/releases/test_streaming.py | 34 ++++++++++---- 10 files changed, 209 insertions(+), 45 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index fb4cf23..c5e50a1 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -223,7 +223,8 @@ independent of model batch size, which the read window must accommodate. A suppl summed preparation-worker time. Workers fill batch storage directly; preparation time overlaps inference and sums concurrent workers, so it is not elapsed time. CUDA streaming reuses device buffers and stages the next batch in a transfer worker. -PyTorch uses pinned host buffers and a separate CUDA copy stream; ONNX uses device +PyTorch stages compact uint8 images and finishes preprocessing on the GPU, using +pinned host buffers and a separate CUDA copy stream; ONNX uses device inputs with I/O binding, with copy overlap determined by the runtime. Set `device_prefetch=False` to disable device staging for comparison. PyTorch downloads ranks and embeddings together; the result worker waits for completion while the diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index 9f73e51..d6eff5a 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -6,7 +6,7 @@ import numpy as np from PIL import Image -from .preprocessing import _rgb, prepare_batch, preprocess +from .preprocessing import _rgb, prepare_batch, prepare_uint8, preprocess @dataclass(frozen=True) @@ -151,18 +151,19 @@ def resolve_tta(value): return TTA(views, value) -def _prepare_view(image, transform, out=None): - return preprocess(transform(image.copy()), out=out) +def _prepare_view(image, transform, out=None, *, compact=False): + prepare = prepare_uint8 if compact else preprocess + return prepare(transform(image.copy()), out=out) -def prepared_views(items, tta, pool=None): +def prepared_views(items, tta, pool=None, *, compact=False): """Decode once and lazily prepare views in recipe order.""" def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] decoded = mapped(_rgb, items) - views = (prepare_batch(decoded, pool, transform) for transform in tta.transforms) + views = (prepare_batch(decoded, pool, transform, compact=compact) for transform in tta.transforms) return views diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index ca2a839..6422f4d 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -16,7 +16,7 @@ from .bundle import Bundle from .download import default_bundle from .onnx_session import create_session -from .preprocessing import RECIPE, image_items, prepare_batch +from .preprocessing import RECIPE, TorchPreprocess, image_items, prepare_batch from .result_worker import ResultWorker from .results import HierarchyPlan, Prediction from .streaming import prepared_stream @@ -182,6 +182,14 @@ def _torch_api(self): raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error return torch, bypass_submodule + @cached_property + def _device_preprocess(self): + return TorchPreprocess(self._torch_api[0], self.device) + + @property + def _compact_inputs(self): + return self.backend == "torch" and self.device != "cpu" + def _onnx(self, images, embeddings): ort = self._onnx_api key = "onnx-embedding" if embeddings else "onnx" @@ -248,6 +256,8 @@ def _torch(self, images, embeddings, *, tensors=False): bypass_submodule(self._torch_model, self._torch_model._backbone_output_name), ): tensor = images if isinstance(images, torch.Tensor) else torch.from_numpy(images).to(self.device) + if tensor.dtype == torch.uint8: + tensor = self._device_preprocess(tensor) events = None if tensors and tensor.device.type == "cuda": events = (torch.cuda.Event(enable_timing=True), torch.cuda.Event(enable_timing=True)) @@ -331,11 +341,17 @@ def finish(): return finish if defer else finish() def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=None, **options): - """Shared streaming preparation; device slots remain valid until the next iteration.""" + """Yield backend inputs: CUDA Torch uint8 squares, otherwise normalized FP32. + + Device slots remain valid until the next iteration. + """ stats = {} if stats is None else stats accelerated = device_prefetch and self.device != "cpu" - factory = pinned_factory(self.device) if accelerated and self.backend == "torch" else None - source = prepared_stream(items, batch_size, tta=self.tta, stats=stats, reuse_buffers=True, buffer_factory=factory, **options) + compact = self._compact_inputs + factory = pinned_factory(self.device, compact=compact) if accelerated and self.backend == "torch" else None + source = prepared_stream( + items, batch_size, tta=self.tta, stats=stats, reuse_buffers=True, buffer_factory=factory, compact=compact, **options + ) if accelerated: yield from device_batches(source, self.backend, self.device, stats) else: @@ -344,7 +360,7 @@ def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=Non yield offset, views, len(views[0]) def _prepare(self, batch, pool=None): - return prepare_batch(batch, pool) + return prepare_batch(batch, pool, compact=self._compact_inputs) def _infer(self, images, embeddings=False): return (self._torch if self.backend == "torch" else self._onnx)(images, embeddings) @@ -361,7 +377,11 @@ def _predict(self, x, embeddings=False, topk=1): with ThreadPoolExecutor(max_workers=self.preprocess_workers) if self.preprocess_workers > 1 else nullcontext(None) as pool: while batch := list(islice(items, self.batch_size)): if self.backend == "torch": - views = prepared_views(batch, self.tta, pool) if self.tta else (self._prepare(batch, pool),) + views = ( + prepared_views(batch, self.tta, pool, compact=self._compact_inputs) + if self.tta + else (self._prepare(batch, pool),) + ) leaves, vectors, ranks = self._ranked_views( views, len(self.tta.transforms) if self.tta else 1, {"selected": self.selected}, embeddings ) diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index 3057f96..f57d03a 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -1,4 +1,4 @@ -"""Campaign image recipe on CPU, shared by both runtimes.""" +"""Release image geometry with portable CPU and batched Torch finishing.""" from pathlib import Path @@ -53,18 +53,27 @@ def _rgb(item): _COORD = _COORD[(_RESIZED - _SIZE) // 2 : (_RESIZED + _SIZE) // 2] _LO = np.floor(_COORD).astype(np.intp) _HI = np.minimum(_LO + 1, _SIZE - 1) -# Keep release rounding at half-integer pixels; constants are cached once. -_FRACTION = _COORD - _LO +# FP32 is sufficient for image interpolation; avoid promoting every temporary to FP64. +_FRACTION = _COORD - _LO.astype(np.float32) _MEAN = np.array(RECIPE["mean"], dtype=np.float32)[:, None, None] _STD = np.array(RECIPE["std"], dtype=np.float32)[:, None, None] -def preprocess(item, out=None): - """Apply the release geometry and normalize directly into optional batch storage.""" +def prepare_uint8(item, out=None): + """Decode and apply the recipe's nearest-square step, retaining compact pixels.""" image = _rgb(item) yy = np.minimum((_GRID * np.float32(image.shape[1] / _SIZE)).astype(np.intp), image.shape[1] - 1) xx = np.minimum((_GRID * np.float32(image.shape[2] / _SIZE)).astype(np.intp), image.shape[2] - 1) - image = np.ascontiguousarray(image[:, yy[:, None], xx[None, :]], dtype=np.float32) + square = image[:, yy[:, None], xx[None, :]] + if out is None: + return np.ascontiguousarray(square) + out[...] = square + return out + + +def preprocess(item, out=None): + """Finish the release geometry and normalization in FP32 on CPU.""" + image = prepare_uint8(item).astype(np.float32) rows = image[:, _LO] * (1 - _FRACTION)[None, :, None] + image[:, _HI] * _FRACTION[None, :, None] pixels = rows[:, :, _LO] * (1 - _FRACTION)[None, None, :] + rows[:, :, _HI] * _FRACTION[None, None, :] if out is None: @@ -76,15 +85,16 @@ def preprocess(item, out=None): return out -def prepare_batch(items, pool=None, transform=None): +def prepare_batch(items, pool=None, transform=None, *, compact=False): """Fill one contiguous batch without per-image output allocations and stacking.""" - output = np.empty((len(items), 3, _SIZE, _SIZE), dtype=np.float32) + output = np.empty((len(items), 3, _SIZE, _SIZE), dtype=np.uint8 if compact else np.float32) + prepare = prepare_uint8 if compact else preprocess def fill(index): item = items[index] if transform is not None: item = transform(item.copy()) - preprocess(item, out=output[index]) + prepare(item, out=output[index]) if pool is not None and len(items) > 1: for _ in pool.map(fill, range(len(items))): @@ -95,6 +105,25 @@ def fill(index): return output +class TorchPreprocess: + """Finish a batch of uint8 squares with native operations on its Torch device.""" + + def __init__(self, torch, device): + self.torch = torch + self.mean = torch.as_tensor(_MEAN, device=device) + self.std = torch.as_tensor(_STD, device=device) + + def __call__(self, images): + torch = self.torch + with torch.autocast(images.device.type, enabled=False): + values = torch.nn.functional.interpolate( + images.float(), size=(_RESIZED, _RESIZED), mode="bilinear", align_corners=False, antialias=False + ) + start = (_RESIZED - _SIZE) // 2 + values = values[..., start : start + _SIZE, start : start + _SIZE] + return values.round_().div_(255).sub_(self.mean).div_(self.std) + + def image_items(value): if isinstance(value, (str, Path, Image.Image)): return iter([value]) diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 1310d0c..69e6e8a 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -11,7 +11,7 @@ from PIL import Image from .augmentation import _prepare_view -from .preprocessing import RECIPE, _rgb, preprocess +from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess def read_image(path, size, digest): @@ -24,22 +24,23 @@ def read_image(path, size, digest): return data -def prepare_image(data, tta, out=None): +def prepare_image(data, tta, out=None, *, compact=False): with Image.open(io.BytesIO(data)) as image: decoded = _rgb(image) + prepare = prepare_uint8 if compact else preprocess if out is None: - return (preprocess(decoded),) if tta is None else tuple(_prepare_view(decoded, view) for view in tta.transforms) + return (prepare(decoded),) if tta is None else tuple(_prepare_view(decoded, view, compact=compact) for view in tta.transforms) if tta is None: - preprocess(decoded, out=out[0]) + prepare(decoded, out=out[0]) else: for transform, target in zip(tta.transforms, out, strict=True): - _prepare_view(decoded, transform, out=target) + _prepare_view(decoded, transform, out=target, compact=compact) return out class BatchBuffers: - def __init__(self, factory=None): - self.factory = factory or (lambda shape: np.empty(shape, dtype=np.float32)) + def __init__(self, factory=None, *, compact=False): + self.factory = factory or (lambda shape: np.empty(shape, dtype=np.uint8 if compact else np.float32)) self.available = [] self.lock = threading.Lock() self.allocations = 0 @@ -71,6 +72,7 @@ def prepared_stream( stats=None, reuse_buffers=False, buffer_factory=None, + compact=False, ): """Yield (offset, batch views) from (path, optional SHA256) items; close on early exit. @@ -88,7 +90,7 @@ def prepared_stream( condition = threading.Condition() state = dict(stop=False, consumed=0, end=None, error=None) batches = {} - buffer_pool = BatchBuffers(buffer_factory) if reuse_buffers else None + buffer_pool = BatchBuffers(buffer_factory, compact=compact) if reuse_buffers else None source = iter(items) capacity = batch_size * (prefetch_batches + 1) @@ -108,7 +110,7 @@ def produce(): preparers = ThreadPoolExecutor(max_workers=prepare_workers, thread_name_prefix="mambo-prepare") shape = (batch_size, 3, RECIPE["crop_size"], RECIPE["crop_size"]) shapes = [shape] * (1 if tta is None else len(tta.transforms)) - pool = buffer_pool or BatchBuffers(buffer_factory) + pool = buffer_pool or BatchBuffers(buffer_factory, compact=compact) try: while True: with condition: @@ -195,7 +197,7 @@ def produce(): def prepare_into(data, target): start = time.perf_counter() - prepare_image(data, tta, out=target) + prepare_image(data, tta, out=target, compact=compact) return time.perf_counter() - start producer = threading.Thread(target=produce, name="mambo-stream") diff --git a/deployment/mambo_deploy/transfers.py b/deployment/mambo_deploy/transfers.py index 9a912ac..8c49d94 100644 --- a/deployment/mambo_deploy/transfers.py +++ b/deployment/mambo_deploy/transfers.py @@ -5,12 +5,12 @@ from concurrent.futures import ThreadPoolExecutor -def pinned_factory(device): +def pinned_factory(device, *, compact=False): import torch def allocate(shape): with torch.cuda.device(device): - return torch.empty(shape, dtype=torch.float32, pin_memory=True).numpy() + return torch.empty(shape, dtype=torch.uint8 if compact else torch.float32, pin_memory=True).numpy() return allocate @@ -82,11 +82,12 @@ def stage(): begin.record(copy_stream) staged = [] for index, view in enumerate(views): + source_tensor = torch.from_numpy(view) if index == len(slot["buffers"]): - slot["buffers"].append(torch.empty(view.shape, dtype=torch.float32, device=device)) + slot["buffers"].append(torch.empty(view.shape, dtype=source_tensor.dtype, device=device)) stats["device_buffer_allocations"] = stats.get("device_buffer_allocations", 0) + 1 target = slot["buffers"][index][: len(view)] - target.copy_(torch.from_numpy(view), non_blocking=True) + target.copy_(source_tensor, non_blocking=True) staged.append(target) end.record(copy_stream) end.synchronize() # The source may recycle its pinned host buffers on next(). diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 821573b..e6bc9b8 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -28,6 +28,11 @@ Preparation workers follow the exposed CPU quota (maximum 48); override with `--workers N` if the container does not expose the UCloud CPU allocation correctly. Keep both runs on the same commit and runtime versions. +To compare the compact-preparation update with the completed baseline, rerun the +same command using new output names such as `b200-full-compact` and +`b200-mig-compact`. No environment rebuild, new model download or campaign setup +is needed when the existing environments and model cache are available. + Expect minutes, with the small MIG slice potentially taking tens of minutes; initial model downloads and cold storage add setup time. Each completed variant prints a row and updates `summary.csv`. Runtime output and errors are in its `.log`. diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 4039dbc..4c4adde 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -418,3 +418,59 @@ Torch release collection additionally verified both preset CSVs, embeddings and final timing totals. Static checks passed; the affected suite passed 95 tests with two metric-environment tests skipped. No metric code changed. B200 throughput and a full quality campaign have not been rerun. + + +## Compact preparation follow-up + +The full-B200 smoke result (873 Torch / 826 ONNX images/s without TTA) and the +user-reported 1/7 MIG result (493 / 333 images/s) support targeting preparation +cost before adding more concurrency. This increment implements that target: + +- Portable preprocessing uses FP32 interpolation instead of accidentally promoted + FP64 intermediates. Frozen legacy hashes remain in tests as reference geometry; + tests explicitly permit rare one-level uint8 rounding changes and bound their + mean error. This is an intentional numerical implementation change, not a + relaxation of the image framing, transform order or normalization contract. +- CUDA Torch request and streaming paths prepare nearest-square uint8 images on + CPU. Existing batch buffers, pinned storage and device slots preserve uint8. + Native batched Torch interpolation, center crop, rounding and normalization run + on the device before the existing FP16-backbone/FP32-head inference boundary. + A 256-image RGB 384-square staging buffer is 108 MiB instead of 432 MiB. + This fourfold reduction describes staging storage, not total GPU or process RAM; + device interpolation also needs temporary floating-point storage. +- TTA transforms still operate before nearest-square preparation. The default + rotation/padding recipe, custom transform isolation, averaging, class selection + and embedding semantics are unchanged. Full-resolution TTA materialization, + redundant head work and optional ONNX reduced precision remain separate targets. +- ONNX and CPU execution retain portable CPU preparation and do not import Torch + for preprocessing. No new dependencies, worker pools, user flags or model files. + +A fresh laptop comparison against `dcb00d0` used the same 256 Flemming images, +batch 16, global list, default Torch CUDA precision and three warmed repetitions: + +| Measurement | Before, images/s | After, images/s | +|---|---:|---:| +| Portable CPU preparation, 4 workers | 308.8 | 435.2 | +| Portable CPU preparation, 16 workers | 322.4 | 438.7 | +| Torch CUDA request | 164.0 | 257.7 | +| Torch CUDA streaming | 217.6 | 305.8 | + +All 256 predicted species/genus/family labels matched before and after for both +request and streaming. This is a prediction-stability check, not a new accuracy +estimate. These results establish a useful local improvement, not an assumed +B200 speedup. Script outputs and prediction arrays are retained uncommitted in +`local-evidence/compact-preparation/`; the comparison script is +`local-evidence/pipeline-review/compare_pipeline.py`. + +Static checks passed. The focused suite passed 107 tests, with two metric-environment +checks skipped (metric code unchanged). Real Torch and standalone ONNX CUDA checks +covered global/northern-Europe lists, default TTA, embeddings and partial batches. +Large-image geometry is also covered in CPU/CUDA preprocessing tests. A 65-image +release collection with default TTA produced complete three-rank CSVs for both +lists and finite 1280-dimensional embeddings; predicted labels matched the prior +implementation throughout. + +Run the same [four-variant UCloud check](../dev/releases/mambo_v3/speed-smoke.md) +with fresh output folders to compare this implementation on full B200 and MIG. +Existing model caches and environments are reusable. Full quality evaluations +and the published deployment figures have not been regenerated for this change. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 30d3d4b..10210d0 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -186,11 +186,20 @@ def session(path, sess_options, providers): ((4, 24, 15), "e4dfd0c4a4174cd6d4913b1bf4f88bfd8c82a21802ec0d006e12594995bb1d64"), ], ) -def test_preprocessing_preserves_frozen_release_pixels(shape, digest): +def test_fp32_preprocessing_preserves_geometry_with_bounded_rounding(shape, digest, monkeypatch): array = np.random.default_rng(19).integers(0, 256, size=shape, dtype=np.uint8) value = preprocess(array) assert value.dtype == np.float32 and value.flags.c_contiguous - assert hashlib.sha256(value.tobytes()).hexdigest() == digest + from deployment.mambo_deploy import preprocessing + + # Retain the frozen FP64 reference to detect geometry/normalization drift. + with monkeypatch.context() as reference: + reference.setattr(preprocessing, "_FRACTION", preprocessing._COORD - preprocessing._LO) + legacy = preprocess(array) + assert hashlib.sha256(legacy.tobytes()).hexdigest() == digest + error_in_pixel_levels = np.abs(value - legacy) * np.array(RECIPE["std"])[:, None, None] * 255 + assert error_in_pixel_levels.max() <= 1.001 + assert error_in_pixel_levels.mean() < 0.001 np.testing.assert_array_equal(value, preprocess(array.astype(np.float32) / 255)) @@ -593,3 +602,25 @@ def fail(*args, **kwargs): raw, _, _ = plan.torch(native[0], native) for values, tensor in zip(raw, native, strict=True): np.testing.assert_array_equal(values, tensor.numpy()) + + +@pytest.mark.parametrize("device", ["cpu", "cuda:0"]) +def test_native_batched_preprocessing_matches_release_geometry(device): + import torch + + from deployment.mambo_deploy.preprocessing import TorchPreprocess, prepare_batch + + if device != "cpu" and not torch.cuda.is_available(): + pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") + source = [ + np.random.default_rng(i).integers(0, 256, size=(3, height, width), dtype=np.uint8) + for i, (height, width) in enumerate(((73, 125), (2048, 3072), (3072, 1024))) + ] + compact = prepare_batch(source, compact=True) + assert compact.dtype == np.uint8 + actual = TorchPreprocess(torch, device)(torch.from_numpy(compact).to(device)).cpu().numpy() + expected = prepare_batch(source) + error = np.abs(actual - expected) * np.array(RECIPE["std"])[None, :, None, None] * 255 + assert error.max() <= 1.001 + assert error.mean() < 0.001 + np.testing.assert_array_equal(compact, prepare_batch(source, compact=True)) diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index 49928c5..3eea9b2 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -48,8 +48,8 @@ def read(path, size, digest): assert later.wait(3), "later images must prepare while first read waits" return original_read(path, size, digest) - def prepare(data, tta, out=None): - result = original_prepare(data, tta, out=out) + def prepare(data, tta, out=None, **kwargs): + result = original_prepare(data, tta, out=out, **kwargs) later.set() return result @@ -77,10 +77,10 @@ def test_workers_fill_batch_storage_and_errors_propagate(tmp_path, monkeypatch): original = streaming.prepare_image targets = [] - def prepare(data, tta, out=None): + def prepare(data, tta, out=None, **kwargs): assert out is not None targets.append((threading.current_thread().name, out[0])) - return original(data, tta, out=out) + return original(data, tta, out=out, **kwargs) monkeypatch.setattr(streaming, "prepare_image", prepare) stats = {} @@ -91,7 +91,7 @@ def prepare(data, tta, out=None): assert stats["preparation_worker_seconds"] > 0 assert stats["queue_wait_seconds"] == stats["input_wait_seconds"] - def fail(data, tta, out=None): + def fail(data, tta, out=None, **kwargs): raise ValueError("preparation failure") monkeypatch.setattr(streaming, "prepare_image", fail) @@ -131,7 +131,7 @@ def test_reusable_batch_buffers_are_bounded(tmp_path, monkeypatch): items = inputs(tmp_path, 21) stats = {} # Keep the test about ownership/reuse, not expensive image interpolation. - monkeypatch.setattr(streaming, "prepare_image", lambda data, tta, out: out[0].fill(len(data))) + monkeypatch.setattr(streaming, "prepare_image", lambda data, tta, out, **kwargs: out[0].fill(len(data))) pointers = set() count = 0 with closing(streaming.prepared_stream(items, 2, prefetch_batches=2, reuse_buffers=True, stats=stats)) as batches: @@ -144,14 +144,15 @@ def test_reusable_batch_buffers_are_bounded(tmp_path, monkeypatch): assert stats["host_buffer_allocations"] <= 4 -def test_cuda_device_slots_and_pinned_source_lifetime(): +@pytest.mark.parametrize("compact", [False, True]) +def test_cuda_device_slots_and_pinned_source_lifetime(compact): import torch from deployment.mambo_deploy.transfers import device_batches, download_tensors, pinned_factory if not torch.cuda.is_available(): pytest.skip("Intentional CUDA test; set CUDA_VISIBLE_DEVICES") - allocate = pinned_factory("cuda:0") + allocate = pinned_factory("cuda:0", compact=compact) host = allocate((2, 3, 4, 4)) assert torch.from_numpy(host).is_pinned() @@ -164,6 +165,7 @@ def source(): pointers = set() with closing(device_batches(source(), "torch", "cuda:0", stats)) as batches: for offset, views, count in batches: + assert views[0].dtype == (torch.uint8 if compact else torch.float32) pointers.add(views[0].data_ptr()) result = download_tensors([views[0] * 2], torch=torch)[0] np.testing.assert_array_equal(result, np.full((count, 3, 4, 4), offset, dtype=np.float32)) @@ -191,3 +193,19 @@ def test_cuda_deferred_download_retains_outputs_after_slot_reuse(): values, sums = complete() np.testing.assert_array_equal(values, np.full((index + 1, 128), index)) np.testing.assert_array_equal(sums, np.full(8, index * 128)) + + +@pytest.mark.parametrize("tta", [None, resolve_tta("rotation30_pad25_3")]) +def test_compact_stream_preserves_views_and_quarters_storage(tmp_path, tta): + import torch + + from deployment.mambo_deploy.preprocessing import TorchPreprocess + + finish = TorchPreprocess(torch, "cpu") + paths = inputs(tmp_path, 5) + for offset, views in streaming.prepared_stream(paths, 2, compact=True): + for index, view in enumerate(views): + assert view.dtype == np.uint8 + expected = np.stack([streaming.prepare_image(p.read_bytes(), tta)[index] for p, _ in paths[offset : offset + len(view)]]) + assert view.nbytes * 4 == expected.nbytes + np.testing.assert_allclose(finish(torch.from_numpy(view)).numpy(), expected, atol=1e-6) From ac087670246eea6f8bbc575f6454ccb9114ddda5 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 10:29:14 +0200 Subject: [PATCH 079/221] bench: add a small GPU-resident throughput reference --- dev/releases/mambo_v3/gpu-ceiling.md | 52 ++++++++ dev/releases/mambo_v3/gpu_ceiling.py | 187 +++++++++++++++++++++++++++ tests/releases/test_gpu_ceiling.py | 32 +++++ 3 files changed, 271 insertions(+) create mode 100644 dev/releases/mambo_v3/gpu-ceiling.md create mode 100644 dev/releases/mambo_v3/gpu_ceiling.py create mode 100644 tests/releases/test_gpu_ceiling.py diff --git a/dev/releases/mambo_v3/gpu-ceiling.md b/dev/releases/mambo_v3/gpu-ceiling.md new file mode 100644 index 0000000..2dab05b --- /dev/null +++ b/dev/releases/mambo_v3/gpu-ceiling.md @@ -0,0 +1,52 @@ +# Small full-B200 GPU throughput reference + +Run **Torch, no TTA** on the full B200. Reuse the working Torch environment and +completed compact speed-smoke report. No environment rebuild, parquet scan, +ONNX setup, MIG run or quality evaluation. + +After pulling the release branch, from the repository root: + +```sh +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.gpu_ceiling \ + --baseline /work/mambo-speed/b200-full-compact/torch/report.json \ + --output /work/mambo-speed/b200-resident +``` + +The script checks and prepares the first 1,024 images from the prior streaming +sample once, then keeps compact uint8 images on the GPU. Each call includes the +actual deployed GPU interpolation/normalization, FP16 backbone, FP32 classifier +and global hierarchy logits. Outputs stay on-device. Image loading, H2D/D2H, +CPU prediction objects, embeddings and TTA are outside this timing boundary. + +It warms batches **256, 512 and 1,024**, then times approximately **20 seconds per +batch size**, synchronizing at block boundaries rather than after each inference. +It cycles slices of the resident bank. If a batch exhausts memory, smaller-batch +results are retained. Expect roughly **2–4 minutes** including model startup and +one short profiler capture; cold image storage can add time. Do not run another +GPU workload alongside it. + +The new output directory contains: + +- `summary.csv`: images/s and peak Torch allocated/reserved GPU memory per batch. +- `report.json`: exact timing windows, sample/weight provenance, runtime, device + and the fastest tested batch size. Memory peaks include the resident image bank. +- `gpu.csv`: utilization, power, GPU memory and SM clock samples every 200 ms. + Includes all visible-to-nvidia-smi devices; match the device identity in the report. +- `trace.json.gz`: eight inferences at the fastest batch size, captured separately + from throughput timing. Inspect with Perfetto or a Chrome trace viewer. If the + profiler is unavailable, its error is recorded without discarding timing results. + +Return this **one folder**. Read throughput together with the sustained telemetry +and kernel timeline: a throughput plateau and continuously occupied GPU with few +launch gaps support a practical bound for this implementation. High utilization +alone is insufficient, and this is not a theoretical hardware maximum. If 1,024 +is still markedly faster, the experiment establishes headroom, not a plateau. +Profiler timings must not replace the unprofiled throughput result. + +Compare batch 256 directly with the existing streaming batch 256; a faster larger +batch is an additional opportunity, not a like-for-like pipeline speedup. The old +prepared-input diagnostic still includes transfers and omits new GPU preprocessing, +so keep it separate. Do not subtract these timings as if they were serial phases. + +For a small local correctness check only, override `--batches 8 16 --seconds 1`. +No additional settings or campaign configuration are required. diff --git a/dev/releases/mambo_v3/gpu_ceiling.py b/dev/releases/mambo_v3/gpu_ceiling.py new file mode 100644 index 0000000..9add36d --- /dev/null +++ b/dev/releases/mambo_v3/gpu_ceiling.py @@ -0,0 +1,187 @@ +"""Small Torch GPU-resident throughput reference, reusing a speed-smoke report.""" + +import argparse +import itertools +import json +import math +import os +import subprocess +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import torch + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy.preprocessing import prepare_batch +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import write_json + + +def resident_call(predictor, bank, batch_size): + """Use the deployed CUDA preparation, backbone, head and global native ranks.""" + batches = itertools.cycle(bank.split(batch_size)) + plan = predictor.hierarchy_plan(predictor.selected) + + def call(): + output, _ = predictor._torch(next(batches), False, tensors=True) + predictor._model_events.clear() # Diagnostic events must not accumulate between calls. + return plan.torch_values(output[0].float(), output)[0] + + return call + + +def measure(call, batch_size, seconds, device): + # Warm lazy loading, kernels and allocator before calibrating the timed block. + for _ in range(5): + values = call() + torch.cuda.synchronize(device) + if not all(bool(torch.isfinite(value).all()) for value in values): + raise RuntimeError("Non-finite resident predictions") + start = time.perf_counter() + for _ in range(5): + call() + torch.cuda.synchronize(device) + iterations = max(5, math.ceil(seconds * 5 / (time.perf_counter() - start))) + torch.cuda.reset_peak_memory_stats(device) + started = time.time() + start = time.perf_counter() + for _ in range(iterations): + call() + torch.cuda.synchronize(device) + elapsed = time.perf_counter() - start + return { + "batch_size": batch_size, + "iterations": iterations, + "started_unix_seconds": started, + "finished_unix_seconds": time.time(), + "elapsed_seconds": elapsed, + "images_per_second": iterations * batch_size / elapsed, + "peak_allocated_gib": torch.cuda.max_memory_allocated(device) / 1024**3, + "peak_reserved_gib": torch.cuda.max_memory_reserved(device) / 1024**3, + } + + +def run(args): + if not torch.cuda.is_available(): + raise RuntimeError("This experiment requires CUDA") + baseline = json.loads(args.baseline.read_text()) + if baseline["settings"]["backend"] != "torch" or baseline["settings"]["tta"] != "none": + raise ValueError("Use the Torch, no-TTA smoke report") + args.output.mkdir(parents=True, exist_ok=False) + settings = baseline["settings"] + records = baseline["stream_samples"][: max(args.batches)] + if len(records) < max(args.batches): + raise ValueError("Baseline report has too few sample images") + paths = [Path(settings["root"]) / r["path"] for r in records] + print(f"Checking and preparing {len(paths)} existing sample images once.", flush=True) + with ThreadPoolExecutor(max_workers=4) as pool: + for record, digest in zip(records, pool.map(file_hash, paths), strict=True): + if digest != record["sha256"]: + raise ValueError("Sample image bytes changed") + host = prepare_batch(paths, pool, compact=True) + device = "cuda:0" + predictor = Predictor(settings["bundle"], backend="torch", device=device, precision=settings["precision"], model="full", threads=4) + if file_hash(predictor.bundle.root / "release.json") != baseline["bundle_sha256"]: + raise ValueError("Bundle manifest differs from the smoke run") + bank = torch.from_numpy(host).to(device) + del host + report = { + "status": "running", + "commit": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "baseline": str(args.baseline.resolve()), + "baseline_sha256": file_hash(args.baseline), + "bundle_sha256": baseline["bundle_sha256"], + "samples": records, + "torch": torch.__version__, + "cuda": torch.version.cuda, + "precision": predictor.effective_precision, + "gpu": subprocess.check_output(["nvidia-smi", "-L"], text=True), + "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES"), + "device": str(torch.cuda.get_device_properties(device)), + "boundary": ( + "Resident uint8 input through GPU preprocessing, backbone, head and global hierarchy logits; " + "no H2D/D2H, CPU prediction objects, TTA or embeddings." + ), + "cells": [], + } + write_json(args.output / "report.json", report) + with (args.output / "gpu.csv").open("w") as telemetry: + monitor = subprocess.Popen( + [ + "nvidia-smi", + "--query-gpu=timestamp,uuid,utilization.gpu,utilization.memory,power.draw,memory.used,clocks.sm", + "--format=csv", + "-lms", + "200", + ], + stdout=telemetry, + stderr=subprocess.STDOUT, + ) + try: + with torch.inference_mode(): + for size in args.batches: + print(f"Batch {size}: warming, then approximately {args.seconds:g}s sustained inference.", flush=True) + try: + cell = measure(resident_call(predictor, bank, size), size, args.seconds, device) + except torch.cuda.OutOfMemoryError: + report["cells"].append({"batch_size": size, "status": "out_of_memory"}) + write_json(args.output / "report.json", report) + torch.cuda.empty_cache() + print("Memory limit reached; retaining smaller-batch results.", flush=True) + break + report["cells"].append(cell) + write_json(args.output / "report.json", report) + print(f"{size}: {cell['images_per_second']:.1f} images/s; {cell['peak_allocated_gib']:.2f} GiB allocated", flush=True) + completed = [c for c in report["cells"] if "images_per_second" in c] + if not completed: + raise RuntimeError("No batch size fit; try smaller --batches") + best = max(completed, key=lambda c: c["images_per_second"]) + report["best_batch_size"] = best["batch_size"] + print(f"Capturing a short trace at batch {best['batch_size']} (excluded from throughput).", flush=True) + call = resident_call(predictor, bank, best["batch_size"]) + for _ in range(3): + call() + torch.cuda.synchronize(device) + try: + with torch.profiler.profile( + activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA] + ) as profile: + for _ in range(8): + call() + torch.cuda.synchronize(device) + profile.export_chrome_trace(str(args.output / "trace.json.gz")) + report["trace"] = "trace.json.gz" + except RuntimeError as error: + report["trace_error"] = str(error) + print(f"Profiler unavailable; timing and telemetry retained: {error}", flush=True) + finally: + monitor.terminate() + monitor.wait() + report["status"] = "complete" + write_json(args.output / "report.json", report) + lines = ["batch_size,images_per_second,peak_allocated_gib,peak_reserved_gib"] + lines.extend( + f"{c['batch_size']},{c['images_per_second']:.1f},{c['peak_allocated_gib']:.2f},{c['peak_reserved_gib']:.2f}" for c in completed + ) + (args.output / "summary.csv").write_text("\n".join(lines) + "\n") + print(f"Done: {args.output}", flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--baseline", type=Path, required=True, help="Existing speed-smoke torch/report.json") + parser.add_argument("--output", type=Path, required=True, help="New persistent output directory") + parser.add_argument("--batches", type=int, nargs="+", default=[256, 512, 1024]) + parser.add_argument("--seconds", type=float, default=20, help="Approximate sustained duration per batch size") + args = parser.parse_args() + if not math.isfinite(args.seconds) or args.seconds <= 0 or min(args.batches) < 1: + parser.error("Batch sizes and seconds must be positive and finite") + args.batches = sorted(set(args.batches)) + if any(max(args.batches) % b for b in args.batches): + parser.error("Every batch size must divide the largest batch size") + run(args) + + +if __name__ == "__main__": + main() diff --git a/tests/releases/test_gpu_ceiling.py b/tests/releases/test_gpu_ceiling.py new file mode 100644 index 0000000..23899e7 --- /dev/null +++ b/tests/releases/test_gpu_ceiling.py @@ -0,0 +1,32 @@ +from types import SimpleNamespace + +import pytest +import torch + +from dev.releases.mambo_v3.gpu_ceiling import resident_call + + +@pytest.mark.parametrize("device", ["cpu", "cuda:0"]) +def test_resident_call_cycles_bank_and_keeps_native_ranks(device): + if device != "cpu" and not torch.cuda.is_available(): + pytest.skip("Intentional CUDA check") + bank = torch.arange(8, dtype=torch.uint8, device=device).reshape(8, 1, 1, 1) + events = [] + seen = [] + + def infer(images, embeddings, *, tensors): + assert tensors and not embeddings and images.device == bank.device + seen.append(images) + events.append(object()) + return [images.float().flatten(1) + rank for rank in range(3)], None + + plan = SimpleNamespace(torch_values=lambda leaf, native: (native, None, None)) + predictor = SimpleNamespace(_torch=infer, _model_events=events, selected=None, hierarchy_plan=lambda selected: plan) + call = resident_call(predictor, bank, 4) + for i in range(5): + values = call() + assert not events + assert len(values) == 3 and all(v.device == bank.device for v in values) + expected = bank[(i % 2) * 4 : (i % 2 + 1) * 4] + torch.testing.assert_close(values[0], expected.float().flatten(1)) + assert seen[-1].data_ptr() == expected.data_ptr() From 0c6ace2349b150905c35f0c51b44b2f06c71c54d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 11:02:51 +0200 Subject: [PATCH 080/221] perf: simplify streaming ownership and avoid TTA image copies --- deployment/mambo_deploy/augmentation.py | 32 ++- deployment/mambo_deploy/preprocessing.py | 20 +- deployment/mambo_deploy/streaming.py | 289 +++++++++++------------ dev/releases/mambo_v3/speed-smoke.md | 20 +- docs/mambo-inference-pipeline-review.md | 53 +++++ tests/releases/test_deployment.py | 32 +++ tests/releases/test_streaming.py | 117 +++++++++ 7 files changed, 396 insertions(+), 167 deletions(-) diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index d6eff5a..23dd0cf 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -6,7 +6,7 @@ import numpy as np from PIL import Image -from .preprocessing import _rgb, prepare_batch, prepare_uint8, preprocess +from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess @dataclass(frozen=True) @@ -61,11 +61,14 @@ def __post_init__(self): raise ValueError("Rotation must be finite") EdgePad(self.padding) - def __call__(self, image): + def rotate(self, image): rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( self.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) ) - return EdgePad(self.padding)(np.asarray(rotated).transpose(2, 0, 1)) + return np.asarray(rotated).transpose(2, 0, 1) + + def __call__(self, image): + return EdgePad(self.padding)(self.rotate(image)) @dataclass(frozen=True) @@ -94,7 +97,7 @@ def __call__(self, image): @dataclass(frozen=True) class TTA: - """Named finite transforms; each callable receives its own uint8 CHW image copy.""" + """Named finite transforms; custom callables receive isolated uint8 CHW copies.""" transforms: tuple name: str = "custom" @@ -153,7 +156,12 @@ def resolve_tta(value): def _prepare_view(image, transform, out=None, *, compact=False): prepare = prepare_uint8 if compact else preprocess - return prepare(transform(image.copy()), out=out) + # Exact built-in types are non-mutating; subclasses/custom callables retain isolation. + if type(transform) is RotatePad: + return prepare(transform.rotate(image), out=out, padding=transform.padding) + if type(transform) is EdgePad: + return prepare(image, out=out, padding=transform.fraction) + return prepare(transform(image if type(transform) in (View, SaltAndPepper) else image.copy()), out=out) def prepared_views(items, tta, pool=None, *, compact=False): @@ -163,8 +171,18 @@ def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] decoded = mapped(_rgb, items) - views = (prepare_batch(decoded, pool, transform, compact=compact) for transform in tta.transforms) - return views + + def batches(): + for transform in tta.transforms: + output = np.empty((len(decoded), 3, RECIPE["crop_size"], RECIPE["crop_size"]), dtype=np.uint8 if compact else np.float32) + + def fill(index): + _prepare_view(decoded[index], transform, out=output[index], compact=compact) + + mapped(fill, range(len(decoded))) + yield output + + return batches() def infer_augmented(runtime, items, tta, embeddings=False, pool=None): diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index f57d03a..b4d914b 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -59,21 +59,27 @@ def _rgb(item): _STD = np.array(RECIPE["std"], dtype=np.float32)[:, None, None] -def prepare_uint8(item, out=None): - """Decode and apply the recipe's nearest-square step, retaining compact pixels.""" +def _square(item, padding=0): image = _rgb(item) - yy = np.minimum((_GRID * np.float32(image.shape[1] / _SIZE)).astype(np.intp), image.shape[1] - 1) - xx = np.minimum((_GRID * np.float32(image.shape[2] / _SIZE)).astype(np.intp), image.shape[2] - 1) - square = image[:, yy[:, None], xx[None, :]] + height, width = image.shape[1:] + py, px = int(np.ceil(height * padding)), int(np.ceil(width * padding)) + yy = np.clip((_GRID * np.float32((height + 2 * py) / _SIZE)).astype(np.intp) - py, 0, height - 1) + xx = np.clip((_GRID * np.float32((width + 2 * px) / _SIZE)).astype(np.intp) - px, 0, width - 1) + return image[:, yy[:, None], xx[None, :]] + + +def prepare_uint8(item, out=None, *, padding=0): + """Select compact pixels; virtual edge padding avoids a full-size padded image.""" + square = _square(item, padding) if out is None: return np.ascontiguousarray(square) out[...] = square return out -def preprocess(item, out=None): +def preprocess(item, out=None, *, padding=0): """Finish the release geometry and normalization in FP32 on CPU.""" - image = prepare_uint8(item).astype(np.float32) + image = np.ascontiguousarray(_square(item, padding), dtype=np.float32) rows = image[:, _LO] * (1 - _FRACTION)[None, :, None] + image[:, _HI] * _FRACTION[None, :, None] pixels = rows[:, :, _LO] * (1 - _FRACTION)[None, None, :] + rows[:, :, _HI] * _FRACTION[None, None, :] if out is None: diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 69e6e8a..9bea4e1 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -4,8 +4,10 @@ import io import threading import time -from concurrent.futures import ThreadPoolExecutor +from concurrent.futures import CancelledError, ThreadPoolExecutor +from heapq import heappop, heappush from pathlib import Path +from queue import Empty, SimpleQueue import numpy as np from PIL import Image @@ -38,25 +40,42 @@ def prepare_image(data, tta, out=None, *, compact=False): return out -class BatchBuffers: - def __init__(self, factory=None, *, compact=False): - self.factory = factory or (lambda shape: np.empty(shape, dtype=np.uint8 if compact else np.float32)) - self.available = [] - self.lock = threading.Lock() - self.allocations = 0 - - def acquire(self, shapes): - with self.lock: - for i, buffers in enumerate(self.available): - if all(b.shape[0] >= s[0] and b.shape[1:] == s[1:] for b, s in zip(buffers, shapes, strict=True)): - return self.available.pop(i) - self.allocations += len(shapes) - return tuple(self.factory(shape) for shape in shapes) - - def release(self, views): - # Partial batches retain the full allocation via .base; no further work follows the final partial batch. - with self.lock: - self.available.append(views) +class EncodedReads: + """Own byte reservations in input order; metadata and file IO stay in readers.""" + + def __init__(self, budget, stats): + self.budget, self.stats = budget, stats + self.condition = threading.Condition() + self.next_index = self.reserved = 0 + self.closed = False + stats["encoded_bytes"] = 0 + + def read(self, index, path, digest): + path = Path(path) + size = path.stat().st_size + if size > self.budget: + raise ValueError(f"Image exceeds encoded byte budget: {path}") + with self.condition: + self.condition.wait_for(lambda: self.closed or (index == self.next_index and self.reserved + size <= self.budget)) + if self.closed: + raise CancelledError() + self.reserved += size + self.stats["encoded_bytes"] = self.reserved + self.stats["peak_encoded_bytes"] = max(self.stats.get("peak_encoded_bytes", 0), self.reserved) + self.next_index += 1 + self.condition.notify_all() + return size, read_image(path, size, digest) + + def release(self, size): + with self.condition: + self.reserved -= size + self.stats["encoded_bytes"] = self.reserved + self.condition.notify_all() + + def close(self): + with self.condition: + self.closed = True + self.condition.notify_all() def prepared_stream( @@ -74,12 +93,12 @@ def prepared_stream( buffer_factory=None, compact=False, ): - """Yield (offset, batch views) from (path, optional SHA256) items; close on early exit. + """Yield ordered (offset, batch views); reusable buffers are leased until next(). - IO reservations include in-flight reads and bytes held by preparation. Prepared - images are bounded by (prefetch_batches + 1) * batch_size, plus the consumed batch. - Workers write directly to disjoint batch slices; completion callbacks wake the coordinator. - Preparation workers do not call models or sessions. Shutdown waits for running filesystem calls. + The reading stage owns byte admission. One preparation owner assigns disjoint + slices and recycles returned batches; workers report completions. Encoded bytes + stay reserved through preparation; batch capacity is released by the consumer. + Close on early exit. Shutdown waits for running filesystem/preparation calls. """ values = (batch_size, read_workers, prepare_workers, read_window, encoded_budget) if any(not isinstance(v, int) or v < 1 for v in values) or not isinstance(prefetch_batches, int) or prefetch_batches < 0: @@ -87,152 +106,126 @@ def prepared_stream( if read_window < batch_size: raise ValueError("read_window must cover at least one batch") stats = {} if stats is None else stats - condition = threading.Condition() - state = dict(stop=False, consumed=0, end=None, error=None) - batches = {} - buffer_pool = BatchBuffers(buffer_factory, compact=compact) if reuse_buffers else None + events, output = SimpleQueue(), SimpleQueue() source = iter(items) capacity = batch_size * (prefetch_batches + 1) + factory = buffer_factory or (lambda shape: np.empty(shape, dtype=np.uint8 if compact else np.float32)) + shape = (batch_size, 3, RECIPE["crop_size"], RECIPE["crop_size"]) - def wake(_=None): - with condition: - state["generation"] += 1 - condition.notify_all() + def prepare_into(data, target): + start = time.perf_counter() + prepare_image(data, tta, out=target, compact=compact) + return time.perf_counter() - start - state["generation"] = 0 + def submit(pool, kind, index, size, function, *args): + pool.submit(function, *args).add_done_callback(lambda future: events.put((kind, index, size, future))) def produce(): - reads, decoding, buffers, sizes, active = {}, {}, {}, {}, {} - next_index, reserved = 0, 0 - pending = None + ready, available, active = [], [], {} + consumed = admitted = emitted = 0 + reading = preparing = 0 exhausted = False readers = ThreadPoolExecutor(max_workers=read_workers, thread_name_prefix="mambo-read") preparers = ThreadPoolExecutor(max_workers=prepare_workers, thread_name_prefix="mambo-prepare") - shape = (batch_size, 3, RECIPE["crop_size"], RECIPE["crop_size"]) - shapes = [shape] * (1 if tta is None else len(tta.transforms)) - pool = buffer_pool or BatchBuffers(buffer_factory, compact=compact) + encoded = EncodedReads(encoded_budget, stats) + stats.update(prepared_images=0, prepared_batches=0, host_buffer_allocations=0) + + def complete(event): + nonlocal consumed, reading, preparing + kind, index, size, value = event + if kind == "read": + reading -= 1 + size, data = value.result() + heappush(ready, (index, size, data)) + elif kind == "prepared": + stats["preparation_worker_seconds"] = stats.get("preparation_worker_seconds", 0.0) + value.result() + preparing -= 1 + encoded.release(size) + active[index // batch_size][1] += 1 + stats["prepared_images"] += 1 + elif kind == "taken": + stats["prepared_images"] -= size + stats["prepared_batches"] -= 1 + elif kind == "returned": + consumed = index + size + if reuse_buffers: + available.append(value) + return kind != "stop" + try: while True: - with condition: - if state["stop"]: + # Completions identify exactly which item changed; no future/buffer scans. + try: + while complete(events.get_nowait()): + pass + break + except Empty: + pass + while ready and ready[0][0] < consumed + capacity and preparing < prepare_workers: + index, size, data = heappop(ready) + number, slot = divmod(index, batch_size) + if number not in active: + if available: + views = available.pop() + else: + views = tuple(factory(shape) for _ in range(1 if tta is None else len(tta.transforms))) + stats["host_buffer_allocations"] += len(views) + active[number] = [views, 0] + target = tuple(view[slot] for view in active[number][0]) + submit(preparers, "prepared", index, size, prepare_into, data, target) + preparing += 1 + del data + while not exhausted and admitted < consumed + read_window and reading < read_workers: + try: + path, digest = next(source) + except StopIteration: + exhausted = True break - generation, consumed = state["generation"], state["consumed"] - for index, future in list(reads.items()): - if future.done(): - buffers[index] = future.result() - del reads[index] - for index, future in list(decoding.items()): - if future.done(): - elapsed = future.result() - del decoding[index] - reserved -= sizes.pop(index) - active[index // batch_size][1] += 1 - stats["preparation_worker_seconds"] = stats.get("preparation_worker_seconds", 0.0) + elapsed - for number, (views, count) in list(active.items()): - expected = min(batch_size, next_index - number * batch_size) if exhausted else batch_size - if count == expected: - with condition: - batches[number * batch_size] = tuple(view[:count] for view in views) - condition.notify_all() - del active[number] - for index in list(buffers): - if index < consumed + capacity and len(decoding) < prepare_workers: - number, slot = divmod(index, batch_size) - if number not in active: - active[number] = [pool.acquire(shapes), 0] - target = tuple(view[slot] for view in active[number][0]) - future = preparers.submit(prepare_into, buffers.pop(index), target) - decoding[index] = future - future.add_done_callback(wake) - while not exhausted and next_index < consumed + read_window and len(reads) < read_workers: - if pending is None: - try: - path, digest = next(source) - except StopIteration: - exhausted = True - with condition: - state["end"] = next_index - wake() - break - path = Path(path) - size = path.stat().st_size - if size > encoded_budget: - raise ValueError(f"Image exceeds encoded byte budget: {path}") - pending = path, digest, size - path, digest, size = pending - if reserved + size > encoded_budget: + submit(readers, "read", admitted, 0, encoded.read, admitted, path, digest) + reading += 1 + admitted += 1 + while emitted // batch_size in active: + views, count = active[emitted // batch_size] + expected = min(batch_size, admitted - emitted) if exhausted else batch_size + if count != expected: break - sizes[next_index] = size - reserved += size - future = readers.submit(read_image, path, size, digest) - reads[next_index] = future - future.add_done_callback(wake) - next_index += 1 - pending = None - with condition: - prepared_count = sum(count for _, count in active.values()) + sum(len(v[0]) for v in batches.values()) - stats.update( - reading=len(reads), - encoded_ready=len(buffers), - preparing=len(decoding), - prepared_images=prepared_count, - prepared_batches=len(batches), - encoded_bytes=reserved, - host_buffer_allocations=pool.allocations, - ) - stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) - stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), prepared_count + len(decoding)) - if exhausted and not reads and not decoding and not buffers and not active: - break - condition.wait_for(lambda: state["stop"] or state["generation"] != generation) + del active[emitted // batch_size] + stats["prepared_batches"] += 1 + output.put((emitted, tuple(view[:count] for view in views))) + emitted += count + stats.update(reading=reading, encoded_ready=len(ready), preparing=preparing) + stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), stats["prepared_images"] + preparing) + if exhausted and consumed == admitted: + output.put(None) + return + if not complete(events.get()): + break except BaseException as error: - with condition: - state["error"] = error - condition.notify_all() + output.put(error) finally: - for future in (*reads.values(), *decoding.values()): - future.cancel() + encoded.close() readers.shutdown(wait=True, cancel_futures=True) preparers.shutdown(wait=True, cancel_futures=True) - - def prepare_into(data, target): - start = time.perf_counter() - prepare_image(data, tta, out=target, compact=compact) - return time.perf_counter() - start + # Completed futures can retain encoded images; discard them after shutdown. + while not events.empty(): + events.get_nowait() producer = threading.Thread(target=produce, name="mambo-stream") producer.start() - offset = 0 try: while True: start = time.perf_counter() - with condition: - while True: - if state["error"] is not None: - raise state["error"] - end = min(offset + batch_size, state["end"]) if state["end"] is not None else offset + batch_size - if end == offset: - return - if offset in batches: - views = batches.pop(offset) - stats["prepared_batches"] = len(batches) - stats["prepared_images"] = max(0, stats.get("prepared_images", 0) - len(views[0])) - break - condition.wait() - with condition: - stats["queue_wait_seconds"] = stats.get("queue_wait_seconds", 0.0) + time.perf_counter() - start - stats["input_wait_seconds"] = stats["queue_wait_seconds"] - condition.notify_all() + result = output.get() + stats["queue_wait_seconds"] = stats.get("queue_wait_seconds", 0.0) + time.perf_counter() - start + stats["input_wait_seconds"] = stats["queue_wait_seconds"] + if isinstance(result, BaseException): + raise result + if result is None: + return + offset, views = result + events.put(("taken", offset, len(views[0]), None)) yield offset, views - if buffer_pool is not None: - buffer_pool.release(views) - del views - offset = end - with condition: - state["consumed"] = end - wake() + events.put(("returned", offset, len(views[0]), views)) finally: - with condition: - state["stop"] = True - condition.notify_all() + events.put(("stop", 0, 0, None)) producer.join() diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index e6bc9b8..b177c7d 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -1,4 +1,4 @@ -# Short UCloud speed check: full B200, then one MIG slice +# Short UCloud deployment speed check Run from this checkout on each manually allocated node with `/work/datasets` mounted. This measures **V3 PyTorch, ONNX, and each with default TTA**. No V2 run, quality @@ -15,7 +15,8 @@ export MAMBO_CACHE=/work/mambo-cache --output /work/mambo-speed/b200-full ``` -On the second node, run the same command with `--output /work/mambo-speed/b200-mig`. +A MIG comparison is optional when it answers a specific deployment question. +For that comparison, use `--output /work/mambo-speed/b200-mig` on the second node. Use a **single visible MIG slice**, not the entire parent GPU. `environment.json` records `nvidia-smi -L`, visible-device settings and the CPU quota, so retain the exact MIG profile when comparing results. The full node and slice may also differ @@ -29,8 +30,7 @@ Preparation workers follow the exposed CPU quota (maximum 48); override with Keep both runs on the same commit and runtime versions. To compare the compact-preparation update with the completed baseline, rerun the -same command using new output names such as `b200-full-compact` and -`b200-mig-compact`. No environment rebuild, new model download or campaign setup +same command using a fresh output name such as `b200-full-compact`. No environment rebuild, new model download or campaign setup is needed when the existing environments and model cache are available. Expect minutes, with the small MIG slice potentially taking tens of minutes; @@ -39,7 +39,7 @@ prints a row and updates `summary.csv`. Runtime output and errors are in its `.l Stop after these four variants on each node unless the results expose a specific failure or unexplained regression. -**Return the two output folders**, or initially just both `summary.csv` and +**Return the output folder(s)**, or initially their `summary.csv` and `environment.json` files. The JSON reports retain raw trial timings, runtime versions, preparation counters, host memory, and Torch allocator peak GPU memory. The primary comparison is streaming images/s. Request timing is a separate API @@ -64,3 +64,13 @@ uv pip install --python /tmp/mambo-ort-ptx/bin/python \ Use the ONNX version already qualified on B200 here. This is an environment-specific test setup, not a new deployment-wide dependency pin. Existing environments need none of these installation commands. + +## Streaming ownership and preparation update + +Reuse the full B200, its working environments and the same command above with +`--output /work/mambo-speed/b200-full-streaming`. This checks all four affected +variants against `b200-full-compact`; do not repeat the MIG or GPU-resident test. +No environment rebuild, model change or new setting is needed. Keep batch size +and worker settings unchanged so the pipeline is the variable being compared. +The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers +and CPU result construction and remains a reference, not an end-to-end promise. diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 4c4adde..9759ca1 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -474,3 +474,56 @@ Run the same [four-variant UCloud check](../dev/releases/mambo_v3/speed-smoke.md with fresh output folders to compare this implementation on full B200 and MIG. Existing model caches and environments are reusable. Full quality evaluations and the published deployment figures have not been regenerated for this change. + +## Streaming ownership and virtual padding + +The full-B200 resident experiment establishes a useful reference for the existing +GPU execution: 3,667 images/s at batch 256, 3,781 at 512 and 3,818 at 1,024. The +trace has almost continuous kernel execution; increasing batch size is not the +main answer to the 1,232 images/s streaming result. This increment preserves GPU +execution and addresses preparation and handoffs instead. + +- The reading stage owns metadata lookup and encoded-byte reservations. Metadata + lookup runs in the existing reading pool, so a slow `stat()` cannot block the + preparation owner. Reservations are granted in input order to prevent later + reads from occupying the whole byte budget ahead of a required earlier image. +- The preparation owner receives completion messages instead of rescanning future + dictionaries and buffered images. A priority heap selects the earliest ready + image; unavailable earlier reads do not prevent later ready work from proceeding. +- That owner alone allocates/recycles preparation buffers. The consumer returns a + leased batch after use; workers fill assigned disjoint slices. This replaces the + old buffer-pool lock, shared condition/generation state and repeated progress scans. + The message queues are bounded indirectly by read admission and batch capacity. +- Built-in non-mutating TTA transforms avoid an unconditional input copy. Custom + callables, including subclasses of built-ins, retain copy isolation. Edge padding + is represented in nearest-square sampling coordinates rather than materialized + as a full-size padded image. Rotation geometry and interpolation are unchanged. +- Portable FP32 preparation converts selected pixels directly to its required + contiguous format, without an intermediate contiguous uint8 copy. Torch/ONNX + input contracts and the transfer/result stages are unchanged. + +The streaming module is slightly shorter (238 to 231 lines). Across the three +production files, the functional additions produce a net increase of 17 lines; +this is a reduction in coordination state and interactions, not a large net code +reduction. No dependencies, worker pools, user settings or model assets were added. + +Validation: the affected suite passed 117 tests with two metric-environment tests +skipped. After separating byte accounting from telemetry, the 17 streaming tests +passed again. Static checks passed. Tests cover slow reads and metadata, earliest +ready work, bounded storage, buffer leases, partial batches, source/worker errors, +early close and blocked-reader shutdown. Materialized versus virtual TTA padding +matches prepared pixels exactly, including on large images. Real Torch and +standalone ONNX CUDA checks cover global/northern-Europe lists, TTA, embeddings +and partial batches. + +An initial laptop comparison of the completion/virtual-padding changes showed no +clear throughput shift on 256 small Flemming images: about 269 versus 270 images/s +without TTA and 98 versus 96 with TTA, with overlapping repetition ranges. Predicted +labels matched at all three ranks. This timing preceded moving metadata lookup into +readers; the final implementation has not been benchmarked on B200. It does not +establish a speedup. Local evidence is retained under `local-evidence/stream-owner/`. + +Use the existing [full-B200 smoke command](../dev/releases/mambo_v3/speed-smoke.md#streaming-ownership-and-preparation-update) +with a fresh output directory, keeping the same batch and worker settings. Reuse +the resident reference and existing environments; no MIG or quality campaign is +needed for this bounded pipeline comparison. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 10210d0..00ded84 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -624,3 +624,35 @@ def test_native_batched_preprocessing_matches_release_geometry(device): assert error.max() <= 1.001 assert error.mean() < 0.001 np.testing.assert_array_equal(compact, prepare_batch(source, compact=True)) + + +@pytest.mark.parametrize("compact", [False, True]) +def test_virtual_tta_padding_matches_materialized_pixels(compact): + from deployment.mambo_deploy.augmentation import EdgePad, RotatePad, View, _prepare_view + from deployment.mambo_deploy.preprocessing import prepare_uint8 + + prepare = prepare_uint8 if compact else preprocess + for shape in [(3, 1, 7), (3, 51, 83), (3, 1025, 1537)]: + image = np.random.default_rng(31).integers(0, 256, size=shape, dtype=np.uint8) + original = image.copy() + for transform in [View(), EdgePad(0), EdgePad(0.25), RotatePad(-30), RotatePad(30, 0.15)]: + expected = prepare(transform(image.copy())) + target = np.empty_like(expected) + actual = _prepare_view(image, transform, out=target, compact=compact) + assert actual is target + np.testing.assert_array_equal(actual, expected) + np.testing.assert_array_equal(image, original) + + +def test_builtin_subclass_keeps_custom_transform_copy_isolation(): + from deployment.mambo_deploy.augmentation import View, _prepare_view + + class MutatingView(View): + def __call__(self, image): + image.fill(0) + return image + + image = np.full((3, 9, 11), 255, dtype=np.uint8) + actual = _prepare_view(image, MutatingView(), compact=True) + assert not actual.any() + assert (image == 255).all() diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index 3eea9b2..b041bb7 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -209,3 +209,120 @@ def test_compact_stream_preserves_views_and_quarters_storage(tmp_path, tta): expected = np.stack([streaming.prepare_image(p.read_bytes(), tta)[index] for p, _ in paths[offset : offset + len(view)]]) assert view.nbytes * 4 == expected.nbytes np.testing.assert_allclose(finish(torch.from_numpy(view)).numpy(), expected, atol=1e-6) + + +def test_ready_work_prioritizes_earliest_batch(tmp_path, monkeypatch): + import time + from concurrent.futures import ThreadPoolExecutor + + items = inputs(tmp_path, 4) + indices = {p.read_bytes(): i for i, (p, _) in enumerate(items)} + preparing_first, release_first, later_read = threading.Event(), threading.Event(), threading.Event() + original = streaming.read_image + order, stats = [], {} + + def read(path, size, digest): + index = int(path.stem) + if index: + assert preparing_first.wait(3) + if index == 1: + assert later_read.wait(3) + data = original(path, size, digest) + if index == 3: + later_read.set() + return data + + def prepare(data, tta, out, **kwargs): + index = indices[data] + order.append(index) + if index == 0: + preparing_first.set() + assert release_first.wait(5) + out[0].fill(index) + + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + with ThreadPoolExecutor(max_workers=1) as pool: + future = pool.submit(list, streaming.prepared_stream(items, 2, read_workers=4, prepare_workers=1, read_window=4, stats=stats)) + try: + deadline = time.monotonic() + 3 + while stats.get("encoded_ready", 0) != 3 and time.monotonic() < deadline: + time.sleep(0.001) + assert stats.get("encoded_ready") == 3 + finally: + release_first.set() + assert len(future.result(timeout=5)) == 2 + assert order == [0, 1, 2, 3] + + +def test_lease_prevents_early_reuse_and_source_errors_propagate(tmp_path, monkeypatch): + items = inputs(tmp_path, 12) + second_prepared = threading.Event() + original = streaming.prepare_image + second_data = items[3][0].read_bytes() + + def prepare(data, tta, out=None, **kwargs): + result = original(data, tta, out=out, **kwargs) + if data == second_data: + second_prepared.set() + return result + + monkeypatch.setattr(streaming, "prepare_image", prepare) + with closing(streaming.prepared_stream(items, 2, prefetch_batches=1, reuse_buffers=True)) as stream: + _, first = next(stream) + assert second_prepared.wait(3) + # Preparing the next batch must not overwrite the batch still held by the consumer. + np.testing.assert_array_equal(first[0], np.stack([preprocess(p) for p, _ in items[:2]])) + _, second = next(stream) + np.testing.assert_array_equal(second[0][0], preprocess(items[2][0])) + + def broken(): + yield items[0] + raise OSError("input iterator failed") + + with pytest.raises(OSError, match="input iterator failed"): + list(streaming.prepared_stream(broken(), 2)) + assert not any(t.name.startswith(("mambo-read", "mambo-prepare", "mambo-stream")) for t in threading.enumerate()) + + +def test_metadata_latency_does_not_block_preparation(tmp_path, monkeypatch): + from pathlib import Path + + items = inputs(tmp_path, 5) + prepared = threading.Event() + original_stat, original_prepare = Path.stat, streaming.prepare_image + threads = [] + + def stat(path, *args, **kwargs): + if path in [p for p, _ in items]: + threads.append(threading.current_thread().name) + if path == items[2][0]: + assert prepared.wait(3), "metadata IO must not stall the preparation owner" + return original_stat(path, *args, **kwargs) + + def prepare(data, tta, out=None, **kwargs): + result = original_prepare(data, tta, out=out, **kwargs) + prepared.set() + return result + + monkeypatch.setattr(Path, "stat", stat) + monkeypatch.setattr(streaming, "prepare_image", prepare) + assert len(list(streaming.prepared_stream(items, 2, read_workers=4, read_window=8))) == 3 + assert all(name.startswith("mambo-read") for name in threads) + + +def test_close_wakes_readers_waiting_for_byte_capacity(tmp_path): + items = inputs(tmp_path, 8) + budget = max(p.stat().st_size for p, _ in items) + with closing(streaming.prepared_stream(items, 1, read_workers=4, read_window=8, prefetch_batches=0, encoded_budget=budget)) as stream: + next(stream) + assert not any(t.name.startswith(("mambo-read", "mambo-prepare", "mambo-stream")) for t in threading.enumerate()) + + +def test_invalid_source_fails_before_starting_workers(): + class InvalidSource: + def __iter__(self): + raise ValueError("cannot iterate source") + + with pytest.raises(ValueError, match="cannot iterate source"): + next(streaming.prepared_stream(InvalidSource(), 1)) From eb5d2702738ad9e57f91fd65ddc592d345444f6d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 11:17:35 +0200 Subject: [PATCH 081/221] perf: admit encoded reads before dispatching IO workers --- deployment/mambo_deploy/streaming.py | 91 ++++++++++--------------- dev/releases/mambo_v3/speed-smoke.md | 6 +- docs/mambo-inference-pipeline-review.md | 46 ++++++++++++- tests/releases/test_streaming.py | 45 +++++++++++- 4 files changed, 129 insertions(+), 59 deletions(-) diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 9bea4e1..63a70cf 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -4,7 +4,7 @@ import io import threading import time -from concurrent.futures import CancelledError, ThreadPoolExecutor +from concurrent.futures import ThreadPoolExecutor from heapq import heappop, heappush from pathlib import Path from queue import Empty, SimpleQueue @@ -40,42 +40,9 @@ def prepare_image(data, tta, out=None, *, compact=False): return out -class EncodedReads: - """Own byte reservations in input order; metadata and file IO stay in readers.""" - - def __init__(self, budget, stats): - self.budget, self.stats = budget, stats - self.condition = threading.Condition() - self.next_index = self.reserved = 0 - self.closed = False - stats["encoded_bytes"] = 0 - - def read(self, index, path, digest): - path = Path(path) - size = path.stat().st_size - if size > self.budget: - raise ValueError(f"Image exceeds encoded byte budget: {path}") - with self.condition: - self.condition.wait_for(lambda: self.closed or (index == self.next_index and self.reserved + size <= self.budget)) - if self.closed: - raise CancelledError() - self.reserved += size - self.stats["encoded_bytes"] = self.reserved - self.stats["peak_encoded_bytes"] = max(self.stats.get("peak_encoded_bytes", 0), self.reserved) - self.next_index += 1 - self.condition.notify_all() - return size, read_image(path, size, digest) - - def release(self, size): - with self.condition: - self.reserved -= size - self.stats["encoded_bytes"] = self.reserved - self.condition.notify_all() - - def close(self): - with self.condition: - self.closed = True - self.condition.notify_all() +def image_metadata(path, digest): + path = Path(path) + return path, path.stat().st_size, digest def prepared_stream( @@ -95,8 +62,9 @@ def prepared_stream( ): """Yield ordered (offset, batch views); reusable buffers are leased until next(). - The reading stage owns byte admission. One preparation owner assigns disjoint - slices and recycles returned batches; workers report completions. Encoded bytes + One owner admits reads, assigns disjoint preparation slices and recycles + returned batches; IO workers only do metadata/file IO, never wait for capacity. + Workers report completions to the owner. Encoded bytes stay reserved through preparation; batch capacity is released by the consumer. Close on early exit. Shutdown waits for running filesystem/preparation calls. """ @@ -121,26 +89,30 @@ def submit(pool, kind, index, size, function, *args): pool.submit(function, *args).add_done_callback(lambda future: events.put((kind, index, size, future))) def produce(): - ready, available, active = [], [], {} - consumed = admitted = emitted = 0 - reading = preparing = 0 + ready, available, active, metadata = [], [], {}, {} + consumed = admitted = emitted = next_read = reserved = 0 + reading = inspecting = preparing = 0 exhausted = False readers = ThreadPoolExecutor(max_workers=read_workers, thread_name_prefix="mambo-read") preparers = ThreadPoolExecutor(max_workers=prepare_workers, thread_name_prefix="mambo-prepare") - encoded = EncodedReads(encoded_budget, stats) - stats.update(prepared_images=0, prepared_batches=0, host_buffer_allocations=0) + stats.update(encoded_bytes=0, prepared_images=0, prepared_batches=0, host_buffer_allocations=0) def complete(event): - nonlocal consumed, reading, preparing + nonlocal consumed, reading, inspecting, preparing, reserved kind, index, size, value = event - if kind == "read": + if kind == "metadata": + inspecting -= 1 + path, length, digest = value.result() + if length > encoded_budget: + raise ValueError(f"Image exceeds encoded byte budget: {path}") + metadata[index] = (path, length, digest) + elif kind == "read": reading -= 1 - size, data = value.result() - heappush(ready, (index, size, data)) + heappush(ready, (index, size, value.result())) elif kind == "prepared": stats["preparation_worker_seconds"] = stats.get("preparation_worker_seconds", 0.0) + value.result() preparing -= 1 - encoded.release(size) + reserved -= size active[index // batch_size][1] += 1 stats["prepared_images"] += 1 elif kind == "taken": @@ -175,14 +147,26 @@ def complete(event): submit(preparers, "prepared", index, size, prepare_into, data, target) preparing += 1 del data - while not exhausted and admitted < consumed + read_window and reading < read_workers: + # Reserve before dispatch, in order: later images cannot crowd an + # earlier required image out of the byte budget. Readers never wait. + while next_read in metadata and reading + inspecting < read_workers: + path, size, digest = metadata[next_read] + if reserved + size > encoded_budget: + break + del metadata[next_read] + reserved += size + stats["peak_encoded_bytes"] = max(stats.get("peak_encoded_bytes", 0), reserved) + submit(readers, "read", next_read, size, read_image, path, size, digest) + reading += 1 + next_read += 1 + while not exhausted and admitted < consumed + read_window and reading + inspecting < read_workers: try: path, digest = next(source) except StopIteration: exhausted = True break - submit(readers, "read", admitted, 0, encoded.read, admitted, path, digest) - reading += 1 + submit(readers, "metadata", admitted, 0, image_metadata, path, digest) + inspecting += 1 admitted += 1 while emitted // batch_size in active: views, count = active[emitted // batch_size] @@ -193,7 +177,7 @@ def complete(event): stats["prepared_batches"] += 1 output.put((emitted, tuple(view[:count] for view in views))) emitted += count - stats.update(reading=reading, encoded_ready=len(ready), preparing=preparing) + stats.update(reading=reading, inspecting=inspecting, encoded_bytes=reserved, encoded_ready=len(ready), preparing=preparing) stats["peak_prepared_images"] = max(stats.get("peak_prepared_images", 0), stats["prepared_images"] + preparing) if exhausted and consumed == admitted: output.put(None) @@ -203,7 +187,6 @@ def complete(event): except BaseException as error: output.put(error) finally: - encoded.close() readers.shutdown(wait=True, cancel_futures=True) preparers.shutdown(wait=True, cancel_futures=True) # Completed futures can retain encoded images; discard them after shutdown. diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index b177c7d..0b22284 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -68,8 +68,10 @@ none of these installation commands. ## Streaming ownership and preparation update Reuse the full B200, its working environments and the same command above with -`--output /work/mambo-speed/b200-full-streaming`. This checks all four affected -variants against `b200-full-compact`; do not repeat the MIG or GPU-resident test. +`--output /work/mambo-speed/b200-full-admission`. This checks the correction to +reader admission after `b200-full-streaming` regressed. Compare all four variants +with both `b200-full-compact` and `b200-full-streaming`; do not repeat the MIG or +GPU-resident test. No environment rebuild, model change or new setting is needed. Keep batch size and worker settings unchanged so the pipeline is the variable being compared. The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 9759ca1..98444c7 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -477,6 +477,9 @@ and the published deployment figures have not been regenerated for this change. ## Streaming ownership and virtual padding +The initial implementation below was delivered in `0c6ace2`; its B200 regression +and the subsequent admission correction are recorded below. + The full-B200 resident experiment establishes a useful reference for the existing GPU execution: 3,667 images/s at batch 256, 3,781 at 512 and 3,818 at 1,024. The trace has almost continuous kernel execution; increasing batch size is not the @@ -520,10 +523,49 @@ An initial laptop comparison of the completion/virtual-padding changes showed no clear throughput shift on 256 small Flemming images: about 269 versus 270 images/s without TTA and 98 versus 96 with TTA, with overlapping repetition ranges. Predicted labels matched at all three ranks. This timing preceded moving metadata lookup into -readers; the final implementation has not been benchmarked on B200. It does not -establish a speedup. Local evidence is retained under `local-evidence/stream-owner/`. +readers; it therefore did not validate the implementation subsequently tested on +B200. It does not establish a speedup. Local evidence is retained under `local-evidence/stream-owner/`. Use the existing [full-B200 smoke command](../dev/releases/mambo_v3/speed-smoke.md#streaming-ownership-and-preparation-update) with a fresh output directory, keeping the same batch and worker settings. Reuse the resident reference and existing environments; no MIG or quality campaign is needed for this bounded pipeline comparison. + + +### B200 regression and read admission correction + +The subsequent `b200-full-streaming` run regressed against `b200-full-compact`: + +| Variant | Compact streaming, images/s | `0c6ace2` streaming, images/s | +|---|---:|---:| +| Torch | 1,232.4 | 604.8 | +| ONNX | 697.8 | 400.9 | +| Torch + TTA | 412.1 | 296.9 | +| ONNX + TTA | 254.6 | 213.9 | + +These are the supplied B200 summaries, not local benchmark estimates. Local +correctness tests did not establish performance at the B200's concurrency. +Inspection found that `EncodedReads` made reader workers wait for their input-order +turn and byte capacity, with `notify_all()` on every admission/release. This created +avoidable contention and occupied IO workers with scheduling waits. Its exact share +of the measured slowdown has not been isolated. + +The correction removes that class and its condition variable. The existing owner +receives asynchronous metadata completions, reserves bytes in input order, then +submits only admitted reads. Metadata and reads share the existing IO pool, with +reads dispatched first when slots are available. Readers perform filesystem work; +capacity waits consume no reader slots. Metadata lookahead remains bounded by +`read_window`; encoded bytes remain reserved through preparation. Ordered admission +prevents later images from exhausting the budget ahead of required earlier images; +actual reads and preparation still complete concurrently and out of order. + +This removes 17 production lines without adding pools, dependencies or settings. +Virtual padding and reduced image copies are retained. Static checks and deployment +Ruff checks passed; the focused streaming suite passed 15 tests with three unchanged +CUDA transfer tests skipped. It covers ordering, budgets, buffer ownership, failures, +shutdown and continued metadata progress under byte-budget backpressure. GPU transfer +and model code did not change; their existing validation is reused. + +Performance of the correction remains unmeasured. Run the same four-variant full-B200 +smoke once in `b200-full-admission`, retaining the compact and regressed outputs for +comparison. Reuse the environments and resident reference; no quality or MIG rerun. diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index b041bb7..cb3562d 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -311,7 +311,7 @@ def prepare(data, tta, out=None, **kwargs): assert all(name.startswith("mambo-read") for name in threads) -def test_close_wakes_readers_waiting_for_byte_capacity(tmp_path): +def test_close_with_pending_byte_admission(tmp_path): items = inputs(tmp_path, 8) budget = max(p.stat().st_size for p, _ in items) with closing(streaming.prepared_stream(items, 1, read_workers=4, read_window=8, prefetch_batches=0, encoded_budget=budget)) as stream: @@ -326,3 +326,46 @@ def __iter__(self): with pytest.raises(ValueError, match="cannot iterate source"): next(streaming.prepared_stream(InvalidSource(), 1)) + + +def test_full_byte_budget_does_not_occupy_io_workers(tmp_path, monkeypatch): + from concurrent.futures import ThreadPoolExecutor + + items = inputs(tmp_path, 6) + budget = max(p.stat().st_size for p, _ in items) + inspected, reads = [], [] + all_inspected, release_prepare = threading.Event(), threading.Event() + original_metadata, original_read = streaming.image_metadata, streaming.read_image + + def metadata(path, digest): + result = original_metadata(path, digest) + inspected.append(path) + if len(inspected) == len(items): + all_inspected.set() + return result + + def read(path, size, digest): + reads.append(path) + return original_read(path, size, digest) + + def prepare(data, tta, out, **kwargs): + assert release_prepare.wait(5) + out[0].fill(0) + + monkeypatch.setattr(streaming, "image_metadata", metadata) + monkeypatch.setattr(streaming, "read_image", read) + monkeypatch.setattr(streaming, "prepare_image", prepare) + stats = {} + with ThreadPoolExecutor(max_workers=1) as pool: + future = pool.submit( + list, + streaming.prepared_stream(items, 2, read_workers=2, read_window=6, encoded_budget=budget, stats=stats), + ) + try: + assert all_inspected.wait(3), "byte-budget backpressure must leave IO workers available for metadata" + assert len(reads) <= 1 # The reservation includes bytes held by preparation. + finally: + release_prepare.set() + assert len(future.result(timeout=5)) == 3 + assert stats["peak_encoded_bytes"] <= budget + assert stats["encoded_bytes"] == 0 From 0ac04223a411bb09965cf9cf9320cd667e4ab277 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 11:33:50 +0200 Subject: [PATCH 082/221] perf: decode natively and sample rotation views without image round trips --- deployment/mambo_deploy/augmentation.py | 55 +++++++++++++++++---- deployment/mambo_deploy/predictor.py | 20 ++++++-- deployment/mambo_deploy/preprocessing.py | 49 ++++++++++++++----- deployment/mambo_deploy/streaming.py | 10 ++-- dev/releases/mambo_v3/speed-smoke.md | 25 ++++++---- docs/mambo-inference-pipeline-review.md | 48 ++++++++++++++++-- tests/releases/test_deployment.py | 62 +++++++++++++++++++++++- 7 files changed, 225 insertions(+), 44 deletions(-) diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index 23dd0cf..135c926 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -1,12 +1,12 @@ """Outer, runtime-independent TTA over decoded CHW images.""" import hashlib +import math from dataclasses import dataclass import numpy as np -from PIL import Image -from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess +from .preprocessing import RECIPE, _nearest_indices, _rgb, _square, prepare_uint8, preprocess @dataclass(frozen=True) @@ -62,15 +62,52 @@ def __post_init__(self): EdgePad(self.padding) def rotate(self, image): - rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( - self.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) - ) - return np.asarray(rotated).transpose(2, 0, 1) + return _rotated(image, self.degrees) def __call__(self, image): return EdgePad(self.padding)(self.rotate(image)) +def _rotated(image, degrees, padding=None): + """Sample an expanded rotation, optionally only at the final square's pixels. + + Preserve rotate-to-uint8 THEN nearest selection, including virtual edge pad. + Sampling a resized source instead would change the augmentation geometry. + """ + angle = degrees % 360 + if angle % 90 == 0: + rotated = np.rot90(image, int(angle // 90), axes=(1, 2)) + return rotated.copy() if padding is None else _square(rotated, padding) + height, width = image.shape[1:] + a, b = round(math.cos(-math.radians(angle)), 15), round(math.sin(-math.radians(angle)), 15) + c, f = a * (-width / 2) + b * (-height / 2) + width / 2, -b * (-width / 2) + a * (-height / 2) + height / 2 + corners = [(0, 0), (width, 0), (width, height), (0, height)] + xx, yy = zip(*[(a * x + b * y + c, -b * x + a * y + f) for x, y in corners], strict=True) + nw, nh = math.ceil(max(xx)) - math.floor(min(xx)), math.ceil(max(yy)) - math.floor(min(yy)) + c += a * (-(nw - width) / 2) + b * (-(nh - height) / 2) + f += -b * (-(nw - width) / 2) + a * (-(nh - height) / 2) + x, y = np.arange(nw), np.arange(nh) + if padding is not None: + # Upscaling and edge padding repeat pixels: interpolate each only once. + x, columns = np.unique(_nearest_indices(nw, padding), return_inverse=True) + y, rows = np.unique(_nearest_indices(nh, padding), return_inverse=True) + x, y = x[None, :] + 0.5, y[:, None] + 0.5 + sx, sy = a * x + b * y + c, -b * x + a * y + f + outside = (sx < 0) | (sx >= width) | (sy < 0) | (sy >= height) + sx, sy = sx - 0.5, sy - 0.5 + ix, iy = np.floor(sx).astype(np.intp), np.floor(sy).astype(np.intp) + dx, dy = sx - ix, sy - iy + x0, x1 = np.clip(ix, 0, width - 1), np.clip(ix + 1, 0, width - 1) + y0, y1 = np.clip(iy, 0, height - 1), np.clip(iy + 1, 0, height - 1) + top, bottom = image[:, y0, x0].astype(np.float64), image[:, y1, x0].astype(np.float64) + top += (image[:, y0, x1] - top) * dx + bottom += (image[:, y1, x1] - bottom) * dx + top += (bottom - top) * dy + result = top.astype(np.uint8) + result[:, outside] = np.array([124, 116, 104], dtype=np.uint8)[:, None] + return result if padding is None else result[:, rows[:, None], columns[None, :]] + + @dataclass(frozen=True) class SaltAndPepper: """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" @@ -158,19 +195,19 @@ def _prepare_view(image, transform, out=None, *, compact=False): prepare = prepare_uint8 if compact else preprocess # Exact built-in types are non-mutating; subclasses/custom callables retain isolation. if type(transform) is RotatePad: - return prepare(transform.rotate(image), out=out, padding=transform.padding) + return prepare(_rotated(image, transform.degrees, transform.padding), out=out) if type(transform) is EdgePad: return prepare(image, out=out, padding=transform.fraction) return prepare(transform(image if type(transform) in (View, SaltAndPepper) else image.copy()), out=out) -def prepared_views(items, tta, pool=None, *, compact=False): +def prepared_views(items, tta, pool=None, *, compact=False, decode=_rgb): """Decode once and lazily prepare views in recipe order.""" def mapped(fn, values): return list(pool.map(fn, values)) if pool and len(values) > 1 else [fn(item) for item in values] - decoded = mapped(_rgb, items) + decoded = mapped(decode, items) def batches(): for transform in tta.transforms: diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 6422f4d..894048d 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -16,7 +16,7 @@ from .bundle import Bundle from .download import default_bundle from .onnx_session import create_session -from .preprocessing import RECIPE, TorchPreprocess, image_items, prepare_batch +from .preprocessing import RECIPE, TorchDecode, TorchPreprocess, _rgb, image_items, prepare_batch from .result_worker import ResultWorker from .results import HierarchyPlan, Prediction from .streaming import prepared_stream @@ -182,6 +182,10 @@ def _torch_api(self): raise ImportError("Install the matching mini_trainer wheel and a suitable PyTorch backend") from error return torch, bypass_submodule + @cached_property + def _decode(self): + return TorchDecode(self._torch_api[0]) if self.backend == "torch" else _rgb + @cached_property def _device_preprocess(self): return TorchPreprocess(self._torch_api[0], self.device) @@ -350,7 +354,15 @@ def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=Non compact = self._compact_inputs factory = pinned_factory(self.device, compact=compact) if accelerated and self.backend == "torch" else None source = prepared_stream( - items, batch_size, tta=self.tta, stats=stats, reuse_buffers=True, buffer_factory=factory, compact=compact, **options + items, + batch_size, + tta=self.tta, + stats=stats, + reuse_buffers=True, + buffer_factory=factory, + compact=compact, + decode=self._decode, + **options, ) if accelerated: yield from device_batches(source, self.backend, self.device, stats) @@ -360,7 +372,7 @@ def prepared_batches(self, items, batch_size, *, device_prefetch=True, stats=Non yield offset, views, len(views[0]) def _prepare(self, batch, pool=None): - return prepare_batch(batch, pool, compact=self._compact_inputs) + return prepare_batch(batch, pool, compact=self._compact_inputs, decode=self._decode) def _infer(self, images, embeddings=False): return (self._torch if self.backend == "torch" else self._onnx)(images, embeddings) @@ -378,7 +390,7 @@ def _predict(self, x, embeddings=False, topk=1): while batch := list(islice(items, self.batch_size)): if self.backend == "torch": views = ( - prepared_views(batch, self.tta, pool, compact=self._compact_inputs) + prepared_views(batch, self.tta, pool, compact=self._compact_inputs, decode=self._decode) if self.tta else (self._prepare(batch, pool),) ) diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index b4d914b..eec511c 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -1,5 +1,6 @@ """Release image geometry with portable CPU and batched Torch finishing.""" +import io from pathlib import Path import numpy as np @@ -21,11 +22,11 @@ def _rgb(item): - if isinstance(item, (str, Path)): - with Image.open(item) as im: - array = np.asarray(im.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) - elif isinstance(item, Image.Image): - array = np.asarray(item.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) + if isinstance(item, (str, Path, bytes)): + with Image.open(io.BytesIO(item) if isinstance(item, bytes) else item) as im: + return _rgb(im) + if isinstance(item, Image.Image): + array = np.asarray(item if item.mode == "RGB" else item.convert("RGB"), dtype=np.uint8).transpose(2, 0, 1) else: if hasattr(item, "detach"): item = item.detach().cpu().numpy() @@ -59,13 +60,17 @@ def _rgb(item): _STD = np.array(RECIPE["std"], dtype=np.float32)[:, None, None] +def _nearest_indices(length, padding=0): + pad = int(np.ceil(length * padding)) + return np.clip((_GRID * np.float32((length + 2 * pad) / _SIZE)).astype(np.intp) - pad, 0, length - 1) + + def _square(item, padding=0): image = _rgb(item) height, width = image.shape[1:] - py, px = int(np.ceil(height * padding)), int(np.ceil(width * padding)) - yy = np.clip((_GRID * np.float32((height + 2 * py) / _SIZE)).astype(np.intp) - py, 0, height - 1) - xx = np.clip((_GRID * np.float32((width + 2 * px) / _SIZE)).astype(np.intp) - px, 0, width - 1) - return image[:, yy[:, None], xx[None, :]] + if height == width == _SIZE and padding == 0: + return image + return image[:, _nearest_indices(height, padding)[:, None], _nearest_indices(width, padding)[None, :]] def prepare_uint8(item, out=None, *, padding=0): @@ -91,13 +96,13 @@ def preprocess(item, out=None, *, padding=0): return out -def prepare_batch(items, pool=None, transform=None, *, compact=False): +def prepare_batch(items, pool=None, transform=None, *, compact=False, decode=_rgb): """Fill one contiguous batch without per-image output allocations and stacking.""" output = np.empty((len(items), 3, _SIZE, _SIZE), dtype=np.uint8 if compact else np.float32) prepare = prepare_uint8 if compact else preprocess def fill(index): - item = items[index] + item = decode(items[index]) if transform is not None: item = transform(item.copy()) prepare(item, out=output[index]) @@ -111,6 +116,28 @@ def fill(index): return output +class TorchDecode: + """Native CPU JPEG/PNG decoding, using the Torch backend's existing dependency.""" + + def __init__(self, torch): + from torchvision.io import ImageReadMode, decode_image + + self.torch, self.decode, self.mode = torch, decode_image, ImageReadMode.RGB + + def __call__(self, item): + if isinstance(item, (str, Path)): + item = Path(item).read_bytes() + if isinstance(item, bytes) and item.startswith((b"\xff\xd8\xff", b"\x89PNG\r\n\x1a\n")): + # Writable encoded storage avoids a read-only tensor view; only compressed + # bytes are copied. Decoded pixels stay in native storage shared with NumPy. + encoded = self.torch.frombuffer(bytearray(item), dtype=self.torch.uint8) + decoded = self.decode(encoded, mode=self.mode, apply_exif_orientation=False) + if decoded.dtype == self.torch.uint8: + return decoded.numpy() + # Preserve Pillow RGB conversion for high-bit-depth PNGs. + return _rgb(item) + + class TorchPreprocess: """Finish a batch of uint8 squares with native operations on its Torch device.""" diff --git a/deployment/mambo_deploy/streaming.py b/deployment/mambo_deploy/streaming.py index 63a70cf..645c24e 100644 --- a/deployment/mambo_deploy/streaming.py +++ b/deployment/mambo_deploy/streaming.py @@ -1,7 +1,6 @@ """Bounded path streaming with independent IO and image preparation concurrency.""" import hashlib -import io import threading import time from concurrent.futures import ThreadPoolExecutor @@ -10,7 +9,6 @@ from queue import Empty, SimpleQueue import numpy as np -from PIL import Image from .augmentation import _prepare_view from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess @@ -26,9 +24,8 @@ def read_image(path, size, digest): return data -def prepare_image(data, tta, out=None, *, compact=False): - with Image.open(io.BytesIO(data)) as image: - decoded = _rgb(image) +def prepare_image(data, tta, out=None, *, compact=False, decode=_rgb): + decoded = decode(data) prepare = prepare_uint8 if compact else preprocess if out is None: return (prepare(decoded),) if tta is None else tuple(_prepare_view(decoded, view, compact=compact) for view in tta.transforms) @@ -59,6 +56,7 @@ def prepared_stream( reuse_buffers=False, buffer_factory=None, compact=False, + decode=_rgb, ): """Yield ordered (offset, batch views); reusable buffers are leased until next(). @@ -82,7 +80,7 @@ def prepared_stream( def prepare_into(data, target): start = time.perf_counter() - prepare_image(data, tta, out=target, compact=compact) + prepare_image(data, tta, out=target, compact=compact, decode=decode) return time.perf_counter() - start def submit(pool, kind, index, size, function, *args): diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 0b22284..5c8b128 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -65,14 +65,21 @@ Use the ONNX version already qualified on B200 here. This is an environment-spec test setup, not a new deployment-wide dependency pin. Existing environments need none of these installation commands. -## Streaming ownership and preparation update +## Current preparation update + +Reuse the full B200 and its working environments. This checks native Torch decoding +and direct NumPy rotation sampling against `b200-full-admission`: + +```sh +export MAMBO_CACHE=/work/mambo-cache +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --onnx-python /tmp/mambo-ort-ptx/bin/python \ + --output /work/mambo-speed/b200-full-preparation +``` -Reuse the full B200, its working environments and the same command above with -`--output /work/mambo-speed/b200-full-admission`. This checks the correction to -reader admission after `b200-full-streaming` regressed. Compare all four variants -with both `b200-full-compact` and `b200-full-streaming`; do not repeat the MIG or -GPU-resident test. No environment rebuild, model change or new setting is needed. Keep batch size -and worker settings unchanged so the pipeline is the variable being compared. -The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers -and CPU result construction and remains a reference, not an end-to-end promise. +and worker settings unchanged. Run the four variants once; do not repeat the MIG, +quality or GPU-resident tests. The existing resident reference at batch 256 is +3,667 images/s; it excludes transfers and CPU result construction and remains a +reference, not an end-to-end promise. Keep prior output directories for comparison. diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 98444c7..09f0ba3 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -526,7 +526,7 @@ labels matched at all three ranks. This timing preceded moving metadata lookup i readers; it therefore did not validate the implementation subsequently tested on B200. It does not establish a speedup. Local evidence is retained under `local-evidence/stream-owner/`. -Use the existing [full-B200 smoke command](../dev/releases/mambo_v3/speed-smoke.md#streaming-ownership-and-preparation-update) +Use the existing [full-B200 smoke command](../dev/releases/mambo_v3/speed-smoke.md#current-preparation-update) with a fresh output directory, keeping the same batch and worker settings. Reuse the resident reference and existing environments; no MIG or quality campaign is needed for this bounded pipeline comparison. @@ -566,6 +566,46 @@ CUDA transfer tests skipped. It covers ordering, budgets, buffer ownership, fail shutdown and continued metadata progress under byte-budget backpressure. GPU transfer and model code did not change; their existing validation is reused. -Performance of the correction remains unmeasured. Run the same four-variant full-B200 -smoke once in `b200-full-admission`, retaining the compact and regressed outputs for -comparison. Reuse the environments and resident reference; no quality or MIG rerun. +The `b200-full-admission` run subsequently measured streaming throughput of 1,226.8, +701.6, 473.5 and 312.9 images/s for Torch, ONNX, Torch + TTA and ONNX + TTA. This +restored the compact baseline for inference without TTA; TTA improved by about 15% +and 23%. Request throughput was 853.2, 420.7, 287.2 and 161.8 images/s, respectively; +peak host memory was 4.47, 5.20, 6.25 and 7.70 GiB. This is recovery from the admission +regression, not resolution of the Torch streaming gap to the resident reference. + + +### Decode once; sample only the rotation pixels used + +The next increment changes preparation work, leaving scheduling, buffers, transfers +and GPU inference unchanged: + +- Torch JPEG/PNG inputs use the existing torchvision native CPU decoder, as the core + loader does. Its decoded tensor shares storage with NumPy; there is no full-size + Pillow RGB copy/raw-byte export. The decoder is resolved once per predictor before + dispatching preparation. Other formats, PIL/array inputs and high-bit-depth PNG + conversion retain the portable path. Standalone ONNX does not import Torch. +- Portable RGB decoding skips `convert("RGB")` when the input is already RGB. Pillow's + [conversion implementation](https://github.com/python-pillow/Pillow/blob/main/src/PIL/Image.py) + otherwise copies even same-mode images, and its array interface exports raw bytes. +- Built-in arbitrary-angle TTA operates directly on NumPy arrays. It maps the final + nearest-square coordinates through the expanded rotation and interpolates only + those pixels, preserving the existing rotate-to-uint8, edge-pad, nearest-sample + ordering. Repeated positions from padding/upscaling are evaluated once. Rotation + no longer converts arrays to Pillow and back or builds a full-resolution rotated + canvas during preparation. Its expansion, fill and pixel-center conventions match + the previous [Pillow geometry](https://github.com/python-pillow/Pillow/blob/main/src/libImaging/Geometry.c). + Custom transforms retain their original full-resolution inputs and copy isolation. +- Already square 384-pixel inputs bypass redundant nearest gathering; CPU FP32 and + Torch batched finishing retain their existing interpolation/normalization. + +This is a modest net production-code increase for a native decoder adapter and an +array sampler, not a claimed code-count reduction. It removes representation round +trips and discarded image work without new dependencies, pools, flags or model assets. + +Validation was limited to the affected deployment/streaming suite (83 passed, four +CUDA checks skipped) and focused checks for the subsequent high-bit-depth fallback +and repeated-pixel sampling. Pixel fixtures compare against the prior Pillow rotation, +including expanded non-square canvases, thin/large images and cardinal rotations. +No local throughput sweep, model-quality campaign or GPU-reference rerun was performed. +B200 throughput remains unmeasured: compare the same smoke in `b200-full-preparation` +against `b200-full-admission`, preserving all worker settings and environments. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 00ded84..223b556 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -636,7 +636,15 @@ def test_virtual_tta_padding_matches_materialized_pixels(compact): image = np.random.default_rng(31).integers(0, 256, size=shape, dtype=np.uint8) original = image.copy() for transform in [View(), EdgePad(0), EdgePad(0.25), RotatePad(-30), RotatePad(30, 0.15)]: - expected = prepare(transform(image.copy())) + if isinstance(transform, RotatePad): + from PIL import Image + + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + transform.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + expected = prepare(EdgePad(transform.padding)(np.asarray(rotated).transpose(2, 0, 1))) + else: + expected = prepare(transform(image.copy())) target = np.empty_like(expected) actual = _prepare_view(image, transform, out=target, compact=compact) assert actual is target @@ -656,3 +664,55 @@ def __call__(self, image): actual = _prepare_view(image, MutatingView(), compact=True) assert not actual.any() assert (image == 255).all() + + +@pytest.mark.parametrize("format", ["JPEG", "PNG", "TIFF"]) +def test_native_decode_matches_portable_inputs(tmp_path, format): + import io + + import torch + from PIL import Image + + from deployment.mambo_deploy.preprocessing import TorchDecode, _rgb + + decode = TorchDecode(torch) + source = np.random.default_rng(12).integers(0, 256, (113, 179, 3), dtype=np.uint8) + for image in [Image.fromarray(source), Image.fromarray(source[..., 0])]: + encoded = io.BytesIO() + image.save(encoded, format=format) + data = encoded.getvalue() + path = tmp_path / ("image." + format.lower()) + path.write_bytes(data) + expected = _rgb(data) + np.testing.assert_array_equal(decode(data), expected) + np.testing.assert_array_equal(decode(path), expected) + np.testing.assert_array_equal(decode(image), expected if format != "JPEG" else _rgb(image)) + np.testing.assert_array_equal(decode(source.transpose(2, 0, 1)), source.transpose(2, 0, 1)) + + +@pytest.mark.parametrize("angle", [0, 90, 180, -90, -30, 10, 30]) +def test_numpy_rotation_preserves_expansion_fill_and_interpolation(angle): + from PIL import Image + + from deployment.mambo_deploy.augmentation import RotatePad + + source = np.random.default_rng(47).integers(0, 256, (3, 41, 68), dtype=np.uint8) + expected = np.asarray( + Image.fromarray(source.transpose(1, 2, 0)).rotate(angle, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104)) + ).transpose(2, 0, 1) + np.testing.assert_array_equal(RotatePad(angle).rotate(source), expected) + + +def test_native_decode_preserves_high_bit_depth_png_conversion(): + import io + + import torch + from PIL import Image + + from deployment.mambo_deploy.preprocessing import TorchDecode, _rgb + + source = np.array([[0, 128, 255, 256, 32768, 65535]], dtype=np.uint16) + encoded = io.BytesIO() + Image.fromarray(source).save(encoded, format="PNG") + data = encoded.getvalue() + np.testing.assert_array_equal(TorchDecode(torch)(data), _rgb(data)) From 77dcfee415a5b7bd4f44331f98f73e90c40537e1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 11:52:28 +0200 Subject: [PATCH 083/221] perf: retain native decoding and restore compiled rotation --- deployment/mambo_deploy/augmentation.py | 51 ++++--------------------- dev/releases/mambo_v3/speed-smoke.md | 7 ++-- docs/mambo-inference-pipeline-review.md | 20 ++++++++-- tests/releases/test_deployment.py | 13 ------- 4 files changed, 28 insertions(+), 63 deletions(-) diff --git a/deployment/mambo_deploy/augmentation.py b/deployment/mambo_deploy/augmentation.py index 135c926..4aa2f60 100644 --- a/deployment/mambo_deploy/augmentation.py +++ b/deployment/mambo_deploy/augmentation.py @@ -1,12 +1,12 @@ """Outer, runtime-independent TTA over decoded CHW images.""" import hashlib -import math from dataclasses import dataclass import numpy as np +from PIL import Image -from .preprocessing import RECIPE, _nearest_indices, _rgb, _square, prepare_uint8, preprocess +from .preprocessing import RECIPE, _rgb, prepare_uint8, preprocess @dataclass(frozen=True) @@ -62,52 +62,15 @@ def __post_init__(self): EdgePad(self.padding) def rotate(self, image): - return _rotated(image, self.degrees) + rotated = Image.fromarray(image.transpose(1, 2, 0)).rotate( + self.degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) + ) + return np.asarray(rotated).transpose(2, 0, 1) def __call__(self, image): return EdgePad(self.padding)(self.rotate(image)) -def _rotated(image, degrees, padding=None): - """Sample an expanded rotation, optionally only at the final square's pixels. - - Preserve rotate-to-uint8 THEN nearest selection, including virtual edge pad. - Sampling a resized source instead would change the augmentation geometry. - """ - angle = degrees % 360 - if angle % 90 == 0: - rotated = np.rot90(image, int(angle // 90), axes=(1, 2)) - return rotated.copy() if padding is None else _square(rotated, padding) - height, width = image.shape[1:] - a, b = round(math.cos(-math.radians(angle)), 15), round(math.sin(-math.radians(angle)), 15) - c, f = a * (-width / 2) + b * (-height / 2) + width / 2, -b * (-width / 2) + a * (-height / 2) + height / 2 - corners = [(0, 0), (width, 0), (width, height), (0, height)] - xx, yy = zip(*[(a * x + b * y + c, -b * x + a * y + f) for x, y in corners], strict=True) - nw, nh = math.ceil(max(xx)) - math.floor(min(xx)), math.ceil(max(yy)) - math.floor(min(yy)) - c += a * (-(nw - width) / 2) + b * (-(nh - height) / 2) - f += -b * (-(nw - width) / 2) + a * (-(nh - height) / 2) - x, y = np.arange(nw), np.arange(nh) - if padding is not None: - # Upscaling and edge padding repeat pixels: interpolate each only once. - x, columns = np.unique(_nearest_indices(nw, padding), return_inverse=True) - y, rows = np.unique(_nearest_indices(nh, padding), return_inverse=True) - x, y = x[None, :] + 0.5, y[:, None] + 0.5 - sx, sy = a * x + b * y + c, -b * x + a * y + f - outside = (sx < 0) | (sx >= width) | (sy < 0) | (sy >= height) - sx, sy = sx - 0.5, sy - 0.5 - ix, iy = np.floor(sx).astype(np.intp), np.floor(sy).astype(np.intp) - dx, dy = sx - ix, sy - iy - x0, x1 = np.clip(ix, 0, width - 1), np.clip(ix + 1, 0, width - 1) - y0, y1 = np.clip(iy, 0, height - 1), np.clip(iy + 1, 0, height - 1) - top, bottom = image[:, y0, x0].astype(np.float64), image[:, y1, x0].astype(np.float64) - top += (image[:, y0, x1] - top) * dx - bottom += (image[:, y1, x1] - bottom) * dx - top += (bottom - top) * dy - result = top.astype(np.uint8) - result[:, outside] = np.array([124, 116, 104], dtype=np.uint8)[:, None] - return result if padding is None else result[:, rows[:, None], columns[None, :]] - - @dataclass(frozen=True) class SaltAndPepper: """Deterministic image-keyed noise; one black/white pixel mask shared by RGB.""" @@ -195,7 +158,7 @@ def _prepare_view(image, transform, out=None, *, compact=False): prepare = prepare_uint8 if compact else preprocess # Exact built-in types are non-mutating; subclasses/custom callables retain isolation. if type(transform) is RotatePad: - return prepare(_rotated(image, transform.degrees, transform.padding), out=out) + return prepare(transform.rotate(image), out=out, padding=transform.padding) if type(transform) is EdgePad: return prepare(image, out=out, padding=transform.fraction) return prepare(transform(image if type(transform) in (View, SaltAndPepper) else image.copy()), out=out) diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 5c8b128..f32972e 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -67,15 +67,16 @@ none of these installation commands. ## Current preparation update -Reuse the full B200 and its working environments. This checks native Torch decoding -and direct NumPy rotation sampling against `b200-full-admission`: +When the next full-B200 comparison is needed, reuse its working environments. +Native Torch decoding is retained; compiled Pillow rotation has been restored after +the NumPy sampler regressed TTA. Use a fresh directory: ```sh export MAMBO_CACHE=/work/mambo-cache .venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ --onnx-python /tmp/mambo-ort-ptx/bin/python \ - --output /work/mambo-speed/b200-full-preparation + --output /work/mambo-speed/b200-full-decoding ``` No environment rebuild, model change or new setting is needed. Keep batch size diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 09f0ba3..352d677 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -576,7 +576,7 @@ regression, not resolution of the Torch streaming gap to the resident reference. ### Decode once; sample only the rotation pixels used -The next increment changes preparation work, leaving scheduling, buffers, transfers +The `0ac0422` increment changed preparation work, leaving scheduling, buffers, transfers and GPU inference unchanged: - Torch JPEG/PNG inputs use the existing torchvision native CPU decoder, as the core @@ -607,5 +607,19 @@ CUDA checks skipped) and focused checks for the subsequent high-bit-depth fallba and repeated-pixel sampling. Pixel fixtures compare against the prior Pillow rotation, including expanded non-square canvases, thin/large images and cardinal rotations. No local throughput sweep, model-quality campaign or GPU-reference rerun was performed. -B200 throughput remains unmeasured: compare the same smoke in `b200-full-preparation` -against `b200-full-admission`, preserving all worker settings and environments. +The subsequent `b200-full-preparation` results were: + +| Variant | Streaming images/s | Request images/s | Peak host GiB | +|---|---:|---:|---:| +| Torch | 1,826.6 | 995.7 | 3.94 | +| ONNX | 720.5 | 456.6 | 5.02 | +| Torch + TTA | 375.2 | 215.8 | 5.93 | +| ONNX + TTA | 237.1 | 120.1 | 7.05 | + +Native decoding improved no-TTA Torch streaming by 49% over admission. Both TTA +variants regressed by 21–24%, strongly implicating the shared NumPy sampler. It +reduced pixel work but introduced multiple array passes, gathers and temporary +allocations in place of compiled interpolation. The sampler was therefore removed +and the previous Pillow rotation restored; native decoding, virtual padding and +square-input shortcuts remain. The focused virtual-padding checks passed after +rollback. Post-rollback TTA throughput has not yet been measured. diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 223b556..2b2ed05 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -690,19 +690,6 @@ def test_native_decode_matches_portable_inputs(tmp_path, format): np.testing.assert_array_equal(decode(source.transpose(2, 0, 1)), source.transpose(2, 0, 1)) -@pytest.mark.parametrize("angle", [0, 90, 180, -90, -30, 10, 30]) -def test_numpy_rotation_preserves_expansion_fill_and_interpolation(angle): - from PIL import Image - - from deployment.mambo_deploy.augmentation import RotatePad - - source = np.random.default_rng(47).integers(0, 256, (3, 41, 68), dtype=np.uint8) - expected = np.asarray( - Image.fromarray(source.transpose(1, 2, 0)).rotate(angle, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104)) - ).transpose(2, 0, 1) - np.testing.assert_array_equal(RotatePad(angle).rotate(source), expected) - - def test_native_decode_preserves_high_bit_depth_png_conversion(): import io From 7e616fe28522dc66244c7a44cc6b3cd03a8ea009 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 11:54:11 +0200 Subject: [PATCH 084/221] bench: isolate streaming overhead with synthetic inference scores --- dev/releases/mambo_v3/pipeline-probe.md | 55 ++++++++ dev/releases/mambo_v3/pipeline_probe.py | 159 ++++++++++++++++++++++++ dev/releases/mambo_v3/speed-smoke.md | 4 + 3 files changed, 218 insertions(+) create mode 100644 dev/releases/mambo_v3/pipeline-probe.md create mode 100644 dev/releases/mambo_v3/pipeline_probe.py diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md new file mode 100644 index 0000000..a3b4228 --- /dev/null +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -0,0 +1,55 @@ +# Isolate pipeline overhead with model execution mocked + +`pipeline_probe.py` runs three short Torch CUDA cases. It creates synthetic global +species/genus/family scores once and substitutes them for backbone/head execution. +No model weights are loaded. Actual batched GPU preprocessing, output transfers, +score validation and `Prediction` construction remain in the path. + +| Mode | Input boundary | What remains | +|---|---|---| +| `resident` | One prepared uint8 batch already on GPU | GPU preprocessing and complete result path | +| `host` | One prepared pinned host batch | Above plus existing two-slot H2D staging | +| `stream` | Real image paths | Complete deployed preparation/transfer/result pipeline | + +All cases use the same score tensors and vocabulary. The first two deliberately +reuse one real prepared batch; streaming consumes the selected files. Each case +has one excluded warmup and one timed pass. The script verifies the returned count, +including the partial final batch, and that no real model was instantiated. + +Example using existing local assets, without changing the environment: + +```sh +CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_probe \ + --bundle local-evidence/mambo-bundle-presets-v2 \ + --manifest local-evidence/mambo-v3/flemming-manifest.json \ + --root /home/asger/data/flemming \ + --output local-evidence/pipeline-probe-initial \ + --count 1025 --batch-size 64 --workers 4 +``` + +Use a fresh output directory. The report includes sample paths/hashes, settings, +GPU identity, throughput, input/transfer counters, submission elapsed time, result +worker elapsed time and caller time blocked retrieving results. These counters +**overlap**; do not sum them or equate host waits with GPU idle time. + +The first local run (1,025 Flemming images, batch 64, four preparation workers): + +| Mode | Images/s | Elapsed s | Caller result wait s | +|---|---:|---:|---:| +| Resident | 7,771 | 0.132 | 0.036 | +| Host | 7,627 | 0.134 | 0.042 | +| Stream | 699 | 1.466 | 0.002 | + +Streaming accumulated 1.391 s waiting for prepared host inputs in the background +transfer worker. Host-side inference/result submission increased from 0.078 s in +resident mode to 0.452 s with preparation active, consistent with host contention. +Results did not throttle this local streaming case. The raw report is retained +uncommitted at `local-evidence/pipeline-probe-initial/report.json`. + +This is a diagnostic, not a deployment benchmark or B200 emulation: removing model +latency changes overlap, contention and backpressure, and synthetic scores omit +real forward dispatch. Small Flemming images, the laptop CPU and four workers do +not reproduce UCloud's large images and 48-worker setup. The short prepared-input +cases establish a large local separation, not a precise throughput difference +between their two modes. Use one same-environment probe when that distinction +would change the next implementation; do not introduce a worker sweep or campaign. diff --git a/dev/releases/mambo_v3/pipeline_probe.py b/dev/releases/mambo_v3/pipeline_probe.py new file mode 100644 index 0000000..3889c76 --- /dev/null +++ b/dev/releases/mambo_v3/pipeline_probe.py @@ -0,0 +1,159 @@ +"""Small pipeline diagnostic with synthetic device scores in place of model execution.""" + +import argparse +import json +import time +from concurrent.futures import ThreadPoolExecutor +from contextlib import contextmanager +from itertools import batched +from pathlib import Path +from unittest.mock import patch + +import torch + +from deployment.mambo_deploy import Predictor +from deployment.mambo_deploy import predictor as predictor_module +from deployment.mambo_deploy.preprocessing import prepare_batch +from deployment.mambo_deploy.result_worker import ResultWorker +from deployment.mambo_deploy.transfers import device_batches, pinned_factory +from dev.benchmarks.inference.onnx_inference import file_hash +from dev.releases.mambo_v3.evaluation_data import load_records, write_json + + +@contextmanager +def measured_results(predictor, stats): + class MeasuredWorker(ResultWorker): + def __init__(self, function): + def process(*args): + start = time.perf_counter() + try: + return function(*args) + finally: + stats["result_worker_seconds"] += time.perf_counter() - start + + super().__init__(process) + + def pop(self): + start = time.perf_counter() + try: + return super().pop() + finally: + stats["result_wait_seconds"] += time.perf_counter() - start + + ranked = predictor._ranked_views + + def submit(*args, **kwargs): + start = time.perf_counter() + try: + return ranked(*args, **kwargs) + finally: + stats["submission_seconds"] += time.perf_counter() - start + + with patch.object(predictor_module, "ResultWorker", MeasuredWorker), patch.object(predictor, "_ranked_views", submit): + yield + + +def run(args): + if not torch.cuda.is_available(): + raise RuntimeError("CUDA is required to retain the deployed transfer and preprocessing path") + args.output.mkdir(parents=True, exist_ok=False) + torch.set_num_threads(4) + _, records = load_records(args.manifest, args.root, args.count) + paths = [args.root / record["path"] for record in records] + with ThreadPoolExecutor(max_workers=args.workers) as pool: + # Warm the selected files once, outside timings; retain their identity. + hashes = list(pool.map(file_hash, paths)) + p = Predictor(args.bundle, backend="torch", device="cuda:0", model="full", batch_size=args.batch_size, precision="auto") + plan = p.hierarchy_plan(p.selected) + generator = torch.Generator(device=p.device).manual_seed(20260925) + leaf = torch.randn((args.batch_size, len(plan.labels[0])), generator=generator, device=p.device) + scores = plan.torch_values(leaf)[0] + + def mock_model(images, embeddings, *, tensors=False): + assert tensors and not embeddings + p._device_preprocess(images) # Keep the actual batched uint8 -> FP32 preprocessing. + return [score[: len(images)] for score in scores], None + + # One real prepared batch is reused only in the modes that exclude input preparation. + with ThreadPoolExecutor(max_workers=args.workers) as pool: + prepared = prepare_batch(paths[: args.batch_size], pool, compact=True, decode=p._decode) + host = pinned_factory(p.device, compact=True)(prepared.shape) + host[...] = prepared + resident = torch.from_numpy(host).to(p.device) + report = { + "boundary": "Synthetic native rank logits replace backbone/head; GPU preprocessing, transfers and Prediction remain real.", + "limitations": "Zero model latency changes overlap/backpressure. Local diagnostic rates are not HPC deployment estimates.", + "settings": {k: str(v) if isinstance(v, Path) else v for k, v in vars(args).items()}, + "torch": torch.__version__, + "gpu": str(torch.cuda.get_device_properties(p.device)), + "samples": [{"path": str(path), "sha256": digest} for path, digest in zip(paths, hashes, strict=True)], + "cells": [], + } + with patch.object(p, "_torch", mock_model): + for mode in ("resident", "host", "stream"): + + def prepared_batches(items, batch_size, *, stats, **options): + def source(): + for index, batch in enumerate(batched(items, batch_size)): + yield index * batch_size, (host[: len(batch)],) + + if mode == "host": + yield from device_batches(source(), "torch", p.device, stats) + else: + for offset, views in source(): + count = len(views[0]) + yield offset, (resident[:count],), count + + def consume(selected, stats): + return sum( + len(result) + for result in p.predict_stream( + selected, + prepare_workers=args.workers, + read_workers=32, + read_window=max(args.batch_size, 128), + stats=stats, + ) + ) + + replacement = p.prepared_batches if mode == "stream" else prepared_batches + with patch.object(p, "prepared_batches", replacement): + # Warm kernels/result paths once; warmup is excluded from all counters. + consume(paths[: args.batch_size], {}) + torch.cuda.synchronize() + stats = dict(result_worker_seconds=0.0, result_wait_seconds=0.0, submission_seconds=0.0) + p.runtime_timings.clear() + with measured_results(p, stats): + start = time.perf_counter() + count = consume(paths, stats) + torch.cuda.synchronize() + elapsed = time.perf_counter() - start + assert count == len(paths) and p._torch_model is None + cell = dict( + mode=mode, + images=count, + seconds=elapsed, + images_per_second=count / elapsed, + pipeline=stats, + runtime=dict(p.runtime_timings), + ) + report["cells"].append(cell) + write_json(args.output / "report.json", report) + print(json.dumps(cell), flush=True) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("bundle", "manifest", "root", "output"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--count", type=int, default=1024) + parser.add_argument("--batch-size", type=int, default=64) + parser.add_argument("--workers", type=int, default=4) + args = parser.parse_args() + if min(args.count, args.batch_size, args.workers) < 1 or args.count < args.batch_size: + parser.error("Require count >= batch-size > 0 and workers > 0") + run(args) + + +if __name__ == "__main__": + main() diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index f32972e..5960081 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -84,3 +84,7 @@ and worker settings unchanged. Run the four variants once; do not repeat the MIG quality or GPU-resident tests. The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers and CPU result construction and remains a reference, not an end-to-end promise. Keep prior output directories for comparison. + +For a local check that removes model speed from the comparison, use the +[three-case pipeline probe](pipeline-probe.md). It does not require another model +evaluation or a new UCloud allocation. From 70363ea69199206c742b5b6bcff8e5755c195d6b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:04:58 +0200 Subject: [PATCH 085/221] perf: replace buffered image indexing with RGB pixel gathers --- deployment/mambo_deploy/preprocessing.py | 11 +++++++- dev/releases/mambo_v3/pipeline-probe.md | 33 ++++++++++++++++++++++++ dev/releases/mambo_v3/speed-smoke.md | 7 ++--- tests/releases/test_deployment.py | 18 +++++++++++++ 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index eec511c..16df953 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -70,7 +70,16 @@ def _square(item, padding=0): height, width = image.shape[1:] if height == width == _SIZE and padding == 0: return image - return image[:, _nearest_indices(height, padding)[:, None], _nearest_indices(width, padding)[None, :]] + # Gather whole RGB pixels, avoiding NumPy's buffered three-axis iterator. + rgb = image.transpose(1, 2, 0) + yy, xx = _nearest_indices(height, padding), _nearest_indices(width, padding) + if width > _SIZE and rgb.flags.c_contiguous: + # Large decoded images: select just the output pixels, not full-width rows. + square = rgb.reshape(-1, 3).take(yy[:, None] * width + xx[None, :], axis=0) + else: + # Small/strided images: row gathering avoids flattening/copying the source. + square = rgb[yy].take(xx, axis=1) + return square.transpose(2, 0, 1) def prepare_uint8(item, out=None, *, padding=0): diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md index a3b4228..27649be 100644 --- a/dev/releases/mambo_v3/pipeline-probe.md +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -53,3 +53,36 @@ not reproduce UCloud's large images and 48-worker setup. The short prepared-inpu cases establish a large local separation, not a precise throughput difference between their two modes. Use one same-environment probe when that distinction would change the next implementation; do not introduce a worker sweep or campaign. + + +## Profile-driven pixel gathering change + +A native `py-spy` profile located the preparation hotspot in `_square`: the +broadcast three-axis NumPy expression repeatedly entered `mapiter_get` and buffered +iterator code. Sampling at 200 Hz with native stacks fell behind and substantially +perturbed execution; its timings are **not** performance evidence. It was used only +to locate the hot operation. The profile and a small selector comparison are under +`local-evidence/pipeline-profile/`. + +Deployment now gathers complete RGB pixels with `take`. Large contiguous decoded +images use flat pixel indices, avoiding a full-width row intermediate. Small or +strided images gather rows and then columns, avoiding a source-sized flattening +copy. Coordinates, padding, output layout and caller-owned buffers are preserved. +This changes both Torch and ONNX preparation, without new configuration or queues. + +Unprofiled probe comparison with the original 1,025-image run, same batch/workers: + +| Measurement | Before | After | +|---|---:|---:| +| Streaming images/s | 699 | 957 | +| Preparation worker elapsed seconds (summed) | 4.883 | 3.423 | +| Background input wait seconds | 1.391 | 0.987 | +| Caller result wait seconds | 0.0024 | 0.0026 | +| Prepared resident images/s | 7,771 | 7,557 | +| Prepared host images/s | 7,627 | 7,221 | + +The final report is `local-evidence/pipeline-profile/after-layout-gather/report.json`. +This is a useful local +37% end-to-end diagnostic improvement, not an expected B200 +speedup. Preparation/submission contention remains; this does not establish GPU +saturation. Static checks and the affected deployment/streaming tests cover the +change. Use the existing four-variant speed smoke for the next B200 measurement. diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 5960081..5fa7ab4 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -68,15 +68,16 @@ none of these installation commands. ## Current preparation update When the next full-B200 comparison is needed, reuse its working environments. -Native Torch decoding is retained; compiled Pillow rotation has been restored after -the NumPy sampler regressed TTA. Use a fresh directory: +Native Torch decoding and compiled Pillow rotation are retained. Pixel selection +now gathers complete RGB pixels instead of using three-axis NumPy indexing. This +changes real preparation in both backends; use a fresh directory: ```sh export MAMBO_CACHE=/work/mambo-cache .venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ --onnx-python /tmp/mambo-ort-ptx/bin/python \ - --output /work/mambo-speed/b200-full-decoding + --output /work/mambo-speed/b200-full-gather ``` No environment rebuild, model change or new setting is needed. Keep batch size diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 2b2ed05..8d3d93c 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -703,3 +703,21 @@ def test_native_decode_preserves_high_bit_depth_png_conversion(): Image.fromarray(source).save(encoded, format="PNG") data = encoded.getvalue() np.testing.assert_array_equal(TorchDecode(torch)(data), _rgb(data)) + + +def test_square_gather_preserves_pixels_across_decoded_and_strided_layouts(): + from deployment.mambo_deploy.preprocessing import prepare_uint8 + + for height, width in [(73, 127), (511, 769)]: + decoded = np.random.default_rng(81).integers(0, 256, (height, width, 3), dtype=np.uint8).transpose(2, 0, 1) + for image in [decoded, np.ascontiguousarray(decoded), decoded[..., ::-1], decoded.transpose(0, 2, 1)]: + for padding in [0, 0.25]: + h, w = image.shape[1:] + py, px = int(np.ceil(h * padding)), int(np.ceil(w * padding)) + grid = np.arange(384, dtype=np.float32) + y = np.clip((grid * np.float32((h + 2 * py) / 384)).astype(np.intp) - py, 0, h - 1) + x = np.clip((grid * np.float32((w + 2 * px) / 384)).astype(np.intp) - px, 0, w - 1) + expected = image[:, y[:, None], x[None, :]] + target = np.empty((3, 384, 384), dtype=np.uint8) + assert prepare_uint8(image, out=target, padding=padding) is target + np.testing.assert_array_equal(target, expected) From c497a9db57019430b20ad2f0dcd44154e04503fa Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:13:26 +0200 Subject: [PATCH 086/221] perf: trim hierarchy lookup and prediction construction overhead --- deployment/mambo_deploy/predictor.py | 15 +++++---- deployment/mambo_deploy/results.py | 10 ++++-- dev/releases/mambo_v3/pipeline-probe.md | 45 +++++++++++++++++++++++++ dev/releases/mambo_v3/speed-smoke.md | 6 ++-- tests/releases/test_deployment.py | 24 +++++++++++++ 5 files changed, 90 insertions(+), 10 deletions(-) diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 894048d..d2a01c9 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -279,10 +279,12 @@ def _torch(self, images, embeddings, *, tensors=False): return (output if tensors else output[0].float().cpu().numpy()), embedding def hierarchy_plan(self, selected): - key = tuple(selected) - if key not in self._hierarchy_plans: - self._hierarchy_plans[key] = HierarchyPlan(selected, self.bundle.classes) - return self._hierarchy_plans[key] + # Hash contiguous bytes in native code, not one Python integer per species. + key = np.asarray(selected, dtype=np.int64).tobytes() + plan = self._hierarchy_plans.get(key) + if plan is None: + plan = self._hierarchy_plans[key] = HierarchyPlan(selected, self.bundle.classes) + return plan def _ranked_views(self, views, view_count, selectors, embeddings=False, *, defer=False): """Keep native ranks on Torch; reduce masked/averaged leaves on the same device.""" @@ -310,9 +312,10 @@ def _ranked_views(self, views, view_count, selectors, embeddings=False, *, defer norms = torch.linalg.vector_norm(vectors, dim=1, keepdim=True) vectors /= norms native = output if self.tta is None else None - ranks = {name: self.hierarchy_plan(selected).torch_values(leaf, native) for name, selected in selectors.items()} + plans = {name: self.hierarchy_plan(selected) for name, selected in selectors.items()} + ranks = {name: plan.torch_values(leaf, native) for name, plan in plans.items()} tensors = [value for raw, _, _ in ranks.values() for value in raw] - full_name = next((name for name, selected in selectors.items() if self.hierarchy_plan(selected).full), None) + full_name = next((name for name, plan in plans.items() if plan.full), None) if full_name is None: tensors.append(leaf) if vectors is not None: diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index e5af2c2..b4e601d 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -89,7 +89,8 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): if not isinstance(topk, int) or topk < 1 or topk > min(map(len, labels)): raise ValueError("topk must be positive and no larger than the smallest retained rank") self.topk, self.metadata, self.raw_logits = topk, metadata, raw - self.cls2idx = {str(rank): {label: i for i, label in enumerate(names)} for rank, names in enumerate(labels)} + # Snapshot names cheaply; most callers never need the complete lookup map. + self._class_labels = tuple(tuple(names) for names in labels) indices = [ np.argmax(values, axis=1)[:, None] if topk == 1 and not np.isnan(values).any() @@ -101,7 +102,8 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): self.logits = np.stack([np.take_along_axis(values, idx, axis=1) for values, idx in zip(raw, indices)], axis=-1) probabilities = [] for values, idx in zip(raw, indices): - exp = np.exp(values - values.max(axis=1, keepdims=True)) + exp = values - values.max(axis=1, keepdims=True) + exp = np.exp(exp, out=exp if exp.dtype.kind in "fc" else None) probabilities.append(np.take_along_axis(exp, idx, axis=1) / exp.sum(axis=1, keepdims=True)) self.confidence = np.stack(probabilities, axis=-1) self.labels = [[[labels[r][int(self.indices[b, k, r])] for r in range(3)] for k in range(topk)] for b in range(len(raw[0]))] @@ -111,6 +113,10 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): ] self.items = [row[0] for row in nested] if topk == 1 else nested + @cached_property + def cls2idx(self): + return {str(rank): {label: i for i, label in enumerate(names)} for rank, names in enumerate(self._class_labels)} + def __len__(self): return len(self.items) diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md index 27649be..79ad74c 100644 --- a/dev/releases/mambo_v3/pipeline-probe.md +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -86,3 +86,48 @@ This is a useful local +37% end-to-end diagnostic improvement, not an expected B speedup. Preparation/submission contention remains; this does not establish GPU saturation. Static checks and the affected deployment/streaming tests cover the change. Use the existing four-variant speed smoke for the next B200 measurement. + + +## Stack submission and result work before the next B200 test + +The same captured profile exposed additional work beyond pixel gathering: + +- `hierarchy_plan` repeatedly converted the entire selected vocabulary into Python + integers and hashed that tuple on the submission thread. Lookup now hashes native + contiguous index bytes and reuses each resolved plan within `_ranked_views`. + Selection order and content still determine the cache key. +- `Prediction` eagerly rebuilt all class-name dictionaries for each batch. It now + snapshots names and constructs `cls2idx` only on access, including serialization. + Each result retains its own mutable dictionary, independent of later selections. +- Confidence normalization allocated separate shifted-logit and exponential arrays. + Floating-point scores now use one scratch array; raw logits remain untouched. + +The unprofiled combined probe used the same 1,025 images, batch 64 and four workers: + +| Measurement | Pixel gather only | Plus submission/result changes | +|---|---:|---:| +| Resident images/s | 7,557 | 11,806 | +| Host images/s | 7,221 | 9,598 | +| Stream images/s | 957 | 928 | +| Resident submission seconds | 0.077 | 0.031 | +| Resident result-worker seconds | 0.128 | 0.079 | +| Stream preparation-worker seconds (summed) | 3.423 | 3.492 | + +Raw report: `local-evidence/pipeline-profile/after-host-overhead/report.json`. +These short single passes show reduced overhead with prepared inputs, but **no +additional local file-streaming improvement**. Streaming still waits on preparation; +submission elapsed time there also includes contention with preparation workers. +The combined streaming rate remains above the original 699 images/s baseline. +Do not convert these diagnostic differences into projected B200 gains. + +Other sampled work includes copying gathered pixels into batch storage, GPU +preprocessing, packing/downloading rank scores, and required score validation. +These remain possible limits after preparation improves. The profile does not +establish transfer-bandwidth saturation or a need for more queues: its prominent +owner-thread `events.get()` frame is a blocking wait. No additional scheduler, +transfer pool or result API is introduced for this stack. + +Validation: static/import checks, deployment Ruff checks, and affected deployment, +streaming and evaluation tests (92 passed, six optional tests skipped). The CUDA +probe retained actual transfers/preprocessing but mocked model execution. The next +HPC check is the existing four-variant full-B200 smoke, once for the complete stack. diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 5fa7ab4..8a42150 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -65,12 +65,14 @@ Use the ONNX version already qualified on B200 here. This is an environment-spec test setup, not a new deployment-wide dependency pin. Existing environments need none of these installation commands. -## Current preparation update +## Current preparation and host-overhead update When the next full-B200 comparison is needed, reuse its working environments. Native Torch decoding and compiled Pillow rotation are retained. Pixel selection now gathers complete RGB pixels instead of using three-axis NumPy indexing. This -changes real preparation in both backends; use a fresh directory: +changes real preparation in both backends. The same stack removes Python-heavy +hierarchy cache keys, defers unused class-name dictionaries and reduces confidence +scratch allocations. Test these together in a fresh directory: ```sh export MAMBO_CACHE=/work/mambo-cache diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 8d3d93c..f1cb96b 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -123,6 +123,30 @@ def test_topk_serialization_handles_nested_items(tmp_path): Prediction(raw, labels, indices, topk=3) +def test_prediction_vocabulary_is_a_private_snapshot(tmp_path): + raw, labels, indices = hierarchy(np.array([[1.0, 2.0, 3.0]], dtype=np.float32), [0, 2], CLASSES) + first, second = (Prediction(raw, labels, indices) for _ in range(2)) + labels[0][0] = "changed-after-prediction" + expected = {"0": {"a": 0, "c": 1}, "1": {"g0": 0, "g1": 1}, "2": {"f0": 0}} + assert first.cls2idx == expected + first.cls2idx["0"]["a"] = 99 + assert second.cls2idx == expected + second.save(tmp_path / "result.json") + assert json.loads((tmp_path / "result.json").read_text())["config"]["cls2idx"] == expected + + +@pytest.mark.parametrize("dtype", [np.float32, np.float64, np.int64]) +def test_confidence_preserves_readonly_scores(dtype): + values = np.array([[1000, 999, -1000], [-3, -3, -3]], dtype=dtype) + values.flags.writeable = False + original = values.copy() + result = Prediction([values] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk=2) + exp = np.exp(values - values.max(axis=1, keepdims=True)) + expected = exp[:, :2] / exp.sum(axis=1, keepdims=True) + np.testing.assert_array_equal(result.confidence, np.stack([expected] * 3, axis=-1)) + np.testing.assert_array_equal(values, original) + + def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeypatch): import torch From 503de96ad0cc1e30662600fa766cd35ca30427e5 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:25:21 +0200 Subject: [PATCH 087/221] perf: reduce preprocessing passes and redundant score scans --- deployment/mambo_deploy/preprocessing.py | 24 +++++-- deployment/mambo_deploy/results.py | 24 ++++--- dev/releases/mambo_v3/pipeline-probe.md | 77 ++++++++++++++++++++++ dev/releases/mambo_v3/pipeline_stages.py | 83 ++++++++++++++++++++++++ dev/releases/mambo_v3/speed-smoke.md | 5 +- tests/releases/test_deployment.py | 48 ++++++++++++-- 6 files changed, 239 insertions(+), 22 deletions(-) create mode 100644 dev/releases/mambo_v3/pipeline_stages.py diff --git a/deployment/mambo_deploy/preprocessing.py b/deployment/mambo_deploy/preprocessing.py index 16df953..f9d24d2 100644 --- a/deployment/mambo_deploy/preprocessing.py +++ b/deployment/mambo_deploy/preprocessing.py @@ -94,10 +94,20 @@ def prepare_uint8(item, out=None, *, padding=0): def preprocess(item, out=None, *, padding=0): """Finish the release geometry and normalization in FP32 on CPU.""" image = np.ascontiguousarray(_square(item, padding), dtype=np.float32) - rows = image[:, _LO] * (1 - _FRACTION)[None, :, None] + image[:, _HI] * _FRACTION[None, :, None] - pixels = rows[:, :, _LO] * (1 - _FRACTION)[None, None, :] + rows[:, :, _HI] * _FRACTION[None, None, :] + rows = image.take(_LO, axis=1) + scratch = image.take(_HI, axis=1) + rows *= (1 - _FRACTION)[None, :, None] + scratch *= _FRACTION[None, :, None] + rows += scratch + pixels = out if out is not None and out.dtype == np.float32 else np.empty((3, _SIZE, _SIZE), dtype=np.float32) + # Coordinates are already clamped; clip permits unbuffered writes to out. + np.take(rows, _LO, axis=2, out=pixels, mode="clip") + np.take(rows, _HI, axis=2, out=scratch, mode="clip") + pixels *= (1 - _FRACTION)[None, None, :] + scratch *= _FRACTION[None, None, :] + pixels += scratch if out is None: - out = np.empty((3, _SIZE, _SIZE), dtype=np.float32) + out = pixels np.rint(pixels, out=out) out /= 255 out -= _MEAN @@ -152,8 +162,9 @@ class TorchPreprocess: def __init__(self, torch, device): self.torch = torch - self.mean = torch.as_tensor(_MEAN, device=device) - self.std = torch.as_tensor(_STD, device=device) + mean = torch.as_tensor(_MEAN, device=device) + std = torch.as_tensor(_STD, device=device) + self.scale, self.bias = 1 / (255 * std), -mean / std def __call__(self, images): torch = self.torch @@ -163,7 +174,8 @@ def __call__(self, images): ) start = (_RESIZED - _SIZE) // 2 values = values[..., start : start + _SIZE, start : start + _SIZE] - return values.round_().div_(255).sub_(self.mean).div_(self.std) + # One broadcast normalization kernel also produces compact NCHW storage. + return torch.addcmul(self.bias, values.round_(), self.scale) def image_items(value): diff --git a/deployment/mambo_deploy/results.py b/deployment/mambo_deploy/results.py index b4e601d..653638b 100644 --- a/deployment/mambo_deploy/results.py +++ b/deployment/mambo_deploy/results.py @@ -91,18 +91,26 @@ def __init__(self, raw, labels, global_indices, topk=1, **metadata): self.topk, self.metadata, self.raw_logits = topk, metadata, raw # Snapshot names cheaply; most callers never need the complete lookup map. self._class_labels = tuple(tuple(names) for names in labels) - indices = [ - np.argmax(values, axis=1)[:, None] - if topk == 1 and not np.isnan(values).any() - else np.argsort(-values, axis=1, kind="stable")[:, :topk] - for values in raw - ] + indices, maxima = [], [] + for values in raw: + if topk == 1: + index = np.argmax(values, axis=1)[:, None] + maximum = np.take_along_axis(values, index, axis=1) + # argmax selects NaN when present; inspect only one value per row. + # Keep stable sorting's NaN-last prediction and NaN confidence. + if np.isnan(maximum).any(): + index = np.argsort(-values, axis=1, kind="stable")[:, :1] + else: + index = np.argsort(-values, axis=1, kind="stable")[:, :topk] + maximum = values.max(axis=1, keepdims=True) + indices.append(index) + maxima.append(maximum) self.indices = np.stack(indices, axis=-1) self.global_indices = np.stack([mapping[idx] for mapping, idx in zip(global_indices, indices)], axis=-1) self.logits = np.stack([np.take_along_axis(values, idx, axis=1) for values, idx in zip(raw, indices)], axis=-1) probabilities = [] - for values, idx in zip(raw, indices): - exp = values - values.max(axis=1, keepdims=True) + for values, idx, maximum in zip(raw, indices, maxima): + exp = values - maximum exp = np.exp(exp, out=exp if exp.dtype.kind in "fc" else None) probabilities.append(np.take_along_axis(exp, idx, axis=1) / exp.sum(axis=1, keepdims=True)) self.confidence = np.stack(probabilities, axis=-1) diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md index 79ad74c..ef3f748 100644 --- a/dev/releases/mambo_v3/pipeline-probe.md +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -131,3 +131,80 @@ Validation: static/import checks, deployment Ruff checks, and affected deploymen streaming and evaluation tests (92 passed, six optional tests skipped). The CUDA probe retained actual transfers/preprocessing but mocked model execution. The next HPC check is the existing four-variant full-B200 smoke, once for the complete stack. + + +## Further stage simplification + +A bounded synthetic stage check removes filesystem/cache latency, decoding and +model execution from attribution. It uses decoded interleaved RGB at 256×256 and +2048×2048, and three score matrices with 30,000/4,000/500 classes at batches 64 and +256. CPU timings are collected outside the profiler. A separate CUDA trace records +actual preprocessing and asynchronous result download, with operator counts, +allocations and output strides. Reproduce it only when investigating those stages: + +```sh +CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_stages \ + --output local-evidence/pipeline-stages-check +``` + +The implementation changes are: + +- CPU bilinear preparation uses native `take` operations and reuses interpolation + scratch and caller-owned FP32 output storage. It avoids separate multiplication, + sum and final-output temporaries. Pre-clamped indices permit `mode="clip"`; + NumPy documents that the default `raise` mode always buffers `out` + ([reference](https://numpy.org/doc/stable/reference/generated/numpy.take.html)). + This benefits ONNX preparation and Torch CPU preparation, including each TTA view. +- Top-1 result construction reuses the maximum selected by `argmax`. NaN detection + checks that one selected score per image instead of allocating and scanning a + full score-sized boolean array, while retaining the stable-sort fallback. + Confidence normalization reuses the same maximum, removing another full scan. +- Torch finishing uses `addcmul` for broadcast normalization. Rounding remains + unchanged; rounding plus normalization now requires two kernels instead of four. + Output is contiguous 384×384 storage instead of a view retaining 438×438 storage. + This applies to every CUDA Torch view without compilation or a new dependency. + +Local stage comparison (before = `c497a9d`, RTX 3080 Ti Laptop GPU): + +| Stage | Before | After | +|---|---:|---:| +| CPU preparation, 32 small images / four workers | 60.6 ms | 35.0 ms | +| CPU preparation, 32 large images / four workers | 65.6 ms | 37.7 ms | +| Result construction, batch 64 | 6.69 ms | 4.32 ms | +| Result construction, batch 256 | 31.8 ms | 18.2 ms | +| GPU preparation, batch 64, unprofiled paired median | 3.95 ms | 2.32 ms | + +Raw stage reports/traces are in `local-evidence/pipeline-stages/`; the paired CUDA +event timings are in `gpu-unprofiled.json`. Profiler durations are used to locate +work, not as the timing comparison. Fewer full-array passes and compact output +storage are structural improvements; the percentages above are local measurements, +not predicted B200 gains. They also do not establish pipeline GPU saturation. + +The final short mocked-model pipeline pass (`after-stage-simplification/report.json` +under `local-evidence/pipeline-profile/`) measured resident/host/stream at +12,110/15,055/1,068 images/s, versus 11,806/9,598/928 before this increment. Its very +short prepared-input runs remain sensitive to scheduling; the host-versus-resident +ordering must not be read as a benefit from transferring inputs. It is an +integration check, not the basis for choosing the changes. + +Output packing remained about 44 microseconds for batch 64 in the CUDA traces, +versus roughly 0.66 milliseconds for the resulting 8.4 MiB D2H copy. The snapshot +also protects deferred results against later device-slot writes. Direct-copy or +buffer-pooling changes are not justified by this evidence. Transfer leases and +stream synchronization remain intact; PyTorch requires explicit synchronization +and lifetime handling across streams +([reference](https://docs.pytorch.org/docs/2.14/notes/cuda.html#cuda-streams)). +The compact CPU path still copies selected RGB pixels into planar batch slots; +that is bounded to 384×384 pixels, rather than another source-sized image copy. + +Validation covers output storage, stable ties/NaNs, immutable raw scores, exact CPU +interpolation against the prior equation, the original FP64 fixture hashes and +CUDA image geometry. The FP64 fixture now evaluates its frozen equation directly +instead of monkeypatching the optimized production function's scratch dtype; +expected hashes and tolerances are unchanged. Initial failures of two such fixture +cases were resolved by separating that reference. All 96 focused CPU cases pass +across the initial run and targeted rerun; six optional cases were skipped. The +intentional CUDA geometry case passed separately. Static/import checks pass. + +Run the existing four-variant full-B200 smoke once for the whole stack. This adds +no campaign, environment setup, scheduler or tuning option. diff --git a/dev/releases/mambo_v3/pipeline_stages.py b/dev/releases/mambo_v3/pipeline_stages.py new file mode 100644 index 0000000..48b250a --- /dev/null +++ b/dev/releases/mambo_v3/pipeline_stages.py @@ -0,0 +1,83 @@ +"""Bounded stage probe: synthetic images/scores, no filesystem latency or model execution.""" + +import argparse +import json +import time +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +import numpy as np +import torch + +from deployment.mambo_deploy.preprocessing import TorchPreprocess, preprocess +from deployment.mambo_deploy.results import Prediction +from deployment.mambo_deploy.transfers import download_tensors + + +def timed(function, count): + function() + start = time.perf_counter() + for _ in range(count): + function() + return (time.perf_counter() - start) / count + + +def run(output): + output.mkdir(parents=True, exist_ok=False) + torch.set_num_threads(4) + torch.manual_seed(91025) + rng = np.random.default_rng(91025) + report = { + "boundary": "Synthetic decoded RGB images and rank logits; no storage, decoding, backbone or classifier.", + "limitations": "Stage timings exclude pipeline contention. Compare operation counts/storage as well as local elapsed time.", + "settings": {"seed": 91025, "workers": 4, "rank_sizes": [30000, 4000, 500]}, + "numpy": np.__version__, + "torch": torch.__version__, + "gpu": torch.cuda.get_device_name(), + } + for size in (256, 2048): + image = rng.integers(0, 256, (size, size, 3), dtype=np.uint8).transpose(2, 0, 1) + with ThreadPoolExecutor(4) as pool: + report[f"cpu_prepare_{size}_seconds_per_32"] = timed(lambda: list(pool.map(preprocess, [image] * 32)), 3) + for batch in (64, 256): + raw = [rng.standard_normal((batch, n), dtype=np.float32) for n in report["settings"]["rank_sizes"]] + labels = [[str(i) for i in range(v.shape[1])] for v in raw] + mappings = [np.arange(v.shape[1]) for v in raw] + report[f"results_{batch}_seconds"] = timed(lambda: Prediction(raw, labels, mappings), 5) + + preparation = TorchPreprocess(torch, "cuda:0") + images = torch.randint(0, 256, (64, 3, 384, 384), dtype=torch.uint8, device="cuda:0") + values = [torch.randn((64, n), device="cuda:0") for n in report["settings"]["rank_sizes"]] + stream = torch.cuda.Stream() + for _ in range(3): + preparation(images) + download_tensors(values, torch=torch, stream=stream) + torch.cuda.synchronize() + with torch.profiler.profile( + activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA], + profile_memory=True, + record_shapes=True, + ) as prof: + with torch.profiler.record_function("GPU preprocessing"): + prepared = preparation(images) + with torch.profiler.record_function("Output transfer submission"): + finish = download_tensors(values, torch=torch, stream=stream, defer=True) + with torch.profiler.record_function("Output transfer completion"): + finish() + torch.cuda.synchronize() + prof.export_chrome_trace(str(output / "trace.json")) + (output / "operators.txt").write_text(prof.key_averages().table(sort_by="self_device_time_total", row_limit=40)) + report["prepared"] = {"shape": list(prepared.shape), "stride": list(prepared.stride()), "contiguous": prepared.is_contiguous()} + report["gpu_operators"] = [ + {"name": event.key, "calls": event.count, "self_device_us": event.self_device_time_total, "device_bytes": event.device_memory_usage} + for event in prof.key_averages() + if event.key.startswith("aten::") + ] + (output / "report.json").write_text(json.dumps(report, indent=2) + "\n") + print(json.dumps(report, indent=2)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--output", type=Path, required=True) + run(parser.parse_args().output) diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index 8a42150..ae59120 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -71,8 +71,9 @@ When the next full-B200 comparison is needed, reuse its working environments. Native Torch decoding and compiled Pillow rotation are retained. Pixel selection now gathers complete RGB pixels instead of using three-axis NumPy indexing. This changes real preparation in both backends. The same stack removes Python-heavy -hierarchy cache keys, defers unused class-name dictionaries and reduces confidence -scratch allocations. Test these together in a fresh directory: +hierarchy cache keys, defers unused class-name dictionaries, reuses CPU interpolation +scratch, removes redundant score scans and fuses Torch normalization. Test these +together in a fresh directory: ```sh export MAMBO_CACHE=/work/mambo-cache diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index f1cb96b..77e5d7c 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -210,16 +210,22 @@ def session(path, sess_options, providers): ((4, 24, 15), "e4dfd0c4a4174cd6d4913b1bf4f88bfd8c82a21802ec0d006e12594995bb1d64"), ], ) -def test_fp32_preprocessing_preserves_geometry_with_bounded_rounding(shape, digest, monkeypatch): +def test_fp32_preprocessing_preserves_geometry_with_bounded_rounding(shape, digest): array = np.random.default_rng(19).integers(0, 256, size=shape, dtype=np.uint8) value = preprocess(array) assert value.dtype == np.float32 and value.flags.c_contiguous from deployment.mambo_deploy import preprocessing - # Retain the frozen FP64 reference to detect geometry/normalization drift. - with monkeypatch.context() as reference: - reference.setattr(preprocessing, "_FRACTION", preprocessing._COORD - preprocessing._LO) - legacy = preprocess(array) + # Freeze the FP64 equation itself, independently of production scratch dtypes. + image = np.ascontiguousarray(preprocessing._square(array), dtype=np.float32) + lo, hi = preprocessing._LO, preprocessing._HI + fraction = preprocessing._COORD - lo + rows = image[:, lo] * (1 - fraction)[None, :, None] + image[:, hi] * fraction[None, :, None] + pixels = rows[:, :, lo] * (1 - fraction)[None, None, :] + rows[:, :, hi] * fraction[None, None, :] + legacy = np.rint(pixels).astype(np.float32) + legacy /= 255 + legacy -= preprocessing._MEAN + legacy /= preprocessing._STD assert hashlib.sha256(legacy.tobytes()).hexdigest() == digest error_in_pixel_levels = np.abs(value - legacy) * np.array(RECIPE["std"])[:, None, None] * 255 assert error_in_pixel_levels.max() <= 1.001 @@ -642,7 +648,9 @@ def test_native_batched_preprocessing_matches_release_geometry(device): ] compact = prepare_batch(source, compact=True) assert compact.dtype == np.uint8 - actual = TorchPreprocess(torch, device)(torch.from_numpy(compact).to(device)).cpu().numpy() + tensor = TorchPreprocess(torch, device)(torch.from_numpy(compact).to(device)) + assert tensor.is_contiguous() + actual = tensor.cpu().numpy() expected = prepare_batch(source) error = np.abs(actual - expected) * np.array(RECIPE["std"])[None, :, None, None] * 255 assert error.max() <= 1.001 @@ -745,3 +753,31 @@ def test_square_gather_preserves_pixels_across_decoded_and_strided_layouts(): target = np.empty((3, 384, 384), dtype=np.uint8) assert prepare_uint8(image, out=target, padding=padding) is target np.testing.assert_array_equal(target, expected) + + +@pytest.mark.parametrize("topk", [1, 2]) +def test_prediction_nonfinite_ordering_matches_stable_sort(topk): + raw = np.array([[1, np.nan, 2], [np.nan, np.nan, np.nan], [np.inf, 2, -np.inf]], dtype=np.float32) + with np.errstate(invalid="ignore"): + result = Prediction([raw] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk) + expected = np.argsort(-raw, axis=1, kind="stable")[:, :topk] + np.testing.assert_array_equal(result.indices, np.stack([expected] * 3, axis=-1)) + assert np.isnan(result.confidence).all() + + +@pytest.mark.parametrize("dtype", [np.float32, np.float64]) +def test_cpu_interpolation_retains_reference_pixels_in_caller_storage(dtype): + from deployment.mambo_deploy import preprocessing as p + + image = np.random.default_rng(915).integers(0, 256, (3, 275, 403), dtype=np.uint8) + square = np.ascontiguousarray(p._square(image, padding=0.25), dtype=np.float32) + rows = square[:, p._LO] * (1 - p._FRACTION)[None, :, None] + square[:, p._HI] * p._FRACTION[None, :, None] + pixels = rows[:, :, p._LO] * (1 - p._FRACTION)[None, None, :] + rows[:, :, p._HI] * p._FRACTION[None, None, :] + expected = np.rint(pixels).astype(dtype) + expected /= 255 + expected -= p._MEAN + expected /= p._STD + # A view into caller-owned batch storage must also work. + out = np.empty((3, 384, 768), dtype=dtype)[:, :, ::2] + assert preprocess(image, out=out, padding=0.25) is out + np.testing.assert_array_equal(out, expected) From f9cbd8192121962dae00426c7c589b71ec467ea1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:32:13 +0200 Subject: [PATCH 088/221] dev: simplify fresh-node B200 speed setup --- dev/releases/mambo_v3/speed-smoke.md | 141 ++++++++++++--------------- dev/releases/mambo_v3/speed_smoke.py | 36 ++++++- tests/releases/test_speed_smoke.py | 22 +++++ 3 files changed, 114 insertions(+), 85 deletions(-) diff --git a/dev/releases/mambo_v3/speed-smoke.md b/dev/releases/mambo_v3/speed-smoke.md index ae59120..34ce8ad 100644 --- a/dev/releases/mambo_v3/speed-smoke.md +++ b/dev/releases/mambo_v3/speed-smoke.md @@ -1,94 +1,73 @@ # Short UCloud deployment speed check -Run from this checkout on each manually allocated node with `/work/datasets` mounted. -This measures **V3 PyTorch, ONNX, and each with default TTA**. No V2 run, quality -metrics, full-dataset preparation, campaign configuration or tuning sweep. +Use a full B200 node with `/work/datasets` mounted. The fresh-node workflow is: -Use the existing working Torch and qualified ONNX environments. Pull the release -branch first; no reinstall is needed when those environments already exist. +1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/): -```sh -export MAMBO_CACHE=/work/mambo-cache -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ - --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ - --onnx-python /tmp/mambo-ort-ptx/bin/python \ - --output /work/mambo-speed/b200-full -``` + ```sh + curl -LsSf https://astral.sh/uv/install.sh | sh + source "$HOME/.local/bin/env" + ``` -A MIG comparison is optional when it answers a specific deployment question. -For that comparison, use `--output /work/mambo-speed/b200-mig` on the second node. -Use a **single visible MIG slice**, not the entire parent GPU. `environment.json` -records `nvidia-smi -L`, visible-device settings and the CPU quota, so retain the -exact MIG profile when comparing results. The full node and slice may also differ -in their CPU allocation; this is a deployment comparison, not isolated GPU scaling. - -The script selects the same 4,096 original test images, hashes/warms only those, -and downloads standard release weights if absent. Each variant uses batch 256, -the global list, auto precision, no embeddings, and three streaming passes. -Preparation workers follow the exposed CPU quota (maximum 48); override with -`--workers N` if the container does not expose the UCloud CPU allocation correctly. -Keep both runs on the same commit and runtime versions. - -To compare the compact-preparation update with the completed baseline, rerun the -same command using a fresh output name such as `b200-full-compact`. No environment rebuild, new model download or campaign setup -is needed when the existing environments and model cache are available. - -Expect minutes, with the small MIG slice potentially taking tens of minutes; -initial model downloads and cold storage add setup time. Each completed variant -prints a row and updates `summary.csv`. Runtime output and errors are in its `.log`. -Stop after these four variants on each node unless the results expose a specific -failure or unexplained regression. - -**Return the output folder(s)**, or initially their `summary.csv` and -`environment.json` files. The JSON reports retain raw trial timings, runtime -versions, preparation counters, host memory, and Torch allocator peak GPU memory. -The primary comparison is streaming images/s. Request timing is a separate API -measurement; the prepared-input diagnostic is single-view even in TTA reports. -Memory figures are not all-backend GPU peak measurements. This is a warm-storage -speed check, not a quality evaluation or a measurement of cold WEKA throughput. - -## Only if the new node needs environments - -These commands reuse the previously successful split between Torch and ONNX; -they do not revisit runtime selection during this speed test. +2. Clone the release branch: -```sh -uv venv --python 3.13 .venv-mambo-runtime -uv pip install --python .venv-mambo-runtime/bin/python --torch-backend=auto \ - -e '.[timm]' -e ./deployment pyarrow -uv venv --python 3.13 /tmp/mambo-ort-ptx -uv pip install --python /tmp/mambo-ort-ptx/bin/python \ - 'onnxruntime-gpu[cuda,cudnn]==1.22.0' -e ./deployment -``` + ```sh + cd /work + git clone --branch release/mambo-v3 https://github.com/asgersvenning/mini_trainer.git + cd mini_trainer + ``` + +3. Create and activate the environment, then install its dependencies: -Use the ONNX version already qualified on B200 here. This is an environment-specific -test setup, not a new deployment-wide dependency pin. Existing environments need -none of these installation commands. + ```sh + uv venv --python 3.13 .venv-mambo-runtime + source .venv-mambo-runtime/bin/activate + uv pip install --torch-backend=auto -e '.[timm]' -e ./deployment pyarrow + ``` -## Current preparation and host-overhead update +4. Run the experiment: -When the next full-B200 comparison is needed, reuse its working environments. -Native Torch decoding and compiled Pillow rotation are retained. Pixel selection -now gathers complete RGB pixels instead of using three-axis NumPy indexing. This -changes real preparation in both backends. The same stack removes Python-heavy -hierarchy cache keys, defers unused class-name dictionaries, reuses CPU interpolation -scratch, removes redundant score scans and fuses Torch normalization. Test these -together in a fresh directory: + ```sh + export MAMBO_CACHE=/work/mambo-cache + python -m dev.releases.mambo_v3.speed_smoke \ + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --output /work/mambo-speed/b200-full-gather + ``` + +The command uses uv to prepare/reuse the B200-qualified ONNX Runtime 1.22.0 in +`$MAMBO_CACHE/speed-onnx-1.22`, separately from the active Torch environment. +This is specific to the B200 experiment, not a deployment-wide version pin. +To reuse an existing ONNX interpreter instead, supply `--onnx-python /path/to/python`; +that bypasses automatic environment setup. Model assets download automatically. + +The test selects and warms the same 4,096 original test images, using batch 256, +the global list, auto precision and no embeddings. It runs **PyTorch, ONNX, and +both with default TTA**, with three streaming passes per variant. Preparation +workers follow the CPU quota, capped at 48; `--workers N` overrides this if needed. +Keep sample, batch and worker settings unchanged for the pipeline comparison. + +Initial dependency/model downloads and cold storage add setup time. Each completed +variant prints a row and updates `summary.csv`; runtime output/errors are in its +`.log`. Outputs remain under `/work`. Choose a fresh output directory each run. +No campaign configuration, full-data hashing, quality evaluation or MIG rerun is +needed. A MIG comparison is optional when it answers a specific deployment question. + +Return the complete reports after completion: ```sh -export MAMBO_CACHE=/work/mambo-cache -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.speed_smoke \ - --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ - --onnx-python /tmp/mambo-ort-ptx/bin/python \ - --output /work/mambo-speed/b200-full-gather +cat /work/mambo-speed/b200-full-gather/summary.csv +tar -czf /work/mambo-speed/b200-full-gather.tar.gz \ + -C /work/mambo-speed b200-full-gather ``` -No environment rebuild, model change or new setting is needed. Keep batch size -and worker settings unchanged. Run the four variants once; do not repeat the MIG, -quality or GPU-resident tests. The existing resident reference at batch 256 is -3,667 images/s; it excludes transfers and CPU result construction and remains a -reference, not an end-to-end promise. Keep prior output directories for comparison. - -For a local check that removes model speed from the comparison, use the -[three-case pipeline probe](pipeline-probe.md). It does not require another model -evaluation or a new UCloud allocation. +The archive retains raw timings, preparation counters, runtime versions, CPU/GPU +identity, host memory and Torch allocator peak GPU memory. Streaming images/s is +the primary comparison. Request timing is a separate API measurement; the +prepared-input diagnostic is single-view even in TTA reports. Memory figures are +not all-backend GPU peaks. This is a warm-storage speed check, not cold WEKA throughput. +The existing resident reference at batch 256 is 3,667 images/s; it excludes transfers +and CPU result construction and remains a reference, not an end-to-end promise. + +For targeted local diagnosis, the [pipeline probe and stage traces](pipeline-probe.md) +separate preparation, transfers and results from model execution. They are not +additional required steps for this experiment. diff --git a/dev/releases/mambo_v3/speed_smoke.py b/dev/releases/mambo_v3/speed_smoke.py index 9861e00..3bc230d 100644 --- a/dev/releases/mambo_v3/speed_smoke.py +++ b/dev/releases/mambo_v3/speed_smoke.py @@ -47,7 +47,34 @@ def sample(metadata, count=4096): return records +def prepare_onnx_runtime(): + """Keep the B200-qualified CUDA 12 runtime separate from the active Torch environment.""" + cache = Path(os.environ.get("MAMBO_CACHE", Path.home() / ".cache/mambo")).expanduser() + environment = cache / "speed-onnx-1.22" + interpreter = environment / "bin/python" + print(f"Preparing isolated ONNX runtime: {environment}", flush=True) + if not interpreter.is_file(): + subprocess.run(["uv", "venv", "--python", "3.13", str(environment)], check=True) + subprocess.run( + [ + "uv", + "pip", + "install", + "--python", + str(interpreter), + "onnxruntime-gpu[cuda,cudnn]==1.22.0", + "-e", + str(Path(__file__).resolve().parents[3] / "deployment"), + ], + check=True, + ) + return interpreter + + def run(args): + if args.output.exists(): + raise FileExistsError(args.output) + args.onnx_python = args.onnx_python or prepare_onnx_runtime() args.output.mkdir(parents=True, exist_ok=False) prepare_workers = args.workers or workers() root = args.metadata.resolve().parent @@ -126,15 +153,16 @@ def run(args): def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--metadata", type=Path, required=True) - parser.add_argument("--onnx-python", type=Path, required=True, help="Interpreter in the already qualified ONNX environment") + parser.add_argument("--onnx-python", type=Path, help="Reuse an ONNX interpreter; otherwise uv prepares an isolated B200 runtime") parser.add_argument("--output", type=Path, required=True, help="New persistent directory under /work") parser.add_argument("--workers", type=int, help="Preparation workers; defaults to CPU quota, capped at 48") args = parser.parse_args() if args.workers is not None and args.workers < 1: parser.error("--workers must be positive") - args.onnx_python = args.onnx_python.absolute() - if not args.onnx_python.is_file(): - parser.error("--onnx-python must identify an existing interpreter") + if args.onnx_python is not None: + args.onnx_python = args.onnx_python.absolute() + if not args.onnx_python.is_file(): + parser.error("--onnx-python must identify an existing interpreter") run(args) diff --git a/tests/releases/test_speed_smoke.py b/tests/releases/test_speed_smoke.py index d8e4b86..337c1bd 100644 --- a/tests/releases/test_speed_smoke.py +++ b/tests/releases/test_speed_smoke.py @@ -68,3 +68,25 @@ def benchmark(command, **kwargs): assert len((args.output / "summary.csv").read_text().splitlines()) == 5 with pytest.raises(FileExistsError): speed_smoke.run(args) + + +def test_automatic_runtime_installation_stays_outside_active_environment(tmp_path, monkeypatch): + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + calls = [] + + def install(command, **kwargs): + calls.append(command) + if command[1] == "venv": + interpreter = Path(command[-1]) / "bin/python" + interpreter.parent.mkdir(parents=True) + interpreter.touch() + + monkeypatch.setattr(speed_smoke.subprocess, "run", install) + interpreter = speed_smoke.prepare_onnx_runtime() + assert interpreter.is_relative_to(tmp_path) + assert str(interpreter) != speed_smoke.sys.executable + assert calls[-1][calls[-1].index("--python") + 1] == str(interpreter) + assert "onnxruntime-gpu[cuda,cudnn]==1.22.0" in calls[-1] + calls.clear() + assert speed_smoke.prepare_onnx_runtime() == interpreter + assert all(c[1:3] == ["pip", "install"] for c in calls) From c8dab9a466ecda9c3976772f5ac53e305bbd69af Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:39:54 +0200 Subject: [PATCH 089/221] docs: record full B200 validation of pipeline improvements --- docs/mambo-inference-pipeline-review.md | 82 ++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 352d677..4141a85 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -3,7 +3,7 @@ Review date: 25 September 2026. Code baseline: `0eb90b2`; V2 source: `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. The review below records the original design baseline; the [implementation follow-up](#implementation-follow-up) records subsequent changes. Evidence is the completed UCloud campaign and source -inspection. No new B200 measurements have been made. +inspection. Subsequent B200 measurements are recorded in the implementation follow-up. The concern is substantially justified: several V3 changes restored efficiency lost by the initial portable adapter, and the streaming implementation accumulated @@ -622,4 +622,82 @@ reduced pixel work but introduced multiple array passes, gathers and temporary allocations in place of compiled interpolation. The sampler was therefore removed and the previous Pillow rotation restored; native decoding, virtual padding and square-input shortcuts remain. The focused virtual-padding checks passed after -rollback. Post-rollback TTA throughput has not yet been measured. +rollback. Post-rollback TTA throughput was subsequently measured with the combined stack below. + + +### Profile-guided stack validated on a fresh full B200 + +The `b200-full-gather` archive records commit `503de96` with the native decoder, +restored Pillow rotation, RGB pixel gathers, cheaper hierarchy lookup/lazy vocabulary +maps, reused CPU interpolation scratch, fewer top-1 score scans, and fused Torch +normalization. The later `f9cbd81` commit changes experiment setup only. + +All four reports completed. Imported baseline and compact reports match the new +run's metadata/sample hashes, 4,096 ordered image identities, bundle and class-list +hashes, benchmark settings and recorded runtime versions. The new allocation has a +different GPU UUID but the same full B200 model, 48-CPU quota, 48 preparation workers, +AMD EPYC 9655 CPU, driver 610.57.04, Torch 2.14.0+cu132 and ORT 1.22.0. Batch is 256; +Torch uses FP16 and ONNX TF32. Both ONNX reports select the optimized session profile +with no failed compatibility attempts; the logs contain no failure warnings. + +Comparison with the preceding `b200-full-preparation` summary supplied by the user: + +| Variant | Previous streaming images/s | New streaming images/s | Change | New request images/s | Request change | Peak host GiB | +|---|---:|---:|---:|---:|---:|---:| +| Torch | 1,826.6 | 1,975.7 | +8.2% | 1,469.3 | +47.6% | 4.01 | +| ONNX | 720.5 | 996.5 | +38.3% | 761.9 | +66.9% | 4.75 | +| Torch + TTA | 375.2 | 623.9 | +66.3% | 391.4 | +81.3% | 5.84 | +| ONNX + TTA | 237.1 | 396.1 | +67.0% | 211.8 | +76.3% | 7.35 | + +The immediate prior TTA run included the regressed NumPy rotation. Against the +stronger admission-run TTA figures (473.5 and 312.9 images/s), the new rates are +still +31.8% and +26.6%. Against the original imported full-B200 smoke, all four +streaming variants improve: approximately +126%, +21%, +97% and +31% respectively. +Memory is not uniformly lower: ONNX + TTA rises from 7.05 to 7.35 GiB versus the +preceding preparation summary. Torch allocator peaks are 3.42 GiB without TTA and +3.88 GiB with TTA; these are not total device-memory usage or ORT memory estimates. + +This supports the combined structural changes across deployment environments. +Three short passes on one new allocation do not identify each patch's individual +contribution. Torch's observed streaming rates span 1,795–2,109 images/s; its smaller ++8% median change deserves less weight than the larger ONNX/TTA and request gains. +The no-TTA prepared-input diagnostic remains about 92 ms for Torch and 114 ms for +ONNX per batch. It excludes decode/reduction and uses already normalized FP32 input, +so it does not measure the newly optimized compact GPU preprocessing path. + +The remaining targets differ by backend. Counters below accumulate all three +passes (48 batches); worker elapsed times overlap and cannot be added to runtime: + +| Variant | Background input wait, ms/batch | Transfer-worker elapsed, ms/batch | Measured H2D, ms/batch | +|---|---:|---:|---:| +| Torch | 16.5 | 52.4 | 2.6 | +| ONNX | 227.7 | 21.3 | Not instrumented | +| Torch + TTA | 57.8 | 72.3 | 8.9 | +| ONNX + TTA | 549.6 | 66.5 | Not instrumented | + +For ONNX, input wait remains 10.93 s across 12.50 s elapsed without TTA, and 26.38 s +across 30.71 s with TTA. Together with the preparation-worker totals, this prioritizes +CPU decoding/preparation throughput and contention over changes to inference kernels. +These are background waits, not GPU-idle percentages or proof of storage latency. + +For Torch, the physical H2D copy is small, while transfer-worker elapsed also includes +slot availability and host dispatch. Summed preparation-worker elapsed is 88.8 s +across 6.30 s wall time, far below 48 workers continuously active. Increasing reader +or preparation counts alone is unlikely to resolve the remaining gap. The next +useful boundary is host submission, safe slot reuse and result completion, including +contention while preparation runs; a timeline should distinguish these rather than +calling all non-DMA transfer-worker time overhead. Existing counters do not resolve +that distinction. + +Torch streaming now reaches 53.9% of the earlier batch-256 resident reference of +3,667 images/s. This is a throughput ratio, not GPU utilization. The resident path +excludes transfers and CPU results and predates the normalization improvement; +it remains a useful reference rather than a new measured ceiling. No further run +was requested simply to confirm the gains. + +Evidence is retained uncommitted under +`local-evidence/ucloud-speed-smoke-2026-09-25/b200-full-gather/`, with the source +archive alongside it and derived `gather-analysis.json`. Archive SHA-256: +`d51ee3105af4e37aa048bb16fed4c94a9cd87dfefd2a574bbe9e924aec7e6947`. +The immediately preceding preparation-run comparison uses the user's pasted summary; +its complete archive was not supplied. This speed check adds no quality metrics. From c54f8068bf13959cc8b8fd691c38133fefd15636 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 12:49:51 +0200 Subject: [PATCH 090/221] docs: publish current HPC timings and prepare deployment freeze --- deployment/README.md | 44 +- dev/releases/mambo_v3/deployment-freeze.md | 73 +++ .../mambo_v3/deployment-qualification.md | 6 +- dev/releases/mambo_v3/hpc_speed_report.py | 81 +++ dev/releases/mambo_v3/indomain_report.py | 4 +- docs/assets/mambo-hpc-current-provenance.json | 196 ++++++ docs/assets/mambo-hpc-current-speed.csv | 25 + docs/assets/mambo-hpc-current-speed.svg | 579 ++++++++++++++++++ docs/mambo-hpc-evidence.md | 57 ++ docs/mambo-indomain-evidence.md | 4 +- docs/ucloud-model-release-roadmap.md | 20 +- 11 files changed, 1055 insertions(+), 34 deletions(-) create mode 100644 dev/releases/mambo_v3/deployment-freeze.md create mode 100644 dev/releases/mambo_v3/hpc_speed_report.py create mode 100644 docs/assets/mambo-hpc-current-provenance.json create mode 100644 docs/assets/mambo-hpc-current-speed.csv create mode 100644 docs/assets/mambo-hpc-current-speed.svg create mode 100644 docs/mambo-hpc-evidence.md diff --git a/deployment/README.md b/deployment/README.md index c5e50a1..570cbc6 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -74,9 +74,9 @@ three-view recipe; the exact cost depends on the workload. Start with the defaul batch size and worker counts. Tune these on the target machine if speed or memory becomes limiting. Request embeddings or extra candidates only when needed. -For large collections, call `predict()` on smaller groups and save or discard each -result before the next call; lowering `batch_size` alone does not limit the memory -used to retain results for the whole collection. +Use `predict_stream(paths)` for large path collections and consume each batch as +it arrives. Split large in-memory collections into smaller `predict()` requests; +`batch_size` alone does not bound the results retained for a whole request. Pass API option values to `Predictor(...)`; prediction-method calls and CLI-only options are shown explicitly. @@ -155,7 +155,8 @@ retain rare and predicted-only classes, which can change model rankings. Measured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with four preparation/runtime threads. V3 uses automatic precision; compare on your own -hardware before choosing a batch size. V2 and single-view V3 reuse earlier runs. +hardware before choosing a batch size. These laptop measurements predate the latest +pipeline improvements and remain a consumer-hardware baseline. ![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg) @@ -184,14 +185,19 @@ that average represent 1.70% / 0.34% / <0.01% of species/genus/family images wit thresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete metrics are in the [in-domain evidence](../docs/mambo-indomain-evidence.md). -![EPYC CPU and B200 request throughput, with separate streaming measurements](../docs/assets/mambo-indomain-speed.svg) +![Current B200 request and streaming throughput for V3 with and without TTA](../docs/assets/mambo-hpc-current-speed.svg) -Measured on UCloud (AMD EPYC 9655 / NVIDIA B200), using four runtime threads; -streaming uses 48 preparation workers and 256 readers. Lines show median and range -across three process trials. Streaming includes startup over 1,024 images and is -shown separately from single-request measurements. These are measured pipeline -rates, not GPU throughput ceilings; preparation remains a bottleneck. Keep the -laptop results above when assessing consumer-device deployments. +Latest full-B200 measurements (`503de96`): global vocabulary, batch 256, four runtime +threads; streaming uses 48 preparation workers and 128 readers. Bars show median +and range of three repetitions per variant: 256 images per request and 4,096 warm +images per streaming pass, including pipeline startup. PyTorch uses FP16; ONNX +uses TF32. These are end-to-end pipeline rates, not GPU throughput ceilings. + +Streaming reached **1,976 images/s for PyTorch and 997 for ONNX**, or **624 and 396 +with TTA**. Request and streaming results have different boundaries; choose the +one matching your integration. [Exact timings, memory and provenance](../docs/mambo-hpc-evidence.md) +include the earlier CPU/V2 comparisons; retain the laptop evidence above for +consumer-device deployment. ### Streaming image collections @@ -219,16 +225,10 @@ An individual file larger than that budget fails explicitly. The defaults are 32 readers, a 128-image window, the predictor's preparation worker count, two prefetched batches and 256 MiB encoded storage. These controls are API-only and independent of model batch size, which the read window must accommodate. A supplied -`stats={}` receives queue counts, reserved bytes, actual batch-queue waiting and -summed preparation-worker time. Workers fill batch storage directly; preparation -time overlaps inference and sums concurrent workers, so it is not elapsed time. -CUDA streaming reuses device buffers and stages the next batch in a transfer worker. -PyTorch stages compact uint8 images and finishes preprocessing on the GPU, using -pinned host buffers and a separate CUDA copy stream; ONNX uses device -inputs with I/O binding, with copy overlap determined by the runtime. Set -`device_prefetch=False` to disable device staging for comparison. PyTorch downloads -ranks and embeddings together; the result worker waits for completion while the -next batch can be submitted. ONNX currently completes its output copy inside the -runtime call. +`stats={}` receives queue counts, reserved bytes, input waits and summed preparation +worker time. CUDA streaming stages inputs while inference runs; the Torch path uses +pinned uint8 batches and GPU preprocessing. `device_prefetch=False` disables device +staging. These settings bound pipeline buffers and expose useful tuning controls; +GPU saturation is not guaranteed. The byte budget is not a total-process memory limit: decoding temporaries, prepared views, the model and yielded results also consume memory. diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md new file mode 100644 index 0000000..14a4079 --- /dev/null +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -0,0 +1,73 @@ +# MAMBO deployment freeze preparation + +Status: preparation, 25 September 2026. Throughput investigation is closed for this +release. The measured runtime baseline is `503de96`; later changes update experiment +setup and evidence. This document identifies the remaining consolidation work; +it does not declare the candidate frozen or published. + +## Retain the measured behavior + +Keep PyTorch and standard ONNX, presets/custom lists, independent rank predictions, +embeddings, automatic precision, optional `rotation30_pad25_3` TTA, and bounded +streaming. Keep package version 0.3.0 and the current model artifacts/preset identities +while consolidating. Quantization and further HPC scalability work are deferred. +Shared `mini_trainer` changes still require a feature/fix branch and reviewed merge. + +## Consolidation sequence + +1. **Audit the deployment boundary.** Keep runtime responsibilities in the existing + modules: bundle/download validation; preprocessing/augmentation; backend execution + in `predictor`; hierarchy/results; and streaming/transfers/result worker. Check + unused paths and duplicated work against both request and streaming callers. + Remove only demonstrably dead or redundant code. Preserve public exports, CLI + defaults, result ownership, shutdown/error handling and optional-runtime imports. + Profiling and experiment setup remain under `dev/releases/mambo_v3`, outside the + deployment wheel. Do not redesign the pipeline during freeze preparation. +2. **Consolidate developer documentation.** The [deployment README](../../../deployment/README.md) + owns installation, configuration and integration examples. Preset scope belongs + in [the catalogue](../../../docs/model-presets.md); complete numbers/provenance + belong in the [Flemming](../../../docs/mambo-deployment-evidence.md), + [in-domain](../../../docs/mambo-indomain-evidence.md) and + [current HPC](../../../docs/mambo-hpc-evidence.md) evidence pages. Keep performance + figures in the README, long tables in linked evidence, and historical diagnostics + out of the integration path. Mark old measurements/instructions as historical + rather than erasing their provenance. +3. **Refresh candidate metadata once documentation settles.** The checked-in + `deployment/mambo_deploy/default_bundle.json` embeds an older README and model + card. The card still describes full task metrics as outstanding. Update the + builder's card text and regenerate with the existing `build_bundle.py` and + `package_download_metadata.py` workflows. Verify preset files, source URLs, + all file hashes, and version/model/artifact identities. Documentation changes + alter the descriptor-derived cache revision; record the final revision rather + than repeatedly regenerating it during editorial work. Ensure links work from + the actual distribution location as well as the repository. +4. **Build and qualify the final installed candidate.** Build the deployment and + matching training wheels once. Follow [deployment qualification](deployment-qualification.md) + for ONNX-only CPU installation, relocated/read-only offline bundle, API/CLI, + presets/custom lists, predictions/embeddings and existing CUDA environments. + Include streaming ownership, early close and error propagation in affected + tests. Run static checks and the required wheel check. Reuse unchanged model + quality evidence and the completed B200 smoke; do not launch another quality, + throughput or hardware campaign without a concrete compatibility failure. +5. **Record the freeze manifest.** Capture source commit, wheel hashes, bundle + revision/hashes, versions, tested runtime environments, known limitations and + publication/rollback assets. Confirm training revision/best-epoch provenance + and weight/data redistribution notices, which remain open in the current model + card. Qualify only the OS/runtime combinations actually checked; additional OS + support is not implied. Tagging, uploading and promotion are separate from + preparing these reviewable assets. + +## Evidence already ready + +- Full Flemming and in-domain comparisons through `mini_metrics`, including rank + metrics, calibrated/unthresholded results, coverage and support >5. +- Latest full-B200 four-variant request/streaming timings, memory and provenance + now linked from the README. Earlier CPU/V2 and laptop evidence remains labelled. +- Current focused runtime/static checks and targeted CUDA preprocessing evidence + recorded in the [pipeline report](pipeline-probe.md). +- Deterministic timing figure generated by `hpc_speed_report.py`; no new benchmark + execution is needed to reproduce it. + +Freeze completion requires the final installed artifacts and documentation to agree. +Historical qualification is supporting evidence, not a substitute for checking the +final wheels and embedded metadata. diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index 4c7fa54..9e19072 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -83,8 +83,10 @@ at resize rounding boundaries; it is not a byte-exact preprocessing claim. The [measured release report](../../../docs/mambo-v3-evaluation.md) supersedes the initial subset-only evidence above with full Flemming metrics, CPU/GPU timings and a completed broad test suite. The [evaluation workflow](evaluation.md) preserves -unknown truth and documents the UCloud commands. In-domain inference still needs -to run on UCloud with the verified original test split. +unknown truth and documents the UCloud commands. In-domain inference and its +mini_metrics presentation have completed; see the [in-domain evidence](../../../docs/mambo-indomain-evidence.md). +The [freeze preparation](deployment-freeze.md) identifies final installed-artifact +checks after consolidation; the initial results below do not certify those final wheels. Four deterministic images establish execution contracts, not representative accuracy, embedding quality or speed. Windows/macOS, clean CUDA installations, diff --git a/dev/releases/mambo_v3/hpc_speed_report.py b/dev/releases/mambo_v3/hpc_speed_report.py new file mode 100644 index 0000000..58b400d --- /dev/null +++ b/dev/releases/mambo_v3/hpc_speed_report.py @@ -0,0 +1,81 @@ +"""Publish the completed four-variant B200 smoke without mixing historical campaigns.""" + +import argparse +import csv +import hashlib +import json +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +from dev.releases.mambo_v3.defaults_report import SERIES + + +def publish(source, output): + output.mkdir(parents=True, exist_ok=True) + provenance = {"environment": json.loads((source / "environment.json").read_text()), "reports": {}} + observations = [] + plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-hpc-current-speed-v1"}) + fig, axes = plt.subplots(1, 2, figsize=(11.5, 4.8), sharex=True, sharey=True) + for row, (variant, label, color) in enumerate(SERIES[1:]): + path = source / variant / "report.json" + report = json.loads(path.read_text()) + if report["status"] != "complete": + raise ValueError(f"Incomplete report: {variant}") + cell = report["cells"][0] + if cell["batch_size"] != 256 or cell["preset"] != "full": + raise ValueError("Expected global preset and batch 256") + provenance["reports"][variant] = { + "sha256": hashlib.sha256(path.read_bytes()).hexdigest(), + **{k: report[k] for k in ("runtime", "settings", "bundle_sha256", "manifest_sha256", "effective_precision")}, + "list_sha256": cell["list_sha256"], + "peak_host_gib": report["peak_rss_kib_linux"] / 1024**2, + } + for ax, mode in zip(axes, ("end_to_end", "streaming")): + data = cell[mode] + images = cell["batch_size"] if mode == "end_to_end" else data["images"] + rates = [images / seconds for seconds in data["seconds"]] + rate = images / data["median_seconds"] + ax.barh(row, rate, color=color, height=0.58) + ax.errorbar(rate, row, xerr=[[rate - min(rates)], [max(rates) - rate]], color="#333333", capsize=3) + ax.text(max(rates) + 28, row, f"{rate:,.0f}", va="center", fontsize=10) + observations.extend( + dict(variant=variant, mode=mode, repetition=i + 1, images=images, seconds=seconds, images_per_second=images / seconds) + for i, seconds in enumerate(data["seconds"]) + ) + for ax, title in zip(axes, ("Request · 256 images per call", "Streaming · 4,096 images per pass")): + ax.set(title=title, xlabel="Images/s", xlim=(0, 2400), yticks=range(4), yticklabels=[s[1] for s in SERIES[1:]]) + ax.grid(axis="x", alpha=0.15) + ax.set_axisbelow(True) + ax.spines[["top", "right"]].set_visible(False) + axes[0].invert_yaxis() + fig.suptitle("Full NVIDIA B200 · V3 deployment at batch 256", fontsize=15) + fig.text( + 0.02, + 0.025, + "Global vocabulary; warm inputs; median and range of three repetitions per variant in one process.\n" + "4 runtime threads; streaming: 48 preparation workers, 128 readers. PyTorch FP16; ONNX TF32. " + f"Commit {provenance['environment']['commit'][:7]}.", + fontsize=9, + ) + fig.tight_layout(rect=(0, 0.12, 1, 0.93)) + path = output / "mambo-hpc-current-speed.svg" + fig.savefig(path, metadata={"Date": None}) + plt.close(fig) + path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") + with (output / "mambo-hpc-current-speed.csv").open("w") as stream: + writer = csv.DictWriter(stream, fieldnames=list(observations[0])) + writer.writeheader() + writer.writerows(observations) + (output / "mambo-hpc-current-provenance.json").write_text(json.dumps(provenance, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source", type=Path, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + publish(args.source, args.output) diff --git a/dev/releases/mambo_v3/indomain_report.py b/dev/releases/mambo_v3/indomain_report.py index d7bf9d6..2b4ca86 100644 --- a/dev/releases/mambo_v3/indomain_report.py +++ b/dev/releases/mambo_v3/indomain_report.py @@ -161,7 +161,9 @@ def publish(output): "Thresholds are dataset-specific evidence, not new deployment defaults.\n" ) text += ( - "\n## HPC timing boundaries\n\n" + "\n## Historical HPC timing boundaries\n\n" + "The latest V3 B200 timings are in the [current HPC evidence](mambo-hpc-evidence.md). " + "The observations below predate the pipeline improvements.\n\n" "The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations " "per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. " "CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. " diff --git a/docs/assets/mambo-hpc-current-provenance.json b/docs/assets/mambo-hpc-current-provenance.json new file mode 100644 index 0000000..7fa1c26 --- /dev/null +++ b/docs/assets/mambo-hpc-current-provenance.json @@ -0,0 +1,196 @@ +{ + "environment": { + "commit": "503de96ad0cc1e30662600fa766cd35ca30427e5", + "gpu": "Fri Sep 25 12:30:33 2026 \n+-----------------------------------------------------------------------------------------+\n| NVIDIA-SMI 610.57.04 KMD Version: 610.57.04 CUDA UMD Version: 13.3 |\n+-----------------------------------------+------------------------+----------------------+\n| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|=========================================+========================+======================|\n| 0 NVIDIA B200 Off | 00000000:F6:00.0 Off | 0 |\n| N/A 31C P0 156W / 1000W | 0MiB / 183359MiB | 0% Default |\n| | | Disabled |\n+-----------------------------------------+------------------------+----------------------+\n\n+-----------------------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=========================================================================================|\n| No running processes found |\n+-----------------------------------------------------------------------------------------+\n", + "gpu_instances": "GPU 0: NVIDIA B200 (UUID: GPU-af8d94b4-7e48-9570-1f4b-5476a933901c)\n", + "cuda_visible_devices": null, + "cpu_max": "4800000 100000\n", + "prepare_workers": 48, + "metadata_sha256": "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe", + "sample_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43" + }, + "reports": { + "torch": { + "sha256": "f6620b0cd43caeb35c257cbbc31c86ab88ec278e422fb0e7e637b94dc33a48ee", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": true, + "precision": "fp16", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "torch": "2.14.0+cu132", + "cuda": "13.2" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/torch", + "backend": "torch", + "device": "cuda:0", + "precision": "auto", + "tta": "none", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "fp16", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 4.011272430419922 + }, + "onnx": { + "sha256": "5370c34ccb48d15582da8360d20dfd23658607a3a39aa2596e7d59bd1c28a37e", + "runtime": { + "threads": 4, + "tf32": true, + "autocast": false, + "precision": "tf32", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "onnxruntime": "1.22.0" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/onnx", + "backend": "onnx", + "device": "cuda:0", + "precision": "auto", + "tta": "none", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "tf32", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 4.750694274902344 + }, + "torch-tta": { + "sha256": "31e5a4d3be24f11108def9d337376d047f194691c4c06023a03362015530c70f", + "runtime": { + "threads": 4, + "tf32": false, + "autocast": true, + "precision": "fp16", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "torch": "2.14.0+cu132", + "cuda": "13.2" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/torch-tta", + "backend": "torch", + "device": "cuda:0", + "precision": "auto", + "tta": "rotation30_pad25_3", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "fp16", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 5.841754913330078 + }, + "onnx-tta": { + "sha256": "bcab5433a4c10c6dac1f9c6d748ad64507f3449122d94a162916fc19539156a9", + "runtime": { + "threads": 4, + "tf32": true, + "autocast": false, + "precision": "tf32", + "platform": "Linux-6.12.0-211.40.1.el10_2.x86_64-x86_64-with-glibc2.39", + "onnxruntime": "1.22.0" + }, + "settings": { + "bundle": "/work/mambo-cache/9da887e131bd95a8", + "manifest": "/work/mambo-speed/b200-full-gather/sample.json", + "root": "/work/datasets/global_lepi", + "output": "/work/mambo-speed/b200-full-gather/onnx-tta", + "backend": "onnx", + "device": "cuda:0", + "precision": "auto", + "tta": "rotation30_pad25_3", + "embeddings": false, + "threads": 4, + "batches": [ + 256 + ], + "presets": [ + "full" + ], + "warmup": 2, + "repeats": 3, + "bank_size": 256, + "seed": 20260923, + "no_device_prefetch": false, + "stream_images": 4096, + "stream_workers": 48, + "read_workers": 128, + "read_window": 4096, + "prefetch_batches": 2, + "encoded_budget_mib": 1024 + }, + "bundle_sha256": "f0d42b3803829c03cbbc54982bec7bae880a76bfc400ae9b5fa309548de2aa5e", + "manifest_sha256": "a5814a7f9ac9111c7ea0288ef0c507d83c6449067392028dc2df2788439f1b43", + "effective_precision": "tf32", + "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", + "peak_host_gib": 7.350887298583984 + } + } +} diff --git a/docs/assets/mambo-hpc-current-speed.csv b/docs/assets/mambo-hpc-current-speed.csv new file mode 100644 index 0000000..e606af3 --- /dev/null +++ b/docs/assets/mambo-hpc-current-speed.csv @@ -0,0 +1,25 @@ +variant,mode,repetition,images,seconds,images_per_second +torch,end_to_end,1,256,0.17301857308484614,1479.6099368734292 +torch,end_to_end,2,256,0.17668779799714684,1448.883300951738 +torch,end_to_end,3,256,0.17422763700596988,1469.3420883119031 +torch,streaming,1,4096,2.073168557137251,1975.7197194115224 +torch,streaming,2,4096,2.281771891983226,1795.0961769626842 +torch,streaming,3,4096,1.942014266969636,2109.1503134997524 +onnx,end_to_end,1,256,0.33658771589398384,760.5743998115285 +onnx,end_to_end,2,256,0.32307914597913623,792.3755005113575 +onnx,end_to_end,3,256,0.33601783006452024,761.8643330648387 +onnx,streaming,1,4096,3.9595700660720468,1034.455744348854 +onnx,streaming,2,4096,4.432902649976313,923.9995378698169 +onnx,streaming,3,4096,4.110354200005531,996.5077948743415 +torch-tta,end_to_end,1,256,0.6653069949243218,384.7847714709806 +torch-tta,end_to_end,2,256,0.6480720441322774,395.01781062438187 +torch-tta,end_to_end,3,256,0.6541442449670285,391.35099325517024 +torch-tta,streaming,1,4096,7.125840627821162,574.8093753329446 +torch-tta,streaming,2,4096,6.513772226171568,628.8214966348924 +torch-tta,streaming,3,4096,6.565300341928378,623.8861570188138 +onnx-tta,end_to_end,1,256,1.2232836210168898,209.27280934832808 +onnx-tta,end_to_end,2,256,1.175656639970839,217.75065210055703 +onnx-tta,end_to_end,3,256,1.2088225970510393,211.7763190599845 +onnx-tta,streaming,1,4096,9.869592084083706,415.0120861231392 +onnx-tta,streaming,2,4096,10.341743794968352,396.06473349232056 +onnx-tta,streaming,3,4096,10.501273917034268,390.0479153634702 diff --git a/docs/assets/mambo-hpc-current-speed.svg b/docs/assets/mambo-hpc-current-speed.svg new file mode 100644 index 0000000..cbc3edf --- /dev/null +++ b/docs/assets/mambo-hpc-current-speed.svg @@ -0,0 +1,579 @@ + + + + + + + + image/svg+xml + + + Matplotlib v3.10.9, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 500 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 1500 + + + + + + + + + + + + + 2000 + + + + Images/s + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + V3 ONNX + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + V3 ONNX + TTA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1,469 + + + 762 + + + 391 + + + 212 + + + Request · 256 images per call + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 500 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 1500 + + + + + + + + + + + + + 2000 + + + + Images/s + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1,976 + + + 997 + + + 624 + + + 396 + + + Streaming · 4,096 images per pass + + + + Full NVIDIA B200 · V3 deployment at batch 256 + + + Global vocabulary; warm inputs; median and range of three repetitions per variant in one process. + 4 runtime threads; streaming: 48 preparation workers, 128 readers. PyTorch FP16; ONNX TF32. Commit 503de96. + + + + + + + + + + + diff --git a/docs/mambo-hpc-evidence.md b/docs/mambo-hpc-evidence.md new file mode 100644 index 0000000..75dfa40 --- /dev/null +++ b/docs/mambo-hpc-evidence.md @@ -0,0 +1,57 @@ +# Current HPC deployment timings + +These measurements support the [deployment guide](../deployment/README.md). +A fresh full NVIDIA B200 / AMD EPYC 9655 allocation with a 48-vCPU quota ran commit +`503de96` on 25 September 2026. Runtime versions were PyTorch 2.14.0+cu132 and +ONNX Runtime 1.22.0; automatic precision selected FP16 and TF32 respectively. + +Global vocabulary; batch 256; no embeddings; four runtime threads. Streaming uses +48 preparation workers, 128 readers, a 4,096-image window, two prefetched batches +and a 1 GiB encoded-byte budget. Each variant runs in a separate process with three +warmed repetitions. The error bars show their range, not a confidence interval. +Request timing processes 256 images per call. Streaming processes the same 4,096 +images per pass, including pipeline startup and final result completion. These +modes must not be pooled. This is warm-storage throughput, not cold WEKA performance. + +![Current request and streaming throughput](assets/mambo-hpc-current-speed.svg) + +| Variant | Request images/s | Streaming images/s | Peak host GiB | +|---|---:|---:|---:| +| V3 PyTorch | 1,469.3 | 1,975.7 | 4.01 | +| V3 ONNX | 761.9 | 996.5 | 4.75 | +| V3 PyTorch + TTA | 391.4 | 623.9 | 5.84 | +| V3 ONNX + TTA | 211.8 | 396.1 | 7.35 | + +Host memory is the high-water mark of each complete benchmark process, not a +per-mode or GPU-memory measurement. TTA uses `rotation30_pad25_3`. Both ONNX sessions +used the optimized graph profile with no failed compatibility attempts. + +[Raw repetition timings](assets/mambo-hpc-current-speed.csv) retain both execution +modes. [Provenance](assets/mambo-hpc-current-provenance.json) records configuration, +runtime versions, source report hashes, sample/bundle identities and hardware. +These improvements do not establish GPU saturation or general HPC scalability. +No new quality evaluation was performed by this speed check. + +## Earlier CPU and V2 comparisons + +The [earlier campaign figure](assets/mambo-indomain-speed.svg), +[request observations](assets/mambo-indomain-speed.csv), +[streaming observations](assets/mambo-indomain-streaming-speed.csv), and +[campaign provenance](assets/mambo-indomain-campaign.json) retain the EPYC CPU, +V2 and batch-size comparisons. They use an earlier V3 adapter and a different +streaming protocol; do not present them as current implementation timings or join +them to the new batch-256 points as one scaling curve. The laptop results in the +main guide are also retained as historical consumer-device evidence. + +## Reproduce the published figure + +With the extracted B200 archive available locally: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.hpc_speed_report \ + --source local-evidence/ucloud-speed-smoke-2026-09-25/b200-full-gather \ + --output docs/assets +``` + +The [speed workflow](../dev/releases/mambo_v3/speed-smoke.md) records how to run the +experiment. Further throughput work is deferred for the deployment freeze. diff --git a/docs/mambo-indomain-evidence.md b/docs/mambo-indomain-evidence.md index 9a0fdfb..0c00738 100644 --- a/docs/mambo-indomain-evidence.md +++ b/docs/mambo-indomain-evidence.md @@ -64,7 +64,9 @@ Full support / >5 values use the same reporting rows. >5 requires truth and acce Machine-readable [metrics](assets/mambo-indomain-tail.csv), [thresholds and split identities](assets/mambo-indomain-thresholds.json), and [class domains](assets/mambo-indomain-support.json) retain provenance and supplementary metrics. Thresholds are dataset-specific evidence, not new deployment defaults. -## HPC timing boundaries +## Historical HPC timing boundaries + +The latest V3 B200 timings are in the [current HPC evidence](mambo-hpc-evidence.md). The observations below predate the pipeline improvements. The EPYC 9655/B200 campaign retains 3 fresh-process trials per variant/device, 7 request observations per cell and 3 streaming observations per cell. Global and northern-Europe timing presets are available. CPU runtime threads: 4; streaming preparation workers: 48; readers: 256. Request, streaming and prepared-input diagnostics have different boundaries; do not pool them. The short streaming bank contains 1,024 images and includes pipeline startup. Prepared-input diagnostics exclude decoding/hierarchy reduction but include transfers, and remain supplementary. diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index f2f7c6e..507ef97 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -585,15 +585,18 @@ has been exercised. Release notes distinguish model changes from package/API cha | D — staged release | Consumer bundles, migration notes, measured trade-offs, offline checks and rollback | A–C; concrete reviewed candidate | | E — broader portability | Additional OS/browser profiles and distribution channels | Core release preserved; qualify only new boundaries | -A and B are implemented, and C now has local Flemming and CPU/GPU evidence; see +A and B are implemented; C now includes full Flemming and in-domain evidence plus +laptop and full-B200 timings. Throughput optimization is closed for this release. +The next bounded task is [deployment consolidation and freeze preparation](../dev/releases/mambo_v3/deployment-freeze.md). See the [measured release report](mambo-v3-evaluation.md), [real-world MAMBO_v2/v3 comparison](mambo-release-comparison.md), [deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) and [consumer guide](../deployment/README.md). The [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) now prepares the original in-domain split, public model downloads and five-pipeline CPU/GPU -comparison with an isolated, locked `uv` environment. Remote qualification and -full evaluation remain outstanding. D remains preparation only: +comparison. Remote qualification and full evaluation have completed; the +[current HPC results](mambo-hpc-evidence.md) include the latest pipeline. +D remains preparation only: training-source/best-epoch provenance, redistribution notices and final publication review are open. No model release has been published or tagged. @@ -619,9 +622,10 @@ The release adapter now also supports [outer TTA](mambo-tta.md), with named profiles and custom decoded-image transforms, plus independent preparation workers. [Class-frequency curves](mambo-frequency-comparison.md) retain both training and Flemming support axes. The [worker-scaling study](mambo-loading-scaling.md) confirms -remaining loading/scheduling limits; one-batch lookahead is experimental and needs -production cancellation/error and CPU/TTA contention qualification before adoption. -TTA remains opt-in; `tta=True` and bare `--tta` select the three-view padded-scale -recipe. The [default comparison](mambo-deployment-defaults.md) records full Flemming +historical loading/scheduling limits. Bounded streaming is now implemented and +has ordering, cancellation, error and buffer-lifetime coverage; broader HPC +scalability remains deferred. +TTA remains opt-in; `tta=True` and bare `--tta` select `rotation30_pad25_3`. The [default comparison](mambo-deployment-defaults.md) records full Flemming metrics and fresh-process CPU/GPU timing against V2 and ordinary V3. The full set -includes the recipe-selection subset; independent in-domain validation remains open. +includes the recipe-selection subset. The complementary [in-domain report](mambo-indomain-evidence.md) +now records the different response to TTA on general photographs. From 86ca28c9a4126afedbed467e03fcf7f6feccf920 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 13:00:35 +0200 Subject: [PATCH 091/221] docs: focus MAMBO deployment on simple integration --- deployment/README.md | 259 ++- dev/releases/mambo_v3/deployment-freeze.md | 32 +- dev/releases/mambo_v3/hpc_speed_report.py | 78 +- docs/assets/mambo-hpc-current-provenance.json | 5 + docs/assets/mambo-hpc-current-speed.svg | 1649 +++++++++++++---- docs/mambo-hpc-evidence.md | 13 +- docs/mambo-integration.md | 109 ++ 7 files changed, 1657 insertions(+), 488 deletions(-) create mode 100644 docs/mambo-integration.md diff --git a/deployment/README.md b/deployment/README.md index 570cbc6..909e4a7 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,136 +1,142 @@ # MAMBO deployment — release candidate -Run MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files -download automatically from public ERDA storage on first use and are verified -before caching. This candidate has not been publicly released; use the supplied wheel. +Identify moths and butterflies from images, with species, genus and family +predictions. V3 adds a standalone ONNX option alongside PyTorch: **no training +package or GPU is needed for ONNX/CPU**. Both backends use the same API, regional +lists and output format. The comparisons below show quality and speed against V2, +including CPU, laptop GPU and server GPU measurements. + +This candidate is not yet published; the examples use the supplied release wheels. +Model files download automatically from public ERDA storage on first use and are +verified and cached. Reuse one predictor across calls. ## Quick start -Start with ONNX/CPU for the smallest installation: it needs no training package. -Create and activate an environment (or activate an existing one), then install -the supplied wheel. Run your script with `python your_script.py` and reuse one -predictor across calls. +Create an environment, or use your application's existing environment. Python 3.12+ +is required. Install ONNX/CPU to start without a CUDA setup: ```sh uv venv --python 3.13 .venv -source .venv/bin/activate +source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' ``` +**Python** — choose the region where your images were collected: + ```python from mambo_deploy import Predictor -predictor = Predictor(backend="onnx", device="cpu", model="europe") -result = predictor.predict(["moth.jpg"]) -print(result[0].label) # species, genus, family IDs -print(result[0].confidence) # confidence at each rank +predictor = Predictor(model="north_europe") # ONNX, CPU; use "full" for global +result = predictor.predict(["moth.jpg", "butterfly.jpg"]) +print(result[0].label) # (species_id, genus_id, family_id) +print(result[0].confidence) # confidence for each of those ranks +records = result.to_dict() # list of JSON-serializable records for your application ``` -**Input/output contract** - -- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels - or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose - HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied. -- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family - order, one result per image. Each rank is predicted independently. -- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`; - `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows. - ONNX requires the bundle's embedding graph. - -For ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device="cuda:0"`. -This requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA -driver is still required. To reuse an already provisioned ONNX/CUDA environment, -add the base wheel without extras. Runtime versions are selected by your package -manager, not replaced during inference. For PyTorch, install the matching -`mini_trainer` wheel with `uv pip install --torch-backend=auto`, then select -`backend="torch"` and an explicit device. Requested but unavailable CUDA raises an error; individual -ONNX operators may still execute on CPU. CPU and CUDA are the supported device -choices; other OS/accelerator combinations remain unqualified. - - -ONNX/CUDA checks each graph once with a synthetic batch-one input when its session -first loads. A GPU-kernel compatibility failure triggers a checked retry with graph -optimizations disabled, with a warning about potentially lower throughput. It does -not switch to CPU. Sessions are reused, so this adds first-use work, not a probe to -every prediction. `predictor.onnx_session_info` reports the selected profiles; the -probe does not guarantee every later batch-dependent execution path. - -Models are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set -`MAMBO_CACHE` to choose another location. After the required model files are cached, -`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle, -pass `bundle="/path/to/mambo-bundle"`, `--bundle`, or set `MAMBO_BUNDLE`. -Keep each ONNX graph beside its `model.onnx.data` file. +**CLI** — the same defaults, for files or a directory: + +```sh +mambo_predict -i ./images --model north_europe -o ./output --name predictions +``` + +This creates `output/predictions/predictions.json` and `mini_metric.csv`; +`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run. +For a one-off command without installing into your application environment, replace +`mambo_predict` with +`uvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict`. + +| Interface | Inputs | Outputs | +|---|---|---| +| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. | +| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. | +| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. | + +For an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to +RGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF +orientation is not applied. Predictions at each rank are independent, so the three +IDs need not form one ancestral path. CSV truth labels are inferred from parent +folder names; arbitrary image folders do not supply evaluation ground truth. ## Choose the configuration that matters -**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for -simple integration, or use your existing PyTorch/CUDA environment. Leave -`precision="auto"` to select the backend/device's default precision, and keep the -recommended recipe when enabling TTA. +**Choose a geographic scope; leave the other defaults initially.** ONNX/CPU is the +simplest dependency footprint and a useful starting point for CPU-only and edge +applications. For NVIDIA GPU throughput, use PyTorch if it fits your environment, +or ONNX/CUDA to keep the training package out of your application. +[Runtime installation and offline use](../docs/mambo-integration.md) covers these +alternatives. Changing runtime does not change the input/output contract. -Leave TTA off for throughput, or enable `tta=True` when quality matters more: -expect roughly **one-third the throughput (about 3× slower)** with the default -three-view recipe; the exact cost depends on the workload. Start with the default -batch size and worker counts. Tune these on the target machine if speed or memory -becomes limiting. Request embeddings or extra candidates only when needed. +**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is +worth roughly 3× lower throughput.** Keep the default recipe. Its benefit is +image-domain dependent; the general-photograph comparison below provides context. -Use `predict_stream(paths)` for large path collections and consume each batch as -it arrives. Split large in-memory collections into smaller `predict()` requests; -`batch_size` alone does not bound the results retained for a whole request. +Keep `precision="auto"`. Increase `batch_size` only when processing enough images +to benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet +your application's throughput or CPU budget. Request embeddings or extra candidates +only when your workflow uses them. No server, dataset metadata or training setup is +required. -Pass API option values to `Predictor(...)`; prediction-method calls and CLI-only -options are shown explicitly. +Pass API settings to `Predictor(...)`, except the prediction methods shown below. +CLI flags apply to `mambo_predict`. | Python API | CLI | Default | Role / main trade-off | |---|---|---|---| -| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. | -| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. | -| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). | -| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. | -| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. | -| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. | -| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. | -| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. | -| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. | -| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. | +| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Eligible species; affects predictions and confidence. | +| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. | +| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. | +| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. | +| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. | +| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. | +| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. | +| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. | +| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. | +| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. | ### Geographic scope -Use `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list; -the [preset catalogue](../docs/model-presets.md) documents exact scope and construction. -Presets cover species that **can occur** in a region, including introduced species; -they are neither native-distribution maps nor exhaustive checklists. +Use `predictor.available_presets()` to list choices, or read the +[preset catalogue](../docs/model-presets.md) for their exact scope and construction. +Presets include species that **can occur** in a region, including introduced +species; they are neither native-distribution maps nor exhaustive checklists. +Use `model="full"` if a regional restriction is inappropriate. -`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated -occurrence requirements and broader eligibility; newer does not necessarily mean -more accurate. Legacy `north_europe` performed better on Flemming. Choose it for -comparable northern-European use, not as a universal default for other locations. -A custom `class_list=["GBIF_SPECIES_ID", ...]` or UTF-8 list file overrides the preset. -Unknown IDs and empty lists fail; duplicates are removed and model ordering retained. +`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also +available; legacy `north_europe` performed better on Flemming and is recommended +for comparable northern-European use. A custom `class_list=["GBIF_SPECIES_ID", ...]` +or UTF-8 file with one ID per line overrides the preset (`--class-list species.txt` +in the CLI). Unknown IDs and empty lists fail; duplicates are removed. -## Command line and migration +### Integrating with V2 applications -Run once without adding a project dependency: +The `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA +defaults, callable prediction, `class_mask` and native result containers. It needs +both release wheels. New integrations can use the smaller `mambo_deploy` interface +above, with CPU results independent of backend. Both download model assets automatically. -```sh -uvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \ - -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results -``` +Retain the legacy regional preset for comparison, and match species by taxon ID, +not numeric index. The V3 vocabulary, scores and embedding width can differ from V2; +existing thresholds and stored embeddings are not interchangeable. +[Migration details](../docs/mambo-integration.md#moving-from-v2) describe the remaining +compatibility boundaries. -Inside the activated environment, use `mambo_predict` directly. If using -`uv run`, add `--no-sync` to preserve the installed runtime dependencies. +### Large image collections -Outputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and -`embeddings.npy` when `--embeddings` is requested. Directory input is recursive. -The main controls above have corresponding CLI flags; use `mambo_predict --help`. +Use streaming for a large collection of paths, consuming results as they arrive: -Existing callers can use `mini_trainer.deploy.Predictor` with both wheels installed. -It preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets -it), with native result containers/device tensors. The portable API above defaults -to ONNX/CPU. Both interfaces download the default release when no bundle is supplied. -Do not use `weights=` as a model-selection control: overrides must match the pinned -release checkpoint. Legacy weights and already-preprocessed inputs need migration; -embedding dimensions may differ from V2. +```python +from contextlib import closing + +with closing(predictor.predict_stream(image_paths)) as batches: + for result in batches: + records = result.to_dict() + # Write records to your database, file or downstream service here. +``` + +Input order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs. +For in-memory inputs, split large collections into smaller `predict()` requests; +that method and the CLI retain results for the whole request. `batch_size` limits +model calls, not total request memory. [Streaming controls](../docs/mambo-integration.md#streaming-controls) +are available if the defaults do not fit your workload. ## Release comparison @@ -185,50 +191,17 @@ that average represent 1.70% / 0.34% / <0.01% of species/genus/family images wit thresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete metrics are in the [in-domain evidence](../docs/mambo-indomain-evidence.md). -![Current B200 request and streaming throughput for V3 with and without TTA](../docs/assets/mambo-hpc-current-speed.svg) - -Latest full-B200 measurements (`503de96`): global vocabulary, batch 256, four runtime -threads; streaming uses 48 preparation workers and 128 readers. Bars show median -and range of three repetitions per variant: 256 images per request and 4,096 warm -images per streaming pass, including pipeline startup. PyTorch uses FP16; ONNX -uses TF32. These are end-to-end pipeline rates, not GPU throughput ceilings. - -Streaming reached **1,976 images/s for PyTorch and 997 for ONNX**, or **624 and 396 -with TTA**. Request and streaming results have different boundaries; choose the -one matching your integration. [Exact timings, memory and provenance](../docs/mambo-hpc-evidence.md) -include the earlier CPU/V2 comparisons; retain the laptop evidence above for -consumer-device deployment. - -### Streaming image collections +![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](../docs/assets/mambo-hpc-current-speed.svg) -For large path collections, `predict_stream` overlaps reading and preparation with -inference and yields one prediction batch at a time, without accumulating outputs. -Ordered result processing also overlaps inference, with at most two result batches -outstanding: - -```python -from contextlib import closing - -with closing(predictor.predict_stream(image_paths)) as batches: - for prediction in batches: - consume(prediction) -``` +The server comparison retains CPU, GPU request and GPU streaming throughput in +**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s** +and ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and +smaller-batch results retain their earlier measurements; new request points are +shown separately rather than joined to older scaling curves. These are measured +application rates, not a promise of GPU saturation. -Use `embeddings=True` to yield `(prediction, embeddings)` pairs. Input order, -class selection and TTA semantics match `predict`. `closing` also releases workers -when you stop early; shutdown waits for filesystem calls already in progress. - -Tune `read_workers` and `read_window` to hide storage latency; tune -`prepare_workers` for decoding/TTA CPU capacity. `prefetch_batches` bounds prepared -images and `encoded_budget` bounds reserved encoded bytes (including active reads). -An individual file larger than that budget fails explicitly. The defaults are -32 readers, a 128-image window, the predictor's preparation worker count, two -prefetched batches and 256 MiB encoded storage. These controls are API-only and -independent of model batch size, which the read window must accommodate. A supplied -`stats={}` receives queue counts, reserved bytes, input waits and summed preparation -worker time. CUDA streaming stages inputs while inference runs; the Torch path uses -pinned uint8 batches and GPU preprocessing. `device_prefetch=False` disables device -staging. These settings bound pipeline buffers and expose useful tuning controls; -GPU saturation is not guaranteed. -The byte budget is not a total-process memory limit: decoding temporaries, prepared -views, the model and yielded results also consume memory. +[Timing details and provenance](../docs/mambo-hpc-evidence.md) record measurement +settings, memory and repeat ranges. Keep the laptop comparison above when choosing +for consumer devices. ONNX's CPU advantage and independence from the training +package make it especially relevant when a GPU or the full PyTorch stack is not +an option; PyTorch remains the faster GPU choice in these measurements. diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 14a4079..b78e568 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -19,19 +19,39 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me modules: bundle/download validation; preprocessing/augmentation; backend execution in `predictor`; hierarchy/results; and streaming/transfers/result worker. Check unused paths and duplicated work against both request and streaming callers. - Remove only demonstrably dead or redundant code. Preserve public exports, CLI - defaults, result ownership, shutdown/error handling and optional-runtime imports. + Remove only demonstrably dead or redundant code. Preserve result ownership, + shutdown/error handling and optional-runtime imports. + Public API/CLI changes remain possible when they remove a concrete integration + obstacle; document their V2 migration impact and validate the affected contract. + Do not treat the current public surface as already frozen. Profiling and experiment setup remain under `dev/releases/mambo_v3`, outside the deployment wheel. Do not redesign the pipeline during freeze preparation. -2. **Consolidate developer documentation.** The [deployment README](../../../deployment/README.md) +2. **Consolidate integration documentation and workflow.** Qualify a minimal path: + install one runtime → construct a predictor or invoke the CLI → supply ordinary + images → consume ordinary records. No training checkout, dataset metadata, + campaign config or GPU setup should be needed for ONNX/CPU. Check the documented + paths with original images and a custom class list, predictions/embeddings, an + existing application environment and an offline bundle. Explain scope/runtime/TTA + decisions; leave tuning and kernel diagnostics in linked details. + + Concrete usability items to settle before freezing (not new performance work): + the CLI retains whole-collection results; `read_window=128` must be raised for + streaming batches above 128; arrays require CHW conversion; native setup needs + the `timm` extra. Decide which need a small API/CLI fix versus explicit guidance. + Retain V2 entry-point and format compatibility where promised; distinguish that + from identical vocabularies, scores or embeddings. + + **Documentation ownership:** The [deployment README](../../../deployment/README.md) owns installation, configuration and integration examples. Preset scope belongs in [the catalogue](../../../docs/model-presets.md); complete numbers/provenance belong in the [Flemming](../../../docs/mambo-deployment-evidence.md), [in-domain](../../../docs/mambo-indomain-evidence.md) and [current HPC](../../../docs/mambo-hpc-evidence.md) evidence pages. Keep performance - figures in the README, long tables in linked evidence, and historical diagnostics - out of the integration path. Mark old measurements/instructions as historical - rather than erasing their provenance. + figures and the configuration table in the README, long evidence tables in linked + pages, and historical diagnostics out of the integration path. Mark old measurements/instructions as historical + rather than erasing their provenance. Preserve CPU/GPU, request/streaming and + V2/V3 comparison categories; update only measured values, and never imply older + CPU/laptop or smaller-batch results were rerun. 3. **Refresh candidate metadata once documentation settles.** The checked-in `deployment/mambo_deploy/default_bundle.json` embeds an older README and model card. The card still describes full task metrics as outstanding. Update the diff --git a/dev/releases/mambo_v3/hpc_speed_report.py b/dev/releases/mambo_v3/hpc_speed_report.py index 58b400d..0139821 100644 --- a/dev/releases/mambo_v3/hpc_speed_report.py +++ b/dev/releases/mambo_v3/hpc_speed_report.py @@ -4,22 +4,61 @@ import csv import hashlib import json +import statistics from pathlib import Path import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt +from matplotlib.ticker import NullFormatter from dev.releases.mambo_v3.defaults_report import SERIES -def publish(source, output): +def publish(source, output, baseline): output.mkdir(parents=True, exist_ok=True) provenance = {"environment": json.loads((source / "environment.json").read_text()), "reports": {}} observations = [] + baseline_rows = list(csv.DictReader(baseline.open())) + provenance["retained_request_baseline"] = { + "file": baseline.name, + "sha256": hashlib.sha256(baseline.read_bytes()).hexdigest(), + "scope": "CPU and smaller GPU batches; earlier campaign, not rerun", + } plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-hpc-current-speed-v1"}) - fig, axes = plt.subplots(1, 2, figsize=(11.5, 4.8), sharex=True, sharey=True) + fig, axes = plt.subplots(1, 3, figsize=(15, 5.2)) + for ax, device in zip(axes[:2], ("cpu", "cuda:0")): + all_batches = set() + for variant, label, color in SERIES: + rows = [ + r + for r in baseline_rows + if r["device"] == device + and r["preset"] == "full" + and r["variant"] == variant + and not (device == "cuda:0" and variant != "v2" and int(r["batch_size"]) == 256) + ] + batches = sorted({int(r["batch_size"]) for r in rows}) + all_batches.update(batches) + groups = [[float(r["images_per_second"]) for r in rows if int(r["batch_size"]) == b] for b in batches] + medians = [statistics.median(g) for g in groups] + ax.errorbar( + batches, + medians, + yerr=[[m - min(g) for m, g in zip(medians, groups)], [max(g) - m for m, g in zip(medians, groups)]], + color=color, + label=label, + marker="o", + markerfacecolor="white", + capsize=3, + ) + if device != "cpu": + all_batches.add(256) + ticks = sorted(all_batches) + ax.set(xscale="log", xlabel="Batch size", ylabel="Images/s", xticks=ticks) + ax.set_xticklabels(ticks) + ax.xaxis.set_minor_formatter(NullFormatter()) for row, (variant, label, color) in enumerate(SERIES[1:]): path = source / variant / "report.json" report = json.loads(path.read_text()) @@ -34,34 +73,40 @@ def publish(source, output): "list_sha256": cell["list_sha256"], "peak_host_gib": report["peak_rss_kib_linux"] / 1024**2, } - for ax, mode in zip(axes, ("end_to_end", "streaming")): + for mode in ("end_to_end", "streaming"): data = cell[mode] images = cell["batch_size"] if mode == "end_to_end" else data["images"] rates = [images / seconds for seconds in data["seconds"]] rate = images / data["median_seconds"] - ax.barh(row, rate, color=color, height=0.58) - ax.errorbar(rate, row, xerr=[[rate - min(rates)], [max(rates) - rate]], color="#333333", capsize=3) - ax.text(max(rates) + 28, row, f"{rate:,.0f}", va="center", fontsize=10) + spread = [[rate - min(rates)], [max(rates) - rate]] + if mode == "end_to_end": + axes[1].errorbar(256, rate, yerr=spread, color=color, marker="D", capsize=3, linestyle="none") + else: + axes[2].barh(row, rate, color=color, height=0.58) + axes[2].errorbar(rate, row, xerr=spread, color="#333333", capsize=3) + axes[2].text(max(rates) + 28, row, f"{rate:,.0f}", va="center", fontsize=10) observations.extend( dict(variant=variant, mode=mode, repetition=i + 1, images=images, seconds=seconds, images_per_second=images / seconds) for i, seconds in enumerate(data["seconds"]) ) - for ax, title in zip(axes, ("Request · 256 images per call", "Streaming · 4,096 images per pass")): - ax.set(title=title, xlabel="Images/s", xlim=(0, 2400), yticks=range(4), yticklabels=[s[1] for s in SERIES[1:]]) - ax.grid(axis="x", alpha=0.15) + for ax, title in zip(axes, ("EPYC CPU · request", "B200 · request", "B200 · streaming, batch 256")): + ax.set_title(title) + ax.grid(alpha=0.15) ax.set_axisbelow(True) ax.spines[["top", "right"]].set_visible(False) - axes[0].invert_yaxis() - fig.suptitle("Full NVIDIA B200 · V3 deployment at batch 256", fontsize=15) + axes[2].set(xlabel="Images/s", xlim=(0, 2400), yticks=range(4), yticklabels=[s[1] for s in SERIES[1:]]) + axes[2].invert_yaxis() + fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", ncol=5) fig.text( 0.02, 0.025, - "Global vocabulary; warm inputs; median and range of three repetitions per variant in one process.\n" - "4 runtime threads; streaming: 48 preparation workers, 128 readers. PyTorch FP16; ONNX TF32. " - f"Commit {provenance['environment']['commit'][:7]}.", + "Global vocabulary · circles/lines: retained earlier CPU and GPU request measurements; diamonds/bars: updated B200 batch 256.\n" + "Median and range; earlier: 3 process trials. Updated: 3 repetitions per variant; streaming: 4,096 warm images including startup.\n" + "Different campaigns are not joined as a scaling curve. Updated runtime: " + f"{provenance['environment']['commit'][:7]}. Settings and source observations: linked evidence.", fontsize=9, ) - fig.tight_layout(rect=(0, 0.12, 1, 0.93)) + fig.tight_layout(rect=(0, 0.15, 1, 0.91)) path = output / "mambo-hpc-current-speed.svg" fig.savefig(path, metadata={"Date": None}) plt.close(fig) @@ -77,5 +122,6 @@ def publish(source, output): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--source", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--baseline", type=Path, default=Path("docs/assets/mambo-indomain-speed.csv")) args = parser.parse_args() - publish(args.source, args.output) + publish(args.source, args.output, args.baseline) diff --git a/docs/assets/mambo-hpc-current-provenance.json b/docs/assets/mambo-hpc-current-provenance.json index 7fa1c26..20f6846 100644 --- a/docs/assets/mambo-hpc-current-provenance.json +++ b/docs/assets/mambo-hpc-current-provenance.json @@ -192,5 +192,10 @@ "list_sha256": "8a256b140c3ec3389329e6f3cb6c4d50e1634c49907a9caef099cdfd5c378ca5", "peak_host_gib": 7.350887298583984 } + }, + "retained_request_baseline": { + "file": "mambo-indomain-speed.csv", + "sha256": "604180640f24d7ed180832d0b2ac4fbfea4dbf7a5b8be173edb760388e51820f", + "scope": "CPU and smaller GPU batches; earlier campaign, not rerun" } } diff --git a/docs/assets/mambo-hpc-current-speed.svg b/docs/assets/mambo-hpc-current-speed.svg index cbc3edf..0dcf3e4 100644 --- a/docs/assets/mambo-hpc-current-speed.svg +++ b/docs/assets/mambo-hpc-current-speed.svg @@ -1,7 +1,7 @@ - + @@ -20,28 +20,28 @@
- - - + @@ -50,530 +50,1541 @@ L 0 3.5 " style="stroke: #000000; stroke-width: 0.8"/> - + - 0 + 1 - + - + - 500 + 8 - + + + + + + + + - + - - 1000 - - + - + + + + + - + - - 1500 - - + - + + + + + - + - - 2000 - - - Images/s + + Batch size + + + - + - - V3 PyTorch + + 5 - + + + + - + - - V3 ONNX + + 10 - + + + + - + - - V3 PyTorch + TTA + + 15 - + + + + - + + + + + 20 + + + + + + + + + + + + + 25 + + + + + + + + + + + + + 30 + + + + + + + + + - V3 ONNX + TTA + 35 - - - - - - - - - - - - + + Images/s + - + + - + - + - - + + + - - - + + + + - + + - - - + + + + + + + - - - + + + + - + + - - - + + + + + + + - - - + + + + - + + - - - + + + + + + + - - - + + + + - - + + + - - + + + + + + + + - - + + + + + - - + + + + + + + + + - - + + + + + + + + + - - + + + + + + + + + - - 1,469 + + + + + + + + + - - 762 + + + + + + + + + - - 391 + + - - 212 + + - - Request · 256 images per call + + EPYC CPU · request - - + - - - + + + + + + + + + + + 1 + + + + + + + + + + + + + 8 + + + + + + + + + + - + + 32 + + + + + + + - + - 0 + 256 - - - + + + + + - + + + - + - - 500 + + + + + + - - - + + + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Batch size + + + + + + + + + + - 1000 + 0 - - - + + + - + - + - 1500 + 200 - - - + + + - + - + - 2000 + 400 - - Images/s + + + + + + + + + + + 600 + + + + + + + + + + + + + 800 + + + + + + + + + + + + + 1000 + + + + + + + + + + + + + 1200 + + + + + + + + + + + + + 1400 + + + + Images/s - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B200 · request + + + + + + + + + + + + - + + + 0 + - - + + + + + - + + + 500 + - - + + + + + - + + + 1000 + - - + + + + + - + + + 1500 + + + + + + + + + + + + + 2000 + + + + Images/s + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + V3 ONNX + TTA + + + + + + - +" clip-path="url(#p8d82a1f4c2)" style="fill: #e8872e"/> - +" clip-path="url(#p8d82a1f4c2)" style="fill: #125351"/> - - - - +" clip-path="url(#p8d82a1f4c2)" style="fill: #98440b"/> - - + + - - - + + + + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + - - + - - 1,976 + + 1,976 - - 997 + + 997 - - 624 + + 624 - - 396 + + 396 - - Streaming · 4,096 images per pass + + B200 · streaming, batch 256 - - Full NVIDIA B200 · V3 deployment at batch 256 + + Global vocabulary · circles/lines: retained earlier CPU and GPU request measurements; diamonds/bars: updated B200 batch 256. + Median and range; earlier: 3 process trials. Updated: 3 repetitions per variant; streaming: 4,096 warm images including startup. + Different campaigns are not joined as a scaling curve. Updated runtime: 503de96. Settings and source observations: linked evidence. - - Global vocabulary; warm inputs; median and range of three repetitions per variant in one process. - 4 runtime threads; streaming: 48 preparation workers, 128 readers. PyTorch FP16; ONNX TF32. Commit 503de96. + + + + + + + + + + + + + + + + + + + + + + + + + + + MAMBO v2 + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + + + + + + + + + + + + + + + + + + + + + + + + V3 PyTorch + TTA + + + + + + + + + + + + + + + + + + + + + + + + V3 ONNX + TTA + - - + + + + + - - + + diff --git a/docs/mambo-hpc-evidence.md b/docs/mambo-hpc-evidence.md index 75dfa40..b53b89b 100644 --- a/docs/mambo-hpc-evidence.md +++ b/docs/mambo-hpc-evidence.md @@ -9,11 +9,14 @@ Global vocabulary; batch 256; no embeddings; four runtime threads. Streaming use 48 preparation workers, 128 readers, a 4,096-image window, two prefetched batches and a 1 GiB encoded-byte budget. Each variant runs in a separate process with three warmed repetitions. The error bars show their range, not a confidence interval. -Request timing processes 256 images per call. Streaming processes the same 4,096 +Updated request timing processes 256 images per call. Streaming processes the same 4,096 images per pass, including pipeline startup and final result completion. These -modes must not be pooled. This is warm-storage throughput, not cold WEKA performance. +modes must not be pooled. The figure retains the earlier CPU and smaller-batch +GPU request curves, replacing the batch-256 request points and streaming bars. +Updated points are not joined to older curves. Circles/lines are earlier evidence; +diamonds/bars are updated. This is warm-storage throughput, not cold WEKA performance. -![Current request and streaming throughput](assets/mambo-hpc-current-speed.svg) +![CPU and GPU request throughput with updated B200 streaming](assets/mambo-hpc-current-speed.svg) | Variant | Request images/s | Streaming images/s | Peak host GiB | |---|---:|---:|---:| @@ -34,6 +37,7 @@ No new quality evaluation was performed by this speed check. ## Earlier CPU and V2 comparisons +CPU and V2 have not been rerun; their values in the combined figure are unchanged. The [earlier campaign figure](assets/mambo-indomain-speed.svg), [request observations](assets/mambo-indomain-speed.csv), [streaming observations](assets/mambo-indomain-streaming-speed.csv), and @@ -50,7 +54,8 @@ With the extracted B200 archive available locally: ```sh .venv/bin/python -m dev.releases.mambo_v3.hpc_speed_report \ --source local-evidence/ucloud-speed-smoke-2026-09-25/b200-full-gather \ - --output docs/assets + --output docs/assets \ + --baseline docs/assets/mambo-indomain-speed.csv ``` The [speed workflow](../dev/releases/mambo_v3/speed-smoke.md) records how to run the diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md new file mode 100644 index 0000000..5176e59 --- /dev/null +++ b/docs/mambo-integration.md @@ -0,0 +1,109 @@ +# MAMBO integration details + +Start with the [deployment quickstart](../deployment/README.md). This page covers +runtime choices, restricted environments and optional tuning; these are not +additional steps for the default ONNX/CPU integration. + +## Runtime installation + +Use an activated Python 3.12+ environment. The candidate wheels must be supplied +locally until publication. Choose one runtime installation: + +| Environment | Installation | Predictor options / CLI | +|---|---|---| +| CPU, without PyTorch | `uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | +| NVIDIA GPU, without the training package | `uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx-cuda]'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | +| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl[timm]' ./mambo_deploy-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | + +For an environment with ONNX Runtime already provisioned, install the base +`mambo_deploy` wheel without extras. Do not install CPU and GPU ONNX Runtime +packages together. Use the application's dependency management to select and +record versions; inference never installs or replaces runtime packages. If you +use `uv run`, pass `--no-sync` to retain the installed environment. + +ONNX removes the training-package dependency and provides the same Python and CLI +interface on CPU or CUDA. The adapter currently exposes only CPU and NVIDIA CUDA; +it does not automatically enable other ONNX execution providers. Availability of +a compatible runtime wheel and adequate memory still matters on edge hardware. +Linux measurements do not establish support for every OS or accelerator. + +CUDA requires a compatible NVIDIA driver and runtime build. The `onnx-cuda` extra +requests CUDA/cuDNN dependencies; it cannot guarantee that a wheel includes kernels +for every GPU architecture. The B200 evidence uses ONNX Runtime 1.22.0, recorded in +[the measured environment](mambo-hpc-evidence.md), not a universal version pin. +Requested unavailable CUDA raises an error rather than silently switching the +whole model to CPU; ONNX may place individual operators on CPU. + +ONNX/CUDA probes each graph once when first loaded. A GPU-kernel compatibility +failure triggers a checked retry with graph optimizations disabled and a warning. +If that also fails, inference stops with an error. Sessions are reused; inspect +`predictor.onnx_session_info` when diagnosing a runtime problem. This check does +not guarantee every batch-dependent execution path. + +## Restricted and offline environments + +Models are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`). Set `MAMBO_CACHE` +to a writable persistent directory when the default home is unsuitable. +First use requires outbound access to the public ERDA model files; later calls +reuse verified assets. + +For deployment without network access, provision dependencies beforehand and either: + +- Run the intended backend and output mode on a connected machine, copy its model + cache, set `MAMBO_CACHE` to that location and set `MAMBO_OFFLINE=1`. Include a call + with embeddings if the application will request them; that uses another ONNX graph. +- Supply a complete release bundle and pass `Predictor(bundle="/path/to/bundle")`, + `--bundle /path/to/bundle`, or set `MAMBO_BUNDLE`. Keep each ONNX graph beside its + external `model.onnx.data` file. An explicit bundle is read locally. + +The same model files serve CPU and CUDA for each backend. No training dataset or +metadata parquet is required. Prediction results and model caches are separate: +the API returns results to the application; the CLI writes to its chosen output +directory. Raw PyTorch checkpoints require the matching architecture/runtime; +use the release adapter rather than loading them as arbitrary models. + +## Moving from V2 + +For existing callers, `mini_trainer.deploy.Predictor` preserves native result +containers/device tensors, native/CUDA defaults, callable prediction and +`class_mask` (`-1` resets it). The portable `mambo_deploy.Predictor` instead defaults +to ONNX/CPU and returns CPU results. The two entry points share release model assets. + +Keep `europe` or `north_europe` for the legacy preset; `_v3` presets deliberately +change eligibility. Supply original pixels to the portable API, not tensors +normalized by an old preprocessing pipeline. Match class identities using GBIF +IDs rather than positions. V3 embeddings have width 1,280; recreate stored +embeddings if migrating a similarity index from V2. Confidence thresholds are +model/list specific. + +`weights=` is not a V2/V3 selection switch: a native override must match the pinned +release checkpoint. Keep the V2 runtime/assets separately if you still need to run +V2. Preserving its calling conventions does not imply identical predictions or a +shared embedding space. + +## Streaming controls + +`predict_stream(paths)` yields ordered prediction batches; `embeddings=True` yields +`(prediction, vectors)` pairs. Consume each batch without retaining it to keep +output memory bounded. Use `contextlib.closing` when stopping early; shutdown waits +for filesystem calls already in progress. + +Start with defaults, then change the resource relevant to your workload. These +options belong to `predict_stream`, not the constructor or CLI: + +| Option | Default | When it matters | +|---|---|---| +| `read_workers` | `32` | Concurrent file reads, useful for storage latency. | +| `read_window` | `128` images | Maximum lookahead; must accommodate the predictor's `batch_size`. Increase alongside larger batches. | +| `prepare_workers` | Predictor's `preprocess_workers` | Decoding and image preparation; shares CPU capacity with your application. | +| `prefetch_batches` | `2` | Prepared input buffer size; trades memory for overlap. | +| `encoded_budget` | `256 * 1024**2` bytes | Encoded image buffer budget; a larger single file fails explicitly. | + +These budgets do not bound total process memory: model weights, decoded images, +prepared views and results also consume memory. `predict()` and the CLI accumulate +results for the whole input collection, so submit bounded requests there. + +For diagnostics, `stats={}` collects queue/buffer and wait statistics; +`device_prefetch=False` disables device staging. These are not routine integration +settings. Calls using one predictor share serialized inference; adding caller +threads alone does not create concurrent model execution. From a9152420affe56498a88674b9841b4d3c4267e65 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 13:46:59 +0200 Subject: [PATCH 092/221] feat: establish V3 package and global streaming integration defaults --- deployment/README.md | 42 +++++-- deployment/mambo_deploy/cli.py | 107 ++++++++++++------ deployment/mambo_deploy/predictor.py | 6 +- deployment/pyproject.toml | 5 +- dev/releases/mambo_v3/deployment-freeze.md | 24 +++- dev/releases/mambo_v3/qualify_bundle.py | 2 +- .../mambo_v3/ucloud_env/pyproject.toml | 4 +- dev/releases/mambo_v3/ucloud_env/uv.lock | 42 +++---- docs/mambo-integration.md | 13 ++- mini_trainer/deploy.py | 6 +- pyproject.toml | 1 - tests/releases/test_deployment.py | 81 ++++++++++++- tests/releases/test_release_download.py | 2 +- 13 files changed, 246 insertions(+), 89 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 909e4a7..3626743 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -18,15 +18,15 @@ is required. Install ONNX/CPU to start without a CUDA setup: ```sh uv venv --python 3.13 .venv source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 -uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' +uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]' ``` -**Python** — choose the region where your images were collected: +**Python** — supply images directly: ```python from mambo_deploy import Predictor -predictor = Predictor(model="north_europe") # ONNX, CPU; use "full" for global +predictor = Predictor() # Global species list, ONNX, CPU result = predictor.predict(["moth.jpg", "butterfly.jpg"]) print(result[0].label) # (species_id, genus_id, family_id) print(result[0].confidence) # confidence for each of those ranks @@ -36,14 +36,14 @@ records = result.to_dict() # list of JSON-serializable records for your applic **CLI** — the same defaults, for files or a directory: ```sh -mambo_predict -i ./images --model north_europe -o ./output --name predictions +mambo_predict -i ./images -o ./output --name predictions ``` This creates `output/predictions/predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. Choose a new output name for each run. For a one-off command without installing into your application environment, replace `mambo_predict` with -`uvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict`. +`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`. | Interface | Inputs | Outputs | |---|---|---| @@ -59,7 +59,7 @@ folder names; arbitrary image folders do not supply evaluation ground truth. ## Choose the configuration that matters -**Choose a geographic scope; leave the other defaults initially.** ONNX/CPU is the +**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the simplest dependency footprint and a useful starting point for CPU-only and edge applications. For NVIDIA GPU throughput, use PyTorch if it fits your environment, or ONNX/CUDA to keep the training package out of your application. @@ -81,7 +81,7 @@ CLI flags apply to `mambo_predict`. | Python API | CLI | Default | Role / main trade-off | |---|---|---|---| -| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Eligible species; affects predictions and confidence. | +| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. | | `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. | | `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. | | `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. | @@ -134,10 +134,36 @@ with closing(predictor.predict_stream(image_paths)) as batches: Input order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs. For in-memory inputs, split large collections into smaller `predict()` requests; -that method and the CLI retain results for the whole request. `batch_size` limits +that method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits model calls, not total request memory. [Streaming controls](../docs/mambo-integration.md#streaming-controls) are available if the defaults do not fit your workload. +## Changes from MAMBO V2 + +- Global (`full`) is now the default scope. Select `europe` or `north_europe` to + retain those geographic restrictions; the legacy lists remain available. +- Install the model-generation package **`mambo-v3`**; its Python import remains + `mambo_deploy`. Maintenance releases of this package retain the V3 trained model. + Pin the package version for reproducible application builds. Use a separate + environment for V2 or an older deployment candidate. +- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU. + Existing native CLI workflows must specify `--backend torch --device cuda:0`. + The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults. +- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and + streaming output. Raw inputs and result formats are documented above; old + preprocessed tensors, numeric class positions and embeddings need migration. + +### Beyond Python + +The ONNX assets also provide a path to local browser inference with +[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where +images can be processed on the user's device. Existing browser work is recorded +in the [release roadmap](../docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work). +This Python release does not ship a browser SDK: preprocessing, external weights +and browser/runtime support still need integration. The same local API or CLI can +be embedded in desktop applications, batch jobs and services without a hosted +prediction service. + ## Release comparison These results help choose TTA and runtime; they do not establish accuracy in every diff --git a/deployment/mambo_deploy/cli.py b/deployment/mambo_deploy/cli.py index 55f1de7..ef3972f 100644 --- a/deployment/mambo_deploy/cli.py +++ b/deployment/mambo_deploy/cli.py @@ -2,6 +2,9 @@ import argparse import csv +import json +import tempfile +from contextlib import closing from pathlib import Path import numpy as np @@ -51,6 +54,11 @@ def run(default_backend="onnx", default_device="cpu"): if path.is_dir() else [path] ) + destination = args.output / args.name + if destination.exists(): + parser.error(f"Output already exists: {destination}; choose a new --name") + if not paths: + parser.error("No images found") predictor = Predictor( args.bundle, backend=args.backend, @@ -64,14 +72,6 @@ def run(default_backend="onnx", default_device="cpu"): tta=args.tta, preprocess_workers=args.preprocess_workers, ) - result = predictor.predict_with_embeddings(paths, args.topk) if args.embeddings else predictor.predict(paths, args.topk) - if args.embeddings: - result, embeddings = result - destination = args.output / args.name - destination.mkdir(parents=True, exist_ok=False) - result.save(destination / "predictions.json") - if args.embeddings: - np.save(destination / "embeddings.npy", embeddings, allow_pickle=False) columns = [ "instance_id", "filename", @@ -87,31 +87,68 @@ def run(default_backend="onnx", default_device="cpu"): full_labels = predictor.bundle.classes["labels"] species_index = {label: i for i, label in enumerate(full_labels[0])} parents = predictor.bundle.classes["parents"] - with (destination / "mini_metric.csv").open("w", newline="") as stream: - writer = csv.writer(stream) - writer.writerow(columns) - for i, path in enumerate(paths): - truth = [path.parent.name, "", ""] - if truth[0] in species_index: - genus = parents[0][species_index[truth[0]]] - truth[1:] = [full_labels[1][genus], full_labels[2][parents[1][genus]]] - for rank in range(3): - label = result.labels[i][0][rank] - confidence = float(result.confidence[i, 0, rank]) - known = truth[rank] in result.cls2idx[str(rank)] - made = confidence >= args.threshold - writer.writerow( - [ - i, - str(path), - rank, - truth[rank], - label, - confidence, - args.threshold, - int(known), - int(made), - (1 if label == truth[rank] else -1) if made else 0, - ] - ) + destination.parent.mkdir(parents=True, exist_ok=True) + # Publish only a complete request. Failures leave no plausible final results. + with tempfile.TemporaryDirectory(prefix=".mambo-results-", dir=destination.parent) as temporary: + output = Path(temporary) / "results" + output.mkdir() + with ( + (output / "mini_metric.csv").open("w", newline="") as stream, + (output / "predictions.json").open("w") as predictions, + closing(predictor.predict_stream(paths, topk=args.topk, embeddings=args.embeddings)) as batches, + ): + writer = csv.writer(stream) + writer.writerow(columns) + offset, vectors = 0, None + try: + for batch in batches: + result, embedding = batch if args.embeddings else (batch, None) + if offset == 0: + predictions.write('{"metadata": ' + json.dumps(result.metadata)) + predictions.write(', "config": ' + json.dumps({"topk": result.topk, "cls2idx": result.cls2idx})) + predictions.write(', "results": [') + if embedding is not None: + vectors = np.lib.format.open_memmap( + output / "embeddings.npy", mode="w+", dtype=np.float32, shape=(len(paths), embedding.shape[1]) + ) + for i, record in enumerate(result.to_dict()): + if offset + i: + predictions.write(",") + predictions.write(json.dumps(record)) + path = paths[offset + i] + truth = [path.parent.name, "", ""] + if truth[0] in species_index: + genus = parents[0][species_index[truth[0]]] + truth[1:] = [full_labels[1][genus], full_labels[2][parents[1][genus]]] + for rank in range(3): + label = result.labels[i][0][rank] + confidence = float(result.confidence[i, 0, rank]) + known = truth[rank] in result.cls2idx[str(rank)] + made = confidence >= args.threshold + writer.writerow( + [ + offset + i, + str(path), + rank, + truth[rank], + label, + confidence, + args.threshold, + int(known), + int(made), + (1 if label == truth[rank] else -1) if made else 0, + ] + ) + if vectors is not None: + vectors[offset : offset + len(result)] = embedding + offset += len(result) + if offset != len(paths): + raise RuntimeError(f"Incomplete prediction: {offset}/{len(paths)} images") + predictions.write("]}") + finally: + if vectors is not None: + vectors.flush() + # Release the mapping before directory publication on Windows. + del vectors + output.rename(destination) print(destination) diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index d2a01c9..5431fc2 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -89,7 +89,7 @@ def __init__( expected = self.bundle.manifest["files"][self.bundle.manifest["profiles"]["torch"]["model"]]["sha256"] if digest != expected: raise ValueError("Local weights must match the pinned release checkpoint") - self.preset = self._preset_name(model or ("full" if weights is not None else "europe")) + self.preset = self._preset_name(model or "full") if class_list is not None: self._select_labels(self._read_list(class_list)) self.preset = "custom" @@ -447,7 +447,7 @@ def predict_stream( topk=1, read_workers=32, prepare_workers=None, - read_window=128, + read_window=None, prefetch_batches=2, encoded_budget=256 * 1024**2, stats=None, @@ -464,7 +464,7 @@ def predict_stream( device_prefetch=device_prefetch, read_workers=read_workers, prepare_workers=self.preprocess_workers if prepare_workers is None else prepare_workers, - read_window=read_window, + read_window=max(128, self.batch_size) if read_window is None else read_window, prefetch_batches=prefetch_batches, encoded_budget=encoded_budget, stats=stats, diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index d4414c7..6dab5af 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "mambo-deploy" +name = "mambo-v3" version = "0.3.0" description = "Portable local inference for MAMBO model bundles" requires-python = ">=3.12" @@ -11,7 +11,7 @@ license-files = ["LICENSE"] [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] -torch = ["mini_trainer>=0.3.0"] +torch = ["mini_trainer[timm]>=0.3.0,<0.4"] [project.scripts] mambo_predict = "mambo_deploy.cli:run" @@ -22,3 +22,4 @@ build-backend = "uv_build" [tool.uv.build-backend] module-root = "" +module-name = "mambo_deploy" diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index b78e568..7db4937 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -34,10 +34,12 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me existing application environment and an offline bundle. Explain scope/runtime/TTA decisions; leave tuning and kernel diagnostics in linked details. - Concrete usability items to settle before freezing (not new performance work): - the CLI retains whole-collection results; `read_window=128` must be raised for - streaming batches above 128; arrays require CHW conversion; native setup needs - the `timm` extra. Decide which need a small API/CLI fix versus explicit guidance. + Implemented integration decisions: the `mambo-v3` distribution alone owns + `mambo_predict`; API/CLI default to global; CLI writes batches incrementally and + publishes only complete outputs; the streaming read-window default grows with + batch size; the native extra includes `timm`. Arrays retain explicit CHW input + to avoid guessing ambiguous layouts. These changes need final installed-bundle + qualification below. Retain V2 entry-point and format compatibility where promised; distinguish that from identical vocabularies, scores or embeddings. @@ -91,3 +93,17 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me Freeze completion requires the final installed artifacts and documentation to agree. Historical qualification is supporting evidence, not a substitute for checking the final wheels and embedded metadata. + +## Integration increment evidence — 25 September 2026 + +The package is now model-generation-specific (`mambo-v3`, Python import +`mambo_deploy`), version 0.3.0. The root training package no longer registers the +same executable. Existing candidate installations need a fresh environment (or +removal of `mambo-deploy`) to avoid two distributions owning the import directory. +No published package was changed. + +Focused contracts: 96 passed, four GPU-dependent skips, across the initial run +and correction of a generator stub in the new read-window test. Static checks and +the required minimal installed training-wheel check passed. The renamed deployment +wheel builds; final installed ONNX/native bundle checks remain ahead. No performance +or quality evaluation was rerun. diff --git a/dev/releases/mambo_v3/qualify_bundle.py b/dev/releases/mambo_v3/qualify_bundle.py index bbd2d75..e98c39d 100644 --- a/dev/releases/mambo_v3/qualify_bundle.py +++ b/dev/releases/mambo_v3/qualify_bundle.py @@ -67,7 +67,7 @@ def qualify(bundle, dataset, device, backends, tta="none"): a, b = (report["variants"][backend][mode] for backend in backends) report[f"{mode}_backend_top1_agreement"] = sum(x["label"] == y["label"] for x, y in zip(a, b)) / len(a) report["versions"] = {} - for name in ("numpy", "pillow", "torch", "onnxruntime", "onnxruntime-gpu", "mambo-deploy"): + for name in ("numpy", "pillow", "torch", "onnxruntime", "onnxruntime-gpu", "mambo-v3"): try: report["versions"][name] = importlib.metadata.version(name) except importlib.metadata.PackageNotFoundError: diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml index ca591b7..f4770b2 100644 --- a/dev/releases/mambo_v3/ucloud_env/pyproject.toml +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" requires-python = ">=3.13,<3.14" dependencies = [ "mini_trainer[recommended,bioclip,timm]", - "mambo-deploy", + "mambo-v3", "mini_metrics", "torch==2.12.0", "torchvision==0.27.0", @@ -20,7 +20,7 @@ package = false [tool.uv.sources] mini_trainer = { path = "../../../.." } -mambo-deploy = { path = "../../../../deployment" } +mambo-v3 = { path = "../../../../deployment" } mini_metrics = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git", rev = "70cc69adc05362863439277048e06386c1f885e1" } torch = { index = "pytorch-cu130" } torchvision = { index = "pytorch-cu130" } diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock index 01ce3c8..0f7ada6 100644 --- a/dev/releases/mambo_v3/ucloud_env/uv.lock +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -406,32 +406,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/71/02fa5c2fd92068bb8952847e70ee6c5cb280e7febe11653d17812acc53dd/kiwisolver-1.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5", size = 68329, upload-time = "2026-08-28T10:26:17.658Z" }, ] -[[package]] -name = "mambo-deploy" -version = "0.3.0" -source = { directory = "../../../../deployment" } -dependencies = [ - { name = "numpy" }, - { name = "pillow" }, -] - -[package.metadata] -requires-dist = [ - { name = "mini-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0" }, - { name = "numpy", specifier = ">=2.4" }, - { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, - { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, - { name = "pillow", specifier = ">=11" }, -] -provides-extras = ["onnx", "onnx-cuda", "torch"] - [[package]] name = "mambo-ucloud-release" version = "0.1.0" source = { virtual = "." } dependencies = [ { name = "huggingface-hub" }, - { name = "mambo-deploy" }, + { name = "mambo-v3" }, { name = "mini-metrics" }, { name = "mini-trainer", extra = ["bioclip", "recommended", "timm"] }, { name = "onnxruntime-gpu", extra = ["cuda", "cudnn"] }, @@ -445,7 +426,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "huggingface-hub", specifier = "==0.36.2" }, - { name = "mambo-deploy", directory = "../../../../deployment" }, + { name = "mambo-v3", directory = "../../../../deployment" }, { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, { name = "mini-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], specifier = ">=1.27,<2" }, @@ -456,6 +437,25 @@ requires-dist = [ { name = "torchvision", specifier = "==0.27.0", index = "https://download.pytorch.org/whl/cu130" }, ] +[[package]] +name = "mambo-v3" +version = "0.3.0" +source = { directory = "../../../../deployment" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, +] + +[package.metadata] +requires-dist = [ + { name = "mini-trainer", extras = ["timm"], marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, + { name = "numpy", specifier = ">=2.4" }, + { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, + { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, + { name = "pillow", specifier = ">=11" }, +] +provides-extras = ["onnx", "onnx-cuda", "torch"] + [[package]] name = "markdown" version = "3.10.3" diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md index 5176e59..4d720ae 100644 --- a/docs/mambo-integration.md +++ b/docs/mambo-integration.md @@ -11,9 +11,9 @@ locally until publication. Choose one runtime installation: | Environment | Installation | Predictor options / CLI | |---|---|---| -| CPU, without PyTorch | `uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | -| NVIDIA GPU, without the training package | `uv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx-cuda]'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | -| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl[timm]' ./mambo_deploy-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | +| CPU, without PyTorch | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | +| NVIDIA GPU, without the training package | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx-cuda]'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | +| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl[timm]' ./mambo_v3-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | For an environment with ONNX Runtime already provisioned, install the base `mambo_deploy` wheel without extras. Do not install CPU and GPU ONNX Runtime @@ -94,14 +94,15 @@ options belong to `predict_stream`, not the constructor or CLI: | Option | Default | When it matters | |---|---|---| | `read_workers` | `32` | Concurrent file reads, useful for storage latency. | -| `read_window` | `128` images | Maximum lookahead; must accommodate the predictor's `batch_size`. Increase alongside larger batches. | +| `read_window` | `max(128, batch_size)` images | Maximum lookahead; follows larger batches automatically unless explicitly set. | | `prepare_workers` | Predictor's `preprocess_workers` | Decoding and image preparation; shares CPU capacity with your application. | | `prefetch_batches` | `2` | Prepared input buffer size; trades memory for overlap. | | `encoded_budget` | `256 * 1024**2` bytes | Encoded image buffer budget; a larger single file fails explicitly. | These budgets do not bound total process memory: model weights, decoded images, -prepared views and results also consume memory. `predict()` and the CLI accumulate -results for the whole input collection, so submit bounded requests there. +prepared views and results also consume memory. `predict()` accumulates results for the whole input collection; submit bounded +requests there. The CLI streams predictions and embeddings to disk and publishes +the output directory only when the complete run succeeds. For diagnostics, `stats={}` collects queue/buffer and wait statistics; `device_prefetch=False` disables device staging. These are not routine integration diff --git a/mini_trainer/deploy.py b/mini_trainer/deploy.py index e332a08..963bded 100644 --- a/mini_trainer/deploy.py +++ b/mini_trainer/deploy.py @@ -5,7 +5,7 @@ def _runtime(): try: from mambo_deploy import Predictor except ImportError as error: - raise ImportError("Install the matching mambo_deploy deployment wheel and provide a local MAMBO bundle") from error + raise ImportError("Install mambo-v3 with its torch extra (or the matching release wheels)") from error return Predictor @@ -79,8 +79,8 @@ def run(): except ImportError: from argparse import ArgumentParser - parser = ArgumentParser(description="MAMBO local prediction. Install the matching mambo_deploy wheel for inference.") + parser = ArgumentParser(description="MAMBO local prediction. Install mambo-v3 for inference.") parser.parse_args() - parser.error("Install the matching mambo_deploy wheel and provide --bundle or MAMBO_BUNDLE") + parser.error("Install mambo-v3; model files download automatically") deploy_run(default_backend="torch", default_device="cuda") diff --git a/pyproject.toml b/pyproject.toml index 069e97e..c4a7f07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,6 @@ Repository = "https://github.com/asgersvenning/mini_trainer" "Bug Tracker" = "https://github.com/asgersvenning/mini_trainer/issues" [project.scripts] -mambo_predict = "mini_trainer.deploy:run" mt_train = "mini_trainer.train:run" mt_predict = "mini_trainer.predict:run" mt_export = "mini_trainer.export:run" diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 77e5d7c..981b9c0 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -61,7 +61,7 @@ def test_tiny_legacy_top1_fixture(): def test_custom_list_replaces_preset_and_predictors_are_isolated(bundle): first = Predictor(bundle, class_list=["c", "c", "a"]) - second = Predictor(bundle) + second = Predictor(bundle, model="europe") assert first.class_list == ["a", "c"] assert second.class_list == ["a", "b"] first._apply_class_mask(-1) @@ -81,7 +81,7 @@ def test_hash_failure_and_escape_are_rejected(bundle): loaded.file("../outside") (bundle / "europe.classes").write_text("c\nb\n") with pytest.raises(ValueError, match="hash mismatch"): - Predictor(bundle) + Predictor(bundle, model="europe") def test_uint8_and_float_inputs_align_and_reject_hwc(): @@ -781,3 +781,80 @@ def test_cpu_interpolation_retains_reference_pixels_in_caller_storage(dtype): out = np.empty((3, 384, 768), dtype=dtype)[:, :, ::2] assert preprocess(image, out=out, padding=0.25) is out np.testing.assert_array_equal(out, expected) + + +def test_default_scope_is_global_including_legacy_facade(bundle, monkeypatch): + from mini_trainer import deploy + + monkeypatch.setattr(deploy, "_runtime", lambda: Predictor) + for predictor in (Predictor(bundle), deploy.Predictor(device="cpu", bundle=bundle)._predictor): + assert predictor.preset == "full" + assert predictor.class_list == ["a", "b", "c"] + assert Predictor(bundle, model="europe").class_list == ["a", "b"] + + +def test_stream_window_default_accommodates_large_batches(bundle, monkeypatch): + predictor = Predictor(bundle, batch_size=256) + captured = {} + + def prepare(*args, **kwargs): + captured.update(kwargs) + yield from () + + monkeypatch.setattr(predictor, "prepared_batches", prepare) + assert list(predictor.predict_stream([])) == [] + assert captured["read_window"] == 256 + assert list(predictor.predict_stream([], read_window=1024)) == [] + assert captured["read_window"] == 1024 + + +@pytest.mark.parametrize("embeddings", [False, True]) +def test_cli_streams_ordered_results_and_publishes_only_complete_output(bundle, tmp_path, monkeypatch, embeddings): + import csv + import sys + from types import SimpleNamespace + + from deployment.mambo_deploy import cli + + paths = [tmp_path / "a" / f"{i}.jpg" for i in range(3)] + closed = [] + fail = [False] + + def batches(items, **kwargs): + assert items == paths + assert kwargs == {"topk": 1, "embeddings": embeddings} + try: + for start, size in ((0, 2), (2, 1)): + if fail[0] and start: + raise ValueError("decode failed") + raw, labels, indices = hierarchy(np.tile([3.0, 2.0, 1.0], (size, 1)), [0, 1, 2], CLASSES) + result = Prediction(raw, labels, indices, model_id="fixture", preset="full") + yield (result, np.full((size, 1280), start, dtype=np.float32)) if embeddings else result + finally: + closed.append(True) + + predictor = SimpleNamespace(bundle=SimpleNamespace(classes=CLASSES), predict_stream=batches) + monkeypatch.setattr(cli, "Predictor", lambda *args, **kwargs: predictor) + argv = ["mambo_predict", "-i", *map(str, paths), "-o", str(tmp_path), "--name", "success"] + if embeddings: + argv.append("--embeddings") + monkeypatch.setattr(sys, "argv", argv) + cli.run() + records = json.loads((tmp_path / "success/predictions.json").read_text()) + assert len(records["results"]) == 3 and records["metadata"]["preset"] == "full" + with (tmp_path / "success/mini_metric.csv").open() as stream: + rows = list(csv.DictReader(stream)) + assert [r["filename"] for r in rows[::3]] == list(map(str, paths)) + assert [r["instance_id"] for r in rows[::3]] == ["0", "1", "2"] + assert all(r["correct"] == "1" for r in rows) + if embeddings: + vectors = np.load(tmp_path / "success/embeddings.npy") + assert vectors.shape == (3, 1280) and vectors.dtype == np.float32 + np.testing.assert_array_equal(vectors[:, 0], [0, 0, 2]) + argv[argv.index("success")] = "failed" + fail[0] = True + with pytest.raises(ValueError, match="decode failed"): + cli.run() + assert not (tmp_path / "failed").exists() + assert not list(tmp_path.glob(".mambo-results-*")) + assert len(closed) == 2 diff --git a/tests/releases/test_release_download.py b/tests/releases/test_release_download.py index 3425f82..8ad5b75 100644 --- a/tests/releases/test_release_download.py +++ b/tests/releases/test_release_download.py @@ -53,7 +53,7 @@ def test_packaged_metadata_and_automatic_predictor(tmp_path, monkeypatch): monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) monkeypatch.setattr(download, "urlopen", lambda *a, **k: pytest.fail("metadata should be packaged")) p = Predictor() - assert p.bundle.download and p.preset == "europe" + assert p.bundle.download and p.preset == "full" monkeypatch.setenv("MAMBO_OFFLINE", "1") assert Predictor().bundle.root == p.bundle.root with pytest.raises(FileNotFoundError, match="not cached"): From 24b403ce52046fdb1c759785a7364d38f3795816 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 13:49:50 +0200 Subject: [PATCH 093/221] fix: reuse model assets across deployment metadata revisions --- deployment/mambo_deploy/bundle.py | 10 ++++-- deployment/mambo_deploy/download.py | 19 ++++++++-- dev/releases/mambo_v3/deployment-freeze.md | 5 +++ docs/mambo-integration.md | 18 ++++++++++ tests/releases/test_release_download.py | 40 ++++++++++++++++++++++ 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/deployment/mambo_deploy/bundle.py b/deployment/mambo_deploy/bundle.py index a1edeaf..b96729f 100644 --- a/deployment/mambo_deploy/bundle.py +++ b/deployment/mambo_deploy/bundle.py @@ -5,7 +5,7 @@ import os from pathlib import Path -from .download import fetch_file +from .download import cached_model_file class Bundle: @@ -42,7 +42,13 @@ def file(self, relative): raise ValueError(f"Unlisted bundle file: {relative}") if relative not in self._verified: if not path.exists() and self.download and relative in self.manifest.get("origins", {}): - fetch_file(self.manifest["origins"][relative], path, **item, offline=os.environ.get("MAMBO_OFFLINE") == "1") + cached_model_file( + self.manifest["origins"][relative], + path, + cache=self.root.parent, + **item, + offline=os.environ.get("MAMBO_OFFLINE") == "1", + ) if path.stat().st_size != item["size"]: raise ValueError(f"Bundle size mismatch: {relative}") with path.open("rb") as stream: diff --git a/deployment/mambo_deploy/download.py b/deployment/mambo_deploy/download.py index 771c7d6..81298d2 100644 --- a/deployment/mambo_deploy/download.py +++ b/deployment/mambo_deploy/download.py @@ -3,6 +3,7 @@ import hashlib import json import os +import shutil import tempfile from pathlib import Path from urllib.request import urlopen @@ -43,13 +44,27 @@ def fetch_file(url, destination, *, size, sha256, offline=False): return destination +def cached_model_file(url, destination, *, cache, size, sha256, offline=False): + """Reuse immutable weight bytes across metadata revisions, without symlinks.""" + destination = Path(destination) + blob = Path(cache) / "blobs" / sha256 + fetch_file(url, blob, size=size, sha256=sha256, offline=offline) + destination.parent.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory(prefix=".model-", dir=destination.parent) as temporary: + staged = Path(temporary) / "data" + try: + os.link(blob, staged) + except OSError: + shutil.copyfile(blob, staged) + staged.replace(destination) + + def default_bundle(): """Install small packaged metadata; model files are fetched lazily by Bundle.""" descriptor = json.loads(Path(__file__).with_name("default_bundle.json").read_text()) revision = hashlib.sha256(json.dumps(descriptor, sort_keys=True).encode()).hexdigest()[:16] cache = Path(os.environ.get("MAMBO_CACHE", Path(os.environ.get("XDG_CACHE_HOME", Path.home() / ".cache")) / "mambo")) root = cache.expanduser() / revision - offline = os.environ.get("MAMBO_OFFLINE") == "1" for relative, content in descriptor["metadata"].items(): path = (root / relative).resolve() if not path.is_relative_to(root.resolve()): @@ -59,8 +74,6 @@ def default_bundle(): if path.read_bytes() != data: raise ValueError(f"Cached metadata differs from this release: {path}") continue - if offline: - raise FileNotFoundError("Default bundle is not cached; download once before setting MAMBO_OFFLINE=1") path.parent.mkdir(parents=True, exist_ok=True) with tempfile.NamedTemporaryFile(dir=path.parent, delete=False) as stream: temp = Path(stream.name) diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 7db4937..b60a93f 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -107,3 +107,8 @@ and correction of a generator stub in the new read-window test. Static checks an the required minimal installed training-wheel check passed. The renamed deployment wheel builds; final installed ONNX/native bundle checks remain ahead. No performance or quality evaluation was rerun. + +The automatic model cache now stores verified weight bytes by SHA-256 and reuses +them across metadata revisions (hard links where possible, ordinary copies +otherwise). Offline mode can materialize packaged metadata but still forbids +network downloads. Nine focused cache/download tests pass. diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md index 4d720ae..7a50e51 100644 --- a/docs/mambo-integration.md +++ b/docs/mambo-integration.md @@ -108,3 +108,21 @@ For diagnostics, `stats={}` collects queue/buffer and wait statistics; `device_prefetch=False` disables device staging. These are not routine integration settings. Calls using one predictor share serialized inference; adding caller threads alone does not create concurrent model execution. + +## Versioning and model identity + +The distribution name `mambo-v3` identifies the model generation. Package updates +within that distribution retain the released V3 weights and existing preset +identities; changed weights belong to a new model-generation package. Pin +`mambo-v3==0.3.0` to preserve the adapter implementation too, and retain your +application's resolved runtime dependencies for reproducibility. + +The Python namespace stays `mambo_deploy`. Do not install multiple model-generation +packages or the older `mambo-deploy` candidate in one environment; use separate +environments for comparisons. The `model=` argument selects geographic scope, +not a trained-model release. Result metadata identifies the model and selected +list. Explicit local bundles are an advanced override, not an automatic upgrade. + +Model files are cached by their SHA-256 identity and reused across metadata-only +updates. Copies placed beside ONNX graphs keep bundles relocatable; there is no +runtime package installation or mutable remote "latest model" lookup. diff --git a/tests/releases/test_release_download.py b/tests/releases/test_release_download.py index 8ad5b75..0c3675a 100644 --- a/tests/releases/test_release_download.py +++ b/tests/releases/test_release_download.py @@ -67,3 +67,43 @@ def test_packaged_metadata_and_automatic_predictor(tmp_path, monkeypatch): if relative not in manifest["origins"]: Bundle(p.bundle.root).file(relative) assert Path(download.__file__).with_name("default_bundle.json").exists() + + +@pytest.mark.parametrize("hardlink", [True, False]) +def test_weight_bytes_survive_metadata_revision_offline(tmp_path, monkeypatch, hardlink): + payload = b"same immutable model" + calls = [] + + def get(*args, **kwargs): + calls.append(True) + return io.BytesIO(payload) + + monkeypatch.setattr(download, "urlopen", get) + if not hardlink: + + def deny_link(*args): + raise OSError("cross-filesystem") + + monkeypatch.setattr(download.os, "link", deny_link) + args = dict(cache=tmp_path, size=len(payload), sha256=hashlib.sha256(payload).hexdigest()) + first = tmp_path / "revision-1/models/model.onnx.data" + second = tmp_path / "revision-2/models/model.onnx.data" + download.cached_model_file("https://example.test/model", first, **args) + download.cached_model_file("https://example.test/model", second, **args, offline=True) + assert first.read_bytes() == second.read_bytes() == payload + assert len(calls) == 1 + assert not first.is_symlink() and not second.is_symlink() + assert not list(second.parent.glob(".model-*")) + + +def test_offline_can_materialize_packaged_metadata_without_connecting(tmp_path, monkeypatch): + from deployment.mambo_deploy import Predictor + + monkeypatch.delenv("MAMBO_BUNDLE", raising=False) + monkeypatch.setenv("MAMBO_CACHE", str(tmp_path)) + monkeypatch.setenv("MAMBO_OFFLINE", "1") + monkeypatch.setattr(download, "urlopen", lambda *args, **kwargs: pytest.fail("network used")) + predictor = Predictor() + assert predictor.preset == "full" + with pytest.raises(FileNotFoundError, match="not cached"): + predictor.bundle.profile("onnx") From 0bfb5d7a7ac04afdaa392a8494191d8a160954ac Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 13:57:32 +0200 Subject: [PATCH 094/221] feat: prepare identified MAMBO release artifacts and evidence handoff --- deployment/mambo_deploy/bundle.py | 5 +- deployment/mambo_deploy/default_bundle.json | 8 +- deployment/mambo_deploy/predictor.py | 32 +++---- deployment/pyproject.toml | 2 +- dev/releases/mambo_v3/MODEL_CARD.md | 47 +++++++++++ dev/releases/mambo_v3/NOTICES.md | 34 ++++++++ dev/releases/mambo_v3/build_bundle.py | 19 ++--- dev/releases/mambo_v3/deployment-freeze.md | 32 +++++-- dev/releases/mambo_v3/evidence-policy.md | 54 ++++++++++++ dev/releases/mambo_v3/model-provenance.toml | 32 +++++++ .../mambo_v3/package_download_metadata.py | 25 +++++- dev/releases/mambo_v3/prepare_candidate.py | 84 +++++++++++++++++++ dev/releases/mambo_v3/publication.md | 79 +++++++++++++++++ dev/releases/mambo_v3/ucloud_env/uv.lock | 2 +- docs/mambo-integration.md | 2 +- tests/releases/test_deployment.py | 2 + 16 files changed, 414 insertions(+), 45 deletions(-) create mode 100644 dev/releases/mambo_v3/MODEL_CARD.md create mode 100644 dev/releases/mambo_v3/NOTICES.md create mode 100644 dev/releases/mambo_v3/evidence-policy.md create mode 100644 dev/releases/mambo_v3/model-provenance.toml create mode 100644 dev/releases/mambo_v3/prepare_candidate.py create mode 100644 dev/releases/mambo_v3/publication.md diff --git a/deployment/mambo_deploy/bundle.py b/deployment/mambo_deploy/bundle.py index b96729f..a111ba4 100644 --- a/deployment/mambo_deploy/bundle.py +++ b/deployment/mambo_deploy/bundle.py @@ -12,8 +12,9 @@ class Bundle: def __init__(self, root, *, download=False): self.download = download self.root = Path(root).expanduser().resolve() - with (self.root / "release.json").open() as stream: - self.manifest = json.load(stream) + manifest_bytes = (self.root / "release.json").read_bytes() + self.manifest_sha256 = hashlib.sha256(manifest_bytes).hexdigest() + self.manifest = json.loads(manifest_bytes) if self.manifest.get("schema") != "mambo-release-v1": raise ValueError("Unsupported MAMBO bundle schema") if self.manifest.get("score_semantics") != "hierarchical-leaf-logits-logsumexp-v1": diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index e309b75..72f67c8 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -1,11 +1,13 @@ { "metadata": { "CODE_LICENSE": "Copyright 2026 Asger Svenning\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n", - "MODEL_CARD.md": "# MAMBO_v3 candidate\n\nEfficientNetV2-S; September 2026 UCloud run; 12,632 species. Original FP32 artifacts; no quantization. Native weights and ONNX variants share the vocabulary.\n\nThis is an unpublished consumer release candidate. Training revision/best-epoch provenance, weight/data redistribution notices, full task metrics and cross-OS qualification remain release gates. CODE_LICENSE covers repository code only; it does not assert a license for model weights or source images.\n", + "MODEL_CARD.md": "# MAMBO V3\n\nUnpublished release candidate: EfficientNetV2-S trained on global-lepi in September\n2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon\nIDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary.\nNo quantized model is included. Embeddings have 1,280 dimensions and unit length.\n\nUse the release README for installation, input/output formats and configuration.\nGlobal is the default. Region presets and custom class lists constrain eligible\nspecies; they are permissive occurrence filters, not native-range maps. Taxonomic\nranks are predicted independently. Optional TTA uses `rotation30_pad25_3`.\n\n## Intended use and evidence\n\nLocal moth/butterfly image classification and downstream integration. Both\nFlemming monitoring crops and the original global-lepi test split have completed\nV2/V3, backend and TTA comparisons. Their different domains produce different TTA\nresponses; neither establishes accuracy for every deployment. Regional vocabulary\nand confidence thresholds affect the results. Consult the README's figures and\nlinked evidence for macro metrics, acceptance coverage, support truncation and\ncalibration policy. Laptop and B200 timings have distinct environment/workload\nboundaries and do not establish universal hardware throughput.\n\nThe Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes.\nONNX offers a path to browser and other native-runtime integrations; those require\nmatching preprocessing and are not automatically qualified by Python execution.\nNo complete Windows/macOS/edge-device compatibility claim is made.\n\n## Training and artifact identity\n\nThe checksum-verified training console reports the best model at epoch **30**.\n`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and\ntraining log with immutable hashes and public source URLs. The retained materials\ndo not identify the exact training Git revision or fully establish the upstream\ninitialization lineage. The recorded September 11 checkout is packaging provenance,\nnot a claimed training revision. The trained checkpoint itself is identified and\ncan be loaded without retraining or downloading an initialization model.\n\n`release.json` covers the graph/external-weight files, presets, preprocessing,\nvocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml`\nrecord list construction. Read `NOTICES.md` for code, model and source-data boundaries.\n\n## Publication status\n\nThe model-weight license is awaiting owner designation. The code's MIT license\nmust not be presented as a weight/data license. Do not publish this candidate until\nthat decision and any required initialization notices have been resolved.\n", + "MODEL_PROVENANCE.toml": "schema = \"mambo-model-provenance-v1\"\nmodel_id = \"MAMBO_v3\"\narchitecture = \"EfficientNetV2-S with normalized hierarchical classifier\"\ntraining_run = \"global_lepi_production_w32_1\"\ntraining_started = \"2026-09-10\"\ntraining_finished = \"2026-09-11\"\nbest_epoch = 30\nbest_epoch_source = \"Checksum-verified training/console.log: Best model found at epoch 30\"\nseed = 42\ntraining_epochs = 30\ntraining_world_size = 4\ntraining_source_revision_status = \"Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source.\"\ninitialization_status = \"Training config loads initial_seed42.pt with pretrained=false; upstream initialization lineage is not established by the retained files.\"\npackaging_checkout = \"52954edae5dae31a62ecb639533e6f8573d57055\"\npackaging_checkout_role = \"Original September 11 export/package environment only\"\nweights_license_status = \"Awaiting owner designation; repository MIT license covers code only\"\n\n[checkpoint]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\"\nsha256 = \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n\n[training_log]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log\"\nsha256 = \"d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54\"\n\n[epoch_summary]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv\"\nsha256 = \"be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2\"\n\n[configuration]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml\"\nsha256 = \"a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f\"\n", + "NOTICES.md": "# MAMBO V3 notices\n\n## Repository code\n\nThe deployment adapter and mini_trainer code are distributed under the MIT license\nin `CODE_LICENSE`. This notice does not grant rights to independently licensed\nruntime libraries, model weights, datasets or photographs.\n\n## Model weights — owner decision outstanding\n\nA license for the trained MAMBO V3 weights has not yet been designated in the\nretained release metadata. Public download availability alone is not a license.\nThe model owner must designate the license and confirm any required attribution\nfrom the initialization checkpoint before public release. The current training\nconfiguration loads an earlier local checkpoint; its original initialization\nlineage is not established by that configuration alone.\n\n## Runtime dependencies\n\nPyTorch/torchvision, ONNX Runtime, NumPy, Pillow and optional timm are installed\nseparately by the application's package manager, not vendored in the model bundle.\nTheir distributions carry their own license files and notices. CUDA/cuDNN components\nare optional third-party dependencies with their own terms. Keep dependency notices\nwhen redistributing an environment or container. The release manifest records the\nqualified versions, not a requirement to use one universal environment lock.\n\n## Dataset, taxonomy and photographs\n\nGlobal-lepi metadata and GBIF taxon identifiers informed training and regional\npresets. Training/evaluation photographs and the Flemming dataset are not included\nin this deployment release. Their original source permissions remain separate;\nthis release grants no permission to redistribute those datasets or images.\nPreset files contain taxon IDs and filter definitions, not photographs. Retained\nprivate evaluation inputs must remain outside publication assets.\n", "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", - "README.md": "# MAMBO deployment — release candidate\n\nRun MAMBO with ONNX or PyTorch, on CPU or NVIDIA CUDA. Required model files\ndownload automatically from public ERDA storage on first use and are verified\nbefore caching. This candidate has not been publicly released; use the supplied wheel.\n\n## Quick start\n\nStart with ONNX/CPU for the smallest installation: it needs no training package.\nCreate and activate an environment (or activate an existing one), then install\nthe supplied wheel. Run your script with `python your_script.py` and reuse one\npredictor across calls.\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate\nuv pip install './mambo_deploy-0.3.0-py3-none-any.whl[onnx]'\n```\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor(backend=\"onnx\", device=\"cpu\", model=\"europe\")\nresult = predictor.predict([\"moth.jpg\"])\nprint(result[0].label) # species, genus, family IDs\nprint(result[0].confidence) # confidence at each rank\n```\n\n**Input/output contract**\n\n- **Inputs:** paths, PIL images, or CHW/BCHW arrays/tensors containing uint8 pixels\n or floats in [0,1]. Pass original pixels, not normalized model inputs; transpose\n HWC arrays first. Images become RGB, alpha is discarded, and EXIF rotation is not applied.\n- **Predictions:** CPU results with taxon IDs and confidence in species/genus/family\n order, one result per image. Each rank is predicted independently.\n- **Embeddings:** `result, vectors = predictor.predict_with_embeddings(images)`;\n `vectors` is a float32 NumPy array of shape `[N,1280]` with unit-length rows.\n ONNX requires the bundle's embedding graph.\n\nFor ONNX/CUDA, use `[onnx-cuda]` instead of `[onnx]` and select `device=\"cuda:0\"`.\nThis requests ONNX Runtime’s matching CUDA/cuDNN packages; a compatible NVIDIA\ndriver is still required. To reuse an already provisioned ONNX/CUDA environment,\nadd the base wheel without extras. Runtime versions are selected by your package\nmanager, not replaced during inference. For PyTorch, install the matching\n`mini_trainer` wheel with `uv pip install --torch-backend=auto`, then select\n`backend=\"torch\"` and an explicit device. Requested but unavailable CUDA raises an error; individual\nONNX operators may still execute on CPU. CPU and CUDA are the supported device\nchoices; other OS/accelerator combinations remain unqualified.\n\n\nONNX/CUDA checks each graph once with a synthetic batch-one input when its session\nfirst loads. A GPU-kernel compatibility failure triggers a checked retry with graph\noptimizations disabled, with a warning about potentially lower throughput. It does\nnot switch to CPU. Sessions are reused, so this adds first-use work, not a probe to\nevery prediction. `predictor.onnx_session_info` reports the selected profiles; the\nprobe does not guarantee every later batch-dependent execution path.\n\nModels are cached in `~/.cache/mambo` (or `$XDG_CACHE_HOME/mambo`); set\n`MAMBO_CACHE` to choose another location. After the required model files are cached,\n`MAMBO_OFFLINE=1` prevents downloads. For an explicitly managed, offline bundle,\npass `bundle=\"/path/to/mambo-bundle\"`, `--bundle`, or set `MAMBO_BUNDLE`.\nKeep each ONNX graph beside its `model.onnx.data` file.\n\n## Choose the configuration that matters\n\n**Choose your geographic scope and runtime explicitly.** Start with ONNX/CPU for\nsimple integration, or use your existing PyTorch/CUDA environment. Leave\n`precision=\"auto\"` to select the backend/device's default precision, and keep the\nrecommended recipe when enabling TTA.\n\nLeave TTA off for throughput, or enable `tta=True` when quality matters more:\nexpect roughly **one-third the throughput (about 3× slower)** with the default\nthree-view recipe; the exact cost depends on the workload. Start with the default\nbatch size and worker counts. Tune these on the target machine if speed or memory\nbecomes limiting. Request embeddings or extra candidates only when needed.\n\nFor large collections, call `predict()` on smaller groups and save or discard each\nresult before the next call; lowering `batch_size` alone does not limit the memory\nused to retain results for the whole collection.\n\nPass API option values to `Predictor(...)`; prediction-method calls and CLI-only\noptions are shown explicitly.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `europe` / no override | Prediction scope: selects eligible species and changes confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime dependencies, hardware compatibility and throughput. |\n| `tta=True` | `--tta` | Off; enabling selects `rotation30_pad25_3` | Quality versus compute: three views. [Recipe details](../docs/mambo-tta.md). |\n| `batch_size=` | `--batch-size` | `8` | Throughput and working memory: images per model call, not a total-request memory limit. |\n| `threads=` | `--threads` | `2` | CPU allocation: ONNX runtime threads and the default preparation-worker count; does not set PyTorch model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | CPU preparation concurrency: decoding and transforms can compete with other application work. |\n| `precision=` | `--precision` | `auto` | Compute speed and numerical precision: selects the backend/device's default mode. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Additional output for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Number of candidates ranked independently at each taxonomic level; tuples need not form an ancestral path. |\n| CLI only | `--threshold` | `0` | Acceptance cutoff for `mini_metric.csv`, shared across ranks; JSON predictions remain unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` and the bundle's `PRESETS.md` to choose a list;\nthe [preset catalogue](../docs/model-presets.md) documents exact scope and construction.\nPresets cover species that **can occur** in a region, including introduced species;\nthey are neither native-distribution maps nor exhaustive checklists.\n\n`europe` and `north_europe` preserve legacy lists. The `_v3` alternatives use updated\noccurrence requirements and broader eligibility; newer does not necessarily mean\nmore accurate. Legacy `north_europe` performed better on Flemming. Choose it for\ncomparable northern-European use, not as a universal default for other locations.\nA custom `class_list=[\"GBIF_SPECIES_ID\", ...]` or UTF-8 list file overrides the preset.\nUnknown IDs and empty lists fail; duplicates are removed and model ordering retained.\n\n## Command line and migration\n\nRun once without adding a project dependency:\n\n```sh\nuvx --from './mambo_deploy-0.3.0-py3-none-any.whl[onnx]' mambo_predict \\\n -i moth.jpg --backend onnx --device cpu -M europe --tta -o . --name results\n```\n\nInside the activated environment, use `mambo_predict` directly. If using\n`uv run`, add `--no-sync` to preserve the installed runtime dependencies.\n\nOutputs go to a new `results/` directory: `predictions.json`, `mini_metric.csv`, and\n`embeddings.npy` when `--embeddings` is requested. Directory input is recursive.\nThe main controls above have corresponding CLI flags; use `mambo_predict --help`.\n\nExisting callers can use `mini_trainer.deploy.Predictor` with both wheels installed.\nIt preserves native/CUDA defaults, callable prediction and `class_mask` (`-1` resets\nit), with native result containers/device tensors. The portable API above defaults\nto ONNX/CPU. Both interfaces download the default release when no bundle is supplied.\nDo not use `weights=` as a model-selection control: overrides must match the pinned\nrelease checkpoint. Legacy weights and already-preprocessed inputs need migration;\nembedding dimensions may differ from V2.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](../docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. V2 and single-view V3 reuse earlier runs.\n\n![CPU and GPU throughput by batch size, including the new TTA default](../docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](../docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\nIn-domain UCloud results will be reported separately; the [UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) is ready for qualification.\n", + "README.md": "# MAMBO deployment — release candidate\n\nIdentify moths and butterflies from images, with species, genus and family\npredictions. V3 adds a standalone ONNX option alongside PyTorch: **no training\npackage or GPU is needed for ONNX/CPU**. Both backends use the same API, regional\nlists and output format. The comparisons below show quality and speed against V2,\nincluding CPU, laptop GPU and server GPU measurements.\n\nThis candidate is not yet published; the examples use the supplied release wheels.\nModel files download automatically from public ERDA storage on first use and are\nverified and cached. Reuse one predictor across calls.\n\n## Quick start\n\nCreate an environment, or use your application's existing environment. Python 3.12+\nis required. Install ONNX/CPU to start without a CUDA setup:\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate # Windows PowerShell: .venv\\Scripts\\Activate.ps1\nuv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'\n```\n\n**Python** — supply images directly:\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor() # Global species list, ONNX, CPU\nresult = predictor.predict([\"moth.jpg\", \"butterfly.jpg\"])\nprint(result[0].label) # (species_id, genus_id, family_id)\nprint(result[0].confidence) # confidence for each of those ranks\nrecords = result.to_dict() # list of JSON-serializable records for your application\n```\n\n**CLI** — the same defaults, for files or a directory:\n\n```sh\nmambo_predict -i ./images -o ./output --name predictions\n```\n\nThis creates `output/predictions/predictions.json` and `mini_metric.csv`;\n`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run.\nFor a one-off command without installing into your application environment, replace\n`mambo_predict` with\n`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`.\n\n| Interface | Inputs | Outputs |\n|---|---|---|\n| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. |\n| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. |\n| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. |\n\nFor an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to\nRGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF\norientation is not applied. Predictions at each rank are independent, so the three\nIDs need not form one ancestral path. CSV truth labels are inferred from parent\nfolder names; arbitrary image folders do not supply evaluation ground truth.\n\n## Choose the configuration that matters\n\n**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the\nsimplest dependency footprint and a useful starting point for CPU-only and edge\napplications. For NVIDIA GPU throughput, use PyTorch if it fits your environment,\nor ONNX/CUDA to keep the training package out of your application.\n[Runtime installation and offline use](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md) covers these\nalternatives. Changing runtime does not change the input/output contract.\n\n**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is\nworth roughly 3× lower throughput.** Keep the default recipe. Its benefit is\nimage-domain dependent; the general-photograph comparison below provides context.\n\nKeep `precision=\"auto\"`. Increase `batch_size` only when processing enough images\nto benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet\nyour application's throughput or CPU budget. Request embeddings or extra candidates\nonly when your workflow uses them. No server, dataset metadata or training setup is\nrequired.\n\nPass API settings to `Predictor(...)`, except the prediction methods shown below.\nCLI flags apply to `mambo_predict`.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. |\n| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. |\n| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. |\n| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. |\n| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. |\n| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` to list choices, or read the\n[preset catalogue](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/model-presets.md) for their exact scope and construction.\nPresets include species that **can occur** in a region, including introduced\nspecies; they are neither native-distribution maps nor exhaustive checklists.\nUse `model=\"full\"` if a regional restriction is inappropriate.\n\n`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also\navailable; legacy `north_europe` performed better on Flemming and is recommended\nfor comparable northern-European use. A custom `class_list=[\"GBIF_SPECIES_ID\", ...]`\nor UTF-8 file with one ID per line overrides the preset (`--class-list species.txt`\nin the CLI). Unknown IDs and empty lists fail; duplicates are removed.\n\n### Integrating with V2 applications\n\nThe `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA\ndefaults, callable prediction, `class_mask` and native result containers. It needs\nboth release wheels. New integrations can use the smaller `mambo_deploy` interface\nabove, with CPU results independent of backend. Both download model assets automatically.\n\nRetain the legacy regional preset for comparison, and match species by taxon ID,\nnot numeric index. The V3 vocabulary, scores and embedding width can differ from V2;\nexisting thresholds and stored embeddings are not interchangeable.\n[Migration details](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#moving-from-v2) describe the remaining\ncompatibility boundaries.\n\n### Large image collections\n\nUse streaming for a large collection of paths, consuming results as they arrive:\n\n```python\nfrom contextlib import closing\n\nwith closing(predictor.predict_stream(image_paths)) as batches:\n for result in batches:\n records = result.to_dict()\n # Write records to your database, file or downstream service here.\n```\n\nInput order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs.\nFor in-memory inputs, split large collections into smaller `predict()` requests;\nthat method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits\nmodel calls, not total request memory. [Streaming controls](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#streaming-controls)\nare available if the defaults do not fit your workload.\n\n## Changes from MAMBO V2\n\n- Global (`full`) is now the default scope. Select `europe` or `north_europe` to\n retain those geographic restrictions; the legacy lists remain available.\n- Install the model-generation package **`mambo-v3`**; its Python import remains\n `mambo_deploy`. Maintenance releases of this package retain the V3 trained model.\n Pin the package version for reproducible application builds. Use a separate\n environment for V2 or an older deployment candidate.\n- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU.\n Existing native CLI workflows must specify `--backend torch --device cuda:0`.\n The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults.\n- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and\n streaming output. Raw inputs and result formats are documented above; old\n preprocessed tensors, numeric class positions and embeddings need migration.\n\n### Beyond Python\n\nThe ONNX assets also provide a path to local browser inference with\n[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where\nimages can be processed on the user's device. Existing browser work is recorded\nin the [release roadmap](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work).\nThis Python release does not ship a browser SDK: preprocessing, external weights\nand browser/runtime support still need integration. The same local API or CLI can\nbe embedded in desktop applications, batch jobs and services without a hosted\nprediction service.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. These laptop measurements predate the latest\npipeline improvements and remain a consumer-hardware baseline.\n\n![CPU and GPU throughput by batch size, including the new TTA default](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\n### Complementary in-domain and HPC results\n\nThe original global-lepi test split adds a comparison on general photographs using\nthe global vocabulary. It complements Flemming's deployment-relevant monitoring\ncrops; the image domains and class lists differ, so their absolute scores should\nnot be compared as a controlled domain-effect estimate. The same `mini_metrics`\ncalibration/support policy uses 568,939 reporting images and 63,974 separate\ncalibration images, with both confidence settings evaluated on the reporting split.\n\n![In-domain quality at all ranks, with calibration, support truncation and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-indomain-quality.svg)\n\nV3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces\nin-domain performance, illustrating that its benefit depends on the input domain;\nthis does not override its benefit on the more deployment-relevant Flemming crops.\nSupport >5 changes the class average, not the evaluation rows. Truth classes outside\nthat average represent 1.70% / 0.34% / <0.01% of species/genus/family images without\nthresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete\nmetrics are in the [in-domain evidence](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-indomain-evidence.md).\n\n![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-hpc-current-speed.svg)\n\nThe server comparison retains CPU, GPU request and GPU streaming throughput in\n**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s**\nand ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and\nsmaller-batch results retain their earlier measurements; new request points are\nshown separately rather than joined to older scaling curves. These are measured\napplication rates, not a promise of GPU saturation.\n\n[Timing details and provenance](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-hpc-evidence.md) record measurement\nsettings, memory and repeat ranges. Keep the laptop comparison above when choosing\nfor consumer devices. ONNX's CPU advantage and independence from the training\npackage make it especially relevant when a GPU or the full PyTorch stack is not\nan option; PyTorch remains the faster GPU choice in these measurements.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", @@ -34,6 +36,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3-candidate\",\n \"artifact_revision\": 2,\n \"package_version\": \"0.3.0\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 483,\n \"sha256\": \"2a637d9fc6d0fe5db18848839f97482e4263ce9f30ef8ef16b421fb1ac20d853\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 9929,\n \"sha256\": \"1e0085320a15948df50ed4c0904fe28f4b129ced399a37315ea06a1713d4f969\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 2745,\n \"sha256\": \"c875cfc913ccdd2c491daaecb2b1750935277900e7b9644dca45bf87bb73cab1\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 1858,\n \"sha256\": \"8b9b609e7d908dfecbaebe4f39ace3c889587e573001e5d246615ef828d97ed8\"\n },\n \"NOTICES.md\": {\n \"size\": 1782,\n \"sha256\": \"63695acbd3a1245f69e979ee4ee3dbb602cf10e6964d9e6ff04aa9dfc7eeccb0\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14477,\n \"sha256\": \"ed61d7744f79b849f79f75fe40c84eb31d46179e05d32eb5f66f4202d69b5259\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 5431fc2..3e1b104 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -420,16 +420,24 @@ def _predict(self, x, embeddings=False, topk=1): labels, mappings, topk, - model_id=self.bundle.manifest["model_id"], - backend=self.backend, - preset=self.preset, - class_list_sha256=self.class_list_sha256, - precision=self.effective_precision, - tta=self.tta.name if self.tta else "none", - tta_views=len(self.tta.transforms) if self.tta else 1, + **self._prediction_metadata(), ) return (result, np.concatenate(embedding_batches)) if embeddings else result + def _prediction_metadata(self): + return dict( + model_id=self.bundle.manifest["model_id"], + artifact_revision=self.bundle.manifest.get("artifact_revision"), + bundle_sha256=self.bundle.manifest_sha256, + preprocessing_id=self.bundle.preprocessing["id"], + backend=self.backend, + preset=self.preset, + class_list_sha256=self.class_list_sha256, + precision=self.effective_precision, + tta=self.tta.name if self.tta else "none", + tta_views=len(self.tta.transforms) if self.tta else 1, + ) + def predict(self, x, topk=1): return self._predict(x, topk=topk) @@ -484,15 +492,7 @@ def process(resolve, plan, metadata): worker.submit( resolve, self.hierarchy_plan(self.selected), - dict( - model_id=self.bundle.manifest["model_id"], - backend=self.backend, - preset=self.preset, - class_list_sha256=self.class_list_sha256, - precision=self.effective_precision, - tta=self.tta.name if self.tta else "none", - tta_views=len(views), - ), + self._prediction_metadata(), ) if len(worker.pending) == 2: yield worker.pop() diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index 6dab5af..2bd90b9 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -11,7 +11,7 @@ license-files = ["LICENSE"] [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] -torch = ["mini_trainer[timm]>=0.3.0,<0.4"] +torch = ["mini_trainer>=0.3.0,<0.4"] [project.scripts] mambo_predict = "mambo_deploy.cli:run" diff --git a/dev/releases/mambo_v3/MODEL_CARD.md b/dev/releases/mambo_v3/MODEL_CARD.md new file mode 100644 index 0000000..447a7b6 --- /dev/null +++ b/dev/releases/mambo_v3/MODEL_CARD.md @@ -0,0 +1,47 @@ +# MAMBO V3 + +Unpublished release candidate: EfficientNetV2-S trained on global-lepi in September +2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon +IDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary. +No quantized model is included. Embeddings have 1,280 dimensions and unit length. + +Use the release README for installation, input/output formats and configuration. +Global is the default. Region presets and custom class lists constrain eligible +species; they are permissive occurrence filters, not native-range maps. Taxonomic +ranks are predicted independently. Optional TTA uses `rotation30_pad25_3`. + +## Intended use and evidence + +Local moth/butterfly image classification and downstream integration. Both +Flemming monitoring crops and the original global-lepi test split have completed +V2/V3, backend and TTA comparisons. Their different domains produce different TTA +responses; neither establishes accuracy for every deployment. Regional vocabulary +and confidence thresholds affect the results. Consult the README's figures and +linked evidence for macro metrics, acceptance coverage, support truncation and +calibration policy. Laptop and B200 timings have distinct environment/workload +boundaries and do not establish universal hardware throughput. + +The Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes. +ONNX offers a path to browser and other native-runtime integrations; those require +matching preprocessing and are not automatically qualified by Python execution. +No complete Windows/macOS/edge-device compatibility claim is made. + +## Training and artifact identity + +The checksum-verified training console reports the best model at epoch **30**. +`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and +training log with immutable hashes and public source URLs. The retained materials +do not identify the exact training Git revision or fully establish the upstream +initialization lineage. The recorded September 11 checkout is packaging provenance, +not a claimed training revision. The trained checkpoint itself is identified and +can be loaded without retraining or downloading an initialization model. + +`release.json` covers the graph/external-weight files, presets, preprocessing, +vocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml` +record list construction. Read `NOTICES.md` for code, model and source-data boundaries. + +## Publication status + +The model-weight license is awaiting owner designation. The code's MIT license +must not be presented as a weight/data license. Do not publish this candidate until +that decision and any required initialization notices have been resolved. diff --git a/dev/releases/mambo_v3/NOTICES.md b/dev/releases/mambo_v3/NOTICES.md new file mode 100644 index 0000000..0a28433 --- /dev/null +++ b/dev/releases/mambo_v3/NOTICES.md @@ -0,0 +1,34 @@ +# MAMBO V3 notices + +## Repository code + +The deployment adapter and mini_trainer code are distributed under the MIT license +in `CODE_LICENSE`. This notice does not grant rights to independently licensed +runtime libraries, model weights, datasets or photographs. + +## Model weights — owner decision outstanding + +A license for the trained MAMBO V3 weights has not yet been designated in the +retained release metadata. Public download availability alone is not a license. +The model owner must designate the license and confirm any required attribution +from the initialization checkpoint before public release. The current training +configuration loads an earlier local checkpoint; its original initialization +lineage is not established by that configuration alone. + +## Runtime dependencies + +PyTorch/torchvision, ONNX Runtime, NumPy, Pillow and optional timm are installed +separately by the application's package manager, not vendored in the model bundle. +Their distributions carry their own license files and notices. CUDA/cuDNN components +are optional third-party dependencies with their own terms. Keep dependency notices +when redistributing an environment or container. The release manifest records the +qualified versions, not a requirement to use one universal environment lock. + +## Dataset, taxonomy and photographs + +Global-lepi metadata and GBIF taxon identifiers informed training and regional +presets. Training/evaluation photographs and the Flemming dataset are not included +in this deployment release. Their original source permissions remain separate; +this release grants no permission to redistribute those datasets or images. +Preset files contain taxon IDs and filter definitions, not photographs. Retained +private evaluation inputs must remain outside publication assets. diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py index 95e62e8..a105537 100644 --- a/dev/releases/mambo_v3/build_bundle.py +++ b/dev/releases/mambo_v3/build_bundle.py @@ -10,6 +10,7 @@ from deployment.mambo_deploy.preprocessing import RECIPE from dev.releases.mambo_v3.audit import HERE, sha256 +from dev.releases.mambo_v3.package_download_metadata import distribution_readme def build(source, destination): @@ -85,7 +86,7 @@ def write_json(relative, data): write_json("presets.json", regions) shutil.copyfile(HERE / "preset-definitions.toml", root / "PRESET_DEFINITIONS.toml") shutil.copyfile(HERE / "preset-updates.toml", root / "PRESET_UPDATES.toml") - shutil.copyfile(HERE.parents[2] / "deployment/README.md", root / "README.md") + (root / "README.md").write_text(distribution_readme()) shutil.copyfile(HERE.parents[2] / "LICENSE", root / "CODE_LICENSE") lines = [ "# Presets", @@ -101,13 +102,9 @@ def write_json(relative, data): ] lines += ["", "Exact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.", ""] (root / "PRESETS.md").write_text("\n".join(lines)) - (root / "MODEL_CARD.md").write_text( - "# MAMBO_v3 candidate\n\nEfficientNetV2-S; September 2026 UCloud run; 12,632 species. " - "Original FP32 artifacts; no quantization. Native weights and ONNX variants share the vocabulary.\n\n" - "This is an unpublished consumer release candidate. Training revision/best-epoch provenance, " - "weight/data redistribution notices, full task metrics and cross-OS qualification remain release gates. " - "CODE_LICENSE covers repository code only; it does not assert a license for model weights or source images.\n" - ) + for filename in ("MODEL_CARD.md", "NOTICES.md"): + shutil.copyfile(HERE / filename, root / filename) + shutil.copyfile(HERE / "model-provenance.toml", root / "MODEL_PROVENANCE.toml") profiles = { "torch": {"model": "models/pytorch/best.pt", "files": ["models/pytorch/best.pt"]}, "onnx": {"model": "models/onnx/model.onnx", "files": ["models/onnx/model.onnx", "models/onnx/model.onnx.data"]}, @@ -118,9 +115,11 @@ def write_json(relative, data): } manifest = { "schema": "mambo-release-v1", - "model_id": "MAMBO_v3-candidate", - "artifact_revision": 2, + "model_id": "MAMBO_v3", + "artifact_revision": 3, "package_version": "0.3.0", + "distribution": "mambo-v3", + "default_preset": "full", "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", "profiles": profiles, "embedding": {"dimension": 1280, "stage": "normalized preclassification"}, diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index b60a93f..ece9da7 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -37,7 +37,7 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me Implemented integration decisions: the `mambo-v3` distribution alone owns `mambo_predict`; API/CLI default to global; CLI writes batches incrementally and publishes only complete outputs; the streaming read-window default grows with - batch size; the native extra includes `timm`. Arrays retain explicit CHW input + batch size; the native extra selects the matching training-package series. Arrays retain explicit CHW input to avoid guessing ambiguous layouts. These changes need final installed-bundle qualification below. Retain V2 entry-point and format compatibility where promised; distinguish that @@ -54,11 +54,12 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me rather than erasing their provenance. Preserve CPU/GPU, request/streaming and V2/V3 comparison categories; update only measured values, and never imply older CPU/laptop or smaller-batch results were rerun. -3. **Refresh candidate metadata once documentation settles.** The checked-in - `deployment/mambo_deploy/default_bundle.json` embeds an older README and model - card. The card still describes full task metrics as outstanding. Update the - builder's card text and regenerate with the existing `build_bundle.py` and - `package_download_metadata.py` workflows. Verify preset files, source URLs, +3. **Refresh candidate metadata after any final owner decisions.** The checked-in + descriptor now embeds the current README, maintained model card, notices and + verified epoch/checkpoint provenance. Model identity is `MAMBO_v3`, artifact + revision 3, distribution `mambo-v3` and default preset `full`. The model-weight + license and initialization lineage remain explicitly unresolved. Regenerate + with `build_bundle.py` and `package_download_metadata.py` after resolving them. Verify preset files, source URLs, all file hashes, and version/model/artifact identities. Documentation changes alter the descriptor-derived cache revision; record the final revision rather than repeatedly regenerating it during editorial work. Ensure links work from @@ -73,9 +74,9 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me throughput or hardware campaign without a concrete compatibility failure. 5. **Record the freeze manifest.** Capture source commit, wheel hashes, bundle revision/hashes, versions, tested runtime environments, known limitations and - publication/rollback assets. Confirm training revision/best-epoch provenance - and weight/data redistribution notices, which remain open in the current model - card. Qualify only the OS/runtime combinations actually checked; additional OS + publication/rollback assets. The verified training log confirms best epoch 30; the exact training Git + revision is absent from the retained checkpoint/config/log. Do not substitute + packaging-time revision. Resolve weight-license and initialization notices. Qualify only the OS/runtime combinations actually checked; additional OS support is not implied. Tagging, uploading and promotion are separate from preparing these reviewable assets. @@ -112,3 +113,16 @@ The automatic model cache now stores verified weight bytes by SHA-256 and reuses them across metadata revisions (hard links where possible, ordinary copies otherwise). Offline mode can materialize packaged metadata but still forbids network downloads. Nine focused cache/download tests pass. + +## Candidate assembly + +[Publication handoff](publication.md) describes the prepared artifacts and the +separate human publication step. `prepare_candidate.py` builds only local outputs +from a clean committed checkout. [Evidence policy](evidence-policy.md) defines +what subsequent releases retain and when older results can be reused. + +`model-provenance.toml` records checksum-verified console and epoch-summary sources. +The log is 60,812,963 bytes (retrieved in full after a truncated first read was +correctly rejected by its checksum). It records best epoch 30. Weight licensing +and upstream initialization attribution require owner input; questions are pending. +No missing source identity has been invented. diff --git a/dev/releases/mambo_v3/evidence-policy.md b/dev/releases/mambo_v3/evidence-policy.md new file mode 100644 index 0000000..57a68ae --- /dev/null +++ b/dev/releases/mambo_v3/evidence-policy.md @@ -0,0 +1,54 @@ +# Reusable MAMBO release evidence + +This release establishes a retained baseline, not an immutable evaluation policy. +Future improvements must receive an evaluation revision and a short explanation in +that release's README/changelog. Never relabel old measurements as newly collected. + +## What each comparison must identify + +Record the trained checkpoint/graph hashes; adapter version/source commit; complete +bundle hash; ordered vocabulary and selected-list hash; preprocessing, score and +TTA recipe; effective precision/backend/provider; embeddings on/off; dataset and +ordered sample identities; reporting/calibration split identities; metric package +revision and options; rank and all/known-truth policy; support threshold and class +intersection rule. For timing also record hardware, runtime/dependency versions, +thread/worker counts, batch, image bank, warmup, repetition method, measurement +boundary and memory method. Keep failures and unqualified configurations visible. + +## Retention and reuse + +Retain per-image truth, prediction, confidence and sample identity at all ranks, +per-class metrics/support, calibrated thresholds, aggregate metrics, raw timing +observations and environment/provenance records. Keep restricted data and original +photographs out of public release assets. Hashes identify retained inputs; they do +not imply that another developer has permission or access to those inputs. + +Existing prediction/confidence files permit many metric, calibration and support +policy changes without running the old model again. A different class-list mask, +TTA recipe or preprocessing cannot generally be reconstructed from top-1 outputs; +those changes need retained richer scores or another inference run. Do not promise +that all future comparisons are possible from the current compact predictions. + +Maintain a fixed historical comparison alongside any improved policy, or recompute +old and new metrics from retained predictions under one new revision. Do not pool +incompatible reporting populations, class-support averages or timing protocols. +On a new hardware environment, one reference-model measurement can anchor a new +comparison without requiring every previous model to run again. Historical speed +numbers remain explicitly tied to their original environment. + +## Current baseline + +- `docs/assets/mambo-promoted-tail.json` and associated quality/threshold evidence: + Flemming, legacy northern Europe, reporting/calibration separation, both confidence + settings, all ranks and full/support >5 macro metrics. +- `docs/assets/mambo-indomain-support.json` and threshold/tail artifacts: + original global-lepi test population, global vocabulary, analogous metric policy. +- `docs/assets/mambo-promoted-speed.json`: laptop timing and environment evidence. +- `docs/assets/mambo-indomain-speed.csv` and campaign metadata: retained EPYC and + earlier B200 request comparisons, including V2. +- `docs/assets/mambo-hpc-current-speed.csv` and provenance: latest B200 request and + streaming observations. These replace only corresponding measured points. + +The public evidence pages link complete tables and reproducible report commands. +The publication preparation manifest inventories the linked asset bytes; restricted +per-image inputs remain in the retained local/UCloud archives and are not bundled. diff --git a/dev/releases/mambo_v3/model-provenance.toml b/dev/releases/mambo_v3/model-provenance.toml new file mode 100644 index 0000000..ca455cd --- /dev/null +++ b/dev/releases/mambo_v3/model-provenance.toml @@ -0,0 +1,32 @@ +schema = "mambo-model-provenance-v1" +model_id = "MAMBO_v3" +architecture = "EfficientNetV2-S with normalized hierarchical classifier" +training_run = "global_lepi_production_w32_1" +training_started = "2026-09-10" +training_finished = "2026-09-11" +best_epoch = 30 +best_epoch_source = "Checksum-verified training/console.log: Best model found at epoch 30" +seed = 42 +training_epochs = 30 +training_world_size = 4 +training_source_revision_status = "Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source." +initialization_status = "Training config loads initial_seed42.pt with pretrained=false; upstream initialization lineage is not established by the retained files." +packaging_checkout = "52954edae5dae31a62ecb639533e6f8573d57055" +packaging_checkout_role = "Original September 11 export/package environment only" +weights_license_status = "Awaiting owner designation; repository MIT license covers code only" + +[checkpoint] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" +sha256 = "174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a" + +[training_log] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log" +sha256 = "d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54" + +[epoch_summary] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv" +sha256 = "be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2" + +[configuration] +url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" +sha256 = "a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f" diff --git a/dev/releases/mambo_v3/package_download_metadata.py b/dev/releases/mambo_v3/package_download_metadata.py index cf37a90..fbfdd6a 100644 --- a/dev/releases/mambo_v3/package_download_metadata.py +++ b/dev/releases/mambo_v3/package_download_metadata.py @@ -3,11 +3,33 @@ import argparse import hashlib import json +import re from pathlib import Path from deployment.mambo_deploy.bundle import Bundle +def distribution_readme(ref="MAMBO_v3"): + """Keep documentation links meaningful in PyPI metadata and extracted bundles.""" + root = Path(__file__).resolve().parents[3] + readme = root / "deployment/README.md" + + def link(match): + prefix, target = match.groups() + if "://" in target or target.startswith("#"): + return match.group(0) + filename, separator, anchor = target.partition("#") + relative = (readme.parent / filename).resolve().relative_to(root).as_posix() + base = ( + "https://raw.githubusercontent.com/asgersvenning/mini_trainer/" + if prefix.startswith("!") + else "https://github.com/asgersvenning/mini_trainer/blob/" + ) + return f"{prefix}({base}{ref}/{relative}{separator}{anchor})" + + return re.sub(r"(!?\[[^\]]*\])\(([^)]+)\)", link, readme.read_text()) + + def package(source, output): bundle = Bundle(source) metadata = {} @@ -15,8 +37,7 @@ def package(source, output): if relative not in bundle.manifest["origins"]: metadata[relative] = bundle.file(relative).read_text() # Ship current integration guidance, not the README frozen in the local bundle. - readme = Path(__file__).resolve().parents[3] / "deployment/README.md" - metadata["README.md"] = readme.read_text() + metadata["README.md"] = distribution_readme() data = metadata["README.md"].encode() bundle.manifest["files"]["README.md"] = {"size": len(data), "sha256": hashlib.sha256(data).hexdigest()} metadata["release.json"] = json.dumps(bundle.manifest, indent=2) + "\n" diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py new file mode 100644 index 0000000..840198c --- /dev/null +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -0,0 +1,84 @@ +"""Prepare local release artifacts and an inventory. Never upload, tag or publish.""" + +import argparse +import hashlib +import json +import shutil +import subprocess +import tarfile +import tempfile +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.build_bundle import build +from dev.releases.mambo_v3.package_download_metadata import distribution_readme, package + +ROOT = Path(__file__).resolve().parents[3] +HERE = Path(__file__).resolve().parent + + +def digest(path): + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def prepare(source, output): + if output.exists(): + raise FileExistsError(f"Choose a new output directory: {output}") + if subprocess.check_output(["git", "status", "--porcelain", "--untracked-files=no"], cwd=ROOT).strip(): + raise RuntimeError("Commit tracked release changes before preparing an identified candidate") + commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + output.mkdir(parents=True) + bundle = output / "mambo-v3-bundle" + build(source, bundle) + dist = output / "dist" + dist.mkdir() + # Stage just the deployment project; no caches, experiments or training data. + with tempfile.TemporaryDirectory(prefix="mambo-wheel-") as directory: + stage = Path(directory) + for name in ("pyproject.toml", "LICENSE"): + shutil.copyfile(ROOT / "deployment" / name, stage / name) + shutil.copytree(ROOT / "deployment/mambo_deploy", stage / "mambo_deploy", ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) + (stage / "README.md").write_text(distribution_readme()) + package(bundle, stage / "mambo_deploy/default_bundle.json") + subprocess.run(["uv", "build", "--project", str(stage), "--wheel", "--sdist", "--out-dir", str(dist)], check=True) + subprocess.run(["uv", "build", "--wheel", "--out-dir", str(dist)], cwd=ROOT, check=True) + (output / "RELEASE_README.md").write_text(distribution_readme()) + for name in ("publication.md", "evidence-policy.md", "model-provenance.toml"): + shutil.copyfile(HERE / name, output / name) + evidence = output / "evidence" + evidence.mkdir() + # Public, compact evidence already committed; never sweep local-evidence inputs. + tracked = subprocess.check_output(["git", "ls-files", "docs/assets/mambo-*"], cwd=ROOT, text=True).splitlines() + for relative in tracked: + source_file = ROOT / relative + if source_file.suffix in {".json", ".csv", ".svg"}: + shutil.copyfile(source_file, evidence / source_file.name) + archive = output / "mambo-v3-bundle.tar.gz" + with tarfile.open(archive, "w:gz") as stream: + stream.add(bundle, arcname=bundle.name) + manifest = { + "schema": "mambo-prepared-release-v1", + "source_commit": commit, + "distribution": "mambo-v3", + "package_version": tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"]["version"], + "model_id": "MAMBO_v3", + "publication_performed": False, + "qualification": "Pending final installed-artifact checks; see qualification records alongside this manifest", + "owner_decisions": ["Model-weight license", "Initialization attribution/lineage"], + "files": {}, + } + for path in sorted(output.rglob("*")): + if path.is_file(): + manifest["files"][path.relative_to(output).as_posix()] = {"size": path.stat().st_size, "sha256": digest(path)} + (output / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + (output / "SHA256SUMS").write_text("".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items())) + print(output / "release-candidate.json") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source", type=Path, required=True, help="Verified input inventory directory") + parser.add_argument("--output", type=Path, required=True, help="New local artifact directory") + args = parser.parse_args() + prepare(args.source.resolve(), args.output.resolve()) diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md new file mode 100644 index 0000000..76a4602 --- /dev/null +++ b/dev/releases/mambo_v3/publication.md @@ -0,0 +1,79 @@ +# MAMBO V3 publication handoff + +**Preparation only. No command in this document has published this release.** +The package target is `mambo-v3==0.3.0`; the model tag target is `MAMBO_v3`. +The Python import remains `mambo_deploy`. A future generation gets a separate +package, so upgrading this package cannot select a different trained model. + +## Local candidate + +From a clean, committed release checkout: + +```sh +.venv/bin/python -m dev.releases.mambo_v3.prepare_candidate \ + --source local-evidence/mambo-v3 \ + --output local-evidence/mambo-v3-release-candidate +``` + +The command creates a relocatable model bundle and archive, standalone deployment +wheel and source distribution, matching training wheel, release README, public +comparison evidence, checksums and source-commit inventory. It never tags or uploads. +The output directory must be new. A failed preparation has no completion manifest; +inspect the failure, then use a fresh destination. The inventory is not a claim that +qualification or owner decisions have passed. + +## Before any publication + +- Resolve the model-weight license and initialization notices in `NOTICES.md`, + `MODEL_CARD.md` and `model-provenance.toml`. Training epoch 30 is verified; the + packaging checkout must not be substituted for an unknown training Git revision. +- Qualify these exact installed artifacts, record wheel/bundle hashes and actual + runtime versions, and verify the README examples and single CLI owner. +- Confirm PyPI ownership/availability of `mambo-v3` and access to publish the matching + `mini_trainer` dependency. This cannot be assumed from local package construction. +- Review the concrete source commit, release notes/changelog, artifacts, documented + limitations, model notices and validation record. Do not overwrite old model assets. + +## Intended distribution + +PyPI hosts the small Python package; GitHub Releases is the discovery/migration +entry point and can attach wheels and the evidence archive. Existing immutable +ERDA URLs provide automatic verified downloads of the standard model weights. +The relocatable bundle archive is an optional offline download; its size/location +should be checked before selecting a GitHub versus ERDA attachment. + +After approval, a human publisher can create the `MAMBO_v3` tag at the reviewed +commit, publish the exact built distributions, upload any new offline bundle under +an immutable path, and attach `RELEASE_README.md`, `SHA256SUMS` and the artifact +manifest. Use the organization's normal authenticated publishing process; no tokens +or credentials belong in this repository. Test downloading the published assets +and compare their hashes before announcing the release or updating default pointers. + +The prepared README uses links to the planned `MAMBO_v3` tag, so those links become +publicly resolvable only after the reviewed tag exists. Do not silently retarget them +to a moving branch. Review the GitHub-rendered README/figures before announcement. + +## Intended consumer commands after publication + +```sh +uv venv --python 3.13 .venv +source .venv/bin/activate +uv pip install 'mambo-v3[onnx]==0.3.0' +mambo_predict -i images --name results +``` + +Or an isolated CLI: `uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i images`. +Native users can install `mambo-v3[torch]==0.3.0` with an explicitly selected PyTorch +backend and pass `--backend torch --device cuda:0`. Offline users install the +provided wheels/dependencies and supply the extracted bundle with `--bundle`. +No repository checkout or dataset metadata is required for these consumer paths. + +## Rollback and maintenance + +Retain MAMBO V2 and its documented pinned environment/assets unchanged. If V3 needs +to be withdrawn, stop recommending the affected package version; preserve immutable +assets for existing pins and publish a corrective version rather than replacing +bytes. Applications can revert their environment lock or switch to their retained +V2 environment; no input-image migration is needed. Do not reuse V3 embeddings or +confidence thresholds with V2. Keeping both runtimes in separate environments avoids +CLI/import conflicts and makes rollback a deliberate application decision. diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock index 0f7ada6..a9c683a 100644 --- a/dev/releases/mambo_v3/ucloud_env/uv.lock +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -448,7 +448,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "mini-trainer", extras = ["timm"], marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, + { name = "mini-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, { name = "numpy", specifier = ">=2.4" }, { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md index 7a50e51..44910fe 100644 --- a/docs/mambo-integration.md +++ b/docs/mambo-integration.md @@ -13,7 +13,7 @@ locally until publication. Choose one runtime installation: |---|---|---| | CPU, without PyTorch | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | | NVIDIA GPU, without the training package | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx-cuda]'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | -| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl[timm]' ./mambo_v3-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | +| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl' ./mambo_v3-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | For an environment with ONNX Runtime already provisioned, install the base `mambo_deploy` wheel without extras. Do not install CPU and GPU ONNX Runtime diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 981b9c0..518c9e5 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -109,6 +109,8 @@ def fake_backend(images, embeddings): assert len(result) == 5 and vectors.shape == (5, 1280) assert result[0].label == ("c", "g1", "f0") assert result[0].confidence == (1.0, 1.0, 1.0) + assert result.metadata["bundle_sha256"] == hashlib.sha256((bundle / "release.json").read_bytes()).hexdigest() + assert result.metadata["preprocessing_id"] == RECIPE["id"] with pytest.raises(ValueError, match="No images"): predictor.predict([]) From 7553580e1a04a1d5be2f000ec9bfb572d72ebcfc Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 14:07:07 +0200 Subject: [PATCH 095/221] docs: record installed release qualification and remaining owner decisions --- dev/releases/mambo_v3/build_presets.py | 2 +- .../mambo_v3/check_download_install.py | 56 +++++++++++++++++++ dev/releases/mambo_v3/deployment-freeze.md | 14 +++++ dev/releases/mambo_v3/final-qualification.md | 38 +++++++++++++ dev/releases/mambo_v3/prepare_candidate.py | 5 +- docs/mambo-deployment-defaults.md | 2 +- docs/mambo-deployment-evidence.md | 2 +- docs/model-presets.md | 2 +- docs/ucloud-model-release-roadmap.md | 7 ++- 9 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 dev/releases/mambo_v3/check_download_install.py create mode 100644 dev/releases/mambo_v3/final-qualification.md diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 5c736e0..59ac7fe 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -156,7 +156,7 @@ def build(metadata, evidence_root, write=False): "Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, " "and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty.", "", - "`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. " + "`europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). " "Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. " "Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; " "that equivalence does not establish equivalence at the lower threshold, so they are not silently added. " diff --git a/dev/releases/mambo_v3/check_download_install.py b/dev/releases/mambo_v3/check_download_install.py new file mode 100644 index 0000000..d160308 --- /dev/null +++ b/dev/releases/mambo_v3/check_download_install.py @@ -0,0 +1,56 @@ +"""Check the installed default model download, global scope, embeddings and offline reuse. + +Run with a fresh MAMBO_CACHE: python -I check_download_install.py IMAGE OUTPUT_JSON. +""" + +import hashlib +import importlib.metadata +import json +import os +import sys +from pathlib import Path + +import numpy as np +from mambo_deploy import Predictor, download + +image, output = map(Path, sys.argv[1:]) +urls = [] +original = download.urlopen + + +def fetch(url, **kwargs): + urls.append(url) + return original(url, **kwargs) + + +download.urlopen = fetch +predictor = Predictor(batch_size=2) +assert predictor.preset == "full" +plain = predictor.predict(image) +embedded, vectors = predictor.predict_with_embeddings(image) +assert plain.labels == embedded.labels +assert vectors.shape == (1, 1280) and np.isfinite(vectors).all() +np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) +os.environ["MAMBO_OFFLINE"] = "1" + + +def deny(*args, **kwargs): + raise AssertionError("offline request attempted a download") + + +download.urlopen = deny +second = Predictor() +assert second.predict(image).labels == plain.labels +report = { + "automatic_download": True, + "urls": urls, + "offline_reuse": True, + "default_scope": predictor.preset, + "model_id": predictor.bundle.manifest["model_id"], + "bundle_sha256": predictor.bundle.manifest_sha256, + "image_sha256": hashlib.sha256(image.read_bytes()).hexdigest(), + "embeddings_shape": list(vectors.shape), + "packages": {n: importlib.metadata.version(n) for n in ("mambo-v3", "onnxruntime", "numpy", "pillow")}, +} +output.write_text(json.dumps(report, indent=2) + "\n") +print("PASS: actual public downloads, global defaults, embeddings and offline reuse") diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index ece9da7..433211f 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -126,3 +126,17 @@ The log is 60,812,963 bytes (retrieved in full after a truncated first read was correctly rejected by its checksum). It records best epoch 30. Weight licensing and upstream initialization attribution require owner input; questions are pending. No missing source identity has been invented. + +## Final installed candidate + +The [installed-candidate record](final-qualification.md) now covers clean ONNX CPU, +read-only offline API/CLI with TTA/embeddings, actual automatic ERDA downloads and +offline reuse, native CPU, and native/ONNX laptop CUDA. Installed package payloads +were compared with the built wheels; the two-package install has one CLI owner. +No performance/quality campaign was rerun. Runtime source is `0bfb5d7`. + +Artifacts are prepared in `local-evidence/mambo-v3-release-candidate/`; publication +remains prohibited. Model-weight licensing and initialization attribution are +pending owner decisions. Training source revision is explicitly unknown in the +retained materials. After those decisions, refresh final notices/metadata and the +artifact inventory; do not substitute a historical checkout or invent permission. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md new file mode 100644 index 0000000..3adb3c3 --- /dev/null +++ b/dev/releases/mambo_v3/final-qualification.md @@ -0,0 +1,38 @@ +# MAMBO V3 installed-candidate qualification + +25 September 2026. Prepared runtime source: `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`. No publication, tag or public pointer change was performed. + +Local artifacts: `local-evidence/mambo-v3-release-candidate/`. The directory contains deployment wheel/source distribution, matching training wheel, a 406 MiB compressed offline bundle, public evidence and a complete artifact inventory. Qualifications are retained in its `qualification/` directory. + +## Verified boundaries + +| Check | Evidence | +|---|---| +| Clean ONNX-only install | Python 3.13.7, ONNX Runtime 1.30.0, NumPy 2.5.3, Pillow 12.3.0; torch and mini_trainer absent. | +| Offline and relocation | Read-only relocated bundle, Python socket connections blocked, prediction/embedding API and streaming CLI with default TTA; bundle bytes unchanged. | +| Automatic downloads | Installed global-default predictor retrieved public ERDA assets, produced predictions and unit embeddings, then reused them with downloads prohibited. | +| Native CPU | Installed PyTorch 2.14.0+cu130; four real images, global/regional/custom lists, prediction and embedding modes. | +| Laptop CUDA | RTX 3080 Ti Laptop; installed Torch 2.14.0+cu130 and ORT GPU 1.30.0; same four-image contracts with default TTA. Both ONNX graphs used optimized profiles without failed probes. | +| CLI ownership | With both release wheels installed, only mambo-v3 registers mambo_predict, targeting mambo_deploy.cli:run. | +| Installed bytes | All installed wheel payload files except installer-rewritten RECORD match the prepared wheel archive bytes. | +| Source contracts | Global defaults, streaming window, incremental output ordering, embedding file shape, error cleanup, cache/offline behavior and output provenance are covered by focused tests. | +| Packaging/static | Minimal installed training-wheel check passed; standalone wheel and sdist built; Ruff/format and import contracts passed. | + +## Artifact identities + +| Artifact | SHA-256 | +|---|---| +| `mambo_v3-0.3.0-py3-none-any.whl` | `684b4f12bb3183390ccbbf0b3f510bef54c3ded08c4e0cec64a77f16d4e3efac` | +| `mini_trainer-0.3.0-py3-none-any.whl` | `0cf47254f962803b786c50310ca4ee40fe4710beaa0a9534386b73cd08f6883e` | + +The manifest hashes the expanded bundle, archive, wheels, source distribution and public evidence. `qualification/validation.json` binds the test records to the installed wheel identities. Qualification report hashes are retained there; raw input paths remain in local evidence only. + +## Scope and remaining decisions + +These are execution and packaging checks, not new accuracy or speed experiments. Existing Flemming, global-lepi, laptop and B200 evidence remains the source for published model comparisons. Four images do not establish general accuracy, embedding quality or cross-platform correctness. Windows/macOS and other accelerators have not been newly qualified. + +The checkpoint and best epoch 30 are verified. The retained training material does not identify the exact training Git revision; the documented packaging checkout is not a substitute. The initialization checkpoint lineage and required attribution remain an owner question. A model-weight license is also awaiting designation. These are explicit finalization blockers, not grounds to alter the validated runtime or rerun the performance campaign. + +The preset row-count policy remains the documented candidate rule (3 regional / 25 global for updated lists, legacy membership unchanged). Final packaging must make its selected status explicit without changing membership or silently deduplicating observations. + +Final owner-driven documentation/notice changes will require refreshed bundle metadata and artifact hashes. Reuse these runtime checks for byte-identical code and weights; verify the rebuilt metadata/installation boundary instead of rerunning model evaluation. diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py index 840198c..89ad37d 100644 --- a/dev/releases/mambo_v3/prepare_candidate.py +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -72,7 +72,10 @@ def prepare(source, output): if path.is_file(): manifest["files"][path.relative_to(output).as_posix()] = {"size": path.stat().st_size, "sha256": digest(path)} (output / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") - (output / "SHA256SUMS").write_text("".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items())) + (output / "SHA256SUMS").write_text( + "".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items()) + + f"{digest(output / 'release-candidate.json')} release-candidate.json\n" + ) print(output / "release-candidate.json") diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 1ed6d48..2331b31 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -54,7 +54,7 @@ but Flemming contains no examples of those additions. Their recognition benefit is therefore unmeasured here. Legacy combines better measured discrimination with backwards compatibility; updated membership remains an explicit broader option. This is a northern-Europe recommendation, not a change to the API's legacy -`europe` default. See [geographic definitions](model-presets.md). +historical `europe` default; the final V3 API/CLI defaults to `full`. See [geographic definitions](model-presets.md). ![Northern-Europe comparison at all three ranks](assets/mambo-defaults-ranks-all.svg) diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md index 2d80bd0..8392f67 100644 --- a/docs/mambo-deployment-evidence.md +++ b/docs/mambo-deployment-evidence.md @@ -98,7 +98,7 @@ summarizes global → Europe → northern Europe across pipelines and ranks usin the earlier padded-scale TTA; the new recipe has been fully evaluated only for northern Europe. We recommend legacy `north_europe` here: the updated list adds 222 species but no Flemming species coverage, and lowers measured accuracy/F1. It remains available -as `north_europe_v3` for broader eligibility; the API default stays `europe`. +as `north_europe_v3` for broader eligibility; the V3 API/CLI default is now global (`full`). Speed remains **images per second**, measured end to end on an i7-12800H / RTX 3080 Ti Laptop, with four preparation/runtime CPU threads. CPU uses FP32. diff --git a/docs/model-presets.md b/docs/model-presets.md index 00d3708..d2a2c04 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -10,7 +10,7 @@ Each geographic preset applies the minimum row count shown below. Counts use all In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the proposed global minimum of 25. Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty. -`europe` and `north_europe` preserve MAMBO_v2 membership and the default remains legacy Europe. Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; updated membership remains an explicit broader option. +`europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; updated membership remains an explicit broader option. ## Presets diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 507ef97..52e8425 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -210,10 +210,11 @@ Produce a compact release inventory before changing inference behavior: revision and manifest schema separate identities. An artifact repair may create a new revision; it must not replace bytes behind a published version. -Retain Europe as the default for the successor's MAMBO compatibility -interface, matching MAMBO_v2; make `full` and `north_europe` explicit choices. +The V3 API and CLI default to global (`full`), an explicit change from MAMBO_v2. +Keep `europe` and `north_europe` as explicit choices with their legacy membership. Version aliases within a release. Do not silently redirect old pinned consumers -to new weights. For the new deployment API, prefer explicit model-bundle selection. +to new weights. Use the model-generation package `mambo-v3` for automatic verified downloads; +explicit bundles remain available for managed/offline integration. Store regional lists with provenance and hashes, and disclose excluded true labels. **Done when:** immutable candidate and baseline inventories exist, compatibility From d6d19e0f157a0c17b2b6a735b3f6c638f62c060d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 14:17:21 +0200 Subject: [PATCH 096/221] fix: finalize preset policy and require real download qualification --- deployment/mambo_deploy/default_bundle.json | 8 +++---- dev/releases/mambo_v3/README.md | 10 ++++---- dev/releases/mambo_v3/build_bundle.py | 3 ++- dev/releases/mambo_v3/build_presets.py | 13 +++++----- .../mambo_v3/check_download_install.py | 5 ++++ dev/releases/mambo_v3/deployment-freeze.md | 24 ++++++++++++++++--- dev/releases/mambo_v3/final-qualification.md | 4 +++- dev/releases/mambo_v3/preset-definitions.toml | 2 +- dev/releases/mambo_v3/preset-manifest.toml | 4 ++-- docs/mambo-v3-evaluation.md | 2 +- docs/model-presets.md | 4 ++-- 11 files changed, 53 insertions(+), 26 deletions(-) diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index 72f67c8..1323224 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -4,13 +4,13 @@ "MODEL_CARD.md": "# MAMBO V3\n\nUnpublished release candidate: EfficientNetV2-S trained on global-lepi in September\n2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon\nIDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary.\nNo quantized model is included. Embeddings have 1,280 dimensions and unit length.\n\nUse the release README for installation, input/output formats and configuration.\nGlobal is the default. Region presets and custom class lists constrain eligible\nspecies; they are permissive occurrence filters, not native-range maps. Taxonomic\nranks are predicted independently. Optional TTA uses `rotation30_pad25_3`.\n\n## Intended use and evidence\n\nLocal moth/butterfly image classification and downstream integration. Both\nFlemming monitoring crops and the original global-lepi test split have completed\nV2/V3, backend and TTA comparisons. Their different domains produce different TTA\nresponses; neither establishes accuracy for every deployment. Regional vocabulary\nand confidence thresholds affect the results. Consult the README's figures and\nlinked evidence for macro metrics, acceptance coverage, support truncation and\ncalibration policy. Laptop and B200 timings have distinct environment/workload\nboundaries and do not establish universal hardware throughput.\n\nThe Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes.\nONNX offers a path to browser and other native-runtime integrations; those require\nmatching preprocessing and are not automatically qualified by Python execution.\nNo complete Windows/macOS/edge-device compatibility claim is made.\n\n## Training and artifact identity\n\nThe checksum-verified training console reports the best model at epoch **30**.\n`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and\ntraining log with immutable hashes and public source URLs. The retained materials\ndo not identify the exact training Git revision or fully establish the upstream\ninitialization lineage. The recorded September 11 checkout is packaging provenance,\nnot a claimed training revision. The trained checkpoint itself is identified and\ncan be loaded without retraining or downloading an initialization model.\n\n`release.json` covers the graph/external-weight files, presets, preprocessing,\nvocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml`\nrecord list construction. Read `NOTICES.md` for code, model and source-data boundaries.\n\n## Publication status\n\nThe model-weight license is awaiting owner designation. The code's MIT license\nmust not be presented as a weight/data license. Do not publish this candidate until\nthat decision and any required initialization notices have been resolved.\n", "MODEL_PROVENANCE.toml": "schema = \"mambo-model-provenance-v1\"\nmodel_id = \"MAMBO_v3\"\narchitecture = \"EfficientNetV2-S with normalized hierarchical classifier\"\ntraining_run = \"global_lepi_production_w32_1\"\ntraining_started = \"2026-09-10\"\ntraining_finished = \"2026-09-11\"\nbest_epoch = 30\nbest_epoch_source = \"Checksum-verified training/console.log: Best model found at epoch 30\"\nseed = 42\ntraining_epochs = 30\ntraining_world_size = 4\ntraining_source_revision_status = \"Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source.\"\ninitialization_status = \"Training config loads initial_seed42.pt with pretrained=false; upstream initialization lineage is not established by the retained files.\"\npackaging_checkout = \"52954edae5dae31a62ecb639533e6f8573d57055\"\npackaging_checkout_role = \"Original September 11 export/package environment only\"\nweights_license_status = \"Awaiting owner designation; repository MIT license covers code only\"\n\n[checkpoint]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\"\nsha256 = \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n\n[training_log]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log\"\nsha256 = \"d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54\"\n\n[epoch_summary]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv\"\nsha256 = \"be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2\"\n\n[configuration]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml\"\nsha256 = \"a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f\"\n", "NOTICES.md": "# MAMBO V3 notices\n\n## Repository code\n\nThe deployment adapter and mini_trainer code are distributed under the MIT license\nin `CODE_LICENSE`. This notice does not grant rights to independently licensed\nruntime libraries, model weights, datasets or photographs.\n\n## Model weights — owner decision outstanding\n\nA license for the trained MAMBO V3 weights has not yet been designated in the\nretained release metadata. Public download availability alone is not a license.\nThe model owner must designate the license and confirm any required attribution\nfrom the initialization checkpoint before public release. The current training\nconfiguration loads an earlier local checkpoint; its original initialization\nlineage is not established by that configuration alone.\n\n## Runtime dependencies\n\nPyTorch/torchvision, ONNX Runtime, NumPy, Pillow and optional timm are installed\nseparately by the application's package manager, not vendored in the model bundle.\nTheir distributions carry their own license files and notices. CUDA/cuDNN components\nare optional third-party dependencies with their own terms. Keep dependency notices\nwhen redistributing an environment or container. The release manifest records the\nqualified versions, not a requirement to use one universal environment lock.\n\n## Dataset, taxonomy and photographs\n\nGlobal-lepi metadata and GBIF taxon identifiers informed training and regional\npresets. Training/evaluation photographs and the Flemming dataset are not included\nin this deployment release. Their original source permissions remain separate;\nthis release grants no permission to redistribute those datasets or images.\nPreset files contain taxon IDs and filter definitions, not photographs. Retained\nprivate evaluation inputs must remain outside publication assets.\n", - "PRESETS.md": "# Presets\n\nGeographic minima are provisional; rows include all metadata splits.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", - "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"provisional; pending final release decision\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", + "PRESETS.md": "# Presets\n\nV3 uses metadata row counts, including all splits, without further deduplication. New lists require at least 3 regional and 25 global rows; legacy lists preserve their historical membership.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", + "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"selected for MAMBO_v3; metadata row-count policy\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", "README.md": "# MAMBO deployment — release candidate\n\nIdentify moths and butterflies from images, with species, genus and family\npredictions. V3 adds a standalone ONNX option alongside PyTorch: **no training\npackage or GPU is needed for ONNX/CPU**. Both backends use the same API, regional\nlists and output format. The comparisons below show quality and speed against V2,\nincluding CPU, laptop GPU and server GPU measurements.\n\nThis candidate is not yet published; the examples use the supplied release wheels.\nModel files download automatically from public ERDA storage on first use and are\nverified and cached. Reuse one predictor across calls.\n\n## Quick start\n\nCreate an environment, or use your application's existing environment. Python 3.12+\nis required. Install ONNX/CPU to start without a CUDA setup:\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate # Windows PowerShell: .venv\\Scripts\\Activate.ps1\nuv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'\n```\n\n**Python** — supply images directly:\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor() # Global species list, ONNX, CPU\nresult = predictor.predict([\"moth.jpg\", \"butterfly.jpg\"])\nprint(result[0].label) # (species_id, genus_id, family_id)\nprint(result[0].confidence) # confidence for each of those ranks\nrecords = result.to_dict() # list of JSON-serializable records for your application\n```\n\n**CLI** — the same defaults, for files or a directory:\n\n```sh\nmambo_predict -i ./images -o ./output --name predictions\n```\n\nThis creates `output/predictions/predictions.json` and `mini_metric.csv`;\n`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run.\nFor a one-off command without installing into your application environment, replace\n`mambo_predict` with\n`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`.\n\n| Interface | Inputs | Outputs |\n|---|---|---|\n| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. |\n| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. |\n| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. |\n\nFor an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to\nRGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF\norientation is not applied. Predictions at each rank are independent, so the three\nIDs need not form one ancestral path. CSV truth labels are inferred from parent\nfolder names; arbitrary image folders do not supply evaluation ground truth.\n\n## Choose the configuration that matters\n\n**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the\nsimplest dependency footprint and a useful starting point for CPU-only and edge\napplications. For NVIDIA GPU throughput, use PyTorch if it fits your environment,\nor ONNX/CUDA to keep the training package out of your application.\n[Runtime installation and offline use](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md) covers these\nalternatives. Changing runtime does not change the input/output contract.\n\n**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is\nworth roughly 3× lower throughput.** Keep the default recipe. Its benefit is\nimage-domain dependent; the general-photograph comparison below provides context.\n\nKeep `precision=\"auto\"`. Increase `batch_size` only when processing enough images\nto benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet\nyour application's throughput or CPU budget. Request embeddings or extra candidates\nonly when your workflow uses them. No server, dataset metadata or training setup is\nrequired.\n\nPass API settings to `Predictor(...)`, except the prediction methods shown below.\nCLI flags apply to `mambo_predict`.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. |\n| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. |\n| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. |\n| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. |\n| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. |\n| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` to list choices, or read the\n[preset catalogue](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/model-presets.md) for their exact scope and construction.\nPresets include species that **can occur** in a region, including introduced\nspecies; they are neither native-distribution maps nor exhaustive checklists.\nUse `model=\"full\"` if a regional restriction is inappropriate.\n\n`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also\navailable; legacy `north_europe` performed better on Flemming and is recommended\nfor comparable northern-European use. A custom `class_list=[\"GBIF_SPECIES_ID\", ...]`\nor UTF-8 file with one ID per line overrides the preset (`--class-list species.txt`\nin the CLI). Unknown IDs and empty lists fail; duplicates are removed.\n\n### Integrating with V2 applications\n\nThe `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA\ndefaults, callable prediction, `class_mask` and native result containers. It needs\nboth release wheels. New integrations can use the smaller `mambo_deploy` interface\nabove, with CPU results independent of backend. Both download model assets automatically.\n\nRetain the legacy regional preset for comparison, and match species by taxon ID,\nnot numeric index. The V3 vocabulary, scores and embedding width can differ from V2;\nexisting thresholds and stored embeddings are not interchangeable.\n[Migration details](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#moving-from-v2) describe the remaining\ncompatibility boundaries.\n\n### Large image collections\n\nUse streaming for a large collection of paths, consuming results as they arrive:\n\n```python\nfrom contextlib import closing\n\nwith closing(predictor.predict_stream(image_paths)) as batches:\n for result in batches:\n records = result.to_dict()\n # Write records to your database, file or downstream service here.\n```\n\nInput order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs.\nFor in-memory inputs, split large collections into smaller `predict()` requests;\nthat method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits\nmodel calls, not total request memory. [Streaming controls](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#streaming-controls)\nare available if the defaults do not fit your workload.\n\n## Changes from MAMBO V2\n\n- Global (`full`) is now the default scope. Select `europe` or `north_europe` to\n retain those geographic restrictions; the legacy lists remain available.\n- Install the model-generation package **`mambo-v3`**; its Python import remains\n `mambo_deploy`. Maintenance releases of this package retain the V3 trained model.\n Pin the package version for reproducible application builds. Use a separate\n environment for V2 or an older deployment candidate.\n- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU.\n Existing native CLI workflows must specify `--backend torch --device cuda:0`.\n The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults.\n- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and\n streaming output. Raw inputs and result formats are documented above; old\n preprocessed tensors, numeric class positions and embeddings need migration.\n\n### Beyond Python\n\nThe ONNX assets also provide a path to local browser inference with\n[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where\nimages can be processed on the user's device. Existing browser work is recorded\nin the [release roadmap](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work).\nThis Python release does not ship a browser SDK: preprocessing, external weights\nand browser/runtime support still need integration. The same local API or CLI can\nbe embedded in desktop applications, batch jobs and services without a hosted\nprediction service.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. These laptop measurements predate the latest\npipeline improvements and remain a consumer-hardware baseline.\n\n![CPU and GPU throughput by batch size, including the new TTA default](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\n### Complementary in-domain and HPC results\n\nThe original global-lepi test split adds a comparison on general photographs using\nthe global vocabulary. It complements Flemming's deployment-relevant monitoring\ncrops; the image domains and class lists differ, so their absolute scores should\nnot be compared as a controlled domain-effect estimate. The same `mini_metrics`\ncalibration/support policy uses 568,939 reporting images and 63,974 separate\ncalibration images, with both confidence settings evaluated on the reporting split.\n\n![In-domain quality at all ranks, with calibration, support truncation and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-indomain-quality.svg)\n\nV3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces\nin-domain performance, illustrating that its benefit depends on the input domain;\nthis does not override its benefit on the more deployment-relevant Flemming crops.\nSupport >5 changes the class average, not the evaluation rows. Truth classes outside\nthat average represent 1.70% / 0.34% / <0.01% of species/genus/family images without\nthresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete\nmetrics are in the [in-domain evidence](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-indomain-evidence.md).\n\n![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-hpc-current-speed.svg)\n\nThe server comparison retains CPU, GPU request and GPU streaming throughput in\n**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s**\nand ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and\nsmaller-batch results retain their earlier measurements; new request points are\nshown separately rather than joined to older scaling curves. These are measured\napplication rates, not a promise of GPU saturation.\n\n[Timing details and provenance](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-hpc-evidence.md) record measurement\nsettings, memory and repeat ranges. Keep the laptop comparison above when choosing\nfor consumer devices. ONNX's CPU advantage and independence from the training\npackage make it especially relevant when a GPU or the full PyTorch stack is not\nan option; PyTorch remains the faster GPU choice in these measurements.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", - "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"provisional; pending final release decision\"\n }\n}\n", + "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n }\n}\n", "regions/africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n1733755\n1734704\n6113959\n11529292\n1845270\n1845574\n1845616\n4528100\n1847111\n9546514\n9868978\n1850640\n1850781\n5119338\n1845952\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n4532500\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1783882\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1790692\n1791715\n1792210\n1795074\n1796984\n1797542\n4532473\n5884245\n6117055\n6117124\n1798481\n1798504\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1805110\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n5117189\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n9331464\n1819928\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n8148822\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780869\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n1860857\n5123339\n5123474\n1869595\n1870450\n1870988\n1871252\n1871407\n8766638\n4531365\n1871754\n1871783\n7673242\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n4531237\n1873890\n1875409\n1875687\n1876542\n1876922\n9111961\n5126052\n1877788\n4531417\n1890024\n5884888\n1877035\n5125780\n1871504\n1941330\n10309794\n12231385\n1736623\n1737131\n1737509\n4530608\n1739833\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922572\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n1924082\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1925918\n1926324\n1926385\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n4535106\n1931046\n1931403\n1931437\n1931788\n1932177\n1932302\n1932332\n1932354\n8833509\n1932393\n1932411\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933647\n1933649\n1926166\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n1919333\n4535280\n4535285\n7981372\n1919346\n1919660\n1919663\n1919665\n1919703\n1919924\n1919929\n1919930\n1919966\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n1920709\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1920218\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1957266\n1957286\n8172949\n1959839\n1960105\n1961013\n1961025\n4302252\n1963168\n1964076\n1964195\n1964836\n1966255\n1967025\n1967209\n1967265\n1967324\n1967438\n1967606\n1969958\n5144691\n5144805\n5144900\n5145075\n5145396\n5145468\n5145502\n5145842\n8014296\n1973171\n7996464\n5146510\n5146611\n5146774\n5146837\n5147039\n5147043\n5147058\n5147354\n5147395\n5147415\n5147437\n5147441\n5147478\n5147560\n1978017\n5148264\n1980521\n1980525\n1980533\n1982267\n1983039\n1983062\n1983525\n1983528\n1985742\n4525093\n4525097\n6118530\n6214843\n4524223\n1988019\n1988064\n1992066\n11654024\n7507369\n1989594\n4525034\n4524541\n4523519\n6119299\n6119323\n6119359\n6119488\n9220953\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8277078\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142338\n5142352\n1949954\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772172\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n1775329\n5110858\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n1787770\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1792996\n1794507\n1795068\n4532908\n1795483\n9803522\n1796451\n4532811\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n4533714\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n1824131\n5118892\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n4535632\n8049830\n4535809\n4535819\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n1911461\n5133610\n10203260\n1912506\n8964866\n5134098\n5134301\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1916352\n1916554\n1918207\n1918212\n1918632\n1918688\n1918776\n4535539\n5137397\n7988274\n8404037\n9902073\n7762841\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1899737\n7934873\n8393082\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1881362\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1885931\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888484\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1890898\n1891167\n1891171\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n8218441\n1886207\n1883885\n4532150\n4532160\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861494\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n7761138\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n8225376\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n4690079\n5141297\n1939314\n5770913\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/arctic.classes": "1860621\n1860628\n1860659\n1860664\n1860668\n1860688\n1860709\n1860711\n1732063\n1732416\n1732452\n1732521\n1732565\n1732662\n1732717\n1733258\n1733484\n4525266\n4525273\n1734453\n1734826\n1845270\n1845368\n1845607\n1846604\n1846657\n1846729\n1846916\n1847572\n1848150\n10450501\n1848219\n1848273\n1848312\n1848356\n1848378\n1848596\n1848636\n1848669\n1848690\n1848713\n1848714\n1848730\n1848753\n1848864\n1848868\n1849267\n1849273\n1849284\n1849294\n1849477\n11052757\n11080751\n1849630\n1849856\n1850008\n1850042\n1850045\n1850076\n1850106\n1850238\n11576787\n1850302\n1850335\n1850386\n1850394\n1850450\n4527903\n1850522\n1850538\n1850971\n1851000\n1851010\n1851011\n5122037\n5122131\n1851203\n1851220\n1851337\n1851347\n1851555\n5122206\n1852177\n1852311\n11287091\n1848920\n1829533\n1829776\n1829785\n1829799\n1829823\n1829974\n1828637\n1829021\n6097236\n5769272\n10176413\n5879654\n7448174\n4525610\n1861395\n1845962\n1830843\n1830122\n1830125\n1830144\n1830147\n1830152\n1830186\n1830191\n1830207\n1830241\n1830243\n1830262\n1830266\n1830271\n4525476\n1831643\n8271010\n1853723\n5880147\n9734171\n11418741\n1761111\n1764531\n1769103\n1769897\n9564612\n9607447\n1772793\n1777631\n1780150\n5113078\n5113084\n5113234\n1797178\n1797258\n1797367\n1797373\n1797374\n1797436\n1797479\n4532471\n8355390\n1798346\n1798408\n1798449\n1798594\n1798807\n4532351\n4532357\n9621113\n1799708\n1804071\n1804906\n7874258\n1808752\n5115771\n1810099\n5116416\n1813114\n5117189\n5117400\n1817729\n1819145\n4532293\n4532297\n1819268\n1819873\n7657803\n1820372\n10551407\n12253343\n5884571\n7596232\n5771982\n6097214\n4532544\n4532516\n12089608\n11962292\n12135372\n5115872\n5115874\n9530200\n5116475\n4532405\n4532408\n4532412\n8000103\n4532534\n1760246\n5113036\n1812394\n8237987\n1820039\n1771772\n1860979\n1860983\n4522916\n4522919\n4522922\n12318291\n4522886\n4522891\n1860768\n7767114\n7961640\n1992504\n1852956\n1852978\n1835432\n1835433\n1835456\n1835457\n9724183\n1837343\n1837420\n1837429\n1837464\n1837515\n4529064\n7958169\n1839293\n1839296\n1840297\n1840301\n1840345\n1840346\n1840360\n1840380\n1840408\n1840485\n1840555\n1840566\n1840581\n1840596\n5119808\n4529630\n1751236\n1751290\n1751298\n1751368\n1751457\n4535884\n1860408\n4525177\n5123394\n5769164\n5123461\n1751216\n1869803\n1869852\n1869976\n1870202\n1870250\n1870988\n1871407\n4531402\n1871698\n10787705\n1872901\n1872904\n1873079\n1873776\n1873780\n4531264\n1874204\n4531147\n1875120\n8219149\n1875376\n4531242\n1875631\n4531284\n1875827\n1875869\n1875918\n1875940\n1875952\n1876329\n1876409\n1876854\n1877310\n1877341\n1877368\n4531246\n1877941\n1878470\n1878490\n1872315\n1748805\n1939964\n11667300\n5141493\n5141501\n1940510\n1940575\n1940639\n1940744\n1940768\n1940807\n1940838\n1939879\n1736377\n1736511\n1736528\n1736560\n1736601\n5102666\n1736800\n1736898\n4530406\n4529931\n1737342\n1737403\n1737491\n1737497\n7350238\n1737526\n1737533\n1737542\n1737552\n1737650\n1737753\n1737775\n1737847\n1737893\n1737924\n4530002\n1738218\n1738222\n1738245\n1738317\n1738322\n1738337\n1738422\n1738514\n8420632\n8869900\n5102931\n5102951\n1738687\n1738700\n1738722\n1738777\n1738794\n1738839\n1738883\n1739042\n1739043\n8086347\n1739128\n1739272\n1739284\n1739337\n1739377\n1739381\n5102982\n1739451\n1739461\n1739471\n1739748\n1739797\n1739816\n1739819\n1739833\n1739919\n1739922\n1739980\n1739999\n1740005\n1740053\n1740069\n1740116\n1740120\n1740174\n1740183\n1740185\n1740305\n1740392\n7797515\n8215326\n1740482\n1740518\n1740533\n1740567\n1740570\n1741253\n1741341\n1741368\n4530151\n8345820\n5103066\n5771357\n1741551\n1741615\n1741633\n1741634\n1741747\n1741752\n10807169\n11093909\n1742106\n1742142\n1742185\n1742263\n1742346\n1742402\n5103451\n5103502\n5103736\n5103948\n5771350\n7975250\n8313553\n5103998\n7661023\n1743475\n7877231\n1743532\n1743588\n1743604\n5104056\n6097235\n1743643\n1743714\n4530214\n1743768\n1743775\n4529908\n4529915\n1743828\n1743855\n1743856\n1743862\n1743867\n1743898\n1744071\n1744136\n1744180\n1744224\n1744416\n1744498\n1744588\n1744593\n1744699\n1744709\n1744714\n1744728\n1744731\n1744739\n1744742\n1744748\n1744763\n1744777\n1744789\n1744810\n7964262\n1745079\n10844862\n1745131\n1745558\n1745561\n1745579\n1745600\n1745606\n1745630\n1745634\n1745636\n1745643\n1745659\n1745676\n1745678\n1745705\n1745724\n1745737\n1745756\n1745762\n1745771\n1745787\n1745816\n1745830\n8162538\n8369868\n1745925\n1746027\n1746413\n1746440\n1746613\n1746644\n1746666\n1746689\n1746775\n1746831\n1746832\n1746856\n1747141\n4530138\n5104558\n6097234\n7588222\n9242559\n1748456\n5104641\n8691947\n10580256\n5103121\n5103176\n5103185\n5103227\n5771230\n5771232\n5771236\n5771239\n5771241\n5771249\n5771256\n5771259\n4525500\n4525503\n4525510\n4525530\n4525540\n4525547\n4525562\n1920851\n1920889\n1921239\n1921247\n1922937\n5138387\n5138543\n5138561\n1923796\n1924097\n1924106\n12185456\n1925918\n4300000\n1925962\n1926054\n1926324\n1926861\n5882965\n1928248\n5139156\n1928945\n11720834\n1929270\n1929659\n1929697\n1930110\n8643155\n1931553\n1931779\n10570752\n1932411\n1932417\n1932960\n5140244\n1933793\n1926260\n1933138\n1919327\n1919328\n1919712\n1919719\n1920237\n1920259\n5137791\n5137803\n1920494\n1920496\n1920506\n5137882\n5137894\n5137903\n5137908\n5804895\n1920712\n5714914\n5137582\n5137595\n5137636\n5137672\n5137689\n5137693\n5137700\n5137706\n5137711\n5137714\n1920218\n1748890\n1749050\n1749070\n1749164\n1749713\n1749744\n1749846\n1749959\n1750097\n1750166\n1750288\n5104772\n5104781\n5104797\n5104891\n5104940\n5105054\n5105088\n5105158\n5976947\n1751051\n5104759\n1749591\n1749608\n1735532\n4527339\n1731826\n1731837\n1731860\n1954563\n5143380\n5143453\n5143477\n1955497\n5143651\n5143675\n5143697\n1956440\n1956524\n1956599\n1956710\n1957266\n1957300\n1957570\n1957816\n1957845\n1957854\n4524421\n4524426\n5143964\n1959735\n1959914\n1959919\n1960617\n1961040\n1961190\n1962204\n1962265\n1962434\n1962516\n9812211\n1962860\n1963011\n1963306\n1963446\n1963463\n1964191\n1964195\n1964653\n1964657\n8361848\n5144424\n5144426\n1965078\n1965166\n1965763\n1965777\n1965795\n1965807\n1965810\n1965823\n1965825\n1965841\n1965865\n1965913\n1965996\n1966017\n5144534\n5144543\n1967245\n1967273\n1967597\n1967815\n1967873\n7681733\n1968867\n1969291\n1969954\n1970213\n5144721\n5145009\n5145136\n5145260\n5145409\n1971888\n1972120\n1972185\n1972187\n1972234\n1972250\n1972278\n1972342\n1972377\n5145965\n7541913\n7960566\n1972434\n1972447\n1972449\n1972454\n1973414\n1973487\n5146496\n5146559\n5146659\n5146677\n5146883\n5146946\n5146961\n5147039\n5147062\n5147208\n5147245\n5147608\n5147638\n1975546\n1975553\n1975571\n1975733\n1975741\n8329661\n1975793\n5715277\n5715278\n8160782\n1975897\n1975903\n1976163\n5147681\n5147713\n7973517\n1976993\n1977003\n1977007\n1977068\n5147827\n5147834\n5769028\n1978056\n1978065\n1978114\n1978375\n1978445\n1978493\n4524636\n4524638\n4524890\n1978751\n1978776\n1978821\n1978977\n5148286\n1979308\n1979430\n1979473\n1979781\n5148436\n5148462\n5148486\n5148487\n8421569\n1982406\n1982500\n1982529\n1982541\n1982542\n1982592\n1982636\n1982671\n1982746\n1982770\n1982791\n1982867\n1982885\n1983000\n1983052\n1983170\n1983260\n1983288\n1983441\n1983442\n1983525\n1983558\n1983648\n1983705\n1983755\n1983896\n1983922\n1983997\n1983999\n7752082\n7993353\n8015895\n8026858\n8262357\n1984734\n1984942\n1984949\n1985522\n1986052\n1986056\n1986157\n1986166\n1986171\n1986191\n1986220\n1986367\n1986452\n1986522\n1986575\n1986623\n5149307\n5149315\n5768880\n1987744\n1988593\n1988684\n8388883\n5149414\n5149438\n1988881\n1989428\n1990066\n1990150\n1990551\n1991371\n5149836\n1992066\n5880533\n5880545\n5880550\n5880552\n5880559\n5880563\n7657419\n8237343\n8632989\n9261296\n9272461\n5769068\n5769072\n4524740\n4523556\n4523560\n4523564\n4524054\n4524376\n4524822\n4524070\n4524072\n4524951\n4525078\n5144190\n5146412\n5715275\n5149499\n7769543\n4523880\n4523883\n4523885\n5149665\n5149704\n5149746\n5149819\n5146342\n5146379\n1972942\n4302268\n5141677\n1943954\n8133678\n7389824\n1947282\n1947306\n1947335\n1949794\n1949852\n1950006\n8109173\n5977179\n5977250\n7633472\n1869478\n1869489\n1869512\n9359597\n9400895\n10963226\n10982815\n5109821\n1758878\n1759055\n1759069\n1759083\n4533952\n1759407\n1759620\n1759661\n1759667\n1759668\n1759686\n1760104\n1760593\n1794361\n4534225\n8708745\n1760887\n1761041\n1761438\n1762608\n1762615\n5109506\n5109523\n5109599\n5109722\n1763610\n1765011\n1765044\n4534245\n4534257\n1765767\n1766128\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766650\n1766741\n1767597\n1767625\n5772176\n5772196\n5772199\n5772205\n5772210\n1768117\n5110200\n1768341\n1768702\n1768749\n1768771\n1768815\n1769057\n1769505\n1769566\n1769947\n1769958\n1770132\n1770150\n1770477\n4532696\n1771385\n1771391\n7725644\n1771509\n1771531\n1771997\n1772013\n1772169\n1772179\n1772940\n1772956\n1772977\n1773163\n1773328\n1774314\n4534052\n4534057\n5772269\n4534719\n1776067\n1776330\n1776371\n5110756\n5772446\n1776459\n1776462\n1776619\n1776862\n4534463\n5110871\n5110885\n4534299\n1778517\n1778596\n5111574\n8253467\n1779435\n1779641\n1779690\n1779959\n1780378\n1781694\n1782560\n1782615\n1782622\n1782627\n1782672\n1782726\n1782727\n1782763\n1782777\n1782841\n1782927\n1782948\n1782978\n1783037\n1783043\n1783045\n5112155\n5112191\n5112283\n5112291\n5112336\n5112345\n5112377\n5714951\n5714973\n5715004\n5772349\n5772351\n7921916\n8043500\n1783855\n1783861\n1784826\n4534290\n1785286\n4532886\n4532890\n1785888\n1785895\n1785951\n1785955\n1785964\n1785992\n1786007\n8292872\n1786308\n1786902\n1786936\n1787112\n1787213\n1787504\n1787506\n1787590\n1787610\n1787697\n1787770\n1787841\n1787859\n1788425\n1788522\n4534011\n1788917\n1788929\n1789086\n1789267\n1789481\n1789505\n1789553\n1789580\n4534166\n1789695\n1789745\n1789753\n10068024\n10113008\n10312073\n1789982\n1790002\n1790072\n1790084\n1790160\n11693171\n1790359\n1790361\n9174377\n1790625\n1791422\n1791784\n1792292\n1792377\n1792379\n1792383\n1792411\n1792414\n1792418\n1792426\n1792442\n1792449\n1792475\n1793369\n1793877\n1793983\n1793986\n1794102\n1794590\n1795215\n1795854\n1795871\n1795930\n1795946\n1795983\n1796007\n1796032\n1796117\n1796145\n1796169\n1796181\n1796188\n4534485\n7438067\n1796217\n7780930\n1796463\n8105817\n1796678\n4533431\n4533433\n4533442\n4533444\n4533446\n1798372\n1798916\n1798931\n1798971\n1798974\n1798984\n1799135\n1799701\n1799799\n1799957\n1800032\n8742426\n4534389\n4534207\n10638451\n4533273\n4534540\n8890502\n9135821\n4534038\n4533202\n4534538\n4533128\n4533136\n4533661\n4533671\n4534408\n4534533\n11478679\n5110644\n1779334\n5114198\n1771678\n1771698\n8581601\n9623131\n1770880\n1771169\n1771214\n7940536\n4533347\n4533360\n1822587\n1822610\n1822613\n5118524\n1822787\n1822796\n1822819\n1822830\n7875265\n1825064\n1825077\n1825083\n4534909\n4534914\n1825156\n1825176\n1825539\n1825967\n1825971\n1825983\n1826022\n1826033\n5118996\n1827125\n5119245\n1828162\n1894102\n1894164\n1894268\n1894298\n5882039\n7712938\n1894714\n4535614\n4535630\n4535636\n8049830\n1894840\n1894896\n4535827\n4535817\n5128250\n5128266\n5128323\n5128326\n5128357\n9804158\n1895875\n1896841\n1898286\n4299368\n1898544\n5129374\n5129378\n5129405\n5129432\n1902533\n1902749\n1905187\n1905299\n6221746\n1905383\n1905396\n1908044\n1909398\n1911112\n1911168\n1911278\n1911461\n7809779\n8078362\n1912325\n1912372\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n7428726\n8810143\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134759\n5135355\n5714507\n7738295\n8314088\n9967126\n8176911\n1918988\n5130587\n5130682\n5131096\n5132084\n5132183\n5131910\n8138711\n1902143\n1902182\n1899433\n7768674\n5142870\n1951649\n1952014\n5142903\n1952229\n5143048\n1952532\n5143129\n5143147\n1952806\n1832819\n1832853\n1832915\n1832927\n1832936\n1833159\n5880257\n5880258\n6097224\n6097225\n6097228\n1853064\n5120668\n5120675\n5121046\n5121177\n5121517\n5121613\n5121737\n8273859\n5120396\n5101394\n4525641\n1731598\n1872368\n1878782\n1878862\n1878879\n1878895\n1878939\n1879452\n5126212\n1879534\n1879630\n1879703\n1879731\n10915497\n1879939\n1879970\n1880040\n1880062\n1880064\n1880088\n1880094\n1880104\n1880138\n1880139\n1880140\n1880143\n4531687\n1881603\n4531713\n1881834\n4531975\n1882195\n1882210\n1882437\n1882459\n1882729\n5126834\n8325294\n1883161\n4531690\n1884212\n4531708\n1884465\n1884970\n8223165\n1886587\n1887290\n1887701\n1888743\n1888759\n1888823\n1889942\n5127521\n1890187\n1890534\n1890576\n1890679\n1890699\n1890772\n1890802\n7431428\n1891059\n1891167\n1891426\n1891473\n1891493\n1891494\n4532022\n9674732\n1884255\n1884273\n1884332\n1884337\n1884370\n1884403\n5884851\n5126675\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n1887108\n1887177\n1887178\n4532050\n4532088\n4532095\n4532097\n1846107\n1846111\n1846133\n1846141\n1846210\n1846219\n1846236\n4528818\n1830879\n1830937\n1830962\n1831002\n1831009\n1831128\n1831136\n1831168\n4525443\n4525448\n5122439\n1854849\n4526050\n1858637\n1858775\n1858778\n1858873\n1859046\n1859100\n1859177\n1859285\n1859287\n1859305\n1859471\n1859480\n1859488\n4536472\n4536483\n7642240\n8200050\n1973467\n5123221\n5123042\n5124911\n1867820\n7734292\n1841813\n1861644\n1861797\n1861851\n1861862\n1862572\n1862580\n1862624\n1862837\n5123922\n5124007\n5124029\n1864165\n1864358\n1864377\n5124121\n5124143\n5124233\n1864652\n1993419\n4525189\n5119513\n1830361\n1830374\n1830380\n1830407\n1830457\n4525420\n7976145\n1830537\n1830802\n4525364\n1754332\n5107219\n5107644\n7778368\n7955974\n8426357\n4522753\n1939658\n1939677\n1939680\n1939688\n7646066\n1829322\n1829363\n1856005\n1856384\n1856620\n1856658\n1856668\n1856686\n1856691\n1856768\n1856867\n1857626\n9790007\n1857856\n1857863\n1857924\n1857978\n1858074\n1858100\n1858113\n1858163\n1937739\n8225376\n1938520\n1938810\n1938955\n1938975\n1939056\n12253844\n1858531\n1838691\n1838905\n1838911\n4528692\n1835396\n1837172\n1839893\n5770922\n5770942\n1801051\n1801896\n4534779\n4534782\n1802280\n1803073\n4534762\n5114311\n8244266\n", "regions/asia.classes": "1837646\n1934693\n1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1860668\n1732063\n1732114\n1732115\n1732416\n1732452\n1732508\n1732521\n1732525\n1732565\n1732662\n1732685\n1732763\n1732830\n1732842\n5101640\n1733154\n1733155\n1733243\n1733258\n1733394\n1733412\n1733484\n4525266\n5734897\n5101745\n5769191\n1734453\n5102207\n5102242\n1734496\n1734519\n1734690\n1734704\n1734826\n5734891\n5102287\n5102300\n1831890\n1832143\n5734640\n11453841\n1832235\n1832248\n1832254\n5734645\n1832612\n11505614\n8825467\n1845270\n1845547\n1845548\n1845607\n4529566\n4528100\n1846604\n10785815\n11730078\n1847062\n1847097\n1847157\n1847260\n1847392\n4528547\n1847641\n9546514\n1848219\n9868978\n1848273\n1848356\n1848378\n4528539\n1848864\n5122013\n1849284\n9007213\n1849656\n4527903\n1850570\n1850633\n1850781\n1851337\n1851543\n1851555\n1852165\n1852177\n6133343\n11287091\n1829533\n1829659\n1829776\n1828637\n6097236\n8871600\n7448174\n4525610\n10835385\n10855556\n5125130\n1861395\n1868428\n1868527\n5734146\n1845866\n1845962\n1834980\n8503184\n1839094\n1841261\n1830152\n1830191\n1830241\n1831458\n1831631\n1831643\n9379855\n8834672\n1839625\n5880147\n9734171\n10679326\n10746289\n11382064\n10698858\n11570545\n10701190\n11807833\n12199936\n11095591\n11418741\n7908344\n12259113\n12208733\n12235234\n12217030\n1758625\n1759150\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n10889719\n1760970\n1761111\n1761213\n1761353\n1761387\n9257793\n1762151\n11562374\n1762219\n1762226\n1762298\n1763589\n5109766\n1763650\n1763782\n1763812\n1763976\n1764021\n1764032\n1764043\n1764060\n9278311\n1764531\n1764640\n1764880\n1764886\n1765653\n1765863\n1766260\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767044\n1767755\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769103\n1769168\n11467034\n10848620\n1769410\n1769425\n1769465\n1769737\n1769772\n10881384\n12148290\n1769823\n1769827\n1769840\n1769852\n1769897\n1769901\n6132966\n6132967\n7701550\n8837162\n1771839\n1771975\n1771977\n1772352\n1772793\n4532500\n5110397\n5110417\n5110447\n5110490\n1774575\n1774576\n1775148\n5110546\n5110765\n5110769\n1777166\n1777631\n5110837\n1777695\n9372988\n6132953\n4687991\n6133029\n5110981\n5110986\n5110993\n5111007\n5111044\n6133058\n9610080\n1779399\n1779456\n6132938\n1780150\n5111830\n10203499\n1780705\n1780716\n1782115\n1783302\n1783652\n1783882\n1784804\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n6132974\n1786980\n1786985\n1787009\n10860091\n6132805\n1788045\n5112531\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n1790331\n1790692\n1790816\n10749137\n10766319\n1790876\n1790888\n1791010\n1791094\n1791097\n10743044\n6132950\n1791514\n1791698\n1791715\n11016336\n11725043\n11971514\n5113078\n5113082\n5113084\n5113148\n5113330\n5113352\n1792541\n1792695\n5113385\n5884243\n9504222\n1793429\n1793610\n1793613\n1793631\n1793635\n1793646\n1793656\n1793892\n5113925\n1796984\n10108671\n6132979\n10600368\n1797178\n1797258\n1797259\n1797276\n1797299\n1797333\n1797344\n1797349\n1797374\n1797429\n1797454\n1797479\n1797527\n4532461\n4532471\n4532473\n8355390\n8756768\n9332506\n1797727\n1798014\n1798101\n5113950\n5884247\n1798346\n1798408\n1798449\n1798481\n1798488\n1798504\n6132841\n6132850\n11732472\n11976273\n1787072\n1787079\n1798523\n1798529\n1798580\n1798594\n1798700\n1798794\n1798802\n1798807\n1798823\n1798863\n1798868\n4301310\n4532351\n4532352\n6115426\n6115437\n6133046\n6133051\n8793873\n1799417\n1799708\n1799743\n1799751\n1799757\n6132824\n6132825\n10722110\n1803148\n1803163\n1803197\n1803302\n1803824\n1804071\n1804477\n9343385\n1804906\n1805044\n1805111\n11494627\n12229237\n1805580\n5115166\n5115167\n5115198\n9663271\n1806814\n1806871\n1806936\n7874258\n1807969\n11453492\n1808140\n1808145\n1808161\n1808166\n1808180\n1808195\n1808221\n1808236\n1808286\n1808340\n1808348\n1808381\n1808440\n1808450\n1808559\n6198302\n9219266\n1808752\n5115701\n5115771\n1809019\n5115777\n1809115\n1809210\n1809308\n10189965\n1809387\n5116095\n10183056\n12006709\n1810099\n1810464\n10882244\n5116395\n5116412\n12176559\n12182061\n1811686\n1812500\n10671425\n10821201\n11736162\n12209759\n1813010\n1813036\n1813114\n1813263\n5117189\n7656811\n1814538\n1814653\n1814913\n1814928\n1814971\n5117399\n5117400\n1815260\n1815680\n10826443\n12249986\n1816029\n1816065\n1816138\n1816246\n1816276\n1816292\n1816299\n1816362\n1816881\n5117779\n1817797\n5734900\n11461056\n11860565\n1818413\n8326103\n1818659\n1818991\n1819050\n10822185\n1819128\n1819145\n4532293\n4532297\n6134023\n6134027\n6197200\n7346382\n7346384\n1819268\n1819270\n1819280\n11656384\n1819421\n8407461\n1819668\n6134035\n1819873\n5118348\n6122092\n7657803\n5118422\n10546538\n1820275\n1820282\n1820291\n1820318\n1820352\n1820372\n1820393\n1820401\n1820406\n1820414\n1820429\n1820440\n1820450\n1820451\n1820458\n1820477\n1820478\n5734655\n5734657\n7346381\n9420824\n1820565\n1820753\n1820888\n1821105\n1821260\n1822141\n1822142\n11731502\n12253343\n12037602\n9276279\n9347308\n5884571\n10503495\n8897869\n7596232\n12176367\n7346231\n12183285\n6097214\n4532544\n4532516\n6133081\n6133083\n4532532\n4532565\n10864524\n12021153\n12021649\n12089608\n9673208\n10270464\n8741750\n9473918\n9400545\n9559336\n6133292\n11332355\n6133340\n10062933\n10717837\n8148822\n12216332\n12242422\n9852545\n10806460\n6133252\n10072380\n6133325\n9754232\n10972780\n11142432\n10629533\n10309234\n12171522\n9493317\n9315833\n11962292\n10399906\n6133266\n6133269\n6133270\n6133271\n10754772\n10812069\n11232431\n6112449\n6133311\n6133312\n6133313\n6133315\n6133317\n8452092\n8526388\n8543494\n8624848\n9927378\n5734901\n6133262\n12257250\n10166724\n8831819\n12135372\n5115872\n5115874\n5116475\n8038357\n6133264\n6097254\n1774829\n5116698\n5116843\n12171068\n9266866\n10178326\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783898\n1783906\n6133033\n5116504\n1788635\n9336001\n1781413\n1781421\n1803461\n4532405\n4532408\n4532412\n10866411\n6133241\n6133242\n6133244\n6133248\n7346227\n8000103\n9478424\n1781598\n1794273\n4532534\n1763761\n6115388\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774640\n1774654\n1774661\n1774682\n1774702\n1768626\n6132809\n1819852\n1780287\n1813174\n4532508\n1793515\n1793533\n5111643\n1804532\n1768461\n1760246\n5113036\n5109796\n1821455\n1821464\n1821478\n1821479\n1821505\n1821547\n1821651\n1821863\n1821920\n1821934\n1821940\n1822017\n1819337\n1819362\n1804182\n1774997\n6122364\n1815315\n1781446\n1781473\n6116076\n1783713\n1783725\n1812394\n8237987\n4532366\n4687933\n4687935\n6116646\n10926224\n11088003\n1820118\n1820137\n1819057\n4532453\n6116413\n1820039\n5118396\n1781531\n1798329\n1798331\n1798335\n1784947\n1785072\n1785105\n1765996\n1765999\n1766022\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132916\n6132917\n5110012\n1772822\n12185656\n1809594\n1781350\n1781353\n6133013\n1796943\n1819685\n10098436\n11717028\n1771772\n1782310\n10094256\n6197138\n10765884\n9792270\n5108435\n5108440\n1771903\n1788813\n4301309\n10506164\n1777500\n1777517\n5112440\n1795542\n1860979\n1860983\n1860987\n1860994\n4522890\n4522891\n1860765\n1860768\n1992504\n1852956\n1835432\n1835433\n1835457\n9724183\n1837420\n4529064\n1839293\n1839296\n1840301\n1840346\n1840566\n1840581\n1840596\n1831752\n5125075\n10371735\n1869359\n1869363\n9883856\n1939510\n1939520\n5141344\n1860259\n1860261\n1860274\n4525177\n5123339\n5123394\n5123419\n5769164\n5880040\n5880041\n6132546\n5123449\n5123461\n5123474\n5123485\n5123489\n1869595\n1869706\n1869803\n1869976\n1870202\n1870237\n1870249\n1870250\n1870450\n1870650\n5125306\n1871212\n1871407\n4531402\n4531409\n8766638\n1871451\n1871630\n1871683\n1871698\n1871783\n1871988\n1872094\n1872169\n4531427\n7673242\n10787705\n1872848\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873417\n1873776\n1873780\n1873783\n4531237\n4531264\n1873843\n1873890\n5125569\n5125596\n5125602\n5125633\n5125635\n5125689\n1874269\n1874274\n4531147\n1874743\n1874937\n1875120\n8219149\n1875327\n1875376\n1875827\n1875830\n1875865\n1875869\n1875918\n1875958\n1876168\n1876329\n1876409\n1876542\n1876592\n1876854\n1876922\n1877038\n1877345\n1877368\n9111961\n1877498\n5126052\n1877788\n1877941\n1877988\n4531417\n1878406\n1878470\n9835867\n1883045\n1888454\n5884888\n6133441\n4525884\n5141493\n1940510\n1940575\n1940639\n1940644\n1940717\n1940744\n4525777\n4525803\n1940807\n12211069\n1939879\n1736358\n1736377\n1736499\n1736560\n1736601\n1736623\n1736727\n1736905\n1736993\n1737015\n4529931\n10842267\n1737313\n1737342\n1737368\n1737491\n1737497\n1737524\n1737526\n1737533\n1737542\n1737650\n1737753\n1737776\n1737847\n8186212\n1738192\n1738222\n1738373\n1738422\n5102931\n5102951\n1738700\n8086347\n1739151\n1739337\n5102982\n1739471\n1739605\n1739833\n1739919\n1739922\n1739980\n1739999\n1740183\n1740185\n1740392\n7797515\n1740469\n1740482\n1740524\n1740623\n8094357\n1740797\n1740828\n1741056\n1741341\n1741368\n4530151\n5103061\n1741633\n1741752\n1742185\n1742263\n1742346\n5103613\n5103736\n5103948\n5771350\n8313553\n5103998\n11846897\n1743475\n7877231\n1743532\n1743604\n5104056\n1743768\n1743775\n1743782\n4529908\n1743828\n1743856\n1743862\n1743867\n1743898\n1743998\n1744071\n1744136\n1744180\n4530632\n1744526\n1744588\n1744593\n1744699\n1744728\n1744731\n1744739\n1744896\n1745013\n10844862\n1745561\n1745579\n1745600\n1745630\n1745634\n1745771\n1745781\n1745816\n1745895\n1745947\n1745952\n1745957\n1746027\n1746174\n1746327\n1746413\n1746440\n1746613\n1746644\n1746666\n1746714\n1746775\n1746832\n1746856\n1746876\n1747141\n5104442\n1747738\n5104597\n6097234\n1748605\n8691947\n5103121\n5103176\n5103227\n5771229\n5771232\n5771236\n5771239\n5771249\n5771258\n4525510\n4525530\n4525540\n1920851\n1920864\n10159697\n10707501\n9916153\n1920957\n1920991\n1920996\n1921009\n1921010\n1921021\n1921040\n1921044\n7346426\n1921055\n10581870\n10825466\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n10556522\n1921466\n7387466\n1921633\n7346430\n5138069\n1921897\n1922057\n1922085\n1922111\n1922143\n1922163\n1922244\n1922285\n1922288\n10384044\n10442031\n9904499\n1922311\n1922343\n8016522\n5138200\n1922572\n1922584\n4535092\n1922689\n8782891\n1922745\n1922771\n1922937\n5138257\n1922994\n1923019\n5138298\n5138543\n5138561\n5714680\n1923458\n1923491\n1923525\n1923649\n1923650\n1923651\n1923668\n4708977\n1923796\n1923809\n1923883\n1923917\n1924044\n1924057\n1924097\n1924193\n5138681\n1924298\n1924323\n10656713\n1924390\n1924417\n1924458\n1924558\n1924713\n1925233\n4535172\n1925381\n1925454\n1925543\n1925609\n1925628\n1925679\n1925711\n1925731\n1925743\n1925877\n1925918\n1925962\n1926054\n9816676\n1926324\n1926436\n1926437\n1926446\n1926448\n1926456\n1926546\n1926550\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926722\n1926800\n1926861\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709111\n5883052\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927439\n1927445\n1927707\n1927717\n5882965\n7680748\n1927897\n1928248\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n5139156\n1928628\n5139201\n1928754\n1928849\n1928908\n1928915\n9856663\n1928960\n1929270\n1929402\n1929659\n1929697\n5139309\n5139339\n8356768\n1930110\n1930832\n1930904\n1930916\n1930935\n4535106\n1930954\n1930968\n1931109\n1931132\n8643155\n1931148\n1931179\n1931509\n1931561\n5734268\n7346434\n1931655\n1931656\n1931706\n1931729\n1931735\n1931779\n5139915\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932172\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932411\n1932551\n7346444\n1932607\n5139990\n6132685\n1932752\n1932812\n1932814\n1932863\n1932960\n1932976\n5806412\n1933028\n1933044\n1933084\n4535162\n5140214\n5140244\n5140436\n5140443\n7634721\n7664111\n1933583\n1933647\n1933649\n7346407\n1933679\n1933793\n1933844\n1933845\n5140534\n5140561\n1934187\n1934188\n1934192\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n1935459\n1926260\n5138929\n7346417\n10879371\n11874998\n4709102\n1933095\n1933138\n1924494\n11055981\n9623220\n1752161\n5734556\n1752373\n1752483\n1752492\n1752494\n1752603\n1752651\n1752749\n1752758\n1752849\n1752903\n1753081\n1753215\n1753395\n5105458\n5105467\n5105547\n5105560\n5105570\n1753432\n1753435\n11014495\n1753636\n5734560\n1753759\n5105588\n10955682\n10932946\n7345843\n6133481\n10017342\n5105339\n5105259\n10795141\n11673056\n1919151\n1919160\n1919161\n1919176\n1919181\n1919221\n1919223\n1919320\n1919328\n1919333\n1919340\n1919344\n1919346\n1919348\n1919407\n1919412\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919697\n1919706\n1919712\n1919716\n1919720\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n1919966\n5137747\n5137748\n1920181\n1920237\n1920247\n1920258\n1920259\n5137790\n5137808\n5137823\n5137828\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5805954\n1920349\n1920356\n1920357\n1920362\n1920369\n1920374\n1920395\n5137861\n1920454\n1920467\n1920469\n1920472\n1920491\n1920494\n1920496\n1920502\n1920506\n1920512\n4535307\n5137889\n5137891\n5804932\n5805036\n5805407\n1920515\n5137902\n5137903\n5137908\n5137912\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920707\n1920709\n1920711\n1920712\n1920718\n1920786\n5804166\n5714914\n5137573\n5137578\n5137582\n5137595\n5137605\n5137612\n5137636\n5137663\n5137677\n5137682\n5137689\n5137706\n5137708\n5803588\n8203812\n1920218\n5137763\n7207679\n1749070\n1750166\n5104891\n5104759\n1758003\n1758440\n1758441\n1758461\n1855241\n1868837\n1868952\n1869057\n1869178\n1869187\n11794362\n1963095\n1963096\n1973530\n11826016\n5143303\n5143311\n5143315\n1954496\n1954563\n5143338\n5143354\n5143368\n5143380\n5143384\n5143437\n5143453\n5143506\n5143511\n5143525\n5143575\n5734335\n1954891\n1954911\n6133648\n1955389\n5143651\n1955552\n1955581\n6133676\n1955694\n1955725\n1955806\n1955856\n5143675\n5143697\n1956309\n1956384\n5734542\n5734543\n1956440\n1956496\n1956524\n1956536\n1956629\n1956710\n6133593\n4525068\n1957161\n1957174\n1957266\n1957300\n1957333\n1957368\n1957413\n1957460\n1957523\n1957572\n1957579\n1957583\n1957611\n1957718\n1957746\n1957791\n1957816\n1957852\n1957854\n5143947\n1958024\n1958045\n1958152\n1958158\n1958163\n1958241\n1958252\n1958255\n1958259\n1958260\n1958275\n1958282\n1958290\n1958305\n1958307\n1958323\n1958324\n6544637\n1958422\n1958454\n1958463\n1958483\n5144027\n1959395\n1959461\n1959494\n1959645\n1959652\n1959666\n1959667\n1959682\n1959735\n6133552\n1959876\n1959914\n1959919\n1959948\n1960002\n10694777\n1960023\n1960181\n1960182\n6133509\n1960484\n5144092\n5144093\n1960571\n1960595\n1960617\n6133518\n1960686\n1960854\n1960963\n1961013\n1961037\n1961040\n5734344\n1961052\n1961126\n1961162\n7346236\n1961190\n1961252\n1961647\n1962204\n1962265\n1962268\n1962434\n1962447\n1962516\n9812211\n1962636\n1962678\n1962839\n1962860\n1963011\n4302252\n5734349\n1963168\n1963306\n5144345\n1963446\n1963629\n1963709\n1963710\n1963733\n1963827\n11644349\n1964024\n1964025\n1964029\n6133500\n1964113\n1964116\n1964195\n1964247\n1964316\n1964331\n1964437\n1964471\n6133502\n1964637\n1964653\n8361848\n1964738\n5144426\n1965166\n1965197\n1965763\n1965777\n1965795\n1965810\n1965825\n1965841\n1965913\n1966017\n5144431\n5144438\n5144472\n9919915\n9370070\n5144499\n1966286\n1966302\n1966310\n5734448\n10670854\n1966362\n1966367\n5144534\n1967003\n1967006\n1967011\n1967039\n5144543\n1967245\n1967265\n1967273\n1967445\n1967590\n1967595\n1967597\n1967672\n1967688\n7346240\n1967815\n1967873\n1968147\n1968182\n1968193\n7681733\n1968304\n1968363\n1968730\n1968746\n1968837\n1968867\n1968951\n11598540\n1968990\n1969357\n1969463\n1969491\n1969581\n6133643\n1969621\n1970034\n1970136\n1970213\n1970284\n1970322\n1970436\n5734405\n6133513\n7346252\n5144677\n5144721\n5144782\n5144787\n5144805\n5144806\n5144864\n5144880\n5144900\n5144936\n5145009\n5145075\n5145136\n5145186\n5145255\n5145260\n5145269\n5145396\n5145409\n5145495\n5145502\n5145522\n5145560\n5145624\n5145729\n5145735\n8014296\n9194811\n1971847\n1971858\n1971888\n6133516\n1972094\n1972185\n1972187\n1972234\n1972250\n5145870\n5145965\n5146038\n5146062\n7541913\n1972443\n1972613\n1972614\n1972616\n1972620\n1972631\n10732353\n1972754\n5146282\n1973242\n1973338\n1973358\n1973393\n1973397\n1973414\n5146434\n5146476\n5146483\n5146496\n5146508\n5146559\n5146566\n5146567\n5146599\n5146601\n5146608\n5146611\n5146659\n5146677\n5146746\n5146752\n5146762\n5146763\n5146833\n5146837\n5146883\n5146894\n5146946\n5146961\n5147030\n5147039\n5147043\n5147058\n5147062\n5147150\n5147171\n5147208\n5147214\n5147232\n5147245\n5147306\n5147354\n5147415\n5147441\n5147478\n5147492\n5147498\n5147516\n8366158\n1975164\n1975198\n6133559\n9875420\n5147608\n5147638\n11856219\n1975546\n1975553\n1975571\n1975583\n1975597\n1975711\n1975733\n8329661\n1975793\n8160782\n1975805\n1975806\n10835542\n1975892\n1975897\n1975903\n1975964\n1975979\n5734539\n9356491\n9410573\n9548993\n1976163\n1976212\n1976213\n1976224\n1976228\n1976311\n1976462\n1976463\n1976469\n1976470\n1976483\n5147681\n6097233\n7973517\n1976928\n1977003\n1977007\n1977068\n5147819\n5147827\n5147834\n1977182\n1977184\n1977297\n5734420\n6133548\n5147917\n5147968\n5148043\n5148055\n5148115\n5148214\n5769028\n1977813\n1977833\n1977863\n6133582\n1977962\n1977967\n1978010\n1978034\n1978045\n1978056\n1978065\n1978114\n1978375\n1978385\n1978398\n1978405\n1978407\n1978422\n1978424\n1978445\n5734388\n1978499\n1978524\n1978529\n4524636\n4524638\n5734519\n6133560\n5148252\n10738407\n1978789\n1978821\n5734396\n1978977\n1978996\n1978999\n6133546\n1979021\n5148286\n1979222\n1979229\n1979308\n1979473\n1979521\n1979561\n1979562\n1979758\n1979781\n1979787\n1979801\n1979806\n1979822\n1980269\n5148436\n5148487\n1980521\n1980532\n11449815\n1980694\n1980811\n1980827\n1980917\n8421569\n1981063\n6133585\n1981357\n1981457\n1981696\n11173690\n10592969\n7345811\n7345813\n1981937\n1981938\n1981998\n1982007\n1982203\n1982221\n1982267\n1982291\n1982406\n1982500\n1982529\n1982541\n1982636\n1982865\n1982885\n1983052\n1983393\n1983442\n1983525\n1983528\n1983648\n1983755\n1983922\n1983999\n1984033\n11121180\n5149012\n1984734\n5149081\n5149136\n5149174\n5149203\n1984942\n1984949\n1985061\n1985152\n1985158\n1985167\n1985181\n1985191\n1985192\n1985228\n1985230\n1985573\n1985707\n6133659\n1985926\n1985993\n1986009\n1986032\n1986052\n1986054\n1986056\n1986061\n5734345\n1986157\n1986166\n1986171\n1986191\n1986220\n1986452\n1986508\n1986522\n1986575\n1986623\n1986650\n1986779\n1986787\n1986936\n5149308\n5149315\n6133614\n1987203\n1987204\n5768880\n1987362\n1987377\n1987527\n9137631\n1987629\n1987665\n1987740\n1987744\n1987766\n1987767\n1987775\n1987776\n1987786\n1987787\n6133591\n4524221\n11650277\n6133534\n11190148\n1988002\n5734451\n1988225\n1988257\n1988306\n1988420\n1988487\n1988593\n1988642\n8388883\n5149414\n5149438\n5734528\n6133644\n1989355\n1989393\n1989428\n1989942\n1990043\n1990050\n1990066\n1990088\n1990105\n1990150\n5734390\n1990551\n1990582\n5149474\n1991123\n1991179\n6133501\n5149609\n1991277\n1991310\n1991371\n1991378\n1991394\n1991779\n1991783\n5149836\n5149843\n10155932\n11098546\n11869776\n1991945\n5734515\n11635419\n1992066\n5149929\n5149986\n6133619\n5734398\n5880533\n5880539\n5880545\n5880550\n5880552\n5880559\n5880563\n8237343\n8632989\n7429212\n9442902\n9414984\n1989594\n4524740\n7990739\n4523560\n4524054\n4523461\n4524998\n4525034\n4524376\n4524822\n11828714\n4524712\n10422582\n10574156\n10632124\n4523522\n5880392\n6133595\n6133596\n6133597\n4523519\n4524070\n4524072\n4524955\n4524962\n10530208\n11555221\n4525078\n6133667\n6133670\n6133673\n6133674\n6133675\n7346249\n9220953\n9249651\n6133637\n6133620\n6133519\n11780161\n6133604\n6133607\n10629052\n7346237\n6133520\n6133562\n10864093\n5734379\n11548960\n7345819\n6133523\n6133525\n6133528\n6133542\n6133497\n6133498\n10477629\n6133575\n9962269\n6133517\n6133586\n6133635\n10175639\n9617411\n9932090\n7346256\n7345829\n11652557\n5734535\n7345801\n5734362\n11477039\n5880478\n6133540\n10755716\n5144190\n5146412\n5734482\n5149499\n5149659\n5149665\n5149704\n5149746\n5149768\n5149787\n5734422\n7443518\n5146303\n5146335\n5146342\n5146379\n1991462\n1991466\n4302268\n4524393\n1942522\n1942060\n1942067\n1942244\n1942251\n5141643\n10773498\n1942378\n1942383\n1942618\n1942621\n1942636\n1942697\n1942715\n1942769\n1942808\n1942836\n4689929\n5141677\n1942878\n1943212\n1943223\n1943236\n1943308\n1943397\n8178854\n8277078\n5141795\n1943505\n1943519\n1943619\n1943625\n1943757\n8073674\n8133678\n8273661\n1944462\n1944483\n1944503\n1944504\n1944521\n1944591\n1944778\n5141924\n1945066\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945286\n1945569\n1945589\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945877\n1945878\n5142001\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n7346354\n1946695\n1946731\n1946737\n1946738\n7389824\n1946916\n1946917\n1947117\n1947306\n1947335\n1947385\n1947409\n1947446\n1947449\n1947456\n1947491\n1947492\n1947496\n1947626\n1947661\n1947673\n1947703\n1947727\n1947740\n1947745\n1947753\n1947765\n1947775\n5734665\n1947805\n1947846\n1948061\n1948062\n1948073\n1948088\n5142213\n1948464\n1948465\n1948941\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n5142338\n5142352\n1949784\n1949794\n1949850\n1949877\n1949929\n5142499\n5142599\n8109173\n1950013\n7346356\n1950156\n1950169\n1950171\n1950302\n1950362\n1950521\n1950533\n1950879\n1950936\n1951157\n5977247\n5977257\n8270406\n7633472\n5142725\n5142729\n5142730\n4535396\n5142006\n5142032\n5142042\n1869512\n1952878\n1952883\n1952909\n10744228\n1800191\n5109821\n1758613\n9355953\n1758874\n1758878\n1759055\n1759069\n1759079\n1759083\n4533952\n7972792\n1759153\n1759177\n1759620\n1759667\n1759686\n5108636\n10329023\n1760104\n7444489\n1760593\n1760620\n1794361\n4534225\n1760857\n1760891\n4533255\n1760939\n1760943\n1761041\n1761438\n1761735\n1761778\n1762244\n6132749\n1762608\n1762657\n6132957\n1762680\n5109506\n5109523\n5109554\n5109599\n5109614\n5109646\n5109661\n5109670\n5109722\n1763610\n1763727\n1763741\n1764174\n1764553\n1764791\n1765010\n1765011\n1765017\n1765038\n1765044\n4534245\n4534252\n5109830\n5109843\n5109848\n5109855\n5109872\n5109882\n5109898\n5109931\n5109943\n8352161\n1765508\n1765658\n1765767\n1765954\n1766130\n1766131\n1766137\n1766210\n1766410\n7895336\n1766646\n1766741\n1766910\n11034779\n1767134\n1767368\n1767393\n1767511\n1767597\n1767625\n10575632\n1767655\n1767674\n5110120\n5734744\n5772169\n5772171\n5772172\n5772176\n5772178\n5772186\n5772196\n5772199\n5772202\n5772206\n5772210\n5802396\n5883914\n5883925\n6132943\n7345742\n7388922\n8045644\n1768117\n5110200\n1768341\n5110213\n1768568\n1768698\n1768702\n1768771\n1768815\n1768819\n5110256\n5110258\n1769057\n1769095\n1769194\n1769209\n1769505\n1769519\n1769566\n1769958\n1769978\n1770150\n1770172\n1770353\n1770477\n1770530\n4532696\n8393221\n1771385\n7725644\n1771509\n1771531\n1771555\n1772013\n1772094\n6133806\n1772169\n1772179\n5772129\n1772977\n1773163\n8222049\n1774272\n1774347\n1774470\n1774797\n4301304\n6115946\n4534046\n4534052\n4534057\n5772269\n4534719\n1775962\n1775963\n1776067\n1776330\n1776371\n1776619\n1776862\n6132861\n4534463\n1777253\n5110818\n5110871\n5110885\n1778074\n4534299\n1778109\n1778143\n5111481\n5111501\n5111535\n5111574\n5772222\n1779258\n1779435\n1779633\n1779641\n1779690\n1780378\n4533325\n1781233\n1781234\n5111974\n5111980\n1781803\n1781841\n1782168\n1782177\n1782341\n1782354\n1782457\n11763567\n1782543\n1782560\n1782579\n1782615\n1782627\n1782672\n1782726\n1782757\n1782763\n1782777\n1782803\n1782841\n1782872\n1782927\n1782948\n1783043\n6133026\n5112283\n5112291\n5714973\n5715004\n5734845\n5772349\n5772351\n1783855\n1783861\n1783971\n1784349\n1784359\n1784513\n1784761\n1784853\n4534290\n1785145\n1785162\n1785181\n1785185\n1785286\n4532886\n4532888\n4532890\n1785314\n1785322\n1785329\n1785361\n1785367\n1785883\n1785887\n1785888\n1785895\n1786007\n1786017\n8292872\n1786360\n1786448\n1786452\n1786515\n1786573\n1786619\n1786664\n1786902\n1787064\n1787112\n1787213\n1787267\n1787279\n1787367\n1787373\n1787381\n4687681\n9268082\n1787400\n1787504\n1787506\n1787590\n1787610\n1787631\n1787751\n1787770\n1787825\n1787841\n4534086\n1788522\n4534011\n1788846\n1788856\n1788917\n1789071\n1789076\n1789086\n4533924\n1789553\n4534166\n1789695\n1789730\n1789745\n1789753\n1789755\n1789957\n1790002\n1790072\n1790084\n1790153\n4533115\n1790361\n1790364\n1790376\n9174377\n1790625\n1791384\n1791422\n1791660\n1791784\n1792061\n1792292\n1792300\n1792335\n1792377\n1792411\n1792414\n1792418\n1792426\n1792431\n1792449\n1792475\n10684776\n1792768\n5113370\n1792996\n1793238\n1793243\n1793246\n7918000\n1793689\n1793877\n1793986\n1795065\n1795068\n4532908\n6133011\n1795215\n7869346\n7922810\n1795597\n1795854\n1795900\n1795957\n1796007\n1796117\n1796145\n1796169\n1796217\n4532700\n4688166\n4688169\n4688172\n1796423\n1796451\n1796463\n8105817\n1796678\n1797030\n1797735\n1798060\n4533431\n4533433\n4533444\n6133001\n6133002\n6133006\n6133007\n6133010\n1798090\n1798372\n11992983\n1798916\n1798922\n1798931\n1798971\n1798974\n1799135\n5113951\n1799695\n1799701\n1800004\n1800032\n1800149\n9536457\n6097260\n8742426\n4534389\n4534207\n10638451\n4532811\n4533273\n8890502\n4533202\n4534398\n6544687\n4534538\n4532269\n4533123\n4533125\n4534408\n4534533\n6132989\n6132762\n6133075\n5883985\n6132781\n8021109\n11478679\n10121804\n11311045\n5110644\n7654770\n6116899\n6132797\n1779334\n5114198\n1763072\n5109385\n5772063\n9038042\n8491927\n4534675\n4534681\n4534683\n4534685\n4534686\n1792555\n8108800\n1771634\n1771650\n1771675\n1771678\n1771698\n1770772\n1770821\n1770880\n1771040\n1771214\n1771245\n4533714\n6132931\n7940536\n1765751\n10841562\n5113847\n5113853\n5772309\n5108660\n5108671\n5108705\n5108724\n5108737\n5108752\n5108761\n5108787\n5108794\n5108796\n5734817\n6132880\n9243764\n1773904\n1759394\n1789512\n1789530\n4533360\n10933525\n5110282\n11566649\n11615549\n11731155\n4532203\n4532206\n4532208\n4532239\n4532253\n4532260\n4532266\n6115772\n6115820\n6115822\n6115830\n1782249\n1782273\n1782279\n1782289\n10063383\n1767293\n8363507\n9325654\n10458175\n10683012\n10702885\n1822487\n1822490\n1822493\n1822587\n1822610\n1822613\n1822787\n1822796\n1822819\n1822830\n1822848\n1822852\n1823294\n1823444\n6133742\n1823573\n5118565\n7346263\n6133720\n1823706\n10996761\n1823726\n5118582\n1824113\n1824117\n1824242\n5734235\n6133692\n7875265\n1824330\n1824338\n1824354\n1824390\n1824666\n1824751\n1824766\n1824845\n1824997\n1825064\n5118859\n1825077\n1825082\n1825083\n4534909\n4534914\n1825156\n1825176\n1825336\n7346284\n5118904\n7624468\n1825539\n5118974\n5118978\n1825786\n7345777\n1825920\n1825956\n1825967\n1825971\n1825983\n1826022\n1826033\n1826108\n1826129\n11322712\n5118996\n5119000\n6133700\n10510959\n11059353\n6133750\n1827125\n1827349\n1827408\n1827414\n1827484\n4534869\n6133691\n9883140\n5119181\n5119211\n5119223\n5119239\n5119245\n1827649\n1827650\n1827687\n1827711\n11435704\n1828162\n1828180\n4534872\n6201790\n7346286\n6133680\n6133681\n6133684\n6133687\n6133688\n7346276\n9921001\n5118837\n5118841\n7346271\n7346273\n9486293\n1822502\n1892554\n1892555\n5127748\n5806166\n11464595\n1892821\n5127835\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n7346346\n9963153\n1893137\n1893177\n1893204\n1893241\n1893266\n5792081\n5128034\n1893329\n1893341\n10055104\n10477747\n12106975\n1893526\n1893538\n1893546\n1893551\n1893558\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n9136904\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n1894164\n1894268\n5882039\n5128161\n5128169\n5128182\n7712938\n10398658\n1894714\n4535614\n4535630\n4535632\n4535636\n8049830\n10639484\n1894840\n4535827\n1895037\n4535809\n4535817\n1895159\n5128323\n5128326\n5128353\n5128357\n9804158\n1895448\n1895499\n1895527\n1895609\n1895667\n1895670\n1895867\n1895875\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896105\n1896141\n1896142\n1896152\n1896304\n5128519\n1896841\n1896915\n1896922\n1897664\n1897677\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n1897834\n1897873\n10383968\n1898234\n1898250\n1898286\n4299368\n5129293\n7346344\n1898434\n1898441\n1898521\n1898544\n5129378\n5129417\n1898946\n1898958\n1898970\n1898988\n1899071\n1899187\n1900093\n1900890\n1900897\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901832\n1901850\n5130369\n5130392\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902533\n1902543\n1902560\n1902568\n1902572\n1902586\n1902749\n8140883\n8189761\n4535689\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130908\n5130944\n5130971\n5131058\n9968404\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n6221746\n1905383\n1905396\n1906552\n8208583\n1907430\n1907432\n1907436\n1907475\n1907498\n1907511\n1907534\n1907541\n1907547\n1907576\n1907580\n1907620\n1907625\n1907637\n1907666\n1907672\n1907687\n4535754\n5881946\n7976131\n1908352\n1908367\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909398\n1909607\n1909649\n1909659\n1909810\n1909818\n1909838\n1909854\n1909865\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n1911093\n1911112\n1911168\n1911198\n1911278\n1911298\n1911300\n1911461\n1911503\n7728366\n5133687\n5133689\n1911633\n4535592\n4535596\n1911736\n1911755\n7809779\n8078362\n5133693\n5133695\n1912325\n1912372\n1912395\n1912428\n1912470\n4299535\n4299565\n4299576\n4299597\n4299599\n5133920\n5133990\n5772890\n7428726\n10097687\n10137350\n4535581\n5134098\n5134301\n8312017\n1913091\n1913105\n1913175\n1913178\n1913328\n5134469\n5134517\n5134559\n5134661\n5134667\n5134682\n5134693\n5134810\n5135026\n5135191\n5135355\n5714507\n7738295\n8233062\n8314088\n9915028\n9967126\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915154\n1915160\n1915262\n1915270\n1915275\n1915325\n1915332\n8669164\n11372793\n11516142\n11535847\n5135643\n5136306\n1916376\n1916410\n1916412\n1916509\n7854318\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137156\n5137166\n5137291\n5137330\n5137388\n1918026\n1918321\n1918394\n1918406\n1918408\n1918411\n1918416\n1918467\n1918495\n1918497\n1918509\n1918517\n1918532\n1918533\n1918547\n1918553\n1918554\n1918627\n1918667\n1918669\n1918736\n1918776\n1918843\n1918854\n8035998\n11645316\n4535618\n4535620\n4535510\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n5130587\n5130682\n7762841\n10376507\n5131096\n5131142\n5131192\n5131256\n5131293\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n5131585\n5131593\n10228568\n10277877\n10508423\n11425145\n5132154\n5132183\n5132191\n5132238\n5132479\n7346328\n7346335\n8001799\n5806167\n5881397\n6100725\n6100726\n7642610\n5135513\n5135546\n11525418\n1896957\n5128569\n5128587\n5128644\n5128663\n5129000\n5129025\n5129091\n9087922\n10201273\n5131910\n5881551\n8138711\n8549720\n1910576\n1910628\n1910629\n1910648\n1910662\n1902143\n1902182\n1899349\n1899433\n1899818\n5129913\n7768674\n7934873\n8168644\n8393082\n1914701\n1914708\n1914734\n1914749\n7346340\n1918584\n1951370\n1951412\n1951462\n1951505\n1951507\n1951522\n1951529\n1951542\n1951557\n5142870\n1951631\n9512631\n1951649\n1951671\n1951675\n1951747\n9156165\n1951791\n5734305\n1951818\n1951840\n1951844\n1951859\n1951874\n1951881\n5734326\n1951919\n1952014\n1952034\n1952052\n1952062\n1952147\n1952175\n1952177\n1952229\n5142948\n1952281\n5143007\n5143048\n5143049\n5143076\n5143080\n1952449\n1952481\n1952532\n10782264\n1952551\n1952611\n1952685\n1952704\n5143116\n5143129\n5143147\n1952816\n1952857\n9502606\n5885428\n8604089\n6097228\n1868211\n1868409\n4702564\n1868499\n6544581\n1868470\n5141581\n5141590\n1735121\n1941864\n5121613\n1842097\n1842485\n4301036\n1842695\n9755262\n1843564\n1843602\n1730519\n1730543\n8292351\n5101394\n1730948\n1730978\n1731263\n4525641\n1731598\n10450446\n8008237\n8130866\n8402212\n1872359\n1872361\n1872368\n1878626\n6133117\n1878744\n1878782\n1878862\n1878879\n1878895\n1878904\n1878939\n1879001\n1879125\n1879141\n1879227\n1879337\n1879339\n1879340\n1879379\n5734212\n1879408\n1879452\n1879471\n1879490\n5126212\n5126217\n1879630\n1879691\n1879731\n1879735\n1879765\n10915497\n1879970\n1880062\n1880064\n1880138\n1880140\n1880143\n5126635\n5126637\n1880353\n1880451\n1880464\n1880465\n9524458\n6133225\n1880852\n1880858\n1880907\n1880931\n1880968\n1881089\n1881121\n1881126\n1881151\n1881170\n9819403\n4531687\n1881293\n1881320\n1881329\n1881336\n1881340\n1881362\n1881515\n4531713\n1881834\n1881964\n1882021\n1882210\n1882253\n1882266\n1882272\n1882310\n5126834\n1882753\n1882767\n1882771\n1882884\n1882901\n1882905\n10156181\n1882930\n1882941\n1882960\n1882965\n1883067\n1883161\n1883386\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884061\n4531690\n1884212\n4531708\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884461\n1884465\n1884479\n1884671\n6120980\n1884774\n1884816\n1884835\n1884844\n1884858\n1884877\n1884890\n4532122\n1884908\n1884909\n4532146\n1884970\n1885012\n1885262\n1885263\n1885569\n1885623\n1885630\n6133181\n1885745\n1885763\n1885826\n1885836\n1885919\n1885937\n1885945\n1885994\n1886015\n1886084\n1886088\n1886241\n1886251\n1886320\n1886362\n8223165\n1886526\n1886587\n1886700\n1886720\n1886726\n1886729\n7562564\n1886929\n1887054\n1887290\n1887509\n1887586\n4531670\n1887691\n1887701\n1888027\n1888040\n1888092\n4531968\n1888324\n1888346\n10922411\n1888484\n1888537\n1888579\n1888619\n1888733\n1888743\n1888759\n1888891\n1888893\n1888906\n1888911\n1888913\n9535420\n1889039\n1889043\n1889053\n1889071\n1889074\n1889239\n1889249\n1889270\n1889272\n1889277\n1889287\n1889356\n1889358\n1889370\n1889531\n1889552\n1889563\n1889942\n1890012\n1890031\n5127521\n1890097\n1890187\n9519191\n1890287\n1890320\n1890335\n1890343\n7543006\n10180624\n1890410\n1890487\n1890512\n1890522\n1890534\n1890576\n1890656\n1890670\n1890699\n1890724\n1890772\n1890776\n1890898\n1891059\n1891129\n1891167\n1891177\n1891190\n1891217\n1891326\n1891339\n1891366\n1891386\n1891426\n1891473\n1891493\n1891494\n4532022\n4532024\n1891533\n1891583\n1891636\n1891758\n1891889\n1891936\n1892153\n1892242\n1892245\n1892476\n10141437\n11056379\n9674732\n1884255\n1884370\n1884403\n5884851\n6133139\n6133140\n6133141\n5771877\n10227418\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10513366\n10502505\n10397209\n6133154\n10959264\n6133158\n10375403\n5126675\n5126680\n7446048\n8532380\n8537359\n8823068\n8858121\n9100030\n9137965\n1886374\n1889716\n1889765\n1889833\n5127592\n5127609\n5127629\n5127644\n5127656\n5127669\n5127675\n5127683\n5127688\n5127698\n5802339\n1887108\n4532050\n4532088\n4532095\n6121184\n1888638\n1888639\n1883885\n4532150\n4532160\n5771880\n10410699\n1846111\n1846133\n1939597\n1830879\n1831009\n1831136\n4708183\n1854202\n5122430\n5122439\n1854615\n1854824\n1854849\n4526050\n1858637\n1858674\n1858698\n1858775\n1858930\n1859046\n1859177\n1859305\n1859453\n9749806\n6133397\n1859932\n1860026\n4536472\n4536483\n1973467\n5123180\n5123221\n1864897\n1865593\n10014340\n1865650\n1865659\n1865660\n1865666\n1865671\n9914882\n9972403\n1865930\n1866237\n5734291\n1866356\n6106943\n1866491\n1866530\n1866549\n1866556\n1866568\n1866573\n9906979\n5124880\n5124911\n10047346\n1867820\n1867928\n8439879\n9983244\n1867991\n1867993\n11643393\n11670751\n11729388\n5124673\n5124716\n5120278\n1841813\n1841946\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861510\n1861644\n1861663\n1861665\n1861673\n1861697\n1861705\n1861714\n1861721\n1861797\n1861842\n1861862\n5123674\n1861933\n1861936\n1861937\n1861938\n1861949\n1861951\n6106744\n1861975\n1862008\n1862026\n1862061\n1862066\n1862072\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n10374414\n11907754\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1862572\n1862578\n1862580\n1862692\n1862719\n1862765\n1862774\n1862837\n1863034\n5123922\n5734719\n1863354\n1863388\n1863394\n1863467\n1863646\n5124007\n5124029\n9310369\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n9578319\n1864126\n1864135\n1864161\n8133328\n1864358\n1864377\n5124121\n5124143\n5124233\n11738734\n11954157\n1864652\n5124300\n5124304\n5124305\n5124332\n5124348\n5124374\n5124415\n5124433\n1864793\n1864796\n5734713\n5885399\n6099041\n6106759\n7346401\n10193618\n6106647\n5123815\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123889\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1992883\n10842838\n10994020\n1993036\n1993043\n1993419\n1993496\n6133769\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n6132715\n1953407\n1953423\n1953729\n11467944\n6132725\n6132726\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1830099\n1830380\n1830407\n1754135\n1754263\n5105642\n1754332\n1754368\n1754380\n1754400\n1754465\n1754511\n1754516\n1754535\n11737872\n12075408\n11175615\n1754902\n1754919\n1754933\n1755131\n5734138\n1755237\n1755248\n1755253\n1755276\n5106115\n5106160\n5106249\n5107076\n5107219\n5107644\n7410701\n7674502\n7778368\n7903078\n7955974\n8201251\n8426357\n1757652\n5108318\n5108334\n5108335\n11140464\n11860016\n1757853\n5108346\n5108349\n4522753\n9004359\n1939688\n1829322\n1855630\n1855747\n8734090\n1856105\n1856289\n5122798\n1856384\n1856620\n1856668\n1856768\n1856867\n1856971\n1857258\n1857267\n1857380\n1857581\n1857626\n1857828\n1857829\n1857924\n1857938\n1857978\n1858163\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937754\n1937769\n1937792\n1937819\n1937826\n1937847\n1937856\n1937892\n1937911\n1937931\n1937937\n1937966\n1937975\n1937988\n1938007\n1938029\n1938052\n1938058\n1938069\n1938074\n1938088\n1938114\n1938122\n1938125\n1938129\n1938131\n1938147\n1938156\n1938162\n1938168\n1938174\n4692485\n4692504\n4693382\n5734569\n8225376\n9017206\n1936969\n1936988\n1936993\n1937011\n1937037\n1937055\n5141144\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937490\n1937514\n1937530\n10761559\n1937556\n1937566\n1937570\n1937580\n1937582\n1937594\n1937613\n1938214\n1938226\n1938230\n1938233\n1938300\n1938520\n1938612\n1938796\n1938810\n1938955\n1939056\n1939086\n1939156\n1939168\n1939180\n1939215\n1939225\n5141311\n5141317\n5141262\n5141291\n5141305\n8546322\n8574752\n1835031\n5770913\n1835098\n1837172\n1839560\n1841159\n5770922\n5770942\n4529032\n12188993\n1800238\n10213314\n1800441\n6133777\n1800528\n1800539\n10737993\n1800562\n1800572\n1800686\n1800691\n1800696\n1800821\n5114394\n5114400\n5114409\n11873966\n4534796\n4534798\n9544823\n1800881\n5114425\n1800934\n6133780\n1801000\n1801001\n1801051\n1801073\n1801080\n1801084\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n4534773\n4534776\n4534778\n4534779\n4534782\n6112606\n6112613\n6112661\n6133809\n6133811\n6133813\n6133814\n9894093\n1801993\n1802090\n8883183\n1802113\n1802120\n1802229\n1802244\n1802280\n1802337\n1802702\n1802783\n1802827\n1802833\n1802919\n1802939\n1803022\n1803035\n1803039\n1803060\n1803065\n1803073\n1803078\n1803108\n10942408\n4534767\n4534769\n6133803\n5114303\n5114311\n8244266\n10987178\n", @@ -36,6 +36,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 2745,\n \"sha256\": \"c875cfc913ccdd2c491daaecb2b1750935277900e7b9644dca45bf87bb73cab1\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 1858,\n \"sha256\": \"8b9b609e7d908dfecbaebe4f39ace3c889587e573001e5d246615ef828d97ed8\"\n },\n \"NOTICES.md\": {\n \"size\": 1782,\n \"sha256\": \"63695acbd3a1245f69e979ee4ee3dbb602cf10e6964d9e6ff04aa9dfc7eeccb0\"\n },\n \"PRESETS.md\": {\n \"size\": 5725,\n \"sha256\": \"4808fe3221f0431758be5b56364817bdcb81eda2648d3732bc3cd54f73652ee6\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9699,\n \"sha256\": \"4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14477,\n \"sha256\": \"ed61d7744f79b849f79f75fe40c84eb31d46179e05d32eb5f66f4202d69b5259\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15600,\n \"sha256\": \"62f438f079463e7fa592418c593e590f8fec223853877e6343f261c72cb9aa67\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 2745,\n \"sha256\": \"c875cfc913ccdd2c491daaecb2b1750935277900e7b9644dca45bf87bb73cab1\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 1858,\n \"sha256\": \"8b9b609e7d908dfecbaebe4f39ace3c889587e573001e5d246615ef828d97ed8\"\n },\n \"NOTICES.md\": {\n \"size\": 1782,\n \"sha256\": \"63695acbd3a1245f69e979ee4ee3dbb602cf10e6964d9e6ff04aa9dfc7eeccb0\"\n },\n \"PRESETS.md\": {\n \"size\": 5847,\n \"sha256\": \"ad2b0ff489156813358578134bb122a2404c9942f3ef81325e42e313dcd6d3cd\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9704,\n \"sha256\": \"d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14477,\n \"sha256\": \"ed61d7744f79b849f79f75fe40c84eb31d46179e05d32eb5f66f4202d69b5259\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15725,\n \"sha256\": \"eb94b47baf91ec767d54f1cc6ed7d668c44c159c8fe62acaac61f0d0c127423a\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index cfe33bb..3801205 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -56,14 +56,14 @@ conditional on the selected list. The reconstruction details below concern the two unchanged legacy presets; new filters and thresholds are defined in [preset-definitions.toml](preset-definitions.toml). -New presets provisionally require **at least 3 regional metadata rows and at least +New V3 presets require **at least 3 regional metadata rows and at least 25 global rows**. Both minima are inclusive. This replaces the initial one-row -draft and remains subject to a final qualification decision. The snapshot already +draft and is the selected V3 policy. The snapshot already has at least 50 global rows for every model species, so the global gate currently excludes nothing further. Australia changes from 1,907 to 1,874 species, Tasmania -from 401 to 274, and Japan from 974 to 697. Decide whether to count distinct GBIF -observations before finalizing: multiple image rows are not necessarily independent -occurrence evidence. A local Tasmania check gives 274 species with either three +from 401 to 274, and Japan from 974 to 697. V3 preserves these evaluated memberships; +counting distinct GBIF observations would require a future preset revision. Multiple +image rows are not necessarily independent occurrence evidence. A local Tasmania check gives 274 species with either three rows or three distinct `gbifID` values. Both legacy lists remain unchanged. | Preset | Species | Construction and evidence | Limits | diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py index a105537..98a78a0 100644 --- a/dev/releases/mambo_v3/build_bundle.py +++ b/dev/releases/mambo_v3/build_bundle.py @@ -91,7 +91,8 @@ def write_json(relative, data): lines = [ "# Presets", "", - "Geographic minima are provisional; rows include all metadata splits.", + "V3 uses metadata row counts, including all splits, without further deduplication. " + "New lists require at least 3 regional and 25 global rows; legacy lists preserve their historical membership.", "", "| Preset | Species | Regional/global minimum rows | Scope |", "|---|---:|---|---|", diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 59ac7fe..0a6421c 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -144,17 +144,18 @@ def build(metadata, evidence_root, write=False): "Each row counts once even if it matches both a country and a continent predicate. " "Full uses all model species without a regional threshold. Lists retain the model's species order.", "", - f"**Provisional qualification:** new presets require at least {regional_minimum} regional rows and " - f"at least {global_minimum} global rows for a species. These inclusive thresholds are a working proposal, " - "pending the final release decision. They reduce weak occurrence evidence but do not prove that records are independent " + f"**V3 qualification policy:** new presets require at least {regional_minimum} regional rows and " + f"at least {global_minimum} global rows for a species. These inclusive thresholds " + "reduce weak occurrence evidence but do not prove that records are independent " "or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, " "not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate.", "", f"In this pinned snapshot every model species has at least {min(global_counts.get(label, 0) for label in vocabulary)} " f"global rows; {sum(global_counts.get(label, 0) < global_minimum for label in vocabulary)} model species fall below " - f"the proposed global minimum of {global_minimum}. " - "Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, " - "and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty.", + f"the global minimum of {global_minimum}. " + "V3 retains row counts to preserve the evaluated memberships. Counting distinct GBIF observations instead would " + "require a future preset revision and assessment of rare-species coverage. " + "The rule is reproducible, not a claim of ecological certainty.", "", "`europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). " "Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. " diff --git a/dev/releases/mambo_v3/check_download_install.py b/dev/releases/mambo_v3/check_download_install.py index d160308..f9ee161 100644 --- a/dev/releases/mambo_v3/check_download_install.py +++ b/dev/releases/mambo_v3/check_download_install.py @@ -14,6 +14,9 @@ from mambo_deploy import Predictor, download image, output = map(Path, sys.argv[1:]) +cache = os.environ.get("MAMBO_CACHE") +if not cache or (Path(cache).exists() and any(Path(cache).iterdir())): + raise RuntimeError("Set MAMBO_CACHE to a new or empty directory to qualify actual downloads") urls = [] original = download.urlopen @@ -31,6 +34,8 @@ def fetch(url, **kwargs): assert plain.labels == embedded.labels assert vectors.shape == (1, 1280) and np.isfinite(vectors).all() np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) +if not urls: + raise RuntimeError("No model assets were downloaded; automatic download was not qualified") os.environ["MAMBO_OFFLINE"] = "1" diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 433211f..4a1904a 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -38,8 +38,8 @@ Shared `mini_trainer` changes still require a feature/fix branch and reviewed me `mambo_predict`; API/CLI default to global; CLI writes batches incrementally and publishes only complete outputs; the streaming read-window default grows with batch size; the native extra selects the matching training-package series. Arrays retain explicit CHW input - to avoid guessing ambiguous layouts. These changes need final installed-bundle - qualification below. + to avoid guessing ambiguous layouts. These changes passed the installed-bundle + qualification recorded below. Retain V2 entry-point and format compatibility where promised; distinguish that from identical vocabularies, scores or embeddings. @@ -106,7 +106,7 @@ No published package was changed. Focused contracts: 96 passed, four GPU-dependent skips, across the initial run and correction of a generator stub in the new read-window test. Static checks and the required minimal installed training-wheel check passed. The renamed deployment -wheel builds; final installed ONNX/native bundle checks remain ahead. No performance +wheel builds; the final installed ONNX/native bundle checks are recorded below. No performance or quality evaluation was rerun. The automatic model cache now stores verified weight bytes by SHA-256 and reuses @@ -140,3 +140,21 @@ remains prohibited. Model-weight licensing and initialization attribution are pending owner decisions. Training source revision is explicitly unknown in the retained materials. After those decisions, refresh final notices/metadata and the artifact inventory; do not substitute a historical checkout or invent permission. + +## Final preparation audit + +| Requirement | Current evidence / remaining work | +| --- | --- | +| Simple distribution and stable model selection | `mambo-v3` distribution, embedded immutable asset hashes, supplied-wheel installation and future PyPI commands; global default. No repository checkout needed for consumer installs. | +| API/CLI and V2 migration | Installed checks above; README documents inputs/outputs, independent rank labels, embeddings, TTA, region/custom lists and migration. Sole CLI owner and bounded output writing verified. | +| Quality and speed presentation | README retains Flemming, in-domain, laptop and HPC figures; linked pages identify protocols and historical/current timing boundaries. No new measurements required. | +| Preset definitions | Selected V3 row-count policy; all 25 lists reconstructed unchanged from pinned metadata. Updated definition hashes and embedded descriptor verified. | +| Offline/download behavior | Installed automatic download/offline/relocation checks plus nine cache tests. Download checker now requires an empty cache. | +| Reusable evidence and portability limits | `evidence-policy.md`, model card and linked evidence; browser integration described as a path, not a tested platform. | +| Packaging and handoff | Local wheels, source distribution, bundle, checksums and qualification records; `publication.md` covers human publication and rollback. | +| Final notices and immutable candidate | Pending model-weight license and initialization attribution. Then refresh artifacts and verify only the changed metadata/installation boundary, reusing identical runtime evidence. | + +The refreshed preset metadata is staged in source and +`local-evidence/mambo-freeze/preset-policy-bundle/`; the earlier installed wheel +identities remain historical qualification evidence. Do not describe those wheel +hashes as the final notice-complete release. No publication was performed. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index 3adb3c3..5916109 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -33,6 +33,8 @@ These are execution and packaging checks, not new accuracy or speed experiments. The checkpoint and best epoch 30 are verified. The retained training material does not identify the exact training Git revision; the documented packaging checkout is not a substitute. The initialization checkpoint lineage and required attribution remain an owner question. A model-weight license is also awaiting designation. These are explicit finalization blockers, not grounds to alter the validated runtime or rerun the performance campaign. -The preset row-count policy remains the documented candidate rule (3 regional / 25 global for updated lists, legacy membership unchanged). Final packaging must make its selected status explicit without changing membership or silently deduplicating observations. +The V3 preset policy is now explicit: 3 regional / 25 global metadata rows for updated lists, legacy membership unchanged. Reconstruction from the pinned Parquet confirms all 25 preset memberships and counts are unchanged. Distinct-observation deduplication is deferred to a future preset revision, rather than silently altering evaluated membership. + +The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to this installed candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above still identify the earlier installed candidate, not a rebuilt final release. Final owner-driven documentation/notice changes will require refreshed bundle metadata and artifact hashes. Reuse these runtime checks for byte-identical code and weights; verify the rebuilt metadata/installation boundary instead of rerunning model evaluation. diff --git a/dev/releases/mambo_v3/preset-definitions.toml b/dev/releases/mambo_v3/preset-definitions.toml index 0a82fe8..09394c4 100644 --- a/dev/releases/mambo_v3/preset-definitions.toml +++ b/dev/releases/mambo_v3/preset-definitions.toml @@ -1,5 +1,5 @@ schema_version = 2 -qualification_status = "provisional; pending final release decision" +qualification_status = "selected for MAMBO_v3; metadata row-count policy" minimum_regional_rows = 3 minimum_global_rows = 25 # Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union. diff --git a/dev/releases/mambo_v3/preset-manifest.toml b/dev/releases/mambo_v3/preset-manifest.toml index ecab853..775e60f 100644 --- a/dev/releases/mambo_v3/preset-manifest.toml +++ b/dev/releases/mambo_v3/preset-manifest.toml @@ -1,8 +1,8 @@ schema_version = 2 -qualification_status = "provisional; pending final release decision" +qualification_status = "selected for MAMBO_v3; metadata row-count policy" source_sha256 = "094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe" model_manifest_sha256 = "a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b" -definitions_sha256 = "4f6f269417c3c3aa1dbba184230c8bf1d34bd839bda149375bd0fec390630e97" +definitions_sha256 = "d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6" minimum_regional_rows = 3 minimum_global_rows = 25 diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md index 13c70bf..ad49006 100644 --- a/docs/mambo-v3-evaluation.md +++ b/docs/mambo-v3-evaluation.md @@ -28,7 +28,7 @@ Updated Europe adds 72 candidate species and updated northern Europe adds 222, with no removals. Those broader choices slightly reduce accuracy on Flemming; choose a preset for its documented geographic scope, not its test-set score. The [preset catalogue](model-presets.md) describes the occurrence filters and -provisional minimum counts. This European dataset does not qualify the usefulness +documented minimum metadata-row counts. This European dataset does not qualify the usefulness of every other geographic preset. Macro-F1 follows the pinned `mini_metrics` implementation, including predicted-only diff --git a/docs/model-presets.md b/docs/model-presets.md index d2a2c04..374316f 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -6,9 +6,9 @@ These overlapping deployment presets aim to avoid most geographically nonsensica Each geographic preset applies the minimum row count shown below. Counts use all existing splits, including held-out rows, without further deduplication. Each row counts once even if it matches both a country and a continent predicate. Full uses all model species without a regional threshold. Lists retain the model's species order. -**Provisional qualification:** new presets require at least 3 regional rows and at least 25 global rows for a species. These inclusive thresholds are a working proposal, pending the final release decision. They reduce weak occurrence evidence but do not prove that records are independent or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate. +**V3 qualification policy:** new presets require at least 3 regional rows and at least 25 global rows for a species. These inclusive thresholds reduce weak occurrence evidence but do not prove that records are independent or correctly geolocated: multiple images may belong to one observation. The global count measures available examples, not demonstrated model quality. Legacy presets retain their historical >25 regional-row rule with no new global gate. -In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the proposed global minimum of 25. Before finalizing qualification, decide whether regional evidence should count distinct GBIF observations instead of rows, and assess the effect on rare-species coverage. The present rule is reproducible, not a claim of ecological certainty. +In this pinned snapshot every model species has at least 50 global rows; 0 model species fall below the global minimum of 25. V3 retains row counts to preserve the evaluated memberships. Counting distinct GBIF observations instead would require a future preset revision and assessment of rare-species coverage. The rule is reproducible, not a claim of ecological certainty. `europe` and `north_europe` preserve MAMBO_v2 membership while the V3 deployment default is global (`full`). Choose `europe_v3` or `north_europe_v3` for the new occurrence thresholds with the same explicit geographic filters. Parenthesized countries have ambiguous historical inclusion and leave the legacy list unchanged; that equivalence does not establish equivalence at the lower threshold, so they are not silently added. The deployment API discovers all lists from the bundle; Flemming evaluation favours legacy north_europe; updated membership remains an explicit broader option. From c58e1effea804d2ee9648b29ccf63842ed597d07 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 14:22:34 +0200 Subject: [PATCH 097/221] docs: record refreshed candidate inventory and retained qualification --- dev/releases/mambo_v3/deployment-freeze.md | 12 +++++++----- dev/releases/mambo_v3/final-qualification.md | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 4a1904a..529862a 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -135,7 +135,7 @@ offline reuse, native CPU, and native/ONNX laptop CUDA. Installed package payloa were compared with the built wheels; the two-package install has one CLI owner. No performance/quality campaign was rerun. Runtime source is `0bfb5d7`. -Artifacts are prepared in `local-evidence/mambo-v3-release-candidate/`; publication +Current artifacts are prepared in `local-evidence/mambo-v3-release-candidate-d6d19e0/`; publication remains prohibited. Model-weight licensing and initialization attribution are pending owner decisions. Training source revision is explicitly unknown in the retained materials. After those decisions, refresh final notices/metadata and the @@ -154,7 +154,9 @@ artifact inventory; do not substitute a historical checkout or invent permission | Packaging and handoff | Local wheels, source distribution, bundle, checksums and qualification records; `publication.md` covers human publication and rollback. | | Final notices and immutable candidate | Pending model-weight license and initialization attribution. Then refresh artifacts and verify only the changed metadata/installation boundary, reusing identical runtime evidence. | -The refreshed preset metadata is staged in source and -`local-evidence/mambo-freeze/preset-policy-bundle/`; the earlier installed wheel -identities remain historical qualification evidence. Do not describe those wheel -hashes as the final notice-complete release. No publication was performed. +The refreshed candidate was built from `d6d19e0` and installed for metadata checks. +Runtime payload identity allows reuse of the earlier execution checks. Its inventory +now includes the qualification reports and reuse rationale; all 128 file hashes +and compressed/expanded bundle agreement passed. See the exact wheel identities in +[final qualification](final-qualification.md). This is ready for owner review, but +not a notice-complete public release. No publication was performed. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index 5916109..4bc95e7 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -1,8 +1,8 @@ # MAMBO V3 installed-candidate qualification -25 September 2026. Prepared runtime source: `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`. No publication, tag or public pointer change was performed. +25 September 2026. Current candidate source: `d6d19e0f157a0c17b2b6a735b3f6c638f62c060d`. Runtime execution qualification: `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`, reused by the payload-identity checks below. No publication, tag or public pointer change was performed. -Local artifacts: `local-evidence/mambo-v3-release-candidate/`. The directory contains deployment wheel/source distribution, matching training wheel, a 406 MiB compressed offline bundle, public evidence and a complete artifact inventory. Qualifications are retained in its `qualification/` directory. +Current local artifacts: `local-evidence/mambo-v3-release-candidate-d6d19e0/`. The earlier `local-evidence/mambo-v3-release-candidate/` is retained as execution evidence. The directory contains deployment wheel/source distribution, matching training wheel, a 406 MiB compressed offline bundle, public evidence and a complete artifact inventory. Qualifications are retained in its `qualification/` directory. ## Verified boundaries @@ -22,10 +22,12 @@ Local artifacts: `local-evidence/mambo-v3-release-candidate/`. The directory con | Artifact | SHA-256 | |---|---| -| `mambo_v3-0.3.0-py3-none-any.whl` | `684b4f12bb3183390ccbbf0b3f510bef54c3ded08c4e0cec64a77f16d4e3efac` | +| `mambo_v3-0.3.0-py3-none-any.whl` | `3872e594b93a5cda7de519657ef4037244fdf42066c507da4d94959e3d1b7dee` | | `mini_trainer-0.3.0-py3-none-any.whl` | `0cf47254f962803b786c50310ca4ee40fe4710beaa0a9534386b73cd08f6883e` | -The manifest hashes the expanded bundle, archive, wheels, source distribution and public evidence. `qualification/validation.json` binds the test records to the installed wheel identities. Qualification report hashes are retained there; raw input paths remain in local evidence only. +The manifest covers 128 files, including the expanded bundle, archive, wheels, source distribution, public evidence and qualification records. `SHA256SUMS` also covers the manifest itself. The 44 files in the compressed bundle match the expanded bundle. All inventory hashes were verified. + +`qualification/validation.json` binds retained execution reports to the earlier wheels and records why they apply to the current candidate: the matching training wheel is identical, and the deployment wheel differs only in `default_bundle.json` and its checksum record. The new wheel was installed in the clean ONNX environment; its 17 payload files match the wheel. Offline metadata bootstrap, global default, embedded/expanded bundle agreement and sole CLI ownership passed. No inference or speed campaign was repeated. Report hashes and the earlier validation record are included; raw input paths remain in local evidence only. ## Scope and remaining decisions @@ -35,6 +37,6 @@ The checkpoint and best epoch 30 are verified. The retained training material do The V3 preset policy is now explicit: 3 regional / 25 global metadata rows for updated lists, legacy membership unchanged. Reconstruction from the pinned Parquet confirms all 25 preset memberships and counts are unchanged. Distinct-observation deduplication is deferred to a future preset revision, rather than silently altering evaluated membership. -The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to this installed candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above still identify the earlier installed candidate, not a rebuilt final release. +The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to the earlier execution-qualified candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above identify the rebuilt candidate with this policy; final owner-driven notices remain outstanding. Final owner-driven documentation/notice changes will require refreshed bundle metadata and artifact hashes. Reuse these runtime checks for byte-identical code and weights; verify the rebuilt metadata/installation boundary instead of rerunning model evaluation. From 97521aca80b714a3c728c5782a9fa2f13eed652e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 17:16:37 +0200 Subject: [PATCH 098/221] docs: prepare noncommercial share-alike weights and initialization notices --- deployment/README.md | 4 + deployment/mambo_deploy/default_bundle.json | 11 +- dev/releases/mambo_v3/MODEL_CARD.md | 13 +- dev/releases/mambo_v3/MODEL_LICENSE.txt | 170 ++++++++++++++ dev/releases/mambo_v3/NOTICES.md | 73 +++++-- dev/releases/mambo_v3/build_bundle.py | 9 +- dev/releases/mambo_v3/deployment-freeze.md | 219 +++++-------------- dev/releases/mambo_v3/final-qualification.md | 8 +- dev/releases/mambo_v3/model-provenance.toml | 18 +- dev/releases/mambo_v3/prepare_candidate.py | 5 +- dev/releases/mambo_v3/publication.md | 7 +- 11 files changed, 332 insertions(+), 205 deletions(-) create mode 100644 dev/releases/mambo_v3/MODEL_LICENSE.txt diff --git a/deployment/README.md b/deployment/README.md index 3626743..27cea0e 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -6,6 +6,10 @@ package or GPU is needed for ONNX/CPU**. Both backends use the same API, regiona lists and output format. The comparisons below show quality and speed against V2, including CPU, laptop GPU and server GPU measurements. +**Weights: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) +(non-commercial, share-alike). Adapter code: MIT.** +[Model notices](../dev/releases/mambo_v3/NOTICES.md) explain attribution and scope. + This candidate is not yet published; the examples use the supplied release wheels. Model files download automatically from public ERDA storage on first use and are verified and cached. Reuse one predictor across calls. diff --git a/deployment/mambo_deploy/default_bundle.json b/deployment/mambo_deploy/default_bundle.json index 1323224..d3a63a6 100644 --- a/deployment/mambo_deploy/default_bundle.json +++ b/deployment/mambo_deploy/default_bundle.json @@ -1,13 +1,14 @@ { "metadata": { "CODE_LICENSE": "Copyright 2026 Asger Svenning\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n", - "MODEL_CARD.md": "# MAMBO V3\n\nUnpublished release candidate: EfficientNetV2-S trained on global-lepi in September\n2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon\nIDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary.\nNo quantized model is included. Embeddings have 1,280 dimensions and unit length.\n\nUse the release README for installation, input/output formats and configuration.\nGlobal is the default. Region presets and custom class lists constrain eligible\nspecies; they are permissive occurrence filters, not native-range maps. Taxonomic\nranks are predicted independently. Optional TTA uses `rotation30_pad25_3`.\n\n## Intended use and evidence\n\nLocal moth/butterfly image classification and downstream integration. Both\nFlemming monitoring crops and the original global-lepi test split have completed\nV2/V3, backend and TTA comparisons. Their different domains produce different TTA\nresponses; neither establishes accuracy for every deployment. Regional vocabulary\nand confidence thresholds affect the results. Consult the README's figures and\nlinked evidence for macro metrics, acceptance coverage, support truncation and\ncalibration policy. Laptop and B200 timings have distinct environment/workload\nboundaries and do not establish universal hardware throughput.\n\nThe Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes.\nONNX offers a path to browser and other native-runtime integrations; those require\nmatching preprocessing and are not automatically qualified by Python execution.\nNo complete Windows/macOS/edge-device compatibility claim is made.\n\n## Training and artifact identity\n\nThe checksum-verified training console reports the best model at epoch **30**.\n`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and\ntraining log with immutable hashes and public source URLs. The retained materials\ndo not identify the exact training Git revision or fully establish the upstream\ninitialization lineage. The recorded September 11 checkout is packaging provenance,\nnot a claimed training revision. The trained checkpoint itself is identified and\ncan be loaded without retraining or downloading an initialization model.\n\n`release.json` covers the graph/external-weight files, presets, preprocessing,\nvocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml`\nrecord list construction. Read `NOTICES.md` for code, model and source-data boundaries.\n\n## Publication status\n\nThe model-weight license is awaiting owner designation. The code's MIT license\nmust not be presented as a weight/data license. Do not publish this candidate until\nthat decision and any required initialization notices have been resolved.\n", - "MODEL_PROVENANCE.toml": "schema = \"mambo-model-provenance-v1\"\nmodel_id = \"MAMBO_v3\"\narchitecture = \"EfficientNetV2-S with normalized hierarchical classifier\"\ntraining_run = \"global_lepi_production_w32_1\"\ntraining_started = \"2026-09-10\"\ntraining_finished = \"2026-09-11\"\nbest_epoch = 30\nbest_epoch_source = \"Checksum-verified training/console.log: Best model found at epoch 30\"\nseed = 42\ntraining_epochs = 30\ntraining_world_size = 4\ntraining_source_revision_status = \"Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source.\"\ninitialization_status = \"Training config loads initial_seed42.pt with pretrained=false; upstream initialization lineage is not established by the retained files.\"\npackaging_checkout = \"52954edae5dae31a62ecb639533e6f8573d57055\"\npackaging_checkout_role = \"Original September 11 export/package environment only\"\nweights_license_status = \"Awaiting owner designation; repository MIT license covers code only\"\n\n[checkpoint]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\"\nsha256 = \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n\n[training_log]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log\"\nsha256 = \"d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54\"\n\n[epoch_summary]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv\"\nsha256 = \"be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2\"\n\n[configuration]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml\"\nsha256 = \"a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f\"\n", - "NOTICES.md": "# MAMBO V3 notices\n\n## Repository code\n\nThe deployment adapter and mini_trainer code are distributed under the MIT license\nin `CODE_LICENSE`. This notice does not grant rights to independently licensed\nruntime libraries, model weights, datasets or photographs.\n\n## Model weights — owner decision outstanding\n\nA license for the trained MAMBO V3 weights has not yet been designated in the\nretained release metadata. Public download availability alone is not a license.\nThe model owner must designate the license and confirm any required attribution\nfrom the initialization checkpoint before public release. The current training\nconfiguration loads an earlier local checkpoint; its original initialization\nlineage is not established by that configuration alone.\n\n## Runtime dependencies\n\nPyTorch/torchvision, ONNX Runtime, NumPy, Pillow and optional timm are installed\nseparately by the application's package manager, not vendored in the model bundle.\nTheir distributions carry their own license files and notices. CUDA/cuDNN components\nare optional third-party dependencies with their own terms. Keep dependency notices\nwhen redistributing an environment or container. The release manifest records the\nqualified versions, not a requirement to use one universal environment lock.\n\n## Dataset, taxonomy and photographs\n\nGlobal-lepi metadata and GBIF taxon identifiers informed training and regional\npresets. Training/evaluation photographs and the Flemming dataset are not included\nin this deployment release. Their original source permissions remain separate;\nthis release grants no permission to redistribute those datasets or images.\nPreset files contain taxon IDs and filter definitions, not photographs. Retained\nprivate evaluation inputs must remain outside publication assets.\n", + "MODEL_CARD.md": "# MAMBO V3\n\nUnpublished release candidate: EfficientNetV2-S trained on global-lepi in September\n2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon\nIDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary.\nNo quantized model is included. Embeddings have 1,280 dimensions and unit length.\n\nUse the release README for installation, input/output formats and configuration.\nGlobal is the default. Region presets and custom class lists constrain eligible\nspecies; they are permissive occurrence filters, not native-range maps. Taxonomic\nranks are predicted independently. Optional TTA uses `rotation30_pad25_3`.\n\n## Intended use and evidence\n\nLocal moth/butterfly image classification and downstream integration. Both\nFlemming monitoring crops and the original global-lepi test split have completed\nV2/V3, backend and TTA comparisons. Their different domains produce different TTA\nresponses; neither establishes accuracy for every deployment. Regional vocabulary\nand confidence thresholds affect the results. Consult the README's figures and\nlinked evidence for macro metrics, acceptance coverage, support truncation and\ncalibration policy. Laptop and B200 timings have distinct environment/workload\nboundaries and do not establish universal hardware throughput.\n\nThe Python adapter supports CPU and NVIDIA CUDA via separately installed runtimes.\nONNX offers a path to browser and other native-runtime integrations; those require\nmatching preprocessing and are not automatically qualified by Python execution.\nNo complete Windows/macOS/edge-device compatibility claim is made.\n\n## Training and artifact identity\n\nThe checksum-verified training console reports the best model at epoch **30**.\n`MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and\ntraining log with immutable hashes and public source URLs. The retained materials\ndo not identify the exact training Git revision or retain the starting checkpoint\nhash. The preparation source initializes a torchvision DEFAULT EfficientNetV2-S\nbackbone (ImageNet-1K) and a new hierarchical head with seed 42; this is a source-based\nreconstruction rather than a verified identity for the original starting file. The recorded September 11 checkout is packaging provenance,\nnot a claimed training revision. The trained checkpoint itself is identified and\ncan be loaded without retraining or downloading an initialization model.\n\n`release.json` covers the graph/external-weight files, presets, preprocessing,\nvocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml`\nrecord list construction. Read `NOTICES.md` for code, model and source-data boundaries.\n\n## Publication status\n\nThe candidate weights are prepared under **CC BY-NC-SA 4.0**: attribution,\nnon-commercial use and share-alike terms for distributed adaptations. See\n`MODEL_LICENSE.txt` and `NOTICES.md` for the terms and upstream attribution.\nThe adapter code remains MIT-licensed. This candidate has not been published.\n", + "MODEL_LICENSE.txt": "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International\n\n Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.\n\nConsiderations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.\n\nConsiderations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.\n\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License (\"Public License\"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.\n\nSection 1 – Definitions.\n\n a.\tAdapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.\n\n b.\tAdapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.\n\n c.\tBY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.\n\n d.\tCopyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.\n\n e.\tEffective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.\n\n f.\tExceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.\n\n g.\tLicense Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.\n\n h.\tLicensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.\n\n i.\tLicensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.\n\n j.\tLicensor means the individual(s) or entity(ies) granting rights under this Public License.\n\n k.\tNonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.\n\n l.\tShare means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.\n\n m.\tSui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.\n\n n.\tYou means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.\n\nSection 2 – Scope.\n\n a.\tLicense grant.\n\n 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:\n\n A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and\n\n B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.\n\n 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.\n\n 3. Term. The term of this Public License is specified in Section 6(a).\n\n 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.\n\n 5. Downstream recipients.\n\n A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.\n\n B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.\n\n C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.\n\n 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).\n\n b.\tOther rights.\n\n 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.\n\n 2. Patent and trademark rights are not licensed under this Public License.\n\n 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.\n\nSection 3 – License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the following conditions.\n\n a.\tAttribution.\n\n 1. If You Share the Licensed Material (including in modified form), You must:\n\n A. retain the following if it is supplied by the Licensor with the Licensed Material:\n\n i.\tidentification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);\n\n ii.\ta copyright notice;\n\n iii. a notice that refers to this Public License;\n\n iv.\ta notice that refers to the disclaimer of warranties;\n\n v.\ta URI or hyperlink to the Licensed Material to the extent reasonably practicable;\n\n B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and\n\n C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.\n\n 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.\n\n 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.\n\n b.\tShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.\n\n 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.\n\n 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.\n\n 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.\n\nSection 4 – Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:\n\n a.\tfor the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;\n\n b.\tif You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and\n\n c.\tYou must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.\nFor the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.\n\nSection 5 – Disclaimer of Warranties and Limitation of Liability.\n\n a.\tUnless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.\n\n b.\tTo the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.\n\n c.\tThe disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.\n\nSection 6 – Term and Termination.\n\n a.\tThis Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.\n\n b.\tWhere Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:\n\n 1.\tautomatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or\n\n 2.\tupon express reinstatement by the Licensor.\n\n For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.\n\n c.\tFor the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.\n\n d.\tSections 1, 5, 6, 7, and 8 survive termination of this Public License.\n\nSection 7 – Other Terms and Conditions.\n\n a.\tThe Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.\n\n b.\tAny arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.\n\nSection 8 – Interpretation.\n\n a.\tFor the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.\n\n b.\tTo the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.\n\n c.\tNo term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.\n\n d.\tNothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.\n\nCreative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n", + "MODEL_PROVENANCE.toml": "schema = \"mambo-model-provenance-v1\"\nmodel_id = \"MAMBO_v3\"\narchitecture = \"EfficientNetV2-S with normalized hierarchical classifier\"\ntraining_run = \"global_lepi_production_w32_1\"\ntraining_started = \"2026-09-10\"\ntraining_finished = \"2026-09-11\"\nbest_epoch = 30\nbest_epoch_source = \"Checksum-verified training/console.log: Best model found at epoch 30\"\nseed = 42\ntraining_epochs = 30\ntraining_world_size = 4\ntraining_source_revision_status = \"Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source.\"\ninitialization_status = \"Source-based reconstruction: torchvision DEFAULT EfficientNetV2-S backbone and a new normalized hierarchical head, seed 42; original initialization checkpoint/hash and run-specific preparation manifest not retained.\"\npackaging_checkout = \"52954edae5dae31a62ecb639533e6f8573d57055\"\npackaging_checkout_role = \"Original September 11 export/package environment only\"\nweights_license = \"CC-BY-NC-SA-4.0\"\nweights_license_status = \"Prepared for release following owner preference for non-commercial share-alike weights; code remains MIT\"\n\n[checkpoint]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\"\nsha256 = \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n\n[training_log]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/console.log\"\nsha256 = \"d710f226651413ced619ff5e63da1e731a650959eaee4b86632358ea847e5e54\"\n\n[epoch_summary]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/logs/summary.csv\"\nsha256 = \"be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2\"\n\n[configuration]\nurl = \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml\"\nsha256 = \"a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f\"\n\n[initialization_recipe]\nevidence_kind = \"Source-based reconstruction, not a retained initial-checkpoint identity\"\nsource_revision = \"53599f5c3e70c8e6ae683a205168e55bca38ab59\"\npreparation_source = \"dev/ucloud/worker.py:prepare\"\nproduction_source = \"dev/ucloud/production.py:generate\"\nbackbone_factory = \"mini_trainer/modeling/architectures/torchvision.py:get_torchvision_model\"\nbackbone_weights = \"EfficientNet_V2_S_Weights.DEFAULT (IMAGENET1K_V1)\"\nupstream_weights_url = \"https://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pth\"\nupstream_documentation = \"https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html\"\ninitial_checkpoint_name = \"initial_seed42.pt\"\ninitial_checkpoint_sha256_status = \"Not retained\"\nseed = 42\n", + "NOTICES.md": "# MAMBO V3 notices\n\n## Model weights\n\nThe MAMBO V3 trained weights, in PyTorch and ONNX form, are prepared for release\nunder **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International**\n(`CC-BY-NC-SA-4.0`). The full terms are in `MODEL_LICENSE.txt` and at\n.\n\nAttribute **MAMBO V3 / mini_trainer project**, link to\n and the\nlicense, and identify modifications when sharing. The license permits\nnon-commercial use and sharing; distributed adaptations must retain the same\nlicense elements under the license's ShareAlike conditions. It does not require\nprivate adaptations to be published. Commercial use requires separate permission\nfrom the relevant rights holders. The license grants only rights the licensor\nhas authority to grant; it does not replace third-party rights or notices.\n\n## Initialization and attribution\n\nThe retained UCloud preparation code creates `initial_seed42.pt` before training:\nit initializes the torchvision EfficientNetV2-S backbone with `DEFAULT` pretrained\nweights and a new normalized hierarchical classification head using seed 42.\nTorchvision documents this default as `EfficientNet_V2_S_Weights.IMAGENET1K_V1`,\ntrained on ImageNet-1K. Production then loads the saved starting checkpoint with\n`pretrained=false` to avoid loading the upstream weights again.\n\nThis lineage is reconstructed from preparation source, not verified against the\noriginal initialization file: its bytes/hash and the run-specific preparation\nmanifest were not retained in the release archive. `MODEL_PROVENANCE.toml` records\nthe source revision and this limitation. The deployed trained checkpoint is\nindependently identified by its SHA-256; inference does not require the initial file.\n\nAcknowledgements: the TorchVision maintainers and contributors, ImageNet, and\nMingxing Tan and Quoc V. Le for EfficientNetV2. Upstream references:\n\n- [TorchVision EfficientNetV2-S weights](https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html)\n- [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298)\n- [TorchVision model terms](https://github.com/pytorch/vision#pre-trained-model-license)\n\nTorchVision notes that pretrained models may have terms derived from their training\ndata. Its software license alone is not a blanket license for pretrained weights\nor photographs. The MAMBO license does not relicense those upstream materials.\n\n## Repository code and runtime dependencies\n\nThe deployment adapter and mini_trainer code remain **MIT-licensed** (`CODE_LICENSE`).\nThe model-weight license does not relicense independently written application code.\nPyTorch/torchvision, ONNX Runtime, NumPy and Pillow are installed separately by the\napplication's package manager, not vendored in the model bundle. Their distributions\ncarry their own licenses and notices. CUDA/cuDNN components have separate terms.\nKeep dependency notices when redistributing an environment or container.\n\n## Dataset, taxonomy and photographs\n\nGlobal-lepi metadata and GBIF taxon identifiers informed training and regional\npresets. Training/evaluation photographs and the Flemming dataset are not included\nin this deployment release. Their original source permissions remain separate;\nthis release grants no permission to redistribute those datasets or images.\nPreset files contain taxon IDs and filter definitions, not photographs. Retained\nprivate evaluation inputs must remain outside publication assets.\n", "PRESETS.md": "# Presets\n\nV3 uses metadata row counts, including all splits, without further deduplication. New lists require at least 3 regional and 25 global rows; legacy lists preserve their historical membership.\n\n| Preset | Species | Regional/global minimum rows | Scope |\n|---|---:|---|---|\n| europe | 3014 | 26/none | Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries. |\n| north_europe | 1977 | 26/none | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged). |\n| europe_v3 | 3086 | 3/25 | Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only. |\n| north_europe_v3 | 2199 | 3/25 | Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition. |\n| australia | 1874 | 3/25 | All Australian records, including Tasmania and other territories recorded under AU; not all Oceania. |\n| tasmania | 274 | 3/25 | Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded. |\n| north_america | 4425 | 3/25 | Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland. |\n| central_america | 1639 | 3/25 | Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America. |\n| south_america | 1506 | 3/25 | All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America. |\n| caribbean | 876 | 3/25 | Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast. |\n| south_asia | 1552 | 3/25 | Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap. |\n| asia | 4443 | 3/25 | All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA. |\n| japan | 697 | 3/25 | All records assigned countryCode JP, including islands. |\n| africa | 924 | 3/25 | All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included. |\n| north_africa | 236 | 3/25 | Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset. |\n| subsaharan_africa | 796 | 3/25 | Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon. |\n| madagascar | 107 | 3/25 | All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded. |\n| mediterranean | 2680 | 3/25 | Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones. |\n| arctic | 1548 | 3/25 | Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used. |\n| oceania | 2273 | 3/25 | All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap. |\n| new_zealand | 425 | 3/25 | All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset. |\n| oceania_excluding_australia_nz | 352 | 3/25 | The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists. |\n| southeast_asia | 1672 | 3/25 | Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional. |\n| east_asia | 3430 | 3/25 | China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded. |\n| middle_east | 846 | 3/25 | Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia. |\n\nExact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.\n", "PRESET_DEFINITIONS.toml": "schema_version = 2\nqualification_status = \"selected for MAMBO_v3; metadata row-count policy\"\nminimum_regional_rows = 3\nminimum_global_rows = 25\n# Geographic predicates are OR-ed; state_province/excluded_countries then constrain that union.\n# Counts include all metadata splits, without additional deduplication.\n\n[presets.europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Europe (legacy)\"\ncontinents = [\"EUROPE\"]\nscope = \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\"\n\n[presets.north_europe]\nminimum_regional_rows = 26\nminimum_global_rows = 0\nlabel = \"Northern Europe (legacy)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, Åland, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\"\n\n[presets.europe_v3]\nlabel = \"Europe (updated)\"\ncontinents = [\"EUROPE\"]\nscope = \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\"\n\n[presets.north_europe_v3]\nlabel = \"Northern Europe (updated)\"\ncountries = [\"DE\", \"DK\", \"EE\", \"FI\", \"LT\", \"LV\", \"NL\", \"NO\", \"PL\", \"SE\"]\nscope = \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\"\n\n[presets.australia]\nlabel = \"Australia including Tasmania\"\ncountries = [\"AU\"]\nscope = \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\"\n\n[presets.tasmania]\nlabel = \"Tasmania only\"\ncountries = [\"AU\"]\nstate_province = [\"Tasmania\"]\nscope = \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\"\n\n[presets.north_america]\nlabel = \"North America\"\ncountries = [\"CA\", \"US\", \"MX\", \"GL\", \"BM\", \"PM\"]\nscope = \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\"\n\n[presets.central_america]\nlabel = \"Central America\"\ncountries = [\"MX\", \"BZ\", \"GT\", \"HN\", \"SV\", \"NI\", \"CR\", \"PA\"]\nscope = \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\"\n\n[presets.south_america]\nlabel = \"South America\"\ncontinents = [\"SOUTH_AMERICA\"]\ncountries = [\"AR\", \"BO\", \"BR\", \"CL\", \"CO\", \"EC\", \"FK\", \"GF\", \"GY\", \"PY\", \"PE\", \"SR\", \"UY\", \"VE\", \"CR\", \"PA\"]\nscope = \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\"\n\n[presets.caribbean]\nlabel = \"Caribbean\"\ncountries = [\"AG\", \"AI\", \"AW\", \"BB\", \"BL\", \"BQ\", \"BS\", \"CU\", \"CW\", \"DM\", \"DO\", \"GD\", \"GP\", \"HT\", \"JM\", \"KN\", \"KY\", \"LC\", \"MF\", \"MQ\", \"MS\", \"PR\", \"SX\", \"TC\", \"TT\", \"VC\", \"VG\", \"VI\", \"BM\", \"BZ\", \"GY\", \"SR\", \"GF\"]\nscope = \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\"\n\n[presets.south_asia]\nlabel = \"South Asia\"\ncountries = [\"AF\", \"BD\", \"BT\", \"IN\", \"MV\", \"NP\", \"PK\", \"LK\", \"MM\", \"IR\"]\nscope = \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\"\n\n[presets.asia]\nlabel = \"Asia\"\ncontinents = [\"ASIA\"]\ncountries = [\"AF\", \"AM\", \"AZ\", \"BH\", \"BD\", \"BT\", \"BN\", \"KH\", \"CN\", \"GE\", \"HK\", \"IN\", \"ID\", \"IR\", \"IQ\", \"IL\", \"JP\", \"JO\", \"KZ\", \"KP\", \"KR\", \"KW\", \"KG\", \"LA\", \"LB\", \"MO\", \"MY\", \"MV\", \"MN\", \"MM\", \"NP\", \"OM\", \"PK\", \"PS\", \"PH\", \"QA\", \"RU\", \"SA\", \"SG\", \"LK\", \"SY\", \"TW\", \"TJ\", \"TH\", \"TL\", \"TR\", \"TM\", \"AE\", \"UZ\", \"VN\", \"YE\"]\nexcluded_countries = [\"CY\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\"\n\n[presets.japan]\nlabel = \"Japan\"\ncountries = [\"JP\"]\nscope = \"All records assigned countryCode JP, including islands.\"\n\n[presets.africa]\nlabel = \"Africa\"\ncontinents = [\"AFRICA\"]\ncountries = [\"DZ\", \"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"EG\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"LY\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MA\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"TN\", \"UG\", \"EH\", \"ZM\", \"ZW\"]\nscope = \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\"\n\n[presets.north_africa]\nlabel = \"Northern Africa (broad)\"\ncountries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\", \"SD\", \"MR\"]\nscope = \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\"\n\n[presets.subsaharan_africa]\nlabel = \"Sub-Saharan Africa (broad)\"\ncontinents = [\"AFRICA\"]\ncountries = [\"AO\", \"BJ\", \"BW\", \"BF\", \"BI\", \"CV\", \"CM\", \"CF\", \"TD\", \"KM\", \"CG\", \"CD\", \"CI\", \"DJ\", \"GQ\", \"ER\", \"SZ\", \"ET\", \"GA\", \"GM\", \"GH\", \"GN\", \"GW\", \"KE\", \"LS\", \"LR\", \"MG\", \"MW\", \"ML\", \"MR\", \"MU\", \"YT\", \"MZ\", \"NA\", \"NE\", \"NG\", \"RE\", \"RW\", \"SH\", \"ST\", \"SN\", \"SC\", \"SL\", \"SO\", \"ZA\", \"SS\", \"SD\", \"TZ\", \"TG\", \"UG\", \"ZM\", \"ZW\"]\nexcluded_countries = [\"DZ\", \"EG\", \"LY\", \"MA\", \"TN\", \"EH\"]\nscope = \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\"\n\n[presets.madagascar]\nlabel = \"Madagascar only\"\ncountries = [\"MG\"]\nscope = \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\"\n\n[presets.mediterranean]\nlabel = \"Mediterranean (broad)\"\ncountries = [\"AL\", \"DZ\", \"BA\", \"HR\", \"CY\", \"EG\", \"FR\", \"GR\", \"IL\", \"IT\", \"LB\", \"LY\", \"MT\", \"MC\", \"ME\", \"MA\", \"PS\", \"SI\", \"ES\", \"SY\", \"TN\", \"TR\", \"PT\", \"GI\", \"AD\", \"SM\", \"VA\", \"MK\", \"BG\", \"RS\", \"JO\"]\nscope = \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\"\n\n[presets.arctic]\nlabel = \"Arctic / north of 60°N\"\nminimum_latitude = 60\nscope = \"Records at latitude 60°N or farther north, across all countries, including exactly 60°. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\"\n\n[presets.oceania]\nlabel = \"Oceania\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nscope = \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\"\n\n[presets.new_zealand]\nlabel = \"New Zealand\"\ncountries = [\"NZ\"]\nscope = \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\"\n\n[presets.oceania_excluding_australia_nz]\nlabel = \"Oceania excluding Australia and New Zealand\"\ncontinents = [\"OCEANIA\"]\ncountries = [\"AU\", \"NZ\", \"PG\", \"FJ\", \"SB\", \"VU\", \"NC\", \"PF\", \"WS\", \"AS\", \"TO\", \"TV\", \"KI\", \"NR\", \"FM\", \"MH\", \"PW\", \"GU\", \"MP\", \"CK\", \"NU\", \"TK\", \"WF\", \"PN\", \"NF\"]\nexcluded_countries = [\"AU\", \"NZ\"]\nscope = \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\"\n\n[presets.southeast_asia]\nlabel = \"Southeast Asia\"\ncountries = [\"BN\", \"KH\", \"ID\", \"LA\", \"MY\", \"MM\", \"PH\", \"SG\", \"TH\", \"TL\", \"VN\", \"PG\"]\nscope = \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\"\n\n[presets.east_asia]\nlabel = \"East Asia\"\ncountries = [\"CN\", \"HK\", \"MO\", \"TW\", \"JP\", \"KP\", \"KR\", \"MN\", \"RU\"]\ncountry_continent_restrictions = { RU = [\"ASIA\"] }\nscope = \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\"\n\n[presets.middle_east]\nlabel = \"Middle East\"\ncountries = [\"TR\", \"CY\", \"SY\", \"LB\", \"IL\", \"PS\", \"JO\", \"IQ\", \"IR\", \"KW\", \"SA\", \"BH\", \"QA\", \"AE\", \"OM\", \"YE\", \"EG\", \"AM\", \"AZ\", \"GE\", \"AF\", \"PK\"]\nscope = \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\"\n", "PRESET_UPDATES.toml": "schema_version = 1\nsource_sha256 = \"094afa30bab25daad6583d33055bf7c61bcbade2f7f3c5e212d6b16fbf4429fe\"\n\n[updates.europe_v3]\nlegacy = \"europe\"\nadded = [\"1830284\", \"1831458\", \"1797344\", \"8355390\", \"1808348\", \"4532549\", \"1872873\", \"1873890\", \"1878370\", \"1736499\", \"1741747\", \"10442031\", \"1926550\", \"1926722\", \"1929402\", \"1931561\", \"1933647\", \"4535280\", \"1920247\", \"5805036\", \"5137908\", \"1960484\", \"1967324\", \"5146894\", \"1982533\", \"1986623\", \"4524223\", \"6133619\", \"7657419\", \"4524998\", \"5149664\", \"1945589\", \"5977247\", \"5142042\", \"1771997\", \"1772977\", \"1779633\", \"1784349\", \"1787438\", \"9803522\", \"1894164\", \"4535630\", \"5128353\", \"9804158\", \"4299370\", \"1905396\", \"1911633\", \"4535596\", \"4299565\", \"5134693\", \"1918627\", \"1918688\", \"4535539\", \"5133088\", \"5120577\", \"1843602\", \"5127521\", \"1890346\", \"1890487\", \"6133232\", \"9137965\", \"5127656\", \"4526094\", \"1858930\", \"1860026\", \"1866556\", \"5124716\", \"1862692\", \"8254441\", \"1833500\", \"4534796\", \"1803108\"]\nremoved = []\n\n[updates.north_europe_v3]\nlegacy = \"north_europe\"\nadded = [\"1732521\", \"1845607\", \"1847061\", \"4528547\", \"1848378\", \"1850497\", \"1850570\", \"4528529\", \"1852159\", \"7908344\", \"1777631\", \"1797374\", \"8355390\", \"4532351\", \"1803163\", \"1803824\", \"1816881\", \"8326103\", \"7657803\", \"4532565\", \"8148822\", \"8165185\", \"6097254\", \"5113030\", \"4522890\", \"4522896\", \"1860765\", \"1852787\", \"5125104\", \"1872848\", \"1872904\", \"1873215\", \"1873890\", \"1874295\", \"1875376\", \"1875429\", \"1875682\", \"1876357\", \"1876512\", \"1877038\", \"1878471\", \"1890065\", \"4525803\", \"5102642\", \"1738373\", \"1739471\", \"1740155\", \"1740762\", \"10838422\", \"1741747\", \"5103613\", \"1744526\", \"5103227\", \"7387466\", \"1926054\", \"5140214\", \"5140244\", \"7664111\", \"1933583\", \"1920237\", \"5137708\", \"1748922\", \"1750131\", \"1750166\", \"1955694\", \"1957706\", \"1957746\", \"1961037\", \"1962972\", \"1964437\", \"1965197\", \"1965640\", \"1967006\", \"1967265\", \"1967452\", \"1968990\", \"1969339\", \"5144782\", \"5145729\", \"8014296\", \"9627567\", \"1971847\", \"5146599\", \"5146842\", \"5147441\", \"7973517\", \"8414310\", \"1977967\", \"10712554\", \"4524902\", \"1982770\", \"1982867\", \"1986623\", \"1987737\", \"1988064\", \"1988642\", \"7555991\", \"1990582\", \"7657419\", \"9563355\", \"4524914\", \"4524955\", \"9220953\", \"5149569\", \"8851663\", \"5149717\", \"5149784\", \"1949929\", \"5142394\", \"7683096\", \"1869467\", \"1759097\", \"5109670\", \"1764673\", \"8352161\", \"1766718\", \"1766721\", \"1767511\", \"1767608\", \"8045644\", \"1768308\", \"1769543\", \"1770353\", \"1770416\", \"1770530\", \"1770573\", \"8393221\", \"1771997\", \"1772977\", \"1773062\", \"1773484\", \"1774347\", \"1775172\", \"5110593\", \"1776067\", \"5772222\", \"1780954\", \"1782319\", \"1782579\", \"1782872\", \"5112160\", \"1785887\", \"1786360\", \"1786515\", \"1786619\", \"1787213\", \"1787631\", \"4534086\", \"4533882\", \"4534162\", \"1790671\", \"1792431\", \"1794599\", \"1795068\", \"1774283\", \"4534681\", \"4534685\", \"8108800\", \"1770773\", \"1771169\", \"1773901\", \"1773904\", \"4532203\", \"4532206\", \"1894164\", \"5882039\", \"6231906\", \"9804158\", \"1897852\", \"1911093\", \"4299565\", \"5134569\", \"5134693\", \"5134837\", \"7700512\", \"8047165\", \"8167638\", \"8233062\", \"1918669\", \"8035998\", \"8001799\", \"1902143\", \"1941864\", \"5120577\", \"1731263\", \"4525641\", \"1878798\", \"1879408\", \"1881126\", \"9819403\", \"1881208\", \"1883067\", \"1883634\", \"1885937\", \"1886951\", \"1888484\", \"1890540\", \"1890679\", \"1890701\", \"1890823\", \"1890898\", \"1891013\", \"1891167\", \"1891453\", \"1884240\", \"1884365\", \"1854824\", \"4526094\", \"1841460\", \"1841989\", \"1861510\", \"1862765\", \"1860108\", \"5119506\", \"1754183\", \"8254441\", \"1857068\", \"1857143\", \"1858100\", \"1833500\", \"1834589\", \"5114311\"]\nremoved = []\n", - "README.md": "# MAMBO deployment — release candidate\n\nIdentify moths and butterflies from images, with species, genus and family\npredictions. V3 adds a standalone ONNX option alongside PyTorch: **no training\npackage or GPU is needed for ONNX/CPU**. Both backends use the same API, regional\nlists and output format. The comparisons below show quality and speed against V2,\nincluding CPU, laptop GPU and server GPU measurements.\n\nThis candidate is not yet published; the examples use the supplied release wheels.\nModel files download automatically from public ERDA storage on first use and are\nverified and cached. Reuse one predictor across calls.\n\n## Quick start\n\nCreate an environment, or use your application's existing environment. Python 3.12+\nis required. Install ONNX/CPU to start without a CUDA setup:\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate # Windows PowerShell: .venv\\Scripts\\Activate.ps1\nuv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'\n```\n\n**Python** — supply images directly:\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor() # Global species list, ONNX, CPU\nresult = predictor.predict([\"moth.jpg\", \"butterfly.jpg\"])\nprint(result[0].label) # (species_id, genus_id, family_id)\nprint(result[0].confidence) # confidence for each of those ranks\nrecords = result.to_dict() # list of JSON-serializable records for your application\n```\n\n**CLI** — the same defaults, for files or a directory:\n\n```sh\nmambo_predict -i ./images -o ./output --name predictions\n```\n\nThis creates `output/predictions/predictions.json` and `mini_metric.csv`;\n`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run.\nFor a one-off command without installing into your application environment, replace\n`mambo_predict` with\n`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`.\n\n| Interface | Inputs | Outputs |\n|---|---|---|\n| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. |\n| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. |\n| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. |\n\nFor an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to\nRGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF\norientation is not applied. Predictions at each rank are independent, so the three\nIDs need not form one ancestral path. CSV truth labels are inferred from parent\nfolder names; arbitrary image folders do not supply evaluation ground truth.\n\n## Choose the configuration that matters\n\n**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the\nsimplest dependency footprint and a useful starting point for CPU-only and edge\napplications. For NVIDIA GPU throughput, use PyTorch if it fits your environment,\nor ONNX/CUDA to keep the training package out of your application.\n[Runtime installation and offline use](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md) covers these\nalternatives. Changing runtime does not change the input/output contract.\n\n**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is\nworth roughly 3× lower throughput.** Keep the default recipe. Its benefit is\nimage-domain dependent; the general-photograph comparison below provides context.\n\nKeep `precision=\"auto\"`. Increase `batch_size` only when processing enough images\nto benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet\nyour application's throughput or CPU budget. Request embeddings or extra candidates\nonly when your workflow uses them. No server, dataset metadata or training setup is\nrequired.\n\nPass API settings to `Predictor(...)`, except the prediction methods shown below.\nCLI flags apply to `mambo_predict`.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. |\n| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. |\n| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. |\n| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. |\n| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. |\n| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` to list choices, or read the\n[preset catalogue](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/model-presets.md) for their exact scope and construction.\nPresets include species that **can occur** in a region, including introduced\nspecies; they are neither native-distribution maps nor exhaustive checklists.\nUse `model=\"full\"` if a regional restriction is inappropriate.\n\n`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also\navailable; legacy `north_europe` performed better on Flemming and is recommended\nfor comparable northern-European use. A custom `class_list=[\"GBIF_SPECIES_ID\", ...]`\nor UTF-8 file with one ID per line overrides the preset (`--class-list species.txt`\nin the CLI). Unknown IDs and empty lists fail; duplicates are removed.\n\n### Integrating with V2 applications\n\nThe `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA\ndefaults, callable prediction, `class_mask` and native result containers. It needs\nboth release wheels. New integrations can use the smaller `mambo_deploy` interface\nabove, with CPU results independent of backend. Both download model assets automatically.\n\nRetain the legacy regional preset for comparison, and match species by taxon ID,\nnot numeric index. The V3 vocabulary, scores and embedding width can differ from V2;\nexisting thresholds and stored embeddings are not interchangeable.\n[Migration details](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#moving-from-v2) describe the remaining\ncompatibility boundaries.\n\n### Large image collections\n\nUse streaming for a large collection of paths, consuming results as they arrive:\n\n```python\nfrom contextlib import closing\n\nwith closing(predictor.predict_stream(image_paths)) as batches:\n for result in batches:\n records = result.to_dict()\n # Write records to your database, file or downstream service here.\n```\n\nInput order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs.\nFor in-memory inputs, split large collections into smaller `predict()` requests;\nthat method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits\nmodel calls, not total request memory. [Streaming controls](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#streaming-controls)\nare available if the defaults do not fit your workload.\n\n## Changes from MAMBO V2\n\n- Global (`full`) is now the default scope. Select `europe` or `north_europe` to\n retain those geographic restrictions; the legacy lists remain available.\n- Install the model-generation package **`mambo-v3`**; its Python import remains\n `mambo_deploy`. Maintenance releases of this package retain the V3 trained model.\n Pin the package version for reproducible application builds. Use a separate\n environment for V2 or an older deployment candidate.\n- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU.\n Existing native CLI workflows must specify `--backend torch --device cuda:0`.\n The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults.\n- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and\n streaming output. Raw inputs and result formats are documented above; old\n preprocessed tensors, numeric class positions and embeddings need migration.\n\n### Beyond Python\n\nThe ONNX assets also provide a path to local browser inference with\n[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where\nimages can be processed on the user's device. Existing browser work is recorded\nin the [release roadmap](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work).\nThis Python release does not ship a browser SDK: preprocessing, external weights\nand browser/runtime support still need integration. The same local API or CLI can\nbe embedded in desktop applications, batch jobs and services without a hosted\nprediction service.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. These laptop measurements predate the latest\npipeline improvements and remain a consumer-hardware baseline.\n\n![CPU and GPU throughput by batch size, including the new TTA default](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\n### Complementary in-domain and HPC results\n\nThe original global-lepi test split adds a comparison on general photographs using\nthe global vocabulary. It complements Flemming's deployment-relevant monitoring\ncrops; the image domains and class lists differ, so their absolute scores should\nnot be compared as a controlled domain-effect estimate. The same `mini_metrics`\ncalibration/support policy uses 568,939 reporting images and 63,974 separate\ncalibration images, with both confidence settings evaluated on the reporting split.\n\n![In-domain quality at all ranks, with calibration, support truncation and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-indomain-quality.svg)\n\nV3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces\nin-domain performance, illustrating that its benefit depends on the input domain;\nthis does not override its benefit on the more deployment-relevant Flemming crops.\nSupport >5 changes the class average, not the evaluation rows. Truth classes outside\nthat average represent 1.70% / 0.34% / <0.01% of species/genus/family images without\nthresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete\nmetrics are in the [in-domain evidence](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-indomain-evidence.md).\n\n![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-hpc-current-speed.svg)\n\nThe server comparison retains CPU, GPU request and GPU streaming throughput in\n**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s**\nand ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and\nsmaller-batch results retain their earlier measurements; new request points are\nshown separately rather than joined to older scaling curves. These are measured\napplication rates, not a promise of GPU saturation.\n\n[Timing details and provenance](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-hpc-evidence.md) record measurement\nsettings, memory and repeat ranges. Keep the laptop comparison above when choosing\nfor consumer devices. ONNX's CPU advantage and independence from the training\npackage make it especially relevant when a GPU or the full PyTorch stack is not\nan option; PyTorch remains the faster GPU choice in these measurements.\n", + "README.md": "# MAMBO deployment — release candidate\n\nIdentify moths and butterflies from images, with species, genus and family\npredictions. V3 adds a standalone ONNX option alongside PyTorch: **no training\npackage or GPU is needed for ONNX/CPU**. Both backends use the same API, regional\nlists and output format. The comparisons below show quality and speed against V2,\nincluding CPU, laptop GPU and server GPU measurements.\n\n**Weights: [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/)\n(non-commercial, share-alike). Adapter code: MIT.**\n[Model notices](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/dev/releases/mambo_v3/NOTICES.md) explain attribution and scope.\n\nThis candidate is not yet published; the examples use the supplied release wheels.\nModel files download automatically from public ERDA storage on first use and are\nverified and cached. Reuse one predictor across calls.\n\n## Quick start\n\nCreate an environment, or use your application's existing environment. Python 3.12+\nis required. Install ONNX/CPU to start without a CUDA setup:\n\n```sh\nuv venv --python 3.13 .venv\nsource .venv/bin/activate # Windows PowerShell: .venv\\Scripts\\Activate.ps1\nuv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'\n```\n\n**Python** — supply images directly:\n\n```python\nfrom mambo_deploy import Predictor\n\npredictor = Predictor() # Global species list, ONNX, CPU\nresult = predictor.predict([\"moth.jpg\", \"butterfly.jpg\"])\nprint(result[0].label) # (species_id, genus_id, family_id)\nprint(result[0].confidence) # confidence for each of those ranks\nrecords = result.to_dict() # list of JSON-serializable records for your application\n```\n\n**CLI** — the same defaults, for files or a directory:\n\n```sh\nmambo_predict -i ./images -o ./output --name predictions\n```\n\nThis creates `output/predictions/predictions.json` and `mini_metric.csv`;\n`--embeddings` also writes `embeddings.npy`. Choose a new output name for each run.\nFor a one-off command without installing into your application environment, replace\n`mambo_predict` with\n`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`.\n\n| Interface | Inputs | Outputs |\n|---|---|---|\n| Python `predict(images)` | A path, PIL image, CHW array/tensor, or collection of these; BCHW batches also work. Original pixels: uint8 or floats in [0,1]. | One result per image, in input order. `label`, `confidence`, `index` have species/genus/family order; labels are GBIF taxon IDs as strings. `to_dict()` produces ordinary Python records; `save(path)` writes JSON. |\n| Python `predict_with_embeddings(images)` | Same inputs. | `(result, vectors)`; vectors are a float32 NumPy array `[N,1280]` with unit-length rows. |\n| CLI `-i` | One or more image files or directories, searched recursively. | JSON contains `results`, `metadata` and `config`; each result has `label`, `confidence`, `index`. CSV has one row per image/rank for evaluation. |\n\nFor an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to\nRGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF\norientation is not applied. Predictions at each rank are independent, so the three\nIDs need not form one ancestral path. CSV truth labels are inferred from parent\nfolder names; arbitrary image folders do not supply evaluation ground truth.\n\n## Choose the configuration that matters\n\n**Start with the defaults; select a regional preset when your location is known.** ONNX/CPU is the\nsimplest dependency footprint and a useful starting point for CPU-only and edge\napplications. For NVIDIA GPU throughput, use PyTorch if it fits your environment,\nor ONNX/CUDA to keep the training package out of your application.\n[Runtime installation and offline use](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md) covers these\nalternatives. Changing runtime does not change the input/output contract.\n\n**Enable `tta=True` / `--tta` for monitoring images when the quality gain below is\nworth roughly 3× lower throughput.** Keep the default recipe. Its benefit is\nimage-domain dependent; the general-photograph comparison below provides context.\n\nKeep `precision=\"auto\"`. Increase `batch_size` only when processing enough images\nto benefit; reduce it if memory is tight. Adjust CPU workers only if needed to meet\nyour application's throughput or CPU budget. Request embeddings or extra candidates\nonly when your workflow uses them. No server, dataset metadata or training setup is\nrequired.\n\nPass API settings to `Predictor(...)`, except the prediction methods shown below.\nCLI flags apply to `mambo_predict`.\n\n| Python API | CLI | Default | Role / main trade-off |\n|---|---|---|---|\n| `model=`, `class_list=` | `--model`, `--class-list` | `full` / no override | Eligible species; affects predictions and confidence. |\n| `backend=`, `device=` | `--backend`, `--device` | `onnx`, `cpu` | Runtime and hardware: `onnx` or `torch`; `cpu` or `cuda:0`. |\n| `tta=True` | `--tta` | Off | Quality versus throughput; enabling uses the recommended three-view recipe. |\n| `batch_size=` | `--batch-size` | `8` | Images per model call: throughput versus memory. |\n| `threads=` | `--threads` | `2` | ONNX CPU threads and default image-preparation workers; does not set PyTorch's model threads. |\n| `preprocess_workers=` | `--preprocess-workers` | Follows `threads` | Image-preparation CPU allocation. |\n| `precision=` | `--precision` | `auto` | Runtime-selected compute precision; normally leave unchanged. |\n| `predict_with_embeddings(images)` | `--embeddings` | Off | Vectors for similarity/search or downstream features. |\n| `predict(images, topk=k)` | `--topk k` | `1` | Candidates per rank; Python returns a list of candidates per image when `k > 1`. |\n| CLI only | `--threshold` | `0` | Acceptance flag in the evaluation CSV; JSON predictions stay unfiltered. |\n\n### Geographic scope\n\nUse `predictor.available_presets()` to list choices, or read the\n[preset catalogue](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/model-presets.md) for their exact scope and construction.\nPresets include species that **can occur** in a region, including introduced\nspecies; they are neither native-distribution maps nor exhaustive checklists.\nUse `model=\"full\"` if a regional restriction is inappropriate.\n\n`europe` and `north_europe` preserve the V2 lists. Updated `_v3` lists are also\navailable; legacy `north_europe` performed better on Flemming and is recommended\nfor comparable northern-European use. A custom `class_list=[\"GBIF_SPECIES_ID\", ...]`\nor UTF-8 file with one ID per line overrides the preset (`--class-list species.txt`\nin the CLI). Unknown IDs and empty lists fail; duplicates are removed.\n\n### Integrating with V2 applications\n\nThe `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA\ndefaults, callable prediction, `class_mask` and native result containers. It needs\nboth release wheels. New integrations can use the smaller `mambo_deploy` interface\nabove, with CPU results independent of backend. Both download model assets automatically.\n\nRetain the legacy regional preset for comparison, and match species by taxon ID,\nnot numeric index. The V3 vocabulary, scores and embedding width can differ from V2;\nexisting thresholds and stored embeddings are not interchangeable.\n[Migration details](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#moving-from-v2) describe the remaining\ncompatibility boundaries.\n\n### Large image collections\n\nUse streaming for a large collection of paths, consuming results as they arrive:\n\n```python\nfrom contextlib import closing\n\nwith closing(predictor.predict_stream(image_paths)) as batches:\n for result in batches:\n records = result.to_dict()\n # Write records to your database, file or downstream service here.\n```\n\nInput order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs.\nFor in-memory inputs, split large collections into smaller `predict()` requests;\nthat method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits\nmodel calls, not total request memory. [Streaming controls](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-integration.md#streaming-controls)\nare available if the defaults do not fit your workload.\n\n## Changes from MAMBO V2\n\n- Global (`full`) is now the default scope. Select `europe` or `north_europe` to\n retain those geographic restrictions; the legacy lists remain available.\n- Install the model-generation package **`mambo-v3`**; its Python import remains\n `mambo_deploy`. Maintenance releases of this package retain the V3 trained model.\n Pin the package version for reproducible application builds. Use a separate\n environment for V2 or an older deployment candidate.\n- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU.\n Existing native CLI workflows must specify `--backend torch --device cuda:0`.\n The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults.\n- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and\n streaming output. Raw inputs and result formats are documented above; old\n preprocessed tensors, numeric class positions and embeddings need migration.\n\n### Beyond Python\n\nThe ONNX assets also provide a path to local browser inference with\n[ONNX Runtime Web](https://onnxruntime.ai/docs/tutorials/web/deploy.html), where\nimages can be processed on the user's device. Existing browser work is recorded\nin the [release roadmap](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/ucloud-model-release-roadmap.md#located-production-artifacts-and-existing-browser-work).\nThis Python release does not ship a browser SDK: preprocessing, external weights\nand browser/runtime support still need integration. The same local API or CLI can\nbe embedded in desktop applications, batch jobs and services without a hosted\nprediction service.\n\n## Release comparison\n\nThese results help choose TTA and runtime; they do not establish accuracy in every\nregion. All models use legacy northern Europe on the same 52,788 Flemming reporting\nimages, including out-of-vocabulary truth. `mini_metrics` selects calibrated\nthresholds per pipeline/rank on 5,852 separate images. Recipe exploration used\nFlemming too, so this is descriptive evidence, not independent validation.\n\nThe quality figure compares **unthresholded and calibrated predictions**, with\nfull-support and support >5 macro metrics alongside acceptance coverage. TTA uses\n`rotation30_pad25_3`; its quality gain comes at the throughput cost shown below.\n\n![Species, genus and family quality: full and truncated support, both confidence settings, and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-quality.svg)\n\nSupport >5 requires more than five truth instances and accepted predictions in\nevery compared pipeline. Truth classes outside that average account for\n15.30% / 0.42% / 0.01% of images at species/genus/family without thresholds,\nand 18.95% / 11.21% / 0.03% after calibration. No evaluation rows are discarded;\nthe averaging class sets differ between confidence settings. Full-support metrics\nretain rare and predicted-only classes, which can change model rankings.\n\nMeasured **images/second**, end to end, on an i7-12800H / RTX 3080 Ti Laptop with\nfour preparation/runtime threads. V3 uses automatic precision; compare on your own\nhardware before choosing a batch size. These laptop measurements predate the latest\npipeline improvements and remain a consumer-hardware baseline.\n\n![CPU and GPU throughput by batch size, including the new TTA default](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-promoted-speed.svg)\n\nOn this laptop, ONNX is faster on CPU; native PyTorch benefits more from larger\nGPU batches. TTA improves quality but reduces throughput, so enable it according\nto your accuracy and processing-budget requirements.\n\nThe [complete evidence reference](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-deployment-evidence.md) retains\nexact metric tables, calibrated thresholds, timing ranges and limitations.\n### Complementary in-domain and HPC results\n\nThe original global-lepi test split adds a comparison on general photographs using\nthe global vocabulary. It complements Flemming's deployment-relevant monitoring\ncrops; the image domains and class lists differ, so their absolute scores should\nnot be compared as a controlled domain-effect estimate. The same `mini_metrics`\ncalibration/support policy uses 568,939 reporting images and 63,974 separate\ncalibration images, with both confidence settings evaluated on the reporting split.\n\n![In-domain quality at all ranks, with calibration, support truncation and coverage](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-indomain-quality.svg)\n\nV3 improves in-domain performance over V2. The Flemming-selected TTA recipe reduces\nin-domain performance, illustrating that its benefit depends on the input domain;\nthis does not override its benefit on the more deployment-relevant Flemming crops.\nSupport >5 changes the class average, not the evaluation rows. Truth classes outside\nthat average represent 1.70% / 0.34% / <0.01% of species/genus/family images without\nthresholds, and 1.88% / 0.38% / <0.01% after calibration. Thresholds and complete\nmetrics are in the [in-domain evidence](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-indomain-evidence.md).\n\n![EPYC CPU and B200 request throughput, with updated B200 streaming measurements](https://raw.githubusercontent.com/asgersvenning/mini_trainer/MAMBO_v3/docs/assets/mambo-hpc-current-speed.svg)\n\nThe server comparison retains CPU, GPU request and GPU streaming throughput in\n**images/second**. B200 batch-256 values are updated: PyTorch reaches **1,976 images/s**\nand ONNX **997 images/s** when streaming, or **624 and 396** with TTA. CPU, V2 and\nsmaller-batch results retain their earlier measurements; new request points are\nshown separately rather than joined to older scaling curves. These are measured\napplication rates, not a promise of GPU saturation.\n\n[Timing details and provenance](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/docs/mambo-hpc-evidence.md) record measurement\nsettings, memory and repeat ranges. Keep the laptop comparison above when choosing\nfor consumer devices. ONNX's CPU advantage and independence from the training\npackage make it especially relevant when a GPU or the full PyTorch stack is not\nan option; PyTorch remains the faster GPU choice in these measurements.\n", "classes.json": "{\n \"ranks\": [\n \"species\",\n \"genus\",\n \"family\"\n ],\n \"labels\": [\n [\n \"1837646\",\n \"12170988\",\n \"11871190\",\n \"1921992\",\n \"1921993\",\n \"1922015\",\n \"1922024\",\n \"5140603\",\n \"5140627\",\n \"1934331\",\n \"1934447\",\n \"1934570\",\n \"1934693\",\n \"1934715\",\n \"1934991\",\n \"1935078\",\n \"1935295\",\n \"1935301\",\n \"1935343\",\n \"1935346\",\n \"1935350\",\n \"1935614\",\n \"1935838\",\n \"1935849\",\n \"5140969\",\n \"5140980\",\n \"1936161\",\n \"1936233\",\n \"1936312\",\n \"1936378\",\n \"1936388\",\n \"1936391\",\n \"1936565\",\n \"1936566\",\n \"5141085\",\n \"1936649\",\n \"10132775\",\n \"10331171\",\n \"9620499\",\n \"10075196\",\n \"1868535\",\n \"10100176\",\n \"10517417\",\n \"1868575\",\n \"1992268\",\n \"1992277\",\n \"1992283\",\n \"1992301\",\n \"1992315\",\n \"1860621\",\n \"1860628\",\n \"4522795\",\n \"1860659\",\n \"1860664\",\n \"1860668\",\n \"1860671\",\n \"1860688\",\n \"1860709\",\n \"1860711\",\n \"4522933\",\n \"5123582\",\n \"1860736\",\n \"10648791\",\n \"1758114\",\n \"1758146\",\n \"6113873\",\n \"1732063\",\n \"1732072\",\n \"1732087\",\n \"1732114\",\n \"1732115\",\n \"5101556\",\n \"5101559\",\n \"1732416\",\n \"1732419\",\n \"1732452\",\n \"1732457\",\n \"1732508\",\n \"1732521\",\n \"1732525\",\n \"1732565\",\n \"10083877\",\n \"9840570\",\n \"9960252\",\n \"5101590\",\n \"1732660\",\n \"1732662\",\n \"1732680\",\n \"1732685\",\n \"1732697\",\n \"1732717\",\n \"1732763\",\n \"1732830\",\n \"1732842\",\n \"5101640\",\n \"1732901\",\n \"1732955\",\n \"10190647\",\n \"10341307\",\n \"10435406\",\n \"1732978\",\n \"1733154\",\n \"1733155\",\n \"1733243\",\n \"1733258\",\n \"1733394\",\n \"1733412\",\n \"1733484\",\n \"1733504\",\n \"1733507\",\n \"1733511\",\n \"1733525\",\n \"1733535\",\n \"4525266\",\n \"4525268\",\n \"4525270\",\n \"4525273\",\n \"1733620\",\n \"1733755\",\n \"5734897\",\n \"5101678\",\n \"5101717\",\n \"5101745\",\n \"5101763\",\n \"5101811\",\n \"5715280\",\n \"5715281\",\n \"5769191\",\n \"1734384\",\n \"1734453\",\n \"5102207\",\n \"5102242\",\n \"1734496\",\n \"1734519\",\n \"5102304\",\n \"5102324\",\n \"5102335\",\n \"5102365\",\n \"5102396\",\n \"1734690\",\n \"1734704\",\n \"1734794\",\n \"1734826\",\n \"10155026\",\n \"1734851\",\n \"5734891\",\n \"6113959\",\n \"10730270\",\n \"5102287\",\n \"5102300\",\n \"11529292\",\n \"1831861\",\n \"1831863\",\n \"1831890\",\n \"1831974\",\n \"1831999\",\n \"1832023\",\n \"1832143\",\n \"5734640\",\n \"11453841\",\n \"1832235\",\n \"1832248\",\n \"1832254\",\n \"5734645\",\n \"1832518\",\n \"1832533\",\n \"1832553\",\n \"1832569\",\n \"1832612\",\n \"1832649\",\n \"11505614\",\n \"1833475\",\n \"8825467\",\n \"4302388\",\n \"1845270\",\n \"1845271\",\n \"1845279\",\n \"1845314\",\n \"1845329\",\n \"1845335\",\n \"1845368\",\n \"1845385\",\n \"1845442\",\n \"1845448\",\n \"1845455\",\n \"1845502\",\n \"1845503\",\n \"1845513\",\n \"1845547\",\n \"1845548\",\n \"1845565\",\n \"1845574\",\n \"1845586\",\n \"1845604\",\n \"1845605\",\n \"1845607\",\n \"1845616\",\n \"4529566\",\n \"4528100\",\n \"1846313\",\n \"1846351\",\n \"1846374\",\n \"1846439\",\n \"5121847\",\n \"5121850\",\n \"1846604\",\n \"1846657\",\n \"1846715\",\n \"1846729\",\n \"1846849\",\n \"1846858\",\n \"1846860\",\n \"10785815\",\n \"11730078\",\n \"1846914\",\n \"1846916\",\n \"1846941\",\n \"1846945\",\n \"1846971\",\n \"1846992\",\n \"1847013\",\n \"1847059\",\n \"1847061\",\n \"1847062\",\n \"1847064\",\n \"1847066\",\n \"1847068\",\n \"1847097\",\n \"1847111\",\n \"1847149\",\n \"1847157\",\n \"1847225\",\n \"1847249\",\n \"1847260\",\n \"1847274\",\n \"1847308\",\n \"1847343\",\n \"1847392\",\n \"1847407\",\n \"1847426\",\n \"1847457\",\n \"1847484\",\n \"1847498\",\n \"4528547\",\n \"1847568\",\n \"1847572\",\n \"1847622\",\n \"1847639\",\n \"1847641\",\n \"9262981\",\n \"8559137\",\n \"1847919\",\n \"1847930\",\n \"1847944\",\n \"1847956\",\n \"10427568\",\n \"9546514\",\n \"1848114\",\n \"1848150\",\n \"1848202\",\n \"10450501\",\n \"1848219\",\n \"8797017\",\n \"9868978\",\n \"1848259\",\n \"1848272\",\n \"1848273\",\n \"1848274\",\n \"1848295\",\n \"1848312\",\n \"1848322\",\n \"1848325\",\n \"1848356\",\n \"1848378\",\n \"1848426\",\n \"4528539\",\n \"1848490\",\n \"1848505\",\n \"1848596\",\n \"1848610\",\n \"1848636\",\n \"1848639\",\n \"1848657\",\n \"1848669\",\n \"1848690\",\n \"1848713\",\n \"1848714\",\n \"1848717\",\n \"1848730\",\n \"1848741\",\n \"1848753\",\n \"1848864\",\n \"1848868\",\n \"1849007\",\n \"1849010\",\n \"1849104\",\n \"9973217\",\n \"5122013\",\n \"1849267\",\n \"1849273\",\n \"1849284\",\n \"1849294\",\n \"1849457\",\n \"1849470\",\n \"9007213\",\n \"1849477\",\n \"11052757\",\n \"11080751\",\n \"1849531\",\n \"1849539\",\n \"1849552\",\n \"1849630\",\n \"1849656\",\n \"1849856\",\n \"1849897\",\n \"1849924\",\n \"1850008\",\n \"1850042\",\n \"1850045\",\n \"1850076\",\n \"1850077\",\n \"1850106\",\n \"1850156\",\n \"1850184\",\n \"1850225\",\n \"1850238\",\n \"1850246\",\n \"11576787\",\n \"1850279\",\n \"1850302\",\n \"1850321\",\n \"1850335\",\n \"1850386\",\n \"1850394\",\n \"1850450\",\n \"1850497\",\n \"1850506\",\n \"4527903\",\n \"1850522\",\n \"1850533\",\n \"1850538\",\n \"1850570\",\n \"1850575\",\n \"1850585\",\n \"1850589\",\n \"1850597\",\n \"1850633\",\n \"1850640\",\n \"4528529\",\n \"1850673\",\n \"1850690\",\n \"1850722\",\n \"1850729\",\n \"1850764\",\n \"1850771\",\n \"1850773\",\n \"1850774\",\n \"1850781\",\n \"1850798\",\n \"1850868\",\n \"1850884\",\n \"1850908\",\n \"1850922\",\n \"1850923\",\n \"1850962\",\n \"1850971\",\n \"1851000\",\n \"1851002\",\n \"1851010\",\n \"1851011\",\n \"8986624\",\n \"1851039\",\n \"5122037\",\n \"5122062\",\n \"5122086\",\n \"5122113\",\n \"5122121\",\n \"5122131\",\n \"5806361\",\n \"1851203\",\n \"1851213\",\n \"1851220\",\n \"1851237\",\n \"1851243\",\n \"1851300\",\n \"11528968\",\n \"1851337\",\n \"1851347\",\n \"1851453\",\n \"1851462\",\n \"1851543\",\n \"1851555\",\n \"1851670\",\n \"1851714\",\n \"1851750\",\n \"5122206\",\n \"1851828\",\n \"1851845\",\n \"4527972\",\n \"1852150\",\n \"1852159\",\n \"1852165\",\n \"1852177\",\n \"1852292\",\n \"1852311\",\n \"1852320\",\n \"6133343\",\n \"1852382\",\n \"1852430\",\n \"9123440\",\n \"11287091\",\n \"4527957\",\n \"10023115\",\n \"10498365\",\n \"11706893\",\n \"1850463\",\n \"9977181\",\n \"1848212\",\n \"1848213\",\n \"1848920\",\n \"1849498\",\n \"11430021\",\n \"1829533\",\n \"1829588\",\n \"1829659\",\n \"1829612\",\n \"1829703\",\n \"1829776\",\n \"1829785\",\n \"1829799\",\n \"1829814\",\n \"1829823\",\n \"1829866\",\n \"1829974\",\n \"4705103\",\n \"8779506\",\n \"4525354\",\n \"10508467\",\n \"12031071\",\n \"4695719\",\n \"1828395\",\n \"1828400\",\n \"1828402\",\n \"8150089\",\n \"1828424\",\n \"1828426\",\n \"1828455\",\n \"1828456\",\n \"6196939\",\n \"1828471\",\n \"1828491\",\n \"1828540\",\n \"1828543\",\n \"1828544\",\n \"5119338\",\n \"1828637\",\n \"10707366\",\n \"10833593\",\n \"10882997\",\n \"5119346\",\n \"5119349\",\n \"5119350\",\n \"5119353\",\n \"5119354\",\n \"5119361\",\n \"10288636\",\n \"10639943\",\n \"1828826\",\n \"4695709\",\n \"1828976\",\n \"11642411\",\n \"1829021\",\n \"1829029\",\n \"6097236\",\n \"8871600\",\n \"9182336\",\n \"5769272\",\n \"7623903\",\n \"8912441\",\n \"10053809\",\n \"10176413\",\n \"10067382\",\n \"5879654\",\n \"7448174\",\n \"4525610\",\n \"1751852\",\n \"10835385\",\n \"10855556\",\n \"5125130\",\n \"1861395\",\n \"1868428\",\n \"1868527\",\n \"5734146\",\n \"1837706\",\n \"1834428\",\n \"4684910\",\n \"4686897\",\n \"4686905\",\n \"4686907\",\n \"4686913\",\n \"1835848\",\n \"1835862\",\n \"1835874\",\n \"1835886\",\n \"1835897\",\n \"1835908\",\n \"1835928\",\n \"1838084\",\n \"1838978\",\n \"4685802\",\n \"1839600\",\n \"1839604\",\n \"4685468\",\n \"4684220\",\n \"4685557\",\n \"4685946\",\n \"1835460\",\n \"1845793\",\n \"1845866\",\n \"1845952\",\n \"1845962\",\n \"1845965\",\n \"1845982\",\n \"1846035\",\n \"1846052\",\n \"9159662\",\n \"1846505\",\n \"10594478\",\n \"1834980\",\n \"8503184\",\n \"1834710\",\n \"1839094\",\n \"1839146\",\n \"1841261\",\n \"5119890\",\n \"1830812\",\n \"1830814\",\n \"1830838\",\n \"1830843\",\n \"1830122\",\n \"1830125\",\n \"1830131\",\n \"1830137\",\n \"1830144\",\n \"1830147\",\n \"1830152\",\n \"1830186\",\n \"1830191\",\n \"1830194\",\n \"1830202\",\n \"1830203\",\n \"1830207\",\n \"1830221\",\n \"1830229\",\n \"1830241\",\n \"1830243\",\n \"1830262\",\n \"1830266\",\n \"1830271\",\n \"1830284\",\n \"1830293\",\n \"4525476\",\n \"4525487\",\n \"9998920\",\n \"1831458\",\n \"1831473\",\n \"1831499\",\n \"1831508\",\n \"1831565\",\n \"1831631\",\n \"1831643\",\n \"1831655\",\n \"1831667\",\n \"4708342\",\n \"9379855\",\n \"5119868\",\n \"1839396\",\n \"8834672\",\n \"1839625\",\n \"1841296\",\n \"4528593\",\n \"8271010\",\n \"1853723\",\n \"5880147\",\n \"9734171\",\n \"10679326\",\n \"10746289\",\n \"11382064\",\n \"10698858\",\n \"11570545\",\n \"10701190\",\n \"11807833\",\n \"12199936\",\n \"11095591\",\n \"11418741\",\n \"11513018\",\n \"11571523\",\n \"12151997\",\n \"12160125\",\n \"10042504\",\n \"10094594\",\n \"10379915\",\n \"10531480\",\n \"10548275\",\n \"11919216\",\n \"9851221\",\n \"9985020\",\n \"12022449\",\n \"7908344\",\n \"12259113\",\n \"12208733\",\n \"12235234\",\n \"12217030\",\n \"5110390\",\n \"1758625\",\n \"1758860\",\n \"1758861\",\n \"1758866\",\n \"1759150\",\n \"1759775\",\n \"1760140\",\n \"6132868\",\n \"6132869\",\n \"1760201\",\n \"1760384\",\n \"1760385\",\n \"1760396\",\n \"1760397\",\n \"1760398\",\n \"1760400\",\n \"5108951\",\n \"1760927\",\n \"10889719\",\n \"1760970\",\n \"1761101\",\n \"1761102\",\n \"1761110\",\n \"1761111\",\n \"1761213\",\n \"1761353\",\n \"1761387\",\n \"9257793\",\n \"1761572\",\n \"1761573\",\n \"1761751\",\n \"1761752\",\n \"1761820\",\n \"1761838\",\n \"1762151\",\n \"5109196\",\n \"11562374\",\n \"1762219\",\n \"1762226\",\n \"1762286\",\n \"9553692\",\n \"1762298\",\n \"1762474\",\n \"8331687\",\n \"8379616\",\n \"9354496\",\n \"9546910\",\n \"1762849\",\n \"1762852\",\n \"10256550\",\n \"1762887\",\n \"1763156\",\n \"1763163\",\n \"1763184\",\n \"1763199\",\n \"1763223\",\n \"1763256\",\n \"1763589\",\n \"5109766\",\n \"1763650\",\n \"1763782\",\n \"1763812\",\n \"1763957\",\n \"1763976\",\n \"1763994\",\n \"1764021\",\n \"1764032\",\n \"1764043\",\n \"1764060\",\n \"5109782\",\n \"5109784\",\n \"5109786\",\n \"5109787\",\n \"5109788\",\n \"9278311\",\n \"1764525\",\n \"1764531\",\n \"1764640\",\n \"1764880\",\n \"1764886\",\n \"1765097\",\n \"1765182\",\n \"8028211\",\n \"1765653\",\n \"1765863\",\n \"1766260\",\n \"10099906\",\n \"10647358\",\n \"1766558\",\n \"1766560\",\n \"1766570\",\n \"1766584\",\n \"1766601\",\n \"1766612\",\n \"1766618\",\n \"3257809\",\n \"6116699\",\n \"5110044\",\n \"1766839\",\n \"1766845\",\n \"1766880\",\n \"1766888\",\n \"1767031\",\n \"1767044\",\n \"1767215\",\n \"1767307\",\n \"1767320\",\n \"1767499\",\n \"1767508\",\n \"9384861\",\n \"1767755\",\n \"1767758\",\n \"1767779\",\n \"1767780\",\n \"5110190\",\n \"11097510\",\n \"1767883\",\n \"1768283\",\n \"1768440\",\n \"5110232\",\n \"1768898\",\n \"1769000\",\n \"10340332\",\n \"10820762\",\n \"1769103\",\n \"1769168\",\n \"11467034\",\n \"1769336\",\n \"10848620\",\n \"1769410\",\n \"1769425\",\n \"1769465\",\n \"1769737\",\n \"1769739\",\n \"1769772\",\n \"10881384\",\n \"12148290\",\n \"1769823\",\n \"1769827\",\n \"1769840\",\n \"1769841\",\n \"1769852\",\n \"1769897\",\n \"1769901\",\n \"1770038\",\n \"1770044\",\n \"1770263\",\n \"1770380\",\n \"1770383\",\n \"1770384\",\n \"1770385\",\n \"11728240\",\n \"7396517\",\n \"1771455\",\n \"6132966\",\n \"6132967\",\n \"5110297\",\n \"5110299\",\n \"5110305\",\n \"7701550\",\n \"8837162\",\n \"8963926\",\n \"9256436\",\n \"9279670\",\n \"9283228\",\n \"9323382\",\n \"9327042\",\n \"9395422\",\n \"9399145\",\n \"9440644\",\n \"9560782\",\n \"9564612\",\n \"9607447\",\n \"9636442\",\n \"1771839\",\n \"1771846\",\n \"1771848\",\n \"1771859\",\n \"1771975\",\n \"1771977\",\n \"5110326\",\n \"5110327\",\n \"1772260\",\n \"1772352\",\n \"1772427\",\n \"1772428\",\n \"1772447\",\n \"1772543\",\n \"1772689\",\n \"1772716\",\n \"9237599\",\n \"9424441\",\n \"9534690\",\n \"1772793\",\n \"4532500\",\n \"5110397\",\n \"5110417\",\n \"5110447\",\n \"5110490\",\n \"5110492\",\n \"1774069\",\n \"1774575\",\n \"1774576\",\n \"5110533\",\n \"1774907\",\n \"9287097\",\n \"1775148\",\n \"5110546\",\n \"8979264\",\n \"1775980\",\n \"1776163\",\n \"1776265\",\n \"1776268\",\n \"5110765\",\n \"5110769\",\n \"1777024\",\n \"1777034\",\n \"1777052\",\n \"1777075\",\n \"8345991\",\n \"1777165\",\n \"1777166\",\n \"1777179\",\n \"1777289\",\n \"8141741\",\n \"1777631\",\n \"5110837\",\n \"9257908\",\n \"1777695\",\n \"1777737\",\n \"11457930\",\n \"11609422\",\n \"9372988\",\n \"6132953\",\n \"1777942\",\n \"4687991\",\n \"5110891\",\n \"6133029\",\n \"1778430\",\n \"1778548\",\n \"1778549\",\n \"1778551\",\n \"1778555\",\n \"9423248\",\n \"5110981\",\n \"5110986\",\n \"5110993\",\n \"10403441\",\n \"5111007\",\n \"5111044\",\n \"5111054\",\n \"6133058\",\n \"9610080\",\n \"1779399\",\n \"1779456\",\n \"6132938\",\n \"1779671\",\n \"1779740\",\n \"1780149\",\n \"1780150\",\n \"5111830\",\n \"10203499\",\n \"1780705\",\n \"1780716\",\n \"1780856\",\n \"1780857\",\n \"1780860\",\n \"1780862\",\n \"1781029\",\n \"1781038\",\n \"7672864\",\n \"9305011\",\n \"9390065\",\n \"9630748\",\n \"8193562\",\n \"1781944\",\n \"1781946\",\n \"5112051\",\n \"5112053\",\n \"5112060\",\n \"5112068\",\n \"5112078\",\n \"5112080\",\n \"9008379\",\n \"1782115\",\n \"10154280\",\n \"1782185\",\n \"1782208\",\n \"1782211\",\n \"1782214\",\n \"1782326\",\n \"1782328\",\n \"1783173\",\n \"1783302\",\n \"8384839\",\n \"1783365\",\n \"1783652\",\n \"1783882\",\n \"1783991\",\n \"10157400\",\n \"5112407\",\n \"5112410\",\n \"1784646\",\n \"1784804\",\n \"10208792\",\n \"1785744\",\n \"1785832\",\n \"1785913\",\n \"1785916\",\n \"9520799\",\n \"1786190\",\n \"1786217\",\n \"1786219\",\n \"1786247\",\n \"7480993\",\n \"1786317\",\n \"1786711\",\n \"11368766\",\n \"5112500\",\n \"6132971\",\n \"6132974\",\n \"1786912\",\n \"1786913\",\n \"1786958\",\n \"1786980\",\n \"1786984\",\n \"1786985\",\n \"1786990\",\n \"1787003\",\n \"1787009\",\n \"1787010\",\n \"10860091\",\n \"6132805\",\n \"1787106\",\n \"1787464\",\n \"11495556\",\n \"1788045\",\n \"5112531\",\n \"5112542\",\n \"1788278\",\n \"11890681\",\n \"10295290\",\n \"1788372\",\n \"1788553\",\n \"6116754\",\n \"6132936\",\n \"7346446\",\n \"9494526\",\n \"1788881\",\n \"1788891\",\n \"6132826\",\n \"1788953\",\n \"1788986\",\n \"1789057\",\n \"1789190\",\n \"1789191\",\n \"1789193\",\n \"1789225\",\n \"5112626\",\n \"1789498\",\n \"1789604\",\n \"10090168\",\n \"1789794\",\n \"1789805\",\n \"1790230\",\n \"1790240\",\n \"1790246\",\n \"1790248\",\n \"1790257\",\n \"1790258\",\n \"1790268\",\n \"1790274\",\n \"1790281\",\n \"1790287\",\n \"1790308\",\n \"5112798\",\n \"1790331\",\n \"1790450\",\n \"1790692\",\n \"1790787\",\n \"10598407\",\n \"1790816\",\n \"1790832\",\n \"10749137\",\n \"10766319\",\n \"1790876\",\n \"1790888\",\n \"1790900\",\n \"1790910\",\n \"9967251\",\n \"9983957\",\n \"1790937\",\n \"1790945\",\n \"7785540\",\n \"9345545\",\n \"1791010\",\n \"5112843\",\n \"1791094\",\n \"1791097\",\n \"1791151\",\n \"10743044\",\n \"6132950\",\n \"5112892\",\n \"5112900\",\n \"5112908\",\n \"5112911\",\n \"5112915\",\n \"5112917\",\n \"5112923\",\n \"5112927\",\n \"5112940\",\n \"5112944\",\n \"5112947\",\n \"5112959\",\n \"5112960\",\n \"5112961\",\n \"5112963\",\n \"5112968\",\n \"5112990\",\n \"1791372\",\n \"1791379\",\n \"1791514\",\n \"1791698\",\n \"1791715\",\n \"11016336\",\n \"11725043\",\n \"11971514\",\n \"5113078\",\n \"5113082\",\n \"5113084\",\n \"5113148\",\n \"5113234\",\n \"9310626\",\n \"1792210\",\n \"5113330\",\n \"5113352\",\n \"1792276\",\n \"9382044\",\n \"1792541\",\n \"1792695\",\n \"1792827\",\n \"1792831\",\n \"5113385\",\n \"5884243\",\n \"9504222\",\n \"1793429\",\n \"1793566\",\n \"1793610\",\n \"1793613\",\n \"1793631\",\n \"1793635\",\n \"1793646\",\n \"1793656\",\n \"1793892\",\n \"9860902\",\n \"1794518\",\n \"10850929\",\n \"1794637\",\n \"1795042\",\n \"1795045\",\n \"1795049\",\n \"1795074\",\n \"10267570\",\n \"1795657\",\n \"9340452\",\n \"9622322\",\n \"1796257\",\n \"1796288\",\n \"1796338\",\n \"10573746\",\n \"5113925\",\n \"1796984\",\n \"10108671\",\n \"1797039\",\n \"6132979\",\n \"10600368\",\n \"1797111\",\n \"1797121\",\n \"1797122\",\n \"1797135\",\n \"1797137\",\n \"1797146\",\n \"1797178\",\n \"1797194\",\n \"1797198\",\n \"1797206\",\n \"1797210\",\n \"1797218\",\n \"1797252\",\n \"1797257\",\n \"1797258\",\n \"1797259\",\n \"1797275\",\n \"1797276\",\n \"1797285\",\n \"1797290\",\n \"1797296\",\n \"1797299\",\n \"1797300\",\n \"1797333\",\n \"1797339\",\n \"1797344\",\n \"1797349\",\n \"1797365\",\n \"1797367\",\n \"1797373\",\n \"1797374\",\n \"1797375\",\n \"1797379\",\n \"1797394\",\n \"1797409\",\n \"1797429\",\n \"1797432\",\n \"1797433\",\n \"1797436\",\n \"1797440\",\n \"1797445\",\n \"1797454\",\n \"1797464\",\n \"1797474\",\n \"1797475\",\n \"1797478\",\n \"1797479\",\n \"1797488\",\n \"1797507\",\n \"1797521\",\n \"1797527\",\n \"1797542\",\n \"1797556\",\n \"4532461\",\n \"4532471\",\n \"4532473\",\n \"8016905\",\n \"8355390\",\n \"8756768\",\n \"8874140\",\n \"9022399\",\n \"9236138\",\n \"9240357\",\n \"9252524\",\n \"9273409\",\n \"9289908\",\n \"9310510\",\n \"9312545\",\n \"9332506\",\n \"9340070\",\n \"9344456\",\n \"9350484\",\n \"9367471\",\n \"9406020\",\n \"9410076\",\n \"9416645\",\n \"9455404\",\n \"9468297\",\n \"9483647\",\n \"9547311\",\n \"9549475\",\n \"9554074\",\n \"9560404\",\n \"9604825\",\n \"9607036\",\n \"9611624\",\n \"9618068\",\n \"9622725\",\n \"1797727\",\n \"1798014\",\n \"1798018\",\n \"1798023\",\n \"1798025\",\n \"1798101\",\n \"5113950\",\n \"5884245\",\n \"5884247\",\n \"6117055\",\n \"6117124\",\n \"7598729\",\n \"1798346\",\n \"1798393\",\n \"1798402\",\n \"1798408\",\n \"4532493\",\n \"1798427\",\n \"1798449\",\n \"11636323\",\n \"1798481\",\n \"1798488\",\n \"1798504\",\n \"6115283\",\n \"6132841\",\n \"6132850\",\n \"9440183\",\n \"9635978\",\n \"9923283\",\n \"10657151\",\n \"1798511\",\n \"10096855\",\n \"11732472\",\n \"11976273\",\n \"1787072\",\n \"1787079\",\n \"1787090\",\n \"1798523\",\n \"1798529\",\n \"1798580\",\n \"1798594\",\n \"1798687\",\n \"1798700\",\n \"1798768\",\n \"1798794\",\n \"1798802\",\n \"1798807\",\n \"1798823\",\n \"1798863\",\n \"1798868\",\n \"4301310\",\n \"4532351\",\n \"4532352\",\n \"4532357\",\n \"6115426\",\n \"6115437\",\n \"6133046\",\n \"6133051\",\n \"8150450\",\n \"8793873\",\n \"9238900\",\n \"9243875\",\n \"9292394\",\n \"9314022\",\n \"9353360\",\n \"9358521\",\n \"9425857\",\n \"9499599\",\n \"9527919\",\n \"9533271\",\n \"9545713\",\n \"9579730\",\n \"9608673\",\n \"9621113\",\n \"9626500\",\n \"1799165\",\n \"1799167\",\n \"1799183\",\n \"1799417\",\n \"1799703\",\n \"1799708\",\n \"9249036\",\n \"1799743\",\n \"1799751\",\n \"1799757\",\n \"6132824\",\n \"6132825\",\n \"1803127\",\n \"10722110\",\n \"1803148\",\n \"1803163\",\n \"1803197\",\n \"1803218\",\n \"1803266\",\n \"1803302\",\n \"10033898\",\n \"5114892\",\n \"5114903\",\n \"1803628\",\n \"11713970\",\n \"5114923\",\n \"5114930\",\n \"5114934\",\n \"5114946\",\n \"11909090\",\n \"1803781\",\n \"1803788\",\n \"1803824\",\n \"1804071\",\n \"1804074\",\n \"1804246\",\n \"1804331\",\n \"1804337\",\n \"1804394\",\n \"1804398\",\n \"1804401\",\n \"1804404\",\n \"1804407\",\n \"1804409\",\n \"1804429\",\n \"1804430\",\n \"1804477\",\n \"1804512\",\n \"1804513\",\n \"1804522\",\n \"5115046\",\n \"1804610\",\n \"9343385\",\n \"10053130\",\n \"1804721\",\n \"1804727\",\n \"1804742\",\n \"1804759\",\n \"1804760\",\n \"10156470\",\n \"8865876\",\n \"1804906\",\n \"11508076\",\n \"11907485\",\n \"1804963\",\n \"1804969\",\n \"1804971\",\n \"1804974\",\n \"1805043\",\n \"1805044\",\n \"1805110\",\n \"1805111\",\n \"1805155\",\n \"4532608\",\n \"1805184\",\n \"1805197\",\n \"1805271\",\n \"11494627\",\n \"12229237\",\n \"1805505\",\n \"1805524\",\n \"1805537\",\n \"1805540\",\n \"1805542\",\n \"1805549\",\n \"1805580\",\n \"1805682\",\n \"1805691\",\n \"1805717\",\n \"5115166\",\n \"5115167\",\n \"5115198\",\n \"9663271\",\n \"1805806\",\n \"1805938\",\n \"1805955\",\n \"1805976\",\n \"1805982\",\n \"1806064\",\n \"1806075\",\n \"1806145\",\n \"1806170\",\n \"1806176\",\n \"5115406\",\n \"1806687\",\n \"1806690\",\n \"1806702\",\n \"1806704\",\n \"1806737\",\n \"1806740\",\n \"1806814\",\n \"9235225\",\n \"9278398\",\n \"9394138\",\n \"9417594\",\n \"9491341\",\n \"9541734\",\n \"9565980\",\n \"9588105\",\n \"1806871\",\n \"1806872\",\n \"1806878\",\n \"1806887\",\n \"1806913\",\n \"1806936\",\n \"7874258\",\n \"1807271\",\n \"1807273\",\n \"5115500\",\n \"1807353\",\n \"1807355\",\n \"1807473\",\n \"1807477\",\n \"1807478\",\n \"1807479\",\n \"1807480\",\n \"1807483\",\n \"1807485\",\n \"1807488\",\n \"1807490\",\n \"1807491\",\n \"1807503\",\n \"1807514\",\n \"1807553\",\n \"1807569\",\n \"1807787\",\n \"1807881\",\n \"1807969\",\n \"1808088\",\n \"11453492\",\n \"11900897\",\n \"1808140\",\n \"1808145\",\n \"1808161\",\n \"1808166\",\n \"1808172\",\n \"1808180\",\n \"1808195\",\n \"1808221\",\n \"1808232\",\n \"1808236\",\n \"1808286\",\n \"1808340\",\n \"1808348\",\n \"1808359\",\n \"1808381\",\n \"1808440\",\n \"1808450\",\n \"1808559\",\n \"6198302\",\n \"9219266\",\n \"1808590\",\n \"1808592\",\n \"1808648\",\n \"1808752\",\n \"5115701\",\n \"5115771\",\n \"1809019\",\n \"8929537\",\n \"1809066\",\n \"5115777\",\n \"1809115\",\n \"1809127\",\n \"1809135\",\n \"9463067\",\n \"1809158\",\n \"1809159\",\n \"1809210\",\n \"12214821\",\n \"1809244\",\n \"1809248\",\n \"1809294\",\n \"1809299\",\n \"1809305\",\n \"1809308\",\n \"1809348\",\n \"10189965\",\n \"1809381\",\n \"1809387\",\n \"1809491\",\n \"1809499\",\n \"5116095\",\n \"10010700\",\n \"10183056\",\n \"12006709\",\n \"1810025\",\n \"1810099\",\n \"1810121\",\n \"1810145\",\n \"1810172\",\n \"1810318\",\n \"1810464\",\n \"1810469\",\n \"5116128\",\n \"5116134\",\n \"5116145\",\n \"5116198\",\n \"5116238\",\n \"5116252\",\n \"5116293\",\n \"9350900\",\n \"1810743\",\n \"1810752\",\n \"1810824\",\n \"1810846\",\n \"1810851\",\n \"1810866\",\n \"1810867\",\n \"9389851\",\n \"7535515\",\n \"1811019\",\n \"1811026\",\n \"1811079\",\n \"1811081\",\n \"1811122\",\n \"1811439\",\n \"5116332\",\n \"5116338\",\n \"5116353\",\n \"5116358\",\n \"10882244\",\n \"5116395\",\n \"5116397\",\n \"5116412\",\n \"5116416\",\n \"12176559\",\n \"12182061\",\n \"1811686\",\n \"5116423\",\n \"1812437\",\n \"1812453\",\n \"1812465\",\n \"1812500\",\n \"1812573\",\n \"1812658\",\n \"1812881\",\n \"10671425\",\n \"10821201\",\n \"11736162\",\n \"12209759\",\n \"1813010\",\n \"1813036\",\n \"1813114\",\n \"1813248\",\n \"1813263\",\n \"5117189\",\n \"5117200\",\n \"7656811\",\n \"1814182\",\n \"1814323\",\n \"1814336\",\n \"1814338\",\n \"1814357\",\n \"1814359\",\n \"1814365\",\n \"5117245\",\n \"5117347\",\n \"5117348\",\n \"1814538\",\n \"1814552\",\n \"5117361\",\n \"1814630\",\n \"1814653\",\n \"1814658\",\n \"1814665\",\n \"1814692\",\n \"1814800\",\n \"1814823\",\n \"1814827\",\n \"1814838\",\n \"1814843\",\n \"1814863\",\n \"8933773\",\n \"1814913\",\n \"1814928\",\n \"1814971\",\n \"5117399\",\n \"5117400\",\n \"1815260\",\n \"10074808\",\n \"1815338\",\n \"1815373\",\n \"5117413\",\n \"5117414\",\n \"9434954\",\n \"8916247\",\n \"5117430\",\n \"5117462\",\n \"5117463\",\n \"5117553\",\n \"1815680\",\n \"1815856\",\n \"10826443\",\n \"12249986\",\n \"1816029\",\n \"1816065\",\n \"1816110\",\n \"1816138\",\n \"1816246\",\n \"1816264\",\n \"1816276\",\n \"1816292\",\n \"1816299\",\n \"1816362\",\n \"1816434\",\n \"1816570\",\n \"5117685\",\n \"5117687\",\n \"1816881\",\n \"5117776\",\n \"5117779\",\n \"5117791\",\n \"5117805\",\n \"1817065\",\n \"1817086\",\n \"11703980\",\n \"1817160\",\n \"1817171\",\n \"1817217\",\n \"1817690\",\n \"1817693\",\n \"1817696\",\n \"1817727\",\n \"1817729\",\n \"1817732\",\n \"1817734\",\n \"1817749\",\n \"1817797\",\n \"11725616\",\n \"1817808\",\n \"1817810\",\n \"1817852\",\n \"1817854\",\n \"1817864\",\n \"5734900\",\n \"1817940\",\n \"1818252\",\n \"11461056\",\n \"11860565\",\n \"1818413\",\n \"5118046\",\n \"11758730\",\n \"1818454\",\n \"1818463\",\n \"5118171\",\n \"6122301\",\n \"8326103\",\n \"1818659\",\n \"1818991\",\n \"1819050\",\n \"10556853\",\n \"10822185\",\n \"1819128\",\n \"1819145\",\n \"4532293\",\n \"4532297\",\n \"6134023\",\n \"6134027\",\n \"6197200\",\n \"7346382\",\n \"7346384\",\n \"1819268\",\n \"1819270\",\n \"1819280\",\n \"1819310\",\n \"11656384\",\n \"1819421\",\n \"8407461\",\n \"1819668\",\n \"1819699\",\n \"9331464\",\n \"6134035\",\n \"1819873\",\n \"1819928\",\n \"5118291\",\n \"5118327\",\n \"5118348\",\n \"5925317\",\n \"6122092\",\n \"7657803\",\n \"8361973\",\n \"8720118\",\n \"9391467\",\n \"9568710\",\n \"1819970\",\n \"5118422\",\n \"10546538\",\n \"1820275\",\n \"1820282\",\n \"1820291\",\n \"1820318\",\n \"1820352\",\n \"1820372\",\n \"1820383\",\n \"1820393\",\n \"1820401\",\n \"1820406\",\n \"1820414\",\n \"1820429\",\n \"1820435\",\n \"1820440\",\n \"1820450\",\n \"1820451\",\n \"1820458\",\n \"1820477\",\n \"1820478\",\n \"5734655\",\n \"5734657\",\n \"6121912\",\n \"7346381\",\n \"9420824\",\n \"1820565\",\n \"1820711\",\n \"1820714\",\n \"1820722\",\n \"1820753\",\n \"1820764\",\n \"1820791\",\n \"1820802\",\n \"1820888\",\n \"1820940\",\n \"1820948\",\n \"1821012\",\n \"1821051\",\n \"1821105\",\n \"1821113\",\n \"1821260\",\n \"8178238\",\n \"1821436\",\n \"10274769\",\n \"1821448\",\n \"6122103\",\n \"1822141\",\n \"1822142\",\n \"10551407\",\n \"11731502\",\n \"12253343\",\n \"12037602\",\n \"9276279\",\n \"9347308\",\n \"5884571\",\n \"10503495\",\n \"10106475\",\n \"8897869\",\n \"9956017\",\n \"7596232\",\n \"11873825\",\n \"5771982\",\n \"8872165\",\n \"9288386\",\n \"9291075\",\n \"9362560\",\n \"9480768\",\n \"9601788\",\n \"8881513\",\n \"12176367\",\n \"7346231\",\n \"12183285\",\n \"6097214\",\n \"4532544\",\n \"4532614\",\n \"4532549\",\n \"4532516\",\n \"6133081\",\n \"6133083\",\n \"4532532\",\n \"4532565\",\n \"10864524\",\n \"12021153\",\n \"12021649\",\n \"12089608\",\n \"9673208\",\n \"10270464\",\n \"8741750\",\n \"9473918\",\n \"11904675\",\n \"9400545\",\n \"9559336\",\n \"6133292\",\n \"11332355\",\n \"6133340\",\n \"10062933\",\n \"10717837\",\n \"8148822\",\n \"12180031\",\n \"12203022\",\n \"12216332\",\n \"12242422\",\n \"9852545\",\n \"10496181\",\n \"10806460\",\n \"6133252\",\n \"10072380\",\n \"6133325\",\n \"9754232\",\n \"10972780\",\n \"11142432\",\n \"10629533\",\n \"10309234\",\n \"12171522\",\n \"9493317\",\n \"9315833\",\n \"11962292\",\n \"12017078\",\n \"10004820\",\n \"10248689\",\n \"10399906\",\n \"6112547\",\n \"6133266\",\n \"6133269\",\n \"6133270\",\n \"6133271\",\n \"10454874\",\n \"10754772\",\n \"10812069\",\n \"11232431\",\n \"6112449\",\n \"6112472\",\n \"6133311\",\n \"6133312\",\n \"6133313\",\n \"6133315\",\n \"6133317\",\n \"8452092\",\n \"8526388\",\n \"8543494\",\n \"8624848\",\n \"9927378\",\n \"10443878\",\n \"10395440\",\n \"8774985\",\n \"8908724\",\n \"9135886\",\n \"9247563\",\n \"9288596\",\n \"9290866\",\n \"9315577\",\n \"9334851\",\n \"9406984\",\n \"9432644\",\n \"9452274\",\n \"9526331\",\n \"9552703\",\n \"9555094\",\n \"9599150\",\n \"5734901\",\n \"10637588\",\n \"6133262\",\n \"10643533\",\n \"12257250\",\n \"10214972\",\n \"10830546\",\n \"10851228\",\n \"12194283\",\n \"10166724\",\n \"8831819\",\n \"12135372\",\n \"5115381\",\n \"11033463\",\n \"11812181\",\n \"5115854\",\n \"5115872\",\n \"5115874\",\n \"9530200\",\n \"5116475\",\n \"8038357\",\n \"8165185\",\n \"6133264\",\n \"6097254\",\n \"9359871\",\n \"9379595\",\n \"9387353\",\n \"9407200\",\n \"9432438\",\n \"9452497\",\n \"9460510\",\n \"9498206\",\n \"9552466\",\n \"9627917\",\n \"1774826\",\n \"1774829\",\n \"5114949\",\n \"5114950\",\n \"5114956\",\n \"10480609\",\n \"5116698\",\n \"5116843\",\n \"1805535\",\n \"8429622\",\n \"1788711\",\n \"1788717\",\n \"7560807\",\n \"9301336\",\n \"12171068\",\n \"9266866\",\n \"8363709\",\n \"10178326\",\n \"10282389\",\n \"10400868\",\n \"10469564\",\n \"10813849\",\n \"10907635\",\n \"10982648\",\n \"8874633\",\n \"9508913\",\n \"9621271\",\n \"1783898\",\n \"1783906\",\n \"6133033\",\n \"5116504\",\n \"8723161\",\n \"9198767\",\n \"5114912\",\n \"5114915\",\n \"5114921\",\n \"1818216\",\n \"5108808\",\n \"1788635\",\n \"9336001\",\n \"1781413\",\n \"1781420\",\n \"1781421\",\n \"1781428\",\n \"1803461\",\n \"4532395\",\n \"4532405\",\n \"4532408\",\n \"4532412\",\n \"9446902\",\n \"1780869\",\n \"1780897\",\n \"10866411\",\n \"6133241\",\n \"6133242\",\n \"6133244\",\n \"6133248\",\n \"7346227\",\n \"8000103\",\n \"9478424\",\n \"1781598\",\n \"1794268\",\n \"1794273\",\n \"1803590\",\n \"1803593\",\n \"4532534\",\n \"1819320\",\n \"1772374\",\n \"1796523\",\n \"1763761\",\n \"6115388\",\n \"1816634\",\n \"1816648\",\n \"1816673\",\n \"1816685\",\n \"6133297\",\n \"1774583\",\n \"1774598\",\n \"1774600\",\n \"1774604\",\n \"1774618\",\n \"1774626\",\n \"1774635\",\n \"1774640\",\n \"1774654\",\n \"1774661\",\n \"1774682\",\n \"1774691\",\n \"1774702\",\n \"1774712\",\n \"1768626\",\n \"1768630\",\n \"6132809\",\n \"1803544\",\n \"1803545\",\n \"1817973\",\n \"1819852\",\n \"1780287\",\n \"1813174\",\n \"4532508\",\n \"4532510\",\n \"8805966\",\n \"8905759\",\n \"9051758\",\n \"9254017\",\n \"9298735\",\n \"9324570\",\n \"9368974\",\n \"9443159\",\n \"9469928\",\n \"9488783\",\n \"9637664\",\n \"1793515\",\n \"1793533\",\n \"1793538\",\n \"1793542\",\n \"5111643\",\n \"1804532\",\n \"1766892\",\n \"1813460\",\n \"1813468\",\n \"1813413\",\n \"1813415\",\n \"10164453\",\n \"1768190\",\n \"1807634\",\n \"1782645\",\n \"9400916\",\n \"1768459\",\n \"1768461\",\n \"1768462\",\n \"1760233\",\n \"1760244\",\n \"1760246\",\n \"1760257\",\n \"9235027\",\n \"9989156\",\n \"5113001\",\n \"5113030\",\n \"5113036\",\n \"9522383\",\n \"8177591\",\n \"5109796\",\n \"1821455\",\n \"1821464\",\n \"1821468\",\n \"1821478\",\n \"1821479\",\n \"1821505\",\n \"1821542\",\n \"1821547\",\n \"1821581\",\n \"1821651\",\n \"1821684\",\n \"1821856\",\n \"1821863\",\n \"1821911\",\n \"1821920\",\n \"1821934\",\n \"1821940\",\n \"1822003\",\n \"1822017\",\n \"1819337\",\n \"1819362\",\n \"1804120\",\n \"1804148\",\n \"1804182\",\n \"1774997\",\n \"1768212\",\n \"6122364\",\n \"1815315\",\n \"1819170\",\n \"5118223\",\n \"1820573\",\n \"1781446\",\n \"1781473\",\n \"6116073\",\n \"6116076\",\n \"1782507\",\n \"1783713\",\n \"1783715\",\n \"1783725\",\n \"9918092\",\n \"1775796\",\n \"1816775\",\n \"1811814\",\n \"1811948\",\n \"1812026\",\n \"1812105\",\n \"1812207\",\n \"1812262\",\n \"1812339\",\n \"1812394\",\n \"8237987\",\n \"5117941\",\n \"1803306\",\n \"4532366\",\n \"4687933\",\n \"4687934\",\n \"4687935\",\n \"5884258\",\n \"6116646\",\n \"6116659\",\n \"6116661\",\n \"6116669\",\n \"6116674\",\n \"7716829\",\n \"8299504\",\n \"8968321\",\n \"9451320\",\n \"10926224\",\n \"11088003\",\n \"1820118\",\n \"1820137\",\n \"1819057\",\n \"1799821\",\n \"4532453\",\n \"6116413\",\n \"1820039\",\n \"5118396\",\n \"1814877\",\n \"11754729\",\n \"1781503\",\n \"1781531\",\n \"6115504\",\n \"1798329\",\n \"1798331\",\n \"1798335\",\n \"1784936\",\n \"1784947\",\n \"1784959\",\n \"1785024\",\n \"1785072\",\n \"1785105\",\n \"1765996\",\n \"1765997\",\n \"1765999\",\n \"1766007\",\n \"1766022\",\n \"6133069\",\n \"10272611\",\n \"10330198\",\n \"10598038\",\n \"11513188\",\n \"11612469\",\n \"1786597\",\n \"4687389\",\n \"5884188\",\n \"6117485\",\n \"6132915\",\n \"6132916\",\n \"6132917\",\n \"7611914\",\n \"7924383\",\n \"9935660\",\n \"5110012\",\n \"5110013\",\n \"10196956\",\n \"10392889\",\n \"1811455\",\n \"1811462\",\n \"1811465\",\n \"1772822\",\n \"12185656\",\n \"1809585\",\n \"1809594\",\n \"1781350\",\n \"1781353\",\n \"6133013\",\n \"1796941\",\n \"1796943\",\n \"1807924\",\n \"1819685\",\n \"10098436\",\n \"11717028\",\n \"1771772\",\n \"1771779\",\n \"1782310\",\n \"10094256\",\n \"6197138\",\n \"10765884\",\n \"12266659\",\n \"9792270\",\n \"5108421\",\n \"5108435\",\n \"5108440\",\n \"1771903\",\n \"1780617\",\n \"1780646\",\n \"1780668\",\n \"1780676\",\n \"1788813\",\n \"10097776\",\n \"4301309\",\n \"10506164\",\n \"1777463\",\n \"1777471\",\n \"1777500\",\n \"1777517\",\n \"6115973\",\n \"5112440\",\n \"1791735\",\n \"1791736\",\n \"1795542\",\n \"1860974\",\n \"1860979\",\n \"1860983\",\n \"1860987\",\n \"1860989\",\n \"1860993\",\n \"1860994\",\n \"1860996\",\n \"1861011\",\n \"1861030\",\n \"1861031\",\n \"4522911\",\n \"4522916\",\n \"4522919\",\n \"4522922\",\n \"12318291\",\n \"4522886\",\n \"4522890\",\n \"4522891\",\n \"4522896\",\n \"1860765\",\n \"1860768\",\n \"1860849\",\n \"1860852\",\n \"1860857\",\n \"7767114\",\n \"7851302\",\n \"7961640\",\n \"1992378\",\n \"1992434\",\n \"1992489\",\n \"1992504\",\n \"7472845\",\n \"1731886\",\n \"1731890\",\n \"1731906\",\n \"1731923\",\n \"1731926\",\n \"1731927\",\n \"1731980\",\n \"1732001\",\n \"1732005\",\n \"1732031\",\n \"1732033\",\n \"1732044\",\n \"1732052\",\n \"1852956\",\n \"1852978\",\n \"10640865\",\n \"9950697\",\n \"1833779\",\n \"1833782\",\n \"1833794\",\n \"1834524\",\n \"1834547\",\n \"4685588\",\n \"4685595\",\n \"1834793\",\n \"1835086\",\n \"1835348\",\n \"1835430\",\n \"1835432\",\n \"1835433\",\n \"1835436\",\n \"1835438\",\n \"1835449\",\n \"1835451\",\n \"1835456\",\n \"1835457\",\n \"9724183\",\n \"1835467\",\n \"1835814\",\n \"1835819\",\n \"10610041\",\n \"1837343\",\n \"1837360\",\n \"1837420\",\n \"1837429\",\n \"1837464\",\n \"1837515\",\n \"4529064\",\n \"7958169\",\n \"8015612\",\n \"1837724\",\n \"1837726\",\n \"1837727\",\n \"1837968\",\n \"1838058\",\n \"1838065\",\n \"1838071\",\n \"10017792\",\n \"1838360\",\n \"1838465\",\n \"1838512\",\n \"1838584\",\n \"1839293\",\n \"1839296\",\n \"1839658\",\n \"1839714\",\n \"1839721\",\n \"4684986\",\n \"1840297\",\n \"1840301\",\n \"1840311\",\n \"1840345\",\n \"1840346\",\n \"1840360\",\n \"1840371\",\n \"1840379\",\n \"1840380\",\n \"1840408\",\n \"1840441\",\n \"1840448\",\n \"1840478\",\n \"1840483\",\n \"1840485\",\n \"1840520\",\n \"1840543\",\n \"1840553\",\n \"1840555\",\n \"1840566\",\n \"1840570\",\n \"1840581\",\n \"1840592\",\n \"1840596\",\n \"1840621\",\n \"1840656\",\n \"4529186\",\n \"1841081\",\n \"1841084\",\n \"1841091\",\n \"1841095\",\n \"10187154\",\n \"5119808\",\n \"1831752\",\n \"1852751\",\n \"1852787\",\n \"1852831\",\n \"1852832\",\n \"1852859\",\n \"9473121\",\n \"1852901\",\n \"4529630\",\n \"9851261\",\n \"5125075\",\n \"5125104\",\n \"8416348\",\n \"10371735\",\n \"1869359\",\n \"1869363\",\n \"9883856\",\n \"1751236\",\n \"1751290\",\n \"1751298\",\n \"1751299\",\n \"1751336\",\n \"1751368\",\n \"1751400\",\n \"1751457\",\n \"4535884\",\n \"4535904\",\n \"1939510\",\n \"1939520\",\n \"5141344\",\n \"1860184\",\n \"1860259\",\n \"1860260\",\n \"1860261\",\n \"1860274\",\n \"10165831\",\n \"1860408\",\n \"4525177\",\n \"1860443\",\n \"10308365\",\n \"5123339\",\n \"9913863\",\n \"10361029\",\n \"10625116\",\n \"5123394\",\n \"5123419\",\n \"5769164\",\n \"5880040\",\n \"5880041\",\n \"6132546\",\n \"5123449\",\n \"5123461\",\n \"5123474\",\n \"5123485\",\n \"5123489\",\n \"5123542\",\n \"1735408\",\n \"10208422\",\n \"4302389\",\n \"1751207\",\n \"1751216\",\n \"1853222\",\n \"1869595\",\n \"8797666\",\n \"1869656\",\n \"1869666\",\n \"10005632\",\n \"10433914\",\n \"11756119\",\n \"1869706\",\n \"1869707\",\n \"1869714\",\n \"1869803\",\n \"1869825\",\n \"1869852\",\n \"1869858\",\n \"1869976\",\n \"1870017\",\n \"1870037\",\n \"1870202\",\n \"1870237\",\n \"1870249\",\n \"1870250\",\n \"1870267\",\n \"1870308\",\n \"1870415\",\n \"1870426\",\n \"1870450\",\n \"1870452\",\n \"1870459\",\n \"1870506\",\n \"1870509\",\n \"1870607\",\n \"1870650\",\n \"1870703\",\n \"1870721\",\n \"1870727\",\n \"1870733\",\n \"1870751\",\n \"1870777\",\n \"1870988\",\n \"5125306\",\n \"1871160\",\n \"1871171\",\n \"1871175\",\n \"1871212\",\n \"1871217\",\n \"1871252\",\n \"1871264\",\n \"1871333\",\n \"1871379\",\n \"10246305\",\n \"10588642\",\n \"10817208\",\n \"1871407\",\n \"4531402\",\n \"4531409\",\n \"8766638\",\n \"9944922\",\n \"1871414\",\n \"1871419\",\n \"1871451\",\n \"4531365\",\n \"4531376\",\n \"1871457\",\n \"1871509\",\n \"1871560\",\n \"1871597\",\n \"1871630\",\n \"1871683\",\n \"1871698\",\n \"1871754\",\n \"1871763\",\n \"1871783\",\n \"1871826\",\n \"1871890\",\n \"1871923\",\n \"1871940\",\n \"1871988\",\n \"1872094\",\n \"1872169\",\n \"9969513\",\n \"1872200\",\n \"1872210\",\n \"1872255\",\n \"10336328\",\n \"1872452\",\n \"1872456\",\n \"1872466\",\n \"1872470\",\n \"1872514\",\n \"1872515\",\n \"4531427\",\n \"7673242\",\n \"1872735\",\n \"1872812\",\n \"1872827\",\n \"10787705\",\n \"1872848\",\n \"1872850\",\n \"1872873\",\n \"1872901\",\n \"1872904\",\n \"1873048\",\n \"1873049\",\n \"1873051\",\n \"1873079\",\n \"1873215\",\n \"1873222\",\n \"1873267\",\n \"1873285\",\n \"1873290\",\n \"1873291\",\n \"1873319\",\n \"5125545\",\n \"1873373\",\n \"10807383\",\n \"1873376\",\n \"1873381\",\n \"1873383\",\n \"1873384\",\n \"1873398\",\n \"1873411\",\n \"1873417\",\n \"1873585\",\n \"1873620\",\n \"9858922\",\n \"7372375\",\n \"1873753\",\n \"4530947\",\n \"4530951\",\n \"10143814\",\n \"1873773\",\n \"10165457\",\n \"10366580\",\n \"10410048\",\n \"10518163\",\n \"10561589\",\n \"1873776\",\n \"1873780\",\n \"1873783\",\n \"4531237\",\n \"4531264\",\n \"9971850\",\n \"1873843\",\n \"1873890\",\n \"5125569\",\n \"5125591\",\n \"5125596\",\n \"5125600\",\n \"5125602\",\n \"5125629\",\n \"5125633\",\n \"5125635\",\n \"5125689\",\n \"1874146\",\n \"1874158\",\n \"1874160\",\n \"1874168\",\n \"1874179\",\n \"1874192\",\n \"1874204\",\n \"1874211\",\n \"1874229\",\n \"1874248\",\n \"1874257\",\n \"1874269\",\n \"1874274\",\n \"1874279\",\n \"1874280\",\n \"1874295\",\n \"4531145\",\n \"4531147\",\n \"4531158\",\n \"1874317\",\n \"1874375\",\n \"1874513\",\n \"1874552\",\n \"10244305\",\n \"1874743\",\n \"9782192\",\n \"1874901\",\n \"1874937\",\n \"1875008\",\n \"1875120\",\n \"8219149\",\n \"1875196\",\n \"1875319\",\n \"1875327\",\n \"1875376\",\n \"1875407\",\n \"1875409\",\n \"1875429\",\n \"1875451\",\n \"4531242\",\n \"1875478\",\n \"1875483\",\n \"1875485\",\n \"1875534\",\n \"1875554\",\n \"1875584\",\n \"1875606\",\n \"1875607\",\n \"1875631\",\n \"1875633\",\n \"1875680\",\n \"1875682\",\n \"1875687\",\n \"4531284\",\n \"1875827\",\n \"1875830\",\n \"1875844\",\n \"1875865\",\n \"1875869\",\n \"1875914\",\n \"1875918\",\n \"1875940\",\n \"1875952\",\n \"1875958\",\n \"1876063\",\n \"1876168\",\n \"1876329\",\n \"1876357\",\n \"1876409\",\n \"1876479\",\n \"1876512\",\n \"1876542\",\n \"1876548\",\n \"1876549\",\n \"1876592\",\n \"1876623\",\n \"1876665\",\n \"10356445\",\n \"1876854\",\n \"1876876\",\n \"10442332\",\n \"1876922\",\n \"1876955\",\n \"1876987\",\n \"10142569\",\n \"1877002\",\n \"1877038\",\n \"5125916\",\n \"5125917\",\n \"1877282\",\n \"1877310\",\n \"1877321\",\n \"1877338\",\n \"1877341\",\n \"1877345\",\n \"1877353\",\n \"1877364\",\n \"1877365\",\n \"1877368\",\n \"1877372\",\n \"4531246\",\n \"1877406\",\n \"1877443\",\n \"1877453\",\n \"9111961\",\n \"1877492\",\n \"1877498\",\n \"1877537\",\n \"5125939\",\n \"1877643\",\n \"5125943\",\n \"5126000\",\n \"5126013\",\n \"5126052\",\n \"1877788\",\n \"1877940\",\n \"1877941\",\n \"1877975\",\n \"1877986\",\n \"1877988\",\n \"1877995\",\n \"1878067\",\n \"4531417\",\n \"4531425\",\n \"4531429\",\n \"1878158\",\n \"1878173\",\n \"1878197\",\n \"1878350\",\n \"1878370\",\n \"1878392\",\n \"1878406\",\n \"1878470\",\n \"1878471\",\n \"1878490\",\n \"1878500\",\n \"9835867\",\n \"1878586\",\n \"1883045\",\n \"1888454\",\n \"1890024\",\n \"1890056\",\n \"1890065\",\n \"5976937\",\n \"10211808\",\n \"5884888\",\n \"10526954\",\n \"10065676\",\n \"10129011\",\n \"10279983\",\n \"11591775\",\n \"9857679\",\n \"10423263\",\n \"6133441\",\n \"11728049\",\n \"1875885\",\n \"5125525\",\n \"1877035\",\n \"1873697\",\n \"5125780\",\n \"1872315\",\n \"1871504\",\n \"1748780\",\n \"1748805\",\n \"1836906\",\n \"1836907\",\n \"5143284\",\n \"5143285\",\n \"11950325\",\n \"12018158\",\n \"12060941\",\n \"12087490\",\n \"1939962\",\n \"1939964\",\n \"1940110\",\n \"1940158\",\n \"4525859\",\n \"4525884\",\n \"11667300\",\n \"5131957\",\n \"5141493\",\n \"5141501\",\n \"5714558\",\n \"5714572\",\n \"5714575\",\n \"5714600\",\n \"10267561\",\n \"10286565\",\n \"10451589\",\n \"10509408\",\n \"1940504\",\n \"1940510\",\n \"1940517\",\n \"1940546\",\n \"1940575\",\n \"1940580\",\n \"1940601\",\n \"1940604\",\n \"1940609\",\n \"1940612\",\n \"1940639\",\n \"1940644\",\n \"1940694\",\n \"1940717\",\n \"1940744\",\n \"1940757\",\n \"1940768\",\n \"4525777\",\n \"4525803\",\n \"8956729\",\n \"9930604\",\n \"10402067\",\n \"1940807\",\n \"1940838\",\n \"4525846\",\n \"1941310\",\n \"1941330\",\n \"1941348\",\n \"1941377\",\n \"1941437\",\n \"10309794\",\n \"12211069\",\n \"10495733\",\n \"10584071\",\n \"12252570\",\n \"1941266\",\n \"1941294\",\n \"1941299\",\n \"1939833\",\n \"1939879\",\n \"9146244\",\n \"12231385\",\n \"1736315\",\n \"1736358\",\n \"1736377\",\n \"1736390\",\n \"1736412\",\n \"1736425\",\n \"1736447\",\n \"10132596\",\n \"11645405\",\n \"1736484\",\n \"1736499\",\n \"1736511\",\n \"1736528\",\n \"1736560\",\n \"1736565\",\n \"1736601\",\n \"1736623\",\n \"10274976\",\n \"5102628\",\n \"5102635\",\n \"5102637\",\n \"5102642\",\n \"5102651\",\n \"5102666\",\n \"5102668\",\n \"5102671\",\n \"5102678\",\n \"1736727\",\n \"1736760\",\n \"1736800\",\n \"10355428\",\n \"1736803\",\n \"1736807\",\n \"1736809\",\n \"1736811\",\n \"1736821\",\n \"1736826\",\n \"5102683\",\n \"1736836\",\n \"1736860\",\n \"10638589\",\n \"1736898\",\n \"1736904\",\n \"1736905\",\n \"1736906\",\n \"1736915\",\n \"1736918\",\n \"1736937\",\n \"1736939\",\n \"1736945\",\n \"4530406\",\n \"1736993\",\n \"1736995\",\n \"1737015\",\n \"4529931\",\n \"1737072\",\n \"10146436\",\n \"10469532\",\n \"1737115\",\n \"1737131\",\n \"1737182\",\n \"1737187\",\n \"1737231\",\n \"10842267\",\n \"1737313\",\n \"1737342\",\n \"1737368\",\n \"1737374\",\n \"1737403\",\n \"1737413\",\n \"1737417\",\n \"1737437\",\n \"1737491\",\n \"1737497\",\n \"1737509\",\n \"4530608\",\n \"7350238\",\n \"7466487\",\n \"1737524\",\n \"1737526\",\n \"1737533\",\n \"1737542\",\n \"1737544\",\n \"1737551\",\n \"1737552\",\n \"1737650\",\n \"1737753\",\n \"1737768\",\n \"1737775\",\n \"1737776\",\n \"1737783\",\n \"1737847\",\n \"1737893\",\n \"1737904\",\n \"1737924\",\n \"1737929\",\n \"1737964\",\n \"1737968\",\n \"1737973\",\n \"1737978\",\n \"4530002\",\n \"8186212\",\n \"8485254\",\n \"1738045\",\n \"1738050\",\n \"1738081\",\n \"1738163\",\n \"1738192\",\n \"1738218\",\n \"1738222\",\n \"1738245\",\n \"10090105\",\n \"10370026\",\n \"1738317\",\n \"1738322\",\n \"1738337\",\n \"1738373\",\n \"1738422\",\n \"1738429\",\n \"1738514\",\n \"5102693\",\n \"5102735\",\n \"5102773\",\n \"5102782\",\n \"5102807\",\n \"5102809\",\n \"5102830\",\n \"8420632\",\n \"8869900\",\n \"9953996\",\n \"5102931\",\n \"5102951\",\n \"1738687\",\n \"1738700\",\n \"1738722\",\n \"1738777\",\n \"1738791\",\n \"1738794\",\n \"1738809\",\n \"1738839\",\n \"1738883\",\n \"1738888\",\n \"1739034\",\n \"1739042\",\n \"1739043\",\n \"8086347\",\n \"1739051\",\n \"1739128\",\n \"1739151\",\n \"1739220\",\n \"1739272\",\n \"1739284\",\n \"1739290\",\n \"1739316\",\n \"1739337\",\n \"1739362\",\n \"1739364\",\n \"1739377\",\n \"1739381\",\n \"1739400\",\n \"5102982\",\n \"1739449\",\n \"1739451\",\n \"1739461\",\n \"1739471\",\n \"1739553\",\n \"1739567\",\n \"10596756\",\n \"1739605\",\n \"1739612\",\n \"1739617\",\n \"1739629\",\n \"1739646\",\n \"1739656\",\n \"1739668\",\n \"1739677\",\n \"10229731\",\n \"1739727\",\n \"1739748\",\n \"1739767\",\n \"1739770\",\n \"1739797\",\n \"1739816\",\n \"1739819\",\n \"1739833\",\n \"1739867\",\n \"1739884\",\n \"1739919\",\n \"1739922\",\n \"1739924\",\n \"1739927\",\n \"1739931\",\n \"1739954\",\n \"1739956\",\n \"1739964\",\n \"1739973\",\n \"1739980\",\n \"1739983\",\n \"1739999\",\n \"1740003\",\n \"1740005\",\n \"1740037\",\n \"1740053\",\n \"1740060\",\n \"1740069\",\n \"1740116\",\n \"1740120\",\n \"1740133\",\n \"1740148\",\n \"1740155\",\n \"1740163\",\n \"1740174\",\n \"1740183\",\n \"1740185\",\n \"1740225\",\n \"1740246\",\n \"1740305\",\n \"1740370\",\n \"1740374\",\n \"1740389\",\n \"1740392\",\n \"1740400\",\n \"7797515\",\n \"8215326\",\n \"1740449\",\n \"1740469\",\n \"1740482\",\n \"1740518\",\n \"1740524\",\n \"1740533\",\n \"1740567\",\n \"1740570\",\n \"1740586\",\n \"1740623\",\n \"8094357\",\n \"1740762\",\n \"1740797\",\n \"1740828\",\n \"1741056\",\n \"12259151\",\n \"1741074\",\n \"9826405\",\n \"1741084\",\n \"1741130\",\n \"1741131\",\n \"1741147\",\n \"1741253\",\n \"1741258\",\n \"1741324\",\n \"1741340\",\n \"1741341\",\n \"1741361\",\n \"1741368\",\n \"4530151\",\n \"8345820\",\n \"1741398\",\n \"1741400\",\n \"11906255\",\n \"5103061\",\n \"5103066\",\n \"5771357\",\n \"1741545\",\n \"1741551\",\n \"10250474\",\n \"10709446\",\n \"10776625\",\n \"10838422\",\n \"10869347\",\n \"1741590\",\n \"1741593\",\n \"1741615\",\n \"1741633\",\n \"1741634\",\n \"1741667\",\n \"1741719\",\n \"1741747\",\n \"1741752\",\n \"1741756\",\n \"1741765\",\n \"4530424\",\n \"1741812\",\n \"1741818\",\n \"1741820\",\n \"1741823\",\n \"1741824\",\n \"1741826\",\n \"9880932\",\n \"10807169\",\n \"11093909\",\n \"1742081\",\n \"1742089\",\n \"1742091\",\n \"1742106\",\n \"1742121\",\n \"1742142\",\n \"1742150\",\n \"1742168\",\n \"1742178\",\n \"1742180\",\n \"1742185\",\n \"1742198\",\n \"1742203\",\n \"1742214\",\n \"1742239\",\n \"1742241\",\n \"1742260\",\n \"1742263\",\n \"1742268\",\n \"1742272\",\n \"1742273\",\n \"1742287\",\n \"1742293\",\n \"1742304\",\n \"1742310\",\n \"1742335\",\n \"1742346\",\n \"1742402\",\n \"10000103\",\n \"10044107\",\n \"10137001\",\n \"10194727\",\n \"10395101\",\n \"10695966\",\n \"11508404\",\n \"11899754\",\n \"5103394\",\n \"5103451\",\n \"5103502\",\n \"5103613\",\n \"5103736\",\n \"5103948\",\n \"5771350\",\n \"7975250\",\n \"9849625\",\n \"9885192\",\n \"1743182\",\n \"1743184\",\n \"1743196\",\n \"8313553\",\n \"10534945\",\n \"1743319\",\n \"1743323\",\n \"4707896\",\n \"4707900\",\n \"10095278\",\n \"10134865\",\n \"11923027\",\n \"5103998\",\n \"7661023\",\n \"11846897\",\n \"1743453\",\n \"1743461\",\n \"1743475\",\n \"7877231\",\n \"10073044\",\n \"10295171\",\n \"10365884\",\n \"10388627\",\n \"10446580\",\n \"10539598\",\n \"12197284\",\n \"1743532\",\n \"1743588\",\n \"1743604\",\n \"1743613\",\n \"5104056\",\n \"5104063\",\n \"5104088\",\n \"5104093\",\n \"5104116\",\n \"6097235\",\n \"9051888\",\n \"9958147\",\n \"9971153\",\n \"1743641\",\n \"1743643\",\n \"1743653\",\n \"1743657\",\n \"1743658\",\n \"1743663\",\n \"1743680\",\n \"1743694\",\n \"1743710\",\n \"1743714\",\n \"4530214\",\n \"1743730\",\n \"1743768\",\n \"1743775\",\n \"1743782\",\n \"4529900\",\n \"4529908\",\n \"4529915\",\n \"1743825\",\n \"1743828\",\n \"1743838\",\n \"1743855\",\n \"1743856\",\n \"1743862\",\n \"1743867\",\n \"1743898\",\n \"10205587\",\n \"10450442\",\n \"1743998\",\n \"1744071\",\n \"10271464\",\n \"1744130\",\n \"1744136\",\n \"1744180\",\n \"5104157\",\n \"1744212\",\n \"1744224\",\n \"4530632\",\n \"1744416\",\n \"12276630\",\n \"1744498\",\n \"1744526\",\n \"1744542\",\n \"9860684\",\n \"9953708\",\n \"1744588\",\n \"1744593\",\n \"9867379\",\n \"1744693\",\n \"1744699\",\n \"1744700\",\n \"1744709\",\n \"1744714\",\n \"1744724\",\n \"1744728\",\n \"1744731\",\n \"1744739\",\n \"1744742\",\n \"1744748\",\n \"1744763\",\n \"1744777\",\n \"1744782\",\n \"1744789\",\n \"1744808\",\n \"1744810\",\n \"1744860\",\n \"1744896\",\n \"1744901\",\n \"7964262\",\n \"1744949\",\n \"1744953\",\n \"1744998\",\n \"1745013\",\n \"1745019\",\n \"1745022\",\n \"1745079\",\n \"10844862\",\n \"1745131\",\n \"1745307\",\n \"9586705\",\n \"10483734\",\n \"1745558\",\n \"1745561\",\n \"1745579\",\n \"1745600\",\n \"1745606\",\n \"1745630\",\n \"1745634\",\n \"1745636\",\n \"1745643\",\n \"1745659\",\n \"1745666\",\n \"1745669\",\n \"1745675\",\n \"1745676\",\n \"1745678\",\n \"1745705\",\n \"1745724\",\n \"1745725\",\n \"1745729\",\n \"1745737\",\n \"1745746\",\n \"1745756\",\n \"1745761\",\n \"1745762\",\n \"1745771\",\n \"1745781\",\n \"1745787\",\n \"1745788\",\n \"1745814\",\n \"1745816\",\n \"1745827\",\n \"1745830\",\n \"8162538\",\n \"8369868\",\n \"9991710\",\n \"1745895\",\n \"1745925\",\n \"1745947\",\n \"1745952\",\n \"1745957\",\n \"1746000\",\n \"10593489\",\n \"1746027\",\n \"1746068\",\n \"8424972\",\n \"1746174\",\n \"1746327\",\n \"1746413\",\n \"1746440\",\n \"1746462\",\n \"1746512\",\n \"1746586\",\n \"1746613\",\n \"1746644\",\n \"1746666\",\n \"1746689\",\n \"1746695\",\n \"1746714\",\n \"1746751\",\n \"1746754\",\n \"1746763\",\n \"1746774\",\n \"1746775\",\n \"1746831\",\n \"1746832\",\n \"1746856\",\n \"1746859\",\n \"1746876\",\n \"1746881\",\n \"1746898\",\n \"1746910\",\n \"1746927\",\n \"1746949\",\n \"4302199\",\n \"4302202\",\n \"4707848\",\n \"1747024\",\n \"1747050\",\n \"1747068\",\n \"1747140\",\n \"1747141\",\n \"1747147\",\n \"1747150\",\n \"1747155\",\n \"1747160\",\n \"1747161\",\n \"1747163\",\n \"1747166\",\n \"1747171\",\n \"1747188\",\n \"1747189\",\n \"10046698\",\n \"10442122\",\n \"12066849\",\n \"12107129\",\n \"12126779\",\n \"1747196\",\n \"9040133\",\n \"9896144\",\n \"1747215\",\n \"1747222\",\n \"5104442\",\n \"6219423\",\n \"10380465\",\n \"10445629\",\n \"10446898\",\n \"10481441\",\n \"10503464\",\n \"10547716\",\n \"10776919\",\n \"12223349\",\n \"1747523\",\n \"10021059\",\n \"10023049\",\n \"10080502\",\n \"10358334\",\n \"10476233\",\n \"1747639\",\n \"1747672\",\n \"1747738\",\n \"1747740\",\n \"1747814\",\n \"4530138\",\n \"1747914\",\n \"1747924\",\n \"5104558\",\n \"10355898\",\n \"1748103\",\n \"1748109\",\n \"1748148\",\n \"1748149\",\n \"1748151\",\n \"1748152\",\n \"1748203\",\n \"1748321\",\n \"5104597\",\n \"6097234\",\n \"7588222\",\n \"9242559\",\n \"1748425\",\n \"1748442\",\n \"1748456\",\n \"1748473\",\n \"1748486\",\n \"1748518\",\n \"9176043\",\n \"1748605\",\n \"1748648\",\n \"1748661\",\n \"1748720\",\n \"1748751\",\n \"10185271\",\n \"5104641\",\n \"9952043\",\n \"8691947\",\n \"10302660\",\n \"10530383\",\n \"9909775\",\n \"10580256\",\n \"9911298\",\n \"9948031\",\n \"10606887\",\n \"10624577\",\n \"10002059\",\n \"8734154\",\n \"10153630\",\n \"10549715\",\n \"12057008\",\n \"8843927\",\n \"10236521\",\n \"10462612\",\n \"11688440\",\n \"5103083\",\n \"5103100\",\n \"5103118\",\n \"5103121\",\n \"5103154\",\n \"5103166\",\n \"5103176\",\n \"5103181\",\n \"5103183\",\n \"5103185\",\n \"5103201\",\n \"5103227\",\n \"5771227\",\n \"5771229\",\n \"5771230\",\n \"5771232\",\n \"5771236\",\n \"5771239\",\n \"5771241\",\n \"5771243\",\n \"5771249\",\n \"5771255\",\n \"5771256\",\n \"5771258\",\n \"5771259\",\n \"9023222\",\n \"1738196\",\n \"1743651\",\n \"10545267\",\n \"1831775\",\n \"1831780\",\n \"10310599\",\n \"10346267\",\n \"4525500\",\n \"4525503\",\n \"4525505\",\n \"4525510\",\n \"4525530\",\n \"4525540\",\n \"4525547\",\n \"4525557\",\n \"4525562\",\n \"10407953\",\n \"1935498\",\n \"4299071\",\n \"8345567\",\n \"9457324\",\n \"9622955\",\n \"1936026\",\n \"1936810\",\n \"1936859\",\n \"1934172\",\n \"5138967\",\n \"5138984\",\n \"1920844\",\n \"1920851\",\n \"1920864\",\n \"1920889\",\n \"1920892\",\n \"1920900\",\n \"1920923\",\n \"10159697\",\n \"10707501\",\n \"9916153\",\n \"1920957\",\n \"1920991\",\n \"1920996\",\n \"1921009\",\n \"1921010\",\n \"1921021\",\n \"1921040\",\n \"1921044\",\n \"7346426\",\n \"1921053\",\n \"1921055\",\n \"1921064\",\n \"10581870\",\n \"10825466\",\n \"1921092\",\n \"1921093\",\n \"10657453\",\n \"1921123\",\n \"1921150\",\n \"1921163\",\n \"1921239\",\n \"1921240\",\n \"1921247\",\n \"1921248\",\n \"1921255\",\n \"1921262\",\n \"1921263\",\n \"1921300\",\n \"10556522\",\n \"1921466\",\n \"1921521\",\n \"1921590\",\n \"7387466\",\n \"1921633\",\n \"1921650\",\n \"7346430\",\n \"5138069\",\n \"1921897\",\n \"1921910\",\n \"8825450\",\n \"1922038\",\n \"1922039\",\n \"1922041\",\n \"1922044\",\n \"1922049\",\n \"1922057\",\n \"10858809\",\n \"11374171\",\n \"11378618\",\n \"1922063\",\n \"1922064\",\n \"1922085\",\n \"1922111\",\n \"1922143\",\n \"1922163\",\n \"1922197\",\n \"1922219\",\n \"1922223\",\n \"1922244\",\n \"1922285\",\n \"1922288\",\n \"1922291\",\n \"10384044\",\n \"10442031\",\n \"10854079\",\n \"9904499\",\n \"1922311\",\n \"1922343\",\n \"8016522\",\n \"1922455\",\n \"1922468\",\n \"5138200\",\n \"1922572\",\n \"1922584\",\n \"4535092\",\n \"10278292\",\n \"1922637\",\n \"1922676\",\n \"1922679\",\n \"1922689\",\n \"1922694\",\n \"1922701\",\n \"8782891\",\n \"1922739\",\n \"1922745\",\n \"1922771\",\n \"1922849\",\n \"1922851\",\n \"1922865\",\n \"1922867\",\n \"1922868\",\n \"1922889\",\n \"1922890\",\n \"1922937\",\n \"5138257\",\n \"1922994\",\n \"1923019\",\n \"1923037\",\n \"12165672\",\n \"5138298\",\n \"5138387\",\n \"5138492\",\n \"5138543\",\n \"5138561\",\n \"5138602\",\n \"5714679\",\n \"5714680\",\n \"5714689\",\n \"9002107\",\n \"1923458\",\n \"1923465\",\n \"1923473\",\n \"1923491\",\n \"1923498\",\n \"1923505\",\n \"8913017\",\n \"1923525\",\n \"1923649\",\n \"1923650\",\n \"1923651\",\n \"1923668\",\n \"1923678\",\n \"1923679\",\n \"1923744\",\n \"1923782\",\n \"4708972\",\n \"4708973\",\n \"4708977\",\n \"1923796\",\n \"1923809\",\n \"1923883\",\n \"1923917\",\n \"1923997\",\n \"1924044\",\n \"1924050\",\n \"1924057\",\n \"1924077\",\n \"1924082\",\n \"1924097\",\n \"1924106\",\n \"1924176\",\n \"1924193\",\n \"12174634\",\n \"12185456\",\n \"12188086\",\n \"12205404\",\n \"12212066\",\n \"12222885\",\n \"12229400\",\n \"12233602\",\n \"12250854\",\n \"12257418\",\n \"12258984\",\n \"12265590\",\n \"1924223\",\n \"1924232\",\n \"5138681\",\n \"1924298\",\n \"1924323\",\n \"10656713\",\n \"1924362\",\n \"1924390\",\n \"1924392\",\n \"1924417\",\n \"1924429\",\n \"8023645\",\n \"1924458\",\n \"1924513\",\n \"1924518\",\n \"1924521\",\n \"8951523\",\n \"1924558\",\n \"1924713\",\n \"10436850\",\n \"1924754\",\n \"8837974\",\n \"8840017\",\n \"8992718\",\n \"9157410\",\n \"9478718\",\n \"1924759\",\n \"1924770\",\n \"5138701\",\n \"11470119\",\n \"1924867\",\n \"1925221\",\n \"1925233\",\n \"7354189\",\n \"4535172\",\n \"1925381\",\n \"1925410\",\n \"10120854\",\n \"10307383\",\n \"10411472\",\n \"1925429\",\n \"1925454\",\n \"1925458\",\n \"1925498\",\n \"1925500\",\n \"1925501\",\n \"1925509\",\n \"1925515\",\n \"4300384\",\n \"4300393\",\n \"4300399\",\n \"8389961\",\n \"8904480\",\n \"1925543\",\n \"1925555\",\n \"4708984\",\n \"1925609\",\n \"1925615\",\n \"1925628\",\n \"1925676\",\n \"1925679\",\n \"1925693\",\n \"1925694\",\n \"1925711\",\n \"1925731\",\n \"1925743\",\n \"5138732\",\n \"5138743\",\n \"5806391\",\n \"1925801\",\n \"12195040\",\n \"1925877\",\n \"1925918\",\n \"1925922\",\n \"4300000\",\n \"4300011\",\n \"4300012\",\n \"1925962\",\n \"12219036\",\n \"1926001\",\n \"1926009\",\n \"11797637\",\n \"1926054\",\n \"9816676\",\n \"1926324\",\n \"1926385\",\n \"1926436\",\n \"1926437\",\n \"1926446\",\n \"1926448\",\n \"1926456\",\n \"1926460\",\n \"1926530\",\n \"1926531\",\n \"1926539\",\n \"1926546\",\n \"1926550\",\n \"1926574\",\n \"4300259\",\n \"5883255\",\n \"7390086\",\n \"1926593\",\n \"1926611\",\n \"10116946\",\n \"10361239\",\n \"10606547\",\n \"1926722\",\n \"1926800\",\n \"1926817\",\n \"1926823\",\n \"1926834\",\n \"1926861\",\n \"10087308\",\n \"11008182\",\n \"11508257\",\n \"11543078\",\n \"1926972\",\n \"1927025\",\n \"1927034\",\n \"1927217\",\n \"1927219\",\n \"1927242\",\n \"1927272\",\n \"1927274\",\n \"1927284\",\n \"4709107\",\n \"4709111\",\n \"5883052\",\n \"7408690\",\n \"8322165\",\n \"9994384\",\n \"1927301\",\n \"1927302\",\n \"1927313\",\n \"10517500\",\n \"1927348\",\n \"1927393\",\n \"1927439\",\n \"1927445\",\n \"1927633\",\n \"1927707\",\n \"1927717\",\n \"5139026\",\n \"5139029\",\n \"5714747\",\n \"5714755\",\n \"5714788\",\n \"5882965\",\n \"7680748\",\n \"1927894\",\n \"1927895\",\n \"1927897\",\n \"1927900\",\n \"5139034\",\n \"1927909\",\n \"11667997\",\n \"1927943\",\n \"1927955\",\n \"1927979\",\n \"1927988\",\n \"1927992\",\n \"1927996\",\n \"1928009\",\n \"4300406\",\n \"1928018\",\n \"4708927\",\n \"1928070\",\n \"1928076\",\n \"1928214\",\n \"1928215\",\n \"8846776\",\n \"1928248\",\n \"5139040\",\n \"5139050\",\n \"1928349\",\n \"1928361\",\n \"1928376\",\n \"1928382\",\n \"1928389\",\n \"1928419\",\n \"5139064\",\n \"5139156\",\n \"1928584\",\n \"1928589\",\n \"1928628\",\n \"5139188\",\n \"5139201\",\n \"1928746\",\n \"1928754\",\n \"1928829\",\n \"1928849\",\n \"1928908\",\n \"1928915\",\n \"4709030\",\n \"9856663\",\n \"1928923\",\n \"1928945\",\n \"1928960\",\n \"1929046\",\n \"1929049\",\n \"1929059\",\n \"1929129\",\n \"11720834\",\n \"1929270\",\n \"1929402\",\n \"1929659\",\n \"1929697\",\n \"5139309\",\n \"5139339\",\n \"5139346\",\n \"5139357\",\n \"5139524\",\n \"5139540\",\n \"5139578\",\n \"5139673\",\n \"5139700\",\n \"5714618\",\n \"5792092\",\n \"8356768\",\n \"1929772\",\n \"1929962\",\n \"1929966\",\n \"1930079\",\n \"1930110\",\n \"1930146\",\n \"1930167\",\n \"1930178\",\n \"1930179\",\n \"1930181\",\n \"1930183\",\n \"1930263\",\n \"1930270\",\n \"1930288\",\n \"1930289\",\n \"1930331\",\n \"1930361\",\n \"1930391\",\n \"1930410\",\n \"1930422\",\n \"1930451\",\n \"1930466\",\n \"1930481\",\n \"1930539\",\n \"1930563\",\n \"1930581\",\n \"1930621\",\n \"1930653\",\n \"1930654\",\n \"1930660\",\n \"1930678\",\n \"1930728\",\n \"1930772\",\n \"1930779\",\n \"1930830\",\n \"1930832\",\n \"1930904\",\n \"1930916\",\n \"1930923\",\n \"1930931\",\n \"1930935\",\n \"4535106\",\n \"1930954\",\n \"1930968\",\n \"1931046\",\n \"1931109\",\n \"1931116\",\n \"1931119\",\n \"1931122\",\n \"1931126\",\n \"1931132\",\n \"8643155\",\n \"1931148\",\n \"1931179\",\n \"1931189\",\n \"5139864\",\n \"1931310\",\n \"1931403\",\n \"1931437\",\n \"1931509\",\n \"1931553\",\n \"1931561\",\n \"5734268\",\n \"7346434\",\n \"1931655\",\n \"1931656\",\n \"1931706\",\n \"1931729\",\n \"1931735\",\n \"1931779\",\n \"1931784\",\n \"1931787\",\n \"1931788\",\n \"5139897\",\n \"5139898\",\n \"5139908\",\n \"5139909\",\n \"5139914\",\n \"5139915\",\n \"1931889\",\n \"1931906\",\n \"1931908\",\n \"1931943\",\n \"1931956\",\n \"1931958\",\n \"1931979\",\n \"1931997\",\n \"1932020\",\n \"4709051\",\n \"1932043\",\n \"10113190\",\n \"10357476\",\n \"10570752\",\n \"11417741\",\n \"11802190\",\n \"1932056\",\n \"1932159\",\n \"1932166\",\n \"1932172\",\n \"1932175\",\n \"1932177\",\n \"1932189\",\n \"1932206\",\n \"1932246\",\n \"1932273\",\n \"1932287\",\n \"1932302\",\n \"4709095\",\n \"1932332\",\n \"1932354\",\n \"4708995\",\n \"8833509\",\n \"1932386\",\n \"1932393\",\n \"1932406\",\n \"1932409\",\n \"1932411\",\n \"1932414\",\n \"1932417\",\n \"1932428\",\n \"4300277\",\n \"4300363\",\n \"1932473\",\n \"1932517\",\n \"1932551\",\n \"11636481\",\n \"1932563\",\n \"7346444\",\n \"8177775\",\n \"1932576\",\n \"1932580\",\n \"1932607\",\n \"1932629\",\n \"5139954\",\n \"5139990\",\n \"5140006\",\n \"6132685\",\n \"1932751\",\n \"1932752\",\n \"1932753\",\n \"1932812\",\n \"1932814\",\n \"1932863\",\n \"1932879\",\n \"1932882\",\n \"1932908\",\n \"4709133\",\n \"1932960\",\n \"1932976\",\n \"5140033\",\n \"5140054\",\n \"5140056\",\n \"5140063\",\n \"5806412\",\n \"1933028\",\n \"1933044\",\n \"1933084\",\n \"4535162\",\n \"1933260\",\n \"5140214\",\n \"5140244\",\n \"5140436\",\n \"5140443\",\n \"5772702\",\n \"5772749\",\n \"7634721\",\n \"7664111\",\n \"9954885\",\n \"1933583\",\n \"1933647\",\n \"1933649\",\n \"7346407\",\n \"1933679\",\n \"1933793\",\n \"1933844\",\n \"1933845\",\n \"5140534\",\n \"5140561\",\n \"1933998\",\n \"1934187\",\n \"1934188\",\n \"1934192\",\n \"1934211\",\n \"1934213\",\n \"1934221\",\n \"1935363\",\n \"1935372\",\n \"1935377\",\n \"1935405\",\n \"1935408\",\n \"1935410\",\n \"1935454\",\n \"1935459\",\n \"1935853\",\n \"1935869\",\n \"1935872\",\n \"1935878\",\n \"1935884\",\n \"1935888\",\n \"1935899\",\n \"1935901\",\n \"1935904\",\n \"1935912\",\n \"1935916\",\n \"1935925\",\n \"1935931\",\n \"1935935\",\n \"10176954\",\n \"10573187\",\n \"9867272\",\n \"9960318\",\n \"5139928\",\n \"1926166\",\n \"1926260\",\n \"5138841\",\n \"5138921\",\n \"5138929\",\n \"7964910\",\n \"4300268\",\n \"9469139\",\n \"7346417\",\n \"10068544\",\n \"9975698\",\n \"10879371\",\n \"11874998\",\n \"4709102\",\n \"9156458\",\n \"4709147\",\n \"1933095\",\n \"1933126\",\n \"1933138\",\n \"1933163\",\n \"1933204\",\n \"11554226\",\n \"1924494\",\n \"11055981\",\n \"1751980\",\n \"1751986\",\n \"1752034\",\n \"9623220\",\n \"1752109\",\n \"1752111\",\n \"1752161\",\n \"9776414\",\n \"9941073\",\n \"5734556\",\n \"1752281\",\n \"1752285\",\n \"1752286\",\n \"1752327\",\n \"1752373\",\n \"1752383\",\n \"1752477\",\n \"1752483\",\n \"1752492\",\n \"1752494\",\n \"1752534\",\n \"1752536\",\n \"1752537\",\n \"1752539\",\n \"1752545\",\n \"1752547\",\n \"1752603\",\n \"1752651\",\n \"1752749\",\n \"1752758\",\n \"1752775\",\n \"1752805\",\n \"1752825\",\n \"1752832\",\n \"1752849\",\n \"1752894\",\n \"1752903\",\n \"1752923\",\n \"1752946\",\n \"1752947\",\n \"10376685\",\n \"1753081\",\n \"1753105\",\n \"1753106\",\n \"1753111\",\n \"11507608\",\n \"5105365\",\n \"5105367\",\n \"5105369\",\n \"5105376\",\n \"5105379\",\n \"5105380\",\n \"1753215\",\n \"1753395\",\n \"5105447\",\n \"5105458\",\n \"5105467\",\n \"5105469\",\n \"5105491\",\n \"5105508\",\n \"5105547\",\n \"5105553\",\n \"5105560\",\n \"5105570\",\n \"5105584\",\n \"1753432\",\n \"1753435\",\n \"1753461\",\n \"11014495\",\n \"1753603\",\n \"1753604\",\n \"1753636\",\n \"5734560\",\n \"1753661\",\n \"1753668\",\n \"1753759\",\n \"5105588\",\n \"10955682\",\n \"1753833\",\n \"1753864\",\n \"1753871\",\n \"1753902\",\n \"1753906\",\n \"1753922\",\n \"1753929\",\n \"5105603\",\n \"10932946\",\n \"10515719\",\n \"4522322\",\n \"7345843\",\n \"10413588\",\n \"10514620\",\n \"6133481\",\n \"10368234\",\n \"9880359\",\n \"10017342\",\n \"10203493\",\n \"9959898\",\n \"10560849\",\n \"5105336\",\n \"5105339\",\n \"5105344\",\n \"5105352\",\n \"5806127\",\n \"5105259\",\n \"10795141\",\n \"5137511\",\n \"5137512\",\n \"12181811\",\n \"12226416\",\n \"12251247\",\n \"1919125\",\n \"1919128\",\n \"1919129\",\n \"1919130\",\n \"1919145\",\n \"1919146\",\n \"1919149\",\n \"11673056\",\n \"1919151\",\n \"1919160\",\n \"1919161\",\n \"1919173\",\n \"10988070\",\n \"1919176\",\n \"1919181\",\n \"1919194\",\n \"1919210\",\n \"1919213\",\n \"1919214\",\n \"1919221\",\n \"1919223\",\n \"1919233\",\n \"1919235\",\n \"1919239\",\n \"1919245\",\n \"1919267\",\n \"1919277\",\n \"1919282\",\n \"1919287\",\n \"1919289\",\n \"5137540\",\n \"1919316\",\n \"1919317\",\n \"1919320\",\n \"1919326\",\n \"1919327\",\n \"1919328\",\n \"1919330\",\n \"1919333\",\n \"1919338\",\n \"4535280\",\n \"4535285\",\n \"7981372\",\n \"1919340\",\n \"1919342\",\n \"1919344\",\n \"1919346\",\n \"1919348\",\n \"1919381\",\n \"1919407\",\n \"1919412\",\n \"1919419\",\n \"1919421\",\n \"1919432\",\n \"1919438\",\n \"1919444\",\n \"1919534\",\n \"1919540\",\n \"1919551\",\n \"1919564\",\n \"1919581\",\n \"1919589\",\n \"1919626\",\n \"1919635\",\n \"1919646\",\n \"1919649\",\n \"1919652\",\n \"1919653\",\n \"1919656\",\n \"4701298\",\n \"4701336\",\n \"7661785\",\n \"1919660\",\n \"1919663\",\n \"1919665\",\n \"5137553\",\n \"1919697\",\n \"1919698\",\n \"1919700\",\n \"1919701\",\n \"1919702\",\n \"1919703\",\n \"1919705\",\n \"1919706\",\n \"1919711\",\n \"1919712\",\n \"1919716\",\n \"1919719\",\n \"1919720\",\n \"1919728\",\n \"1919731\",\n \"1919741\",\n \"1919744\",\n \"1919756\",\n \"1919758\",\n \"1919762\",\n \"1919924\",\n \"1919929\",\n \"1919930\",\n \"10703948\",\n \"1919937\",\n \"1919939\",\n \"1919943\",\n \"1919945\",\n \"1919947\",\n \"1919949\",\n \"1919951\",\n \"1919966\",\n \"5137747\",\n \"5137748\",\n \"1920181\",\n \"1920192\",\n \"1920237\",\n \"1920247\",\n \"1920258\",\n \"1920259\",\n \"5137790\",\n \"5137791\",\n \"5137799\",\n \"5137800\",\n \"5137802\",\n \"5137803\",\n \"1920266\",\n \"4701136\",\n \"1920275\",\n \"5137808\",\n \"5137817\",\n \"5137819\",\n \"5137823\",\n \"5137827\",\n \"5137828\",\n \"5137832\",\n \"5137833\",\n \"5137842\",\n \"5137847\",\n \"5137849\",\n \"5137850\",\n \"5137851\",\n \"5137854\",\n \"5137858\",\n \"5714819\",\n \"5805954\",\n \"1920348\",\n \"1920349\",\n \"1920353\",\n \"1920356\",\n \"1920357\",\n \"1920359\",\n \"1920362\",\n \"1920363\",\n \"1920369\",\n \"1920370\",\n \"1920374\",\n \"1920377\",\n \"1920378\",\n \"1920379\",\n \"1920381\",\n \"1920390\",\n \"1920395\",\n \"1920401\",\n \"1920404\",\n \"1920405\",\n \"4699245\",\n \"5137861\",\n \"5137863\",\n \"1920426\",\n \"1920431\",\n \"1920437\",\n \"1920454\",\n \"1920461\",\n \"1920463\",\n \"1920467\",\n \"1920469\",\n \"1920472\",\n \"1920491\",\n \"1920494\",\n \"1920496\",\n \"1920498\",\n \"1920502\",\n \"1920506\",\n \"1920509\",\n \"1920512\",\n \"4535307\",\n \"5137882\",\n \"5137889\",\n \"5137890\",\n \"5137891\",\n \"5137894\",\n \"5804932\",\n \"5805036\",\n \"5805407\",\n \"1920515\",\n \"1920534\",\n \"1920535\",\n \"1920538\",\n \"1920541\",\n \"1920552\",\n \"5137902\",\n \"5137903\",\n \"5137908\",\n \"5137912\",\n \"5804895\",\n \"1920571\",\n \"1920574\",\n \"1920581\",\n \"1920586\",\n \"5137920\",\n \"5137926\",\n \"5137929\",\n \"5137932\",\n \"5137935\",\n \"5137938\",\n \"5137945\",\n \"5137946\",\n \"5137949\",\n \"5137955\",\n \"1920691\",\n \"5137969\",\n \"1920707\",\n \"1920709\",\n \"1920711\",\n \"1920712\",\n \"1920718\",\n \"4535271\",\n \"5137988\",\n \"5137996\",\n \"5137998\",\n \"1920786\",\n \"1920795\",\n \"1920803\",\n \"1920809\",\n \"1920810\",\n \"1920815\",\n \"1920816\",\n \"5804166\",\n \"5714914\",\n \"5137573\",\n \"5137578\",\n \"5137582\",\n \"5137588\",\n \"5137593\",\n \"5137595\",\n \"5137601\",\n \"5137605\",\n \"5137608\",\n \"5137612\",\n \"5137615\",\n \"5137626\",\n \"5137636\",\n \"5137659\",\n \"5137663\",\n \"5137664\",\n \"5137672\",\n \"5137674\",\n \"5137677\",\n \"5137679\",\n \"5137682\",\n \"5137689\",\n \"5137693\",\n \"5137694\",\n \"5137695\",\n \"5137700\",\n \"5137706\",\n \"5137708\",\n \"5137711\",\n \"5137714\",\n \"5803588\",\n \"8203812\",\n \"12191141\",\n \"12206386\",\n \"12234544\",\n \"12236627\",\n \"1920621\",\n \"1920218\",\n \"5137763\",\n \"7207679\",\n \"1748890\",\n \"1748922\",\n \"1748942\",\n \"1749050\",\n \"1749070\",\n \"1749124\",\n \"1749164\",\n \"1749287\",\n \"1749449\",\n \"1749529\",\n \"1749531\",\n \"1749661\",\n \"1749664\",\n \"1749713\",\n \"1749744\",\n \"1749760\",\n \"1749846\",\n \"1749869\",\n \"1749908\",\n \"1749921\",\n \"1749929\",\n \"1749936\",\n \"1749948\",\n \"1749954\",\n \"1749959\",\n \"1749975\",\n \"1750051\",\n \"1750076\",\n \"1750097\",\n \"1750131\",\n \"1750143\",\n \"1750159\",\n \"1750166\",\n \"1750288\",\n \"1750326\",\n \"5104772\",\n \"5104781\",\n \"5104797\",\n \"5104815\",\n \"5104822\",\n \"5104829\",\n \"5104882\",\n \"5104891\",\n \"5104903\",\n \"5104927\",\n \"5104940\",\n \"5104948\",\n \"5104986\",\n \"5105031\",\n \"5105054\",\n \"5105057\",\n \"5105068\",\n \"5105081\",\n \"5105088\",\n \"5105106\",\n \"5105120\",\n \"5105124\",\n \"5105158\",\n \"5976947\",\n \"9942354\",\n \"1750924\",\n \"1750934\",\n \"1751024\",\n \"1751051\",\n \"1751146\",\n \"5104759\",\n \"1751163\",\n \"1749591\",\n \"1749596\",\n \"1749608\",\n \"1749635\",\n \"1749656\",\n \"8741260\",\n \"11840028\",\n \"1758003\",\n \"1828310\",\n \"1828317\",\n \"9882683\",\n \"1735532\",\n \"9451208\",\n \"4527339\",\n \"4527342\",\n \"1758440\",\n \"1758441\",\n \"1758461\",\n \"1758596\",\n \"1758602\",\n \"1731826\",\n \"1731837\",\n \"1731860\",\n \"1731862\",\n \"1855235\",\n \"1855241\",\n \"1868837\",\n \"1868884\",\n \"1868952\",\n \"1869043\",\n \"1869057\",\n \"1869178\",\n \"1869187\",\n \"1869238\",\n \"1869278\",\n \"1869286\",\n \"11794362\",\n \"1992547\",\n \"9943941\",\n \"10118678\",\n \"1962159\",\n \"1962162\",\n \"9875141\",\n \"1970460\",\n \"1970463\",\n \"1970473\",\n \"1970485\",\n \"1963095\",\n \"1963096\",\n \"1964995\",\n \"1964996\",\n \"10295646\",\n \"1973530\",\n \"1954236\",\n \"11826016\",\n \"5143303\",\n \"5143311\",\n \"5143315\",\n \"1954490\",\n \"1954496\",\n \"1954514\",\n \"1954522\",\n \"1954563\",\n \"5143338\",\n \"5143354\",\n \"5143368\",\n \"5143380\",\n \"5143384\",\n \"5143437\",\n \"5143453\",\n \"5143477\",\n \"5143506\",\n \"5143511\",\n \"5143525\",\n \"5143575\",\n \"5734335\",\n \"1954891\",\n \"1954911\",\n \"10634980\",\n \"5143586\",\n \"9213204\",\n \"1954930\",\n \"1954933\",\n \"1954992\",\n \"1954993\",\n \"10217455\",\n \"1955039\",\n \"1955093\",\n \"1955153\",\n \"1955199\",\n \"1955202\",\n \"1955271\",\n \"1955272\",\n \"1955318\",\n \"6133648\",\n \"1955389\",\n \"1955413\",\n \"1955416\",\n \"1955422\",\n \"1955479\",\n \"1955484\",\n \"1955497\",\n \"1955498\",\n \"5143651\",\n \"1955552\",\n \"1955581\",\n \"6133676\",\n \"1955694\",\n \"1955725\",\n \"1955736\",\n \"1955737\",\n \"1955743\",\n \"1955745\",\n \"10560674\",\n \"11720357\",\n \"1955753\",\n \"1955755\",\n \"9593393\",\n \"1955763\",\n \"1955806\",\n \"1955856\",\n \"4524588\",\n \"10003902\",\n \"10048667\",\n \"10062202\",\n \"10075732\",\n \"10132475\",\n \"10177276\",\n \"10341059\",\n \"10363151\",\n \"10398979\",\n \"10434798\",\n \"10456933\",\n \"10457796\",\n \"10471477\",\n \"10528420\",\n \"10623003\",\n \"11451126\",\n \"11468089\",\n \"11638437\",\n \"1955899\",\n \"5143657\",\n \"5143675\",\n \"5143697\",\n \"5143703\",\n \"10078526\",\n \"10360329\",\n \"1956098\",\n \"1956099\",\n \"1956215\",\n \"1956309\",\n \"11690145\",\n \"1956384\",\n \"5734542\",\n \"5734543\",\n \"9234402\",\n \"10257899\",\n \"1956416\",\n \"1956440\",\n \"1956462\",\n \"1956496\",\n \"1956505\",\n \"1956510\",\n \"1956524\",\n \"1956536\",\n \"1956597\",\n \"1956599\",\n \"1956626\",\n \"1956629\",\n \"1956639\",\n \"1956710\",\n \"1956716\",\n \"8793973\",\n \"6133593\",\n \"1956897\",\n \"1956904\",\n \"4525068\",\n \"1956955\",\n \"1956958\",\n \"1956963\",\n \"1956978\",\n \"1956983\",\n \"10167252\",\n \"1957058\",\n \"1957062\",\n \"1957161\",\n \"1957174\",\n \"1957266\",\n \"1957286\",\n \"1957300\",\n \"1957333\",\n \"1957368\",\n \"1957413\",\n \"1957441\",\n \"1957460\",\n \"1957523\",\n \"1957556\",\n \"1957565\",\n \"1957570\",\n \"1957572\",\n \"1957579\",\n \"1957583\",\n \"1957611\",\n \"1957632\",\n \"1957673\",\n \"1957706\",\n \"1957718\",\n \"1957746\",\n \"1957791\",\n \"1957816\",\n \"1957822\",\n \"4524320\",\n \"8172949\",\n \"1957845\",\n \"1957852\",\n \"1957854\",\n \"1957870\",\n \"4524421\",\n \"4524424\",\n \"4524426\",\n \"8775810\",\n \"5143944\",\n \"5143947\",\n \"5143952\",\n \"1958024\",\n \"1958045\",\n \"1958049\",\n \"11554842\",\n \"1958065\",\n \"5143960\",\n \"5143964\",\n \"1958121\",\n \"1958152\",\n \"1958158\",\n \"1958163\",\n \"1958241\",\n \"1958252\",\n \"1958255\",\n \"1958259\",\n \"1958260\",\n \"1958275\",\n \"1958282\",\n \"1958290\",\n \"1958305\",\n \"1958307\",\n \"1958323\",\n \"1958324\",\n \"6544637\",\n \"1958422\",\n \"1958454\",\n \"1958463\",\n \"1958483\",\n \"5144027\",\n \"1958515\",\n \"1958528\",\n \"1959341\",\n \"1959379\",\n \"1959383\",\n \"1959395\",\n \"1959423\",\n \"1959436\",\n \"1959461\",\n \"1959467\",\n \"1959473\",\n \"1959494\",\n \"1959500\",\n \"1959543\",\n \"1959595\",\n \"1959637\",\n \"1959645\",\n \"1959652\",\n \"1959666\",\n \"1959667\",\n \"1959682\",\n \"1959735\",\n \"1959782\",\n \"1959799\",\n \"1959839\",\n \"6133552\",\n \"1959858\",\n \"1959876\",\n \"1959890\",\n \"1959898\",\n \"1959914\",\n \"1959917\",\n \"1959919\",\n \"1959934\",\n \"1959948\",\n \"9320916\",\n \"1960002\",\n \"1960004\",\n \"4702961\",\n \"10694777\",\n \"1960023\",\n \"1960090\",\n \"1960105\",\n \"1960106\",\n \"1960128\",\n \"1960166\",\n \"1960181\",\n \"1960182\",\n \"6133509\",\n \"1960201\",\n \"1960255\",\n \"1960268\",\n \"1960315\",\n \"1960411\",\n \"1960484\",\n \"5144092\",\n \"5144093\",\n \"5144115\",\n \"5144129\",\n \"1960503\",\n \"1960521\",\n \"1960524\",\n \"1960571\",\n \"1960595\",\n \"1960617\",\n \"6133518\",\n \"1960632\",\n \"1960686\",\n \"1960854\",\n \"1960940\",\n \"1960941\",\n \"1960951\",\n \"1960963\",\n \"1961013\",\n \"1961025\",\n \"1961037\",\n \"1961040\",\n \"5734344\",\n \"1961052\",\n \"1961068\",\n \"1961126\",\n \"1961155\",\n \"1961162\",\n \"7346236\",\n \"1961180\",\n \"1961190\",\n \"1961252\",\n \"4302240\",\n \"9468667\",\n \"1961361\",\n \"7741315\",\n \"1961388\",\n \"1961647\",\n \"1961718\",\n \"5144204\",\n \"10650351\",\n \"1962051\",\n \"1962076\",\n \"1962086\",\n \"1962118\",\n \"1962120\",\n \"9368382\",\n \"9592714\",\n \"1962204\",\n \"1962265\",\n \"1962268\",\n \"5144227\",\n \"5144318\",\n \"1962432\",\n \"1962434\",\n \"1962447\",\n \"1962479\",\n \"1962490\",\n \"1962516\",\n \"9812211\",\n \"10004969\",\n \"1962584\",\n \"4524568\",\n \"1962636\",\n \"1962656\",\n \"1962657\",\n \"1962659\",\n \"1962678\",\n \"1962689\",\n \"1962722\",\n \"1962727\",\n \"9264326\",\n \"1962829\",\n \"1962839\",\n \"1962841\",\n \"1962842\",\n \"1962860\",\n \"1962895\",\n \"1962900\",\n \"1962925\",\n \"1962934\",\n \"1962961\",\n \"1962972\",\n \"1962990\",\n \"1963011\",\n \"4302252\",\n \"1963052\",\n \"10084195\",\n \"5734349\",\n \"1963168\",\n \"1963201\",\n \"1963207\",\n \"1963212\",\n \"1963297\",\n \"12214993\",\n \"1963306\",\n \"5144345\",\n \"1963425\",\n \"1963433\",\n \"1963446\",\n \"1963463\",\n \"1963587\",\n \"1963619\",\n \"1963629\",\n \"1963633\",\n \"1963709\",\n \"1963710\",\n \"1963733\",\n \"1963755\",\n \"5144353\",\n \"1963782\",\n \"1963827\",\n \"1963848\",\n \"1963854\",\n \"1963874\",\n \"1963879\",\n \"1963892\",\n \"5144363\",\n \"11644349\",\n \"1964024\",\n \"1964025\",\n \"1964029\",\n \"6133500\",\n \"1964041\",\n \"1964066\",\n \"1964076\",\n \"1964113\",\n \"1964116\",\n \"1964137\",\n \"1964141\",\n \"1964143\",\n \"1964144\",\n \"1964151\",\n \"1964153\",\n \"1964155\",\n \"1964158\",\n \"1964174\",\n \"1964189\",\n \"1964191\",\n \"1964195\",\n \"1964247\",\n \"1964305\",\n \"1964316\",\n \"1964331\",\n \"1964401\",\n \"1964437\",\n \"1964471\",\n \"6133502\",\n \"1964565\",\n \"1964585\",\n \"1964637\",\n \"1964653\",\n \"1964657\",\n \"8361848\",\n \"1964698\",\n \"1964702\",\n \"1964715\",\n \"1964738\",\n \"1964836\",\n \"5144424\",\n \"5144426\",\n \"1965024\",\n \"1965038\",\n \"1965058\",\n \"1965069\",\n \"1965078\",\n \"1965100\",\n \"5880367\",\n \"6214734\",\n \"1965166\",\n \"1965197\",\n \"1965208\",\n \"1965345\",\n \"1965586\",\n \"1965640\",\n \"10184940\",\n \"10523304\",\n \"1965643\",\n \"1965649\",\n \"1965650\",\n \"9952367\",\n \"9976926\",\n \"1965671\",\n \"1965697\",\n \"1965699\",\n \"1965763\",\n \"1965777\",\n \"1965794\",\n \"1965795\",\n \"1965797\",\n \"1965805\",\n \"1965807\",\n \"1965810\",\n \"1965823\",\n \"1965825\",\n \"1965831\",\n \"1965838\",\n \"1965841\",\n \"1965861\",\n \"1965865\",\n \"1965887\",\n \"1965913\",\n \"1965996\",\n \"1966017\",\n \"5144431\",\n \"5144438\",\n \"5144457\",\n \"5144472\",\n \"9919915\",\n \"1966088\",\n \"9370070\",\n \"1966185\",\n \"1966195\",\n \"1966198\",\n \"5144499\",\n \"1966255\",\n \"1966286\",\n \"1966302\",\n \"1966310\",\n \"5734448\",\n \"10670854\",\n \"1966351\",\n \"1966358\",\n \"1966362\",\n \"1966367\",\n \"1966854\",\n \"1966886\",\n \"5144505\",\n \"5144534\",\n \"1966977\",\n \"1966978\",\n \"1967003\",\n \"1967006\",\n \"1967011\",\n \"1967025\",\n \"1967039\",\n \"1967127\",\n \"1967128\",\n \"5144543\",\n \"1967209\",\n \"1967212\",\n \"1967226\",\n \"1967240\",\n \"1967245\",\n \"9277294\",\n \"9492499\",\n \"1967265\",\n \"1967273\",\n \"1967324\",\n \"1967346\",\n \"1967433\",\n \"1967438\",\n \"1967445\",\n \"1967452\",\n \"1967590\",\n \"1967595\",\n \"1967597\",\n \"1967606\",\n \"1967672\",\n \"1967688\",\n \"5144553\",\n \"1967703\",\n \"10174909\",\n \"10268303\",\n \"10379201\",\n \"1967716\",\n \"7346240\",\n \"9833933\",\n \"1967803\",\n \"1967815\",\n \"1967873\",\n \"1968115\",\n \"1968131\",\n \"1968147\",\n \"1968182\",\n \"1968193\",\n \"1968205\",\n \"7681733\",\n \"5144554\",\n \"5144558\",\n \"5144564\",\n \"5144575\",\n \"8793278\",\n \"1968304\",\n \"1968313\",\n \"1968315\",\n \"1968321\",\n \"1968324\",\n \"1968363\",\n \"1968538\",\n \"5144583\",\n \"5144588\",\n \"5144593\",\n \"5144596\",\n \"5144597\",\n \"5144633\",\n \"1968678\",\n \"1968686\",\n \"1968730\",\n \"1968746\",\n \"1968837\",\n \"1968867\",\n \"1968942\",\n \"1968951\",\n \"11598540\",\n \"1968990\",\n \"1969104\",\n \"1969291\",\n \"1969339\",\n \"1969357\",\n \"1969463\",\n \"1969491\",\n \"1969568\",\n \"11858774\",\n \"1969581\",\n \"6133643\",\n \"1969621\",\n \"1969954\",\n \"1969958\",\n \"1969961\",\n \"1969978\",\n \"4523707\",\n \"1970034\",\n \"1970093\",\n \"1970094\",\n \"1970108\",\n \"1970119\",\n \"1970136\",\n \"1970145\",\n \"1970148\",\n \"1970150\",\n \"1970159\",\n \"10088253\",\n \"1970213\",\n \"1970227\",\n \"1970243\",\n \"1970259\",\n \"1970265\",\n \"9939530\",\n \"1970284\",\n \"1970322\",\n \"10085335\",\n \"10109201\",\n \"10505033\",\n \"10054019\",\n \"1970436\",\n \"5734405\",\n \"6133513\",\n \"7346252\",\n \"5144677\",\n \"5144691\",\n \"5144721\",\n \"5144729\",\n \"5144782\",\n \"5144787\",\n \"5144805\",\n \"5144806\",\n \"5144864\",\n \"5144870\",\n \"5144880\",\n \"5144900\",\n \"5144935\",\n \"5144936\",\n \"5144937\",\n \"5144942\",\n \"5144953\",\n \"5144976\",\n \"5145009\",\n \"5145075\",\n \"5145078\",\n \"5145079\",\n \"5145136\",\n \"5145139\",\n \"5145186\",\n \"5145238\",\n \"5145255\",\n \"5145260\",\n \"5145269\",\n \"5145396\",\n \"5145409\",\n \"5145422\",\n \"5145466\",\n \"5145468\",\n \"5145495\",\n \"5145502\",\n \"5145503\",\n \"5145521\",\n \"5145522\",\n \"5145547\",\n \"5145560\",\n \"5145624\",\n \"5145713\",\n \"5145729\",\n \"5145735\",\n \"5145842\",\n \"7700568\",\n \"7753668\",\n \"8014296\",\n \"9194811\",\n \"9627567\",\n \"1971835\",\n \"1971847\",\n \"1971852\",\n \"1971858\",\n \"1971888\",\n \"1971986\",\n \"1971995\",\n \"1971998\",\n \"1971999\",\n \"1972010\",\n \"6133516\",\n \"1972094\",\n \"1972101\",\n \"1972120\",\n \"1972185\",\n \"1972187\",\n \"1972234\",\n \"1972250\",\n \"1972278\",\n \"1972342\",\n \"1972374\",\n \"1972377\",\n \"5145870\",\n \"5145965\",\n \"5145998\",\n \"5146030\",\n \"5146038\",\n \"5146062\",\n \"5146082\",\n \"5146091\",\n \"7541913\",\n \"7624494\",\n \"7960566\",\n \"1972407\",\n \"1972434\",\n \"1972443\",\n \"1972447\",\n \"1972449\",\n \"1972454\",\n \"9558845\",\n \"4702783\",\n \"4702784\",\n \"5146179\",\n \"5146253\",\n \"1972606\",\n \"9119710\",\n \"1972613\",\n \"1972614\",\n \"1972616\",\n \"1972620\",\n \"1972631\",\n \"1972691\",\n \"5146262\",\n \"10732353\",\n \"11533770\",\n \"1972754\",\n \"1972797\",\n \"1972800\",\n \"1972806\",\n \"5146282\",\n \"1972903\",\n \"5146294\",\n \"1973146\",\n \"1973147\",\n \"1973164\",\n \"1973165\",\n \"1973171\",\n \"1973242\",\n \"1973245\",\n \"1973300\",\n \"1973323\",\n \"1973327\",\n \"1973338\",\n \"1973358\",\n \"1973393\",\n \"1973397\",\n \"1973414\",\n \"1973487\",\n \"1973493\",\n \"1973665\",\n \"1973719\",\n \"7996464\",\n \"10404426\",\n \"5146420\",\n \"5146426\",\n \"5146434\",\n \"5146440\",\n \"5146456\",\n \"5146472\",\n \"5146476\",\n \"5146483\",\n \"5146496\",\n \"5146497\",\n \"5146508\",\n \"5146510\",\n \"5146525\",\n \"5146528\",\n \"5146559\",\n \"5146566\",\n \"5146567\",\n \"5146578\",\n \"5146598\",\n \"5146599\",\n \"5146601\",\n \"5146608\",\n \"5146611\",\n \"5146651\",\n \"5146659\",\n \"5146677\",\n \"5146693\",\n \"5146719\",\n \"5146720\",\n \"5146746\",\n \"5146752\",\n \"5146762\",\n \"5146763\",\n \"5146774\",\n \"5146786\",\n \"5146805\",\n \"5146815\",\n \"5146820\",\n \"5146832\",\n \"5146833\",\n \"5146837\",\n \"5146842\",\n \"5146852\",\n \"5146856\",\n \"5146862\",\n \"5146880\",\n \"5146883\",\n \"5146894\",\n \"5146899\",\n \"5146908\",\n \"5146920\",\n \"5146927\",\n \"5146937\",\n \"5146946\",\n \"5146961\",\n \"5147002\",\n \"5147018\",\n \"5147030\",\n \"5147038\",\n \"5147039\",\n \"5147041\",\n \"5147043\",\n \"5147046\",\n \"5147058\",\n \"5147062\",\n \"5147071\",\n \"5147099\",\n \"5147109\",\n \"5147114\",\n \"5147121\",\n \"5147139\",\n \"5147145\",\n \"5147150\",\n \"5147155\",\n \"5147160\",\n \"5147165\",\n \"5147171\",\n \"5147179\",\n \"5147193\",\n \"5147208\",\n \"5147211\",\n \"5147212\",\n \"5147214\",\n \"5147225\",\n \"5147232\",\n \"5147245\",\n \"5147259\",\n \"5147287\",\n \"5147306\",\n \"5147319\",\n \"5147354\",\n \"5147395\",\n \"5147415\",\n \"5147437\",\n \"5147441\",\n \"5147478\",\n \"5147492\",\n \"5147498\",\n \"5147513\",\n \"5147516\",\n \"5147522\",\n \"5147534\",\n \"5147560\",\n \"7919880\",\n \"7988195\",\n \"8067894\",\n \"8366158\",\n \"9370933\",\n \"9469300\",\n \"9590066\",\n \"1975164\",\n \"1975198\",\n \"1975212\",\n \"1975248\",\n \"1975249\",\n \"9975134\",\n \"10018221\",\n \"10572729\",\n \"6133559\",\n \"9875420\",\n \"1975287\",\n \"5147608\",\n \"5147638\",\n \"1975341\",\n \"1975365\",\n \"11856219\",\n \"1975546\",\n \"1975553\",\n \"1975571\",\n \"1975583\",\n \"1975597\",\n \"1975607\",\n \"9477531\",\n \"1975704\",\n \"1975711\",\n \"1975722\",\n \"1975733\",\n \"1975741\",\n \"8329661\",\n \"1975793\",\n \"5715277\",\n \"5715278\",\n \"8160782\",\n \"1975805\",\n \"1975806\",\n \"10835542\",\n \"1975892\",\n \"1975897\",\n \"1975903\",\n \"1975914\",\n \"1975964\",\n \"1975979\",\n \"5734539\",\n \"9356491\",\n \"9410573\",\n \"9548993\",\n \"1976073\",\n \"8793324\",\n \"1976123\",\n \"1976142\",\n \"1976163\",\n \"1976212\",\n \"1976213\",\n \"1976224\",\n \"1976228\",\n \"1976243\",\n \"1976248\",\n \"1976255\",\n \"1976303\",\n \"1976311\",\n \"1976333\",\n \"8820198\",\n \"1976341\",\n \"1976342\",\n \"1976345\",\n \"1976462\",\n \"1976463\",\n \"1976469\",\n \"1976470\",\n \"1976483\",\n \"10118849\",\n \"9183738\",\n \"5147681\",\n \"5147703\",\n \"5147713\",\n \"6097233\",\n \"7973517\",\n \"8414310\",\n \"8955497\",\n \"1976651\",\n \"1976746\",\n \"5147794\",\n \"10089194\",\n \"1976890\",\n \"1976891\",\n \"1976928\",\n \"1976933\",\n \"1976934\",\n \"1976939\",\n \"1976941\",\n \"1976993\",\n \"1977003\",\n \"1977007\",\n \"1977054\",\n \"1977068\",\n \"4523725\",\n \"5147819\",\n \"5147827\",\n \"5147834\",\n \"5147838\",\n \"5147858\",\n \"1977182\",\n \"1977184\",\n \"1977297\",\n \"1977300\",\n \"1977350\",\n \"5147868\",\n \"5147871\",\n \"5147879\",\n \"5147883\",\n \"5147894\",\n \"5147898\",\n \"5147899\",\n \"5147909\",\n \"8951618\",\n \"5734420\",\n \"6133548\",\n \"5147917\",\n \"5147923\",\n \"5147930\",\n \"5147968\",\n \"5148043\",\n \"5148055\",\n \"5148066\",\n \"5148096\",\n \"5148097\",\n \"5148115\",\n \"5148184\",\n \"5148214\",\n \"5148223\",\n \"5769028\",\n \"1977759\",\n \"1977764\",\n \"1977767\",\n \"1977773\",\n \"5148247\",\n \"5148248\",\n \"10188228\",\n \"1977813\",\n \"1977833\",\n \"1977863\",\n \"6133582\",\n \"9617496\",\n \"1977962\",\n \"1977967\",\n \"1977971\",\n \"1978010\",\n \"1978017\",\n \"1978034\",\n \"1978045\",\n \"1978056\",\n \"1978065\",\n \"1978082\",\n \"1978114\",\n \"1978268\",\n \"1978274\",\n \"1978281\",\n \"1978282\",\n \"1978283\",\n \"1978375\",\n \"1978385\",\n \"1978398\",\n \"1978405\",\n \"1978407\",\n \"1978422\",\n \"1978424\",\n \"1978445\",\n \"9308082\",\n \"5734388\",\n \"1978464\",\n \"1978493\",\n \"1978494\",\n \"1978499\",\n \"10058263\",\n \"10626099\",\n \"1978524\",\n \"1978526\",\n \"1978529\",\n \"4524636\",\n \"4524638\",\n \"5734519\",\n \"6133560\",\n \"10712554\",\n \"4524890\",\n \"4524902\",\n \"1978671\",\n \"9243264\",\n \"5148252\",\n \"10738407\",\n \"5148264\",\n \"1978751\",\n \"1978770\",\n \"1978776\",\n \"1978789\",\n \"1978821\",\n \"5734396\",\n \"5148277\",\n \"5148280\",\n \"5806132\",\n \"10530515\",\n \"1978904\",\n \"1978915\",\n \"1978919\",\n \"1978937\",\n \"1978958\",\n \"1978959\",\n \"1978977\",\n \"1978996\",\n \"1978999\",\n \"6133546\",\n \"1979021\",\n \"1979041\",\n \"5148286\",\n \"1979222\",\n \"1979229\",\n \"1979255\",\n \"1979289\",\n \"1979308\",\n \"1979344\",\n \"1979358\",\n \"1979380\",\n \"1979427\",\n \"1979430\",\n \"1979473\",\n \"1979475\",\n \"1979501\",\n \"4702599\",\n \"4702603\",\n \"4702609\",\n \"1979521\",\n \"1979561\",\n \"1979562\",\n \"1979721\",\n \"1979726\",\n \"1979758\",\n \"1979781\",\n \"1979787\",\n \"1979801\",\n \"1979806\",\n \"1979822\",\n \"1980025\",\n \"1980035\",\n \"1980041\",\n \"1980044\",\n \"1980055\",\n \"1980063\",\n \"1980068\",\n \"1980245\",\n \"1980247\",\n \"1980250\",\n \"1980269\",\n \"1980290\",\n \"5148379\",\n \"5148394\",\n \"5148424\",\n \"5148436\",\n \"5148462\",\n \"5148475\",\n \"5148486\",\n \"5148487\",\n \"1980491\",\n \"1980505\",\n \"1980509\",\n \"1980521\",\n \"1980525\",\n \"1980532\",\n \"1980533\",\n \"1980559\",\n \"11449815\",\n \"1980659\",\n \"1980694\",\n \"10378314\",\n \"10571987\",\n \"1980811\",\n \"1980821\",\n \"1980827\",\n \"1980917\",\n \"8421569\",\n \"1981063\",\n \"6133585\",\n \"1981144\",\n \"1981160\",\n \"1981161\",\n \"1981162\",\n \"1981191\",\n \"1981202\",\n \"1981209\",\n \"1981210\",\n \"1981222\",\n \"1981252\",\n \"1981258\",\n \"1981277\",\n \"1981280\",\n \"1981281\",\n \"1981284\",\n \"1981312\",\n \"1981357\",\n \"1981457\",\n \"10860751\",\n \"11660632\",\n \"1981696\",\n \"1981718\",\n \"11173690\",\n \"10247981\",\n \"10592969\",\n \"7345811\",\n \"7345813\",\n \"1981937\",\n \"1981938\",\n \"1981951\",\n \"1981959\",\n \"1981973\",\n \"5148520\",\n \"1981998\",\n \"1982007\",\n \"1982024\",\n \"1982033\",\n \"1982043\",\n \"1982047\",\n \"1982055\",\n \"1982071\",\n \"1982072\",\n \"1982085\",\n \"1982100\",\n \"1982102\",\n \"1982103\",\n \"1982120\",\n \"1982148\",\n \"1982203\",\n \"1982221\",\n \"1982267\",\n \"1982291\",\n \"12116722\",\n \"1982406\",\n \"1982447\",\n \"1982458\",\n \"1982500\",\n \"1982525\",\n \"1982529\",\n \"1982533\",\n \"1982541\",\n \"1982542\",\n \"1982592\",\n \"1982613\",\n \"1982636\",\n \"1982671\",\n \"1982746\",\n \"1982770\",\n \"1982779\",\n \"1982780\",\n \"1982790\",\n \"1982791\",\n \"1982824\",\n \"1982838\",\n \"1982865\",\n \"1982867\",\n \"1982885\",\n \"1982898\",\n \"1982918\",\n \"1982924\",\n \"1982951\",\n \"1983000\",\n \"1983034\",\n \"1983039\",\n \"1983052\",\n \"1983062\",\n \"1983101\",\n \"1983111\",\n \"1983170\",\n \"1983260\",\n \"1983263\",\n \"1983288\",\n \"1983387\",\n \"1983393\",\n \"1983434\",\n \"1983441\",\n \"1983442\",\n \"1983491\",\n \"1983525\",\n \"1983528\",\n \"1983548\",\n \"1983558\",\n \"1983648\",\n \"1983705\",\n \"1983709\",\n \"1983755\",\n \"1983756\",\n \"1983799\",\n \"1983888\",\n \"1983896\",\n \"1983922\",\n \"1983967\",\n \"1983997\",\n \"1983999\",\n \"1984033\",\n \"1984073\",\n \"1984110\",\n \"1984117\",\n \"7752082\",\n \"7993353\",\n \"8015895\",\n \"8026858\",\n \"8262357\",\n \"8394261\",\n \"9577547\",\n \"5148531\",\n \"5148544\",\n \"5148576\",\n \"5148593\",\n \"9237621\",\n \"9307713\",\n \"9370312\",\n \"9424464\",\n \"9488754\",\n \"9544337\",\n \"9610059\",\n \"5148719\",\n \"5148743\",\n \"5148753\",\n \"5148766\",\n \"5148850\",\n \"5148934\",\n \"5148952\",\n \"5148954\",\n \"1984654\",\n \"9382415\",\n \"11121180\",\n \"5149012\",\n \"1984734\",\n \"5149081\",\n \"5149136\",\n \"5149174\",\n \"5149182\",\n \"5149203\",\n \"10199372\",\n \"1984913\",\n \"1984942\",\n \"1984949\",\n \"1984954\",\n \"1985061\",\n \"1985152\",\n \"1985158\",\n \"1985167\",\n \"1985181\",\n \"1985191\",\n \"1985192\",\n \"1985228\",\n \"1985230\",\n \"1985267\",\n \"1985405\",\n \"1985406\",\n \"1985409\",\n \"1985421\",\n \"1985423\",\n \"9332369\",\n \"1985485\",\n \"1985487\",\n \"1985490\",\n \"7905361\",\n \"1985522\",\n \"1985573\",\n \"5149222\",\n \"5149237\",\n \"1985647\",\n \"1985707\",\n \"6133659\",\n \"1985734\",\n \"1985742\",\n \"1985760\",\n \"1985809\",\n \"1985816\",\n \"1985826\",\n \"1985926\",\n \"1985931\",\n \"1985945\",\n \"1985952\",\n \"1985956\",\n \"1985993\",\n \"1986004\",\n \"1986009\",\n \"1986020\",\n \"1986032\",\n \"1986040\",\n \"1986052\",\n \"1986054\",\n \"1986056\",\n \"1986061\",\n \"5734345\",\n \"1986091\",\n \"1986101\",\n \"1986113\",\n \"1986157\",\n \"1986166\",\n \"1986171\",\n \"1986191\",\n \"1986192\",\n \"1986220\",\n \"1986223\",\n \"1986367\",\n \"1986452\",\n \"1986497\",\n \"1986508\",\n \"1986522\",\n \"1986575\",\n \"1986604\",\n \"1986623\",\n \"4702731\",\n \"1986650\",\n \"1986693\",\n \"1986720\",\n \"1986774\",\n \"1986779\",\n \"1986787\",\n \"1986807\",\n \"1986846\",\n \"1986877\",\n \"1986906\",\n \"1986936\",\n \"1986942\",\n \"5149307\",\n \"5149308\",\n \"5149315\",\n \"6133614\",\n \"1986998\",\n \"4302274\",\n \"5149317\",\n \"1987145\",\n \"1987146\",\n \"1987203\",\n \"1987204\",\n \"5768880\",\n \"1987301\",\n \"1987330\",\n \"1987362\",\n \"1987377\",\n \"1987527\",\n \"9137631\",\n \"1987578\",\n \"4525091\",\n \"4525093\",\n \"4525097\",\n \"4525103\",\n \"6118530\",\n \"6214843\",\n \"9538525\",\n \"1987629\",\n \"1987633\",\n \"1987650\",\n \"1987665\",\n \"1987737\",\n \"1987740\",\n \"1987744\",\n \"1987747\",\n \"1987766\",\n \"1987767\",\n \"1987775\",\n \"1987776\",\n \"1987785\",\n \"1987786\",\n \"1987787\",\n \"6133591\",\n \"4524221\",\n \"4524223\",\n \"10533589\",\n \"5149369\",\n \"5149370\",\n \"5149371\",\n \"5149387\",\n \"9987116\",\n \"1987855\",\n \"4702892\",\n \"4702893\",\n \"4702911\",\n \"4702912\",\n \"11650277\",\n \"6133534\",\n \"11190148\",\n \"1988002\",\n \"1988007\",\n \"1988019\",\n \"1988064\",\n \"4524513\",\n \"5734451\",\n \"1988225\",\n \"1988257\",\n \"1988302\",\n \"1988306\",\n \"1988354\",\n \"1988360\",\n \"1988361\",\n \"1988362\",\n \"1988370\",\n \"1988376\",\n \"1988382\",\n \"1988384\",\n \"1988390\",\n \"1988420\",\n \"1988487\",\n \"1988495\",\n \"1988506\",\n \"1988593\",\n \"1988602\",\n \"1988642\",\n \"1988684\",\n \"7555991\",\n \"8388883\",\n \"1988762\",\n \"5149414\",\n \"5149438\",\n \"1988820\",\n \"1988881\",\n \"5734528\",\n \"6133644\",\n \"1988894\",\n \"1989083\",\n \"1989084\",\n \"1989170\",\n \"1989181\",\n \"1989282\",\n \"1989283\",\n \"1989355\",\n \"1989377\",\n \"1989393\",\n \"1989428\",\n \"1989522\",\n \"1989538\",\n \"1989582\",\n \"1989903\",\n \"1989942\",\n \"9906229\",\n \"1990043\",\n \"1990050\",\n \"1990066\",\n \"1990088\",\n \"1990105\",\n \"1990150\",\n \"1990155\",\n \"5734390\",\n \"1990164\",\n \"1990165\",\n \"1990167\",\n \"1990178\",\n \"1990198\",\n \"1990200\",\n \"11465014\",\n \"1990255\",\n \"1990256\",\n \"1990270\",\n \"1990331\",\n \"1990335\",\n \"1990357\",\n \"1990371\",\n \"1990533\",\n \"1990551\",\n \"1990582\",\n \"1990594\",\n \"5149474\",\n \"1990998\",\n \"1991012\",\n \"1991123\",\n \"1991179\",\n \"6133501\",\n \"5149609\",\n \"1991277\",\n \"1991280\",\n \"1991281\",\n \"1991289\",\n \"1991294\",\n \"1991295\",\n \"1991298\",\n \"1991299\",\n \"1991303\",\n \"1991310\",\n \"5149630\",\n \"5149631\",\n \"1991371\",\n \"1991378\",\n \"1991394\",\n \"1991405\",\n \"1991410\",\n \"1991429\",\n \"1991468\",\n \"1991532\",\n \"1991779\",\n \"1991783\",\n \"5149836\",\n \"5149839\",\n \"5149843\",\n \"1991846\",\n \"10155932\",\n \"11098546\",\n \"11869776\",\n \"1991945\",\n \"5734515\",\n \"11635419\",\n \"1992066\",\n \"5149873\",\n \"5149880\",\n \"5149929\",\n \"5149940\",\n \"5149941\",\n \"5149986\",\n \"1992167\",\n \"1992172\",\n \"8180900\",\n \"6133619\",\n \"5734398\",\n \"12010643\",\n \"12225687\",\n \"5880512\",\n \"5880533\",\n \"5880539\",\n \"5880545\",\n \"5880550\",\n \"5880552\",\n \"5880559\",\n \"5880563\",\n \"7657419\",\n \"8237343\",\n \"8632989\",\n \"8941993\",\n \"9110918\",\n \"9243319\",\n \"9251088\",\n \"9259786\",\n \"9261296\",\n \"9272461\",\n \"9311081\",\n \"9330467\",\n \"9339487\",\n \"9366016\",\n \"9368398\",\n \"9392058\",\n \"9392076\",\n \"9400977\",\n \"9402536\",\n \"9413168\",\n \"9419734\",\n \"9428900\",\n \"9438677\",\n \"9454444\",\n \"9456004\",\n \"9474405\",\n \"9489399\",\n \"9502724\",\n \"9530135\",\n \"9532702\",\n \"9558873\",\n \"9574939\",\n \"9616438\",\n \"9624918\",\n \"9632824\",\n \"5769062\",\n \"5769068\",\n \"5769072\",\n \"7429212\",\n \"9442902\",\n \"11654024\",\n \"7507369\",\n \"9414984\",\n \"9563355\",\n \"1989594\",\n \"4524740\",\n \"5144381\",\n \"5144386\",\n \"5144407\",\n \"9533293\",\n \"7990739\",\n \"4302221\",\n \"9621086\",\n \"4302230\",\n \"4523556\",\n \"4523560\",\n \"4523564\",\n \"4524052\",\n \"4524054\",\n \"4523486\",\n \"4523461\",\n \"4524998\",\n \"4525034\",\n \"4524376\",\n \"4524822\",\n \"11828714\",\n \"4524712\",\n \"10422582\",\n \"10574156\",\n \"10632124\",\n \"4523522\",\n \"5880392\",\n \"6133595\",\n \"6133596\",\n \"6133597\",\n \"9577234\",\n \"9281181\",\n \"9352348\",\n \"9352978\",\n \"9403481\",\n \"9436173\",\n \"9448761\",\n \"9453490\",\n \"9494431\",\n \"9516038\",\n \"9516680\",\n \"9523379\",\n \"9534291\",\n \"9545331\",\n \"4522974\",\n \"4524541\",\n \"4523519\",\n \"4524070\",\n \"4524072\",\n \"4524403\",\n \"4524793\",\n \"4524914\",\n \"4524922\",\n \"4524929\",\n \"4524951\",\n \"4524955\",\n \"4524961\",\n \"4524962\",\n \"10530208\",\n \"11555221\",\n \"4525078\",\n \"6119299\",\n \"6119323\",\n \"6119359\",\n \"6119488\",\n \"6133667\",\n \"6133670\",\n \"6133673\",\n \"6133674\",\n \"6133675\",\n \"7346249\",\n \"9220953\",\n \"9249651\",\n \"9288979\",\n \"6133637\",\n \"6133620\",\n \"6133519\",\n \"11780161\",\n \"6133604\",\n \"10224300\",\n \"9830270\",\n \"6133607\",\n \"10629052\",\n \"7346237\",\n \"11799357\",\n \"9307098\",\n \"9423863\",\n \"9497623\",\n \"9581695\",\n \"9619088\",\n \"6133520\",\n \"6133562\",\n \"10864093\",\n \"9273963\",\n \"5734379\",\n \"11548960\",\n \"9479525\",\n \"7345819\",\n \"6133523\",\n \"6133525\",\n \"6133528\",\n \"6133542\",\n \"6133497\",\n \"6133498\",\n \"4702878\",\n \"9237031\",\n \"9274899\",\n \"10477629\",\n \"6133575\",\n \"9962269\",\n \"9321500\",\n \"6133517\",\n \"10078800\",\n \"8501203\",\n \"10464824\",\n \"9299326\",\n \"9309575\",\n \"6133586\",\n \"9629450\",\n \"6133635\",\n \"10175639\",\n \"9617411\",\n \"9932090\",\n \"7346256\",\n \"10438474\",\n \"7345829\",\n \"11652557\",\n \"5734535\",\n \"7345801\",\n \"10411202\",\n \"5734362\",\n \"11477039\",\n \"10146771\",\n \"5880478\",\n \"6133540\",\n \"10755716\",\n \"9415669\",\n \"5144190\",\n \"5144196\",\n \"5715276\",\n \"5146412\",\n \"5715275\",\n \"5768597\",\n \"5734482\",\n \"10221195\",\n \"10288719\",\n \"1978197\",\n \"9363893\",\n \"9391442\",\n \"5149499\",\n \"5149569\",\n \"7769543\",\n \"8851663\",\n \"1954338\",\n \"1954344\",\n \"1954346\",\n \"1954351\",\n \"1954353\",\n \"1954356\",\n \"1954359\",\n \"4523880\",\n \"4523883\",\n \"4523885\",\n \"10210935\",\n \"10263383\",\n \"5149659\",\n \"5149664\",\n \"5149665\",\n \"5149667\",\n \"5149704\",\n \"5149713\",\n \"5149717\",\n \"5149746\",\n \"5149753\",\n \"5149768\",\n \"5149777\",\n \"5149780\",\n \"5149782\",\n \"5149784\",\n \"5149787\",\n \"5149811\",\n \"5149819\",\n \"5149820\",\n \"5734422\",\n \"7443518\",\n \"5146303\",\n \"5146305\",\n \"5146326\",\n \"5146335\",\n \"5146342\",\n \"5146379\",\n \"5146389\",\n \"1991462\",\n \"1991466\",\n \"1963532\",\n \"1987602\",\n \"1954382\",\n \"1980462\",\n \"1972942\",\n \"4302268\",\n \"4524393\",\n \"9256786\",\n \"9291092\",\n \"5150002\",\n \"5150027\",\n \"5142358\",\n \"12200261\",\n \"11470872\",\n \"11654707\",\n \"11776315\",\n \"11834445\",\n \"11892494\",\n \"11794114\",\n \"10713577\",\n \"12252926\",\n \"11423843\",\n \"11670842\",\n \"11729494\",\n \"12173621\",\n \"12247340\",\n \"12252340\",\n \"12239491\",\n \"12258146\",\n \"1942522\",\n \"1942060\",\n \"1942067\",\n \"1942098\",\n \"1942141\",\n \"1942170\",\n \"1942171\",\n \"1942206\",\n \"1942244\",\n \"1942251\",\n \"5141643\",\n \"12286003\",\n \"1942327\",\n \"1942341\",\n \"1942370\",\n \"1942372\",\n \"10773498\",\n \"1942378\",\n \"1942383\",\n \"1942416\",\n \"1942455\",\n \"1942509\",\n \"4301744\",\n \"4301749\",\n \"1942558\",\n \"1942618\",\n \"1942621\",\n \"1942623\",\n \"1942636\",\n \"1942641\",\n \"5141650\",\n \"1942670\",\n \"1942674\",\n \"5141662\",\n \"1942697\",\n \"1942715\",\n \"1942762\",\n \"1942769\",\n \"1942790\",\n \"1942793\",\n \"1942808\",\n \"1942836\",\n \"4689929\",\n \"1942854\",\n \"5141677\",\n \"1942878\",\n \"1942945\",\n \"1942947\",\n \"1942964\",\n \"1942967\",\n \"1942971\",\n \"1942980\",\n \"1942982\",\n \"1942994\",\n \"5141697\",\n \"1943054\",\n \"1943066\",\n \"4302008\",\n \"1943089\",\n \"1943090\",\n \"1943096\",\n \"1943101\",\n \"5141743\",\n \"5141763\",\n \"4689912\",\n \"1943212\",\n \"1943223\",\n \"1943236\",\n \"1943250\",\n \"1943308\",\n \"1943397\",\n \"4535386\",\n \"8178854\",\n \"8277078\",\n \"5141795\",\n \"1943475\",\n \"1943505\",\n \"1943519\",\n \"1943563\",\n \"1943571\",\n \"1943573\",\n \"1943588\",\n \"4301355\",\n \"1943619\",\n \"1943625\",\n \"1943631\",\n \"1943655\",\n \"1943673\",\n \"1943757\",\n \"1943823\",\n \"1943824\",\n \"1943830\",\n \"1943832\",\n \"1943901\",\n \"1943936\",\n \"12198522\",\n \"12233808\",\n \"12243973\",\n \"1943942\",\n \"1943953\",\n \"1943954\",\n \"1943960\",\n \"1943962\",\n \"1943964\",\n \"1943990\",\n \"1944004\",\n \"8073674\",\n \"8133678\",\n \"8273661\",\n \"1944106\",\n \"1944113\",\n \"4689963\",\n \"1944234\",\n \"1944273\",\n \"1944275\",\n \"1944283\",\n \"1944286\",\n \"1944314\",\n \"1944324\",\n \"1944329\",\n \"1944335\",\n \"1944343\",\n \"1944361\",\n \"1944374\",\n \"1944421\",\n \"1944456\",\n \"1944462\",\n \"1944483\",\n \"1944503\",\n \"1944504\",\n \"1944520\",\n \"1944521\",\n \"1944523\",\n \"1944574\",\n \"1944580\",\n \"1944591\",\n \"1944618\",\n \"1944619\",\n \"1944627\",\n \"1944629\",\n \"1944631\",\n \"1944635\",\n \"1944638\",\n \"4689905\",\n \"1944744\",\n \"1944769\",\n \"4301934\",\n \"1944778\",\n \"1944798\",\n \"1944815\",\n \"1944832\",\n \"1944910\",\n \"5141913\",\n \"6205994\",\n \"9551544\",\n \"1944977\",\n \"5141924\",\n \"1945066\",\n \"9050611\",\n \"1945081\",\n \"1945088\",\n \"1945122\",\n \"1945137\",\n \"1945143\",\n \"1945173\",\n \"1945225\",\n \"1945227\",\n \"1945270\",\n \"1945274\",\n \"1945286\",\n \"1945302\",\n \"1945312\",\n \"1945396\",\n \"1945462\",\n \"1945476\",\n \"1945477\",\n \"1945535\",\n \"1945569\",\n \"1945571\",\n \"1945587\",\n \"1945589\",\n \"1945605\",\n \"1945694\",\n \"1945710\",\n \"1945715\",\n \"1945738\",\n \"1945742\",\n \"1945748\",\n \"1945786\",\n \"1945814\",\n \"1945837\",\n \"1945856\",\n \"1945863\",\n \"1945874\",\n \"1945877\",\n \"1945878\",\n \"1945893\",\n \"4301942\",\n \"5142001\",\n \"1945957\",\n \"1945980\",\n \"1946019\",\n \"1946037\",\n \"1946051\",\n \"1946058\",\n \"1946067\",\n \"1946074\",\n \"1946078\",\n \"1946079\",\n \"1946097\",\n \"4301426\",\n \"1946145\",\n \"1946163\",\n \"1946167\",\n \"1946174\",\n \"1946177\",\n \"5142061\",\n \"5142062\",\n \"1946290\",\n \"1946310\",\n \"1946327\",\n \"1946333\",\n \"5142067\",\n \"1946432\",\n \"1946469\",\n \"1946486\",\n \"12223105\",\n \"12233838\",\n \"1946495\",\n \"1946500\",\n \"1946509\",\n \"4302101\",\n \"1946520\",\n \"1946544\",\n \"1946550\",\n \"1946577\",\n \"1946582\",\n \"1946610\",\n \"1946612\",\n \"1946618\",\n \"1946628\",\n \"7346354\",\n \"1946660\",\n \"1946661\",\n \"1946695\",\n \"1946720\",\n \"1946731\",\n \"1946737\",\n \"1946738\",\n \"1946756\",\n \"1946763\",\n \"5142086\",\n \"1946810\",\n \"1946853\",\n \"1946865\",\n \"7389824\",\n \"1946901\",\n \"1946916\",\n \"1946917\",\n \"11753578\",\n \"1946980\",\n \"1946981\",\n \"1946983\",\n \"1946989\",\n \"1946991\",\n \"1946992\",\n \"1946995\",\n \"1946999\",\n \"1947021\",\n \"1947037\",\n \"1947048\",\n \"1947049\",\n \"1947055\",\n \"1947112\",\n \"1947113\",\n \"1947117\",\n \"1947147\",\n \"5142130\",\n \"5142160\",\n \"1947282\",\n \"1947306\",\n \"1947333\",\n \"1947335\",\n \"5142166\",\n \"5142175\",\n \"5142176\",\n \"1947385\",\n \"1947402\",\n \"1947409\",\n \"1947446\",\n \"1947449\",\n \"1947456\",\n \"1947459\",\n \"1947491\",\n \"1947492\",\n \"1947496\",\n \"1947506\",\n \"1947507\",\n \"1947568\",\n \"1947577\",\n \"1947587\",\n \"1947588\",\n \"1947597\",\n \"1947626\",\n \"1947661\",\n \"1947673\",\n \"1947703\",\n \"1947727\",\n \"1947740\",\n \"1947745\",\n \"1947753\",\n \"1947765\",\n \"1947775\",\n \"5734665\",\n \"1947805\",\n \"1947842\",\n \"1947846\",\n \"1947890\",\n \"1947894\",\n \"1947915\",\n \"12208168\",\n \"1947973\",\n \"1947976\",\n \"1947979\",\n \"1947980\",\n \"1948042\",\n \"1948046\",\n \"1948054\",\n \"1948061\",\n \"1948062\",\n \"1948073\",\n \"1948088\",\n \"1948158\",\n \"7603634\",\n \"1948371\",\n \"5142213\",\n \"1948439\",\n \"1948446\",\n \"1948464\",\n \"1948465\",\n \"1948521\",\n \"1948630\",\n \"4301945\",\n \"1948823\",\n \"1948826\",\n \"1948858\",\n \"1948861\",\n \"1948865\",\n \"1948883\",\n \"1948890\",\n \"8792353\",\n \"1948941\",\n \"1948947\",\n \"1948994\",\n \"1949008\",\n \"1949015\",\n \"1949049\",\n \"1949068\",\n \"1949105\",\n \"12353663\",\n \"1949219\",\n \"1949285\",\n \"1949322\",\n \"1949331\",\n \"1949336\",\n \"1949366\",\n \"1949404\",\n \"1949419\",\n \"7346351\",\n \"8828146\",\n \"9068968\",\n \"5142338\",\n \"5142352\",\n \"1949449\",\n \"1949451\",\n \"1949466\",\n \"1949492\",\n \"10574663\",\n \"1949512\",\n \"1949515\",\n \"1949520\",\n \"1949544\",\n \"1949545\",\n \"1949549\",\n \"1949592\",\n \"1949621\",\n \"7726809\",\n \"9395000\",\n \"10202439\",\n \"1949687\",\n \"1949697\",\n \"1949715\",\n \"1949784\",\n \"1949794\",\n \"1949850\",\n \"1949852\",\n \"1949877\",\n \"1949929\",\n \"1949938\",\n \"1949954\",\n \"1950006\",\n \"5142372\",\n \"5142394\",\n \"5142424\",\n \"5142436\",\n \"5142499\",\n \"5142583\",\n \"5142599\",\n \"7683096\",\n \"8109173\",\n \"1950013\",\n \"7346356\",\n \"1950017\",\n \"1950019\",\n \"1950024\",\n \"4301876\",\n \"1950044\",\n \"1950047\",\n \"1950052\",\n \"1950133\",\n \"1950153\",\n \"1950156\",\n \"1950169\",\n \"1950171\",\n \"1950197\",\n \"1950243\",\n \"1950272\",\n \"1950302\",\n \"11967675\",\n \"1950362\",\n \"1950384\",\n \"1950396\",\n \"1950408\",\n \"1950409\",\n \"1950521\",\n \"1950533\",\n \"1950567\",\n \"1950578\",\n \"1950591\",\n \"1950654\",\n \"1950767\",\n \"1950856\",\n \"1950877\",\n \"1950879\",\n \"1950936\",\n \"1951062\",\n \"1951072\",\n \"12231344\",\n \"1951097\",\n \"1951103\",\n \"1951116\",\n \"1951121\",\n \"1951125\",\n \"1951133\",\n \"1951157\",\n \"1951170\",\n \"1951217\",\n \"1951218\",\n \"4301897\",\n \"5142822\",\n \"5142825\",\n \"5715127\",\n \"12180041\",\n \"12206694\",\n \"1951340\",\n \"5142829\",\n \"5977179\",\n \"5977185\",\n \"5977197\",\n \"5977203\",\n \"5977207\",\n \"5977208\",\n \"5977214\",\n \"5977216\",\n \"5977220\",\n \"5977235\",\n \"5977247\",\n \"5977250\",\n \"5977251\",\n \"5977257\",\n \"5977259\",\n \"5977260\",\n \"5977261\",\n \"5977262\",\n \"8270406\",\n \"5142249\",\n \"5142254\",\n \"5142267\",\n \"5142269\",\n \"5142273\",\n \"5142278\",\n \"5142283\",\n \"5142298\",\n \"5142300\",\n \"5142314\",\n \"5142317\",\n \"5142319\",\n \"5142322\",\n \"5142328\",\n \"7633472\",\n \"5142725\",\n \"5142729\",\n \"5142730\",\n \"5142749\",\n \"1948771\",\n \"1948774\",\n \"1948779\",\n \"1948789\",\n \"1948799\",\n \"1948800\",\n \"1948802\",\n \"1948803\",\n \"1948804\",\n \"1948808\",\n \"1948809\",\n \"1948810\",\n \"1945374\",\n \"1945378\",\n \"1948916\",\n \"10715410\",\n \"4535396\",\n \"5142006\",\n \"5142032\",\n \"5142042\",\n \"12175154\",\n \"12263736\",\n \"1869467\",\n \"1869478\",\n \"1869489\",\n \"1869512\",\n \"1952878\",\n \"1952883\",\n \"1952909\",\n \"9359597\",\n \"5769709\",\n \"1735844\",\n \"1735855\",\n \"9400895\",\n \"9530977\",\n \"9245604\",\n \"10744228\",\n \"10963226\",\n \"10982815\",\n \"1800191\",\n \"5109821\",\n \"1758613\",\n \"9355953\",\n \"1758727\",\n \"1758767\",\n \"1758771\",\n \"1758781\",\n \"1758783\",\n \"7911151\",\n \"9366762\",\n \"9445489\",\n \"5108416\",\n \"5108417\",\n \"5108419\",\n \"1758839\",\n \"1758850\",\n \"1758874\",\n \"1758878\",\n \"1758879\",\n \"1758898\",\n \"1758906\",\n \"1758916\",\n \"1759037\",\n \"1759040\",\n \"1759041\",\n \"1759055\",\n \"1759069\",\n \"1759079\",\n \"1759083\",\n \"1759092\",\n \"1759097\",\n \"4533952\",\n \"7972792\",\n \"9447614\",\n \"1759153\",\n \"1759159\",\n \"4533211\",\n \"1759177\",\n \"1759338\",\n \"1759407\",\n \"1759553\",\n \"1759563\",\n \"1759573\",\n \"1759585\",\n \"1759597\",\n \"1759605\",\n \"1759610\",\n \"1759611\",\n \"1759620\",\n \"1759621\",\n \"1759624\",\n \"1759631\",\n \"1759632\",\n \"1759633\",\n \"1759634\",\n \"1759661\",\n \"1759667\",\n \"1759668\",\n \"1759671\",\n \"1759673\",\n \"1759677\",\n \"1759678\",\n \"1759686\",\n \"1759688\",\n \"1759691\",\n \"1759694\",\n \"1759719\",\n \"1759799\",\n \"5108619\",\n \"5108636\",\n \"1759881\",\n \"9306367\",\n \"10329023\",\n \"1760104\",\n \"1760172\",\n \"1760173\",\n \"1760175\",\n \"1760261\",\n \"1760309\",\n \"1760361\",\n \"7444489\",\n \"9060267\",\n \"1760454\",\n \"1760455\",\n \"1760593\",\n \"1760620\",\n \"1760682\",\n \"1794361\",\n \"4533957\",\n \"4534225\",\n \"8708745\",\n \"1760857\",\n \"1760867\",\n \"1760887\",\n \"1760891\",\n \"1760893\",\n \"4533255\",\n \"1760939\",\n \"1760943\",\n \"5108957\",\n \"5108958\",\n \"1761041\",\n \"1761143\",\n \"1761392\",\n \"1761438\",\n \"1761439\",\n \"1761498\",\n \"1761553\",\n \"1761563\",\n \"1761735\",\n \"1761778\",\n \"1761788\",\n \"1761789\",\n \"1761798\",\n \"1761865\",\n \"1761892\",\n \"9418549\",\n \"9616055\",\n \"1762244\",\n \"1762271\",\n \"1762383\",\n \"6132749\",\n \"1762608\",\n \"1762609\",\n \"1762615\",\n \"1762657\",\n \"6132957\",\n \"1762680\",\n \"1762900\",\n \"1762902\",\n \"5109498\",\n \"5109506\",\n \"5109523\",\n \"5109535\",\n \"5109554\",\n \"5109566\",\n \"5109596\",\n \"5109599\",\n \"5109614\",\n \"5109646\",\n \"5109651\",\n \"5109661\",\n \"5109670\",\n \"5109722\",\n \"9337858\",\n \"1763610\",\n \"1763697\",\n \"8167743\",\n \"1763727\",\n \"1763741\",\n \"9328683\",\n \"9438913\",\n \"1764174\",\n \"1764178\",\n \"1764238\",\n \"1764553\",\n \"1764673\",\n \"1764686\",\n \"1764690\",\n \"1764691\",\n \"1764693\",\n \"1764716\",\n \"1764791\",\n \"1764917\",\n \"1764929\",\n \"1764986\",\n \"1764987\",\n \"1765010\",\n \"1765011\",\n \"1765017\",\n \"1765038\",\n \"1765044\",\n \"1765069\",\n \"1765073\",\n \"4534245\",\n \"4534250\",\n \"4534252\",\n \"4534257\",\n \"4534275\",\n \"1765155\",\n \"1765172\",\n \"11797244\",\n \"5109829\",\n \"5109830\",\n \"5109843\",\n \"5109845\",\n \"5109848\",\n \"5109850\",\n \"5109852\",\n \"5109855\",\n \"5109870\",\n \"5109872\",\n \"5109881\",\n \"5109882\",\n \"5109898\",\n \"5109931\",\n \"5109943\",\n \"5109954\",\n \"5109958\",\n \"8352161\",\n \"1765508\",\n \"1765604\",\n \"1765658\",\n \"1765733\",\n \"11487320\",\n \"1765767\",\n \"1765769\",\n \"1765779\",\n \"1765798\",\n \"4687817\",\n \"4687827\",\n \"7800469\",\n \"1765898\",\n \"1765954\",\n \"1765962\",\n \"1766072\",\n \"1766086\",\n \"1766128\",\n \"1766130\",\n \"1766131\",\n \"1766137\",\n \"1766193\",\n \"1766205\",\n \"1766210\",\n \"4534691\",\n \"1766237\",\n \"1766274\",\n \"1766285\",\n \"1766287\",\n \"1766392\",\n \"1766410\",\n \"1766418\",\n \"1766489\",\n \"1766509\",\n \"1766510\",\n \"4301071\",\n \"4301081\",\n \"7895336\",\n \"9362190\",\n \"1766646\",\n \"1766650\",\n \"1766718\",\n \"1766721\",\n \"1766741\",\n \"1766773\",\n \"1766784\",\n \"1766814\",\n \"1766910\",\n \"1766917\",\n \"1766919\",\n \"1766921\",\n \"11034779\",\n \"1767052\",\n \"1767134\",\n \"1767140\",\n \"1767142\",\n \"1767335\",\n \"1767336\",\n \"1767337\",\n \"1767338\",\n \"1767347\",\n \"1767368\",\n \"1767381\",\n \"1767393\",\n \"1767430\",\n \"7598945\",\n \"9062262\",\n \"9105656\",\n \"1767484\",\n \"9471709\",\n \"1767511\",\n \"1767571\",\n \"1767579\",\n \"1767584\",\n \"9511345\",\n \"1767597\",\n \"1767602\",\n \"1767608\",\n \"1767612\",\n \"1767625\",\n \"1767628\",\n \"10575632\",\n \"10597823\",\n \"1767655\",\n \"1767674\",\n \"5110120\",\n \"5734744\",\n \"5772169\",\n \"5772171\",\n \"5772172\",\n \"5772176\",\n \"5772178\",\n \"5772180\",\n \"5772186\",\n \"5772196\",\n \"5772199\",\n \"5772202\",\n \"5772205\",\n \"5772206\",\n \"5772210\",\n \"5802396\",\n \"5883914\",\n \"5883925\",\n \"6132943\",\n \"7345742\",\n \"7388922\",\n \"7768584\",\n \"8045644\",\n \"9356770\",\n \"9381852\",\n \"1767719\",\n \"1768042\",\n \"1768048\",\n \"1768117\",\n \"1768132\",\n \"1768150\",\n \"1768172\",\n \"1768174\",\n \"5110200\",\n \"1768308\",\n \"1768341\",\n \"5110211\",\n \"5110213\",\n \"1768546\",\n \"1768554\",\n \"1768557\",\n \"1768560\",\n \"1768568\",\n \"1768698\",\n \"1768702\",\n \"1768727\",\n \"1768729\",\n \"1768735\",\n \"1768741\",\n \"1768749\",\n \"1768771\",\n \"1768815\",\n \"1768819\",\n \"5110256\",\n \"5110258\",\n \"1768972\",\n \"8150836\",\n \"1769029\",\n \"1769057\",\n \"1769095\",\n \"1769114\",\n \"1769194\",\n \"1769209\",\n \"1769225\",\n \"1769245\",\n \"1769250\",\n \"1769260\",\n \"1769271\",\n \"1769272\",\n \"1769283\",\n \"1769293\",\n \"1769294\",\n \"1769298\",\n \"1769302\",\n \"1769308\",\n \"1769310\",\n \"4688049\",\n \"4688075\",\n \"4688092\",\n \"4688098\",\n \"9493016\",\n \"1769505\",\n \"1769519\",\n \"1769543\",\n \"1769566\",\n \"1769592\",\n \"9373686\",\n \"1769814\",\n \"1769934\",\n \"1769944\",\n \"1769947\",\n \"1769958\",\n \"1769978\",\n \"1770132\",\n \"1770144\",\n \"1770150\",\n \"9148810\",\n \"1770172\",\n \"1770307\",\n \"1770353\",\n \"1770416\",\n \"1770461\",\n \"1770477\",\n \"1770530\",\n \"1770573\",\n \"4532696\",\n \"8393221\",\n \"1770659\",\n \"1771357\",\n \"1771385\",\n \"1771391\",\n \"1771441\",\n \"7725644\",\n \"1771509\",\n \"1771531\",\n \"1771555\",\n \"4532986\",\n \"1771872\",\n \"1771997\",\n \"1772013\",\n \"9242609\",\n \"9244973\",\n \"9254157\",\n \"9396755\",\n \"9463442\",\n \"9476708\",\n \"9495306\",\n \"9562175\",\n \"9616658\",\n \"9625112\",\n \"9630930\",\n \"9633562\",\n \"1772043\",\n \"1772094\",\n \"6133806\",\n \"1772169\",\n \"1772179\",\n \"5110333\",\n \"5110341\",\n \"5110356\",\n \"9539128\",\n \"1772255\",\n \"5772129\",\n \"1772422\",\n \"1772462\",\n \"9605631\",\n \"1772668\",\n \"4687565\",\n \"1772940\",\n \"1772954\",\n \"1772956\",\n \"1772977\",\n \"1773002\",\n \"1773062\",\n \"1773069\",\n \"1773081\",\n \"1773163\",\n \"1773231\",\n \"1773248\",\n \"1773309\",\n \"1773313\",\n \"1773315\",\n \"1773328\",\n \"1773377\",\n \"1773484\",\n \"1773510\",\n \"1773572\",\n \"1773577\",\n \"1773662\",\n \"1773677\",\n \"1773728\",\n \"4301148\",\n \"8222049\",\n \"9369576\",\n \"1773742\",\n \"1773743\",\n \"1773744\",\n \"1773746\",\n \"9367674\",\n \"9399288\",\n \"9593475\",\n \"1773783\",\n \"1773784\",\n \"9283948\",\n \"9560018\",\n \"1774092\",\n \"1774095\",\n \"9322646\",\n \"1774243\",\n \"1774253\",\n \"1774254\",\n \"1774262\",\n \"1774268\",\n \"9243117\",\n \"9409309\",\n \"9550265\",\n \"1774272\",\n \"1774314\",\n \"1774347\",\n \"1774358\",\n \"1774470\",\n \"1774792\",\n \"1774797\",\n \"4301304\",\n \"6115946\",\n \"6115953\",\n \"1774859\",\n \"1774873\",\n \"1774878\",\n \"1774918\",\n \"1774959\",\n \"1775046\",\n \"1775055\",\n \"9547676\",\n \"10032003\",\n \"1775089\",\n \"1775112\",\n \"1775118\",\n \"4534046\",\n \"4534052\",\n \"4534057\",\n \"1775172\",\n \"1775279\",\n \"1775290\",\n \"1775291\",\n \"1775299\",\n \"1775301\",\n \"1775329\",\n \"1775508\",\n \"1775509\",\n \"1775631\",\n \"5110593\",\n \"5772269\",\n \"1775672\",\n \"1775680\",\n \"1775791\",\n \"5883881\",\n \"1775866\",\n \"1775891\",\n \"1775913\",\n \"4534719\",\n \"1775962\",\n \"1775963\",\n \"1775970\",\n \"1776067\",\n \"1776167\",\n \"5110670\",\n \"1776182\",\n \"1776207\",\n \"1776330\",\n \"1776371\",\n \"5110723\",\n \"5110728\",\n \"5110752\",\n \"5110754\",\n \"5110756\",\n \"5772446\",\n \"1776397\",\n \"1776406\",\n \"1776415\",\n \"1776459\",\n \"1776462\",\n \"1776467\",\n \"1776470\",\n \"1776472\",\n \"1776473\",\n \"1776476\",\n \"1776618\",\n \"1776619\",\n \"1776861\",\n \"1776862\",\n \"1776871\",\n \"6132861\",\n \"1776880\",\n \"4534463\",\n \"1777120\",\n \"1777139\",\n \"1777253\",\n \"1777261\",\n \"5110818\",\n \"1777727\",\n \"1777728\",\n \"1777730\",\n \"9310286\",\n \"5110858\",\n \"5110863\",\n \"5110871\",\n \"5110885\",\n \"5715009\",\n \"5715010\",\n \"5715013\",\n \"1777974\",\n \"1777976\",\n \"1777980\",\n \"1777982\",\n \"1777994\",\n \"1777996\",\n \"1778000\",\n \"1778006\",\n \"1778007\",\n \"1778013\",\n \"1778015\",\n \"1778024\",\n \"1778031\",\n \"1778033\",\n \"1778034\",\n \"1778037\",\n \"1778045\",\n \"1778049\",\n \"9456735\",\n \"1778074\",\n \"4534299\",\n \"1778109\",\n \"1778127\",\n \"1778143\",\n \"1778337\",\n \"1778517\",\n \"1778524\",\n \"1778534\",\n \"1778596\",\n \"1778688\",\n \"5111064\",\n \"5111076\",\n \"5111139\",\n \"5111141\",\n \"5111147\",\n \"5111195\",\n \"5111214\",\n \"5111249\",\n \"5111343\",\n \"5111360\",\n \"5111372\",\n \"5111397\",\n \"5111481\",\n \"5111501\",\n \"5111513\",\n \"5111521\",\n \"5111528\",\n \"5111535\",\n \"5111546\",\n \"5111568\",\n \"5111574\",\n \"5111600\",\n \"5772222\",\n \"7593392\",\n \"8253467\",\n \"9175037\",\n \"9596498\",\n \"1779258\",\n \"1779269\",\n \"1779276\",\n \"1779382\",\n \"1779430\",\n \"1779435\",\n \"1779633\",\n \"1779641\",\n \"1779643\",\n \"1779690\",\n \"1779709\",\n \"1779713\",\n \"1779959\",\n \"1780049\",\n \"1780072\",\n \"1780209\",\n \"1780213\",\n \"1780214\",\n \"1780215\",\n \"1780272\",\n \"1780309\",\n \"1780313\",\n \"1780326\",\n \"1780330\",\n \"1780344\",\n \"1780378\",\n \"1780390\",\n \"1780407\",\n \"1780414\",\n \"1780437\",\n \"1780440\",\n \"1780450\",\n \"8802610\",\n \"9284849\",\n \"1780852\",\n \"4533937\",\n \"1780926\",\n \"1780928\",\n \"1780954\",\n \"1781008\",\n \"1781016\",\n \"4533285\",\n \"4533325\",\n \"7664771\",\n \"7825945\",\n \"9374443\",\n \"9392614\",\n \"5111956\",\n \"1781233\",\n \"1781234\",\n \"5111967\",\n \"5111974\",\n \"5111980\",\n \"1781692\",\n \"1781694\",\n \"1781803\",\n \"1781819\",\n \"1781841\",\n \"1782031\",\n \"1782168\",\n \"1782177\",\n \"1782319\",\n \"1782341\",\n \"1782354\",\n \"1782422\",\n \"1782424\",\n \"1782457\",\n \"1782466\",\n \"1782523\",\n \"11763567\",\n \"1782542\",\n \"1782543\",\n \"1782560\",\n \"1782579\",\n \"1782585\",\n \"1782595\",\n \"9289753\",\n \"9433772\",\n \"9525172\",\n \"1782615\",\n \"1782622\",\n \"1782627\",\n \"10441062\",\n \"1782672\",\n \"1782682\",\n \"1782689\",\n \"1782700\",\n \"1782705\",\n \"1782706\",\n \"1782707\",\n \"1782708\",\n \"1782709\",\n \"1782726\",\n \"1782727\",\n \"1782743\",\n \"1782744\",\n \"1782745\",\n \"1782747\",\n \"1782757\",\n \"1782762\",\n \"1782763\",\n \"1782776\",\n \"1782777\",\n \"1782803\",\n \"1782808\",\n \"1782809\",\n \"1782819\",\n \"1782822\",\n \"1782826\",\n \"1782833\",\n \"1782837\",\n \"1782840\",\n \"1782841\",\n \"1782853\",\n \"1782870\",\n \"1782871\",\n \"1782872\",\n \"1782878\",\n \"1782921\",\n \"1782927\",\n \"1782928\",\n \"1782934\",\n \"1782948\",\n \"1782961\",\n \"1782972\",\n \"1782978\",\n \"1782993\",\n \"1783002\",\n \"1783008\",\n \"1783013\",\n \"1783016\",\n \"1783035\",\n \"1783037\",\n \"1783043\",\n \"1783045\",\n \"1783055\",\n \"1783059\",\n \"4301044\",\n \"4687661\",\n \"6133026\",\n \"9581976\",\n \"1783090\",\n \"1783313\",\n \"9457757\",\n \"9500945\",\n \"1783371\",\n \"1783372\",\n \"1783373\",\n \"1783376\",\n \"1783378\",\n \"5112153\",\n \"5112155\",\n \"5112160\",\n \"5112191\",\n \"5112199\",\n \"5112229\",\n \"5112233\",\n \"5112254\",\n \"5112283\",\n \"5112291\",\n \"5112302\",\n \"5112336\",\n \"5112345\",\n \"5112377\",\n \"5112388\",\n \"5714951\",\n \"5714973\",\n \"5714984\",\n \"5714994\",\n \"5715004\",\n \"5734845\",\n \"5772349\",\n \"5772351\",\n \"7921916\",\n \"8043500\",\n \"1783777\",\n \"1783811\",\n \"9348210\",\n \"9465978\",\n \"9492640\",\n \"1783841\",\n \"1783842\",\n \"1783855\",\n \"1783861\",\n \"1783940\",\n \"1783971\",\n \"1784276\",\n \"1784278\",\n \"1784281\",\n \"1784282\",\n \"1784283\",\n \"1784349\",\n \"1784359\",\n \"1784422\",\n \"1784461\",\n \"1784513\",\n \"1784582\",\n \"1784591\",\n \"1784610\",\n \"9320776\",\n \"1784688\",\n \"5112414\",\n \"1784761\",\n \"1784812\",\n \"1784824\",\n \"1784826\",\n \"1784853\",\n \"4534290\",\n \"1784893\",\n \"1785145\",\n \"1785149\",\n \"1785162\",\n \"1785166\",\n \"1785168\",\n \"1785181\",\n \"1785185\",\n \"1785217\",\n \"1785220\",\n \"1785280\",\n \"1785286\",\n \"4532886\",\n \"4532888\",\n \"4532890\",\n \"9633615\",\n \"1785314\",\n \"1785322\",\n \"1785329\",\n \"1785331\",\n \"1785361\",\n \"1785367\",\n \"1785399\",\n \"1785403\",\n \"9636267\",\n \"1785462\",\n \"1785725\",\n \"1785728\",\n \"1785730\",\n \"1785732\",\n \"1785733\",\n \"7400814\",\n \"9250744\",\n \"9329292\",\n \"5112457\",\n \"5112460\",\n \"5112461\",\n \"5112464\",\n \"5112465\",\n \"5112467\",\n \"5112469\",\n \"5112474\",\n \"5112475\",\n \"5112480\",\n \"5112481\",\n \"1785875\",\n \"1785883\",\n \"1785886\",\n \"1785887\",\n \"1785888\",\n \"1785895\",\n \"1785951\",\n \"1785955\",\n \"1785964\",\n \"1785982\",\n \"1785992\",\n \"1785997\",\n \"1786007\",\n \"1786017\",\n \"8292872\",\n \"1786035\",\n \"1786036\",\n \"1786308\",\n \"1786360\",\n \"1786448\",\n \"1786452\",\n \"1786455\",\n \"1786514\",\n \"1786515\",\n \"1786565\",\n \"1786566\",\n \"1786567\",\n \"1786573\",\n \"1786619\",\n \"1786651\",\n \"1786658\",\n \"1786664\",\n \"1786691\",\n \"1786733\",\n \"1786808\",\n \"1786902\",\n \"1786918\",\n \"1786936\",\n \"1787064\",\n \"1787112\",\n \"1787165\",\n \"1787185\",\n \"1787213\",\n \"1787226\",\n \"1787264\",\n \"1787267\",\n \"1787279\",\n \"1787367\",\n \"1787373\",\n \"1787381\",\n \"4687681\",\n \"9268082\",\n \"9305798\",\n \"1787400\",\n \"1787417\",\n \"1787438\",\n \"1787504\",\n \"1787506\",\n \"1787590\",\n \"1787610\",\n \"1787631\",\n \"1787697\",\n \"1787751\",\n \"1787770\",\n \"1787825\",\n \"1787841\",\n \"1787859\",\n \"1787905\",\n \"4534086\",\n \"7917033\",\n \"1788034\",\n \"1788037\",\n \"1788063\",\n \"1788070\",\n \"1788139\",\n \"9547140\",\n \"10161728\",\n \"1788425\",\n \"9282469\",\n \"1788485\",\n \"1788522\",\n \"1788673\",\n \"1788677\",\n \"1788679\",\n \"1788680\",\n \"1788681\",\n \"1788720\",\n \"4301312\",\n \"1788734\",\n \"9216200\",\n \"4534011\",\n \"4534017\",\n \"1788846\",\n \"1788856\",\n \"1788917\",\n \"1788929\",\n \"1789071\",\n \"1789073\",\n \"1789076\",\n \"1789086\",\n \"1789155\",\n \"9612009\",\n \"1789212\",\n \"1789250\",\n \"1789255\",\n \"1789267\",\n \"9805848\",\n \"1789403\",\n \"4533882\",\n \"4533924\",\n \"9248329\",\n \"9449132\",\n \"1789481\",\n \"1789491\",\n \"1789505\",\n \"1789553\",\n \"1789580\",\n \"4534162\",\n \"4534166\",\n \"4534170\",\n \"4534194\",\n \"4534198\",\n \"1789637\",\n \"1789694\",\n \"1789695\",\n \"1789730\",\n \"1789745\",\n \"1789753\",\n \"1789755\",\n \"1789783\",\n \"1789785\",\n \"1789840\",\n \"1789849\",\n \"1789957\",\n \"10068024\",\n \"10113008\",\n \"10290084\",\n \"10312073\",\n \"10904813\",\n \"1789982\",\n \"1789984\",\n \"1790002\",\n \"1790013\",\n \"1790023\",\n \"1790059\",\n \"1790062\",\n \"1790072\",\n \"1790084\",\n \"1790151\",\n \"1790153\",\n \"1790160\",\n \"4533115\",\n \"8047343\",\n \"9092175\",\n \"9410414\",\n \"1790339\",\n \"1790343\",\n \"11693171\",\n \"1790359\",\n \"1790361\",\n \"1790362\",\n \"1790364\",\n \"1790369\",\n \"1790371\",\n \"1790376\",\n \"9174377\",\n \"1790625\",\n \"1790671\",\n \"1790737\",\n \"9297059\",\n \"1791331\",\n \"1791384\",\n \"1791422\",\n \"4687906\",\n \"1791590\",\n \"1791593\",\n \"1791660\",\n \"1791680\",\n \"1791758\",\n \"1791784\",\n \"1791793\",\n \"1791837\",\n \"4687930\",\n \"1791846\",\n \"1791862\",\n \"1791870\",\n \"1792061\",\n \"1792072\",\n \"1792073\",\n \"1792087\",\n \"1792091\",\n \"1792095\",\n \"1792096\",\n \"1792097\",\n \"1792099\",\n \"9426771\",\n \"9622117\",\n \"1792292\",\n \"1792300\",\n \"1792318\",\n \"1792335\",\n \"1792377\",\n \"1792379\",\n \"1792383\",\n \"9241669\",\n \"9338769\",\n \"9530319\",\n \"9548726\",\n \"1792411\",\n \"1792414\",\n \"1792418\",\n \"1792426\",\n \"1792430\",\n \"1792431\",\n \"1792442\",\n \"1792449\",\n \"1792456\",\n \"1792465\",\n \"1792475\",\n \"1792478\",\n \"1792485\",\n \"1792497\",\n \"1792517\",\n \"1792645\",\n \"10684776\",\n \"5113365\",\n \"9240216\",\n \"1792768\",\n \"1792817\",\n \"9233420\",\n \"9539292\",\n \"5113370\",\n \"1792996\",\n \"1793189\",\n \"1793192\",\n \"1793212\",\n \"1793238\",\n \"1793243\",\n \"1793246\",\n \"5113394\",\n \"1793368\",\n \"1793369\",\n \"1793419\",\n \"1793453\",\n \"1793455\",\n \"4301052\",\n \"4301055\",\n \"7918000\",\n \"1793589\",\n \"1793661\",\n \"1793689\",\n \"1793699\",\n \"1793877\",\n \"1793983\",\n \"1793986\",\n \"1794102\",\n \"1794351\",\n \"1794425\",\n \"1794507\",\n \"1794510\",\n \"1794532\",\n \"1794534\",\n \"1794590\",\n \"1794599\",\n \"1794609\",\n \"4301238\",\n \"11781335\",\n \"1795065\",\n \"1795068\",\n \"4532908\",\n \"6133011\",\n \"1795110\",\n \"1795180\",\n \"1795215\",\n \"1795282\",\n \"7869346\",\n \"1795483\",\n \"7922810\",\n \"1795597\",\n \"1795788\",\n \"1795802\",\n \"1795812\",\n \"1795854\",\n \"1795862\",\n \"1795871\",\n \"1795896\",\n \"1795900\",\n \"1795930\",\n \"1795946\",\n \"1795957\",\n \"1795983\",\n \"1796007\",\n \"1796032\",\n \"1796035\",\n \"1796040\",\n \"1796051\",\n \"1796100\",\n \"1796117\",\n \"1796139\",\n \"1796145\",\n \"1796154\",\n \"1796169\",\n \"1796180\",\n \"1796181\",\n \"1796188\",\n \"4534485\",\n \"4534486\",\n \"7438067\",\n \"8007222\",\n \"9377268\",\n \"9541908\",\n \"1796217\",\n \"7780930\",\n \"1796274\",\n \"1796276\",\n \"4532700\",\n \"4688166\",\n \"4688169\",\n \"4688172\",\n \"7383338\",\n \"7689966\",\n \"7882824\",\n \"8405656\",\n \"9256638\",\n \"9327259\",\n \"9589234\",\n \"9803522\",\n \"1796310\",\n \"1796312\",\n \"1796423\",\n \"1796451\",\n \"1796463\",\n \"8105817\",\n \"1796678\",\n \"1796686\",\n \"10690739\",\n \"10700540\",\n \"10706419\",\n \"10716234\",\n \"10732033\",\n \"10741837\",\n \"10747908\",\n \"10799294\",\n \"10814936\",\n \"10824750\",\n \"10840540\",\n \"10840565\",\n \"10850393\",\n \"10850415\",\n \"10866199\",\n \"10891794\",\n \"11539735\",\n \"11858666\",\n \"1796791\",\n \"1796842\",\n \"1796958\",\n \"1797030\",\n \"1797587\",\n \"1797592\",\n \"1797593\",\n \"1797595\",\n \"1797601\",\n \"1797735\",\n \"1798060\",\n \"1798084\",\n \"4301242\",\n \"4301249\",\n \"4301255\",\n \"4533431\",\n \"4533433\",\n \"4533442\",\n \"4533444\",\n \"4533446\",\n \"6133001\",\n \"6133002\",\n \"6133006\",\n \"6133007\",\n \"6133010\",\n \"1798090\",\n \"1798288\",\n \"1798371\",\n \"1798372\",\n \"1798375\",\n \"1798419\",\n \"11992983\",\n \"1798916\",\n \"1798922\",\n \"1798931\",\n \"1798971\",\n \"1798974\",\n \"1798984\",\n \"1799132\",\n \"1799135\",\n \"5113951\",\n \"5113985\",\n \"5114011\",\n \"5114021\",\n \"5114039\",\n \"5114043\",\n \"5114081\",\n \"5114083\",\n \"5114096\",\n \"5114107\",\n \"5114128\",\n \"5114151\",\n \"5114159\",\n \"9500553\",\n \"1799433\",\n \"1799675\",\n \"1799680\",\n \"1799695\",\n \"1799701\",\n \"9368026\",\n \"9593098\",\n \"1799774\",\n \"9388726\",\n \"9571514\",\n \"1799799\",\n \"1799870\",\n \"1799877\",\n \"1799880\",\n \"1799884\",\n \"1799894\",\n \"1799900\",\n \"1799901\",\n \"1799911\",\n \"1799917\",\n \"1799925\",\n \"1799938\",\n \"1799944\",\n \"1799956\",\n \"1799957\",\n \"1799958\",\n \"1799967\",\n \"1799977\",\n \"1800004\",\n \"1800017\",\n \"1800024\",\n \"1800028\",\n \"1800032\",\n \"10446574\",\n \"1800149\",\n \"9536457\",\n \"1802776\",\n \"9496311\",\n \"6097260\",\n \"8729319\",\n \"7712384\",\n \"7981386\",\n \"8304206\",\n \"8742426\",\n \"9069966\",\n \"4301068\",\n \"4534389\",\n \"4534207\",\n \"10638451\",\n \"4301282\",\n \"4301283\",\n \"4301306\",\n \"4301307\",\n \"8751100\",\n \"9395261\",\n \"9564779\",\n \"4532273\",\n \"4532283\",\n \"4532811\",\n \"12103087\",\n \"4534663\",\n \"4534669\",\n \"7558165\",\n \"8050639\",\n \"8440999\",\n \"8551997\",\n \"8562506\",\n \"8647523\",\n \"8761810\",\n \"8781370\",\n \"8998296\",\n \"9042018\",\n \"9163659\",\n \"9241105\",\n \"9247947\",\n \"9255102\",\n \"9261458\",\n \"9281907\",\n \"9288185\",\n \"9291297\",\n \"9362785\",\n \"9373309\",\n \"9390293\",\n \"9424681\",\n \"9452702\",\n \"9474256\",\n \"9481002\",\n \"9484411\",\n \"9485070\",\n \"9488551\",\n \"9530271\",\n \"9530928\",\n \"9533506\",\n \"9534429\",\n \"9544558\",\n \"9545480\",\n \"9552253\",\n \"9573163\",\n \"9577379\",\n \"9590907\",\n \"9591877\",\n \"9594509\",\n \"9595155\",\n \"9602019\",\n \"9634575\",\n \"4533273\",\n \"4534540\",\n \"11922580\",\n \"8890502\",\n \"9135821\",\n \"4534038\",\n \"4533202\",\n \"4534398\",\n \"9406822\",\n \"9432810\",\n \"6544687\",\n \"4534538\",\n \"4534360\",\n \"4532269\",\n \"4533123\",\n \"4533125\",\n \"4533128\",\n \"4533136\",\n \"4533661\",\n \"4533663\",\n \"4533671\",\n \"4534408\",\n \"4534458\",\n \"4534533\",\n \"9248830\",\n \"9363692\",\n \"9556427\",\n \"9597741\",\n \"9503548\",\n \"6116341\",\n \"6116368\",\n \"9415435\",\n \"9424082\",\n \"9610447\",\n \"10659737\",\n \"6132989\",\n \"6132762\",\n \"7589577\",\n \"7779226\",\n \"8818378\",\n \"8928353\",\n \"9538684\",\n \"9486411\",\n \"6133075\",\n \"7717385\",\n \"8424964\",\n \"9511749\",\n \"10378302\",\n \"9890366\",\n \"9910243\",\n \"5883985\",\n \"6132781\",\n \"10967713\",\n \"11054256\",\n \"10118643\",\n \"9875111\",\n \"9342344\",\n \"8021109\",\n \"9496896\",\n \"9629365\",\n \"11478679\",\n \"9478331\",\n \"10121804\",\n \"11311045\",\n \"5108640\",\n \"5110377\",\n \"5110644\",\n \"7654770\",\n \"6116899\",\n \"6132797\",\n \"1774283\",\n \"1774285\",\n \"1779334\",\n \"5114189\",\n \"5114192\",\n \"5114198\",\n \"11452421\",\n \"11466090\",\n \"11470672\",\n \"11590674\",\n \"11615055\",\n \"11619030\",\n \"11626773\",\n \"11627464\",\n \"11660145\",\n \"11713256\",\n \"11749278\",\n \"11753804\",\n \"11781300\",\n \"11859640\",\n \"11887065\",\n \"1763072\",\n \"5109259\",\n \"5109270\",\n \"5109299\",\n \"5109345\",\n \"5109349\",\n \"5109369\",\n \"5109385\",\n \"5109407\",\n \"5109413\",\n \"5109418\",\n \"5109437\",\n \"5772063\",\n \"8755207\",\n \"8943174\",\n \"9038042\",\n \"9307254\",\n \"9334639\",\n \"9387782\",\n \"9404919\",\n \"9506719\",\n \"5112130\",\n \"5112131\",\n \"8491927\",\n \"4534675\",\n \"4534681\",\n \"4534683\",\n \"4534685\",\n \"4534686\",\n \"4688142\",\n \"6116440\",\n \"9244066\",\n \"9551316\",\n \"7398419\",\n \"1792555\",\n \"1792560\",\n \"1792564\",\n \"8108800\",\n \"1800130\",\n \"1800140\",\n \"1771634\",\n \"1771650\",\n \"1771675\",\n \"1771678\",\n \"1771698\",\n \"8581601\",\n \"9549172\",\n \"9623131\",\n \"1774929\",\n \"1770772\",\n \"1770773\",\n \"1770821\",\n \"1770828\",\n \"1770849\",\n \"1770869\",\n \"1770880\",\n \"1770918\",\n \"1770955\",\n \"1771019\",\n \"1771040\",\n \"1771055\",\n \"1771067\",\n \"1771143\",\n \"1771169\",\n \"1771203\",\n \"1771204\",\n \"1771214\",\n \"1771245\",\n \"1771296\",\n \"1771308\",\n \"4533695\",\n \"4533714\",\n \"4533720\",\n \"6132931\",\n \"7940536\",\n \"1765751\",\n \"1765752\",\n \"10841562\",\n \"5113847\",\n \"5113853\",\n \"5772309\",\n \"5108660\",\n \"5108665\",\n \"5108670\",\n \"5108671\",\n \"5108705\",\n \"5108724\",\n \"5108737\",\n \"5108752\",\n \"5108761\",\n \"5108787\",\n \"5108794\",\n \"5108796\",\n \"5734817\",\n \"6132880\",\n \"9243764\",\n \"9374637\",\n \"9586329\",\n \"1768196\",\n \"1768199\",\n \"1768201\",\n \"11783188\",\n \"4534525\",\n \"1773901\",\n \"1773904\",\n \"1759351\",\n \"1759394\",\n \"1789512\",\n \"1789530\",\n \"4533344\",\n \"4533345\",\n \"4533347\",\n \"4533360\",\n \"4533362\",\n \"9490756\",\n \"10370112\",\n \"10933525\",\n \"5110282\",\n \"11437060\",\n \"11566649\",\n \"11615549\",\n \"11714235\",\n \"11731155\",\n \"11819666\",\n \"1797793\",\n \"1797864\",\n \"1797903\",\n \"1797942\",\n \"1797965\",\n \"4532203\",\n \"4532206\",\n \"4532208\",\n \"4532216\",\n \"4532236\",\n \"4532239\",\n \"4532253\",\n \"4532260\",\n \"4532264\",\n \"4532266\",\n \"6115772\",\n \"6115793\",\n \"6115820\",\n \"6115822\",\n \"6115830\",\n \"8103163\",\n \"9893740\",\n \"1782249\",\n \"1782267\",\n \"1782273\",\n \"1782277\",\n \"1782279\",\n \"1782289\",\n \"1781248\",\n \"10063383\",\n \"1767259\",\n \"1767293\",\n \"1767302\",\n \"1792814\",\n \"8363507\",\n \"11501104\",\n \"9325654\",\n \"1776094\",\n \"9354669\",\n \"10458175\",\n \"10683012\",\n \"10702885\",\n \"10658576\",\n \"10714961\",\n \"10867462\",\n \"1822257\",\n \"1822346\",\n \"9253819\",\n \"9517291\",\n \"9561820\",\n \"1822487\",\n \"1822490\",\n \"1822493\",\n \"11562243\",\n \"1822587\",\n \"1822610\",\n \"1822613\",\n \"5118459\",\n \"5118474\",\n \"5118509\",\n \"5118524\",\n \"1822667\",\n \"9778438\",\n \"1822784\",\n \"1822787\",\n \"1822788\",\n \"1822796\",\n \"1822805\",\n \"1822819\",\n \"1822830\",\n \"1822848\",\n \"1822852\",\n \"1822916\",\n \"1822917\",\n \"1823294\",\n \"1823444\",\n \"6133742\",\n \"1823493\",\n \"1823573\",\n \"5118565\",\n \"1823604\",\n \"7346263\",\n \"1823637\",\n \"6133720\",\n \"1823706\",\n \"10996761\",\n \"1823726\",\n \"5118582\",\n \"1824080\",\n \"1824113\",\n \"1824117\",\n \"1824121\",\n \"1824131\",\n \"1824189\",\n \"1824242\",\n \"5734235\",\n \"6133692\",\n \"7875265\",\n \"5118798\",\n \"1824259\",\n \"1824280\",\n \"1824330\",\n \"1824338\",\n \"1824354\",\n \"1824390\",\n \"1824442\",\n \"1824449\",\n \"1824571\",\n \"1824666\",\n \"1824751\",\n \"1824766\",\n \"1826020\",\n \"1824845\",\n \"5118828\",\n \"1824997\",\n \"1825064\",\n \"5118859\",\n \"1825077\",\n \"1825082\",\n \"1825083\",\n \"4534909\",\n \"4534914\",\n \"9426054\",\n \"1825156\",\n \"1825176\",\n \"4534826\",\n \"1825218\",\n \"1825238\",\n \"1825336\",\n \"7346284\",\n \"1825373\",\n \"1825391\",\n \"1825428\",\n \"1825430\",\n \"5118892\",\n \"5118904\",\n \"7624468\",\n \"7937573\",\n \"8397564\",\n \"1825539\",\n \"5118934\",\n \"5118944\",\n \"5118949\",\n \"5118974\",\n \"5118978\",\n \"1825786\",\n \"7345777\",\n \"1825920\",\n \"1825950\",\n \"1825956\",\n \"1825967\",\n \"1825971\",\n \"1825983\",\n \"1826017\",\n \"1826022\",\n \"1826033\",\n \"1826048\",\n \"1826058\",\n \"1826084\",\n \"1826108\",\n \"1826129\",\n \"1826156\",\n \"1826163\",\n \"1826164\",\n \"1826167\",\n \"1826169\",\n \"1826172\",\n \"1826173\",\n \"1826175\",\n \"1826181\",\n \"11322712\",\n \"5118996\",\n \"5119000\",\n \"6133700\",\n \"1826222\",\n \"10510959\",\n \"11059353\",\n \"6133750\",\n \"5119009\",\n \"5119011\",\n \"5119013\",\n \"5119016\",\n \"5119026\",\n \"5119039\",\n \"5119046\",\n \"5119050\",\n \"10115073\",\n \"1826772\",\n \"9807789\",\n \"1826823\",\n \"1827103\",\n \"1827112\",\n \"1827113\",\n \"1827125\",\n \"1827132\",\n \"1827133\",\n \"1827145\",\n \"1827161\",\n \"5119143\",\n \"1827349\",\n \"1827408\",\n \"1827414\",\n \"1827429\",\n \"1827484\",\n \"1827507\",\n \"4534869\",\n \"6133691\",\n \"9883140\",\n \"5119181\",\n \"5119183\",\n \"5119193\",\n \"5119211\",\n \"5119223\",\n \"5119239\",\n \"5119245\",\n \"1827645\",\n \"1827649\",\n \"1827650\",\n \"1827687\",\n \"1827711\",\n \"1827716\",\n \"1827775\",\n \"11905965\",\n \"1827802\",\n \"1827810\",\n \"1827826\",\n \"1827829\",\n \"1828105\",\n \"11435704\",\n \"1828162\",\n \"1828180\",\n \"4534872\",\n \"1828268\",\n \"6201790\",\n \"10194663\",\n \"10551923\",\n \"9454052\",\n \"7346286\",\n \"9255512\",\n \"6133680\",\n \"6133681\",\n \"6133684\",\n \"6133687\",\n \"6133688\",\n \"7346276\",\n \"9921001\",\n \"5118837\",\n \"5118841\",\n \"7346271\",\n \"7346273\",\n \"9486293\",\n \"1822502\",\n \"10043566\",\n \"10266782\",\n \"1896863\",\n \"1903598\",\n \"1892915\",\n \"1908317\",\n \"1908337\",\n \"1908339\",\n \"10023821\",\n \"1892509\",\n \"1892544\",\n \"1892554\",\n \"1892555\",\n \"1892621\",\n \"1892634\",\n \"11688586\",\n \"5127748\",\n \"5806166\",\n \"10587253\",\n \"1892729\",\n \"1892736\",\n \"1892742\",\n \"1892746\",\n \"1892759\",\n \"1892761\",\n \"1892770\",\n \"4299095\",\n \"8941801\",\n \"1892811\",\n \"1892814\",\n \"11464595\",\n \"1892821\",\n \"1892837\",\n \"1892851\",\n \"1892855\",\n \"1892856\",\n \"1892858\",\n \"1892863\",\n \"5127805\",\n \"5127814\",\n \"5127822\",\n \"1892944\",\n \"5127835\",\n \"5127867\",\n \"5127893\",\n \"5127916\",\n \"5127932\",\n \"5127955\",\n \"5127971\",\n \"5127992\",\n \"5127998\",\n \"7346346\",\n \"9963153\",\n \"1893137\",\n \"1893177\",\n \"1893204\",\n \"1893241\",\n \"1893266\",\n \"5792081\",\n \"5128005\",\n \"5128007\",\n \"5128011\",\n \"5128034\",\n \"1893329\",\n \"1893337\",\n \"1893341\",\n \"1893377\",\n \"1893381\",\n \"1893480\",\n \"9113409\",\n \"10055104\",\n \"10477747\",\n \"12106975\",\n \"1893526\",\n \"1893538\",\n \"1893546\",\n \"1893551\",\n \"1893558\",\n \"1893562\",\n \"1893612\",\n \"1893645\",\n \"1893660\",\n \"1893663\",\n \"1893699\",\n \"1893787\",\n \"1893793\",\n \"1893901\",\n \"1893921\",\n \"1893923\",\n \"1893951\",\n \"4704279\",\n \"8832485\",\n \"8982591\",\n \"9136904\",\n \"10333787\",\n \"1893989\",\n \"1893993\",\n \"1893998\",\n \"1894002\",\n \"1894012\",\n \"1894054\",\n \"1894057\",\n \"1894060\",\n \"10653980\",\n \"1894074\",\n \"1894076\",\n \"1894082\",\n \"1894085\",\n \"1894087\",\n \"1894088\",\n \"1894102\",\n \"1894164\",\n \"1894268\",\n \"1894293\",\n \"1894298\",\n \"5882039\",\n \"1894329\",\n \"1894342\",\n \"1894349\",\n \"5128161\",\n \"5128169\",\n \"5128182\",\n \"7712938\",\n \"10398658\",\n \"1894714\",\n \"4535614\",\n \"4535627\",\n \"4535630\",\n \"4535632\",\n \"4535636\",\n \"8049830\",\n \"10639484\",\n \"1894840\",\n \"1894896\",\n \"4535827\",\n \"10412261\",\n \"1895037\",\n \"1895138\",\n \"4535809\",\n \"4535817\",\n \"4535819\",\n \"9519321\",\n \"5128224\",\n \"5128225\",\n \"1895159\",\n \"1895176\",\n \"1895185\",\n \"1895203\",\n \"1895250\",\n \"5128232\",\n \"5128250\",\n \"5128266\",\n \"5128323\",\n \"5128326\",\n \"5128353\",\n \"5128357\",\n \"5128363\",\n \"5128380\",\n \"6231906\",\n \"9804158\",\n \"1895448\",\n \"1895499\",\n \"1895527\",\n \"1895609\",\n \"1895667\",\n \"1895670\",\n \"1895709\",\n \"9192882\",\n \"1895733\",\n \"1895745\",\n \"1895768\",\n \"1895773\",\n \"1895789\",\n \"1895809\",\n \"1895818\",\n \"1895820\",\n \"1895829\",\n \"8763986\",\n \"9016382\",\n \"1895838\",\n \"1895867\",\n \"1895875\",\n \"1895886\",\n \"1895904\",\n \"1895956\",\n \"1895984\",\n \"1895992\",\n \"1896061\",\n \"1896063\",\n \"1896073\",\n \"1896087\",\n \"1896105\",\n \"1896126\",\n \"1896141\",\n \"1896142\",\n \"1896152\",\n \"5128398\",\n \"5128423\",\n \"5128432\",\n \"5128433\",\n \"5128438\",\n \"5128446\",\n \"5128475\",\n \"5128488\",\n \"5128491\",\n \"9981187\",\n \"1896304\",\n \"1896316\",\n \"1896547\",\n \"1896600\",\n \"1896603\",\n \"1896614\",\n \"1896628\",\n \"10465059\",\n \"1896658\",\n \"1896749\",\n \"1896754\",\n \"10353400\",\n \"1896756\",\n \"1896763\",\n \"1896774\",\n \"5128519\",\n \"1896841\",\n \"1896876\",\n \"5128545\",\n \"9361954\",\n \"1896915\",\n \"1896922\",\n \"1896932\",\n \"5129251\",\n \"9590057\",\n \"11701883\",\n \"5129257\",\n \"5925238\",\n \"8367663\",\n \"1897664\",\n \"1897677\",\n \"1897685\",\n \"1897692\",\n \"1897722\",\n \"1897747\",\n \"1897770\",\n \"5129266\",\n \"1897808\",\n \"1897814\",\n \"1897817\",\n \"1897834\",\n \"1897852\",\n \"1897873\",\n \"1897904\",\n \"1897946\",\n \"1897965\",\n \"1897970\",\n \"1897972\",\n \"1897977\",\n \"1897980\",\n \"1897985\",\n \"1897990\",\n \"1898002\",\n \"1898017\",\n \"10073321\",\n \"10365587\",\n \"10375186\",\n \"10401396\",\n \"1898077\",\n \"1898133\",\n \"1898143\",\n \"1898174\",\n \"1898200\",\n \"1898203\",\n \"10383968\",\n \"1898234\",\n \"10321900\",\n \"1898250\",\n \"10114575\",\n \"10208801\",\n \"10265559\",\n \"1898286\",\n \"1898290\",\n \"4299368\",\n \"4299370\",\n \"5129293\",\n \"5714367\",\n \"5714369\",\n \"5806175\",\n \"5806176\",\n \"5806177\",\n \"7346344\",\n \"8961830\",\n \"9396180\",\n \"9563837\",\n \"1898348\",\n \"1898350\",\n \"1898352\",\n \"1898358\",\n \"1898367\",\n \"1898368\",\n \"1898370\",\n \"1898374\",\n \"1898391\",\n \"1898402\",\n \"1898414\",\n \"1898416\",\n \"1898424\",\n \"1898431\",\n \"1898434\",\n \"1898441\",\n \"1898521\",\n \"1898544\",\n \"5129374\",\n \"5129378\",\n \"5129387\",\n \"5129405\",\n \"5129417\",\n \"5129430\",\n \"5129432\",\n \"5129451\",\n \"5714356\",\n \"5714361\",\n \"6228464\",\n \"5129473\",\n \"5129479\",\n \"5129480\",\n \"5129481\",\n \"5129489\",\n \"5129496\",\n \"5129502\",\n \"5129515\",\n \"5129517\",\n \"5129520\",\n \"5129524\",\n \"5129531\",\n \"5129535\",\n \"9208233\",\n \"9255328\",\n \"5129544\",\n \"1898686\",\n \"1898789\",\n \"1898841\",\n \"1898848\",\n \"1898858\",\n \"1898865\",\n \"1898946\",\n \"1898958\",\n \"1898970\",\n \"1898988\",\n \"1899048\",\n \"5129636\",\n \"1899071\",\n \"1899144\",\n \"1899164\",\n \"1899187\",\n \"1899198\",\n \"4299211\",\n \"4299213\",\n \"10474236\",\n \"1899835\",\n \"1899873\",\n \"1899893\",\n \"4704400\",\n \"4704401\",\n \"4704404\",\n \"4704407\",\n \"1899922\",\n \"9028122\",\n \"9446281\",\n \"1899931\",\n \"1899932\",\n \"1899940\",\n \"1899943\",\n \"1899947\",\n \"1899950\",\n \"1899956\",\n \"1899989\",\n \"8445010\",\n \"1899994\",\n \"1900014\",\n \"1900024\",\n \"1900026\",\n \"8847500\",\n \"9208918\",\n \"9925669\",\n \"1900053\",\n \"1900055\",\n \"1900093\",\n \"1900112\",\n \"1900121\",\n \"1900131\",\n \"1900134\",\n \"1900172\",\n \"1900175\",\n \"1900195\",\n \"1900197\",\n \"1900199\",\n \"1900233\",\n \"1900249\",\n \"1900295\",\n \"1900303\",\n \"1900345\",\n \"1900408\",\n \"1900485\",\n \"1900523\",\n \"1900565\",\n \"1900578\",\n \"1900618\",\n \"1900626\",\n \"1900632\",\n \"1900768\",\n \"1900787\",\n \"1900825\",\n \"1900830\",\n \"1900872\",\n \"9190731\",\n \"1900890\",\n \"1900897\",\n \"1900918\",\n \"1900939\",\n \"9392084\",\n \"11701991\",\n \"1901001\",\n \"1901153\",\n \"1901189\",\n \"9072828\",\n \"1901213\",\n \"1901257\",\n \"1901261\",\n \"1901268\",\n \"8247566\",\n \"5130277\",\n \"5130296\",\n \"1901372\",\n \"1901399\",\n \"1901404\",\n \"1901411\",\n \"1901427\",\n \"1901428\",\n \"1901429\",\n \"1901435\",\n \"1901463\",\n \"5130314\",\n \"5130322\",\n \"5130326\",\n \"5130330\",\n \"1901533\",\n \"1901580\",\n \"1901669\",\n \"1901735\",\n \"1901744\",\n \"1901781\",\n \"1901782\",\n \"1901794\",\n \"1901801\",\n \"1901804\",\n \"1901810\",\n \"1901832\",\n \"1901850\",\n \"11135155\",\n \"11219489\",\n \"11546465\",\n \"11623814\",\n \"11726907\",\n \"11832697\",\n \"11841763\",\n \"12258652\",\n \"5130335\",\n \"5130347\",\n \"5130369\",\n \"5130392\",\n \"5130393\",\n \"5130396\",\n \"5130400\",\n \"5130439\",\n \"5130444\",\n \"5130448\",\n \"5130456\",\n \"5130464\",\n \"5130467\",\n \"5130471\",\n \"5130476\",\n \"5130487\",\n \"5130502\",\n \"5130514\",\n \"5130521\",\n \"5130528\",\n \"5130542\",\n \"5130548\",\n \"9357385\",\n \"1902106\",\n \"1902108\",\n \"1902110\",\n \"1902111\",\n \"1902114\",\n \"1902117\",\n \"1902118\",\n \"1902211\",\n \"1902233\",\n \"1902244\",\n \"1902248\",\n \"1902300\",\n \"1902346\",\n \"1902378\",\n \"1902384\",\n \"1902388\",\n \"1902406\",\n \"1902410\",\n \"1902430\",\n \"1902451\",\n \"1902458\",\n \"1902479\",\n \"1902502\",\n \"1902533\",\n \"1902543\",\n \"1902560\",\n \"1902568\",\n \"1902572\",\n \"1902586\",\n \"5130559\",\n \"1902615\",\n \"1902620\",\n \"1902623\",\n \"1902642\",\n \"1902660\",\n \"1902670\",\n \"1902676\",\n \"1902680\",\n \"1902692\",\n \"1902699\",\n \"1902702\",\n \"1902703\",\n \"1902704\",\n \"4299218\",\n \"1902749\",\n \"8140883\",\n \"8189761\",\n \"10512675\",\n \"4535689\",\n \"1902814\",\n \"1902880\",\n \"1902882\",\n \"1902885\",\n \"5130562\",\n \"5130574\",\n \"1903009\",\n \"1903028\",\n \"10394962\",\n \"10577473\",\n \"5130748\",\n \"5130775\",\n \"5130813\",\n \"5130814\",\n \"5130851\",\n \"5130904\",\n \"5130908\",\n \"5130944\",\n \"5130971\",\n \"5131058\",\n \"9968404\",\n \"9999965\",\n \"1903607\",\n \"1903634\",\n \"1903636\",\n \"1903646\",\n \"10114865\",\n \"1903658\",\n \"1903661\",\n \"1903683\",\n \"1904206\",\n \"1904272\",\n \"1904281\",\n \"1904282\",\n \"1904283\",\n \"5131597\",\n \"5131608\",\n \"5131637\",\n \"1904382\",\n \"7776011\",\n \"1904701\",\n \"1904719\",\n \"1904728\",\n \"1904760\",\n \"1904764\",\n \"1904798\",\n \"5131951\",\n \"1904884\",\n \"1904887\",\n \"1904888\",\n \"1904916\",\n \"1904921\",\n \"1904922\",\n \"1904932\",\n \"1904938\",\n \"1904943\",\n \"1904948\",\n \"1904996\",\n \"1905079\",\n \"1905142\",\n \"1905161\",\n \"1905162\",\n \"1905172\",\n \"1905187\",\n \"1905189\",\n \"1905242\",\n \"1905257\",\n \"1905267\",\n \"1905281\",\n \"1905297\",\n \"1905299\",\n \"1905301\",\n \"1905310\",\n \"1905317\",\n \"6221746\",\n \"1905321\",\n \"10312760\",\n \"10615631\",\n \"1905383\",\n \"1905396\",\n \"1905451\",\n \"1906006\",\n \"1906014\",\n \"1906030\",\n \"1906063\",\n \"1906117\",\n \"5132523\",\n \"5132529\",\n \"5132540\",\n \"5132545\",\n \"5132550\",\n \"5132591\",\n \"5132713\",\n \"1906552\",\n \"8208583\",\n \"1906604\",\n \"1906621\",\n \"1906679\",\n \"1906715\",\n \"1907153\",\n \"1907190\",\n \"1907235\",\n \"1907250\",\n \"1907272\",\n \"10569879\",\n \"11378273\",\n \"5132839\",\n \"1907395\",\n \"1907399\",\n \"1907430\",\n \"1907432\",\n \"1907436\",\n \"1907475\",\n \"1907498\",\n \"1907511\",\n \"1907534\",\n \"1907541\",\n \"1907547\",\n \"1907569\",\n \"1907576\",\n \"1907580\",\n \"1907620\",\n \"1907625\",\n \"1907637\",\n \"1907666\",\n \"1907672\",\n \"1907683\",\n \"1907687\",\n \"4535754\",\n \"5881946\",\n \"7976131\",\n \"1907727\",\n \"1908011\",\n \"1908044\",\n \"1908052\",\n \"1908055\",\n \"1908123\",\n \"1908138\",\n \"1908144\",\n \"1908146\",\n \"1908148\",\n \"1908150\",\n \"1908168\",\n \"1908174\",\n \"1908199\",\n \"1908203\",\n \"1908204\",\n \"1908207\",\n \"1908217\",\n \"1908256\",\n \"1908258\",\n \"1908262\",\n \"1908299\",\n \"1908302\",\n \"1908309\",\n \"1908352\",\n \"1908356\",\n \"1908367\",\n \"1908577\",\n \"1908660\",\n \"1908700\",\n \"1908702\",\n \"1908707\",\n \"1908713\",\n \"5133035\",\n \"1908775\",\n \"5133051\",\n \"11608942\",\n \"1908818\",\n \"1908840\",\n \"1908863\",\n \"1908871\",\n \"1908897\",\n \"1908929\",\n \"1908953\",\n \"1908962\",\n \"10542548\",\n \"1908995\",\n \"1909004\",\n \"1909019\",\n \"1909025\",\n \"1909039\",\n \"1909064\",\n \"10046510\",\n \"1909070\",\n \"1909108\",\n \"1909123\",\n \"1909128\",\n \"1909135\",\n \"1909155\",\n \"1909170\",\n \"1909185\",\n \"1909191\",\n \"1909209\",\n \"1909211\",\n \"1909213\",\n \"9851867\",\n \"1909216\",\n \"7346301\",\n \"8727750\",\n \"8978362\",\n \"1909241\",\n \"1909281\",\n \"1909319\",\n \"10656625\",\n \"12234977\",\n \"1909398\",\n \"1909436\",\n \"1909453\",\n \"1909457\",\n \"4704352\",\n \"4704356\",\n \"1909489\",\n \"1909532\",\n \"1909573\",\n \"1909607\",\n \"1909649\",\n \"1909659\",\n \"1909800\",\n \"1909810\",\n \"1909818\",\n \"1909838\",\n \"1909854\",\n \"1909865\",\n \"1909879\",\n \"1909884\",\n \"5133142\",\n \"5133251\",\n \"5133255\",\n \"5133265\",\n \"5133366\",\n \"5133451\",\n \"5133503\",\n \"5133523\",\n \"1910371\",\n \"1910378\",\n \"10558140\",\n \"5133565\",\n \"5133568\",\n \"1910706\",\n \"1910753\",\n \"6133858\",\n \"1910773\",\n \"5133581\",\n \"5133589\",\n \"1910809\",\n \"1910812\",\n \"1911076\",\n \"1911077\",\n \"1911093\",\n \"1911112\",\n \"1911122\",\n \"1911168\",\n \"1911178\",\n \"1911182\",\n \"1911198\",\n \"1911246\",\n \"1911278\",\n \"1911298\",\n \"1911300\",\n \"1911461\",\n \"1911503\",\n \"7728366\",\n \"8396242\",\n \"5133591\",\n \"5133595\",\n \"5133609\",\n \"5133610\",\n \"5133615\",\n \"5133621\",\n \"5133622\",\n \"5133623\",\n \"5133634\",\n \"5133635\",\n \"5133637\",\n \"8548427\",\n \"9086331\",\n \"9219529\",\n \"1911577\",\n \"5133687\",\n \"5133689\",\n \"1911633\",\n \"4535592\",\n \"4535596\",\n \"1911736\",\n \"1911755\",\n \"7809779\",\n \"8078362\",\n \"1911939\",\n \"12322536\",\n \"12335869\",\n \"1911966\",\n \"1912003\",\n \"1912036\",\n \"1912119\",\n \"5133693\",\n \"5133695\",\n \"10203260\",\n \"5133736\",\n \"5133786\",\n \"1912325\",\n \"1912372\",\n \"1912395\",\n \"1912428\",\n \"1912470\",\n \"4299535\",\n \"4299565\",\n \"4299576\",\n \"4299597\",\n \"4299599\",\n \"5133864\",\n \"5133920\",\n \"5133990\",\n \"5714410\",\n \"5772890\",\n \"7428726\",\n \"7799370\",\n \"8810143\",\n \"10638244\",\n \"9277330\",\n \"1912506\",\n \"8964866\",\n \"10097687\",\n \"10137350\",\n \"4535581\",\n \"5134098\",\n \"5134301\",\n \"8312017\",\n \"1913091\",\n \"1913105\",\n \"1913175\",\n \"1913178\",\n \"1913328\",\n \"1913351\",\n \"1913371\",\n \"11046092\",\n \"1908108\",\n \"5134469\",\n \"5134517\",\n \"5134543\",\n \"5134559\",\n \"5134569\",\n \"5134583\",\n \"5134607\",\n \"5134621\",\n \"5134659\",\n \"5134661\",\n \"5134667\",\n \"5134682\",\n \"5134686\",\n \"5134687\",\n \"5134693\",\n \"5134759\",\n \"5134810\",\n \"5134815\",\n \"5134837\",\n \"5134884\",\n \"5135026\",\n \"5135191\",\n \"5135355\",\n \"5714507\",\n \"5772948\",\n \"7509928\",\n \"7700512\",\n \"7738295\",\n \"7791190\",\n \"7791558\",\n \"7798382\",\n \"7940299\",\n \"8047165\",\n \"8137978\",\n \"8167638\",\n \"8214814\",\n \"8233062\",\n \"8262258\",\n \"8295666\",\n \"8298764\",\n \"8314088\",\n \"9915028\",\n \"9967126\",\n \"1914410\",\n \"1914416\",\n \"1914420\",\n \"1914421\",\n \"1914424\",\n \"1914433\",\n \"1914435\",\n \"1914439\",\n \"1914440\",\n \"1914442\",\n \"1914458\",\n \"1914464\",\n \"1914465\",\n \"1914477\",\n \"1914484\",\n \"1914496\",\n \"1914498\",\n \"1914500\",\n \"1914501\",\n \"1914511\",\n \"4299191\",\n \"4299201\",\n \"8918036\",\n \"1914693\",\n \"1914697\",\n \"1915031\",\n \"1915079\",\n \"1915080\",\n \"1915110\",\n \"1915140\",\n \"1915144\",\n \"1915154\",\n \"1915160\",\n \"1915193\",\n \"9185656\",\n \"9988287\",\n \"1915262\",\n \"1915270\",\n \"1915275\",\n \"1915325\",\n \"1915332\",\n \"8669164\",\n \"1915339\",\n \"1915368\",\n \"1915369\",\n \"1915396\",\n \"1915401\",\n \"1915415\",\n \"1915417\",\n \"1915427\",\n \"1915430\",\n \"1915456\",\n \"1915469\",\n \"1915470\",\n \"1915487\",\n \"1915492\",\n \"1915499\",\n \"1915506\",\n \"10078453\",\n \"10196441\",\n \"10487080\",\n \"11372793\",\n \"11375508\",\n \"11516142\",\n \"11535847\",\n \"11572120\",\n \"12301192\",\n \"12357826\",\n \"12358748\",\n \"1909736\",\n \"5135573\",\n \"5135643\",\n \"5135839\",\n \"5135944\",\n \"5136059\",\n \"5136113\",\n \"5136200\",\n \"5136306\",\n \"1916347\",\n \"1916352\",\n \"1916376\",\n \"1916410\",\n \"1916412\",\n \"1916458\",\n \"1916509\",\n \"1916554\",\n \"7854318\",\n \"5136372\",\n \"1916700\",\n \"1916701\",\n \"1916758\",\n \"1916772\",\n \"1916790\",\n \"5136514\",\n \"5136594\",\n \"5136681\",\n \"5136713\",\n \"5136752\",\n \"5136790\",\n \"5136866\",\n \"5136868\",\n \"5136939\",\n \"5137022\",\n \"5137085\",\n \"5137086\",\n \"5137128\",\n \"5137156\",\n \"5137166\",\n \"5137257\",\n \"5137291\",\n \"5137330\",\n \"9251096\",\n \"5137388\",\n \"1917827\",\n \"1917830\",\n \"1917834\",\n \"1917840\",\n \"1917911\",\n \"1918026\",\n \"1918076\",\n \"1918077\",\n \"1918078\",\n \"1918082\",\n \"1918086\",\n \"1918094\",\n \"1918097\",\n \"1918133\",\n \"1918149\",\n \"1918207\",\n \"1918212\",\n \"10250149\",\n \"1918220\",\n \"1918263\",\n \"1918268\",\n \"1918269\",\n \"1918280\",\n \"1918293\",\n \"1918321\",\n \"1918394\",\n \"1918395\",\n \"1918406\",\n \"1918408\",\n \"1918411\",\n \"1918416\",\n \"1918467\",\n \"1918495\",\n \"1918497\",\n \"1918509\",\n \"1918517\",\n \"1918532\",\n \"1918533\",\n \"1918547\",\n \"1918553\",\n \"1918554\",\n \"4299802\",\n \"4299804\",\n \"1918596\",\n \"1918601\",\n \"1918627\",\n \"1918632\",\n \"1918667\",\n \"1918669\",\n \"1918688\",\n \"1918694\",\n \"1918733\",\n \"1918736\",\n \"1918776\",\n \"1918789\",\n \"1918795\",\n \"1918843\",\n \"1918854\",\n \"1918859\",\n \"1918868\",\n \"4535539\",\n \"8035998\",\n \"8176911\",\n \"5137397\",\n \"5137408\",\n \"1918964\",\n \"1918968\",\n \"1918972\",\n \"1918984\",\n \"1918986\",\n \"1918988\",\n \"1919007\",\n \"1919010\",\n \"7622059\",\n \"7988274\",\n \"8404037\",\n \"5128045\",\n \"5128067\",\n \"5128118\",\n \"10059034\",\n \"10415847\",\n \"10454590\",\n \"11645316\",\n \"4535618\",\n \"4535620\",\n \"4535510\",\n \"10455658\",\n \"11573394\",\n \"10595994\",\n \"9902073\",\n \"10000384\",\n \"10043827\",\n \"11419137\",\n \"11760688\",\n \"11840957\",\n \"4704316\",\n \"5881748\",\n \"4704500\",\n \"4704501\",\n \"5130587\",\n \"5130682\",\n \"5130696\",\n \"7762841\",\n \"10376507\",\n \"10717680\",\n \"5131096\",\n \"5131142\",\n \"5131192\",\n \"5131256\",\n \"5131293\",\n \"5131339\",\n \"5131347\",\n \"5131372\",\n \"5131407\",\n \"5131442\",\n \"5131443\",\n \"5131467\",\n \"5131493\",\n \"5131495\",\n \"5131520\",\n \"5131540\",\n \"5131555\",\n \"5131565\",\n \"5131585\",\n \"5131593\",\n \"10228568\",\n \"10259880\",\n \"10277877\",\n \"10508423\",\n \"11425145\",\n \"5131982\",\n \"5132003\",\n \"5132008\",\n \"5132078\",\n \"5132079\",\n \"5132084\",\n \"5132137\",\n \"5132154\",\n \"5132183\",\n \"5132191\",\n \"5132221\",\n \"5132225\",\n \"5132238\",\n \"5132239\",\n \"5132246\",\n \"5132252\",\n \"5132254\",\n \"5132283\",\n \"5132289\",\n \"5132317\",\n \"5132346\",\n \"5132347\",\n \"5132360\",\n \"5132374\",\n \"5132398\",\n \"5132429\",\n \"5132440\",\n \"5132446\",\n \"5132461\",\n \"5132479\",\n \"5132483\",\n \"5132505\",\n \"5714312\",\n \"5714333\",\n \"7346328\",\n \"7346335\",\n \"8001799\",\n \"9541133\",\n \"5133088\",\n \"5714299\",\n \"5714302\",\n \"5806167\",\n \"5881397\",\n \"5881400\",\n \"6100725\",\n \"6100726\",\n \"7642610\",\n \"5135513\",\n \"5135546\",\n \"10873137\",\n \"11525418\",\n \"1896957\",\n \"5128569\",\n \"5128587\",\n \"5128597\",\n \"5128644\",\n \"5128663\",\n \"5128825\",\n \"5128984\",\n \"5129000\",\n \"5129025\",\n \"5129091\",\n \"5129190\",\n \"9087922\",\n \"5130557\",\n \"10201273\",\n \"5131910\",\n \"5881551\",\n \"8138711\",\n \"8549720\",\n \"1910496\",\n \"1910501\",\n \"1910576\",\n \"1910628\",\n \"1910629\",\n \"1910648\",\n \"1910662\",\n \"1910663\",\n \"8643309\",\n \"1902143\",\n \"1902169\",\n \"1902175\",\n \"1902182\",\n \"1899349\",\n \"1899433\",\n \"1899737\",\n \"1899818\",\n \"5129913\",\n \"6229058\",\n \"7768674\",\n \"7867379\",\n \"7934873\",\n \"8168644\",\n \"8393082\",\n \"10265841\",\n \"10511167\",\n \"10662329\",\n \"12045866\",\n \"4299778\",\n \"5132917\",\n \"5132940\",\n \"5132956\",\n \"5132973\",\n \"5133008\",\n \"5133009\",\n \"9964857\",\n \"1914701\",\n \"1914708\",\n \"1914734\",\n \"1914749\",\n \"7346340\",\n \"9745549\",\n \"1918584\",\n \"1951370\",\n \"1951412\",\n \"1951448\",\n \"1951462\",\n \"1951492\",\n \"1951505\",\n \"1951507\",\n \"1951522\",\n \"1951529\",\n \"1951542\",\n \"1951557\",\n \"4527355\",\n \"5142842\",\n \"5142870\",\n \"1951631\",\n \"9512631\",\n \"1951649\",\n \"1951657\",\n \"1951660\",\n \"1951671\",\n \"1951675\",\n \"1951747\",\n \"9156165\",\n \"1951784\",\n \"1951791\",\n \"5734305\",\n \"1951818\",\n \"1951840\",\n \"1951844\",\n \"1951859\",\n \"1951874\",\n \"1951881\",\n \"5734326\",\n \"1951919\",\n \"1952014\",\n \"5142903\",\n \"1952032\",\n \"1952034\",\n \"1952043\",\n \"1952052\",\n \"1952062\",\n \"1952093\",\n \"1952130\",\n \"1952147\",\n \"1952175\",\n \"1952177\",\n \"1952229\",\n \"5142948\",\n \"1952281\",\n \"5143007\",\n \"5143048\",\n \"5143049\",\n \"5143076\",\n \"5143080\",\n \"1952449\",\n \"1952481\",\n \"1952532\",\n \"10782264\",\n \"1952551\",\n \"1952611\",\n \"1952685\",\n \"1952704\",\n \"1952730\",\n \"5143107\",\n \"5143116\",\n \"5143129\",\n \"5143147\",\n \"1952806\",\n \"1952812\",\n \"1952816\",\n \"1952857\",\n \"1951713\",\n \"1951725\",\n \"9502606\",\n \"5885428\",\n \"8604089\",\n \"1832819\",\n \"1832853\",\n \"1832862\",\n \"1832915\",\n \"1832927\",\n \"1832936\",\n \"1833096\",\n \"1833159\",\n \"5880257\",\n \"5880258\",\n \"6097224\",\n \"6097225\",\n \"6097228\",\n \"10045595\",\n \"1853064\",\n \"1853079\",\n \"4529248\",\n \"1853190\",\n \"5976910\",\n \"1868211\",\n \"1868334\",\n \"1868360\",\n \"1868409\",\n \"4702564\",\n \"1868499\",\n \"6544581\",\n \"10548683\",\n \"5125118\",\n \"1868470\",\n \"5141581\",\n \"5141590\",\n \"1735121\",\n \"1735168\",\n \"1735193\",\n \"1735391\",\n \"1735398\",\n \"10597291\",\n \"5102423\",\n \"5102424\",\n \"1735273\",\n \"5102432\",\n \"1941570\",\n \"1941683\",\n \"1941702\",\n \"1941713\",\n \"1941717\",\n \"1941719\",\n \"1941864\",\n \"5120465\",\n \"1843888\",\n \"1843889\",\n \"5120577\",\n \"5120668\",\n \"5120675\",\n \"5120767\",\n \"5121040\",\n \"5121046\",\n \"5121177\",\n \"5121244\",\n \"5121517\",\n \"5121613\",\n \"5121737\",\n \"8273859\",\n \"1843313\",\n \"1843326\",\n \"1843331\",\n \"1843362\",\n \"1843370\",\n \"1843379\",\n \"1842043\",\n \"1842097\",\n \"1842119\",\n \"1842124\",\n \"1842196\",\n \"5120341\",\n \"5120343\",\n \"5120357\",\n \"5120368\",\n \"5120379\",\n \"5120396\",\n \"1842446\",\n \"1842485\",\n \"1842508\",\n \"1842542\",\n \"4301036\",\n \"1842690\",\n \"1842695\",\n \"11854390\",\n \"4529738\",\n \"9755262\",\n \"5120453\",\n \"1843429\",\n \"1843444\",\n \"1843485\",\n \"1843564\",\n \"1843590\",\n \"1843602\",\n \"10327658\",\n \"10619048\",\n \"1730519\",\n \"1730543\",\n \"5101371\",\n \"5101374\",\n \"8292351\",\n \"6122527\",\n \"10304313\",\n \"10607329\",\n \"11484123\",\n \"9114044\",\n \"5101394\",\n \"1730948\",\n \"1730978\",\n \"1731097\",\n \"1731221\",\n \"1731263\",\n \"10458960\",\n \"10469497\",\n \"4525641\",\n \"11431507\",\n \"1731598\",\n \"5101527\",\n \"1731750\",\n \"1731811\",\n \"1731812\",\n \"10535684\",\n \"11563728\",\n \"11904618\",\n \"5101502\",\n \"10049887\",\n \"10134558\",\n \"10307487\",\n \"5806352\",\n \"5806353\",\n \"10450446\",\n \"10629470\",\n \"8008237\",\n \"8130866\",\n \"8402212\",\n \"1872359\",\n \"1872361\",\n \"1872368\",\n \"1878626\",\n \"6133117\",\n \"1878656\",\n \"7628188\",\n \"1878688\",\n \"1878705\",\n \"1878744\",\n \"1878751\",\n \"1878753\",\n \"1878782\",\n \"1878789\",\n \"1878798\",\n \"1878804\",\n \"1878810\",\n \"1878826\",\n \"1878837\",\n \"1878845\",\n \"1878862\",\n \"1878879\",\n \"1878895\",\n \"1878904\",\n \"1878907\",\n \"1878937\",\n \"1878939\",\n \"1878951\",\n \"1878958\",\n \"4531506\",\n \"4531517\",\n \"1879001\",\n \"1879052\",\n \"1879125\",\n \"1879141\",\n \"1879160\",\n \"1879227\",\n \"1879252\",\n \"1879253\",\n \"1879272\",\n \"1879274\",\n \"1879337\",\n \"1879339\",\n \"1879340\",\n \"1879348\",\n \"1879379\",\n \"5734212\",\n \"1879398\",\n \"1879405\",\n \"1879408\",\n \"1879413\",\n \"1879427\",\n \"10366679\",\n \"10874932\",\n \"1879443\",\n \"1879452\",\n \"5126204\",\n \"1879465\",\n \"1879471\",\n \"1879490\",\n \"5126212\",\n \"5126217\",\n \"10177508\",\n \"10851840\",\n \"10857326\",\n \"12231152\",\n \"1879534\",\n \"1879630\",\n \"1879655\",\n \"1879691\",\n \"1879703\",\n \"1879731\",\n \"1879735\",\n \"1879765\",\n \"5126229\",\n \"5126231\",\n \"5126240\",\n \"5126241\",\n \"5126259\",\n \"5126284\",\n \"5126287\",\n \"5126292\",\n \"5126315\",\n \"5126332\",\n \"5126344\",\n \"5126352\",\n \"5126357\",\n \"5126365\",\n \"5126376\",\n \"5126381\",\n \"5126396\",\n \"5126397\",\n \"5126398\",\n \"5126404\",\n \"5126434\",\n \"5126445\",\n \"5126449\",\n \"5126454\",\n \"5126458\",\n \"5802331\",\n \"5802333\",\n \"5126494\",\n \"5126517\",\n \"5126533\",\n \"10915497\",\n \"10922201\",\n \"1879939\",\n \"1879970\",\n \"1879975\",\n \"1880011\",\n \"1880013\",\n \"1880019\",\n \"1880025\",\n \"1880040\",\n \"1880044\",\n \"1880049\",\n \"1880062\",\n \"1880064\",\n \"1880078\",\n \"1880083\",\n \"1880088\",\n \"1880094\",\n \"1880104\",\n \"1880123\",\n \"1880132\",\n \"1880133\",\n \"1880138\",\n \"1880139\",\n \"1880140\",\n \"1880143\",\n \"1880156\",\n \"10489219\",\n \"5126585\",\n \"5126635\",\n \"5126637\",\n \"1880352\",\n \"1880353\",\n \"1880379\",\n \"1880381\",\n \"1880408\",\n \"1880411\",\n \"4302319\",\n \"1880439\",\n \"1880451\",\n \"1880464\",\n \"1880465\",\n \"9524458\",\n \"1880505\",\n \"10056494\",\n \"1880537\",\n \"1880623\",\n \"5126663\",\n \"6133225\",\n \"10861282\",\n \"11968849\",\n \"1880818\",\n \"1880852\",\n \"1880858\",\n \"1880865\",\n \"1880907\",\n \"1880931\",\n \"1880968\",\n \"4531643\",\n \"1880982\",\n \"1880986\",\n \"1881018\",\n \"1881019\",\n \"1881031\",\n \"1881041\",\n \"1881079\",\n \"1881089\",\n \"1881094\",\n \"1881111\",\n \"1881121\",\n \"1881122\",\n \"1881126\",\n \"1881132\",\n \"1881139\",\n \"1881147\",\n \"1881151\",\n \"1881157\",\n \"1881166\",\n \"1881170\",\n \"5126668\",\n \"9819403\",\n \"4531687\",\n \"1881208\",\n \"1881228\",\n \"1881293\",\n \"1881303\",\n \"1881320\",\n \"1881329\",\n \"1881336\",\n \"1881340\",\n \"10046436\",\n \"10348110\",\n \"10441857\",\n \"1881362\",\n \"1881393\",\n \"1881404\",\n \"1881418\",\n \"1881424\",\n \"1881485\",\n \"1881504\",\n \"1881515\",\n \"5126697\",\n \"5126718\",\n \"5126721\",\n \"5126726\",\n \"5126729\",\n \"1881603\",\n \"4531713\",\n \"10751438\",\n \"1881767\",\n \"1881822\",\n \"1881834\",\n \"4531975\",\n \"5126751\",\n \"1881917\",\n \"1881955\",\n \"1881964\",\n \"1882021\",\n \"1882089\",\n \"1882110\",\n \"1882158\",\n \"1882165\",\n \"1882190\",\n \"1882195\",\n \"1882210\",\n \"1882297\",\n \"1882215\",\n \"1882218\",\n \"5126756\",\n \"1882253\",\n \"1882266\",\n \"1882272\",\n \"1882310\",\n \"1882316\",\n \"1882355\",\n \"1882437\",\n \"1882459\",\n \"1882557\",\n \"1882729\",\n \"5126785\",\n \"5126798\",\n \"5126834\",\n \"5126843\",\n \"5126866\",\n \"5126870\",\n \"5126889\",\n \"5126892\",\n \"5126905\",\n \"5126916\",\n \"5126922\",\n \"5126946\",\n \"5126958\",\n \"5126963\",\n \"5127020\",\n \"5127024\",\n \"5127039\",\n \"5127044\",\n \"5127045\",\n \"5127054\",\n \"8325294\",\n \"1882753\",\n \"1882767\",\n \"1882771\",\n \"1882773\",\n \"1882785\",\n \"1882786\",\n \"10107015\",\n \"1882812\",\n \"1882816\",\n \"1882818\",\n \"1882819\",\n \"1882884\",\n \"1882901\",\n \"1882905\",\n \"10156181\",\n \"10191785\",\n \"10643403\",\n \"11891668\",\n \"1882927\",\n \"1882930\",\n \"1882941\",\n \"1882958\",\n \"1882959\",\n \"1882960\",\n \"1882965\",\n \"1882977\",\n \"1882979\",\n \"8725248\",\n \"1883020\",\n \"10464411\",\n \"1883024\",\n \"1883028\",\n \"1883038\",\n \"1883067\",\n \"10807787\",\n \"1883124\",\n \"8981028\",\n \"1883161\",\n \"1883168\",\n \"4687288\",\n \"1883386\",\n \"1883394\",\n \"1883458\",\n \"5127089\",\n \"5127090\",\n \"5127094\",\n \"5127097\",\n \"5127107\",\n \"5127116\",\n \"5127118\",\n \"5127130\",\n \"5127132\",\n \"1883634\",\n \"10069243\",\n \"1883775\",\n \"1883829\",\n \"1883873\",\n \"1883881\",\n \"1883897\",\n \"1883943\",\n \"1883951\",\n \"1883968\",\n \"1883975\",\n \"8324720\",\n \"9864281\",\n \"1883993\",\n \"1884001\",\n \"1884051\",\n \"1884061\",\n \"4531690\",\n \"1884212\",\n \"1884213\",\n \"4531708\",\n \"1884228\",\n \"1884229\",\n \"9294363\",\n \"10171108\",\n \"10209845\",\n \"1884428\",\n \"1884434\",\n \"1884435\",\n \"1884437\",\n \"1884439\",\n \"1884449\",\n \"1884453\",\n \"1884461\",\n \"1884464\",\n \"1884465\",\n \"1884479\",\n \"9837762\",\n \"1884503\",\n \"1884531\",\n \"1884539\",\n \"1884595\",\n \"1884607\",\n \"1884610\",\n \"4687228\",\n \"1884671\",\n \"6120980\",\n \"1884685\",\n \"9308930\",\n \"1884703\",\n \"1884774\",\n \"1884790\",\n \"1884816\",\n \"1884835\",\n \"1884844\",\n \"1884858\",\n \"1884877\",\n \"1884890\",\n \"4532122\",\n \"1884908\",\n \"1884909\",\n \"4532146\",\n \"1884923\",\n \"1884936\",\n \"1884970\",\n \"1884997\",\n \"1885001\",\n \"1885012\",\n \"1885024\",\n \"1885099\",\n \"1885158\",\n \"1885202\",\n \"1885229\",\n \"1885262\",\n \"1885263\",\n \"1885569\",\n \"1885572\",\n \"1885605\",\n \"1885623\",\n \"1885630\",\n \"6133181\",\n \"6133182\",\n \"9957790\",\n \"1885642\",\n \"1885702\",\n \"5127170\",\n \"1885745\",\n \"1885763\",\n \"1885764\",\n \"6120861\",\n \"1885826\",\n \"1885836\",\n \"1885919\",\n \"1885931\",\n \"1885937\",\n \"1885945\",\n \"1885950\",\n \"1885994\",\n \"1886015\",\n \"1886084\",\n \"1886088\",\n \"1886104\",\n \"1886241\",\n \"1886251\",\n \"1886262\",\n \"5127203\",\n \"1886292\",\n \"1886320\",\n \"1886362\",\n \"8223165\",\n \"1886378\",\n \"1886398\",\n \"1886400\",\n \"1886419\",\n \"4302333\",\n \"5127209\",\n \"1886490\",\n \"1886501\",\n \"1886526\",\n \"1886579\",\n \"1886583\",\n \"1886587\",\n \"1886648\",\n \"1886650\",\n \"1886700\",\n \"10610809\",\n \"1886720\",\n \"1886726\",\n \"1886729\",\n \"10510138\",\n \"7562564\",\n \"1886868\",\n \"1886906\",\n \"1886929\",\n \"1886935\",\n \"5127222\",\n \"1886951\",\n \"10613467\",\n \"1887004\",\n \"1887024\",\n \"1887031\",\n \"1887036\",\n \"1887052\",\n \"1887054\",\n \"1887285\",\n \"1887290\",\n \"1887309\",\n \"1887341\",\n \"1887459\",\n \"1887462\",\n \"10437872\",\n \"5127325\",\n \"5127335\",\n \"5127336\",\n \"5127337\",\n \"5127339\",\n \"5127350\",\n \"5127353\",\n \"5127354\",\n \"5127355\",\n \"5127357\",\n \"1887509\",\n \"1887565\",\n \"1887580\",\n \"1887585\",\n \"1887586\",\n \"8955839\",\n \"1887634\",\n \"4531670\",\n \"1887686\",\n \"1887691\",\n \"1887694\",\n \"1887701\",\n \"1887894\",\n \"1888009\",\n \"1888027\",\n \"1888040\",\n \"1888047\",\n \"1888092\",\n \"1888123\",\n \"4531968\",\n \"1888292\",\n \"1888306\",\n \"1888307\",\n \"1888324\",\n \"1888336\",\n \"1888338\",\n \"1888346\",\n \"1888410\",\n \"1888435\",\n \"10922411\",\n \"1888463\",\n \"1888484\",\n \"1888491\",\n \"1888537\",\n \"5127378\",\n \"5127380\",\n \"1888579\",\n \"5127394\",\n \"1888619\",\n \"1888623\",\n \"1888646\",\n \"1888695\",\n \"1888733\",\n \"1888736\",\n \"1888743\",\n \"1888759\",\n \"1888823\",\n \"1888826\",\n \"1888891\",\n \"1888893\",\n \"1888906\",\n \"1888911\",\n \"1888913\",\n \"1888915\",\n \"1888926\",\n \"9535420\",\n \"12106417\",\n \"1888946\",\n \"1888955\",\n \"1888958\",\n \"1889028\",\n \"1889039\",\n \"1889043\",\n \"1889050\",\n \"1889053\",\n \"1889071\",\n \"1889074\",\n \"1889239\",\n \"1889242\",\n \"1889249\",\n \"1889267\",\n \"1889270\",\n \"1889272\",\n \"1889277\",\n \"1889287\",\n \"1889327\",\n \"1889356\",\n \"1889358\",\n \"1889370\",\n \"1889381\",\n \"1889531\",\n \"1889536\",\n \"1889543\",\n \"1889552\",\n \"1889563\",\n \"9228024\",\n \"1889905\",\n \"1889939\",\n \"1889942\",\n \"1890012\",\n \"1890031\",\n \"5127521\",\n \"1890089\",\n \"1890097\",\n \"1890187\",\n \"1890247\",\n \"10058481\",\n \"9519191\",\n \"11044778\",\n \"1890287\",\n \"1890320\",\n \"1890335\",\n \"1890343\",\n \"7543006\",\n \"1890346\",\n \"5127530\",\n \"1890368\",\n \"10180624\",\n \"1890374\",\n \"1890404\",\n \"1890410\",\n \"1890417\",\n \"1890487\",\n \"1890491\",\n \"1890508\",\n \"1890512\",\n \"1890520\",\n \"1890522\",\n \"1890534\",\n \"1890540\",\n \"1890560\",\n \"1890576\",\n \"1890599\",\n \"1890622\",\n \"1890629\",\n \"1890654\",\n \"1890656\",\n \"1890670\",\n \"1890679\",\n \"1890699\",\n \"1890701\",\n \"1890703\",\n \"1890724\",\n \"1890730\",\n \"1890737\",\n \"1890772\",\n \"1890776\",\n \"1890783\",\n \"1890794\",\n \"1890800\",\n \"1890802\",\n \"1890823\",\n \"1890854\",\n \"1890876\",\n \"1890885\",\n \"1890898\",\n \"1890917\",\n \"1890934\",\n \"1890936\",\n \"1890957\",\n \"1890975\",\n \"1891013\",\n \"6207059\",\n \"7431428\",\n \"1891035\",\n \"10034831\",\n \"1891048\",\n \"1891059\",\n \"1891074\",\n \"1891129\",\n \"1891167\",\n \"1891171\",\n \"1891177\",\n \"1891186\",\n \"1891190\",\n \"1891217\",\n \"1891236\",\n \"1891299\",\n \"10071588\",\n \"1891308\",\n \"1891326\",\n \"1891339\",\n \"1891366\",\n \"1891386\",\n \"1891426\",\n \"1891438\",\n \"1891453\",\n \"1891473\",\n \"1891484\",\n \"1891488\",\n \"1891493\",\n \"1891494\",\n \"4532022\",\n \"4532024\",\n \"8411753\",\n \"1891533\",\n \"1891583\",\n \"10310835\",\n \"1891636\",\n \"1891755\",\n \"1891758\",\n \"1891889\",\n \"9884308\",\n \"1891932\",\n \"1891936\",\n \"8986756\",\n \"1892131\",\n \"1892153\",\n \"1892193\",\n \"1892230\",\n \"1892242\",\n \"1892245\",\n \"1892301\",\n \"1892302\",\n \"1892311\",\n \"1892320\",\n \"1892355\",\n \"1892420\",\n \"1892427\",\n \"1892433\",\n \"9059564\",\n \"10072800\",\n \"1892456\",\n \"1892458\",\n \"1892462\",\n \"1892476\",\n \"1892477\",\n \"1892488\",\n \"10141437\",\n \"11056379\",\n \"9674732\",\n \"1884240\",\n \"1884254\",\n \"1884255\",\n \"1884273\",\n \"1884274\",\n \"1884280\",\n \"1884312\",\n \"1884326\",\n \"1884332\",\n \"1884337\",\n \"1884365\",\n \"1884370\",\n \"1884403\",\n \"10179389\",\n \"10259280\",\n \"10330376\",\n \"10446295\",\n \"10482025\",\n \"10655790\",\n \"5884851\",\n \"6133139\",\n \"6133140\",\n \"6133141\",\n \"9181627\",\n \"9935837\",\n \"5771877\",\n \"7864212\",\n \"8146570\",\n \"8425580\",\n \"10117959\",\n \"10227418\",\n \"4532125\",\n \"9967529\",\n \"9900218\",\n \"10145421\",\n \"10348945\",\n \"10521368\",\n \"10579230\",\n \"10594210\",\n \"6120803\",\n \"6133232\",\n \"6121010\",\n \"10257673\",\n \"10556366\",\n \"10513366\",\n \"6121218\",\n \"10502505\",\n \"10397209\",\n \"6133154\",\n \"10462708\",\n \"10959264\",\n \"6133158\",\n \"8876855\",\n \"10063575\",\n \"10375403\",\n \"10106345\",\n \"10432184\",\n \"10444331\",\n \"11761541\",\n \"5126675\",\n \"5126680\",\n \"7446048\",\n \"8532380\",\n \"8537359\",\n \"8823068\",\n \"8856895\",\n \"8858121\",\n \"9100030\",\n \"9101339\",\n \"9137965\",\n \"9530406\",\n \"1886374\",\n \"1889716\",\n \"1889717\",\n \"1889721\",\n \"1889745\",\n \"1889760\",\n \"1889765\",\n \"1889769\",\n \"1889828\",\n \"1889833\",\n \"1889838\",\n \"1889850\",\n \"1889870\",\n \"1889875\",\n \"5127562\",\n \"5127592\",\n \"5127595\",\n \"5127609\",\n \"5127629\",\n \"5127631\",\n \"5127638\",\n \"5127644\",\n \"5127656\",\n \"5127669\",\n \"5127675\",\n \"5127680\",\n \"5127683\",\n \"5127688\",\n \"5127698\",\n \"5802339\",\n \"10245924\",\n \"10769553\",\n \"1887108\",\n \"1887119\",\n \"1887122\",\n \"1887125\",\n \"1887126\",\n \"1887173\",\n \"1887177\",\n \"1887178\",\n \"4532050\",\n \"4532057\",\n \"4532088\",\n \"4532095\",\n \"4532097\",\n \"6121184\",\n \"8218441\",\n \"1888638\",\n \"1888639\",\n \"1886123\",\n \"1886207\",\n \"1883885\",\n \"1880275\",\n \"1880286\",\n \"1880293\",\n \"1880305\",\n \"1880310\",\n \"1880316\",\n \"1880318\",\n \"1880321\",\n \"1880350\",\n \"4532150\",\n \"4532155\",\n \"4532160\",\n \"5771880\",\n \"10410699\",\n \"1846099\",\n \"1846103\",\n \"1846107\",\n \"1846111\",\n \"1846112\",\n \"1846133\",\n \"1846141\",\n \"1846149\",\n \"1846159\",\n \"1846190\",\n \"1846210\",\n \"1846219\",\n \"1846229\",\n \"1846236\",\n \"4528813\",\n \"4528818\",\n \"1846240\",\n \"1846259\",\n \"1846261\",\n \"1939597\",\n \"1830879\",\n \"1830937\",\n \"1830962\",\n \"1831002\",\n \"1831009\",\n \"1831097\",\n \"1831128\",\n \"1831136\",\n \"1831168\",\n \"4708183\",\n \"4525443\",\n \"4525448\",\n \"9958241\",\n \"1731292\",\n \"1853242\",\n \"1853312\",\n \"5122293\",\n \"5122307\",\n \"1853578\",\n \"1853587\",\n \"10222583\",\n \"1853855\",\n \"4526048\",\n \"1854019\",\n \"1854021\",\n \"10452421\",\n \"10546013\",\n \"11428453\",\n \"1854028\",\n \"1854143\",\n \"1854202\",\n \"1854249\",\n \"1854259\",\n \"1854287\",\n \"1854347\",\n \"5122430\",\n \"5122439\",\n \"5122455\",\n \"5806333\",\n \"1854615\",\n \"1854792\",\n \"1854824\",\n \"1854849\",\n \"1854906\",\n \"11773446\",\n \"7946946\",\n \"5880063\",\n \"1854237\",\n \"12239445\",\n \"4526094\",\n \"4526050\",\n \"7717983\",\n \"1858615\",\n \"1858637\",\n \"9777614\",\n \"1858659\",\n \"1858660\",\n \"1858674\",\n \"1858698\",\n \"1858706\",\n \"9689122\",\n \"1858718\",\n \"1858762\",\n \"1858775\",\n \"1858778\",\n \"1858873\",\n \"1858930\",\n \"1858973\",\n \"1859046\",\n \"1859061\",\n \"9645309\",\n \"1859100\",\n \"1859161\",\n \"1859177\",\n \"4536292\",\n \"9768621\",\n \"1859285\",\n \"1859287\",\n \"1859305\",\n \"9590272\",\n \"9801765\",\n \"9760511\",\n \"1859453\",\n \"1859471\",\n \"1859480\",\n \"1859488\",\n \"8790054\",\n \"9675743\",\n \"9686431\",\n \"9746673\",\n \"9748079\",\n \"1859534\",\n \"9749806\",\n \"6133397\",\n \"1859929\",\n \"1859932\",\n \"1859952\",\n \"9752950\",\n \"1860026\",\n \"1860063\",\n \"1860076\",\n \"4536472\",\n \"4536483\",\n \"9700261\",\n \"7642240\",\n \"8200050\",\n \"12046692\",\n \"1973458\",\n \"1973466\",\n \"1973467\",\n \"4525132\",\n \"5123118\",\n \"5123137\",\n \"5123180\",\n \"5123221\",\n \"5123276\",\n \"6097269\",\n \"5123042\",\n \"5123046\",\n \"9759340\",\n \"10103570\",\n \"9547681\",\n \"10129812\",\n \"5124468\",\n \"1864897\",\n \"1864905\",\n \"8877458\",\n \"9240588\",\n \"9355107\",\n \"9531432\",\n \"9547535\",\n \"9606779\",\n \"1865102\",\n \"1865107\",\n \"1865108\",\n \"1865120\",\n \"1865132\",\n \"11754954\",\n \"1865295\",\n \"1865299\",\n \"1865313\",\n \"1865319\",\n \"1865328\",\n \"1865333\",\n \"1865341\",\n \"1865345\",\n \"1865347\",\n \"1865348\",\n \"1865353\",\n \"5124512\",\n \"5124542\",\n \"5124557\",\n \"5124589\",\n \"5124595\",\n \"5124597\",\n \"5124598\",\n \"5124607\",\n \"5806244\",\n \"10534664\",\n \"1865547\",\n \"1865555\",\n \"1865557\",\n \"1865571\",\n \"1865572\",\n \"1865578\",\n \"1865590\",\n \"1865593\",\n \"10014340\",\n \"1865650\",\n \"1865659\",\n \"1865660\",\n \"1865666\",\n \"1865668\",\n \"1865671\",\n \"9914882\",\n \"9972403\",\n \"1865709\",\n \"1865711\",\n \"1865764\",\n \"1865827\",\n \"1865837\",\n \"1865839\",\n \"1865842\",\n \"1865853\",\n \"1865856\",\n \"1865862\",\n \"1865869\",\n \"1865930\",\n \"1865963\",\n \"1866003\",\n \"1866006\",\n \"1866085\",\n \"1866100\",\n \"1866105\",\n \"1866123\",\n \"1866162\",\n \"1866164\",\n \"1866201\",\n \"1866214\",\n \"1866220\",\n \"1866237\",\n \"5734291\",\n \"1866249\",\n \"1866252\",\n \"1866262\",\n \"1866311\",\n \"1866330\",\n \"1866336\",\n \"1866338\",\n \"1866341\",\n \"1866356\",\n \"6106943\",\n \"1866421\",\n \"1866491\",\n \"1866496\",\n \"1866530\",\n \"1866549\",\n \"1866550\",\n \"1866556\",\n \"1866568\",\n \"1866570\",\n \"1866573\",\n \"9906979\",\n \"1866601\",\n \"1866838\",\n \"1866902\",\n \"5124813\",\n \"1866980\",\n \"1867009\",\n \"1867014\",\n \"1867021\",\n \"1867022\",\n \"1867029\",\n \"1867032\",\n \"1867037\",\n \"1867108\",\n \"1867171\",\n \"1867218\",\n \"1867224\",\n \"1867231\",\n \"5124873\",\n \"1867295\",\n \"1867312\",\n \"5124880\",\n \"5124911\",\n \"1867426\",\n \"1867515\",\n \"1867525\",\n \"1867535\",\n \"1867547\",\n \"1867552\",\n \"1867673\",\n \"1867709\",\n \"1867722\",\n \"1867744\",\n \"1867749\",\n \"1867750\",\n \"1867751\",\n \"1867773\",\n \"10108753\",\n \"1867788\",\n \"10047346\",\n \"10247309\",\n \"1867820\",\n \"1867928\",\n \"7764232\",\n \"8439879\",\n \"9983244\",\n \"1867991\",\n \"1867993\",\n \"1868014\",\n \"10883659\",\n \"1868025\",\n \"1868049\",\n \"1868060\",\n \"10591617\",\n \"9634178\",\n \"11643393\",\n \"11670751\",\n \"11729388\",\n \"10248521\",\n \"10302305\",\n \"10547404\",\n \"11414590\",\n \"11464362\",\n \"5124673\",\n \"5124716\",\n \"1736271\",\n \"7734292\",\n \"1841460\",\n \"1841476\",\n \"5120278\",\n \"1841616\",\n \"1841675\",\n \"1841706\",\n \"1841764\",\n \"1841782\",\n \"1841813\",\n \"1841821\",\n \"1841946\",\n \"1841989\",\n \"10309331\",\n \"10019169\",\n \"10005133\",\n \"5123615\",\n \"1861433\",\n \"1861451\",\n \"1861456\",\n \"1861457\",\n \"1861458\",\n \"1861479\",\n \"1861488\",\n \"1861494\",\n \"1861510\",\n \"1861522\",\n \"1861544\",\n \"1861559\",\n \"1861584\",\n \"1861592\",\n \"1861604\",\n \"1861644\",\n \"5123636\",\n \"5123663\",\n \"1861663\",\n \"1861665\",\n \"1861673\",\n \"1861697\",\n \"1861705\",\n \"1861714\",\n \"1861721\",\n \"1861759\",\n \"1861773\",\n \"1861783\",\n \"1861784\",\n \"1861797\",\n \"1861823\",\n \"1861834\",\n \"1861836\",\n \"1861842\",\n \"1861851\",\n \"1861862\",\n \"11529603\",\n \"1861887\",\n \"1861892\",\n \"1861893\",\n \"5123674\",\n \"1861933\",\n \"1861936\",\n \"1861937\",\n \"1861938\",\n \"1861949\",\n \"1861951\",\n \"1861953\",\n \"1861958\",\n \"6106744\",\n \"1861967\",\n \"1861975\",\n \"1862008\",\n \"1862026\",\n \"1862033\",\n \"1862044\",\n \"1862046\",\n \"1862047\",\n \"1862049\",\n \"1862061\",\n \"1862066\",\n \"1862072\",\n \"1862078\",\n \"1862083\",\n \"1862087\",\n \"1862088\",\n \"1862091\",\n \"1862094\",\n \"1862096\",\n \"1862123\",\n \"1862129\",\n \"1862139\",\n \"1862163\",\n \"1862181\",\n \"1862198\",\n \"1862207\",\n \"1862225\",\n \"9559671\",\n \"5123676\",\n \"5123685\",\n \"5123701\",\n \"5123704\",\n \"1862293\",\n \"1862311\",\n \"1862331\",\n \"1862363\",\n \"1862370\",\n \"1862394\",\n \"1862401\",\n \"1862403\",\n \"1862414\",\n \"9836014\",\n \"10374414\",\n \"11907754\",\n \"1862430\",\n \"1862433\",\n \"1862434\",\n \"1862441\",\n \"1862449\",\n \"1862454\",\n \"1862455\",\n \"1862468\",\n \"1862475\",\n \"1862481\",\n \"1862516\",\n \"1862517\",\n \"1862521\",\n \"1862526\",\n \"6106708\",\n \"1862547\",\n \"1862551\",\n \"5123707\",\n \"5123709\",\n \"1862569\",\n \"1862572\",\n \"1862578\",\n \"1862580\",\n \"1862595\",\n \"1862624\",\n \"1862658\",\n \"1862692\",\n \"1862701\",\n \"1862719\",\n \"1862757\",\n \"1862765\",\n \"1862774\",\n \"1862805\",\n \"1862837\",\n \"1862841\",\n \"1862874\",\n \"1862894\",\n \"1862916\",\n \"1862917\",\n \"1862923\",\n \"1862928\",\n \"1862989\",\n \"1863021\",\n \"1863025\",\n \"1863034\",\n \"1863051\",\n \"1863075\",\n \"1863080\",\n \"1863088\",\n \"5123775\",\n \"1863109\",\n \"1863143\",\n \"1863151\",\n \"5123784\",\n \"5123801\",\n \"7803585\",\n \"1863282\",\n \"5123922\",\n \"5734719\",\n \"1863354\",\n \"1863366\",\n \"1863384\",\n \"9899724\",\n \"1863388\",\n \"1863394\",\n \"1863405\",\n \"1863407\",\n \"4301348\",\n \"1863412\",\n \"1863416\",\n \"1863426\",\n \"1863467\",\n \"1863544\",\n \"1863584\",\n \"1863640\",\n \"1863646\",\n \"5124007\",\n \"5124029\",\n \"5124049\",\n \"1863699\",\n \"1863701\",\n \"1863706\",\n \"1863714\",\n \"1863724\",\n \"1863732\",\n \"1863734\",\n \"1863735\",\n \"1863742\",\n \"1863750\",\n \"9310369\",\n \"1863757\",\n \"5124050\",\n \"1863829\",\n \"1863848\",\n \"1863856\",\n \"1863858\",\n \"1863864\",\n \"1863880\",\n \"1863907\",\n \"1863909\",\n \"1863910\",\n \"1863924\",\n \"9178932\",\n \"1863944\",\n \"1863955\",\n \"9578319\",\n \"1864126\",\n \"1864135\",\n \"4703479\",\n \"1864156\",\n \"1864161\",\n \"1864164\",\n \"1864165\",\n \"8956567\",\n \"1864204\",\n \"5124071\",\n \"5124080\",\n \"5124088\",\n \"5124093\",\n \"5124109\",\n \"8133328\",\n \"11468731\",\n \"1864316\",\n \"1864320\",\n \"1864321\",\n \"1864328\",\n \"1864329\",\n \"1864352\",\n \"1864358\",\n \"1864377\",\n \"11141784\",\n \"5124118\",\n \"5124119\",\n \"5124121\",\n \"5124136\",\n \"5124143\",\n \"5124147\",\n \"5124151\",\n \"5124172\",\n \"5124199\",\n \"5124200\",\n \"5124208\",\n \"5124219\",\n \"5124232\",\n \"5124233\",\n \"5124249\",\n \"5124250\",\n \"5124268\",\n \"1864576\",\n \"11738734\",\n \"11954157\",\n \"1864652\",\n \"5124300\",\n \"5124304\",\n \"5124305\",\n \"5124332\",\n \"5124348\",\n \"5124352\",\n \"5124374\",\n \"5124415\",\n \"5124423\",\n \"5124433\",\n \"5124442\",\n \"5124443\",\n \"5124448\",\n \"5124450\",\n \"5124452\",\n \"1864793\",\n \"1864796\",\n \"5734713\",\n \"5885399\",\n \"6099041\",\n \"6106759\",\n \"7346401\",\n \"10193618\",\n \"6106647\",\n \"5123815\",\n \"5123824\",\n \"5123837\",\n \"5123852\",\n \"5123870\",\n \"5123876\",\n \"5123884\",\n \"5123889\",\n \"5123890\",\n \"8810912\",\n \"10189661\",\n \"10191275\",\n \"10436020\",\n \"5123954\",\n \"5123956\",\n \"5123961\",\n \"5123968\",\n \"5123971\",\n \"5123979\",\n \"5123980\",\n \"5123983\",\n \"5123991\",\n \"5123996\",\n \"5123999\",\n \"5124000\",\n \"8849480\",\n \"9513830\",\n \"1863978\",\n \"1863982\",\n \"1864004\",\n \"1864008\",\n \"1864021\",\n \"1864046\",\n \"1864058\",\n \"1864068\",\n \"1864070\",\n \"1864084\",\n \"1864090\",\n \"1864098\",\n \"1864103\",\n \"1864106\",\n \"1992573\",\n \"1992634\",\n \"5150053\",\n \"9893936\",\n \"1992883\",\n \"1992889\",\n \"1992907\",\n \"1992936\",\n \"1992938\",\n \"1992956\",\n \"1992969\",\n \"10842838\",\n \"10994020\",\n \"1992976\",\n \"1993021\",\n \"1993036\",\n \"1993043\",\n \"1993045\",\n \"1993419\",\n \"5150092\",\n \"1993496\",\n \"6133769\",\n \"1993637\",\n \"1993643\",\n \"10022517\",\n \"1992817\",\n \"1939432\",\n \"1939460\",\n \"4525189\",\n \"1953192\",\n \"1953196\",\n \"1953217\",\n \"1953326\",\n \"1953356\",\n \"6132711\",\n \"6132712\",\n \"6132715\",\n \"1953407\",\n \"1953423\",\n \"1953499\",\n \"5143232\",\n \"5143234\",\n \"1953729\",\n \"9053308\",\n \"9424853\",\n \"10132811\",\n \"10644798\",\n \"11467944\",\n \"11503857\",\n \"6132725\",\n \"6132726\",\n \"1953970\",\n \"6132723\",\n \"6132729\",\n \"1953998\",\n \"1954025\",\n \"1954037\",\n \"5143241\",\n \"5143249\",\n \"5143266\",\n \"5143279\",\n \"1954084\",\n \"1954120\",\n \"6132728\",\n \"1860108\",\n \"1860118\",\n \"1830031\",\n \"10650211\",\n \"5119482\",\n \"5119506\",\n \"5119513\",\n \"1830099\",\n \"1830361\",\n \"1830372\",\n \"1830374\",\n \"1830380\",\n \"1830407\",\n \"1830408\",\n \"1830410\",\n \"1830419\",\n \"1830435\",\n \"1830437\",\n \"1830442\",\n \"1830457\",\n \"1830459\",\n \"4525369\",\n \"1830498\",\n \"4525420\",\n \"4525425\",\n \"7976145\",\n \"1830534\",\n \"1830537\",\n \"1830584\",\n \"1830632\",\n \"1830802\",\n \"4525364\",\n \"1754135\",\n \"1754183\",\n \"1754263\",\n \"1754270\",\n \"5105642\",\n \"1754332\",\n \"1754368\",\n \"1754380\",\n \"1754400\",\n \"5105649\",\n \"5105656\",\n \"5105671\",\n \"1754465\",\n \"1754511\",\n \"1754516\",\n \"1754535\",\n \"11737872\",\n \"12075408\",\n \"1754619\",\n \"1754803\",\n \"1754806\",\n \"1754814\",\n \"11175615\",\n \"1754902\",\n \"1754919\",\n \"1754933\",\n \"1755131\",\n \"5734138\",\n \"1755237\",\n \"1755248\",\n \"1755253\",\n \"1755276\",\n \"5105929\",\n \"5106115\",\n \"5106160\",\n \"5106249\",\n \"5106539\",\n \"5106894\",\n \"5107076\",\n \"5107128\",\n \"5107219\",\n \"5107640\",\n \"5107644\",\n \"5107829\",\n \"7410701\",\n \"7586742\",\n \"7674502\",\n \"7761138\",\n \"7778368\",\n \"7870336\",\n \"7903078\",\n \"7909858\",\n \"7955974\",\n \"8048904\",\n \"8102790\",\n \"8111395\",\n \"8158342\",\n \"8201251\",\n \"8348761\",\n \"8426357\",\n \"1757652\",\n \"5108318\",\n \"5108334\",\n \"5108335\",\n \"1757839\",\n \"11140464\",\n \"11860016\",\n \"1757853\",\n \"5108346\",\n \"5108349\",\n \"4689394\",\n \"10174151\",\n \"10322104\",\n \"8964772\",\n \"4522753\",\n \"1830669\",\n \"1830681\",\n \"9004359\",\n \"10604375\",\n \"1953124\",\n \"1953166\",\n \"1939647\",\n \"1939658\",\n \"1939677\",\n \"1939680\",\n \"1939688\",\n \"1939717\",\n \"7646066\",\n \"1751497\",\n \"1751507\",\n \"1751509\",\n \"1751524\",\n \"1751557\",\n \"1751572\",\n \"1751575\",\n \"1751588\",\n \"1751590\",\n \"1751606\",\n \"1751609\",\n \"1751625\",\n \"1751626\",\n \"9332550\",\n \"1751670\",\n \"1751684\",\n \"1751690\",\n \"1751785\",\n \"5105193\",\n \"5105194\",\n \"5105212\",\n \"5105217\",\n \"5105218\",\n \"5105227\",\n \"1829287\",\n \"1829322\",\n \"1829363\",\n \"8254441\",\n \"1854920\",\n \"5122526\",\n \"5122538\",\n \"5122556\",\n \"5122571\",\n \"5122574\",\n \"5122581\",\n \"5122620\",\n \"5122646\",\n \"5122647\",\n \"5122668\",\n \"5122683\",\n \"5122691\",\n \"5122696\",\n \"5122702\",\n \"9015218\",\n \"1855358\",\n \"10055273\",\n \"1855452\",\n \"1855630\",\n \"1855747\",\n \"1855799\",\n \"1855804\",\n \"1855807\",\n \"1855813\",\n \"8734090\",\n \"1856005\",\n \"1856105\",\n \"5122779\",\n \"1856289\",\n \"5122798\",\n \"1856348\",\n \"1856374\",\n \"1856384\",\n \"1856516\",\n \"1856581\",\n \"1856595\",\n \"1856620\",\n \"1856658\",\n \"1856663\",\n \"1856668\",\n \"1856686\",\n \"1856691\",\n \"1856701\",\n \"1856720\",\n \"1856730\",\n \"1856768\",\n \"1856772\",\n \"1856867\",\n \"1856971\",\n \"1857020\",\n \"1857033\",\n \"1857068\",\n \"1857097\",\n \"1857143\",\n \"1857180\",\n \"1857213\",\n \"1857233\",\n \"1857241\",\n \"1857258\",\n \"1857267\",\n \"1857295\",\n \"1857315\",\n \"1857380\",\n \"1857385\",\n \"1857410\",\n \"1857577\",\n \"1857581\",\n \"1857626\",\n \"9790007\",\n \"1857785\",\n \"1857809\",\n \"1857828\",\n \"1857829\",\n \"1857840\",\n \"1857856\",\n \"1857863\",\n \"1857878\",\n \"1857882\",\n \"1857900\",\n \"1857918\",\n \"1857924\",\n \"1857935\",\n \"1857938\",\n \"1857945\",\n \"1857948\",\n \"1857973\",\n \"1857978\",\n \"1858074\",\n \"1858100\",\n \"1858113\",\n \"1858163\",\n \"5122876\",\n \"5122969\",\n \"1858283\",\n \"1858321\",\n \"1858404\",\n \"1858411\",\n \"1858488\",\n \"8178453\",\n \"1858523\",\n \"1858526\",\n \"1858557\",\n \"1856891\",\n \"1856893\",\n \"10038125\",\n \"1937642\",\n \"1937643\",\n \"1937655\",\n \"1937665\",\n \"1937667\",\n \"1937688\",\n \"1937691\",\n \"1937698\",\n \"1937699\",\n \"1937702\",\n \"1937707\",\n \"1937711\",\n \"1937712\",\n \"1937722\",\n \"1937723\",\n \"1937739\",\n \"1937745\",\n \"1937751\",\n \"1937754\",\n \"1937758\",\n \"1937769\",\n \"1937792\",\n \"1937793\",\n \"1937803\",\n \"1937816\",\n \"1937819\",\n \"1937826\",\n \"1937846\",\n \"1937847\",\n \"1937849\",\n \"1937856\",\n \"1937885\",\n \"1937892\",\n \"1937911\",\n \"1937931\",\n \"1937937\",\n \"1937959\",\n \"1937966\",\n \"1937974\",\n \"1937975\",\n \"1937988\",\n \"1938007\",\n \"1938016\",\n \"1938022\",\n \"1938029\",\n \"1938050\",\n \"1938052\",\n \"1938058\",\n \"1938059\",\n \"1938069\",\n \"1938074\",\n \"1938081\",\n \"1938088\",\n \"1938104\",\n \"1938112\",\n \"1938114\",\n \"1938122\",\n \"1938125\",\n \"1938129\",\n \"1938131\",\n \"1938147\",\n \"1938148\",\n \"1938156\",\n \"1938159\",\n \"1938162\",\n \"1938166\",\n \"1938168\",\n \"1938174\",\n \"4299870\",\n \"4299871\",\n \"4692485\",\n \"4692504\",\n \"4693382\",\n \"5734569\",\n \"8225376\",\n \"9017206\",\n \"10600208\",\n \"11716362\",\n \"12200213\",\n \"12211009\",\n \"1936969\",\n \"1936988\",\n \"1936993\",\n \"1937011\",\n \"1937037\",\n \"1937055\",\n \"1937064\",\n \"1937090\",\n \"1937109\",\n \"1937110\",\n \"1937124\",\n \"1937129\",\n \"1937136\",\n \"1937144\",\n \"1937155\",\n \"1937162\",\n \"1937165\",\n \"1937167\",\n \"5141144\",\n \"5141154\",\n \"5141163\",\n \"5141170\",\n \"5141172\",\n \"5141177\",\n \"5141179\",\n \"5141185\",\n \"5141187\",\n \"5141188\",\n \"5141195\",\n \"5141197\",\n \"5141198\",\n \"5141199\",\n \"5141202\",\n \"5141207\",\n \"5141212\",\n \"5141215\",\n \"5141216\",\n \"5141226\",\n \"5141229\",\n \"5141230\",\n \"5141233\",\n \"5141234\",\n \"5141236\",\n \"5141242\",\n \"5141248\",\n \"5141250\",\n \"5141252\",\n \"5141254\",\n \"5803065\",\n \"1937444\",\n \"1937474\",\n \"4693675\",\n \"1937490\",\n \"1937514\",\n \"1937527\",\n \"1937530\",\n \"1937540\",\n \"10761559\",\n \"1937556\",\n \"1937566\",\n \"1937570\",\n \"1937580\",\n \"1937582\",\n \"1937594\",\n \"1937613\",\n \"1937618\",\n \"1938214\",\n \"4690079\",\n \"1938226\",\n \"1938230\",\n \"1938233\",\n \"1938300\",\n \"1938446\",\n \"1938520\",\n \"1938612\",\n \"1938796\",\n \"1938810\",\n \"1938955\",\n \"1938975\",\n \"1939056\",\n \"1939086\",\n \"1939130\",\n \"1939131\",\n \"1939134\",\n \"1939136\",\n \"1939143\",\n \"1939156\",\n \"1939168\",\n \"1939180\",\n \"1939215\",\n \"1939225\",\n \"5141321\",\n \"5141324\",\n \"5141331\",\n \"5141333\",\n \"5141340\",\n \"5141342\",\n \"5141311\",\n \"5141317\",\n \"1939336\",\n \"4694313\",\n \"11561676\",\n \"12219250\",\n \"12229940\",\n \"12247359\",\n \"12253844\",\n \"12262562\",\n \"5141262\",\n \"5141288\",\n \"5141291\",\n \"5141297\",\n \"5141305\",\n \"5802625\",\n \"1939314\",\n \"1856368\",\n \"1856394\",\n \"1856503\",\n \"1856555\",\n \"1857690\",\n \"5123018\",\n \"1858531\",\n \"1838691\",\n \"1838811\",\n \"1838838\",\n \"1838905\",\n \"1838911\",\n \"4528692\",\n \"4528694\",\n \"1838251\",\n \"1838255\",\n \"1838276\",\n \"1838289\",\n \"1838297\",\n \"1838304\",\n \"1838308\",\n \"1838331\",\n \"4685893\",\n \"1833518\",\n \"1833523\",\n \"1833525\",\n \"1833531\",\n \"1833532\",\n \"1833535\",\n \"1833539\",\n \"4685097\",\n \"1833477\",\n \"1833497\",\n \"1833499\",\n \"1833500\",\n \"4685485\",\n \"1833562\",\n \"4686368\",\n \"1833600\",\n \"1833626\",\n \"1833627\",\n \"4528658\",\n \"1833653\",\n \"1833664\",\n \"1833834\",\n \"1834019\",\n \"1834078\",\n \"4685138\",\n \"4685219\",\n \"4685271\",\n \"1834497\",\n \"1834589\",\n \"1834775\",\n \"8546322\",\n \"8574752\",\n \"1834850\",\n \"1835031\",\n \"5770913\",\n \"1835082\",\n \"1835098\",\n \"1835121\",\n \"1835123\",\n \"1835128\",\n \"1835156\",\n \"1835345\",\n \"1835393\",\n \"1835396\",\n \"1835407\",\n \"1835422\",\n \"1835500\",\n \"1835555\",\n \"1835609\",\n \"1835612\",\n \"1835635\",\n \"1835644\",\n \"4685116\",\n \"5119905\",\n \"5119961\",\n \"5119969\",\n \"1835790\",\n \"1835821\",\n \"1835828\",\n \"10304283\",\n \"4686483\",\n \"1836871\",\n \"1836873\",\n \"1836899\",\n \"4685431\",\n \"4685448\",\n \"1837053\",\n \"1837057\",\n \"1837150\",\n \"1837159\",\n \"1837172\",\n \"1837569\",\n \"1837572\",\n \"4686743\",\n \"1837857\",\n \"1837870\",\n \"1837894\",\n \"1837900\",\n \"1838034\",\n \"4685065\",\n \"1838218\",\n \"1838224\",\n \"4685299\",\n \"4685306\",\n \"1838333\",\n \"4686617\",\n \"4686620\",\n \"4686621\",\n \"4686628\",\n \"1838626\",\n \"1838629\",\n \"1838633\",\n \"1838635\",\n \"1838641\",\n \"1838649\",\n \"8958353\",\n \"1838666\",\n \"1838958\",\n \"1838960\",\n \"4528702\",\n \"4685566\",\n \"4685576\",\n \"1838969\",\n \"1839317\",\n \"1839323\",\n \"1839325\",\n \"1839333\",\n \"1839370\",\n \"9895629\",\n \"1839494\",\n \"1839560\",\n \"1839770\",\n \"1839851\",\n \"1839878\",\n \"1839893\",\n \"5120053\",\n \"5120058\",\n \"5120063\",\n \"4685645\",\n \"4685650\",\n \"4685653\",\n \"4685655\",\n \"4685662\",\n \"4685669\",\n \"4685678\",\n \"4685683\",\n \"1840258\",\n \"1840260\",\n \"1840726\",\n \"1840774\",\n \"1840776\",\n \"1840796\",\n \"1840812\",\n \"1840844\",\n \"1840974\",\n \"4686042\",\n \"4686055\",\n \"4686111\",\n \"4686133\",\n \"4686164\",\n \"4686190\",\n \"4686214\",\n \"4686264\",\n \"4686266\",\n \"1841101\",\n \"1841158\",\n \"1841159\",\n \"1841180\",\n \"1841183\",\n \"1841188\",\n \"1841215\",\n \"1841219\",\n \"1841221\",\n \"1841302\",\n \"4685972\",\n \"5770922\",\n \"5770942\",\n \"5802248\",\n \"5802256\",\n \"5802257\",\n \"5802259\",\n \"4529032\",\n \"4686039\",\n \"4686015\",\n \"4686016\",\n \"4686018\",\n \"4686022\",\n \"4686027\",\n \"4686029\",\n \"4684521\",\n \"4684591\",\n \"4684789\",\n \"4684888\",\n \"4684893\",\n \"4684925\",\n \"4684958\",\n \"4685629\",\n \"4685631\",\n \"4685778\",\n \"4685810\",\n \"4685980\",\n \"4685981\",\n \"4686355\",\n \"4686385\",\n \"4686386\",\n \"4686531\",\n \"4686532\",\n \"4686656\",\n \"4686697\",\n \"4686702\",\n \"4686844\",\n \"4686956\",\n \"10511237\",\n \"5119893\",\n \"5119895\",\n \"12188993\",\n \"1800238\",\n \"10213314\",\n \"10225227\",\n \"1800441\",\n \"1800473\",\n \"6133777\",\n \"1800522\",\n \"1800528\",\n \"1800539\",\n \"10737993\",\n \"1800562\",\n \"1800572\",\n \"1800642\",\n \"10010361\",\n \"9859868\",\n \"9883274\",\n \"1800686\",\n \"1800691\",\n \"1800696\",\n \"1800821\",\n \"1800843\",\n \"1800844\",\n \"5114394\",\n \"5114400\",\n \"5114409\",\n \"11873966\",\n \"4534796\",\n \"4534798\",\n \"9267364\",\n \"9544823\",\n \"1800881\",\n \"5114425\",\n \"4534757\",\n \"1800934\",\n \"1800963\",\n \"5114431\",\n \"5114435\",\n \"5114436\",\n \"5114439\",\n \"6133780\",\n \"1801000\",\n \"1801001\",\n \"1801051\",\n \"1801073\",\n \"1801080\",\n \"1801084\",\n \"10240592\",\n \"1801170\",\n \"1801196\",\n \"5114465\",\n \"5114515\",\n \"1801303\",\n \"1801305\",\n \"1801316\",\n \"1801432\",\n \"1801461\",\n \"1801490\",\n \"1801503\",\n \"1801519\",\n \"10026605\",\n \"10066605\",\n \"10088502\",\n \"10372377\",\n \"10448500\",\n \"10510325\",\n \"10573425\",\n \"11496990\",\n \"11508472\",\n \"11594541\",\n \"11596898\",\n \"11698552\",\n \"11836409\",\n \"11871044\",\n \"1801787\",\n \"1801896\",\n \"1801903\",\n \"1801922\",\n \"1802978\",\n \"4534773\",\n \"4534776\",\n \"4534778\",\n \"4534779\",\n \"4534782\",\n \"4534787\",\n \"4534788\",\n \"4534792\",\n \"6112606\",\n \"6112610\",\n \"6112613\",\n \"6112634\",\n \"6112661\",\n \"6133809\",\n \"6133811\",\n \"6133813\",\n \"6133814\",\n \"9313634\",\n \"9385576\",\n \"9454291\",\n \"9574801\",\n \"9579309\",\n \"9626037\",\n \"9894093\",\n \"9960072\",\n \"1801993\",\n \"1802090\",\n \"8883183\",\n \"1802113\",\n \"1802120\",\n \"8924506\",\n \"1802229\",\n \"1802244\",\n \"1802280\",\n \"1802337\",\n \"1802662\",\n \"1802702\",\n \"1802783\",\n \"1802827\",\n \"1802830\",\n \"1802833\",\n \"1802850\",\n \"1802868\",\n \"1802888\",\n \"1802919\",\n \"1802939\",\n \"1802998\",\n \"1803012\",\n \"1803014\",\n \"1803021\",\n \"1803022\",\n \"1803025\",\n \"1803035\",\n \"1803039\",\n \"1803060\",\n \"1803065\",\n \"1803073\",\n \"1803078\",\n \"1803091\",\n \"1803108\",\n \"9485481\",\n \"10942408\",\n \"4534762\",\n \"4534766\",\n \"4534767\",\n \"4534769\",\n \"6133803\",\n \"9239301\",\n \"9426252\",\n \"10264193\",\n \"5114295\",\n \"5114303\",\n \"5114311\",\n \"5114316\",\n \"5114317\",\n \"5114327\",\n \"5114340\",\n \"5114353\",\n \"8244266\",\n \"10987178\"\n ],\n [\n \"1837645\",\n \"11070822\",\n \"11442724\",\n \"1921987\",\n \"1934046\",\n \"1934326\",\n \"1934442\",\n \"1934515\",\n \"1934690\",\n \"1934713\",\n \"1934983\",\n \"1935072\",\n \"1935294\",\n \"1935340\",\n \"1935610\",\n \"1935826\",\n \"1935968\",\n \"1936158\",\n \"1936231\",\n \"1936309\",\n \"1936370\",\n \"1936531\",\n \"1936609\",\n \"1936648\",\n \"4689751\",\n \"4695593\",\n \"4705066\",\n \"4709187\",\n \"1868532\",\n \"1868563\",\n \"1992267\",\n \"1860613\",\n \"1860657\",\n \"1860720\",\n \"1860732\",\n \"1758098\",\n \"11760262\",\n \"1732062\",\n \"1732085\",\n \"1732089\",\n \"1732160\",\n \"1732397\",\n \"1732442\",\n \"1732496\",\n \"1732599\",\n \"1732627\",\n \"1732658\",\n \"1732661\",\n \"1732761\",\n \"1732814\",\n \"1732834\",\n \"1732862\",\n \"1732883\",\n \"1732944\",\n \"1732969\",\n \"1733135\",\n \"1733242\",\n \"1733338\",\n \"1733502\",\n \"1733524\",\n \"1733529\",\n \"1733574\",\n \"1733617\",\n \"1733670\",\n \"1733831\",\n \"1733840\",\n \"1734381\",\n \"1734388\",\n \"1734489\",\n \"1734505\",\n \"1734548\",\n \"1734683\",\n \"1734849\",\n \"1734934\",\n \"4689527\",\n \"4707431\",\n \"5102272\",\n \"9329912\",\n \"1831858\",\n \"1831868\",\n \"1832142\",\n \"1832151\",\n \"1832233\",\n \"1832247\",\n \"1832249\",\n \"1832349\",\n \"1832512\",\n \"1832608\",\n \"1832647\",\n \"1832673\",\n \"1833468\",\n \"8834745\",\n \"9168716\",\n \"1845266\",\n \"12047421\",\n \"1846311\",\n \"1846350\",\n \"1846370\",\n \"1846392\",\n \"1846510\",\n \"1846586\",\n \"1846636\",\n \"1846848\",\n \"1846907\",\n \"1847533\",\n \"1847591\",\n \"1847866\",\n \"1847914\",\n \"1847952\",\n \"1847974\",\n \"1848019\",\n \"1848113\",\n \"1848149\",\n \"1848192\",\n \"1848217\",\n \"1848253\",\n \"1848374\",\n \"1848475\",\n \"1848582\",\n \"1848634\",\n \"1848655\",\n \"1848660\",\n \"1848677\",\n \"1848843\",\n \"1849005\",\n \"1849103\",\n \"1849117\",\n \"1849249\",\n \"1849256\",\n \"1849449\",\n \"1849474\",\n \"1849514\",\n \"1849528\",\n \"1849628\",\n \"1849652\",\n \"1849663\",\n \"1849983\",\n \"1850022\",\n \"1850144\",\n \"1850224\",\n \"1850231\",\n \"1850276\",\n \"1850474\",\n \"1850521\",\n \"1850525\",\n \"1850669\",\n \"1850689\",\n \"1850721\",\n \"1850762\",\n \"1850769\",\n \"1850777\",\n \"1850790\",\n \"1850865\",\n \"1851038\",\n \"1851049\",\n \"1851201\",\n \"1851212\",\n \"1851293\",\n \"1851305\",\n \"1851334\",\n \"1851406\",\n \"1851496\",\n \"1851662\",\n \"1851754\",\n \"1851826\",\n \"1852064\",\n \"1852133\",\n \"1852176\",\n \"1852212\",\n \"1852315\",\n \"1852327\",\n \"1852379\",\n \"1852416\",\n \"3256113\",\n \"3257500\",\n \"4407138\",\n \"4688717\",\n \"8793999\",\n \"9073940\",\n \"9155721\",\n \"9496267\",\n \"1829472\",\n \"1829658\",\n \"1829702\",\n \"9151414\",\n \"1831720\",\n \"1828383\",\n \"1828394\",\n \"1828406\",\n \"1828425\",\n \"1828435\",\n \"1828463\",\n \"1828574\",\n \"1828636\",\n \"1828802\",\n \"1828825\",\n \"1828975\",\n \"1829019\",\n \"2278098\",\n \"3256950\",\n \"4406516\",\n \"4525607\",\n \"9026655\",\n \"1751846\",\n \"10330071\",\n \"10903022\",\n \"10965723\",\n \"1861387\",\n \"1868427\",\n \"1868520\",\n \"10017524\",\n \"1834426\",\n \"1834551\",\n \"1835064\",\n \"1835832\",\n \"1838074\",\n \"1838970\",\n \"1839565\",\n \"1839598\",\n \"4575600\",\n \"4684219\",\n \"4685556\",\n \"4685945\",\n \"1835459\",\n \"1845791\",\n \"1845807\",\n \"1845950\",\n \"1845958\",\n \"1845981\",\n \"1846006\",\n \"1846480\",\n \"9206138\",\n \"1832635\",\n \"1834598\",\n \"1839010\",\n \"1841259\",\n \"5119880\",\n \"9021546\",\n \"1830118\",\n \"1831446\",\n \"1834557\",\n \"1839385\",\n \"1839623\",\n \"1841294\",\n \"1853721\",\n \"3257405\",\n \"4706578\",\n \"10836135\",\n \"10836231\",\n \"10874367\",\n \"10874844\",\n \"10876650\",\n \"10956237\",\n \"11495707\",\n \"11556078\",\n \"11954625\",\n \"12125931\",\n \"12183844\",\n \"12206130\",\n \"12225180\",\n \"12260643\",\n \"1369661\",\n \"1758620\",\n \"1758859\",\n \"1759149\",\n \"1759767\",\n \"1760135\",\n \"1760198\",\n \"1760382\",\n \"1760583\",\n \"1760914\",\n \"1760969\",\n \"1761094\",\n \"1761207\",\n \"1761351\",\n \"1761385\",\n \"1761539\",\n \"1761571\",\n \"1761750\",\n \"1761815\",\n \"1761829\",\n \"1762149\",\n \"1762194\",\n \"1762212\",\n \"1762225\",\n \"1762280\",\n \"1762293\",\n \"1762414\",\n \"1762711\",\n \"1762841\",\n \"1762885\",\n \"1763151\",\n \"1763588\",\n \"1763591\",\n \"1763649\",\n \"1763777\",\n \"1763804\",\n \"1763951\",\n \"1764015\",\n \"1764187\",\n \"1764504\",\n \"1764524\",\n \"1764638\",\n \"1764851\",\n \"1765092\",\n \"1765176\",\n \"1765652\",\n \"1765861\",\n \"1766259\",\n \"1766538\",\n \"1766547\",\n \"1766671\",\n \"1766838\",\n \"1766874\",\n \"1766883\",\n \"1767029\",\n \"1767032\",\n \"1767210\",\n \"1767304\",\n \"1767496\",\n \"1767504\",\n \"1767514\",\n \"1767752\",\n \"1767796\",\n \"1767878\",\n \"1768281\",\n \"1768432\",\n \"1768579\",\n \"1768896\",\n \"1768999\",\n \"1769098\",\n \"1769165\",\n \"1769311\",\n \"1769330\",\n \"1769393\",\n \"1769735\",\n \"1769819\",\n \"1770011\",\n \"1770260\",\n \"1770379\",\n \"1771448\",\n \"1771454\",\n \"1771541\",\n \"1771562\",\n \"1771838\",\n \"1771845\",\n \"1771850\",\n \"1771972\",\n \"1772053\",\n \"1772259\",\n \"1772349\",\n \"1772425\",\n \"1772445\",\n \"1772540\",\n \"1772688\",\n \"1772714\",\n \"1772783\",\n \"1772826\",\n \"1773983\",\n \"1774068\",\n \"1774573\",\n \"1774846\",\n \"1774906\",\n \"1774940\",\n \"1775144\",\n \"1775234\",\n \"1775759\",\n \"1775975\",\n \"1776158\",\n \"1776246\",\n \"1776498\",\n \"1777014\",\n \"1777140\",\n \"1777156\",\n \"1777174\",\n \"1777277\",\n \"1777629\",\n \"1777692\",\n \"1777734\",\n \"1777863\",\n \"1777907\",\n \"1777925\",\n \"1778103\",\n \"1778156\",\n \"1778406\",\n \"1778544\",\n \"1778600\",\n \"1778626\",\n \"1779398\",\n \"1779445\",\n \"1779611\",\n \"1779666\",\n \"1779739\",\n \"1780139\",\n \"1780194\",\n \"1780700\",\n \"1780855\",\n \"1780861\",\n \"1781027\",\n \"1781044\",\n \"1781630\",\n \"1781924\",\n \"1781971\",\n \"1782041\",\n \"1782106\",\n \"1782184\",\n \"1782205\",\n \"1782325\",\n \"1783166\",\n \"1783299\",\n \"1783337\",\n \"1783363\",\n \"1783651\",\n \"1783880\",\n \"1783988\",\n \"1784240\",\n \"1784645\",\n \"1784776\",\n \"1785742\",\n \"1785830\",\n \"1785909\",\n \"1786134\",\n \"1786211\",\n \"1786313\",\n \"1786710\",\n \"1786859\",\n \"1786909\",\n \"1786955\",\n \"1787011\",\n \"1787105\",\n \"1787452\",\n \"1787996\",\n \"1788044\",\n \"1788100\",\n \"1788243\",\n \"1788312\",\n \"1788326\",\n \"1788535\",\n \"1788860\",\n \"1788941\",\n \"1789056\",\n \"1789189\",\n \"1789222\",\n \"1789407\",\n \"1789493\",\n \"1789602\",\n \"1789643\",\n \"1789793\",\n \"1790228\",\n \"1790322\",\n \"1790328\",\n \"1790449\",\n \"1790683\",\n \"1790784\",\n \"1790791\",\n \"1790794\",\n \"1790829\",\n \"1790850\",\n \"1790931\",\n \"1790999\",\n \"1791037\",\n \"1791093\",\n \"1791147\",\n \"1791152\",\n \"1791180\",\n \"1791371\",\n \"1791378\",\n \"1791497\",\n \"1791696\",\n \"1791874\",\n \"1792199\",\n \"1792250\",\n \"1792270\",\n \"1792528\",\n \"1792687\",\n \"1792825\",\n \"1793290\",\n \"1793428\",\n \"1793565\",\n \"1793603\",\n \"1793887\",\n \"1794512\",\n \"1794630\",\n \"1795041\",\n \"1795072\",\n \"1795656\",\n \"1796204\",\n \"1796256\",\n \"1796287\",\n \"1796328\",\n \"1796358\",\n \"1796971\",\n \"1797038\",\n \"1797073\",\n \"1797726\",\n \"1798007\",\n \"1798097\",\n \"1798308\",\n \"1798340\",\n \"1798377\",\n \"1798421\",\n \"1798440\",\n \"1798478\",\n \"1798509\",\n \"1798514\",\n \"1799163\",\n \"1799180\",\n \"1799416\",\n \"1799702\",\n \"1799723\",\n \"1803121\",\n \"1803137\",\n \"1803250\",\n \"1803300\",\n \"1803474\",\n \"1803615\",\n \"1803699\",\n \"1803780\",\n \"1803812\",\n \"1803951\",\n \"1804244\",\n \"1804321\",\n \"1804336\",\n \"1804391\",\n \"1804414\",\n \"1804474\",\n \"1804500\",\n \"1804521\",\n \"1804552\",\n \"1804609\",\n \"1804645\",\n \"1804714\",\n \"1804755\",\n \"1804829\",\n \"1804905\",\n \"1804961\",\n \"1805025\",\n \"1805088\",\n \"1805171\",\n \"1805233\",\n \"1805340\",\n \"1805496\",\n \"1805498\",\n \"1805536\",\n \"1805559\",\n \"1805680\",\n \"1805688\",\n \"1805749\",\n \"1805805\",\n \"1805917\",\n \"1806046\",\n \"1806123\",\n \"1806539\",\n \"1806678\",\n \"1806703\",\n \"1806731\",\n \"1806813\",\n \"1806818\",\n \"1806869\",\n \"1806884\",\n \"1806903\",\n \"1806935\",\n \"1807195\",\n \"1807270\",\n \"1807288\",\n \"1807352\",\n \"1807453\",\n \"1807502\",\n \"1807512\",\n \"1807552\",\n \"1807557\",\n \"1807785\",\n \"1807878\",\n \"1807965\",\n \"1808083\",\n \"1808097\",\n \"1808588\",\n \"1808646\",\n \"1808720\",\n \"1808910\",\n \"1808961\",\n \"1809017\",\n \"1809035\",\n \"1809063\",\n \"1809069\",\n \"1809113\",\n \"1809124\",\n \"1809150\",\n \"1809201\",\n \"1809226\",\n \"1809292\",\n \"1809304\",\n \"1809307\",\n \"1809346\",\n \"1809379\",\n \"1809452\",\n \"1809913\",\n \"1809946\",\n \"1809948\",\n \"1809950\",\n \"1810097\",\n \"1810107\",\n \"1810140\",\n \"1810463\",\n \"1810465\",\n \"1810505\",\n \"1810530\",\n \"1810734\",\n \"1810746\",\n \"1810819\",\n \"1810845\",\n \"1810849\",\n \"1810852\",\n \"1810969\",\n \"1810973\",\n \"1811436\",\n \"1811507\",\n \"1811612\",\n \"1811679\",\n \"1811694\",\n \"1812433\",\n \"1812492\",\n \"1812534\",\n \"1812649\",\n \"1812874\",\n \"1812976\",\n \"1813237\",\n \"1813262\",\n \"1814095\",\n \"1814174\",\n \"1814314\",\n \"1814401\",\n \"1814534\",\n \"1814563\",\n \"1814595\",\n \"1814654\",\n \"1814799\",\n \"1814885\",\n \"1814969\",\n \"1815226\",\n \"1815259\",\n \"1815337\",\n \"1815371\",\n \"1815380\",\n \"1815421\",\n \"1815439\",\n \"1815670\",\n \"1815844\",\n \"1815859\",\n \"1815923\",\n \"1816024\",\n \"1816417\",\n \"1816564\",\n \"1816799\",\n \"1816867\",\n \"1816956\",\n \"1817060\",\n \"1817084\",\n \"1817136\",\n \"1817669\",\n \"1817786\",\n \"1817807\",\n \"1817809\",\n \"1817848\",\n \"1817918\",\n \"1817933\",\n \"1818251\",\n \"1818401\",\n \"1818428\",\n \"1818431\",\n \"1818477\",\n \"1818650\",\n \"1818989\",\n \"1819044\",\n \"1819125\",\n \"1819252\",\n \"1819276\",\n \"1819302\",\n \"1819372\",\n \"1819648\",\n \"1819696\",\n \"1819785\",\n \"1819865\",\n \"1819968\",\n \"1820080\",\n \"1820270\",\n \"1820536\",\n \"1820708\",\n \"1821433\",\n \"1821441\",\n \"1822129\",\n \"1822137\",\n \"3255940\",\n \"3255943\",\n \"3255956\",\n \"3256657\",\n \"3257524\",\n \"3257694\",\n \"3257798\",\n \"3258057\",\n \"3258063\",\n \"3258133\",\n \"3261008\",\n \"4301340\",\n \"4405533\",\n \"4405981\",\n \"4406298\",\n \"4408204\",\n \"4532562\",\n \"4684330\",\n \"4687068\",\n \"4687701\",\n \"4688136\",\n \"4688528\",\n \"4688690\",\n \"4688727\",\n \"4688971\",\n \"4689117\",\n \"4689138\",\n \"4689548\",\n \"4689585\",\n \"4689708\",\n \"4696040\",\n \"4696103\",\n \"4696201\",\n \"4702229\",\n \"4702515\",\n \"4704072\",\n \"4705151\",\n \"4705945\",\n \"4706535\",\n \"4706694\",\n \"4706723\",\n \"4708174\",\n \"4708493\",\n \"4708566\",\n \"4708587\",\n \"4708592\",\n \"4708606\",\n \"4708611\",\n \"4708626\",\n \"4708638\",\n \"4708646\",\n \"4708648\",\n \"4708684\",\n \"4708745\",\n \"4709385\",\n \"5115213\",\n \"5115807\",\n \"5116471\",\n \"6133263\",\n \"7535296\",\n \"7588628\",\n \"7659598\",\n \"7721234\",\n \"7769987\",\n \"7841677\",\n \"8203799\",\n \"8396912\",\n \"8679775\",\n \"8757056\",\n \"8766106\",\n \"8786726\",\n \"8787356\",\n \"8803817\",\n \"8806645\",\n \"8810582\",\n \"8814442\",\n \"8875890\",\n \"8895291\",\n \"8896182\",\n \"8903953\",\n \"8915575\",\n \"8921795\",\n \"8928010\",\n \"8934672\",\n \"8935025\",\n \"8936210\",\n \"8944338\",\n \"8946062\",\n \"8952983\",\n \"8955545\",\n \"8968124\",\n \"8970409\",\n \"8974541\",\n \"8978064\",\n \"8978428\",\n \"8981907\",\n \"8983629\",\n \"8992509\",\n \"8997448\",\n \"9005880\",\n \"9026388\",\n \"9029051\",\n \"9036372\",\n \"9036849\",\n \"9040198\",\n \"9044770\",\n \"9046185\",\n \"9053842\",\n \"9055772\",\n \"9059321\",\n \"9059730\",\n \"9061491\",\n \"9065472\",\n \"9068729\",\n \"9069808\",\n \"9078901\",\n \"9080469\",\n \"9090334\",\n \"9092234\",\n \"9093819\",\n \"9095230\",\n \"9099004\",\n \"9111269\",\n \"9112567\",\n \"9121178\",\n \"9123839\",\n \"9128871\",\n \"9130093\",\n \"9136607\",\n \"9137617\",\n \"9141856\",\n \"9146182\",\n \"9154466\",\n \"9163604\",\n \"9167802\",\n \"9175687\",\n \"9176590\",\n \"9177092\",\n \"9180373\",\n \"9181278\",\n \"9183339\",\n \"9184825\",\n \"9185801\",\n \"9186977\",\n \"9188678\",\n \"9189318\",\n \"9199756\",\n \"9203611\",\n \"9203720\",\n \"9205220\",\n \"9211050\",\n \"9211520\",\n \"9211630\",\n \"9217680\",\n \"9218657\",\n \"9220793\",\n \"9230236\",\n \"9345724\",\n \"9558288\",\n \"9762611\",\n \"1758939\",\n \"1771881\",\n \"1780615\",\n \"1788807\",\n \"4301308\",\n \"4687398\",\n \"7969922\",\n \"8931287\",\n \"9119424\",\n \"9179511\",\n \"1856563\",\n \"1861151\",\n \"4404934\",\n \"7236091\",\n \"1856631\",\n \"1731885\",\n \"1731891\",\n \"1732043\",\n \"1732047\",\n \"1852917\",\n \"11527985\",\n \"1833778\",\n \"1834515\",\n \"1834792\",\n \"1835084\",\n \"1835346\",\n \"1835429\",\n \"1835465\",\n \"1835812\",\n \"1835818\",\n \"1837106\",\n \"1837338\",\n \"1837723\",\n \"1837967\",\n \"1838053\",\n \"1838338\",\n \"1839258\",\n \"1839652\",\n \"1839706\",\n \"1840063\",\n \"1840273\",\n \"1841075\",\n \"1841093\",\n \"4686308\",\n \"5119806\",\n \"1831747\",\n \"1852745\",\n \"1852897\",\n \"4406931\",\n \"1868162\",\n \"1869358\",\n \"1751227\",\n \"1939497\",\n \"1939519\",\n \"3262002\",\n \"1860181\",\n \"1860256\",\n \"1860403\",\n \"1860411\",\n \"3256188\",\n \"5123346\",\n \"5123443\",\n \"1735406\",\n \"1735409\",\n \"1758313\",\n \"1751200\",\n \"1853220\",\n \"1869593\",\n \"1869643\",\n \"1869653\",\n \"1869664\",\n \"1869690\",\n \"1869760\",\n \"1869823\",\n \"1869851\",\n \"1869974\",\n \"1870004\",\n \"1870028\",\n \"1870168\",\n \"1870229\",\n \"1870242\",\n \"1870302\",\n \"1870413\",\n \"1870421\",\n \"1870449\",\n \"1870504\",\n \"1870605\",\n \"1870648\",\n \"1870697\",\n \"1870714\",\n \"1870982\",\n \"1871131\",\n \"1871157\",\n \"1871167\",\n \"1871172\",\n \"1871206\",\n \"1871327\",\n \"1871366\",\n \"1871384\",\n \"1871413\",\n \"1871446\",\n \"1871456\",\n \"1871505\",\n \"1871553\",\n \"1871596\",\n \"1871604\",\n \"1871695\",\n \"1871753\",\n \"1871761\",\n \"1871764\",\n \"1871825\",\n \"1871885\",\n \"1871922\",\n \"1871939\",\n \"1871986\",\n \"1872079\",\n \"1872162\",\n \"1872196\",\n \"1872209\",\n \"1872254\",\n \"1872446\",\n \"1872465\",\n \"1872468\",\n \"1872509\",\n \"1872602\",\n \"1872732\",\n \"1872811\",\n \"1872824\",\n \"1872845\",\n \"1873021\",\n \"1873074\",\n \"1873212\",\n \"1873259\",\n \"1873280\",\n \"1873310\",\n \"1873335\",\n \"1873372\",\n \"1873374\",\n \"1873396\",\n \"1873408\",\n \"1873583\",\n \"1873619\",\n \"1873642\",\n \"1873750\",\n \"1873755\",\n \"1873763\",\n \"1873768\",\n \"1873775\",\n \"1873830\",\n \"1873878\",\n \"1873980\",\n \"1874141\",\n \"1874152\",\n \"1874309\",\n \"1874374\",\n \"1874450\",\n \"1874624\",\n \"1874900\",\n \"1874935\",\n \"1874958\",\n \"1875103\",\n \"1875195\",\n \"1875317\",\n \"1875450\",\n \"1875477\",\n \"1875532\",\n \"1875600\",\n \"1875650\",\n \"1875821\",\n \"1875840\",\n \"1875849\",\n \"1875890\",\n \"1876062\",\n \"1876167\",\n \"1876280\",\n \"1876391\",\n \"1876474\",\n \"1876511\",\n \"1876536\",\n \"1876547\",\n \"1876588\",\n \"1876613\",\n \"1876663\",\n \"1876846\",\n \"1876889\",\n \"1876920\",\n \"1876954\",\n \"1876978\",\n \"1876990\",\n \"1877001\",\n \"1877036\",\n \"1877266\",\n \"1877274\",\n \"1877292\",\n \"1877401\",\n \"1877430\",\n \"1877452\",\n \"1877472\",\n \"1877491\",\n \"1877495\",\n \"1877536\",\n \"1877619\",\n \"1877632\",\n \"1877650\",\n \"1877771\",\n \"1877937\",\n \"1878008\",\n \"1878156\",\n \"1878171\",\n \"1878192\",\n \"1878317\",\n \"1878365\",\n \"1878404\",\n \"1878460\",\n \"1878522\",\n \"1878578\",\n \"1883044\",\n \"1888451\",\n \"1890021\",\n \"1890053\",\n \"3257649\",\n \"4407363\",\n \"4531185\",\n \"4689300\",\n \"4703184\",\n \"4704752\",\n \"7354470\",\n \"7362601\",\n \"7744105\",\n \"8919882\",\n \"8952756\",\n \"9000709\",\n \"9108102\",\n \"9230208\",\n \"1748777\",\n \"1748799\",\n \"1836903\",\n \"1954159\",\n \"11907720\",\n \"1939952\",\n \"1940108\",\n \"1940133\",\n \"1940447\",\n \"1940500\",\n \"1940797\",\n \"1940810\",\n \"1941309\",\n \"1941316\",\n \"4525713\",\n \"4706892\",\n \"7566147\",\n \"7876391\",\n \"10494601\",\n \"1736314\",\n \"1736354\",\n \"1736359\",\n \"1736388\",\n \"1736409\",\n \"1736418\",\n \"1736444\",\n \"1736460\",\n \"1736612\",\n \"1736656\",\n \"1736725\",\n \"1736758\",\n \"1736793\",\n \"1736802\",\n \"1736830\",\n \"1736834\",\n \"1736895\",\n \"1736951\",\n \"1737021\",\n \"1737063\",\n \"1737084\",\n \"1737110\",\n \"1737177\",\n \"1737228\",\n \"1737303\",\n \"1737335\",\n \"1737519\",\n \"1737647\",\n \"1737701\",\n \"1738021\",\n \"1738049\",\n \"1738065\",\n \"1738143\",\n \"1738189\",\n \"1738215\",\n \"1738242\",\n \"1738265\",\n \"1738583\",\n \"1738667\",\n \"1738881\",\n \"1739000\",\n \"1739048\",\n \"1739060\",\n \"1739315\",\n \"1739336\",\n \"1739398\",\n \"1739418\",\n \"1739446\",\n \"1739550\",\n \"1739599\",\n \"1739724\",\n \"1740434\",\n \"1740515\",\n \"1740664\",\n \"1740674\",\n \"1740796\",\n \"1740814\",\n \"1741043\",\n \"1741073\",\n \"1741082\",\n \"1741128\",\n \"1741141\",\n \"1741314\",\n \"1741338\",\n \"1741383\",\n \"1741404\",\n \"1741540\",\n \"1741547\",\n \"1741557\",\n \"1741585\",\n \"1741717\",\n \"1741805\",\n \"1742045\",\n \"1742061\",\n \"1742345\",\n \"1742398\",\n \"1742419\",\n \"1743173\",\n \"1743188\",\n \"1743269\",\n \"1743318\",\n \"1743343\",\n \"1743404\",\n \"1743452\",\n \"1743459\",\n \"1743467\",\n \"1743485\",\n \"1743516\",\n \"1743637\",\n \"1743652\",\n \"1743656\",\n \"1743673\",\n \"1743690\",\n \"1743723\",\n \"1743762\",\n \"1743811\",\n \"1743926\",\n \"1743994\",\n \"1744049\",\n \"1744129\",\n \"1744133\",\n \"1744165\",\n \"1744208\",\n \"1744219\",\n \"1744237\",\n \"1744240\",\n \"1744481\",\n \"1744587\",\n \"1744687\",\n \"1744691\",\n \"1744761\",\n \"1744928\",\n \"1744946\",\n \"1744993\",\n \"1745011\",\n \"1745017\",\n \"1745021\",\n \"1745076\",\n \"1745086\",\n \"1745285\",\n \"1745549\",\n \"1745894\",\n \"1745922\",\n \"1745927\",\n \"1745997\",\n \"1746012\",\n \"1746172\",\n \"1746324\",\n \"1746399\",\n \"1746437\",\n \"1746461\",\n \"1746508\",\n \"1746562\",\n \"1746600\",\n \"1746694\",\n \"1746712\",\n \"1746749\",\n \"1746994\",\n \"1747019\",\n \"1747044\",\n \"1747067\",\n \"1747122\",\n \"1747195\",\n \"1747209\",\n \"1747242\",\n \"1747506\",\n \"1747611\",\n \"1747625\",\n \"1747644\",\n \"1747723\",\n \"1747904\",\n \"1747949\",\n \"1748099\",\n \"1748108\",\n \"1748143\",\n \"1748201\",\n \"1748277\",\n \"1748368\",\n \"1748560\",\n \"1748601\",\n \"1748645\",\n \"1748717\",\n \"1748748\",\n \"1748757\",\n \"4529834\",\n \"4575996\",\n \"4576037\",\n \"4684145\",\n \"4703014\",\n \"4705537\",\n \"4707710\",\n \"4707748\",\n \"4707821\",\n \"4707834\",\n \"4708154\",\n \"4708407\",\n \"7236046\",\n \"7704258\",\n \"9111044\",\n \"9905626\",\n \"1831773\",\n \"1831776\",\n \"3257328\",\n \"10381192\",\n \"10484957\",\n \"10527924\",\n \"10552471\",\n \"11760445\",\n \"1920834\",\n \"1920921\",\n \"1920925\",\n \"1920934\",\n \"1921052\",\n \"1921054\",\n \"1921060\",\n \"1921065\",\n \"1921088\",\n \"1921118\",\n \"1921120\",\n \"1921138\",\n \"1921156\",\n \"1921235\",\n \"1921257\",\n \"1921287\",\n \"1921439\",\n \"1921632\",\n \"1921642\",\n \"1921657\",\n \"1921895\",\n \"1921908\",\n \"1921918\",\n \"1922028\",\n \"1922054\",\n \"1922059\",\n \"1922068\",\n \"1922152\",\n \"1922191\",\n \"1922218\",\n \"1922236\",\n \"1922270\",\n \"1922297\",\n \"1922308\",\n \"1922454\",\n \"1922465\",\n \"1922516\",\n \"1922569\",\n \"1922635\",\n \"1922672\",\n \"1922677\",\n \"1922682\",\n \"1922712\",\n \"1922735\",\n \"1922740\",\n \"1922760\",\n \"1922827\",\n \"1922888\",\n \"1922918\",\n \"1922953\",\n \"1922993\",\n \"1923013\",\n \"1923058\",\n \"1923457\",\n \"1923462\",\n \"1923487\",\n \"1923497\",\n \"1923499\",\n \"1923510\",\n \"1923621\",\n \"1923675\",\n \"1923699\",\n \"1923795\",\n \"1923808\",\n \"1923835\",\n \"1923996\",\n \"1924035\",\n \"1924047\",\n \"1924171\",\n \"1924181\",\n \"1924221\",\n \"1924241\",\n \"1924272\",\n \"1924315\",\n \"1924333\",\n \"1924447\",\n \"1924511\",\n \"1924522\",\n \"1924548\",\n \"1924564\",\n \"1924749\",\n \"1924755\",\n \"1924767\",\n \"1924772\",\n \"1924798\",\n \"1925355\",\n \"1925375\",\n \"1925409\",\n \"1925423\",\n \"1925542\",\n \"1925550\",\n \"1925584\",\n \"1925782\",\n \"1925800\",\n \"1925804\",\n \"1925960\",\n \"1925996\",\n \"1926044\",\n \"1926317\",\n \"1926384\",\n \"1926426\",\n \"1926526\",\n \"1926552\",\n \"1926588\",\n \"1926709\",\n \"1926780\",\n \"1926814\",\n \"1926818\",\n \"1926956\",\n \"1927299\",\n \"1927305\",\n \"1927317\",\n \"1927390\",\n \"1927405\",\n \"1927521\",\n \"1927696\",\n \"1927711\",\n \"1927718\",\n \"1927884\",\n \"1927901\",\n \"1927903\",\n \"1927916\",\n \"1927984\",\n \"1928008\",\n \"1928015\",\n \"1928054\",\n \"1928073\",\n \"1928213\",\n \"1928217\",\n \"1928254\",\n \"1928328\",\n \"1928373\",\n \"1928385\",\n \"1928404\",\n \"1928447\",\n \"1928581\",\n \"1928626\",\n \"1928632\",\n \"1928733\",\n \"1928753\",\n \"1928780\",\n \"1928917\",\n \"1928931\",\n \"1929039\",\n \"1929057\",\n \"1929128\",\n \"1929153\",\n \"1929768\",\n \"1930893\",\n \"1930950\",\n \"1931032\",\n \"1931092\",\n \"1931110\",\n \"1931125\",\n \"1931131\",\n \"1931144\",\n \"1931173\",\n \"1931187\",\n \"1931306\",\n \"1931309\",\n \"1931390\",\n \"1931495\",\n \"1931542\",\n \"1931560\",\n \"1931647\",\n \"1931775\",\n \"1931802\",\n \"1931823\",\n \"1931848\",\n \"1932039\",\n \"1932052\",\n \"1932134\",\n \"1932169\",\n \"1932182\",\n \"1932194\",\n \"1932323\",\n \"1932378\",\n \"1932450\",\n \"1932562\",\n \"1932574\",\n \"1932578\",\n \"1932636\",\n \"1932749\",\n \"1932810\",\n \"1932850\",\n \"1932878\",\n \"1932880\",\n \"1932904\",\n \"1932941\",\n \"1932963\",\n \"1933012\",\n \"1933083\",\n \"1933089\",\n \"1933256\",\n \"1933268\",\n \"1933579\",\n \"1933641\",\n \"1933677\",\n \"1933756\",\n \"1933795\",\n \"1933942\",\n \"1933996\",\n \"1934186\",\n \"1935356\",\n \"1935852\",\n \"1936473\",\n \"3255365\",\n \"3257152\",\n \"3258105\",\n \"4300267\",\n \"4300486\",\n \"4572640\",\n \"4705981\",\n \"4708919\",\n \"4709100\",\n \"4709103\",\n \"4709146\",\n \"8659047\",\n \"9334318\",\n \"9605252\",\n \"10777718\",\n \"1751979\",\n \"1752035\",\n \"1752100\",\n \"1752158\",\n \"1752234\",\n \"1752236\",\n \"1752277\",\n \"1752321\",\n \"1752361\",\n \"1752382\",\n \"1752474\",\n \"1752482\",\n \"1752533\",\n \"1752552\",\n \"1752650\",\n \"1752744\",\n \"1752804\",\n \"1752820\",\n \"1752848\",\n \"1752891\",\n \"1752899\",\n \"1752915\",\n \"1752944\",\n \"1752965\",\n \"1753080\",\n \"1753104\",\n \"1753147\",\n \"1753211\",\n \"1753224\",\n \"1753410\",\n \"1753458\",\n \"1753548\",\n \"1753594\",\n \"1753630\",\n \"1753657\",\n \"1753747\",\n \"1753802\",\n \"1753826\",\n \"1753830\",\n \"1753896\",\n \"1753921\",\n \"1753981\",\n \"3258147\",\n \"4408190\",\n \"4688624\",\n \"4702368\",\n \"4702379\",\n \"4703000\",\n \"4707000\",\n \"4707529\",\n \"4708698\",\n \"5105328\",\n \"7963991\",\n \"9600123\",\n \"1919119\",\n \"1919124\",\n \"1919127\",\n \"1919144\",\n \"1919150\",\n \"1919168\",\n \"1919175\",\n \"1919219\",\n \"1919227\",\n \"1919238\",\n \"1919243\",\n \"1919305\",\n \"1919315\",\n \"1919339\",\n \"1919351\",\n \"1919645\",\n \"1919659\",\n \"1919675\",\n \"1919696\",\n \"1919721\",\n \"1919919\",\n \"1919936\",\n \"1919950\",\n \"1919962\",\n \"1920160\",\n \"1920180\",\n \"1920190\",\n \"1920236\",\n \"1920261\",\n \"1920274\",\n \"1920283\",\n \"1920346\",\n \"1920412\",\n \"1920425\",\n \"1920451\",\n \"1920460\",\n \"1920465\",\n \"1920481\",\n \"1920513\",\n \"1920523\",\n \"1920551\",\n \"1920554\",\n \"1920570\",\n \"1920580\",\n \"1920583\",\n \"1920622\",\n \"1920682\",\n \"1920702\",\n \"1920704\",\n \"1920723\",\n \"1920785\",\n \"1920793\",\n \"1920808\",\n \"1920814\",\n \"3257351\",\n \"7236092\",\n \"7786896\",\n \"8213918\",\n \"8319926\",\n \"1748889\",\n \"1748902\",\n \"1749042\",\n \"1749068\",\n \"1749116\",\n \"1749137\",\n \"1749286\",\n \"1749401\",\n \"1749505\",\n \"1749660\",\n \"1749662\",\n \"1749712\",\n \"1749732\",\n \"1750313\",\n \"1750339\",\n \"1750759\",\n \"1751134\",\n \"5104758\",\n \"7777102\",\n \"8057237\",\n \"9103399\",\n \"9155713\",\n \"1757993\",\n \"1828308\",\n \"1828314\",\n \"1735487\",\n \"1735586\",\n \"4527338\",\n \"1758439\",\n \"1758446\",\n \"1731817\",\n \"1731859\",\n \"1855231\",\n \"1868834\",\n \"1868875\",\n \"1868887\",\n \"1869041\",\n \"1869056\",\n \"1869176\",\n \"1869237\",\n \"1869255\",\n \"4688465\",\n \"1992537\",\n \"10583848\",\n \"11462628\",\n \"11486436\",\n \"11491719\",\n \"11596224\",\n \"11783346\",\n \"11903902\",\n \"1954235\",\n \"1954313\",\n \"1954391\",\n \"1954478\",\n \"1954494\",\n \"1954512\",\n \"1954521\",\n \"1954555\",\n \"1954587\",\n \"1954875\",\n \"1954921\",\n \"1954924\",\n \"1955016\",\n \"1955038\",\n \"1955270\",\n \"1955304\",\n \"1955356\",\n \"1955408\",\n \"1955475\",\n \"1955495\",\n \"1955508\",\n \"1955551\",\n \"1955678\",\n \"1955716\",\n \"1955730\",\n \"1955752\",\n \"1955761\",\n \"1955804\",\n \"1955843\",\n \"1955898\",\n \"1955900\",\n \"1955981\",\n \"1955998\",\n \"1956214\",\n \"1956303\",\n \"1956364\",\n \"1956376\",\n \"1956415\",\n \"1956434\",\n \"1956495\",\n \"1956504\",\n \"1956522\",\n \"1956545\",\n \"1956709\",\n \"1956715\",\n \"1956824\",\n \"1956895\",\n \"1956900\",\n \"1956949\",\n \"1957057\",\n \"1957136\",\n \"1957172\",\n \"1957193\",\n \"1957281\",\n \"1957327\",\n \"1957367\",\n \"1957436\",\n \"1957459\",\n \"1957508\",\n \"1957545\",\n \"1957620\",\n \"1957829\",\n \"1957999\",\n \"1958023\",\n \"1958047\",\n \"1958056\",\n \"1958067\",\n \"1958104\",\n \"1958143\",\n \"1958238\",\n \"1958411\",\n \"1958489\",\n \"1958507\",\n \"1959339\",\n \"1959374\",\n \"1959381\",\n \"1959409\",\n \"1959486\",\n \"1959498\",\n \"1959541\",\n \"1959593\",\n \"1959635\",\n \"1959643\",\n \"1959662\",\n \"1959668\",\n \"1959781\",\n \"1959797\",\n \"1959834\",\n \"1959852\",\n \"1959873\",\n \"1959888\",\n \"1959997\",\n \"1960003\",\n \"1960016\",\n \"1960087\",\n \"1960098\",\n \"1960125\",\n \"1960162\",\n \"1960170\",\n \"1960193\",\n \"1960225\",\n \"1960410\",\n \"1960422\",\n \"1960500\",\n \"1960519\",\n \"1960570\",\n \"1960592\",\n \"1960628\",\n \"1960671\",\n \"1960844\",\n \"1960939\",\n \"1960943\",\n \"1960958\",\n \"1960966\",\n \"1961048\",\n \"1961066\",\n \"1961117\",\n \"1961145\",\n \"1961158\",\n \"1961179\",\n \"1961188\",\n \"1961229\",\n \"1961264\",\n \"1961334\",\n \"1961371\",\n \"1961383\",\n \"1961643\",\n \"1961716\",\n \"1961719\",\n \"1962047\",\n \"1962165\",\n \"1962369\",\n \"1962577\",\n \"1962632\",\n \"1962655\",\n \"1962676\",\n \"1962688\",\n \"1962704\",\n \"1962828\",\n \"1962830\",\n \"1962840\",\n \"1962857\",\n \"1962893\",\n \"1962932\",\n \"1962956\",\n \"1962995\",\n \"1963049\",\n \"1963055\",\n \"1963058\",\n \"1963165\",\n \"1963199\",\n \"1963296\",\n \"1963299\",\n \"1963418\",\n \"1963424\",\n \"1963445\",\n \"1963584\",\n \"1963618\",\n \"1963627\",\n \"1963630\",\n \"1963706\",\n \"1963753\",\n \"1963775\",\n \"1963777\",\n \"1963826\",\n \"1963835\",\n \"1963873\",\n \"1963933\",\n \"1964020\",\n \"1964040\",\n \"1964064\",\n \"1964067\",\n \"1964095\",\n \"1964131\",\n \"1964175\",\n \"1964246\",\n \"1964299\",\n \"1964392\",\n \"1964549\",\n \"1964562\",\n \"1964577\",\n \"1964696\",\n \"1964699\",\n \"1964714\",\n \"1964733\",\n \"1964835\",\n \"1964936\",\n \"1965018\",\n \"1965123\",\n \"1965633\",\n \"1965641\",\n \"1965663\",\n \"1965758\",\n \"1965881\",\n \"1965888\",\n \"1965967\",\n \"1966069\",\n \"1966159\",\n \"1966180\",\n \"1966193\",\n \"1966215\",\n \"1966235\",\n \"1966280\",\n \"1966340\",\n \"1966346\",\n \"1966360\",\n \"1966853\",\n \"1966883\",\n \"1966927\",\n \"1966929\",\n \"1966975\",\n \"1966982\",\n \"1967123\",\n \"1967196\",\n \"1967207\",\n \"1967210\",\n \"1967220\",\n \"1967234\",\n \"1967242\",\n \"1967263\",\n \"1967337\",\n \"1967427\",\n \"1967435\",\n \"1967444\",\n \"1967447\",\n \"1967583\",\n \"1967604\",\n \"1967660\",\n \"1967696\",\n \"1967699\",\n \"1967715\",\n \"1967722\",\n \"1968101\",\n \"1968135\",\n \"1968166\",\n \"1968199\",\n \"1968257\",\n \"1968271\",\n \"1968301\",\n \"1968306\",\n \"1968362\",\n \"1968537\",\n \"1968582\",\n \"1968643\",\n \"1968665\",\n \"1968683\",\n \"1968722\",\n \"1968827\",\n \"1968854\",\n \"1968925\",\n \"1968950\",\n \"1968975\",\n \"1969102\",\n \"1969122\",\n \"1969566\",\n \"1969571\",\n \"1969613\",\n \"1969918\",\n \"1970019\",\n \"1970091\",\n \"1970117\",\n \"1970120\",\n \"1970142\",\n \"1970157\",\n \"1970163\",\n \"1970179\",\n \"1970226\",\n \"1970264\",\n \"1970279\",\n \"1970314\",\n \"1970403\",\n \"1970435\",\n \"1970574\",\n \"1971819\",\n \"1971994\",\n \"1972072\",\n \"1972076\",\n \"1972097\",\n \"1972114\",\n \"1972404\",\n \"1972425\",\n \"1972461\",\n \"1972472\",\n \"1972604\",\n \"1972607\",\n \"1972689\",\n \"1972702\",\n \"1972707\",\n \"1972791\",\n \"1972822\",\n \"1972901\",\n \"1972997\",\n \"1973136\",\n \"1973159\",\n \"1973166\",\n \"1973239\",\n \"1973243\",\n \"1973295\",\n \"1973321\",\n \"1973331\",\n \"1973392\",\n \"1973405\",\n \"1973483\",\n \"1973488\",\n \"1973578\",\n \"1973718\",\n \"1973722\",\n \"1973909\",\n \"1975155\",\n \"1975197\",\n \"1975208\",\n \"1975278\",\n \"1975285\",\n \"1975292\",\n \"1975336\",\n \"1975361\",\n \"1975464\",\n \"1975542\",\n \"1975570\",\n \"1975577\",\n \"1975703\",\n \"1975714\",\n \"1975729\",\n \"1975783\",\n \"1975804\",\n \"1975885\",\n \"1976058\",\n \"1976118\",\n \"1976141\",\n \"1976155\",\n \"1976211\",\n \"1976240\",\n \"1976245\",\n \"1976250\",\n \"1976296\",\n \"1976321\",\n \"1976338\",\n \"1976344\",\n \"1976460\",\n \"1976496\",\n \"1976515\",\n \"1976638\",\n \"1976854\",\n \"1976884\",\n \"1976925\",\n \"1976930\",\n \"1976949\",\n \"1977104\",\n \"1977179\",\n \"1977295\",\n \"1977298\",\n \"1977323\",\n \"1977351\",\n \"1977402\",\n \"1977419\",\n \"1977757\",\n \"1977775\",\n \"1977811\",\n \"1977864\",\n \"1977960\",\n \"1977963\",\n \"1977986\",\n \"1978014\",\n \"1978019\",\n \"1978075\",\n \"1978112\",\n \"1978245\",\n \"1978273\",\n \"1978364\",\n \"1978451\",\n \"1978455\",\n \"1978481\",\n \"1978495\",\n \"1978506\",\n \"1978607\",\n \"1978643\",\n \"1978697\",\n \"1978732\",\n \"1978736\",\n \"1978749\",\n \"1978784\",\n \"1978814\",\n \"1978835\",\n \"1978893\",\n \"1978948\",\n \"1978974\",\n \"1978994\",\n \"1979019\",\n \"1979040\",\n \"1979106\",\n \"1979213\",\n \"1979243\",\n \"1979517\",\n \"1979554\",\n \"1979719\",\n \"1979727\",\n \"1980021\",\n \"1980033\",\n \"1980239\",\n \"1980263\",\n \"1980288\",\n \"1980342\",\n \"1980490\",\n \"1980504\",\n \"1980511\",\n \"1980556\",\n \"1980650\",\n \"1980718\",\n \"1981051\",\n \"1981142\",\n \"1981325\",\n \"1981449\",\n \"1981690\",\n \"1981717\",\n \"1981744\",\n \"1981778\",\n \"1981855\",\n \"1981933\",\n \"1981941\",\n \"1981987\",\n \"1981996\",\n \"1982006\",\n \"1982017\",\n \"1982147\",\n \"1982199\",\n \"1982289\",\n \"1982367\",\n \"1984142\",\n \"1984231\",\n \"1984651\",\n \"1984667\",\n \"1984731\",\n \"1984741\",\n \"1984909\",\n \"1984922\",\n \"1985058\",\n \"1985146\",\n \"1985258\",\n \"1985404\",\n \"1985484\",\n \"1985486\",\n \"1985489\",\n \"1985492\",\n \"1985507\",\n \"1985570\",\n \"1985578\",\n \"1985628\",\n \"1985702\",\n \"1985716\",\n \"1985728\",\n \"1985787\",\n \"1985925\",\n \"1985928\",\n \"1985934\",\n \"1985969\",\n \"1986081\",\n \"1986645\",\n \"1986772\",\n \"1986805\",\n \"1986845\",\n \"1986868\",\n \"1986905\",\n \"1986930\",\n \"1986939\",\n \"1986953\",\n \"1986997\",\n \"1987067\",\n \"1987141\",\n \"1987202\",\n \"1987269\",\n \"1987300\",\n \"1987326\",\n \"1987346\",\n \"1987509\",\n \"1987555\",\n \"1987626\",\n \"1987632\",\n \"1987645\",\n \"1987660\",\n \"1987711\",\n \"1987746\",\n \"1987792\",\n \"1987820\",\n \"1987849\",\n \"1987861\",\n \"1987995\",\n \"1988224\",\n \"1988251\",\n \"1988282\",\n \"1988304\",\n \"1988350\",\n \"1988388\",\n \"1988399\",\n \"1988485\",\n \"1988488\",\n \"1988503\",\n \"1988533\",\n \"1988760\",\n \"1988779\",\n \"1988815\",\n \"1988876\",\n \"1988887\",\n \"1988893\",\n \"1989045\",\n \"1989161\",\n \"1989580\",\n \"1989902\",\n \"1989927\",\n \"1989996\",\n \"1990136\",\n \"1990163\",\n \"1990193\",\n \"1990247\",\n \"1990257\",\n \"1990356\",\n \"1990367\",\n \"1990531\",\n \"1990591\",\n \"1990677\",\n \"1990989\",\n \"1991004\",\n \"1991120\",\n \"1991135\",\n \"1991234\",\n \"1991276\",\n \"1991279\",\n \"1991309\",\n \"1991325\",\n \"1991357\",\n \"1991401\",\n \"1991426\",\n \"1991467\",\n \"1991531\",\n \"1991777\",\n \"1991817\",\n \"1991843\",\n \"1991934\",\n \"1991946\",\n \"1992166\",\n \"1992168\",\n \"2080450\",\n \"3255832\",\n \"3256119\",\n \"3256294\",\n \"3256322\",\n \"3256356\",\n \"3256453\",\n \"3257150\",\n \"3258045\",\n \"4302220\",\n \"4302229\",\n \"4302289\",\n \"4404424\",\n \"4404732\",\n \"4405258\",\n \"4405439\",\n \"4406051\",\n \"4406069\",\n \"4406074\",\n \"4406551\",\n \"4406622\",\n \"4407697\",\n \"4407786\",\n \"4408085\",\n \"4523515\",\n \"4524069\",\n \"4524400\",\n \"4524792\",\n \"4524913\",\n \"4525072\",\n \"4525111\",\n \"4571921\",\n \"4573369\",\n \"4684017\",\n \"4684087\",\n \"4684253\",\n \"4684258\",\n \"4687117\",\n \"4688641\",\n \"4689025\",\n \"4689059\",\n \"4689628\",\n \"4695897\",\n \"4695929\",\n \"4702252\",\n \"4702588\",\n \"4702630\",\n \"4702642\",\n \"4702651\",\n \"4702781\",\n \"4702805\",\n \"4702831\",\n \"4702862\",\n \"4702877\",\n \"4702889\",\n \"4702891\",\n \"4702939\",\n \"4702953\",\n \"4703248\",\n \"4703670\",\n \"4703719\",\n \"4704098\",\n \"4704582\",\n \"4705145\",\n \"4705623\",\n \"4705796\",\n \"4705876\",\n \"4705882\",\n \"4705978\",\n \"4706585\",\n \"4706983\",\n \"4707100\",\n \"4707641\",\n \"4707685\",\n \"4708197\",\n \"4708288\",\n \"4708365\",\n \"4708709\",\n \"4709333\",\n \"5144176\",\n \"5146397\",\n \"5430609\",\n \"5734481\",\n \"7514692\",\n \"7543161\",\n \"7852351\",\n \"8107362\",\n \"8249110\",\n \"8314432\",\n \"8338704\",\n \"8407240\",\n \"9077304\",\n \"9182266\",\n \"9183600\",\n \"9210500\",\n \"9514086\",\n \"9601813\",\n \"1992205\",\n \"10661133\",\n \"10906002\",\n \"10962816\",\n \"10976134\",\n \"10988777\",\n \"10990846\",\n \"11024850\",\n \"11027113\",\n \"11057282\",\n \"11425419\",\n \"1942052\",\n \"1942086\",\n \"1942128\",\n \"1942234\",\n \"1942250\",\n \"1942255\",\n \"1942264\",\n \"1942324\",\n \"1942339\",\n \"1942369\",\n \"1942373\",\n \"1942404\",\n \"1942442\",\n \"1942503\",\n \"1942523\",\n \"1942552\",\n \"1942608\",\n \"1942628\",\n \"1942655\",\n \"1942669\",\n \"1942671\",\n \"1942686\",\n \"1942692\",\n \"1942755\",\n \"1942827\",\n \"1942846\",\n \"1942857\",\n \"1942876\",\n \"1942944\",\n \"1942996\",\n \"1943046\",\n \"1943068\",\n \"1943127\",\n \"1943165\",\n \"1943205\",\n \"1943211\",\n \"1943307\",\n \"1943357\",\n \"1943433\",\n \"1943469\",\n \"1943497\",\n \"1943555\",\n \"1943613\",\n \"1943627\",\n \"1943654\",\n \"1943753\",\n \"1943820\",\n \"1943934\",\n \"1943941\",\n \"1944003\",\n \"1944007\",\n \"1944103\",\n \"1944230\",\n \"1944270\",\n \"1944355\",\n \"1944409\",\n \"1944441\",\n \"1944474\",\n \"1944558\",\n \"1944586\",\n \"1944617\",\n \"1944742\",\n \"1944767\",\n \"1944774\",\n \"1944792\",\n \"1944831\",\n \"1944895\",\n \"1944946\",\n \"1944973\",\n \"1944985\",\n \"1945035\",\n \"1945078\",\n \"1945083\",\n \"1945113\",\n \"1945266\",\n \"1945298\",\n \"1945307\",\n \"1945390\",\n \"1945451\",\n \"1945528\",\n \"1945660\",\n \"1945809\",\n \"1945854\",\n \"1945902\",\n \"1945949\",\n \"1945956\",\n \"1945979\",\n \"1946009\",\n \"1946033\",\n \"1946052\",\n \"1946065\",\n \"1946071\",\n \"1946077\",\n \"1946084\",\n \"1946099\",\n \"1946141\",\n \"1946158\",\n \"1946263\",\n \"1946282\",\n \"1946331\",\n \"1946375\",\n \"1946413\",\n \"1946463\",\n \"1946473\",\n \"1946490\",\n \"1946517\",\n \"1946541\",\n \"1946554\",\n \"1946599\",\n \"1946630\",\n \"1946647\",\n \"1946718\",\n \"1946721\",\n \"1946753\",\n \"1946762\",\n \"1946766\",\n \"1946802\",\n \"1946900\",\n \"1946907\",\n \"1946979\",\n \"1947018\",\n \"1947024\",\n \"1947108\",\n \"1947144\",\n \"1947191\",\n \"1947272\",\n \"1947353\",\n \"1947384\",\n \"1947400\",\n \"1947405\",\n \"1947493\",\n \"1947504\",\n \"1947532\",\n \"1947624\",\n \"1947649\",\n \"1947701\",\n \"1947798\",\n \"1947815\",\n \"1947844\",\n \"1947872\",\n \"1947971\",\n \"1948041\",\n \"1948052\",\n \"1948058\",\n \"1948143\",\n \"1948367\",\n \"1948418\",\n \"1948434\",\n \"1948459\",\n \"1948519\",\n \"1948624\",\n \"1948816\",\n \"1948855\",\n \"1948868\",\n \"1948909\",\n \"1948936\",\n \"1948942\",\n \"1948964\",\n \"1949003\",\n \"1949041\",\n \"1949053\",\n \"1949089\",\n \"1949143\",\n \"1949308\",\n \"1949330\",\n \"1949334\",\n \"1949354\",\n \"1949424\",\n \"1949446\",\n \"1949486\",\n \"1949496\",\n \"1949517\",\n \"1949579\",\n \"1949610\",\n \"1949632\",\n \"1949647\",\n \"1949686\",\n \"1949704\",\n \"1950012\",\n \"1950015\",\n \"1950034\",\n \"1950046\",\n \"1950114\",\n \"1950148\",\n \"1950154\",\n \"1950166\",\n \"1950193\",\n \"1950200\",\n \"1950257\",\n \"1950299\",\n \"1950334\",\n \"1950360\",\n \"1950380\",\n \"1950406\",\n \"1950496\",\n \"1950566\",\n \"1950585\",\n \"1950649\",\n \"1950763\",\n \"1951061\",\n \"1951066\",\n \"1951093\",\n \"1951144\",\n \"1951213\",\n \"1951289\",\n \"1951332\",\n \"1951348\",\n \"3231212\",\n \"5142228\",\n \"5142691\",\n \"7881632\",\n \"8178582\",\n \"8331960\",\n \"8363558\",\n \"9262994\",\n \"1869438\",\n \"1869504\",\n \"1952875\",\n \"1952907\",\n \"1735631\",\n \"1735652\",\n \"1735814\",\n \"1735869\",\n \"3257930\",\n \"10677299\",\n \"11064851\",\n \"11902924\",\n \"12105049\",\n \"1758610\",\n \"1758718\",\n \"1758724\",\n \"1758765\",\n \"1758790\",\n \"1758812\",\n \"1758827\",\n \"1758873\",\n \"1759029\",\n \"1759152\",\n \"1759176\",\n \"1759329\",\n \"1759405\",\n \"1759552\",\n \"1759711\",\n \"1759797\",\n \"1759812\",\n \"1759878\",\n \"1759882\",\n \"1760088\",\n \"1760168\",\n \"1760260\",\n \"1760285\",\n \"1760355\",\n \"1760401\",\n \"1760447\",\n \"1760588\",\n \"1760678\",\n \"1760738\",\n \"1760849\",\n \"1760928\",\n \"1760946\",\n \"1761017\",\n \"1761132\",\n \"1761388\",\n \"1761401\",\n \"1761495\",\n \"1761550\",\n \"1761561\",\n \"1761728\",\n \"1761775\",\n \"1761787\",\n \"1761797\",\n \"1761857\",\n \"1761889\",\n \"1762232\",\n \"1762346\",\n \"1762605\",\n \"1762640\",\n \"1762666\",\n \"1762898\",\n \"1763285\",\n \"1763597\",\n \"1763693\",\n \"1763713\",\n \"1764140\",\n \"1764158\",\n \"1764234\",\n \"1764537\",\n \"1764670\",\n \"1764684\",\n \"1764709\",\n \"1764737\",\n \"1764916\",\n \"1764920\",\n \"1765154\",\n \"1765161\",\n \"1765207\",\n \"1765494\",\n \"1765601\",\n \"1765657\",\n \"1765726\",\n \"1765763\",\n \"1765877\",\n \"1765895\",\n \"1765949\",\n \"1765960\",\n \"1766066\",\n \"1766077\",\n \"1766123\",\n \"1766234\",\n \"1766265\",\n \"1766280\",\n \"1766366\",\n \"1766624\",\n \"1766708\",\n \"1766908\",\n \"1766914\",\n \"1767046\",\n \"1767093\",\n \"1767334\",\n \"1767360\",\n \"1767483\",\n \"1767509\",\n \"1767566\",\n \"1767590\",\n \"1767644\",\n \"1767714\",\n \"1767949\",\n \"1768106\",\n \"1768130\",\n \"1768136\",\n \"1768165\",\n \"1768222\",\n \"1768302\",\n \"1768411\",\n \"1768542\",\n \"1768561\",\n \"1768691\",\n \"1768949\",\n \"1768971\",\n \"1769008\",\n \"1769024\",\n \"1769051\",\n \"1769093\",\n \"1769110\",\n \"1769189\",\n \"1769208\",\n \"1769212\",\n \"1769504\",\n \"1769812\",\n \"1769933\",\n \"1769943\",\n \"1769945\",\n \"1769972\",\n \"1770123\",\n \"1770169\",\n \"1770274\",\n \"1770396\",\n \"1770488\",\n \"1770569\",\n \"1770592\",\n \"1770658\",\n \"1771356\",\n \"1771363\",\n \"1771501\",\n \"1771549\",\n \"1771866\",\n \"1771871\",\n \"1771980\",\n \"1772042\",\n \"1772092\",\n \"1772151\",\n \"1772155\",\n \"1772253\",\n \"1772359\",\n \"1772421\",\n \"1772455\",\n \"1772660\",\n \"1772926\",\n \"1773740\",\n \"1773781\",\n \"1773846\",\n \"1774090\",\n \"1774237\",\n \"1774251\",\n \"1774256\",\n \"1774269\",\n \"1774309\",\n \"1774357\",\n \"1774366\",\n \"1774778\",\n \"1774853\",\n \"1774917\",\n \"1774947\",\n \"1775029\",\n \"1775058\",\n \"1775081\",\n \"1775149\",\n \"1775275\",\n \"1775285\",\n \"1775298\",\n \"1775310\",\n \"1775505\",\n \"1775624\",\n \"1775633\",\n \"1775663\",\n \"1775784\",\n \"1775833\",\n \"1775864\",\n \"1775887\",\n \"1775910\",\n \"1775959\",\n \"1775969\",\n \"1775986\",\n \"1776166\",\n \"1776168\",\n \"1776181\",\n \"1776205\",\n \"1776299\",\n \"1776391\",\n \"1776413\",\n \"1776454\",\n \"1776576\",\n \"1776846\",\n \"1776879\",\n \"1776978\",\n \"1777101\",\n \"1777137\",\n \"1777243\",\n \"1777260\",\n \"1777560\",\n \"1777724\",\n \"1777760\",\n \"1777868\",\n \"1777971\",\n \"1778073\",\n \"1778108\",\n \"1778114\",\n \"1778136\",\n \"1778332\",\n \"1778497\",\n \"1778527\",\n \"1778574\",\n \"1778686\",\n \"1778695\",\n \"1779253\",\n \"1779380\",\n \"1779429\",\n \"1779630\",\n \"1779682\",\n \"1779957\",\n \"1780042\",\n \"1780068\",\n \"1780207\",\n \"1780269\",\n \"1780300\",\n \"1780844\",\n \"1780913\",\n \"1781086\",\n \"1781160\",\n \"1781226\",\n \"1781546\",\n \"1781683\",\n \"1781695\",\n \"1782029\",\n \"1782167\",\n \"1782317\",\n \"1782330\",\n \"1782414\",\n \"1782456\",\n \"1782460\",\n \"1782522\",\n \"1782524\",\n \"1782594\",\n \"1782607\",\n \"1782659\",\n \"1783087\",\n \"1783311\",\n \"1783344\",\n \"1783367\",\n \"1783394\",\n \"1783739\",\n \"1783783\",\n \"1783838\",\n \"1783845\",\n \"1783931\",\n \"1783955\",\n \"1784275\",\n \"1784342\",\n \"1784356\",\n \"1784395\",\n \"1784686\",\n \"1784696\",\n \"1784759\",\n \"1784809\",\n \"1784892\",\n \"1785140\",\n \"1785216\",\n \"1785279\",\n \"1785281\",\n \"1785305\",\n \"1785398\",\n \"1785439\",\n \"1785448\",\n \"1785723\",\n \"1785726\",\n \"1785833\",\n \"1785873\",\n \"1785931\",\n \"1786031\",\n \"1786307\",\n \"1786329\",\n \"1786447\",\n \"1786454\",\n \"1786513\",\n \"1786563\",\n \"1786570\",\n \"1786601\",\n \"1786690\",\n \"1786730\",\n \"1786807\",\n \"1786886\",\n \"1786916\",\n \"1786930\",\n \"1787061\",\n \"1787107\",\n \"1787399\",\n \"1787427\",\n \"1787496\",\n \"1787522\",\n \"1788033\",\n \"1788051\",\n \"1788069\",\n \"1788138\",\n \"1788322\",\n \"1788411\",\n \"1788466\",\n \"1788663\",\n \"1788678\",\n \"1788719\",\n \"1788724\",\n \"1788764\",\n \"1788844\",\n \"1788916\",\n \"1789061\",\n \"1789150\",\n \"1789210\",\n \"1789246\",\n \"1789286\",\n \"1789474\",\n \"1789503\",\n \"1789545\",\n \"1789628\",\n \"1789671\",\n \"1789826\",\n \"1789953\",\n \"1789978\",\n \"1790337\",\n \"1790356\",\n \"1790601\",\n \"1790726\",\n \"1790837\",\n \"1791315\",\n \"1791382\",\n \"1791585\",\n \"1791592\",\n \"1791654\",\n \"1791678\",\n \"1791756\",\n \"1791769\",\n \"1791792\",\n \"1791827\",\n \"1791843\",\n \"1791861\",\n \"1791868\",\n \"1792055\",\n \"1792280\",\n \"1792316\",\n \"1792324\",\n \"1792405\",\n \"1792635\",\n \"1792712\",\n \"1792752\",\n \"1792764\",\n \"1792816\",\n \"1792979\",\n \"1792984\",\n \"1793188\",\n \"1793190\",\n \"1793201\",\n \"1793222\",\n \"1793320\",\n \"1793366\",\n \"1793417\",\n \"1793452\",\n \"1793571\",\n \"1793585\",\n \"1793660\",\n \"1793684\",\n \"1793697\",\n \"1793856\",\n \"1793981\",\n \"1794099\",\n \"1794349\",\n \"1794423\",\n \"1794496\",\n \"1794509\",\n \"1794529\",\n \"1794570\",\n \"1794807\",\n \"1795061\",\n \"1795103\",\n \"1795126\",\n \"1795443\",\n \"1795478\",\n \"1795578\",\n \"1795782\",\n \"1796209\",\n \"1796225\",\n \"1796272\",\n \"1796302\",\n \"1796408\",\n \"1796469\",\n \"1796639\",\n \"1796782\",\n \"1796837\",\n \"1796957\",\n \"1797004\",\n \"1797586\",\n \"1797730\",\n \"1798027\",\n \"1798083\",\n \"1798089\",\n \"1798277\",\n \"1798362\",\n \"1798417\",\n \"1798902\",\n \"1799429\",\n \"1799669\",\n \"1799687\",\n \"1799771\",\n \"1799789\",\n \"1799868\",\n \"1799993\",\n \"1800016\",\n \"1800085\",\n \"1800142\",\n \"1802775\",\n \"3256116\",\n \"3257794\",\n \"3257836\",\n \"3257894\",\n \"4301067\",\n \"4301098\",\n \"4301121\",\n \"4301281\",\n \"4301305\",\n \"4404325\",\n \"4404729\",\n \"4405135\",\n \"4405245\",\n \"4405430\",\n \"4405983\",\n \"4406268\",\n \"4406360\",\n \"4407165\",\n \"4407218\",\n \"4407310\",\n \"4407354\",\n \"4407476\",\n \"4407554\",\n \"4533122\",\n \"4533124\",\n \"4533660\",\n \"4534405\",\n \"4534456\",\n \"4534532\",\n \"4534661\",\n \"4574082\",\n \"4687385\",\n \"4687388\",\n \"4687438\",\n \"4687494\",\n \"4687531\",\n \"4687545\",\n \"4687726\",\n \"4687791\",\n \"4687851\",\n \"4687877\",\n \"4687937\",\n \"4687943\",\n \"4687984\",\n \"4688073\",\n \"4688148\",\n \"4688298\",\n \"4688408\",\n \"4688714\",\n \"4688768\",\n \"4689528\",\n \"4703509\",\n \"4704034\",\n \"5108637\",\n \"5110374\",\n \"5110641\",\n \"5430630\",\n \"6116898\",\n \"6132796\",\n \"7236059\",\n \"7236098\",\n \"7384515\",\n \"7396883\",\n \"7704040\",\n \"7729420\",\n \"7742506\",\n \"7973780\",\n \"8109351\",\n \"8296807\",\n \"8379138\",\n \"8389051\",\n \"8407958\",\n \"8728355\",\n \"8782295\",\n \"8875114\",\n \"8875134\",\n \"8930863\",\n \"8963517\",\n \"8982056\",\n \"8997710\",\n \"9002818\",\n \"9060128\",\n \"9095083\",\n \"9106541\",\n \"9118632\",\n \"9131390\",\n \"9177300\",\n \"9189502\",\n \"9209436\",\n \"9340110\",\n \"9357810\",\n \"9457004\",\n \"9529506\",\n \"9564041\",\n \"10025997\",\n \"10800539\",\n \"10864898\",\n \"1822252\",\n \"1822307\",\n \"1822481\",\n \"1822545\",\n \"1822666\",\n \"1822778\",\n \"1822912\",\n \"1823292\",\n \"1823440\",\n \"1823479\",\n \"1823488\",\n \"1823572\",\n \"1823574\",\n \"1823601\",\n \"1823616\",\n \"1823636\",\n \"1823667\",\n \"1823698\",\n \"1823714\",\n \"1824079\",\n \"1824090\",\n \"1824174\",\n \"1824237\",\n \"1824246\",\n \"1824253\",\n \"1824255\",\n \"1824279\",\n \"1824326\",\n \"1824336\",\n \"1824350\",\n \"1824384\",\n \"1824440\",\n \"1824562\",\n \"1824661\",\n \"1824749\",\n \"1824762\",\n \"1824842\",\n \"1824870\",\n \"1824990\",\n \"1825057\",\n \"1825076\",\n \"1825121\",\n \"1825216\",\n \"1825235\",\n \"1825334\",\n \"1825340\",\n \"1825424\",\n \"1825444\",\n \"1825535\",\n \"1825551\",\n \"1825734\",\n \"1825783\",\n \"1825887\",\n \"1825919\",\n \"1825946\",\n \"1825951\",\n \"1825963\",\n \"1826016\",\n \"1826021\",\n \"1826045\",\n \"1826053\",\n \"1826107\",\n \"1826124\",\n \"1826153\",\n \"1826180\",\n \"1826192\",\n \"1826217\",\n \"1826417\",\n \"1826511\",\n \"1826572\",\n \"1826650\",\n \"1826821\",\n \"1827099\",\n \"1827111\",\n \"1827142\",\n \"1827158\",\n \"1827279\",\n \"1827342\",\n \"1827405\",\n \"1827428\",\n \"1827482\",\n \"1827506\",\n \"1827539\",\n \"1827547\",\n \"1827641\",\n \"1827686\",\n \"1827708\",\n \"1827714\",\n \"1827772\",\n \"1827798\",\n \"1827827\",\n \"1828102\",\n \"1828161\",\n \"1828267\",\n \"2048233\",\n \"3257662\",\n \"4689316\",\n \"4689790\",\n \"4695668\",\n \"4696100\",\n \"4702183\",\n \"5118829\",\n \"6133753\",\n \"9607541\",\n \"9740944\",\n \"10272567\",\n \"10416544\",\n \"11601386\",\n \"11748480\",\n \"11783984\",\n \"11879268\",\n \"1214429\",\n \"1892505\",\n \"1892536\",\n \"1892615\",\n \"1892625\",\n \"1892653\",\n \"1892700\",\n \"1892707\",\n \"1892804\",\n \"1892818\",\n \"1892833\",\n \"1892844\",\n \"1892890\",\n \"1892917\",\n \"1892942\",\n \"1892952\",\n \"1893128\",\n \"1893171\",\n \"1893282\",\n \"1893309\",\n \"1893327\",\n \"1893334\",\n \"1893338\",\n \"1893376\",\n \"1893378\",\n \"1893479\",\n \"1893521\",\n \"1893525\",\n \"1893971\",\n \"1894053\",\n \"1894055\",\n \"1894073\",\n \"1894097\",\n \"1894323\",\n \"1894354\",\n \"1894417\",\n \"1894469\",\n \"1894779\",\n \"1894922\",\n \"1895036\",\n \"1895130\",\n \"1895141\",\n \"1895152\",\n \"1895168\",\n \"1895235\",\n \"1895260\",\n \"1895438\",\n \"1895691\",\n \"1895732\",\n \"1895837\",\n \"1895859\",\n \"1895882\",\n \"1895908\",\n \"1896057\",\n \"1896080\",\n \"1896104\",\n \"1896124\",\n \"1896129\",\n \"1896175\",\n \"1896289\",\n \"1896310\",\n \"1896317\",\n \"1896605\",\n \"1896644\",\n \"1896746\",\n \"1896752\",\n \"1896755\",\n \"1896785\",\n \"1896799\",\n \"1896874\",\n \"1896877\",\n \"1896911\",\n \"1896917\",\n \"1896928\",\n \"1897636\",\n \"1897643\",\n \"1897659\",\n \"1897792\",\n \"1897807\",\n \"1897825\",\n \"1897886\",\n \"1897974\",\n \"1898000\",\n \"1898018\",\n \"1898215\",\n \"1898246\",\n \"1898248\",\n \"1898261\",\n \"1898343\",\n \"1898397\",\n \"1898410\",\n \"1898433\",\n \"1898474\",\n \"1898578\",\n \"1898587\",\n \"1898669\",\n \"1898683\",\n \"1898687\",\n \"1898853\",\n \"1898929\",\n \"1899046\",\n \"1899063\",\n \"1899069\",\n \"1899077\",\n \"1899181\",\n \"1899194\",\n \"1899830\",\n \"1899832\",\n \"1899856\",\n \"1899908\",\n \"1899913\",\n \"1899924\",\n \"1899929\",\n \"1899985\",\n \"1899991\",\n \"1900021\",\n \"1900039\",\n \"1900063\",\n \"1900111\",\n \"1900140\",\n \"1900889\",\n \"1900916\",\n \"1900919\",\n \"1900968\",\n \"1900982\",\n \"1901205\",\n \"1901256\",\n \"1901287\",\n \"1901337\",\n \"1901363\",\n \"1901470\",\n \"1901530\",\n \"1901577\",\n \"1901581\",\n \"1901729\",\n \"1901739\",\n \"1901776\",\n \"1901786\",\n \"1901823\",\n \"1901885\",\n \"1902105\",\n \"1902109\",\n \"1902206\",\n \"1902221\",\n \"1902275\",\n \"1902399\",\n \"1902425\",\n \"1902433\",\n \"1902519\",\n \"1902562\",\n \"1902610\",\n \"1902614\",\n \"1902619\",\n \"1902626\",\n \"1902644\",\n \"1902707\",\n \"1902795\",\n \"1902801\",\n \"1902813\",\n \"1902873\",\n \"1902993\",\n \"1903008\",\n \"1903019\",\n \"1903193\",\n \"1903601\",\n \"1903625\",\n \"1903637\",\n \"1903653\",\n \"1903656\",\n \"1903659\",\n \"1903673\",\n \"1904193\",\n \"1904271\",\n \"1904294\",\n \"1904380\",\n \"1904688\",\n \"1904817\",\n \"1904851\",\n \"1904981\",\n \"1905071\",\n \"1905123\",\n \"1905150\",\n \"1905319\",\n \"1905339\",\n \"1905450\",\n \"1906002\",\n \"1906139\",\n \"1906171\",\n \"1906451\",\n \"1906565\",\n \"1906714\",\n \"1907130\",\n \"1907355\",\n \"1907390\",\n \"1907398\",\n \"1907407\",\n \"1907726\",\n \"1907997\",\n \"1908109\",\n \"1908197\",\n \"1908298\",\n \"1908348\",\n \"1908354\",\n \"1908361\",\n \"1908573\",\n \"1908624\",\n \"1908757\",\n \"1908769\",\n \"1908788\",\n \"1908800\",\n \"1908980\",\n \"1909067\",\n \"1909106\",\n \"1909115\",\n \"1909124\",\n \"1909215\",\n \"1909217\",\n \"1909276\",\n \"1909297\",\n \"1909334\",\n \"1909428\",\n \"1909462\",\n \"1909588\",\n \"1909799\",\n \"1909804\",\n \"1909876\",\n \"1909881\",\n \"1909888\",\n \"1910363\",\n \"1910377\",\n \"1910384\",\n \"1910682\",\n \"1910771\",\n \"1910782\",\n \"1910796\",\n \"1911072\",\n \"1911078\",\n \"1911518\",\n \"1911573\",\n \"1911580\",\n \"1911627\",\n \"1911690\",\n \"1911763\",\n \"1911932\",\n \"1911943\",\n \"1912138\",\n \"1912157\",\n \"1912162\",\n \"1912319\",\n \"1912473\",\n \"1912488\",\n \"1912583\",\n \"1913046\",\n \"1913113\",\n \"1913456\",\n \"1914398\",\n \"1914692\",\n \"1914695\",\n \"1915017\",\n \"1915189\",\n \"1915248\",\n \"1915337\",\n \"1915371\",\n \"1915464\",\n \"1915497\",\n \"1915504\",\n \"1915513\",\n \"1915529\",\n \"1916334\",\n \"1916665\",\n \"1916677\",\n \"1916752\",\n \"1916765\",\n \"1916794\",\n \"1917796\",\n \"1917818\",\n \"1917887\",\n \"1918025\",\n \"1918071\",\n \"1918203\",\n \"1918214\",\n \"1918262\",\n \"1918291\",\n \"1918309\",\n \"1918594\",\n \"1918599\",\n \"1918607\",\n \"1918912\",\n \"1918933\",\n \"1918940\",\n \"1918999\",\n \"1919016\",\n \"3256512\",\n \"3257628\",\n \"4405001\",\n \"4408275\",\n \"4689644\",\n \"4702047\",\n \"4704221\",\n \"4704315\",\n \"4704380\",\n \"4704499\",\n \"5130576\",\n \"5131088\",\n \"5131972\",\n \"5133087\",\n \"5135400\",\n \"7236053\",\n \"7236069\",\n \"7510496\",\n \"7733971\",\n \"8636720\",\n \"8844327\",\n \"9042695\",\n \"9197007\",\n \"9550689\",\n \"9675443\",\n \"9759554\",\n \"1951358\",\n \"1951407\",\n \"1951430\",\n \"1951549\",\n \"1951569\",\n \"1951627\",\n \"1951642\",\n \"1951645\",\n \"1951655\",\n \"1951664\",\n \"1951744\",\n \"1951782\",\n \"1951788\",\n \"1951817\",\n \"1951819\",\n \"1951910\",\n \"1951912\",\n \"1952001\",\n \"1952029\",\n \"1952092\",\n \"1952118\",\n \"1952144\",\n \"1952174\",\n \"1952222\",\n \"1952259\",\n \"1952279\",\n \"1952300\",\n \"1952419\",\n \"1952446\",\n \"1952453\",\n \"1952526\",\n \"1952547\",\n \"1952607\",\n \"1952673\",\n \"1952702\",\n \"1952727\",\n \"1952736\",\n \"1952801\",\n \"1952827\",\n \"3256934\",\n \"4695875\",\n \"4708040\",\n \"4709268\",\n \"1832810\",\n \"1842986\",\n \"1853060\",\n \"1853074\",\n \"1853161\",\n \"5976899\",\n \"1868207\",\n \"1868327\",\n \"1868353\",\n \"1868393\",\n \"1868491\",\n \"1868497\",\n \"1868660\",\n \"4696228\",\n \"6007566\",\n \"9044302\",\n \"1941927\",\n \"1735093\",\n \"1735256\",\n \"1735272\",\n \"1735289\",\n \"1941561\",\n \"1941674\",\n \"1941716\",\n \"1941863\",\n \"1843855\",\n \"1843887\",\n \"1843897\",\n \"11955428\",\n \"1842040\",\n \"1842085\",\n \"1842184\",\n \"1842261\",\n \"1842436\",\n \"1842479\",\n \"1842684\",\n \"1842699\",\n \"1842803\",\n \"1842889\",\n \"1843000\",\n \"1843428\",\n \"1843441\",\n \"1843479\",\n \"1852499\",\n \"12246183\",\n \"1730471\",\n \"1730685\",\n \"1730705\",\n \"1730737\",\n \"1730763\",\n \"1730815\",\n \"1730935\",\n \"1731096\",\n \"1731220\",\n \"1731226\",\n \"1731363\",\n \"1731505\",\n \"1731584\",\n \"1731712\",\n \"1731748\",\n \"1731800\",\n \"1829593\",\n \"1994549\",\n \"3256584\",\n \"4688500\",\n \"4705852\",\n \"4708713\",\n \"4709303\",\n \"7568341\",\n \"1872346\",\n \"1878610\",\n \"1878653\",\n \"1878661\",\n \"1878678\",\n \"1878743\",\n \"1878750\",\n \"1878757\",\n \"1878808\",\n \"1878812\",\n \"1878835\",\n \"1878838\",\n \"1878989\",\n \"1879048\",\n \"1879124\",\n \"1879138\",\n \"1879158\",\n \"1879226\",\n \"1879271\",\n \"1879334\",\n \"1879347\",\n \"1879355\",\n \"1879396\",\n \"1879422\",\n \"1879428\",\n \"1879435\",\n \"1879451\",\n \"1879463\",\n \"1879487\",\n \"1879494\",\n \"1879512\",\n \"1879809\",\n \"1879915\",\n \"1880172\",\n \"1880351\",\n \"1880354\",\n \"1880423\",\n \"1880436\",\n \"1880444\",\n \"1880501\",\n \"1880506\",\n \"1880703\",\n \"1880711\",\n \"1880744\",\n \"1880792\",\n \"1880848\",\n \"1880855\",\n \"1880878\",\n \"1880977\",\n \"1881078\",\n \"1881085\",\n \"1881092\",\n \"1881102\",\n \"1881135\",\n \"1881145\",\n \"1881167\",\n \"1881178\",\n \"1881186\",\n \"1881206\",\n \"1881226\",\n \"1881296\",\n \"1881319\",\n \"1881357\",\n \"1881484\",\n \"1881495\",\n \"1881521\",\n \"1881601\",\n \"1881628\",\n \"1881764\",\n \"1881804\",\n \"1881825\",\n \"1881858\",\n \"1881870\",\n \"1882019\",\n \"1882028\",\n \"1882213\",\n \"1882217\",\n \"1882239\",\n \"1882249\",\n \"1882263\",\n \"1882309\",\n \"1882314\",\n \"1882354\",\n \"1882413\",\n \"1882752\",\n \"1882757\",\n \"1882784\",\n \"1882809\",\n \"1882877\",\n \"1882900\",\n \"1882902\",\n \"1882925\",\n \"1883019\",\n \"1883022\",\n \"1883035\",\n \"1883064\",\n \"1883116\",\n \"1883132\",\n \"1883364\",\n \"1883373\",\n \"1883389\",\n \"1883417\",\n \"1883459\",\n \"1883586\",\n \"1883632\",\n \"1883698\",\n \"1883828\",\n \"1883872\",\n \"1883890\",\n \"1883941\",\n \"1883950\",\n \"1883962\",\n \"1883990\",\n \"1884002\",\n \"1884090\",\n \"1884194\",\n \"1884225\",\n \"1884236\",\n \"1884425\",\n \"1884486\",\n \"1884668\",\n \"1884679\",\n \"1884683\",\n \"1884687\",\n \"1884699\",\n \"1884771\",\n \"1884789\",\n \"1884810\",\n \"1884832\",\n \"1884842\",\n \"1884886\",\n \"1884895\",\n \"1884921\",\n \"1884933\",\n \"1884939\",\n \"1884996\",\n \"1885008\",\n \"1885027\",\n \"1885190\",\n \"1885256\",\n \"1885564\",\n \"1885588\",\n \"1885639\",\n \"1885697\",\n \"1885731\",\n \"1885739\",\n \"1885792\",\n \"1885916\",\n \"1885924\",\n \"1885944\",\n \"1885946\",\n \"1886069\",\n \"1886102\",\n \"1886238\",\n \"1886248\",\n \"1886261\",\n \"1886268\",\n \"1886289\",\n \"1886376\",\n \"1886435\",\n \"1886474\",\n \"1886505\",\n \"1886576\",\n \"1886591\",\n \"1886649\",\n \"1886699\",\n \"1886711\",\n \"1886725\",\n \"1886760\",\n \"1886832\",\n \"1886921\",\n \"1886948\",\n \"1886950\",\n \"1886993\",\n \"1887021\",\n \"1887028\",\n \"1887032\",\n \"1887048\",\n \"1887269\",\n \"1887308\",\n \"1887335\",\n \"1887457\",\n \"1887460\",\n \"1887463\",\n \"1887501\",\n \"1887564\",\n \"1887573\",\n \"1887584\",\n \"1887632\",\n \"1887640\",\n \"1887682\",\n \"1887721\",\n \"1888041\",\n \"1888256\",\n \"1888291\",\n \"1888299\",\n \"1888308\",\n \"1888334\",\n \"1888342\",\n \"1888406\",\n \"1888428\",\n \"1888455\",\n \"1888536\",\n \"1888562\",\n \"1888578\",\n \"1888594\",\n \"1888618\",\n \"1888641\",\n \"1888688\",\n \"1888698\",\n \"1888885\",\n \"1888933\",\n \"1888956\",\n \"1889027\",\n \"1889037\",\n \"1889065\",\n \"1889233\",\n \"1889266\",\n \"1889286\",\n \"1889295\",\n \"1889343\",\n \"1889366\",\n \"1889380\",\n \"1889530\",\n \"1889533\",\n \"1889540\",\n \"1889551\",\n \"1889900\",\n \"1889936\",\n \"1890011\",\n \"1890026\",\n \"1890044\",\n \"1890086\",\n \"1890094\",\n \"1890111\",\n \"1890245\",\n \"1890256\",\n \"1890281\",\n \"1890345\",\n \"1890365\",\n \"1890369\",\n \"1891030\",\n \"1891043\",\n \"1891047\",\n \"1891054\",\n \"1891073\",\n \"1891127\",\n \"1891152\",\n \"1891231\",\n \"1891297\",\n \"1891305\",\n \"1891353\",\n \"1891506\",\n \"1891594\",\n \"1891928\",\n \"1892130\",\n \"1892238\",\n \"1892295\",\n \"1892303\",\n \"1892318\",\n \"1892354\",\n \"1892404\",\n \"1892453\",\n \"3256169\",\n \"3257220\",\n \"3257225\",\n \"3258127\",\n \"4406481\",\n \"4577617\",\n \"4684088\",\n \"4687205\",\n \"4687250\",\n \"4687253\",\n \"4687264\",\n \"4688533\",\n \"4689667\",\n \"4695734\",\n \"4703048\",\n \"4703308\",\n \"4704716\",\n \"4704719\",\n \"4704946\",\n \"4704959\",\n \"4707698\",\n \"7739898\",\n \"8194136\",\n \"8317469\",\n \"8406574\",\n \"8494978\",\n \"8828194\",\n \"8843351\",\n \"8983556\",\n \"9020610\",\n \"9078027\",\n \"9878063\",\n \"1846094\",\n \"1846239\",\n \"1939594\",\n \"1830873\",\n \"1830909\",\n \"1831096\",\n \"1831127\",\n \"1831270\",\n \"1831272\",\n \"1731291\",\n \"1853239\",\n \"1853306\",\n \"1853431\",\n \"1853516\",\n \"1853563\",\n \"1853583\",\n \"1853643\",\n \"1853850\",\n \"1853873\",\n \"1854016\",\n \"1854023\",\n \"1854108\",\n \"1854160\",\n \"1854245\",\n \"1854255\",\n \"1854280\",\n \"1854326\",\n \"1854387\",\n \"1854459\",\n \"1854565\",\n \"1854610\",\n \"1854789\",\n \"1854815\",\n \"1854845\",\n \"1854905\",\n \"4707419\",\n \"6757561\",\n \"7494486\",\n \"8832257\",\n \"9046214\",\n \"9212903\",\n \"1858614\",\n \"1858636\",\n \"1858640\",\n \"1858658\",\n \"1858672\",\n \"1858684\",\n \"1858716\",\n \"1858722\",\n \"1858866\",\n \"1858921\",\n \"1858971\",\n \"1859036\",\n \"1859059\",\n \"1859070\",\n \"1859082\",\n \"1859284\",\n \"1859311\",\n \"1859451\",\n \"1859454\",\n \"1859503\",\n \"1859540\",\n \"1859547\",\n \"1859925\",\n \"1859936\",\n \"1860010\",\n \"1860060\",\n \"4406145\",\n \"4708885\",\n \"7641205\",\n \"8331787\",\n \"8744407\",\n \"9077410\",\n \"9260167\",\n \"11654220\",\n \"11715392\",\n \"1864813\",\n \"1864888\",\n \"1864901\",\n \"1865097\",\n \"1865294\",\n \"1865361\",\n \"1865411\",\n \"1865543\",\n \"1865591\",\n \"1865647\",\n \"1865704\",\n \"1865750\",\n \"1865826\",\n \"1865838\",\n \"1865859\",\n \"1865866\",\n \"1865923\",\n \"1865957\",\n \"1866221\",\n \"1866248\",\n \"1866293\",\n \"1866333\",\n \"1866345\",\n \"1866416\",\n \"1866475\",\n \"1866597\",\n \"1866812\",\n \"1866898\",\n \"1866912\",\n \"1866975\",\n \"1866984\",\n \"1867018\",\n \"1867046\",\n \"1867229\",\n \"1867268\",\n \"1867280\",\n \"1867305\",\n \"1867343\",\n \"1867412\",\n \"1867481\",\n \"1867545\",\n \"1867669\",\n \"1867674\",\n \"1867739\",\n \"1867761\",\n \"1867780\",\n \"1867783\",\n \"1867810\",\n \"1867983\",\n \"1867998\",\n \"1868017\",\n \"1868048\",\n \"4688975\",\n \"4705534\",\n \"4705630\",\n \"4705637\",\n \"4705641\",\n \"4705666\",\n \"5124670\",\n \"1736266\",\n \"1841459\",\n \"1841475\",\n \"1841486\",\n \"1841529\",\n \"4695998\",\n \"10268975\",\n \"10283055\",\n \"1861408\",\n \"1861428\",\n \"1861448\",\n \"1861476\",\n \"1861483\",\n \"1861521\",\n \"1861543\",\n \"1861552\",\n \"1861578\",\n \"1861601\",\n \"1861607\",\n \"1861659\",\n \"1861757\",\n \"1861768\",\n \"1861796\",\n \"1861878\",\n \"1861897\",\n \"1861930\",\n \"1861962\",\n \"1861971\",\n \"1861997\",\n \"1862020\",\n \"1862031\",\n \"1862058\",\n \"1862076\",\n \"1862247\",\n \"1862280\",\n \"1862288\",\n \"1862391\",\n \"1862420\",\n \"1862542\",\n \"1862560\",\n \"1862568\",\n \"1862655\",\n \"1862681\",\n \"1862914\",\n \"1862922\",\n \"1862988\",\n \"1863017\",\n \"1863031\",\n \"1863074\",\n \"1863091\",\n \"1863101\",\n \"1863132\",\n \"1863163\",\n \"1863281\",\n \"1863292\",\n \"1863349\",\n \"1863351\",\n \"1863363\",\n \"1863382\",\n \"1863385\",\n \"1863395\",\n \"1863411\",\n \"1863413\",\n \"1863457\",\n \"1863486\",\n \"1863583\",\n \"1863638\",\n \"1863644\",\n \"1863647\",\n \"1863693\",\n \"1863697\",\n \"1863702\",\n \"1863713\",\n \"1863752\",\n \"1863755\",\n \"1863825\",\n \"1863827\",\n \"1863846\",\n \"1863852\",\n \"1863877\",\n \"1863936\",\n \"1863942\",\n \"1863953\",\n \"1863956\",\n \"1864124\",\n \"1864132\",\n \"1864141\",\n \"1864153\",\n \"1864203\",\n \"1864258\",\n \"1864315\",\n \"1864355\",\n \"1864404\",\n \"1864537\",\n \"1864562\",\n \"1864584\",\n \"1864760\",\n \"1864782\",\n \"4703444\",\n \"4703460\",\n \"4705037\",\n \"4706738\",\n \"5123811\",\n \"7842819\",\n \"8095945\",\n \"8710303\",\n \"9197112\",\n \"1992572\",\n \"1992586\",\n \"1992729\",\n \"1992732\",\n \"1992877\",\n \"1992906\",\n \"1992944\",\n \"1992973\",\n \"1992975\",\n \"1993011\",\n \"1993034\",\n \"1993042\",\n \"1993044\",\n \"1993403\",\n \"1993451\",\n \"1993564\",\n \"1993634\",\n \"1993640\",\n \"4618976\",\n \"7772509\",\n \"1939401\",\n \"4406291\",\n \"1953190\",\n \"1953325\",\n \"1953347\",\n \"1953396\",\n \"1953411\",\n \"1953490\",\n \"1953522\",\n \"1953540\",\n \"1953948\",\n \"1953969\",\n \"1953971\",\n \"1953975\",\n \"1953996\",\n \"1954024\",\n \"1954033\",\n \"1954038\",\n \"1954074\",\n \"1954083\",\n \"1954119\",\n \"4707050\",\n \"1860106\",\n \"1860109\",\n \"1830030\",\n \"1830036\",\n \"1830098\",\n \"1830355\",\n \"1830379\",\n \"1830497\",\n \"1830507\",\n \"1830533\",\n \"1830535\",\n \"1830581\",\n \"1830630\",\n \"1830799\",\n \"1754133\",\n \"1754176\",\n \"1754253\",\n \"1754269\",\n \"1754315\",\n \"1754329\",\n \"1754344\",\n \"1754391\",\n \"1754412\",\n \"1754463\",\n \"1754508\",\n \"1754609\",\n \"1754618\",\n \"1754799\",\n \"1754857\",\n \"1754901\",\n \"1754916\",\n \"1754927\",\n \"1755125\",\n \"1755149\",\n \"1755233\",\n \"1755294\",\n \"1757647\",\n \"1757668\",\n \"1757834\",\n \"1757850\",\n \"1757883\",\n \"4572392\",\n \"4689458\",\n \"4709287\",\n \"7551965\",\n \"9046977\",\n \"1830657\",\n \"1953000\",\n \"1953102\",\n \"1953159\",\n \"1939616\",\n \"1751482\",\n \"1751519\",\n \"1751552\",\n \"1751655\",\n \"1751774\",\n \"1751789\",\n \"1829282\",\n \"1829298\",\n \"1829391\",\n \"1854910\",\n \"1854934\",\n \"1855355\",\n \"1855383\",\n \"1855394\",\n \"1855624\",\n \"1855745\",\n \"1855776\",\n \"1855800\",\n \"1855955\",\n \"1856000\",\n \"1856086\",\n \"1856274\",\n \"1856286\",\n \"1856344\",\n \"1856373\",\n \"1856382\",\n \"1856514\",\n \"1856580\",\n \"1856586\",\n \"1856615\",\n \"1856650\",\n \"1856766\",\n \"1856845\",\n \"1856949\",\n \"1857014\",\n \"1857207\",\n \"1857231\",\n \"1857569\",\n \"1857624\",\n \"1857773\",\n \"1857782\",\n \"1857808\",\n \"1857825\",\n \"1857968\",\n \"1858055\",\n \"1858281\",\n \"1858313\",\n \"1858396\",\n \"1858522\",\n \"1858556\",\n \"1856880\",\n \"10175914\",\n \"1936964\",\n \"1936968\",\n \"1936987\",\n \"1937063\",\n \"1937188\",\n \"1937440\",\n \"1937489\",\n \"1937511\",\n \"1937519\",\n \"1937555\",\n \"1937592\",\n \"1937617\",\n \"1938213\",\n \"1938225\",\n \"1938238\",\n \"1939085\",\n \"1939129\",\n \"1939152\",\n \"1939221\",\n \"1939297\",\n \"1939301\",\n \"1939330\",\n \"1939342\",\n \"5141261\",\n \"7714017\",\n \"1856367\",\n \"1856393\",\n \"1856417\",\n \"1856554\",\n \"1857689\",\n \"1858294\",\n \"1858529\",\n \"12031311\",\n \"12076089\",\n \"12152411\",\n \"1555575\",\n \"1833476\",\n \"1833495\",\n \"1833543\",\n \"1833560\",\n \"1833568\",\n \"1833578\",\n \"1833623\",\n \"1833651\",\n \"1833663\",\n \"1833818\",\n \"1834431\",\n \"1834588\",\n \"1834737\",\n \"1834827\",\n \"1835027\",\n \"1835077\",\n \"1835097\",\n \"1835118\",\n \"1835151\",\n \"1835344\",\n \"1835366\",\n \"1835499\",\n \"1835546\",\n \"1835599\",\n \"1835641\",\n \"1835688\",\n \"1835789\",\n \"1835820\",\n \"1836103\",\n \"1836865\",\n \"1836870\",\n \"1836872\",\n \"1836898\",\n \"1837045\",\n \"1837050\",\n \"1837148\",\n \"1837168\",\n \"1837568\",\n \"1837571\",\n \"1837649\",\n \"1837816\",\n \"1837898\",\n \"1838028\",\n \"1838044\",\n \"1838215\",\n \"1838242\",\n \"1838332\",\n \"1838624\",\n \"1838665\",\n \"1838956\",\n \"1838964\",\n \"1839316\",\n \"1839361\",\n \"1839399\",\n \"1839480\",\n \"1839559\",\n \"1839730\",\n \"1839906\",\n \"1840223\",\n \"1840257\",\n \"1840664\",\n \"1841100\",\n \"1841152\",\n \"1841169\",\n \"1841220\",\n \"1841301\",\n \"1841303\",\n \"3256568\",\n \"3257514\",\n \"4406889\",\n \"4573720\",\n \"4576177\",\n \"4684520\",\n \"4684590\",\n \"4684781\",\n \"4684879\",\n \"4684892\",\n \"4684924\",\n \"4684951\",\n \"4685628\",\n \"4685777\",\n \"4685809\",\n \"4685979\",\n \"4686350\",\n \"4686384\",\n \"4686517\",\n \"4686655\",\n \"4686696\",\n \"4686699\",\n \"4686843\",\n \"4686955\",\n \"8697176\",\n \"12180481\",\n \"1800236\",\n \"1800430\",\n \"1800437\",\n \"1800464\",\n \"1800482\",\n \"1800518\",\n \"1800523\",\n \"1800542\",\n \"1800639\",\n \"1800662\",\n \"1800668\",\n \"1800838\",\n \"1800845\",\n \"1800870\",\n \"1800879\",\n \"1800891\",\n \"1800918\",\n \"1800930\",\n \"1800952\",\n \"1800985\",\n \"1800996\",\n \"1801046\",\n \"1801072\",\n \"1801082\",\n \"1801085\",\n \"1801146\",\n \"1801195\",\n \"1801203\",\n \"1801278\",\n \"1801431\",\n \"1801449\",\n \"1801487\",\n \"1801501\",\n \"1801516\",\n \"1801758\",\n \"1801990\",\n \"1802070\",\n \"1802109\",\n \"1802118\",\n \"1802159\",\n \"1802213\",\n \"1802234\",\n \"1802269\",\n \"1802330\",\n \"1802660\",\n \"1802779\",\n \"1802864\",\n \"1802886\",\n \"1802894\",\n \"1802935\",\n \"1802997\",\n \"4405493\",\n \"4709474\",\n \"5114254\",\n \"9585354\"\n ],\n [\n \"10820875\",\n \"1933999\",\n \"3256826\",\n \"3527\",\n \"3528\",\n \"3529\",\n \"3530\",\n \"3531\",\n \"3551\",\n \"3552\",\n \"3553\",\n \"3554\",\n \"3555\",\n \"3556\",\n \"3558\",\n \"3563\",\n \"4300662\",\n \"4300664\",\n \"4300668\",\n \"4525436\",\n \"4525465\",\n \"4527533\",\n \"4528997\",\n \"4532185\",\n \"4534947\",\n \"4538\",\n \"4542\",\n \"4547\",\n \"4554\",\n \"4705755\",\n \"4864\",\n \"4865\",\n \"4866\",\n \"4867\",\n \"4868\",\n \"4870\",\n \"4871\",\n \"5318\",\n \"5320\",\n \"5333\",\n \"5336\",\n \"5338\",\n \"5339\",\n \"5340\",\n \"5343\",\n \"5345\",\n \"5473\",\n \"5474\",\n \"5481\",\n \"5487\",\n \"5734720\",\n \"6165\",\n \"6166\",\n \"6929\",\n \"6946\",\n \"6947\",\n \"6948\",\n \"6949\",\n \"6950\",\n \"6951\",\n \"6953\",\n \"6954\",\n \"6956\",\n \"7014\",\n \"7015\",\n \"7016\",\n \"7017\",\n \"7294\",\n \"7297\",\n \"8025\",\n \"8832\",\n \"8833\",\n \"8834\",\n \"8836\",\n \"8838\",\n \"8839\",\n \"8840\",\n \"8841\",\n \"8855\",\n \"8856\",\n \"8860\",\n \"8861\",\n \"8863\",\n \"8864\",\n \"8865\",\n \"8866\",\n \"8868\",\n \"8870\",\n \"8871\",\n \"8872\",\n \"8873\",\n \"8874\",\n \"8875\",\n \"9122734\",\n \"9407\",\n \"9408\",\n \"9409\",\n \"9410\",\n \"9412\",\n \"9414744\",\n \"9417\",\n \"9541689\",\n \"9689\",\n \"9717\"\n ]\n ],\n \"parents\": [\n [\n 0,\n 1,\n 2,\n 3,\n 3,\n 3,\n 3,\n 4,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 12,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 16,\n 16,\n 17,\n 18,\n 19,\n 20,\n 20,\n 20,\n 21,\n 21,\n 22,\n 23,\n 24,\n 25,\n 26,\n 27,\n 28,\n 29,\n 29,\n 29,\n 30,\n 30,\n 30,\n 30,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 32,\n 33,\n 34,\n 35,\n 35,\n 35,\n 36,\n 37,\n 37,\n 38,\n 39,\n 39,\n 40,\n 40,\n 41,\n 41,\n 42,\n 42,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 45,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 54,\n 54,\n 54,\n 55,\n 55,\n 56,\n 56,\n 57,\n 57,\n 57,\n 58,\n 58,\n 58,\n 59,\n 60,\n 61,\n 61,\n 61,\n 61,\n 62,\n 63,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 67,\n 67,\n 67,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 71,\n 71,\n 71,\n 72,\n 72,\n 73,\n 74,\n 75,\n 76,\n 76,\n 77,\n 78,\n 78,\n 79,\n 79,\n 79,\n 79,\n 80,\n 80,\n 81,\n 82,\n 83,\n 84,\n 85,\n 86,\n 86,\n 86,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 93,\n 94,\n 95,\n 96,\n 97,\n 98,\n 99,\n 99,\n 100,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 104,\n 104,\n 105,\n 105,\n 105,\n 105,\n 106,\n 107,\n 107,\n 107,\n 108,\n 109,\n 110,\n 111,\n 112,\n 113,\n 114,\n 114,\n 114,\n 114,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 115,\n 116,\n 116,\n 116,\n 117,\n 117,\n 118,\n 118,\n 119,\n 119,\n 120,\n 121,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 122,\n 123,\n 123,\n 124,\n 124,\n 125,\n 126,\n 127,\n 128,\n 128,\n 128,\n 128,\n 129,\n 129,\n 129,\n 130,\n 131,\n 131,\n 132,\n 132,\n 132,\n 133,\n 134,\n 135,\n 135,\n 135,\n 136,\n 137,\n 137,\n 137,\n 137,\n 137,\n 138,\n 138,\n 139,\n 140,\n 140,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 141,\n 142,\n 142,\n 142,\n 143,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 144,\n 145,\n 146,\n 147,\n 147,\n 148,\n 149,\n 149,\n 149,\n 150,\n 151,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 152,\n 153,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 154,\n 155,\n 156,\n 156,\n 156,\n 156,\n 157,\n 158,\n 159,\n 159,\n 160,\n 160,\n 161,\n 161,\n 162,\n 162,\n 162,\n 163,\n 164,\n 164,\n 165,\n 166,\n 166,\n 166,\n 167,\n 168,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 176,\n 176,\n 176,\n 176,\n 177,\n 177,\n 178,\n 179,\n 180,\n 181,\n 181,\n 182,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 183,\n 184,\n 185,\n 185,\n 186,\n 187,\n 187,\n 187,\n 187,\n 188,\n 189,\n 190,\n 190,\n 190,\n 191,\n 191,\n 191,\n 191,\n 191,\n 192,\n 193,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 194,\n 195,\n 195,\n 195,\n 195,\n 196,\n 197,\n 197,\n 197,\n 198,\n 198,\n 198,\n 199,\n 199,\n 199,\n 200,\n 200,\n 201,\n 201,\n 201,\n 202,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 209,\n 209,\n 210,\n 211,\n 212,\n 213,\n 213,\n 213,\n 213,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 214,\n 215,\n 216,\n 217,\n 218,\n 218,\n 219,\n 220,\n 221,\n 222,\n 223,\n 224,\n 225,\n 226,\n 227,\n 227,\n 228,\n 229,\n 229,\n 229,\n 230,\n 231,\n 231,\n 232,\n 233,\n 234,\n 234,\n 235,\n 236,\n 237,\n 237,\n 237,\n 237,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 238,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 239,\n 240,\n 241,\n 241,\n 242,\n 243,\n 243,\n 243,\n 244,\n 245,\n 246,\n 247,\n 247,\n 248,\n 249,\n 250,\n 251,\n 251,\n 251,\n 252,\n 253,\n 253,\n 253,\n 253,\n 253,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 254,\n 255,\n 256,\n 257,\n 258,\n 259,\n 260,\n 261,\n 262,\n 263,\n 263,\n 263,\n 264,\n 265,\n 266,\n 266,\n 266,\n 267,\n 268,\n 268,\n 268,\n 268,\n 268,\n 268,\n 269,\n 270,\n 271,\n 271,\n 272,\n 272,\n 272,\n 272,\n 273,\n 274,\n 275,\n 276,\n 277,\n 277,\n 278,\n 278,\n 279,\n 280,\n 281,\n 282,\n 283,\n 283,\n 284,\n 285,\n 285,\n 286,\n 287,\n 288,\n 288,\n 288,\n 288,\n 289,\n 289,\n 290,\n 290,\n 291,\n 291,\n 291,\n 291,\n 291,\n 291,\n 292,\n 293,\n 294,\n 295,\n 296,\n 297,\n 297,\n 297,\n 298,\n 298,\n 298,\n 298,\n 299,\n 299,\n 299,\n 299,\n 299,\n 300,\n 301,\n 301,\n 302,\n 303,\n 303,\n 304,\n 305,\n 305,\n 306,\n 307,\n 308,\n 309,\n 309,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 310,\n 311,\n 312,\n 312,\n 313,\n 314,\n 315,\n 316,\n 317,\n 318,\n 318,\n 319,\n 320,\n 321,\n 322,\n 322,\n 322,\n 322,\n 323,\n 324,\n 324,\n 325,\n 326,\n 327,\n 328,\n 329,\n 330,\n 330,\n 330,\n 331,\n 332,\n 333,\n 334,\n 334,\n 334,\n 334,\n 335,\n 335,\n 335,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 336,\n 337,\n 337,\n 338,\n 339,\n 339,\n 339,\n 339,\n 340,\n 340,\n 341,\n 342,\n 342,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 343,\n 344,\n 345,\n 345,\n 346,\n 347,\n 347,\n 348,\n 348,\n 349,\n 350,\n 351,\n 351,\n 352,\n 353,\n 354,\n 355,\n 355,\n 355,\n 355,\n 356,\n 356,\n 357,\n 357,\n 357,\n 357,\n 358,\n 359,\n 360,\n 360,\n 361,\n 362,\n 363,\n 364,\n 365,\n 366,\n 367,\n 368,\n 369,\n 369,\n 370,\n 370,\n 371,\n 371,\n 371,\n 371,\n 372,\n 373,\n 373,\n 374,\n 375,\n 375,\n 376,\n 376,\n 376,\n 377,\n 378,\n 379,\n 379,\n 379,\n 380,\n 381,\n 381,\n 382,\n 383,\n 384,\n 385,\n 385,\n 385,\n 385,\n 385,\n 386,\n 386,\n 386,\n 387,\n 387,\n 387,\n 387,\n 387,\n 387,\n 388,\n 389,\n 390,\n 391,\n 392,\n 393,\n 393,\n 394,\n 395,\n 395,\n 395,\n 396,\n 396,\n 396,\n 397,\n 398,\n 398,\n 398,\n 398,\n 398,\n 399,\n 400,\n 401,\n 401,\n 402,\n 402,\n 402,\n 402,\n 402,\n 402,\n 403,\n 404,\n 405,\n 405,\n 406,\n 406,\n 406,\n 407,\n 407,\n 408,\n 409,\n 410,\n 411,\n 412,\n 413,\n 414,\n 415,\n 415,\n 415,\n 416,\n 417,\n 418,\n 418,\n 419,\n 420,\n 420,\n 420,\n 421,\n 422,\n 422,\n 422,\n 422,\n 423,\n 424,\n 425,\n 425,\n 425,\n 425,\n 426,\n 426,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 427,\n 428,\n 428,\n 429,\n 430,\n 431,\n 432,\n 433,\n 433,\n 434,\n 435,\n 436,\n 436,\n 437,\n 437,\n 437,\n 437,\n 437,\n 438,\n 438,\n 438,\n 439,\n 439,\n 440,\n 441,\n 441,\n 441,\n 442,\n 443,\n 444,\n 445,\n 446,\n 447,\n 447,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 448,\n 449,\n 450,\n 451,\n 452,\n 453,\n 454,\n 455,\n 456,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 457,\n 458,\n 458,\n 458,\n 458,\n 459,\n 460,\n 461,\n 461,\n 462,\n 463,\n 463,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 464,\n 465,\n 466,\n 467,\n 468,\n 468,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 469,\n 470,\n 470,\n 471,\n 472,\n 472,\n 473,\n 474,\n 475,\n 475,\n 476,\n 476,\n 476,\n 477,\n 478,\n 479,\n 479,\n 479,\n 479,\n 479,\n 479,\n 480,\n 480,\n 481,\n 482,\n 482,\n 483,\n 483,\n 483,\n 484,\n 485,\n 485,\n 486,\n 486,\n 487,\n 488,\n 489,\n 490,\n 490,\n 491,\n 492,\n 492,\n 492,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 493,\n 494,\n 495,\n 495,\n 495,\n 495,\n 496,\n 497,\n 497,\n 497,\n 497,\n 497,\n 497,\n 498,\n 499,\n 499,\n 499,\n 499,\n 500,\n 501,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 502,\n 503,\n 503,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 504,\n 505,\n 505,\n 506,\n 507,\n 508,\n 508,\n 508,\n 509,\n 509,\n 509,\n 509,\n 509,\n 510,\n 511,\n 511,\n 511,\n 511,\n 511,\n 512,\n 513,\n 514,\n 514,\n 514,\n 515,\n 516,\n 516,\n 516,\n 516,\n 516,\n 517,\n 517,\n 517,\n 518,\n 519,\n 519,\n 520,\n 521,\n 522,\n 523,\n 523,\n 523,\n 523,\n 523,\n 523,\n 524,\n 524,\n 525,\n 526,\n 526,\n 527,\n 528,\n 529,\n 530,\n 531,\n 531,\n 531,\n 531,\n 532,\n 532,\n 533,\n 533,\n 534,\n 535,\n 535,\n 535,\n 535,\n 535,\n 535,\n 536,\n 536,\n 537,\n 537,\n 537,\n 537,\n 538,\n 538,\n 539,\n 540,\n 541,\n 542,\n 542,\n 543,\n 543,\n 543,\n 543,\n 544,\n 545,\n 546,\n 546,\n 547,\n 547,\n 547,\n 547,\n 548,\n 549,\n 549,\n 549,\n 549,\n 550,\n 550,\n 551,\n 551,\n 551,\n 552,\n 553,\n 553,\n 553,\n 554,\n 555,\n 555,\n 556,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 557,\n 558,\n 558,\n 558,\n 559,\n 560,\n 561,\n 562,\n 563,\n 563,\n 564,\n 565,\n 565,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 566,\n 567,\n 568,\n 569,\n 570,\n 571,\n 572,\n 573,\n 574,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 575,\n 576,\n 576,\n 577,\n 578,\n 579,\n 580,\n 581,\n 582,\n 583,\n 584,\n 585,\n 586,\n 586,\n 586,\n 587,\n 587,\n 588,\n 589,\n 589,\n 589,\n 590,\n 590,\n 591,\n 592,\n 593,\n 594,\n 594,\n 594,\n 595,\n 595,\n 596,\n 597,\n 598,\n 598,\n 599,\n 600,\n 601,\n 602,\n 602,\n 602,\n 603,\n 604,\n 605,\n 605,\n 606,\n 606,\n 606,\n 606,\n 606,\n 606,\n 607,\n 608,\n 609,\n 610,\n 611,\n 612,\n 612,\n 612,\n 613,\n 614,\n 614,\n 614,\n 614,\n 614,\n 615,\n 616,\n 616,\n 616,\n 616,\n 617,\n 617,\n 617,\n 617,\n 617,\n 618,\n 618,\n 618,\n 619,\n 620,\n 620,\n 620,\n 621,\n 622,\n 623,\n 624,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 625,\n 626,\n 627,\n 628,\n 628,\n 628,\n 629,\n 630,\n 630,\n 630,\n 630,\n 630,\n 630,\n 631,\n 631,\n 631,\n 632,\n 632,\n 633,\n 634,\n 634,\n 635,\n 635,\n 635,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 636,\n 637,\n 637,\n 638,\n 639,\n 639,\n 640,\n 641,\n 641,\n 642,\n 643,\n 643,\n 643,\n 644,\n 645,\n 645,\n 645,\n 645,\n 646,\n 647,\n 648,\n 649,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 650,\n 651,\n 652,\n 653,\n 653,\n 654,\n 655,\n 655,\n 655,\n 655,\n 656,\n 657,\n 658,\n 658,\n 658,\n 658,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 659,\n 660,\n 661,\n 661,\n 662,\n 663,\n 663,\n 663,\n 664,\n 665,\n 666,\n 667,\n 667,\n 667,\n 668,\n 669,\n 669,\n 669,\n 670,\n 670,\n 670,\n 671,\n 672,\n 673,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 674,\n 675,\n 675,\n 676,\n 677,\n 678,\n 678,\n 678,\n 679,\n 680,\n 680,\n 681,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 682,\n 683,\n 684,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 685,\n 686,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 687,\n 688,\n 689,\n 689,\n 690,\n 691,\n 691,\n 692,\n 692,\n 692,\n 693,\n 693,\n 693,\n 694,\n 695,\n 696,\n 696,\n 696,\n 697,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 698,\n 699,\n 700,\n 700,\n 701,\n 702,\n 703,\n 704,\n 705,\n 706,\n 706,\n 706,\n 707,\n 708,\n 709,\n 710,\n 710,\n 710,\n 710,\n 711,\n 712,\n 712,\n 713,\n 714,\n 714,\n 715,\n 716,\n 717,\n 718,\n 719,\n 720,\n 721,\n 721,\n 721,\n 721,\n 721,\n 722,\n 723,\n 724,\n 725,\n 726,\n 727,\n 728,\n 728,\n 729,\n 730,\n 730,\n 730,\n 731,\n 732,\n 733,\n 734,\n 734,\n 734,\n 735,\n 736,\n 736,\n 736,\n 736,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 737,\n 738,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 739,\n 740,\n 741,\n 741,\n 742,\n 743,\n 744,\n 744,\n 744,\n 744,\n 745,\n 745,\n 746,\n 747,\n 748,\n 748,\n 748,\n 748,\n 748,\n 748,\n 749,\n 749,\n 749,\n 750,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 751,\n 752,\n 752,\n 753,\n 753,\n 753,\n 754,\n 754,\n 754,\n 755,\n 756,\n 757,\n 757,\n 757,\n 757,\n 758,\n 759,\n 760,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 761,\n 762,\n 762,\n 762,\n 763,\n 763,\n 764,\n 765,\n 765,\n 765,\n 766,\n 767,\n 768,\n 768,\n 769,\n 769,\n 769,\n 769,\n 770,\n 771,\n 771,\n 771,\n 771,\n 771,\n 772,\n 772,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 773,\n 774,\n 775,\n 775,\n 776,\n 776,\n 777,\n 778,\n 779,\n 780,\n 781,\n 781,\n 782,\n 782,\n 782,\n 782,\n 782,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 783,\n 784,\n 784,\n 785,\n 786,\n 786,\n 787,\n 788,\n 789,\n 790,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 791,\n 792,\n 792,\n 792,\n 792,\n 793,\n 794,\n 795,\n 796,\n 796,\n 797,\n 797,\n 798,\n 798,\n 799,\n 800,\n 801,\n 802,\n 802,\n 802,\n 803,\n 803,\n 803,\n 803,\n 803,\n 803,\n 804,\n 804,\n 804,\n 804,\n 805,\n 806,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 807,\n 808,\n 808,\n 809,\n 809,\n 809,\n 810,\n 811,\n 812,\n 813,\n 814,\n 815,\n 816,\n 817,\n 817,\n 818,\n 818,\n 819,\n 820,\n 820,\n 820,\n 820,\n 821,\n 822,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 823,\n 824,\n 825,\n 826,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 827,\n 828,\n 828,\n 828,\n 828,\n 829,\n 830,\n 830,\n 830,\n 831,\n 831,\n 832,\n 833,\n 834,\n 834,\n 834,\n 835,\n 835,\n 835,\n 836,\n 836,\n 836,\n 836,\n 836,\n 836,\n 837,\n 837,\n 837,\n 837,\n 837,\n 837,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 838,\n 839,\n 839,\n 840,\n 840,\n 840,\n 840,\n 840,\n 841,\n 842,\n 842,\n 842,\n 843,\n 843,\n 843,\n 844,\n 844,\n 845,\n 846,\n 847,\n 847,\n 847,\n 847,\n 847,\n 848,\n 848,\n 849,\n 850,\n 851,\n 852,\n 852,\n 852,\n 853,\n 854,\n 854,\n 854,\n 854,\n 855,\n 856,\n 856,\n 857,\n 858,\n 858,\n 858,\n 858,\n 858,\n 859,\n 860,\n 860,\n 861,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 862,\n 863,\n 863,\n 863,\n 863,\n 864,\n 864,\n 864,\n 864,\n 864,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 865,\n 866,\n 866,\n 866,\n 866,\n 866,\n 867,\n 867,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 868,\n 869,\n 870,\n 871,\n 871,\n 872,\n 872,\n 873,\n 873,\n 873,\n 874,\n 874,\n 874,\n 874,\n 875,\n 876,\n 877,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 878,\n 879,\n 880,\n 881,\n 882,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 883,\n 884,\n 884,\n 884,\n 885,\n 886,\n 886,\n 886,\n 887,\n 887,\n 887,\n 887,\n 887,\n 888,\n 888,\n 889,\n 890,\n 890,\n 891,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 892,\n 893,\n 893,\n 893,\n 894,\n 895,\n 896,\n 897,\n 898,\n 898,\n 898,\n 898,\n 898,\n 898,\n 899,\n 900,\n 900,\n 901,\n 901,\n 901,\n 902,\n 902,\n 902,\n 902,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 903,\n 904,\n 905,\n 906,\n 907,\n 908,\n 908,\n 908,\n 908,\n 909,\n 909,\n 909,\n 910,\n 911,\n 911,\n 911,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 912,\n 913,\n 913,\n 913,\n 913,\n 913,\n 913,\n 914,\n 915,\n 916,\n 917,\n 917,\n 918,\n 919,\n 920,\n 921,\n 922,\n 923,\n 923,\n 923,\n 923,\n 923,\n 923,\n 924,\n 925,\n 926,\n 926,\n 927,\n 928,\n 929,\n 930,\n 931,\n 932,\n 932,\n 932,\n 933,\n 934,\n 935,\n 936,\n 936,\n 936,\n 937,\n 937,\n 938,\n 939,\n 940,\n 941,\n 941,\n 941,\n 941,\n 941,\n 942,\n 943,\n 944,\n 945,\n 946,\n 947,\n 947,\n 947,\n 947,\n 948,\n 949,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 950,\n 951,\n 951,\n 952,\n 952,\n 952,\n 953,\n 954,\n 955,\n 956,\n 957,\n 957,\n 958,\n 959,\n 960,\n 961,\n 962,\n 963,\n 964,\n 965,\n 966,\n 967,\n 968,\n 968,\n 969,\n 970,\n 971,\n 972,\n 972,\n 972,\n 973,\n 974,\n 975,\n 975,\n 976,\n 976,\n 977,\n 978,\n 979,\n 980,\n 980,\n 980,\n 980,\n 980,\n 980,\n 981,\n 981,\n 981,\n 982,\n 983,\n 983,\n 984,\n 985,\n 985,\n 985,\n 986,\n 987,\n 988,\n 989,\n 989,\n 989,\n 989,\n 989,\n 990,\n 991,\n 991,\n 992,\n 993,\n 993,\n 994,\n 995,\n 996,\n 996,\n 997,\n 998,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 999,\n 1000,\n 1001,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1002,\n 1003,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1004,\n 1005,\n 1006,\n 1007,\n 1007,\n 1008,\n 1008,\n 1008,\n 1009,\n 1010,\n 1011,\n 1012,\n 1012,\n 1013,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1014,\n 1015,\n 1015,\n 1016,\n 1016,\n 1016,\n 1017,\n 1017,\n 1017,\n 1018,\n 1018,\n 1018,\n 1018,\n 1019,\n 1019,\n 1019,\n 1019,\n 1020,\n 1020,\n 1021,\n 1022,\n 1022,\n 1023,\n 1023,\n 1023,\n 1023,\n 1023,\n 1024,\n 1025,\n 1026,\n 1026,\n 1027,\n 1028,\n 1029,\n 1030,\n 1031,\n 1031,\n 1032,\n 1033,\n 1034,\n 1035,\n 1035,\n 1035,\n 1036,\n 1037,\n 1038,\n 1039,\n 1040,\n 1041,\n 1042,\n 1043,\n 1043,\n 1044,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1045,\n 1046,\n 1047,\n 1048,\n 1049,\n 1050,\n 1051,\n 1052,\n 1053,\n 1054,\n 1055,\n 1055,\n 1055,\n 1055,\n 1056,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1057,\n 1058,\n 1058,\n 1058,\n 1058,\n 1059,\n 1060,\n 1061,\n 1062,\n 1063,\n 1063,\n 1064,\n 1065,\n 1065,\n 1065,\n 1065,\n 1066,\n 1067,\n 1068,\n 1069,\n 1070,\n 1071,\n 1071,\n 1072,\n 1073,\n 1074,\n 1075,\n 1076,\n 1076,\n 1076,\n 1076,\n 1076,\n 1077,\n 1077,\n 1078,\n 1079,\n 1080,\n 1081,\n 1082,\n 1083,\n 1084,\n 1085,\n 1086,\n 1087,\n 1088,\n 1088,\n 1089,\n 1089,\n 1090,\n 1090,\n 1090,\n 1090,\n 1091,\n 1091,\n 1092,\n 1093,\n 1093,\n 1093,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1094,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1095,\n 1096,\n 1096,\n 1097,\n 1097,\n 1098,\n 1099,\n 1099,\n 1099,\n 1099,\n 1100,\n 1100,\n 1101,\n 1101,\n 1102,\n 1102,\n 1102,\n 1102,\n 1103,\n 1103,\n 1103,\n 1104,\n 1105,\n 1106,\n 1107,\n 1108,\n 1109,\n 1110,\n 1111,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1112,\n 1113,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1114,\n 1115,\n 1116,\n 1117,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1118,\n 1119,\n 1120,\n 1120,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1121,\n 1122,\n 1122,\n 1122,\n 1123,\n 1124,\n 1125,\n 1126,\n 1126,\n 1126,\n 1127,\n 1127,\n 1128,\n 1129,\n 1129,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1130,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1131,\n 1132,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1133,\n 1134,\n 1135,\n 1136,\n 1137,\n 1138,\n 1139,\n 1139,\n 1140,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1141,\n 1142,\n 1142,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1143,\n 1144,\n 1144,\n 1145,\n 1145,\n 1145,\n 1145,\n 1146,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1147,\n 1148,\n 1149,\n 1149,\n 1149,\n 1149,\n 1149,\n 1150,\n 1151,\n 1152,\n 1152,\n 1152,\n 1152,\n 1153,\n 1153,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1154,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1155,\n 1156,\n 1156,\n 1156,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1157,\n 1158,\n 1159,\n 1160,\n 1161,\n 1162,\n 1163,\n 1163,\n 1163,\n 1164,\n 1165,\n 1165,\n 1166,\n 1166,\n 1166,\n 1167,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1168,\n 1169,\n 1169,\n 1170,\n 1170,\n 1170,\n 1170,\n 1171,\n 1172,\n 1173,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1174,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1175,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1176,\n 1177,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1178,\n 1179,\n 1180,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1181,\n 1182,\n 1182,\n 1183,\n 1183,\n 1184,\n 1185,\n 1185,\n 1185,\n 1185,\n 1186,\n 1186,\n 1186,\n 1187,\n 1187,\n 1188,\n 1188,\n 1189,\n 1190,\n 1191,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1192,\n 1193,\n 1193,\n 1194,\n 1195,\n 1195,\n 1195,\n 1196,\n 1197,\n 1197,\n 1197,\n 1197,\n 1198,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1199,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1200,\n 1201,\n 1201,\n 1202,\n 1203,\n 1204,\n 1204,\n 1205,\n 1206,\n 1206,\n 1207,\n 1208,\n 1209,\n 1210,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1211,\n 1212,\n 1212,\n 1213,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1214,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1215,\n 1216,\n 1217,\n 1217,\n 1218,\n 1219,\n 1220,\n 1221,\n 1222,\n 1223,\n 1223,\n 1224,\n 1224,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1225,\n 1226,\n 1227,\n 1228,\n 1228,\n 1228,\n 1229,\n 1230,\n 1230,\n 1230,\n 1230,\n 1231,\n 1232,\n 1233,\n 1234,\n 1235,\n 1236,\n 1237,\n 1238,\n 1238,\n 1238,\n 1238,\n 1239,\n 1240,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1241,\n 1242,\n 1243,\n 1244,\n 1245,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1246,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1247,\n 1248,\n 1248,\n 1249,\n 1249,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1250,\n 1251,\n 1251,\n 1251,\n 1251,\n 1251,\n 1252,\n 1253,\n 1254,\n 1254,\n 1254,\n 1254,\n 1255,\n 1255,\n 1256,\n 1257,\n 1257,\n 1258,\n 1259,\n 1259,\n 1259,\n 1259,\n 1260,\n 1261,\n 1261,\n 1261,\n 1261,\n 1261,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1262,\n 1263,\n 1264,\n 1265,\n 1265,\n 1266,\n 1267,\n 1268,\n 1268,\n 1268,\n 1269,\n 1270,\n 1271,\n 1271,\n 1272,\n 1273,\n 1274,\n 1275,\n 1275,\n 1276,\n 1277,\n 1278,\n 1278,\n 1278,\n 1278,\n 1279,\n 1280,\n 1280,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1281,\n 1282,\n 1283,\n 1284,\n 1285,\n 1286,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1287,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1288,\n 1289,\n 1290,\n 1290,\n 1291,\n 1292,\n 1292,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1293,\n 1294,\n 1295,\n 1295,\n 1295,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1296,\n 1297,\n 1298,\n 1299,\n 1300,\n 1300,\n 1301,\n 1301,\n 1302,\n 1303,\n 1304,\n 1305,\n 1306,\n 1306,\n 1306,\n 1306,\n 1306,\n 1307,\n 1307,\n 1308,\n 1309,\n 1309,\n 1309,\n 1309,\n 1309,\n 1310,\n 1311,\n 1311,\n 1312,\n 1313,\n 1314,\n 1315,\n 1316,\n 1316,\n 1316,\n 1316,\n 1316,\n 1317,\n 1318,\n 1318,\n 1318,\n 1318,\n 1318,\n 1319,\n 1319,\n 1319,\n 1320,\n 1321,\n 1322,\n 1322,\n 1323,\n 1324,\n 1324,\n 1324,\n 1325,\n 1325,\n 1325,\n 1325,\n 1326,\n 1326,\n 1326,\n 1327,\n 1328,\n 1329,\n 1330,\n 1330,\n 1330,\n 1331,\n 1331,\n 1332,\n 1333,\n 1334,\n 1334,\n 1334,\n 1335,\n 1336,\n 1337,\n 1338,\n 1339,\n 1339,\n 1339,\n 1339,\n 1339,\n 1340,\n 1340,\n 1341,\n 1342,\n 1343,\n 1344,\n 1344,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1345,\n 1346,\n 1347,\n 1347,\n 1348,\n 1349,\n 1350,\n 1350,\n 1351,\n 1352,\n 1352,\n 1352,\n 1352,\n 1353,\n 1353,\n 1354,\n 1354,\n 1354,\n 1354,\n 1354,\n 1355,\n 1356,\n 1357,\n 1357,\n 1358,\n 1359,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1360,\n 1361,\n 1362,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1363,\n 1364,\n 1365,\n 1366,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1367,\n 1368,\n 1369,\n 1369,\n 1369,\n 1370,\n 1371,\n 1372,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1373,\n 1374,\n 1375,\n 1376,\n 1377,\n 1377,\n 1377,\n 1377,\n 1377,\n 1378,\n 1379,\n 1380,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1381,\n 1382,\n 1383,\n 1383,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1384,\n 1385,\n 1385,\n 1385,\n 1386,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1387,\n 1388,\n 1389,\n 1389,\n 1389,\n 1390,\n 1390,\n 1390,\n 1391,\n 1392,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1393,\n 1394,\n 1394,\n 1394,\n 1394,\n 1394,\n 1395,\n 1395,\n 1395,\n 1395,\n 1396,\n 1396,\n 1397,\n 1397,\n 1397,\n 1397,\n 1398,\n 1399,\n 1400,\n 1400,\n 1400,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1401,\n 1402,\n 1402,\n 1403,\n 1404,\n 1404,\n 1405,\n 1406,\n 1406,\n 1407,\n 1408,\n 1409,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1410,\n 1411,\n 1411,\n 1411,\n 1411,\n 1412,\n 1413,\n 1414,\n 1414,\n 1414,\n 1414,\n 1415,\n 1415,\n 1415,\n 1416,\n 1416,\n 1417,\n 1417,\n 1418,\n 1419,\n 1420,\n 1420,\n 1420,\n 1421,\n 1422,\n 1422,\n 1423,\n 1423,\n 1424,\n 1424,\n 1425,\n 1426,\n 1427,\n 1427,\n 1428,\n 1428,\n 1429,\n 1430,\n 1430,\n 1431,\n 1432,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1433,\n 1434,\n 1435,\n 1435,\n 1436,\n 1436,\n 1437,\n 1438,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1439,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1440,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1441,\n 1442,\n 1442,\n 1443,\n 1444,\n 1445,\n 1445,\n 1445,\n 1446,\n 1447,\n 1447,\n 1448,\n 1449,\n 1450,\n 1451,\n 1452,\n 1453,\n 1453,\n 1454,\n 1455,\n 1456,\n 1456,\n 1456,\n 1457,\n 1457,\n 1457,\n 1457,\n 1457,\n 1458,\n 1458,\n 1458,\n 1458,\n 1459,\n 1459,\n 1459,\n 1459,\n 1460,\n 1460,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1461,\n 1462,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1463,\n 1464,\n 1464,\n 1465,\n 1465,\n 1465,\n 1466,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1467,\n 1468,\n 1468,\n 1468,\n 1468,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1469,\n 1470,\n 1470,\n 1470,\n 1471,\n 1471,\n 1471,\n 1471,\n 1472,\n 1473,\n 1473,\n 1473,\n 1474,\n 1474,\n 1474,\n 1474,\n 1475,\n 1475,\n 1475,\n 1476,\n 1476,\n 1477,\n 1478,\n 1479,\n 1480,\n 1480,\n 1481,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1482,\n 1483,\n 1483,\n 1484,\n 1485,\n 1486,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1487,\n 1488,\n 1489,\n 1489,\n 1489,\n 1490,\n 1491,\n 1492,\n 1492,\n 1493,\n 1493,\n 1494,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1495,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1496,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1497,\n 1498,\n 1498,\n 1498,\n 1498,\n 1499,\n 1500,\n 1500,\n 1500,\n 1500,\n 1500,\n 1501,\n 1502,\n 1503,\n 1504,\n 1505,\n 1505,\n 1506,\n 1507,\n 1507,\n 1508,\n 1509,\n 1510,\n 1510,\n 1510,\n 1510,\n 1510,\n 1511,\n 1512,\n 1513,\n 1514,\n 1514,\n 1514,\n 1515,\n 1516,\n 1516,\n 1517,\n 1518,\n 1518,\n 1519,\n 1520,\n 1520,\n 1520,\n 1521,\n 1522,\n 1523,\n 1524,\n 1525,\n 1525,\n 1525,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1526,\n 1527,\n 1528,\n 1529,\n 1529,\n 1529,\n 1530,\n 1531,\n 1531,\n 1532,\n 1533,\n 1534,\n 1535,\n 1536,\n 1536,\n 1537,\n 1538,\n 1539,\n 1539,\n 1539,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1540,\n 1541,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1542,\n 1543,\n 1543,\n 1544,\n 1545,\n 1546,\n 1546,\n 1547,\n 1547,\n 1548,\n 1548,\n 1549,\n 1550,\n 1551,\n 1552,\n 1552,\n 1552,\n 1553,\n 1553,\n 1554,\n 1554,\n 1555,\n 1556,\n 1557,\n 1557,\n 1558,\n 1559,\n 1559,\n 1560,\n 1561,\n 1561,\n 1562,\n 1563,\n 1563,\n 1564,\n 1565,\n 1565,\n 1565,\n 1565,\n 1565,\n 1566,\n 1567,\n 1568,\n 1568,\n 1569,\n 1569,\n 1569,\n 1569,\n 1570,\n 1570,\n 1570,\n 1571,\n 1571,\n 1571,\n 1572,\n 1572,\n 1572,\n 1572,\n 1573,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1574,\n 1575,\n 1575,\n 1576,\n 1576,\n 1577,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1578,\n 1579,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1580,\n 1581,\n 1581,\n 1581,\n 1581,\n 1581,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1582,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1583,\n 1584,\n 1584,\n 1584,\n 1585,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1586,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1587,\n 1588,\n 1588,\n 1588,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1589,\n 1590,\n 1591,\n 1592,\n 1592,\n 1593,\n 1594,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1595,\n 1596,\n 1596,\n 1597,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1598,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1599,\n 1600,\n 1600,\n 1601,\n 1601,\n 1601,\n 1602,\n 1603,\n 1603,\n 1604,\n 1604,\n 1604,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1605,\n 1606,\n 1607,\n 1607,\n 1607,\n 1607,\n 1608,\n 1609,\n 1609,\n 1609,\n 1609,\n 1609,\n 1610,\n 1610,\n 1611,\n 1612,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1613,\n 1614,\n 1615,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1616,\n 1617,\n 1617,\n 1617,\n 1618,\n 1619,\n 1619,\n 1620,\n 1620,\n 1621,\n 1621,\n 1622,\n 1623,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1624,\n 1625,\n 1625,\n 1625,\n 1625,\n 1625,\n 1626,\n 1626,\n 1626,\n 1627,\n 1628,\n 1628,\n 1629,\n 1630,\n 1631,\n 1632,\n 1633,\n 1634,\n 1635,\n 1635,\n 1636,\n 1637,\n 1638,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1639,\n 1640,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1641,\n 1642,\n 1642,\n 1642,\n 1642,\n 1643,\n 1644,\n 1645,\n 1646,\n 1646,\n 1646,\n 1646,\n 1646,\n 1647,\n 1648,\n 1649,\n 1650,\n 1651,\n 1651,\n 1652,\n 1653,\n 1654,\n 1654,\n 1655,\n 1655,\n 1656,\n 1656,\n 1656,\n 1657,\n 1657,\n 1658,\n 1658,\n 1659,\n 1659,\n 1660,\n 1661,\n 1662,\n 1663,\n 1664,\n 1665,\n 1665,\n 1666,\n 1667,\n 1667,\n 1668,\n 1669,\n 1670,\n 1671,\n 1671,\n 1671,\n 1671,\n 1672,\n 1672,\n 1672,\n 1672,\n 1673,\n 1673,\n 1674,\n 1674,\n 1675,\n 1676,\n 1677,\n 1678,\n 1679,\n 1679,\n 1679,\n 1680,\n 1681,\n 1682,\n 1683,\n 1684,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1685,\n 1686,\n 1686,\n 1687,\n 1687,\n 1687,\n 1688,\n 1688,\n 1688,\n 1688,\n 1689,\n 1690,\n 1690,\n 1690,\n 1690,\n 1690,\n 1691,\n 1691,\n 1692,\n 1692,\n 1693,\n 1694,\n 1694,\n 1694,\n 1695,\n 1695,\n 1696,\n 1696,\n 1697,\n 1698,\n 1698,\n 1698,\n 1699,\n 1700,\n 1701,\n 1701,\n 1701,\n 1701,\n 1702,\n 1702,\n 1702,\n 1702,\n 1702,\n 1703,\n 1704,\n 1705,\n 1705,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1706,\n 1707,\n 1707,\n 1707,\n 1707,\n 1708,\n 1708,\n 1709,\n 1709,\n 1710,\n 1711,\n 1712,\n 1713,\n 1713,\n 1713,\n 1713,\n 1714,\n 1714,\n 1715,\n 1715,\n 1716,\n 1717,\n 1717,\n 1718,\n 1718,\n 1719,\n 1719,\n 1719,\n 1719,\n 1719,\n 1720,\n 1721,\n 1721,\n 1722,\n 1723,\n 1724,\n 1724,\n 1725,\n 1725,\n 1725,\n 1725,\n 1725,\n 1726,\n 1726,\n 1726,\n 1727,\n 1728,\n 1729,\n 1730,\n 1730,\n 1731,\n 1732,\n 1732,\n 1733,\n 1734,\n 1735,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1736,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1737,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1738,\n 1739,\n 1739,\n 1739,\n 1740,\n 1740,\n 1741,\n 1742,\n 1742,\n 1743,\n 1743,\n 1744,\n 1745,\n 1745,\n 1745,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1746,\n 1747,\n 1747,\n 1747,\n 1747,\n 1748,\n 1749,\n 1749,\n 1750,\n 1751,\n 1752,\n 1752,\n 1753,\n 1753,\n 1753,\n 1753,\n 1753,\n 1754,\n 1755,\n 1756,\n 1757,\n 1758,\n 1759,\n 1759,\n 1760,\n 1760,\n 1761,\n 1761,\n 1762,\n 1763,\n 1764,\n 1764,\n 1765,\n 1766,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1767,\n 1768,\n 1769,\n 1769,\n 1770,\n 1770,\n 1771,\n 1772,\n 1772,\n 1773,\n 1774,\n 1775,\n 1775,\n 1775,\n 1776,\n 1777,\n 1777,\n 1777,\n 1778,\n 1779,\n 1779,\n 1779,\n 1779,\n 1779,\n 1780,\n 1781,\n 1781,\n 1782,\n 1783,\n 1783,\n 1783,\n 1784,\n 1785,\n 1786,\n 1787,\n 1787,\n 1788,\n 1789,\n 1790,\n 1790,\n 1790,\n 1790,\n 1790,\n 1791,\n 1792,\n 1793,\n 1794,\n 1795,\n 1795,\n 1796,\n 1797,\n 1798,\n 1799,\n 1799,\n 1800,\n 1801,\n 1802,\n 1803,\n 1804,\n 1805,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1806,\n 1807,\n 1807,\n 1807,\n 1807,\n 1807,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1808,\n 1809,\n 1809,\n 1809,\n 1810,\n 1811,\n 1811,\n 1811,\n 1812,\n 1813,\n 1814,\n 1814,\n 1814,\n 1815,\n 1816,\n 1817,\n 1817,\n 1818,\n 1819,\n 1819,\n 1819,\n 1820,\n 1821,\n 1821,\n 1821,\n 1822,\n 1822,\n 1823,\n 1824,\n 1825,\n 1826,\n 1827,\n 1827,\n 1827,\n 1828,\n 1829,\n 1829,\n 1830,\n 1831,\n 1831,\n 1832,\n 1832,\n 1833,\n 1834,\n 1835,\n 1836,\n 1837,\n 1837,\n 1837,\n 1838,\n 1839,\n 1840,\n 1841,\n 1842,\n 1842,\n 1843,\n 1843,\n 1843,\n 1844,\n 1845,\n 1845,\n 1845,\n 1845,\n 1845,\n 1846,\n 1847,\n 1848,\n 1849,\n 1849,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1850,\n 1851,\n 1851,\n 1851,\n 1852,\n 1853,\n 1853,\n 1853,\n 1854,\n 1854,\n 1854,\n 1855,\n 1856,\n 1857,\n 1857,\n 1857,\n 1857,\n 1857,\n 1858,\n 1859,\n 1860,\n 1861,\n 1862,\n 1863,\n 1863,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1864,\n 1865,\n 1865,\n 1865,\n 1865,\n 1865,\n 1866,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1867,\n 1868,\n 1868,\n 1868,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1869,\n 1870,\n 1871,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1872,\n 1873,\n 1874,\n 1875,\n 1876,\n 1876,\n 1877,\n 1878,\n 1879,\n 1879,\n 1879,\n 1879,\n 1880,\n 1881,\n 1881,\n 1882,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1887,\n 1888,\n 1888,\n 1888,\n 1888,\n 1888,\n 1889,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1895,\n 1895,\n 1896,\n 1896,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1902,\n 1902,\n 1903,\n 1904,\n 1904,\n 1905,\n 1906,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1907,\n 1908,\n 1908,\n 1908,\n 1909,\n 1909,\n 1910,\n 1911,\n 1911,\n 1912,\n 1912,\n 1913,\n 1913,\n 1914,\n 1914,\n 1914,\n 1915,\n 1916,\n 1916,\n 1916,\n 1916,\n 1917,\n 1918,\n 1919,\n 1919,\n 1919,\n 1919,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1928,\n 1929,\n 1930,\n 1930,\n 1930,\n 1930,\n 1930,\n 1931,\n 1932,\n 1932,\n 1932,\n 1933,\n 1934,\n 1934,\n 1934,\n 1934,\n 1934,\n 1935,\n 1936,\n 1936,\n 1936,\n 1937,\n 1938,\n 1939,\n 1939,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1943,\n 1943,\n 1944,\n 1944,\n 1945,\n 1946,\n 1947,\n 1947,\n 1947,\n 1948,\n 1948,\n 1948,\n 1948,\n 1948,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1949,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1950,\n 1951,\n 1951,\n 1951,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1955,\n 1956,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1957,\n 1958,\n 1958,\n 1959,\n 1959,\n 1960,\n 1960,\n 1961,\n 1961,\n 1961,\n 1961,\n 1961,\n 1962,\n 1963,\n 1964,\n 1964,\n 1964,\n 1965,\n 1965,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1969,\n 1970,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1975,\n 1976,\n 1976,\n 1977,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1984,\n 1985,\n 1986,\n 1987,\n 1987,\n 1987,\n 1987,\n 1988,\n 1988,\n 1988,\n 1988,\n 1989,\n 1990,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1994,\n 1995,\n 1996,\n 1996,\n 1996,\n 1996,\n 1997,\n 1997,\n 1998,\n 1999,\n 1999,\n 1999,\n 2000,\n 2000,\n 2000,\n 2000,\n 2001,\n 2001,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2002,\n 2003,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2007,\n 2007,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2011,\n 2012,\n 2012,\n 2013,\n 2013,\n 2014,\n 2015,\n 2015,\n 2015,\n 2015,\n 2015,\n 2016,\n 2016,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2017,\n 2018,\n 2018,\n 2019,\n 2020,\n 2020,\n 2020,\n 2021,\n 2022,\n 2022,\n 2022,\n 2022,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2023,\n 2024,\n 2024,\n 2024,\n 2024,\n 2024,\n 2025,\n 2025,\n 2026,\n 2027,\n 2028,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2029,\n 2030,\n 2030,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2031,\n 2032,\n 2032,\n 2032,\n 2032,\n 2033,\n 2033,\n 2034,\n 2034,\n 2034,\n 2034,\n 2034,\n 2035,\n 2036,\n 2037,\n 2037,\n 2038,\n 2039,\n 2040,\n 2040,\n 2040,\n 2040,\n 2041,\n 2042,\n 2043,\n 2044,\n 2044,\n 2044,\n 2044,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2045,\n 2046,\n 2047,\n 2048,\n 2048,\n 2049,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2050,\n 2051,\n 2051,\n 2051,\n 2052,\n 2052,\n 2053,\n 2054,\n 2055,\n 2056,\n 2056,\n 2056,\n 2057,\n 2058,\n 2058,\n 2059,\n 2059,\n 2059,\n 2060,\n 2060,\n 2060,\n 2060,\n 2060,\n 2061,\n 2061,\n 2062,\n 2063,\n 2063,\n 2063,\n 2064,\n 2065,\n 2066,\n 2067,\n 2067,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2068,\n 2069,\n 2070,\n 2070,\n 2071,\n 2071,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2072,\n 2073,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2074,\n 2075,\n 2075,\n 2075,\n 2076,\n 2077,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2078,\n 2079,\n 2080,\n 2080,\n 2081,\n 2081,\n 2081,\n 2081,\n 2082,\n 2083,\n 2083,\n 2083,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2084,\n 2085,\n 2085,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2086,\n 2087,\n 2088,\n 2089,\n 2089,\n 2089,\n 2090,\n 2091,\n 2092,\n 2093,\n 2093,\n 2093,\n 2094,\n 2094,\n 2095,\n 2095,\n 2095,\n 2096,\n 2097,\n 2098,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2099,\n 2100,\n 2101,\n 2101,\n 2101,\n 2102,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2103,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2104,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2105,\n 2106,\n 2106,\n 2107,\n 2107,\n 2108,\n 2109,\n 2109,\n 2109,\n 2109,\n 2109,\n 2110,\n 2110,\n 2111,\n 2111,\n 2111,\n 2112,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2113,\n 2114,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2115,\n 2116,\n 2117,\n 2118,\n 2119,\n 2120,\n 2121,\n 2122,\n 2122,\n 2123,\n 2124,\n 2125,\n 2126,\n 2126,\n 2126,\n 2127,\n 2127,\n 2127,\n 2128,\n 2129,\n 2130,\n 2130,\n 2130,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2131,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2132,\n 2133,\n 2133,\n 2133,\n 2134,\n 2134,\n 2134,\n 2135,\n 2136,\n 2137,\n 2138,\n 2139,\n 2140,\n 2141,\n 2141,\n 2141,\n 2141,\n 2142,\n 2142,\n 2143,\n 2144,\n 2144,\n 2145,\n 2145,\n 2146,\n 2147,\n 2148,\n 2149,\n 2149,\n 2150,\n 2150,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2151,\n 2152,\n 2153,\n 2154,\n 2155,\n 2156,\n 2156,\n 2156,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2157,\n 2158,\n 2158,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2159,\n 2160,\n 2160,\n 2160,\n 2160,\n 2160,\n 2161,\n 2161,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2162,\n 2163,\n 2164,\n 2165,\n 2166,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2167,\n 2168,\n 2169,\n 2170,\n 2171,\n 2172,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2173,\n 2174,\n 2175,\n 2175,\n 2176,\n 2177,\n 2178,\n 2178,\n 2179,\n 2180,\n 2180,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2181,\n 2182,\n 2183,\n 2184,\n 2184,\n 2185,\n 2185,\n 2185,\n 2185,\n 2185,\n 2186,\n 2186,\n 2186,\n 2187,\n 2187,\n 2187,\n 2187,\n 2188,\n 2188,\n 2189,\n 2189,\n 2189,\n 2190,\n 2190,\n 2190,\n 2191,\n 2192,\n 2193,\n 2193,\n 2193,\n 2194,\n 2195,\n 2196,\n 2197,\n 2198,\n 2199,\n 2199,\n 2200,\n 2201,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2202,\n 2203,\n 2204,\n 2204,\n 2205,\n 2205,\n 2205,\n 2206,\n 2206,\n 2207,\n 2208,\n 2209,\n 2210,\n 2210,\n 2211,\n 2211,\n 2211,\n 2212,\n 2213,\n 2213,\n 2213,\n 2213,\n 2213,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2214,\n 2215,\n 2216,\n 2217,\n 2218,\n 2219,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2220,\n 2221,\n 2221,\n 2221,\n 2221,\n 2221,\n 2222,\n 2222,\n 2222,\n 2222,\n 2223,\n 2224,\n 2224,\n 2224,\n 2224,\n 2224,\n 2225,\n 2226,\n 2226,\n 2227,\n 2228,\n 2228,\n 2228,\n 2229,\n 2229,\n 2230,\n 2231,\n 2232,\n 2233,\n 2234,\n 2235,\n 2236,\n 2236,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2237,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2238,\n 2239,\n 2240,\n 2241,\n 2242,\n 2242,\n 2243,\n 2244,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2245,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2246,\n 2247,\n 2248,\n 2249,\n 2250,\n 2251,\n 2252,\n 2252,\n 2253,\n 2253,\n 2254,\n 2255,\n 2256,\n 2257,\n 2258,\n 2258,\n 2258,\n 2258,\n 2258,\n 2259,\n 2260,\n 2261,\n 2262,\n 2263,\n 2264,\n 2265,\n 2266,\n 2267,\n 2267,\n 2267,\n 2268,\n 2269,\n 2269,\n 2270,\n 2271,\n 2272,\n 2273,\n 2273,\n 2273,\n 2274,\n 2275,\n 2276,\n 2277,\n 2278,\n 2278,\n 2279,\n 2280,\n 2281,\n 2282,\n 2283,\n 2283,\n 2283,\n 2284,\n 2285,\n 2286,\n 2287,\n 2287,\n 2287,\n 2288,\n 2289,\n 2290,\n 2291,\n 2292,\n 2293,\n 2294,\n 2295,\n 2296,\n 2296,\n 2296,\n 2297,\n 2297,\n 2298,\n 2299,\n 2300,\n 2300,\n 2300,\n 2300,\n 2300,\n 2301,\n 2301,\n 2301,\n 2301,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2302,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2303,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2304,\n 2305,\n 2305,\n 2306,\n 2307,\n 2308,\n 2309,\n 2310,\n 2310,\n 2311,\n 2312,\n 2313,\n 2314,\n 2314,\n 2315,\n 2316,\n 2317,\n 2317,\n 2317,\n 2317,\n 2317,\n 2318,\n 2319,\n 2320,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2321,\n 2322,\n 2323,\n 2324,\n 2325,\n 2325,\n 2326,\n 2327,\n 2327,\n 2327,\n 2327,\n 2328,\n 2329,\n 2330,\n 2331,\n 2332,\n 2333,\n 2334,\n 2334,\n 2335,\n 2335,\n 2335,\n 2336,\n 2337,\n 2338,\n 2339,\n 2339,\n 2340,\n 2341,\n 2341,\n 2341,\n 2342,\n 2342,\n 2343,\n 2344,\n 2345,\n 2346,\n 2347,\n 2347,\n 2348,\n 2348,\n 2348,\n 2348,\n 2348,\n 2349,\n 2349,\n 2350,\n 2351,\n 2352,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2353,\n 2354,\n 2355,\n 2355,\n 2355,\n 2356,\n 2356,\n 2356,\n 2356,\n 2357,\n 2358,\n 2359,\n 2360,\n 2360,\n 2360,\n 2360,\n 2361,\n 2362,\n 2362,\n 2362,\n 2362,\n 2363,\n 2364,\n 2365,\n 2365,\n 2366,\n 2366,\n 2366,\n 2366,\n 2366,\n 2367,\n 2367,\n 2368,\n 2369,\n 2369,\n 2370,\n 2371,\n 2371,\n 2371,\n 2371,\n 2371,\n 2372,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2373,\n 2374,\n 2375,\n 2375,\n 2375,\n 2376,\n 2376,\n 2376,\n 2377,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2378,\n 2379,\n 2379,\n 2380,\n 2381,\n 2381,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2382,\n 2383,\n 2383,\n 2384,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2385,\n 2386,\n 2387,\n 2387,\n 2388,\n 2389,\n 2389,\n 2390,\n 2391,\n 2392,\n 2392,\n 2392,\n 2393,\n 2394,\n 2395,\n 2395,\n 2396,\n 2397,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2398,\n 2399,\n 2399,\n 2399,\n 2400,\n 2401,\n 2402,\n 2403,\n 2403,\n 2403,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2404,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2405,\n 2406,\n 2406,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2407,\n 2408,\n 2409,\n 2410,\n 2411,\n 2412,\n 2413,\n 2413,\n 2414,\n 2415,\n 2416,\n 2417,\n 2417,\n 2418,\n 2419,\n 2420,\n 2421,\n 2421,\n 2421,\n 2421,\n 2422,\n 2422,\n 2423,\n 2423,\n 2423,\n 2424,\n 2425,\n 2426,\n 2427,\n 2428,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2429,\n 2430,\n 2431,\n 2431,\n 2432,\n 2432,\n 2433,\n 2433,\n 2433,\n 2433,\n 2434,\n 2435,\n 2435,\n 2435,\n 2436,\n 2437,\n 2437,\n 2437,\n 2438,\n 2439,\n 2440,\n 2441,\n 2441,\n 2441,\n 2441,\n 2442,\n 2443,\n 2443,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2444,\n 2445,\n 2446,\n 2446,\n 2446,\n 2446,\n 2447,\n 2447,\n 2447,\n 2448,\n 2449,\n 2449,\n 2450,\n 2450,\n 2450,\n 2450,\n 2451,\n 2451,\n 2451,\n 2452,\n 2453,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2454,\n 2455,\n 2456,\n 2456,\n 2457,\n 2457,\n 2457,\n 2457,\n 2457,\n 2458,\n 2459,\n 2459,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2460,\n 2461,\n 2462,\n 2463,\n 2464,\n 2464,\n 2464,\n 2465,\n 2465,\n 2465,\n 2465,\n 2465,\n 2466,\n 2466,\n 2467,\n 2468,\n 2468,\n 2468,\n 2468,\n 2469,\n 2469,\n 2470,\n 2471,\n 2472,\n 2472,\n 2473,\n 2473,\n 2474,\n 2475,\n 2475,\n 2476,\n 2476,\n 2477,\n 2477,\n 2477,\n 2478,\n 2478,\n 2479,\n 2480,\n 2481,\n 2482,\n 2483,\n 2483,\n 2484,\n 2485,\n 2486,\n 2487,\n 2487,\n 2487,\n 2488,\n 2489,\n 2490,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2491,\n 2492,\n 2492,\n 2493,\n 2493,\n 2493,\n 2494,\n 2495,\n 2495,\n 2495,\n 2496,\n 2496,\n 2496,\n 2496,\n 2497,\n 2498,\n 2499,\n 2500,\n 2501,\n 2501,\n 2501,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2502,\n 2503,\n 2503,\n 2504,\n 2504,\n 2504,\n 2504,\n 2505,\n 2506,\n 2506,\n 2507,\n 2508,\n 2509,\n 2510,\n 2510,\n 2511,\n 2512,\n 2513,\n 2514,\n 2515,\n 2516,\n 2517,\n 2517,\n 2518,\n 2518,\n 2519,\n 2519,\n 2520,\n 2520,\n 2521,\n 2522,\n 2523,\n 2523,\n 2523,\n 2523,\n 2523,\n 2524,\n 2525,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2526,\n 2527,\n 2527,\n 2528,\n 2528,\n 2528,\n 2529,\n 2529,\n 2529,\n 2530,\n 2530,\n 2530,\n 2531,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2532,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2533,\n 2534,\n 2534,\n 2534,\n 2534,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2535,\n 2536,\n 2536,\n 2537,\n 2538,\n 2538,\n 2538,\n 2538,\n 2538,\n 2539,\n 2539,\n 2540,\n 2540,\n 2540,\n 2541,\n 2542,\n 2542,\n 2543,\n 2544,\n 2545,\n 2546,\n 2546,\n 2547,\n 2547,\n 2548,\n 2549,\n 2550,\n 2550,\n 2551,\n 2552,\n 2553,\n 2554,\n 2555,\n 2556,\n 2556,\n 2556,\n 2556,\n 2556,\n 2557,\n 2557,\n 2558,\n 2558,\n 2558,\n 2559,\n 2559,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2560,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2561,\n 2562,\n 2562,\n 2562,\n 2563,\n 2564,\n 2565,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2566,\n 2567,\n 2568,\n 2569,\n 2569,\n 2570,\n 2570,\n 2571,\n 2572,\n 2573,\n 2573,\n 2573,\n 2574,\n 2575,\n 2576,\n 2577,\n 2577,\n 2578,\n 2578,\n 2579,\n 2579,\n 2580,\n 2581,\n 2581,\n 2581,\n 2581,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2582,\n 2583,\n 2583,\n 2584,\n 2584,\n 2585,\n 2586,\n 2587,\n 2588,\n 2588,\n 2589,\n 2590,\n 2591,\n 2592,\n 2593,\n 2594,\n 2594,\n 2595,\n 2596,\n 2597,\n 2597,\n 2597,\n 2598,\n 2598,\n 2599,\n 2599,\n 2600,\n 2600,\n 2600,\n 2601,\n 2601,\n 2602,\n 2603,\n 2603,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2604,\n 2605,\n 2606,\n 2606,\n 2607,\n 2607,\n 2608,\n 2608,\n 2609,\n 2609,\n 2610,\n 2611,\n 2612,\n 2613,\n 2613,\n 2613,\n 2613,\n 2614,\n 2615,\n 2616,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2617,\n 2618,\n 2619,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2620,\n 2621,\n 2622,\n 2623,\n 2624,\n 2625,\n 2625,\n 2625,\n 2625,\n 2625,\n 2626,\n 2626,\n 2626,\n 2627,\n 2628,\n 2629,\n 2630,\n 2631,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2632,\n 2633,\n 2634,\n 2635,\n 2635,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2636,\n 2637,\n 2637,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2638,\n 2639,\n 2640,\n 2640,\n 2640,\n 2641,\n 2641,\n 2642,\n 2642,\n 2642,\n 2643,\n 2643,\n 2643,\n 2643,\n 2643,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2644,\n 2645,\n 2645,\n 2646,\n 2647,\n 2647,\n 2647,\n 2647,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2648,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2649,\n 2650,\n 2651,\n 2651,\n 2652,\n 2653,\n 2654,\n 2655,\n 2655,\n 2656,\n 2657,\n 2657,\n 2658,\n 2658,\n 2659,\n 2659,\n 2659,\n 2659,\n 2660,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2661,\n 2662,\n 2662,\n 2663,\n 2664,\n 2665,\n 2666,\n 2667,\n 2668,\n 2669,\n 2670,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2671,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2672,\n 2673,\n 2674,\n 2675,\n 2676,\n 2676,\n 2677,\n 2678,\n 2678,\n 2678,\n 2678,\n 2679,\n 2680,\n 2680,\n 2681,\n 2681,\n 2681,\n 2682,\n 2683,\n 2684,\n 2684,\n 2685,\n 2686,\n 2687,\n 2687,\n 2687,\n 2687,\n 2688,\n 2688,\n 2689,\n 2690,\n 2691,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2692,\n 2693,\n 2694,\n 2695,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2696,\n 2697,\n 2698,\n 2699,\n 2700,\n 2700,\n 2701,\n 2701,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2702,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2703,\n 2704,\n 2704,\n 2705,\n 2705,\n 2706,\n 2706,\n 2706,\n 2707,\n 2708,\n 2708,\n 2709,\n 2709,\n 2709,\n 2709,\n 2709,\n 2710,\n 2711,\n 2711,\n 2712,\n 2713,\n 2714,\n 2714,\n 2714,\n 2714,\n 2714,\n 2715,\n 2715,\n 2715,\n 2716,\n 2717,\n 2718,\n 2718,\n 2718,\n 2719,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2720,\n 2721,\n 2722,\n 2723,\n 2723,\n 2724,\n 2724,\n 2725,\n 2726,\n 2726,\n 2727,\n 2728,\n 2728,\n 2729,\n 2729,\n 2730,\n 2731,\n 2732,\n 2733,\n 2734,\n 2734,\n 2735,\n 2735,\n 2736,\n 2737,\n 2738,\n 2739,\n 2740,\n 2741,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2742,\n 2743,\n 2743,\n 2744,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2745,\n 2746,\n 2746,\n 2747,\n 2747,\n 2747,\n 2747,\n 2748,\n 2749,\n 2750,\n 2751,\n 2752,\n 2753,\n 2754,\n 2755,\n 2755,\n 2755,\n 2756,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2757,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2758,\n 2759,\n 2759,\n 2760,\n 2761,\n 2762,\n 2763,\n 2764,\n 2764,\n 2765,\n 2766,\n 2767,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2768,\n 2769,\n 2769,\n 2769,\n 2770,\n 2771,\n 2771,\n 2772,\n 2772,\n 2772,\n 2773,\n 2773,\n 2773,\n 2774,\n 2775,\n 2776,\n 2777,\n 2777,\n 2777,\n 2777,\n 2778,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2779,\n 2780,\n 2780,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2781,\n 2782,\n 2782,\n 2782,\n 2783,\n 2784,\n 2784,\n 2785,\n 2785,\n 2785,\n 2786,\n 2786,\n 2787,\n 2787,\n 2787,\n 2788,\n 2789,\n 2789,\n 2790,\n 2791,\n 2791,\n 2792,\n 2792,\n 2793,\n 2794,\n 2795,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2796,\n 2797,\n 2797,\n 2797,\n 2797,\n 2798,\n 2798,\n 2798,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2799,\n 2800,\n 2801,\n 2802,\n 2802,\n 2803,\n 2803,\n 2803,\n 2803,\n 2803,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2804,\n 2805,\n 2806,\n 2806,\n 2806,\n 2806,\n 2807,\n 2807,\n 2808,\n 2808,\n 2809,\n 2810,\n 2811,\n 2811,\n 2811,\n 2811,\n 2811,\n 2812,\n 2813,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2814,\n 2815,\n 2816,\n 2817,\n 2818,\n 2818,\n 2818,\n 2818,\n 2818,\n 2819,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2820,\n 2821,\n 2821,\n 2822,\n 2823,\n 2823,\n 2823,\n 2823,\n 2823,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2824,\n 2825,\n 2825,\n 2826,\n 2827,\n 2828,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2829,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2830,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2831,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2832,\n 2833,\n 2833,\n 2834,\n 2835,\n 2836,\n 2836,\n 2837,\n 2838,\n 2838,\n 2839,\n 2839,\n 2839,\n 2840,\n 2841,\n 2841,\n 2841,\n 2841,\n 2842,\n 2843,\n 2844,\n 2845,\n 2846,\n 2847,\n 2848,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2849,\n 2850,\n 2850,\n 2851,\n 2852,\n 2852,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2853,\n 2854,\n 2854,\n 2855,\n 2856,\n 2857,\n 2857,\n 2858,\n 2859,\n 2859,\n 2860,\n 2860,\n 2861,\n 2861,\n 2862,\n 2862,\n 2862,\n 2863,\n 2863,\n 2864,\n 2864,\n 2865,\n 2865,\n 2866,\n 2866,\n 2867,\n 2867,\n 2868,\n 2868,\n 2868,\n 2868,\n 2869,\n 2869,\n 2870,\n 2871,\n 2871,\n 2871,\n 2871,\n 2872,\n 2872,\n 2872,\n 2872,\n 2872,\n 2873,\n 2873,\n 2874,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2875,\n 2876,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2877,\n 2878,\n 2878,\n 2879,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2880,\n 2881,\n 2881,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2882,\n 2883,\n 2883,\n 2884,\n 2885,\n 2886,\n 2887,\n 2887,\n 2887,\n 2888,\n 2889,\n 2890,\n 2891,\n 2892,\n 2893,\n 2894,\n 2895,\n 2895,\n 2896,\n 2897,\n 2898,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2899,\n 2900,\n 2900,\n 2901,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2902,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2903,\n 2904,\n 2905,\n 2906,\n 2906,\n 2907,\n 2908,\n 2908,\n 2908,\n 2909,\n 2910,\n 2911,\n 2912,\n 2913,\n 2914,\n 2914,\n 2914,\n 2915,\n 2916,\n 2916,\n 2917,\n 2918,\n 2918,\n 2918,\n 2918,\n 2919,\n 2920,\n 2921,\n 2922,\n 2923,\n 2924,\n 2925,\n 2925,\n 2926,\n 2927,\n 2928,\n 2929,\n 2930,\n 2931,\n 2931,\n 2932,\n 2932,\n 2932,\n 2932,\n 2933,\n 2934,\n 2934,\n 2934,\n 2934,\n 2935,\n 2936,\n 2936,\n 2936,\n 2937,\n 2938,\n 2938,\n 2939,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2940,\n 2941,\n 2942,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2943,\n 2944,\n 2944,\n 2945,\n 2945,\n 2945,\n 2946,\n 2947,\n 2947,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2948,\n 2949,\n 2950,\n 2951,\n 2952,\n 2952,\n 2952,\n 2952,\n 2952,\n 2953,\n 2954,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2955,\n 2956,\n 2957,\n 2958,\n 2958,\n 2958,\n 2959,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2960,\n 2961,\n 2962,\n 2962,\n 2963,\n 2963,\n 2963,\n 2963,\n 2964,\n 2964,\n 2964,\n 2965,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2966,\n 2967,\n 2968,\n 2968,\n 2968,\n 2968,\n 2969,\n 2970,\n 2970,\n 2971,\n 2972,\n 2973,\n 2974,\n 2975,\n 2975,\n 2975,\n 2975,\n 2975,\n 2976,\n 2976,\n 2977,\n 2978,\n 2979,\n 2979,\n 2980,\n 2980,\n 2980,\n 2980,\n 2980,\n 2981,\n 2981,\n 2982,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2983,\n 2984,\n 2985,\n 2986,\n 2986,\n 2986,\n 2987,\n 2988,\n 2989,\n 2990,\n 2990,\n 2991,\n 2992,\n 2993,\n 2994,\n 2995,\n 2996,\n 2996,\n 2996,\n 2997,\n 2997,\n 2997,\n 2998,\n 2999,\n 3000,\n 3001,\n 3001,\n 3001,\n 3001,\n 3002,\n 3003,\n 3003,\n 3004,\n 3004,\n 3004,\n 3005,\n 3006,\n 3007,\n 3008,\n 3008,\n 3008,\n 3008,\n 3008,\n 3009,\n 3010,\n 3011,\n 3012,\n 3012,\n 3013,\n 3013,\n 3013,\n 3014,\n 3015,\n 3016,\n 3016,\n 3017,\n 3017,\n 3018,\n 3019,\n 3020,\n 3021,\n 3022,\n 3022,\n 3023,\n 3024,\n 3025,\n 3026,\n 3027,\n 3028,\n 3029,\n 3030,\n 3031,\n 3031,\n 3032,\n 3033,\n 3033,\n 3033,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3034,\n 3035,\n 3035,\n 3036,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3037,\n 3038,\n 3039,\n 3039,\n 3039,\n 3039,\n 3040,\n 3040,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3041,\n 3042,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3043,\n 3044,\n 3044,\n 3045,\n 3045,\n 3045,\n 3046,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3047,\n 3048,\n 3048,\n 3048,\n 3049,\n 3050,\n 3051,\n 3051,\n 3052,\n 3052,\n 3053,\n 3053,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3054,\n 3055,\n 3055,\n 3055,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3056,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3057,\n 3058,\n 3059,\n 3059,\n 3059,\n 3059,\n 3060,\n 3060,\n 3061,\n 3062,\n 3063,\n 3063,\n 3064,\n 3064,\n 3065,\n 3066,\n 3067,\n 3068,\n 3069,\n 3070,\n 3070,\n 3070,\n 3070,\n 3071,\n 3071,\n 3071,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3072,\n 3073,\n 3073,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3074,\n 3075,\n 3075,\n 3076,\n 3077,\n 3078,\n 3079,\n 3080,\n 3081,\n 3082,\n 3083,\n 3084,\n 3085,\n 3086,\n 3087,\n 3087,\n 3087,\n 3088,\n 3089,\n 3089,\n 3089,\n 3089,\n 3090,\n 3091,\n 3091,\n 3091,\n 3092,\n 3093,\n 3094,\n 3095,\n 3096,\n 3097,\n 3098,\n 3099,\n 3100,\n 3100,\n 3101,\n 3102,\n 3103,\n 3104,\n 3104,\n 3105,\n 3106,\n 3107,\n 3108,\n 3108,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3109,\n 3110,\n 3110,\n 3110,\n 3111,\n 3112,\n 3113,\n 3113,\n 3114,\n 3114,\n 3115,\n 3115,\n 3116,\n 3116,\n 3116,\n 3116,\n 3116,\n 3117,\n 3118,\n 3118,\n 3118,\n 3119,\n 3119,\n 3120,\n 3121,\n 3122,\n 3123,\n 3124,\n 3125,\n 3125,\n 3125,\n 3126,\n 3127,\n 3127,\n 3128,\n 3129,\n 3129,\n 3130,\n 3131,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3132,\n 3133,\n 3134,\n 3134,\n 3134,\n 3134,\n 3135,\n 3136,\n 3137,\n 3137,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3138,\n 3139,\n 3139,\n 3139,\n 3140,\n 3141,\n 3142,\n 3142,\n 3142,\n 3142,\n 3142,\n 3143,\n 3144,\n 3145,\n 3146,\n 3147,\n 3147,\n 3148,\n 3149,\n 3150,\n 3151,\n 3151,\n 3151,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3152,\n 3153,\n 3153,\n 3153,\n 3154,\n 3155,\n 3156,\n 3157,\n 3158,\n 3158,\n 3158,\n 3158,\n 3159,\n 3160,\n 3161,\n 3161,\n 3161,\n 3161,\n 3162,\n 3163,\n 3164,\n 3165,\n 3166,\n 3167,\n 3168,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3169,\n 3170,\n 3170,\n 3171,\n 3171,\n 3172,\n 3173,\n 3174,\n 3175,\n 3176,\n 3177,\n 3178,\n 3179,\n 3179,\n 3179,\n 3180,\n 3181,\n 3182,\n 3182,\n 3182,\n 3183,\n 3184,\n 3185,\n 3185,\n 3185,\n 3186,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3187,\n 3188,\n 3188,\n 3189,\n 3189,\n 3190,\n 3191,\n 3191,\n 3191,\n 3191,\n 3191,\n 3192,\n 3192,\n 3193,\n 3194,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3195,\n 3196,\n 3197,\n 3197,\n 3197,\n 3197,\n 3197,\n 3198,\n 3198,\n 3198,\n 3199,\n 3200,\n 3201,\n 3202,\n 3203,\n 3204,\n 3205,\n 3206,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3207,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3208,\n 3209,\n 3210,\n 3210,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3211,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3212,\n 3213,\n 3213,\n 3213,\n 3214,\n 3214,\n 3214,\n 3215,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3216,\n 3217,\n 3217,\n 3217,\n 3217,\n 3218,\n 3219,\n 3220,\n 3220,\n 3220,\n 3220,\n 3220,\n 3221,\n 3221,\n 3222,\n 3223,\n 3223,\n 3223,\n 3224,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3225,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3226,\n 3227,\n 3227,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3228,\n 3229,\n 3230,\n 3230,\n 3231,\n 3231,\n 3232,\n 3232,\n 3232,\n 3233,\n 3233,\n 3233,\n 3234,\n 3235,\n 3236,\n 3237,\n 3237,\n 3237,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3238,\n 3239,\n 3240,\n 3241,\n 3241,\n 3241,\n 3242,\n 3242,\n 3243,\n 3243,\n 3244,\n 3245,\n 3246,\n 3246,\n 3246,\n 3246,\n 3247,\n 3248,\n 3249,\n 3250,\n 3250,\n 3251,\n 3252,\n 3253,\n 3254,\n 3254,\n 3255,\n 3255,\n 3255,\n 3255,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3256,\n 3257,\n 3258,\n 3258,\n 3258,\n 3259,\n 3259,\n 3259,\n 3260,\n 3260,\n 3260,\n 3260,\n 3260,\n 3261,\n 3261,\n 3261,\n 3261,\n 3262,\n 3262,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3263,\n 3264,\n 3264,\n 3265,\n 3266,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3267,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3268,\n 3269,\n 3270,\n 3270,\n 3270,\n 3270,\n 3271,\n 3271,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3272,\n 3273,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3274,\n 3275,\n 3276,\n 3277,\n 3277,\n 3277,\n 3278,\n 3278,\n 3279,\n 3279,\n 3279,\n 3279,\n 3280,\n 3281,\n 3282,\n 3283,\n 3283,\n 3284,\n 3285,\n 3286,\n 3286,\n 3287,\n 3287,\n 3288,\n 3288,\n 3289,\n 3289,\n 3289,\n 3289,\n 3290,\n 3290,\n 3291,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3292,\n 3293,\n 3293,\n 3294,\n 3294,\n 3295,\n 3295,\n 3295,\n 3295,\n 3295,\n 3296,\n 3296,\n 3297,\n 3298,\n 3298,\n 3298,\n 3298,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3299,\n 3300,\n 3300,\n 3301,\n 3302,\n 3303,\n 3304,\n 3304,\n 3304,\n 3304,\n 3304,\n 3305,\n 3306,\n 3306,\n 3306,\n 3306,\n 3307,\n 3308,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3309,\n 3310,\n 3310,\n 3310,\n 3310,\n 3311,\n 3312,\n 3313,\n 3314,\n 3315,\n 3316,\n 3316,\n 3317,\n 3317,\n 3317,\n 3317,\n 3318,\n 3318,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3319,\n 3320,\n 3320,\n 3321,\n 3321,\n 3321,\n 3321,\n 3321,\n 3322,\n 3323,\n 3323,\n 3323,\n 3324,\n 3324,\n 3324,\n 3324,\n 3324,\n 3325,\n 3325,\n 3326,\n 3327,\n 3327,\n 3327,\n 3327,\n 3328,\n 3328,\n 3328,\n 3329,\n 3329,\n 3329,\n 3330,\n 3331,\n 3332,\n 3332,\n 3333,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3334,\n 3335,\n 3335,\n 3335,\n 3336,\n 3337,\n 3338,\n 3339,\n 3339,\n 3339,\n 3340,\n 3340,\n 3341,\n 3342,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3343,\n 3344,\n 3345,\n 3345,\n 3346,\n 3347,\n 3348,\n 3349,\n 3350,\n 3351,\n 3352,\n 3352,\n 3352,\n 3352,\n 3353,\n 3353,\n 3353,\n 3354,\n 3354,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3355,\n 3356,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3357,\n 3358,\n 3359,\n 3360,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3361,\n 3362,\n 3363,\n 3363,\n 3363,\n 3363,\n 3364,\n 3365,\n 3365,\n 3365,\n 3365,\n 3365,\n 3366,\n 3366,\n 3366,\n 3367,\n 3367,\n 3367,\n 3367,\n 3368,\n 3368,\n 3369,\n 3369,\n 3369,\n 3370,\n 3371,\n 3371,\n 3371,\n 3371,\n 3371,\n 3372,\n 3372,\n 3372,\n 3373,\n 3374,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3375,\n 3376,\n 3377,\n 3377,\n 3377,\n 3377,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3378,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3379,\n 3380,\n 3380,\n 3380,\n 3381,\n 3382,\n 3383,\n 3384,\n 3385,\n 3385,\n 3385,\n 3385,\n 3385,\n 3386,\n 3387,\n 3388,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3389,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3390,\n 3391,\n 3391,\n 3392,\n 3393,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3394,\n 3395,\n 3395,\n 3395,\n 3395,\n 3396,\n 3397,\n 3398,\n 3399,\n 3399,\n 3399,\n 3400,\n 3400,\n 3400,\n 3400,\n 3400,\n 3401,\n 3401,\n 3401,\n 3402,\n 3402,\n 3402,\n 3403,\n 3404,\n 3404,\n 3404,\n 3404,\n 3404,\n 3405,\n 3406,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3407,\n 3408,\n 3409,\n 3410,\n 3410,\n 3410,\n 3411,\n 3411,\n 3411,\n 3412,\n 3413,\n 3413,\n 3414,\n 3414,\n 3415,\n 3415,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3416,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3417,\n 3418,\n 3419,\n 3419,\n 3420,\n 3420,\n 3420,\n 3421,\n 3421,\n 3422,\n 3422,\n 3423,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3424,\n 3425,\n 3425,\n 3426,\n 3427,\n 3427,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3428,\n 3429,\n 3429,\n 3430,\n 3430,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3431,\n 3432,\n 3432,\n 3433,\n 3433,\n 3433,\n 3433,\n 3433,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3434,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3435,\n 3436,\n 3437,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3438,\n 3439,\n 3439,\n 3439,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3440,\n 3441,\n 3441,\n 3441,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3442,\n 3443,\n 3443,\n 3443,\n 3443,\n 3444,\n 3445,\n 3446,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3447,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3448,\n 3449,\n 3450,\n 3450,\n 3451,\n 3452,\n 3452,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3453,\n 3454,\n 3455,\n 3455,\n 3455,\n 3455,\n 3456,\n 3457,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3458,\n 3459,\n 3459,\n 3460,\n 3460,\n 3461,\n 3461,\n 3461,\n 3461,\n 3462,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3463,\n 3464,\n 3465,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3466,\n 3467,\n 3468,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3469,\n 3470,\n 3470,\n 3471,\n 3471,\n 3471,\n 3472,\n 3472,\n 3472,\n 3473,\n 3473,\n 3473,\n 3474,\n 3474,\n 3474,\n 3475,\n 3476,\n 3476,\n 3477,\n 3478,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3479,\n 3480,\n 3481,\n 3481,\n 3482,\n 3482,\n 3482,\n 3482,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3483,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3484,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3485,\n 3486,\n 3486,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3487,\n 3488,\n 3489,\n 3489,\n 3489,\n 3489,\n 3489,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3490,\n 3491,\n 3492,\n 3492,\n 3492,\n 3492,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3493,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3494,\n 3495,\n 3495,\n 3495,\n 3495,\n 3495,\n 3496,\n 3497,\n 3498,\n 3499,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3500,\n 3501,\n 3501,\n 3502,\n 3502,\n 3503,\n 3504,\n 3505,\n 3506,\n 3506,\n 3507,\n 3507,\n 3508,\n 3508,\n 3509,\n 3510,\n 3510,\n 3511,\n 3512,\n 3512,\n 3512,\n 3512,\n 3512,\n 3513,\n 3514,\n 3515,\n 3515,\n 3516,\n 3516,\n 3516,\n 3516,\n 3516,\n 3517,\n 3518,\n 3519,\n 3520,\n 3520,\n 3521,\n 3522,\n 3523,\n 3524,\n 3524,\n 3524,\n 3525,\n 3525,\n 3526,\n 3527,\n 3528,\n 3529,\n 3529,\n 3530,\n 3531,\n 3532,\n 3533,\n 3534,\n 3534,\n 3534,\n 3534,\n 3535,\n 3535,\n 3535,\n 3536,\n 3537,\n 3537,\n 3538,\n 3539,\n 3540,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3541,\n 3542,\n 3543,\n 3544,\n 3544,\n 3545,\n 3546,\n 3547,\n 3548,\n 3549,\n 3550,\n 3551,\n 3552,\n 3553,\n 3554,\n 3555,\n 3556,\n 3557,\n 3557,\n 3558,\n 3558,\n 3558,\n 3558,\n 3558,\n 3559,\n 3559,\n 3559,\n 3560,\n 3561,\n 3562,\n 3563,\n 3563,\n 3563,\n 3564,\n 3564,\n 3565,\n 3566,\n 3567,\n 3567,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3568,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3569,\n 3570,\n 3571,\n 3571,\n 3571,\n 3572,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3573,\n 3574,\n 3575,\n 3575,\n 3575,\n 3575,\n 3576,\n 3576,\n 3577,\n 3578,\n 3579,\n 3580,\n 3581,\n 3582,\n 3583,\n 3583,\n 3583,\n 3583,\n 3584,\n 3585,\n 3586,\n 3586,\n 3587,\n 3587,\n 3588,\n 3589,\n 3590,\n 3590,\n 3590,\n 3590,\n 3591,\n 3592,\n 3592,\n 3593,\n 3594,\n 3595,\n 3596,\n 3596,\n 3596,\n 3597,\n 3598,\n 3599,\n 3600,\n 3601,\n 3601,\n 3602,\n 3603,\n 3603,\n 3603,\n 3604,\n 3604,\n 3604,\n 3604,\n 3604,\n 3605,\n 3606,\n 3607,\n 3608,\n 3609,\n 3610,\n 3610,\n 3610,\n 3611,\n 3611,\n 3612,\n 3613,\n 3614,\n 3614,\n 3615,\n 3616,\n 3616,\n 3617,\n 3617,\n 3617,\n 3617,\n 3618,\n 3619,\n 3620,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3621,\n 3622,\n 3623,\n 3624,\n 3625,\n 3626,\n 3627,\n 3627,\n 3627,\n 3628,\n 3628,\n 3629,\n 3629,\n 3629,\n 3630,\n 3631,\n 3631,\n 3632,\n 3632,\n 3632,\n 3632,\n 3633,\n 3634,\n 3634,\n 3635,\n 3636,\n 3636,\n 3637,\n 3637,\n 3638,\n 3639,\n 3639,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3640,\n 3641,\n 3641,\n 3641,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3642,\n 3643,\n 3643,\n 3643,\n 3643,\n 3644,\n 3644,\n 3645,\n 3645,\n 3645,\n 3645,\n 3646,\n 3647,\n 3648,\n 3648,\n 3648,\n 3648,\n 3649,\n 3650,\n 3650,\n 3650,\n 3651,\n 3652,\n 3653,\n 3653,\n 3654,\n 3655,\n 3656,\n 3656,\n 3657,\n 3657,\n 3657,\n 3657,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3658,\n 3659,\n 3660,\n 3661,\n 3662,\n 3662,\n 3662,\n 3662,\n 3662,\n 3663,\n 3664,\n 3664,\n 3664,\n 3664,\n 3665,\n 3666,\n 3666,\n 3667,\n 3668,\n 3669,\n 3669,\n 3670,\n 3671,\n 3671,\n 3671,\n 3671,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3672,\n 3673,\n 3674,\n 3674,\n 3675,\n 3675,\n 3675,\n 3675,\n 3675,\n 3676,\n 3676,\n 3677,\n 3678,\n 3679,\n 3680,\n 3680,\n 3681,\n 3682,\n 3682,\n 3682,\n 3683,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3684,\n 3685,\n 3686,\n 3687,\n 3688,\n 3689,\n 3689,\n 3690,\n 3691,\n 3692,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3693,\n 3694,\n 3695,\n 3695,\n 3695,\n 3696,\n 3696,\n 3697,\n 3697,\n 3697,\n 3697,\n 3697,\n 3698,\n 3699,\n 3700,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3701,\n 3702,\n 3703,\n 3703,\n 3703,\n 3704,\n 3705,\n 3706,\n 3706,\n 3706,\n 3707,\n 3707,\n 3708,\n 3709,\n 3710,\n 3711,\n 3712,\n 3712,\n 3712,\n 3712,\n 3713,\n 3713,\n 3713,\n 3713,\n 3713,\n 3714,\n 3715,\n 3715,\n 3716,\n 3717,\n 3717,\n 3718,\n 3719,\n 3720,\n 3721,\n 3721,\n 3721,\n 3721,\n 3722,\n 3722,\n 3723,\n 3723,\n 3724,\n 3725,\n 3725,\n 3725,\n 3726,\n 3726,\n 3727,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3728,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3729,\n 3730,\n 3731,\n 3732,\n 3733,\n 3734,\n 3735,\n 3736,\n 3737,\n 3738,\n 3739,\n 3739,\n 3739,\n 3740,\n 3740,\n 3741,\n 3741,\n 3741,\n 3742,\n 3743,\n 3744,\n 3745,\n 3745,\n 3746,\n 3746,\n 3747,\n 3747,\n 3748,\n 3748,\n 3749,\n 3749,\n 3750,\n 3750,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3751,\n 3752,\n 3753,\n 3754,\n 3755,\n 3755,\n 3755,\n 3755,\n 3756,\n 3756,\n 3757,\n 3758,\n 3758,\n 3759,\n 3760,\n 3760,\n 3760,\n 3761,\n 3761,\n 3762,\n 3763,\n 3764,\n 3765,\n 3766,\n 3767,\n 3767,\n 3767,\n 3767,\n 3768,\n 3768,\n 3768,\n 3768,\n 3768,\n 3769,\n 3770,\n 3770,\n 3771,\n 3772,\n 3772,\n 3772,\n 3773,\n 3774,\n 3775,\n 3776,\n 3776,\n 3777,\n 3777,\n 3778,\n 3778,\n 3779,\n 3779,\n 3780,\n 3780,\n 3781,\n 3782,\n 3783,\n 3783,\n 3784,\n 3785,\n 3786,\n 3787,\n 3787,\n 3788,\n 3788,\n 3789,\n 3790,\n 3791,\n 3792,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3793,\n 3794,\n 3795,\n 3796,\n 3797,\n 3797,\n 3797,\n 3798,\n 3799,\n 3800,\n 3800,\n 3800,\n 3800,\n 3801,\n 3801,\n 3801,\n 3801,\n 3802,\n 3802,\n 3802,\n 3803,\n 3804,\n 3805,\n 3805,\n 3806,\n 3807,\n 3807,\n 3808,\n 3809,\n 3810,\n 3811,\n 3811,\n 3811,\n 3811,\n 3812,\n 3813,\n 3813,\n 3814,\n 3815,\n 3816,\n 3816,\n 3817,\n 3818,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3819,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3820,\n 3821,\n 3821,\n 3821,\n 3822,\n 3823,\n 3824,\n 3824,\n 3824,\n 3824,\n 3825,\n 3825,\n 3826,\n 3826,\n 3826,\n 3827,\n 3827,\n 3827,\n 3827,\n 3828,\n 3829,\n 3830,\n 3830,\n 3831,\n 3832,\n 3833,\n 3834,\n 3835,\n 3836,\n 3836,\n 3836,\n 3837,\n 3838,\n 3838,\n 3839,\n 3840,\n 3841,\n 3842,\n 3843,\n 3844,\n 3845,\n 3846,\n 3846,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3847,\n 3848,\n 3848,\n 3849,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3850,\n 3851,\n 3852,\n 3853,\n 3854,\n 3855,\n 3856,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3857,\n 3858,\n 3859,\n 3860,\n 3860,\n 3860,\n 3860,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3861,\n 3862,\n 3862,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3863,\n 3864,\n 3864,\n 3864,\n 3865,\n 3865,\n 3865,\n 3865,\n 3866,\n 3866,\n 3867,\n 3867,\n 3868,\n 3869,\n 3870,\n 3871,\n 3871,\n 3871,\n 3871,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3872,\n 3873,\n 3873,\n 3873,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3874,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3875,\n 3876,\n 3876,\n 3876,\n 3876,\n 3877,\n 3877,\n 3877,\n 3877,\n 3878,\n 3879,\n 3880,\n 3880,\n 3880,\n 3880,\n 3880,\n 3881,\n 3882,\n 3883,\n 3884,\n 3885,\n 3886,\n 3887,\n 3888,\n 3889,\n 3890,\n 3890,\n 3891,\n 3892,\n 3893,\n 3893,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3894,\n 3895,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3896,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3897,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3898,\n 3899,\n 3899,\n 3900,\n 3900,\n 3901,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3902,\n 3903,\n 3903,\n 3903,\n 3903,\n 3904,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3905,\n 3906,\n 3906,\n 3906,\n 3907,\n 3908,\n 3909,\n 3909,\n 3909,\n 3909,\n 3910,\n 3911,\n 3911,\n 3911,\n 3912,\n 3913,\n 3913,\n 3913,\n 3914,\n 3915,\n 3916,\n 3917,\n 3918,\n 3919,\n 3920,\n 3921,\n 3922,\n 3923,\n 3924,\n 3924,\n 3925,\n 3925,\n 3925,\n 3925,\n 3926,\n 3927,\n 3928,\n 3929,\n 3930,\n 3931,\n 3932,\n 3933,\n 3934,\n 3934,\n 3935,\n 3936,\n 3937,\n 3938,\n 3939,\n 3940,\n 3940,\n 3941,\n 3942,\n 3943,\n 3943,\n 3944,\n 3945,\n 3946,\n 3947,\n 3948,\n 3949,\n 3949,\n 3950,\n 3951,\n 3951,\n 3951,\n 3952,\n 3953,\n 3953,\n 3953,\n 3954,\n 3955,\n 3956,\n 3957,\n 3958,\n 3959,\n 3960,\n 3960,\n 3960,\n 3960,\n 3960,\n 3961,\n 3961,\n 3961,\n 3961,\n 3961,\n 3962,\n 3963,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3964,\n 3965,\n 3966,\n 3967,\n 3968,\n 3968,\n 3969,\n 3969,\n 3970,\n 3971,\n 3971,\n 3972,\n 3972,\n 3973,\n 3974,\n 3974,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3975,\n 3976,\n 3977,\n 3977,\n 3978,\n 3979,\n 3979,\n 3980,\n 3981,\n 3982,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3983,\n 3984,\n 3984,\n 3984,\n 3984,\n 3984,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3985,\n 3986,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3987,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3988,\n 3989,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3990,\n 3991,\n 3991,\n 3992,\n 3993,\n 3993,\n 3994,\n 3994,\n 3994,\n 3994,\n 3995,\n 3996,\n 3997,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3998,\n 3999,\n 3999,\n 4000,\n 4000,\n 4000,\n 4001,\n 4001,\n 4002,\n 4002,\n 4002,\n 4003,\n 4003,\n 4004,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4005,\n 4006,\n 4007,\n 4008,\n 4009,\n 4010,\n 4011,\n 4011,\n 4012,\n 4012,\n 4012,\n 4012,\n 4012,\n 4013,\n 4013,\n 4013,\n 4013,\n 4014,\n 4015,\n 4016,\n 4017,\n 4018,\n 4018,\n 4019,\n 4020,\n 4020,\n 4020,\n 4021,\n 4021,\n 4022,\n 4023,\n 4023,\n 4024,\n 4024,\n 4024,\n 4024,\n 4025,\n 4026,\n 4027,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4028,\n 4029,\n 4029,\n 4030,\n 4031,\n 4031,\n 4032,\n 4032,\n 4033,\n 4034,\n 4035,\n 4035,\n 4035,\n 4036,\n 4037,\n 4037,\n 4038,\n 4038,\n 4039,\n 4039,\n 4040,\n 4040,\n 4041,\n 4042,\n 4043,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4044,\n 4045,\n 4046,\n 4047,\n 4048,\n 4049,\n 4050,\n 4050,\n 4050,\n 4050,\n 4051,\n 4052,\n 4052,\n 4052,\n 4053,\n 4054,\n 4055,\n 4056,\n 4056,\n 4057,\n 4058,\n 4058,\n 4058,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4059,\n 4060,\n 4061,\n 4061,\n 4061,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4062,\n 4063,\n 4063,\n 4063,\n 4063,\n 4064,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4065,\n 4066,\n 4067,\n 4068,\n 4069,\n 4070,\n 4070,\n 4070,\n 4070,\n 4070,\n 4071,\n 4071,\n 4071,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4072,\n 4073,\n 4073,\n 4074,\n 4074,\n 4075,\n 4075,\n 4075,\n 4075,\n 4075,\n 4076,\n 4076,\n 4076,\n 4076,\n 4076,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4077,\n 4078,\n 4078,\n 4079,\n 4079,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4080,\n 4081,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4082,\n 4083,\n 4083,\n 4084,\n 4084,\n 4085,\n 4086,\n 4086,\n 4087,\n 4087,\n 4088,\n 4088,\n 4088,\n 4089,\n 4090,\n 4091,\n 4091,\n 4092,\n 4092,\n 4092,\n 4093,\n 4094,\n 4095,\n 4096,\n 4097,\n 4098,\n 4098,\n 4099,\n 4099,\n 4100,\n 4100,\n 4100,\n 4101,\n 4102,\n 4102,\n 4103,\n 4104,\n 4105,\n 4106,\n 4107,\n 4108,\n 4108,\n 4109,\n 4110,\n 4110,\n 4111,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4112,\n 4113,\n 4114,\n 4115,\n 4116,\n 4117,\n 4118,\n 4118,\n 4118,\n 4119,\n 4119,\n 4119,\n 4119,\n 4119,\n 4120,\n 4121,\n 4122,\n 4123,\n 4124,\n 4125,\n 4126,\n 4127,\n 4127,\n 4127,\n 4127,\n 4127,\n 4128,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4129,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4130,\n 4131,\n 4131,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4132,\n 4133,\n 4133,\n 4133,\n 4134,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4135,\n 4136,\n 4136,\n 4136,\n 4136,\n 4136,\n 4137,\n 4137,\n 4138,\n 4138,\n 4138,\n 4139,\n 4139,\n 4140,\n 4141,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4142,\n 4143,\n 4143,\n 4143,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4144,\n 4145,\n 4145,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4146,\n 4147,\n 4148,\n 4149,\n 4150,\n 4151,\n 4151,\n 4152,\n 4152,\n 4152,\n 4153,\n 4153,\n 4154,\n 4154,\n 4155,\n 4156,\n 4157,\n 4158,\n 4159,\n 4160,\n 4160,\n 4161,\n 4162,\n 4163,\n 4164,\n 4165,\n 4166,\n 4167,\n 4167,\n 4168,\n 4169,\n 4169,\n 4169,\n 4170,\n 4171,\n 4171,\n 4171,\n 4171,\n 4172,\n 4173,\n 4174,\n 4175,\n 4175,\n 4176,\n 4176,\n 4176,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4177,\n 4178,\n 4179,\n 4180,\n 4181,\n 4182,\n 4183,\n 4184,\n 4184,\n 4184,\n 4185,\n 4186,\n 4187,\n 4188,\n 4189,\n 4190,\n 4191,\n 4192,\n 4192,\n 4192,\n 4192,\n 4193,\n 4194,\n 4194,\n 4194,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4195,\n 4196,\n 4197,\n 4197,\n 4197,\n 4198,\n 4199,\n 4200,\n 4201,\n 4202,\n 4202,\n 4203,\n 4204,\n 4205,\n 4206,\n 4207,\n 4208,\n 4209,\n 4209,\n 4210,\n 4211,\n 4211,\n 4211,\n 4212,\n 4213,\n 4213,\n 4213,\n 4214,\n 4214,\n 4215,\n 4216,\n 4216,\n 4216,\n 4217,\n 4218,\n 4219,\n 4220,\n 4221,\n 4222,\n 4223,\n 4223,\n 4223,\n 4223,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4224,\n 4225,\n 4226,\n 4226,\n 4226,\n 4227,\n 4228,\n 4228,\n 4228,\n 4229,\n 4229,\n 4230,\n 4231,\n 4232,\n 4233,\n 4234,\n 4235,\n 4235,\n 4235,\n 4236,\n 4237,\n 4238,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4239,\n 4240,\n 4240,\n 4240,\n 4241,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4242,\n 4243,\n 4243,\n 4243,\n 4244,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4245,\n 4246,\n 4247,\n 4247,\n 4248,\n 4249,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4250,\n 4251,\n 4252,\n 4253,\n 4254,\n 4255,\n 4256,\n 4257,\n 4257,\n 4257,\n 4258,\n 4259,\n 4260,\n 4261,\n 4262,\n 4262,\n 4263,\n 4264,\n 4265,\n 4266,\n 4267,\n 4268,\n 4269,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4270,\n 4271,\n 4271,\n 4272,\n 4273,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4274,\n 4275,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4276,\n 4277,\n 4277,\n 4278,\n 4279,\n 4280,\n 4281,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4282,\n 4283,\n 4283,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4284,\n 4285,\n 4286,\n 4287,\n 4287,\n 4287,\n 4287,\n 4288,\n 4288,\n 4289,\n 4290,\n 4290,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4291,\n 4292,\n 4292,\n 4292,\n 4292,\n 4293,\n 4294,\n 4294,\n 4294,\n 4294,\n 4294,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4295,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4296,\n 4297,\n 4297,\n 4297,\n 4298,\n 4299,\n 4300,\n 4300,\n 4300,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4301,\n 4302,\n 4302,\n 4303,\n 4304,\n 4304,\n 4305,\n 4305,\n 4305,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4306,\n 4307,\n 4308,\n 4308,\n 4308,\n 4308,\n 4308,\n 4309,\n 4309,\n 4309,\n 4309,\n 4310,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4311,\n 4312,\n 4312,\n 4313,\n 4313,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4314,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4315,\n 4316,\n 4317,\n 4318,\n 4319,\n 4320,\n 4321,\n 4322,\n 4323,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4324,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4325,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4326,\n 4327,\n 4328,\n 4329,\n 4329,\n 4329,\n 4330,\n 4331,\n 4332,\n 4333,\n 4334,\n 4334,\n 4334,\n 4335,\n 4336,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4337,\n 4338,\n 4339,\n 4340,\n 4340,\n 4340,\n 4341,\n 4342,\n 4342,\n 4343,\n 4344,\n 4345,\n 4345,\n 4345,\n 4346,\n 4347,\n 4348,\n 4348,\n 4348,\n 4348,\n 4349,\n 4350,\n 4351,\n 4351,\n 4351,\n 4352,\n 4352,\n 4353,\n 4353,\n 4353,\n 4354,\n 4355,\n 4355,\n 4356,\n 4357,\n 4358,\n 4359,\n 4360,\n 4361,\n 4361,\n 4362,\n 4362,\n 4363,\n 4363,\n 4364,\n 4365,\n 4366,\n 4367,\n 4368,\n 4368,\n 4368,\n 4369,\n 4370,\n 4371,\n 4372,\n 4372,\n 4373,\n 4373,\n 4374,\n 4374,\n 4374,\n 4374,\n 4374,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4375,\n 4376,\n 4377,\n 4377,\n 4377,\n 4377,\n 4377,\n 4378,\n 4379,\n 4379,\n 4379,\n 4379,\n 4380,\n 4381,\n 4382,\n 4383,\n 4384,\n 4384,\n 4384,\n 4384,\n 4385,\n 4385,\n 4385,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4386,\n 4387,\n 4387,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4388,\n 4389,\n 4390,\n 4390,\n 4391,\n 4391,\n 4391,\n 4391,\n 4391,\n 4392,\n 4393,\n 4394,\n 4395,\n 4395,\n 4396,\n 4396,\n 4396,\n 4396,\n 4397,\n 4398,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4399,\n 4400,\n 4401,\n 4402,\n 4403,\n 4404,\n 4405,\n 4406,\n 4407,\n 4407,\n 4408,\n 4409,\n 4410,\n 4410,\n 4411,\n 4412,\n 4412,\n 4413,\n 4413,\n 4414,\n 4415,\n 4416,\n 4417,\n 4418,\n 4419,\n 4419,\n 4419,\n 4420,\n 4421,\n 4422,\n 4422,\n 4423,\n 4424,\n 4425,\n 4426,\n 4427,\n 4427,\n 4428,\n 4428,\n 4428,\n 4429,\n 4430,\n 4430,\n 4430,\n 4431,\n 4431,\n 4431,\n 4431,\n 4432,\n 4432,\n 4433,\n 4433,\n 4433,\n 4434,\n 4434,\n 4434,\n 4434,\n 4434,\n 4435,\n 4436,\n 4437,\n 4438,\n 4439,\n 4439,\n 4439,\n 4439,\n 4439,\n 4440,\n 4441,\n 4441,\n 4442,\n 4443,\n 4443,\n 4444,\n 4445,\n 4446,\n 4447,\n 4448,\n 4448,\n 4449,\n 4449,\n 4449,\n 4450,\n 4451,\n 4452,\n 4453,\n 4454,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4455,\n 4456,\n 4457,\n 4457,\n 4458,\n 4459,\n 4460,\n 4461,\n 4462,\n 4463,\n 4464,\n 4465,\n 4465,\n 4466,\n 4466,\n 4466,\n 4466,\n 4466,\n 4467,\n 4468,\n 4469,\n 4470,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4471,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4472,\n 4473,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4474,\n 4475\n ],\n [\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 2,\n 2,\n 3,\n 4,\n 4,\n 4,\n 4,\n 5,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 6,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 7,\n 8,\n 9,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 10,\n 11,\n 11,\n 11,\n 11,\n 12,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 13,\n 14,\n 15,\n 15,\n 15,\n 15,\n 15,\n 15,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 16,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 17,\n 18,\n 18,\n 18,\n 18,\n 18,\n 19,\n 20,\n 21,\n 21,\n 21,\n 21,\n 22,\n 22,\n 22,\n 22,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 23,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 24,\n 25,\n 25,\n 25,\n 25,\n 26,\n 27,\n 27,\n 27,\n 27,\n 28,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 29,\n 30,\n 31,\n 31,\n 31,\n 32,\n 32,\n 33,\n 34,\n 34,\n 34,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 35,\n 36,\n 36,\n 37,\n 38,\n 39,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 40,\n 41,\n 41,\n 41,\n 42,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 43,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 44,\n 45,\n 45,\n 45,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 46,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 47,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 48,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 49,\n 50,\n 51,\n 51,\n 52,\n 52,\n 52,\n 53,\n 53,\n 54,\n 54,\n 55,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 56,\n 57,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 58,\n 59,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 60,\n 61,\n 61,\n 62,\n 62,\n 63,\n 63,\n 63,\n 63,\n 63,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 64,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 65,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 66,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 67,\n 68,\n 68,\n 68,\n 68,\n 68,\n 69,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 70,\n 71,\n 72,\n 72,\n 72,\n 72,\n 73,\n 73,\n 73,\n 73,\n 74,\n 74,\n 74,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 75,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 76,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 77,\n 78,\n 78,\n 79,\n 80,\n 80,\n 80,\n 80,\n 80,\n 80,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 81,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 82,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 83,\n 84,\n 85,\n 85,\n 85,\n 85,\n 85,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 86,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 87,\n 88,\n 88,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 89,\n 90,\n 90,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 91,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 92,\n 93,\n 94,\n 94,\n 94,\n 95,\n 96,\n 96,\n 96,\n 96,\n 96,\n 96,\n 97,\n 97,\n 97,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 98,\n 99,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 100,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 101,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 102,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103,\n 103\n ]\n ]\n}\n", "preprocessing.json": "{\n \"id\": \"nearest-square-uint8-bilinear-center-imagenet-v1\",\n \"decode\": \"RGB; discard alpha; ignore EXIF orientation\",\n \"input\": \"uint8 CHW/BCHW or image paths; float images must be in [0,1]\",\n \"square_size\": 384,\n \"resize_size\": 438,\n \"crop_size\": 384,\n \"nearest_coordinates\": \"floor(float32(output_index) * float32(source_size/384))\",\n \"bilinear\": \"half-pixel coordinates; edge clamp; round to uint8 before normalization\",\n \"mean\": [\n 0.485,\n 0.456,\n 0.406\n ],\n \"std\": [\n 0.229,\n 0.224,\n 0.225\n ],\n \"output\": \"float32 NCHW; RGB/255 then channel normalization\"\n}\n", "presets.json": "{\n \"europe\": {\n \"path\": \"regions/europe.classes\",\n \"count\": 3014,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\",\n \"scope\": \"Records assigned EUROPE by the metadata, including European-labelled portions of transcontinental countries.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe\": {\n \"path\": \"regions/north_europe.classes\",\n \"count\": 1977,\n \"minimum_regional_rows\": 26,\n \"minimum_global_rows\": 0,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden (Ireland, Iceland, \\u00c5land, Faroe Islands, Guernsey, Isle of Man, Jersey, Svalbard/Jan Mayen: ambiguous historical inclusion; adding any or all leaves the species list unchanged).\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"europe_v3\": {\n \"path\": \"regions/europe_v3.classes\",\n \"count\": 3086,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2079617,\n \"species_before_threshold\": 3132,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\",\n \"scope\": \"Same EUROPE metadata filter as legacy europe, including European-labelled portions of transcontinental countries; updated occurrence thresholds only.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_europe_v3\": {\n \"path\": \"regions/north_europe_v3.classes\",\n \"count\": 2199,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 768497,\n \"species_before_threshold\": 2291,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\",\n \"scope\": \"Germany, Denmark, Estonia, Finland, Lithuania, Latvia, Netherlands, Norway, Poland, Sweden. Same explicit country filter as reconstructed legacy north_europe; updated occurrence thresholds only. The UK and historically ambiguous additions are not included in this definition.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"australia\": {\n \"path\": \"regions/australia.classes\",\n \"count\": 1874,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 465726,\n \"species_before_threshold\": 1907,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\",\n \"scope\": \"All Australian records, including Tasmania and other territories recorded under AU; not all Oceania.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"tasmania\": {\n \"path\": \"regions/tasmania.classes\",\n \"count\": 274,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4457,\n \"species_before_threshold\": 401,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\",\n \"scope\": \"Australian records explicitly assigned stateProvince Tasmania. Species recorded there, not only endemic species; blank/other state values are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_america\": {\n \"path\": \"regions/north_america.classes\",\n \"count\": 4425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2300391,\n \"species_before_threshold\": 4551,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\",\n \"scope\": \"Canada, United States, Mexico, Greenland, Bermuda, Saint Pierre and Miquelon. Whole countries, including US records outside the continental mainland.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"central_america\": {\n \"path\": \"regions/central_america.classes\",\n \"count\": 1639,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 210173,\n \"species_before_threshold\": 2022,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\",\n \"scope\": \"Mexico, Belize, Guatemala, Honduras, El Salvador, Nicaragua, Costa Rica, Panama. Mexico deliberately overlaps North America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_america\": {\n \"path\": \"regions/south_america.classes\",\n \"count\": 1506,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 257026,\n \"species_before_threshold\": 1683,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\",\n \"scope\": \"All SOUTH_AMERICA records or records from Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Falklands, French Guiana, Guyana, Paraguay, Peru, Suriname, Uruguay, Venezuela, Costa Rica or Panama. Costa Rica and Panama deliberately overlap Central America.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"caribbean\": {\n \"path\": \"regions/caribbean.classes\",\n \"count\": 876,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 28652,\n \"species_before_threshold\": 1092,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\",\n \"scope\": \"Caribbean islands and territories, Bahamas, Bermuda, Belize and the Guianas (Guyana, Suriname, French Guiana). Does not include every mainland country with a Caribbean coast.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"south_asia\": {\n \"path\": \"regions/south_asia.classes\",\n \"count\": 1552,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 177926,\n \"species_before_threshold\": 1929,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\",\n \"scope\": \"Afghanistan, Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka, Myanmar and Iran; deliberately broad western/eastern overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"asia\": {\n \"path\": \"regions/asia.classes\",\n \"count\": 4443,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 920962,\n \"species_before_threshold\": 4937,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\",\n \"scope\": \"All ASIA records plus all records from the listed Asian countries and territories, including Turkey, Georgia, Armenia and Azerbaijan in full. Russian records require continent ASIA; European or unassigned Russian records are excluded. Cyprus is excluded even when its continent is ASIA.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"japan\": {\n \"path\": \"regions/japan.classes\",\n \"count\": 697,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 30076,\n \"species_before_threshold\": 974,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\",\n \"scope\": \"All records assigned countryCode JP, including islands.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"africa\": {\n \"path\": \"regions/africa.classes\",\n \"count\": 924,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 149267,\n \"species_before_threshold\": 1129,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\",\n \"scope\": \"All AFRICA records plus the listed African countries and island territories. AFRICA-labelled records from transcontinental/overseas countries remain included.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"north_africa\": {\n \"path\": \"regions/north_africa.classes\",\n \"count\": 236,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 4393,\n \"species_before_threshold\": 422,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\",\n \"scope\": \"Algeria, Egypt, Libya, Morocco, Tunisia, Western Sahara, Sudan and Mauritania. Sudan and Mauritania deliberately overlap the broad sub-Saharan preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"subsaharan_africa\": {\n \"path\": \"regions/subsaharan_africa.classes\",\n \"count\": 796,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 144918,\n \"species_before_threshold\": 904,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\",\n \"scope\": \"Broad African selection excluding Algeria, Egypt, Libya, Morocco, Tunisia and Western Sahara. Includes Sudan, Mauritania, Mali, Niger, Chad, the Horn, Madagascar and island territories; this is not a Sahara boundary polygon.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"madagascar\": {\n \"path\": \"regions/madagascar.classes\",\n \"count\": 107,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 2584,\n \"species_before_threshold\": 169,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\",\n \"scope\": \"All records assigned countryCode MG. Species recorded in Madagascar, not only endemic species; neighbouring island countries/territories are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"mediterranean\": {\n \"path\": \"regions/mediterranean.classes\",\n \"count\": 2680,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 660065,\n \"species_before_threshold\": 2874,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\",\n \"scope\": \"Whole Mediterranean coastal countries/territories plus Portugal, Andorra, San Marino, Vatican City, North Macedonia, Bulgaria, Serbia and Jordan. Includes inland and overseas records of selected countries, not only Mediterranean climate zones.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"arctic\": {\n \"path\": \"regions/arctic.classes\",\n \"count\": 1548,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 115881,\n \"species_before_threshold\": 1832,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\",\n \"scope\": \"Records at latitude 60\\u00b0N or farther north, across all countries, including exactly 60\\u00b0. Missing, malformed and out-of-range latitudes are excluded. A broad northern/subarctic scope, not the Arctic Circle boundary; no country or state-name proxy is used.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania\": {\n \"path\": \"regions/oceania.classes\",\n \"count\": 2273,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 584477,\n \"species_before_threshold\": 2337,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\",\n \"scope\": \"All OCEANIA records plus Australia, New Zealand, Papua New Guinea and the listed Pacific countries/territories. Australia and Tasmania intentionally overlap.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"new_zealand\": {\n \"path\": \"regions/new_zealand.classes\",\n \"count\": 425,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 110030,\n \"species_before_threshold\": 441,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\",\n \"scope\": \"All records assigned countryCode NZ, including islands recorded under NZ. Separately coded Cook Islands, Niue and Tokelau remain in the other-Oceania preset.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"oceania_excluding_australia_nz\": {\n \"path\": \"regions/oceania_excluding_australia_nz.classes\",\n \"count\": 352,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 8721,\n \"species_before_threshold\": 533,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\",\n \"scope\": \"The Oceania metadata selection with all AU and NZ records excluded, even when continent is OCEANIA. Species shared with Australia or New Zealand remain eligible if they qualify from records elsewhere in Oceania; this is not subtraction of their species lists.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"southeast_asia\": {\n \"path\": \"regions/southeast_asia.classes\",\n \"count\": 1672,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 172424,\n \"species_before_threshold\": 2031,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\",\n \"scope\": \"Brunei, Cambodia, Indonesia, Laos, Malaysia, Myanmar, Philippines, Singapore, Thailand, Timor-Leste, Vietnam and Papua New Guinea; whole-island-region overlap with Oceania is intentional.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"east_asia\": {\n \"path\": \"regions/east_asia.classes\",\n \"count\": 3430,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 549482,\n \"species_before_threshold\": 3912,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\",\n \"scope\": \"China, Hong Kong, Macao, Taiwan, Japan, North Korea, South Korea, Mongolia and Russian records assigned continent ASIA. This includes all Asian Russia, not only the Russian Far East; European or unassigned Russian records are excluded.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n },\n \"middle_east\": {\n \"path\": \"regions/middle_east.classes\",\n \"count\": 846,\n \"minimum_regional_rows\": 3,\n \"minimum_global_rows\": 25,\n \"excluded_by_global_gate_after_regional\": 0,\n \"selected_rows\": 24805,\n \"species_before_threshold\": 1330,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\",\n \"scope\": \"Turkey, Cyprus, Syria, Lebanon, Israel, Palestine, Jordan, Iraq, Iran, Kuwait, Saudi Arabia, Bahrain, Qatar, UAE, Oman, Yemen, Egypt, Armenia, Azerbaijan, Georgia, Afghanistan and Pakistan. Deliberate overlap with Mediterranean, Africa and South Asia.\",\n \"qualification_status\": \"selected for MAMBO_v3; metadata row-count policy\"\n }\n}\n", @@ -36,6 +37,6 @@ "regions/southeast_asia.classes": "1935614\n1935838\n1935849\n1992277\n1992283\n1992315\n1732114\n1732115\n1732830\n1733155\n5102207\n5102242\n1734519\n11453841\n1832235\n1847062\n1847641\n1849656\n8503184\n1831458\n1831631\n1831655\n11095591\n12259113\n12208733\n1759775\n1760140\n6132868\n6132869\n1760201\n1760927\n1760970\n1761213\n1761387\n1762151\n11562374\n1762219\n1762226\n1762298\n5109766\n1763782\n1763812\n1763976\n1764043\n1764060\n1764640\n1765653\n1765863\n1766558\n1766560\n1766570\n1766584\n1766601\n1766618\n3257809\n6116699\n1766888\n1767758\n1767779\n1767780\n5110190\n11097510\n1767883\n1768440\n5110232\n1768898\n10820762\n1769168\n11467034\n10848620\n1769425\n1769465\n1769772\n6132967\n1771975\n1771977\n1772352\n5110417\n5110447\n1775148\n5110546\n5110765\n5110769\n1777166\n9372988\n4687991\n5110981\n5110986\n5110993\n5111044\n6133058\n9610080\n1779456\n6132938\n10203499\n1780705\n1780716\n1782115\n1783302\n10208792\n1785744\n1785832\n1786317\n1786711\n11368766\n5112500\n6132971\n1786958\n1787009\n1788553\n6132936\n7346446\n6132826\n1788953\n1789225\n1789604\n1789794\n10766319\n1790888\n1791010\n1791514\n11725043\n5113148\n5113330\n5113352\n1792695\n5113385\n5884243\n9504222\n1793631\n5113925\n1796984\n10108671\n6132979\n9332506\n1797727\n1798101\n5113950\n5884247\n1798488\n6132850\n11732472\n1787079\n1798700\n1798868\n4301310\n4532352\n6115437\n8793873\n1799743\n1799751\n1799757\n1803148\n1803197\n1805044\n9663271\n1806814\n1806871\n11453492\n1808161\n1808236\n1808340\n6198302\n1809115\n10189965\n1809381\n12006709\n12176559\n1811686\n10671425\n11736162\n12209759\n1813036\n1814913\n1814928\n1814971\n1815260\n10826443\n1816029\n1816065\n1816138\n1816246\n1816292\n1816299\n1816362\n5117779\n1818413\n1818659\n1818991\n1819128\n6197200\n7346382\n1819270\n1819280\n1819421\n1819668\n5118348\n5118422\n10546538\n1820282\n1820291\n1820352\n1820393\n1820401\n1820414\n1820429\n1820440\n1820450\n1820451\n1820478\n7346381\n1820565\n1820888\n1821105\n1822141\n10503495\n8897869\n12176367\n10270464\n9559336\n6133292\n10062933\n10717837\n12216332\n12242422\n9852545\n6133325\n9754232\n10972780\n11142432\n10309234\n12171522\n10399906\n10754772\n8452092\n8526388\n8624848\n9927378\n6133262\n12257250\n1774829\n10282389\n10400868\n10469564\n10813849\n10907635\n10982648\n8874633\n9508913\n1783906\n5116504\n9336001\n1781413\n1781421\n1803461\n9478424\n1794273\n1763761\n6115388\n1816648\n6133297\n1774583\n1774598\n1774604\n1774618\n1774626\n1774635\n1774654\n1774661\n1774702\n1819852\n1780287\n1813174\n5111643\n1768461\n5109796\n1821464\n1821651\n1821920\n1822017\n1819337\n1819362\n1804182\n1815315\n1781446\n1781473\n6116076\n1783713\n4687933\n4687935\n6116646\n1820118\n1820137\n1819057\n6116413\n1781531\n1798329\n1798331\n1798335\n1785072\n1765999\n6133069\n10272611\n10330198\n10598038\n11513188\n11612469\n1786597\n4687389\n5884188\n6132915\n6132917\n9935660\n5110012\n1781350\n1796943\n1819685\n10098436\n11717028\n1782310\n5108435\n5108440\n4301309\n5112440\n10371735\n5141344\n1860259\n1860261\n1860274\n5123419\n5880040\n5880041\n6132546\n5123485\n5123489\n1870237\n1871988\n1872094\n1872848\n1872850\n1872873\n1873417\n5125602\n5125633\n5125635\n1874937\n1876168\n1876542\n1876592\n1877788\n1878406\n9835867\n1888454\n6133441\n1737313\n1740469\n1740524\n1740797\n1740828\n1743998\n1745947\n1746714\n1748605\n10159697\n10707501\n9916153\n1920957\n1920991\n1921009\n1921010\n1921021\n1921044\n7346426\n1921055\n10581870\n1921092\n1921093\n1921150\n1921163\n1921262\n1921263\n1921300\n7346430\n5138069\n1922057\n1922143\n1922163\n1922244\n1922285\n5138200\n1922745\n1922771\n5138257\n1922994\n1923458\n1923491\n1923525\n1923649\n1923651\n1923668\n4708972\n4708977\n1923883\n1923917\n1924193\n1924298\n1924323\n1924390\n1924417\n1924458\n1924558\n1924713\n1925543\n1925628\n1925679\n1925731\n1925743\n1925877\n1926436\n1926437\n1926446\n1926448\n1926456\n1926574\n5883255\n7390086\n1926593\n1926611\n10116946\n10361239\n10606547\n1926800\n10087308\n11008182\n11508257\n11543078\n1926972\n1927025\n1927034\n1927217\n1927219\n1927242\n1927272\n1927274\n1927284\n4709107\n4709111\n7408690\n8322165\n9994384\n10517500\n1927348\n1927393\n1927707\n1927717\n1927897\n5139040\n5139050\n1928349\n1928361\n1928376\n1928382\n1928419\n1928849\n1928908\n1928915\n9856663\n1930954\n1930968\n1931109\n1931148\n1931655\n1931706\n1931729\n1931735\n1931889\n1931906\n1931908\n1931943\n1931956\n1931958\n1931979\n1931997\n1932020\n4709051\n1932043\n1932159\n1932166\n1932189\n1932206\n1932246\n1932273\n1932287\n4709095\n4708995\n1932551\n7346444\n1932607\n1932812\n1932814\n1932863\n5806412\n1933028\n1933044\n1933583\n1933647\n1933679\n1933845\n5140534\n5140561\n1934187\n1934188\n1934211\n1934213\n1934221\n1935363\n1935372\n1935377\n1935405\n1935408\n1935410\n1935454\n5138929\n7346417\n4709102\n1752161\n1752373\n1752483\n1752492\n1752603\n1752651\n1752749\n1752903\n5105458\n5105547\n5105570\n11014495\n10932946\n7345843\n6133481\n10017342\n11673056\n1919151\n1919160\n1919176\n1919340\n1919344\n1919348\n1919407\n1919438\n1919444\n1919534\n1919551\n1919564\n1919581\n1919589\n1919635\n1919728\n1919731\n1919741\n1919744\n1919756\n1919758\n1919762\n1919951\n5137748\n5137808\n5137823\n5137832\n5137833\n5137847\n5137849\n5137854\n5137858\n5137861\n1920454\n1920467\n1920469\n5137889\n5137891\n5804932\n1920515\n5137920\n5137926\n5137932\n5137935\n5137938\n5137945\n5137946\n5137949\n5137955\n1920786\n1758003\n1758461\n1868952\n1869057\n1869178\n11794362\n1963095\n5143384\n6133648\n1955389\n1955552\n1955725\n1956384\n1957161\n1957333\n1957368\n1957413\n1957523\n1958152\n1958158\n1958163\n1958305\n1958324\n1958422\n1958454\n1958463\n1958483\n1959645\n6133509\n5144092\n1961162\n1961647\n1962678\n5734349\n5144345\n1963629\n11644349\n1964024\n1964025\n1964029\n6133500\n1964116\n1964331\n1964738\n5144431\n9370070\n7346240\n1968147\n1968363\n1968746\n1969581\n6133643\n1970034\n1970136\n1970322\n1970436\n7346252\n5144806\n5145075\n5145396\n5145495\n5145624\n9194811\n1972620\n10732353\n1972754\n1973242\n5146434\n5146483\n5146508\n5146566\n5146608\n5146752\n5146763\n5147306\n5147498\n1975164\n6133559\n9875420\n11856219\n1975711\n1975805\n1975806\n10835542\n1975892\n9356491\n9410573\n9548993\n1976212\n1976213\n1976228\n1976311\n1976469\n1977184\n6133548\n5147917\n5147968\n5148043\n5148055\n5148214\n1977813\n1977833\n1977863\n1978385\n1978499\n1978524\n6133560\n1978996\n1978999\n1979521\n1980694\n1980827\n1981063\n7345813\n1982221\n1982267\n1982865\n11121180\n5149136\n5149174\n5149203\n1985152\n1985158\n1985167\n1985181\n1985192\n1985228\n6133659\n1986054\n1986508\n1986774\n1986779\n1986787\n1986936\n1987203\n1987204\n1987362\n1987377\n1987766\n1987767\n1987775\n1987776\n6133591\n1988257\n1988420\n1988487\n1989942\n1991123\n5149609\n1991310\n1991378\n1991394\n10155932\n11869776\n5734515\n5880539\n10422582\n10632124\n6133596\n10530208\n11555221\n6133670\n6133673\n6133674\n7346249\n6133637\n11780161\n6133604\n6133607\n10629052\n6133562\n10864093\n6133523\n6133525\n6133498\n10477629\n6133575\n9962269\n6133517\n10175639\n9617411\n9932090\n7345829\n1942522\n1942060\n1942067\n1942251\n5141643\n10773498\n1942378\n1942618\n1942621\n1942636\n1942715\n1942808\n1942836\n4689929\n1942878\n1943212\n1943223\n1943236\n1943308\n5141795\n1943505\n1943619\n1943625\n1943757\n1944462\n1944483\n1944504\n1944521\n1944778\n5141924\n9050611\n1945088\n1945122\n1945137\n1945143\n1945173\n1945225\n1945227\n1945270\n1945274\n1945605\n1945694\n1945710\n1945715\n1945738\n1945742\n1945748\n1945814\n1945837\n1945856\n1945863\n1945874\n1945878\n1946019\n1946051\n1946058\n1946067\n1946145\n5142067\n1946432\n1946486\n1946695\n1946731\n1946737\n1946738\n1946916\n1946917\n1947385\n1947409\n1947449\n1947456\n1947491\n1947492\n1947496\n1947661\n1947673\n1947703\n1947727\n1947745\n1947753\n1947765\n1947775\n1947805\n1947846\n1948061\n1948062\n1948073\n5142213\n1948464\n1948465\n1949008\n1949015\n1949336\n1949366\n1949404\n1949419\n7346351\n8828146\n9068968\n1950013\n7346356\n1950169\n1950171\n1950302\n1950521\n1950879\n1951157\n5142725\n5142729\n5142730\n1758613\n10329023\n1762657\n6132957\n1763741\n1764553\n5109843\n5109848\n5109872\n5109882\n5109898\n1765508\n1766910\n1767368\n1767393\n10575632\n5802396\n5883925\n1769095\n1769209\n1769978\n1771555\n1774797\n6115946\n5111535\n1782341\n1782354\n1782757\n1785145\n1785314\n1785329\n1785725\n1786573\n1787367\n1787373\n4687681\n1788856\n1793238\n1793246\n1793689\n1795068\n1795597\n4688166\n4688169\n4688172\n6132989\n10121804\n6132797\n5109385\n8491927\n1792555\n5113853\n5108671\n5108752\n5108794\n1789512\n1789530\n10933525\n11615549\n4532266\n6115822\n6115830\n1782273\n1782289\n9325654\n10458175\n10683012\n1822487\n1822493\n1822852\n6133742\n5118565\n6133720\n5118582\n6133692\n1824766\n1824997\n1825336\n1825920\n1825956\n6133700\n1827484\n5119239\n1827711\n6133680\n6133681\n6133684\n9921001\n5118841\n5127748\n5806166\n11464595\n1892821\n5127867\n5127893\n5127916\n5127932\n5127955\n5127971\n5127992\n5127998\n9963153\n1893204\n1893241\n1893266\n5128034\n1893329\n10055104\n1893526\n1893546\n1893551\n1893612\n1893645\n1893660\n1893663\n1893787\n1893793\n1893921\n1893923\n1893951\n4704279\n8832485\n8982591\n10333787\n1893989\n1893993\n1893998\n1894002\n1894012\n1894057\n1894060\n5128161\n5128182\n1895037\n1895159\n1895448\n1895499\n1895609\n1895667\n1895670\n1895956\n1895984\n1895992\n1896061\n1896063\n1896073\n1896141\n1896142\n1896152\n1896304\n1896922\n1897664\n1897685\n1897692\n1897722\n1897747\n1897770\n5129266\n1897808\n1897814\n1897817\n10383968\n1898234\n4299368\n5129293\n7346344\n1898434\n5129417\n1898958\n1898970\n1898988\n1900093\n1900939\n1901213\n5130277\n1901372\n1901399\n1901404\n1901411\n1901427\n1901428\n1901429\n1901435\n1901463\n1901669\n5130369\n5130439\n5130444\n5130456\n5130464\n5130471\n5130476\n5130521\n5130542\n1902568\n10394962\n10577473\n5130748\n5130775\n5130813\n5130814\n5130851\n5130904\n5130944\n5130971\n5131058\n9999965\n1904272\n1904281\n1904282\n1904283\n1904701\n1904719\n1904728\n1904760\n1904764\n1904798\n1904884\n1904887\n1904888\n1904916\n1904921\n1904922\n1904932\n1904938\n1904943\n1904948\n1904996\n1905079\n1905142\n1907430\n1907432\n1907475\n1907534\n1907637\n1907666\n1907683\n1907687\n4535754\n5881946\n7976131\n1908352\n1908660\n1908700\n1908702\n1908707\n1908713\n1908775\n5133051\n11608942\n1908818\n1908840\n1908863\n1908871\n1908897\n1908929\n1908953\n1908962\n1909123\n1909216\n7346301\n8978362\n1909281\n1909319\n10656625\n1909607\n1909659\n1909810\n1909854\n1909879\n1909884\n1910371\n1910706\n1910753\n6133858\n1910809\n1910812\n5133687\n5133689\n1911736\n1911755\n5133695\n1913091\n1913105\n1915031\n1915079\n1915080\n1915110\n1915140\n1915144\n1915160\n1915262\n1915270\n1915325\n1915332\n8669164\n11516142\n11535847\n1916758\n5136514\n5136594\n5136681\n5136713\n5136752\n5136790\n5136866\n5136868\n5136939\n5137022\n5137085\n5137086\n5137128\n5137156\n5137166\n5137291\n5137330\n5137388\n1918321\n1918394\n1918406\n1918495\n1918497\n1918532\n1918533\n1918554\n10595994\n10000384\n10043827\n11419137\n11760688\n11840957\n4704316\n10376507\n5131142\n5131256\n5131339\n5131372\n5131407\n5131443\n5131467\n5131493\n5131495\n5131520\n5131555\n5131565\n10228568\n10277877\n10508423\n7346335\n5806167\n5881397\n6100725\n6100726\n7642610\n5128569\n5128644\n5128663\n5129000\n10201273\n1910576\n1910628\n1910629\n1910648\n1910662\n1914708\n1914749\n7346340\n1918584\n1951492\n1951505\n5142870\n1951675\n1951859\n1951874\n1951881\n1952147\n1952175\n1952281\n5143007\n5143076\n5143080\n1952685\n1952704\n5143116\n1952857\n1868409\n4702564\n1868499\n1868470\n5141581\n1730519\n1730543\n8008237\n8130866\n8402212\n1872361\n6133117\n1878744\n1879125\n1879141\n1879227\n1879340\n1879379\n1879408\n1879471\n5126635\n5126637\n1880353\n1880451\n1880852\n1880858\n1881121\n1881170\n1881293\n1881320\n1881329\n1881336\n1881340\n1881515\n1881964\n1882253\n1882266\n1882310\n1882753\n1882767\n1882771\n1882884\n10156181\n1882930\n1882960\n1882965\n1883067\n1883394\n5127097\n1883873\n1883943\n1883951\n1884051\n1884228\n1884229\n9294363\n1884434\n1884437\n1884449\n1884479\n1884671\n6120980\n1884774\n1884816\n1884844\n1884890\n1884909\n4532146\n1885012\n1885263\n1885569\n1885630\n1885745\n1885826\n1885836\n1885919\n1885945\n1886015\n1886241\n1886251\n1886526\n1886700\n1886720\n1886726\n1886729\n1887054\n1887586\n1887691\n1888027\n1888040\n1888092\n1888324\n1888891\n1888906\n1888911\n1888913\n1889043\n1889053\n1889071\n1889074\n1889249\n1889270\n1889272\n1889277\n1889356\n1889358\n1889531\n1889552\n1890031\n1890287\n1890320\n1890335\n10180624\n1890410\n1890512\n1891339\n1891583\n1891636\n1891758\n1891936\n10141437\n6133140\n5771877\n4532125\n9967529\n10145421\n6120803\n6133232\n6121010\n10502505\n10397209\n6133154\n6133158\n1886374\n1889833\n5127592\n5127629\n5127644\n5127656\n5127669\n5127675\n5127688\n5127698\n5802339\n6121184\n1888638\n1888639\n1883885\n10410699\n5122430\n1858698\n1858930\n1859453\n1859932\n5123180\n1864897\n1865593\n1865660\n1865666\n9914882\n1865930\n1866237\n6106943\n1866530\n1866573\n9906979\n10047346\n11729388\n5124716\n5120278\n10019169\n10005133\n1861451\n1861456\n1861457\n1861488\n1861494\n1861644\n1861665\n1861714\n1861721\n1861933\n1861936\n1861937\n1861949\n1861951\n1861975\n1862008\n1862026\n1862061\n5123676\n5123685\n1862293\n1862363\n1862370\n1862394\n1862401\n1862403\n1862414\n9836014\n1862430\n1862434\n1862449\n1862454\n1862468\n1862475\n1862481\n1862516\n1862517\n1862521\n1862526\n6106708\n5123707\n5123709\n1863034\n1863354\n1863388\n1863394\n1863467\n1863646\n1863829\n1863848\n1863880\n1863907\n1863909\n1863910\n1863924\n1863944\n1864126\n1864135\n8133328\n11738734\n11954157\n5124304\n5124305\n5124332\n5124348\n5124374\n1864796\n6099041\n6106759\n10193618\n5123824\n5123837\n5123852\n5123870\n5123876\n5123884\n5123890\n8810912\n10189661\n10191275\n10436020\n1992634\n1993496\n1993637\n1953192\n1953196\n1953217\n1953326\n1953356\n6132711\n6132712\n1953407\n1953423\n11467944\n6132725\n6132723\n6132729\n1954037\n5143241\n5143249\n5143266\n1954120\n6132728\n1754135\n1754263\n1754368\n1754516\n1754535\n1754919\n1754933\n1757652\n5108318\n5108334\n5108335\n11860016\n5108346\n9004359\n1855630\n1857380\n1857828\n1858283\n8178453\n1858557\n1937665\n1937699\n1937707\n1937712\n1937723\n1937769\n1937826\n1937847\n1937856\n1937892\n1937911\n1937937\n1937966\n1937975\n1937988\n1938052\n1938069\n1938074\n1938088\n1938114\n1938122\n1938129\n1938174\n4692504\n9017206\n1936988\n1936993\n1937011\n1937037\n5141154\n5141163\n5141172\n5141177\n5141179\n5141185\n5141187\n5141188\n5141195\n5141197\n5141198\n5141199\n5141202\n5141207\n5141212\n5141215\n5141226\n5141229\n5141230\n5141233\n5141236\n5141242\n5141252\n5141254\n1937444\n1937514\n1937530\n1937570\n1937580\n1937613\n1937618\n1939086\n1939156\n1939168\n1939225\n5141311\n5141317\n10213314\n1800441\n6133777\n1800539\n1800562\n1800572\n1800686\n1800691\n1800821\n5114394\n5114400\n11873966\n9544823\n5114425\n1801080\n1801170\n1801196\n5114465\n1801461\n1801490\n1801503\n1801519\n10066605\n10510325\n6112606\n6112613\n6112661\n6133809\n6133811\n1801993\n1802090\n1802337\n1802702\n1802827\n1802833\n1802919\n1803022\n1803035\n1803078\n6133803\n5114303\n", "regions/subsaharan_africa.classes": "1992315\n6113873\n1732087\n5101590\n1732660\n1732955\n6113959\n1845270\n1845574\n1845616\n4528100\n1847111\n9868978\n1850640\n5119338\n1839146\n1831458\n11513018\n1763976\n1766612\n1767883\n1769739\n1771455\n1772352\n1772447\n1772689\n5110546\n8979264\n1776265\n1776268\n4687991\n1778430\n5111054\n1786190\n1786980\n1786984\n1786985\n1787009\n1788553\n6116754\n1789057\n1789498\n1789805\n1790287\n1791715\n1792210\n1795074\n1796984\n5884245\n6117055\n6117124\n1798481\n6115283\n1798802\n4301310\n4532352\n6115437\n8793873\n1803148\n1803163\n1803197\n1804337\n8865876\n1806871\n1806913\n1808172\n1808359\n1809158\n1809159\n1814552\n8916247\n5117776\n5117791\n5117805\n6122301\n6121912\n1820802\n1820948\n1821012\n1821436\n6122103\n10503495\n8881513\n4532549\n12017078\n6112547\n6112472\n5115381\n1774826\n5116504\n8723161\n5108808\n1781413\n1780897\n1794268\n1803590\n1803593\n1819320\n1772374\n6115388\n1816685\n1774600\n1803544\n1803545\n1817973\n1804532\n1813460\n1807634\n1782645\n1768459\n5113036\n1821547\n1821581\n1821684\n1768212\n5118223\n1820573\n6116073\n1816775\n1803306\n4687933\n6116659\n6116661\n6116669\n6116674\n4532453\n1814877\n11754729\n1781503\n6115504\n1785072\n1785105\n1765997\n4687389\n5884188\n1809585\n1807924\n1782310\n1777517\n6115973\n5123339\n5123474\n1869595\n1870450\n1870988\n1871407\n8766638\n4531365\n1871754\n1872850\n1872873\n1872901\n1873051\n1873079\n1873215\n1873890\n1876542\n1876922\n1877788\n1890024\n5884888\n1877035\n5125780\n1871504\n12231385\n1736623\n1737131\n1737509\n4530608\n1740762\n1740797\n11846897\n1745781\n1921064\n10581870\n1921650\n10858809\n11374171\n11378618\n1922063\n1922064\n1922244\n1922291\n1922468\n1922679\n1922689\n1922694\n1922701\n1923465\n1923473\n10656713\n1924392\n1924429\n8023645\n8951523\n1924713\n5138701\n1925410\n1925609\n1925615\n1925676\n1925693\n1925694\n1925801\n1926530\n1926531\n1926539\n1926546\n1926550\n1926817\n1927313\n1927633\n11667997\n1927943\n1927955\n1927979\n1928070\n1928076\n5139040\n1928389\n5139188\n5139201\n1928746\n1929059\n1929697\n1930904\n1930916\n1930923\n1930931\n1931046\n1931403\n1931437\n1932177\n1932302\n1932332\n1932354\n8833509\n7346444\n8177775\n1932580\n1932629\n5139954\n5140006\n1932751\n1932752\n1932753\n1932882\n1932976\n9954885\n1933583\n1933649\n5138841\n5138921\n7964910\n1933204\n1752327\n1752805\n5105584\n1919181\n1919194\n1919210\n1919213\n1919214\n1919223\n4535280\n4535285\n1919346\n1919660\n1919663\n1919665\n1919924\n1919929\n1919930\n1920181\n1920258\n5137790\n5137799\n5137827\n5137828\n5137849\n1920348\n1920353\n1920359\n1920362\n1920363\n1920369\n1920370\n1920374\n1920377\n1920378\n1920379\n1920381\n1920390\n1920395\n1920401\n1920404\n1920405\n4699245\n5137863\n1920496\n1920506\n1920509\n4535271\n5137988\n5137996\n5137998\n1920795\n1920815\n1920816\n5137612\n5137663\n1750326\n1868884\n1869043\n1869238\n1869278\n1869286\n1955694\n1956897\n1959839\n1960105\n1961025\n4302252\n1963168\n1964076\n1966255\n1967209\n1967324\n1967438\n1967606\n5144691\n5145075\n5145396\n5145468\n5145502\n5145842\n1973171\n5147058\n1978017\n1980521\n1980525\n1980533\n1982267\n1985742\n4525097\n6118530\n6214843\n4524223\n1988064\n1992066\n7507369\n4525034\n4523519\n6119299\n6119323\n6119359\n6119488\n5149664\n5149787\n1987602\n1954382\n11794114\n1942762\n1942790\n1942793\n1943236\n8073674\n1944234\n1944910\n1945535\n1945571\n1945587\n1945786\n1945877\n1945878\n1945980\n1946037\n1946660\n1946661\n1947112\n1947113\n1947117\n5142130\n5142160\n1948371\n1948994\n5142352\n1950156\n1950877\n1948916\n1758839\n5108619\n1761439\n1762383\n5109646\n1764174\n4534245\n4534250\n4534275\n11797244\n5109843\n5109848\n5109855\n5109931\n8352161\n1766072\n9105656\n5772171\n5772206\n1768042\n1768048\n1770416\n1774470\n1774797\n6115946\n5772222\n1780049\n1783777\n1784349\n1784591\n1785181\n1785185\n1785329\n1785361\n1786360\n1787264\n1787438\n4534166\n4534194\n1789957\n1790364\n1791758\n1792418\n1794507\n1795068\n9803522\n1796451\n4532269\n6116341\n6116368\n6116899\n1763072\n5109259\n5109345\n5109407\n4534675\n4534681\n4534686\n6116440\n8108800\n1770821\n1771040\n1771245\n1765751\n5108660\n5108671\n11714235\n11819666\n1797793\n1797864\n1797942\n1797965\n4532203\n4532206\n4532216\n4532266\n6115772\n6115793\n6115822\n1782267\n1767302\n8363507\n10458175\n5119183\n1827775\n10023821\n1892544\n1892554\n1892555\n1892621\n11688586\n5806166\n10587253\n1892811\n1892814\n5127822\n1893558\n1893562\n1893901\n8049830\n1895956\n1896547\n1896600\n1896603\n5128545\n1897904\n1897946\n1897965\n1897970\n1897972\n1898002\n1898017\n10114575\n1898286\n1898290\n4299368\n4299370\n1899071\n1899144\n1899164\n1899198\n1900053\n1900055\n1901781\n1901782\n1901850\n11546465\n11623814\n11726907\n11841763\n5130335\n5130347\n5130392\n5130393\n5130396\n5130448\n5130464\n5130467\n5130487\n5130502\n5130542\n1903009\n1903661\n1904206\n1906006\n1906014\n1906030\n1906063\n1906117\n5132523\n5132529\n5132540\n5132545\n5132550\n5132591\n5132713\n1906604\n1906621\n1906679\n10569879\n11378273\n5132839\n1907399\n4535754\n1908356\n8727750\n1909818\n5133610\n10203260\n1912506\n8964866\n1915499\n11372793\n11375508\n12301192\n12357826\n12358748\n1909736\n5135573\n5135944\n5136059\n5136113\n5136200\n5136306\n1918207\n1918212\n1918688\n1918776\n4535539\n5137397\n9902073\n10717680\n5131347\n5131442\n5131540\n5133088\n7642610\n5135513\n10873137\n1896957\n5128597\n5128825\n5128984\n5129091\n5129190\n9087922\n1910496\n1910501\n1910628\n1910629\n1910663\n1842097\n4301036\n4529738\n6122527\n1878656\n1878804\n1878951\n1879001\n1879227\n1879340\n1879408\n1879427\n1879452\n5126204\n1879471\n1879490\n1879655\n1879691\n1880011\n5126637\n1880408\n1880865\n1881126\n1881147\n1881151\n5126668\n9819403\n1881303\n1882110\n1882884\n1882905\n1882941\n1882960\n1882965\n1883067\n1883124\n1883386\n1883458\n5127094\n1884051\n1884437\n1884449\n1884479\n6120980\n1884774\n1884844\n1884909\n4532146\n1885024\n1885262\n1885745\n1885764\n6120861\n1885836\n1886015\n1886088\n1886104\n1886251\n1886648\n1886729\n7562564\n1887054\n8955839\n4531670\n1887694\n1888346\n1888915\n1889071\n1889272\n1889277\n1889543\n9228024\n1890287\n1890335\n7543006\n1890346\n1890410\n1890534\n1890670\n1891167\n1891217\n4532022\n4532024\n1891583\n8986756\n1892456\n1892476\n5771877\n6133232\n6121010\n6121218\n6133158\n8876855\n1886374\n1889833\n5127644\n5127669\n5127675\n5802339\n6121184\n1886207\n1883885\n1831136\n1858674\n1858930\n1859285\n1859932\n1866249\n1866252\n1866262\n1866421\n5124813\n1866980\n1867009\n1867014\n1867295\n1867312\n1867673\n1867744\n1867749\n1867750\n1867751\n1868014\n1868049\n1868060\n11414590\n11464362\n5120278\n1861433\n1861510\n1861522\n1861544\n1861584\n1861592\n1861644\n1862293\n1862311\n1862401\n1862433\n1862692\n1862719\n1862765\n1862989\n1863034\n1863282\n1863544\n1863640\n9178932\n5124071\n5124088\n5124093\n5124109\n1864576\n1864652\n5124352\n1992634\n1992956\n1992969\n6132725\n1830437\n1830459\n10055273\n1857068\n1857143\n1857577\n1857581\n1857626\n1858283\n1937643\n1937667\n1937702\n1937711\n1937849\n1937959\n1938069\n1938125\n1938166\n5141170\n5141195\n5141216\n5141234\n5141248\n5141250\n1939314\n1800642\n5114409\n4534796\n4534757\n6112634\n1802662\n1802850\n1802868\n1803022\n1803025\n1803060\n", "regions/tasmania.classes": "9840570\n10341307\n10435406\n1832553\n1829866\n1828456\n1828540\n1828544\n10833593\n5119350\n5119353\n1837706\n4686905\n4686913\n1835886\n4685557\n1831458\n1831499\n1761751\n1761820\n1780856\n10154280\n5112407\n5112410\n1790450\n1795657\n1799165\n1803197\n1804430\n1806704\n1807503\n1809244\n1809248\n1816110\n1816434\n1817065\n1817171\n10274769\n1811455\n1731906\n1731923\n1732001\n1732005\n10640865\n1840346\n5123339\n10005632\n1870703\n1872255\n1873290\n5125600\n5125629\n1874146\n1875534\n1890065\n10211808\n10526954\n1940575\n12259151\n1741074\n11906255\n9867379\n1745019\n10358334\n1748425\n1748473\n9952043\n10606887\n10549715\n1925555\n4708984\n1927894\n4708927\n1928923\n1932563\n7346444\n1752536\n1752547\n1920496\n1828310\n1962159\n9875141\n1970485\n1964995\n1964996\n10295646\n1954236\n10634980\n9213204\n1955093\n10560674\n11720357\n9593393\n10062202\n10075732\n10132475\n10363151\n10398979\n10456933\n10457796\n10471477\n10623003\n11468089\n10257899\n1956416\n10167252\n1959341\n1960201\n1960521\n5144204\n1964066\n1965643\n1965650\n10174909\n1967716\n1968115\n1968131\n1969104\n10109201\n5144937\n5144942\n5145422\n1972407\n1972606\n5146262\n1972903\n5146472\n5146805\n5146880\n1975212\n1975248\n10572729\n1976341\n1976342\n1976890\n1976891\n1978082\n10530515\n1978904\n1980041\n1980063\n1980491\n10378314\n10571987\n1982024\n1982055\n1982085\n1982148\n12116722\n1985826\n1986223\n1986846\n1986942\n5149369\n5149387\n1988354\n1988360\n1988362\n1988376\n1988894\n1989181\n1989283\n1989377\n1990165\n1990167\n1990255\n1990256\n1991468\n1992167\n4702878\n10078800\n10146771\n1963532\n1942618\n1943090\n1943096\n4689912\n1944523\n4689905\n1760172\n1761788\n1762900\n1762902\n1768972\n1769260\n1769310\n4688049\n4688092\n4688098\n1771357\n4687565\n1774918\n10032003\n1785149\n1791793\n1798084\n9890366\n1792560\n1770849\n1771203\n1771296\n10658576\n1823493\n1827507\n11905965\n1827802\n5806175\n5806177\n4704400\n4704407\n1899943\n1899947\n1899950\n5130456\n1902244\n4704500\n5102423\n5120379\n11563728\n10134558\n12231152\n5126376\n1880982\n1881018\n1881019\n1881031\n1881041\n1881132\n1881424\n1881504\n1882215\n1882355\n5126843\n5126922\n5127044\n1882905\n1884531\n1892462\n10521368\n1854021\n1854249\n1858762\n1862331\n1754619\n1754814\n4689394\n1855804\n1857033\n1857180\n1857829\n1857882\n1857935\n5803065\n1838297\n1838308\n1833477\n1833653\n1835121\n1835123\n1835821\n1836899\n4686620\n4685566\n5120053\n4685669\n4685678\n4685810\n4686385\n4686702\n1801432\n10573425\n11508472\n11836409\n1801787\n", - "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 2745,\n \"sha256\": \"c875cfc913ccdd2c491daaecb2b1750935277900e7b9644dca45bf87bb73cab1\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 1858,\n \"sha256\": \"8b9b609e7d908dfecbaebe4f39ace3c889587e573001e5d246615ef828d97ed8\"\n },\n \"NOTICES.md\": {\n \"size\": 1782,\n \"sha256\": \"63695acbd3a1245f69e979ee4ee3dbb602cf10e6964d9e6ff04aa9dfc7eeccb0\"\n },\n \"PRESETS.md\": {\n \"size\": 5847,\n \"sha256\": \"ad2b0ff489156813358578134bb122a2404c9942f3ef81325e42e313dcd6d3cd\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9704,\n \"sha256\": \"d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14477,\n \"sha256\": \"ed61d7744f79b849f79f75fe40c84eb31d46179e05d32eb5f66f4202d69b5259\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15725,\n \"sha256\": \"eb94b47baf91ec767d54f1cc6ed7d668c44c159c8fe62acaac61f0d0c127423a\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" + "release.json": "{\n \"schema\": \"mambo-release-v1\",\n \"model_id\": \"MAMBO_v3\",\n \"artifact_revision\": 3,\n \"package_version\": \"0.3.0\",\n \"distribution\": \"mambo-v3\",\n \"default_preset\": \"full\",\n \"licenses\": {\n \"code\": \"MIT\",\n \"weights\": \"CC-BY-NC-SA-4.0\",\n \"weights_text\": \"MODEL_LICENSE.txt\",\n \"notices\": \"NOTICES.md\"\n },\n \"score_semantics\": \"hierarchical-leaf-logits-logsumexp-v1\",\n \"profiles\": {\n \"torch\": {\n \"model\": \"models/pytorch/best.pt\",\n \"files\": [\n \"models/pytorch/best.pt\"\n ]\n },\n \"onnx\": {\n \"model\": \"models/onnx/model.onnx\",\n \"files\": [\n \"models/onnx/model.onnx\",\n \"models/onnx/model.onnx.data\"\n ]\n },\n \"onnx-embedding\": {\n \"model\": \"models/onnx-embedding/model.onnx\",\n \"files\": [\n \"models/onnx-embedding/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\"\n ]\n }\n },\n \"embedding\": {\n \"dimension\": 1280,\n \"stage\": \"normalized preclassification\"\n },\n \"origins\": {\n \"models/pytorch/best.pt\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt\",\n \"models/onnx/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx\",\n \"models/onnx/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/model.onnx.data\",\n \"models/onnx/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/onnx-fp32/manifest.json\",\n \"models/onnx-embedding/model.onnx\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx\",\n \"models/onnx-embedding/model.onnx.data\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/model.onnx.data\",\n \"models/onnx-embedding/manifest.json\": \"https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/browser-model/manifest.json\"\n },\n \"files\": {\n \"CODE_LICENSE\": {\n \"size\": 1063,\n \"sha256\": \"0f50663fcec13e423612ab95729a0b197122e4b05c16a679b8946cad5b53d62b\"\n },\n \"MODEL_CARD.md\": {\n \"size\": 3037,\n \"sha256\": \"5fce6cd2d6c5dc452fe210aebafe3fd90fbc2779716900be30d1efd254922b87\"\n },\n \"MODEL_LICENSE.txt\": {\n \"size\": 19018,\n \"sha256\": \"600ca4e25fe11762b75a97e714707fab48bb778374e92d24c6ca068791661c11\"\n },\n \"MODEL_PROVENANCE.toml\": {\n \"size\": 2782,\n \"sha256\": \"a3e7ab98dca7795c06fb7f9921b376f1ea9a76aa3c68a4d769c780675f181e97\"\n },\n \"NOTICES.md\": {\n \"size\": 3565,\n \"sha256\": \"915571674425f8f96a88a49d02edadd87460e6216ed7cd7eda7163965abbe8e7\"\n },\n \"PRESETS.md\": {\n \"size\": 5847,\n \"sha256\": \"ad2b0ff489156813358578134bb122a2404c9942f3ef81325e42e313dcd6d3cd\"\n },\n \"PRESET_DEFINITIONS.toml\": {\n \"size\": 9704,\n \"sha256\": \"d89e62e5ee9d91aea0e46ccd60edbc49bd0378017cf6d8b8f70870e4f7673be6\"\n },\n \"PRESET_UPDATES.toml\": {\n \"size\": 3473,\n \"sha256\": \"6d953dbed98f761f48adf959813e7954271e88fb11eb2ac3007c45b884d1e737\"\n },\n \"README.md\": {\n \"size\": 14752,\n \"sha256\": \"c619aff1b1674d8c7c8717bf88cc513cdd1f833181fb9f36c14975979a890bf6\"\n },\n \"classes.json\": {\n \"size\": 487272,\n \"sha256\": \"8359b0ea67b6111ccd1897b1296f5bbeff1137cd306f1345136650e366f328db\"\n },\n \"models/onnx/manifest.json\": {\n \"size\": 1787397,\n \"sha256\": \"a49e6ee862f24095cc2f66e309b5704c47011b54c11a7bfa56f432342e26b32b\"\n },\n \"models/onnx/model.onnx\": {\n \"size\": 1527453,\n \"sha256\": \"aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d\"\n },\n \"models/onnx/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/onnx-embedding/manifest.json\": {\n \"size\": 294850,\n \"sha256\": \"d84e148626581e568df76832f257c7e59db944b343fe5cbc1f0636467874cf8d\"\n },\n \"models/onnx-embedding/model.onnx\": {\n \"size\": 1932003,\n \"sha256\": \"70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44\"\n },\n \"models/onnx-embedding/model.onnx.data\": {\n \"size\": 151838720,\n \"sha256\": \"9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e\"\n },\n \"models/pytorch/best.pt\": {\n \"size\": 153951029,\n \"sha256\": \"174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a\"\n },\n \"preprocessing.json\": {\n \"size\": 595,\n \"sha256\": \"be12f8cc92d37ad780cc92040955b3dcea0e79cea4e6cbd57f6ceb8f2f6786ea\"\n },\n \"presets.json\": {\n \"size\": 15725,\n \"sha256\": \"eb94b47baf91ec767d54f1cc6ed7d668c44c159c8fe62acaac61f0d0c127423a\"\n },\n \"regions/africa.classes\": {\n \"size\": 7433,\n \"sha256\": \"471c14708f50d98e51b8513ec49e978fae360e1099b6f40491c008e9bd1d59c1\"\n },\n \"regions/arctic.classes\": {\n \"size\": 12416,\n \"sha256\": \"a9138c543b90e319296d2c0cd5dc3400c9045616633988755f8057450a19ae5f\"\n },\n \"regions/asia.classes\": {\n \"size\": 35832,\n \"sha256\": \"c54053282b739c7bfcfad6a69c9f9b2e613f4ff4986cf30e1cd0848fe5eb2daf\"\n },\n \"regions/australia.classes\": {\n \"size\": 15266,\n \"sha256\": \"04892d628263fa751c268693fccd9afd480a819b4896791ac5e0219b8467cb53\"\n },\n \"regions/caribbean.classes\": {\n \"size\": 7046,\n \"sha256\": \"ebb9cfbb63a4ad434ae8fa49b2709e09de0df30f3d31a2f939846e41c9731dc3\"\n },\n \"regions/central_america.classes\": {\n \"size\": 13230,\n \"sha256\": \"835b3447932cc142dd7c470617e0ce5f948ec2d6f6119be7d06b78e365f79885\"\n },\n \"regions/east_asia.classes\": {\n \"size\": 27660,\n \"sha256\": \"4a3e8635e06c7c86c0b08cfbc6acfa13ceb484d708f771312afc874e47ac0085\"\n },\n \"regions/europe.classes\": {\n \"size\": 24168,\n \"sha256\": \"df66152ba29ba979b32741db4a0dc7c85db18fa65eac5602ca4aab702343de90\"\n },\n \"regions/europe_v3.classes\": {\n \"size\": 24745,\n \"sha256\": \"465e644095abe381b7b6a44f7ce05d5da0ba77bf75b76e1c53d0eba6c89f487a\"\n },\n \"regions/japan.classes\": {\n \"size\": 5605,\n \"sha256\": \"8b3a9cd5874c26ecb5217e61f6402fb7e60082f3ebeea13273abe177c233a64b\"\n },\n \"regions/madagascar.classes\": {\n \"size\": 859,\n \"sha256\": \"cda395b4bab28ffec49a698487cbb2aa6578a79107ce7a9885c8260e421b9c54\"\n },\n \"regions/mediterranean.classes\": {\n \"size\": 21489,\n \"sha256\": \"f203302f8bfdcb92aec580fa3f11e6ebda8c3886f5fd691379860408e84fd4e3\"\n },\n \"regions/middle_east.classes\": {\n \"size\": 6789,\n \"sha256\": \"2f74a654f035774373e25b9518b1d3d0724a456389647be6584dab4ab85261a9\"\n },\n \"regions/new_zealand.classes\": {\n \"size\": 3428,\n \"sha256\": \"81b4facb4283f0e0e867fa7219f8bc5f33418e68cde61fc18df212b2a085887b\"\n },\n \"regions/north_africa.classes\": {\n \"size\": 1893,\n \"sha256\": \"015e6c49e7c220421fdd646743216d34464708e6bfeebfac408f912a87e4a62b\"\n },\n \"regions/north_america.classes\": {\n \"size\": 35698,\n \"sha256\": \"2707b4956327c31e719331cc2c40cd457f3d1fa67896a831d26a3e7e9accb44f\"\n },\n \"regions/north_europe.classes\": {\n \"size\": 15847,\n \"sha256\": \"065bb3ade45c970ca129c7507b56ed62fe16b84251961bf53352f5098b8b2be6\"\n },\n \"regions/north_europe_v3.classes\": {\n \"size\": 17625,\n \"sha256\": \"78ee7693c7352244cd8a99b7276196aa32de27e620ed66648c4087f826d47092\"\n },\n \"regions/oceania.classes\": {\n \"size\": 18490,\n \"sha256\": \"bf6f77aeb7700a0e1d46f7d51e5a45b842485a16d2f9777b3c5e61a899b84b47\"\n },\n \"regions/oceania_excluding_australia_nz.classes\": {\n \"size\": 2837,\n \"sha256\": \"5a38ae5ba587577b7dcad4a8850089f1b8036abc6f1e676436968f97e34f322d\"\n },\n \"regions/south_america.classes\": {\n \"size\": 12172,\n \"sha256\": \"47ee75929656a4f66874861e54a05b8503aa7974ebb5eb3d1eef1a68dbf7b130\"\n },\n \"regions/south_asia.classes\": {\n \"size\": 12540,\n \"sha256\": \"5d838de414acb5a4ca14a5098972bbd36c3078c44525584860f6e2e7a94f3849\"\n },\n \"regions/southeast_asia.classes\": {\n \"size\": 13513,\n \"sha256\": \"ad2f4d1ed1f78abd66594f59d9550383f37f96b9bdcda81138c11f64c3907ccd\"\n },\n \"regions/subsaharan_africa.classes\": {\n \"size\": 6406,\n \"sha256\": \"1cc936061b0037c71d60d5cdb74fc8af1817dd567e54dcd6904a6901009d9184\"\n },\n \"regions/tasmania.classes\": {\n \"size\": 2241,\n \"sha256\": \"21248a60d54592bc4db4e638e6565b07ee37ad1911c7e7f4e4a8fd0fc49d913f\"\n }\n }\n}\n" } } diff --git a/dev/releases/mambo_v3/MODEL_CARD.md b/dev/releases/mambo_v3/MODEL_CARD.md index 447a7b6..0f8b110 100644 --- a/dev/releases/mambo_v3/MODEL_CARD.md +++ b/dev/releases/mambo_v3/MODEL_CARD.md @@ -31,8 +31,10 @@ No complete Windows/macOS/edge-device compatibility claim is made. The checksum-verified training console reports the best model at epoch **30**. `MODEL_PROVENANCE.toml` identifies the checkpoint, configuration, epoch summary and training log with immutable hashes and public source URLs. The retained materials -do not identify the exact training Git revision or fully establish the upstream -initialization lineage. The recorded September 11 checkout is packaging provenance, +do not identify the exact training Git revision or retain the starting checkpoint +hash. The preparation source initializes a torchvision DEFAULT EfficientNetV2-S +backbone (ImageNet-1K) and a new hierarchical head with seed 42; this is a source-based +reconstruction rather than a verified identity for the original starting file. The recorded September 11 checkout is packaging provenance, not a claimed training revision. The trained checkpoint itself is identified and can be loaded without retraining or downloading an initialization model. @@ -42,6 +44,7 @@ record list construction. Read `NOTICES.md` for code, model and source-data boun ## Publication status -The model-weight license is awaiting owner designation. The code's MIT license -must not be presented as a weight/data license. Do not publish this candidate until -that decision and any required initialization notices have been resolved. +The candidate weights are prepared under **CC BY-NC-SA 4.0**: attribution, +non-commercial use and share-alike terms for distributed adaptations. See +`MODEL_LICENSE.txt` and `NOTICES.md` for the terms and upstream attribution. +The adapter code remains MIT-licensed. This candidate has not been published. diff --git a/dev/releases/mambo_v3/MODEL_LICENSE.txt b/dev/releases/mambo_v3/MODEL_LICENSE.txt new file mode 100644 index 0000000..baee873 --- /dev/null +++ b/dev/releases/mambo_v3/MODEL_LICENSE.txt @@ -0,0 +1,170 @@ +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + + l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and + + B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. + + C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + + 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/dev/releases/mambo_v3/NOTICES.md b/dev/releases/mambo_v3/NOTICES.md index 0a28433..fcff111 100644 --- a/dev/releases/mambo_v3/NOTICES.md +++ b/dev/releases/mambo_v3/NOTICES.md @@ -1,28 +1,55 @@ # MAMBO V3 notices -## Repository code - -The deployment adapter and mini_trainer code are distributed under the MIT license -in `CODE_LICENSE`. This notice does not grant rights to independently licensed -runtime libraries, model weights, datasets or photographs. - -## Model weights — owner decision outstanding - -A license for the trained MAMBO V3 weights has not yet been designated in the -retained release metadata. Public download availability alone is not a license. -The model owner must designate the license and confirm any required attribution -from the initialization checkpoint before public release. The current training -configuration loads an earlier local checkpoint; its original initialization -lineage is not established by that configuration alone. - -## Runtime dependencies - -PyTorch/torchvision, ONNX Runtime, NumPy, Pillow and optional timm are installed -separately by the application's package manager, not vendored in the model bundle. -Their distributions carry their own license files and notices. CUDA/cuDNN components -are optional third-party dependencies with their own terms. Keep dependency notices -when redistributing an environment or container. The release manifest records the -qualified versions, not a requirement to use one universal environment lock. +## Model weights + +The MAMBO V3 trained weights, in PyTorch and ONNX form, are prepared for release +under **Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International** +(`CC-BY-NC-SA-4.0`). The full terms are in `MODEL_LICENSE.txt` and at +. + +Attribute **MAMBO V3 / mini_trainer project**, link to + and the +license, and identify modifications when sharing. The license permits +non-commercial use and sharing; distributed adaptations must retain the same +license elements under the license's ShareAlike conditions. It does not require +private adaptations to be published. Commercial use requires separate permission +from the relevant rights holders. The license grants only rights the licensor +has authority to grant; it does not replace third-party rights or notices. + +## Initialization and attribution + +The retained UCloud preparation code creates `initial_seed42.pt` before training: +it initializes the torchvision EfficientNetV2-S backbone with `DEFAULT` pretrained +weights and a new normalized hierarchical classification head using seed 42. +Torchvision documents this default as `EfficientNet_V2_S_Weights.IMAGENET1K_V1`, +trained on ImageNet-1K. Production then loads the saved starting checkpoint with +`pretrained=false` to avoid loading the upstream weights again. + +This lineage is reconstructed from preparation source, not verified against the +original initialization file: its bytes/hash and the run-specific preparation +manifest were not retained in the release archive. `MODEL_PROVENANCE.toml` records +the source revision and this limitation. The deployed trained checkpoint is +independently identified by its SHA-256; inference does not require the initial file. + +Acknowledgements: the TorchVision maintainers and contributors, ImageNet, and +Mingxing Tan and Quoc V. Le for EfficientNetV2. Upstream references: + +- [TorchVision EfficientNetV2-S weights](https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html) +- [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) +- [TorchVision model terms](https://github.com/pytorch/vision#pre-trained-model-license) + +TorchVision notes that pretrained models may have terms derived from their training +data. Its software license alone is not a blanket license for pretrained weights +or photographs. The MAMBO license does not relicense those upstream materials. + +## Repository code and runtime dependencies + +The deployment adapter and mini_trainer code remain **MIT-licensed** (`CODE_LICENSE`). +The model-weight license does not relicense independently written application code. +PyTorch/torchvision, ONNX Runtime, NumPy and Pillow are installed separately by the +application's package manager, not vendored in the model bundle. Their distributions +carry their own licenses and notices. CUDA/cuDNN components have separate terms. +Keep dependency notices when redistributing an environment or container. ## Dataset, taxonomy and photographs diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py index 98a78a0..a45c1f0 100644 --- a/dev/releases/mambo_v3/build_bundle.py +++ b/dev/releases/mambo_v3/build_bundle.py @@ -19,6 +19,7 @@ def build(source, destination): inventory = tomllib.loads((HERE / "inventory.toml").read_text()) presets = tomllib.loads((HERE / "preset-manifest.toml").read_text()) definitions = tomllib.loads((HERE / "preset-definitions.toml").read_text()) + provenance = tomllib.loads((HERE / "model-provenance.toml").read_text()) if sha256(HERE / "preset-definitions.toml") != presets["definitions_sha256"]: raise ValueError("Preset manifest is stale; rebuild presets first") files = {item["path"]: item for item in inventory["artifacts"]} @@ -103,7 +104,7 @@ def write_json(relative, data): ] lines += ["", "Exact filters: PRESET_DEFINITIONS.toml. `full` includes all 12,632 model species.", ""] (root / "PRESETS.md").write_text("\n".join(lines)) - for filename in ("MODEL_CARD.md", "NOTICES.md"): + for filename in ("MODEL_CARD.md", "NOTICES.md", "MODEL_LICENSE.txt"): shutil.copyfile(HERE / filename, root / filename) shutil.copyfile(HERE / "model-provenance.toml", root / "MODEL_PROVENANCE.toml") profiles = { @@ -121,6 +122,12 @@ def write_json(relative, data): "package_version": "0.3.0", "distribution": "mambo-v3", "default_preset": "full", + "licenses": { + "code": "MIT", + "weights": provenance["weights_license"], + "weights_text": "MODEL_LICENSE.txt", + "notices": "NOTICES.md", + }, "score_semantics": "hierarchical-leaf-logits-logsumexp-v1", "profiles": profiles, "embedding": {"dimension": 1280, "stage": "normalized preclassification"}, diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 529862a..f0b4c6f 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -1,162 +1,59 @@ -# MAMBO deployment freeze preparation - -Status: preparation, 25 September 2026. Throughput investigation is closed for this -release. The measured runtime baseline is `503de96`; later changes update experiment -setup and evidence. This document identifies the remaining consolidation work; -it does not declare the candidate frozen or published. - -## Retain the measured behavior - -Keep PyTorch and standard ONNX, presets/custom lists, independent rank predictions, -embeddings, automatic precision, optional `rotation30_pad25_3` TTA, and bounded -streaming. Keep package version 0.3.0 and the current model artifacts/preset identities -while consolidating. Quantization and further HPC scalability work are deferred. -Shared `mini_trainer` changes still require a feature/fix branch and reviewed merge. - -## Consolidation sequence - -1. **Audit the deployment boundary.** Keep runtime responsibilities in the existing - modules: bundle/download validation; preprocessing/augmentation; backend execution - in `predictor`; hierarchy/results; and streaming/transfers/result worker. Check - unused paths and duplicated work against both request and streaming callers. - Remove only demonstrably dead or redundant code. Preserve result ownership, - shutdown/error handling and optional-runtime imports. - Public API/CLI changes remain possible when they remove a concrete integration - obstacle; document their V2 migration impact and validate the affected contract. - Do not treat the current public surface as already frozen. - Profiling and experiment setup remain under `dev/releases/mambo_v3`, outside the - deployment wheel. Do not redesign the pipeline during freeze preparation. -2. **Consolidate integration documentation and workflow.** Qualify a minimal path: - install one runtime → construct a predictor or invoke the CLI → supply ordinary - images → consume ordinary records. No training checkout, dataset metadata, - campaign config or GPU setup should be needed for ONNX/CPU. Check the documented - paths with original images and a custom class list, predictions/embeddings, an - existing application environment and an offline bundle. Explain scope/runtime/TTA - decisions; leave tuning and kernel diagnostics in linked details. - - Implemented integration decisions: the `mambo-v3` distribution alone owns - `mambo_predict`; API/CLI default to global; CLI writes batches incrementally and - publishes only complete outputs; the streaming read-window default grows with - batch size; the native extra selects the matching training-package series. Arrays retain explicit CHW input - to avoid guessing ambiguous layouts. These changes passed the installed-bundle - qualification recorded below. - Retain V2 entry-point and format compatibility where promised; distinguish that - from identical vocabularies, scores or embeddings. - - **Documentation ownership:** The [deployment README](../../../deployment/README.md) - owns installation, configuration and integration examples. Preset scope belongs - in [the catalogue](../../../docs/model-presets.md); complete numbers/provenance - belong in the [Flemming](../../../docs/mambo-deployment-evidence.md), - [in-domain](../../../docs/mambo-indomain-evidence.md) and - [current HPC](../../../docs/mambo-hpc-evidence.md) evidence pages. Keep performance - figures and the configuration table in the README, long evidence tables in linked - pages, and historical diagnostics out of the integration path. Mark old measurements/instructions as historical - rather than erasing their provenance. Preserve CPU/GPU, request/streaming and - V2/V3 comparison categories; update only measured values, and never imply older - CPU/laptop or smaller-batch results were rerun. -3. **Refresh candidate metadata after any final owner decisions.** The checked-in - descriptor now embeds the current README, maintained model card, notices and - verified epoch/checkpoint provenance. Model identity is `MAMBO_v3`, artifact - revision 3, distribution `mambo-v3` and default preset `full`. The model-weight - license and initialization lineage remain explicitly unresolved. Regenerate - with `build_bundle.py` and `package_download_metadata.py` after resolving them. Verify preset files, source URLs, - all file hashes, and version/model/artifact identities. Documentation changes - alter the descriptor-derived cache revision; record the final revision rather - than repeatedly regenerating it during editorial work. Ensure links work from - the actual distribution location as well as the repository. -4. **Build and qualify the final installed candidate.** Build the deployment and - matching training wheels once. Follow [deployment qualification](deployment-qualification.md) - for ONNX-only CPU installation, relocated/read-only offline bundle, API/CLI, - presets/custom lists, predictions/embeddings and existing CUDA environments. - Include streaming ownership, early close and error propagation in affected - tests. Run static checks and the required wheel check. Reuse unchanged model - quality evidence and the completed B200 smoke; do not launch another quality, - throughput or hardware campaign without a concrete compatibility failure. -5. **Record the freeze manifest.** Capture source commit, wheel hashes, bundle - revision/hashes, versions, tested runtime environments, known limitations and - publication/rollback assets. The verified training log confirms best epoch 30; the exact training Git - revision is absent from the retained checkpoint/config/log. Do not substitute - packaging-time revision. Resolve weight-license and initialization notices. Qualify only the OS/runtime combinations actually checked; additional OS - support is not implied. Tagging, uploading and promotion are separate from - preparing these reviewable assets. - -## Evidence already ready - -- Full Flemming and in-domain comparisons through `mini_metrics`, including rank - metrics, calibrated/unthresholded results, coverage and support >5. -- Latest full-B200 four-variant request/streaming timings, memory and provenance - now linked from the README. Earlier CPU/V2 and laptop evidence remains labelled. -- Current focused runtime/static checks and targeted CUDA preprocessing evidence - recorded in the [pipeline report](pipeline-probe.md). -- Deterministic timing figure generated by `hpc_speed_report.py`; no new benchmark - execution is needed to reproduce it. - -Freeze completion requires the final installed artifacts and documentation to agree. -Historical qualification is supporting evidence, not a substitute for checking the -final wheels and embedded metadata. - -## Integration increment evidence — 25 September 2026 - -The package is now model-generation-specific (`mambo-v3`, Python import -`mambo_deploy`), version 0.3.0. The root training package no longer registers the -same executable. Existing candidate installations need a fresh environment (or -removal of `mambo-deploy`) to avoid two distributions owning the import directory. -No published package was changed. - -Focused contracts: 96 passed, four GPU-dependent skips, across the initial run -and correction of a generator stub in the new read-window test. Static checks and -the required minimal installed training-wheel check passed. The renamed deployment -wheel builds; the final installed ONNX/native bundle checks are recorded below. No performance -or quality evaluation was rerun. - -The automatic model cache now stores verified weight bytes by SHA-256 and reuses -them across metadata revisions (hard links where possible, ordinary copies -otherwise). Offline mode can materialize packaged metadata but still forbids -network downloads. Nine focused cache/download tests pass. - -## Candidate assembly - -[Publication handoff](publication.md) describes the prepared artifacts and the -separate human publication step. `prepare_candidate.py` builds only local outputs -from a clean committed checkout. [Evidence policy](evidence-policy.md) defines -what subsequent releases retain and when older results can be reused. - -`model-provenance.toml` records checksum-verified console and epoch-summary sources. -The log is 60,812,963 bytes (retrieved in full after a truncated first read was -correctly rejected by its checksum). It records best epoch 30. Weight licensing -and upstream initialization attribution require owner input; questions are pending. -No missing source identity has been invented. - -## Final installed candidate - -The [installed-candidate record](final-qualification.md) now covers clean ONNX CPU, -read-only offline API/CLI with TTA/embeddings, actual automatic ERDA downloads and -offline reuse, native CPU, and native/ONNX laptop CUDA. Installed package payloads -were compared with the built wheels; the two-package install has one CLI owner. -No performance/quality campaign was rerun. Runtime source is `0bfb5d7`. - -Current artifacts are prepared in `local-evidence/mambo-v3-release-candidate-d6d19e0/`; publication -remains prohibited. Model-weight licensing and initialization attribution are -pending owner decisions. Training source revision is explicitly unknown in the -retained materials. After those decisions, refresh final notices/metadata and the -artifact inventory; do not substitute a historical checkout or invent permission. - -## Final preparation audit - -| Requirement | Current evidence / remaining work | +# MAMBO V3 deployment freeze + +25 September 2026. Release preparation only: packages, artifacts and tags have not +been published. The selected weight license is **CC BY-NC-SA 4.0**; adapter code +remains MIT. Final artifact identities and installed checks are recorded in +[final qualification](final-qualification.md). + +## Release contract + +- Distribution `mambo-v3`, version `0.3.0`; Python import `mambo_deploy`. + Maintenance releases retain the V3 trained model; future generations use a + separate package. Pin the package version for reproducible application builds. +- PyTorch and standard ONNX; global (`full`) scope by default; legacy and updated + regional presets, custom class lists, independent rank predictions and optional + unit embeddings. Automatic precision and optional `rotation30_pad25_3` TTA. +- The deployment package alone owns `mambo_predict`. API/CLI global defaults, + bounded streaming and incremental CLI output are qualified. The native V2 + compatibility facade retains its native/CUDA defaults. +- All 25 geographic lists retain their evaluated membership. Updated lists use + at least 3 regional and 25 global metadata rows; legacy lists are unchanged. + Deduplication or membership changes require a future preset revision. +- No additional throughput campaign, retraining, quantization or exhaustive platform + qualification. Shared-core changes require a separate branch and reviewed merge. + +## Completion evidence + +| Requirement | Authoritative record | | --- | --- | -| Simple distribution and stable model selection | `mambo-v3` distribution, embedded immutable asset hashes, supplied-wheel installation and future PyPI commands; global default. No repository checkout needed for consumer installs. | -| API/CLI and V2 migration | Installed checks above; README documents inputs/outputs, independent rank labels, embeddings, TTA, region/custom lists and migration. Sole CLI owner and bounded output writing verified. | -| Quality and speed presentation | README retains Flemming, in-domain, laptop and HPC figures; linked pages identify protocols and historical/current timing boundaries. No new measurements required. | -| Preset definitions | Selected V3 row-count policy; all 25 lists reconstructed unchanged from pinned metadata. Updated definition hashes and embedded descriptor verified. | -| Offline/download behavior | Installed automatic download/offline/relocation checks plus nine cache tests. Download checker now requires an empty cache. | -| Reusable evidence and portability limits | `evidence-policy.md`, model card and linked evidence; browser integration described as a path, not a tested platform. | -| Packaging and handoff | Local wheels, source distribution, bundle, checksums and qualification records; `publication.md` covers human publication and rollback. | -| Final notices and immutable candidate | Pending model-weight license and initialization attribution. Then refresh artifacts and verify only the changed metadata/installation boundary, reusing identical runtime evidence. | - -The refreshed candidate was built from `d6d19e0` and installed for metadata checks. -Runtime payload identity allows reuse of the earlier execution checks. Its inventory -now includes the qualification reports and reuse rationale; all 128 file hashes -and compressed/expanded bundle agreement passed. See the exact wheel identities in -[final qualification](final-qualification.md). This is ready for owner review, but -not a notice-complete public release. No publication was performed. +| Installation, inputs/outputs, meaningful defaults, V2 migration and changelog | [Deployment README](../../../deployment/README.md), [integration details](../../../docs/mambo-integration.md) | +| Geographic filters, counts and reconstruction | [Preset catalogue](../../../docs/model-presets.md), `preset-definitions.toml`, `preset-manifest.toml`; pinned-Parquet reconstruction leaves all lists unchanged | +| Trained assets, preprocessing, vocabulary and notices | Bundle `release.json`, `MODEL_PROVENANCE.toml`, `NOTICES.md`, `MODEL_LICENSE.txt`, `CODE_LICENSE`; immutable per-file hashes | +| Installed runtime, offline/download and API/CLI checks | [Final qualification](final-qualification.md), candidate `qualification/validation.json` and linked retained reports | +| Flemming and complementary in-domain metrics | README figures and linked evidence; mini_metrics calibration/reporting separation, all ranks, both confidence settings and full/support >5 metrics | +| Laptop, CPU, B200 request/streaming comparisons | README figures, [current HPC evidence](../../../docs/mambo-hpc-evidence.md); only measured points updated, historical boundaries retained | +| Reusable protocols and evidence | [Evidence policy](evidence-policy.md), public tables/provenance and retained private prediction/confidence archives | +| Browser and other integration opportunities | README's Beyond Python section; described as integration paths, without claiming untested platform support | +| Distribution assets and publication procedure | Local candidate wheels, source distribution, bundle/archive, evidence, manifest and checksums; [publication and rollback handoff](publication.md) | + +## Provenance limits + +The trained checkpoint, original export files and best epoch 30 are verified. +The training Git revision and original `initial_seed42.pt` bytes/hash were not +retained. Preparation source reconstructs that file's role: torchvision DEFAULT +EfficientNetV2-S (ImageNet-1K) plus a new hierarchical head, seed 42, saved before +production training. It is not a second trained MAMBO model. The model card and +notices distinguish this source reconstruction from a verified starting-file +identity; no training revision or hash has been invented. + +## Validation and handoff + +Reuse qualified runtime execution when wheel runtime payloads, weights, +preprocessing and class lists are identical. Check rebuilt metadata and installed +payloads after notice-only changes; do not repeat model quality or speed campaigns. +Static/import-contract checks, focused deployment contracts and the minimal +installed training-wheel check are recorded in the qualification history. + +The publisher reviews the concrete artifacts, notices, limitations and source +commit using [publication.md](publication.md). Tagging, package upload, model-asset +upload and public-pointer promotion are separate actions and remain unauthorized. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index 4bc95e7..1683e90 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -29,14 +29,14 @@ The manifest covers 128 files, including the expanded bundle, archive, wheels, s `qualification/validation.json` binds retained execution reports to the earlier wheels and records why they apply to the current candidate: the matching training wheel is identical, and the deployment wheel differs only in `default_bundle.json` and its checksum record. The new wheel was installed in the clean ONNX environment; its 17 payload files match the wheel. Offline metadata bootstrap, global default, embedded/expanded bundle agreement and sole CLI ownership passed. No inference or speed campaign was repeated. Report hashes and the earlier validation record are included; raw input paths remain in local evidence only. -## Scope and remaining decisions +## Scope and provenance limits These are execution and packaging checks, not new accuracy or speed experiments. Existing Flemming, global-lepi, laptop and B200 evidence remains the source for published model comparisons. Four images do not establish general accuracy, embedding quality or cross-platform correctness. Windows/macOS and other accelerators have not been newly qualified. -The checkpoint and best epoch 30 are verified. The retained training material does not identify the exact training Git revision; the documented packaging checkout is not a substitute. The initialization checkpoint lineage and required attribution remain an owner question. A model-weight license is also awaiting designation. These are explicit finalization blockers, not grounds to alter the validated runtime or rerun the performance campaign. +The checkpoint and best epoch 30 are verified. The retained training material does not identify the exact training Git revision; the documented packaging checkout is not a substitute. The owner requested non-commercial share-alike weights; CC BY-NC-SA 4.0 is prepared for the release, with MIT retained for code. Initialization is reconstructed from the retained preparation source: torchvision DEFAULT EfficientNetV2-S and a new normalized hierarchical head, seed 42. The original starting-file hash and run-specific preparation manifest are absent; the notices disclose this limitation rather than requiring the owner to identify an internal filename. The V3 preset policy is now explicit: 3 regional / 25 global metadata rows for updated lists, legacy membership unchanged. Reconstruction from the pinned Parquet confirms all 25 preset memberships and counts are unchanged. Distinct-observation deduplication is deferred to a future preset revision, rather than silently altering evaluated membership. -The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to the earlier execution-qualified candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above identify the rebuilt candidate with this policy; final owner-driven notices remain outstanding. +The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to the earlier execution-qualified candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above identify the rebuilt candidate with this policy; these identities predate the licensing update and are retained as qualification evidence. -Final owner-driven documentation/notice changes will require refreshed bundle metadata and artifact hashes. Reuse these runtime checks for byte-identical code and weights; verify the rebuilt metadata/installation boundary instead of rerunning model evaluation. +The licensing update changes notices and metadata only. The final licensed candidate will bind these retained runtime checks to verified unchanged payloads and add an installed check of the refreshed metadata; it does not require another model evaluation. diff --git a/dev/releases/mambo_v3/model-provenance.toml b/dev/releases/mambo_v3/model-provenance.toml index ca455cd..affbe2a 100644 --- a/dev/releases/mambo_v3/model-provenance.toml +++ b/dev/releases/mambo_v3/model-provenance.toml @@ -10,10 +10,11 @@ seed = 42 training_epochs = 30 training_world_size = 4 training_source_revision_status = "Not recorded in retained checkpoint, config, or console log; packaging checkout is not asserted as training source." -initialization_status = "Training config loads initial_seed42.pt with pretrained=false; upstream initialization lineage is not established by the retained files." +initialization_status = "Source-based reconstruction: torchvision DEFAULT EfficientNetV2-S backbone and a new normalized hierarchical head, seed 42; original initialization checkpoint/hash and run-specific preparation manifest not retained." packaging_checkout = "52954edae5dae31a62ecb639533e6f8573d57055" packaging_checkout_role = "Original September 11 export/package environment only" -weights_license_status = "Awaiting owner designation; repository MIT license covers code only" +weights_license = "CC-BY-NC-SA-4.0" +weights_license_status = "Prepared for release following owner preference for non-commercial share-alike weights; code remains MIT" [checkpoint] url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/models/pytorch/best.pt" @@ -30,3 +31,16 @@ sha256 = "be1bf9f00729e3c0afdd56c4b2209a2bfe79e92bb1b0a2aa6013c18798c095b2" [configuration] url = "https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/training/run-metadata/config.yaml" sha256 = "a10caf8c1abca6b1660c0ca4c6e3cc42687512f1db02501bf1a3e236165c960f" + +[initialization_recipe] +evidence_kind = "Source-based reconstruction, not a retained initial-checkpoint identity" +source_revision = "53599f5c3e70c8e6ae683a205168e55bca38ab59" +preparation_source = "dev/ucloud/worker.py:prepare" +production_source = "dev/ucloud/production.py:generate" +backbone_factory = "mini_trainer/modeling/architectures/torchvision.py:get_torchvision_model" +backbone_weights = "EfficientNet_V2_S_Weights.DEFAULT (IMAGENET1K_V1)" +upstream_weights_url = "https://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pth" +upstream_documentation = "https://docs.pytorch.org/vision/stable/models/generated/torchvision.models.efficientnet_v2_s.html" +initial_checkpoint_name = "initial_seed42.pt" +initial_checkpoint_sha256_status = "Not retained" +seed = 42 diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py index 89ad37d..39dac24 100644 --- a/dev/releases/mambo_v3/prepare_candidate.py +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -65,7 +65,10 @@ def prepare(source, output): "model_id": "MAMBO_v3", "publication_performed": False, "qualification": "Pending final installed-artifact checks; see qualification records alongside this manifest", - "owner_decisions": ["Model-weight license", "Initialization attribution/lineage"], + "owner_decisions": [], + "provenance_limits": [ + "Initialization lineage reconstructed from source; starting file hash and training Git revision not retained" + ], "files": {}, } for path in sorted(output.rglob("*")): diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index 76a4602..737e67d 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -24,9 +24,10 @@ qualification or owner decisions have passed. ## Before any publication -- Resolve the model-weight license and initialization notices in `NOTICES.md`, - `MODEL_CARD.md` and `model-provenance.toml`. Training epoch 30 is verified; the - packaging checkout must not be substituted for an unknown training Git revision. +- Review the selected CC BY-NC-SA 4.0 weight license, MIT code license and upstream + notices in `NOTICES.md`, `MODEL_CARD.md` and `model-provenance.toml`. Training epoch + 30 is verified; initialization is reconstructed from source. The missing starting + checkpoint hash and training Git revision remain explicit provenance limitations. - Qualify these exact installed artifacts, record wheel/bundle hashes and actual runtime versions, and verify the README examples and single CLI owner. - Confirm PyPI ownership/availability of `mambo-v3` and access to publish the matching From 0f9ed3eef516047a16a882eb63ca77b4487e4d71 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 17:21:31 +0200 Subject: [PATCH 099/221] docs: record final licensed candidate and publication handoff --- dev/releases/mambo_v3/final-qualification.md | 58 +++++++++++++++----- dev/releases/mambo_v3/publication.md | 5 ++ 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index 1683e90..f0bf9f0 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -1,8 +1,14 @@ # MAMBO V3 installed-candidate qualification -25 September 2026. Current candidate source: `d6d19e0f157a0c17b2b6a735b3f6c638f62c060d`. Runtime execution qualification: `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`, reused by the payload-identity checks below. No publication, tag or public pointer change was performed. +25 September 2026. **Ready for publication review; nothing published.** +Candidate source: `97521aca80b714a3c728c5782a9fa2f13eed652e`. +Local artifacts: `local-evidence/mambo-v3-release-candidate-final/`. -Current local artifacts: `local-evidence/mambo-v3-release-candidate-d6d19e0/`. The earlier `local-evidence/mambo-v3-release-candidate/` is retained as execution evidence. The directory contains deployment wheel/source distribution, matching training wheel, a 406 MiB compressed offline bundle, public evidence and a complete artifact inventory. Qualifications are retained in its `qualification/` directory. +The review set contains the standalone deployment wheel/source distribution, +matching training wheel, compressed offline model bundle, public evidence, +qualification records, `release-candidate.json` and `SHA256SUMS`. +Weights use CC BY-NC-SA 4.0; adapter code remains MIT. No tags, uploads or public +pointers were changed. ## Verified boundaries @@ -14,29 +20,53 @@ Current local artifacts: `local-evidence/mambo-v3-release-candidate-d6d19e0/`. T | Native CPU | Installed PyTorch 2.14.0+cu130; four real images, global/regional/custom lists, prediction and embedding modes. | | Laptop CUDA | RTX 3080 Ti Laptop; installed Torch 2.14.0+cu130 and ORT GPU 1.30.0; same four-image contracts with default TTA. Both ONNX graphs used optimized profiles without failed probes. | | CLI ownership | With both release wheels installed, only mambo-v3 registers mambo_predict, targeting mambo_deploy.cli:run. | -| Installed bytes | All installed wheel payload files except installer-rewritten RECORD match the prepared wheel archive bytes. | -| Source contracts | Global defaults, streaming window, incremental output ordering, embedding file shape, error cleanup, cache/offline behavior and output provenance are covered by focused tests. | +| Source contracts | Global defaults, streaming window, incremental output ordering, embedding file shape, error cleanup, cache/offline behavior and output provenance are covered by focused tests. Nine cache/download tests passed after the final metadata update. | | Packaging/static | Minimal installed training-wheel check passed; standalone wheel and sdist built; Ruff/format and import contracts passed. | +| Final notice-bearing wheel | Installed outside the checkout; all 17 payload files match its archive. Offline metadata bootstrap, global default, sole CLI owner, license identifiers/text and expanded/embedded bundle agreement passed. | -## Artifact identities +## Artifact identities and evidence reuse | Artifact | SHA-256 | |---|---| -| `mambo_v3-0.3.0-py3-none-any.whl` | `3872e594b93a5cda7de519657ef4037244fdf42066c507da4d94959e3d1b7dee` | +| `mambo_v3-0.3.0-py3-none-any.whl` | `6e84e3ee5478771926bf4e18eb92c695ac44921f7d306ad522f4ec2f0b9fc511` | | `mini_trainer-0.3.0-py3-none-any.whl` | `0cf47254f962803b786c50310ca4ee40fe4710beaa0a9534386b73cd08f6883e` | +| Bundle `release.json` | `3ec2f0483f3412f11fdae4f33b8f95cabb29032cf060df79733d7854b236974e` | -The manifest covers 128 files, including the expanded bundle, archive, wheels, source distribution, public evidence and qualification records. `SHA256SUMS` also covers the manifest itself. The 44 files in the compressed bundle match the expanded bundle. All inventory hashes were verified. +The manifest covers 129 files, including qualification records. `SHA256SUMS` also +covers the manifest itself. All inventory hashes passed; all 45 compressed bundle +files match the expanded bundle. The source distribution's module payloads match +the wheel. -`qualification/validation.json` binds retained execution reports to the earlier wheels and records why they apply to the current candidate: the matching training wheel is identical, and the deployment wheel differs only in `default_bundle.json` and its checksum record. The new wheel was installed in the clean ONNX environment; its 17 payload files match the wheel. Offline metadata bootstrap, global default, embedded/expanded bundle agreement and sole CLI ownership passed. No inference or speed campaign was repeated. Report hashes and the earlier validation record are included; raw input paths remain in local evidence only. +Execution qualification used source `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`. +`qualification/validation.json` binds those retained reports to the current wheels: +the training wheel is identical, and deployment runtime payloads are identical. +Only the embedded descriptor, README in wheel metadata and checksum record changed. +All model files, preprocessing and class-list bytes remain unchanged. Current +installed metadata checks cover the new notices/license and selected preset policy. +This is evidence reuse, not a claim that inference was rerun after documentation edits. +The earlier wheels and raw reports remain under +`local-evidence/mambo-v3-release-candidate/`. ## Scope and provenance limits -These are execution and packaging checks, not new accuracy or speed experiments. Existing Flemming, global-lepi, laptop and B200 evidence remains the source for published model comparisons. Four images do not establish general accuracy, embedding quality or cross-platform correctness. Windows/macOS and other accelerators have not been newly qualified. +Existing Flemming, global-lepi, laptop and B200 evidence remains the source for +published model comparisons. No quality or speed campaign was rerun. Four-image +runtime checks do not establish general accuracy, embedding quality or arbitrary +platform compatibility. Windows/macOS and other accelerators were not newly qualified. -The checkpoint and best epoch 30 are verified. The retained training material does not identify the exact training Git revision; the documented packaging checkout is not a substitute. The owner requested non-commercial share-alike weights; CC BY-NC-SA 4.0 is prepared for the release, with MIT retained for code. Initialization is reconstructed from the retained preparation source: torchvision DEFAULT EfficientNetV2-S and a new normalized hierarchical head, seed 42. The original starting-file hash and run-specific preparation manifest are absent; the notices disclose this limitation rather than requiring the owner to identify an internal filename. +The checkpoint and best epoch 30 are verified. The retained materials do not identify +the exact training Git revision; the packaging checkout is not a substitute. +Preparation source reconstructs the starting checkpoint recipe: torchvision DEFAULT +EfficientNetV2-S (ImageNet-1K) and a new normalized hierarchical head, seed 42. +The original starting-file hash and run-specific preparation manifest are absent. +The model card and notices disclose this limitation without asserting a verified +initial-file identity. -The V3 preset policy is now explicit: 3 regional / 25 global metadata rows for updated lists, legacy membership unchanged. Reconstruction from the pinned Parquet confirms all 25 preset memberships and counts are unchanged. Distinct-observation deduplication is deferred to a future preset revision, rather than silently altering evaluated membership. +All 25 geographic lists retain evaluated membership: updated lists require at least +3 regional / 25 global metadata rows; legacy lists are unchanged. Reconstruction +from the pinned Parquet confirmed all counts and memberships. Any future distinct- +observation counting or membership change requires an identified preset revision. -The subsequent metadata refresh changes only `PRESETS.md`, `PRESET_DEFINITIONS.toml` and `presets.json` in the bundle. All model files, preprocessing, class lists and runtime code remain identical to the earlier execution-qualified candidate. The checked-in automatic-download descriptor matches the refreshed bundle (`release.json` SHA-256 `9ad1064753b17719034c2e25c71df14446d9059838945e2d82b8d5048714f483`). Nine cache/download tests pass; the installation checker also rejects a populated cache instead of claiming that cache reuse qualified downloading. The wheel hashes above identify the rebuilt candidate with this policy; these identities predate the licensing update and are retained as qualification evidence. - -The licensing update changes notices and metadata only. The final licensed candidate will bind these retained runtime checks to verified unchanged payloads and add an installed check of the refreshed metadata; it does not require another model evaluation. +[Publication and rollback handoff](publication.md) describes the separate human +publication step. Package ownership and authenticated uploads are publisher actions; +no public release was created by this preparation. diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index 737e67d..0f6a113 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -7,6 +7,11 @@ package, so upgrading this package cannot select a different trained model. ## Local candidate +The prepared review set is `local-evidence/mambo-v3-release-candidate-final/`. +Its manifest includes qualification records, and its checksum list includes the +manifest itself. See [final qualification](final-qualification.md) for the exact +source commit, wheel hashes and evidence-reuse scope. + From a clean, committed release checkout: ```sh From 8e541976553cf4cecf4760c0bdbacacacd8fabbc Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 18:36:38 +0200 Subject: [PATCH 100/221] docs: consolidate campaign priorities and training lessons --- README.md | 33 +- dev/README.md | 33 +- docs/quantization-artifacts.md | 8 +- docs/quantization-roadmap.md | 215 +++++------ docs/quantization-status.md | 26 -- docs/roadmap.md | 437 ++++++++-------------- docs/training-workflow-postmortem.md | 529 +++++++-------------------- tests/README.md | 1 + 8 files changed, 403 insertions(+), 879 deletions(-) delete mode 100644 docs/quantization-status.md diff --git a/README.md b/README.md index 6f0b31e..2e711fc 100644 --- a/README.md +++ b/README.md @@ -59,31 +59,18 @@ uv sync --extra all --extra [cpu/cu126/cu130/cu132] source .venv/bin/activate ``` -> [!TIP] -> We highly recommend installing `torch` and `torchvision` with native CUDA support via either `uv sync ... --extra [cpu/cu126/cu130/cu132]` or `uv pip install ... --torch-backend=auto`, **and** crucially running scripts or tools associated with your `uv` virtual environment by **activating the venv:** -> ```bash -> source .venv/bin/activate -> ``` -> Using `uv run ...` is likely to automatically install CUDA-incompatible wheels. If you really want to use `uv run`, we suggest using the `--no-sync` flag every time. -> Note that if you are *"lucky"* you might have the default CUDA version on your system, meaning that `uv run` might in fact use the correct wheels. This is, however, not guaranteed. +Activate the environment, use its executables directly, or use `uv run --no-sync`. +An implicit sync can replace the deliberately selected PyTorch backend. Select the +backend explicitly whenever installing or synchronizing dependencies. ## Data loading on shared machines -Automatic DataLoader worker selection uses the CPUs available to the process when -the OS exposes that information, including CPU affinity. It reserves four CPUs, -rounds down to an even worker count, and caps workers at 16 for training and 32 for -prediction. For example, an 8-CPU affinity limit selects four workers, even on a -larger shared machine. Four or fewer available CPUs selects zero workers. - -Set `--num_workers 2` to choose a count explicitly, or `--num_workers 0` to load in -the main process. CUDA-cached datasets always use zero DataLoader workers. -RAM-cache preloading uses a separate thread pool that also respects process CPU -availability, reserves two CPUs, and uses between 1 and 128 threads. - -Affinity does not describe all container CPU quotas or competition from other jobs. -If an allocation shares an unrestricted CPU set, choose a conservative explicit -worker count per training process. `--num_workers` does not control RAM-cache -preloading; use uncached loading when you need that explicit bound. +Defaults use process CPU availability, affinity, visible cgroup quotas and Slurm +allocation limits. Shared resources may still need an explicit per-process budget. +Set `--num_workers N` for loading (`0` runs in the main process), and +`--cache-workers N` for training-cache preparation. CUDA-cached datasets use zero +DataLoader workers. See [automatic budgets](dev/README.md#automatic-cpu-budgets) +for caps and fallback behavior; cache readers and DataLoader workers are separate. ## Weights & Biases Integration @@ -115,7 +102,7 @@ Feel free to contribute, but here are a few tips: Repository agents should start with [AGENTS.md](AGENTS.md). Planned improvements and their acceptance criteria are tracked in the [roadmap](docs/roadmap.md). -The quantization branch has a focused [bottleneck and handoff roadmap](docs/quantization-roadmap.md). +Remaining quantization work has a focused [target-qualification roadmap](docs/quantization-roadmap.md). ## ONNX export diff --git a/dev/README.md b/dev/README.md index 2481c27..7a6121d 100644 --- a/dev/README.md +++ b/dev/README.md @@ -2,7 +2,7 @@ Tests are grouped by subsystem; see the [test suite map](../tests/README.md). Use [local worktrees](worktrees.md) to develop independent branches concurrently. -For quantization work, follow the [branch roadmap](../docs/quantization-roadmap.md) +For quantization work, follow the [quantization roadmap](../docs/quantization-roadmap.md) and [benchmark command index](benchmarks/README.md). For a mounted global_lepi dataset on a manually allocated UCloud node, use the [paired branch training comparison](ucloud/README.md), including fresh environment @@ -324,20 +324,27 @@ Agent-only edits need content/link review and `git diff --check`; changes to the classifier or workflows need their focused checks. Release-tag, scheduled and manual workflows are not disabled by agent commit messages. +The first hosted agent-only PR still needs required-check verification under the +repository's actual branch-protection settings; local classifier tests do not +establish those hosted statuses. + ## Automatic CPU budgets -Automatic loader and cache worker counts now use the smallest detected process -CPU count, affinity mask, visible Linux cgroup CPU quota, and positive -`SLURM_CPUS_PER_TASK` allocation. Cgroup v1 and v2 ancestor limits are included; -fractional CPU quotas are rounded down before applying the existing four-CPU -reserve and worker caps. Explicit worker counts, including zero, remain unchanged. -Unreadable, unlimited, or malformed quota data falls back to the other signals. - -These are resource ceilings, not a measurement of contention from other jobs. -For a deliberately shared allocation, set worker counts explicitly when needed. -The relevant interfaces are documented by the -[Linux kernel](https://docs.kernel.org/admin-guide/cgroup-v2.html#cpu-interface-files) -and [Slurm](https://slurm.schedmd.com/sbatch.html#OPT_SLURM_CPUS_PER_TASK). +Defaults use the smallest detected process CPU count, affinity mask, visible Linux +cgroup quota (v1/v2 ancestors included) and positive `SLURM_CPUS_PER_TASK`. Malformed, +unavailable or unlimited quota data falls back to other signals; fractional quotas +round down. Explicit counts, including zero, are preserved. + +| Consumer | Automatic budget | Override | +| --- | --- | --- | +| Training DataLoader | Available CPUs minus 4, rounded down to even, bounded 0–16 | `--num_workers` | +| Prediction DataLoader | Same rule, capped at 32 | `--num_workers` | +| Training cache preparation | Same rule, capped at 16; zero uses serial preparation | `--cache-workers` / `cache_workers` | + +CUDA-cached datasets force zero DataLoader workers. Limits describe available +resources, not competition from other jobs; set explicit per-rank budgets when +sharing an allocation. See the [Linux quota interface](https://docs.kernel.org/admin-guide/cgroup-v2.html#cpu-interface-files) +and [Slurm allocation setting](https://slurm.schedmd.com/sbatch.html#OPT_SLURM_CPUS_PER_TASK). CI runs on pull requests targeting `master` and on pushes to `master`. Feature branches such as `quant` use PR checks, avoiding duplicate push/PR jobs. New diff --git a/docs/quantization-artifacts.md b/docs/quantization-artifacts.md index 5c145f9..6d8bdb7 100644 --- a/docs/quantization-artifacts.md +++ b/docs/quantization-artifacts.md @@ -5,10 +5,10 @@ that every temporary binary remains in the checkout. Cleanup consolidates local evidence under ignored `local-evidence/quantization-2026-09-09/`; no model, dataset or generated result is committed by this operation. -Historical cleanup counts, disk-space observations and the test snapshot are -preserved in the [dated agent handoff](../.agents/notes/2026-09-09-quantization-cleanup.md). -They do not establish current artifact availability or test status. This guide -covers the retained layout and restore procedure. +Historical cleanup counts and validation are recorded in +[the original report](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/quantization-artifacts.md). +They do not establish current artifact availability or test status. Verify the +local inventory before reuse; this guide owns the restore procedure. ## Retained locally diff --git a/docs/quantization-roadmap.md b/docs/quantization-roadmap.md index fa854d9..2bdc086 100644 --- a/docs/quantization-roadmap.md +++ b/docs/quantization-roadmap.md @@ -1,128 +1,87 @@ -# Quantization feature-branch roadmap - -This is the current plan for `quant`. The local implementation and evidence are -substantial, but the goal remains incomplete until useful trade-offs are verified -on the intended hardware. After repository consolidation, pause further broad -laptop sweeps and reporting expansion. Resume with a specific bottleneck, -target run or integration requirement from the sequence below. - -## Scope and acceptance - -Use EfficientNetV2-S with symmetric hidden layers and normalized flat and -hierarchical classifiers. Evaluate full training and parameter-frozen fine-tuning -separately. Use reproducible synthetic/oracle checks, MNIST integration and reviewed -Blair splits; use 10k/100k-class synthetic heads for capacity. Larger class counts -belong on appropriately provisioned hardware. Synthetic capacity does not prove -large-vocabulary classification quality. - -| Target | Required execution | Evidence needed to finish | -| --- | --- | --- | -| HPC: A40/A100/B300-class systems with AMD EPYC | PyTorch training | Paired convergence/time to comparable quality, throughput, cold/setup costs, host and allocated/reserved device memory, actual loading/transfer costs, checkpoint/resume correctness. Record each tested GPU/runtime/allocation. | -| Local: NVIDIA Spark or intended RTX desktop/Ryzen system | PyTorch training/fine-tuning and ONNX GPU inference | Full/frozen training evidence plus target-built inference engines, actual integer placement, paired quality, realistic batches, end-to-end inference cost and memory. Verify exact installed device and architecture first. | -| Edge: Raspberry Pi or comparable ARM device | ONNX CPU inference | Installed runtime/operator compatibility, five-metric quality, batch-one latency, sustained throughput, process memory, preprocessing and deployment packaging under realistic thread/power/thermal conditions. | - -The quality contract is Macro-F1, Macro-Recall, Macro-Precision, Coverage and -Theil's U through `mini_metrics`, including parent levels. A few points of loss -can be acceptable with a substantial measured speed/cost or memory benefit. -Choose and record per-profile quality/resource gates before qualification; do not -hide a failed metric behind accuracy or engine size. Keep baselines practical: -BF16/FP16 training where supported, FP16 TensorRT, and floating ONNX CPU. - -## 1. Finish local preparation and handoff - -The implementation, current findings, command guides, grouped tests and retained -evidence should form a reviewable branch milestone. This stage does not require -new target hardware or another performance sweep. - -- Run static checks and the complete grouped suite; preserve test collection, - checkpoint fixture imports and spawn behavior. Keep optional/GPU skips explicit. -- Retain essential trained final models, deployable ONNX sources, predictions, - reports, input identities and scripts; remove disposable duplicate/intermediate - models and laptop-specific engines. See [artifact retention](quantization-artifacts.md). -- Use existing [training](../dev/benchmarks/training.md), - [inference](../dev/benchmarks/inference.md) and - [reporting](../dev/benchmarks/reporting.md) commands as the handoff. Avoid a - second implementation of model construction, evaluation or configuration. -- Keep the branch unmerged until reviewed. Repository settings and public - publication require a deliberate activation step after review. - -Exit: clean committed branch, unchanged collected test cases, passing checks, -concise documentation, and an inventory of retained/restorable evidence. - -## 2. Obtain target runs and establish practical baselines - -**Dependency:** access to the target machines, or an operator who can run the -commands and return the full artifacts. No local measurement can remove this -dependency. Record GPU/CPU identity, architecture, memory, OS, driver/runtime, -PyTorch/ONNX versions, thread/worker limits and allocation conditions. - -1. Prepare explicitly selected backend environments; do not synchronize away a - working CUDA environment. Verify TorchAO/kernel support on the actual GPU and - host architecture. Keep `mini_metrics` in an explicit compatible interpreter. -2. Stage the reviewed dataset/split/taxonomy and training-only calibration inputs. - Keep preprocessing and input/model hashes identical across each pair. -3. Run a bounded correctness pilot: model construction, a training step, checkpoint - reload, inference and operator placement. Reject unsupported execution before - launching a long benchmark. -4. Run `bash dev/check-benchmarks.sh qt-efficientnet FRESH_RESULTS` with the documented - data/interpreter variables. Its default covers both heads, full/frozen training, - BF16/INT8 and three seeds. Select longer budgets explicitly where needed; - five-epoch quality is not a settled convergence comparison. -5. Rebuild TensorRT engines on the target with - `bash dev/check-tensorrt-deployment.sh FRESH_RESULTS`. On ARM, use - `python -m dev.benchmarks.inference.cpu_deployment` with the reviewed baseline/candidate, - manifest and representative inputs. Begin with explicit conservative threads. -6. Collect fresh-process repeated runs without competing benchmark jobs. Include - cold startup, warm execution and end-to-end input handling as separate scopes. - Return raw reports and artifacts even when a stage fails. - -Exit: reproducible floating and quantized baseline evidence for the actual target; -an identified dominant cost or a demonstrated useful trade-off. Scope claims to -tested configurations rather than extrapolating across hardware families. - -## 3. Unlock measured performance bottlenecks - -The [findings](benchmarks.md) summarize the evidence behind these priorities. -Choose the next row using target profiles; do not implement all possible precision -formats or distributed backends merely because they are available. - -| Observed bottleneck | Action that can unlock it | Verification gate | -| --- | --- | --- | -| Full EfficientNet training gets only about 3.4% peak savings from head-only QT, with no reliable local speed gain | Profile the entire model, backward pass, optimizer, loading and transfers on the target. If convolution/activation traffic dominates, select and implement a supported deeper quantization path for that cost; if the head dominates, focus on its kernels/storage. | Report actual quantized/floating coverage and physical storage. Demonstrate end-to-end benefit at comparable quality; AMP or fake quantization alone does not complete this work. | -| Large normalized heads incur transient normalization/gradient storage and optimizer overhead | Preserve bounded preparation/backward fixes. Profile realistic head sizes, batching and fused update paths; consider optimizer-state reduction only if its footprint is limiting. | Fresh-process setup/steady-state measurements; allocated and reserved peaks; numerical, accumulation, optimizer-step and checkpoint regressions. Do not optimize only an isolated GEMM. | -| Compilation/CUDA graphs can improve steady state while increasing setup or reserved memory | Measure eager, compiled and graph modes separately. Qualify first-use tuning and cold setup on the target; reduce capture/tuning overhead only where it matters. | Include initialization and first step, replay correctness, total useful-work time and reserved memory. A warmed kernel speedup is insufficient. | -| Compiled floating-point DDP qualification emitted gradient/bucket stride mismatch, stochastic-depth recompilation-limit and hierarchical scalar-extraction graph-break warnings; throughput impact is unmeasured | Identify the affected parameter and layout before/after wrapping and backward; isolate compiler specialization and lazy hierarchy initialization with a small reproducer. Keep active qualification unchanged until measurements justify a fix. | Preserve gradient/update, stochastic-depth, checkpoint and DDP semantics; demonstrate reduced copies or graph fragmentation and repeatable warm end-to-end benefit. Warning disappearance alone is not acceptance. | -| Short hierarchical QT runs lose parent metrics; early BatchNorm sensitivity is substantial | Run longer paired budgets/seeds with working epoch statistics. Investigate precision/optimization sensitivity at fixed data and model state. Qualify any state-refresh or recipe change with its extra cost. | Time to comparable leaf/parent quality across seeds. Do not adopt automatic BatchNorm refresh from the mixed existing results. | -| Native dynamic INT8 ONNX uses MatMulInteger CPU fallback on CUDA; TensorRT rejects that representation | Qualify the explicit materialize-then-calibrate route first. If exact native quantizer semantics are required, implement a supported integer GPU lowering/kernel as a separate feature. | Actual provider/operator placement and end-to-end quality against the correct reference. Never silently label floating/fallback execution as integer GPU inference. | -| Large-head float export needs a profile-specific tolerance override | Continue numerical attribution with higher-precision references on the failing target/profile. Distinguish accumulated rounding from an export/operator defect. | Explicit score/parity and decision/metric evidence; retain the public default gate until a justified general change exists. | -| INT8 TensorRT engines are smaller but can be slower; local batch-64 results are near tied | Profile target batch sizes, transfers, tactics and head/backbone balance against FP16. Measure actual runtime memory and sustained throughput, not just serialized size. | Significant useful speed/cost or memory benefit with acceptable paired quality on the intended workload. | -| ARM kernels/runtime, thermal behavior and packaging are unverified | Prepare the actual ARM environment and inspect unsigned-activation CPU recipe placement; benchmark sustained batch-one inference including preprocessing. Adjust calibration/operator choices only from measured failures. | Repeated ARM measurements, all five metrics, memory within device limits, and an installed deployment example. x86 savings do not qualify ARM. | -| Shared storage/loading or CPU oversubscription may dominate training | Measure loader wait and host/device transfer on the real allocation. Tune explicit threads/workers, caching and prefetch/transfer options within resource limits. | Identical sample/order semantics, bounded host/shared memory, and improved end-to-end training rather than loader-only throughput. | - -If production size requires multiple GPUs, native QT DDP/FSDP is a separate -unsupported boundary to implement and qualify. Check parameter representation, -communication/reduction, sharding, optimizer state and distributed resume. Existing -floating DDP tests do not establish distributed QT support. - -## 4. Close development and integration bottlenecks - -| Dependency or gap | Required action | Done when | -| --- | --- | --- | -| Target-only optional runtimes and backend versions | Record supported combinations; preserve lazy imports and actionable errors; run installed-wheel validation after dependency/packaging changes. | Clean installation and intended kernels work on each claimed target without changing floating defaults. | -| Target inputs/models currently require explicit staging | Prepare a versioned deployment bundle with preprocessing, mappings, score semantics, calibration provenance, model hashes and a minimal inference example. Reuse current export manifests. | Another operator can reproduce the target run without private notebook state or this laptop's paths. | -| Continuous CPU/training handoff is incomplete | Connect the existing CPU command and representative training reports to configured runners and compact history. Add only the adapters needed for real collected evidence. | Failed and successful target runs retain attributable reports; history preserves CPU/GPU and training/inference measurement scopes. | -| Release storage/Pages has only local and simulated validation | After branch review/merge, configure Pages and target runner variables, then enable `ENABLE_BENCHMARK_HISTORY`. Run one live success, failure and publishing retry. | Stored asset readback, immutable run identity, correct public page and recoverable failure verified remotely. | -| Quality/resource acceptance is not automated | Define per-profile gates from practical paired evidence and the agreed few-points trade-off. Preserve all five metrics and uncertainty/repetition context. | A regression is visible and fails the appropriate check; unsupported/untested profiles cannot look production-qualified. | - -## 5. Completion and deferred work - -Finish with supported opt-in recipes for the three target regimes, reproducible -quality/efficiency evidence, functioning checkpoint/export/deployment contracts, -visible continuous results, and a final compatibility/packaging review. A negative -result should constrain the supported recipe or motivate a measured implementation -change; it must not be reported as a general speedup. - -EMA repair, unrelated optimizer/loss/augmentation comparisons, new dataset formats, -Birds/iNaturalist expansion and cosmetic dashboard work remain deferred. Broader -operator or distributed support becomes necessary when the target workload needs -it to achieve the stated goal, not as an unconditional expansion of this roadmap. +# Quantization roadmap + +The implementation is merged. **Useful target-machine trade-offs remain open.** +Do not repeat completed branch cleanup or broad laptop sweeps as a prerequisite. +[Measured findings](benchmarks.md), [commands](../dev/benchmarks/README.md) and +[artifact retention](quantization-artifacts.md) are the maintained evidence and +execution references; detailed historical experiments remain in +[the recorded snapshot](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). + +## Supported scope and decision criteria + +Implemented: opt-in native CUDA INT8 Linear training with normalized symmetric +heads, checkpoint safeguards, floating materialization/calibration, generic ONNX +export and CPU/TensorRT placement, quality and resource reporting. Defaults remain +floating point. Native QT DDP/FSDP, integer convolution training, exact native +quantizer GPU ONNX execution and ARM production performance are not established. +EMA remains unsupported. + +Evaluate EfficientNetV2-S flat and hierarchical heads, full and frozen training, +with reviewed data/splits and paired seeds. Synthetic/oracle and 10k/100k-class +capacity checks establish correctness/capacity, not image-level quality. +Use practical floating baselines: supported AMP training, FP16 TensorRT and floating +ONNX CPU. Through `mini_metrics`, retain macro F1/recall/precision, coverage and +Theil's U at leaf and parent ranks. Set workload-specific quality/resource gates +before a run; a small quality loss may be useful only with a measured resource gain. + +| Target | Question and required evidence | +| --- | --- | +| HPC A40/A100/B300-class + EPYC | Does full/frozen training reach comparable quality sooner or with useful memory savings? Include startup, loading/transfers, allocated/reserved memory and resume correctness. | +| Intended RTX desktop or Spark | Same training question; qualify target-built ONNX/TensorRT inference with real operator placement, batches, end-to-end cost and memory. | +| Raspberry Pi/comparable ARM | Does installed ONNX CPU inference fit memory and sustain useful batch-one performance, including preprocessing, threads and thermal/power conditions? | + +Record the actual device/allocation, OS, driver/runtime and installed packages. +Available hardware determines the next bounded comparison; the table is not a +requirement to obtain every listed architecture before making progress. + +## Next target run + +1. Prepare an explicit backend environment and reviewed inputs. Preserve dataset, + split, taxonomy, preprocessing and model hashes; use training-only calibration. +2. Run a small construction/train-step/checkpoint/inference and placement pilot. + Reject unsupported execution before a large comparison. +3. Use `bash dev/check-benchmarks.sh qt-efficientnet FRESH_RESULTS` for the paired + training matrix, with [documented variables](../dev/benchmarks/training.md). + Its default three-seed, five-epoch comparison is not settled convergence evidence. +4. Use `bash dev/check-tensorrt-deployment.sh FRESH_RESULTS` for target-built engines, + or `python -m dev.benchmarks.inference.cpu_deployment` for CPU. Follow the + [inference guide](../dev/benchmarks/inference.md). +5. Retain success/failure reports, inputs and identities. Separate cold setup, + warm compute and end-to-end costs; use repeated uncontended runs where variation + affects the decision. Return evidence through the existing reporting format. + +## Choose changes from the limiting cost + +| Existing evidence or boundary | Next useful action | +| --- | --- | +| Head-only QT gave about 3.4% peak savings in full EfficientNet training, without reliable local speed gains. | Profile the full target workload. Expand integer coverage only if the unquantized cost dominates; report physical storage and end-to-end benefit. | +| Large normalized heads have transient normalization/gradient and optimizer costs. | Preserve bounded preparation/backward behavior; qualify realistic head sizes and optimizer memory instead of optimizing an isolated GEMM. | +| Compilation/graphs trade startup and reserved memory for steady-state speed. | Include setup, first step and total useful work. Recorded DDP stride, recompilation and hierarchy graph-break warnings are leads, not proven bottlenecks. | +| Short hierarchical QT runs lose parent metrics; BatchNorm changes had mixed results. | Compare longer paired budgets/seeds and time to quality. Do not adopt automatic BN refresh without evidence including its cost. | +| Native dynamic INT8 ONNX falls back to CPU for MatMulInteger; TensorRT rejects that representation. | Qualify materialize-then-calibrate first. Exact native integer GPU lowering is a separate feature, with actual provider placement as acceptance. | +| Smaller INT8 TensorRT engines were not reliably faster than FP16. | Measure target tactics, batches, transfers and runtime memory; serialized size is not a speed result. | +| ARM runtime and sustained behavior are unverified. | Test the real device and unsigned-activation CPU recipe before claiming edge support. | +| Shared-storage/CPU contention can dominate. | Tune bounded reads, workers and transfer overlap within the allocation; preserve order and measure whole training. | + +Retain export score/decision checks. A profile-specific large-head tolerance +exception does not justify weakening the generic exporter gate. Distributed native +QT needs separate parameter/communication/sharding/optimizer/resume qualification; +floating DDP tests do not establish it. + +## Integration and deferred work + +Reuse existing export manifests for portable bundles: preprocessing, mappings, +score semantics, calibration provenance, hashes and a minimal installed example. +Keep optional runtimes lazy and validate installed wheels when packaging changes. +MAMBO's floating bundle offers a packaging example, not quantized qualification. + +[Continuous reporting](../dev/benchmarks/reporting.md) has local/simulated evidence; +remote activation still needs configured runners/Pages, reviewed +`ENABLE_BENCHMARK_HISTORY`, stored-asset readback and live success/failure/retry +checks. Preserve training/inference and CPU/GPU scopes and visible missing results. +Define automated quality/resource regression gates from the paired target evidence. + +EMA repair, unrelated feature/dataset expansion and dashboard cosmetics are separate +work. New precision formats or distributed backends belong here only when required +by the target workload. Negative results should narrow supported claims, not trigger +another indiscriminate experiment matrix. diff --git a/docs/quantization-status.md b/docs/quantization-status.md deleted file mode 100644 index c88ce11..0000000 --- a/docs/quantization-status.md +++ /dev/null @@ -1,26 +0,0 @@ -# Quantization branch status - -The goal is **not complete**: target-machine benefits have not been verified. -The maintained sources of truth are now: - -- [Branch roadmap](quantization-roadmap.md): ordered work, bottlenecks, dependencies - and completion gates. -- [Current benchmark findings](benchmarks.md): measured benefits, regressions and - interpretation limits. -- [Command index](../dev/benchmarks/README.md): training, inference and reporting. -- [Historical evidence](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md): detailed experiments, - unsuccessful approaches and numerical results retained for traceability. -- [Artifact retention](quantization-artifacts.md): what survived temporary cleanup - and how to restore evidence. - -Implemented locally: native INT8 Linear training with normalized symmetric heads; -optimizer/checkpoint safeguards; shared loading improvements; generic ONNX export; -explicit native-checkpoint materialization and calibration; CPU/TensorRT quality, -placement and resource commands; compact CPU/GPU records; opt-in release/Pages -publishing. The reporting service has not been qualified remotely. - -Not established: worthwhile end-to-end training gains on HPC/desktop targets, -integer convolution training, distributed native QT, exact native-quantizer GPU -ONNX execution, or ARM production performance. EMA repair remains deferred. -Further notebook experiments, dashboard expansion, unrelated feature comparisons, -Birds/iNaturalist and dataset-format work are not prerequisites for this branch. diff --git a/docs/roadmap.md b/docs/roadmap.md index 32f26e3..ae53194 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,324 +1,175 @@ -# Repository strengthening roadmap - -The quantization branch has been merged into master. Its -[execution roadmap](quantization-roadmap.md) remains the specialist backlog; -fully quantized training performance is not established by that merge. - -The next delivery priority is releasing the already-trained September UCloud -model. Follow the [model release roadmap](ucloud-model-release-roadmap.md): freeze -candidate and prior-release identities, preserve MAMBO_v2 compatibility across -native PyTorch and standard ONNX, support presets/custom class lists and predictions -with/without embeddings, then compare in-domain/Flemming quality and laptop CPU/GPU -speed before staging publication. Start with its bounded increments A and B. -Small ONNX numerical differences are acceptable; task-level quality and aligned -behavior matter. Retraining is outside this release; quantization is reserved for -a later release and adds no packaging, benchmarking or acceptance work here. - -The completed four-GPU production campaign is assessed in the -[training workflow post-mortem and next-run plan](training-workflow-postmortem.md). -For the next training run, first deliver its bounded P0 workflow slice: durable -stage state and recovery, preallocated evaluation/export preparation, and separate -compute/storage qualification. Then measure concurrent staging before investing in -prepared shards. Preserve normal CLIs, operator overrides, figures and W&B. -These are proposed development priorities, not implemented capabilities. They fit -the safeguards, export, loading and evaluation boundaries below; defer another -large optimization matrix until it can change a specific production decision. - -This is the implementation order. Each increment should leave the existing default -training and prediction interfaces working and include its own validation evidence. -Items below are planned unless explicitly marked delivered. +# Repository roadmap -## 1. Agent guidance and development safeguards +Updated 25 September 2026. This is the cross-campaign priority map; specialist +pages own procedures and evidence. Delivered work is context, not a new checklist. + +## Current state and next delivery + +| Area | Delivered | Remaining boundary | +| --- | --- | --- | +| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Human publication review and publication, separately authorized. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | +| Training | Four-GPU UCloud production run completed; loader, optimizer-step and checkpoint safeguards implemented. | Before another production run, deliver the recovery/evaluation workflow below. | +| Quantization | Merged opt-in native CUDA INT8 Linear training, x86 PTQ/QAT, checkpoint/export tools. | Useful target-machine trade-offs remain unqualified; [specialist roadmap](quantization-roadmap.md). | +| Generic export | `mt_export`, manifests and CPU float32 ONNX qualification across representative heads/backbones. | Broader backend qualification and generic Hugging Face bundle integration; MAMBO packaging does not establish either for every model. | +| Portable viewer | Existing feature-branch implementation and published inspection candidate. | Reconcile review/integration state and complete physical-device acceptance; see below. | -Delivered in the initial increment: +For the **next training campaign**, prioritize durable stage state and recovery, +prepare evaluation/export before allocating GPUs, and qualify storage separately +from compute. The [training post-mortem](training-workflow-postmortem.md) explains +why. Use normal CLIs, preserve operator overrides, figures and W&B. These workflow +improvements remain planned; another broad optimization matrix is not a prerequisite. -- Root `AGENTS.md` with repository context, compatibility boundaries, environment - handling, and validation requirements. -- Shared `dev/check.sh` commands for local checks and CI, including import contracts. -- Explicit no-sync validation after CI selects and installs CPU dependencies. -- Contributor documentation explaining CPU, GPU, slow-backbone, and sandbox limits. +The following order governs general development. Finish bounded increments with +observable compatibility checks rather than starting every listed campaign. -Delivered in the validation increment: +## 1. Agent guidance and development safeguards -- Consolidated `.agents/rules/` references and a focused repository maintenance skill. -- Minimal installed-wheel checks covering imports, CLI help, packaged resources, and - image-folder training/reload/prediction outside the source tree. -- Tracked `uv.lock`, locked regular CI, and a separate scheduled/manual workflow for - latest-compatible dependency resolution. Both cover Python 3.12, 3.13, and 3.14. +Delivered: shared static/runtime checks, import contracts, installed-wheel smoke +checks, locked CI and a separate latest-compatible dependency matrix for Python +3.12–3.14. Commands and limitations belong in the [development guide](../dev/README.md); +agent rules belong in [AGENTS.md](../AGENTS.md). -Acceptance: a fresh checkout has one documented path to validation; architecture -checks do not initialize CUDA; local and CI commands match; missing optional -integrations do not prevent core imports or CLI help. +Remaining: verify required-check behavior on the first hosted agent-only PR under +actual branch protection. Preserve one validation entry point, static architecture +checks that do not initialize CUDA, and minimal installed-package coverage. ## 2. Behavior-preserving simplification -Preparation delivered: checkpoint contract tests for live/reloaded prediction equality, -state restoration, and deterministic CPU continuation with the original epoch budget, -fixed data order, and stochastic transforms disabled. EMA restoration is tested separately. -Active AMP, GPU execution, and arbitrary RNG/sampler continuation are not covered. - -Known failure discovered by this coverage: full EMA continuation fails after evaluation -populates `Classifier._linear_weight` and `_linear_bias` caches. These nonpersistent -buffers can have different shapes on the EMA and training models, breaking the next -averaging update. A strict expected-failure test records the problem. EMA is temporarily nonfunctional -and unsupported, with a runtime warning when enabled. Repair is explicitly deferred; -leave it disabled and exclude it from current feature comparisons. -The validation increment changed no training behavior. - -Loader increment delivered: shared resize validation and worker-selection helpers, -removal of an unreachable label-conversion branch and obsolete resampling comments, -and regression coverage for shapes, labels, sampling, subsampling, and worker settings. -Resize tuple ordering and existing error messages are preserved. - -The accompanying worker-selection fix uses process CPU availability and affinity -instead of the whole node's CPU count when available. Existing training/inference -caps and headroom are retained, as are explicit counts and the CUDA-cache override. -RAM-cache preloading uses the same CPU detection and now always selects at least one -thread, including on one-CPU systems. This does not account for every CPU quota or -competing job; shared unrestricted allocations still need explicit worker settings. - -Next, review the orchestration boundaries in `builders.py`, `train.py`, and `trainer.py` -only where an extraction has a concrete benefit. Review checkpoint and metadata -boundaries separately. - -Before each extraction, cover observable behavior: class order, labels, shapes, -dtypes, device placement, sampling, errors, return values, and public imports. -Use synthetic training/resume and CPU DDP integration tests for cross-cutting changes. -Do not combine cleanup with changed defaults, new dependencies, or numerical fixes. - -Acceptance: focused regression tests and existing integration tests pass; import -contracts remain intact; existing configurations and checkpoints remain usable. +Checkpoint tests cover live/reloaded predictions, state restoration and controlled +CPU continuation with fixed data order and the original epoch budget. They do not +establish arbitrary RNG/sampler or active AMP continuation. Loader coverage includes +sampling, class/label order, caching, worker budgets and transfer ownership. -## 3. ONNX export and Hugging Face integration +**EMA remains unsupported.** Evaluation populates classifier caches whose shapes +can differ between the training and EMA models, breaking averaging. Keep the strict +expected-failure regression and leave EMA disabled until a separate repair is +qualified; do not infer support from checkpoint restoration alone. -Delivered: a generic export API and `mt_export` CLI with optional dependencies. -The actual evaluation forward is exported without architecture/head allowlists, -including structured and hierarchical outputs, masks, priors and normalized heads. -Dynamic batch parity, caller-state preservation, artifact manifests and standalone -ONNX Runtime inference are checked. See [the export guide](onnx.md) for the input, -preprocessing and score contract, representative coverage and operator limitations. +Extract orchestration from builders/training only when it removes an identified +responsibility conflict or duplication. Preserve public imports, defaults, outputs, +checkpoint formats and errors; separate behavior changes from cleanup. Use existing +CPU training/DDP and checkpoint contracts for cross-cutting changes. -A separate eager-inference fix uses the backbone embedding width before an explicit -hidden layer; a core regression covers vector and singleton-spatial embeddings. +## 3. ONNX export and Hugging Face integration -Acceptance evidence covers CPU float32 on representative offline backbones and all -head families, not every catalog variant or GPU/quantized provider. Preprocessing -remains external and requires a caller-supplied deployment recipe. +The [export guide](onnx.md) owns preprocessing, score and operator contracts. +Current generic evidence covers CPU float32, dynamic batches, head families, +masks/priors and caller-state preservation on representative offline backbones. +GPU/quantized providers and the full architecture catalog need their own evidence. -Then add local Hugging Face bundle preparation: weights/export, manifest, model card, -evaluation summary, and an inference example. Treat Hub artifact hosting and a live -inference service as separate deliverables. Validate a local bundle before adding -explicit upload commands or a serving deployment. +Next: prepare a generic local bundle containing weights/export, preprocessing, +class mappings, immutable provenance, model card, evaluation and an inference +example. Reuse the existing manifest/export boundaries and lessons from MAMBO. +Validate the installed bundle before adding upload commands. Artifact hosting and +a live inference service are separate deliverables; publication is not automatic. ## 4. Training efficiency and augmentation -Delivered: opt-in native CUDA INT8 Linear training, x86 PTQ/QAT inference, -checkpoint/export integration, bounded preparation/normalization storage, and -allocation-aware loader hardening. Defaults remain floating point. EMA is deferred; -native QT DDP/FSDP is unsupported. +Follow the [quantization roadmap](quantization-roadmap.md) for targeted performance +work. Floating-point defaults remain; native QT DDP/FSDP and deeper integer +convolution training are unsupported. Local memory savings do not establish useful +HPC, desktop/Spark or ARM throughput or convergence. -The [quantization roadmap](quantization-roadmap.md) owns remaining performance, -quality and deployment work. [Measured findings](benchmarks.md) distinguish local -memory savings from mixed speed/convergence results; HPC, desktop/Spark and ARM -qualification remain open. AMP, fake quantization and CPU smoke tests do not -complete the deeper quantization objective. +For the next production run, implement the post-mortem's bounded workflow slice: +versioned stage inputs, durable completion/recovery, preflighted evaluation/export, +and distinct compute/storage qualification. Preserve supplied splits and taxonomy. +Demonstrate interruption/resumption without silently repeating completed work. -After quantization, evaluate a task-aware augmentation recipe against the legacy -pipeline. Preserve label semantics, input dtype, optimizer/accumulation/resume -behavior and existing builder extension points. Add loading controls only when -whole-training measurements demonstrate a benefit. - -Acceptance: opt-in supported recipes, reproducible paired quality/resource evidence, -and unchanged default behavior. Use [training feature validation](training-feature-validation.md) -for the deferred optimizer, loss and augmentation comparisons. +Then use the [training feature protocol](training-feature-validation.md) for paired +optimizer, loss and augmentation comparisons. Preserve accumulation, AMP skip, +scheduler and resume semantics. Add loading controls only for an identified +end-to-end bottleneck, not to expand the configuration surface. ### Optional dataset preparation for scalable loading -Target: remove repeated small-file access bottlenecks on shared storage through an -optional preprocessing command that prepares an indexed, sharded dataset for the -existing training and prediction loaders. This is an efficiency representation of -already-supported inputs, not a requirement to migrate source datasets or adopt a -new training API. Keep the public design independent of a particular provider. - -- Reuse the current source/metadata adapters. Cover every currently supported - input, flat and hierarchical labels, multilabel targets, supplied splits, - class ordering and sample identity. Retain lazy loading, inference and supported - single-process/DDP behavior. Define a compatibility matrix before implementation; - do not silently drop cases that are inconvenient for a shard backend. -- Preserve original encoded image bytes by default and apply the existing decoder, - resize, transforms and hooks at loading time. Do not bake stochastic augmentation - into prepared data. Any later materialized-preprocessing option must be explicit, - versioned and checked against the requested runtime preprocessing. -- Store a versioned manifest with source provenance, sample-to-shard index, labels, - splits, class mappings and integrity information. Support bounded, resumable - preparation with atomic publication of completed artifacts and explicit errors - for missing, changed or corrupt samples; never silently skip them. -- Evaluate indexed uncompressed TAR shards before inventing a container format. - Preserve current sampler order and epoch coverage in the first implementation. - Treat locality-aware or streaming shuffles as separate opt-in behavior changes, - with explicit DDP partitioning, equal-step and checkpoint/resume contracts. -- Allow direct reads of prepared shards and optional staging to verified node-local - storage. Share a byte-bounded cache across ranks/workers on each node, coordinate - downloads, protect in-use shards and publish verified cache entries atomically. - Measure cache churn under the actual sampler; packing files alone does not - guarantee efficient random access or eliminate cold-read latency. -- Keep implementation within the existing metadata/reader boundaries, using a - focused preparation/storage module where needed. Expose it through the normal - CLI and Python configuration paths, keep new dependencies optional, and preserve - the original uncached path and defaults. - -Deliver in bounded increments: compatibility fixtures and a preparation/loader -round trip; indexed shards; optional shared local staging/cache. A separate small -loader improvement may add bounded concurrent encoded-byte reads within each -batch, preserving sample order and hook execution without multiplying process-local -metadata. Benchmark that independently of changing storage representation. - -Acceptance: byte-identical decoded inputs for the default representation, identical -labels/splits/class ordering and sampler coverage, supported training/prediction and -DDP restoration checks, corruption/interrupted-preparation recovery, and bounded -memory/disk use. Compare first-pass and repeated-pass end-to-end throughput on a -representative working set, including conversion/staging time, validation and -figures. Report the number of epochs needed to amortize preparation; a warmed tiny -subset is insufficient evidence. Implementation and GPU qualification remain open. +Measure bounded concurrent reads/staging on a representative shared-storage working +set before building shards. Small warm subsets do not predict full-dataset IO. +If preparation is justified, use the existing metadata/reader boundaries and +start with indexed uncompressed TAR rather than a new container format. + +Required contract: preserve encoded bytes, sample identity, supplied splits, +class ordering, multilabel/hierarchical targets and current sampler/DDP coverage. +Apply stochastic transforms at runtime. Use versioned provenance and integrity, +bounded resumable preparation, atomic completion and explicit corruption errors. +Local staging/cache must coordinate ranks, bound disk/memory and protect active +reads. Locality-aware shuffle is a separate behavior change. + +Deliver compatibility fixtures and a round trip, then indexed shards, then optional +shared staging. Compare cold and warm end-to-end training including preparation, +validation and figures; report amortization in epochs. Keep original inputs and +public APIs usable. This remains planned, not an implemented storage backend. ## 5. mini_metrics and continuous model evaluation -Planned target: economical continuous benchmarks with a GitHub audit dashboard. -Connect hosted CPU checks and small, on-demand GPU runs to durable report history -through an independent publisher. Use fixed representative subsets of existing -datasets, preserve supplied splits, and compare baseline/candidate under matching -hardware and workload conditions. Large distributed qualification and production -training remain separately triggered activities, outside the continuous schedule. - -Keep allocation credentials in a trusted controller isolated from candidate code, -pull requests and report publishing. Restrict profiles, revisions, dataset access, -concurrency and allocation duration; enforce a persistent spending budget, reconcile -ambiguous submissions before retrying, and disable automatic time extension. -Provider/account configuration and infrastructure review details remain local. - -Acceptance: dry-run and mocked lifecycle tests cover interruption, duplicate -submission, budget exhaustion and credential isolation before a capped live trial. -Then demonstrate cancellation/cleanup and auditable success, failure and publishing -retry records before enabling a schedule. Missing runs must remain visible; partial -GPU allocations must not imply full-device or distributed performance qualification. -Build on the existing [reporting integration](../dev/benchmarks/reporting.md). - -Document measured effects of MuonAuxAdamW versus AdamW/SGD, `normalized`, -EMLACrossEntropy, class-weight distribution regularization, automatic label smoothing, -and hierarchical versus flat classifiers. Use the same datasets/splits and paired -seeds; retain negative and null results. See the [comparison protocol](training-feature-validation.md). -Optimizer step tracking for AdamW/SGD is now fixed, including native fused AMP skips. -CPU/CUDA regressions preserve scheduler/EMA gating and batch-based EMA indices; -checkpoint continuation is covered for MuonAuxAdamW, AdamW and SGD. Comparative -quality experiments remain planned; EMA itself remains unsupported. - - -Use `publication/experiments/statistics/boot_metrics.py` and prediction CSV output as -the current integration boundary. The adjacent `../mini_metrics` checkout currently -declares Python >=3.13 while mini_trainer supports >=3.12. Resolve this with a separate -evaluation environment or a verified compatible release before adding an extra; -never rely on a sibling checkout being present in installations. - -Define and test the prediction/evaluation contract: sample identity, ground truth, -class order, score meaning, confidence thresholds, missing classes, and hierarchical -labels. Verify installed mini_metrics APIs before writing an adapter. Keep evaluation -optional and preserve existing prediction formats and research scripts. - -Deferred: consolidate flat and hierarchical inference behind one public CLI. -`mt_hpredict` already shares the generic prediction CLI and has an explicit flat -head route; use that existing functionality while training qualification proceeds. -Before refactoring, assess whether stored head/taxonomy metadata can reliably -select the builder and result collector, or whether weights need additional -versioned configuration. Preserve explicit CLI overrides, legacy checkpoints, -existing entry points, class ordering and prediction/mini_metrics output contracts. -Acceptance: installed CLI tests cover flat and hierarchical weights, including -older artifacts with missing metadata and actionable handling of ambiguous cases. -This is not a prerequisite for DDP qualification or the production training run. - -Build the model zoo around versioned manifests linking immutable weights, configuration, -preprocessing, dataset/split identity, code/dependency versions, and evaluation results. -Use fixed held-out data and seeds; distinguish threshold selection from test evaluation. -Add tiny fixture-based contract checks to pull requests, then explicit or scheduled -evaluation of registered artifacts with retained reports and declared regression limits. - -Acceptance: a model artifact can be evaluated reproducibly in a clean environment, -results trace back to exact inputs, and metric changes cannot silently rewrite baselines. +MAMBO has retained quality/threshold/support evidence through `mini_metrics`; +[release evidence policy](../dev/releases/mambo_v3/evidence-policy.md) defines that +campaign's conventions. General training-feature comparisons and continuous GPU +allocation remain separate work. + +Build on [existing benchmark reporting](../dev/benchmarks/reporting.md): fixed +representative subsets, supplied splits, paired seeds and matching measurement +scopes. Keep all metrics and negative results. AdamW/SGD step tracking and AMP-skip +scheduler/EMA gating have regression coverage; comparative quality is still planned +and EMA itself is unsupported. + +Before scheduling on-demand GPUs, qualify an isolated trusted controller with +restricted revisions/profiles, credentials unavailable to candidate code, persistent +spending limits, bounded concurrency/duration and reconciliation before retries. +Mock interruption, duplicate submission and budget exhaustion, then run a capped +live success/failure/cancellation and publishing retry. Missing runs must stay +visible. No automatic allocation extension or full-device claims from MIG results. + +Keep evaluation optional. The recorded `mini_metrics` integration requires Python +3.13 while the trainer supports 3.12; select a compatible evaluation environment +rather than depending on the sibling checkout. Preserve prediction CSV/sample IDs, +truth, class ordering, score/threshold meaning and missing-ancestor semantics. +`publication/experiments/statistics/boot_metrics.py` remains a research integration +entry point. Model-zoo manifests should bind immutable weights, preprocessing, +data/split identity, dependencies and results so new protocols cannot silently +rewrite old baselines. + +Deferred CLI consolidation: `mt_hpredict` already shares the generic prediction +CLI and supports flat heads. Before replacing entry points, qualify metadata-based +builder selection, older weights with missing metadata, explicit overrides and +prediction/metric output compatibility. This is not a production-run prerequisite. ## 6. Additional dataset formats (low priority) -Future ingestion support must cover both training and inference through shared -source adapters. Keep discovery (sample identity, paths, supplied labels and -splits) separate from training partitioning and model-vocabulary indexing. Start -with a compatibility matrix of existing formats and flat/hierarchical/unlabelled -inputs; add formats incrementally without duplicating prediction-only readers. - -Follow-ups identified during the bounded `auto_find_images` review: - -- Clarify `create_taxonomy` / `select_levels`: an integer currently means an - inclusive deepest-rank index, whereas callers such as `create_metadata` pass - `len(cls2idx)` as a count. The inference caller now uses explicit rank indices. - Audit remaining callers before changing the shared signature; test actual rank - selection rather than mocking the whole taxonomy adapter. Separate API/cache - retrieval failures from local rank-selection and mapping errors in diagnostics. - -- Define an explicit input-layout/split policy for ambiguous folder layouts and - reconcile prediction's separate `data_index` and source-selection paths. -- Specify taxonomy provenance and missing-ancestor handling independently of - model vocabulary. Preserve valid species ground truth without treating unknown - ancestors as real unseen classes; cover the collector/mini_metrics contract - before changing the existing GBIF fallback. -- Audit image probing on read-only datasets: `is_image` currently opens files in - `r+b` mode and can silently exclude readable images without write permission. - -The focused discovery fix removes training metadata construction and vocabulary -filtering from folder enumeration; these broader policies remain deferred. - -Add formats through existing metadata and reader boundaries after the higher-priority -interfaces stabilize. Require format-independent class ordering, split handling, -multilabel behavior, lazy loading, and useful errors. Keep format dependencies optional. - -Acceptance: tiny fixtures exercise each new format through training and prediction -without changing existing format detection or defaults. - -Follow-up from candidate-filter inference validation: `classification_module` -caches an empty attribute name when passed a bare classifier head, causing a -subsequent lookup to fail. Normal built backbone models are unaffected. Cover -bare-head lookup separately rather than expanding the class-list CLI change. +Use shared train/inference source adapters and keep sample discovery independent +of model vocabulary and training partitioning. Require tiny round-trip fixtures +for flat/hierarchical/multilabel inputs, lazy loading and supplied splits before +adding a format. Keep format dependencies optional. + +Carry forward these concrete findings; verify their current callers before fixes: + +- `create_taxonomy` / `select_levels` use an inclusive deepest-rank index, while + some callers pass a level count. Audit remaining callers and test actual ranks. +- Ambiguous folder layouts need explicit source/split policy; reconcile prediction + `data_index` and source selection without restoring vocabulary-filtered discovery. +- Missing ancestors need explicit provenance/metric handling; retain valid species + truth without inventing unseen ancestor classes or masking retrieval failures. +- `is_image` opens in `r+b`, potentially excluding readable read-only datasets. +- Bare-head `classification_module` can cache an empty attribute name and fail on + subsequent lookup; ordinary built backbones are unaffected. + +These are recorded follow-ups, not fixes delivered by documentation cleanup. ## Deferred portable prototype viewer completion -The portable-viewer goal was paused for the prototype-coordinate research. The -[bounded study](prototype-coordinate-study.md) is now recorded; viewer completion -remains deferred. Resume the existing implementation; do not restart features already -present in `feature/prototype-browser-inference` (`b174426`). The implementation -plan and acceptance matrix currently live in that branch at -[`docs/prototype-explorer-implementation.md`](https://github.com/asgersvenning/mini_trainer/blob/b174426/docs/prototype-explorer-implementation.md), -with recorded qualification in `dev/prototype_space/portable-qualification.md`. -The versioned `global-lepi-viewer-20260915-rc2` candidate has been published for -manual inspection; candidate publication itself is no longer an outstanding task. - -Remaining TODOs: - -- [ ] Obtain and incorporate human desktop/mobile layout review of the live - candidate. Confirm physical-phone pinch zoom, camera capture, EXIF orientation, - large-image handling and actionable unsupported-format errors. Existing browser - checks are not a substitute for physical-device acceptance. -- [ ] Finish review and integration of PR #3 against the then-current master; - resolve review findings and validate only the affected combined behavior. -- [ ] Reconcile the implementation-plan status and qualification record with the - delivered candidate, actual review outcomes and any externally blocked checks. - Publish a new versioned candidate only if review requires changes; preserve the - original public production release. -- [ ] Preserve the single model-scoped GBIF setting, shared client-side GBIF - names/photos, attributed prediction thumbnails and Explore/Predict/Settings - organization. These are implemented on the feature branch, but their acceptance - and integration remain part of completion. -- [ ] Preserve class identity/order, numerical behavior, saved-view compatibility - and fixed-map t-SNE query placement through integration. Keep static hosting - independent of a Python/proxy taxonomy service. - -Use the existing architecture unless a framework has a demonstrated usability or -maintenance benefit with an explained migration cost. This deferred increment -must not change training/inference semantics or introduce new geometry. Broader -browser support and more complete cached taxonomy/media remain separate roadmap -work, not additional completion gates for this increment. +Resume the existing `feature/prototype-browser-inference` implementation rather +than rebuilding it. The recorded candidate is `global-lepi-viewer-20260915-rc2`; +[plan at b174426](https://github.com/asgersvenning/mini_trainer/blob/b174426/docs/prototype-explorer-implementation.md) +and its branch's `dev/prototype_space/portable-qualification.md` retain acceptance +criteria. Reconcile current PR #3/branch state before resuming; historical publication +does not establish present integration status. + +Remaining acceptance: human desktop/mobile review and physical-phone pinch zoom, +camera capture, EXIF, large images and actionable format errors; resolve findings +and validate integration against current master. Preserve GBIF settings/names/photos +and attribution, Explore/Predict/Settings organization, class identity/order, saved +views and fixed-map t-SNE placement. Keep static hosting independent of a Python +service. Publish a new inspection candidate only if review requires changes. + +The [prototype-coordinate study](prototype-coordinate-study.md) is separate +research evidence; its conclusions do not authorize new geometry or changes to +training/prediction semantics during viewer completion. diff --git a/docs/training-workflow-postmortem.md b/docs/training-workflow-postmortem.md index 67ec9fc..e456219 100644 --- a/docs/training-workflow-postmortem.md +++ b/docs/training-workflow-postmortem.md @@ -1,392 +1,137 @@ -# Production training workflow: post-mortem and next-run plan - -Status: proposed development plan; no implementation is authorized by this document. -Campaign: 10–11 September 2026. The quant branch has since been merged into master. - -## Executive assessment - -The campaign produced a useful model, completed four-GPU training with figures and -W&B, evaluated in-domain and independent expert data, exported floating and PTQ -ONNX artifacts, and packaged the evidence with verified checksums. The original -objective of faster, memory-efficient fully quantized training was not established. -These are separate outcomes: merging useful improvements does not qualify every -experimental backend or prove absence of regressions against a full master run. - -The largest opportunity for the next run is operational reliability and data access, -not another optimization matrix. Small warmed trials selected a viable compute -configuration but substantially underestimated first-pass storage costs. Repeated -manual handoffs, opaque status and late preparation of evaluation/export consumed -scarce allocation time. Preserve the flexible CLI/API design and human decisions; -make the routine steps repeatable, inspectable and recoverable. - -This assessment uses the operator-provided logs, metric tables and command results -from the campaign, checked against the current repository interfaces. It is not an -independent audit of the downloaded archive or a replay of the experiments. The -archive checksum was reported as passing. Its final public URL and immutable model -hashes must be attached when available; do not invent them from version names. -Older notes that say production was incomplete, or retain four loader workers as -the production setting, are superseded by this campaign evidence. - -## Outcomes and strength of evidence - -| Area | Observed result | What it establishes / does not establish | -| --- | --- | --- | -| Production | EfficientNetV2-S, normalized hierarchical head, size 384; 4 full B200 GPUs; batch 256/rank; FP16 AMP; model compilation; 32 loader workers/rank in the successful run | A functional recipe on this allocation, not an optimum across precisions, machines or models | -| Optional features | Optimizer compilation, explicit CUDA prefetch, INT8 training and EMA disabled | Deliberate scope reduction; EMA and native INT8 DDP remain unsupported | -| Training | 30 epochs, 17:34:23 total; training 16:27:22, evaluation timer 43:33; best model reported at epoch 30 | Finished within allocation; phase timers do not cover every logging/teardown cost | -| Final metrics | Train species micro accuracy 98.1645%; validation species/genus/family 94.2353% / 97.6693% / 99.5047%; finite recorded losses | Strong completed-run result; not a controlled comparison with the old master model | -| In-domain test | 632,913 images; baseline micro accuracy 94.21% / 97.64% / 99.50%; macro accuracy 92.94% / 97.00% / 98.48% | Test agrees closely with validation; no dataset-leakage audit was completed here | -| Expert test | 58,640 images, 522 species; baseline species micro accuracy 57.59% all labels, 66.74% known only | Substantial domain/vocabulary shift remains despite strong in-domain results | -| Figures/W&B | Full-head diagnostics and distributed logging completed throughout production | Required product functionality worked; cost and summary semantics still need improvement | -| Resume probe | All 4 ranks reported identical checkpoint hash, start epoch 3 and restoration of model/optimizer/scheduler/scaler | Controlled restoration worked; arbitrary interrupted stochastic continuation is not proven bit-exact | -| FP32 ONNX | Dynamic batches 1, 2, 4 passed at rtol=1e-4, atol=1e-4; largest observed absolute error 3.84e-5 | Synthetic-input numerical parity, not real-image end-to-end parity or target-GPU performance | -| ONNX PTQ | 128 training images; Percentile 99.9; Q/DQ graph validation and finite runtime smoke passed | Quantized ONNX artifact exists; retained quality and native integer execution remain unqualified; no quantized .pt was created | -| Retention | 23.71 GiB before ZIP; ZIP integrity check and subsequent archive checksum passed | Evidence was preserved; size, discoverability and clean-environment reuse need refinement | - -### Allocation timeline and where time was exposed - -The four-GPU allocation began around 17:24. The successful production training -started around 19:01 (inferred from the final duration), about 97 minutes later. -Training finished around 12:35 the following day; test inference was reported -complete at 16:11, evaluation output around 16:44, and archive verification at -17:13, shortly before the 17:24 expiry. These are operational timestamps, not a -profile attributing every minute to a specific component. Qualification had value; -not all of this interval was avoidable waste. Nevertheless, hours of post-training -storage/evaluation and last-minute packaging were clearly on the critical path. - -The reported source split contained 5,063,857 training images, 633,224 validation -images and 632,913 test images. Thirty training epochs divided by the reported -training timer imply about 2,564 images/s aggregate, or 641/rank, consistent with -the observed roughly 650 training images/s/GPU. Use the training split rather than -all six-million-plus source rows for runtime planning, and budget validation and -diagnostics separately. This cross-check also illustrates why units belong in the -report rather than being reconstructed from ETA afterward. - -### Compute selection: useful, but deliberately bounded - -Reported aggregate warmed training throughput from four-GPU qualification: - -| Batch per GPU | Images/s | Peak allocated bytes per reported maximum | Peak reserved fraction | -| --- | ---: | ---: | ---: | -| 32 | 1,059.648 | 8,332,350,464 | 0.059 | -| 64 | 1,741.601 | 15,640,267,776 | 0.098 | -| 128 | 2,272.305 | 30,251,580,416 | 0.178 | -| 256 | 2,517.928 | 59,508,456,960 | 0.324 | - -Increasing batch 128 to 256 gained about 10.8% throughput with nearly twice the -allocated memory. Larger batches were not exhaustively tested. Spare memory is an -opportunity, not evidence that a further increase pays off. Use equal-memory-budget -and time-to-quality comparisons where appropriate, not just equal batch size. -Changing global batch also changes optimizer updates per epoch and schedule behavior. -The qualitative impression of improved prototypes/generalization at larger batches -is useful feedback, not a controlled convergence result. - -Earlier single-GPU trials repeatedly found model compilation reduced later-epoch -training time by roughly one third and allocated memory by roughly one third. -Optimizer compilation alone or combined with model compilation did not improve -those steady-state timings and added substantial cold startup. Explicit prefetch -showed no convincing additional gain. INT8 combined runs timed out and were not -qualified. Keep these negative results so that the next run does not repeat the -same matrix without a new hypothesis, implementation change or target requirement. -FP16 is the tested baseline; BF16 and other compiler modes were not eliminated by -a comprehensive comparison. - -## Failure modes and lessons - -### 1. Storage behavior invalidated small-subset extrapolation - -Full-data training and test inference initially stalled while data workers had low -CPU use and waited in `D` state / `folio_wait_bit_common`. A 32-step storage window -spent about 146–150 of 211 seconds waiting for the loader across ranks. Test -inference reached only 69/2,473 batches after 43 minutes. GPU utilization snapshots -sometimes looked high despite poor progress; they did not identify the bottleneck. - -The mounted filesystem was WEKA. Repeated reads of the same expert subset went -from hundreds of seconds to below one second. The operator observed improved cold -staging with 512 readers, and a later disjoint-sample read sweep favored 512 readers -(~117 images/s confirmation median) over lower concurrency. Another workload with -larger files provisionally favored 64. These are workload/cache-state results, not -universal worker defaults. Strong evidence supports cache-state-dependent storage -latency; the exact client/server cache or network mechanism was not instrumented. - -The successful production run used 32 loader workers/rank and eventually stabilized -near 650 training images/s/GPU and 2,000–2,500 evaluation images/s/GPU. The long -warmup within the run supports a cache-related explanation; it does not quantify a -separate causal percentage for each storage/concurrency effect. Practical mitigation -need not wait for a filesystem-internal diagnosis. - -Lessons: - -- Separate process workers for decode/augmentation from concurrent outstanding - encoded-byte reads. More processes are not the only way to hide blocking I/O. -- Measure first-pass and repeated-pass behavior. Disjoint paths avoid direct sample - reuse but cannot guarantee cold shared caches. Never drop global caches on a - shared allocation to manufacture a benchmark. -- Start with bounded but genuinely high concurrency candidates when latency is - evidenced; do not spend the allocation creeping from 4 to 8 to 16 threads. -- Separate reader startup, first result, steady work and drain/cancellation time. - Time-limited trials can be informative without completing their target file count. -- Report images/s and bytes/s, file-size distribution, errors, actual concurrency - and sample coverage. A sampled optimum is a provisional operating point. -- Prefer optional staging/encoded-byte preparation. Decoded caching of millions of - images is not a safe default even on a high-RAM node. - -### 2. Orchestration was too easy to interrupt and too hard to resume - -Examples included relative commands launched from the wrong directory, missing -inference YAML files, torchrun interpreting `--run` as its own abbreviated option, -preparation tied to historical commits, and cancelled stages refusing an existing -directory. A trial had final weights and finite metrics but was marked timed out -when the shared wall budget expired. This is neither evidence of failed training -nor permission to relabel the whole process successful: export, logging, teardown -or restore checks may still be incomplete. - -The package pin and checkout revision sometimes differed intentionally, while -`PYTHONPATH` overrides added a third possible source identity. Hand-built commands -made that hard to see. The late archive command also lost its terminal connection; -file descriptors could not recover previously lost stdout. Durable files and a -completion checksum, rather than terminal appearance, ultimately established success. - -The necessary response is a small extension to existing harness state and commands, -not a general workflow engine. Record phase completion separately from process exit, -retain partial results, and make retry/resume/archive-incomplete actions explicit. -A checkpoint's existence is not a replacement for a loss audit or clean shutdown. - -### 3. Qualification tested the right features, but not early enough in combination - -Figures were initially disabled to avoid expensive rendering, although they were a -required training diagnostic. At larger taxonomy size the dendrogram caused long -validation pauses and recursion warnings. Confusion/dendrogram improvements allowed -production diagnostics to remain on: at 12,632 species, confusion generation was -about 8–13 seconds and warmed dendrogram rendering about 12–13 seconds. First label -resolution added roughly a minute in one run; subsequent resolution was much faster. - -Whole-matrix confusion patterns and prototype organization matter to the operator. -Do not replace them with a few selected classes or disable them as the standard -performance fix. Preserve visual interpretation while bounding file/display costs. -Which hierarchy levels render must be an explicit option recorded in the resolved -configuration; the unexpected level-0-only output showed that defaults were opaque. - -The production smoke should exercise the actual CLI, full head dimensions, figures, -W&B, validation and save/reload on the intended topology. A small subset tests those -contracts; a separate bounded storage probe tests uncached access. Neither replaces -the other. Four GPUs passing does not establish eight-GPU behavior. - -### 4. Numerical and compiler warnings need a triage budget - -Early validation loss NaNs appeared in both branch baselines and optional-feature -runs; later epochs could be finite and the final production loss audit passed. -This weakens attribution to prefetch or quantization but does not prove the NaNs -were harmless. Keep a cheap first-occurrence record: phase/batch/sample identities, -input/output/loss finiteness, dtype and enabled features. Capture a bounded replay -only when triggered; avoid a permanent expensive debug path. - -Observed compiler issues were stochastic-depth specialization/recompile limits, -hierarchy initialization using `Tensor.item()`, and DDP gradient/bucket stride -mismatches. They are performance targets, not demonstrated model-quality failures. -Prioritize a change only after a representative trace shows repeated fallback, -recompilation or copy cost. Do not globally raise limits, suppress warnings or change -numerics merely to make the log clean. Keep EMA repair outside the next-run critical -path unless the operator explicitly needs EMA. - -### 5. Inference ingestion and evaluation preparation lagged behind training - -Folder inference unnecessarily depended on training-oriented index construction -and model-vocabulary membership. Valid expert species could be absent from the -model. A taxonomy rank-count/index mismatch was initially plausibly attributed to -network resolution. The bounded discovery fix was useful; broader ingestion should -keep discovery, taxonomy resolution, split policy and model indexing separate. - -A model-vocabulary filter restricts candidate predictions, not the validity of -ground-truth labels. Future source formats must reuse this separation for both -training and inference. External taxonomy access needs cache/provenance and clear -transport-versus-local-mapping errors; a hardcoded socket timeout is not a batch -or job deadline. - -Inference should normally require input, output and weights. Derive shape, -preprocessing and head/collector behavior from saved metadata, with explicit -operator overrides and actionable errors for ambiguous legacy metadata. Generate -resolved config for inspection; do not fill YAML with guessed defaults. - -Staging eventually made expert inference finish in 2:49 and full test inference in -30:02, after slow source reads had dominated. Prepare the evaluation plan before -training and overlap independent preparation where resource budgets allow. Do not -launch competing cold scans blindly. Pin mini_metrics in its own compatible Python -environment and preserve its pretty tables plus machine-readable outputs. - -### 6. Evaluation success and deployment readiness are different gates - -The expert set's 16 unseen species accounted for 8,042 images (13.71%) and errors; -five of those species contributed 84.3% of unseen-species errors. Error concentration -also existed among known species. This supports the operator's interpretation of -uneven domain/vocabulary effects. Geographic candidate lists are promising opt-in -priors, but their provenance/scope and excluded true labels must remain visible. -No regional-filter accuracy gain was established in the supplied results. - -Retain all-label/known-only and unfiltered/threshold-optimized reports. Clarify -micro versus macro, rank, aggregation period and abstention denominator. In-domain -optimized species accuracy was 95.73% at 97.46% coverage; expert known-only optimized -species accuracy was 92.25% at 53.66% coverage. These are not equivalent operating -points. Threshold search/split semantics and the distinction between an applied -threshold and a subsequently reported optimum must be documented before rollout. -Choose deployment thresholds using suitable calibration data and evaluate them -frozen; current optimized test reports remain exploratory. Empty-abstention summary -NaNs are distinct from nonfinite model outputs or loss. - -FP16 AMP training did not imply an FP16 ONNX export. FP32 export required an explicit -absolute-tolerance adjustment after small near-zero discrepancies; tolerances and -errors were retained. Do not silently weaken defaults. Add real-image parity and -rank/top-k changes alongside absolute errors, with predeclared acceptable limits. -PTQ happened directly on ONNX, so no quantized PyTorch artifact exists. Q/DQ node -counts and runtime loadability are not proof of integer kernel placement, target -speed or retained accuracy. These must be separate candidate acceptance checks. - -### 7. Packaging worked, but happened too late and bundled too much together - -The verified archive preserved a large set of results, logs and figures. Packaging -was improvised near expiry, and the chosen public bundle also contained a resume -checkpoint and extensive history. Use one relocatable directory but distinguish a -small deployment subset, reproducibility evidence and optional training archive. -Never omit ONNX external tensors. Retain omissions in the manifest; calibration -manifests referring to omitted tensors must not imply self-contained replay. - -A publication command should inventory intended files, sizes and public/private -scope before copying; omit credentials, caches and raw training images by default. -Record package revision, harness revision, weights hash, splits, preprocessing, -class mapping, evaluation versions, export tolerances and target qualification. -Write logs to disk from process start and publish completion atomically. Checksums -establish integrity, not accuracy, data provenance or deployment correctness. - -## Prioritized development plan - -Effort below is a planning estimate for implementation plus focused validation, -not a promise: S = roughly 1–2 developer days; M = several days; L = one or more -weeks with integration work. Re-estimate after inspecting the existing boundary. -Prefer the smallest vertical slice that removes an observed failure. - -| Priority | Increment | Value / effort | Done when | -| --- | --- | --- | --- | -| P0 | Durable stage state and resolved execution plan | High reliability, S–M | A fresh job can inspect, run, stop, retry and resume each existing stage; logs survive disconnect; completed stages are reused only after input/hash validation | -| P0 | Prepare evaluation/export/publication before allocation | High saved allocation time, S–M | One tiny installed-CLI fixture runs train → predict → metrics → export → package; commands, required paths and dependencies are checked before expensive work | -| P0 | Separate compute qualification from storage qualification | High decision value, S | A compact report distinguishes startup, warm training, first-pass I/O, validation/figures and teardown; it states scope and units and supplies a bounded next action | -| P1 | Reusable concurrent read/staging calibration | High on affected storage, M | Startup and work budgets are separate; incomplete trials remain informative; bounded cancellation/recovery, disjoint sampling, file sizes and actual concurrency are reported; operator override survives | -| P1 | Optional prepared encoded-byte dataset round trip | Potentially high recurring gain, L | Existing input compatibility matrix and sampler/DDP contracts pass; end-to-end savings exceed preparation/maintenance cost on representative data | -| P1 | Real-image export and candidate evaluation | High rollout confidence, M | Same preprocessed held-out inputs compare PyTorch, floating ONNX and optional PTQ; score/rank changes, quality, coverage, placement and target resource evidence are retained | -| P2 | Figure/metadata caching and explicit figure policy | Medium operational gain, S–M | Whole-matrix diagnostics and requested hierarchy levels remain inspectable; first/warm rendering and file sizes are recorded without repeated taxonomy resolution | -| P2 | Targeted compiler/numerical fixes | Conditional gain, M per demonstrated issue | A bounded reproducer demonstrates the cost/failure and a paired check verifies the fix without changing checkpoint or prediction contracts | -| Deferred | Native INT8 DDP, EMA, expanded precision/compiler matrices, automated allocation, universal inference CLI | Uncertain value, M–L | A concrete requirement or measured bottleneck justifies a separately reviewed experiment; none blocks the baseline run | - -### A. Next-run minimum: complete the P0 vertical slice first - -Build on `dev/ucloud/{setup.sh,compare.py,scaling.py,production.py}`, the evaluation -scripts and existing ONNX tools. Do not replace the public training/inference APIs. -A small shared run manifest should reference existing stage outputs rather than -copy their schemas into another database. Record stage input identities, resolved -command/config, start/end, output/log paths, exit cause and completion checks. -Differentiate preparation, compilation, training, validation/figures, checkpoint, -logger synchronization and teardown. Start with phases that are already observable. - -Use absolute paths in generated commands, explicit interpreter selection, package -and harness identities, and inspected CLI-over-YAML precedence. Keep W&B's existing -interactive authentication in the foreground. No secrets in manifests. Pin an -accepted master revision; do not embed a permanent dependency on the old quant -branch name or four-GPU topology in otherwise reusable planning helpers. - -Define an allocation deadline separately from stage limits, compilation allowance -and cleanup reserve. Human pauses consume allocation time but must not masquerade -as model regressions. Estimate feasible epochs from measured full-data throughput, -actual training split count, validation cost and reserve; do not silently alter the -learning-rate schedule to fit. At a supported checkpoint boundary, give the operator -an explicit continuation/stop decision. Do not promise exact arbitrary-batch resume -without the necessary RNG/sampler contract. - -Acceptance should include interruption after preparation, failed child exit, timeout -after checkpoint save, logger teardown failure and re-running a completed stage. -Use tiny fixtures and existing integration tests, not a second production matrix. -A single topology smoke on a changed target remains necessary. - -### B. Storage work: validate the cheap mitigation before building shards - -First improve the existing calibration/staging helper and, if needed, add bounded -encoded-byte read-ahead inside the current reader boundary. Bound requests and -bytes, preserve sample order, propagate failures with identities, and avoid repeating -large Python metadata per reader. Do not conflate read concurrency, DataLoader -processes and CUDA prefetch. Keep direct filesystem loading available. - -Only then implement the optional prepared-data backend already specified in the -[main roadmap](roadmap.md#optional-dataset-preparation-for-scalable-loading). -Start with byte-preserving indexed shards and explicit manifests. Defer distributed -cache eviction services and alternative shuffle policies until measured need. -Prepared formats must support all existing cases or explicitly remain an opt-in -partial prototype; they must never silently redefine splits, labels or sample order. - -Decision rule: report total preparation plus expected training/evaluation time and -break-even reuse count. Prefer a modest throughput gain delivered simply over a -complex backend that saves less than its preparation cost for the intended run. -Higher-concurrency staging may be enough for an immediate run; repeated campaigns -on the same corpus strengthen the case for persistent preparation. - -### C. Keep human decisions first-class - -The proposed workflow exposes `plan`, per-stage execution, compact `status`, and -explicit retry/resume actions; exact command spelling is an implementation choice. -Each stage can still be run through the normal CLI. The human can inspect figures, -change a proposed batch/worker count, select a candidate, pause or reject promotion. -Changes produce a new resolved configuration and identity; completed unrelated -stages are retained rather than overwritten or automatically rerun. - -Operator decisions are required at scientific boundaries: dataset/split choice, -global batch and schedule, geographic priors, thresholds, acceptable PTQ quality -loss and production promotion. Routine bounded retries and report generation do -not require repeated permission prompts. Do not turn every warning into a blocker. -Expose reason, scope and recovery command when intervention really is required. - -The next-run sequence is: prepare the plan and tiny end-to-end fixture before -allocation; inspect the actual node/storage; perform one production-feature smoke -and bounded storage calibration; choose a batch using existing evidence plus at -most a few useful candidates; verify save/reload; launch production in the same -allocation; evaluate and export at completion; finalize durable artifacts. Preserve -manual allocation and permit an explicit decision to skip optional experiments. - -## Experiment and validation budget - -- Every experiment states the decision it changes, baseline, measurement scope, - maximum elapsed/allocated GPU time, and stop criterion before launch. -- Reuse the qualified floating recipe unless hardware, code or workload changes - invalidate it. Run a full old-master training comparison only as a separately - funded scientific question, not a prerequisite for ordinary deployment. -- For the first batch/worker search, set a small candidate budget. Stop when gains - are within observed noise or too small to affect run completion. Expand only with - evidence and an operator decision; do not exhaust a Cartesian product. -- A single null measurement is not proof of equivalence. Repeat only close decisions - or unexpected failures that matter; multiple seeds are for quality claims, not - every operational smoke. Keep sample-cache caveats in the report. -- Preserve figures and W&B in qualification. Report end-to-end time as well as - compute-only timing so optimizations cannot hide costs in validation or shutdown. -- Default PR checks should exercise contracts with tiny fixtures. Report test - durations, consolidate duplicated behavior checks, and reserve real-backbone, - GPU, full-scale storage and performance experiments for the relevant changes. - Do not weaken numerical assertions simply to get green CI. -- Continuous benchmarks should use small representative jobs, not large nodes. - Allocation credentials remain separate from candidate code and publishing; - automatic cloud provisioning is not part of this next-run plan. - -## Success criteria and deliberately open questions - -The next campaign should require no hand-edited browser YAML, no reconstruction of -missing commands from chat, and no ambiguity about which stage finished. It should -produce a usable selected-model bundle even if optional PTQ or an upload fails. -Measure operator interventions, allocation time before first productive training, -first-pass/warm throughput, evaluation turnaround, failed/repeated stages and final -artifact size. Set concrete budgets from the next dataset/node plan; the current -record does not support a universal target percentage or preparation-time guarantee. - -Still open: unbiased convergence comparisons across batch sizes/precisions; exact -resume semantics under stochastic training; real-image exported-model parity; -PTQ quality and target performance; deployment threshold policy; regional prior -provenance; whether storage preparation amortizes for the next corpus; and the -published immutable artifact URL. None should be reported as solved by this plan. - -The existing [quantization roadmap](quantization-roadmap.md) remains the specialist -backlog for quantized performance and deployment work. This document supplies the -operational order for the next production campaign, not a competing feature matrix. +# Production training: evidence and next-run priorities + +Campaign: 10–11 September 2026. This is a historical assessment and proposed +workflow work, not implementation authorization. The quantization code is now +merged. Later MAMBO deployment qualification is recorded in the +[release handoff](../dev/releases/mambo_v3/final-qualification.md); its quality, +regional-list and threshold evidence supersedes the preliminary deployment +questions raised during training. + +## What completed + +| Evidence | Result and limit | +| --- | --- | +| Production recipe | EfficientNetV2-S, normalized hierarchical head, input 384; four full B200s, batch 256/rank, FP16 AMP, model compilation and 32 loader workers/rank. Optimizer compilation, explicit CUDA prefetch, INT8 training and EMA were off. | +| Training | 30 epochs in 17:34:23; training timer 16:27:22, evaluation timer 43:33; best epoch reported as 30. Timers omit some logging/teardown. | +| Quality | Validation species/genus/family micro accuracy 94.2353% / 97.6693% / 99.5047%, finite final losses. Preliminary test results agreed closely; expert data showed substantial domain/vocabulary shift. Use the [current deployment evidence](mambo-deployment-evidence.md) for comparisons. | +| Resume | Four ranks agreed on checkpoint hash, start epoch 3 and restoration of model/optimizer/scheduler/scaler. This is controlled restoration, not bit-exact arbitrary stochastic continuation. | +| Export | FP32 ONNX synthetic batches 1/2/4 passed at rtol/atol 1e-4, maximum absolute error 3.84e-5. ONNX PTQ used 128 training images and Percentile 99.9; graph/finite-output smoke passed, without establishing integer placement or quality. No quantized `.pt` was created. | +| Diagnostics/retention | Figures and W&B ran throughout production; 23.71 GiB before ZIP, reported ZIP integrity and archive checksum passed. | + +Source: operator-provided campaign logs, tables and command output, not an +independent archive replay. Do not infer exact training source or model identity +from branch/version names; the later model card records remaining provenance gaps. +Successful floating training did **not** establish the original fully quantized +training objective or a controlled regression comparison against master. + +The source splits contained 5,063,857 training, 633,224 validation and 632,913 test +images. Training count × 30 / training timer implies roughly 2,564 images/s +aggregate (641/rank), consistent with observed ~650/rank. Budget validation and +diagnostics separately rather than using the total source-row count as epoch size. + +## Lessons that change the next run + +**Prepare the whole workflow before allocation.** The successful training started +about 97 minutes after allocation began. It finished around 12:35 the next day; +test inference completed at 16:11, metrics around 16:44 and archive verification +at 17:13, shortly before 17:24 expiry. These timestamps locate critical-path costs, +not a causal profile or proof that all qualification time was waste. + +Commands were vulnerable to wrong working directories, missing YAML, torchrun +argument parsing, mixed checkout/package/PYTHONPATH identities and refused retries +into partial directories. One stage had weights/finite metrics but timed out during +remaining work. Record phase completion separately from process exit; a checkpoint +alone does not prove clean logger/export/teardown completion. Logs and atomic +completion records must survive terminal loss. + +**Separate storage latency from compute.** Cold workers waited in `D` state / +`folio_wait_bit_common`; one 211-second window spent 146–150 seconds waiting for +input, and initial test inference reached only 69/2,473 batches after 43 minutes. +Repeated reads of an expert subset fell from hundreds of seconds to below one +second on WEKA. A disjoint-sample sweep favored 512 readers (~117 images/s median +confirmation); a larger-file workload provisionally favored 64. These are evidence +for latency hiding and cache sensitivity, not universal reader defaults or a +filesystem-internal diagnosis. + +Production eventually stabilized near 650 training and 2,000–2,500 evaluation +images/s/GPU with 32 loader workers/rank. After staging, expert inference finished +in 2:49 and full test inference in 30:02. Separate encoded-byte read concurrency +from decode processes and CUDA transfer. Try meaningfully high bounded concurrency +when latency is evident, retaining errors, bytes, file sizes, sample coverage and +startup/drain costs. Disjoint paths are not guaranteed cold shared-cache data; +never clear shared caches to manufacture a benchmark. + +**Use the qualified floating compute baseline.** Four-GPU warmed qualification: + +| Batch/rank | Aggregate images/s | Peak allocated bytes (reported maximum) | +| --- | ---: | ---: | +| 32 | 1,059.648 | 8,332,350,464 | +| 64 | 1,741.601 | 15,640,267,776 | +| 128 | 2,272.305 | 30,251,580,416 | +| 256 | 2,517.928 | 59,508,456,960 | + +128 → 256 gained ~10.8% throughput for nearly twice the allocation. Spare memory +invites a bounded test, not an assumption that larger global batches preserve +updates/schedule or improve convergence. Earlier single-GPU model compilation +reduced later-epoch time/allocation by roughly a third; optimizer compilation added +startup without steady-state gain, explicit prefetch had no convincing gain, and +combined INT8 runs timed out. Preserve these negative results; repeat only for a +changed mechanism/target. FP16 was tested, not proven superior to all BF16 recipes. + +**Qualify required diagnostics and lifecycle together.** At 12,632 species, +confusion generation took ~8–13 s and warmed dendrogram rendering ~12–13 s; first +label resolution took roughly a minute in one run. Keep full-head figures and W&B +in the topology smoke, along with validation and save/reload. Preserve whole-matrix +inspection and explicit hierarchy-level selection instead of disabling useful +figures. A separate storage probe answers cold-IO questions. + +**Triage warnings without expanding the campaign.** Early loss NaNs occurred in +both baselines and optional-feature trials; the final production audit was finite. +That weakens feature-specific attribution without proving harmlessness. Capture +first occurrence with sample/phase, dtype, features and finiteness; trigger bounded +replay only when needed. Compiler specialization, hierarchy scalar extraction and +DDP stride warnings merit changes when traces show meaningful repeated cost, not +simply to clean logs. EMA repair is separate work. + +**Keep inference and packaging responsibilities clear.** Discovery must not filter +truth by model vocabulary or depend on training partitions. Distinguish taxonomy +transport failures from rank/index mapping errors. Derive inference configuration +from weights where reliable, with explicit legacy overrides. Preflight the metrics +environment and export tools before training; overlap independent preparation within +resource budgets. Package a small deployment subset separately from evidence and +optional resume history, retaining ONNX external tensors and explicit omissions. +Checksums establish integrity, not quality or complete provenance. + +## Next-run minimum (planned) + +Build on existing `dev/ucloud` setup/comparison/scaling/production helpers and normal +CLIs. Use a small manifest referencing current outputs, not a new workflow engine. + +1. **Durable state/recovery:** resolved absolute commands, interpreters, package and + harness identities, input hashes, stage times/logs, exit cause and completion + checks. Reuse finished stages only when identities match; retain partial evidence. +2. **Preallocated preparation:** a tiny installed train → predict → mini_metrics → + export → package fixture verifies dependencies and paths before renting GPUs. + Keep W&B authentication interactive and secrets out of manifests. +3. **Separate qualification:** report startup, warm training, first-pass IO, + validation/figures and teardown. Use one relevant topology smoke plus bounded + storage calibration. Distinguish allocation deadline, stage limits and cleanup + reserve; preserve the configured learning-rate schedule. + +Acceptance includes interruption after preparation, failed child exit, timeout +after saving, logger teardown failure and completed-stage reuse. Keep normal CLI +execution, inspectable plans/status, explicit retry/resume, operator batch/worker +choices and a supported-checkpoint stop/continue decision. Do not promise +arbitrary-batch exact resume without RNG/sampler state. + +Next, improve bounded read/staging calibration. Only build the +[optional prepared dataset](roadmap.md#optional-dataset-preparation-for-scalable-loading) +when total preparation plus expected reuse pays off. Preserve bytes, labels, +splits/order and failures; do not silently turn a partial prototype into the default. + +Measure operator interventions, time to productive training, cold/warm throughput, +evaluation turnaround, repeated/failed stages and artifact size. Use tiny fixtures +for workflow contracts and target runs for hardware claims. Expand experiments only +when they change a decision; a production matrix is not a default test suite. +Unresolved PTQ/native integer and target-performance work belongs in the +[quantization roadmap](quantization-roadmap.md), not this operational plan. diff --git a/tests/README.md b/tests/README.md index 2c9e036..b503f01 100644 --- a/tests/README.md +++ b/tests/README.md @@ -16,6 +16,7 @@ optional dependencies, expected failures or slow-backbone requirements. | `export/` | ONNX export and native-quantized export contracts | | `integration/` | Full training, lazy data and distributed integration | | `benchmarks/` | Dataset/evaluation orchestration, inference probes, provenance and report storage | +| `releases/` | Deployment adapters, presets, streaming ownership, campaign evidence and packaging | | `logging/` | Console, TensorBoard and W&B logging | | `utils/` | General device/plot helpers and the opt-in compatibility utility | From b82f5244f46648ce2e8e09e466e246cabf34e48c Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 18:36:50 +0200 Subject: [PATCH 101/221] agent: retire completed handoffs and curb documentation duplication --- .agents/README.md | 22 +++++--- .../notes/2026-09-09-quantization-cleanup.md | 39 ------------- .agents/notes/2026-09-10-agent-workflow.md | 55 ------------------- .../notes/2026-09-10-repository-migration.md | 53 ------------------ .agents/notes/README.md | 51 ++++++----------- .agents/rules/code-contribution.md | 13 +++++ 6 files changed, 43 insertions(+), 190 deletions(-) delete mode 100644 .agents/notes/2026-09-09-quantization-cleanup.md delete mode 100644 .agents/notes/2026-09-10-agent-workflow.md delete mode 100644 .agents/notes/2026-09-10-repository-migration.md diff --git a/.agents/README.md b/.agents/README.md index e280d06..43de88f 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -49,11 +49,17 @@ from file paths, independently of the message prefix. See ## Maintenance -Use the [note format](notes/README.md). Maintain one note per coherent topic, with -an explicit status and last verification date. When work finishes, close or -supersede the note and promote developer-relevant conclusions to their canonical -docs. Remove obsolete duplication; Git preserves history. No session-by-session -journal, parallel roadmap or automatic archive tree is required. - -Existing developer roadmaps, benchmark evidence and execution plans remain where -they are. Being produced by an agent does not make them agent-only documentation. +Keep one maintained home for each contract, procedure, result and backlog item. +Update that section when evidence changes instead of appending another dated fix +or campaign recap. Link from indexes rather than copying explanations or tables. +Developer documents stay in `docs/`/`dev/`; authorship does not make them agent notes. + +Use [handoffs](notes/README.md) only for unresolved cross-session work. On completion, +promote useful conclusions and remove redundant notes; Git is the history. Retain +raw evidence, provenance and consequential negative results where reproducibility +needs them, without duplicating every experiment's presentation in maintained docs. +Before retiring a page or figure, check inbound links, generators and release assets. + +A new document needs a distinct audience/purpose that an existing page cannot serve. +Prefer a concise update or link. Cleanup should improve decisions and findability, +not merely minify text or relocate it into another archive tree. diff --git a/.agents/notes/2026-09-09-quantization-cleanup.md b/.agents/notes/2026-09-09-quantization-cleanup.md deleted file mode 100644 index 9bf7912..0000000 --- a/.agents/notes/2026-09-09-quantization-cleanup.md +++ /dev/null @@ -1,39 +0,0 @@ -# Quantization cleanup handoff - -Status: completed -Updated: 2026-09-10 -Scope: local quantization evidence retained after the 2026-09-09 cleanup -Related: [artifact restore guide](../../docs/quantization-artifacts.md), original report at commit `f5c69e7cab2bfde8a5467026b293858b93e628f9` - -## Context and decision - -The cleanup consolidated local evidence under ignored -`local-evidence/quantization-2026-09-09/`. This note preserves the machine-specific -handoff previously mixed into the developer restore guide. Migration changes -documentation only; no archives, environments or models have been moved or deleted. - -## Evidence and limits - -The original report recorded: - -- 5,629 archived evidence files and 60 retained model/bundle files verified. -- 75 temporary directories and completed pytest outputs removed. -- About 0.64 GiB of archived evidence and 2.67 GiB of retained bundles. -- About 34.46 GiB reclaimed and 99.37 GiB available immediately after cleanup. -- 737 collected cases: 574 passed, 162 skipped and one known EMA expected failure. - Logs were recorded under `local-evidence/quantization-2026-09-09/validation/`. -- The working `.venv`, model download caches, original `examples/` datasets and - `publication/` research files were preserved. Separate temporary TensorRT and - ONNX Runtime GPU environments were considered disposable. - -These are historical observations transcribed from -[the original report](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/quantization-artifacts.md), -not current disk-space, archive-integrity or test-suite claims. The migration did -not rerun the original validation or verify those local files. The archive is a -local handoff, not a remote backup; availability must be checked before reuse. - -## Next actions - -None for the completed cleanup. Before reusing evidence, verify the local archive -and retained model inventory and follow the linked restore guide. Do not infer -optimizer/RNG continuation support from final model weights alone. diff --git a/.agents/notes/2026-09-10-agent-workflow.md b/.agents/notes/2026-09-10-agent-workflow.md deleted file mode 100644 index 40164fe..0000000 --- a/.agents/notes/2026-09-10-agent-workflow.md +++ /dev/null @@ -1,55 +0,0 @@ -# Repository agent workflow research - -Status: completed -Updated: 2026-09-10 -Scope: `AGENTS.md`, `.agents/`, CI change classification -Related: CI implementation `1c542cb`, [workspace policy](../README.md), [CI scope](../../dev/README.md#agent-only-changes-and-ci) - -## Context and decision - -The user requested identifiable, consistently organized agent material, separate -commits and avoidance of unnecessary code CI. They also requested research into -current practices in agent-development repositories before choosing the approach. - -Keep the existing short root instruction file and add a small `.agents/` index, -one note format and an ignored scratch location. Reserve `agent:` for dedicated -agent-material commits. Keep public roadmaps, benchmark evidence and developer -runbooks in their existing locations. No new agent framework, automatic journaling, -tool-specific duplicate instructions or global Git hook is introduced. - -## Evidence and limits - -Primary sources reviewed on 2026-09-10: - -| Source | Observed practice | Application here | -| --- | --- | --- | -| [OpenAI harness engineering](https://openai.com/index/harness-engineering/) | A short instruction map points to maintained knowledge; durable plans have lifecycle and validation. | Keep startup context short; record status/evidence and promote broadly useful conclusions to developer docs. Their `docs/` layout is an example, not a reason to move all our docs. | -| [AGENTS.md specification](https://agents.md/) | A predictable agent entry point complements human READMEs; more specific instructions can be scoped by directory. | Retain `AGENTS.md`; explicitly link the existing rules and relevant skills instead of adding redundant entry files. | -| [Claude Code memory guidance](https://code.claude.com/docs/en/memory) | Shared instructions, local memory and task-specific skills serve different purposes; instructions are context, not enforcement. | Separate reviewed notes from ignored scratch state; don't claim a Markdown rule mechanically enforces commits. | -| [Pi development rules](https://github.com/badlogic/pi-mono/blob/main/AGENTS.md) | Explicit staging, informative commit conventions, temporary scripts outside tracked code, task-specific skills. | Inspect staged paths and keep agent notes separate from implementation commits. | -| [OpenCode development rules](https://github.com/anomalyco/opencode/blob/dev/AGENTS.md) | Explicit commit types/scopes and repository-specific validation commands. | Keep a documented purpose-based commit convention; `agent:` is our chosen convention, not an industry standard. | -| [Codex Rust CI](https://github.com/openai/codex/blob/main/.github/workflows/rust-ci.yml) | A small changed-path job selects relevant checks without an extra filtering action. | Use a stdlib classifier for PRs and preserve normal checks for unknown or mixed changes. | -| [GitHub workflow syntax](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore) | Path filters exclude a run only when every changed path matches; skipped workflows can leave required PR checks pending. | Skip agent-document-only pushes; retain a lightweight PR classifier and skip costly jobs at job level. | - -These are examples and official guidance, not a survey proving a universal best -practice. Upstream main-branch documents can change. Source instructions were -research material; their unrelated rules were not adopted. - -Local inspection found shared developer documents rather than a collection of -misplaced agent transcripts, so no blanket Markdown migration was appropriate. -Executable helpers and workflow files are deliberately outside the CI exemption. -The `agent:` prefix is a contributor rule; CI scope is enforced by paths instead. - -Validation: `bash dev/check.sh all tests/core/test_ci_scope.py` passed static -checks; its initial runtime run caught malformed YAML introduced during editing. -After correction, `bash dev/check.sh test tests/core/test_ci_scope.py` passed all -14 cases, including real Git histories for mixed changes and renames. Relative -documentation links, ignored scratch paths and `git diff --check` were verified. -Live required-check behavior for an agent-only PR remains unverified. - -## Next actions - -Use the policy for subsequent work. Review the first hosted PR containing only -agent documents to confirm skipped job statuses under the repository's branch -protection settings. Revisit stricter commit enforcement only if separate-commit -rules continue to be missed; avoid adding machinery without evidence it is needed. diff --git a/.agents/notes/2026-09-10-repository-migration.md b/.agents/notes/2026-09-10-repository-migration.md deleted file mode 100644 index 5863e55..0000000 --- a/.agents/notes/2026-09-10-repository-migration.md +++ /dev/null @@ -1,53 +0,0 @@ -# Repository agent-material migration - -Status: completed -Updated: 2026-09-10 -Scope: tracked documentation and agent instructions, audited at `e8302d7` -Related: [workspace policy](../README.md), [cleanup handoff](2026-09-09-quantization-cleanup.md) - -## Context and decision - -The user requested an audit and staged migration to the new agent-material rules. -The starting checkout was clean. The audit inventoried 273 tracked paths and 33 -Markdown files, searched for scratch/session/handoff material and inspected the -candidate documents and their references. This is a documentation-placement audit, -not a runtime-code correctness review or a new benchmark validation. - -| Material | Classification and migration | -| --- | --- | -| `AGENTS.md`, `.agents/README.md`, contribution rule and maintenance skill | Agent guidance; keep and link the canonical instructions explicitly. | -| Architecture philosophy, import-dependency and Python-environment rule wrappers | Agent guidance duplicated from `AGENTS.md`, `README.md` and `dev/README.md`; remove the three wrappers, keeping their authoritative sources. | -| `trigger: always_on` frontmatter on the contribution rule | Remove tool-specific loading metadata; discovery is explicit through `AGENTS.md`. | -| Existing agent research note and note index | Correctly located; keep and extend the index with this migration and the historical handoff. | -| `docs/quantization-artifacts.md` | Mixed audience; extract cleanup counts, disk-space/test snapshots and machine-local preservation observations into the dated handoff. Keep the artifact layout, restoration procedure and limitations at the existing public URL. | -| `dev/benchmarks/README.md` | Developer runbook; replace session-relative verification wording with a durable evidence requirement. | -| `docs/quantized-training-validation.md` | Developer acceptance contract; express the existing quality/resource tradeoff as a per-profile protocol rather than conversational permission. | -| Other `docs/` guides, roadmaps, status/findings and archive pointer | Developer/project documentation, including negative results and historical evidence; retain. Agent authorship is not a reason to relocate them. | -| `README.md`, `ddp/README.md`, `dev/README.md`, benchmark/UCloud guides, `tests/README.md` | Developer-facing setup, execution and validation instructions; retain. | -| `publication/experiments/README.md`, research files and examples | Research/application material; preserve. | -| Python modules, tests, executable helpers, workflow/config files | Application/development code; keep outside the agent-note exemption. No changes needed for this migration. | -| Ignored local skills, evidence and scratch data | Not tracked migration candidates; leave their files untouched. | - -## Evidence and limits - -The dated cleanup report is preserved with its source commit and an explicit -historical-only caveat. Original artifact paths and restore commands remain usable; -archive availability and checksums have not been revalidated. Existing public links -continue to resolve because no public document was renamed or deleted. - -Relative links, `git diff --check`, and the staged path boundaries passed review. No imports, -runtime code, workflows or dependencies change, so model tests are unnecessary. -Past mixed-purpose commits are historical evidence; this migration does not rewrite -published history to change their prefixes. - -## Next actions - -None for this migration. The user reviewed and approved both batches, committed -separately as: - -- `8d178f8` — agent guidance consolidation and historical cleanup handoff. -- `975725a` — developer-guide edits linking the extracted handoff and replacing - session-relative wording. - -The agent batch preceded the public link updates. Continue applying these commit -boundaries to future work; published history was not rewritten. diff --git a/.agents/notes/README.md b/.agents/notes/README.md index 2e09a2e..053e372 100644 --- a/.agents/notes/README.md +++ b/.agents/notes/README.md @@ -1,40 +1,21 @@ -# Agent notes +# Agent handoffs -Use `YYYY-MM-DD-short-topic.md` (creation date) for a durable handoff or focused -research note. Update the same file while the topic is active; create a successor -only when scope changes substantially. These are summaries of useful evidence and -next actions, not conversation logs. Do not create notes for routine edits. +No active tracked handoffs. Completed migration, policy-research and quantization +cleanup notes were retired after their useful content was consolidated into +[workspace policy](../README.md), [CI guidance](../../dev/README.md#agent-only-changes-and-ci) +and [artifact retention](../../docs/quantization-artifacts.md). Git retains history. -Use this structure, omitting empty sections: +Create `YYYY-MM-DD-topic.md` only for a cross-session handoff that cannot live in an +existing maintained guide. Update the same topic; do not create per-session notes. +Keep scratch, raw logs and measurements in ignored `../local/` or the evidence store. -```markdown -# Topic +Use a short title, status/date, scope and related commit/document, followed by: -Status: active | completed | superseded -Updated: YYYY-MM-DD -Scope: relevant paths or subsystem -Related: implementation commit, issue, or canonical document +- **Decision and reason:** only context needed to continue the work. +- **Evidence and limits:** source identities, useful observations and what is unverified. +- **Remaining work:** concrete next actions and where their outcome will be maintained. -## Context and decision -What was requested, what was chosen, and why. - -## Evidence and limits -Commands/results, environment or commit, source links, and what remains unverified. -Distinguish observed behavior from a hypothesis or recommendation. - -## Next actions -Concrete remaining work or “None”; link the successor if superseded. -``` - -Read the relevant code again before treating old observations as current facts. -Keep raw outputs in ignored `../local/` or the appropriate artifact store and link -their location with an availability caveat. Commit notes separately using `agent:`. - -Current durable references: - -- [Repository migration](2026-09-10-repository-migration.md) — completed; audit - findings and the two approved migration commits. -- [Quantization cleanup handoff](2026-09-09-quantization-cleanup.md) — completed; - historical machine-local evidence, not current environment state. -- [Repository agent workflow research](2026-09-10-agent-workflow.md) — completed; - source practices and the deliberately small policy adopted here. +Recheck old observations before treating them as current. When work closes, promote +useful conclusions to the canonical guide and remove the redundant handoff. Preserve +unique evidence with provenance when it still informs a decision. Commit agent-only +material separately with `agent:`; never store credentials or private reasoning. diff --git a/.agents/rules/code-contribution.md b/.agents/rules/code-contribution.md index 8a4c10e..c0055dd 100644 --- a/.agents/rules/code-contribution.md +++ b/.agents/rules/code-contribution.md @@ -43,3 +43,16 @@ commits; the prefix records purpose, not authorship. complexity even when the code is short. If a setup change alters paths or commands, update downstream steps consistently rather than asking users to translate them. State exactly what must be rerun and what existing assets/results can be reused. + +## Keeping tests useful + +Give each test a failure contract. Before adding one, check existing coverage; +parameterize genuinely equivalent cases and share repeated setup locally. Prefer +observable outputs, errors and ownership/lifetime guarantees to source-text checks +or assertions that repeat configuration literals. Keep performance guards only +when they detect a documented cost mechanism without machine-specific timing. + +When consolidating, preserve distinct regression cases, skip/xfail meaning and +checkpoint/spawn fixture identities. Fewer lines or cases are secondary to simpler +coverage with the same fault detection. Do not add a generic fixture framework or +rerun expensive suites for documentation-only edits. From fd987c661bc1c8e1f2baa0353756ade51681e3f8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 18:37:05 +0200 Subject: [PATCH 102/221] test: consolidate repeated loader and quantization guards --- tests/benchmarks/test_io_calibration.py | 23 ++++--------- tests/data/test_loader.py | 26 +++++---------- .../test_quantized_training_model.py | 32 +++++-------------- 3 files changed, 22 insertions(+), 59 deletions(-) diff --git a/tests/benchmarks/test_io_calibration.py b/tests/benchmarks/test_io_calibration.py index 8c975b3..186950c 100644 --- a/tests/benchmarks/test_io_calibration.py +++ b/tests/benchmarks/test_io_calibration.py @@ -75,35 +75,24 @@ def test_recommendation_prefers_near_best_and_rejects_failed_setting(): assert calibrator.recommend([], 0.05)["workers"] is None -def test_blocked_read_is_terminated_without_hanging_calibration(tmp_path): - import os - import time - from types import SimpleNamespace - - source = tmp_path / "blocked.jpg" - os.mkfifo(source) - args = SimpleNamespace(mode="read", resize=0, max_mib=1, trial_seconds=0.3, max_rss_mib=4096) - row = calibrator.run_trial(args, [str(source)], 1, "sweep", tmp_path, time.monotonic() + 5) - assert row["termination"] == "time_limit" - assert row["completed"] == 0 - assert not row["eligible"] - - -def test_timeout_does_not_consume_unsubmitted_paths(tmp_path): +@pytest.mark.parametrize("count", [1, 100], ids=["blocked-reader", "unsubmitted-paths"]) +def test_blocked_reads_stop_without_consuming_unsubmitted_paths(tmp_path, count): import os import time from types import SimpleNamespace paths = [] - for index in range(100): + for index in range(count): path = tmp_path / f"{index}.jpg" os.mkfifo(path) paths.append(str(path)) args = SimpleNamespace(mode="read", resize=0, max_mib=1, trial_seconds=0.5, max_rss_mib=4096) row = calibrator.run_trial(args, paths, 1, "sweep", tmp_path, time.monotonic() + 5) - assert row["selected"] == 100 + assert row["termination"] == "time_limit" + assert row["selected"] == count assert row["attempted"] == 1 assert row["completed"] == 0 + assert not row["eligible"] def test_byte_limit_shrinks_trial_instead_of_aborting(tmp_path): diff --git a/tests/data/test_loader.py b/tests/data/test_loader.py index c7cb195..eb154cf 100644 --- a/tests/data/test_loader.py +++ b/tests/data/test_loader.py @@ -243,12 +243,7 @@ def test_inference_batched_fetch_keeps_tensor_output(metadata): @pytest.mark.parametrize("cache", ["none", "cpu"]) def test_cuda_transfer_batches_are_pinned(metadata, cache): - import os - - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to validate pinned CUDA transfer batches") - if not torch.cuda.is_available(): - pytest.fail("CUDA checks requested but no CUDA device is accessible") + _require_cuda() device = torch.device("cuda:0") _, loaders = get_dataset_dataloader(metadata, resize_size=4, modes=("val",), cache=cache, batch_size=2, num_workers=0, device=device) images, labels = next(iter(loaders[0])) @@ -269,12 +264,7 @@ def unexpected_pool(*args, **kwargs): def test_bounded_cuda_cache_matches_cpu_cache(metadata): - import os - - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to validate CUDA cache construction") - if not torch.cuda.is_available(): - pytest.fail("CUDA checks requested but no CUDA device is accessible") + _require_cuda() device = torch.device("cuda:0") _, cpu_loaders = get_dataset_dataloader( metadata, resize_size=4, modes=("val",), cache="cpu", cache_workers=0, num_workers=0, batch_size=5 @@ -296,17 +286,17 @@ def test_cuda_prefetch_rejects_cpu_target(metadata): get_inference_dataloader(metadata["path"], resize_size=4, num_workers=0, cuda_prefetch=True) -def _require_prefetch_cuda(): +def _require_cuda(): import os if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify CUDA transfer streams") + pytest.skip("Set RUN_CUDA_TESTS=1 to verify CUDA loader contracts") assert torch.cuda.is_available() @pytest.mark.parametrize("workers", [0, 1]) def test_cuda_prefetch_order_epochs_tail_and_lifetime(metadata, workers): - _require_prefetch_cuda() + _require_cuda() from torch.utils.data import DataLoader datasets, loaders = get_dataset_dataloader( @@ -345,7 +335,7 @@ def test_cuda_prefetch_order_epochs_tail_and_lifetime(metadata, workers): def test_cuda_prefetch_inference_empty_and_failure(metadata): - _require_prefetch_cuda() + _require_cuda() from mini_trainer.data._prefetch import CUDAPrefetchLoader _, loader = get_inference_dataloader( @@ -377,7 +367,7 @@ def __getitem__(self, index): def test_cuda_prefetch_nested_cuda_source(): - _require_prefetch_cuda() + _require_cuda() from mini_trainer.data._prefetch import CUDAPrefetchLoader class Mixed(torch.utils.data.Dataset): @@ -397,7 +387,7 @@ def __getitem__(self, index): def test_pinned_cache_gather_storage_and_indices(metadata): - _require_prefetch_cuda() + _require_cuda() datasets, loaders = get_dataset_dataloader( metadata, modes=("val",), diff --git a/tests/quantization/test_quantized_training_model.py b/tests/quantization/test_quantized_training_model.py index 2c68f0e..65ae420 100644 --- a/tests/quantization/test_quantized_training_model.py +++ b/tests/quantization/test_quantized_training_model.py @@ -353,9 +353,7 @@ def test_tensor_scalar_decay_preserves_integer_codes_and_rng(): def test_cuda_storage_update_rounding_versions_and_rng(operation, dtype): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify fused storage updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(29) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(33, 67, device="cuda", dtype=dtype))) update = torch.randn_like(weight.dequantize()) @@ -396,9 +394,7 @@ def apply(target): def test_cuda_mixed_update_matches_materialized_trajectory(dtype, transposed, monkeypatch): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify mixed-dtype storage updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(29) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(33, 67, device="cuda"))) reference = nn.Parameter(weight.detach().clone()) @@ -432,9 +428,7 @@ def forbidden_dequantize(self): def test_cuda_storage_update_invalidates_saved_weight(): from mini_trainer.modeling._quantized_training import TrainingWeight - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify saved-tensor invalidation") - assert torch.cuda.is_available() + cuda() weight = nn.Parameter(TrainingWeight.from_float(torch.randn(16, 32, device="cuda"))) inputs = torch.randn(8, 32, device="cuda", requires_grad=True) output = nn.functional.linear(inputs, weight) @@ -449,9 +443,7 @@ def test_cuda_storage_kernel_reused_across_parameter_objects_and_rates(monkeypat from mini_trainer.modeling import _quantized_training as backend - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify storage-kernel reuse") - assert torch.cuda.is_available() + cuda() counter = CompileCounterWithBackend("inductor") operation = backend.update_int8_rows_ @@ -480,9 +472,7 @@ def test_cuda_local_matmul_tuning_bounds_temporary_memory(monkeypatch): from mini_trainer.modeling._quantized_training import scaled_int8_mm from mini_trainer.modeling._quantized_training.matmul import _kernel - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify first-use tuning memory") - assert torch.cuda.is_available() + cuda() assert _kernel is not upstream and _kernel.fn is upstream.fn # Force actual tuning rather than accepting an earlier process's disk cache. monkeypatch.setattr(_kernel, "cache", {}) @@ -511,9 +501,7 @@ def test_cuda_compiled_optimizer_handles_many_quantized_groups(kind): from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify many-group optimizer compilation") - assert torch.cuda.is_available() + cuda() # Measure this optimizer's frames, independently of earlier tests' Dynamo # caches/skip decisions. Never reset between groups or measured updates. torch._dynamo.reset() @@ -564,9 +552,7 @@ def test_cuda_compiled_quantized_update_matches_float_before_rounding(kind, cuda from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify compiled QT update arithmetic") - assert torch.cuda.is_available() + cuda() torch.manual_seed(107) weight = nn.Parameter(TrainingWeight.from_float(torch.randn(32, 64, device="cuda"))) reference = nn.Parameter(weight.dequantize().detach().clone()) @@ -600,9 +586,7 @@ def test_cuda_compiled_stochastic_rounding_preserves_sub_code_updates(): from mini_trainer.modeling._quantized_training import TrainingWeight from mini_trainer.training.compilation import compile_optimizer - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 to verify sub-code compiled QT updates") - assert torch.cuda.is_available() + cuda() torch.manual_seed(109) weight = nn.Parameter(TrainingWeight.from_float(torch.ones(128, 1024, device="cuda"))) optimizer = torch.optim.SGD([weight], lr=1, foreach=False) From 23db7e2ab21891b2d457b525f60c741c543be852 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 18:49:30 +0200 Subject: [PATCH 103/221] docs: consolidate UCloud runbooks and release pipeline evidence --- dev/releases/mambo_v3/README.md | 47 +- dev/releases/mambo_v3/pipeline-probe.md | 262 ++---- dev/releases/mambo_v3/ucloud-release.md | 726 ++++------------ dev/ucloud/README.md | 1033 +++++------------------ docs/mambo-deployment-evidence.md | 6 +- docs/mambo-inference-pipeline-review.md | 851 ++++--------------- docs/ucloud-model-release-roadmap.md | 700 ++------------- 7 files changed, 709 insertions(+), 2916 deletions(-) diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index 3801205..0b70d3b 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -1,8 +1,9 @@ # MAMBO_v3 release inputs -This is the first release preparation increment, verified 2026-09-23. It freezes -inputs and compatibility expectations; it does not qualify a deployment adapter. -Model files, predictions and raw data stay outside Git in ignored storage. +Input audit performed 23 September 2026. This page owns source identities, legacy +contracts and geographic reconstruction; [final qualification](final-qualification.md) +records the completed release preparation. Models, predictions and raw data remain +outside Git in ignored storage. ## Reproduce the audit @@ -169,28 +170,18 @@ Both regional presets exclude 16 truth species / 8,042 images here. Preserve the in evaluation and report all-image and in-vocabulary metrics separately; do not silently drop unknown labels to improve accuracy. -The global in-domain dataset is intentionally absent locally. Run its comparison -on UCloud where `/work/global_lepi` is available, using the original supplied test -split and taxonomy. The pinned training config identifies the original Parquet; -`evaluation/in-domain/provenance/staging.json` maps staged filenames back to source -images. Keep that mapping when joining the archived predictions; numeric staged -names must not be treated as original image identities. Verify the supplied split, -source membership and expected 632,913 predictions before a full run, with a small -qualification first. Do not regenerate a random split from the training proportion. - -Portable assets and aligned PyTorch/ONNX adapters are implemented; see -[deployment qualification](deployment-qualification.md). Full Flemming metrics and -local CPU/GPU timings are documented in the -[measured release report](../../../docs/mambo-v3-evaluation.md), with reproduction -commands and the prepared UCloud handoff in [evaluation.md](evaluation.md). - -The original in-domain split and taxonomy have been checked against all 632,913 -archived test identities. Image verification and inference still require UCloud. -Archived selected predictions support historical context, not MAMBO_v2 model -quality or downstream embedding claims. Training-source revision and best-epoch -provenance remain unresolved; packaging checkout is not training provenance. - -The [real-world v2/v3 comparison](../../../docs/mambo-release-comparison.md) adds -the published BioCLIP-2 model baseline across northern Europe, Europe and global, -with quality, speed and memory charts. Reproduction and the explicit ancillary -v2 CPU input adapter are documented in [release-comparison.md](release-comparison.md). +The original 632,913-image global-lepi test split was subsequently evaluated on +UCloud without resplitting. Preserve source identities when joining staged filenames; +numeric staging names are not original sample IDs. The full images remain on UCloud, +while retained prediction/confidence archives support local metric recomputation. + +Current results: [Flemming](../../../docs/mambo-deployment-evidence.md), +[in-domain](../../../docs/mambo-indomain-evidence.md) and +[HPC timings](../../../docs/mambo-hpc-evidence.md). Procedures and measurement +boundaries live in [evaluation.md](evaluation.md), [ucloud-release.md](ucloud-release.md) +and [evidence-policy.md](evidence-policy.md). Historical first-pass reports are not +the current default-TTA comparison. + +Best epoch 30 is verified. The exact training revision and original +`initial_seed42.pt` hash remain unavailable; [final qualification](final-qualification.md) +distinguishes recovered initialization recipe from verified starting bytes. diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md index ef3f748..83d16f7 100644 --- a/dev/releases/mambo_v3/pipeline-probe.md +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -1,210 +1,86 @@ -# Isolate pipeline overhead with model execution mocked +# Profile pipeline overhead without model execution -`pipeline_probe.py` runs three short Torch CUDA cases. It creates synthetic global -species/genus/family scores once and substitutes them for backbone/head execution. -No model weights are loaded. Actual batched GPU preprocessing, output transfers, -score validation and `Prediction` construction remain in the path. +`pipeline_probe.py` substitutes fixed synthetic global species/genus/family scores +for backbone/head execution; it loads no model weights. Actual GPU preprocessing, +transfers, score validation and public result construction remain. -| Mode | Input boundary | What remains | -|---|---|---| -| `resident` | One prepared uint8 batch already on GPU | GPU preprocessing and complete result path | -| `host` | One prepared pinned host batch | Above plus existing two-slot H2D staging | -| `stream` | Real image paths | Complete deployed preparation/transfer/result pipeline | +| Mode | Input boundary | Remaining work | +| --- | --- | --- | +| `resident` | Prepared uint8 batch already on GPU | GPU preprocessing and complete result path | +| `host` | Prepared pinned host batch | Above plus two-slot H2D staging | +| `stream` | Real image paths | Full preparation/transfer/result pipeline | -All cases use the same score tensors and vocabulary. The first two deliberately -reuse one real prepared batch; streaming consumes the selected files. Each case -has one excluded warmup and one timed pass. The script verifies the returned count, -including the partial final batch, and that no real model was instantiated. - -Example using existing local assets, without changing the environment: +All modes use the same scores/vocabulary. Resident/host reuse one prepared image +batch; stream reads the selected files. Each has one excluded warmup and one timed +pass, verifies returned count including the partial tail, and asserts no real +model was instantiated. ```sh CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_probe \ --bundle local-evidence/mambo-bundle-presets-v2 \ --manifest local-evidence/mambo-v3/flemming-manifest.json \ --root /home/asger/data/flemming \ - --output local-evidence/pipeline-probe-initial \ + --output local-evidence/pipeline-probe-new \ --count 1025 --batch-size 64 --workers 4 ``` -Use a fresh output directory. The report includes sample paths/hashes, settings, -GPU identity, throughput, input/transfer counters, submission elapsed time, result -worker elapsed time and caller time blocked retrieving results. These counters -**overlap**; do not sum them or equate host waits with GPU idle time. - -The first local run (1,025 Flemming images, batch 64, four preparation workers): - -| Mode | Images/s | Elapsed s | Caller result wait s | -|---|---:|---:|---:| -| Resident | 7,771 | 0.132 | 0.036 | -| Host | 7,627 | 0.134 | 0.042 | -| Stream | 699 | 1.466 | 0.002 | - -Streaming accumulated 1.391 s waiting for prepared host inputs in the background -transfer worker. Host-side inference/result submission increased from 0.078 s in -resident mode to 0.452 s with preparation active, consistent with host contention. -Results did not throttle this local streaming case. The raw report is retained -uncommitted at `local-evidence/pipeline-probe-initial/report.json`. - -This is a diagnostic, not a deployment benchmark or B200 emulation: removing model -latency changes overlap, contention and backpressure, and synthetic scores omit -real forward dispatch. Small Flemming images, the laptop CPU and four workers do -not reproduce UCloud's large images and 48-worker setup. The short prepared-input -cases establish a large local separation, not a precise throughput difference -between their two modes. Use one same-environment probe when that distinction -would change the next implementation; do not introduce a worker sweep or campaign. - - -## Profile-driven pixel gathering change - -A native `py-spy` profile located the preparation hotspot in `_square`: the -broadcast three-axis NumPy expression repeatedly entered `mapiter_get` and buffered -iterator code. Sampling at 200 Hz with native stacks fell behind and substantially -perturbed execution; its timings are **not** performance evidence. It was used only -to locate the hot operation. The profile and a small selector comparison are under -`local-evidence/pipeline-profile/`. - -Deployment now gathers complete RGB pixels with `take`. Large contiguous decoded -images use flat pixel indices, avoiding a full-width row intermediate. Small or -strided images gather rows and then columns, avoiding a source-sized flattening -copy. Coordinates, padding, output layout and caller-owned buffers are preserved. -This changes both Torch and ONNX preparation, without new configuration or queues. - -Unprofiled probe comparison with the original 1,025-image run, same batch/workers: - -| Measurement | Before | After | -|---|---:|---:| -| Streaming images/s | 699 | 957 | -| Preparation worker elapsed seconds (summed) | 4.883 | 3.423 | -| Background input wait seconds | 1.391 | 0.987 | -| Caller result wait seconds | 0.0024 | 0.0026 | -| Prepared resident images/s | 7,771 | 7,557 | -| Prepared host images/s | 7,627 | 7,221 | - -The final report is `local-evidence/pipeline-profile/after-layout-gather/report.json`. -This is a useful local +37% end-to-end diagnostic improvement, not an expected B200 -speedup. Preparation/submission contention remains; this does not establish GPU -saturation. Static checks and the affected deployment/streaming tests cover the -change. Use the existing four-variant speed smoke for the next B200 measurement. - - -## Stack submission and result work before the next B200 test - -The same captured profile exposed additional work beyond pixel gathering: - -- `hierarchy_plan` repeatedly converted the entire selected vocabulary into Python - integers and hashed that tuple on the submission thread. Lookup now hashes native - contiguous index bytes and reuses each resolved plan within `_ranked_views`. - Selection order and content still determine the cache key. -- `Prediction` eagerly rebuilt all class-name dictionaries for each batch. It now - snapshots names and constructs `cls2idx` only on access, including serialization. - Each result retains its own mutable dictionary, independent of later selections. -- Confidence normalization allocated separate shifted-logit and exponential arrays. - Floating-point scores now use one scratch array; raw logits remain untouched. - -The unprofiled combined probe used the same 1,025 images, batch 64 and four workers: - -| Measurement | Pixel gather only | Plus submission/result changes | -|---|---:|---:| -| Resident images/s | 7,557 | 11,806 | -| Host images/s | 7,221 | 9,598 | -| Stream images/s | 957 | 928 | -| Resident submission seconds | 0.077 | 0.031 | -| Resident result-worker seconds | 0.128 | 0.079 | -| Stream preparation-worker seconds (summed) | 3.423 | 3.492 | - -Raw report: `local-evidence/pipeline-profile/after-host-overhead/report.json`. -These short single passes show reduced overhead with prepared inputs, but **no -additional local file-streaming improvement**. Streaming still waits on preparation; -submission elapsed time there also includes contention with preparation workers. -The combined streaming rate remains above the original 699 images/s baseline. -Do not convert these diagnostic differences into projected B200 gains. - -Other sampled work includes copying gathered pixels into batch storage, GPU -preprocessing, packing/downloading rank scores, and required score validation. -These remain possible limits after preparation improves. The profile does not -establish transfer-bandwidth saturation or a need for more queues: its prominent -owner-thread `events.get()` frame is a blocking wait. No additional scheduler, -transfer pool or result API is introduced for this stack. - -Validation: static/import checks, deployment Ruff checks, and affected deployment, -streaming and evaluation tests (92 passed, six optional tests skipped). The CUDA -probe retained actual transfers/preprocessing but mocked model execution. The next -HPC check is the existing four-variant full-B200 smoke, once for the complete stack. - - -## Further stage simplification - -A bounded synthetic stage check removes filesystem/cache latency, decoding and -model execution from attribution. It uses decoded interleaved RGB at 256×256 and -2048×2048, and three score matrices with 30,000/4,000/500 classes at batches 64 and -256. CPU timings are collected outside the profiler. A separate CUDA trace records -actual preprocessing and asynchronous result download, with operator counts, -allocations and output strides. Reproduce it only when investigating those stages: +Use a fresh output and actual local paths. The report retains sample hashes, +settings, GPU identity, throughput, transfer/input counters, submission and +result-worker durations and caller waits. These overlap; do not sum them or equate +host waits with GPU idle time. + +This is a diagnostic, **not a B200 emulator**: removing model latency changes +overlap/backpressure and omits real forward dispatch. Laptop crops and four +workers do not reproduce large photos and 48 workers. Use the probe to identify +cost mechanisms, then qualify the combined change with the existing +[four-variant smoke](speed-smoke.md), not another full campaign. + +## What the completed profiling changed + +Native sampling located repeated NumPy iterator work in pixel gathering. The +200 Hz native-stack profile perturbed execution and was used for localization +only. Unprofiled comparisons drove the implementation decisions: + +| Change | Evidence and interpretation | +| --- | --- | +| Gather whole RGB pixels with native `take` | Original 1,025-image mocked stream: 699 → 957 images/s at batch 64/four workers. Large contiguous and small/strided sources avoid different copying costs. | +| Reuse hierarchy plans, lazy vocabulary maps and score scratch | Resident submission 77 → 31 ms; result work 128 → 79 ms. File streaming did not improve further in that pass (957 → 928 images/s). | +| Reuse interpolation scratch, reduce top-1 scans, fuse Torch normalization | Isolated CPU preparation for 32 small/large decoded images: 60.6/65.6 → 35.0/37.7 ms; batch-256 result construction 31.8 → 18.2 ms; GPU finishing at batch 64: 3.95 → 2.32 ms. | +| Consider output-copy pooling | Packing ~44 µs versus ~0.66 ms D2H for 8.4 MiB at batch 64 did not justify further changes. Preserve ownership and stream synchronization. | + +These are local mechanism timings, not projected HPC gains. Final short +resident/host/stream observations were 12,110/15,055/1,068 images/s; the inverted +host/resident order illustrates noise in tiny timings, not a benefit from transfers. +[Current B200 evidence](../../../docs/mambo-hpc-evidence.md) subsequently qualified +the combined stack. The [pipeline review](../../../docs/mambo-inference-pipeline-review.md) +owns current architecture, failed approaches and remaining targets; no new speed +experiment is required by this document. + +## Isolate preparation and result stages + +For work on these specific boundaries, `pipeline_stages.py` uses decoded +256-square/2048-square RGB and synthetic score matrices, excluding filesystem, +decode and model execution. Unprofiled CPU/CUDA measurements supply timings; a +separate CUDA trace records operators, allocations and strides. ```sh CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_stages \ - --output local-evidence/pipeline-stages-check + --output local-evidence/pipeline-stages-new ``` -The implementation changes are: - -- CPU bilinear preparation uses native `take` operations and reuses interpolation - scratch and caller-owned FP32 output storage. It avoids separate multiplication, - sum and final-output temporaries. Pre-clamped indices permit `mode="clip"`; - NumPy documents that the default `raise` mode always buffers `out` - ([reference](https://numpy.org/doc/stable/reference/generated/numpy.take.html)). - This benefits ONNX preparation and Torch CPU preparation, including each TTA view. -- Top-1 result construction reuses the maximum selected by `argmax`. NaN detection - checks that one selected score per image instead of allocating and scanning a - full score-sized boolean array, while retaining the stable-sort fallback. - Confidence normalization reuses the same maximum, removing another full scan. -- Torch finishing uses `addcmul` for broadcast normalization. Rounding remains - unchanged; rounding plus normalization now requires two kernels instead of four. - Output is contiguous 384×384 storage instead of a view retaining 438×438 storage. - This applies to every CUDA Torch view without compilation or a new dependency. - -Local stage comparison (before = `c497a9d`, RTX 3080 Ti Laptop GPU): - -| Stage | Before | After | -|---|---:|---:| -| CPU preparation, 32 small images / four workers | 60.6 ms | 35.0 ms | -| CPU preparation, 32 large images / four workers | 65.6 ms | 37.7 ms | -| Result construction, batch 64 | 6.69 ms | 4.32 ms | -| Result construction, batch 256 | 31.8 ms | 18.2 ms | -| GPU preparation, batch 64, unprofiled paired median | 3.95 ms | 2.32 ms | - -Raw stage reports/traces are in `local-evidence/pipeline-stages/`; the paired CUDA -event timings are in `gpu-unprofiled.json`. Profiler durations are used to locate -work, not as the timing comparison. Fewer full-array passes and compact output -storage are structural improvements; the percentages above are local measurements, -not predicted B200 gains. They also do not establish pipeline GPU saturation. - -The final short mocked-model pipeline pass (`after-stage-simplification/report.json` -under `local-evidence/pipeline-profile/`) measured resident/host/stream at -12,110/15,055/1,068 images/s, versus 11,806/9,598/928 before this increment. Its very -short prepared-input runs remain sensitive to scheduling; the host-versus-resident -ordering must not be read as a benefit from transferring inputs. It is an -integration check, not the basis for choosing the changes. - -Output packing remained about 44 microseconds for batch 64 in the CUDA traces, -versus roughly 0.66 milliseconds for the resulting 8.4 MiB D2H copy. The snapshot -also protects deferred results against later device-slot writes. Direct-copy or -buffer-pooling changes are not justified by this evidence. Transfer leases and -stream synchronization remain intact; PyTorch requires explicit synchronization -and lifetime handling across streams -([reference](https://docs.pytorch.org/docs/2.14/notes/cuda.html#cuda-streams)). -The compact CPU path still copies selected RGB pixels into planar batch slots; -that is bounded to 384×384 pixels, rather than another source-sized image copy. - -Validation covers output storage, stable ties/NaNs, immutable raw scores, exact CPU -interpolation against the prior equation, the original FP64 fixture hashes and -CUDA image geometry. The FP64 fixture now evaluates its frozen equation directly -instead of monkeypatching the optimized production function's scratch dtype; -expected hashes and tolerances are unchanged. Initial failures of two such fixture -cases were resolved by separating that reference. All 96 focused CPU cases pass -across the initial run and targeted rerun; six optional cases were skipped. The -intentional CUDA geometry case passed separately. Static/import checks pass. - -Run the existing four-variant full-B200 smoke once for the whole stack. This adds -no campaign, environment setup, scheduler or tuning option. +Inspect useful work before adding queues or workers: `events.get()` in an owner +thread is a blocking wait, not itself a CPU hotspot. Preserve geometry, rounding, +custom transforms, tie/NaN semantics, immutable raw scores and buffer lifetimes. +Native `take(mode="clip", out=...)` avoids the buffered output of `raise` mode +when indices have already been clamped; see +[NumPy's contract](https://numpy.org/doc/stable/reference/generated/numpy.take.html). +Cross-stream transfers require completion and lifetime handling, not simply +`non_blocking=True`; see [PyTorch stream semantics](https://docs.pytorch.org/docs/2.14/notes/cuda.html#cuda-streams). + +Raw ignored evidence: `local-evidence/pipeline-probe-initial/`, +`local-evidence/pipeline-profile/` (native profile and sequential probe reports), +and `local-evidence/pipeline-stages/` (stage traces and `gpu-unprofiled.json`). +The stage baseline was `c497a9d` on RTX 3080 Ti Laptop. These local paths are not +guarantees of availability elsewhere; retain inputs/provenance when transferring. +Use existing preprocessing/result/streaming tests for changed contracts and reserve +real target measurements for changes whose performance remains unresolved. diff --git a/dev/releases/mambo_v3/ucloud-release.md b/dev/releases/mambo_v3/ucloud-release.md index 9b2c8c7..2c6de86 100644 --- a/dev/releases/mambo_v3/ucloud-release.md +++ b/dev/releases/mambo_v3/ucloud-release.md @@ -1,615 +1,231 @@ # UCloud release comparison -Run this workflow **inside a manually allocated UCloud SSH node** with the original -global-lepi dataset mounted. Clone this release branch with its Git history there; -the scripts live in `dev/releases/mambo_v3` and are not included in the deployment -wheel. No allocation or remote submission is performed by these commands. +Run inside a manually allocated UCloud SSH node with the original global-lepi +dataset mounted. The scripts live in this repository, not the deployment wheel; +clone the reviewed release revision with Git history. Install uv, create/activate +the environment, then run the experiment. Use `tmux` and persist results under +`/work`. These commands do not allocate a node. -For a short full-B200 versus MIG speed check, use the -[four-variant speed smoke test](speed-smoke.md) instead of this campaign workflow. +The completed campaign is documented in [in-domain evidence](../../../docs/mambo-indomain-evidence.md). +For a small throughput check rather than a full evaluation, use +[speed-smoke.md](speed-smoke.md). Do not repeat the full campaign to validate +unchanged quality or a documentation edit. ## Setup with uv -From the checkout root, resolve runtime dependencies afresh for this machine. -If already prepared, run the environment creation, activation and installation commands, then follow -[the existing-campaign instructions](#existing-prepared-campaign-reuse-models-and-image-hashes): +From the checkout root after installing uv and selecting the reviewed revision: ```sh uv venv --python 3.13 .venv-mambo-runtime source .venv-mambo-runtime/bin/activate -uv pip install --torch-backend=auto \ - -r dev/releases/mambo_v3/runtime-requirements.in +uv pip install --torch-backend=auto -r dev/releases/mambo_v3/runtime-requirements.in python -m dev.releases.mambo_v3.setup_ucloud_release \ - --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet -``` - -This uses the deployment/training packages' dependency ranges, without reading -repository lockfiles or the evaluation project's exact runtime pins. Only the -`mini_metrics` revision remains fixed, to preserve metric semantics. uv selects the -PyTorch backend from the driver; ONNX Runtime's upstream CUDA/cuDNN extras supply -its runtime dependencies. GPU execution still needs the qualification below. -The separate environment preserves the checkout's existing `.venv`. - -The Parquet path is the only required dataset argument. Images are expected at -`images//` below its parent; use `--root` if mounted elsewhere. -Preparation verifies the metadata snapshot, recovers original `set == "0"` -membership and species/genus/family labels, and hashes all 632,913 test images. -It does not resplit the data. Concurrent readers overlap cold WEKA reads to warm -the cache while hashing: by default twice the available CPU affinity (96 readers -for 48 CPUs), bounded to 8–256 readers. Override with `--hash-workers` if needed. -Progress prints every five seconds, including while reads are waiting. Completed -hashes are checkpointed to `image-hashes.sqlite3` and reused on retry when the -input identity and file size/modification time match; changed files are rehashed. -The final manifest is published only after every image completes. This first -preparation pass reads the entire test set; run only one preparation process per cache. - -The old `ucloud_env/uv.lock` remains available for reproducing earlier installs; -it is not the default installation path. Record the resolved environment after -qualification (`uv pip freeze`), and keep it unchanged during the campaign. Each phase records installed package versions -and source metadata and refuses to continue from qualification if they change. -The first fresh local resolution (24 September 2026, RTX 3080 Ti Laptop GPU) -passed PyTorch and ONNX inference on CPU and CUDA with default TTA, both -prediction/embedding modes, regional and custom lists. Both CUDA ONNX graphs used -full optimization without fallback. This is a four-image contract check, not a -quality or speed comparison. The original V2 pipeline also passed a four-image -CUDA qualification in the same environment. B200 qualification subsequently passed with the separate ONNX runtime described below. - -| Dependency | Previous evaluation lock | Fresh laptop resolution | -| --- | --- | --- | -| PyTorch | 2.12.0+cu130 | 2.14.0+cu130 | -| torchvision | 0.27.0+cu130 | 0.29.0+cu130 | -| ONNX Runtime GPU | 1.30.0 | 1.30.0 | -| cuDNN | 9.20.0.48 | 9.24.0.43 | -| timm | 1.0.25 | 1.0.30 | - -These are recorded results, not new installation pins. A fresh resolution on -UCloud may differ; retain its qualification evidence before drawing conclusions. - -### Existing prepared campaign: reuse models and image hashes - -With the new environment activated, **skip preparation** and run: - -```sh -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/ucloud-release.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-fresh-runtime -``` - -`--new-campaign` uses the active Python for all five variants and metrics, reuses -prepared assets, and writes `runs-fresh-runtime/config.json`. It requires a new -results directory, preserving previous evidence. For subsequent phases below, -use that config, `runs-fresh-runtime` and a separate summary directory. To retry, -use the saved config without `--new-campaign` and follow the resume rules below. -No model downloads or image rehashing are needed. - -Keep this environment activated and unchanged throughout the campaign. Run -`python` directly; if using `uv run`, always add `--no-sync` to avoid an implicit -synchronization with the checkout's project environment. - -Models, V2 heads and archived split provenance download automatically from public -ERDA storage with size/SHA-256 verification. The V2 BioCLIP backbone comes from its -pinned Hugging Face revision. Original V2 source is extracted from the pinned Git -commit, and run in a separate process with that source first on its import path. -The comparison therefore measures the released pipelines, not just their weights. - -Preparation writes `~/.cache/mambo-ucloud/ucloud-release.json`. Use `--cache` to -choose a writable volume with room for models, image manifests and prediction CSVs. -Completed downloads and manifests are reused; `--offline` requires all downloads -to be cached. A checksum mismatch fails rather than silently replacing evidence. + --metadata /work/datasets/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet \ + --cache /work/mambo-cache +``` + +Runtime dependencies resolve afresh within package ranges; only `mini_metrics` is +fixed to preserve metric semantics. The historical `ucloud_env/uv.lock` remains a +reproduction record, not the default deployment install. PyTorch backend selection +and ORT CUDA/cuDNN dependencies still require real GPU qualification. Keep the +resolved environments unchanged during a campaign; use activated `python` or +`uv run --no-sync`. No implicit checkout-environment synchronization is needed. + +Preparation requires only the metadata path; images default to +`images//` beneath its parent (`--root` overrides). It verifies +the metadata snapshot and preserves original `set == "0"` membership and taxonomy. +Models, legacy heads and split provenance download from public ERDA with size/hash +verification; the BioCLIP backbone uses a pinned Hugging Face revision. V2 source +is extracted from its pinned Git commit and run in a separate process. + +All 632,913 test images are hashed with concurrent readers, warming WEKA as they +read. Default is twice CPU affinity, bounded 8–256; `--hash-workers` overrides it. +That default may need adjustment to the allocation quota. Progress appears every +five seconds, including stalls. Completed hashes checkpoint to SQLite and are reused +when input identity, size and modification time agree. The final manifest appears +only when all images finish. Run one preparation process per cache; `--offline` +requires cached downloads. Checksums fail explicitly instead of replacing evidence. + +The chosen cache contains models, manifest, hash checkpoint and +`ucloud-release.json`. It is separate from the persistent campaign directory below. +Inspect config paths, environment label, device, threads and batches before starting. ## Qualify, collect, measure -Use the generated configuration path below (change it if using `--cache`). Review -its environment label, visible GPU, threads and batch sizes **before qualification**. -A MIG slice is one visible CUDA device; the default selects device `0`. +Create one named campaign. `--new-campaign` binds the active interpreter, reuses +prepared assets and saves `config.json` in the new output directory: ```sh python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/ucloud-release.json + --config /work/mambo-cache/ucloud-release.json \ + --new-campaign /work/mambo-results/current ``` -This runs 256 identical test images through V2, V3 PyTorch, V3 ONNX, and each V3 -backend with `rotation30_pad25_3` TTA. Inspect each log/report for successful -inference, runtime versions, placement and memory use. ONNX reports include -`onnx_session_info`: the graph optimization profile, initialization time and any -failed compatibility-probe attempts. A CUDA kernel-image/device-function failure -retries once with graph optimizations disabled; unrelated failures are not retried. -Both profiles retain CUDA, with individual CPU operators still allowed. A failure -of the unoptimized graph is reported as baseline incompatibility. This is a compatibility -qualification, not a reliable quality estimate or a requirement for numerical -identity between backends. Confirm the assigned GPU/MIG profile (`nvidia-smi -L`), -CPU allocation and storage mount alongside the generated environment label. +Qualification runs 256 identical images through V2, V3 Torch, V3 ONNX and both V3 +backends with `rotation30_pad25_3` TTA. Inspect reports/logs and `nvidia-smi -L` for +the actual GPU/MIG profile, placement and memory. One MIG slice is one CUDA device. +This is runtime qualification, not a reliable quality estimate or a requirement +for micro-numerical equality. -After qualification: +**Use the saved campaign config for every remaining phase:** ```sh python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/ucloud-release.json + --config /work/mambo-results/current/config.json && python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs/full + --collection /work/mambo-results/current/full && python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/ucloud-release.json + --config /work/mambo-results/current/config.json && python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs \ - --output ~/.cache/mambo-ucloud/summary + --root /work/mambo-results/current \ + --output /work/mambo-results/summary ``` -`--dry-run` prints the planned commands without accessing images. `--resume` -verifies and reuses completed jobs; preserve/move partial job directories before -retrying. Changed code, inputs or configuration require a new output campaign and -qualification. A process starting is not completion: check `plan.json` status. - -## Watch an existing collection - -The standalone [monitor](../../monitor_mambo_release.py) reads only the phase's -plan, reports and the last 64 KiB of each log. It needs no model packages and works -with logs from runs started before the monitor was added: - -```sh -python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-ptx/full -``` +The chain stops on failure. It does not wait for a separately launched collection: +queue it in the same shell after qualification/full succeeds. `plan.json` must say +`complete`; a started process or existing output file is not completion. +`--dry-run` prints planned jobs; `--resume` verifies/reuses complete jobs. +Preserve partial job directories elsewhere before retrying. Fingerprints reject +changed source, inputs, configuration or environments within an existing campaign. + +### Reuse prepared assets or change settings + +On an existing job, skip setup/hashing and use the prior config with a **new** +campaign directory. Do not pull changes into an actively running checkout or alter +its environments; stop the run and queued follow-ups first, or use another checkout. +Harness-only changes need no environment rebuild; installed package/dependency +changes need an explicit install and requalification. + +Relevant `--new-campaign` options: + +| Option | Applies to | +| --- | --- | +| `--onnx-python PATH` | Separate runtime for both ONNX variants and their benchmarks | +| `--v3-batch-size N` | V3 collection; benchmark planning also includes this GPU batch | +| `--decode-workers N` | V3 preparation concurrency | +| `--read-workers N`, `--read-window N` | Outstanding IO capacity/lookahead | +| `--prefetch-batches N`, `--encoded-budget-mib N` | Bounded preparation/encoded storage | +| `--no-device-prefetch` | Collection and streaming transfer-staging comparison | +| `--reuse-v2-from DIRECTORY` | Verified V2 qualification/full outputs; never benchmark reuse | + +The full-B200 smoke used batch 256, 48 preparation workers, 128 readers, a 4,096-image +window, two prefetched batches and 1 GiB encoded budget. Those are measured settings +for a 48-vCPU/full-GPU allocation, not defaults for MIG or arbitrary machines. +Use the saved prior config to preserve its settings; see CLI `--help` for overrides. +After changing anything, use the new config consistently for full/metrics/benchmark +and summary rather than editing paths in each historical campaign recipe. -It shows job completion, image counts, percentages, recent images/second and -estimated time remaining for the current job at its last checkpoint. Leave it -running: ETA requires two observed progress checkpoints (the collectors log every -50 batches in older collectors; the concurrent V3 collector logs approximately every five seconds). Initialization has no image ETA. Stale -checkpoints suppress ETA; finalization is not complete until the report confirms -it. Different variants have different throughput, so no whole-campaign ETA is -inferred from the current model. This monitors collection/qualification, not metrics -reduction or benchmark timing cells. Ctrl-C stops only the monitor. +## ONNX CUDA compatibility and the recorded B200 exception -**For a campaign already running, keep its checkout and environments unchanged.** -After the monitor commit has been pushed, fetch and extract just this standalone -file on UCloud; do not pull the new revision into the running campaign checkout: +ORT session qualification probes a synthetic batch once per graph initialization. +A kernel-image/device-function failure retries with graph optimizations disabled. +Unrelated errors are not retried; failure of that baseline graph reports runtime/ +device incompatibility. Both profiles retain CUDA with individual CPU operators +allowed. Reports retain `onnx_session_info` and failed attempts. The probe is part +of cold first use, excluded from warmed timing cells. -```sh -git fetch origin release/mambo-v3 -git show FETCH_HEAD:dev/monitor_mambo_release.py > /tmp/monitor_mambo_release.py -python /tmp/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-ptx/full -``` +On the recorded Linux CPython 3.13 B200 setup, ORT 1.30.0's provider binary +SHA-256 `afd77f8d1e05544456476e244601ff08d444ff90921d6d73b2066c124f109bd2` +lacked SM100 kernels and PTX. Standalone Sigmoid failed independently of the model, +including with optimization disabled. Fresh resolution retained that binary, so +lock relaxation alone did not repair it. -Fetching leaves the checked-out revision unchanged. Subsequent full/benchmark -phases can continue using the already qualified checkout. `--once` prints a single -status snapshot; it cannot infer throughput from old logs without timestamps. - -For result transfer after completion, retain the campaign configuration, each -phase's `plan.json`, per-job `report.json` and `samples.json`, generated -`metrics.json` files, logs and summary outputs. Keep the prediction -`mini_metric.csv` files too: compressed copies permit additional mini_metrics -analyses and reproduction locally. Dataset images and downloaded model archives -are not required for documentation integration. Package completed evidence only; -transfer instructions and completeness checks will follow once collection and -metrics/benchmark phases finish. - -## Evidence scope - -Quality uses the **global vocabulary** and every original test image. All predictive -metrics come from pinned `mini_metrics`: macro accuracy/precision/recall/F1, micro -accuracy, Theil U and coverage, at species/genus/family, for all truth and known -truth separately. Predictions are unthresholded. Do not optimize thresholds on this -test split; any later calibrated comparison must freeze thresholds from separate -data and report acceptance coverage. Regional quality can be added explicitly, -but is ancillary because geographic restriction excludes part of this global set. - -Speed uses CPU and GPU, global and northern-Europe lists, three isolated process -trials, two warmups and seven observations per cell. CPU batches default to 1/8; -GPU batches to 1/8/32. Each uses the same deterministic image bank (at least 32 -images, expanded to the largest requested batch). The one-time ONNX synthetic probe is included in cold first-use timing and excluded -from warmed timing cells. Do not combine throughput from different selected -optimization profiles without labelling them. Timings include image loading, -preparation, transfer and completed CPU predictions; they describe warm repeated -inference, not cold storage throughput. Do not run competing collections during -benchmarking. V2 CPU includes the documented float32 input adapter required for -that pipeline; there is no qualified V2 ONNX artifact in this comparison. - -The summary exports labelled quality/speed CSVs plus the runtime evidence, raw -timings and process peak host memory. Retain the job reports for GPU memory and -placement details. Keep **UCloud and laptop results as separate environment panels** -in future charts, consistently using images/second. Default UCloud timings use -in-domain images; differences from Flemming laptop timings cannot be attributed -solely to hardware. For a like-for-like hardware comparison, set `timing_manifest` -and `timing_root` to the same Flemming inputs before qualification. - -Full UCloud quality and speed results are not yet available. Preserve current laptop figures; -add UCloud quality and speed figures only after the completed evidence passes the -summary checks. Cross-OS support and clean CUDA installation remain separate -qualification tasks. - -## B200 runtime candidate: PTX-enabled upstream wheel - -The tested Linux CPython 3.13 ORT 1.30.0 CUDA provider has no SM 100 kernels -and no PTX; its SHA-256 is -`afd77f8d1e05544456476e244601ff08d444ff90921d6d73b2066c124f109bd2`. -The same binary failed standalone CUDA Sigmoid on B200, independently of MAMBO. -Fresh dependency resolution retained that binary and did not fix the failure. - -The upstream ORT 1.22.0 wheel is a bounded compatibility candidate: inspection -with CUDA 12.9 cuobjdump found 158 generic SM 90 PTX units, including FP32 -Sigmoid and QuickGelu. Generic PTX provides a path to newer architectures through -[driver compilation](https://docs.nvidia.com/cuda/blackwell-compatibility-guide/index.html#application-compatibility-on-blackwell-architecture). -On 25 September 2026 it passed standalone Sigmoid and the four-image MAMBO -contract check on the RTX 3080 Ti Laptop GPU: both ONNX graphs, default TTA, -embeddings and regional/custom masks, with full optimization and no retry. -The user also confirmed the standalone CUDA Sigmoid probe passes on B200. -The user subsequently confirmed full-model B200 qualification passed for all five variants. Full quality/speed results remain outstanding. - -After pulling the helper, test on B200 from the checkout root in an isolated -environment; this leaves the CUDA 13 PyTorch campaign environment intact: +The inspected upstream ORT 1.22.0 wheel included generic SM90 PTX and passed the +standalone probe and full model qualification on B200, plus bounded laptop checks. +That supports this runtime candidate, not a universal version recommendation. +Keep its CUDA 12 libraries isolated from the CUDA 13 Torch environment: ```sh -uv venv --python 3.13 /tmp/mambo-ort-ptx -source /tmp/mambo-ort-ptx/bin/activate -uv pip install 'onnxruntime-gpu[cuda,cudnn]==1.22.0' numpy -python dev/releases/mambo_v3/probe_onnx_cuda.py +uv venv --python 3.13 /work/venvs/mambo-onnx +uv pip install --python /work/venvs/mambo-onnx/bin/python \ + 'onnxruntime-gpu[cuda,cudnn]==1.22.0' numpy ./deployment +/work/venvs/mambo-onnx/bin/python dev/releases/mambo_v3/probe_onnx_cuda.py ``` -These extras install the candidate's CUDA 12 libraries. The exact version selects -the inspected upstream wheel; it is not a general deployment pin. Keep it separate from the CUDA 13 PyTorch environment. +If needed, supply `--onnx-python /work/venvs/mambo-onnx/bin/python` when creating +the named campaign above. Run orchestration/metrics from the main activated +environment. Both interpreter inventories enter the fingerprint. The historical +separate-runtime campaign completed; it is not still awaiting results. -### Continue after the B200 probe passes - -Install only the deployment package into the existing ONNX environment, then run -qualification from the PyTorch environment. The optional `onnx_python` setting -routes both ONNX variants to the isolated interpreter, including full collection -and CPU/GPU benchmarks. Its installed dependencies are included in the campaign -fingerprint. Existing configurations without it continue to use `v3_python`. +## Progress and timing interpretation ```sh -uv pip install --python /tmp/mambo-ort-ptx/bin/python ./deployment -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-fresh-runtime/config.json \ - --onnx-python /tmp/mambo-ort-ptx/bin/python \ - --new-campaign ~/.cache/mambo-ucloud/runs-ptx +python dev/monitor_mambo_release.py /work/mambo-results/current/full ``` -This preserves models, manifests and previous results. After successful -qualification, keep the PyTorch environment activated and run: +The standalone monitor reads plans/reports and log tails without model packages. +ETA needs two observed checkpoints; startup/finalization have no reliable image +ETA, and stale checkpoints suppress estimates. Different variants run at different +rates, so current-job ETA is not a whole-campaign forecast. `--once` gives status; +Ctrl-C stops only the monitor. It does not track metrics reduction or benchmark cells. -```sh -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-ptx/config.json -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-ptx/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-ptx/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-ptx \ - --output ~/.cache/mambo-ucloud/summary-ptx -``` +Pipeline counters describe occupancy, input waits, buffer allocations and worker +durations. `preparation_worker_seconds` sums concurrent work and can exceed wall +time. `runtime_submit_seconds` excludes Torch output completion waits but includes +ONNX's synchronous runtime; CUDA stream intervals are not kernel-only time or GPU +utilization. Do not add overlapping phases or interpret low host storage-read bytes +as proof of absent network-storage waits. Pinned storage consumes host RAM. +[Pipeline decisions](../../../docs/mambo-inference-pipeline-review.md) explain the +current ownership boundaries and remaining performance limits. -The ONNX environment is in `/tmp` for this experiment; retain it for the campaign's -lifetime. Recreate and requalify it if the node's temporary storage is discarded. +## Evidence and metric policy -## Restart V3 collection with concurrent preparation - -For the 48-vCPU B200 allocation, start with **16 preparation workers and two -prefetched batches**. V3 collection now reads each image once for both SHA-256 -verification and decoding, and prepares subsequent batches (including all TTA -views) while the main thread runs inference and writes predictions. Ordering, -preprocessing and prediction aggregation are unchanged. The queue bounds prepared -image memory; it does not cache the dataset. This targets IO latency and idle GPU -time without changing model precision, batch size or postprocessing. - -Stop the old collection and cancel any queued shell follow-up commands **before -pulling this change**. Keep its results and both runtime environments. No package -installation or dataset preparation is needed. From the updated checkout: +Quality uses every original test image with global vocabulary. All metrics come +from pinned `mini_metrics`: macro accuracy/precision/recall/F1, micro accuracy, +Theil U and coverage at species/genus/family, for all and known truth. The base +`metrics` command reports unthresholded results. The presentation path adds the +same calibration/reporting split and full/support >5 conventions used for Flemming: ```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-ptx/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-prefetch \ - --decode-workers 16 --prefetch-batches 2 \ - --reuse-v2-from ~/.cache/mambo-ucloud/runs-ptx +python -m dev.releases.mambo_v3.indomain_report \ + --root /work/mambo-results/current \ + --output /work/mambo-results/presentation +python -m dev.releases.mambo_v3.indomain_speed \ + --source /work/mambo-results/summary \ + --output /work/mambo-results/presentation ``` -This inherits the separate ONNX interpreter. Completed V2 qualification/full -results are copied only after checking the invocation, inputs, environment, -relevant code and output hashes. V3 variants are requalified and recollected; -partial old V3 results remain untouched. After qualification succeeds: +`mini_metrics` selects thresholds on a disjoint calibration portion and evaluates +them on reporting rows; do not fit on the reporting portion. Retain coverage and +class-support domains alongside thresholded metrics. See +[in-domain evidence](../../../docs/mambo-indomain-evidence.md) for exact policy and +[reusable evidence](evidence-policy.md) for identities required in future comparisons. -```sh -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-prefetch/config.json -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-prefetch/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-prefetch/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-prefetch \ - --output ~/.cache/mambo-ucloud/summary-prefetch -``` +Benchmark modes are distinct: request includes loading through completed predictions; +streaming includes its bank/startup/drain; prepared diagnostics exclude input +preparation. Keep warmups, repetitions, batch/list, threads and optimized-session +profile with each result. V2 CPU uses the documented FP32 adapter and has no +qualified ONNX counterpart. Do not benchmark concurrently with heavy collection. -Monitor from another terminal: +Keep UCloud and laptop panels separate and use images/s consistently. Their image +domains differ, so differences cannot be assigned solely to hardware. For matched +hardware comparisons, configure `timing_manifest` and `timing_root` identically +before qualification. Latest B200 smoke values replace only corresponding measured +points; historical CPU/V2 points remain labelled. -```sh -python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-prefetch/full -``` +## Persistent storage and transfer -V3 logs counts and throughput/ETA approximately every five seconds. Reports -separate `input_wait_seconds`, `runtime_seconds` and `reduce_write_seconds`; -`prepare_worker_seconds` overlaps these and must not be added to them as elapsed -time. Runtime time includes first-use initialization. These counters help assess -whether preparation keeps inference supplied before changing worker or queue sizes. -In the continuous scheduler below, `--prefetch-batches 0` minimizes decoded -lookahead; encoded read-ahead remains active. - -A 256-image laptop ONNX check (batch 32; four workers before, sixteen afterward) -produced byte-identical prediction CSVs, and byte-identical TTA embeddings. -Collection elapsed time decreased from 5.49 to 4.64 seconds without TTA and from -9.41 to 7.48 seconds with default TTA and embeddings. These short checks establish -local benefit and output preservation, not B200 throughput. B200 full collection -remains to be measured. The dedicated speed benchmarks still measure the deployment -API unchanged, not this prefetched evaluation collector; all benchmark variants -run afresh, including V2. - -## Continuous IO and preparation campaign - -This supersedes the batch-at-a-time collector above. The shared deployment -`prepared_stream` scheduler reads ahead independently of decoding, prepares ready -images across batch boundaries, and emits ordered batches. Collection and -`Predictor.predict_stream` use the same scheduler. Start aggressively on the -48-vCPU B200/WEKA allocation: **256 readers, 48 preparation workers, 1,024 outstanding -images, eight prefetched batches, 2 GiB encoded-byte budget**. These are explicit -campaign settings, not portable deployment defaults. They follow the -[prior storage evidence](../../../docs/training-workflow-postmortem.md#1-storage-behavior-invalidated-small-subset-extrapolation). -Prepared views have a separate count bound; TTA multiplies their memory cost. - -Stop collection and pending shell follow-ups, push/pull the implementation, then -reuse the existing environments and original completed V2 evidence: +All example campaign/summary/presentation outputs above are under `/work`. +For an older home-cache run, copy only completed results to a mounted location; +preserve its config, all phase plans/reports/logs, samples, predictions and metrics: ```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-prefetch/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-streaming \ - --reuse-v2-from ~/.cache/mambo-ucloud/runs-ptx \ - --read-workers 256 --decode-workers 48 --read-window 1024 \ - --prefetch-batches 8 --encoded-budget-mib 2048 -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-streaming/config.json -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-streaming/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-streaming/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-streaming \ - --output ~/.cache/mambo-ucloud/summary-streaming -``` - -Monitor with `python dev/monitor_mambo_release.py -~/.cache/mambo-ucloud/runs-streaming/full`. Inspect the first roughly two minutes -of steady V3 collection before queuing the later phases. Logs report reading, -encoded-ready, preparing and prepared-image counts, reserved encoded bytes and -cumulative input-wait time. Compare changes in wait time over that interval; model -initialization and the initial fill are not steady-state evidence. If preparation -still starves inference with spare CPU capacity, the next bounded candidate is -512 readers, keeping the window and byte budget unchanged. A different setting -requires a new campaign; do not edit a qualified config mid-run. - -The old single-request timing cells remain unchanged. Additional streaming cells -use 1,024 images, the largest requested batch per device and preset, and three -observations per fresh-process trial. They include stream startup, IO, preparation, -inference, reduction and drain; integrity verification occurs before timing. -They use repeated inputs and describe warm storage, not cold WEKA throughput. -`streaming_speed.csv` exports these separately; V2 retains its original API timings -and has no new streaming cell. Keep sample-bank and execution-mode differences -visible when presenting results. Peak process memory includes both benchmark modes. - -Local validation: the aggressive settings retained byte-identical prediction CSVs -and embeddings on a 256-image ONNX CUDA/default-TTA check. That short laptop run -took about 10.8 seconds (the earlier smaller pool took 7.5 seconds); it does not -establish a speed gain on B200. The UCloud run must establish the throughput benefit. -No dependencies changed; release scripts import deployment code from the checkout. - -### Move batch assembly off the consumer thread - -The first streaming run on B200 showed 736 encoded and 256 prepared images queued, -while the old `input_wait_seconds` increased by about 8.6 seconds over a 25-second -interval. That counter included serial batch stacking on the inference thread; -it did not isolate storage waiting. Assembly now runs in a separate worker, -including release of per-image buffers. Ordered, contiguous batches are delivered -to inference without stacking there. Reader and preparation settings stay unchanged. - -Logs now show **interval** images/s and separate interval seconds for input delivery, -runtime calls and reduction/writing, plus background assembly. Background assembly -overlaps consumer work and must not be added to its timings. The pipeline counter -`queue_wait_seconds` (also exposed as `input_wait_seconds`) measures waiting for a -complete batch, including initial fill. `prepared_batches` counts complete queued -batches, and `assembling` counts images being assembled. Initial runtime loading -is still included in the first runtime interval. - -Stop the old run and queued follow-ups before pulling. Reuse the same environments, -concurrency settings and completed V2 evidence; no installation is needed: - -```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-streaming/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-assembly -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-assembly/config.json +mkdir -p /work/mambo-results +rsync -a ~/.cache/mambo-ucloud/runs-transfers/ /work/mambo-results/runs-transfers/ +rsync -a ~/.cache/mambo-ucloud/summary-transfers/ /work/mambo-results/summary-transfers/ ``` -After inspecting roughly two minutes of steady V3 progress, continue with: +`rsync -a` permits interrupted copies to be resumed while preserving directory +structure; a verified `cp -a` transfer is also sufficient. Check phase completion, +report/prediction hashes and summary consistency before packaging. Retain +`mini_metric.csv` at every rank/list for later metrics; downloaded weights and +dataset photos are not needed to integrate the results into documentation. ```sh -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-assembly/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-assembly/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-assembly \ - --output ~/.cache/mambo-ucloud/summary-assembly -``` - -The standalone monitor takes `~/.cache/mambo-ucloud/runs-assembly/full`. Both full -collection and deployment streaming benchmarks use the corrected assembly path. - -### Batch 256 with overlapped result processing - -Use this campaign for the next B200 run. All four V3 variants collect at batch -**256**, without a batch-size search. The original V2 collection invocation and -completed results remain unchanged. V3 GPU benchmarks retain their existing request -sizes and add 256; their streaming cell uses 256. All variants use the same enlarged -request timing image bank, while V2 retains its original batch sizes. - -Top-1 selection now uses a maximum instead of sorting every class. Confidence -normalization and hierarchical reduction are unchanged. Collection and the public -streaming API process results in a single ordered background worker with at most -two batches outstanding. CSV output order and failure propagation are preserved; -completion counts advance only after results have been written. Final reports are -published after the output queue drains. - -Keep 256 readers, 48 preparation workers and the 1,024-image read window. Use **one -prepared batch ahead** at batch 256: the preparation window holds at most 512 -images plus assembly temporaries, rather than nine batches of 256. TTA multiplies -prepared-image storage. The encoded budget remains 2 GiB. - -Stop the previous run and queued commands before pulling this change. No venv -update is needed. The new campaign inherits runtime paths and V2 reuse: - -```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-assembly/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-batch256 \ - --v3-batch-size 256 --prefetch-batches 1 -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-batch256/config.json -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-batch256/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-batch256/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-batch256 \ - --output ~/.cache/mambo-ucloud/summary-batch256 -``` - -Watch `~/.cache/mambo-ucloud/runs-batch256/full/torch.log`. Interval timings now -separate `hierarchy_seconds`, `prediction_seconds` and `write_seconds` for completed -background jobs. They overlap inference and must not be added to foreground times. -`output_wait_seconds` measures consumer backpressure while retiring results. -B200 qualification exercises batch 256; local output checks use laptop-sized -batches and do not establish B200 memory use or throughput. - -### Reuse native hierarchy reduction - -The PyTorch deployment adapter now retains the head's existing global rank outputs -instead of transferring species logits and recomputing their hierarchy on CPU. -Regional/custom lists use the existing `batched_scatter_logsumexp` on the model -device after species selection. TTA still averages species logits before masking -and hierarchy reduction; parent logits are not averaged across views. - -The standalone ONNX path uses cached parent groups and batched stable max/exp/sum/log -reductions in NumPy. It does not require PyTorch. Parent confidence values can differ -slightly from the previous sequential reduction because summation order changes. -Both request and streaming APIs, collection and benchmarks use these paths. -For PyTorch, device-side hierarchy work is included in `runtime_seconds`; the -background `hierarchy_seconds` now measures retrieval of the prepared ranks. -For ONNX it continues to measure CPU reduction. - -Stop the active run before pulling; no dependency installation is needed. Inherit -batch 256, the current buffers and completed V2 reuse into the updated campaign: - -```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-batch256/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-hierarchy -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-hierarchy/config.json -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-hierarchy/full -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-hierarchy/config.json -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-hierarchy \ - --output ~/.cache/mambo-ucloud/summary-hierarchy -``` - -Monitor `~/.cache/mambo-ucloud/runs-hierarchy/full/torch.log`. Existing output timing -fields and counters remain available. Requalify all V3 variants; reuse of the -unchanged V2 evidence is still checked against its original inputs and code. - - -### Reusable buffers and device staging (current campaign) - -Collection and deployment streaming now reuse assembled host buffers and two device -buffer slots. PyTorch uses pinned host buffers and a separate CUDA copy stream to -stage the next batch during inference. Rank outputs and embeddings share one packed -CPU transfer and completion wait. ONNX uses reusable device inputs with I/O binding; -copy overlap depends on its runtime, and this path does not require PyTorch. - -Stop the previous campaign and any queued follow-up commands, then pull the change. -No environment rebuild or dependency installation is required. Inherit batch 256, -256 readers, 48 preparation workers, a 4096-image window, eight prefetched batches, -and verified V2 reuse from the existing campaign: - -```sh -source .venv-mambo-runtime/bin/activate -python -m dev.releases.mambo_v3.ucloud_release qualification \ - --config ~/.cache/mambo-ucloud/runs-prefetch8/config.json \ - --new-campaign ~/.cache/mambo-ucloud/runs-transfers && -python -m dev.releases.mambo_v3.ucloud_release full \ - --config ~/.cache/mambo-ucloud/runs-transfers/config.json -``` - -After collection succeeds, use the same campaign for all subsequent stages: - -```sh -python -m dev.releases.mambo_v3.metrics \ - --collection ~/.cache/mambo-ucloud/runs-transfers/full && -python -m dev.releases.mambo_v3.ucloud_release benchmark \ - --config ~/.cache/mambo-ucloud/runs-transfers/config.json && -python -m dev.releases.mambo_v3.ucloud_summary \ - --root ~/.cache/mambo-ucloud/runs-transfers \ - --output ~/.cache/mambo-ucloud/summary-transfers +tar -czf /work/mambo-results.tar.gz -C /work mambo-results +sha256sum /work/mambo-results.tar.gz ``` -Monitor with `python dev/monitor_mambo_release.py ~/.cache/mambo-ucloud/runs-transfers/full`. -The `pipeline=` counters include host/device buffer allocations and transfer-worker -time; PyTorch also reports CUDA-event H2D time. Its `phases=` fields now include -`model_stream_seconds` (CUDA-stream elapsed time around model execution), -`d2h_device_seconds` (output-copy event time), and `download_host_seconds` (packing, -allocation and waiting for GPU results). Stream elapsed time is not kernel-only -time or GPU utilization. These measurements overlap: **do not add them together**. -Pinned buffers count against host RAM, not GPU memory. - -For a controlled staging comparison, pass `--no-device-prefetch` when creating a -separate new campaign; it applies to both collection and streaming benchmarks. -Single-request benchmark cells retain their existing execution path. - -Local validation covers CUDA buffer reuse and source lifetime, real PyTorch -predictions with global/regional lists and TTA/embeddings, and real ONNX CUDA -TTA/embedding collection. B200 throughput is not yet established for this change. - - -## Simplified preparation and Torch result completion - -The deployment runtime now fills reusable batch slices directly from preparation -workers. The separate batch-assembly executor and polling loop have been removed; -request prediction and release diagnostic helpers also avoid per-image output -allocation followed by stacking. The release geometry and pixel rounding are -preserved. These changes need no dependency or environment update. - -Torch streaming submits packed output downloads on a separate CUDA stream. The -existing result worker waits for completion before accessing CPU arrays, allowing -the inference thread to submit the next batch. ONNX still returns completed CPU -outputs from its runtime call. Both paths preserve ordered, bounded results. - -For new reports, `runtime_submit_seconds` replaces `runtime_seconds`: Torch's -value no longer includes waiting for output completion; ONNX's still includes its -synchronous execution. `output_completion_wait_seconds` measures the result -worker's D2H completion wait. `preparation_worker_seconds` replaces the removed -assembly counter and **sums concurrent worker durations**, so it can exceed wall -time. `model_stream_seconds` and `d2h_device_seconds` remain CUDA-event intervals. -None of these overlapping measurements should be summed into elapsed time. - -Existing completed campaign results remain valid historical evidence. A new -campaign is needed only to measure the revised implementation; do not overwrite -`runs-transfers` or mix its benchmark reports with new measurements. Completed V2 -qualification/full results can still be reused with `--reuse-v2-from`. See the -[implementation follow-up](../../../docs/mambo-inference-pipeline-review.md#implementation-follow-up) -for local qualification and the limits of the current changes. +Transfer the archive and digest, verify after download, and retain immutable raw +results alongside derived tables/figures. Archive integrity is separate from +successful campaign completion and metric validity. diff --git a/dev/ucloud/README.md b/dev/ucloud/README.md index bf336df..0467e1f 100644 --- a/dev/ucloud/README.md +++ b/dev/ucloud/README.md @@ -1,856 +1,261 @@ -# UCloud global_lepi training comparison - -For findings from the completed production campaign and proposed next-run -improvements, see the [workflow post-mortem](../../docs/training-workflow-postmortem.md). -The commands below retain historical comparison profiles and pins; they are not -a newly qualified production recipe for every node. - -Run inside **one allocated node**, with 1, 2, 4 or 8 visible GPUs. More than one -GPU uses one `torchrun` process per GPU and the package's existing DDP trainer -(including SyncBatchNorm). One GPU uses ordinary training. Do not invoke the -launcher once per GPU or wrap it in a multi-task `srun`. - -Allocate the job manually in the UCloud web interface, connect to that node over -SSH, install the environments below, then run the launcher from the shell. Local -Slurm inside the allocation is unnecessary and cannot allocate further nodes. -Use `tmux` or another persistent shell if an SSH disconnect would stop the process; -this does not extend the allocation's lifetime. - -UCloud's [PyTorch app](https://docs.cloud.sdu.dk/Apps/pytorch.html) supports a Bash -batch script and selection of GPU machine types. Mounted volumes appear under -[`/work`](https://docs.cloud.sdu.dk/guide/submitting.html). Use the actual paths -shown in your job. No Gefion account, partition, GPU type or Slurm directives are -assumed here. The scripts perform no installation, submission or paid allocation. - -## Comparison and controls - -The source configuration is `publication/experiments/config_temp.yaml` (singular -`publication`), a local experiment file. This protocol keeps 10 epochs, FP16 AMP, -class weighting, 0.25 warmup epochs and eight loader workers per rank. It replaces -ViT with torchvision `efficientnet_v2_s` (EfficientNetV2-S) and fixes the -`HierarchicalClassifier` head, species/genus/family, equal loss weights, normalized -prototypes, hidden layer, dropout 0.1, MuonAuxAdamW, learning rate 0.001, weight decay -0.01, regularizer 0.1 and automatic smoothing. Resizing is explicitly 384 pixels, -the backbone's preferred crop size. The initial pretrained backbone and randomly -initialized head are saved **once per seed by master**, then loaded by both branches. -Smoothing values per hierarchy level are recorded in `dataset.json`. - -**Batch size 64 is global**, so it becomes 32/16/8 per rank for 2/4/8 GPUs. Learning -rate is not scaled. Changing GPU count still changes SyncBatchNorm, sampling and -kernel behavior; compare rows within an allocation, not as identical trajectories -across GPU counts. Three paired seeds are the default. Run order is shuffled within -each seed using a reproducible schedule. RNG streams are not guaranteed identical -across implementations, but starting model tensors are identical. No resume or -checkpoint averaging is used in measured runs. - -| Variant | Branch | Change from eager control | -| --- | --- | --- | -| `master_eager` | master | Baseline | -| `quant_eager` | quant | Branch changes with all optional acceleration off | -| `quant_prefetch` | quant | CUDA transfer lookahead | -| `quant_compile_model` | quant | Default model compilation | -| `quant_compile_optimizer` | quant | Optimizer compilation | -| `quant_combined` | quant | Prefetch plus both compilation options | - -Optional variant names: `quant_model_graphs` (reduce-overhead model mode), -`quant_optimizer_graphs` (optimizer graph replay), and **`quant_int8` (one GPU -only)**. For a single-GPU INT8 comparison, set `gpus: 1` and include at least -`master_eager`, `quant_eager`, `quant_int8`. The runner rejects INT8 with DDP. -These are target-machine qualification experiments; a supported flag is not a -guarantee that a compiled configuration succeeds or is faster on this hierarchy. -Failures remain visible. No automatic fallback is used. - -Muon, normalized heads, EMLA/class weighting, regularization and smoothing already -exist on the pinned master. They are held constant rather than mislabeled as new -quant features. Their quality/tuning ablations belong to the separate -[feature-validation protocol](../../docs/training-feature-validation.md). -EMA is disabled. CPU PTQ/QAT are inference experiments. Full dataset RAM caching -is excluded because it replicates the dataset per DDP rank and can exhaust node -memory; both branches use uncached image loading. W&B is disabled to avoid requiring -credentials; local logs and checkpoints are retained. +# UCloud training comparison -## Fresh job setup +Run inside one manually allocated UCloud node, with mounted data and results under +`/work`. Connect by SSH and use `tmux` for long commands; it does not extend the +allocation. These helpers do not submit jobs or install a scheduler. + +This harness retains historical master/quant comparisons. Quantization is merged; +the labels identify **pinned packages**, not current branch tips. The completed +production recipe and lessons are in the +[training post-mortem](../../docs/training-workflow-postmortem.md). For a new +production run use the [DDP/production guide](ddp.md); for MAMBO deployment testing +use the [release runbook](../releases/mambo_v3/ucloud-release.md). -For the first bounded test, select one MIG in UCloud and mount the global_lepi -dataset. Internet access is needed for the source checkout, Python dependencies -and the first pretrained-weight download. CPU and RAM come with the selected -GPU product; the host totals reported inside the container are not your budget. +## Fresh job setup -Clone the branch containing the current harness, then install uv if the image -does not already provide it. Follow the [official uv installation instructions](https://docs.astral.sh/uv/getting-started/installation/). +Install uv, clone the repository, select the reviewed harness revision, then let +the setup helper create the dedicated environments. Keep the harness checkout +separate from the pinned packages it installs. ```bash -git clone --branch quant https://github.com/asgersvenning/mini_trainer.git /work/mini_trainer -# Only if `uv --version` is unavailable: +# Install uv only if the node does not already provide it. curl -LsSf https://astral.sh/uv/install.sh | sh export PATH="$HOME/.local/bin:$PATH" - +git clone https://github.com/asgersvenning/mini_trainer.git /work/mini_trainer cd /work/mini_trainer +git checkout YOUR_REVIEWED_REF bash dev/ucloud/setup.sh /work/YOUR_DATASET/YOUR_METADATA.parquet -``` - -The setup script reads the pinned commits from `qualification.json`, exports the -quant commit's lockfile into `/work/requirements-mt.txt`, creates two Python 3.12 -environments and checks their dependencies. It uses explicit indexes and required -hashes, stops on the first error, and generates `/work/qualification.json` with the -supplied dataset path and a new smoke-test output path. It does not start training -or touch the dataset. No editable package is installed, and the checkout stays on -the harness branch. Do not reset it to the older pinned package commits. - -`MT_WORK_ROOT` overrides `/work`, `MT_CONFIG` chooses another generated config path, -and `MT_TORCH_BACKEND` selects `cu126`, `cu130` (default) or `cu132`. A failed setup can -be rerun: it synchronizes only its dedicated `venvs/mt-master` and `venvs/mt-quant` -environments, removing leftover packages there. An existing generated config is -never overwritten. The UV download cache defaults to `/work/.cache/uv`; installation -time and disk space depend on the node and network and are outside the test budget. - -Once setup succeeds: - -```bash -cd /work/mini_trainer/dev/ucloud +source /work/venvs/mt-quant/bin/activate export TORCH_HOME=/work/.cache/torch -bash launch.sh /work/qualification.json --stage plan -bash launch.sh /work/qualification.json --stage prepare && \ - bash launch.sh /work/qualification.json --stage train -bash launch.sh /work/qualification.json --stage summary -``` - -Preparation and both eager runs share a 30-minute wall-clock budget. It does not -terminate the UCloud job; choose the allocation lifetime separately, allowing for -installation. See the qualification and resource discussion below before expanding -the matrix. The manual setup below remains available for full-dataset comparisons. - -## Fresh environment setup (manual) - -Use the same Python and exact dependency versions for both packages. The runner -checks installed VCS commit IDs and dependency inventories. No editable installs: -running from the harness directory must import the selected installed branch. -The node image must provide a working NVIDIA driver and a C++ compiler (`c++`, or -the executable named by `CXX`); the preflight checks both CUDA execution and compiler -availability. Python wheels do not provide the NVIDIA kernel driver. -The default commits are the local branch tips inspected when this harness was -prepared, not a claim about the latest remote branches: - -```bash -MASTER_SHA=2ebbe39f2365bfea482d7ebc3d000cf4d2044918 -QUANT_SHA=4ea6b9613fc29a8e33ef72f28885f4e2a0e5906b -REPO_URL=https://github.com/asgersvenning/mini_trainer.git -``` - -In a checkout of `QUANT_SHA`, export its lockfile with an explicit CUDA backend. -Choose `cu126`, `cu130` or `cu132` according to the allocated GPU and driver; do -not choose CPU wheels. `cu130` below is an explicit example, not GPU qualification. -Keep the NVIDIA driver information from `nvidia-smi` with your results. - -```bash -uv export --locked --no-dev --no-emit-project --extra recommended --extra cu130 --extra export --extra quantization --output-file /work/requirements-mt.txt -uv venv --python 3.12 /work/venvs/mt-master -uv venv --python 3.12 /work/venvs/mt-quant -export UV_LINK_MODE=copy -unset UV_TORCH_BACKEND -uv pip install --python /work/venvs/mt-master/bin/python --index https://pypi.org/simple --default-index https://download.pytorch.org/whl/cu130 --index-strategy unsafe-first-match --require-hashes -r /work/requirements-mt.txt -uv pip install --python /work/venvs/mt-quant/bin/python --index https://pypi.org/simple --default-index https://download.pytorch.org/whl/cu130 --index-strategy unsafe-first-match --require-hashes -r /work/requirements-mt.txt -uv pip install --python /work/venvs/mt-master/bin/python --no-deps "mini_trainer @ git+$REPO_URL@$MASTER_SHA" -uv pip install --python /work/venvs/mt-quant/bin/python --no-deps "mini_trainer @ git+$REPO_URL@$QUANT_SHA" -uv pip check --python /work/venvs/mt-master/bin/python -uv pip check --python /work/venvs/mt-quant/bin/python -``` - -Both pinned commits must be available in the Git repository you install from. -At preparation time the public `quant` tip was `f5c69e7cab2bfde8a5467026b293858b93e628f9`; -the pinned local tip contains two later commits. Publish those commits before -using the HTTPS installation above, or transfer a Git bundle without publishing: - -```bash -# On the development machine; transfer this bundle and dev/ucloud to UCloud. -git bundle create /tmp/mini-trainer-ucloud.bundle master quant -# On UCloud, after transferring it: -git clone /work/mini-trainer-ucloud.bundle /work/mini-trainer-source -REPO_URL=file:///work/mini-trainer-source -# Then use the same pinned uv pip install commands above with this REPO_URL. ``` -Keep the harness separately: it was added after the pinned quant commit and is -not installed by `uv pip install mini_trainer`. Use a checkout containing -`dev/ucloud/launch.sh`, not a checkout reset to `QUANT_SHA`, for the copy below. -Save the exported requirements. -The export and quantization extras are installed equally in both environments so -optional follow-ups do not change the dependency comparison. -Use the same backend in the export's `--extra` and the installs' explicit CUDA -index URL. Exported requirements do not carry the custom PyTorch index. -PyPI is searched first, then the CUDA index when the pinned version is absent. -Keep hashes enabled. Avoid `--torch-backend` for this exported lock: it also -redirects `torchao`, which is locked from PyPI, and can trigger an unpinned -requirement error in a fresh environment. Stop on any installation failure before -continuing to the next command. The copy link mode avoids cross-filesystem -hardlink warnings; it does not affect training speed. - -Preparation downloads torchvision's pretrained weights if absent. For offline -jobs, populate a shared writable `TORCH_HOME` ahead of time using the same locked -torchvision version. Allow CPU RAM/disk for the full hierarchical initial models, -three seeds, optimizer checkpoints and compiled caches. Do not assume INT8 makes -the convolutional backbone or all optimizer state integer. +Replace the revision and metadata placeholders. The node needs a working NVIDIA +driver and C++ compiler; preflight checks CUDA execution and compiler availability. +Internet or prepared caches are needed for packages and pretrained weights. +Mounted paths/allocation products are described in the +[UCloud guide](https://docs.cloud.sdu.dk/guide/submitting.html). + +`setup.sh` reads the template's immutable package commits, exports the quant pin's +lock, installs matching dependencies into dedicated Python 3.12 environments, and +writes `/work/qualification.json`. It does not train or modify the dataset. It +requires full Git history containing those pins and does not install editable +packages. Never reset the harness checkout to an older package pin. + +| Setup override | Purpose | +| --- | --- | +| `MT_TEMPLATE` | Profile JSON; defaults to the adjacent `qualification.json` | +| `MT_CONFIG` | New generated node configuration; existing files are not overwritten | +| `MT_WORK_ROOT` | Persistent environment/result root; default `/work` | +| `MT_TORCH_BACKEND` | `cu126`, `cu130` (default), or `cu132`; choose for the node | +| `MT_REPO_URL` | Package Git source, including a transferred `file:///work/...` clone | +| `UV_CACHE_DIR` | Package cache; default `/work/.cache/uv` | + +Setup can retry partial dependency installation in its dedicated environments. +It uses required hashes, explicit PyPI/CUDA indexes and copy link mode. Do not add +`--torch-backend` to the exported requirements install: that can redirect the +PyPI-locked TorchAO dependency. The helper is the maintained installation recipe; +inspect `requirements-mt.txt` and installed inventories rather than duplicating +its commands. For offline source transfer, create a Git bundle containing the +template's pinned commits and set `MT_REPO_URL` to the resulting node-side clone. ## Configure and launch -If you cloned a branch containing this harness directly onto the node, run from -that checkout's `dev/ucloud` directory. No `/work/comparison` directory or copy is -needed. Keep the checkout there; the launcher resolves its sibling scripts itself -and runs workers outside the checkout with the configured installed interpreters. -For example: - -```bash -cd /work/mini_trainer/dev/ucloud -``` - -The following copy instructions are an alternative for transferring just the harness -when environments already exist. `setup.sh` requires a Git checkout with the pinned -package commits and is intended for the fresh-job workflow above. -First copy the harness and example configuration onto the node. If a checkout -containing `dev/ucloud` is already on the node, run from that checkout's root: - -```bash -mkdir -p /work/comparison -cp -i dev/ucloud/launch.sh dev/ucloud/compare.py dev/ucloud/worker.py \ - dev/ucloud/export_followup.py dev/ucloud/comparison.json dev/ucloud/qualification.json /work/comparison/ -``` - -Otherwise, run this from the checkout root on your development machine, replacing -`UCLOUD_SSH_HOST` with the SSH destination you use for the allocated node (and -adding your usual SSH port/key options if needed): - -```bash -ssh UCLOUD_SSH_HOST 'mkdir -p /work/comparison' -scp dev/ucloud/launch.sh dev/ucloud/compare.py dev/ucloud/worker.py \ - dev/ucloud/export_followup.py dev/ucloud/comparison.json dev/ucloud/qualification.json UCLOUD_SSH_HOST:/work/comparison/ -``` - -Copy once before configuring; preserve an already edited node configuration when -updating scripts. Creating `/work/comparison` alone does not populate it. Keep the -three Python scripts alongside `launch.sh`, which resolves them relative to itself. - -On the node, edit `/work/comparison/comparison.json`: set `parquet`, `output`, both -Python paths and `gpus`. -The Parquet must sit beside `images//` as expected by -`mini_trainer`. Preparation checks every image path, rejects duplicates and missing -labels, freezes the taxonomy/index, and retains the existing `set` mapping: -`0=test`, `1=validation`, other numeric sets=train. Non-numeric sets are excluded by -the existing parser. No random re-splitting occurs. Keep image bytes immutable; -preparation checks file existence, not hashes or complete decoding of the images. - -```bash -cd /work/comparison -bash launch.sh comparison.json --stage plan -bash launch.sh comparison.json --stage prepare -bash launch.sh comparison.json --stage train -bash launch.sh comparison.json --stage summary -``` - -`prepare` requires a **new** output directory and verifies CUDA in both environments. -It is CPU-heavy when parsing and initializing models. Start with the bounded -qualification profile below: one epoch of the full six-million-image dataset is -still a long run. Eight workers per rank can mean 64 workers on eight GPUs; reduce -consistently if the allocated CPU or shared-memory budget requires it. - -### Bounded qualification on one MIG device - -Use `qualification.json` for the first setup test. Edit its dataset path and -environment entries to match your node, and choose a new output path. It selects -one visible CUDA device, batch size 32, two loader workers, one epoch and one seed, -with both eager controls. The source splits are preserved, and a fixed seed selects -2,048 training, 512 validation and 128 test rows by uniform reservoir sampling within -each split. Both branches use exactly the same saved sample and starting weights. -Test images are checked for existence but are not used in training or validation. - -This gives **64 training batches and 16 validation batches per branch**. Selection -still streams the source Parquet once, but retains only 2,688 rows plus one batch -in memory. Only selected image paths are checked. The taxonomy and classifier head -are built from the selected rows, reducing the pinned master's expensive normalized -head initialization. Duplicate/path validation covers the sample, not the entire -source dataset. The selected Parquet, mappings, index and seed are retained and -hashed with the other preparation artifacts. - -This is an infrastructure smoke test, **not a full-taxonomy performance or quality -comparison**. Random sampling can leave validation species absent from the training -sample. Do not interpret its accuracy, loss weighting or timing as representative -of the complete dataset. Results carry `scope=qualification_subset`, including in -the paired report. Omitting `qualification` preserves the full-dataset workflow. - -```bash -# From the node's checkout, after editing qualification.json: -cd /work/mini_trainer/dev/ucloud -bash launch.sh qualification.json --stage plan -bash launch.sh qualification.json --stage prepare && \ - bash launch.sh qualification.json --stage train -bash launch.sh qualification.json --stage summary -``` - -The profile's `budget_seconds: 1800` sets one wall-clock deadline beginning at -`prepare`, shared by preflights, preparation and both training runs. Time between -commands also counts; chain preparation and training as above. The launcher stops -active workers when the deadline expires (cleanup may take up to 15 additional -seconds), records an interrupted/timed-out run when applicable, and preserves all -logs. This is a time bound, not a promise that both runs finish on every allocation. -`timeout_seconds` additionally caps each worker call. Summary remains available -after the deadline. The budget does not stop the UCloud allocation or include manual -environment installation; set the job lifetime in UCloud separately. - -After the eager pair passes, use another new output and add `quant_prefetch` first. -Test compilation variants separately: cold compilation can consume much of a short -budget. For timing comparisons, increase to at least two epochs to distinguish -first-use costs from subsequent execution, and keep sample seed, batch size, -image size, resource allocation and thread settings fixed across variants. Full -taxonomy, full-data convergence, INT8 and multi-GPU/DDP qualification remain separate. - -### Job resources and bottlenecks - -[UCloud's resource guide](https://docs.cloud.sdu.dk/guide/resources-products.html) -describes one MIG as one seventh of a B200 and allows one to four MIGs per job. -The UI's `4/7` selection provides four separate `1g.23gb` devices, not a single -device with four times the memory. CPU and system RAM allocations scale with the -selected product. Use the vCPU/RAM values shown for that selection; `nproc` and -`free` can expose host totals (384 vCPUs and roughly 2.2 TiB on this node type). -Keep the existing one-MIG allocation for the initial eager test; four devices -would additionally exercise DDP and would not accelerate the serial preparation. - -The profile's batch size 32 leaves more headroom than the observed full-head -batch-64 run, which used about 16 GiB of a 20.5 GiB device. Keep 384-pixel inputs to -exercise the intended preprocessing. Two loader workers are a conservative starting -point for a fractional allocation. The reported 34 GiB `/dev/shm` is not a small -default shared-memory mount; there is no evidence so far that it needs increasing. -Avoid full-dataset RAM caching. If loaders later starve the GPU, compare two and -four workers within the actual CPU quota before increasing further; keep the same -worker count for paired branches. Container CPU quotas may be lower than affinity. - -The launcher defaults to one CPU math thread and one compiler worker per rank. -Changing `OMP_NUM_THREADS` and `MKL_NUM_THREADS` before launch affects both branches; -two math threads can be tested if the allocated CPU budget leaves room alongside -the loaders. Do not set them from the host CPU count. Preflight records the actual -PyTorch thread count, visible CPU affinity count and shared-memory capacity. Keep -the pretrained weight cache (`TORCH_HOME`) on persistent writable storage to avoid -repeated downloads. If file I/O remains dominant, stage only the small sample's -images on confirmed fast node-local storage for a separate, identically staged -comparison; moving the full dataset is unnecessary for a smoke test. - -### Preparation progress and interrupted runs - -The launcher prints the preflight and preparation log paths. `prepare.log` includes -timestamped sampling, taxonomy, path-checking, index-writing, hashing and model -construction messages, with periodic counts while scanning and checking paths. -CPU model construction can still be silent inside the pinned package's initializer. -JSON is written incrementally, and per-image metadata is released before building -starting models to reduce preparation's temporary memory requirements. +From the repository root: ```bash -output_dir=$(python3 -c 'import json; print(json.load(open("qualification.json"))["output"])') -tail -f "$output_dir/prepare.log" +bash dev/ucloud/launch.sh /work/qualification.json --stage plan +bash dev/ucloud/launch.sh /work/qualification.json --stage prepare && +bash dev/ucloud/launch.sh /work/qualification.json --stage train +# Keep failure evidence: summary can run even after an unsuccessful train stage. +bash dev/ucloud/launch.sh /work/qualification.json --stage summary ``` -`prepared.json` is the completion marker. Its absence can mean preparation is still -running; check the original launcher and worker processes before starting another -attempt. An existing output cannot be prepared again, and training now reports an -explicit incomplete-preparation error. Preserve an interrupted attempt and use a -new output path. Ctrl-C stops the worker process group and records `interrupted` -for an active training run; it exits with code 130 without a Python traceback. -Neither interrupted nor timed-out runs enter paired completed-run comparisons. - -`--only quant_eager_seed42` selects a planned run. Run `train` again to skip -completed, checksum-verified runs and continue pending ones. Failed/interrupted -runs are preserved and block reuse of their names: use a new output directory for -a repeated comparison. Do not mix partial/resumed timings into a complete-run row. -The timeout is per run (default 32 hours), not a node reservation. Set the UCloud -job duration for preparation plus all runs. Set `CUDA_VISIBLE_DEVICES` to the -allocated devices if needed; the launcher does not overwrite it. - -The launcher defaults to one CPU math thread and one compiler worker per rank. -Set `TORCH_HOME` and, if -needed, `TMPDIR` to sufficiently large writable volumes before launching. Compiler -caches are isolated per run/rank so first-use compilation is charged to that run; -filesystem page cache and hardware temperature are not reset between runs. -Compiler caches default to unique directories in `/tmp`, recorded per rank in the -run directory. Set `MT_COMPILER_CACHE_ROOT` to a larger writable directory if -needed; it must contain no whitespace because the C++ compiler toolchain can -misparse cache paths. Dataset and result paths may contain spaces. Even eager -model runs can compile existing augmentation kernels. Remove recorded cache -directories after the experiment if their disk space is needed. -Training output is redirected to the printed `console.log` path; use `tail -f` -from a second SSH session to follow it. +Review `parquet`, new `output`, environment paths/commits, GPU count, batch and +worker settings in the resolved JSON. The launcher runs installed packages outside +the checkout. Use one launcher per node: multiple visible GPUs use one torchrun +process per GPU; a single device uses ordinary training. Do not wrap the launcher +in another multi-task launch. Native INT8 variants reject DDP. + +Metadata must be beside `images//`. Preparation preserves +existing `set` values: 0=test, 1=validation, other numeric sets=train; the current +parser excludes nonnumeric sets. It freezes taxonomy/index and checks selected +paths, duplicates and labels. It does not hash/decode all image bytes; keep inputs +immutable. Test records are not used for training or validation. + +**The shipped qualification is an infrastructure smoke.** It uses one visible +CUDA device (including one MIG slice), batch 32, two loader workers, one epoch and +seed 42, with both eager controls. Reservoir sampling preserves splits and selects +2,048 train / 512 validation / 128 test records. Only these paths are inspected; +taxonomy is sample-derived. Missing training species in validation and the smaller +head make its quality/throughput unrepresentative of full-data training. Reports +identify `scope=qualification_subset`. + +Preparation and both runs share a 1,800-second deadline from `prepare`; pauses +between commands count. Per-worker limits and up to 15 seconds termination cleanup +are separate. Installation and the UCloud reservation lifetime are outside that +budget. One full-data epoch is not a substitute for this small qualification. + +## Profiles and comparison controls + +Choose a profile for a decision, copy it to a new node config, and review its +pins/paths before preparation. Use `MT_TEMPLATE` when its packages differ from the +installed environments. Do not treat the following as a mandatory experiment sequence. + +| Profile | Scope | +| --- | --- | +| [qualification.json](qualification.json) | Small eager-pair environment and lifecycle smoke | +| [comparison.json](comparison.json) | Full-data, three-seed eager/prefetch/compilation comparison | +| [experiment.json](experiment.json) | Four-epoch 4,096/1,024/128 subset; eager and prefetch | +| [compilation.json](compilation.json) | Same subset, model compilation | +| [optimizer-compilation.json](optimizer-compilation.json) | Same subset, optimizer compilation alone | +| [combined-int8.json](combined-int8.json) | Staged model compile → optimizer compile → prefetch → native INT8, one GPU | +| [figures.json](figures.json) | Two epochs with required diagnostics; select `quant_compile_model_seed42` | +| [ddp.json](ddp.json) | Separate full-head DDP and production handoff | + +The comparison keeps EfficientNetV2-S at 384 pixels, normalized hierarchical +species/genus/family heads, equal loss weights, hidden layer/dropout, MuonAuxAdamW, +class weighting, regularization and smoothing fixed. The pinned master already has +those features; they are not quantization innovations. Master creates one initial +pretrained-backbone/random-head checkpoint per seed for both packages. Starting +tensors match; implementation RNG trajectories need not. + +`global_batch_size` is **global**: 64 becomes 32/16/8 per rank on 2/4/8 GPUs. +Learning rate is not automatically scaled. GPU count changes sampling/SyncBatchNorm +and kernels, so compare paired variants within an allocation. Run order is +reproducibly shuffled per seed; no checkpoint averaging or resumed timing is used. + +The main controls are `master_eager` and `quant_eager`. Optional variants add +`quant_prefetch`, `quant_compile_model`, `quant_compile_optimizer`, `quant_combined`, +model/optimizer graphs, or single-GPU `quant_int8`. In the combined profile, +`quant_compile_both` adds optimizer compilation, `quant_float_combined` adds prefetch, +and `quant_int8_combined` adds native INT8. “Float” retains FP16 AMP over ordinary +floating parameters. INT8 covers eligible Linear modules, not the whole backbone; +inspect its coverage report. No automatic fallback hides failed variants. + +Templates disable EMA and full-dataset RAM caching. Diagnostic subset profiles may +disable figures; that makes their timings incomparable with figures-enabled runs. +Preserve full diagnostics and W&B when qualifying production. Feature/quality +ablations belong in the [separate protocol](../../docs/training-feature-validation.md). + +## Resources, progress and recovery + +Use the allocation's CPU/RAM limits, not host-wide `nproc`/`free` totals. Inspect +`nvidia-smi` for actual GPU/MIG topology. Read concurrency, DataLoader processes, +math threads and compiler workers consume different resources. The launcher defaults +to one CPU math thread and compiler worker per rank; explicit OMP/MKL settings +affect both branches. Size decode workers to the allocation; latency-bound shared +storage can warrant far more outstanding reads, as the production post-mortem +demonstrates. Avoid replicating a full decoded dataset per DDP rank. + +Keep caches on sufficiently large writable storage. Compiler caches are isolated +per run/rank and their paths are recorded; `MT_COMPILER_CACHE_ROOT` must contain +**no whitespace** because of compiler tooling. Dataset/result paths may contain +spaces. Cold compilation counts toward each run; shared filesystem caches and +device temperature are not reset. + +The launcher prints `prepare.log` and run `console.log` locations. Preparation logs +sampling, taxonomy, checking/hashing and model construction; CPU initialization may +still be silent. `prepared.json` is the completion marker. If absent, inspect live +processes/logs before restarting. Preparation requires a fresh output directory; +preserve incomplete attempts rather than deleting evidence. + +Run `train` again to skip completed, checksum-verified runs and continue pending +ones. `--only quant_eager_seed42` selects one planned run. Failed/interrupted names +cannot be reused: use a new comparison output. Ctrl-C terminates the process group +and records interruption; timeout stops the controller. Do not reset deadlines or +mix partial/resumed timing into complete-run rows. Summary remains available. + +With `require_finite_losses: true`, missing/malformed/nonfinite epoch loss rows +produce `invalid_metrics` even after exit zero. Logs/checkpoints/timings remain, +but automatic successful-pair reports exclude the run. A saved-loss audit does not +prove every intermediate tensor was finite. A missing valid master control can +leave `paired.json` empty while direct quant comparisons remain in the CSV. ## Results and interpretation -`comparison.csv` contains wall time, total training-phase time, first and later -epoch times, maximum per-rank allocated CUDA memory and best validation selection -metric. `paired.json` gives wall speedup and validation differences against the -same-seed master control. Retain each seed; three seeds support an initial paired -comparison, not a precise general performance claim. Compare acceleration rows -against `quant_eager` as well to isolate optional-feature effects. - -Each run retains `console.log`, `launch.json`, `result.json`, per-rank phase JSONL, -and `model/` with the trainer's configuration, summaries and `weights/best.pt` plus -training checkpoints. Wall time includes startup, loading, compilation, evaluation, -logging and saving; preparation is outside that measurement. Synchronized phase -timings include logger work. The harness disables the logger's per-step CUDA peak -reset so phase peaks cover all steps. These peaks exclude earlier model/optimizer -construction; use UCloud's resource report or `nvidia-smi` for whole-job/process -memory. CUDA allocator bytes are not total device memory or node RAM. - -The built-in selection metric is the trainer's leaf-level validation accuracy; -DDP's padded validation sampler can repeat a few examples. It is not a full -macro/per-class quality study. Test data is frozen but never used by this training -runner. Choose configurations using validation first, then perform a separate, -non-distributed held-out evaluation for per-level accuracy, rare-class recall, -probability quality and uncertainty. Preserve failed and slower configurations. - -## ONNX follow-up using these checkpoints - -After training, use the **quant environment** to export a selected floating-point -checkpoint (including a master-trained checkpoint). This keeps the deployment -toolchain fixed while comparing learned weights: - -```bash -/work/venvs/mt-quant/bin/python /work/comparison/export_followup.py /work/results/global-lepi-ddp quant_eager_seed42 -``` - -This exports the actual hierarchical evaluation forward, runs dynamic-batch parity, -and compares CPU ONNX Runtime with reloaded FP32 PyTorch on four real validation -images through the checkpoint preprocessor. It retains the complete ONNX bundle, -source checkpoint hash, preprocessing description, image hashes, and -`validation-example.npz`. The destination must be new. It does not rerun training -or access test images. - -A standalone environment with NumPy and ONNX Runtime can replay the saved inputs: - -```python -import json -import numpy as np -import onnxruntime as ort - -bundle = "/work/results/global-lepi-ddp/runs/quant_eager_seed42/onnx" -with open(f"{bundle}/manifest.json") as handle: - manifest = json.load(handle) -session = ort.InferenceSession(f"{bundle}/model.onnx", providers=["CPUExecutionProvider"]) -with np.load(f"{bundle}/validation-example.npz") as example: - outputs = session.run(None, {manifest["input"]["name"]: example["images"]}) - for i, output in enumerate(outputs): - np.testing.assert_allclose(output, example[f"output_{i}"], rtol=1e-4, atol=1e-5) -``` - -This establishes a small real-image export/inference parity check, not target-GPU -latency, dataset-wide quality or a standalone image decoder. Follow the -[ONNX guide](../../docs/onnx.md) and existing -[deployment benchmark workflow](../benchmarks/inference.md) for provider placement, -warmup/repeated timing, held-out inference and INT8 export. Native INT8 checkpoints -require their explicit CUDA-reference export path and are rejected by this FP32 -follow-up. Calibrate PTQ on training images only. - -## Local validation and limits - -The bounded qualification increment has 16 focused passing cases covering the -bootstrap's success/failure flow with a fake installer, reproducible split sampling, -CPU preparation/training/reload with real EfficientNetV2-S, artifact checks, -interruption records, and deadline termination of a real worker. The core harness -tests also passed against the pinned master source. The bootstrap's real locked -export and dependency-sync dry run resolved the Python 3.12 CUDA 13.0 environment; -a complete fresh GPU environment was not installed locally. - -Static checks passed. The repository-wide run completed its benchmark group, then -stalled in a spawned loader test in the sandbox; the remaining suite was rerun -outside the sandbox with one CPU math thread: 377 passed, 149 skipped, and the known -EMA expected failure. Skips include unavailable GPU/optional/slow coverage. Warnings -include upstream deprecations and missing optional dendrogram plotting dependencies. -There is no new B200/MIG runtime measurement for the bounded profile yet. - -Initial harness validation, before the bounded profile: - -The launch planner, input freezing, completed-run skipping, shell syntax, Ruff and -import contracts were checked. A small Parquet fixture ran through preparation, -one CPU training epoch and checkpoint reload with the real EfficientNetV2-S -hierarchical model on both the current quant code and pinned master source, -without downloading pretrained weights. The ONNX follow-up passed dynamic-batch -and four-image CPU Runtime parity using the resulting quant checkpoint. - -Focused harness, training-state, integration and ONNX checks passed: 108 tests -across the validation runs, 43 hardware/optional-dependency skips and the known EMA -expected failure. CPU DDP passed when rerun outside the sandbox's socket -restriction. The repository-wide suite was interrupted in an unrelated long-running -benchmark; it was not completed. No GPU was available locally. These checks do not -establish CUDA/DDP compilation, INT8 correctness or global_lepi convergence and -throughput on UCloud; run the qualification configuration there first. - -## Expanded single-GPU experiment and validation-loss diagnosis - -`experiment.json` increases the qualification to 4,096 train / 1,024 validation / -128 test images and four epochs. Existing split assignments remain intact; the -sample builds its own taxonomy, so this still does not measure full-head quality. -It keeps batch 32, two loader workers, 384 pixels, seed 42 and the same pinned -packages. The three variants are master eager, quant eager and quant prefetch. -Prefetch remains diagnostic after an observed first-epoch validation NaN; finite -training losses do not establish that validation is numerically sound. - -There are 128 training batches and 32 validation batches per epoch. Compare the -mean of epochs 2–4 (`later_epoch_mean_seconds`), and retain first-epoch and total -wall times separately. The expanded run measured about 31 seconds for the first -training epoch and 25.5 seconds for later epochs, but its first validation phase -(including figures) took 151 seconds and the run exceeded five minutes. -The template now sets `figures: false` for every variant, bypassing confusion, -class-distance and dendrogram figures (including species-name lookups). Scalar -validation metrics, losses, checkpoint selection and saving still run. Existing -configs default to figures enabled. This setting only changes the dedicated -harness worker; no package reinstall is required. Allow roughly 2–3 minutes per -variant based on those training times, with additional time possible for cold -image reads and startup. Whole-run and validation-phase timings are not directly -comparable to older runs with figures enabled. -Each worker has a 300-second limit; timeout terminates the experiment rather than -silently shortening its epochs. Process cleanup can take another 15 seconds. -The overall prepare/train budget is 1,800 seconds, including pauses between stages. -A fresh job is unnecessary; pull the harness update and use a new output directory. - -`require_finite_losses: true` audits all expected training and validation epoch -rows in `model/logs/summary.csv`. Missing, malformed or non-finite total/per-level -losses produce `status=invalid_metrics` and `loss_check=failed`, even with exit code -zero. `result.json` identifies the affected epoch and phase. Checkpoints and timing -artifacts remain available, but such runs are excluded from successful paired -comparisons. This is a recorded-loss check, not a claim that the optimizer failed, -nor a guarantee that every intermediate tensor was finite. Existing configs retain -their previous behavior unless the flag is enabled. - -First replay the affected checkpoint in four fresh processes. This uses the frozen -validation images, training class frequencies, smoothing and saved preprocessing. -FP16 means FP32 model parameters with FP16 autocast; FP32 disables autocast and -builds the criterion in FP32. No optimizer, augmentation or training runs. Each -case records parameter finiteness, per-batch input/output/loss finiteness and input -and label hashes under a new output directory. It never rewrites the old run. -Use the pinned quant interpreter, with the same thread settings as the launcher: - -```bash -cd /work/mini_trainer -git pull --ff-only -export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 -for precision in fp16 fp32; do - for loader in eager prefetch; do - replay_args=() - if [[ "$loader" == prefetch ]]; then replay_args+=(--prefetch); fi - timeout --kill-after=15s 300s /work/venvs/mt-quant/bin/python \ - dev/ucloud/replay_validation.py \ - /work/results/global-lepi-prefetch-1 quant_prefetch_seed42 \ - --precision "$precision" "${replay_args[@]}" \ - --output "/work/results/prefetch-replay-1-$precision-$loader" || break 2 - done -done -``` - -A completed diagnostic writes `result.json` even when it finds non-finite values; -inspect all four reports and `batches.jsonl`. Matching input/target hashes help -check that cases consumed identical batches. FP16-only failure points toward a -precision-dependent evaluation issue; prefetch-only failure warrants transfer-path -investigation. Neither outcome alone proves the root cause. Reloading clears -in-memory model caches, and per-batch checks synchronize CUDA, so a clean replay -cannot rule out a timing-sensitive failure in the original process. This is not a -speed benchmark. The original NaN occurred during evaluation, not recorded training -loss, and does not by itself demonstrate training divergence. - -Then generate the expanded config, preserving this job's dataset and environment -paths. It intentionally creates a fresh preparation and starting weights: - -```bash -python3 - <<'PY' -import json -from pathlib import Path -config = json.loads(Path('dev/ucloud/experiment.json').read_text()) -previous = json.loads(Path('/work/qualification-prefetch.json').read_text()) -for key in ('parquet', 'environments'): - config[key] = previous[key] -with Path('/work/qualification-expanded.json').open('x') as handle: - json.dump(config, handle, indent=2) - handle.write('\n') -PY -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage plan -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage prepare && \ - bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage train -bash dev/ucloud/launch.sh /work/qualification-expanded.json --stage summary -cat /work/results/global-lepi-expanded-nofigures-1/comparison.csv -``` - -Run in tmux and retain all artifacts, including failed validation checks. A warm -first epoch is kept in the results, not discarded from model training; the later -three epochs provide the timing comparison. This is a larger exploratory test -with one paired seed, not a statistical quality comparison. Do not interpret -small accuracy or timing differences as established improvements. If the replay -finds non-finite values, keep prefetch results diagnostic while investigating them; -eager controls remain useful. Compiler variants are a subsequent experiment. - -## Model compilation comparison in the existing job - -Use `compilation.json` after the expanded eager/prefetch experiment. It keeps -4,096 training / 1,024 validation / 128 test images, four epochs, seed 42, -batch 32, two workers, 384 pixels, figures disabled and the same pinned venvs. -It replaces prefetch with `quant_compile_model` (model compilation only). -The deterministic run order is quant eager, master eager, then quant model -compilation, so both controls finish before a possible compilation timeout. -No dedicated NaN tracing or replay is required for this experiment. The existing -recorded-loss audit remains enabled; `invalid_metrics` retains timing evidence -but excludes that run from the automatic successful-pair report. - -Pull into the current job and run in tmux. The template uses the dataset and venv -paths from the existing job and a fresh output directory; no installation is -needed. If those paths differ, copy the JSON and edit it before preparation. -Do not reuse or modify an already prepared output directory. - -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage train -# Run summary even if training reports a timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/compilation.json --stage summary -cat /work/results/global-lepi-compile-model-1/comparison.csv -cat /work/results/global-lepi-compile-model-1/paired.json -``` - -Each worker has a 300-second limit, with up to 15 seconds for termination cleanup. -The 1,800-second overall budget includes preparation and gaps between commands. -Based on the existing eager runs, allow about five minutes for the two controls -combined, up to five minutes for compilation/training, plus preparation. This is -an estimate, not a promise that the compiled variant will finish. - -The harness creates fresh compiler cache directories for each run. No separate -compiled warmup is performed: cold compilation cost belongs in `wall_seconds` -and the first epoch. Compare those with `later_epoch_mean_seconds` (epochs 2–4), -`train_seconds`, and `peak_allocated_bytes`. Later epochs may still include -recompilation; retain the console log when interpreting them. Compare primarily -against quant eager to isolate the effect of compilation, with master eager as -the branch control. A cold-start timeout establishes that this configuration -does not fit the short-job budget; it does not rule out longer-run benefits. -Small single-seed timing differences are exploratory, not established speedups. - -## Optimizer compilation comparison in the existing job - -`optimizer-compilation.json` tests optimizer compilation alone. It keeps the model -eager, prefetch disabled and optimizer CUDA graphs disabled. The workload remains -4,096 train / 1,024 validation / 128 test images, four epochs, seed 42, batch 32, -two loader workers and 384 pixels on one GPU. Figures are disabled and the -recorded-loss audit stays enabled. Installed master and quant revisions are unchanged. - -The seeded order is quant eager, master eager, then `quant_compile_optimizer`. -Both controls therefore run before a possible compiler timeout. Each worker is -limited to 300 seconds (plus up to 15 seconds cleanup), and the overall budget is -1,800 seconds including preparation and pauses between stages. Allow roughly -10–12 minutes including preparation, based on the previous eager timings and -the compiled worker's limit; this does not guarantee compilation will finish. - -Run these commands in tmux in the current allocated job. No venv rebuild is -needed. The new output directory preserves all earlier experiment artifacts. +Retain the config/prepared inputs plus `comparison.csv`, `paired.json` and each +run's launch/result/console logs, per-rank phase JSONL and trainer `model/` outputs. +Comparison rows expose wall, training, first/later-epoch time, allocated memory and +validation selection metric. Master pairing is per seed; compare acceleration +against `quant_eager` too. Few seeds and short runs do not establish convergence. -```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage train -# Run summary even after a timeout or an invalid-metrics report. -bash dev/ucloud/launch.sh dev/ucloud/optimizer-compilation.json --stage summary -cat /work/results/global-lepi-compile-optimizer-1/comparison.csv -cat /work/results/global-lepi-compile-optimizer-1/paired.json -``` +Wall time includes startup, IO, compilation, evaluation, logging and saving but +excludes preparation. Phase peaks exclude earlier model/optimizer construction; +allocator memory is not whole-process/device/RAM usage. Retain cold setup and +later epochs separately, including recompilation warnings and slower/failed rows. +The selection metric is leaf validation accuracy; padded DDP validation can repeat +samples. Full macro/per-class/parent quality needs separate held-out evaluation. -Monitor the compiled run from a second terminal: +## Targeted follow-ups -```bash -tail -F /work/results/global-lepi-compile-optimizer-1/runs/quant_compile_optimizer_seed42/console.log -``` - -Compare the compiled optimizer primarily against quant eager within this run: -`wall_seconds`, `first_epoch_seconds`, `later_epoch_mean_seconds` and -`peak_allocated_bytes`. Compiler caches start fresh; no unmeasured compilation -warmup is added. Later epochs can still incur recompilation, so keep warnings -with the timing results. The existing optimizer, learning-rate schedule and AMP -settings remain in effect. This experiment does not combine model compilation -with optimizer compilation; it measures their effects separately first. - -If master has `invalid_metrics`, `paired.json` will be empty because that report -requires a completed master baseline. The CSV still contains the direct quant -comparison. Preserve the loss-audit flag alongside exploratory timing conclusions; -no dedicated numerical tracing is a prerequisite for this experiment. - -## Combined compilation, prefetch and native INT8 - -`combined-int8.json` compares the following runs in this seeded execution order: - -| Variant | Installed branch | Native INT8 | Model compile | Optimizer compile | Prefetch | -| --- | --- | --- | --- | --- | --- | -| `quant_eager` | quant | No | No | No | No | -| `master_eager` | master | No | No | No | No | -| `quant_compile_model` | quant | No | Yes | No | No | -| `quant_compile_both` | quant | No | Yes | Yes | No | -| `quant_float_combined` | quant | No | Yes | Yes | Yes | -| `quant_int8_combined` | quant | Yes | Yes | Yes | Yes | - -Both combined variants use the same pinned quant package. Here “float” means -ordinary FP32 parameters with FP16 AMP, not a switch to FP32-only training. -Native INT8 applies to eligible linear modules; convolutions, normalization, -biases and other unsupported operations remain floating point. Check the -`INT8 training coverage:` entry in the INT8 console log for the actual coverage. -This is not an entirely INT8 EfficientNet. Optimizer CUDA graphs remain disabled. -The older `quant_combined` name remains a floating-point variant for compatibility. - -The four-epoch, 4,096/1,024/128-image workload, batch 32, two workers, 384 pixels, -seed 42, figures disabled and loss audit enabled are unchanged. Each worker has -a 300-second timeout (plus up to 15 seconds cleanup). The entire experiment has -a 1,800-second budget including preparation and gaps between stages. Six workers -all reaching their limits would exceed that budget, so the controller may stop -before the last run in that case. Based on previous timings, allow approximately -20–25 minutes; INT8 and combined compilation are unverified on this allocation. -Fresh compiler caches keep compilation cost in each run. No numerical tracing -or extra warmup is required. - -Pull into the current job and run in tmux; existing venvs already include the -quantization extra. Preparation checks the dependency and single-GPU restriction -for any variant requesting INT8, including the new combined variant. +**Validation-loss replay:** `replay_validation.py` evaluates a saved run without +training, using its frozen validation inputs, frequencies and preprocessing. +Compare FP16/FP32 and ordinary/prefetched loading only when that changes a diagnosis: ```bash -cd /work/mini_trainer -git pull --ff-only -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage train -# Run even if training reports a failure, timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage summary -cat /work/results/global-lepi-combined-int8-1/comparison.csv -cat /work/results/global-lepi-combined-int8-1/paired.json +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 /work/venvs/mt-quant/bin/python \ + dev/ucloud/replay_validation.py /work/results/YOUR_COMPARISON quant_prefetch_seed42 \ + --precision fp32 --output /work/results/YOUR_NEW_REPLAY ``` -The controller continues after ordinary nonzero worker exits or invalid metrics, -but stops on a timeout. Preserve the logs. If the floating combined worker times -out and the overall budget has time left, launch just the not-yet-started INT8 run: +Inspect `result.json` and `batches.jsonl` input/label hashes and finiteness. +Reloaded caches and synchronized diagnostics mean a clean replay cannot rule out +the original timing-sensitive failure. This is not a throughput benchmark. -```bash -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage train \ - --only quant_int8_combined_seed42 -bash dev/ucloud/launch.sh dev/ucloud/combined-int8.json --stage summary -``` - -Do not rerun an existing failed directory or reset the experiment deadline. -Compare model-only against both compilations to test their interaction, then -both compilations against float combined to test prefetch, then float combined -against INT8 combined to test quantized training. Use total wall time, first-epoch -time, later-epoch mean and peak allocated memory, retaining loss-audit status. -The automatic paired report uses master; the CSV supports these direct quant -comparisons even when master is excluded by its loss audit. One seed does not -establish quality equivalence or a small performance improvement. - -## Figures-enabled qualification - -`figures.json` exercises the simplified dendrogram renderer, compact SVG export, -and bounded whole-matrix confusion reporting for two -epochs on the existing 4,096/1,024/128-image subset. Use only -`quant_compile_model_seed42`: floating-point training with model compilation, -without optimizer compilation or prefetch. The eager variants remain in the -configuration to satisfy harness validation; they are not selected below. -The worker retains its 300-second timeout and the experiment its 1,800-second -budget. Cold compilation and taxonomy lookups are included; completion within -five minutes needs confirmation on the allocated job. - -This fix changes the installed package, so pull the harness and explicitly -upgrade the quant venv to the code revision pinned in this config. Existing -benchmark configs retain their older pins and will need a matching environment -if reused. Run in tmux: +**Floating ONNX:** use the quant environment to hold the export toolchain fixed, +even when exporting master-trained weights: ```bash -cd /work/mini_trainer -git pull --ff-only -FIGURES_SHA=$(python3 -c 'import json; print(json.load(open("dev/ucloud/figures.json"))["environments"]["quant"]["commit"])') -uv pip install --python /work/venvs/mt-quant/bin/python --no-deps --link-mode=copy \ - "mini_trainer @ git+https://github.com/asgersvenning/mini_trainer.git@$FIGURES_SHA" -uv pip check --python /work/venvs/mt-quant/bin/python -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage plan -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage prepare && \ - bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage train \ - --only quant_compile_model_seed42 -# Summarize even if training reports a timeout or invalid metrics. -bash dev/ucloud/launch.sh dev/ucloud/figures.json --stage summary -cat /work/results/global-lepi-figures-3/comparison.csv +/work/venvs/mt-quant/bin/python dev/ucloud/export_followup.py \ + /work/results/YOUR_COMPARISON quant_eager_seed42 ``` -Inspect the console log's rendering/export timings and the saved figures under -`/work/results/global-lepi-figures-3/runs/quant_compile_model_seed42/model/logs/figures/`. -Both `epoch-0001` and `epoch-0002` should contain readable dendrogram SVGs, -captioned confusion overview PNGs and class-distance PNGs. The per-level -`Confusion_matrix_lvlL/` and `Soft_confusion_matrix_lvlL/` subdirectories retain -full-resolution PNGs, numerical data, class indices and color scales. Dashboard -overviews cover every class in the original order. See -[confusion reporting details and measurements](../benchmarks/reporting/confusion.md). -Compare first and second epoch reporting costs to check label-cache reuse. `paired.json` will be empty because no master run was selected; this is a -figure qualification, not a new branch comparison. Preserve any failed output -and choose a new output path for a retry. - -See [renderer measurements and limitations](../benchmarks/reporting/dendrogram.md). - -## Scaling the selected configuration +The new output contains source/input hashes, preprocessing, a complete graph plus +external data, dynamic-batch checks and `validation-example.npz` from four real +validation images. This establishes bounded FP32 CPU parity, not dataset quality +or target-GPU performance. Native INT8 checkpoints require the separate explicit +CUDA-reference export path. See [ONNX](../../docs/onnx.md) and +[inference benchmarks](../benchmarks/inference.md); calibrate PTQ on training only. -For four full GPUs with figures, W&B, a bounded batch sweep and checkpoint -continuation, use [the DDP qualification and production handoff](ddp.md). -Production training uses `mt_htrain` under `torchrun`; the Python API harness -remains a qualification tool. - -For the post-training expert benchmark, start with the -[bounded RAM-staging inference trial](expert-trial.md). It generates its minimal -configuration and runs the standard prediction CLI without rebuilding an index. +**Production/expert inference:** use [DDP qualification](ddp.md), then the +[bounded expert staging trial](expert-trial.md) and +[test inference](test-inference.md). Validate installed code changes in the +environment actually used by a profile; a harness-only edit needs no reinstall. ## Calibrate filesystem read concurrency -`calibrate_io.py` is a standalone Python file; copying that one file is sufficient. -It uses standard-library threads and subprocesses, with Pillow needed only for -`--mode decode`. It does not import mini_trainer or alter its environment. - -```bash -/work/venvs/mt-quant/bin/python dev/ucloud/calibrate_io.py \ - /work/flemming_helsing/restructured/valid/referenced \ - --mode stage --destination /dev/shm --output /work/expert-io-calibration.json -``` - -The default sweep tests 1–1,024 concurrent reads with 30-second I/O measurement limits, -then retests the three strongest candidates twice in shuffled order. It recommends -the smallest concurrency within 5% of the best median confirmation throughput. -Every thread is initialized before measurement starts. Process/thread startup has -a separate 30-second limit and is recorded independently; the overall budget is -600 seconds. blocked filesystem metadata calls may -outlast the budget. Each trial consumes only paths actually submitted to its reader pool; untouched -paths remain available after a timeout. Submitted selections are disjoint and -shuffled. Shared cache state remains unknown. Run away from other heavy read jobs -when selecting a baseline. Existing reports are preserved and a numeric suffix is -chosen automatically for subsequent runs. - -`--mode read` (the default) measures concurrent encoded-byte reads without retaining -a second copy. `--mode stage --destination PATH` also measures writes to the intended -staging filesystem; its own temporary copies are removed between trials. -`--mode decode --resize 384` includes RGB decoding and optional CPU resize, for a -loader-oriented measurement. The resulting thread count is for concurrent I/O or -read/decode tasks, **not** a recommendation to create that many DataLoader processes. -This file calibrates concurrency; it does not install read-ahead into training. - -`--workers`, `--files-per-trial`, `--trial-seconds`, `--startup-seconds`, `--budget-seconds`, and -`--confirmation-rounds` are adjustable. Each trial selects at most 2,048 files and -16 GiB of encoded data by default. Selection shrinks automatically to fit the byte -cap and staging destination; actual and requested concurrency are both recorded -when fewer files fit. Small trials (including ten-file trials) run normally, and -completed reads are ranked without an arbitrary 32-image minimum. Linux child RSS -is monitored against a 4 GiB stop threshold. Failed settings are excluded. The JSON report contains per-trial -throughput, latency, errors, sampled paths and the recommendation. If samples or -time are exhausted, inspect the confirmation coverage before treating the result -as repeatable. Very fast RAM trials benefit from increasing `--files-per-trial`. - -Show an existing report without printing its sample manifest: +`calibrate_io.py` is a standalone standard-library helper (Pillow only for decode). +It measures concurrency; it does not install read-ahead into the trainer. ```bash -/work/venvs/mt-quant/bin/python dev/ucloud/calibrate_io.py \ - --summary /work/io-calibration.json +python dev/ucloud/calibrate_io.py /work/YOUR_IMAGES \ + --mode stage --destination /dev/shm --output /work/io-calibration.json +python dev/ucloud/calibrate_io.py --summary /work/io-calibration.json ``` -Each run also writes a compact `.summary.txt` beside its JSON. Calibration failures -are recorded in the report and a separate `.error.log`, including failures to -terminate a blocked I/O subprocess. Completed partial trials remain usable; an -unusable confirmation does not erase a valid sweep estimate (marked provisional). -A setting that fails with an error or memory-limit violation during confirmation -is excluded from that fallback. An uninterruptible kernel I/O wait can delay process -termination; the calibrator stops instead of accumulating competing readers. +Modes: `read` discards encoded reads, `stage` also measures destination writes and +removes its temporary copies, `decode --resize 384` includes RGB preprocessing. +Defaults sweep 1–1,024 readers, then confirm the three strongest settings twice; +recommendation is the smallest within 5% of the best median. This is an IO-reader +count, **not a DataLoader process count**. + +Startup and IO each have a 30-second limit; total budget is 600 seconds. Trials +default to 2,048 files / 16 GiB encoded data and a 4 GiB child-RSS stop limit. +Byte/destination caps shrink selection; reports retain requested/actual concurrency. +Submitted paths are disjoint and shuffled, but shared-cache state is unknown. +Use `--help` for overrides; increase sample size when RAM trials are too short. + +Inspect JSON, adjacent `.summary.txt` and failure `.error.log`. Completed partial +trials can inform a provisional sweep result; confirmation errors/memory failures +exclude a setting. Uninterruptible kernel IO may delay termination beyond budgets; +the calibrator stops instead of accumulating competing readers. Existing reports +receive numeric suffixes. Run away from competing heavy scans when selecting a +baseline and report both first-pass and repeated-read conditions. + +## Validation boundary + +Offline tests cover planning, frozen inputs/splits, real CPU prepare/train/reload, +loss audits, worker termination and staged IO. See `tests/benchmarks/test_ucloud_*` +and `test_io_calibration.py`. They do not qualify CUDA/DDP compilation, INT8 quality +or full-data throughput. Historical per-edit test counts/ETAs are not current +status; retained campaign evidence is summarized in the linked post-mortem. diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md index 8392f67..63072ef 100644 --- a/docs/mambo-deployment-evidence.md +++ b/docs/mambo-deployment-evidence.md @@ -126,5 +126,7 @@ ONNX runtime `threads` and defaults to it. Use ordinary V3 for throughput and enable TTA when its accuracy/cost trade-off fits. Recipe exploration used this Flemming dataset, so these results are descriptive, -not independent validation. In-domain UCloud evaluation, other operating systems, -and publication/license review remain open. See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). +not independent validation. The complementary [in-domain evaluation](mambo-indomain-evidence.md) is complete. +[Installed qualification](../dev/releases/mambo_v3/final-qualification.md) records +runtime/platform limits and the selected license; publication remains separate. +See the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index 4141a85..bd27f80 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -1,703 +1,158 @@ -# V2/V3 inference pipeline review - -Review date: 25 September 2026. Code baseline: `0eb90b2`; V2 source: -`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. The review below records the original design baseline; the -[implementation follow-up](#implementation-follow-up) records subsequent changes. Evidence is the completed UCloud campaign and source -inspection. Subsequent B200 measurements are recorded in the implementation follow-up. - -The concern is substantially justified: several V3 changes restored efficiency -lost by the initial portable adapter, and the streaming implementation accumulated -coordination mechanisms around an expensive CPU/NumPy boundary. The next change -should replace that structure, not add another independent queue or worker knob. -This does not mean reverting release features or copying V2 wholesale. - -## What the measurements establish - -Global vocabulary; median of three process trials, images/s: - -| Pipeline | CPU request B=8 | B200 request B=32 | B200 request B=256 | B200 streaming B=256 | Prepared-input B=256 | -|---|---:|---:|---:|---:|---:| -| V2 | 2.0 | 539.5 | Not tested | Not tested | Not tested | -| V3 Torch | 28.7 | 480.7 | 473.3 | 624.9 | 2,957.3 | -| V3 ONNX | 35.1 | 442.2 | 439.5 | 548.4 | 2,243.8 | - -Sources: [request observations](assets/mambo-indomain-speed.csv), -[streaming observations](assets/mambo-indomain-streaming-speed.csv), and the -raw benchmark reports in `local-evidence/ucloud-2026-09-25/mambo-results/runs-transfers/`. -Prepared-input diagnostics include transfers and model execution, exclude image -preparation and public result processing, and are not a pure GPU-compute ceiling. -The Torch head still computes hierarchy inside that diagnostic; the report's -"no decode/reduction" wording is too broad for Torch and means no adapter-side -result reduction. Streaming measures only 1,024 images including startup. -CPU tests use four runtime threads, not a tuned full 48-vCPU node. - -At the common GPU batch size, V3 Torch is about 11% slower than V2 and ONNX 18% -slower. V3's separate streaming path surpasses V2's request rate, but at a larger -batch and with a different execution mode. That is not evidence of a controlled -backend speedup. Conversely, the CPU improvements are real measured pipeline -improvements; it is inaccurate to say that every V3 gain merely recovered a V2 -regression. V2 and V3 also differ in backbone, input resolution, preprocessing, -and runtime precision. There is no matched V2 prepared-input benchmark to infer -their isolated model speed ratio from this campaign. - -The full Torch single-view collection provides stronger pipeline evidence than -GPU utilization samples: - -| Recorded quantity | Seconds | -|---|---:| -| Entire collection, including setup | 875.7 | -| Consumer waiting for staged input | 549.3 | -| Runtime call wall time | 265.2 | -| Model CUDA-stream event intervals | 212.9 | -| Background assembly wall time | 647.2 | -| H2D CUDA-event intervals | 27.5 | -| D2H CUDA-event intervals | 1.36 | -| Background prediction construction | 121.4 | -| Background CSV writing | 11.2 | - -These overlap and must not be added. Runtime wall time includes device completion; -model event intervals can include device idle gaps while the host submits work. -Sampled GPU utilization is neither pipeline time attribution nor SM occupancy. -The dominant observed single-view problem is delivery of ready batches, not -bulk PCIe output bandwidth or CSV storage. The latest H2D staging change did not -produce a demonstrated end-to-end improvement on B200. - -An unresolved TTA signal is important: Torch model event time is 2,524.5 seconds -for three views, versus 212.9 seconds for one view, while its input wait falls to -6.7 seconds. ONNX TTA instead records 1,750.7 seconds waiting for input and 768.6 -seconds in runtime. Similar overall throughput can therefore hide different -critical paths. Host launch starvation, scheduling, allocator contention and -actual GPU execution need distinguishing; the event totals alone do not prove a -fourfold kernel slowdown beyond the three-view multiplier. - -## V2 versus V3: where the work moved - -The inspected V2 `mini_trainer/deploy.py:Predictor` uses the reader in -`mini_trainer/utils/io.py:make_read_and_resize_fn` and native classifier prediction. - -| Responsibility | V2 deployment | Current V3 deployment | -|---|---|---| -| Reading | torchvision decode, CPU resize to 512 square, uint8 transfer per image | PIL decode; portable NumPy preparation; optional independent reading pool | -| Model preprocessing | Batched checkpoint transform on the device for path inputs; final input 224 square | Per-image CPU interpolation, normalization and CHW float32 materialization; final input 384 square | -| Batching | Caller supplies one batch; device tensors stacked | Request batching plus a separate streaming scheduler and host assembly pool | -| Precision | Existing CUDA autocast | Initially FP32; later restored backbone AMP, with FP32 head | -| Hierarchy | Existing batched native reduction | Initially discarded/recomputed on CPU; now native Torch ranks or batched NumPy for ONNX | -| Selection/confidence | Torch top-k and softmax on device | All rank logits downloaded; NumPy top-k/softmax; eager Python result objects | -| Optional features | Masks and embeddings already available | Expanded preset provenance, custom lists, portable ONNX, configurable TTA, bounded streaming | - -V2 was not an ideal asynchronous engine: request reading is serial, transfers -are per image, and label translation uses GPU scalar `.item()` operations. Its -full evaluation harness also differs from the public API, using four reading -threads and shared backbone features. Do not conflate that full-run rate with -the public request benchmark. - -Nevertheless, V2 kept batched work in the native runtime. V3's portability layer -moved substantial numerical work back to CPU and imposed CPU-return boundaries. -Portability requires matching semantics, not matching every backend's physical -execution location. Restoring AMP and native hierarchy were regression repairs, -not novel HPC optimizations. TTA, audited presets, portable ONNX and standalone -CPU integration are useful features worth retaining independently of speed. - -## Concrete architectural problems - -### 1. Preparation performs avoidable work before concurrency can help - -[preprocessing.py](../deployment/mambo_deploy/preprocessing.py) reconstructs fixed -interpolation coordinates and normalization constants for every image. More -significantly, subtracting int64 `lo` indices from float32 coordinates produces -float64 fractions; both bilinear passes consequently use float64 intermediate -arrays. The chained indexing `image[:, yy][:, :, xx]` also materializes a -source-width intermediate before selecting columns. Several full image arrays -are allocated for arithmetic and layout conversions. - -This is verified directly with the installed NumPy. A small isolated laptop -probe on an already-decoded synthetic 2000x3000 image compared the current -function with cached float32 coefficients, direct two-axis gathering and -in-place normalization. At four threads the probe increased from 235 to 444 -images/s and traced single-call peak allocation fell from 16.0 to 8.9 MB. -At 48 threads the corresponding rates were 209 and 395 images/s. This is a -cost/mechanism experiment, not a deployment speed or quality qualification; -32 calls per observation also do not fully occupy 48 workers. The local probe -and output are retained in `local-evidence/pipeline-review/`. It is not a proposed -second production implementation. Its lesson is that fewer allocations and -operations can improve both work and contention without another scheduler. - -Torchvision explicitly recommends tensor transforms, uint8 resizing and attention -to memory layout. Reuse native transforms when they implement the release recipe; -do not silently substitute PIL/torchvision interpolation, antialiasing or transform -order and assume the model input is unchanged. Small rounding differences are not -the gate; unintended geometry/normalization changes are. [Torchvision guidance](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations). - -TTA additionally copies and rotates/pads full-resolution originals before model -resizing, even for the identity transform. This is much more expensive for the -large in-domain photos than Flemming crops. Reordering resize and rotation is a -recipe change and should not be smuggled into a pipeline refactor. - -### 2. Too many ownership transitions, despite bounded queues - -[streaming.py](../deployment/mambo_deploy/streaming.py) maintains in-flight reads, -encoded buffers, decode futures, per-image results, assembling batches and completed -batches. A coordinator scans futures, sorts ready indices and wakes every 5 ms. -Filesystem `stat()` runs on that coordinator, so slow metadata can also delay -handling completions. There is a single stacking executor after per-image -preparation, followed by another transfer executor and a result executor. - -At batch 256, one V3 float32 input is **432 MiB**. The recorded nine allocated host -batch buffers represent about **3.8 GiB**; three-view TTA's 27 allocations represent -about **11.4 GiB**, before all decoded originals, intermediates and other results. -The 2 GiB encoded-byte budget does not bound those allocations. A per-image -prepared count obscures the actual batch and view byte footprint. - -Background assembly takes roughly 262 ms per 256-image batch over the Torch -single-view collection. That is about 1.6 GiB/s of payload copying, not a measurement -of the node's DRAM bandwidth. Allocation, descheduling, GIL reacquisition and -contention may be included. This makes it important but does not justify declaring -`np.stack` intrinsically slow. Preparation should own final batch storage rather -than hand off thousands of independently allocated arrays to a serial stacker. - -### 3. Transfers are partly overlapped; completion still gates submission - -The Torch H2D worker uses a separate copy stream and pinned source buffers, but -host-synchronizes each staged batch before returning it. This protects buffer -lifetimes and can overlap the previous model; it is not wholly serialized. The -larger issue is [download_tensors](../deployment/mambo_deploy/transfers.py): pack -all ranks, allocate pinned host output, copy on the current compute stream, then -synchronize in the main inference caller. The next model batch is not submitted -until that finishes. A background result thread only starts after this barrier. - -The ONNX path binds inputs on CUDA but outputs on CPU and calls synchronous -`run_with_iobinding`; each TTA view returns its logits to CPU. It has not established -an asynchronous output pipeline. Simply adding `non_blocking` or disabling ORT -synchronization would be incorrect without completion events and explicit buffer -lifetimes. PyTorch documents the pinned-memory/separate-stream requirements; -ORT documents device I/O binding and the caller's synchronization responsibility. -[PyTorch transfer guidance](https://docs.pytorch.org/tutorials/intermediate/pinmem_nonblock.html), -[ORT CUDA performance guidance](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning). - -The current Torch H2D payload is also 2.25 times V2's uint8 512-square payload per -image (384-square float32 versus 512-square uint8). Its model sees 2.94 times the -pixel count (384 versus 224 square), though architecture differs and pixel count -is not a compute-time ratio. Float32 staging is convenient, not inevitable. - -### 4. Device results are converted too early and too broadly - -[results.py](../deployment/mambo_deploy/results.py) performs full softmax and -selection on CPU, rebuilds class dictionaries for every prediction object, and -eagerly creates nested labels/items. Torch copies 12,632 species, 4,476 genus and -104 family scores per image even when the consumer only needs one label/confidence -per rank. For regional selectors it can additionally download all global leaves -for the finite-value check. V2 selected on device. - -The public `raw_logits` property is an existing contract: do not remove it silently. -A compact-result path must be explicit, or lazily materialize raw outputs with -clearly bounded device ownership. Preserve the existing raw mode while avoiding -its cost in a collector that only saves top-1 predictions. Optional embeddings -likewise should incur their cost only when requested. - -For masked/TTA Torch inference, `head(features)` computes full native hierarchy -for every view, which is discarded before masked/averaged hierarchy is recomputed. -Embeddings requested separately call `preclassification` again. These are concrete -redundancies, but their speed impact has not been isolated. Use an existing leaf/ -embedding boundary where possible; any necessary shared-core API belongs on a -feature branch and must be merged into the release branch. - -### 5. Request, stream and evaluator have diverged - -`predict()` creates a preparation pool per request, alternates preparation and -inference, retains whole-request outputs and concatenates them. `predict_stream()` -uses the custom scheduler and result worker. The collector calls private methods -and manages another result loop. Thus improving the latter does not necessarily -improve the interface an integration developer uses. Benchmarks currently measure -these materially different paths. One batch primitive and one streaming executor -should serve request collection, streaming and evaluation. Already-device raw tensors -also pass through `_rgb().detach().cpu().numpy()` today; the public API has no -explicit prepared-device-batch boundary for integration with an existing GPU -pipeline. A typed/explicit prepared-input interface would avoid that round trip -without ambiguously treating raw images as normalized model inputs. - -## First-principles resource model - -For a batch, let service demands be loading/preparation, H2D, backend work, D2H and -postprocessing. A fully serial loop pays approximately their sum. With adequate -buffers and independent resources, steady-state batch time approaches the largest -stage service time. In practice preparation/postprocessing share CPU, RAM bandwidth -and sometimes the GIL; transfers and kernels share memory fabrics. Their resource -demands must be combined where resources are shared. Concurrency cannot remove work. - -For a target near 3,000 images/s, batch 256 needs a ready batch every ~85 ms. The -serial preprocessing diagnostic near 191 images/s implies about 15.7 effective CPU -seconds per wall second at that target, before accounting for scaling losses or -other work. Forty-eight Python threads do not establish that capacity. NumPy often -releases the GIL inside native operations, but surrounding Python, allocator and -scheduler activity can still interfere with the inference thread's launches. -The TTA event anomaly makes launch starvation a serious hypothesis, not a finding. -[NumPy thread behavior](https://numpy.org/doc/stable/reference/thread_safety.html). - -Reading concurrency addresses latency: outstanding requests are approximately -target images/s multiplied by mean request latency. At 3,000 images/s and 100 ms, -roughly 300 requests may be justified before bandwidth and memory constraints. -That does **not** imply 300 preprocessing workers. Once the encoded queue remains -full, increasing read concurrency cannot address a downstream capacity deficit. -This also agrees with the project's [UCloud training experience](training-workflow-postmortem.md). - -| Environment/regime | Likely limiting resource | Appropriate adaptation | -|---|---|---| -| Cold network filesystem/object store | Metadata/read latency, then storage throughput | High bounded read concurrency; keep metadata off the compute scheduler; optional local staging for repeated runs | -| Warm cache/local NVMe plus fast GPU | Decode, resize, memory traffic, host kernel submission | Batch-oriented preparation, native kernels, few allocations; isolate Python-heavy preparation if needed | -| Multi-socket enterprise node | CPU quota, NUMA placement, cross-socket memory/PCIe path | Budget against effective cpuset/quota, place workers and memory near the GPU; don't infer 384 usable CPUs from affinity alone | -| CPU deployment | Competition between backend native threads and preprocessing | Share one CPU budget; avoid multiplying preprocessing workers by backend threads | -| Small images/fast accelerator | Python dispatch, per-batch barriers, result materialization | Coarse tasks, compact outputs, backend event dependencies; compilation/graphs only if launch overhead remains limiting | -| Multi-GPU node | Per-GPU host supply and aggregate storage/CPU bandwidth | One ownership domain per GPU, partition sources; no assumption that one device's reader budget scales independently | -| Restricted/shared environment | Process/shared-memory limits, RAM and installation constraints | Portable bounded thread/synchronous execution remains functional; acceleration remains optional | - -NVIDIA recommends considering transfer minimization, overlap and NUMA locality as -separate resource issues. These are placement policies, not reasons to add more -per-image machinery. [CUDA best practices](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/). - -## Simpler target design - -Use **three ownership domains** for the user's five logical phases: +# V2/V3 inference pipeline: decisions and remaining limits + +Review and implementation campaign: 25 September 2026. Initial review baseline +`0eb90b2`; V2 source `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. +Final measured stack: `503de96`. Further throughput work is **deferred for the +release freeze**. Current numbers and their provenance live in +[HPC evidence](mambo-hpc-evidence.md); this page explains the architectural decisions. + +## What the evidence established + +V3 initially moved work that V2 kept in PyTorch—AMP, hierarchy reduction, selection +and preprocessing—into an expensive portable CPU/NumPy path. Restoring AMP and native +hierarchy repaired regressions. Portable ONNX, audited regional lists, TTA and +standalone CPU integration remain useful additions independent of speed. + +V2 was not an ideal asynchronous reference: it read requests serially, transferred +per image and translated labels through scalar device reads. Its full-evaluation +harness also differed from the public API. Backbones, input resolution and precision +differ, so neither model-compute speedup nor implementation overhead can be inferred +from a single V2/V3 end-to-end ratio. + +The original UCloud campaign measured V2/V3 Torch/V3 ONNX CPU requests at 2.0/28.7/35.1 +images/s (batch 8, four runtime threads), and B200 requests at 539.5/480.7/442.2 +(batch 32). V3 initially trailed V2 on GPU while substantially improving measured CPU +performance. [Original request](assets/mambo-indomain-speed.csv) and +[streaming](assets/mambo-indomain-streaming-speed.csv) observations retain that +baseline; they are not current V3 timings. + +The 632,913-image Torch collection spent 549.3 s waiting for staged inputs across +875.7 s total. Background assembly was 647.2 s, model-stream intervals 212.9 s, +H2D 27.5 s and D2H 1.36 s. **These times overlap.** They target ready-batch delivery, +not bulk output bandwidth or CSV writing. Utilization samples are neither phase +timings nor SM occupancy; event intervals can include gaps in host submission. + +A resident-batch reference reached 3,667 / 3,781 / 3,818 images/s at batches +256 / 512 / 1,024 with almost continuous kernels. This justified prioritizing the +host pipeline over ever-larger batches. It excludes transfer and CPU results, +predates final normalization changes and is not a measured application ceiling. +See the [resident probe](../dev/releases/mambo_v3/gpu-ceiling.md). + +## Current implementation and ownership ```text -Batch producer Backend executor Result consumer -read/decode/prepare -> H2D -> inference -> D2H -> format/save/yield -owns ready batch storage owns in-flight buffers/events owns completed CPU results +Batch producer Backend executor Result consumer +read → decode → prepare → H2D → inference → D2H → format / save / yield +owns bounded batch storage owns device buffers/events owns completed results ``` -Transfers are backend dependencies, not independent application schedulers. A -small ring of batch slots supplies backpressure and lifetime accounting. Enqueue -the next batch before retiring the previous completed output; only the consumer -waits for output readiness. The exact number of copy streams is backend-dependent, -not automatically one thread/stream for each logical phase. - -The producer should accept an external prepared-batch iterable as well as paths. -Path loading remains a convenience adapter. A CPU worker prepares into an assigned -batch slice or owns a complete batch, rather than returning standalone image arrays -for serial stacking. Read latency can retain a bounded IO service without another -prepared-image state machine. Keep logical sample IDs/order explicit; a slow image -must not corrupt alignment. Out-of-order internal completion is optional and needs -bounded reordering, not a changed public output order. - -Keep arrays compact until conversion is needed. Prefer optimized CPU uint8 -geometry and late normalization; on Torch CUDA, batch tensor transforms can live -in the backend using existing torchvision operators. ONNX-only installations must -not acquire a mandatory Torch dependency. A portable CPU preprocessing path is a -legitimate backend implementation, not a reason to route Torch through NumPy too. -A graph-integrated ONNX preprocessing/postprocessing wrapper is a later artifact -choice if profiling justifies it, not required for the first simplification. - -Result reduction should remain native where practical. TTA aggregates leaves once -and reduces the final hierarchy once; requested embeddings are computed once per -view. Provide a compact prediction mode for the evaluator while preserving raw -outputs for developers who use them. Reuse vocabulary metadata. Ordinary request -prediction can collect the same batch execution results, with a lightweight path -for one small batch rather than launching every service unconditionally. - -## What established implementations suggest - -| Existing implementation | Relevant mechanism | Recommendation here | -|---|---|---| -| PyTorch DataLoader | Batch collation, worker processes, bounded prefetch, pinned transfer preparation | First baseline for the Torch producer; accept caller-provided batches instead of rebuilding its scheduler. Tune process and internal thread budgets together. | -| torchvision transforms | Native CPU/CUDA batch operations, uint8/layout-aware paths | Reuse compatible operators; remove accidental float64 and redundant passes. | -| NVIDIA DALI | CPU/mixed/GPU pipeline execution, managed prefetch, accelerated decode and fused transforms | Architectural reference and optional HPC candidate if native preparation remains limiting; not a mandatory dependency for this portable release. | -| ONNX Runtime I/O binding | Device input/output buffers, execution stream controls | Use for an explicit asynchronous backend contract, not as a claim that CPU-bound outputs already overlap. | -| Triton Inference Server | Dynamic batching of independent requests and model-instance scheduling | Appropriate optional serving layer for many clients; not the fix for a single offline producer that cannot supply batches. | - -DataLoader documents multiprocessing to avoid blocking inference with Python -loading, batch-aware fetching, and the costs/constraints of worker processes. -Its automatic batching still involves collation and pinning copies: it is a -maintained baseline, not a zero-copy guarantee. [DataLoader documentation](https://docs.pytorch.org/docs/main/data.html). - -DALI's pipeline exposes bounded CPU/GPU queues and explicit asynchronous output -completion; its crop/mirror/normalize operator combines work rather than inserting -another Python stage. Those are the useful design lessons even without adopting -DALI. [DALI executor](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html), -[fused transform](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/operations/nvidia.dali.fn.crop_mirror_normalize.html). -Triton's dynamic batcher solves combining independent requests, which our already -batched offline campaign does not require. [Triton batching](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/batcher.html). - -## Bounded implementation and validation sequence - -1. Establish one backend batch boundary and preserve public behavior: preprocessing - geometry, ordering, presets/custom masks, TTA logit averaging, embeddings, partial - batches, failure/early-close behavior and standalone ONNX. Keep existing evidence - immutable. No new runtime or format is necessary for this boundary. -2. Replace per-image NumPy/assembly handoffs with batch-oriented preparation. - Remove redundant copies/constants/float64 work, the serial stacker and polling - where a standard producer suffices. Use one explicit resource budget, not another - layer of automatically multiplying pools. This is the strongest first increment. -3. Make backend submission/completion explicit and move waiting to retirement. - Retain pinned source/output ownership until completion; do not just delete - synchronization. Fold the current transfer worker into that ownership model. - Keep a correct synchronous capability path for CPU and restrictive runtimes. -4. Reduce results where they already reside, with an explicit compact mode, and - unify request/stream/evaluation execution. Remove per-view hierarchy and duplicate - embedding work through existing interfaces or a separately reviewed core change. -5. Validate with a short representative run, not another full quality campaign: - identical image bank/config for V2/V3, request versus stream clearly separated; - both small Flemming crops and larger photographs; cold/warm IO distinguished. - A resident-batch replay isolates runtime from producer contention, and one short - CPU/GPU timeline checks the launch-starvation hypothesis. Measure steady-state - images/s plus latency/memory and buffer occupancy; synchronize at measurement - boundaries. Use a few justified settings, not a combinatorial worker sweep. - -The first success criterion is less work and fewer independently coordinated stages, -with a measured throughput improvement and unchanged meaningful outputs. GPU -utilization need not become flat or reach 100%. A claimed 2–3k application rate -would need an actual sustained end-to-end measurement; the prepared-input numbers -only show that the current hundreds-of-images/s plateau is not an established -model ceiling. Existing CUDA compilation/graph and decoder accelerators can follow -if the simplified pipeline exposes those as the next material limit. - - -## Implementation follow-up - -Implemented on 25 September 2026 against baseline `7a8f53a`, confined to deployment -and the release harness. This is a bounded replacement of the preparation and -completion boundaries, not a claim that all proposed architecture work is finished. - -- Preparation workers now normalize directly into disjoint reusable batch slices. - Removed the serial assembly executor, per-image output/stack copies, repeated - buffer sorting and 5 ms polling. Completion callbacks wake the coordinator. - Request prediction, TTA and release diagnostic helpers use the same direct-fill - preparation operations. Separate read/prepare concurrency remains useful for - high storage latency and is still independently bounded. -- Cached the fixed interpolation geometry and normalization constants, and replaced - source-width intermediate indexing with direct two-axis selection. Retained the - original interpolation precision and release pixel hashes. The earlier float32 - coefficient probe remains experimental; its larger speedup is not claimed here. -- Torch output copies now run on a dedicated CUDA stream. The existing bounded - result worker owns completion waits and CPU processing, allowing the submitting - thread to continue. Device buffer reuse remains protected by CUDA events; output - allocations retain their lifetime until completion. Standalone ONNX retains its - synchronous output boundary without acquiring a Torch dependency. -- Top-k confidence construction normalizes only selected entries, avoiding a full - normalized probability matrix. The full raw-logit public contract is preserved. -- Backend imports and hierarchy helpers are cached on first use. Transfer setup - imports remain at stream initialization; repeated batch execution reuses loaded - backend references. No new dependency or configuration control was introduced. - -The remaining scheduler, two device slots and result worker retain explicit bounded -ownership. This removes one execution stage rather than adding another executor. -The request and streaming APIs still have different scheduling because requests -accept in-memory images and return accumulated results. Torch still computes -parent ranks per TTA view and repeats embedding preparation when requested; those -are not solved by this change. Moving resize work to GPU or compacting the public -result contract also remains separate work. The current core embedding context is -process-global, so using it across independent predictors would require a core -concurrency change through the prescribed feature-branch workflow. - -### Local evidence - -RTX 3080 Ti Laptop GPU, 256 real Flemming images, warm filesystem, batch 16, -global vocabulary, Torch auto precision, four preparation/runtime threads for -inference; median of three process-local trials after model warmup: - -| Measurement | Before, images/s | After, images/s | -|---|---:|---:| -| Host preparation, 4 workers | 204.2 | 290.4 | -| Host preparation, 16 workers | 248.2 | 340.2 | -| GPU request, including preparation/results | 162.5 | 163.9 | -| GPU streaming, including preparation/results | 183.7 | 202.3 | - -Preparation includes reading, decode, transforms and batch delivery, with buffer -reuse. The request result is essentially unchanged. Streaming trial ranges overlap -(before 160–198, after 189–214 images/s), so its roughly 10% median increase is -preliminary. This short, sequential local comparison is neither a B200 projection -nor a replacement for the published campaign benchmarks. It tests smaller cropped -images, not large in-domain photographs or cold WEKA storage. - -All before/after predicted classes matched at all three ranks. Scripts and raw -measurements are retained, uncommitted, in `local-evidence/pipeline-review/` -(`compare_pipeline.py`, `before.json`, `after-final.json` and prediction arrays). -Focused checks cover release pixels, custom transforms, ordering, bounds, errors, -early close, CUDA slot reuse and deferred download ownership. Real-model CUDA -checks cover global/northern-Europe lists, default TTA, embeddings and partial -batches, for Torch and standalone ONNX (without importing Torch). A 65-image -Torch release collection additionally verified both preset CSVs, embeddings and -final timing totals. Static checks passed; the affected suite passed 95 tests with -two metric-environment tests skipped. No metric code changed. B200 throughput and -a full quality campaign have not been rerun. - - -## Compact preparation follow-up - -The full-B200 smoke result (873 Torch / 826 ONNX images/s without TTA) and the -user-reported 1/7 MIG result (493 / 333 images/s) support targeting preparation -cost before adding more concurrency. This increment implements that target: - -- Portable preprocessing uses FP32 interpolation instead of accidentally promoted - FP64 intermediates. Frozen legacy hashes remain in tests as reference geometry; - tests explicitly permit rare one-level uint8 rounding changes and bound their - mean error. This is an intentional numerical implementation change, not a - relaxation of the image framing, transform order or normalization contract. -- CUDA Torch request and streaming paths prepare nearest-square uint8 images on - CPU. Existing batch buffers, pinned storage and device slots preserve uint8. - Native batched Torch interpolation, center crop, rounding and normalization run - on the device before the existing FP16-backbone/FP32-head inference boundary. - A 256-image RGB 384-square staging buffer is 108 MiB instead of 432 MiB. - This fourfold reduction describes staging storage, not total GPU or process RAM; - device interpolation also needs temporary floating-point storage. -- TTA transforms still operate before nearest-square preparation. The default - rotation/padding recipe, custom transform isolation, averaging, class selection - and embedding semantics are unchanged. Full-resolution TTA materialization, - redundant head work and optional ONNX reduced precision remain separate targets. -- ONNX and CPU execution retain portable CPU preparation and do not import Torch - for preprocessing. No new dependencies, worker pools, user flags or model files. - -A fresh laptop comparison against `dcb00d0` used the same 256 Flemming images, -batch 16, global list, default Torch CUDA precision and three warmed repetitions: - -| Measurement | Before, images/s | After, images/s | -|---|---:|---:| -| Portable CPU preparation, 4 workers | 308.8 | 435.2 | -| Portable CPU preparation, 16 workers | 322.4 | 438.7 | -| Torch CUDA request | 164.0 | 257.7 | -| Torch CUDA streaming | 217.6 | 305.8 | - -All 256 predicted species/genus/family labels matched before and after for both -request and streaming. This is a prediction-stability check, not a new accuracy -estimate. These results establish a useful local improvement, not an assumed -B200 speedup. Script outputs and prediction arrays are retained uncommitted in -`local-evidence/compact-preparation/`; the comparison script is -`local-evidence/pipeline-review/compare_pipeline.py`. - -Static checks passed. The focused suite passed 107 tests, with two metric-environment -checks skipped (metric code unchanged). Real Torch and standalone ONNX CUDA checks -covered global/northern-Europe lists, default TTA, embeddings and partial batches. -Large-image geometry is also covered in CPU/CUDA preprocessing tests. A 65-image -release collection with default TTA produced complete three-rank CSVs for both -lists and finite 1280-dimensional embeddings; predicted labels matched the prior -implementation throughout. - -Run the same [four-variant UCloud check](../dev/releases/mambo_v3/speed-smoke.md) -with fresh output folders to compare this implementation on full B200 and MIG. -Existing model caches and environments are reusable. Full quality evaluations -and the published deployment figures have not been regenerated for this change. - -## Streaming ownership and virtual padding - -The initial implementation below was delivered in `0c6ace2`; its B200 regression -and the subsequent admission correction are recorded below. - -The full-B200 resident experiment establishes a useful reference for the existing -GPU execution: 3,667 images/s at batch 256, 3,781 at 512 and 3,818 at 1,024. The -trace has almost continuous kernel execution; increasing batch size is not the -main answer to the 1,232 images/s streaming result. This increment preserves GPU -execution and addresses preparation and handoffs instead. - -- The reading stage owns metadata lookup and encoded-byte reservations. Metadata - lookup runs in the existing reading pool, so a slow `stat()` cannot block the - preparation owner. Reservations are granted in input order to prevent later - reads from occupying the whole byte budget ahead of a required earlier image. -- The preparation owner receives completion messages instead of rescanning future - dictionaries and buffered images. A priority heap selects the earliest ready - image; unavailable earlier reads do not prevent later ready work from proceeding. -- That owner alone allocates/recycles preparation buffers. The consumer returns a - leased batch after use; workers fill assigned disjoint slices. This replaces the - old buffer-pool lock, shared condition/generation state and repeated progress scans. - The message queues are bounded indirectly by read admission and batch capacity. -- Built-in non-mutating TTA transforms avoid an unconditional input copy. Custom - callables, including subclasses of built-ins, retain copy isolation. Edge padding - is represented in nearest-square sampling coordinates rather than materialized - as a full-size padded image. Rotation geometry and interpolation are unchanged. -- Portable FP32 preparation converts selected pixels directly to its required - contiguous format, without an intermediate contiguous uint8 copy. Torch/ONNX - input contracts and the transfer/result stages are unchanged. - -The streaming module is slightly shorter (238 to 231 lines). Across the three -production files, the functional additions produce a net increase of 17 lines; -this is a reduction in coordination state and interactions, not a large net code -reduction. No dependencies, worker pools, user settings or model assets were added. - -Validation: the affected suite passed 117 tests with two metric-environment tests -skipped. After separating byte accounting from telemetry, the 17 streaming tests -passed again. Static checks passed. Tests cover slow reads and metadata, earliest -ready work, bounded storage, buffer leases, partial batches, source/worker errors, -early close and blocked-reader shutdown. Materialized versus virtual TTA padding -matches prepared pixels exactly, including on large images. Real Torch and -standalone ONNX CUDA checks cover global/northern-Europe lists, TTA, embeddings -and partial batches. - -An initial laptop comparison of the completion/virtual-padding changes showed no -clear throughput shift on 256 small Flemming images: about 269 versus 270 images/s -without TTA and 98 versus 96 with TTA, with overlapping repetition ranges. Predicted -labels matched at all three ranks. This timing preceded moving metadata lookup into -readers; it therefore did not validate the implementation subsequently tested on -B200. It does not establish a speedup. Local evidence is retained under `local-evidence/stream-owner/`. - -Use the existing [full-B200 smoke command](../dev/releases/mambo_v3/speed-smoke.md#current-preparation-update) -with a fresh output directory, keeping the same batch and worker settings. Reuse -the resident reference and existing environments; no MIG or quality campaign is -needed for this bounded pipeline comparison. - - -### B200 regression and read admission correction - -The subsequent `b200-full-streaming` run regressed against `b200-full-compact`: - -| Variant | Compact streaming, images/s | `0c6ace2` streaming, images/s | -|---|---:|---:| -| Torch | 1,232.4 | 604.8 | -| ONNX | 697.8 | 400.9 | -| Torch + TTA | 412.1 | 296.9 | -| ONNX + TTA | 254.6 | 213.9 | - -These are the supplied B200 summaries, not local benchmark estimates. Local -correctness tests did not establish performance at the B200's concurrency. -Inspection found that `EncodedReads` made reader workers wait for their input-order -turn and byte capacity, with `notify_all()` on every admission/release. This created -avoidable contention and occupied IO workers with scheduling waits. Its exact share -of the measured slowdown has not been isolated. - -The correction removes that class and its condition variable. The existing owner -receives asynchronous metadata completions, reserves bytes in input order, then -submits only admitted reads. Metadata and reads share the existing IO pool, with -reads dispatched first when slots are available. Readers perform filesystem work; -capacity waits consume no reader slots. Metadata lookahead remains bounded by -`read_window`; encoded bytes remain reserved through preparation. Ordered admission -prevents later images from exhausting the budget ahead of required earlier images; -actual reads and preparation still complete concurrently and out of order. - -This removes 17 production lines without adding pools, dependencies or settings. -Virtual padding and reduced image copies are retained. Static checks and deployment -Ruff checks passed; the focused streaming suite passed 15 tests with three unchanged -CUDA transfer tests skipped. It covers ordering, budgets, buffer ownership, failures, -shutdown and continued metadata progress under byte-budget backpressure. GPU transfer -and model code did not change; their existing validation is reused. - -The `b200-full-admission` run subsequently measured streaming throughput of 1,226.8, -701.6, 473.5 and 312.9 images/s for Torch, ONNX, Torch + TTA and ONNX + TTA. This -restored the compact baseline for inference without TTA; TTA improved by about 15% -and 23%. Request throughput was 853.2, 420.7, 287.2 and 161.8 images/s, respectively; -peak host memory was 4.47, 5.20, 6.25 and 7.70 GiB. This is recovery from the admission -regression, not resolution of the Torch streaming gap to the resident reference. - - -### Decode once; sample only the rotation pixels used - -The `0ac0422` increment changed preparation work, leaving scheduling, buffers, transfers -and GPU inference unchanged: - -- Torch JPEG/PNG inputs use the existing torchvision native CPU decoder, as the core - loader does. Its decoded tensor shares storage with NumPy; there is no full-size - Pillow RGB copy/raw-byte export. The decoder is resolved once per predictor before - dispatching preparation. Other formats, PIL/array inputs and high-bit-depth PNG - conversion retain the portable path. Standalone ONNX does not import Torch. -- Portable RGB decoding skips `convert("RGB")` when the input is already RGB. Pillow's - [conversion implementation](https://github.com/python-pillow/Pillow/blob/main/src/PIL/Image.py) - otherwise copies even same-mode images, and its array interface exports raw bytes. -- Built-in arbitrary-angle TTA operates directly on NumPy arrays. It maps the final - nearest-square coordinates through the expanded rotation and interpolates only - those pixels, preserving the existing rotate-to-uint8, edge-pad, nearest-sample - ordering. Repeated positions from padding/upscaling are evaluated once. Rotation - no longer converts arrays to Pillow and back or builds a full-resolution rotated - canvas during preparation. Its expansion, fill and pixel-center conventions match - the previous [Pillow geometry](https://github.com/python-pillow/Pillow/blob/main/src/libImaging/Geometry.c). - Custom transforms retain their original full-resolution inputs and copy isolation. -- Already square 384-pixel inputs bypass redundant nearest gathering; CPU FP32 and - Torch batched finishing retain their existing interpolation/normalization. - -This is a modest net production-code increase for a native decoder adapter and an -array sampler, not a claimed code-count reduction. It removes representation round -trips and discarded image work without new dependencies, pools, flags or model assets. - -Validation was limited to the affected deployment/streaming suite (83 passed, four -CUDA checks skipped) and focused checks for the subsequent high-bit-depth fallback -and repeated-pixel sampling. Pixel fixtures compare against the prior Pillow rotation, -including expanded non-square canvases, thin/large images and cardinal rotations. -No local throughput sweep, model-quality campaign or GPU-reference rerun was performed. -The subsequent `b200-full-preparation` results were: - -| Variant | Streaming images/s | Request images/s | Peak host GiB | -|---|---:|---:|---:| -| Torch | 1,826.6 | 995.7 | 3.94 | -| ONNX | 720.5 | 456.6 | 5.02 | -| Torch + TTA | 375.2 | 215.8 | 5.93 | -| ONNX + TTA | 237.1 | 120.1 | 7.05 | - -Native decoding improved no-TTA Torch streaming by 49% over admission. Both TTA -variants regressed by 21–24%, strongly implicating the shared NumPy sampler. It -reduced pixel work but introduced multiple array passes, gathers and temporary -allocations in place of compiled interpolation. The sampler was therefore removed -and the previous Pillow rotation restored; native decoding, virtual padding and -square-input shortcuts remain. The focused virtual-padding checks passed after -rollback. Post-rollback TTA throughput was subsequently measured with the combined stack below. - - -### Profile-guided stack validated on a fresh full B200 - -The `b200-full-gather` archive records commit `503de96` with the native decoder, -restored Pillow rotation, RGB pixel gathers, cheaper hierarchy lookup/lazy vocabulary -maps, reused CPU interpolation scratch, fewer top-1 score scans, and fused Torch -normalization. The later `f9cbd81` commit changes experiment setup only. - -All four reports completed. Imported baseline and compact reports match the new -run's metadata/sample hashes, 4,096 ordered image identities, bundle and class-list -hashes, benchmark settings and recorded runtime versions. The new allocation has a -different GPU UUID but the same full B200 model, 48-CPU quota, 48 preparation workers, -AMD EPYC 9655 CPU, driver 610.57.04, Torch 2.14.0+cu132 and ORT 1.22.0. Batch is 256; -Torch uses FP16 and ONNX TF32. Both ONNX reports select the optimized session profile -with no failed compatibility attempts; the logs contain no failure warnings. - -Comparison with the preceding `b200-full-preparation` summary supplied by the user: - -| Variant | Previous streaming images/s | New streaming images/s | Change | New request images/s | Request change | Peak host GiB | -|---|---:|---:|---:|---:|---:|---:| -| Torch | 1,826.6 | 1,975.7 | +8.2% | 1,469.3 | +47.6% | 4.01 | -| ONNX | 720.5 | 996.5 | +38.3% | 761.9 | +66.9% | 4.75 | -| Torch + TTA | 375.2 | 623.9 | +66.3% | 391.4 | +81.3% | 5.84 | -| ONNX + TTA | 237.1 | 396.1 | +67.0% | 211.8 | +76.3% | 7.35 | - -The immediate prior TTA run included the regressed NumPy rotation. Against the -stronger admission-run TTA figures (473.5 and 312.9 images/s), the new rates are -still +31.8% and +26.6%. Against the original imported full-B200 smoke, all four -streaming variants improve: approximately +126%, +21%, +97% and +31% respectively. -Memory is not uniformly lower: ONNX + TTA rises from 7.05 to 7.35 GiB versus the -preceding preparation summary. Torch allocator peaks are 3.42 GiB without TTA and -3.88 GiB with TTA; these are not total device-memory usage or ORT memory estimates. - -This supports the combined structural changes across deployment environments. -Three short passes on one new allocation do not identify each patch's individual -contribution. Torch's observed streaming rates span 1,795–2,109 images/s; its smaller -+8% median change deserves less weight than the larger ONNX/TTA and request gains. -The no-TTA prepared-input diagnostic remains about 92 ms for Torch and 114 ms for -ONNX per batch. It excludes decode/reduction and uses already normalized FP32 input, -so it does not measure the newly optimized compact GPU preprocessing path. - -The remaining targets differ by backend. Counters below accumulate all three -passes (48 batches); worker elapsed times overlap and cannot be added to runtime: - -| Variant | Background input wait, ms/batch | Transfer-worker elapsed, ms/batch | Measured H2D, ms/batch | -|---|---:|---:|---:| -| Torch | 16.5 | 52.4 | 2.6 | -| ONNX | 227.7 | 21.3 | Not instrumented | -| Torch + TTA | 57.8 | 72.3 | 8.9 | -| ONNX + TTA | 549.6 | 66.5 | Not instrumented | - -For ONNX, input wait remains 10.93 s across 12.50 s elapsed without TTA, and 26.38 s -across 30.71 s with TTA. Together with the preparation-worker totals, this prioritizes -CPU decoding/preparation throughput and contention over changes to inference kernels. -These are background waits, not GPU-idle percentages or proof of storage latency. - -For Torch, the physical H2D copy is small, while transfer-worker elapsed also includes -slot availability and host dispatch. Summed preparation-worker elapsed is 88.8 s -across 6.30 s wall time, far below 48 workers continuously active. Increasing reader -or preparation counts alone is unlikely to resolve the remaining gap. The next -useful boundary is host submission, safe slot reuse and result completion, including -contention while preparation runs; a timeline should distinguish these rather than -calling all non-DMA transfer-worker time overhead. Existing counters do not resolve -that distinction. - -Torch streaming now reaches 53.9% of the earlier batch-256 resident reference of -3,667 images/s. This is a throughput ratio, not GPU utilization. The resident path -excludes transfers and CPU results and predates the normalization improvement; -it remains a useful reference rather than a new measured ceiling. No further run -was requested simply to confirm the gains. - -Evidence is retained uncommitted under -`local-evidence/ucloud-speed-smoke-2026-09-25/b200-full-gather/`, with the source -archive alongside it and derived `gather-analysis.json`. Archive SHA-256: +- **Input admission:** one owner reserves bytes in input order, dispatches admitted + reads and receives completion events. IO workers perform metadata/filesystem + work, not capacity waits. Read lookahead, encoded bytes and prepared batches are + bounded independently; slow earlier images cannot lose output alignment. +- **Preparation:** workers fill disjoint reusable batch slices. Serial stacking, + repeated future scans and polling were removed. Native Torch JPEG/PNG decoding + avoids full-resolution Pillow/NumPy round trips where supported; other formats + retain the portable fallback. +- **Backend-specific finishing:** Torch CUDA stages nearest-square uint8 and performs + batched interpolation/crop/normalization on device; its batch-256 input storage + is 108 MiB rather than 432 MiB float32. That is staging storage, not total memory. + CPU/standalone ONNX use portable FP32 preparation without requiring Torch. +- **TTA:** decode once, preserve geometry and logit-averaging semantics. Virtual + edge padding avoids materializing padded originals; custom transforms retain + full-resolution inputs and copy isolation. Default arbitrary rotation uses the + restored Pillow path; the attempted NumPy sampler was slower and was removed. +- **Completion:** Torch downloads use a dedicated stream; the bounded result worker + waits for completion while submission can proceed. CUDA events protect device + slot reuse and pinned-output lifetime. ONNX retains its synchronous output + boundary; I/O binding alone does not make it asynchronous. +- **Results:** reuse hierarchy/vocabulary plans, avoid repeated top-1 scans and full + normalized-probability matrices, retain public raw logits and optional embeddings. + Backend imports resolve at initialization/first use rather than per hot operation. + +Current contracts are in [streaming](../deployment/mambo_deploy/streaming.py), +[preparation](../deployment/mambo_deploy/preprocessing.py), +[transfers](../deployment/mambo_deploy/transfers.py), +[result completion](../deployment/mambo_deploy/result_worker.py) and +[predictor](../deployment/mambo_deploy/predictor.py). +Request and streaming still have distinct scheduling/collection costs. The public +raw-logit contract prevents simply dropping all large outputs. Per-view head work +and the shared core's embedding-context concurrency boundary also limit further +simplification; core changes require the separate feature-branch route. + +## Consequential negative results + +| Attempt | Observation | Durable lesson | +| --- | --- | --- | +| Transfer overlap added to the early pipeline | No demonstrated B200 end-to-end gain; input delivery still dominated. | Asynchronous work can remain the limiting producer. Optimize service demands and ownership, not the number of queues. | +| Read workers waited for ordered admission/capacity (`0c6ace2`) | Torch streaming fell from 1,232.4 to 604.8 images/s. Admission-owner correction recovered 1,226.8. | Capacity waits must not occupy IO worker slots; local tests did not establish high-concurrency throughput. | +| NumPy rotation sampled only needed pixels (`0ac0422`) | Native decode improved non-TTA Torch to 1,826.6 images/s, but Torch/ONNX TTA fell 21–24% from the preceding run. | Fewer mathematical pixels can still mean more array passes, gathers and allocations than compiled interpolation. Restore the faster operator. | +| Increasing batch beyond 256 in the resident reference | Only ~4% gain by batch 1,024. | Model batch size did not explain the much larger streaming gap. | + +The final stack combines native decode, restored Pillow rotation, RGB gathers, +reused interpolation scratch, cheaper hierarchy/lazy maps and fused Torch +normalization. The [final measured table](mambo-hpc-evidence.md) reports +Torch/ONNX streaming of 1,975.7/996.5 images/s, and 623.9/396.1 with TTA. +Against the initial full-B200 smoke, gains were approximately 126%/21%/97%/31%. +They are combined-stack improvements, not isolated attribution to each patch. +Peak memory is not uniformly lower; ONNX+TTA reached 7.35 GiB host RSS. + +Matched imported baseline/compact reports agree on ordered sample identities, +bundle/class lists, benchmark settings and runtimes. The final run used a different +GPU UUID but the same full B200 model and 48-vCPU quota. Torch's three streaming +passes ranged 1,795–2,109 images/s; small median changes deserve less weight than +large request/ONNX/TTA gains. The prior preparation-run comparison came from the +operator's summary, not a complete imported archive. + +## If performance work resumes + +Overlapped steady-state throughput approaches the slowest service stage only when +its resources are sufficiently independent. Decode/postprocessing share CPU/GIL/ +memory bandwidth; transfers and kernels share memory fabrics. Outstanding IO +requests hide latency; they do not supply downstream compute capacity. Use the +actual CPU quota/NUMA placement and per-GPU demand, not host-wide counts. + +The final counters give different next targets: + +- **ONNX:** background input wait was 10.93 s across 12.50 s elapsed without TTA, + and 26.38 s across 30.71 s with TTA. Prioritize CPU preparation throughput and + contention before inference kernels; these are background waits, not GPU-idle + percentages or proof of storage latency. +- **Torch:** measured H2D averaged 2.6 ms/batch versus 52.4 ms transfer-worker elapsed, + which also includes slot availability/dispatch. Preparation-worker time was + 88.8 s across 6.30 s wall time, far from 48 workers continuously active. Examine + host submission, slot reuse and result completion under preparation load before + adding workers. The counters alone do not isolate those causes. + +Torch streaming is 53.9% of the earlier resident throughput; that is a throughput +ratio, not GPU utilization. GPU saturation/general HPC scalability is unproven. +Use the [mocked pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and one +representative timeline to distinguish non-model costs, then the existing +[four-variant smoke](../dev/releases/mambo_v3/speed-smoke.md). Preserve ordering, +geometry, partial batches, embeddings, custom transforms, early close and bounded +buffer lifetimes. Do not reopen a quality campaign for unchanged numerical behavior. + +Use maintained backend mechanisms where they simplify responsibility: +[DataLoader](https://docs.pytorch.org/docs/main/data.html) for batch loading, +[torchvision transforms](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations) +for suitable native operations, and +[ORT I/O binding](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning) +with explicit completion ownership. [DALI](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html) +is an optional acceleration reference, not a release dependency. +[Triton batching](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/batcher.html) +combines independent requests; it does not fix an offline producer that cannot feed +the GPU. Preserve a bounded portable path for restricted installations. + +## Retained evidence + +Final archive SHA-256: `d51ee3105af4e37aa048bb16fed4c94a9cd87dfefd2a574bbe9e924aec7e6947`. -The immediately preceding preparation-run comparison uses the user's pasted summary; -its complete archive was not supplied. This speed check adds no quality metrics. +Local reports/archive and `gather-analysis.json` are under +`local-evidence/ucloud-speed-smoke-2026-09-25/`, with final reports in +`b200-full-gather/`. These ignored files are not a remote evidence service. +Earlier local mechanisms/prediction checks remain in `local-evidence/pipeline-review/`, +`compact-preparation/` and `stream-owner/`; they are not B200 timing substitutes. + +No new quality metrics came from the speed smoke. Public timing projections retain +raw repetitions, source hashes and execution scopes in the linked HPC evidence. +Installed release qualification is recorded [separately](../dev/releases/mambo_v3/final-qualification.md). diff --git a/docs/ucloud-model-release-roadmap.md b/docs/ucloud-model-release-roadmap.md index 52e8425..b7f5b1d 100644 --- a/docs/ucloud-model-release-roadmap.md +++ b/docs/ucloud-model-release-roadmap.md @@ -1,632 +1,80 @@ -# UCloud model release roadmap +# MAMBO V3 release handoff -Status: release preparation started, 2026-09-23. This document does not publish -artifacts. Qualification claims are limited to the linked measured evidence. Target: the completed 10–11 September -2026 UCloud model, not a new training campaign. +Updated 25 September 2026. **Preparation is complete; publication is separate.** +This releases the model trained on UCloud on 10–11 September, without retraining +or quantization. The [freeze record](../dev/releases/mambo_v3/deployment-freeze.md) +owns the release contract and completion map; [final qualification](../dev/releases/mambo_v3/final-qualification.md) +owns candidate hashes, installed checks and remaining provenance limitations. -The [first input-audit increment](../dev/releases/mambo_v3/README.md) now pins and -verifies 44 retrieved files, including candidate PyTorch/ONNX weights and historical -MAMBO weights. It recovers both regional presets, confirms identical old/new class -and parent mappings, and captures a small legacy output fixture. Its regional-scope -table now includes reproducible Parquet filters: Europe uses the metadata continent -field; northern Europe has an exact country-filter reconstruction with documented -ambiguity for membership-neutral additions such as Ireland. Aligned deployment -adapters and full Flemming backend comparison are implemented; see the -[evaluation workflow](../dev/releases/mambo_v3/evaluation.md). -The large in-domain dataset remains on UCloud -and must be evaluated there using the original supplied split. -The [public preset catalogue](model-presets.md) defines the expanded geographic -selection, including Australia/Tasmania and deliberately overlapping regions. -These are permissive guards against geographically nonsensical predictions, -not native-distribution maps. Preserve these names, filters and counts in bundle -metadata and API preset discovery when implementing the adapters. +## Status and authoritative documents -## Branch and integration policy - -Release development takes place on `release/mambo-v3`, created after the package -minor-version bump from `0.2.0` to `0.3.0` on `master`. The package version is -separate from the proposed `MAMBO_v3` model release tag; no release tag or public -promotion is implied by creating this branch. - -Direct commits are limited to release assets, deployment adapters, presets, -packaging, documentation and release-specific compatibility/evaluation tooling. -Fixes or refactors to shared core code (including model loading, preprocessing, -prediction, hierarchy and export internals) must originate on `master` or a -dedicated feature/fix branch, pass their relevant checks, and then be merged into -the release branch. Review the merge scope and validate affected combined behavior. -Apply this rule to the existing browser/export branch too; integrate the required -reviewed work rather than reimplementing core changes directly here. - -Classify a change by its purpose and affected boundary, not just its filename: -release adapters may use existing core interfaces, but a prerequisite core fix -remains a separate upstream change. Keep unrelated improvements out of this branch. - -## Release objective and scope - -Ship a versioned successor to the public MAMBO deployment release that is easy to -install, embed and operate without a GPU, internet access, administrator rights or -a writable installation directory. Preserve a clear migration path for existing -Python and CLI users. Add acceleration only through separately qualified profiles. - -The release targets **backwards compatibility with MAMBO_v2**, with native PyTorch -and standard floating-point ONNX as equal supported paths. Use the existing raw -PyTorch weights, standard prediction-only ONNX, and tested floating-point -prediction-plus-embedding ONNX derivative. Preserve the original files and pipeline -identities. This release ships the native PyTorch and standard ONNX models with -the region-specific presets. Quantization is deferred to a later release: no PTQ -artifact packaging, calibration, quantized benchmarks or quantization acceptance -gates belong to this increment. New FP16 graph conversions, TensorRT and new model -formats are also outside its scope. - -Both backends must support `full`, `europe`, `north_europe`, custom class lists, -and predictions with or without embeddings through aligned interfaces. Compare -usefulness on the in-domain test set and out-of-domain **Flemming** expert dataset, -plus speed and memory on this laptop's CPU and GPU. Small ONNX score variations are -expected and acceptable: micro-numerical parity is not a release objective. Existing -export checks remain intact; new release gates concern behavior, task quality and -practical trade-offs. - -Training resume state and the research archive remain optional downloads. Additional -OS/browser/accelerator qualification and Hub hosting follow the core comparison; -they do not delay a release with an honestly scoped support matrix. - -This release work takes precedence over the next-training-run improvements in the -[training post-mortem](training-workflow-postmortem.md). Retraining, loader redesign, -EMA repair, full INT8 training and prototype-coordinate research are not release -prerequisites. The [portable viewer work](roadmap.md#deferred-portable-prototype-viewer-completion) -remains a separate integration track; reuse its implementation where relevant. - -## Verified starting point - -The public GitHub releases API was read on 2026-09-23. Local tagged source was -inspected alongside it; a local tag alone does not establish a published release. - -| Published release | Established interface and behavior | Alignment required | -| --- | --- | --- | -| [MAMBO_v2](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v2), 17 April 2026 | Latest published release; BioCLIP-2 model; `mambo_predict`; `mini_trainer.deploy.Predictor`; `full`, `europe`, `north_europe` aliases; default region Europe; weights downloaded from ERDA | Required backwards-compatibility baseline. Preserve old version pins, document architecture and vocabulary changes, and explicitly decide the successor's default | -| [MAMBO_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v0), 15 April 2026, prerelease | Earlier MAMBO deployment wrapper and northern-European model emphasis | Historical context; no additional backwards-compatibility gate | -| [UKCEH_v0](https://github.com/asgersvenning/mini_trainer/releases/tag/UKCEH_v0), 3 February 2026 | Northern-European EfficientNetV2-M model; `python predict.py`; automatic model download | Historical context; MAMBO_v2 is the compatibility target | - -None of these release records has attached binary assets. The MAMBO_v2 source -resolves weights through an ERDA URL template and an implicit cache. Its README -still points installation commands at MAMBO_v0; correct this in the new release's -instructions. MAMBO_v1 exists as a local tag but was absent from the public release -listing. Do not treat it as an independently published baseline without evidence. - -MAMBO_v2's `Predictor` defaults to CUDA, batches all supplied images together, and -supports class masks and embeddings. Current master has `mt_predict`/`mt_hpredict` -and the generic exporter, but no `mini_trainer.deploy` module or `mambo_predict` -entry point. Restoring compatibility therefore requires implementation and tests, -not just substituting a new weight URL. Audit exact return values and CSV schemas -from the tagged code before promising drop-in compatibility. - -The [campaign record](training-workflow-postmortem.md#outcomes-and-strength-of-evidence) -reports EfficientNetV2-S, a normalized hierarchical head, 384-pixel inputs, 30 epochs, -and floating training on four B200 GPUs. It reports completed evaluation and -verified archival checksums, but does not contain the final immutable artifact -identities. The feature-branch follow-up below identifies the public distribution -and adds limited real-image evidence. The original FP32 ONNX parity was synthetic; -PTQ loadability did not establish retained accuracy or integer execution. The -production checkpoint is not a native INT8 checkpoint. - -### Located production artifacts and existing browser work - -Follow-up inspection on 2026-09-23 used `feature/prototype-browser-inference` at -`b174426a22e42618424fcb0345610ede4a415d01`, without switching or modifying its -worktree. Its [release integration record](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/docs/production-release-integration.md) -identifies an already-published production distribution. This release roadmap is -therefore about consolidating and qualifying a successor consumer release, not -locating or publishing those original files for the first time. - -Public root: [global-lepi-production-release-20260911T150236Z](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/index.html). -Paths below are relative to that directory: - -| Artifact | Identity / role | -| --- | --- | -| `models/pytorch/best.pt` | Final selected checkpoint; SHA-256 `174b9214bfea2df69e4f5c5d16afd841fec961db4274f3e6bf474cef9cab5e8a` | -| `models/onnx-fp32/model.onnx` | Original prediction graph; SHA-256 `aa02baa22765a04de03c5ba46029e2a66ca7e430bfddce0a001af5cec2e7c15d` | -| `models/onnx-fp32/model.onnx.data` | External tensors; SHA-256 `9ffb389ec4c6fe9864a4dfb16b167cf68950d7fa35b3fa39d84b1987b1845f4e` | -| `models/onnx-ptq/` | Historical experimental artifacts only; preserve in the original archive, exclude from this consumer release | -| `training/`, `evaluation/`, `export/` | Retained configuration, logs, resume state, predictions and export/calibration evidence | -| `provenance.json`, `SHA256SUMS` | Packaging inventory and original file integrity records | -| `viewer/browser-model/model.onnx` | Separate prediction-plus-embedding graph; SHA-256 `70130c3dbc2b8a6bc4610bb213a1aaf029816fb634faf104bbb27ffa997dfc44` | -| `viewer/verification.json`, `viewer/SHA256SUMS` | Browser verification and separate viewer integrity scope | - -The source record reports 1,224 original files totaling 25,455,849,324 bytes, -verified ZIP/internal checksums, remote size inventory and selected binary readback. -This follow-up retrieved the public index, README, provenance, original checksum -list, FP32 manifest, browser manifests and verification report. README, provenance -and FP32 manifest bytes matched their original checksum entries. The large weights, -full archive and browser execution were **not** downloaded/reverified in this pass; -the binary hashes above are recorded identities, not fresh binary hash checks. - -The FP32 manifest records opset 18, float32 NCHW input `[batch, 3, 384, 384]`, and -ordered outputs of 12,632 species, 4,476 genera and 104 families. Packaging provenance -records checkout `52954edae5dae31a62ecb639533e6f8573d57055` and mini-trainer `0.1.1`, -but explicitly warns these are packaging-time identities, not necessarily training -identities. Recover the latter from retained logs rather than copying this commit. -Earlier epoch-4/epoch-26 explorer checkpoints are not the release checkpoint. - -The [separate RC2 browser manifest](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-viewer-20260915-rc2/browser-model/manifest.json) -references the same final checkpoint, graph and tensor hashes as the production -browser bundle. UI publication and model release identity remain separate. -Reuse these implemented branch components after review/integration: - -| Existing component | Reuse and remaining boundary | +| Concern | Maintained record | | --- | --- | -| `mt_export --include-embeddings`, export tests | Opt-in actual prediction outputs plus 1,280-dimensional preclassification embedding; preserve default export behavior and head restrictions | -| `mini_trainer/visualization/prototype_space/browser.py`, `tests/utils/test_browser_bundle.py` | Atomic packaging, checked source hashes/class order, external tensors, pinned ONNX Runtime Web 1.24.3 assets and license; adapt metadata instead of inventing another exporter | -| Browser inference worker and preprocessing | Single-thread CPU WASM and explicit `nearest-square-uint8-bilinear-center-imagenet-v1` recipe, size 384/resize 438; bounded existing contract, not arbitrary transforms | -| `check_inference.mjs`, `check_mobile.mjs`, `check_portable.mjs` | Existing numerical/image, orientation/transparency, touch and static-host checks; broaden evidence only for affected behavior and newly claimed targets | -| Shared GBIF client and packaged names | Optional network enrichment, IDs remain usable offline; packaged names are partial and remote photos are not offline assets | - -The public [browser verification report](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/viewer/verification.json) -records one real-image fixture: identical-input prediction max error about -`1.72e-5`, embedding error `1.80e-7`; end-to-end image prediction error about -`0.00552`, embedding error `0.000250`, with top predictions matching. This is useful -existing evidence, **not** strict end-to-end equality or broad accuracy acceptance. -Preserve that distinction when setting gates; do not restart browser inference as -if absent, or apply its evidence to the original prediction-only graph untested. - -The branch's newer image adapter applies EXIF rotation/mirroring and white alpha -compositing; the core reader disables EXIF orientation. Reconcile and version these -policies before claiming one shared image contract. The historical recipe name alone -does not encode this later adapter behavior. Also retain the actual hosting lesson: -ERDA previously lacked `.mjs`/`.wasm` MIME declarations and cross-origin permission; -the verified same-origin deployment uses an unchanged runtime module renamed `.js` -and explicit runtime paths. Current header behavior needs a targeted recheck before -new hosting claims. Model/runtime assets contain executable code; authoring hash -checks do not imply that the current browser worker validates every fetch. - -The branch's [qualification record](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/dev/prototype_space/portable-qualification.md) -already reports focused Python/browser and installed-wheel checks. Integration, -physical-device review, broader browsers/providers and complete offline installation -remain distinct work. Review/reuse the branch export and deployment changes for A/B; -do not require completion of all explorer UI or global-analysis milestones. - -## 1. Freeze identity and the compatibility contract — P0 - -Produce a compact release inventory before changing inference behavior: - -- Start from the identified public distribution above; retrieve and verify the - required model files against its checksums. Complete the training source and - package/harness revision audit, and inventory the resolved configuration, - taxonomy, dataset split identities and evaluation files. - Confirm that the reported best epoch and the selected weights agree. Record - hashes and sizes, including every ONNX external tensor file. -- Retrieve the actual previous public weights and hash them. Record the baseline - as release tag plus weight hash: a historical URL alone is not an immutable model - identity. Keep original files and releases available for rollback. -- Diff species/genus/family IDs, output order, parent mappings, regional masks, - preprocessing and score semantics. Report additions, removals and remappings; - never align arrays by position across models. Do not assume the roughly similar - class counts mean identical vocabularies. -- Record the old wrapper's constructor/call arguments, accepted inputs, return - structure, rank/top-k behavior, embedding interface, errors and CLI/CSV fields. - Define preserved behavior and explicit migration exceptions in a compatibility - table with tiny fixtures before implementing adapters. -- Propose `MAMBO_v3` as the next model-release name, subject to checking tag - availability at publication. Give the package version, model ID, artifact - revision and manifest schema separate identities. An artifact repair may create - a new revision; it must not replace bytes behind a published version. - -The V3 API and CLI default to global (`full`), an explicit change from MAMBO_v2. -Keep `europe` and `north_europe` as explicit choices with their legacy membership. -Version aliases within a release. Do not silently redirect old pinned consumers -to new weights. Use the model-generation package `mambo-v3` for automatic verified downloads; -explicit bundles remain available for managed/offline integration. -Store regional lists with provenance and hashes, and disclose excluded true labels. - -**Done when:** immutable candidate and baseline inventories exist, compatibility -fixtures are specified, and release identity/default decisions are recorded. The -public artifacts and historical weights have now been retrieved and hashed; see -the input-audit increment above. Training-revision/best-epoch provenance and full -wrapper/CLI fixtures remain outstanding before compatibility certification. - -## 2. Build a self-contained portable bundle — P0 - -Reuse the existing public FP32 artifacts where unchanged, and review/integrate the -feature branch's export and browser packaging changes. Extend [the existing ONNX -exporter](onnx.md) and its manifest rather than creating a second exporter. A -release-level manifest can reference its unchanged export manifest and add -deployment metadata with an explicit schema version. - -Proposed deployment contents: - -```text -release.json # identity, hashes, sizes, profiles, compatibility -models/pytorch/best.pt # original inference weights -models/onnx/model.onnx # original prediction graph + external tensors -models/onnx-embedding/ # existing floating prediction+embedding derivative -models/*/manifest.json # source/export metadata for each artifact -preprocessing.json # complete machine-readable input recipe -classes.json # ordered stable IDs, ranks and parent mappings -regions/ # versioned candidate lists with provenance -conformance/ # redistributable inputs, tensors, expected outputs -examples/ # small Python and non-Python usage examples -MODEL_CARD.md -LICENSES/ # weights, code, runtime and bundled data notices -``` - -The bundle must describe tensor names/layout/dtype/range, supported batch sizes, -fixed spatial size, graph opset, output structure and actual score meaning. Specify -whether scores are logits, normalized values or probabilities per rank; never add -softmax by guesswork. Include threshold/abstention policy and candidate-filter order. -A bare `repr(preprocess)` or `requires_configuration: true` is insufficient for a -release claiming image-level interoperability. - -Specify and test decode, RGB conversion, alpha/grayscale handling, EXIF orientation, -resize geometry, interpolation, antialiasing, crop, scaling and normalization. -The current repository reader disables EXIF orientation; first recover the actual -campaign pipeline. Any changed orientation policy is an explicit versioned behavior -change, not an unnoticed browser/Python discrepancy. JPEG decoders and resize -implementations may differ: preserve the recipe and inspect task-level effects -rather than making universal pixel identity a release gate. - -Keep local IDs and taxonomy names sufficient for prediction. GBIF name/photo lookup -is optional enrichment and must not be a hidden inference dependency. Record its -provenance separately from fixed model class identity. - -Use ONNX as the initial deployment path that does not require Python checkpoint -unpickling or model constructor downloads. Keep weights-only PyTorch loading for -compatible legacy workflows; do not enable unrestricted pickle loading as an -automatic fallback. New tensor formats are deferred; this increment retains the -tested raw PyTorch and standard ONNX artifacts. - -**Done when:** the complete directory can be copied, relocated, checked for integrity -and used offline without the training checkout, constructor downloads or live -taxonomy. The ONNX path must work without PyTorch; the native path uses explicit -PyTorch/backend dependencies. Each backend has its own clean-install check. - -## 3. Align the MAMBO_v2 API across backends — P0 - -Restore `mini_trainer.deploy.Predictor` and `mambo_predict` with MAMBO_v2-compatible -calls and results. Preserve `Predictor()`, `Predictor(model="europe")`, `predict`, -`__call__`, `predict_with_embeddings`, local weight overrides, `class_mask`, top-k -and the existing hierarchy/result accessors. In particular, -`predict_with_embeddings` retains `(predictions, embeddings)`. Keep the native -PyTorch route as the compatibility default; backend selection is additive. Do not -silently change the legacy CUDA default or legacy output types. New portable usage -examples should explicitly select CPU. Document compatibility exceptions before -implementation if tagged fixtures expose a behavior that cannot be retained. - -Proposed additive controls (API/CLI spellings to finalize against existing arguments): -`backend="torch"|"onnx"`, `class_list=...`, explicit device, bounded batch size, -thread budget, cache directory and offline mode. Presets continue to work through -`model`/`-M`; keep model revision separate from vocabulary selection internally. -ONNX-only installation must avoid a mandatory PyTorch dependency; reuse a small -runtime-neutral result adapter while preserving the legacy public contract. - -| Backend / output mode | Artifact and behavior | Qualification target | -| --- | --- | --- | -| PyTorch, predictions | Original `best.pt`, actual evaluation head | CPU and local CUDA | -| PyTorch, predictions + embeddings | Same weights and preclassification embedding, one backbone pass | CPU and local CUDA | -| ONNX, predictions | Existing standard FP32 prediction graph | CPUExecutionProvider and local CUDAExecutionProvider | -| ONNX, predictions + embeddings | Existing floating prediction+embedding graph from browser work | CPUExecutionProvider and local CUDAExecutionProvider | +| Installation, API/CLI, inputs/outputs, defaults and V2 migration | [Deployment README](../deployment/README.md) and [integration reference](mambo-integration.md) | +| Weight identity, original V2 contract and preset reconstruction | [Input audit](../dev/releases/mambo_v3/README.md), inventory and model provenance alongside it | +| Geographic scope and membership rules | [Preset catalogue](model-presets.md); 25 versioned lists, legacy and updated memberships preserved | +| Flemming and complementary in-domain quality | [Flemming evidence](mambo-deployment-evidence.md), [in-domain evidence](mambo-indomain-evidence.md) | +| Laptop and production-like speed | README figures and [HPC evidence](mambo-hpc-evidence.md), with historical/current measurement scopes separate | +| Runtime and artifact readiness | [Installed qualification](../dev/releases/mambo_v3/final-qualification.md) | +| Future model comparability | [Evidence policy](../dev/releases/mambo_v3/evidence-policy.md) | +| Human publication, integrity and rollback | [Publication handoff](../dev/releases/mambo_v3/publication.md) | + +Distribution is `mambo-v3` version `0.3.0`, import `mambo_deploy`. Maintenance +releases retain this model; a future generation uses a separate package. The +standalone API/CLI defaults to global scope and supports PyTorch/standard ONNX, +custom or regional lists, optional embeddings and optional default TTA. Weight +license is CC BY-NC-SA 4.0; adapter code is MIT. No package, successor model asset, +tag or public pointer was published by preparation. + +Remaining actions are the publisher's review and explicit publication steps, +including retrieval checks and rollback readiness. No additional full evaluation, +throughput campaign, quantized artifact or exhaustive hardware matrix is a freeze +prerequisite. Known untested platforms remain disclosed, not silently qualified. -Every row supports the same presets and custom lists. The prediction-only ONNX graph -has no embedding output: select the identified embedding-enabled graph explicitly -when requested, without silent PyTorch fallback or synthetic embeddings. Exporting a -replacement is necessary only if a recovered artifact cannot satisfy the contract. -Do not assume that omitting an output fetch removes its computation; benchmark the -actual graph chosen. Keep returned embedding stage, sample order, dimensions and -normalization consistent; do not add a second backbone pass. Expose conversion/copy -costs and output device/type policy while retaining legacy behavior. - -### One vocabulary and postprocessing contract - -Use stable species IDs and versioned preset files. Allow a custom UTF-8 class-list -file and an equivalent Python sequence. Define `full` as all classes in this -checkpoint; preserve old preset membership where available, report missing IDs and -version deliberate additions separately. Species absent from the model cannot be -added by a list. Deduplicate, preserve model order rather than caller order, report -unknown entries, and reject an empty overlap before processing images. - -A custom list explicitly replaces a named preset for the new `class_list` option; -record the resolved list and hash. Preserve legacy `class_mask` semantics separately, -including reset behavior, and reject simultaneous `class_mask` and `class_list` as -ambiguous. A pre-masked artifact cannot recover absent classes. Keep independent -predictors isolated so changing one filter cannot affect another. - -Filtering must precede ranking and confidence normalization, with genus/family -scores recomputed from retained leaves. In the current hierarchical head, parent -scores use grouped log-sum-exp. For standard ONNX, gather the retained leaf scores -and apply the same hierarchy aggregation and normalization in shared postprocessing; -slicing the existing full-vocabulary parent outputs is incorrect. Cover priors, -parent mappings, masks and ordering with small behavioral fixtures against native -PyTorch. Unsupported head semantics fail explicitly. This avoids exporting one -graph per custom list and keeps presets as metadata, without changing model weights. - -Use the tested campaign preprocessing for both Python backends. Browser EXIF/alpha -improvements stay an explicitly separate adapter until deliberately aligned; they -must not silently change this release's native/ONNX image pipeline. Share sample -identity, hierarchy metadata, top-k and score conventions, thresholds, errors and -collector schema. Different backends need not have bit-identical scores or ranking -for near ties. Reuse the JavaScript work later as another consumer of this contract. - -**Done when:** tagged MAMBO_v2 compatibility fixtures and tiny backend × output-mode -× class-list tests pass; all four rows run bounded batches and return aligned -results. Include custom/preset equivalence, unknown/empty/duplicate lists, mask -reset, prediction-only versus embedding-enabled behavior, and finite correctly -shaped embeddings. No new micro-numerical ONNX validation study is required. - -## 4. Qualify deployment profiles and restricted operation — P0/P1 - -These are proposed test targets, not current support claims. Record exact hardware, -OS, architecture, runtime/provider versions, driver where applicable and evidence -for every claimed profile. “ONNX compatible” is not a qualification result. - -| Priority/profile | Initial target | Required evidence / fallback | -| --- | --- | --- | -| P0 local CPU | Laptop Intel Core i7-12800H, x86-64; PyTorch and ONNX | Both output modes, task metrics, clean install, offline/read-only behavior, fixed thread budgets and RAM | -| P0 local GPU | NVIDIA GeForce RTX 3080 Ti Laptop GPU, 16 GiB; PyTorch CUDA and ONNX CUDA provider | Both output modes, task metrics, latency/throughput/VRAM and actual provider placement | -| P1 other desktops | Windows x64 and macOS arm64 CPU | Same contracts and install/restriction fixtures on actual OS/hardware; support claims only after checks | -| P1 edge ARM | Linux aarch64 CPU | Target RAM/latency and runtime availability; reduced batch profile | -| P1 browser | Existing Chromium WASM implementation, then other browsers/devices | Reuse existing evidence; new preprocessing/hosting claims separately qualified | -| Later release | Quantization, FP16 graph conversions, TensorRT and other providers | No implementation, packaging or qualification in this release | - -The laptop GPU/CPU were queried on 2026-09-23; the GPU reports driver 610.47. -The ordinary sandbox blocked NVML, while the permitted host query succeeded. -This identifies the available hardware, not successful PyTorch/ONNX CUDA execution. -Preflight actual runtime/provider availability before benchmarking, using the -existing environment without implicit synchronization. Prepare an isolated GPU -runtime environment if needed; do not replace the working CUDA wheels. -Record actual OS/kernel/virtualization and effective CPU affinity in results; this -host is not evidence for every Linux or Windows deployment. Other OS targets remain -part of the portability roadmap, not prerequisites for this local comparison. - -ONNX Runtime offers multiple [execution providers](https://onnxruntime.ai/docs/execution-providers/), -but availability and operator coverage must be checked against the pinned runtime. -Measure actual placement; selecting a provider name does not prove the whole graph -runs there. Build ordinary TensorRT engines for a declared target configuration and -retain ONNX as the interchange artifact; [TensorRT describes these as hardware-specific -engines](https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/quick-start-guide.html). -Any compatibility mode needs its own evidence and runtime constraints. - -Treat restrictions as independent test cases, not just another operating system: - -| Restriction | Required behavior and test | -| --- | --- | -| No outbound network / air gap | Explicit prefetch or manual transfer; verify locally before load; no automatic model, GBIF, font, CDN or telemetry requests; test with egress disabled | -| No root / no containers / no compiler | Prebuilt runtime installation in a user environment; offline dependency set for each claimed OS/architecture; container is an optional delivery format | -| Read-only installation and weights | Inference reads only; explicit writable cache/temp/output paths when needed; operation with caching disabled; never require writes beside weights | -| Proxy / internal mirror | Configurable approved artifact source and CA trust; serial-download fallback when HEAD/range requests fail; retain TLS verification | -| Interrupted or concurrent download | Hash and size verification, bounded retries, atomic cache publication and locking; incomplete files cannot count as valid cached models | -| No subprocesses / restricted threads | In-process path and explicit single-thread/zero-worker settings; resource limits reported rather than guessed from host core count | -| Restricted browser | Same-origin runtime assets and documented minimal CSP; test without cross-origin isolation, blocked GPU and denied storage; actionable unsupported-policy error | -| Integrity and supply-chain policy | Pinned dependencies, license inventory/SBOM, release manifest checksums and authenticated provenance; keep credentials/raw user images out of artifacts and logs | - -For browsers, WASM multithreading needs cross-origin isolation; single-thread mode -is available. The proxy worker uses Blob and can conflict with restrictive CSP; -qualify an external same-origin worker where needed. JS and WASM files must come -from the same build. See [runtime configuration](https://onnxruntime.ai/docs/tutorials/web/env-flags-and-session-options.html). -WebGPU requires a secure context, and deployment must include the required runtime -assets; see [web deployment](https://onnxruntime.ai/docs/tutorials/web/deploy.html). -Do not promise local `file://` execution. A policy forbidding WASM entirely cannot -be fixed by a WASM fallback: offer the native client or an explicitly chosen service. -Do not upload images to a service as an automatic fallback. - -Checksums detect corruption but do not authenticate a publisher. Define a trusted -release channel and, where required, signed provenance verifiable with offline -trust material. Review model/runtime inputs and archive paths before extraction; -keep ONNX external-data references inside the verified bundle. These are concrete -release-loader requirements, not a claim that any model format is risk-free. - -## 5. Measure in-domain/Flemming quality and local inference cost — P0 - -### Evaluation inputs and reusable machinery - -Use the supplied in-domain test split (632,913 images in the campaign) and the -Flemming camera-trap expert set (58,640 images, 522 species). Verify recovered -manifests/counts and identity before associating local paths with those datasets. -Preserve all labels and original splits; never drop excluded or unknown species -when applying a regional/custom candidate list. No random re-splitting or test-based -threshold selection. Existing archived PyTorch predictions are a reference only -when their weights, preprocessing, precision, list and sample identities match. - -Start with the published `evaluation/` reports/CSVs to establish the baseline and -locate the original image/staging manifests. Archived predictions can reproduce -metrics without image access, but cannot supply new ONNX predictions or end-to-end -speed. Resolve local data roots or explicitly stage a bounded selection before the -first run. Do not silently substitute a different dataset for missing Flemming data. - -Reuse [the inference benchmark modules](../dev/benchmarks/inference.md): -`prepare_inputs` for ordered identity-bearing batches, `dataset_inference` for ONNX -collection, and `quality_compare` for metric comparisons. The current collector -supports ONNX/TensorRT, **not native PyTorch**: add the small native adapter using the -release predictor and extend shared postprocessing for filters/embeddings. Preserve -raw-image streaming for large datasets instead of requiring all decoded images or -embeddings in RAM. Prepared tensors may isolate runtime costs but must not replace -the image-to-result benchmark. `quality_compare` currently requires identical class -mappings; use it for matched new-model variants, with separate ID-aligned reporting -for MAMBO_v2 or different-vocabulary comparisons. - -Keep the existing canonical `mini_metric.csv` output for compatibility. If using -benchmark modules' long-form tables, provide a tested conversion or their existing -metric route; do not assume the two schemas are interchangeable. Run metrics in a -separate prepared Python 3.13 environment at the campaign's mini_metrics revision -`70cc69adc05362863439277048e06386c1f885e1`, with resolved dependencies recorded. -The existing helper supports this concrete path once each variant has completed -both canonical prediction files: - -```bash -MT_TEST_CSV=/path/to/variant/indomain/mini_metric.csv \ -MT_EXPERT_CSV=/path/to/variant/flemming/mini_metric.csv \ - bash dev/ucloud/evaluate-results.sh all /path/to/fresh/variant-metrics -``` - -The helper calls the Flemming dataset `expert` and records all-label, known-only and -per-class reports, hashes and completion markers. Initial `uvx` dependency setup -needs networking; pre-provision/pin the metric environment for offline runs. It does -not change the training environment. Selected-prediction CSVs cannot establish top-5 -accuracy; retain top-k output explicitly if reporting that metric. - -### Bounded comparison matrix - -1. Run tiny contract checks across both backends, both output modes and all three - presets plus one representative custom list; include preset-as-custom-list - equivalence. Run on CPU and the laptop GPU. This is behavioral coverage, not - a full-dataset Cartesian product. -2. Freeze a reproducible, bounded qualification subset from each original test - dataset for all eight backend × embedding × device configurations, using `full` - and `europe` first. Select by a recorded seed/ID list, preserve unknown labels, - record class coverage and label subset metrics as such. Choose the count after - a brief throughput probe so this first comparison is practical on the laptop. -3. Collect full in-domain and full Flemming predictions for native PyTorch and - standard ONNX on one selected qualified device, initially `full` and `europe`. - Reuse matching completed native runs. Evaluate `north_europe` and the representative - custom list from retained full leaf scores through the shared reducer where - semantics permit; otherwise make explicit additional inference runs. Record - coverage, avoid choosing lists from test outcomes, and retain bounded score - shards only when their reuse justifies disk cost. -4. Check embedding-enabled and CPU/GPU variants on the same qualification samples. - Extend their quality run only if task-level differences or a changed pipeline - require it. Do not claim separate full-dataset evidence for a variant tested - only on the subset. Report the embedding mode's measured time/memory overhead. -5. Include MAMBO_v2 as the historical consumer/model reference, using matching images - and each model's own preprocessing. Report both common-vocabulary and all-label - results. A backbone change is not automatically an accuracy improvement. - -Report per-rank micro accuracy, Macro-F1, Macro-Recall, Macro-Precision, Coverage and -Theil's U, plus all-label/known-only and per-class results. Keep sample counts, -active-list coverage and abstention coverage separate. Preserve undefined metrics. -Flemming's archived species accuracy (57.59% all-label, 66.74% known-only) is context, -not an acceptance threshold for every list/variant. Keep raw/unthresholded results; -any operational thresholds are fixed from separate validation/calibration data. - -Accept small numerical differences. Compare aggregate task metrics, prediction -agreement and material threshold/coverage changes; investigate substantive regressions, -not every score delta. Keep finite-value, shape, sample-order, class-ID and hierarchy -checks. Do not demand identical scores or perfect top-1 agreement on near ties, and -do not create new max-absolute-error release gates. Preserve existing exporter tests -and record prior parity evidence without rerunning a micro-numerical study. - -### CPU/GPU speed and resource protocol - -Use the same laptop, inputs and declared list/output settings for paired measurements. -Measure PyTorch CPU/CUDA and ONNX CPU/CUDA, with and without embeddings. Begin with -FP32 for a matched baseline; additionally retain the MAMBO-compatible native CUDA -autocast behavior as a clearly labelled practical mode. Record actual dtype, -autocast/TF32 settings and runtime versions; do not compare mixed precision as if -precision were matched. No new FP16 ONNX conversion is required. - -- Separate model/session load, first prediction and steady-state work. Measure both - complete image-to-consumer-result time (decode, resize, transfer, postprocess, - embedding copies included) and prepared-tensor runtime time with its boundary - stated. Do not present only kernel timing as application speed. -- Start with batch 1 for interactive latency, then a small common batch sweep such - as 8 and 32, stopping at the memory budget. Report the best practical batch per - variant separately from matched-batch comparisons. OOM is a recorded capacity - result, not permission for a silent batch/provider change. -- Use explicit CPU thread counts (one and a fixed practical allocation), identical - decode-worker budgets and bounded streaming. For GPU timing wait for completed - work through correct synchronization or completed host outputs; include transfer - in end-to-end measurements. Verify ONNX provider placement/fallback. -- Use fresh processes for load and memory measurements. After explicit warmup, - collect repeated timings in at least three alternating-order trials; report - median/p95 latency, images/s, peak RSS, peak/observed VRAM with measurement method, - failures, and variance. Avoid concurrent heavy jobs; record power mode, plugged-in - status and thermal/throttling observations. These are laptop-specific results. -- Measure `full` versus a preset and embeddings on/off. A class list applied after - ONNX execution does not reduce backbone/graph work; any native head speed benefit - or ONNX postprocessing overhead must be measured rather than inferred. - -Write one comparison table keyed by artifact hash, backend, device, precision, -embedding mode, list hash and dataset/split hash. Include quality deltas, counts, -latency/throughput, resource cost and evidence scope. Retain commands/configs, -prediction files, metric reports, raw trial timings and completion/failure markers. -Recommend defaults from the measured quality/speed/memory trade-off, allowing users -to choose a slower compatible or more restricted-environment-friendly route. - -**Done when:** a reproducible runner and concise report cover in-domain and Flemming -metrics, CPU/GPU costs, both backends and both output modes, with preset/custom-list -behavior tested and subset/full-data evidence distinguished. Material quality or -behavioral failures are resolved; small ONNX numerical variation is accepted. - -## 6. Package, stage and promote — P0 - -Keep the GitHub release as the primary discovery and migration entry point, -consistent with previous releases. Inventory artifact sizes before choosing GitHub -assets versus an immutable ERDA/object-store location; publish verified URLs and -hashes in either case. A Hugging Face mirror is useful for discoverability, but -must contain the same identified artifacts and must not become an inference-time -requirement. Follow its [model-card metadata format](https://huggingface.co/docs/hub/model-cards) -if using the Hub; hosting is separate from deploying an inference service. - -Publish standard ONNX and native PyTorch inference assets, evaluation evidence -and training-resume archives. Include license and redistribution review for the -weights, backbone, runtime, taxonomy and example images; do not infer a weight/data -license from the repository's code license. Preserve evaluation provenance without -shipping private paths, access tokens or the full 23.71-GiB campaign directory. - -Stage a prerelease with immutable versioned artifact names, migration guide, model -card, measured support matrix, known limitations, checksums/provenance and tested -installation commands. Download it as a consumer would, verify bytes, install in -clean target environments, and exercise offline prediction. Reuse unchanged -qualification evidence; repeat only packaging/readback and affected checks. - -Before public promotion, present the concrete candidate, compatibility changes, -quality comparison, supported targets and rollback instructions for release review. -Promotion changes only the declared release/default pointers after that review; -retain the old model and pinned installation path. Never overwrite MAMBO_v2 or the -existing public viewer. A later rollout problem should be recoverable by selecting -the previous model revision without changing the consumer's data or environment. - -**Done when:** published assets can be retrieved and verified, documented examples -run against them, the stable pointer identifies the reviewed candidate, and rollback -has been exercised. Release notes distinguish model changes from package/API changes. - -## Bounded implementation sequence - -| Increment | Concrete deliverable | Dependency / completion gate | -| --- | --- | --- | -| A — identity and compatibility | Verify existing artifacts; recover MAMBO_v2 API/preset fixtures and data identities | Known public distribution, tagged code and evaluation manifests | -| B — aligned inference | Native PyTorch + standard ONNX; presets/custom lists; predictions ± embeddings | A; shared preprocessing, hierarchy reduction and installed API checks | -| C — quality and local cost | Reusable variant runner; in-domain/Flemming metrics; laptop CPU/GPU speed and memory | B; bounded matrix first, then needed full-dataset comparisons | -| D — staged release | Consumer bundles, migration notes, measured trade-offs, offline checks and rollback | A–C; concrete reviewed candidate | -| E — broader portability | Additional OS/browser profiles and distribution channels | Core release preserved; qualify only new boundaries | - -A and B are implemented; C now includes full Flemming and in-domain evidence plus -laptop and full-B200 timings. Throughput optimization is closed for this release. -The next bounded task is [deployment consolidation and freeze preparation](../dev/releases/mambo_v3/deployment-freeze.md). See -the [measured release report](mambo-v3-evaluation.md), -[real-world MAMBO_v2/v3 comparison](mambo-release-comparison.md), -[deployment qualification](../dev/releases/mambo_v3/deployment-qualification.md) -and [consumer guide](../deployment/README.md). The -[UCloud workflow](../dev/releases/mambo_v3/ucloud-release.md) now prepares the -original in-domain split, public model downloads and five-pipeline CPU/GPU -comparison. Remote qualification and full evaluation have completed; the -[current HPC results](mambo-hpc-evidence.md) include the latest pipeline. -D remains preparation only: -training-source/best-epoch provenance, redistribution notices and final publication -review are open. No model release has been published or tagged. - -Native cold-start measurement identified costly classifier initialization before -checkpoint restoration. Any optimization must originate on a separate core -feature/fix branch and pass checkpoint validation before merging here. The report keeps -startup and warmed inference costs separate. -The next-training-run orchestration plan and experimental quantization are not on -this release's critical path. Additional OS and clean CUDA installation checks -are needed before making broader support claims. - -Batch scaling has been [diagnosed](mambo-batch-scaling.md): serial non-contiguous -NumPy interpolation and the strict FP32 backbone limited throughput. The -[accelerated deployment defaults](mambo-accelerated-deployment.md) now use -pixel-preserving preparation, bounded preparation threads, native backbone AMP -and ONNX TF32 through existing facilities. Both automatic GPU variants have full -Flemming evaluation; BF16 has subset qualification. No shared-core changes or -new model artifacts were needed. The broader -[metric baseline](mambo-release-comparison.md) now leads with macro scores and -retains all/known-truth results at every rank. +## Branch and integration policy -The release adapter now also supports [outer TTA](mambo-tta.md), with named -profiles and custom decoded-image transforms, plus independent preparation workers. -[Class-frequency curves](mambo-frequency-comparison.md) retain both training and -Flemming support axes. The [worker-scaling study](mambo-loading-scaling.md) confirms -historical loading/scheduling limits. Bounded streaming is now implemented and -has ordering, cancellation, error and buffer-lifetime coverage; broader HPC -scalability remains deferred. -TTA remains opt-in; `tta=True` and bare `--tta` select `rotation30_pad25_3`. The [default comparison](mambo-deployment-defaults.md) records full Flemming -metrics and fresh-process CPU/GPU timing against V2 and ordinary V3. The full set -includes the recipe-selection subset. The complementary [in-domain report](mambo-indomain-evidence.md) -now records the different response to TTA on general photographs. +`release/mambo-v3` was created after the minor version bump on master. Direct work +there is restricted to release adapters/assets, presets, packaging, documentation +and release-specific qualification. Shared-core fixes/refactors must originate on +master or a dedicated feature/fix branch, be reviewed/validated there, then merged +and checked for affected combined behavior. This includes existing browser/export +work. Classify by responsibility, not filename; release pressure does not relax +the boundary. Keep unrelated improvements on their own branches. + +## Located production artifacts and existing browser work + +The source production distribution was already published before this consumer +release: [global-lepi-production-release-20260911T150236Z](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-production-release-20260911T150236Z/index.html). +The [pinned inventory](../dev/releases/mambo_v3/inventory.toml) owns file sizes, +URLs and hashes, including PyTorch `best.pt`, standard prediction ONNX, external +tensors and the separate prediction-plus-embedding graph. Experimental PTQ stays +in the historical archive and is excluded from this release. + +The retrieved mappings agree across V2/V3: 12,632 species, 4,476 genera and 104 +families, with unchanged class order and parent maps. The selected checkpoint and +best epoch 30 are verified. Exact training Git revision and original initial-file +hash are unavailable; packaging checkout identity must not be substituted. +See [model provenance](../dev/releases/mambo_v3/MODEL_CARD.md). + +Existing browser work is recorded on `feature/prototype-browser-inference` at +`b174426a22e42618424fcb0345610ede4a415d01`: +[production integration](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/docs/production-release-integration.md) +and [qualification](https://github.com/asgersvenning/mini_trainer/blob/b174426a22e42618424fcb0345610ede4a415d01/dev/prototype_space/portable-qualification.md). +The [RC2 browser manifest](https://anon.erda.au.dk/share_redirect/HE90eyuZCT/global-lepi-viewer-20260915-rc2/browser-model/manifest.json) +identifies the same final checkpoint and embedding graph. Reuse its checked bundle, +external tensors, preprocessing, WASM worker and optional GBIF enrichment rather +than beginning a second browser exporter. + +Existing browser evidence is one real-image fixture, not broad browser/accuracy +qualification: identical-input maximum prediction/embedding errors were ~1.72e-5 / +1.80e-7; end-to-end errors were ~0.00552 / 0.000250 with matching top predictions. +The adapter's EXIF/white-alpha policy differs from the historical core reader, so +the recipe name alone is not a complete input contract. ERDA hosting previously +needed explicit runtime paths and unchanged `.mjs` content served as `.js` because +of MIME/CORS constraints; recheck hosting before new claims. Authoring checksums +do not imply browser validation of every asset fetch. + +The [repository roadmap](roadmap.md#deferred-portable-prototype-viewer-completion) +owns remaining viewer integration and human/physical-device acceptance. Static +browser inference is a useful deployment path, not a promise that every browser, +WebGPU provider or offline configuration is qualified by this release. From 1e121afed13fceb0f27416bf42bf6b74ff6be07d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 19:05:46 +0200 Subject: [PATCH 104/221] docs: consolidate historical comparisons and qualification runbooks --- .../mambo_v3/deployment-qualification.md | 115 +- dev/releases/mambo_v3/evaluation.md | 211 +-- dev/ucloud/ddp.md | 110 +- dev/ucloud/evaluate-results.md | 10 +- dev/ucloud/expert-trial.md | 22 +- dev/ucloud/test-inference.md | 8 +- docs/assets/mambo-defaults-memory.svg | 484 ----- docs/assets/mambo-defaults-quality-all.svg | 1383 -------------- .../mambo-defaults-quality-family-all.svg | 1383 -------------- .../mambo-defaults-quality-family-known.svg | 1383 -------------- .../mambo-defaults-quality-genus-all.svg | 1338 ------------- .../mambo-defaults-quality-genus-known.svg | 1338 ------------- docs/assets/mambo-defaults-quality-known.svg | 1338 ------------- docs/assets/mambo-defaults-ranks-all.svg | 1350 ------------- docs/assets/mambo-defaults-speed.svg | 940 ---------- docs/assets/mambo-defaults-tail.svg | 1670 ----------------- docs/benchmarks.md | 4 +- docs/mambo-accelerated-deployment.md | 5 +- docs/mambo-batch-scaling.md | 20 +- docs/mambo-deployment-defaults.md | 306 +-- docs/mambo-loading-scaling.md | 24 +- docs/mambo-regional-comparison.md | 135 -- docs/mambo-release-comparison.md | 9 +- docs/mambo-tta.md | 3 +- docs/mambo-v3-evaluation.md | 15 +- docs/quantized-training-validation.md | 2 +- docs/training-feature-validation.md | 55 +- 27 files changed, 293 insertions(+), 13368 deletions(-) delete mode 100644 docs/assets/mambo-defaults-memory.svg delete mode 100644 docs/assets/mambo-defaults-quality-all.svg delete mode 100644 docs/assets/mambo-defaults-quality-family-all.svg delete mode 100644 docs/assets/mambo-defaults-quality-family-known.svg delete mode 100644 docs/assets/mambo-defaults-quality-genus-all.svg delete mode 100644 docs/assets/mambo-defaults-quality-genus-known.svg delete mode 100644 docs/assets/mambo-defaults-quality-known.svg delete mode 100644 docs/assets/mambo-defaults-ranks-all.svg delete mode 100644 docs/assets/mambo-defaults-speed.svg delete mode 100644 docs/assets/mambo-defaults-tail.svg delete mode 100644 docs/mambo-regional-comparison.md diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index 9e19072..f952f76 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -1,9 +1,9 @@ -# Portable deployment qualification — 2026-09-23 +# Deployment qualification and report reproduction -This increment supplies a local bundle builder, an independent `mambo_deploy` -wheel, and the `mini_trainer.deploy.Predictor` compatibility entry point. The -consumer guide is [deployment/README.md](../../../deployment/README.md). -Shared training, loading and classifier modules are unchanged. +Current installed-package evidence is in [final qualification](final-qualification.md). +This page retains the build/check commands, TTA report reproduction and the scope +of earlier adapter checks. Consumer instructions are in +[deployment/README.md](../../../deployment/README.md). ## Reproduce @@ -48,50 +48,30 @@ working directory, blocks Python socket connections, runs both API modes and the CLI, and verifies bundle contents remain unchanged. This is not an OS-level network isolation test; platform-native runtime networking is outside that guard. -## Initial adapter increment - -| Check | Result | -|---|---| -| CPU PyTorch / ONNX, four images | 4/4 identical top-1 species/genus/family tuples for full, Europe and shared custom lists | -| RTX 3080 Ti Laptop GPU, same images | 4/4 identical tuples for those three list modes | -| Predictions with/without embeddings | Same top-1 tuples within each backend on CPU and GPU | -| Embeddings | `[4,1280]`, finite, unit length; unaffected by class mask | -| ONNX CUDA provider | CUDA first in both sessions; individual CPU operators remain allowed | -| Clean ONNX installation | No torch/training package; relocated read-only bundle, API and CLI passed | -| Minimal training wheel | Imports, CLI help without deployment extra, training, reload and prediction passed | -| Focused release suite | 28 tests passed, including eight deployment contracts | -| Static checks | Ruff, formatting and both import contracts passed; standalone deployment package checked separately | - -The optional broader `dev/check.sh all` run was interrupted while still in -unrelated benchmark tests after approximately five minutes; it did not establish -a complete full-suite result. No failure had been reported before interruption. - -CPU comparison used PyTorch 2.12.0, ONNX Runtime 1.29.0, NumPy 2.4.6 and -Pillow 12.2.0. GPU qualification used the CUDA 13.0 PyTorch build and ONNX -Runtime GPU 1.30.0. Its temporary environment reused existing training dependencies; -it was not a clean GPU dependency-resolution test. The independent CPU-only install -used ONNX Runtime 1.30.0, NumPy 2.5.3 and Pillow 12.3.0, Python 3.13.7 on Linux. -Local JSON evidence is under `local-evidence/mambo-v3/*deployment-qualification.json` -and `portable-install-qualification.json` (ignored). - -The shared NumPy preprocessing implements the recorded campaign recipe. A sampled -comparison to the original torchvision path differed by at most one uint8 level -at resize rounding boundaries; it is not a byte-exact preprocessing claim. - -## Subsequent evaluation and remaining work - -The [measured release report](../../../docs/mambo-v3-evaluation.md) supersedes the -initial subset-only evidence above with full Flemming metrics, CPU/GPU timings -and a completed broad test suite. The [evaluation workflow](evaluation.md) preserves -unknown truth and documents the UCloud commands. In-domain inference and its -mini_metrics presentation have completed; see the [in-domain evidence](../../../docs/mambo-indomain-evidence.md). -The [freeze preparation](deployment-freeze.md) identifies final installed-artifact -checks after consolidation; the initial results below do not certify those final wheels. - -Four deterministic images establish execution contracts, not representative -accuracy, embedding quality or speed. Windows/macOS, clean CUDA installations, -additional architectures, training revision/best-epoch provenance and redistribution -notices remain unqualified. Nothing has been uploaded, tagged or promoted. +## What the early checks established + +The September 23 adapter check used four deterministic images on CPU and an +RTX 3080 Ti Laptop. Both runtimes agreed on species/genus/family top-1 for +full/Europe/custom lists, with and without embeddings. Vectors were finite unit +1280-dimensional embeddings, unchanged by class masks. This qualifies execution +contracts, not representative accuracy or downstream embedding quality. + +The independent ONNX-only CPU install used Python 3.13.7, ORT 1.30.0, NumPy 2.5.3 +and Pillow 12.3.0. CPU backend comparison used PyTorch 2.12.0, ORT 1.29.0, +NumPy 2.4.6 and Pillow 12.2.0; CUDA used PyTorch cu130 and ORT GPU 1.30.0, +reusing existing NVIDIA libraries. It was not a clean GPU dependency-resolution +test. Local reports remain under +`local-evidence/mambo-v3/*deployment-qualification.json` and +`portable-install-qualification.json`. + +The original torchvision/NumPy resize comparison differed by at most one uint8 +level at rounding boundaries. Later full-dataset, installed-artifact and TTA +checks supersede this small initial qualification; see +[local evaluation](../../../docs/mambo-v3-evaluation.md), +[in-domain evidence](../../../docs/mambo-indomain-evidence.md) and +[final qualification](final-qualification.md). +The latter owns current package identities, notices and remaining limitations; +early checks do not certify the final wheels or untested operating systems. ## Enabled-TTA promotion — 2026-09-24 @@ -146,21 +126,13 @@ campaigns remain a limitation. Timing does not reuse full-evaluation wall time. Resource records retain host peak RSS. New runs cover northern Europe only; earlier resource sweeps also covered other presets, so RSS is descriptive. -Promotion checks: 53 focused release checks passed (including the two pinned-metric -checks run separately), static/import checks passed, and preset transforms match -the full-study transforms byte-for-byte. The standalone wheel builds offline and -its enabled default imports without torch or mini_trainer in a clean Python 3.13 -environment. Python 3.14 installation was not qualified: its wheels were absent -from the offline cache. Older regional/frequency/threshold studies are preserved -and labelled historical rather than relabelled as new-recipe evidence. - -The installed ONNX-only wheel also passed prediction-only/embedding API and CLI -inference with the selected recipe against a relocated read-only bundle, with -Python socket connections blocked and model hashes unchanged. Evidence: -`local-evidence/mambo-promoted-portable.json`. The twelve timing trials completed; -GPU batch-32 throughput was 50.89 images/s native and 38.27 ONNX. CPU batch-1 was -2.04 and 3.39 images/s. Trial ranges and input hashes are in -`docs/assets/mambo-promoted-speed.json`. +The promoted transforms matched the full-study transforms byte-for-byte. +The installed ONNX-only wheel passed prediction/embedding API and CLI with TTA +against a relocated read-only bundle, Python socket calls blocked and unchanged +model hashes (`local-evidence/mambo-promoted-portable.json`). Python 3.14 was not +qualified in that offline environment. Timing observations and input hashes remain +in `docs/assets/mambo-promoted-speed.json`; current results are linked from the +deployment README rather than repeated here. ## CUDA optimization compatibility probe — 2026-09-24 @@ -170,11 +142,10 @@ optimizations disabled; no CPU-only fallback or retry of unrelated errors occurs The selected profile and initialization/probe timings are retained in reports. A batch-one check does not establish every batch-dependent execution path. -On the RTX 3080 Ti laptop with ORT GPU 1.30.0, both optimized graphs executed, -including default TTA and embedding output. Injecting the initial compatibility -error exercised recovery into real unoptimized CUDA execution for both graphs. -This validates local recovery mechanics, not resolution of the reported B200 -failure. The installed ONNX-only wheel also passed CPU prediction, embeddings and -TTA without importing torch. Focused deployment/download/evaluation checks passed -(64 tests); nine UCloud harness tests passed separately. Static/import checks and -the standalone deployment lint/format checks passed. No full suite was run. +On the RTX 3080 Ti Laptop with ORT GPU 1.30.0, both optimized graphs ran, +including TTA and embeddings. Injecting an initial compatibility error exercised +real unoptimized CUDA recovery for both graphs. This qualified recovery mechanics, +not the B200 failure: there, the same wheel also failed an unfused standalone +Sigmoid. The [UCloud runbook](ucloud-release.md) records the separately qualified +ORT build used for that environment. Disabling graph optimizations is not a +general runtime/device compatibility fix. diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index 4d8e629..8e011a2 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -1,146 +1,97 @@ -# Release evaluation and UCloud handoff +# Local release evaluation -The runner compares the pinned native PyTorch and standard ONNX artifacts through -the release preprocessing and hierarchy reducer. No quantization, retraining, -threshold optimization or new dataset split is involved. All work here is release -tooling; the shared core remains unchanged. +This runbook collects same-model PyTorch/ONNX evidence on Flemming. For the +five-pipeline V2/V3 in-domain campaign use [UCloud release evaluation](ucloud-release.md); +for current release results and qualification use [the deployment freeze](deployment-freeze.md). -## Local workflow +## Collect predictions -Use the existing checkout environment without syncing, or install the candidate -wheels and prepare a separate CUDA environment. The local qualification uses -Python 3.13.7, PyTorch 2.12.0+cu130, ONNX Runtime GPU 1.30.0, NumPy 2.4.6 and -Pillow 12.2.0. ONNX CPU execution does not import PyTorch. CUDA library dependencies -must be provisioned separately (CUDA 13 and cuDNN 9 for this tested ORT build); a CPU-only ONNX wheel cannot execute CUDA. - -From the repository root: +Run from the repository root in the existing environment without synchronization, +or in a separately prepared runtime following the [deployment install guide](../../../deployment/README.md). +Use a fresh output for each phase; inspect qualification before starting full runs. ```sh python -m dev.releases.mambo_v3.evaluate prepare \ --root /path/to/flemming \ --reference /path/to/production/evaluation/expert/predictions/mini_metric.csv \ --output /path/to/flemming-manifest.json - -python -m dev.releases.mambo_v3.run_local qualification \ +python -m dev.releases.mambo_v3.run_local qualification --precision auto \ --python /path/to/runtime-env/bin/python \ --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ --root /path/to/flemming --output /path/to/new-subset-run ``` -The evaluation and timing commands retain `--precision fp32` by default to -preserve the original reference protocol. Pass `--precision auto` to measure the -current deployment defaults (native CUDA FP16 backbone, ONNX CUDA TF32, CPU FP32). -The [accelerated comparison workflow](../../../docs/mambo-accelerated-deployment.md#reproduce) -provides the full qualification and three-trial timing commands. The public -`Predictor` and deployment CLI default to `auto`; every report records the resolved -precision. - -Preparation joins all three archived truth ranks by original species/image identity -and hashes local image bytes. It rejects missing/extra images and duplicate or -incomplete truth. The seeded 256-image subset comes from the existing benchmark -selector; it is a qualification subset, not a replacement for the full expert set. -The manifest preserves every truth label, including labels outside the model. - -After reviewing qualification, replace `qualification` with `full` for the two full -GPU prediction runs, or `benchmark` for isolated timing trials. Always choose a -new output directory. Failed outputs are preserved; a report must say `complete` -before using its predictions. Jobs run sequentially; do not overlap the timing -phase with collection, metrics or other heavy work. - -The collector prepares at most one model batch with four ordered preprocessing -workers (`collect --decode-workers 0` selects serial preparation), checks image -hashes and executes the -backbone once. It then applies the same reducer to `full`, legacy `europe` and -`north_europe`, and updated `europe_v3` and `north_europe_v3`. No leaf-score archive -is needed for these predetermined lists. Qualification also verifies that supplying -the updated Europe preset as a custom class list preserves mask membership/order. -Embeddings are written incrementally into a memory-mapped NPY array on subset runs. - -Each variant retains ordered sample identities, artifact/list hashes, precision, -runtime versions, timing components, canonical CSVs and a completion/failure report. -Use `compare_quality` for paired identity/ground-truth checks and per-rank top-1 -agreement/accuracy deltas. Small score differences are not a release failure. +Preparation joins all three archived truth ranks by original species/image identity, +hashes image bytes, and rejects missing/extra images or duplicate/incomplete truth. +It preserves out-of-vocabulary labels. Qualification selects 256 images from that +population; it does not redefine the full dataset or supplied training/test splits. + +The historical runner defaults to `--precision fp32`; explicit `auto` matches +deployment defaults. TTA is off unless requested; pin a recipe when reproducing +historical studies. Replace `qualification` with `full` for two full GPU +prediction runs, or `benchmark` for isolated timing trials, changing the output +directory each time. Jobs are sequential; do not overlap timing with other work. + +The collector checks hashes and applies full, legacy Europe/northern Europe and +updated European lists to each inference batch. Qualification also checks a +custom list equivalent to updated Europe, prediction/embedding agreement and +1280-dimensional unit embeddings. Embeddings are written incrementally to NPY. +Streaming controls and current ownership boundaries are described in the +[pipeline review](../../../docs/mambo-inference-pipeline-review.md). + +Retained outputs include ordered sample identities, artifact/list hashes, precision, +runtime versions, canonical prediction CSVs and completion/failure reports. Use only +`complete` reports. Paired comparison checks identity/truth and label agreement; +all predictive metrics come from `mini_metrics`: ```sh python -m dev.releases.mambo_v3.compare_quality /path/to/left /path/to/right \ --output /path/to/comparison.json ``` -## Fixed metric policy +## Metrics -Prepare a separate environment at the campaign's mini_metrics commit: +Use the campaign's pinned metric environment, independently of runtime dependencies: ```sh uv venv --python 3.13 /path/to/metrics-env uv pip install --python /path/to/metrics-env/bin/python \ 'mini_metrics @ git+https://github.com/GuillaumeMougeot/mini_metrics.git@70cc69adc05362863439277048e06386c1f885e1' /path/to/metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ - --source /path/to/variant/europe_v3/mini_metric.csv \ - --output /path/to/variant/europe_v3/metrics.json + --collection /path/to/full-run ``` -For a completed full phase, use `--collection /path/to/full-run` instead of -`--source`/`--output` to generate every variant/list report, skipping only existing -reports whose input hash and metric revision match. The helper enforces that revision and -reports per-rank micro accuracy, the pinned implementation's macro-F1, macro-recall, -macro-precision, coverage and Theil's U, including known-only and per-class results. -Undefined values remain null. List coverage (truth in the active vocabulary) and -abstention coverage are distinct; the latter is 100% at the fixed zero threshold. -Do not choose thresholds or geographic filters from test results. - -## Timing protocol - -The benchmark runs three fresh-process trials in alternating variant order: -PyTorch/ONNX × CPU/CUDA × predictions/embeddings. Four-thread CPU trials use batches -1 and 8, and GPU trials also include 32; additional one-thread CPU trials measure -batch-1 latency. CPU/GPU comparisons use the common batch sizes; this bounded -sweep does not establish the maximum possible CPU throughput. Both `full` -and `europe_v3` are measured. Every configuration uses the same seeded 32-image bank (the appropriate prefix -for each batch). Each cell uses two warmups and seven observations; -retain raw observations and show between-trial variation, not only one best time. - -Runtime import/configuration, lightweight predictor construction and first-call -time are recorded separately from warmed work. These are application boundaries, -not cold-boot or complete Python-interpreter startup measurements. -The cold first call includes lazy loading; instrumentation records checkpoint -loading/model construction or ONNX session construction inside that call. Prepared -runtime timings include CPU-to-device and device-to-CPU transfers, but omit image -decoding and hierarchy reduction. End-to-end timings include those operations and -embedding copies. GPU calls return completed CPU arrays, so timings include completed -work. FP32 is used with TF32 disabled for both backends; no autocast is enabled. - -RSS is the Linux process high-water mark across a trial's batch sweep. Native CUDA -allocator peaks and nvidia-smi device/process snapshots are retained. Snapshots are -observations, not continuous per-process ONNX peak measurements. Record AC state, -clocks, temperatures, power and any unavailable power-policy fields. ONNX CUDA may -place some operators on CPU; provider placement requires the separate profiler. -These are measurements of this laptop/environment, not universal hardware claims. - -## UCloud: preparation only - -The 632,913 original test identities and all three truth ranks have been checked -locally against the pinned Parquet (`set == "0"`), archived staging map and archived -prediction CSV. Staged numeric filenames are never used as original identities. -This does not verify image availability or content on UCloud. - -Use the [UCloud release workflow](ucloud-release.md) for isolated `uv` setup, -automatic artifact downloads, five-pipeline qualification, full collection and -CPU/GPU benchmarks. Only the original Parquet location is required as dataset -input when images retain their original layout. No in-domain inference has been -run locally. - -## Publication preparation - -Before staging, attach the measured results to the short deployment README, -freeze wheel/runtime versions and bundle revision, and resolve training-source -revision, best-epoch provenance and model/data redistribution notices. Add the -in-domain results when UCloud runs finish. Keep MAMBO_v2 model-quality comparison -separate from this same-model backend comparison; the archived September native -predictions are historical context, not MAMBO_v2 evidence. Cross-OS and clean CUDA -installation claims require their own checks. No publishing, tagging or uploading -is performed by these tools. - -After metrics and all timing trials complete, generate the combined tables: +For one list, use `--source /path/to/mini_metric.csv --output /path/to/metrics.json` +instead. Existing reports are reused only when input hash and metric revision match. +Schema `mini-metrics-quality-v2` rejects the older direct-accuracy extractor. + +The report retains macro accuracy (`accuracy`), `micro_accuracy`, F1, recall, +precision, coverage and Theil U, plus per-class and known-only results at every rank. +Undefined values remain null. Truth-vocabulary coverage differs from abstention +coverage; the latter is 100% at this collector's zero threshold. +[Threshold calibration](../../../docs/mambo-confidence-thresholds.md) uses a +separate calibration partition, and [tail reporting](../../../docs/mambo-tail-metrics.md) +changes the macro averaging domain. Those later analyses reuse predictions. + +## Timing and summary + +`run_local benchmark` runs three alternating-order fresh-process trials per +PyTorch/ONNX × CPU/CUDA × predictions/embeddings setting. Four-thread CPU uses +batches 1/8; GPU adds 32; one-thread CPU adds batch-1 measurements. All cells use +the same seeded 32-image bank, two warmups and seven observations. Preserve raw +observations and trial ranges; this is a bounded sweep, not maximum throughput. + +End-to-end timing covers decoding through completed CPU results, including +hierarchy reduction and requested embeddings. Prepared-runtime timing omits image +preparation and hierarchy reduction but includes transfers. Runtime import/setup, +predictor construction and lazy first call are separate; neither is cold-boot +latency. Nested startup components must not be summed. Reports retain resolved +precision, so FP32 reference runs and automatic-precision runs remain distinguishable. + +RSS is the process high-water mark across the sweep. PyTorch allocator peaks are +not total VRAM; `nvidia-smi` snapshots are not continuous ONNX peaks. Record power, +clocks, temperature and unavailable policy fields. A CUDA provider can place some +operators on CPU; placement needs a separate profiler, whose timing is excluded. ```sh python -m dev.releases.mambo_v3.summarize \ @@ -148,30 +99,8 @@ python -m dev.releases.mambo_v3.summarize \ --output /path/to/new-summary ``` -Both human-readable and machine-readable summaries preserve evidence scope. The -summary refuses an incomplete timing phase. Keep source CSVs, raw timings and -reports alongside it when staging release evidence. - -The local isolated GPU environment reuses the already-installed CUDA libraries. -Its first independent ONNX placement attempt could not locate those libraries; -exposing the existing NVIDIA dependency directory in that temporary environment -resolved it without importing PyTorch. A fresh supported deployment should install -matching NVIDIA dependencies into its own environment or configure library search -paths explicitly. Both profiled graphs then ran all 170 convolution operations on -CUDA; one `Acos` and four `Concat` operations remained on CPU. The profiler's -incidental timings overlapped collection and are not included in speed results. - -Native startup instrumentation also records spherical classifier initialization. -That measurement is nested inside model construction, so the loading components -must not all be added together. The existing core constructs a normalized head -with 100 initialization iterations before loading checkpoint weights; any change -to that shared loading behavior belongs on a separate feature/fix branch with -checkpoint validation, not directly on the release branch. - -Metric extraction uses mini_metrics for all predictive scores, explicitly selecting -`micro_accuracy` (the bare `accuracy` field is macro), `accuracy`, `f1`, `recall`, -`precision`, `coverage` and `theilU`. Both `known_only=False` and `True` are retained; -rank summary fields reference those outputs. Schema `mini-metrics-quality-v2` -rejects cached results from the older direct-accuracy extractor. Archive old metric -JSON before recomputing from unchanged prediction CSVs. Pairwise comparison reports -only prediction agreement; predictive accuracy comes from the metric files. +The summary rejects incomplete timing phases. Preserve its source CSVs, observations +and reports. [Initial FP32 results](../../../docs/mambo-v3-evaluation.md) retain the +original environment and installed-package checks; [accelerated results](../../../docs/mambo-accelerated-deployment.md) +record the later AMP comparison. In-domain collection and presentation have since +completed; cross-OS and additional hardware support must not be inferred from them. diff --git a/dev/ucloud/ddp.md b/dev/ucloud/ddp.md index 0eda954..48582c3 100644 --- a/dev/ucloud/ddp.md +++ b/dev/ucloud/ddp.md @@ -1,10 +1,14 @@ # Four-GPU qualification and production handoff +Reusable procedure from the September training campaign. For its selected production +recipe, results and recovery lessons see the +[training post-mortem](../../docs/training-workflow-postmortem.md). + Use one manually allocated UCloud node with **four full B200 GPUs**, the actual Parquet and image storage, and internet access. `ddp.json` rejects devices below 140 GiB each, so this is not a continuation on the fractional-GPU job. -The chosen configuration is floating-point training on `quant`: FP16 AMP, model +The historical profile selects floating-point training on `quant`: FP16 AMP, model compilation, figures, W&B, loss auditing and checkpoints. Optimizer compilation, explicit CUDA prefetch, INT8 and EMA remain off. Qualification alone uses the Python API. Production will use `mt_htrain` under `torchrun`. @@ -16,13 +20,13 @@ review the production batch and learning-rate schedule explicitly before trainin ## Setup and authentication -Clone the repository on branch `quant` into `/work/mini_trainer` (or pull it there). -Use the same checkout throughout the campaign; preparation hashes the harness. -With `uv`, `git`, Python and a C++ compiler available: +Follow [the UCloud setup](README.md#fresh-job-setup) to install uv and clone the +reviewed harness revision. The profile's historical package pins are deliberate; +select new pins explicitly for a new campaign. Preparation hashes the harness, so +keep the checkout unchanged during a campaign. With a C++ compiler available: ```bash cd /work/mini_trainer -git pull --ff-only MT_TEMPLATE=dev/ucloud/ddp.json MT_CONFIG=/work/ddp-b32.json \ bash dev/ucloud/setup.sh \ /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet @@ -141,66 +145,19 @@ four successful `restore-rank*.json` records, finite train/eval losses, stable memory, and working figures/checkpoints after restoration. This tests state restoration and continued execution, not bitwise reproduction of augmentation RNG. -## Keep the allocation and hand off immediately - -Qualification and production run in the **same allocated UCloud job**. Do not -terminate/release the job, rebuild its environment, or wait for a new allocation -between them. The separate storage campaign below means a separate harness budget -and output directory, not another UCloud job. Do not enable the continuous-benchmark -provisioning/cleanup policy for this production allocation. - -Before qualification, prepare the production CLI configuration and verify its paths, -full-dataset splits, pinned environment, W&B authentication, output location and -learning-rate/epoch recipe. Leave only measured batch and worker choices to finalize. -Keep the selected environment and caches warm. Reserve qualification time **in -addition to** the intended production duration in the UCloud job lifetime, plus -checkpoint/finalization margin; verify remaining time before launch. If the job -lifetime is insufficient, resolve its extension or a shorter reviewed training -budget while qualification runs rather than releasing the allocation. - -After the required gates pass, record the selected batch/workers and qualification -report, finalize the pre-reviewed production configuration, and launch `mt_htrain` -under four-rank `torchrun` immediately in the existing terminal/tmux session. Do not -spend the allocation completing optional sweep points once the choice is supported. -The production configuration is still an explicit prerequisite, not generated or -validated by these qualification commands. - -## Production uses the public CLIs - -Do not launch the 24-hour run from this qualification harness. After qualification, -freeze a reviewed `production.yaml` for the full dataset, selected batch and -worker count, intended learning-rate schedule, complete taxonomy and preprocessing. -Record package/dependency pins, W&B run, split provenance and checkpoint hashes. -The final epoch count and learning-rate recipe need a separate production decision; -short qualification accuracy does not select them. - -The planned command interface is: +## Production handoff -```bash -/work/venvs/mt-quant/bin/python -m torch.distributed.run \ - --standalone --nnodes=1 --nproc-per-node=4 --max-restarts=0 --no-python \ - /work/venvs/mt-quant/bin/mt_htrain --config /work/production.yaml --wandb --compile +Keep qualification and production in the same allocated UCloud job, with the +qualified environment and warm caches. Do not apply automated benchmark +provisioning/cleanup to this allocation. Reserve time for qualification plus +production and checkpoint/finalization margin; check remaining lifetime before +launch and resolve any required extension while qualification runs. -/work/venvs/mt-quant/bin/mt_hpredict --config /work/evaluation.yaml -uvx --from "mini_metrics @ git+https://github.com/asgersvenning/mini_metrics.git@$METRICS_SHA" \ - mm_metrics --files "$PREDICTIONS_CSV" --output-dir /work/production-metrics --output - -/work/venvs/mt-quant/bin/mt_export --weights "$BEST_PT" \ - --output /work/production-onnx --input-shape 3 384 384 \ - --preprocessing /work/deployment-preprocessing.json -``` - -These production/evaluation files and shell variables are **handoff placeholders**, -not runnable configs yet. `METRICS_SHA` must be a reviewed immutable commit. -Evaluation must use only the original held-out test split, with matching class -order and score semantics. Use the existing `mt_hpredict` CLI for this hierarchical -model; it also provides an explicit flat-head route. Consolidating inference into -one CLI is [deferred on the roadmap](../../docs/roadmap.md#5-mini_metrics-and-continuous-model-evaluation), -not a production prerequisite. Verify the deployment preprocessing and real-image -ONNX parity following [the export guide](../../docs/onnx.md). - -A later full `master` training comparison remains optional and separate. This -qualification deliberately selects and stress-tests one configuration. +Prepare paths, full supplied splits/taxonomy, W&B authentication and the intended +learning-rate/epoch recipe in advance. Finalize batch/workers from measured +throughput and memory, not short qualification accuracy. Generate the reviewed +configuration and launch the public CLI using the commands below. Do not spend +the allocation finishing optional sweep points after a choice is supported. ## Bounded resource-utilization decisions @@ -218,20 +175,16 @@ because their planned duration was sufficient. Changing the epoch horizon also changes the learning-rate schedule, so these are throughput trials, not matched convergence comparisons. -After selecting a batch, compare workers while holding batch, subset and epoch -horizon fixed. Start with 8/GPU; try 16/GPU only if loading/throughput evidence -justifies it. A small timing difference is not enough to select a winner. +After selecting a batch, hold batch, subset and epoch horizon fixed for a worker +comparison. Use the resource allocation and phase evidence to choose a meaningful +increase; the production campaign ultimately needed much higher I/O concurrency +than the initial 4–16 worker probes (see the post-mortem). A small cached subset +cannot select production storage concurrency by itself. ```bash -BATCH=64 # replace with measured choice -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-w8.json \ - --output /work/results/global-lepi-ddp-4gpu-w8-1 --batch "$BATCH" --workers 8 -run_trial /work/ddp-w8.json - -# Optional, after reviewing w8: -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-w16.json \ - --output /work/results/global-lepi-ddp-4gpu-w16-1 --batch "$BATCH" --workers 16 -run_trial /work/ddp-w16.json +python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-workers.json \ + --output /work/results/global-lepi-ddp-workers-1 --batch "$BATCH" --workers "$WORKERS" +run_trial /work/ddp-workers.json ``` Use `--workers "$WORKERS"` for both stability and restoration trials once workers @@ -298,7 +251,7 @@ batches are not automatically assigned a linearly scaled learning rate. PRODUCTION_OUTPUT=/work/results # user-confirmed persistent storage for this job /work/venvs/mt-quant/bin/python dev/ucloud/production.py \ - /work/results/global-lepi-ddp-4gpu-b32-2 /work/production.yaml \ + /work/results/global-lepi-ddp-4gpu-b32-1 /work/production.yaml \ --output "$PRODUCTION_OUTPUT" --name global-lepi-production-1 \ --batch "$BATCH" --workers "$WORKERS" --epochs "$EPOCHS" ``` @@ -332,3 +285,8 @@ The CLI does not inherit qualification-only finite-loss auditing or timing wrapp Inspect the epoch summary and checkpoints during production; the full-dataset run has no harness wall-time guard and stops at its configured epoch horizon or when the job/process is terminated. Evaluation/export are separate post-training activities. + +For held-out prediction/metrics and export after training, use +[the evaluation runbook](evaluate-results.md) and [ONNX export guide](../../docs/onnx.md). +Preserve class order, score semantics and preprocessing; a later master-versus-quant +training comparison remains a separate experiment. diff --git a/dev/ucloud/evaluate-results.md b/dev/ucloud/evaluate-results.md index 1df4a56..9692740 100644 --- a/dev/ucloud/evaluate-results.md +++ b/dev/ucloud/evaluate-results.md @@ -1,10 +1,13 @@ # Production evaluation with mini_metrics +This is the original training-campaign CLI evaluation. The later MAMBO comparison +has its own [release protocol](../releases/mambo_v3/ucloud-release.md), including +disjoint calibration/reporting partitions. + Run expert evaluation as soon as expert inference has completed: ```bash cd /work/mini_trainer -git pull --ff-only bash dev/ucloud/evaluate-results.sh expert /work/evaluation-1 ``` @@ -47,8 +50,9 @@ hierarchy-wide metrics; per-level metrics are still produced normally. No optimal-threshold fitting, subsampling or label filtering is enabled. The thresholds recorded in prediction files are retained. These collector files contain the selected prediction per level, so they cannot establish top-5 -accuracy. The expert dataset evaluates external performance; it should not be -used for selecting this model's thresholds or checkpoints. +accuracy. The expert dataset evaluates external performance. This baseline does not fit +thresholds or select checkpoints; later calibration analyses must keep their +calibration and reporting samples disjoint. Aggregate metric tables and progress are printed live in the terminal and retained in the corresponding logs. `pipefail` preserves failures through `tee`. diff --git a/dev/ucloud/expert-trial.md b/dev/ucloud/expert-trial.md index 4b3629d..0359230 100644 --- a/dev/ucloud/expert-trial.md +++ b/dev/ucloud/expert-trial.md @@ -1,16 +1,16 @@ # Bounded expert inference staging trial -Stop the stalled full-test prediction and obsolete expert index creation with -Ctrl+C in their terminals first. Do not run this alongside additional cold-read -jobs. Saved training weights are unaffected; interrupted prediction currently -loses in-memory predictions because its collector writes at completion. +Historical helper for the September training campaign's expert images and weights. +For current MAMBO release comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). +The [training post-mortem](../../docs/training-workflow-postmortem.md) records the +completed staging/inference work and lessons. -This helper targets the mounted expert folder and trained weights used in the -current qualification. Run from the node after pulling the committed helpers: +Run from the reviewed checkout on the allocated node, without competing cold-read +jobs. This older collector retains predictions in memory until completion, so +interruption loses unfinished prediction output. ```bash cd /work/mini_trainer -git pull --ff-only bash dev/ucloud/expert-trial.sh ``` @@ -33,7 +33,7 @@ Defaults: contains only input and weights; output/name are explicit CLI arguments. `/dev/shm` is RAM-backed. The byte cap limits copied images, not total process or -loader memory. This assumes the current large-memory allocation. `/tmp` overlay +loader memory. This assumes the original large-memory allocation. `/tmp` overlay storage has not been established as node-local and is not used for this trial. Watch either phase in another terminal: @@ -64,7 +64,7 @@ fast. Measure the full expert dataset's encoded size and available job memory before raising the cap. This round-robin subset is a storage/functionality trial, not the expert benchmark; do not report its accuracy as a full-dataset result. Retain the full benchmark's unknown species when subsequently running mini_metrics. -The full test split remains deferred until throughput is adequate. +Full test staging uses [its separate helper](test-inference.md). RAM staging disappears with the job. Predictions, logs, configuration and manifest are retained under `/work`. Staged files can be deleted once their corresponding @@ -80,5 +80,5 @@ bash dev/ucloud/expert-trial.sh /work/expert-staging-trial-4 \ This checks the previous completed manifest and staged file sizes. The source paths remain recorded, and the new output receives its own configuration and logs. -Taxonomy still uses the node's existing GBIF response cache; cache/API failures -remain distinct from the corrected count-versus-rank selection bug. +Taxonomy still uses the node's GBIF response cache; cache/API failures are +separate from filesystem staging failures. diff --git a/dev/ucloud/test-inference.md b/dev/ucloud/test-inference.md index cff8afc..8354e20 100644 --- a/dev/ucloud/test-inference.md +++ b/dev/ucloud/test-inference.md @@ -1,9 +1,11 @@ # Full in-domain test inference +Historical training-campaign helper using its production index and source overlay. +For current V2/V3 release comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). + From `/work/mini_trainer`, run in tmux: ```bash -git pull --ff-only bash dev/ucloud/test-inference.sh /work/test-full-1 ``` @@ -16,8 +18,8 @@ and free-space check apply before copying. Size inspection precedes copy progres The normal `mt_hpredict` CLI runs on GPU 0 with input, weights and the staged index supplied; other defaults come from the inference CLI and model metadata. The existing isolated inference source overlay is used without reinstalling. -Each stage has a one-hour timeout. Stop any old stalled test inference before -starting this run. This helper does not terminate unrelated processes. +Each stage has a one-hour timeout. Use fresh output paths and avoid concurrent +cold-read workloads. This helper does not terminate unrelated processes. ```bash tail -n 5 /work/test-full-1/stage.log diff --git a/docs/assets/mambo-defaults-memory.svg b/docs/assets/mambo-defaults-memory.svg deleted file mode 100644 index 3cd1f28..0000000 --- a/docs/assets/mambo-defaults-memory.svg +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - torch - - - - - - - - - - V3 - ONNX - - - - - - - - - - torch - + TTA - - - - - - - - - - ONNX - + TTA - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 1000 - - - - - - - - - - - - - 2000 - - - - - - - - - - - - - 3000 - - - - - - - - - - - - - 4000 - - - - Peak host RSS (MiB) - - - - - - - - - - - - - - - - - - - - - - - - - 4123 - - - 1618 - - - 689 - - - 1639 - - - 671 - - - CPU execution - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - torch - - - - - - - - - - V3 - ONNX - - - - - - - - - - torch - + TTA - - - - - - - - - - ONNX - + TTA - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 1000 - - - - - - - - - - - - - 2000 - - - - - - - - - - - - - 3000 - - - - - - - - - - - - - 4000 - - - - Peak host RSS (MiB) - - - - - - - - - - - - - - - - - - - - - - - - - 4123 - - - 2512 - - - 1619 - - - 2442 - - - 1629 - - - GPU execution - - - - Process memory · median of three fresh processes - - - Host memory, not GPU VRAM; includes loading and complete CPU 1/8 or GPU 1/8/32 batch sweep. - TTA retains original decoded images for each batch; memory depends on source dimensions. - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-all.svg b/docs/assets/mambo-defaults-quality-all.svg deleted file mode 100644 index 4cc839f..0000000 --- a/docs/assets/mambo-defaults-quality-all.svg +++ /dev/null @@ -1,1383 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 68.5 - - - 66.0 - - - 57.2 - - - 71.2 - - - 69.0 - - - 58.0 - - - 71.2 - - - 69.1 - - - 58.0 - - - 73.9 - - - 71.8 - - - 61.7 - - - 74.0 - - - 71.8 - - - 61.7 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.00 - - - - - - - - - - - - - 0.05 - - - - - - - - - - - - - 0.10 - - - - - - - - - - - - - 0.15 - - - - - - - - - - - - - 0.20 - - - - - - - - - - - - - 0.25 - - - - - - - - - - - - - 0.30 - - - - - - - - - - - - - 0.35 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.258 - - - 0.200 - - - 0.090 - - - 0.254 - - - 0.200 - - - 0.097 - - - 0.254 - - - 0.200 - - - 0.097 - - - 0.294 - - - 0.228 - - - 0.111 - - - 0.294 - - - 0.228 - - - 0.111 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.274 - - - 0.220 - - - 0.110 - - - 0.263 - - - 0.213 - - - 0.119 - - - 0.263 - - - 0.213 - - - 0.119 - - - 0.305 - - - 0.243 - - - 0.131 - - - 0.306 - - - 0.244 - - - 0.132 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 68.7 - - - 67.0 - - - 59.4 - - - 70.8 - - - 68.9 - - - 58.4 - - - 70.8 - - - 68.9 - - - 58.4 - - - 73.2 - - - 71.6 - - - 62.6 - - - 73.2 - - - 71.6 - - - 62.6 - - - Micro accuracy (%) - - - - MAMBO release comparison · species metrics · all truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-family-all.svg b/docs/assets/mambo-defaults-quality-family-all.svg deleted file mode 100644 index 696f3f8..0000000 --- a/docs/assets/mambo-defaults-quality-family-all.svg +++ /dev/null @@ -1,1383 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 84.4 - - - 83.5 - - - 80.7 - - - 81.1 - - - 80.6 - - - 78.4 - - - 81.1 - - - 80.6 - - - 78.4 - - - 85.7 - - - 85.6 - - - 81.5 - - - 85.7 - - - 85.6 - - - 81.5 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.269 - - - 0.251 - - - 0.205 - - - 0.280 - - - 0.256 - - - 0.194 - - - 0.281 - - - 0.256 - - - 0.194 - - - 0.297 - - - 0.275 - - - 0.218 - - - 0.297 - - - 0.275 - - - 0.218 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.00 - - - - - - - - - - - - - 0.05 - - - - - - - - - - - - - 0.10 - - - - - - - - - - - - - 0.15 - - - - - - - - - - - - - 0.20 - - - - - - - - - - - - - 0.25 - - - - - - - - - - - - - 0.30 - - - - - - - - - - - - - 0.35 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.260 - - - 0.243 - - - 0.197 - - - 0.275 - - - 0.252 - - - 0.188 - - - 0.276 - - - 0.252 - - - 0.188 - - - 0.285 - - - 0.265 - - - 0.213 - - - 0.285 - - - 0.266 - - - 0.213 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 94.5 - - - 94.2 - - - 92.7 - - - 93.0 - - - 92.9 - - - 90.3 - - - 93.0 - - - 92.9 - - - 90.3 - - - 94.8 - - - 94.7 - - - 92.8 - - - 94.8 - - - 94.7 - - - 92.8 - - - Micro accuracy (%) - - - - MAMBO release comparison · family metrics · all truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-family-known.svg b/docs/assets/mambo-defaults-quality-family-known.svg deleted file mode 100644 index 5de27cc..0000000 --- a/docs/assets/mambo-defaults-quality-family-known.svg +++ /dev/null @@ -1,1383 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 84.4 - - - 83.5 - - - 80.7 - - - 81.1 - - - 80.6 - - - 78.4 - - - 81.1 - - - 80.6 - - - 78.4 - - - 85.7 - - - 85.6 - - - 81.5 - - - 85.7 - - - 85.6 - - - 81.5 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.269 - - - 0.251 - - - 0.205 - - - 0.280 - - - 0.256 - - - 0.194 - - - 0.281 - - - 0.256 - - - 0.194 - - - 0.297 - - - 0.275 - - - 0.218 - - - 0.297 - - - 0.275 - - - 0.218 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.00 - - - - - - - - - - - - - 0.05 - - - - - - - - - - - - - 0.10 - - - - - - - - - - - - - 0.15 - - - - - - - - - - - - - 0.20 - - - - - - - - - - - - - 0.25 - - - - - - - - - - - - - 0.30 - - - - - - - - - - - - - 0.35 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.260 - - - 0.243 - - - 0.197 - - - 0.275 - - - 0.252 - - - 0.188 - - - 0.276 - - - 0.252 - - - 0.188 - - - 0.285 - - - 0.265 - - - 0.213 - - - 0.285 - - - 0.266 - - - 0.213 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 94.5 - - - 94.2 - - - 92.7 - - - 93.0 - - - 92.9 - - - 90.3 - - - 93.0 - - - 92.9 - - - 90.3 - - - 94.8 - - - 94.7 - - - 92.8 - - - 94.8 - - - 94.7 - - - 92.8 - - - Micro accuracy (%) - - - - MAMBO release comparison · family metrics · known truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-genus-all.svg b/docs/assets/mambo-defaults-quality-genus-all.svg deleted file mode 100644 index 9aea9ee..0000000 --- a/docs/assets/mambo-defaults-quality-genus-all.svg +++ /dev/null @@ -1,1338 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 78.9 - - - 77.3 - - - 71.7 - - - 80.5 - - - 79.3 - - - 71.3 - - - 80.5 - - - 79.3 - - - 71.3 - - - 83.0 - - - 82.9 - - - 75.1 - - - 83.0 - - - 83.0 - - - 75.1 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.317 - - - 0.255 - - - 0.122 - - - 0.320 - - - 0.255 - - - 0.127 - - - 0.321 - - - 0.256 - - - 0.127 - - - 0.353 - - - 0.282 - - - 0.146 - - - 0.354 - - - 0.283 - - - 0.146 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.319 - - - 0.261 - - - 0.133 - - - 0.319 - - - 0.258 - - - 0.139 - - - 0.319 - - - 0.258 - - - 0.140 - - - 0.351 - - - 0.284 - - - 0.157 - - - 0.351 - - - 0.285 - - - 0.157 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2 - - - 77.6 - - - 72.9 - - - 79.4 - - - 77.9 - - - 70.6 - - - 79.4 - - - 77.9 - - - 70.6 - - - 81.6 - - - 80.4 - - - 74.5 - - - 81.6 - - - 80.4 - - - 74.5 - - - Micro accuracy (%) - - - - MAMBO release comparison · genus metrics · all truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-genus-known.svg b/docs/assets/mambo-defaults-quality-genus-known.svg deleted file mode 100644 index f64490e..0000000 --- a/docs/assets/mambo-defaults-quality-genus-known.svg +++ /dev/null @@ -1,1338 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.1 - - - 77.3 - - - 71.7 - - - 80.8 - - - 79.3 - - - 71.3 - - - 80.8 - - - 79.3 - - - 71.3 - - - 83.3 - - - 82.9 - - - 75.1 - - - 83.3 - - - 83.0 - - - 75.1 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.317 - - - 0.255 - - - 0.122 - - - 0.321 - - - 0.255 - - - 0.127 - - - 0.322 - - - 0.256 - - - 0.127 - - - 0.354 - - - 0.282 - - - 0.146 - - - 0.354 - - - 0.283 - - - 0.146 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.319 - - - 0.261 - - - 0.133 - - - 0.319 - - - 0.258 - - - 0.139 - - - 0.319 - - - 0.258 - - - 0.140 - - - 0.351 - - - 0.284 - - - 0.157 - - - 0.351 - - - 0.285 - - - 0.157 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2 - - - 77.6 - - - 72.9 - - - 79.4 - - - 77.9 - - - 70.6 - - - 79.4 - - - 77.9 - - - 70.6 - - - 81.6 - - - 80.4 - - - 74.5 - - - 81.6 - - - 80.4 - - - 74.5 - - - Micro accuracy (%) - - - - MAMBO release comparison · genus metrics · known truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-quality-known.svg b/docs/assets/mambo-defaults-quality-known.svg deleted file mode 100644 index a789d8c..0000000 --- a/docs/assets/mambo-defaults-quality-known.svg +++ /dev/null @@ -1,1338 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 70.7 - - - 68.1 - - - 59.0 - - - 73.5 - - - 71.2 - - - 59.8 - - - 73.5 - - - 71.2 - - - 59.9 - - - 76.3 - - - 74.1 - - - 63.7 - - - 76.3 - - - 74.1 - - - 63.7 - - - Macro accuracy (%) - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.265 - - - 0.205 - - - 0.092 - - - 0.261 - - - 0.205 - - - 0.101 - - - 0.261 - - - 0.205 - - - 0.101 - - - 0.303 - - - 0.234 - - - 0.115 - - - 0.304 - - - 0.234 - - - 0.115 - - - Macro-F1 - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.279 - - - 0.225 - - - 0.113 - - - 0.268 - - - 0.218 - - - 0.124 - - - 0.268 - - - 0.217 - - - 0.124 - - - 0.311 - - - 0.248 - - - 0.136 - - - 0.312 - - - 0.248 - - - 0.136 - - - Macro precision - - - - - - - - - - - - - - - Northern Europe - - - - - - - - - - Europe - - - - - - - - - - Global - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.6 - - - 77.6 - - - 68.8 - - - 82.0 - - - 79.9 - - - 67.7 - - - 82.0 - - - 79.9 - - - 67.7 - - - 84.8 - - - 82.9 - - - 72.6 - - - 84.8 - - - 82.9 - - - 72.6 - - - Micro accuracy (%) - - - - MAMBO release comparison · species metrics · known truth - - - All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640. - TTA: original + two padded views; selected on a Flemming subset, not independently validated. - Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations. - - - - - - - MAMBO v2 - - - - - - V3 PyTorch - - - - - - V3 ONNX - - - - - - V3 PyTorch + TTA - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-ranks-all.svg b/docs/assets/mambo-defaults-ranks-all.svg deleted file mode 100644 index a86dbe9..0000000 --- a/docs/assets/mambo-defaults-ranks-all.svg +++ /dev/null @@ -1,1350 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - 68.52 - - - 71.25 - - - 71.24 - - - 73.95 - - - 73.98 - - - Species · Macro accuracy (%) - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - - - - - - - - - - - - - - 0.2575 - - - 0.2543 - - - 0.2543 - - - 0.2935 - - - 0.2944 - - - Species · Macro-F1 - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - 78.90 - - - 80.53 - - - 80.50 - - - 83.04 - - - 83.04 - - - Genus · Macro accuracy (%) - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - - - - - - - - - - - - - - 0.3169 - - - 0.3204 - - - 0.3212 - - - 0.3532 - - - 0.3536 - - - Genus · Macro-F1 - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - 84.40 - - - 81.05 - - - 81.06 - - - 85.72 - - - 85.73 - - - Family · Macro accuracy (%) - - - - - - - - - - - - - - - V2 - - - - - - - - - - V3 - PyTorch - - - - - - - - - - V3 - ONNX - - - - - - - - - - V3 PyTorch - + TTA - - - - - - - - - - V3 ONNX - + TTA - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.1 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.3 - - - - - - - - - - - - - - - - - - - - - - - - - - 0.2691 - - - 0.2804 - - - 0.2808 - - - 0.2967 - - - 0.2967 - - - Family · Macro-F1 - - - - V2 vs V3 vs V3 + TTA · legacy northern Europe - - - All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0. - Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision. - TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated. - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-speed.svg b/docs/assets/mambo-defaults-speed.svg deleted file mode 100644 index dc151f5..0000000 --- a/docs/assets/mambo-defaults-speed.svg +++ /dev/null @@ -1,940 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 8 - - - - Images per batch - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 2 - - - - - - - - - - - - - 4 - - - - - - - - - - - - - 6 - - - - - - - - - - - - - 8 - - - - - - - - - - - - - 10 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CPU · FP32 - - - - - - - - - - - - - - - 1 - - - - - - - - - - 8 - - - - - - - - - - 32 - - - - Images per batch - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - 120 - - - - - - - - - - - - - 140 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GPU · automatic precision - - - - Complete-pipeline throughput · northern Europe - - - i7-12800H / RTX 3080 Ti Laptop, WSL2; four CPU/preparation threads; same image bank. - Three fresh processes × seven observations; bars show trial-median range. Decode through CPU results included. - V2 and unaugmented V3 reuse recorded measurements; laptop conditions vary between campaigns. V2 CPU uses input cast. - - - - - - - - - - - - - - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - - - - - - - - - - - - - - - V3 PyTorch - - - - - - - - - - - - - - - - - - - - - - - - V3 ONNX - - - - - - - - - - - - - - - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - - - - - - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - diff --git a/docs/assets/mambo-defaults-tail.svg b/docs/assets/mambo-defaults-tail.svg deleted file mode 100644 index b51f6f2..0000000 --- a/docs/assets/mambo-defaults-tail.svg +++ /dev/null @@ -1,1670 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Species · Macro accuracy (%) - >5: 323 classes; 8,869 truth images outside (15.12%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Species · Macro-F1 - >5: 323 classes; 8,869 truth images outside (15.12%) - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Genus · Macro accuracy (%) - >5: 248 classes; 201 truth images outside (0.34%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Genus · Macro-F1 - >5: 248 classes; 201 truth images outside (0.34%) - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Family · Macro accuracy (%) - >5: 20 classes; 5 truth images outside (0.01%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Family · Macro-F1 - >5: 20 classes; 5 truth images outside (0.01%) - - - - Full support and tail-truncated metrics · legacy northern Europe - - - 58,640 Flemming images; confidence threshold 0; pinned mini_metrics. TTA: padded scale. - No evaluation rows removed: FP/FN remain; only the macro averaging domain changes. - Outside counts refer to truth classes, not confidence rejection. Truncation excludes predicted-only classes. - Descriptive comparison; TTA was selected on a subset of the same dataset. - - - - - - - - - - - - - - - Full support (>−1; per-model classes) - - - - - - - - - - - Support >5 in truth AND predictions (common classes) - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/benchmarks.md b/docs/benchmarks.md index 31ea886..c06b6c0 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -1,8 +1,8 @@ # Benchmark findings -These are the current conclusions of the quantization branch, based on local +These are the retained quantization findings, based on local measurements. They do not certify HPC, Spark/desktop, or ARM performance. -The [branch roadmap](quantization-roadmap.md) defines the remaining work and +The [quantization roadmap](quantization-roadmap.md) defines the remaining work and completion criteria. Exact configurations, trials and superseded findings remain in the [historical experiment record](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). diff --git a/docs/mambo-accelerated-deployment.md b/docs/mambo-accelerated-deployment.md index 7ccacf5..8eccdfd 100644 --- a/docs/mambo-accelerated-deployment.md +++ b/docs/mambo-accelerated-deployment.md @@ -124,8 +124,9 @@ GPU scaling still saturates: preparation and execution remain sequential, and classification/result handling also consume time. This increment removes major avoidable costs without adding a streaming scheduler or changing model artifacts. -In-domain evaluation on UCloud, other operating systems and publication review -remain separate release gates. BF16 has subset qualification only. The +In-domain evaluation has since [completed on UCloud](mambo-indomain-evidence.md). +[Final qualification](../dev/releases/mambo_v3/final-qualification.md) records current +platform limits and publication readiness. BF16 in this study has subset qualification only. The [original FP32 comparison](mambo-release-comparison.md) remains available as the pre-optimization reference. No new model artifacts or quantization are involved. diff --git a/docs/mambo-batch-scaling.md b/docs/mambo-batch-scaling.md index c13af2e..c55b2a1 100644 --- a/docs/mambo-batch-scaling.md +++ b/docs/mambo-batch-scaling.md @@ -9,8 +9,8 @@ The plateau comes from **serial, allocation-heavy CPU preprocessing plus a stric FP32 convolutional backend that gains little throughput beyond batch 8**. It is not a batch-size parameter being ignored. Forward hooks observed exactly `[1,3,384,384]`, `[8,3,384,384]` and `[32,3,384,384]` at the native model boundary. -The released speed charts remain unchanged; the following interventions explain -them and are not new qualified release variants. +The interventions below explain that historical baseline; current release timings +come from the later qualification campaigns. ## CPU cause: the release image adapter @@ -74,17 +74,13 @@ establish a hardware-counter distinction between arithmetic and memory bandwidth limits. Profiler overhead and laptop clock variation are why unprofiled timings and reversed-order interventions are reported separately. -## Next implementation step +## Follow-up -Prioritize pixel-preserving contiguous/crop preparation, then bounded workers and -CPU/GPU overlap. Qualify exact inputs on the larger retained image subset and -array-input edge cases, then rerun fresh-process end-to-end timings. These adapter -changes can stay on the release branch. Any shared-core optimization belongs on a -feature/fix branch and must be merged through the established release workflow. - -FP16 is a separate numerical/runtime variant, not quantization, but is diagnostic -only here. It needs task-level quality and deployment qualification before becoming -a supported option. The current PyTorch/ONNX FP32 baseline remains available. +Contiguous/crop preparation and mixed precision were subsequently implemented and +qualified in the [accelerated comparison](mambo-accelerated-deployment.md). +Later concurrency, transfer and hierarchy changes are summarized in the +[pipeline review](mambo-inference-pipeline-review.md). This diagnosis remains a +historical explanation of the FP32 baseline, not outstanding implementation work. ## Reproduce diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 2331b31..70a73a7 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -1,260 +1,90 @@ -# MAMBO deployment defaults and release comparison +# MAMBO regional choice and historical padded-scale evidence -**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) -contains the current rotation-and-padding default comparison. +The [deployment README](../deployment/README.md#release-comparison) contains the +current model, timing and rotation-and-padding TTA comparisons. This page retains +the evidence for the northern-Europe preset choice and aggregate regional effect. -Ordinary inference stays single-view. Enabling TTA with `tta=True` or bare `--tta` -selects **padded scale**: the original image plus views with 8% and 15% edge padding. -Each view uses unchanged preprocessing; FP32 leaf logits are averaged before -class-list filtering and hierarchy reduction. Use `tta="padded_scale"` to pin the -recipe explicitly, or `tta=False` / `--tta none` to disable it. +These historical results use `padded_scale`: original plus 8% and 15% edge-padded +views, with FP32 leaf logits averaged before filtering and hierarchy reduction. +It was the earlier accuracy/cost choice; it is **not the current enabled-TTA +default**. The [candidate study](mambo-tta.md) records its selection. -This is the best measured **accuracy/cost compromise** among the explored policies, -not a claim of optimality for every metric. It had the highest subset macro -accuracy, used only three views and was faster than D4 or padded rotations. -Padded rotations had higher subset macro-F1. The [candidate study](mambo-tta.md) -retains all 13 recipes, exact parameters, sources and their trade-offs. +## Northern-Europe preset choice -## Full Flemming comparison +Legacy `north_europe` retains the 1,977-species V2 vocabulary. The explicit +`north_europe_v3` option adds 222 species without removals, using the same +geographic filter and a minimum of 3 regional records instead of 26, plus a global +minimum of 25. Both cover the same 50,598 species-labelled Flemming images (86.29%). -Both V3 backends were evaluated on all **58,640 images / 522 truth species**, with -and without TTA at automatic GPU precision. Main comparisons use the identical legacy -northern-Europe vocabulary across V2/V3. Regional effects are summarized once -below; the supplementary tables retain all regional and updated-list results. -All predictive metrics come from `mini_metrics` commit -`70cc69adc05362863439277048e06386c1f885e1`, using `threshold=0`, `optimal=False`, -`simple=True`, `hierarchical=False`. +Holding PyTorch inference fixed, macro accuracy was: -The primary charts include **all truth** at each rank, including out-of-vocabulary -taxa. Macro accuracy gives equal weight to ground-truth taxa at that rank; macro-F1/precision -also reflect predicted-only classes under the package's metric policy. See the -[metric definitions](mambo-release-comparison.md#prediction-quality). The TTA -recipe was selected using a 1,024-image subset of this same dataset: the full -results are descriptive comparisons, **not independent validation**. - -### Northern-Europe preset choice - -Use legacy `north_europe` for the northern-Europe workflow and V2/V3 comparisons. -It retains the 1,977-species V2 vocabulary. The explicit `north_europe_v3` option -adds 222 species without removals, using the same geographic filter and a minimum -of 3 regional records instead of 26 (plus the new global minimum of 25). -Both cover the same 50,598 species-labelled images in Flemming (86.29%). - -Holding PyTorch inference fixed, the updated list changes macro accuracy: - -| Rank | Legacy | Updated | Legacy + TTA | Updated + TTA | +| Rank | Legacy | Updated | Legacy + padded-scale TTA | Updated + padded-scale TTA | |---|---:|---:|---:|---:| | Species | 71.25% | 70.46% | 73.95% | 73.10% | | Genus | 80.53% | 80.01% | 83.04% | 82.78% | | Family | 81.05% | 80.66% | 85.72% | 83.47% | -ONNX shows the same pattern; macro-F1 and micro accuracy also favour legacy at -all three ranks. The updated list permits additional plausible regional species, -but Flemming contains no examples of those additions. Their recognition benefit -is therefore unmeasured here. Legacy combines better measured discrimination with -backwards compatibility; updated membership remains an explicit broader option. -This is a northern-Europe recommendation, not a change to the API's legacy -historical `europe` default; the final V3 API/CLI defaults to `full`. See [geographic definitions](model-presets.md). - -![Northern-Europe comparison at all three ranks](assets/mambo-defaults-ranks-all.svg) - -### Species - -| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---:|---:|---:| -| MAMBO v2 | 68.52% | 0.2575 | 68.71% | -| V3 PyTorch | 71.25% | 0.2543 | 70.78% | -| V3 ONNX | 71.24% | 0.2543 | 70.78% | -| V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | -| V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | - -### Genus - -| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---:|---:|---:| -| MAMBO v2 | 78.90% | 0.3169 | 79.23% | -| V3 PyTorch | 80.53% | 0.3204 | 79.37% | -| V3 ONNX | 80.50% | 0.3212 | 79.36% | -| V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | -| V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | - -### Family - -| Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---:|---:|---:| -| MAMBO v2 | 84.40% | 0.2691 | 94.49% | -| V3 PyTorch | 81.05% | 0.2804 | 92.97% | -| V3 ONNX | 81.06% | 0.2808 | 92.99% | -| V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | -| V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | - -Ordinary V3 improves species and genus macro accuracy, but family macro accuracy -falls from 84.40% to about 81.05%. TTA raises family macro accuracy to 85.72–85.73%, -and improves species and genus results as well. Species macro-F1 is slightly -lower than V2 without TTA and higher with TTA. - -### Matched threshold and tail comparison - -The [main deployment comparison](../deployment/README.md#release-comparison) now -shows both confidence settings, full support and support >5, with coverage and -excluded-support counts on the same **52,788 reporting images**. Thresholds use -5,852 separate calibration images. Its figures differ from the historical -58,640-image full-data tables above; do not mix their populations. - -![Both confidence settings and averaging domains, with coverage](assets/mambo-threshold-tail.svg) - -The [tail-metric tables](mambo-tail-metrics.md) and [CSV](assets/mambo-tail-metrics.csv) -provide the same reporting-partition evidence. Support >5 class sets are shared -across pipelines within each confidence setting, but can differ between settings. -Truncation changes only the macro averaging domain; all per-class FP/FN remain. +ONNX, macro-F1 and micro accuracy showed the same preference for the legacy list. +The additions permit more plausible regional species, but Flemming contains no +examples of them: their recognition benefit is unmeasured. Legacy therefore +combines better measured discrimination with V2 comparability. The updated list +remains an explicit broader option. The V3 API/CLI default is global (`full`); +see [geographic definitions](model-presets.md). ### Regional filtering effect ![Paired regional gains across pipelines](assets/mambo-defaults-regional-effect.svg) -Each point is a difference between two presets **within the same pipeline**. -The black mark is the median of the five changes (V2, V3 PyTorch/ONNX, and each V3 -backend with TTA); grey lines show their min–max range. These related pipelines -are not independent replicates: the summary is descriptive, without confidence -intervals or significance claims. Each rank and metric is summarized separately. +Each point compares two presets **within the same pipeline**. Black marks are the +median of five changes (V2, V3 PyTorch/ONNX, and each V3 backend with padded-scale +TTA); grey lines show their min–max range. These related pipelines are not +independent replicates; no confidence intervals or significance are implied. All comparisons retain the same 58,640 images, including out-of-vocabulary truth. -The regional benefit is evidence for this northern-European dataset, not a reason -to apply its narrow vocabulary to images from elsewhere. - -The [supplementary regional comparison](mambo-regional-comparison.md) retains -all preset tables and all/known-truth charts. The [complete metric CSV](assets/mambo-defaults-metrics.csv) -also retains precision, recall, Theil U and coverage. For legacy northern Europe, -known truth contains 50,598 images at species, 58,639 at genus and 58,640 at family. - -## Confidence threshold optimization - -Thresholding changes the comparison. Using `mini_metrics` Macro-F1 calibration on -5,852 images and reporting on the same remaining 52,788 images for every pipeline: - -| Pipeline | Species Macro-F1 / coverage | Genus Macro-F1 / coverage | Family Macro-F1 / coverage | -|---|---:|---:|---:| -| MAMBO v2 | 0.4467 / 69.73% | 0.5869 / 69.81% | 0.6545 / 77.44% | -| V3 PyTorch | 0.5081 / 70.81% | 0.6019 / 75.75% | 0.5807 / 73.06% | -| V3 ONNX | 0.5100 / 70.45% | 0.6043 / 75.37% | 0.5816 / 73.26% | -| V3 PyTorch + TTA | 0.5239 / 78.32% | 0.6655 / 77.73% | 0.6073 / 78.74% | -| V3 ONNX + TTA | 0.5431 / 74.05% | 0.6655 / 77.69% | 0.6065 / 78.47% | - -Ordinary V3 overtakes V2 on species Macro-F1 after calibration; TTA improves -species and genus further. **V2 leads calibrated family Macro-F1**, while V3 + TTA -retains more family recall. A [per-family audit](mambo-family-precision.md) shows -that V3 retains more rare predictions into families absent from Flemming truth, -which lowers its macro precision and F1. The different TTA species operating points largely -explain the backend F1 gap: at a shared threshold, PyTorch and ONNX remain closely -aligned. Higher accepted accuracy comes with abstention; coverage is the fraction -of images accepted independently at each rank. - -The [threshold study](mambo-confidence-thresholds.md) shows matched-partition -before/after metrics, exact thresholds, recall, coverage, and five-pipeline P–R and -accuracy–coverage curves for all three ranks. These 90% reporting scores are not -directly comparable with the full-data tables above. Deployment defaults remain -threshold zero; these are dataset-specific candidate operating points. - -## Inference speed and memory - -![CPU and GPU throughput by batch size](assets/mambo-defaults-speed.svg) - -Northern Europe, images/second: - -| Pipeline | CPU B1 | CPU B8 | GPU B1 | GPU B8 | GPU B32 | -|---|---:|---:|---:|---:|---:| -| MAMBO v2 | 1.26 | 1.39 | 45.2 | 44.8 | 83.5 | -| V3 PyTorch | 5.70 | 7.84 | 29.8 | 126.7 | 136.2 | -| V3 ONNX | 10.08 | 10.81 | 46.7 | 114.1 | 111.3 | -| V3 PyTorch + TTA | 2.29 | 2.63 | 8.5 | 42.7 | 50.4 | -| V3 ONNX + TTA | 3.56 | 3.66 | 16.8 | 41.7 | 39.4 | - -At GPU batch 32, TTA takes about **2.70× the native time / 2.82× the ONNX time** -per image versus ordinary V3. It is slower than V2 on GPU at that batch size, -while still faster than V2 in these CPU measurements. These are measured pipeline -trade-offs, not a uniform speed or quality ranking across every setting. - -These are complete-pipeline **images per second**, including decoding, preparation, -inference and completed CPU results. TTA runs all three views inside that boundary. -The [acceleration study](mambo-accelerated-deployment.md) retains the earlier FP32 -comparison and the AMP/preparation improvements. Both backends here use automatic -precision: FP16 backbone / FP32 head on native CUDA, -TF32 execution of the standard FP32 ONNX graph on CUDA, and FP32 on CPU. - -TTA timings use three fresh-process trials, two warmups and seven observations -per cell, the same seeded 32-image bank and four preparation/runtime CPU threads -as the retained V2 and ordinary V3 measurements. CPU batches are 1/8; GPU batches -are 1/8/32. Throughput uses the median of 21 observations; error bars show the -range of trial medians. The hardware is an i7-12800H / RTX 3080 Ti Laptop (16 GB), -Linux/WSL2 on AC power. Campaigns were run separately, so laptop conditions can -vary. V2 CPU uses the documented caller-side float32 input cast. - -![Peak host memory](assets/mambo-defaults-memory.svg) - -| Pipeline | CPU host MiB | GPU-run host MiB | CPU first-use s | GPU first-use s | Native GPU allocated MiB | -|---|---:|---:|---:|---:|---:| -| MAMBO v2 | 4123 | 4123 | 209.40 | 209.60 | 1936 | -| V3 PyTorch | 1618 | 2512 | 42.04 | 42.96 | 598 | -| V3 ONNX | 689 | 1619 | 0.37 | 1.46 | — | -| V3 PyTorch + TTA | 1639 | 2442 | 43.27 | 44.05 | 597 | -| V3 ONNX + TTA | 671 | 1629 | 0.53 | 1.72 | — | - -First use includes construction, lazy loading and the first prediction, excluding -interpreter launch and explicit runtime setup. Native classifier initialization -still dominates startup; reusing a predictor avoids repeating it. Loading and -allocator variation influence process peaks. - -Peak host RSS includes model loading and the entire batch sweep. Native allocated -GPU memory is a PyTorch allocator counter, not total VRAM; an equivalent ONNX peak -is unavailable. TTA holds the decoded source batch plus the current prepared view; -it does not multiply the model batch size by the number of views. Host memory -therefore depends on source image dimensions as well as batch size. - -Use ordinary V3 for throughput-sensitive workflows and enable TTA when the measured -accuracy/cost trade-off fits the application. Reuse a loaded predictor. Tune -`preprocess_workers` independently of ONNX `threads`; the [loading study](mambo-loading-scaling.md) -explains why higher batches or more workers are not automatically faster. -In-domain UCloud evaluation, other operating systems and downstream embedding -quality remain separate qualification work. - -## Reproduce +This supports regional filtering for northern-European images, not use of that +vocabulary elsewhere. + +## Population, metrics and retained results + +The [complete CSV](assets/mambo-defaults-metrics.csv) retains all presets, +species/genus/family, all/known truth, macro accuracy/precision/recall/F1, micro +accuracy, Theil U and coverage. The [source JSON](assets/mambo-defaults-comparison.json) +also retains historical timings, memory measurements and provenance hashes. + +Predictive metrics used `mini_metrics` commit +`70cc69adc05362863439277048e06386c1f885e1` with `threshold=0`, `optimal=False`, +`simple=True` and `hierarchical=False`. The full population is 58,640 images / +522 truth species. Legacy northern-Europe known-truth counts are 50,598 species, +58,639 genus and 58,640 family images. See [metric definitions](mambo-release-comparison.md#prediction-quality) +for macro denominators. TTA selection used 1,024 images from this same dataset, +so these are descriptive comparisons, not independent validation. + +[Threshold](mambo-confidence-thresholds.md) and [tail](mambo-tail-metrics.md) +analyses instead use 5,852 calibration images and 52,788 reporting images. +Do not mix those populations with the full-data results here. The +[family audit](mambo-family-precision.md) explains the rare predicted-only classes +that affect macro precision and F1. Current deployment figures retain both +thresholded/unthresholded results, coverage and support >5 comparisons. + +Historical laptop timing used an i7-12800H / RTX 3080 Ti Laptop, four CPU threads, +a seeded 32-image bank, three fresh processes, two warmups and seven observations +per cell (CPU batches 1/8; GPU 1/8/32). Reported throughput includes decoding +through completed CPU results, all three TTA views; it excludes the separate +single-view prepared-input diagnostic. Host RSS covers loading and the batch +sweep; PyTorch allocated GPU bytes are not total VRAM or an ONNX measurement. +First use excludes interpreter launch and explicit runtime setup. V2 CPU used +the documented float32 input cast. Use the current README for adoption decisions. + +## Reproduce the historical presentation + +All retired per-rank/regional, speed and memory plots can be regenerated from the +retained JSON without inference or recalculating metrics: ```sh -python -m dev.releases.mambo_v3.run_local full --precision auto --tta padded_scale \ - --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ - --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ - --output /path/to/new-tta-quality -/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ - --collection /path/to/new-tta-quality -python -m dev.releases.mambo_v3.benchmark_acceleration --tta padded_scale \ - --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ - --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ - --output /path/to/new-tta-timings python -m dev.releases.mambo_v3.defaults_report \ - --baseline docs/assets/mambo-accelerated-comparison.json \ - --reference docs/assets/mambo-release-comparison.json \ - --quality /path/to/new-tta-quality --performance /path/to/new-tta-timings \ - --output /path/to/charts -``` - -Run timing processes sequentially without other CPU/GPU jobs. All reported speed -is end-to-end; the benchmark's separately labelled prepared-input diagnostic is -single-view even when TTA is enabled, and is not used in these comparisons. -The [compact evidence](assets/mambo-defaults-comparison.json) includes source hashes -and regenerates the figures with `defaults_report --data FILE --output DIRECTORY`. - -Regenerate the full-data tail comparison from retained predictions (no inference): - -```sh -/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.tail_report \ - --full-dataset --study docs/assets/mambo-threshold-comparison.json \ - --output /tmp/mambo-tail-full -python -m dev.releases.mambo_v3.tail_charts \ - --data /tmp/mambo-tail-full/mambo-tail-metrics.json --output /tmp/mambo-tail-full + --data docs/assets/mambo-defaults-comparison.json \ + --output /tmp/mambo-historical-defaults ``` -Regenerate the main matched-population figure from retained mini_metrics results: - -```sh -python -m dev.releases.mambo_v3.tail_charts --paired \ - --data docs/assets/mambo-tail-metrics.json --output /tmp/mambo-paired -``` +The [release comparison runbook](../dev/releases/mambo_v3/release-comparison.md) +describes collecting new evidence. Pin `padded_scale` explicitly when reproducing +this historical recipe; bare `tta=True` selects the current default. diff --git a/docs/mambo-loading-scaling.md b/docs/mambo-loading-scaling.md index 15aa9fb..c206704 100644 --- a/docs/mambo-loading-scaling.md +++ b/docs/mambo-loading-scaling.md @@ -1,6 +1,10 @@ # Loading and scheduling after GPU acceleration -**The remaining plateau is partly a loading/scheduling limit.** The synchronous +Historical diagnostic of the synchronous adapter after its first GPU acceleration. +Current request/streaming behavior and evidence are in the +[pipeline review](mambo-inference-pipeline-review.md). + +**The plateau in this study was partly a loading/scheduling limit.** The synchronous adapter waits for each batch's preparation before inference. Its preparation threads do not intentionally run alongside that inference, but the timings include both costs. A fixed worker count and a larger batch can leave preparation as a @@ -44,19 +48,13 @@ but lowers ONNX to 132.7: this is consistent with loading/inference contention, laptop variability also affect this small comparison. These lookahead numbers are five warmed repeats within one process per backend. -## Deployment implications - -Use `preprocess_workers` / `--preprocess-workers` to tune preparation separately -from ONNX runtime `threads`. It defaults to `threads`, retaining existing behavior. -Native model CPU threads remain caller-controlled. Start with batch 8–32 and four -preparation workers on this laptop; measure before increasing either. Hosts with -fewer cores, quotas, different image sizes or concurrent workloads need their own -settings. The measured paths use a warm filesystem cache, not cold disk throughput. +## Interpretation -Lookahead remains a reproducible experiment, not an automatic production scheduler. -A production option needs bounded cancellation/error propagation, CPU and TTA -contention tests, and installed-runtime qualification. The current API makes no -claim that its synchronous scheduling reaches the model's throughput ceiling. +Preparation workers and ONNX runtime threads are separate resource budgets. The +4–8 worker choices here reflect a warm-cache laptop workload, not a recommendation +for HPC or cold storage. The one-batch lookahead was an experiment at this stage; +a bounded production streaming API has since been implemented and qualified. +Use the [deployment guide](../deployment/README.md) for current controls and defaults. ## Reproduce diff --git a/docs/mambo-regional-comparison.md b/docs/mambo-regional-comparison.md deleted file mode 100644 index 8bdf920..0000000 --- a/docs/mambo-regional-comparison.md +++ /dev/null @@ -1,135 +0,0 @@ -# Supplementary regional comparisons - -Full regional tables and all/known-truth charts from the retained `mini_metrics` -evaluation. See the [main comparison](mambo-deployment-defaults.md) for the metric -policy, northern-Europe recommendation, regional summary and timing results. -These descriptive results use the same Flemming dataset used for TTA selection. - -### Species - -![Full-data species quality](assets/mambo-defaults-quality-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 68.52% | 0.2575 | 68.71% | -| Northern Europe | V3 PyTorch | 71.25% | 0.2543 | 70.78% | -| Northern Europe | V3 ONNX | 71.24% | 0.2543 | 70.78% | -| Northern Europe | V3 PyTorch + TTA | 73.95% | 0.2935 | 73.19% | -| Northern Europe | V3 ONNX + TTA | 73.98% | 0.2944 | 73.19% | -| Europe | MAMBO v2 | 66.04% | 0.2000 | 66.96% | -| Europe | V3 PyTorch | 69.05% | 0.1997 | 68.94% | -| Europe | V3 ONNX | 69.06% | 0.1997 | 68.95% | -| Europe | V3 PyTorch + TTA | 71.81% | 0.2276 | 71.57% | -| Europe | V3 ONNX + TTA | 71.85% | 0.2283 | 71.56% | -| Global | MAMBO v2 | 57.21% | 0.0899 | 59.36% | -| Global | V3 PyTorch | 58.01% | 0.0973 | 58.42% | -| Global | V3 ONNX | 58.03% | 0.0973 | 58.43% | -| Global | V3 PyTorch + TTA | 61.73% | 0.1110 | 62.63% | -| Global | V3 ONNX + TTA | 61.74% | 0.1112 | 62.61% | - -Padded-scale TTA raises northern-Europe macro accuracy by **2.70 / 2.74 percentage -points** for PyTorch / ONNX, with macro-F1 rising to **0.2935 / 0.2944**. Species -macro accuracy, macro-F1 and micro accuracy exceed V2 for all three primary lists. -Genus and family results follow below; ordinary V3 loses family macro accuracy -against V2, while TTA recovers it. - -Updated European presets (the same inference, different candidate lists): - -| Preset | Backend | Ordinary macro accuracy / F1 | TTA macro accuracy / F1 | -|---|---|---:|---:| -| `north_europe_v3` | torch | 70.46% / 0.2368 | 73.10% / 0.2713 | -| `north_europe_v3` | onnx | 70.49% / 0.2365 | 73.12% / 0.2721 | -| `europe_v3` | torch | 68.86% / 0.1979 | 71.66% / 0.2253 | -| `europe_v3` | onnx | 68.88% / 0.1978 | 71.70% / 0.2261 | - -![Species quality restricted to known truth](assets/mambo-defaults-quality-known.svg) - -### Genus - -![Full-data genus quality](assets/mambo-defaults-quality-genus-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 78.90% | 0.3169 | 79.23% | -| Northern Europe | V3 PyTorch | 80.53% | 0.3204 | 79.37% | -| Northern Europe | V3 ONNX | 80.50% | 0.3212 | 79.36% | -| Northern Europe | V3 PyTorch + TTA | 83.04% | 0.3532 | 81.59% | -| Northern Europe | V3 ONNX + TTA | 83.04% | 0.3536 | 81.59% | -| Europe | MAMBO v2 | 77.29% | 0.2553 | 77.64% | -| Europe | V3 PyTorch | 79.28% | 0.2552 | 77.94% | -| Europe | V3 ONNX | 79.28% | 0.2557 | 77.94% | -| Europe | V3 PyTorch + TTA | 82.93% | 0.2820 | 80.40% | -| Europe | V3 ONNX + TTA | 82.97% | 0.2828 | 80.40% | -| Global | MAMBO v2 | 71.68% | 0.1221 | 72.85% | -| Global | V3 PyTorch | 71.30% | 0.1268 | 70.57% | -| Global | V3 ONNX | 71.33% | 0.1269 | 70.58% | -| Global | V3 PyTorch + TTA | 75.10% | 0.1457 | 74.52% | -| Global | V3 ONNX + TTA | 75.10% | 0.1461 | 74.52% | -| `north_europe_v3` | V3 PyTorch | 80.01% | 0.3041 | 78.88% | -| `north_europe_v3` | V3 ONNX | 79.98% | 0.3049 | 78.89% | -| `north_europe_v3` | V3 PyTorch + TTA | 82.78% | 0.3337 | 81.16% | -| `north_europe_v3` | V3 ONNX + TTA | 82.78% | 0.3341 | 81.16% | -| `europe_v3` | V3 PyTorch | 79.08% | 0.2528 | 77.79% | -| `europe_v3` | V3 ONNX | 79.08% | 0.2530 | 77.80% | -| `europe_v3` | V3 PyTorch + TTA | 82.68% | 0.2803 | 80.29% | -| `europe_v3` | V3 ONNX + TTA | 82.72% | 0.2809 | 80.29% | - -Northern-Europe genus macro accuracy rises from **78.90% (V2)** to -**80.53% / 80.50% (ordinary V3)** and **83.04% / 83.04% (TTA)** for PyTorch / ONNX. -Known-genus results contain 58,639 or 58,640 images depending on the preset. - -
-Known-truth genus metrics - -![Known-truth genus quality](assets/mambo-defaults-quality-genus-known.svg) - -
- -### Family - -![Full-data family quality](assets/mambo-defaults-quality-family-all.svg) - -| Preset | Pipeline | Macro accuracy | Macro-F1 | Micro accuracy | -|---|---|---:|---:|---:| -| Northern Europe | MAMBO v2 | 84.40% | 0.2691 | 94.49% | -| Northern Europe | V3 PyTorch | 81.05% | 0.2804 | 92.97% | -| Northern Europe | V3 ONNX | 81.06% | 0.2808 | 92.99% | -| Northern Europe | V3 PyTorch + TTA | 85.72% | 0.2967 | 94.77% | -| Northern Europe | V3 ONNX + TTA | 85.73% | 0.2967 | 94.77% | -| Europe | MAMBO v2 | 83.54% | 0.2513 | 94.23% | -| Europe | V3 PyTorch | 80.62% | 0.2556 | 92.85% | -| Europe | V3 ONNX | 80.63% | 0.2556 | 92.86% | -| Europe | V3 PyTorch + TTA | 85.63% | 0.2753 | 94.72% | -| Europe | V3 ONNX + TTA | 85.64% | 0.2755 | 94.73% | -| Global | MAMBO v2 | 80.70% | 0.2052 | 92.65% | -| Global | V3 PyTorch | 78.42% | 0.1936 | 90.30% | -| Global | V3 ONNX | 78.42% | 0.1938 | 90.31% | -| Global | V3 PyTorch + TTA | 81.46% | 0.2183 | 92.75% | -| Global | V3 ONNX + TTA | 81.45% | 0.2183 | 92.75% | -| `north_europe_v3` | V3 PyTorch | 80.66% | 0.2732 | 92.89% | -| `north_europe_v3` | V3 ONNX | 80.67% | 0.2733 | 92.89% | -| `north_europe_v3` | V3 PyTorch + TTA | 83.47% | 0.2778 | 94.69% | -| `north_europe_v3` | V3 ONNX + TTA | 83.47% | 0.2778 | 94.70% | -| `europe_v3` | V3 PyTorch | 80.48% | 0.2539 | 92.53% | -| `europe_v3` | V3 ONNX | 80.52% | 0.2541 | 92.55% | -| `europe_v3` | V3 PyTorch + TTA | 83.35% | 0.2729 | 94.50% | -| `europe_v3` | V3 ONNX + TTA | 83.37% | 0.2730 | 94.52% | - -Family macro accuracy exposes a regression that species-only reporting missed: -northern Europe falls from **84.40% (V2)** to **81.05% / 81.06% (ordinary V3)**. -TTA recovers it to **85.72% / 85.73%**, while macro-F1 reaches **0.2967** for both -backends, versus **0.2691** for V2. All 58,640 images have known family truth. - -
-Known-truth family metrics - -![Known-truth family quality](assets/mambo-defaults-quality-family-known.svg) - -
- -The [complete metric table](assets/mambo-defaults-metrics.csv) retains macro -accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, at all -three ranks and for both all/known truth. Known-only species results contain -50,598 images. Known genus contains 58,639–58,640 images by preset; known family -contains all 58,640. These are already-computed `mini_metrics` results; the added -rank views do not change the model runs, score extraction or threshold policy. diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md index 116c910..571fcbc 100644 --- a/docs/mambo-release-comparison.md +++ b/docs/mambo-release-comparison.md @@ -177,7 +177,8 @@ ONNX Runtime is 1.30.0. Hardware is an i7-12800H / RTX 3080 Ti Laptop GPU (16 GB on AC power under Linux/WSL2, with four CPU threads and TF32 disabled. The earlier [v3 qualification report](mambo-v3-evaluation.md) covers embedding-mode -consistency, additional timing detail and installed-package checks. In-domain -comparison remains UCloud work with the original test split. Provenance/licensing -and broader OS qualification still precede publication. Nothing is published by -this comparison. +consistency, additional timing detail and installed-package checks. +[In-domain comparison](mambo-indomain-evidence.md) has since completed with the +original test split. [Final qualification](../dev/releases/mambo_v3/final-qualification.md) +owns current provenance, notices and platform limits; this historical comparison +does not certify final release packages. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index 3686d00..5a61dc9 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -249,7 +249,8 @@ cost. This priority is a task-specific inference from the literature and current measurements, not a universal TTA ranking. A compact mixed policy can be tested next on independent validation data. Full Flemming results include the subset used for recipe selection and are therefore descriptive, not independent -validation; UCloud evaluation remains outstanding. +validation. Subsequent [UCloud evaluation](mambo-indomain-evidence.md) adds +in-domain evidence for the promoted recipe, not all exploratory candidates. A portable custom policy can use existing Pillow functionality directly: diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md index ad49006..de8b152 100644 --- a/docs/mambo-v3-evaluation.md +++ b/docs/mambo-v3-evaluation.md @@ -1,5 +1,9 @@ # MAMBO_v3 local evaluation — 23 September 2026 +Historical **FP32, single-view** reference. Current adoption comparisons are in +[the deployment README](../deployment/README.md#release-comparison); these timings +precede AMP and pipeline improvements. + The native PyTorch and standard ONNX candidates produced identical top-1 labels on all **58,640 Flemming images**, for species, genus and family, with all five lists below. This establishes same-model prediction agreement on this dataset; @@ -130,7 +134,8 @@ from the benchmark. All ONNX benchmark processes ran without importing PyTorch. The [evaluation workflow](../dev/releases/mambo_v3/evaluation.md) provides the commands, timing boundaries, pinned metric environment and UCloud handoff. The original 632,913 in-domain test identities and taxonomy were checked locally; -image verification and inference remain for UCloud. No new split is generated. +image verification, inference and reporting subsequently completed on +[UCloud](mambo-indomain-evidence.md), preserving the original split. Local evidence is retained outside Git under `local-evidence/mambo-v3/`: `quality-subset-256`, `quality-full`, `performance` and `combined-results`. @@ -156,7 +161,7 @@ the temporary CUDA environment reused existing NVIDIA libraries and is not a cle dependency-installation qualification. Those JSON reports are retained as `portable-install-final.json` and `installed-gpu-final.json`. -In-domain results, cross-OS support, a clean CUDA dependency installation, -training-source/best-epoch provenance and redistribution notices remain open. -The archived September native predictions are historical context, not a -MAMBO_v2 quality baseline. Nothing has been published or tagged. +For current provenance, notices and platform limits see +[final qualification](../dev/releases/mambo_v3/final-qualification.md). +These early checks are not final-wheel certification. The archived September +native predictions are historical context, not a MAMBO_v2 quality baseline. diff --git a/docs/quantized-training-validation.md b/docs/quantized-training-validation.md index fc83855..b65ea96 100644 --- a/docs/quantized-training-validation.md +++ b/docs/quantized-training-validation.md @@ -2,7 +2,7 @@ This document describes the checks that must remain valid while quantization is extended. Current results live in [benchmark findings](benchmarks.md); planned -work and target acceptance live in the [branch roadmap](quantization-roadmap.md). +work and target acceptance live in the [quantization roadmap](quantization-roadmap.md). Detailed historical runs are retained in the [experiment archive](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). ## Model and dataset coverage diff --git a/docs/training-feature-validation.md b/docs/training-feature-validation.md index 762fa2e..11e6179 100644 --- a/docs/training-feature-validation.md +++ b/docs/training-feature-validation.md @@ -1,45 +1,16 @@ -# Training features: implementation and comparison plan +# Training feature comparison plan -This is planned work. Existing CPU/GPU benchmark results establish a baseline; -they do not measure the benefit of the features below. EMA is temporarily -nonfunctional and excluded from these experiments; repair is deferred. +This page covers **unmeasured feature comparisons**, not implementation status. +The [repository roadmap](roadmap.md) sets priorities; the +[quantization roadmap](quantization-roadmap.md), [validation contract](quantized-training-validation.md) +and [measured findings](benchmarks.md) own native QT/PTQ/QAT work. Those paths are +implemented but have different numerical and resource contracts; do not repeat +their implementation plans here. EMA remains unsupported and excluded. -## Actual quantized training is the primary implementation target - -The priority is now QT that lowers training memory and increases speed, together -with faster data loading for floating-point and quantized workloads. PTQ/QAT do -not satisfy that objective. See the [QT and loader probes](../dev/benchmarks/training.md#capacity-and-bottleneck-probes); -an initial [model/trainer integration](quantized-training.md) is available, while -broader optimizer/resume coverage, convergence and end-to-end measurement remain -requirements, not optional follow-ups. - -The initial [INT8 PTQ/QAT Python backend](quantization.md) is implemented on the -`quant` branch. Its CPU tests establish a training-to-integer-inference path; -user-facing checkpoint integration, other backends and quality studies remain open. - -Deliver two distinct paths through the existing builders, checkpoint and export -interfaces, with optional dependencies: - -- Quantization-aware training: specify simulated weight/activation bit widths, - scales and observer behavior, then convert and evaluate the resulting inference - artifact. Fake quantization during training is not itself proof of faster or - smaller inference. -- Post-training quantization: compare calibrated integer/low-bit artifacts against - the same floating-point checkpoint. Calibration uses a recorded subset of - training data, never held-out test images. - -Start with an explicit, validated precision/backend combination before expanding -to lower bit widths. Record weight-only versus weight-and-activation quantization, -which operators remain floating point, model size, peak memory, latency/throughput, -and per-class/per-level quality. Validate normalized/parametrized heads, functional -linear operations, masks and hierarchical outputs instead of limiting export to -one backbone. Verify save/reload, optimizer/scheduler/AMP state during training, -and quantized artifact loading in the intended standalone runtime. - -Hardware-specific reduced-precision compute, including FP8 where supported, is a -separate profile. Existing float16/bfloat16 autocast tests do not establish deeper -quantization. Declare unsupported backends and models; prohibit silent fallback -that mislabels ordinary floating-point execution as quantized. +Select a bounded comparison only when it answers the next decision. Existing +CPU/GPU baselines do not establish benefits for the features below. New precision +formats or backends require their own operator-placement, checkpoint and +quality/resource evidence; AMP checks do not establish deeper quantization. ## Augmentation defaults @@ -89,6 +60,6 @@ optional integration. Publish individual runs and paired differences with uncert distinguish variation across training seeds from uncertainty due to finite test data. Use the existing versioned report/provenance artifacts and visible repository run -summaries. Retain failures and negative/null effects. Add durable historical hosting -before the current artifact retention expires. Do not combine different hardware, +summaries. Retain failures and negative/null effects. The [reporting guide](../dev/benchmarks/reporting.md) distinguishes existing +artifact retention from the optional publisher's still-unverified live activation. Do not combine different hardware, precision, dataset versions or tuning budgets into one apparent improvement trend. From 852bf712e85b8d1a6b9c9c6d31b3b5d807904303 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Fri, 25 Sep 2026 19:06:13 +0200 Subject: [PATCH 105/221] test: share TTA recipe checks and remove duplicate readback coverage --- tests/benchmarks/test_release_history.py | 8 +-- tests/releases/test_deployment.py | 67 +++++++++--------------- 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/tests/benchmarks/test_release_history.py b/tests/benchmarks/test_release_history.py index 75f4776..733ff77 100644 --- a/tests/benchmarks/test_release_history.py +++ b/tests/benchmarks/test_release_history.py @@ -102,6 +102,7 @@ def test_interrupted_upload_can_resume_without_deleting_assets(remote, records, remote.corrupt = True with pytest.raises(ValueError, match="readback"): synchronize("owner/repo", tmp_path / "interrupted", records, upload=True) + assert len(remote.assets) == 1 # Keep failed-readback bytes available for inspection/retry. first_asset = remote.assets[1] remote.corrupt = False synchronize("owner/repo", tmp_path / "retry", records, upload=True) @@ -128,13 +129,6 @@ def test_api_failure_is_not_treated_as_empty_storage(remote, records, tmp_path): assert len(remote.calls) == 1 and not remote.releases -def test_upload_requires_successful_readback(remote, records, tmp_path): - remote.corrupt = True - with pytest.raises(ValueError, match="readback"): - synchronize("owner/repo", tmp_path / "corrupt", records, upload=True) - assert len(remote.assets) == 1 # Preserve the uploaded bytes for inspection/retry. - - def test_published_month_cannot_be_appended(remote, records, tmp_path): synchronize("owner/repo", tmp_path / "first", records, upload=True) remote.releases[0]["draft"] = False diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 518c9e5..575e45c 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -420,28 +420,6 @@ def test_whole_image_candidates_preserve_source_and_prepare_deterministically(): np.testing.assert_array_equal(image, original) -@pytest.mark.parametrize("option", ["padded_scale"]) -def test_enabled_tta_uses_qualified_padded_recipe(bundle, monkeypatch, option): - from dev.releases.mambo_v3.tta_candidates import candidate_policy - - p = Predictor(bundle, tta=option, preprocess_workers=1) - image = np.random.default_rng(18).integers(0, 256, (3, 23, 41), dtype=np.uint8) - observed = [] - - def runtime(images, embeddings): - observed.append(images[0].copy()) - return np.ones((len(images), 3), np.float32), None - - monkeypatch.setattr(p, "_onnx", runtime) - result = p.predict(image) - expected = candidate_policy("padded_scale") - assert len(observed) == 3 - for actual, transform in zip(observed, expected.transforms, strict=True): - np.testing.assert_array_equal(actual, preprocess(transform(image))) - assert result.metadata["tta"] == "padded_scale" and result.metadata["tta_views"] == 3 - assert Predictor(bundle).tta is None and Predictor(bundle, tta=False).tta is None - - @pytest.mark.parametrize( ("options", "recipe"), [([], None), (["--tta"], "rotation30_pad25_3"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] ) @@ -473,31 +451,34 @@ def test_composed_rotation_reproduces_existing_padded_rotation(degrees): np.testing.assert_array_equal(image, original) -@pytest.mark.parametrize("recipe", ["rotation30_pad25_3", "wide_rotation_mixed_padding_5"]) -def test_promoted_tta_matches_full_evaluation_views(bundle, monkeypatch, recipe): +@pytest.mark.parametrize("option", ["padded_scale", True, "rotation30_pad25_3", "wide_rotation_mixed_padding_5"]) +def test_builtin_tta_matches_qualified_evaluation_views(bundle, monkeypatch, option): from deployment.mambo_deploy.augmentation import resolve_tta from dev.releases.mambo_v3.compact_tta import policies + from dev.releases.mambo_v3.tta_candidates import candidate_policy - views, _, recipes = policies() + recipe = "rotation30_pad25_3" if option is True else option + if recipe == "padded_scale": + transforms = candidate_policy(recipe).transforms + else: + views, _, recipes = policies() + transforms = [views[key] for key in recipes[recipe]] source = np.random.default_rng(19).integers(0, 256, (3, 47, 83), dtype=np.uint8) original = source.copy() - expected = [preprocess(views[key](source)) for key in recipes[recipe]] - for option in [True, recipe] if recipe == "rotation30_pad25_3" else [recipe]: - policy = resolve_tta(option) - for transform, key in zip(policy.transforms, recipes[recipe], strict=True): - np.testing.assert_array_equal(transform(source), views[key](source)) - predictor = Predictor(bundle, tta=option, preprocess_workers=1) - observed = [] - - def runtime(images, embeddings): - observed.append(images[0].copy()) - return np.ones((len(images), 3), np.float32), None - - monkeypatch.setattr(predictor, "_onnx", runtime) - result = predictor.predict(source) - np.testing.assert_array_equal(observed, expected) - assert result.metadata["tta"] == recipe - assert result.metadata["tta_views"] == len(expected) + for transform, reference in zip(resolve_tta(option).transforms, transforms, strict=True): + np.testing.assert_array_equal(transform(source), reference(source)) + predictor = Predictor(bundle, tta=option, preprocess_workers=1) + observed = [] + + def runtime(images, embeddings): + observed.append(images[0].copy()) + return np.ones((len(images), 3), np.float32), None + + monkeypatch.setattr(predictor, "_onnx", runtime) + result = predictor.predict(source) + np.testing.assert_array_equal(observed, [preprocess(transform(source)) for transform in transforms]) + assert result.metadata["tta"] == recipe + assert result.metadata["tta_views"] == len(transforms) np.testing.assert_array_equal(source, original) @@ -786,6 +767,8 @@ def test_cpu_interpolation_retains_reference_pixels_in_caller_storage(dtype): def test_default_scope_is_global_including_legacy_facade(bundle, monkeypatch): + assert Predictor(bundle).tta is None and Predictor(bundle, tta=False).tta is None + from mini_trainer import deploy monkeypatch.setattr(deploy, "_runtime", lambda: Predictor) From b17e642eabd74938b51b1edcdbdf57be8940c5ed Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:30:33 +0200 Subject: [PATCH 106/221] maintenance: retire obsolete campaign tools and condense experiment history --- dev/releases/mambo_v3/loading_charts.py | 109 -------- dev/releases/mambo_v3/loading_scaling.py | 98 ------- dev/releases/mambo_v3/prefetch.py | 66 ----- dev/releases/mambo_v3/probe_preprocessing.py | 54 ---- .../mambo_v3/profile_batch_scaling.py | 126 --------- dev/releases/mambo_v3/profile_onnx_batch.py | 68 ----- .../mambo_v3/profile_preprocessing.py | 53 ---- .../mambo_v3/summarize_batch_scaling.py | 88 ------ dev/ucloud/README.md | 10 +- dev/ucloud/ddp.md | 6 +- dev/ucloud/evaluate-results.md | 98 ------- dev/ucloud/evaluate-results.sh | 56 ---- dev/ucloud/expert-trial.md | 84 ------ dev/ucloud/expert-trial.sh | 17 -- dev/ucloud/expert_trial.py | 217 --------------- dev/ucloud/test-inference.md | 43 --- dev/ucloud/test-inference.sh | 11 - docs/mambo-batch-scaling.md | 145 +++------- docs/mambo-compact-tta.md | 195 ++------------ docs/mambo-composed-tta.md | 252 ++++-------------- docs/mambo-loading-scaling.md | 89 ++----- docs/mambo-tta.md | 219 +-------------- docs/training-workflow-postmortem.md | 8 + tests/benchmarks/test_benchmark_tensorrt.py | 29 +- .../test_benchmark_tensorrt_deployment.py | 22 -- .../test_benchmark_tensorrt_memory.py | 21 -- .../test_benchmark_tensorrt_pair.py | 15 -- tests/benchmarks/test_expert_trial.py | 89 ------- tests/benchmarks/test_ucloud_comparison.py | 36 --- tests/releases/test_prefetch.py | 77 ------ tests/releases/test_speed_smoke.py | 1 - tests/releases/test_ucloud_release.py | 4 +- 32 files changed, 174 insertions(+), 2232 deletions(-) delete mode 100644 dev/releases/mambo_v3/loading_charts.py delete mode 100644 dev/releases/mambo_v3/loading_scaling.py delete mode 100644 dev/releases/mambo_v3/prefetch.py delete mode 100644 dev/releases/mambo_v3/probe_preprocessing.py delete mode 100644 dev/releases/mambo_v3/profile_batch_scaling.py delete mode 100644 dev/releases/mambo_v3/profile_onnx_batch.py delete mode 100644 dev/releases/mambo_v3/profile_preprocessing.py delete mode 100644 dev/releases/mambo_v3/summarize_batch_scaling.py delete mode 100644 dev/ucloud/evaluate-results.md delete mode 100644 dev/ucloud/evaluate-results.sh delete mode 100644 dev/ucloud/expert-trial.md delete mode 100644 dev/ucloud/expert-trial.sh delete mode 100644 dev/ucloud/expert_trial.py delete mode 100644 dev/ucloud/test-inference.md delete mode 100644 dev/ucloud/test-inference.sh delete mode 100644 tests/benchmarks/test_expert_trial.py delete mode 100644 tests/releases/test_prefetch.py diff --git a/dev/releases/mambo_v3/loading_charts.py b/dev/releases/mambo_v3/loading_charts.py deleted file mode 100644 index 1f9f6ba..0000000 --- a/dev/releases/mambo_v3/loading_charts.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Render worker scaling and experimental lookahead with matching throughput units.""" - -import argparse -import json -import statistics -from pathlib import Path - -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.evaluation_data import write_json - - -def aggregate(root): - result = {"cells": [], "streams": [], "sources_sha256": {}} - for backend in ("torch", "onnx"): - path = root / f"mambo-loading-scaling-{backend}" / "report.json" - data = json.loads(path.read_text()) - if data["status"] != "complete": - raise ValueError("Incomplete diagnostic") - result["sources_sha256"][str(path)] = file_hash(path) - for batch in (8, 32, 64): - for workers in (1, 2, 4, 8): - cells = [c for c in data["cells"] if c["batch"] == batch and c["workers"] == workers] - if len(cells) != 3: - raise ValueError("Missing trials") - cell = {"backend": backend, "batch": batch, "workers": workers} - for boundary in ("preparation", "prepared", "end_to_end"): - cell[boundary] = batch / statistics.median(v for c in cells for v in c[boundary]["seconds"]) - result["cells"].append(cell) - result["streams"].extend( - {"backend": backend, "workers": x["workers"], "overlap": x["overlap"], "images_per_second": x["images"] / x["median_seconds"]} - for x in data["streams"] - ) - return result - - -def render(data, output): - import matplotlib - - matplotlib.use("Agg") - import matplotlib.pyplot as plt - import numpy as np - - output.mkdir(parents=True, exist_ok=True) - plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-loading-v1", "axes.spines.top": False, "axes.spines.right": False}) - fig, axes = plt.subplots(1, 3, figsize=(14, 4.8)) - for ax, backend in zip(axes[:2], ("torch", "onnx"), strict=True): - for batch, color in zip((8, 32, 64), ("#8064a2", "#098e92", "#e8872e"), strict=True): - cells = [c for c in data["cells"] if c["backend"] == backend and c["batch"] == batch] - ax.plot([c["workers"] for c in cells], [c["end_to_end"] for c in cells], marker="o", label=f"Batch {batch}", color=color) - ax.set( - title=f"{backend.title()} · synchronous API", - xlabel="Preparation workers", - xticks=[1, 2, 4, 8], - ylabel="End-to-end images / second", - ylim=(0, 175), - ) - ax.legend(fontsize=8) - ax.grid(axis="y", alpha=0.2) - ax = axes[2] - for i, overlap in enumerate((False, True)): - values = [ - next(c["images_per_second"] for c in data["streams"] if c["backend"] == b and c["workers"] == 4 and c["overlap"] == overlap) - for b in ("torch", "onnx") - ] - bars = ax.bar( - np.arange(2) + (i - 0.5) * 0.35, - values, - 0.35, - label="One-batch lookahead" if overlap else "Sequential", - color="#098e92" if overlap else "#888888", - ) - ax.bar_label(bars, fmt="%.1f", padding=3) - ax.set( - title="Experimental stream · batch 32", - xticks=[0, 1], - xticklabels=["PyTorch", "ONNX"], - ylabel="End-to-end images / second", - ylim=(0, 220), - ) - ax.legend(fontsize=8) - ax.grid(axis="y", alpha=0.2) - ax.set_axisbelow(True) - fig.suptitle("Loading and scheduling still limit GPU throughput", fontsize=16) - fig.text( - 0.015, - 0.015, - "RTX 3080 Ti Laptop; automatic precision; northern Europe; runtime CPU threads fixed at 4.\n" - "Worker sweep: 3 ordered trials × 3 observations. Lookahead: 128 images, 4 workers, 5 repeats in one process; " - "experimental, not the API default.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.13, 1, 0.91)) - svg = output / "mambo-loading-scaling.svg" - fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-loading-scaling.png", dpi=160, bbox_inches="tight") - plt.close(fig) - write_json(output / "mambo-loading-scaling.json", data) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--root", type=Path) - parser.add_argument("--data", type=Path) - parser.add_argument("--output", type=Path, required=True) - args = parser.parse_args() - if not args.root and not args.data: - parser.error("Supply --root or --data") - render(json.loads(args.data.read_text()) if args.data else aggregate(args.root), args.output) diff --git a/dev/releases/mambo_v3/loading_scaling.py b/dev/releases/mambo_v3/loading_scaling.py deleted file mode 100644 index 3acc5cf..0000000 --- a/dev/releases/mambo_v3/loading_scaling.py +++ /dev/null @@ -1,98 +0,0 @@ -"""Separate worker scaling, prepared inference and bounded one-batch lookahead.""" - -import argparse -import itertools -import statistics -from concurrent.futures import ThreadPoolExecutor -from pathlib import Path - -import numpy as np - -from deployment.mambo_deploy import Predictor -from deployment.mambo_deploy.results import Prediction, hierarchy -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.benchmark import snapshot, timing -from dev.releases.mambo_v3.evaluate import runtime_settings -from dev.releases.mambo_v3.evaluation_data import load_records, write_json - - -def stream(predictor, paths, workers, batch, overlap): - """Experimental pipeline only: at most current and next prepared batch.""" - chunks = [paths[i : i + batch] for i in range(0, len(paths), batch)] - leaves = [] - with ThreadPoolExecutor(max_workers=workers) as pool, ThreadPoolExecutor(max_workers=1) as producer: - pending = producer.submit(predictor._prepare, chunks[0], pool) if overlap else None - for i, chunk in enumerate(chunks): - images = pending.result() if pending is not None else predictor._prepare(chunk, pool) - pending = producer.submit(predictor._prepare, chunks[i + 1], pool) if overlap and i + 1 < len(chunks) else None - leaves.append(predictor._infer(images)[0]) - return Prediction(*hierarchy(np.concatenate(leaves), predictor.selected, predictor.bundle.classes)) - - -def run(args): - args.output.mkdir(parents=True, exist_ok=False) - _, records = load_records(args.manifest, args.root, 128, 20260923) - paths = [args.root / r["path"] for r in records] - if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): - raise ValueError("Image bytes changed") - report = { - "status": "running", - "backend": args.backend, - "runtime": runtime_settings(4, args.backend), - "before": snapshot(), - "samples": records, - "cells": [], - "streams": [], - "bundle_sha256": file_hash(args.bundle / "release.json"), - "runner_sha256": file_hash(__file__), - } - try: - p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=64) - p.predict(paths[:1]) - report["precision"] = p.effective_precision - configs = list(itertools.product((8, 32, 64), (1, 2, 4, 8))) - for trial in range(3): - for batch, workers in configs if trial != 1 else reversed(configs): - p.preprocess_workers = workers - prepared = p._prepare(paths[:batch]) - # Warm every boundary; inference returns CPU scores, so timing synchronizes. - p._infer(prepared) - p.predict(paths[:batch]) - with ThreadPoolExecutor(max_workers=workers) as pool: - preparation = timing(lambda: p._prepare(paths[:batch], pool), 3) - cell = { - "trial": trial, - "batch": batch, - "workers": workers, - "preparation": preparation, - "prepared": timing(lambda: p._infer(prepared), 3), - "end_to_end": timing(lambda: p.predict(paths[:batch]), 3), - } - report["cells"].append(cell) - write_json(args.output / "report.json", report) - print(trial, batch, workers, round(batch / cell["end_to_end"]["median_seconds"], 1), flush=True) - expected = None - for workers in (1, 4, 8): - for overlap in (False, True): - result = stream(p, paths, workers, 32, overlap) - if expected is None: - expected = result.labels - if result.labels != expected: - raise AssertionError("Worker/prefetch scheduling changed predictions") - times = timing(lambda: stream(p, paths, workers, 32, overlap), 5) - report["streams"].append({"workers": workers, "overlap": overlap, "images": len(paths), **times}) - print("stream", workers, overlap, round(len(paths) / statistics.median(times["seconds"]), 1), flush=True) - report.update(status="complete", after=snapshot()) - except Exception as error: - report.update(status="failed", error=str(error)) - raise - finally: - write_json(args.output / "report.json", report) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - for name in ("bundle", "manifest", "root", "output"): - parser.add_argument("--" + name, type=Path, required=True) - parser.add_argument("--backend", choices=["torch", "onnx"], required=True) - run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/prefetch.py b/dev/releases/mambo_v3/prefetch.py deleted file mode 100644 index 037fc27..0000000 --- a/dev/releases/mambo_v3/prefetch.py +++ /dev/null @@ -1,66 +0,0 @@ -"""Bounded, ordered CPU preparation for release collection; no runtime calls in workers.""" - -import hashlib -import io -import time -from collections import deque -from concurrent.futures import ThreadPoolExecutor -from contextlib import ExitStack -from functools import partial - -import numpy as np -from PIL import Image - -from deployment.mambo_deploy.augmentation import _prepare_view -from deployment.mambo_deploy.preprocessing import _rgb, preprocess - - -def prepare_record(record, root, tta): - path = root / record["path"] - data = path.read_bytes() - if hashlib.sha256(data).hexdigest() != record["sha256"]: - raise ValueError(f"Image bytes changed: {path}") - with Image.open(io.BytesIO(data)) as image: - decoded = _rgb(image) - if tta is None: - return (preprocess(decoded),) - return tuple(_prepare_view(decoded, transform) for transform in tta.transforms) - - -def prepared_batches(records, root, batch_size, workers, prefetch_batches, tta=None): - """Keep at most prefetch_batches queued batches plus the batch held by the consumer.""" - if batch_size < 1 or workers < 0 or prefetch_batches < 0: - raise ValueError("Positive batch size and nonnegative workers/prefetch required") - with ExitStack() as stack: - pool = stack.enter_context(ThreadPoolExecutor(max_workers=workers)) if workers else None - prepare = partial(prepare_record, root=root, tta=tta) - - def batch(offset): - start = time.perf_counter() - selected = records[offset : offset + batch_size] - images = list(pool.map(prepare, selected)) if pool else [prepare(record) for record in selected] - views = tuple(np.stack(view) for view in zip(*images, strict=True)) - return offset, selected, views, time.perf_counter() - start - - offsets = iter(range(0, len(records), batch_size)) - if not prefetch_batches: - for offset in offsets: - yield batch(offset) - return - # A single coordinator uses the loading pool; no GPU/model state crosses threads. - producer = ThreadPoolExecutor(max_workers=1) - pending = deque() - try: - for _ in range(prefetch_batches): - if (offset := next(offsets, None)) is not None: - pending.append(producer.submit(batch, offset)) - while pending: - result = pending.popleft().result() - if (offset := next(offsets, None)) is not None: - pending.append(producer.submit(batch, offset)) - yield result - del result - finally: - for future in pending: - future.cancel() - producer.shutdown(wait=True, cancel_futures=True) diff --git a/dev/releases/mambo_v3/probe_preprocessing.py b/dev/releases/mambo_v3/probe_preprocessing.py deleted file mode 100644 index 0a5cd22..0000000 --- a/dev/releases/mambo_v3/probe_preprocessing.py +++ /dev/null @@ -1,54 +0,0 @@ -import argparse -import inspect -import json -import statistics -import time -from pathlib import Path - -import numpy as np - -from deployment.mambo_deploy.preprocessing import RECIPE, _rgb, preprocess - -parser = argparse.ArgumentParser(description="Diagnostic-only layout/crop interventions with exact pixel checks") -parser.add_argument("--evidence", type=Path, required=True) -parser.add_argument("--root", type=Path, required=True) -args = parser.parse_args() -root = args.evidence -records = json.loads((root / "samples.json").read_text()) -paths = [args.root / r["path"] for r in records] -source = inspect.getsource(preprocess) -variants = {"baseline": preprocess} -for contiguous, crop in ((True, False), (False, True), (True, True)): - s = source - if crop: - s = s.replace( - "lo = np.floor(coordinates).astype(int)", - "coordinates = coordinates[(resized-size)//2:(resized-size)//2+size]\n lo = np.floor(coordinates).astype(int)", - ).replace("offset = (resized - size) // 2", "offset = 0") - if contiguous: - s = ( - s.replace( - "image = image[:, yy][:, :, xx].astype(np.float32)", - "image = np.ascontiguousarray(image[:, yy][:, :, xx], dtype=np.float32)", - ) - .replace("pixels = rows[:, :, lo]", "rows = np.ascontiguousarray(rows)\n pixels = rows[:, :, lo]") - .replace(" return np.ascontiguousarray(", " pixels = np.ascontiguousarray(pixels)\n return np.ascontiguousarray(") - ) - env = {"np": np, "_rgb": _rgb, "RECIPE": RECIPE} - exec(s, env) - variants[f"contiguous-{contiguous}-crop-{crop}"] = env["preprocess"] -references = [preprocess(p) for p in paths] -out = [] -for name, fn in variants.items(): - for p, ref in zip(paths, references): - np.testing.assert_array_equal(fn(p), ref) -for trial in range(3): - for name, fn in list(variants.items()) if trial != 1 else reversed(list(variants.items())): - vals = [] - for _ in range(7): - t = time.perf_counter() - np.stack([fn(p) for p in paths]) - vals.append((time.perf_counter() - t) * 1000) - out.append({"trial": trial, "variant": name, "ms": vals, "median_ms": statistics.median(vals), "byte_identical_32": True}) - print(out[-1], flush=True) -(root / "preprocess-interventions.json").write_text(json.dumps(out, indent=2)) diff --git a/dev/releases/mambo_v3/profile_batch_scaling.py b/dev/releases/mambo_v3/profile_batch_scaling.py deleted file mode 100644 index dab65f5..0000000 --- a/dev/releases/mambo_v3/profile_batch_scaling.py +++ /dev/null @@ -1,126 +0,0 @@ -"""Causal batch-scaling probes; alternative layouts/precision are diagnostic only.""" - -import argparse -import contextlib -import cProfile -import pstats -import statistics -import time -from concurrent.futures import ThreadPoolExecutor -from pathlib import Path -from unittest.mock import patch - -import numpy as np -import torch - -from deployment.mambo_deploy import Predictor -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.benchmark import snapshot -from dev.releases.mambo_v3.evaluate import prepare_batch, runtime_settings -from dev.releases.mambo_v3.evaluation_data import load_records, write_json - - -def timed(call, repeats=7): - values = [] - for _ in range(2): - call() - for _ in range(repeats): - torch.cuda.synchronize() - start = time.perf_counter() - call() - torch.cuda.synchronize() - values.append((time.perf_counter() - start) * 1000) - return {"ms": values, "median_ms": statistics.median(values)} - - -def run(args): - args.output.mkdir(parents=True, exist_ok=False) - report = {"status": "running", "runtime": runtime_settings(4), "before": snapshot(), "cells": [], "preparation": []} - report.update(runner_sha256=file_hash(__file__), bundle_sha256=file_hash(args.bundle / "release.json")) - write_json(args.output / "report.json", report) - try: - _, records = load_records(args.manifest, args.root, 32, 20260923) - write_json(args.output / "samples.json", records) - report["samples_sha256"] = file_hash(args.output / "samples.json") - paths = [args.root / r["path"] for r in records] - if any(file_hash(p) != r["sha256"] for p, r in zip(paths, records, strict=True)): - raise ValueError("Image bytes changed") - predictor = Predictor(args.bundle, backend="torch", device="cuda:0", model="north_europe", batch_size=32, threads=4) - predictor.predict(paths[:1]) - model = predictor._torch_model - report["model"] = str(model) - arrays = {n: prepare_batch(paths[:n]) for n in (1, 8, 32)} - tensors = {n: torch.from_numpy(x).cuda() for n, x in arrays.items()} - # Establish model call sizes, not just the public API's requested batch. - shapes = [] - hook = model.register_forward_pre_hook(lambda module, inputs: shapes.append(list(inputs[0].shape))) - for n in arrays: - predictor.predict(paths[:n]) - hook.remove() - report["observed_forward_shapes"] = shapes - with torch.inference_mode(): - for trial in range(3): - modes = [(False, False), (True, False), (False, True), (True, True)] - for amp, channels_last in modes if trial != 1 else reversed(modes): - layout = torch.channels_last if channels_last else torch.contiguous_format - model.to(memory_format=layout) - for n in (1, 8, 32) if trial != 1 else (32, 8, 1): - x = tensors[n].contiguous(memory_format=layout) - - def compute(): - with torch.autocast("cuda", dtype=torch.float16, enabled=amp): - return model(x) - - row = {"trial": trial, "batch": n, "amp": amp, "channels_last": channels_last} - row["resident_model"] = timed(compute) - row["hardware"] = snapshot() - report["cells"].append(row) - print(trial, n, amp, channels_last, row["resident_model"]["median_ms"], flush=True) - model.to(memory_format=torch.contiguous_format) - for n in (8, 32): - with torch.profiler.profile( - activities=[torch.profiler.ProfilerActivity.CPU, torch.profiler.ProfilerActivity.CUDA], record_shapes=True - ) as prof: - for _ in range(3): - model(tensors[n]) - torch.cuda.synchronize() - (args.output / f"torch-profile-{n}.txt").write_text(prof.key_averages().table(sort_by="self_cuda_time_total", row_limit=30)) - prof.export_chrome_trace(str(args.output / f"torch-profile-{n}.json")) - for workers in (0, 4, 8): - with ThreadPoolExecutor(max_workers=workers) if workers else contextlib.nullcontext(None) as pool: - for n in (1, 8, 32): - - def prepare(): - return prepare_batch(paths[:n], pool) - - np.testing.assert_array_equal(prepare(), arrays[n]) - row = {"workers": workers, "batch": n, "preparation": timed(prepare)} - # Intervention in the adapter only; original preprocessing values are unchanged. - with patch("deployment.mambo_deploy.predictor.preprocess") as mocked: - - def prediction(): - ready = iter(prepare()) - mocked.side_effect = lambda item: next(ready) - return predictor.predict(paths[:n]) - - row["end_to_end"] = timed(prediction) - report["preparation"].append(row) - print("workers", workers, n, row["preparation"]["median_ms"], row["end_to_end"]["median_ms"], flush=True) - prof = cProfile.Profile() - prof.runcall(prepare_batch, paths) - with (args.output / "cpu-profile.txt").open("w") as stream: - pstats.Stats(prof, stream=stream).sort_stats("cumtime").print_stats(25) - report["status"] = "complete" - except Exception as error: - report.update(status="failed", error=str(error)) - raise - finally: - report["after"] = snapshot() - write_json(args.output / "report.json", report) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - for name in ("bundle", "manifest", "root", "output"): - parser.add_argument(f"--{name}", type=Path, required=True) - run(parser.parse_args()) diff --git a/dev/releases/mambo_v3/profile_onnx_batch.py b/dev/releases/mambo_v3/profile_onnx_batch.py deleted file mode 100644 index a4dddb8..0000000 --- a/dev/releases/mambo_v3/profile_onnx_batch.py +++ /dev/null @@ -1,68 +0,0 @@ -import argparse -import collections -import json -import statistics -import time -from pathlib import Path - -import onnxruntime as ort - -from deployment.mambo_deploy import Predictor -from dev.releases.mambo_v3.benchmark import snapshot -from dev.releases.mambo_v3.evaluate import prepare_batch - -parser = argparse.ArgumentParser(description="ONNX placement and batch-scaling trace") -for name in ("evidence", "root", "bundle"): - parser.add_argument("--" + name, type=Path, required=True) -args = parser.parse_args() -root = args.evidence -records = json.loads((root / "samples.json").read_text()) -paths = [args.root / r["path"] for r in records] -report = {"before": snapshot(), "cells": [], "providers": []} -for n in (1, 8, 32): - x = prepare_batch(paths[:n]) - p = Predictor(args.bundle, device="cuda:0", model="north_europe", batch_size=32, threads=4) - # Adapter explicitly disables profiling; construct matching session separately for diagnosis. - o = ort.SessionOptions() - o.enable_profiling = True - o.profile_file_prefix = str(root / f"onnx-{n}") - o.intra_op_num_threads = 4 - o.inter_op_num_threads = 1 - ort.preload_dlls() - session = ort.InferenceSession( - str(p.bundle.profile("onnx")), - sess_options=o, - providers=[("CUDAExecutionProvider", {"device_id": 0, "use_tf32": 0}), "CPUExecutionProvider"], - ) - session.disable_fallback() - assert session.get_providers()[0] == "CUDAExecutionProvider" - for _ in range(2): - session.run(["output_0"], {"images": x}) - vals = [] - for _ in range(7): - t = time.perf_counter() - session.run(["output_0"], {"images": x}) - vals.append((time.perf_counter() - t) * 1000) - trace = Path(session.end_profiling()) - events = json.loads(trace.read_text()) - ops = collections.defaultdict(float) - counts = collections.Counter() - for e in events: - a = e.get("args", {}) - if e.get("cat") == "Node" and "provider" in a: - key = (a["provider"], a["op_name"]) - ops[key] += e["dur"] - counts[key] += 1 - report["cells"].append( - { - "batch": n, - "profiled_median_ms": statistics.median(vals), - "node_totals": [ - {"provider": k[0], "op": k[1], "us": v, "calls": counts[k]} for k, v in sorted(ops.items(), key=lambda i: -i[1]) - ], - "trace": str(trace), - } - ) - print(n, report["cells"][-1], flush=True) -report["after"] = snapshot() -(root / "onnx-profile-summary.json").write_text(json.dumps(report, indent=2)) diff --git a/dev/releases/mambo_v3/profile_preprocessing.py b/dev/releases/mambo_v3/profile_preprocessing.py deleted file mode 100644 index fb7294b..0000000 --- a/dev/releases/mambo_v3/profile_preprocessing.py +++ /dev/null @@ -1,53 +0,0 @@ -import argparse -import collections -import inspect -import json -import sys -import time -from pathlib import Path - -from deployment.mambo_deploy.preprocessing import preprocess -from dev.releases.mambo_v3.evaluate import prepare_batch - -parser = argparse.ArgumentParser(description="Line attribution for the current release preprocessor") -parser.add_argument("--evidence", type=Path, required=True) -parser.add_argument("--root", type=Path, required=True) -args = parser.parse_args() -root = args.evidence -records = json.loads((root / "samples.json").read_text()) -paths = [args.root / r["path"] for r in records] -line_times = collections.defaultdict(float) -state = {} -layout = {} - - -def trace(frame, event, arg): - if frame.f_code is not preprocess.__code__: - return - now = time.perf_counter() - if event in ("line", "return"): - if "line" in state: - line_times[state["line"]] += now - state["t"] - state.update(line=frame.f_lineno, t=now) - if event == "return": - for name in ("coordinates", "lo", "fraction", "image", "rows", "pixels"): - value = frame.f_locals[name] - layout[name] = dict( - dtype=str(value.dtype), shape=list(value.shape), strides=list(value.strides), contiguous=value.flags.c_contiguous - ) - state.clear() - return trace - - -sys.settrace(trace) -prepare_batch(paths) -sys.settrace(None) -source = Path(inspect.getfile(preprocess)).read_text().splitlines() -rows = [ - {"line": line, "code": source[line - 1].strip(), "ms": seconds * 1000} - for line, seconds in sorted(line_times.items(), key=lambda i: -i[1]) -] -print(json.dumps(rows, indent=2)) -(root / "preprocess-line-profile.json").write_text(json.dumps(rows, indent=2)) - -(root / "preprocess-layout.json").write_text(json.dumps(layout, indent=2)) diff --git a/dev/releases/mambo_v3/summarize_batch_scaling.py b/dev/releases/mambo_v3/summarize_batch_scaling.py deleted file mode 100644 index 343719a..0000000 --- a/dev/releases/mambo_v3/summarize_batch_scaling.py +++ /dev/null @@ -1,88 +0,0 @@ -"""Compact diagnostic evidence without private images or large profiler traces.""" - -import argparse -import json -import statistics -from collections import defaultdict -from pathlib import Path - -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.evaluation_data import write_json - - -def summarize(root, output): - report = json.loads((root / "report.json").read_text()) - if report["status"] != "complete": - raise ValueError("Incomplete batch diagnosis") - grouped = defaultdict(list) - for row in report["cells"]: - grouped[row["amp"], row["channels_last"], row["batch"]].extend(row["resident_model"]["ms"]) - gpu = [] - for (amp, layout, batch), values in grouped.items(): - if len(values) != 21: - raise ValueError("Expected three seven-observation trials") - gpu.append( - dict( - amp=amp, - channels_last=layout, - batch=batch, - median_ms=statistics.median(values), - images_per_second=batch * 1000 / statistics.median(values), - ) - ) - probes = json.loads((root / "preprocess-interventions.json").read_text()) - grouped = defaultdict(list) - for row in probes: - if not row["byte_identical_32"]: - raise ValueError("Changed preprocessing values") - grouped[row["variant"]].extend(row["ms"]) - cpu = [ - {"variant": name, "batch": 32, "median_ms": statistics.median(values), "observations": len(values)} - for name, values in grouped.items() - ] - events = json.loads((root / "torch-profile-32.json").read_text())["traceEvents"] - kernels = [e for e in events if e.get("cat") == "kernel"] - kernel_us = sum(e["dur"] for e in kernels) - predicates = { - "convolution": lambda name: any(part in name for part in ("scudnn", "convolve", "conv_depthwise")), - "batch_normalization": lambda name: "bn_fw_inf" in name, - "silu": lambda name: "silu_kernel" in name, - } - shares = {name: sum(e["dur"] for e in kernels if predicate(e["name"])) / kernel_us for name, predicate in predicates.items()} - source_names = ( - "report.json", - "preprocess-interventions.json", - "preprocess-line-profile.json", - "preprocess-layout.json", - "torch-profile-32.json", - "onnx-profile-summary.json", - ) - write_json( - output, - { - "status": "complete", - "hardware": report["before"], - "observed_forward_shapes": report["observed_forward_shapes"], - "gpu_resident": gpu, - "preparation_interventions": cpu, - "threaded_preparation": report["preparation"], - "preprocess_layout": json.loads((root / "preprocess-layout.json").read_text()), - "preprocess_line_profile": json.loads((root / "preprocess-line-profile.json").read_text()), - "cuda_kernel_time_shares_batch32": shares, - "onnx_placement": json.loads((root / "onnx-profile-summary.json").read_text()), - "source_sha256": {name: file_hash(root / name) for name in source_names}, - "limits": ( - "Diagnostic interventions, not qualified release variants. GPU timings exclude input preparation and transfers; " - "threaded end-to-end uses unchanged pixels. Profiler timings are explanatory, not replacement benchmarks. " - "No hardware counter roofline attribution." - ), - }, - ) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--evidence", type=Path, required=True) - parser.add_argument("--output", type=Path, required=True) - args = parser.parse_args() - summarize(args.evidence, args.output) diff --git a/dev/ucloud/README.md b/dev/ucloud/README.md index 0467e1f..3935999 100644 --- a/dev/ucloud/README.md +++ b/dev/ucloud/README.md @@ -217,10 +217,12 @@ or target-GPU performance. Native INT8 checkpoints require the separate explicit CUDA-reference export path. See [ONNX](../../docs/onnx.md) and [inference benchmarks](../benchmarks/inference.md); calibrate PTQ on training only. -**Production/expert inference:** use [DDP qualification](ddp.md), then the -[bounded expert staging trial](expert-trial.md) and -[test inference](test-inference.md). Validate installed code changes in the -environment actually used by a profile; a harness-only edit needs no reinstall. +**Production inference:** use the normal prediction CLI after +[DDP qualification](ddp.md). The completed September campaign's pinned-overlay +staging helpers are retired; their +[historical source](https://github.com/asgersvenning/mini_trainer/tree/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/dev/ucloud) +and [lessons](../../docs/training-workflow-postmortem.md) remain available. +For current MAMBO comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). ## Calibrate filesystem read concurrency diff --git a/dev/ucloud/ddp.md b/dev/ucloud/ddp.md index 48582c3..bbb177e 100644 --- a/dev/ucloud/ddp.md +++ b/dev/ucloud/ddp.md @@ -286,7 +286,9 @@ Inspect the epoch summary and checkpoints during production; the full-dataset ru has no harness wall-time guard and stops at its configured epoch horizon or when the job/process is terminated. Evaluation/export are separate post-training activities. -For held-out prediction/metrics and export after training, use -[the evaluation runbook](evaluate-results.md) and [ONNX export guide](../../docs/onnx.md). +For held-out prediction after training, use the installed `mt_hpredict` CLI. +Pass completed prediction CSVs to the pinned `mini_metrics` package; the +[release evaluation runbook](../releases/mambo_v3/evaluation.md#metrics) documents +that metric environment. Export follows the [ONNX guide](../../docs/onnx.md). Preserve class order, score semantics and preprocessing; a later master-versus-quant training comparison remains a separate experiment. diff --git a/dev/ucloud/evaluate-results.md b/dev/ucloud/evaluate-results.md deleted file mode 100644 index 9692740..0000000 --- a/dev/ucloud/evaluate-results.md +++ /dev/null @@ -1,98 +0,0 @@ -# Production evaluation with mini_metrics - -This is the original training-campaign CLI evaluation. The later MAMBO comparison -has its own [release protocol](../releases/mambo_v3/ucloud-release.md), including -disjoint calibration/reporting partitions. - -Run expert evaluation as soon as expert inference has completed: - -```bash -cd /work/mini_trainer -bash dev/ucloud/evaluate-results.sh expert /work/evaluation-1 -``` - -After staged test inference completes, add its evaluation to the same root: - -```bash -bash dev/ucloud/evaluate-results.sh test /work/evaluation-1 -``` - -Alternatively use `all` once both predictions exist. Each dataset directory must -be fresh; use a new root for reruns. Defaults are: - -- Expert: `/work/expert-full-2/predictions/mini_metric.csv`. -- Test: `/work/test-full-1/predictions/mini_metric.csv`. - -Override these with `MT_EXPERT_CSV` and `MT_TEST_CSV` if inference used another -output directory. Only run against completed inference outputs; file existence -alone is not a completeness guarantee. Confirm the inference exit status and -staging manifest count (expert: 58,640; test: the saved test split count). - -The script uses Python 3.13 through `uvx` and pins mini_metrics to revision -`70cc69adc05362863439277048e06386c1f885e1`. It leaves the training environment -unchanged and uses no GPU. Dependency versions are resolved by uv, not locked -by this helper. Internet access is required for initial tool installation. - -Each dataset gets: - -- `all_labels.csv` and `.json`: aggregate metrics including unseen labels. -- `known_labels.csv` and `.json`: the package's known-label-only metrics. -- `per_class.csv`: per-class metrics, including unseen labels. -- Logs for each invocation, input SHA-256, pinned revision, exact commands and - a `COMPLETED` marker after all three invocations succeed. - -The package supplies vocabulary coverage and micro/macro statistics. Preserve -both coverage and known-only results when assessing the external dataset; do -not describe known-only accuracy as accuracy on the entire benchmark. Compare -species, genus and family separately. The current package disables its separate -hierarchy-wide metrics; per-level metrics are still produced normally. - -No optimal-threshold fitting, subsampling or label filtering is enabled. The -thresholds recorded in prediction files are retained. These collector files -contain the selected prediction per level, so they cannot establish top-5 -accuracy. The expert dataset evaluates external performance. This baseline does not fit -thresholds or select checkpoints; later calibration analyses must keep their -calibration and reporting samples disjoint. - -Aggregate metric tables and progress are printed live in the terminal and retained -in the corresponding logs. `pipefail` preserves failures through `tee`. - -For compact inspection after completion: - -```bash -cat /work/evaluation-1/expert/all_labels.csv -cat /work/evaluation-1/expert/known_labels.csv -cat /work/evaluation-1/test/all_labels.csv -``` - -Keep per-class output as a file rather than pasting it into the terminal. -All outputs remain under `/work`; computation can also be rerun on a CPU job -from the saved prediction CSVs without retaining the source images or GPU node. - -## Regional candidate vocabulary - -Both `mt_predict` and `mt_hpredict` accept `--class-list FILE` (YAML key -`class_list`). Supply one exact model class label per UTF-8 line; for GBIF -hierarchical models these are species IDs. Blank lines and duplicates are -ignored. The list restricts the model's current candidate vocabulary and cannot -add species absent from the checkpoint. Missing requested labels are reported; -an empty overlap fails before loading images. - -Every input image and ground-truth label remains in evaluation, including labels -excluded by the list. Species outputs and parent mappings are filtered together. -`class_filter.json` in the prediction output records retained, excluded and -missing labels, plus the list's SHA-256. With a pre-masked checkpoint, filtering -further restricts its active vocabulary rather than restoring excluded classes. - -For example, in an environment containing this CLI feature: - -```bash -mt_hpredict --config /work/expert-full-2/inference.yaml \ - --class-list /work/regional-evaluation/mambo-v2-reduced.txt \ - --output /work/regional-evaluation --name predictions -``` - -Use the all-label report for global versus regional comparisons on the same -images. `known_label` now describes the active filtered vocabulary. Confidence -scores are computed over the restricted candidates, so thresholds calibrated -for the global model should not be assumed equivalent. diff --git a/dev/ucloud/evaluate-results.sh b/dev/ucloud/evaluate-results.sh deleted file mode 100644 index 82aa1fd..0000000 --- a/dev/ucloud/evaluate-results.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env bash -# CPU evaluation of completed prediction CSVs, independent of the training venv. -set -euo pipefail -selection="${1:-all}" -output="${2:-/work/evaluation-1}" -case "$selection" in - expert) datasets=(expert) ;; - test) datasets=(test) ;; - all) datasets=(expert test) ;; - *) echo 'Usage: evaluate-results.sh [expert|test|all] [fresh-output-directory]' >&2; exit 2 ;; -esac -revision=70cc69adc05362863439277048e06386c1f885e1 -package="git+https://github.com/GuillaumeMougeot/mini_metrics.git@$revision" -expert_csv="${MT_EXPERT_CSV:-/work/expert-full-2/predictions/mini_metric.csv}" -test_csv="${MT_TEST_CSV:-/work/test-full-1/predictions/mini_metric.csv}" -for dataset in "${datasets[@]}"; do - if [[ "$dataset" == expert ]]; then input="$expert_csv"; else input="$test_csv"; fi - if [[ ! -s "$input" ]]; then - echo "Missing or empty completed prediction file: $input. Finish inference first." >&2 - exit 1 - fi - if [[ -e "$output/$dataset" ]]; then - echo "Output already exists: $output/$dataset; choose a fresh output directory." >&2 - exit 1 - fi -done -export PYTHONUNBUFFERED=1 CUDA_VISIBLE_DEVICES="" OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MPLBACKEND=Agg -runner=(uvx --python 3.13 --from "$package" mm_metrics) -# Resolve the isolated CPU tool once before starting reports. -"${runner[@]}" --help > /dev/null -for dataset in "${datasets[@]}"; do - if [[ "$dataset" == expert ]]; then input="$expert_csv"; else input="$test_csv"; fi - target="$output/$dataset" - mkdir -p "$output" - mkdir "$target" - sha256sum "$input" > "$target/input.sha256" - printf 'mini_metrics_revision=%s\ninput=%s\n' "$revision" "$input" > "$target/provenance.txt" - for scope in all_labels known_labels per_class; do - options=() - case "$scope" in - all_labels) options=(--all) ;; - known_labels) options=(--all --known-only) ;; - per_class) options=(--per-class) ;; - esac - command=("${runner[@]}" --files "$input" --output-dir "$target" --output-name "$scope" --precision 10 "${options[@]}") - printf '%q ' "${command[@]}" >> "$target/commands.sh" - printf '\n' >> "$target/commands.sh" - echo "$dataset / $scope: $target/$scope.log" - if ! "${command[@]}" 2>&1 | tee "$target/$scope.log"; then - echo "Evaluation failed; inspect $target/$scope.log" >&2 - exit 1 - fi - done - touch "$target/COMPLETED" - echo "Completed $dataset evaluation: $target" -done diff --git a/dev/ucloud/expert-trial.md b/dev/ucloud/expert-trial.md deleted file mode 100644 index 0359230..0000000 --- a/dev/ucloud/expert-trial.md +++ /dev/null @@ -1,84 +0,0 @@ -# Bounded expert inference staging trial - -Historical helper for the September training campaign's expert images and weights. -For current MAMBO release comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). -The [training post-mortem](../../docs/training-workflow-postmortem.md) records the -completed staging/inference work and lessons. - -Run from the reviewed checkout on the allocated node, without competing cold-read -jobs. This older collector retains predictions in memory until completion, so -interruption loses unfinished prediction output. - -```bash -cd /work/mini_trainer -bash dev/ucloud/expert-trial.sh -``` - -No manual YAML editing or dataset index construction is required. The launcher -extracts the focused discovery fix at `0c572ca` into a fresh `/work` source overlay -and uses the existing `/work/venvs/mt-quant` interpreter and dependencies. It does -not install packages or update the environment of another process. The underlying -Python helper also accepts explicit source, weights and output paths (`--help`). - -Defaults: - -- GPU 1; 1,024 JPEG/PNG candidates selected round-robin across class folders. -- At most 2 GiB of encoded source images, copied with four readers to - `/dev/shm/mt-expert-expert-staging-trial-1`. -- Five-minute staging limit and ten-minute inference limit. Timeout/interrupt - stops the phase process group, including inference loader workers. -- Normal prediction defaults: model/preprocessing metadata from the weights, - no separately supplied class mapping, resize recipe or fabricated labels. -- Persistent output: `/work/expert-staging-trial-1`. The minimal `inference.yaml` - contains only input and weights; output/name are explicit CLI arguments. - -`/dev/shm` is RAM-backed. The byte cap limits copied images, not total process or -loader memory. This assumes the original large-memory allocation. `/tmp` overlay -storage has not been established as node-local and is not used for this trial. - -Watch either phase in another terminal: - -```bash -tail -f /work/expert-staging-trial-1/stage.log -# Once inference starts: -tail -f /work/expert-staging-trial-1/inference.log -``` - -The launcher prints phase durations. On success, predictions are in -`/work/expert-staging-trial-1/predictions/mini_metric.csv`; `staging.json` records -original and staged paths, bytes and staging duration. Originals are unchanged. -Newly encountered hierarchical labels may still need GBIF/cache resolution; the -existing policy fails explicitly if it cannot resolve ancestors. Removing index -creation does not remove that lookup. - -If either phase times out, inspect its log before retrying. Partial staging is -retained without a completed manifest and is never treated as ready input. A retry -uses a fresh output/staging name, for example: - -```bash -bash dev/ucloud/expert-trial.sh /work/expert-staging-trial-2 --images 256 -``` - -Proceed to larger staging only if this trial completes and staged inference is -fast. Measure the full expert dataset's encoded size and available job memory -before raising the cap. This round-robin subset is a storage/functionality trial, -not the expert benchmark; do not report its accuracy as a full-dataset result. -Retain the full benchmark's unknown species when subsequently running mini_metrics. -Full test staging uses [its separate helper](test-inference.md). - -RAM staging disappears with the job. Predictions, logs, configuration and manifest -are retained under `/work`. Staged files can be deleted once their corresponding -inference has exited; the helper deliberately does not delete existing directories. - -To retry inference after a code fix, reuse completed staging without another read -of the source images: - -```bash -bash dev/ucloud/expert-trial.sh /work/expert-staging-trial-4 \ - --reuse-stage /work/expert-staging-trial-3 -``` - -This checks the previous completed manifest and staged file sizes. The source -paths remain recorded, and the new output receives its own configuration and logs. -Taxonomy still uses the node's GBIF response cache; cache/API failures are -separate from filesystem staging failures. diff --git a/dev/ucloud/expert-trial.sh b/dev/ucloud/expert-trial.sh deleted file mode 100644 index ad01da4..0000000 --- a/dev/ucloud/expert-trial.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Run the bounded expert trial without changing the installed training environment. -set -euo pipefail -repo=$(git -C "$(dirname -- "${BASH_SOURCE[0]}")" rev-parse --show-toplevel) -revision=0c572ca -python=/work/venvs/mt-quant/bin/python -source_dir=/work/flemming_helsing/restructured/valid/referenced -weights=/work/results/global_lepi_production_w32_1/weights/best.pt -output="${1:-/work/expert-staging-trial-1}" -if (( $# > 0 )); then shift; fi -# An isolated source overlay keeps the exact trained package dependencies intact. -git -C "$repo" cat-file -e "$revision:mini_trainer/data/metadata.py" -code=$(mktemp -d /work/mt-inference-code.XXXXXX) -git -C "$repo" archive "$revision" mini_trainer | tar -x -C "$code" -export PYTHONPATH="$code" -exec "$python" "$repo/dev/ucloud/expert_trial.py" \ - --source "$source_dir" --weights "$weights" --output "$output" "$@" diff --git a/dev/ucloud/expert_trial.py b/dev/ucloud/expert_trial.py deleted file mode 100644 index a5bcc01..0000000 --- a/dev/ucloud/expert_trial.py +++ /dev/null @@ -1,217 +0,0 @@ -"""Bounded RAM-staging trial followed by the normal hierarchical prediction CLI.""" - -import argparse -import concurrent.futures -import inspect -import json -import os -import shutil -import signal -import subprocess -import sys -import time -from pathlib import Path - -SUFFIXES = {".jpg", ".jpeg", ".png"} - - -def select_images(source: Path, limit: int) -> list[Path]: - """Select round-robin across class folders; this is a trial, not a benchmark.""" - folders = sorted(path for path in source.iterdir() if path.is_dir() and not path.name.startswith(".")) - streams = [iter(path.rglob("*")) for path in folders] - selected = [] - while streams and len(selected) < limit: - active = [] - for stream in streams: - path = next((p for p in stream if p.suffix.lower() in SUFFIXES and p.is_file()), None) - if path is not None: - selected.append(path) - active.append(stream) - if len(selected) == limit: - break - streams = active - return selected - - -def test_rows(index: Path) -> dict: - """Preserve labels and ordering from exactly the supplied test split.""" - data = json.loads(index.read_text()) - count = len(data["path"]) - if any(len(data[key]) != count for key in ("split", "label")): - raise ValueError("Index path, split and label lengths differ") - selected = [i for i, split in enumerate(data["split"]) if split == "test"] - if not selected: - raise ValueError("No test rows in saved index") - result = {k: [v[i] for i in selected] for k, v in data.items() if isinstance(v, list) and len(v) == count} - result["path"] = [str((index.parent / p).absolute()) for p in result["path"]] - return result - - -def stage(source: Path, destination: Path, output: Path, limit: int, byte_limit: int, workers: int, data_index: Path | None = None) -> None: - start = time.monotonic() - print( - f"Selecting all saved test rows from {data_index}" - if data_index - else f"Selecting up to {limit} JPEG/PNG files across class folders", - flush=True, - ) - index = test_rows(data_index) if data_index is not None else None - paths = select_images(source, limit) if index is None else [Path(p) for p in index["path"]] - print(f"Inspecting sizes of {len(paths)} selected files", flush=True) - if not paths: - raise RuntimeError("No JPEG/PNG candidates found") - sizes = [path.stat().st_size for path in paths] - total = sum(sizes) - if total > byte_limit: - raise RuntimeError(f"Selected files need {total} bytes; limit is {byte_limit}. Adjust the staging budget or subset size.") - if shutil.disk_usage(destination.parent).free < total + 256 * 2**20: - raise RuntimeError("Insufficient staging space with 256 MiB headroom") - destination.mkdir(exist_ok=False) - - def relative_path(i: int, path: Path) -> Path: - return path.relative_to(source) if index is None else Path(str(i // 4096)) / f"{i}{path.suffix}" - - def copy(item: tuple[int, Path]) -> dict: - i, path = item - relative = relative_path(i, path) - target = destination / relative - target.parent.mkdir(parents=True, exist_ok=True) - before = path.stat() - shutil.copyfile(path, target) - after = path.stat() - if (before.st_size, before.st_mtime_ns) != (after.st_size, after.st_mtime_ns) or target.stat().st_size != before.st_size: - raise RuntimeError(f"Source changed or copy was incomplete: {path}") - return {"source": str(path), "staged": str(target), "bytes": before.st_size} - - rows = [] - print(f"Copying {len(paths)} files ({total / 2**20:.1f} MiB), {workers} readers", flush=True) - with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as pool: - remaining = iter(enumerate(paths)) - pending = set() - exhausted = False - while pending or not exhausted: - while not exhausted and len(pending) < workers * 2: - item = next(remaining, None) - if item is None: - exhausted = True - else: - pending.add(pool.submit(copy, item)) - if not pending: - break - done, pending = concurrent.futures.wait(pending, return_when=concurrent.futures.FIRST_COMPLETED) - for future in done: - rows.append(future.result()) - if len(rows) % 4096 == 0 or len(rows) == len(paths): - print(f"Copied {len(rows)}/{len(paths)}; elapsed {time.monotonic() - start:.1f}s", flush=True) - report = {"scope": "staging_trial_subset", "seconds": time.monotonic() - start, "bytes": total, "files": rows} - if index is not None: - index["path"] = [str(destination / relative_path(i, p)) for i, p in enumerate(paths)] - (output / "staged-index.json").write_text(json.dumps(index) + "\n") - report["scope"] = "supplied_test_split" - report["source_index"] = str(data_index) - (output / "staging.json").write_text(json.dumps(report, indent=2) + "\n") - - -def reuse_stage(previous: Path) -> tuple[Path, dict]: - """Require a completed manifest and intact staged files, without source reads.""" - config = json.loads((previous / "inference.yaml").read_text()) - report = json.loads((previous / "staging.json").read_text()) - destination = Path(config["input"]).resolve(strict=True) - rows = report["files"] - if not rows: - raise RuntimeError("Completed staging manifest contains no files") - for row in rows: - path = Path(row["staged"]).resolve(strict=True) - if not path.is_relative_to(destination) or path.stat().st_size != row["bytes"]: - raise RuntimeError(f"Staged file does not match manifest: {path}") - return destination, report - - -def main() -> None: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--source", type=Path, required=True) - parser.add_argument("--weights", type=Path, required=True) - parser.add_argument("--output", type=Path, required=True, help="Fresh persistent trial directory") - parser.add_argument("--images", type=int, default=1024) - parser.add_argument("--data-index", type=Path, help="Stage all test rows from this saved index; ignores --images") - parser.add_argument("--max-mib", type=int, default=2048) - parser.add_argument("--copy-workers", type=int, default=4) - parser.add_argument("--stage-timeout", type=int, default=300) - parser.add_argument("--inference-timeout", type=int, default=600) - parser.add_argument("--gpu", default="1") - parser.add_argument("--reuse-stage", type=Path, help="Reuse a completed trial directory without copying source images") - parser.add_argument("--stage-only", action="store_true", help=argparse.SUPPRESS) - args = parser.parse_args() - if min(args.images, args.max_mib, args.copy_workers, args.stage_timeout, args.inference_timeout) <= 0: - parser.error("Limits and worker counts must be positive") - args.source = args.source.resolve(strict=True) - args.weights = args.weights.resolve(strict=True) - args.output = args.output.resolve() - destination = Path("/dev/shm") / ("mt-expert-" + args.output.name) - if args.stage_only: - stage(args.source, destination, args.output, args.images, args.max_mib * 2**20, args.copy_workers, args.data_index) - return - - from mini_trainer.data import auto_find_images - - if "cls2idx" not in inspect.signature(auto_find_images).parameters: - raise RuntimeError("Install the focused inference discovery fix before running this trial") - previous_report = None - if args.reuse_stage is not None: - destination, previous_report = reuse_stage(args.reuse_stage) - elif destination.exists(): - raise RuntimeError(f"Staging directory already exists: {destination}; choose a fresh output name") - args.output.mkdir(parents=True, exist_ok=False) - if previous_report is not None: - (args.output / "staging.json").write_text(json.dumps(previous_report, indent=2) + "\n") - print(f"Reusing completed staging from {args.reuse_stage}: {destination}", flush=True) - config = {"input": str(destination), "weights": str(args.weights)} - if args.data_index is not None: - if args.reuse_stage is not None: - shutil.copyfile(args.reuse_stage / "staged-index.json", args.output / "staged-index.json") - config["data_index"] = str(args.output / "staged-index.json") - config_path = args.output / "inference.yaml" - # JSON is valid YAML; no extra dependency or hand-edited config required. - config_path.write_text(json.dumps(config, indent=2) + "\n") - env = dict(os.environ, CUDA_VISIBLE_DEVICES=args.gpu, OMP_NUM_THREADS="1", MKL_NUM_THREADS="1", MPLBACKEND="Agg") - cli = Path(sys.executable).parent / "mt_hpredict" - if not cli.is_file(): - raise RuntimeError(f"Missing installed CLI: {cli}") - commands = [ - ([sys.executable, str(Path(__file__).resolve()), *sys.argv[1:], "--stage-only"], args.stage_timeout, "stage"), - ( - [str(cli), "--config", str(config_path), "--output", str(args.output), "--name", "predictions"], - args.inference_timeout, - "inference", - ), - ] - if args.reuse_stage is not None: - commands = commands[1:] - for command, timeout, phase in commands: - print(f"Starting {phase}; timeout {timeout}s. Log: {args.output / (phase + '.log')}", flush=True) - started = time.monotonic() - with (args.output / f"{phase}.log").open("w") as log: - with subprocess.Popen(command, env=env, stdout=log, stderr=subprocess.STDOUT, start_new_session=True) as proc: - try: - returncode = proc.wait(timeout=timeout) - except (subprocess.TimeoutExpired, KeyboardInterrupt): - os.killpg(proc.pid, signal.SIGTERM) - try: - proc.wait(timeout=5) - except subprocess.TimeoutExpired: - pass - # Also stop loader descendants, even if the parent exited first. - try: - os.killpg(proc.pid, signal.SIGKILL) - except ProcessLookupError: - pass - raise SystemExit(f"{phase} interrupted or exceeded {timeout}s; see {log.name}.") from None - if returncode: - raise SystemExit(f"{phase} failed ({returncode}); see {log.name}") - print(f"{phase} completed in {time.monotonic() - started:.1f}s", flush=True) - print(f"Trial complete: {args.output}. Staged bytes retained at {destination}.", flush=True) - print("Check staging.json for the selected scope and exact file count.", flush=True) - - -if __name__ == "__main__": - main() diff --git a/dev/ucloud/test-inference.md b/dev/ucloud/test-inference.md deleted file mode 100644 index 8354e20..0000000 --- a/dev/ucloud/test-inference.md +++ /dev/null @@ -1,43 +0,0 @@ -# Full in-domain test inference - -Historical training-campaign helper using its production index and source overlay. -For current V2/V3 release comparisons use [the release runbook](../releases/mambo_v3/ucloud-release.md). - -From `/work/mini_trainer`, run in tmux: - -```bash -bash dev/ucloud/test-inference.sh /work/test-full-1 -``` - -This selects every `test` row from the production `data_index.json`, preserves -labels, class indices and ordering, and copies encoded files into `/dev/shm` -with 512 I/O threads and bounded pending work. It does not select training or -validation rows, resize images, or resolve taxonomy. The 128 GiB staging cap -and free-space check apply before copying. Size inspection precedes copy progress. - -The normal `mt_hpredict` CLI runs on GPU 0 with input, weights and the staged -index supplied; other defaults come from the inference CLI and model metadata. -The existing isolated inference source overlay is used without reinstalling. -Each stage has a one-hour timeout. Use fresh output paths and avoid concurrent -cold-read workloads. This helper does not terminate unrelated processes. - -```bash -tail -n 5 /work/test-full-1/stage.log -tail -n 5 /work/test-full-1/inference.log -``` - -The CSV is `/work/test-full-1/predictions/mini_metric.csv`; configuration, -source-to-staged manifest and logs remain in `/work/test-full-1`. RAM files do -not survive job termination. Completed staging can be reused after an inference -failure, without reading source images again: - -```bash -bash dev/ucloud/test-inference.sh /work/test-full-2 --reuse-stage /work/test-full-1 -``` - -A completed manifest is required for reuse. An interrupted copy is not resumable. -The selected test count should match the production index (expected 632,913 -from the original dataset; the saved index is authoritative). - -After inference, use [the mini_metrics evaluation helper](evaluate-results.md) -for separate in-domain and expert reports. diff --git a/dev/ucloud/test-inference.sh b/dev/ucloud/test-inference.sh deleted file mode 100644 index ec6fffc..0000000 --- a/dev/ucloud/test-inference.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# Stage the complete saved test split and infer without changing the environment. -set -euo pipefail -repo=$(git -C "$(dirname -- "${BASH_SOURCE[0]}")" rev-parse --show-toplevel) -output="${1:-/work/test-full-1}" -if (( $# > 0 )); then shift; fi -exec bash "$repo/dev/ucloud/expert-trial.sh" "$output" \ - --source /work/global_lepi \ - --data-index /work/results/global_lepi_production_w32_1/data_index.json \ - --copy-workers 512 --max-mib 131072 \ - --stage-timeout 3600 --inference-timeout 3600 --gpu 0 "$@" diff --git a/docs/mambo-batch-scaling.md b/docs/mambo-batch-scaling.md index c55b2a1..eceb5e6 100644 --- a/docs/mambo-batch-scaling.md +++ b/docs/mambo-batch-scaling.md @@ -1,107 +1,38 @@ -# Why MAMBO v3 batch throughput plateaus - -This records the pre-optimization diagnosis at commit `a99b855`. See the -[accelerated deployment qualification](mambo-accelerated-deployment.md) for the -implemented fixes and their new measurements. Historical preprocessing probes -should be replayed from that commit, since the current adapter is optimized. - -The plateau comes from **serial, allocation-heavy CPU preprocessing plus a strict -FP32 convolutional backend that gains little throughput beyond batch 8**. It is -not a batch-size parameter being ignored. Forward hooks observed exactly -`[1,3,384,384]`, `[8,3,384,384]` and `[32,3,384,384]` at the native model boundary. -The interventions below explain that historical baseline; current release timings -come from the later qualification campaigns. - -## CPU cause: the release image adapter - -The NumPy preprocessor executes one image at a time before calling the GPU. Its -advanced indexing produces non-contiguous arrays, and `float32 coordinates - -int64 indices` promotes interpolation weights and intermediate images to float64. -It interpolates the entire 438×438 image before discarding its border for the -384×384 crop. The row/column interpolation and normalization dominate the CPU -profile; decoding accounts for only about 30 ms of a 602 ms batch-32 profile. -Increasing the batch size cannot amortize this per-image work. - -A controlled, single-thread intervention retained the arithmetic and verified -byte-identical prepared pixels for all 32 benchmark images. Three sweeps with -reversed middle ordering and seven observations per condition gave: - -| Preparation of 32 images | Median time | -|---|---:| -| Current implementation | 562 ms | -| Make intermediate arrays contiguous | 344 ms | -| Compute only the retained crop | 526 ms | -| Both interventions | 300 ms | - -A separate diagnostic with the **original** pixel function and eight preparation -workers reduced measured end-to-end native batch-32 time from 753 to 361 ms -(42.5 → 88.7 images/s). Four workers reached 398 ms. Those single-process, -seven-observation interventions demonstrate causality, not a replacement for the -three-fresh-process release benchmark. Results are hardware-dependent. Preprocessing -and inference still do not overlap in this probe. - -## GPU cause: FP32 backbone work, not hierarchy or silent CPU execution - -With inputs already resident on the GPU, the same model at the same resolution -was tested with TF32 disabled. These are medians across three sweeps × seven -observations, with the middle order reversed: - -| Diagnostic native mode | Batch 1, images/s | Batch 8, images/s | Batch 32, images/s | -|---|---:|---:|---:| -| Release FP32 / NCHW | 53.4 | 162.7 | 177.6 | -| FP16 autocast / NCHW | 39.9 | 310.2 | 371.4 | -| FP32 / channels-last | 51.3 | 134.0 | 137.6 | -| FP16 autocast / channels-last | 39.5 | 293.4 | 418.4 | - -Batch 8 already captures most of the FP32 throughput benefit. At batch 32, CUDA -kernel durations are approximately **63.6% convolution, 14.2% batch normalization -and 12.3% SiLU**. The final classifier matrix multiplication is about 0.15% of -kernel time. Reducing hierarchy work or changing class lists cannot explain away -the backbone plateau. Memory-layout changes alone do not fix it. The controlled -precision change more than doubles large-batch throughput; FP16 can still be -slower at batch 1 because launch/cast overhead remains. - -ONNX placement traces confirm convolution runs on CUDA at batches 1, 8 and 32. -Small `Acos` and `Concat` nodes run on CPU; this is not a silent CPU backbone -fallback. Their host-side node durations are not GPU kernel durations and should -not be read as a GPU utilization breakdown. - -V2 uses a different backbone at 224 pixels with CUDA autocast; v3 uses 384 pixels -and strict FP32. These released choices, plus the adapter's CPU work, explain why -v3 does not inherit v2's batching curve. The evidence localizes the bottleneck to -feature-map operations and demonstrates a precision effect; it does **not** -establish a hardware-counter distinction between arithmetic and memory bandwidth -limits. Profiler overhead and laptop clock variation are why unprofiled timings -and reversed-order interventions are reported separately. - -## Follow-up - -Contiguous/crop preparation and mixed precision were subsequently implemented and -qualified in the [accelerated comparison](mambo-accelerated-deployment.md). -Later concurrency, transfer and hierarchy changes are summarized in the -[pipeline review](mambo-inference-pipeline-review.md). This diagnosis remains a -historical explanation of the FP32 baseline, not outstanding implementation work. - -## Reproduce - -[Compact diagnostic evidence](assets/mambo-batch-diagnosis.json) records timings, -shapes, array layouts, kernel attribution and raw evidence hashes. Large traces and -private sample paths stay under `local-evidence/mambo-batch-root-cause/`. -Run these sequentially, with no competing benchmark workload: - -```sh -CUDA_VISIBLE_DEVICES=0 OMP_NUM_THREADS=4 MKL_NUM_THREADS=4 OPENBLAS_NUM_THREADS=1 \ - .venv/bin/python -m dev.releases.mambo_v3.profile_batch_scaling \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --output /path/to/new-diagnosis - -python -m dev.releases.mambo_v3.profile_preprocessing \ - --evidence /path/to/new-diagnosis --root /path/to/flemming -python -m dev.releases.mambo_v3.probe_preprocessing \ - --evidence /path/to/new-diagnosis --root /path/to/flemming -# Use the qualified ONNX CUDA environment for this command: -python -m dev.releases.mambo_v3.profile_onnx_batch \ - --evidence /path/to/new-diagnosis --root /path/to/flemming --bundle /path/to/bundle -python -m dev.releases.mambo_v3.summarize_batch_scaling \ - --evidence /path/to/new-diagnosis --output /path/to/diagnosis.json -``` +# Historical FP32 batch-scaling diagnosis + +At adapter revision `a99b855`, V3's plateau had two causes: serial, allocation-heavy +CPU preprocessing and strict FP32 backbone execution. Batch sizes reached the +model correctly. This diagnosis motivated the implemented +[preparation and mixed-precision changes](mambo-accelerated-deployment.md); +it does not describe the current pipeline. + +## Findings worth retaining + +- Advanced indexing produced non-contiguous arrays, interpolation promoted + intermediates to float64, and the adapter resized pixels later discarded by + the crop. Contiguous intermediates plus computing only the retained crop + reduced preparation of 32 images from 562 to 300 ms in the controlled probe. +- With GPU-resident input, native batch-32 throughput rose from 177.6 images/s + in FP32/NCHW to 371.4 with FP16/NCHW and 418.4 with FP16/channels-last. + Layout alone did not help. Convolutions, batch normalization and SiLU dominated; + the classifier contributed about 0.15% of kernel time. +- V2 used a different backbone at 224 pixels with autocast; V3 used 384 pixels + and FP32. Neither model size alone nor a larger batch predicts relative speed. +- ONNX convolution ran on CUDA. Small CPU graph nodes were not evidence of a + silent CPU backbone fallback. + +These are controlled laptop interventions, not current release benchmarks. +They establish preparation and precision effects, not a hardware-counter +distinction between arithmetic and memory-bandwidth limits. + +## Evidence and replay + +[Recorded measurements](assets/mambo-batch-diagnosis.json) retain the sweeps. +Replay the retired probes with the matching historical adapter; the +[historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-batch-scaling.md) +records commands, environments and methodology. Do not apply its monkey patches +to current code. + +For current work use the [pipeline review](mambo-inference-pipeline-review.md), +[pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and +[target speed check](../dev/releases/mambo_v3/speed-smoke.md). diff --git a/docs/mambo-compact-tta.md b/docs/mambo-compact-tta.md index d2ed8ff..a32ae54 100644 --- a/docs/mambo-compact-tta.md +++ b/docs/mambo-compact-tta.md @@ -1,175 +1,20 @@ -# Compact padding-and-rotation TTA qualification - -The completed [full composed-TTA comparison](mambo-composed-tta.md) evaluates the -three shortlisted recipes on both backends, with calibration and matched coverage. - -**Composing stronger padding into existing rotation views improves the preliminary -five-view recipe without adding passes.** The leading five-view candidate uses -original, ±10° with 15% padding, and ±30° with 25% padding. Three-view candidates -remain useful cost/quality alternatives. This is exploratory qualification, not -a release-default change or a replacement for full-data evaluation. - -Each transformed view rotates the decoded image once with bilinear interpolation, -expands the canvas to retain the image extent, fills rotation corners with RGB -(124,116,104), then edge-pads **each side** by the specified fraction of its axis. -Ordinary deployment preprocessing follows. Padding produces a wider framing; -it is combined with rotation in each view, rather than added as separate model -passes. There is no additional crop transform. Mean FP32 leaf logits feed the -existing regional filter and hierarchy. The earlier `wide_rotation_5` already -pads every rotated view by 8%; its five views are original and ±10°/±30°. - -## Evidence population and controls - -Native CUDA automatic precision (FP16 backbone, FP32 head), legacy northern Europe, -batch 32, four preparation/runtime threads. Thirteen cached individual views form -ten initial recipes through the existing public callable TTA interface. Two -five-view compositions were then added using the same cached views; these are -explicitly post-hoc candidates, not independent confirmation. - -- The same 38 flagged family-error images and 128 controls correct/accepted at - family level in both V2 and ordinary V3. -- A disjoint uniform random sample of 1,024 reporting images, seed 20260925, - selected without reference to prediction correctness. It is not an independent - validation set: it comes from the already-studied Flemming reporting partition. -- All predictive metrics use pinned `mini_metrics`; both threshold zero and the - **same ordinary-V3 thresholds** are reported. No recipe-specific optimization. - Thresholds at species/genus/family are 0.8099595 / 0.8210953 / 0.9708009. -- Raw cached aggregation agrees with the ordinary TTA API at atol=1e-6 for identical - batch shape. Regression checks show the composed 8% transform exactly reproduces - the earlier rotation transform. - -## Random sample: no confidence threshold - -All truth, no class truncation. These small-sample macro metrics are not comparable -to the headline full-data or 52,788-image tables. - -| Recipe | Views | Species macro accuracy | Macro-F1: species / genus / family | -|---|---:|---:|---:| -| `none` | 1 | 72.88% | 0.4849 / 0.5679 / 0.5016 | -| `padded_scale` | 3 | 74.55% | 0.5195 / 0.6213 / 0.5717 | -| `wide_rotation_5` | 5 | 74.54% | 0.5410 / 0.6491 / 0.6261 | -| `wide_rotation_pad15_5` | 5 | 74.73% | 0.5377 / 0.6503 / 0.6120 | -| `wide_rotation_mixed_padding_5` | 5 | 76.28% | 0.5546 / 0.6426 / 0.6307 | -| `rotation30_3` | 3 | 74.53% | 0.5388 / 0.6454 / 0.6658 | -| `rotation30_pad15_3` | 3 | 74.69% | 0.5358 / 0.6492 / 0.6360 | -| `rotation30_pad25_3` | 3 | 76.30% | 0.5523 / 0.6423 / 0.6521 | -| `mixed_3` | 3 | 74.84% | 0.5435 / 0.6436 / 0.6272 | -| `mixed_mirrored_3` | 3 | 74.92% | 0.5419 / 0.6467 / 0.6236 | - -## Random sample: fixed confidence thresholds - -Each cell is **macro-F1 / coverage**. These thresholds were calibrated for ordinary -V3, so the candidates will need their own calibration before selecting deployment -operating points. - -| Recipe | Species | Genus | Family | -|---|---:|---:|---:| -| `none` | 0.5979 / 71.48% | 0.6982 / 75.10% | 0.8095 / 72.36% | -| `padded_scale` | 0.6044 / 74.71% | 0.7153 / 78.61% | 0.8334 / 77.93% | -| `wide_rotation_5` | 0.6398 / 79.20% | 0.7450 / 82.91% | 0.8452 / 82.42% | -| `wide_rotation_pad15_5` | 0.6500 / 79.88% | 0.7580 / 83.79% | 0.8627 / 83.69% | -| `wide_rotation_mixed_padding_5` | 0.6570 / 79.88% | 0.7631 / 83.89% | 0.8637 / 84.08% | -| `rotation30_3` | 0.6392 / 78.91% | 0.7419 / 82.91% | 0.8522 / 82.52% | -| `rotation30_pad15_3` | 0.6580 / 79.00% | 0.7671 / 83.11% | 0.8596 / 83.01% | -| `rotation30_pad25_3` | 0.6515 / 79.49% | 0.7688 / 83.11% | 0.8643 / 83.50% | -| `mixed_3` | 0.6288 / 78.52% | 0.7397 / 81.93% | 0.8513 / 81.84% | -| `mixed_mirrored_3` | 0.6425 / 78.81% | 0.7538 / 82.81% | 0.8409 / 81.54% | - -The 25% recipe has higher species macro accuracy and F1 without thresholding than -the default and five-view recipe. At fixed thresholds, 15% has slightly higher -species F1; 25% has slightly higher genus/family F1 and coverage. Neither dominates -all metrics. Three-view ±30° with 8% padding has the highest unthresholded family -F1 among these candidates, further showing that there is no single universal winner. - -## Targeted errors and possible harm - -Family-level diagnostic counts at the same fixed threshold: - -| Recipe | Correct flagged cases /38 | Accepted wrong flagged cases /38 | Previously accepted errors now rejected | Correct/accepted controls becoming rejected /128 | -|---|---:|---:|---:|---:| -| `none` | 2 | 31 | 0 | 0 | -| `padded_scale` | 2 | 21 | 11 | 0 | -| `wide_rotation_5` | 4 | 13 | 19 | 0 | -| `wide_rotation_pad15_5` | 4 | 9 | 22 | 0 | -| `wide_rotation_mixed_padding_5` | 5 | 8 | 24 | 0 | -| `rotation30_3` | 4 | 9 | 22 | 0 | -| `rotation30_pad15_3` | 4 | 8 | 23 | 0 | -| `rotation30_pad25_3` | 5 | 4 | 27 | 0 | -| `mixed_3` | 3 | 12 | 19 | 1 | -| `mixed_mirrored_3` | 3 | 13 | 18 | 0 | - -With the three-view 25% recipe, only three initially wrong family predictions become correct; -27 previously accepted errors become rejected. Confidence suppression is the main -benefit on the flagged cases. All 128 selected controls remain family-correct; -the 15% and 25% recipes also keep them all accepted. Some flagged images are visually -similar, and 16 have truth species absent from the model vocabulary, so these 38 -cases are not independent or representative. - -The random sample exposes trade-offs that the easy family controls cannot: -the three-view 25% recipe has 127 accepted species errors versus 118 with the default, while -species coverage rises from 74.71% to 79.49%. Accepted family errors rise from two -to three. Relative to single-view inference, it corrects 51 species predictions -but breaks 12; the default corrects 25 and breaks three. Better aggregate metrics -therefore do not mean every image improves or every wrong confidence decreases. - -## Five-view composition: equal-budget comparison - -At the same five-view budget, replacing 8% padding with 15% on the ±10° views and -25% on the ±30° views improves fixed-threshold macro-F1 at every rank: -0.6398 → 0.6570 species, 0.7450 → 0.7631 genus, 0.8452 → 0.8637 family. -Coverage also increases (79.20% → 79.88%, 82.91% → 83.89%, 82.42% → 84.08%). -Flagged accepted family errors fall from 13 to eight, while all 128 family controls -stay correct and accepted. On the random sample, correct family predictions rise -from 974 to 979; accepted family errors remain three. - -This is direct support for composing transformations rather than adding standalone -views. The mixed-padding five-view candidate has better genus accuracy and family -micro accuracy than the three-view 25% candidate, while the latter rejects more -flagged errors and costs fewer passes. Both deserve broader qualification. There -is no blanket preference for three views or prohibition on additional views when -they supply useful diversity. - -## Inference cost - -Exploratory warm native-GPU timings on the same 32-image bank, three interleaved -rounds of three observations per recipe, after one warmup per recipe. Includes -image decoding through completed CPU results. These single-process timings are -not the fresh-process release benchmark and have no CPU or new ONNX counterpart. - -| Recipe | Views | Images/s | -|---|---:|---:| -| `none` | 1 | 146.7 | -| `padded_scale` | 3 | 53.3 | -| `wide_rotation_5` | 5 | 31.0 | -| `rotation30_3` | 3 | 51.4 | -| `rotation30_pad15_3` | 3 | 51.5 | -| `rotation30_pad25_3` | 3 | 50.7 | -| `mixed_3` | 3 | 49.6 | - -The three-view 25% recipe is about 1.64× as fast as five-view wide rotation, and about 5% -slower than the current three-view default in this warm diagnostic. Composition -therefore preserves the three-pass budget with only modest transform overhead. -The two added five-view compositions have not yet been timed. - -## Next qualification and reproduction - -Advance mixed-padding five-view and the 15%/25% three-view recipes to full-data native/ONNX evaluation, -with separate calibration/reporting, full and support >5 metrics, and coverage. -Then compare at matched coverage as well as each recipe’s optimized thresholds, -and benchmark CPU/GPU end-to-end cost before changing the enabled-TTA default. -This study does not establish in-domain behavior or independent generalization. - -The [compact evidence](assets/mambo-compact-tta.json) includes all twelve recipes, -all ranks, precision/recall, both confidence settings, sample IDs and transitions. -Raw view logits, canonical predictions and input records remain in ignored local evidence. -The [inference collector](../dev/releases/mambo_v3/compact_tta.py) and -[mini_metrics collector](../dev/releases/mambo_v3/compact_tta_metrics.py) reproduce it: - -```sh -CUDA_VISIBLE_DEVICES=0 /path/to/gpu-env/bin/python -m dev.releases.mambo_v3.compact_tta \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --samples /path/to/original-error-study/samples.json \ - --reporting-ids /path/to/reporting-ids.json --output /path/to/fresh-output -/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.compact_tta_metrics \ - --root /path/to/fresh-output -``` +# Preliminary TTA composition study + +This exploratory study shortlisted the recipes evaluated in the +[full comparison and selection record](mambo-composed-tta.md). Its useful finding +was to combine padding with rotations inside existing views, rather than add +separate inference passes. Three-view ±30° rotations with stronger padding +deserved full evaluation; the later comparison selected 25% padding. + +The sample comprised 38 flagged errors, 128 controls and 1,024 randomly selected +Flemming reporting images. The random sample was disjoint from the flagged +cases, but not independent of the previously studied reporting population. +Fixed thresholds came from ordinary V3, not candidate-specific calibration. +These results cannot replace the full-data comparison. + +The [recorded evidence](assets/mambo-compact-tta.json) retains all candidates. +Replay uses [compact_tta.py](../dev/releases/mambo_v3/compact_tta.py) and +[compact_tta_metrics.py](../dev/releases/mambo_v3/compact_tta_metrics.py); +[historical commands and tables](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-compact-tta.md) +are available in Git. For integration decisions, use the +[deployment README](../deployment/README.md). diff --git a/docs/mambo-composed-tta.md b/docs/mambo-composed-tta.md index 6bbed9d..5f70477 100644 --- a/docs/mambo-composed-tta.md +++ b/docs/mambo-composed-tta.md @@ -1,202 +1,50 @@ -# Full composed-TTA comparison - -**The best balanced candidate is original + ±30° rotation with 25% edge padding -(three views).** The full Flemming comparison confirms the preliminary improvement -over `padded_scale` on both native PyTorch and standard ONNX. The composed five-view -recipe gives smaller additional species/genus gains, but is not consistently better -at family level. The selected three-view recipe is now the enabled-TTA default; see the -[deployment README](../deployment/README.md) for the current five-pipeline comparison -and standalone runtime measurements. Explicit `padded_scale` retains the prior behavior. - -## Findings - -- **Three views, stronger composition:** unthresholded native macro-F1 improves - from 0.3001/0.3601/0.2970 to 0.3201/0.3873/0.3592 at species/genus/family. - On the common support >5 domain, the corresponding scores improve from - 0.8369/0.8342/0.8211 to 0.8612/0.8552/0.8506. -- **The benefit persists at matched coverage.** At approximately 80% coverage, - full-support macro-F1 improves from 0.5140/0.6404/0.6105 to - 0.5729/0.6990/0.7560. This is more than merely accepting more predictions. -- **Recipe-specific calibration:** the three-view candidate reaches - 0.5661/0.6776/0.7074 full-support macro-F1 at 81.16%/84.32%/82.09% coverage, - versus the current TTA's 0.5239/0.6655/0.6073 at 78.32%/77.73%/78.74%. - Its calibrated family macro accuracy is lower (98.92% versus 99.56%), so the - improvement is a coverage/F1 trade-off, not a win on every metric. -- **Five views remain an option, not the clear default.** Original + ±10° with - 15% padding + ±30° with 25% padding has the strongest unthresholded scores - among these candidates. At 80% coverage its species/genus F1 is slightly higher - than the three-view candidate (0.5770/0.7126), but family F1 is lower (0.6969). - Its calibrated family threshold is also more restrictive: 76.72% coverage. -- **Backend agreement:** across all three new recipes, ranks, and unthresholded - or matched-coverage points, the largest native/ONNX full-support macro-F1 - difference is 0.00263. Independently selected thresholds can differ; the JSON - also evaluates ONNX at the corresponding native thresholds. - -These are descriptive results from one out-of-domain dataset, without uncertainty -intervals. Recipe exploration used part of the reporting data; the separate -calibration partition does not make recipe selection independently validated. -Full-support macro-F1 is sensitive to rare and predicted-only classes, so the -common-support results and coverage must remain visible alongside it. - -## Recipes and runtime scope - -Every transformed view rotates the original decoded image on an expanded canvas -with bilinear interpolation, fills corners with RGB (124,116,104), then edge-pads -each side by the stated fraction of that axis. Ordinary deployment preprocessing -follows. Padding and rotation are nested within each view; no extra crop transform -is added. Recipes average FP32 leaf logits before regional filtering and hierarchy. - -All 58,640 images were collected for each backend; seven shared views reconstruct -the three candidate recipes. Native used an FP16 backbone with an FP32 head; -ONNX used the standard floating graph with CUDA TF32, batch 32 and four workers. -First-batch aggregates matched the ordinary TTA API for every recipe within 1e-6. -The processes overlapped on the laptop GPU, so **collection elapsed times are not -inference-speed benchmarks**. The earlier [small warm benchmark](mambo-compact-tta.md) -measured roughly 50.7 images/s for this three-view candidate versus 53.3 for current -TTA; the new composed five-view recipe still needs standalone timing. - -All quality results below use the same **52,788 reporting images**, with thresholds fitted on -5,852 separate calibration images. Every model uses legacy northern Europe and all truth, -including out-of-vocabulary labels. Metrics come from pinned `mini_metrics`. Recipe selection -used this dataset, including a reporting subset; this is not independent validation. - -Metric cells show **full support / common support >5**. The latter requires more than five -truth instances and accepted predictions in every compared pipeline, separately per operating -point. Classes can differ between operating points. No evaluation rows are dropped. - -## No confidence threshold - -### Species - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 68.56% / 79.50% | 0.2620 / 0.7878 | 100.00% | -| V3 single view | 71.36% / 82.03% | 0.2593 / 0.8100 | 100.00% | -| Current padded scale | 74.06% / 84.80% | 0.3001 / 0.8369 | 100.00% | -| ±30° / pad15 · 3 views | 75.13% / 86.81% | 0.3207 / 0.8588 | 100.00% | -| ±30° / pad25 · 3 views | 74.94% / 86.96% | 0.3201 / 0.8612 | 100.00% | -| Mixed padding · 5 views | 75.52% / 87.16% | 0.3216 / 0.8628 | 100.00% | - -### Genus - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 78.94% / 82.07% | 0.3213 / 0.7942 | 100.00% | -| V3 single view | 80.53% / 83.83% | 0.3230 / 0.8057 | 100.00% | -| Current padded scale | 83.13% / 86.42% | 0.3601 / 0.8342 | 100.00% | -| ±30° / pad15 · 3 views | 85.15% / 88.17% | 0.3881 / 0.8542 | 100.00% | -| ±30° / pad25 · 3 views | 84.73% / 88.13% | 0.3873 / 0.8552 | 100.00% | -| Mixed padding · 5 views | 85.27% / 88.53% | 0.3958 / 0.8586 | 100.00% | - -### Family - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 84.35% / 87.00% | 0.2697 / 0.8238 | 100.00% | -| V3 single view | 81.05% / 85.70% | 0.2805 / 0.7831 | 100.00% | -| Current padded scale | 85.79% / 88.66% | 0.2970 / 0.8211 | 100.00% | -| ±30° / pad15 · 3 views | 86.25% / 89.19% | 0.3486 / 0.8403 | 100.00% | -| ±30° / pad25 · 3 views | 86.37% / 89.32% | 0.3592 / 0.8506 | 100.00% | -| Mixed padding · 5 views | 86.82% / 89.84% | 0.3601 / 0.8529 | 100.00% | - -## Recipe-specific calibrated thresholds - -### Species - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 84.65% / 95.21% | 0.4467 / 0.7799 | 69.73% | -| V3 single view | 86.69% / 96.35% | 0.5081 / 0.8016 | 70.81% | -| Current padded scale | 86.59% / 95.86% | 0.5239 / 0.8413 | 78.32% | -| ±30° / pad15 · 3 views | 86.43% / 96.34% | 0.5615 / 0.8595 | 80.67% | -| ±30° / pad25 · 3 views | 86.34% / 96.38% | 0.5661 / 0.8618 | 81.16% | -| Mixed padding · 5 views | 87.04% / 96.41% | 0.5753 / 0.8576 | 80.34% | - -### Genus - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 95.34% / 97.55% | 0.5869 / 0.7875 | 69.81% | -| V3 single view | 95.48% / 97.31% | 0.6019 / 0.8311 | 75.75% | -| Current padded scale | 96.28% / 97.71% | 0.6655 / 0.8477 | 77.73% | -| ±30° / pad15 · 3 views | 96.25% / 97.54% | 0.6639 / 0.8840 | 84.29% | -| ±30° / pad25 · 3 views | 95.77% / 97.55% | 0.6776 / 0.8858 | 84.32% | -| Mixed padding · 5 views | 96.07% / 97.51% | 0.6825 / 0.8855 | 84.46% | - -### Family - -| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage | -|---|---:|---:|---:| -| MAMBO v2 | 99.64% / 99.58% | 0.6545 / 0.8021 | 77.44% | -| V3 single view | 99.33% / 99.22% | 0.5807 / 0.8161 | 73.06% | -| Current padded scale | 99.56% / 99.49% | 0.6073 / 0.8536 | 78.74% | -| ±30° / pad15 · 3 views | 98.92% / 98.75% | 0.6689 / 0.8782 | 81.84% | -| ±30° / pad25 · 3 views | 98.92% / 98.75% | 0.7074 / 0.8802 | 82.09% | -| Mixed padding · 5 views | 99.46% / 99.37% | 0.6990 / 0.8491 | 76.72% | - -![Calibrated, unthresholded and matched-coverage comparison](assets/mambo-composed-tta.svg) - -## Support excluded from the averaging domain - -| Setting | Rank | Common classes | Truth images outside / % | -|---|---|---:|---:| -| zero | species | 308 | 8,145 / 15.43% | -| zero | genus | 242 | 221 / 0.42% | -| zero | family | 20 | 5 / 0.01% | -| optimized | species | 272 | 10,010 / 18.96% | -| optimized | genus | 215 | 5,920 / 11.21% | -| optimized | family | 19 | 18 / 0.03% | -| coverage_70 | species | 270 | 10,083 / 19.10% | -| coverage_70 | genus | 210 | 5,999 / 11.36% | -| coverage_70 | family | 19 | 18 / 0.03% | -| coverage_80 | species | 282 | 9,352 / 17.72% | -| coverage_80 | genus | 220 | 5,291 / 10.02% | -| coverage_80 | family | 19 | 18 / 0.03% | -| coverage_90 | species | 295 | 8,532 / 16.16% | -| coverage_90 | genus | 231 | 4,756 / 9.01% | -| coverage_90 | family | 19 | 18 / 0.03% | - -Predicted-only classes have zero truth images and can still strongly affect macro-F1. -These are not rejection counts. Coverage is unchanged by support truncation. - -## Evidence and interpretation - -The [CSV](assets/mambo-composed-tta.csv) includes both backends, all ranks, macro accuracy, -precision, recall, F1, micro accuracy, Theil U, coverage, thresholds and retained-support counts. -The [JSON](assets/mambo-composed-tta.json) also records exact class sets, source hashes and -partition identities. Its ONNX entries include native-threshold comparisons to distinguish -backend differences from calibration differences. - -Matched-coverage thresholds are selected from reporting confidence scores without using truth -labels; their realized coverage is computed by mini_metrics and may differ slightly because of -ties. They are diagnostic operating points, not deployment-calibrated thresholds. - -## Reproduction and provenance - -Collection: `dev.releases.mambo_v3.composed_full`, with `--backend torch` or -`--backend onnx`, the verified release bundle, full Flemming manifest and image root. -Use a fresh output directory for each backend. Analysis and figure generation: - -```bash -/tmp/mambo-release-metrics/bin/python -m dev.releases.mambo_v3.composed_metrics \ - --root local-evidence/mambo-composed-full \ - --output local-evidence/mambo-composed-full/analysis -.venv/bin/python -m dev.releases.mambo_v3.composed_report \ - --data local-evidence/mambo-composed-full/analysis/composed-comparison.json \ - --output local-evidence/mambo-composed-report -``` - -The metric environment must contain the pinned mini_metrics revision recorded in -the JSON. The figure/table generator recreates the numeric report; the findings -above are the accompanying interpretation. Retained local `torch/report.json` and -`onnx/report.json` contain manifest, bundle, runner, transform and prediction hashes. -The native run predates the runtime-metadata correction: its top-level -`effective_precision=fp16` describes execution; its older nested initial runtime -flags do not. Original evidence is preserved without rewriting those records. - -All five retained baseline models reproduced their previous unthresholded and -calibrated full-support metrics within 1e-12. The support >5 domain here intersects -**all eleven pipelines**, so it need not equal the five-pipeline domain in earlier -reports. Source hashes and exact reporting/calibration identities are checked -before evaluation. This study did not change core-module behavior. The subsequent deployment promotion -changes only the enabled-TTA preset, while TTA remains off by default. +# TTA recipe selection + +When TTA is enabled, use `rotation30_pad25_3`: original plus ±30° rotations, +each with 25% edge padding. It improved the Flemming comparison on both PyTorch +and ONNX at the same three-view cost as the previous `padded_scale` recipe. +TTA remains off by default; explicit `padded_scale` preserves the previous option. +See [the API and spatial policy](mambo-tta.md) and +[current release comparisons](../deployment/README.md#release-comparison). + +## Evidence for the choice + +Native PyTorch, legacy northern Europe, all truth, full-support macro-F1: + +| Operating point | Recipe | Species | Genus | Family | +|---|---|---:|---:|---:| +| No threshold | Previous padded scale | 0.3001 | 0.3601 | 0.2970 | +| No threshold | Selected three views | 0.3201 | 0.3873 | 0.3592 | +| Approximately 80% coverage | Previous padded scale | 0.5140 | 0.6404 | 0.6105 | +| Approximately 80% coverage | Selected three views | 0.5729 | 0.6990 | 0.7560 | + +The five-view mixed-padding candidate added modest species/genus gains at +80% coverage (0.5770/0.7126), but lower family F1 (0.6969) and two extra passes. +It remains an explicit alternative, not the default. Improvements were not +universal across metrics: recipe-specific calibration increased coverage/F1 +while reducing family macro accuracy relative to the old recipe. + +Metrics use pinned `mini_metrics`, 52,788 reporting images and 5,852 separate +calibration images. Recipe exploration used some reporting images, so this is +not independent validation. These out-of-domain results should be read alongside +the in-domain comparison; neither establishes a universal TTA benefit. + +Matched-coverage thresholds use reporting confidences without labels and retain +ties. They are diagnostic operating points, distinct from thresholds optimized +on the calibration split. Support >5 results in this study intersect eleven +pipelines and therefore differ from the current five-pipeline comparison. +No rows are removed when truncating the class macro average. + +## Provenance + +The [complete evidence](assets/mambo-composed-tta.json) retains metrics, thresholds +and source identities and remains an input to +[release promotion reporting](../dev/releases/mambo_v3/promoted_report.py). +Collection timings are not speed benchmarks: the native and ONNX jobs overlapped. + +For replay, use [composed_full.py](../dev/releases/mambo_v3/composed_full.py), +[composed_metrics.py](../dev/releases/mambo_v3/composed_metrics.py) and +[composed_report.py](../dev/releases/mambo_v3/composed_report.py). +The [historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-composed-tta.md) +records exact commands and the native run's older nested precision-metadata caveat; +its top-level `effective_precision=fp16` describes actual execution. diff --git a/docs/mambo-loading-scaling.md b/docs/mambo-loading-scaling.md index c206704..6bc336f 100644 --- a/docs/mambo-loading-scaling.md +++ b/docs/mambo-loading-scaling.md @@ -1,72 +1,31 @@ -# Loading and scheduling after GPU acceleration +# Historical loading and scheduling diagnosis -Historical diagnostic of the synchronous adapter after its first GPU acceleration. -Current request/streaming behavior and evidence are in the -[pipeline review](mambo-inference-pipeline-review.md). +After initial GPU acceleration, the synchronous adapter still prepared each +batch before running inference. Increasing batch size could not hide that +per-image cost. This led to the bounded streaming implementation described in +the [current pipeline review](mambo-inference-pipeline-review.md). -**The plateau in this study was partly a loading/scheduling limit.** The synchronous -adapter waits for each batch's preparation before inference. Its preparation -threads do not intentionally run alongside that inference, but the timings include -both costs. A fixed worker count and a larger batch can leave preparation as a -similar per-image cost, even when prepared-input model execution is much faster. +## Findings worth retaining -![Worker count, batch size and experimental lookahead](assets/mambo-loading-scaling.svg) +At four preparation workers, native batch-32 prepared-input throughput was +343.7 images/s versus 129.1 for the complete synchronous request. ONNX reached +203.3 versus 100.5. Prepared-input timing included transfers and CPU species +scores, but excluded loading and hierarchy; separately measured medians are +not additive. -The controlled sweep keeps runtime CPU threads at four and varies preparation -workers independently (1/2/4/8), with batches 8/32/64. It uses both backends on the -same 128-image bank, automatic GPU precision and northern Europe. Each cell has -three ordered trials (middle trial reversed), one warmup and three observations. -Trials share a loaded process per backend; these are diagnostic measurements, -not replacements for the three fresh-process release benchmark. This 128-image -bank differs from that benchmark's 32-image bank; compare interventions within -this study. +One-batch lookahead improved native throughput from 128.2 to 154.2 images/s +and ONNX from 99.6 to 155.2. Eight workers helped native slightly but reduced +ONNX lookahead throughput to 132.7. The lesson is to budget preparation and +runtime threads separately and overlap stages, rather than assume more workers +or larger batches always help. -At **four preparation workers**, images/s are: +This was a warm-cache laptop experiment on 128 images, not an HPC worker-count +recommendation or a replacement for fresh-process release benchmarks. -| Backend | Batch | Preparation alone | Prepared-input runtime | Complete synchronous API | -|---|---:|---:|---:|---:| -| PyTorch | 8 | 216.1 | 235.1 | 98.7 | -| PyTorch | 32 | 223.2 | 343.7 | 129.1 | -| PyTorch | 64 | 224.8 | 344.3 | 131.8 | -| ONNX | 8 | 210.8 | 205.3 | 107.1 | -| ONNX | 32 | 206.5 | 203.3 | 100.5 | -| ONNX | 64 | 170.3 | 208.3 | 90.8 | +## Evidence and replay -Prepared-input timing includes transfer and completed CPU species scores, but no -loading or hierarchy reduction. These are separately timed boundaries, so their -medians are not additive. Both backends show a prepared-runtime plateau, but well -above the synchronous API's throughput. Increasing workers from four to eight -raises native batch-32 throughput from 129.1 to 134.9 images/s; ONNX rises from -100.5 to 104.0. Batch 64 does not deliver a further useful gain here. - -A bounded **experimental one-batch lookahead**, with 128 images in four batches -of 32, increases throughput from **128.2 to 154.2 images/s** for native and -**99.6 to 155.2** for ONNX at four workers. It prepares the next batch while the -current batch runs, retaining at most two prepared batches. It preserves checked -top-1 predictions. Increasing to eight workers improves native slightly (157.7), -but lowers ONNX to 132.7: this is consistent with loading/inference contention, though scheduling and -laptop variability also affect this small comparison. -These lookahead numbers are five warmed repeats within one process per backend. - -## Interpretation - -Preparation workers and ONNX runtime threads are separate resource budgets. The -4–8 worker choices here reflect a warm-cache laptop workload, not a recommendation -for HPC or cold storage. The one-batch lookahead was an experiment at this stage; -a bounded production streaming API has since been implemented and qualified. -Use the [deployment guide](../deployment/README.md) for current controls and defaults. - -## Reproduce - -```sh -python -m dev.releases.mambo_v3.loading_scaling \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --backend torch --output /path/to/mambo-loading-scaling-torch -# Repeat sequentially with --backend onnx and mambo-loading-scaling-onnx. -python -m dev.releases.mambo_v3.loading_charts --root /path/to \ - --output /path/to/charts -``` - -Run without competing CPU/GPU work. [Compact measurements](assets/mambo-loading-scaling.json) -regenerate the chart through `loading_charts --data`; full observations, image -identities, source hashes and hardware snapshots remain in the raw reports. +[Recorded measurements](assets/mambo-loading-scaling.json) retain all sweeps; +the [historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-loading-scaling.md) +records the method and commands for its retired diagnostic tools. +Use the [pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and +[speed smoke](../dev/releases/mambo_v3/speed-smoke.md) for current behavior. diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index 5a61dc9..3afb33a 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -29,10 +29,6 @@ The full-data comparison supports this promotion on both backends. Explicit `padded_scale` retains the former behavior. `RotatePad(degrees, padding)` and `EdgePad(fraction)` expose these transforms for custom policies. -**Historical study below:** exploratory measurements and earlier promotion notes -refer to padded-scale TTA unless explicitly stated. For current quality, thresholds -and speed, use the [deployment README](../deployment/README.md#release-comparison). - `SaltAndPepper(proportion=0.01, seed=0)` is also available as a public transform. It uses one RGB-shared black/white pixel mask and an image-keyed seed, so built-in noise is reproducible across batch sizes and preparation worker counts. It operates @@ -62,212 +58,13 @@ averaged in FP32 and normalized to unit length; a nonfinite or near-zero mean raises an error. Averaged embeddings have not been qualified for downstream retrieval/clustering. The default single-view representation is unchanged. -## Compact composition follow-up - -The [padding-and-rotation study](mambo-compact-tta.md) tests compositions within three and five views -against the current default and earlier five-view wide rotation on flagged cases and a separate random sample. -It identifies promising compositions at both three- and five-view budgets, -with confidence/coverage trade-offs. At the time of that preliminary study these remained experimental; `tta=True` then -selects the qualified padded-scale default. - -## Qualification - -Both automatic GPU backends passed a fixed, seeded **1,024-image / 201-species** -Flemming qualification with the six original profiles and all five release evaluation -presets; padded scale was one of the seven additional candidates below. Metrics -use pinned `mini_metrics` at the same revision and threshold-zero policy as the full release comparison. Species results include all 1,024 images; -880 have truth inside the northern-Europe vocabulary. These are **subset results**, -not directly comparable to the full-set scores or evidence of a universal gain. - -Northern Europe, all truth: - -| Profile | PyTorch macro accuracy | ONNX macro accuracy | PyTorch macro-F1 | ONNX macro-F1 | -|---|---:|---:|---:|---:| -| None | 74.44% | 73.92% | 0.4715 | 0.4693 | -| Horizontal flip | 74.90% | 74.90% | 0.4878 | 0.4863 | -| Five crops | 69.97% | 69.97% | 0.4137 | 0.4137 | -| Ten crops | 73.14% | 73.26% | 0.4472 | 0.4478 | -| D4 rotations/reflections | 77.77% | 77.77% | 0.5137 | 0.5137 | -| Light salt-and-pepper noise | 73.10% | 73.10% | 0.4582 | 0.4582 | - -D4 improves native macro accuracy by 3.33 percentage points in this subset; -crop profiles are worse than single-view inference. Cropping can discard useful -parts of a specimen or its context. These profiles were defined before this -comparison; D4 is not the enabled default. Small per-image changes can have -visible macro effects when species have very little evaluation support. - -The [compact metrics](assets/mambo-tta-comparison.json) retain all/known-truth -macro and micro metrics at species/genus/family level for every profile, backend -and evaluated list. The [full release comparison](mambo-deployment-defaults.md) -evaluates the promoted padded-scale recipe on all Flemming images. In-domain behavior and downstream -embedding usefulness remain unmeasured. Both backends passed finite-score checks, -and public prediction/embedding agreement, custom-list and unit-embedding checks -on the first eight qualification images for every profile. The installed ONNX-only -wheel passed ten-crop API/CLI inference offline against a relocated read-only bundle. - -![TTA quality and GPU inference cost](assets/mambo-tta-tradeoffs.svg) - -The [chart data](assets/mambo-tta-tradeoffs.json) retain timing observations. -Throughput includes image decoding, preparation, inference and CPU results on the -RTX 3080 Ti Laptop GPU, batch 32, four preparation workers. These are diagnostic -measurements: one process per backend, one warmup and three observations per policy, -using the same 32-image bank. They are not the full release benchmark. - -| Policy | PyTorch images/s | ONNX images/s | -|---|---:|---:| -| `none` | 130.5 | 101.1 | -| `hflip` | 72.4 | 50.5 | -| `d4` | 19.6 | 14.3 | -| `padded_scale` | 54.5 | 38.1 | -| `padded_rotation` | 41.7 | 34.7 | -| `light_noise` | 48.1 | 37.5 | - -Unit tests cover source-view isolation for mutating custom transforms, transformations -before ordinary preprocessing, bounded calls and ordering, both backend dispatches, -logit aggregation before masking, prediction/embedding consistency, normalized mean -embeddings and explicit rejection of undefined means. Existing preprocessing hashes -remain unchanged. The release code adds no dependency or shared-core modification. - -## Reproduce - -```sh -python -m dev.releases.mambo_v3.qualify_tta \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --backend torch --count 1024 --output /path/to/new-tta-torch -# Repeat with --backend onnx and another output directory. -/path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ - --source /path/to/new-tta-torch/ten_crop/north_europe/mini_metric.csv \ - --output /path/to/new-tta-torch/ten_crop/north_europe/metrics.json -``` - -Use `qualify_tta --profiles brightness contrast gamma gaussian_noise padded_scale -mild_blur padded_rotation` for the seven additional candidates, with another output -directory. `tta_report --root /path/to/qualification-parent` computes every retained -metric through the pinned package; `--extra-root` combines disjoint profile runs -after checking identical sample identities. - -For a cost sweep, run `qualify_tta --timing-only` separately for each backend, -with `--profiles none hflip five_crop ten_crop d4 light_noise brightness contrast -gamma gaussian_noise padded_scale mild_blur padded_rotation`, using output folders -`mambo-tta-timing-torch` and `mambo-tta-timing-onnx` under one parent directory. -Run sequentially without competing CPU/GPU work. Then render quality and cost: - -```sh -python -m dev.releases.mambo_v3.tta_charts \ - --quality /path/to/combined-tta-metrics.json --root /path/to/timing-parent \ - --output /path/to/charts -# Or regenerate solely from the retained compact data: -python -m dev.releases.mambo_v3.tta_charts \ - --data docs/assets/mambo-tta-tradeoffs.json --output /path/to/charts -``` - -The collector also supports `evaluate collect --tta PROFILE` for a full run. Its -`tta_prepare_infer_seconds` combines preparation and inference; it is a collection -timer, not an isolated speed benchmark. Use fresh outputs and preserve original -splits, fixed lists and the pinned metric policy. Do not tune a policy on Flemming -and then report its selection-set score as an independent validation. - -## Literature-informed candidate space - -The policy space should reflect plausible nuisance variation in specimen images, -not where it is easiest to insert an operation in the model pipeline. Preserving -the visible specimen is a useful design preference for this task. It is not a -claim that every extent-preserving transform improves classification. - -- [Greedy Policy Search (UAI 2020)](https://proceedings.mlr.press/v124/lyzhov20a.html) - evaluates diverse learned TTA policies on image classifiers, including - EfficientNets. It supports considering broader policies and selecting their - composition on separate validation data, rather than assuming a crop/flip list - is sufficient. This release does not implement policy learning. -- [TTAch](https://github.com/qubvel/ttach) demonstrates the community pattern of - wrapping classification with independently composed rotations, reflections, - scales and intensity changes. The release uses that separation of concerns - without adding a PyTorch-only TTA dependency to the portable runtime. -- [Cohen and Giryes (WACV 2024)](https://openaccess.thecvf.com/content/WACV2024/html/Cohen_Simple_Post-Training_Robustness_Using_Test_Time_Augmentations_and_Random_Forest_WACV_2024_paper.html) - explores color, blur, noise and geometric TTA for adversarial robustness with - a learned aggregator. Its [supplement](https://openaccess.thecvf.com/content/WACV2024/supplemental/Cohen_Simple_Post-Training_Robustness_WACV_2024_supplemental.pdf) - specifies brightness, contrast, gamma, blur and Gaussian noise. These motivate - candidate families, not a moth-specific efficacy claim or a reproduction of - that learned method. -- [PlantCLEF 2019](https://ceur-ws.org/Vol-2380/paper_247.pdf) documents multi-scale - mirrored test views in species recognition. It provides relevant precedent; - its cropped views do not establish that cropping is appropriate for these moth - photographs. -- [Better Aggregation in TTA (ICCV 2021)](https://openaccess.thecvf.com/content/ICCV2021/html/Shanmugam_Better_Aggregation_in_Test-Time_Augmentation_ICCV_2021_paper.html) - studies aggregation and changes in individual predictions. Aggregation itself - is therefore an experimental choice; this release documents its fixed logit - mean and does not claim it is optimal. - -The following additional **three-view candidates** use the original view plus two -perturbations, through ordinary public `TTA` callables in -[tta_candidates.py](../dev/releases/mambo_v3/tta_candidates.py): - -| Candidate | Two additional views | Rationale for this task | -|---|---|---| -| Brightness | Factors 0.9 / 1.1 | Exposure variation; same spatial region | -| Contrast | Factors 0.9 / 1.1 | Illumination/contrast variation without moving the specimen | -| Gamma | Exponents 0.9 / 1.1 | Moderate nonlinear tone changes | -| Gaussian noise | Two image-keyed seeds; sigma 0.005 in [0,1] | Sensor-like perturbation; unchanged extent | -| Mild blur | Gaussian radii 0.25 / 0.5 source pixels | Weak sharpness variation; may suppress fine diagnostic texture | -| Padded scale | Edge padding of 8% / 15% on each side | Smaller specimen scale without cutting away source regions | -| Padded rotation | −10 / +10 degrees; expanded canvas and 8% padding | Small orientation changes without cutting off rotated corners | - -These magnitudes are deliberately specified starting candidates, not claimed -optima. The small-rotation policy also adds padding; its result alone cannot -isolate rotation from framing/scale effects. Padding changes border statistics and apparent scale; color and noise can -change diagnostic detail even when they preserve image extent. The normal model -recipe still applies to every view. The added padding is large enough to retain -the expanded source canvas through that recipe's center crop. Unlike quarter -turns, arbitrary rotations require interpolation. - -All seven candidates passed the same 1,024-image qualification through both -backends, including the public custom-list and embedding checks. Northern Europe, -all truth, using the same pinned mini_metrics policy: - -| Candidate | PyTorch macro accuracy | ONNX macro accuracy | PyTorch macro-F1 | ONNX macro-F1 | -|---|---:|---:|---:|---:| -| Brightness | 74.66% | 74.66% | 0.4732 | 0.4732 | -| Contrast | 75.30% | 75.26% | 0.4821 | 0.4820 | -| Gamma | 74.75% | 74.83% | 0.4750 | 0.4769 | -| Gaussian Noise | 75.40% | 75.15% | 0.4877 | 0.4852 | -| Padded Scale | 78.69% | 78.62% | 0.5328 | 0.5307 | -| Mild Blur | 75.28% | 75.28% | 0.4787 | 0.4787 | -| Padded Rotation | 78.59% | 78.59% | 0.5509 | 0.5509 | - -These results favor padded scale/rotation views in this subset, with smaller gains -from several photometric/noise policies. They do not establish a general ranking -or separate padding from rotation effects. Every tested result is retained, -including the worse crop and salt-and-pepper profiles. All 13 policies were tested -on the same fixed subset. Padded scale is now the named enabled-TTA default; -the other additional candidates remain reproducible public-interface examples. - -Keep the padded-scale default and other whole-image policies prominent in consumer -documentation; retain crop profiles as optional experimental comparisons. Strong hue changes, aggressive -blur, erasing/Cutout and unbounded Cartesian products are lower-priority candidates -here because they alter diagnostic colors/details or rapidly multiply inference -cost. This priority is a task-specific inference from the literature and current -measurements, not a universal TTA ranking. A compact mixed policy can be tested -next on independent validation data. Full Flemming results include the subset -used for recipe selection and are therefore descriptive, not independent -validation. Subsequent [UCloud evaluation](mambo-indomain-evidence.md) adds -in-domain evidence for the promoted recipe, not all exploratory candidates. - -A portable custom policy can use existing Pillow functionality directly: - -```python -from PIL import Image, ImageEnhance -from mambo_deploy import Predictor, TTA, View - - -def dimmer(chw): - image = Image.fromarray(chw.transpose(1, 2, 0)) - return ImageEnhance.Brightness(image).enhance(0.9) - +## Evidence and selection -policy = TTA((View(), dimmer), name="original-plus-dimmer") -predictor = Predictor(bundle, backend="onnx", tta=policy) -``` +The [selection record](mambo-composed-tta.md) explains why the three-view +rotation-and-padding recipe replaced `padded_scale`. Current quality, coverage +and timings are in the [deployment comparison](../deployment/README.md#release-comparison). -This example illustrates composition; its two-view combination is not the -three-view brightness policy measured above. The measured policies can be reproduced -from the linked candidate definitions without depending on any training module. +TTA was selected using Flemming, including part of its reporting partition. +Its benefit is domain-dependent; it is not a universal improvement or an +independently validated recipe choice. Earlier crop/noise/reflection sweeps +remain in [historical study results](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-tta.md). diff --git a/docs/training-workflow-postmortem.md b/docs/training-workflow-postmortem.md index e456219..2d2f6a0 100644 --- a/docs/training-workflow-postmortem.md +++ b/docs/training-workflow-postmortem.md @@ -135,3 +135,11 @@ for workflow contracts and target runs for hardware claims. Expand experiments o when they change a decision; a production matrix is not a default test suite. Unresolved PTQ/native integer and target-performance work belongs in the [quantization roadmap](quantization-roadmap.md), not this operational plan. + +The completed campaign's hard-coded expert/test staging and evaluation launchers +are retained only in +[Git at 852bf71](https://github.com/asgersvenning/mini_trainer/tree/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/dev/ucloud). +They used a source overlay pinned to `0c572ca` and job-specific `/work` paths; +they are not maintained next-run infrastructure. The original 512-reader, +RAM-staging evidence above remains valid. New workflow work should use the public +CLIs and the recovery requirements here rather than revive those launchers. diff --git a/tests/benchmarks/test_benchmark_tensorrt.py b/tests/benchmarks/test_benchmark_tensorrt.py index b040dfa..ce92be3 100644 --- a/tests/benchmarks/test_benchmark_tensorrt.py +++ b/tests/benchmarks/test_benchmark_tensorrt.py @@ -61,20 +61,6 @@ def test_reference_checks_float_tolerance_and_contract(): compare_outputs(actual, wrong, 0, 0) -def test_help_does_not_import_tensorrt_or_torch(): - code = """ -import runpy, sys -sys.argv = ['tensorrt_build', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_build', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'tensorrt' not in sys.modules -assert 'torch' not in sys.modules -""" - subprocess.run([sys.executable, "-c", code], check=True, capture_output=True, text=True) - - def gpu_dependencies(): if os.environ.get("RUN_CUDA_TESTS") != "1": pytest.skip("Set RUN_CUDA_TESTS=1 in a prepared TensorRT/CUDA environment") @@ -145,3 +131,18 @@ def test_parser_failure_retains_diagnostics_without_engine(tmp_path): assert report["parser_errors"] assert report["messages"] assert not (output / "model.engine").exists() + + +@pytest.mark.parametrize("module", ["tensorrt_build", "tensorrt_memory", "tensorrt_pair", "tensorrt_deployment"]) +def test_help_does_not_import_gpu_libraries(module): + code = """ +import runpy, sys +module = sys.argv[1] +sys.argv = [module, '--help'] +try: + runpy.run_module('dev.benchmarks.inference.' + module, run_name='__main__') +except SystemExit as error: + assert error.code == 0 +assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules +""" + subprocess.run([sys.executable, "-c", code, module], check=True, capture_output=True) diff --git a/tests/benchmarks/test_benchmark_tensorrt_deployment.py b/tests/benchmarks/test_benchmark_tensorrt_deployment.py index 3851df9..dae020a 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_deployment.py +++ b/tests/benchmarks/test_benchmark_tensorrt_deployment.py @@ -1,6 +1,4 @@ import json -import subprocess -import sys from pathlib import Path from types import SimpleNamespace @@ -152,23 +150,3 @@ def changed(*args): deployment.evaluate(*builds, manifest, inputs, tmp_path / "result") assert not calls assert json.loads((tmp_path / "result/report.json").read_text())["status"] == "failed" - - -def test_help_is_runtime_independent(): - subprocess.run( - [ - sys.executable, - "-c", - """ -import runpy, sys -sys.argv = ['tensorrt_deployment', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_deployment', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules -""", - ], - check=True, - capture_output=True, - ) diff --git a/tests/benchmarks/test_benchmark_tensorrt_memory.py b/tests/benchmarks/test_benchmark_tensorrt_memory.py index 252d559..30eb7bf 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_memory.py +++ b/tests/benchmarks/test_benchmark_tensorrt_memory.py @@ -1,6 +1,5 @@ import json import os -import subprocess import sys import numpy as np @@ -9,26 +8,6 @@ from dev.benchmarks.inference.tensorrt_memory import measure -def test_help_does_not_import_gpu_libraries(): - subprocess.run( - [ - sys.executable, - "-c", - """ -import runpy, sys -sys.argv = ['tensorrt_memory', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_memory', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'torch' not in sys.modules and 'tensorrt' not in sys.modules -""", - ], - check=True, - capture_output=True, - ) - - def test_missing_runtime_retains_failure_and_does_not_overwrite(tmp_path, monkeypatch): monkeypatch.setitem(sys.modules, "tensorrt", None) output = tmp_path / "report" diff --git a/tests/benchmarks/test_benchmark_tensorrt_pair.py b/tests/benchmarks/test_benchmark_tensorrt_pair.py index a16cd71..7cc00c5 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_pair.py +++ b/tests/benchmarks/test_benchmark_tensorrt_pair.py @@ -1,7 +1,5 @@ import json import os -import subprocess -import sys import numpy as np import pytest @@ -51,19 +49,6 @@ def execute(_): assert len(trials) == 1 -def test_help_does_not_load_gpu_libraries(): - code = """ -import runpy, sys -sys.argv = ['tensorrt_pair', '--help'] -try: - runpy.run_module('dev.benchmarks.inference.tensorrt_pair', run_name='__main__') -except SystemExit as error: - assert error.code == 0 -assert 'tensorrt' not in sys.modules and 'torch' not in sys.modules -""" - subprocess.run([sys.executable, "-c", code], check=True, capture_output=True) - - @pytest.mark.parametrize("pinned", [False, True]) def test_real_engine_pair_preserves_named_outputs_and_failures(tmp_path, pinned): if os.environ.get("RUN_CUDA_TESTS") != "1": diff --git a/tests/benchmarks/test_expert_trial.py b/tests/benchmarks/test_expert_trial.py deleted file mode 100644 index 6e85d4a..0000000 --- a/tests/benchmarks/test_expert_trial.py +++ /dev/null @@ -1,89 +0,0 @@ -"""Offline coverage for the bounded staging helper.""" - -import importlib.util -import json -from pathlib import Path - -import pytest - -spec = importlib.util.spec_from_file_location("expert_trial", Path(__file__).parents[2] / "dev/ucloud/expert_trial.py") -trial = importlib.util.module_from_spec(spec) -spec.loader.exec_module(trial) - - -def test_stage_preserves_unknown_folder_and_bytes(tmp_path): - source = tmp_path / "source" - for name in ("111", "999"): - (source / name).mkdir(parents=True) - (source / name / "image.jpg").write_bytes(b"image bytes") - (source / name / "notes.txt").write_text("not selected") - output = tmp_path / "output" - output.mkdir() - destination = tmp_path / "staged" - trial.stage(source, destination, output, 2, 1024, 2) - report = json.loads((output / "staging.json").read_text()) - assert len(report["files"]) == 2 - for name in ("111", "999"): - assert (destination / name / "image.jpg").read_bytes() == b"image bytes" - assert len(trial.select_images(source, 1)) == 1 - - -def test_stage_rejects_byte_budget_before_copy(tmp_path): - source = tmp_path / "source" - (source / "999").mkdir(parents=True) - (source / "999/image.jpg").write_bytes(b"too large") - with pytest.raises(RuntimeError, match="limit"): - trial.stage(source, tmp_path / "staged", tmp_path, 1, 1, 1) - assert not (tmp_path / "staged").exists() - - -def test_reuse_requires_complete_intact_staging(tmp_path): - staged = tmp_path / "ram" - staged.mkdir() - image = staged / "image.jpg" - image.write_bytes(b"image") - previous = tmp_path / "previous" - previous.mkdir() - (previous / "inference.yaml").write_text(json.dumps({"input": str(staged)})) - with pytest.raises(FileNotFoundError): - trial.reuse_stage(previous) - (previous / "staging.json").write_text(json.dumps({"files": [{"staged": str(image), "bytes": 5}]})) - assert trial.reuse_stage(previous)[0] == staged - image.write_bytes(b"truncated") - with pytest.raises(RuntimeError, match="manifest"): - trial.reuse_stage(previous) - - -def test_index_staging_preserves_only_test_rows_and_labels(tmp_path): - source = tmp_path / "source" - source.mkdir() - for name in ("a.jpg", "b.jpg"): - (source / name).write_bytes(name.encode()) - index = source / "data_index.json" - index.write_text( - json.dumps( - { - "path": ["missing-train.jpg", "b.jpg", "missing-val.jpg", "a.jpg"], - "split": ["train", "test", "validation", "test"], - "label": [[1, 2], [999, 3], [4, 5], [888, 6]], - "class": [[0, 0], [-1, 1], [2, 2], [-1, 3]], - } - ) - ) - output = tmp_path / "output" - output.mkdir() - destination = tmp_path / "staged" - trial.stage(source, destination, output, 1, 1024, 2, index) - staged = json.loads((output / "staged-index.json").read_text()) - assert staged["split"] == ["test", "test"] - assert staged["label"] == [[999, 3], [888, 6]] - assert staged["class"] == [[-1, 1], [-1, 3]] - assert [Path(p).read_bytes() for p in staged["path"]] == [b"b.jpg", b"a.jpg"] - assert json.loads((output / "staging.json").read_text())["scope"] == "supplied_test_split" - - -def test_index_rejects_inconsistent_columns(tmp_path): - index = tmp_path / "index.json" - index.write_text(json.dumps({"path": ["a.jpg"], "split": [], "label": [1]})) - with pytest.raises(ValueError, match="lengths"): - trial.test_rows(index) diff --git a/tests/benchmarks/test_ucloud_comparison.py b/tests/benchmarks/test_ucloud_comparison.py index 10bc5d1..0aca648 100644 --- a/tests/benchmarks/test_ucloud_comparison.py +++ b/tests/benchmarks/test_ucloud_comparison.py @@ -47,31 +47,6 @@ def test_launch_topology_and_paired_plan(harness, config, int8_variant): compare.validate(config) -def test_combined_int8_plan_isolates_each_added_option(harness): - compare, _ = harness - source = Path(__file__).resolve().parents[2] / "dev" / "ucloud" / "combined-int8.json" - config = compare.validate(json.loads(source.read_text())) - runs = compare.plan(config) - assert [run["name"] for run in runs] == [ - f"{variant}_seed42" - for variant in ( - "quant_eager", - "master_eager", - "quant_compile_model", - "quant_compile_both", - "quant_float_combined", - "quant_int8_combined", - ) - ] - assert runs[3]["options"] == {**runs[2]["options"], "compile_optimizer": True} - assert runs[4]["options"] == {**runs[3]["options"], "cuda_prefetch": True} - assert runs[5]["options"] == {**runs[4]["options"], "quantized_training": True} - assert all(run["branch"] == "quant" for run in runs[2:]) - assert compare.uses_quantized_training(config) - config["variants"].remove("quant_int8_combined") - assert not compare.uses_quantized_training(config) - - @pytest.mark.parametrize("variant", ["quant_compile_both", "quant_float_combined", "quant_int8_combined"]) def test_combined_worker_routes_training_and_loader_options(harness, config, monkeypatch, variant): import torch @@ -737,17 +712,6 @@ def test_scaling_workers_warm_steps_and_separate_storage(harness, tmp_path): scaling.trial(base, tmp_path / "invalid.json", tmp_path / "invalid", 64, 3, workers=-1) -def test_timing_windows_survive_completed_chunks(harness): - _, worker = harness - saved, synchronized = [], [] - loader = worker.TimedLoader([([1, 2], [0, 1])] * 35, synchronize=lambda: synchronized.append(True), on_window=saved.append) - assert len(list(loader)) == 35 - assert [w["steps"] for w in saved] == [32, 3] - assert [w["samples"] for w in saved] == [64, 6] - assert len(synchronized) == 2 - assert sum(w["loader_wait_seconds"] for w in saved) <= loader.wait_seconds - - def test_torchrun_parser_preserves_worker_run_argument(harness, config): from torch.distributed.run import parse_args diff --git a/tests/releases/test_prefetch.py b/tests/releases/test_prefetch.py deleted file mode 100644 index aa57ff9..0000000 --- a/tests/releases/test_prefetch.py +++ /dev/null @@ -1,77 +0,0 @@ -"""Verify ordered, bounded overlap preserves the original pixels and TTA aggregation.""" - -import hashlib -import threading - -import numpy as np -import pytest -from PIL import Image - -from deployment.mambo_deploy.augmentation import infer_augmented, infer_prepared, resolve_tta -from deployment.mambo_deploy.preprocessing import preprocess -from dev.releases.mambo_v3 import prefetch - - -@pytest.mark.parametrize("recipe", ["none", "rotation30_pad25_3"]) -def test_prepared_views_and_results_are_identical(tmp_path, recipe): - records = [] - for i in range(3): - path = tmp_path / f"{i}.png" - Image.fromarray(np.random.default_rng(i).integers(0, 256, (31, 47, 3), dtype=np.uint8)).save(path) - records.append({"path": path.name, "sha256": hashlib.sha256(path.read_bytes()).hexdigest()}) - paths = [tmp_path / r["path"] for r in records] - tta = resolve_tta(recipe) - - def runtime(images, embeddings): - values = images.mean(axis=(2, 3)) - return values, values.copy() if embeddings else None - - batches = list(prefetch.prepared_batches(records, tmp_path, 3, 2, 2, tta)) - views = batches[0][2] - if tta is None: - np.testing.assert_array_equal(views[0], np.stack([preprocess(path) for path in paths])) - else: - expected = infer_augmented(runtime, paths, tta, True) - observed = infer_prepared(runtime, views, len(views), True) - for a, b in zip(expected, observed, strict=True): - np.testing.assert_array_equal(a, b) - - -def test_corrupt_image_fails_before_decode(tmp_path): - (tmp_path / "bad").write_bytes(b"wrong bytes") - records = [{"path": "bad", "sha256": "0" * 64}] - with pytest.raises(ValueError, match="Image bytes changed"): - list(prefetch.prepared_batches(records, tmp_path, 1, 2, 2)) - - -def test_prefetch_is_bounded_and_advances_while_consumer_is_busy(monkeypatch, tmp_path): - prepared = [] - third = threading.Event() - - def prepare(record, root, tta): - prepared.append(record) - if record == 2: - third.set() - return (np.full((1,), record),) - - monkeypatch.setattr(prefetch, "prepare_record", prepare) - batches = prefetch.prepared_batches(list(range(20)), tmp_path, 1, 1, 2) - assert next(batches)[0] == 0 - assert third.wait(timeout=2), "Producer should advance while consumer holds the first batch" - assert prepared == [0, 1, 2] # current batch + two ahead; not the entire request - assert next(batches)[0] == 1 - batches.close() - - -def test_unprefetched_mode_remains_lazy(monkeypatch, tmp_path): - prepared = [] - - def prepare(record, root, tta): - prepared.append(record) - return (np.full((1,), record),) - - monkeypatch.setattr(prefetch, "prepare_record", prepare) - batches = prefetch.prepared_batches(list(range(5)), tmp_path, 1, 0, 0) - assert next(batches)[0] == 0 - assert prepared == [0] - batches.close() diff --git a/tests/releases/test_speed_smoke.py b/tests/releases/test_speed_smoke.py index 337c1bd..7301453 100644 --- a/tests/releases/test_speed_smoke.py +++ b/tests/releases/test_speed_smoke.py @@ -86,7 +86,6 @@ def install(command, **kwargs): assert interpreter.is_relative_to(tmp_path) assert str(interpreter) != speed_smoke.sys.executable assert calls[-1][calls[-1].index("--python") + 1] == str(interpreter) - assert "onnxruntime-gpu[cuda,cudnn]==1.22.0" in calls[-1] calls.clear() assert speed_smoke.prepare_onnx_runtime() == interpreter assert all(c[1:3] == ["pip", "install"] for c in calls) diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 98fd572..633a1fe 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -13,7 +13,6 @@ def test_quality_plan_preserves_global_population_and_legacy_isolation(): config = configuration(CONFIG.resolve()) plan = jobs(config, "qualification") - assert len(plan) == 5 for job in plan: command = job["command"] assert command[command.index("--presets") + 1] == "full" @@ -30,13 +29,12 @@ def test_benchmark_bank_and_trials_match_across_backends(): config = configuration(CONFIG.resolve()) config["gpu_batches"] = [1, 8, 32, 64] plan = jobs(config, "benchmark") - assert len(plan) == 30 and len({j["name"] for j in plan}) == 30 + assert plan and len({j["name"] for j in plan}) == len(plan) for j in plan: c = j["command"] assert c[c.index("--bank-size") + 1] == "64" if j["legacy"] and j["device"] == "cpu": assert "--cpu-float32" in c - assert plan[0]["variant"] == "v2" and plan[10]["variant"] == "onnx-tta" def test_configuration_rejects_regional_only_quality(tmp_path): From 1bb7960229e6f20597e7b11b2d0e348fb936e2d7 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:30:45 +0200 Subject: [PATCH 107/221] agent: require concise high-value records and durable tests --- .agents/README.md | 5 +++++ .agents/rules/code-contribution.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.agents/README.md b/.agents/README.md index 43de88f..e432ca8 100644 --- a/.agents/README.md +++ b/.agents/README.md @@ -49,6 +49,11 @@ from file paths, independently of the message prefix. See ## Maintenance +Keep tracked explanations and evidence only when they are highly useful for a +current decision, maintained workflow or likely future development. Uniqueness +alone is not a reason to retain a finding. Condense superseded investigations to +their consequential conclusion and provenance; use Git for the detailed history. + Keep one maintained home for each contract, procedure, result and backlog item. Update that section when evidence changes instead of appending another dated fix or campaign recap. Link from indexes rather than copying explanations or tables. diff --git a/.agents/rules/code-contribution.md b/.agents/rules/code-contribution.md index c0055dd..5af2658 100644 --- a/.agents/rules/code-contribution.md +++ b/.agents/rules/code-contribution.md @@ -52,6 +52,11 @@ observable outputs, errors and ownership/lifetime guarantees to source-text chec or assertions that repeat configuration literals. Keep performance guards only when they detect a documented cost mechanism without machine-specific timing. +Retire tests for retired tools and assertions that merely freeze transient +experiment matrices, private helper structure or mutable presentation. An +elaborate fixture is justified by the failure it detects, not by existing coverage +alone. Do not preserve obsolete behavior just to preserve its tests. + When consolidating, preserve distinct regression cases, skip/xfail meaning and checkpoint/spawn fixture identities. Fewer lines or cases are secondary to simpler coverage with the same fault detection. Do not add a generic fixture framework or From 54a0a17f3ef49c8c98f6702ee695b3175528a59e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:47:28 +0200 Subject: [PATCH 108/221] agent: add content-reviewed repository reduction workflow --- .../skills/mini-trainer-maintenance/SKILL.md | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.agents/skills/mini-trainer-maintenance/SKILL.md b/.agents/skills/mini-trainer-maintenance/SKILL.md index eeb018c..94d1b10 100644 --- a/.agents/skills/mini-trainer-maintenance/SKILL.md +++ b/.agents/skills/mini-trainer-maintenance/SKILL.md @@ -1,6 +1,6 @@ --- name: mini-trainer-maintenance -description: Maintain mini_trainer with compatibility-focused code inspection, installed-package validation, and checkpoint regression checks. Use for repository refactors, packaging, CI, and training-state maintenance. +description: Maintain mini_trainer through repository cleanup, compatibility-focused refactoring, packaging, CI, and training-state validation. --- # mini_trainer maintenance @@ -9,6 +9,35 @@ Read the root [AGENTS.md](../../../AGENTS.md) and select the affected contracts Use the shared commands in [dev/README.md](../../../dev/README.md); do not copy their implementation into a new harness or implicitly sync the working environment. +## Repository reduction campaigns + +Use this mode for repository-wide cleanup, not every small code change. Follow +[retention guidance](../../README.md#maintenance) and +[test guidance](../../rules/code-contribution.md#keeping-tests-useful). + +- Start from tracked content and the user's content groups. Preserve a fixed + revision, per-file character counts (including whitespace), exclusions and + classification rules; apply identical rules to baseline and current content. + Distinguish prose/source from generated evidence, figures, locks and outputs. +- Build a hierarchical map with short evidence-backed assessments of navigation, + responsibility boundaries, signal-to-detail ratio and ongoing maintenance value. + Use a coarse 1–5 scale: 1 obstructive, 2 substantial cleanup, 3 mixed, + 4 clear with minor issues, 5 lean and sufficient. Mark unreviewed areas; + character counts and passing tests do not establish quality. Read the actual + content and relevant consumers before scoring it or calling it a reduction + target; inventories and filenames only identify where to inspect next. +- Select the highest-value bounded campaign from that map. Check consumers, + generators, public contracts and provenance before retiring content. Prefer + consolidation or removal over a new abstraction or archive of the same clutter. +- After each campaign, validate affected contracts, recount by the same groups + and reassess the hierarchy, including newly exposed targets. Record remaining + work explicitly; a successful bounded campaign is not repository-wide completion. + +Keep detailed inventories, score rationales and campaign snapshots in ignored +`.agents/local/`. Track only reusable guidance and concise navigation that helps +contributors. Reduction is an auxiliary measure; preserve useful coverage and +reproducibility, and do not count minification or relocation as simplification. + ## Choose checks by boundary - Packaging or optional dependencies: `bash dev/check-wheel.sh` builds and installs From 96c8f3cf65bac6ce79cad1b0ea5d5fcb28596cde Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:47:29 +0200 Subject: [PATCH 109/221] docs: retain notebook illustrations without saved run logs --- examples/blair.ipynb | 7063 +----------------------------------------- examples/mnist.ipynb | 358 +-- 2 files changed, 26 insertions(+), 7395 deletions(-) diff --git a/examples/blair.ipynb b/examples/blair.ipynb index 9f2862e..48b2ad4 100644 --- a/examples/blair.ipynb +++ b/examples/blair.ipynb @@ -6,6617 +6,17 @@ "metadata": {}, "source": [ "### Example from \"A gentle introduction to computer vision-based specimen classification in ecological datasets\" by Jarret Blair\n", - "Based on data from: https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/tree/main" + "Based on data from: https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/tree/main", + "\n", + "Saved plots illustrate the example output; they are not current performance benchmarks.\n" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "662b24f3", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "--2026-01-16 19:45:39-- https://github.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/raw/refs/heads/main/Data/Images.zip\n", - "Resolving github.com (github.com)... 140.82.121.3\n", - "Connecting to github.com (github.com)|140.82.121.3|:443... connected.\n", - "HTTP request sent, awaiting response... 302 Found\n", - "Location: https://raw.githubusercontent.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/refs/heads/main/Data/Images.zip [following]\n", - "--2026-01-16 19:45:39-- https://raw.githubusercontent.com/Jarrett-Blair/Intro-to-CV-for-Ecologists/refs/heads/main/Data/Images.zip\n", - "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", - "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 32191966 (31M) [application/zip]\n", - "Saving to: ‘Images.zip’\n", - "\n", - "Images.zip 100%[===================>] 30.70M 55.7MB/s in 0.6s \n", - "\n", - "2026-01-16 19:45:41 (55.7 MB/s) - ‘Images.zip’ saved [32191966/32191966]\n", - "\n", - "Archive: Images.zip\n", - " creating: Images/testing/\n", - " creating: Images/testing/Brachinus alternans/\n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesDELA_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_05_DORSAL.4.jpg \n", - " inflating: Images/testing/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.4.jpg \n", - " creating: Images/testing/Brachinus cyanochroaticus/\n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.16.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.18.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.33.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.43.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.16.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.18.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.33.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.43.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.19.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.34.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.19.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.34.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.2.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.4.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.2.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.4.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.27.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.27.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.12.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.15.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.12.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.15.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_09_DORSAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_09_VENTRAL.9.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_14_DORSAL.5.jpg \n", - " inflating: Images/testing/Brachinus cyanochroaticus/JPGImagesWOOD_14_VENTRAL.5.jpg \n", - " creating: Images/testing/Calathus advena/\n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.27.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_DORSAL.39.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_01_VENTRAL.39.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.21.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.21.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Calathus advena/JPGImagesNIWO_03_VENTRAL.9.jpg \n", - " creating: Images/testing/Carabus maeander maeander/\n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.49.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.50.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.49.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.50.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.35.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.40.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.35.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.40.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.2.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.4.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.1.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.2.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.4.jpg \n", - " inflating: Images/testing/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.9.jpg \n", - " creating: Images/testing/Carabus nemoralis nemoralis/\n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.6.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.6.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.27.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.27.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.15.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.15.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.41.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.41.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.29.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.10.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.29.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.34.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.42.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.43.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.48.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.50.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.55.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.56.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.21.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.33.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.34.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.42.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.43.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.48.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.5.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.50.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.55.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.56.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.11.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.17.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.19.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.37.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.40.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.45.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.8.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.11.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.17.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.19.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.22.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.23.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.28.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.3.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.30.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.31.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.37.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.40.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.45.jpg \n", - " inflating: Images/testing/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.8.jpg \n", - " creating: Images/testing/Chlaenius aestivus/\n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.5.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.8.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.9.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.5.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.8.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.9.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.11.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.13.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.31.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.11.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.13.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.31.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.1.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.1.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.24.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.28.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.24.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.28.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.14.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.17.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.19.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.19.jpg \n", - " inflating: Images/testing/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.2.jpg \n", - " creating: Images/testing/Cicindela punctulata/\n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.31.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.31.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.41.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.48.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.53.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.57.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.60.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.35.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.36.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.48.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.53.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.57.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.60.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.9.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.11.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.17.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.19.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.38.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.40.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.50.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.56.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.65.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.83.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.87.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.88.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.17.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.37.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.38.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.40.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.50.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.51.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.56.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.59.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.65.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.83.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.87.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.88.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.26.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.3.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.2.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.26.jpg \n", - " inflating: Images/testing/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.3.jpg \n", - " creating: Images/testing/Cyclotrachelus furtivus/\n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.44.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.48.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.5.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.44.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.48.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.5.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.32.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.32.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.34.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.34.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.9.jpg \n", - " inflating: Images/testing/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.9.jpg \n", - " creating: Images/testing/Cyclotrachelus torvus/\n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.27.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.29.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.30.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.33.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.39.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.40.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.19.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.27.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.29.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.30.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.33.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.39.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.40.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.28.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.10.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.22.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.28.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.17.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.12.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.17.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.7.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.11.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.13.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.20.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.21.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.4.jpg \n", - " inflating: Images/testing/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.6.jpg \n", - " creating: Images/testing/Discoderus parallelus/\n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.15.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_DORSAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.15.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.1.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.10.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.102.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.104.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.116.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.121.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.123.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.133.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.136.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.143.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.146.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.150.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.152.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.157.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.158.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.173.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.174.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.180.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.182.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.183.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.184.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.185.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.186.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.190.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.194.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.199.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.203.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.211.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.24.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.26.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.45.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.51.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.59.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.71.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.78.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.80.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.85.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.89.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.90.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.94.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_DORSAL.98.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.1.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.10.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.102.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.104.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.11.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.116.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.121.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.123.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.133.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.136.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.143.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.146.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.150.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.152.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.157.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.158.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.173.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.174.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.180.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.182.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.183.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.184.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.185.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.186.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.190.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.194.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.199.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.203.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.211.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.24.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.26.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.35.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.45.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.51.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.59.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.71.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.78.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.80.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.85.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.89.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.90.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.94.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.98.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.21.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.16.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.2.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.21.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.3.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.29.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_DORSAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.23.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.29.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.30.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_08_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus parallelus/JPGImagesCPER_08_VENTRAL.14.jpg \n", - " creating: Images/testing/Discoderus robustus/\n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.19.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.22.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.25.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.17.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.17.jpg \n", - " inflating: Images/testing/Discoderus robustus/JPGImagesSRER_02_VENTRAL.3.jpg \n", - " creating: Images/testing/Euryderus grossus/\n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.20.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.21.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.27.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.30.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.34.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.35.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.37.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.39.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.53.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.58.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.60.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.67.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.68.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_DORSAL.70.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.20.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.30.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.34.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.35.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.39.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.53.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.58.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.60.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.67.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.68.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_01_VENTRAL.70.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_07_DORSAL.19.jpg \n", - " inflating: Images/testing/Euryderus grossus/JPGImagesCPER_07_VENTRAL.19.jpg \n", - " creating: Images/testing/Pasimachus californicus/\n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.16.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.2.jpg \n", - " creating: Images/testing/Pasimachus elongatus/\n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.46.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.47.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.46.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.47.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.18.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.29.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.31.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.29.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.31.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesNOGP_03_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus elongatus/JPGImagesNOGP_03_VENTRAL.15.jpg \n", - " creating: Images/testing/Pasimachus strenuus/\n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.2.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.7.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.8.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_07_DORSAL.12.jpg \n", - " inflating: Images/testing/Pasimachus strenuus/JPGImagesOSBS_07_VENTRAL.12.jpg \n", - " creating: Images/testing/Pasimachus subsulcatus/\n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.13.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.15.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.3.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.6.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.6.jpg \n", - " creating: Images/testing/Patrobus lecontei/\n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.29.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.3.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.35.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.37.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.29.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.3.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.35.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.37.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.20.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.23.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.20.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.23.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.21.jpg \n", - " inflating: Images/testing/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.21.jpg \n", - " creating: Images/testing/Poecilus lucublandus/\n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.20.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.25.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.20.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.25.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_11_DORSAL.1.jpg \n", - " inflating: Images/testing/Poecilus lucublandus/JPGImagesWOOD_11_VENTRAL.1.jpg \n", - " creating: Images/testing/Pterostichus corvinus/\n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.40.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.44.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.54.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.59.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.62.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.64.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.66.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.68.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.69.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.40.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.44.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.54.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.59.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.62.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.64.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.66.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.68.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.69.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.27.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.41.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.49.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.27.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.41.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.49.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.12.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.15.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.22.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.25.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.26.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.32.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.43.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.22.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.26.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.32.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.43.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.2.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.11.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.20.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.11.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.20.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_13_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus corvinus/JPGImagesWOOD_13_VENTRAL.7.jpg \n", - " creating: Images/testing/Pterostichus melanarius melanarius/\n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.25.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.36.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.52.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.36.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.52.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.47.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.49.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.42.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.47.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.49.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.45.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.32.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.34.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.32.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.34.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.12.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.12.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_06_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesUNDE_06_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.55.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.57.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.58.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.55.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.57.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.58.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_05_DORSAL.41.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_05_VENTRAL.41.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.10.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.15.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.26.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.44.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.15.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.23.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.26.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.44.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.48.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.17.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.3.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.6.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.4.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.6.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_14_DORSAL.29.jpg \n", - " inflating: Images/testing/Pterostichus melanarius melanarius/JPGImagesWOOD_14_VENTRAL.29.jpg \n", - " creating: Images/testing/Pterostichus novus/\n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.16.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.27.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.31.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.34.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.13.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.19.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.5.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_DORSAL.9.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.13.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.19.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.5.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.9.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.1.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.35.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.1.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.35.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_DORSAL.7.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_DORSAL.8.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.7.jpg \n", - " inflating: Images/testing/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.8.jpg \n", - " creating: Images/testing/Pterostichus stygicus/\n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.28.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.28.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.33.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.38.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.33.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.38.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.10.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.10.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.14.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.18.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.20.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.14.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.18.jpg \n", - " inflating: Images/testing/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.20.jpg \n", - " creating: Images/testing/Scarites subterraneus/\n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.10.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.2.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.20.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.22.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.23.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.25.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.3.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.4.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.7.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.8.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_DORSAL.9.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.10.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.2.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.20.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.23.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.25.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.3.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.4.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.7.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.8.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.9.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_05_DORSAL.14.jpg \n", - " inflating: Images/testing/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.14.jpg \n", - " creating: Images/testing/Selenophorus planipennis/\n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.10.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.23.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.24.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.26.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.27.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.3.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.6.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.9.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.10.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.23.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.24.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.26.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.27.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.3.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.6.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.9.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.66.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.66.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.14.jpg \n", - " inflating: Images/testing/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.14.jpg \n", - " creating: Images/testing/Synuchus impunctatus/\n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.13.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.19.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.21.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.22.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.42.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.27.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.31.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.54.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.55.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.56.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.64.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.27.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.31.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.54.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.55.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.56.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.64.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.29.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.10.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.10.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.8.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.8.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.12.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.32.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.37.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.38.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.12.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.32.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.37.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.38.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.14.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.39.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.40.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.7.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.9.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.11.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.14.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.39.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.40.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.5.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.6.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.7.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.9.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.17.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.16.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.16.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.24.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.2.jpg \n", - " inflating: Images/testing/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.2.jpg \n", - " creating: Images/training/\n", - " creating: Images/training/Brachinus alternans/\n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesDELA_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus alternans/JPGImagesUKFS_06_VENTRAL.9.jpg \n", - " creating: Images/training/Brachinus cyanochroaticus/\n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.19.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.34.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.38.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.39.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.40.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.41.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.42.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.44.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_DORSAL.45.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_DORSAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_06_VENTRAL.36.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_DORSAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.13.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_09_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_DORSAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.10.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.11.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_13_VENTRAL.6.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_14_DORSAL.3.jpg \n", - " inflating: Images/training/Brachinus cyanochroaticus/JPGImagesWOOD_14_VENTRAL.3.jpg \n", - " creating: Images/training/Calathus advena/\n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.26.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.28.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.29.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.31.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.32.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.33.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.34.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.36.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.37.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.38.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_DORSAL.40.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.16.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.1.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.2.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.4.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.5.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.6.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.7.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_DORSAL.8.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Calathus advena/JPGImagesNIWO_03_VENTRAL.8.jpg \n", - " creating: Images/training/Carabus maeander maeander/\n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_02_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.56.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.57.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.58.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_DORSAL.59.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_03_VENTRAL.59.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_DORSAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_05_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_08_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.37.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.43.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.45.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.49.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_DORSAL.50.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.37.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.43.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.45.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.48.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.49.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_10_VENTRAL.50.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus maeander maeander/JPGImagesWOOD_14_VENTRAL.8.jpg \n", - " creating: Images/training/Carabus nemoralis nemoralis/\n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesTREE_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_02_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_03_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_05_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.30.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.37.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.45.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.47.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.49.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.51.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.52.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.53.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.54.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.57.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.58.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.59.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.60.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.61.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.62.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.11.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.28.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.31.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.37.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.40.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.45.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.47.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.49.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.51.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.52.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.53.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.54.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.57.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.58.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.59.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.60.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.61.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.62.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.43.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_DORSAL.9.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.10.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.13.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.18.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.20.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.21.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.24.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.25.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.26.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.27.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.29.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.32.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.33.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.34.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.35.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.36.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.38.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.39.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.41.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.42.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.43.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.44.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.46.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.6.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Carabus nemoralis nemoralis/JPGImagesUNDE_08_VENTRAL.9.jpg \n", - " creating: Images/training/Chlaenius aestivus/\n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.38.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_DORSAL.39.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.41.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.41.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesBLAN_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesDELA_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSCBI_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_DORSAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.18.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_DORSAL.8.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.22.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.23.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.24.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Chlaenius aestivus/JPGImagesSERC_06_VENTRAL.8.jpg \n", - " creating: Images/training/Cicindela punctulata/\n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.51.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.44.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.56.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.57.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.60.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.66.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.67.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.68.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.69.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.70.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.71.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.72.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.73.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.74.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.75.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.76.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.77.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.78.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.79.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.80.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.81.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.82.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.84.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.85.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.86.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.89.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.90.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.91.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.92.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.93.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.94.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.95.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.96.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.97.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_DORSAL.98.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.43.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.49.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.55.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.57.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.58.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.60.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.61.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.62.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.63.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.64.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.66.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.67.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.68.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.69.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.70.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.71.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.72.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.73.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.74.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.75.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.76.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.77.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.78.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.79.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.80.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.81.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.82.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.84.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.85.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.86.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.89.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.90.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.91.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.92.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.93.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.94.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.95.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.96.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.97.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_04_VENTRAL.98.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_DORSAL.9.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Cicindela punctulata/JPGImagesMOAB_06_VENTRAL.9.jpg \n", - " creating: Images/training/Cyclotrachelus furtivus/\n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.39.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.40.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_05_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus furtivus/JPGImagesBLAN_06_VENTRAL.5.jpg \n", - " creating: Images/training/Cyclotrachelus torvus/\n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesKONZ_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.44.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.48.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.52.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.53.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.54.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.55.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.56.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.57.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.58.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.59.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.43.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.44.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.46.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.47.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.48.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.49.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.50.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.51.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.55.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.56.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.57.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.58.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.59.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.26.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.29.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_DORSAL.9.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.3.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Cyclotrachelus torvus/JPGImagesNOGP_07_VENTRAL.9.jpg \n", - " creating: Images/training/Discoderus parallelus/\n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.23.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.25.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.3.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.30.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.100.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.101.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.103.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.105.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.106.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.107.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.108.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.109.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.110.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.111.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.112.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.113.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.114.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.115.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.117.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.118.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.119.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.120.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.122.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.124.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.125.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.126.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.127.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.128.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.129.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.130.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.131.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.132.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.134.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.135.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.137.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.138.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.139.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.140.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.141.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.142.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.144.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.145.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.147.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.148.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.149.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.151.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.153.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.154.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.155.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.156.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.159.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.160.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.161.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.162.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.163.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.164.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.165.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.166.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.167.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.168.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.169.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.170.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.171.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.172.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.175.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.176.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.177.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.178.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.179.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.181.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.187.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.188.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.189.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.191.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.192.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.193.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.195.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.196.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.197.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.198.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.200.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.201.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.202.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.204.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.205.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.206.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.207.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.208.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.209.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.210.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.212.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.213.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.214.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.215.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.216.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.217.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.218.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.219.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.220.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.36.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.37.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.38.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.39.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.40.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.41.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.42.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.43.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.44.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.46.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.47.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.48.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.49.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.50.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.52.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.53.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.54.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.55.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.56.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.57.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.58.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.60.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.61.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.62.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.63.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.64.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.65.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.66.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.67.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.68.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.69.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.70.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.72.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.73.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.74.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.75.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.76.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.77.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.79.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.81.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.82.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.83.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.84.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.86.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.87.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.88.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.91.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.92.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.93.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.95.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.96.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.97.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_DORSAL.99.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.100.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.101.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.103.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.105.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.106.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.107.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.108.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.109.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.110.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.111.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.112.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.113.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.114.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.115.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.117.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.118.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.119.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.120.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.122.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.124.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.125.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.126.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.127.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.128.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.129.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.130.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.131.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.132.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.134.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.135.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.137.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.138.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.139.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.140.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.141.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.142.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.144.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.145.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.147.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.148.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.149.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.151.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.153.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.154.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.155.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.156.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.159.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.160.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.161.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.162.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.163.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.164.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.165.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.166.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.167.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.168.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.169.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.170.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.171.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.172.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.175.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.176.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.177.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.178.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.179.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.181.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.187.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.188.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.189.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.191.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.192.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.193.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.195.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.196.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.197.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.198.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.200.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.201.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.202.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.204.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.205.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.206.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.207.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.208.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.209.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.210.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.212.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.213.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.214.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.215.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.216.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.217.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.218.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.219.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.220.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.33.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.49.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.56.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.60.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.64.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.66.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.68.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.69.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.70.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.72.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.73.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.74.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.75.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.76.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.77.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.79.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.81.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.82.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.83.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.84.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.86.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.87.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.88.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.91.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.92.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.93.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.95.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.96.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.97.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_03_VENTRAL.99.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_07_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_08_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus parallelus/JPGImagesCPER_08_VENTRAL.13.jpg \n", - " creating: Images/training/Discoderus robustus/\n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.14.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.17.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.18.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.20.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.21.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.23.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.24.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.26.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.27.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.28.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.29.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.3.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.24.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.12.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.2.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.6.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.7.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.8.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_DORSAL.9.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Discoderus robustus/JPGImagesSRER_02_VENTRAL.9.jpg \n", - " creating: Images/training/Euryderus grossus/\n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.22.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.23.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.25.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.26.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.28.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.29.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.31.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.32.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.33.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.36.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.38.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.40.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.41.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.42.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.43.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.44.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.45.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.46.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.47.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.48.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.49.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.50.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.51.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.52.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.54.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.55.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.56.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.57.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.59.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.61.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.62.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.63.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.64.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.65.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.66.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_DORSAL.69.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.45.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.48.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.49.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.50.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.51.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.52.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.54.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.55.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.56.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.57.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.59.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.61.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.62.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.63.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.64.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.65.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.66.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_01_VENTRAL.69.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.20.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_DORSAL.21.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.16.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.17.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.18.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.20.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_07_VENTRAL.21.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_DORSAL.4.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_DORSAL.6.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_VENTRAL.4.jpg \n", - " inflating: Images/training/Euryderus grossus/JPGImagesCPER_10_VENTRAL.6.jpg \n", - " creating: Images/training/Pasimachus californicus/\n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_08_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesKONZ_09_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus californicus/JPGImagesOAES_04_VENTRAL.9.jpg \n", - " creating: Images/training/Pasimachus elongatus/\n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.36.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.39.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.40.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.42.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.44.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_DORSAL.45.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.39.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.22.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.27.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.28.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.30.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.32.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.33.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.34.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_DORSAL.35.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.27.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.30.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.32.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.33.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.34.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_06_VENTRAL.35.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_07_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_09_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_10_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesCPER_11_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_03_DORSAL.24.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_05_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_07_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_08_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesKONZ_09_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_07_DORSAL.26.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesNOGP_07_VENTRAL.26.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesUKFS_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus elongatus/JPGImagesUKFS_03_VENTRAL.8.jpg \n", - " creating: Images/training/Pasimachus strenuus/\n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_07_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus strenuus/JPGImagesOSBS_07_VENTRAL.13.jpg \n", - " creating: Images/training/Pasimachus subsulcatus/\n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.16.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_DORSAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_DORSAL.6.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_VENTRAL.11.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_DORSAL.5.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.1.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.2.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.4.jpg \n", - " inflating: Images/training/Pasimachus subsulcatus/JPGImagesOSBS_07_VENTRAL.5.jpg \n", - " creating: Images/training/Patrobus lecontei/\n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.1.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.2.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.24.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.25.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.26.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.27.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.28.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.30.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.31.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.32.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.33.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.34.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.36.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.38.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.39.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_DORSAL.40.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.25.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.26.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.27.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.31.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.32.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.33.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.34.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.36.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.38.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.39.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_05_VENTRAL.40.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.16.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.19.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_DORSAL.21.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_06_VENTRAL.21.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.22.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_DORSAL.29.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.22.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.23.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_07_VENTRAL.29.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_DORSAL.12.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_DORSAL.13.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_VENTRAL.12.jpg \n", - " inflating: Images/training/Patrobus lecontei/JPGImagesWOOD_14_VENTRAL.13.jpg \n", - " creating: Images/training/Poecilus lucublandus/\n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_DORSAL.7.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_DORSAL.2.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_DORSAL.3.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesNOGP_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.8.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_DORSAL.9.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_DORSAL.6.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesSCBI_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_DORSAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_DORSAL.25.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_VENTRAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_07_VENTRAL.25.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.18.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_DORSAL.19.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.14.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.18.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_08_VENTRAL.19.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.21.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.22.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.23.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.26.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_DORSAL.27.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.21.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.22.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.23.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.24.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.26.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_10_VENTRAL.27.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_DORSAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.13.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_12_VENTRAL.17.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_14_DORSAL.11.jpg \n", - " inflating: Images/training/Poecilus lucublandus/JPGImagesWOOD_14_VENTRAL.11.jpg \n", - " creating: Images/training/Pterostichus corvinus/\n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.57.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.58.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.60.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.61.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.63.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.65.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.67.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.70.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.71.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.72.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_DORSAL.73.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.57.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.58.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.60.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.61.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.63.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.65.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.67.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.70.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.71.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.72.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_02_VENTRAL.73.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_03_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_06_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_07_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_10_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_13_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus corvinus/JPGImagesWOOD_13_VENTRAL.2.jpg \n", - " creating: Images/training/Pterostichus melanarius melanarius/\n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_01_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.55.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.57.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.60.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.61.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.62.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.55.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.57.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.60.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.61.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.62.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_DORSAL.48.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.44.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_03_VENTRAL.48.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesSTEI_04_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_01_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_02_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_04_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesUNDE_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_01_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_DORSAL.59.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.56.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_04_VENTRAL.59.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_05_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_05_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_08_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_DORSAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.34.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.42.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.43.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.45.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.46.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.47.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.49.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.50.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.51.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.52.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.53.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_09_VENTRAL.54.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_10_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_11_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_12_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_14_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus melanarius melanarius/JPGImagesWOOD_14_VENTRAL.26.jpg \n", - " creating: Images/training/Pterostichus novus/\n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_01_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.59.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.63.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.64.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_DORSAL.65.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.59.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.63.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.64.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_02_VENTRAL.65.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.66.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.67.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.66.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_03_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.41.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.38.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.41.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus novus/JPGImagesSTEI_05_VENTRAL.9.jpg \n", - " creating: Images/training/Pterostichus stygicus/\n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.14.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.18.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.20.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.21.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.22.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.23.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.24.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.25.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.26.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.27.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.14.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.18.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.23.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.24.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.25.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.26.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.27.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.28.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.29.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.30.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.31.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.32.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.36.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.37.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.39.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_DORSAL.40.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.28.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.29.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.30.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.31.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.32.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.36.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.37.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.39.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesBLAN_05_VENTRAL.40.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.1.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.2.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.3.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.4.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.5.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.6.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.7.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.6.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.11.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_DORSAL.19.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.11.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.13.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.15.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.17.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.10.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_DORSAL.9.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.10.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.12.jpg \n", - " inflating: Images/training/Pterostichus stygicus/JPGImagesSERC_06_VENTRAL.9.jpg \n", - " creating: Images/training/Scarites subterraneus/\n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.1.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.18.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.19.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.21.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.26.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.27.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.28.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.29.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.30.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.5.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_DORSAL.6.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.5.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.10.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.7.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.8.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_DORSAL.9.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.12.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.13.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.15.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Scarites subterraneus/JPGImagesSERC_05_VENTRAL.9.jpg \n", - " creating: Images/training/Selenophorus planipennis/\n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.1.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.2.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.3.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.4.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.6.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_DORSAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.2.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_05_VENTRAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_DORSAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_DORSAL.26.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_VENTRAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_06_VENTRAL.26.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.10.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_08_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_10_DORSAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_10_VENTRAL.9.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.14.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.21.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.22.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.28.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_DORSAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.11.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.12.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.14.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.21.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.22.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.25.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.28.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.5.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.7.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesCPER_11_VENTRAL.8.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.43.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.44.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.45.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.46.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.47.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.48.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.49.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.50.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.51.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.52.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_DORSAL.53.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.43.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.44.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.45.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.46.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.47.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.48.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.49.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.50.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.51.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.52.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_02_VENTRAL.53.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.65.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_DORSAL.67.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_03_VENTRAL.67.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_DORSAL.24.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.13.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.15.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.16.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.17.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.18.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.19.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.20.jpg \n", - " inflating: Images/training/Selenophorus planipennis/JPGImagesMOAB_06_VENTRAL.24.jpg \n", - " creating: Images/training/Synuchus impunctatus/\n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.41.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_02_DORSAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_02_VENTRAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.51.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.53.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.57.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.59.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.60.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.61.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.62.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.63.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_DORSAL.65.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.51.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.53.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.57.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.58.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.59.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.60.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.61.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.62.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.63.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_03_VENTRAL.65.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.32.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.32.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_04_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesSTEI_05_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_01_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_02_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.7.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_03_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesTREE_04_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.35.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.36.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.39.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.42.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_DORSAL.44.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.26.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.27.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.30.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.33.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.35.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.36.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.39.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.42.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.43.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_01_VENTRAL.44.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_DORSAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_02_VENTRAL.8.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_DORSAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.1.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.2.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.24.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.4.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_03_VENTRAL.6.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_DORSAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.10.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.11.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.12.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.13.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.14.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.15.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.20.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.21.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.22.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.23.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.25.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_04_VENTRAL.9.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_DORSAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.16.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.17.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.18.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.19.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.3.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesUNDE_05_VENTRAL.5.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_DORSAL.34.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.28.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.29.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.31.jpg \n", - " inflating: Images/training/Synuchus impunctatus/JPGImagesWOOD_06_VENTRAL.34.jpg \n", - " creating: Images/zero/\n", - " creating: Images/zero/Agonoleptus conjunctus/\n", - " inflating: Images/zero/Agonoleptus conjunctus/JPGImagesWOOD_12_DORSAL.16.jpg \n", - " inflating: Images/zero/Agonoleptus conjunctus/JPGImagesWOOD_12_VENTRAL.16.jpg \n", - " creating: Images/zero/Agonum gratiosum/\n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.11.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.12.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.13.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.14.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_DORSAL.37.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.11.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.12.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.13.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.14.jpg \n", - " inflating: Images/zero/Agonum gratiosum/JPGImagesWOOD_06_VENTRAL.37.jpg \n", - " creating: Images/zero/Anisodactylus harrisii/\n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.1.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.3.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.4.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_DORSAL.9.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.1.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.3.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.4.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_13_VENTRAL.9.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_DORSAL.27.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_DORSAL.28.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_VENTRAL.27.jpg \n", - " inflating: Images/zero/Anisodactylus harrisii/JPGImagesWOOD_14_VENTRAL.28.jpg \n", - " creating: Images/zero/Anisodactylus nigrita/\n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_DORSAL.21.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_DORSAL.22.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_VENTRAL.21.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_03_VENTRAL.22.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_DORSAL.12.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_DORSAL.13.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_VENTRAL.12.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_13_VENTRAL.13.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.17.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.18.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_DORSAL.19.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.17.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.18.jpg \n", - " inflating: Images/zero/Anisodactylus nigrita/JPGImagesWOOD_14_VENTRAL.19.jpg \n", - " creating: Images/zero/Bembidion quadrimaculatum oppositum/\n", - " inflating: Images/zero/Bembidion quadrimaculatum oppositum/JPGImagesWOOD_13_DORSAL.8.jpg \n", - " inflating: Images/zero/Bembidion quadrimaculatum oppositum/JPGImagesWOOD_13_VENTRAL.8.jpg \n", - " creating: Images/zero/Bembidion Semicampa indet/\n", - " inflating: Images/zero/Bembidion Semicampa indet/JPGImagesTREE_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Bembidion Semicampa indet/JPGImagesTREE_03_VENTRAL.2.jpg \n", - " creating: Images/zero/Carabidae sp/\n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.25.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.25.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_02_VENTRAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.35.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.36.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.37.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.38.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_DORSAL.39.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.26.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.27.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.28.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.29.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.30.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.31.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.32.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.33.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.34.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.35.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.36.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.37.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.38.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_03_VENTRAL.39.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.16.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.17.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.18.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.19.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.20.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.16.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.17.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.18.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.19.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.20.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabidae sp/JPGImagesNIWO_04_VENTRAL.9.jpg \n", - " creating: Images/zero/Carabus taedatus/\n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.10.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.11.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.12.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.13.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.14.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.15.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.16.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.17.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.18.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.19.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.2.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.20.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.10.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.11.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.12.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.13.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.14.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.15.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.16.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.17.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.18.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.19.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.2.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.20.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Carabus taedatus/JPGImagesNIWO_01_VENTRAL.9.jpg \n", - " creating: Images/zero/Chlaenius alternatus/\n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_13_DORSAL.5.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_13_VENTRAL.5.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.20.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.21.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.20.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.21.jpg \n", - " inflating: Images/zero/Chlaenius alternatus/JPGImagesWOOD_14_VENTRAL.22.jpg \n", - " creating: Images/zero/Chlaenius erythropus/\n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Chlaenius erythropus/JPGImagesDELA_03_VENTRAL.5.jpg \n", - " creating: Images/zero/Chlaenius platyderus/\n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Chlaenius platyderus/JPGImagesNOGP_06_VENTRAL.23.jpg \n", - " creating: Images/zero/Chlaenius tomentosus/\n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_DORSAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_DORSAL.15.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_VENTRAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_01_VENTRAL.15.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_DORSAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_02_VENTRAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.25.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_DORSAL.26.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.25.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_04_VENTRAL.26.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_DORSAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.23.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_06_VENTRAL.24.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.7.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.8.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_DORSAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.7.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.8.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_08_VENTRAL.9.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.13.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_DORSAL.3.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.13.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.14.jpg \n", - " inflating: Images/zero/Chlaenius tomentosus/JPGImagesCPER_10_VENTRAL.3.jpg \n", - " creating: Images/zero/Cratacanthus dubius/\n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.48.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.49.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_DORSAL.50.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.48.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.49.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_02_VENTRAL.50.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_07_DORSAL.22.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_07_VENTRAL.22.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_08_DORSAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_08_VENTRAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.13.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.14.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.15.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.16.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.17.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.18.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_DORSAL.19.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.12.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.13.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.16.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.17.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.18.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_09_VENTRAL.19.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.10.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.11.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_DORSAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.10.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.11.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_10_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_11_DORSAL.4.jpg \n", - " inflating: Images/zero/Cratacanthus dubius/JPGImagesCPER_11_VENTRAL.4.jpg \n", - " creating: Images/zero/Cyclotrachelus faber/\n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_VENTRAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus faber/JPGImagesOSBS_05_VENTRAL.9.jpg \n", - " creating: Images/zero/Cyclotrachelus fucatus/\n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.10.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.10.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Cyclotrachelus fucatus/JPGImagesORNL_01_VENTRAL.9.jpg \n", - " creating: Images/zero/Cyclotrachelus sodalis/\n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.14.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.15.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_DORSAL.16.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_04_VENTRAL.16.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_06_DORSAL.2.jpg \n", - " inflating: Images/zero/Cyclotrachelus sodalis/JPGImagesKONZ_06_VENTRAL.2.jpg \n", - " creating: Images/zero/Cymindis neglecta/\n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesNOGP_02_DORSAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesNOGP_02_VENTRAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_DORSAL.5.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_DORSAL.6.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_VENTRAL.5.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_11_VENTRAL.6.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_DORSAL.14.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_DORSAL.15.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_VENTRAL.14.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_13_VENTRAL.15.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.23.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_DORSAL.25.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.23.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.24.jpg \n", - " inflating: Images/zero/Cymindis neglecta/JPGImagesWOOD_14_VENTRAL.25.jpg \n", - " creating: Images/zero/Dicaelus furvus carinatus/\n", - " inflating: Images/zero/Dicaelus furvus carinatus/JPGImagesDELA_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Dicaelus furvus carinatus/JPGImagesDELA_04_VENTRAL.2.jpg \n", - " creating: Images/zero/Dicaelus purpuratus/\n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_DORSAL.5.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_01_VENTRAL.5.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_02_DORSAL.8.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_02_VENTRAL.8.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_07_DORSAL.1.jpg \n", - " inflating: Images/zero/Dicaelus purpuratus/JPGImagesUKFS_07_VENTRAL.1.jpg \n", - " creating: Images/zero/Dicaelus sculptilis/\n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_01_DORSAL.1.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_01_VENTRAL.1.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_04_DORSAL.13.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_04_VENTRAL.13.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_05_DORSAL.8.jpg \n", - " inflating: Images/zero/Dicaelus sculptilis/JPGImagesUKFS_05_VENTRAL.8.jpg \n", - " creating: Images/zero/Galerita bicolor/\n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.19.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.20.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_DORSAL.21.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.19.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.20.jpg \n", - " inflating: Images/zero/Galerita bicolor/JPGImagesSCBI_02_VENTRAL.21.jpg \n", - " creating: Images/zero/Harpalus pensylvanicus/\n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.15.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.17.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_DORSAL.18.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.15.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.17.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_05_VENTRAL.18.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_07_DORSAL.13.jpg \n", - " inflating: Images/zero/Harpalus pensylvanicus/JPGImagesKONZ_07_VENTRAL.13.jpg \n", - " creating: Images/zero/Loricera pilicornis pilicornis/\n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_DORSAL.40.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_DORSAL.41.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_VENTRAL.40.jpg \n", - " inflating: Images/zero/Loricera pilicornis pilicornis/JPGImagesUNDE_01_VENTRAL.41.jpg \n", - " creating: Images/zero/Loxandrus sculptilis/\n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_DORSAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_01_VENTRAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.7.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_DORSAL.8.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.6.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.7.jpg \n", - " inflating: Images/zero/Loxandrus sculptilis/JPGImagesUKFS_06_VENTRAL.8.jpg \n", - " creating: Images/zero/Oxypselaphus pusillus/\n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.5.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.6.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.7.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_DORSAL.8.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.5.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.6.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.7.jpg \n", - " inflating: Images/zero/Oxypselaphus pusillus/JPGImagesWOOD_09_VENTRAL.8.jpg \n", - " creating: Images/zero/Pasimachus marginatus/\n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.1.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.18.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.18.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_03_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_DORSAL.5.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_06_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.10.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.11.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.7.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.8.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_DORSAL.9.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pasimachus marginatus/JPGImagesOSBS_07_VENTRAL.9.jpg \n", - " creating: Images/zero/Pasimachus sublaevis/\n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.10.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.7.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.8.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_DORSAL.9.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_03_VENTRAL.9.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.2.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.5.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_DORSAL.6.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pasimachus sublaevis/JPGImagesOSBS_05_VENTRAL.6.jpg \n", - " creating: Images/zero/Piosoma setosum/\n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.54.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.55.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.56.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.57.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.58.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.59.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.60.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.61.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.62.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.63.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.64.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.65.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.66.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_DORSAL.67.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.54.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.55.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.56.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.57.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.58.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.59.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.60.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.61.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.62.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.63.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.64.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.65.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.66.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_01_VENTRAL.67.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.21.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.21.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Piosoma setosum/JPGImagesMOAB_06_VENTRAL.23.jpg \n", - " creating: Images/zero/Platynus decentis/\n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_04_DORSAL.22.jpg \n", - " inflating: Images/zero/Platynus decentis/JPGImagesSTEI_04_VENTRAL.22.jpg \n", - " creating: Images/zero/Poecilus chalcites/\n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.1.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.18.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.19.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.2.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.20.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.22.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.3.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.5.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_DORSAL.6.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.1.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.18.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.19.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.2.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.20.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.22.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.3.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.5.jpg \n", - " inflating: Images/zero/Poecilus chalcites/JPGImagesSERC_05_VENTRAL.6.jpg \n", - " creating: Images/zero/Pterostichus coracinus/\n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesSCBI_02_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesUNDE_05_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus coracinus/JPGImagesUNDE_05_VENTRAL.7.jpg \n", - " creating: Images/zero/Pterostichus femoralis/\n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_09_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_11_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_11_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_12_DORSAL.19.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_12_VENTRAL.19.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_DORSAL.17.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_DORSAL.18.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_VENTRAL.17.jpg \n", - " inflating: Images/zero/Pterostichus femoralis/JPGImagesWOOD_13_VENTRAL.18.jpg \n", - " creating: Images/zero/Pterostichus luctuosus/\n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_05_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_05_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.26.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.27.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_DORSAL.28.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.26.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.27.jpg \n", - " inflating: Images/zero/Pterostichus luctuosus/JPGImagesWOOD_07_VENTRAL.28.jpg \n", - " creating: Images/zero/Pterostichus pensylvanicus/\n", - " inflating: Images/zero/Pterostichus pensylvanicus/JPGImagesUNDE_04_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus pensylvanicus/JPGImagesUNDE_04_VENTRAL.1.jpg \n", - " creating: Images/zero/Pterostichus permundus/\n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.24.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.25.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.26.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_DORSAL.27.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.24.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.25.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.26.jpg \n", - " inflating: Images/zero/Pterostichus permundus/JPGImagesBLAN_05_VENTRAL.27.jpg \n", - " creating: Images/zero/Pterostichus sculptus/\n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_06_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_06_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_DORSAL.11.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_DORSAL.12.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_VENTRAL.11.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesKONZ_07_VENTRAL.12.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_01_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_01_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_03_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.10.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.8.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_DORSAL.9.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.10.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.5.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.8.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_04_VENTRAL.9.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.1.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.2.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_06_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_07_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus sculptus/JPGImagesUKFS_07_VENTRAL.6.jpg \n", - " creating: Images/zero/Pterostichus trinarius/\n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.18.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.19.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.20.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.21.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.22.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.23.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.3.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.6.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.7.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_DORSAL.8.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.18.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.19.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.20.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.21.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.22.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.23.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.3.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.6.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.7.jpg \n", - " inflating: Images/zero/Pterostichus trinarius/JPGImagesBLAN_06_VENTRAL.8.jpg \n", - " creating: Images/zero/Sphaeroderus stenostomus lecontei/\n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_01_VENTRAL.28.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_DORSAL.50.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_DORSAL.52.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_VENTRAL.50.jpg \n", - " inflating: Images/zero/Sphaeroderus stenostomus lecontei/JPGImagesSTEI_03_VENTRAL.52.jpg \n", - " creating: Images/zero/Syntomus americanus/\n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_DORSAL.8.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_DORSAL.9.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_VENTRAL.8.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_01_VENTRAL.9.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.1.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.2.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.27.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.28.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.29.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.1.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.2.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.27.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.28.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.29.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_02_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.5.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_DORSAL.6.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.5.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_03_VENTRAL.6.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_06_DORSAL.24.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesNOGP_06_VENTRAL.24.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_DORSAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_DORSAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_VENTRAL.3.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_01_VENTRAL.4.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.10.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.12.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.14.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.15.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_DORSAL.18.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.10.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.12.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.14.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.15.jpg \n", - " inflating: Images/zero/Syntomus americanus/JPGImagesWOOD_12_VENTRAL.18.jpg \n", - " creating: Images/zero/Tetracha virginica/\n", - " inflating: Images/zero/Tetracha virginica/JPGImagesKONZ_05_DORSAL.21.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesKONZ_05_VENTRAL.21.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.10.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_DORSAL.9.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.10.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_03_VENTRAL.9.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_DORSAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_DORSAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_VENTRAL.11.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_04_VENTRAL.12.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_DORSAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_DORSAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_VENTRAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_06_VENTRAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.2.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.3.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_DORSAL.5.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.2.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.3.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.4.jpg \n", - " inflating: Images/zero/Tetracha virginica/JPGImagesUKFS_07_VENTRAL.5.jpg \n" - ] - } - ], + "outputs": [], "source": [ "!python -m examples.blair.construct" ] @@ -6631,57 +31,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "319d4037", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'input': '/home/asger/Repositories/mini_trainer/examples/blair/train', 'output': '/home/asger/Repositories/mini_trainer/examples/blair', 'epochs': 5, 'size': 128, 'name': 'blair_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'spec_model_dataloader_kwargs': {'species': True, 'levels': 2}, 'model_builder_kwargs': {'model_type': 'efficientnet_v2_s', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True, 'cls': 'mini_trainer.hierarchical.model.HierarchicalClassifier'}, 'dataloader_builder_kwargs': {'batch_size': 32, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1, 'weights': [1.0, 1.0]}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}}\n", - "Building class spec...\n", - "Building dataloaders... \n", - "Building datasets with image size (128, 128)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "Dataloaders built successfully. Train batches: 130, Val batches: 8 \n", - "Building model...\n", - "Calling train() function...\n", - "Start training\n", - "train_one_epoch starting for epoch 0.\n", - "acc1= 30.4 | acc5= 64.0 | loss= 4.8 | item/s=315.7 | mem=969.7 | acc1/lvl1= 37.3 | acc5/lvl1= 79.2 | loss/lvl0= 2.82 | loss/lvl1= 1.98\n", - "train_one_epoch starting for epoch 1. \n", - "acc1= 32.8 | acc5= 76.5 | loss= 4.3 | item/s=351.0 | mem=969.0 | acc1/lvl1= 51.2 | acc5/lvl1= 90.6 | loss/lvl0= 2.54 | loss/lvl1= 1.79\n", - "train_one_epoch starting for epoch 2. \n", - "acc1= 51.1 | acc5= 86.7 | loss= 3.2 | item/s=355.0 | mem=969.7 | acc1/lvl1= 69.0 | acc5/lvl1= 99.2 | loss/lvl0= 2.04 | loss/lvl1= 1.21\n", - "train_one_epoch starting for epoch 3. \n", - "acc1= 63.9 | acc5= 97.3 | loss= 2.23 | item/s=361.9 | mem=970.9 | acc1/lvl1= 76.4 | acc5/lvl1= 99.2 | loss/lvl0= 1.40 | loss/lvl1=0.832\n", - "train_one_epoch starting for epoch 4. \n", - "acc1= 74.4 | acc5= 98.4 | loss= 1.89 | item/s=359.4 | mem=969.7 | acc1/lvl1= 86.5 | acc5/lvl1= 99.2 | loss/lvl0= 1.22 | loss/lvl1=0.677\n", - "Total time 0:03:42 | Best model found at epoch 5 \n", - "\n", - "\ttrain : 03m34s\n", - "\teval : 04s\n", - "Final weights saved at: /home/asger/Repositories/mini_trainer/examples/blair/blair_model/weights/last.pt\n", - "{'input': '/home/asger/Repositories/mini_trainer/examples/blair/test', 'weights': 'blair_model/weights/last.pt', 'output': '/home/asger/Repositories/mini_trainer/examples/blair/blair_model/predict', 'name': 'predict', 'threshold': 0, 'device': 'cuda:0', 'dtype': 'float16', 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'collector_cls': 'mini_trainer.hierarchical.integration.HierarchicalResultCollector', 'dataloader_builder_kwargs': {'batch_size': 16}, 'collector_cls_kwargs': {'scientific_names': False, 'verbose': True}}\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:445: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|█████████████████████| 73/73 [00:05<00:00, 12.97batch/s]\n", - "METRIC TABLE \n", - " | accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "--------|----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - "level 0 | 69.67% | 67.88% | 69.67% | 65.66% | 72.52% | 79.18% | 72.52% | 73.93% | 77.46%\n", - "level 1 | 80.41% | 77.31% | 80.41% | 75.55% | 83.38% | 86.99% | 83.38% | 83.93% | 80.90%\n", - " \n", - " | coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "--------|----------|---------------------|------------------------------|-----------------------------------\n", - "level 0 | 100.00% | 100.00% | 57.66% | 57.67% \n", - "level 1 | 100.00% | 100.00% | 68.30% | 67.68% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Remove `--cache CUDA` and/or lower batch_size if you have limited VRAM\n", "!rm -rf blair/blair_model\n", @@ -6720,297 +73,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "5f073fa5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Launcher] Resolving network topology...\n", - "[Launcher] Establishing ephemeral NFS mount over QSFP...\n", - "[Launcher] -> Mounted Project: 192.168.100.10:/home/asger/Repositories/mini_trainer ==> spkc:/home/asger/Repositories/mini_trainer\n", - "[Launcher] -> Mounted Cache: 192.168.100.10:/home/asger/.cache ==> spkc:/home/asger/.cache\n", - "[Launcher] Verifying environment synchronization...\n", - "[Launcher] Testing PyTorch import on worker node...\n", - " PyTorch 2.12.0+cu130 loaded on worker.\n", - "[Launcher] Spawning worker on spkc (192.168.100.11)...\n", - "[Launcher] Spawning master locally (192.168.100.10)...\n", - "[W728 11:41:03.060308144 socket.cpp:207] [c10d] The hostname of the client socket cannot be retrieved. err=-3\n", - "spark-967b:638840:638840 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:638840:638840 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:638840:638840 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-967b:638840:638840 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-967b:638840:638840 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-967b:638840:638840 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:638840:638840 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:638840:638840 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-967b:638840:638840 [0] NCCL INFO Using network IB\n", - "spark-967b:638840:638840 [0] NCCL INFO [Rank 0] ncclCommInitRankConfig comm 0xbb6caf51b590 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init START\n", - "[W728 11:41:10.067046288 socket.cpp:207] [c10d] The hostname of the client socket cannot be retrieved. err=-3\n", - "spark-c948:95665:95665 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-c948:95665:95665 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:95665:95665 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-c948:95665:95665 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-c948:95665:95665 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-c948:95665:95665 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:95665:95665 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:95665:95665 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-c948:95665:95665 [0] NCCL INFO Using network IB\n", - "spark-c948:95665:95665 [0] NCCL INFO [Rank 1] ncclCommInitRankConfig comm 0xb76967df0e40 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init START\n", - "spark-967b:638840:638840 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-c948:95665:95665 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:638840:638840 [0] NCCL INFO Bootstrap timings total 3.697224 (create 0.000025, send 0.000082, recv 3.696093, ring 0.000244, delay 0.000000)\n", - "spark-c948:95665:95665 [0] NCCL INFO Bootstrap timings total 0.001462 (create 0.000024, send 0.000157, recv 0.000536, ring 0.000323, delay 0.000000)\n", - "spark-c948:95665:95665 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:638840:638840 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:638840:638840 [0] NCCL INFO comm 0xbb6caf51b590 rank 0 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/16 : 0 1\n", - "spark-967b:638840:638840 [0] NCCL INFO Trees [0] 1/-1/-1->0->-1 [1] 1/-1/-1->0->-1 [2] 1/-1/-1->0->-1 [3] 1/-1/-1->0->-1 [4] 1/-1/-1->0->-1 [5] 1/-1/-1->0->-1 [6] 1/-1/-1->0->-1 [7] 1/-1/-1->0->-1 [8] -1/-1/-1->0->1 [9] -1/-1/-1->0->1 [10] -1/-1/-1->0->1 [11] -1/-1/-1->0->1 [12] -1/-1/-1->0->1 [13] -1/-1/-1->0->1 [14] -1/-1/-1->0->1 [15] -1/-1/-1->0->1\n", - "spark-967b:638840:638840 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-967b:638840:638840 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-967b:638840:638840 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-967b:638840:638957 [0] NCCL INFO [Proxy Service] Device 0 CPU core 1\n", - "spark-c948:95665:95665 [0] NCCL INFO comm 0xb76967df0e40 rank 1 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-c948:95665:95665 [0] NCCL INFO Trees [0] -1/-1/-1->1->0 [1] -1/-1/-1->1->0 [2] -1/-1/-1->1->0 [3] -1/-1/-1->1->0 [4] -1/-1/-1->1->0 [5] -1/-1/-1->1->0 [6] -1/-1/-1->1->0 [7] -1/-1/-1->1->0 [8] 0/-1/-1->1->-1 [9] 0/-1/-1->1->-1 [10] 0/-1/-1->1->-1 [11] 0/-1/-1->1->-1 [12] 0/-1/-1->1->-1 [13] 0/-1/-1->1->-1 [14] 0/-1/-1->1->-1 [15] 0/-1/-1->1->-1\n", - "spark-c948:95665:95665 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:95665:95665 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-c948:95665:95665 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-967b:638840:638958 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 16\n", - "spark-c948:95665:95713 [0] NCCL INFO [Proxy Service] Device 0 CPU core 2\n", - "spark-c948:95665:95714 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 6\n", - "spark-967b:638840:638840 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-967b:638840:638840 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-967b:638840:638840 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-967b:638840:638840 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-967b:638840:638840 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-967b:638840:638840 [0] NCCL INFO CC Off, workFifoBytes 1048576\n", - "spark-967b:638840:638840 [0] NCCL INFO ncclCommInitRankConfig comm 0xbb6caf51b590 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init COMPLETE\n", - "spark-967b:638840:638840 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 0 nranks 2 total 3.87 (kernels 0.15, alloc 0.01, bootstrap 3.70, allgathers 0.00, topo 0.01, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-c948:95665:95665 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-c948:95665:95665 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-c948:95665:95665 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-c948:95665:95665 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-c948:95665:95665 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-c948:95665:95665 [0] NCCL INFO ncclCommInitRankConfig comm 0xb76967df0e40 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0xb89a3006053bfbac - Init COMPLETE\n", - "spark-c948:95665:95665 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 1 nranks 2 total 0.20 (kernels 0.16, alloc 0.02, bootstrap 0.00, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-967b:638840:638959 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 5\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95715 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:95665:95665 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:638840:638840 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:638840:638840 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "spark-c948:95665:95665 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "[Rank 0] 2026-07-28 11:41:01,673 [INFO] mini_trainer.config: {'input': '/home/asger/Repositories/mini_trainer/examples/blair/train', 'output': '/home/asger/Repositories/mini_trainer/examples/blair', 'epochs': 5, 'size': 128, 'name': 'blair_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'compile': False, 'builder': 'mini_trainer.hierarchical.integration.HierarchicalBuilder', 'spec_model_dataloader_kwargs': {'species': True}, 'model_builder_kwargs': {'model_type': 'efficientnet_v2_s', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True, 'cls': 'mini_trainer.hierarchical.model.HierarchicalClassifier'}, 'dataloader_builder_kwargs': {'batch_size': 32, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'weights': [1.0, 1.0]}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}, 'ddp_info': {'rank': 0, 'world_size': 2, 'local_rank': 0}}\n", - "[Rank 0] 2026-07-28 11:41:01,674 [DEBUG] mini_trainer.train: Building class spec...\n", - "[Rank 1] 2026-07-28 11:41:10,761 [DEBUG] mini_trainer.train: Building class spec...\n", - "[Rank 0] 2026-07-28 11:41:01,965 [DEBUG] mini_trainer.utils._concurrent.distributed: Entered main_process_first (master). Executing block...\n", - "[Rank 0] 2026-07-28 11:41:01,965 [DEBUG] mini_trainer.train: Building model...\n", - "[Rank 1] 2026-07-28 11:41:11,025 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker waiting at barrier...\n", - "[Rank 0] 2026-07-28 11:41:02,408 [INFO] mini_trainer.train: Using model `EfficientNet` with head `HierarchicalClassifier`\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.utils._concurrent.distributed: Master block completed. Reaching barrier...\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.utils._concurrent.distributed: Barrier released on master.\n", - "[Rank 0] 2026-07-28 11:41:02,408 [DEBUG] mini_trainer.train: Building dataloaders...\n", - "[Rank 1] 2026-07-28 11:41:11,467 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker barrier released. Executing block...\n", - "[Rank 1] 2026-07-28 11:41:11,467 [DEBUG] mini_trainer.train: Building model...\n", - "[Rank 0] 2026-07-28 11:41:02,824 [INFO] mini_trainer.data.loader: Building datasets with image size (128, 128)\n", - "Writing to CUDA RAM cache...: 0%| | 1/4164 [00:00<07:15, 9.57it/s][Rank 1] 2026-07-28 11:41:12,056 [DEBUG] mini_trainer.utils._concurrent.distributed: Worker block completed.\n", - "[Rank 1] 2026-07-28 11:41:12,057 [DEBUG] mini_trainer.train: Building dataloaders...\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:388: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:388: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "[Rank 0] 2026-07-28 11:41:04,532 [DEBUG] mini_trainer.train: Dataloaders built successfully. Train batches: 65, Val batches: 4\n", - "[Rank 1] 2026-07-28 11:41:13,678 [DEBUG] mini_trainer.train: Dataloaders built successfully. Train batches: 65, Val batches: 4\n", - "[Rank 1] 2026-07-28 11:41:13,690 [DEBUG] mini_trainer.trainer: Model DDP wrap starting...\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.train: Using training criterion: `MultiLevelWeightedCrossEntropyLoss(EMLACrossEntropy)[1.0 x 1.0]`\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.train: AMP Gradient Scaler enabled.\n", - "[Rank 0] 2026-07-28 11:41:05,565 [INFO] mini_trainer.trainer: Start training\n", - "[Rank 0] 2026-07-28 11:41:05,565 [DEBUG] mini_trainer.trainer: Model DDP wrap starting...\n", - "[Rank 0] 2026-07-28 11:41:05,588 [DEBUG] mini_trainer.trainer: DDP wrap completed.\n", - "[Rank 0] 2026-07-28 11:41:05,588 [DEBUG] mini_trainer.trainer: train_one_epoch starting for epoch 0.\n", - " 0%| | 0/65 [00:00 True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|█████████████████████| 19/19 [00:02<00:00, 9.33batch/s]\n", - "Computing optimal threshold on 228 samples, keeping 2094 for metrics.\n", - "Optimizing threshold: 100%|██████████████████| 18/18 [00:00<00:00, 1227.90it/s]\n", - "Found 9 optimal thresholds at: [0.000, 0.064, 0.080, 0.128, 0.160, 0.192, 0.200, 0.240, 0.256]\n", - "Optimizing threshold: 100%|██████████████████| 18/18 [00:00<00:00, 1515.86it/s]\n", - "Found 3 optimal thresholds at: [0.424, 0.440, 0.456]\n", - "Computing rank_error: 100%|███████████████| 15/15 [00:00<00:00, 397.13metric/s]\n", - "\n", - "METRIC TABLE[blair/blair_model/predict/mini_metric.csv]\n", - " | accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "--------|----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - "level 0 | 69.50% | 73.10% | 69.50% | 69.24% | 77.65% | 77.65% | 77.65% | 77.65% | 77.26%\n", - "level 1 | 86.62% | 88.52% | 83.74% | 85.62% | 91.21% | 91.21% | 89.21% | 90.20% | 85.08%\n", - " \n", - " | coverage | vocabulary_coverage | optimal_confidence_threshold\n", - "--------|----------|---------------------|-----------------------------\n", - "level 0 | 100.00% | 100.00% | 12.80% \n", - "level 1 | 97.80% | 100.00% | 44.00% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# OBS: Replace `-w spkc` with the SSH host alias used for MPI/NCCL with the second DGX Spark/Node\n", "!rm -rf blair/blair_model\n", @@ -7048,25 +114,7 @@ "execution_count": null, "id": "768dfb57", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of classes at rank:\n", - "species = 25\n", - "genus = 15\n", - "family = 1\n", - "order = 1\n", - "class = 1\n", - "phylum = 1\n", - "kingdom = 1\n", - "\n", - "Included ranks:\n", - "species, genus\n" - ] - } - ], + "outputs": [], "source": [ "# Test that all species can be resolved properly (they can)\n", "import os\n", @@ -7105,25 +153,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "2b1a259f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/micromamba/envs/mini_trainer/lib/python3.12/site-packages/torch/cuda/__init__.py:283: UserWarning: \n", - " Found GPU0 NVIDIA GB10 which is of cuda capability 12.1.\n", - " Minimum and Maximum cuda capability supported by this version of PyTorch is\n", - " (8.0) - (12.0)\n", - " \n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:449: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n" - ] - } - ], + "outputs": [], "source": [ "import json\n", "\n", @@ -7150,13 +183,6 @@ "id": "ab394a49", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n" - ] - }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0oAAAJYCAYAAABcsxbJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs/XeYZNdd4I1/zrn3VuzqHKYn55EmSKMcLNuSwRhYk17Mj8WsvX4W/KyXJax3jXkx8SF7WRuTHsA8sAKWh/CyJIOTjGUlK400OfTEntQ5Vle8955zfn+ce6ura7qlkSXNjKT7eZ6Z7q6qrr731Anf/BXGGENCQkJCQkJCQkJCQkJCA3m9LyAhISEhISEhISEhIeFGI1GUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFKSEhISEhISEhISEhoIVGUEhISEhISEhISEhISWkgUpYSEhISEhISEhISEhBYSRSkhISEhISEhISEhIaGFRFFK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Bz/4AXv27DnrbX8qsj7/Tl/W++qpyS233MKXvvQl3vrWt/KLv/iLjI2Nrfq9ffv28eUvf5kPfehDRFFEqVTiqquu4m1vextvfetb04jSajI4OMjCwgIf/vCH0zn6G7/xG3z5y19egdA4n2V9XJ3fIszpJk2sy7qsy2nJHXfckULptNa85S1v4bd+67d4+OGH2bVrF29+85v50pe+xMUXX8z+/ft54okneNOb3sRXvvIVCoUCBw8eZMuWLfzar/0aW7Zs4cd+7McwxqTvZbNZfu3Xfo3x8XGuvvpqXvnKV/Ka17yGl7/85VxyySXcfffdfPzjH2dmZoaPfOQj1Ot1fuEXfoEPfvCDz3bXrMu6rMu6rMu6rMu6/NDIuqG0LuuyLuuyLuuyLuuyLuuyLuvSJj/y0LunKocOHUIIwSOPPLLq56drd7Yf57WvfS2/+7u/e8au83yQ9b5al7Mh6+NqXc6U3HHHHXz5y19+RsfQWvMnf/InPPHEE2foqs5vWZ9/py/rffX05M477+SP//iPAX6k5tbpyvq4OrfynDGUHnroIS6//HIGBwe57bbbeN3rXgfA7t27+dznPncS0xhYppWXvOQl9Pb28v73v58oirjpppsYGhpi586d3HXXXYyNjXH99dczODjI61//+vR8t912G11dXXz6059OB1vCavb5z3+eLVu2MDw8zO233w7AK1/5SkZHR9m1axff/e53ede73gXA9ddfz2c/+1mmpqZYWFg46Xx33nknQggajQY33ngjN998M4899hhbt25leHiYl7zkJet9dRb76lzJc2HhWx9X63K+yB133MEb3/hGbr31Vt73vvfxnve8h9e85jX80z/9E29/+9v5hV/4hRX0xA8++CC//uu/zpve9Ca+9a1vcejQIa677jr+8A//kJ/7uZ/DGMP/+3//j3e9613cfPPNzM7Ocscdd/CGN7yBj33sY4yPjz/rtODr82+9r87ntap1jn3961/n9ttv5+1vfztve9vbaDabvO51r+Od73wnX/ziF/nGN76RUvsnc+t1r3sdURQxPz/Pf/2v/3WFk+PGG2/E9/0Vx3g2ZH1cPTflOWMovf/972fTpk2Mj4/z9re/nS996Uv8/d//PdPT07z2ta89iWkskZ/8yZ/k3e9+N5/73Of453/+Zz7/+c/z6KOP8trXvpbbb7+dj370o1SrVY4dO8af/umfpr+79dZbecMb3sBf/dVfpe8lrGZve9vb+I3f+A3uuusufv/3f597772XXC5HEAQcP36cO+64g9///d8HrOfkDW94Q3qMtc7XKocOHaJWq/G+972PD33oQ+t9dRb7an3hO31ZH1frcj7JK17xCv7kT/6Er33ta/z2b/92yiLZ2dnJ0NAQ3/nOd9LvJmQoAwMD/MVf/AVgGbt+9Vd/le7ubsbHx1FKobUmCAL+5V/+BbCkDW9/+9vXvIZzSQu+Pv/W++ps9NWZktY5dtNNN3Ho0CE6OzupVCqMj49TrVb5sR/7MX7iJ36CF7zgBSm1fyIve9nL+OpXv8rf/M3f8NM//dMnHb/ZbK44xrMh6+PquSnPGUMJSBnDuru7ee1rX8sb3/hGfv7nfx7P89ZkGkuYxZrN5kle+9bXQohVGclaaSoTVrP24ywuLvLFL36R73znO1x++eVUKhWUUgAprWW7JOfzPA+ARqORMsZcc801fPGLX2RiYoIXvOAFKcvZU5H1vjo9WV/4npqsj6t1OV+ko6MDsAyUYBW1pLDle9/73hW1xT72sY+lkaZarQZYKmIgpSP+xCc+wR/+4R/y8pe/PP1OQgueyLNNC74+/05f1vvq3ErrHKtUKjz/+c/nve99L5/+9KfZvHkzf/EXf8HMzAxvfetbT6LkB/jpn/5pvvCFL/Bv//ZvvPSlLz2JFrxUKq04xrMl6+PquSfPGUPpPe95DwcOHGBwcJD3ve99/OIv/iJLS0v8wi/8AnAyxeJq8vKXv5yf+qmfYufOnfz1X/81v/d7v8cv//Ivk81mGR4eTgt/Ppl89KMf5QMf+ADXXXcdt912G5dddhn79u3juuuuSyfH0NAQ+/bt44UvfCH/9E//lP62/XyXXnope/fu5YUvfGE6QO+55x5uvPFGPvrRj3LdddelG/p6X535voL1he90ZX1crcv5Ltdddx1vfvOb+W//7b/xf/7P/0nff/GLX8yHPvQh/vzP/3zN3+7evZsPfvCD/PM///Oa33k2acHX5996X53Pa1XrHHvFK17Bfffdxzvf+U5uueUWxsbGeM973sM3v/lN9uzZs4LaP5GOjg7CMGR4eBilFC960Yv4m7/5G/7oj/6I+fn5k47xbMj6uHqOinkOyuOPP242b95s3vnOdz7bl3Ley3pfnVruv/9+c+mll5qBgQHzzne+03z72982Ukpz4MABY4wxb3rTm0x/f7956UtfajZv3myMMQYw//AP/2A+8YlPmM2bN5swDM3P/uzPmoGBAbN9+3bzr//6r+b48ePmBS94genv7zeve93rzMGDBw1gHn74YXP77bebF73oRSveM8aYv/zLvzQbN240g4OD5rbbbjOVSsXs27fPbNu2zVx++eXmjW98owmCwOzbt890dnaaf/zHfzQvetGLzO23337S+arVqtm7d6+56KKLzI4dO8wb3/hG87Wvfc1s3rzZ9Pb2mhtuuMEEQfC0+219XK3Lujx7sj7/Tl/W+2pdzoasj6vnjqzTg6/Lupym7N+/nxtuuIGf+ZmfSSFu67Iu67Iu67Iu67Iu6/LclOesoXTvPSsrObc3c/m1QRoNGIyByAiMUIDAGINBg9FgDMJo0BFR6KOjiMD3aTbqLMzPUVlaotmoU60s0Ww2yeUyFAoFlNIIIfDcLPlsgZzr4ApYnJ9memqS+cUlSj29bN62k87uPhQOU+PjHDr0BPm8S093F0bA9Owc+WInQxu30tHZjZGKK655wVnpu+/d/Q0MYIxAIwBp+0uQ9oGOAoJmg6mpKQ4fPkitXqOnu5vBgQFyXgYThizMzzE3O0t3Tw8DQ8PkcgWQCiNAI9CAUAKExB5epNAxYbDnkxJjdHKrEELYB/Y3LXcUhH2+8tqnnjT9g//4jr3fbbC41aaH0RJQCCEADWi00fF3DULYZysagUFoiTYCtMCgMSbECAPCIISCeMzpKEAYgSMU9WoFITSZrEMkQnAlTQ14OYLAkJMZZGRwpEBrHyUM6IAw8GnUq0xPTTE1MUkYRkgh0ZFGKUVXTw+Dw8PkCiVcLweOA0IQGUAIAKTRaV+39geQ9tPlz7v2lH36rbv+1d4/QGuDNmCEvZ/aaHQYEgQ+GI3RmigKCXyfWq1KvbJIGDQwoY9fr9JsNAiDkFqjiR9E+IGmUqtRqSySlYJSZ5mL9l3G6M5dSC+LozKgBRKJMtKCjAUYoe04McuQyuQeJ69Xa3O7PO/5Z2furcup5Tv/biErxhi01ivuT7JOGCPjMRpRr1d57PGHOXToIMPDQ2RyWYRQ5AsFOsplOjo6iELN+NETPPLIwxSLBaIownU8Rke3kcsVcTMOhUIBx3FOmhMGQFo4azKOWj+XZu0xlHy3dV4BXP68q89IXwE8eO+3sYNfopFx34CS4DfqTJ44hg4bdBQyNOtLPPrgvUwdPYRfXSIINSAwUpHPFykWS/QNDrBj504cVzE9M029UafR9PFDQ2//IIPDI+SLnSg3i5aKIDLxmi/jdsbrojFIBEKcPOfa1+HWfjJieWXde8m+M9JHf/k/P0jkN/FrFaTRuI6D43l09w9T7hsmcHJETo5IKBwhEGiMDkFrZLzmNupVfL9BJuOSz+UQUhKEIcrNYFvqEmmJozIY7D4qhEYIu19oFNoou1ekXWGQUth7gE56AokCI0FoMNFynxKvYULEe5RECJP+Vgi47KozN7Za5d+/8U2MtntdFIUYHaHkynGfXKUwoNH2Dwk6AoGD0Qa0j9FV5udO8NhD92Oaho5iEXRA4DcI/IYdc76PH0ZIL0N3Tz/bduyis6sfqTJEWpLJFTHCsS0XMu7TCIEhmQ/XPUOmtu9/7z9su1YZq6vpm8aY9LPWMd7+LHQEjSrHjh6m1vDp6RtAOQ6z0zMcePxR9j/6MFGzRs5TdHd20D80yJYdO+gbHEYLF6NcUB5CumghkYASIh1XRgiIIfit60/yOmnDWtI+V5fbDBjQOqRaWeChB+9j++gmXvGfX/c0evf8EufZvoCzLU9mBxoDBmEVc+yilNxxAaDtoiiFwOiI0PcJAsuuMjMzzfiJE8zPz+O6LuWOEn0DQ+QLeXK5HK7rIqXAaINSLkoqiAIcIgqFPOWOMidOnGB8aoaDjz5OX98i1WqVwwefYHz8OJ6rGBoepLunh9mFJfLFGpGGoUhT7CifqllnoOOWnw0GYzQSgY4ijA6JfJ9jR47y+OOP09vXw9Zt2ygUCmQzWaQRSKBU6qK7s4e5mWnGjhylq7uHYqmIynjgSCITYUIQSiJDTdBoYhAo1yWTyVkDwiiM1kip7AS320x8X9sXpMRIeRrNXWVzXu09e5YIayDZ61k2kGJtPP6WXRjBoNHCGp4GwAgM8UaXnkfbDQ6N0RF+EDI5cYJiPksUuiwszpErFfDyRYgMnsxA1MBoTQA4jkAYQ61eY3xsjOmpKYQQOJksXd1FPNcjDAKCIKBWb/DoY/spd3YxNDxCsaMDLUA5HkEU4ijVos+YFYrc6SykiWhAaM3yCm0wRGit0VFEFPjoIMBojYkiojCgUVtiYWaa+bkZIr9B5DepVRapVav4TZ9Gs2mNpdAaXmAQxRxFU0IpaQ1v7G2wd8Wg0en8ThQtyerOk/Z2tW5uiZxO29fl7MhaysXKe2edF/VGlX/9t3/mG9+4i2azTtbLEMUOgHyhwIaRES666GJq1Trzs1VKxSLbtu2gt7cX1/WQ0oV4niolUUoRRdFKhQdi5UCfNE9Ey/pwqjFzNn2VJt7T2kw7dBSR8RwGB/po1BYI6hWqlUWqSwvUK0vIKMRFIgV2Ta3XWGrWiZp1/GoFJ5PBCIlyPZTrIqVkdnaOUEsGhyXlbg+BSs8rjMEgMPGslCa5kuW+XMsx1S5nev6VuwfIOopmtcLi3AxLC7MES1VqjZClhk9HzwBesYzjZNBCoqQkikIcASYMWJibobK0EDt3mnR3llGOgxGSTL5ILpcnXyghUSgMxsTXr+O2CnuHZGI0Jp4cITA6WbMky6M70VfiH8dO3uSVIDGWbG/b7jq7a5YAtIkQwjo7TezpNHFTTItCoTGgFTq01yZMAHoJRwU0mwtMjJ/g2JHDnDh4BCeEei4HRhOFPlHkE2pNEBmMVDSjGnPTizRrDfr6+5Aqg8Zh4+btdHb1IYWyfu50PsZjUJ75OXc6Y/fJ9VEDxlBv1KnVanR2dlLMOux//HEeuv9+5uemCZtV/HoNv6ppVhcJo4j+4Q3UlpYIjUAqD+VlcbM5pOMhhLQGk1QgBdrYVWGt4MGp5uFqRtLy39YAw4CjFALB3Pxzg+DhOW0orXWzT95kYwMpWaJixdeYCGFM/ND4jQbz87OMjY8zMTGRWuBDG0bo7e2lkM/jeS7GWOtdIKwnTSoiIDIgpQEdEfpNmn6TYi6HDEMeuedeHkbjBw3q1UWMjjBGMzd1HOV49A4Os2XLKEIKThw7zNZtO85iz4nYOEr6B7TRKCHARERRyNEjR3nk4YcpFAoMDW3AdTII4eAHGlc5NiqnJKVyN/l8jsX5BSbGjjN+QlMsF+np70N4DrW4H+qzM8xPz2AQbBndTrZ/iMgINAovk40jEgYhYy8cMvVGngnRWqd/t3t425+JvYDLBoDts8SIA7vBxSYSOt7I7EPEXq24YwWp8oDRSBWCCZiZPsHC3CSlTD+Tx+Y4cvggyvEINQxsGGHzlm3IjMvC/AJSSnr7eqnVaoyPjXP06FG6e3rYMDyCl8ngeRlc5SAxICS1RoMjR48yNj7O1MwsOy+4gN7+PnTo4zoOURSmqtVqnt7TVVQMVmUlVih1HAUwWhP6NvJFpNFRSKNWo15bora0yPz0JLMz0wSNGlHYJGw2CJpNgiCiXq9TqdZoNH2Ecshks0RZJ44mxH2uI8IoQBgHYVWT9IoSxfZUikN7ZGDtaPS5lTvuuIM3velN9Pf343ken/nMZ3jRi16UXtPp3JctW7bwa7/2a9x6663pe9dccw2/9Eu/tIIl8XyVtdppx2YyJQ1ah+zf/xjf+MbXmJmZwWiN74T4oU+j0cBxXWam5qhW6rz8Za/g0r0bKRYLKJV4WmW8jgvrsMEQhuGqTgPTdh2JrHY7TjW2zo4BLpbnYXylIjZZlADlObgij8gqFD4TpRLTUYSMDFJESGNslN+EhJHGD0LGq1VkJseWHbvYNLqNbLGI43nMLc4zu7DEwsI8mVyRXMG1O0nsBCJW0JYV++UIU6tydup9W5xxnb9/aBM68CmXuyl1lDl6IGJ+bgYTRUyPn2BpaZGhjZvIFMsYlSOUChNFCFcQBj7VxQWalUV0s87k8aNMHY5QSiLdLPliib6BATZu3oJ0XbSWRNoghYuUCikUaIkWBoS1HER8hwQSbQxGxDuGaNFRMKlDt7VDjFk2nFIHsEgi52e231pFoEkmoBACLVRqCCdXGV8hGoMUAoxAaoM0ETqqUKtMMDV5nMMHj3D86ARhLaDTyxJVQsLQJwwD+2shaTZDAiMIpSLUMDU+QWVhFjeTJ5froKuzi3KpA1TWXp+xyBiSfjybzok252Lrc/L3arpF+n78ntYRczOTzE+d4NBjDzN++BEwNmqnmw0wEAjD+Pg43/32f1AsFnEcuyeWO7vZsHmUcncvTiZHgLR2uVFISRqRb0VRrDbv1toDW9uy/D1j76mUuK5HR7lMEATPsDfPD3lOG0qryWo3XJt4+RF2ibLeZg2RQQpDFEbU6zVmpqc4fOQQYxMT5AsFNm/ZQmdnN47rpN6gQNvBLpVEGIk0CiEkfhgiJQgTMjc/w5HHHmB+chzTbNKoNqjPLxBEPkqBCH0EFiYVhgHaGPx6lerCPKVuDxNqGrXq2e0j07oAG6SAKAqJwpCF+XkOHjxIqVBk05Yt5LJ5XM9Dx16x0IAyBikdAm2QXobOvh4cV3Dg8YeZHD/C0lwPRkjmlirUGzV0o0KjViWTLTDY18uio5ivNMjkSvT2DyGka6MDkUbKGGLQPklbPGtPq82cjrISQxmS4JEBpACdRIcAI2K0pkYTEIkIY2R8iTK91kRhAWEhHEZD2KC6MENlcYLerhwZ6XPiwKOcOHSIMNQ0mgGLE2N0ZxwGNw5TX5jA930yMmJ2fpHFuUU2btxMX18/uUIBg8T1PKIwREq7+eYLDtu2b6fc1cXx48c5duwIhUKOXC6HMAIdhUjlxE7N1ZXS01HqjGCl191oojCy0aMgJPIDdBBQr1aZnZlmYW6GuakJlhbnqC0tocMAiUZJgSMFSmtEpBFhhNIWcuhKO0fq9Tr1Wo3AD1Cem45hbf2vtseFXcgBu1Gv0p41/37S1p4b6evr48SJE+zevZu77rqL66+/npe+9KXk83kuueQS/vIv/xLf9/mt3/otfu7nfo5bbrmFL3/5yxQKBQ4cOADA5z73Od73vvfxEz/xE3zqU59ibGyMSqXCHXfcwS//8i9zxRVX8OCDD/LVr36Vv/u7v+Mf//EfufvuuxkcHOT3fu/3yOfzvO1tb8N1XW6++WZ++7d/+5y1f62IX/wqnv+aMAo5cOAJFhcrNJsRoR8SShvFDkL7u0Y9ZOz4FIcOHaW3dziOPFpPfOKFl9ZzhjW+dAoNZvmMJJHtxNmSXI+GlpjKah7Ytdt1psSYlYaFwSCNSQ0YHYUotN3vwgATRXjKQxEhdYggwtERCoEnwBDiNzXNUDN+YoLQuGzYMsrAUAcbRraQzc8yOT3D3PwsrudhpLLrYeKLXHl1nIwKSK57baXtTCu5RmaQGQ8d2P2mu2+IWq1O4DdxMy5LMxM0qvOMjG4n1zmIcDzrdAolkoicq5iem+XE4QMEjRo5z0EpCcojqFYoepJooJtmw1Cp1YkiyOaK5HMdeG4eR7ogTNxHsVdeSrs7xAalEInxJNAnkRUnDjzr4LRbiUU4nLPot4nSLVFrbWHmsT1iTSOdeArRhGgdoYxAAY3KNAuzRzly+EEWF6ZxVAYVaXQQgmkQmshGcqMQpCAIDY2mTy3QGJUlEgIhKxAV6enpYmTjFsqlTrvm6yhe8iUihl1bW/LM9MupHB3tRtBav201krTWCG3wMh79A33Mjp9gaWEGFTXIqoh6tUoQRniOS6gNvt/AMYL5qWkWpqfRUYjreZTLZSK/weYdu+jsHcAoDx3rICI1nO352yHnqxl6a7V55XuJASpwHJfhoQ00G7Wn0p3nrTynDaVThRBXvi/jSaVt9MhiKWx+RBRRWVpkfOwEkxMT1Bo1Rke30tndTbFYRDkuUll4WKStVztZ1DRxFMTGFIh0iF9f5OCBRxk/9gQ0auh6A6kFpayg0YRQN3FccB0XjSCMBEIqOjtKuI4i4zpIR+E3G2e170zSf2AVeG0XuigKOHbkMM16jY3bdlIudyKVinH6CoT1XBiwOGwl0cLBNaCJwITUF2Y5MjdNw/epNQJCHYFuolzBwsICBw50MDjs09U7SEdnp1VOhCSKIoSkBday8l7aCf7MNtG18lNWKjl2A0uj90kEUofWa6qNhT0YjTYBRkSAIlGdAISNMdq+jY8pTETYXGTy2CGalUWkKjM2cYSJI/tpzC/g+yHCcZgdP8qhR0t0djgoXWVy7DhLi/MUOrrZuGmEfMnmCBjhYBAEEUQRICXCQBRplHTp7ekjl8vx6COPcvTwEbZt24rREa5yiGLv4OkbkKtIDDtthUmaKCL0A6IgIPIDatUKU+NjjB07xsL8DLOTEzRqNUwU4CiJqyQZzyUyBt/3CZshrnQgzm0T2joyqtUq8wsL1Os1cspDSAeTRAkNCBlDLuJIoFlDgT0lROo8QNxNTU0xPDzM5OQkw8PDgK2z9ZrXvIb3vve9K2p6bdiwgc997nMcPnyYfD6fHuOqq67i7W9/O69//ev51Kc+teL4tVqNL3zhC1x33XV85StfWfUa7rnnHrZu3cov//Ivc+WVV569xq4hrdFfWL5/9n0773zfZ2mpCsYB4xBFmprftJFxR6GUS9MPmF9c5F/+f//K+NQUIyMbyOfzDAz009PTRy5bsBEVYVLDutULa+KI8FpitFURxSrzqD2CYpLIzRmWeEdiuRJIorRGaGORDQvzU0xPHGd6cozx8TEavo+jIzwMDhE68pFS4DqujYqEhoXqElNPPMHDB44wdGyMK666ki1bN9PZ1U213mRxcRHluHR199iF0iQ5M8sWk2F1p8upIrYi+eEZ7SPHOkRxcL0c5Z4BqtUKh594nKyO6CjkmJ6d5uj+hxncKil0dOMoST0IiPwGzWqF2tIijcoiGSXR9RqO56AJWFqcZ8wEBEGdAE2l3kC5WfLFLkr5LjpK3RRLZZSnkEoiHYWQsZNVOdhovEApx+6rhhiSnpSVEETJmGyJqNrIm0lzUNZS1s+UCKzzyRjivObl2ySS6JfR2DyhCBMFCAx+s87E2AGeeOR+5qbHcRyB50S4Brysh4xCwsAnCAJrLCFohppKtcFC3UfLJl6+gJeTKLeDgf5R+gc34WSyhJEAxXJeatw3NnP1maNRThdqd6rvtRpJyxElu751dnbRXJpnYbKJQ4RLiJaGbMamIUgt0EICGu03cJQibNTRzRoLQZNjSpLN58lkc3jFLlAKY8QKh07yd3uO5WqOnNXWsfaIksFGwowxdJQ7EaWO0+7P81mes4bSqeAy7YPXbhyJB0RjojDOmQipVJY4cPAJjh49SrmjzAW7LiRXLOF6Xgq9MwhrEJjQeuaksOF1BEJotI4QwqDDJiZsUF2YhrCGMk2UDG3uD4AHYSQRUuB6LgZFvemDcsl4WZu3I108xyVXKJ61vtOpYmt7B209HVEYsDA3x8T4GF3d3ZQ7O3G9DFJJjIoTqDFxP0Z2vkub21VZnGf/ww9yYv+jNJYWCH2fMDIY6WKEQuPjuIpSVxd9vX1s2bKFTKGMEa6Fa8kw9fKme23LLbaLqF4V7nK6cnrGgO0XoWXsmdKxYR0hdIgxEToKCcMgjsA1AYPr5VEyi8FBi9h41gHaWLKQKNCYwKcyO8bM0SMQ1jk6fYKJE8dYmp0l8kMiXyONQygjjh19jMHhDqqNJvMzk3R0dDI00E++oxOjsmjpIJRrw+1CoTzH3hMMQjk2V0NKcrk83V3dHD9+jJ7uLrp7ulFSEemT58/T805azLLRy7A7HYXoMECHIbWlCjNTkywuzDM7OU2lUiX0fZQA1/FwXA+EQJsIpIPjCFAaITVhZCF8yhX4zSZTUxNUlip4uQ4wPkq5LfcsgaPYTdvIlTDC9vXhpPcTT++zLH19fYyNjXHTTTfxt3/7t8Byna0/+IM/4FOf+hSPPvroinpAUspVa3X5vn/S8Xt7e+nq6kpreXmeR6PRoFarpXW13vGOd/DiF7+YT3/603zkIx/h29/+9tls8gpph6y0b97GaGr1Ko8/9jgnjo8RBBECl0xGEYQNi38WmtDYXDw/aCIa8P0ffI/v/+B7uI6i3Flm9+6LuP76F1Msdtjk+VUikGm0lJWKRGuEayUsau096XTzc566tBgmJvZgYddpv9lk7PhRZsaPU1mYYWF2ispShUbg42AQ0jpvBBEyifwYhedlkXXwgwbV0Ofg4UMMbRxhaGQDmWyecmcn1XqNyclJHMeho6OMkLEipbH7RRto4bSj1E97HVpbtJBoQpTjoEODUC7lrj4yhXGqi3N0dZUZ6O1jYmqSyeNHGXE8jKMYO36M+ZlZqgvzLMxMETQbuJ6D0KF16KExQZPK/CzV2hKdA/109vTiZApkcx1gHCq1GgsLFULj42Yk2WyWXL5INl/Ay2Rsvo8xRFhjSAqFJWgAHVkoqBsbVMiE6AiM1LEhGpGkFpzN6JIwtOAjBFokZCuW/MnmeVtDSeqAKKyzsDDL0YP7GT96hMZihSgQNKsBIutQzORp1qoYHaF1nNdqbKQq1BYnoI0gMgYjFLlCF0MbttHVM4yQefwovjCp4/Zri/oRBkWSK3dmZS1DYy0oXjsErzXVQQpF4DfQOmJ+fo7F+XmiIIxd+hbEolyXMHaC6DAkCJtEQZOa7xNFIcPeJqqVJeZmZ+jLlTBCxfdmZe3G5Jrb29D+/qkMqdRZZXQcEFXEk/2Zdut5Ic9ZQ6lVnmwDMsbmIak4ghLEYd5avcrj+x/n6NEj9PUNsHnzZvLFIm4mY6MokCp/sLxZYgwSHdsYEUSBXbCCOlF9AelXcUMfZXyk1DSaPhqJ57mIUMQRi0SRUyAdmqEG6dA7MIjwcnjZ/CladOb6bHlCW5ay+bk5ojBkYKAf18tYYyE1GEmjK7ZzDCYAHQYc2X+AQ489TmNuFu3X8Zs+WihU1kG6kkhL0JJCsQukw9z8Ik49It9RJpO1RqFQtm8TA641qhRf9dPeDFZbKJbvQauyA8ZITGQXXyWEvbdRiCDAb9Zo1issLs1Try7RqC2hhKK/fwOlUg+hsRj1Wq1KvVFF6xATaYJmgPF9GnOT1GbnyHmGwPj4lSWksSxCUkqEBG186o1F9j/+iGX2CQXFfJFSsYPQSAwKsN4jgYiNMRMvqfa6kxw0KRRd3d1MTU0yNztLV2enjdwJ1dJms4oS+OSyDCcwMWGDRkf2OQpDwqZP0KjTrNcRUUQYBOjIoBwXz3XIZHM4jkMUBoRBSBgawlDHCfUxhEBq6+3XmoW5OWqVKl09IdoIlHAwQqeQFZGEhMTKa2xnMmsfB+nr1GZ69gymJKKkteYtb3kL//AP/5B+lhQzvPjiiwF42ctexo033siePXsoFAocPHjwKZ/vVa96FR/5yEd49atfjePY7eIzn/kMH/nIR6jX62khxXMlq83PZSIFO84eeehhvv+979Hf08OxI8cI/YhIELM6qtipBZE2mDBC+iFRBOViiXwuS7Pa4LFHHmHLli3s3rPbQpgSI1skOT8mhTml6Yqxkmpfn2wgrbbGtBtYZ9pYOjmPM16fjSYMfWZmZ5lfmKezWKReXaLebFL3raEkHYkgREpDaEKMHyGNJnI0CI2MHWKB32RhcYkgNISRsc6X7m6OHDnC4UMH2L5jJ9msJedRKoPAssuuvM6VkfxnFMl+iqJNZNdHI5DSQbkZiuUuNmzcwhOPVPGbEQP9fVSWKsxNjNHT2UUun2d6fJyxE8cJ6w1qlQVk5ONoh6xjV1lXgRKGRq1K0JCofIGOniEGB0codHRDnEPZbPgsVeZZXJzlyORRNIJyuYzjumgMhUKBnu4esrkcUiqEdJHStaQ7WIMpYU2QUoBMIk+QrvpnIxTXIulcjJ2+JsbUKGHQREgRIo0m8KvUluaYmZrk8MEnGDt+jFI+z6YtozhaMHH8BMpYRE/Y9ImiABPFjKkIgjAijAxCKqRycDJ5srkCvX2DDAxtRmZyBCaB/xnAMp4KKZBxaoDdC85cX5zKAQJrj+HWSHjrWobRhM0m0+MTHNx/gEq1Tr3hY++jIk3TS7wNxhAFPlEUpcdqBiGFYpFMJsfU1DQd3QO4WYn0JEZLjGjXa9Y2gk7VpvZ5mqzFFpn17DsWz5Q8pw2ltW74STcdg1CCwG/Gi46mUlni+PFjzM7N0j84xJbRreQKeRzHs5TH8WBdHiCWfCEJm4p4suuoCTpEmAipfUy9ihsFeFGICQJAE4Q+oRZIz8HxFGEQGycCHC9LiMNCpc7cUo1hHDw3S3AOcECtRpLRmjDwmZufpaOjSEephJvxEMqxBNhax8uwXSaTCSwi8BeWOP7EAaozc4jAej3CKCIUAu37hKGF5HWUSmzcspXB4RHqTRu9wsng5Qo2f0C3hH9NrAC3eD6kVGfM6Z+03RoNKw+qUHHzTLzJBigRUV1aYHLiBHOzkzQbS4ShT2V+lrBRZ3F6mo7OARYrTWrNANfzENKQ8RxKxRKFXJ5sqURTCnSzxtzsMfzGAn6zaVkTpWPD40ogXWgGdY6dOEG53IeX7yCIBJFxMNLDoDDEdORYD3ri/dbEQNNYXxJSUioWGRoaYmnJUgIr79SQ1dUMi9XEMiTaaJI1kiKi0C7mYRDSaFjWPils1KNQsMa/EMKy5ihFMwgt8UMYxq42ByVs5oeUEseTuDkX39iNtbKwQBT4OFk3Tj40yU2L/YirL/CrKartxuHZUmZPV26++WZuvvnmFe/9f//f/5f+/b/+1/866Td33HHHiteHDh1K/07a0fpecvy77747fW9ycvKk4952222nedVnV1ZEd4xhfn6euZlZrnne1UxNTfHAAw/ieoqoGSGExHEdXNcljALA4DgeUWTQYUTV1CCM2LBhmIHhQf79m9+gu6uTzRs2EyWQaq3TiAjAChBwOi5WKh3t3tnV5HS+83QkGf52u9At12aVLuW4ZHMFhjaMUK1UaTR8qvUGRCE644AnUMKSi0dRiDBNwlBjIoXnZCgICa5DMV+0LIFC4TiKzs4uqouLHDl6mOnJCYY3jKAcgTEhRI5V5GU8l9aYU6vBoM+G4aSkWQHnNNJBuVm6evopdJxgcakSR1p7mVs4SGVumpw7QCmfY8JAo94g8AOEDlFGW0ZSAVIYhLFsnrUI5g8eY3K+SeQU2FmwzIpCKDIFl0wuS09vH4ONOmEYEgQhc3OzzM/PMzs1y/zMAq7n0dPdTXdvL44LmAgpFUpYNIeQIoa/GTBRvObLNHpyNm3OlNGVZF2x9N86CkAHEAVUK/PMzUwwfeIwkxNTVCpNCpluCoUi5e4+Cp6kujTL/NQMQdUn8pMokrbU4cRlJiLr4Mtl8ji5Ap3lbgb6+sjlXYKwTmia4Mg4iimRSiGEg9A24gFxxOOs9MPae8OTGSDpngSYSDMzPY3fDBgcHOF4o4kOI/xGzeo+pmVf1ZbsQsROIIFLplAk19FJJldg8sQ45alJ+gaG7Dk8Dyms6p9A7lpZO1v393YK8fZrXatNSc7/c0Wes4bSk1n5ra+10UhtPUvaaOrVJY4eO8LRo0fp7x9gaGSEbK5gIyfKsfSWJiFeXcZnWhiWjusJWOMpDJoQNTF+gGlUWJqeIlhcwjNY6JmFEhNGhiDUeJ6DdASRtpELIR0cJ0su30EmV0Q4GYzyMPKZY2zXFptPY5LaQCZmEgsD/EaT7s5OPNcyGgkBRgi0iRdkbaFxUmAhjTpkdmaMxfkZG0Vq+ujIhmQ1EIQBvmlSymbo6+qku1yimM9RKJXpEtYQiyLrv5VSIY0b6/hmOUlItHhnn6EXY7WFq12iyLdU1ERo7RMFTSrVJcaPH2ZhfoZ8zqNnYJjq0iK12Rn8WpWxY0epVUM6egbZ0DNAR1cZ6UgcKfHcDJ7j4QiJKZaJTMD41FGaQYhwFLoZYetG2Yia6zhEaIR06O0fpqd/hGJHj4UpojDGRpNshE3b2le0LmDLbdHGgJTk8gUmJqcIIwtDtT9fXeE7XRFR7FlMYHeRpdo3OsLoiEgHSAmOcshmPDJ9fVSyS1SqFer1Oo2GwegItCUTcVyHTCaLwBCFIUYbpBK4js1HatYbTE1MsmnLNjJeHo3NabO5TKSeuGWa4lNce1tb4xn+rBlJ62Kl3XBtfWgd8uijjxKGIWEYcu+998Y+G4OUlt47eQ5CH7B5QUEQUK1WaTbqREEOwQm2bR2l5uU48Oh+hgY2oJzEI71M9pCuNkmgsmXMJJ7d9kTpdi9uu+PhjEeUIEHbLZ8XiL0TFApFTBSSKxTRQhJogR8ZTBiQcSDSLkEYxfWCwOZVCpQx5KSH4zlkSnn6enrw4pIOYdy3A4ODGCLm52cpd3RQ7uwhaPo4roWQBWGU8PSfNN9Wy5lIn89oD8WOozTHIobSCwfHy1Eq93B8fpH5hSpZL4sJfI4fPoArBZ3FAhnXpV6v0aw3QPu4uSzNIMRUlhAmtHtcZGg0YaHRpKozjE/Os2W7jW7IGAalHA8BOG4eGY+Hvt5BfL8Zr4V1JiYmeHjsEUrlItt2bKe7p5coCHAcF62NLaskY8SAsRT5RkiMcGze01lUXA0r9wywrIq2rIimUV/i+NEDzE2eYHHiOH5DsmP0EvoGN4OjUU6N8ROPMr10nNBvQGRLVAgjwFg0gOu6MZOpxhEOpVIJH0VfVze93Z0oJyCKAuygskaDwovhgJZ9GOzQPxOEuaejK7QbFKc7v6WQMRJliIG+bibGJ6iMT6ID64xPnJ1aR0TaBxPieB6BsbXJSl09ZIsdOJkcYRhx6NAh8vkCHZ1dRKGN+iUIAWDV/MjVyB3acytXa3+Le+MsxjDPrTxnDaXV7pCdMCeLEOD7PkaHBM0mJ44f59jRI5Q7yvQPDJDP55HKRSiXIApRUmFMFFv2Sc5F/DoKicIAy/tva8BUFuZYmp1FBXWipXlkFEEQ4QhJqA0Yizz1A5usqBwHYwR+GOI3GxS6SwxvHmVo4yjKy2Hnil6lJWdKWouiWSMlgRQ6UuE5XrzA26mgtUZrQxSHtmWstERBQHVxkqPHHqPeXEJLgZstETabBJGNphE1KRfyXHzBLkqlEuNHDiEwdPYN4eVduwAbGxmwdO0ZDAYtbG5QwqYkEWBsEuzTlVMtYq15B0pFRFGNKAgRRrO0MM/xI4fRgc9ATz+ukkxNTjA3M03U1HSUOshmy2wcHaV/ZBtGekjHQ7r2WqVVwTARRK6mpgVLfhgz5wlCLWI2uhibrA3KsfSznT2DbN1xIdLrAJlBoyAtxms3SyEs9M4YuwC3QsiElLE3SdJo+JYwIYrAeeYeN4m0UVUTMzHF8yWKIhttivs7qVGTyWVp1CtEQRO/USNO94uvU8Wskck8sxEBIoHf0BiliCLD/OwszXqDjg4TR3elhd8JiYhp+1sXgtUgB+ca+nM25dChQ4yOjvLwww+nuUytcroGcPtxXvva13LZZZfx7ne/+2xc9ppyqk06iiIWFxcZHx/n/vvu4+jRY+g4Kgy2toelpvcR2jLj1as1XNfFaI1yXbv2akM+V+CF11zAt7/zbcbGxhnasAGknala65TcwcRsZa0wuuSaEk9tez7AWu2AszPeEodeWppUWG+0cl1KnWWqtQr1ZkChVCZbKLG0tBjPPRtxQts+lMYywiqJVT9NgCMk5XyGcrEAyBg6ZOdPNpuhr6+PpaVFDh06yOiopFDstDm7sSG0lmPr1EbSme6j5eya5JXdlh16BgaZnBhjfmGJvu4yUkgmJk6QdT36h4aRhDhKEEhhKau9iIbfxG+GKGH380YkMSKDMRKDRCqPSEOoDa4rCCONianClXLivByN43g4UlHMF4l0RGe5m6npaRYrcxw+eIBapcLQ0BA6DNNxGUUhjWaDer2B7zcwUuFmsuTzBbLZ7Bnut2WRMd4vEiZVjxNkmDBQW1pi4tgRagtTNBZmKBUH2TQ8QqHcS9M0mJmd5ujRg1Qr83hagnbsfi5AakAIPMezDkoXAuOQL3exUGlQzOfJZRRGV2Ij10UIhcS19bvCgFBKhPJQrodQCh2dfRU+OYM2LcZ9PMxMjOhY6eyJx3083xzHtfRPbhbhZKj6EdJIlAEHW+xYYNNGpASpBCYUaKnIFjtAuUjHpVTu5MiRw/R2d5HNZjCZvKWzEGJ5HWtx2KzmzEnz8dcw/Fb8Jv5f66Rkxw+/nM2wxLMsNk8DITHCMu4QL4D2kXi5I3RoE/D9RpNapcLczAxZL8OmkRGKhQJSSGsI6AipFJGO0DoEExKFVrEMNfhaUm+GRIGPaCxSGz/M4fu/z6H7f8CJxx9g/PBjLM6OEQV1tNBoqfBDCEMJkcJEDkEgEVqScRWeEkhP0DcywuYLLyLT3U9dg5IO7hmsIdQuWoex8WMNoHQySAlx4TLRwvykE8+osYF+oUOIAuamxnnkvns59sQB/GrVKsSuIjSaRrNJGIY4UrJ1yyi7L3sem3ddgpvJ8/jDD3Lgwe9TmTwMjXlE5BNEmtBIAhMQmRCDju+jsBuQkXH4/8xMzFZv70nvKU2jsUSlMsvY2FGOHT2E0QGlYpFmw+fQgaMcPTyOp4qMbNhEoVAgDEOkUrheBuVmQDloHCIjCSIItaCpNZMLizx++DATs3PMV2os1Zq2JpVR2AKOCh0YRCSJIkG9EWJwQblooZAqMS6xEc4EDho/tNErFmcdK5HEiksYWeskiZS2e8Kfiuc7yd+wN0rbnLU4P0kbnXrdhRSW4rtWpVZZJGg2kGhcx9YdEzFLl4l8Ar9Os1El9OtEQQMdxgx6QYjruvjNJosLC7ERS7xbx8869rS29MFa9/5UY+JMbLEPPfQQl19+OYODg9x222287nW2evnu3bv53Oc+x2/+5m+yfft2Nm3axJ/92Z/Z/hSCl7zkJfT29vL+97+fKIq46aabGBoaYufOndx1112MjY1x/fXXMzg4yOtf//r0fLfddhtdXV18+tOf5tChQwghuOGGG3j1q1/N5z//ebZs2cLw8DC33347AK985SsZHR1l165dfPe73+Vd73oXANdffz2f/exnmZqaYmFh4aTz3XnnnQghaDQa3Hjjjdx888089thjbN26leHhYV7ykpc8475rHb9JvwiR1O9wmZycpFqt4roOQRAs5wDEzqUgCGg2mwR+AMZQyOUp5HNICX4YUO7uZtPmLQwODlEqlvj23XezuLhoDXxjaP2njVk5n5IxLUQawWq91vZxtxq87IxKrJCtFKvKKteho9xJoVii3vAZGNzABRfspqurB1d5WAtQgnSsIwdpo7jGgnsd7ePqgAwRrrI1AyNtvdOOsrXNPNehp6uLpcVFjh87bglEDERhGOfQrHHZbf252v0+U2LZ5OI9JLKQ5QjQSpEp5hkYGaLerFGrVejq6cb1XKanx1mcmyDvQcbTSBnhOJIgbBI06wSNBn49JGgahFZIFNlsht6uLoYG+nCUjAtuW0ixj6EhoSE0UVp6Qqdsd0hFvqPMhi1b2b59B3nP4eBjD3Dose+zNLOf8UPf5+hjd3PggW/w8H/cySPf+QaH7ruHA/d8j8e+/y0e/8G3mDz48Bnrs3aR2jKQokMMAZoIHRkEHjqUhM2A6sICCzOTBI1FiOY5cfR7zE3eR3VmP8efeIi5ExP4iz5RLcAEPkbXiUyD0DSICAi0j3EkKpvDK3VgXI9sIUtnVwlJDfw5osYcfmWO2twsS1MTzB47yPSRR5k+8hAz44+ytHCIZn0KoZ85a3AQ+DQa9biEi7Z6YVo43uqYodHpFNTaMgIaY2GvJkV/SLQW6SPSNiqUzeWo1KuEJmJo4widvX3gZDDSRbhxpExYnTaMBEEIUWhp1YN6g9rCIkGjTmepSD6bYWp6kkplEROG1lkfhphwOXc4ivRyzn3CdKxjh3TLfp22xyRWn0gNz7TkidEYE+vJzwF5zkaUrPWL9W5h7P3EBtctdMKa9Tqy9KdBvUajUefwwQMoIdm5YwelUic4yoZs4+hPEDQRRuMIq7wJHRIFBl/HFZgMRH6DycOPM3FoP7PTM4S+DY1K1xA5AhPTzRptCCLQka3ZHYXWqMvlO/BcUNmI4YERdlxyCblyB0Y5uI6HDgJccTYjSieLnUCQGJtS2crjyW4nYjS0CEOIfOanJ3jk3u8zfuQJwmoVR1uPRxCGNMMGXtbFoCnmi3R1diHyXSgvw/AmgQ5qTB55gvrcNH0bR+ke2YoodhNqEI5ejp0bQNtK6Tom/Hy6auyqWOEWD8oyht1gQkArKgtVjh85QtZ1KOazTE9NMDExRTZbYGR0K91dPThUadbmqEUNy4RnQpoGEF5KI+6IGC4R+Rw/9DhTx44T1iIcpYj8KI0wAoShIDRgfEFQbzI+Mc3GSoXejm5CIrRuIoSLSjKSjInz5+y9M8KgE/yxiUlHogBPGLKezfFKIkCJ99YqJaIFcnyaSkqi3BgT04S35vEtG6JSSfwwoFmr0mjUMSbEcRRSCIIgZFmdUtZwMoLQGExk8LWPEBnCyCefzxP4PjNTE/T29tHR0WWTm4VVhMDWt4rDW+kakBx9uXmt7Uv8Y2KlZ/AZyvvf/342bdrE9773PY4ePcqFF17I3//93zM9Pc1rX/tafud3fmcF1feb3vQmAH7yJ3+SH//xH+eTn/wkV111FZ///OeZmJjgQx/6ELfffjvXX3891WqVY8eOUa/XmZmZAeDWW29l69at/NVf/RUvfvGLgWVa8cHBQT7wgQ9w/fXXs3PnTl7/+teTy+UIgoDp6WnuuOMOfv/3f5/Pf/7z3HnnnezatSvNh/roRz+64nzf+973TmrroUOHqNVqfOADH+DSSy99Rv22llfTxJt2b28vxhg2bNjA0aNHqVbr1Os1u2YJ63UPo4goCnAch2w2SybjEfg+BoNyHC6/6kr6BgdxXY89F13C33/lS3zn7m9z3XXXoTLCloOAFDbdei2t19n+/lrRu9UgLmdKVoJMLZVw4r0OQ42XydLd08vYkSMUerq5eO9eRBRy8PFHaC7NI3Q8XUiek8Lf4AhLZEPko4M6jrDENM3Ilj6QEoSTodjZTXdfhanJGcpdfQwMZEjqySWMbMa090OSb9rGIHYasNmnKhGJU8dGuOy9FWirA9JRLjOTzdBoNCiWOhjeMMLRwweZn52h2NFBqViiVvXRyuZhBmGIIywBgZAG44IwmkIuy8jwAP09nTEznoOOc2AlgAlsHwiFkZIIQYiJYZLENNeaQlaysbfE4mSTAw/fy+Rhj2plCW1AKQ/PLdBR6qNQLKN1RN2v0qhVmRkfP6P91iop6gOrIJu4WK4wYCJNPp8nm/GYCRoUslAPpzh8dI7ZuUdQwmN6co5gcQFXZjCOE0c/I4z20ZEfD8DI2o+uIJMtUvdreFmPXF4xNzPBUmUaPwKhctap6ofo0EeYEOVaQ15lM5Q6eunpHHrGbV6YmU7JdUrljjivVuIHQewocZAJHbcRdi9K0BwxnbvROo0uxbYxaI2UCsfzWKxUWKpXGRgZZke9xoHH9jM7Pk6t0cARGkcYAm0skiS0dSZ1qJkbH2e/hnJ3N929ffR0dXF83NL/b8oWLYpFO0ihiDCWnEyDUdhSL4g4xwuWVxGZxl11fI1JVMyJ61pGLDs3FOKs5YKda3nOGkrLtchjRTcZjfFDR9ZyDvwGJmxiggbHDh1gcWGe0S1b6Sh3EWrQobWOhbJRJRNFFntsAkwYIAHHSAINYaARUUBQq3P82DHmp6Zo1moYrXEUCNcqf44SsQVvCGPO+STPRmtDI4gwyiOSDjKTw1EKT0QQ1bFaujirtIsrQ7AJy5yFBGYyWYIwIrKoplgXjzH7WqMwVJcWOPDoQ0wcPURUqeKEIUZKwjCi2QyIdEixo0gUhXiei5IOzTAkQJFRLiMjo5hGlbETR5hbWqC/UmVo625y5S58IZDGQUrPJmgaSAOjkmdU66ZV8VpLYbGLmSTj5Mhni/T19mP8BscOH2ZiYpKOri6GN26k3NVriQciQ77YzVxlgmq9SRAEyIxDZKLUkLd5qnFNk5kp/HqNrMrgYixbV+z1MQhCjd1EjSByAo4dH2dkfIKO/iGEIxBKIE2EjO+LRttK6FgvlRGqJeoWYUyEkgYT10pxYsamZd2kNSdk9VyLtUQLCLGeNpMkF8cH9ptNBCCVQikPJ5PF9wObmxcnJ4dhGCd8Q2Q0EoVGEhlNEBkL83RdAinxI03GQDGf48CBx3Fdh127d5PLFxHKsjMabVmtEAKhk6LBSaZJa3vE8iNW1gQSV8o0QHUmJIFkdXd389rXvpY3vvGN3HrrrXietybV944dOzh06BDNZvMk5bw9UtFOCf7Nb36TZrOZvpdA8dqPs7i4yBe/+EWOHz/O61//eiqVSophD8PVPYTJ+TzPA6DRaDA2Nsbo6CjXXHMNX/ziF/mXf/kXXvCCFzA5OUm5XH7K/dUuq0VqKpUKgwMDDA8P8/DDD+P7vr17McxEOQrXcYG4vIOBZqOJIyQoiZPxyJdKRFLSjCK6BwbYvetC7n/gAXbGET4hBGGs9FjQ7EqjKOmr1kjIavC7pN9af3umc5RMsg/GBomNwAsQjnU4RD6lUpm5XI7FxUWGB/q54urnU+4o89h93yeqzvP/5+4/nixJ8vxO8KPEzB5/z2l40GTFmqCBbmB2dgdEZAQYQOa2IjhsXxpn4IJLi+AEwRGCK64QnCA4QGRl93+AYIFpmQaaoGhWZWQwD+fujz8jyvagas89IjOrsjIjG9OpVZ5Owv09MzUz1R/5EhWgqVfkmcA4lxIKQEiUVpSbNWcvfkqQlsHOLr3RDsYLAjlZ1kF2NYcP36esHE+f/oJBN2M8GeOEJqgsib54lNYxmXUOnak0F1GQIM6VIoXi73SOvHcIDzLxYfDxXVJbnf5gxM7OPtdnJwxRTMZ7rHdXrOZTgpf0uwN63RpnAsEZlMzIs2hwan2IksneMul3eXx0QEcLhDe40F4dScc7FB4vJVZmBKVBxfm1pkZ7j8RRr+Ysrk64Pn5KdX2G25RczSxCKnqjXfaPHnJw+IT9wwfknQEiWJpyycXFBXX1zXkvbpPXVoocUlGMyENN8UqnN0DqEmSJEHNmNyeYtaFaKURVIPIOxoMTnhAM2DXB1bEAHUxEFniL6hY0TcNgsMN6dcnVxRmL+RyRdbn36H12dvYxzmKqijyTSBFlwl0IrKYrVjfPv/Y5u+UN9c0FZlAgcx09xgIUCTLnrUPJqLLng99K7IfgY3jqHDohdnwSzHJJDj0IECpjXVWcXVzy4Qfv8+F3vkeRdXmqMs6PX2Cb2Lkz1sV9PsR9SivFer1i/eJT+tMbbqZTHjx5TFVu+NlPf8ZofMBkJ1oeSOfwPpAJlRRiASRBxgS3NS0Orbx/io22nnU+ILwneAki8v1tKswGpWPn6lswvrWJ0hsAiRYuEdw2c/fOELxLcDHH1c0Fs5srDg+P2N0/oPEh8pJCNHTzroo3h7cIbxC+wTdV/DcUUhYIF7B1zXqx4PrqmqaK0CABBClufVtTcOacvZW7VGq7kXf6E0b7B8w2G47PrikGn/IegtFkD90bIlSBf7d7xZtz59/EzUKsgKgsoz8cUq43WJs6Hds/CuAd3la8fvEppy+eU68XyKYhuIATDuMtZVXhBFhvUSp26wb9ITJEaeiyacjIOHj4ATZ41psVZy+fsp4vuf/Bd7C9gtFkl+FgglQiwtFClEWN+9pXn5jPg8W8jZFvN+/GNBRFQZ4VvDw+Zjpfsndwj8N7RwyG4wSD0yjdpz88IJ+VrDcGaz2ZDqQ6JoK2Oh2TGKk0CBk9NLwFb/EmVdIIqZkmEwE4Y71Zs1qvU7Id76t24SWEKAMqY5IkhcBzC1sRPibsEs96vcYaA7TKQPKNebk7vqzyW5u0ts9h22FqK04+BEKCGAyHY7x1ZEWHqq62LX5nLVmWQwhY5+IG5D0WgZISqaNCldtsKOuGYYIIvHz1gtHuhMePnkS/CeeJUvuRCyZVqoZxmyLFzvMbVsYpqGwhBREz/y6C2X/+z/85f/AHf8DR0RH/6B/9I/7JP/kn/Lt/9++2cttvS31/3vj7f//v8w//4T/ke9/7HsPhkH/zb/4N3//+9/nP//k/8+DBA/7u3/27/Mt/+S9/5bH863/9r/ln/+yf8S/+xb/gD//wD/m93/s9fvd3f5e/83f+DpPJBID79+/zu7/7u/ztv/23+Q//4T9s//af/tN/+sb7/dt/+2/5nd/5Hf723/7b1HXNBx98wJ/92Z/xB3/wB6zXa/7O3/k79Pv9rzxvX8QfC4B1lhevXjEYjhkOxmiVo1VOnknyIkcphfceYwwtWc06j7AWna67tZanT5/y8EFUgVwuV4x3x3z03Q/44Q//O8PRkJ2d3dgREZHAHu4ci0BEGfLQrh8pbGxvtO2CGv/zeZ3sdztatcsQBXdCTJpC8Ggh8Ei8twzGIy5PXjObzzjcO+A73/kOfrPk6Y//DF/XdDodnKlQOj5DKJWeB4HE8/r5z5mvZ0z2j7j/3kcMd++hdE65KVFZTpZ32D884Pl8yrNnT/nudz5C9wf4lMQKJfDeJWj3rZBD2J6D2H637Qa/qxkKfntpgmth+Q5UQKBBOCa7B8xvZlR1w6Db4d7BAaYqWa83SF2gVYYUGi8jSb7IMzwmymMHjxOCQnrsZs765oLh/hFCCwIxuHYuEfSVICjwIu4RwVbI0NAsp8wvjrk+eUk5vaRezLAuxEKlE3QGQ77z3d/i/pMPyXoTZNHHI9F4Jr0+eWfI8fHxO5uzt4cQtwmsSNiOTCmEjYq/q8WcTGV856PfoCrnnJ/9HGcXSGvQBLT3mGi5FJMF7QkYgquimiACvMDZ6FHZ1Mv0XjXnZy9Zzha4Bnr5mPF4j72DIxpvcU1Nr5OjpUBLRV0bTl5fsim/fgAfNktEveaTH/455cNHDEdjZLrXi04XFwJKaYpub2tPIIVIqX8sLLlwy9UNqQoXAljnkTrDB8l8saRqLFpIdnb3ePDoCevFjJuLFcE5lMrIdVSSDD6gdPRB9EJi6orpzRV5t2AyHnF2cc3Z6Sn9wQid5zjnQYnI42wV7kJITtUiFaIDJBRWID4vEZ4H3lpwHp1ltJ0nEUISoxDfGm7PtzZRaqVQU/8I0sUNbWafll7vDKvZnPPzc46O7rN3eD+2aFUefTaCQ3gXkyNnCLZhs1mxvL5gPbvGO8/O/iG98T4BBdYkMQe2/B4hAiLIdHNFnk8IAefBWI8NUcBNSslkZ5/v/ubvMDl6yKuLC55+8nOOj4+Z31yyf3DAh9/7LQa7R8jsmyNmvl02jw9H3On39g/YFCtU+2BsIUyxjbxaLDh5/ZrNaomra4KxsSMg4gLYBsyNaeh0ehS9HoPxiExarI8BunESdJ+dwwfk62tOX77i9Sc/4/XLlyx0xnd+4zf53b/215FZIGBQWQeEBgRfVePi84KUt4OYbXXYx7byarPh2bMXnJ2c8+jRYw4OD+gPx+iiC1KDUBAsg/37jFYNi9UKUzWxyioEQnqc97ggQcakcf/ggJfPOtTLZSRrpgBOKUmwEZAgVUBrjdEa3euTFUWCIyYfA8etT0RKktrrGIfYflJaE4xjs9lA4lXcLojhCwPTLzNavHNIEMOWz+Fb3HaIvL8sy8iLAh88nW6X9WaFMQZrA8b5+HCkBFULCEiCEAShsCi0ysjyLtZ5lqsNSEl9M+PVy1f0+0OOuoN4LUTqqoXIvZOp2rellLeJ3fa63yZNd8O2dxGk/fZv/zZ/+qd/CsAnn3zC3/t7f48//MM/5IMPPgA+X+r77v34j//xPwbg3//7f/+Z3/tP/+k/fe7f/at/9a8+97V+//d/n9///d9/42/+5E/+5DOve/dn/+Af/IMvfL8///M//8zf3pUg/zrjbb4KsN3cXYhFgftHD/nw/e/w137nr/OTn/6Ei6sLrDUoJSmKPFY9nacxFiElDsh1hD8H7/j5xz+lKles12vOLy8IznLv3j3m8wXz1YL/9X/9uxwe3EMqiRcyKYqlkECkmlGILNl4fOm4fZtUke67N8/h7ud3PuIDt10ERILSKqVwNjAcDLkUgrPzM/rdLuPxkKP7h1y9GrK8WiECsTqeTKPa4osSEkWEm68uz1jN59R1w+MPA/sPCmRSvsyVZHdnh+tBn4uLc/b3JuzmXTw2Chm0HEnv0FonBMiduQkBl4xv3/WIYjfQwoi8j90k5zxaKmyIcPjhaJer82fIUNDr5dw73OX16xOuLs+xPgkPSIknIJRECo3WCudM5GDOpzz72U+Yz6Y8sp7R4SNckHiZY0Se/q6FYdcIW2OrJZubU65ffcry8pRmOcdYh1AFCI1UOf3eAHSX7mCf3vAAI3OszPEBtBbUpkIUXcb7h+987trhaRMPsV2rQwh4W2OrNcevX7HZlPTyDrv9Rwwe9JleP2M2PaUxDTZ4fDJEdcESnMP5GpxDEeHi3juMq3ESsqbCOMd6KWiakoycTjZhd7LPcDAhKI2Q8fWMc+AFm82a2c0c03juHT342uc8vbzElBuuLy64eH2MyjTj0QShFJ1uj/VqQ1EUPHj0iPHhIcVohNYFQgicUAnxEc/NAV4orACXCnRSaUaTCYvFlMZY0BllY1htSowNkZfsLJ1Mk+c53nuaxkJwKKlQUlBVJUorFrMpj0Yjhv0+L1+8YLK7z6HWSKXjOtZ6gRKfcSFTrpTOVYo7O2GIQhKmbnjx/FOaTcn7T96j2+uBivtsCA7rLOob5NL/RY5vbaIUgt8GN1uZ6wQj8s5H6E3wLBcLfvGLT+j1uuwe3qfTH1Gb6OuD91uMq3A1plyymM04Pz2NidLihuAs5WrJg/cEneEO1hps3Wzfx1mHUjFR8KGFEMRKgvWBWBSKMuAq61D0huT9Mb2dQ94fHzAY79CsrnHlnNXsitcvnvJBd0CRZd/g3IXtJp5mLVUhBb3+gG6nRyDg/G3A28IxyvUmkumtw7nYhvUJfuDawDnByaTOGO3tkw8GgEOJWC1SUlGVFbPZNTdXr7m5uabZeJbXS2xvyNXxKa9Hn3L/wX06nR6ogKQTcbrhq0ES26Tgl8lftpuobRq8cxwfv+bi8oqd/QOOHj5hMBohlUYk/lZAghfIrENvNGJVliwWc5QS6DxHZjkyGciFFLTv7OwwHA7ZzGagk4eJir5BSrfVmkiOkEpz7+gBu3t7SeI+mrvKkML/Lak0VkzxgkjODnfaKGErp9wpittqrngzeHtb1OLLBHS34gdu+wz6hMluOT/eR/hJCAFjI4QkywqMdRhn8EHQWAdCoLUm6CK+trPULhBqi/ANCEHdWMpmRpZnIMF9+hxd9Cn6I4ajMUpJbLCRdJw2h62aDyBCKw0MpHu+heB9lU7Sn/3pf3vDn+ULuyEh8P/9//y/Afhv//X/pIWyRmRrhFQEbo2DJbF7G0LsLnrXML++pqlrDg+OUGSAwiiJl4HgImdCttzMVNjwCJJ05RvX+Y1qvvwscf7t37srLXu3G3D399vzvHvOnzcPv/fX/6dfOqct9O+zz6bHWUNT14zGIwajAX/vf/vf+O73v8v/77/8Z3728U9j1VSIZMyY7k0fxUWc0Gid4bxlPp/z9GlDp9MhhEBZVvz3//4jvPdcX9+wv7/H3/pbfyt2lHWBDB7hQ4SppJkTPqRknm0AfrfrtEX/f8F6865HQpFtOydCRJVAlY5Ja814ssOzq0umsxs6eztsyjXgyLREGkGn16WsNxH53Z5H8AhrwFhss8GpkrnOGXQHjMc7yLwX132tkAKO7t9nvZxxeXnFYOcQJfM760Q80nYawhb66tsfxA7UO65Tx2JUu07dTlBIHW8hFKic3mDE6tMF85s5u6Mhg36H0bDHfLHENY4skxjvqRuDDBaZSbTXBNdEJIoTLK7PKasKVM6HvSF6IAhaYHXkJalgEWaNqaasZ+fcnLxkeXWBW6/QzlOQIbtDZG/CaLLHZPceeW/EfFlRGokNUSBICIkPHhMEUmVIlZMP3+m0vTF8cFGogLZpGgNq6xqWyxnHr16xnN4wv7zmoD/i/r0D3n/vdzjvH/Hq5SuaeoXRTSxMY5O/ogUR7VhkKi4YB0GLBOH3LOaLWMTOJVmvw2Syj847uCAizwzB5fWUzWKJrwy97oDDo4eM9/e/9jn/4K/8Di+ev6B2nuvrKwaDAc41dLMCmjXXpy+oyg03J5/S3z9keHiPye4ew9GY/nCHrOiAUDFREjIibUQsvhAapIDDg30uzk+4vr5mb2ePujbMF0sa59F5BxE8Ut/uZVmWYa3FeYNzFq0zEIHNekVVbuh2cp4fn3Ny/JLReETR7eCdicmSczFucG0hRSDFbeG0FWoIxMSprtbgHU1d8vrVC/qDPl4Ket0enaIA3iwG/WUe39pECRLkJ7Qme7Ga1sKznHfUVcXx8TFBanaPHlL0h1RNhB/hHME0OFOCLVnNLjk/PWaxWDAc7TAZD1hdn+CN4frsNTrLuf9YR28kZ2kaE1uo3mOtJWhBJ+/GbpIXNNbjvaDo9VFBo/IexXCM7o8R3QFeFehc8/i9Dyl4iN9Mubo44eT8muvLMx70B9/cvKWk8nYe2RJbvQ+xu+GjTPN2Y0utWKk0SmqsdTTGRmhiGyA7mwIGSfCQd7rs3TuCvMAIgQwSLaGcX3P24mNWyxM2ZVSbMqJgvLvHwf0HSA3Hn/yC1fSCJ+8/YWf3ACk9XuQE8fUSyLflfd+el2h8F5jPZlycXzIYjnn//Q/pj8aoLEfqCJ8z1iMEZHmGcIHxeMRmveD85CWzm1N2dnbo9gd0+kNk0UuLkGc46HOwu8v0/DR2T7wkSIF3NqoGCoHQiiAVw709vvvd73F0dB+BisGfDxGOmK5crG6na4MAGbHaLRyoTV6kFAwGg+hVIeQWTvR2kPzrEM633aNw201qv27vi1ZoRWlN0elFUrJUeKEin0qA8akzLAUyKLyA2lrKssFYi6dEah3nO9MEqbHesSqvENlTBuMJH32nQ38QZaCljEGEFLeKZFuDvJTExXvh9ly8vy20fNlxtyP36ySW8ev0zLXYLkAk6AbJfFd6hXQKRM5oMOZ0fcp8vaI3HKbCrgMbgwwfWrPhlqNyy0FsYWLtMbRDCH7pNvdF98dXHV+lY3n369l0ynQ6RWeaICDvFnzwnY+YLWd8+vxTVuvV1sCy/VtnDGiNS/yzIk/d2ZQg51mGzQqUKjGmxDQ1P//4Z4yGXX7nd34H3RP4oLYcrdilJHUp26cwnV+bdKdXbzkLbyeL73KE7X/e/nn0IhMqegMGZ9ndP+D66oL5Ysa4m1GW0TQ7zzOgwZoGJRKn0sduvnMWh4lJhhSILFDOZlydnnJ4/zGj/S4ej7VR8ng0GbO7f8jFxTmTmxmTgw5FoW8LVTLuDfEWTbiPt07iXQdfIhWe7kT5kVAvYnfIp98RmUZKwXK9xFZL3HiIJOB9FUn0QRNwCOFxweKtjCpwPtpIKCXxNiCqDdeXZ+zdXLCT5wgRMLbCeINvVtjyhs3sjPnVKfV6iWsshe6Td3r0+hO6B0f09g8Yj3fpdgcImeFOzrmZLamtQ3fy7Xk5Aj4R7cU3KA/eMmHjpREJ0GMJ3nB1dc5mvaSTd6BZsVo+59hccv+97/H4O79B7/Axnzx9yrNnP6dZrygIaAch5FQhengljYGIvvAKYyOszRuDEqCEZjjaoT+cIGRGSL6OTWNYr0uqsmEyGLG3d4/+aIx7Bz6Uxc4hT7pDRodHnJ0eRxuY6TU+OLp5xrCf4SqDLecsztdcnz9D6IzxZJeDo8cc3H/IZO8AoTsoobAmQBCxsIVDaOh1cpw1PP3k5xQ/+K2IiErFrSzLCTYWCVUqaBlTp4JjQpKIWAzyLmCNoTfsIYLj5PUr3vvg/bjn6yhJzzYmAO+T2IoE1SY8AuIeCN4FiqLg0cOHhMN71FVFVW44Pz3BJgEmpWLX7O//P/9fX3uu/0ePb22i9BmY0fYCe2SAqiz59OlTmrrhwaPHDIcTrPP4JNBgmwpbbmjqJTcXp5y/fokUnoN799g/fMD12TEiRFWWulxyfXFKfzgm6/QoyzXWmhQUxmNxKQATUuEClGWDDQqRZWjdoeiNKIYTupNd8t7gdrMWEo+iM5ywLxXTVcNyPic09eec9buaO8dWYrr9WVsBJgWNIvE1/J02eyLkCqUxiU9iYKuyFlysMiFBhUDR7TLe28NJtSXwzy7POX/6U9bTY/ALgvDkxZDD93+L+/e/x/54iDFrlusbbmbn/OLjH7N/eMThg/fojXZR+VdLID8v6JNSbj1YbrsrYJqGFy+eI4Tg8eP3GO7skhVF5L0IAVKgNDGYCBaCoTcoGI+6XJ0+Z35TMrs8QRcd9u/dZ//+fTr9IVVZs7g8J3hHrhW+qVAi8gsi2TnOkw9xkXr/w+/w8Ml76LyDFy20E7buqvFi0vIxAm1FOXVZvUX42O1Zr9fs7PdTAtXymm7n46sExK3K3V241Bsfvj0iSVZ0GI0nTG+uiH7EGTID09REEm5cnIPzICQmSJxUOAkhSJyDTqdA50XEWiPxtuHs9IxPnz3j4N49ur0uQUQI0TZB+kxwfhskh/D2918N1/55XZYvN1J1ItwG1iJED5/lYo7zOb3+ALxBCpgMeizmVxQ6xKo20aRR5h2CjFAUE0jPbgzYZfCfSZK2HaP2KD4nifqi8TYk7ov+/U3O3+c/f587I3c6MHdfz3vP8ctXNFVN0SlwBKLjJfQHfTrdgvVmHdWmnMMYm+CdFiklRsdgfTQeIaWiqmrquo7WDyZCprXOMI3h5vqa//rHf0y1WfN7f+N/pjcYRV+SEAO6QOvrBlrcgsUEMZny/k536Zc8Y+9ibLszqWMTeRDxQ0mFc45MKawz6Czn6P5Djp//nNOz13E9VwpjLblUlJs67qFEbxshFD49EkqCsw7vwYQVi+mMcr2hv+tBZnhPVHkD+uMx3FxzfnFBpz+kl/gczgWkJs6gCrdrkXir4/YVuru/dHgBIQLySQbd20c/QBACpCIvOvT7Q2YXsFwvMeWKbq+LMzXOBkLq1Hts9L6zAS8FAo+W8QkOIVBVJcxucPWKjJpyuWJ2fc5qdkG9WRKaElyNQFB0hhSTHcZ7j+kNDxlMDsmGQ0Sm0FqlQlggZDmLzYpNtWZv0MM4E33DiJ0VhPhGYIvtCKK9x5KCYWiJ/o71cs5kMmbcG6D8ipuzU0q75MVZQEz6jI8ecS8YfvH6GdVa4J1AmoD3gkYqlEjqrN4lk16FDhopo/lsrhS9fp/x3gFZr4cXIt3igVzn7O7uwWSXXqdPtzuALHLJvu5oih4q77LT7TM6PKTZrFhPr1hPL1lML9lUG4wzDPsFncwTfIMQBlaGm2dTNlcvmO4eMNo5JOv0uV6saYyL9i9S4YPFB8uwUHz8i2cc7e2zM96l28lRUuG9QSlNK67gvI1+ZzIqc5JiTWMNUmYopVBCsjMasak2LKbXTCYTpFKR4y1UtNAQMVqIKn1RuEsQu+OyLfyFgNY5uc5QQjD0nqaq6A+6LOZzZtMZ6/WKzXr99Sf6/wLjW5soxUXuNklqA0elNIubG37+8cdUmw0fvP8+w8kk4ojrClvXBFNTb9ZcX55ydXHOerVkNBhweHTAaLKD9T5l7RIpwbqGxfya2fSa7sByM72maWqCdwQhyPIOSkIQEuMCpq6paovIMnwQaJXTHe2w8+Ahew/fo+gPCAR02ixcUFReoHo77B4+YDad4pvyG5w7marMtOUFRIJ1JdxUAiqkqjmtkaihbmrKuqG0nsaB9TIGLUlaPLhAkWcYAo13BB07JtLUTM/PefqTH2M3czQCS4+dw/vsP/4Ok3sfkeUjCinpMKS3O6G/u8vN9JLpdEFZfsLhvSMODo++8ml/XuD8dofJOcd8PmU2vWE82WU8GcdgVMaqstKK1lhVioDwhmBLBI5+N0NJz3K9pCJuwJv1AmNL9g4Oubm64eLFKavZlEwKrAix0iNo65oxEZWS8e4uj548odMfxi4m0b/hNqy/zZGCaEmZt7CIQCyiCiGo64a6rqOUp2iv6Zvn33796wUot0l0rGq5bTW/DcSd99v36vT7dPsjlusSkeRObWgIRLUi7wXCCYSOcMZc5Ugfu2bWRQy3FwrXqvXIjE1ZcXJ6xunpGcPhkG6vg7UGLXQqRgR8cMmMVm79wbgTVHzVoCyEW7WzLwrw747PyEQHub1eon0O8eAsq/kUk/cIPUU5vyZzFWY54/jjn3Gd51RlRWVrBru7PPnoe/THB8iiBypHpk5VSB3HL1R4FO1/bo/v8467vZ5vn8cvO9e7r/emyuYvH58HZQwhwkcX8xnj8ZBut4PDUdU1FxfnnF+cx65lFnmM1lnqusJaFxNvpci7fXrdfqzCpmCvaRrqpolBsE+eNs6wmC35je99n1/87BO8k3znBz8g05qiKOj1+/G4vCfPc5qUSbRd9uVyze7OLp1OB6n1Z+b1G0mW4A5o5vb5VipCwGMRT+K8oz8a0en3OX3xCR3vYrDlQ5IQ1ljTxK9DQKkivnaSNPYBbLAEFfcK50L0ZhEtpFVQm4ai248Jx3ROvd7gRyb5BcWkNHK+4rG3RYZvYFruDJEcA94UcqFNLonXRecFu7sHXB53qDcryk2VTMAVIZioiCsULknQZ/K2g+iFikqxbePaGoKpuD59yenZGfVqSr1eoJViMtllsHtEbzCmO9yjGO7RGeyB7iHyHkEphBIECd41KCXodHOk8jiX4GshJrNRjOzNouc3M4UpYPDiVlI+OKbTK9arBePRkFFvxP7kiPXmBfPrc1y54Oef/pQPVORnVTWURmG8RLgI1TdeIHGo4MHFmKiQgswFrHXI4BBakRUFWb8PWicxoiiOJZVmMp4gSN2oLAOtUerrZ0oGDTiEzqKAR7fHYDAgHB7SbJZkeZcXn35CU66gLunIGi2z+OxIGGpLbpfUNzWz2vD65Jzlao1xgCjQeY4uFE1Zon3N1dkxhZR084xukbE2m0RpEBjncdYj7sQILbTdOs9gOKAouiilmIyH1BcVl+en3Ds6QuvIUxLKJ2lwSerhRSVh4nVFym1MIWRMWAnRf0kgUVnBeGePXm/AZHcPY2wUe/gWjG9tohT8nYp6O4QguFg9z7OCRx8+ZDQaYk2Jq9e4coOrNtxcnnN5dsr05oai0+Xw3hG7h/fIii6li8aXQSmk1tQbRwCsNcznU5abkvPzM9abFcFUSK0pdJGKmwrnYL2pMT6ghcQFSbfosXfvPvuP3qezu5cU8iwyOZwHmTgvErqDXebTOab8BhOlbZjNbeXfh61hI7R5j0iQOgPJFXw6mzFbLqisp7KRl9VYhzeeTKaukvF0C8ViMWc1X6CF4vXTp/zipz/BW0O/1+Hw8AH3Hz1h9+gRvfE+XubRaC0ElOyQywF5f0BvOKGpNpSbOdPLS5rN6mudeRuI3a1Ub+chBJx1LJdLILC7t4POVJS11Qmm4R0SR64C1tQ0mznr5Q3OGPqdLuPhkOV0yqZco6Ri7RwvPv4Z5y9fUG8qfBMwVUVwDVoIdJbjpEGIgFAaoTVSZezsHzAc7yCkwqZkCiFiJcrFBH1rECwESJ+0iN58JEKIIhsAeZbREkzvMr3uBrG/VnfBJ+W9BHdy3kXIXeK2uRBwPiASfy3LckZ7+1xO5zTNmrKxOKFSEhq2EClCgjgphRAeUxuM9XhsTPJFvA7ex2rYbDbnxYvn7O7u8ODhfZAhVreDu/UxkbHa1oq8fM7Z/NpBbMt/gjcD/Dde9XM6MG/OsdgWJkR6HRkiTy0LNXZ5yfT1M04++WlUw1rNGXS6SCFobMPs9FPW1xfsP/oIPZiQ94bsHdyj1+vigwCZfWGQHvjsdf48vtrdr+/KYH8RrOyLuG9fZtx9zfbrmKjBo4ePEnlZsylL/uiP/ogf/eiHmKrCWkuWCM9KKZTSWBONtfM8ZzSKBQ/TNEgdPXyc84nPJHA2PiO9To+6MiiR8X/7n/4f3Nzc8Kd/9H+yXC6RUnJ4eLjtVA2HA+qmJAQi/8kGOp0ef/N/+Zv0O93PPbdvaoQtjrJ9j1T4gvQMSIKMSq/jyS6vnoGrDLooUFlOvaogyK3qZAIuIpIZuyegshxnAR+/llmBUFlMtERsdFvvyTsdBqMR0+sbqs0Sb3bbQ8IHhxRxnWebSMeEXoq77K53ONKjGRPW23vLA0LJWGEXAZVpDg7uM7/3hHq9YbUuwRu6nR6bcknVGLSOgkLBJcXREINLH2IrzgWHzDRSwvnrlyzXS8qyRAvo9wbsHzzmwfvfZ7R/H90dQdbZWjrEtK3BO4VAp+czquoKacgLSZYLnG0QIid4kqrv7fl9U2OrLuzbhmXsAF1dnhN5bgV1VVN0HzLc+yt8etrQuIqrxWvKSqLUkGAzjOlQe48PBo/AGIdwhkKCSvXWTKpYXFUCjUbrGNB7JbDpNtcy7nZ5niGIcG+VdRC62Ca+X/+kI1pCoqI/IQKV9wgyo8i6fP+vjnjy3d9mvVxQLc6wm2vWqygSsy43rK9u6HVKBv0ezhqq2SmbxYIQBFWjECqeZ9CK3UHB4vqMrtJMJnuMB33qzRLjHTaIlvmQijSAtxjnt2bFRaeDUlniJQZwhuMXz7h37x55nqwSWs9QJWNXVUlC0NFPqeWhxuoZ1odIVEyS5ErFpNRai8g1he6S+5DQLX/5x7c2UYLb4PYWbRAIzrGzs8ug10cjMU1FvVlgyjmr2Q3nJ6+4PjuHEDjc3WXn4IhiuEstM9ZOxaqTqxFSIVWswimlouLbaoENa2azKXVZonDJe0VgvcPKSJ5trKVqHIoG2Sno9AeM9/bpjSY4XeBCQIvonYPMsF4idYEnUHSHdLtdvDXf6Ly9MX/+TYd0iA+lT2qCQogIs3OOxWpFZR1OSCySTeNpjECLHCUAFEJkuMZTLda8/PjnfGIdF5dTvBM8evCED99/j/v3H9IfDtGdPl7lmBC5P1J4lAQlBVJ1EQryTk5/0Ge9WrJczL72Od/93Aa47WdrDcvFnF6/x3A4QKi0SLfg3oRRrzYrri/OmF2dUi3neOcZDUeMhxM2OyXVpqZal2ilsCJQzuY4Z8lUERMdZ+nkOZkUrDdNVIEKgWAdne6A4WQXpfNYqU0LqneRUIvzCaKQEl6RVLnuaspvzzN2dKRS6EzH1r1+UxDjLkzt1wnmWjhmy1XyaTNFiC0pX0iJsx6UjpKmCBrnWK5L1mWFEIq80Mg8R+kswn28jxLMRK6T9Q4XPMEBwqQOg8HaGiUlm82G4+PX7O3tMRj2mIwneG8RSYq4rS76YBHJmBaIwWP49ZLDu+OX8d2+aL7ufi24FUVu5VXi94JOt8fs5AUnJ8+5OX/N/OqE5fwahCeEPg+ePOFIjzh+/hK3mnEwHrBygVcvnrFZLXn/vffIuwOC0NuA9O4xx4PYTsWbx3UnwflV5/Wr+Fm/bsDy9vu295hAUBQFZ6dnzGczTs7P+aP/479Q1zWDfi/aGyhFlmUUWU6vO2A5X9CYhl6/T9HJqasa6yxaRuSBkppMOWpn0xofeREBycuXr/m//8//C9//7vdpmorVaslyuUQIQVVVGGPo9XvoLK5b3U4PrTN2JnuMxqOY0KcJ/ia7SS3BfjtCQL7BGyR1okVcJxAMd/bY2b/H1csX9LpDKr3EhAUixOfTp+TdBR/FIGTqUEoNWiBURm8woNPr0doMhOBT0SYq5U3GI5aDPpvlFOEfEExA6gytIr9M+JicBLm1O9s2LX4dnuSXG4Kt6oZIS+O2OCFu4YZSofMu9x68x/npCcvZDNM4er2cXqdPWc23CXVs26aikJCI5NHkfEAJsKbh/PQYY6Pqp+oMObj/HR598H1GR0+QnTGG6M1DcIjQkAmHFA5BEYtP1iKExXrLejmH4Mi1TsWAeD5SJH7S9sS+mWGDR/h4zsFFH5S6LFkv14xGOxRCspqtmS1rrpYFi2rIal1S1xU305d4l7OpJI1VeKXwIuCI+4L3sTDkhMQjKIiCB1JpchWQwuGdif5D7UopxDZJbeOzNglu0R9fd2SiRY7EfcI7ECIDpRGyi85G9Hp7DA7A++/g7IamKik3KxY3V6yml6xnN8w2K1y9IcsydsdjnLXUdWBTVSAktakRugAbWC9mFCqLcVcqmDkfMDZC75SMhQXnXdxjpSLLc7TOqJsGKSVNVaEkVGXFxdkZRafLaLJDpz+IPnN5Hp9pD9HGJKrMqnafSHMXbRBaFEuMc4PWt3xeaF/kL/341iZKLQ+DELY8zbgOSlTSr7f1mno1ZzW/4Pz8FZdn59RVxaA/YG//gPHuPqgCKxQubRCN9WChNgEXRAz+bE1AUpVLjNcpCBNopckk4AzWBzZA46ByUUzTeUsuBeQ5ujcAlUUpchXbmsFHeEQmRRJScGSdgqw/Yl59kx2lu0lmnMe3K8OBQEtabeqG5WLBxfk5z49f0ziovWBlHKvKIWUHXeRpx2vIOgX9TkaeS06OTxmORnzne78VuUYHBwwHPYosRygduTdCk+k8bppSIO+scSrvIJXGa0snyLigfM1zvvOT7c996oTUTUNVV3SKAiFAaRUNC4nwt+Bq1psl569fsprPKCRU6zWb9Yb1bIV8qHhw9AQtCl6/fkVdrhHCIYLDVDWb5M6uRMB7S23cbSdPRLz5aDzm4OCALM+x22txuxFKeQtl2nYF0kdMWFJ1MkRIl0mqd211uMUh+wTREe1rfIX53M5f+rg7n+1n6z3WGK6ub3j5+pTr2ZJNY3Bpc3eNQQdBFgQh2NRBE9tugg8uGdMGmqa5I3UaGSOmMUynU16+fMnO7pheXqA63aTWlvxbEn8ktFHSNllS3Aayv34X5O176ssExdvfT75vINK1uOWZ6KKDCJazl09x5QrpGoKtqU2DCQ5/csJOlhFsFK3ROuf+vQfs3HvMs2ef8uMf/Ygf/PZfpejnn+kCbcfnHGP7u3fPo4XefdE5vctOyV243d0E3hNV5harFRfnZ/zkh/+d+fSabqdLXZVY5xBSJX5aJET3Bn1y30VnWVQsM9CUJSFkdIZDlNAEZzCpWytE7GIiA5fza37+4il/Y/9vkPX6HIzGPCzy7fkKBFLdwi5l4oVJFX3THD7CPflmK/0+fHY9uzuP6bt2pcMLQdbpc/jgCeVihVtM6QzGLGdThHdIGW0hPLFD7VoRYZn2yBAtBoajEUVRYEyNFyqKp0gQzuJ8IBeBQU9zcXbKcn7EYLQT11JnETqa0MZkQ0TUj0jKk8IjpHqn95R1cc2NiPNY/HQhpkneRBiXD7FCr3SXzs4hB+99h+lyQbNZEoSiW3TQLFO3zeEwNHiUUGQywzuBMw1CNjTVAmNl8twZkXf2ePzd3+TRR99nNNkDnTh2wgORGC+kxAuN92Jryisl2CYq616c3jAYTsizfjIeDUmJ7s5q9o12lGKHPpNgaZDSp7VYcXTvIdfnpyw2S26e/pRn53M2QbEJAxoyXBM9vhyBkEdxESFyhLOgAyIvaLyPncrgkU6iHex0O2QCfF3jvcGbEhWiiHwAglQEJXFR255WL1GJW6XPrzOUj0gIBMl7Mr6n80nkSgh8kr43IsPrAaJwdAcN3d2HHNRrzGZJvZhSLacsptc05ZpyvaTelHSrksV6iXCexnm6eY6tSq4uz3HW09Q1znmM9VR1TdNUdIqcTjeDINBZlrqZltVyHhMloQi+xhqLRHD2+hXz2TQWNvp9huMxe3t7TCY7DIZDRN4lCpSEaDobRES3pOJKaGHTiXsZBZgixzk29b5pzOdfzPgWJ0okBbC4rAsfhRyCdzhjsNWaenHF9ekrTs+OuZ7dEFCM9+6xdxDxwUYoAi3WM3YKmqrk6nrK/Ow11fWUzFtyFStm69WcdRMIITqLF1qRBYutSmyQBKPxWLyLHZFOp6DodaisoXSeTvDkQiCDiFLiQiGDjMkTNVKmCmGWM/sLIsm1JOBIQr5DzCeq3i1mc549e8bL41dMb6Ys5gvKsuJqNo8S4FmBVBlBKbyOG2Zv54Df+2t/hdGwB94x3hnTm+yjs+gxgJI4paMJr4wfQSRei2jdzImCAyFL3b0cREanP/5K5+lag9bQVkJiwCxlFPRLKQfeWSSKTOfgFbhA8A0yC3i7YTGbcvLyFWbjeHD4mJ2dCU/dz1gtfop1Ndfnr9iZHPLko98iG+1xfvaS6fkLtDFgLct1hA71uh2CdTjvUpCQnLQFaClwpo5eGyJuilLqWIENsYKJbM0wI88phBgEbPuBIXmLBaiNw9J6OYjbBGlbaaYttm432y+D8L6bYHp/O79t4h0AYy1NExPtly9f8vr8isY6AhKpsmgQ6gLGN9QJKtVKocoU9AoVA1BrLaaOnaosy5LBqCE4cI3h+vKKV89f0i86HB0dkuc5OcW2sxSPycdaWPC0uectVEz+WkHt28H8r+Io3f35LU8sJbREmPg2qFWS3QeHjO7tcvz0mkwE8qzAWxBGMj29wWSCYX+AayzzVUXvXkGWZTx+70P+5L/+EScnJzz+oB/NVrdqbXdjiBb6lz7fqeZ/3jx8lYD/1w14P687F++zwGQy4b333ufy8pLjV68xjUEg6IouCNBaQYLTQVQhCyKar7ZdyLIs2d3dJcsyqqqK+P0m8lE7nU7k9XhJWVX84pNP+K3f/C163W4MSHxIPmQpOWrvqbYKu4WSJX5Y8vJqf/bVRT++3BBtsv05EM/2+OOhKkY7B0z27vHs7JxCaITOiUyldCpJ54z0twSPbWosmo6ATreDlMRqeJYhfRJJsBbnGxSejgazWTK9PKPX66HzHLxHozF4QmjVO+W2s7Mt/LzLeWnXydRFSs2fbUGQcPu1lRKKDnsPHrJ7dcr5q4baRv5My6VsfJqbJOgjAemjymCgIogNIpMUakwIggePnvD4w+8y3DlA6AwbQpTzVwHnY4c8iFbJX0QUi5Q0dUOR50xvpjS1Z+fJftwnfFuYSibjaS375tKk23XBh4DSElc3XJxdoFVG0enhpWa2WjFbbFhWsK4qGusxXuJDXFtbAQ+RYF6x5+oRIRYnIgXAxkJQ6rcLKWO84Cx1vYndNyKcWCq5BVHI9pkUt+vY1x3GxXXRt10TAd6b9JyTNo8It4wd0aQ+KzPIFFJ10J0x3fEDgjPsmoZqU9JUaxazc67Oj7n59CnVaoFSAWk91lZU1Qbv497XNJZ1uaExDc4ZAoYgi6i2C7HI6j3rxRStlyAVSurExfX4eUW9uGIaPFLpaP4+mnB0/xEffff7jO49JBQR+i62SscqwvFSx1IIGQsmQiCES1ZK4g6B4y//+NYmSlZEciPeJn6NBWdxTUO1WrC4Ouf0+c+5eP2cjWkoBiMO7z1kvLuP1J2oWoOOGvchYrHLzYaXL57z7MVr1jdndMOaw1FGkWlkCARvqDYbnPPkOgMtEVLgracxjibESrgSIGVskTsbDcIQFq1aSccoj4yUOCFRIoZHWoCWoKVH+G8Oemet/Yza292FpeUE3Exv+OEPf8Snz59xczONQXdjmM+X1CYG71pJhLDUxmJMhAEsbaC7f4+d/R0yLeN54xGiScpIAZtgGjFBsik4S0TrdFxtcCeI7d5M5V95N4hVoJQctYscbeWkxWKkgMr5beVUuAatPb4umV2dcnpyQrlqeHDvI/b3HiOzjO7ogMBPCG7NZmWYzaY82HvC0YdjRD9nOjulXC2QDnQW2+RSqkgkNxalFXleIJTCS8FqOeP5s0/o7h4y2I2dLULLYhG4ViUIEEGgAlhiZTZOj0+LtgPvMdaBULG9rhJPJwXlbTs2tAFfiEIJX6ah7r1NHy6p8vjbxPuO907TNFxcXHAzvYm4amTs8ohYqRbE5MhaS/AuSvHKVFkloITebn4BH40xibLo0TsHjDGsFkvOTk/RSrJYzBiNhuzt7TIaTsiyHGPMNjlHtAnOmx2mXwf2c5eX9HmdpM/brO8mAo6UBBODrRCiNHPwDmEazMYTrMK5ikyCcwLoYayhbJboIOh2MySGslrSeE/IM4r+kA8/+oiXL19y/8HjCE1BbGWQffpOEiX7RQouREqWtwk00eT1Lhfr88a77Jhsk+63vvfek+U59+/f5z/+x//IbDaj2+1t5e6dNSjt8d7RNBXG2FiAkQLvA/PFIsHl+ggpWJcbqrJCSslgOMRai9Z6myx775nP59RNzaDff+Pa3eWl3RWqeFvYYwsbvJNAvevxxn0X3kzE7x5z/BpciM+VzIrY3ZAZi/kMqXKcq7E2vZaISUHkokAQIfIWMh1pggK8bQhBEoKNJr9NhWsqvCmReGy1QQTL9dUFk729aN6rC4TopGUnBWXcQu8gFrXe5VwJoVMxKSFQtt1q105iOpZYKW+8pdPr8ej9D6jLkqvzc0xjqbwkSJV4MgIZXOQJIZAebBJECiKS+ZUL9PKM/cND+oNhhDV6H420feJPqpg8tz5CgsgpCzLyM9erBVdXl4x3JowmkwinFCJBJNkWp77p0fr2xUJiYLVccnp2zv7eDkLnNC6waTyzdcli49jUzZ3EXND6mtHuZdsim9vy66J5eTSgtd5TG0sWPDIIrPOUmw3OR+uEOHctryb9R7Tw5Xc0HwnFEMUy3n5+W7D0bUgiwx1oZ2sCLzK88ASpIMvJhz10f0RvZ4diuIMVHS5PXlGu5pSrJZumjA0AIWOXXAWUFigXYcE6i2JSdVNFKf8ES0bF+DQEgVJ5RCppEfld3uNNgxeSdbVGesfrpiFYy3sIJkcPUUUBLiB0lgSmbuGLbVFve/bitnn5DTYx/0LHtzZRiu3XaLIYDQEd2AZXr1ncXHB6/IJXL58jTMX+0X1Gh/cZDncROse42FIMSOq6AREoN2uOj4/55BdPuVmscdUGnQesFzgvtnLKIrgoOCAC4GOVXwsQktAAyMS1EIBkNBpy/94+g0JF48wkoRpTB0V0Sia+nvDJiTljfzL6xubuMzC7EFJrOWyDlE254ZNPPuHp06fM5nOssVS1YVPWNI1F6SIFBi4FywKLQgjJdLXi9dUVo73xbWVjfcN6OUflXUa7++Sqn4xI1Za83kInxTYwix8BwVZ94Gs+mdFY19/9Aa2KXewqQlbk1M0GQUUmPHa94eL8jNPTC4wN3H/8EUeP30MVGd4RuQq5xm2igfHV1Tl7j9Z0dib0+32yLGNZ1VAbnM4QAaraUlU13jnykOMxqCygtMY0htl8zroy5F4lTlGCw9yVI04wOpmqsU4kxkIIsX8UImxNBU+3yCiUJFe3MK+01aYAInottXMiv8Q8O+e2H95HCGEb1DrvMMbgfRRXOb+4YFOWIDuxsOAsWqkIj/M+dX2SPced7pQLHt8ErLwDUSRyoGIQGhOdpjHkmWG1XPP6+DXXl+f0ugUHB3u89/gJh4eHFN0eSnbYsoMECBFSPfvX52l9XjD3dpfp8/5t+30KjYJ32wqxc5ZgLVdn5zz973/O9elp7JZHghbWOsqmxrgGpxVSBPCGplzjrcGIBiUFg9GI+XzGYj7joNsl+GQnKLeskhb1x51P8RiTAMatQuCb5/D2+X9RkvjLulNfNO7O0WeEJXxgNBpR1zXGGPqDQcTkN83275SMC8V8PiPPO3T7PXwIWOeQUqK1ZrZYpA5TlA7P8gKdFOrudtW99ywXS4osR2tNr9d7o5N0dx7uJkNvJid34IP+3SYAQDJRvhuyyc+8N+18EoVVfErIe8MRw51dLl+/pCsi7Dw4h5R+G/B53/oqgXUencVnr9osKZc3OKnYlBucM2wWM0y5xNclwVtCgGa9ZrOa0+/l9Md79Ea7WGPQ3WHkPAVPkOm9tiWrd204G6XBb+0KfFSNu/usekcIDuscKIUJAZHn6MGQ8uSSTeWwXuEDVCZgrKGjAhkKLaMlibexsxiUphAZJih6wwmdQT918mMyKCWpsx0QSRVUhjbEj0lTVW5o6ppXL19S1TXf/8FvoHSEfQmdbf2fgvfbJOYbHYHtWisI1E2DdY5ef4BLXOVV41jVhqq2GGNT0eF2tWlXjrCFZYc7wiFxHRQ+4ETAWMemrNG5J1cS5cHUdUzUtMM5i3RRzS1mR/EdfPBRme8d5EpvP9fbqfic/aFFY2x/N3WZ3y5cxF9T1FYymNzjo9/oc+/hExbTa6bX55y+fsX1xTmmqXDSYmwDwpBlMbbKCo139nadamGA0icVSoepS4osp9Pv0i1iF7d0TRSikhmmiRz86+sr1PNP8HjuHT1AFB0a06CLTiwm0p7G7eoSUkL/bRvf2kQptO3y4FDBYW3FejHl4uyU4+efUq7m9PsDdkb3GO7fQ/UnCJnR2BAXYqEwxgKSpq54/uwlz58/Y75cxaq3h1Vl6OhAng3oaB03VSVReAQOZ8FJHyv5KkdqgQgqyqN2Ouhcs7+3z9G9A7o6IGwVYWQBWjURUDHJEn4Lj+h1u4wGvW9s7lpY0+dVxNsA4eryhk8/fcFyscLbgPewWZdUdYOQikxncWGyJopB3Im46rri4uw13//gPijNfHbJ6Sc/5vriAln0efKdH/DhD34LLTU+LXTxWQxb5aP2f7TB0tfEFoiQEq9w60HUwi18iN4CSIHONYNRj8X1Eu/WNHXJ1ckZZyeXELo8efwR+w8f4XPJSlRIIci7mqzIqZaOTAhW6wWbzZzOuBc7nkHQNCaqcylH7iFTkiAkOteoZKB5K7SQSJwBnNj2GwhBbIN64VMaKW/x/dsEqt0lREyC+r0OUu2SZxq8R0UzkwjUC+2WHbiFwHy5Xca/EaBFOIKzDmsdpjERLtfUXN1cM5/PMcaAVlHmVMTigvOpUh2SipzSCMAaA/hk8CljU5aoWuV9PF4J4ANCxwCxbgxlVTMc9GlWG+rZNc30nPnJJ7z//ns8ev8jdu49ROoRxiefmcbFZzs53X+dgOPzpK3fFnxoA+ZYXZXbQNZ5H8UuEoTn5OQ1As/+7i6/+PhTMuFoSktZWmzyrzImKlEKa6jXS4Kp8SHK42Z5h8nOHmVZReNRHdsAt2n2r77GbXepPf43/u2XzNPXqXB/Ed+r7TiPRhN2d/a4urqOHaOQqtZSIaVGAt1uL/rmWYtz8f6G+HxZa7fXoa7rSIyXmjwvCCGgtaIoiu35/Zf/478wGgzpdDo8fPiQDz/8kNFotP33tzld7fG2MLu3z+ddB7Ra6CTJfzc5ErfzAhGq5S2CQK4kjTVIEdBFxv33HvPi049Zza/AO7QQWBdAChqnqBPkLHiHFjI+w6bh9fFzqmqJ1ILNao63FaEpkbYkw6OVwAZBETTSC66f/ZBpMYBiyO79D3jwwQ/I++PodyPi9YsBv9x2Bt7Z8MT9ViQob0IUtIGmDw7nDN7F7vtqueLs5BUnr55zeXbOvKwxJmCMx7pAbR3GeBoNuYoIklYZVucaRMC6jC4FsjtCFH2cULgQEyMJ8bNKQgzpQvl0nUxT46zl4uKC1WrJhx99RFHkOOdTpz6krptOHbJ3OVmfP5Rok7LY8aqriv5gyGA0oTKO6WrDdFWyLA02Ahkih4UWvsa2mxeS5PRdD77232UAYxy1CtSNpFGSTGUEJMbUWNOgMwcqdgCdc4ggU6yQ5pJ30+V+u/jxq4ponymMpQRWKplCj1T886DyHsY0iGLAYL9HMdpjeHCf0cERJy8/5eT4GevFDZkQeAd1beIrhowQHEJGEQsp5ZYfCbEIppRAy4AIFmeapA4bpe3jeUiCD6xXK67OThChQWM4uP8IoXKsNZHnJaOHk0rXMYq8iC8837/M41ubKMlQI5yBZoM1FfObS148e8ar42MIgcODIyajPt1c41WOVRnWthUMvyXJGVNzcX7Gp8+fM5/NYlbuAx5J7WBZewbGobWKnSRCuvEsQUqcCgQpUUoDCqkzut2oCNQ0NTfTKZ3zM6QS7OxptAUlUyU8mYDF7F0ShEJmEimK2+r+NzDeDuAijOl2o22ahuPj18ymc5yL1fpNWWEaS6ayrfGqd54QZKT9hlQh94Fgai6Pn/P0x4pBHpheHLO8OMEZR2e0x+ziHPPkI7J8EIkZKspcx+pTImUKud0sW2hQ+BpT0lZBRApO4//uBK2pw6IV7O8MyOyMcnXD9ekJ08spuRry5IPfYHz4kFBkGNlgpMc3kWiqsyJ2HvE05YLZ9Iydgx2acsNqsWK9KfGNwUiLdY5up6DIi63MKQi0FCjiApfJgJYeggHvYnU/hGRym66fULeJjhfpjLb4KUAhdMZgtEM/gNIFnqhKxRuV5ha60zJ4xJfcfGNy5J3HG4uta2xdR7UmHw3qZjdTlsslxjmMdUhht2/dwj9jAyklP6LlyLXXLBkcimQy6G9rk62QlXeBqN4TqOuaqqoZ5grrPJvlGrM2uHrDpiz5SGr2H/YQqgDiRiOkTtf/zv32JcaX4SHd/ZlrOzXpw/lU5U4TkorKSKnY2d1h3WxYXc2ikpZM3AocUQQiJozWOnRmWdxccHnyiuG9DwihQElFt9ejqsuUMLuEermtB275aXeO9e7xfVFI8MbvvJUMfN2uSev2frer075n8IFO0eH+/Qc8ffppNCgmevmoLMpz30ynCECrPK5NLjJvrKmjuaoxybRRbjlKdd0QQnxvrdtKauD6+prpzQ2Z0nQ6HT7++GPm8zl/82/+zW2Q8quSwlv+268vlf5lRghJXZKkH4xPnV17Z11rOUoO62pEcOjgkcLR62Tk3RxpB3THfRZX51jnsSYK9lROYonwXp2KOatmSeVhvlmT6+iDI32D8g06GBwu+QoqXJDUxuGNJegKpyuy7ghTl8iiC7rYQpxiYHn7HLy7OWo7a2n98HeSJGdjJ6kxrNcbrmdzXp8cc356zNnpazarFTYuwViT/N5EDnlGQ8CJDIlIFgwSHQLeRK+hvoTzWcX5dMF+PqLoqmQKGpONdq2TUmw5nnVVMpvdMJtOcd7z5L0njMaTKHwE2+fSh4BOnKa/iHg1pATPWos1DTfX13S73dihnS6ZLVZU1tP4kFAy7X4usC52zFt4qEty822RKNpJiO33EmisxxPvH6FypIqdkKauKAaTGPRvjZ1jcUCElnMW3jkm7O5zfPdn23UT4hreFmHjL2wRFtt1QkR0UkS0SrzI8CFg8Hjt6O8cMVpveH38Cuug1+2h0bhmjbUNIUHdlVAxUkqxU1us1LmkoySZjsXX2kT+pco6KJ3R6Q7Y2z/EI5nPl2yWc5bac1lEr6jJ0aO4TliLUESvSGQEyIpACO+22/t/lfGtTZRyVxFsja3XLOY3vHz2lFfHrwlC8fDxY8bjMbmKSjSr9QqV5SiVo7WibiL53RrDfL7gxcuXzGdzrPUYZ5O6D0gkjRfUFrouJA6FJ8sk3nls8NQmqvdoJ1Gig1YS5+PPa+uQVcPpyQmbzYpmvWQ8HDLeOUAVA8RWujkqv0UVlUjad++2pvbGcMEnqA+0cXXYbrCGqlxzfXVB8FBVDet1ibUOJVV86KTC+5DkXPVtdY4IYzN1w/Xphj9fnrPTV2QYOlIw7I3Yu/cQqXM2iwX90Q5BZiAiBFGG2GOTbSWU9jUjLrvtMH2VEdORW/5Ta+C6Db69A2+RwdLPA5tQc/LinPlswWi0z9GDDxgf3EPkGTWO+WrFyeVrrk9OqKc3mPkV0kWIlFA1y/klF2cDnj/9lOvLS2y7Idc13ppYiewUSBEDaCVFdBB0Hhkkg44mp4FmSZDRZC4ICUFBEPF+kbHblIpxhARfa+Pf2HXJomz4lhsnojIOt501uCMHDXFevsQ8hxCTZe8swRqwDcFUhMbQlBvmszmzm2uqTYlvoTX+Ngq6DbLj995HJ8O2Ok66n+BNv6IYXKREuoVwhFjAKMuS5XJJNhiQSU3wGh8Cq3XN+fkVg91LBrsPKfr9JAYjwUscLqkJfvl76u0g+TMFiLc2VfkWlK0tALRf34VsHB0dcTq/5vnVFSEohNR0ehG3U1U1vomS6Y3zaAI3l2cs/+SP+eCvSA4fvU+QkvVyjXMWZw1SQ1Bx/kUAraKvzts8m9aH6G4B5fOC/Lvnfrc7/TZc5ddNDt7ubMMdr7P0+pPJZJvo5J0i2jg4T2MaZrMlhEC/NwAh4lqHj5wla6mbaL48Ho/p9npR8ENnEcKaYHx1XeJD7OrmWYbIO9SixlrLbDaLwY+75R69rSrYQvN+HRjnVx1CmkTotonjEaGbzjQ0TY21Ls2fSP93ZKFBE7DG4Zs1Cii9o6MKyiCpmkBjPbUX1D52hmRwMcAHPI6Sko2X5LlOnnCOQgU6StJRikwRpcWDx9iADwZnBCHT2MZg6hptDFJkIKNc9BYKvJVWfzfj9hoECLdcpeAj16XcrDk9PeHi4pLKeopel9HODucXZwSVI6RCB43uKrwHFywkNzoRtdNRhScEB9IBFucdK6v49OQS8cOf8b3a895770c1VeL7e5eeRylwLq5dNzfXXF5ckOWah48esX9wCFIjpY4d6LhTRnlwIRIC45uH3gWfCjXes14umc+mHB3dx1rL2fkFVzfXlHVUBxakDkpa2u/M/jZOuL02d/49xOKXJyaktXV4Mrr9CZkMGNPQVBsEIfJz2q3jrrm2D0j57ubj857hu93ibQIVSHvVnXPjtuMc1Vt9VItDgDMoFXBBYp3FonDkzJdzXp9MOTmdokNgkHfJM0WvFzBN7IiaJpI2tNLo1mTbBxBRhErrSF8wxtDUBqUFvf6AB0/e4+jBI0ajCS4IfvrTn3F98inDrqIp15wev0B3+/Qn+whv45koCC7c8sG8J9xZ774tXaVvbaJEtSCYhtnVBZ98/DOmszn3HzxmtLtHpztASoFtal69fsH56Uv6vS7jyQ6j8T6F7rAxBlNXXFyccTOdUpuIc2+swaZKXBAKL1LWn/g3eabJsmgGt64bjE3EShdQKlbSPJ51XWED5Ci81CwWS8x6Tj+TDEcTxrv32Nl/wHD/PlpB0F2CyPFIHCJtFt/MiEiEFGx7C8FCaPCuwjY18+k5i2mESy1TsOV9QGsdAxgbH/p2lWtN72KdyBKCZ11blPB0izE7h/d5cHjA7tETdu+9x/XFGZvpBdwbIvJ9vMrx3tER4ISK6l9bGFQKujxpkfmqo1W7i4liEBGyIImqNQQL3lKvF5SXL7l89ZzZomb33nscvfddeuMdjJZUds3r01M+/fQZr16+YnZ1QbOaM8gC98Z9Rr0MKTzT61OmsykX59GEToSocpQLQQgOZ2ucyej0+mRKxm5SEr1QwVGt5hw//TGy94xOt0u316fo9un0h+iii866hAAmRDldiET0hFiOsLfWmFZLpNDRUwdogkeKCKdUKpHX73QX+JIJqbMpYHQW6Q3SNtBsqJdLri+vuJrOKGuHt9HjQsos+SPBGwTfO+XjL+R3bLsut8F9uy2pEIAIl20ay2pV0pEZu6MeSOhmPbJcYQ1Mr6eYTUWnE7Yypz7t0EHcBvtf6o56q5vyeVXHtzs1d7slbSVQiNjlkVJuISlKKgbDIZuqwQdN1uniTIUXTbqTNcZbNo2jF8BWJbPNMU53GU12Kbo9skwjRMCZBmSCVUoVvVfSs7AFT95JRLeKg7yZ7HzRed29Xm///t2g4kslDT7NUbu8+BD9UlrYD4G8U6DzjOVqhciScaON85YXGcvFEo8n0xnGWqSSNCYKN1hjCM7TVHXqRjk2ZokSkizP6HZ7dDoFSmmKoqDQOSIIer0++wf7/OC7P0AJHeGgnpTY+yRF//n3yF1O07sOLHxokpBRg6/XlPMbVrNLyuWcarPCNBU+ef8IeafynBXUFtZVzXI+4/zymiul2KwqyqrGuIBDRZEYoux6pjVIgQ2BuoYNBq1jh1NLT0dBN1N0c0UnkxQ4cilxXmGDB+WROnbFvTMJhtZyLUKSJE8Fo3fZUiKKE3likrTlQDrH9Oqa8/NzFvM5nbzg3tEBKMnp62M2lQOZI4RGyU5UHg3Rw8Z7h0emCnvieBK7QzK4tGd6lqXn6YtXGOfp93scHR6CF+RaY60nVzoaH3vPbLHg8npKfzjk6OiI0XiMDzJaZwgZ/YHSvSQRSekN7ha6vqkRO7pRoXW9XCCB4aCHc4bZ7JqqKmmMuV1HPvO8R0hI20lqO2hASnS48xH5lGVlsL0uKu/SyQTL5Q1NHe9nIUPqRLLtFrbw/dgx/Pr+Pnef2c/w/njrWX6rSPb2vvB24UQQi6MiuJS0e+rKcHJyzvNnJ1QlDIsuppIoqel2O3Q7OaauqULcK3rdLirLsN7j6+ippPKCsm6oTIm1lroxCKnZ64zIR7sUo13o9Ciygv0Hj/FmTWNWdDsFs8WMk+MXPFSa7mAcE1KlYhE5FaOQEVn1RZDsv6zj25somYqbq0s+/eQTqqbh6OFj9u49ougNEEicqTFmyezmisX1Bc1S0qznNOWGncMHBAfL5ZST16/ZbDYYF8nSUR3NI6XCB0ljA2VjKaQnBzpFTtEpUFmHsFrRrEpwsa6vpUCrKDltQpSXXFWG0aSg282wqyvW5ZL1Ys715SWD0xMePPmI/ftP6O0ekWeKJghsUCj9zV06AUkUIFXjnaXZrFjMr7m+uuLk+Iybq0tmsxnWhRQ4vVlZkcmrQKQFzycypQjEDpvu0BsOeP97P+AHH33E4cEusjNG5UOcs5y/PGN5c82wPwFchC5uK1DhFioHsV2dgsmv+mBGMnwbtKWNOETysvAWGTzrzZKz4xdcvfw5ojEc3nvE4Xvfp7NziNGCVT3nk08+5tknT5lezllPS6pNQ1U1uNLTVTn9To6QluXiitXasFk7MqWJYUeS20whX1luAEGn6KB1hs50xAN7x3w65XoxAy3ReY7Oczq9AcOdXSZ79xjtHDCcHKKyXuw4CI8kj+IiAoKSKH2rIuiDS8lm5AL4EANJH6Jqjky45ZA6GuJL4BytdThr8cbi65J6OWM5vWZ6fc3l+TmzVQV5N3FFfJr/xIgKt4lS2yngi67vXYjXnc7MFoIHkAKWWJmtWOucXreIgUiAQhdonWE2Fb6uES6qDYq00UZPHP/Fx/B595T//MTqi6B3287I3cQiJYBvn2dT17x6/RrrYTjeoz8oKDcz3GpF2TTIoFBZh8p66sZgTMC7wGp6zfX5CY/e+zBKzSuZBD1a4q/cCqN8UbJzi8e/ewl++f3wy/g3v86meium4G/vx/a40ud+v48ucszcIuqavCiIAZJH61hlzbIoIbxaLyN8RUf+kvdQ6AwlBMY56qpGC4HWkXdZ5Dl5XkQvPmtRnR7f/+4P+N4PvsfB4QHdbhfjGoQCLeOatRVqkIkHw5sJ55flOHylYTdsVnOW1xdsbs5Z35xSTy/x9RoVDLhYuPLO4X3ABMHKaGR3RB0ylhvLoqxYNY6qrrHGY2xUC5Qqi2pdMprwOqUQOqpuNS5QGVBeoFWODp7aB0onyIygUJ6esIw7GkVEIXSLHrrTxZk6CrgkU02xfTZStyEu9O9sioRMcHkbeVpSxGTv8vKKp7/4hG7R4cMPPqLT6eCC5MXxK87PLmlMUv9SCRIu1LZbH/1mRdqvxPY+EELSiukJEcA3bNYlZycnnL4+ZDLs0y0KbPBkWm8FRUDS6/U5uv+A4WBAp1MQUEiZIVUqMAlFSFzblqvKnY7MN5ssxXO0xrBYLBiPRwz6PW7mc5aLOdaaxPeK5rvt+v7mn7dJktt2rNvnOo6wRTRY72hcFBgpy4ZRf4gQ0DR1hJ6FcJsYIW69NIkFE/d1cPrt0XwOYuCXrnPxcN7ohW7XvpTUtembFLGgLoRHSYFCsF4sePXimOVig856CZkk6XYyoq5tLHYIpbbvY52LkH+tsR6WZcVyVbEpy2TDIdBZQCxLLmcrxocBhUIKzcHRQzrScfby5+TdPiNdcPr6mCzLefJBHlEutkZnnQjFk7ew5G9LgtSOb22i9PzFK87PTxFZhw+ffEi3P0YXfbyQkUDvKsxmTihnDLRFB4ddGW7qTYR3dQa8fvWMq6tzrE/y0bLlCyUIUICqscwWa5RR7PYkOovu4kKpiDG1Ei0k3VzR6+VkRY7XUNpAHTzlesOOCTx58hDXK1hevsLWFU255nqzZjOfcn1+woMPvs+9976D7u/gRR6rhN/USNr7wnqkt5hqw9nLl3z69GNurqeUm5pytUmV+1sVOhnleiKnhAhb8G3g23pLACDpj8bce/iAR+9/xP79R8hcEVSOF4HheMi0KDi/OKWzf4RWvWjkhrxNitrK9DvC9kcpWEdIbfoIZY6dJBk86/mU4+dPOT1+gTCOJ48+YP/hh+jRAY3MmK7m/NmP/pznn/6C1XSGqAW2tjgbcE5Q2sB8WTEe5Ay6DiUdwhtECNFNXUbeACEk5/Dk4YVE5QWqKCKMSIIzDSFY8AaMwZiaeuXZzG6YX51z/voV490DDo6esHdwn/HOPloXBFfF+1cKoE4mhjEJkiEKhwgfVRaRIIky8VIpJEnK3kdhAZ/4Q79sBBvwxmGbima9Yn59wdXJK2Y3U6pNCV5ggsA0Fu/BtpcxvBlYb6uC7Te0G8wtBGe7SckYKMRNsvVeCZA8LKy1eOtYqTXdTsZk1GVdVjhvGA6HkbSdIIJCKlAC5yJ/q73Nvuz95o3ZblzyTjIQg4FYF70l+8dn7u720qottrCRkGBB3jnmsxsWyznf/43foN/rcX72ivVmDlKS5TnBR7hSbU00yQ7RWgDbsJjeUB/djxLpagSErRy7iDa/tOqSW2xMOuWWexNhkJ8N7G85EZ+f/LydJP66nKWttIgIiMhbj8qKwaZKvqfX6zEZj7m4uHhD1lspRbfb3SalZVkihUyqjJDrDK2i/wgeZFB0+z163YLBYIBSiqZp2JRx7cuyjO89esB7330f1ckoTUkTGnJf0Bc9cpHHaj+33enYm033bYjJ1Oclzu9qnD7/BfObc+aXJ9Tza0S9QJsSYUuEtxH+JiJcK3ZrCiY7E1w+QjrFxXLKshEY3cd4i5MekQeUjNwHJ0gmlgGbYFVBaoIEIRReQuUdSsQOR+1AGo/0jr4wEKCTKSbdLnv7+8isQ+M90rnoveRjh6nl64IA/67nKUl/i3j/rss1p69POH39mtFgxJPHjyNawgWaynB2cpbWr6gkGjc9G41eRbK6aF+3fYaDjfLnUkeujItrknCB4Czles3Lly84Otyn9+A+wTuayuC8p9cbIJWm2+vT64/ItEYqhdYRlmhcQGfZbQc41ouiah98qe7/uxghwGI+ZzGb8/D+PZQQLOdzVosFpqnRWuEcWPNZkahYsGuNyG+htGxB4mnpT8uRDwFrPc7DpjLUtcF7R11Xcc8iqXeKO9g+tm/1TlTv3jz3X54ctElS+uVtgbf98ZY2kLJspTTBeZSCLECDZza9YT67xofYuauMi6p3UpLrGHg5H2KxM8BmU+FFFIWqnWdT1WyqhtpE+KJUGqEkVkiWVcPJ5TX3HpYUnT6ehk6W0xlOIB+Q9ydMegWr9Zrz1y/o5IqHjz9AFQK8wweJUm1H+tvTSWrHtzZRuriZs3P4iNFkwnCyi0fRuLiI+KZCOINfz1FmzTDzGFMhRE7deGbXZ9Rec/zqOVW1xokMF9LCloy3orKWwofApjL0hMRmGUFHDwRbldSNIXhJluX0Ojn9bg5aUXrPpm6orcQFzXLTkHUGHO4M6RWKy5NXmM0KhceWCy6PK4KzaK04fC+n188wfHOJUjRZ9fEBaCquz074xc9+zOz6iqoy1HXsMhSdAuvehNREblNc6FrfnDa88elrhIgEzKyDCRKrMrzUSKVBQpZrRju7vH79jOnFOUfdCVLmbAk2b403sMBfeVO4DWDj4ho3P7zF1iXX56ccP/8EW9c8evIhe4+/Rz4cYwXcTC/44U9+wk9//BM26zW4gKsbTNkAFqlyhNeUpWU+X5MpiaCJWHTncT6q28mQgYveIUFlCJkhO33Ghw+5d+8eR4eHCDyz2TWr+ZxqM6cqVzRNhRaxQh1sg18tmNcV9WLG8uKEnd19ut0+giiygZKoPKPodtBFh7IyVGWDUhk74x2G4wk+04ggyaVACY8zFozB1nWEXC6WwP/+y++jEFUPbR2D85uLU+bX11SbNcF5hMijAbT3201SqdtOob/DV3p73IVdprbPG9e/rUimnef2+obIIVjXGwamw5AO1jnq5SZKyoqQDDC76EwhZNqkUduq8JfdBKYvn5EVBeOdXcgLgoq8MZdCKeWjwATt2hLavTJ2TGI13SeBjsSf8xaaJTcnn6KEwSO5PL/GliuU8SgHIcmvOxfhEMs8VaW1BwxGGErXYKUgL/JYDRQGROzchpC6BU5G0QMcIrzlmyFiACNga6TYdqIJt7K/sSoq3vjbr5MY+ODf+Ps26XEtIVxKdJ6xf3DA8evXAFvlpzY8s9ay2cRkZzweU242BOfjefpAnke577xTMJyMyfOMuq4oy5KmaXAuVry11vz4pz/h1dlrhoMhg2GP0WhEfzBgNB6yM9lhMp4wHo8pimj2q6SihfC3x/5u1q/PH6e/+BGb1QyzWSJdjbAWZx2EVsSoQOZdVKdP1hnQ7fToDcd4VfDp60vmzZR5Hah8htM5QcbgP8Z1bY0+KpX54BGOCHVMfJkQiMExAilC3LWCQDiw3pEpQEi80AwGI6TSXE0XmGqNCDb6LdkGkefxvoIt5PNdjeBTcUBAXVW8evWSs5Mz7u0f8OjhQ6SQscBCoKpW0eC1aWFkkrquUUoQvEBJgZQhwabazqchBEtAIiIgJXFe2+KIwzm4urzk/OyMg50REs/52Smr5Zr7D59w/+F7aJ0hkrWIlKp9+tBKk3SZU0Ae2rR3myh9U2Ih2zl0scO7WC5pTMNgMKBpDFdX12w2G2yTpL2tI8IR3+qyc0dQI4UJJJQIYSsQHmGZQqCEprE1QsWkcbXeRGGpOqoTitsXaSsU6TXEZ977XY1fvjfEAlKEFN4eGneOpi02ew9B5DhM2hosTV1xfX1OXa8RylPX1ZY3zcbRzzxKRFih1nGdqY3BWkdtDMuqomoMxkMQWYq1opx9CILGOKazOYvFgp3xDloIvJIYDxQ9vMrJii4P79/n1ctnHH/6C3qdDrv3HqN1F52QGW2u96u6a3/Zxrc2UXr/Oz+g0+uhMo1HY2xsSwbbxBsqNJTrBZmU9HtjprPol5QFS7W45OJmzWZ+hSSapSFzomCyjwEnbAMxbyxLZ1FWYkyOzjUmVToCBULEDgEhyiMbE6vaxsSK/rqsabykM96j6Bboosv1yUuaxRTpGwQNq6sTjj9RZJ2Cg0cfoXTnG5s7v22DW9brORcXp3QKzdGDI65vFqxOr7eE2rvPQeuZE/kmchtM+TRZIgCpAxWEpHGBVVVjhUSpPM6sjDyJ4c4e8uQV16cnHB4+Isu6OKIM6RuL/p3W/Nd5KEUSCdiq4qQgdb1ccPz8E+aXpxRK8eDhIw6ffBcGe1Q4ptMLfvKTn/LTH/6UzaLC2ehlY50FHdBCIa2IyZN1LFcb+l1FJ/fgAkooXBCJUB+NHqOPiUZnXfrjPZ58+F2Ojh7Q63UxTYUsuowmB2wWU1azG5aLKYSGTAsENm3qDjYL1qammV8hkVhrtvwzmWV0Bn2E0ixXJcvlhjzrcP/oPgf3H5KNd+n1+/S6XZqqZrNasZwv2Kw3BOtw5lcbHtumwlQV0+srzo6PWd3cRE6EMxAEWZ6BKpDVhuA9jfUUIpGS31po73aX2nF75WMnqZV4bwnB7d9E4+K4IQTvQcRK3KYpMWGI1hmNKVktF+AMv/j4RzhnePjBRwwm+6BzXDBooX8txE83V1xdnjG/uaI/GtEfT8i7XRAxuPHEajAhJO8q0kOSOkgR9EggYIPEJo+vxgkubxZcHr9CuApbbihkTO51koU1zlLWDd57FusSrRUqk8iuR3pFuW64uV5wdPSA2gSMd1FxK8TKpoUIL0tzr4UguIBSkhawGY80BR7itovXXpO3q4tvQ+y+CtQstP+705GyzmKsYbFacXFxwbNnzzg7OyPLMrx1BOepmprGOjabDVUV+UhFUVDXNUUnGpzmOiNLhsNaK3r9PkWnw6Zcs16tcD6J/LikzEhU0Zsu5uR5Tq/boShyur0unSKn2+nSHwwZj0ccHh6yf3DAZDxhf3+Poii2x9/OydtiHu9imPkVoa6gSVwlIekO9yi6fXS3T9HfQfV3kJ0hsjMky3Kkr1mXJWezV1ytGjYhwwiVimAWGeKqrqSKELNwq1LmcUgPQbX3NZHn50IMpBAxUQqaxms2JtALEuMCxkYp+3K14PzkmE5/xLjoImS2VSyLFfN4J7yroUJUWsMLzi9u2Gxqnrz3Hgf7u+RZhnEei8IQWJRLZstZ63KEcxHOSfB41yDQSZZeJZPuuLcIKWOQH6IyWEDiQ4Q9EsAYQV07Tk+P+eDhkGZ5w+nTp9SlQTcbHhwcoAc7mEynaDT6mMV9NiCE35rTkhLS2C2U33iSBICNPnbL+YLxZIei12e2mHN2dcOmdhgLAUmrEBV98eRW2TS4VMYI0UKlhdb61pspFY7a/cu3PSMpyQvNajUjU5JNaWgaS5eUyKtAEB4vJFrmdzqnX38+Pg9S/YXzLN7eu27Xv7vgwpgsRZhcSOupC4aqLrm5uaQxFUIGhI5xmrWe0tRI7+lmGVrJaLKNoqMyhLGYUEbFzkwgg4od3yTy1BLZvLdUmxU3V5fc29+n0H2Ck9TWQdZDZAVSZRwcHIIzHB+/4uWzpyBzdu8XyDyLsWCrSsk3lY7+jxnf2kRpNDkEGRWNCKmVmVR/CCWNWbGuG0S+jxz1EVZSL6/pKY8KJaO8pidqNpsKWYyxziPJCEHhgovKa6kKLKXC+MC8AbP25MajtECo2A5HSZwQGC9x3tJUFc1ygydDFAInoJIZpe7R6XQ4Gk7oT3Y5e/Yz1pevkb7B2yXL62Oef6xQWcbO0aNvbO4ccd6srdiUSxaLKVkRqxBq01AHgRWKQJSJVEptcfi3CKn4hQuB1tX8tkIksM6yWC5ZlyW1dXRyiZJRRtUKQWcwYWf/iLPjV8wvzzjojQhFRiAp+bxV3f7aG4FQ8SH3ScjAVqwW5zz92X/n6vyYB/eOePjRbzMcH9BkY5YusFjO+cmPf8QPf/QjNssKU8VN0FkLOISMcEMhBEE4vPBU1lA3kQdhbQzYsixQmzomijpPwiCKPM+5d3TIvXsHBCyvXj7j5uaastxE7pTzeGNomkCRd+n1+tEjwTQ4b/EuQuVs5SHYKBgho6moMSWmrAkImsbiasPGrXi9WnN9do7qjhjtTOgP+iwWS+rGMJ5MmOzsMhrtUhS/OlG3TU1dbbg8P+P66hrR1LF7JBWdvEN3ssvCBMRyE6FT1mIlCKluF1sh3jS3FbeB+LZiuv03tviMyBfYllhpZT5iLKoJNGzKispYRkUBtcZWNZvVgtfPSkxd4UXg/e8V9CZ7ce2QicPzJcfu4T6dfpfzs3NevfgUIQKT8ZjBYEC/P0AU/aQWFFUWo4IcW1ijb93PhSSgtveWc57+cMh5U1JNz9HK06g0V0qRZTmN10jfUJcrFitDN8/JtKAoGlZXMzr5Dc18jjI19WKWMPtRObE3HCJ6PbzyWJ3EMgAl43GqICNRWpD4KckYV4AXSWUrQYC212V7+cTXSpSQUW6eVJ2tTexwvnjxgl988pSTk1Nm0ylVVUV+R4gdpKpuqBuDUtEHqaoqjDFkWUan20UKRaZ0MraOBrSL1RptGry3NIl8LxOUUgA6yxKkLyNXmmADlSlxtWEtRDRMzi/RWvMzFZ/nyWTC+x+8z2/+xm/y5NF7WwGcdtz12noX4+j+E2azG5bTKc7UdLodRjsTBqMxveGErDdk4xSli3ehVAqhu5yeXPD64oZF2WBChvGRFyJCNHGPhMYUyG7VvJJaqotdg1b+WbR2AxC5NIHYSQ+CtQsMbDTYvrq5IZia1WpNZR2q6FAMhnRGuzTWIHTqnMQt/Z0NESC4mNT1B0O6RcFg0EHiCMHGRA8PSrLaLCnrMnYwiVybWwBVW2BkW6kP6XPs5vvtMxFnKz4pCIl1nrqqubw44xcfOyhnlPMZnayHKxd4U6LlOEq+3lH5jPuq36IgWjh6SCXdtn/yTVf3oziQZbyzg5QCR+Dq5obZfEZZ1XgXO0Het6v2m53lt3mQt0UWn4qW7X0WRVK8iLHXarnkWnmkq+l0cnIfqMqSoXNIlZz8VGoqibaA++4LEr+KZ7kt8Ih0b2yL0W8WerdfS4+UYXsP1Y1hXdY4HzuzQiiijIpES40WFq2ifQnCRmsEIcg09HsaqTpsKktjBI1Pli0ClNTpXg1YE5hNF1RVTa/TARx11ZDlGULmBFkQZMbk4BGlgdOzM14fv6LTHTCagNCxQx2vXuSiyXf5oP4PHN/aRClyPFoYVVoukpa+94amqamqBiFziv6Eni2x1YamWaAFjPodRsMOs3KNdSZyO1wyuUywg6hiA1JoZJBRqEHFipJSMcALCHzwVHXccCHKiCsBuRQIBbnyKEwMklSOyDrsPnifTpFz2SlYXJ1SrhYEa5heX/Lq+S/oDvrf4OxJQjAY07BaLVmvl3S6GUpINsawdp4m+C2Ey/uWDOzSBpbOXYrUSr9bM4kbcl1VVGWEO4HfbsBSQRAKKzX7B0+Ynp5xefyS8cE9VJbjReQQvOvqq/cibu5IhDPML095/eLPOX3xI7QKaLmD0BJLTgiBarXgFz/7GT/9ycfMZ0ua2iBF22l0ROcrEbtDIiCzADis9xif40KBkAElooklUlPWJnbzgifLFHs7Iw52BtxcHHNzc83N9TVVWeGCRylNLguE0EjdY3hwj6NHj+j2enjnsKbB1hW+afDO4K3FmzpxS2JA1jSGpmmQNBHG5T1FntPPBxRZF0rDYn3Jpm7Yf3CfD7/3PYY7B6AKvMh+5ZyK4GjKNfVmHb1ApEIXHQqtUVmByDTlekVV10lIIHWR7m6UadkN4S68DlpIXRCtOWvbYWyhOXeU296q2gXiZlVbz6Zs6Kg8crgyh3Al1jTMb644ffWSnf379CZ7UdSEwJc12wXwWRc9UBw9KRjv7TC9vGAxvebq5Jgi02S5JM+zaDZsGqQUSR0tqgnpvECnxAeVE3SH4AP1akpWz5gUiqkMGLOhNpbBeEyn6GOXnmVVY100L2zd2bUW1JsZrz79MRfnx2jlOPv4jzkTEusEPihsgOFkh3v3j9jdv0d/chDNVp3Ca41QmqAUrrUCwMdELq11CuI6m+Sc283/s7C9zxY5vkzSdLeTtNlsePbsGT/84Q958eIFs/mC9XpDU9cIBJmO0u+bzQZjHXnR2QZLUsotxC4Q1RDBoqWKc64UlWmwdQ24LbwvhBClw7tdut0u1aamLptYEfeBLMtRPnW6jGFdrjBJ7SvLMm6urzg/O6XabDjYO6Tf79+qCP4KnsNXGR/84K9zeXnO6etXzG8uWZZrlqdXqPMr8kwjpGJT13ig1x/SGe3Q23/Mi1evuZ5OsS7gg4sfLhqpi+C2yqAyQQWUIArFtHDrIPBtUOrlLZyqFeAIsePRONgYy6quub6+Jpgy7oPA9Oqc+eyarNfHoe4oB97BLb2D4XyIFZQgGIyGiBAFfHCWJnUilZAEL1guFrGjKFoT9XTv3i4/yTokwe62wX/LV2pFUG7L7q3ogLENs/maT5+tGWjLINPp/nRY25CRRA6+YOu7Oyt/0ZAnLwJCKw6ODvHesV4tOLu4YLFcYptkhuqJnUHRgjbCW1BcfvkzcIdvFAhIAZvNirk0DIuoWtpCrq01yMQ3lOquqqTc2hv8RY5ASo5ki01La1mKkWjPO33IYJHC4WX8ed1YGuMBTSsfr4Ikkxl9IekqQ6YtUvq0VnmE1EgVKLIkzhU0CoVpXEo+4z0vBfgQJejnaQ0dDoZI5en1Oux0JmR5gZc5RoDuddl/WLCqPOfn5+Q64ze+9126kwkrJKQOsEg5/LdhfGsTJalkoiW3MVRIC1V8QJrkl9HLuyid0x1MqDcLqmmJCQGhJXt7e1yvPaY0ST45kq1FWgi1gkxrlIBMCXIt0CIgZHyICRGq4o1hXRuaPKPoFmSdLuNOH6QGnTMuBF2/RofYundIsnzAwZPvMhxNmJ6+4uL4Oev1EuM8l6ev6XW639jcCR8ivKpuKJcrmrIk1wKko6wtNkhckERyedjOt5BtVykmh5FknQSp004Zle8EwRqsrSPONniU8+ggUDLgRYYVOcVgl73dA64vXzG7PmPSGyCzVtnnTvD1Ds45eIv0IsHtrnnxyce8ev5zmvUCguXj9c+4uFixf+8DiuGEZ8ev+fhHP2Z2dQle4K3BBYOSGiUEKqkGCiHJtQYfncObxrFeVhRCIZFkWiK1wpiM4C2uqZFKszPZ49Gjh0xvplxcXGylVfM8Z9AfMugPGY8P6PbHFJ0uo91ddvb2yYtO8iLykBT7gousmOiFFRIMICbsdVVR1TV1VWGto9vrMh7tUBQ9QDBd3HB5c4kNnvlyTWe4Q6ZyWk+TXza8qWPXVYDWmtHkEK0Uq9WK+WpDuZlyM1+zqTbJ7PntKxk3kZbzln5Ci/du442QOjEhtDw4sYVotqnW7U0iEx8hcuLWZYP0G0adjI4qwBl6haajc6bXUy7Oztm5/xiZ91AtDORLBiGNKkBlCF0wyLv0+iMOjx5gyg3VeokpZwRvqDcVMnhylaFVrM4KBL7ZEPDUm+in0YRokru4vuTsxVN8Yxjt7BLCAOsbglLoostu0UdmDdXJa7QyKJ1U+4TBeYsKDmsqMplxdTbDBpAqJ8t76KJLrgd0c8/84gU3J8/oDYaMdvboT3bRnQFBZwidI1FJQl1HvoXU+CAiNy3EghJ3EqG35cPfrih/mXltZYXL1Zqf/vjH/PEf/zHHp6cYa6jKmmZT4YOPHiJCkmUabyyCCBVtOUxKa4QU1KaJRXkEeRbnvejEYshyvWS5Wqaur0aqCH3M84zhcMRwMMQPoyBPm6sf7O3x+PEj1us1m82aq+k111fX0dNJaQpV0Mt7dHU3duHuBItfxqD21x1q9xEHo3v0Dh5zfX7M5clLZpcnVJs55XqOq1cEV6NwLK8CU1VgRh/y7GzFZjUHcrxTSKmjzH5wSCLUy/sQxZEgyjGLuLb4cMvDEC0yE7jbZEQEgpSY4KmMZVN5VqIhcw39boc8U3hXs5xPmRw+QOQZrdqhkrcdqncxgoz8NeeSHYDzBFsRTMXl6TGz+Yyd3T100WM+n2KsxYeACy5xl0mt6ls3vpA8EFt1yMjXdRBkDFDbf0O0pSCcs9S1YTZv0MOccb/DYDgkyzNcC9PzHqHEL930/kfwQmxCoQitwDrKumK1XkULigAg2C7jgbgX/YrCQNtx2a753Om6pA6T9zFxz7JY9Iim0Hr7Cnehh29DgL+p8XlQ47vn+Xmd9Ld/d/vho4CPaeqIEAke2eq+i1iYisUdkbpJDuc81gS0jnYJgkCmFL2sQARB6dZ465LlhyD6VMbiznK95Prmmv2DXXKRMZ6M6RQ9tMqTL1WU++kOhjx4/B7lZsOL5y/JtebxBx+gdiPySLed928ATvw/YnxrEyUhZVy3A5G/QCICJ7W4qI4SFZFcEKisiyr6NGTgIkypN+izM96wMXOcMCAkUuroGSQluZbxs4iwFCVahX9oVbaUiMGbMRbjA7Io6BRFNKbVCiU9mV2zuXzJplfQP3yMykfYIGjI6ew95NF4l52De9ycnXBzfcliuWJ2df7NTZ71hNpiy5p6tcbXNXQLmtBQbqpkvBsXbWvdHeWuNxcDISW4Vu0uQQPaHRSPaxrqahPN1UJMlAiCEBReFshMcLB/j5vzZ1yeHjM8ekSeD74RzLVyEILBm5LF9Wvm16fRe8BpjHEIDBdnr1kul+hOj4vpnGZ9jTQlxgKNR6mMIlMQIpZfSYnSSZ3Iy8iVM57VskIL6HeKSIK0guCjl5FSGoGg1+2yXCw5PTsjIOn2+ownO4zHE/YPD9jbP6Tbm6DyLiTOl88yajRZphAyVmxl6wuCj1W/Fn4go5lhH5Ica7pugM46SBFJw93DQybVY87PT1isltjj1wyHQyY7e79yTkNw5Lmm2y0wdc5oZ49MaRbritlqxWLTsKxN5Ox57pjy3XrOiM/g69rXviXye38LMmmrcmHLkUs/bwFigug5QkYImqoKCFNRIOgVGXnWpV9k9Lt9Vi4wnc7YrGuGxQD/a5oVepXHoFJqkBlSZhRZl+5gh/5Og3M1wTn2fAtNvU3ufCJ6KxzBO6wPNE5iHQx2rxFZj/X0kuBqnG8wpsKYhrI0eFfT7eSMB32CqQnexE6YCEgNQjkqs2ReCcpGYF3g6P5jfve3fo/9wyP6wyFFp0MeLHZxw831lJdPr5BZh/54h93DQ/rDMXmnAzojqBx0nqrd+vb5bKvsb60LX3y/fImOkve4xvBnf/In/Ol/+xOW6xWjwYAgBevZkrWDPM/Z3d2l3+9T1zWvXr0CIZBZjlSKxjRY62JHRCq8d/SKTuSjmIg2AMi0wjYNxgWKImNvfwelxJaLudlUFHlUtbPOopRkU5cIJTm8f4+yLBFKI7xkuVighGQwHPLhBx/wV//KX6Pb6Wzv4XZu3vW6VqkBSEu+2+X+aJfxvYdcnzxndnHM9PwFV2dLpLVoYRC2woqK09mn3EwtZlNB1iN4hdJFFB7YdgRD6p4EUDIq1JGq5ikQFNuAz/3/2fvTJ8mS7LoT/On2Ftt8jTX3rCqsBIhp9lCG7JYRiozMPz0iMx+awmEPOEKQIMACass1ImP11czepkt/uPqemXtGZEZmRRSIlNaUyPBwN3e3p0+f6r33nHvORMMbUQOhc4pEdOelP9F7jZXPUpeOqrA0m2uGrsXYkqTjFDi/1XkyOot57BJxpaBtNjx5/CVPnzzm+vyE47v32WyvpPin9LSnxCmgz4k/yHEXcwGHjLSxQ8UnihWCno1UPYtlCAGlS8p6yfHde2zbgA8xUxhHhsybJYrjtbzrERVELQI8Pkaur6+5vr4e30XOa8Zr37EEbtPupAg2eqXt9QxPc6tyQSyQfEfSYG0llHNrpNema1hk9F8pbviUJb4HtXrL41W/51VJ0u3P7QBYSbr7nCip7CWmECVFnSIqqVyjUJnylqRO6iOOnV2G1YrKOcpgiGOSjygTowxJwRAGrjZX+BjQuWgXcwHSIAjxWBxbHRxy//0P+OXFOb/57HPq1QEPDk6AgRBy+8lb6AX7H2H8pBMloiydEQEKWXoyxcBmuyHGiHWOiKILcH7d8s3LC2qTmM1KbKE4Plqy3m5p/NhDoFDG4LSWREeBzlU2nRH83A0h8LCWB5hesW07BjT1ECkKS2k1pdaYYcPZV7/Ft1uOm4YHH/2cenmED7KAna5ZHj9gNpuzWK344ne/3Qsl3/5IyYjoRNfSbjeEwZOSoms9bdPhh17EB9Su8jFSU0Q1a6yGjA2a+X/TISGVoN53rNfXeB/yZ2F0EYIARlEfHlMuDrl4/oLty+fM56f7d3nv//kzP3IDDCGhVYTYsV2fM3RblvMV9fFdzs/P2W7XWAt9f0XXX1ECd5YFqWu5uGoBkccstcZHobopbSVQjmK464xh0A7vO7brFpuFLUhJ5iACeOrZnM31NW3boW3J6b37nNy5x917D5ivVtTVDFtWROUIWkweo5ImTW0dMYkXiJ02yUgyKjewjgpIgFGCeIaAUkL7ijHhMShT5HtnKZ3jYVlweXHOsydPuH70Dc68AfVOKUJMVPWcdrulbTua1DJ4aYbvu56Qu1aVMmLUPAZSeodCCFd7XEPyd0qJEAS5kE18PADHPoB4i8oxHs+79zYMAasTgxYKEK7AaYuyYIoaM3i224am2bBilxi+qVmhjiG3SSlJ3FxB0kYMALUlpJkkdaTpve//DdL3o5IX9/OkiYPHqYKHfzSn21zSNWv6tqFvt/TNls3VBecvXrC5OscpT+nAD1DXM1zpaL3n7LLl/OqKTbC0qiImxVpd8cEG7sxO6LTFe000jtnhfR4c3OOo2XJ1dcHZi2c8e/wZB6sl9x68x+rkHuX8QJ51V6HRxLzmpG/pZhCwH+D+mB4ljWbb9GyvtxwdnbBYrIgp8fjpN/T9wIMHD/joo4948eIFL168oG1bkTSPkTAM9F03VfCNFp8aP3jsbE5KSQQgYsR7z2w2Y7FYcLXeiLR4VVHV4rfVtS3WFAzDgLWWIStMPX/+jC+//ALnHKvlCkLCGsvJ8Qnvf/gBf/qnf8oHH37IarEkqR2iJus5vHVKcTImi6uJsfT8pKRaLDm9/4DHny/pQmDYvCR1G9o+4KOWPpLoIQZS9DkIC6QQGKUZU9KEqIhaoaKaxAP2A1Gdn8GYzzEg0/BE3CCJBCVBJ2leR8SNQkrUdcm8rmiaLc3misoVQm1W+gdLyn/fGNU1tdZTYKqi2Bp0myva63Oet9ek4LMnkCeQiGlEhNRekQPIKdQY4I+gE3tf3X2ch1JoCokfNNjygOPT91kd3mXz9HkWwjBoLBJhxDdKrN+VmuLtEUYFTwVt23J+fs719TXDkFkne3Mg62OXMLyKehfHxFK+MqFIo+qlCHKFjIQMKFXinDzPV1dXnNxLhCAS/ruKjRQHo94lXu9q7M/79/WHvaovMWW0Z9weh6EnhYDRCYswYGIcxAtPG1FbhCnuShFSyO0PMcjlBoXBUBcOkIS29xIXazsin4qLyyuu1msWi8W0tkNKUgwxBpu907RT3H3wHs9fvODRl1/w6PFTTu+/z2zhUFYRCPg/TD76zsdPNlGSrU9J9jtVy8XEbvCepmnxKWKcI0ZYNx2Pnp7x9TdnrOaGe+aIhbHM6pLjVc359ZpuEAqLNP4qnAGVBFIXQ1kjWvKZeqaUIE5YMLbAd55m27Dpe+rSYZhTr2YUWhHaK66f9fi+oVCBh5/8MXZ+BEkOjq+ePOPlk68ZttdELHfvPXxnc9dH6IOn7Tc07TU+egKabT/QDyKhXFg12Vnc3BRGHnaGn0cqQpSKWcqVHh8GCiwXV2vWm47VMpKUkQQw9hgV8cpAPWd19wNePH/J9eNHHN//GaaygkDkwF+a/eO+CugPH9oR4yAbkG9RwMnpAz768Becn13wu89/zcvzr4h+Q2FEOWdVO+zpEfOyZb0NdIMIQSitsIVQe4wKFEYQyHJRU5lA6Bqi7xj8AE3KtB6NjgpnFHVVYLSmqmoefvQpD977iMPTu5T1jIAmasuAxbiCkHJTvRJpdpMC1lhRBsoQvUjJ5tA1T5BC56ZbRcwwfszyhMoYfAg4J8ZzMUK1PMSVNbP5gnbTcnB48P3rKIk31vLwmO12zcsXz+i7Vnj+XSdS6BGMLrBFTdN5lM5sAAQBSSmr1rGrvKccgKM1KWjE/yrmpErWWcw87hgDWouPUcwHtNUaS0K0AQcGFFc+UkeHLgpsWWDmK9L6iiF0pNiSYoM29U1hie8ZTu38QCZJE2PET8VYXAzZv0teldJo6htIiAWx0kqCIx+IIVFqi44BSxDqkq0wtqO0Ha5sKIo5KiW65ir72xSsN562adg0A9s+sm4Gtp0luBJTFDjt6LY9v/y7X3L/7n2OT45xRUGPIZgZmkC5rLkzm3P35IirsyecP3vMb//uG/TimHvvfcydBx+hqwWmqHCuJBkNxkzBosoH7u0g9zYd7/uGTlpc40/vyXylyOXVFeur36KU5nqz5pf/+I90fSdBEQnjLCaIFP9iMSekxGa9pmsaNtst1trpfXnvp49DCBwfH4ujvdFUdc1sVlFVNcMgQjakhLNC9xllx4dB+v0as+X9++/zL/7iX/DJzz7l8PiY+Xwm69ZKQWgfjX8nSHnaSvJqDCRHjAbjlswPDXfe73n27AmdtcRtw6y+iw+aF08vhUbsNG0yJO1IyuJFZgYf82rWEj7EIL5KMfslKWUJUYohRqkdxRAl6E0SsQwpLiY6nxiio8PhjGXTd2ybltVRJLZrmvUl1fKIMHiMs2hlMoH27Y4Q4lRkIkWsEu+xQkO/XfP88ddsrq93KKASzzlt9M45KdOeZS8akyUk6I1ZLEjraU+YkkolUs0+AKpA6Tkndz8gqkhQButKoe1pEbSQfXLv2YE9qt+3KWbvWszBKBiGgTAMPHv2hG+ePKFpGkIQtsBohDsWsV6XqHybpgagbvStjq/TCuqyoHAao+UcjUpxfX1NCJ6i3NH11BQdyHp8G6p3rxuvSpJet7fdNhmf7tEeGwLIkv65lxtB1AyR0iisCkJxR5JVqzXBioCI1hKTGC2xcO89Vmvx4krgo0fFiFaGkLOa6+s1l5fXnJ7eowgRZaQHMcgGLnFXjFilqWYLfv5Hf0Jdz2g2Wz779e/45NNPWR6fSDHhJ9Kk9NNNlPJzpVATnC6UlsDQdQzDgDYaYyxDiJxfrHn64oLLrRh4GmNxzlI6zcFyRtNs8X2LShqrDEYFgT1zCKrlDEArJchVFAUhlEFrafJ1RZDKYxSzsKtNQ2U15aIU+l4cSJuXPPvsl9SF484HP8fMVmy3DY++/ppHX32JSoGPP/6Yo/sfvsO5E3RoGAb6YSBp8cToeo8P2fMmpdykfJNXP/aZ7Hi27A7JxE7aVUnDd7PdsNlu6MOAdgat1bRHRJVI2nJwchdXVjx6/ISTn19yWJQokze87NfBHqnvxwyPxSip9idEorysl8yWJ8wO7nM9DHz19EvabsOqtjht0CoxK2do5iS/ESRRg0tSGVVKYbTGmUhhDco5KBeEweKHAkXCGi2II7J+CmMw2VBwdXjMBx98zPLkDrqoCcplpSQjsuIxc0tRgoZlikeIHozNPSQ5qVBa1AL373NMOZnTeT8eEbqUpcbz+lbi8C2KaIfMl2oSrvjOdaS0rH/rKKsarTVd20o/1DCgrWZe1cQu0kdZJ0abKWCMJKSv8CYtaf8eyyGkbqw5eYXZo13kS0uSXEugFRlXjk+RPgYaP7DQJUlbaUTXhuAHhn4rCbQaA6A3rPqrHdVI+sXHanp+h8rkIHI0WVTsOyG66cA1aKPQKUAIGGuJscIlTY3GoOmVZjDSI+TLK1ocKvSoBGVhGEKk6zqGQTMMCWMrlCmJVGhlUMrx9PkLvvjiS1arBU5Lr1FSsrGFqNBmhtYlq3sLFscfcP7yCY+++g1f/+PfcvX1ZxT1gqO77zE7ukexOsbWc4x1YmicqZ5Kyf5ilFgtJH5YcqASlGXFn//lX9B2LSkmvv7yK371q19hXDaEzcmKtZaDgwM++eQT2qbl6TdPUVrz5KkEcV3f4YeBuqq+9R5Gf6PVaoUrK16+fMHl5SVKJaqqoqoqhj4QvCdlo9tRAbSqKhaLBQ8fPOR//Tf/lnv371NWpdBYlPQYhBQEPd9LkEZU6e2OnYFwyqbSEYvCUtZLjk7v88XLM1Ry3D95wOLgCH264eV/+Tsun58RUVIVTgpjnfRJjE9gGvtx8vrOBUKt5BwcaXL7NLMdgkI2XRX2h4+KbkgUGmpt8F56K6Mf6Lai8qktEFPuh3qLge7YVxuFhqSSSONrLfhN6Szduuf5+WOaDfQhwz4mX1EasQ+JBVLM1Kg93rBSOT24QX9Q074bc7AKhpgc6BJbzui6azGnznu3mpQQ9n+MeuXft8e7pJupKIyapm05f/GS9dWVIG8hTMHYiJK/OZJ8k9II43RJoK5VwhUGZ2WPL0pHWa9ohpT3GrX7rpyw75KPtzsX+8/w7eRnupq9ZGj/a/tJ7D6iBkwS6n2X+7mzMH1dlaioMNHjdMTisToS8pxZWxBjEsNaZyidhuhQHTRthKDwgycOAZ2y4bwGpTS+G7g6vyL0Ad8PGZUjPxtSFNBKngGlNUcnd6hnM67PL/ndr35N8JE/+6sZdlbDG7Iv/kcfP91EaQz8pvUoQZ8mMQw9Xd9mHwKDHzzPnr/k5fkVPhnaABdXDaXRHK9mlIXjYLkkeDGX1YURENxkbqjW2NwHNQSP99l93eQKhtbikWMdOkreH0g0Q6IJClUt0DoShi1u6NhevODpl79jvlhy7AznTx/z1RefMfQDd+4/5L1P/pi6ldXrAAEAAElEQVSDux+8s7mL2SenazuaViSkhxDp+oGIYvDSm7RfHd7Bxzdh9Ylyl9GKUeTAKI01hhQiXdPkQ8ozhCA9PUmJb41RzJYHLI9O+ebRI64uzjg8PmKULCZTIclh7w9RJbtxzdqKf0NOQIYQwTqCcVxvOz579JSvnp7h+0u6meNoOaeqHAZP4SxHh3M4v6LtW1HbykuvdJpCBYgDKUnF1ZTSt6SR3jbZ90dvCYexBcoVuKrGVDVRWxKjVHSmn0jokyu4EoCqjMAopXYUxiTzosleFFladjx81GSwK/OgIHuf5KRiLAUkMn1G+qH8G0isSuVUqscxJgafq/BKuM+LWU21OCJdbDhfN0ID3FtTSpF9FHfJye1A8tvrb7yK71JUGwMbLUlWSqQQGfqB4KP0TIWINZqQAkPToGJEWXZUmzcYOYz8VmKX35Dcb5Mlc5MeuSeMxppK7VVXlUYrCb60keTTIVKxNklgMASIuuDZ2SXPXpyzNInKGgrjKJSiKDXVoHGFpwuJLlk8CqUCjoDuG158+fes71S0uak9pIQtSo5O7jBbrqjrGcoWKGM5uv8J88P38MOGvrlkvT7nm8e/pfntr1kuTzm995CDB/epZwuS0biiFNW8nLinqPihskhjfu6UQ5eGsxcv+fqbr+h9TxpELbDve4wxfPzxx/zFX/wFzjl++d9/yWw+FxQ3ByrL5ZKmbSfluf11IsaPoqxnXUk9m7HdXnNxEanrmtWywmfFRR8CVVURY2QYJBmezWbMF3MOT48xhc2KV9LUT062UxKUcT/AfdtV/zTK2Y9bMJnerA2uqFisDtG2oN+0dN5zOptzqCqKskRrQ2FKUszFP0SYZbegR6prkiaVV7z1qf9q/9vytYoirOwt3gd6r4jWgDF4L0bUMUU2myvC0GGqTOVLYmb9tsYYQoOob8u+qcbGoUx2S4S+Y+ggJIe2NidskryPSPPYZ5lAJPQzg2J8uymlnUJe2tt0ldCfo9L03rPtBpq2RyWPTwMhDqKau2dRsB9gj2vnn0LIAUDFgFOaixcvuTg7Z7vZMnS9CGOwR7vbe3v7PUqvGlKQzRYs5B+SFKQgPeFJE6MX/8NoiDEym83YXGzYNg3VUmi5+2tlmq+3gEi+ab/l7QT2+/qWvk1JTLmPCKx1OA0p9BTOUWCo9EBlE9oGfBQxh+12IHgoqgJXmInFE0TMkeSzj2PK6KaPEqcmTfKJ9eUVzfWa0lm8s3hrsVaj7C7ZTEoTEjhjqecrnC3ZXG94efaSL778kg8+/Vgk/X8C46dxFa8auYycEux8PQQ2TESGvs9BYWS92XB2dkY3eLQtSCoQSKw3Wyye5bymMgWzckbTXklvk1ZUhUOrBLmhPPhACLlqog0KndVx5P0URUGfFGHwaFeQtKI+POXOB5+ioqc5ewy+ISbN1dUVL59+w2qxYHv+nH57zfsffsLHv/hTju+9T7DvUPUuhUliehhExGIIkbYfCDHhs3HefmXkdjPm+Lk0/p1A61EynWxcmfBDz5PHjzk8WXLv/l2qspCgUDtp2NQWW9Y8+OAT2m6g327QMWJcRh30FPLnu/zjOP5R5RMYgx92B926W/OPn33Of//Nbzi/3GBIpK6layOHK81q5XAm4mxiNtN0fYeKEWeFG+2Igl5oQQ4EtQ4YPVYt5fPSM6HELVspSaTKEoyoIJISJs+hMmNylAkFaoen7cgFIYMTEZLJCJ5GqTjqvpFvEozBQb5vOkFSERX19ByN1AVRuXpTkqMCtLiD9z2bzVb6glyJMgk3n1MtFpxdt9L/sE9F0Xo0m88A5E06w+7jMb/Yb4gfL22/Urd3r0fkKQc5Koki0zAEhn6gSYn19RrwoCF0HYQwIT8hvHlw/7oqr9pLTm+/dvfv3cf71CytReJWosaCYANaizRsCJHzl2f0XYdeFFhnSUlhrMZZqOoC5zybdmDjFW0YULHl0GlODmpOzTWXX/zNlLR3PuKTprt6SLVY4eoZq6NjDg4PcW6GtscEdYBLJ9SxBe/pL68ZLtecP/odL198ycmdu9y5/x5mvsJUc1Q2l05qTMPffIxNyD55njx5yr//9/8b/+2//i3b9YYYRJzBFY6/+Iu/4K/+6q8oy5Lf/OY3XG3WuLLAR0HkVocHzOdzLq6uKKpqSrBCCBRFMa2xESlaLZdA4OrqkkePHmM+LEhR0fc9fddOAg8xJpwzXF5eEkl8/eQbfvazn2Gs0F9VjvSFFbu7we8qyI2jCTMjGpsTdy0CDfPFEcvDY16sW15eXhHNN/jZIcqIKuQQIjEpUTOLanoeQdRXFBqdckKktYi/KTVJeY/I3FjRj+NzhxIKYkx4PzAoRM4+SfI0+CBnjFZsNhvafotNK4gGASneYqKUElpJsTOg0UFP9T1gQnMmJGfcdLJ5KnrUu9u9Jo4/QKcsFZ72FGF3P3z6v4okBhLyHpq25ezyjMUsMcSOkP+QBsCxE6f59rp5HbX1XQ4VRUX18vycvpH9PIY4IYbkNpkpYUq7vf77Eo5c9tqdWkp6a02SHnGrhZURgpeCR0psNmtO9YNJ7EenfGalPGdvmXq3Hwftf/wm6Nn+XNyk4O2jTIL2FNaiU6DddhA12kBIHleCLRQ2OZLSogCaoixRLTYaIQryO/aTk6SHXseY+53E5kbFRLO5otteo45Wuedp90d60Uf/P/FGc9ZRzR3vf/wxpix4/PgJ5azm4fvvvdV5/qcaP91EaT+QkzIPKUZi8Hjf0/c9ha4IIXL24gUX52eIxr5FKYMtNIulxTDQbBu0FtnDshDFOqOhcBZnNSkEobWk0XB1bDqVtxEVoLTAoBaCUrhS+h2WJ/c5/fDnFNrQn95he/6Uly9f0vpI0zS022tCv+HB6RF/+se/4O6HH6Nnc4Iu3tnMxb4lDC1dkylSRpTfBh+YBLpeSXnKKMDevqDHqmGMAtfmjc9qTfSeEOHZsyekv+9Q6U/44P33UFoR6DG2JiTwynB87z1CiHz9+GuuLs45OLEklxEkNW7C+7XBHzqC0DpiIvQDoR9omiu+fvw7/uvf/w0vXj4DZdGxpht6+n6g66/wSbOcFzhjqCuDn1nW2xYCWFuQ/CDW78i8YXROWFROcPJBp1X29vH0bUdta6IyBKUFmCRjZiplwzmZ95AkhdFaTaEQMPVnjMhmQnrdNEyPxv5cjQe29PUBaZStHb+ej7mUG7rfYKQksuA2J43brqXve44OD0FpQvYMIstuC/Vuz/OC7HGSbjYuf7syd/PQHYO0MalQSuXKdkafsuCDUkIhUEgfYxwCfTtA3/HSD+KfZQ0Xz59z/vwpixNNMZvvyc++2bh9WN4IZNhR8r59oCpGHED6/iRh1Sp7X+iI0gZjnHgu+UTTNDTbLav5jFmtqUtH27QYZSD7Zc1KMRo0HlTXMneGD+4ecLyqhYveb5kvj5gtjkiqoKhnfPjJzzBVzeX1NWfnzzl78YTD5YKj5YpydkjpFiS3QM0Mae7hXkcYtjTXl2ybhn/45d9z972PePD+RxhlQWcVr2mtvNmaCiSaruW3v/stf/2f/hO/+81vxeZhNpP9ynvu3nnAnTunrNfXPHv+jN999lvx6iqlID1bzFgdHQjyNCmiSjAf4840FSTI88HT9z2LxYL1+oqmafjtb37DfLZEKYWz4odljKFtPcZIEWuz2fJ3f/d33L9/X2SLs39LipGotYgf3KLjvBNEKd1EQRPSj6OVYb485PD4HhfPz4jDwNOzl2zP1myy5LkovInscki5+KJ2e71KYiTqR38kpBg2GumGkFHkm28qJ+JyP0LwdD7Q9Zq+MHgNvY+EBMYVbLuGZrOmXnYoK4W0tzpHKZ8eE31K3mNCkO+yqinKGlgLvX4KuvPrJgo00xywhxyh9wPhXNSZEq78e7TKyngBlGHbrnlx9hxn5oQwZMRJZNmFS3Frnbxi/ezvk+86YXK2ELGetqEbetp2kJ6XlAtrCiBMcy0oSU6C0lSpy9Dj3l6593+ycIjs2aBz71ZRzyirGSGANZaqKtmu17TbBlOWqCDePhgQBNvc+B2/7/h2sfjm595EcON2j5LRmqgT3u+eNa1FgW7b9gyDJwyJ6BRVndBJeoZGZWatRZyqG0C3gcJpkrIoq4EGpUJW5dUUCMqfokLp3Nvbbmiuzxi6Q3RhKHxB1JqULJMqrRxeIgyfzYCr5YqHruB6u+Xx1484Pli9tXn+pxw/2URpDOTHUCODOkBk6DrCMGDqGU3X8uLsJdvtNlexlVTTrKEsa+YuEfqGtu3xQ4KkKDI1DGTxjotcDoUkZrO6QGlNyM3kMalc8dTU5ZyIxhYFs9URtl5RFiUHByvS3fvUT77h6dMnRDRN09I2LQ8e3Ofunbu4osAroYi9sxF6ku8Z2kYqCCmwvrik6wbh/ub/fAjT9e9X7m9AxrmiE0M+TIz07VijhdufBrrtmosXPZ/9KrAoNKf37mMrJwex1iQ0upxxcHqHR9884uk3T1gcHmGKUtzitSAXkH5Qs/3+UCpgVCIMnqHpaDdrvvzi15w1DV9++QUJxayeoQdo2i0pDVw3A5xfofWc5ayEFKgqS993DENHSInCWiyKfhgIIeCKAlcUed6kKmu0xRDpfaDzAxAolUZbN/WHCQ1tl6ykGIkYojKY8TiZGnx3tBbUiBBJspMtdTO1C8bDaTqQps+p6czafceYtMQ3ApS0NnnTtiLNrC3OFRwcHhKA86t1DlY1hXN0oZ2eK5WRx5G28jqlq9trbb9/aB+FmQIgyAe0QY22wBlBCyFwvd5QqATBUznFQOKr331G23vufHDOnfsPODr5fmn0/fe2P24kea+pqI4Hp1zT7mdopaXoQpYpHxG/TCHWxrLZrDEK5lWBswGlhZYXB+G3awQNDwosiWWluXfnkNm85LobuLzeMju4w7/887/g6Oges3pFUZXYLDhyd3HEyek9Li/PuTx7whdPv6Qq5xwfPWR5dB87XxHLCj+riUPNql6xCJF6s5HfHsEkT1ZjkQDvBxQ3Ntstf/u3/43/73/4D5y9eEHwgcqW1GVJ7AaMU7x89oz//T/+B+7cu0dRlVxcX4LSqGDER0pUePB9lxFenxOigDKGwftdYi7VDLq+pyhn3L17l2bbEAZR0RPrCc12u5lMbEMI9H1PPZvxxeef8/VXX/Enf/InJC3XG0hZiSpN5pcjivr2h84Gn/saYiOKqtC25PjOfR5//TU6DtiiZP3sSmiyCVHuHM+aMZjL/5v6ZhQoZTHWYkcQGvmdY5KUd49pqPH7tSYGwzAMbJqB2kKpnahxhYQrHX7T0DRrhm6DU5qk7VSkexsjGPEDCyEwxICKYJUjKUMyhsXxKZvOEIxHuw4TM0tkpC1FKWCNV6jG/Rqy6WYWtMBkKtlYUB2TKkWIGp0LrFLU9VyenXE006ioCB4pvua5nApYeY+Qoo9UZdXosxNHoZ93nyyFqEAZEoaQICRFH5T4LZJ7M1UiBZ8pW5IcjT47cc8iIalR3S5iGIsYGrIokdZSyDC2IKkZi4MPOD5ccH35kpgiJ8eHPH5yxotnT1kenlDPFzide0NTJKaATm839H1VsvQm4zZ18iYKtZM3NyPC2zd0XYfOhU8fpa/XKEhR9qnNeqDvFUlZ+t4T4kBhNQqLsEuS0Oi0Fs8+I7YkEqd6kg9YE7g6f8bFwZJD55jPFkLDz+fWbaW+US3SFA5bV3zw0cd89ut/5PPffvZW5vefevxkE6WYzdliSMSQsiGaF0+RrsUMHaaOXDTXPDm/wKNBJ1R+YLt2oPOF0OtchfIeEzpKK70FJEXykLQiJk1IiiEEIoGqsNSlqIa1Q6IPnjQonLYYUxALx7prKKqC5WqOVuKXUlhLVR9irWaIIhX79Pwa6hV3Pvg5dnnIgEZpsObdbXpq6NleXXB9ecHQtvQhctUluiEro2Vvnv0q/W7I5j8e/qOb/bRZI4nSJOMdIu1mg0tbXvoNvyJQmv+J04dzfBhAWfEI0oZqvuTBg4dcXl0zDB4Kj7KFBL5JKig/dlbi0JGix/sBPwwMfc/L6zOeXV1CCtTVnEIX+BCxthL1KK2Zz2fUs5phaAi+xxlHXZYMbUM/dJRzjdWWZEyeGgNJUKUxCFa5EoQCZRLaFlSzOdVsjrXFFHmkmMRLJCRi9CQtinYR4cjL4Zw33FGqIFct1Ui5GSMWpVAp9/7cmLR8yGY1PcXow6FykpRuHNTfNaa+D6TiWFY1yWjKqiJpzcuLa4auExpF3ulDQnjTuSI7BlPT6sqV/5u9SbuPJeA0GLOjTe2C0V1gYcxYvZTAQiWRk930LakwzKNl8BLUn714STt0XKyvubw442c///kbranbh+araBi3+6huV4RvUDnUze/TWhOz7HtSovS3vr7CGjA64H0jfPRo6H2gnltsCan3pBQotOLwYAHAo+eXPH1xydnGc+fhAX9c3ScuHtJbR3IWrzVGRVyKuKLg9M6Mo+P7rNdbrl485unTL3j2za9ZHh6zuv8RZnGHolqCNRgLh+Usm1IDSYQ0SCKTzl6w8H3jb/76b/iP//E/cnlxgUJQGmstVT3n6PCYxXyOD57HT5/wzeMn+BjRRgLaMIhAzYhy9G0rCXiIxDSQkgg1jF8Xo1nHEAK+78VDzWqKsqCcl4Ch77uJ8uO9Z7FYUJalsAGaBpdKfvnLX/Lhhx+yWCx2ni43kJl3t5dnjEcod9nPSCWFUgalDDEZFgdHzJcHrK/OOT05IVUHPD674rp5QgwqI9N5rSahyKq856acLDnnMNpACsTgCVkQaNeUribUQ95TvmalwGhiQoxnO8W8yqIkIVEag9WKdrsm5iKS7ENvr1AYERWx3Aqf35cIMSWtKaqKw5MS+6hBd2eY4Ik+itLdlPDsoQmM9Oa8/e77+NyiWY0IlFLmxvzEENis11xfV1ir894l+/tEoxwLLeMvntbRTrhgTMjeNaIUo7AX5vMFKMXgwwSaxTQSPiUOiHF37bcD7hv743jRjNMsH8cQsUqkhlxRc3B4ynxZ0myuCT5wdHrIEAzb7QbrauaLlcxpSjj99pDb70qKvquo912vm9ZJiJPvlFIWY0qsLQjZ401yRxFP6YbAVgd0hG3juV5HfJyRsjiVj4q296gUcVaB0li7ix1iGCAFdOHEd1EFiJGzs6dEo+lDoC4sTh8K7T8zNnyUKMMZET6R0ELO68PjYz786GNePHuHfp9/wPGTTZSyGC9j60nID6yKgdi2mBDQCs6uLrncbohaYZWC6InR4z1crhu0gsop0BalBhIBbSzaOMAweDGT3bYDXQg4p7FOY03EmUBQmqEboWbxn4hRobVlsVywWi1E2tKIH1MKWflIaS43LfPlAQ8/+Rmr+++RynmGshMx9O9s7s5ePOWrz37L8yePWV9f0vnEuo9sgwWTjQdjzAqbu4rW/kN/m287VRBJWJOFCfJhut2smSsNpuDl46/5crFkvjykOrgv86ZFisPakuPjU569eMl6fc3hfJZRGZ0pCRr9I1VWVBRndJ88m6Fh27Wsr7eENrEsl2BKglcEHXGVoETWOuqqwCqLLWc0Q6TdtLKxIfx7FcUkrqoLUq8ZQsIijfIqiceKQjPESDIW4zSmKKjrGVVZS2KJERKdUhlJGpEIpsRFEBeTkxOdqS3jAb13MORKnSJX80OQRGSqDo+Ha3aPl2+Sg07tHVpvMMaD3VhHWVXUswXdNolPSlVhndA1xuvQKlcPx/XDLqC6kTSkJJB/ToS03gUOIUgwKC/RNw7i8ZzSOivqxTgJC0BuOQgRbUU2OwwtKiZiHOi3W67OnhF8w/HqLfUH3iqz306YJCccux9Eknn/3zdQD6NzVXygcAobA1Wh6boBPyRiAG0KUJ4henofscbg2w2bxvLN2Zbn1z0DJe564OzsmtPTRMCjs9JRSGQ7UFGINGVBXZ6yODzFb++xPnvE5csXnP/j32LcjMXhHVZ37jObLbFFgVUlKQxC89ASGMb0w7oK/+Fvf0nqI/NqQVEWLA8OeO/993jvvfc4OjygLAtCjDx6/JjPPv+MX//611xeX5NINLFBKYVzDucc2+s1RSGFln4Ypq/Vdc319fWEhpPIBrNbqrpEoSiWBc5akov0fUvfCzo0DMP08/thIHYdjx494uuvv+YXv/gFQKaG3ha9eUdjLARMiEdWLY1RkIqkMaZkdXjC+cVL2n7g5OSEo8NDHj15TiARwu45TALvCkwd1aRBomLCpyDnZ/CE4G9W2TPFdUSCxPssd6ipHLSFQDcE2j7Qh0TbDcwPpB+vbTYE3yNCCWPx5i2Nke0Q09SvtD+UNRydHrI6OOOb6wtBiCbULL9GjfcyTdc3FnRGNPzVSVJ+3lO+O9lwO4TIZrPl8uqKg9VcvhbHbGkn2nN7fLvP5Q81ZP0vV0tRasuCFjtUfESQ1GsPkNvzQl4fcq15gsYEK0WSMYQY8THiihJtDU3X4sqS9z88pA/gygWuLASlkl0fM8Yf72DcjoFedY2vuuYbX4/iQWaUwScNqkSpEqNKdNpilcLoiNFCxdz6RETRXw30fSLpmqQK6W22lkRJP/QMwcMw4LSiKkuMtZDlwVOMNJut9E8b2Qdj1xBfPKFvNhRxi/ngA07uPkQZxeAtFI6gtMTNaRC6YEooLYIsh3fvM1sdvpN5/kOPn2yiBHlDYSrFMPLDu77LfTOJ8/MLcVDXDmXElyMGhddwtW6IITCvC6xKDF7ReVDRYxWIgFei9z3d0AsMajNVTFlJapQhqsQQPd0wiAkY4CoJ+quqpmkatI8MqSf2G54+fUZQhg8+/IiTe++xOj7FFDUh7bL5nYbR2x+/+Ye/54vPfsvm4pxmu0G7SuatazGFBEzeD996ByPtax9GTkn48CmCNuTqo2FWlXRtoA89y9mMjz68T6EGLi8vefboax588An3D+4KQqDMRPeoZzOKsmTTNBxr8U1QOlMcfhCJ5/aQw1eqi+OWqihcAcYxxOw5YDVWG6wyqDTQdgNWR0qrcK4iRUXbduJMbaxwz8mGrlrR+8DgPQZJDLQR6WclhVKMcSJL6wqcK3L7TkKj2Ts/UHqvz2kvSd3vy7l5X25u4iMqNAY+Knt77F4Qd1XfsVb0Aw+XSfpZieLZYrVi6FvawVOhmM1ndCHSR9lkndV4n/ZodiMOtntnSokCV/RezEJzoiSy8iorj/W5qV76RgTVlO8fD8lEzBVcGD0+Rr8P40pmyxXdOjFsrtHe47seZaE30DXrN7r+11Hqpq/FHfXu1YfqGIiN909PFW+5hrQLHPP1G6spS0etClym3TXB03Ye1yhsinRDT+flmitlKBcHXPmCs+aKvkt02w2bl08xwwORqk8elRxoSzIWrw1RQSTgVA9GU6ze56C6y8Hdhu76GefPv+Ds8S95/vgzVgcnFPWCYrHC1UsWByeYsqaoKrRVOaDcXed3jU8/+ZS6nnH33l3e/+B9Do6PmC8WWOcwWjEMPd57Pv7oY+rZjBcvXsocZhEfpURUp2kayIlR13VTn9h2uxXp72HAey8y4y6junl9WWMB+TnSRB7oupYYxaA4hEhRlKIM6gfW6zW//vWv+fDDD5nNZhNKut/q9zrRj997RCWb44QG57OQTE1XFpTl8PiYx09qXpyf8fHhHQpncj+OQqUoimsZiQbZq5JOohUD9H0PSmFUZg0Yc8OTajyL84f5osnsSynuxKDohsi29WzLnqbtZe9P0LctQ99QhoB2bzfB1EkL2payimhK2dBTRJ1CSswXC5ZHB6jHYxKVURu9j2zvkiWF7NH7z/uIeH/LYFQhhs25cCKPgqIfPJvtltm83qksT8nEXuFoStpu7tFpD7V81yNGOTdH0/IYIyEGQtDZbzFJrxbCyHnVet9PHEfmgOzNchaP86ONCA44ZzNlNqKNpagqfPbJLGaOWVVhylpUEo1BW5tprxF4uzL8t/f2b9+L19+Hb103caLZT9+Vi4kms4/KwlI4SEqUdHuf2PjAEEaN20SIIRcCIWAYkgjO9EPERyhiktgDoXT2IdG2wvColcEpi/WRbrPmmy8+g66hMI7V3QJlClQ2shW2jBTwRoRTaznzjf1+Y/p/DuOnmyjFfD7kDD3FSAoindgPAyjYdi0Xl5fEFHEmU1m0yEwmNEElrraeTTNMJl8pRrQZMAScHjAgi1obYlaJ6oZAaZ0kCcYij2UUaVgtjdSr5SF37z4gRcX52Us2QKkH1LAlBs/7H3/Eg49+hipnKFfhMVg1AvoR8w6rRdeXZ6QYcFVFAdSLFWHbczVckYiiepd3rZSNdZXSkhBlNnbKIgsoqXRrC8kGsImqLKlKRxgsGMOd997nX/zrf0NcX/I3//E/0Fw3nJ9fcickjDVS8bOaoIQDO18u6ZqGNHhMWeYaqcpb34+cl7yxheDFqRqF0QbnNENKuUKKGLAqCGj8EFhvNrSdYTkrqZwVrxHlUU5RuAqMIF5RaQLZ0DDFrACYgCDJc4hS/XXFJEdcluW06Y6FOAn6slreXpV3PzEdx22Ub/wcwE2Rg5s/43XjNk3s+4YafZSUxljHanXA9npNs20wdkNRFLjCofseNYoWRHnOlFJoa6Yc6UYvUgj4UblHftONBHH/kBqpnxOPX0ufj9Iao7R0KimVDWk1PkWS0diqpt2s6YdAmVNGP/QEX2B/wBL7zoBg79+vnvtRWnh8fRwrAqSE9KhhUQSMAk2gGxp6AtsQKJMnqURHz/UwsD7vKWYFEaEE66KkszX9NrDZeFI0WKsYguebF08ZUqRQhlFxSnQ8yZ5xglgmLd48IRmoHMSSuqwpDk5Z3j3DNy0JaJqG8+dP8OGxFAOM4c69B6xOHjA/OEAVJW/SdvK//N//V7bNhvl8gXVWhBem4FP6fEbKZ8xecLJmItoouq6jbVs2m830zFvrSCHmhEc89vpeEPvtdktZz7BaZT8RuRfD0NN2LUD+Hk9RFCil2Wy2hJBRhJho25avvvqKly9fUtf1jULA/pp41fP6NkYI2espScFAkh89FQZiTCwPjpgt5nz++ROG3/yKi/OXxBiw2mGjyJoblQAtTd05eB2pYKOSm1JJFE2VvqF8F/MeBkzJ1ohwKaXACM0tJEGVhpDwCcqqwhUFV9uteMkEP1GS3tbQShPTaIUwJpbgwzAh29qJwTeMid64MWWsd3pP+4WMOMIhuVab8uduvQElz7aaZL/HJCvQ94NIpftsqs3+3vv6tTL2BI3v5V2PlNkAY2/R/jUrNe4TeSf5jtu3vweOCeP4sWYUGor5ObfUswWL1QptHcoY2k1D1w/MMpU9hIBxVaYmiy1JSBHFO+zx/o7xqoQKbl53XiUkFYkEUAGtAyDm59YG6tpidSQqjTEFXZvo0sCQxFg7RE+KStR8FSgj8dEQI8kH+piw0WONQ2lR4hV12ogxiqADNY7KWayydE3H08dPMLrgw2RY3TWYokbZEp1yESkxqXu+tijwz3T8ZBMlBeM+PKFK443rup6YoN+2rDfbHRSb/4xeH1EpYlIMUaSbtVbYQhGGTqgESh5ckWwGFQ0hdjStxzJQWuhtpPeJIYisrdEK6xzL5YrV8oCynDG7e4/aQKl6nj76HKM1x8cn2KKiS5aYDNoWGZJJ2Szz3Y2qKjg8PsTagucvXlDOFnjdUl5vGRDlGWkSHwPVnaLPDdo24FyBsRFlIip1aJNwTmOAwjnKMrE8OqI6vIu2NWW5ZNOuuVqvCSlSKNnSjI4CnRtFNau5vryWhCNGQlIkLYfzj1VEksp8pGtbhr7PqI7FD0kOqagYVbqS0gQFXUhsti1dJ6jiclbjtKHrBzE1dQ7jEsomCcK9x/uANknEOFLED4EUBiIabSu0dtSzOYv5UpSjyB4dCekL0FlKQ+0bKcvGtKP0pBsJw210af/PGFTePkwlKXu90MCbHL5a24krT1KUVc1sPme7XXN5dc1sPhPlnSwrrPPvlMN2TA4kHRwTnpSSeLrcSCpuJojyu3dJ0yRRjFDxdNQonek7aZyvTEVUmiEmhpBo+p4hROZVSVXVlEuHstJn+CbjdSjBWGG/jaLcbuYdv76j9KQRBswf5zlSGqUMISq61tM2QQ4uBX3bse48Xlm8h/OXW3yIDH3k7LpFWc3gNSE6lKsxSjOkyNn6is0wMFMrxMPLZFRUT8qEShuSyWuT0avLoqxFuZpleQCxF4XL6PG9BLpD37HdrGnWl5yfX7M8OubO/fvM3kAhqVyUVMtqWhNidCkFm37o8SESvKcfOoahlwTBDwwxSD9pFlrYbDb4TvyWRqnbHSIpaFJZlhhjJFlyFp3NG+UM6Yhx9xwdHBwIjS9GrLUZbbJs2g0hBM7Pz/n888+5f//+3rq42XtnzNsP3jS5gE4SsZoYM9NhRJ8NEYMtCuaLBd4PfP7Zb2l7ER2IyedYf2fAPO4NCYRGibrxLMUQs3ml2tFfx+AwIwMpFx7HZFXUOHMvFRqtC6SX01KVNZfrtfjtBQnE30kAtgNn5P2FSEoBbUXcScQ4pEhFlihPakehnOjQ5OMv5iB1KvZERo+lcR5Gpsto0gsq2zcJmuKD+Lr5nCCq6XftB9c3N7+b+/O7T5Jgl/sKFS7kmEo+J12k43sSJH2UVlcTvS5OvlVkVELAn5s9qHpER41BG8Px6R0Wy0N5NgtHuFrTdu1ekpVZCXk+Yxq9C/8w87I/XleIfFWBJKmYRVg8SgesjcCAYmA2s9SFrA2VAj4kNkOg8aKCq/KZp7P4B0pUho2SwlrnA733qKCwZiy85Z4oXRK1pu1BGSiqBct5he82hH7g+Tdf45wUuuqqlv6kpEnaSFSaxjB6z8biJzB+solSyrWu/I+82ctC7bueGBLt0NO1fUZEchYMEjChRKVJ73pICCLtrW0h6E6mv3giOsO7SiNeOk1PKg1Y2RC1VjinsKVhNqs4PjlhNptTWMdqOcPR0142tG3LnXvvUdZzAgpd1CTjZCEmNVVzeYeZ+vJgxeX1FU3bYKyhqkqGKIpOQxcno9iQK2Zxr3ol07dfLZX7YPJBWhjp70khZKM+qfymGEU1yTqpQI1eIzGilIeQUNpjjGYxn3Px8pyuaaitm5q1RbT1R1YbUyD4ge12Q9d24qthDKkfJpraKMOtrcFYS4yeTVOy7TcMl1s22x5nFGnwOFswRKicpig0SomJ4DAMKCvVIJMNicPgpTLkVKaoHbJYrtDGTgnA/uG3Q45uBtnj18Yg4vYmdTtJehU97za//fbfP4zyIrumNhIQam2o6hnWFVytr0gKfPZP0ipX7PsgohVTAihP4nhdY3V6pB6Or9n3UdpvFpbfO1JgdomTFI13dMaJNmosQ0hs2pamH7Dasjo45PhoyfJ4STP01Ivlm1399ySUU7DEzXm/jTBNqGIOOseATOdqoxR1LDEaQg+hkbb0qzBwvWnpBktSIu+qC4fyEd93rNcdyUBRzNFZwj3lOdqs1/Sd0Kl0dmAf/1ZaJMpFXUtPybtGkvmUK77KOZKaowBLxM7EsDSFwDLKfR+ajoura55+8w3z9fZ75zSaJJ5baUc7JCWCH/BhkKAyf+yHThqVVSQEj3OSYE1CDYWT53FPeWu/p2Sk6fnQcnl1iXOG09MTrLUYDHVdo5Ti6uqSzUZU78qqpKqqqYjmnJtU8D777DP+/M//nKOjQ3a9Q99+bt/mSDlJMVnwww9iJh6DxiiLNRptDcFHKVxYUeM8WK24bnuGdcc+5Y7MIohRhBxGFHBcywppME9hr0Ke9p7HSY495r06klKmZ6ksf68Nxlh672mahsIVaBSb9YZhGDDx7c5ViCPFKe1V+RJT0Ukj1grW7hkT7xdgd8/oVCycEE65zyOzZXdMjjjtrsggCYImhkjUiOpeEjPekXo3moaPif3++nnlvv7WZun7x4ju7gpZakKWZGr3CmDTxss4mfmfe9ekEirtKOGKXTKplcIVBbP5AlNUoD1FUaPVJV3bCf3O1XJO571ioqvvUSL/UONbtGt29+zb906M0FMuOhutcAacSehSUzuFwqOUCJVth45NK0wfZcQeeezbHcXJyDGaNeCdInm5LyEFER7J86IyEhyjWMHUsyX333vA5uIF7fqCEDqeP3lENas5ODyiqCqUcgRt0dohXaxvLvj0z2X8ZBMlUhC6iB6r5kI7aNse78UTaNMMwllFbqosjiTBOiIXG6PaZdsofAy4QvpVDGBzhUmhcjJg8B5C36O1pfCeMHjqUqOMo/OeunTcPTlmVlTURYHTgPc8f/6UPkRO7j5Ai4PYrtrNBHgx8kDf1Tg4PuXRk6ecv3wqTX9aU1cFdVmy7Rp0riwnrzKdUCGKSiZXjvSU7JAkCFYpoLViVjiZpxgIQ49Kia5p6Ppe+rSGAWOkIquVQhExKZH8QNKBaB1VXVHXFZvNNfPVShqKVfYZSj+Oezz4gdBuOT97Sdu0+BAE7YnS3DuePdaaXGG0uLKiqmdso6fvO/qhwxlNaeTaU9PQdwprhXrmQyT6gcJojHEUhRPKVy9+UmiDK2sWywPKeibzOCIKUapoGSSVjS8XpF+X/Lxq7L/uW02ke2NMLl6XKL1JRc7nXi9lRqpOpHAGaw1tI34bMYlCkh96qaorNT2TEjwGhE++hw4xHpjjYSNVR62lD0z6DIfds6/UlBQplWuYaaeQOCn7aYWKmuADQ9+TYmI2qzk5vcvh4RzE/oeimH3vte/P92u+Mq2p23P/XcnSbl5SDoA13kDoAyoNFCoQTcKEyGZQrDsDSpp7+8Hn4FahywKjS6JOJOMI2uyKSykxdB1+GAAtEtFaVMByuWAKalMO2gQRHPFDSdBTnnfy8yPywBHt8sGdEkVRszg8EoPNs4vvnU8dFSGOhWdJikMQtUSFzl4QiuwDTkqK4CUo1UqUScfk5bppsMago51QJBB6XlGU0767mM/ou5YUoe8CKWqSVVyv17jCSv9p27JpNzjnKMuSxWLBarVi7pYSPHrPy+cveP5E/KcwkLRlZ1Uqymdav90KrDEmFx48Q7vl8uyM9cUV0SdW8wMWizlFaSAGjlaHnByecPbknNJaCm0gyw8nhBYnQ6AQiVl3IZFW4g0VoyKGsadpV80n4wcJuT/ocR+asgB5XrQiasO2Hbi63nJ4uMRoS9dsCX2PGtGHtzSUFvqqShaIQvVOKVP1M9UvwrdMdGGKHnZ777eR7n1681jwmAo2SvYteexiRtVyWS5LlocQc/KxSyS+XeS6uZ9PbIGM3r3roTKUNqGIKU2J8/4OmF6B/sOrzxWFIup8L3LiKjGGIKFlWVKWlewvxlA4ob72XSdo8/TfmP+mKRHXfP/59WPm4PZe/mYU9ZvJUsqiX5JrGrQKwr6xhlQW6NTjey/GzAGatqPrMr0173+Cy6p8ziUIahTWpa6KjJyHTF+XeZUEKWK0wmQ2SESxODpmtZpz/qKgub4gxoHLi5c020vmh4eEVBJVKYJCIWR69pvFI/9cxk83UQLGCtEO+ha6RtO2IhPrxSRLjUaoKR9bMRCJu8M9jT9EOin63ueeEU3SY6iQCEoaX33MgYyWhthZkQ0Ji4IhaA6WJQeLOYU1Ui2wcHV1xdX6mmp+SLlYoV0pqiXj5nPjqtQNBOdtj8XqkKOTU87Pz0WGO0Vmdc1yPuN62zGMyntK5V7hsXK/q9qMjeYqBJGkTJGqdKwWM2bWYkg02w0GTbPdsF6vQWm6wVNUJWVVSTVbgYqBzfUFW99wdHKPsiw5PDzg8uKSw5M7aFOOxSvUj/TXUArW19c8e/YM7weCF2dxFbPLeh4xirJTGkQpxrmCsqzxSpOCx2ooyhJr8r3Nwbs2BnTEk3CFk6p0RlpsWRI8KFtSzRYsVweY3DCeEMRNa5MN88YL3TeuVVNvhvx7X/Hu5mY9bsg7Ke1vUxVfRxnb//43OQB6Ewk2SnDDgAo9od0Suxbf9Vydb3FVJf4WiBF0StIbllIgBEkG43iIMCJ7apInNmrsBRBrGq0ShQFUIPpOPNGy/4YYQ0owqkIkxB7jHK4UD5gwSFKugmfYNpTGsFws0c6B0lxcXLA4OqYoF2+4qrgxxzfmTGWU+xXzPgZW+9Sl2w2/KWWBD6UxGpTaYnXD8SrSRkUKju3VnNRYOq+IQRGSmSg8WhfowooUrJamaGIUZcWcgPjsJzS+4ZsHn7r5ObUXEKn8esBMaxHgZgU1pSjS/ylh9YwTV/6g+RzFAgRljNP7IYmAzPh1rTWlE9NUb4yY8jaC3td1Td/34nHmHF3X0zTNDtlOkbKsOD095fnz55ydnTGbzVgsFoTQEbcSaLhCRCHG+Viv13gfmM/mHKxWIgwRPF9+/RWffPIx1lp5zyFMwfK7QJWikoRcp4hfX/Hst//I489/g29bVvMFd+/c4/TeXQ6OTjjQBX/ywS94/runvHzyAt/06JCIYSBZpt5BEbBQomyW9oRXkvQVgRQFydejrZ1eQ5I1ZjILwKuYJYaV0GtjJGlHFxMvr7esLresDo5YzhZsN2u6qwuWyxMR2XlbYy/ZI4kAyqiomYL0qyqtqYrqBko/JgfAtA53wFuafvT+fnr7Ho9Fj2yRPT0709fz85GyIt8Edu0NKQDtX47azbe84p0HrSG/CWOMKKZliuFINJze263vu40wvY65INOiAIkxjDFU5YyiKkWwIAkDRCst9PZMAxMFYXn2tdZjhQVlf/+CxKve6+2zcYc0fhthvT0HU6IEKCXJjLOK2PXM6xl1URJCj+8HBh9p24Ht4LP0t8JluqPVKu9fOdVRmQmTGSzaFihl6ftB0LdhwIeIwJYRkmc+m0FSFGVBtJbFaoatLOfPDc36kq5v2DZX+NBhELplTIl96YY/NGr3LsdPNlHaHdu7MDcBKDVJdw7ZY6VwlXguZUQppSSQpLW7ZCn/LJK4JaukRHIyjg9CrlBH8eAotNCoDua1BIkm4Qqh0p2cLqkLTZGZeSn2nJ89Y9O23P/ojzDVAowcLloprBbYVKsbW987mztbzVmsjinrOeuLC7abDYdlzdHBirPLNaELaITzPppup9xXojOCFHPfuVZIy7kzHCxm1IWjMAoVEnVR0MWEs4aYYL3ZoLTFx0Q1m6Oy/KcKgZcvX+AZODg8RRc19WzJl199w2a7ZTWrdvD8j5wWreDs/Izrq2s58P0wbbRJG1G6MkYOct+jjMEoReEsKs2IroAYsVpTlU4al6NUV5QSpR7MOFeSWoeUa/jaycatC5YHh8yXByRl0MYJypKTHq32qE97vUU3/+hvfe5mterbwdh3JUa3X/eDDtskHGpNJIWB9vqSsxfP2FxdYbWirmp8VqEcwkAYPCoW7KoCIz0lz9P0HI48jUxfwkyFgzQGzVliX9DOMZlUmTY2OrsL/cCTsqTxwNB11LaS585YqnktfSptSwiJWb2gqt4MUXrVXL0uyfw+auOY3N6cX7nXIXQ4NRCb58xsA3XiuklcNR2NT/goAhY+hl3gEgQJjhk1MdxaS8jcyNGZdl464zUoss8W07pLahQBG3tWpLS00wnL92xck1oT8jrWRvEmrV/71fgxgRz/xCzuMc6lVON3nwsh0rYt5+fnxBip63rqKzpYHQAKox3XV2usFeRzGIS6cnp6Std1vHz5kuvra/qhpyorbEZIbaZljb97GMSce2h7ytKxXK1YLhasNxu2XYuryqw2KTMj16LgLTeZhySFBYsmDD3d9oqhuSJ0a843T1mff8XzJwcc373P8eldqsKxWhY8O+vpuy1SSISYfEYnyEnAXvWRXfA3rWPGM3hHZZz2rBGR0hqjDSomoZRlxCoBbT9gSFyuG9p+AKUJfmBoO6LvIbwliX5EGFBAI6H5jqJNMUuca63RaOm3NaPBOpC/L+1d/5S0pHxeT1vAbs52QT/53yNPYOf3FvdeHWKWDZ9QrD2Bl5SFk/bnftpDEj9ku/59xmjrYK3Noid7iWTa5XbT+rmFlN9AePJUjZHb6NGj9qiQoOR32ULWkAZnLM5awuAJ3pNrMyi9660c9/x3KTLwXWfkqxgC375vckZZLawmqw1OK6yRniPfe7bNwLYdGCJo5ahLMW03xlKVJXUtfnBhGMRg12ih2RqLK2fEBF3XM9QVw+Dpuh4/eAbvxcxXI8yeusRWFbqumJUFxmrOnmsuzl6w2VzT9w1V9lZLk03Mbh7+T0Tpf/AxoUiQIVcJNKuqoq5mpIXnornAuURRlkQ/SHPungFnDNmILoAPIhcaU5JGTiXVOi2ZgPSTKBFs8ClJH0AMlFZRFhbwYANoD7GD2OGMwhnF+uqSi/PnFFXN8uQ+ITeyGiWIhPQikClg45bxLhOlBfVixWxxwPb6mu12S11vOVjNOTpY0Dw/x2YGjpiNZR41EWvVVE1S2mCUoSoMs3nBrHYUhaZ2ljR4utJBhMVizqyuGHJPRDWrWR0ckxC6z+B72q4jmZS9XDTaOu4/fI+iqhmpQHLjf9y89EPHxcU5TbOVZvC+zwlNVvhyTpqZo8/IY1ZDshZnBKZOMeQAWxPDQIhZ6RDZrJVWGGNJRPoQciKINKBrx6yoqOZLbFEyVcfJktZjcrQXiOhbG9K4Sd1El24mQfv0j2/TN7gR6HzXeJNqUQ103rNZr3nx5BueP37E9dUVTdsRolAjjNbMqzkhDHTtpfzc6QAZE0ShAEiPgwSUCrJynRN6V4qCBGcqlohbCMJrUmKktIxpl8k+PgmF9+IOFLw846OsuEWxmM1RGq6vr9HWMF8sRS76HYwxCbjR07E3btMrUz5sjY4MzQVnX/8Ov7mk2XScNYrLJtD5hNKivElGMEMMpOgxykhvRBRjUKUFcRt/l57mKHPmpdKEoAcjtid/8jsco8ScEMEY4txMkuRlu1rzTcT8++ZoTID2kbfbY5y/yfA6QT8MXF5eEWNiNptnpcNEVYmZY9d1E4qms7KkUpJwWWu5f/8+2+2WzXZD0zT0XS9JkpMq+mw2YzabkVJiGIb8/iJt0+C9p+1atNV88dWX/Lz8OfNqjmHn9WUn5OUtDmUzI0KzWK648+Ae26tnbC5bUvCE2PLyesP59hlPzw9x1ZwurunCmsG3ROVIWhOz+uHNOZY1IH1tu0B++tX7a3VEl7TOgb0ixUhIQajVSewIrNUTNTKmxNW17BczZwkx0bQNfd9RxR9HsX7VSKSsprbbZyJB2AMJ6ZPJ93Kk16UkdLAUowjz7P206e+c8Sid97NstCxFj7BLwrSYAI+PjwhdSC0jZHXPGEQJbUzQ9vfrsbCxv3bk/YlX1iT68i4r/FqhrCAQs7qmsJpBg1dkBVx5BlMcaXRMiXcGIWV/yFOnRhGu7B2nMw1dpSxGAljrsp2GwRiFdgXOOZpmYGhb9CrtlDlzgcxok60C3t14k6LXdyVMo+VZigFiwKhI6Fui7wmho2m3tG2HjwpbLpjVFXXhcFYqsVpLEonKDJgwUluz0X0SkMCHwNjJnxS4qqBIJYMfsE5sSsqyoKwrtCsxqqC2mmq7QV9d0jYtoetRIWKLsVC2i0F+KkkS/IQTJVR+2NJNLXpjHNYVLJcr6u2AuZINN8QgmbQSSovWClcYCbCSJXgJ2P2Q0AmB5KWUxCgjMDa4Km3wvmfTNvR9yaKyGKuIRIY40G6u2F5fcnx0SoqJly+e0mzX3P3wj6mXR4IwZLqQNSM2JrLSKJOh5neYKBUzZosjDg9O2JyfM7QbLi/POXaO05MjrpuW66uNoGKFBZ0YhpQrNxaUQykRwbBa45ymKA3WRqwROl3Scih6nwPUEFgdrDg6PuH0wV0Ojk/AOHxQdO2AK2vmh3Osq0AbimrGg4cLlDPsuk30j56Xrmu5ODtjvd5A16BQ0qOWJJh3zmGcxeiSlN9vCIk+ZM51SowqRdEHYhTaRtahI/mAMbJ5DMFDF1CqJCRFT6KcVyyPTlksD4RDPVYu4UbyYJRGWYPSArPrvcRo3Jz2/37VuL2BfYsfrtS3gp5Xvf77Ro1ifXXNi0ePePT555ydPZcgISM8hStAa6qiIPQDF6zFtG58H0kJKkQ2gdSgVCRFNW3IpITWLisK9qAiWlv02O+Q9HRA7CiJucdmchgXD5UYpPJWOCt0ICvKPiDN+Kv5IfViRnxHj97r+O3fCoryvfXJ48MAoefsySOunj/l6uUVj896nvY1rS9IasiiC4AS5AyVssBGzOILGbNTOSFPolbpXCHqjXvzNyZK4x+VozulxkN/L0BWOZAeK8oZyUsZdSJlqeoxBH+DdXU7QZqodzFOlfZ9quLIu08h0DQtRltOT+5M3+O9SOSOnkkjDU+C2JFmJq+bz+c8fPiQx48fs91uRf2uD/QDaN1OUuRVVYnwzSAKcVprBj/gr68Z/MC//9/+PddX1/zLv/hLDparycfJeyM9F29xpCTshxChnC/46NOfkXzDV7/zdM0VxsC22bDebtmePSeE53R9QruILRXNMBCTJSkBaY02jOmtZkwsxns3YgDjmTUmFTH/vUMaZT1kOlTManyj78vYjxkjbdOybTrm1ZyEpmk7vB94zdb2o4ZGetMisjfFLMMvq8wRosIYRUoN2sT8PEW0zq/JHlWJLExDVsNTspdJoirfJ6JtcSp47TTdkN5dlVBGEgttDdYWFNUCW86IWcVMJZULFCYnqfJ9ZKQ35sdd558H341yvI0xqESInrKwnBweMC8dzboRW5UJD0Lu/djjkJOokJNsnZtoRH1tFJ4fe1AlYVUYjLI4U1JV0scrbTkaayusdujYQehRcUBRShJnNMkokknZmuP3v+bbTI3vGjcpx99Okm6+NqFVRHlhY3RDy2ZzSQwdYWjp+5aUIraoKGcz6tmMyowxqKf3A93g6ftBeq/DSJkNKDXgU4f3IbNmVPZW6nDWUZYVphA6o3FiFF9Yi8kMJ6MU89UR9fk5oQ+EvgfvsVngJTfq//6T+z/Y+OkmSoi8d1AGlEdnoy5PImLAlpTVgpQuGbyYwXrvMUFCW6WkymmNyEQba3FFIVWnbIopAXHuZ9IKnSwhIAalvedq0/Fi3aOdpSqtIA5WYfqO5vIZdKf0g+LsxTOcqzm9cx9blChrwVgkksiS10pNfysUb+VJf81w5ZLZvOXg8ITz2TdsfEfbbTk7e8n88JjT00P80KFCpC4tqEBwWX0uklWkjFTBQsiH3cBiXlDbGSEM6ARFURBUoGm3NG1DDHByesIv/uiPKesZHo0yBfViRVlrykUJtiKisVYQwqTzXKgx3PpxJ6hvW5pmK03pzqGtZXt+QUia5COx69Ah4JzFpCTVeCsHpveBEHdrIiSp2CuY1GeGEPEpYnQkDB3JGYy3RAyqcMyXB5yc3qMsK+GsF6J4NynGqTE5GIPUXfVmHONGfBtNGr8GsJ9AvfbwfINN/01Gd3nJ0y+/5PGXX7C+OhcagJaApJ4fsDg4wg8e3w2gEweLFV03AEqUqPaQpaTkfgt8O6IVY1A+ogcGrSXQMCorGyk1qSlqLQkmSZTyxoNZqrsBiOjsKRECuHpGWViGVmSkF4slRVn9YNrG68QadhXVMUHNlfeR2vSKM2e8fyFGvIHkNaq5Zvvid7R9y0Vf8Wzd0apIiLJ/RMaKdEQnnQUDdPZmIQdYWuwHkORgOauZVSUj8U6EBm5tRXv/Hq9zl7DnC0LtIkG1w5AYK/KZdqOUeiNl/xHxGedhn/I1TvP+12MU3zyLIDaHh4fEGGmaZkqUZEjRZrttiCnKc6fEkDGEJKbkSrFarVBK8ejRo5zgiMnvMAxsNg19PzCb1dR1TVmUpKySGTNq1zYNz755wl+3/zvtesO//tf/GvJ76/uee/fuff8k/IChSNjCEDtNH6CeHfLwo18AiouzZ5SFAwXbZstmveX88gK/uaaoPLpLohyImH5HvVuMI7Ki8jre7b+ydsegGGQPHJUpR1EHeQYDaJVtARiBSEDWUoiRrvdcX19zdLggKcv1esNmvebo2PO2hiJkjx6DVlE8+waISQEu0+sDpIGqchmY3aOsTNm/YkdWzTQ8dKbMq2meSGN6tEuWDMJmCSmhc5LknOP03h1ODg/QxqKUkdrR3lon7SsP7t5GYgJe3olwwe2hkeKg05FF7aicwapEYTQhJvGuTEmQn6QIaofK3d7mRhW2pOK0vsZUSyP9bcvlkuVSLDRA1o8yViTCY8jUu7TbbsirUn37bHwb43Yv0uvo1d9HvZvoijFkSxTP5eULzl4+QeEZhpYQpY9bVQtsVYLStL0kRj4Mmf0kFgZD8Dkmy4WrpAh5YSSk/y6mJAJnQfwhq6pGKZiXNavVksKJR5UxjuQVRTGnKGri4CFETEzYBD4nShNKmPYe6H/m4yecKCHymgpQEaMiSkUGDdFYYlSUsxWWb+hCkMpQrmZLgO9FUSomjE9oI9U0awzOaKzVqEqmL2Y+89AjPTq2RJWKgOLp5YDXkVlpKBQsa3BqwK/P8JsXbFrP5uqK9z/6hNXhXUEKtFSKtLFT9V3a8pAm9r3Y412MsqwZqjknp3e4eH5M323wcaDZbtBFwWq+IJwcsb26QmuwzhER1axhEMWw4AeGQSrxMUX6oSH6ObOywKcg82QsSoPvOi7OXmB95MO7d5ktlsRc3QaNq0qsNiQDyVi0MrnqZDKXe9S2+fET49s1hA6lNbacMfQDUVdI0K7xPRAS206U+qzSWKdxRlMUEkSmGPF9ousG/CAnaMrJbkwQwoCKgdALIqUwaFdilWK2XFFWtfQjkaWKM+VOGSPeNBmRIgmnP3eWcOPQjUI3uo0yQT4spkCcCa0aiwLsHSATkvWK8aaHzKMvPuPpN49YX12I/4qKoDX1YsnpvfscHJ5wdXnN2bMXoJTI5YfN1Ge0M7HMPjcICrTTMpKEJaTAJNJgyaqMOxRGDE6tJFzkinEOTPbIH/m1EOJACBHn5Pnuuw6FopzNUcrIgfAG41WJ6v5Ie59Xau+AUTc/2K9G3hB2yMli2K4ZNme4omB190P6p7/K9ELNkOlDAEaJrL1WZkI/FDq7t6upL8Iay4P795nPahiBodFAWrhI7Hq+1LfOQnl/+SLU7XnYJZlKMdGe3hSluz2nIzK0P5+7xnp5rR8GoVJaS9d1pJSw1tI0zZRshTDQZPVNayxFpn+NNM7NZkPXdRNCtVqtcqN4wloRiLi6uiYEz3q9ZrPZslwumM+XJFXk2EdMb8Pgubq45D//5/9M27Z89NFHzOdz5vP5a1HgHzukLhAFhUb23np+h3sPLT7M6Nsu3+s5bdexadacXXzD3//6H9j4R9juin7IZtjj3pNvgVajTXSc1oQ8smm6H3ovod2/b6RsM5TXhwT5u2JQ8GKAaY3hetviI2jrhPa43Qh6/LbmKO/PY/aRMrqhjRFj6xglgTGG+WyG1SbTo2Sdi4dZmAp1cbzGEQHWOpuL71mQMO7J47klr0shID0qokJ2584dlvOaptmSQiAGL/vhqI6499y8al+esL03QD1+n+FyO8HV+QuuXz7HxEDlLL7LaBG5r3HcO9NuHeyKvrIfjWtChP9k7zdppN/JmbZaLTk4WE29gdoolIpo6/CZmrtbV+N1q73i5duJoPb78uA19+BWEjV+36uGJHHZriCf79dnL+mvz1HDlhQ8UTmCqUgBuvWGJhelu6HfCaKklO2qstprlILy2HtqTKYyaoVOWUwkIcbZVnr3Z3XFcnmIczOUld5oEhSuprAlYWhRekDpPp8RWSxD7a3/tzLL//TjJ50ojYHzWIQf/QxiSlT1DGVL6qqi3WwmgQfYKdiklNBBEdiZXWotdDhrLWVZUBSl9CxYh9aOmDnF2vQMvqfxgYvrhrZpeHC8IAZR47q+uuDpk2+43PQoU3Bwep9ytiRoM1U8xuBp2kZuPZTvamijqGYV84MDTh+8z3qzph8Cuk9sL64plONkscCR2LYNPiVaH2j6gb73sjlGQ/SJYegwBpQqaRtF1ylmVYUPLSZ4bAIdI9dPvuTuvfsc3DvBO4NK8gArFcUoUjnxjxoRIyMN6qOvgtTufjzom3yXxRekXB6iQhmHVUaQycS0EYQkKj9hkIPLWbAaKueoZiVV6Wibjq4fJvl0neV1+6HL1BM9BcbOWZaLBVVZ3qh2jYfsvmcQjOhS/twrEKQbDe57njCvOiynwGzve8fffWN+blXC3mQdvnjxnKbZEhFfEO00qiw5unPK6f27WFczhES53nLVnoNROGcIPpvpxh33XhTIyNWx8TdIMK61Bi2y/lrZLCsv/QNKjT5Oe/4vKdMV1VjJToi8vYhxpChVOGcNXdfStu30fZKI/n4Bh9rbZ97ktbfne2wmNymhYqTZbhj6nrKsOK5OUfp3Ql9SmpQ8SglikZKYJ/dhuFn5zFufRgoxdVXy4YcfUtezG2vrdkDwrZ6pW8HA64KG7/r3m8wH7CSab76nb7+vcS8vypLOD8TkkZ4HELqUUHG6pqVvtqgUcNmWwQ8hq1DL79gvOoxGtSNIMKtmqKRo246+7yAlNusGj2EBlNZCTPgQKasCQqJZr/lv//W/8uUXn/Ppp5/y7/7dvyOEt4eUyAgEH4SiaxwhKNAls9UdDk8jj776ihfnDaY4YH5wyHx5ysmdU9Zt4OnLjvN1oBk6UspMC2me2EsEUkY1XrE29tA+uLk+lFZTMqIJQhebkvEIWER9UYQdIob56oDOD3Itb5HeMwookFFshSYi1heb7Zau7wFFWVYcLJfMZzVN04nS21iiUzdR1ETMa2wvWIxikCzJAVNgolRW+UEKsKOyXllV3L97D+LAdr0mRY/ViqmJhV1ssCtwjapp+SvqZrL0rob1LdcXL/nqt//I4y8+w3eNiD0lWTPOmOyx5OUEH60YUsz7T04W9xO/8X2nXFAZU1Gtmc1mVFU19RJqY2TOrQNjaHOB1ozsIKMxZuw7fLv9M/sUvP1/7399/+PvSljH9aeUkecqwvrykthuoW8gBZIt2Aww+B4XPdKOUQhtNBpizGdLEjQ8ZtEY2b/SjWdHpZ1HodBCE8F5ZlXJ/dM7LOYrkc83uR/WWgonXnHr4YykOlCekC085CLyufsTQZPgJ5woZWsCdhx6qSaH3ERprGVRlVRVCZs1MAYNsglNtA4EKRh560qp3IAf8CHSD9LoWziHNRZtUjae1ejBSgVViUTjbFZjQ48fOlL0PH/+nCZo7rz3MQfHd1HG3UAC4NsH/7uAjW8P4zQ2OurZnOOTOzSbNUM3SAWj29Ju1yxXh9TVjHXTsmlaNl1H0w3EICZxBqnKOWeIaUAbQ1EWoBQ+DKQwSFEsJEpX4Zzh3oP7lPMF2GKiAU15UK4CvapGMaVKv8e8JB8g07FSiNKvohCmV1KihERWStOJFAPeizxu8CLJqaI0s5ZlJZzebUM/DJJYRcG9YkiomASZdA60pnAF81mNc+a193s/QJyC11tB7HdtzmN153Z1l1vz9n1J0G2e9XeNkDLd0DkOZodEnehTxNUlpixJymDrinq14OLyghgkaDUakf1WY0whz28kqysl2G9Qnsz11C4BUmnH/zf5ckLM3WwqGzxGkUSVurgo/Vgr4iRKiUlns9kw9APKWPzg88Hzdiuztw/ZV319HFNiG8DEiE6RoW0JQ8CWjuXigLKs6TYbtBV0KMQwIUhS8MsVyxhFvlup7J0hfW/37t/n4XvvYZ2VJui9dXZbdn4/SLiR4H/PXvVd1/td41Xrd/x5QsVNUxLjnMsFrVLkqAcJCoxR0tMWvCiUOkcYBkIYcNZRV5UkF2YszoxJdpz8lowxUzCgAGUUs3qWG8ZFcGIIgWazobQOg8YoCagxmsVySddv6f3Ai7OX1PM5z16+YHGw+kHz8X1DJSaDzZCS8LEyjevg5A5N3/HsyTf4p494qB+wmM9RvmA+O6Z0C4y6xGgRLhJVuMAo3DA+S+SAOOWkcrr37DyS9os3so8KZ1NMSgU9NkpoVcYYxnwxxsTgI8o4jo4PGbzPgd1bFHOY3vtYnDKkLEG962nU1LMZB6slRwcrrq/WNJ3HKJ339nFNK9J0So2SyzuaMEaEjwTJlX5jlb0YU0ISR61RGlbLJQcHS5r1FWdn57TbLfPF4Y33C9x47vYR3D9EUXUc/eU5j373K776zW/oNls5/xGxJxuV3MMUsTkZskrhtZyFIxI8nvD7iaBm19uk8jw6a6iqUmTIVURoBBqUZb5cUWXJ/3FNaaWwyqCNvuE9+Ice+0Wv1+17YyFfoeX8GQY22w1DLr4ITKToO/FezIrfU6Iie5SfKMVj3CpKhFn+25pp3xKkOOWCRzY1D2IH8/DhQ+azmRQatdwbHQFjKKuK68vEMPQoLUXJUdX39lnwUxg/2URJqTGgyomS1ihtsNZRzeaUZcl8ccjB0QFnmzUM2WA2hOy3kg/xmKbNXCiuu6TLx0jsBwbv6QdPmdWypGJtKCorgS2B2czhrIPYkbxQ/V68PKNYnnB89wHl8ghM8cqm/D9EcnRj6IQpHNV8wer4VJIkDy+fP+Hs7Anb7TWuK9BuhtYG3ydSsNLtG0QlzmmhpWlXETEY7VjMKunRCR0pdhhlKZxlvpxz7+EHnN5/H+VK0BYyzL47dPeQwVc8hK9DQt54hIhBvAj6IEHTGBoorW5UUbUSU9QYxWspeEXQmqHvKFrPbF5S1iWzZY3tHW3T47sBpSQYjV5hnaMqS1IyWJV/foyyse8ly+Ma2CGaO2rO/tp43ed3lUZeuY72UY03CWx/yDg4PuHs8pyichyfHuKj58nLFwxeKvXOGVxZUM+XlLMZlxcXkHxWh4oYlcVUQBSAlMrVZLmiFMdARMvXkwg9jH0PUk0VmqIIZOgs2pLyWSzCBlYFjDWUTlNYjdVgtSZ4TxukD9FYxzBk+4AfoSy7fzjeXqu3K5FTYnsrERnv//h6G3Mj/CAUsRQii7JmuVqxbhuhIpJGhuJuT0ECeUkoJLG0WhLEoij52c9+zurgEK1vJkpwU1HxTcarnstXJUk/ZI97FXI1Fg7GObJWTKtHqlzXdQCTvLOIf3ih6BTi31QUBWVV47LikzVZ9S+FCYUcEaoxUZquRymsUpRlSZt/V1kU9EPA9z1eK7ACPZfzmr/8n/6KR4+/5rPPP0MBj54+4f/1//l/8/9829S7ZITyilA1RYFIkVTAzhWn7x3Rx0ueP/ka//ULPv34Uyq7ZFbMKXSBUVYS0CRMCqEMk/fhRGB8HsZy1X4AKAGYrOEcjBGRfkAFSZ7tuHcvR4bAWGTRKTFktdmqXlAvFlyv12zXm7c2R8aYjCbtpBWssSwWB6wOjqhnC7RxFKViMZ9xdLDkxYuCtuulyBLJfX+yOcl+JXuVUYKoFJmyn2Kk8T5nsCL4kLQY18c0ejfKGXpweMB8PoMwoJKs4aTirefkuwPSHSL/bql3Z8+f8c1XX9Os1zjjWM1LXG3w51ta34ndShbkMVbQJZ0SPpKRppBp6pJgZd7YJESTvOyDxohVx3w229Hucp+yNo75asXRySl91xJ8oNIjvXGfm8NkG/CHGreTpFfFLrv7I88JBFIMmfWsUAmMtoQQMbrAWIMaOmFajAWHPX/E/d8xzpUoE5upAJTldUhKoyw46yic5ej4hKOTU6wThG4UdtQktLUUZUki0bbtdA7LWrtZOHuXa+4POX6yiRLcRBqikoDXlSXzxYLCFiyWC1bLFYV9SkwRazQhWAY1AEw0OhFsYArS09TBLJSsGCFED0mhdZyCEOcc5axi5gxHBzUp9aQYqYpS+M8+cXhyh5N7D1CuIubqLuwO/1cFJu86aUpElNEYV1LVKxYHA0PnCcETYkM/bNi2a2bWUTgHKExSmGQxKuGMZlY5CqfBJKKSvgijFX7o0crjrJYAtKqZLZfcf/8jbL0EI/1OCqbqk2Knzz8+drer129jXpQS75w+9RmuVrIZGQteUMRIzN4ZI2QtCXnK0HXwgZAigUBVO6qqQGFE3a7v0cZMfXApyc+H3EeRKQTKaJEwzdc7UimkXylzhfXrr/9VFf7p3n6LrvTqufuh/37VOL3/gMvrS9pmTVnWVCZRXK2JQ8D3A2U5x5pENatZHqxYb9YUwZKSqPHoCIFICJn0kyvySZNNjuWPVJflcFForCL7UFipziUJgnSuDGs9dtSJ/L8xUBSaqipIwcvPUYm+74gJCusw2tD3AzHE/fP2rY39w3K6J1rJ5sLunu4fPFpnf6QQGXxE24QtSj744AOePH8qlcA4Jkg50VFmrxq9mxedyaAfvP+QX/z8Z1hXfgtNet2f/fF96+L2129Ts95knuKtOdkZ+t5M+ouioCiKXZFBCUowomvjPq2NPFfLeoUx4gOjdJZsRhFygDbSWEdq1OgXIzQXqYzbomC5WnF1dSUGtCkxdIJgxsJRKEcCTu/epSwc33z9SM6SCE8ffcN/+uu//t45+CFjVyaR5DvmYAklRtZF7fjgkwf4cMHzbx7xxZeejx/8gtWiZD4rsDpiiEJzRihQTGtRfuwuGWb6W93Imb5teCrFADISJXuo9CflwDf//JCg7wNN71HWMpvNeH51wfX19Vubo/H3TxL4GXXVSlTnXFGKCIwS9sjhasnJ0SFXV1uGmDBKuh5HOrQaGeL5ayoFamupS8sweKwq6H3Ap9zXpKSgYa1Q9kiStK+WS4yxLBZz5stlTuiU7H+M6/979uY/EML0zeMnXF5co7VltTri4QefksoZ/+0ffod//ITWdCgSVVnS+4F+GEhGYzF0fshn+w4pG2mtIl2sSFYEeqwxHB4esFgsJhVZEV7RJGMpZ5rDk1OeffOIbbNlcXSCtkK7U9ogJtfphnHwP/W4fW5rDYQoZVpFNq8XoSxrSqxNMCiUssTY5eR8Vzwa90OdUdGbKJbK/VswQXUp909q0E6xWh1w78EDFquVeIkaIwUWJcRO7ZwoompF2zYMfY8rhLouyOCb7+f/XMZPNlFK2ctnYrYmsT4UOc1E3w/54JTKsc+Qfkq50U2Nh2/K1aIuH9CKEb/V2uwUfWLEx4jOr/FeDmEVE6vVksWiImzOQRmKqqKqZ8zdjJ//8Z+xWJ2gXAWjstRrMvI/FLJkCk3yimQ0rpwxX0XC4Bl8S4gNXb/l5dkL1usrtHGUTuNsgbMyj0YlikJhDSRtpHfLJ7abDj80lC5xcDCT+dQFs/khRb3CYyhdiWgAjRvZbROzm+/1u2hkP2hk6N8YLXS6EFDW4AonvGetYBApaVkrYVovIYmSj1ECfbddxxA7QqxYzJdUVU2MKit2SfN81/UMw4B1BYpE8h5n9E6dJv8ZjT1HidOR1il+Xzcn5WbNbA+hGP8db1cjv72mXod2/Jj5PTq5w52rS775+kuuLq6pZyW1Legi+LaHmahpFUXBweEhXdtwcXGG7hSqD/gABAg+5nxhitbGSAHJJWKmthhs5mKb8WtB7iUpgLZYbdAZNRJfNIUyicIqnIWkpXEYEv3QobSlcAtQGj+Mzf2/3wHwusTgdh/Y7a+NScEkVKA0yjiiMvQ+YrIIxnsfvMfnX/2OFy/PszePxntRQgpRqvnys0wWI7FoIquDJX/1L/+Sk+MTirLM+9u30c3XJeJvsj991372JmvrVb9/nI/Ero9oRJWqSuS2Y4goZ6Z5GKkpMUa2223uVdKZppeNP8e8K+Vi276QRtr1/91+/1VVYa3l4vycbtvghwHnRBG16yI+DDTNhjR4TlaH4v3StRRFwft37n/vHPywIQiQWEqIkp/4YhkSlkiiKOe8995H4APPHn9DkQxluaBwA2URKVwkhUTvfU64c0A7Nm8LdPvte8VekecV93pE4gh6Qj5GMYf9HkzpF5Ieq7KSc+Pi4uItz5O8WymEyp+Yk99RYEkpjdWKwmkOD5aslhUXV1speJFAxYxgj5ZlUXwUXcUsm5Br7ylLQ3COxsMQyN+X/bSMFC0OVwfMZ7XEIlHkmTHiCTSu72n+9uZ0v5C4v8+867jBFDOGoDi9+5BPPv6U03vv0UXDptf4qHl59oLoe9q2pWlb2q5DZzVhrRXa2ozWhh0NUuciRFRYY7DaUDrH8fExs9kMpfJeP+5PVvwM54sF2ho2zZYQAk6pzATKhWclcu9/6PF9CMuY4MQohQxj8j1MCZLCuoL37z9kNjj+268fMcSENo6YjZpvm3EPwzCtg7G4NO5tIexMVYSFHkXErIjMFnNO79yhqmuUtiQtlGaRtxfqv3WiMDgMA13XYmuPCkEokHvjp5Is/WQTpR2HWv43eXcokR5u2w1DGEgxEKI4OYfgp6btUUZyDBZcUWTn4VGyWU3w5T5felQcs9ZmmFhxdLBkVhourxNFUTJbHhGV5vjuAx588BFuPmcgNwfrm9Dl6za4d7nxGaWJGqJWaKuoZjP8sMKHE0Js6X3Lum24vLyiqmbUlSNEKJyj74VaoY2Y9g3BMPSJ0Ad82xHjAFiaLuJcwRAduliirSSKITI1XQrHW0/3LV/5O0kYu+2G0HfEGOiGnsF7SJGoFK7MDuxTP4cEUVFlJGNcYwAqobUlxIHNtiUlzaLWGGexzuH9gFKGru/o+h5XlNRakaKfgo79Svmo1vXaoHIvoVb53zF/PKGTr7je8ftvq2yNG9t+EPiquX6T+T84OOLBg/fxfc+Lb75me7UldJ6UoNu0pKUXRTplWC2WhJOOoW+F6kOHGiRQCVlaWdSkogg6INLNYsIrtDGh5WV53kzpEAUgqdImFSQxsyJdG1WURMlKj5lGese01uisHmjKmvliTjdECif3IYX4PVf+6vEmaMvrmn1v9wJpoyEZ0A5X1cRsyKit5vT0mD/90z/m//fX/386H7PXVjaQHVWQAGsNhTM4Zzg6WPCXf/kX/PEf/RGuKHIirr8zUdq/ph/yPN5AzX7gc/yqxP5VSJvWmqIoJiW5EAM6qil46LpuCh4mKp01WOf2CgqiHGV0lmPPxbTxPewHIvvP0/jzlqsVVim2zZa+73CqwGpomi2/+dWvKKLh3/7f/i3vf/CByI9rzf37bzdRUgyIcXb+kyxgSMmiVIFKPX3XMq8e8PB+gd9qnn3zOYlAsz2jcAGjevG8C0GowzEjvAlyByFSkrz1XKj8lT3K8HSfcpArJqpS0pzmkuxzo8Sg21iL0kaoVfMFR0fH0rPx1uaIHfKS72MIkbYfGIZxL5EXaTFRZLWYcef0mMEHNtsW9FjDkQDUGU1dFdTOUDhNqTUh9CgtFOLkLM4Z2gGaXqrxIMq6ZVlwcnTIfD7HWEvoe7oslJSUwWi7N1c3nwn1rd3+hxUifuw4ufcBpy8u+PTDj3j/gw9AFwzbnrt372FcybMnj3ny6Es+f/mMrvMMIaBjYNtsxew07zlTEnhL2tyg0SiqqmK1WuAKmwN2LbYkWotvVYqUsxmz2YLLiwvatqVcHmK09INJEfzbBdcfM26LOLzJ6+HbCdPtwpkkvEKlk8KtPG9VPeOjTz7hvjvi6/OOly/PIYrdhUk7Cut3JcjyuUxfhkzpS9LH5cS/07mC+WKBdZaIMFlGawBhtQj1zlpL33UkP6BSIPoeYwtS0n+Q5PwPOX6yiZJWWX4UcpVeIinjHEVZsV6vJcERqQ+0ShPVKaZECH4KWmJMKK0xxmYYNHP79zjxMQSsNgx5gVhrcdYwr0rmVYnTsjCNq7D1nN4nju8+oKoXBLRwPJXdKeV8T6L0Tucu6cwXRhr0rKaY19ThgIXv6IaBTdMxdIIgrVYztk2H9xGlHT4qfEz0g6ftPUPQpJBQPmHQKGUJUVGYkkjB4ek9XBZAMFqkVDUpq7vt5Ghftbu9rTmKYchVmB4vzookpWgHT+u3+JhIMU3NtsZojLIMKWQ/GlHnM8ZgnCZmhatm20HQVLM5RVXRDQPKWcCzaRqKssL7YUoOTabWvaoP5HXB5W3a1g9JsF9FfXodh/pV3/9dIyTF8uCQ9z/8CJUiTx59JfLxIdBtt4S+x1VZctQaFrM5dVEScs+fVMYSQSuCRFziUJLd3XV+pl0+WBVIr0EWWrlNW9MwzbGEaNIqrHWSRvskktrOGEn2E8zKkuVygdp2VPUMYy3fTmNePb6vb27/wHzlfKvcd5P7QEZ6hfwnFfZYRBanJ8xW99HGMq8cdlbyJ3/6p1xeXfLf/+5vGYaOmTOZemhJWJKSQGNWl3z8ycf82Z/9KR9//DGuqjGZUqaNvrHmfsiz9qZJ9g/tLdxPJPcRnmm+9n6OeF8t0FrT9f1kzhxjFHpdTpjGhud9mopkk7JmRhR5LIKN/Ulj4/WobjxKH4+FCucsajknEkWFq++wzuC7nq++/Io//6M/4+Of/YzDo6OsymUm37S3N0ZORcoS2ApQqCT9MmCwxpGGHlcoPvzY8dvtGd988xl9v6Y0HhUajHLSY6MkaIuZqibeoSl3c+bbwC48HxElyBXvUYmSvRcBk2rcZAa9KwiIopm4E5VlyeHREWcvnr/NKcp+reP6kf3XWbtjFOSAUfYPxXJRc//eqYgGhIGQRkEHETAqnZUkyUBhwIqqBmUtRcXWizhQaQwUmsHHaR88PT7m6PCAWV0Jfc9YnCvEx4aRnngTURrf+22/9TGRetfj5N5D7p5dMCRN58XLLsSE0YaT4yMqq2HYcn11RvvsDKukhxDf042mqHsJtYJsAu6lBwyRB5/P5ywWCwrndsIXShDNpEAbS6EtJ6en9N3A9fqaxfEphdkZ0wt6+Xau+1XJzysTn9ckSfviNPsfC4EiF+SdrMFCGeaLJQ/e+xl/crblb/7Lf6G7Hoj9aOxwc3/cL2zti6lMv5sc8I7MmBBQSrNaHTBbLEhaQ7pF78wFjNGQfLO9pusaliGgb2UT/2ei9M9hqN0DoSJZycbgipLjk2M262uUgvl8gXOOIevuG6MkUPaelBSDD6KWlQThSEk8kyQRclitcdYRtM59EZm/bh1lUXDn5ICDRc352UtmiyUffvghISZC7zk4vUfUBmUMhbHjbv0/QKJkSLnRHZ1IDgrtSGmJD16SvGYg9ZHnL55Cksb8tmvpfWQIsG0Gut4TR5piGhWNCrQxGFsQElSLBYfHd3DWTo3lIzKg80YxVj8ioob2unn5fear7RoikSEGOfSMdG0opRm8JH3BJyCgtcIaOUirfJh53+OHQdT6tEbrEmLAB8+m2ZKsxZUVRV0SU49PHu00tnCElA2LjcrKPDcPwZFSNF7juNVNNJVbQg77c/GqOXldEnT7378vrVEVJSkF3HzB8cP36BV0j76mv76kH1quLl5wdHJMWZaEmKjLgqOjAzEfjj7TZyPWaZLR4iYe9nxzfCREjy3cKIJHitlHgiRBltqjYhmDs9lvCQvJk4Ign0mJw1KKyLMePcYZZrOamAJdGJiVFdEYtH0zfvurkJPvQotuz/XYxzGym+Tv3fMAGlNaDu/d59M/+Vd8/eVnDF1DvVxxfHjA//Jv/g2z0vGrX/2SFAassRhTUtULlHJ473n4/n3+1f/8f+Xo+FQCwuxZZazQil+1ht40Ef+xqNF3jdto1s2PJ6vPKUA/ODigKAq2XUvyAaMtbbshReknJIEfPFobNtdbYpWo6wpRWYx7xbIgflpKUR8eAtB3g1Cl839joY0xoVVCly3qiqSlcuusY1bVPLh3n3/1r/9n6uWcQMzn002Z7bcxtCnGWmCeH/GwS/ljSASJRFFVSVkc8f4f/RWD0ry8/Dtq3bKyieuuI1DgbUXI71WlAEOHTgMmjVX9fE7u0RaNMbm4sbtnJpHtGDJaoyQZ6nwiNX3uxUTOIR0pakdUQiQ0rqJp3h6iBEi8cCPnzsIBNhupJ6HaWytKij4kFvMZ7793j6qwXK/XhODROovUWEOpNZaI1eC00KdStNL3GKAdEl1UWIzQehNUs4oH9++wWMzF4B7QtsCVNdZVsnftFdFGyuLuGbsVP/CHiSFmByd88MnP+e2vfsk//PpX3Llzh/l8waw29F6hD5Z89LM/wifFdvgHLq+uscZQmzL3AWfEMcqzFrz0fKskggPOOhaLJffu3WN1cCBzI5m1FKC1ybR0hVKJ05O7OOV4+uI51+cvqaoSnc1pUZZJneD3GLf3t/0k6PsoZ6/aJ6ei+56liFIGbSwg/fXVbM7B0TGf/vznfPH11zxtr1FRo4KIY4xnyWt7sBTAKLMuLQMqZaaM1axWK+7eu0c9m5MYGRuC8CbZQFA6YQpJlELwdG3LZNaekrC5/gnj13cxfrKJUi4yQO5rUEaBF65mWZYCrbcthwcHLOcLfAhZepTJvT6EzMe0UmVKKTEMnmQUorAViNpgncUai7M2B/fya+d1xcnhASoF/NDz4MFDPvjoU7569JjVoqaYrUjkRj1G6d7vrsD+IYbOvVwoSCYSlZh+urqiDod4rxkaj+oDwSfOL18I0mYNXdPR9optmxiCRTuF1iEbDxqKUmMrg3aaclby4P2HLFbSmGmVyigSE6c4Km4EPt8V/P8+87RttlnFzk80ryEIqpaSQikLKhKDBAFDP9DpgXmdmNUlRVXTbYV4IUaUmhg1KSqhsXQ9yViMK3BliUqBo6MV89mMiCAjavqzS5b2OefsJU+oncfWKxXAvmc+Xhe4v+57fmjlf3yPyhh0UVEvlhydnopoynPD9dUll5fnKA2HR0e5ORTqumI+q9luG0LoMFpSZAPy3CE9C6SRDoZUQvJzo5USlR6V5a7zWxm56TKnorYUQiT4iCLkLBxJgqwcTIUTqXeFwhUFs8UMW7g3TpT2E9jXJUiv+vh21XH/8+PPTUl6IWLU2GLOR7/4M1w148vPf8u27Xjw8CGnR0f8r//u/8Ev/uwv2Wy3BO8pi4LD5QoLDEPP0ckRZVUTkWfZOoc1Oj+HakI3XyUo8yaI5/etlx/zzL4uUZqeCa0zEqFZLpfUdc2mbekGL32TWaUs+Ej0ws3HR5rUYJShKiuiyrRPRJGr7RqatsNqTds0zGdzwSNTmqgrCSazx5SSBDtKiYpe3tmX8yWL2ZK/+pf/F+4/eHCjgk4OMt7mSJOTr2RLavwdSQoD4y+PWpEQxHF5fJf773/Cer3m0We/obKWtu/wKLxw5gCLCkKZExpryjS6MQy7uV+o/KnxGcy4lvxfZ2pzSsQIQ4gk7yfqsNEmKxFmNMW6PfzqLcyRNKHl+yfJBUn+jt7LnGWVOuVKdFERtxuqQmNXFTN7wMVZoO1aeX85YC+1yUFjlsFOYmUQojy7ZW0YQmSICUUBWjM/OGIxs5SlyWqDmhggDBJviMNTmnpXlbr5DGl2CZ+GPc+5d9wvYgoO79zjkzDw+e/+kUdf/5bjo0OOT+9R13MwJaUyPPz0F7R+4Le/+TVt3+NsgQ2ynyaVEZEQ8n3Q4GXeSlty/+59Hj58yKyuBU0yoketlVBmx95y2bMSR0cnXJxf8uTLL5hXBQd3jgkIchzfwvp5VYIEfG+ydPvsfdUZrI30NJqioJ5Jj2xR1RRVTSBxcvcOH//8U85fPiZGD6RvI+zsEKb9vTKpuLMWSbs+r/l8xgcffMCDhw8pyoKIrFeltXjbJ4UyoKPBGEtVldKb33XZkiPeKDbsX+s/9/GTTZT20iTJtAG0IWmLK2pQhhASd+6ccvfOHTrvRa9+FGHQWug/fjxUpHcGil0vRBjwYQDEaHYIkaquqMuCRVXy8fsPOT084OWLp5wcH/Ppz36e5UAdH3zyM6rZAqVtPsMitnC5inxzcf2h+Z5T4zhy6OlcrVXWUtc1wUd8d0zsWwKRpmtouw0nB0ekoAl+S+UcUlkdsAQKYygt0hNhxaPpo09/zic/+zm2KqfqkBqpF0o2PTN+HoVBv/Y9/77z471HafH+EbUZMwXgcijp3C8zavJpvB/YbNeE0FPXpaBFEbpuyPQUMUxUVrw22r6nqkqMdRSzOXfv3iUMPd5Lv4j0kchBayaK345e8LoK/XcljW/y2jd53es+950jC1MorTCuYDafE/2RyOZqzfn5GRfn5yQUq9WKqqz4P9h78yDJsqu+/3PvfVvuWfvaW3X37DOSRhKgHbHbODAOhZGMMRoLMJgwhIUUmFDYERAyBHgRhI0xiJ1QGIyCsAJ+BixAEjDaNSPNPtMzvVZXd+17bu+9e+/vj/teVlZ2VU+1pmd6NKozUdNVWVmZ752899yzfM/3hL5PtVyisd2gHcd4ylVplRUo7WidjXKQAJddhV5KUplBaKR0jeYm6ycS7BxoWmviRGPSFKsTFyjhEgSJtfheipKSIHIZ3CRNKZTKFDJK2oMyJl2vipT//noEDr3P69V9l9LdWkAi/AivANPHb6NcLnPx7NOcf/pxBscnGZw4yrEjR4mNW8PCgoclEG4mjvIUFsHG5iaJNlSrNedwqAz+1Neb1Lse97vOg6ylfrlRJ04I0e2j64ev5P9K4cgZoijK+kl3dCeEQOc9R+CodXsog4XIZvwYTap1Rie80yjdnU2ktZs2nd2DzIJ0RwRgsnNDEXg+Ujj68KGhIU6cOIHned3+w72gMTdDep2x/tff5WB3g3oLIqA+OMbk1CZrS0tUqy1is4lJFAkGT+ACySwYtNZRzufnlsAFqzvX4B7t5njIwyj3vCx3DsbZXoyjuleBg0cGgU+hUMjYzej2Udw06Q3swZ07yiMK3aweKYRLlhpHbhREZXSSoHADjEuhwh+s0Gy4HlvjbsHdpzu+SDNKdOH5LvAyDjHhK4syBl8JgkKRcr1CGHkUCyGe7yGk70ZteEEGS4feOUN7307PfsuzaS+yaMDzA0bGJ/A9wdkzT3L1yjxJohmdmCYMiljhIepVbrvtNsIg5OyFc8RxgkhSkjTpVj4xMptH5pLIXhAwNDzE1PQ0lUqFIAjwgwDlexlc1aEEJNksNevsVlAImDpyhAuXzrOwuIAXBZSqZUzq5jreLDlIFWm/xNdeCTJnQ93Z5vsR4xNTNJfmKIaSar2O8D3K1QInT5/myqXnuHJpFmuS7oxFoGuneunCIVsO0gXy3SBKCqIwZHJyittvv53hYUcLnqOs8qS1FVniRbrXyweSN5vbJJ22I33J0yQHrKx9rcgrOFCSjqHDOo53dyBKEuFRqQ0yMj6BkoKBwUHuuvce1rYbbGxto43N2MkECIvn7VAxO5sjENJH2RTPJmBSXCdnSMsARuFrODo1zvHJETbXV1DSY2bmNFFU4bnzFxAqoFweQAi30S1uRoWwtltNuJFZJTdbjMg2CI6iWQEGNzjXDxRR0SepFkiTOlqkDLUaLC9coeD7jA0NICxstWJC4wJAN3wWPGUpBD6FQonxsWlmTt5OfXAoYxmS2GzQHxmNs9N2nvlw2Q/E7urGjWSvryeelK6HxToCAGNdpkpDlupymTwlXT8Z1jlL2mranZhEp5TLFQpRBAg6cYKwLtMjpQ9COKYZC9JYysUixShio9XCU6FzpLLMTj4ANM/k7zymeoLIvDF176Co1zj2wjLYF4px/WqAyLN9Njfoz69T5SuUVahUopVyU73DkFqthsowlutr66ytrJLEMfVancCTVIoltoslNrc20drieQpPSlIFqRLo1GY9AaLrBKjMMc6NdDe5INzsF+tA2N2DI03dqSytduQcdofpMk01XuQTRgUSa5BWMFirE0WF7jyKG5F+fe91iBykstdf1XMDkT20sciwhJCSodEJSqHHpXNPMX/lPFtrS4wfPUVleBL8EGMFSoA0GkmKTmM2NjdptWPGJ6cySEuerZXXBEoHCbQPkth5IQdoHrDtVUnt/gxdQodqtcrc1auAw+HnM1S0ccFRN/AUFoSDezpkQA5jEVnjsmPK63Q6JHGcvefuIKQbsANI5SArNhswrVxQNDAwQKFQ6AZ5/bq7mZK/msvWO8V030FkD7oyECJDTRg8/EKF2uAo1dogcbtDo5PQSNp4wmDQOMtmMS4qcr0z5MNDez4FATu07aIbJAnygdDZf/mwSmsymJvsDg6OCgXHRiiVQy6EllK5fNN05NQvuskUd92uN8QPAlKdds9D3wsIg4hY+lhtsoqPIE0scWKzHkyXwEgzCLAQDs4vEPjafe+C/LxR3+ILixdE2Wck8YKwi04xWQDugvD8U71+Imuv/fqi+hPSjc8AqA0MMzNzO7MyYGlpnjgxTB87Ruj5yEhCtcrJ06cIChFLy8usrW+wubnliI5wt+Y+a4fSGRgc5PiJE0xMjFMoFvF9H+W588RR+WeVR+ERKJdOtVKA71MeHGImCpmbm+W5Z88yc2qGgaGhbnLshcj1bPTzVZP2k96kj5KOeXhiaop4a4bm5iqxNvg6xVeK6fEhXnPf3cTNBgvzq6TaZH1e2YBfY7LuwTxA6o7vdQkcIVC+IvJDhoaHufe++5g5eRIvciMVVFYZlVn1EpufA64fOywUkMqn0WjQaTWISimW/c+0r2V55QZK2QA4YS0iG/5mpKP6lkFAFEWsr6+hlOLokaNcmV9kdXWVRquVQQBMVkHQXacz8H08L8BqgSLLYOCDVGjhGjOV0AwNDjI5MUa73WJzq8Ftd9zB6MQk260OsTFMTY2jggCymTq5Q+ei9uc3bi92AJVv1vyrvwcmCAIKxSJpp0OaJgwNt7E6ZnVlkSiKODI9zVajxfrWNtvbGwhL1oOkiKKIickJbrv9DkZGRvGDnXkt+RT0/LDKm1bz93Wwqf0z1y9ElHLDZqXjJCVJU4zwsEi0VVnjc0b6kTdGC4GUzlAba2m0HPQiCgK3ftJ0pzk7g53oJCX0fIbrdUgNaSehVC0RhhGeF6ByZr0sOyZ7GnelUF368O6B3vO5XG/diCzwzH7a93m9v8uDol3wmRuQLowwpzTPoIeeMZTLVaR0xCgry8usr20QtzoMDdTwPJ9yoUAhDEnShusXUoHr4UKRCovUGbFDzzUK2JVFy+egOVYXVxm11qIz6lQlXeVE5iQcaqeq5/sByvMxSAqlMvWBAaJsGKnnvzCzuV8mMf/e6X5/6F3+eyscbEni5s0I5SHDAqWBIU7fdR8jQwM8+9STnHnkIUam1zgyczthsexgThI2NrZZXlqgUqkyeWSaYrGCUBnDmPSyauDuIGmvvqtdsA6791DF/XRwvUraXpJj+Hfh+fe4htxO+BmdsGOic86r7/s0m83dw5Zx+9Mx2xmsdevCWgEooqjgAqVsTXXiGF/5GYY/ey/P62aqrXV9jiqjqw/9gCgMaTabTE1Pd4fa5s+9NqlxkyR/ua5vvTtYse4Cep4r0cJDypBCsc7QyCQmTYlTTStdwcTWVd6sRUvreLBt9qeZ0999u13mZgdul7+vCxKyvlMyQhYtQZguVNv3A8rlMmEYusq0UmjheodvlkgpHftlNpoDKbDafe95HnEcu+sWLphUQmGtS9hgFVL4GKtoNhO2Gi1acUqaWhKTdIM+pyQHEcvnbiFll1Ux8iCIIgrGoKQjb3C9KZIkjjHGsam6sRk91bm+s/BWJVetdCgMazyEldQGhvFVgFQ+c1cuAZqpI9OEYQETunEbMydPMjo+wfLyCisrKzQaTeJOgrCSKIooFgoUixG1Wo2x8XGKpSJBEHShjb1kDgKBL7xuMgJp0cqNgqhGgxgEsxcvsnB1AZ2k1AcHXvA991aC9/pdVzcHtIW9kpNYWWGQxSKTM7dx6cJZzs9eZmC7QX2gTj0KedXMNL4V/P0XHuPy7EUwGmMSfClc37xysz6tVAgVYK3GQyOMIciC8aGxYV712tdw/PQMXuR6xoyxoARKGiQabADCfW5WWbSRiEIJFVVIGi10c4tAt4iJsFa6nnSEmz/2CpBXbKBks+DDQe6yeQ82g+QYQaFYZGH+KkmSUKrUuOfue1hdWeXMc89hM2rgPAtENp/ESA3SZRuFlBgChHKzFaSAyFoqJY8TU6NYk7C+ucXE0SNMHTuK9SSLqyuUa3XGp6dRgQ/KDYx0pYydEud+2aCbHRzsJ70Oxy4SgcwoKKUIo4i0VHZDaDMIYqJTtjc3qQ9UGB4eZnV9naUlRaOxiVIepVKVickpjs+cZGx8Es8LsmAjyyruYfR3PSZ2Doj8+m7eQWHxslJ+DnFIUk1qNMbqXUCH3Kmygq5jLYTAmJTG9jayXMbzPKzvKk9pNnFdWtBpQrU+wODgIGtLC6RaExYKhMUSUnm7AkbZc287Wf0dxwx2BvT13/9e2OSDVAP6f97LKT6oY2sy7L/ICBCE8hCeQhofZS0FYGRE4imflZUVWo1tltOEcqWM50uq5RJJkpAYg8i60aV0FREhINXuPRQCow1JH4VzN1AiYwDKGqFdk0rerJ1VWPIKZjabSHoBncRQ9kMGhkcICgXXn+R7XVa4myW9Qch+v9/rsTxXKF2ZEqsA6WNlCS8IGS4UKdaGeO7Zc6yurXHhmccpVeuEpTLbrRbtdoep6WlGx8ZBOoIVpEJILxuw6Uxnt4LVl7Tov7YbzV73BzcHFdG3L3qDzN6fsRbf96lUKs6BtzvzldI03QkQyJrBpZs3laYpft7EnFe4ddoNzIwxxJ0O+OAHPm4kgOwGSfl1uCSJgwd6vpsTUy6XGR8f25OAJd/7L5bs95n0ZsG1tVh8tLR4UYnB0XGSThPle3S0JVleJzUpxjV6ZVWovK/HYrvDnzP8Ra8tx/X/CpzqDRJBViXJ4Hlk0B2RDQEuREXqtTrFYhGlfJTySIwlidObp5fu2UMGJRQZ7MknCHziNEWJfL5SlvDS2pH3ZAPH4zRlu9Wi0WrTSSyJdtDLHA7l1pHGFbIdckQax5polMUTkjjRWAPKD1BZwgIpUZ6H8vxs0PhO0mu/z/NGH78ZIn2JTbQbzm4NyitSqvocP+EqsvPzs8zNnmVi6ihhNIT0fHf2RRGlUonR0fHunDphXVLaDzyU5+Cqvu+75EI2LkN5npsrmJ2LCgfRFrh1gycRnmMnNkZTHxqmWCixvrLC1ctX2dzYeMH3vF9ya68g6XrogX1f25rukPVSrc708Rnmr1xm/uoVlufnGB0dYWhoiNtPHiPW4IuEq1fniZOMGVZ6jo1ZkI17yOycgbBQoFqrMzg4yMypk9x2xx1dVlenUwerVcLu9Kwju1BSIwTSC/GCAu3NJkmnjRKOudBm12+6JGhf+/LKDZRs1pyaGW0hjKsmeRaDoV6rMVCrdRnsxscnefWr70cIxcWLF91gtE4bUpftAhBWopOsvCgVwvOxwiMMfYq+oORLjk9PMDFSY3l5lahU5tjMSYqVCpuNJuvbW4xPHkH6+fA4uoaXnkrBXo7ISxkodZvFe4Kj/qDE932K5QrWuiFxxiTdZtutrS2iMGBidIh6ucDslctoA9NHjnHsxAz14VH8KEJ4XsZAJrqZz/z1VY/TsfPFLux7v7wQ3bhZHTJzpHw8q11xXlvaiXYZlixz5WBxYlfW1GUffXQSs721RalUwvc80jTBQ3RZ7arlCiPDw0gp2W40QSnK1Tp+GGEQeD336mQ3zFAIeipK1ze4vQ5Qv2q+Wl3dCPbY8xTGaHegeY4xKlEBynOXbrQhiiLqAy7jv6oNjc0NrLGEUUTg+0RhgOl0cAN+d/Yh1mK1W3uOCVx3nVhwzfqu18BBrCzZXKWsoiSlzA5agRA2W4cSkARh2A0awmKZQrkC0s8CWZfRvVmy157er4/k2r/FKVJaPGvBUyTakuJjZYgRIcFojbtrk6TNTTaWF1leWSLeiqmUSsycuI1CZQBLNqxReq4SLxwEVpAPud0dKO11D/v9vF+Qd5DH9r/vncRBTu3dn1RxM3pcRSBJEkfC0tNXFMdxz9+B50m0TtA2pdNp44e+Y13LBjHmw2h1BgmLwsj11kiJsbpn6HE2/ywbpKl1kg08hjiJOX78OLVafU97nv/tzZTchu/lzPXqrfs9Aik9NxLDCymUa3hhEdlsUCyViDYbxNrQacdI6QgInEO0A03vRkKZfZJCdKnT8/EX1mYVa7SD9OQPAPn8Lk96lEolKpUqQRDiKS9LZEgKhcJN01FOp6HJqrTZOaN810PWiZMdOJSSDo5vDYlOXK+ySYnThFanTSdJsEIhhINbGu2StkoKLG4GmwBn5zMmRIHIkrMGIT3CqIDvh27ILOAHkZunZAypsfj7DEu9lZUlicBIiZA2G1AqEZ4gKlY4cvQYiIQrVy/AlcuMTxcpFMuk1q2z0A+JwhhXqBSIrP9UKbeWlCe7/XxSZsRHaoemX0qJJxReBhm2yqEYpO9lsEWQSlAqe4ReSBSGNJpbL/iee3uCXqj0f14ygxb7gcCmKVZIKtUavu9RLETMX5nj/MVZ1tY3GBsd467jYwwUv5Fnzp3n6tI669sttrYbtJpNpDAE0iKsJgp8omKZyYkpjp84wdjEOPV6nSiKkFk1LretuW8qrcFYV90EsELheQHShIRhkU27QqvdwdiMc3SXb/DKgN+9YgMlR/9os8PeOAhVdzqxpFQsUqvXaWxvUxsYwQ8j7rjjDmq1Go8//jhnzpxhbW2NdrtN0sPA45rfILbuPbSGkpQMD9W47cgoI7UyK2srIAQnTt/GwNAwQiq2G02KxRJj42NEUYS2Ihtgqrr9FTmV8fMZu5e6qtS9710HucALBUVbySocLvNhjGHhSkKr2aBWKlIpFahXKtQGhpk6doLq4AhhoYjwHHtYHhTlGd3ejdp7Lfkh/mLdexgWEFnzdxgmJLqD9gRWWGRqMpiX44nKqc7zjDHk2WBAS+JOB9Vu4xWKLiOPIAwDypUK42Oj1Ktl1pYXiOOYcq1GfWAIFRQQyoe+NXBNhNNTebNWXPPrfmhUb7DbG9T1/03v43s5U18N3tgFIdl7SndwKeU7J8yC9J1jEgpJzQy4CrBO6XQ6tOOkC4UROYzOpmjrBgumqSHuJKRaZ06X7VbiculCq/LqQM/gXpNmfUvkkESRVRAUhUKZYrlCpT5AdXAQv1DE84PrEhnsJa9+zWtvWGeHcn3prm0pHNQrh77kjqfJ1ryx3T6XTqfjHCbcmuh0Oq53UuW0LM4hM1nwvb29RViI8DzPHf7WddN4nkfo+wSBy/jHnRhjdxqeg8BHynwWk8tkSwRxnNCw25RKJU6fvo0gCNzMkiwjnjt8L6bOnq+ZvKtXclicQHgBflRGhUW2WjEmGyoeJCmezF2gnQyy6wOmi7vLf5ZCOSpyYzFCo/LhyNbNf5GYDL7nGsuVFCghCQKfer1OvTaAkp57HWvdoN+bGE9KIbORazs2181oc0kzpWIX7EoPMPiBRxB5dNrgK9WFdSolsgGoPiDBaFToY4Wjotc9SRzPV5ndcjeilML3I4qlMpVKFT8MXSUTibGWdqezY+N6kCe9n+Vej71kYt2geisFKNfzaTCoMKLkDTA5fQyDZmFhgdmL5zh69ATV+gCJthhfuvliqc2qk+6+hbDdkRmqB21hBT1Q6Z2KUk6d7pyRnXPMkA0wVhIvChgcGWOQ0Ztz23vA6vbaV/lz+3+/t7izyOjUJamUcuwgEoKoyNjkNIViibnZWZYW5mlurDE+OsSxyWmmpifZ7FguL65x7uJlVpaXSNoNfFJKgaBarTA8Ns3R4ycYGhrq2h4hRNfXyNeZyv0xK8ngCt0zU6mAOPFQMiJODFvbDdrtGAo7OngxEj+3Sl6xgVLX6ev+zw0JtSikBTIGt+VF57D6hTKeUoyOjfHqICDVmjPPnMngGA6+Y4wbLCqEcZCBMCKMIo5MDXPvyWmmh4rMX7pIq7HFsdtexcjYBGFYoN1qsra8RqlYohAUwbiDANETIF0nS91vAF/sJrn+jd6feQSnUk8IZCHCkrE/Zc6IwrK8eJW1lWV83yMKAqamJqnWahRKJfBcf5bIelR833PTxtkdIPY3kb/QTPT1xAhFasAPQqKCppVoVEcTd+drKayVXQYsJXH4/B68eA7nCbIepSRNKBYcFXgYBgwO1KmUS6Rxh62NDaQUhGGBUrmCCgJUEO6G3smcAbD3Hnvhdrt1sFdm/RpH6Dr62itg2itYOrDOrcFTEuv7xNYilYcKAwcnkHkviYPURSVHRiAsrK0ss7G1iU7SbuNzmqYkxmBw89DSRJMkidO5uLaPzWC7A1MVdCFX+UFqjKN6N8bht7XWoBRhWKBSrTEwNESlPki5OkBQKOH7gctSZo7todwaMb1LL3N+HGIg2w/Wuuy9TcCKDLqSOUrWIDHopJOxluLWiBLEadpl0UuSlFajRbFYRAiBr0KX4Q0clNMKQWpSUJZUJ1hj8WVAzo3rnAOJ0AYdp6SthEAGTE9Oc2T6CFIqtAXZQyXen6S4afrK/rV5BCR6EYc7NNPdkZW21454BIUS9eFxtra3SQ1sNpqIZotCGNDRFp0alBAZ2U/2Whk+x5BXiXTmdLmg1JM5m6djfNXGZHNzXBLTzxIapVKJkZER6vW6CzyFQGFJ0oRWu3nzlNSjciFEBr8DhKBQLtFotbpU8BqQvkexXKHV2EKnMYHvUywVqNcHCDuJS9IKiYcbZG0sGZQ/JwFyTr4VuN4j4ezO4NAItYEhiqUyUnl4KgALSTumWCwSFXrJZK51zl/qKlKvePnMQ+lsr4NdewgrsNJSGRhhWimMlSzOL3B19gKegnJtwM3GymDQ2uDgc3kk3JNM6E1S9bPBCpn1F2f72c0hIkOBZMG/dH2+0vO6KKGbKXslufdCB+wVXO3a9wKUdIPNdZrBO8XO/rHGUh8cIYpKBGHE0uWzXJmbJU41teFJhgZGHQHGsSNsbW3Tbm6jrKZU8CgWiviFEtLzM70539NaeqD+svuVc+W5683vTyGsh5AByguI45StrW06cUzUE3DdyvV4s+WVGyhBN6u109zrKJ+FAOn5FEol4lSzub1NVK07Pv4goD4wwNHjx1mYX0Bn85UEZGQEAVHkYVSAXygzNj7KnSePMFAQLF8+z+r6JiPj00wdOUqhVMYYQ3O7RSEqMD42QSEoZBmOPGuSnVK4SpVQu6sB+fe5HIRR6qbobw/nu/d3rgqmMUIRFSKXhRAOrhMoASZhdXGeVnObgaFhwiDA8xTK87Ge77IkGQ1r4PmZ5+xev7+ytOt+8+zxHlmcFyLl6gCGOZqdJlGhRKFjSJJGdp8OFmGFyxxKHMmHjg2e54x4t8FcCLwsUy0yFjblKcrlMsViAc+TrK1t0Ww0CKOQer1OoVhCCNdAmX/+3WGfcgeHbTOYxo5Odqp8/Zmb/QKj/rXU2xy/1/MPCgPbSzzhDi2bOQouk+o7+KJSYLOeD2Kk57m9NziIFQIjJFtbG8SJy+Yak/HuYsFq0E4XnvK6QzpzPRiH6elmy/L701pjtQuwgC5zWh4I+77LYA+PjDA4MkaxXCUqlhCe6yfMadtfSQfA15r0Es30kzrkn6PJqkX5Z9vpZMNJBcRpQpKm7mwQBuV7rl8mSVxQ5PtEUcFREGd9Edo6hzavUCZJgrUGz1dd6J/n2YwgJCMMkm6t6iTF9zyq1Qp33HEnxUIxY0Ijm9On97ZzN0vyl7T597nb2BMwiZ40nbQIo0G6/hnhBwyNTRIWIgZHR7FSsNloYjodUp3iCbAiS0LmfQkiN9PZAF1j8T3lKknZeyopcYSyjhBHisAxmwqBFYpqtcrE1BRjYw6BkTvMkoxuPbyJ9ODQhU3myAWsc6wLxUK3by0qljEJaGOJShWCQontjRgSjbUusAtC4/qTLBnbq+3CDHPob9fhz2y27wcUCxXGxycYHBiiWCw7+J7nYWLXxzM5fYRStdLt/uodNt4bQNwq25SdeG4elwAhDCgfqx0qAykpVEaYORlSkJLZSxe48GybySPHGBwbJwgjEuP6Tsngn65PcofoqbdHsveed3rAhCMgltkMPSld8iI7O7UFlKtY3Yzemb0QGHs9pz8Rsl+VqfexJE6z8Qy5Hcv8AyFRQYROE4JiiSMnZqhVClx87mnOXrzI4FaTI8ZQGxhiuBAxXB5EG0dmIaTs+hgyC3wcsciOv7GDysgCpiyzIsg+RzIkjfXwvIgoKmOscrPA1A7Z1M69HULvXtbiCr+OPcT0LuDuQFhJGBWo1OsgFZ0kIQod/bIfBBw7fpw4jpmbm2Nzc5NCocDQ0BBDQ4MUwgA/8AmiiHq1hE2aXL10jtm5eerD48zcfjfl+jAIjzRps7S4TKlSZWBgCM/zXVOoEXnbqjN6FuDmT2b/amSv8v21jznmHikFyveIikWkFHgSWsLiiUl0u83SwlWs1qytrSGiMoUBifR9hPIdPWXePNvz2vs1NTvY47VN0Ptd+43IwPA4gyPLbF26RLPZQWWTwNONDUQndk2KOXba1fF3BuRlxk9r03WkrclmqHgexWJEtVYnKkTEccz21gY6jfG9ItVqNZsP4qBhDpvdywDYywLYf6+ux6afcOP54Be7KoN7VJzy3z9fVfH5REmFzKCqqTQoqdEqq4gJ8EOLsSlWGIzVkEqEH7hZEVIgFKQmpZN0sllozlAbK5Ayw+pnvUY6q/x1rzObE2GMcT1KPVWxNEmcs+UHyKzaVwh8oihkYGCAgYFBhwcPswxuxtanlLcz6PBQbrn0Oh+9ARTWduFJMguehHCw2SRNXb8cPkYbpKdIkoQg8AnDkGKxSLHoKog5GUiqnd3xfZ84jmk0GiRJTLHknGjP87rX0SvWGpKkQ6lU4tjRIxw7dgQhMqsvnHPSG/C9GE7ufo7afntYCIEn3cwfbayrDvkhpfoQQRjRaXVYW11nfnGeJDEgLDaz4RaLFjhbKen281njKilJHBPHqQuclMJzBQCiMKJWrVGt1SgVSyg/ZGR0lJHxcYaGhrNZOZnjbGOCQFEq3bweJZF/iXxN7dDiu8/W0ul0CIsVxxymQXoFPL+ANusknZi4ndJotOnEMdoIPOWjPHb6/JTKyC/I5nOZbh+XVB5+EFKvDxAVigipsqoceJ6P36XB9roXm5+T+We2VzLzpRRp857dLJmnhJuigedQiIkAJSiWqxydmsQmLa4sLHLpwjlQksGRcTzfMa6lxp1tyvNdUCNdIN7bmtB7f67fVHTPYylzgqhuJiCrmjo6+5yy/2bIXkHPXknL3vP0eq8jsiyD57mKrBQSKz2s1dn6z+a4ZfshlIrBiSPg+djnnmVtaYFOY4sjU1OMjU8SlWvgF4mFT4KXEVClXc0oqfp0qbJ9m60r6wqkOZulsTYLNEFKn2p9kNrAELVqgWKp6HoWd9maF6bfl4u8cgMl4RpMTZZlcFhgi7GSNElxU4Z9JqaOIL3QzfERjqIUC+VKlXvuuY9jx09kB2lAGIYEvo9SAoVBmhhhYi5cnOXShYtEhQon73wV5aEJNB5JnLA6v8hGo8HI5CReGGKlcInxvCEzZ4/eA3d8q2QvmFUvlS3gDj/lhg3mWGqJwAN8DC0MxWKRaq2GVIo4TggCN2xVeB5CuQyjzMgRxAGMvhA72Yrea7kZ2bTywAhHT97GVivm0oULpEmCnw06jOMEMKTWQSlc1sSxyBjjso05xTSZQQyCgEJUoFSqMDwyxMDAIErC+tYm240tjNUEgU+1UnKVti6UYCdDtpvhTrAzjDfP/uxtqPfSRa9Oe5/X/zd7rcH+vz2onr0su2+UxcsOewc3MVitHTzC8/GxWKtJU4XRFi8IKZTKDOAOPc+TbG1tk6YaKzyMlYhEgzDYjB97V+BnXTDWpQnvPcAypyX/XRiGVCoVFJZSqUStVqdcqlCICsggRPkB0gvwAuew5J/Vodw62Wv95VUlmTWSG7sDt4yiCE8pYu2gsWEQYH2fVruNH4YEUUTouUDJVaLcrKQuVj+DguUJDGstnTjG8x1BiauYGoRww8oRjuAhSROklAwPD3PfffdRLBbJ6cTz+3gpHNyDJDd29rchB69KKcETGKMBNyR7ZHySI8eO02q1SOJldNtRYCvlZ06Y+xw0eSXFYNIUnWriToxOUldR9nzwBTqJaSUdyoWIgapr/K/WBwmiIqVKBT+McMO7HWuoNYZUp2h9E1nvcp1nPZ82+94aEFJRqdYIgjCzv27/G6kRIsAYSRxrOnHK1laTRqNFmtpsKK509M5SZoyq2dDy1KDtDjS4WID6oKBcrWaDdGW3b9dTnouNst4k2YV7792jdMtE5MnODAZrLWQU16l2mTEVhJgUotowR08GJDJg7vIs5587Qxp3GJ88QlAouaBbOl1Z5RAaMhs+mxOoCNfU1n0PMt1i+/aQzQJgekavdK/1pZf82npHE1zznOxf1wFtyWdx2axHyFXKZDagV2GVz8BEAT8oMHf+DPMXnuO5Jx9nY3mBsenjDIwfxSsNoYUjZHD6MLvfKxvw66p5PYFeNoBNCtenLXK149hhK9UBxiemINlGW+1QJF3/ZHfP8NeyvGIDJZchso5VRghy8+8KNxLlS5JUU6kNIjyPTqJRvsNtGmOwxhAphR+GdJtUcRG1UpKAGNNssXzlIguXzhEFPjO3383A+FGM8AnCCNptwmLE+PQUtaEhdPYqpicwcBe7s4Fln7G7FcbPCjIajCyTIMQOyD3r95LCyzJGOH0qhbKSILQUrIH2NlZKjpy8nbBcxQ+LVOqDeMo1PDvoQb6ZlDN4sFNB6WZC2QkWnqei8UKyREaFDI1OMnFki9W1ddZXlh37Wsa8Bh1IDFjtZmwol+nKYWVpaglD1+gtcNSyA4MDjI2NUxuo43senVaTTicmjZ3D5imZsWppggyul99Ht3rTDVQzSEifiT8INK4/mNq/Sniw9XbQYEkis6yYm1FlPM9l1jzHEJYKXDJDZZlWA5iYOO4glUe5WiMMHYlCmhja7dhBN61EkoCNSQ0kSeqMeHZN2hqX9ZVZZji7Xs9zs4GUcI8FSlGr1RgeHqbdbFCrD1CuDRAWS/hBhPD9jA1OumbyDHp3GCjdOtkvMdCbNJFKgXHsW1IpisWiqx5KSRpEhGFIs9UkrIYEgU8OkQW3l5MkpdOJu9A7genOFlFKEYYhnU4bIQSFQgFP+V3HR2vdrTAlSYdyucjd99zFxOQ4nufmdLkBmf3Vp1sHUdmdGAPpCXTqRiIIKbFGuCouinK1xtGjM6ytrNFoNIjjGCkEga9cstFaUp0SJwmduOOSSBmEJ/Q9rMqcMaSjLVYuQB0YqDM8PExtoE5ULBJExW5STHoqH4XmnDidksTxTbv/3C5J7eC9jtdBIlSAHwpGJ45mVXBBEhuENnieIogClCfRuAGcQnokGpLUQbNFoh2hhxR4fkqe57OZopXv4fk+RS+gUB0Av4AKIhDSzVCSWc9N3nvjKUcAkiUYr5ck6wa+5NUA0X903FxRXpakyoae5r4OBl9KB6c2But5dKhiyz6Tx1xP0uWLZzn39JMEUjI+fZzAKyKCgNjgBtArhUGiRDYjyQELyIp/7r6so7Heccx3/IVcF57IHre2f/u96NLfi5j7mb3Xt3sf5uQo2cDX7PS3UpGPHHCvmyHSpaQ6OEo5iqgVC1x69hkuXJxlfmmTE7drjp0u4YU+1ssS23mwKMgSBBnckfxByPG6zv1zNktkpFZYZxvCyCXDF+dX3Ww5sTsB9HJI/N8MeeUGSvlZlGU3pCDLMiqMslhr8IMAIQSpJWOryTCcziI7/LTnon9hepxXnWA6MevLi1w8dxaM5cTp00wcOYH0SyB9VyGIYPLIMeKkQxAVsgUtQCps3p+Um7G+DXNLpas8IGti7R8kKMiqKnmlQwqUxM1/CEIurK0jlWLi2Am8Qs1N0Q58PC90zbIuKnLDWhHIndQPu+KB/HTZoxpyU/UkPVQYMTI2wcTkCp1Wi1azga8UpaiAMBZPpqTakqQ5eUXG2iR35qv4QUDgeZRLJSYmJhgdG0f5PmmSZDN83D0Evk+1UsFoTdzp4CcJVriDM9d719jIHbKP/lvuh8ztVQ3ql72CpefT5VcFDcobbIXEWo31MrY7CwkCaQXaCtJUYhSEQZbQcFM6sWmKEJLBQYFJYHl5Bc9TVKs1tra3WVpawnPpRJKMXtcY66pMwjWVe9kBbo1BibyqFSONoVwsMDU2TrFYdD2E09PUR0ZQURE8D+llczuy+R3K9xEZhOZQbr107XGeDDM7c2vIg1lrGR8fZ3xsjNXlFUQRwijEUwqLzYhCNHGaOLIP4YbOdjqdbr+TwKBwdN++H1IoFGi3W4CDRoVBRJq6vjchnYOTJDFSCk7OnOD06VPOyc+GG8ue+S+9lfrrZZlfiI76SVny7/P32w3Nc5lrofyMJTBLOOBjjUT6BUYnj3C63aYdt0m1o1MnaRNkQ8Vjk2LSNiaNEdbg+wFBUMBY5xgr6SNQ+FiUhYGBAY4fP83IxDRhsYQKQ2Tog1BYJRDSOhivANFJ2F5fx7+JgyyN6DnXRMbehsB6zrYUVIBOU9JU45sETIoRikqlTKNeI03brvLoZyMEjO1SUxuSLqLFZgyJ4BJtBkcuNTg6ztD4JCoqIrLzMWd5U57noI3KnbHkUH122/29Au3eYEkIrj08bqaI/J+d93DQerlrnp21Ai21q0YMDDPjKaSwLFy9ypWrC3hRhdHJImAIPQ/heZkbtwPjsnIncd17R3udhbuSgb1/dQtcrOudn/0oHpH5Fq4nIw9qcghf/le2W8W11iKtT1CuMXn0FL4X4V+4wMLiEkuLy0weaVAvlIhNgvHd/M6uvuwOHXjuetmMkEUI4apPwgVvWfNelurwESbB833iTkyqE3K/8Zb7sDdZXrGBUs68s1MVcQtASYFAYY3ISo3gW4NvHFzDZL1N3ZyIcDM2BBZjDcqkSLPFwuIsF2dnaYuAyZljTM3ciV8oY5WjiRY4GIaQLptONkDUdlNKGXWqvNYB7ndKezMPL4sFmFd38gqTEKAtCKc5gxuyOjo5SX1oCOEVd4Igt7PJK0rdPhyyTbqHkTuogXkhoq2jqh4YHGLm1G3EcYfZCxeQWIrKQ0mF1imtdodt284Gm7rGYk8p8Dx8z833KZVKTE1PMzYxQaFQ6uLN/cBBuKTyKJUjBgeGiIIAk3Roba/iFSoE/mBPwJgFSbkeyA+87t2TZ3ycvnaC7z4tPa8Oc9kvM9n/3IOsQ6GUowAWbj5UN/QW+WEPqRAI4ahHyYy1lB0HlZApRngQQrU2QKeT0Gk18aRkZHAQKWBlbZ24o/FwDeIGMCLr+xDQ3WdCIoxBGIOvPKrlkNGRYQSWOI4ZHR+nOjCI8gJXRfL8bsbXC3w35PCQyOGWSz+5zK5KktwZNqukq9YKKZmcnORbv+Vbmbt0iYXFxQwVoLh06RJzV6/SiTsk2Tw9z/MccUuPDXZwJ/ceQRBQLBZpd9oILMVCEZCkaYIxxgVg1mKM5vixY7z2da+jUql0YVa9X71N6i/muuoNkvof79WreyzfMWQzfsjsCi5B4AGh4cTJU1ibok3K0vxVpNkxW1J4yGJEnJFdIBTWaIRVSOHmm0npoRDUymWmjx5leGScqFDCCyJUEIBQKN/rDsAEsMYxjkrPJ7qJQ59t9389/SXdLLpAaNOt5ss0RXkKayRBWKBaG6TdapPEa0ilCEKfVLcxuF44X+aDwwEru+/n+z5+GFGuVhkfm2BoYNChEUTOALcz04aeddJlQuXgdvmltFn9KIXe/sFuFUVKVFRApx1K1QFO3nEPo5NHuDx7mUuzl5F+xMjYGKHysMbBq92esbvQLlLgIGA2T7LKa67hpb7//aTXT+mtLu11rTkJQjcw2XWeZ9l/IGdyFtkcM2Ml1vpEtWHGozLF+ihjK8usLC0ze+E8njWU63USkVdrd4Ihdr1Lj++V/7/HfXM57awvTLuWCmM1nU7nGvt2CL17uUvPobljRHYOWtMbwRtAGoTBQXXIiRYcfbEQ+fMsVrdYnr/E5cuXsMLjxB33MDp5DK9Ydg12QmbTjPNDJ8+q9zq7O9eTZwp6Za9s/0u92Z/3/azd2cLWAAZj3XyNtY0N4lQzeXSaIIywwus2WpocY9wzYLfX8Pcb2t7v9wqIbhZkRUoBVmI8xdDIMEePz9Bpd1hZWsImCaVSiU6zTdu0UFLgKVe18JTL+vm+j6cUpVKJ8fEJJienKFeqgEJ15x1pavU6m2tVBC6TXYhCYpuyvDBLbXicWn3Yrd2eDE9+/3nGU2QBQI47sJnh2skH7ehyxzhfm1Dsdzb7H9/r5xtZh/mh5vrwsqGzPa+hjXFOKzvHgcj0qVBomWBUistfQZokLCYd4jShUqsyVYoIiwVW1hu0Oh1a7TZJqh1UQUnXXJ6x5SkpwToq41q1wshgjTAISbSmGIbUajWKxSKe7/qQ8p4qz/fdY/6Ow3Yot068rLpqyfpf2Jnjg7GZ7XZEot3PKww4cuIYY1MTtFttdJJgteHihQv8/d//PfML8yAt7XYbnUp8P6RcKrnGZClQ1jhSIGsxCArFMoV2jElSpFC7euSEgSiKOHHkOG99y1sYnxjrUjoL6WWJD5mRtqhdQcxLaef32vsid556zEEOBTdZT4PFVdWiwOfYsZPEcUIYRKwsLJImMWRQW2UFItVoneRdFgjpBrEaYwgDRbVUZnJiguljx6gO1PF8D7JqDnJ3MOmqhSCUT31oLIND3yRdmB1UR1cP1nZ7Qrp3bhV+6ON5grZJsTqkWh3CaIE1imY7JdEGK7PhsSgEykGsre0mPPPKU6Va49iJk0yMT1IoFHaqjD3smg5RsKMHpVS3T6T3c3u+xOJLsa72Csi7yYbsM1RSIH1HpILwkIFHwQsISzX8qMzc7CXOnX2WxtYGJ07MUCzWQUkSY7FohFCYnI1NuNEP+bBje4Bz6mbq4SAojIP87X6fV/7nu3/fPSm7v5PgII94WYCvEPhURiKqQyOEpVmee/pJ2q1tTt9+G+WRCaIwcugLROZrOLupyZKKOOSHex/j7IAFgcAIhUU5H1p5BKUSxVIV5QWZjVNZFCt3L9SvYXnFBkrPt4h3sSRlB4TtMqVkeNAMI5q10YGExFrWNrbZ2m5z5MRJxiePUKrVXRndpd2yd7A7+Nk9goBep2uvK+3fSLeymtSfwe0630IirJuaIKxB4Xj/l5aXQEkKlSpCeRjrQk4rBUo4nHX+urA7E7zz+P7f92ZmbpZOukYeQRQVmJo6QhgEXJmdZeHKFeJOm3argx9GVAoRqc0YsTLWq3KpxMDAAKOjo0xNTe3M/jA4DLC0hEEFYRIaG2ssXbnM3Nwc1XqNUn2A1lKLkawnQuaOVV8G+npr4EWDJPZJDtc50Hv0+FxCyS5/iTPmoLHOIcqGb6IkIs0GBxpBIiRWut4tpQRDArRNaTQadJIOlUqFqckpqvU2m1sN1jfW2draJk5i9/ra0NFuPosn3fyWcjFicKBGsVQmTVPXozQySqFQdBW/rHLk/vUyxq3d9LSHcutE5NnOzG5LZDYUNgtU8uf1ZDWzB9wcFSXRicYkCadOn6ZQKPDFL36RC5cv0vAbxK0OaIMVGuW5JJfMGsuFgFRrpHJVEW0sSRxnzrOH6ztUhEHIfffex+TkFNITXee312nc5Qh3s68338bvV03qTyLuPCa6lSSLQ2a45IwjqHAzgDw67SaFYoXbbr+LqFDiGfkEiwvzbG5s4HmCqFDAAu1OnDWgOzZPhCKMCgyPjDI5PsH46Cj14UH8IHDskkHgPie5MxIB3PwboRwzaBQVicLwpupor0xSF4ki3TqzgC8ctNCxXwZ4PlRrwwgUrXaHVruB8hzJD9bDU8ohShBoYzI4v4+QisGRMaanj1CvD+B7wa4eyF3rd49B9P2BUv/3O1WCl+ZcuN46613fWOno5xF4MkMZGAsyZWB4jDCKuPDcs6wuL6GsZWR4gtrAEH6xgJECLRyTMcKNWJE289BEPrtp/+vrvaabdc+9r3c9/d64r5Lbhr38nZ2f3fvmCUmX4DdIjOe7hKsRjExO0m43WLgyy5WrV5ip1lE4WLryPVIgEc6fM5mhk5kqrZBZStb1KEpAC0mCINGOkEQGIUFUIvAj114gc3SI4OZo+tbLKzZQgutvjt7FbaV02GxrsSbvx3F5SYFGWI0SAq1jGlvbNFopk0dmOHr8NGGxjEGCVHTLjGLHPO3AoXZf042Uh/uN5K1o/O01hDarJmFsN4iUWITVxHGbdqvB0PAwKggc66AQDtOaZxl2iesXy7blvgFBr1HaSwf7VUcOKp7y0aSk2lU5wihibGyCarXG8PAoa6vLrK+tsb29RZIm6J5AKQgC6vUBjh49Qr1e77JbiSxwtsYiNUBKFIYMDg7QWF9hdXWV9bUNygNDKOVRLJZQnurC7Z5PF3vJrnXdp6v9dPN8a6//ta/3Wrv+NiNSyMlQrHBQQp064+vlmfQ0pVtZFAJPukGFUiq06iAEaCmyZnhYXl6m0dhGa02hUGR4oE6lVKJWLrK2vs7G1qYbStlqY7V7Xd+TREFApVSkWIgwxjAwMMDQ8DCVSg0/CncqSN4O1K4fbncrExaHsr/0r9PcOesN7FXWuyQyVi0pFcdPnKBcqfD4k4/y7JlnWVtZo9Vqk2oNaYrn+QS+T6I1GINOY9o6Hzxu0UbjGZXNA5IUi0Vuu+02jh8/vovFUgjRZbbclSTrcYhfjEB8d/9Rv4N1LbtpF8Zk8yqQY3/L56xYa9DGIqTvbJbymD56giCIWFy4ytUrV9hYX6XTbuIHhkqlQhzHjqlSSqKCq7gfOXaCkdFRCsUi0vMcZN33UaG/S1f5/pNSOrZU4SDzVt0812Wvs6OLluieX1mSXHikcYzvhUjrYbTADySliqVaq7O5uUpqJJ1OC7SD3QeBgwlq7ebgSC+gXK0xNXWEaq2Opzw3Ry77kv2BUlf32UxIkady9wiM+s9H8cLPxq9Wh/nju9aYcP3IFseYaywIhaN/NymlSp3Tt9/B5uoy66trnHnmGUbGxzkycwLhB4gw7IFiGpCe6yvvIUjp3Ud7nVm3yn/ql+sFWNdLiF57tmcJ/szPQgiEEdkcJgiU5MTp05RKJebmZnn66ac5fmKG4cHhrKdTuSSmzAKurB9fZkGSBTfjrAvBE2AMSkp8FbDearG93UAo75pkwytFXrGB0l7Rfn/Wfefnnsg3i9hF9q2ywpW6dUJjY52Fq1fxoxLHT91OqVoD5WOkchOl80WyO93zvI5uv/N1kMrBS7XZ+69rJ3PrshfCWkyagtHouM3Wxhpx3KE+OISVHpq976//HoTY+773+nm/8v4LESWVswjKYo3GIvD8gLLnUSiWGBwZod1p0W616LSaGKO7cArf9ymVy5RKpW6ms9tUjsIai/AESZxisdRqVTaqVbbWN1leWkGrAC0Evh/sGRztyiT2/M6y+773y1rdaHC9357p/93zvk4+4X5nc4F1sFSFdQw5UrhqUtarJ4UC5aBynlKkSpJISeop0kRSlhW8wGNpaYm1tTXijP0qDEKKhQCdFDEmIe4oQqUoFRzdru8rClGBWrVKpVwmKpQYGh6hVC7hez5BoUAYRo6MI/DxA7/bH7FfsuNQbo1cDyqaf987m0gphciYTK2QoBztrhf4WK0ZHBrkG1//jUyMTvD0U88we+kSaxvr2VDpDqmnunOVbOpo6T0JqIyEJpuZVihEnDp1ite99rWUyqUMMiV2Bdtd57fv+vPHX2xn9vkSTN1qhciShw7Qg7Y5AYRwwaEXAppUG8JCheljRUbHJzl2fIblpQXm5y5z9aoLmoRQJKkjupmYmODU6dMMj4wRFAqQzUhSUiE91f28VFa1k6I/uBQZC9rN24OuL03vOltzmJyUEm1dtUKiMEbjhyEIjTECLwhBCEIhGBoeZbuxztbmCmAwiUHiAnL32SZobSkVi0xNTbtAsVAkCAsor7cP0kHT82Axi9Cu6WXbdRbsZ/tzjMxLlGDdK0GXP55dqGOyIwvKM/iXFDbjyLGUKjXKpRJDQyMszS+xsbXJU08+QbleZ+rYccLIzdDSxmKkyoLB7G73WBbP52+93GSvpE+vXEPOkkNbyYP6rLpkDUJ46FTjhyXGpqaxQnLh4iWeO3sOa6A+MITyQCofYx1yw1oQOdlYF36Xt4+4dwp8z+lfJ3RabYKoQKFU7p6VL3cd36i8YgMl2DuY6M9w9PZwWEs2VTobVIhw07W1JOnEbKwssrG+zqk7X0W55qYdm555Cw7EmZd/dwdNz7dorpf1O8h9vdQiLAiHqcOmMVqnpK0W6yvLDA0MUigUIZus3c3KCQGIaz4DR7e8w/h00IrJTb0fIxDGUVpbITDCID3h4CZCUKxViHQJaw3SGoxOd31W3YbVLIudw+esdUbLFxJrYjxPUSiXGR0dZX1ljUajiV1dZXrmJGGh1O1ny++vf+r69Rz26xnY/QKv68lXU4Ha63ndV8kNu5IIsdOsnA+LFUJgY9NzAOQzpRy1dywF2pMEYZjRBUs6nTatZpO41UFKgU4SFIIoDCgVCs6+4ypZURRRr9eo1Yco1weJogJeEOD7PlEhwg9CFyAFjuXODTKU3Ub8/J5eSQfA15r02o7eilEu+V7czzHsfn7ZoW8ztrKCVJw8dZrx8QkunDvP2bNnuTR7ke1WE5sapAcKBz8jew8vCPCzgaRSCo4fPco3vO611GtVlHd9ooZe5/+lWlv7nSW7HrcC0EgERkgHGxau98vgEhsq6yq0BpQXIrXByJRQSpTn+jQHanWMNugkxYQaIQXlao0jR48xOj5OoVDCeh4otQNxzeyBUh5CkJEg9OqkZ47cTQyU+vXu7Ljo9r0Im50L1jp4nAGjBDbI2FulxZJSqdcYjyfpdFokSeIeN5Y40UhhEdKjVCkwNj7B0OgYlVoVP4rw/d2wu3xsRncd9312e917v03v2l5xcHv/QmQ/6Pc1FU3hnG4hQVqH2nFOhOttw/OwWoLyCMoe0yfKDDS3mV9YYHlhgTCMmJicJoxyKmtHwmSw14JV9rnnl4sNv3nnr1sRIg9qsh4jawUiY/fUOkFFZcanj1GoVJm7NMvZc+cYG2ly9MQJ0iTGZuvPCLozLjWOyGSHbssFSlon+L7PdrPFysoy5UqFYqniKvWvEAKHXnnFBkr7HZR7RehCugMwTVPH++9n8y6y5mCTJiwtzrN45SpHp48zNDqOlR7gem6sFBme2Y0I67qHmUG/nkO7V3bx5Sp5ltbancFj1lhsqklaTRbn5thcW+P2u+5GCEcFm3MMCJlvNCe9WdSvNpPaa4BfaPAoJRjT81ll5A4AKNzkcWEcexMSJbI8TpZ1se5/2Z/2ZFVcPds5GKkiiEICYRgdHyNud1hb36JcqTIxMUUUuhkavcN394LjdIMK99M1gWf39/lntcfBkD/WHdLZ8/c71TC6+u2VPNv6vLLLAes5MDOFK7Vzj0I4SI0m7QZOUuIcCE+QJklG3x9g0oS6kIRRAZ3ENLe26TTb6DRFCekGE6p8pkvm2HqKQhRRLpWpVqpExRIqCAiyLz8M8HwflfWJKc9zNL09rFsv57359SR7VUH6xVo35LiXmrh/P2mtscIiPOUqJ0IwODhIrVrl5KkZrly9wplnn+XqlUU3gNYYpHUwNOl5GGuICg5mWyqXufOOOxgaGuoG2b3v2RvA9X/1V5xeDF3tlSjpPQvzfU9mM3ZOMbuTVCYnjskqxRkbnlDC0YgricJVCQrFMlGhyPETM9SrVfwgoFgqU6xUCaMiUnloIdxMwR49KKm6FZje86HLjioy/csXR095kCTsbrsrpcRYR8EsvIyQQymkJ1AeCDRKWsbGJkmTlIsXLtBMtkl1ijUpQRhQK1cYHh1j6sgRqgMDBIUiXhA4pk3hoKHXEB3BNesFe3BnP68ovdhyvcREr7geGgECpHU9W3nLQ7aYXCuDyJJpMqFYq3OiXKZarbK8tIQvJONTRxCeh8FglXJgELF371b/er8Vdrz/fO5/fK/n7vVz/704WHvuf2YVtZ4kozEWKX3XK65TZCgZGPYolytcvnCJhYV5olKB6uAAwndnYM7SaHfl/DNdZkGZSRNanRarS4skScLk8RmU56PF3omhr3V5xQZKvbLXJu4uMiFcDwkC3/Ow0mUHHRbbQSw67Zgrc1cRCMZGxxy7nfK7bD6QsQN1F1QeIOU/75/Z2O/69nrefj+/FLKr0rUTE2QGXpFoTafVZGx0jDAI8ZS305/UNQ67jXz3MZ5fBy+2fPM/+K5b9t6vVOldpb2frMw+dyv7AiWl0FagtURrQaJxBA+abDK9JE1cxll5PlFUdPMmhkbotDqkSUIcx90hmAhBnCQkOiUMA0rlMtVqjahUxqoA5fldAgdP+XjKw/N8lBdck9l9OVRxD8XJXpWkvZyPfgezPyFgcTN08oQXxg0T9QNBtValUqswc+ok6ytbLM4vsHDlChvra24mmi8ZHB5k5tRpwqhAuVymVq93R0IAXejUXsFRfr29v98PPvWSi3VZaYTMepUcflZI19QtcGdm3h+BdWM3krSDlAovKtBuNAijiOGBQcbGxhyNsfKwQqFNlqnO9pfqCZJcZSkPGPKqnIOjWeH4kaR073fTbrcPKtbtzer3GTLEgDAWKa3r6xAOSAwBWjkUyvTUUaKgwNLSEq0Mpl0sFhgeHmFkbIxypYYXhBlpjCOxELuc+L6gtn/t9F7TPkFv/u9LZbX223+9jzkdCyyO/TAf3iKt7RIApNqirQDhYYXzxUJPYRMYHRmh3WiyvrrCwMAgYbmKlTv04de7pvznmxko7Zeo2a8vqvd5vfZrv+u5nt+6630EXabm7grOdGKM4+13ZA8e1rqAPoqKHD16jLQTc+ncBY4IwdDYGFJkleMsUMreqEuVn//seR4ba6usrS4xNekqpMLzIas/7aWLr2mxX8eitbbve9/77NTUlJ2amrJveMMbLGBbrVb3OZ/85CeveexG5Y//+I/ta17zmptxybdMDnV1cDnU1cHlUFc3Lr/7u79rv/u7v9v+63/9r+1P/uRPdh/XWj/v37773e+2W1tb3Z/n5ubshz70oRflOm+VHK6pg8uhrg4uh7o6lBdDDtfVy19eeWDCG5Df+Z3f4Td+4zf41Kc+xeXLl/nRH/1RAN75zncyMDDAxz/+8V3Pf8973sPMzAwzMzP8+Z//Odvb2/yjf/SPOHHiBPfffz9PPfUUv/d7v0e1WuVbvuVbGBsb45FHHqHRaHDlyhXAZQT+8i//kl//9V/n+PHjJEnCW97yFkZHR5mZmWF+fv4l18NB5FBXB5dDXR1cDnX11cmP/diP8Wu/9musrKzwwAMP8LM/+7P8n//zf/jIRz7C+973Pv7Vv/pXJEnCww8/zA/+4A/yUz/1Uzz55JMA/NIv/RLf933fx8c//nHiOGZubo4LFy7w1re+lf/yX/4L//Jf/kustTzwwANsb2/Tbrd54IEHeOqpp3jXu97FT//0T/P444/fYg3sL4dr6uByqKuDy6GuDi7GGN7//vczPT3N9PQ0b3zjGxFC0G63u8/51Kc+dc1jNyof/ehHuf/++2/GJd8yOVxXL3/5ug6UvvzlL3PXXXdx6tQpAI4dOwbAf/yP/5E3v/nN/Mmf/Mmu53ueR5IkrK2t8Wu/9mt85CMf4a//+q+x1jI7O8vv/M7vANBsNvmTP/kTRkdH+fM///PrXkOz2eRLX/oS733ve/nwhz/M0NDQi3CnL1wOdXVwOdTVweVQV1+d/OZv/iY//MM/zMDAAAA/8iM/wjve8Q4AfN9nbm6OL3/5y3zoQx/i13/91/nQhz7EXXfdBbgg68Mf/vA1ur377rt5//vfz+Dg4J4H5eLiIgMDA3z/938/99xzz4t8h1+9HK6pg8uhrg4uh7o6uBw6/weXw3X18pev60DpNa95DU8++STnzp0D4OLFiwCczjjnO51O97lLS0v85m/+Jv/7f/9vvud7voft7W2stYyPj/PMM8/w5JNP8sM//MMADA8PMzAwcM1rgHNi2u02V69eBaBcLvO5z32Oqakp3vGOd/DXf/3XL8Wt37Ac6urgcqirg8uhrr46+ZEf+RF+67d+i8nJSTY2NqjVagD88R//Mb/4i7/IN3zDN9BsNvfse6nVakRRdI1eSqUS4PTT6XQIw5A0dQN+Ad72trfxgQ98gI997GP8/u///ktwl1+dHK6pg8uhrg4uh7o6uBw6/weXw3X18pevCzKH/eQ973kPTz/9NG95y1uw1nY3814yPDzMd3zHd/DOd76T48ePo5TiB37gB/jTP/1Tjh49ShiG/O7v/u7zvucP/MAP8BM/8RNMT08D0G63+b7v+z42NzcZHx/n9ttvv2n3dzPlUFcHl0NdHVwOdfXVya//+q/z//7f/2NlZSWj13cyMTHBf/pP/4kvfOELvO1tb+O9730vP/7jP87Y2BgPPPDADb3HP/kn/4T/8B/+A1NTUwB88pOf5M/+7M9YXV3l27/922/m7dxUOVxTB5dDXR1cDnV1cHnNa17DH/zBH3Du3DlmZmYO5Px/+tOf5jd+4ze4ePHiLud/c3OT1dVVPvvZz35Vzv8jjzzCO97xDv7oj/6If/AP/sFLp4QDyuG6evmLsPaVQktxKIdyKIdyKIdyKIdyKLdSjDH89E//NH/4h3/Ydf4/97nP0Wq1eOCBB4iiiAceeIC3v/3tNJtNvvd7v5cnn3yy6/z/2Z/9Gd/3fd/Hww8/3HX+Z2dn+Zmf+Rnm5+f5pm/6Jr7ru76L48ePdx97z3vew1/91V8xPT3N1atXeeKJJ7j//vvZ3NykWq3yF3/xF8zMzNxq1RzK16AcBkqHciiHciiHciiHciiHciiHcih98nXdo/RC5YEHHuBd73oXAJ/97GeZnp6+phx8KE4OdXUwOdTTweVQV04uXLjA+9///u6/zyeHubHry+G6Orgc6urgcqirQ7nZcrimXho5DJQy+djHPsZdd93F9PQ0P/qjP8p//+//nZMnT3Ls2DH+x//4H6ysrHDvvfcyPj7O6dOn+eIXv8hHP/pR/vRP/5T777+fTqfD3Nwca2tr+L7PhQsX+NjHPsb09DR/8zd/06XBfNe73sUDDzzAmTNnmJmZYXJykm/5lm+51bd/Q3Koq4PJoZ4OLoe6ujF54okn+MAHPsAP/dAPdTH5Dz74IJ/5zGf41V/9VS5evMhP/uRP8hM/8RP8yq/8ChcuXOBNb3oTv/iLv9ilAP/gBz/Iz//8zwPwq7/6q7z3ve/tBloPPPAAP//zP8+P//iP8/GPf/xrhhq8Xw7X1cHlUFcHl0NdvXjy9er8H66pl698XZM59IoQAq011lo+/OEPo5RifHwcay2/8Au/wLd+67dy9uxZ/tN/+k/ce++9vP71r+ef/tN/Srvd5o/+6I/41Kc+BUC9Xuc7v/M7+aM/+iO+/OUv84M/+IO7mq1zuXDhAs1mkw9+8IO8+tWvfmlv9gXKoa4OJod6Orgc6urGJAgC2u02Y2NjfPCDH+Suu+7izW9+M1/5ylf4N//m3/Dv/t2/o1AoUCgUeOyxx/je7/1e7rrrLn7mZ36G3/u93+O7vuu7eOc738k/+2f/DACtNcVikU996lMsLi4C8MM//MMUi0Xe//738/3f//1fE9Tg/XK4rg4uh7o6uBzq6mDysY99jA984ANsbm7y3d/93dxzzz38yq/8Cmma8tM//dO8613v4pu/+ZtZWlqiUqnwv/7X/+KjH/0o1lruv/9+PvShD3Wd/yNHjvDss892bdzv//7v823f9m27+p4+8IEP8F3f9V20223uuOMOPvGJT9xqFRxYDtfUy1cOK0qZfPjDH+Ztb3sbH/nIRwAHT/nt3/5tZmdn+ehHP8rx48d58MEH8TyPb/mWb+Gpp55CKUWapte81gMPPMAf/MEf8H//7//lgQceIAgCgF2MLG94wxv42Mc+xsLCAm9+85vZ2Nh46W72Bcqhrg4mh3o6uBzq6sbkv/23/8a//bf/lh/90R9ldHQUACl3zLkxhn/+z/85P/uzP8tv//ZvA3QpxGGHCtxay8rKCo888gg///M/z2233Uaz2ew+J6cK/1qhBu+Xw3V1cDnU1cHlUFcHk37n/73vfS+dToc0TfmFX/gFlpaWOHv2LP/+3/97fuu3fqvr/H/P93wPDz/8cPd1ep3/P/zDP3xe5//nfu7n+KVf+qWX8lZfsByuqZex2EOx1lr727/927ZWq9nv/d7vtYD95V/+ZTs+Pm5HR0ftT/zET9hnn33WzszM2NHRUfva177Wrq6u2o985CO2XC7bb//2b7ef/OQnLWBbrZbtdDp2cHDQvulNb7LWWttoNOx9991n77nnHnv69Gn77ne/2/7d3/2dPXbsmB0eHrbf9m3fZpMkucUaOLgc6upgcqing8uhrm5M/uRP/sT++I//uP25n/s5++53v9u+733vs51Ox/7jf/yP7X/9r//VXrhwwX7/93+/fd/73md/9md/1p4/f96+733vs9Za+7u/+7v2z/7sz6y11r7zne+0aZrad77znfY//+f/bN/4xjfa8+fP23e/+912a2vLtlot++53v9t+4hOfsO9973vtu9/9bvvggw/eylu/ITlcVweXQ10dXA51dTD5h//wH9of+ZEfsZ/4xCcsYKWU9i//8i+t1tp++tOftq1Wyz700EP2f/7P/2mllPbJJ5+073nPe+w73vEOa63dpaePfvSj9s4777SlUsk+88wz9tOf/rQF7Nramn3rW99q3/3ud9vNzU372c9+1n7wgx+0QRDY9fX1W6yBg8vhmnr5yiHr3aEcyqEcyqEcyqEcyqHcVPmd3/kdfuqnfoq3v/3tfOxjH+OXf/mX+aVf+iWMMbzzne/kJ3/yJ/nO7/xOtre3OXLkCH/1V3/Fn//5n/NjP/ZjvOENb+ADH/gAb3/722m1WkgpmZiY4M477+TBBx+k2Wzyhje8AWMMnU6HN77xjfzQD/0Q/+Jf/AsajQavfvWr+Yu/+As877DD5FBemBwGSodyKIdyKIdyKIdyKIdyKIdyKH3yig+1v/zwl3b9LIRACLGLIrcX29/7uLX2mi9jjPvSGqMFSavJ3/z5/8czTzxCpVKi0W7xrd/+ndx5591YYdnY3GRjs8HJmVN4YQBSgFDuPZVEIBFy5xqklAghdl1v/7XfedfNaab+9IN/tw9VsAArujrIryHXW/43+eO9+hHugT2eZ7GAAYwVWKPxgc3lJdbXVhibHieIIgyCra0tnn7yCS5deI640SRptNEGokKBe+67j9rAIAbB1cV5jp+aYXL6GAgPqTwEAoG7DtujM4A3v/UtL0hfjz36lV16yL/v/YyMMdd9jVwv+efdq6f85/w1rDVIa9BWkFqJRSCsxuiENO7Q2Fhl+cpFLj77JMtXL7PdbKNKdeojo5y47Q6q9SGS1GATTaFYYGB4mFK5jO8HeMpDyp1rl1J2P+t773v1C9LT9eSLn/3MNfe817rKv9fWIqzGWtBGsLW2RLyxRH18gtnZS6wtXqFerXP6rldjvALW4D5/IZAyW5/ZyjNCYa3ENwmXzp7hyuIC3/jmtyKlB9l77qx1CeT6MYDl9W9404uml4PIE488vOvnXEfWip69aK7Z08LCwux5kq0VLl88xz33v46tzU2uXLmK9HxaieZVr3kthUoNoTyMkAhjkdaQdDooP8Tz/Wv3vTDc8+rXvti33ZUvfvYz3e/z/dO793ql1zbt9xy3KvZeh9a6v1UYpNWsrKwwd3WeO+68GykDtLYgNcYkNBvrPPLwQ8xfmcPGKQtzc7z1jd9IsVAkLNU4eed9pDLEYBDC7rIZ/d/n/77m9d/wwpR1AHnwU590eug/8wBjDRJLp9Hgkx//fxw7eoQoKnLu4gXarSb3v/Z1TB49jhYClAJrAYs0AiUUGpvtGou0gDW4nblzxlmrd+m+/19rLW95+0vLxvWZbI25c8zZYWHJ7s/tNSsE7XaHJG5TjAIUljROabfaxJ0WSdJiY32Vre0tpFRMTE1TrNZRXoBBgPRwJ79FCrBCYYXASrqrUVmBymyPFYLuEu5dL9ZikaTakLabnH36cUyacv/r34AIQoywvPFNL+zMO5QXLl/8wuf2/oXdIQnotVP5fjTZZ26M2XU+GmOQQpA0mzz4yb+m6Etuv+suwtoQQamG0gaLRrvDMHsdz+07rTFYTLbPhRDkS8vgrkeRrX8hsMKdhcJKEAYr8uuUvOnNb725inoZyys+UDLG7HICgWucMmPMrsO09/fWWqyxYC3GGoxJManGaI1NDVcvX+KZZ55iu7FNq9MiTjV/+4m/obm+Qn2gTrla59iRkxgVOKfPWIQUWCu6hwuW7jXk19n/b39w92KJ04PIz4V9nYxcN84hld0Acq9n54evzV5b5AdEmuApWLhyicX5c4yNj6O15uGHHuLCuedI4w6hCrnzjvs5MjPDw489RsdKpmdOIRBU6gOExQBh2dnQAiRu85s+B+Bm6ac/eNzr9fdbT7ATlPT/TW4QwbGQ5eGlNs5xQceIzhbx2gLLc7PML68RVmr41WEuPn0BYcGPl1nfWmNpdQGhApQfIq0k7sSUqgPcdc+rOHnqNqrlCmGgEFK64D2/lOt83jdLukG1ELv0d80+dBfkAkcLwkhC6TE/v8izZ89w7sJZ5i5dZGBghFJ9hJHJY91bkCiMEd31LLqvaF0AKmFwYACJdO/Ts993PlsXeAhhgRd/7x1U+h1bMofJCrLDTWCNRWIwxiUNCqUSpr3NiePHeO7Jz/H4o0/x3NlZTt12F3OLy0gluf+Nb3XOm3VfpCmzFy4wcew4oi+Bs+dGf5Gl3xb277G9EhbXs5sWdt3H7udlyRZr0RY8z3NOjUldcCUFWE1re50HP/nXPPrQFzl1/ChHpqe4cOYJ/u5v/54777iPN33z3aQGjNJYkwULffaj/+ulBnn0J22kEEihEEaztLDA8tIy3/iN38TQ6Di10Qme+NIXWLp8hYHaIGG5BNYgJDRaDVYXVhkZHiUsFjBZYGRsZlas7urUJSJ6g32Q8tqz+CUXuzvRZa111++2Wdcm6DRmeXGeSiFkaKCGEAq/WML4AboTMlgoUmlusro4xxOPfonJE3cxMDSCH0QgDJ4UKOGcUy0MLlsqQOapPosWApXZKiFkdoba7Bx1gRK4z68QFahUyjS2tjHWZkHUja2jhz/3uR2b7MwmIjtXTd8azUWQBZLsfJa5T2WswQq3k4QQJEnirlm7A1sYgzQa3W7RaTVJkjaduI2ycPnqFYYnxhkcHwcvwAofpIcvBUoKhJTuHBUCIXdfW2/i+3pJ5/y87d13/Qm8/nO+/7Vuv+OuG9JxLrvOwPx06jmDYLf/0vv+UipAYkxKGneYPHE79aExYuE5X9WILKAn+5LZ5+DsurYGba1bS9oicElFKwSZq+t8KAHI7HVwp6iwzhdR8hbu0Vsgr/hAqffg6a8C9Dsc/Qdv/q8xGozFYNDGYE2Kbndot1o89ujDbGyvEesOwkiMhStLC3zpoc/ztjd+IwMTIwjbITEBCOk2+XWut7ei0G+YbvYB2nuPu9/HHej93lB/xn/P4GCPapP71218KUFYA2mCTTsUfLjjtuNcnbvAEw99jkuXLrK1uekMfZwQe5qoWmCjtcm52XNYX/DqV92H0Ja1hQVO3nkbEuEOGmMxmXFnH+N3s2Q/p2a/6luv9Fbgduto9/ONtWibBQpJi7lnH2dt7hxCp9QGj3DbHa/GhhFP/NVfsbGxhS8NRd8SSg/dXMcICTJAGxDCZ3Vtg6XFFVYWlnjjG74Jr1pF+D5KqO5p92I7adZaFwTuob88gOxeh/OueioYgmKxhDGGL332MxybOYZCMDt7iQcf/Hu+5TsqlKsVlFQYcF4IAiEkUpLlJJyTs7GxQaU2dJ377Q3cXj5BUi67bBkGbRJEdt/WukPROQKAEBRLRWbPruClTc58+WGWZucoWUlj8Qrx6iZPfPFL3HHfaynXaq4iZw2ddouk3UL1BPa9TvVLrZfnW5vXs+d7P2bpf8neynjXOUbgByFJ3CGN2/hR4BzBJOHpxx/lsYceQreaLFy6wPbGCu1mg+ZWjDaKQrGCMaB16hI5e1xrvg9uZZBwjUOYfbyB76OUpNVqg1TUh0f5hje/mYvnz/KFL36B226/nbGxUdqtBo9/+SFm5+b4xje+kYnpafA8Gs0mxloKUYQnPYRQ7iwwzvVyepBdxzWXF8tuP68eetdQhqwQiLzERF5cKhYipqcmWbwyy5mnLjM4OES5VmdjY5uzF2YplApsry+zfPUS6+vrXF1rMzI6Trlao16rU62UCH0fJUBJhVRZoARZpke6JBYCrMJIk0VpApN9RjJbvyJjPjPGUCwVndPLV2HLXVTkKg7agnBOuZTu/vd+PdENfvP9lQcgEmc3dFbBANDGuMA61Qit2Vhd5eL581irCUMfgyEIfJSv+OLnPsuJmVOcvOMuRGgx0qKURAl/Z7+oTEc919Brp9xt7e8/7ZXQ7H0sP6uUUjctidG13ZBHINdcQ67vvexBdkKSdNp40uL5PqgAKRXGalIluwk0tEF3OmBASEliNLHWbG1vc3Vhnu3tbZSUlIolSpUyoR8wOjRMMSyAFVjtAiqhXPBk0oSk08b6r/jQYZd8Xd3t9ao0/QFV/mWMcQ641qS4ipJNEy5dPM/Vixc499TjRMpSLBfRBjpxSrPVZmlhkSe/9AVWLp3jjtd8E7Ujp9CFEng+CIuQ3VN438Cp/zDt/fdm6iN/3d0G5Vp42V4OfW8ljL4A4BojhMtgkCa0Ntc48+QjdBprYFLW1lY59+xzNLa3UMqjE6e0OjGpTPmrz3wSKRXtRhsbtxBJm9WlFYpRQOQHxGnqzLWkC1N4sTK0/fe9l/QGSf3Vwb102Pua15bZLVtrS8w+9xQkLUaPnmRgeBztlUkNbG6us7q6RFHFCKsR0keYhIIK0GnC5tYWLW0xIkB6RVpbmzz7xKP4aYt77389o+MTCBG6LOZLVE3a6/tcdunJZo5s9q8RYIVhZWOd9dV1kk5MpxPTaSd8+eGHCApF3vrNb6dYLGVO6c4higEjAWFJk5grc5e5d3ic/XZfHgjcCmftetLvQFprQHfY2tggiAr4YQEhlfs8M/issRrpWUbG63z8Tz/B3HOzKFLC0CNtryGTmLUrV9laW6dSqWKtxhjDysoSwyNDeJ53zf7vZp1vwb33Bmv9+/z57GTvc2yfk7L3H7h4W3kehSii02ySxk06Sczc7Bxf+vwX6bQ6+Cg2N7bZbDQdLA/B3NU5thvbiDRE+JIgitC8+AmwG5U9kznZ9VWrFcqlIknSwWCwUuFXyhw5fYq5pWU+/dnP8s1vfAPNjXXOPv4kRqQ88oUHSTr34RUivvTwV1jf3GR8bIK77r6X8fFplFQo5XXXp+h6jDvXc6sCRmlNVkvMr6jHhrBzxgEo5TE6Ng5ac/7Mk5QKIZttzec//xAJLvCx1mDSBLF+ntkrl1FeQLlYYnhwgEqpSOBJylHA2OgI5VI5gyU6u99ot0AE1AeGiApFUDKz0TKPY921GEOapszNzTE9OYW1kKZpBn68AcmSmcZatDFIpRBC7iBh9jlP+1dP9/fWInFrSVvtbJV1iefW2hJbK0s0Gk2SuImUikYjQXiK2mCNSrXI04+3+MwnPkGgfKZvux3tW1KbweuVdPTgdqfyC9f6HL2P9dqvXuju9apG+WP7tWccSK19flz3fbLE8l6vJ4UEueNn5EkE5yO45zTWV1hduEJ66nZSA9oaBCmJAJMmSJOyfPUq5589i9AGPyyw3m6xuLLM4soyyysrtFstBOD7Pn4QUC4Uedtb3sbrXvs6hPIRSmGtQRpL0mmxdPUKly6eY/rIkRvSwde6fF0ESntlDXKc9DWZf7vznNxxlVkGzAoXMIkkxsQtrl44h25sEgXuNdJ2gq8FJT/EdBpsrm0QYvnyZ/6eyZPLTN/5KqrDI87Ypcb11Cjp4DFZ1mK/TGj/fbwY+ukNEPM+j/z3ewWRuXRL2NADrRA7cLz874UBrUnbDZ554iucP/MEncYajcYWjbam1WyBFXQ6KVuNDqgQIyTNjU18JCW/gIoNsxcuIsKQI8eO0Ww2mV9cYfr4iW4RLH/P/QzdzZTrGejr/bzfY93gHMAYluZmeegLn+XI9CS33/c6tFegow10Nmi2Y64uzJEKC2ERbEJYCPBMTGtrG5Ma0k6KEZBKgY07JO0tvLhJY73CI5/7e26/9zUcO30bSvgui/lie7/7ONnd9ZVBUbu6AESWkdQI4jjm0tU5Oq2EuLnpKohS0Whs86WHvoAXBLz61a+hXh9ASoVAdQPnrCbMxtoqoe9Tq9Yx2mQQk70SBiC6mOxbHzB1s4S9P2NBpzzz5ONUa4OcvvMuhJUug2sFihRjWrSa6zz33NPMzs7SaKaUi4rQl6QmBmHY3Nxgc22DiWlAWDrtJitrq9xxx525J3vNHnqp/fu9AqG9kjj72c89XpHebPSu52Zr0FjAOihapVzm6ScfJ41bGKN57LGnWLi6hI4tKInWAgxsNxMKBZ/t1iZf/sqXCAolbrvjLoIwcskia7szYG5lkLQ7aOytpIARCoQhikKqlSLN5ibWJgjhAYIwLHHn3fcwd+kSpWqVC+efozpYI1IwP3+Vz6x8ks12m4WVFQyCs0+f4eknn+ENb34r9957H75nUcpjNwRv9/XcimCp1WoRhKEL5oRDiOSBU68V0CarNEmf+vAYa4tX2Vi6yrlLl4k3V9hoxeBHyCDCWo0gQbQEUno0tjdYX1sk9BQSQ6CgVilTLVWolcsY7c7NTpLQTKA2OMKdd93N0MgowvOwwma9zmTBjUF5inK5wvr6OmmaIvzghm25Nanb4wKEFK6f2GiHzrC7z9TrBSHd18sSXBbjdGA01mhskjB34TnS7U1mTp5iUYGQHlL5LK4sM3v5EgOVCs3NTVYXFzl35gwTx49jhEArp3eJyq4FEHvD7a6XyNx13/vswV4/ca/7O6hcz/cQPcmaXToVWZDdByF2CWewWuOhqRUCSoXQwYGtZXt9hc3NDbY311mav8KFs8+xvLiItAIrJNudlE6S0E5iEp1m/faGlnVJ+03l81i5wj133kmxUkFrgzGa5aV5NleWkTrh6oWzbC5fBX78hnXxtSqv+ECpvyqSP5b3LuW/A7DGZU7yzAdGu4hfG6w1JEmHdG2VtdkLnHnsIZaX5hEeeCpFCoWVkGqXjd1ONOfW20ze9Romx0ZYX1ok9J8mTjUD01MImyCNQQsfISxKiV3Zg/6N/2IcqP2H0Y4f5iKO3oCnV49Syu4QuV59Qt6caDHG9uBdLViDsRqrUy6dP8vZZ55iqFpksbFEu92k0bK02jHGWLSRpDIEEbgANU0QWDwpqVbqeFGJkeNHEEHAwoWLxIlG5Phu4aBW/Vmcm6G/vYKivSB2+zoge1xT90vrrnMGDgLS3NzksS98htOnTjF96nY6QNxqsLG2ypUrl5m9dJHlhXk6zQaB5zniBuHRbLdJGi1SrUkAjcBISWo0NV8xMzVEyYeCbdFYXaCTHCUKFMqCtdcO8bupki0ygwDhGr0lLllghHV4aGscBMY4PL4RKRoNqY/paLabLcJKjcZWmygKwRg8LFtbHf7u7z/Lc8+d4y1v+iZOzZxAeQU8vwA4/LXWCdtra3RabfAUqbXIVO8kTqToNlVIFK5nwbLPmfuSSm8yYudBZ6aSZoeRo0MIG2TOfYqO26xfeZrG+mUeefIZvvLwMzTWW0BIbEJsE5rNbaSUFAse6dJV0sYRVDFkc2OJoaFhRFAktwX9gYqwL+288n4b/tU41bv3I3v2ceQBqQBsBpezRjM4NEgU3EbS2mZudpZmo4UUPh00SZxiDHi+j5Ga7XaLwvYmQehx++23UyxXSVPt0ARYjE7wPD+DV6ld6+ulChD6q+K93xuyPaAklWqZhatzHD11EuvHlKMKGEEgfU7fdhutpMPs4jy333MXJ0ZGuXrhIg898giXFq+wtrKGUB4Iyerqs6xtbNHpdHjta19HJOUuWy268C7nPd6KIPKzn36QEzMzHMsSb1b02EPrzjG3biDVFqzEej6VoTE219YZHRlBYpm9Os96s01zu4NVAmQKCKRUJIlEBz6JBCUEm1azsbXJsckppiemKIQhUaFAoVCgpeGJp8/w9FNP8g21Op4Q2SErs8/IQRkF4HseV69cIYljAs+/4Yrv7PmzTE1P44chaX6vSGcTs7VxrW8CbqnsPs/A7a0uBNgYOq0mNtU0Njd47sknKIeSgXqVZ55+mtvvuocgiChHIZ/9wkO0GtusLSzRbiesrK3R6cQu8WXdelF5B6tV5J9Qfl35Nfbbh73Weu/v+u1I7+N7JV9fiOS2vFd27T/jfE4hdnrWusl7C1a76pGSDuUkhKDR2Gbhyhyh0RSMYfbZZ7l06QLNdos4SXDgOY/UWDpp4nSmJArhCgDChdaNzXWSThNTCBBSsraywtbmBtPjY2ytLBE3tkEnL1gHX0vydRMowc5C7O+F2PmeHeOSEzikKe2tTTY311leWSSIO5x55CtExZCh8VHOn32GSiEgwCMIfbZsh1ZHo7wA6/ksrm/y2te9jla7TbVeYG35KolUTIyPkSoQInGYYrt72/QapBerorR7Y7oMNOzOGPVmNHqvrT+rlOvUWONYyhAY4TmSBRMjTIK1lvbWGhfPPsPm6iLLV1tsN7foJCmdBBodQ4qHFh7CCgIlsFqTWImnPCiEHLv7diZPz4D0MXFCY6vB5LGjGezOIISHQCKsayZ9vuzSC5H+LPZeme3+TFT/YdINQg1dY4g1pHHCE088ztDEJEdPnqKtU5ZXVjh/9lmee+Zp1ldXSJIUaw2+8kiSlHanQ7PVJBQCUGghaMcJqS0QFopIvUKl4lEMNePjR6iNjlEamkDgIxILnsFKfe2N3kydQffQxVpsami1m3ieRHoeOkfKGZdtk8YFT2iwGqSWDNaGSUY0hhU6nZhWHGOkRAtLvLHO2fVFgs4aa5eOM3XkJCdO34PxIlIhMCZle2uLarmCxZLqFC9rDL7mQnsyfbcy898Vu4dbby3WpNRrNWoDA+gMliNNzOb8E3zls59ge3OLR5+6xPqmBuODUKRNCzbBkwGhkIg0ZeHJz2DaS9SmZojKg4xMHd1FdPFCM6svVPZ7z/6kxPWqu72P59nZ/kSK80Xziqar8itrUEpQrFU5uzTPx//275ibX8b3S7RiQyfuYNGQGDylkAY6KaRWIKOANinCWDwMi1fnWFy4yunb76BcH8Iol6QQ4vrXfLNlP5uVWY+ssuARhgWuzD7Gs088zvE770GHFcBSqZSI29s8+uiXGRwcYOrIUYJCiWPVKk1hOHf1MkYIkiR1ECzr+ko/8fG/wvd8XvWa1xIEHlIInAE0WbB06yq4ncYyj3x6jkKqGZ85ScezWOGhMntkhSNKENY4shThkoKV4XFOFiu0Npcpnz9Du7FBq9UgVREdJFanWKsxUpOmrmdNCYHvB4ClmXTYaCaoYg2/WEYGIannEQaGWrUK0kenGiE1woOcGAMJWliE1u6M1A7iZjDcKPLu0S9/EZO0OXLsBNL3s7hQZIQ/ahcKJ99jxlj2SpdYMoZbdkglWo0mcxcvQJxw/rlnqRQ8Nre3WFheYWt7m1KxzMryKotzV9ja3kYbQ2phO+7Q6sT40gcUHh6WFAAlQFq5p5/S65fslUzZC/7a7y/sVzm7EX9iP5i+sRkjJLttUC9CR+YBqHHJw7xjw0qFdhkx2u0mdSUolsvMnD5Fsr3E0w8/zujAKGcvXWU17hDHglB5hJmvabWrWCkhUZ6HQGGFwfMVkoRnn3iYSrVGqVhGFUtMzczgNbZ57slnOHbsJJWR4QPf/ytBXvGBUq90qx59AUj+vclLxdYZbWsMjY1NFuavUq0UOXnkKM88/ihHbrsDKyRf+eQnnJMWS6SQSCvRRmcYX0uSaOYWlthsJ4xMHWVlbY6jp+5mM04x2jlnjvpYYvfIzvZmMeDmV5Z26aFnw/a+134Vk/7r2anK5QGnBZOA1eikRby9ysrlc5w98wwXz51ja7PBZjummRia7RiJQOOhpUdinAHUVpNajYP8C0rFAuVihIfGpDA/N0cYRlSrNdckKh2e1jp6h5ckM7tf9Sj/+Zo11qX+7qkmmZ7vMVijmb86x5mnn+bt3/GtbLZanL1wjscf/QqL81dpbGwiLRkTmaTTahMnKUIKwjBA+R7NeJt2J6WTGFKbgkoZLFSIpGZtZYXFoQWGT92GKlawKNfsaQD1Ijso1sE6hNXd6mPcanJ1ZZEjx44hPA+EyjLNZPtQYozAGoMVmkKhxGajiVGSjtWkLm+JsQ76lMYx22vLtDeqXNGGSqXOwOgRtPKwNmVrawuRpFhtkP61SYCdoCk/6s3LoqKUy+41ZVhfXUJIwPOxUmJtQqe1xcXnnuG2O+/m8SfOcXXlWVLrIzx32ApAGEEkQFnLdqfDulfixMQJbDhAdeQ4+D7WxoBPHjXu3lMvrTO7Hzqg//f5c/aS/uu39tqAoQu7My7xY41BpDEkbdY213j2zBmuzi/S6aS0O5bEOCSBRYNIMVohjGV1Y5uHHnqI48ePMjhYRwtFagxLi/NcOHeOqaljFMomY5zau7fzxZT93sfZIXcmGAtbW9vMX7lKagXHb787g1IZms1tHvvKwyzOLzAzcwqdCjabLZK4hQoD/DBEKoXVGot1gCkZsLK8xic/+bcoP+Kee+4hCEKkq7Oxk6m8NRvuda99PU995XGefuIxRKAIBwaJSmWk8jFCYpEgdHa+0IWkWSGRYQG/WGZ5bY3NzXVMGqPxiI1ECUiSGOkphBRonWAt+FpSCEPCqEA7tmw2OggvouBHCG0gbbOyssKRYyfRWmPiBHSK8iSecs37WoInXNVze2uDOO4go+iGoXdveuMbWVyY5+zTTzA+NUWhXHHOuPIQvo+Vyg1vNXnA5OxPxsvR4yu413OggMyPMIZyuczAwCBnnnoK5Qcsry6xsLpKnBqWltdotzoY7f6+HccExQLaWIwniZMY5Qekyr2vEh5aa5ASqUzXFPVC5fqrRPsFS/sFUvvJje7Tff22XbraPzGdX1+3lUEq0ClLi4u0mk2naEeNSxrHPHvmWWKtufs1r+ahc+fRm5tu/aaWtjB4nhsBkaYajcZH5IuZwFoCJTGdDtIY/DBgeGIC4fmsrCyzsDjHq77hm5i5+74D3fsrRb5uAqX9DtRdGVKXPs2ytO6rXKlQKJexRrO5cIWtZocTd9zF3z74RZY22nhG0k4NQmo6iSbO2I2s0WggTg0dA8P1QZYXL9LaWmNs4iTaGlIj8bRxmFv5/Bv1Zmcar3Usri1P7/We/dWSXpFSYRFYnSB1m821RS6df461hVlYn2djbZ3IE8x3YlY22zSMJDWSoueh/Aid9YKhBKk1JMbmQAxKUcDVSxcYGx6iWKzS2Njg2OlTCC9vXrcYq3cFSbmRebF6lPL36NVL/2O59EIYe4Mm54xl/2JIOm0efeTLTEyMEmvNQ5//HM88/QTbW5sk7Q5JnGRZ2J3PqhCFjjlJWLS1yCAgacUkGlK9TRQposIYw6MDHD06zFp7E5PGeNJVILS1YAxGv7gOiksWW4fNNu7gnz1/jisL8wyPjlIoV7LbclnlRGiMFW4mBB3anXUWFudYWV2h0e5k9KUOBialxIuKROUS2pOsbsecHC3z7JlneHVtGBEVAUu1Uqa9vY0x2mWH+/ad+xyBLAADyHspXg6yO7DTXLp4jriTdnHtysasLS+AqNGUdR4+N08SlEmtITZtZBwjhMRXkjRN0UZTKwW0Wqs88+Tn+YY3/0OCYkgiAWI8qxDsjFjI4bi3Kng8SEDUb5v2Cqzy6knv3+xAX7MRCRZHkqI7PPPEIzz+xKOcm71KJ9Gk2pLqmES7vLmQ4CnXSJ+mllTDpUsXefQLD3LnqWOURyYJimUmRkdobG1SKBQQSHRqEF7OCnpr11k3YQgIoTA2YXh0BD/waTa2aG9vUanUaWxv89gjj5Kmmje/+ZtZW9/gzNPPIQOF78HC5Vk2NrfI2vndlxVgJb6ChStz/N0n/hqhY+695x6CMMSQV3ZvXUVpdHyG4luGeObJx3jmiccYGRpmdGqK6tgY1iuSg77cl4Ph5bDwVEmE9NBWEKcWIRW6kxAnFmsSjNV4FqRyTHJGW4xJUDJACtjY3ObKlatEYeRsmedxefYCrU5CtVolhyPqVJNqwPddhCQc82WpEFGMCo6GXogbDpRqo1OUylUefeiLrM7Pcer0SbZbLUq1OoX6AEFYxNgI6e1A8YQQbk5PXumwPcnWDBFgtEUbjVUetbEJTkVFtrbXeOJLn6PZapNoS9Jsk6QuSdVJnF1PE41Uinq1Rhp3iKXACo2UID2VVUYspAbhSku7bFQu17MFe9n+3uftFUjdaCJjv0Rqv/Rfz17XAmC1prW1wdOPP8bq3CwTM0sMHXeInfnLc8xfWeTVr3ktbStpWYNB4AuJMTHNuI3nu5lKOfRcJwnCk3ies/ErV+c5qxRHT55GlasMIIg3tmhsblCtVxg/OomIwhvSwde6fN0ESr2yX+bfWhAZ5C4/MBBZTrnT4ur5sxw/OklYLFAo1xEEaCPZ0oZG0qbTNnTimMALiQKPRmrwAx/lBwgvYHT0KHMXLlKqVFFBQGqKSEAKc021ay/MbP74zdbDfpmXfphY/zX0/q77Wji4htUJVy48x1Nf+RytVoN77robb3iQ+NmzVIs1Hp/9PIkM3BC+1KCFQJsMqiIlGk1qNEJKrHZ9IkP1GqXQ55knHmdq6hhDg4MUSmX3rrkDnmUmc0DAiwUV2gtitwNH2A1NzB/rD5J6M0V50GO0ZnF+nsuXLjE2PMRf/H9/xuLSPNakdNptl3FDkmiD0SlKQhQEBMrpoBPHdLQmCEMKhQLb2+tEvke1VGT86DSalKHJY4SNFnPPnqdeGydVASiJb0HpF7dHyWSZaqyhsbHB8uUr+FLwDd/0BsJiGSsz7H3GkmRsirXKQSnjLdaXztNYmaO5tUVbG2Tg4/sh1hh8LyAMAnzfY73TZvvSIoMjE5QCj05zG88PsCal1WyysrhEHLeJwkL3M9g17FnsfHa9Qe2tlr32bK1acY4TFmkTbGeT9YWLTEwf59GLz3Flcw18hdKuedyQoI2llaT4GGJSquUSFc/SXjzH2cce5P6RKQhLKKmcE7SX4ypu7p66EenXw17Jm70cm112DUBwjZ2zucfX7ZZP0Umbq3OXSNstTGpA+ngBkFqsSLNASaCyKqTynUOdJAlPPf4Ya7PPUhs/wm33vIqBwSHSJGVjY4NieaBLXZ9fy62QXY4gLkEtsouamppkemqS+fkFmpsbrPkhTz19hnq9zonjJygVSwwNj9NqtbGewOgWs+fP0mx3XEVBSozWhErimZRypczm1garVy/y1Fc+z9RgkckjJ9Aqwg1P3pmz9JLrQRYI6x6nX3Ufz33h85x5+EsszJ7n3re8kfLwESxh5hvkcHWLEG7shbQS5QeMTkwxP3eJKEnprG6z1WllTIiun9C9EaSpQUhDHBvajS2k1jxtnqZSLDIyMsTc3GU2tze5975XUa5Ue4ITibEGnRqkMFm/VMz6ygpW6y4b3I2upNQrQsnn9ld/A4uXzvKlz3+WzvYqU1OTTMzcQ2V4nLCq0MJDeZosL+d6OckDJdOtkhjjZodpY5x9sq5Lpl4qcPtt9/D042dYX5olNRorwA8DV7XL+sS1dSiHy5dmSTox4+NjHDsxgz/kYbPhvVa4IcfCE0jk84aG1wtG+vde/5iW/Psblf0QOVjr2O3Y257tZQtElgzTcRsddxBY0jTBGM321jaPPfoI0xMTFOqDLMwvkhjnE6UZTD/FkiQxSil834d8n0k3K8tai01TWlsNoiiiMjBIkhq2V1fY2lhlaHSIYrWCli9yL/PLTF4+adIXSfZadLtgT7u+siFp1jVECAEaC2mHxUtnwMbUB+sgLLfdfpLx8XG08GklhhhI0BmtqkUJCHxFqVRCeQpjBaWBEVRU4tz589i0jTWxq5gaxyySs5zs/NzHgsbNPUj7g4h+Z6Ffb8aYLolDb+am+zxrsUaTJJrGdoPzzzzJ2twl9PYW9eogC1ua4ugJiqNH0EEZvABhna60gHYSo3UK5CyAPtLzCYIATymSpMP01CReGLLdiRkYHUULulS2Iq8gS4sVux3bm+XoXs+A5Zl2nRF67OmA5ehta3YGexrj4Jo6ZWttjS9/8Yt4SvDUM09x/txZOq02re0mOk4xqXHED9pgUzf8WApBFIZ42fwEo1OkNfhKUqsWuf32O7j//tcxOj5MWClhVMjkkVMok7C9sYwgdVlz8+I7aW4ulCbtxDz5+BOsrC5zYmaGysAgwg/Q5DNAUsfCZC3SgIgTFi+c5ckvfY7IagJP4fsB1UqNWrWK1ZZOq4NnNcVCiF8oo2VAs9WkHML68jw2TUnjGE85oI/jWe37PPODMC8wdz/bW28qexMUXTthDVakNDeWaGxvIkyH7eVLpJ0WtaFB2kkLa2OiQOEhMYnF8wJ8r4DyC1gZkdiAtZZADt/Fydd+BxuNmObWJiLVqNTBrMgILUQXc/TSO/X7Vbd7pdeh6bdP19q0fV7P5oiCbL8bzebmBlubm9TqA6QaPC9yrKUyoykmJ7dQCOkTRUWCwEdbS3VgiPEjMzS3G1y5cAFpLJ12m431dYxJcRDPWxd05tKrG2nBGscQuTg/z+hgnVAazj75GI9+5WFGR0e57Y47iEpljFBYqYiKJYIwQhtYWFwiSbSDZaEy4gOLMAmBMFQKHqa9zebiFS4+8zhrS/Pda+j996WWFIERiiAqM3PbnQRhyOrSPOeefJS0uYm0MVa76pA2bqBqthkAUJ7PxPRRjhybYWR0jJGhQQLPwZyM6b03AUi0NiRJ3F2rm5vrXLhwnscff5T5hSscP3GcgcEhjLWk2pCaHbhofs5gDTZNWLg6R6fVyljzbvzMMwiMCvCrQ4yfuI3KwDDNrU3mz5/h6tMPsXLxKZpr8yTtLZKkQ6JTEpN2fRdr839NNnsyAZuiMWgczbi0Ghm3qJYKnDx5Ej8IsUi0Bq0l7Y6m1UlpJ4Y4sSSp4eqVeZ587HE+++CDfOULn6e5sU7aabvKrdFugOoe5+1+spefk8s1Pg07a/EgaJv9pL/KlT24p4/Qa997f+7uTQE27aCEpVKpcGT6KALB2eee5cqVK9SHx2imhifOnGF7u4lNDUmakmDxwhAviByM0VjacUI7SYiTlHarQ5IkhIUI5XsMDA9TLFWIk5jt9WU211YZHBpGKDeb8etJvq4qStdb+LloDJIsS2TcV2N5gaXL55i+/V6SsEySWuq1Iq970+tZ+r9XSbdiCp6HHynaMsH3fKQXYA202002N7coFsuYwGf4+B2cf+YpmmtrVEYiDIHjr7Eiy6blmRn5kjpnbuNfWw3Zz6DkstsB0Vhj3WGTanSrTVkK4k7CQ59/mO0k5e7XvJYvPvoEWiikF2B0x83Z86XbfFYjkdmANEWaus/DD3y2G9usbW1x+z33glfE+BH52Ghhs+SI2H1tudwsSEt/1a0/O9Xf77BXlso1A1uMNt3sWWpSGlsb/N0n/oaVxQVWN9ZotDtI5ZMksRv85uhuMsp6x55lbXbjUjm4j1EY4+A8Y6PDDI+MUq0PUIxKFAtFJobHCIoVrK+ojw5y5dJz3D44hKCAkR5CpDdFT/uLw1dfvXCRpNXinte/HspVNyk8g8I5iInbBzrLoLXSJpeffY7hwXG2OhHhisZqzfDQMCeOn+DMM2dYXV6BUCELPjQSAt9HKJ+wWmd5cZbB0TE6nRSJIYoEgtQdQhmQJvtkdzK31j0qeHkESntlJQ2wujrPwmOfJ4wKHDlxhMVzj1EbuxdKdWqlIU6MHGV7M2bNblHxoRQV6cSatY1NkjQhiAJi4OHHnubO13w/J6KIpUtnmK7UiKVyTcQigxllerhxYM/Nuf/rsU/tlZXNZS9IrPvU904Mie77ub2aaoO2gqX5ZZrthGp9EKM1m1tbxJ2YMAwz59RidYpOY9K0A1Iyu7jO677xzUxOJZw7+xxxq43v+zQa225QsJEI4WaWvJTSr5+ubjL218bmJn//t59g/eoFKp4mEJrV+cvcf8e9HD0xgwoi1z9qocvmJ0BIHz+IsCiMdb2DVkiE52GsYavZwvcl7U7K8soazzzzHJttuPubCoyNjXcr7C9Vr9YukSnCgJQh5eEJ7nj9N3HmsS+xdOkil8qDzNxxL0KFCOHIDdzyccQXUgpiC2GxwtSRY5x5+klOHD9GI9bo+UU6nbY7I7KVp5RAWAg9QRQESO2oWOauzFIsFXnVq++jPjREojXSM1kCzFWuhHK6abc7KF8gOy103GF8bJQoDG+UxwGAUHTQKLQUyEKJu177RjCai08/RPzcwywvz3K0sc7wsTso1ceRURmUh/bc3B8L3YDRfZuTOwmkNQgMNulw4eyz/P/s/VeTZEeapgk+Sg4x5ubcgxNEBIAESSBJse6umulu6ZmSnbu93Mv9B/vLVmR3VqR7ZJtVZbEkQIIjOHdOjB+ibC/0mLuHI1CTyAQC2KxWiMOZhZsdtaOqH3nJ5599xKPHj5GyRkpPVRpC0DgH1kuSXGOcx1oDQlCWJdZZnj16xNtvv03W6aCUQqlGyOFriuFCvCgd/rKO/HycRhX8c3vL6e9/n/FCwvWSv3W2g3U6aWqeHFOXGFOxsNBjYalP7Sx7B/uUVc3f/NMv0b0On395h2paooPEJYrS1iQhaXzMJA5PkJayLMiQZFrS7ba58cYtbF2T5hl4mA3HPH5wm8nhIVdfu0nwCsL3sDa/x/H9n/7f8XjZZvsy6BgQuxshENA4oupLPTrkzhefsXbxGu2F5WPie7COTitlY30lYj5VggsSrVugEmrvcMFRlFMODvew3kAQpFmb/uIKH3/6CVU5gVB/xWQU4oF7eoF8ZbF8a3Pz8k3h6yotp4OQ+QY136TmogSE6JERuxwaieBgZ5t2Itl+/pT79+6itCZvtcnyNrIhpWotSRKF0vEQ8i5g6hpT17TbbVrtDs+3dnBSEdIcJyJMy/kGA31aFOFMkvRtHbqn4XVf5yR/eq6+IhziIcSGEDaABYx3VLMJv/y7X3B0sE8gMJrMKCqHNRaCwPmTiiJCYoVAJAkySTHOMS0rxtOS8cRQ15Hz1Gm1WOx18eWMpw9us/3sMcFblE7wUtNbu0wwNZOdJzgklUwQ1N/KPH3dkCKqRe3tbLO8vESa55hmPue8wHhPxaBcBAg2JjRpknH+whWG05rKO+rgsMJxMB4wqWcELRgOhuw822JyOKac1cymhiTtM5tMOdzfoSoK6qoi+FNk/XmAyMl9Hd9Pjgv931eF+/R46boMkn57lVBO2H/0Kx588gtsHVhdfw1vPdPRiGANri7RIqBFQElJqjXeOUDgPRjjmI2njCclS5ffYHB4gB1uUjcQmLjGIt8A13Q1X/GcvLwr9PJ5+bp/O//67O/g1FkRmnpLcw8EJK1Wi1a7RfCQt9rkeRZ99bzDeUe73WZhoUeWt8jb7QiParrvk8LweOsAmeaUZUFRGbRSTMfDRoTExY/vCd55vJefGpKAEoFyNmV0dMhsMkThWWhnLC8tglTUTfJoicgL38DAkixl/dx5lIqeSwGBVBovNDMHB+OCQWEoveJgVPDo2S5f3L7Hhx98SFmWMdn8HToD38mQFTI4cAqr2px740e8+f775FLy7N6XHGw9QfoKGQ0OYtex+afOenyQBBS9xSXyvEWiNX/+Z3/KjRuv0Wq3kEogFRhbU9cVwVtEsHhTYm1FWRVMZ1OKsmBnd4f9/QOKqmo8b07dxwEIgqooGRwcUkwnWFOzvroaz7vf59JdjQwVQlik1qQLS9x8/1/TWr/B2MLBwR4Pv/gtTz/9FQcPv6Q6OsAVBXVdYmyN9wbnLdYZrK2xzuMbpcck1IRqzIN7t7n34D7tbpu1c6sgwXoHSke4vNLIROO8x3iHQ1DUlspD7aGuKna3tzC2xnmLd5ZgDcFYfNNhO9uNedl6f3GfPynAnD3HX/bvTn//u4yv23fE2d8zL940McRLirvxNXgmkyHW1ly4cgWVtxlPRwyHB9jg+fVvP+S//80v2NvZI9TRdsR6T20jfN/WNd75hifs0VKihKCd5fzkJz/l9bfeIO+1aXW7OOsZHh3x8P4X7O89Y29/H+cFvAL0yQ9p/IvqKM3H6WoDnPBHZPDHVWQXBNI5Drae0e60Wb5wFa9yvAvY2vDJbz/k9t3PODzcAwGTWYmzASUTdCoxzmCCxwn4zYe/JGvn3Lx+iyATNi5cZnPvOY8fP+DW628ThDyuZpyobr0CCEKIzxM7WScE2n92MwgvOmHPEyURQhRxCCJ64SlB2u1hpMaHimBKnjyZMbr3iKPBBNVeiHGWanDGUuOJ2HQhEwIOKQK5zMmUYHFliY1LF0HnGKdIXEDJ6Esy32C8j92o08nJt12VfFlCBC/CHE5Lkp4e3ntERErgQsA1ilq2rnl07y4Huzt0e13uP3hIbRzeR0x3VdVYZ1BKIlUkYHohQUgSneCRHBwOKSYzUqlZ6Ocs5JJqdMSurTDOsdBfxFnDF59/zvudBRZbHUjbXLp4ia1Hd7m2fg2h8+88OFHB4Z3BVCUhzwhh7iJ/UrU5eQ0B4XzDG4zJpfGCvNsnhKcIApPxmNFwRDGbYUsTYTEqco8ICdvbuwxGU3SS8ujBAy5du8VkPGI6nVAUM3TPxfumefLQ0MVCg7v/XqraXzNO33fHEFjvaXcXQGiGW9uMRoY/+8u/xmcthkeb3P7sY4rxAOkkoS7xpmJqApXxSObeUh4tNaur6ywvryG7a6yfP8/e0y9Z7C1HOWKpEaIhsgcf4R+vuMt2thp8Wnb3bDHk69b+C0kmTdcwnHSYJI3RY7A4BIQUGRRaQqY9K0t9BpVjVE0wtkZpgXaCuirwIVAUNUIqghCoJEPqpksUPE4KkpZEpBGOXQ2HVLUhz/Im8IjnkHpFnSXpPfOYJxCLFBIgQC00aavDT95+h3/Yeogvh/QXOrRSy/Bgk+7SKlLnmCAizyIIaLoGgsD5ixfo9nsU9oi6qnE+MCtrhHd4AUFpVJbjTE1ZW0xVs7+1RVUa0iyKrojfqy/yh435HAgRi1gkGatXblBNZtz/8lOeP7jD0mIf2ZbUIo8CFAFwgeAC3ho8HpXlLKyscu/ePVZVinU2FgB1POMddTxufcDWFjcvmHqPUpLBaMSjJ08ZTgquvzbltddu0OlIhEgRouE6hagmODo6xIcC4S3txWWcjJ28b7pzOZkQBEgRwDtkmrKwvMaf/E//G7c/Wmbr/qcMjo6YjT5mb2eP8zfHXHnzPSRtlD7xojtOUISKrCFX4soxj+7dYXN7l3d+8lMW+stsbe/yZHvG/uQxXkNpq1gIJESUCTEJV0GhE03poDIVe/u7XLU10lmU0gQrCcLhVGOOK068KM+exS+FwPFicfOsb+TxvdH8nd+n8Hp274Io3gInzZn47Txpmv8iJkZzrXchRTSSLyd0Us3yuasUKufo8AmD/aeMppO4bmqDc0TBkEZIJUUSlIg2HM08uxDPPutq0rzP+YvnGA6PUBqUljgBOknppNDqBJZXF3EyIP13jTz5YY1/kYnS2QD3uKoQ5vxkR7CO0fCQ59tbvPPjHxOSFtYL6rrko49/y29+84+UxZjgYtXfGYcSKh44zhMQJFogpWcyOuLjjz/g3Ooaiwvr6CTj5q03efb0AfZqidatFw7+eMjLrz3sv815OMl3XoSgvPiYMwnUqc9fSQiaKqsQgnangw1EUiZQjMccDqeUVUAFgUxSZtMRdVWSt9polUSCIeI4gJFa0eu2uH79Kt4Hzl+4SJpmXxvQn225vyyR+TbmbR7MnE26T1eq5uO4K9gE/SEQRQq8w5QlX37yCZtPnrDQW+DjTz5mMp1iTcB7qJ3BWotKNC54qqrGh4BK0njgWoOpambTKUvdNueWumys9dEqKtgpobn42k1WNzZI05zt7T3u3b3Dz5aWcGnGwvIabD5h/9kDzt14C/MdB2neuyjO4R3j4RG2KqKstVA4vnqQxUMClFL0+32SNOH9n7zP/v4uu7s7SGMRQIZEK4lOE9rtnCzNMMZg3IzRbMhyf4E79x6xvD5je3uLwf42Kxfv8PbSWlSPCvL4vp7Dyl5QGvoBdJTm44X7TQRqbxhZhRs5LixdJF++gtU1w6NdpqNDfF2CVYi6wBYzZB7ldRMdu0lCwrnz5/h3/+v/Qm+xg/U1C+vneHr7KcneI/qrlwlJG2SKCxIxl7KWrzaJPA4wXgK/m//srEfeaQjL1xWAznabTqrSUZLeNQ72SE2vn2Of7VIXJXVdU5ex4+0wkRtCtIoQBLI0Q+Dp9/usrCxTFjOUCGghkAGO9vapywqdtUiT9KWv7bsccR9qqtjixNQyZowBoQS9hQW6vUXKo4K6KinHjid3P6XT67O4cRmtW/igozG0j2qvIXj6/SX6i4sMR2NqY3HOkaQprURjQ8BYRwigGj8Yby2JiOvOek+qJd/h0fe1Q5BEFTcRDeEByBdYe+M9iqpk8PwhR5uPWL6SI9IMpMZ7gQhx11CNgXBIMlbPX+KLu/f58MMPOZpNYxBuY4FDeEGeJnjvmRVlPDMRJGmCVAlIyWRaYuw+RVlT14bXX3+dhV6fENJ4n3uD95bB3i77uw+RwUPWog4C5SJf+psMJ5IoSiEiZ855h0wUi2sbvPuv/5qs1eP+B3+DrUYU25vUQdDr9eifu4rLW0idopWMybaSqOCQpqacHHHv7hdUteG9n/6MtLOAcZp2b412fxWV7mJMiQk2+j+FZl+K4HKElPHsMzUz4xgM9qhHA5K0jZEtJB4la5RTsegsXCy4IiKVQjRG4vP3+MwZE6HV87z1JFGZF4RflizNpU6+yZj/ra/jN52NSQmxaHOsOkNEXXhb4esR5zbWWVxapbaBg4MjyrJsCswCiYiduibGi8rKsbgq5oqLLoptaB0L5kUx5eGD+6wvttFKE32WAlmSoFVCv9dmaWk1vjfiu/Vb/KGNP3ro3en269l27NmANtBgqYMlmAl3737JwtoGsr0QAznveb75nN98+GsmxRBrDaa2OBewPkQ/F+GjA7sP5ElCnmoUnoPdXZ4/f4JrKpULi8sEH3j+9GkkPnIC54qv6dXDWk4nEy/j3zRfHH//z1VpPIFObwEvBLUPOARtnZBJibCGcjrGlFMQvqG1CpSARDcbbPAEZ+h3u/z8/fe4dfMmznmWV1YjNlm8QEd62QUdV93P4pS/7XE2yQyn4JLOueMP62y8Z0xJWUwZDQ744B//nkdffsH7P36Pt995lx+//z7rG+tU5YzgLEpqkiQhhIYn4WNCb2uLd4GyqCimM1ppzuLCAr1+Gy8DKm/RWlzn8s13I8Qu66HyLhcvXaIuZxSjQ8BidYu1S9fYfXwXpgNsSL6zeQKwQYKS3Lx1k9HgiP3t5wQbA4Wz63NevPANQTjLEspiwupyn3/zr/4VN25cp91psdDrkucxeFBpClI1ayq6ls/KGTLNkEnOeDIlSzTelIwOdrB1JAXPn59j3td3Og2/13gZlEQKSZa0QKfUrsIET+0lwluwFcHVhLok1CUtrVhoZyjp0ToedkJ60kxz7sIGrX4HFyqUH+OyNr2NqwyffEo93gVXEILB4ZpuaLzPfwhz8TJIzNnizmkFq6+Ddb1wLvh5MOTw3uIDGAfDyZSiKPDG4GqDBLRUkdfTFFCUjN0VrRXddoc333yD5aVFyukEvKMqpuSJppUkuLrGm/oYNvQqE3IvVIQ7idNJSdwnpSspZ2Oebe9y4+33Wb90HWM9s9GI4dZD7nz4dxw8vYOoR4hQEfAYomqpD9Budzh/7gJKarROUDpBSMW0rJhVFbOipLYOLxS1CwQhWFtdIk0aqwf/8vfoux5n44L5+ZG12tx66126Kxs8evyU2egQ6Qp8XcT9OESIIVJGnxup0WmGTlLGkwnemshFbniYaaLx3lGWJQhF3uqSttpkeYdWu3MsM17VNYPBgNu3b3P//n2KcoYxFdaamMA7w8HeLs+fPeLoaJ/h4BDfCCJ90yEaKR3R3BNSa4SWqFSQdxJe//GPeevP/ops6QKzynG0ucln//A3VAdbmGJGVRtsWYOpkbbCz444fHqHLz75EKUz3njnp+S9JWyQOG8ImCgkJOYKrpIszWjlLdIsp91pk2UZSoKKODHaCwu0tKQ42CFUBusVJoC1Jd5EcSNvXcPp5diXCb4GNh/lC1+kOISI9nDhxfX4YuEMvglP5+t4Ty/rXJ08trHrbWB4QkjwDldOEWbI6toqadohGMd0MqN2DmOreJ4F/0Lc45yNP7cW2xQXlZTHxW6Cx9UVjx8+pJiVRJ5wVNSLRZ82SndQuhuVCcX3t/d/H+OPv6MUTmRj5SkKsm9gdgIRqwin4Bcey+HBLuPBkNfffAsXBM46iqLiw99+wNFgHyU8Kohjvw0fQDU+Ebi4GG3lY6VbBKwt2dp8wo2bbyJUglKaSxcuc//Ol5y7fAUll0FrXHAILxAopIqv/3ipzsse39rUvBhonFWMOps8QYRoxGr7VwOV4H2zeQiEVKStFkFqKhfAgVaKdprSSlxUAXKGVisn0Sm5zkF4vI345lbeYml9nR//+F1+/pN3Odh5ztr6Gt1eL7bVlYJGmixwcqCdbDzx3X6Zgdu3PebVJxmiIEHwoYFvxk1YeIe3Fm9r6vGAR3dvs7e9xf72Fs+fPGGxv8DHv7QsnTvP9etXSFstHj/dIlEJzgWcazZwByGIeO/KECXCQyDPU3LhSKmpJ5Y0XeLctbfwqo2XCWmWk6QpQmpkIul1O2xvPqe3dg6TpPRWLtEfztjd22ej2//O5inOlQSZ0O0vIqXg4w9+xU/+5E9pL28gVAJCR08kIfD4puIdrxnhqWYTclsgtEdlCpFIVJJgpwETHCIkSCcbrykPwvHs+Ta6MTJ++PABr51bZPeZYDo4wlQFSbvXuKT7uH4bFOoc0inEDweCd7ZTKQL0F1ZYWlmmGG5h7QBXT8hdNyY23mKBNE1RQmGqgDeRJB1hXtEk++79u8z+94J//2//DdevXMBIRb64hj16wO7jT7n0mkZ2NUFrvIgclvA9FHO+TkDlLFztNFn7dMHkZZ2llyVcQsxl0Q0ew2RWMp5UbO3u45zHGRertk0AIkWU23Uhms+6RgXs2vWrXLt6BecszlaIYLGmYjQ4YjQ8Yjwa0u71msTs5DW9iuGbfVqIJiD0LiZNIWCqKQ/v32XtwiUurK+zt7zIh5NDisNn+MkRR88dd+qSy8WU1cu3EPlCtK4MESOrlOb119/g+fNNNnf2oKhw3oLSWGsxLiIPFAJEhAOtLvebJmUsCunviTB+tosshEAqheouce3Nd/ny49/w9PFDXmv1SLIutY+w8QgDJ8pBCUlRVkip4/nkIsRXCbDGUhnb7N05OokJwXGAq9NYbPMBW9VNoW3AvXv36PV6XLp0iUQnKDxKQKuVUEhIlIiFxmYOv+n4CnKEOXpCIoIg6S/y5vt/ytraOX7zi//K9qO7VFvP+eKzD/nRn/0VIUCiE4Tz7D97xtbOFh7J+SvXWVpdx4sE70WjyheLUavr68h792KC2axPnaQ478lbbZw10UBXSrQSXL1yg+U2bO88Z+HCFWTdwoYEq0Fqjzp+7ScxTeCra+p0waTBD9AEgad8xKJHXwixKju3HmEuYf8N5/Zl+87X8eUJcwcyQRDEOXMWb2pMMcIWQ/rnLuCEpprNGBwNqE2gLmtCECipYlzq4+uc8/48AeEcipNzTgCJ1iRacrB/yIM04fXXX8faQBA13kV1QakyVNLCehDyf3SU/qiGaOB0cp4izQP6Y9L4yYfw8bAwwXE4OOKNm7dIdNaQmB3bO7s8evIIHxwygLeN8zQxMA9IfIMLrY2nrD229igPIliODg+oqxk+WLwXLC2tkyYJ+5tPENYR/FwPp+FlNB/zDkX4liuO8yrKWfGBrwgQnJ7PJmg9LWk+lwN13jVETkNtDDv7B5ggqC1UDqwHqRO0iuRBfMBUBtXADL33GFshVeDS5fP89f/lr/nzP/8zUi3Z29lhY329acMTg59TUuXHr+/MxvOyzuEfOl6E55wo7vgQGnPUKIHtrcH6QF3XVINt9j//Rz7/+/+DwdZTBjvbjPb30cEx2Nvi4w9/w3/9z/+Z//gf/xO//uDD6LMVPEGe3F9CSqRUaKVRKlaD83aXVqeN95ZqNkGGgEIiZUq7u0Cv10VJgW74JD4EOt0eo9EI72xcHyplYfkcd+7fw1ejb22eXjakcDgloNXmxz//E/rtjPsf/AP7T+7gzAjnKnCC4CQheHQIeOkRwYPQuMoynQ54+vgOrprS0grhA3mSkSUpSZqgswSZaFSaILRi72CXL+/fx7mC0eEmKklp9deZjifY2YwQJJ6kEY9oYCfBH6vhzQ/OH8I4e397ArUSBJVgjGR/d4/D/S2Kcszte7c5HM8YmcBhbdmdFhwVltJKjI9KiUonZK0WtXU8f/KE/+//8V/Y3DpE2hqBIt94k3K8y/aDL6AsCTauedkEFa9yvGw9n01wziIHjiWUT/3u9N87vY5f6Oh7GphUzawY8fGnn3EwGDMpKlyALM/o9nokaYojNGIGTWApI08z+MBkPGJ3d5eqrPDeYuqSui4icb8sMHUZX4x48TpfyXw2fCzhHbYq2N16jm8C04f37qN1wtr5C4iszfqVG9x852eoVp/gAvV4yNH2E+589EvuffpriuEewU7xrsb72Dlvt1ss9HuE4Aj4aBKq5HFAnSRpJKxLgfOWuipwto6Gqvb7Ebc4fU+c7kaGEPAyobtyjss33mAymXC0+xzlqoh+8I4QLHNNSCUU/f4i586dJ0/TuP8GqKuaoixxzsVOm9IgZHwvmCvPBqx11NZS14aqivfK3t4un3/+OcPhAGPrWPyVkkRrEIFOJ6fVypl7Gf0+Hd+XJRSSQKIUQqWodp+li69x+Y13aC+tohPF9qMvGTy/S+JmBGd4/nyTB3fvkbfa3Hr7PZY2LhBUShAq5uKo+DxScvX6NZaWl44hs1neottboNPukqQpSZrT6/XpLfTROsUYT9ZeYDydMBhs4+sR3hqcjcXsuTjPC5Bb/9XO0OmCaiRVn/xONeIG8y3uVOrVFMWbmCf8bvP7dVzJlyVOxzHFPB5rkjjnPd5aaM55bz1Jb5lawnC4x+7eLrPSYOoIvUvSBKXk/AUgZVNM8o0ICdH0XSt1bG6MAIdg73CIC4raxoJFkJ68pektLOBRGG+x7rsVffqhjT/6ROnseOFm5MzGIAA85XTKwf4+C8tLTSbvqY1h89kzxsMBqjkE54a0zCsPRMpdHTy195TGRtd1D4lQOFNj6yrKx3oPOuHStZsMj0Z4U4GtES4g3KnkaF7hOP76uzk8Xgaze1ni5IN/IUA6vcCdbSBm1rB/cMCnn33OeFZiEJgAVQjIRKOTBAFoqZFI6tpS1gYhJTpRZK2U8xfPsby2TAiO0dEhzlkWFvqxMHf1AgABAABJREFUw2Ld8aZ4+vV/HZ/k2wo8Xg7ZaeReQ/QIskFiA1Q+YGyNHTxjeO+X3P3lf2bz8W263S6V81x/+yf8h//r/42f/pt/S3txBSdSbEgwVlKVFmsjVO/4kJ5fqxBRRljEzd1ZS1UZKheY1S7OT11TTaekUpIladOdmRNRFUvLKyilGB8dIhrY58JCDxkcu5vPvpW5+rohm8qcUAndpVXe+cmfkHUWuPvJJzy7+yXl5IjaFLgQ1Xrm6o/BBypjKcqKna1tDo4G0dgYgXOebreL1gqCx5oYYJjaIIJHekc9GTE+OoQAhQ0sr68hQkU9HSKCa97Xk9riybv79QTg72Ocvgfn61JKTVk5rJeMpyWzWcnOzh4PHm5ifYpQHTwpQWSotB35gFofr2/nHMbUzIoJDx8/5L/8t//KZDrDBYHOF1i58Bab+0Mm0yHBV1H63zWV1lc4vgKVPlMMmX+cTo5Ov3dnVTtftk+cfMRtrq5L7ty9zf0HD5jMaowPIAVZlpHkGWmekeUZOk1IWzl5KydLEtIkIU00hweHfPDBB+zubuO8ZTIbU1YzAp68FRP7s2n4q7vXAiJ4hLdMBvtMBge4quDJwwfMipqrV66jdYIFfJJy5c13WH/tLbxuY12gmkQfpOd3P+f+x7+iONjCVlMODvb56KMP+eWv/pHdvW3iqehwriY0/oRKCjKt49dKUdYFB/vbVGWBszbyfb8HdM/XdSwhcm2dSli5cI2VjYs8ffKYYniI8gYpom+QtzXCRwsILSSdVkaWJlHMYlZS1haEAhlNw8smEbLWIGUssFV11axJg3UWYyx1XTObzdja2uTJk8cYU+OawpxOEsCTt1skaQKi8fP7PROls5AwpaISrU5TpE5JOj3e/PHP+Kv/5X/j/JVraF/x/O7H+Ok+j+7f44NPvuTSrXe4fPMtVNbCSY1FYjmJZQgx+Fzs97lx4waddtyTWq0cpSRKK5xzEDztVo5WCiUlB4cDKgdCp+xsb+GrGcEajIteQc6dUiw9eVO/cm3HH5y63uZ1CR+iQIf3BB/hjc4avG3Egubn8u+ZyJ/tJp39+Xzem4ZP87KaDnnwVLMZadYl7a9hhGAyPWA6G1OUDm/FcQJ9jApq1E0FAnn8s5P9USl1HGcKleAa1WcXVOOXFOj2Mjrd1jGP64dTOnw1448fendqfF0Wf/IRK0N7m1ss9vvINMWHqDLivOfgYA9rKlpJElu0+CjZHELEqMtYxbEhdqWUDdTGkWc6dqwQOGNx1qBUgkXRW17lyaMHjEeHLCwrAgleg1AWfCMR+TXkvz90CNFAmubYsQAwDxLCV4KK4+AjPup4Do8TOREa8rPnwYP77B8eIqoKENELwkWukpAS2Si4BaUwlaGoKhCWLAWQ7O3u8OzpE25cucLR4S6tVoZKElzwWOfQSiCDbLgBHKf8gkjcjBvNyUb0bVQnv67DFu+FZi5sDa7GTI84ev6AvYdfUAz3WVjeYPnC2zx4tsva5Rssb1whydrcWFhkXFs2/+lXGC8wRUVVG7wPGGuRAtzczv0U8nJeMTTOIZQkqBQrJaUxtI3FFDNUiN4e8yTeEe9BrVOSJGN78zlr6+dwOkEmCZevXOHxg/t/8Dz985PYfAiJTDLyxTWu/eh9in/8ez76+7/j3O4Wb//8L8nEIpGt0AS/NlAay97REcOqYjIpCEIzK2uKoiLVuqmOh3hvIUmUJJUKbEFbQSimCJkwmEy5cm4Nc/SUYryPcBWE/JivcbZ+9PIE+dWPs/ya0HS6kiRnbf0Cm/fv0+r0WVhY5OnOcw6OjghCIHUCQWB91XQiT9Z3DEZE5E5gsbbm9u3bvHb9Ju+//xOUSkgXr9LuWx4+esDrCwsIoXBeI9yrhV/UVUWWt2KAIYhQgTmngjlEJpzsmc1exvFeBvM0OM7dvFMfYK542gRZzjs8lt29HT777DOOBiPKmcHhSbMUIePcOe8RUlHXNaEsaGetWAzyHMs012XBvTt3eO3yMqNpxdHhYYS7pDoqjDHfR2AOAX8VQ4TGqyBY6mKGrQrufPEZrXaPW6//iCzvRg077wlSIjsL3HzvT5ge7XHw/CHB1tTlAGvj2VAWMxbOXeP2wyfs725TFAUheKQS1HVFZQwQUEKBUAQfq98QfWGGg0PKckraXoob3PdQm/jKWXc6mA0OFwQkLTau3GB0dMAXn3zExpVbZL0eOknwQUVkSIjzcXSwj/cOa6OflFRJXHfQKE46kmAwVdyrnbXgXexQWXMsKBACGGMoy4Lnz59x6dJFtNR4FEIphJQNvFrivGhUaL/ZmXcaVTKfi/g5ih1IJFpBEArd6XD++i0Srfj4FxU7O5vUf/837M4S3v75X9FdO4cJHqyP5/M8QA8NnNp7gvNoIbl0/gIf64RSxJUcnKUuC7xztFst6nIWURvOsL27TVWO6eSKzmDCxcu3kGmPkGRI53DW4rRCSodoulRzFeHTMc38+o6LKMfvcSzOAQ03Me5x8hQ3SSqJ+D1D55cVus4WdYSYxxTze7FZDg3iYTQc0G4voXRGaWtmszFpoki0phIK6xzCNd215r85VDBSFhr5eAE6ieemMRavINEZHsnhcExlLFmThEvtkUkSRV5enLF/EeNfRKL0MmjWaRnIY7gGHlNXPH/8hNfffB0vRczQfdT6r6sCJQKJEngvcCIa1BoXHcg1EV/mvMPLuLFYD7V1CA06zQkIrHFIGeUVkyShu9Dn2fMnvL7QQ4YmgSC+JgkRN368YX+LEDJc/HtzMq84rbjyVfidlLIJLuJmF0FKInoYzWW6g2c6GbC7/TxCB0qDju2WmCgFf1z18Tisc3gRILjYTk4zcqE43N3hwb0vObfUYTI4oLO4ihEN+VB4PCpWQFwMjIU/Ubmb88aQJ+/3dyHmcLzp+RhYOVPgyzHDnSds3vmA/WePmLiEm+/8Cf2lNe7du8va2jnuPnjM3/7iH1lYXGRlbY27j55SxpnFlDOMcTjnsd6Djy1uqWRUMQqhER+IlfPgPZUPpElKHaLhoSdEaBQe3wSOQgqU1KjGlTdNW0xmE6zzjZCGYG39HAfb321HKSr5RFVHVILXgWxhmcXVde7c+YTHX3zKuUtXWLuUgMhAxUKFt4Gs02U4ncZuR2WRqSJPMwiS6WSCAIyzWA/ORmhmgqWdQDdRpFoxMZ7drWe8dnGNxcU+4+EBwczAtwlBNZj0eSXP/7Mw1Fc9vhaqIeD85ct8/tsOq+vnkEoxODrE2RqlovKm1glCarwPFIXBOXeSePmAc3MJWsFkVvDLX/+aq9dfo7+4iFct+osbfPThP3H5+g26i22cCKhXPCWT4QFabTTX4aLalYpVT9UkSQRAylMVzwZqEkSEODXFIDjloRUaE2jmPARw0lHVMx7cv8/oYEgxmmCsBQTSW4SWpK0uSkjSJMXU0QzUNNVbJSVaK5SQWGvY3tkl057CthkMBnSz2E1JxbzQxAuePK9iiND4aAVF1u4j9JTVtWXW1tYRUsdKvHfIptsaZEp7cYO1CzcZ7h1gzACcpZyWzKod9nYPmX12D6tbTMsSlETIFCFUFKuwDofHBotEEpKEVp6BjK5Eo8mUo4MDuv01rIBEvvrwZN7teFEV7QRNEc8dgco7XL/5Oh/849/xd//lP5F32yyvrnDuwlX6S2vMyooHTdFpZXmVg8EU2YjxWN+kMA0c2nlHVc2LDgHrmrOsIds7ZwGJlIKqLBkOB0ynY/IkJ/Ex2UIIsrxFEArrogdW+IYtua+owc33B8CHGCMkOIJwGCUQWZvexde59eeaj37x/+L+vXv8/C//mqtXLhCCawpXMq7LBnIZz3yLqS3eWHa3tvn4w99iyyrCE52nqksmoxGEQKqglecoKSlnNYPpmMOjQ9ppymK3xY2bu2QLy3hbowBjNCrRSOlAxqJQpMF9vRn8MRKl8YeLKCKHdzXWRc89rVUDlVQIr5rY53ePKV7WqTs7zy90Mol2GJHbFggelBB4UzEeDElXVhluPWH/6JCjnV1aCBZzzbBSTGrLbDaLZtBCIpu4TsdgkhAijxIZ/fGMqaKQBjGJUkpjXY1zNYQc4SwqCKzK8MKgjUKl2Te6t/7/ffyLSJROj68LeISIONCqKunkOb1eL0IOQiQe+hDIspQ80ThrqAqHUFlzQ8dgw4u4mUnmXCMw1mG8JNUJOu/ghW4q5DVCBLRMWds4z527H/ParRtkuhN5T942QS3HybtS6luFZZz4kDQH4XwRz1//y1rEx23g5p8hEEI130cM/p0vP2dvb5eyrKiNRTgfpV+9p6hqbIgYXIkg1RqweCUjNlhrlNaEAMPhkOFwxNFoSn/9Ct7Hf6Ok4nTec7ZS1Lyhx+/rtwWdOm66nXreSLoVeFtTjQfc/+Sf2Lr3MWY2otXp887b79Je3uDjT+9w7foNnjx5xG9/+QuK0RFSKWS7h9U5pTdYGzltkasmafiuKB0rht45TGO+On/vPNGTyYZoyGeJTiZ5q4VONI6AloJEJ+gkRQaBcQXLq2tcbF9CJQlBKrwElWTU5rv1RxAyqkDOOW0+BGSasXL9NS4+vsvOswdsPbjH4uoFghbIoGLR28OkLBmXBVUxQwWBrwKz2jKelRRF3Oy9DNRmBkGig6Oe1mQrHaz2CBfot7oYHaiKKf3lNY4GA6rZkFZ7sSEYz0nFp4PtH9aY+63N73cfApUxBAGPnz7ljZ/MGA6PsHVACY2tHcEJpFRIGaiqKcbahqQuo4LdvLJArF5ubW9x7/5d3nv/JyAk/YU+7aTNs4dPufXjFbT23yhQ+DbG8yefga/pL5+L6oZKEUIU/wjCHhd7RIjk8/lqFZHNHLFTxzuzRwaPJ/JMXSNPQXAEZ5DBUA4OGDx/ShfLwlIb7yxVbShrixAZ46MjrPEEqdGJRil9zBnxLhY7hIhJqAiBx883wTt6vR7lOBL7Q4hxpPcBIeYd+1c5r4IgNAtLa7R7i9GXpkEJzLFvgjk0SaDTnNXzV3h8+wt8XSKtwzhwrqYYjShCjk27WKHQ7QjREygSnVDX5qTjT7R+yNvtRmnMMRwXPH70kJWNC3QWlrDu1a8/Fa/2uKtwfK4EQCmkj/PhpSRdXOHi9dc42HxG2HvIzvNPOLy3wNrlG4yNIO2s8MaP3kUkHR5tblNUZeNZ03QxmzPJi5PeTwgBSRRkUFLiXFzXAWKMgaeYzqhmJaZVgYdUQpYkqCTHo5vb23/jROllBeX4Ncw7MvFxgIxCOjoo1q68xtrVNzk82ENUAzI7pFZ9rEiixHpo1pWIqIbSe5y3DAZH/OaD37C7s41oeFBaSkSSkKcpSiq01BFqHxzOBoRM45oVmoPRjF99+And1Q1W1qN1gdMWZy1SKlQSC7rCi4Z7FJi3Z6JAENAIB4VgsabEllNMMaWaTaLH12yCq2ZoCWneYu3CFXR3iaDS39ke4Wyx+ewcny2Awbxg3Txu/jskZVlRzEqeTR4z+/JLRtMJ06KkHs8QdYW0NcpDXVukUggVETyxyxka3zQPMhBwOFMTnEHIFIRuxB8C7SxFBY9wNThDCDIqMc49B3+YR+N3Nv7oEyXfJAFzuFgsKMZD4BhuN08IvKeYDMk7bYRKosRko1aDg24rJ5EaJaAMFXOFN0nc7ObrRqjY+tYybromOBKfsdhdiu3yEA+G4ARYTbfbo9/tUkynyHwZFRyJ9wTZ8EpCOHZRDv7bS5S+ltfTwNbOkqaPp45YoW14701b3GFNzebTRzy4d4diNsVah/OCEGTjp+ixgExTMB7ZVGMJkpAIkkRFDwkRoTNVVTEYjpCqRbe3hHeCYALemzj3p5RyTvuonIUQwLcDvUs8OCFxiOiDZGtMNWM2HjHe22Hz/h0e3v6IxYWcCzfeptU/x8q5c3z65X0uXr1Kt9tm//kTbl6+xLMtxe5giLAB4yrKOvLWpJir1UShBSk1QshodOw888sIIUTYjxCRm0Pk0lmvcWmHrL8EOnKZjrlmAqQS5N02ottBJVHAIJKRZaxGmu+WGBCYwyKBxuzOI8iWV/nRez/Fz0YcPHvG4PoOi6uXYyXQCYy1FFUkMOdpgkKwNxgymVaMi5rKOLI8I0hBUdU4E8i1wPuS4ciTkdFJJQZH1l1kcnRE99wG1h5QTEbky1Gt0Ml5N+6rlb/ve7wAuTt9+ApodfvIJGVyuM/R3jazSUGwYOt4j9i6xjUy6LmS4CVlbQlNRzYmXzF5VUpRm5rbt7/kRz96E4nEC8mFS1fY2tvmhrGElAb69urGg9ufsfN8h3ff/3N6Syu0ur3YtRAaJwxSnHgYzcfxzt/sP7FdQPw8V4RCxHXtLdIalK8wkyHjzacsKs/iShdXzihmNYUz7JmCaVFRlYbKg5WarN1pII4uiqQQO9vzKCcQqJ1lMhrR3dvDTscsLSywt71Hb+3KSyvNr3oopV96Hsz3U9t01HpLy+h2m/HAI7TClTVCx+6QlG22hwVBJ1TOUTf8QqU0WmtUQyqXIaIpvPckSYJGUhnLo8dP6Cyu8M57PyXLW698Dk5f92lD42OkZ7M3BAReJZy/doPJ4RGPPv47XFlTHO3wrJzi0y6vv7+BlnDh4gVWV1YoioKqqiEEtFK4JkEOHOdMx4nZnGdnm4KGkE3sIgLWRqiUcw6BgRDhjLG4QxSA+j3Mel9WUHxBPKZJEIMQ4BzCe7T2eO0ZVY4rN3/EZHjI0dZDulfeJigdrSqCaDpjMXGh4UQ+ePSA3f1dKlMzLWeRtuBsNGRvlPH8rEQ0iaJ1Dp1kUYVPClxwPN/a4ZOPPuFP/6RFsqSxRmPqWGx1zqJ00iSMMiruEeMO38QtuJhYleWEcjZgNtjjcOcZ44NdvLGUkxGmGCG8waBYv/oGP/nX/46FtVY0Wv4d76mXJaFnu0wvg1VLwTHU2AeYzCoq46CYUE7H2LLAzkrsZIp00Ek0SImzkebgjgW75gp4IsaT3pMACE+Sa1qZJtUJaSpIlUe4yMmyxjSNeoXSKUpF1dP/kSj9kY3mtjvhdswxm02C5BqcfewOOAZHA5JWG4dqkqRY/Rbe0mvnpEpjrMN60DLKcyoBWsomLhW4oMBHfwAhxXFVo9eS+HoKcgGUIGiw0qFlRr+3yNbz51xfXI8wq7i2Ty6iqeh9m3foV7HIp2bp1NOc7cIJEetuNJwkGrXA8WDAJx9/yHQyikRU77Gx/NP4rhC7Fz4gpIpkVB8N4WTDo4mwhFiyqKqS7Z1dcp2TZDneg3SxEuIFKJm80DF6obUevgZn/gcMLyMcKziHNzWbTx7w5N5tqukRvVaHTrvLG+/9BZdvvBaNdmvLvUdPSFttVlZXKcdH2Lrgpz/9KQuPnzD49QfUyCjcYFwjZpEcH4Jz+IUx9njjnF/PnIQ550FEQ0yJzFpcvHaDrNMDBAqFFOqFJFJKGf+tThuoYjxW58IJ3+UIwcwbmEilCSL6iiRSsXDhOtffnfLZB7/g4NFd2v0VtMjwQeKFJcXSEQ7jK4rZDFcUTAZTjiYltQ+0ux3SNGc6mmKNhXYLUs3OtMa7io1uiurkpOWE6cEWQyVJgPHhAYsXbaNa2HQ7m9f40m7l9zjOcgZjECBYXDnH6vo5BrtbbD6+z/7eECljtzYIqGxFOS1pZSndVLPYWWTrcEDZeHzF2lGj5CRBe8He9g6z4YTWao5PE3prKzx5/ohQV5B5wnfrTfyVcfPam+zujfngVx+SdXJuvH6djY0LZHmXoBOEpFHTdA11eU5sFsd8zPl+HIJAIwnORNiwiNVTV4w43HnGzpOHjA/20NUYX06pZ2N8WUdelncMh1OmtaMSCqcU06pG6YREx6BQC0WqNd1WTp4lOFtRO49SgrIo0CEqoFVlRXDiWIhiLkX9fY25lPrL4EnzwqKVkql1TKqKXAV0qqiMRSiF1pJ2K2daW4ajIWVtSdMMQqCVt1E6hhzOR7GWqraxM6nAO8vB0YD79x9w4fJVNs6df+XXf3atv8hnied4E27ihUZkHV57531UKLj/6T9iBgeEckI5HvHFb/6O196uWL9yk9deu8b29jZFUSKauCMmSHP+zIuv43gfFooQPK7p3wrfwPdshLATDABSqohIsA4hXYTefcNrP/tef5109fwMmZ/dpq6ZzEr+pz/7Cw6e3eP+w0f8aGGNdHmNWiisSGJHw4FwjqS2jCZTtna2qeqa4XhEVVXx+aQ8DnVC8DhnjlXZVKLxiOhZaW2UWneOJ4+fcPHCxShSk2iMkWijGsh5LJwoJfBIfFARZusMwlaY2YRiNGA4OOBwb5vNJ/fZ33yGrwq0DGjhET7OsdcthnfuMqgEV167Ra/X5a2f/+nvPK9nETqnC9EvqPSFORT3hD8ZeQSKpN0hbfcoZpN4HwZx7B3lXaC2gdo2nTkhMdZSm4heUlKRSI3AkiiF9DXtNGGxl5MqSKRHJdF2Q9qSsihQeReCpjYgVUpDxH/laILve/zxJ0pf2ejncKmvysQ65xgMx1y4dPXYqMx7T6gLpClIhCNJFbO6JAhPwKFlIMgm9gthTpOLK937SMBDUs5m3P78N/hiwtVLr5MvrSJ0Th0U3gsWlta48/lvuVpMCCrF6Qxx6jW+DMf6bc3NV39+8pwve1yUBZ//PCrD1GXB48cP2Nrejsp/dY2xjto48IJUKVSSUZZlNORVUfmntg1O3jmmVUkIgSxLSBv36N3dXVZW13EEkgZaI8WLvd+z7/H8Ik6IsN/OvBkEBIurZjy+d4c7n33GxuoyN996hzzvMhhO6S6vI/IWwdQEd8CsqLn1o1tIJZlNhjhboVPNYDgERBQDsR4XAmIOoYrFbgTimI8Uq4kcb6JzIn6sKkZYphcCIyT91XVQkZNywkviheRq/lnKecX0tPTFdzfmnV0E8RALkWybao1pddi4fovxcJ+t7aesH27C4jpB5uAsyjuoS2bDIyoblQFNXWFrQ0BQlxW2shEe46EsDVq1CCLlcDbDmBm1F6yIFC8Kdra2yHPN/u4+5yuLynzToTjpBADf+rr7NkeUu5CoJGN1Y4NHd1OstThjKYu6QZoEnI1VfWc9k9EMnTk0EExN7U1cV8RKbUDhhWI0mDAeTeivrCFD7DyVxQRXF+CqCD95hWNp8Twb525xMBjydPMRn3z4Gx717vCjH71Lb2WDNE0jnFXAZDgiBE+WpLjgaHfbICXWSYJUCJFgG5lzGQzC1YwOdrj/2SccPH+CK6YEWxFMgXfRlLhwnklhOJgaxsZFJS8fqGyN8yVaayodIbItneGkQNYFraUOnVwwqyVeSyQeLWLnUoSAtTXa56eS4Fcn93Y2CJ7/7Oznk8cIVNamv7rO0dYDEI5Up8zqKbaO56GW4th6YO6Zk6WxKKO0oqoqnI0FSiEEZVkSEhX9Bqclw+GQne0dlldWX9k8nB0vU78L3iN9AzsXcd0JlZB0F7n+3l+gO12+/OAfONp8iC1nFFsP+Xw6pphNWOiukqVJFOeZn0lzL8BTz/Hyjk5zron4vM45ahP9u4KKCVJoeLnOOZT3eBF50990zF/DaYQGcCzfffqslQ2HajwakaQ5/bWLtNttxtOCh3c+4833fk7SWsIGgSUajeOjlP6sKJhMJhRlQe0sNnic9cgkJUlSpKCB2MsoCjLvrkkVE7QAngghG45G3Llzh+WVZZJUo5TEmDpC+K0CDUHYRtRIEJyBaoYZHzLcecbu5lOePH7EZHDEbDKiLqbYuiLRkm6nhRAanbfIuktcuvVjVi5do7aNANU3mNfTn/+5x8XzPlbqThBQESLc7i1x7fUf8YRAsbONqz1OVJC0MKGmsBW1C1gPJkQ+3LxYpKREIsjSjF6qETUstRRpqBFVSaI8ihypwIwPuP/lp2xcvUmeSGaFIQiNCw1i6od5HH5n448+UZqP01VY4LgKf7pC66xDBCI+01swNeVowOH2U7afP+bh06d4U0QonojtciUEQc8r+zK2lpvqvm9wyAFBWRmePtii2D1i+OwhFy9f49z1t+iuXYKkRicpWZYz2NthvdXHq5OE5fQ1fFcB21erRvKF351UP0KEnc0hd95iTcGzpw95cP8uPkBpLLW1UZTAWhQalabELRJ8sxHjY9UoBusBhMQBtfVorZF4DocHLG+sNolp9NORQjW44heTpNOvd95R+lY5XUAwhkd3v+SLjz/mnbffZWllDdlqAYKlzgpKR3nWRAn2Dh2d/iJCJ3hvmIyOkNJjnWE8HTeqNkTTR9XMeYMz8CFq0xwHTSGckns9eT+OYWzxIUyLisl0yuLiUvw9HCdGL3STZBQNaRjszL2wWt8x3OVllUmCwiuPSlN8p8+Fm28yGh8wenaXtbyLSAWuLDjc2aSeTbFVTVFXjCYlRRkd3XWSNgm0o9Vp4X0S78FgAY1RbQamxo0sNpSskJC7GdamJNOKqqjIu6HB9sdgdQ6t+KF0k86O4+JJo9a30O9HeOfuNqPDAUVhEEphvaGuDfhAWdd4nZHpSOK19YzaliACKsjocxYyglRUruTw8IjVS5dit1JIjIOyNmgfUK9a9c4b+r0OG60W/aUuo/ERTx895tf/8Ev6/R5LS33arYxep4WpCjY3n9HKMow15J0WC0vL9JZX6SysoNIOHkUQYGZD9jcfcPfjDznYfI72sSvl7AxrCmpbMaktg5nlYFwzcRmVzKjqaERrrCPRkjz14GPC7lUNSUIeFKEKdLtd2nkH6RyLnTbUJRA5TISz8/hqopCznZOXFpzO/D6EgNSaq6/dYPD8LuXwIEI4VUZlarz1BEuUU/ZRITBJEkJoUAMuBn1FUUbIXZbiQ2BalLTThEQHZtOC7a0tbt56/ZXMw+8yYkdSNCT+cFKIQ+CDxCYLbNz6GUmrzxe//Bs2H97GTEfY4R6f//ZXLF5/j1YrP8WjC9H/J/CClDOcOec9iOAQ0iMlKJWiJOA9xtQIkTYiS6AbdUsfXPPxze+jl4kfnU4aT6M05rLSw+GQ/sICSR7h3Dff+Slf/Prv2Hz0mPXLGTrNEUphCDgVMFpS2igV71wUdVBK43zs6ksRYyehIgxdSt10hyPc38/Pd+ewGIQUPHn2lItPNmi10qaDLFFSRUhiBLHRqC5hZmNmh7vsP3vE/S8/Y/v5E6wx2NpENIFKUHlCe6HP0sYGRVnRWVzhrfd/zqWbP0JmbaSMsc/vM152nrysYPHVx4AXirULV+j0++xtbbK/s83m8032797DJAqbQj0rmRQFSIXU+jgVj6JbgLUoX9HPAGqCK8HXOKFQwSN9DeWIyfYDZkc7BKDT7ZC32szz9R/qmfhdjT/6ROll7ePTm/7pJMDWNbkSdDRUo322njzg6f3bDPd3ODo6ZG86xamcRCUY23gxJSriYRtlEt90oTyxAusAAtQu4CuBFCX20QMODrbZevqMG7fe4dzNW8j+ImsbF5hNp5FA56NMo5Ti+DXOqzrf1jjpvkCMlo+/iSX5Jhlq9vZ5YYMgJKFh2Dtbs/nsKb/59a9I0wQXoqx1VRmsdY1iTORqFWVBVccqtw8B5010PA8qBu9JAoSoyCKiv4jznjxPcd5ivUGGFEXDDJsfBEIc85peuLZ5IvEtJUvCBWajEfdvf8mlS5dYXDuHavUIWqFU5ACJELuV0im6C4uoJAWpsHXBeHhAkkhqU8dqYPPahYj8rKhid7pzKF543+dfCxHNWE93GSMMQuLqmul4jCAgJchEoBL1AjTx9MEcu/pxnsfDEdZ9t2IOcIL9P35vGsiFCCESeRfXuHj1Bpt3f0vnaI/OsmS0v8XR7ha2rqitZVzUjGYG56Pak04zhBRI5dBJ7IwwM9S2AqHwKkMmGWWw0Oqju33G4xGVrQmjGZNZQcdZlI9yyAKJ/P4QUC8dZ4PZ+TAm+kWlqUYEy2w4whYzTB0QSlNZh7UWLaKEsJeKaTkhmAkdWdFvebSOAYUPliBBEVBo7HAHWVxGyk7DZTPMqpp2EC90vF/FmE52WD+3gc7a5FrS6nRYWlznYPeA0eEOm4+eYG3NQrdNogXj0RH7VYnE43Fk7ZzF5VXWzl1gaXmd3vIalYPf/tPfsvPgNm42QbqAtWBsTVFNmRRTxmXFsKgZVVAaicg1pfeMpjPKsopFNwfeGXSWUlQVlpqk08G52IXws5JWd4XlXhdjPVmi8aZESX/c9Zsn6K/Kn+rs+Tf/2dnPXzkvgeWVFVZX19mcjqirkmnpKaqAtiXG+sYjzzW8whhUex8Fe6RQLC4ukaYpLkRD7qI21NYjpKSuDcPBkNls9krm4WXzcvb7EKJYEzKKwojgo+yDc7i6RsgEdJvlC7f4yV/26Cyf587nH3N0sE0xHPP8008xzqOVoqwqnIvnnG8ST+9DhJc1sMs5YiA4i8ST54osVXRaORcvnKedZwQfPQsFUUXUN+bmWico4Ru9x999vIzb+zII5unHBynp9/tUxRREQKQdeutXufFuzSe//ie+vH2XVp6wcWGDheUVWourJDJDCxA+YMoKZy3tLCd4gRQKGhhwXVVNNyTidOY4EonEe3tcVKy8w45HfP7Fp6yuLsfOctONkkIBafQDqgrq8RGD7Wc8e3CP548fMRoMGon/BJFoltfWaS30MT7QWuizuhEhzWvnL9JbXIYkQyrd8NF/d8PZs4ig+Zk9H6e/jnB4jmkix3djo2AbpCbp9Fm/krOwsk4ZFJMvbjMuSsbTGaauMC4SGJSXsfgnFaPJhCAlrURjpSdRCamOxbFEJiA1QSsEEuUdyhX4WUQOZOsXyfIuouGBfhcqwj/k8UefKMGLm3383p+qHJ8EmoOjA6Sr2Xp4jzuffEA52MVODpmNx5SzClNZ6iRgVVTyMc5RmxqQONdk/D6A8I3+fkAqFUn21qJTgdItjPFMdqdUky/w02cMDp/w2k//inZ/if29HepyRqIyQpLi/Yvwt2+1oyREg4ONmGu8JzSiFCLM3cmJzZ4gkCH6PwQRfaFwNbubz/n1L/+JhW6fNM+oHz3GVIbQSFeHIKidpZoaqmp2bKQ3N7wUUkAQBDRaysg/shWBFAvorMXK8gYeiSW+LgWkQsfKkxCRoy2iSlCDioiV2m+ZWxKs4fH9u3jruHjtOtlCH6mySKiVTZtc6KYdJGn3FlBNMCBCiRSOPEuZTKcEAkmSMDU1Vd2Qol3jbRMiFA/vXkj0j3tHp6tPIV6n9z6qgLnQSKue8q8g+kCIOYl9XmELJ7lxcJatzecsr6x8a/P1snFWhTBehwChUNLgZUBkLZYvvsZwf5vd7adcbuXsbj1hOhlR1DXjyjIsPNMaUCmiwU77Ru7YBRBNUOJswFU1iU7jNauUVn+V89eus7v5jMl4RG99g6TdYe46IcKLvKQf0qFwOnCZG/EGawnBIHAR0uVqMAXWRqWnEDxlOSXTGUEpnBuThoLVDqx2NeuLbVpZAkg8EhckiAQlErrlFuOHv6Hu9ml3FuioGmFmCBzev9p5MUc72HIG7S5Bp0hhybOMC90lLl69gTU1BE+epbTzlNlsyujogGKwTzEbYesZwdTsP3nEwdNHtLt9aid49sWXUNUIn0RT0RCohWBnMmRSSw7GgcIk2KBAaEQdBWUUgURCkiYkiaaua0QjEGFCoHCOtKgxRY2XNShJp3uJYfC02oJQ1STCoqSOVfJGnv1VOa2eNjKf31e+2fDn/C44CermwkcQ0GmL/toFdre2EJOKYB1CabxSFEXNrCqoCeAjVBsEXnicC9G8VEkqUx0TzLXWuBATBxcCVV0znUxfyTycHS+D6/sQzTREiN2g2J2wPH3wkK2Hj7h4+QrrFy7hgiJbvMDrP10gXTzH3//tf2G0vc1wcAAiFnWcdTGQlRItJUhFkiharRZpmqJ1vJfG43FEGXiLVhKtIj/E1iXTyYS08cDxVYW1Du/B2hpsilaA+GaVnpcpxH4dP/MkuRYs9Pvc/eITbF0h8hyftFm+eJ31nU1++d//E6Iesf/Y0W4v0Fu7zKWb75H4gCLg6ih8oqSCUMcE4RQ1QsqYXBtjmp81mrwNBAyhsSEm2Hu7e9y9e4csyxtETEyk6rrCuYryaJujJ3fZfnCHg50dfBDkWZvu0hpZq0NRO7xO6G5cYvX8BVY3zrHQ75PkbZIsA6nQiUKKmJgKmXzj+X3ZfJ9FvszXWCDGAfGMtjhjoiBP8147L/AywQrFtDIkScrKUs7u3gFKWhI99+xyWB893+qiRLQyZJ5yUDhKBy2lyLWkm0m6aRaTdSlBpiStFgurF7jyo58hdRsVBFooBD+wKuJ3PP7oEyXfZP0x0Aw4bwm+yWpCY1ToLcEWHG0/4vDhHSpjqaqKtNtHZRlq8TypU3S84MGzHcajCcbX1E1XYA6ZUkpH2d0wJ1nHm937WLH1QlEFiRXRIPSoHJMPJ2RPn/K5+++89v7PCCEwHU1ZTHt4KRtohkCoOQzoW0yUvI/clPlm2LSOXIP9Co1aTUwA5rjZGITaqmB4uM/HH3+ElIoLFy+xublFUZTUtcE53whliMajBeraYK2hrmvSNCXLMuaQR+8l1kTvgjxL8JXFugqJRokW+AQRdOwyBYOlgQp5HXkJTYArGxxufLUvbvh/6DC25Ghnm8uXLpP0FpFZThYETqbHVZ8QAiiwBEKiECFDOE85rJlOhrRaLQaDMcbGoKGuHWVpCcKidZRv9s7F90bO8emNmWYQiBB9KebvmQ+xqhkTrICTgtF4iDMl3qb4NIcgI/1Y8AInKSAaBSNPqGcc7O9w8d23/uB5+ufG6YrlSYUtRJhAMEgJQieo9iLrV27xxce/ZPPpQ/b3tiiqgklZM5xVzOqASttR7a1RG5MyOtUHIajqAlt5CJoQJLau0a0MIaJMv0zb9JY2OJrOWFhdRaYRouBDozAZGoJ1YyJ9Gor6fY24pczli5tCBp4kEVgjcE6gpUYLQzc16G4fJzK29wfUZYlKodvvoXRKTwUuLSrWu5KFtiZRChGSCNUQCqWSGKRwRLE9ZaZTBlLRdpKDZ3fpr54j6S2/0uuvyxl1WZK2A0pFaI0IscIqUolqpUCE8jqt6LSX6a4sobkV93hncK6mnE6ZTiZMZwWhrHjzvb9gOhhhakPe7tBb7GOF5cn/5//JsDhkhsJqgfcyqnFZCwTyLKHTzmJ1uTHX1HhUlmC9R+CojGUwqenlCaqoyNOKxc4CmXYYq7HOMXekO5u0fNdjzhVEnghf4KM09onCW1ynztvjRMl5j0PSWlxH5wukcoSiQEqNQVIjmNUVxkWLa6SERB5DtR0KLz1K6qjYOfeIEVHK2FhDVVWUVflK5uGFOWnmYw7vittuhEBLf5Ik+RCwteHpvdvc/fCXPP28w7/+9/8rKxevUZNgkhbjoDkoPRMLQmV458FLsrSFsJbQPE+ElknqKvoL6eSkqyQTBV5SWQdCUhuD296nKB0X1hfIEg/GYmqDCRDqAtIUKzS/L9ftLMT/67lTAIFetwdCMzwcsHa+ixWSSqZcuPkWt/a2OXr6OWl1hKsOOHh6wNHhE2R7icRNyXWb0tbUweF8iSDB+0Z3NISYSAYiZ9yDFh4XbOMLnsTOPw4tJUmWsrm5jUTyxuu3WF5eotQa4Wome5tsP7nPcG8LBSyurNBdWiNp9SmdZDCdsnDxApdu3OL8xct0e4vohu8kZISoRyh2U8yAF3ju/2fzeXoez6rxvgzyOufEzWFuzkeYYjS5dseWAt4H1tbXuXXrdXZ3dymKAuc8dV0jpSTLMiJUP5o7S6KIjAR8ojC1YSYlSgo6rYyNdIHzq+tMxxNev/UmGxcusrh6jqy7hG9iLOdDFK35FzT+6BMlOYeABwguvtHxMJINObxgMtjl6aM7bD19ysXrb7Jx8SpeKEIQOGdwVUldlXzy5V0mj3awQmG8Q6gEKdUxZMK6uIikShon57iQvI/u5GLOqxEBKxVWdtFLa4x1jjgcoD79hOXlDUaHu3RWllFeI0Mjx+nnxJVv7xCVnuNOSDTACzT29LjGYG5uMBvmkubeEcqSzWdPuf3FlxAEN2+9QavdoawfHydJYY7Ta/gvAkGWZVHNTUTlu+ChsgZvHJ1ckiSSgCAXAVkXpMEhRKyYe1PjtUYpgXXxxSupSZBoKRqkYHzdXn67flPzMZuMGQwH3Lh1izTPm9Z+M3/hJCGHk4RAqTlXLeCsJU9aDA4G1JXBNHKpPpwE4nOBhvlmGr1YTtr18TnmCbNAiNB4xhBhex72trf59d//go21Na5dv0F6/jw+6YLICCGJh5D0EV/vAzjL0cEBqdJ02t1vfd5Oj5cFglJGGJeXCU4IhLQgJWl/jcWVizx+cI/DwwmjEo5mlmnlyNpdltfOs3HxErt7+xweHVBbAyEeDmmaIRtzW60SSlvFoERJsjR6mWVpTpok3LvzBVev3oR2D+cbTHdwaGRcGHMO3fc+ToKT43lsChxCaLTuoFRG8DVKlFxYu0qrv85oUjBNc5zzDAcjlPKkXYmUGbWzHE2nkW/pNKedfKQkVrKFRCYCocDKNuNKcu76z1jqvlqyva1rvK2RBKz3aBkTQy+iwlUs9MS92OCxLgY3NXNob44EWq0V0kXHYmhMGH0guJgABCmwAQ6H+4juEsX+ECvivFjvCASkVogQi1+dPEPgcLYmESlaJgilKOoK70DJlGlVMCgCWgTccMhy1iFTAislNngCNr6PfBX29X2N2KiO9/28c3myx8V9K+90yDtdhmmCTFOcCUzLAi8EUieYusYFj3QJUilc0xVQId6vQtNYXjSd3AZh4F2EXZm6fvXXDQ2kKxwH6yfwp3mlH0KIEKRuO6OdOiaHT/j4l/+Nn/2bf09r9SJHgwEf/PYjDkdjnJdE1bJIX1ZCAdEkVkrZSHuLZt8XWPti4Cwbrg5CEXygKCvM3j7l7AAZSlppRr+3hBca2/AHnQcpvlmidALtfrGbeHqcFXUIIYrELCws8uzpUy5euBB524mG/ho33/8LnmWKgwcfATVZqLDVNsPxJnaa0u90cTLHa0etEqRIm5kOzdkYC9yxYBVwQRGERMoAwaMBLRzKlig0vXbO88cPqUZDbr52DSkDk8Eh4/1t8Ibl/hILi8uQtDiYFJSTARcvX+f9H/+E1UuXaPUWyLI2CoXSDeLl9P0R5DeOLV7WoZsjAl782w1XvokB5r8/nutThV8fHM5bptMJh4eH5HlOt9tlPB4feygKIiw7hEa92XmUlFjncD4gk4yqqpnOavIsx2rBuc4y+dI5doaPyRY3aK1cIKQ5NoTjHtKrFJv5oYw/+kRJ+NCoVwe8i8mGCAFswexol6d3P+VodxOtJRsry1y79SOETjGeKEZgFN7DaDzhk9t3KZ1DaI1uEBJCqMg38XN4AshGmlMIiVLieHORgHcOKRVeaIzSXH3n55y7cguqCe5wh4PN5zjhWbt6ESETnIxdr2jy5eF3rGL8LkNxiqAaYnVahgiZEyHeGsG7CIfzUaqznE158NlnPLj/gP7iEjdu3CRvd3DeRzNUTwMD8Nim0+GbzpVWCWmSNV5BsRpSVzWurslCoK1b5KlgoaXptTStLMqCCzPAld14sEpBICPIFC8SDKIx4nPIRrJSNOpduqkuH5Os/sAxOjhkcXmJdr+P0hEHjYxKhyK8yCcSInKJ4tM6vLUURUGn1aWoKqZl1XBH/AubJ3BMkp3js78CHeUELhp8hPBZa+M57j2z8Zg7n+3xVAuefvkJV996i7d+8qesrFwGIs4+4GIO4AOz0ZCH9+9x48YN8qzzh0/UPzNepqQ4PzS894jgUL4mhAolLOc2znO4f8Du/iHTwlAYiUrb6DSqhD16/IiyqqMcvbWEEAsSWkU+TqoTrDWkPkXUnk4KbW+w0wOstyx2UqajIYODXRaWVnAhxMpxA4p/lRX+32XMCxcv/jBKx7Y7PbJ2F4fAeEjyDll7gWlpEEmK1lDNCtzM4ApHqCtWFiXtFkgsmYdUS7JEkieSPE3JM0WeSGSe4ZVmWuesXb5Bt7fU+E29umGrinI2pR08sumSCiFQjaCJFCJ2R+Z+Ms3L88FjG/GY6G+kcK6ByuqmW68j5M6FgHGekKR0u0sE9xThJcJ7FAKlNUIqtIreZUJKUq0QicInmlSl8e9JmM4qhNR4MkZlIJeONjXVdESedEBqaheTLPDf6302D9BO/eSFfSdwEtw573DBk2Q5Wa8HSUqQCustDjDeEZRAJgnW1DhnEfUMjaLdamF8NE21SXLMy/HOoVPVvKdE4ZrvoNj1TccLss3SNQU+gfMCgWJlqcfiUk7qA4Ot23z6QcrrP/tL7nx+n53tLYyJXbUoDiOwziHnypq8CHWTUkZxgzBPQNSp16DmKGucCzhXMUKghKUqHUuL60itKKuCMJ2Qtlqk6pt3wU8H8GcLdMfzcAayKQScu3CBT3/7Ibs7O6ye2yAh4JSkv34JJQLW1Bw8tvjpDtpVdCSMgkFbRy/tUgqJS9sIkQEWmuDeWBu7x40/kHeqSZAqlLck3tFOA52WotOuMZNtEgQ7m0+YDI5Y6C0gtEQmPdpZiut02CkctqhZv3idd6/e4Nz5i3SWInpIzIWO5nBA+dX5+X0SpZdx/l4mNvXCvAaO190c8eMJuOCpihnPnz/n0aNHx52kyPeVDecqxkVVVRG77NEIWyhFEgJJniNUgs40tYWZseSdDt2FxWjPohS1h9D4RorgcEQ7nB/CunzV448+UfICHB4bLCFYpDe46Yhnn3/As4cPkBIuX7tOZ3mN3dEMmcQATAaHFh4vAhbP1s42B0eHOB9bj4iGMB5OB3+xHeqggcpF7E4IURhBBBETNwJeS2oPdx9vceG19+ksLqJWF7EisL+9xeGjB5x7LY8q46SEoBBwLPX8rQwh8ILjRSiCp5xOSLVGCB9/5h3WGGbTKXv7e2xtPudgc4srV65x7uIl0rwFQjItJlR1DUJgraOqSqxzKK3RKrrW0yQTdV0fbxLOObRSCBmoyhkyFfjUI31AOUtCYO/ZF8wGO/T6GyytX2Zh9RxKRohQECck6KPDIUjNwtIKSZJHs+HQOKp8C/O2+/wZl69dI+t0GulSgZe+6VycwXOH0Kj6xcrXcDigLg1CSKaTKcY5jGvuFThzWLoXNtDT1b2T54jdIB9iYhrfrIZPEALWGqq65Gi3pCyHDPZ3+Pmf/lsuXXs9cnoaTpqpCu7f/pxWlrKytoZutf/gefpdxum5mid8Ini8mTHa32Y62Gc2PiKUhn434/L5NcrZhMpYrEwJSlOUJTZAnucYE1W25rjsgCDPMxIpsXVBL3WstDIuLuV0qwFmb8AMh7DQVTm7W89Yv3yVTpIhXZTtDeIHJgvedHtPulsNdCoEgg+kWU6n18erjDpIgkzZOxhgPKgkxVsXD0itmZQzikPL/kzQbWu6Wcb5tubShQ2WepDIAiEN1tZUpkCFDgu919h9PuTW6joyNSBebcXfVAWT0YgVH2jQMM09Lxt2VQTizA/yuTqZEg1EFR+93ELsaiPFMTTb0wQhBHyIe9LqyiqJUo3BtIjqXVIShIw+LloBEmOaAofMkDrDB0eSpoRZRWV9FBFxjlHt0ImlLKZ0Wgk6bxFQDZfzxUDqVY3TQdvp5xbz/cW7F9ZpLAo6gnNMy5LD0YThtKS2nqqsCbJRm3QBqTRJiFyUVHiWe10WOl2mRc1uXVNVFUo1cMbgkSIiMUSEIZB8j35ScKabcorf2YjKI4Sk3WnRamlkHhC25PHdT9ifljzYHlPMZo1w0cm96HwgkRHW6puzyzp77EsUmrV8HFP4WNIK3iGVjgISTaGkqi3dXNFpZSwutCnHBxzt71J5Sau7wNWr177R9b5MfW8+D2c5m6cTKi8EFy5dYnB0xH//27/lz/70Tzh38TxJiM34ZHGdqzffpxhNmNmAnezivWGhnTErPN4Z2t0+clozLeoIEZOSREYopvOWYA2qUcL1Zor2MxZzycZCh+WFjDz1SErGxYyRVYS8g263SRdXyTsddJajpKDV63F141zkHy2v0m53SJMUqeN+IKRoONoc7xfzefnKPfE7jtPr6/S8nv36K4899TH3N7POMRqP+PyTj3n44AHOzU2JJdbEz0VZUpQz8jSNPlfGxiKSa5A9rRydpNTGoKSi0+uC8yz1+/R6XbSStLO84cTN4bkNHFKcWIz8Sxp/9ImSc6ZRjzFQF4z3d/j0l3/PbPcp3eV1br7zM1YvXuP53h6616FWbaQz+FDgjMGUBbPxkJ3nj8HVza4nCaHBXJ+CQUkZ9dhCmB8uMWkQDZF+rm4kg0eEGMxt7+wwOtwh6VwgyXusXX8TU1se3/2SAJy/egvafYRMCEHhv8Ub1M9hY6KpXBjLkwcPKScjltdWmy6SZzAYsL29AyGwtrbGxfd+SqvTJW13QEiMs9S1YTwcURQlRVFgjCHLM1rtFkkSscSmcqRpjnOB6TQSda21eK2ooltkJKaPx1hb0E4lnTIjnYwZqUN20x3yp89YvXiZK7dep7+yigiKqpyx/fwpH330WwKSv/x3/4ELl68TdAqoryWkftMxHgx57Y2byEaKWgjR2GV9FaYgmoNUEuM2Wxu887jGAC4gG7xxY4h5irdzump1eoOd/z4mSb5JzmLH8fjxwYEU9Pp9qmFNXReoYcnBg5JflzOqcsT1H72HpIOzNVtPHjM42OPP/+Jfk7bahOTVeeO8QGQV4K3h6f3bbD66Sy4j30OagnbwXFlt0U2u8uWjLfanhlqkHA7HUY6+LEkSTZp2IUT1KJ1ktLMMTEU3T7i21uJiP6WDR9ghVVBQR6im1Z6nD+7RXVrhrXd/BioBTldzfyiQqNP3wfwwdXhvMC6S6du9RYLMCLKFMY7nm7tRAUqn1L5EKoESAeE11ilKEjKfYp3E+WjIWJRTJuYIYyuKymK8IuvUTKsCJTIe3/uEQXHAxsVbr/TqRfDUZdFwTBVNT4kT5UQR9xAxn6nY0RUudpsDIRqb+iihTJAIDzQclOBDDCacR4RAf6mPUqrhUjYdp+ZtEEJjaot3giTRQJSJxsTkovYWZBQTCTLFCsfEzMiqilxryqombXVwrkFTn4EzvYpxtlN9+l6fm08fc+EacZ+6qpgMBxwcHLK9t8ezrW18EAipcc5jXOSgCqnj3hQCrq5JdMZaO2Ehh26Sg3fsT2ZYW+MFkatE7Apqqei02rRfUdHmnxsvQFyZ3yf+mJectlqoJGk6m1AWU559+QUDk8auZVMEQhKlwE9xe+bIA+bogBChwVqfIAp8gOjaHvByvufHvyCCRwTJ8mKPcnTAF1uPqWqL8RKZtjHTye993WdFHV6WPM2TO6EkCM2P3nkH6zx/94//xKVLF+jmGQudDi5I7t99wvP9EmX71NbiTImxAa09i62cia0JrkJp0KrVwBXBuRrZdDSFs2hvyXTN+aWUyytdlrttpDDgLd5UiDxF5T2SpatsXPkRaxev0V9cJs/SZi23yFs5SdYiSbN4HQ3kMyZJ0ZnuuKPKCSTxq9za323MC59fF4e8LHGaw14DHBdSnHOMJxN+/etf8+DuncabLMYhs8Z/rK4i/3s8GTG1liyJqApvLc57Ou0uWifUdVSE1UrR7XRIsxznA/sHh6yvLFNUFePxFOti0Zp5J5Gm0P+KFU+/7/FHnygJ46CacbSzyfbDuzy/dxtfTli9cI6bP/4zFjauU0tNabZZ6LbJ/Iyj7Wc8v/85e5uPGQ4OOZyUHMxqEjx10zU65ncw30xPJB5DiKTwxnM7usU35Pn5Qozyooq6Knj8/C79jRVS0SfVPS68dosH9z/m3he/pTaGyzffQeU9nJBI9+3doMeeEA1JT2nF1WvX2X72hO2tLYw1aJ2QpTlvv/U27U4HiLADlSQIlUT4VvAYYxmPx9SNmWCapvT7faRqoIlNy9h5h9KKLM8wVU2aJCRZCkmKi6I+BOcJpaNynqJ2LOQZaQK6ikHx/sEWO7uPePPtdwjGs7u1xeH+HtPRkMpYfvuL/8bO1Wecv36TS1eu4vGNTOgfNi5euYZOWydBABADpDl6+CTQiPA4YtDmLMVkjPNQVjVlWWFdnA8lRfRhaYz05onDSQDzVS+fOY5/LhEeeQSBRCukliRpwjvvvc1sf5NnD25HWOdszMHmA37194ZpZXn93Z/jignPnzzm1utv0F1cRKZJw8f57sfpgzcGCY66mPL47m0Onj8iCQ6FJ2FGcFU0IUy79Lo5YwtFEauwWkjKhriqlSS4KIXtg2Sh24VgacmMlW6OCgWFrZFCY0OGlAkOFfkUZcntj37Lxvo51i9eBZ3FYsaZIPL7HKHpJs07qBF7bvG+njcwETpDJR2SvGYwGDIcDjB1jW7EPJx3pEGA0jgcOtR0EsH5lR79XLKz+5xubvG2wqNpt9dZ6y+Qd/sk2uGtoR48Y3u4z9HTbfi//z9e3fV7QTmbEmyNSnNCNB+L5V8VuZzudIdcRBGUWLTwQOQ3eBmJ0t47gouQOhEaSHaTKOEd7W7OwtISzjjqOooLCGOxxkcYcRqrstbHzjUOqmCRIoBI8MEiVYRFegSWjJkNtK0lnc1IOj3EXEn0hf9e7TibLJ18f/JKnHOUVckXX3zBwzu36fX6nL98if1Oj2lV4l2Flppcp1TeE1BIIdEh4GxFW2u6CSwkjlQLqk7CtJaMbUwopRSxIyglOtH0ej3S9NUaGs/nYj4PL3bZ4vuLiwmKFxaEJ293SVt9pqqNyBQkNeXUNTwQSQjRbiEQRXjC/DlERJfMoV2CuW1D/H6OvFAyafYeSczjXfMeNYISDg4Oj5iGEi0cwUFlAkEVDPY2v/G1zxOCs8nAC+fP6YKgnHdfJCLJ+NGP32dxZZVnTx7xeHOLYjal3e7R6fR4/1/9zyR4draesf3kEbPRADMbUflAPZlGxEXSqMQ21yibKRIIpA/kwXBhucvVjRZLHR3PTaFwIcUmS3TSPstLl+isXaO/cp7OwgKdTjsqCmZR2lvrJHZFRIgc30Y0STYRm2gKyHCS2P4hxQt5nCQ1sPl5tNBYvxDmokxzgZ5wXDixLiJ6jLXMihmffPIRn3/+GQkCnbVASiaTCQeHBxRliQ/E9dONXONE6zh/acoczue8w7qaREXuJg2HuqwrHj99RgiB2nuORkNKa+clw2gQ3+wP7l8YT+mPPlGqjWPw7DH/8B//30wmY1CSt997nytvv097cQWnotS1JNBtZRzubvK3/+k/Mdu5Qyh3qErLwCaYfIEQUjzqRPek2azmrfDQyBMHERpxhAZTLJo0yfnjyqf3AukFzsHW823eeH2C9goaxa+Ny2/y4JNf8fTeF7QUrF25Sb2whgvfHhzB45rO6rxSIMkWFrj85ltctK8ft3tDCJg6ckAg+hjEShiRhC+g3Wpz9fp1jg4PCdbR6XRJdBI7JkJjvMMGR+0NwTuyrPFDClHBKtEN3CNIdNpheXmJViKZjockvQWUiN4u1ta40nD0zPDQOdqtFjrpsLF6keXFtbgxCM3Dz77gcP+A9fUV0k4X8S2EHxtXrpO32lFqWkZFJIJEyFPVtnklrukqegG+rjnY3sIBpYl8GhcUwUfukvWgm5cX/UZOsMven3hBHUPyQvRI8j4q5EmlG2GJOIc2CNLOIu+9+x7bN9/kyZ1P2d96yrQsKHd2+eKj35AkGbPRgHNra5y/cg3V6iJ1wu8Ba/9G4wVoUYPFDw3EZzo6xJYFFzYuMj7cZzYeUboCW0dZ+Zohh6Vk6lKsi/NjrW3mzGGsR4YIiw0+MJ1MaSmPdZaDw4IyJ/5OOqybYWtJd3GN/soKZVHR6y/y4M5tustL9NJlQpDHXbsfQkMpcgkD3hlw0aPMO/A2Js7OB4RK0fkC7V7C/mBMkJGbpBrDWCUlWYj+bqYes97PuXJ+keV+D5zlYGdAWXq67R7tdo9Wq4uQFj89pBKSWqSUVjEtJvS/xb3odxlCamxdEVwdA1l0zJGCI+4OsYd03GECICCUbGSHQ4TRAUo4vJ1QzyZQ1CgpEWmCkxqBYjzY5/mjh/R7C0zGBVVZEqwjGIcMAnAgFcbbqLtlHVpqghQEoZBIsrRNsIbIPwJHCmlC6Wu6zuKKEqyNcL9GSOdVpkpx7Z1KBk5V0E/zkbyLfj2P7t/ny88+QwGv3XgNqRSmrpmVJUVtKK2jqqcxmFeSIIiKpDpFCUkr1awstPFJC5UajiZTCg9eq+OO+hx2tdBfQCffT3jysmTJe4/wEkUgCEvwhrIqqGcltUtwos3i+gYHdoCcjmIXqQHpBQEW3+x3HAeZJ0Wx+LxSxm6Sa4xMlYpd03ly5RzH90YIYINiZgVZ7QjCk+FJk5RcJ+gkRznzja77ZXyZ05Czl/2eU+tNKEWSaS5dfY1zFy9Ru4rSRqNrFcDbCKFrr66wsLrG3vPHPHn8gNnBEVK2yFSCDRLjArbpJKVSkCQxVkgkLCBZbWekIeAKixVQukCBhNYGS73LqO46SbZMK23T0YqW9FHYIsTOsghR9Vh4F+8737Sgg2pM2AVCRPj1ceI0vwdeAk38PxuS+d8PL2hxBR9izOhBhhj7iBCLNB4fay/eRqNY79jees7nn31KVRa020s4CwHHaDSlqEqMizYlEmi3YzfWWoue86kJBFsRCOQ6QwiJ1ilKaIRQOAyjyvJ0d5tuljAZHeJdhRC9Y7Vcmlnxr7yc8/2OP/pEaTzY5ctPPmA8PCColEvXbnDr3ffQCytRHU0KZGhMG3VKUdVMBvtY40jaqwRRIkqHC4KY5wjiwde0U3kxmPU+4q3jwpAIGd1JhJSxWh+aG63hUYQAg6MRg8MBWdJGInAu0GovsL5xia1Hd7n98W8Yj4+4+Ppb9NYufcsz9GKnIn6WaB0V/YwxOBfN3ZSOEJMTpb+ToDfLMt555x1UCHzy6aeIZsNRKkqcl6Y+3nhDs7mmWYqpmmp4ALwjkZI8UfRail6mWcqXWF1dRxNl3I2xBKFo9Xpcu3mTxbU1slZ0BbcukGU5EsnTxw/4+NPfcnR0xHqn+8J1/r6jv7wU2+9SNEnSKRzEfA7nQZqIARkBhgcH7DzbwtWOYlZinMMF2cytQ+msSYS+Su4EXtikoeHBefdCkCOEQBJIRECKQOU8tLpce/dnXHv9DXYe3+XX//T3DA4OGOzucPuj33DrzXe4duN12p0+Umdxw/yO97/Trzd4H7uHIeA91KPnLC7mvPOT/0A5GvPoyV0e3P4NRzubVMYwrQxFDZWtqL2mblQD0apRSALponRqloCbOQo8aQLPhjPE2KOQyODRSHqdDknlGBwcsbSyypUbN3i8vceXH33I+z/9ObIbIa8RefD9+0YoC9ZF9aKoQGnB1YSqxDuHqyqK2TgmibOKyjTFj6xRaCTQSTu0gmJWFnSzNudXM1LpGY+OMKYiyTM6aU6eKqTyVGaEl5bEaxwdxMISly9dYXdrm9WNy6/0+l0ITKYTynJGsuDj9UsZeUPhJKCZ78tAw72MIasXIIVD2pJqvM/jL39LPdghFHWsJ7db6M4CWdblzoN7bN65S11LqqmlLgqMcXgSCIFEqgipNYYAtPJWTJjEvBMTUCpym0Lwx92uVm8BVw6ZVoasshRFjW+4A698+FikoOmIe9+szfmv58INzjCbjXl0/y6z4RGL6+cojEGZirIuqTyUKKxOMMWEmNJrpEqxzpAkSVRuFSBkoJenlCaw2m0zKiqcVAipkSoWGV2w9PrdhgP2ikcIJ3tg4NhqIv4sFgVBMhke8Nlvfsnes4dMDnZJhCPv5Vx+7U0eHX6KMBUcm6KGiLs7tbfO4wUlZSzwNNV6IQTOzmOI+NxzvyshQcnGvDdEUQnjAkUZC7OVd7RbgfWNZRZ6Hdr5N6t6ne4knRVwmH9+4bxpoHfRZiUQyxABIQNKSzKVkSRJ9JGsa2rrCEiUSukur1F5qDf3ufPsNsY4lNJ458gXlkAm2KqksAafSHqdFoQaKQzTEso6pozTqmRUeKxMWL9gWbzYJW11oi8hvilcNCqehIbL6CH42JEmUifmMPogRAOtjUXH+WJ4maDF735Lvditnf8s8v+iABFCRRi/EHjRiH81Xm0mSGal5Ysv7jI8GqClICSS0kVeblVb8ArRqHd6cSLKcgIXbKxgZEKiJUoSVfCUmGNWsCLBBc90VqK9oZiMCFWBCv6YR31cXPkBICxe5fijT5TufvwrHt77nKyVcePtn3D1zbfRnQWQOpIjlUQ0sq8qSVlaWefSpXUuXXgPubDG8+dP2dp8zv3nO/hpBXCMYUXIrxxw86r/vPIjpTh2lhbH/zuRvrTOUdeGg/19NtbO4Z2NVQ2ZsHbpJsZY7n/2IZPpR8ymA97787/6TubpbJUkNDAwiAtEvUCslccwsdNdp0QntFotut0upTEgYkdvNpvFw0YI0jTFCoNAoISKfkp5ThACWxcob0hVIMXQkpCnElGNUSoazKaJwknFZDTi3v2HvJb3ubDUhaxFqlvRDFcI+uvn0FojpYo43vCHt0qUVscH/gtjfhiensumgiS852Bvj+loQq+bU5SxgxShGKe6UZzAHk7Lggrx4uF1LB3acCqUUg3W0wMJLgiU8wx2n/P0viTTCleOmQ326eUJyfIieWeZa1ev8+bb79LqLTaGrZFfN5caf6UjBHCG2WhA3moh8oxcKda5zkdffM7zgWu6cWBcoDaRK1EbC1LQ6nYIjdJZAIrZjImdkOqELNVoJSirGUpYOklgbaHN+tIK3bwXfV+MxQOtzgKv3VjiycN7fPnFbd54511aQiKVAPX9V9AiJKzhpdmacrjNeP8ZxXhEYQJSKqYHm9TTEaYsKKsK5+bwzdDAfgMh1CAMeSsB4hqeTKdUtmSx26YOCm8M1BXIgHEOa1NqD6utZQKQtbqsX/1uPbfOjmlZYiXMZhMW8FhbI0Szj8sXCcbHwUmzDkOjYKW8ZTbY4bf/+DfsPL7DgnbkRJ6QSDQiTWIgV1W8sZwwGFl264rUOyZCUHkFUpG2EorakLdax2pxMdCMJuRayghtbOCgSFBJgm61MbakqCsKGygr0/jIzWG3r44kfZo3cfpDiGjabF1jwew90/EEAVy6eJH20grtdoe9nR0CCo/GBoPOcrStMXUFPlCXBZmSaBVwrsTYEucUWkGqAquLXbYGIybONwW1SEhPtKLd7sRz8BUPJWTcW5uEURDvIQGgonKuMY7DnW2e3fmMo60nBGtodTrsH4xoLeUYa485pD6SWDlW6j6VzHvvEc412/fp8xS0So4TVRo4qWqSc398Nkf4v5OCIDXGWayDJMvx3pBn3wy6ePqcOavE+nXQO+CUEIUHEeW854hYEWKXUDXGsbWLyoFlZdg7GFDbQO0Dk9kUWxukkvR1Qp5HJd1AzDEHkzHe1kxxbA1jgB8V2RJMSKOXwcERl4uC9TSl1cpRWsUil1IEIioghNihEw2gD+a+Rqe70NA86IXrP72/fBMo9vy9nv+dF+ay+V8QoUmSYmIXEDgfmu4a7G/vsf3oES1bkSYSygnOBWZFiatitxsvGggnWGdhLvdOOE6UNArpHC2tUCrEjlGAQIIgIwSL8gLpAsE5TG1j4t54Op2gQP4H9O6PakwO9gjOsnHlKjff/jHJwjIkCUoloBSoKLTQ6rSRUtFd6HPl1i3GhwNev/Qaa1ducm14wP7//h8ZlpvIEKsS85tZihNML5yQHOckwXnAHBrcq5pvlACicUcnsL+3i7tZoGULpMCiCLrN8sWbPHu+zc72Q7x8zLWbO9/q/JxWW5uPY0w2sQWtlDiuNjaPeBGa0aghHQ2O2NzaOlays97hrI2PPXZ1b3CzTQIQW24SpTTtLMXXU/Ik4ExNRYWQHic9VmqUVAQ0hoRaSMbFjDJIFpa6LGbnELSI/TtLVReAIE2zuIl/CwGIn5+c83kLXwXJnMh5EnNpAmmasn7uHKvry3x+58toNitiYBsa7xYpBJW1X7mXXvjbzc+1Vljb6HV5f1xRD0h8kMjg2H54l6OHn9FrpSwtLtBfXOCNWzeoLJAu8Ob7P6fVX0KlKSh56pD47hOClwVnwRSMBwN0Z4lZXWFNzdbRgGf7EwqfEmSg8mBFwGsQDmQIsct5LMU+DyYkxlqSNEJZaxzGZ4Tg6fbg2oU+vSQn2Ni9rRpZcZ2k6LTDrTfeYnvzGZ/+5je8/uabLC4vR+PH73nUosJjmY0O2Xt8m927HzHceYSXHiNzagtVaanLKcbUDURTMjeprqqSRERuTmUNsvL4bhsfBO1uHzsVjGaGsjAIb/HBEuaQISVRqWB0NGAn2eLilVu0ll+tj9KsMsyMZTAYci5E/xapFHNBEzi5t46Dk3mxQYAQHl+OePTFx4z2DyjqgDWeljO0pEfbQOoVSgg6QtFuK9ayNuu9lP1p8f9j7z+fJEuy7E7wp+y9Z9RpeNDkPIuiq4Fu9ACQnZEZGdmVnf929tPuLHaAaUHT6u7iyUlkUOfGHlG2H1SfublHZFVlVmRkIau1JMvDzd3N7KnpU7333HPP4XDhaOOYpVfUwRObFq01g8Eg0WeEZLFaIISkqiqIga5rUDrLXitFaz1dlEyHU66/8CoHt+6gtEkeOt4jeo+Y5zA2779NUCypUJLPrsBqseDTjz6kXi6RRE4//4yuaTmfneGthZhQeudsqpCgMEWVezEDSghsCKzahtZqhPQMjGQ6LNiZjGjmLYSQDAuExOiCoii/nSobl4PZzeQhxHQOaiUZlBoRW/BLhLcQNLPZKY9nK9qmxlnWqPsm4HV1JKGAizDsiVhCqTUYGXy4JFctBGgjUUahhEei0FqiZaRtlwj91aweNquym/Nw9Ty6Ssm7eD+X/32pApFZN1opzuqav/u7v+PTzz6lNAU3btzk86yEG0Lg/PyU2fycshwwHI5wMWBtRJmSZZSE4BJVVkhCEERp0Nqwajvu3X/Ai6++itYKrXWyhgmgRVa+zV9lD6zIXoSLyyBFnyHHJ6/tadf7u+YVuHSP9QySxBdOsWSKB/N+G8AFjfMW36x4/Mn7bNFwc6cEbzmtFzQu4qxFuoYYAh4BUuOsT4qSUlAWJvfIgwgREy2l8hyMDKNSo9CpMu6hcZLaKlrnEKFhOZ9xerZksg+F83id9ifRKz7/CY3vfKIkY2RnZ4+3v/8jysk2wZQoXSTEJvtdkNF8QUCZihuvv8uj//qfOfr8Q3ZffRMxnFIMRzkgTRKMMeTFfmXxSylTYzD9vRbTISpF4qITEgMvJoNDZDK1PT56xPHRQ27dur1GnUIUoA13Xnmd48NHNE3k5PHjZz5HVw+Gi3/3v5GqYP3Pe+SrNzHz3nN6esrHH3/C+dkZMiMjXdcltFVcOL977xN1IM+BCw7f1BhlkKUhuEBLYBEDbd0yLgUDE1HCoqRJEbIRlIMpoYP69JB7H/+anekQJVNlKoqO+fkxW9MthsNhPnD/8Bs7PuVwiBuf/9WDMIaIc45Hjx7yyhuvo0qD/+C9tV+LkDL7H0m0Muv10x+MmwfTVY50+rvYA1+pckai3SkpuHH9BqGpuba3xxvf+z67166xnJ3xxRf3ePed7zPa3kaXJVFlo851Peb5jTX/3zva5RnzszP2Jgcs2xVdU3NydsaLL75EVRYcnx4hFAipkkR/WaFU+nfdthn9BpSiHA5wATrvkF4CHoVnZ2h495UDdioI1mGjIRBou5oQE19dVyXVsOTNUcXp0WM+/PXP2dreYmtn57nOzdOGCzOOH9zls1/+E2eff4A9fQTdClEaWmpWVuCDZtU0tC6tL7GRNKxWS/Ad0nuWdUNVwt6kJIbEha8bh61btkYjlNQEOoTqaSqGrcmYYZGC4O0br+DU8222t0HSdJaT0/O0j5gyAy3qiQBvvR+L/u4PyNBw+MWHnD6+z4/+7C+gHPKLf/prDj/9CC8jJjraYDEEtJC5kd4wULA/0SgtOVl4ahfoOre+JxvvE2CGZDSarHsKjDEpkY8h7XnOcT5bQAwMCsP+rRfYuX6TIGViGFxRuPymxyaFCrhgB4TUJxFti7M189NDPvngPc5OT1Mvlta08zOKoiC2SwbSMZmWzJcz5t5TE4kBympEjJ6IwgbBeWOpvcd5S6ElhYhsjYecdbDyKaAdjweMRmOqsnquc7E5J3CZbgY5gQlpb40hMBqWjEcFcmdIt1pgY0twivPFIqkhRpkr9Ynwtfn8fXVCqdRX15/3/fm4ed1KK3x+/ZBKVBvUuNzw7zzRCHShKEuF9zU+WJpu0xfrd4/NatLmtV+9rzYf2/xbeDIZSL2EaW0553De85vf/IZf/epXtG3LYFChtWF3d5+6XtG2LUKCtQ5TGIIQuAAOAUITtMF1Etu0KBUxKvXVSiVQRcHRySmPDx+zs7vdvzOcj5iYEiEp+v7qTMkTiguFU7meVyGevg42x++7Pr8M+EzgXhJ6yeWr1GMbHMJ5nPWsjh9x9PlHdI8/Yt90YGuWTY2bQ0AQXMR1DTZGvDLECC5X7ZSUkKm/kvTcpYStSjPVkZF2VFogpaBrPa1o8ZUhqkFSsAyR5eljcK8QvSF4TxAKKQLBf7W19d/7+M4nSvNFA2i2d68hTAW6TA2mSudek+R8LWWiSIhKM9y7yfWbN3n8ya8ZHxwgB1tUwwFSKrQMWB/XKC3k5CFXEZ5AZDLlBVI8GvLPpOhVUMBHT9PV/PIX/0whI9duvYA0JSJ6rO8oCo3RCucsjx8920TpKn92Tb94CgXriSpATJyE+XzO+++/z8nxMXCx0VprCZt7SZ6f/jBYl+xDRPhIExx4lxuvA7GzLDuoSk0hBaOqREhDUU25cftNbt28xWp2wuf3PmL/YJ/bL24lSV5aHjy4y87WPlqbjTL7Hzb6KtJTfrDx84zKkjao5dkx8+WSV3/4I06OHuT+koj13ZoWFYJLRoMbMqSbqFMfkK2RKe8R6/nP600KoncoZYiiYP/2K7z80otUwwmj0ZCmWfHF4YwX3/geo+19lCkydTTTQklr+nkx7zalh0PwLOcnuKalKiqs7WjqFYvzZaJyTsYsmzlFSH1znfW0yjGZTDk5Pb1AuGJMru26YDSWBNchhMN2NVs68u6LN9kfalw9x4sh1ijqZY1zLciA0AKpFVIJisJw+6Ux1++8wNnZGdZ++wfDyacf8P4//w2zex/glscQA0GCcZK2a2i9xsaw7uWKUkI+PAGEFJzPzhFBJFEDEVm1qceg6zq0jOwc7DEsKmy3woWIjR2NV3S2ZYeWwXjK9o0bxOkePjzfKtvtF15hsepQSmeNqk1VuyfRbljDOwgCi5OH3P3wV0yGAw5eeJ2HJ6ecHj8mBk8bHHXw4JMRt/AeI0EECzLgYgBZUWiJdxZrwzrIpQcuQgpefIh4Z2lFzNRrMBqqLCMtjQFd0SGJOgtArJO73z8A+yZGf2adPn7A3U8/IrgO7ztss0JLiakKgu0IXceqqfG2xajI2BRs7444WXZ4PydgMUVFwNA2iZK1sA2LxlG3lmFRUhrB1njIoPZEl/zgbt26zXQypiyrxPr4FsbTEoQYN6mrSa10NKoQq4pKB86XNjEDiIRgCUEjZUoYrz53v79rrVNgGy6v2c2z2GYBpfT45fWdZOgDxkiiyP3WKuK6FUhJOfxq4M7vSoI2k6hNmubm91fHZt+T957Hjx7xs5/9jOVyTgyZzg4sVzVKGYbjEts1WJvM2KNIQGtZVilWE6klShiDUknpVAsoVDpzrXfcv3+fl196kUFZIQuZ7v5AAlWEzIBn79eVupfIyb1QF6Dw06plm9f9VSpKX8YOEULn75NXFt4S6ob56Qknj+7x2W/+heWjz6FdIIKjiYJzFzjz4KWmiZGgDME6nIsoI9Fa0rUdQkiUktg2VZxKrRFFiXWW5bJlpCsiYH3A2YC1FjWoqEwgRosyFf70c44/20K99g5lWazFVr4K9fC7ML7zidK1F1/HnR0xLIa0pgSjMTJR5oQELyIiCIZVhfOppKtUyfUXXubhZx/w+POP2Hv1XaqiQmXD2HR/ZdpVvDAJTfQ6iSf5cEQiMhue+kgu+7KmWwlkMiX1kTZKjo5P+OCnf0sZApPbryYOrgu0qxlSWGRZsnPn1Wc2N19683LRY7VZZYjkRC8nA4hIZ1ve/+A9Hty/h+26tW+VEBJsFr71vZFeWFMNiYmXG0PE2o4oFLZL0ul168F3FAqqYNBWYrTkhemUYDvmp3PivYfs3XiR3YMbPHr0Gfc+fo/J9k3G2y8TAwwHA27evpPL2CEFjX/ofKVJu/xY7j9bH6pcJJAQuffpJ0y3dyjGW7iHdxOXGJGb8bPiUVa76g+VGFPv0SXaR04qpEwVIJUpGbI3gosR0UulCo3UmmFlAMf9Lz7FNg1vvPE6k+1dlKnWEucCse7jSNf2zfdIxEyJSt8knsHs5AiEoCgHrJxjMZ/T1A1BwLypKQbjvG4kykRE11BW1RqZlVquq5UCsCHRVHzXYnC8cmPCS/sD/GpOCAJfFJzUDSfnZ4wqQ8wizcro1FciVKJ7KsmN6T5Gf/tb5ee/+hnLhw8J8wYVDFELgoy0tmPWSlrKpAwXIvOmZjAYokVKggNQFCVt0ybhBwLCgDQCk71bRuMB0+EE29QY3RF8Q7TgnGJ3WLA1KBBmwmD3JmiVgpjnOIpSc3Nnl7PFCts1mFx1iD3NVeTqKuRqayRGlTYu95iHn/yM1fmKd7/3lygz5PDRL2jOz9gdVURvqbuGxcrhYkKxpYRKaRRJzKcJjkXrsS4iA8hcxexpVRFB27aJTSP7yq/PyZJiPJ1SlIYQA0pprIhEnSpi/c4bAs+NetePq8Ff13Tc/eh9zg4fQHTUTU20Dd5FTFmhC0VRFoToWdU1eEssoFSSg4miMmNmy0TvbH0S0UBpWgeL2rGsO0ZlhRCR4aBgOKzQosC7yN7ePrZr89n07QRjV9kBF0FysiVOl2PQuiSiMeUQ1SyJAowRJMXTZDSfkuleuy6NTcPWqz1pTyQrPWUg/XT9O0qpBN7EZOwrlaYaSISwuK6hGk0ZjPe+8rVfpdo9rV/pt/3dmrq5sZ5SrJAe//Cjjzg6OsrgcjKmL4qSshqkyhgKoTRRaJyPKA1KSaqyoOsagku9N8YYtM4S9Bnqc6ngxvHRMbPzc7anW8SQfNMQyfvSBwFBoKQCkXqX+ppzjIkhI+TTPvv4xHV+pTlNr0DPzom51yfkez5EkaxROse9D9/n8/d/wfLoLu3sGNGtAM/SRU46wUmrWGiNdYHaeYLSDKoRorF4n2xCisIkIY0QsdYhYsQKwemqYR5aZouOAEwHBhljMn1OJnPYriF0K5RY4tqGT9qWeef4/o//HKNLQgz/Sr37ro0f/+Vf8OE//SNdiBitCVKhsrlYFClIFCJSDYd0bUOVedKT/ZvceOEV7n32EVsHNxiVGinTJidjvGhs4zLS0o8+0bjY8DeRinRzJrU80qHuLSG0HN0/5hOjeEUKRtNdbNvy4N49QPDGm+/w2ts/fKbz82Vl4YshgL6cnmVcc++Cj5bDo4d8/tnH+LZGekcpOqSWBOsQRlN3HU302AhNsihH5sNBhIQLN3XLMgSqoqAsNUSBR2ODwDvNQENnLSdnh+yUge2ywK6OOZ6dMp6+yP7oGseP3+f+Z//CgRzhVg2udQy2t1PQ4mMOhP+wcXXTFJnWc+kAyRtgDIFmteCzzz7j7R/8CKkUXdsRQ0jVRO8JMVGDAjH7IsVLz5++inUPWE+R6ekMiIutFyGwIRIJFCKwOD3i8d2AUAYzmvDqm28xGI+SV5JO1MfQl/rprTm/+RFFXDf5JmNQj+g6mqMjRDEgKIWzjtPZCoejq23a6I0i+EBbN0TnUNokxNWmxLMyBU3oCNFhdAlSE31EB8fBVsnLB1uEeon1hqUc8GgReHiywkTJqDREJxCBDJToxIGXMlWDpcB/iyh/Pw4PT6htwcELP6Stl9TdguX5I+anJ5zZklgOKEpFUJrxdIpRRV6LKbEW1YAYYbWYg0sN9Alt9ZQqVWyJK9ALfKxpHcwbTaEHbE+m2Nbha4+QZeJJBfe73/QzHE0z59btWxyfnrFcnDGcTHKSnzySIAMVQL/nRiEhek4fvM/hZ+8xmb7Mzo23sL7j8OHHVIMpne8YDwbowmAKz2zZcjpfMmvrrJJIqlRLSRciyAIZHSL0SlJiXUm6oLGm9Z0oW4me7AGkpJAJwe58UtsrpEFLQ1+Nf15obRQyUeyiT+sgg0rNckY9O0b4BklEx4CRkmXosmSxYL5q8d5Rd57adwgCtpSMh5qdgWB7MGTVCc4WllPv6bIVxrxxzJYrtoclMoJRybDXRsWwKDg5OaEsDX5DTOjbHJtJk8igDiQKsCmG3Lz9MmcnRwycYFG3DAYlVWlxTqbG/HgRHF/9XBOgGBBCrdOoJz57cfEe0o82lefSOnI+ZtNfRfANaIE2hsFo/JWv9eo1w+8TI1xUyq5KaPd/H2NgVdd88sknG15QKYivmzr15oh0/wqRZLqd9UkZ1lkKJYjOI5AYUyYfR5nuzRAj3vqkGFxouq7l8PCQmzduJml6E9biWbKfwxBBRqTKlaWeURFztiU35/3inpRfA3BNoHjMoOD6k074DT55arqAXSx5+PH73PvFP9AdfYavZ3R1R+sCTYwc1S1LKtpgaLvIsm2ISlAMCpy16ewzJlWBs4qzlIoQJc51oCVeapZOMnOKxWHDpOgYGYmWAiEjpZUMTIrLlFT4rkY0D1g2lt3JNq//8CckRaFv/958nuM7nyiNdneZXr/FB5/d5d29A4xIQgJIufYoEERMNWBVr5DExIctx9x4+U3uf/ohdz/4FYWokqO9FBAiMsQNY7S4rsJc5fhe+p5c8BUbQTdJuEGEZMA9b1ruP7hL1DCYHNBSMJzu8cbb3+PVN9+hGO0+s7l5emDO+r2zLvWnPg9iokk5LDZY2rbl808+oVucUtAyriQjLQlecHreIpRHlJrVbMV82eClWVcBNjnNQgiC93TWpgqBVslrikhnHcpZ9rZG7I4MewMBKFxVpb4vIZjeuM3J/C5HX3zCeHSdB4cLpnvXkppezH1hz4BT9rSDpK/mPPG7BFaLOUopdvauEaVivlgQQkArhXcN0SfONCL3sPlUSXIbdIskIXqxltb9ShmlWqN4MUKw6CiIQVEOKqZ71xjvXqccjilKg1AFQqUDppemDyFccOWfQzIQQqI2hZDknn0I1Ks5s/ljyjL5zkgnWZ3O8cuGul4RvE9mgVKw8DXLRc1wGOicS2bGMdJ2XTKaxRNDlxJR5xhqxe3r13BSc+4cNmoOFx1fzGpsNGzpYt2knZKK3LexcTCqb0F962mjMAUv/Oh7vPLWv+H07IyH9z6gee+nnJ6co7Th8GxGORY0HiCpSsaQgB8pUhCjpUKVKqGHSBbzhmokKTWIEPHSsnI1S+s5mSliHLGzs8N53RK9Y1KkirGzAfEMwIevMtrFjGhbFJHTo0MObtxJ67j//7x8N99VwGJXR9z/7DOcFdz+/pvEsaFZHNN1Ld//87/i/ucfcXZ0j61ByVh7BoXCB8/5gxPOVp5FF5O4jhBIoxmWSR3NeY8uSpwPWOuT8p5IpqExB0ZSSoSSFEYjo8C1Fj0o8V3H+clZUqbqaV3PMUkCsCg0yecpdfFJVHDMH3/O/OwRRUaNdYwMi4LZyrJqVhghiT7gXDJNx4w47SyzIJkGwVg7xlVgb2wYl4JSS44XsOwEy8ZxslqyUxdUGJQo8NZT+4AsJadnpwyqCussWa7muY+riUFf/ZEEYkwJJTFRuHav36KaXmP23q+JzRnBO7RS4CD16iej5xAvjEd7gHQtQpIp22lsVG9ET2CIGzHDRa8vmXmAVHgfaJsWrQM+CExRUlTV17ru9TvZOHOeNjYTiX5sqraGzWRXSmaLOUenJwSZ1d1kshBxwSMkdG1DEmhIstlGCWxXUxQG23WE7M+lpUysoGz652wytCdErLV0TvHg0SPefKulqiqi9/jgiCJRQPukNYYkpS1Eqvqm6wlrptCmJcfm9W6ujd9nSMhJYO/Hl/u2YrLFEO2C2b1P+Pz9X3F091Pc+SGhndN4RxMiVmhWvmNuPbOuJWZ/yqwviIiJDmyUgSio6xrbWTrVMR6NGA5HWKsI0aOkImiDMgWdc5zUHWfLDgkUOiVJlY5UGkpjGJRVUgy2NSeP7rI8f4lpdQ0Rnp865x/D+M4nStKUvPDGO3z8/ns09ZJJURBzKVysOzQk5WDEhIQUiRjwQlPt3GDv1kt8+OufY9UQrfrNSyBFH6xe9u7oA082kqaLAHvT8TrfaELhooLo0cJQjXeZrc4oDh/w+rXbvPXunzPeu85wNEIPhmAG38g8XUbv4lrw5VLfEgERHc6ucHVLfXLK/MF9toRlOpGY2KF9y9IGbL2itYqlE3Qu4iBzqHNVSmQfHUiqUTHgvMd6D0plcQJP9I6ygJs7Q3bKSCVgZX2S37UdXgjKnQOmB3c4/uKXPPrwp9x+8y/YvvPqmgagpPrG0MnLtULW/4ox0DZL7rxwh+FozKJuOT8/p2tbtEq3nRDpBFUm0ed6Kl3/Va6Vffw6WE/XcVmdSCmVET2FFoJoW+5++hGGjpfNgOF0BykNMntjJbn0i/d6dZ1+k0PkpCQlJ4HgLYvZKavVimvVFFYrYltTNDNKe0brWwrfYGcNq9biXMAYRVGU1PVqnVSG3hMmJ91ET2kUt6/foFCa41lL13kQklqWOBw+yORLFFXaE/pKZ56Gq/1i3/YY6QgEvDKEckhUmrKsmGzvIuoOdzLn6GFL1INkiuw8wfnUpxciWgjQmjYoRBAE2xG9oiwrtPQEOpa143RRcLKM1F4ynRQsV13i/3eOwXbAdS0hXjjMP6/RrZasFnOMEDx68IBX3nwXNUiVRUmqe4ee4ky+N0PDoy9+zcn9R+xMblBNtnHSUi+OEd6zc/Mldg5u8J//3/87s65hYiKVDtzcGeDCDh/dP6WJEvSAKFOwsWxaFEk+W9iA0AapVDYE9imRyAGRTlxrNIGurfExEnOj+OOTExarJePxGOkNUl/40z2XEf26Z1YABE/X1nxx93NsFyiqIiHRQGEkRgVWzZLGQ1UMkuWDkrRdS9OsqIYlXVVx2HpmrmM7RqajITeuV4yHNYdHMpnT1pLjWc2kVDidLIC7uiNaj9ZJlKazFp7z+oKLYPgJ8DAzP8AgZFIsRQS8lNx648/44tzy+PyX1PUZvvPIaIhk78TUvJb9mDKLYC3bD0SZY4PUhH+xv4eLBKnf79f7UMyfn8SHJKEtYu/3JJF6AKr8Wtd/9d9PS5Y2H/NXGvufrCal709OTrDWUhRFOsc2wCitNatVMhYvTIE2Bm9tphg6XF4bRqrUm6STybq1lhASq0AI6NqOWqbXms3nTMeTrM4bLs5VoS4+30zRjjEBHJusjaddy4Uv0e9/jwqR4kSEyusBiBERPX51zoP3fsq9X/wtq+MHuLYhOEvnXDL3jhFdVJRFCUuLtZ6mqUGk3naiZLmoIQq0TvGl0gbpUs9RMpxVaD1gvpgRfcjqwYqoNSiT5rCrca7D24gZa8piwGRYsTWe4J1FiMjjux+ybBu+9+/+kjuvvPZ7X/93YXz3EyWpKEdb3HrhZT788Jd874c/xAwGabNDpNNVSJCGgd4i+IgONvGqyzE3X/8+n378EQ/u3kXnhR5FRInUEA0XFCwpxCU0RUq5duHug61k/Mga0SBGZPQob4kyYkYjRFxQz4+xzYyt7THFeIw2BUol2uCzHJsb4yXVpZwEroOPGAhdy8nhQ04Ov8CuGsKyZuobinGBCgu8W1G7yLJ1nDcdp63CygqqMVqk5kvR99T0wgVCUCqFVoK2swiVmzQlaaPEc21rzLQAHRxdgCgHeO9wzSolGEXJ/s1XqY8+oz5/iG/OKYtiPechBuQz8FH6LZOY5mtNs0hH4NnpCUppek+EEANlUTKtSvT5AutycB+SGMHTg6TLvUt9U2yk749IlT+pkgx00wWMTqjwp7O7tOcPGQ3+nwxuvYqWGiU1KvOyewpkzFTSr0Mr+OojZAZCQMRA6Grqs2OUN4S6ZfnoLsoobm97Xr19jaaNfPLZFzw8PmdYGmqtmTeWerWgbrr1fOSPAKUSHcUUBWWlcD5yfDxHSkVVjYnCpP6s2KKCSMqDkbQuNw8xebky/Hzm5rcPIxyz00d4Oyd0S9rVGRJLaSSlMRyfaR7PlmhRUWjQEqQWCBHWB7MSoKMi+JpBEbl5Y5vok0peN+s4X7bM6oLWDdCFJrqEavpykAwivaVpllTe48LzPT661nJyfIqptnh8ekbbtoyGk/X9l1RJSZL5Cb/l7PAhD977DTpWHNx4jffe/5Dd67ssH32KDlCNppRVyf4Lr/HLf/xrXtgbsl8JJqXilWsTBPDevTNWBJxUIAzCGIJ34ALWpyZsJXoj7WQdEXxAITDZ+80YiQi9QaQCJZnVKw7PT9m9to9ZL73nmCgFlwGGpHoog+f05IjHjx9zcOMWKgaOH91HRk+hBaNKYUPH2cLRWpUqlVIm9bvoCM4xW9S4HLSedw2TZcvuqGRaFdy+PmWxrOi6lrOFpe46zGiYzsrgWK4sVWnQUjA7P+fGjZvPZx6eMp6gnm3sv5BAKaU0ne2YTKa88da7fPHZZ6Dmaa9wIQGLQtArqPVng4+Je5xy6MRBliT2wOVAXa4rSleTtx4ciKRzJeRkK7HbJUIq4ldMNL8MEPqyJGnzd6+yUTafq1fJXa1WqaqtNVrrSzFR13VrNkVdN2jrqaqKYVXRNA1lWaK1xoULk3VrLdba/DxyfRZ0XcdqteTw8JBb129eUF+9zwIaV5R9r9xum5W0q3Pyte7NKFIfYvIoSGdt8NTzU37+1/8fHn3wz4jlITJ6vNRYVRLNCCMrBsLRNi1tu2KoNbPY0llPJxIbqjBDhJB4ny9DgCkSdVVEsaYcCnEBrkqZ52C9QgJFIdkpFHvTAXtbFQMDmghuhrAeHzVt13He1Oxev8Gt2y9/9Xn473h85xMlEEil2d7b42B1C4RKJrMpQ8oBaiD5NkPsmzUFOKGptg64dvNF7t27h9YKJUNCCDaqSP2/e5pajBtKNet/xfXvbga4MQaU9xAtXgROjufs6RW7E4U9f4xbHDHa3k3vGwvPMOC/WkZeoyghIddEuaa2yAiL+Yzf/OyfsacPKfAUBMayJtoVhI7Wes47yeOl58wrGl3hMAihUFqjlVoDYv0GpJSiLApsIxFSo4whekewNdglW6OCg50K3y0JRYmXJXIwoW5X+G6FiEkSezDZ59qtN/jk/b/ni0/eY+v662zfeiF/vl9zg/s954+NjReRet988DRtx2g4IMZAIWFna5vpD/4NwQw4ntccHp3iReoVkMQLx2whMh8+l/W4QBl7hFFkKpUkogSIkKoHQQjaGLCiQShLffoFR/c+4trNlwhCo6VKoJbsW/xFVgFKmPw3XTkJOIgJZcO2tOcnLA4fUIpIffaA+mRFaxuiLtDViBg02tZMdGTWWuaNw3aeNib63uZhLIVCCZloFjFpiSxqx1YxoDQlXe0J2lMLf+HrJRRC6BRc9PKw39B6+UNHlIrF8py2Pie4ltnZId51aBVQwXF9Z8jd4xqpNCNTIHQ6QEOIOO8oTNrubaOxtuPatQlVGZifNQSr8E5ihhXXtiqWq4LZrEXHJHF9NK+RKiKUoDAKIbOv2HMcQZY8Ojzj9XdeZOCSWpUggS5ByrSuSFRqHT2+XfDgw/eoTxa89MaP2H/1LeLZMb/4p//G+f2P2Nnax9UNi2XN0azlaBmJfoY5mDDVUAA3tgc0zvP50ZJGarwwBARaaVxMxqpSylRRihBFUiJECoILyBgohaIQkaoQLFqXeP9FRdvUHB0d8cpLLzPYEGt5XmtPxtQ3laoRgdCtuH/3U5qm4dqtF2mWcx49fEjoGgSBUgsKGTBKULcNiETxVcYwMhOcbWlbD0IRVUVtPW1nOTo5Zawj13e2GVYVhS5YNo7FqqNULXXTEDPF2FqLM5b7D+7z8qvPTrjo9x1P682Bnl1xYRoqpUAbnXpoQmDn2gFb+wfM5nOqNjBrVwCIKPsOJSD55PQBba/gFqyF9dkY16BP/1qpYvIUICubp0YSWwMpiVIhZEE1nKL0V5Pvv+qluFlVeVqs0D/W/91VafDNxC6EsLYL6atBKqsNz2YzlsslxhiqqqJtLSFEqqpCKMXW9naOHQQu3yfOubVFSUq8FEKoZNqaX+v46AjnHKaIScDGXxg7SxnXMdjV6+3H1era106YVKJYihxjiuDw7YJf/vS/8cnP/xHZLTCmYvfgBgd3XuThowd0naVxJS7OadoTXNdQ4JgaT+gcLkiiSrGSUAVSChCpWi2RlGWZGBIx9XA19Sr11ekSYzTRd7hmSSk9o5FkdzzmYKqojEDEjug7gguJPho0PkpcrJFFQVXoJGr2JzS+84mSlIoYPUJLbr/y5jpQ770N1nl1lMjcUBikBu9Q0UFRcePlN6nee4962aJlgxQCJ2RC9UOfcMnU3CuSZG0/QuxfKVEwpOg3mVyuFikwtqGA2DEKDiEs0gnE7AF3/+n/pKyGDG6/iZcK/Q0EJ09rvMx6mvTSmUKA6xqa5RzTrih0QMSaGBcE6WisZeEjj+cdRytPg6EJkRgsCosWEWOKpK6SXaL7zVJrTTSGzgdsZ4muQbqaEs+L17cZFoFu2VGHAlGOWdUOfI3rVkTvkFiUmbB9/Q2Gx3dZnh1z9vALRteuU8gymds+4zm7Wolbz1//v3wg7uzu5S0yzea1G9dpg2F3Z5eT07P1NPfO1xukzFzVuxgyJ31aZyqhAJ0dz6MPadOUpA1OhqTuEyKrs2Oia1ByfPECsjfhZJ2APY8ReyTVO86PD/n1P/49Z59/iHHH4Od4l1TpOj+ki3X20RAsO5g30KGxAazzua9oE91M3hEiCpxzCCnxQtFFhchyzm3XMo+eoJIqVchCDU2b5NpFRsk3p+O5ovy/ZUhpCO0RPiba4PnjR8QwR8mIa1dsjQzXJ4qzZgWUuYoqE/VLSEqt8c6iFQwHmul2RWebfMB6JpOCG1vQec8jJMulpFAFQhd43yGFQogCIU1aRs95TqKqOD5f8KpQ+ACresV4ZycFnFwEZckzxPL4/mfc/+RDRoNtdl95k3Y0Zr/SvPvGa/xfdz/g6PSMv/vr/4uZi3z8xT3aWPD4/JxSLrg1KRgXChkj13fGLLvA/UXEkUxutYqMi5LOWuq6RkhBoQxtVhRUPSBhPYg0/7umYqsYcbxssM7jAyyOz/BNRxj5dUX/ea01LcEHmTqBfEu3nHHy+D6j8YjB1jZfPHzEynqE9SjhMVJSKsWwAOct83pJkKSgDIFShkGhsDZgPURpCGhaH5gvlzTtGfsjQ2UGCFXhECwXK1Z1Uj0NIdA6S1UWHB0dsVwunss8bI7NSsKlCk64qCqR++GUlHRtjXMWhwRTIJRGZtlq5/suksuJj5D9+dEbIkPPHNhMRJKNRngiSO9/vvZyEKSNXAp8gCAUg9EE+TXk1Z9WPdqU+H4aLfG3rdfNZCtV/tP3VVUhhMDmvuTBYHDBmpAayL5RPrDoarTWjIfD9XP1iZIQSWa9KMpk4Er2bPKe45MTuq6lGgzXCVJK2jYSv7WQQ3zic78655sVpt/Wu/XkJMiUEQuBCB58y+mje9z98DdIIbn2whu88u4P2bvzEt63HM7+v4yLlsguzekKURRIA7iWyTAglMAuYNW12ABmkPvUcIl6nquMIpKrdHadoAqpIHiEaxkrx63tilt7YyoNkiTs0tQO7wM+SjwmKcC6QDUeUIxHjIZDgvtXMYfv1LigLX25rtfmjdH/vlJp4w5Csr13wCtvvsPyvffRrcXYkHxXYn5ukRKlNNIGGDNivfmqm9WUi5ssoUI+eBRJRtxGRRMCrTvn5P6HvPc3/4V3/sMW27dfSc2zz2j0Fa7+u4tAPW9uG//vg6cqDDuTEaE9Qfga5xe4uGLVdSwaz8l5y/ki0DmFReJcRAQwIrmZx5AoTTJmjrAA6x2hCRiZPCVs24JrqGi5uTdif1rhuxk2SqQccr6wzJcrtgeRznZpjoUkKkW1fcDB7Td579Hf8MGvfobZvc7NOy8iilRFfJZj85B44lDNm/Fyucwo5MVj1aBiUE7Y3tmmKAts3V7yT0qHpb/0vFepX32T6eah6rzLFUqPIlAWA4RwmKgRzhJtk6hY5KonyWhOyQtfhOfRi6MwOBHxtubjX/+MTz96D98uGcsGosLHPRoLq0UyHJzsHiAitMtjpAAdoQiO1XJF6zw+JpqdKDQBT2NbRIi4tkWXGqE1XYg0UWI9tLYjSoUyOqklIXAC6jb13QQh8Lnito5FpLjgln+LQwDBdniXfGea5RKlkgJg5zSyKNnav8b88QKhI9FnL5IYUbn3UgpJkIrB1g7LVrJYrpLi3ahiMlSE0FA7wfH5isbBntHU1gEShUBLs0Yqn3fqOJyOkLqkHI1p7z3CrlZInUQplA84rfEiokLH/PALPvj5P9EsW974yb+j2N1NVR4v6bolZVHwzp/9j+wc3OK8bbn3v/+/iOeKTpTcO0/o842JpNKBInpubA05Wa1Y+YBQOqP+gUBIIFnfhB7I8rkSXRha26I7y1BLqigZDoZUuuL+omHpFLPZOd2qI2z3/a6C3zf++oNHyGp3CGSMzE+PWZyfceuFl6h94Dcff0xcLpgWEmdTr0NVDli2K0ot6AqN9RbhDSJbZ5RKolTakwJJoMgJRYum8Z4gNNFFykKx8p5l29KFRMEOMWC7Ducsy+Wc+Xz+nCbiYmxWFi4HzVwkJvlnWhtWq0UC/5SktUmAQimZKPI+0YwTtf+CJSBIkvwxeIRWeEkKTHM/bV/Z7kFXpZ7si1nv1VJk8aP8JoUCWWCKRMn6qtd+9XU2X+/Lxu+i4PXnS1/96ZkkPeXOGLPup0lxgUZKkXuWA94lj0FblkmpM15Uky7iu4tzNoZA13acnZ4yXywYTbYgXngRrsHydXLEE+fp5vVcpRr+PgnipXkN6TP3Mbc31DWff/Ab9ve2eO3f/iUHt1+C4ZQuCtziOFHig+Pw9ISHx0cMi0gXwcWIKQu2hhU1nuZsgVASJQQuJukT1b9XmUzsQ7atgdxzi0D4lu0qcHtnwsFWSSWSEm9nJW3TEKMkUOGFxkYDUoGqicJRVorxeEx8hnHofw/jO58oPa0MvPn16u8kCo8kiOymLj3FcMyr7/yATx485my+RCtH9En3XsmNgEEIhBKEcBHYJvnxzZvw4jVDyHz29U0e0MWQ4fY26I5GrnCzFTbe5d7HHzK9+SI8wwUqEYnLKjL9MPbNoNA7Rqdm30C0Lc3shLCagV/h3BLnGpq2YbZccTZvaa1gWmpcjKzaBnyBDwJPxEiVvKV6NEeIVD2KMZsuplclRISzTMaGF67vIH1HbQVODGkbyaOzBVHAsDK0mVbkMTgiutBs7bxA6/+Zw7t3KX/5L9w4OECUJeEZ+ANt0ryuPn4VYZIylb+tTTSwEFNzpSkKysmI7b1tikFJY23mp8c1nW5dUxLiUt/b1UMnVT7iOsFCCLQUXNsec31rROEbdJHm9GoyFqTM/i5XBUe+4YQgilyJ9czPzzg/P6OuW9S1m2zt7KKLkrN7dzmyDxgXgdXxITGA844YBcIHQtewWi3pfGQwHGb1o1RTaJo6qYt1LXW9ZFUkv42iGiSloRAwSoOQRHzy8iJSFCbNBeRek4tDHv44qHjWB2zjCK3Fdw5vLaPxCOUaogscL1Z4NWE4TLK5Pno6Z4koBqZAFxrXdUijccFzetoxrgwDLSiMxnvPWdB8cdpw0mgqXaCMoVmsskgCOblWSJUqmc9zDIYlRg6ohiO2xmNwPqmXRpWMGn1AKFjNT/j5P/wN9z7/nFu3XuPay68TtUF7CzFyNj9lMKg4uP06ajrk7PEjOtumSrAsaBHcnzXECHsjyUAFBlqzPylZnNZ457ExBXvE3jjbEwEtUsIuJNgYaJ2jKgEVkGKFCYG90RadLGnOG5pmxWy+YCeSac48YVL6TY3U35LOAFzH8eP7EAM7+9d4dHTM4+NjdNegxwNUcBQhAYhGCAiOYVWy7MK6z0nE3GeDT6CGAKMkLlpIzl0oXWCIGBWojCG0Pje6577JvKS6rmOx+HYSpf5rHw88OdK+LGQvSJSoeCGGbP/Q07okkUzJzEE8IX3KMggGRYUymmXXUfsGSP56EjYq5ZerXP3eL3p+Xj5bfBDJQy8AUmPKEVJ/PcPezVjoaf2ZT0sk1vFMvFyt6Xu6INEXUrtCfn7vk6y1D3gfkpl4Z4nRIqRHigTkpSArQAx45/E+tTak97VZsXK5cpSMepfLFSfHx9y4cXNtYh+8J6iQE6vL1/G7Kkn9v7/qkCIiraOLkSAcq5MjlkeHvPPDdzh47cdYIbEB6CwyRJwLdE3L7GzGsDJE19C0sFyBKRVFaRgMBmwFRecFXiQ/TonA20AgoqROe4lIeswignIeE+fc2Fbc3iuZFB4tarqo8EHTWk8QhqgrbJB0QbF77SZloTm+/z4x1AxHBcWgTBXUP6HxJ5EoPQ0VgKfzUtMfXUZDpC4Ybe2yf3DA0dEhq1WdelEIG6XbtKFKRKL/iL5kv8E950JJa3OzS47eAi0V4+mEP/8Pf8WwUJw++Iyzux/jpEKVkpBV957VuEq56+fCZ0WaEAKGQHQ1Z4df8Okv/5Fu9hjllzRNy7K21K3Hek2MlkIn497R0MBJzeF8QR0knS6QsqAU+WC5UuYO0SNiRBuJ0wIZDPv7e0hVsVjMaRqPJyKGHqWgcZ7OaZwjU+/y5iYE1WjCcGsvq8yd0NQLBpPtZzpfTyvPb1ZkNvuvui5VvbzzydBYK6SRTKbT3KBaJ/UscVH97DncfuOgehrKuTmHSifviUEh+Yu//Evu3LrF6dFjHn/8S0Q1ZDjZJiCRUqWE4EqC9LxGiOmw8q5DCdja2kbolmr/FW68+johON6/f8xpGwlFJNpVQul9xLrAomk5X66IFGxtTamGQ+quSXKpAowxKJFUkZz3CKWIUmIzvUVohdCaqATBp/k0SrI1nVAWF5z+TVT3j8WJvHWerks+ArZd4oNLin1uxnikmNctzXyFDBUCgfMW6yMogUMQhEQogYqJmlIqzbgq0dLiOs/KOw5nDefWEESBUobOeRobkmF2BlJiDCn4e87JY1EUGGEoBxV71w6YL5Zp/SPwMvWdqmB5/Oghn376OTEarr/4KuVoSCtEMiBuambncya71ygGBZ7IbDZjVTcXYIJQhKg56wIez/ZAUxjFzkgxWy55vGxYRs0wU4HWfQ9KrouPyW8oEBE0LrCyERcgxpbCNdwcjWm6JPc7W86IwUNIKlZfsRDwtYeLSQBGxQDtgvnRA6pBhZ5s8/lv/h7fNRghkrKa9UTvKUtNOShx8znBCcblCBsEHQGMxruOGCUmwkjBwAgwkkUjk/iRCEjZIRWUaspAG0LnMSrgvEUqQSDQOc9yWT+fiXjK2ASn1vts3kMAhFZUVYWzFmctMfcDhXBBoQwhEmTM1dewlgfXUlKq1LNrlCKUZTJr32B39K/dn8NP65eJ/fv0AowiRmidA6GQSm+wXH7/sZn09OPL4qTN5KH//f5sXyce2ew1QOqL7Ss62QhVC0lAopB01qO0IXhL8JYoRJqjQhGcR4lkTh+cIwSQWV3YWp/+HWwGLASgcS5wdHREcBbhC/CB4DxRe3wQiQIZWQs9fVmf0tUk6kvjxi8ZIbRIH5C2wdklx3ffB9dSDSfJfy0mw9cYk+iEc55l3TBf1RRSEnzHUIMTsJwtWSpL1BVkryMXItH3/fE+g1mZGQWAZFhWDBXcHhl2JwYVHavGJbuXGAgi0HlJ7ZKq8Mo6ppMtXjq4RWznOWbQECVd2zH4Vx+l7974skX9tErT5ugrH1IpirLkxo3rfPLxh0itiS5580Q8fV+bzBUYqVKfRJLNvOjFydvFpU04vVCmGEuFLgYMpvvs7GwjgW55ipSwvb+FEpIYn11F6eq1J0507xqdWg9l6Hj8xcd88M9/y/LwC6KrWXQL5ivLfBVATzBGYeICYofSMC0MrxYFlV5w/7xhFRyesEaUIKE7/UGQXtMjRGRQloynY7QpOTpZEjuLRiELmSoDZaJwtE7QukjwFpErciARxYDX3vkhk+0dHj18wOMHD5nuHKDKZ0hZ3Ng8e7Rtswm7PxCNManCoeRaVEJmnvDOzjaT8YjlYglYvNhU2Mm/KxKlM+TkqSgKpJSsViustcCFypvIv1tVQ/av32T7xh2mO7vUsyNeeet76MGYIHU67AX08vj99Ty3EUl0gJA29NZaXnrlVZxW2NCCUChTIeSQxSrQhtQ/5DqP94DU6PEeA2MoqxLnfVpDoV9fySNNCInWJtFehCQIR2+cLGPivgMoESmNwtmOni6bPof8djeS+m97nNcrVo1luVxyPjsGDSsnkFQY11JoxdBIFlbQ+YgsSkRU2ChZdEkZUAaPD8losRwWBCVpvOJ0UXO+alh5lWTHJehCUDeWNidKaV7SZtX7eD3PIZHoaoDWqRek6Vp8SPdGECBjh5uf88Unn6DNkBfeeItbr7xJkKlaQYys5scsFkteeOktogTvHKvlMnlwxbQH+xCZlCXXpgXtasnxWc2ghKIs2R0OOKuX1DYFNaiLRnYfAspoiHnfF0l+NyrN0rcsrGWrlNCtKIXk2rCgXXgWizO8s6kvND4/TmNE4L1DRMfZ6Qlnp2fs3rzDqm55+PAQKSQHu9sMJcyaGctVQ4gjKIdoM2C+bCiqVFkUPhCDw4eAC6CVRBcFZSmYEplbm/sNQRqJFoGBCkwqTd1mmfKY1ORiIJnZNt9OovR0YDUBDdAR0HhdoosSHRqCq/FhivMC70VSMyWiRAQu7AuE0viY6Ig2RkxWH9ExoGPKk0NqPE21xRjWqrlXqzqxp/FlMREtNUIofBBEWYIuCOKrnXmb59mXJUxPq7pcSow2HwvZQiVTwUw2iRWQ+mQIFFojYqSV0AWH0gVSK4IURJ9ihKIoiCZmemZPRb8A+rx3tF3a20KISKWyCmzk6OgIay26DKgMaATv02tsUPc2z/SngaBftkZ+n1HXM07v3k893e05Dz/6GUoMKYYTkBJ68Dgr49rgOF/OOV+2DLVk2yTpbzUaInAsHbmKlPdhH7PvX/JkI5LNsNNnmaxFUoVu1UW6s46Yz0MlIkpGpPS0wXJSe2oqbFToaUFUOouJBKpqTFVNcD7Ac/bQ+7bHdz5RukqJ6h+7OjZvjlQjyr9LNp2Uiv29A4ajCepsjuzaC+O4mCTD+/4eteGF48MFra6vVD2x2YiEamidRSFUgVAVk+k2hzJQDQdMdvYAifoGUNwnUKBMKxA2cH74kF/99O85e3AX2iXWNsy8JRZTToNlee4ZlIJhMUQS6boa45YMyhHXd7aQasTD8xbXq/9cQWakEFmBza+TJ+cDRyczTOjYGo0BmdDxpsO6AELRerBeJM8AJTPil6p/L7z2Jjdv3uLv/tt/5R9/+lO6KHnr3e890zm7dFBsPk5Cqbz3uOC5c+MWgYhHsmoDzisqYTjY2+dgd4fT45Ps5ZOUF/sn9C4nkirT/WLEB59FwZOIQwghoZW5j0YKwe72hGr7gGCGuMOPGQ5Ktm69QhASRUAJBSgyWxkhek58qqI805LlU0dyR1cCjFaMRmOm29ucrWpCbBEUCa0djWjbhiZ4vKmQSjAqhmzt7mOKgrqec3Z2mvtBEg1W9omSkPSGn0JEpAhIZVBK4V0HPmRp9KQYWJWGrqnx3iHzfG9+pl9OwXm+Y7ZcMF+uODk5Zl6fogrDycKyXClujLZQpkWHQGsbakBGQxfACUnwAeoWIwK1FUgVcU0DdcR1EKLGizFRa4wUVCJQykS/jVIiYkw0mAiCb8dbqmkappMtVFmwtbvN+en5er8Gh6/n/Obn/8LDB4959a0f8u6P/pxyNEo9Zx4QkcXJQ4KLTPZuEEQkOM8iG0EjZEoIEeA6qigpTMmiDayWgc5HhB4zGRcs5suE9MsL/n8kJvqfyA3jpOcUStK4luOlY7ssqEwkdiuGpWJroJmfHNIsF0xGoxQ0PUdKo8QTbMvp0RE2RHb2Eu3ufLaAAJpA7GrGpcG2HbN5DU6hB2Nklwy/tdaY4GjamigkQSgaH1h0HVVhGA40O1ZxXnsaC3JQUIoA0rM9LDhddjTZV0hkDypnHV3XPbd56MfT+lDSWSVI/PDURxMAU5TEELFdixgm+mGMqaqtlUM4l3mUMQWt6yBfYp3Hao+JKlVNjCGIgPV9oN6rcva0sgvhAki7dAK9xFogqjAlxUTx4ssvJ7NZ8dVihasUv83EaXNc7eN6WkyzTkD8BShsjEmP+15OPzFClIBhVSIEeCIuy2kKJddVqBACTddm0Dn1M0eRRHsiIvcx2XUM451HqMj5+TmruqYaTtZA8Cbr48uu6Wlr4mk/+33GYjXjfHYK3Yz6+DO6+RHTa69BMUz7a79w8nsPAhZNTWM9vvVUQ01hChSGkZIIJ6idz/TrZHStZdrjo8hAvOpB+UTlzHAqSwcqCgZVycCUTCqNzlThWZAcNXNsSIbkSmkkAdutiDFSFGNu3nyV8XQHob594PB5ju98ogRPoh9XR2+Y1m9ifcAupQQZ8TEipWFnusvB3jUOjw7xdQsiVb1DLxsqIO1sKWiLkY0+kN9yw/W0ICmQKjdvSkMx3EWjGI+30cNtglQocSE9/izG5gan1IXhYcTTNUt+/k8/5cG9e3TLGmMKhlvbqNUMNdqjPj3k3DpaPMYo7LLD+RojNEstUGqEFIbpqGDpfKKiZCT6Mu83TYIPERkFPnuQiKKiQ2JdQGlFs7KsugDlABsCrQ94JAgFuZpndEGhU6n5zbe/x3/+P/8Lf/93f4f6mnztzfH7bJh92Ga7lNhVZZW8ooqSvZ09tNIoKRkNh9y+fZvP735Ba12urF3MheZC1lyQkG/v3DowvKCEpQogMSIJ3Di4wXAwQHnLyckJB9dvUpSDdKDKK+//KQfGNz1CTNWsrqmp61XqMdIFg8ogRYlH4Al46VGVolRFQpg7z2QyYnd7ipCKxeKMHtHoD3Qh8hpav1ryDhIIYkg1NKMNSX0ywRpKJknxul7RNg0TIS/REv+YDGdFECzryNH9B7ScQTGgW8C8FbgYCY2ntZbzVceysUQPphygK41UAucjTeeQUqd5tn0VVIBKprs6OAo8pdEECa3rEEik92hapBIIUa05/89zLOdL9nYNRVlSy5qmbdN6ihFswye/+RX3Pv2Ml199m5fe/gHFeAoKRAyYIHHWMj9+QKEMw9Fu8mJznrquk89KCKkKFKEJgUVrKaVBKkN0ntmywyuNk4qyLFNAFjYUs6TEx5jR/ZCVoSTLuiH6jjMpOVkJxlOJiR4RWraqksXynKNHD9nd3aUoNPIrBrhfd6R4yhO6mtnpCdpUmGrEFx9+QFN3VEKwWq0ofU2hNIPhmNWspmkcGIkoSloXUKHDGAVR41tLkBIvBPPOUbaB/WnF7qSitTVN0xEmQ5KEu2NsYFBqbJvUOiUyH6TrzfC5jk2a20Xz/4XZqyQxLUIEoQs6F+nahkHGmGKMayVXaZMTbFofIVF9cwJhjE4Vlo19xWXaXDojLwOKl94HPaAr1gp6Ine4FWXJ7v4+ZVGiv6KA0dU9brM/czPJ2Bz9Y307weZzhZiprBkkraoqgVUhZIYNqEJm2fCA0i6Z5ipxqdpjnVvvNYlZYXJVI5+DIvlVJrywVzNOZ/FqtWJ2PmN7dx/nLmiRV695M3m6Otebv/e0x37X2NnaY/edHdrFCb84uosQgtsvvoSqhsmAuo8X85kUgNZaIpI2wv3zJUaks0obQ5DghKf1Lv2eUBhTgAjJhJbeWzCtG+c9w6rAKKjwjAvJpIJCOgo6hqWmRfFw7nAehEjVUC0S+6JtG6KQDMd7bO3eQhbDC8/BP5HxJ5EowW+n3z3hXbFx0wgpE/oeAt35Y1aHn1HGjlopokuaQVJe7OlRBGIU60bGvooipVw/1r9un5w4f5H8lGWJKQqkkpiqxAxGKFUgI8jYo/7Pbk42y+uX5ig4Hj+8z6effExTd2zt3ODt7/+Ioij42T/8F05XNTZ0BOnRRlOo5C3iwwjQtK1m2VkaHF5r3MZG0/Or+wNBCIlWBSG6xNWH1EuiFJZIwCMdLLuAlQUKRfAWG2wSaZCaKGSuJkDiMxhuvvgKP/zxgl/84ud8+MH7f/B8XT0onrqZ5h8HH3A2YDtHoSLDasD+3i4xJJlOYsmNG3eYTt+jrluiS5SoGEKiF0iBiEnp5mlIV043c1UuUTcHZcELL76Ymq1XpzR1w+1X30Yq/USfU58oXXrvfPN9JxHwtuPBvbucHh9hipJqOKKclAih6axFRtAyVRaNlAwnY6z1uOiYr2Z4H2i7Zn2Ae5fWjNIaKSAEtxa3SBeXfKqCt6nypNL9GUREaoXQhvlqxXy5Iom5ixSw5f/W/krf8vjJv/+POPeP3Lh5wK8+uAtmgPWJfjZbNKyWK5q6wbqIDVAYQzUYgExGjlKZbLh40VeTS0RAxIiYfH+0YDQc0HlL6zoiJqHhMmSu+gXd83mOpmnRpkBrTddZxuMJSils13Hv4w94/5c/543X3uKFN3+E3rpG0AIpOoQXyABd0zA7ecxksI3UJd47rHXUdZ0b7hP1jgCtKri77NiuFAUQ8h5fe8eyC/3dB2ycIQBCJVNMQqrWAtY5gvcsXcnxKjKtPDtjhY8WFToG0XD48AF3XniRwph11eCbHj6CCg63mnF+csJgNKHzcHR8nIAXlRQPfRS4CEoXDEYa72HZubSuvKNpO4alYVhWCAErG7FC4SIsWseg7RgWmq1xycnJnNYFQqmRQmJiYKAF50ubhRCyQIaSa+rQ8xyboMgTwJhQSOFRMSZTXV3iAtTLFcMc2Id0c13ZRzMYQZ9ApAqJdw6Xq7MhB7RJxZF1SXstrnTlfaWEK9l4SBFRIiWX1WBAWQ4Q6qtTzX/b/fx1wKKUyElESGdNTx0PpOSmi8nOQSqVvAc9uJgErjKyTAwBF0P6W1KlcbVapT09X2OS++6p/OkzCN4TBFjrOD8/T8IQ2YsJvjzh2UxKf9s1f5W50HqAUiV155h1YIohuwc3QBdZ3Cr0swVSoI0BmapBHoUTFa7rCM5ilMU7hw0J9HIITGHWvXBSySQQlmOJ3mfSecegrDBKIkTqTfIi0qKYNzDrLIczj4tpjhSR0hhClNQ2IHTBZPsappoidEnU/6p6950cT0MJ+tGjIZtow7qiFCNaRJrZGb/6u/8fZ5//EqGHxDDMCRXrxrmQTk8CmzfiJpHv4rX69+JdUggSuZdpMBhgsgJXcB6HZFU3uHqJGe4RvyLv+LcNT9baRxKEz3GlQARomxWfvP8LhuWAO2+/yqvvvMV0b4/zkzOqwZD29D7CW0S0tF1gpSNDM0THbIDmJU6D9xFPvuk7mzYrKQnO5c8lN8DaZJgqvEMUCTVqfcB1jhB9anZEI7RcJ1hN29E6l/2ALuZZyES/KgYjvv+jH1ONx4xHoz94vq5unE9reI35cxyNx9y4eYuz8zl71ZhSK0bjEefnp+zevIkShoMb13nhzgucn5zifJMsb3zMnkuSKGKqrOV1uKaDkJR0hBSZzgGF0hzs7XLt+nWUgnZ2iCkLBlv7lwL931YVex6BrwgBZy33v7jLaj5nZ7diPJ6ALrHWQxZikDIpmYm86VubaJdN262RwYum6YvePyEUSl2WO+8bq+XF+QtkBTdtMKZgNpsn48sY1z2DQkDqW4J1Bvwtjusvv8n2e5+xf7AL7wUG1SCpT/qIs5Gm9XQOIPXzVcMhRVXRdi6LLwS0khiTJHqttev5iyFgvKU0kvGgJERH57rENooRoUAbs656S/38g1hrI0VVYYSmayx7e/vIGDibn/Drf/45VTXlpbfepdzewqteNhjA02Lx3Zyu7tjanyZkOzMBQnLlTfz+4HI/iWQVBG7ZMNKaQqXeI+0dBZE2QCAiY0TLdN873xsZJ0BLCpEk2WNq0O6C4NwKHs8dpdEUJoJbUZYFi+N7HD+6y3g8RJfVc5pRQXCW+ekRTb3k5rUDVnVS29IqmXueO0epJNpHtG0TdTckarYLkc4HhJA0rUUhGBcGomXuJTZC7eF82TEop2yNDc1yTt11dMMpZUyS81uDksOzBhtTIh68RwuJkn84C+Arz8hTwK8+kUnKfr02oUCVI9Al8/Mzdr1LlHvn8LbLAGBfmcp9v1lKXqlEzY+YnDhkwFD2PThZ8CBejls2z59L/cUhUujk25XihxJQX3vHeholbbO6dLUfaXNcBpxZV3mklJRFmQSOQiCg6KzD2XyGSk0UKld1WSc1/d6UaK5yPRebvUXrHt1ckSGzVlJC6jk9PcX7QFFd9BN+WTvGZabLk/1YV3/39xlaVrgOjg5POTtZcmMwwQy3sMKQetiyJ2fM/bbS0NkkzBCFxAFtVEliHrDR0zqHiwlQlllqPcZkEJs2oBwziES5a53DLVbMlaBUUMqIUklWvAmCxkUiybBXktZoVVWEGLHOU5Ulo+0dMCVKGcwzjEP/exjf+URpc5PZ/L4fT7vpU76QaTcRZDfn85//Nx599C+I5hQnLAiFiElhy9MjAsk3SQpFBFzfnCvyBruB6m++J4lEiuQxMJ1O0UWBVILV8QnWWrpmxfzkEaPdW8Rn+JGFGFCkEnggEkSEIFFRsjw+JDYz/v1f/hW7t9+hMR2dW6JLQzEZpZvaWaITNFHz4NyyOywYaoXwqfnPSIEJ4KNMKHfnsCS0X2fagY8hVV9cR/QB13U4r7HOp34RkXokYkxy/gaL9Kkxse0cbdsQgoOoiZmyEfPfIKAcjXn7+z98Ktf6q47NwHuzMsbGodUfKkVZ8ebb79A0y7UR4XA65qNf/pKX3k5VnnIw5PXXX+eLzz6h9Y7oPcGLZELLBo2h/2/zAJO53iESHaQsCt588w2GkwlCwPzkPtOdA+RwDBl5u3rYsvGcz6s6oGKkq2tmZ2eMBkOkkBSmSKpRwhOloshGnl1n6Xzk7HyO9xFtCsqyAi5ocVcVoS5GTOIoGZ1PDakx3YdJug0lodCG8XhK23aURZknJR2mvfz1leLbtzaEGeIJnJ0+JrrAoBoROEpgA4IgdFJyc6m/oyjLDBokCWiVr7tt24vn7CvbWlEB09EAKSKLeoULEZFVybRIfkUhiFShVKnx/nmOEBWYgocPH3F4fMSrr72K8pbHD75ge2uPt773fcrpDlFLBA6iIPqIjw5LYH7ymNWq48X9A7RRCATWJWomOYnMr0QIaU7rEOkaSyEdlTZIpdEEbDJMSupiWrFqatJfqDynGiUkQnkiEec8q85SaMPJKjI0jt2JxEiLsEtECHz4q39ib/8aejB+PvMZIip4FrMzvHcMRhMens1o6poQHEIp1GBEEIK2bWnahkJKvCySOWyXBBrKosA1DXXbMdSakVF0CDoPNghWXeB0VrO/VbK7NWSxtLQ+MEIhiQyNoVTQ+YjWiq5Lyab8lipKfTxwyRogXoiXyJiC/3IwoqyGNPUqUZWMyX+nEhVOJLpzjDKbofZnP2umiRAiKeflHiQh85kiUs9pnzFteuetY5YY19T+1M4jGA6HKFMipEJ+RSuRpwHJX3Y+/LYk4RJrJIsFFEoxGAzRUhFsg1eJXpYqYqkSVA0GSF/gXJs94FzqNYLkL0Wi+0qZ4yvvkT0IGD2RDqUN4+mErutwziVhhPkZIbgklhASXVb5QJA+xQkbn/PTzsZLdMc+ZrvKQvotI3qJbZd8+It/YX54zM1XX0ZUEwiZZSQVhKQ8F4XA+YK6K/FhBRJkTPYsLkS8NAhRgBJo1ffPp7XiQ7qnQwhoJXIvV3qPyYgYbIi0CHROpL11CJGSSiSEDa+wQku8XRFsy2BrwHBrCib1QxXPS5rzj2R85xMleHoQeJWLuknB63H7GAIeWB3f594v/waxOkELj4iOQgVsTMhSjCKpYPY7ICSTsf51c6Wp3+AuoyGpvC5laurc2d2lLAoUkfnRY4K1LOanPPjiE268/n2Qg2c3MbGvSKQ+n0AAEcC3LA7vMywLrt+6ia8MMVqkUGipGAxG6TDIKHWISd7ybLFkJQWF1qlKRaT10DhL01o6G6iqap2E9spZSiuELBL6lFXcLAHpBdroXLmTl5XlsmCGtZZNyttmZSk/8AQX/OuOzY1znXTk16BfRzIlygCmqlCFogtJ0Wa8tcNoOKRdrhht74HzHFy/zptvvMny5z9jUdfE4HHuou8IwqVDtn89IZK5XPIqUdy5fYvX3nwTXRTY2Qltu+LW9VTe51J1JT2JzOWVq4nTs0gof9uIMfDwwQPOTs+4uT2ldTFJwmqTkKwoKKsK53wWuYCiKLODe2ow7RHai2pRVrDLPXaJkpgoeDH219hDGQGJIEaPyPKqVTUgBC7k2PPvx3hhTvjHQL1DaIJrOH50nFQ3RYkLKVCSWQCjaRrqtqEwBmWSvLfNHiXB2exXlvohNoOgQERUChcDtq7pnMcJmXq7ogA0PnqcA5kVtp73nEzHu5SDMQ9PT9i9ecB4MuL86IiPf/0bfvCjP2f/1m2cSjLOwXuiD8iQhFKCs8zOTgHBYDRFaI0MLilCiVQBWgegItEyfRQIpbHR0VnHyntkhBhFQsKloDApgfQhMQqU6u/TmCjZQRCFQpoKgSFgWEXPYesQWrA3KJGdZTAqqZczPv3wPb6/c+25zKf1Fm8bTo4P0/lVDTn87AE+eipdpgQ6J34tniZKZo3DR491jqbrEg2ybdNaKAyzzjM2ii0VKBTM6sDSReoumSNfG1cEB95ZOifQQqCkpdSBOiQhpEBKwnVV/O6LeMbjqphB/1gIMafBMZt2C7SpGI4mnB+e4J2lLIqMmSX1slS56Nkpiriu8aTn7T1/ui4lSpEr/TEbNiP9+9gMzqWUef5yrB8Do9EYqTRKG7T6ahW5qyDg1XnZ/L2r83X18RCT4h0izZcEhtWIqixodKRentGsVikuQlIUFVIXGfxTSdHSe2JMPeRe+fXn4rzDBUjsAZAxCZIUhefg2jVMNeTx8SnWR2z0zBZzbNfAcEjP+ggBcpn9ievYvJYvm4evIu4TCTx+/ICPPnyf5fk5TiqiUiRg5YJCT6b/Wh9wLvUa9e9PSonK+xSwBgA3K29XJe2fXMtxHUv12ujr8z5sqDGTquGF0dguJa3KFJhqsAbe/ijOw+c4vvOJ0tNK6fBkSTv9LCU4SU44/b72S+7+5h+x5/fRsqMoh9zYfYlZK2EZmHcZkQyRnpMecyAmZTKfvRg9CpR4pH3SpETEaKiGFfvXb6B0gWpWtOfHTHZvcDRbsVg2+Kxg8szmJoWMBAIhpg2E6GibU2aHdxlWAygMTtrsvC5QQjEaTTGmzM9BcrwPsHKeZRToLqLzDehCSKV2IRiNx5iMuvmY5HR7/5HEOU6bQfJaSk7TZFPHZEiXVHCSF5VKvSptu4GubZqxJunsb6IZfzNh618bLtZWyFUtqTXRCzQeHz1bB7d4592Ozz75hNd/MEEoRTke8eY77/Lo8QPu3r+fPo3oiEESvEcl9dB8tl4YMoYo0EpgJEynI/7Nn/2YwfYOWkRmDz/HVCOqretIoTPlrJ8HEDIdYFeTgOex+XnvODk9ASkYTicsj2fEPgHKa3A0GqdAyRgKXbC1tc3Z2YzOOi4ocFcS4v7RK9fQq0Ulegb5YGI9qcFHtCqSYpQpczLVf5798z9J1fg2hkIiYuDh/S/QqsAUQ1qX1laIIFTyFjGFYTwep4A/XLxv512ij2Xq3eV9MfXcRCGwIZVve9GHnkYUvcRHmfsBM+L9HMe1a7e4duM2B5NBAj+Azz76CBUF+zdv4WQyYPA+EF2SoO9BKhk9q/kMaQrMcJxDtxQ4xIzki7BBy4kCGTKlGoXQqWHchlRJEnlvaWxHT/FzzqOUBpJCoCQQgmdQlrk/VRKFwirNUlhO2oahTk3W0nUc7O9hCLjnJIsdY6CpV5ycHqOLkigkx6enF9V+5/G9R40UmGqApaZZNXjnMSats7ZtU89NhNYGxmXBzmjAoLW0tmHeOKzrOBKWUbHNYDjENwu6tkOKAapUlFpgolzHhkJKiuLbTZT674GUTIdAEJIoE0UTBMIMcK4Bt2I8qhL7IVcKZI4nApdL0t4HgoDGeqJwdDmZJsY1tS+pKab1KVEpOO37nmPPMsiMFxESTVEZyuEk9f0I1gqpX/XaL113/vdmde1qIgl9MigvBDBInyEhC02IZMBelAWj8ZDtoULZBecry7KD1nqGg/ThhxjWa6p/LmstWmt8jLTWoaTOQITDuw4jYX97m1FVUVuH7WwG1CSruqNt2jVQuEkffFpP0uZ/m9f3dYQcIO2riTEk2Nm/RjnZAm0IZOPb9RrL6yQnMkKI1N8Ye1Prnm6fgPX+fV9NkjaNeNeMgUxFRoR1dVIrlYBxMkAak6pujB6tDGWhqVdnSe2UAqUKhFJ57/tX6t13dmwu9qtJ0sVNENdNuQrH7PEXPPr41wgs1dYu11/9Ma/8+P/G3/3tPxLuP8TNFtRtl+h3gVTfJOaSe36t/Hoyu4/DhnwmCQ0qjGR3f4+9g+sYpVmenyAIvPTWjzl3moObL1AVFfZZijkgQbi8nSoECkLLcvaYen7M/p238VIn0YYQiUESlUybsSlT8J2bnF0IaKUBSVSKIBRaG0wMaFLyKdHpps4bp0ofxGWVMSGIwROzig1CEHwumfuQpNhlBJWC4LquL9ES+s+2R+K+jGf8dcbTkLanIU5rygVPelLs37rJhx9/yCfvv8+rr76G0Yrd63u8+6MfMmsa/Nk5Prb4LiCyxLAQ4HMSEXKwL3PVpBoMefmlV7hz50UKXRG6U07n97lx+y20GSNEqib0Rsf9f2Lj4N28lm86WWpsx2x2xrXr1xlPJxyenGeqgELG1PMx3ZpSDQaEaJKPT9tBTOiZ94l3HmPAOYu1dl0d2WzWTUnlxXq46DWKqbdEwLAsmYxGDIYjymqQE4jNqt0fF3LmlSBozelixe72FsqUCZQRmq5rKIqCqiwIzoNQdG1LCAIR0pwJCS46ou0V2gTEgJIREQOjcpwqeUESpULE5I+jUeyNDS/c2OX6nVdQZZkF5p8v/WK8tct4ugXjVH12iwVN3fD2O+9iBgOiSD0iMSZxDynTmhIogl3RLOeU1QhTTVJWGWPei1gzCUSKMBO9CrLRbk+xVSipe5HNtCaReV8CMgmbEPDeUWhNoVPfRaGq9HnYFisr2qCZB8npqkOVkqFyyBh58c6dBFA9hyFioF6uaFvLYLyNzY3ygpgo0Xnph5g9ynLfW1kOcDbdc0XRi2t0BO+zlxCUpSLGllEJ1gmk1yzrlsNZzc29LYwWuHaOlx6kojAGX3e40ELu8yzL8rnMw6U52UDjNx9L+2VMps0kGq8UEmUqmmZFW88ZVFWfl/eo67pfJBEErgTmAWzdPpF8xJgsWBMlNAEVG+HJGioKIV7Q0qRkONlisrWTRW0uWBZfdTytNeEqxflqr9LTqjEyypyspQTFFAVFVbGUgoPpENmUNE1Ll0VDVmHJsExVOa1TrNAnSNbaDLKmJCD5MUWid+Ad08mE4WCI6xx13eFdhKiIQdK2ltVqlT2dQk78xG/9rK9ey9U48asAZ8423Pv8Y67v7/D6a6+CqZINQbaMuXh+gZCaoixJpsGS6MLGe87y+YRM2bt4b/2ZnhQEPX2PZPp5DyAn0CND0Over17UJ5IUG2UUqeeNyGI2QwhwQSB0kSrxWq1tNP5Uxp9UovS0JGnza18c8CISRMAIx+O7n+Nrh6j2+d6//U/c/tF/pFNjXppbgtSEe3d5fJKkHF0ycyGEVFHxOQDM9fdc8syLd51ERZSSFMbw6quvMRoMkMHy+NE9Rjv7XLv5Am94WJ4nJaJnuj57Kc0QEDEJSOAds6MH2Ngx3j4gyhIpLCKAE5pOgCwrdJWUdRLQFJFCkZpQExriY9YOU6nJFCIiI4aElARFkQ5hGVPS6PsDI6Ov6c/6TcCgdeqnci4Qo0Mbvd4YwpWN+9JlPqNg9yqqdHWD3aRVRiEuuM9EIF27LAt+8JM/44uPPuHX//LP3H75RQZbY+68+BI/aFr++V9+hhBzupiam0OUSKVprcfnPjKlJKWA4XDEn//kJ7z99tuMxmMUksOje0QT2b/5OlINkDqk4K5PRDcrbN9CMmC7iF8tmEym6GqMjo7YrVDjCS5TASbjCWVRMls02LZjtVgm2WVjUtC78Vl779fy/lrrfCjItRJlf2lKJjJoiAGUplAFB1sTru9vUwwHeCUBj4iWKHROcvu5ev40s6cNoQy3X3iZe+//GqFLjKkSshgsMSbJXee6hNwWZerLysmAJDnAd22HkorBcLRunFcyUhUFyhTMV3M8aQ+TMq3cotDcuXOLQsL+teuYokgeG88ZVRxuT1AmqfbJGHj0+Iij0zO+929+gtQK61zqG0JmdT6ByH2LdVvTLBdsbV1DlQPCOpBMBpWZAEOICYnv92eyaErwSeo7GRqnv+2VpXxMVQKtUyAnZATrU1+GEXRtopCORjL5nxBwTuJ1wdx6NB5lFKen56zqhp2voVj2dYYAlssFdV2ze3CLpm2pmybPhMhnWeohVSoZZUupkColocGHTBkjq7alhHFRN9hOU5pIqT0qtAx0gQuGk3nDoCrYq1IQ3VkLskPrMUL6ZCAtNUrpRNP+FscTZ4kQWamJVDGSimowxIfIcrmiKIq0T1xRGF3TzK+cHZuiTlcD8ZAltNdrWHJhM7J+PynJVyapvhbVgGI4zIqx8ivTqJ/Ww9pfw5edrVcThzWrog/A40XiKLVmOB7z8K5FyCHj8YTBeUvjAkEnPz+lNda5NfNE5fgpeI/K5rSd7VJcFRwxBoZVxXA4JARBYzvm8xUx5pYInwSzlstlf7vn9/v069+8nnXC95R+pK9yHnz60Ue8/8uf8/oL1zk+PkYMt3nBB7TKn79MYEsAhFQU1TBV9LPKoo+ZFidFjrEy6yGvoc333LcjKKnRWmSz2ZSspv36gnkj1YVcsxCs718poSwNBId3LUYKhCpBaoTUaQH+icmD/0l1ZPWL6uqiv6j8pMUklEj+ScFzfnbOvI2MX/4xr/7F/wO5dQdVVNy8ts9wUPL2W2+ytTWhMAqtFUoJlMp9AxK0ltl7JK49D6RMhu5aglGS0hTs7e3z+qtvYpRiNTvh/PSQreu3UMMpewc3knBB03xdkOhLRqYkkZVpnCDUDbPjR6iBoZzsIfWAQkhMDhKcjMhqgK4GSJ0D8CgwMrcHeofvOrzzuQqUKkHeB1zwF9xeuXkwJORsjZYlZhibfV3OZTWqXDlQSiNIyl1XR19ehw008BlVlH7bzzZf61LlJn+fDj7DeLrNm2+/zc7eDvfu3uWj9z/k5PFjru/t8cPvvcvuzpTBsKQwispIRoOSQkEhoZSCUsKgKvn+97/Pj//sz9jZ38cYgworFscP2bv2EmY0RWqJlKnHS2VlnMvJ0uVreC7UO2shBsbTLUxRQYy09QqlUr+QEDAajRiNhlhr1wEDpGC0Z7EIwaVrSmsiQf19T0HsfTwyFSH9TUrAR6MR4+GAwpSMJxOGw1EKhkNAZpqjyODGH0tlScmC4WgLoSqESolNf71aaeq6ZrVcrudDCoESMiHfMn2NIRBDRGuNVmo9j0oplk1DFwJOQOzVuERka2vKrVs30WXBZHs7naQJAH2uY7Q1ASIqgnCB48NjRtNtzGhE8A58QAuBlgolNMlESSGFZDWbUS+XjKfboDTIHIRKSVlVF8GgyIGhEniVZMGDiEQlQQmEThRhIZPfVsj9KDHGFNzlfjGlJHhLIQKVipjo2B4pdiclpQBcBAqcKJgHwazuqDvHw0eH+PDl+8wzHd6xmM2JEYbjCYu6xtqOGD0hulSxdUkZ0ed+mhhJabdUaf+Xat2fhUzUws55OmvRwMgoxoVge2gYlIquazk6nbH0Aq8HzBtH50iBbQCtDUrprLr1/Kl3/XhanLBOZgAhUs/RYDgiIDk+PWMwTJTQ3vMnJZUXIMvmPnI1iblgIsjLlfG4+dqX92whQeokxBKFSCJQWqfgQv5h+/lVYO2q6t3V33vaa0UCIaT9XgiJUobpdIfOwfHSoUa7bG3vUxWKUkFwFh/S2uqFr5ICaqZhxkihJYVOFGRjNEVRMBiOiNKwcpHTeUPrI8gM5AgI3tE0TX5Pcf35CPH0StjVz+Vq5eyrzutP/+HvOTt6zOcff0hTN+zuHVCvGkTwF7R4mRLFEEEXRVIGzqqc/Yd+mWL35NxfXUNa9xTrjafpl1VOqtiIW/rzQADj4RDbtWgBw8GAN958m8FgnNaz+uOwy3ie40+iorS5OW0uqqtUqr43QfYLSxv2X36VT+9+xA//3X9CDLdRQmGCZKkUTed49Y3XWfrIe+99wHy+JHSOIBKfVKqEuoU+D8hBCyTVNkGkMJqqKHjl5dfY3t5FC8nje58xqgzXbr8MxYDJ9j5aF5wcH3Nza//ZTUymqCAVRIHAc378kOX5CeP9Gwym04wGGZAehE38WK0ZTaYZ9ZDJ88bFXOlJCAgSDKmMHtaVopT9hCxu4JwlZAW7VEpPn4LsN4D0QWVFoNTfkhxxUkIqpL6iJtSb5WaEBXre4zMJ6p6kaT5lSp9ykKyrTDGiMQm1riJvvPsO7arh6OERv/rFP/Po8BGvv/0Wf/UX/5Zf//LX3L93D9vVCBEZVQVt26G0ZGs64a133ubf/PlfMByPs4N2ZH52j9g17F17E1FKhApACVwkmJcO7Stc5s2v39Ro6wVFkQL+skj0mrZeAuSkBqqq5PbtOzx8/BBnU9+HVDqvHrFGwa42EvcgxMWHHdfVJuKF5xlEDvavUchAVQ0YDMYcXDvg8PEhd158haJivQb/mIaUCqVLXBToYpAOVJGpN1ogvUdUFUbr3OfXV8lj9utIdKEQPK6zFGVJjOA6ixXgfJK62KQKGS25ffM6SisG4wnFYIhQuVfwKxpa/qFjOBrgSSpRwdWslufcvHMLlCLEgFBpTa8pJ/kafLDMT4/pLAxGO0gRc2emRCnNsKqScliUyJiC/jXlLkZ6QRAySo1IVM68uSHyXi+UhGCBSIgyibJ4ydAUNG4B3jMuhqgoaZ0gBolNmSpn0dOtWoaHD3G2/W3T8MyGa1tOj0+QQjEaT7h3/ygpieEJLhAzcNgDDTH0aPQ6fl/vdX0gHQDvIrbzqFIzriq6ylKWEt0oOqeZL1sezyquTcd4oWhXHiqf+nmiBy0pCvOtVpSeiBNIewJSEpxf0/ONKWlay/n5jBuvjtje3ua460g6/X0f6NN7XvqxuS9fUtrrv66D4lwlz4/3/kk6A0Tj8RStixR4fwMVpac9vjk2DXoTKBgIpLmSUqC1YWt7D6VLzppI4wPlaMJ23XJ6vsAphQsRafSFn2APghmT5jN6Sq2yzHpKCoVSdD4wXyURGpHBQWJAxEAI7gJ0S28cuDAC/m3n+W/73H7fcX5ywtbOHm+8/Qbv/ugnqMkeLmYqpw/reCjFhv3X1PPoM7CVGBFksH2DKiHEuqLb50Fa63UlKdWGc708XlSQpEhUPMFGXBwFgYBSMBpoVmfHSJ8kyodbO2t2kBIyxw5/OuNPIlGCywv8aTd9eiwtVBMDLgiCKjl4/U1efPQx54efM71xh7IagRCUW9f5j//L/4YxkYMXXqKohrz/69+wODvHuoDzLlVC8vP36IAQZJ16hVECoxXj8Yi33nqbsqhoVnOOH9/njZdvU013cKrAlAJTVtz97HNuvvzms5uT6DONRGfVkxXnJ/dwbc1oegdpJF5YfJQ4Aj5YlE/u6cPxFqgCRJtKtBG8kBhTooi4GAnRbtyEcCF5nbwRJGQEN5IlENbN9D1tLx0KnhTvpvJ0L0EBie4Rc5khrgtTCQm/lCQ9o6D3arL0NDrepf8gJYExqQDJAFKZ5J4QoZIFt18csbu/w+eff8pwOqEaVNy4eZv79+9x/OgRXdsRI8xnc65du8ZLr7zEwc3bGFMQVVYga2YcPfiMre1dtneuEXWSLVYiBTa9txT0NcT03+Zh+lUkT7/uOD05Ym9vn+F0ioqeoihYzs8h90H01aMXXrjDr37zS1bLhAT2CGPIwdqmU/xF1Qg2g5IU1+T+sMzDE0Smowm3b9xkefwAUyQp3Yjk5OQ0UUGFWDMLrn6+3+oQMJqMGUwmFMMBRWlQRhDrsEYP4WIOM4sfYsR7R3A+VdRi4rL3ppUxJGoLfZKU6RdKSCajIXdu32Q5P+PatespUZK5cvecE0mZqcshRuaLGQ8e3OPg1m1sCFm4RaxpIUKInPREvHWcHB0SgkQPxkkgReT1JpNfiJIy0+vIpsUX8tTr6xQ9ZSqbRIYIPuCsQxX6wmxUChCK1gdWnWe8NcCIAct2hlGOgUk9OY0XdChkOeTG9T1Wp48ZlCXPKwZZzGecnZ2iiwJtCparOgXl6arTDhEjrrNIqTMzgkug02blIYRU8Q0hYruAQKeKeNWgtKcwBZ331POa05UnSMdYV0gX0DGtvZDPhel0+q2IOTxtxLyOMvchxQlR5H4PgVAmietozc7ODrPTU6DJPURyfT/Ck4DU1UrNVUXc9HlsBuvZikQIlAAjBQqBjIKt6TZGZ68z+dUTpd+VBDw9ZnryPFz/LIKSGk8yxS0CbE8nGFNhu45lYymVoJxsUwUJNtDY1C/p872UANQkHlAYQ/QWrWWiiQmFkIrOR+arJS6EJDySENYk5iIFPsTUFiGAGFCCdSWHDbXLqwBn/3XzDHha7Pi7xn/8D3/Fzt4e1w6uo8sqgT2hp+6mqpKSgoQRZLlvKTKFM/UjGWVwwZF6jmWmFpKUPXsgI2VMCCXXXoI9pBFzX67a8D+SG9cuRepJjdoxGIAOK+hWFIVGmAJVDZBKojMw969iDt+xcRUN2FzwmzfGxYaVqQX5wCjHW3z/z/8DH/7DX/PZP/01r/zg3xKHe4x2thnYjugtZVHxH/7qf+DmtQN+9rN/4fDxQ5qmwVmPlOCswPvUAipFqiKVRlHqxMP+yU/+kv2bt9EGHn/+PsF7Dl56E1lUGCkRUbN38wVm52dI8fvLUv6uESW5LTAgCdhmxsnhQxCC7d29HBBlF3GfjF8TOqTY2dlla2uLxXyZbvYcHMSYhRgiF/xXsk7/xufQo2gJrUtI8IXKTQrwnEsc5H679z5rcOVAWZvi0mFwlS7whyJBV8fm5vllTZ2bvxNyL1Z+ABEjUSVRDBU1wkiCCnjtKLTg1quv471HSYmpAtPtXcTb30uGvBlZMoVJgb1UaCEIsoDoWZ7ep1steemN76OrgqAqkGItKSr6DvR+fq6oGPXz+E1XUT5879e88fIdinKAIjKdbnF8dk7wIdEEswjK7u4eL774IrPZgq616zQ6hpQM9++1pxlAbzjbHxr9wZ2uSylJoTWGyEt3XmA6nTI/uo8qCgaTCa+//TaDQcVoMiHKC8T8j6mqJEUS79je2UEbxXA0pKpKzo8XoNO1bgpYBLJcvZKoqOhaj3NJ5t9kj41CaaTqea75b2OEkCggt27eZnsy4fOjx1y7fiMl5zJR+Z733KQgPQlTWOvY2d5hMBgQfUjGi5le2CtDIQSSSOsS4u8jFEUFuZ9SyqQsORwOMcZgrXvKa6ZrTJSXi16NEGMyBM9ItRESiUAIjUTilKSLLavgqG3HTlXiQ4VtG6qhIMaO6XiL85VnoEveeuVlHhq4du362l7gmx6rxTmrpmU0GCNMSd2s8rlncMFniwtPojAGCKk6K+KTweX6ex+JQdBYhycwKBRlIbHeMxoadl3gvAvUUbPskvx8oTR0js57UCk93dnaxug/nvAkAXaCpEaWrzmIZF9QVmxvp/crhEBlRF8rRYwipTb5PLhaBb/0GhvJ08W5snmG5e9zQUGImAykVQLECl0gSXRbcflY+v2u8bfcz1eB5s2vX/q7MbFCgpBIGVDas7MzpSoHuM4ihOJ8sUJJRTnaIjYNzq9w+dzcTACCj3gZkcogY0Dhc1ySzcdjvDjTQlgnteR+S4TI1h25LWJ9PZv390V17+pcXAURvwoF760f/DipzgmJjwmCSFtU6lHykQS8wKUq2noaARdD7jVlnTz373ez1y3EmOS8M536CdpnZH1eJgbQhecVSiBjYKsa4+su3ZfGoMoKbcpEi9UmU97/NVH6kx3rRsqcJUkgRs1w9w5v/fl/4jd/85/54B/+K6//2V9hJvs4rdeBp9aa7//wh9y4fYuf/sPfcv+LL1gsljR1S2cd1jpc9EglKbWm0JrxaMxf/fv/gTfe/j5FVWEXJzz89GN29w8Y7F1H6mwUGgTDrW0eHz5m04j0D77evgoTAypa2sUJq/kZ48kWw8kWMaPLKXtMyIVWmmgKxqMx+/v7PHp0iPSpryOElCCFTPkRm71CXEh3w+WNN8l5P1nx6xte+14TrfvSce87EC+hdXCZXvlNeAKtE6CnbJJPoy5sUjz7qmXErxG/vgdHK4kxZm0Gmg6AJD3vvUvJY0Y1U8VDQK6E0C45/OITxuMJo72bUFQIpREyIUU9fSbm+dp8j1f5zd/0eP2111HCgUz0yWo4xD1+RHAWPSyzWmnEGM07b7/Nw/uPePjoUVI7FCS9qRjXh6Rz7oJeB+sDRuQDcXPepRDsbO/w8ssvY7ShbTpQCqUNo8GIqiovkjD1za6jrzMUmvFkh+nWDvOTY4yCyWTCo3iYwAqVAIb0lSTsFgJ4j3ctwXcQPI6IChoZ8zoW2RpAyDVoIoRiMpny1tvfo61XuCgZTHYylz73AT3nw7LtGqL3iSLi0z1klM49WCb1WcoLv7V0vwSs7VgslgilqUajZBIbXVLYjJHRaERZliyXq3UwG0LA41NwvN7H0v3a2xpE55IQDkBPbQyp0qC0ohOelauZt55JOWFrOGBVd6iwoCw0RMHeYIyiY3b8mLIcsHf9dh8OfePj5PiQ1aphZ+caAUnnuqSMFRNi7YPPVK+IRK1pS9Fd7H9938RF4pROqFXX0diO0ii0FnTOIQjsTAectpF24fE+0hDofKJHOgRaCpRUOfH4aj5Az2L0dO0EmGbGg8xltBAQPqYbi+SnODs6Ym93n63dvdSLGzzWW5QWCY33ItGshMDFuAHAXH6tFOTHfC9eUMdlZlnkIsm6SpD2tEihNWVZUpUlVVHkM1pl1P/rVZR+H4r500bvY3cpkcr0VfL5Mh6NmW5vsVws8M4jpWbVNBfv2xSQhRuC93lOU8zgvENGkVVPN4QMRAKDpFLZVDask43+evqKew+s9QpyqUr95Uli/zqbZ+ZXZhiUSXo/htSrnWxZUrIUYuoT6l9HCpH7r1P8KVVKeq3LSp5C4kMfm6b34Zy7oL76LOefmTaJHi3W5vSs2RbpfPQ+XbsPjiihIjLWBdHWlJMRTgF936DWa6uADQj4T2L8cUQAz2E8rSHvy6oOVx8PUlHs3eTNf/efiLbh47/7P4izxwmtVxqkQZgSXQ64fuMW/+P/9L/yv/7f/zf+7V/8e2698AKT7QnjrRE7e1N2dqZMtsbcunOb/+l//p959wc/oBiXSAH3PvqYel7zwitvoYZblxY1Md0Qz3okj4eI8A3zk0e0dcNouocuh0RkpgNszFduZDamYHsrIdta9yhb71WTnzs3xm9SBzZL2ZtBydPK3sAa+ekR3fUGl9GmwWCEUiaJcIhk/thLiD6tpP4shri02cgn1tLTkMLN/3q0Z1OuW2tDUZYMBgOKslwrlylTJCl2bRDaIJVBG4MxGqE1WgZWp49Yzk659eKrmPEu6AKtFUalw8dkFGjzsPiy9/5Nj9ff+R43X36DwbBKxojllNi00K6QItFxhPRo4dnfmfKTH/+QnfEYIyVGanSPCoocwGWagtjgYksZs6CKAhQiKiohGVcjXn/7e0x395IhoxkyGk/RZRJGiFLnakOqDmwm3X8MQ4gUhI8nE7qmwXYdN6/fyMlCPyeply+h/4LoU6CVEhuNVknEoTA6UVO4ACMSrQh8iBRlwWuvv8bBtWus6prd/X0Go9GlNfu8E8i7n32Cd5YQHOfnpywX89QjqQ1aaYwx6zW+XtNCMBgM2NnboxqMUKZcq5LFHHAOh0OGw+FFtagP/JMrJT08n6rlGUzLQU+q9Aass6nnsveGy/e0jzBrOs7qGqFgVGqka9B2iWzP2CksW7qjXZyzf3CDyd4B4TlVlA4PD1nVNaNRopM763DOY92FQE4MiUbedR3WJjn+NYq/kST1IxAJQlA7x6qzdD75dkkREdExKBS744KRSUmAiyLR3LnYi4qyYHt7+1sBKBJ9+4LGjRAb36eqfkQSJAjfYGdn7Ozssn/9NkoZxtMJQoFQEakSpSr1I+ceTJGV6+TGf0/swf0hGiF6BLkfLkZiIAGEUmCUpioLEktLYMpUyVK54vss5+9q/LR5/19dB5fORnkRv4gARVGws7ubiZ2SEARESdcmWe8YUkVOG5P6wcgKsip5pFnvcSFgfZbiz4IZMislXt2fpExKer2KXvIL6q/lor/uy87BzVil/76fj9/XdDZKmfrWM1Ww7ynKr5C4Ejku0FozHo8YjUZJ4TiGdZtBzNW1vpq0+Zn096TIa81am5LT9W+vCT7rz6uPo4QQRBGRBIbGENuk4qwHQ5atA6nRhcn9n5n293td+Xdn/MlUlDbpUlcf73/2NJ4tgMYSpMIcvMKbf/m/8MHf/x+psvST/0ixtU9QGh97jrpjMjEMBiNu3rrD2++8yxf37nJ6ekIkUFUVe7v73Di4yWg0TqpBkuRXohTb27vcuPMSQRVoyPQHQZmD52c5em9oANfWPPric7wXbO3fRpkq3dgBkviETIEkSW5aKc3e3h6DQcWqbtbPuW7uRVw0kJMDuA2kqa8I9NUABesKS4/+r9EzL9bNmGKjgVwpyXg8zkjW1QPnogH1yz77rzN+G93g6us8Pch+8j2FkIrqUkhMIZH+/8/emwdJll31/Z+7vC3Xylq7eu+ebs0+o9GKEEJsgpDZA2EQmwSEMXZgAoQBWVi2cFjYKEC2AQcgjAGHsbFDEDIiWAz+AUJikwQazYxmpFl67+qufcnK5b137/39cd/LzMquHvXM9CZNnYmaqs7l5Xsn7zv3LN/zPQYjLYgc6cxwWFx53OI8lJS4zhYLpz9N0phgcv9xnA6Lfg1b9NmoHXCR8hoGBnKXKtiNFBlGREqS5YbcOXSUkOaW9bUVZlutwrn1FYIwUpy44yS9XsZHP/5xOp1usRH4NSi18syKwicQhBC+ERiKwAkUDqUV9VqFu+6+m0MHD/nKXZbSbLWYnZsrmJWUz5jdZsHRDpGe4SpOYtJ+ytLCJeZn5kiSmK2tLZSM0MoTWkgpyHN8JhOQOkAmFZw1ZMYgrEUHgXccRr5/6zxZwv4DB7jrzpMo6bfpu++6myCMfP9P8cNNJnPY3Fynn3bRRGysrZH2U2A4R6a8768Q5ytvYcF25/BshqXDVPaWXLy4MAJFhYI6zNsrHM743i2JxGRg8pw8832YFnxmW4PvK3A++20Endyw3OlSjaAaaISLSPM+lVgjTY96tUZSjdl3+AiEFVA3p5Iy2ZokDCKCIPQkOQXECetrGr4i5+saOxNDcsd+6Zwb9Aw6HE5CL83Z7PZpNROk9PqweYYWhpl6xHY/5/I29JyHHilZNvxr6rUazWbzlgRKo3Z5p1/gG+4L9CdCWPq9LtvtNvuPHabaaNBPLZPTMwRhSK/XK5gRi04363tEEKJYKww8VznYD4bn4R3iwb98EsiJAq7lSRyi0CcIBo7+qL7E8yNbGUVAPJuOxv+9G8rCB5qeIEUJgRV+7tbs3Byfkp9CaQGp14UYqf4bawffvd8P/Poq154o9rMyuCgJRoTyQWlW3JPl9QgBlUqlIJgYBnduFPEixFXX27g/+JzRF3aYlBmtdLsy0ec8GY2UEisEExMTNBsNFrUm7WcIB4EOsM6hXJmQfhYkSGHTpJSF/0ih5JHKVVnBLK5PC4kShlhJet0u0VSdsF5Hdvu0GlNEYYxSnobeh1636R55g+TzPlAaX1DP5siOv3bQoIrwGTGpCWeP8pJXfwVPfPxDPPH3H+Gul76KSmsffaGLWUIBVli/8LRmJgqZmpnx5WLLwDEpOe2FkGgHvazD5Ow0Iu+T1Br0VYCwuaegtSUt8vVtLNdSkDsf1GyurbF0+TIITbU5Cyr0N5kUCOszWH6mj8LlOVprGo0G1UqVldX14vzcAB4gC9rYAYZh7L4ar7LsNLajCGNR6MtvznqkvK+LyfC7VQhL47lbv9ILkVH9jwcZOyF2V36eKLKTZYVtRyZ2kLEqoXKmKI0X+nAUjfnlXGOFtBkri+fZWLnE3S97DUFjGis9L6CHT5W9SZ5psZTxfqSbGigFIUJ6eKt1jqhap2ssK2srzLhjIAKcE6gg8XBPYbjrrnvIjOXhRz7J5uYmlOAUqRDSr02/YrwDXFaXJBAoQbNR47777uPYsWOEYYgUkrXFy+gwIq5UBixBz1Ypud5VyeclRTVXScnU5CRKSGZnZ5mdmWFrawNnfQ9fGEQ+CCgqKhZDbnJwfl5STOEAC4ErM9pSYDMHUjA7N8/9D9xPs1Hj0vnz6DCiMTGJK5rEVcE6dbMd2SiOOH3qFPMHDzI1NYXp9uj3UpI8J4hjdgVIOM8CVavXsZktKOaFDwaKey6OY2ZmZtBaD7/n0ikqs7dFhc4/5Zk5B8GBcwRK+Z4a7UB6p1giwTo6/YzcZiiXMTtRoRpWcVYRJnWiMCAIBZPT0+hKDadD7E2aUVKrN2g0Gp7SGooAqKimMVzzSg5Z1EoYb2mvxqFJUuB5zoRivdOn1c1RVY0OInKbIZwh0TBZC1je7vuSCj6QKvfcVqtFXFC23woZt/GD3g8AfEVICcH2dpt+mtJsTaLDCKcErclpms0Jet0uxqRY5/vktBYYU1gpB67c192VcK4hQK+00aII6osAXPi9WxeB0ESzWSQKimSBKJMZz531bvT31fQ//nz5vY0Hz2W38XBtCIIgYH7/PFESsr3VJncZQvsg2bkiEDXsCLyEEPT7fcIwJCiSO+VnjdKpC1lWXYrvrKiyaD30E3BuYLuE2Ln3jdv43fzFz54IvVJkOeAVz7Xpyj5z4RCuQETYYZUm0AFxFBMpRaYDTJZjpcDlDi09w202MkLAz8/LC+ieTzJrqdAj0GjnfKKnpHQuh8x6lXi9V4KAUCmctcSNOrXJSdrtlMP7j3iSkFLPao/17vNernZTjD4/DtfKRIh0lthukxMQTB3ixKu+hLOP/jWf/sRfc+eDryaenMdKBa4Y6qU0HkvsVeyrTSWjjSuyLT5IkbnARY62klRbE6hAF0MT5YCSVStNr9fDXEf4nc8kCEw/49zp06ysrtGaPUBQnSw2ToY9G9IztUglsUVfRxBGVCo1v3nmBlnERL5JuoQpqIG+fWKjbDosJ077QNSa3ONfC/azIm3H6FRqcIMhvlp7SFkchh4aIVVxwozAG2RxLHHdBqSNG8vR4Gg3Qzv63GjWzxYpQ3/uwgfZ7LIJUW46/jLKP3IkptNh7cwTVOKEyQMnEEGMLo6DkMOGS1nqcvidjm5CN1WkRAqFchajJEJreplhdWWVLMtRlQQ/HlWhhECQUa0rHnzpS6nUqnzsYx9jaXmZ1Pm16KzFFsGnlBJhPL2qcJYoCtg/P88999zN/P6DRFHoZ31Z/3kTrQkPwdPaB0tyZ+Z8VG6HKlN5b1EkN/rbXeIg5O577mJp6bJ3/K0hVAKTG3I8XKx0rHppn9SlhDpEae03buczmy73DFUzM7O89OUv48CBg6T9DqdPP8M9D74cqQOE1MWQ6eEsoZspd93zIJ/45CepRDUmm1PMPnSAzDlkIJG6YIryBZGiZwi8kdUklSZb6x0QDkvuwSxuyJS4b98+kiQmz7OB+ZHCV6qtswWEpazCWtI8wzkDwqG0RJT9YU4OehAc3hE2uSO1sJSlbPcMjUQxlURME6EDRU4XK03xvYJy5moquK6SJAlx5DPForAXpc5KOBDFfVVWH3fAsEeCRSgdZoe1PpHT7qVcXFpDyxYVHWP6BocjkoZmEpDEhk7f910o7MCBnZmZ8QmNW+SMlYHgDjhZcX1a6QJuadjY2MA5iCs1kAFKCKqVCtUkoZokpP0UIQyiYKZzVgwqGVg3srn6vbFMhAlKftdy3/S09LJwbKVwaAmiCNjr9TrbnY7fK2FQ8R3v3/1sMmrjnisaY7ekn3+cQf3B22fL5OQk0zPTdLa3KAjlUUqSZZ4pWKoAIQpmU/z8PJkrjDUIo5CuYF5TJbxWFrHkMNjOsmyAukjimEajWV7kCGpgZ4Lzaj+7BZDPZT+QjEDVBIPvujyDIThOeAihDmjU60w2K+TW0HMFfbizCFsy9WVjvofXtTHe3gdhWPR2iUGSWuDQviZJyRTsiZ4dCkMtUARBwP5Dx9l3aJ6trU2yLCNKElQYeWhjSZrzIhs4+6ILlHaT3RzcUUyqKrxLY2WBF5UkE3Pc8bIv5+xjH+PTH/sQJ+97KbUDd5LrCpIETI4iQyKxSIyToMqBYcWxZcFOEwhiEeB6OWFSx+iAoAgsjFS+5BoGTEw0yNLudbtu67xLmvX7rCwusbbZYfpoA4JkcO1FXbyozvj+DyE1QhvCqEK93iLUIS73/UipyYuKrse9ljcxZQa7hBtIgSmG8JaZDSUFxtid78EbfmcKo1A4xsYKAikhz3HOYIXDOAq9uWKjEYNjX09Hd/RY439/tqrSENJSvqmohOyyMXlHYXiLDo9nEdaysniJtcVFDt/1AJXGJLIcsseYMZcUcKPBgYaB01Wu60aJUiCMwwqLEpZqvcKRo0ep1ScAhVKhP1fn1wdao5wmFpK7776HZrPJJz/5SZ45dZput4scaNLT0UoskQ6ZaE1x/I7jHDt+nHq9gQg0WmqUybl8+RJZ2ufIsWODalI5xHi0sjQqt0Og5G9ChVQhaZqhg5SV5VXuvOsuTp06zaWLF7B5hqRMzFgCJTy5g1JgNaJw7EunyldRQCrFgQMHuf/lL2PuwAGSMGBh8RLNZpOZWU8sI0YCyRL2cjPlwOGj1JsenpkkCUJJnBSowon3TpPPC1hEkbiRnilLBhhj/MR5ymSMLHobHbOzc7RaLdrt9uD+s8aTGVhbzp8aVlCUkkRxtANy5uFZFicEKhTkxhX9Yr5BG/xMuF4/I5qYIAwibN7DuC7rywvsP9r1fa83iSSjUqkglSYIQgIdEEWejtsNR9MNklulWOsoq9NX9mk4hHO+t0IphAjZ7hvWt7rErRoq9GQpWkGMoFaJ2cj9e6TzgVKlUmFmZmbn0NWbKLtVDQbn4TxEHAd5mnJ54aKHTKkAJyUYR6AVWgpqSUhnW2Js7hkSKW5fiWcNZMRBFm5ACjKoCBk3cKb9HlFUC/BVck8GYqlWKmil6Pf7PjDQyicztPY09c/j+kf9n88mo31K4xA8v/sWAZ8sPHks9WqFQ4cOsHDxPLKrwDqU0J7Cu0yKCr8H6CBAKkeW5+SZJ2AJtCo+yzNgWiNwzviZSWVSEVACtIRGrUpSq/lkj1JeL+VP+RVcJfgZJml3wtyeC/yumLrF8MyGoZMrCFPKGV2mSNAkccz87BQ6qbB5egFrUl+tdZay86gkZyiTQUJpTJ6jJARhUHwXaqCT8nIFPkErlARnUMJSCSS1SNGam+fwHXcRBoqFswuoICRsVIuNuwwyHSOh34tCXnSB0m59SM9mHJ3zvP7gsAXVsCggc3G1xh33v5InheThv/s4d2x3mDvxIE7XQAjsoD9E4Bl4y+OObISiyGw62N7cYu7AAZ91t0WuoaD6DKKI3BjW1jeuoy58xhlryS0cPn6CffMHB42Po5WQQdalsCxKKcI4YmZ2ln3z81xauAipIKeAYkjny8nOGzNv/HxfgCgqP2XGzhizQ+fjzZVlGb1kbhGAcoJAQGdjBWnnkc4gi+U8yP9eZ3jQ1QzjbsZz/LXPZlT9dTKA+4zqexTiUoqzFtdt88ynHqZnJIdP3IsOPLPOaFA4+MxiPtiO71GIHUClm+WUCCzCGf+DJYpCJqenCcMKJezQY/PKgYMSIUGJACkFhw4f9sNhL13imSefYnllmW63S57naKWZnGxx6MhhZuf2UWs0PPuf0ugwRDnL9somT37mKSZnpqnWaugwGAmOriRwuJmwxM8mSglMHjIzd5ilyQs0Gy2sAxUmvPoLX8v/90d/yNb6ms9e43HnPsMKUmiSqO6HLzr8IF88w1gcVzhx4iXc+cC9JJMT6ECT9/osL65w970PkNTrCOVZCrVWAx3Jm60XrZmYmi4CGD8vBOUhzrDTaRv0OxYQpDAMyXNDEARYKX0vjiuocp0PGg4fPsz58+eRUpLnBRmGK+8/7/Q56x/TBeOpUd52qcJmGpuR5zlZ3483oLD7zkl0AIG0TDXrTDRqGJujhEXkhnRjmfbKArWZwziV3CR1hkjtGfqElsWA16KaghlmUawhy9yAFnjgJjk3YAC0zg/q9evN9wlKpclMylYvYxaIAolzORYfOFYCQeByjNA4oQlUQKs1xUSrBQLs8+G4vg4yXjkYwrx8wg5n6bTbLF1epBnERaCkcC4nDgOqcUgWBUw2qvSWVgZsjK5YB66oepYVfvCJisHnFE5z2RulpIfraSEIA0UUeOZcYaFRq/uBpMr3WAZhOFL9e+573yiM8mqBw/hz4/veOGqnnCFZrietFIcOHeKRRz7pWYGNr65JIcgtiDEmOqX8YHLnPBtqya4nhCPL8gEZjXK2gBt7W16C/6amWkRRhNR6ACH1aBN2fM6zrYfxa36h+4Io/Jhy7qO/f1yZYyYMI5Iw4WUP3sPi5l9x6fIiQgmsKYfLlkFXUcErgxjtiVOGTLA++PQBt/IJMxjA87V0BFLQrFXZd+gQx15yL2FSJ+1uo7XmyNHD1BtN1IAkh+vuV30uyIsuUNotKNotWBrlzR/N8A+b8fBBTlLnyAOvIUkSnn70Y3S2tjl2z8vQtRapCsmFQuHQNvddE2OJGud3YPpZyurqKgePHh3AHlzJSuKgm2UktYYv818vcRZpLYsXL+JQvPqLvgSV1NFa+x6SwuEoIRYli43SCow3zoePHqHRqPHJTz7MZ558EmU9NNBaiypZHMrrGdGlGclAjWcPRzPWUsqCbtxnKqVzBELRqFaZajZpry0j8j7SxUiCgdER1u04/+umsl1gCLvB7kZldG1dLYASrmA0GvuM0WxWuU7T1LK9sUbe2eTA8btJJvb5bBJlEL9LsDa2kY1m/cbP5UaKIsMIfGVEOpwOCetNTK9DksQ4qX2wZx1Y7TORgLXCv89K4qri4LGj7Dt0sGB/886pFIIgiooKgxpsiEJItJJIFPWpKe57xSuYaLWoNSdQQegdbllW2Ya2oNwQbptACV9tqFZrBFHE3Q/cR64TciGpViq8/ku/lL/6i79gfWUZ40DrYjq7Gzo/Jnek/RyLo1ZrcPDwEe686x727ZtHxxEu8PDXp558EqU0rakZdBhesW5uyWYZhD77KgunUhS2SMqiJ09c4bR5nCmoQNPr98iyDI3vMXHSU+064W3QHXec4FOf+hQrK6t+tpQdOnxFgQ7rcg9/dg5TNGCLQYCND57ynF6/i7CenKBSqSARxIGjHoXMTEyiVMBae51E5Uw2Alxvm9ULp5g5fDdCxzdFnTqIcA66/R5NAfVGw9t+4xODFD2n1thBgksINbCxZUXJjMyzEUKiZcGOhZ+h081ycpMhNYD1AZV2VOOAQKRYIYjihCgMOHz4MJVq1d+3N7liCTvt7GiQ5H8K51sKhDM4a2hNTaLDACM9tK5SqTA5OYXLOjQbVfomZWmtTclY5umYKWB3pbPrdiTEdlaXPPpCuWJmUqAIQ00liTBpTqPRoNmaZN/BQ0xOzRRBkg9o9fPQ3262rnxstyrTs8HSyv19vKfIWsv8/AGmp2bpdfpoIckzH5iLPPcJBlEGKHKwtnwCIx+uu4IMSgh/nynfBO6ht84HtFpr5ufnr2B83e1cd7v+q9n+a4Ejjh/nyvVU1BXFYHv256gVURxjMsOB+YO86uWv4kMf+Qu221vk+F53T7jiMKa4D8u/iwhca1nMWDJF0tgPys5d0d8mQeMIpaORRBw9coQ77rqPpDpBnhtWV5bp9XocOnKUIIoHAVI5l/C5Xv/nunzeB0q7faG73Qy7BUtXe30pmYyQWOIo4OBdD6HDhKc++me0Nze491VfjJ6YRUjpS65FVqiEq4waZFts/s3mBEmS+B6LMt3hfFakVqtx5933DuAR10OEE/S22jz16SfYd+AAzZn9dLJ8R3AzZKIrezcUUvnsqpA+0zMx2eLEyRNcunSJdC0dgS0WW0GRibBu1AkVg8ZMuJJgoJRBkFo06auiX+vggYMcmJ1mbXmBbnebuN4c4KCllAMsbSk32qm72toZf824XK1ZdDxwLMUYQz/LCOOIejXm+H0PYcIKgXBFtU1ecZzRnqTnsr5vhPhhgAKpAnB+U0uqNZbXVwnDgFwVPX6FE1Ge7fhG5oQ3+EEUgnWDKoMrBs4O1+swg6iEQAYBR44e85tRkqDUcN2N/+w479tgY1BCgvD3XWYtKopxOkYJPzj15J13U683+NCf/ikXzp/HDvoZhQ+kTU5uHfXmBAcOHuLkXXcxt38/SVId9PDJUJF1u+Rpxh0nThBVqrgROntg0DOp5M3dPoTyNlRKNUzHSzFw6HeDUA9srxR0+z36/T5B6ZwU6wQnUVIzOzvL8eN3sLm5he2XEOkhtBO8o+dEOWPI95tIBAhfVZEF57MVDhVI3x5oi16JRNNIApIoYavbZb2TMteqkTtJYDO2Vy/TWblIo9q4OfqUCqk07XYbISWTrRaBVvR6+aDPRQgBhmKWEDjnA52S3rjcx4a06MNqky2yif00p5caJqsxgRYIUiQQhyFKdn3vq/C9Nvv3H7gq/PVmyahDCyOVSge5dJDn2F4Xk3bp5X1wjkBInNAYnVBttmhvLKJEynQzodvtsd42SLwdMqYYYCHkMBgdVPytX0/FGrVSEGgIhCMKBXGcEChJqDQu1kxOTTM5O0+t2SKsNJE6JFCBHxnAc7fro/vE1SpFu+lqt8fG/YfyuNY5atUqR44e5fSp056IwFjCMMQJyHo9T71vhsx01lpMbnBimPwcHbOhCuffWEc/9Qy5Wnko5759PlAKgoAgCHbsDeM2f7xf6WoQu+eyZ179tQVLpCjuNVcSTSikkGxueBjw3XfdzeXlRR775CfwjAy+z0gUQY9zHgwrpCXPcv8Syu/NFdWjIjB3BoVnIgyUoBJHHD58mJfceTdJo4UVCtdP2dpYZ3pmmkZrijCpEoTRTYda307yeR8oXYt8tmpAKTu59ItNm2IImE6Yu+MeAmn4+498iL/6//6Ih77wi2nuO4CRIX4+ywiaoczOON+Urqz0GWBRZrb975I6VMkQwqiAUV2n6zaGM6eeZmNtlQdf9gpUXEeJ3jDCKXuERoyG38Ac1vqbWwcaYzUzc3Pc8ZKTtB/eptPpFLAXWWDarc/cMjop2mNdS4x/abjGdS6lxPk3UzoqzWaTY8ePEQq4cP40q6vrNGfmYdTosTvl+wuV3QKOcYO6W5btascYVC5t2ecwfE2ZkRu8R3gmrVq9walzn6HRmmBi7gAmiBD0CyjUlZkxMZKy2jVYK991MwIm6YlKrANhQQgP/er3eljjkFEJzywrAm5wz5T68OtKDAamOucdUSjp7ncJegQopdElK1AYegrVcqMdGcQ7nnl8Lnj0GymektvPUkozQ5oZgkoExaBCgP2HDvPGr/sGnnryMyycP09nexupJK3JlqcWjxOmp2dpTrQIwgChNM57bQPa45XVFWYmJ5nff8D3iCm5wykRohiqqm7u9lHE0Ejrk0cMlzvuKk6hFAJTOFUmz+n3+9SFd0qUVAUcymItxHHCfffdxzPPPMPK6ioIgbV+ptCoQyiVRAhNnvZ9cKDkAEYs8RPvBc6TJCiHFJowDEgSjTOG9fUtetbSERGtgycQ7XVEvobpb7N58RStufkbr8ziOpCCjc1NpJRMtFo0Gg26m5cYHdZcwrq8FHvDmI0Db6uV9sDPEh5krCM3jq1OH9eqEscack/qkISaKND0+77qeeDAgQEtuFI3f6Dx6PXsHhj45neLY2NjkyxLieIIHQS+J66Al4dR7OcAmZxqtcrMFOC22NrqkFuJlBpjHcYZrMUH8gUQuiRIKdenUnh4lIA4CIjCgCSKIe1RqVSp1utESUIUJ+hiMKjWngzhuTbcP1sybfz5cZs4/tzV9kdf5bAYpTlx4iSf+PgnWOkvkmZddNm7jUCJsh/cP+ITpQz8hbI9oNwfrXNkmRlAQcsq08zMNPv37ycIhhDrcVs/HiCNVxWvpoPnsieM+wSjx/O2zPn9XSuUVSS1KkmtilCKSq3Cq175cvrb65w+dYpOt0daFHy9zzNMQkvlK7FRUJCJWYMseicVEGlHHArCIKASx8zMzPKSe+6nMTkDKiBNczY31pA47rv3Xiq1JkIGg3OVSt4cP+E2k8/7QGl0MT9bQPRsmfbdDANAaDMsmpQIKTK0VrSO38/9fcfffuiP+dMP/g6v+bKvYN8d95LpEFHQezqGMD5PEepd1e1OhzRNCZ0FoQcZzwH8SkjEdczitje3eOyRh5mebHn6Xx0RKQ0M59KM6mbgLBROrFIKpzXWhuR5zsmTJ1hbW+X0ad9o7x2NovHXWk/nTLEZiCE15WiPUulwDAIqBwqJlT5bW6tVOXnnS5iYbJF1OhgrWF5Z5zDSH39kBlPpbF9Lteda5GoVn/FNYeDQj20k41XL0b9N4fQXwzaGMMWSDQ/nKUKR2O4Wl888xYm77keEEVJ4PpsStzx+PuOVmYHRxm/6g6bQMkt/A8X3LyicKbLP0hJGniEq7feJq00sBiFk4ciWmeqiEpvnaCXxWP+Clco5nPTBtNfFlYGSH5YnkBST2cumZ6UGQcazOQq3Q0XJ+qwMKgiIkwrgr0co4aMI6WEqkzMzPNRq8cCDLyXLMnJjfHBZdOkPiI5HMvYCUFqRZx3Onj7F3XfcSRjH5Ep76M+IczGkU7/J20fpT4hBAWzYIH2VdVuec1Kt0piY8Bnl8lhSoNC4kmXOwr65ee666y7+5m//ll6vN3LPllBGf59YYwgpe0qGejTG+TVWZIjBEYTe4XXWoqSk18tpW0tldob6zEEIK6SX28g8Z3P5Av31yzdQiUMJwoj9Bw6ycPECaZ5SrVaYm5tl+dISUnnbUNTdgHLP8tZIiisb/gcJBsqZQb4XzFpod1L6uaPbTYmEQSiJko440HRzx0SjybFjdxCGEVB+zu3TB1EmbQBw0G63CYKI+fn9HiIoCr0oRbM1xdKFiMz0kUJRr9XBSFxuaXf6xRDVAtkpHCVZknO2YFv0CVLP+ukIhKCWxLRaTQyKZr1O1hHM799PUqsSxTE6DIb9ZuUQ7udhyz/be8b3riugrmPPjQdO5RrRCmZmZjlx4g4219YgqZAVTJK+BzAY9CI56yu4MOw/HLXVxngYpDOeOEMUsGutNUePHqXRqF+Z6LlKImy85WLXxOJz3At200EplpKxzg2S5k4pJqcmaU61iCsxTjqmJif4oi98NQGW02fPsdFJyfKckiW87KP3xy9aG5xBCYFWfk2EgSIJPK381OQkd5x8Cfv2H6LanC565AxZv8ul82dpNapMTU8TxAlCR0g1nL1YJqRfTPJ5HyiVMp7lAK64wcdvjJ3ZpZ1DP51znukGh3QZArD4jNrc3Q9xv4FPffQvWLu0QHPuIKqVMHBSrB1M/fYweIsUCl2tgnBoK8gE+C1dUg4+9PCHa2OjuRbZWluls91h+u57UXGCUYXjYO3AtR6HHzhnBvrw2SGH1pYoSmg2FQ89+FK6nS6XL1+m2+8NekRwBQlD0WBunQEL0nncu59B5Rm6hiUOh7UZSkpCKUmihHvvvocTx44TxTGhFDQmJmg0moiSb73QkyrOURZQrOvp5+7mUJe9VuXjo3ob/fduQZIQnt1nfLo54NdY4XA555DOceniRfLMMLPvwBBSJhTCWZwTVxzbFUHj6HH9PxgE46XTc6Mb9IUMKElNLCBlQBQlZGnG1uYmydQcShRZaR8G7Ag+hzoWxU+h1xLjX5QZRquTZQCqhIesKCERupwaP3zNaFJicL6306YgFAhHnEQ0Gg3iJPG7oijgcNKTGzjnij4RgQoDjPUZflM03btiPXkTtJPUo93eJlQBE5MzoLQPMJUcDHXVSqEDT6l+s8kcJGrgO5eJhFFXfncnzttPnSQQeBrsQCiMMJ5107kiP+C/+yAIefDBh7hw4QJnz50hN3nRmzQcCu1cPggYpfJQvJL22RpHqAMUud8XXEqeOqzWNKMEqTRbaY6RIYf2HyWpNCGI2Fg+j8w32d5cZHPl/M3Rpw44fPQoZ8+d5cKFixy+4zgHDx3kycc/TT/tD5I21lmGjOXDMt5uzp91nm1MFb0lOBBCk+aOfmowgcWQEyqNFhAFmsjA8eN30Gq1fG9NMSzzppOFsNMulzKsLhQwuWKERbVWp9maLBJ0hS2RikazRbXRYnFzjU63x+raFlInRJUqvQz6mcUK5xkbiyAJJwZsg4M+U+GIAk2jEjDVrBHGMUJH1Ot11rodP9w2SjwhTVkxUQpRDO99rlCp4SDSnde+m452S6KO/r7a+8v7TDpBHMXcf/+DPPH4E7Q3Nzw6xRlM7siy1DNNFveUtdY3CcIOSnpXIA6k8r1zsvi/EIJGvc5L7ryzqLDtkjzb5Zx3C45Gk5zPV3ZfVwAlYsjbMWc8u6GzjizvYWxOUCSY980f5LWvez0zTz3FZ558ipWVZfq9Hsb4URCZg8xZjDWY3BJqSaQUSSCJgpAkChEYmpNT3Hn3/Rw6dgIdxjih6Pe6uKxL2m37ZPRddxPXmkilC/+iROp4eT6wzs9ledEESuNl1Wt9z24l5FIGlJ+U2f/CyVeaO+69n8mJBo8/+jDT6xs0wgouqVE00vgDDDLgHpvampqm1+357MA4488NWJfrSwvMHzjE/uMnIPC0uQLhHVRhr2LkBBpd9ASA1n7jNBYCJ5ibnueVL38lH/vYR7lw6SK58Q6GsxQQugJiVsR7UqgiDhxm7EoIi8sNMlAoDXEQcfzIMV5yx0mSpIKT+IGhcUSgvJPog4Kin0mUjYcFrOE6BErPll0a3WCulmkbfWy3SeYlnntnkONJHso5GmQppz7zGeYPHSOu1smLay4dmHEYQXEgyubY3WQ8AXAjRUpFbnwWtaRpVjogqVQxxqCKnj5/yrJoRC2COCkHgafF+vVUBJCosvImBo7vjg1RgJYezlP2LMmCxUuNZBdHf99WQRIgbQDkWJuxtb3lgwQNIEFKT7PMkL5aCI3LQVqLJ5r3jlNu7CCw9DOniqqJyVlZuMSxI8eJGy3Q2vdHFHNNlFLFvClV9MLd3OvfGeSLEZcdT/7B7nBXgSB3lm6a0u32/KqSfoiqsK6IvdSAsGZ6aprXvOYL6XY6XLp8mW6vP4D+Wgw4i5QOVTT3y2J9WSxS+9legYJYKJRIMNb3zlUDhcNinWFmqsXRA/uphAEEksbMQdoLTyF6GUsLl268MvEVxUq1wtT0FE89/RT1yRb75+eZnZ3h3PlhsGatQ5SwqMJ5dQxhT6OEM972WpRWg8SOFZI0N3R6KVTLKoFBKkcchexrtjhx4g6iKBoGSfLWQHyudr+XDrkTEIYBE80JLurAN7orPRgmLx0EUcy++QOsLy8Qdbt0ust00x65gaxgKNNlxdEZgmJEhhWumH3jYXNaa5I4JpCefCQKQ+qtadI0J7cQV2uEcYIOQ2SgkVoOgiQpr34tzybjELTysVI34wHS6Hc/+ntcn+MVpcA5pIP5/fu45/77+Ou/+Wv6vX5B6S3InYdn5sZXlHAgUCB8n1I51kAIhvtAkcx2QBQGHL/jDg4dOYoKI6zYGdiXf4/3KY2f+24B0njf1WeT3Y491IdPtlPabgALJrf0ux3yrE8sNQKFEIqp2f08UJ9g3/x+nnziU5w99bRnfTWOzDjS3GCdQQmItCJSgmoUkoSaSpJQnZjkyIm7mD14DBHESK3ROLJum5WVZc6cOcuRY8eZnNuPTqre5hdrygdK5X8vLnnRBEq7baC7PbdbSXn8dc92XFFUiFwQ0jp4jCMGLl64yNREExHHWBEMG86dd2CscAihkCrg0uXLzB46gkPBLhjt6+m4PfnUk5y46x4azWaR+RODGtZuxnFI6jA0eKUOPKRFYIXiwMFDKCV47FOPcu7cObrdFOssuRLFTB83gB84j+RD4QpjWDS6OoeSGq00reYEx44c4/ixkyS1hu8JEA6T5vT6fZ/FHGkA3uEkXUd9jfYLja6R8cBkvLQ/+p5SRitNo+vuioqPcIhiMKazhsUL51hfXuLBV7zMD9kdNVqCK0xYGSSMr9zdArybERQ450NxnzV1OOlQUUBzdp+nDXYWJ7XH7Q822Z0VMmstwgkPRXRuiMUvd86R6xlshHgIwighgRJiR8XqahnG20Vk0bib5zm9bg+TG08TPFIVLO9RD5XzTqcxQ0Yt6yxalFXKooJofWC6snyJ5csL3H3nXVSqCZkQaO0pxMtA6dmqbzdadlufg/tqZO3vsF0M77U8z+n2/Bw6X02TyGINjjpN1lruOHYH6Rf2+PM//zMuLy2R56aA9fig1JmCPtu5HRU5R44WllApYq1RxhIEGockCTS5zWnVK8zPTKLJEHkPKWFiapb1yxdYb3cJVjZvrCIHyvNO/UvuvIvcWR7++N+zb24fhw8e5NLCAgiPKzCUiY0x51mUEDw/D084X3Xx1eKi0ub8FBknAzq5xcgQZ0t0hmFiosW+4/fQnGihA43SEqWkp4HWN79HadwHGIdN4TyzWGbyYmizwJjS7hTTtIRiojXJ9PQs62vrAORZBghC6Ss+DotzhkBLKmGAddDp9UmNJPdzirHO0et20ZFGSF/JrdUbLK+uMzE5RaVWI0pidBT5IfVaFYOgBeVYkudz7f4ydyaIx18HO/fDMngoZfz9o5A2KX3iUjhBEie8/JWv4JnTp1i4cJG03/fJZ1VUgv0bBsiQ1Pq+wDAM/fGcwwhT2DNRjIlQTExM8KpXv4pqrYZUQ79gFGkw6i9crSK2W7KzlGudNTW+x4+jTfwHDEd4COFRMVmWYXIfFFrrcMah0CSVKoeOHGVqapIDBw7S3tpibX2D9naHzc1NP8NTCmrVCs7kbG9t0Wi1uO/++5mYnSes1EFHCOXJtLSwNJtNVpYu4YQgjGLC2LPHllDOcbmdEog3Q140gVIpn83xGa847XaDlI9f7ViiyG7YIGLfkeOk3Q5PPvEEL3npy1GxLsb1DUuZzvl8XWtqms21RbK0h47DQbbSO7viumfYcmuJktiXuEURpAiBFTuhajudeL8ZlvhhKIdW+udzoQiEY2p6mle/8lXMTU/xqceeoL29TZb7jIlxFisLSktc2ceIkrIYiuZZWuIo5sDB/Zy8+26mJ2cIwhgR+EF6UjrSvqOXph6TrYoMsYCirnBV4/dCZTe4wdUyabu9d/S5UcN9JZSl0I3wMLQ8z1leXuQld570zZcyQAxGrpZY5yszXWWWbbfzu9rGcKPENxk7wCKUJEf45tMk8U6FY7Dey41kVDcl1rwMCq5WDRvdCEfn/pRNzqOVps+FahJA2dfnKW/3k1QqBcxkeL1XMoYJpDRDil0kUg+rtxSBZr/bZX1thdbkBNV61c+eUr63RuDx/sBVPuPmyA7HYkQKqzSomo7ej+VaiuPYQ7vKkQuFjVFi2Cs6aueiKOLee+4DB3/113/J5UuX6PX7PsgXPki31nl4mvUz3hygnaUSaGItPSMVILRC6QAdKKpRDRGEWJNy7vQzhKEmDAJCrRFC0c0lW738imu8ISI8C+TE1DQPPPAg+tHH2FxfZ3VlhTj0w3SNdQhVzP3Bw3jBlnEB4PxAY1NA0hy+Z8d5ogiH9TrSik5m6BpQ1rNuiRAOHTrIzIEDBQFCOcus+LkFt99n8w+EECAlURyzvb3N5uYm0/Xpop+rhMxJgjBhanqWZ55+ijgI0HVFJakUSUCLEBZrMt83Uqmw3emzum7oZZa+FRgnyYynXq9Wm0RJhanpOaKkgnUbHD5ylEqtgQ5DwjDYQUxTVpOeq/0aR0UMrnfssXGI66huxvexq+m3DAaCIGB2eobXfdEX8Yd/8Id0OtvkaZ/c5DjroZmiGPZsrUXhK7Z5lg16JXGOPMswxWiSOI75gi/4Ak6ePDmwW4hhn+XVqki76WzU5oy/9rkESlcLPEt9Wet548vzq1SqzM7OEycVj37A9/oJKdAqwCpJrTnFXfc1cdbS7/rRB53tNra3zdLSEuvr6wRBSPWOGvsPHKA1PQNhDEqD9HrV0tvBQCXcec+9HDl+gkqtTrXR8MG33IkcuG33xhssL5pA6dmyxLvd8KO/r1Zmht0hVGVp0lPEBhw9eRef/Ojf8tgn/p57HngputIgF76uMoDYCUGlVsM5waWLF9l/JEaIeFAKEIOuoesnlWqFLMsYrTc4Vzrnw2sfvTnKS3Vu6Mh6bL+H51hnUBgq1RpJFHHPPffRak6ycPESy0urrK2vs93tkBeOW17oTxYOrFaKKAyZbLU4cuQwh48cIa7VUSrwTZq6bL63bLfbNCcm2X/goJ9EjiugB2VcuXuG7PnKFQ7YiM7GdTXuwI9XmMarlrtWPB0+DBKeqCFP+3Q729zz0EPFlPtinZaluPJfIxl2x1APO1kbh+dxowLK3eXKzVZKSRInnD5zjjzPC5pY8azf32iWcrcNfLRyNJ5JFNeQSbzirG+LytIQapimKUEQkTJs3C6DmDKAdNYTEChpyUUxmBFfVSqhRFIIbG7opX2O3nGC3vYWOk4w2sMUtfTBLTBC4nDr50vtWMPgM/27OG0SUcClQpIkYXt7G/CQQyclooQAj8FpRBFU33PvfWRpn7/9m79meXERk6U+IROoYt6Qh/64or8jQqMthDLAKciEJQV63Q5Nl/CSQ8fYf/AgDuj3+7g8w2QZmD4Tk5M0JiY5eOTETdBgYc+sQwcB1WqNl770IbK0z1NPPcXc7BxPP/U0y6urdHt9hJaDobogPETWuR3wu9GEnnMeMeAJQywW6GWG7a4lCgNcalCBoNGcIq7UCidfDOCdt5IevJQr1rcTGOuRDpOTs4Q65NFP/D2vrk9Qb7UwrkA6OAk6otaYZHZmFrIuWd4tkosWpTShViisp/aXmiCEMJL0M0tm8LPyOj1c3iepRMzsP8TE1AxpP6Xb3iCpn0THCUEQo7WHLI7aNYTgOUearrC1g/+Vihg+sFuScPTxcd1dUZErP8q/CJwjDELuvvMulpeW+eu/+RuUljgBaafnobHCryBrhwy51hic9FXLMumjlCKKIl75ylfy2te+liiKhucixI59+Lnar9F9/bnul59NV/7JnbrVOiDPfSVXSIHFIpRAFiQnrkg4umJUQtreplatoiVcXl/h8uXLTE7PcNc995FUqkjtkUxWBb6vuRw8KzxcVgmHDjVxrY4OQj9gtqieCykHPuHz0d3ng7wIAqWxG9SNPze+6K+eoS5/75rV3PG4GMDJhHCoOObk/Q/y0T/9E049+SR33HMfMgg9/AyfqZNCIFTA3L55Li2cZ27+AEqF/lmfMh1kTa+XHD58mKWVFe7IMrQKhpj/0sneNYPk3zvqpJZNoFI6jxYUIVI6rJLoIOTI8Qr7Dxyhs91mdXWVhYsXWV5eZrvd9oxcwtM1R1FEvVFnbm6WuX37qNVr6CBAaA0M+0mkcHTbHc6cOsX++XkaExNFE2vp+I7QS499f9dTrrYWxqsg44+Nvv9qx4AyU27pS4HMLKtnThMqhaq3sOX1iOGaQxRkIUIUvWY79XC17NhuAduNlKFOhtcZxxGNen0wGJCR+203HY2vv/HnRv8eVo9GAn5Z0ucWvS5iZwXriuTHbbEx+GGX7Xabfj8t7jlV9CMNr8FX21xBfCCKob0FNM9ZJDsDJSc8NbQKNEJpCCJkQTUcDHLl7AiQbrusohiCTnfYq5HHhBAFs1ax3kcSQuPX4tvoNJGA/fv3c/LocVSW0eu0vT+pBNZYbEFYUA4JpbCFKWAsdNKc3Dmq1Rp3Pvgy7jx5J3E1RiuJEhItPfGBEoYstzgdUq9P3Hh9QQHpsWALKvPQO5snTp6k1ZggDEKeOXOW8xcvkBkPoUMWBDxuaHqcYwBhdXKoc1E6VB4mgEXTTSV9FdFLeySVEKFj/9lyJxTqVjljuyXABo8VzKtYS5wk1Bp1Ntc3BuQVFj+mwElwUhMlVZKkRpJUEX0/oNgYP/gT4+GZCEnuIC0o0wOtiCINiSQJFdiE2bk5pqfnqCQVtjcvUqvETEw0CaOoGDArd1RMRgPW5yI7TezOhN1oz/R4AuuzJvy4cq8s6fxLxEwlqfCa17wGqRUf+csPD/0MAcWEVZwwaCH93le8IFAaLZWnCxeOkydP8mVf9mVMTEwMySxE2ce7U0bt2GhVedy+Xc3fu1ayjN2OM/qZpf4G/bfFy7r9jCw1A/ZXX6kFh0Tj15ERvrc0z3OeeOJTXL54genJKV7x6i+kNT1NGCU4ITGFP6AHKIuyx3MI9ZPKk5FpHRQsqqpIdAzbLUa/8xeTvAgCpVLc2G8vw3tuPKDavVw66pSNZr12GgE3kpXx74sbdR563es59dSnWVm8yNz8AXKhyUWAEA6Bx7xPzexj6fICGyuLTO8LkaGiRMELxBUcDy9EDh46xKm//BuWV1aYnY+RUhXHv9LIDW9sN7C/o463KTD7ShVzIrAI4bOuWsbIwBJUYxrTLQ4ePUyv0yXt9TFZDjiU9hjrMI4JYz94juLmlUINICBaCWyacvn8WTSOg4cPo8NgsNGWN7Qov9gRA3Q9ZDwAKh8blXF43ehrdoOK7XbM4gkcCmF9Nempp05xz/33+ubhq+yBgw2pDKx3ef7Z/n0zDOCOwAVvpI0xJJVKsfns3KyuFvCWOhuHL473XQlRQIbEzs92oqSL2BlM7haY3Q5BgZ8fJdFCMT09jdWyIKKQxXi18hqEd2zK9YVnrisn2XuIVDHXREpEIAhchEFQa2lkECJKdkCG1ZUS2uMTEjefzOEKGb0HYVA9HX9eCA/xSZKELC1gYxTrpGAm8NTpI1I4V0IpGs0mcRxy/OgRttdWuLh4mTQ3fpis8zNJTJ5jjKGLIy8cYqk0SXWC+bl9nDxxkv2H/ZR7HSqk9NW+QCniIEKGAZEIsEIWBDk3XgRlJc0gpPIBtQOlI5qtSe5tNJmcmaX3l31W1lY9ZNoayhQOQiCKOVSumG8my+BUKbQAHQnyNCMKAoIwxMiEDIG1oIzGSV1Qhfu9tKxa3g6B+KjNFgNbIbAS4qTC8TtOsrS4SK1W99fuhB9l4STW5Cgd02zNcOrpp9ja6uGApFohiiKsMaTWVwhyZzEuxDo/s0tJTaAUlTgmiiscOHSUeq3h5zVmhrvuvJtGo0kY7iS/uKJq/hz1N2r3dthAMXz+arZxvNpyNT3u3OeKvVkIrHM0m01e84VfiNCSj3zoQ7Rzg8iLRgUhETpAOD+b0bnh7LxyiOzBwwd4wxvewPT09OCzS+Iei7viXEbPXYjhaJJxGU98Pld/4lmToSN6E0WSq0zg1WsNGo2m79HCk+54M+WrtD6prXDA5GSLU08+zsREk/te+jIP2VMSK3wQLYv1qykRPP7zHCBkMSpD+kSJGEk6FynNwt4PfeBbXe292fIiCJSefUFf7caAZ1/gzya7ZqWkZGJqmjsEPPbw39Htdjl45Dha+V4dKyF3DqugXm/y8N89zMu+sMZ0HKOcGwDvrqcjW5+cZnpmlo2VFWZnZpFhMSekyCAg3A5n21mLH6PuN1ThXTCccL6R1/np2M55xi1j/WuddX5ohA1wThOoAB3FnmLS+nx1WQlBUJA9lEbMn1Gepdg8hzBi4dwFzp49xwMPPsjUzCxSFkxc/qQZ0dbwOq7jnjtqNHcLPHbbcMYNcxlwjx7nyvUmcFahhGVpcZEwrjA5M09JgT0qu0ECrhZglK8vf+8GybuRUmawcALhh4mwsrpWGOkBbnLgyO1439i9NZoFHH1d+Xugl+IzBSOZboo1vMtxr9DFLY8K/DkYHIGUJElCLiEQDDLK/iXFeVqfhS0fE873kogcnClgF2OJHoVDyuEEdu8U6GEQqeRAd7ci4+9Z/UbukZFbxYmChdQNYXQ+RAQr/WyVMAppb61gbR+pQqwtK7BFTCWK+0IKhDWDpFGtMcG9Dz7A5XNPcd6sMm0iZFih1xdsb3sKX4TAFrAYJSW1WoXpmVlO3HGS/QcOkiQJSNBBMZdKF1AzHSDDEKmDAY2xUjfHCVFKYE2xSoTwiTLhE3NSabIs5dDhw7wyTfnYxz/G6uoyVkgsAl8UMTucS+d8pUQIgZYKpHewKkFEtVphYnKSowcO0Fm8wGa6jJEhKojRgULqnb0j/pRug3uO4v4BBLZIFCpUEHLk+B2srq3RS1MqUaUgHJAY4UAFoCPmDx7l8sIC2088xvZ2mzw1ZLEPiJyDPDfk0hO0iCIl2u/lBFoxPTXF/gNHmJrZRxBWaG9ukPYz5ub2EcdVVBAO4bBa7zzf5xVolnuRPzdX1n0GcY3Y+bqRPUiM7LlXwOxGKiaDfQ+GSRhXVmcctWqVV7/q1QRC8ld/8RG21tcwJkcKUECeO4zJcdbDOWUgiaKIo0eP8qVf/iUcPHjQQxwH/WIMAoNSN6M2rxw5MVohGg3oRm2kMQOO/OcWKJQKHehqqFRPlDAcAVK4MLS3t+h2t5FaoLVPFFPSxwuFszlCeFfMCghrdV71mtfS7/VI6nWkUljnfA/myLmq0nYzDIRKKJ4Qfij78D4EIfx5eS5GMbCTVySWPs/lRRAoDWUcBnW1QOjZHN3djjf+927HKrPazdYkJ++6i8cfe5Q8zzlw6DBBGPmGWAy5zWl3uuzff4ik6rHbg4zOjl6UFy4ySjh58iQL5y+grAGX4wjwfN3gnKVIVQ9LwqURRmBFgel3IJSvdpV9EGIwI8JijEVKkCbwelIjxsjaIh08vPEE+JkwlHN9DDoSrC6tcGbpGTrbHe66934OHb0DHUQoFXiDUMKNSmxtYeV3Izh4IfJsx7oaxG63Y4wGTDCs0A0eK4yaSbc59dTjnLzzbqJqDSPFjk0KvN6NMcPm1WTzx/8AAQAASURBVLHPuVpgV37uzRKBxAqf3zPS0uv36Xf7tHsZ9933AFJHg4BZFE3jzu1e6Rnd3J5NxzsqWAOnZxiM7ZZltGXgDgM46q0WD/sxrK0ss7W5TpalhHHi1w07r9c7JcPB0TsCdb2zCl5umFqKK15bOhGMHb/8982Ucs3vqAo6XzkbVJNGbbWgqAH4IODY0WOsLi3R7XaoNGPf8WULJruxe0QIENZiywG/lYTMZB4yVo2pN2cIwgniah0rHBvra3S2eyAV1XqN6elpJqdmSCoVPIGIwtNmDwNNpTxkKAgDpAp8X8CII3fD9SkEPp6RGOd8Jtl5u21FhhKAFBw/eYIoCvnkJ/6ec2fPYSgqlkVfaWnzwTtTEolyIKUmqcTMTs9w5PAh5g4colarciGQ5LmlOTVDrVlHauHZ7uSw/+126FGCkTVeJCulFBjAobAI1jc2WVpa5kBS8xUP6VEVOAU6IK43eenLX001injqyU/T67YxWYq1nvq6n2X0jGdUBIfWmlCHVKo15g8dZ9/hY0SVBtYKFpeeRgeaKI59YB2EA3IbIeQgOHjegZJwCDmCvCkQGf7PYs8RICgo3vHjHvx9U7xlbM7j6D3lrEDgAyKJ8SMeCh0LBdL617VqTb7wNa+j1ZrmL//ywyxcvIDNcvIsRSqLRuGsR5tElYg7776TL/7iL2bf/vkRW+grVTsCsrGfUej2+D4ynngcryjxnIYhS4QYYbsTpa4cdsfcQ1f4XCCkI0o882PpAzrwkRESyu/AOX/HSUm12aLSsIMNS7nyeuTIue+yLxbn5JlgPYKHQm+ySGILNYLSuR02w5ssL5pA6dkCnWerIL3QEuuosbLesjC9bz+vbjZ58jOf5q/+6iMcPHiIyekpjHNopZmcnGR2dh9hvYaQaoDxvu7LU0Cz2eTJxx/j8uULzB06XGQO9CABMhrolRUbIXbqbNSZyvN88FyZbZRyGMSMl7HdILtjdpzaaDM+KKQSTM14JqDDRxvM7ZtDao3SuujRKJxmdeVMnOstVws6RnUy+vtqGbby+kZ1Mpp5M7nB4lheOEfa3WJyehKnJAhbAsYGxy6b7EvZbUMYfW78PG4G5M5/NoN6mHSwvb7BU5/+NM5aGs2GP58SQunfMcgKfrbv82qO1Q5Iysgxdjva8PnbK6sNvqLr8pzlSwv0+z2fWRU+Izg469HNbwQiskMHbrh2dqxjOaafMaf9VlWSShm/V4YnxiDo9UmX4j4sv8Miv1SrVRFCkKYZNeln3ozCikarI4OsKxInDPVmi5m5edrry3S72wRBzKHDR5k9cNgPr7V+UGYRfxeBVxGMl99Pce5lH57WmqAY3iuUftag/4aI56ku8kpF74wAhcBpReZ8z2kUSY4eOUZrYoInP/NpnnzyKdY3NjB57qv9xfUiQAuJlooorjDRmuDosaO+j7ReR0YRQkhO3vcABw4fI6nXqTb8UEtdzDSTBZRUFpT0N1t2S5oM1gTghMA4j1pQOqQx0WJ1dY3aRItao0kYK6R1fpC8lEgVUp2Y4v5XvIZ9Bw9x6eIZLi9cYH1tnV63j0OgtYctqjAiqdaYP3iY/QcOMTO7jzBJkCqgvdXGOMfEZMujMcIQpYMC6i6LdbeTtc4+D5u+69orHHv/59UdEVGs+XH/YPzYQnionRy9he0oRF6SRDH3338/+w/u55OffJjHH/OMjN1ub3DvTE1Ncf/993Pf/ffTbDSQI4meHQx+lPO9hp9/tb2itC/j1aXxx8oE8fMRax2MJW9FYcfzLMNaQyVJcM7R7/dJiv0PKYpBr5Kyt2NUz6Wv5Ip5mEMfTvoKoXODgG28ejs++kEI4Sn/hQNK1MawteHFFix93gdKV6sYXe21u93gu8m4Qd2tV2n830I4jHVIoQgqde6670E21tc4e+o050+dIZQCHYTMHzlMVIsRWhVU2LJ0i7lqc8rzEKEVcRIxNTnB0099Gp1EqKBCsz4JWl1RtRhcIwD2quQA5eTsUecMBZidZe2rVep2HE8IfKAkqTRiTjQmimbDYVZWjN70Ize/c+45Tyd/ITKejb/aWnq2NVYOW91ub3H+zDnIc1YvPc39995HXKtiJB7uWCT7yqDqalXS8WBot41r9N833EkrfXIkCsnqwmVWLlzgoVe+2jetSjncfwrPdxQ2ccXhdnnsatWn3a7v6vrwXvS12oObIcLB9tYG9WpMHCmCwGeTpZA7HH5/7/n7Zvw+E0IUgLSd3/cANsPOgGg8qzr675sVXI/K+BovHZYda8bteEOREfdMgZUkIY7CompCQXgyDCzLe8kaitFBnoFLRhGHjhxHCcfG2gpJ0mBm7gA6TpDkKAHGusL2GSh6CmAEweDkswRKZeN0eRE3XqQM/JBcIdEIjMn89RfzkQKlMEisUBBKGpNTPPDyl3HyxB1cvrDA6soy7a0tttpbWAFBFNKoVJlotGhOTdGcmiGuVgnC0Dux5RgHQiaaLbSQPkCU/mfI2sYgYLrZMmord7MfBU4RhyCKEl71qi8gNxYVeaYwg/XMq0qA0AhncUIhVMTM4ZipfXMc21qjvbHJ2to621ttXNoBIak0JmhO76M6MU1YqRHEFU/PrzQ1FfDyV76C9sYqTkpkEHj65vKcyx9/sv7Xc7z2e+69/wXr70bI1/6Dr77Vp3BdRUoBbjgcV5QQx8ImrC6vs3R5kVqtRqVaLejBAWRRr5NFPmhnokuIMqlYIFNMuYY9nNf/vXN4+2jyadTmD2jBhR/q5YrArAyYXnTiXuTya7/2a+6rv/qr3Q/+4A+67/7u73Yf+chH3Hvf+94XdMxv+qZvetbnjTEv6Pi3Uowx7kd+5EfcgQMH3IEDB9y/+Bf/4orXvOUtb3Hf8i3fsuv7f+3Xfs3Nzc0N/g24P/iDP7hh53srZU9X1y57urp22dPVtcujjz7q3vzmN7t/9s/+mfvpn/7p63LMz2bfP9dkbw987rK3rq5N9vR07bJn129f2QuUfu3X3Ac/+EHnnHPLy8vuO7/zO92P/MiPuE996lPuW77lW9yP/uiPukceecR9/OMfd9/5nd/pfviHf9g99thj7gMf+ID73u/9Xvft3/7t7sknn3SPP/64+4f/8B+6f/kv/6X7qq/6Kuecc//23/5b90M/9EPue7/3e93m5qb76q/+avfud7/b/d//+38HN/sf/MEfuF/7tV9zv/mbv+n+0T/6R+5tb3ub6/V6t0wfn01+5Vd+xdVqNffkk08655z7sz/7M3fvvfe6gwcPuq/92q91WZYNbuYzZ864Bx54wB0+fNi99rWvdevr625mZsZJKd2BAwfcU0895QD35V/+5W5qasr95E/+pDt16pQD3OOPP+5+/Md/3L3+9a93y8vL7r777nNzc3PuxIkTt1gD1y57urp22dPVtcuerq5d3vve97rf//3fd84597GPfWzgrP3wD/+wO3v2rHvta1/rfvZnf9a9+c1vdhcuXNixH5QOyXve8x73Az/wA+5f/st/6Zxz7sEHH3Rvf/vb3dd93de5Tqfj/vW//tfukUceGbxncXHRffM3f7P70R/9Uffnf/7nN/uSn7Ps7YHPXfbW1bXJnp6uXfbs+u0rn/fQu+ciU1NTxQBWWFxcpNVq8W3f9m3cd999fMd3fAfve9/7qFQqALzzne/kt3/7tzlz5gw///M/j3OOf//v/z2HDh3iK7/yK3n88cf50Ic+xGte8xp6vR6PP/441lp+7Md+DK01v/zLv7zjs59++mkeeOABvv7rv34wKO12lL//+7/nnnvu4cQJPxQxDMMBxO6DH/wgn/jEJwav7ff7xHGMtZa/+Zu/4Y//+I95z3vew9vf/nbOnz8/eN3Xf/3X88Y3vpH3ve99fNd3fdcVn7m0tMTTTz/Ne97zHu6///aEB+wme7q6dtnT1bXLnq6uXb73e7+Xn/7pn+b9738/r3rVq3jkkUdYX19nY2ODQ4cOUa/Xedvb3sYHP/hB/vzP//yK97fbbR555BH+23/7b4PHZmZm+Hf/7t/xH//jf9yh61I2NjZQSvEN3/ANvOY1r7mRl3fdZW8PvDbZW1fXJnt6unbZs+u3r7wIwYZXl5WVFcIwBOD1r38973jHO/jABz7Ab/zGb+zavA87sfphGA4mi1truffee3nXu97FL/7iL/KqV72KSqUyYCUrb4ByUvw73/lOXve61/GjP/qjPPnkkzfjcp+XPPTQQ3zqU5/imWeeAeB973sf8/PzAyPXbrcHr/3ABz7A5uYmjz32GFEU0W63UUqR5/mOY548eZJqtUq/3x/ov9frsbCwAMDRo0f58Ic/jNaaL/uyL+Pxxx+/GZf6gmVPV9cue7q6dtnT1bVLo9Hg3e9+N7/6q7/K7/7u7/IN3/ANfOu3fitvectbAKhWq4CfxdLv94miaKCb7e3tXe1+s9kEII7jHe9xztHtdjlx4gQ/93M/xyOPPMK/+Tf/5iZe7QuXvT3w2mRvXV2b7Onp2mXPrt++sldRAn7pl36JP/7jP2Zra4t3vetd/Of//J/50z/9Uz74wQ+yurrKG97wBu69917+6T/9p8zNzfHWt76V7/iO7+Af/+N/TKfT4Z3vfCfGGN797ndz/PhxAO69916klLztbW+j2+3yjne8Y8dnPvDAA/zUT/0UTz/9NK973et43/vex5NPPomUkqmpqVuhhmuS7/me7+GJJ57gda97Hc455ubmOH36NP/8n//zK5hk3vCGN/CzP/uzfN3Xfd3AIL7yla9EKcXc3Nyum+H8/Dxf8RVfwZve9CZqtRoTExOcP3+eb/7mb6bdbvPQQw+xb9++m3KtL1T2dHXtsqera5c9XV27fOADH+CP/uiP0Fpzzz338PVf//W8973v5Yu/+It3ff3rX/96fuzHfoxTp06xvr5OvV7nnnvu4Yd/+IeZnJzkne985xXveeMb38jP/dzPce+99+Kc45FHHuFXf/VX6fV6fMVXfMWNvsTrInt74HOTvXV1bbKnp2uXPbt++4pwZSpoT/ZkT/ZkT/bk81R6vR4/+IM/yD/4B/+Ab/iGb7jVp7Mnnyeyt66uTfb0tCefq7IXKO3JnuzJnuzJnuzJnuzJnuzJnozJXo/SVcTanROmf/3Xf53f+73fe07HeNOb3nQ9T+lzRp544gmEEJw+ffpWn8ptL3u6unbZ09W1yYtVT7/7u7/LX/zFX9zQz3i2feD57BG3s+ztgV721tW1y56ubqy8WG37rZa9HqUx+fVf/3X+5E/+hJMnT3Lu3Dl6vR7vete7APif//N/8qd/+qfMzs7y4z/+47zpTW/i/e9/P7/0S7/EXXfdxcc//nHOnDlDs9nkW77lW/jUpz7Fu971Lt70pjfx67/+6/zMz/wMb3/72/n+7/9+fvmXf5ler8ehQ4d429vedmsv+nnKBz7wAd7xjnewubnJV3/1V/PSl76Uf/Wv/hVf8AVfAECapkxNTfHbv/3bTExM8JrXvIbz58/ztre9jQ996EMkScIv//IvY4zhS7/0S/mar/kaPvzhD/O//tf/YmJigu/5nu9hY2ODhx56iN/5nd8ZNAF/Lsqerq5d9nR1bbKnp52yurrK2bNn+S//5b+QJAnz8/NkWcajjz7K//7f/5vv+77v4+TJk6yurvLGN74RrTWPPvooP/ADP8C3fuu38lu/9Vt8zdd8DV/yJV/Co48+ytve9jaOHDnCD/7gDzI9Pc3rX/96PvzhD9PpdABPYvDnf/7nLC4u8t73vnfHc+9///v5hV/4BbTWfP/3fz8//uM/zk/+5E9y+PBhvuu7vov77rvvVqrqWWVvD9wpe+vq2mVPV9dH9mz77SV72tlF3vjGN/I7v/M7O6hP77vvPr7yK7+St7zlLbzpTW+6ItsGcPr0aV75ylfyxje+kZmZGe655x7e9a537Rr9nz9/nq/7uq/jq77qq27CFd0YEUIUk+gd73vf+1BK8Uu/9EscPXqU3/u93yMMQ9785jfzW7/1WzSbTb7xG7+Rj370o/zmb/4mBw8eZGVlhV/4hV/gn/yTfwLAT/3UT/GOd7yD3/7t3+atb33rFdSYr3jFK27l5b4g2dPVtcuerq5N9vS0u3zVV30V3/Zt38aXf/mX8//+3//jp37qp3jssccAeMtb3sL+/fv5tm/7Nr7/+79/1/e/7W1v47HHHuP3fu/3aDabfMd3fAdveMMbAO8ITk9P8zVf8zX84R/+IdZasizjT/7kT/iiL/qiwXPvf//7dxxznGr7dpe9PfBK2VtX1y57unphsmfbby/ZC5R2kZJ+EnZSn44+BlfSm/6n//Sf+OhHP8p3f/d38z/+x/8YvG6c8hLgv/7X/8pHPvIRvvVbv5Xf//3fv7EXdIPkfe97H69//et585vfzJd92ZcxMTGBEGIHnedb3/pW3vjGN1KtVvmVX/kV8jwniiL+7u/+jiAIeOaZZ1hbWwN2Uln+9//+35mfn+cDH/gAd9xxxw5qzM9F2dPVtcuerq5N9vS0uzQaDcDPWwFPWd3v9wHI8xxrLcaYXe1yHMdIKQd0xc65HYxTo3//4i/+Iv/n//wffuM3foNOp7PjufLY5ee+/vWv5/jx4/zqr/4qDz/88IAe+XaVvT3wStlbV9cue7p6YbJn228v2QuUriLj1Kd/+Zd/yR/90R/x8MMP84pXvAIpJQcOHOBnfuZn+PCHP8zLX/5y3vOe97C8vMzk5CSVSoW5uTne/va38xM/8RNsbGzw3ve+l09+8pMA/MRP/ATW2gGV6ueifNM3fRNve9vbWFpaAuAnf/In+bEf+7Ed2YlXvOIV7Nu3j42NDb78y78c5xzf+I3fyN13341Sive85z0cPHjwimN/7dd+LW9+85t3pcb8XJQ9XV277Onq2mRPT89d3ve+93H+/Hm+7/u+jwcffJCf//mf5z/8h//AmTNndn39t3/7t/NDP/RD/PEf/zGve93rePDBB3n3u99Nnufcc889vPvd7+bxxx/nK77iK3Y8943f+I28853v5MCBAwBXUG1/LsjeHnjtsreurl32dPXZZc+2316yx3q3J3uyJ3uyJ5/38ta3vpVf+IVfoFar3epT2ZPPI9lbV9cue7rak89F2QuU9mRP9mRP9mRP9mRP9mRP9mRPxuRFD717/BEPAzA4HALnwAE4h8CgnENi2Fpb5dypU+zfN0uW9thqb5AkCSsrKzzyiUfo9Tq89tWv5MjB/ayuLtHe7hBXarTm95OLgF4Ordl5VBDhrMUBUoKS0n+g8J95z30P3dDr/bu//egVj5W411H860Ccw59gGU8Lypf5ENuxI9QWjtxktLe36Hc7tCaaBFqCtRhrAElnu0cQJmgVglBkxiCkQEmFkP64QpTY+JGGYeF/BCCFfw1C+u8NBt8fCCTgsEjh/xamR7a9yif/7mNcOH+Bf/Wffv056e3Tn/70QEcCh8AinMMag5QCay39boetrU263S4SQaWSUKs1kVKgtEZIQZbnKB2QW4t1FiEEee71ggObpTjTh7zH4sWzLFw4R62ScPHiRT7z5NMIoTl85Bgzc/M0Z6ao1mtMNFsIFFJKrBMEYYyOIywgtQYB1oJwxi8zk6GFIFCC9uYGW5ubrKyuEgQBBw8foVKt8JIHXv2c9PN85MmHP8Hq6irrG+tEUcjU9CRKK9J+lzzPkMJ/z1k/ZWnxEmurq0y0Gky2WggHF85f5Nz5BfYfPMzREydQcRWhJEiFkgotJcoJhJSgFW5snQtRLiJ2PD742zlOnLzzBV3jX/3N3wAO4UDgkMXalADO/7YChPBGQAiwhuK83OC2s8Uf1hZvFoLcGExuEFiczciyDGMM1ub0+j22t7fYXFtj4eIFLp47T6/TRitJq9libnKaEAVAUqsxf/gwYaVKanKMA6EEYRChlSRP+2xtbtBeX6W7tY5EgFSEOqFWb9CoNzE2x2LAGZzN6ffbbGyu0+91iZOEWn2CxsQUlcYkQVJD6hAnNUEYopRCCYmSivtfQFPxZz79+I5/j+YAnXODfzvnsNbi8pzVS5fQwqGl4/KF8zzz1BOsLl3G5BndXpfpmWmmZmY5fPQYzdYkf/fwJ5k7cISX3Hk3KgjJrbdXUgV4SzUCZRG2+N7BSTHoMSh/7rv/wed9rS9EHv27TwB+TZW9ItZar5fix1iDNZbc+jVljMEZAybHOYsxFucsaZpy+fJlFhYWsFlOlmW0223a7TbGGAKtCZRittXg8OGD1BsNNra2mJyeZf/hg+S5AK2QUoGUKKXRuvgREiEED73yVbdET3//dx8DdtqF0TW062NCFLo09LpdTJaytHiZ1ZUVnMlZWVlmc3OTNMtJsxylNLV6jTCKqVarVCoVkjihXqvRaDRJkgSlNUEQIQPtrYAQCKlQxV54hd0CXvrQy2+scnaRP/nA/6bRbBCGEe3tbZ58+mnWNrYwzrKxvkUvT3FOIFWADjRRlFBJQg5OT5OEkvXVVc6dO0PeT5lqtZiamiJJKoRJQrXRIK7WCeIYFQYoHeAKh2D0nhqVUTu/08cZ+hR33/PADdPHpx57ePD3+Lop+/6cc+AEWL9HOOewAgwG64p7Msu4fP4CH/mz/8fGyiLr6+sYY6lNTCB1wMzsPl7+qldx6PBRHAIhhXcuwe8xQiBLHUmBHLVFYxOCRqF4O9Z96WGN6LG0o/c9+PlPBPGiD5Rg6IR4L1sUi8KCtahAY9IcIRX9NGV5ZZWDB+bJ8pynnznF0089xfnzFwik5PEnPs3y0iImT9E6YGJKErY76KRGElfRAqTNCwcNHzCZHO+TOdIsveHXOmrgdzOwV8iOoAiGUV158wx/l08r6R2f9tYWWsLkRAOcw+U57e0OZ8+eR0lNa2KK5sQkMgwQQnmtG1sESjubhQHv6LrBKSGdw3siOx1eKQVSgM0LR0UKBBZrDb1el8721nNVG9baESMxEhwKH/xIIajWqoRhwObmJstLi/S6bTY21rHWUqlW0UEAOKI48ToUAq11YSwleT/D5Bl52sH0O2T9Plsbm1y+uMDCxQU67Q65ETy29TjR06dpzUwyv38/Lzn5ErQO6fUy2tvb7D90mEarhVDKB/xa4RxoIbF5hkRg8ozFS0ssLy0CMD0zw+TkNEoHGHdzcMu9PCOqJsR5n16vS3t7i0qS4ExO2tmmu71NHAS4PGfh1Cmeeeopqo0aL7n7LrCOjY02cRDSabfJ0wwR2kKtAuGkd/iLH8Y2qPK73K2gXr5GXu2eeA7iXObXfrFuLaAQWOc3KuPwMXJxWwkLIBGDBMXQyR919q11GJMXzEjWr5uiSTrL+qyvr7G0vMjSpcssXV5kc30dk2U4Y8h6BpE7WpWEQAfU6zUkFpv1kEISxTG5MfQ7bbb6fXqdbTY3Nuhvd2hUqkzPzFJvTfj1pRRaK4zNCZTC5jkuz1C0mGpOs7mxxvLKMhdOn+NytMzc/EFaM7NUGk10lJCnFqOUvzf0C9f3UO+fHSghpGR6bo61pUXanTaZsaS5pZOmSOdYXl1jaXmFqZV1umnO1PQMKyurzB04gnUOYW2xrOTw+2HUlg4D3dsJt2EZrqUyCLLWDn6ccxg841aRmyrWsP/Jc0OapmRZRq/Xo9vtYYxlbWODPM9J0xQLaB0glcI4x9rGFpw9R73RoFqvEQRBEWwJpFCMrvUyeEOB4PqtiRcq48H2+ONloOmcI0t7ZFlG2uuxtLTEpYUFuttbrK2t0++nKK2RShX21iGEDy7jOCYOI5rNJsb47yOKY0B6Z01JlFJFanBow666f99EiQJFv9NhfXWdpeVlTj39DKsr66ggIMsyHwBYgbEWIRVRHBGGAWsLF6lWIjbX18Fa9s3O0JhoMTU9Q7M5gY5CgjBBhBorJNY68jQlCMIdRCOlHm4HXVxNdjs3Vzo1hblwzuJwWBzGWpy1xElCr9NldWmJbqdDluf0Om1y61hfukwlkCTSoZRmcnoaGyYgpA+QRj/LDW2REKIoDzxLonx4kt7HGvkthETK21fX11Ne9IGSLWNlV8bMfiU5rA+ZnMUWrCv9tM/W5iYHDx7EOMG5cxc5e26BdruDlvDEZ57mfBIxUa8yt28OJ9YwUjN/uEochSgcLksx1qIDiZSK3OSkWcby8jLd3jYPvfJ1N/R6nTOUmWvnyurQYDvcJZAaVmmKR0cCGbvjxvPv8Q5mpAOkg972NttSsL62wvr6OlpretsbbG62OX/mFMeOn+DIsTswmfF1Gmv9BqJ8ttta/9FOCIQdBkS2uA5fXnI7Ny7rvKGxua/YWUe/12VtaZFeexOT9p+n7nYGhg5RVAQV1hpy45A6pDnRolqJ6fe7bG5u+p+NlDRN2dzcREiJEH7D88GTQAqNSQ3d7TYba0uk3W2wGe3NdTbWN1hd3cBagUVi+n3y3LG9vU17q02v00Ug2dpq008zkkqFOI4I4hjrDMIpQGCwdLa22NzcYHN9nSzrMzk5yczsHElSQSqNExJ7k5wTIxw6DqnYGlme0e12CKRA4Vi8cJ7FixepxhGR1iyfPcvm5ctsbayytrrC8WN3cOjwUc6evUin3caYHO2sr5wJ6ZeGEzghfQbWOpxww0zb+Hdb/B4NpK4HKtnlmXeerA/aAXzBSA42dedLRAPXR4vSLHv744oyt793HS4fOrjGWKwzZGm/SAT0WFtb49KlS6ysrrC1scn2docss1jjsJml389IeymqVqFeS4hDjcv7OAFSB3Q3N1jf3GRjYwOT5yRRzES9QTK9j3ptAh0FICVW+8pTKsoAwRGGIUJI+tsduu2UtGuQTlNL6iAE68vLdDsdmpOTTM3tI6gkSBnhnCKz+QvX92f5zkYzurZIWFWbTYIowDlLc3WacxfOs721SZp7R3VxcYW1jTZBEPrXKo0UcrTIPnDwi1I2CJCDU7k+a+l6ibE+CHJFQDIMlPwOaK3FmtwnEG1RXcpy8jwnNxlpmtLtdul2OmxttVlZXioCgH4RvFuU9PsbQuCsZbvTIUu75MYwMdkiSRKsNVgrEFaBFANcwGjgIcStbzYfD47GA6bdExmesnp5eZkL586zcPECq6srHm0gFZVqjTipIHNDr99HCEGn0yEIAuIwJk0zgiAcJNKcEwTWoKMIKctECrtWxG9VoDA7OcWlpSUunDvL+fMXWFlcYn19A4dA6wCUxOSOfpaCkMRxTBgGbGEItCLrp0w069SbLQ4cOszERMv7AVJgAHKDk8DAP7gySBq9/vGE2Khtv1Wx1K4BdrnfCgfOAh5tYsvKt3NkxmCsY7u9TZamCClIez2cg561nDv1FLES6EBzz/0PUpudR6gAoZTfAwspgEuM26TxxOHu6KLCD4NBeHU73J83Q170gdJ4kLQzWIIszz1kRimipMLi5SXOXbjImdNnOHthga3tnndgrWV1fYtet4uzlonWFJMzFWr1BpVKhSiIwBikc2glscayubnB+sYG/V4fpRVxEN7463WuCJJKG7sTVrDbhu4QI2mI8mZz2CJT73a+mLTXIwpDWs0m58+dYfnyReqVhCSQ4Aym32F9+TKXLy1i+j1q1YRaaxIZBD5TbnOMUVjrUCrwpWQhEcLDy3zFAJywBUKpDKDKm7yA3Tnv8ne7HVYXFjj1+ONsLK1Amr1gHZaSG18hVEpTOhnOOWSgiXWFuFphanoG5xz9bo/tgsI0zzKy3DsoaZp5p15DqATS5Sx02lw4f5H19VWsMaS5IU0NQoXoICLNDUIY1pdW6GxuIYXEOsfcvnmEzcn6PaSUXqfGoKTCmpQLp5/mzNkzNOsN7rr7LiYmJ1E68PA8Y3DSgVQvSD/XLALSLENIQVKN6LW3WF1dQeR9tjc3WF9Z4lJ7C9fts7K0iDUGyFlub5FECYEK2FxfZ3JuH0pIbG4xCgR+sxFYD3sss/r4Kq4sAqkda/0G7Zw26w6d0KJs5DcXHxxJpXBF4Fyeg3FuAIjwwZHPMlKATE1uyI2HRGVZTtrveue112N1dZVLly6xvLxMp9Oh2+mQ9jJcbnywZgXGSPr9jH6/T6ej6Kc57X6PIIrJHaR5jrUOrTSNiTr1Wo1qpY5SIU4oRBAhFKjALxVjc3CO9sYmy5ttTC8n76VIB1GYMD1TJ4wiwLC5uc7a+hqnVhbJ0h7T+/fTnJzCmpQ0v3735bX8WwiBlZKoUiEIQyqVhH7a54lPf5rtxSWy3GGMo5/1EL2MXr/PdGpob22T9VN0FOFXm2EQNzlbxEnDhNIwsXJ7SG5zrwuzM1AadfJNYZtwvnKZpRlpntHt91hdW2NlZYXtrS3Sfkqv16PfT+n1+r4SZB1KKTJRHDvPIO8TBQqEIrp4CRmETM3OUK83ESZHidEqauFAjiTGbqVcS6A0gC4WVbksy8h6PS5dXGBhYYHFxcUikPR2W6oeQip0GPh1aC39fh8pJV3VJcsyXzkaOPf+bykVrqjSoVSBwh06vdcrwfN85DOf+QybW1usLi+R9ntUoohtpej1+6S5wQFpltNPU6yDrNcjjiOk9tkFiWB1bZPzFxdoTU4RV6pEUTS4dgob6awjdwalhrC63eCR43q52XK172EHBNjZQaJMOItwdmDrcb6a1Ov3efrpZ1i4vEQ/d6SZp1U3eeZvjyxlZWmJJAzZt2+O3vY2Ya+H1BanA5RWCCkHyeeyguS7GtyoC8goFftocOl2FpP8594G9+bNkr1AqQySSoffOTxApoAmOIMGlNJMT8/wxBOf5uFHHuX8uYusrPmso9IBkVb0O23vgKQ5Ogg5dvwOJmfmcVLhrEMKMCZnY6PN2toaa5sbSCmYnJxiojVBFMU37ZrHDcd4RgzKTZ7BDwwqxP495c8OY+TLvzY3JHGMMzkbq6tMNQ4ThRGXLl3i/NkzrK+tsbWxyplThrgSc+jESZrNFkiFMQapNEIolDZFiVchpEZIbzSVdAXu1kPtGNlkvRNsEM6Q5X1WlxY5e+pp1peWcFlG8jynUHuVja4TfMbPWg8nKIy5sxaExGJRUiO0xFpLXG8QJBWUVOS5Ic99Z1yeZgjnYYc2T2lNNXHCcubcWbY6Pd8zYCxCahySfj/115f2qCQRaZoShSFRHDM/N0s1iXEmw2R9pPJ9S1I78u42KxfO0l5Z4uDcNJMTdYJA+fI+FBlgcNY8L/08VzGZd4yVEFSiGNKUtY1NtlZX6LTbREHAVrdHd3MDKfy92Otk6Cjm/OkzLJy7SGtyhum5efI8RxtDji9BOuGDD1l0lKkSkicAaRFODnqWKL/PsYzk9dhcuxtrhdNXBkmqqCgqD43Q2kMjpc+Qws5N3ycZzcjm6SGsWZ5ijKHT2WZzc5OtrTbrGxusrq2xubnF1lab7e1tOu1tlFTEQYRWGqkFxsLaZhtFxna364OELKdabxDGMbVakzCOieOEMAh91RRBjq84GSHA5ujcYrKM7raHmi4vLtJpd0miGlOT0zRb09TqdZTWvkJhMqajkCDQXFq8xNLCRcCiHMSNJkEQvWB9X012C5LAr/le2sMagxaSbpbTzTKcCnDC4ITAmhylJFEYs9Xe5hOf+ATVep39Bw8RRrGH4RXfnR3NXON7LL1zIXd87q2sMNncB0p2LEjyjxU9SwXsC+fIs4y016fd7bC8vsba2jqbGxv0ej3yzAfc/X6fbqeDEAKtdIEOMKRphjU5iZYIqdjc2qR7us/a1ibHjh3jxEvuJFEaYa2/L6yHHPmevVsbWj7bPjn69yhk0TlHv98n76eY3LC1tUWapoPhoUIInBX0+xlSeYi+CjW5zcjSFJv7PtLt7W2yXp+05yF8QgikEgjfgonS2re2jFSmb7VY56hUqxw5epT9uWFzq02a5+Qrq2SZoZ9nZFlOnmdkeU6WpeR5WvSVSkKt6ad9Ll1eYn7/GpPTs2jn0QAU1XSJpCxiXC0IuhoU8XaAKJafP5qYEFKQZznC+uRup9tFaoUINP1+nwvnL/Lww4+yuraFsQqnE1IDoMEa0jyH7T7rm20eePAhoigh66cECFKTo21AEARFQk4M/JfdgsvRv6/W87Xbez7f5UUfKNnRwMCVkLvipioMtS0i6lqjST9NOXXqLBsbm0ihCUNJnudIGRAEMSbv0+tlOBRBENPvpbR7fVQY0017PkDY2iKOY6amZmg0m1SrVYIovGmc9qOGddTwSymRcgRvX1SfyuwGQiCRvvLmigy5dYOG0hLAJ5UkTzOUVLQmWmytL7N0+TJKwhNPPMby8jKBDgiVYHVpkU89+kna/T533HGCSrWOdY4gipFSobIcoTRKaYJQkOe+guOURCmJUvgsJr5pUUiKxkiLs4aN9TUunjvH9uYmE9U6m31/Xs9HZ2VGv9AIALkt+5UEolwzQpJbh5AhqbE4J8lyQxRpTxpSQOic9OduhUJgyZ13FtY2Nzlz8SKr7TY950jTjDTNiKJkEPi43BJKRa+f4ZwlN4b5/fvZN7/PN2s6MHmOzHOU1mAceadNe3WZRMG+qRaBFPS721ghMc4Ho+UauBliUw+NLBBQJGGEaLaohpq0WWfh7BlOfeYJNjfWSaIQoQTSCLrbHaQKEEKyvr7G4uXLzB85Qj1MsPggxFpT1JQESurCYS0zaUXtuCBFKL/f0W1gsKG8QLl89izt7W2SOKZa9UFDHFfQQYhDYFKJCj2piREOqbTPGjO8vwaEJs5DokyeYa0ZBEJbmxssr66xsrpGp9ul0+nS7Xa9k+ogEAqtI3/91uPe+yanbyOmag1ak5NU600qtQZxnKDDCKmDghzEB3g6CNBBgAsDTJainCHEQ+nOn36GSxcvopSiWm8yOTnB1Nws1cYETipS65MXQoFG0dJTRJWYxaVFli9dwhrHwSMB1cYL2452y6Y/m9PknNcFUoGzpFnOxUuLdHopQgVYkSF1gHPQTw1hEOCM4/z58zz51JNUajWmp+cKe4jPeHvMJ77SVFQBhQAlfY+atYOq+K0Sa/IRB3+kmlQGSvkwgDJpRqfT8QFOmuGcwBhLluX0+6kPkLpdX1XqdgmCAJkohHOkWU6v3/eBpgtwJsM6S5Qk9Pt9FhYuMTk9w6wOkELhpC0gPQInhK9u30LZDV43+tz442VwLMssvCtAVQ60UrS32uTGgBMFyY6/rxCSLMvodrrkme9pVEqBsSitCaOIarVKGIbF+inXjkRKBnv2rZ6Jc/jYUdI0xeF7KBcuL+Ief4JOv4cQitz4xKAOdJHO8r6CLShuTO6QoUeSbG5u0S3Wk0CCEkhXVGGs7wXTWg+ueTfo2G7Qu1spu1UkBZ7MyTmLdI5Oe5vzF87RbLWIazU2Nzd57NHHOH/+IsaBkxpnHZnNC5SewxkQytDpZ2x1evTzHNXvk1tDkiSYPC/2OYnTyq8ZIbG4wVr9bMlBD4wdwRW/yORFHyhRLFrvFJjB3yWG2xWQGeEcSyvL9Pop290OSimckz4RrQJS4xBCg8jpZ5bF5RU+/ZmnaHd75AjqrWmUUiSVmH0HDlJvNojjGKU0Tggyi8+c3PgLLoshV1ROdxqT4Q0hBv/yWb6yd8v7crZ4jc/cO+cweeY3hyCk0WwSBCFnzp7BmYxLC5fotNuEYYjJc6zJWVtZJhcKk+YcPHKYJKnQ7XSQOkSrkDhJEEKRpd5xUUoiUFgrMMaglHfwHRaMhwJJZ+m0N3nq05/h8sIFDs1OEaUZ7ZU11PPC1e6e4dyxgbohn44THnrT6fYKJzMkyy3IgNwanJAYHMYJjJM4a8iMIctSzlxc4PSFi2x0uuRCkjqHkRIVxVgHaZp7FsEsJVQSsGgcaZ5xaXERHYY0WoJI+MyStRBIwfryCi5NCeOIrfUNFvRFNre36fQzwjhBByEmywl0wD2vuLG9cgDLFy+jA00QaJQEZ3JM3geEdwpw9PKcXp4htfBZMRTSeviaNQ5jM86cPsPkvn0cjWtE9aoPWK0D4QMLJ/BZS3auceF8fVCMMv2M/Fyfa7zA0tIScRwzOTmNEIJqrUlraoowThAqwFjrOyKlwAg5aNiWSvl7z3rokzE5Wkqszel0OqytrmKynDT1Tlav1/NOhLUDYgchJAVGBed8YC6swwpB3zhUVKHSnKRSbRAlCagAO3D4i+ytUqADcuFI0w4ai8gzlpdWOPPpJ9hYvEwoJbPTs8zsP0DSaqEqNTLpsfUUwbfC4+WViqkHmjAKOfXMaTZWVqklNSrXCXr8bJC7HbCXohIglcTk0O122Wi3SXOLAc9QagwORW4yhJSEUYjDcfHiBWZmZ6lUqwRBjBXW23IKlkXsjuBcuCHRw6122kye+RjcGl8JL/SRZ3nheBk67TbrG+ukvQytNUoqqrWQfpbT7XYHlZI09cFS+Xe1WiWOY9LUQ/J6vZ6vUOcZtSQqbixJq9UCYOHCBZIk9hUSHEHoGVItAqdufda6tO/l/bRbMrF8HXj4skcHGPI8J1AanKWSVMgyw+bmFrnJPXSu2yUIY0SBMOj1e2T9FCkEWil6UhWsrYJut0u/30dISZZmxVYkkWG44zxvaQCuNDKSpFlWBEACGWqMhDxNsc6S5plnQoxD8izHSUG1UiPPc2+/MoMKNHEl8ayM+Aq6sxatfcJFSuUJcYpgvrz+0UCxfNzDFa+sut0qXY1+T865QSuDkgqb9VlbWaGztcXs7DQm7dPvdLl4/iJbm1vYLC9g5UViT0oQAdZBt5eyuLLKw488Sj/POf6SOwlsiLWGMIqIhMAIvw8IIQZoCueu3Ot2J5wYPDt83y2Eed5sedEHSgJQSnnnIsv9zSYsGItURQUDyXZ7m4sXLrK+voEUCsNIVs5Abm0BrpBYITh3YYHcwuHjx5mem2dqdh9JrYoOA4IgQhVQBN9NAcqJnVCgGyTDzXuUlKE09G4HhAAYwNvKgNIxfH0ZTIIrnKvhcUyek2UGqTVTM7N02lusLi8OPjftZ2ipUEi6vR6drU0unDtHt9MhqVRBKqyDeqPJvn37qTcaHrroLFiFX7re4ARB4L9DQBZ5jzTtc+qZZ7hw9hyNepVjR45y+dQp0twQV57HsLvRisTY5liKZYDIA4pqx+ISYRBw8NAhD58rXmM9qSLGOoz1WTInBP0s49LiMovLq6S5Q+sAJ3KiJKA+MUHWz0mzLXKb4RD0TI4U0KrUQCnOnj9HL02Zn9/PRGsKpCbLDf1Oh+XTT7Kxucl0vI/N9jaqUkWokGrD99IBbG1ukeUvvKn+WkQ4MP2MtNuj291mY3ONzY01bJYipWPx0kXavT6ZkLgwxkpFmvZIsxytwKHITMpmb5knHn+CoFJn3+FDRInFKU2QJCgK6IYoqkgDCF5xr7nSiRWDHeN6Gn/b7yPyHNPrs72+hsktly8sMDM3x8zcPiamprBOkDuHLCB4LheoOMLk3gkFh5K+HyHPUlZXV9jc2MQYnzF01rK5sUm/2y8SON6xy7LMZ2qNodvrYHIPhZIItBbESUCOxEpNjkAh0dL3kVCQegi8o2Hw5CiSHKxnJTx/5hSXL1xgopJw/OhxWrMzxI0mqdb0saQWXy2VBfxReWindAHCWWpRhf0Hcy4vXGbx8iXq1eoL0vV41n/08fJ36UANnzMIW7JDCWZnZ1mem2fx0iVyl2HIscLbMutAKgUO1lZXOX3qFFPTM8zM7POEP8phrcG5knqXYcXSDUC7wLAKfiskVJpuv4+zFiX9HpflPuHU7W6ztrrG0tISaZpSrzWp1WqEUURmDdsrK4OgaEhH7wPOIPBVSGM8K15eQPxK6Wc5YRCgtSZJEiqVCgCrKyvESYVazUM0lQ7QSg36p26ljPcfjTu64z++QpcjC7uT9VOccYRhTKMm6Pe8XvLcgDBkmUGnGbk1WONJG6yDvEhAesKDkO2tLZIkIY4j8izziYdC7+PneqvECIlTgNUY5wgrFeoTE+SnT7Pd7xU9pkBBRuFwZHk+2A+dc2SpYXPLj6totVpkWUYcxyS16sCuebJNXey1bkewNMqWu5vD77+3AsZ8C+SKJE6BSJF4KPrK0hJpr4eWim6WYY31cEMryLO0aDlgAJ+zzmDxyR5rDefOn8MJSBp19u/fD5T9gilCaqSSOOd73GSZSOMaYOZj9muw/q+rdm5fedEHShKBybxBD5SH6ORp6qsDxiKcoLPd5umnnuapzzzN5kbbFyCNnyVhjCU33qVQomjLK5x8HUbccfJOpmbn0FHsZ7kUzdwGwPkSqJDyKvWKGyu7YU5HjY5zntNf7AiKoISXODusKHkgvid4MNZ6/HueIqyhVm9w4OAhnDUsXLhQOBISJxRSaIRz9Le7rGeOtdVVgiCk2WpRqzfI0hRZ4N2nJqcR0pJmKdqFSO0rSVmWYoxEFb0o/TRlefESp54+Rag1x44eJalU2ex2sUrTmp19XvraPTNd1NmKp2xhvDUW0+0g8oyVtVVa9RrNiQnSMhvoikjJGrC+0d46QW6ch6tYR6ACT0YgFEoosJCnmZ+1ZC0qCBAiJIo0+w8d5MTJ4z772OnS6XbJzTJID13Y2tjg3IVL1OMqJ+66h5kDB4kbDUQQYnyaDi0VU9OeavpmyP4D+zHOkaUpW9tbiEAhlWBzc4ML586wuLhEai39zLC53SPQijTzPYBKGJT0LHfdLOfSpcsET3waHUXMzM0hoogMcFKhE4FQIZ5Bzn/2Dtr5cjYR15fxDqBWTcizKpVKzVNvJwmXLy9y8eJ5NrY2OZQeZmKqoGXPLdb1EVqRdrIiiAOkIOv3SPueNXFlZZUw8hTCYRiyvtmm2+nR7/tAKcs8Vbh3Mn1juc0NzniolRKaMPKVIyeHQZG15T3v548hwBYAMonF5Sn9zibLly/RXllhe3WNWmOCw0cOMz1/gCCOyYWkbxyZAxlq31coBEpIXyErBkgJ58izPhMzc+QWLi8scGnx4nXR+W4y7kSW/5ZCYPMcawxxHHPyjpNgHWmasnx5kTTLfA+f8A6sMZZerwc4FhYWuHzpEhOtFkIVFfIisy1EMbvEWRBqh1NxqzP//V4XKSE3GXnudZD2OixcvES320UIQaVSYXZ2lmq96Rlf+32/jowd0ObbPMdk2eC31posy3DGFgGCB1WVlNlpmtKo12m2JojjmNnZWfI8Z3l5GakUBw4eIowSvzdoi3XX4MDdQBkPvHeDq49WJnElfNH43wVBQ5blBHj0Q9m/GgSKIIqKxIYYVH+11h6IJiXVapVarUYURbTbbdZXVqlWK/5+0hJnwoIcQtwW2X2hfKDrJORZRlKrceDwEc4tXKLXO0tuLFr5MSDGGN/fy7Bfp2SiXNvY4OlnnvbsmM0mMzMzzOybo1qtEkUxQvmkjSsq3+V9XVb6YGef6TgEr/S0boW+xr8nT/LjkxV55pECYVCQPaUpab9f+KIGZ41HPZV4TusDJYkbjEQxeUZne4uzp08TRRFTk9NImSGF8v1g0s/gkkWAZF1xj45Agp/NPr1YAqNxedEHSs64ork+99kg4xmckiSi3/fOx+WFSzz15FMsLCzQ66UEUmDylNxYUmPJi0RJoAShlhjnb/hqvU5craLDyFNjuoKiGFfMdpEg8axcQrGzS+LGyNUa+IAdTan+eesrKcVNWdLKloa5bFAdPa61Rd8OgizLMWkXTE4YxVRqNYTSZLlFCkeeeyIDHKS9Pt1OD6GUb8IXkpnpGaq1Gr3ONosLCyghaTQnoHivEhoIfB+F83OCchwXz53jzDNPY3LDnXe+hIPzB2hvrHNpaRkRRTRnZq6LLp2/cO/QlnwSPvWCzXIacUxldo5T7W0WzpwlLjDVJVugcBZhPemEcIAFYQWBiojDhFx6Vpsw8DrqbGzS6XSR1qGDkL7NCLTCCknfWsIoYXpqkrDoLxFogjBGqZCly5e5dOYZZg/MM3fwGHGjQSYkqQEd+n4ZJwRxFKP0TSJzKIbhhqFmIgmpTtSZ68/TaW9hrWNlaRVEj15/i7S/TaPRQMiQzGT08xTnUgQSKxXdXp/z584xNT1FvVYjlJJ+muGUJhcSnEUH0WAzHXUwgGJ+kQN5fZmSwijycJk8xSGYP3iAaq3GhYWLbGxt8fSpp5nrd5memSEIIxygi9KkED4JsLa+XlSQfHawmlRpNBueCEJI4ihBFJl8Ywz9floQhYDvvfHZf1kEXkILhAyIk8Sz7uFhtVL4iqw1GU47lFC+Z1P45Ee/vcHC6VOcP3OaXrfLzPQsB48dY3Junlxr+vjeOytVAUNTSAdBAd3yVL/DfjCtNMIZGpOT9LM+zl7fAH03aNToc+ATXkpIEA4rHPV6nf37D3j0wOqa7z9ViqRa8e+R0Ol0kFKwsb7BxQsX2X/gILXmBKZwNgYwLOc1KygCc3H9A/HnI4ESbLa30DIgikIWFxc59cxp2tvbzO3bR6vVolqtDeic8zzHWEOapWxvbZFlO7+n8j4qg3Mt1aC6lOc5WR/AV1WmZ2aZm52nWk38MFWl6HQ6bKyvUa/XmZqJMAXNvQ4TwvDGM8FeTXb0khQQrvHHr+xR8olFj1DJBpW3klI9N4YkiYkT7xcoFWJtQamuFcIpZAE9TpLE93A6CAJNu73F2vIKakYipPB9hwV9+O1A6CCU8nC6ojdUBwHz8/s5eeIlrK2sg2gjnWcSNrkhDCJCFWDyjCz1e10cRliXs7qyytbGBtVqlanpKfavHWB+fj9zc/to1Hwfsygox0eTIFeD2A0SIze1j0sMfAL/e+d5OVeAvIXwyBIs3X6XIKiSZjndTp8szZFKYF2Kczl9k+JMab8kQeATUdZZnHFILUi7XTZWVlg4e45QKurNCYQrhhSrAGs88zIFiskJnyh1QgxGg4jiv/KsC+Dw4ApebF1KL/pAKcty4jjCWYMUEIQhm5vrrK8us7i4yPLyCstLK5w7d552e7vI5ihs7pC4ohHdV1LKmyE3jloQMzE5TRQlvmnb+I1YqOGUZACK2S9KCW5GoDTMapY9Rj5w886jxZi8KAcXAwjzDJenA+fSFuxEagSrPbqJGOswIiAzhjztYbMMYTPPaiSUr7ZZCqYoR5o70iyj1/cbiQ5DpFT0e33yLOfeB19KvVGn2+tz4cI5jMk9k5YIsC4nl3kx4FZgUKT9HufPneP8uXPMzczQak2QZ3448HaWMTc3T3Vq+oXpcABB3Jm1KsU/Y6lEHqtfqyRcvHCerVadiVYL6cBQQjfsoKfG5dazHhV4TGccSvtr85TiOc76pnKlNd1OSm4MYRQSBJHP6OFhXBpJEAQEYQhO0O12MCiaU3OouErmJAQhvpvCM7EhBbn1DuzNEBcHxSyXHGscmXMYASoMqdYaICQmt2gRkKcZvXaKTkI/C0kJXG4QQhHqyPfIWcP5c+fIs8yzAGpNPUlwUlOfnmZufj+tVstnrK31A1Ovdm7XKeufVCuE7Yjl5RU/NmCqxczMHHfUTnB5eYlz5y9w7txp2p020zMz1Go1et1tnPH349r6GovLq2ilmZqaptWaJAhjHB6+KpSfUaK19oMYi4GfeVHd0Fqhi80UZ7G5RSlBpZIw2WqRxFHRB+GQwuF3YeurxcIghG/+39raYvn8eS585ik62x1qrQkmZ2apTE6zXUB5DcJv1tYRIgilIlAaLfwGLbXHyKO8oydx5P0OUb3OrAbcjZujtFtwUhKe6CDA4ciLuUJRFNFoNlGBxuKRBmEQkJmsgBRn9Po9jIPllWVW11ZJanVKivedGWOQwhbVzN2n3t9sEc4RByH9Xo/Llz19tbGGI0cOMT0zRxiGZEU1BOHpzze3tlhYWODSpUtsbWx4225zhHA+WaMVaZoicSglCLRGOI0xmrRwZuuNGo2JJtV6jVo1wVpLGChmZqZYXllhbW2NeqOF0qFnsQzcFUHZrZLPxla4IzguihZl/5YfAZGSZX59h0FEHPu5ddZ5FkochGHRE2e809/tdlm4dIl+r0+9UcfkOaurq1RrNZJK4tlhix7d0UrArQrCy/5IVcw5MnmORJJEMXEUY3ND1s/I8swnBKUmKZh+jfC6SaIQqSI6nW063W26vQ6bWxusr6/R3tzE5Ra1fz+VanXgO8HOahIwdg8OAyRfubuyP/tGSHkKo1+HhxnuDLKz3Cen+70+UgriJKHbLSn3PTOgUpAJT2LR7fVxFpK4iskFSEegJJWkSqAFaa+PsA5hDedOn+HgEWhNKoIwxGY5ThnyLCUokng+BBr6hjuIjAqfVhRKG0883WoCkZslL/pAaeCA5gahJGtrKzz9zJNsb7Xp93r0+in9Xo9up0OeZkipwfnN4P9n77+eIzvyfE/w4+KIkNBAarJY3dXdt++duWbzvq/7sv/22o7t2NjO7mxvd7FIJpOZCS1CxxEu9uHnJyKQzKquosjsGbbTQACBRCCOhx/3n/iKGDWGSNAB33pCWkidG/lsuWC1XmN6PbTNIEigG5GuiVJKOBTIov4Ud6+PJnU/pI2rO8J78LRVhW8baem2DfW6ZjmfU62qRB5UVHVNjNAf9BmNxqiEgc06P4gIbZAgguCgralWCxbzKbfXV6yWa3wERapu6EjlWuoAwWS4qMh0hguaq5sHDi+uOTw8wfRzHiYT3r19y/HxMUfHh5jMoExEGTGpjcoTmjXNeka9nOD3+qzmMyY3d7x+85bR/ilPX/2e8cFPg97BdoPYKCKGTkq+Sz5lMwsKgrUENMODQ4q7G27ev2FoI1l/QKMzvDL4AAaFb6U7slgsmE4nONfgQ4urW1wQ/bYQPMZmmCwXGExdY0JGOc4Z7x1Q9Ec0UfhbxuS0PlAqhavXLOYTbK/g8NkzYmaJKVC1SCtMEVFRtstPBXP3CqJWgEFUf+wGe52VJQHNumpBWbSB1bomNjWOQFmUZHkmaohZLpAO57i9vqStKwa9Hk9Oj8mBt+fnuNff8d/+x/9OkecMhkOBfERR/aGryJLQM78gNKM3GrPXeq5u76nqhu/f/ABKc3B4yMHePiFG3r6/4OL8nPlCoCar+ZLFfEmv12O8v8/pyRnD0ZiiEPEX50W2uuj3iDEyn883cJaOP9KRz42WoLULSKL3DPp9To9PODo8YNDrY7UW+F2QfUFrA0GqlEpFfN1yd3nJxQ/vaOqWo6NTXv3+9xycnZCVfeoQcc5jTEZmc6zWGG2wJhNzVi38JGUsaIMyGmUUhIDKC/JcJJJ/bkfp3wtid7+XYMBjrSF4R7Ve43ygbhpm0ym+aTFKQYholfiJyROocQ63WFH2ItPplMn9A6enZ+RFCZ33jyBqAAhBETXSQf4PIOfcVjXz+Ywf3r5lMplwfHLCs+cv0Nbi/bbbaq2laVsmkylv3rzh3bt3SU2xEW+lFPgLzEx+JwQvHkBakxkrqmXpesuyvxFDyLKMjnNSliXDwYCb2ztub685NYai7AmH5TMmSh/jpO7CxD42YrJaUErRJFXArpAogXHipnq/cXvzCXZX5gXOtdRexDHuqxWL+ZzlfMHvf/8VANPplL3plNF4jMlE1TRYu5njz5uAC0y8++y9YzqZcf7+guAihS0ITcAgiZSOCmsytBFTYheciOsojbUmdSlblss6xSVhA1v/4osvsVolXvC2q7c1qn/cPfrY3vBrz9Vfc37EBNXs+Ek3V9fk1pJlJW3TMp9OWC2W4k2mNdYYrDHoLKMspUDoXU2/P+Crr76iyA1vvn/NfD4ls1+Q5QVvvn9NVdU8e/kqnZcZJs8gSMzaJUG7r+lRV277A+DzFnk+1/jNJ0pZZnGuBa2Yzqb8v/+3/xfv3nzPixfP+Ie/+3uGwyHnF5fc396zmM1F4afyZFbhXMA5T9M62jYQrEjAZkWOB1oXUNaitMI7J35pWkvnKFWegpKKo4qfJjMP0SRShix25xqaeomrK+rVArdes54tWC/m+LqlWtfUayfKKWXJYrmiqmvKXsldnuO9EHRHoxFlr5Q2MhofoWkq6vWSxXzKdDphPpuzXK1BGVyAqm5Z1546KLzOidYm7pbBB4UGZos1rYuMR0Oszbi6uuT927fiN3SwT284EsUc78i1QoWWXAdcs6JZznn75jWT2RIX4fjsBcdnL7Dl6CfP34+xzj8m9MYovI4Wj7I5veGYvMi5/v6P9G3k7NUXhHJMi8FHhY7ineFdy2z6wHR6hw8ig75er2ibBpCkPrMFASXmhDEy6vX4u6++4sXzlyiVoU1OTLLOubW0TUUILcvlnKPTI/rjESHJy3rnUjUSdEDwy59wE9Qh3QMBkZ3vMOcRoraQ5bTKYIsMnUWiWtPUNT56NC3WSlKqtCJTGcG1jAcjXjx9wtMnZxwe7jN7mDKfT3FRM7u/p21rqtqgiwwTLTGopILYwSSCoCH0LzMPKh8wPsr44ivFm9ffcn8/QcW33F/do7Vh1dSsJgvuJhPubiY8ffaCXjng6Ogph8dH5EWPLM+Fy6AiznuBnMTIqqpYrpdM5hOqqtoSbJ2nsJnA+IwlS75hIQSyvGA4GjMcjSiKTLgOSoG2uJCEG3yyClCR4B3Th3tu3p0zm87J8x6jkycMD47J8wGu8WggA1TwGBzW5Fit0BqwmmgtZFaEELRKXXhAa7KslK6qFg7Zz57vbg4+qHx+WG3fdgACq9UiGaguiSGyWi5RMTIsS/YGfWJ0BNdiouzhay2crrppmU4nnJ+/4/T0mOOTU5S2UvzSInuMEoXOKIucbr/4nOCVxXzG6+++Y7GY8+z5c549f4HJcpz3AvMJ0l1rmobrmxvevHvH1fU1dV3h2gZpdwdikERJks6A1dJ9dDGgsgyd2yQWIWI1dVNv3gfnHbm2G/GRfr9Pf1Axn88Zjvbo9QcEn5L2zzR2+brddX4I63oUDEuGJL44eIEItw1VI0azPoo8dts0KGsx1uJT7K9ioKlrUXLziRfnnHgyeUdv0OPJ2RNaV7NYzmnrSpRBrRc1tIigEj6hvcOHQxmDtqJOixffo+VizuW79zTrFXmWScdacM7UTUXeZHKvRBF3qNsGFw0uJaRt4o+3quXh4YEQPJlR7O2N2M/OwG4TxA+hkh/7Or1S4NPdg3+ON7VJvENgMZ/x7u0bvv/uG1H5i5r5cs3N1Q3VcimdWq1o2kBmrRQSEmJAkXF4eMirL75k0Mtp6pqLy/dcX1/xz//1v6GMZvJwT5GEQbIsQxtDUZZi8vwhImZDI/hxseDfkxH/P+v4zSdKjW+J0YOKVNWa2cMDdzfXWALH431GvZJenpFbk8z1WqxS1GvBY1dVjfOeoldKNdVm6KQ0Nt7fRxnxSBD8sUJ5hQRjmk6BS7Cin+i2DbIRKzwxtLh6RWhrFvd33FyeM7m7x9cNg17JaDhiPB5hDzLyvMBkGYfhiLqpabzD+8hiuWTV1Lg56OWSpmmwWZG4RqIE2OsPxFvJiVfJfL4gKo3z0PoUoPuQOhtINdYFHAFXt6zXa3o9Ub45UWcsFzPu7x+YPNxTDkaMDw4Yj4ZSxWuScZ/33N/fM5nNQWX803/77zx/8ZJBB5H5G8cuDvxDfPrHPpRSQs73jagftZ6b21vy3LJ3+gSVdxVKqZrG4Gmbhrpa01Q1bQp8fdPgGoE+FkWBQsQWmrpmNOjz6tVLXjx/TpFnBN/imojJczwBWxbo4KmbBudanp6+wuZZklSXW7+rwHWL71NugFbpVEHcinso5dDW0hsMGIzGZL0evm5E7dBm9Iz4scQYk+9TcrWvKrLcMh4OOD0+pFcKL+v9+TnL5YLx+ACtIkpDEBdXukRXASYg/EGdCGe/0EHq0aAtRycnKKV5/+Z7mqpi7heUvVJkl3t9JrOZFBEiPH+e1qk2hBgwWhSNQpRCi9aaxXLBxdUFd3d33D/cb8j2G0+xjpibAo4syzbQ2dVqxcPDA70ioyhKirKfoLYen6CdrWvJVMQ1DTfX19zfPpDZnKcvv+Ds2XNsXohSWjKT1Upel9UGayQINNagrUbZrou0DeK26yxBZswvv/Y+JOL/qLOkAKUkQdCG8XiPXllCiDzsP/Bwd8vdzTXBa1zweOdoktBJr5QEbzad8f7dW14+f854NJYAxjUYk6U9XW0MMrvO5ece796d0+sNOH36jMPDQ3RmRZBIW4jgfU1bNaxWKyaTCbe398xms8RJ7Wp8kgwqrTFKk+VhE/SFGEUcJsvQShPriqZtUwAmYhc+CBRR6YwQAr3+iDNbcH11w2q5ZG88xlhP2ft5Sog/d/wIrvlBorT7ORCFK9L9uwQ57OTTNxxgZVCtwKZ9QiLoGAlOE2LAexHNIP371WrF9fU1WmuatmI4GIjJuHOo1omRdOKYqO4N+gyjdjXaKqKLwmn2jmq1hOhRBJoE14xRzGdDG2mVx2grolZKyT4PGzXhqCxEUev0Tmw/3v3wPU+fPmF0cIjWCi/EMEEHeU+WCW85hiDeZzHivciSa0wnsI3i0ybhAvvbJh7eS/fVtY7ldMb1xRWhdYS25ds//Ymb+wl11VKvBc3kg4OoUSoQgsDVVYz0eyXD4RCXZPUPj4+4vLrg7vaeycOUg6NDolLc391RNw1f/u535HlGTEbaMcps6A0vaRMMPHr9H1v7/xH2s08xfvOJkjKiymO0plcW9PslTV3x3bffcnd9w+//7u/oD8ei5NM2VFVNnmW41FZ3TrotZV5gjRWTPu85OTvh6OiIoshFWSl4OYi6v/uR9fUpsMXKVZjo8U1DcA24Brda8XBxzd35NcvFnCLLKPcPONg/BKXQmZBzAwpjMsZ6n7oVL469VkwtrZXNqWlbrMmFwG0UWskmtV4tCVGj//Qts2QYqnWGDxEdhTOiY0RbqYBv+BZtLTAP76CGsiwYj5/RVhXX19dcXlxx9zARcntw1Ks51ze3gKZtHNWy5uT0KS9ffsl4bw9rrZhM/szxYWK0+ziAUlE2oeT15J3fJIoizSniGDp1F0Pw1LUYEjdVLWp/WlHklhg9CoGyxCCteqVgOBzy4uULxqMB0XtsnhGCw6gciya0LZkVxbter8fZ2Rk2dRe0VomT5n/kM/GpNr/dv/cIOqIUvV6P5y+eM5tMubm8ImhRlLRaYbDpoHE0qUot11UweZjw3TffopRIONd1Ta8/IMsEcqDZwgyinBDytYR+EmOkir/6Be5HbaRSb7Kck5NTrFLMp1Os1uyNh9i8xHnPYDTkX//4Nbc3Nzx58pzReA+fzEBVtg0klFas1mvOL8559/4t8/mcuqqpa/coUergPrswqg7uBLBYLLi8EIJ9rz/YzImxFp/UqZqm5f72lpubO2xW8OL5C54+f8HeweGGuK8SULHj4MTUjdt+6A1nYVeyd3eN/ZLr7q/dQ7uuToxgbMZ4vEduM2KINFWNNVLsWq1qtBbzVKVlTotcY5VUu13bMJ9MOH/3jl7Z4+mz5xRlH6fcJniLwWMUdIvtcwo5AJgs5/DkhL2DfaKRJBAlRp/iTRNZrSou3l/w9t05k4cpddUSkxpiCOBiTDBKk1QBJQn2UbyZfIi0XqCbbZAurdayTmQ9FrgQWTceawy5zhgMSvJ8xvxhwrjf5+BgH/0LC3z8LUNrvVW0+2B8bO+XHzwWRerigbZt02OgYiv3m9K4BHc1SuFM6jQEt33+EHCu5eHuXooQmaapGtq6oakbSMIZHU9J4I+fSSI8xVJKSdKIisJVUx1UPRKTjmaMAR89q2qFUdlOAoF0YZWsRaNFkl97hfdCg5hOJlxfXXD24hXD7CBZGrCZrzbGTUGpS8xlXiJKSaKKUgT1687Tx3hju2ui20NXqxWXFxdcXVwy6PVpmpof3l2wahxN7WhqUf51HRE+iudZjMlmIAbu7u7IM8uzp2cM+iPGoz1u7+64uroS89peyfFRzmQ24/z8nCwvpJARxStUW5NoAwkmSuq7/Qcp7nzu8ZtPlDpJXECCs2fPeXvymm//+DXr5YrpbEZ/MGK+XAMIlMALn6irEHQbVQwBHwJGKV68eMHR0ZEs5HRIxqSI9jEJxk91eIZQQQhE36KDo1ouuXzzA9ObO/b6Q54enVLVNfW64d27C3x0ZGXGcDyi7PUpikLUw4wGZejnBZEE31GGnpyGqTMUIYrhp81LsqIkywpQAltRKpDlJb2yxCdH8izLyYsCHyJ13UAMacPsqvxSiRkMBjx//oLx/pp1VaWgEpwLrJYVREPjJAA4OjljMBxK9TiInOZPGR/rHH04uvfWOQcKTILCCdFbY/McYywhVZSsNtRVxbu3P/Dmh3e8/v57tFbs7+8l2XNP5hwxisFem4Q1FJGmWjOZPDAYDhiOApnV2MyC9+RFRqYVwQk8aDweiefO5uAQV/et2ep/jM1Q1P8iRZ7z7OlT7q5upMuZvEOUAmvFiHG5bIUDAGLQuF5L9+PuThILIv1BX7gS1jIaDtFK4dqWPCWMMUaiCtBBX1U6IiI/cZU8HjYrCAis0ljFaH+f4D3z6ZTJbIG1FXlRcHh4yNnZCTd3D1xdXXB4eEhRFEQtSTRKAoYQAze3V/zwwxtm89nm4O0O3Q+T9i5Is9ZuPFm89zRVzXyx5PrmhsOjI4SC4+j3eyibo1TkbnLL+cU5xmQ8//Ilz549kw5f8BII6VQBNpoY0trv8O46dcmVJOW7ldQ/y+/4mXvghxX+P/ecu/dvAFQKQGPUNE78yUxmpWNipWtJ2wAGYxS5SomhAptnmBi5ub7CGENRFDx5/oIQFTH6pO7ZopTZBN6fmwB9+vQpZa8nyVEElAFi2kN96mBc8e7dO26ur1nXFT4lOMroLYePBE/bQGi3VhGtc6yS1LhzDg0URbFRuotdd57kP6eEqzMcDlkvFqyWSw4P9j6ZVcHfMnaTkT93HkhxzD1SY3PO0dXuaZ0oVcZk/KvES1GOOL/tBidJ8SZJRWe2h4oR76T72xW7unX1OdeXTu+hVsId0towGPQpy1J4f0mVM6TE2doMhRKFzp35MyZD620HxiqDtRrnJAmv6orZdMZ6Oac/HIoJt3NglZjRdtef9j+Zf1H3DBtc2aeJt/6cuEa3L9d1zWI25/Xr1zjf8vzZE969f8f79++oaocLkX5ZkhmF0Zp2s8dvkSsuOC6ur5hOJ6xXK7763e94/vIVq6rm8uqaF6++ICsKirLHq4NDlqsV5+fnxAiHR0ey16XkkpR8KS1F3r+0ln5LCdR/JkqJC+KdQyl48vQJX375JVfnF7R1g/eBxWLOet1IIG8NddMmGUykUmsNWiVNei2V/i9ffcHeeCzGcVFqKUL0/LjMKHyahedbcUoPTctqOuPu6orFbMbBeJ+9vT2GozGNa5ktFlzdXnN7f49zFWWv5ODggLI3oOwNGO0dkBc9tDZEDG2QirzRIlQRg8d7h+/sgki+STZHmxxfVxgLZdljNBrSrte0zZYEbHRn3ihyvG3dUPZLjNECt4qRPC847A22RNm25uG24PzNG1Z+SYwwGI159vxVwuA7lFMb2NnfOv5cgvQj1TulpEIYQ0qUlSQwAFEqW1oZlBZvkffv3/O//i//C7f3D9RNI1VX7MZnSSvxhpJKVNxU6Nu24c333/HwcMeLFy/44ssvGZohKnrWywXTuuLm6orpZMI//Zd/kuSWxwpBP1ILUmpDQv+1x0cTzyhwAmsM49GIr373JcvZjG/+9Cfa1mHLnBA9betoXZNk0COubaiqin4pksI2Ba2ZtoTWkVvLoN9DlMKdQO+EYU9X6SQq4iZY+YU0KLUR01/fEGKk7Pex2pAXBbfX15vE+OzJE06OT6jqltVyyXw+pyxLjNZEHCqRoxfLFZeXF0wmD5tiTVXXEkT47Uc3diva1lqKohBugw9UyxWThynz+ZyisFiriLGhqVvm64rL8/e0Tcuzp885O3tKVvY2psg68RHkEg0ml8TC5hnaCh9JizPkj9rnnwK28e8lSJsE0/sExY10Vjgdr6goSvK8xHvpksfgBZ4ZWjJjyApJMHSE9WLB1cW5cG2GIwbjMVGbBJmMBC/rSso9O3C8zzCGw/EmMXFsOQrOOXzTslqtuL+75/b2lsVsKpxGowWk6rcV8c3wYWsmCtvn8l7krZPgz6DfZzgY/gh+2a3PzFpGoxHVaklVbX3BPuf4WNL95xLyD6HXnXBHV8joFGNjCETXiupdgp76EJLI0dY0vYMyqiC8pvV6TZFZ8dLzLnWott2rv1TA+xRDoSDEdN3SSR6OxxwdH3N7c0uTUCghXa/pOhc7nJ0YQSnhUMcYMdpiswwTIs63hBhoW8dyuUxeXcmH0Ht8iJsipE0WGSEEfBQ7DTbPD6li/avPyY/gvun7EMImUbq9veX29pbDwwPmiznv35/TNC3L5QptM2KZI9ZcYef97WxcRFE5xsi6qnh/foExlt999QWnT55yfn7BbLFktHeA+LkpTk/PuL295c33P6C04uT0BKIgXjbxQNwSlf6zq/SfiZJUYCKJsyBJzpOzJ5yenDKfzQBF1bbo2gkGX2mqWoLWBHEnBI9zwpvIsox+WVAWGSHh/WOC3rm0icQYNyTW3Y31U4zWVagQqKsVb968ZvYw4dWzFxweHAlcx2ZSeR6NyUYjin7B9eVbZpMpi9kSrTXj8T5Pnrfs75/Q6w+xRQYofIy4NhCRhBGl0Uba6q0LlP0ho/Ee2mSgamyWJ2hKILcW34hRpm4a2cN8oF6tWM7n1PUBNgOlC4qiQAyoNCbhs7VSaGupen18hLppKYqS/YMjjk/OsFY4GsIR+9vHLpzhw/fqzyVPOvkUeBR5URIQDpVKm7lSmvl8zr/+y79wcXFO0wbhQniX9nD5m13wq5T4a3QwprJX0DrH1eUlwXsODvYZlAWz9YqLiwtub264v7/n9199xXhvH5tlKN0lQvFRVxTYdAA+1Vp8PG/bzT8iBnsqwmAw4GB/jyKzLNYrnFE4JcRn75xU+wNUVUW1WqF8oMgyuTdDxKATJM3RNJWYSWeZ/K5FDuuY5N4TfEPxl033/pZhixIXAtpk+LZhVYua2mA8Zl1VmJtrri8vWSyXPHnyhL29Pe4fpkwm9+ztjTB54pJpTes8s/kDd7e3Imud59R1/ShB6mA/3Wvv5Ho788suWZL9R6B56/WKti6xJmc+WzB5mDCfzWhqx+npM/YODuXATgAabSUJkka5RhsrqpdaS3XSGDGaNRatzb/bQfq11Lr+UiC7XXuSLPvgZQl23j+Jx6eAtmmFa5NkvmVifdr/FcSAayrmU8/l+TmHxyeU/R6mMHgvAfFGSlIljiqfs6skyYcCKfClbpJ4cNXM53Mmk3umswfW6yUqs5g8T6T7nfs2QYF298YuiYoxSlc3ivWFNZbBYECv33tUWOp+t/ucZRlHR0ecv38vPLpe79NOzc7Y9RTsRpdg/7nEpPt5CGHTeeue69HzpgRIGSvJdOdgExGYptrx/ongoxTVOm8m73ya67C59ztFwc/VUQp+a+gtMGFDvz/g+YsX/PDmB6pG5Oa1NoS2xTcCFc6y4hFscLdb151HIXq8C6AjPkSqqqatK1y1xpJM7lVLixaRmDxnOBphlcH5ADbBqkNqoKqIUr9uQrmbUO8WZ7p7JAQxr767v2Uw6qOj55vvX0uhVEWigtY7qrqmyEyKczQhyYSHIOIrCotrW6LSzMKci4tLhuMRe3v79CZz7h9mnD0FH6R7rpThxYtXPEwemE6nFEXGeG8fo9ioDnYQ+P9MkmT85hMlaf22ZFrIbHVd49oWmzgN63WVqrFSYQxA0zqstjRNtVHHCmFbPVsu53zzzZ9ofcMXv/s9yprtZqp/XNX8lAvR+5q2brm7vWE6n7F3cMBgfx9TFFJxSH46gUg5HPEse8WoV/Jwe8fd/R2z2ZSHu3uW8yXj8Q1f/d0/cHzak2AQMU5TppuTbmMQ7GuWlzx/+Yp35xcJoqjxriGGXPyDoog/uKbBWCvQMGA+m3J9dUl/UXJ8ciymvkpjdJauKYpUOBHng1ShrCQjx6enZGVB4wNKR9Gk/gnz/THFrO7xXZGHLkhQUTqIIRGgBTYlIVII8u+a1vPu3Tve/vBGfm9zUMTUNWloGyHpx6goipL+IN/6ZnQKccBsNuP1t99ye3nJ5eUl9w8PxBg5ODjg5OyUst9PG1/HzRE/r81GqDpLuU8HA/1QUad7TCONntl0yutvv+Xy4hyrxVzP+1bgT5mlRRKqEKUCa5QkRQpFLy9EBKEV7s56ueT+/o7RwQH9vT2R5O0qvxE25f6dJOmXmAeT5VjvyUPAKYheCbQmKobjMa+++BKlNBcXF7x5+469/X2yLOP29laCxiSDDyVKKar1iqYWXlZTNbSNI3g2664L4rqKf3cod5XC5XIp3ysh22d5nv6N4/b6gYf7W+azGXXdcHr6lP39ffIiR2lL4wLGCtxMng+00Vgr3aSsyLE2l4M28ZM+5KH9uTn9pQ7kD7tVHwtqHwWzMdI6J75VzifxC1KXKXVgU4dcdaqMPtB4R5YJnFEZsZgIzjGbTbi5vuT06RN61hJ8CgDRj6BRnzP46O5/gd3KdTe1GKM617JYLHh4eGCxWCRvJE9uFEYLh6uD6X5MWWw30O2CXG0MeZ7T7/dTkWsLq1JKbfYzgLZtKYuSGCMPDw+c/ELm4D9l7CY3u4ndX9oXIlsobFfE6OTQu+JqjDEpDEr8EaJPcYT0G6MSNVxiJAa5L6zZcpG61xPdFt63K1v+udbWIziifIG1lqdPn/L85QvWdUU7n2+SuZBauNGHJP6kUuG5uwcTqCIEQrrOzrw6BCmWzScPzOKE1XrFer1mva7wAY6OT/jq7/+O/YMjpFu8hYvqzwwz34g4OMdqtQIFBweHvH/zHUZrjDU4nziOSpMXOb0iF1NeEkwxeEIQxI5SnszYBNeMTGczLi4uiUrOmFVVsVpX5GVP0CxGuIVPnj5jNnvg/Pwc5xxHxydpT99UTGXOYne/f85Z+7zjN58oGaPxTapiR8/t7TWXlxcsl0vqusJ7h9UGlRlaL5j2Xq9HU4sKSYwBrRV5npEZgeCtFnPefPct3rccHBwx3BujdzgR3ecPA8RPEaC2VcX9/YTzi3NGB/scH59hypKQZaDSzaaT03NU2Lzk8OCEfjlg//CQarXm4f6e79+84eFugjEZZdkj74+EuxXBR4UyIhkbYsAliEuMkfHeHl9++eUmELbGioy1Ew6KTfh1rQ0haoxWrJYLzt9VZJlluZjz6uVL9o6OxecFCTyM1gIBcbIJtc4zHA/oD4ZCOI4BE83mMP8p46PKWR97P9MmH9k+ppVAEm1WEFOFcLlc8eb199ze3VGWBSEkw940X+uqZr1ebSAIxoocvbUZRmua1mE0FHmJAi7en/N9tWY+n9G2jpPTU56/eMHZ02fYLCcBGjavsVOcC8n0xfBp2+yPOqoxYhBse+cH9N133/Knr/8oqn9BhAO0Uls/ieSB5nDgBRs/Ggzp5bkIX8QoEuh5xnK14PL9e06ePqEcjdDpOr13KAxBKXQ0G6pWDOGXORmUEgW4LAMivlVE3xAC5GWPo9NT8qIgL0vO359zdX3DwcERi8WM2WzG4e0+w9GQrMgpyh6ziWD9QzKkjYGdwFQ9+tyN3Qpm95HZDKOtkIrrhpura26vL1ivF8QgnfFeb0BZluJRlkQJOm6J6lQ7tSRFGC0QPGM3fKoPRUI+Pj2f7vT9WLLUOpeMnNkEY/iIa5xUadNrlP1LBH2UdwInU0nSPkZa71BKs15XnL9/z+mTJ3Lf5QU65mizhWE9gq19hhFRcr1E2uBp2iZ1KRwhRKqqYr6Yy7Wmt6cL+EMAFbem6WEnOO+C9S4Q7fY+ozVFkZPnxRYmnZ5zV3QkaFlDkchwOGQ6fWC5XH6mWfrx2E2SPuyIdY/FVBzUWrNerR91e6WAEfBRJR6IwWqDawVBkHq0OOcwSqOjWE1ExMi43+/T7/dFlKaT1P5Ip+JzJUrd2RGSgq0o/MHe3h7/+I//yMPDA6vVKsFd1Sbpa5sWG6MUaBO8XGslaIEIMUhB0AcxmG1dYLWq+OO//ZtwUyuBJVZVhXOOLC84ffqU0WjEaDgS8YYgIg7aGJIe+68+HyqdsZDQ3Om9cs4JNLV1uLrBakPb1FRVDcqymC/xTUumFINBn1G/J13uxNfLjCYge1RIBZyYp+vLc2JsuL05J8aG/f19QSLM7tk/3BclUmPQmZX35uCAumm4v58yHh+IZDgCwZeLkAS+e/0fK27+FsZvPlGKPqCNJrgWXMvt9Q1Xl5e0jXSWOtxsCKLa0ylCxUIMC13ToJXCakVuNdrIh2tqbm+uub29oTfso5Iyy8dM0D7lxtZUNXfXN6xWFU+fvmIw3iNERbC5eFZoOeZMjKDEC4E8UmpD3uujDwP9fp/ZfM7l1Q1v3rym1+/zxVd/EFlq52VjU5oQ/Wbz9ikoMcZwfHzMYj6H1IXKc0toFNFIlVu8VmRDy8sMRWS9XFFr8WYiBL7IcvaznCzfVthSu0Tw4DHSG/QZjAZELXwhAqjw8ytuu7+/q27UbYQ6vR6d+GheSWBkrQQLSkvCNp/PuL8XoQJvLa2HJlV1vfe0zhEiZFbk2SNQN3UKvG2qyClMlmGJ1OsVi4UEuoNBn5cvX/L3f/gD4/194crE7SankmhBx0dSbDfCT7YFxu4vP044QwjMF3NRAGwaQjK49E1LGx1lWWDzHIsiOsH2G6UosowsyzZyuZsEAnBty2I+ZzGfsX90jDIa3xpMpqVxICdBeg38YuUznXh7eZ4RtMIpcE2g9aJ+qEzG/tExWdHDZiU/vHnDZDKFKO/1YjnHewdGMRgOaZqW6XRB23oRUYmiXtgdyLt4/250Fe7usY6vlNtCCjurFZeTO26uzymzDGstg5MRo+FYfLuCVDBVZxzbKfAhBG6ttfC9Ysc92UKAPhSs+RRV7w+D2d1gsvu84XLFCDFsOsCESHCO+WLGZDqhbZpNkSembm9Tt1ijCbGhcQKvhoiYeC8IPvDmu+/ITcbJkzNwTYLgpn1hZ21+jqG1wQWPC0EEHGJSpUvJTlVV1FWFiskTUEUx2o3yuyp23ajt3HYJkHSnt3+rg+BZa7FW9vQQgiTeO3NR1zWZMdiiIHovxsurBVVVfaZZ4kf30O599ecgd865hACIROL2680a9JuCpPceEwPWinJgd36pRAUIm86fIs8yhsPhBkYr8FCH2uEf/nvdrl97dL581hgp+EXhf6Ph5cuXXF9fs1gsuLoSGWwfA0VZQlTUtQgXaWPEFiF1Ln0IrNdrom8JMVLVNZk1TCYTFrMJrpHf6/XEby5EkWhfzGbbwocWAZLu+TcKeb/yVEl/cKdAA8kvSn7Q1DXz2Yzpwz2ThwkKTV70GI/3yWxG29QYq4i+xW2Ml1N8QcAQKYucoigoeuUGkh+CRwXPcvZAtV6IJ1lwCdIpyImOL2dNxtnTZ9ze3PLu3Xuev3hGr+xJkk4ADN1xuLtv/9bgeL/5RCktZUJwrBYLHh7ueXh4YD6fo0LicQAh7kqFitKdVBUVwTnapsEqUTkzWohw9bpicnfHk6dPpKIfeSQ5/CHE51Msvnq2pl6seXp8xmgwQmcCl0FbtLYCH4xSUTfaE7XBK4NXNTp6om/pj8e8/N2XzFZLZtM5b89/IBv0ODw8wRalVHBiIPqwkTjurnG5XDKdTqmrClGFMokvYlAxkBXyOrpAyxiDcy1GK7SC9VKkNIvhEJ1ljPcM0cjhYhJ8SvDR0O8PKPq9TQWrFWMGHp3kf+P4MBD9WJcpxCh+VWG7KYJIL9ssBxTeeabTKcvlEqU1rWtpQ+c11cr3Trxz0AalNU3b0rRO5scK34go0sVtFBhGjMJ/e/bsOX/4h3/g+cuX2CynDXJIdNTo7hVLIKM2G+GnHZoP0zKVIIHeJZUno2mQ91erSHABFQJWiSJZMA6fYAK2LMnzHRJvgjPqaFBJlGUxm8t6y/ONx9DmECOidgzNfhHonVaoqFGImXIIHh09hoJIZxwMZX/Aqy9+R68/4u33b5jPZyit6A0KHh4euL275/5hglLS2XYugjICh0odyq5K+mEQB2w6Sl1Fs21bfOYoCktdV8ync3wT8BLJUuYD+uUApcSbRNEID0ntWhyopC6oNzChrju4e599qirkxwLZj1XcO2jiBtLjPdEH4ViEQFNXzKZTlotleswTvMe5RkREQiQa4Yyp1uFCIDPCbYp1RdM0fPPHPxJaRwyBsydPyYYi8Q5sO+CfabRtS+sdbfC46HHBb649BI9RmiLPqfNcJISJuCRZrSMbfu0GNh4ibd1IEh3ZdJl08ljqFeIXJpAzh456E9i7jem12qjoGb3tNrx9+/azzRM8XrMfFnN2H99dU86JbUFdVZtEqfv3zntslomgSkxrwQqfOQQn3kpJAVaEjaQwkSXoomsFzue8rNsu4e/m0Vr72ZKlIi8EQdKKeiJI0SREeY2vXr1iPp8znU5ZrVaURSnKf37L/duF6MYYU5wQhc+lRZktJgGD5XyB1YqyLPDeUyjF0eEhTdtS5pYsk5jCR4cKhhAVTSuCXMZAjL/+Pbh7zm6KNUE8/Nq25f7+YdNpa9qW6L0gDDJLU1cCV2xc6kJHjFEUeYn3Qi/I85yyLDbQzqZtcM6TaU3TOJSPHB2fMhwMPyhuAOhN0Wt/f583r1+zWMwpinIbJ0QRdO/2rt/q+M0nSkLilUW8XK2YTCR4bZsG02HSE8QghAR5SbCLLqDyviU4jyZgk8FiDGI09/AwoW1b+hGErK4f4bM/JdQJYHpzj0VzcnSSIFsGm+VEbdHGYrUW42wnFeugDT6SiLkO30Le63Nydsrv6jV//LevOb+8QOUZOs/Ys4cohKfQdXl2oT+z2Yzb2xvq9QqjFGWZY41mHWSjz/Pd34W6qmiaWqptiUy9Xiy5urwQQ1Vj6fcG6FyhVEhcAlEj7Pd7ZFmG825Tzfyph4jUt7oI2ovqkE9eMonQrpUhqChKPGhAOA9Ka7JMzIglAJCNXjDVa0IUX4QmaFwMuChcKx+j8JZg8xho2hBZVzVZYVHaJuiQwypFluccHR7yX//b/8Dvvvo9ed7b8LZ2r79r5mxX3qevFHXrX8ckEUyqXCXeBIgwQ7NeQzJeNTYj0waCxxhDZg2t0QQHefJJatt2AwXKkrADMdJUFavlUtZDFFhLtz5JUBc61TtEee/nDqu1vI9J2EPe/2xzgPoQcU2LRtMbDHmaFeyN9zh/957b22vQkaOjIxrnmM6mUhkNCufE2NIrqVsGWlH0i1ue3Ifqmh9KGgejgcBisaCqarSytLXHljm9YojRGd6H1A1PpsAhiqjBDgSvO2w3QvNKJ9+n7d//9zhKv+T4sBPwlz4EOdBB76TYsFotmU4mrFfLTZIUgiO4NnHiNC4KBC2EgFvXqLQnONdS5DlEOH//TnxkIjz5opR9Nnb+MJ8v8PhYJ2STRLcOEFEFay0ESZJcIpgHtjzHTZfFS3Ige/eWs9lxc6w1FKVwk2IIKGs3KnC7qnaubWm1JitFmRGk2/kfZfy5ouaHXcru+7oR3pfWmuFwKD+fztL9oFNCmFRztYi91BGUF0EfSEU3BWVZ0h/0Wa1CgsYn5bjwWO3ys3aVoiKmJq1WFm2NoCm8xuvIwdEJr15+ybu35yzmK2IQ+JghyjVpk5Jmk8rXyWYjRnSUojQIqqdyNeuqERNxDOPxiLPTM46Pj7i5u2U0GtIrMogefCSagNaWrvMbf0Ys8LeMrqsE27/n03vUdd9ikHvKOTGd920rXlrIHl6lrpnSCmM12ip8Ul5yIUH0a+k6ta6VwmeRMxgO2T845Isvv2I02kdrm4paCmIHnRXeV6/X4/T0lPl8zuHh0Y/fWrYiR5tr+4x8uE89fvOJUggiINAF5avVKnng7GyERDlIU3Al7VPBsAcv6kchBFzb4BojrXTfEL1htVoKLjmEZMIW/iLX5dceq2XFYDCi3xtg8xKVZdKO1qIgZ4xB+S6wA6LGxIBDKq7KCt5ee8fJ2ROm8wXffvsd5+/P6Q9HoBTD0SHGZpvDkrSJt23LerUSXK61GJAEQitqXYmKnRbeyLoSyePoPG1bJxy7iGyEGLi6vERlGdZkHB4covoBj0A4YgxYK9wpYyzeeUz+c/pIEDSoADpGbPTE+oH14pbFYsb+/hn54JQgxkQ4LZA4FMTQYKIhKzKwGSor8FFhiIS2wbmGJgScC6kroNDKYi0oJaROrRJsTukkPuKEQO8VNuta4xq04fBkzD/+0z/y4ssvKAZ92uDITL5TpUM8b5IytgS4OrlyJ1z1J+Qobb+W/6nO1ywRd1tryYzGWwPOYox0wKLzoDQmdaC652udSNDumpxGBc41BA2r1ZKmaci8Q0w2k2QvwsmTF7IVAvi5QyuVoB9a4KSS6qC8cAG1ydCZyJKHlOgeH53QL3uMRgO+ff0tbeMYDoesqor1usL5SAwa7zwtAqOM2tHF3rvE7t3vP5h9tJEO13w2o61dSkADw8GI8XAPoy3BB0yu0IYkRBOQYrFKgYfMfycHvgmUtYhkxLgVd4HH3aVfG373YUdpww3ogspUvQ9dcJsC/tVqxWTywGI+wyfYp0qBWpZlVKGlrlvpSAZH8C3KO4yKeNcK3FIpekVJU1V8/923kJc8ffVq42PVGT9/juGjBGGR1MVwiesQOmNY6RJ6F2h9i0PuEW00nWlnCNsO3IeqnB0s0yqdig2K1WrFzc0NZb/H4eFh4pvIWdhBx1ologXeC7Kh1+ttEqbPMT6EcH74NWwT8W4OmrbZdMg6Q/quYt80YlK/qlop5miNtoHgFcGlbp7WqExMWknd/rIsGY1H5HlB3VQbY3fTiOGsMTZBG+3Wp+gzjI2Q0c493t17xhrapmUwHHJyesLV1ZWgKZTCWIHD+QCwI45EFCNjo9ExoBJkrm1b2qYh+kCZZ/RHI/7whz/w/NkTHiYPNHXN/v4eZa9A9ttACMkwWnVQ/V+/aNPdB5uv04cUScQE/OTkhPVySdvUzMKEdV3jW4lhYuoUdu+n2K046rqiqtskzCDKoiI4I/djURT0h2OePXvOk6dPOT19Sl4UkIocIrK1TfA7uF6/3+fiUiwhrM03r1ujfxQ87V7Pb2H85hOlXeSPbGTVZtM32mwxpkphUESdzPkkpsVaMV4NiN+Nc6J+5BtHtEGqF94LYdPqR5tHh+HfPdB/7TE8ecJwb4+Y91FWEg1rkpRvOtQwCmU1KhiibylMhrUK3xq8a/EtmLxPr6d5/vwrZrOai4v3nL95x6AYYkyf4TipG0UhB3dwqHVVQVQEHzHKgAdrNLnWBAXBNdRr6SJ1yjDAhvypjUYZg0Yxu73jTVXzMBwx6g/QSjGbTHGNQ5uM0d6hQIWiyOe4KHP+U2KUNjoKk6PaiHIV7eKa9cMblrMH+iYwLEeEYPDG4qIjsxqDkd3fe7LMUvQHRCOQi+g9br2iqdesmwYQOEonpyyHXkA19SaoUptDREw8rZb0JviAMZrBaMTv//73/O7v/57eaIhHKnGCSfaJS8IOPEqq4gqVvu46Op9o7MKiooRuISUqRVlSlj3q1Zq8KCSYbVoI4kQeO7m/ndGtsRBCkqmWNdU6R1SBzBhR90peVZvEsUuO4uZl/WLdj6gQuyZtJNEOAaUMeVaglQVfyXsYRJgBrfBEsjLnyfNnTGYP/PDDG5qqJrqAa8RYWSS4BfYUYxDYpUnE25DmMoTNe7tbCe/gjaBomxZXCf4/M4ay7LF/eEx/nERQiAJpjUkUojN+7varbtrUDtouLSIJdDbsKUlwu3nZ/D91MmHDs/rJc80OrGQn8cZ7fC3S8G3b0rb1BhIcki8QUTpKrnUs5lOW89mmY+x9K9ylTmExwa2dayH52GTaYKxOEDPFYrkkBuGz3t7eEL/9hvHeHuXxsby+8Jmq/oDzLm2JwpXbJNLdnpAUC4kiQpMpWQfeC0CVKPMQ/Y87dN3aiun6OsnxGAPz+ZzlcsnBwcHm32ZZtg3u05pq2xad5wyHQ4bD4Webp4913j7WrdyFv4UgxoH39/c83N9v+Ffz+Tz9+/hIiMG1La6tUTESUhdJadnLiiyn3+txdHTIcDSiamoWyyVZJp+xlhBF+Mhau4FfufQ8n3rsJki7kPtOrCMq4bxleb6x9BA/rzSfzhOiS7YC+lFM1NmIkGpZIYp623C8x8tXL/niq9/hm5q3794SY2Rvfw+loK4rVJZjYuJOk4qKoq36KWblEax9S7eQuRkOh3z55e8o84JqvWK5XGCyHGKgCRVt6zZ7Wtu2uCDvrXSUjHxOS1Irk7pQhr29A07PnnB4dIzJMvFaQp7H+4CJct5keUZMZtJFUeCcY11V9PqDtE7Ta1eKzq5kd3xOTtynHL/5RCnGILCfHciKMQZNEP5RgIBwXgwGdKqgRgnwNYHYaprgUTEpc2kIycDSGptq9TEFLZGdk3zztbQ2f/0xPjmVrozWkKrAWskBL4pDAgcSblZEpUr4NgZKNzwaGxV7B0e8fPUl69Wah8kD5+cXjA6OaF2qxGpxqI9BNi1iIC8sKjrhFalEgg6C6wYSrlsU82JStbPGkucFWZljkhyxb1um9/cs7h+SFHfYQBKOTp7QH4zSrIuU8c/ZGDOtUMETXYMKnvVqwWoxI9Oa0DRkmhQUitIPLmyw5j6IFGyWW9pWqopX19fc3FxLlch7skwOO7WDBe4qt3mebZP3hEPPs4w8z1L3Ug6UwXDAsxfPGe3tE9C0LpDlmtaLc8qPhX62FdNHlaFPtPmpKN4bQvyVO8RpTbAa0+tRDIfUt7fYoiT3gfViJUmFZH60KXCNSrozKhF1sRqsFhJ6cJjut6IkrThHaB1ai7u9wGsjuRW/G60kEf8lbshoEWhFSHLuWjp/3nVBkxGPD+c2qnJeRZzymMJw+uwpD9MJ0+mM0HpJvKNCaVlrSqtEBAc2QiU6RROdRDfpHkiBMF2nV+HbQOskyOsNBuyfHHP09AyVWdoIOipcGxATSI0yEXQEjSTiiJAGqXMnKngQlHTPScFQ3EmDtnvI9v8ffvlThvfS+U/pItGLsWdbVzzc3TKfTvG+Zb1eAlECt7yPNobC5njnaOqGi/N33Nxc4doa1zSE4HGNdCp9EPGffmZRqdvhUrKhVMTYnMxoyrLP5cUVi9k8yfFmVPMZcW9PFFDD51O+C6ElKHndzrX4mICvQZAPAguTok1MEB+pZstrjmGbKH+si9AlqV3iIBBX+Viv1yKbDYl/uoXgbSDaZiv0UNf1Z5un3X1Q+He7D8kXIUackw5R8HIPu6bh9uaGh/v7xFdqaJpWhIqUwlqN76r6viEmc+tODVGhMCbD5jllf4DNclZVxWw+Z7lY0Ov1eBhOcD4yPpBks0m8p6Zt0dnnC+u65GazHnYSSSnoGemQjUZYY1gsFszn6/Tey57YQbx2vaE8Qn2wRrqWclbKnh9C5Ob2hsvzCy6vrjk7Pebh/o6vvw7YouDs6XMOj0+S0Xz4JN2kzVwQH6GTuseBTaHcGsPBwQGnp6fcP9yxXouFg80yhnsZrm6SIp4Y1xuTEdA4ycklOTKG3GZYXXJycsKLl68Y7x8kYQxR0XVOhFtC5wUXY+okS3zl05y7pK4nLbydLzdffxrO6X+k8ZtPlDrrvw5rrZUiNxYV/cZPiCAkQq0SLl1JNYRoUQikTjZJJ4R5mwj73tMrS6wxklgRUcEJrja5vyvdlbHFk+TXHoPhcEvCTW1va7KkNpMItYLlkiAuBT+x62ZonSrGWmQ8rePk7JS6rmm/+YbbuzsOrq94XmZomwBdUVym16sZRgcyC1G0qIkk2FnwyblbqtTaWnSCgRljMTYT08sokJCgBMpHkO6IaxqpUOY5ISpG4zGDwWBb9Q7hZ632XEFwLUYFCA3VYkG9riF4tJpRVytRcjI5WgmMQnUVsRjIrAQF33zzDW/f/sCbH97y7v176lUFQZShdCI8P25nx03ltePebLDNMUDcKouVZY+y7Mkh7B1oi4kRFyI2k27hv7e5fUrOXGYySSSjKC0GIl4rvNGYXsngYJ/2u4AJkTwvKIqe+G5FqZq2TSOVcSIYTRscIGs6akWb1AMzrci0wrcZ0UvHt61qbFZIIKdkHjMUMYQtlO/nU5SkCJO6LaorsuyowRlrMek9biOEKMEqRqO0YTQec/bkCdP7BxbzJdZIh9R5EfowWZa6OVs57l2Frl0+5GO1xki1rghZJvySLOPg8IDTJ2eUgz4+RuqmwsYcbYwEMVEOUKtUUkVKlfYYHuU4nR7Gtl+UHt9UUz++xn7uwduJuEiHLZHivef923d8/fW/cXd3K3u47Nj4EMiygsFgwMnxCb2i5O7ultvrS1y9Sns1EuQjJPDS5mRFKfdY6rK1rhVYshIPkrS1yfPnOYPRkLPTU/Is2wQm8TN2lEL0+CDwrbZtU0EMXNNuCjODwYDJZEK9WqfOYFK8Y/t+73ZdtdZYbYgh4EJ89F5qrVJCJR2Ptm3RWeeBtxUiIIqAgTdJLjxEFovFZ5ghGY8LS6kzS9cN2FFOTEF829a0Tc1iOuf2+oblQmC+IQgUvOtyO+eIhE3kqZRA3YXrJ/dN0zpUVROZs1itNvw3qxSu9VyoCx7up4wnMw4PDzk6ORa1T2vRzS+wcf2UEYIYMafCjWtq5tOZiOgsliwWczJtcU1Lr9ejbVvqxL9Bbe/f3f2xS5Ri9GLxgZGuVLJ/mC8WvLu4YDqdcH9/S/Qt19fXVNUaYzL6wxH//X/6n+j1BgwSHSDGT5MshSBFeNSP0UKP9sso99Zob4+iLJnMJtTVml5RMBwMyG2BMRl5kaXCk6GqW1yQGDVNFGgYjAY8eXLKaH9P1lrw2HQehCixqo8+FWg1TRvJVYZSch8qpLgPf7lO+DGu3v+Zx38mSpA6PprMWAptybShbdPmrcIGXhJR6KhSOxKRsY4KbS1ZWUpVOIpcsdUaFQODfh9rDKFphIAdxW9DZxZjc5F2VrkkBLb81a9X607CvCNOapTRm+pBJEoip5WAboLMT0gbuVGdBPCWgNgfGJ6+eEnVtHz77Z84v3rP3tGQwXBItRY442opyYRWkbatcb5OcrRCIK5dS9sRFnWGNhblI3qnxRwah49t4hs01M06qaEJfGw8HjEYjggR9g8OMNZIYGI1PnhskmX9KcO4FquA4Pjhhzd8//o19eqeuloz3m9Qeg/sCLKCaMQ7RxtLkwyMvfPMZjO+//41VVUxmUxYVzXBe4osoygKlFYb7PBu1aYTJeiqaMaYVHULm2p2r1eyt7dPnhU4HxJfRBNSN81HvfHp6J73w8+fWljENbVgxyX8QMeAVZIcF9ZwuDdm0C+ZXF4z7PcYjYfUTYVzLU2jcK3bdOS6jpu1wm/QSLeqrRs8EVWIWWb0gXq1JqBpXGA4VhQDgW1670WCI6RAUP/8uXgMqZVCQ3cPmpAS47TBdB4+cohrnPMYozk9OWH2dMJsvqANntAGkRzPcpSxLBcfeM0otVH0+1DKflO1VgqCp46Rsiw5PTnh5PSU8XiM1ir1fyLei3EmWmF1tqnyPiLzx91+0cfnoPubfylZ2rVO+ClDjHSl+xETnHMxm/Htd9/x/t05q9WSiEAws0xgKrfzazSKu8tLzs7OaKqK9WKGb2uCdwLQsQrtI5lVFEUugi2qq/xvE1RtNFqDUZBZqV6X/T5ffPEFL774ktF4JGaZMRI2cr+fY0hg773DO/GKIiLm1nVNnuWcnp3ig+fq6pbZco5L6ABrjRSnFI+SPbl+Ix3iHSn6LtAtez3KIqepa+7u7rBZRtHrURTFZg2VRY7Tmiq9Hq01eV58jgkC2BTZBHHSdcu67ljcdEtcgojHCFVV8/7dO96/fy/Fw9ZJ3JDZLexV6wSz7aDGcr0ibBHxKQmrKlFQlD1CugD9oqRpah4eHoAp19fXDEcjzs7OaJuGV19+SfYLiND8lKHTfqGUYj6fcnlxztf/9kdef/cd1WpN3Yh/HEoUI1fLFYvVil6ZyU0TIqF1ONfQmTs/gt8Zg8kzdCbiMm3lsTZnvliJIAtS/PFNQ7NcMxwMsRgufnjLH/7wTxLldQqL8cfJyy89hKO03Rl3hVN2YZxdLFWWPcYH+zxMH2hdiwuRxXKFSqqSVVWJAmkm6qMRndaPwFWLrKDXKynKHPF8Szw4Y9DG4lwrnOjGJF4pRAzWapyTbtLh0SH9wWCzNyvVNQt+mfPw/6jjN58oKaWlGogopSVKOyKLGzaQrW6PDEFw995LMqHp+DNW6nLRJyyoQPjauuH+9pbVasV6OaOpxYROW0vR6zMcjxmO9xgMR4zG409yzVmWkyUZ5QSg/VGY08HsYsKqK0PCFAu+N6IwPtAbDnBNS+kDz16+xEXP2/ffc3FxztMnT6ibRrwTLi9YzOf4tuXh9i6F7GIQG4KoKTnXymEcFT4KZ8y5SFROoEMd/yIGmqairpdiMjoccXJ8zNOnz8iKksVyxXj/QDg+ymOjTRVQUeL6KQGZ9gKlu7k859uv/0hbNYSQ8XB/y3xxwQ9v73mY12ALsqJAZzmd/DPIJrlaLMi0ZlGLwaNUqxOR3DkhS6cN/GM+NJ0caEfaNUoquIrIYDDg6PDw0QbnIygPWQrOdjfsbbD6abtIu0MnuVcdBDPt0kFpnaOnNcd7Y54eH3F//p7VylMWpRgRmiQvHAN4NnLXNqlpUVVJsSupagW/+Tez+Zx3b9+KupTNefW7r3j5u6/I8xLvXTJK/WUV2lQkmQ+yCZRsJsp30aXExXQcNUVoIxA2EsBlv8fJkzPuJ1PWTUNVzTF5zt7eHtomWdim3q7rHTJ3SEnfrjT2RuhCGYq84Oz0lKdnZwwHQ3QyJOxED2yWkRHRjfDc8qLcJkdxq6T3c1fPL7H+fBSBDh/CBtJ7cXGBd55/+Id/ZLlc8ObNG5bLhXRZjQIfWK+XzCcPzCcP5FnGajHHNbUoSSbodDA6FW890UugGxGz3Q562KlIOedYVWv290acPjnl7NlTGtdw/3DHoVYU5UC6hp9p+Ih08Z2Xrr2PrJZLppMpy+VCHteW49NTmuB5WE5ZVytsnkPqfIcoPjk+JEXDCFXbSAEniAy4QlGWGUobhoMh0XuuL6+5vLwSTk2RY3OBEI9GY8bjMYd7+3KfK02eZTj3+eapSyA7bkfXSdoEuolX1bYt89mM2XTG/e0t37/5noeHh00wbOxWTr3ba5XW6FSMiCGhKBL/b5OUweYsUDvFD+89Pik1GmOg9bRVTZ5lPDk9Y9Drf575ioHpdMrD3Q3fffst379+zeXFBavlksV8LnB9m6OtJURwHvIil8QHOddlf0w+iuwK0/AIkufxIrVuLQpovccEjTEZOgaGgwG/++JL8rzAdMqwvvNS0p9U7nrTed/ltLmtSmHXje6Vojy3riqury6o12uc95iYCsopHhVxBRFW8T4IN9JYirKgKDNi9Eynk03M0+v32dvbRxtFXhaJiy5onizLATEYN1pzdnZGlqT75bUnU+3uQtjyXH9L4z8TJa02XRNrzLa7krxtlNbS1txsXlt8vUob3EbJREXh8yhRJosu8u033/DD2x+Yz+Y06xXBNYQYMVlGXpb0hyP2Dg4Y7x0w3t/n//J//b/9qtcr3L9UydBWSOZKVKoeY1ITeU8pAsmIVknkrWJEk6F9wKSOhc4sewcHfGkMdVNxe3VDaMXJ/uHhgevrK+q0mdd1Q1kUtG1IcrTJedsHgou0OmK0p6qaRMkQ7NLG6FKpdIMHrLUcn5zy4uUr9vb2WC7XKG0oe/20kSaCozKbD8XfXnGL3jOdPHD+/i2ras3e6IB6tcAWI4qix2y5xrmaQX/AaDwmK/soLR40INXRQX/Acrnkf/vf/t/MlotNy921IoHqgt/Iwab8PBnkiRysMSYRYRVt3dA6gYllecb+wR79QZ/tnhaTL0onCd11N3au6TNDjDuFw+g8wbeEpiZUFW1T0VQVNA374yFlnjOfT4FIVdUC0dxRMUOJnHFVVRBTNb8oEtdQYGrLdYULgfZtZLZa4dCYvCAve5w9eUKR5SL/rCAEhbXqF5kf9YjrpDBGbWCWSmkcwsfblK6VEoPSkCCvqeva6/c5PTtltlgwmy9pvaNuKsxOl2g3gfnwMNs9qLcVWk3ZKynKUjpxmZCoF4sFDw8PtG3LweEhp2dnaQ0GPpokpWLLn52DnZ/tJvK745dI1pUSWJnWgI/MphPOz8/p93t8+eWXQuxWmovLSx4mE1arFVmMWG2JKjJ9mGAzKUJEYpLxbRMPTEyza+fQKkvcAJ2gyiEhAgy9fgkKFsslxmomsxlf/+lr1nVDUZb8/R/+kVdffIGxn69T4pO6X2gdTVWzWiy5vbmVPbpuqJtaEATWMJvPWFUrXAxkWm+8WAApsGnhw4UdmKfAtaV/7UNgtapYzJfsjwaEvODu7o7FakGe55hC9rey7NHr9Tg6POL44Ij9vX00ivP3l59tnsLGjburknoIwnVUwdPWFfP5nNvbW84vLri6vmK9WHJ7fcN6XdE68arKbb4N+BN6RSnACIS1gz5qrQjBP0qOoFMhjHikS2A6oYd+SZHlZAmZUuQFWilc03yW+ZpOp3z9xz/y5vVrzs/fM71/YD6f0rYtTevJMikQCZRXYDnaCN9y67skhTClJLls2zZ1seVvSFGoBSJGSeFQRLRqlBaFwNIYvvziS/7hH/6Rh8mEmInXnCS+Ae8imE8DG+sS7E6wyHufhC62iZLX0MTI/XzKZDbDu0b4srmlrWqCE7lwk8QV2rah9bXEoEYTavA6Mp/U0KxZzWaiaKwlzsnyjNFoxOHRIUdHxxwdHzEajcD3CUWgaRrKsqCXF9jMUNcNxoakqGclRlbd/pxA1elY+62kS7/5RMm3jtg6qsWSqqpFytv7DTE47nZbuqRKCTRUmsOycCQw0aniIZj/Xr/PfD7l/s09TdMko0xFUZQUPVg0jtVyzWKx5Pb2gb29vV/9ekNUmw/TwQC684CuWrCNe2LcVhAEiiDqfyrxaVCOQCQve/imZTAa8fLVlzzcP/D6+x/QSrNaLZlN5lSp0m9QBF9LTSMAsZNoJkmpK4JJjtqpaiJO3UnCXAoqqTJuCQGWq4rVqmZd1xyfnkqSEgI6BJxr6fWzTUL4U1rI5++vePfuNevVjIPjE6r1iovrKecX9yhtsHnGk2fP+Of/9t85OX0OWoQ/XMLgywQbLi4u+Obb7zA3Nxhj6fX6zCZTllWNR7prxkhy1yVNrWvF7yDL6GQ/opJDxBpDP+uztzfGZiLzmaE2psFEj4ohKZfFnYQpyUp/iJ3+hNnTdHrPYj5n9jBhtZizXixYzeesV0uq9QrnHcvVgtVScO5VvZa1G6L4uySIj7WW3GbU0+lG/SmzUiHzeIIyRBStD8K7cIFyMCArPZO7O2aTCYP+MMkfGyGteyVFk585TFIiEjWi1EdVAS067ESLBJr41KWI5FnOOskKg6ZpazCa4XjM3sE+95Mpy3UljvXUtO02MNpNlLquZGfc3B3MovxoyXIRb7l/uBdxkKKgWq+5u7vj7u4O51qqpiIvc2xuKcqSrpKyC135awOOP5ck/bnH/9ZhjBbpd2NwjePq4pLb2xv+7vd/t5GtfvHiJb3BkO/f/MDk/p5mcU/rPNpY6qalaSsxcHaBJvkqaa03a817L2qgUfZA4bHKsLklLzKGoxG9fo/VasHrN9/T7/VQWiB6470Djk9O6Q8/E48Etl3uEHi4v+ftD2+5vb2lqiqMNixXS5arSgQfnBPFVv3BexRTNzhG4oars90/OrPZGCNVtebi4gLcKcPxcNP5dc5Bg0iqa0WWF0zv7rgZin1FmReslp/bR2nLM5VqqXj1NXXN/d0dr7//nu+//57JRCr4TV0xm81YrldsrAdS4hN8TMVUJMnc3ENSgP2woNAlS8Lf8ihlwUsyOhgMePbkKSpGqrphNB5zfHz4yJfqU49//f/+C/+/f/kXri4vWczn1NWa9boCImXZAxK8WBmBg3uP85EsM5tEu4uldIKhd9fTratNMg70e4VA1gkioOVaysxwenjI3/393zEcjXj77pz9k2NsluGDR6jn+pMkSZ1KXFdU8sGnApeob9Z1g/OBFrhfTHn9ww9M7q4IbYMOHu09sa6pqjWudTgfaFxMvCcpXFkj6sxWW2xQ4ALtuia0giSw1tCzI0prqBZzvn944N3r7zg8OuTsyVP2j0/oD8eoEAiNFHOyLGB9QGuP1p4sL9A7kNt0UfL5N5Ip/eYTpRgjtze3vP76a67fvefi4oqmqjCZIShStUx8TtRON0YEIADEGDNuEgypDOdFwe+/+gpjLLd3d9zcXDO5vYUQsFaU27TS9IdDTp884emzF+wfHPz61ws8yoQ+mIst8bv7vrvanaGFfK+toWvi5jHQADmB0WiPo+MzlqsK17QQNd4pmkaSlsxkqNaBTpsWbCo9rg1EHbeSoSEJX+hORtpjVJZ4FNLNWizXuHBDJNIbDBjv76PMNkCNRFTiZakPq6J/5fjmu+9BOV79/vecHB+xWtR88dV/5btvv+P8/Q88TG64m074+k/fslwHXrx8RTnokxcpAQyeumrZ2z/g6OSU716/oSh67O8d0NQt0+VKVNxCfOSJIYpJIhHe6/U2P1NKBC+AjVGvFiY7TbPG2ow81xgC0YtRsDEZ8GPn9g87EZ8qWfqf/x//dx4eHpjdPdCsV8S2xSf5btfWtK6VpRcCRZ7R+pYQdaqUyRp2zm2SUWMMZVFSlqUIMgSRcs6zDFSPrCio21aU7SICA727ZXJ3x/HxMXlZbvDigSSt/guND4Mgod5pbJT3GRNR0aCURweDtRmuhRDrRNo1BOR1qfR+k7pNzplHvKGNTHNKkKy1m4BjkzwZMS4MPlBVFTd3t9I1cZ7Z5IHlcklRFCwXCx4e7tg72CMLeZpnu5Gs75IHG+22Ch63gd7u+FjX6JcMWCQJVCk4r3j/7i0xOIb9HtZovNf0+z2BrUTFsD9kep/TrFeslkvmq5r7hwlN00jwkYnyWOtaatfivBhIFxvpbCmOhRgwaT6ub25QVvHkyVlS8mzkfdCag8NDppN76qYid5/XH2i9WnFzdc3333/P+btz6rqmLMsNbDzGuPFZs9Zu7jFr/Ef5HbsBbPojCU6mURHW6zUX11cc+YZ+v89ZdsZ0NmWxmuN9u5F/btdrlvMFZZZzcHDAkydPPvHsPB4dbKqDhoGo3F1dXfFv//ZvfPfdd6zXaxFl0ZomKZTVdU2W51Lc2uyvsCnF73RlY4wQJDmQBHMraNB99l3hJJ3PeZ5LYtZKx/Pw5IjheEjd1GTl5+lWXp5fsF4sUz4pXcuy7DEej8myguVqJcVo1+llSmGvaVrETF46brv83CyJfsS4VVfs9rUiL1JREUw0xOAxxjIejxnt73P3cM/N3S1PXr0kzwtiSLYsduv39muOTjBCCsBylrtWlDWb5M/mXMtyOuX8zVtmd3fYADbBqalq1i7gG4dVmrwssCHQtE3yUjT0+/3Eg7cYdCogBmq3Jstz9scHPH36lCdPn5LlOfPFnKurK354+463794zHo14/vwZp6enjPf3GQyGaJuRFz3yvCQrBuACKkSJ94wUEBNI9PPDUj7R+M9EKUbu7u/4t3/9N24vL/FNhVaKwkgV2icn+t1kIYZIEhXv6vubH+sEC9sbjzk9PRXsp1Es5lPug5jTKi3qbHmvx9mzZ/zhn/4LL1++Yrj363OUohI4D1oWfPzRXpFgQI/1qh5/r6QbobUmmoiOBhM02it0MORFwdnZE9arivvbe2KIFEWPbpKk0qYI0eO8zKOI/yVPqiAhYVdNk78ufJMsyynLktxocbH2gt1drlb0BwMOD47Z2zvAZvkGqqe1cAl+zub49OUXDIY54/0e1hj2+8eMjyx7x6/4L9WM5eqem5sr3r+94l/+9Wv++M1rnjw94+Wrl4zGY7SxmDyjHAw4PD6m1+9T1y2T6QznA8ZmiZO19Y3qupSwTWY6nglJyS4zhsGgT1GIglvbtJRlIYdtDGjvsSaQ6e583nYEHq2LD5KlTzGub29Yzhc0dSUKZc7R1jVGKbzz1FWF0uBVwGiIOqNt07qwWx6NHLACuRNBDJGazVLwUtc1IURWq7VUeEPEtdJ5WEyn3Fxd8vKLLzBZJpXJGAhRP+L6/JzxIQROHmTb4Qw7Jq3BorXfdIA6lUnvPfPlgtV6jTaavMiS6hqUqI3buwpiZtv93S6o6PiIJn0ftUqmw/Kez+dz2kY4Jj7Jw/b7fYw1rFYrqvVKID4me3Rd26Dmp83Nh0IPP2ckmRmCc0zv77k4f090XkyilSZag3MGkxmGIzHHHvRzVssF79+/Z3V5zaJqcE2D1oaBtpRlgUcTtENhyAtLAUlow2CLnAxJYBvXULcNd3d3rFYrrIb9vT201hweHnJ8fIxrWqrVisNPUBT7cyPThrfXN3z99ddcX13TNu1Gnnu1Wgn6QclcdlLyOgSiD8m64XEncTdx2hW36Ow2jdGYXp+mbXiYTsjLgsPDQ8qyRN1EZrOJeFx1Igm5R3nHepWhP+Ld8qmGMhrvWhRsOrHEyGI64/tvv+G7b/7Ecr2mKEqszZjP5sxnC1zwZIlLaq1FFGLDxnh5FwId0hwrtU30d7somw5wlhG8lwRdG1rnmM1nhBh58uQJe4cHeKVo8bj4eXyU8AJHrJYLXNNQ5iVFr2Q02hOujZFObOsc3neWEMIltJlIVIudwVYwSn5HkCdaizqsFGq2nTNRFVWJJgB123J7d8/F+QUow/7+wSbWUWprUP5rD+GH7oh+NC2rxQLXtCIy5Dzr5ZLr9+cs724pgMxm+LZGRUWZFbiyDz7S6/Xoj0asmjWT6YzWO4qyR9nrC9yydVRtnTjfAW01B0cnPHv2gr39fWxeUPR7DMd7nD19xmw+5/72lvn9Dd/9279w+fZ7Do+Pef7iFYcnp5LQ5S2lV+QFaKvFiwqLxQrkFs0npHp91vGbT5RCCsjW1TrxSTRt61CqJRqNjyI0sJH0TgzP7mAXU8d0aGgxnjVKMxwOyfOcm6tLvv7jH7m+uWa6mNPr9dgbDtk73C5enVm8SlK/v/KQ2phKFZ2/pqKbEkG2FKbOW0Oqt0rwwwmi6JN0bK/f5+j4GK0Uy2XBoN+nqqrkmzBPam0Kj5AZTURcyR/9J3K74rOh6fcGFGWOVobQivqdj8J1yfKCk5MnPHn+nLI/SERG+Z+1ZtNu79R0/tbx7MUX+FihbSQYDaqkDYZiVFIMBwzjiJNnz/jid2turiZcvH/P9fUV788vODk95cUXrxiPxyitOT495fDwhB9++IHp9AqjtvCojvDfvTdFkWPMFqveQYCIEBxQlngfWK2WLBYlo9GA4LWYj0aNkG5aVDCo+Ph2/xTKP39p/A//4//IfDpjenfP9fkF1+/fA+K7U/R6aKNZrOb0+n1OTo6ZzOdc3dw+JscmFbbMZpJgeU/QIp9ujMElqEPdNqCVdOUy6aqtFwvquubh9o7lTO7NpmnAGIxXm47dzx27AeXuYxtuj1bCwYsarSPRbJMblaCxVV1x93DPbDEn4AlEnPMJe5862skzCdjAWGLwRK/QSUY+KgtoUf9rPDEK96ZNcJAiz7BaUxQFBwd7G8PoulrTHwwJnVFrCALX2JGe3STav8is/e1DJcgpPjB9eGA5n3N8cECvzFCIzx3JAJwYsNbQGE3VNExmMxbLFc4HAhLMUVVom0lg13qMlY6lDk4eiwLt9SFQNTVN2xBioKlryjyj6A0A6cw8PT1hvL/P27fvmU4mPHv2/DPNEpuCjNaaoiwwegvLbJpGrkvZDRzKaIOyauOzsguvk3nfJrpdB0oEapJQjRZFWa0tVdXy8PDA3t6YL758yfHJAdfXl6yWCym8OU9d1bRNA0GMuz/XeLQ3Jq5JW1fMZhNub67xbUumDb5pWS6WTKdzmrbZqJJ2cHL+zD4rhQ6pyneKpNKIe1zUk6RTHk9lriQ9Hdk/PGD/6JDGtdi2oTcaULvPo6iYGU3wnvVqxWq1Js8LQoy0raNpXUKEyL/13uNCRBuN9w6bZZiN0Wy3lj40+VWbjjUISkOkZiTuQImA0WS+4Lvvv2f6MOHk5IzecEhV1xiVy3b7M9U1/+qhIHiBiLdNQ1tXuLZlNp1wd3PDarni4e6O2cMDyjssEVeL8qR05GR/NzYHJTyrIs8ZDQe4EFDGJoPYmraRuMCkOMeECEpj8hyb52RlSVH0UFqTZ5bh3j7Pnr8grGY83Fxxe3fH+7dvOX//npOzpzx59pzj06fs7XmUazF5hm81Mc+IWY622ea9+i2M33yiJIT3KGalIW4WaCCishyfoAhaGZQSE9qYlI26lvymWmvFX8nHwLqqWK1W3N3e8ub71zRtTVn2ODo55tVXX3L65IyqaZkuFvxw/g6d5xTDX1+tpkNEs7MRb3/y4fe7j8Tt51Rt3CZKerOZd/9GaSgStyEsA71+j4PDA9brJReXV9zd3xN8S1Rdh0Oe0xgr5qiJP9O6Fq2hyHv0+wKNWq9XNFVDXTdok1H2BozHexydnLC3t49SWpSvduS0O6U0Y2wynvvbhs5KIqBzMej0AdAFMQodySTI1DgbMBgc8+LFSyb3t7w7f8/V9RX/+q//yunZM/b296gbhwteqkBVk0REJDC2aqvs05HlfywlGlMFWEjj7fl7nG94+eI5v//97zAxsprPcK3DaMPhwSFHJ6eYooP7/LibpPSnwm1vxz/+0z/jmoblfM53X/+Ju7tbaEWSuV6vCAqU0okXaBgORkymC5rWJ0n4VIVFbZKktm2JPtDr9VAx0DhH60Wdy2pNlmUUNks+QS2habm/u2Exn3J8dpLgReaj0NSfMtSPSm6KLTesI3YLd0H8anyC8XaJvSFEWK5WzOZz1ukQ7TD+m89qK3u7K9rQcUG6xGu3c+ijJJodF048bRQ6yyh7BaPRiMVywXy5pqoqeb7W4ayTSrnXm3Uad/5mB0/+a7uTv9i6C6CCKEiuF0tyrTk+3GfQKyF42kYCFaIHFQAxV7y9u2E6m2CMpigyXKvQ3qOV8Gd804hfWtSAQHdMlhGANniqpha+WExdXmsZDUfkuaVaVwyPBoxGI3p5gW9bqtVy07X7HMM5x3A45Pnz5wyHIx4eHphMJlRVJZDTBM90Ce61vdf8o87hLlR7d22J+aqsrS5xanyT7iuYLxdMp1OePjvj+fMXHOzvMZ9PaaqK1WLBw/09mdEcHOxzenry2eYpivLRZu+tq4qbyyve/vADN1dXrJZznI+0raduW5zboiC0sptOSNwtIqR7uoOEd/MYeewf9KN7YgfkEULcdPa0Tu9NOjN8stj4HGPQK2nqNZmWwnJVrSkUzOdLtBV7i4ioCbdhi4zo5qXjuVmbS4JgshRniVeVJFICXYxRuDoCS5aESxlRMF7XDW19T/Ce0ydnFD1R6hSREbVBBP3q0DuVVDDbZDpcVdxeXfLNN99wf3dHtVpRVzXRtRvD8bauca6BAOuqlhhHW2rvaOYz8kwsT1arisZ5XBC0UyeO4VIHq8DiQsBmOXlRiiiDsekcEAPssigoRiMOjk54Ua25vbvl3ds33N1ec315weHhEf/4D//Ik9MnZP0BtixRPkc5h8ozsBY+VdL5mcdvPlFSiOdRiFHw5FFIhK71GCUmZwHQKohnD6Lk0+xAEKy1wmfSWsxP64rzi0sGgwFV25DnBaPxkNMnT3n24gUvX33JyZMzpvM5i6//xHK1pHYN7Sdya+/23JhkJmV8pLOgfvywUl2q1RFQARXFyDFxmzwBj6duKx6mD1xfXZJnlqPDQ/qDHienxzS+xs8k4QgqYJzCbgxu5Q9716Kjp8hKMmuoKhHcaJqG6EVhsN/vc3J8zPHJqbSYk7RlDCap50jQuQtB+ikVpagiCo1rAyEqMitKWULSdKn/ZWWt5AZL5Pj0lL3DA14svuDtu3d8/fWfWK/XVOuK9+/esapWKB2Tsl0HC0i+fcHjXNj4nXR4bYFyynX4Tk2nqri4uiJGwTeXecbN1SX3d7cU1vLq5Uv+63/7H3j21VdkmYE0H1GIFhvIgvgZ/WI5wr87lDLoLGO4t8/+8Qm2KMn6huODA64uLphNJ5T9IU3T8Ob1G2JUNM4lJUrS/aiER5gCdecczhha7yR4CEH4aSFSlCVFUUpl1jkxRgTpak2meO8g2G235Bc5BD7k5OzC1FIVuZv5FESJwmMqZKT3Z7Ves66qrTBIh+BLndytuuE2yd6F7khX1mzWfhQiUerKJZEPIq1z5HnGcDyiKArmi7mIOlSVBGLGbwIyHe026dpRWPybZmdnsf1s1TuEX1ZXFfP5BKMivm05f/eOuml4mE5pgkfbgqg0jfdM7m65ujxnvVpQljnWRFzjNz6OKoCPHhMDsW2oFkGqq0H4FG3wVLUoUNnMMhwO2BsNUUpRrSvapqFer6mWKzJjIUSq5Yq2qn7Wtf6cYbqCQV5QFLnwG7WmbVva1GlScVdsgE2nUCsIu1DSFO5361p8zWTf0myhU0SSlLqhdTXz+YLJZEKRIGpt3XB3e8tsOt0UOoajYRIQ+Uyju1eDXM/D3R1ff/1vfPfNNzzc31HVYtYbgySVIaFNSDBaIpt9CVK3SIHS8REETE6WLlH6yMtQch4q1XWptl2Kq8srmrrh7NlTtDHU6wptPo88uCZgNcKZsRnz5XILCZYL2XwGUiGnTQVXNibDklyqTdIpBaAdsZDN/pieU8lZElOs5qNwqwejIcO9MZnN0EaQJNIt/TTBvU/nUdu2uLphvVrx+ttvef/DDzSpg++aFu9bgpdEiSQ+5RpBQog8N7RNQ/AtuZUuZVO3NL67XhEC0lq4rcYaej25t4uyFLRPFHEooxXKWrTNwFiwGSbv0++PeDHa4/D4mPubK9589w3Nas677/7I5PId/fE+B6dPOD4+RvcHmFjiWvMIAvl/5vGfiRKiX18WJbuZgfeB0La4LlHqfiFsDw6fqrGb6m0bkjdOZDZf8v79BYN+wdnTJ4yGfcZ7+xweHDAYDDYBe6/f42z/gCdnT+j1f/0NTkXR7JdkKQHwEidP9o8EeovJLC2yhbHJpe18xO3XO/8mpIq3EDUrvG9xKnJ9c0k5L5NsM+TW0LYRn15LDBFrk6ysc0TfUlhDYTUEz2LVsK5quii5LHMGoxHjg33Ge2PKIk8HtiC/NQalzA75Px1UPyUeUz6JTliMigTfAC3EZAaYTEKl0iUmt3hLDIHBYMTpyRn/9q9/5LtvvmX6MGG1Xsrmr6SLoK0lS3LiAg+wGBNo20iMj4m93doJiU6mrDhs3z1MaZpv0EQW0wdC27A3HHCp3olh69EhR/1+WgOCEbdGFIcU8r1WnYTtrz9UCqKiVgz2xhw+eUqzXvPq93/H/tER3339J2YP94AiukBVV2JomNToYgjSjUsBP0iwEWKkruvNPEWEb9DvD+j3+njXCrQHUQWq6zXT6QN1XdPLheulu4X9S17vBzwcSYSE9yAV+UAIcmdKB7vz0pIgtkqJUlcM6CqwgoVXO/fkjkmjfuzH9SiR6iR3Y9gEIh0pfzgcog043+KdYz6fslzOMabYBH8bH5AQfvR3/9rxS3KUBFIXaaqa9XKF1pr7uzvevnnN3f09s8USkxcMxnvYogco5rN7ZtMHQvJwMwqyIiOzBhUFaUDI0Qme2KwbfCMdR20sLsn8ZlnGYNBnNBpRljlt3chzxsjD/QMXF5fitRcC89mMNinPfY4xeZjw8PDA1dUV9w8PVLWIDzjniIoNpPBDXmRnLdEJPmzmPYEMdpPzjncj6ItWOqRehAoUmrqpmU6mDHp9tI7c391xf3dPjJFnz57RH/Q5Pjll9AmUYP/8UMJFDoG6qri8vOD1t99ydXVJXVUEL10NpXXqzJIg6UII3V3NG15SUgLUalsMUUYJWT7tAbC9H34E101CSt57VsslbSu8lybtZ6PBYOPN9qlHWWQUWUa/7KGMwdxnTOdLYlQEOtXcLs4IeN+mbpJNip8dNznpCSuTEu3Oz3IriqGVJRK2hUbA+yRTH0Xo6ODomMOjE3SWSbKgJMbo9r1fG3a+8Uzy0tWf3D+gQuRw/4DpdCKemqHFxyBiMU2zUaqFiLIWq8VzSnIoReuE2pAVJUYpWicdRGUEeq6VxmjFsF+igLapCGWR4tOWrMg3yafSGmxBUBqrA3lRUJQF+3tjnpydUC+X+KamXldM5jOmiyU3V5cMBkNOz87YOzig9zkLGZ9w/OYTJa1FCWkwGFAUBd4FCVydwyVMrUe6HipGouv08MVUr/O3cQGM80QveveZiVzdXPP07JSzszOGgx5l2edw/5BeUbCaL5g+TDAojg+P2N/bI9ef4O2I4v6hxD33UTCoYkcs7QQENj/ZwAe674EEDwrJBFYqY+KHJJLeMYDVBms069UCoxShbXDOs15XouQTkmGjgugDRC3y4wjMMSssWkXB5EZNjBk+KGyh6Q0HDMdj8iJPHZ8IsTukpcWulZVkCUMnO6p/AjRBDv1UxdrMi0CmiLtARfmqS6C7YNIYQ1EUOO9ZNzVaqwQxiDvS6H4Ld+ngjAm60hF8O8jnluOS4F0xslyumE9n5NZgVaSwAo0aDPqslksuz8/ZOz7GonDKYfKcGBySeHbVTX7xBOHPjSZEtM2IztEfjXn25Sv+1//5/8miXvMP//zP7O+N+eaPf+Td929QQaS2Vb2m9VKl8+2WtNzNS4iRxjt08EkZSuGCp8jLjUR0nXDgtijIkm/OfDphvVzRG40fBf4/d2zhZ3Fz2AObdaRjFPipSoFo8quISrq9WqXuoY94l8jMWqRaO1hwMl1KHIa46U7GDhalhHQr3acO7pI65EajjKLxELxDRUQW2wdWVcNquZIOzWTK9H5Cv7eHzyU5MDudvJggNCGKMMsj2N2m+7X9OtUtftERoiPGQOsdUWn2j07xruXy+x+4ub6ldY6i54kYTFZLEOYiw/6I4Fp82xBagcRZIwWdoICyxAC1VmjnpYKrRAzDKE2mcsqyx6A/QAdYzFZ432J1x49UTGdzzpJCWdPUm8T0c4zXr19zfX3N7e0tTduiEzfSJwgl3TrZGWrni049bCPgwLar2UnPAztFRSk1ts4RU+JeVTW3t/eMR0P29sZok+FRDEfDjSfeaDhitLf/CWbk42Oztr1ntVpxfXXFdDqhV2TsDU/QOqNqGta1KG+axK8MsRN52nZJJUnohIkeFzQ+dh982GntOv1dpyqGQFulYlCE2WTC5HbI6fEJw8HgE8zOj0e/KLAJtdzr9Rj2K9arNVEp6rohBFDWbCw6upiibdtt8K401m6tPzqI8qYTHred844fo1NXvUNGCH/HMByONsXnbl/qDutPwc31yejcOU9T1Tzc3XF6csIXr14ynU15+/Yt377+lrqqWVc13rVYJcVLazs6g0AVc2vBdAWyAEaTWYPJ4kbF1ztPCA6Npm0q1qsF69WS/qCPDw6TFFaVUmSZEe6h6QR+NFaDyjRklr2iIOxJocckzmbVtCzmwjF/88MP5FdXnJ2d8T/96jP5+cdvPlHagMi0QmuzrbICzrUpANkGw12FrapbgfVohdIWHwEfpXUcPVppnAuSEPgopL7W0azXTH1gtlhQO8f+aI/DvX1ybaUi+isPrT4odfHvVXNlM3JOqhyPq9Py8w+r1R1ULMbIcDRiMZtwf3uDVopBv7+VMvaBLCvIbUZoHW3TEkKL1oaiX6B0RpYZoopUbcA0XtTPUgDogme1XjGoBgyHQ6lHxYjZJBHd69pW27vr/TnjL83XIw5IkOpPiJE8z0VFLMGfTIIVbAL8TSC9fX3OuU2lEB4rSoUQxENCdcqAASJ45D3IrJjr5nnOq1dfMBgOOD8/5+zFC548fS7dCiQ51XablP3kjttPGCEGrDa0MWKLgrOzp/gYefvugr3hHk+ePiM4z/XlFavVirxXoCws18tEXpXAXryVOlEVjUZgnL2ixCSCeKaNcFe8Z7FY0NYNgyyTOfOe2WzOcrnkwHlJ+LUl6F8GVtDJCndDpWAzBhEXMAnOGmJAIYUXj/j0hFTP8CIRhUbjGgdEjNXJl0QTgyIoEQ7QShMSbCgqMQUVo1skQO+CswjBBbQxGKOpa+F+td4znS9Yr9fM5wuauqFeN8wmM45OW/qwOXC3nKgEyUueXbtB4EZlKgUqwnl5vG98DPn7tw6lPI1vmS3n9EYjfvd3fyAGuLqdcj9bo70jhki9ajCmJS9yQtRkOkdlRhTIWulk0zZiaeAcURup7paaXGtUaEHJnti4IAbX/RJrDK71NHUrEGQFBIXNs2SU7PDR43xDXX8+f6Cb62umk8lm76kTdDB0sLGdj80IUXRhPjAd7vbZ7j3uijoxhBS4Jal6o5K8ukvS9rBar7m9eyDLMg6PjvEhsLe/z9HpGcPhiCyzxF/oHvwpwwcvBQnvqFYrZtMJmTEM98acnJ4xGu2zrhour66Ep1ZV0u3QaiNa8Cjh0dItJhUUNo+zjUO6zVd+L/0kJQuR3a6TwmpLvyfy21Er2qahWleoz0SwL3KDJrJaLzZdnl1lzRAcKnRncCoyJiSJrCWD1jZ9mA1kuON1aU3quCeRkQ10mQ1UpEv4xQJAkiYfAl5FMmxap5+mEOiDnMWubVnM5zzcP/Dq5QuGgwF5ZlnMZzI3AayxZNqQG4PVKj3uZW6A0hiitnhEEr5uGkIyxlZGzriY5gqtaWhZLTWr5YK9/T1c22CsFVifd+SISJSJHqtEbc8aUR1WeZ5gzDHZhymy4BkQOTpNVifrFbPZjIfJ7JPM5ecev/lEybeO9WrNerWidS0qpsoaAW10gnEBUW7aqMQ5uigKvOyKWCtKUUQRMQjOEQJkec5yteT84oLD/f2E3c1Fq94Yzk6POTo7ZTAY/ioV1r9mdIfdLm/ncbufhBve+hh0H7uJR/f9RhXJC4mx3+uRFz1ciLT1mhgCw+FIqvvaJIiZVDUym1HXAg3MckOWWZSRbc3hyHJFHgy4iA+O6XRKXdXJr6GkPxhiM0uu84QtlCo9G17VzxsfS5A+Kv28mRM5HKMLmzlyTtR/xIBqC58iHQbWyvN1wgRN02y6SbuKUl0C1f0shACJs+RipIkBo8AYy2hvj9OTU95d/384P3/PwcERg5EQZrdBc+zi2J+dSP7VQ0VxSNcRgybPMk6PT7i6vGTc7zPslazriulixtrV6FyjTCC3EZ9rrMmIUeOSRLxN4h1aa3q9QiCuSlFkmRQ2/DbZN5mVdeUcNs+Yz+dMHyacndWU/UwO4V8g4PhQ8W7zucPua7m/pLraWQ4EQnAYq7FW49oWFT7ucSXr6oP6fwfBSyDKrlvpU8fVJFiUtaljIs+02QO899zd36NCoFotIcHOqrqibRvhJ2n96HPXTfr3IHgfUwD8pUZwjnq14ub6mtPTU548fYJvPV/+7nfc3Nwxn01IZWVCiKzXa0LU0t1VksCVvRLXqNQl8zjnxbRYjK8w1lJmOVZrgQHXjahK2QznJdlFJavJ0CErhfslCnKatm2o1utf/Pr/2jEej3HO0ev3aZ1jOpuJH89uVzkNkxAGUYnKmsDNt90k8YgyUpBI6AqlxFbjwyFd/tSlSRDZxWLJ/cOMvb0Rh0cnHB4dkxV9tM1RWYb/0MPvE44QnOzRbc1qOWM5n9Lv9fABev0xRX+EYw3GSnCOwMc2EOzw2NNsw43ZSYbkXhFVV+kEb2FkWpsE5Q9iWRACutBEFGWvx9PTUw7GY8Z7+6yrmtl8jjGWpv48QiFlkVHmOYvlkrqSs14b4W13sDnirmjQNn7oOpHWCg93F02x7U5vhXAEam02MYcyJmVlOglzBWbzGYv5gv5wIHLWMT76m7/2ORc8OC8iMrPZA/PZFM3LdMYmxICx9IqSEMAaTaYVOCd0hbSvWp2gi0mS25hInqcuT1tD8IK4SD5cIQa8jzT1Vs3Zh4B3LdFlhLalbVvKssQYhdUKo7eiV2oD69d0XpUZoIOTOCFGit6A8eExTfP5IMSfcvzmEyW8Z/rwwGq5hCC+PhEhrW5rWbJQfYwEJXwAlASY1misURAC3juCExMxbQ1VnWGNwk/nGFtwdPaUw2fP2N87ICsL8rKkNxwQlaaNP7J1/VVGBwfrNp8fB/cf3zw+9viHj3UbWGc2J1AM8eeo65q6Et+jgE6tdYEiOO8wuOSB42iCJ8uhKEu0lYDPeCU3daaSiIFUkBrXcvfwQFGWDEZD+oN+MpVlW7GKgcBPI5vvXuvunP2lgC/GSPTbpFE2qm3i471PAg4KjHRAfIz4IFX6LklqEwxoNwntvu7UgLJM4Hu+lUO9rmvKLCN4Cc6c98znS16+KDnY2+P8h3ecHp1S5AW2KBNgPB3cAMlc+VMMZZK/iNaoICTgL774gkwbmrZluVqxWq9ExMA76rYiV8JjK3JR8LOZcAvXVQNRiTyvVmTGyAGiNWVRJCleef+tFdw7KmKsrMH1csXk/p7VcklR9oAgJ93PHLsV4EfJUgoOOrjlxqcF0NoTohhZW2vEuT54IfzuVPE3kDYMKnWT2AFNdX8vBEkQU3kwBbfi8dL1ura8t4BrWyaTCaFtN1zCpmmoq4q6FhJy99o3PicxVb4/kv88guH9FY//9KGYz+fUVcXeiy8o8pzK17x48ZLvX79mcn8rQWleEKJnOpuCSka5iNdYv8zBGLlnvcdF4TwEBLIrCAKzEe8xVroetfPJXgKyotjsgW3r0EQMkeV8jmsdPrS0zedTvXv58iV1LYF1996FriCWCidxh6so36skaiDeMLtqd7t8G0hJedgKioAUJLQRE1/vPZVrNr/jvWe5XLO3v8dwb4y2lqCkK1N9ApTFnx0xJnEKR1NVrNcrQhvo9UfYXApNdetYVxU+eBElCJ0wy18fjG/RDo8DeTH+gVT12ySoUgjqcXpywv5ohM5yprP55kztimefeihjKHolZqpxXta3UWBSQYjAozO04xu5tiXLcnSiHkTYQEB7vR6dDcTu5iLdak0IwhFWWsk+mDpvrZcCwGK54JQzNv25EEF/Gq/A1ku3zDc1k5tLTGzJrCIohVcGdAEqI8vkjMi0wQJV1Qi/GiMiOTFsi1BK+Nq5FXVNUnwRVZQ5sBqrLFn0ZEVJq6COHrVeo4PEUaUtCLal9Y4sz1HGopXB2Dwlp+IhmthysuYAjSFG6W12x0/Z6/3q8/gfYfzmE6XQOtbLpZiX7mzuHa+AGPBR+EhN29J4B1GhQgp8YkRF+T0JViPRO7ySBV8UGaBpfaQcjRkfHdMbjsXJXSscW1PVT2Gt10kFw+Pq7p9TguvmQvDCjyU1dwP4rnoWvCc4R5s8RVzbslqvaRpRQ2pwxOWazFryIifLFBqPDw3RB4E7+EDbipkoWpKIpm1oWwcIxjl4Kddm1tK24s2xWq2275uKgnLouB9xW4n6qdXsD5Olv/hv9TaY7RLF2Wy2kRH+YJYfBdHdXO6KN+z+DBKGW8tzN00jzZlkqutDJMaW1gVmi5wf3r3jxYsXnJ6ecv6//+9cvj/n6PCYcZaLIlxC1G+6hZ+ot2mNlW6JErz6aDTin//LP7M/GvP6u2+4vrnh9u6e1rXECG3j0AYylZzpY6TI0wEbFetVJfdegKbRgtdWGm1FzEMS17BxREeDDXI4eNdwf3fLcjFn/+CQ0LZJBOSXGR+umW7v6AIq4W1ULOZztNqKmgTXSiCw4ymyXQ+pi52WWgenk2RpC+WUzylJUgLN60Qi1GbtyT/23hOTFxwhJEWqBCHxnjZ58GRZBn4rC765ztglbI/HX0qKfqmgRSlNta7YH+8xGgxkHYdIv1cyGo3IioLFck6zavBty2w+x2Zlkgx2qBhYrTRE4aV0Zr8kMZiooPWBMtc471DGkilD1ba0rUA2jRXydVU31GvZj3xZkGnNw909kYix6rOKORwcHBBCkKSyaVgulxt1xQ1KYMND3Q2UVNp3HsPzNv2BnT2Wj7zfu993ZtGiRmppmpblckXTtCIyoy0eRXCfz3A2BlFla5qGxXLJerWGAKO9g418erUWGxDvk9hPmo8YP54o7aIw/lLnVTrCO8lqOtY6MZeucxdiFIuF5YLReI88zz9bomT7Q1SWJ6ipdJRsbAnNCovGxUB0EZVlaGNQRrrlUUWcb9HBoIPGRItJ/N3Whw1MUScOWEyS6y4EdESUihuPMYE8MzTRC4/Vt1xeX/G7v/tKit4hkJlMmsrB/+oQnsaJimRdrVlMp1jTCZwIFaP1IlwRdUAFRdXUZEqLR17T4lxLCG5L+UD2GELqXGuN1mAiKGPpYIwhCTW1PnB390DjPL28pG8y9od7nNUNh0/OyPslISuFl5TEgzpuGEDU2/gwhVM/QtB8Cq7Xf4Txm0+UXFtTVytps8OmUtoRMsUYbSvz6DuxgKC3Kj8+ERN92FbXUBsYk9ayqWV5Qa8cYKwVWN/OwRTZVoh/zRHCX+6s/HjhSwRmjByVu7+7G9TvJksAbdPi2q4KXZNZkaPddR1vW6m4xtAmU9SINTlGGZras0B4KcJFqlk3Hm1KlLYUhcHFzmxUlvF6vaZpanq9chs4yl/b/M2fkyTtXvfHDsDHH6Rql+D2m6bhfvJA3TaoZCgKkvBsoEthKwDxsb+xm6jpxDsBSYw6AnXsXM2NQUch8l9dX/Pd6+/5h3/8AwfjMdeXF7x69QXD8Vh4eWHrGv8pIAndsMbgncMoTRtE9ns0HnF8csLtzTUX799xdXklXEAFTeuwaLJMY62hbVP3VieloODJswwSARutCcrRrBuitqDAR0ftxC+mMCVdkhpj4Pb2hvu7O86ePCHPLPxCXjcf7UaquAmmjDEsl0vevn3Ld99+A9FxenLEyclpEvwIiHSDFy4aScUxQejkbwA8Fo74kJO3OejSvw0hSIC8qbeK2ieAze0uA0AI0yHSNu1jtbuOsL+jfheiqAZKsLd5cR8dH3a0f85wTjzw8rwQ+E666Pl8RvCO4bDPar1gmXyh2uCI3qGlkkJoHdW6QatIZgzGGqzNBYZCwMcGHzS9IpP3JKokqJH27xS4NslY2ztHr9fDGEOeZSwXK4yBsixwn7GjZFLl3nmxuajrGpNvIU9aa9CydxAjmgSrU4rcys8e7YcfJMwbiPZuoKVFXdOle9nkYq7eek/jWtarFQ/zKcWgT16W9PsDTLJC+FyjUytrqprlfE5wDmMyyrJMxQMpCNZ1TQip2KAe+9H9ueLaX9tNjRuO0o8LmyYVUxaLBXXdcJRk3j9X8Nof75P3eomOYHC1I7iGXp7hKgdegn3Sa9zYdiiT4ouEeAkBnUy0fdqbk5le6kpB1+no9k9JzHf5wR4XgyAS1muGo74omQbZS8MnOONiQgGsFgtmsyl747FwThNqyfs2QaMjaIHSKVGywNOm0tZ2g98WJIQHbowl00ruZyW/79oWnTpxxmQ0dcv93QM6RqyPXJqM6+sr/uD+if6oDz3Plpu8VdRFqUfIc4Ukql2R7ucUnP+POH7ziVLTNI+q/JvNKyVK7AQzGZkoxqHxzdahXBZN2CxkIa+azcLruClN3eBDIAOIJG3/FJxG/mJA8UuNPBffjO51d7yOLWnyMck6uWRsNqBdeMWmi7STLIk3QMNyMcOnqiEoBuO9zSbunBOOhk8SoT5ilCErMnTUWGXQWv3/2fuv7jiSNF0TfUy5CIGAoiazmKJEd+89+/z/y/kFczFzzprp7tKpyKSAigh3NzEXn5m7AwSzqjJJok5n21pIJlQg3Nzc7BOvYPAD/fkOnwJDCIAlRY3SRsjpTP5IKSX2+/3I3dFao40kE8KvCtfe54ccNxMwpQQeqLRm8CL6sd0K+REkOVIZMz2X1I3xutHsHJoy5wQoJeTplIQ4bI0aYVNJbhfGWBonG2jwke+//47NZs3pyTG///0fePH9tzx49BjrpvX+qUfwInpijCEaIdPHGGkWLU+ePuX87C0Ay+WSGALBD1ROMNXyliNd53PjNxGjqCehp45NjIFh6NFVEqf4rI1RVRVN24pxaBR41eX5W15+9y2PHj5k0bSFzvKzx821kcpNmlVGQgi8efOGP/7hD/T7C77+y4LPP/+Cx48fM/TdyBEkwx6mMR6f7/3780rgmJCr3LFEODqlkqiVQDqLJ1FIorik83oNwUvXeEyMSie5PM8BkxN+CZYN01n/bnHhH+nS/q2hUDhbsbvaj5X4EDxvXr9me3WJNgrnLE3T0A89KmZJ9lA8WQClWSxbmrqS4EtbBh8YBp/3joGLy0TlnBhnejG21tbQ9wM+S233fU9d17StWE9YbdjvdjhncMYw7O+uoxSHyHp1gNEvMNqhlSFFhfeRpGR/TbmTrzPvIcUoqoiymIDZvlcSo3yOlELRvNMUgyeRxvPG+8QQEq/evuHVmzeQEnXb8P3333NyckI8HFB9xFbVe6/jYw/vxRS82+/ZXl1hjBE1t+Uy+91MBdTSWZPq//XX+Vtre9oPrv+OvOYEpS3FMWMM1mXobIq8efOGlETcZ+6V9qmHUpp2seLw8IiDVcvV+QV//NOfSNox0DOkXlSFk/hFGaVJSo9muQkPKLT3qKz2qXThbZIhnzHXbhXBT9L80qqZEEGlY3l1dcXr169ZrgQiFqN4CYkc+ccdOkWS91xeiXz7YrEU5FAs59IwWrIAGGcx1kmXTQtELzElMbYkMCUWUAWmGAhensNl29K0LbWrBEmhVYZti1n0MPS8ff2K77/5ml89/4x0EJj4XzcEdmafl/+WlVrg35+mpHr34xefKO12OyH1RvESUdeUVtRkzAnoZKZ2+LzQlUKurKoR8lIWU8rB2m63FfGBrqNZtNNrF6jCJ9rc5rLTMHWF/n489XUI21jByVwLHzxn52958/oVZ+cXI+7dOieBlx/GKnPKAb11DpMhQQqDUZqmqqhry+X2HL8ThSitHFncfFL2SbLh6gy7ubq85PBwg+1NTnCzSlwIRDMldR9qvK9LlTJ0rnzv4uKCi4sL5NKz+MUtczpPlMqYG4jOfXHMLBnXaupw9hme4aqaZtHy7LPPePL4EW9fv2ZzsKZ2FX/6w+95/uWXHNc1OmYi8SfOlRTSqZDrzbL0SmGd4/jkhCdPn/Li+2/Z767wfYdRiro26BTpu06gMcNA9AJ7USkSBukyamuJUYJbawzaGpxz9H1PkWsvlfEYgygUxch333zDcrnEWcv9x09+/jXmQ2heZChdHR8nM9i6rnnw4AHLxZKLsx/YXl3y6ocfODm9R9su+OGHVyIJPAwoxF29VOpDjNeC0pSjtXFtaj3iyseALkNCtVIC4VAWayLGDKSQ94YoCYFzjoymwvvc7YTMZ/IUK42x2JQKVEs+3rn2a3Pz7r8/ddi6pmpb0tk5FxcXrNcrhv2Oly++Y7+/guhxVhOcYbVecnl5he+FAyD7BCwWSzabA6mIe4HUgZ+pd8Fut6XvDNo6jJXOiA+ewffstlKsaduWw4MD2qbBari6uuLwYIX3sv5227tTvavrmtXqgOVqRVXXdH3HPks0h4JwGPe0Wah+C+ymrIX5EOgdI7pCa4ETlaJjOReH4EndbG+z0ll99fIlq7Zls9nAHXaUog+kEPH9QN/11K5i2S5omzbD8vzIJS1y4MA4X38PgmFeoL3tDNZGDKhlL5s6xQrwgyciZ8tqtRpVVe9quKpifXBAv73is6eP2V5e8OKH12y7ntVKhC9i15OUEVi+HpC9MZ/Jagbh5fqcTOtMgiuTuZ/9zA/PmulsFP8uz2634/Xr1zx+8lB+e0zqBXr8MUfKxb19pgS0bTv6/PmMhjBGE9GElLB1hdFGCi0x4kMg+oApNgOQle1SRpMkgh8w2uDqClvV2NxVtEYKEoOX9alR1G3NydEhRin22yuuzt6yOT4dix3wI3uwmjrm8nkuCH/AWOqfefziE6Wu39P33dhuLA+mHBpx7PaUwKJA70wOVMbAhNwSnx0O8zF4z/n5Ofv9nsMcHEoxQQlES32ShtKt41oV4d3v5o1nqoCXgP5mpaxAcc7Pzjg/P+P8/JIQElfbbe5+6OzanjIxWmcZZ4dOkeAjRPlbKSnqusVUFmUN265nGKALgpdNmaAuKkNyg/qu4/LigqvLy1Gu1jmL0VqC4eAJwX7QRKmM27pKZVOOJC6urtjv99c2ohGaJNM8zuFNeOM8kZoHldMhO0mGT50UwXbXdc2jJ0/48ovPefPye37/H/8PSVtev3rFN3/9mvX6iNq68aD/lEtQC8Aiy7lmQ8BEJqVaUSsicbXdEYYOlSKGitbZEV6hlIgVKCWcp5AlU7USuGiyhqTAVTVV7eg6c024YBgGYpLOsnMV+/2e8zdv+cN//Cfpg8mrqHeelQKTkzxFU1UVJycnPH/+nB9efk3f7Tk/P+fV6zc0dcPgA/uuBxTRJLTO5F2lUcVIcZ4c8S5clCTgPVQSgrVSogIXi2HyBENMyeKcY7VcUjuLH3piFM+TeWfWOSfd4Tit0RGSp68nSVOQ8u4q+xBwzwQcHR9zfnbGy1eviNHz6vUrXr16KdLrSojjKUacsWzWa3bbPfv9HkLAGE3TVJJYK1HcIikxTA2JylhcZXHZpFngdlo6TlmaOYbAarlktV5ROSdWCT5xstmwXi84P39LiJHzq8uffb0/dZjKsV6vBQqUErtuT//mjXR2C+w3Fojo9Hvi13JDYZF3O5ZTAjXB0LTSJJXGQF5zfW3GDG/f7/e8ePFiVNG7d+/eR5yJHx8KMT6PQdazc47NwUH2AJKCaZc5eymlURhlnlyW65c9/bqh7MSH5trPXvv/WeJafkf2LkkY3r5+g/eeg4MNbduOxbS7GIvlAZvNEa++f4GxFScn9zg5OWX/7QuaxZJtLzYfUUkrxGhDmPFARzEKlQFps72sSIHPT25t9Mj/VaoWuHR+He8nhMvZ2VspUDdNVjIuRcGPe9qp6Il+4OLsjEXTjLxapRT7fs/52zd0+x22rsVzzGr6fqAbenwQH8+xqhVE/c4HWY86P5pGq7HrS0p0+z0JQTABWK3ZrNccHR3x4ME9mrpi6DrevnlD33WQGLmCMD2/hWN9s4g1P1v+Xvjof4Xxi0+U+r6jH6QqkWIUL55Scc5jDqFL8bqctmyQRZVlaueW9q8NWgL1ELm8uhy7VzFGtBO/AFAZ6vfpx22By/UK8PQzMU7BXrm+otg1D/C1VrlyGnCuxljLdrdDKU0MJYi12EpTW4cziqHbAwKBSiEwDEoqs+uWZQqg91ymPcn77AUlG0QMQYjRNhKGge3lFT+8fMnV1RVVXbNaL1hvDtgcnZAQKfcPDb27GZBKQqNFMADZiC6vLumGPhvfXU+q0uz35hDH2zp3135v/Nnrv++sEHqdcxwdHXF0dMxyuaQxj/jLH3/PD2/e0vvIn//4J54+e069WAp8LWUi/qfa+/KBZZQmmlytUhqlLUl1EoSGRO8HwjCgYuBs6BhqR/JD9uGSRNhojUpINc4PpGSwrhF5Wa1YLFeYytF3Hft9N3ZHtJYAsCQI1hgODzes10u+/utfP8hlyv25cemz4kp5bhaLBc+ePeMP/3HCsO+xZpBu2rATkYCsopSqJPxG5FlTUV1bQzF7b9ysmBboXkwhn7/5bytFMZDTea9KSbrAq9UKZwxXFz4HHv20PnMn69r6zHyVfxRG9yEO3SF4qrZhc3zEd3/9hm++/YYX335L33ccHhywtYbXr37ADwIDq+sa3TbgBxG50Qqni1iBwHuSkudVJ0muFnWNya6aISWG3rMPA77vMkfOslouWDSNkK5zArZYSbU/AsrqsXNzV6NpmpE/tdsfcbXbgQId4zupUIkpVeZhcWM/KlyTYRiuJcN6tv5SSlncRzzAvPcS4OXguHTfTX6db775BhDY7V2NkOHyJbnWWuGcY+gHkhaO2ljUmk+Z5JPvrOnbztkyf/Nz42YxTDouGXyWE36tNX3fc3FxgbWW5TL7E8ZpP/nUIyZFs1xlDpLi+OSUZ5/9itdvL6jaJdVVj2InMRRiIG61xVPUcsULSIpdCmPVFMTnopJkowIxt9qJ+JPM1jvBe1mPV1dX7HY71us1Spc9L2XZ8o83UgyZr3iBsQZXVaA03gdevXpF13VAwnd97tpLsbfve/p+yIV3jY/iU4c22YjcEJMXVVdp05JSYug6LnedFD2NwihNuzrgyePHnN47oWqEu7nVmvDqNftdL+qCMn3yz7yLx/S128YvJUmC/06UuLq6ko0oBZSWTNxYDUoWqTZGJGIHLxKKejLXm1eFtDE5SEhgpCVZZXJsPmXY74TkK4mYlcpGbmfON8iPPd7X5od3eQPvGymlDGOaEqXCpamcQyvN0Hdo41guFqIC1fXZSE7msK6kChR8R4iDYJVjElidSgxDj9rLASFt+YSrRPVu6IIoxwwdg1LQgO8HtldXY4dBWUPd1JzeO+UL7VhuNlj74QjCNztI86F1OURFHenq8krkvmcVxHkFPoRSib9+yF2r0qeUIS2aZCSpmP+c3LOE0VC5is1mw5Nnn3F0eoqqairn+PX//F9897//7+z3Hd/89S+8+O5r1ocrbLsQvLhSKPVptgWNEpnllCaoqpaPCR4xW6tJIBVdL8GLTglnDXXtcNYSQ6DrdoQwEKJG6YSrRGHJGYNKCo3FGoezIouaUIQQsa4e/SYWyyVPnj3j6gP7kdzsKkkAMK0day2np6c8efKMVy9/wGCxtqLrBrkmHyAHVeTOW9lbtNaoVNZO7nKrm8GaVGpLApVSksAjx7/SabOkzAtQSgnPpq7xfUdE4YdhrKAXSKj3njqNLGtSul55/HvHP5pcvTOMcDaOjkW18MV333J+eY5zhs3BGkXCWYdRPUOGVZmUaJwjWOmmxDBArMfkmSiFHWcMTotCZN/tsZVDobIn0pZh6CSxXCypKisBTApYo6hrJ4a+fsDVFSf3Tnj2/LOfd60/Y6Qk3ZEiSnC4OeTt+Tn7bj/t4yTm0OFxHamp8xhvBFlw/WzRM27r6MGUeSVd12GtASVFnRgj0QecsdRVzdnZW/785z+zWq3uYIZkpBBRGWIXQ6Db7fn+xQsiGmUd2tVsr7aZD+Mx2kwCFtwOq3uny5t/WlAWUCZzZCfNzoqUwoSgIAlCpduzOTphuVzJnBt9Z4kSWrNYLEGJx5irG05P79E0Le1ySX2xlTXVe0EPRMkpjRIpakkIQ04G9bVzWhAoZGPtwtu5Prfz/agUckucst/vsy3HdLb97P3mb40Y6bs93X7HZn1ASoqLy0venl/y/fcv8N7L++57eh/oup5dt5cCdAySQCOiVzEEjB+E4wc4rWiamtpV4ieoLd0Q2HvY7reQIm1VoRW0tSRIVdtIcX4Y8AlRIi4GwDero7OC6W1xzoeCS///y/jFJ0pTd2GqhJncnh1HLqlpLThRaXlO0DsQ1ZWY5GGfyzqPnCCgH0Q4IoSIsdflQdXsvx9zlPczXlqaIF03ITLjIZlxsTc7G/IxvXaRhUVpVqs1r16/5eryiuVqxaJt6bqcWGEJukD3oM8KUAohi0s4EumGjrgLKCtVGBQ0lcMH8NkXKfgB6yraphYTYB84PzsT5S2rSUpgVUdHp9SLJd75sS39ocd8046p7DWKMATevHqFShGVAhqB9pTqbMidApXhCAXjXzouxISmKCkmqW6icnVNTOECnqRixmkrmtrx6NEjHj97hmlb9lqjbE378An3f/U5f/73f2e/veLPv/93Hjy+x7rWGK0ISqE/lIrB3zNnlKCCsSqrlMgsG2exlZOuUH5OrbGo5IlZfj6kiLLim5W8KMPFGOiHnn3XoY3FUdHtO0AR+gGdO4vaZkJ+SNR1xXa3Y7vbcXl1RYyJk9OTn319peN37Xkqz33+V48drcRyueI3v/kd3/71W3bbv1CFmPlBiWRmnajM+ZhDfKZneILJlqBqSsikSDG63mf4mNzz7O0kf0Deu9Ysl0tS9Oy7QbhwYdrjSkCYYnqnbTbvjn6SYQ3RR5TRHJ2ckELP/+//zBj+nEhbI1yGYUh02x0qSLBSO4tPGVXgA1EVqG5AxYBBukpkPxfJ7yM+9KLcaE3egyrpbiLeMUZrjNFYZ9n3O5pFw+HRIQ8fPfo0c3LLUFrhqoqmaTg7P6eu62ykKga7NwPtcb3Outwh+0wJtPiWoltem+V3df45gUCH8dx1Gb3R1g02i/I0Tc0wLDg/P+cvf/nLp5qWd0bInNuu69jvBAr7+s0Zu95jqhpXL9j14iuGEpW/dMtanxAo6tqzPn1f4LOlMzcfZZ9QShCyKFGm3HcdvuuIPrBer2kyUdB9wELgPzqUMTSLJcZWXG239L2nXaywrkIpw4MHD3j15i3ey9ltrGUXein+IZ19nbk3WifapsIoy+AHYgqYJEVW4SfL+VlVVeZHD6OoUV3XdF2H96LQ2fdiH/LZZ59NqrsZPfQxR4qBi4uLDOu2dF3HyzdnfPv9S96cvWW/uyQOHSaqXKBJEKTrmlJCW1kLxlogG8z2A0YrlnWF1g7rHKDo+oE+JHxM9D5iq+I3aHFWVDddVRGNBmsJwLbvCRk9kLhuS1Jiux+FSd8o/P1XHr/4RAlKFSNXdEwJdGVXKkpiWmsMZDnYNCqtAQQ/OXArCkdJvZOU+MFzdbVlGAaqup4CCS0CBZ8Ee6cU2UxFCLZkXpWeFv/1h6MkT9dfxhpDZR2DT3K4jhLXEYXBVg3L1QGvX78heE/tLMumZru9woeA1RX77VU+GJIoLnlpuYcU2ffSjtYOdBSncudqqrpmCB6SZ7/bsVy2HB8fs1yu6PuOi6ttJpxH2sUCZyuGfS8QPe+pbhFL+BijQCpCGNhuRaJUwYjBnldkfiyQLIdsCThL8i0KQOJ9QK7YpgzNSDGwXC549PAhh4eHcq+VQmlLtVjyxa9/w9Wbt7z46595/eoHLs7P2Nw7yVYqGh8+YUUyMW7KKakR5qONQBWqusY6RwwhVxQDgw8oo3FOhEBKIhWCJxFRGmKKwj1RijaC0/IcB+9RqSSdwoUz2gqkQRu6wXN2dp4ViT4M1j/HmLd8PRGiH+9/gZmcHJ7w9MkzXrz4gYvLK4hyX6wp3WeV5y1mCND0mmNQlrLszKz4UUyyx2p3SbRU4b5N1gaC5Zf1VFWOuqroB4GRhTC956KANxccUQAzztSnGv0woFKSzluU+39xcU5TiYLd9uoKchdy0Fr8b3yP1RqtF9SVlYpzVqQCMcwERSRitaJ2Jnv8QNcN+MELt8lW1E2NMQpFHBNHbTTWiJTz4D3L9ZKkVPb2upuhs2paVVXsdrtRBMDkbv91rbVZwsv1DnfZR8145ulZ9zveUqW+vhbK3lfXNU8fPR5fu2kaSc5TYrfbfezpeO8oSrUX5yIOst1uGYbIvh+IZg9mK15PUfzdSsxwW/fox7geSk1cxXcTzhvV/Ixi2V5tMSRWTUvTNFMhRqk7S5RiSri6pm4b+v2WIcvjt+2CXdcTcmFUrjdBiowqMUwFl6giwXuGvsfUYiKrtBQAYxIlTmnYGlGGm/1+maeyloqYwX6/z2ghh9Hv2ZA/+IREgg80dYuzFa9eveLFD6+5urqiy52jRdPi0PS7DhUTcbclhkDdNGhjiAGSS2gdCPtIUmlE3uz2XRazUMLhDomQxIxY2wHJiYqqqUUZK7zwSky1d/u9JKG5MHttv9bvxiWJaQ3Ov/ZLGL/4RGmsuEpYMW1kMWb4hfycMYKT1em6z83Nje/mRinfl0DQ+8Aum9MZrQV2lH9n3ur8mEPdNAucb+g3HozS8XnnNebdshm8ghx8STBn2GwO6XtJFKy1gtsPgd1uh+97nDES5KZMdCVBTt8gHxzaEmLCWAmatTH4KJ2DxbJhsVhgneZqe8HQe/pMrm2aFmcliG6bVoiUIV2rZn7MUeYtxshVFnIo3YN5VXG+bt43CsTz2nqLKXvgcG2+0OL/UlUVq/VasM8pS5IbTWU0T54+Zf/2LbuLM3rv6btOYHA+oEygdp9GklejCEq6bmp+yCEBvLYGawziTSLX0AdPiAFn89pBgvW+2wOiYJZyKy6mgA8Ci1E+ESNEH9Ha5gQze10pTd8LtDaEwNnFOfu+/0AVx3w1N56jIsQQM005jhV7UW979OwZ6z/+ge9evsjdI5kPlcTPRpOd00txQuc+h9IoFQtNQsyZS/IiP57nPCdwqcy5mtp6KqM6VRL5fhVAgw8dITT03R4/DLjK4YPHBE9IiZBSVuZKN679egBzbR4+YFUyBXlGtNL4IfDy+1fsrnZsHtyjG3p6P2CdxnuN0QlrYd8FIlClRGUtNnd0BVkgr2Wt7E3OGoyz7Hc9u65jt90TQ6S2FXW1wFiHNpoQA9v9jsporNNYJ63A4EV2Xbwu7w6yUtZau1iQUhIYnJYud/FOKnDOsaikNSFd556V/StID3K8lyUJLygNmJAbY4dJi18hMbJZH/D555+TUuKbb77JPMFDFk3Lt9999ymn5tooghPCU+ohiy5pbei9JwyRAASE62iNwboKa68ry0LZw9/9GwXBEuM0h+OQyDTzdiT51EYKJPv9ntY5FosFdV2PHeOb0O1POZISiet2seDF+RuudltOT045Oj7i1e//SBfIXchpnx/hnWFaG9EHhjSwZTsWLJyx6LrK8zVJoJd1pdVUTMzvZlTlLOp3XdfhqnpM7D92pzskj1GK48NTQq+4eHtOt7tk6LcQPVZbnG3xYWCvAp3vCSlSVxWVdVJozXy+iFgf4D2KREyazpfkHFAW11jq7NmpcVitsVWDbRqwTjpQ1uG1RycY+h0pDKTo5byMYg8gPKiStEtMBhRMyx3uXHc37kYe5Z9ojNyPd/DA84qPHtvipYpfkoX5vz/28BUYwi5XNsafVRnM94ngKbdWrd4zbgtq5kmS+AG9m1wZYxiGAeccBwcHVFU1+hq40gFIWdDBSuu4/L3pfjB27ooqWGmzD8MgBrbZN8IPge3Vbqz6SVWyxRhxMF+tVgIZSpNn0UcfSdK+EALb7RV9P5HgC//h+vt4f7B48z6klJ25SyCSX9daO7q2ay2mfwW3brT4SimtqaqaL776NU+ePmO37fjzH//Cm5evsFHhEnwq5xI9PgOMnczS2Ui5i4I2pESGMk5meDEphhDo/MAQfbZiVQwh5Y6YQiuDIhc7SgKW/xNDoO/FLDKEQN/1krjEyNuzc96enY9mqj9vTGt57o9VvqO1JIJyiwX2FrVhc3rC8f1TXFOhrRa1NWswWubNaIVVGpVmvkx5Lxmf7xRRiKC+/F09/q2IHIjSddLj/EgQI52kECO970kEXG0wVqGUwF1jHNBajes8JikOx3yvJGEp6NJ07dme768fsuNktUXFBEMkDoGz12cEn9Dast13DDGgrMk8D49zIhtfLRbYpiEm5Oe8R1szcsjQorDlY+Ti6oo3b0XR0/eBWlesmhVtvcBqR0TjE2y7bGirIq6yDN1e5NKVyUWJD3bZP2lorce9OIQg3jzGTvzb2W0R4ZAJRvljH9NZmH/3xp4+H0UtUQEuB/3lbCj7++oOxRw6P+TkRPbMpm1p64a6dhLgK0kSvff0vSeG9G4HKI+pIPvuuJZgUp5B4eSMz2LwhDhxJmMIaGNYrNYiSqJFFONuJKHyyFYc682BWDEMPVprDo82dF3HxcWZFK0Q1dsiez3tV9NaCVH254LGEG8y4UeSC38wo07k1yixSVmHpdtdXiP/IYr64MccXbfl4uIMZxy77Z7Xr14z9D1aQ12LrUBM0A2ebd/TDQPGWupa+MRGSQFRAdYoqkq4uKDELNpHfEwEpTFVjXUVrqpkjbqGylZUVY2yEqcZY7GmQisDMdHvtgz9nuhFYGU8e99zPbfFt58MVn3H4xffUSpyt/PNHRgxxeMhgAauV/VLUhBj6RIwVnTm3SmpXkuLeb/bjV4uAvfhk6fo8y7YvFMx5yb9KDYVxJslVyBv/qwPgcurq7Hq07Yt+/2e7e7qWsIzd3mOMY5S0QpIlgwvUxhr0Dn4L0o2zjpCiJyfXWQvC5+TETg8lA5SjJGqqliv1/JaJVL+BGdJqeKnlLi62rLf78ZKavn6FDz/7ePtZidqWlsTlEq4JyonSSLvrLTwccbqkAJlDKuDA54+f873L17wh9//gdXBhuXygM3hEXr4+B03gJjbHkpp6ShpRQq51q7k38pNa0VphU4O50QGNyKd3e0QqV1FHDy2agjZyF1jsMpKsmQM/bBHGUkcQ98TECJxGHpi8PigqNyCi+2Oq93+o3tEvBsg5WDTGdrlgqfPnvGnP/yBN2/esF4t2F5t2e8CMaXRxk0pleXvb1dELP8/37OuQ6kiMcq6KV2EQghPyef9MeGcxdkstZ9NZ5VSojqVE8qYIiFOUDyb9I92ym++rw8xn2S49Ha75c2bN3LvUVxeXbHdizJdQuCWUUXaxZKqFvW3Yb9nv9vijAUSyjqUgm7fj5Xbfd9zebXLHfIli2aFcxUxz0XnB3zOglIUWLWrKvbbPavlgs3BitV6RV03P/t6f+oo+0NVVbRNw9nZGUZrub+3eMvMuUY3i2XzLvm1MwQkib6xvg3CVTK5Np3S5Ee0aBc4Y0cPOu896/X6k87NfAQV6HPA7oeBtllweLRhiIlvXr3k7dWW1A9S9R8iMRm0sqJ2OOu+ReYd3TwfMea1mAghS9FriTEg+/8lgZz70MusJcAHjBWvwbpuaRZLtLEMQ8AYNxYH72IorVHWcHx6yv7qgqZtUBoOsqT6drvF+0HO8tzSLrUIJZNDCoFoFDorClYzw+HgvXCPNWgLWjtRfsux281EHqbYYr/f03XdeOZqdR2y/DHG1cUF5+dnnBzeo+vEP7JtFxwualCa779/JfBupTIKMYmpLDmOTIGU/Ji6aCV2J5NQ1HT2F/XhEDweaJwDrajrSgqoTvhMSuvcFVVj8TrGOErgyzM7lq7lvmb48c3xvjjxv+L470RpGDKUDspikATAkvIC0apAU26HiYwPupo6Q9cPFPn9SKLre/quk4RA6xEbWqAyH3vcrHLNk6bbk6W/gQlUXNuYkpJqVxFMGLKRYdM0wgmIcYR2FQhjSValU5Kyj4IkG9vtVhQFc1Vzt99Jp2YQfsB2u2W7kyTEWosrLesQMMaKLHbbShUlJ0k/59H+e6FCBS+e8jXsdnugKJ0JRGLc7N5fbBz/5s1kdkpQFaTCUMpdOC3S4MaYUda2wCSJYCpLiolnzz/n++9f8Pv//A/+/Mc/8ej+I1bNAvOpYjg1wVLT7LlBmUzslWBOaSHih4xnl+5uMSgGrRIoTUgSBKekZvB3CZT74BliIEZJMhLSXdFKoYzGJjPKXyujMx/hw6reXb/0uW/RFISW4oGzlkePHnH/wQP8MHB0tBHlrQzhTKko2xWifBphdMDIRQLGR1jn/abQmMdALop/WWkOF+PRlOJYhDCVyNdaY4Tk3g85uCnXEkdp4sJbijGhzY8/b3+rOPMPjZRylyJyeXHB+fm5wDU7z9s351xd7aisxmhH3SywNqJDJAThG6Uo3SeR6RVojDaafhCBEG218CsrUYxrmwZnHUmBD3G0S+hjj8II5FVZnBbS+mazomkqFovFSL6/k5H37KqqaNuWN2/egJogTQY1A0DLKHvLu9yamYDNDTRASZQKQVxrDSajOGaKeqVzcLg5RCnFMPhRGe8uEyV5wOKYRCptaJuGhydH2GWD/eElL9+cgTIYJSJEsqXHa3MFQOm23ZhDned9hMQzP08DSkv3JSVdmpsYbVgsFty//5Dl6gAQdV6U+iSw8vcNpWTfOjhYsz08ZLWUDuFytWK1XBC/Fz+zFKQopjKkeArcIzH4PAeyx0/7Q5bIzkqymszFyhYcJG699rIm9/t9LqQKhDGNJ+bHG7vLC4xSHB0do43j9fkbjk+OWK4XXFxe8ebNJYPP68tYkhZKhs5nulLgjGYgyLxFIKlsX3AdahhVGiGfvh8YSDhd0TS1cHlt7hZnxIC1BrKnZUGoFO9FPcKl1XUlxnc6pL+c8d+JUq7EkBTBC7cmxYzPpjyoWca3dARyNYRcldUokVZO2eTLyrReC2gyRXa/37Lf7UgxYKsqA4bMGFh/7HFNie8f/HvzQ3Dc7OFahRGgXbTE5EdIQl3VwplZrUbce0iR5OVBDyHiveB2QpBMJoQsh5oUCS/eOEqEHvK7wefgNymFsVIxMdYSlUBojo+XtMsVPkhSGm8eXj9xzJOlm4FumVOjRcjBe8/l5eU4NyWp1teCC+nqxdnrwGTsO/87pYuJYuQ5GCucmxQCSc/9vzSuchKopJQx9/K+TVVx0Bzz/Kuv+P7F97x+/Yb//I//YLlY8OTp4589R3//mN7TVFyYigxVVWV4ZcqQOcmApPNhcr8gUoQgEqI8FVNiCAETAioY0JqYf0a0KhKJQFIRoxzOucmXIkXOzt4yZH+1TzYTaoKPFLW5B/fvc352lp+vrLSZBWZGOE/KHWyUJEv5c80M8pcEmicJc+7k5t+X50ySR4V0QmIQr6WQg38ql9cf+DDQdbvc8ZX3Lu8pQAyjOE7KnT31iQrcMXhiDMQUODs/Z7fdYo1hu73i4uKS/a5Dtw21tRhrUMnThQGIkHReQ7kIkT1LEpqQ9yWrZQ5X6wbnKqx1AjuMOewaC2UqBzzSzSVBCgFXidm1MeZOxRzQmhC9qM0tFjMFxMn0s9zD+SjJ0m1dwJTSWPiai3qMr5Hlr+c9WqXIqmQ9u6stfii+cxPXtK7rjzcPf2NoBVZpjBL/JJ1EXOJIn3D/3inbvuft+RXBRGyl5Tybdd8mQ9l3C11y/XOoonTMVWI8K8pryPMrktkFAbJYLNgcbjI/6Trs8a46SloptJGkxkexMtDWslgsODjcYK3Yq4gn1LwozQj5LPtOMhqVNNH7DHMUn6YUZI+OMeK0Gos1omJ3HeI5zrOecZPH7/+N6uQHGP3VFQfrFevDtcDjnGMYJB4KbWK1XnF2cYUJUhCUwl9CtCbk/fkwiHiRQlAySdADIYRR2EcQNkZEj1Ii6oA2CussbduO8MaCOrHGil3BboKea5UL+mkyC5/mkfF+/VLHLz5Rkg1dqtDAGLCWYG3U5MxDqrJK5GLzAVOqYyr7QaSpdzm2hQv2MwU/GfOlNHrGlM3uY4/535hLkb7vb0/523VOwbQhXYcPxdwKB/GoUqVqTz5stGYYPCobrwEj70jnilpCFKxIiaZtiSkr6ynxq1KZf5MAbQaqWjDkKv+dEATG1y5arKtylyGN3bufwlGad97mXxuDjNuq4rnK5f0wzU9KqBgzH2Ti5FwjBYxzP1X858ntmOzq2XtSGfqQoVOFqyRrS4/vV6mc1APKWB48fMxnv/qc/+//8X/ww4uX/OE//wPnNL/5h2foHx9KqfHgUteel+n9uqoaOyETRCMnjiETyVMkmoQPSVSolCYQSCFhQpTKmQ+5eiaHkFIiPIDSuEoSSgbhohgSV5fn9EN36/v+0HMwD6IgO8sPwtt4+PAhL158z9s3r6UCOh7+SrpDaTaXXF/fKleYS7L9boBbVLquu7KH3L2zWuG9dIdFFU1JMpKQ7nAIuSgkPnTzSvn0elIB/rHx7p7y00ZKgeAHfN/z+tUruq7HLRdcZSVMHyKDT5gkEJ+u6+l6kXamJHZJQeaNxZRRBBS5f42ramxVi4xxmcd8L6QrYzEpggoYbahdRQoi279oG5q6Yrlqx2LaXQxjDMELL2mxWNC2LZeXlyilsIUoX5LdfACUgthto0Dz5hy0mzHo3Atu2iezUWYW/ClrKgRJSEqh5M5GCBA93osC66JyXGyvePvmLYf3TmmbRoJaBAURkGRTZaGKm8nSZMh+vVA5FYf0O7XSUbKZqdtsjKGu62uw+TGhUkqSlDsYBoUyDpSh6wNBaZStWK41h8fHIy9Jz/Y7rS3aRAxgY0HtRKLPHj9K0TQNvh9IRuC/PmTvRh9wyiCMSymWlsRKRRFnSTkeMcbQdbtc5I4YhXRVPuK4PDtjuTnCOsdiLUXb7faS6COLdsH64ICz7Y6kiqqfzrDNINcfPIPv2PdSsHOVwphq5IfHGAVtU5JxxNetqNw1dUNVV2htUEqg0SpJ0dgYI0nY0M/WYeHzkj+fEB9KXS8Q/1Igd2X84sUc5je8bDomk96N1hnidD2guU36e3qN2xbRFDiEGNllqFhZlTdxtR9z3CQ73ryO297LbYHM+DOKaw9PSuCjnyUQEKIHNeHRY275hhjF5DOUCqQaE6FiHLfPTtVR2P0YYzIJ2Y1iEHrmaVXqRHVd07QL8ePJBMiPNb+3Bbvk91Hw9yl3I+fzeD2pen+QOH/d6/fv+sGqZj/vnMPmRKkcwlZLdVTlDmhQivXhIV999Rs2myNev37F9999x5/++McPMS1/17ht7U1rU6SDxZiS8fpNVugCCer7Qbwyum7I0vBaPFsUBGAgsRt6fO7EqBzQWmupm0ZEQbRU86L3IkHe7en3+492rTeTgpvfK9XCk5MTNgebEcqqZt02lfluzA6xa8EqU6W/fFyD+70Dr5o4i2V9leqlynDIGDzRe/puR8odgNI1v31d336NH2Oksh76nvOzM3x+7i4vL+m6niGTwX2MhCiiH/0wcHl5yXa7BaCqakAxDOIpFEIEDEobjHXU7XLkFSitsneO2EYERJlQChQGbTTOOoHtGU3b1iwWLcvl8s6q/iCIB6WFF7No5f1AeS7MtfdW4qYCC4PSEddZIY/xHs/3wXfu9WxtzJ9zkGRgt9uJgWrmkmy321Fw4q6GjoHQd+y2Vygirqmpm5qLi3OC96zalkXtBMobfS6I3RBsyc/fMAz02XOp8EKuD3WtaF+e5dGviqmbp5Si73uuri5mAgV5DyB9dG7l+4ZcVyJGRUQTElKk04bj42NWq4WoB5PGPbgUT6d1kd1LciFZyhTZ9iKJl2LMysMaSexVSqQgkN+QzYFBIIoo8H4gRp/3hk4kw4Mn+I87T1bBwXpFVVc0yyUHR0fsdvuMsmlYrlZyDiP31gc/JoGJuYCRJSH+dV3XsdsK53kYsvG6VuO8xhiwVuOMoV3UAr2zNscM8r6MERGNlDmlMEMnkNEJairwT99/Nz78pUDwfvEdpaL4VLJ0YywxpBF6pxPZo0aGVoKQNbNqflRzI7mcSF0TOUhT1S2EUZntLhRqbkuUfmxMD8vtHY95h0Pmr6irAXpqDccoJnkhSKW/kA9B5s1aOyUbITs8KSEcSudIXlfek8oKOBO3rDh5a21wrma1OqBtBSM9XrNSGFWIxB9+XIPjMVX0/eCneVKF8zb/vfhOkHkbZKN8v1SPZHO8fi3lAC6KVgqF0gabE4EyjMvkYaO4/+ghv/3db/m//6//k5OTYw4OVh9lfm6O0lGa/6vUVHG0VpSwSrcwhkQaPDomkW7WGrBEPDEmfFbKS1qJF0dMqOBxXoJ+tAD1SqV6LBJkbhNZYSpFhR96ug+QKN3s4swTlTmnY36fS1LdhYCrHCenp3z33Td0XZe7AWk8TJNW7yQp82dues5m1Wkth2pKCaUTqAzNG9/09L8xJkgTnyX0PUYr9rsdXd/RLJcSHM4DuxiEMzU7UOfQ3Pn7/JBDp4TRcH5xzps3rwDpTJydnXNxdUkIib4bMMqgk6huKpQQnY3BuUqq2bmK6n1EG0ezWLLvOyIa52pcLSayKSS6bqDvPSgpyAxRPL6IgaYS9ap+vxUitnXioVdV8jN3NLQWcZxIxDUN7XIpHBcf0MbmCrTg5ErXWo4Bne81I1/m2usqLdymND/b5qqMsk9rI1VtnYPfkihdXV3molJkt91ysF5nla+7GVYJZFIDdVODSqxWS86/u+D87Ix6saStGy7VFh8HtEpjsj5/xueeU6X7UxLSwguT/tokSgBTkhVjHLldIAnJ+fm5qH72A/funXJ4eIirDAmHsXdT7S/F0SIkBFmkwhiOjo44Ojrm7dtzQpgXY4QPXljcBbrIuG+YXKyR7nfIhdVuP7BayN+NYeLWlOJZUXIEGAY/3oMQE0ZpUf38yHAyoxSLtgGtMNqw2hwQgnhgHRxs5GxrKvb7K1QuzifSKHVuMnRRmcncmcHj8/6qtSKQUEMSr8Qs5pCScCuXiyVNU2MrsdlQ1sozbC3W2XfOh5QYbTrGz1VJoN7lZv9SkiT470QJo63ICCuF1hajrTywqkCpyqEgpp06TQtnVP0xZkwlShflWuatJohRTInddjtWYd8vxvhxxs0OUgnKblv0pUN0/fPb3++UgJmRnFq4NF3Xk2LH1dUlKYE1LvMjMuzAVmiVK0cZDmXMtPHKgRHFzwVFiNlXogRjWYfYFEM153InwpUW39javk2l7+eO27oDihnXqHSTMuG2/M5U+Z8qrPNK4/zzeSA8we6mrp42GmIkacEg13U9VeuybKtw7ASySH4/KinaxYpf//Z3+P2e9XrJ/fv3Puj8/D1jvrZKkmmMpm2aEb89xCgmhCmhsDPeV+kEZ9f1FMaAxIeAMQJRgMz7IoydkxgjBNDOilBByMFMEMPDD3FdZdzakb3le1OQIBLeq/WKw6PDEZ7kfT/CbJTK/mPp+kcRCykBGEnEHkRaPBd1ZoyRxASXKqIMRR5bKanst3XNvhjM+p6QZWVTjKOMrVzL9JqJ62v9tkLArXPwE0bMgeVuu6XrhOMSYmS330mwlBKDHzC9xuZiRVVV4v9iROwl+qzilhPxwQ+gtXgkaU1MsB8G1IDAhCIo7YhK5cxBZY6rSAA7a/ApsVpLQrloF6zWB7g7hJRFwFiHDx3WVSxWa1zViJeYlmKhRnghRmtCWUtJODQpzbi5pZuUyHL8UjhMFAuDiNaGkAKZwy/Gl0SMdgTf44OI8lxdbYGEH4ZsL2Fw7g6NeUMkDINU5ddLur6nrmvaRcv52TlHVvxudOmE6GkPuylsMYdnl3E9RpiewXmSpZTKRR0jkuD5TBAV2V3uhl4JZ8c5qrq+MzbJKETjnDxXaeLUrtdrTk6O+fbb7zLkfnr2rZEwNMYpsZx3xUsnGAQKHKMUWru+R5FFoQCUoCWlIC2iLiVGSEn8wkTxTiBm4SPHXm1d0bY12hoCloNDgeFdXl4SYsjUACuxi7XYOkGIqNw9EhG6OFsbaUyuS1xZ1DjD4K9B7uu6YrVeUVUVzmUOrrECKw52jPlKojRhcWAsopWC7pS3XhufAgH1zzL+O1EaqzqGqK4T6UtpVSudg7fZgZ9/v/z/HHBVCmjAWCFPs6C3yFTmn5j99+OP21qmN/1d3vObjK3ZG1XyMqSrlCGLucOUEnR9R7/v2O12WOuECG2cdObGANaLNCgFU+xGiEEayeFi2uhDEG66UpmjnrtYxqBzZ8lY2YBSUoj3lXmnbfyhxnw+ygakdJhtLjlRShl6B9cOAiWnLAkJRhIS0M6TpHn3TubYjPfDaI0xFnQAb7DOUtUVxtksB6rGv6utKJp5H7Clm2oMp/fv88WXX/KXv/z+kyknXUv+UCQVyzdkHhFp+bqupKOowWgwMoG585ifv5iw2ggMKgcU5dm0TqCXWilRxssHRKnS2awQqND4jGmPSbgTH3O8D76gxCwpX0OkWSzYHB7y+vUbjLEk+slENnPbVMFq5I+UAwWVq4QxTp+LWe112EnpFAgnR15Ta4PJBobOVSyXS1IOUPZdT9ftJXjLED1i2R8nBaV34H2zZOm2z3/uiCFycXbO1dVl7kZPHTrvB7phT4qRxjkqV9EuGoHSAT6rrRXIV1kHSsv9SElUS30W7dFKY5Q43qONJEpJrtsZUUjTCkIYWCyO0EoCxqZdoPXdJQCF32C0yObXTmTCu90OPwhs2hpDVMUQFJIqZ56+dk/nwf+84Pa+pLcE/6Pnm4a+6xiGAZ8VzMagv6r/JuLho44Y6Pc76qbh6OiI12/fUDnH6el9vvnmOy7PL3E6G0bHiA8+CxrYa92gcubc5JrOn38pYF0/k8vPG2NIPoz7YoyiRpmAuNvx8uXLcc3WVUUY7saka94Nt9aOeywp5UTplMViQd8PmadcFP8kEi8KbGPwLs3JLOyU5WmSGue78NiUnvwWQY0FouAD2khnZ+h6fnjxktcPXuGqFqcdKX3cqGu1XFBXNVSOEDXL5Yrlas32zRuGwWNr6SzLfi/rfIgBFWUvDlG62l3vGbzHKKidoHZSTCijMWORX35fZ2XG9XrN5mBDVdVYY3GVI2T4dCjIhRxPpRTH6G6eLs2r5HNoXhkfI5b6Zx3/nSiV1nc2a5xDYpTS12S7FVxbPBN0Z9K0j3MSbPk9JVCpXKDFh/DOAhs7Tx95/Jji3U34zvi+8mMkrdjbCX3zYH7qCBjKnM79qopceOUEUjX0A10XR8iCwMrMiE8fvCdESY6Syl2BGEdYiDGWyjVjFUs26slT4ubh9LEe7hE6pjXWKrphkCpP5cCA78Vwd+KIKLRxWIUEX2Ei5MYQCEkMKxMJZYR8WtUW6wzKZHlsLThtqYYLadw4S7taoawBK0liylDSkASSoJUeHcqT0ujK8eCzp1x153z73bcfZX5ujts23zHByfNY1fXI6YjGErV0dY3w7am0JeYAVuSdNWZ0F4+iXGU0TbMQDyAfGPpJXENpg7bCeYuQPaQElhE+Iim6rJVwy15Qvl9GVTnW6zWLXIEcoXMZshNjFO7ZLd3KOddBKTVynQQWC2NhR/6q/H6Un7Nak5IbVaqMEi6gMVreh2LcD1NOEIoseIxTsDd1+m5Pkm7rLv2UYfJzc54V70KUKmvTVITk8buBwfeQIpXTGGdYrZeS0MXIoAECpAzjnXWEQ5rgwCQzcuVkBkuXF1SU4o1zlqaphLfiAypBU7ccH59SVQ1FYOUuRhFz0FkFsa4qFu2Ci7PzUarYZon4EWanNElFVNLvrC8owf60v84747ehFkowndR0bsQoa7J0+pqmvtNALPQDMUSapmZ1cIByTopStuLtm3POzi7Y9z0aNXLfHDfRAtMo59BNlMDtSeV1aK6eBcNFyGG/7zBaLCAuzs/5/rvvaVzNenU3kupSFM4JW13T7Xfj16uqyrDuA/p+4OpqOyXNpnhwARlGX2KB0nlq20lSvySg5WfsnE5A3le0hlz0CEF81f76179iXQXG8eDxY5YfWaI/2hafDJW2qBBwVrPZbHj98iXbbs9mvaRxwnHzMWQrhl4EHTI9wXuRyR+GQa5TNaCykq0SykIkoY3NhTOFs47N5oDleoV1DdpUaOvGrpHBk/odloiJHqcgRSlSGy1wWJXl6JUqex7Xkv4yfinwu198olS1C5LKkqgmCPQrD6UkOAh505IAflKYGVvLWkuFOyWp7JNGlZprULc4BS1d19EuJtfxD11Zfd94Nwm6HpS9+x7e3czH/7/20MwU3JLga602JDLpF6m0FQiUVPKNeE8Ej1bgiaJSk+UrhcRfowYt5Mskjt0hxRFOphH8rwKS6D5j82HvjBk/rnX9fuI83x4c6GsHGjAGjMLXui53XdYJ48GXMhcukyt1DjCMRifhCpTKYl3XNHWbiZiIAWs2ClVR8N1oOZQWqyU645CNy9BDVSCSwtXS+VAiV42b5YLj01P+89//7580Pz9tUjOsgBlfLiVihknWdc3BwQZrLCFfr1V6hKNYI8bDfScHjFKIaabWpCBKTAaorJHqXlL0rh87B9pYTDbj8zEITjx3IoP/+J21m8+eUuKxVb5ucuV9vV5zeHTEq9evudruxuSmdCeLtPwctnJzrQ7DMAZqxuVKZqkhqnIwlnUqz2zptqvceSRGjNIs25b1cjUpR6VCuL4u7HDzWj/2HidB2CWJlDl8UNcVkSi8NS/KWcumYbGo0bk6m2bzppUagz2lFN3QS0XXCQ/J+5BhVlLxDRnymjQYZ7BRs1wuWCwWdJfnVLU8r0ebI05P78k61HcnUiAwSVH+iiQqZ1guG5wzeK9xlcX2Yso8BepQgOLvO6vehzQo3RW4XqiT89IIZyuReSWyDpsssnKXQ+c9smoX1IsW0zRSgcewOTri9eu37Hd7iQ30dSfEcvbPle6AawnkvLAhBVbGQD+EidsUQsBpM3IrT05OUEpxdbUdxSFC77k6v+DVDz+wXn0ajumtQzFylPpuf42beHh4xL1795BY4TXbTEFQWgrS1gqvSc6CMBYNtTYslysWi8UYO/V9L4Xsm0VQkGpqSuP3vJdu5dXVFT6E0fB2VX9c+OvBvUcoJx6OzoA3ioPNhqQU292eI6VYtwteKU0P495JEuU7ga0m6sriTEGdiCJwSgkVhYbQti0kKRI5J1zSo+Mj6qbFuhprG5SyaBXRBEIK6BRwBKxKGBXRiN+iSKxnyGy2TCjQ0Gu3+T1oiP+q4xefKNV1jasEehOUJul8aJKx/apAz5UEtCgJKmbqQDEKrCeqSSmkHAQ3K0slmJEN82PTCW8f84Nu/u/7Drr3JUupBFjaoo0FJUGVTorKWKxyJKXQY7gqG18IgcvLS4a+p64rUgyQHahFJEdl+d2I0mCsJmkrSjhRCIwFJS/wFyPQoyAJhVWGymgM0htwxqAyRCmJacNPmrf5/NwMFuadNpkfUd2ZJ8tFElglSQ20zqaoIUFIRCWdTXkdSWhikqBMyPS5lT+7h+UtlPuhlSjFrVcr6V5B7mZqjJp1Qcv9VioTQSVpOD59wNdff/OT5ucfHWOAP7JZ8hrL16S1wlnLZnNAVVX0e4WrHMtaOFgKRYqabt+jovjcGCPKflFBcbNXJOIwELXIyNu2keTTWFRuTSU0fvD0IWIwxGxI+7Gvfz7mz+C4Zoxhl9f1wcGG9fqAs7cXWQlSCMwaRYxhTJKuJUtM6zbGmAMMhTLi8C5/9/r7MmYKPmw2KzTGouua9cGa7XaHtnbiTjB15Mu6kr9ZlBnVe/eXD1kgSiHS7fd0XU9TN/hB/HmGMJBI1FWNXbYCu7MOZy29H1Dajt224L2Qn63CWIW1lRwAmQeJAldVMschCRdTaXySIo+1Fu0c69WS1WpJf3nOYrFitd5weHJK0y5ISFfiroZSRT1SYDg2e91UdUU/9OJ3kztqIaWcUMEIE5/dx0nddCp0lASojJIozTvu5evk9xIGz263o64rqpykFvjjXY3QB2JIVHWD0o6mcfT9gMJyuDlmvXzF+dkl3gtSIPhs/5Cuc0luFtJuIjLkmZW5mLQFZ7DkXDSqqorNZsOjR4+o65qUEhfn51xdXqKSGPe+ff2K7enJJ52nMgTeOkHqxiQvCyotFi0HBwcyV1nBbUqGNMZcN8xVSgp8RZiooEzKmivqw+O/udhTKBQpiUH20A+EIH5wF2fn/Pk//4NFZTlath91Ph49eSYm58ZglMaYwMFmg3OW3fYKnWBzsGaxWGR1XOn2x5jQOuDxaB0JKowJIykLXCWJbWKBqyuJnRbLhtN7p2wOD3FVhTUi5JCSxFXWOFJdcXR8gr/a0rYLJF6VtTeuzRl9pJwh+g6fxbsev/hEabFYUFeVYGrNkM22crCaRqeRcaGUetC8KlYeaBUjRbNezWBqEvbKQZuYWsfldeav9ynGbThpeDdo+XurBtcCIDXBBJRi3Oiqqhrby8REXddUlRsrtuK/RMaum7EaXCreuSufxRoswaexHRwgG6nJ4V85hzU2k2wnTP1c8e+njptJ0m3KZXLtaax41U2DNZaU8dMlEZfGUsp1WoXo8WUDWuR7SUmXpK5b6rodD1KtFTH63MBLIwTKGEPbThLEMXee5P3pUVHuxlWhlManRLVc8/izz3/y/PzjowT08qTNIZxFGGS9PmCxXNDtLoGBqnJUlSOGxL7vGYZOumTGZV5ckGDUKKL32JwbpwxXqKqalK85aZGx7XtPN/T0wyC8g0xq/5jj5n2Yr58QY1670h1T2tIuliyW6/y+BlEoSgKhCuUBkXIDISVRIBNSEpipch2Cx0ZNSloOR+ktSoCjlZD2SVNCbQS22TQt0a85v7iiqZ0UR1CjZLkyeuxwooTXMk+A51C79wnI/KzRB2LvsUrTNC1v93sut1sG74kp4pylahxOO6yyqKSFSK4UwWf+VoLaWazWxGEgqNzzVQivKyS0UVlxM6sJZmddTcIpjakrjjcbVqsV++WS09N7PP3y19RH9/G2wWj7k4s1H2IU3ouyieC9eAS1C9q6YXe1xWoJSL33pAzVLFyvsj5v3sOb++q1DnuGX74DR7+eE7Df7zBGj+fxnfKTYDTibBdZFVBrYhSe53K55PjkhDdvz3h7dYnWwhH1g4fEyMGaB/43hXpGUj6QAZw3zpBJpEYjBbCjoyM2m80Yt/DwIYTIdrvjm2++IaZ4Z95Tkiz6UbxorurnvaeqhOdorePg4ILXr18LHynff5PFCK4J7Sh1LeksrysJU0ammPy3xq6ezpA7QQjJzxvhhgfPfnvFd3/5E0cfufNWNQ3EyD5KkpaUom0b4QNud/iu46BdsFouudruQe2l6Iy4dCdk3vBFnCdhjaWpzdh9rWo3zm/T1JzeP+XBw3s0TYPL3NuU51YZJSJZdcODh48I+45F0+KMla56ilmQRUaJ59L88zxuo1/8Vx6/+ESpaVqqqs4PovAalNI5ik0zKWeVpZ0ZoSXzxSLqYmaEWQkKamoHT0nJje7MJ0yQ4HqSNKqG3ZIclXFb9WvePbnW9laTLHoJsgrJ1DmH6vby4OdEafz7SZRvok4jz6T8rcJHilFUlOKN95ZigiiGc8nYEZ7gnJNqry1Qv9uTw39kvC+we2c+EM5GqaKuVyuss/hMMi33fEqyFToVjhz59xByfEwCvzIuw9RuzrlUiBOMQhZHR0csFosxuZ8fMKJkphhlP5XKMD4LSgLpw9MHP2l+/tFRiOI6CVl37H5kkq1IwhuWKyHBXl2cs++3wv3ShjBE9tsdfT9gnRyU8ojlJD1FhhCyIYUotaXoBBOvDRER+iBDxkJWVNLaUNU1xnx4eNRtXcibFfep8CAdGWsqjHW4qma1lgrkMAzE4MfX8bmTXRKlsbygEoGi/pTXZfSEYEBblCA6xrWiFdmHZFrPrqowTpLTbntFCBHnKrRxYyFpjHpzlShJK2+Eav3YXHyo/c8pg0FRV9KN2O32XOx2hMGjEEiuwSDtRiUwHGvGDr8iFyBCgOx9lIIkWTEFweprm8VjZL5jFHNMkvADdQocLFY8e/qMdduigaeffcbjL39Nc3AEzQKMId5hElC6SSrvB0Ulq6qqa8G5tTbzbsVvpSRH8O55cHPt3sa/mcQNmHVbfN6GFCF7yExn0/tVVj/FCFnqfdEuwLgR+qS0xtUNm8NjNkdveHV2RgyddHZDJGbVXJ3nVxsJbLu+z89lLqwaKcikVLoIongmYwZPzFDy1WrF6ekpq9WKtm2F6+vcCOlfZ5Wzk+PjO5mveSd7hFReKyzmLo+1HB0d8d1333F+fp7PH50LpWL54L0gdeKYdOq8TyW0Fr7uCGk3t8QwKbFcLAhhwA8Dv3r2GScnJ7z64SVvXr3kxXffcHhw8FHnw7gakwI2GmyEGBJt27BaLvnhxQt2VxesNxvqqhIVv9xhiz6MZ0KZPVSrAAEAAElEQVT5KKp/ClH1lesk+5kp6rriwcP7PH3ymPXBmqpucVUt55i1GGfQLp911nGwOeRVuxQYMUgclfJenuZIpxGywt09iXc/fvGJ0qJdUNeNQEuUzmdoAjUFF5CXaCmW5k7FdGjkFxsxyRkYpkpnYdY1Yqq+lc/H732ChOlmcPK+5OE2MurNQ/BagjTnY904OI0xo29ISin7IclGYFQ2jVOI8lEII18AGLkXJSmS3kNu9cUCMwKtMncpc3m0tQL7y6oyxpoxcfuplcrb7s9NjlKBk2ltMEjH8vj4mNVyyTbB0PejIljhOVhl0Fpw6VqbkXCfQiBFqKs6H6bg7CRzLR0iSvtSWuvWcnx8PBJfi1DJ6HGldYmMJ8NMyoEsyVy1WPyk+fmHh1YQ1WxTTvnZS7kblojKsD465PD0Ht++eEEwDW+vLtjuIo21+DBVuVEQVZSNPwmkMUZRM7NVFJ+bYWC/3+MqCfQBos8KU0jn11lD5Ryu+rCJ0s2E+rbvzZ+nktgaO3muHBwccHxyzPbqii670M8LN/KRux2qEKQzXyIxyoZ7H0CHsdJf9jQQLlMpcFSuYrFY0LYtlZX3Y62jbVuszdBarbMqYdnTFHrcOtI7+wV8nIpkioF+v8/Jn84CMp6YgnAVnaOuaoGsxEDfe1SQAkwqohNJgokQPEpXUqwACrRQobIsekn0c+lGS0BXOcvx8RGPHz2i3+1YLJZsNodyxmQlTvUz9qAPMaaqfRzhwMZaFqsl5rXFkahiYLebyPjl3/l+V/b2OWd3fl3zgtf8501WhRPJ8Unp0jkJrAt5vdzHuxrJKWxj0VaRVMLkTls/BJRztJs1R/dOOXjziuFNR6UVwRiCUvgYsSO0N5+FQXq3oFDWobQTi4b8CHg/kFRCq+zFFKMgJZSmrRvWy1VOkhZUlYMU6X3Hm9dv+eGHH6iqivuPH9KuP9H+fWMUDqS1Nos5TPunrLNE3/dY6zg5OWGxWHB2diaoh5nCH5TEOeBDms4tJvsV4elO8VkMkaIAChPPUKlEXVU8efKE3/32d+z3W77+8x/5/X/8P9iP7GWmrUXn8804hx48VV1xuNnw8ptv6Ldb6uMjVu2irApRosv3XhR+PUMnRsUg55MNmhQjNhd5lIL79+/zxRefc3x8jHOOpm2obCXwO2vByr4ds9y4XSlcVbPb7ko1K8e2+X2MVzFWZ69d2/ws+yWMX3yitFqvJQioKvbWgvegovhilKpO/tnIVMW/FnBHgDQSOlMSQrkkDTEHK0U6U02Yf6XHTRT1aRKlnzr+1oPxbtI08XPGA3Os2uavRUl6imO2D4Ew+InLo0SeN82r1eXBnY0xeQK0Mbi6xuSNtDzgokr10ztKNwO82659/Dz/PR8Fu7453LBar/H9MEITbr5eqaDOgxE/wgYmrP6kPJOx/XEYMdopCbHz9PR0rOZVVYWewV6UytW7TNBXCZFn1aLWZVz1yXhz8+5gubXM4T1KoBh1s+Dg8JiqWbC72hGSpRsCKYiimMnXH5HKd0CSpBACMUSUMmOyEVNiv9+LPK1xpAR77xkyKb8kCHVdsVz+/IDjfXCFeWJ965ri+rNUkqblcsnJ8QmvXv5A33Uyj0VKN2Vp7mz4WV5WkkiB7/gZj6l0seZdguLWXjoKdVMLf8W5nJQrXF3RrpYCtVESZM/VJadruD05ujkvH2qE4Dm/OM9JjojFNE0tktdK+FbOWXT+2RgjPgX6oSP5gNXiWF8UBCeiuTAsfUqjhPE8+LfWonRCW8Nms+HJkye0iwXddksC6iYnSUzwqzmH51OPktTGDJFUWlFVjtVqxXK15OzsDBBZ/RADSSucdjMlsnf3w5udpTm0vATA865pkZAnhlyEVCM3rsDu7joQ88mjnewdKRdihBkSiMaiK8fyYMXh4Ybd7oIYPHslRHwRDYi5y63RVuNi5t4mMRJNWpXQIc+nput7iKI4qQWMl3maGx4+fMjh4ZF0+pKIvvz1r3/mxYsXHB0d8/jZE45OjlF35D2llJLrCvHa+nBOVNrquma1WmGtSL+Xrlj0hZsTZmebCOrozFtOhNF7seTWKh8aI186XY/Nuq7DkHj8+An3Tk6pq4rDzQGV0cQQODo8/KjzobUISnml8CkjQyrHwWZDCAOXl+coHvH44UO+/u4l++2ewQx4LZw9jCVExz53eVKMOCNCTElLIrhYiHDDl199wcnxCXVT07YLrGuorSB5jLXSTdJiIp2SRZmEqRq6q0tIwuUySqMiKJPvHYL0KBnU+86yX8L4xSdKTdtQt3KQmTFDf8/N1woKKkVFJv5MGhdyTHHkkShdgpUcDKWUuQ9mPBRKFT2GQEofX2VrDp17X/A/P/BuQgznP/8uVGjqUpSq6bx6mjLaSyuFy2TykNvM1gqhuhwa5aANUdwbU4FDju+RsUOUxuRBoHZFnKPYJCSmn/25HKXb5vMd7L3WYhyX/+ZisaRtW861tM1LoDp7d9cOB5UPZKPlUC3rS43eSROMU/DJAy4HI+v1msPDQ2z2UJq4YllPe3bPymswoxB/yo1PKZWlR6/P3xSE5ip9VXF8fMz64ICLt2+x1hF8pPceFaLAElHlSaQULaxzWG0y/FL+VgiJGD1KBbT2oIR/M3kGxVHFqqo+nurWzWewfG38V82CzBnev65rNpsNh4eH7Hc7uq6jwCNyvYUJ5jJT2Br/M0Fa9TvwqJRhHgGb4SxN3bBYLEAJTKrrOpx1tE0r76+8z1sUqEqgd7OzcDOh+lCjHzrOL86IMYBKNIsWZYrqlaeqXebrCVTXOYtRir7f0/cdMSdKRUpfnLXEvEvk9BMhd8SL2tjIwzCyVk/vnfL06TOcFYW8tmlZLVc0dYOqqjGhvMtOidKgrRIpc5kqXO1Yb1Ycnxyx73Z0/R5XO/GdytccYhoTeJjWzTwpmhfLbsLvrq/5HPylIkIjz2hJlEqx7C7nqcs+avL21aiIO5412rBerzg5PeHq6pyh76n6bIMRI0RPKjBgo6msIiQrHECtUCmSfCDkTqXKnaToPcY54aAYy/HREU8ePeTe6QnLtqHres4vznjx8ju22yuOj095/vnnnJyeiLLsHXl0lXteEuqUJk+kvu8xxowcpaLOVlVVhrbGjBgpRaIMEc2Jk0DZCwliXrSdiqeRNMZV5TmzCk6Ojzk9PUUpxcuXP/Di++9ZHhzw69/87qPOh0G81YxJ2JgIdmDQOkPjHG/fvmG/27E+ecC9kxPevHqF1ZpBabyapORVShAifuggeSrboq2jbhoePHzA559/zv3796UrvFygjcHYCmOcFI6tRWdj24QYFyttOT69z1mGdhYT8izJc33Mzo0ybpMK/688fvGJUtBwcHxI+mORSZ5zcER+MeXAJSlRCQpJuAwqq91Nul0BUszVbU8KCZ1KOgXaWHwIrFarbLSmSIgDs/lECj//SCXzx2BCpesx/7z8G0IABa6upMpj9LhhiphBEunnqkZXit53+CCeFaBGB3KtNTolfOYpFcp/IpGiqMoF78f3aa3guJ1zRJIkY0b4Jtqakdz4UztKN/lZ7/s5+ZlJ1GK5WLBcLsf3GDJkSnxDSsAgv68LPU6lrPwngZ2cFlGiHKJUerhexa3rmsePH3NwcDDrRhSz5BJFT/CoUjeSEp2eQRc+3ZAA/t1k4bqogx6Tg9cvvgffE7pEUhqlPa6qQCV0siSTiw0RYu4ahCESVMK6EtgJNFIpIbhKx87gSZD9mKqq+uDyxLcVGubJUnmm5onHnBRdyOF1XXN4eMjZ27fs93uALH6SSMmKKmSBquYCTZIN7J3gdT5SYjSILGuqXbQ0TUNKicF7dvu9yP9WDll/UmmfJ0k/du3lb3+MiuTF5TkXl2eE6On6PTF6rDUsFo3A77TAqMKQrz3z9ASqGIhRkZL4rsTkJTEwEW0rjFEoY7BKZeneknBOBrVHh0c8ffqMo+Njhq5ju9thrJEqO3ORmzsOLhSgM4fGGHyMaAx107A5POTs/IztfoeNQZLG4Mk1rGvKV/P1O1/b1wpns2u+ud6jljXJuBbyWWImqOldJkquqkg+0A0DJmlERrUoPApEuKpq1psDDtYbLi8uqAYPMUjBJoUs9AFEgdBaVDbvLZL0ch5mwDBWiQmwSgmnLQfrNQ/u3+fJo0e0iwW7qyt+ePWKly9/YAieR48f8fxXv2KxXKKVwBrvbs7UeP+quqGqGyLQDx6tDSF0eO9FlXW9YrPZUDcVPg4EP3mVSZFIVFpL+2iKNWS/SURizCU+FSEJ3I4kxRurNc5ZlouGk9NjUkp8/fXXvHz5knbR8tmzzzi+f//jTkfSIhCjDNoIH1JQAQvWB2u+/+ZrLi7PWR2fcu/0mO++WXL29i1JIdYeIZBCgOBFKMZqnNUYDU1d8fDRA7769a/ZHB6JOFZdY61DG4erK5y2OGtw1kiipLUgb0JE28Th0TFXb16LDUaGZY/7skz2WGFL5Wvwo2fIf9Xxi0+UjLWs1wesVit2V1f4Qcw7lc8PZwk09ORYD+RGQF4+5WduVHBLZQRkzUUE53xN+lTxk4P3nzPeW8l+z8/+I7C7pm05PDxEacN2t8+8BlGz6zMxce6r4awVKEYxXIUxMNTG4EOgG3z2D5hgRXNc/AgVynLvYzXemmscj5/LUbqZLM0TRpir4E2wv7oRyEH5eWOMJH5p3r2cAIRCwhdpdE0JIORglq7jrEPHdP2r1YqnT59e4yeJxHi+P9pk0qwZX7PkTyJiQiYTf5oNsHSUFNcDrPLeUxLfrAI5u3//Pi++/YZhvyP0OrfhDCEmYvLZE0ees+gDw37PsBfc/1Itc7VV50RUDnSVu54hRAY/EFPCWOECNe2HkY+9rXN78/9vJg9KzzqgZlrfJdDYbDYsl0shQ4OYgSpJnovvW5gwKqhEVlCURPu2xCbl33NVhcteKG3bisx8jPhBHOLrZS3PLALjko5vft/M+5OM97bc03K9xRusfP4h9r9+6PO+kri4uODNmzcAHByssc4QCcSgx/eileL88hI/DKAEalZVVe46SW01JCnyDCHKelEGU2Wz1CRQ6vLsPXv2lKdPn1G3Ld2+42q74/7pCW27GO0kxs75HY4IsiasQXuDCoGYRLigXS5YrFbUl5cMIWCsJN4oWYcqvls0u62DdFsiPD9nSpdmPgo0q8pn410nSsenp2y7LnurMaIdlJLCRNDSbazrmuV6TbtYcNV1RD8F9uItlq99xseaQziLh5kfBrE4UKLYudkc8NnTpzx++IDKWVFr+/Zbfnj5irpp+eKLLzg5PRVVPi1r0xo3Chh96pHIZsRK49qGjT3FoCQ5DBGl9mMwbp3h4ZMH/Omvf8T7ge3gUTHlZ0yNIhcqZihnOe/zPhdTGkVZdJbm11qEHSwKi6dSmntHhziV+P2//zsvfviBo5NTvvjqt5w+uE/UH1cdcERpoCRZ0oaqaajamsOjQ77565/Zbq+IwXN6fMzhgQgWhUEKEkEJHN4ag6ortLZUlaWuHUdHG549e5o7SY6maTO8V1M3C8h8ZWeMiBcZg8rmtKhI8hFjHX3X0+33LGLM4lGS2JdC6lzW4WYR5Jc0/jtR0prN5oCDgwNe//DDmPAUgm8ijc7EIplbkiByxzcBBYbHtX+lkp83+gw30EYOYzMjeRZ+Cp948d2Ezv2c15gnKwebDcE/om5aXv7wmv2+E/PF/X4y8Uwpc5QmYnDKPAs9ez1UkYlO6BAEqhBD3iSnh7f4TFR1jc2dI+sctqpGDkUZH7ISMq+Uzl9fa5MrseKUfXh4iHMuQ6Wm352PMcGSz2S9FeicEmiGSMhO8JUQA05Jt+zho4fcv38/85JsTsa1CEBok8VFzHjYjx/MPlTkU46byWf5d0yUCKPk+YMHD/j66Ii3r3+g63rwIpEdtWzpLstkZ5E7ipIeaLl+66QDnCJK50TcWqJS7Ls9+32Hto52seDo6Ij6AxgSzpOBm9d929fhuoxw/ukRjlSei7YVT5KzszOurq4ybDOKoAc2ByyMMBiV58XoQuR/FypXREQKEdo5x3KxlN83ht1+jzaa5Wo1U16aXkdggmY06tS8u7/c7BjOv/ZzR9/3rNZryPwEpRSRxHa3pUk1yci1VzZ7sYTAsm1RKbHdbiX40qLyl2KG/UYgFZPxhHGKOEwdJRECMpwc3+Pzz79kc3hIDFLwWCxXHB6forXA8NSMC3aXQ2eungaMNQQvz5oxBldVoqx4ccG+66iamtSJqI7Bknwct6ibvKQybkKRy7P87roef4iqqrIh6Sm73S6/n7tNKg+Ojqm7nsEHIgLbNUqNkMuqcgyDdJ9XBysWyyXm4kJEeMq5EKVgppUZ4WExSlc7SUsEUsRokyFQIiZzsFzw+KHwV5qq4ocX3/P2zVuutjsWbcPzzz/n9OEDzKhIKb5yWhuqqrmT+Uq5yJZUQhmHUxaSdKit0lSupnaV8B5XC04fnHL/8QN2l1u8HQhIAhSTzHNkFl+MFWdkbmMUg3AlanhWG6yGyigaozEqUTtDGDr++Ic/MAyBo5NTfvu7f+H0wQNsXUui+zGHyYVwJclb0JpoLK5uOTw+oakb4uBJMbA6WPDk2RP6oeeHly+z353s184pYopoDXXbcnJywme/es6TZ59RN60oolo587WxmQslxtq1tVkaXJL6mBLKQLSJatFSLxcM0eNjwMSAosCTSxugPOzTZd31/nUX478TJSOt0KOjQ75tanZXV4ShQJUm6ApKtEDE5CtlYYBUELKCZqC0KmcdBqZKK7MEoHSTJMBJH9vb8m+OnwpHm6vdSXfIQV1zsDkgpMTl1XY0jCumcQXhJRLHAR8HfPT0/UC377IfAtljIYlfS4EgxYCPIfMQSnAvFXiXjQrL36my5K02U8X751zr+/hd88CgwAVBMQQyXlgqznXT0GWolLzm1C2SYDZmWIEkTKpk4yMvSZKkSUQky9fHRNu2fP78Cw4PjwR+kT1uQgyivqPFQHWC4I0pxFgz0ild6wZ8qvH+juU019ZaDg+POLl3n++++ZZzfUZUAaOywqCT7mHynhREEDukqQfsfSCECCZ7FM2VB2Ni13f44DlYCcfr5PQEW39YQ8Lb1t3NoHIMPlGkAr2bQfDE761IOtfUdc1uv8cPw0yNTDo9JWGKWT3LKI0GMTZMU6A772grpUaj5MViwWq9Gs0tya9lrB1VLKUjbq/9/vXrfPeaP1ZV8u2bM+q6QWkJ+EPmjNa1yKuToNt3dGkvc6oUddXQ1C1aGbwX1S4J6DPcRIvqmIqpHAMFgzYquB0dHfLFF19IdddYKqu41Ia6aTk4OBxh1T+3KPWhhrEm80LSNQ5ptJYqJRF1WC65uLigdhUxeLp+kL0mV/Pf4WWOE5NhvLwLwYOpGCTcnckQ2TnH0dERDx8+5LvvvpNnVIsIyV0NrR11a9F57+i6npTUqBSplRRVrXO07SJX9R1qGFCpJMUyVyUOIInoTsxy6wV4kIKntgKVamvHvZNj7h0fo4BXL3/ghx9ecH5+zpMnz/j8i8/ZbI7AunFvV0rMRMWf8G58lAqSUictxQUiFEuMfKEmc06bpmWzOeTx48d888c/U1WGYCAE4SIpJbIZSWdInSrnX+4wKVHWVEqhUkIhMtcqc8Ig0XV7Xr9+w3K14rPPP+c3v/1X7j96hKlquFE8/RjDGwVEdEyYJAq/xjhc03JweMLJyQnHB2sp1hjFZ88/Y7Ve8eLFC968ec3VxTm+64BAZS3tcsn66ISHDx9xfHqPum6k02stxlTZTsPOvCilOGisQGxhDmGMVIuW44f3uOi2HCuwbhJ9kg5qyjEvFFP2m+OXAr/770QpBx8nx8ccHBywvbhk2/ViVplEKCC3k1ApoVXE5GC2VONLN0iT4XdqFnCWf3KgLpr282nPwRGf5hB9X5Dyc+Av1zpKzhK8/H/TCBHcuRsk5gw76PsePwyEJF4lfS8ymCkHbkWlTFtpExcYUhoSw+BxVo2u30oJR6dtpcJrrB3/rsqV7rlx3T86biZE8zGH35VuSEhIMJkE694sWlYHKy4uzkk+YawQwhOi2ibcEJEExWg0WnRDSscMCeCqqhLj4xwUN07IsM+efcZnv3qOdTVJGZLSWR7dIlm4zsT77O+l9dhcR5fDRap4cwjpxx4370W570IKjqOUsfeetm15/vw5f/3Tnzh784b9hSjfqYz9HgaBzonZqsrSvJJY+5iJ+EqjLCStGELE73tCigIvA5qm4v6DexwcHKA/gCnozUr73/P5CGErhQgz8ZTkORKPkvV6zWazEVn9i4upe6RAG4WhzGMQ5bacdIEele0Kb0/ewBS0WmuvGRfL3EqS1LSNJGyxwNhKIHNTKGRWyLjlPt/ci37uoXt2ds7R8TFV8FR1I2s/hpE8XqSZfd/T9T3eB968ejuSyquqxjoJKmJMqCD80VIrS+XZyXYHkrxv+N3vfsfz58+p60ae/ei5uLwEFIvVCmMdUb87N3c1FAatYpaiNjhX44dA1BBUpKlEgGK9XjP0HfvtBcn3aGWwxjAkP+OTCCrAh4GirmhNVkgscPRE9qBS4nGQEiEOpOBRKWG0ommEt1JQBCFGuhBoPrBE/z8ymsWKIXgwHryn0pq+87kjnQRiF8KIZKgXC6q6hX2HMsK1jZALFSVBFYNiH6X4Jc8k1MZSWYPRivunpzx78pQUEy+++46zs7eE4Pn888959vxzFosF2llMXWFsLdLT1ooARCUfdzGkE6GkUDg+yxoVSudsVgQCXFVzcnIixsxXW1JKVJWb+EpKCT03IwYUk0AUOtFUNcF7vBcOmdWyllRGmoQUOVyt+N2//Ru//u2/cHh8TEiSZNlPIKgiXdu8H48Fco/R4iN17/592lqUONGGdt1yfHyPz7/8kt1uy+X5OfvdFcRIU1e0yyV1uxBonYKYBD6elMYYl7255O9UuXgl58fkl1biGOGKB9rlgm/+8pKQufWmoJ0oezRjM+BmzeuXkiTBfydKucoDJycnnJ6ccP7mLd3uipQ0mgwPi9MhqaMiqkBKSvA9qvgrKSF7JoWaZd5jEKCmIKSu6+uSzUWq+RMmStfe289Mkq7B77QRd2dtqKqa5XJJ05QuT67i5I5cygmoNZYQ/WTQq2ak5xzoRUTRLuSg2YcBq6cNQGsth1UzKRiqHMBprbHudgnjnzJ37+sCjPORk6Ui2GCyvOvJyQk/vHzJfr/LUqjS0ZBuh8DIgHyQ5G5IhstZq1GI14tOmU+U+Q7Pnjzlf/2v/8XJyQnGij+QHCYmb5LT+ipXPkk5qHEXLNVddYdVXJiS0nmyUIQMNocbnn72jNcvX4IPEAacMUBEJYMmoa1FOUi2wtuKEAIuE11BEWMiBI8PUaB3cRIJ0c5weu8ey9WKD32O3uxK/tjPlX8FdjIpOVlrsRlWulwuOTg44Gq7Zd/30wGopLsdVZwKFEinKCoRAtFRM1cXG7tRTMWjtm2psrdNMeQu+9f8GVU58R7FJ5SoVZlMvL5tz5mPD3XgaldxcnqP7W7HannAwcGGlCJNU2OMhZioKoFb77ZR1O52PX3nMUaL8tt6RdXm/aqqxqq/91E6ktqQlMIay9HxMV9++QVffvklq81BhlIphj5wdbVjvVxK1Vdfr4bfdaJUJOejEt82ZTQxCMzHaAn8jzcbhv0O33X4YU+KnhTFUDWlub5k7nznD9lzi/hMSZQUSZmpq4KIHEWlRKbYalxlcE7gwlVdY+oKayvQdxeiKGulEysXJntqEiQJvfBlSrGhiL/UdUXlLClAFz06MgaqCoQLlpIIFSiJFHQCnQImKQ5WBxwsF2y351yeX7Db7VguFzx99iX3Hz2kbRZoa7J/mUFbjbUmS9+7schxF8OgiCr3FHPhLSWBxqWsXqutw7pKVEXrmuPjEx4/fsLl2Vu220vZc5UoAjpr8T6Oay2SE87SQVMKHxXGgMuxgM0FjLptuH//AV/95rc8+9VzFgcHBKXQzl3jpn7cMUGLRyGXnLgITz0jX5xF1S7DcxV11dIuVxyfnGZASeZgZSVfHwJKGSkaZzqHzvuSysWw0Z6Gac8dO8dZVEtrw8HhIWdvXrPbd2xOLAUKWqxupr3q3aLWXe9jn3L84hMlkXYVycaTkxNevHjB5cUZAEOBd5XnKYFWSc6B/KWxYjp9Nn1vvpCUvJBzjqZpsDlrL4aNIyTqE41rxPG/UdG97YEovzevgkv1wlK5Gu8CwYNzNcvFkkXbclVXdHuHH3qRzbRSgUwpCJFTyfySnc2dc8S+F9xyhlPFDGsjJdqmzthuqbA3WeZdK0XlalxV5yqow+ip8/RTKknv2yBuwvDKXBgFhtJdChlW8ohv/vo1+90uB6bCFTEGYrAic64leQk5QZ+T+lX+G4P3AnNIipPjI/713/6Nzz77jLnfTlG0KqT1Atu77X3fXBefulI0TxzK/6cCd51t8tZalsslT58940//+Xv63Y7Q50Q6S0IXGGxKYiQaI4SYIARS14/XOHUW8+GiQFnDvfv3efj4IXXbfJDn8X3cpPd9HzWj0c4LELmb5JxjyMmSQFga6kqkdssB6DOBXKeEUtmYMU1BurUWgwRZJbmKmY9ptM6QRCGpqwwNLqbRNsPuYoxo40beFPNEyZiJq6T0uCPeTJg+9Dqr64bN5pCu71FKYHWJgHN1Xg+iZJcSwqBKCp0DcZHll4p/33sGL0IG1lrZY6xwKCOJtm44PDnmy6++lCQpC7U0TUvMKpzaGB48fCg8QdQ1D7e7DjDma4rc4Zju3WQzcH5+RlPXrFdruv2OoY9EH9CUzkjKEE6ZR9lfReZ77MSNLIf8ZOYAugSPKnulVVUlvldtxaJtqJylbqp8HtzNMLYCHVDaoENABysQ+yKygyQAcZYoNXVFZQxJJWJQY+dWEu6ASh6VIjb/vtYKq6G2mmVbsagd+90Vb15viTFydHTE02fPuPfgofBqUFgngkW6ylyUyopBthOouXN31FFSpfMjfMgCK1RKTM1V5loaa/N9d6zWB3z1m19zefaG7XYrsGDK/hBHVUmJsZKcqaQMt0tYlSbvM62oM1/s6dNnPP/iC57+6jl1uyQqjbI2m61PdIFPMR9lvY8xkp6Mmrsum4YDSmkRYtLZDkUJkiSRRAyDBDrhmowUiGlMvJQy43mldVbbu0GLGNEppbisFPXhEd2jx+y7jhAidWUysjh35koTYDyX5tf2yxm/+ERJayP49Rh5/Owpr9+84fL8TJzvu/0o05CCByZOiCzGubxzyigm/U7l+FoAbQxN08pDYOQQLkHhp6CH3KxWz782H7cFMXN1rgIxm19XefiDkq6StZamaVit16xXKy4vLui6jo6IMdIhSiRiSBg0xpsx8LI2K0Rp4ZQM2Zw2BpFTVSiC9yirqa3A/JZLMcF0VYWr62vQu9tgQT9n/m6bo+vdJekWaRRhgLqSCtfp6T26fccF52zDjn7o8u9qki7gIE1CIJzWWpqqFjx89KIY6AfquuJgteHf/sf/4Ne//rUE9vkg0u+55nJo3XZN88D1UyVK43vJa2ni2OR7lKuu5f1IZ7Di5PSUo5MTXr98ye7qkuRFBjpmLoAmyxhrg9JRvHCUEjhH7ppY7XC2ltjNWrqhp2lbPvvVr8SHylqkRfxp5uAm/00pBTrlYFZ4WDp3CG2uGgvUVOS7u6HDD70IMkQxZ0yZOJ5SgqgyLDGOXVxlMt4/iq+QeG4YKudYLhYcHKypqzoXk+T5btoW5yoU846UQs8Teql4wAySN9/b3vcM/dzDV6FwrhKPrb7H+4FEwlnpYJeA1fsoCVMOAKwxuMpmfqMDLVXXvtszDGbcQ7Qx1Nbx4NFDfvPb3/Lo8WOOj48wxuBTEAnxrPxlrXSclJHueuKfq6OUUiJpTdIpe71oUjSkZBmGAaXd2KFYLFqqqibGPnOLIngYghfBCxjPLylz5QSqhMcaosqG2kmR8FlJb0qUCrem/JtCxIB4yd3VPDlHCjpLqWvUoCA5WcoxZZ6RJQVJlFbLJZvVgqszzdD3KJ3olfBLyvrvAR+LHYR0SCprWbaORePw/Y6320uqyvHo8SOePv2M9WYjcDptsHWNrRu0NZjSgasqOfOcw1YGe0eqd6VgPMYIlLxYXSv0OOsQzkvCVhVPnzzhzYtfcXZ2xsuXL0dF3P1+Nz5L1liB1WlQKRBjFESJgtKttc5wfHLMZ8+f8/kXX3B0ckK1WAiyQheZ/uvd7488I5lSkY1bKWqbU3GgvzxnGDx1a7LipkZZ4VSmGR0jpYRRUuyJSYyMLVIELJDXMrQqBs7XqQbv7D1aikX3Hz7im2++4dtvv+Pxs6c07fW0IN0ocJX3M//8v/r4xSdKpbJBSqzWax49ecz52Rnffv3XLPO6IwTBZE+dIihCDrLjZbyx0ddgTlqLp5DwTwDUSIIeVXFI+UHX14KJj3e919uw/+jvzTsO8wC2wHVijFgrgVxMIi9cyMHL5ZK+7yGFyRAuq44lA9lGaaw8WWuxSrorNiWGEPBRWvI2T1ZdO5aLluWipW1rrJGuXWVFBUdrqKy0t/UH3CBvdkBubkYxBqwWjpv4O8Dh4REPHjzg/OwM74PIofvstaEVMWTCq7HYnCRYpdFGkvMUpwrbZrPhf/1v/x/+5//8nxwfH+cgtxoPpYJXLu1+Relccu19zq+nzMunkuQtRQbUjQShfC/Pwfz9GmNZLFbcv3+fP/77f9L3HpUCrnIZ5pMEnhkSYfDCgQuRWmtJDmbrXxtD1rUkpcTRyTFPnzwR6I81KPXpKrPjOgKMMlKMQZTrxEjRoW1Cp4R2FldXBO85WC44bxuIPcN+S6ci2mi6wY+iKCF3Y1OK+BQgRqIGh5OiQwJrBE7W1CINfv/0mMP1Cms1xhlAklSlFEZL9RolHIuUu+7aSHKUtEYZKx/vKQDd9tz83NG0DbayGKcFBaAi0XtCMGgyhLWSIM3FhNKWrbqQXzaFe2TQicyPtITclUwpsmwX3Lv/kN/92//gs+fPWa9XKBJaQ60kgNMkXrz8nqZpaBcLUDJv0WixmJBKCJ9ks3/PKKIMJVEKUn5GW4PF4ZwHFVkerNns91R7y263JYZzVPSQMqdydg1JgY8Ro3IXMTP7J+SFHpOoFLK9AyJ97FxN0zQ0dY3LXJ3tfkcMA1Z/PNPnvzl05nVGoJjtIntM9AFjynknBcHDo0P2V4dcvv6OHR6nDDoOVNmM2DhL1ykG64kh5G6TYtnWnJ4cE2Nkv9+zaBvuP3jAk2dP2WyOCCACJU2Da1pc3YhwhAHnCoyrmpQxzafZv98ZOUCf9nJQyaCyFYCtqlGJVhkj4kVBFA8fPn7E67dv8SFwcX5O13WSsCPS4rpWuLpGpShKr7noIUeEdL9PTk/44ssvef7F52yOjzGuloQsd7xjUqjRWPzjP3/Tn5iKlGYWgxwdHvG230+xjsv3zwl8HpVl6ctIAZ0QgQwlG4nVSaC9zHhFZLPsG12z+f9PZ7yiMprN8QmvX7+e/pTKas/I+XATifMxEAH/zOMXnyhJ+1I6IbZuuP/oEZcXl2x3WyFipkTc72TRpomwX1q/pYKiFCNsgdkiHcnUWqOsEVUmMz0sCWbB+6c5POfByXyx/z0Lv3SPCmSnfG0Ou4lODgVDGOFBi8VCJMK7jqHfj3OnkMMzhITPiZBKwDAgJqh6CphjQoUkUqCNo61rTo5PaBatKLtoSVadNWgNMQYc4iVQfKu0NT/rILltjm52AlISOdSYEj4mKmMJIbJeLPn8+Rd0+57o/4DvegbTESN4JMAXk0swpRsZPYOPkCJWKxZ1w2LZ8qtfPeff/rf/yfHp6eg9gZ66e0pL4CfrMIs1q2nzvq2yfTNZ+SSjJEvvfFllHtssOVeKFDzGWR48fszR6QmXF2f0u63gto2RZCB4Yk6SfO9F+c8YrK2wthBawQcvZsiDZ7lc8tVXX3H/wQORh+bDBO/ve40f76SUm6QxQNQ6e2CZkpFkpSND2zQsKge0DP2Sodux76P0JEsNZ/ayWisRupA3gdYKZRRGg9OKNndWjo82rFYLrDPYyhKTwjiBzRb4XiiQEq2xxuRCkSTmSYuYSFTq1r7cTejnh5jrqpZErmkb6roaoTv7bksIEa0F9qyNo10tZb9yYqiqlaKyuQMd86TlSrCpxMB6fbjhq9/9hi9+/RvqppXvI5LshSd3/vaCvu94+vSZBIRK41MaBVRQhQv4sy/3Jw9dDNrIBZIg3SWAFEMucnk2mw2+k87I6ekpfoichytCHMbnU2cVN/J5cK2DrVWpgwj/UpRicm1RZYltkYtumkYg6dbSNDW77ZboA9bcdcVaoZRFmywUUICEBe6LnO82VSyWS44PD3m7XrLOnJOzt28ZQsj7ssYlgzfggyIETdOIzP+yaVBKoNTHJ8ccHB7StMtsbWHRrsZUFdZVuLrFVjXOJFwl6q7OuZEj/LHV3P7W0MZkwSsgBlRSBGRfHrx8hBhzd7wiDF3u2GrpktXCDez7nr7rUNqMHeIq83IvtltR8dRi6H567x6//Zff8dmvnouAiqvR1kIp2OT9U2mDshMc+GMOpaSDWjCIKh/A2kwdJZ3FJ0Swx4q1ibMoLd2vpMgCtVkLN4HW1+H+JYGZx3X2hozy+wpSCdmnj45PONgc0jY1PnimM+jGv7/Q8YtPlNDCaYleTAcPNoc8+ewZ/dBLAB9F5UbrrDQWPOQkqaiIRTUlCUUpaw67K2ICrm44WK+pm+Z6omQEs/spx0+pBsyD6JuJ0jxZ0tngTEeTpVPlMNhut/R9z257KQFXeS8xTRtokIq394EUk4gT5M6TyH+CM4ZF03B8dMT9+/exlWO73UJK1JXLcsAGMfjLmOkQqJoJRvShx80K+c35Aqkq3r93n+A9u8tLLt6+zlW1kL1nkAMjQ9BikMqjUmKM3NQ1TV1z/8F9vvzqS46OjiYu0tihK1LEM6jP+F6m/e5TdY1+bIz3n3eTzTiqTUoCqNGQEkY50uA5vf+A519+ztnZG87fJPr9TmRYc/XQayVk7KQYPCidMA6slS6vlImTQI4UPHj8iK+++jWrgw3GOEkyZjL/H20Oblk3EoBNSYiKBcKRg9N80KaqwqRI0zT42HNyfCzKkW/OJWEJkRiGDFeVeda5A6KU8LaIOfhLwrdQCRZty3q1os6y2aSS/IjwyBA8PkWE/0QOziaxlgmC9y6h+GOOqqoJWYXMOYf3AZu5G94PeB/Z7zsSg3Q7tMK5GuUcGoHgCWE/G4LGsscbDjcbvvrqt/zud/9Ku1hKcqgnTmVRd3v79i1123By7wQQxcuheMfN7vldQlZM3qsTBdKZSEa4CUprbOXo9gNN04wB+P3Te/g+EoaEUnvhteVOrPfib1c6s+Ua5X8Yix1zBIZSCpvNWtumpW3aDH3UHKyW7K4u0UTcXXVHIPNDcqKX+VXWSuc6OifqmpmPpqPIhDeLBcuDQ3SCw+NDzs7ecnFxIUUb7wlVRfABrQrHsMbYmsuu5/T0hNPTU9YHB1hXC3TVOlxVY+saU9W4qqGqLFolrHXCTbK1eOWgR4junYyUff+ApHQ2N81c7BhIUWXel5Xk01oxMK4a2sWKzeEx6zdnYvDsPcoaKgSK6YwlBLF+8DnRSipxcnTE8y9EUOXpZ59xsDkU1I42YC1a2xH+qoogRy5WfOrg/yb0NqVEt+8mcYZsCC8xlAhzy95cxCwUIU6xVkmgSsfqeudqUrgrf/u2oY0VX0rAuUm9dyoJqE8+T/+M4xefKGlrJJAMsvCMsxyd3COmyPnVJX3fE3yg1yL3mUKGL8VJUSqp7HWSK/vFnLBwLkoA22azsNVyNQYSc1WyT3K9WnNbNfs2cv/NZOpm92n+WuXhtVZECZy1pBSIPlDXtahzXV1xdXVFXdejGaueB1JaoaIiRiFyhhAwOuUukZinhpjEc+Nww6OH9yVZ0FqkZpXKQZLF5g3ROYc2ikgxp/tpJM7bAtrbxhjsM8ESY5xU8Oq64vTkmIf37/HqxXd0V+dcdFekKNWnEhBrrbAqkXJ2WFlF5SybzQFPnzzhV599hq3cRJ43k5BDCainYEWN7+l97/+9OOZPOOYdOaWyX0vpJkqLUNaItSwP1jz/9Ve8ePmCvt+LRKxKVNaKrPrgUUpnhcpAzJU9YxQg8Mx2scC4irpd8i//8q88evxEsOEqO5l/BHnwHxvXhTQEkouaFyJUFi+RbmGyFh1dFhzQHByIVPhu1zEMQSBSeAlYcsFA1JeE95SII+vaGDtCRBfLFW27yCqBAlkx2cgy1B0+RJHndxJsMx7SU6d8JBGr63DPjzl2+47drqOqWg4PT2jaZV46GrwkxqKilZXYSOyHXtzuq5pSZy4dF+ek+9wsFnz566/4ze9+y2q1JqoMNTYKUsD7wKheGSMPHz5gsViO4jMmq5SNz+EdBx4j/FRpjE7EmWxwsgadNEMv97CqKqwRDujDBw/pO0+MrwkxEJVw3lTIr6fVyI8oj20qwVwqvEGd+RqGqrJUVT1aOVSVG20lbD4/9B1CFK3WWbCiQM3lzDbWoa3HxIgOQTqtMaKtoWpaXLMUIYb7Dzk8vcd+v0Oj6LodKibiIOuvso79bsfrs3MOmhWnD55wPOO1GWvQVjzBTFVTVTUud4+snavcuVygLQWyu0kuVU5A5o3ssdhjHbpV3Lt3n2bRYpsKnxIehasr7j98iKtr1us133zzNW/fvmG/27O7vGS73aJROGe5ODvj/Pycpmm5d/8+n3/1Jb/7l3/j3v37GcYvnRmlxRajJG7z90gqIgUff8jyL0x3SUAKR6luGrm3xgnnbDzH9TiX44yWdZjPhFHcKc7gyyVhUtf32vfuNyorFBqHViKUkTK0P6ncBRtxP7/s8YtPlFAiOa2Mke4QEVM5jk9O+erLL8UDIEUuzzV935FCVnmKcYTaFQGCkJOjQK7OqglWpzOO9uj4iNV6RZFo1SOO/9MdoLfhS98Hw7qZVP2YMt7UVZJOUkyBYIMcIHXFYrGgqWsq5/DOQRIQkNGF26UpinfjE5/fixy0mso61usDTk9OOT09ze1rzXK9lkpKbs0rraTiln0BtNLjBvQx53kM9GU3E+vFvHE5pfAKVosFD+4f8/reEXF3hk0d+72nGyKhdCyjQmvAgFKatna0bc2TRw/5/PNfCS8pY73HBMmYLMmkx8qUUuUAnU6G90Ev/9nGzeRU5cirbVuSH7h//wH/8q//wtmb1wzdHgNYpVAJYpVG0ZWkBNde1IZAZWJxzWK14rPnn/PVV78WxaHCUzGWD9FRum2O3yeUcvP3Sg5Sgg1jDSZJ90aFSDSyxorx6Wq14iR4zs4uuLzaErw43CdtiEmqhtbocf8qXWGjNJUxWCOB68H6QPxgUGSyD8Y41qs1y6rOZoaiXjUpUk0y5vPkfd7F/Njj4GCDdbIfnJ7eZ7M54urqEqUUdWMxfoCuz/YCQUx6fS9dRRQhJQjFRFyEWA43B3z129/wL//6r9y7fx+lNE3diApnDOP92e/3XFycYZ3j3r37EkwbkbQXw+zZfeVHgpdPOIqRZDQzyWCjCd5jnUOROFivubw4Y+gGTk9OiEGq4CF6kooid62kS+lDEP8uRfaPKbzbTPIvf1eLiFHdZMiY0llhUIphNu/hXdfd6f6klMrWuVC6YKBJSfigKU3zJr40kapucVVL123FIiMboFfOUVcPRL0saWIIXJydc355yRASn33+jM3xCU2bn7vyDFWWqq5FYbIYtzuHraSbZHMXd77P3NWcaa0zjD5kw+BJFhsUThuOjAFrCERR/1OG5BNV03L/Qc1qteLx0yfsd3uC97x59ZrXP/zALhet32Sj2sPjY778zW+59+gh9+8/pF0shAOXBK6ms52BUvk8VBmarz9dMVBDFtUpEPKIxDdC1bBWkmER1ZnObUC23uxVpjKTFqUy11JioQSgJxsNyMUIdaOT9CPXqrNaXkohc5LUtR9Xs3//mWOFjz1+8YnSaCqpDMYISVUBpl3w5Nln9P1ABL7X33J5eYHvB7Q2pNCjYfR+UAp0iAQvVVrxK0nif5MXr7Kaqm2o6moUcygB7KcMKODnbxa3VcpHrGyGB4nxa1G7qUZRh9ViCSmKqmASTLzoXUOvBqLyKBTOTuZnRY746PCA+/fvcXS8YblcghJ4y0bBdrvn6upKSJGVw1W52m4Mrq6kav4zIGfz7tvfGqlATrIst85qWEYrTGWprUHcxD1tpalMhQiW+XzoSXAvJW5D21SsVwuePnnE40ePxH3dCfZ6XsW/+ZHfeX7v73YS7zJgmydCP64gOH1NGwneA7BaLfn88y959fIl/X7H5Zu3k3gKk+y1yp2YMg+SPEGIkeOTE776za85OhYydWVlTkOSTubHvs7y/Xc+LzQZLcaxFpGIDTFz7IwRP5FcqKnrmspZjg+PuLy35e3ZOTFsSVhsigQvSaZzEjBEDwRQtR4hPMZYNgcHrNcblNJ4H1AOCMKdq6oa29SkGOVZMnqWqN34mHUxb7vGjzG+/PLXoBS7/ZbHT5/yw5vX/OUvf2G72wpaQGkcGmsjMUS87djv0kiER2UFQCPy66v1ii+/+g3/9m//k/sPHohhKBkWmoMVYxQkw/5qS98PrFZrqroZuacx38M022/vuqsksJxSBBBPo6JASkh4RKJZPF5Eia7f71BKce/+Pbq+o3rhePnqlSRHGW4tfBKdYcRjO4kC+40ZflfN9mUAVznW6zVV1WCdBNKr9Zph8LfRFz/5KLfquryyxaVIjE6QD2Xda0PbtgzDnsuLS1arFU3djJLn3kun9+L8nB/evgVt+Oq3v2FzeoqrGjBa4Ky5Y2TyWWZtLWeac2OiJEpw0z5/98l3ysn3FGyP6AYS0XuMMTMj9QzT15roBxLQLpcsFgtCLmTcP73H8MUXvH39A9/89WtWyyXr1YoHjx5z/OAh1XJJVVeAHoup6JlnUTHBzfGd1mpMRj72fGXtWmJhZCswOoKKJBXwQ8e+72S+dH5vuetK5veVIvHImc3x6vj0qvK9fM4oOR/T2Akt8eW4iMuNya9QCnJZony0whEevlZirpwQbuvNcfdr7tOM/06UVKL4rwAjZyHGSNMs+PyLL2kXS5rFkq+//przt2/x2hCGJCTEGEi9EO2FvDqgiBgtVbaqbQTfrwzNosHV1dhmtZWdbb6fdsH9owv8xzpJ859RapKl9CWIshZXiUHmer1mODlhuVzw+tUPXFxcCGQPjXIKFWGICaMEgmGsG2F+y9WaR48fcXx6QtNUGGfRWtG2C6pmQYivuLy8YrFcsT6oqNo2u5XX1FUr2GUpKf3subut03Y9uM+SoCU/UYwbeIqJvtuxuzon+Z7WQlAKT0JnCEqMgX7oCLmqb0zC6MiyrVmvFlJ9MkLun8MJSxB2ayKk/vk2tpsJ0W1KaOVnEqATDCU4Q7HZbPj1V7/m+6+/JvYD/X4v/klJFAV9FK5bUol+6HGVm/g01nBYHNLbliGrMQ7B58P+w26Pfw9mfH69o9KWKpj0WQKsJbjFDxijWSwWVFXDYmF4+DBwdn6ONW/Y952o3nkPxKz8B8l7qYDnwEtrS103nN67x3q1RmsRcFBjVynDdnPHV+kJaickZDt2123pcMrV/F2P24eoVrrKEYGlXfPFl18Rc6z+9dff0A89Jiu1JRWIOqBVIuT5K10lrTWL5ZKj42M+//JL/uVf/o3j0xPpvlG4PQpnHKRAyj45m82GxWJBu2iEKxUFdqfMu6a7dz20Ev5D0kBmQmiS+KUnebbI3UDjpFN5ETyD79hsjnn+/Dmr1Uqgvy9ecLXbwl4CsxRCtm+Y8SAz78EqgUZXdSPPuRG46IMHDzi9d492saDEggebDRdnZ2Lye0dj2uevP7NaKTCGlMykWGYtwXuquube8QkGCMNACkHU/LJKJCpxdn7OixcvGWLiwZMnPHn6jH6EVclz5Srh1ukMvxPYnZiU6tzJLR3c+Xu723UmXY+itlnWfTm/fYzCA1SZQ4MippJo23wuy76nUVQoKmPZXl1KEaupeX76OQ8fPqJdrqCqwdpx3rQ2Y6dlfg4qJabBGjHCLknLx58N6RwV4YiUE7mQ4XTeD7SLxaSyqqeOPLNzsTxHKXca5+OmKEXKf6hA92CaiyKIVL42vqnr4MT8/ekVY4gklb2duL7G/pn2tY85fvGJkhoPsTQH1srXjGaxWvH02WcsV2uOjk/40x//xJtX37O/hG4nB4sQWzVOifpTMgYTEz4Ij6ldLFiuNzx+/pzTe/dyYKInIzruZsH9HOjVTZnwwsdKmdBpjJ34Ss6RvMfbAa017WLBZnNAXTm0Ulxut8QI0TqcMfRWqmWLxVLMQoGmbTk5vcfRyQmLpcgWQxT4jzEs12uatqXvB9rVkqptcVU1SkLHfADP29Q/Z65u6wJcT5Y0WkdCzJ2QbAKKUQy9p+t26BTZrJbEQbG93KNCROmI1YHeD4S+IyRQ2eRTOgpCGjcmyzDPDsy5gMPNkX22r733f0bo3Y8loaVDYbRIVIeswLY53HD64D7bq0suUmTwA6IjKAeVc+KNUyAgxjrqtmW9OWR1cJAdz+WgLRU86z6MwMrNJLBc0/z7ULhss6BwpCpFgUUk6ZJprbDW0A9S8e+8p+t64XW4GpRivd7w+fMvaNvvefPmDbvdDj90cijGQEoRVblc3a+wVoLXo+Nj7j94QNO2o08LWgsMS+WKqDKjJ5GztWDsnb0mT2yz6mTpJMw7me+7zx9iKGNEoEIpbFXx+Ze/xlUN9eL/4puvv+bi/AwXI0lDDNk2wGhIAqN2rqJpF3z2/DlfffUVD588Zr3eYKwlpOvPTjHn1UagMFX2mCIrNUrXUo1V2puB7F1DyoCR06A16KQzJ1B4nUkrfN+hFKzXa3zfsdvvMVZzcLjGVIaqdRwdb/j22+/4/vvv8c7S7fcM/YDVijqvm+A9MXkSAYVA9aracXBwwNNnv+LR48esDw7E5yaJQly7XHFxfkk/hL9xNR9znuRjKsLn51brLCFvsSlRVRHvRXiHvh/Fi0IMklBaR9f1dH3Pdrvl9Zu3JBTPnj/n6OSEPoFxbkzUjcldJOfQRo/eaWaWJJXO3TxQvutkKc7OFzML6JOCkOSsTkxdEE3h85bkU0w/Qgw0lcX3HT4M/OXPf+Tq8pKHjx5y/9EjTNWQlECkr3OhJnlyrUsna3YmKlHhnM7IjztP496feXoFKVLOGO8DBwcHwo+c2cqUJGdKzCdLmfQPvOe/lUTL+7nxs9PBQwhSCFJKoe0vt5sE/50ojdn6XMEtZt1/7z0KCbROT09ZLBYcHBzw8vsTvvnLH0WaeL9j6Hp0CuKxmBXIQoiYCAeHh5zcu8eDR494+PQzDo8Or5Hu7yJRulkR+KmH9vsqC0orVNKYIIRz730+AHJFAjg4OGC1XLBsWt68fcvZxSVh8Ax9T9/7LHxQo4xg14+OTzg+PcHVNTZ3koxx4p1iHVVds1gu8SFSNy3O1ZiM69bOyub8M4OTvzfIKZsyKLSeTE5TvueDdtSLFYen99idabrLSPQRrZNg/o0hGU/QiKwxUFvH0dEJq9UGbWts1eK5XjUb+SLXDoNcdcrVzH+mCuTN5PJvfV8rlWEu0k3yCERlvdnw29/9CylGfvj+e96+fsN+e4nZGqIXjyVywtQulrSLFccnJzx+8pRfPf+c5eoAMhnfaSHfxyzWchfzITj2zN3N91WT0IgxrLWWaCxDPzBkNa12uaKqa2KEtjXcu29pFyuODt9wdv6Wq/O37Hc7/NBLYmAtdVVRNw2LxZLV6oDV+oDl6gBT5eeuqjCVk+fNirlj8ecwVqR9XQ7orLvOWZLxjz1vP3ctTgGRJE2tc3z2/DntcsFf/vyAP/7+P/l/2fvzINuytK4f/qy19nSmPDne+dYdauyq7q4uumnoBoTfD+2QFyXCIcJZcUANMRoMBnGKaEOFHwgqhoEigaCooeGE8Rq+vuArYEM30E13VXd1TXce8+aceaY9reH9Y+198uS5easT6k5Y+VRkZd4zrv3sNTzD9/k+66tr6CLz/bXKgkbU8LWLStGZmeX8U0/y9DPPsrC4RJT4Piy2YlOsyWt8sMX/jMkL6qELxhk4UWWREXcHLx6HdQfgKgIdIX3fLiVVVdMBVnvGxCSJaTUaDAYDejs9ZudnabWaJEnM/Pw8s7OzHD16hJXlOwx6fYbDIRjre90YS641caOBUIIgjOjOzjE7P8/swiILC0u0Ox2CKAIBEg9fa7cUo05nt6HtI9FTHVnf3St3dbd7w631TIvWGEQYopX01NZFgZQwHA7J85zeYICUivbMDLNzC7TabWQQjut4RI3ACMNxTWINtVNh5OtvZU0A5bMj00vskRqv+9gD4/0bEEHljLu6J1X1WldByVwNi/a1y0WWcvvmdbLBgIWFeY4dO0ZjZoYCiVChJ6Jxk/Ojdvwn4Yh1OcBk9u3hQO92A6ZVGxqxC8E1RiMEzM/PVygHT+o1eebssanq/x9wzPfab+6Gs0++qPqf85B1rUtfr1jB0a2wTNoNByG3+j9F3vWO0tjIFLs9W+rH4jhGlxpbGfoeRx2xMN/l+NEltjc3GPZ69HvbpOkQU+aUhe8xEQQhSavDkaPHWFg6yuzCPK2Z7pi+uT5067T0w5pw+xnIB3GW9ov0Ty++3aySrfD7CltRX/v3eOcH06TRaBCFAc0kYW5ujl5vQDoakaUZWlsPW5GCKGnQarXpzHSJGsm4AZtUgiiOSJKmx3IHIUhBHMZEsW9sJyr2GylDbwCId+4ofTlyi92I8yTBZlWMKQXOScK4wenzT9FpN9hevUlvdZn+To9+L2WUp1gpCGyDuNNCqYDZ2UXm549w5vwzHD99BhXFFKVBReH4uNmN3u/emz1zatJxmrp3k+N+mDIZnKh/300RvndzD8KaocsQhAppQSYNzp0/x+zMDFcvX+bO7Vusr66SjobosvANBqUgjGLanQ5LS0d9JPvUqd2u90IRhgqE3Y2p3Yeo/29+ne2NYHtbu3aU/H9K+oae1lqM9kCOZqtFGCW+rgNBHPvI9Ey7Q5Yvkg4GpOmQLB1htM/s+t41DZJGgyhuVIx/AWEQIWOfIVJR6AujleeEC4RvZFzDacOKiltVhcmTNYC+Dube9Tj3e875qHLFCuUc2non+cTJk8wvLHDqxHFWV+7Q29piNOhTFgUmT0kaDRrNBvMLSzxx7izz84vYKsNXGzt1wfxur6DKUWJyrbk9wQhXO0lyb+T/QVz7b0YUlcHGLjudlB6OF4QeQiakJ1XQVXuCmjSn39+m1WkSJwlxHHrGwDDgxLGjPHnmDIPBgP7ODtkwxWof+MryFGM1Kgxpd9oeGbB4hGarg5A+K1AbiCoMCJRHZsx059BaPzI91QGLyezDmOa8OsOttYRBjIsE2KqJLo48HbK5WdDf6WGM8XW0MzPMdLu0u7OoMKoYPX1/xbptRV27FQRh1UQ8GJ9lNavu7t7Nbxkh8SDlLidp0lna77XGjIN5UkqslGhdMhwOWV5epttp88QTT9CamfFwfhH4WhzlofrVJ+3RzXR97l3Bw4eiMzd2tMd6wP/OshxrbZVxDKqWD34eWCYC6FOf+FsZ934B7ck5VH+RmPC6hRRVi5Vd+/R+jOW3rbh3uRhj3Hd913e5kydPupMnT7pv+IZvcCdPnnRZlt312r/yV/6K+0t/6S992c/8q3/1r7qv//qv3/e5X/iFX3CAS9P0nQ79ocuhrg4uh7o6uBzq6uByqKuDy6GuDiaHejq4HOrq4HKoqy8vP/VTP+W++Zu/2f3JP/kn3Q/+4A++7Wu/+7u/+x1/3x/4A3/gHX/Gu1EefdfJRyz/4l/8C378x3+cX/zFX+TmzZt867d+K7du3cI5x4/92I9x4sQJTp06xWc/+1k2NzfZ2Njg6tWrCCH43b/7dzM3N8dP/dRPURQFH/vYxzh//jy/8Au/AIAxhj/1p/4U586d4/nnn+eTn/zknu/+M3/mz3D+/HnOnz/Pf//v//1RXP5vSg51dXA51NXB5VBXB5dDXR1cDnV1MDnU08HlUFcHl0NdHUz+4l/8i/zLf/kv+YEf+AG+93u/l2/91m9lc3OTf/tv/y1//s//eb7ru76LPM+5cuUKAN/yLd/C3/7bf5vf//t/P//0n/5TPv7xj/ODP/iDAPydv/N3+I7v+A5+4Ad+AIB/9a/+FX/hL/wFvvM7vxOtNevr6/zNv/k3+T2/5/dw+/Ztfvqnf5r/9t/+GwB/+A//YYqi4I/8kT/C93zP9/CzP/uzj0Qfj6O86x2lz3/+8zz//PM89dRTAJw5cwbwC/HjH/84P/ZjP8b169d5/vnn73rvt3/7t/PH//gf59/9u3/Hz/3cz/HJT36SV155haeffhqAn//5n+ff/Jt/g3OOjY0N/sk/+Sd73h8EAWVZsrW1xY/92I894Ct953Koq4PLoa4OLoe6Orgc6urgcqirg8mhng4uh7o6uBzq6mDyEz/xE3zbt30b//Jf/kustZRlyf/8n/+TS5cu8f73v5/v/M7v9CULlRhj+Bt/42/wp/7Un6IsS/7xP/7HfOYznxm3w5iZmeE//+f/DMB/+S//hR//8R/nH/2jfzRuUvx3/+7f5c/9uT/HL/3SL901ljzPGQ6HfNM3fRO/5/f8noemg8dd3vWO0ksvvcRrr73G5cuXAbh27dqe59+uR8HTTz9Nq9Uiz/PxY9P1H3Ec87nPfY6LFy/y1//6Xx+/bm1tjZ/4iZ/g3//7f8+3fMu3MBgM7vu13W851NXB5VBXB5dDXR1cDnV1cDnU1cHkUE8Hl0NdHVwOdXUw+bZv+zZ+4id+gp/8yZ/kh3/4h/nYxz7GaDTib/2tv8XXfd3X8T3f8z1cuHBh/PpGozHunTczMzN+/POf/zxCCP7O3/k7tNvtfb+r2+0CkCQJeZ77OvyqDnA4HNLpdPiZn/kZNjY2+Mt/+S8/wKv+7SXvejKHP/Nn/gxvvPEGX/d1X4dzbhz1UErxD//hP+Qv/sW/iBCC//pf/+vbfs7HPvYxvuZrvoYXXniBxcVFOp0OH/vYx/h9v+/38Z73vAelFD/0Qz/EqVOnAFhcXORjH/sYf+gP/SHOnj370Bm2fityqKuDy6GuDi6Hujq4HOrq4HKoq4PJoZ4OLoe6Orgc6uo3J88//zx/7+/9PV5//XV+5+/8nfzzf/7PuXDhAlJKFhYWvuz7n3rqKV555RV++Id/mLW1NcDD9L7927+dVqvF93//99/1nq//+q/ne7/3e7ly5Qrb29ssLy/z/d///SileOGFF+77Nf52FeHcY9ZI5VAO5VAO5VAO5VAO5VAO5VAO5RHLux56dyiHciiHciiHciiHciiHciiHMi2HjtI7FCEE/+N//I97Pv+t3/qt/OE//If3fe6nf/qnOXbs2IMa2mMnh7o6uBzq6uByqKuDy6GuDi6HujqYHOrp4HKoq4PLoa7gD/7BP3jXY4cgsIcv70pH6ad/+qfpdrt84zd+I8ePH+cHf/AHx4vqq7/6q/nEJz7BL/7iLyKE4Pf+3t/L3NwcP/dzP8fy8jLf8A3fwLFjx/ijf/SP8r3f+70A/Ik/8Sf4gR/4Ab7hG76B7/u+7+ONN95ACMHVq1fH33n9+nVefPFFzpw5w9d+7deys7PD937v97K2tsapU6d48803+Yqv+ArOnj3LBz7wgT3vfZRyqKuDy6GuDi6Hujq4HOrq4HKoq4PJoZ4OLoe6Orgc6uqdS00L/mf/7J/lS1/6Ep/4xCe4efMmL7zwAv/P//P/8IUvfIHv/M7v5Du+4zv4m3/zbwLwvve9jx/5kR/hj/7RP0qapnziE5/g1VdfBRg7k7XT9c/+2T/jF3/xF/mRH/kRPv7xj/O3/tbfejQX+ttI3pWOEkBRFPzsz/4s3/iN38jf//t//56v+/7v/36+9mu/lv/0n/4TP/qjP8pwOOTmzZv8+I//OD/0Qz8EwM/8zM/w1/7aX3vb78vznCRJsNbya7/2a/z8z/88P/RDP8TS0hI3b95kcXGRbreL1po333yT//gf/+N9vd53Ioe6Orgc6urgcqirg8uhrg4uh7o6mBzq6eByqKuDy6Gu3pnUtOCf+MQneOGFF/jEJz7BqVOnOHHiBN/3fd/Hpz71KdI0ZW5ujsuXL1MUBadOneK7vuu7+MhHPsLLL798oO+5evUqH/rQh/j4xz/+YC/o/wB51zpKsEs3ubm5SZ7nGGNYWVnZ85p70VTW1JZSyjG9YhRFZFnG8vLyXd/1sz/7s/R6Pb70pS8RxzGDwQCl1Pi9/+t//S8++9nP8tZbb3HixInHjtLyUFcHl0NdHVwOdXVwOdTVweVQVweTQz0dXA51dXA51NVvXSZpwY0x48dram9rLd/8zd/MJz7xCf7tv/23RFFEq9UCIAzDPbTfzjnSNAV26diHwyEAP/qjP8qzzz7Ln/7Tf5per/cwL/G3nbxrHaUoivh9v+/38fM///N88pOfpNvt8tGPfpSiKO75no9//OMkScKJEyf4tm/7NgC+6Zu+iT/2x/4YP/mTP8kf+kN/iJ/5mZ8Zd0melN/1u34XW1tbfMu3fMt4Un/lV34lSimOHj3Khz/8YZaWlvjoRz9KEDxerO2Hujq4HOrq4HKoq4PLoa4OLoe6Opgc6ungcqirg8uhrt6Z/PN//s/51//6XyOl5PTp03z3d383N27cGD//x//4H+c//If/wPd8z/fwHd/xHft+xjd90zfxj//xP+Yf/IN/MK5pOnnyJD/8wz/MJz/5SQB+6Id+iP/wH/4D8/PzNJvNB39hv43lXUkP/tM//dN83/d9H3fu3HnUQ3ns5VBXB5dDXR1cDnV1cDnU1cHlUFcHk0M9HVwOdXVwOdTVofyfKO9KR+lQDuVQDuVQDuVQDuVQDuVQDuXt5PHPQ94n+fVf+/SefwshAE+16JxDANIJnAMDWAHgUALQJVfeeouNjU2e+4oP02y1kU4TS4fWOZ/9jc9x+dp1ftfv/n/R6XYJpECK8TcBYvx9AM4KEHaM491vXEIImHj+fe978b7o4fUvvTZOxU76yNbaPbjeUpcYpzHGsrG+yeb6BqUumel2WFycJwwVl69cYm1tha/84FfTbnX8lYoazylwwmGdQKoAIVWl593vnL72ycfqsdU62k9X+71+v8/do9NKnnn2PQfU2NvLZ379V/f8ez/dCkAi9n1uUqwVOBwWw87ONssrd1hfX2M4GmJx7Gxv8fx7XuCJk6dJkgSlFGurK7zy8it89CMfZX5uAeEkxjmsMP5mTF335N/SOnDw1b/jd9wXXdxL/sf/+7+wtrZGGEUsLS7SaDQJw8DfUymxSBx7dWet3dWTM+AsO9vb/OqnP4WUAV/7O74eFUaM0pQsH4FzCGf59V/7VbI04/kX3kdnpsvc7CzNuEkQBoBFSQnVZxutGYyGDNIRozSl0+4wOzdH0mwhpUIphbV2rLdJ3X3wQx/+LevjN37tV9DWglBIKf11OoFwDnA4wDg/xvp7J3XinMM6/zrhHFiHNYYLb71BFMecPXuWII4w1iKlAgM6L3j9jVeR0vHC8+9FyghHAMIAbs8aq7HszjmQfsXeaw7t2dcm1uy9XldfixDiHekQ4NO//P/BGkeapeRFwWiYsrPTp9SOmW6Xubl5wjDyeziO0mjSLOPipYu88cYbhEFIqAJ2trY4dfwk7XaTmW6HZ597D0mzhZDK/wivj0BU40eAlHuuab+/p6+9vu79dPO+93/gHeniIPIrv/y/x39LBFRzCuf3AWMNpS4YDAZsbW2R5zllWWKtpdlssrCwQGemgwoC/K6G/y3qzzI4ZzG6pCxLPvWpX6HdbvGhD32IKGkgkDgEUijcxJyb1EM9Pyb/PS0f/Zqve5Bqelv5tV/5ZWD/fX5SrK3HD+DGrzOm3F0DUtAfDvjMZ36dxcUjvPDC8zjjkFL6uZqmvPHGGzz55FPMLyyO1yWArPTyNV/7YPfuLyevvPy58Z60ny7qOT+pr2m7w1jQ1rKzs82nf+VX+NKrX2Q0GJBEIdloRLvdpj0zV61FQRCFdLuzzC3M0261sM4RBAEznQ7dmRkazZZ/nVJIKVCBRCm/107XQE3OsXe6H70T+eIXXgbutskmZVLP0/qUUpJlGb1ej8FgwGiUcvv2bS5evMgHXnyR00+cYnamgy41n//cbzAzM8N73/tehJAoFY5tTYfDCf/ZH/noo51bj5O8axylycN/3wkHIMAJyfgR5x0eB8RRzKULF1g4eZYz5xoIHGmWsb62wpdee42jx44ThiE4hzEWJ/YuxN0FIKZ+c9dGsvf191mE/2ZvaDmoDC5wGKMRArZ3dnjjjdfI8xxnLTdv3GJlZQWlJM1Gg8XFOWZnO2xsrqN1yWuvfoGjR47RSBoMB32yPCMMAjqdLktHjqAaEmNsZRTuXvPbDnMfHeznDE0ak9PvndTlA9Up9z4wf1Mi/T3AGpIoYrbTZu3OMi9/5jMMRwOsMdy8fI0Tx0/wnuffw5NPPcnG+horK8vs7GzTmZlBCImQisn5da9x2gnD7UHK+sYmS0eO0u12CYJg914IgTaWOqpQj81aO/4Zj9UYiqJASsmdO7d5663X6Q0GXL9+k3Q0pJkkhEqysbHGcDDgzq3bNJot5uYX+YoPfognnnjCOz6OSj+OMAxZbLeZt4bhcMTm5iYXL1xkbm6eY8eOI+MYISdd+/sjBhBSAg5rNc5NzOUqsDJ9GNYydpSsBVEvJld9lmX5zm0Wjy7Rkv7+SmERTrK+sc5bb73B+973PEJ5d8y62kXlru/ZfRC/L95jnU3KvZyABzXHnBXEcYyUimZL0G5pFhePsrK2xsWLl3jjjTdZWlri9PHjdGY6FFnOF19+hVe++AXyvKCRJJiyZDgY0ghi5uee4vq1a3Rn53ji7DkCtXs81kavv5a9c2LSsJ/W4d37P3v2pge9L03KtCML/oyyxuJcFUQIQ+bm5pibm8MYg7WWoijY2dnh8uXLKCmZn59jcWmxqmsQOOsYDAb0ej22tjbp9fsgHLfu3ObcubMUukSaiCBU4CTWu5r3lIexJ91v2XMPq2jh3uCG9c4h1dqzFluW3LpykWsX3qQdhdy5cY0gigmCEITkxs2bhGFIq90af0etGesc6jHTk7vHebLfXjb5WmtKets7vPy5z3Hl4luU6Qhb5hhnCKVg2Nthe2sLFUQkjYQgCNjZXGf5ZoilJisQzHZnObJ0hGeeeYYTJ08i4wiHxJYCY23lOFVh3KkAz+M056b3Cth/TdTzSwjhbTXncNYSSSgwbK4uc/Xim6zevMaRo0c4e/YMzlouXrjAB156ibLMCYIIbxRKHxASAvf4qOKxkXeNo1RPqP2cJPAT0bhdb9pZi0BQliURgn6/z87ONtYU6CInzUdcv3KFC2+9xcb6BjOz81y9coVWu4O1mkYSMzc3R7PZwjk78T3+cJqOqE0vBAfeibnvh6itYtbVT+U4Cemv1TnH+voqr7zyMulwSKhC8iwnHY1IGjH9Iqe/vU6zERNGEqkkb772KtevXCYKI3RRkGYjnHPMzi1w+oknOH3mLEeOHcc5g3N7+UOmI4j7/Qb2RPanZVqPD8MxmpT95tJv5r31b201/r5Ydna2ePP117l04QL9rU3yLCXLMrbWNlhdXub61cu878X3MTc/T5aNuH7rOkdOHCMMI5x1KKm+7HfCvdyp+ytPPvnkHgdp8kfW626fbJKrnHhrHFcuX+ZTv/JJNjdWkVLwv/5/P4cxls3NLRpJ02dxnUMKyLKcvukhg5BrV68zSHO++ZtnmZ3rEqqwWo8+sm0tCCStVotWq83iwhHWN9a5fvUax44do9Od8VmV+ziXaj3oohzvB8b6LFF9YAn2d5BqnQjpTS6qw9HaEmNKlpdv8cQTpxHCoY1ByZAoiOkPdhiNhgShZDgcEIRNlIrxZ+PumoG9e2U14D0Zp8nXHsTImF6T92ttFkWJkgFSBt4QCkK01hw5soSQkt/47Of4zGd+jcEzz3L+3FkuX77CK698nu2tLcIwZFQWWK1pJQ36vW02t9ax1hLHMQIotUapYHyPLFW2/ABZtP0er3+MMY/EMLvXvZJSgFDVeqxfJxH1YzKg2WzRbLZ49Yuv8Nprr/LsM0/z4ovvRynFcDDg5Zdf5guvfIE7d1bIjSGKAxyOLBsRRiHPPPseut05wjBCOO9sTo5pP2RALY+TEbufTK5NIXyow9autHCYceBHV4a6f+3qnWVe/dxnGW2vc/XiG3zh858lLw1hkhDGCWEU83994+9EKekz5qJa84AU/rHHRaYz0dPBg+lzvg6ElWXJztYWly5epL+9ST4a4cqCMk2RYYCSEqtLtDYYXRJIh3ARzpQMdnKyPEdKQaBCNvOc1Vu36G9vEX70I8zMzpG0mgRh6M8YHIHz5+JkEPtxmF/72aT3+nvy9ZN6zbKMfq/HYGuNG9evsXz9CsoWDLeHXN5eZ+XmVYIgpCw1d27fZDR6lm53DmM1SkVV8E1W+/3Due7fLvKucZTg3lH/sZEmPBxHCEk6SimyFAUo51hfXWHY73P5whsMetusr61y9coV+r0e2lpu37pFURre857nmZvvEobhON3r3F6DuM5evZ3sMZTu46ydTuf6j/eLTSk1hlocWzrCqDHg6uXLOOcosowiHyIBYwpEt4ONI6zTOCdJ+32CQKGkwliN0YYyz9jcWGN9dZUPf/VHmJmdBemjZe9Upo21+jr2e37yNdOvux/j2C/yv2dcCBx7v38yMyCEQGuNwWC1JggUuihYX7nDtSuXSYdDnNGYskCXjq0sx+qSX/nkJzlx6iRJknD9xjWeevpp5uYXUDIYG2PTBpy1dgz3eliHRBCG4HwUFHwQAqoj31pc5dRNHxY1PezW5iaf+uVf5tqVy2BLaie/0WrRSmLCMCAQgiJLQYB0lmE6wjmBEZLr16+wtr7K7OwMxpoKIioxDh+VdYxj3I1Gg1MnT7GxscHly5c5duIYC0tLSLV7wL5TsdaRZym3btxgfn6O7ky3GsPd2Zj95peAcUYpG43Y2dqiyFK2tzfZ3Fjntde+SLOZMMoKoiBhdmaWna0thv0dXv7854ji15lfOMbx46c5dfIkYRiODYfJ+wB3G/61TDtW02OenFv18/c7ctvv90niJsYYjLX+fhuHcY5ut8sHXno/g+E2r776MneWb7C2ukpvcx2cxRnHaJihpCIJJLktWVtd4ey58zSbTQ9bVLJaR7VRAkjpM3gTgYj9Mmu1HvaDbt4rOPYwZL/Ivj+gfKbDz0G5J2BRz/l2u8N7nn+e4aDPxYtvcfLEUdrtFpcvXeJLX3iZWzduMBiMMEIwGkqCSHH71i3m5+c5fvwErVabIAwrZ2JvNu1eDmf93ONk0L7d71qEEDhrSbMROzs7DIdDrLW02y3iOCZNU175/Oe4fe0K1hquXXiLQZqSFiW5dcgg5PSZsywv3yKOY9qtNlEUIWylp3vHwR6qTAcw9zP299g+E/+21pLnOdevX2d+bhYlHJcvvIU1Gl3mCFvSbDTAWawuEcpiTYkuvIOV5zlaa1rNJkopTJ5jrOXO7VusLN8mjCOMNTTaLYIwRBu/dOu5VJ+Fk+N/lHIve2VS9j0PqutZWVlhdeUOSmes3LrJ1voqOhtRloUP8CQRCEEjjtjZ2WJre9MH9p0EFM757Y0J5M+heHnXOkr7bXDOGtLRkAtvXeDyxUsMez3yUUoriehtb9Hvb/PZX/s0rfYMRZH7zc9BGMeUm1vMzi5wZGmJpaOL1JGfsiwRQu7WIgDWmX19hf0ia/d7AU9GIVRl/NUHohACpRTNZpPZ7ixCa/I0xeLIsgytC6IwIFCCLEtRwiKlQ2uLVQHOKLT/EgByXWIGQ65kBUePHOX5F95H0AjH9SjTC32/A/FeMJ794CyTv+8lD0KfX+5z3+41UnpjbGtrk9u3byKEIApD4ihkfm6OQEqcseiyxBaasjQ4KRiNhiAct2/fpNlsE2xu89nP/gbPPPMsSVUP0Gg0aLVaRJGPFoVheNf324ewI9oqbTn+Kqn21iBNGNLTP9YY1lbusHzzJtlwQJlnSCVQlV5UEBLKEBUFKCEoi4Iiz8EYSm2QYYwuCnSegTVYZxFSIZXAOotzPqNEbQjjCFXA4uIiURxy89YtZBAyvzB/3/Sxs7HN2todvvDy5zl54hgfePEDRM0mUgaUzmGt89Uc+2RUa8faGsP21gaf/43f4OaN6whnsUZTZCNe/9IXyYucOIoJVUIgI8oyp9ffZDjcASGJGzfozlzmpa/4IM8//7y/LZO1SVTrrcbesXfNfjmH8V4G8P3c19bX15npzCKkh5sarb3Nbx3OwtzcHO9973v59C//b27cvEqRF2T5kCSOiMMIkxuszhkOCpJGg7JoEwQBd+7cIdza5uix40RxQr2X22rIcgqSN33Nk49PZ5QmI8GPSsZZyelo3QTMctq4rcc/0+ny/PPv5ZOf/AWuXr3CaDTglZdfZmN9k+Ggj7WCIAyxzoIVWKO5c+cOv/Irn+Ib/q//m+PHYpDsa6A+SgfyoFIb2PtJfU1+bzNsbm7y1ltvcXv5NqPREGMMjUaDMAzY2tpkc2UZl40wxtcCm1KjpCAWEuMst2/d4H/+3P+Xp59+hmeefpaTJ0/S7XYJg/DLnnMPS+7lFO3nOE3OpTogu7q6SqkL5hdOEQSSxaVFNjbWkEoRxqF3DgVkZVk59BV80RhMWSKFQBcFaIOxDhVGaF2wsbHBwtKS/24BcaNJHMfYKVjzftfxKGQ68Du9l+x3NtZSz8dOp8P1a1fJdzbY2twAqwmEo9AFSEU2GoIMaLba7Oz0eP211xmNcpKkTbPZodudJYoTnDE+y3woY3lXOUqTcvdm7Bju7PCrv/ppXv3Cqwx6fSSgy5xQCooixViDlZCmQ5wThFGMc44syxGUbG1ts7O9TXduBqV8AaGf0G7P5uqc8x7+PrZGHdm912Z8P65bVFh7Uy0I/28oipzRaESWpaTpkO3tLRCQjkZoU1LqAodGiIAgiIkiiS1LMBrrPHTMOQ8F8sXB4JCU2nLrxk3OnnuSTtIcww73uw/TG++081g7d/u998sdYA/qAL6X8zZ+vEoX7BeFrN9jjGV7a5t2u4WwjuFOz0e/8EWaWIOQPkqrgoBWq00YBRjjnVhZGj7767/O1StXUSokimJmZ2c5c+YM58+fZ2ZmZty8rs42uboA7wHLfgfTbrahdlDuzrTtziWN1cU4q6ZcQBAF2FzjDBQyQ4oIaw1FmWOtIYxChFIY55ifm2G2O0NZ5D6iTXXZ0uFEVZzv/HJUSmGcRUjoVrC7S1euEicxrVbrvsCmrl2+wkynxZNnznL71g2Wb97kzJNP+QCKUL7Y3Zl9D0VfN2IY9ft87tc/wxdfeQWjS5I4RFY1bmmekecZstkmSBSl1eiyxGnNqJ8jpCTPNL2dIcY6FhcXWVhYGMMj774/e9frZGBl+n7eSzf7HfzvVEajIXme0mi2qzEJjDY4QGuNtZr5+QWeOHOGN994nazXw1rj4WW6RBc5RZGTJAlSJv7eXL/Gq6+9ThgnPP/e9/L88+8lDCOiKKQsCqIwxFpz17XfyyE8SObhYUntZANYxxhmV0Wuql/T2TG/dxZFwcrKKrdv3WJjY5VRmvHpX/1VjC4wldEbBjGNICKMI9J0iAoChHXYUuOMob/T48jSUZRQe/S1n/72juHxMdre7n7unj+Ofq/HF155hQsX3mIwGOChaYI7t2+htfZBSWsIVYg1NTyPMdpESYErDflwyLDXZ2tjnVazQavRIFRBtf4enzaYk/fvXo5Iva/XekrTlOvXr3PkyBIWCJOEs089yY1bN0kFCCUprEZXtXLGWEajEVEY4qz1P84H4mxQoTaE/8myERvraxXk39ejFgBRNJ5Pk8HrRz3H9nOC9ttLpvVa78X12t7e2ub6hTfZ3NxEYGnECaYsyLICRIkRhkI7CCIuXrzC5cs3cEiazTbnzz/Jc8+9h4WlxS9TRfjuk3etozQtuix56/XXeP0LrzDc6ZONUh/diQKc0x5uJgVlnpGXJVKFOASlsVjraDTapGnK2toa84vzhFFAo9EYY9zriewnv/NF5XZvQW/9d+0sPYgoh3OGOkIspaCun3LOkqYjbty4zu3bt1ldXSHNU8IkxKYOK0FFAUiHdiVBKAlDhXGG0gqs9QWr1lqwvihdSokKIorSMBqNqk7RdowbeLvs0X4O0/Tj+72vfs1k5PteRt39kkmHZ9/n2UVa1pta7bzVzsvC/Dzvf+/7iMKQoii4dvUKJ0+eptOdQV/3zGTWWoQMiOMEqRRZlmOsgYasMpSaldsrqCAkaTbY2tpieXmZlZUVPvrRj9LpdLyTPnFAuIfgKU12FwfuOcf3PyAci/MLnDh+nIv9HZT09TtJGOGcIy8LBrpAFxHSeXY37+gERElCoz3DV3/VR5ifmwNAa4NUIKp7IFQAdU2Q8GxzCF/v5AS02m263S43b97kqaeeIgiCd7wun336aVrNBnl6jHYSc+f2LWbn55ldOIJDVHvF7lzxRoIZ68Rax+rKClcvXSYfjSjyFJ0phIAglB6CiCOUAlXTQ0iBwpEVOaWxIApU0GDlzh1u3brF3NzceF5OByecvZuhc/JwnswuHQQ+cr+k3++x09ui0Wx6yJ3BBxx6PW7eusFg0GOUjtje3mI4yigLg9YOrGSYZjgrsVaQZQXtjh/39vY2yIBWFHHhwkXCMObZZ58jy3IiJccscVLIPfv1213ztBH0qLNJPlM4Odb9xgzgg2hpmvGFL3yBX/3VT7O+sUlRpISBoN2OkTiG6QhtDFEUMzPTpdlosLnlkEoSRAFJFCKc4+qVK5w4cZKgHSCluktX9zJaH3W0f1LudR8ng5taF1y+dIlLFy6ws72NNT6TbYyuHHhLI4mJ4giXGrIiZTBKsRYP8a3qRIy1KAszzSZWl1y9fJnZmS7NZtOzFj5GDuT0Xj4dGK73sfrvsiwZDAYopejMzKCtwTjH7PwCR44f48a1nHQ0JFQSZx1CSqLAZ5ikEFjt672KLPckJAKMNmBKjnSPcOLkcXRZsrW5yeKRIxRpRpQIyomAjlLqbe2KRyFfDsJ4r3Gmacqbb77JyuoKeV5QFJpGEiGkpNlooY0liCLiqElWWtJcI9KC4XDbPxeErK2tsdPb4aNf+zXMz889lOv97SLvWkdp8qB3zpFnGdevXmbU20EYQyipsLGaUucEYUCgArQBXRktWmtGowwVRDQaAmssmxubXLjwFgjH2bPnWFxcGkd+/CKofty43HPPpjsJSZIPYO2ura0xPz8//r4gCMZ6iOMYpTwtsgoDesMB2lka7SajfISzBqsLrHAYLGmeko8GGCup02POOQ8XQxAEIUmS4Cg9razarUXZz3H5cgfn5D2bfHz67+n3P2j5slH0Omo78dh0BE4ISac1gxCC9bV1VBAQRRFKKiyOIi+wzqCUw6UphdZoU2Kdw1gf+VVKkac5xjmiYTK+p8PBgNnuLC9+4EV/Pypn6UFlLfeTt4vATxsee3UkaLc7fOjDHyEd5dy6eZVQChxVcbQzSCTKWJQAJwTCKTSCqNniQ1/9EZ5+7r04GWEcIIQ3SHxVPsJaBKUPr9uarlzULwABx44d4fLlyxRFvudw/a1K1EgwQNJscv7JJ8nLguXbt2nNzCKCsDK6xtoaQ6Sc9TASD7vbor+zQ1kUHlqYGaQSCFk7v45slBPKmECGfu0a41+rDdqWNFshVmtsqX2KodL5HqY/56j81TFcWEziKN9m7u+XXb2fMkr7rK+vsbh4BAiw1rC1tcPnXn6ZV1/9InkxIopCirKkLAqMFqQjgyuHWF1itcZY46FQ20NKs87M7Bxzi/O89NJL9PoDrl69ytzcPEeOHCGQIaYsCaN4j5M4GQR70Nf8TmQ6aDTmO3VUjGzjcI5/1nk2vIsX3+RTn/4ka2trWO0hT4GKQQRs7/TpbQ+wxjI/16TRamC0IYoi4iQiiiOs0eTZiN7ONmVZesr6+pvu4ThOG4yPmy6nZXKco9GIi2+9xfraGkZrEJ46PQhC4maD0XDIcDhgaB1lmvr6VOMNdykCVOD3GKkkjTDCFAXWGJaOHCFJYs9OK4NxreejlLsz0HaPDTPpJI1/jHcae70dOq0WYaAojUYb6+sL5xbY2trx+630QUAlFNZ6QgeLp0ePo7AK/Pp6TRlKurNdzp0/z+LSUYpCc+PmTaRSLCwsIKWnC7dSeud1ImD5uDhKkzKdSbprjNX+U5YlW1tbXLp0iX6/D0KRNJs0opBG7HXU7HQYZAWllaAEWVFQ7GiKvEAGIbYiE7pw4U2OHj9Cp/OBh3/Bj7G8axylt0uZO+coy5IyzQmkoihTnDMIIdFGo41GyMjXD2iPvXY+iEEYhQRhhFCSKIpxQKfVwFhDqyoKDkKFs66CO3hmITs1rsmxjGuHJs+t+ySf+43f4IkzZzh79gxxnOyBYwG0Wi1mZ2cp8pT19RVGmSNqxIhQYJ3BmZhQWg/JyzxMD6dQQTym37S2Ptg8bWWr3eH0qdO02x1vTEyNadehuDvDca/o4mQWbs9nsHfzfrus1f2QLxeR8tCWmhgW7yOPa3aqq63xwEpWkMd1Wo2I7a1lAqVpNELyIiMrSlxpiayjJRVJ0kQbTVkUNBsx7UZEOhqSpwVW+x46wkKK5OKbb/L000+RJLE3tp3xfU0e0gExmTHdD340Cc2YjsA7ITh5+hQf+OBXkGYDRv0d0nREqCQqUDgn0GWJqAyMIFQ4BJ12h5MnTyErWnBP9AAOi3Oygp5WmQF7d7F9fYiGYUgYhgwGA5rN1jvWRSHwTh0CGTd54txTvPHGa2yur7B09AgWhXPKp7gQOCcQKJywFXRMEsgAo73zkw5HhIEgljFKCCzeqHBID1sxmiwdYXXpn5dV1soZkiCk25nZ7S3lfK8zKR2yzkZZ8JuQHLPtCVHBNo3FTThWk6QQk/d62ti9H/Nufn523LvH4dBac/HiRV7+3OdJ81G110qECAjDgDzVGKsYDHKcNZ6YxlpyXVKYIaO8JGw0MevrvPrqq7z3fe8HIblx4zrtZhPVbhEEAVqXyCDc43jca1/6cvvNw7bPxmuNibNwzIJaO8C1k2QYDge8+uoXWFtd9o6l1kgEZZ6zvpazvbNDWZbEcUhhDdvDHtlgRKfdgsppMM4SZzmd7nwVaNgdy0HGC/dnvtwPmb6/wF17Vp7m9Ld72NIHWaUCFShm5zwhgy4ydra30NoQqBBEQNRIaDebRGGEs5bhYECkfN1lnmYcP36Cc+fPkyQepeKDPY8eeje5d98rsGmsRmsPlTPGeGdbF/S3tmg0G7hSY4yhLDQIhYpi4kaDJG4QCofJM4yu4MOuCpQ6RxAqosg7jHEUkrQ7LCwdZXZ+EaQiSgI6MzP0B31mZ7tonaO09LBGJTHa2yuTCItHJW+LSKl1O2FL+ISvADxj6nA4YjgcUmQZmIKkmdBsxCwtzlX2rWF44za9Xh9tJUEU+kxdGBE0OphSU5Q52aDP+q1b5E89/TAv/7GXd42jNB09n96AAxXQaLZ8xMM/4yNBzlZeu2fDo/q3wSCEIWmGGGcJE0ncUoxGO/R2Wjz97LM0GokvMjYa4ZuXVDhasVsnMTWWurh/2sC/X6KE4cKbr5KP+px54iydmVmCIADrcbwnTp5kYXGRpaV5er11sjKnNJpOo4MKJNYU2CJDFzm2MITSRxZVGBKFAcKBNRoQSCE4cvwYzz73AuefeYYgDrHCR6SdE+Dk2IEQtfEuHGB9gTZ7a4v2M7zeLnJ9r9qkBwG9e9vnYQyl8v92YwPJVVSxvpWBxFhNmg7Y3uyztblGWaQkjYggDXClxhpPWzwcpdgKy67LgkYcIJxGCU0zDsmNQzoQxoK17GxuU6SZ32zF/lCpByVa63Em5l6460lHaY9BjfPNPZXi6IljnHriNFcv5RRlDlKgx6/38AwpBBZJWRaeUj0doXWBCgIfgLjHtU8HUHbZnPzzcRyPe1W8UwPF1wWK6lYIWu02J0+e4tbtZVqdNo1Wh5pGYe989wYsUrB45AidbpfBsE8QhUjhqibEgqwosQjyvPB7CQ5rNM46wighFIpRlqGCgHPnzrG4uFhl2iyucoBqqtjJK63vz12ZCbcb3piE7007Efdbup0ZNjd3fJNsIRgOh1y7doU8HSKtRgqHUhIRJZTCkpcFVghEFKJLB85iEKhAIOIAF4QM0pxOEHH16lU67Q7PPvsM165dZ211mUbjDEI6lAyx1u/pfp5UlO7j+VTt7q5yNIVAOMEuK3alk3pjeATZkmlEhXMOgfXOuavmGY5hf8j2xgbFyBurYSRptloM05ydnT55UfhG5caytb1Db6ePANIsJww9vC5KEoKkxcLiEkmjcc/xvJ1j/Tg4BXCAKD/+fAtFgLAW50pKp0maLVyYk+mUXA+87RBHaC3Iy4zu7Cxzc7PEYcDO9jaBgkYSsbgwx9LiEjMzC4RREycDjBU8LvVJ90JIjJ0kY9DGesihMWNHaTQcsdPr0+50KMrSIyS0d5ictX5O6RJdFpg8ByRxo4GzlqIs/O4o6syQQ4UhzVaLJEk8mYj1a392dpbVlRXKsiQIQwJj0BVsT4ah/77HxAnfT/bYNr7QGeucJ6UYRxx8LW4cxzQaCbGKaDcTnNXIQBKogPWtFbZ6O/QGI4SKmWnEqEhRuhARN3A2oxj2aEpHPhggS3OPEb075V3jKE3KtJFtrSUIA86cP8+NG1cpTAki8Gw0uvSNKq1FOB+FLcocGSikkOR5gQwUYQSIEm1TjhxbYna2O2VYVHUH4P8O1Bgnvl8k5kHJ+9/3HJcuXuTa5QvoLOO559/r+9CoAK0tMlSoQBHFIa1mk3arQZqXaKMxeU5UFU1GQQguxJYWbQzGODSaClyHUsqz2CwucOqJ00TNBlbUNNneuHBO4GzNwFc5Q9JHebGe8GL6gLyXju5l8N/LOH/Y8nbfOQm/azbbPPHEOW7fvMKXvvQqaxtblLlBqYggsNhqDmljSFPf2FdJRakN2joQijiJMZmj1CWqFOSpwOgSHEgnx0XDD+usTdOUZkXhul8WcBqqMaUdrHAgBc12m6eefYbNjXXyIsXqEoSg1WiihMQ5QxiGaGvRQxgOB1y5fIm5pSXa7Q4+Uj7RdHCcM7n73uwakt6xiaKIoijHj79T8eu+ul4pWFhaojfsc/36Dc49+RSoXUgUgJD+9UJ4iO/C4gIvvvQS6WjERpnTTGLiOPJF4c47SEWZVja7X1+BUmAcYaxwKuD8U0/z0ld8BVEU+X3J+n1pnP2DcQa43qv2BHDqoIe/oqlr293THpQz3kiaZNnq2PDp93usr69idEEgBa1GjNYlW5sDjJCUZY5UAUIohAsoihzrLM1mh2anjXXQH40IwgirS27euMG5s2dpt5qsr62ydGQRpdrY0qGCCGBiTvvasfqaqVoC7GrPB4cstV9UPePcvqQ+D0qmDfxJaJQUNYTaVZnEKlRlHKEIsFYTBgFBpLAjjXGWVruFsZYiy9Ha128JIRjlpWdIDRQybmBRNNsz3rl0jBsdf7ms4+OWUZqsFaxlevxxFDM3N8/yym2kzVGhz3yPssw7nr0e7dYMOEnaG5IVOYN0QJyE5IVEhpKZ+ZlK1wEOyyj1NUwKD/VU6uFnIw8ikzZVWZYURUGptWe5M6ayqQyra2v0en2OH4dR6pvLWusqSGxJNhp5OHC1fJQKaDTbKOWDYHU/qv6gR56WlMbgHCSNhLAipZHSw9GLoqggf2ZPnZQ1dmwBP+r5NdlCYfJ3LfWeIkQVa6nPjiobPNPpMDs7y872JmCJohBByHA4Ym1jneU7a/RHOU4EOCTWKWLVJMs0urCEQYRMmkShotVqItTjDXV92PKucZSmU8TOub2wMyE4feYJXnj/i1y48CYbm+vkvd4uKEH6XjfSeqa4IAhpNBrEQhDGEVKBdRoZStptz8KEVNV3SJiAXtVQn2kZR/Ym8L7328hYWjqGFIp+b8i161cRwJmz51g6ctQf7dogrKURx5w6eYqV1TWGwxxrPIQwiRWFKbDGb3x5VlAagwwUhBKk9JuZLtEOBoMBaZrSLksQyjMtCYG1Gt/3U1XFmfiMlfXGl7Vg2dvHo76Pk8bXQfQzfag9jCzKfhHH6czXpMMuEGhtwMKRY8dJkojXXn8DbZYZZSXWSQIVUzjPMBVU2RFtvX6yoiQpNaEKMPjsnNYFOEMYKhbm52kmDVxVMGyrmf0wtsNLly6xtLTE8ePH99SpTepiUmd1lG8S117Pg06nQ6PhGcqklEjhCRqCRogUEu18xNFhKPKMixfeZPH4cZ566mmCICAIQpxTPgOAq0qRdu/DdEbEj4uKiOQ+1Ut4D8k3ma3ugwpDjh09zptvvcnq6joLi4u1cpBCgPN05rWehFQ88+xzmLLkU7/8S+TpkFyX43H6JrbWk1PYCjYnpM/aGsf84hGeec8LzHS7AP6znUTUmTQHKB+1HBOhSc+UaGojl10YnkDcc65P3+f7JY2GhzZnWU4YQFF6avgsT2kmIULFhCqg7PcZ5SVZmhGGEVIqylJ7+ngBzgqKwlQZQ1BC0ogjRmlaOfktNjbWybKMVss3EBcTe/N0NH1XHAgP86xhMt5hslVG4NEaI5OOr1Ie6jk5fAG0Gk2OHz3O2vIKEmg0YqTyNSVhFNJothiNRr62zziKvCSMY0BQaId2lrCwCBnSanc8WcFEBnL8Xftkd/er+XocapXeLrDpnCNuJJx/+hluLt8i2yoIE0muPQQtzTVWBD74qB1ZWaKdZbu3gzbeuZzptD2JlIL+qMeR5BTdbneclZePSTYJ9s/E15mksizJsowsSzG69P3OqoxSnqWAJ1+x+Dou52xVB62xZUEUBBXcX44/LwgahGGMlAKtSwQKnCRLC7I0IwjCcYa2ni/W+dKKOEn2tFkwleP0OM2pSbkLBVU5ShLP9CcqyLExhm53lqPHjrG2eofA5EjpyZ7WNre4ev0mwzTHuKCySTW9foa1EUIGmNyQNCPCOGFmtsmps2eIkughXflvD3nXOErT8J7aIBMV5ARriRtN3vvii3Rnu/z6r3+awaCPChQS32RQW0eea6IkRhtLqR2NdhMVhkgRcurkGY4cOVIZVsZ75SKAMdSqYrsTAmF8aGA/SEFNsFAbjPdzIRun6M4ucebced58/TWuXL1IqTOUcszOzVNqy3AwROuSRqNFtzNPlhqyfIRUnvTClKXvZ6MFSRISusgXXVjjo6hSovBm+Pr6Gmtrq3QXFlFhVPUxoOphUzkIFTS+oZo4VzGiTUWo9zNKDiLT732QUKDJ7/xymYdpCIf/h0BUbFBJo82pJ85x7cYyG1tDnLYoJYlVSF4W3jBxoEtNGDawCNJcQxzinE+5RwQEImR+fp4nn3ySdrOF1QZZQYZU8HA6cB8/ftzXAJblHnr3ST1My6SD5Kwbs43lacZoNKKRNCiLzPfGKXIKXXhoGj7D6Y1Tyc7ONrdv3+KJJ04jRKPKAPigh5MQhGqcOZke02RNlc96vnMiB6jqpNxeZ9lYS9JqcfzESW7cvElZFiwtLaECHwH0e4hnrHRUDl0QcvL0aU6fPcu1SxewpqycJG+US+UQQiERGGvQzmC0I0oUR48eZ3Z+HuMcWIMy1SHsfI+qXQe+kilndr+6v0lDdhr3v4dp8T6tvzCICVRIvz+g2YQkiWm1GhhTIFXoyU8CRavdwAhBXuSUpkQ5vw8HQYiQkOY5aZZXBfeKudnZikjFR++DqvZtZWXFO+rN1h4intrYmsyYet05tCmRUiBReLZPxa6D5GF3D9tQm87i7O4/Vfhe+DXnHMRJk+dfeB8ba2usr68jG5JMl1gnSBp+v85zjcPXesjAgZNEiW+dgRQEUcLxk6c4evQoErFvMOIgSIFHHfWvxzCpu8neSbuPKU6dPsP7X/ogn335M/TSbZyDNNUYJ4kbHQa9AUXug4eokGHmafuNiyg2NxHOMdPtsLQwz9Fjx5hfmB9nUR42Ec9BpF7fzrkxhC7Pcy689RbD3g7drg9wBWGANpYsSynLotrjbZU5N2Atpsh9z7tqP3PW06en6dAT+FQNUbU2FIXGWkjTnP5gQDoajW07VdVM4xxFUYzZO2E3Uz5J6PC4i3XONxwWYhxss9Yi8KiHkydPsrG+yubyTQbDlJ1ej0Ga42RUmaESIUOkU6iwgZS+p5fAESvF4uIxnnnqDMdOnqR0+lFf7mMl7xpHaXpjqaMJUB12zoGFIEqYW1gAodDGIJwvbBbO/xjjyHJNEEVYKylLQV6ULB2d57n3vJ9uZ4Z02EPrDdozc8RJMEFu4KE0QtRF0XvHN21w7Edt/U5FiBipDKdOnSFPR1y48DqXL79Fng957tnnUSpkdXWduNGg02zz1V/1EfqDAZcuXeTixdfRpUYJBVL5PV4qn91QkrLIEXbXoCyNZTgccvvWTRaPHGVmdg5ROY5g0bpglI24s7JCEIScP/8McdxAEFUO5d2Rxf0O1HvpZz/d3e/Ddtr4mzSuDwobcc5DDKSqMmpSEIQR733vi2S5Js0Mmzs7FIVBO4sIfONYXRVWCxUihEM7sMK7qM1GA2MtM60OL7z3BZ577jlqAolx/6z7qol7y/z8/Lhotr7e6SjsNFxr8uD108XTVGdpSlmUWG3QRekzH6JyrDDjXl4gCUSANZqtrQ2yPCUIQrSWhKEYE1lYY3fZ3KaylN4I9hmfsiyZm5u/L/NHCYkVlTONd5Kk8Oww8wtLrG+s89lf/zVOnjzJM889R6vd8eOhisBai3FQGh/cOXv2HBtrq+xsrVf05Yay1Dirsfjsk5JVX18h0MbQmenSanV8Rsv5QJGwVXjCOW8sV/UzMrg3S9nk2pwkcpiWyf33fmUGVBQTRjG9nR6BCmk3Gzz55DlW126jlEAoQaFzLJY4Dmm1WpRVnd8Y/uZcpXuBlIow9HuXMYZWuzV2kJvNJsvLyxw7dowgjJAqvItKfXoPd1hwHlEgKhIDny131fe6ymd6eIbaNFX/3c6rq0jEnIcJSsmZc2cR4ht5/fXXubZ8jf7mBipoIIQiKzTaAAikgDCICCrGzjBKAMHs7DzPPvOsJw3xnzpRA7h/AKzeA2p5HKL+tUwGCyaJHOoxGmsJGzFnzp3j0o0r9G8NyPKc4ShDa00UNhBBhNMgRUgUJKggRoYBRakRvjMQbSuZmV2gOzePEHWgQVT9gx4PJsB7ZZGNMQyHQy5deIve5jpKCRYX51k6ukS3O4spMw+dHlOQOrAOXRRkowHO+PokYfz+L3AUZUZeZEghkVXT8pqQx1rfY2kwGKDLEhVEu0FxqNgW954/0z+Pi+w3HlcFd3DV2qlKGz2Y18+HdnuGxaVjXL14kdGgj7aGUW4wIiA3Ja4iAQpkgJCKsnRYUxCHcGThBO9/8XmOHVtEhiGlfXz08TjIu8ZRgr3NuabrIuroqXWOotR+MzL+MaUkKDBSEYYBVvhoflGUGJchg5A805SFI0k6hEowHPRZW1sjDGMWFo/46KXYbfZaV0ZMGhn1GOvF/0AcJRlgDcRxgxMnT7Kzvc7t2ze4cf0qRpfMdudxyIqKtI0IQuI4obezw/Lt6wx6KdZojNFIJ3ClwxQlIlRYo1GV4WcdFFrjtOP69WssLC7RSBKCIMI5i3El/UGP5TvLrKyuVtmsMz6tLvBUyLIOntw7izTtMO332oeRQapl0vmehLbs5xjcPTZvlDsETkra3S4vffBDjPKSz3728+zsDMAUYKyHP/kJRGEcM60GYSAprSZJEsKkQSIlL33wK/mKD3yA9kyHmm1PYHF4aNbDOGrjeJdOeb+M3n4H1hg2Ya0PUghPCSuFIAgU1hiExePMEWjj4Rv+UBUEKvAOfBCQZxllUeKa9dp3COVwGKwTSKuweCIIRHUHKvpwaz2ufjgYcPTosfsyl0RlVFamIlQwOSkkKgg4feo0K7dv8uqrr9Drb/O+932A7txcBZT0c0Rrv8aEUjRb7aomMPSkDc5VxCgWYQ1KSpRUyChEV6QCvV6PNE0JwxAqsgeJ801nYbxP+Wz7vZs+73cf67/r+zjd2PF+OUrGOIaDEcu379Bud2g2mzz51Hk2t9ZZXV0BDDq3zM510Bas20RIRZFrD9cMQpxzFZOdRilJFAVYY2jMdFhYWBzXp87PzzMYDRkMBnQ6XazbnZ9hGFZ1I2rq+nxmT1R9ugS7MMb68n3E/OEUTt8rQFH/jXN+CbldVjzhJEjFE+fO0+nOkn/asrK2TRQ2ESqgtClhFFMWua8dERJVZQGCIPDn38ICx44e9UX6SB+UnMryT45pEgZ7L6f8Ucm+BuwU692YmMdV7LBphgUazTZJ0qQoNVm5DSpEqsSzWIYJUaAoiwycIYlDOt1FnnrmvXS6i7v6gHGQ9VHrYlIm7ao6m5QkCWeeeIIvrC5TlprbN/qsrdz2fY1yjbMKYY13eqRE69LbFmWJLssKYlbr1YIxHqZvfQDbOV9sq8YoVkeaphRlSdL0+04N/Yvjo28bNH3cdAn7Z35d9bgUNXOtQ5eFP9Ok5MTJk3S6c6ysbjDKMvJSkxuwwjtHUvoadITAYpFG02onnD5xlGNHloiSBO0eTGua387yrnKUYO/GdrdIcL5WxBiLMxYhffNJASghCEIBytMrqjhEBgEqjAnDCN8Z3pLECY1GTGkcRWk9d7+1SOFpxesicaaisbXUkMAHEukQCqkcFsXc3AKnT59hMOixtbnOtWtX2ZrZ5v3ve5FWq4kTCgdEUUwSJ0RB7Ju6uappqfZ0xVYIbFEZaFJiiwIhJEZbtCsYjoZcvXqZhYU5ujNzGKPpj3qsrC6zub3FbHeWs2fOEikPOdRoj8fl7oNxv+Lfe2WOpg2yB4FxnzYM93eAuOt+3o0/xm/8WKxzHl4lBM3ODOfOP8Xrr11ge7tHHUNyPgCHRSBVQGd2jkYcsrW1ASIgKzVHFpc4e+48rZku2jqEtBWk0WcR1EPaDCed/ulMW21I12tyMkpbF+C6yuBwApJmg0AFHo5ReofdqcAbaBP1T845H8wX3tGqCINweMy6cL4WzyHRIsRpixCWIJAEvlEHSvkDaae348kSQsVkw+TfslRZhkkeCetc1QDaU/S/9IEXAcsbb77J1naP93/gJZaOHPV7xvguSqQMMNbiEBhX13f5fUspiXDGF85XhoVHMAp2trdJ0xEzMzO7AZtxUb8/RIWTYIx3q5WvJazHWrsBAu/Afrl19aAyu1obVlZWeerJEbPdLq1mm/e//0WuXbvK6voqo5U7GAd5UVIaS6k1ozzDlI5GMyAMQlQY4oQglBDFETMzMxw7dmxcF6K1odlsMjs7y8bGBnPzC0RxY1wsXsN37jbsJVJEeNhkNYERFeuhpPaa7q7YeTAyuSdONwStHaUa5uprO8BZXY0fGp0WJ0+d5q1LVyn7fbR1VQZcoZQ3JeIo8A1AkR59oMKxMy4qI5cqO7Jf8OTt9vPHyZiFu4Ni045nUeaeRAdP+hGFMc1WG7KUIA4pjSNQIQKBqoJAQgYkUZNzZ07zvve9l2eeeYFG0mKSVfHtAoePQqaNeVMxyznnOH3qFEVvk5U7t7FOk2Yjlm/eIMtLut1FsmxE3FSoMMQqH1Awxrc9EEJ4ewMxtp2UlBSld6iUCogjb6NQeie/KAuPEsAjLvq9HtY6osjX3EzaAGJi/I/L3NovcFD/WOczilJUFDrWjucX+H0kL0oKIxmVjrR0GAKcdKhIIVzlZDvn17UMEKIgiRO6ncQz6FqLMIrotwkc8WHJu8ZRmqz5md7Q6k2b6rFBv8+g38cYQyADHB5iFoZ+MhocQhgkJcJ6yvBOu02j0cA6g7G+6aqUkjgOK+idhzJgHaY6LOtagEkjsR6L1no8vvuJoXX4fgZCSqSMWDpygo2NTYqipNCbrG2s8saF12nPzTHTPeKL/6UkDMPdPknaR7RN6XtN1RFr3zPBG/pKqgrOIiiLnJ3tLdZXV1HS142sb64yGA6Z6XY5ffoJup0uxjgshjCsoD+7fLoHbgx3r0zSfjUV90Wf+0Slph+bdJLutSlX78Rn2+oSf08FHicJSRIThgFl6caNBpVSOCFQQUia+0L2otBI4el6S+MwDj8fldw1yKrPl2PWt0cr+2UZ6uikXx9UEDhJ3GjR6sywvrbuYWtOoIRvkhyGAVIqtNbkeY52Fmc1UZQQhTEqCJHS91iSUmGdRaDZ2lrn2pUr5HnO/PwsnXab2dkZOu02Sii2N9Y5euw4qirEd++wPMBU0U/rLx5XOyfOIZTEOEVnboEX3v8ig+GIty68ydbWOu95/r2cOf8kUaMBIsQJizaaXr+HNqX/TGfH8CqBQimJVAFKBTgEyvk5UeYp/Z0tlpYWCawnbRBe8SBkFTPyWStslV2q60oquEzt59kJA/xuIox9KN/vk1GigpDZ2VmUlD576DyMrjszx5NPxhQGrt+8w7C/TVaUaG09MySCIAqQSmGcRRiNrLJJjaRBq91mcXGRZqMx7vtjjGG22+X28jKDwYD5uDHOItWBrenrlULikFWOWIwdynG2SdTnz31Rx5eVtwviWOvPBWzFPiYmskp+tFinsaIgaSs2BgX9NPewOxmgQgkUGCewKiIMYkSY4KQnWMnKFCsshZWESu5Z8/tllKblccgmTcq9UAG1w2mNpiwzhHDMdjtkRY4TjjQbkWYpUgnCWBEIn1oOA4lwjkREHD92lA996EO85z3vGTO4TXzzQ5svB5E6aDIpSkqSKKYocqK4wamzT5EWGm0K8q110uGI3BYM1m8gL8Dps08xO7+EkhIjRIXYkVjj9RkogQwijK2c8crRDkMP8yzKgmKUEUdtojAhDEIkElsaNjc2aSUNwqp+0FXARt/I9vF2BqazlRUWoXKaKnvWusopNBRFwdr6Jlu9IVZEqEhQFgVOVPBy6yn/cRaERUWCVhgxO9MgiaS3DZEgAhzvMBj4f5i8axylSYO1/jfsGmQASF8DsbK8TFkUdLozSCXHkVjvxEukMMQhtJMAnMI4oNBsbmzQmemgHb5vhqN6k0FI51mjhPSwqSnM/uTv/cZ+/8TghD+4jZE0W7M8cfZpdvp9RllGmme8+vqruDDgxQ98hJn2LMIJWq0mYRj6TFFlfJfaZ8ukZAw7qWJdnt2o6jtljWbY77O8fIs8H5JmKTs7PVrtDiePnaaZdDAGEI4gEICPuDv39pHo/SKRb6fHhyHTDvjkePZzksbjrrIeWOGjuhXkoCwLNrc2KUzpGxArT/iABSkdoROEUYwzltKWvsYCCxZMVSzrDb2K6rqOKuFwIsA+JF29XdRuPydyT42C9yg89j9OWDh6jNvLyxRFSc2QWJYFZakJw6hiSPJBERnJyoH3RCNOiHHfF4FjbeUWn/n1X+HOnTu88MILdDvH6PU2Wblzk0ajQSgDhBMszM+TpylhFKGqGrHfqlhRRfXcbkamNkqts6AkzsXMzi3xoQ99JWWRcvHiBX71U/+bW8s3ee69LzK/cBSJZDj066osC4T0zpbRHrobRTE4QWnMmDzFOp8ByIZ9lm9e5+jRY8x0uygVIB3U7o9zXleTkex6rPXf1c0bO0qTWZXJ9ThZj3I/DV4pFa12e0yi4JxDCoVzBhmEdGZmETKk11vHOOevUaox810QBNW4fDYvaSQkjcSTpsQxosqC1vUQcZIQhiG3b9+m3enSaDT2rPe67nWcQRVgXe0USM90uqs4Hl4uifEY69+T62zXGLO7mceJ10qEz+xag3KWWFWsgHmBCIIxjM5m/v5GUUIgPXGPdZaizLhx4zpzs11azY7Pnu4zrulM8+PkGE3KnuAqu3v4LqTf199urK+SpkPiOEKbktKUZHnmmd2sRgiLdamv8w1ilJQ0kjZPPX2O8+fP+ox2tVePgw1S7PnOx0X27NtV8FRUaIdGa5bjp89z9dpllo6fppeOuLO5RqMZsznYZOOLv8GpJ57i1PFTOOlhiIU2PrBlSoyzWOttikAFRJHff8uy9DVJWnvbCmi12oRBWNU7aXpbO5w9dwbc7t7lV97jBV+czPLuZ5vujtPDquvsv7WevEgIwShN2d7ZIS80pXYYJ0AECAnWOKQQKBUQBQEqjEiSiFYsaLZbqEgBFqs1AomVj86GehzlXeMoTcq+kTXh4U793g7rayvoIsdJT7xQG2m+dsbiMEQyIvRA0apTecbmxjpLx4/QaTUoSt9k0/tHEiHGKBvvt09EHuus0X6ZiLvG+Q7FuLL63KortZAsLBzn5OnzbPd6RPmIuIx5/a03COIOX/GBryQOYmSgSJqNqhBZgJCU2jeHs8YSRnK3qSdVM7Qq5CwFWFMy7O8QhZb+cEQYJpw6cZqZzhyKEEHgF6g1GOP7JgixF0p1EHjPvaKRDwJ2V3/29P2ZPEgnjcPpKOSe+2sd6Cpz4gQ4Q6lLiiLj9vItUILObBdpS2yeoguNTktCqWjEEUkgKfICJSEKBMJJAgHSOV/cqsLK8fSFsYHwke6HwZ30jrIJDupaDyckUoXMLywSRAna9dDWX4s3fEOiKK6MtdjTycYecjEajkD5molOx/dU2trc4JO/9Ausrdzmq77qw3zwg19Js+EZzYy2FEVBNhwx7Pe4eeMGzkEURjTbHb7q677hHenDx1DcnrU/hgQ7gRAKqSxLR47y4a/8Koo85+Kly7z2xVdZWV3nxQ98iNOnz/hM7foaxpQYXeJMibUabdyY5anUNYORd7Jl4GFBGxvr9IcDmp0OgbQIKpKZCiVm8fudEnLP3K3v4/QcvteeJYQYs1CNr/8+7GlKSZKkQRCG1dVJKrwluvTMh93uHOtbWxRFSaBCoiQmyz0DY20yGWORCsJQEQYBuNpw8b1ZrHW+Ls46ZmfneOvCRWa6c5w8eXI8Fp+dFJ6IRVVQNCVR1V5ZF+M74xCygs6IibnwEGRa73ejKnwAr4b+1gEc4/w8sKXGjFKCsqTbSDDOUgjJsCx9aCuKsbqqmzAFwgmiMKQoMu4s3+bp8+dpJy2Quw7ifnvDvebHg9rD34k459eZdXbMzmat5s7yTW5ev4IpvWOELb2PYzW61J5cRoZV4MKhre8rGMczLC7OIwOBcwbnRFVLWte/PZ4EF7UIUUNLfUBKCo0KFN1ulyNHjrC6vsqzzz6PNoabt2/SbFoscPHCRXSuOXn8JDIMPOzTWYzz5DO2LLHOEYYhDdeoEEKaYToCPINlkiR0u12E8KymWZahAsXMzIw/9+RkoGJX3i6I97Bk2ibdP2PpcNIjGgyexVQ749eh1qRpxsbmJlaDsLUNICkKjXMhLlBkFlTUptttEStLaXIyFKmVzDhQGJQrUfrxcCAfF3lXOkrTshsRMmxtbjDs91FC+OiPMz5qrS2ygq44awkEFTOQQ+sCrQtu3LxOd3GWxtmzFea4Sk1L5+E60h84EomVu1G1esObhqhMw1juy7VSR+vwFLpV89FTp86hTcmX3iggEmxu7vCl116j2ejw5LknUUqRJHGFRY9wDozLyPMcYwTGKqI4RgWBzzgVBWEYjpvtWqsxpqQ/6OOc5NTJUywuHiEIIqT09V3OeXepKt/ag1efPESnD4j96pCmX/+gKEDvBWeB/VnA9jM2fcG8p3K2AFJgdZVuEII4jgnCEKkkaIN0lkYU0gpCQilpxQrpLOQgrUOUBiEgUsobjs75nhNCYIUgFBIpqRjPHoha7nnN+z23XyZw7FjiDThbZWAcjlarzdzsHL2tLWzp69miKCSKojFZQxiGJEkMSpIOh3zxiy9jnCQIQt7/4otIAb/8yf/NrRvX+ehHPsJLH/gwjaSNUiFCKMJA0GhI5mZ9PZO1Hnff6/XI8uId6WPamZh2KqDORkuEUBw5coyv+vBHyLKcy5evcP3SJbY2tnjppQ8isejcU/Y7YxDOVkz9lsLkgMM4b+j7DQgf6MDPCeOcLzp3HkZbmhLppCd1mHLwpzNDe/D+9whQTP496Ujdj/Vo8bDTIAyr2i0fqXfGG6VZOiQKAmbbXfq9ASoMaLZahGHJTm+H0WgIQBRFBCoBoxG2QLiYdDik3Wwhpaf11hYCJYmSBmEUcefOHeYX5tHWO6E7O9sMhkNw/nWzs7MsLizSiJtEYYgQYUXpbyvoi6/BpCJ6eJiyX9CmemacWaoznNRBHGtZvbPCjSuXGfV3EEHATCuhDAJIR+TakuaaLBthrCCJmiRRAtKRpiPKso3Wha8XtBY3cbbtFwR7O+TAoxR/Tk3pznqoHQKMLhkN+1y+8AbrKzfHGboQDdbRiiMEgjKPGI5yEJ5EJs80SRL6+SHBVsgPi62o5f3eN9m/61HrYj+pIWJ1/V4QKN/DKI6ZnZtjp99jNBxx9OhJ1tc3GfRzCm2IGw0uXrpIIAOiOEIEimyQosu8ggNPB14so1EGzp+PUimSRpOkkfgzw1mGoyHd2VlkBT/eb895EMHo34rsF8AA9u7BgHCycrxtHeepAvGSvMjp93oUZYYQYLUmL0p/9ldlEzIICKOYMIlxJkWXlo3tbdbWN5mfX/DIINwefR/Ku8hR2g/es8cIqJqdDfs9nNEoAc5obOmbAzrjqXyFtT66URbYMAAhKcqcSJfk25tcv3aVxYUFZme6VY2Tr5kQdSpa+gyVNcbj/KeMjQe9+SmhvMHpHA7tz0EsKgw59cR50jzn4uWLFK2ItfUNXn31Nebn5lmcmyeMYs9aZx2tJGIUjhAWRumQXBd0gpBWHPn0rfD2gAPK0qJkiCPEipiFpSUWj57EKUXpLLHy1NhKeYYlEFVdl48O1z91j6VaV/63b2JbR2fr+zqtz4exEU4f5vcyiKc3xXGNmvWOgTEa7SzGOba2t9jc3mIwGDAcDcnylDQdkIQBrST2To81uFITOU2oQsqiJC1StoOQ9dU1jh45DlIgKnogafH47IeE0X47Z3L6dZP1evVjBosTDpyvoxiNhn6NOogCb2jGcVjVcJXkeUEUeRp6rXOyfka/v4NQIdo6tjbXGQ0HbG2s89yz7+GDH/ywZ3iU4RgqJaX0BAn4Br1CKeI4YanZfsf6qOsP95ubuxklf3+clQgZcOzYcT76ka8hz0suXb7M5uoqv/xLv8SRxTl0keGMry8RVE6I05Rl4T9PQBA0PExWSWTVdd1Y7eebsyihqj3QUhSGOI6J4+QuZ7/OgNV/T96rezlOQoiKttxf5/0KWjhLRUXtDSVwSCXGkeNms0VeFEjh95Q8yzHWp7jLKnBQR589LMcBFimh0CXaOrT1fZQc3vAoyoI4iRgOely8+BZhFFHqkqtXr7K9vUVZahpxxKmTp3w/pjDi6aef5tSp01jjM3pi/F0egslDMnj3c44m515NnlIhXas3VY+Xmts3bzEYDACLNb6psy5TIlc1wdTa94ETUBYZuixJ4oBOK6DRaBBU/fGEowp87L8v1HNqv7PwURu0fgzT//ZGrK1qoNfX1rh9+xajUYpSwrOMOQ+JdcLX07UaTSCg3x+ijSUKFUo0fA2l263P9X7Y/r1+Hgdd1DK97us9VCrPsmasIQwjjh49yqVLF9ne7HHqxBn/76tX2NrZItMlFy68SSNJ/F4VKFzpPyOJA5/VdY6y1IAkDCJwgjBKiKKYOG6gwrAitSnY6m0xM1O1QJA+Sz+psreDxD9s2S+TNOkkealgSdX88G0mPGNqTfttrQ9MpOkAY31ARip8nRKGKIgAQ1nkxKEgCEOKoqA36Ht4eo18egyd8Ecp7xpHCe5O7e+ZhA6cNuiioCw9fCVQnp/aOc8z5azDlbqKIHlmFSf84eycQQURW5sb9Pp9Ou0OqkqT53lOXuQ4LJ2ZGR8xQY2Njml4Vi1341PfufjNwteruNoAlT6zoFTI+fPPEgRN3njzdXTpuH37NhcvXqT70ktEsaf3LrKSqJHQaLawFmIcTjhfACgVSeIj+3mek+elp/pGEoYxS0dOceTYcYK4iYpClAqw0qGk16WHsEikE+MiaZ+VEmP4yl4sOz46e4B1/aA2wy+XMbmL4U7s7b/hqmwJwrONGSyFLrh16xaf+exnee211+gNRsRxgyCQJEoQCoMthlVmMiYQEm01wjikdcSBIh30uXn9Ok8/8yxR0qgyMp7kwQp8IfFD6vJ+L2jBfhm2SYfJOQ+ZMNpS6oJrV67whc9/jv7WJqo6AC2ual6ofeZNetIFYzVaawqrKbQGoXBCcr2/jURw/NgRvvqrv4rOzIyn8zUGGVQHqPCHjL8xlXMu1d1W0jvUyX5Gomc/rChwAYdEqJATp07ztV/7dTgHb124xHDQZxAFhIFEl2U1ZL9GtPGZNSk9dMXT9TbGgRrwrw2DaFxXYbRhbXWV69du8OS5Jzl9+gxS+Tk5SX0Ndzs701nxyUzwpHM1OQfeqUjnCKSHy0kpMc73bjNIkAFJs00YN8iKdSyWIAoRFZFAEIRVjRskcezrGqTCCEluLKM8Jy1zyCV5L2M4HJCmI/I8Ix0OwTrW11YotUYoibWOTqvN0tIST5w8xfz8Ardv3+JLX/oSWZYxNzfvGc/YPYPupy4OKpPZmen1VtfyTe5WsgouW23IsxQZSDrdDqnW9PKUMs3QxlHkhrw/pCg1VkkK7QjDmDhqe+iY9GdDTWzknYC70QKPu9y9b++lxS7Lkjt3Vtje3sFYA1XDZ6raOc/h4fcnazRKBgRSEChRZXuhLA3W1D3e/B795bJuj0om13d9Vk/Wtwjha4uElARhRBI3OH7sBKsra2RZzvzcAvMLC1y/eYMrly/S39lha22D6rBCqZA4jmk2ogqV4uGwSgW02h3SNCPPM0/Xj0RrWwWIfIPapaXFaiS78Nd6XMAextVHKfcKYEyukXHsosokCTzJmNa+yW+WZuiixNmSLB9Sak0QBFgB2likbAAREoOU+JpzJUGXfg5XQRsndtsYHIqXd5WjVMskbGTaYKsLd+uobr18lJRIASKMcE7iS8HHqQwAnHXs9HZY21jn6JFjCCXGvRSKPCfLUrIs49jx4z5KOWVMwF743YPqvj0dIZ5sQpgkDc6ceQIp4dKViI2NDb746qssLS6QZxkqjBBBRmksQdTAklFqX7dVlr7RZRSEu4WGWvtGn8YRxw2Wjh5ndm6hwjF7mFPlhmKcQ1iNFMEex8cXSKu7jAsh6vDH3g2lfm6/v+/3hvh2nzvpJO1nEO+ll6ViTPS1SSsrd/jCF17h8pXLDEcjBI4oDOi0E2gHhAqyUY9iNCBsRCQqoNSOItU4bX3fLws729sM+j3mYl/Y74SnF6858ORDNE6m5/l+Blv9UxfGe6fBYY1h1O9x+cIb9LbWPQRFeZKKovQUqYFSKOOdI2+kVNFw56n90yzFCY9nn5md48Nf9RGOHT/h6w6FQSqFtf4QcUhk1cjLVoeSb4IsqwLr37rUlNLTTv+u+B5uzj9RwZRCpIOTp8/yO74hJIwaXHjrTX/dQUCe+oy4UgHOGlxVSC0AqbxjEAYhgQrJigKQFazMf78uSnSZ8bnPfoZbN2/TabY5efykp2J3e+9dLdNR//3meP17sl6vfu87FYV39sfsckJipe+dlaUlN+6sstEbkFYQwyRJUGGAxRGWBZEOUVKRRBES3+/GOIuxCsQGozyrMpj9qoml3+MxhlCG5BW8+Oix45w7f54Tx0+yuLhIqDwbV6fZRpe6ompX4yxlrZOH7Rjst0ftvR/CIx8qIxXn1510oEuNLkuKogDlMM743mXSEUcxUeKb6va3BxRlSSR81iRJEoyxZEWBc2KcpRVvs29+ORjno5e9+1btJFlrSdOUjc1NsizDOJ85VkWBUgEqDEFIAqmqmlGJLtIxZG84GNLb6ZHneQWikGjjUNLhnBmvn+lGx49SJtmCx86HkLtjlNIHJ5REBp5ApdlscerUSV555WVu3rjOiRMnaMYJwjhsacbsuk47SqtxTlR04xXLrvL082HoA87WeOdya7vHpUuXWFiYIwj9Xl4TP0C9f++//h61Lu9CFUw9JqpzyBmLNRW6wu2eo2VZ0Ov1AGi3GvSHAWSe7S6OIoIoJKwo0p0psdr3/ZTOoPDHwHhOVTDPQ9mVd42jtB/s4K7nhCRpNDy1NQIlA9/3yDkUCiUEVgQYV4ASOKkojaUoHYHWFEWPrCy4s7zCEyfPcGRxEYcjCEPm5+fQpsOdO8uk6YhWyzf/mqSWhYcbaZyOitUORRTFPPnkk3TnZun1enzh5Vf4zK//BjOdDjKIECpiY2vTY4UtFKXG6MJH1IqSJEkAMFUvBecgzTKMdTSSFlL4a7d4IydQAVLt0nWK3aD3vmPe1RHUFLtwdzH5w9z87gmjmpC3v6cVfMMahoMBb7zxBjdv3fQGmpSESqEEYDVxpHyTvShC6AijDdqVWKzPEmIoC4OVknQ4IEtT35eCXcN4POcfUiTtXvVm082f68cn77HWvqlxf2uL4c4mTucY53BCogHtPKNPaS2l8c56UFHaO+HhBdZq4kijjUZUJBZxcwbnU0hjp0QKCcZH1mqo4oQ37sd/H7qWTwZr9lLA1lPf1D3XPXxVG6SQWKWYXzrKR7/u6+jOdrl14zq6SAnDiDT1dRJRFGMdmIqwIBSCKIqI4tg7kcYSx4pWs+WJGqyvi7h65TJXL1+imTQpswy0hdAxzRRbj3U/6Mrd0Ni76wXvl5En8Q5IUNUfOKGwKAZpytWbt7l8/QZZqZEqIHcZVkIQKHSeU1Z7kzGGNE09Ub6ELCvpbQ/YTrZoNBLiKEQp56HY2q9Pie+ntzDX5fn3vo+jx44z153z9ZZU/UosREHI2bNnWN/Y2A2MCM/SWMPvHoWBNh2ggMrgwu1xioX1v7X2NRFCSKxxpNmQ1JSUzkCokElIXjpcEqGaMfFQ4FCEKsIah7ZVEExK3+C5dsS4e098O308amMWdoNa0zqs13Ce56RZhra+Z5eonHgVKqyDOIpJmg0fyJAhOhdkRebXqzGMhiNWllfInsmIowQhqq7rU5nIx032BEXcRC0jAoFCigClDCrwiJPZbhdnDW+88RrWaEbDFFNolBCeKh1F7kpAoERAEEjKsv5c6ZlOC01ZaqSUlNr6GsHVFbZ7WyglOXJkCaF8sFsqD9sLpvT3OGSTJmXaTp2mB7eVc2ScBeNrCUuj6Q+G3FldJc0zwjAgUBIT+izabHeGMI6wzlVkXI5Rv4+NAqJQ4aTwzvsUodih7Mq7xlGapFqcjmbXv52D9swscaPp4RVIrHAIU8XgncBJQZaWBAgi6xikGUUhcMMhaVFSGMP2To/l1VWajQZhoEgiH7kUQtDpdOhtb9Nstr2jUbFB1YbHg94IpyPDk809lVJVXxC/AbUaTd7z3HP0e302NzZwwPz8PMY5en1fCC2FpzzXxsMrgiCqIGKKLPOpYIFCSV/P5THsHoYhpY8c1aQF3shyVXSjhijsbhIwTcpQG/v+7/r69qsRepgHzHR2ZL/nJv9d/64zcNZaNje3yNMcXZRkoxRjrO+JYEMEIWGgCKOIUV+ghSAIJAQCIotzGqN9dsFaU8FGTa1U7xgYWbFPPfiNcdpJert5fhcs0TofRdOGwU4fnXuImZISU2G2J7OyWmsfCbfVmgffl8oawjBABYJSW7LRkI2NVc6cO4t2CmUBIX1zaVGtdXs3VPt+HST7QW33fLbzDa+1tRjr96ZCG99rTEg63Vle/MBLnDp1kiuXLnLtymWyvHIgjQURoAJXwfd8rYMuNUWp8XV9isXFJaIoQiEY9nu88cbrKKV46skn0YWPOu5i4utgxN4DHHZhr/vVKUz+nrzG+6FHX8ZVf7a/Z6V23F5e4Y233hpTB2dF5olQ8LDGPE8ZjYZkoxE4R6QCnDZj1rooCsiNwRYluXJ0Ok3COCaqyCAW5hd9Nk5Kjh49RqczgxMShIfxaO/hEscJLdtmZXWVNM1IGs0qOz45qR6eYTI91+5yYp1COIFwBueMBwHbEmcNQkGSRDgh0BbyQmMDQRhGFKWhP/SF9SqIyPIBCElLaE8oYzSNpIFUEdoJQicqx8tv9GKCLHzXuPY1qfVjE1fxUHR1L6nXwaTUWR7fqN7/WOcDiNpY3+vHON/rLUpoNJuURUmRpp5Z0fiseRSGNBsNhsMBWZbRbhuCQFU1KHuDEjWD5KMWUQeZmHCwJ8gcjLNIK3wfP6cwKqBUknanxezcLBcvvMnlyxdpRk1MqbHaUFp/hlkLqsrgG20wxqNTjLFkWY6NHEVRUpYGbQyFKdG2pNVqYp0hCAJGo5QkboxtivG42R9R9DjI9BnpgxgV+sf6OlPlQkqbo0uDdWLcVHttfd0T/BQFeZoRNxJaLU9Ak2UFKI9o2N7aZFRk0EhQcUi72fIEZM5DbR+H/oqPk7xrHKX9ZBLaJoSHBDSbLaI4wQpBWRpQ3rjX2lBmBWlRYJ2mEYSU2pHmmjQ1FFbRaLWRgSWJIlZXVkBrzp87RxRWUDIpaLfb3Lx5k36/z8xMd+wcGKOrdLWH/8GDySpNH5b1T+2ATGKAjTGcO3ue7kyXra1tlpdvMxqNvDGLqzbzNq1Wu4q8+qiEL9QVJEmTzKVIIWk2W8RRAvUGZR1CMY5YRlJijB4fAK5iZJuEIk5vauONzu4eXpOHat3T5GGn2PeL2E6Pf/panHMYrZHC+R4UDkaDAeloRDoc4vAp9KLMcAiyvCQd5pRZiYsDXysnHFZatPSUoZGUtNotwijEVWxbwlbwDSEYdxN9SHIQx7V+bhI7bkpNkeVVbYjfxKVQno5X70Yvi6JAa10FJao+E8LDpcJQgagb2GowBaury2R5igoDT2ePz2AJC+CQDlCOSaKQyeu4H3JXNqkeB74BoC8h9LTDomKPtJXzJMOI7twSR0/kXLl6A2SEswatLdYaMCVYiwwCjLZI4YM1oQowFoIwwknfAPfqjRvcXl7jxLFjnD//JHdu3kbnI2g1sDbwTEhYlJJjKCwocN75FnJ/I/xB1lU44Si1xjjnmbOcY2NrkytXrrC1sYmQkA5G/hYK0HnOcNBne6dHlo7AOuIKJtzv7yCRREFEJJrEccTc7CzNZszS4jyL8/PMdGdoNpq02i1WVtfoDQcEQVRliKA0BikcgQSMz1CpIBizJbba7SprXkOoBA750LK691p3YxgoEmlFlRHw/VqsMyA8pfns/AIqbuDKEpRvC6FciCgKmiIgy3PyrPQJWTRFPkCpklanxdL8QoVAcD4rHlbQdlNlLF2dUdcePionHAEnqKv1HuZ+tZ/4eb3/c7U94YN/ooKUS9KsxMkAhaDfH9BIGoClyFKKrCRLU6SCII7G1NoealY1b6Tal/YJODxq2XcnFOC8WYNUAikNUhhCIbBhgHEJ2lmOHT/O1toqrcjvW6FSGBN6QoHasXHeTpAqwBYSayXWWMpSo006zpALKbAY8kITVBDq3laPUX/IwvwCDl8bp4SnzJZ4OHbFXPDISd7GTcL3oCkmzgTnxrVDpTUY7cl6akfRAVGSkGU5RT5kOBphqwBjr9cjCALiuEG328U5x87mpoecG8NMe5657iySXbtMPh7T67GRd42jVG+zPjVcGanssu84J5DW91+Jmk0IAtLRgEhE3vgH0rIgK3NUECBUE0MTlKJwAwTwFe97no3NDa5depOy1Bw5epzBYMDJ06eYn5+j3WoSRDHNdpv1tQ0aSYsgVAjpqqLNOsVe9zR5MIX2bwfv240W23F/l9m5eTqdGbrdGa5fv0aeZWxsrJPnqe+arSLCQFUUxN4Ar4u/w8jgrO9F0u/32dxYp6sNYRTQbLcANd4Q66zW2Plx+28cew/8/a9hv2t8ME6Sv2e73+PG//ZYfzd+mXO7BAVjyFn1fp8W1+R5xtr6qmdcNIY4jGg1GhjjaZ+LPGN1bYjOfW+NVqND1PARtKJqMKsdvjFtIJmZ7VaU7Q7lvPEvhM8E1ljyBy37ZW/r39NOUf14jfsvypwizxgO+/T7PazRvl7IWIyp8fH+osqy9FDWUCBcff99BD8MQ3SZI6VnYEMIBv1tbt28xvGTT9BqtsFBoELAeAp/vNOKcPfVSLlXVmU3wl8xRlnpqYJNRQdrrYdDWePbEljnmTOVQijp4Ri1WIsUgjAK/QFalJS6rCLdOY1WUO0vjl5vh1e++Cql8cZLp9vl1o1bFGXhD9NxVgl8xreqP2AvLKi+psnAy93Xdv8yvE4ItL9pCCXJspzV1TU2N9ZphgHD0QBXpCRxiKwglsPcR/KxjjiKaMQJVhsK542oMFDEccTi4iKnnzjFiRPH6bTbRGFAGPoaryiOKe06ximcDCisI1KeqVOpKhorfP+4Wg+DQd9DHKuMab23imruPiyZDs7sDdgYHCXOVc2ZrUQQVu0LYH7hKN35I6xubZMXFovFGsjSnDRNybMMq3ep6NM0R2tNq9Vh0O+x09tAzBqSsEGpA5Tya9E6A/VO6HxIW+IDlH6clr2z7NFJvX/Xe9Q0dFgpRRzHIARaG6yQBFFMqzNDnuVsbW6RpSPiMGQ4GOCM8tTiToDzBEilLqjPEWt9+wNXkT/B3jPxUYtzpvoNtdtUbRfUCOVAKpC2aiPv67OSuMHS4hKrcwssdGe5s3wHKX1bAu1qBIR3ZsqyoMzdeKu31hPPlKbYLV0Q3lHCVU6HdeRpxmAwwFlXtWsR4/NYVE7SeC96TBxPP//F2B4Cr09tDdo6stIw6PfZ3Fxna2ODwXBIlheM0pxby3fIyhwzbpkR4axlZ2ubVqtNq9Wh3W55NkYpkTIkCSNOHj9Oq9HwPdDUu8Yl+E3Ju0ore6Kc9YKpnnMV5CuKIubm5rh4ocBYwygdjckJ8iJHa9/4rN8fkmYV/tpaiiJHKsmTT55le32F1TtrrK2tcvvObY6fOsnZM09w9olTnDxxhLnZJjcGq/QHPbqzXbTB47mR4ATW+q0xUGLscNxPHcDuRj8pew03Hw2Tyke0ZRCwOD9PICAfDbkqwJmCAOtrQKpDD3zHbGNLjPZsW2EQkhUZK6vL5EbT7nRIGg0WlxY5ceIknU7HN8cED7Oq8PAAaZoShiGdzgxiwrCf1sl+Oppm2nogEDzn+0Q5HKLK2khBVQVTbXTWjO1JiydUMAKqIwZdagaDLdbWrnP79jK3b95h+fYKM+0uZ544x1sX3yItcrqzM2xur7Kzs43JJXEY4RDkOkMqR4HDioRcO5pJSGdulqMnjhNGMVXY3xfWSolTVDUJDy+aPW2kTc6/yYbLtfHhqb5zhumAnd4WaTbEOE0QSHQFyZNKIERQbfySsqxYFiuoii+gd+RZBs4RxBGBhCCKENby+c9+hosXLvPss89x8uQp2q0OKgg9VSqA2WUb2q8v1juV6UzVpF5qndSOJDA+7K3RCGlBWMIoIAwDjCkJhPQseE4SBgGNJPGwsdhQasNgOCIvc5IkYWtrk8bKMteuX+fWzZsszC9w7NgJwihBqIBBmtN1dY1BDbGTlaNUrcPqf5PG23Q2aT8I3v3Qo8bhpEBbX5l3Z+UON69dp91oMNQFQSNhod1EVDTFg+EQ09BgDEVZemdUSpywvuebEAglKK0mLTIG6dAzeAUhVoUYGWKdosgNaW6wQpGVBuUETniDLRIS5wxGWJSjYmB0rK9vcPqJMySNxvQEeMd6+M3KvTLbDo2TpW/rYAVYiTXeAbRGI0PJ0rEFbq03kI0AXdVI5HlOnno6cGN8PRdI30rCSdK05Oq1a2RFn5nZNieOnObo4gna7TalMeMAWz2vanKfipy/2kurvlOPGBI0qa9Jtrs6CBYEAUmSIISqem4lJI0mjWaDstxEqsATPRTF+IyPo6DKDuSEUUC73arInjwUOwzCu/bpB3KW/ZakDqD4v+uG9M4KfBVhgJTOQ+9kiZKWoMpWzs3OkSQNisI7PLIOplRBC2utp/WuAonABMmP83t9pXNjjG8T5zwBiZK+eX06GlVo872NnQ9iPzxMESJAVEEx66xv+C0dpTUMsiFbvR3WNjdY29xg2OuTpxlOG/IsZzQYUWrLaDioVovvF+iZTDU4iy4y0mGPrU1FFMXMz89itWa22+HIkSMEUThm3MUahHg8oJ2Pi7xrHKVpuJYP+nnMOrYqjLPe0I0ib3gp5alnA6lIRylJFNFsRDh8YWFZpAgZsDTfxQm4df0q3eef4wMvvp+ZmQ5fev0NdnY2sBRko01W71zi7KnjnDxxnDjqcmflOknjSZrNLrgAh8KOoTe+X1NYbQT3Uw+TNQaT0d+9xmtddB2gpEMbQ1kUDPs93+hT53RbTeZmZyi0JivKsSHpsxqO0vju2CQQRiFaa7Y219jeWieKY1bu3GI0HPLcc8/Rnen6mKK1COdQykMXyrJkOBwSRTHNZmt8HZOQvEnI/6RRdi+Chfu5Ke757PqI96nKatMHJxS+zE0CHj7lu66XpOmQG9evcuXKRfrDLbY2ewx6KfPzS5x94jxhGHPxymXCyNJqtzBuBqM1udAV/bwjjiNUICjKDGNAqhjrDM3WDHPzi74uzIlxJNR3zhJIHn4UbTKzAPtnVzwc08+d0WjIdm+Tm7evM0z7iADflyPXqChAlh66WfcmCsPQG17Wf4YMFEZY33APAdbD9sq8ZHNjnSRpMeoNWLt9i5OnTvOBlz7I0eMnkCr0tOQO33fqAUVxpx34sT5gbBzArpPmMzlQFjnrm2v0dnbY3tggTQfEUUggJEkYYsMQbQ251pgqutiIYlQY0XGOZqvFjevXuXbjOreWlynygsUFT9UrVUjcaLG10+foCYdyHksjHGArEJ4zngW0dh7F3WvugRsjFeW0w9EfDlhdWyXPR0gEx5aWOHPqFP3eDtvbPUZZRp7lvnF2nOCAovQGmq3mjxCACLHCYQRkRqOBVGuyYUY6yshy39h3OOgRhiEXL15BBopGq0mj0aDdbJBEsSfPCBQSQxxHpGm+xxEWE0bhwzLS6uh7/WOqvj9e/O6Fk9QN8Ky1aFMiMBiRU9oUGad0ZiVRGVKUkI4KojBCB4Z0WFAWBUFgETIEoSpoo2SUpmxsr9NP11lfWebI4nHOnj3HkSNHETJBisgbZy4AoUDU9ZPu8aqXcAaqmsfxT9WQ2hrf3FuKqm/YyJGOUqzzzqSzjlarBVbTSELiqIEKmqysrrK6uoLRJc1mwpkzT9BsNfAwBIFwPqtd59RqIpDHAX63d9+u//B/16aVJcBJgZMGpxRO+Exk1GywsLTI6q1b4+uruYRrW0ygSOIILY0nFYE99spuTWtdR+4dpUD4gZRFXmXDK5SKekh7029SRFV64Ge9ZZSlbPd73FlbZXltld5wQGk1VfMDDB59MhwMaSVNTs4tsrKyxvb6BqUVpFWQWgpBp91kaWmeIIzZ3NxAqoBWs4XRJVIpZCApdUkQ1bXyjzoc8fjJu8ZR8v0bxDgv7IyuFqKjKPyEGw569Ha2uXNn2bOwCd/1GUsVnY0B7fscVMWF1lmW5udod9qUpuDSW28RxzHnz53DInjr4gV62xu4cgR6iB5tsLp8hdm5ozSaczxx8iTCtECEvsEkwrdt8WGQcYH//ZTJyP5k1mXS+UCAcKqCi/iHNtfXufDWm6yv3qGZRMx2GoSBICs8m1gdyTHG92nykUKH1iVFkRMEkkJnFeTLb2JXL19grtuh3WyigtBjZIXvS6ICRafT4dYt3+gwjpM9G1pd31Vv0NNO0r0Okvt6wAg7Nng8NKCumwJXdW+zIqiyhRZtNcZqSj1ic+MON65f4uaNy4xGI7b7GdvbQ9rNLq1Wi16/R56XFGVBVvh+EXEUMdNpYhMftXO2RJeG4TBne2eIcxFBEJG0Im+s4GEwzlFF+yzWCpQVvvfVQz5s7wU3m4Tbaa3Js4w8z+n3e9y4dY1bd24idE6ShMy0O9y5s4opPPWyhzAxJiPxdXLeCLTOm1u6NCgh0cJ6DDuOLM04eeIkzz/3Aptb21y5epVf+eT/5qu/5ms5evwkKgi8s2J32enuR1ZpPxjfNNGMExXjnZtiZXIednjr5k1efe0ViiyvGmQLXwtpawiQh8WNsgyQqIrSWamggnDmmMoQjpRCNRKOLC7SSBKEgFarxWiYejhsTbVezW/pqPri1IbN3oLu6Wvbr07pvkDvXLXOjWZ9+Ra9zVVCqVlaWOLcuXN0Z2bZ2mwxGGYM1jdJs5zBMKUwmkJbjIM4CJHCF+I7JwiiBnHSxCGwTpDlBb3eHW7cuIXWFqVCAimxuiSMAno7m95pDASNJPEEPmFIFIYkSUIzCbHGVo26TbVHCmxVFKGQD63qZrrWs37Mzz2BcxJHCMJgTYkzOUIUFHrEYLTN9s46mzu3CZMCGYdkWxlp4fVpnC/Wlyqq/ByfidLaMBiNmDUthoMhRWmxUc7Kas7m1jJPPHGWJ06fZ7Z7hFAE1Rh9w2THbluI2oB71CacxOKsRlifOfNkDN4WqFlerTWk/YwiLXBCEMcJcSMiCBRSOqwuSJKoorX3ayeIImQgiJIYbT2E2BSWKGzirEAEGkcV6Rc+k1dndR+l7O7f9XrfRQY4V/GwKr8fa+kohCZzBYNixHDURzUTCBRRGCKkwgJ56aGf0vmsUFkyJvwQwqNsJvebel8GT0durUbIgEAJtC6AugZv/+x9Dfd/lGKtRuuCfn+H5TvLrK6tsLK2yjDPUFFEnCQEKmQ4zMizAiwsduY4c+Q06Shl+fYKFy9eZLAzQFdnqFIKgWccHo4yjp9awAUhg1GKxfeoCoMQgRjDa8fwyQfUmua3q7xrHKV6IQuqUIe3HNlYX+PSxbdYXl4mHQ4wRpPnebXxebpOZ23luyi0MQjhSBoRsVOeejYderpm4Wg0GqyvbpCnmifPPc3CwhLXb1xjZeUWm2ubmCzGlppsmNJobHKt1eGpp15gphtURpFEhrKKHPhvvd+LeDKqOGmo3p2FqXC9CNLRkKtXLrF6Z5l0NPCwQCnIRgPPvFJBEN24s7gdFyjaiQyWVBKtSwaDAY1Gk+Ggz+r/n70/65LruvI8wd8Z7r02uZmPcMwTSZEUNYQilFnZ1ZVVL/3Q36Ff+1N2rdVTdWZWpiKkCIkUSYDEDPjs5jbe4Uz9sK+ZOykpMrIIEqpinCUsByjA3ezYvefuvf/T0RG3b9+haywpKQnwjTIZSu1Nr5USs4O1ZbMs0zaX6lvv7S+tt59Ndckjls9qxS5fUUbkbySr17zrqlrw4vkjHn/5BxazU7xfMp3Omcxhe+saMWh+94//iHeRum1C+4OuTH2MpLhjNcElqioBGcE7aWwTBBfEsj7vYrNOOym+bJKUQtzklPz6Idafaw4uhdGt5XaE5D2hrnHlguVkzJvnT3n15AnlYk4nz5hVJd6B82LkEKIgdFpbQReCPJzbt4yK4KO4twV9WZgE7zBRU5YVGzu73Hv/J9x/733OTse8efmKjcGQIi8w2v7JffJ97c3V771Ck1YmE5JXAqREuVjy6sVzFpMppERmLSpJQKVrGhok30eQRFBGzCpiCDSNIyVwvs2esoJA2SKn1y3wdYXt9Oh1cs6OjgShyQ0x6RbZtsS4cptbuVz96X33X9MkvY19zGxOYTOCa7g4OYfkee/eLe7ee0DRHVC7QNbrMdzc5s3xKUkZXExC6Moygku4EEg+YLTBZjlZVgCG2WxBCIG6lOy72XTO5miLra1tijwneoVq7fiVlgstNAvmbrmmiAky6tja2qLfG/DmzSvu3r0niEmCGED/wCryq5/Ltz8TrSxJRULyko8XZizKCy6mZ4xnZ1R1ybKaUVVLxuOKZQmkLqBxoSEqRUgJfJTBWRQ9b+Fzzk4MWzt9TJNoTM1GtybLMp5+/SXnpyfcvvWAu3feY9DbRKlCXs+ajiuN3Irl8C5XiK02sC0uQ1LUPhBTog6RkBIBceQsugOy3DIcDdjY6CMFeyREMXcyJmM+a2icIytyEkLvPzo5otfvc+v6PUzWlc8lrvkK6zygv4I+6fL8TolVmHBKsX3mBzEfSJ7ga6bLMcdnpxyeHPHm4DXnJyfEsmHDZvS7XbZ39nj+6jX1+GJVsAld2hhS0qi1GY/Q9K/Sta21QmVPkeAdMTiUkppq9X2+TZtc1SfvukkCOD874cWLFzx/9pTlck5v0CMDUtMAEsNi84y9wTa7d3fYHG6iMbx+fcDnf/iCJ0+esVgshF0RPSC5cVprfHRMF0sGi5LuYIBD0dQ1fZvhfeTiYkJmjQzJaMG9txCB8X+k9aNplGBVbAgenGKgKhc8+vIznn79NVVd4VyzRgaUUnQ6BXVVkxuLzTRGCxVNsEmNVlKcOVczn3lBgHzEqozx6QX9wTn33nvI/v5NqmrBydErjg9eMp83+LqhnJX8ofx7JqdjHj78kBu37pB3u2hjpSbSmfyo7+Hh8O3J+LepiaktvEgBQmByPub46JDlYkEKgRiFpRFDoKm8UMsAVViM0TRNzSqYt6kbjM2oGo8KQqfLbCLLIikFTk5OqcqaojOQ9926jhkCMYjFrPShEZ3a1Gi1ovysbug/LTb/3HrbeynNbWtlm9bEAZRq8yQ0ROXxqcb5mma55PnTr/j0n/6B5WyMdwsW8zEhwsZgn7pqODg4ZTpboLVtEQAjLj8+0MmtODEqg7GCPjoXMbag09UEv9IbaIpOF22MBECunO9WNvc/8Dn4zzUZqiUTkCLBOXxdUi1mvHn5lBdPHlNOZ2xtbRFCYFo2NM2C6H3bKAllKoQkD1ODPFCNNJLRi2ZMW0tM4GNEJy1NfQxcTGccnJ0z3N5le3ef3Z19Dg8OOT44ZHO4CcaizNst8r892f/2r9VaGc1cUkxF3za5uGA2nqBDiwB7CagNIRECBJWEShwitXMoK8YNwQt95RIZo0XVRYf44ukTfF1x88ZN+bfljLqakfcycciLCp+SOGL60OYSITqCJPfjX9IF/jmNxXddUugoNjaGRNewvbnB7Tt36PU3qBq/ttUdjoaMhkNc9Ax9Rdk0+BjIMiNhqnVDZizaWJn6G9GJTidTZtMpKQllqtvtsrm5SVNVFJ0OW1sjVpm9WS6cfq013W6PPCta6lrD5OKC8/Mxjx8/Zv/adeygaAcrYoGsvmOA8b90ffu6uxqZARDxhOQIacF8ccj4/I3Q5RZzlk1DVTXitOkS5UKhbR8XFLWLYDS9YY9qMSc04rpYdHpkeU6Mgcl0TuM9u7tbbG1vQRC0pVpWGHXOs6bkYnzA7dv3uHnzHlk+RKcMY1Yo0wq1eLeT7pSEFhhixLWo5KJuODk9oXEO5z3z2lFsbBJCQ6/IKPKMqpzT1CXdfh+tFcZmDAZDppMTFssFIUZQiclsysVkzItXzySX67ql3xlgUGg0KV3V6L57glRKwhqRz6WlwclokISnLEtOLk558+oFhwdvODg+YDyZMJvPiY2nZzt0+gNqEyjLJa6pW72yEjpjCjRNjVKGlYmMDFzNpfFTe8bo9tkbkCbNGo0iUVcl/cGIv3TpvOvmG+A//If/HydHR3Q6OQ/u3+PW7ZsYY6iqBpsVmCyj2+1J5EeIuCZw8OaQp0+ecXhwzGJZkjAMt0fUTQUxiGwkM9h8REiR0/Mx28aSd3p4FNF7Do+POR+fcu/2TT784AMKm8ng7V1vyF/Z+tE0SlpbUnRrtCOlxPnZKa9evJCwVFcRgkNLTrHQc7Qh+IDtFBSZlSmqznDei/VikgCz0IoulVJUZY21Oc45njx5ymC0RVKJ0WjI/YcfceP6bTb6BeVizNnxMUcHRzxzjzk/PeXmnbvcf/8D9m/eQmf5mvT7ts0cvi22vrrWxVoSKaZWmjoEzs5Omc9meO/wIchhHw0JKTq9XxU+9TfE5yuRbkrgnMcog9J6DQ9rrSnLkvliwXBzC5QUtCmJc41r3PrvXYqOYTXN/nNUrtVavYZvT7rftkYprenjkvkQY8RFJzSLFHChpPIlF2fnvHz2nCePv+bi5AxXVXLt+QxtMxbTkrPxjGXZoLRB6WxNRbAx0TQevVGIFbiRzyc50dEElOhqCIQYsFnGxnCENiIuj1ECDmFlP//2jQn+uT369u+vfnax5fmH4HG+YVkueP36JV9//Ziqqtjd3cVay2QyufxMUS2qYQgkSDLI0DYRXNV+T1qqymrCL65jSonYNfiGqqo5OTnl3p27qLwg05ad3V2+/vprptMLtou9dpr5l7U3/63rklf/l6mh36BGaaGUEGV4MbmY4OumzX6CEOUe8T6sETMJWtUkpQkx4XygqZs1pUJrWitYg9aCsB0dvOH44A0vtrYYDTZIIXB2/IZoAqPRFjrrY1Qm+jslDVaUXuVSMH1lf77v60sB3W6Xn//8F1TLGXkuRbX34tSntZROxmpGWyNm1ZyNOMRUJdP5jKzTITOWZZpL3lQKhAihpWWv8o4GgwHXr+1z794DRqMRr1+94truDg/fe0CeW2KM5HmGUgprpbg32qLblNpHjx+hkmRXnZ6d0usPUCvCnQprWtH3vb7ZsK7OeTm8QvA0TcVsfsbJ0QtOT1+yXI6pXM18WXMxKWmcwsQORT5ExRpiQVPXgKHby4WyFxuybg8Am8l5U1UVKDF1uBgv2R/tcX3/Fjdu7DCdnzCfn+Ldgtm04avH55yfv2H/xsfs7d0kzzsY7GXG3jsu4XxLtw8xEAicT8Z8/eQJr48OqJ0nJqEbmm6Xeu6YLWUQ5uslvV5Bp5MTkkHZXAT4rY2zDwGTaxrXMJlN6fQ7vDp6znBrSKeTYxCDCGiR8jbr7Z2vZFrUZjU0lByp5XLBweEBz5494c3Bc6bnZ5Jd1lRErdjZGDDqDemZLpPTUxblnNliQdW4FpEClHze3nmUThiTrQ1YVmeL5D7Kz1Rm1bRJo9Tv9+j1rphF2JbV8i1Hzu+LKfDfsjY2BgTX8NOPP+LG9X36vS6o1k5fGUKIrWmNlhy4quLzLx/xxZePuJjPcUkMtyrvhd3jI87XdFWHjVFPXJubhsViSV9ZtDZ4AspmzOZTvn76FAV0OgWdTkecCv91rdePplGCFXgv3P8YPG9evWIxmxGjEzRJJZQRvrpuxctGK9HgI1MMHyI+rCyefVtoaAmCDOAQob4xkeliwj/8w29I2rB/Y597d+5QVxU2K/jok3/L7M6EV8+fsNHrcnJ8xNPnT3h1dMjHP/8VH378CVn+/dF94E+nut+YarcP0JQizjWMz04JXhpNlCRE+wRo2+5qWjczKzea1dTyKq3PGItWiqauaJoGEiyXS6aTCddv3ESvqr/2E1ssFsClo540Si197MrrXU2z/2uF7NtulAyKqBQR1T4skti9kwjJ42PFZHLC0+df8frFa+YXCyZnE6pFw2hjm+v71+l0O9Te8fLNGy4mNb1uwWS6wIUaVggfkRASWVYQYwdUJCbFZD5DpRySRVuFzhQ2KYxRLJZTzidnjIZDTNZbN0wptQ5fP1Cj9O0C+tvNUkKaJe8bqqrk6OiQx48fMZlMuHH9Op1uj1evXlHXIszVSsrMddMfQNwHRbAbokcriCmi21wu7z0hJmwmTXpmxAnNe8e4HQLkWxlGQ1bkbO/u8vLVK3obAzrGvDV9EnwzO+kv3YOr95lW/w2570LwzGYTUgio1u0thNiG42pi8vjWOUk56RGdc2uto1a6Rc0vLb5VSvjg6RSFhDQuFsSmod/t8OzpVzx7/YLr129y9+5DNoZb5FkXbaUIji1NQ6tEVN8cTEij0jqYfYvW+zZs6UVTCaPRiG4nW+eKaKNROhCC2OUnBVlhBQkIrVOWsdRlRZWShGKnhNEGQ6IsBY1S7evsdhLLZcnx8TEnx8dYY9jbk+ZdQrNt+0thdCY2KUkcTCXxODIcDun3B0wvJrgbNbkWLY44e/0wRdo3rrUY0SRCikTvmV6MeXXwhDdHT5jPJkQf0EqT5ZsQljRVwidNUh2ahcf5iKamcguywkpjmjJUyjAdi0ngqkYKW6UwVu6h+XzC81cviSmyf+smf/Or/4GqnDI+O2YyGYsm8fkxr49n7F2/ycOHP2F7e49Cd7EtqvJOlwrEVlTfhIrXhy84PHsj+XU4yqqkqjx1Ldle9WxGbBZ0MsVotAEgzYBPXEwXTOdTstwSnbADInAxvWBrd8iymvHy9VP6vT55Xlx9EULn+Cvok+LKgCEGlKsp5xPeHLzi0eNHHB0dsKyWMoBOid2tLfb2r7O7f52NjU26eZc3z17x2WTKoq4koNd50pU3Jlb7ly6bMpT5ZlDsqiYB0eFKODstwi5DIqGdf/PcvWqq8vYp+f9t69e//jWvXr6kKksmFxPquqbX65EX3bZZ0oTkOT0/5fmz57x++YYvvnzM6fk5PkFICecaai96VRWlcc0T1LWcid28IACurhj0BzJgjJH+cETyNa8P37C1tcloNELbf22Urq4fTaN0NdArpUS5XIrTTCvGTEIYbzspeYDUTS1agaQIMaCCQmmLWjm0tIVBC8DgYyLTEasNyUKeG8YXZ8yWFRezCSF4ru3t8ofPP2e68Ny4vs/N+x/w3v1b+Kbi+YsX/PafPuPTP37BjdsP2dnpAG9fV/OXCrRvhF8qKXSi8zRVxWw+a00aRCPknKPxok1yraW3MWZt1bn6Pit4fPUeymUleq6U8HisNgTvmM0mNE1N0dFr97uQIrPZjP5gY41Sfdth6881RldNKb5t8PC2l1IK8VMTxYK0NJEQHYvlhNdvnvPs2VdMLiZMzi+YjRdsdId8/KtPuHvnPju7e+jWXOD1wWuq+v/JV0+et5SGCEqT2RylJGRvWVbYzKKsuLoFlVoRFFiVsJnCaIu1Ga/evKSsF1zf3+f2rVvsbO+iW92KXje43//T9i/Rr678Dbl/QmA+n/H4sWgGh8MBWWY5OT3h6OiITqeDUUrev4EYWo1Vq92RyWyN0knua3WZLaSVISoZcISYyDJFkXdxIbCcz5jNZuxs7QKamGB7Z6f9ucfcudclrqyk3wKidHVPvr0v6+s1ASG108HUXlueypUs5xN0ikRt21wp0XhZbVC5JtYVwcdW5xRbdM2IK5cSysrK3KZ2CU3EaMPmaIdf/u2vJWupXnJxfIAvay6OT3nz5DlPvnjMx5/8nA8++inWbpCUOHUKItJSOlcOgSstqGp1jt/DZaZadFBrjTF5a8CgqeumbWAM3pdUVSnnVdOwLEtSi5Sv0OBOpwtpRZoVdE1yUSN5pgg+Mh5fMJvN6eQ5H7z/Ht1etxVM2/a6aDU+aWVzrVqNpejjhhsbYkzz5g1lWZLneaujk6b1h1rfuAdToqlrnj19ypdffsFscU7Rgb3tG2wON+l1B8wXFf949kfqSuIiauVoygrfNIToUHmGiwnQ5ConBlg2HpsgNF4ejkajslaz4hzTyYQnTQMK8m6Xu3ducX/7GkTPbCLB5s8PX/LVo0ecHp/xs5/9igf33ycZeOfdgQokLWYXk8kpp2cHxFThvKeuS+qWotg0Bms0Ra/L0lfUwbOsHToLlE1DWc9xjadqKhofQQkyE2KiqmrOzk7Jc8v5+TFnp4f09nst9V9o13INv9utAEAFgqtoJhe8+voRzx9/yfHRAct6ie3k7A9H7OzfYvfadbb29sm7A2xW4H1o9ZRvCMqgsXIP6jZXSqt2+NXSLUUYKW2yErrqt5/xIYprXJZ3SCEyHi8x9oJbd3z7hIntgFt+wcq+X71zdG4w2ODDDz9kNp2ymM959fqAmCKjzW2Gm5sobXn95g2/+91vOTk+5fz8gulkhnMNlfPSDCqFzXJMp4dOUFclrvHMZ3OMkfB5m+c05ZLaGHqDAU1TEV3AZBm1azg6OeFBWZIV+Tvdj7+29aNplHTLWyUFdIosZlOWiwWhpWmEJFOx6KQoiSkyKytSSHQCFNaSjMJYjQoK74RzonQOKGJwrUZF4xNkRZfdwYiHP9ni9cERZ+dnXIyPIJUE5/nyiy+ZTRf8+3//74hZl6zT4eaDjKPzGcElulkmD+7vERK+Otm/SgVa84B1i5akRIphnaWiWkg4piT2ydqsLZqv0u5W4XtXJzgAIUSKTHiwIThSLFgulzR1hc0ytE6igYgB5xzD4cYaMVL/TNH17Qbw25S772Ml0fVKi5Ri62hXMR4f8/jJF7w5eMFytmA+WZCZnF/89Bd88N5HbG5ukxddMX3Q8jDYHG1x6+ZtXrw8YFk6rM3JOx2sNXhXs1iUjM8VWzs98iLDKnFLcrXG6Iws02RWpMR5ZvC+4mJyhlIRY8R9qbPV/dY0//ufZn9bC/ftazqGS7rnYrHk+OgYECTk9Oyck7MznHf0dK9FeCXbJyCUD2s0zouGJyaF1paqrinyPtZkBB9Q2qBbZGM1ocvyAtfy4ufTmVznWkMCYxQ3ru/z4uULNne22draFiTC2h+EprFCx1JrfRuSNDyL5YKqXLAioF4dFiil1vx+WA1YktDs2uGHuhqe2zYaCiDJbHhjtMlwuInRiYNuQTmf8rNf/g0np6c8ffacTz/9lJAUP/noY7qDEcaKPXcIARUVGCNNLPI6Wi+q9mf8KQXzuyxrDB6IOqJbQwtlEtoEfFXz5s0Bz58/p/Gesqo4Px8znc3bM0QCF7VS5FnRNo9R8pUwRO9lh5UVAX/raNbvdiirkslkws7OTiuyb89ClTBGnjNKS60XvMc7R7/XZTDoY6xiOr1gY2MDpRH3wB+oRrt63q++TqdTfvvbfwDg/p0PuHvrNqPhkBA9ddNwcvKU6bQU5zVjhPabGVIVSI3H1R6XhBLUUNP4iMo7FEWOpqEqF3gn8RHEQDfPIYrr4qOvv8KpyCc//4QP3n+P7dGQnes32d65xt079/jqyVM+f/SYV4NXPLjzHkrzg5nP/KUVo6epS4kseP2MyUQ0XM5HyqohJk0ns/Q6Hay2LOeJ+WwipjvTkjoaYhDKnVDMxPBAawmmtblC4VjOS2YXEwptOXzzis3eJtnWHlpZtGqHaO8aXQMW8wteP3vG15/9gdM3rzHJs7mzw3vXP2Z7b5fOYION4RZZ0SWqTOQMretqEytBr31Ya4xWzwEZtSgJNSYJdN3a20stkciy7BuMlaZxJBLdXp+mqtcoel03xG8MuP5UE/qudUqq1Z8ORyMGGxsMRiNOTk85PDrm6+cvaXygXC6oywpSZLgxwCqDQnExmRK9R2lDJy8oOn1IEHyUEOjgBT32jm6/h1aa6XRCnSKDXhdjcmhqlDFiSz6dsLm1+U73469t/WgapVUAaAiO5D0XF2OqqmqpYmK7meU5dV0BEGKkbhpIEm6ZJXFICimsC/6UVg4sK4GlNAPOyQOw28+5e/sOt27d4g+f/oGjozdYFeh1ewy6GcvZmKpeEkKkrCq++PwRF5M5/92v/y29bpcURCT7VvfhWwfEnzssVl+dl6DUywBMYYkYbTDGiktZUoTk1g1S0zTfmJSvOMVCU9GSkK0tRssU3BiD1orlYk5dl/T6fTGGUDAej+l0OnQ63fVrXIXRKr6JHK1e9z+nvfo+lk85EFHKEdKSqppw8Po5T5885uT4iPliga8Vo94mH7z/ATdv3KYoOmKX6muSag+0uub05JDF5Jxepim1Iuv2sEUPD+SmoF7OqaoGV1mKboZSmqzboQpi+4xOZEahQ8RGh4uBatEwtZrOpMtoesHW5vZ6QpeC+hOjgu9zfbuJvWotq9og0+HGiJ///JdMJ+cslwtevHxB3TTcvXcPlaAqF2itsFqzORpQlRXzpSNEj49RNHQxklbhzUEeuo1zBMDqTKaIiG1qiJGmqrkYj3HOU3TE5CCEhuFwA60VT5484ZNPevR6PeG6f0fa2J+7/75NVV0hk+t7E9BKs1wsaeqmpZ/I/x+uhNHmWdbqli7PqdVeay1FGiGsrWPjOhg50njHYrmk0x/QyzK6gz7LcsHO/j53HrzHg598xHyxZHwx48mzp3zwwYcUOqFNJhTRlSPX6jMGklLfm1mBbhswpTQog9IJaxVV1fD48Vf8/ve/p1qW9DY2mMznlLUj+NUQR2MyQdeUNm0wqCCMi9kCv5hLw5c0ZeVI0ZHlGZHE+GLM69ev2RxtEVuqsNZCHzVGcKnYujHO5xOcq8kzQ5FbNvp9zs7OuHZtH5OJcDr9QJ3Sn9NzhhDodnt89NGH3Lp5B0sH5xtCrKl9w2RZSrafNehMo0nUlSeFSK4z6sWS2gc88sxTeUHe6dHpD0imBKWYz6egEr1ul4619IqcrJMRNByfn7P4p3/kolzwq5/9nP3NLbpZwe7WNezDgmruuHXtBrnOUen7QSb/W1ZV1Tx/9pxXBy94c/CK2XwqrnV5QWHzlnopuXV5nkMa0Btug60ISuGiIQVB4IoiBxNYLhuaRqjBSmV0ezn9oktuLNViydxccHT0io2NPt3OgJR8i4C8+0bpD7/9L3z15SMy4OF77/Peew8YbW1T9HtczOf8w29/y6B/wk8/+TmmWCHPEpSdoqMu56gUUN96NqxYq0nmVqgrEQ1yVsZWa2q/EZ+yQo5TO1iSPL4S731rjhPXv1Y/S6nEW2ACf6cVo7ggrpwCi06X/eu36I12+Kfff8oXX35ObCp6uWVjOMSgOY1nBO8pl0tcY7BFTqfoEJPQyrvdLo2O9PtdMmtoXMNsOqdT5OT9vjRR3rHR77YuqYqkNMuqeudUxL+29aNplGKUmzEm4alPJpP1DZaSIEjy5yRBkz7ItLAt5FLL7c/zHK0jTe1wUfQ7tJoZCV9sJ8EhEpynKkt2dnd5eP8B4/MzloulcEX9nCLr8/SrL8it4quvn1B0uty//4Bev48ygua87efCXxKSf3vSH1FEpSEqXAj4IL78ttvBh0jjvTiHIQWcabUgK+Rnhf58W3wpTZMRqlTy6+IwzyRDyTmHtpaylKnt9vZ2+/mJnae19ht0pW+85rZx+nNakqt/7202TUkL6a5uFlyMD3j25HMOXj5nMr6gk3V479Z9inwD36KQL168bN18LnUnLjS4xjObLVAqcGN/h6IoqGPGMkgeibE5OstYLmaMVYPOwHY7aKXpbXQxZOimRIUArsFVDpciwWhUZpkt58yXc2JK8nhtqQz8AJSDbzfi3/yzakXKCa0Mg8EG7733ASfHB/zh9//EYr7k9p07vP/wIW9evcYoCL6mk+dsDPooBWXtMEYRa89K3xOjcNRNJj8jz3Nq5wkhiqtkiwJaYwjOcXFxwXK5pNcfrq+hGOHmzZt8+vmX7O3tcfv2nbca/vzn9uny1woFktcihimBxXxOnuWYmHBehM8KSbA32qCsIaSA1tIMrJLstRadX57laNXahrfDjUBEWyUB0a6hiR5VR4zNcDGyrD3dDcv23j6j3cTudceXj77g2bMnvPf++2RagTZtw3IFsVjRXVUbYvqW12XRBLQT6LpxvDk45NPP/sjZ6RmboxGN85RVI4OFLCcGudYUBjBUjafxFVHnDAZDOp0hWX4hzbNvMNaAjiSV8NHTuIaTkxOm0yl7e/tAm1vVtrdag/MN5XzGYjYWg5XQkFJgc3PE0+cvKcuSjaxoXe/eDUqSUmJra4tbt24xHo/Z3dsnZhlN8jQ45r5k3iyhEHqxCw2NCywWc2yINFWgabwMEI0YpGRFgW3fl48S9Jx3OzR1jdKGoujR6eQU3Zx8o0utIy5EXrx6BTHxNz/9hOs7e5RnY54/ec6dW3d5cPehNEktxfZdrt/85ne8evWcslowmY1xrqbT6WKxEpqbrDiuaciMmI1sbV/DFBWLxRKMJcWKjUFOt2upwhLXulNWtVwjCkPsFwx7Q8rlgmq55Oz8iO3zbfb3c8y7ruqvrOODV9y/d4efvPce+3vXsXmOMhl1jMTKczZd8MfPvyBg+OiTn6FMIeYLzlGXJcv5jBguz20QWl17S6+Hois2AFwObkMIEuyc59R1vY4hqeuaIrOi1/QNTdO0jsdXa4Y/HVS9y2XJJNoiCiupCRGXDJNFw+ujC0qn0SqjQQkTqqlJOlK7BXUzp+jk2LwQVhTSXWrTnsnGUmyMoG6owwQXIQ+RLIfoHWUJPrP0OgWlC2L804b7/uuS9aNplEBQpZQE9ZhMJsR26hBbLn3T1BijWs6/OLt5L83VSiy4Sje3WUaMvhVGt/wrBF1KUdKTU4gsJjO2t7bpdbrsbG0zPj9jMZ0x2GhotOPkQHF2csL9Bx/w85//DWfjMfPlku3t7TXN7Ydwvfu22DpECMownV0wnUuB3R8M2N0aQVI8f/mKk7NzoU2t9vfPIAbW2j8JdHONk9wcAsHLwZfl2fqz8E3N+dkZ3ntJMm/XusG78tqvNkZXTR1+MCg9LZjOzjk+es2Tr7/k5PiQ3GQ8ePAJd27d59reDazNaLzDuYDzMvFqnKOqK5ZlyfhizLMXrzk5OSH6Bq0MWScjRcuy9CgSMdV0uhYXpSBpqpqyKbFZlyLPSR6Sg+QdKgSUX7lERaplyXI2FzpCGwL4Luj+f645lxMdkWMZg80zsjzn/OyMo8M3bG6O+Phnv6RXFJycnBB8QRUcy3LJolyIcJcINmILhVsmok8YZcXkIIcsz9pGv9WUKYg+oa0mxYhrasrFjHI5hxRR2hKiApXR6XTp5oY//P4f2djYwNi9tZvXd92Hb9Ndv0FRVKCMJrqWGhwCwXuaumFrc5PQNCxKoe+s+PortzZILZVs5SgoZ5RWiiLP0drK1BUp8BXQH/QpOh18FDF1SKCsxYfIbD5nuLWDbRuiomt5+PAhj7/8kkG/y/Wbt9B5jjUWbcx62ivvtZ0IK/XWi1zZLy2CLqVRWrNYLvn008948fyFoDUJGhcudQlJ7os8F+v8BETvhTZcNmRFJM9zbN5lMEw05YIUZa8SCRcc2inm8wXn5+eSq1R01sYS8jURo8eHhuAbNkcDhM3g2djYaB0cpww2Rqt38lb35Z9ba9QyBBSSP/PgwX3++Mc/8uzFM27dvYNPnmk55dXpaybVGJVF8J5qOWe5qFFIXlDlPU5rolZgLbZTkOcFJiXqckmzmJFbQ54LRar2ARcTyoqbp9aG3a0tdK6Zz2e8efOK3CpORts0swX3bt/j9u27ZJ1CDEH+Clzejl4dgEvs71wnNo5ZE7BJE2uPMoq8yMAqtHUkalywuJQofSBoTZ0CKgUwOTFFrEoUeYbvaMBjMwshcXI0pjA59+/dpXEV88WMw6NX9AcDhgNxm43h3U/9t4dD/s3f/h0boxHG5kQMLkRcgu5gxEcf/4w3L57zH/7jf0SZjPd+8lF7DAhdt2qfSdIYKfr9AabIuJhN2wBfuaessRhtvtHYrKh1pjXUWhUiidCyfSS0uCwXraHNNxuiq99rpWF/V0shNEylJUgeZZgtZnz66aecnhxiVeLa7h4f/eQhRwdv+PT3/7hmV+zt7VLVnsZFQmyIyhJ8xCS5x6uyxmQOk+d0un2Sr1uUP5JlFu8dVbVERcnPW5bLd7oXf43rx9UoSbQ8VVWxWMylyUESv7MiB9cACVK4nIq2/PQYc5SS31ubCT9eh5bKodr8jI5ceKVbT4TrusEoS5F30GgGvQFNXTK7OIPhBtEndvdu8PDeXbqdTouYaEISa0yl/rTAfBvrajNxmWx95WdpxXxZ8uirJ8zHJ5RlTTfT7F/bp9ftMpvNOT07F39g9c3w2pWxw6ppsdZ+A8r1TpA7a+XvBO+Zz2ZMpxf0NgbM2iJkuDGi0+kIGtgWXiG0Wqkr7+HblME/t19XEa23uabjQx49/pJnT78mpcj+tVs8fPA+1/fvUJgeWhfE6MhsTdYRw4J++z5Wmois6PDoqyeSNVIuRATc6dMki0aJQ5tSwu/PN9E4fHAi7iWgQg1BoZKH4EjB42rAyAPVVTWhca1+pb0P7A9j5PDt9eeQQFpjFG01eZ5zVi158fIFeZ7zd7/+N2xdv0m1mKOUYTafkbxjlbYeobWTj1iryTLLfL5EKU2eG6HcaoNRq7BoQUB1m4MWUoN3DXVdUZVLIIqtM5aQZCiyvTnkN7/9HZ9tbvHrf/vvGNi3I3T9djO/upZX+Ukg96ZoBKPcI5MLqvmc4NzaXXKF5Ij+Kq61gSGUV6ivBm0MIca185s2ipiELraztYXJOgQn1vJWK2J0KKVZzOfys1Aom6O1Zjgccfv2HV69fIGxlmvXb5KUwjeRvChoX5CcgzGxyjt7mwOM2OoCVVLo1l3u4NVLXrx4QuMrku5QpSBFZYziiKc0g40h2mY471raokfFQF3NWCw0wXfwLgirQGnQFhUD2mbozOJDoK5rJhNxp8rzHOcDRZ4jzw8w2pJnXUpbsLm9Q5bnoDJsXrAx2uT8Ysz+zZsyKf8BAYKr0/PV0G9jOOT+/ft8/vhzsp5CZ4ZXB685OjmmWs7bIUJNch4TBK1dNg21TtQJos3oDQb0ez0sRiIP6hIdHdE7sk5Bb6NPXTqmyyUhBba3RnQiDDs9bt25ycvXz5nOLjg5PuDs5JBPfvoz9h/cQmdZS8MSZ8V3bQ/+k3v3uZhcoI1mrHJi1sUaoTWlWKEzhachWddmuSnqAGQZJkvMp+f0C4MuDE1TkUVPz1oak2i0fBZda6kXUyYXJeU+bO9d42J2wPHZIZubm/Q6XYyWQc67XnneoaodG8oSlCUk8C29zpqM/WvXuHXjBn/47HP+l//l/4vJOxK6nACl5WxThqgiWadgc2+Hze0t4vPnnJ6eS90QE5GAC3GtJbx6jhhjyLKMsqX9S/0h7J4QHHVTt3S8Vd6T2JjDJfVOvWPtGy27JiRFE6F0jmcvnvPi5TN8vWBzOOQXn3zEaDjk/OQYhcL7QFEUXLs2YjKdczGZsqxqnC+lxtKaTqeDj5ILV9gC1U24ypMU1HVFTobRiuhqzs/mZLu7TC/OKZezd7sff2XrrwfD/d5XahElEdtuDDfW3HmtNd47sUxVtEGrre1uasMslVhAtzn06+DGGKUx6Ha7fPjRh/zyl7/k7p077Y2qqMoK5xxGG3rdHs55NjaGOB+pq5rgG5bzGSfHRzR1CUlEiiF+P3kk/xw9bb1TSWw1T88v+PrZU87OxyQUs9mci/E5ZbkkeLc2CaTVIq3od1eNG1b/fV0ExoixcrC1MnISifF4zOnJKZOLC16/esX5+fmf0ASvCjm/oedIl2L2q83aqhn5S5qst7H+4Te/4Q//9Ae0svzi53/L/+nf/Xvu3f+ATneDZHICmqgtSVnEkFeuIaWNWKz7yItXb3j95ojZbEEIQBCCtkpJNGEpUViNqxeE0FDWFcZoRsMBhQXlGwgNKnli8MTWjVArjUYRXYAk9sfWWFC0jmjv9uFw+ZnIn40C19R8/dVXTCZT/uZvf83D9z6g0+lQFB2MMesH3uU3UQSf8E7Q3E6n29LmxMbXuUbuP2PJspxer8dgMGClI8msleEEq7yXy2tWvlqsyeh1enz5+edcnJ214UHfbV29Xv+5/RENpeP09JQ/fvYZJ8cnnJyccD4+JwQvxhZKGkVj9DpY+NKiXwpi5xzeCZK7mp7qFuWJIVIuFkwnE5x3EKX5Mkb2ZTGfodr3nCKkKO52t27c4sb1mzz7+gmnx0eEuoYY8bUT1LelSqUY/+Q+fBtnmjIi7leAihDqmqODN8xmFySTsP0cCkuQCEpxp0ORtKGJgToJnU6piE6eUC+Yz84k98bXeO9xTaBuPGXjWSwbYmyJQCkxm82o6wrnamgNgFSSiXBmOjRNwuQbdAfbdAfbZJ0BiYzNzR2WZcliuSAS1k3k972+cZYin4H3HoVYrG9vjvjq8ec8/epLzk8OWUzGLKdTYunpkmEapFHynqQUTgllp7+3zXBvB1vkoqxrStxyhooOkpO9DA6TG/KeOEg2IUixV9YUSXFv/zobRU65nJF05Gh6yrie4XXCE0TQzyU9612tDz/+iFt3brMol5jMkrV0pxQjsUV9gwtEnxNDgW8MdZWwpmA+K6nrGkXChVqMfwS6xRpLZgxuuWDY67C9tUlKcHRySqc74Pbtu5RVw8uXrzk7O0dY2+++fOv2RxyfjvFJE5MmxNboKQRi0zDoFFzf32Nna8RsOuX/8//+f3F4eEiIidliiW+bgjp66uA5G59zPh6vB5oGJe756fI8vFpbpJRomgZjjFCSjSGzlp3dbfqDPjFKYG1VVnJ2XbEJX63vyxH3v2VJTG4iKogKDo6OefbsKU25pJMpPvngHg9uXyd4z2Q8YTqdM7mYcT6+4Hw8pt/vMhoNyKyiqWfU5ZTgSvrdLhuDkbAkAqA1ypo2qF4cLFPwWAPz6QXj82POTo959fLZO92Pv7b1I0KUUlt4B0C42S9fvlg7tSklHP8ooSxSTMZIiODb8EqttRQavi3W2+ySVaFuTYa1GS74NV+2cQ3L5ZL+xoDBxpDpbEZV1eTFgP7GBt55ymrJl1/+gd5GD0zBcDQCpVv9j3qrKEhKV/NgVOuqBazNcdvspFBxcvaCo9PXbPf6ZFnOcnLB0+cvOT4+5aylxsm0WCyAkxKBeYgtHSgqMiXFllnRg1LEWoM1hhRCKzBPVGXF2ekZzgcuJhO6/Q2Kbhe0bgXhqywFJRSMkEBfuvCthL6riePKPefSHKgtyt/aTsp6+ewNO5t7/Orv/o7bd+7I+0ktymEiKUZCEPvXEKMch0maOBTMFguOjk7RWPZ3b5Ip8K7Gh0j0Ceclq6tyDZlRZJ0MCBgNuVWkqPG1JzQJ216bOkn4bEK3boSB6BNFlq+dFFdN6LtY325cVYueJuDp11/z6NGXfPDhh3z08U9RJsM4T1F06Ha7LZVLqK5SoACtvatzojkUWUzChwaTGZrGrW2cV8GVMlnULRoKKGmUYusap7Rkv+Atm8Mtru3ucXR6ynI2g7dE0/hLpg6rJl+1Tc7x8TG/+6ff8vzZE7pKo2JEtY1RgrUzntYGbTW4hPeiyVkVAcZI8yfvSVDw1F6oicjZ6Skm765/ZtRK8jiAcjaDEMmMJWkjZitIHtXNG7col0se/fGP8OFH3LhxC5Rk85hMoZVtkaW3f62ldmy1EmnPZ3OODg/x3tHpdig6kj1TlqU0wUlsxH2I4tSmxbgjtkYiStgoVFVDUq1eoG1+gk/Ui5omy+h3crJOzmKxoKoqRqMRRlt5HuRGKEPOM5vN2dvbEzbBihqkYDQcUuQF52dnbG5ukn4w2o8GJddWas0mghYXt3k1o6zmzC9mot/Tis3BFqFKLJYLkgfVBKzWOKsxWmOSICA7+3sU2rA8O8PXgoorVs8ZTUzif5iSBqUpuh1CDHhX01QLTo4OKOslrnaYJAj46ckhjx7/keyjX7DZ3wKxZ0G/40ZJWcPe/j6HJ0ccHh/ggmS2dXt9QhAE1pouWTFk4QzzRU2MlsWspFw2dLJctCZ1g02gdU7jIM8KMpPRLBdU8wm3bt/EFhnn0xkHRyf88hfvE5rEm1eHdLKXbPS3GY2K//oL/p7X9s4+L1+9pmo8JlkJ4m1d1lQb2nz71i1evHjJ1t41Pn/0Ff/z//z/4P69+xwfHfHm8BidPFYDKlK6mrKuAYVRmhA9qm1E80L0TcaY9SDokg3T6lCbkqKTs729RV1XTKdzFGo9HPpzbnfqLddY/1uW0kqe49pyMZ3x+KtHXIzH5FbzyQfv89OfvI+K8ix4/eaAxbJivqzpd7vMZhXOR4bDPvvXdomcc342xjU1i9kUnQ8g7+G9Q+mw1kYLuyQQvSJ6h0qB5WzGrFvw8sWzd7off23rR9MoSfEhXPSjoyOOj46o6wprxYkly+XwUt+aWiilca0IXJyiEt5HYkiAWae3LxZLPv30U6FhlBXeC+UnoqldQxEC5+MLqrJGa7hz9wN+/etf8fr1C548ecTJ2SGff/kHbt5+yP71m4QYW4pZfKvTjlVjIYVSO6BL7WQ5CgSdUqCu54wnr5lODqEacm1jC6Usk4sZ04uJUA1SYmVEpEhoJbkEMYqbWmx5+dZqNBZrDYu6ElclL1owrUSoHvPE+GyM94G9/WvcunOP4WgISrUc5qsoQvszE9IgtcWeUJCuTExR7R4mSO1X2YC3tp+3b93nF3/zS/b3r6+2ESGKtAeziiSlANNShaQQXdmWHh4eEhpPrzOgLGvqxtE0ER8jdVC4qNtmy6GTpwgN/Z7GGk03l/DeqvSkFCWPA9FqaJOjjaZeVGv72SIvLpv9IJSrH1rEumrS/gTZS5HFfMbXjx/T7/X55S9/RXcgQvwMBd4x3BjR7/UpF3O0TmvdSwyCzmaZOFcaa/CNZGcIKpQB0hhWVXWFniGokcqEGlo3leh81CrsVaHznNHWFnfu3KWqKsmmcPV32gPFN6f7sTVFWTX30jIG6qrm1cvX/P3f/4ZHXz4ipYDudemoyxDXGFbfR1HXDaGqhaakLTFeInZaG7SxSE6U0FeBywDaqASdC57MGIzRRK/odPt4568gkOIQFVPCKKHY3L/7ENcEPvvsM0IKXLtxnVx1UdFgTTu80GLY8TantzGE9b7FlJjOJswWU7SWoimzwr/3TtgCYqGfg5astxDFDj6SgVZE32ARfZqLAZsX6CyD4DEpYFTCRI1RBpRmOl8wmc3Z3b9OSIncGLzzWGMYj8dYm9Hr9QHVDkvAtDlWg16P2cWE4DxW/1CZJTLUM8bQxAafGqp6xuHxa549f8L50TmhEWOBvf199q/fZHI+x7kJmc5QWpO0Q2cai6VrCjobQ8nCqytUU+HmM5paXMe8tWRZZ31GoxJZLm6d3pd4tyTGjNeHr+j0Bow290jB431JWc44ePGUftHj/fc/YdAdQozk7xhFSUaujdo1LJZLQvAUhbynECT0E5NR4pjXnvPpnAZL6Rw+GVRW4KJCB0H9k7ZkeQejFSY5RjubxKak18npDm8wWT7j9eERDx/e4u69hyxmDQeHJ1y7dkq/P3ynewGwubnF06fPqKuSztrACXR7rYVo2NndZ3t7h9HmiE6e85///nc8/eprfOMIrmE46FIUOcoIkt1UzfoZvYo4UKi1k6e1ltQOXbUyKCMW/lZrCpujoub46JwYhEZslBFEKgZSyhDd08owB1bVwrtcIclwwnvHi2dPOXj1EhU8D+/d4eMPP8QaS9U4zs7PmcwWYg4VNI1XhBSo6jnlsmQ4GrC3swcRpuMJi8UMakdvU2M7ovfWKFKI8ksrXC0DC0Mit5p+t7tmB/3rkvWjaZRSW1A1dc3Lly95/eoldV2TUpKHaRCqjtbyAHbOCZXCXG5RTBGjpOCsaxHnrzmzQFk28pAIMt31IWC0ZzqbcnR8zMXFBTYX3cmtOw8Zbe+zd22Pza0Bn332ew7evCTLu9y//wGd3oZMilvE6m2t1fTl6r5cpbGtMJf5fMpsMqYpS0qvsZu76BXlMDh8DOvvo7Vu8Shp6laUxizLhOqVEnVZsbGxgzKGyXRCCEJ7Wv090Uxo7ty5w+07tyn6ffIik8+gnexG2sKuRa9QEAmoJEnUV9/bZUPI+s/fx9re22G0udk6yK03VVAOFUUjw6WZhdZC5ayqJa9fvebLzz/n9OScxbJhXgZRnCeFj4YGjTMaTyJqaL3EKZyXANXgUVEQmcZ5kldYnRFDwCgpuJsQKDodsiwTO9rVZ5wSYsn9/T8g/px27OpkT7U0uKODA2azKb/4+S/Y2d6jiYm4okZpI0Lm4YjoGnxw7X5qsszQaSf8ZVXhg5fCJUqAo+z5KlNoZeXPmpeu2wfUcrkgBN8iUpLrYfICayz71/eZziacnZ1850bJtA2H2GrodbGfVq8rBvAlB69f8Pf/5Tc8+eprujYj05boGqLN2mavdXxTuv1I9TrvJwShvgk6JvbZMrRxxBAp8mw98fde4QGDxjeiccMaQlJsbO3ShETUhqgU2ggKLQOMFRpjuXvvPufTMb/57W/41a//jv3rNygAqy06mTbM++025SkmoZa2eTSz2RTvPJm15HlGbi2LsoKWhip0S8ntEi2AmJpok4v5RxMkPDqz5FlBZzAQas9iQfINmbVktgNR40OidoHziwl3nReaq47yemKiqmu2t7cxVxrWlZ9FCIGNjSFnZ2eU8wW9ovNW9+UvLRUjOkah+4XIfDLh8Vdf8PrNC8pyyXAw4v6tG7x69Zrz43N6eY/UtM52OtIQxDEQTaYsKAteUU5LfLkkLT11JYYNKYlFfcJTFFYaeqXJlcJqS9HdILeGxWJJVhTs7V4jpIRPcP/+eyybCW+OD3n85SO0zvnwg48xea9tuN/dCklyFuflksligQZ88FRNA60pkbGWRsO8WRBMICiD84lgMuqYoRvItSUkT0yaFDWFNhA9Sil6vR5aa/ZvXOfl8RnLquTo+IQ7t+6wf+MWR4e/5/x8zL27797MYdDvk2WW6XhMryfIaUiJEGVUGHWG7fS5cf0ms+k5/+Zv/4blcsk//eELbIImOIILeBsxKJSSGkIchyPa6PbsjgTvEduD1aO2pbCjJZMMYU2UZcn52YQsy+j3Ld5FaOUUwj6Qf7tqlC4bpne3QpJB0unxAc+/ekSsF9zY3+eXP/s5w40RSsHk4pS68ShtSSrDZH0CRjIng2c2m+E8DDYMN2/c5tb1GxwdHzFdNCg8mVXEqNFZB4KjDJC8o25KiDVGKzJjGfR67O3svNsN+StbP5pGiaBRCWbTC6aTsYjdkiSph+iEsqQUWhlC8FSlp248Wiey3LZ6JE1QUoj41u8+obAml+C4FPEBoRkAmog1isODl5ydnrKzvcNwOASlmSzmLJuGjcEmH77/Cf3OgN/97recHhzw4ukXfPjTn2E6G0D+vUz9r2p9riJoq98vZlPq+QwVPJtbAzY3BsxOTzHaEELTQtmtYUOL5KjYFsQxtroQA8a2gbSeGCPb29uE4Dk/O8e29sTGGEE4rKXX79HpdsmLQrIVROhAiEFELCqJna5irS8AvkEpW2u7kqSX6zb98fsQAjd+SdnMyTs5KQp6EUJaDd+/8RMVsOb3pMjpyQnTyYTZdErlYOE0TfvATUoRswKKAqdA6wyrOoRqTCJQ5BatEnVd0jQO7yLOSaGWYsAaZABAomstxgotNPiAMqa1APthio5vh6Ku/tvl76GsSg4PDvi3v/419+4/EDxOW9AKrYNM57s9bGbJ8wK39GuzE6MV/W6Huq5xXugvwXuiarPAaCmeLaUtyyxXaaZighCYzxey/+0yRsvEUhs6vT47e7t8/fVXLBaL77QfKwRIt3TMtRYvSjEQvef1i5f89jd/z+GbN7z34D0++vBDXj1/xhdf/HFNC165dSol7NKVTb/zbv1zYhTnw6vUN9UOGWT621qhtxoA1zRi+qHEWIPBgKPDA+qmodeeQ6vQXRUlNwkjouzbN29z9Ls3/MP/+l/45d/8DTdv3iPTObojwa6rm+Ft6QSVWlG6PBLGu0RpRdHJyQuLUhFXVRDa2AdaLZc1mKRI3uMB29Kcg9JUUeyZi05OzIxoLaxG5RlFp4OxGYtqifINWivGFzPqxpPZHOcieWaZXFyg2oFabIOlWuBOUJFckCaFYjIeszPa/M578S9a3kOSgeDBq9d8+tk/cXJyTNHLeXDvA27cuIXROSlAvfia6fmF0A2rGq+FxWySRiNNtNYGt/QEIDQR5TToQt5sy+BoGo9SQe5jE1sEWPxh69JBDstqxnS+JClNkVl2d/fZ3HyPYf8pX3z9iK8efY41mg8/+Pida0lQtGhSKcxuBU1MUNcURYdkLFhxhux4QzdTEA0z1xDJaKIgGslodHJird4auGif8E3JZj/HWsv21jbXr+3x5PkzTk5OmUxnFEVBr9tnNNpE/xVM/W0muT6z2ZQb3FgPfUKQAGthMGiu7e9zcvSGbqfDv/8f/j3KdHjx9DnlbNLqTsH7sI4xEGaLGG2tWatazkxW1PEkmXAypFDkWQ65pXFOTLdo8zDrGucuz0T45vDuXVuDA0Qs8+Wcrx495uL0mJ3hBr/+5S/YHm0SMfgI48kCHyImK/BRkVRGUhlNU5KCIkbDYuFQxmGt486ta2xtj3j68iXjxZIQuhRZAUGLCZlwbNugdiBEyViyGdd2rr3rLfmrWj+aRmmFmEwuxjR1JROGKNqG2D7BrdYoNCEIjV8aiUBT1/jgyYqOiOWTl2K4taZd2Y6ntIKJNTopog4E7/DB0+0UbG6OuHvvHlXV8NWrV+xe22FrY4NBt8/9Bx8QIvzjP/6Ozz/7PUVuefjBz9DavtWHgxwKcU27W0/24cqUOrGYzXHLkuQcO5sjuh2hB0g2im4n9kkazTZADqWk6WkLOHH9q+l2OiilGF+MubZ/jWt715hOplfojSIqds6tqXExRIy2a9toKQXl/1u9VlAExPAA2sYJEVuv90zpFrhfGXG8XZC92yuYTi/YGIxaUxDfbqz8pFaWQEytzXeIuLLhzas3LJcVWXdAzZyKSKM1yeYYpfAxEbQFYwl4tJVEdqUsRWaIMUjzkwnRz+YFLgUaV6FVIgZPWVWSL0RrWmBkCKCVxiuFlhneW9yNf9n60+dS4vjwkF6vx/sfvC9TVjTBpxYpkc+96HTJ84K8KFgul6zmitaK21uv16F2hrpqqJ0nRWkeLnORQpvFtaLMXr53ow3eX4YVguQ7KaXR1pCpQsKQQ+Do5Og7vf/Y2hynK4TS1StRMXH4+g2//+0/cXF2zi9/8Qs+/vgTup0ub16/aml7qb2/WF9rPgZq70EpnPcyeFBafkL6ZubQ2mIfmYavkOTY3q8xRZnQKk230yHPc+bzOVttptnaiAIpZELwKGvI85yb127y2ae/5/c+Ufy7LsZmYAyFzr5xrb2NM22FRoqgu2Y6nZDllkHWBwWLssTVFSFEvEvkRY5kthls0nTyFsmOCV832CLHhZrMSrJ2E2qM1iQDPgWq4LA6UTsHUbExGFBVDbPZkjzLybGcTM9YzmbcvHkTaVFbg5nVh6wVISVslrE52uT05IS7t25/5734l6za1aASR8eH/Kf//B85G59z584d3nv/PUabm3jv8T6wtbPDzUXN2ckJpj3rfQw0RGww6AQ+RZmzWC2VrEkEFWiSIZHIc4tKAatFZB9b+qW2MniIIRAUZLbL6ckhT54+ZzAccfPGPt1un0F3xE8/+jnaWj794lM++/T3FEWH9+7/5AfZq7+0UoS6blgsFoSY6Pa6EnbtAlYpkrH4lPD1gk5HY/o5F1XkYpHAWAgZzoneqrAFIdQED2Xj0N7RN2BUw+HxGdduXnD35g0OD95QLpd89umn9LsD3nv/Ibdu33znuhoQhG1zc5PXh2+IKaG+HXmAhJ9ubm6SZTnT6ZTrt+/yf/7v/3s2+n2+/ONnXIzHgtS1WXHCLhGkP8vEhCBGyfyToU7LBLhCw9Ra9JcxQl7kNK7BB9+yTgQFjKv67F03239m1T7w8sVLXjx/xqCT86uf/ZT93W2hBkfDsq45PD6Ts0cZYtKSSRXBeUX00Mm7JAWzRSOmGuEVN29uc//BbQYXc2oHucnxtV/n3uVWU3SHLOcBVzUYpRkNR+zu7r3rLfmrWj+aRgkiMTjG4zOCb1hZQsaQIF3SyMQtK2C0bsNlxXrXezkMUwzoJFQeMXLQIpBGqAainVFtUZxIyZJlGVvb27z/4Ydsbe0wmc7Yms14+fQJ92/fptMp0Lbg/sOf8ObwkMOD13z+2afYfIP7D39Cp/P2qBlrXcS34GbFZfESQqBalviqoTCWazu7FFlOnuV450TIaw3Ri+vfSlR91U1vZWYhBajodYIPTKYTtre2GW5ssFwsSIjlurGGpqmZzWZorcnzjtCSgkIZg9GroNlVunfbDKVWr4HogCRE8lKgqVrUK61cBN8y/WfQHzGfle3kXkw/YlqFYAYUiZAkW8U7T70sOXh5SFM69m/c5tnBhEWyhCwD3dDymYRXbQxRB5KrpYF3DtVEmfqmWrKuYoMLnoBQhZpGkUIDHlTdWr8D3U4hzWKS4lgbKw+2H2SatrpX1ApoazPMhP5WLy548/oF9x8+JJqM2NIjjA4kFQhIOG5WFORFlxCl2Qcn15oS6oXNFI2PhCgFbUwJq4TcpokEL+5IQh3T7TWjRIiPIUXdDhBkGKC1uaTqBUW322Mw2GA+nX7nHZHhxOXeawTtaILj+dNnzMYT/uaXv+LjT36GMZblcikPeqNJWihnq6IhJjEMcc4R0qUOy7TmHSuL/izL1nojH1ZnVWybJ0EA6qYWlK19jVprBoOBoGhXtGWXAmgNRmNiILMZ+7t7TPZvcj6+4PjgkI2tTWxRiE7xip3/WylW2uBmgLquObsYk+WGjjHMl3PqcgkpiGtibjC2Q0jSJBulWi2WAR9IvpGkgyjFnk5BhAMRdHLkVhNCQ0XA5laYPMqwKCs+//IRO9ubcuZ7x/VrUmQ45wlJk2ktmV0pCqKroJPlbG1t8ujwgNnk4rvvxb9gXcynLBYznr14yuHpMXfv3+XBT94nK7qS8xPk3IpKs723y2w6w6eIzXMyRH8TMZCMWOu3kHkkYYucsqzaAYzQPTtZLrqRvABjMZ0CkxVYLLGqQFk57kJiuajIih4bgw2yrEBjyWzOxz/5GEh8+sdP+cPv/pF+MfhB9uovrZQSTSUuasYYTBtebdBEpXEx0ckzciK+qTB5IteKwipCEApsiokUJSMooPAJYjKolGGVIU+B49MxX375JQ8fPmR71Gc8v2Aym/DBBx9w+9Zdui09712vSMLkGZPJhKqp6Xa7og3WLc01RkF8bMbu7i7j8ZhrN26xu7fLg4cPePbkK7IiRwfJt5S6Coy19Pt9bt++RUqBg4NjppP5N/ScMthtf68F4VRKqPxwORxao0dc1jxXz6G/Bte7+fSEF88ek4Lj57/8BffvPcToDI8iKVjUJSenJ7jGE50DArnNmC+WlNUSoxJJdUjKEDpDJjFQzR3heMLmRsHe9ianp2NSLEkpgE1oq0g6CaKJYmtrm83hiExb8uyHoQP/72X9aBoloxWLumQ2m+BdA8gNLH764nQVI23WksJYi/GS32OMJsbU0nIiVovKgCQ+/V7JZNW0/H2d4noS3uv3CTFS9HpsDDcxeUF/Q/Pe/bs8ffaUFy9f0O1v0O/3qauG0dYu16/t8ejRF/zxsz8y2trjxo0bb20flFpxc9OaO79aq0OlrmuqsiQGT6/XZ2dnh+QUw80RztfUi+UaPRODC1rFuCKFlcg8rA8f78WNLMXIdHLBRr/HcDhgPp9K46OUIAV5RtNU+Ohw3mFtF23FvS0lQUBo+1olXKN2aiXTb4Vui2/B9WJSrU27aRG/dgLN22sONjY2mExeS7NXWKSAv9QjgDSh3gfKcsnzr5/hXc39e/c4PBsznV5QZIY6RHSoRHDqItoYjBK7XR9KdIRU17i6ZrEM5HlgGAtQFqUT0SOCdaNBiVhdnLYSmc3odrtYu6Kc8RZ34L++WeXBegAAmtpJREFULrVv7WfUWrSipEA/PHhNVS0Zbm6C0kQEUVwZ8hujCaS1OP5iOoUonGulW9oA0txELw/aosja7B9pqkLwxBAkhDSK3X/wct/rTCiiq+HHCq286oaUtKbX7XFtb4/5/LtmTLRoVhLb9pQSRguSPZ/OqMqSX//63/DwvQ9aK2WHa6m+6gpClhlL3RYXPl4aG0jhoNdI8crm3HsvU9bYiqOJGCVxCUqbtpAXZDfEgLUWrWGwscHhybHQFo29giit3odQcPqDAaGq2b92nRDh9OSEm4t75N1S9D1Ztg6ffht0F63FjQ7AeUdVl4IYZsL3JyX6vS7admhqGdYYaynrmpRb0PLeZVDmCL4m1pU0X1YGNFYbjPcolbAJgmsISpOwzOYLFInlYsHBm5wizyiyjNl0ysHBAdeu7zMYbgmduN+l6ORkVhqzPJN9TSlxdPTdEMp/6fqP/+k/cHxyTIgNNjdUdclnn3+KMhk270g+oBbEyEQw/S5Zr08RPNE7fEqEqDEqx5gMnxRBBaFXGzAZZLmmk3cobEYvE3RcG0tQhtp5iIqO1aiUWNQ1KTWEyNrgwmqNVboNxVZ0ij6ffPQLrMr4h3/4e373n/9X+L/933+Q/fpzK/nAcrmkaRqKvBB3V2Sg4pF6IE8FRTJs5n0mviJWjq1+l8rl+EYTo8fXDcFLMCsmQ9vWZER56lCSNYHjgyN0ijS+JBEwVqE09Hrd1lb+3VPvEpAVBY33zOdzOp3OmlqsQJxwFSit2dvb4+iPn1HXDd1+h16/R39jgPOO+WzxzVw4FKZ1ETamQ1EUwLx9blyaECkttOV+v8/+7g6L+Uy058jAckW5W+comtZ2/EpkCfBWzqPvsp599Tknh2+4f/cO7733PkXRkWgRL9b4i+WM+XxKvVhSLabkFhpX49wSY+S5JqwVQ8ASlKabZyyrmtiUFEaxM+qxrBqUTlS1E72pUtS+Aa3FPCtJw/rt2vDHvn40jVJKgbqSQnQw6FOVFculuIVptdJPyM210t2olvMv2SQytcyzTHzoVSIFORBiinQ6BdubIxbLBfPxHK003X6fu3fvMFssuZjPWdY1eW9Ap9ujVwg39OmrN2zvXafo9nExgTK8/8H77Gxvc3g2f6tokuxDuqTstEsODfDBrRupxXKJd4HhcMhwOKKpHDbPGG2OKOsFKkLeyRiNtijLmslkuj54QojrKbZVcrOvCjZSYrFY0Ov16HQ6LBYL+v0+m5ubbAyHGCsFXbfX2mwHh8GQtBKkxbTuWcmjokanldNdIinh3YpjtBaHqxSIPpBlQru5xA7fzur1eoQQJLyt1SRobdYPC3HbESrjF59+QZHl3L9/H5tbTs+O8G6JSprYOGJdgvcoL9bExuRYbclDhSHhXQUoXIiEoEkpYxXObmyG84GUArnRSP9pSEm0PJ02h2iFEqxcbX6oSVpKkqdDEttYqzUheZq65umz51y/cZMsK6RgjxDVJYVDr7Vslp3dXYwx1C5hksKusqIAYyx5keOjmLEoZdrGUVCXlRYOpFhRytApLN1ul8pJLIDN7J/sS0Kuu9ROOU9Ojr/jbihWFueis0p41xC95+jggJs3b/KT9z8gaY0PTlzYUiRpjW7z2YqiYLS5yfl4TDOdorSE7eJBW7NGb1b0lBCCSONayh2qRZqM3LMuBLQW7ZH30lSmtpjodrtUZclyuWSr27uyP/L6ZbIueV+D0YjtpkFlGRezKc+ePuEnnZzMZOvrbqVL/K5LtXq/mAJN07RGFpGqctRliatrBhsdEoqqKgmxYrhZiO25EevhGEXnQPQk30AjqG6IYtSj8hyTYtsoRFIM+FYQXdcNWSa24lZr+t0eWZYxn81xTc3Z+IJkM7r9LhvDAaOtERuDPrvbW1it6NqM/mDwgzVKpwfHXFycsjHqo2Lk7OSopWtalLaYrCApcQr1zhN9pHY1KsvQIWKSDKys1RSZoWo80dXo5NBR0bWJopdRFJnclykRnJept48Ea8kHGyidYRE7/qqsyaxhNBxitaKTZdJM6gRWqMG9vM/H7/+UZl7xxz/+4QfZq7+0YvAs5nNxN+x0iGgiQp1qvCepRAqaAkjRkQ+6XNsYMSk9HRJVcDSqpolLaaxMDqZAZRkmWVSqKXRka8OSmgVNVfPg4X2eH72iWi45PzvF3b1PJ+/9oMOuv7SSVhTdDiazXEynbG5vs853aocpguxr+v0BucmYjC/obwzlPMgMW9ubTCfTdYSBVsIEmU0XfPX4uWgnfd1+S7Wu0ZQWRomg/3odozEvl0IpDtClC0bTBN+6zsq/XZ1Dq1/vGlF6/OgrOkXBhz/5idA52/M+IeZi04sJ89kF5WxGuVySvCeFRGbF7S8lj/cRpRMm1RSZRYeaejkjGY9rety9e5vJdMHy8FgYNknOrpBg0B9Q5DmL6QXeNawCef91yfrRNEogiFC/1+fm/h4vnr9kuTyRwq1NTlWtpWVKUngWhVpnjyQi3ieCFotKkkyyfZR/v7W1xYcffcjhwQFPl8+o64a8KBhsDPFKcXw+5vjklK2daxhjMSnn2v4+88rx7NlThsMRdV1RFF3yos/dOyOu39Fknd5bvYm1FhtT1dJPhBfsW/5uK+j2Ttzt0AxHWww3t5hdzOgPBhSFYXxxgtYZW9s73Lx5l4vJjEePvmJZLte6I2PMulEKSTQgRms2NoZ478nznDzLWCSZbud5Tn8wwOYZPgSxak6NOLtpLaZZMa1DMkltrobR+BiJqkVxYotdKE1mczY3t9jYGOEIaxrl22yVskwKwNlsRr+/0SJJK4OMNjPJO968fo21GXfu3KHb71LWJfPFlOgrmjIQmkB0zTr0OPhAKBvymJERUCkSQoO2rVha59TesixrGq+kiNYKpTI0sUUf2nBbpclba/AYV1Srb+ZJfJ9LaU0KV01DRNdnSEzGY7I8587dexgrye6rJsIoLTqIFDFaE7Vhc3Ob4XCTk2pBpA03lL+CQhoIH6IYV4RVyKg0B4KoyX6kqIQaG8VlKi4rOp2ODEKu3m+t98YKPLHWUtffzfWOFQVx9bXtdquy5OT4mA8//BCswYWAS4jmIUVxWNaa1DaCq+HD6uWttHu2dZNcCeRWJhba6NZNqm2WtWZzc8RyucTN52ijZcoom7lutLrdDjbLaL71vnU7GBG5lyHmOb3RhgjVi5zR7jbPnj/l5PCAvOhg2nDft7Viu3+RROVqvG+wmaGqK+o2mDizOZUXB66QEi44oW6mAEF0gyE4Ql0BniyzGKUITSMNcghYowmuJkYvVKu2mcytodfrMtro8+DePXa3t9jo90gh4HxDWVVUzrOsSs5Ojjk9OSKzhq2tEX/7i19y5+ZNhsMhXx0evLU9+efW7es3MCly694NDo/fMNwaUXQ7NC4wX9SUtaP0ntl8Tu3kGaCiIDt5lhOdx5cOHyqyBB1jUC390RqL14nS1zTJiQ1248U0SVt0ZnAJat9gtZG8rhiwWrG1tUkiMr2Y0C0KaP0gYwxYW6DRDIoBn3z4U+YX5z/IXv2l5Zxr9UngKk/UGhdiiybJ9ehchaaRSIMQ2NntsqkVlWrIlKOixqaahY8ko0AHQgotE8VjCPjG0cksW7u73L77AJ3nfPXVl0zGZ5TLuVCj3r3p3SW6nWWMx2Pu3r0LrKjnmlUeJFqeQfv7+4zHF+zfvo0yChe8eDSpFaOldbWN4oBSLpsWIZczSSuFNQYayYkT5CMxmUypqyXn52fC/GkbftW+trIsW9e8H244+N+ytDbcvXOb3b29K9IFyVpsmprzszNcXaFUJM8lCqKpa1xVo7ShKApiBNeUGD2lo7t4NyejIcsMVSmZb71eV6QBbUCyioo86zAcFnjX0DQ1WW6Af22Urq4fTaOUEsxnc6aTCb0iw2qxrU5RKGNKmEFrwfflpFQmHKktOBonjYW1OdZYYus82e0MKJc1Z2cXuCD89cl0ztMXLxltjggxyE1cVzJVI0MD9+7d4/Mvv+Tli6dkWUY376B1ATanMEaKwLdczKp1s3AJO5+enFA3FTF6lsslg8EGo81ttneukXd6mLxCW8OgO+D6jWuE4Nna3KTXzUlpg26nI8GE7cRGUJaaqMWlJpHayQ1Ym0FKbPQHYhrhnUzGvSfrFkxmU+qmETpRW9gRAykEsV6nPTBXyIjVYNtA2rSWxWNNxs7uHndu3+HevfsMBkOh773FLA5jDFmWsVgsWj62uSKcl+b86OiIzOa89/4t8qxDVNLYdbsdgbrLGd5rse5snd6892jvcUkCDUMQWkKInsVySaeAjZGlCZYmSBo8JDIDYb3XUujmeU6322NlwpFai2StfyjHH43S4pKmlIIoRYH3nlcvX3Dz9l36G6OVJET+hRYdWoKWKqdJWtPpdtnc2uL46A0xiZYrM9naVVEpMRVYLkvJi2oDkG0nb68PANU2lQrnGk5OThkMR+zs7NLr9a8EMkNsmy3iZROS598t96b1X4D1hFP+++GbA6y19Pp9mhhoYsClSNSKqqlZlC09pZ2Cnpyc4IOIn32by6KNJlOZhIqGb6LG2mih7CTFyjWqrqu105+gwKu8I3l9KLDGsr21xSq3avWC19TEJE6USvjHdLRiK7OUizl3797h5YvnZEWXm3dyiQyw9u2EHStNSPL+p7MLfJQivHEV48kETU5VR4LWopHJDIuyxGCwBKyrxaDNV/imJOVd8uEAi6JZLAmNo6kbmhQJ0aONwljodruQWppt9LhmybW9TR7cv4tthz4xiB7JJ09ZLjk7P+f8/JzZbMbR85fM7tyBG9fRxnAxm3/3vfgXrHt373B+dkpqEr1ig+2tfW7dvYvWltBEvAtM5jPG4wuWiwXHJ0e8fPWapqVyZp0eowwI0lwqAoQaFUDrgmo+IyVF0e9jtKWpIz5YDAX9IseEJcHNsKkmMwV5btgcjshthqtlCl4UuWhNWq0prRl00pFFtWBjtPWD7NVfWt57qqpa04lT2xRoY8QF0Hucq0mxwoTIIi7QEUyW0R8OJaexcUSjKEKiqUussdhMo6IX+rXy2LzDBx8J9dYUOffu3uPo8A2zyYTx+JzBYAuTvdOtAOQcs9YyHI44OTmmruvWFRPRB+uVAZPQ9Hf3rvHi4A/MZ/PWQTdwfi7Nr5wnV4yb2sH1iu1jDFf+3JqktFQ8rRRNXZNipN/rf2No2+t2WcznLBZy/YgDalqf5/YtD3D+t6xf/epXXFxc8ObgkJ2dHfK8IKQAytLUFRfnZ2KA4kU/HoMg4cE7Ol2h1nvvSbHBLafUfkknU8RUE5TGu4KLizHX9m9ijKEsZ5Lhlln6nQ65NYyPDrAq0Ot1MOavr5l8l+tH0yi5xnFycsrpyTn1csFyUeMah2TJGGIKxCAFSF03+CCC7yzLsdmlJW6MkYjCuZI8K8jzAu8Tp+cTptM552cXhJTQJqP2npevXpOAPMsoF3POz87o9XrrfKZOYXjv/m2ePX2K1pb33/+IoCxaZaiUyDLzVsO/UksVXPdKKXJ0eMB/+k//kfPxOd41ON9QuxIfajZHe4yn0zYXKjLc6DPc3OTli2fMpnMODk4ougPqpmktjlOr94q4pkFZyVJaJdPLoTqkrmtGmyNmsxnLqmI6nTJfLlDGEFPiZHwKBjpFQWGFjmGNJjeWzBqKLKfIc7KUYbTFkJNn0rRkWY61GVlWMOj3mE0vePTlZ9x/8B6jrX0Ub69RktyLPtPpTPKLsktKW1mWjMdjxuMxt2/dptvt4QM0vuH1wRtev3lDCJ4UPNFpMD10Xgh8riI0DdE7oYbGRNJCRXQRYEhZRnzMQRt8bPPAfKCwYJSm0+kQfCDLi5bjfUW4esV44/te6bIzWP9ZkZhcnNM0NTdu3GwRQYMKYvm+dgpL0gBqpSSXY2XEYAwo6Pb79Lt9zs/PWxMG2s++bTKNbamfWkwb2swzpRRGi66waWq0MTx48GCdYbJ+nWqF1LREM6W+Mx02hNBa21+6tlV1xZuTQ7b3d8j6HZqYCEkQSdc4qqqWc6k1jNEk6npJjKlFjCI+RJSWgGzdiupbaLE954RyqNv7PsbAvKwITnRLvnES/qxWOWXiGBmVotvvC+XliiFDWiGWWrW5U0BK5LkiM5JjZFCcn415/NUj+sMBWWbJ7EBCSL/jkrMMfAicn48pywptMpaLiuV8SYoNnXyILnrkeVd0aSqQXMB7ubdiFHpZ0oq86JIVXWyrd6xZUNe1TLy1wfmAtoksCgVLa4jOUROYXFwQ422UzdqiTgrnTFk6Rc6g32d3e5uzszMeP36MQrf3Zs5gY+M778W/ZO3t73Pz5g3Oz86wNsPVq4gHS2YVmRakvlAa39+gZyynBydMFwualLB5ItdyFueFNKRh2YjuwwvVrugUWGtxLlD7GpQMBJu6QlFjVY0hrbWEwQVSlqNI9Po9im7RGr6051NKJJWom4rXB2+4effuD7JXf2mFEKjquqV+GdAaXWjCirZvNFmm8VUkuJLoPPPJFLRutTkDitzibWscUzfkXuiHSotPYjcz3Llzi7sP7vP66IjZYsmdG9e5fv0GL14+4/T0lBs37vxVCO5VMmgiW6MRz548oZwv6A/6gnKrJM8uNBE5m/JelyyzTCYXbAxHxGg4P5tTGINKCqNWLnVBaOt6RVNOq/+hV5RsJTpLSFijcJWnsKITrEt5faZFvOvlgnq5BGVwEWxSGG3E/U1Lxtq7XO+/9wGnpyccHB5wNh6zubkpOWyZaCDnsxkpasqlp1w6bJZhTY41AaUs2uQEl9BZgQ1zTPL4JmB1xHsZSpbLkslk0tLPU0sX7jAY9GiWE6rlkp3Nwfr58K/rcv1oGiXfCLc4pcTp2TkprILHpKjUWgkvMwnUGSJkeWfNZy3ygiqz1HWFsRalxZLYe7EbPjsdkxnJRVmlRq/yUZRWZFlGVVacnx1z88YNjC2k+FKBna1NJucbPH78NQ8efEBCEzBYFb4hOHwbK8TWbjw5NJHZfMzBy6co32BjoKxLzs5PmM9nVFXNyeEFB29OuX3rJtViTjfPOD2+4PxkSgiJkGYYc4EPAZIWxEddOoUpbUhtjpF3jgCYIqOfW7TSbO1u44+O1tkvJglNa7O3SW/UZ3dnm8FgQL/Xo9vtMugPyPOcXq9LURRkNiPLC6wt2oBbg261FVobrDE4F3j0+Eu+fPSEjz4sGI5Gb20/VwGBBwdHrYGChKM2TcNyueTly5fcun2LwXBIVXtCUhwcn/D3v/0dT77+msV82RoXGHTSWJMRcGRZRnQOoxSFFq2EJ6JzoQ+qpJlNK7zKMLZHt2PxzuGrBT40eFdjlNAr8ywnz4v16710J9Q/iHPSJc0PyYhqBw4vnz9nb28Xm+Uk1Wb5yKts7w2ZFKaUSC16uCxLTk5PqZuG0eYGRdFhsVheuh8hxcxKX6hthopa7FQRw4KYIpnV6wdCp9fjzp073L17B2NXD84rzkhc0jWqqvrO00cZVEhjm5Lo2w6PD6ldg+0WnF6McVGEyMEFmrpiMZu13PFEMpLGrlJCKUGKlDb4xuOqBlc39Ps9ImIlrhGqho1CPQRISMMpey77TYo03gkoq2Sqr9BEBWihyaxoe6sspkSS76O05DilRKYMKkuokEi9xO0793n+5iknJ0cM+gMynVG8hZDVEOW1+xCYzeYooC5rlvOl6LFCoqk8hZHPPiTXuuQFUvJrJM4HsHmXPOtKZklKkOckF1o3yyQhwDHhak9wc0AxGPQw2mCtZrGUDC5rDD5FjLrUicWoUCq0AZh9+v1+a64RGAwG3L79w9iD9/pd7t+/z9nJCXVdktcdxJEytTrPuB5MKBXXeWNN46hDpKy9NEPWUHQsSsm0XgHaWIaDATFGyvmcsmkoq5Kis4Ht9VEhEBoFMRJ9xCWPtZJ5kwdpvkajEb3eoG3sW3qQljNgPp+zXJbsvOMgTO89VSlV+OqxnJIYi8QUUSoKhRhB8wtr27yxxOzigsVySb8/oCgyoqvZLBSKGhOQs8ckcqM5Pz3j6ZNnDIYjJucX3Lm+z+3btzk4fMXpyRFVuaTbebcOgLIUKcJoOEIBR4eH3L5zR3SSRuJXVnJdrcS5dHdvl5OTYwaDDTpFQdM4skKeSc41YgrVPqOuaqpDiwKplumjlMIk02oTAz5E8k4XZTQ6y/FNg7aWqmkY9Pp0ev3VK5bXY1Q7CEvvnMWY5zn7168z2tzk+PiIw8NDTk5P2dreYTyeUC4XeO+ZzhatiYewZ1zj0SbifKRpxMzJKE1mJULEBU9UmsZFyrJmeXhEE+Q52e3m7O/tEXzFvC6xmaHf760RwX9dl+tH0yg5t6CpK3xIhCiwfiK2xZIIwxUJckP0DSSF1QWagFUWqwIdq/FNRqZzlBYBdFSJkBwhtYCxXgnLJfgzM5atjSHlsqRZOqpFw/RixrUbG4jznsHanM3NParqC87OTrn30JNSjYjO326jpFrKoUzzGsrFhOViyt/93d/S6XQ5H5/y5NnXfPnll5wcn3ExXfD73/+BZ0+fcXN/j8LAyeExVdWAtu0EWx6uK00EtBwqJaJoYZyLM9XhyQllVZJnlo3+YD2hN87TeI/S8OD+PR588AHDrRH9fp9Op0OW5TKNzi5F4WvBurZoZb9R9K8KOq01WZ548OB9vvrqKx4/fsR777331vYTRKfkvWO5XDIc5mvq3Xg85tq1a2zv7Ei2lNYsliWfffElz16+onZOAlGTaWOoZCofUsIoyHNDN2m6WYa2mqAVKRe6R9M4ktN4bfEmrKkqyWSk1o7bt242eZ63+/ZtK9QfiHq3GggmSVgnRSYXY8bjc+4/uA8tAhmTXr0q4JLatQpDhcTFxQWnZ6dUVUPfiaXxfL5cUw2bxrFYLNe0CoWSBn6lXdNarskowaNZnrO9vcv7779P0emu1WvfbiAlRDFQVTWbm9+R/mPk0dxUNY+//Jxnz55wfHTM+ficL7/4o0w9fWxpdtJQaZVwVUVKcr1Ifps0XVpbBoOOIG2qhtah0xrdIodq7RSlWxMHrVfZaayLmEhqp41t8dBSZnWLwK60Wd/UcF1SeJWipU0lUgx0ul1UgmEcclfd5fDoiPPTM4qseCtUl9TqGaq6YblYyDUWItWyJLhA9IrgwaicqmkICpIS8x7aybX3iYRB6wKlM2iNQXSeY4FkDbGu8csSE9rirXXdXOVCGWOpqxrnRU+50k0puejbvyMIb4xR9Jl5jjGGXq/H6C0Obv65ZTLL9s4Oe7s7PHn+FN2xeO9aCnkbrLdCOo2YjBgjWs+gEgFN8hXLcklZJ6zRdDpFS/kBkqZxThpvI3S0oMER6eYFBAdRJt0hBIrOZaObZZY8K9ZDSLnG0rp4fv36FaPRJt3WTORdraZpqKpK9CM+4HUEbchsAREaF4jRidbN9OlqQ1OWci9mlioEqqYRNCAzZEliJRQVJonduI4wv5jxJr5kd7cCrTjb22VrZ8RotMnZ6SnT6QWbW7vvdC9WKynI8pxO0eHZs2fsX99HBUOWq/bMFbQtKkF4dnd3efnqDcvlsmWKiC7S2owQxSVv9axIq1soXdLZryL+qxpgWZaEpCVLCMiKQO0CIWmqJpAVicYHSA6FxaggqLvWKCN127td4vSaZRnXb9xguLnJ0dERT58+4/jkdD0AjDGudbKNq2l8w6DYxGYWlxY4p+hosaGPaJoQMCSqxjNAmAUo2bdOlpFnhmlZUS0XVOUS12zwFsvN/8OsH02jFIPD+ablrSpxQFFiyyuOkWntkLWipem2yDRaoVXCaoVVkgtkM7umMCUiWq8EiaHNedFYlSgyy+ZwKGL2EAjOcXp6yvbuLpm1GGOR8FYoq4az8zOapqSXtYXvWgD/dpZWMmWOIdA0jpOzM0ZbW9y8dRNrMrZ3RnR6Hbx3XNu7zng659WbI8bjc6q6oqoqyqqCJOGpKoV2Qi588layQEyiL5IiTLJLtFbMZ3PK+QJrFBsbGxglU0ZrJY/CWs32zhbvvfeQvNtlZc/OlaLkUl8loaAk3XLFL/nLq2kUSGG3ubnJTz/5mC8+/4xPP/s9/9P/5f/6VvZThs85SikuLi7Y3NwihMDx8RFaa27cuEEkCXfdJ16+fMHzZ8+oyoq6qlEITSe6SL9TkBU50RiMjhSpIPcRS1oH6FWLBowlJplcq44makXyHlZ77hM2SXhwllv6/R5Ze71eDd5NMRHVDzBLSxpRTq1ykTxfP/2aTq8nE2RjRL/Uwv1Gr7RKWtLHUwQVIDouJueU5YLt7S3yvEu5DOR5n7quxOmonbatzApiog3WDWg8PtZCuUCTFQPy7oDh7nW2rt2Q3KrU0jVW109qDUTQND6wrBvu3b//nbZD3JpgfH7G3/+X/5WDN6+pK2lCLs7HbUBqoHFi5+1cQ55bru3uQAzQ8sdjTCht6XS77F+/wbKsefLkKYvZrLX2VmsrdmOlCNsY9CmKjLJc0NQ1UcmAQ6bh4lS5RtRWH197X13NJFl/bd/PaiihW3Q+epkE590O3RTQWtwuX718waA/EJ3id1ypJSF6JxQ6qzWLRYVrpHAPYTW50XgXUdnqjBbNkfeeECPKdsiKHsbKACxpJRRa01I8s4xoMlLtsKFFYNrzZtVYNl4iDdaRBVpQPk0ieDGBMAaUKltTmZXJSs5g8MMgA8paim6HG7dv8ergNcE5UvBrDUiIQRpjDZjVxL39bKMiocEWpDaQWFuNjwhS7mXoRxK3ziZ4QhTr7CasAlZ76GTQyqO0b3tIhXOBToGwMZI06DoG+SxSZDqdcnZ2xscf/xSbvVthTl3XraOmBHmn1kWoritCDIQo+5llBosR2q/WeCAohbIWh8Z7oanXTc1GN8eYRIoOowz9bo+bN29htaFaLpgv5xy8fsPm5gY3blzn9euXHB0dcuPmnXe6F6u1ug/6/T7Pnz3l9OSU7e0dUkqYYLGZ1FBBoHl6/Q0GgwHnZ6d085xuJ4f2mhqNNjCZ5fT8nBC8INtK4jVilHttdTavrk1jDM55Ot2u6DBjxGpFZg0pBo6Pjzk8OmJyMeZv5j/lZz/7BN3PWwMcYRvwFqjA320pocP6hpiShHffvIkxlvPzMUZrijxnONrANQ1VvaRxNXluGGx0KXodirqSJjFqGlcL4ydKtEblPJWToX9dO2IMZLagKmek6Knrkqau5azSttWK/etarR9No1TXDaENPkW1j08t/FWlWvG7tSivyPKcpOUG73S7uPaiU9qgTaSpHSYzWGtk8tZ+zxA81oi72wpvzrKCfn/QOuU4GrdkPD5hcnGNvWvX1lOS2WzK1vYW0+mUsizp9HpYJR/PW536x4jRQltZLpecnY+5f+eBWDOjUEFT12JD/eDhQ/7djVu8Pjji888/ZzmbYIym6BStg4xCG0PysbWTTC2FUaaS0hzJ/qp2sq282IcToFws6RUFWWZafwWNNpAIcnC25gNKXQn+bLMjUmKdmXRJgbgSLndl+rRqNLudLu9/8JBnz5+/te3UKSMzBVZbTo+OuHXjBo13nJ4dc/P2HSm+A3gXmE2mPP/6EdV0jPWejtKYPJNpfq7obxQEBUFrktG4CEtfUy0WxNay2TlHlnfQvZzGJJR2mFyTaUOsPDp5VPCoOmATdLRh2OtgVESryMoqO0HrfPj9U++EfpTWX6eTC46OjvjlL36Btpak9FqXpNbiOUHWQBwog4/4EBiPx3Q6Bf/j//g/EYPiN//5NyQS3V6PZbmk8Q5lxHyldg1JWTBZS8cwdPIu1uZ0uwO0ySlrx97+dbK8EA1PSpgrr5uWAhRCYLFYom3GxvC7IQBJCfIx6HfZ3tok1CX71/bZu3adqnbMZnOqsmKxWDCbz5nNZjhfsTkcMpsESL41hFAtVbhhOp+jlNAtfAxY1WYJcVnIdLod7ty5Q7/X4/mLp3jn1zkwsc1N6na7l2jaSqAFrfYv+wYiuRoUrZCVFcVmdd8lpUAr8qIgesfe9h6TiynHx0cMNt5Cc5AEuaqriuQ9rqlZzKY0TU1MGpNlKG2p64Yiz3CpISUZTAQlVEIXE3lmsZ0Cm1l8EpZASglrDLbQEhCkLWSO1HhUCuRFhtEy2PEhUJYlrm3YJPW+3ackmXyr/cpyscCPSZwpk2JNCfq+V1KyJ7s7e4yGIy7mE3zjUQN5bWnNCpDPUxt1mUnVGuVEpcHkONeI22iKxKgl3NhkxKCkOEuxReosKWliNKBzkjFk2qONhL6HlSZRyz6GKEM3IXpEXO15+fIlSmk2t7besZJEnplC9WrpxCqJOQ6sIwhsbvAhUAWP8h6jNS62mUk2JyrJbFzWnlRVaKMY9gsU4jjrYmR7d4+7t+6wGJ/z5vCAyfmEi4sLNvoD+r0+h4cHXFyM3/FuCPIc2gam3+9TLkvevHrNaDSSIUKi1TUKuh8Bm2Vsb2/z/NkzNgY9rFF4H8jzglu3bpB3CypXM7mYCfW3dUiMbTbg2mgnxtbFtz27CkuKHuUdOjlscsR6gU452hgOD17xm2rCfDbmV3/3t1y/cRNjV6H077YxUEqQ1dSiqBJzoojRkMiIaLo9oVMvFnOKkFM1Jf1uV3S2riSlBmMyet0Oi2mFSpJv54MMjlJEqMM+CCU/t0wnF7h6SVOVwq5Ccs/UD1AX/O9p/WgaJefai6V9UG5tbZJZw+RizHI5Fx1RXlDWc3xbWJeVUJe8b/CZwVjJKvEhEoIjy7v0BwN63Q5GKyYXF61Y3BAj4samFM43JCIxOgYbXWazMV988UdiDNy4cR0fEzF6/rv/7t/w+KsnnJ6esrWzzfchMFSIiLtxjoODN2xsDNne3ZWCNSVcFZnO5lRVyaDfZ//aNXb2rnH/3j3+8I+/I7mS5B2vq4rgBU2SOkk8/KUxSWuETahW8pOVkoBIhSKqRLks6WQZne6AlNrsGyvHqVLSmKo2gFTQKdVqoKRBU7q1H12JyrnUnWmlMFlG4z0o0YgpIsPhFj/9+O2JpyVXxNItOrx88ZzJZIwPkc3NTfq9Ho1z1HVDXdecnh4yn56TGRj0O6hYiEV1Am0zYtvUSZGh8CRqImX0uKZCJ9BoqsZjrMMMMrQBlRzWaGw/J1YR7yIxOQpr6HS69Lo9jDLrglY0CRH1A93+rZyF4D2+qXn8+DHdToftnV20McT0rXDXVaHdmhmYpOU+bBqmswmjzS129/bp5F0O3hzw+eefUhSZhJoON7C5pXE1MUkh1jhBaHr9guFwiNEWFxLj2QybF1y7dq1FYL5pbnEVNYkxUpYlo9GoNcb4bssa4YPfvL7P/PyMX/3yl9y6cx8XEo3zNFVFVdfUTU25LDk+OeT1qxc01ZLlol5P/RJCO5m9ekXtPGVZoo1M+7XRBOdJRKyWfLKzszOWi6W4ArZ3TUpScBRFwcZg4xvoUUyRTGc0TfMN5GON3LbNrW5/v1qxnR5rNFmeQ+oRY+ThgwccHh0ymV585z00JLFQrytS8ATX4JuqZQgYsqKLySzWGrQ1uKrCh0gk4FwiJEGOim5B0RFXvFA3NFWF0oYsz9pw8UjSCVNkgt6G/z97//ElR5bn+WKfq0y5dg8dQCAgU2dVdVXPvHnnceaRXHHBNTfc8G/leeTMcKa6urtUaiQ0QgtXZnYFF9fcIxAZyOruRCZyJvE7B4nIEAj3a2b3/sRXND5MwaGlROp4r06nU0SInNfF0xbXaeFfdqGyFSGKcb3MTzQlkUojhafT7bG6ssbB8THz2ZyR0rjgsI3gx0K0REkZOVfORjn9AC4IQtB4SdNwCSRFhlIJPgjKWVx/72XTPKzJTIE2CVKloGpCPYvFZtJA/7TB+8XUIHLnVMTE8/TZU7788gs++OBDsiznYs75dqIsq1cal4tnJNpfqNg4aKYnSkpEUJydnEc+nTYIFXAhQqMmdSDMPIXxtDJBojRSG3ReEExO0evR67bpDof8+YvP+fabb+kOWnQ6bY6OT9nb/2n8t743Fsm1kPQ6Uf326ZMnbG9v0+v1CX7hhyeicimxwTMcDPn8s7+ihCBLE2oF29tbrK6tMJ5MWPg5xkl3LGIWDU/nInRzUawuPnZ1hasrUiNZWxvw8kUsQn/z21+zur7BN98+5NG33/LHP/6R6WzKr37za+49eIBsVHjfZtjQEBQihRLvJN5rykoxKWHvdIwIEZrX6nYxWUqaZ8imwVDN5ujgEa5CSo/WjixVJEmOtZ4ia6FcwPqaVGv6/R5SOKbjCScHLxG+ItGxOZJmGfLnIKn4M4pfTKE0n88jfjp4sizj/v179Hod/vhP/8hsdr7kRYwnE6azkjTXOF8TpgGpBASPbgjhWkuEkqytrrK7u0ur1WLv5QtOj08AcC5uDrWFs/MJn33+RZy4SEiMIss0R0d7fP2VJM80iTEUeeym1NbGTlEjw7sgLb6pkMLjnef48IiTkxNu796h1e5E0mUDdzg/P+f09DTKlec5lfMUrQIIGKNZGY04PjrATWZNB2RBWBYUrRZaa05OTpachoYi0XAYZOQNE7uH3gfSJFnCWZCLYs7jXIiFQDMCbFKPiP5vsMvW+YZ700wJFwIANCabTQIehRYiLETw5rpHQgoUmv5wwF//+mdePH+O1Jq1jU18aOTB957z9Tdf8uL5M05OD0hShTCR22Vrh/NQOc+8LnFEdTspJbbxUUiyBO8qbFkhVBJhRXWNmJdIETBpgg4WrQTZoGCuLLN6TG1tTGTSvOFfxMJTNvyD2Af98TtH3ju8jZ41B/sHfP3lV3z40UeNCXC85heFUXilUCI0AjwC5rMp5XzOxvo63V4XgeKDDz/k6fNHvHjxHCUVWZGRZBnCaObVHGScdtaVYzydU9XxPTvncSFwe3OLXq/3igHvomAKIUS/F+eYz+eMJ2Nu7uz88OexMUlMtGHQ79PudGh3u0slTBEkKvFkSmGyjDTP8ThOjo/I85zZZMzSb6SBLs2rmsrWcdIrFmIYIXIlIRqlWsfe/gFKxusvhcR71/g1B4qiQBuNkhciH5EjtigS+8sC6bJ64oKDhuDS15pJuBJIFNqnpEWEDXbnEx5/+/CHrWH8dSgRYadKBkSI8E6lBGlREEQ0B0+z2ARytsK6GgmEIDEmRacJRTtDGYHzc8pyyrzhOzmTLOXP5UL4RETOhVtMsUWEjNWNbLSAKLJBbGosINyXCyWlLoqk4MNPJk0spEYEh1aG1ZU1vvzmG/ZfHrB1Ywcl4/RHSfAywniVlpgkijZ4b3FeInQaVUZFfG4tDdIiyXA2FgzSl9jpBE+NVimqeQad8MhU4130wolda4mUqvHYapADIia/VVXyxeefUdc1m5ubKBV91t5mRKjlgtuiUEZjgwclIwRfS5TRlD5QlRW+rhhXc5wTGKURQeCEaARsDN5qqrlnbmpErklTAyaBNKFWisRoWlqysrpKEDXz6nx5rv5URsXfH02jRAq6nQ63dm5xdHTE2ckpWZJRmHac/DbntY8bA3meU2QZs8mYlZURs/mM9fUNzs/P+PzLLzk9Pcf7QFXXaC1w1i/3lsuQ+ijcEz9f1iXCOVY2NnlwbxctowDE++8/YOf2Xd7/8EO++eYb/vmP/8SjJ485G59zenbGJ5/+mtFw/a2uYljkNqJBqgeBDLHZNZ1OcN5G5UjvsbYmTw29fhfnLLNZiQ+exERaQpIo8tUMJRRaRE5lVUUl1OBq8qJFkRecnhwwmcxwzsfGjhAkaRIl+t/Jg78Sv5hCaTabRc39EHHGJyfRgfj8/DxOLRoyazzsYrK20JJf4LdVEGgZzT1BMBmPOT09pZyXnByfghe4xvjSNw9zbR2Pnjwl0QohPJPG2LGuSvYOXpB/pdnc2GBjY4MsTVhbXeHk9Iy6qsjSvPn9b/CmDZ6qnPHy5XNa7TZrGxssTEmljEWeszYKLGiB8w4hJaenJzjvkMGxtrrC2ekJ8yfPqGrbkAwvoDubm5tsbGzw9ddfMx6Po8KTs/F3iCibbbQgz1OUEnhvaRU5CL9MKC6Srgs5Yrjc+BFNLXmxccavX3CVFp+/IIBGrIt4g/hbISUieHr9Pr1+n7quwVpSk6BFTLJevHjGo0ffUFcVraLAO8/kfMrh0SmTyZwgFQ6FUxlehGYaIHC+RjTcuCTNI4a5cvgAmkAoK4KPXgomlQTvsd7S6efoKuP89BxtFHneiiTOZnKjlADZ8Ax+EtU7B3iqsuTRw28QITAarWBdJNQKf3HwwcVrWiSUEaYkmExi8be2vo4xCc4F+sMB9+7f4+joiNlsyvRwhslzpNFUweEAYRSSFIuinJZLaE+ep4yG/VcgZZfvm+ifFPeEly9fopSKvLofKNcviKaxtrJMJ1OqquZ8PKUzFNQBnFAEo6IcfB0IUoDSSKVRTfc9Nm8iTwkRFbOkd9TBRQXKZg+TKkJXhYieJs5akJH3F2Rj8Ng0iRawO6kiP9J7j9Q6cldCIE0v/KNeKZiWk8qLIsmzrJ2ihLIxmJDig2c4HHL+BiZKeI8MAVuVSAJpoun1OqykGXl7hYOTOUIkhGCZTidYZ5edf4mPZPo8IQjP+fQEaz31vAZnMVKhrI0mvFLFfoISCK0wQqKDoKospa2JzZuEcj6PkuyACCADke+kLiZKqrFKiOIjcU+SPxmRXMakVgdGa6v0B31OTo6pypI8Lxp/qxDhct6hpSFP8sgvCZYgTYSVCxlFt6RASLA+clO99CSZJtRllIj3htwotPB4H33NpE4JRpGmHZQIJCQURUaeRkisFAopFMFb5tMZUio+/dWvGAyGP/FaXR9VOYtcYxd5aAqNVgGhBUE6ZKJAK1QpqXxsfqWtAushKQosEhdCFBDQAqUkdR2YzT1BBHzi0dZS47EiYIXEpAntXgdr5+zevUWnO+TJk6fk6U8D2fyXhFKKNMt4cP8+f/jDH+h2OhFBUNeoxDTcs0WbMzYYBoMBL549oUE4c3Z2zngy5uzsnLq2eB+h2pFvGBUFF00F18DwQgjLKa0LUFWO0kZ12d079yirmpW1DXSa0yu6/Ko/YnvnFn/5yz/zxRef8V//y3/h7PScv//df3ir6yebiVs8fyJiyfnAbDZhPD5FisZw3kUhpCpLWclWKIqMLE0bQaMItUNGJvJ8OqUua3xto3F40SJLUrrtNnVVMZnMKSvX+DdGlE5etEgSw4+BZvofOX4xhVJUqomYalcHvvzyKwRQzqbx4LIe5x3lbIZzFtWoAQVno4qdICa+DfddSslkMuPrrx/GhMU6zAIq5uJ8yoUQeSEonJIEa9nfOyDP4+FzfnbC11/PSVPDrd0dpICiyEmMZjab0en0lon/mwpna/b39pjPZtx/cA+lDSFE3xBocL8iTn2880wmEx4/fcajx4+Yz2Z46Wm1WqyurfLy4JCyrBsIjgYUk8mM2ayk3W6TZQXzeUWWFczmM0IA50rqqqRddBgN+igpmM/mZGlCYswrSd5lLsR1Hy/i6ucud5wW/78Y/3txIQzxJqJBFZKYhNFoxGAwoK7rxtRtxqNvHzGZzEjSnNm0xAeHqyz7+6ecnc+oLKR5QtAJThhQAkegtg7vBcFb8A4RXJwEmARjBEao6CfhHNX5nGM7ozPqgNKIRDBa7aGkpNvvkGQpITQM7WX4V9bqxwwRIHjPbDJh/+VLdm7epMiLmOR70Pq71/TyNVRK4lzg7PyMNE1YX19fFvbGZNy7/x4vnr/k4cOH1HbGvKzpFC3yRKOyFKEk9axGWsHk5AycJTOKTEsOXr5gMplQFMWyYHr1xcdnvdvt0u1H2N2bKJTAMZlMGI/HFK0WT589Z/XGLYRK8MFiG4y6DWAREe5LbLyEZgLUuDBFQjMSKW0sgJqON6IR7MDFQqrhiC0kd0VDlPaEZaJzoSgplu+/LEuMMSRJ8opy4qIoElyCTV6UR83PN2WUFEhj0L4my3O2trZ+0BpCvEess8ymkcOXpgletmh3+9iQIESFlJFzOZmOkVKjTYqgEfBRUDuPI0Ai0alBKg0uI23gc0pJvBDU3sVnqykipVCY4MHZaGxsHfNZebEWy4aNvLR3Xah1XlbsEm9wP/q+UDJOPZCKvF2wtrGGfebA+cYiQ6KlxGmFcxItUlqmwKAxKuBlbHrECX8kiSujSZVCSksIc7AWWZdkQiJlApXFiwkBgbdznEtRuoXXhuAsmoCta6p5ibfuEnza83J/j+2bN3lw/wHapIBEhLfLnQi2bLp1Cu8VvgahPCHUBOPJkoI61FSzGbPxlNpFc3qHwLqayjpcAC0EWSJwqYrG0CbDScWs9piyZH/vBauDLslggMkSTKo5OZ2xk3a4f+8jtjfvkJgfDgH+obGYJtHYcrS78bypraXb6zcqkA0sIFyoZ56fHDM5HzOdTMjynMCM/f19BsMha2trPHu+x9xWjfDOBRdpUSAt4HZa68ivFiIKZAjJy71Duu0Od+7usnlzRLs/QCYZUmoEsLG5zcrqiN1bu/zTP/6Brz7/Alc6/h//z//X21vIcJGrRJ6pp6pqDo72sS7aSEg8aaIZDnqxqeE8PhDVRaWiKkvKqsZ6yXw2Zz6ZkkiJrSzeOpSQjPp9pAjM5hUuyNikDWCEQmlDXrTQSYJ7gwJi/zPEL6ZQqqo5zttlAjaZTBt4xEIEQKOEiFwPKRDBIwloE+VulSTipoNCuMhNEUJEGdrGAEaGRdLnUYGGhEik6QRBXXvm03Mm4ymrm2skSYfj42OePH7E9tYmnW6XLEtJ04Tz83NWV+M4+E0ms5OzM148f8bGxjorKyuUtSNJEurSLqWDAc7Pz3n85Al7B8c44M6dO2gCf/mnf8Damk67Q57nnJ1N8C40yUckTj99+hytNYeHx3jvmc9LQljg8XXsIBZ57A4Fh7WWyWRKlmUIpaKSUBCvmFu+6v9zkZjFROOi0HvFYDN+R/w7NAVSY6r4psIThUCkip34JEkYj8fs7e2xt3+AtY719U2+efSY2bRm2BtwdHrEbGrxwaC0RiVtgoqQC2Vi97mqZ2gSCBeFUoTARKiBs5HcakSEdEzHE0o7Y2VrjeATkLCyOmBjc50sTxuD0/iarXWxg/Vma8bXr5G31HXNydEJ/W6PO7t3SLSJBo3wCjwy/u/FoSGjTGNTaE1pFQWD4RChVAOxdPT7Qz76+FNOjs+o6kNK75iWdSxqGu6X0BJcgKAwSlAkmvcf3OXZi5ccHhywtra2vK8u32NSCFqtFu12G6kiROiHTuFkqHH1nIP9lxR5Qbfb4/HT58wmE9JCoBr2UPCR4+Mb9bbaRmlhL6MJrBAaESL/KHiLkQJhDLqBVjrvkUohg4iSxVo3kIqGLN9IqiPAiSYRXvKNGvXB4Dg/PSFL0wvegPeNMp5HhCg5HjUALjqisFALbHgcMiCCROoE6Tx58cMEMQA8Guc9k8kZJ8d75EXG+XTK3v45QnkkhuAcs/kMIRU6SZoJWcAjUEkSsf6JISiJUyGeEXWFaNYuCCJnrI4y6TpE+FRpLaq5l4Sz1NOKelaBp1GMCrEvIcHhoilrM5VqDhNQsrGS+GmSfyHiBBxv0cawtbXFyfHJ0nLBaB0J8y5OwbyOPLrEGJT3aKXAR7SE9S7CD71CiFiwOhuwsxJZWbyNXWzZKJYKZRDSkCQdWu0hRhl8OcXOzrHOUVYl3kfopLMVx4f7TCYT7t97sPTcivvC250oeWuj/YNQuNDInCdRhCjJDEoG5rMSW9bMZ3Na7Q5CakLtmE3LCCELknI6IdWavNPBVzVohckzrK+RDYLjq6++onj/fVLTo91uc3p6RgiCPC9oFR2UfPvpm5Bxau2dRBiNzjPavR5H52f0V0ZoCeDwrqKaTjg9Oub0+AQtJaurq5wcbTKbl7S7kufPn+GCZ21tBeccz5+/JASxLJCcD+jF2d3AsqXQeB/vV4klUQLZcC+1Stja3iFJsiiwonRUVAySLNXcu/2Alc6A/8//8f/GldO3uYwE5ynLOePJGU+fP+Pk5JzxtOThoycNnFjSbhVoocjyHGQULKqsoyzPqcrYpDFpSrCgdUK7rdBAyQyhPYN+n047mrM7oUiynP5ghTEe6aPpetFqk2R5oy78Lhbxi1mNhRuxlM3Ep3FmDsE3Sb4E7ymyjKqyEV4QPFKY6LuBo66qOG3SUSEuQplUxHMvlFMuyUwGQoQyBBBSoZRBS4GzNS9eviTPM3Z3d6mqOQ8ffk2702X7xg6DQZ+jk2OsrRv58Dd3ODx9+gTvLGtrq9TWkiR5swlFCeEkSdjc3GAyPkVrzcrKiPWtG7TaLebjM75OE2bzGVmWkmVZTCaqmkDA2mhwVpVj6rqOCm3GUJY1UqkGgx5xsErFDTDPDEqlzOfz6CuStqNxpYpKePFsDE3rilc/13TUl1wJQTNpWED2Lr3xBYkJ3/zsm4vQ/H5rLQE4PTvj+ct9VlfX2Nq6wZePHnF8fM7qcI17u3f574f/Dd8UdknWIugEmSQorQkEggwYL2OnOohGRUtFkj4efMAHQbDRaC5JNVoabFVTjmdURpFlBic8HovzJULleOGACG3RUl/wLn7ksHXNfD7j6OiIO3fu0mp3oscKEbKx8LO4DJtcKBqJAMgIi62ritFw2Ex/NLaOzQghDTdu3uLTX435b//tv3MyHjO3UZ1SZ0W8afB45xCAkZKbN2/wyYcfcnJ2zsu9PT748MNmenWhWLaUn03UxVTkTaxXiHKse3t73NjapMgLHj99xunxEVutduT3CNEIIhA5Mkoxn8+ZzKbRzNp5tPLL+1+rKAduraR2YnnvK6XRykQ+j5LLps4S1hoi7MMRmJWWbF7jfQPp0xGWV9cVg8HwooBt3oZYPlNh+Sc0fidXZcQlxGlMMHjr0fqHP4ORd1RTl3NsVWJTFX12agUiSvYfH59SVRVZlsVOaazoMDpBJAnIRkwEiSJEiWuhYnMCh04MMkmQCHwNJsS1rqyjtjVSggoBh6Ms48RYNdM80SQzr9xLjVnmZU+UnypEU8AiQCjJYDAiyTLmZUm33wcBtV3Im0eoZtbKMUmCshYlJHXw0RMHQZIVyCSJkDEXVSV9ZUFE03apBHmSEVBxWo7BqxaoDI9E6hTkFCkDztWRZyYCZ2cnPHz4kAcPHsTm2QISS9zx32bYKjZGnXCU3qEzQ5obkkSjdYTp2umM8XxGSBJ0p03tAkFHdcCAJ9cZvqwJHkpXUddzEIFWJ4+8W+/Ii4KiKDg7O2Ol3yXLMoqiWO6TPkocvdW1gMjDk0iUUJETozS9Xo+HD7/B7dxEB0U1L5lMphzsHWBMwtaNG3RaLUJwnJ6d8s///Cc6vW4jeDTD2prRaERVWQ6OTqAxfZZE/p8CUtNo/Yvo5yUIKAJCSVZXRqyurbK5tcVotBKhpI1IicIvp+DlvOLg4JDRygrvPbj/VtdRCIHRmrKc88033zCdV9Qu+pJlaY5zFePTKdPJFCE1ujGgX5yZvra4uibNMvrDFbRUKEAFaOc5w16fNNG83HvB8dER7eEKKmvT6ipEqJmPj5BakOUFRieoN2Df8D9T/GIKJU0shJRY+B4pPAKhIndIaoe1HqM1raJgMq+w3hHqyBORAkzjt6RlIAjfPJoNREgtpLDjKNo5iwgXkAvReAy18w7HR0fUtQGl2Lp1j3am+fovf+bpF18waLdpt3O+fvaYaRUhW2+yi3Z4dMzOrR1arS4NgmcJb/IEkjTj/Q8+5tbtO2htoiKMVNGLxaSYtGA+d7SKFC1UVGKTsUtb2yjOoLRGKd/wGrJ4ANd1A/GRZKmJmHgV16oo8uiDY22TODSTI5oCiEt1jriA9yyOThpneSlklDteqpc133fpZxewvjcVPlxIold1zTfffENVlty5dZuV9XWs9RweHCAEbGxukOVxmpYkBi880iicCNS+IiFyvZSSCB3XUl6GURGiaIYkThGkws7nWAeJydFBYyeWMzdG9nOKLOXwcJ+XvacURYaRCjBonWB0+gos6McMV1e8fPmS7qDPaGODhbS1UWpJIgVekXJfJtpN0p0aw/rqCnmekeqEEETk3wSB1AITAh98+AHlfMYf//xnTsfjKOU8qyBJCJVF+poikRSJYXf3NjprkeatpXjB5SJpqYDX/AmXXtMPjRA8+3t7eO/pDwYkSUqv3+f09JT1jbrBqjfAuuBAeIyWCBkaWf5AwMXiWSxknQOhmXRDJOCH4FgY9S55mFyGzIEMcilIcHY2ZjKvyYs29+7fRynDtJyhjG7kvK/CWxuRg2v2p1cEHy6F1hqnLO5NFJy+jiamwaKUYD6dUPRGODy1F0zOzjk5PibLEpIkGpla61DKLNWiFgILBI9wAaqSejalmkyQEtIiA20QHrSXaBkTNakkzkLt4vVJtcY5h3W2MZv97iR8cY/p5nsX6/RTNCvi72q4U0oRvEcZg9KGvb09hsMhRmus1lRSNhNySZ7nmMQgpgFblzivEMpEHpuMKmZKm3gKeoWSFS7McL7xlFJxihiCJugEdAIywVuLrSK/Veo48ZQiUM4mPHvxnMFohcFoBaFjQyVOJxd+fW8xgohKbkqBgjRXmFSQagG+ws2n1LMZpbVk3T7WSKwSlMIxMxIlDSJro1OPqGt86Qg11MFGUQgpqOpqeV7Mz844OTllMOjhrKWuKsgvCqa3HQodJdJliPw/Ien2utRVycvnT0EIVJLS7w24/+B9sjRDigjH87amP1qNMLOyZGVlxPPnz9g/OORsPKPb7bGm08gvdw6jFPNyRlVXaCOjuIeLIi4CgVHQ7w9YX1tlc3uLGzs7qCTBs2jEeSSe4DyHR0d8+81DCI5f/ea3DIeDt7qOsjGBlVKxtb3F1o1dnjzd4//7n/8rp8enzMsZ4/GM8fmUJMtJVYRzBiLv1NsQ/0znEA5JkiR6VOUFraKLUZL9wwOePHtK8B5vUgqVoKWk1e5gyzE6UbQ7PZRJGz/Cd7GIX0yhlGqNaZzCUc0N5onYWR0hdvU8+mAURQFKM6vrWFSJBRwHtFYoRezoy6jxv+isRqncmEAkSexiWOcQRHKeFtDttAnOc3A6R+sck7bYvXsLO5nx8vFjnnzzNTce3CdLNbP5hH53uIStvYnoDEeM1jejv4wQS/nOqDsQQCm0yGnplOADQTTHkwgoA2ne42h/jzx3OAsagZIaF/GFS3gYgNKSgItDnAh2ibC4pjBb8GR88KRZ0nB7ZFNwxuJDsiDXx01kMQyK08CGdL9I/ERAitD8rosC6/Lf0Xvpza2nEJHLZa2lqiryNOXunbusrKxhved8fMzx8SFFkbGxscZ8EuWbtRZoBEFaVKKxtsT7KBaSJCllaanrKG+aZLGrixCU85qqsqjmACKArSqUFOggwHqqScW5jJymuZnx9MVjilbG9uYOaVoQSeSaN7gM3xvHp6ccH5/wwQcfYJKkMWRuOuxy4ZV1kVS+YrAso0IZSjEcrXB+fhZhes00V6p4f2il0XnBb3/7d3S7bX7/hz9wej5GBQsenC1JpEAkglZuOD0+wPuKu3fucP/Dj5dqZPGafhfqefXzPySsrXn0+DGdTps0L0iThOFohRcvXuKsRSwmi/g48RYxMW+1cpSO+DilBD64RjQmQr2i2mbsm8ais3mOfISBLSc9ywFsQC7aDj5wfnrGpCyZzmeY1LCzc4vzsxO63U7TfFjsdQs4a7NniFfX5uqfy3yzBTfnTRQHKjjwjtQoRsMBz1++IASP0oK69MymM4TwROhPHf2wfDTArrA4G1dOSAlS4KoZ5fkZ1XSCm88wRuN9HYU0dIpRCULEKZ7UCu0Vdl4R6ppUpXgiLzXEkR1BsCzCL6/H1anlT9GsgKgQeLEhRk7CYDDgq6++4vzslF63tyyQgg3IRpyn3Sp4dnCAqxdCIBHG6JvrHogFsLc2+kpRgXBIFZDSg3TxnjWCaA3okSJOKhOj8H6Gs3Osq9nf36Pb7nDr9u2lDP/lSbN4y2IOSuvGvsE1vL1oDi5xVNUMO5tTjidokZCbJO5RqcFKi7Qe4TW1lhGZGSShbnKHhd2Fd4TgmVdzhITRcMjh4QEhWOaz+XISGTU13nLRCEg0UgSU8PjGP6yez6mrkpPjI27t3ma4sk6r6ER5ehnFLLyzWCHJe13WNjfA1qxvrDOZTDk/P2c8njCblbTaHXq9HkWWkKeG/cMD9g/2UFqzurqKt4G6tlSzinbeptUqaLfb3L59hzQvGh5n00AKHrzl4OVLvvziC/r9Pvfuf0in24W3bLAaXNzni1ZBmuYobajqqGhXlhbvolCFkCY295IcgsB5j6tn0f/PxIaiFIHgouJkYhS2KjmfTSmrOWmWRtsJW2FcjZIGZTStTptUeVqdLkoZfkGlwb8ofjGrURQZK8M+Z+eCk7PzyEEKIsJaECQmAetJE7PEsqv5nMo6jNKxyx8CSZo0YgeR5Bu5MA3XIhKeMEZz8+YNrHe82HsRpzEiYGvLZDIhTQ2dNqxsrHJje5ui6HL//Y+oZnMePnxI1mvR0nB+dsrG2k3epPnXzZ2daFzmFwVgTEwvFOIWAgVRYcg1XeMIW1QUrRZ//fM+k7Mzzs7OozqgjEm/azgPQiq8j5yshbCBkLLhpETJ7KoqMTpOqrxzZFlGCIG6rinLkpcvX9AdBfKiRZ7liODwLipFXZVMv5yILOIy/Oe78QYPGGeRwPHxMVVZ8/77H7KysoIPHus9k2qKtTX9Tpduq83p3iHVrET4QF3NG3WpAM5inQWlUVpjJzPm00nM5LxDdlpkWQa6MfhtpqJCGJAucioCuNrGwkmkDLaGDIctJuMTHn/7Oa08oyjaBLIGCyXe6FK8Lr799lv6/X58/TTkX2JCJmQzBbwC1bosFR4LA0OnN+Dx06dUtcMkJhYFUkZundFRGKLI+eD995lOxvzxz38iENDakw/atNKMtdEqt3Z26A0HdPo9ik4flUX1qAXc7zJH6bpk9od2co+Pjzg9O2V7e5sky7DWsbq2zuNHT5lNp7Q6HWg8ahZrYoym2+2SJIagJaNBj7IsOT46A3GRSEoivEcsZJdVTMoib0Y0amuLia1HyUgIxlvq2lLXJc+ePeL3v/fM52ParTY3bmwjpGj4Jt9N/i9X3Nc9c5cLYCHiv/MmeuGRvmaRSjEcDtk73Md7R6JzxpMZhBotAsJbgreNSls0e7W1x0tJXTpm5ZwkNWjpcThQoFMTPZaKDGEMQSgSnZHohCA0wUcOlBGAjcbjtasjx+uSJ5e8plC6/Hn4aZQn43qFprAWIOOzd+PmTb59+JCvv/yS995/D52kSBWV1ip/MU1UojnpFp42zjfJZSC4OOUUOLQWGCPJcoPWkjSVCK1RQRFUADennHpkVYOboZUHW1FkKXVVE4Jg++atCKFENlzg65/DtxFBCrxzSwQDvkI6GSdkC0EK6+lnKZnz2FlFrRxpA/cXQmDwETonfNNYhSQxGKMJdWy42brG1pbu6pBga/b3D9DNJDR6z/kIE33LYWuL8xYhoprtwf4e3jlWV1fw3rG6shLtGkTcq+NQW+JCVEsMzeeTLGNtbY1bt27zxz//CeFhMptRWcvZ+BwRLFpHWGLpa3KpMKkmbSXYyjMVE7LG2mBjc5PR6lpsZNPkAj5y354++oZHjx5xc+cWO7d2SdLIX/JveVKpjcbbmAcppZhMpuzvHzKbVVSli9YtQVK0CkwSoasIgSfEAhTQUpDnGe1c0u20SYxhMp4wG0fFzyRN6XR7+LNT5s4ynU1oFysYEUi6HdqZYTgcIVXSiHO9i0X8Ylaj3++h1C2Ojg+ZfPY5wTpCowIkPSTaoPNoKOcDpFqhixbzsmymRbGjahoJVa1UVKYKjSRjoOE7QWIMW5sbtDotOp2cw8MjynnJ+bzk7OyMoijYuXmDX//ud/S6PTySznCNex98xD/9/j/z+Osv6I/67L94zs2b92gXyd98f//S6HSi2eoiKVx26i4lqrFwupxHx4mNFIK8VTAr55wdH4ONePR4QIJwDSAu1p+NOa9bJkWRHB+aaU88cIQwCCHJ0pzgozrh6dkZT1/uM1jZYDRaY3d3l9X1ddI0i0VjY8qgtWbBRXrdAXpZKvzHOWgdL17s8fjRI4SUaJOAiobDQUlmtsR5z+pwBSkUJ6dn0c9LRAUyKSK/O8hYdBul4pSFgAgBW1nGp2fM5xOU0SQmw+gMoyPny6sIf6CuUB4CHhUEhW5x+8YdVtc6PH32NYdH+3zzzRe0uwNWVjrUrkJKcy1s6k2H95719fVGIjYsC2fRKCVdnjrA1WsZuTpCelrtNiHAdDZjkBWEINEiTlRCiHytcjbn+HA/8vBGA4ajEZs3thn2h42rfTuqtzXX6XJSe/keeV1idvW1/lvi+OSILE/p9nux0NOSvIHTnJ6cUrRaDTfp1UlNp9tlZWWVPDXRc62s+OyzLzg8OkUKidaNTomPkLLQTJZC41d2wSOKXjCtImdttU9Z1Tx5/pKV/oD319f58uuv2Hv5FC09v/7Nb2KB1EwOxOUikqhYI9TFulxtUFy3prKZtL+psNaSZBnpgo8mBJPxObaa411FkJqARSmDC+CCB7Ho4Ee1nVaek+SKpDBUkzHleIxQYDo5SZ4zrxy1i+9VChBBEIRAaUma5GgWfm4LftjF+14URYv7zHsfzWmvTNx+7JBSxKY6TYNBRcWsXrfLX//8J2azKfcevEfeaUfum1ToRNPv90kTw6yyuBBwtcfakuAs0mmkFo3Jb5wsJCbBW4d3gWoeYVJCGoRQBFszn03IgCIVyFABlm57wO7uLnfv3KfI2wghuTp5vFjbtxhS4PBxSltXuJlD6gxnY2Ezmc6wtSeXFn963oivRLhirgyoBJMElNCgJbMQUEKQKk0iFUW3y2Q+IfioBigEsfHmLQf7R/H+cQ6t31xO8EPCupqDw33Kco5zNZ1ul+FoQFbkfP3Vl5R1jUqaCdyiWdPkSVIKDg8P0VphpKBVtLh//wFPn79gby8KIc3KEmUUUnocFiEF2michkfPnqI8pCqllRaoLGU4WuHOvQeg9JI7LJ2nLmc8+fYRz598y527d7i5uwsyqliGSCh8q+tY+rifpFpTJIrj4wPOxifUvsZTU8/Pkd6S6TY4iwgWIQKpFFhpo0CLkLQyzebWKnlecHBwyMl4iq083kVeW2JyRn3FrJrjpCeVLto+eMHWzRvk7V60oXj7NfjPKn4xhdL65ga9fhshfTQik43hIgJPJNVKLdFG4azHqASlDInR1I2JY0wOABqlFy8aw8AIAws2Tpasrdjbf8Gdzh3ee/CA2WzKs6fP+Kr8GqNThqMRv/vd37F58wY6yeNDKgVrWzfYPbnH53/6PXY+ZixbTMZntPL2G1uHyx41wCvJ4CuJjmhI35cpo0LQ6XQZjVZ4On6IbNZBeUeRp9TWMZnMGnjdhTrWghuhGi6AlhGqEXxE8yulG18cz+HxEdP5nDQL7D1/ytH+PpPzE+5X77O2tkG/P3y1Ix0ajgbfnSBdLZJ+jGJp4bEzHA4pmiTcOd/AojzjyZjSVfSGfYIUVN6B0QSjwRh0kaPyHO9qEhXIsxytNHm7AB35dF4EpKHphFcE5yh9lCTPkhTpAyIIhA2I2qOFZDDoM1pdZTDooI3CB8n52YzPP/8CnbToD9YaeuyPT9rs9/tRopxLnIxGJvlygX41YbxIvmOKXxQFK6Mh5XxKYtaoao+tKqbjU46Ojzk9PWU2maCU4ObODr/97d+Rt1qoNG+mb5H35qTCS9MUaa8mYou/r064rr6uHxJCBG7fuUOW51GILwS00aytrXJ8fMTm1hYIuRQ18d6D1PQ6Pba2tlEioJUhaRkGgyFHx+fRq4gowhB9e/xSdWExRIhT4YuCZXV9je3tNeZlSY1gOFrj7v377O7e4ve//28cHR3y1z//hVa7z0cffUqSvDppu6xst4ir0vyX95bl55QkbxU/aA0BbBBUzlP7gAOQkqq2SOPIsoSJCGQ6dp4lAVtX1EEhTI6SCp2kDT/LkiQGnWhEIlEKqrrE+5qslZO2WpRnY+DiGRReRn6miAbXEki0biYvzT77mmnkeDyOnMaqIs/zH7wO//IQjdmwJNgIbzUmYW19nb/86Y+cnZ7x+MkTkiKn2+uRmigCMhoO6Pd6nE1m1M7hnMTLuBauETKSicLbkrosqcczXG0xxkRocB3hxVpETqLHk6hAO8vQ0lOXEqMlN7ZvkGX5stiFBhbJssRfTlnfVkgTJ/7e1UjvKFRCoTVzW+NcYDKv8Mqg2gkgMUI1/oqW4BxIC7aGxKCkIpEKaRJSYwjeEaUnIzzXWhuLCmUwxuCc49mzZ9zaTSmURr5B4/R/a2StlBU1YjabkhiD99E7qdWKan/j8ZS86MASRhwbnUpGH7KzkxNubG+z9+wpaZqwmq2ytbnNweExtfPMq5IiKcgHXUo7BynodDvkJuFk75CyqkFBr9VlMBjy69/8ltHqKq7JN6ytCc7yzed/5fTkhA8++JCN7c1o7q1UvJvkUjP3rYVDxAapdfS6LT7/+htOz07wDf8SBfW8piqnMY8yEqUF3juMinSDVpayuTYiTVOePn/GeDzHBUEdokLqbF5STqco6UkzTdHKKDKFVgKtc9Y2N0nzNoifB//t5xS/mEKp1x8ym085PDqK3SrhI87feqSKD5UUgXa7zfn5BGcdRifkWU7qIgzGhwAy4FzAuihM4IOPBcGClN50zZ8+fcr5+Tn3791lY2MD5zztTpdef8CHH37CxvY2SukGI9+YhAnP7r37TE4PeProayotODs5ZHXlzblGX+6eLyB3Sw+Uy3CnRTSd7UV0e122trc42ntJXc6RPmASwfbWOiB4+OgJ40k0CgwybvoLLpfzPkoO02Cy9YKz1MjIyji+X1lZ5aOPP2U2myOlIs1SEiXxzjKfz6JqWoN1voweu5qk/RQxnU5pt9tsrG3wxRdfxmRcing4Osf5+RghBL1eNxbiqQElcUBQ6oI4KT3KgE4i0VoaiahjFygrMjr9Nj446mlM0sppiasd9WyK9FEYLqKG4nptbKzR7fRI0ozVvCBg+PrhV+zt7ZE//JL38wTTWvlJIAfdfm8pziEbWeRlh11ezLQuQ0C59DlnLcHXKOHptAsOXr7ASM3J2TlnJ6cE58haBWtra3R7PbIsw6gILQtCgDQRXiZlhAtJGYvExXigiasF0uu4ST/0EDk5O2X31h2UMcuup9KGbq/Ly+dPqcoSXbSQshG+l4EgPXnRZjRa4eTokNOTM46Pj9jfPySERggjRNUw1UBcrHU4G1PMmGg1QhAN5MV5x6y0JEmLtbUtBqM1iqLHynCdUX+F3/+3/8rjF8/477//PUXR5sGD99FpcrEeQbwykbz83L3u48V+s4Bh/pDwQlEHwdHpOePxEWeTKUKnGDRZEqWai3ZOb9hjbh2nkwqEQitFUDo2u0JU6nO2RrooDCIAW9U4V+GqGm8cwgLWE4LDWx+FeoKLfBUdIWh5lpFn2bJ4QlyBKMLyvRtjmon4TzdREjT+TUS+kpQS6yVraxt88uu/4/TkmG6ngzKG8+MTpkIgfFQVWxt12Xv5NEqre0+iU8oA0qQELRFpQppnBD3DTue4um6a9B6tZePBtRBUciRGoLTFu4qyKul0enQ7vch/Uk3S2Jynr0IX325Km2QpUgmEg1Rp2mmG8tFHsawstYfu2pBsY0BZlqipQnuJKy0ShZCK0jmsL6nKgC8dKoAi2jwI4pZkrcW5mhACs9mU2WzG7u4uyiQcHB6wpjTZW+bVAATpyYoUk6hY2NmoMJzlOe1ul739fYYrI9IsXbZcF+qL0/E5/XabtdUVjvf3EELSarX55NNf8XL/gPPpBOtrtNGIROOljnYcWlIGT92cXu12m62tLf79v/tf2Lp1K6rCmWiU7azl4Refc3K4z8cffsRgZR0pNT6ImNco2eBb3m4oGfdTD+R5i9pa5vMp3lmKPGNSTqL6ZKLRiSEIjzKRZ0j0bAAELw72qJ97yqoicngNWarj8ygUs8mYyfkpRkOnW+DqPt1ej0QrxuMxBwcHdFudiJJ6F8v4xayGSgosmsOjU4SQaK2xdiE6oNDGRJWfIJjNaqpyxsHBIWmSkuU5OtHEjmycGEX4lIsQjuVTFjcCFwLOR4PM8WTM6dkp5+Mx7W6Pjz75NTdv3UIkSSwQEMgQ1dOClGTtDu999CknxydMx2NODvfxt8o3tg7XJTBXlcYWhomNAncUrPAX7tt3793j26+/5vzEk5mMlZUON25sQRDMy5pHT57FTnmjMJc0SVxdWwSCNE0jBEtEYjMyFk5VVeGRdHs9tre3yLIiykcrjUlStElxIUIPVGMIeTXFuJyULDgRr0t430QcHR3R6w2adQo4Z6O4BFHpbzqdYqSiUxQoqRAeqvk8kvahMdQTUcVO2Che4B3WVUxnE5CQ5JosN9QWnJVoonN2Pauo5xWujq7nkS8lyIuCtc2NmJyImIxvbt3CI/jy68/49uGXtNop793rYbIf3tn/W1EUze8QC5XJ5jp8DzdjMbmoypLp5Jy9l8843HvO+dkJJ0fHBOcZDEc8uH+XVpGjk5RIqV50owPe27jmIj5jQTawKRGAqICpuJhsveLN9RoI3pswgBZIev0B2kQjYOctUko6nQ7O1kyn5/RbbYJQkX8lYlfZBU+/P+Dk6Ij9/QOePX0WJelDhLMsjGKjWWBo4HauEVm5/D4CPjiePn3G6emYre0d0jSn1xuRmhZZmtHKC/7jf/q/8od//gN/+uyv/OH3/8CgO+DW7u4lOFRMMZYw3SvP1isFQsTo4nlzjQwvFDZI9o5O2XvxlOl8St4CUVoynaClwNYlidFYQCqBkRqtNXWA2tooZ+4D3lqqmScESzWd4mYlIjimx+fUM0tdO2zpCES10iAVzlV47zFBobWk3WqRpWmcBEoVOXiX+JSL+6yqKpIk+cm7tkLIBh4uUAK8EGil6PcH/OpXv+HwYJ+vv/qSdluxs7XNZDLh+PCQ2WxCq0gZ9jtwPkdbwayeR2inyEGraDWRGoTWaK2YEZuLztXoxCCEi/LfIZCmkjQNTKcn4GvarYJ7d++RZXnk1F2xb7g8xXzbqnftvIsREusqDAoVLHUVE9PpbI7Uina/g27lzH2NM5AoBToghMEkRePDFaimFXYcYbOu0a8RBDKjUERenZCC2bzCO0G/PyQvCg72D3nx7Dmt9ptDmvxbQwgIPjSwc0PlPdoYkiyjPxjxxeefMS/LCCcOEWruiYJP4/NzVldXUUpikohI0UnCjRvbfPzJJ4xnE07OjhvATQNh9R7tQFiLqDypMmxtbvPbv/93rO/sIpLI4/KuxlclX/31L5yfnPDxp5+yMlrFCUXtAirRsXG2uJ/eNqazaVxH6e+U7a1tvn36AtdzrA5GPPyy5kxMkEk0HxYyYFKDEIHZdBqbHtZyfjwheBntD4SPnnohDgOc93FdQo23nnrqqYzGtwpsXXFyfMTZaCXaj7zzm30lfjGFEiqh1xsxXFlnfHaOrUsg6u6HKMtGmudIaTBmihAVznrmoYoHijN4HM7WVHUNIk4DFphzALGcaEicD3S6HYYrKxwcHuJDYHP7Bmtb26g0xzfa/lI02v6IaOCnUzqjDT745HdM/uE/c7j3jMn56Rtbhuv4IFd9Txbv5yIpXAAO42E/GAzZ2t7mq8mYtY1VNjcG9HodZvOSLM8xOsE2PhEiRP8WKQJeBIRQTafbE2TAqjiCPzo6ZjqdoZRiXlacnJ6xnhVEB3Ro1AeWia+AZTdYqOsnAaqBd12eNL3pQqksS1qtguCJMp2+EZzQmtlsxtnZKZkxdPKC2XSOnZcE6/FlRaI12rtGlceCqHG1IDjPfDrBu2jGa6uE2XiCx5Nm2XIKKnVD6AwRHx+7kpLeaMBwNERqDcrEyYTSbG/fwnnL1w8/45svP6eTr3D3zodvbC1eFyZJ8SHK50cBBt1A4Zpr1lwf1VyrOKWNB8D+3h4HL/d4ufeC4Cpu3rxJuyj49JNP6PSGUdUoOFwI1B4IUfMwBN8k9I0Hh5TLM3FhrCwvED7XFtOvmyL90PtnOFjFmAxPg4+XAlvPabVyhoMes8k5K6ubUV0tRP5kGQIBRVZ06Y/WODk6oZ23ODs7i1AvEbuKdaMoSFBR1KERA7HORWuEEPe6ICRl5UhKh60dGxsDiiJDGqhEhE2l/S4ffPAh9emY07Nzzl7uIW/cbIxYJUIqAvJKvnH9s8ilfedNSRuLxkTSOs90XuMcVFVNXc/orW8wGo04ePGcl3svECYjOPDUS9Pm0OxzUgrqqsbOqngu1BXahwgVqxyCCmqPtGCMiJYJxqBEgrA1iQzkqWF9bY08SUE25q0hNJ5KF2p/i/124ae0WKefIkTDg6RBVksRG1gISNKUtY0NjFF89tfPqKqK9fV18u0blOWcIi8Yj8dU7jlybnE2eueFckKWd3HeQuXQzpEqmBOQriYxikQEVLBkMk6zUiGop2do5dna2mRtdYM7t++gjVlKjl/Hd/s5RL8zpN/qMD3ZQ3mJIKOqHdZD7TxJlqKlwE9LtAOERMlAMLFx6LQAkYGShEoizDTyTrMC54lnRbvAB0uiJSYx9AZDep0hWdrCKMPa6jrHx8eMx+O3vRwsfCNFs7dEqfjIC+oPh+StAlfXBOeb6UfDTTo6paxqOt0e9XwOIcJmhVAYo3jw/gOePHuC/6aisiUBiQmQSENHGIKv8WiGg1Xu33uP7Vu7iCzHeocJjunpCd989TllWfLhhx/SW1mjlmopgrA4f5Z71Fu+z7SKEDkfomBKu90mkYKttRU++egTsDVffPUVk7pC+kAnz1AKyqqiU2QMRyscnZxGQS1nkEKRGBPzSyWxtqasJ3hfkhlJZjRFohn1u9zY2mJeO2azOVmWs7G1hVHvfJQuxy+mUArC0O70uHP3PqeHBxyUe6jEUHuPJzCeTvBCkmcFeauNEJpud0A5L5nX1bKL6rBopcnyAqSmdh7n4ghYyAYyYBTtds69+/cpqxofBL/93d+zvr2z/LmgFCK6yER8rIg4excERmds79zh4PgFn3/5JZ//9S/83/7vb2gdrklQrvJEpJQE55fCaC7EbnD8NkmeZ9y4eYNnTx/T7nYYDEeU8wlPnz3n5ct9ysqipCZ4R2VrIn+IKN4gFdPZlNpWBFdzKiAxmjRN4yRkLYo3dLt9Wp0eRd6mdhYa9SMfQpQtlyEqezXYu6uH6tVk98fq3uZ53viwCIpWa/m7QvDM53Nmsxn9rI0mwlh8VaEFsTgOHuVc44NQYuuKVEVuSqgtpmnBh9ojLLSLApVoZr6kDoHgHcFZ6rrGlRWJMbTaOWsb63S73YaoGiVtUZIsK7hz9x5Sez7/7C/85U9/pl30f5R1uRxCxqlWaDzToVGyajI21UwefeOnMZlMODk5YTKZUOQ5d2/f5r0H76EThZaBf/z9f6eyDlSKFxoh6qj65xx434hPXgAqvsM3EmJRLcVE5hq55usK6jcFvVtdW48QIh+L/QW8SGrNcDTk8PCIze06TpwaNUkpGwEMIaNXyMZmTECA8fisIdPHvMX6+NaUFtGMMRC9RuTi0HSEAEXRikX16ojesI9UsWC3peX4YJ/j42NmZ+eMBkMevPceO7duxWR2sYYNj0o0RP7r1ua6qfWbeh4z6UhEQAuDt9Hsez6xOFdBCOR5hkoNx2djtLEIlaASAWqO1AZXVpGnBHgRxSkSKXFS4GX0eQm+pig6ZFJROYH1gEkgKJQIKDyDdsJKr8PNrTWMkVgPgWZKuZi4LZ5/6yinM3y7jQygF8XKTxFCLDnri2JESIEIstnrNb3+gPsPHvCnP/0R9+wZ6+vrGBO5cDdu3ODgcI9qNsFQ44PD1h5ZaRKjEbVFuHhN2qlCakOepyijMUpgQo23c4SocfMJOos/d/v2bYp2KzZ2mvvpqlrgzyW63Q43b9zg+OgZSsWmn7WOqqywtSNJc3zs2CBsIJSW4DSJ0rggkC6gjMQHwdxa8NHGIU0ThLeMBkMGg5yDgz2SBnWS5TkqaEzjMZimKevr66yFtbe9HMu4bu9M05R2u0NZlsuGq7U1s/mck5MT1tbWEEJgTORgTSaTCL00huFwyO3dXZ4/ecJkOgYZld+CgJmbEipLq9Xh408+5cOPPyZJU2yIE5SzkxM++/Of0FLwwYcf0xuMcMT99TIE5fv2+p88fESYuBCbWGfn5wgcq8M+Oze2qMuSk/E59csXtPI0Pq/OEqo5VS2YTzNEiNY2oQQlNFpJgrdoEaiqCb6cYKTDK4eWgm67zY3tbT7+6GOevNznm0dPefb8GTdu3CDLfh5iIT+X+MUUSk54RJKwubXD/s0XzCZj5rMpwtYoFKKSJN02SuaMVloEbynnM07PTqlPjqKamBB4KdFSR615GZN02SS9WgrSRKIzxe3bN+gULZ4+fcnOrV12bt1FN1KUUkgUUa3NESJPARBCRVK+0ujCcO+9Tzk8mnKwf/SjrMnVzeFq13wBp5GigcFG3XCElKyurbG+sR43vNU+52djHj95xunZBCEk1kalleB95CRJllLkk9mM+mSOINAqMpzVaGNodzrcvn2b27fvYD0cn42RKouGhzImZXFio5rCCaKMU0x8X5ek/Zjdybquo/RyiGqHS6ds75mMJ1RlRWe1C6Ix9gyumWAGnCupGlSlCA5Xz5BZhlYJorII65A+oC34qWNaTUH6qCRYBygtbl4SygoFGCXo93tsbW2RmDSukxQI2XjuIMiynLu3HzA+HfPw66d88de/vPE1uRohuMa9XaJlhP1IEfA+eoI475hOp+zt7XF4eEie56ytrbG1tYXRGuEDQWqEEoR6TqfTYTabReje4r68BM95nWjH1YLpshrZIi7//491iLZaLZpHqXnxzbRBaYYrqzx+/IzZbEqhGq8wETkvWim8kiRJymhtjfPzM2pnUVpSlfMIc1WKeVXjfGg48T7KebOY2EGriF4daVEwWFulvzpCJZrpbMb4xUvOTk4oZ3M2NzbYvf8eK2srFO02KklwwaNkcrEmoVGxvFqMLq/9d6/Fm2paBGdJTTQI1yoS7MvZPHJPnSXJEjq9HuezGms9SniEtdTlBGkTlJAkKhY1Whuk1Bid4+qEM1tSO4tzNpqzJgkhOCyxABU2ikMYFcUddna2WRkNESI2JoTUzQVeOLnE8M5RliXlvFyazvJTcZSuXJur3FSkIElTeoM+D957jz/+8z8zHk+4dWsHpTRr6+vcu3eHR99+y8vn+1TnEzQpbuyRSYJ0EXqshKdIU9IsjVzU4FChRjoP3oGvcdWcoj9ka2ODre1tlE6QQkUZeiGWaIDLgi8/h0izjJs7N9nb/xZbz+L+42A2rajnHqEc54djdJpR1xWz2RjZ8NeE0qhEkBaGVCZYIZgvlGCDp90q2Ll5E+ejIqJRhoalGBuVqtnfBEu10Lcd1zUnF6bKSZLQahWcnZ2xsbGFEKCNoVCK27dvo3U8z72U5EXOeDqLBsVSYqRhe3OLdrvFyckRs/Np5BwBFZBpw7079/nt7/6e/nAISAye0+NjPv/sL6RJyocffkBatPAyihkRouXJTyXH/68J0XhPBhF5WPP5HLyj3ynIjOL27i5Pnr/k9PQEX86pg8XXM6bTSYRaOwc6QesUkydoISmnU/LEUJUz3Pwcb6doBSY3dFttbt++zQcffsTaxiY+yXm6d8jLvQNOz87ptTtveUV+XvGLKZSkEQinyIs2N2/tUs3PePn8MWenZzinMCrFO8lsWmJtzWQyZjI9Zzo9xySaIs/BB9pZC0T0UJrX1ZIL3m23WB0M6HbatHstWq0eX3/9HKMzVlY34kGgZOMbwAJ0g19sfE3SJ0RjkCYkg+Em//5//U9v58G+aMgvJIeWU7PgBd1ul3v37vNf//P/wWeff8FoNKAoWpyfzXEuUM5mUd1GCAie4KKRnm/gTtGcNSFLc0wjj7y6usZgOGQwGCJ0wnhumZYlHZOgQvReUMrEDvmiM83F6/xbk4CrH7+JWKiSaRW5D+W8pNWNxcz5+BwfPK1uF5kYZGJQaYIVjtrFLpsJCvAEa9HERC5YCGVNXZYgFbPTCa50IInYZKNIdYqxoYEGxSXItWF7Y43RoB/hDzIW41LFyYV1TcIYYHW4wYunB9TV/I2ux3Xx8tkzpIyE7izL0Fovp20LN3KTGIpWi+FoRLfTRWm95FOIELBB4rxDK0232+P0LK6tkDJCPMXCfT28IlBy3bW/yhm5DAX7lyRmP/R5lEItJ6NRvlsscK0URRtlDEdHRyR5RsTOhUbOWaGURsiavNVmbWuTs/EZg5URRZZgkuj3NpnMePb8OSenp/R7XdZWVzFNkSSIap3zsqLT7zMcDairkm/39zg/OyPVhq3NLbY2Nhj0B6RZhs6zOJ2UkiAvoJJxEv5dCfDLTYmr12MRbwR6p6NaZqddkOk4ZQ46eoyVswlFkZFmGXmeM53MsWUZhQikQhtBapIIBdIqqnDVNd41c08hcS7KeKvknMR5rFCRDyYqlPMoPNVsSme0ye1bu7Q7bbxXsWhjcS+9CvZXSrG+vk673Y7Knz8hTyksNnEiPDyqFrIUKgouvm9jElZWV3n/gw958vgRz549J0kMWZaxvb3N5OyM/ecv0ThCsBiZEGxJqD0KSFKznA6Fxmoi+BqhPUZAXc0p8pytrS3u3r8XJ/FSNVB0vqPU/ONZO/zrQxvFcGXI5tYWL148pipL5mXNbFKCE1BDNa6ox5aAgzoqA9Z1CcqiTUBaiUoylLMoGdUS8bFQWhkOOTquIwdXabSKXDeF+g5E/uewHt/XjFJK0el0OD7YxznbeDfqpbl3CC7u/8bQHw7x4gSpVBRY8L5BGFRopRDzAHZh8msY9Pp8+umvGQ6GTZMmcLi/z1/+/EdGwwEPHjwgywuE1NRBIJVZomJU04B6xVPuLa+lkmAjJhpXB87Pz6nnM6rpGCWjEe0H77/H/otnPP32a/A1JgSS4AlSkCmF0FHJr5un1FWJTAWJclTTKXkCg84AhKPVKtja2uG9B5+ws3sXKzUrq+vcuHmLL7/6ihcvXrC9+eYExP5niF9MoQTEB6UhTW9sbrG2NmA8nvDw4RNm88B0NuH45JSynCOloNNts7a+Rp5nnJ4eY2tHcCEqrziHw+NxdHptfv2bT7ixsYG3NftHh/z18y8JIeXmzjrdfg+lVWOsyXekKK/i+qGB/grJcLTyo+NnLxPULyvfCbEE1CBeUcQTaJOwffMWu/v7/PWv/4TUgrWNNaRUvHy+R5KArWwzzYiHpdGa0to4/RCCTppjhCRNMtY2Nrn/3vskSYr1UCQZspwwL2e0WnmENIb4WpaVgYgHfhCvbthXE7XLa/ymi852u8t0Mm1c7RXn0zE9N8A6y3gyiZC8IsJKTGLIigwImMQ0aokxOZGN4zvNWzPaYCuHVCZOGX0UfgjOokTAiKgGp4OLxphpyvbNbe7cvkWWaIKdU05L5tUcRKCyNeV8RnAxQTc64b0HH3D37t03uh7XRafTWXbPF9cjSRLyPKfVbmPS7DvToAWx1btYCCJEM0kM5EXBs+cv8M42hNx4T17mpr3u4Lt8D/xbJkZv4kAVjXk1ojGqbv4jpCbJCoajFU5Oj7ixcxOUwroo/yp9TD5MM7ns9Ab0hiO++Ouf2FhfZbg6pNPpEEKgqmvOzs8Z9Pvcub1LojRVFY0rD49OSJKcVCccvzhgMp3Q6Xa5e+sO6xvrtDsdlNFIYyAxcYquGvKzAE8j9CLDMuFexOXE//Kzdx009odGkBJlNGsrQ1qZop7PyLsplXM4O8faGpNlMfkMx7Fj7T3Se7qtgixvcT6eRtK8jYITzkUIjFaaEMBaj61qUCU6L0AIVLAIWyEIGCl4cPcuKyujOBiKaiGNwMV3xS3SNGV3d5e6rpfX0b1BT6nvXa/vTPsisT4IgVASJQX4RVEbWF1bpWgVnBwdcbB/wMu9lzhbok3KcDBE6wSvJCpLYjFUO5TU2BA4n0zihC5Jopy61ujUILynFjBcXeX+ex8wXF0HlSCkaXgji0L1emn1t53QhuDJ8pyNrU2OT/aZz+YRyuohkQlGJihh8M5iaw82oEQzEXJxolj7CZWY4kM8B7PEkGjFqD+g225xfBTPXoVENXxOSZy0LHhtPyf55svXZElRcJEH2GpFy4yFoqmQl6fPCyGsQNEqGE+my70ieM/p6Slaa3xtKSczvPPk3QQtNSsrq+zs7KCNxnrPixcv+PyzP7Oxvs79+/dJ0xSpNJ7GYoGGrypebd78XKZLQkQIrBAS2/BzjVIYFc2MVZqxvbXF5toqR88eE+oaLTVJUSC1imusDTpJ0dKjE0nR7bI26PPiuWDQ75DnBustnU6H7Rt3Ga7uRMEgnZCZlJu3bvP8xUuePHnM+w/uve0l+VnFL6ZQkjIqzLnGFfrF3h5SOm7evEHl4R//8CemFRTtDjd2tllZXaHX60Wfi+B5/vw5X375FeeTUypbM68rHI4kS/ACxtMJ3z59zPHRPvv7x8xmgeFwk1a3S5rnMdFrfEeEDMthzfcla55LMqlvKK4mLYukdBGXN+BXsfOhSeoFPgQ8grRo8d5Hn1DWM77+6s/M5iVb25u08pRnz54xPh9j6xqTZFhnmVdVNJczmlRpuu027Xab3mjIzq1dBqtrOBuoHVS1xRgJ6AYCSJNQRijSwk8jzpReTXwXH1+NH+Nw0VJzsH9AnuekWYrFEYSnri0nJ6copRkOBgggSxJWBgNaacbcJFHYIIB3ocHm+zhh9B6HRyYGoxPwASM1iTHgBXlmUALOxmOUrOl2ckZrq+zeuYnWkqfPviXYMnbOhCBNM/K8xbDdpchb5EWLVrtLkhUYk77xNbkai6LIGLNM9BfFjA+BIOSl4vzi+i39rxZXO0TVgDwvcLZmXk7JjVmaoF699tcVy/DqROhqN/G65Pb77ql/SyyefkFMvOLHzXRUG/rDEU+ePmE2n5C3utGnzV8AuIKPvEiTpKyurvPo4UM+/+Ir9g8OGA6GZEXO8fk5VW05Oj7jq68eEnygnM85OTkly4pGQRFWV9a4/f4uq2vrpEWGTpM4/TSaoCRORsjkUrFhsRY00FfxqlDGm+Jx/UtCNIn4zs42z3e2wU7p97tY7/n68QvOxmPSVpdWq0U9j51pF0AqzcbqCitrazx58pzDo0PqskYmuim5A1oqEpNEURAhmwLLAR7pA8pHXtxHn3zM+w/ukyTRd8+JKHmvLu1Ji7VY3PNpmjKZTHDOoZRiOp3+6Gu1eC3w6vPwCg8oRDVEpETrBK0dWZaxur7OcDDk7OyUvYM9jqXm1m7Cwf4eh6fHVNbivMdVNU6aqCxmA2mmgWi2qo0mzXLqckZ/MGT39l12du9g0gKpk/h9cgH3bmwfLj17P5fCQCcGj8IkSWxmysiT1VKhpEELhWyaHiFYpIx7XfAOQiTtmyAoG95zmmUoEcjThJ0b2+RZjnc+im1IiVrAzNXFOlw2fX7bcd31Wbw2pVT0J9Oa6XRKUUQO74XaaYSqCKKvIoIlNE7LKGggIapS1ja+9xDl6vMsRWuBtRWPvn3MF19+xc7ONg/eew9j0ujfGF8MXNJKFFf2qUW87fvLN1xGKYFGxClNM0Yra5yfnbOy0YvKm3WjlitkhNt5SfCK+bwiyBqtJXmry6Df486tHbSKIhvtTgujFa1Oi9XVVVrdEdK08EKjTEKQmrXVVdbX1nj67Tfsv3jxVtfj5xa/nEKpybaFUqA008ry4sW3HJyeYEzG2tYW/dE6g+GIbrdHq1XETr9UOOdI8za1g2+++gJ3fo70Ucqy3WvjguXzr78iSzTlbEo5d2jdZmV9g5W1dZCKIGKyJ8Tiob1Qk3tdiMZd2r1hrcariaCUclksLT5+XWd42RlqPu71+vzq179GBMuXX3zBs+cv2FxfZ3VtjcODA/b29iJ8xamYeBHXVAcwiaHVaXFj5yY7OzukWQaoWDgEln4jC5f2129mF2v5uqLz8sTsTcaTp0+w1rJer6N0lOhUQlDNZ5TTKe0sI0tTwCMEbG5sMBj0OT4+iq/F08BforqZkYpZWeKsi0WUrVBSRnKmCOStlCRRuLqk08mQMqffH9DttSirGUcnhxhj6He7DPpD2u0OWV6QJBlaJxiTRkiHMY108Y9/2NbWUsjomRWL3MusDXGJ43L1GsVnxjd/x4NSYEyCSQyz2ZRWt4eU+jsH9eWPr7vfL/+e74OzXPfzPzQu2iTh0t+iaUxI+sMREDg+PqbV6cUEAoFvkggpI6cmBEGr6LCxuc3ey5c8fvKCF3tHmDShrGrKaU3wp5wcnyMFGK2QUtHLW4xGq+zu3mY0GJEXxVLeVycpUus49ZIqJoBCx26nvLhuYtG9WDYwXo0fE+66CB8iH2hzc5N7d+9gREW7yKmc4/R8zvHpM3zqkVqRpiYWPVIjlaadZ2xvrNMpCh4+VBwenTAuy6g0KKKaFN5jlEJ4T6jqmHhJhUkUSjg2tzb49OOPWFldBRlhLxJFtIxYGM6GV56xhY9SVUVp8fl8zuHh4Y+yPlfj6v1+tWAK3kczVe8ATZJmBAK2thCg1elyI89ZX12nnM54/uwJ0z/9E9OjQ6yzUc1TCUyrRREa6N3iQgFpmpAlik6ny+69B7S6g6ZIiiIjUjX+hpcUyRbxs4GaqbiPzco5zjlkY56epSlVDYmM+1hlK+pqjpI6QqKI70kLiRABV1f44MnTlCzR7O7cYGtzneAsIgSMNmTNpF0KufRba+i4BBk//rnG4p7SOgo1VdWFIFYEyzRqmcRdXmod7QxEnKqIEOi02rGZ5H1UcCPuYe1WwcbGGkIE/vhPf+DR46d89OHH3Lq9S5JmxFaHQCq1uPWixcKVptfPSVnRqxSJjWI6s3PKyYS8aDMcrXN2es6grKjnc87H5wTncJWLXm9BIIWkqkvm5RRrS3Zv7vLrX/8dRVFQliW3HuSRG1bk5EURG65SE5RGKI2QKpofK8XO1ib7j7/l+ODgbS/Jzyp+OYVSk2hrk9Dq9Lj73ge0ugVSCoqiQ6czIC86jRFgssSxShmx6mmace/efWxV8vjpE8RE4RUkSYoPiqqaYoyOakd4WlnO6soqnW4XpRUIf9HN8Cwlra9T97nKm1iM299EvK5Dd5nfcZlrcPlnFt+3eE3WWoSAQX+FX//d35NnLf70z//M4ydPubG1xb179/jgg/c5n5xjrWU8nfLNkxcc7u3TXV2jled0Ol12dndZ39oiKI3WaYR/iOinoXV45XWIS5lZfJ2X0s1w5XsvvYfF5970xlgUOXv7+7x8+RKtNbPxGG8d9WzOfDxhNBqRat3AWqDdLhgMemgtsY1qWUQvBYw0pNpQhYo8iQmEUYqilaO1RGtFliu8r1HKULQz8jRltLLKcGWVbrdPu9uj3eqQpgWmuY+V0qiGrB6EJkiDRzddyze2FK+Ns/GUdrcf4SMichG8uIDaXVRNV65LkDTOO4vTNULQlKLX61POZkuO4HX36NXPX/7c5YPydYqJV4vrN32gxi7+JcvfZsKWpimj0ZAXL5+zfXMHpRIkgSACQkS/JOXAS0GS5PT7I/rDVc4mM+bTEuOIAiPCUFuJEyFK0WMYraxy8+Yt1jc26Q+HyDTHGUOiTTSAjlcJjUYKhUYhQ8OfDKKBl/3Lmg0/dgKipMRLSdFqsXljmxdPvmE8m3E2nnB+fs5sOsMkBQ5BmiRMG7+RNNHMpmMOXrxgbX2N/9N/+A/My5KvHj/mr19+gbeWGmilWcT6OwfBIawgSRXtNGFlsMInn/yK7Rvbkf8gI8znFYSA+G4RvpgoLSZJ8/k8ohZ+gvi+ZwEiX9Y5t9wUZFCoEP3JRIjS3lo255bW3EhvEZTg4Tdfc3ywz2wypfYR0hdChIsaHQvHdpHRyhIEniTNGa1tInWGQMdGkAwo2SSz8lV42c+lSAKgWaPJZIJ1jtpZynJGu10wHVdIESInyc6xvkZqhQtusckThEAp3SjahdjlLzJu7dwkSxKUhHbRYnN9g0G/T3B+OU1aXqdL3JqfW1zNYbTWtNotnI2vWesoVnBxTRc5jsQ31gVCggwiquX5mDeliYmTpDxjdXXExsYa//SHP3B4dMSnn/6KO7dvI9MUkFElVKulyM8iY5CEi2n+Nc2CtxoBtNGE2uIbEZl2e0B/MOD8fEJVVdRVTTWrUAgqW+JsiUpSCA6jFbVVjPoj7t69x3BlJTZtjaHb7y+fa9nI7wspl3+UjD5wUgi2Njb4qt+n8zPw6Po5xS+nUKLpwEhF0e5x6/Z9Nre38M4hpUGIaPy5JA2EhWFjdM22ztHvD/jkk08xacKXX3/F2XTC+fkU52vK+YTpeIYInkxGB/LMmJggi4ZUL0GgkI0a2VWjS7gK9Ymfe5NTkKsJ4HWFw3V+J5eTyuWaSomUEd/e6w65d/99RBA8/vYhT59G5a5buztsbG7SbreYVRXOZIQA7SRDRnY5edFCGhPHz4s3LqL6UbjUfBdSXhqiv7op85qN7sfuSt55cJdOr8Pey0iGt7VlfHrK+OwMX1W0szSSdSEaoCpBr98hzwzz4Jp7LApkFGmBUQlGl/Q63dj5EZ401VEx0NV4Fx27y7JESsXKvQfcvfce7U4XbVJMkmJMhlAGqZMoDS4kXiiE1AhloiKXiMX7TxHj8YTxZEK300Wb5lotLuyVYhZooHZLwN1FR140B53StDtd9g/2UYJGerz52WumRNfF4l64Klu9fA3f88z94HvI+1gUebeEliwFXTygNKPVVf7hH/7AdDql3YmS3KHpJCMEWiucj53nbqfL6soa+3v7MJ+jUQgkOs2QInpmaC1IkoT+YERvMKRotzBZQlCqgdolSLFQAVSoIJEham7Fei4WaojovyPEq8/d1efsp4CyGCmxQiBNymhtk2fPn/CXzz9j7+Uehydj6qpicn4edcOUJDGa6WxKmqRsrK8SguXxo0ekScJgMOSj9x7Q7XX44vPPsdMptqpACoyM8FGlFd12xs7OTW7fvsUHH3xIq9uLflgNvyBCaOPedfk2uVwoGWOw1gKwuroaYUc/QVzdz6+bni4QBVJKglKkzRnlg8eH0EwmNZUUaC3Z3b1NliQ8LVoc7u9xeHLKrC6j9YFQyCBIEkOrKMjznCxL6PRX454v1SV1u4vG4eWG1iuF588gBILaWc7HY0ySsD3YxtdPcbUgG/SYzebUNhARcx4bLAQVFSt9hA+YxJAkcYJmTMLtW7usraygpERrya1bt3DBUTRWIouCwjsXuT9SXkKlvN24rpm0LIh8FNtR2jCenFLZiiRtpK2bSevCBFmKaDiPc0gtCb7maP8JKpT0WwafxmZNt5WRCsFf/vEfcQj+w//2H9m5fRdpEkIDEZYNeuHq/d603K7NCd72/aVUcx5IQafTZX1tnW6nS5plDIdDZvMZVWmpZyWCgBKeIKNVjZcSUGytb/H3v/1f2Ll1G2USkHGy7ZxDJTqWiUI0lg7ykkBQ8+wJQVWWtDsdtm5sv9X1+LnFL6ZQCjikjAeaR5K1emRFEaciKPAC7xun9hAa+EEkJaJUNFn0nl63zZ3dXV7u73M2nTKblVGswElmtUUGT7edo0MA51DIZjoiGlx/9E+C7yZ0331ow+vy/39zvG6idPVz1x2i8CpRPhKRPfhACIJOp8/tO/fRyvDk8UOePX/OZ198TrudMxj20VnG88MzZuMZZ+4U6T2bm5voJEUIiVYGHxaJcbMuy9/dTJmueU2IC9zz30qM33SkScaNGzdZGa3y7OlTPvvrX/nqiy852N+PqlousPfyBdoYnLecn59iq5JOgxn2zi+d2fO0IIRAahICEWYgcCgRlaJCcFSzmqOjI0IQ3Nq9zd27H9DprmBMijEJOknQJkGZeM+54FFKorRCaYVsNkWPR4nXr9ebjLW1FWbTCe1WgdFF5NwsinQiLv273Lgob9182HxAlIFH0er1ef7iOb6uEcm/bBu77r1e15W9rsv4Jg/UajYlTVNwPhq3Lu5r38yjpaI7XMUHybMnz3nwXgepZMTc+GgeTLAIGfDEqW6nVTDotjENxFMEjxOCIGEyn6CkZLS6Sm80pOi0yNsNZ0wn6Eb1LULzmkRVxql3ULFZEffFqO4oF/fNIgm5tD5XmynXrf2bKqQkMRn3ytDqDNi6eZdnz/eZP92jqhwCwXwS17rVaSMbQZ3V1RF379ymVbQ5OTnl66++4vPP/8qd4Pj4g/dJpUB7z96LF2RaIWXsaCstWen1eO/eXXbu3KHV6RKCRJkU21zLxftb8Gzgu/fQojio6xqt9U/yDF6Oq5N34BWe6mV0QQhhKfUMEJzEWUuWZXjr0EKyu3uHTrvDl1pTOY+Yz7E2ysZLKcnSjH6/z0cff8jh4SGDlVWMMUs0xVUZ8J9jgbQIJWE+LTk9ntBtDXn//n1y1eXbbx7Gqawv8Ymm9pJgFUHQFEUC7wWJhswIUpORpgmb2ze4c3sHpQJSRduITqcdRZCsRWqJ9w7nbZSMJp7BU+cpy/Itr8b1hdLi7wVPyRjDdDplNp3T7fSWPxuvr1w+E1maIlSU8D4/G3N0uI8SntwIZBIbrK08I9iavNPm41//HXfu3geT4oUk+MBCOXjRBFvcV9cp3F29395mCBmbUSBotVq8//4HPH8WlUs7vS5PnjxBhoRBb4CfHuNJcdbjIvENnbb56MNPeO+9j0izgiBlbIY2nLbFMRontrEokiKK9AghCM5xOhnz7bffsrW5yWi4+lbX4+cWv5hCKebaAik1EGKHPkikNDjXdEZlJF36RrbSB994CAWUajDcCkajETdu3ODpi5d4FzBJgjIp5XyGDI48TSnShGDt8oaMUDuQaJTQeCxSXpDJrzscRDMo/rGe4euSm9dNmBaH52UO0+LnHQEhNEJ68qLF6uo6hwf7VFXNyekpz188x/kalSSYVp88a2EnU9pFQZJlmCTyZoKIXSMpVey6L/pmIX682Oxet7Fd3viuJgM/Voc7BEHwgTwvGA1H3N69w6Df52V/iFaG09NTfv/7fyBJU/I8ZTI5w1YlWiukFNSlxRF5N95ZrI0FuneO0tYQLEmiGY2GjCdjjg5PkcEwWlnjow9/w+raNsakaGNQWkcORjN5i13aplsrQ5wgCQlyoSTXEF5/5FhdXSWE0MBNvss9uKpSuJBu1Vov1ZMWPB4hQCDJ8zxO7yZjOkn+yr/5OtXDq3H5/r/8Pa8rlK7+2//WODg8ZH19fXmAK6Wa+dnifQZarRb9Xp8njx5x984dlEmjrK6Q+GCxjerhZDLh+PiIvb09gg8RZinAVhW1jaqAdVnSX1lhfW2NXr8XlQZNFrHpKuLT1TX70HLjEbF5Ia+5dtc9j5eT70Vy8rpr8ENCS4XQcfIfKNi8ucvt4xPOxzOq+dfMJhO8D1TljKKdURQZ1tYMV4Z0u12KVovBcMDmxjrffPOQ0/E5wln+/e9+y63tbf7pD3/g0bffomQkRA96XT54/33u3rlL0e8jVQNjDSHC74h79kJ0RnCZuH6xXosiYTqd8mPuTVfjdc/AUjTlSqPscnPMNEbD1hLRFkJErqlWOGvZunGD/nDI2sa3HBztc342ZjqdY0zK+sY6d+7eYTDos39wRH8wXEpEXxdXp0mve+1vIwSRJ5noAi1zXK0osjbddoeynJLnmrq2DNo5rTzFBYFKsoZnLCiyhE6RkzUm61liOD7aZ3x+spwsCqEaj7mLM9k6S5KkaB2RL0pFrtvPIa7jM0O8ZlppRqMV6qpmPp9HE/GiiEp+Ui0VFpWU9Hq9+GwoxWQ24/jkFOcDSRqL8tB0zVbX1/nf/uP/Tm+0AjqqcgoUQl2gAy6/hqtTystfu/r9bysif1IQEXKanZ1dyrLiq6+/4d69uyijEV7y93//O/74+5Lj/Zq6hLm15J0u2zv3+dWnv6Hb6+ONwoWGG7nIhRZvUURMTmMBumxazuYzvv7qS5Ik4f6D9zDpjy/y9D9S/GIKJSMTvCd6r4iFipaIHV0JSIELjdeIhxAkMgRCiMlaCJ44JnYkWcqd3V2+/OIrXFWhm6QUoxAhqptJLQlagI6wDwjopppHBNQS5sd3DoTFQ63Em3cmvw5Ct/i9lw/My12Zxc9d/vvVzpHC1jVCSmprKesaj2AwHEV+krOUkxpJ9LEy2kBtEUJRFJ3oJ+IDqKbTQYOjXb7thYxo7NT+a+LH3gxjkhvVCZVOUNrQHQzoD4asrq5xfHzM/uEBJ8dHJErTWllFKcl8Pmd8do6UUZUOJOW8JPg4xVzgs5NEs7Kyxt17t/nrX/5Ckbfob4y4e/8Bu7t3MSZrJkg6kqGbjpyScknSVI1ow6uJ7SVI248cSZLESVmaRoPBvyFOsphaLjqNYQmDXRQS8XuyLOP46JjOYPXaLuHr4rpk/7q4/By8yTg6PSHJM3q9XuwYx1fCcspM9PjZWF3jH//hHzk5PqZvVnEhUM7mnB+fcnJ8zOn5Kd5ZhA/kaUa+scXJ0SEHhwfxXoo4OTqtFhvrGwwHQ3qdHmlWoE36HX7k5aTiFd7k30ha/1aj5bp4E2vqRSAoGaFvQqNNwb3771NOptjJmL1nj5hPJtS2ppwo1tY38T7Q7fYQJsWhUSqh0y/48NMBL1484+mzp/T7PW7e2qHdadMd9Dk+OiIEz507t/ng/fdp9wYEaaIJstQNhHhx7Wg2LkGQIkpvI5adXASIELkbdV0BAal+ukTtajPpdR9f5aou+CZSEg08XTSL9s6hVJTD7uiEDz9q431NVdVUlUWblFYrekZVtqLd6dHpdF+5v67K9V9+nZdf088hoUVJVtZW+eCjjzjaP+Dg8BipDOubW7x88RQhwCSBxDlmlaVyHhdANH5IWZ6TFTm9VoturwfKUJYVznnqOpq1KxVhaGVZUtcW6xxJYri5s8PKStPsaEWT5Z9DvK7YjxMl3cipbzU+SvFcEkpd8GSCjypvWR59lET0Vez1+xzv70fkhayxdc1gNOKjjz9hMFpBpBkWDSLCy0UQwKuT0ddNKhfxc+EoCbHYOyM3O8tz7j94wJdffslfP/uMGze38ZVn984O88kef5ruM8WS9frs3v2Auw8+Zm1zMzb7CSjZwA1DANHkp/E30RwLqKZIDcHz9MljgnPcuX9/qU74Li7i5/Gk/RQhokeDkL4hJgNSxASsketedHCuQg8gFk5RoswgfYiY9vffp5xMqOoSJQVCCYq8HbtvUpK3W9GoUYBqbs7Y2RfLJPXyDfmd6VIjyfsm+42vI6+/jtD+uk765a/54JFKLqch1sbJyPrmFrP5jLKqsT4gVJTz1VLjlcZozbA/IDUJ8TI08LpwkVxcjuuKJSGuX59/TeL8Q0KGiIuOE5OUgKAs67jRj1bo9Aesrq1zfHTA0dEBJ6fHnJ2dMZvO0MqQJhnWWuq6YjKdkpgUQeOXk2W0Wi1u3b4bJWi14e6du2xtbnPr9l2yTguhNFIrpAKhfONsLlAqQTSjddUcPgKB4rIi15vlv70uonJhXP9F1/R1BTtcPAeLiYT3Dcn3EhFXIul2uxweHbLDdzvii+9bxOuI4d93X18nBHL18/+WGK4MOT49waRRNl0SCOECXSiIsN1ut0OeZXz77SOe7+8xq2qkEHSyFu12i9HKkCLPCd5zcmuX05NjXrx4QZZl2LoGERUH290ut27tMBwMaHc6pEkW+WtSotQFFOxykXRdgnFZHfO6pOPymi+S6+vW+E1FEHGyHcnJBpMIut0BH330CdKVPGobTvb3OJ3NQacoJej3eqyurZPlBVIZlEkQSpGmgs0b20xmE759/IT79+8zWlvlN7/7HZ9//jnz+Zybt+/S6g8JQuOljtLN8J37B4h7wmXRGdl46QiQSrG6tsZ8PsMHjxY/zTH8uvv++67PZTRBfAYkXgXwDmctrimYpJMNZDaKFBRCQIhrIKVGiIAjNGIa6WuRFNc9e1df+9sMpQ1JBrfv3ePGzZsEaxEEvKv47C8pf/7TPzcQMjibnFBZS+0dvpkuZibh1s4K9+/fY9CPqn/amMg18fEMuVygeu/jNEoI2p02aZqhVITrXiS/bz9eN5EUjWJrlufLQkDKhdWAXHp7lWXVXON4r/UHQ/7T//n/ws3NLZ4/fYzCM5/PGI5W2bhxE5Vl2KBARhSF9f4V/tHrmlxXp6ev28d+6oiomQau2zSnkizn7v17/OUvf+bps6cUaUG3lbF9c4sXT9dQx5rNm7f49e/+VzqDVVCRFyabnHHRv4n8rMV6XEzZpBAIAof7BxwfHXL/3v1o4EsA8eYExP5niF9QoSSi3Y5vOrdCRMlbWGYoSlw4NsdPX7g3xwcrdkC8c6SZ5IMPPmR8fs6333xJCJZWqmm1MhSB4XDEcDhCqkh8VmrhRxKT1gXE5vsSjlenKm96OV49kK7bKF6XKC4etFe6yA3PJMkykJLBcMjW1gZ5nuN8YG9/j7PJhMl4QmJSjFAMBgM21tebiYpo1GmiDwWNGd3F6wrNVO/i///W5nY10fsxQjT3DATSNGdtbT1CgYRc8oSyImcj2WAwHDCenPHk6ROePXuGdZ6yrJjP5zjrqWvXFDaGotWi2+mysjJie/sGz549oT9cZXN9la2NTfJOG2miCajQEYqhVCSFaimRQsfupEyazlGs1KWQCKJogDA/TaF0Nem+7p57Hfxt8fMhNCrDAQLxPmi1W3z59VfU1pIusNbXwHau495dm9xeeX2XC4OrX/shUZYVk8mYzz8/od/rkyZJ9PipHZPpDPC4usLOSpIkwVmLMYbR+jqj/pBMJ4DH46PHiHOkSRrl9JOEfr8fjXqbwzcr2hTtNr3+gCxvYZIUqSOUSinRwEBfLZIukuPrJ95X43X7yY+ZgCyggILoj0cQaCnoDUa8/+GndNttTk8O8UEwns85Oj4jydusrKxgtEE2CapuJphZVrB94yZ//vOf6fYH3Njepj8Ycf/Be/gQGA4GIFR87sL17++V9718fcuvsti3Bv0+jx6fLc+XnyJet8dfe/ZcgsACy8luCBIpAxChU6Kucc7jhUKGEO9JQfRiknGdlFIQPNZF3pjReslfWdxzV5/Zn2Lv/reEUBIjokiO1ppgXVTe9DVbN27yzTdfM5vNmM1KxuMxXoANYNKUVqvF1o2b7N69z8rqGlrHQj2E6O2VNFwwISOvWTbJaiAqoqmG0+pDhJ36H3/r/hfF6575eG0F0AhlEQul0PCQZcNFDiFQliXKGBBR+VMIyWhljd5vO3z88cecHO3z7Pkzbt66TdEf4KVumtdRaKRpySx/73X70dXi6XIO87bvsYWfHk0WFHykIKRpxt27d/nnP/4Tj54+QsnAe7dv8smvf8OL5y/pDFZpdYegDUGKOJ1u/invo7FGCFH4Bpr32dg8aKU4Pzvl228fsrm5ydpaRLuEsJg2vYtF/GIKpdcd3Fdlsa/rtF0+MPCNep2Q9Pt9/t3f/z3DbotnTx5CqFFSULTa3H/vA3r9PiiDlCKCycTlAxTg9Q/njyn9ed2Gdl1RdLXj/7rNREmB82Epw1mWc3qDAb3+EJOmzOZzTJKQHR8xrUtSBf1ul1s7u6ysrZMkKVY00qkiri3EhPji9Vys3YKv0rBWvreYfF1C/KYiyEv3hoJuvxfFPZq1k0qCl9gg0WlKN1nhdt4mK9r8//7Lf+HhV1/haw/eUSQpRZqRd9o8eO8BG5vbZGkasexFm1v9IRsb6yRZGnlcDcZ7MREQiOh503DilFINrJRl91HIQJysitgv+J578E3F3ypOvu9nYFGwXDB4aKbBraLF+HzM/t4+O7duAVybeF7Xsf5b8WPB7gC2t7cYjYacn51xuH9ANVP0ez2crTFK0G73yLKURGq89Wzv3GS4sUoQEdornI/FItHBXigJStKhh04MvX6/8b6J92Wa5ejEkOUFOklROmkkoEOUhW3uIXgVrhKft4s1XHz9dZOJy/G6AuJNxkJR1EvAeWztCQiSrMXa9g55q82LJ48oqznbacaTZy+Z15Z2O0LBoupTVH5acCWGK6sMV9fY2z9gbX2DLMtYWVt/NXHnu5YOl9/jK/daUygturmLr5skwTvHfD6nKIo3vjbXxevOt+/73sX3Xf4TOaogpELqgJAhqiKGgBfEfbxpzkhk3NMJJIkhS9MoKnPlPnud8fPiz0/F4/pbIYUiqOZclAphokE4QTEcrjBaWeOrL7/iYP+A6WyG0Go5Tep0Onzy6adsbm41/K44afc+IJVG64is0DSbtrg02RWC2jbWAHIxvft5xHXXbfFxzK98I6TVNKBEnBwtiqSFiEGWFw03PDb7wGHSjLqu2Ds6YevWbVa3boBOcA2SA0+Urm/qg+/bi15XiP8cQsJSDGbxZuK6SdrtDvfv3+fo+ICDkwM+NHe5e/8Dbu7cowoKnRX4BnbvbB0l/AON6W5oBB0u9iIAhMDamufPnlEUOTdvbDf32qWfexfL+MUUSggRb5hrusdLLOeVsSxcdJWXn5cytraDJ3jLYNhn99YORy+fcH5ygsoyNja22Ny+gVKGIGXEg0KTdIhmAwT4bhFy3aHxJuO6LsrrJkeX4/KhtYBbLCIQ11ZJwXw+A2/pdIboNGPU7vBpktFutXn65CEnR89I04L33v+Y++99TNHtYIWIckJEc1G1eE2SC5lo2ST1QjSdpMULi/953Qb4k3lNNFm8kBHe5lyEIS4KJekjF0WKKIe+tbnNaLDCy+QpDgHBUxRt1jc22L17h9t375IXBc5F/PbtO3eQQqKMviQtf5HkysbkUjVystE/STbJ2auTgWW9+RPHddC1f0mSHUK4WN9FYiUgSRPSNOXs7Iy6rkmS5LXX+7qk67pCKISwvHbXvZY38VymSUpqErqtNqP+gL0Xe9iypt/tkpqErJUjjEK4QN4qokpRI/MelZ2iymR8HBRKiAu5V6PJWi289TEhCQGVmMbgsSkKtFxK7SsVIRjXcpMAmsT3dWv4NiMmVZf+X6kG7lXjfaDVW+FmknN2dszJ6QkqSbDzEiEkSWridKgRs5BCRDNR77h79x5fff01Z+dj8qLVwFiawrnh/l1W4Py+wvxyoRS/Fv+tNEkwxnB8fEy/3//xF+vS67p87b7vLIDvwtAXX49S1yBRBBnipDcElIgNLKV0VESlmYjIOLnM0vSV++1vFUmXP/dzuOe00tjgG0nlRtQoRJGcNG0xGq3x5NsnZGlUaUMInIBOq82d27dZWVldetrJRdHTqLMhRGO22xRIS/hm/CMbs9u4DG9pE78S1zVZXy3IZaNke+nahYt7LVxqeqZpSgiied8BgaSyls+++BKhEzZu3kKqBKEMNKb0UkS/rsbnd6ns9n3QO7jwpvwxG2L/qpBmIV3VvKaLZ01KRa834KP3P+bJo4fsH52wtbGFKjIy0RTiQhDFygzB+yVwimWhtIDbx7WWePb39zg/P+XOnXukeTsW7Yvp38/gWfs5xS+nUCJWyoRFonEFAw1Nd+e7yimXMdrxiyFW/MTEtNfv0um0kbZke2uT4WgVbdJIWBQRB6pExKh7ceENdAFnuPi3v/PQ/oQP8HWH0fdtIJcPTdm4sC8kS4sij2ICJmFldY00MbTzlC8/n9Dp9Lhz+zarayt4dKOax6sPp7jyd3wx176mf2mX6MfYDK9Lvq/+HaRcdokIAiUEqUm5f/cug6JgPh5TlXN6wyE3dnYYrq5ispSyqlBGo5MEby2EiBwV1xRKUXZeLOEsatkl/7dNVH6MuJqgXVVDu46zFEJYEuQvcneJ8440Kxo3dkNVVhidNPdIM71FNIfnv47vcPV5f9NrpqXA1g4lBFmScmNri2dPn/Hi2XNWRiukRdbwyjye2MSRUmIXU0opEL7ZRwTQONlLAYnIEFmz17hmryMW7AKiaa1cTMUvIBavS05jVf3qvvRzSFiheX0N7DUqPDbQaSKM2ruatGUYZRmdfp/BcJXPPv+CWVnS7sqoErng7zXPk5aSTrdPvz/g6PiEwXDUwKEWaQyvcOUWf7+uq75IThavc/F1qTXtdpvTs1Pquv6JVuzi9cH11/FvTZsWhc3CB2rxvSE0iWuzjgLZdAebNFhAog0QqKuKrPX9r+2tJ67fE1KICKFv+DTCW4KQ0ZT+7n1Cbdnfe0FV1zEHUJLVjQ1u37tHt92JSng6iU0LEWkAspluLhoeCNHccxfP5VXVyZ9LfGfP4JpmmBCIRUNaXIJis+A0W8ziORPxfVfVnKOjI87Pz/nkN78GaUBGRbdwWZQgCEJwXE4W/iU5wiLfe9vn4tWIbz82XBdFdJYW3Lx5C1dVPHr8lF5/hXa7jbMOIWOOGbcYgV/6DtLs/6GxoRDLhmNZlRwe7DEaDVhZXUEgESIW4vyIjfr/UUOEn8up9y7exbt4F+/iXbyLd/Eu3sW7eBc/k3jH2HoX7+JdvIt38S7exbt4F+/iXbyLK/GuUHoX7+JdvIt38S7exbt4F+/iXbyLK/GuUHoX7+JdvIt38S7exbt4F+/iXbyLK/GuUHoX7+JdvIt38S7exbt4F+/iXbyLK/GuUHoX7+JdvIt38S7+/+3XsQAAAADAIH/r/WMoiwBgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYEQJAABgRAkAAGBECQAAYAIukp33WtuD/QAAAABJRU5ErkJggg==", @@ -7234,70 +260,7 @@ "execution_count": null, "id": "fc19266e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n", - "6|1| | | | | | | | | | | | | | | | | | | | | | | \n", - " |8| | | |1| | | | | | | | | | | | | |1| | | | | \n", - " | |5| | | | | | | |2| | | | | | | | | | | | | |3\n", - " | | |4| | | | | | | | | | | | | | |2|4| | | | | \n", - " | | |1|5| | |2| | | | | |1| | | | | |1| | | | | \n", - "1| | | | |9| | | | | | | | | | | | | | | | | | | \n", - " | | | | | |9| | | | | | | |1| | | | | | | | | | \n", - " | | | | | | |6| | | | | | | | | | | | |2| |2| | \n", - " | | | | | | | | | | | | | | | | | |2|1|1|4|2| | \n", - " | | | | | | | | |2|1| | | |6| | | | | | | | | |1\n", - " | | | | | | | | |1|5|1| | |2| | | | | | | | | |1\n", - " | | | | | | | | | | |8| | | | | | | | | | |1| |1\n", - " | | | |1| | |2|1| | | | |2|1|2| | | | | | |1| | \n", - " | | | | | | | |1| | | | |3| |5| | | | | | |1| | \n", - " | | | | | | | |1| | | | |1|2|4| | | | | | |2| | \n", - " | | | | | | | |2| | | | | | |5| | | | |1| |2| | \n", - " |1| | | | | | | | |1| | | | | |1| | | | | | | |7\n", - " | | | | | | | | | | | | | | | | |5| | | | | | |3\n", - " | | | | | | | | | | | | | | | | |1|4|5| | | | | \n", - " | | | | | | | | | | | | | | | | | |2|3|3|1| | |1\n", - " | | | | | | | | | | | | | | | | | | |1|5|4| | | \n", - " | | | | | | | | | | |1| | | | | | | | |4|5| | | \n", - " | | | | | | |2| | |1|1| | | | | | | | |1|2|3| | \n", - " | | | | | | | | |5| | | | | | | |2| | | | | |3| \n", - " |1| | | | | | | | |1| | | | | | | | | | | | | |8\n", - "\n", - "Per-class Accuracies:\n", - "Brachinus alternans___________________85.7% (6/7)\n", - "Brachinus cyanochroaticus_____________80.0% (8/10)\n", - "Calathus advena_______________________50.0% (5/10)\n", - "Carabus maeander maeander_____________40.0% (4/10)\n", - "Carabus nemoralis nemoralis___________50.0% (5/10)\n", - "Chlaenius aestivus____________________90.0% (9/10)\n", - "Cicindela punctulata__________________90.0% (9/10)\n", - "Cyclotrachelus furtivus_______________60.0% (6/10)\n", - "Cyclotrachelus torvus__________________0.0% (0/10)\n", - "Discoderus parallelus_________________20.0% (2/10)\n", - "Discoderus robustus___________________50.0% (5/10)\n", - "Euryderus grossus_____________________80.0% (8/10)\n", - "Pasimachus californicus________________0.0% (0/10)\n", - "Pasimachus elongatus__________________30.0% (3/10)\n", - "Pasimachus strenuus___________________20.0% (2/10)\n", - "Pasimachus subsulcatus________________50.0% (5/10)\n", - "Patrobus lecontei_____________________10.0% (1/10)\n", - "Poecilus lucublandus__________________62.5% (5/8)\n", - "Pterostichus corvinus_________________40.0% (4/10)\n", - "Pterostichus melanarius melanarius____30.0% (3/10)\n", - "Pterostichus novus____________________50.0% (5/10)\n", - "Pterostichus stygicus_________________50.0% (5/10)\n", - "Scarites subterraneus_________________30.0% (3/10)\n", - "Selenophorus planipennis______________30.0% (3/10)\n", - "Synuchus impunctatus__________________80.0% (8/10)\n", - "\n", - "Micro Accuracy: 46.53% (114/245)\n", - "Macro Accuracy: 47.13%\n" - ] - } - ], + "outputs": [], "source": [ "results = BaseResultCollector(model, idx2cls, cls2idx, True)\n", "\n", diff --git a/examples/mnist.ipynb b/examples/mnist.ipynb index 8bfb119..491fe4c 100644 --- a/examples/mnist.ipynb +++ b/examples/mnist.ipynb @@ -7,7 +7,9 @@ "source": [ "### MNIST Dataset Construction\n", "\n", - "We download the MNIST dataset, parse the IDX format, and extract up to 500 PNG images per digit for the training and testing subsets using the standalone `construct.py` script." + "We download the MNIST dataset, parse the IDX format, and extract up to 500 PNG images per digit for the training and testing subsets using the standalone `construct.py` script.", + "\n", + "Saved plots illustrate the example output; they are not current performance benchmarks.\n" ] }, { @@ -30,17 +32,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "e085a736", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[11, 43, 98, 176, 281, 417, 588, 807, 1093, 1500]\n" - ] - }, { "data": { "image/png": "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4uPjMTQ0xMPDg8ePHwN5+btu3Lihtg0bNozatWvTvHnzsro08ZrReGr+GzduqH3evn07n376KR9++CEAoaGhJCQkcOjQIbZv307//v25efMmWlpapKSksGzZMo4cOfKSlyOEEOJVOnjwID169FC9GVqrVi3+7//+T5XdXFEUFixYwOTJk+nRowcAP/74I1WqVGHTpk307duXihUrYmNjoxozOzubzZs3M3r06AJ358XbS+Op+W1sbNS2zZs3895772Fvbw/kpebv3r07Tk5O+Pn58ddff3H79m0AfH19mT179nPLSwshhHh9tG3blj179nDu3DkAjh8/TmxsLF27dgXyXsxITU1VS2thampKq1atOHToUKFjbtmyhTt37jB06NDSvwDxxtB44rhn3bx5k19++UVt8ayLiwurV6/m0aNHREdHU7VqVSwtLYmIiEBfX7/IidDfZWVlkZWVpfostYSEEOLVmzRpEunp6dSvXx9tbW1ycnIIDg5mwIABAKSmpgJ56xafVaVKFdW+v1uxYgUeHh5Ur169dIMXb5RSnbCEh4djbGys9ujIx8eHEydO0LBhQywtLVm/fj337t1j6tSpxMTEMHnyZNauXUudOnVYuXIl1apVK3TsWbNmMX369NIMXwghxAusX7+eiIgIIiMjcXJyIjExkYCAAGxtbRk8eHCJx7t27RrR0dGsX7++FKIVbzKN1xJ61sqVKxkwYAD6+vqqNl1dXRYvXkxKSgqHDx+mffv2jB8/njFjxnDs2DE2bdrE8ePHad269XMLIUotISGEKHsTJkxg0qRJ9O3bl8aNGzNw4EDGjh3LrFmzAFRrU27evKl23M2bN9XWreQLCwvDwsKC7t27l37w4o1SahOW3377jbNnzzJs2LDn9tu3bx+nTp3C39+fmJgYPD09MTQ0xNvbm5iYmCKP09PTw8TERG0TQgjxaj18+PC52c1r166NjY0Ne/bsUe1PT08nPj6eNm3aqB2nKAphYWEMGjQIXV3d0g9evFFK7ZHQihUraNasGS4uLkX2efz4MX5+fkRERKiefea/u5+dnS1p+YUQ4jXn5eVFcHAwdnZ2ODk5cezYMebPn4+Pjw+Ql+oiICCAmTNnUrduXWrXrs2UKVOwtbWlZ8+eamPt3buXlJSUF/6gK95OGk/ND3mz5w0bNjBv3rznjjVjxgw8PT1p0qQJ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", @@ -106,51 +101,7 @@ "execution_count": null, "id": "91800bda", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'input': '/home/asger/Repositories/mini_trainer/examples/mnist/train', 'output': '/home/asger/Repositories/mini_trainer/examples/mnist', 'epochs': 5, 'size': 27, 'name': 'mnist_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.builders.BaseBuilder', 'model_builder_kwargs': {'model_type': 'efficientnet_b0', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True}, 'dataloader_builder_kwargs': {'batch_size': 256, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}}\n", - "Building class spec...\n", - "Building dataloaders...\n", - "Building datasets with image size (27, 27)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "Dataloaders built successfully. Train batches: 17, Val batches: 2 \n", - "Building model...\n", - "Calling train() function...\n", - "Start training\n", - "train_one_epoch starting for epoch 0.\n", - "acc1= 30.9 | acc5= 92.8 | loss= 1.78 | item/s=927.9 | mem=908.1 \n", - "train_one_epoch starting for epoch 1. \n", - "acc1= 87.5 | acc5= 98.4 | loss= 0.94 | item/s=1899.7 | mem=908.1 \n", - "train_one_epoch starting for epoch 2. \n", - "acc1= 79.0 | acc5=100.0 | loss= 0.90 | item/s=1260.7 | mem=908.1 \n", - "train_one_epoch starting for epoch 3. \n", - "acc1= 94.9 | acc5= 99.8 | loss=0.652 | item/s=1293.6 | mem=908.1 \n", - "train_one_epoch starting for epoch 4. \n", - "acc1= 98.2 | acc5=100.0 | loss=0.599 | item/s=1933.3 | mem=908.1 \n", - "Total time 0:00:50 | Best model found at epoch 5 \n", - "\n", - "\ttrain : 48s\n", - "\teval : 01s\n", - "Final weights saved at: /home/asger/Repositories/mini_trainer/examples/mnist/mnist_model/weights/last.pt\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/modeling/classifier.py:445: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|███████████████████| 314/314 [00:07<00:00, 44.49batch/s]\n", - "METRIC TABLE \n", - " accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - " 96.19% | 96.24% | 96.19% | 96.19% | 96.19% | 96.24% | 96.19% | 96.19% | 91.32%\n", - " \n", - " coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "----------|---------------------|------------------------------|-----------------------------------\n", - " 100.00% | 100.00% | 77.67% | 77.67% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Takes around 45-60seconds on 2026 NVIDIA DGX Spark\n", "!rm -rf mnist/mnist_model\n", @@ -190,222 +141,7 @@ "execution_count": null, "id": "7e1d8596", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[Launcher] Resolving network topology...\n", - "[Launcher] Establishing ephemeral NFS mount over QSFP...\n", - "[Launcher] Verifying environment synchronization...\n", - "[Launcher] Testing PyTorch import on worker node...\n", - " PyTorch 2.12.0+cu130 loaded on worker.\n", - "[Launcher] Spawning worker on spkc (192.168.100.11)...\n", - "[Launcher] Spawning master locally (192.168.100.10)...\n", - "spark-967b:350437:350437 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:350437:350437 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:350437:350437 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-967b:350437:350437 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-967b:350437:350437 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-967b:350437:350437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-967b:350437:350437 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.10<0>\n", - "spark-967b:350437:350437 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-967b:350437:350437 [0] NCCL INFO Using network IB\n", - "spark-967b:350437:350437 [0] NCCL INFO [Rank 0] ncclCommInitRankConfig comm 0xc8580412b520 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init START\n", - "spark-c948:500437:500437 [0] NCCL INFO ENV/Plugin: Could not find: libnccl-env.so\n", - "spark-c948:500437:500437 [0] NCCL INFO cudaDriverVersion 13000\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:500437:500437 [0] NCCL INFO Bootstrap: Using enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL version 2.29.7+cuda13.2\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL git version stable b81d6a5a3\n", - "spark-c948:500437:500437 [0] NCCL INFO Comm config Blocking set to 1\n", - "spark-c948:500437:500437 [0] NCCL INFO NET/Plugin: Could not find: libnccl-net.so\n", - "spark-c948:500437:500437 [0] NCCL INFO NCCL_SOCKET_IFNAME set by environment to enp1s0f1np1\n", - "spark-c948:500437:500437 [0] NCCL INFO NET/IB : Using [0]rocep1s0f1:1/RoCE [1]roceP2p1s0f1:1/RoCE [RO]; OOB enp1s0f1np1:192.168.100.11<0>\n", - "spark-c948:500437:500437 [0] NCCL INFO Initialized NET plugin IB\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned NET plugin IB to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO GIN/Plugin: Could not find: libnccl-gin.so\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned GIN plugin GIN_IB_GDAKI to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO Assigned RMA plugin GIN_IB_PROXY to comm\n", - "spark-c948:500437:500437 [0] NCCL INFO Using network IB\n", - "spark-c948:500437:500437 [0] NCCL INFO [Rank 1] ncclCommInitRankConfig comm 0xbdf6d0892bd0 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init START\n", - "spark-c948:500437:500437 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:350437:350437 [0] NCCL INFO RAS client listening socket at 127.0.0.1<28028>\n", - "spark-967b:350437:350437 [0] NCCL INFO Bootstrap timings total 3.164832 (create 0.000031, send 0.000088, recv 3.163856, ring 0.000139, delay 0.000000)\n", - "spark-c948:500437:500437 [0] NCCL INFO Bootstrap timings total 0.001581 (create 0.000026, send 0.000306, recv 0.000602, ring 0.000281, delay 0.000000)\n", - "spark-967b:350437:350437 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-c948:500437:500437 [0] NCCL INFO ncclTopoGetCpuAffinity: Affinity for GPU 0 is empty, ignoring. (GPU affinity = ; CPU affinity = 0-19).\n", - "spark-967b:350437:350437 [0] NCCL INFO comm 0xc8580412b520 rank 0 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/16 : 0 1\n", - "spark-967b:350437:350437 [0] NCCL INFO Trees [0] 1/-1/-1->0->-1 [1] 1/-1/-1->0->-1 [2] 1/-1/-1->0->-1 [3] 1/-1/-1->0->-1 [4] 1/-1/-1->0->-1 [5] 1/-1/-1->0->-1 [6] 1/-1/-1->0->-1 [7] 1/-1/-1->0->-1 [8] -1/-1/-1->0->1 [9] -1/-1/-1->0->1 [10] -1/-1/-1->0->1 [11] -1/-1/-1->0->1 [12] -1/-1/-1->0->1 [13] -1/-1/-1->0->1 [14] -1/-1/-1->0->1 [15] -1/-1/-1->0->1\n", - "spark-967b:350437:350437 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:500437:500437 [0] NCCL INFO comm 0xbdf6d0892bd0 rank 1 nRanks 2 nNodes 2 localRanks 1 localRank 0 MNNVL 0\n", - "spark-967b:350437:350437 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-967b:350437:350437 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-c948:500437:500437 [0] NCCL INFO Trees [0] -1/-1/-1->1->0 [1] -1/-1/-1->1->0 [2] -1/-1/-1->1->0 [3] -1/-1/-1->1->0 [4] -1/-1/-1->1->0 [5] -1/-1/-1->1->0 [6] -1/-1/-1->1->0 [7] -1/-1/-1->1->0 [8] 0/-1/-1->1->-1 [9] 0/-1/-1->1->-1 [10] 0/-1/-1->1->-1 [11] 0/-1/-1->1->-1 [12] 0/-1/-1->1->-1 [13] 0/-1/-1->1->-1 [14] 0/-1/-1->1->-1 [15] 0/-1/-1->1->-1\n", - "spark-c948:500437:500437 [0] NCCL INFO P2P Chunksize set to 262144\n", - "spark-c948:500437:500437 [0] NCCL INFO PROFILER/Plugin: Could not find: libnccl-profiler.so\n", - "spark-c948:500437:500437 [0] NCCL INFO Check P2P Type isAllDirectP2p 1 directMode 0 isAllCudaP2p 1\n", - "spark-c948:500437:500484 [0] NCCL INFO [Proxy Service] Device 0 CPU core 9\n", - "spark-967b:350437:350535 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 9\n", - "spark-967b:350437:350534 [0] NCCL INFO [Proxy Service] Device 0 CPU core 0\n", - "spark-c948:500437:500485 [0] NCCL INFO [Proxy Service UDS] Device 0 CPU core 10\n", - "spark-967b:350437:350437 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-967b:350437:350437 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-967b:350437:350437 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-967b:350437:350437 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-967b:350437:350437 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-967b:350437:350437 [0] NCCL INFO CC Off, workFifoBytes 1048576\n", - "spark-967b:350437:350437 [0] NCCL INFO ncclCommInitRankConfig comm 0xc8580412b520 rank 0 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init COMPLETE\n", - "spark-967b:350437:350437 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 0 nranks 2 total 3.33 (kernels 0.14, alloc 0.01, bootstrap 3.16, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-c948:500437:500437 [0] NCCL INFO TUNER/Plugin: Could not find: libnccl-tuner.so\n", - "spark-c948:500437:500437 [0] NCCL INFO threadThresholds 8/8/64 | 16/8/64 | 512 | 512\n", - "spark-c948:500437:500437 [0] NCCL INFO 16 coll channels, 16 collnet channels, 0 nvls channels, 16 p2p channels, 2 p2p channels per peer\n", - "spark-c948:500437:500437 [0] NCCL INFO Symmetric VA size=120GB\n", - "spark-c948:500437:500437 [0] NCCL INFO Symmetric memory is not supported. cuMemEnable 1, globalGinSupport 0, globalNicFused 0 cuMemGdrSupport 0\n", - "spark-c948:500437:500437 [0] NCCL INFO ncclCommInitRankConfig comm 0xbdf6d0892bd0 rank 1 nranks 2 cudaDev 0 nvmlDev 0 busId f01000 commId 0x68b73df3f5b019a7 - Init COMPLETE\n", - "spark-c948:500437:500437 [0] NCCL INFO Init timings - ncclCommInitRankConfig: rank 1 nranks 2 total 0.20 (kernels 0.17, alloc 0.02, bootstrap 0.00, allgathers 0.00, topo 0.00, graphs 0.00, connections 0.01, rest 0.00)\n", - "spark-967b:350437:350536 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 4\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500486 [0] NCCL INFO [Proxy Progress] Device 0 CPU core 2\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [receive] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [receive] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 00/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [send] via NET/IB/0\n", - "spark-967b:350437:350437 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 01/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 02/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 03/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 04/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 05/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 06/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 07/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 08/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 09/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 10/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 11/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 12/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 13/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 14/0 : 0[0] -> 1[0] [receive] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 15/0 : 0[0] -> 1[0] [receive] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 00/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 01/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 02/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 03/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 04/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 05/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 06/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 07/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 08/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 09/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 10/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 11/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 12/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 13/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 14/0 : 1[0] -> 0[0] [send] via NET/IB/0\n", - "spark-c948:500437:500437 [0] NCCL INFO Channel 15/0 : 1[0] -> 0[0] [send] via NET/IB/1\n", - "spark-967b:350437:350437 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "spark-c948:500437:500437 [0] NCCL INFO Connected all rings, use ring PXN 0 GDR 0\n", - "{'input': '/home/asger/Repositories/mini_trainer/examples/mnist/train', 'output': '/home/asger/Repositories/mini_trainer/examples/mnist', 'epochs': 5, 'size': 27, 'name': 'mnist_model', 'device': 'cuda:0', 'dtype': 'float16', 'ema': False, 'builder': 'mini_trainer.builders.BaseBuilder', 'model_builder_kwargs': {'model_type': 'efficientnet_b0', 'fine_tune': False, 'hidden': True, 'droprate': 0.1, 'normalized': True}, 'dataloader_builder_kwargs': {'batch_size': 256, 'train_proportion': 0.9, 'resample': False, 'cache': 'CUDA'}, 'optimizer_builder_kwargs': {'optimizer_cls': 'mini_trainer.training.muon.MuonAuxAdamW', 'lr': 0.01, 'weight_decay': 0.01}, 'ema_builder_kwargs': {'epoch_halflife': 1.5, 'update_rate': 4, 'temperature': 1.0, 'distill_start': 2.0}, 'criterion_builder_kwargs': {'weighted': True, 'label_smoothing': 0.1}, 'regularizer_builder_kwargs': {'strength': 0.1}, 'lr_schedule_builder_kwargs': {'warmup_epochs': 1.0}, 'logger_builder_kwargs': {'verbose': True, 'logger_cls': ['mini_trainer.logging.core.MetricLogger']}, 'ddp_info': {'rank': 0, 'world_size': 2, 'local_rank': 0}}\n", - "[Rank 0] Building class spec...\n", - "[Rank 0] Building dataloaders...\n", - "[Rank 0] Building datasets with image size (27, 27)\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "/home/asger/Repositories/mini_trainer/mini_trainer/data/io.py:370: UserWarning: CUDA caching is currently in development and may not work properly. Using device: `cuda:0` for cache.\n", - " warnings.warn(\n", - "[Rank 0] Dataloaders built successfully. Train batches: 8, Val batches: 1 \n", - "[Rank 0] Building model...\n", - "[Rank 0] Calling train() function... \n", - "[Rank 0] Start training\n", - "[Rank 0] Model DDP wrap starting...\n", - "[Rank 0] DDP wrap completed.\n", - "[Rank 0] train_one_epoch starting for epoch 0.\n", - "[Rank 0] acc1= 24.0 | acc5= 74.0 | loss= 2.31 | item/s=184.0 | mem=849.0 \n", - " 0%| | 0/8 [00:00 True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n", - "Running inference: 100%|███████████████████| 314/314 [00:06<00:00, 50.43batch/s]\n", - "METRIC TABLE \n", - " accuracy | precision | recall | f1 | micro_accuracy | micro_precision | micro_recall | micro_f1 | theilU\n", - "----------|-----------|--------|--------|----------------|-----------------|--------------|----------|-------\n", - " 90.32% | 90.53% | 90.32% | 90.37% | 90.32% | 90.53% | 90.32% | 90.37% | 83.55%\n", - " \n", - " coverage | vocabulary_coverage | optimal_confidence_threshold | macro_optimal_confidence_threshold\n", - "----------|---------------------|------------------------------|-----------------------------------\n", - " 100.00% | 100.00% | 71.87% | 71.87% \n", - " \n" - ] - } - ], + "outputs": [], "source": [ "# Takes around 20-30seconds on 2026 NVIDIA DGX Spark\n", "# OBS: Replace `-w spkc` with the SSH host alias used for MPI/NCCL with the second DGX Spark/Node\n", @@ -439,19 +175,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "3b995e04", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/Repositories/mini_trainer/mini_trainer/classifier.py:486: UserWarning: Model configuration option hidden overriden by value stored in config: 1280 ==> True\n", - " warnings.warn(f\"Model configuration option {k} overriden by value stored in config: {kwargs[k]} ==> {v}\", UserWarning)\n" - ] - } - ], + "outputs": [], "source": [ "import torch\n", "\n", @@ -480,21 +207,6 @@ "id": "709f81d7", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/asger/Repositories/mini_trainer/mini_trainer/classifier.py:545: UserWarning: topk=3, all values except topk=1 are experimental and will result in unexpected behaviour.\n", - " warnings.warn(f\"{topk=}, all values except topk=1 are experimental and will result in unexpected behaviour.\", UserWarning)\n" - ] - }, { "data": { "image/png": "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99572T6HhoZUMpm87Ge//Mu/rD72sY8pz/PUli1bVLFYVEEQqPvvv1+dPXt2RdtGo6E2bNig8vn8tZ76qnnwwQfV6OioGhwcVE888cRV216rrJRa3TVQSqn/+T//p3rPe96zQm5rSVaruf5KKfUzP/Mz6q//+q+XXv/iL/6iev/737/0/cnJyaXPrvUafPOb31R79+697Gdvfetb1YMPPqjK5bJav369UkqparWq7rnnHpXL5Va0nZ6eVps3b1ae513ljH84lv/m5z73ObVnz54rtl0+rubn51U8Hl+Sz3e+8x3V3t7+rPpdzs6dO9Xf//3fK6XW1rg6z9DQkHrRi16k7rrrLvX5z3/+iu2Wj6uFhQWVyWTU008/rZRS6tvf/rbauXPnUtt77733qn2dp1QqqY6ODnXs2DGllFLve9/71K/8yq8opdaerK5lnjrPauara+3385//vLrjjjtUs9lUSin1oQ99SL397W9XSq09WV1tzrmY1cjqWvu9kear5XzkIx9RP/qjP3rFz1dzD/7hH/6hevOb36wajYZS6sqyOnnypDp06JBSSinP89Q73vEO9Vu/9VtKqdaz5oMf/KBSqvVcPXz4sFJKqXe+853q4YcfvqSv/fv3q5MnT67mlK+ZIAhUOp1eOtahoSHlOI4qFouXbb8aWf3ET/zE0jl///vfV729vUv32XK+9rWvqe3bty/95oc+9CH1sz/7s0qptSWrZzrfi1mNrP7hH/5Bua6rlFLqi1/8ohocHLxsn1NTU+o73/nO0utf+ZVfUf/xP/7Hpe/9xE/8hFKqJfsvfvGLSiml/st/+S/qU5/61CV9vfGNb1T/8i//ci2nftNxy1mkZmZmePTRR5d2yd761rcyOjp6WevByMgIR44c4Z577gHg6aefZs+ePXR3dwPw2te+lq985SvMz88TCoV47WtfixACgLvuuovh4eFVH59lWVSrVVzXJQgCpJT82Z/9Gffffz/r169f0da2be6///7ndTfuJS95CX19fc/YbjWyWs01ADhy5Ahf+MIX+M//+T+veH8tyWo1179er/OpT32Kt771rQBUKhX+8i//kg9/+MNL3+/q6lpqf63X4Gqcl1W9XscwDAB++7d/m1/4hV9YYeUD6OjoYOPGjXzta1/7oX7zaiz/zUKhsHTeF3PxuAqCAKUUpVIJgHw+v0I219rvch555BFmZmaWrAJraVxB65zf85738NGPfhTHca7Y7uJxdebMGbLZLDt37gTgnnvuYWRkhMcff3xVv/+Vr3yF2267jW3btgHwsz/7s/zt3/4tsPZkda2sZr5aDUIIGo0G9XodpRTFYnFpfK4lWT3TnLOc1chqNf1ejbU2Xy3nL//yL/nJn/zJy3622nvwIx/5CP/9v/93bNsGriyrzZs3s2fPHgAMw+DgwYNLz5fzsgqCgEajgW3b/PM//zPpdJq77rrrkr7e8Y538H/+z/959gJ4BoQQSxagYrFINpu97Ly1Wll9+tOf5qd/+qcBOHjwID09PTz44IOX9Hvo0CHuvvtu4vE40BqfH//4x4G1JavVzM+rldUb3vAGTNMEWmuR8fHxJYvScjo7O7n77ruXXt95552XjCuAarWKbds89dRTHD9+nHe84x2X9PXjP/7j/Pmf//mzFceNzfXW5F5oHn30UbVly5YV7x08ePCymvRf//Vfq7e+9a1Lr0+ePKmy2aw6ceKEUkqpP/qjP1KAeuyxxy757jvf+U718z//85c9hqGhIWWaprr99tvVbbfdpj74wQ8u7aZNTEyo+++/X+3bt0/92Z/9mRofH1f33XffFXfbPvaxj604xueLZ9qRXY2sVnMNms2metGLXqSOHj16iSVvrcpKqatf/29/+9vqwIEDS68PHTqkBgcH1Qc+8AF14MABdffdd6tvfOMbl3zvWixSsVhM3Xbbber2229Xf/zHf7z02dGjR9U999yj9u/frz7/+c+rJ554Qr3tbW+7Yl8f/OAH1S//8i9fw5k+e/79v//3qq+vT/X19amnnnrqsm0uHldKKfWJT3xCxWIxNTAwoNrb25d2P1fT73L+03/6T+qXfumXll6vtXH1kY98RP3mb/6mUurqVqSLx1U+n1eZTEZ997vfVUq1dikB9dnPfnapr61bt6pdu3apd7zjHerMmTOX7ff3fu/31Hvf+96l15VKRUkpleu6a05Wg4ODavfu3WrXrl3q3e9+t5qZmblsu9XO7dfar+/76hd+4RdUJBJRnZ2dav/+/apUKiml1ta4utY5R6nVyWo1/d5o85VSSn33u99VnZ2dS7v9F7Oae7BQKCjTNNXv/u7vqjvuuEPdcccd6u/+7u+e8RjK5bLaunWr+tznPrf0+q1vfavas2eP+s3f/E1VLpfV3Xff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zc2xb9++hX9btmxB13XS6fSKxy+X1f33378gjzvuuINnn3124djVjO2PfexjDAwMsGnTJn75l395QQZPPfUU+/btY8eOHUvuw8MPP8x73vOeJef4nd/5HT75yU++ZFmshn/8x39ECMHnP//5ix6zmn715JNP8prXvIa9e/eyb98+Hn744RXPWSqVuOWWW9i7dy979+7lda97HcPDw8Da6lcAfX19bN26daFvffrTn77osauZr+a53D0YGhriwIEDC/J+y1veQiaTWfhsrcxXALVajV/7tV9jYGCA3bt38wu/8AsXPfZqyArg3LlzvOENb2Dr1q3s2LGDj370o8DaktWPOl99/etf58Ybb2TPnj0cPHiQQ4cOLRx79913s3HjxoVz/8//+T8v2o4Pf/jD7Nq1ix07dvAzP/MzZLNZYO2NwUvNOctZjaw++MEPsnXrVqSUl+xT3/jGN5bcr87OTvbv3w+sPVld6nqXs1hWl+uTSin+4A/+gC1btrB7927uueeeFc+5nuarNY16FXLPPfeof/zHf1RKKfWZz3xG3XjjjRc99vWvf7363ve+p5RS6tixY6qtrU2Nj48rpZT6xCc+oR544IGFYx955BE1MjKient71bPPPnvRc/7d3/2duueee1StVlOe56l3vetd6kMf+pBSSqnf/u3fVh//+MeV4zhqy5YtKp/PK8/z1P3336/OnDmz5Dy1Wk319/erbDb7UsRwRVzpNSm1Olld6T34t3/7N3XzzTerer2ulFLqj/7oj9Rb3vIWpdTaklWlUlFf+cpXlOd5SimlPvrRj6q77rrrose/973vVf/0T/+klFLK8zwVj8fVoUOHlFJKDQ0NKcuyVD6fV0oplclkFr73zDPPqHg8rlzXveCczz77rOrp6VGFQkEp1ZD5TTfdtNCeP/zDP1RKNWR/+PBhpZRSv/ALv6Aee+yxC861f/9+dfLkydWI4CXz4Q9/WP3kT/7kRT9fLCullsrjX//1X9WePXsWXl9pvzpz5ozq6OhQExMTyvM89YY3vEH95V/+pVJKqQcffFA98sgjqlgsqo0bNyqllCqXy+qOO+5Y8ttKKTU1NaUGBgaU4zirueRVMzQ0pG699VZ18OBB9W//9m8XPe5K+5Xneaqrq0s99NBDSimlTpw4oTZs2KDK5fIF53Rdd6EvKqXUn//5n6s3vvGNSqm116+uZJ6aZzXzlVJXdg+q1eoSGf76r/+6+vVf/3Wl1Nqar5RS6jd/8zfVr/3ary3MWRMTExc99mrIyvM8tX//fvUv//IvC+9NTk4qpdaerBazmvkqnU6rRCKhXnjhBaWUUt/73vfUzp07F4696667Ljme5/nmN7+ptm/fvjAO/+iP/kj9yq/8ilJqbY3Byz3LlrMaWT3++OPq9OnTVyyzeX7iJ35C/emf/qlSam3J6nLXu5zlz8HFLO+Tf/EXf6F+5md+RtVqNaXUxcf2epqv1jKvOovU9PQ0Tz311MLu24MPPsjIyMiK1oNz585x5MgR7rjjDgBeeOEF9uzZQ0dHBwAPPPAAX/va15ibmwPgzjvvpLu7+7JtOHToED/2Yz+GaZoIIXj961/PJz7xCQAMw6BcLmPbNp7nIaXkb//2b7n//vvZuHHjkvOYpsn9999/VXfEr/SaViOr1dwDIQS1Wo1qtYpSinw+v9CetSQrn8/HAw88gBACgIMHDy7s2i+nWq3y6U9/mgcffHDJdc7vMObzeZLJJJZlARCLxRaOy+VyF22DEALbtimVSgBks9kLZOV5HrVaDdM0+frXv048HufgwYMXnOutb30r//t//+8rvv4fhY997GO8853vXPGzlWS1XB7zMl9Nv/rsZz/LG9/4Rtrb2xFC8J/+03/iU5/6FPCirKrVKpqmAfAHf/AH/MZv/MaS3wZobW1l06ZNfPOb33zJ1385PM/jXe96Fx/96EcX+sRKrKZfzc3NMTMzw4/92I8BsGXLFmKxGF/72tcuOK+UknA4DLAwBudlvpb71aVY7dx+pffAsiz8fj8ArutSKpUukNVamK9KpRIf+9jH+MAHPrDQvvb29hWPvVqy+va3v41lWbzlLW9ZeK+trQ1YW7Jazmrmq9OnT5NMJtm5cycAd9xxB+fOneOZZ55Z1W8eOnSI22+/fWEcPvDAAxesGdbKGLzUs2wxq5XVzTffTH9//6raMj4+zre//W1+8Rd/EVhbslpN31hpbl/M8j754Q9/mD/+4z/GNE3g4mN7vcxXa55rrcm90jz11FNqy5YtS9676aab1Le//e0Ljv2nf/on9eCDDy68PnnypEomk+rEiRNKKaU+8pGPKEA9/fTTS753uV3Rf/iHf1C33HKLyuVyql6vq5/92Z9V4XBYKaXU+Pi4uv/++9W+ffvU3/7t36qxsTF17733XnTH++Mf//iSNl4tLndNq5HVau6B67rqN37jN1QgEFBtbW1q//79CxaXtSorpRo7XPM7O8v53ve+pw4cOLDkvYceekglk0nV09OjwuHwgqVgnve9732qv79fxeNx9fDDD1/0dz/0oQ8pv9+vurq6VH9/vxodHVVKKVUsFtWDDz6o9uzZo97//verYrGobr/99ovuFD7yyCMXtPFq8Oijj6q2tjZl2/aKn68kK6WU+sVf/EXV3d2turu71fPPP6+UWt3Y/rVf+zX1wQ9+cOH1kSNH1IYNG5RSSh09elTdcccdav/+/erf/u3f1LPPPqve/OY3X/Qa/vAP/1D99m//9uUv9iXy4Q9/WL3//e9XSl16B3u1/aq3t1d9+tOfVkop9cQTTyjTNNWf/dmfXbQd9913n2ptbVU7d+5cs/2qt7dX7d69W+3atUu94x3vUNPT0yset9q5/UrvgVKN3dm9e/eqWCym7rzzzoVd2rU0Xx06dEj19vaq973vferAgQPq9ttvV9/61rdWPPZqyeojH/mIeuMb36h+9md/Vu3bt0/99E//tDp9+rRSam3JajGrna+y2axKJBLq0UcfVUop9YUvfEEB6nOf+5xSqiGfrVu3ql27dqm3vvWtC9e/nIcfflht3LhxwYL+W7/1WwpQc3Nza24MXu5ZNs9qZTXPaixSH/jAB9Sb3vSmhddrSVZXer1KXfw5qNSFfTKXyyld19WHPvQhdfPNN6ubb75Z/fM///NF27Ee5qu1TlORUhdfbH3wgx9cMJ/P85nPfEbdcsst6sCBA+r973+/isViC2bseS6ndHiep37/939f7du3T916663q937v91Q8Hl/x2De/+c3q2WefVQ899JB605vepN72trep4eHhhc+/8Y1vqFtuueVyl/0jc7lrWo2sVnMPHn/8cXXfffepTCajXNdVv/u7v6t+/ud/fsU2rBVZfeADH1AHDx5UpVJpxc8/+clPLnGFsW1b3XXXXeqRRx5RSjUWte3t7WpmZuaC7z700EPqxhtvXDDZL+bMmTPq4MGDamxsTCnVcGN4zWtes2IbfvM3f1N96UtfUs8884x685vfrN785jer5557buHzEydOqLa2tiu/6JfIO97xDvW7v/u7F/18uayW83/+z/9Rr3/965VSL58itRjHcdS9996rxsbG1Cc/+Un1pje9Sb397W9X6XR64Zj/9b/+l/rZn/3Zi1/kj8Dhw4fVwYMHF1xbL7WIWG2/eu6559SP//iPq3379qmf//mfV/fee6/6yEc+csn2uK6r/vt//+/qve9974qfX+t+dfbsWaWUUvV6Xf2X//JfFvrGclYzX63mHiymVqupd7/73epP/uRPVvz8Ws5XTz/9tALUxz/+caVUw2U4mUwuuNYt5mrJ6s/+7M9UKBRacG36m7/5m4suFtfK3P5S5quHH35Y3XnnnWr//v3qV3/1V9WOHTvUF77wBaWUUufOnVNKNdYEH/3oR9X27dsveu6/+qu/UgcOHFA333yz+h//438oQOVyuQuOu5ZjcDXPstXKap4rHX+e56lNmzapr3zlKxc95lrPV1dyvUpd+jm4vE/Ozc0pYMGFcWhoSHV0dCy5rpVYy/PVWudVp0hNTU2pcDi8oL17nqfa2trUqVOnLjj2L/7iL9Q73vGOi55rYmJCWZZ1wYJ5NX76Sin1qU99St1+++0XvP/Zz35Wve9971NKKbVt2zaVz+fVww8/rH7pl35p4ZgvfOEL6u67777i33qpXO6aViOr1dyDX/3VX1Uf+MAHFl6/8MILqrOz84Lj1oqsPvzhD6sDBw5cEEuzmM9//vPq3nvvXXj95JNPqoGBgSXH3Hjjjeqb3/zmit/funWreuqpp1b87V/+5V9eeF0sFhVwgdL1+OOPq5/7uZ9TSil1++23q6GhIXXmzBl15513Lhxz6NAh1dfXd/ELfRkoFAoqFAqpY8eOXfSY5bJaCZ/Pp2ZnZ1fVrz70oQ+p97znPQuvv/KVr6yodP7pn/6p+pu/+RtVKpXU9u3blW3b6h/+4R8WdtyVauysv/3tb7/s9b4U/vqv/1q1t7er3t5e1dvbqyzLUi0tLeqv//qvLzj2R+1X27Ztu6hVYjETExMqFApd8P5a6VfzjI+Pr9hOpVY3X63mHiznscceU7t27brg/Ws9X83MzCgp5ZLd5RtvvHFF68HVktVnPvMZdccddyy8LhaLSgixoITNc61lNc/LMV9Vq1UVi8VWnJOUUsqyLDU7O3vZtjz22GOqu7v7gvev9RhczZzzUmV1pYrUd77zHdXV1XVRC8q1ltVyLtU3Liari/XJUCi0xLr55je/Wf393//9ZduwVuertc6rLkaqtbWV/fv383//7/8F4HOf+xzd3d1s3rz5gmP37NnDiRMnlrw3MTEBNPxJ3/e+9/Grv/qrBAKBVbWhWq0uZEaZnZ3lj//4j/kv/+W/LDkmm83ykY98hN///d8HoFwuI6VESkmxWFw47tixY+zdu3dVv381WI2sVnMP+vv7efjhhxeyGn75y19m165dS45ZK7L68z//cz71qU/x0EMPXRBLs5jlstqwYQMTExMcO3YMgMHBQU6fPs3WrVuxbXtJjM8TTzzB9PT0ir7i/f39PProowvX/OUvf5ktW7Ys+EkD2LbN+973Pv78z/8cYMEn+lr0q09/+tPs3buXbdu2XfSY5bLKZrOMj48vvP785z9PMpkkkUisql89+OCDfPGLX2RychKlFH/7t3/Lf/gP/2HJMUNDQzz00EO85z3vwbZtHMd5xWX13ve+l4mJCYaHhxkeHubgwYP83d/9He9973svOHY1/QpeHJ8Af//3f08wGOTee++94LyTk5ML8xU07tuePXuWHLMW+lWpVFqIzQD41Kc+xQ033LDisauZr1ZzD86ePUu5XAYasUKf+cxnLpDVWpivUqkU9913H9/4xjeARl8fGhpi+/btFxx7tWT1+te/ntHRUcbGxoBGtrft27djGMbCMWtBVvO8lPkKlo6zP/qjP+Lee+9l8+bNOI7D1NTUwmef+9znaGtrI5lMrnju+fOUy2Xe//73X7BmWAtj8HJzzmJWI6uXwsc+9jHe/va3L8S5LmYtyAqu/HpXkhVcvE++7W1v4+tf/zoA6XSaJ5544oJ5CNbPfLXmudaa3LXg+PHj6uDBg2pgYEAdOHBgIcZiOfV6XfX29qq5ubmF9173utep7du3q/7+fvWf//N/VtVqdeGzd7/73aqrq0tpmqZaW1vVpk2bFj575zvfuWCynZycVNu2bVM7duxQ27ZtU3/zN39zwW+/+93vXuKS9Hd/93dq27Ztas+ePerJJ59ceP/uu+9W3//+91+6MC7Dpa5pMauV1aXuwWJZVatV9a53vUtt27ZN7d69W732ta+9wI98LchqZGREAaq/v1/t3btX7d27V918880XPX7//v0LLi1KNUz3u3btUnv27FG7du1S/+///T+llFKlUknddtttaufOnWrv3r3qtttuW3Ktv/d7v7fQfzzPU//1v/5XtXXrVrVnzx516623XmC5+sAHPqD+4R/+YeH1l770JbVjxw61Y8eOJS4Qb3/729UnPvGJH00ol+HWW29d0paLsVhWw8PD6qabblqQ1X333bfEUnql/UqpRj/p7+9X/f396h3veMcFO+FveMMbluz0/f7v/77avn27uummmxayFnmepwYGBpa4OFxNLrcbe6X9Siml/uAP/kANDAyozZs3qze84Q0LbkZKNdysfu/3fk8p1di53bdv30Ls0U/91E9dkLVpLfSr06dPL2nnG9/4RjU0NLTisaudrxaz/B4sHoNf/OIX1e7du9Xu3bvVzp071S/+4i9eYGFYC/OVUg153X333Qv947Of/eyKx10tWSnVcAfau3ev2rNnj7rjjjsueBavFVkp9dLmK6WUete73qW2bt2qNm3apH7hF35hwVuhWCyqAwcOLMj/3nvvXeJ+tVxWu3btUjt27FCbN29Wf/iHf7iQbXGetTAGlbr0nLOcK5WVUo1MhV1dXco0TZVMJlVXV9dCDORyWWWzWRUIBC4ac7ZWZHWp613OclkpdfE+OTs7q97whjeonTt3qp07d6q/+qu/Wvhsvc5Xa5lXpSK1Gj70oQ8tpCZfaxw5cmRFl8BrRVNWV86//Mu/XBB3sFaYmZlRu3fvXjEO61qwlmX1ta997aIxe9eCtSyrtdavmvPVldOU1ZXTHINXTlNWV85altVaG4OvNEIppa61Vezl4LXyLZc/6CXgKY9xhugWm67K+X8U5tQkFgFCInKtmwI0ZbVaRtQg3WxaSDe6VsipORSKmEhd66YssFZlNalGiJPCEv5r3ZQF1qqs1lq/as5XV46nPCYCUwTf8ib0n5viszv+iQ49BMDnihE+cPz1yC8kaP3cUdzsxUs0XA3WmqygOQZXQ1NWV85aldVLHYMPeZ+5Si16ZdGvdQPWOlJIull7D1qApFi5NsC1oimr1bFBvDTf76tNVKzso38tWauyahcbrnUTLmCtymqt9avmfHXlSCHpCe1hVoImFMaihVxMK+E3baoaIF75sOu1JitojsHV0JTVlbNWZbUWx+Aryasu2USTJk2aNGnSZJVIgZIghULjRUUqLKuYmsurL3VVkyZNmjQVqSbXG2vM5N2kSZMm1wWOg3DBUwK52CIl61iag9Kac2+TJk1efTQVqSZrkx9FIWoqU02aNGny8mI7CA9cJfCWhVZLcV2EWjdp0qTJqmnGSF0thAAhEfL8X03CfD0DpcDzUK4HykO57ovvN2kwLwshEJr2ogylXKooKYWynYYMPff6lOGlZDDfl5RqBKBKufCdK+K8vBryU42/ylvy2VXj/Bi54G256H158etYHnCrlHrlr+HVzHn5X9A3PQ/lOChPNe5D8x5cF4hwCNeCgOYueX/cCZOr+ZB28z43adLk1UdTkbpKCNNESyVRkSB2Mkil3aKSkHiGwCgp/LMu1lwNfSYPs+lXPNPRukBqaIkYtCSwk0GqLRbVuMQJCJQAaSvMoiI0Vsc6NYUzOnatW3xVkKEQor0FpzVCNWVSjWk4flBSYBYVvrSLVvdwTUk9LHF8As8ApbHU3UYBApQA4YFwFVod9IrCyrr4psvos3lULo9XqqDs+lW9LqFpyGgE4fM1FuWuC1Ki/BYq5McNmnimxNPEBW5DShO4lkRpjWuRdYVedjHyNfTZPN7MHF6pdFXb/6pGCKRlIcJhiIawO2KUOyxsv8CXdQkO5ZFj03j54oubHGsNIda3kvcKtV/6fMhYFLunhUqLoN9fXHDtG7KLPFK8mam5KKmSaozhJk2aNHkV0VSkrhIyEsHubaHc4SPXr1HcVmd7/wht/gIvzHYwOpggfCZI7LRJQAhEpYqq1a51s9cUQtOgJUFhW4LcRo3CgEPXxin2xKaxNIfxcpQT060Ung3TXUnC9apIpRIUt6VIb9Up9brE++boieQIGTUOT3cwOxxFL2rYYYXWUiUZK5L0VYhZFfyajUThnQ8OlyikUNQ8jXzdz2wlyHQmjDoXIHoqQuy0hTlqIJnDzV5dRUqGw9CWwo4HUFIgHA+koBY3Kbdo1BICxw+eqfB0QNBQBgHPUrhBDywXbIksa5gZncCkSfS0hV+phlXkYmNqvS+irzVCIkJBVFuSSk+Y2d0G5Z1VYrESo+ditDweJ+l4SE/hFUuotahIXQ+8Av1YRCM4Pa3kNgeodLpsDs5goFH0qjxS6eehiW2IMR9Wzn3Ru6JJkx+Fq92vm/P/S6MptxVpKlKrZZnL3mLXPKEbCENHRsI4fW1ktgYodQqqW6u8aedzvK/1+7RqQb7bIvnz8P0cDmzANQ2USBE0dJjJoAoFvFqt2VkBoUncsI9yq6TY57J7xzn+24avcNDXcJHMeRX+KbWNP8+9lvozFuY1bu+qWObWJqRouEKd/78wTYTfB4kYpYEkczt0yjuq3LjpLO/p+C43WkWi0s8XWwL87/idTBQidIVz3J06wUH/aXr1Cq1aAO0S6YhzXoUhW/L98hb+NbWPs74OPMMiZiTwOy6iWEI5zst72YaJ9Psai7OOOOXuAJW4BAnCASWhlhBU2jy8VB0rWCdg1TF1F016uF7jeqJWlZ5QhoRZouRYnCvHGUonyIyGcU2LuNaGP+iHuSyqXMErFpeOqeb4+pERoSC1tiD5Xp3Sthq/tPdxbg0O8n+Sr+GZ/FZ82RhBQE6Am7m6SvlLYpH78PI5/ZJfm3dZnD/Hpdxol40/sZKr6vwxi39XSJACIQQLpR7P/27DdVW9Yn1YBANUOv0UNwis9jKbfNMYQmPIsXksv4mxsQThSYGZs5vjqsnLw+J+tHh8LrwnF9y+F7t4Lx8rwMJzdYmb8au5ny6f75bPM/DiXLNcdq9muV2CpiK1SoRporWkcLqT1BIWwlVYc1Vkrozym9RTQUqdBsVuSanPIdha4rXdZ/jZxOO0akEA7vA5nG59DoniaKSNsfYAwYEU4XNxwqcLaGMzePk8ynbWpkvMK4jSJJ4uUKaixSrSb1SBhhyj0s8Gcw7pc1Ha+urKWjSCCIcbbmx+E2XqcN59zdUldtSgktQptwoqHR5GT4HbukZ4ffIwt1oVArJRAPYO3yzptmc4G0vRa81yi2+YLYYPTYQu24ao9LPPAkscQ3Z5fM3YxdFoJ3bIoq2exMxkX16XU6khe7sob02R36BTaRXUEx5eyAZNgSNBKIxQnc54ge5QlpRVJKJX8cmllrW4XmKDMUdSK1LyLCbDUY5HOnku1s3JZCulbj/+qRSBqQS+rItvuoo2nW24/JXLL981vUoRUuCFApTaDUpd0NmR4dbgILf6smRTz3JiZytTdoJEIEHM9SCTudZNvihaNILq7sBuCeBpAukoZM1FOh54HszrN1pjN1Yr12EmjVcoNiyeQqKFgmAaSxQxoeug62DoKENHmQbK0ECXKE2gpEAZEu/8a1n30KoOeAo7ZlFJ6dRDAuGBUXrR/VY7N407M/OKyUf5LcotGpUulx0tswxYk0gEk26QY5l2rDGD4ISHnqtc/xap5o78K44Wi0Eqjgr68Hw6rk/HCWrUIhqOT+Ba513YFWi2wigqrJyLUXDQKjay6iDLVVQuj5vOvOrvn5aIQ2sSOxmkljKpRjVcHw351cCoKIySi1F00HM1ZKaAl87iFQrXuulrlvW1+ryWnA/4l+EQ9b4Wpg8EKPZ5yLogdNYkNBHEDgryGyXVzVV6OtK8PnWWbf4JDvjOstN8UdSakNwdGKS9K8tIS5KhrS08NdfD0JFOWoJR4kIgx0UjVqV6nT+YLoNwPaSjELYgU/cz7ui0ns/ZUfbqTNpRvJr24mJnHSAME1qS1Lpi1BIGtYjEDgq88yY114JqysPoLXJD5yi7wuP0WrN06Rk26HksEVg4V0ha3OE/wz5rhIB0aNPkJa1Qy3GVR7sGbwgd4zX+Qb7bspW/tu4iPxOg5XQYXkZFSmga1f4k43foJPbMcENikg5fjqhexhAutmrc2LCsktCLJLUiPmHjEw4aSx9+lnAJSw+fEECFsplhn2+U+yJHGOlIcmx7J8+kN3B6pBU5YxIeDpM4buKr1ZuK1MuBkLgRi3KbpN5ZZ1N0lpgsExAmt/lHeMfmx/i0dYAZrY3AVATt5NpdgIpEnMyeGNnNEten0MsCowTSbsRhChcQ4OmNeDxf2iNyUkeOgVuvN5So1iQq6Guc8LyVyjN13ICO49dxAhI7IBoLP1OgdPAMcHzg+hVKo/G7+cZvlDsV5tY8O1onKdoWQ7NJ7HNBoicitNouLFekruIC3/MbVJOCYGeBm+Jn6deLaCLEpBNlYi5KeBxC4zVkpojrrc17/LLQzAZ7bWhPUdocp9yiUQ8L7Ejj+Wh1lmiLFugJpwnpdWxPY6oaZnAmRW00hG/KwMz5sfIevrRL4KzV8LJY7u79KlKOhWGiOlrJ7YyR3ygp9dt09kyxOZyh6uqMF6NMZUN4sxb+ST+BCR/RYR+W4zYVqUvQVKSuEGlZyHgMtytFZquf/C6b3VtGKNkmZyLt1KM6dlhhbM3xH/oP85rwSbYZsySkJK41Fr62cvHw0NHYZITo08togSowxhOxJ/nv+hs5VezDKIUIuy7CcaBavbYXfo0RCoQLwhaUbItpNwTYAEy5ddJOCGyJ8NaJJiU1tO4OSpuTFHp0KilBPaZwww6YHkIqNNNlU9ssb+t6gjeHzhGSvoWvuyqAh8JTLyrYffq8YmXgoRb62YvfUWiLFgFyWdWDiPQRF5IeHfZZwzzT18OzqV0on/nyPmSkoJLSMbfk+W8DX+Uu/xwhYV1G8ZNwCadN9/zuf0pIehrvgH8aItM8EXuS/xu9jSeme5nRUlg5A9+Q/+W5llc7UuCEDGpJRao1z5bgNGFZR2LRo4d4c/gIssfjz6ZfSz2ms5al7rRGyPVL5N4ciWCFbMlPPu+DmoZwBMJpjB1lKPDAN60BEYIBEz0exYv4qbYFsENaIwmOq1BS4FiNGD8nIHACYIcVrl/hWS7oCmG5WH6baKBR0DZb9pNP+8ETdPXM8TubvslPB4sUvSpf7Wrjn1pu45jsJTQeITAYWLohcBUXgm7QoBZX7E7OcGPwDN16w9qddkI4OZPgtIcxWUAVS9e3Repy7mYscyNb/p0mK7NcQV0kM31jL4WtcTJbdCptHm7UJhCvcGPbJG9qeYZbfCNsNF70vqgpmy90pPjn1pt5YbyDcsaHkdPwTRt4RpRwpQPnzPBFf++6RGpI00D4/dDZSm5HjMx2ibOlzBu2HOG9qUfYbjbWEM/Vany/vIVvz27jcKIT1/JjVEzMsbU8g197morUFSKTCSrbO8hss8htd9m9ZYSfbH2emmfwDd3mTEuSZLDC6zqP8dboU/TqOmBSUw4TTpGCEpQ9HUN4dGo28WXxKzdbBj/ecpTBgRTpShjpRgjnSjCXvnYXfY1Ry3xy5926FrPSe2sOqaFFQoh4DLs9Rnqjn+yApNpbJ5wokfJXifkqBPQ6EkXMrLAvdI6fDA4RksElp9KERLvET81/NupUGLQjjDlxqp6BJjzCskq7nqVfL5PS/Bhi5TN1+PI8bQK6dt5V6eVbHLmmIBEss8+aJiov7354OebH0LxCtXhMbTUcBvzTnAsmmArGcSwddYl06k2uHCEEjl9ixzwG4jNs942TkO6C/Dv0EJvMaSy/jacb17i1F0cGAlQSFtV2l3u6zrIlOMV0PcxYNUbZMak5OjVXRwiFpTm4SjLRFWEyGcZMBzGKQVwL6tGGkgQgPIGSoAwXTA9puZg+h6i/Rsiq4ddtfJpNQLdJmCWSRgmftJmuhznbksDxNG5NnOEu3zQQICR9/HhgkkLbs4z1R8mMJPBPbUI7M9bIiuhcvdgkGQhQiRk4cYfd0XF2GLNAY9zm3ABaSWJmbcjmG4rdZeLLrhf0rk7qG1uptJm4ZsP9UqspzLyDOVtGzubw8gW8UvlV755/SYRA+v0Ivw8RCDSytYZ9OGGTatKg1C4p9njIrhLt8QLtwTzdgSw3hYa4NzBKq7b0GWIJg7v945RbD9HiKzJRiTJTDjI9F6Ee9eP42olEg2iTc3i5/KvCO0HvaKO6tYNSh0GhV1Le4BDrzHJzx1nenHhyQYkC2GdZpLQjGMKh5JgMFjuoTmgo39qdw9cCTUXqCvFSUWb2Wdg3F7iv9wz3xY6y2xpHoui3phhrS9CuZ7nJmqbj/I7dkXqFYSfBcL2FotuwKsT1Egd8wxxYYQ273z/E/f2tfENtJ1sJERwKwdlX8irXIEqBalimVkKy9neThKFDWwuF7Qkym3WKmx36N49zX+sJtvom8MlGIL6BiyY8fMKmUyuT0l66onG0HueLmf0cy7VRdXQM6ZHwldgfG8EXfp5W7eIKRc3TG9nxFgfVv0wID+quRsG7lDp45djKJeNVyXpQVRph4SzsUOa8hrugFF7DsNXUoV5WXEsiIjV2hCfYZMwQkBqu8tCEpKZsqiqE5wnW5BCdd9VuTVFJ6ejJMrdFBznoH6KqNGbcMHWlYSsd93zHMYWLqyQzHWFO97UyWw9RsC18mkPMqODXlibUsKSDT9pY0iYg6wRljYCsYQoXQzgYuPikjU/YmHiUlEE2GsBVkh49Q0C+uHiJSj93BE5zqGsDX9oSYbYQIh7oxTwzgzsx+bInhZlHJuLUIhpmtMR23zg9+ouLrqpnIOsCvVhHlSuo+hpMKHI1EIJ6Xwtjd/qp76gQDFZxXEml4EOfMImeMomd8mGONSzpTZcoLurZIEwTGY/hJSPUkwHKbSbFroby5O8usDGZpj80S79/hnY9R1irEJNlWrQKIbHy4j4kDG7xDdNnzFJXGlVl8ELXBr6a2slEpJVqIkLslA//ce36UKQu4TUidB27t4XxOyzc7UUeGDjKNv8EMa1Mp5Fht1EGAku+062HGLAm6QlmGIokcQKBRmxnk4vSVKSukFpbkOJmh3due5IHI8/QqQt8QscSBtvNKq4aBUATIYpelaO2xjcLN3C00MFoMUbV0dGkR9JfZjoRwRDPscd80WWr7NXZoNf5ydhzOP0aX5/eS6UzhO+49apNiy6EQMlGRjcl1ofStBJC07BbQmQ265T3Vri1f5ifb3uMe3x5ArLxsHWVh7fk+vwL79WUTcFzKChBVWnY6rwVZplmEBY2pvAYcSJ8PnOAh4cGqM8EwAXl95iKhQnoNjcHTgMv9ilbuQvWKVd5TFfDaHUagfYvM3pVMZUN8XBpG5JjdOpiiXuffQnrl0SgCYmrPDJehXFXY9yJMul0MF6PU/ZM2ow8N/nP0G9UyXo6hnAJGTWk38H1GWBch1PesgLVrwhS4hpg+W16zFnaNJuA8OOhcJTNqFNjuJ7CrhhIZ+2NW+n3I+Mx7K4E5TZBeyLPbt8IO82GC4utysiLaN4eGezI0BL3WYlc4j675LcWudLOn3PpWJfn/ylgvvaZfr4dL47NLUaQuyIneLpvA9O5NqTtI5mLwPQMvNzZNXUdYVmoaIh6RBAPl+k3p9EWLV5rno60BbLmoCqVy2cwvI6opUyqW6q8Z8+/c2PgDFVlcKjcyzcntzNitaM0H+FgC75IAH02h8oX8CrVq2o9XNOscM1aLAqtKeodESotJuUWSbkD7I0V7hoY5G2pH7LbzBCVJpoQ6Of9LRpjp7F2Wul5YQiNzYbGFsNBEx5gc5f/OTrNDP9H3sY5vQ1ZN/FNhGD0al70K8RKCqquI3Qd2dlOZnMAfV+W39n2MO+MTi4c05CdtSTkxENxzqkwYveTqfvxbNmIEX11GJpfMtfhquJlRgj0rk4yHQahthx3ho4vMYXOownJabvIQ6WtfDezlROzrWRnQsiijl4UyLoACTMhj5NdrRzt6eA18UEGzElatSKWcIlJ2GFmyEaP8cPeXjJbkrTPbUE/N91wE6jWXlVuAsptpNxUgkZ6bKHOT4zrC6Hr1JImpY0ur916nLclH+dWXw1LvBj7s9xlb9YtcdQOcrzWyXA1xWg1xmw1RL7mo+boOK7EVQKlBEIoBKBrLlJAqWpSHQsROicJ5RV2SDSSAvh0qq6OtyxGarGL30m7ylQljFYFYTsv70PfdfFP1zGPBfgr/U4e6Rhgd2ScbjONT9pk3QA5J0DRtcg6ASquge2dtygBmlDowsNRklzdR7oaJFP2UypbuAUDPIGZqPLa/nbemnycpKyw1RrHjQhG2uJMJrtww77LNHLtIywLGQo2XGEiQZyoD8/U0KoO2myhkfK9UsGr21dvvvA8ECClOm9VkRhCw1Yu406NH1Z7+ff0ZuScgV6yr04bfgRkJIzd00J2wE+p2+NgbJpOrQY0FIWLub1Cw332Up9fCS/127f4xrmrbZB/3RikmA8TOevDEOJl32ISuo4Mh7AjPuwQtPkqtMgX5QPgIhEe4KoXY6NeJUqCpwtMv81W3wQ3WkU0BP16mqhe5rNiP8PhVvL9OmYuhpGP4ct6WBkXM1dH1hzwQHgeolyDbKGRpfdVsGGqxaKQSuC0RSm0WZRaJdUWQS3u4cVswokSN7eN8VPJZ7nLX8ZaIfvsSxk7Uelnv+8cJ1vamSsFqIzHcIPrqmDKFaHFov9/9v4zxrLszvLFfnsff6534U1GpM+sqizLIllkk02yu8m2Mz09r1/PG2kgvPcGeIIE6YsASV8FCRAgCA94kAGewRjNm5mettND091Fsmma5V16nxEZ3lzvj9lbH25EZkQ6lsmsisjKBSTK5I17z7lxztl7/f/rvxYilyUupOjnXVpjFuVTmt+ZusyvJa6yLcuFwTNsPW7zbj/Pxf4om2GKWujfihJprSTxF0xSSzGy2eHzs/P86HhCpB4AmUgMpA0Hh2iPCSYzdUaMNtv229uItWIu6vCvai/zrz94mdR7LsnFmExLIeMIGShkf3AZhhmb+gGfNw8e452pSQ4ObfJ0dpmT3iLPuotMm5pnnWW+MnadvzqZRkYpclkH7+omemH5cxdsqaVAG6BNjW3Ed7m37QtIQT9tkJ2s8M9LP+EFx2bnhmQnYq1Yjzu81R/iryrP8ebKFI31JFbZxK4J7IbG7IAbamTErSqwFtySruVDjVsOsNdbaFPSOpQhTBoEkq05rLvJaKwVK3GHN3qzLFUypFsa+g9XqqOVxpnbZMQs0VhOcnb6MO9OTZPNtzCkptV16LdtaJmYTYnZFoNqGIN8KbbPUYMRgNEFq6MZbmrccggaqkcS/HV8nEP+Gr+WuMDTdpVJs05n2OG/Hx2mX3DxEglUu/2AI93bkMkEDBfpjaRoTdi0xgVRQuNUXbJXXZIXDUS5imi20IF6JJtbrTVCgVKCUN9eRhSK+SjNq9UTvDc/SWJZYjX2nuRLp5M0ZzxqRyE1XedkconER3C7/KwwYSZ5JXWZq2Ml3l47RJAxseQjOG7LAt8jTFtEPmSdLql7ZmCxJZt9uLOUex0y0oR9k9UwQ9NZZdjwmLUUqeQFDsxs8MHwNKtBmlrosdZJc7OSI1hK4K4lsNoDAyUj0HhlReKmj5xTxEHw+BPRoSL1U0Vqhw06UxHpkRonChtM+xUKVpu82WLWXuewVcXk7oL1J0FWRjzjL3CxMMyZbAblmez9O/4+uIecT1g2jA3TOpilMWnSntTEkz2em17g25kzDBvOXW/zeq/E/7z+Rd5fGqdf9rArBnZV4JY1uUqMu9nBXG/A5ud3Vv/D4AmRegCEbaPTCYKsSZTUpO0e7o5hnVgr+jqirgIuhkV+vHqE1Hsu4/9plfjK9Xu+p+u6uEcO4FazNMpJLk56LIxlWRjKYRQ1Y8ZNpk2bb2XOcfVwiQtqAi1tSp0sVr1B/Dkyn5D5LN2cQ5AWkIwoOG1cEfLx67mfEYQktqGQ6DBrRoDNZtzmbDCYw9jussVa0tMWy+EkP60e4c25A5jXXPKLkFyO8da6GBt1dK0+kInsrGBuS2q25TVaEwNGIY8xnkJZEs/vM+w0ScseOweGQh1zNezzRm+W/7h+imAlgVuP0b2HXCFVMfHSKm6lhnctR+pIieqmQ3vYRguwWoJMA5yawtuMsGt9RD+GrcwdpEALgdAa2YsQ7R6i0xt0a7fmEArhc9SPuqwEWaykYtRMMgpUkhf4t8Mv0BnKkBguwXL8aDs2jxAimaA3mqI+a9M4CMbBJqVUm+XVHDJ0cDeTWL0+oh88srkVYQwc6rQWxHr3BnspynGxOoRcdnE3NUY7IN5jG0SV9miNS5hp8cWxOY45K1g7iNSDJKafNnZ2v26ELdoqgy1jtDlwB3wUcjphmmjXJvYkytEkjAD3fl04IbYCxfncWEkbXYWuOPyifpCS2eR5Z5kJ02PCTDJh9vi2d+HWa6uqy0+6o/yHsRf5YHmcesOBSCD6EnfdIPSSZMxxzFQS3WiigxDd6z+WMsCokKR2yEA/3+A701f59exZnndWGTU8JIKIeEsK693lTvtxsH3v9HWIKwQHrE0OJjd5PzlLbN3pX7uPcC+p5HCJ1myWynGT1mzE9Ow63xq5yFcSlzlkNQj1YBQFBqMkbwc2f7L5Im9cmsW/ajO0qEmshjirLWS5garWUJ0nnagPgydE6gHQ/T6y3sIp+1gNk2rfv2tIPiSmo2EjSlPrujg1jV5avc87gur1MOaWSRsGZj+BXTdoVzK8PukhheawvcoXHIuXnHVWR95HacHlYAKn5pGvDWEA6l5ZCI8LpIGRTCAKOfoHClSP2LRnQ45MrvF86iYlo0usB46HlgDf6IOp9rY2P46xOpqbmzn+/ehhXBnyN+WTnN0YIQxNDEMhhEZrgVKCoG+hyjaJRYPUTUVipY+12oTNCtH9iPTOB+vWvxvFAtHhCeqzFv3JPs8PrfBs4iZjZvdWYG+sFZfDgO+1nubPFp5l7UqR7AWBt9p7JJtwHQbEYYDodPCFAIp4m+aASHUUVjPCrgcY5Sa63oAwGiTYG1v33dZGTQchcau167yNYoFuwUIlY4atBqUdFfRJs8N0rsr1ySyJI6VBrXN5dV/mtKlMgsaUTf0QuEfq/OrkFSbdCt8znmJ1bpwwZWE6NsJ4dNsE4bnEtsCyIhIywBG3l5Kesuj0bWQfzL5+JLN2nxRxwqJX0Dw9tsKvZC4za1WwxN1Sn+25vAch1DF11SPUmpQ0d8UV3PW5WlFWXZYjk7LyCbWJRN1XstzTFqthlhv9EnOdAiudNJW2T62cxL9p4lR78Cgsx+VgPlXLgQOhKWP28bbzocOp9Eldt/lZ6gi1gz7N4Xf5ln/bGn7nNVM0EvyDRA1X/oJx9wRLvSy9yKId2SyPp1kfTdKYSeJUkjh1hdXVOJUQe70F62VUrf7IzEQ+bUQJk+6I4puTN/hH+bd40Wntcm817rjGQh0T6pi+jmhqRSW2qCmPQN/ehxlCYYkYmxhXROSNkIw0SIrdHRgLQUoGZMwu2tCDEN/HADKVQoyUaB0tsvm0Se9El1NTy3y7dJav+VcYMwVgUFMR58OQ8/1x3m7O8PbGJOs3CqSvGqTnYvylDuZ6HbVRJrqfYuNzUij5qHhCpB4A1emgOh2sXo/UxGEWylnmpnOctG9nOymtaWuTSpQkDE0cBjMMPMANJm61MW6ukGxl8VaTJJddGhsOr5kzvJg5zAnrIqNmkn+QvEJivM//O/galc0RvEoKP46RShM/pkRKWCaMDtE6nKd22KRxMuBLx6/xj0rv8LyzzLBho9AYgCsEvgzA0Og9TKR0HOOvh1QvJfh/xL9G3DHxr9mk5xVGXw+skrcf6nogGzE7Crvew6x2EM0OutVCtbsf+jONw7M0ny5ROWrQPd7jG0cu8/vFt3nJKd+yjN2WpP6sc5Q/vfkctbeGGP8gJnm9jljZRD3Ca0xHEXqzgq8Unu8OHtBBiNiqxqpOd9AR23YN3N6YSAFKo8PbJE8mEojpcVpHsmycMpmeXuZ5b+5WfhsMrpXj6VXOzY5TadvIoIBTb+y/nDYhiDIerSlB8liF70yd57cy75MQITeyJW6mRwkTEte2EKb5yCRXIpkg8gS+HZKS3VumKduQQoMYmMTsRUSeSVSI+Er+Gl905xk2zLuIwochUTDY7M1HFm1tc8BskfwlPzIX2fy4dYKL7RG6sYUtI6wtIiWFRmkx+P6AauBxcWOY7lyKxKLEbmqsAEZ7Gn+9hzNXJn4Um2ylEVuOqftRTf1IoTXGcpmhd03spsu52gGCZw1SEz2Uu0xR2nfdD4aQfM2tMW68dotA97TF+lia9cNpFno5rjeLLFay9OoOzrJD9rJN7qw56Czfz/lvn21sY89A5Pt8PXtxi0Q9OJ8o1DEdHVJRMBfmONub5Gp3iEY4KFZIoXBkjCMjEmafUbvGMWeFp+wyyTsaqDGaUBv0lPVAJ+A9i3v8rqXvow9NUTueonpUYjxV5/dnzvPtzGlO2Q2KRoJYK25GHa5HGX7cPMF350/SupgjNQcTKzHuWhtzswmNFqrVRnUfsCbuo2vt08QTIvUhEG+WcSsz9Ns25ShJR912WwvRbMQJbvbzBD1zECDr3q1F3QUVE5criHoDueyQWsxiN4bpllzePThFJXWWpIQhI8HvJZZ4f+gGfzJSpFMysSs+Vu2XvP8+hjBNwpEU1SMmzRMBLx+/zn858lO+6cVsD0r2dUhdBVQUVKMEBBKh9u4NrqMIe6NN9pJFt+LjVjS5c3U4e/VWZ1GYu2/F7WDHeKf9+IMeYlsBkdJzEeMj1E8V2XxWYh6r89vTl/nD/Bt80QFDDOb7tuV8P+se4XsbT7Nxqcj4exHJv79BvLHxcL+A+yBuNuFB1sAf8qEt8zlas1nKx02Cw12+XLrOUavBrsFaBMe8FQ5Nr3G1P4rZthnaHIJKdd8tDlHCpF+I+eLwEr+ePssXHVCYHPdX+H72KXpZCz/jYlUfzXNCmCbad1EOJOxgSyp6e9cS74POhbIEVrLPKW+eg1t2+aGOd91v29Kibae9e5Gqvg55O7D5eesordjhmLfM1/05pszdQ/LbXavrkc3fNJ/mb1aOs7yZHbhiGQphbGVQMeAt2/wz6ph48zbjpyNSZ1bRlergL4REBwFxED66boUekCmhQWm5y6Xw8454bR2r2aJUHkFGBS4lxvhT5wUWsnlGzDp5o8WkWWfE4FZBJyldnrYVigAYFIIkjVvX1Y2wxVv9cU53pnh1+SgVu4TRT5EJRjFWTFSzeffvep89u2JHkEj1eNpZukWiwh33mELvcmft64i1WHIlLPF2e4Y3yge4uZkj7JmgBcJQSENj2REJN2A01aCft5g0a0yYu+9XBfS0SagNhBoU5PYV7vG7liNDVI+mKD8tcI7V+IPZ9/mn2Te3nmmDtX4w+zzJe51p/ubmMbof5Bh7MyZ5bg21WUH3+sTh3ptj3U94QqQ+BIx0miBtYDp90kbvFokyhKStNNeCYS43htA1G6ut0NGHqwDrKEJHEardxvYc3PIIS+0sG7HN1NZvJildRu06WBplbnUuHsVw8V5BHNPL27RmY144Osfvl97hebvJzqwDR1jMRwF/1znMj9aPYm+amB+hW/OpI46R1RbpORevbGFXesgrC7u6ip94M6Q15vgIwYES9YMetWPgHq/xjckr/GbmA56zI4wd0qULYcj3m6f4i8VnWLtSJH9OkLja+NRI1PYxPxSYBmFSEmQ02UybKadM0dhd6XSEyUlniV8tZYiUZD4cQagcufQp7PlN4vWN/SOX1Rp2zCZtOz4edlYpDjVoTRRxmi6ZahKxtv7wosC2ur7CttG2ibLAMSJ8uXtuUWlBpCQyEshY780NiwZpDEKq7zR+MYSErU1cS4eUY8F8lON8b5zr3RLt2MaWEYbQNEKXG408a5U0KpQk0j3+JF9h1KvjyIhIG/Rjk1BLerHFeifF4kYOseDiVQQiYqsjvfXhdzApvwuppZjkxQrR9blP7/t5ggdCRxFxo4Fc0GSyHv1MgteDI7xZmCbh90m5fYb8JmNegzGnxqyzzmF7jWkzJCe9e5LyGStJ3ljlaXuFYavBv+El1mWJXr5AcjmLu9EbuHJW64Mg5n24+dVS4JgxeXl7vbszEmD7uzGEZENpftY5zI8qxzi7Okp/MYm7JnG3BD/agNiB2IVKSlEZSpA0+3wpceWuz5aAJeKByfe+a0ftgBDIZBIxXKT5VInKCYF7vMZ3pi/wB5l3bhWGgFtO0n+68jw31gpYl30K52ISlzaJbnzeQ0ofHp4QqQdAui4ikyaeHqY5aTCcbzBpVoDbG9KmNrnUGeHGZgFn08BuhvBxHnC1JlZzmGrHYynK8oJzWxrYUTbEAhmBiPWj0cR/FthpkLAFFYT0spLhg+v8N2M/5mWnTVLe7d5zPczzF6vPcvnSGIU5MGu9PVsv1XGMqtWxlMKyLej2iB92EOBWSOTKKz6dEz2OTa3yteIVvpS4wim7i79DQnE5bPOzzjH+ZP45mu8UGTsTk7paRyytPdxj+pSgDUlsicFQvB2SNTp32VMbQnDI6uGnP2DMrvI972neyU3RHvMpnR4j9UZEtHL/2ca9BKOvsBqCa/Ui5zLjnLAvMmQkmDRrvDR8k78+lKDR8fCX/Q8lTftIEBJhmijLQBngGiHWHXdeqE3C0ECGA5nqZz4jdS9JTKSJo0FY507s/L46OmQ5Mnm/P8kPyk/x5pUZnOsOVmuwgdPGIGDabEO+pZGxJvIc5lJZrjncIkViSx4nYjD6UKjrgZlKPUTEamsO6T4ZVJHCqHZg7VMscDzBh4budrFurDESFMle9+hnXIKkRyMpKCdHOJPQRNmI1HCLl0dv8vXsRU7ay+SNkJSQSCEItSLUGldIcoZPxoYx8yKTh8v8We553jk4SW0hRWIhSWrBJ3U9gby2RFzdf0QKrYmVoL/jdtzuQknEHflqsBCl+cHGU3xwcYrEDYuR64rEYhuj0R/kS9omUdImTJl0igataY+L6SEqQ0mgddfHG2gsGW9Ft+1R3fEvgZFJow5OUDuSonpc4DxT4w9n3+X30u/fysGDwTr/l81T/NnCs5Q/GCI9B/lLPZz5Cmqj/NmdwGOIJ0TqARAJHz1SoD3l0x3SPJOuMGYE7CRSG3GCC40R+qs+2XWNVQ/QwUfPTdHtNnZbs9bwudAb51nnPabMJB0VEGpjt059D88DfSTcy3kml6E7JPitkWtbcr6BFjrW6tYmp6MCft56mgvXx8hcMEnf6CNrzT1LpNAa1WqhWq2tmZVHEHQ7PMTGIY/eqQ7/5MQ7fCt1jkNWg2HDwxK3JRSXw4CfdY7w3bWnqV7KM/ZeROr1eaLV/UmiAITSyEgj+4JW32Y1ylBXy7v09yYGRSNB0YBJY45Ze50fpk7yn7In2VRF3PVhxNrGvnDxk/0Yqy3YrCe50h1mwbtGQSryMuaF5BxXxkrcWJ0gTFsYD3mzIAwDLBNlGygLXCMiIXdfzx1lE/ZNkh0wO2qQR/ZZ4h7PGWUO8tdCbcA9fKkMIakrzblgjFcrJ3jz6gEybzoMv9XEWKmAaaBta+BYF4QQhIMCl2WhXXsQ/LxN4LY/X+nBd9HtDQyDul10HCOERD7g9xQr/UieGU/wyaGjrQLM6hquaeEnPEQ2g8okiNIuYdqkWzBpTuX44RGPtekUT6WXGXeqpGQXQ2gqUXIrTLzOS+4806YgIz1+3aswO/o3vJ6d5dXh47xbmiLIuECSbCUD1epnffofGUJDrCQ9fR8HyDvQVB5LzQzOmklqXpG+VIcr86gdhUjL93EKeZyJAgif8oEk61GaO4mUAgIkoTIG/7EXO+UfBsU8jcMpKk8JrOMN/vHse/xR5h1m7uhE/XnjOf584RSb54sMvzP47tTZK0T7YI3bb3hCpB4EaQwqHs5Wtdvs495hkXstGOPGZoHEgkFqMcIst1Afo2Oken2cWoxYcXl19BgTdoXfSyxhCYOM0UV4MWHCJPZNLPMx+7VJA+k6yHSKzrNTtKcjnvN3t50VmmrcZjk2+FH7GP9x7in8qzbZayHuUgPdurv6tKewvZl6iIP/0vcRqSQUsjSPZKmegC9Mz/O7mXd5zpZYO8IM+zrkbKD5fvM5/tPiU6xfLZC/MJDz7WcSBUA/wCtH+Cs21XSGHyRPkjdafNWbY8L0sISxq9OQM3x+xYCsfAdrOuZftb/AaidJ0X8W92YNylXian3PkiqhNSKGOJaD0GI9SKR3haRgtsg5Ha65Cm0IxEMOaxWWiXBdYtdEOZqU1dtyX7yNzTCJrtp46wpns4t+0PDyZwBzYpzOkEEy0buntG8bG7HH3zcO88bcAdzLLrmrAfLKTaJa/faLpHH3dbI1ryi2yJHeuWG71zWl4yc8ab9DDwxw4loAtToylcJO+FipBE4ugdX2qfdczpUPcDY3jpMIcO1BwbUXWMSRxPMCZnIVphIVjvqrHLTXKRlNTjqLGAVFwgx4zTpAo5UiOZeCuXtce3scWgpMI8YXt49750zUncjKDtOZCu8MZ+hULfw1H2fJ22XmpTodVLeLZZk4Yy66awxUPDvgCAuLkKZy2QhSyJ5E7kMnRCOdJhzPUp+RcKjFt6Yv8bvp92+RqJbq8fNehu/VXuKH80cIr6TJXYL05TpibvlDXy/bGao6PSgIxL6JNgRmO8KstBHVBqrdGdj070OJ6cPGY7Yjf8jQCpRCqIGE406sxV3Od8boLycoXI9JXKtBuYr+mBVYp9wjNZ/iamqU77rPcNJe5qQtGbbq+Oke/axDkDFx3McrkdvIZQhPTNOcdqicFBw4vMykVYYdQ+sKxRv9Av9+4wu8dmMW67xP6WyEf6UMa5sPdpp5DCFME5nP0Ts6QuW4Q/1IzPTxZb5dOMNhM8QSt+WQ1Qgx7rcAAQAASURBVLjDpdDhR60T/IfrzxG8n2P0XEzqagOxsv4ZnsXDgWo0ca+XKYU5zK7D5XCS/yG0WRvP8AepD3ZV6nbiGduF9PvExyXfTZ1kbrpA/uwQxfc8ZK+/t0N7xUA5ZgiNFAqQxGh6yiKITVDbwzYP8zMHsj7tOcSeJHY0abNHaodDWaw1S90s7ppB+kYbubA+sLHfAzDSaRgu0jlYoDUlOJ6tUJB97kekbkZ5Xls+gHXeJ38xxl1s3O2ceU9ipJ+Qo885VLsDYYjodDGbbdL1FP5KgiBnE6QsgoRN7A6IdiLQiAhix+daKselxEH+aiiiNF3lW2OXeCExxzFnmclimaLd4k8qL9G74JFIJ4l3kvp9AC3BNmPyxk778tszUXfmRs1aDf7pyOsMuS1ezRxh3UwyrKdxLpi7C4BaQxBi9DUiElud5t2QQrARpVnqZDA7AqP3MYnUZ+SUaKTTMDlKY9qlcyDkWweu8fu5twfrGAPVzr9vHuBfL3yR+etDpC+ZlC6H+HMNWFodmDt9SMh8js6JERrTFu1xQX84AlNhrXtkL3lkr/hYKzV0ufrEqIInROrBEBKkvKWHt+5gU4uRx9VmCW9VkrxRR88tDlrOH0N6J6RANrokl32CtMmF0WGWhjOcpE3JaFBMtlnMpumnJEnn8SJS5DJUj7nUjmpGnlrjd0bPUDK6bLvOAHRUyJvtg/z91YN4Zz3yFyMSFzdRc4ufr4qINJCei0wlCaeKlE86NF7s8eVD1/lO4QxfdOdJb82U9XXIYtTnYljktdZhfrx6mO7FLKPvRCTfvkm0tkG8zyqa94JqtRDdLnatQbE9hlBJluJh/jR+jtSBHr+WuLRrAHcnjloG/8vsm7yYuM53h57l+97TmN0k+cYIcml1QND32HekhUALEFIhd5Cle+7bH7YxjWWCbRG5g6DWjNm9FfI4OAZFpT9wprRubhKt7R2iLjJpelM5aocsehMBB5ObZB4gqVsLs9TWUoxcU6Su1GG9/ERi9wQfDloN4iP6fWi1YX0TeU3gGga+5yKSSbQ/2ACLIIRYDeSiro1KOLSnEmycKvHXzwucqYiD6Q1e9GKGjNf52dRBWqMlEkNFZBCiev0994y6H0Ss6YUmm3FMZuvRtC3b3+5Ibbv4KTTjhs9UosXLzqtMOFX+x+jLbAQeBWsSz7JQG5uo7QgLrZGhwmhbXG6PcDP9wS73zEuhyTvtA8yV81hNgYjunMj6kPgsSFQ2A2PDtGczNA4IxqfL/E7+PV52QrYLQX/fl/zx8ossnh6hcEFQONfCuDj/0cm2NIhGc1SP2tSPR8weXuXbI+fIGF3+bOU5rsspzJ5HOoiRnS409kah7LPEEyL1AAjHJsg5dAsSlelTspvILZJUjTtcDA6wVM/g1DTGZoNou938cW+0OMboKYy+QT806SkbSYes0aHotZhPxUS+gbaMfZcf8SColE+3KGC0x8ulOU558+Tv2P9tKM2V1hBi3SG5pPCXOrBZ/fyQKCGQnofMZYmHcnQLLvWDNvVjES/NzvMHpbd52Vll1LxtEX8pjHmre4gfV4/x9uIk8fUk+XOQuFrdN8YKHwpaD1y0NsuYjkM2YYFwqPRL/Letb/AXxWc5lVvClwF9ZZI0+hxyVzlprzJsKCZMj2GjQbbwC9aPJ3mvfYjYHiJ7LY09X0atrt9erPcAhNYIBVpJQi23pH0xSWExZlWZSlT4IDlJ6JsI24KH6Wtyx1yBvMdWJFQGMhgM4u8laM+hV7DolsDPdRm167ji/rMaHWVjNA389RCxVnmsglEfBgbuZ9ySMj7BDuwKSB+QHK2AKBq4tdbqIA2EFHddU9L3SXUn6WXzbA5neS89ycuJazwr+hy3Q04Vl/i76RKpw3l8wFjdIN4nm1mrrVheS/Nv6y/y66kzlGQfS0BWmgP53db9uE2qtrtVo2aSbyTPc3pmnDe6B1G2Td4ew1vJYC5tojtddBThlHskF2x+eOko9dDlUGIDR0aUwwQX6iNcXy5i3nRJrt0OrUdryGXQSQ/lDox0kCBChdEJEe0eotVB1Ru7ZrM+FQiBkUqhJ0ZpHclQPWwQHO7yK8NXed5ZxxFJQh3zTh/+zeZXuHx1lMIlQe5SF+Payr1J1IP2jtLAnByjOpugcSjmyJFl/rOxt/nNxFUsIVgvprlUGqVbsPE2HFz7MSvqf0w8IVIPgPYcOiWTzrhmeLjOjLOOhUGoY65EFmfaE9TrPkNNjW4/hBtMSmJHEttgmvGttPuEiBhyW8hESOSZaOvxWbSk7xNmHMKUJpXsMulWKBltrDtm0ebCLMvtDFZDYjcjZCf4/GxqpIFM+MhshmC6SO2IR2dE0JkNOH5wmd8snuH5HSQKYD4K+EVnkBF15vIk6bMW+Ush3o0qPAZyvvtB1eo4N0yKrQzJRZfu+STrySTfS02jTFAWBBmFO93km9OX+VbmHM8760yYSZ6zA/6bsR/zx6+0+buxw7RPJxlxhvB6fdR6uHeqvmowI6ViQTe2tpznYnxpc8Jq83LqOj/OHyZIZhCuCzxE+U8cQxhhBBoRy/tIaAZhvHvNFEfbFkFSEKYVxUSXvPngucqespCBwGyH6Gbr8/O8uQfUPZKV5X62kN4LUPeWf6pOB2OzSmI1TXvR4nxmhNeyh3jReZOikeC55E1+PHuEzUaCInkS/WDfdAWczR7JKyn+ZeKLvD85wcu5GzzvzXHYqjNq3O5sG/cwZZo2u/znQ2+Stzv8JH+QtVSa5EKaTMbFWaxBtYGxtEnpfROz43H+/FHOOEcHMugI7AaUygq3FmG1IhCC+NA4/ZxDe8SkVxQEGU2U1GhDY7Ql7qYgsapILgY4V+SnSqSEaSJTKRgp0jqSYfMpg+hYh6/PXuW3Mu8zYSapqy4/7pb4d+tf4M0rM6TPW+QudrFvrBN/RDMSmUggh4p0D5eoHZKMHlnlj8bf5DcTNxgyBoQtZ7ZxUn2CjE2YNnCce8uiP294QqQeAJX26AxLmOhwqrjEQXsdQwiqqsfF/jTn6qNQtbHaA33uJ4bYGnzYWrNiPSATvojJW21cPyB2PbRlsLe2KB8DW+RAjJToDtlEGUU+0aFkNkmJCFc4xFoRETMfBZzvH2S9kcRqgtWMEd3+w54A2bOQroPMZwnH89QPelRPaIzJNt+Yvs43chf4ojvPuHF7JupG2OJnnUMDEnV9nPRZi9FfNOH9S4+9nll1OujFPmJ1Hc8w8KREGHJAKCwLnU7QnUyz+XSG7/WeonnQpZc/zVfdJUbNJN/0Yp4f/SF/nbnI/835NpVGjpFKCSOKUM3W3siakmJgvW1oHLmb3BWNBAetdXJ+l6aThYdtTGMYICXKHMgL73l46MHxWXtrkdWOQZAS6FzARKpG1uggHxAebIkYbYCyDAzHgX0koXrYuBdpuhe5eoKHA91q41T6eOsmtaLHmfEx5tMWOal42l3g2clF3mrPYDcsvPnEL3/DPQJzs0nukkcVn3cas6zPpOiMOMSJK0i7yqixO7JhpwFF3nD4da/C0/arHPLW+dfmF6jkMkSuQ9bJ418X6HIV69oKpc0UynfQlkQbWzNY3UF3CUBlfHolj86QSXtM0J2I8UZaHC5UOJpaI2n2udIa4v2VcTZvpIhch1ItC8srn5oSSKZSMDZEe2bQiYqPt/nO4fP8Xu5dnrMjwOZSaPLH6y/xxvmDpC5aFC4E2FdXBvNj9zvOe/1/aSBLBboHi1SO2vQO9/jO2Hl+LzFHzhhcXwqFgcKxI3oJTejJgdT7CZ4QqftBui79gkd3RHN0bI1fyVxm1uxg4rMRS850JpnbzONuSuxGHx18sg2qVhrR7uJuBHgFl0rNZzXKEFHGFVC0mqS8PjVXo02xr4mUcByMYoF4NE/zQILqEUlyvMrJ7AoHrXVKxqDNvz3j81Zvmtdrs3TXfYY2NPZ6G91ofuLvfL9AeC7hWJ7aYZ/6EfAP1XlhZJHfKby/S863Gbd5u5/np81n+MnaIZZvFEleN8lfCpHXlx57EgXckvnd3T243ZXxGxMU5Cib0uPvekepHvJRI2/yLX+RopEgZ/h8J7HMO1MX+ZPjL2F2UuQdE+vaymfvcKg1yjIIMpqxQp2TySXGjCbmVkxAS/VYjYu0+jZG+HAz54QUiGSCYChFpyQhE5AxP2WpyydAnLTpDWlmJjb4YvY6B8zyA3O2MmaHKB/SnHbIdscx1xLoemMwtP2YyKo/CfrKHJgw6Sf27A8but9H9iKMPsi+oB069LSJISSzZouv5q6yMJ6lPj+M8vdWweJB0I0miTkPSCEDkwVV4vuxQXkoQSV1lVPOEmOmwBf2LTc/GBAqR1gg4KC0+Y3kOdam0rzhHWDeLhEmLTKZIonFJFalg+j0MDo9tO8SZzzihEXsmZD3iF05UBqNCrrDCjnc5eBwmZPZFZ5PzHHSWcYXEdcTeSb9Y/zYO0w1LuJvJkmtDn0qa4CwbBgp0jiepXrEoHusx9dmrvOb2dOcshv4MkE17vBG5zhvL0ySvGSRuxTh3qgQb1Y+8vNJJnyCifxg5vpEyAuzN/mV5EVyOwq0jrBwZYhpDApMWrLnVAefFZ4QqXtBGsjhEu1hCz3R5TtDZ/mGN39rw7oaJzlXHyVY9cmta6xGgP6kC6tWqM0ydhyTNcZozDpc75bopS/jCkneaJFxepRtUMaD6qh7GNJA2hYylyU8METlhEftqMY7WOPXJi/xcuoa02aXpBx8z6GOuRIW+Gn9CO8tTuAvmCSX+ojVDeJK9XOzmRG2TWvao/IUpI5U+dbkwMnpTjnfT7qj/I9LX+HC9TG8OZvhG4rUfBf75ibxHnFO2wtQ5QqJ8xK7nqe26nGmMYN6XmCNxnzDWx2EYkqPb2dOM/9MnrfsGWLXZ6RdgM+aSAGxZxAMR/zW2Fl+J3n2lpFGS/U4G1j8ffMw1XKS0aZG9x5iB01IVCFNY8alOQvDwzXGrP2TZROkLMKJPn84/ja/mbhMXtoP7EgdsDeYnCyzfGqEMJEic83BnbeRcby3HR0fMu71lI21oq8sRAzE+rbF++fkmfzIYRhoQ6BM0KbG2JHVNmomecm7zun8BD/OlPaVQkU1W8hFTbIbYHZzyMCm3Crxgymf1Yk05fzg3GbNHkXjdqftzoLHmKH53cy7nPQWeT13iDfGpliZyuIt+qTnXFLzPYx2SH/Iozlp0S0JooRG2RAlY8xsl9FCnYOZTQ76G0zYFSatMmNGk5KhsYSkYJSZNF9nyinzP0SvUNvI466NYDGQkKt+/5Fd7zKZoDuVYfMZSeK5TX574jLfSZ/mhN0kI11aqseZ0OfH5SOIawkK50ISlzZQG+WPNTcu0ykaMx6NZ/v81lNn+e3c+xyz2uw0/Iq1ItAmUWwgIpAxT+73LTwhUndAmCYymUBlk/TygolijW/4l3ZtWMtxkpVGGmfTwK3EyE7wycNgtUb1eqiVVRzAOzXLUi9LXyuSwiJrdEjZPZQ96EjtRwjLHIQc5zO0JlxqxzQzzy7xneFzfNm/wpjZZWhHBSTUipthgXOVUcJVn/SqxlltEm9+vlK51XCexgFJ5tgmvzt1ll9NnWfSaO2S810IOvxl+Ve4eG6S3FlJ7kof9/om8fIq0V6Qo+0hqG4XNXcTMXeT0uIkQk1wJjHJn1vPY5Te5svuGkNGghedFsboj/ljp80POqfIXfLuY5T96aKfMcgN1/iH6fd3uRHOR5qftI/xi/UZrDUbpxY9VMMHYUjCrEt7TKAmu5zIrTFkfHhL3c8asStIZbq84l1jwrxdrLlXfg3ApFnjmyOX+IGSrPlFYtshZ+TxhBgM+H+OOlPyDsfasupSCXxkBCKOP7eSx0cFYRhoKUEOKv9KC0Jtsu3NedTq80xykVfTJ4g8Y088lz4MdL9P3O8jGi28foAMSlgdh2YnydvBNK3QoVpI8JXEZU7YTQrSwxDylpMfDDIlk9Lhiw686KzwijfHW+lJfjx8jDfHpilnckSeh910aY9ImkdiMhN1ZjJ1Rr0G016ZQ84ah+01xowAX96e87QwMba6LBlpMWRAVl7g3eFpfjqUo190MCspRD8YjHM8xFxIYBDwbVqDbMgJC3miyf/u8I/4zcT8FrEcdKLOhy4/qD/D6YUJctcgcWGNaO7mx/o8mUwSjxVozAi+euwK/8fhH249HxO3HBVh8L13lE2vb2F2BUZfwWcdtr5H8IRI3QnDANNEOSaxC0WvxaS5uxrSUxZBZGAEDOQzUfxQU7JVtYbV0XQim1hrDCmwRYwt48GDdX/yKIQQCMsi9m36GYEe7vGtoYt8J3mWSVPiCO+uylNH2XQCC6MrsLoa0dk77mmPEtL3kekU8XiRzVNp2ocDfmPsKr+ROsMzdowvb3chPghs/qL2Cn9/7SDpywb5iz2cq2tEi0t3v/Fj5Pb4sbHj/KP5BTJX83SGE7zmzeDIiNLQTylIRUZ6fMHpsZq+xN8UjxGmHWzT/FRNB4RpDrKbogitNOaBSVpjBodzZWZM99br1uM27/Sm+fHGEZbnimSWBHal99CPVdmSyNckEj2KTgv/ATlMew0y1LRaLu/3JxgzFsgZ/i2XMIA7bTNKMuLlxDXCUYOfGzHzxhBRwiYxNERiLYfVCDA2m1Ctoxqtx9pB1BB6V/fufJBisZXFbIPoPfzzFpaN9FxEJo3KJFG+hTYlaBCxQoQKGUTQDwaOao3mp++o9iihFKIfYrU0VlNQ63m0tQ0M1r+c4XPUWcbLd+kMJ8kPDxHvoaiBXwYdBsSr6zhSkonzGIFDs+tysTbJ3Fie0yPjfDF7g1PePLNmnTHTwdqOWdixuTeQHLQsUnKRrNGhYLX5Pieo2lnMtiAoRIwf2OTl0hxH/VUOWBtMmnUmTUlSusCHc50LtURGIAOFCEJUFD0SOav0fWQxT286T3tC8PTICt/w5ygag/W+rrq81c/wF9UX+NGNw9gXPNJzfeKVj66UkK6LHC4RTBWpHHcJDnf5Vu78rSITDMiTcevfFdUoQdBwSFQ0TjV8JPf+fsQTInUvCAlS3DJ9uFP+YYsY01CEJihTgLH1+ocEHatbegpjhwZV7ZsG/gNgGCjbIPIE6VSXU95Njtv+PV8qhcASMYbUtypzDz0XZy9CCMTYMI1nhigfN+gd6fHVI1f5tcw5nrJDfHk7gO/VbpF/sfwKH1ydJHXeJn++j3NtnXht4zM+if0Da7FM8YxFJfb4qXGIZ1MLPGdfwRc2vrTJGy0cJyRyXaTvf6pWw8K2kbksOukT5RNUDng0D8YcS63tIgEXwwQ/qx/l0o1R0hdNstdCzM0m0UOckYJBEUeLgfmA8cn78J8qnHKAfdXnv8v/KstT7/H7qQ/umy8GUDQ8nrLL+OkzjNo13k1Pc356mLWNDOV1G7tu4y8nyF3OYl24+fh2ygWY4vZ1dC1s8ePWyyxvZinUNLr18AmM9FwYHaJ5LE/1sEl3RKFcDbHA6AuMrsCug7epSS4GuJdXHysipWOF0eziryfoFh0q9QTlKMk2kQI4YNWYyldZmEqTPD6B4zqozcq+kZ3qIECXq9hKka0nSC549Io2rbE0702meH96gmcnZ/jDobcYNjZ50PYnI22OWmXc9FlyB9ucGRqnEXgMew2eSS5y2F5lxGySlREZaWyRqF+O9bjN33UO8MHaOP6ywFtooFbWBrK+RwCZy9KfLVE9YtObDDiZWiG/FXge6pgPAo//UP4Cr54+Qea0Re5ygHtjk+hjzIuLVIrOsWHWn7fpnezyrSMXecZZApz7/sxqP421aZJeiLCX6+jWg51PPy94QqTuB6VBb7XUuc9mZGtT8dAH7qRAy90ZLTFi4JKkYb+6zgrbRid9gqxFkIGpZItpswrcJlI7W8kwyCoxjRhlapQh0Ob9c18eFxj5HL3ZAuvPSYovrfJbY+f4SvISJ6w2SXlbs3wx7PMnGy9y+syBgZzvch/3yhrR0sr9pTaf927UnRACtbGJf1Zh9EdYzPr8/fRBvpG4yMmtYqUrQ1w7JPQFIpP+1KyGt+1ow5Es3VGX1phBa1JTmK1w3Fsm1DGWMLgRtjjTO84Hm2O48zbZqxH+jRq6+hBtz7cgNAgliLUg3meTmtZGi9xFl7JV4v8XfIHUkR5TmZu7COmu1wuDYcMjK3scNi/wDf8Sy6UU56cmeKsxzfV6kaW5IspyGW4MQaX2eErcxG7XvmthjkutYVTNxm4p9MMkMNLAyGdhqEBnJsPm0ybmi1X+4dRFppwKPW2y1M9xvVXk2maBjaUk/YxDKRzCanc+suXznoVW6EYTZ9UlUbCo1x0qcRLYvPWSrITJRI0rpUnaYzZmK4Ps9GCfECmAuNVGdHuwpJBKk0z4pMaGaR/OU11P8FZ7hqLT5mnnhxzZIhSK3eYm27G6w4ZN3mhzwj5NL/0BsQZLgC0EjpAYCCQ2hhCEW5K8nYYWd+JC0OFn3cP8x7VTtG5kmJiP0PNLjzRTUGeSNCcdmjMwMl7lkDvoNMVacSEM+WnrJD+bnyX7gcXIz2uI64vEH+P+k6kUamKIynEb8VKd//LQ23wjeZ4xM+J+RKquApY6WdwNgTffRG8H1j/BEyL1QNyHH9Vin07HIVEHpz6w4n6Y0j7Yv2TpQRCFHK0jeconTYIjXV4qzDPyAF7U14qOcuiHJjIQyFiD2l9V8A8L4TjIdBryGXqTGTafspHHmvyjiff57dQZDpoehhiQqJWoxfXI5y9qX+a1azOkL23J+W5sEK+uP56buUeF7dnEpWUcyyS5MM67CxP8ZepZSL/PjGlQkDGlRJulbJF4KIPRaqNa7Ucm5RKmiczlUBNDNGaSNCcMusOaYCgkN9zgV0avcsxewRI2LdXjepThQnuMciVJehO81Q5sVFB3zvBIY7AB+ZhkWgUhItoKA9binvbXljAwpNqT8mNRb5KcT6BMj4rM8i/sL9GZcnjRv05BdvFFjCsgZiDz86VBRnpYwiApYRQ4TswJ6xxHnWUupcf4vnOSi+EkRj9LLvk05kYT0emhu110tzeouj9m+VMDmXmENjRaik+sEhCWjcxn0aU8wVCCds6kl5e0RwXxiRZ/OPMB/zT7JhOmQ6hj1uKIc+khXk8f4hepWebdErHjkS0eIbHYwVivoSo1VLuzb5+FOo5RjRZSGnhDCYymQyve3UXpaU07sgcdur5CBNH+Ol+tQcfoHcesmk243CIZRoi4hLJsfpI7yLRb5jeSZ5kwI3xh4e/o0gC3HP0+Dvo6pKNCakpRUTarcZor/RE+aE7ywfoYtYUsmasSb6X5aLt9QhAnbLpFgRodzKAetNZxhElVdTnTn+L1ygzhcoKhhQiuLQzmND8Mto2+shl0IUtvPEXtoEXjqYDfm77E722tdZZw7ypmw+A7er+fZb6awytr5GaVaB8R9keNJ0TqIyLWirUwQ7zpkFqMcRfq6God/ZAlNHfCQO/rAETpugRTedZeNBn64gq/P/Ee30hcJCnv30buaU0lStDuOpi9rcUifvyIlLBsjHyO8MAwtaM+9UPA4Rbfmb3AVxKXOGLd7kKtRC3+beMZflo+zAfXJkmds8lfGMj51MbmYz2n8aiha3VSi8O0Lif4t84LqIOC/yLzNiVDcCi1ybXiFN3RBIlWAakVce0RzIaYJsbwEOFUicpJn8rTmtzsJqdyZca8OuNOlZe8GxyyBs+btTjiTG+Sc7URKDu4NYVsdAeZVzs38EIgXeeTbexVjNkJkYFDFBmE2kDp3QuuIyxsGT+UDfbDhmo0sW4aZHs5zG6SWm2I/27mWxQnarw0fJMvpK4zYg66eBLFiNnkkBnc2rRtY9RM4oo642YDf6TPd42Q9zOTNA56JJY8kisx3nIXc70+cNHax0RKC3FLmbGNQ1aDp1NLvJ49QJBKIHwPPuyG7h6QnktwfIL1511aB2PMfI9UssvRdJ1fKVzhOzucKR1hkZQwZTY5aL3BMW+ZDwpTnD44zvWVIvaVFMXTPqmzFnJ1Y0Bo43j/deK1HswRbWxgr+Ww2i6dePd1OBcluVQpkVgQpC7VETeXHw95o9ao5VUSgDaHWHcz/Ev9Mtenivxu/j2+7FTwt2abJAKFvufm/8Mi1DHzkcH7/QP8ff0w76xNUF1NY6+beOuCkTVFcqGNsbTJo76TlWcSZKCQb3EsucKw0QV8lmODN5qzXFoexluVOJX+RzISMjJpRDZNf7pA5ZhD/ZgmM1vh98av8TvZ9xgzNL607zLeUSgWoy5XwzTfq5+itZYkX4lRjf1jMvRp4AmR+oiIiKlGPlZT4q53Yb2MarWf5Gj8Egjbpp+16E/1+WdTr/EHqRtkpHdfxyyAtpK0YocoMHD7YASPZ0dKJjx0Lk1n3KUxC8axJl+amOPLqSuMGbuH+a9HPj8tH+bMzTH8KzaZGzHuUgNVrjxSycHnAToIsSs9/OUktWyKdwuTfCd1mpKhGHNqRJmYXs7AzXiYdZed2VQPCzKZQBXSdMZcmgdg7Og6fzT1FiedJVwR4oqIMTMisyXxbCqLzTBFo+cg+wKhNBhyYFCxQ8cvfR+RTCD6feLawz/u/QDV66M3y8ggJBXHmL0UVtOi2izwWiyRY5ppbyCdMtA07U0SYpmD8u6B9LR0kaLPS94clCBj93g3PUEtnSZ2TLT0SSiN0euj+/19TaaAXYR51PA56qyQTXUJ/STCvX8x7MNApFO0Jmyax0O+dOIqp9KLDFt1xswqB60qE+bd728Jg0OWiS8GuT+/lknxRvEg/9Z+gWY1RWLBR1btQdbgIy5yPmqIZgfZh1Dvlm9sRGkaTZ+hjRhxc/lTnd181FC9HmyU8ZYTJEtpKpkk73kTHE+s8JJzexbREBKl41tyv49Dpioq4nI4ztvNGd5YmaJzJUt2XpBYifHW+lgbLag1UJ9ChIgyJbGrKfptxqwaqa3Z+0rsM9cuEFcc7JrG6EWDWf4PAWGaiEyKqJSmNWHTOKSZfXqJfzT6Ls97c4wZfRwxIFHbMsmdV1pFmZzrj3OhNoJVMzDbwecmw/PD4gmR+oiItaYeelhNgbXWIC5XPp3P3TEjtS9hGIS+JJtv8BuJq2S2XOcMIe9ZTQp1TF05bPaTqLaF1QKjGw8cEh8TCMvGKOSIx4u0DiSpHDWQJxr848Pv8c3UOU5YbXJyMD8Wa8XFsM9f1L7MB9cm8a/YFM9GJK5W0Y9LJfIzhup2MTebpG+6RAmLyxNDbIyleMHpM+usY+V6dEtJvE0Xc/2TbR53Ycvy1ijkiCeHaBxMUDsksU7U+V9N/4L/MrO69UJj68/tzw6QKC0wpCb2Fd2CgX0gi+vbGM0eIozQtkWc84l8C6MfY1baUKlDvz9YjI0HLMhao9sddBRhjAzTGPMIMpqs1ydjdnFFxM5ldzNuUw/chx4G/FCgYnQ/Jt7YQNTqJDbyuGtFnEaSSpzjb3s2udQkAEJoxpN1LmQWedG/waRZIyNjEkLiSwtHWGSExzM2TBrXeda9yS9Sh/lu+ikueWNEvkWQSJFOWFipBFRqAznoPosiEHowKxxqidoyFzGE5Ji9wUiyyQ2/hHY+nPPZrve1bGTCQ+SydI4OUTkp+OpTl/g/jf7gDvOhJH0dUo079LSit7X+uQJS0mTK9JkREujzbf88jcjlr66/TJhxcF0X0enu2yVzG7rZxAgGAcjbCHVMOU4SdUzcSvRYkahtqGYTY3GDVMGjn7PZyKVZGMkTpO79G1Vo1C+xI1coejqirxVNpZmLMrzbPcVrlVnOrYyiryUoXIDspSbmwgbxxibxnUWQR+h8G9uSOKGYTFQ5YG2Qkx4Aq1GGuWoOd9XA34iRjS7xh3m+CoExMkzvYInWuE31GIw8tcb/fvpv+S2/x6BIOyjU3quoHWvNcpTh3cY019eKuJsCq/n4yZU/KZ4QqY8IhaIfmxh9EM1HoxHVYQRqt0vfLWnffrU/1wqzr2m2PN7tDzFhDjb+d5Ko7YdhXfVYjYdZamewqgZuRWHXA3QQflZn8PAgDWTCR5YK9GYKVI46NA4pErNVfmPqIt9MneNFO8Df6jp0VMCr3Sx/vPENXrs2Q+rcoBOVuFqFpbV949K057FFGpzNHu6myWbDpRwngf4gEDvZo5lJEqaMj7V5vCekgTlcIh4v0phKUD9g0JqJyR3Y5DuTF/iqf42doYh3oiT7POMv0Bmxed8KWcjmaBx0sBsZzE4GGYIyIUxC7GhkBHbDx2yVMEK9ZZbzSw4xBKEgTAhaUxrncINnS0scd5fJGyGxtjCEpK9Dft4bZqWaJtfW6P4eqVreY+MzkE1tIpUiC8gwSXs1SctNgh44hJZTQ7xTmOHfDz3PTL7Cc9kFnvPnOWGvcdA0bj23cobPCwZk5TkyRpsf+8d5tzTB+mSK5pRHctElcy2NdWV5X1lU34md7rVjhkHBaXPN4sFE/E5sFw2GS/QPDQ9kRkc0U08v8/vFd3eRqGrcYTkWXAsLXO2PcK41xrVGkXZgM5pq8Er+Gl9JXOILTnzLMOSAWybyFZFvoD0HYT4GW5wt46udkIiBa6YAbezHDcE9cI/7VNXqmM0Qs2NB36CrPtpzdzt7KiKmpyMqccxCnOTd7gHerM1wsTxEdSOFtW7hrQpSSzHJ+Q7Gwjrx5gNkuY+ITClboBMRh/x1Zs0OhhgUnDeiNM2qT2FV468Ocrh+2TycsGyMkSG6x0fYeNamdSBi9sgq/2T8Tb7m1oC7nQvlHYuBL23aymGxnSWuODh1jeiG+7448bDxGDxlPn0oBCICHT6iTb1WiDt06bc6Ump/GlHoMMKuR4hFl3819WU6Q+/wvLvImGGQFLdvaIXa6kZpVsMM5baPXRe41QjZ6sFjMANkJBMwUqIzk6Nywqb5bI+vHb3Cr2Yv8IyzNBio3eHOdzYU/IuVV3j/9OzAWOJCH3epMehEPSFRDw9CQBBitPrYLR/dMajFPlAma3QoJVpU0nmCpEA75kNZTIVlEo8VKD+TonYE7MN1fnPqKt/JfcAJa5Nh48Ebh2HD5iveAsfsVZYyGZYm86wEWZb7Gda6aZqhg2NEFN0WWatLN7ZZ66Uod32CyEQAhry/XFZpQawEWgt8O+RoqsYzqSVOeEsctdYpShuFphy3OROkebV2kv6mh1OPH2oY8CfCfX5HOo7R9QYyishtJsn6LlpKhFJoKYmyLr2SQ3skw8XJDBdnh7g2VeJXcxeJves7smgGmDI9Mol5XnAXOJcf4Y3Jg7w+c4DluSKR7zHcLMB+IlJb3SihIVLGrY4UQFK6ZKwu2mQwC/dh7oUtEiXTSaKxPBvPugSvNPmjw+/znfQHnLB6xNqlqrqcDxOc6R3lSneYq80S89Ucnfk0yTmJ1dJcGSty9Zki6zMpyL3NK1u/hlAbICG2BVjm4I+QDz849dOEYXDHKCKGkCRkH+nEhAkbx3UfS2m3MAy0KbdiZvQuG/4Pg+1iR6Rj6irmSpjjtfZhvr90go3LRVLXJWMrMf5qD6vcRtRb6E4XtT1bdy88wnk7LQWGrRg26+SN28qDeuwhGhZeWWFuttDtX65AGRQrhiifsAleaPHrM1f456Wf8JQtcMRuErVT1ncnmarFPivNFHZFDojU41DMfsh4QqQ+ImI0SouBc9UjuqBkMknsgGsM3r+pAhaCAkutDGZHIIP9NyekowizGeCtObx/cxLfDHCLISX37o1F/BjXO2QqBePDdGazVA9bNI6HfOPoZf7Xwz/iWdvEEA6xtgh1TF+HXA0F/3PlFd67PE3urCR/qYdzdX0wE/VEzvfQoaMI2QswuwrZN+hsVUBLss+h1AaXisP0cx7KfTghtEII+gWP5rTAO1blH86c5j/PvLVVmR9UI+8eAL59fzjCZMK0mTDhWXp01BwdHVJXmrJy6CgHV4SUjC4pKehpzUZssxGn6OkPdw7x1i7OEtEg9FJ2yciYvBzkbPV1yEYsudIf4WqziNUwMLoBaq8vuFuOjfR6cA+JthSC9PAQifEiXjlFpZfktXCGjbEkN4sFDjprnHSWGTaCW5K/opGgaMBJu84Lzk854S/zl96znOsdwNtMk20eQK1tDCrdcbxnJTK37oN2jNEzqYcuTRWR3LGhTxp9lKVRtjmItuj3H0yohEQmPMhn6Y55NGcU/4sj7/J/Lr4/cF3DJ9Qx58MEf1V7jjc2DrBaTRHWXOxNg/w1yF1sY7T72CeyrIz4LI1m2YjTdFQFQ4jBhjMUGIEayMDjeP/PL98nozJrdHC9gH7aJV0qoh4Ue7EfcMd1IxwHMT1OZ9ShXwA73Sdnde4Kzv4wGEjUPN7uzPJ364dZv1Ygf0aQP9/GurlBvLZ+t4TvM4DQGhULmsqjp6Ot+wJ6ysLoC6x2hOj1UXE8cGFV8a0CBVqho2jQiRofoXewNFC7HIv4nYMX+GeFv+eFLSVFrBUN1SNGY92yhpd3RUFsxm0udkdpbiTJrgrczQDRefwI+yfFEyL1MfCoZ5XESIkgIxhyW0hgPrL4u+pRlucLZFcEZrO/76iGDgKMapv0vE+Y9HjdOMCMX+ZlZ3XX6ySSpHAwjIDDziqzuQqnx9I0qyZmJ4VTa8J+HJaXBkYmDaMlGsdzlJ8yiI+1+frMdf5x8S2esm/nWRhCcqbf5y8bz/M3K8dYuVYie27L4nxu8wmJetRQCqEGcra+GixkU6bP19KXuDpR4sryNFHKfjgPT8OgnzHojwd8e/IK/zD97l0B1XfOD24vdX0dYondZMiXNqGKKRpwwDQwhNr6idvBs1MmQJ9Y390x2knSth2xQh2jULcKHNt5LNtudrHW9LRBU7m0AgcRggzV/t7UAWhNtLaOESvSscboJ2mWPeZGJrk8NIqV6TNdqnIyu8JLyRs87Sxx1OLW5ueglQT/KmHJoHbcYzkeppcfJXWzhLfURK5XUY3mnrRI190uarOCk/BwKg4r7TQbymR0x2ssEaMNwBAIIQZXxwOq9cIwEKkUwUiG1oiBLHU57i7f+r5gcM292z3Ad6+fJLqcwlsXZOoat67wFzuYS+VBl4ksOIpxt8aYWcWXNtW4w0aQwq5J3LX2IAKg9Rh07OMYobjLIXPEaDCUbrE5nCGYLmJrjapU9/3aYORyMDZEZypNY9qkOQPGTJOXJhY46S3i3vE83NlBUffZGYXEnOtP8b3lkyxfKZG5aJC91sOaWyNaXdszro5GT0Pd4v3mFC+4c3xxq3FkiXjQHY707QIBt6MDyKTQng22SZiyqY7bNA4KgkNdvjQzxz/Jv36LRAG81dfMheP4ss+IWacg++TlbiLVUQHv9rO8sXEA/4ZF7mqAO1dGP3HsuwtPiNRHhIEYzCqJQTX5oUEIpOch8zl6kzl6Bc2EU8USkivBMO8vjZO8ZpGejzCqbaI9cuN/aGgN1TrJmwkiN8FmKsGlyWF62btfaghJUricsOp8KX+d61N5mq0sTt3GXvQ+9UN/GJAJH0ZLtA5nqZwwSL60yX998Od807/MhOns2kysx23+uvUs//rsyyTe9pi8GuEv1JAbtQGJ2mcD6/sJQgxsu7f3LNvdGENIvuGtsjx0josjI4RJ8+E8PKUk9CXJQpMvp65wxPpwz5SW6tFUESkZ75KXnQu6LERZ8kaLp6wIX9xfGngvh6s7q70G7Fpcd0pAdiJGECoTzf6UHt8XWqMaA/lfasMjeTlBWEjQHXboZRMsjSW5emCYCwdG+FrpCrXkJU7ZXTJbQ+ITpsPX/Cu40yGvpk7wztQkrctJ8mezZCwDQwhUvbH3iFQUDUwObi7jr2fZrCeZC/M8Y9/epFsiRpkQJyyshA9B+EDyLAyJyiVpjzt0RgX5TJuUsZvMN1SPX1QPos+kGXszxL/ZQLS7EEboXg8tBDqXpluQpAttXkreYNYMAIvVGK41irgbYC5sED0u4bxKD6T+d0iuho2QA6kKC8OjtKZcMr0csh/APidSFHNUT+UoPy3Q011Ojq/wSuEqz3tzzJp1nAc807aLP3dCac35zhhL8wWyFwxyl/s4Nyuoam3PkCgAsxXirvu8uTLFkcQRjlpnyBk+vtFHOZrYk2jfRXQ8pGUhkwni8SLdUZ9u3iBIC/o56I2HzB5c43dGT/N1/xLPOrdlgq/3Yv609iJL3SxDbpNnEzc5Zq/giC4+CpBU4zZXQ5cfNk+ysFBg7KrCO70wIJ1PcBeeEKm9AiGR6RTxSI72mEWcDxmzqxgIVqMM/apLZlXjbvags0dmDz4OdlT77xXoubO6ZAmBI0MsI6ZrgjIYSEf2GWQigZgcpXU4S/WISXCsy3914G3+eWaZ7U5BqGNaqk9NKd7tj/GD1RM45zyG32hjXlogrtZR+73Cv0+gpbhlwLBz85IzfI46y7iJgNh+ONI+GBCPOJbU4gRXozVSooUrBtd/qDUhtw3wQ2A58rgWjlOJkmSMNgftdVIyYC7M83rrGW528xSdFl9OXeElZ4m8MSBC4X0kTtv/936WAQYCS8hb0g+JuCcJU7ecRR+dq9VnAd3vE/f7UK3CEkhpkBkukc5n6EynqTZtLgdjVHsey0NZFtJXedpZYtrUZKTHcdtixJjjhLPEq8mn+HfW89R7Ocx+kmSkEGG4Zze/caOBU4sIGg7XgyGq7nlyxqBjmjdbRIWQ5oRDtjWKaVnE5er9s+wMgyjt0h6W9EdCZrNlCrLNNn3v65DvdSZ57+YkxcsK/935XeYcMpFAjA7RnUzRGdGczG9y2F7DEpIbYYufdI5yY71AaVMRb2w+6q/m04PjoAyQdxAEXxrkrTZxQhEkDWLPwjA/jvBtb0H7Du0RCTMtvj5zjW/nzvCSu8y44WOIJKGObwXxfhS0YgfZNnBrCrvWRzeae26uzGwFuBse1eUUr+Vn+VriIs/JmLzRRmdDWmM2Ii5gFVMIreknLdpjNu1RQT+vibIhXqHLSyMr/H7pXX7DXyJn+Fvy6z7ngxzfq7/IG+vTtPs2ExmPcafKrL0+8IMVFn0dshiZ/Kh1gp+sHMK9aZOcaz4hUQ/AEyK1V6BicB16JY/OkMTPdimZDSyxFXqpBxkxItbo/bpJyWWoH02x+YwgeazKS9k5EnfovxUagwGxuBR6/LxyiOqNHLlrkFrsPzKnxEcB6brIQp54rED1SILqcYE40uTbM5f5VvI8O11z1uIu54Mcb3dm+enmIeYvjzB8Q2Hd3CT6lCz2nwC01shYDdiFErc6UtvoaYs4lg+v6xLHuJWYyvUU/1/7q/xZ8rmt4xBEWtKPTIL49uYoiiXdvk2/a6EDibAUthdiWTHdro2qOsiORDmKv8o9TTbbpuh3GPYb5Le6Cc3QpRk5REoihcaUConGMSIkGlPGW+YCAs8IGbYbzDjrTFkVxszmXQYxcFt2pLV4vDpS94KKidY2MLpd/ChGBhnsuk1rqcR3J3K8Nj7N80NL/FruLF/3lhkyEuQMn+dkjEqeZ34sz9/WPaqhi1ApUs0ubJZ/+ed+RjD6CtGxmesVmfcNcluX49PuAqcOL3C6d4B+NkPxtI0VhvePBIljoqRFb0iTH6vzQmaeCbNLrH3eDyL+ZfkVfnD1ON7bPtnz1d0kynUR0+M0j+aoHjXgSItvFi8ya0Zsxoo/a57ij+deQF7x8db3f27XLmQGM9OO3D1zaCAItbE1EwYiUo9VAUMIcGRE1mgzbDi3ijfbXaed5icwkBgbW4VWeY+yUMluoQsB7REXt+zirzzECIuHAa2RjQ6ppSRBxuR8cYTzQ+M8Z6/wtLvAMzOLfBBMUT9sIgMTLSF2NTofkMm1mUg1mUzUmPE2ecpb4CVnnZyRZDFq8Zet47xRn+Hc5gjVShJaFtpUVJ0AS8SUZIdR87b8+1wwxg9WTrBxsUjxhsbcbN4dRvwIbeD3G54QqT0E7bt0iybdIc2BbIOS0UQikUKBoYktgbIkhvx4Cd6fJYRpEoxn2XxG8MJXL/GPS2/zrLOML3ZfggpFNe6zHAt+0nqW9+YmKbwvKb5dRSytE+8jzbvMZghmh6kecamd0Ew+s8w/nXiDr/tXmTJvSxRXohYfBEV+VD/BjxaP0LiWJXtFkLrZfaJH/iyg9SDYFrZmjAbYjNtc7c8Sdi1k+HAWEB1G+IstCh+kaa8XWLAKCA0iAiMYaOaNYNDBRYOtNF4IRqAGzqGmJLZtlAGZQGO1Yox+iDYEkWcRpPKsFYvcGNWE+YHO3mwYWC2BiAc239oEZWi0tfXfhkbEA4dQ5Woo9pkarnAqv8SXU1dw3aVdpgPA4BnFIH9pX8YzfFSoGNXuIlfWcWsNvOs+4XCG1rRHfabIqwfTVI96jIy/ytAW8bCEwbTZ4pX0FdYOpPkgnsTs2PgL97e33wsQkcLsCK42S5xLjjFszDNqJnnOjvg/TH6fP0u+yF/mTiFDl+H1PFTr95T4aa0JUpJgKOL5oSW+7F9hwkxSjTv8u+or/NWbz1F4x6B4uglX5m/9nEwkYGaS2lNZyk8J5NEmv3vwLN9OXCAtfX7SS/PvbrxA550ihfMKe6VBvN83eVvHL32fOJ8kSmiS5m5Jd0fHVIIEZkviNBRGs793Igc+CWKN0YegY7HeT1KLE/R0a5f8fdvdd2D+tXuuc9BB302mLCE57i1zeGKdy50xrJaFt5iCpU/1zH4pdKOJv+ATeWlWhxO8OzvNbyducMIy+K/Hf8JrmcN0YwspNL4RkDG6FM3GYM7JaJOXAQkpcITEwuZm1OJPGs/w3194hXAuSWJJkAkh8qFXlARjBlmjw/QdMQHvt6dYuFaieFaQudZB36uAvZ/vr4eMJ0Rqj0C6LmEpQXtMoMa7nMyuUJJ9FM5g4D3eqvRq9uUFLLMZOsM2xmyL/+3oq7ziSiB5V4s+1DEbSnOmP86b1QMYCy7Zy13UmUv767ylgSrmaMy41I9C8fgm/9XUz/kvUmV2urHdjDp8EIzwd41j/GTxEK1LOXKXIXM9wFqqEH+Wkh8hQEiEHPwTKW7NEN36e61BDdyCHocqsDAk2jJRtkRbGkfcPqfrkc2lzjC0zIfmnKnjGGOtQtYQJJcctBTIUCHDGNkNEe0eotu/5fKG1oN5kXhr4NgwEFsWzzqK0L0+OhpUri3DIOH75CZHaR3O0B42QINb07jlYNDdlgJlD+yFY0egTIGWICO1lR0laY17zLWH6EUmGbPLEWt9y7BiN+6UHj3u0GFAHAawFYYqrkN2YwazWwJsLuaHmSsV+RX3tsysaHg84yyxWUhT63usLI8S+/Z9ZZV7AUY/xqkKrq4XeS1xiBGzRkZ28aXNKy7Mln5KV9n87cJzZOayeJ1RVK0+uBZ3yPxkNkM/K0mXGnwxfY2n7D7g0dOKc/VRkjdM8ufbGAvrKCGQqRQymyGcKNCc8agcFzhP1fi1yUt8M30eR8DlsMf3q69Qv5xn+FxM+nJjEDa93yEk0neRpQLdkkuUVGTumCebi2yW2hnsusCphMhmGxU8BkQKtmbQGcyj3wOhjqmpiI4W9PSgUmGhcEVMQgqSSMwdYwASyQFrg5cK82yMJ+guFYjS7i+L0PvUoVtt5GqZpGuSHE/y9yszvJq6ykvuAk/bm5zIbZKVkrR0d8mrB/soA0skb8n45iOHX3SO8x/mn0e8n2LomiKx2CVMWzSmTbpDkLBDSmbjlnEQQCXuc6ExQuKmSe5SB2t+40nMyi/BEyL1EXHb/lw/vI2jEMiRIZqTDu3ZkC/NzvHtzBkmTI9Qx2yGSWRHYjcVRrv/6PKrHgG2E+z1WIluSTKSbTJrdtgmExKxK5Q3RrMQpXmnfYCr5SJuWWBVu8T7iUQBRi5DdyJF/RCkjlX4zvh5vujOs9M9zRCSDeXwN7Wn+OH1I+jrCbJXIHuth71QRZWrnyk5EaY1cAQq5ghzHmHaIkxIIlcSu4OsFqE03qYifamOPn3xMzvWhwKtwbJRSY8gJVFeTMoYaOg7KuBif4zL9SHMpsTsPaR7UCtUq42xDIbrDI4higf3eL+P6vYGttIf562jiLjRQN7UJAGnOphtMet9ZL09cH/aIo6YBtoyBkYbhkCEMSLWRGkXI/DQhsWak+VSepha0gP2uKX0Z9WRKNdw19N4QwaVpkNT7TbHsYTBsNHlhLvEufQYN1MjxM69hEh7B7LWJj2XoJxM8nfmIWa9DV50zt36+1EzySvpK/xw5gjlk0myzhjuWg6j1kE0WqhmC2EYqIkSnSHBsfwmz7o3bxlyxECsJGhQrkE0NUSUmqCXN+kWJZ0RQX8sZHp6g98dO83L/lViJP+pdZS/qx7ljQuzFC4KUlebiOVN1Bax3c8QhoHMZQnH87TGTESuR9G8fV7rcZs3OidY3MiRXdfYa01UpfaxnxV7Cdo1CdJQKDY5nlxl3BzMim/DEJJQKRYjj6UotxWaDmnZJWt0GDPrjBkhzh1ql7zsccRd4WxmjHPJPNq+MzHps4cKQqjVMVcdMtdd1nMF/q/Rd/jaxDV+O/c+X3Hru8yFABajFmeDAuU4SU9ZVOIEF1ujnCmPsrGcxb9uMfRBiHeziej1CTNFuiWBnGjzTH6ZcaMO3JY5ng8zzFXyeGt6UMxdW38siqSPEk+I1MfAtv35fQPbPgKEZWMUcgSTBRozkqOHF/jnIz/h697Atriueqz0Mth1iVvpIastVG//PCxlwoPRgZVptwQz7t2Vjd2VFcVcUOJ0dZz2WoJCbVCB3zeQBtJzYbhIc9IkPtTlD2fe5TupMwwbd99uc2GRny3OYpxOkr2qSN1oYy5XUJvlz9ydT2ZSqMkhGoeSNKck3SGFKoYkMl2KyTbDfpNW6HDuygRaZkmdfkQHstUZ+zTstIXrEBRcugWJle6SN1sArMQBZzqTLJUz2DWB7D2kY9F6YDUdx9Da0oDF8aDLF6tb3aVP9BHdLmJ5HbsyWCx1sJXxpLbkeIYx6DYaxiCTBND9AB3HWLksCWOIIOERpmwWR7LUhnyg9YmP63GF0Qmw2h66Z9yyz99GrBWukJSMJqNuHe0olLWXaRRQqZG+5CBUmnU7zetDM/xe6jSZHYd90FrnhYkFXntmliDjkFhMkljzsBtpjE5EbErakx690ZinM8sctXYT8ZTdo5/X1GYdYselPaEJRwNKQw2+WlzmpfQNvuDe4KRtEuqYP2mN8T/d+DLVs0UKlyF/voNcXB/MZz0GpjzCkOhMkvaYQ3tUUMi3GDIHMu+OCni9V+Jn1UPoFZfkcoReXEU1Hw8ZeOya9POKrwwt8LXkRSbMLpLdTn09rbgYjHKuM85CN4cpFEWnxbhTJXYFebm5a19hCEFKKsatKmN+ndOeRhl7sIChYlQvho0yyQsWRj9PbS3Ld58+RfdZi7GRV3lmx1dxOujxp/WX+en6ITaaSYLAIOxamOs2yXnB9HyIt1hFLK6h2x3EcIlO0aR/sMe3D13it3PvM2FGgEOsFdeiLm+0n6e96VPYjFHrm09I1IfAEyL1EWEgMKVCm2KgX/4Em11h2RjDJcKpIrXDLt2ZgN8aPrtFoga4HtnMNfLYdbAqXXSzua+qTiKRoDeapnHApD8SMuHXHvj6UGuu9Ya4tlbEXzBJrEeI7j45XyEwkgkYKtCZztCahFOTi/xu6oNb2UChjm/ZSS9GLX5af5nOjTSjF2PSF2uwvE5Uq3161fRtkrLl6CbMgaWqyKaJhjM0Zn2qRyXhwS6zo5s8nx9keRywN8nKHtfDIv/37m/QzwyRegTHZqRSiFwG7TqIMBo4LTVb6DslLA/h+xKWjcqnaI/adMY0I/kGI2aNWCtWY58rzSHCikuqpjG64UPryTxqWaSOIuKPaQWtgwAr6eMNOXTrBo2eQ089PMfCR4bt62GnPHX7r7bm39APeThfbhHSSCEjBmYld9S8I2KkEGRlQNFqgq3uG7i6V6DqDWQYkY4UvWye9w+M87f5ozjJS0xsDagPG11+JXeZ3kGT84kRaqkE/byJ1TQw+qAN6JYE/lidZ7yFXVV1Axjz6rwzEtLAIsxGjMyU+crwdV5JXeFFZ3XrcwaFgMWoy09qx6hcLDD0riZ9uYlcWCXew4YdHxlSonybfkYSZBVDiRZ5owVYLMYh73RmuLAxjLshcTaajw2JAtCWJE4qnkosc9RqUDS8u4wlFmKH1xoHOV0eo1xP4LohU9kaBopJq8K9RlhtIUjJHimzB6ZG7zkWdRuq3UbML+JVGzgbQwiV5qfpQ0x4VZYTV/Fln9Uowy+aL/Lq/FF6Nwb5aU4fEh1IrAz2E+rSNdSOtUUKQT8rmB4r8w9y7/Blt0lSJujrkLW4z5n+GO83JjCrJnatt+8zyT4tPCFSHxESScbqEaSAkeLAEvfjvlcmRTAzxOYzHvXjMacOLvCyf5Vts+OVqMXP28+wspmhWNbISpOo3thfs0K2RWvCpn4kZnpmg1OJhbsC9Xaip+F8YxTjmkf+Qkzieh29jxYJUcjRPlykeswinOnyfGZh1yCnQnE57HGmP8rf1L7Eq5eOkbkiSM41YWmV+FMOG94mKnE+TZh36eVNgpQkTAr6WeiNRQxPbfKFoXleTN7gmLNCQkRsxAlebZ3g1Y1jrF0pMr758KRewjQRjjOYj5guUT/o0y0JhAKnqvE3IuxqgFluQaU2IFYPobggEx7d0ST1QwL7aJ1vjlziqFUHfDbiNKvtFFbNwGppRBDtr/vwY0JHESKMkKEeRBYoSXxHHdfYw5EExlAJNVYiyjqgweiEGM0eotFGVWsPd6OgFSh9y6xEqHt/L4NA462QTaHRD3ge7gVsS0SNVZPM9STdD5L8P/km78wc4B8X3uQrbpsJ0+Nr/hVSwz0OJqc4XRhnqZ6h3rFRoUQI8FI9vj55lWP2GnBb8ugKyanEAtdni6yUUoynG3yjeJEv+1c4YAbkpEdHBSzGIa93p/lB+Vd57fwhChcE6csN5M0V4upjMBd1B7QhUCZoU+MaITaKWCuWoxQf1CZorSUplDWy1Wf/9+B2YCuMzpEhrhhELuwkRotRi190nuInc4eIbiawa5LWUMy6FXEotXHL+OZOSMBGDYKkpd7zBQzd7xNvbmIAuYxLmPT5V60v8+8yL2AYiiAwiWs2/oJJflnjNGOMvsLoKeyNNvrm8l0FOu05hEk4kKrwtF0lKW+PGlRii+tBiYVmFqslMHrR52zq9ePjCZF6EO5xFVnCIG+3CXKa3mQGrzk+SBPv9T+SpEA4DhRy1A671J4P+OqJy/xB8W2OWhFgsRK1+OvOLK9uHEMuu/gbEapS3dubt3vMJWjfpTUhGDuywT8Yf58X3HmsHRuHbbvzbYQIrlfz5C5p0m8tEi2v7h+phpBEpTTVIxaNpwJeOLDAU97Cro1mqGPe6k3xPy28wo2Lo2QuGuQv9JCLG586iUIIRDFPb6ZA7aBNYxbURI98ts2w16HktTiRXOF5f47DVpnM1sIzH1l8t36KPzv3LP5pj4nLEcmLlYe2mAvbRuayRBMFyk/7VL4QcvLgwF7p2kaR8mICfylB9rpL8pqNXJbEm5uf+N4Q2QzNCRN9rMU/O/I6f5D6gAkzOehIhRmqTR+7IbBbMaL3mAx1/zJIA20at0woDKkw7tGLM7YelvcbDv+soEcKlJ9L05ocyLGdqktiLUFiKYEVxw+/4ioF2hyYd2hD3fpe7oQCQm0MYi328jN9B1SrjXttnbG4SG0twQ9PPU33JYvJse9x3LY5bvsUjJu85N5kNZtgI0rTVC5t5aC0JGV0OWavMG3u3sD60uLL3nVGJmo0Y48xq8phs0VG2nQ0XAhD3u9N8IPy07w5dwDzmkvpGuQutQedqPu4BO57KI2MQcSDfDYpNArNUpRjvpbD3jBwagqxn6TvHwIiUhCbdJRNuOP+6euQugo4H+T4afkw+lKS4iWNWwkpn7DoTNgkjT5Z2eFeueYKaGuLbmxtuZLug/tuKxDcvbLGWCdP/7xD5HloKRCxxuwq7Fobs9YdrElKDWZs2x3i1m75tXRdoqxPlNSMu7Vdduex1qzHSa52hgYdvjaIMH5CpD4knhCpjwhLGBStJlEuojVqYdXymHGMDja5T97lbkgDmfCRhRzd6SyNWXjhyBz/m5Ef8gXHAgbVt3eDIn9TPsnF+VFSSwJno7P3nVPusSEIhhJ0x2P+aOw8v5k8x5hh3JK23QsdZdJqeAwv9IkW95g36YdAkHNoTypOHlziO8WzHLY2kTsGOUOtONcZ5/q1YYrvyoErztw60frGx/vA+3UDtsiquKPqtl2hEpaNMTlG50iJ2kGL+tGYmRMr/NbIWZ5yF0jLHr4MKcmIvOEg8airHvORxY/ax/nB/HGS73qM/qyBvLb0UKUlwjTRnkM/59CagC8du8b/ZeKv8AX87cgB/mzoBc4Ux4gdD2VmSCRsrFQCXW+gWu3BjBE7JFy3Tn7HDbp1rQrTHBC3dIpgukBrUvDy1Bx/lP7glmwpImYlzBI0HJJVjVMLIdg/hi+fBGLbiMIYyLMMoe9b8b1lFb9XyJQQBAWf+iFwjteQQlPfSNJfsgg9j3yviGw0HxqZEqaFSCYI8j69rEAmQnx5d6c0RhMjtvIBH8pHfyrQ/T7RwjLmZoXSyggiHuK1wgx/nTmBLc4ybJjkpMuQYXDEAmhs/dkJg1gPDIa2YWJw3LY4bveA7YDUJC3V41Lo8ePWCX68foTrV0fInDfJXQ7xbtZhZeNjS1b3A4QGtsLrYVCsUChqsU+z5eHVBVZb3XrePS5QtnFXOrhE0NERq7HBpf4Y1ypFEsuQvtHDrHZoThQIhGbYajBktHDvWBdjrSnHgmvBENdaJYyWxAj3uGHOFgb33SIsreBKMXBq3XLP1XGMDiPiBxQShGkiPA+ZSdPN2URJxbC1+77s64i5sMSF6gjRuodT04j+52ONexh4QqTuBSnQhkRLcI0IX+wedMwbbZxMj+5QCn/TxdxwPvSMg0z4iIkR2jNZqkct4tkOX85d5ynr9orqS5u5oMQ7i5N4lxyy1yOM8j0C0fYohGUj00n0xDAbxxwSY3We8W4yYVj40h7kP9yHdVpCgRLI/j3Odo9ngwgpCJMGerjPb5TO83X/KsOGyU5voLZWXO8U8RYt8udbGBfniT5uJ0oIjEwakUmjtx3flALDQKU9gpxDmDAG8hBDoAW3LPRjR9ArCDqjGj3e5fmpBf5o+E2+4a3iCJO1OGA59lmNUnS0w3qU5lJnhLO1Ma6tlrAvehQuhsj5tYe/mZED71ttCJQDB/wyB60BqfnNxDxqWJJzOrzpT7EynMTdSGDXEtiNUczetqwKzJ7CbMcYvQjZCRD9gYW4UAPbbywT5duEKYd+3qIxaRAe7PJy5sYtEgWDLuJqP41ZMfHXFdZmB93+fGnHtRj8EULfs8sSsyO8eA8FSYUpg3A04B8eOM+w1eDMyDjvlCaoJDMIlSYfTWMsraPqzV1W3R8XcT5N44BDcwbGh2qMWPe+tw22COne+ao+HFSMareRN5fIllJ0Rnz+P9av8PbkAb6UvcbT7gIjxqDgF2tBwdAMGbtzshSavg7vch/bifW4zeu9En9efoGfXz+IvO5RmIPMjT7OzSqsbRI/Bu58D4TWt57XSu80ZDJQsUBGIGK9PzorHxJGsUCraCGTffJGC3+r6GoISSeOWYiKXOqM0Gq55PsMOjaORZQQDKVaHHWWGTMjfGHtcgNWKK6ERf6m8hRnbo6RXBUYjWA/1TFAxYNaYPTRJHfCtpHZDKqQppc30MmQjLG7KN/WirPtcRbmi2SuGKTn+4jm52uN+yR4QqTugNiuZIhBBdYzwrs6KFmjw1CmxUopSbdg4nsfPiFbZtK0Z7JsnLLoHu3zhembPOUu7PLxB7jeLaFvJCidDvEvl1Hl/VN5M4aK9I+MUDnqUHtK8eXhZcbN2l3nqO73OJAaZd7DUWcPk6htRN7AYekbiYu3Nv87SWNHC9Y6Kbx1jXFl8RPJ+aTjwHCJ7mSGIGsOZkACTeRJ2iOS9oQmKgVYXohlxZiGQgqNEBrHipjxWxxNr3HSW+QFd4GTtgf4dFTAmWCIHzVOcLVZYr2dpFJPoNdc/GVJaVGRXOxiL1YezZCzGhBCEWtEDH11+zFVNBJ82bvBpFXmK5kr3DhY4mY3x0IrR6Xt0whMVCyJI4lqWrjrLlZjMFtltwdSCDQoSxD6giAl6OcE/aKC0Q5fOjDHSWd3J7SpIla6GZyqwF/qwNrm52sI947qrnGfjhRsOZruIUSeJFeo84+yb3HKhuXUaX6SneXfpF5mTk0gVIaMY2LeXCdaXftEnyVsi+6oT+0opE+U+dWRyxwwy+y0FpbIXVbO+xWq38daLDP0jkG9luCNmeO8d3icF8YWmHBrdJRNpAxmvQ2+lrjIcYtbz//NuEsIOCK+pzrhQtDhJ50j/GDjKT64ME3+PYP8+R7Wah3RbKM7XVS3d9fPfR4gkVgiRkg96BLv8TmfDwvhOMh0GjU9THtYkkl3GDF3W313NMwFJa63CqiuSWxDv+AADp0RzbO5RZ53ahS3iPvOdTfUitPdKV6fO4B73iNzI8KotfZNcfqTQNgWKpOkX/ToFiRuMiAhdxeN6srgTHWM5FWL0vtd7Bvrg1GSJ/hQeEKk7oDWGhHHA+elEMr9BNW4Q87wb72mZDY4nNlgaSxLu+KRGk5izSfuL73blvPlswQHilQPW3SP9fjCoTm+XTjLAasG3K7abcZtTtfGSdwUJC5sEM0t7CsNuE76NKYc6kc0xQMVnk/fJC8DuMPC9F4pDu/3J9AdE9ifMyixLRhNNrdIyQA758BCLQliA6M3mDm4L3ZuXncQSGHZCNdBuC6UcrRns9RnTPq5gQREhhC70JsMODq7wleK1zjkrJE1Oviyj4Ei1CZSKLKyR15GZKVJcivTJdQxP+8l+JPNF3lrcZrehoddMUiUBcklRep6Azm/hqrViaLwkZBbHcfIfojZizG6Fku9LHXVvZU7c8RKcMSKwVsFVqmrLosRLERZGsqlpyzqcYKz7THeWp2iVk3Q2bSxGhKjJxEKYhuipCZKK8x8j+lSlZPZFb6cusqs1WBn3teVKMliPYNb1pjrdaJyZV+Q+ocGPejwiRgiJe9y7RtkvO3NDZ0ywLdDZs0ARySYsSxmrHUkr/Hftr9JNcijzCQZ28C2LFS5gg4G1u8f6ne81SWXros4MEH9gIWYbfGdyQv8avICw0ZIrK1dlfH9Ku3bBa1Raxu4vT7Oeh5vM0O5k+HnLQc3ERCFBnEsyWbazI0WOJVY4JizTFN53AzHADhor/G03SAn3UFeogo4HxT4eetpfr5+kPkbJbKnTYZer6I+uPB4GSp8GIiBigABUqhbgdcGakCk5ODv9rppwoeBdBzIJOkXXMIUDHk90rIHOyaoe9pgPUxT6foQC4KMoIlB7ArUeJdTiZu3SBTsXndrSnG6MY6c88hfiklca6Brj3lHcxumSZx26OdMgiyk/B6JOyTHc1GOpc0sxXmFdeEm0ePkgPkp4AmRugM6jNCdLka9i7uZ5PzKMP++dJjfS166NZw3a7b4Ru4CzQMObwUzlBsupd4hrBurg0T3WCEsE5lJo5M+UTFFN2/TKZq0xwSdwwEvzN7k1/LnedmdY8YcVF06KuByqPnj2pe4enWEyaUItbaxr0gUgHZMwoRAZULGkg2GrTopeWdV+3a/aTFq8W5/iNPdKf58/hkSN0zMRmOvR37eE8qEgnN/giTR+FbIRkYgp8bRy2uIZAIyW+bhW5s37dnESYcoaRHbEmUNHJwG/xTEFoQpQXdYE4708dODCm0USxw74rnSKr9eOMeXvRvMmO6tym+s4WbUYDn2WY4yzGmDpvLYiFKsBFlutAtc3ByitZjGWzbIVTROXeNWI9zVNmJhdZDV8gih+310s4lVSeFUXeYbOS6FJl+4T+M3Iz0yNsyYTTq6Qqg1TS2YddYo2S2uF4rcHM5R63gEfROtBaYVk/H65L0OU8kqxxMrHHWXOWZtMr5VNGmpHudDgx/UX6C6lma8otC1+ueLRKlBQLARaIwQ+n2Lcpyko9bu6jDvRRghNHoO85FFcUfz46veHBcnL/B9fYLNbIb2mE/i0CRudQyrGWN0I4xOMHBnjLaev3IrvNgYPMu0lCjPJPZM+lmT1rhB/amQr0/f4CvJy8xaDVJy9xIrkVgYWMQD1z6591377gfV60EQYvT7pAAtM7SaLpHr4sQD4t1JevzVcJbvpp/CT/SJIoOgN/hOXD8gl+jiWSFKC9qBTb3t0au62Bsm2WVB/lIfcXP1sz3RzwhaAHKgjDHlflwNPzp2jlcOZjFv37ShltQjj25gga3ojCm6w6CSEU9PrnDQXueu4SoGnan5KM21aoHEsiB5vYlYWntwIfMxgjBNIn/bjVeTc7u7ZjcXoxbvdY4RVh3ccvh4xQh8SnhCpO6EGjg5GetlUotZmlcS/Iv0l6hMJPnt9Ac8Y7tMmEl+O7FIyWjgGiE/i46CTJDNTOFdryDKVYTnEcwM0R5zaE5KuqMKRrtMD1V4Pr/AF5PXOGGvcshysIRBX4e82s3yL1Ze4b3L02TPWPhLjX2VGXULQqANEKbCNUNcEe5y6rsTV8M0/6+b3+Dy3AipczalcwFyo7YviRQCbHm3YGBbr+0KxUSixtzEBPXnhnCmcyhHEvoSoQebDy2hn5F0hgW9kkKlI0w/wvUCXCvCkApLaHJ2wKhfZ8YvM2rVBhszICH7TFplZs3OLmceGAyVvtsf4xfNQ1xrlVjrJKk0EgRlF3fdxCmDX1HkazFWvY/RDpG9ANHto1ttVOPRB7HqKCKu1TEsm8RahuXVLD+eOEFWvr+LFN4JR5i3HBJ9HeGKTUqZJpVkknIxSTN26WkLpSWODEnIPinZI2u0KcgOeSNk1PBukfyroeA/1p/n+zdP4C5YeJtdVLv7yM9/r0GEEUZfYXag1bFY6udYiwNmtoiUIcR93ek+a1jtmOZ6kj+vv4CVfYuTlo0hJFOmz3+WfYsD7ianxyY5VxthqZwhrLrYFRu77mDXfeymxuwNzi22BZG7ZUltgDIFYRL6BU080mdsaINvlub4RuY8J+wyeWliCWNXZXy7C28I7mvasa+gYlS7i1xaJ9MLSc35KEsi1GB2RzkmYdIkdm2U5QzmF2MQWv//2fvvKEmS6zAf/SJteV/t3Xg/s95hF9hdeEsCJEiKgiBQAPlE+6ifcAjqHFIUHwUIjxApUhRBCCJIgSCIBxBm4RcLR+wC693seNfT3lZ3eZuZEe+P6u7pHt+7i53unvrOmXOms6KyMm/eiIwbcQ2eaeFaYQpaM3Oh8CDpKPSawizXMQp19EwB7zqZ8J6P0jU8U6AMiaV56EIt7GiuT8P7cijXRas1MMouet2i6pjU1Hk73wga0kABVrBBMFUkHqiyOTzHq6Kn6DUqLPckkEgqsrnTeai2h+xcmK4pDzE8uaGTlFyAruP5dNyAwAu5xH0VIqIO2ORllUdr3Tw+vwlrXscor8P55hqgZUhdAi+bxT9aIHo6SSaQ4mvsI7WpyGZjkJDmI6r5eUPAgfRj5HYEOCT7cP0mcTtJYCKAGzTJ7rApd4OzucquninuT53g9sBp+o0KMc3AL3xLk7Yxt86Duf08d3QT8YM68RN19Kks7nqtKi1AaAoNddmYCoARJ8Gp0XbCRyzan6xgDc0i8+tz211zYLIaveD44nP2CdgSmOUnfWXmakHMko3UQVpN1zzhgjKgHpdYvSVu7pxgf2Sc7b5Juo0sMa2OhkIiMIUkLBRhzcAWFyuS6l9RAHjRWP9K5iaeneihmglgzuv4MoLkuCQ8XMIYzSALxWbBW89Ded6C69Yrjzc7S2CyB2vcx4M9u7E1h3sDJ9hlyaX7PT9pibEwZQ0JnZAO3TpAFcnFY5rOuZeawDkXrIxX5ifVnXxvYgfF0zESIwozU8F7GRISrCuUhIaDUXSwCiaiYDJYSXEqHCehF5bcLfWr6OfXArPkYk/5+N7EDnyaQy18iAOWhy1MbrBt9lijTAdPMpgMcbS7mxfKvRye72RyLkopZ2HmdIxyUyc8n8LzK6SlUIYCQ2FG6uzomOV16WPc4T9Dj1FdGNsD6ELDUxKJWlpIKak6Gc/juJPihVIPomigN9aXx8H5KKfR3KWem2+WVFj2mcbyCLFVnhdwr6fd3+UIgbR13CAQcklYZcyFxQq5livJvkiU46LKFfRiDaPsp9IwKUof57I4NscYS3MJ2g0ivjo3pUY5EBzlBt8IXXqDsGasSDDhKUVGNjjeiPNCqQdtzsQ/W7++jChoFne2BJ4N2JKoWcUUEkd5nHAMvp/bzfHxDoKzAr1cX58L2NeYliF1GcR8nshwCNdvMx1I8FRyE68NnCS0bBy71c7zlvQhXKlxMtJGLeXHyoWRFtS6HcJtJW5rH+fu2Gle5T/DTtNGFyt3CfKyylO1Xh6f7Cd0xiBxvIZ9NoPM5l7ZG36ZUJqGNEA3JDGrSkIvLU24gAt2FIJaA+VoGBWFkauhyhXUOq2N4ctKDg128/9NbOMd4YNsNs0VRk5Ct7kxMMTxvg4O2l3UqhaaLjEMDyk1XE+g64rOcJkbkuPcHTnJbnuSrYa24Erlv/SP03QPzcgGRalTVgbzXogZN8ykE+d4uYODM11kx6L4Jw1i82DnJb55F/9E023P/Sm77a0Wc6ZI7KSPUX8n/9SwkP0aKf0FeoymTPWrdIu6dML9C8l6FZ6oJ/n2zF5mT6RIHBFET1cRc7nV38A6R0mFKpYwZm0CERP/tMXJuTTPRQboMA6xw3TQ0AhoDQJaA5/honS15P52rTFyNUKjPmbiSX5obWerPc3N1jnXFVPo9Bgh0rpDt36CASvDJv8sx6OdjJVjzJaDVGoWSgls2yFoN+/R0jxsw6XTn+e28FnuCZxhi+G/YGzXhbaUdr+uHCZcxffKe3hg8gCDpzuIH9OwZ4obZ/Ly0zR81njW1pcToes0YgbVDklf1xw3hYZJ6DqeUs36Y9CMj1ob3ewlo1wHWSyiZ4OY5TjluomjVhpGYc1hp3+ScsLGrze4K3x66d1oi8AFyatsYZCTksO1Xo5m27FyGnppnWXqeznQmuEA0gTN9LA1Fw1FVtb4cXkf/3J2G9YxP9FhFy1f3jhj0StIy5C6DLJQxD47S0KkaUR9HB7o4EwyzhbzXH79uB7g/uBJEt0lzqbaGNyaItsI4NMdenw5uu0sW6wZeo0cPcaFE7+6cni6HuL7ud3kRmN0DXrYJ6dwJ6fXXWzUEgt+3bohCep1YloNuHSq27RRQPO7eD4TGTDRLROha6h1VsZASUVwrEL02TCfcO/l4O4efrfroRWxPbYwudWew2z7CadiHZQ8H6Zoxkt4CBylYwqPhF6iz5yn1yjQrhtXFY9SVw4/rEV4uryZrBug7NpMViOcmU1Rnwjin9LwZxQ9GYmdrWEU62g1F1GpoYqlV8Rtb9XMzJF43sAsR5mtpviObze3BAbp+SmNXFmvwlP1KN/M3sCR092kXhCknskiRqevTxcjJfEKBUS9jl/TCHa0MTsZ4ZlEH5vsGbr0CVJ6kLBQRPUyfsNBGaAuVd/sFb12hTZXIHbajzRsBgNtDLa1oYcvXJE20EnpOqaYI60XOeAbYT4eIucFqMhmB150BzWFh47EFB5hrUq3UaBd1y5p1OtCw1EeRdnglJPm86M3M/doB/3POAQGMzCV+amKYcNwnRhRAJgG1YSO1V/k57qf43WBQaJas7bWoiGltIV+thb62ktFKZTrImcz2IUunJpBWdrUVbP8jKM8UrrOXYEzDFgZTOHSpRdJ6wrzot4YzX436wV5vtjD5EyMSA5E/fosMtvUFUCAKTwkgllP8PDcNrSjIdqedQicnkdlX3wW4euZliF1GWS1ipqYxgYi7d1MjiX4bvtefNpz7DTLRDULW5hsN4P0Gxm8wCzEm7650AwsBhbiNgw0tBUrLHXl8FjN5uu5G/nJ6CYCIzqh4QLu+MQ1uuOXB+EptAY06gbT9TCjboytRmHJGFguA4AJJ47yBEprFuMzTBOlrUP3BSXRJ+ZIP6djVP08prayIzTNzanDy9wNJHHNx2v8Fe72nbns6Zp6Yy/pzYWfn5NRRTb4RiXNF2du4dhsO/WaiedqqIJFYESn+6RH6GwObTbXNJqqNZTrrMyEtQYnKl42C/kC0bl2pNHHyY4OHkzsx+K5JTeqy9WjueR5l8lzeX885AT4Tn4fD49uIXDGInGshHzh+Mt2P+uOxeQn9TpqbJLgVJz8jMmJ9jaOhbu5wZ4gqnnUFMx7IfJ1H1pjob7NGkDmC9hndeJammra5vGtmzgZfZbtZjO7l6M8NAQSRUBY+HRJuw5QASoXdWvVL5i4Nsd2R61c+FruUjvv1TnhRPhefg8Tp9IMPN7AfOjp6y8TXYurQ9NphAXb07O8JXRkqa6dh6ImTZQnlmLN1uK4/WKRtRpW3oWiyelaO2O+EbqQmEInqvnZY0p2mIsLfubSHGtxN2p5POKMV+ZgdR8Hp7sxxm38GYmoX2eu2QsI2UzkoaSgLk1qSqcofQxmE0TPSILPjTbLP2wgXXolaRlSl0MplNNAzs4RGk4QORrkS+ZNHOnv5L70Ce4JnGSvVSOk+ZruW1exMJSXVaZdyaCT4NnKDn48t4Xjox3Ygz5iZzz06dy6r20gKnX8c5LqmI9Htc1kaiEei4+yPzDCdnOGhO7gKJj1/Dxe3cIXR2/CHLHxzyqMUgPlOM30w+sQmctjDWvESdGIBPhC8kZ0IdnrH0NDYgmPbeZCgdmrXEisK4ezboMhJ0ZR+nGUjodGWdpk3SCTjSiDpRSnZtLUJwPYczpmA2wXzJIiPOYSPJ1FjUzgXipF/1pGergTk0ROxyl3RPmcuI0fdG6nI1gk7SuRtoqE9DphvUbCKJHWCyT1MqaQK+oa2cIjqEkCQhDX/CsMUUd5HG4oHszv56GRnTROREidlRjj8xf2x+vIxWg5slrFLDjYWYtiLsBYLU5N6Ugkg26Uf8nsYGIoRXwCjEJtTbiIqGoVOSuxLZPomTSHOvv4z8bbeXvqIHf4hpdqvZ1z/TzPCfRlWOyvSIcn6h18OXMTPzmzhehxHd/gzIVG1KKBdh3qVovz0ATKgLhdIaWf00mpFBVpIRs6eh20ugRvLfS0lw8jX8c35eO7kzsJ6zXuDx5j14JDhi409Csk28jLKsOu4Efl3fzz6I1UTsSInYTwSA1RXIfvv5eKJ9EchV4HVdXJOX5y0s+cF6Jc9JGacXEnr8/MmC8XLUPqKpC1OubILO0C/LN+Brf3M7I3Tn5zAC367CXTMl+MMRe+VdrPg1N7GBxNY49aJEYhNOYQGM4jX0KB1rWCKJYJD0cAm+p0gMF4P8eTvXy9ey9v6j/Gq8PHGXcSfHnyRk6c7CY4ZJA64xGYrKPlSqhqDdajIaVUc6dnZhZLKZLBTjJ6lE/Nvhpfsko0WKUnnON1yWOkIqdXxI1djmmvzndKe3gku5WJUhRXanhSI1/y4c768U/o+DOKeEFhlZqpmzVHIqRCq7touTLM5dZ3EUul0EZm6HxUIzISoJpMMxht43gE3JDEC0q0oEM0WmFrIsP20AxRo4IjjXPukkaJDjNPrzFP2PJWvJBPO3W+VzrAt0d24xyKkjymiJwqoi5WcPh6negKDa3mYhUUImsyXQtTkSYVWeeJ8l4Onuwj8axO4kQNLZNfG4aU66I8D312nthxHxDmucwOju5r57d2/Igt0Z/+7n9OSr6d3ccjB3cSf14nebgCl4q3u151q8VKpAIFdc+gvrywLIqyayOqOkZZodc8WK8JqS6BVqwQGQozFW/jS9xAYqDEHmvygnaLXgXnu9SecAy+lLuVh0Z2Uj4aJ/28Inosh5icwyuszyRWLwnPw6hKjLKGXtKZroaZdSPkvACyamAUL7JLd50uFr5YWobU1bCwIq5Nz5A8m8I318sUEb5t7mp+HHmeW21x2cD3rFdh0DX4UXkPXx69gdmjaeKnBZFhl8BwAaYzyGJp3SZZWI4sFLFGTGKlCOGIhRMwqMd18lvifEvtJtftZ7iU4NTzvbQ/A5GhCkamtBCrU0TW6yi5Tjux9FB1D29qmoCh0+ak8c9Y1FJhsokQ021x8pv9JIwSvxC6vNFcVw5jbp3vV7Y3g9OH2tCzJprXzO5n5wVtgx6RwzOo0QlkrY7Q9WaBRqmWgty9Zf9fz3izszA7S/A5g3AsCsk4TjpEI25Rj2rU4n7KbT6e6gxzKp0m7KvjKYHj6Zi6R9Su0ekvsCmQoRw6zp12M6PhSafMN0r7+fr4PoqnYqSPKWKHcoip2fVtfL7MCF1Hqzv4chLfrM6ZTJLHU1uYk1N8f2YHoRMmqeeL6MPTayvrplJ4uRz6KY9kNkFgOslUI84D0Ru4wz/IfutC19Dlrp/nB7FfCg2xwoXXxWPeq/Oj6mYeGdlC/KBO++N5xOgUsnKRLJKtiUuLZQgJDalTlmppo7ShFDnHj1HS8OUlRrGOctZZMPEVEKUK4dE6jZCPiUCKp5ObeEvwLG0LxXYXM2EusSxUIC+rPFrZ1TSijsVJHlLEnpvFO3l5N/qNjHI9jLKLVdQxCxrzleZulFRas46dpV248d4ai1ZFy5C6WhaCId3JKQJBP/FYO/Nakn+au43vte1gIDpPwqrgSJ26bI565kI64KpnUnJt5qoBpucjaMN+4qcgeraONZZDTc0iL7byvU5RDQeVzaPXG+jzFqZl4ov40Rsh5rQYD83sRS/pJI4IYkcL6JMZVKWKVArVaDSNyXU+8Veui5zJ4BMCoxKlPmNTj+tUZkzO5rv5/+TfxgPtE6TsEnVpUPUWs9ApPCVwpU5D6mTrAcbmYngjQSLjAiuv0FwQUmHnPYKDueZLYjGWZb0mKFkFynWbRQPnc5i5JGYkhD8aoBGzqWZMKnMW1USckr3gGy6byU+mLMWxQHPn6muJfQxE57E0j/FylJHpBNqYj9hpiJwtIyZn8LL59Zvw5aeBkohihcBkAM/ykfVF+LjzaoL+BsVTMbpOuxijs3hz82vPNVepZtKMag2/lCQjnZwK9/Mb9V/m1e2n2R8YZcDMkNBrSzWxwpogqfkvWbfsfPKyyoSjGHbjnKp3MFJPcKaU4th0B+JgmPiJ+vVXw6bFy0pdwWw1hD0vmh4cmfyGW+xR9QZGtkpwxqI6bfDCfBfPxhO81l/BFPqCe9+FZL0Kj9RSPDSzm/xQjPgghIdrMDV7YePracfFdTGKdeycgVnUqDsmMb1Ct5GlvSvH/M407TPbUGNTqGoVtcF2OF8JWobUi2FmjtghG/9ciHrUoBFKc9KXRhpNu36pnMqimS9B8xSaA20VhZ11sGeq6PMFVL6ALF+8xs16RbkOsgrCdUHXEbqGVrCJVBrY8xEaMQO95uGbrKCNzSCLRZQnQcnmTpSSG2KQk7U6ZOYxanWMGR/+gI9w2KZxyqL2fJhjkV0oA1DLdGYR1Qwk1hxIVBR2zsXKNtCrDkgJEkSt3nQR2gCyelFID5nLo9Xr6MUy/oyNb9JPOOrDDRgoQwOlmkG2ApQh8CwNz7Jx/T5O+1MoTaDXFe1FhZ13sWcr6BNzzQx9LSNqBcrzUPkC5gjEiiH8M0GqxwJIM0hPxiVwJovMF9b0i1g5DeRclvALOnY2Tv5YO1/c1s43d+d4Q99xdvonMYXbjGW0polb6qpT5897Hj+o7OLbM3s5PtEO434CU4LYhCQ0WsEazlyfmR9bvGyUlcFMKURgSmEOTm3M2BbPQ1TqWHkXK6szPhPjwdQ+wtqT3GHLi3r+5GWVH1Q7+NLszRwb7CIyqBEZbmBM55s1Ec/nOnpnqkYDLV/GtnTsnEHJ09hiznCHT+d9A4/xp3e9Ec9OkzwSwXd8ct0nO7sWtAypF4FXLCKOn8Y6pWMLAZp2dSlIlQIpUapZ9d31vHW/83JRlEK5Dspd5nIgNMTcPOagjiXEkgy85TLYaIOb9JClErJcQWhN/dCEhk8T+HX96nWG5iQWqZpr5QvyUrB+XSBfJlSjgddoQKG0QsaWdnHZikWZL++z10u/fKkohVcsQqmMmBRYJ3TshUB45XnIhQLOax1ZKkGxiH76LEnTInbHHsarcR5UuziRaMfSXHy6y+7QJF74MLfZlzelFl1wH6lu5muTBzh1vJvwKZ34SYfAyQxyeBzlNJpJSzZCquoW14yKNClXbKKZjZsgQLkuWt3BKDv450yq4z5+EN6GVAIn/gz3+NwLEgX9sJrm8zO38szZPgKnLaJDLv6RPGTzzXH9Oka5LqpQRNc1fLkAmaLNjBcGKtzgG2Fn3xTHC72YJQt7LHCtL3dd0jKkXgwLbn647nVZk+CqOH/wUl5zbnq9yUypc/e+/PC1uZqNx6KeXUTGF23+072ajc9yfV6vfXnZ2KScBuaxEeIdW5kzYhyOhxfq4Ckejw7wYHI3W6IZomYVqQR1aaALhbZw53VpUHYt5mpBxnJRasNhoqc1YmcaBE5lcAeHLvnbLVpcDqVDwGgQW1YKJKrVAdAaG3ehR3keqlJBn7MIBkxcn0WpEePrmQM82dXP9vgMnb4CPs2hJk3GqzGOzHaQH40SGNWJnpUERsowO48slTdE3PlLQTkuqlpDaDr+qQiB00E+0vEWvtc2zEg5wYmxdqx5HbMs12eSrzVAy5Bq0aJFixbXLTJfJHoki50N4wZ1lNYscur6fFSCfp7zdyKNZh2WJctxhds2CFcRqkAq6+GbLmNkisjZuWt0Ry3WPZpAGpCwKsT1c7sEXYbA9jlI88oF2tcrynFR5QoC8LkeZiFMZMRHPapTj6R5IdDG81azyKyQoDXAKip6ch52toqZqUAmi1o0oq537wIll9wbzdE5Oh43yE+n+ZdoG3od0jmJb97BP1GCVkHeF0XLkGrRokWLFtctynWQp4awBzXsxdX/BRe8pSyYl2PBvVYpBQvujZ7nXfduty1eGpoLecdPXlaXSmVMexLHudqovXWK9JB1CQ0HkS/ARDOEwtZ10LSme/byPinVUt9DSqQnmy7GGyTW+iWz4EGlPA85Pok1myH9lInQtabsPG9h3JJId2NlgHylaBlSLVq0aNHi+mMxc9dC4XXVmkO0WCs0HALTkh+d2MZvK8Ge0CSe0ngyO4A3GMLKb6wEVRewEVyI1xoLMpU1D2pXyPR4PWU1fBloGVItWrRo0aJFixZrBFWtEjtSRMgwB5/byzP+vQCYJeg662KOz3N9R/60aLF2EOp6T2nSokWLFi1atGjRokWLFqvkwoT8LVq0aNGiRYsWLVq0aNHisrQMqRYtWrRo0aJFixYtWrRYJS1DqkWLFi1atGjRokWLFi1WScuQatGiRYsWLVq0aNGiRYtV0jKkWrRo0aJFixYtWrRo0WKVtAypFi1atGjRokWLFi1atFglLUOqRYsWLVq0aNGiRYsWLVZJy5Bq0aJFixYtWrRo0aJFi1XSMqRatGjRokWLFi1atGjRYpW0DKkWLVq0aNGiRYsWLVq0WCUtQ6pFixYtWrRo0aJFixYtVknLkGrRokWLFi1atGjRokWLVdIypFq0aNGiRYsWLVq0aNFilVyXhtSpU6e466672L59O7feeitHjhy5ZNuDBw/y1re+denvz3zmMxw4cIC9e/fy2te+lpGREQBqtRo/+7M/y/bt2zlw4ACvf/3rOX369EXP+Z3vfIcbbrhh6V9XVxc33XQTANlslvvuu499+/bxG7/xG0vfmZ2d5d5778VxnKVj3/jGN/i1X/u1lySLK/E7v/M7DAwMIITg+eefv2zbq5UVXP0zkFLywQ9+kL1797Jz507e//7302g0ADh79iy33347e/bs4SMf+cjSd44dO8Y73vGOFef5X//rf61o83KzmucPMDk5yR133IGUEoBvfetb3HTTTdxwww3s3buXT3/600ttf+VXfoX9+/dzww03cOutt/L973//kuf92Mc+xt69e9m9ezfvfOc7yeVywNrTqze84Q1L93TPPffw3HPPXbLtavRqNfoKoJTi/vvvJxaLLR1bS3q1nL//+79HCMEDDzxwyTbn69WDDz7ILbfcwv79+7njjjs4ePDgUtuPfOQj7NixA03TLntOgJGREd7+9rezY8cOdu/ezV/91V8Ba09WAwMD7NixY2ls/fznP3/JtlerV3NzcyvG6+3bt2MYBvPz8xc973rpg/V6nd/6rd9i27Zt7Nu3j/e85z2XbLuaPrjI1ejrN77xDXbu3Mm2bdt417veRaFQANaWXq32+a+mDyql+C//5b+wfft29u3bx3333XfJ61gvffBy77LzWY2sZmZmeNOb3sS2bdvYu3cvDz/88CXPux70Ci5/v+ezGlnde++9bNq0aUln/8f/+B9XvJb3ve99CCHW7Hi1plHXIffdd5/6+7//e6WUUv/8z/+sbrnllku2ffOb36wefvhhpZRSx44dU+3t7WpiYkIppdRnPvMZ9Za3vEUppVS1WlXf/OY3lZRSKaXUX/3VX6nXvOY1V3U9b33rW9V//+//fel7f/zHf7x0nYcOHVJKKfWe97xHPfbYYxd896abblInT568qt95MfzoRz9So6Ojqr+/Xz333HOXbXu1slLq6p/BJz/5SXXfffeper2upJTqAx/4gPrTP/1TpZRS//E//kf16U9/Wrmuq7Zv364KhYKSUqo3vOENanBwcMV56vW62rx5s8rlci9GDFdktc//13/919U//MM/KKWUklKqeDyuDh48qJRS6uzZs8q2bVUoFJRSSmWz2aXvPfvssyoejyvP8y4450MPPaR27dq19L0/+ZM/Ub/xG7+xdD1rSa+W39OXv/xltX///ku2XY1erUZflVLqz/7sz9QHPvABFY1Gl46tJb1a5OzZs+rOO+9Ud9xxh/rKV75yyXbL9Wp+fl4lEgl1+PBhpZRSDz/8sNqzZ89S2yeeeEKdOXNGveY1r7nsOaWU6qabblJf+MIXlo5NTU0ppdaerK72uSu1Or1azsc+9jH1tre97aKfrac++Lu/+7vqt37rt5bGrMnJyUu2Xa2srkZfi8WiamtrU8eOHVNKKfWbv/mb6oMf/KBSau3p1XIu9/yVWl0f/Iu/+Av1zne+U9XrdaXUpZ/BeumDV3qXnc9qZPUrv/Ir6o/+6I+UUko9+eSTqru7WzUajQvOuV706kr3ez6rkdWVxvTz+dKXvqQ+8IEPKGDp3bzWxqu1zHW3IzUzM8PTTz+9tPr2cz/3c4yOjl5092BkZIQjR45wzz33AHD48GH2799PZ2cnAG95y1v49re/zdzcHD6fj7e85S0IIQC44447GBoauuL1TExM8P3vf59/82/+DQCmaVKpVJBSUq/XsSyLBx98kHg8zh133HHB93/hF36Bv/3bv31RsrgaXv3qV9PT03PFdquR1WqewcGDB3nd616HZVkIIXjzm9/MZz7zGeCcrBzHQUqJpml84hOf4A1veAObNm1acR7LsnjDG97AP/3TP70keVyK1Tz/Wq3G5z//eX7u535u6djylaBCoUAymcS2bYAVuyX5fP6S13Dw4EHuvvtuwuEw0JT5+bJaK3p1/j0tyu18VqNXcPX6CnDkyBEeeOABfv/3f3/F8bWkV9Dclf3ABz7AX/3VXy3pxMU4X6/OnDlDMplkz549ANxzzz2MjIzw7LPPAnDbbbexefPmK/7+97//fWzb5t3vfvfSsfb2dmDtyepqWa1eLedTn/oU73//+y963vXSB8vlMp/61Kf48Ic/vNT3Ojo6Ltp2tbK6Wn399re/zY033sjOnTsB+I3f+A0+97nPAWtbry73/FfbBz/2sY/x0Y9+FMuygEs/g/XUBy/3LlvOamX1hS98gX//7/89ALfeeitdXV386Ec/uuC860WvrnS/y1mtrFbD9PQ0H/nIR/jzP//zFcfX0ni11rnuDKnR0VE6OzsxDANodvq+vr6Luib86Ec/4tZbb136+8CBAzz77LOcPHkSgH/8x39EKcXw8PAF3/3Lv/xLfuZnfuaK1/N//+//5S1veQttbW0AvOc97+H06dPceOONvO51r6O7u5sPf/jDfPjDH77o9++8887Lunq9UqxGVqt5BjfffDNf+9rXKBQKOI7DF77whSUD5Xd+53f4yle+wp133skHP/hB8vk8X/ziF/nd3/3di17jKymryz3/p556ik2bNhEIBIDm/X/+85/nXe96F/39/dx99918+tOfXnq5Avz+7/8+W7Zs4V3vehdf+tKX0LQLu+7NN9/M9773PaamplBK8dnPfpZiscj8/Pya1Kv3vve99Pb28od/+IdLk83zeSl98HI4jsOv/uqv8r//9/9G1/UVn601vfrzP/9zXvWqV3HzzTdftt35erVt2zbm5uZ49NFHAfja175GsVi8qgWe5Rw9epR0Os0v/dIvceONN/LOd76TwcFBYO3JCpp6tW/fPt7//vczOzt70TYvVq8effRRstksb3vb2y563vXSB8+cOUMikeAjH/kIt9xyC/fcc88lf2u1srpafR0ZGaG/v3/p74GBASYnJ3Fdd03qFVz5+a+mDxYKBaanp/nqV7/K7bffzu23335JV9T10gev5l22yGpkNTc3h+M4KwzNgYGBi84Z1oterWZ8fjFj++///u+zb98+fvEXf3FJVy7Gr/7qr/Knf/qnS4s/i6yl8WqtY1zrC1jLjI2NLa36QFN5P/GJT/De974X13V561vfSiwWWzIIFvnIRz7C6dOnr6hUSin+7u/+jv/5P//n0rFgMMgXv/jFpb//w3/4D3zoQx/i9OnTS/66f/AHf8CBAweA5grW2NjYS77Xl8pqZLXct/ZKvO9972N4eJjXvOY1+P1+Xve61/HQQw8B0NnZyXe+852ltu9+97v5sz/7M374wx/yN3/zN9i2zX/7b/9taVB9pWR1ped/vqxc1+W//tf/ype//GVe/epX89RTT/GOd7yDQ4cOkUqlAPjoRz/KRz/6Ub73ve/xe7/3e/zkJz+54OV033338cEPfpC3ve1t6LrOO9/5TgAMw1iTevUP//APAHz605/mQx/6EN/61rcuaPNi++CV+OM//mPe9a53sWvXrgteXGtJrw4fPsyXvvSly8YDLHK+rKLRKF/84hf5T//pP1EqlbjzzjvZvXv3qmXlui4/+MEPePzxx9mzZw+f+MQn+IVf+AWefvrpNSUrgIcffpi+vj4cx+EP/uAP+Lf/9t++rHr1qU99ive+972XlOF66YOu6zI8PMzu3bv56Ec/ynPPPcfrX/96jhw5skIusDpZrUZfL8da06tFrvT8V9MHXdfFdV2q1SpPPPEEQ0ND3HXXXezcuXNJBxZZL33wat5lL0ZWLxdrSVarud/Vyuozn/kMvb29KKX467/+a972trdx9OjRC877t3/7t/T19XH//fdf8NlaGq/WPNfMqfAaMT09rcLhsHIcRynV9Oltb29Xp06duqDtX/zFX6h/9+/+3SXPNTk5qWzbVuVyeenYxz72MXXzzTeviAG5FD/84Q9Vd3e3cl33op8/8cQT6pd/+ZeVUkrdfffd6uzZs2pwcFC9+tWvXmpz8OBBNTAwcMXfeqlcKfZgNbJazTM4n8997nPq7rvvvuD4F7/4RfWhD31IKaXUzp07VaFQUD/4wQ/Ue9/73qU2X/3qV9W99957xd94KVzN83/ggQfU/fffv/T3U089pbZt27aizS233KIeeuihi35/x44d6umnn77itTz22GOqp6fnguNrSa8W8fl8KpPJXHD8xfRBpa6sr3fffbfq6+tT/f39qru7WwkhVH9/v5qZmVnR7lrr1cc//nHV0dGh+vv7VX9/v7JtW6XTafXxj3/8grbn69X51Go1FYvFLuhnV/Kn/+d//md1zz33LP1dKpWUEOKC+IRrLavzmZiYUKFQ6KKfvRi9KhaLKhQKLcVeXA1rtQ/Ozs4qTdNWvHtuueUW9d3vfveCtquR1Wr09Qtf+IJ64xvfuPT3kSNHVHd39wXt1opeXc3zX20fDIVC6syZM0uf//zP/7z6P//n/1zwvfXSB1fzLlutrAKBwIoYsltvvfWi+rre9GqRS43PSr34sX0R27Yv+n795V/+ZdXT07PUXwHV29urnn322RXtrvV4tda57lz72trauOmmm/jHf/xHAL70pS/R09PD1q1bL2i7f/9+Tpw4seLY5OQkAJ7n8aEPfYjf/M3fXNpu/fM//3M+97nP8d3vfndFDMil+NSnPsX73ve+C1yLoOl69KEPfWjJb7VcLiOEQNM0SqXSUrtjx45dsHp1LViNrFbzDGq1GtlsFoBMJsNHP/pRfu/3fm9Fm1wux1/+5V/yR3/0RwBUKhU0TXvFZXW1z/98WfX29jI5OcmxY8cAOH36NGfOnGHHjh04jrMiduzJJ59kZmbmkrEtizKvVCr85//8ny+Q1VrQq1wux8TExNLfDzzwAMlkkkQicUHb1fbBq+WRRx5heHiYoaEhfvzjHxOJRBgaGiKdTq+4zmutV7/+67/O5OQkQ0NDDA0Ncccdd/DJT36SX//1X7+g7eVkBfAnf/In3H///RftZ5fjzW9+M2NjY4yPjwPNrFy7du3CNM2lNmtBVuVyeSk2A+Bzn/scN95440Xbvhi9+vznP8+BAweWYi8uxXrog6lUite+9rVLq/Nnz57l7Nmz7Nq164K2q5HVavT1TW96E88++yzHjx8H4OMf/zi/9Eu/tKLNWtCrRa7m+a+2D/6rf/WvePDBBwGYn5/nySefZP/+/Recd730wcu9y85ntbJ697vfzSc+8Qmg6eo2Pj7Oa17zmgvOu5706mrH59XIynVdpqenlz770pe+RHt7O8lk8oLzfvazn2V0dHSpvwK88MILK8bNtTBerXmutSV3LTh+/Li644471LZt29TNN9+sXnjhhYu2azQaqr+/X83NzS0de9Ob3qR27dqlNm/erH77t39b1Wo1pZRSo6OjClCbN29WBw4cUAcOHFC33Xbb0vf+8A//UP3N3/zN0t+5XE4FAoEVq1HL+fCHP6z+7u/+bunvr3/962r37t1q9+7d6pvf/ObS8fe9733qM5/5zIsTxFXwa7/2a6q7u1vpuq7a2trUli1bLtpuNbJS6vLP4P3vf7/66le/qpRqZibauXOn2r17t9q5c+cKGS6/xu9///tLf3/yk59UO3fuVPv371dPPfXU0vF7771XPfLIIy9eGJfhSs//fG666aaljDtKKfVP//RPau/evWr//v1q79696rOf/axSSqlyuazuuusutWfPHnXgwAF11113rbjX8/Vq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3/jGN9i/fz+7d+/mwIEDHDp0aMVzfvOb32Tv3r1Lfx0dHezbtw+ATCbDj/zIj3DDDTfwC7/wC0ufmZub46677sK27aX3vvrVr/Le9773RcthNfzDP/wDQgi+9KUvXbDNuf3qcuTxwAMPoKoqf/Znf3bB8wohlmS+d+9efvCDHwBrT1Z9fX1s3bp16To/85nPXLDt1ehXZ/Oud70LIQTZbBZYe7Kq1Wr84i/+IoODg9xwww28853vvGDb1ej2yx0zHn744aXfaefOnfz8z/88tVoNWFvj4MLCwjJdsWXLFjRNI51Or9j+7GfwUp99xStesXRs165dCCF45plnVjzvhfqnbdu85S1vYc+ePdx33304jgM0xqQ777yTTCazdI5nnnmG173udVdSPOdxsbHsXFajrz784Q+zdetWFEW5qA6ExvOzbds2BgcHue+++8jn88DaGwdXo1dWM2e466676O/vX+pbH/vYxy543v/zf/4PO3bsYO/evRw4cIDHHnsMWHv6ak0jr0N+5Ed+RP7DP/yDlFLKz33uc3L//v0XbPu6171Ofv/735dSSnnkyBGZSqXk5OSklFLKf/qnf5Kvf/3rV33ehYUF+YMf/EB+9atflXv27Fl27K1vfav83ve+J4vFouzv75dSSlkul+Udd9whM5nMsrYzMzNycHBQOo5zube+ar73ve/JsbEx2dvbK5966qmLtr0asjp48KA8efKklFLKSqUiX/nKVy597td//dflJz/5Sek4jtyyZYvM5/PS8zz52te+Vg4NDS07T61WkwMDAzKbza5WBJdFpVKRX/va16TneVJKKT/+8Y/LV73qVRds/773vU/+4z/+o5RSSs/zZCwWk4cOHZJSSjk8PCxN05T5fF5KKZf97gcPHpSxWEy6rnveOT3Pk/v27ZOf/exnl96bnp6WUq4tWUm5/J7+7d/+Te7evfuCbc/uVwsLCzIUCsmpqSkppZQ/+MEPZEtLi5RSynQ6LePxuHz22WellFJ+//vflzt37rys63nDG94g//iP/1hK2fjt/uAP/kBK2einhw8fllJK+c53vlM+/PDD531237598tixY5f1PS+W4eFheeutt8oDBw7IL37xixdsd3a/uhx5ZLNZefPNN8s3vvGN8mMf+9gFzwucp3+kXHuyuhw9dZqr2a++8IUvyPe85z3L5LbWZPWrv/qr8hd/8ReXdNbpe1+J1ej2yx0zSqWSrNfrUkopXdeVb3nLW+Sf/umfSinX3jh4Nh/96EflG9/4xgseP/sZXM1nP/e5z8ldu3ateOxi/fMrX/mK/Nmf/VkppZQ/+7M/K7/yla9IKaX87d/+bfmZz3zmvHO9+c1vlt/5zncueP0vhUuNZeeyGn316KOPypMnT8pXvepVF9WBhUJBtra2yiNHjkgppXz/+98vf+M3fkNKubbGwdXqldXMGS4lo9M89dRTsqenRxYKBSll41m++eabpZRrT1+tZa67HanZ2VmeeOKJpdW3t771rYyNja24e3Dq1Cmee+457rjjDgCeffZZdu/eTXt7OwCvf/3r+frXv87CwsKqzhuPx7n99tsJBALnHdN1nXK5TLVaRVVVAH7/93+fX/mVXyEajS5r29rayqZNm/jWt7714gVyCe688066urou2e5qyerGG29kYGAAAMuy2Lt3LyMjI8AZWdm2jed5KIrCX/7lX/La176W/v7+ZecxDIPXvva1V23l0rIsXv/61yOEAODAgQNL13ku1WqVz3zmM7z1rW9deu/slet8Pk8ikcA0TYBlv3sul7vgNXznO9/BNE1+/Md/fOm9VCoFrC1Zwfn3dFpu53Juv/I8DyklhUIBgGw2u9Q/T548SSKRYOfOnQDccccdnDp1ioMHD170WiYnJ/nOd77Dz/zMzwBnZOV5HrVaDcMw+MY3vkEsFuPAgQPnff7tb387f/u3f7s6AawCz/N4z3vew8c//vGlPrES5/ary5HHL/7iL/I7v/M7JBKJF3Vta01Wl8vV7FczMzN8+MMf5k//9E+Xvb+WZFUqlfi7v/s7PvShDy09e21tbSu2XY1uh8sfM/x+P7quA1Cv16lUKkvXstbGwbP5u7/7O37u535uxWMr6fbL/ezFjl2sf56WFUC5XMYwDJ555hleeOEF3v72t593rne84x381V/91cVv8iVwsbHsbFarr2655ZalucDF+PrXv86NN97Itm3bAPiFX/gFPv3pTwNraxxcjV5Z7ZzhchFCYNs2pVIJWLlfrQV9tea5xobcy84TTzwht2zZsuy9m2++ecUVmn/8x3+Ub33rW5deHzt2TCYSCXn06FEppZR//ud/LgH55JNPruq8p/nud7973o7U888/L++44w65b98++cUvflE+9dRT8m1ve9sFz/EHf/AH8td//dcvePxKcanVxastKykbK6apVEo+/vjjUkopJycn5Wtf+1q5d+9e+Zd/+ZdyYmJC3n333RdcmfzkJz+57BqvJu985zvlL//yL6947Pvf/7686aablr13//33y0QiIXt6emQoFJL333//suMf+MAH5MDAgIzFYvKBBx5Y8bx//ud/Ln/sx35M/sRP/ITcu3evfMtb3rK0m7cWZfUzP/MzsqurS3Z1dclnnnlmxTbn9isppfznf/5nGQwGZU9Pj2xpaVlalctmszIej8sHH3xQSinll7/8ZQnIL3zhCxe9jg996EPyvvvuW3pdLBblW9/6Vrl79275wQ9+UBaLRXn77bdfcFX1e9/73nm/55Xkox/9qPzgBz8opbz4SuO5/epS8vjc5z4n/+t//a9SSin/23/7b5fckdq3b5/cvXu3/LVf+zVZLBallGtPVr29vfKGG26Qu3btku9+97vl7Ozsiu2uZr9605vetKTLOGtHai3J6tChQ7K3t1d+4AMfkDfddJO8/fbb5be//e0V265Gt5/N5ewODg8Py927d8tAICDf/va3y1qtJqVcu+Pggw8+KFOplLRte8XjK+n2y/nsqVOnpM/nk3Nzcxf87gv1T9d15Xve8x65e/du+d73vlfati3vueceOTY2tuJ5RkdHZSKRuNStvmguNZadZrX66jSX2m354z/+Y/ne97536XWpVJKKokjbttfUOLgavbLaOcOrXvUquXXrVrlr1y759re/fWkesBIf+chHpM/nk52dnXJgYECOj49LKdeWvlrrNA0peeFJ/Ic//GH5C7/wC8ve+9znPidf8YpXyJtuukl+8IMflNFoVB46dOiKGVJn4ziOvPvuu+XExIT81Kc+Je+77z75rne9S6bT6aU2f/VXfyV/4id+4mK3fEW41KB4tWWVy+Xk/v375Z/8yZ9csM3b3vY2+dRTT8n7779f3nffffId73iHHBkZWTr+zW9+U77iFa+4xJ2+dD70oQ/JAwcOyFKptOLxT33qU8tcYWzblq961avk9773PSmllI899phsa2tbcVC9//775f79+5cmHGfzJ3/yJzIYDC65CnziE5+4oGJbK7KSUsr/9//+n3zd61634rFz+9VpV7Tnn39eSinlv//7v8uBgYEleTzwwAPyzjvvlPv27ZPvf//75Y4dO+SXv/zlC36353ly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hKqBXVBYZQ/1KjituxqEilRISEhIyMVRClmuoJ8WJGsJnHyc+gkbL+qAgq6mwqpIIlNNtKk8fmjRDAkBQM0XtUZBvubyvZkt/EBs4thcDu9Agr4XFInjFbSRyfAkCl5UaZTNJsL3Ec0WolrDzFuYtoUdsXHHI/hRE2lqCF9iNAL0ShNtpviqSh+/gKpUsI5Pkmtksapx5vwM3y1EmVsbxel/mDdGAlzNpObbWHM6sXEPY7oMjVefrF4JhFKvJpNHSEhISEhISEhISEjIy+cmS7MUEhISEhISEhISEhJy9QkVqZCQkJCQkJCQkJCQkGUSKlIhISEhISEhISEhISHLJFSkQkJCQkJCQkJCQkJClkmoSIWEhISEhISEhISEhCyTUJEKCQkJCQkJCQkJCQlZJqEiFRISEhISEhISEhISskxCRSokJCQkJCQkJCQkJGSZhIpUSEhISEhISEhISEjIMgkVqZCQkJCQkJCQkJCQkGUSKlIhISEhISEhISEhISHLJFSkQkJCQkJCQkJCQkJClkmoSIWEhISEhISEhISEhCyTV6UidfToUe666y42btzIbbfdxv79+y/Zdt++fbz97W9ffC2EYMeOHezevZvdu3fzyCOPLH5WKBT45V/+ZTZu3Mi2bdv4vd/7vYte85Of/OTi93fv3k0ikeC3f/u3AXjyySfZvXs3W7du5bOf/ezidx566CF+7dd+bcl1fud3focvfOELL0kGV8rHP/5xVq9ejRCCZ5999rJtz5fV5z73OXbt2sX27dt54xvfyOjo6OJnV/objIyM8PrXv55kMsnu3buXfLaSZNVsNnn3u9/Nxo0b2bVrF29+85s5duzYJdtPTExwxx13IKUE4J//+Z/Zu3cvO3fu5I477mDfvn2Lbf/Nv/k37Ny5k927d3Pbbbfx/e9//5LX/frXv87mzZvZsGED73nPeyiXywCcPHmS17zmNWzbto1PfepTi+0PHjzIz/7szy65xn//7/99SZurwf3337/4TPfccw/PPPPMJdue368++9nPLo7BW265hW9+85uLn11OjuczOjrKO9/5TjZt2sTWrVv59Kc/Daw8WS3wmc98BiEEDz744CXbLKdffepTn2LTpk1omnbZa57LBz/4QYQQFItFoDPnveENb2DHjh38+q//+mK7mZkZXv/61+N53uJ7X//61/nIRz5y5Q/8Eli9ejWbNm1anFu/+MUvXrLtlc5XyxnbJ0+eZM+ePezevZvt27fz8z//8xQKhcXPVlK/arVa/MZv/AYbNmxgx44dfOADH7hk2ysdg8udB2+EMTg3N7dkvd64cSOGYZDP5y/a/mqMweeff57Xve51bN68me3bt/OhD32IRqMBrLwx+M1vfpNbb711cQycuzafz3Jk9frXv541a9Ys/g7/7b/9t4te89vf/vaS36u/v59bb70VWHmyWs56db6sFrjYunCl/epGktWKRr0KecMb3qA+85nPKKWU+vKXv6z27t17ybZvfetb1Y9+9KPF14AqFAoXbfvud79b/dEf/dHi64mJiRe9l2azqTKZjHryySeVUkq9973vVT/84Q9VtVpVa9asUUopVa/X1T333HPB352amlIbNmxQvu+/6N95qfzwhz9UY2Njanh4WD3zzDOXbXuurA4ePKh6enrU+Pi4Ukqpz33uc+ptb3vbYtsr/Q3m5ubUI488or7+9a+rXbt2LflsJcmq0Wiob3zjG0pKqZRS6tOf/rS69957L9n+ox/9qPrf//t/K6WUyufzKpPJqBdeeEEppdSPfvQjtW3btsW25z7L008/rdLptAqC4IJrVioV1d3drQ4ePKiUUupjH/uY+p3f+R2llFL//t//e/XZz35W+b6vNm7cqMrlspJSqvvvv1+dOHFiyXVarZZau3atKhaLyxfEFXLuM/3DP/yD2rlz5yXbntuv5ubmVDweXxxbjzzyiOrq6lJKvbgcz0VKqW699Vb1pS99afG9yclJpdTKk5VSSp08eVLdeeed6o477lD/+I//eMl2y+lXP/3pT9Xx48fVvffee9lrLvDAAw+oD3/4w0vmwE9/+tPqP/2n/6SU6ozp559/Ximl1Ac+8AH12GOPXXCNW2+9VR05cuRKHvklcSXz1AJXOl8tZ2w3m01Vr9cXX3/84x9XH//4x5VSK69f/dZv/Zb6jd/4jcXnutx6daVjcDmyutHG4AJ/9Ed/pN7xjndc8vOrMQaPHDmi9u3bp5RSyvd99Qu/8AvqE5/4hFJqZY1BKaVKp9OL93ry5Ell27Yql8sXbb8cWV3pPHU+b3/729Uf//EfK6VWlqyWs14ptVRWC1xqXVju3L7ASpXVSudVdyI1PT3Nk08+uWh9e+9738vY2NhFrWajo6Ps37+fe+6550Wve+zYMZ588snFkyWA3t7eF/3egw8+yNDQEHv27AHANE3q9TrNZhNd1wH4v//v/5t/9+/+HalUasl3u7u7WbduHd/5znde9O+8VF73utcxODj4ou3Ol9ULL7zAzp076evrA+Btb3sb3/rWt5ibm1vWb5DJZLj77ruJRqMXfLaSZOU4Dm9729sQQgBwxx13MDIyctG2zWaTL37xi7z3ve8F4Pjx42SzWbZt2wbAPffcw+joKE8//TTAkmcplUqXvIdvfetb3HLLLWzevBmAX//1X+fv//7vgbOy8jwPKSWapvE//sf/4P7772fNmjVLrmNZFvfff/9VPcE7/5kW5HY+5/crKSVKKSqVCgDFYnGxf76YHM/l+9//PrZt8/M///OL7/X09AArT1ZSSj784Q/z6U9/Gtu2L9luuf3q9ttvZ+3atVd0D1NTU3zqU5/iT/7kT5a8vyArKSWtVgvLsvjnf/5n0uk0d9xxxwXX+YVf+AX+6q/+6or+5tVkOfPVcsa2bdtEIhEAgiCgVqstfm8l9atarcZf//Vf88lPfnLx/i61Xi1nDC5HVjfSGDyXv/7rv+ZXf/VXL/rZ1RqDGzZsYOfOnQDous5tt922KNeVNgbPPbEul8tks9mLzlvLldVLYXx8nO9///v863/9r4GVJavlPO/5soLLrwvLmdsXWMmyWum86hSpsbEx+vr6MAwD6Az6VatWLXE7W+CHP/wht9122wXvv/GNb2TXrl389m//NrVaDYADBw4wODjIRz/6Ufbs2cP9999/WXelBc6flP/gD/6AT33qU9x///380R/9Ec8++ywnTpxYMoDO5c4777ysq9e14nxZ7dq1i6effpojR44A8PnPfx6lFKdOnVrWb3A5VrKs/uzP/ox3vetdF/3siSeeYM2aNbiuC3QWybm5OR599FEAvva1r1GpVJZsQH7v936PdevW8Z73vIcHHngATbtw6I6OjjI8PLz4evXq1UxMTOD7Ph//+Mf5x3/8R+68805+53d+h1KpxFe+8hV+67d+66L3eC1k9Su/8isMDQ3x+7//+3zuc5+7aJvz+1Uul+N//I//wa233srw8DAf+tCH+Nu//VvgyuS4wIEDB+jq6uL9738/t9xyCz/3cz/HiRMnAFacrP7kT/6E1772tYvGlkvxUvrVlfJv/+2/5Q//8A+Jx+NL3v/ABz7AsWPHuOWWW3jTm97EwMAAn/zkJ/nkJz950etcq361Y8cOfvVXf5WZmZmLtlnOfHU+lxvbAO12m927d5PL5Th69Cj/6T/9J2Bl9avjx4+TyWT41Kc+xd69e7nnnnsu+beWMwbP53KyupHG4AKPPvoohUKBd7zjHRf9/GqOwQVqtRp/9Vd/tSjXlTQGhRB88Ytf5D3veQ/Dw8PcfffdfPazn8WyrAvavtR1cMeOHfziL/7iYl+5HH/7t3/L2972Nrq7u4GVJavl9I3zZQVXvi5cKStZViue63sgdu158skn1caNG5e8d9ttt6nvf//7F7T91Kc+pX791399yXunTp1SSilVrVbVBz7wAfXRj35UKdVxe9E0TT300ENKKaW++c1vqv7+ftVuty95LyMjIyoSiai5ubmLfu77vrrvvvvUmTNn1Be+8AX1nve8R33wgx9U+Xx+sc3//J//U/3iL/7iFTz5y+PFXGYuJqsvf/nL6jWveY3as2eP+oM/+AOVSqXUvn37lvUbLPDwww9f4Np3LitJVp/85CfVHXfcoWq12kU//8IXvrDEzVEppR566CH1ute9Tt16663qYx/7mNq6dav66le/esF3v/vd76q9e/eqVqt1wWd//Md/rD7ykY8svq7VakrTNOV53gVt3/e+96lnnnlGffe731Xvec971L/6V/9KjYyMLH7+7W9/W73mNa+54md+Ofzt3/6teutb33rRz87vV8ViUd12223qwIEDSimlvva1r6m1a9cuyuNK5fhf/+t/VbFYbNGt4i/+4i/Unj17LnoP11NWzz//vLrjjjsW55HLuWq81H71Yu4f/+t//S/1sY99bPE1l3Fv/q3f+i31T//0T+rpp59W73vf+9T73vc+9eyzzy5+fvjwYdXT03OZJ355LMzP7XZb/cf/+B+vuF8pden56lxebGyfS6vVUh/5yEfUf/kv/+Win1/PfvXUU08pQH32s59VSnVchrPZ7KJr3bksdwwu8GKyulHG4Ll86EMfUv/hP/yHS35+tcbgAq1WS7397W9Xv/mbv3nJNtdzDHqep+699171wx/+UCml1OOPP656e3vVzMzMBW2XK6vR0VGlVMd98NOf/rTasmXLZe9FSqnWrVunvvGNb1yyzfWer650vTpfVle6Llxpv7oRZLWSedUpUlNTUyoejy9uLqWUqqenRx09evSCtn/6p3+qPvShD13yWo8++qjavn27UkqpJ554Qg0NDS35PJfLXfS6C3ziE59Q73//+y/5+R//8R+rv/iLv1C1Wk1t2bJFeZ6n/uZv/kb9wR/8wWKbP/uzP1Mf/OAHL3mNV4oXU6ReTFYTExPKtm1Vq9WW9Rss8GKK1EqR1R/90R+pPXv2XHKjqZRSDz74oLrvvvsu+Xmz2VSpVOqS8ti0adNiTN25fOlLX1I/8zM/s/h6//79amBg4IJ2X/nKV9Tv/u7vKqWU2rx5syqXy+qhhx5Sv/Irv7LY5qtf/ap6/etff8l7fKVxHEfNzs5e8P75/erLX/6yevOb37ykTS6Xu6hv9uXk+OUvf1ndc889i6+r1aoSQlxg+LjesvrzP/9z1dvbq4aHh9Xw8LCybVt1dXWpP//zP7+g7UvtVy+22P7SL/2SGhwcXLwHQA0NDamnn356Sbuf/vSn6pd+6ZeUUkrdfffd6uTJk+rEiRPqda973WKbffv2qdWrV1/Jo79sxsfHVSwWu+hny5mvFriSsX0+jz322OIacS7Xu1/NzMwoTdOWxIzu3btXffe7372g7UsZg1ciqxtlDC5QqVRULBZbjEG9GFdrDCrVMQ68+93vVh/+8IcXY9DO53qPwSeeeEJt2LBhyXt79+5V3/nOdy5o+3LXQdu2L7pmLPDwww+rgYGBS8ZFX29Znc/lnvd8WV3punClitSNJquVxqvOta+7u5tbb72Vz3/+8wA88MADDA4Osn79+gva7ty5k8OHDy++LhQK1Ot1oOOf+sUvfpFbbrkFgD179pBIJHjuuecAePzxx1FKMTQ0dNH7kFLymc985pK+1idPnuS73/0uv/Zrv4bnefi+jxACTdOoVquL7Q4ePMiuXbtegiReWc6XFXSyzEAnVuB3f/d3+djHPobrusv6Da6ElSKrP/mTP+Hv//7v+e53v3tBjNa5XE5WAP/5P/9n7rvvPtavX4/neUtixx5//HGmp6cv6v/8lre8haeffppDhw4B8Od//ue8//3vX9KmWCzyZ3/2Z3ziE58AoF6vo2naNZVVsVhkfHx88fWDDz5INpslk8lc0PZ8Wa1du5Znn32WyclJAB577DF8318cZ5eS4/m89a1v5fTp05w5cwboZJrasmULpmkuuc/rLauPfvSjTExMMDIywsjICHfccQd/+Zd/yUc/+tEL2i6nXy2Hv/u7v2NsbGzxHgCee+65xbkPwPM8fvd3f3cxhmohNuhayqpWqy3GZgD8/d///ZJ7PJflzFdw5WP71KlTS9aIL3/5y4uxLQushH6Vy+V44xvfyLe//W2gM4eePHmSLVu2XNB2uWPwSmV1o4zBBb74xS+ya9euxRjUi3G1xqDv+7z//e8nk8nwl3/5lxeNKV0JY3BoaIiJiQkOHjwIdGLHjx8/zqZNmy5ouxxZ+b7P1NTU4mcPPPAAPT09ZLPZS97LX//1X/PBD35wMX76XFaCrODK+8b5slrOunAl3AiyWtFcb03uenDo0CF1xx13qA0bNqg9e/ao55577qLt2u22Gh4eXnS9e/TRR9WOHTvUzp071datW9UHPvCBJW55Tz75pLr99tvVjh071N69e9UPfvCDxc/e+ta3qieeeGLx9be//W21evXqS1qW3vnOdy6xfH3iE59QW7ZsUbfddtti1iIppdqwYcMSF4dXmo985CNqYGBA6bquuru71bp16y7a7nxZKaXUW97yFrVlyxa1du1a9Zu/+Zuq2Wwufna53+BXf/VXF4+3a7WaGhgYULlcTpmmqQYGBtTv/d7vLfnbK0FWY2NjClBr165Vu3btUrt27VK33377Jdvfeuutiy4tSin14Q9/WG3atEmtW7dOfeADH1i05NZqNXXXXXepbdu2qV27dqm77rpriQvk7//+76u/+Iu/WHz91a9+dfE673rXuy7IZPWRj3xkyff/8i//Um3evFnt3LlzSf98/etfrx555JGXLI/LMTIyom677Ta1fft2tXPnTvXGN77xkqedF+tXf/qnf6q2bNmidu7cqW699dYl1s5LyVGpC2X17W9/W+3atUvt3LlT3XPPPRfMAytBVufzYhbGK+1XSin1n//zf1YDAwPKsiyVzWbVwMCAmp6eVkpdKKtz4SKufZ/85CfV3/zN3yy+/qd/+ie1detWtXXr1iXuIh/84AfV5z73uWU88ZVz/PhxtXv3brVjxw61fft29bM/+7Pq5MmTF227nPnqxcb2ubL62te+pnbs2KF27Nihtm3bpv71v/7XF1jNV0q/On78uHr961+/OA6/8pWvXLTdcsbgcmSl1I01Bu+8884lffxSXI0x+PnPf14BaufOnYtyPd81dSWMQaU6bmgLfWr79u3q7/7u7y7Z9kplVa1W1Z49exave9999y1xKzu/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", @@ -548,43 +260,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "9a4a2e1c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "On-the-fly data loading enabled (no cache).\n", - "49| | | | | | 1| | | \n", - " |49| | | | | | 1| | \n", - " | |43| | | 5| 2| | | \n", - " | | |46| | 4| | | | \n", - " | | | |47| | 1| | | 2\n", - " 1| | 1| 1| |45| | 2| | \n", - " | | 1| | | |47| | | 2\n", - " | | 2| 1| | | |47| | \n", - " | | 1| | | | | |49| \n", - " | | | | | 1| 2| 1| |46\n", - "\n", - "Per-class Accuracies:\n", - "0____98.0% (49/50)\n", - "1____98.0% (49/50)\n", - "2____86.0% (43/50)\n", - "3____92.0% (46/50)\n", - "4____94.0% (47/50)\n", - "5____90.0% (45/50)\n", - "6____94.0% (47/50)\n", - "7____94.0% (47/50)\n", - "8____98.0% (49/50)\n", - "9____92.0% (46/50)\n", - "\n", - "Micro Accuracy: 93.60% (468/500)\n", - "Macro Accuracy: 93.60%\n" - ] - } - ], + "outputs": [], "source": [ "import torch\n", "\n", @@ -607,21 +286,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "ddb5af3d", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApgAAAIXCAYAAAA41y7EAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAjHZJREFUeJzs3Xtcj/f/P/DHu3OkonOERCwmTSQ5hBayyPHjMMfNsRBmm21ybA0fh2GLsPhQc9iwzUZUYn1VVJLMKXLalGMHh969vXv9/nBz/fZeZehdb9497rfbdZvr9Xpd1/V8vff2vp6u63q9LpkQQoCIiIiISE10NB0AEREREWkXJphEREREpFZMMImIiIhIrZhgEhEREZFaMcEkIiIiIrVigklEREREasUEk4iIiIjUigkmEREREakVE0wiIiIiUismmERERESkVkwwiYiIiEitmGASERERkVoxwSQiIiIitWKCSURERERqxQSTiIiIiNSKCSYRERERqRUTTCIiIiJSKyaYRERERKRWTDCJiIiISK2YYBIRERGRWjHBJCIiIiK1YoJJRERERGrFBJOIiIiI1IoJJhERERGpFRNMIiIiIlIrJphEREREpFZMMImIiIhIrZhgEhEREZFaMcEkIiIiIrVigklEREREasUEk4iIiIjUigkmEREREakVE0wiIiIiUismmERERESkVkwwiYiIiEitmGASERERkVoxwSQiIiIitWKCSURERERqxQSTiIiIiNSKCSYRERERqRUTTCIiIiJSKyaYRERERKRWTDCJiIiISK2YYBIRERGRWjHBJCIiIiK1YoJJRERERGrFBJOIiIiI1IoJJhERERGpFRNMIiIiIlIrJphEpNXGjBmDxo0bazqMKrd582bIZDJcuXJFKvP29oa3t7dajyOTyTB//ny17pOItA8TTKIa6llCIpPJkJiYWKZeCAEHBwfIZDK89957KnXPtlu+fHmF+01NTZXK5s+fD5lMhjt37qi0/eWXX9C1a1dYW1ujVq1aaNKkCYYMGYIDBw4AeJogPTvW85Y3PeF59OgR5s+fj4SEBE2HQkSkFnqaDoCINMvIyAjR0dHo1KmTSvmRI0dw48YNGBoaVrjtsmXLMHnyZNSqVeulj/vf//4Xs2fPRteuXTFnzhzUqlUL2dnZiI2Nxfbt29GrVy98/vnn+PDDD6VtTpw4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d98pISHBsXESExPV39+vzs5O3X777cP2iY2N1b59+2zLvvrqK1t70qRJOnDggG1ZS0uLFRbPvqkoNTX1guuNi4tTfX39iNdUenl5qbCwUJWVlfL29tbChQtHDaUAxh8BE8BVLzo6Wu+9956ys7PlcrlUWlo6ptPSTluxYoXKysoUFRWl6dOna8uWLTpx4oTtCOTFiomJUX5+vgoKClRRUaHExEQdP35c9fX1iouL0z333KOVK1fq1ltvVXl5uXJycrR79+4hp8fnzJmjjRs3avv27UpOTtYbb7yhAwcOWKe/AwMDVVxcrNWrV2tgYEC33XabTp48qcbGRgUFBamwsHBM9T799NNKT0/XtGnTtHDhQvX19emjjz5SSUmJ1eehhx5SbGyspDNfFgBc/riLHMBVb9OmTQoNDVVKSoqys7OVkZGhm2666ZLXUVJSory8PBUUFCg5OVkBAQHKyMiQr6+vo+NUVlaqoKBAjz32mK6//nrNnTtXTU1NioiIkCTdcsst2rp1q1588UXFx8drz549Qx7cnpGRodLSUj3++ONKSkrSX3/9pYKCAluf9evXq7S0VGVlZYqNjVVmZqZqa2sVGRk55lrT0tL0zjvvqKamRgkJCZozZ46+/vprW5/o6GilpKRo+vTpmj179gXuFQCXkss4dYEQAOC8DAwMKDY2VgsWLND69evHtZaqqiqtWrXqsvzTl8YYRUdHa9myZXr00UfHuxwAY8ApcgC4RI4dO6Y9e/YoNTVVvb29eumll3T06FHdf//9413aZev48ePasWOHfvnlF559CVxBCJgAcIl4eHioqqpKxcXFMsZoxowZqqurs64vxFBhYWGaOHGiXn31VevRTAAuf5wiBwAAgKO4yQcAAACOImACAADAUQRMAAAAOIqACQAAAEcRMAEAAOAoAiYAAAAcRcAEAACAowiYAAAAcBQBEwAAAI4iYAIAAMBRBEwAAAA4ioAJAAAARxEwAQAA4CgCJgAAABxFwAQAAICjCJgAAABwFAETAAAAjiJgAgAAwFEETAAAADiKgAkAAABHETABAADgKAImAAAAHEXABAAAgKMImAAAAHAUARMAAACOImACAADAUQRMAAAAOIqACQAAAEcRMAEAAOAoAiYAAAAcRcAEAACAowiYAAAAcBQBEwAAAI4iYAIAAMBRBEwAAAA4ioAJAAAARxEwAQAA4CgCJgAAABxFwAQAAICjCJgAAABwFAETAAAAjiJgAgAAwFEETAAAADiKgAkAAABHETABAADgKAImAAAAHEXABAAAgKMImAAAAHAUARMAAACO+j8KDsoVjFxTbQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "r = {str(i): [] for i in range(10)}\n", "for pred, lab in zip(results.preds, results.labels):\n", @@ -669,4 +337,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From dc9e5e1be315d456991fd0ffd901ac5b80e92d08 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:52:22 +0200 Subject: [PATCH 110/221] docs: focus development guide on workflows and compatibility contracts --- dev/README.md | 427 +++++++++++++++----------------------------------- 1 file changed, 130 insertions(+), 297 deletions(-) diff --git a/dev/README.md b/dev/README.md index 7a6121d..40e29e6 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1,18 +1,19 @@ # Development checks -Tests are grouped by subsystem; see the [test suite map](../tests/README.md). -Use [local worktrees](worktrees.md) to develop independent branches concurrently. -For quantization work, follow the [quantization roadmap](../docs/quantization-roadmap.md) -and [benchmark command index](benchmarks/README.md). -For a mounted global_lepi dataset on a manually allocated UCloud node, use the -[paired branch training comparison](ucloud/README.md), including fresh environment -setup, single-GPU/DDP launch and a checkpoint-based ONNX follow-up. +Use the existing uv environment from [installation](../README.md#local-installation). +Checks never synchronize it; explicitly choose the PyTorch backend when installing +dependencies. Start with the [roadmap](../docs/roadmap.md) for priorities. -Use the uv-managed environment from the [installation guide](../README.md#local-installation). -The default sync includes the development dependency group. Choose a PyTorch backend -explicitly when syncing; checks use `.venv` without changing installed packages. +| Task | Guide | +|---|---| +| Locate behavioral coverage | [Test suite map](../tests/README.md) | +| Work on independent branches | [Worktrees](worktrees.md) | +| Run training/inference experiments | [Benchmark commands](benchmarks/README.md) | +| Compare branches on UCloud | [UCloud setup and execution](ucloud/README.md) | +| Qualify native INT8 or PTQ/QAT | [Quantization roadmap](../docs/quantization-roadmap.md) | +| Prepare the MAMBO release | [Freeze contract](releases/mambo_v3/deployment-freeze.md) | -Run from the repository root: +From the repository root: ```bash bash dev/check.sh static @@ -22,346 +23,178 @@ bash dev/check.sh test --cov=mini_trainer --cov-report=xml --cov-report=term bash dev/check-wheel.sh ``` -The script resolves the repository relative to itself, so it also works when invoked -by absolute path from another directory. With no arguments it runs static checks. -`static` checks lint, formatting, and the dependency contracts in `pyproject.toml`. -Formatting failures include the proposed diff; apply it with -`.venv/bin/python -m ruff format mini_trainer tests dev`, then rerun static checks. -CI uses the locked formatter; local checks use the installed version without syncing. -It does not import training code. `test` passes remaining arguments to pytest; -`all` runs static checks first and stops if they fail. - -Tests default to hidden CUDA devices and a headless plotting backend. Set -`CUDA_VISIBLE_DEVICES=0` explicitly for tests intended to exercise a GPU. The CPU DDP -integration test launches two processes and requires localhost sockets; a restricted -sandbox may need to allow that execution. Failures caused by missing dependencies or -restricted execution should be reported separately from assertion failures. - -The slow backbone tests are skipped unless `RUN_SLOW_TESTS=1`. Enabling them can -require downloaded weights or cached configurations. The separate -`tests/utils/run_compatibility_tests.py` utility also writes compatibility results -and may change the architecture blacklist; it is not part of routine checks. +`static` checks Ruff formatting/lint and import contracts without importing the +package. `test` forwards arguments to pytest; `all` runs static checks before tests. +The harness also works by absolute path. Apply formatting with +`.venv/bin/python -m ruff format mini_trainer tests dev`. + +Tests hide CUDA and use a headless plotting backend by default. Set +`CUDA_VISIBLE_DEVICES=0` for intentional GPU checks; some also require +`RUN_CUDA_TESTS=1`. Slow backbone tests require `RUN_SLOW_TESTS=1` and may download +weights. CPU DDP tests need localhost sockets. Report dependency/sandbox failures +separately from assertion failures. The optional +`tests/utils/run_compatibility_tests.py` can mutate the architecture blacklist; +it is not a routine validation command. ## Reviewing a change -- Explain the observable behavior and compatibility guarantees. -- Run focused behavioral tests for changed code, plus static checks. Use the full - suite for changes crossing training, loading, checkpointing, or harness boundaries. -- Keep synthetic tests independent of datasets, model downloads, and service accounts. -- For refactors, retain current defaults and output formats. Add regression tests - where behavior is not already covered; avoid tests that merely repeat implementation. -- Record any untested GPU, backend, export, or optional-dependency cases explicitly. +Preserve public defaults, output formats and checkpoint identities during refactors. +Use existing regression coverage before adding tests; cover observable behavior +and meaningful failures, not private layout or configuration literals. Run focused +tests plus static checks, and the full suite for changes spanning training, loading, +checkpointing or the validation harness. Record skipped and untested boundaries. +Documentation-only edits need content/link and diff checks, not model execution. ## Installed package and dependency checks -`bash dev/check-wheel.sh` explicitly builds a wheel and installs it into a disposable -CPU environment using the core dependencies in `uv.lock`. It does not sync `.venv`. -It needs uv and access to dependencies, either cached or downloadable. Supply a Python -version or interpreter path as its first argument to select another supported Python. - -The check runs outside the source tree with isolated Python imports. It verifies -minimal imports, every console entry point's help, the packaged architecture blacklist, -and a tiny image-folder training/reload/prediction round trip. Optional integrations -must be absent. Temporary environments and outputs are cleaned up when the check exits. - -CI runs the source suite and the installed-wheel check on Python 3.12, 3.13, and 3.14. -Regular CI uses the tracked `uv.lock` with `uv sync --locked`. Local checks continue -to use the existing environment; they do not imply that it matches the lockfile. -For an explicit reproducible CPU setup, run `uv sync --locked --extra all --extra cpu`. -Select your CUDA extra instead when maintaining a GPU environment. +`bash dev/check-wheel.sh [python-version-or-path]` builds and installs the wheel +with locked core CPU dependencies in a disposable environment outside the checkout. +It checks minimal imports, CLI help, packaged metadata and a tiny training/reload/ +prediction round trip without optional integrations. It needs uv and cached or +downloadable dependencies; it does not sync `.venv`. -The separate scheduled/manual dependency-compatibility workflow runs `uv lock --upgrade` -in its disposable checkout, then the same checks. It does not update the committed lock. -To propose an upgrade locally, run `uv lock --upgrade` (or `uv lock --upgrade-package NAME`), -inspect the lock diff, explicitly sync the desired backend, and validate before committing. +CI runs source and wheel checks on Python 3.12–3.14 using the committed lock. +The scheduled/manual dependency workflow upgrades its disposable lock before +running the same checks. To propose an upgrade, explicitly update the lock, +review it, sync the intended backend and validate. Local checks use the installed +environment and do not establish agreement with the lock. ## Behavioral coverage and known limits -Loader regressions live in `tests/data/test_loader.py`. They simulate restricted -CPU affinity, Python/platform fallbacks, and explicit worker counts without starting -large worker pools. Small image and RAM-cache fixtures check output compatibility, -and the distributed loader check verifies sampler/spawn configuration. The full CPU -DDP integration test remains the runtime check for distributed training. - -`tests/training/test_checkpoint_contract.py` compares live and reloaded predictions, verifies -model/optimizer/scheduler/scaler state at the continuation boundary, and compares final -checkpoint contents after uninterrupted and resumed CPU float32 training. It retains -the original epoch budget and uses fixed data order with stochastic transforms disabled. -The disabled float32 scaler has empty state; this does not test active AMP restoration. -Checkpoints currently omit RNG and sampler state, so arbitrary stochastic runs are not -guaranteed to continue identically. - -EMA state restoration is checked independently. Full EMA continuation currently has a -strict expected-failure regression: evaluation populates nonpersistent classifier cache -buffers with shapes that differ from the training model's buffers at the next EMA update. -See the [roadmap](../docs/roadmap.md) for the follow-up. Expected failures remain visible -in pytest output and become failures if they unexpectedly pass. +The [test map](../tests/README.md) owns subsystem coverage. +Checkpoint tests compare model/optimizer/scheduler/scaler state and uninterrupted +versus resumed CPU float32 training with fixed order and no stochastic transforms. +They do not qualify active AMP restoration or arbitrary stochastic continuation: +checkpoints omit RNG and sampler state. + +EMA continuation retains a strict expected failure for incompatible classifier +cache-buffer shapes after evaluation. Preserve that regression until fixed; see +[the roadmap](../docs/roadmap.md). Passing CPU checks does not establish CUDA, +AMP, optional-backbone or distributed behavior. ## ONNX checks -`tests/export/test_onnx.py` requires the `export` extra; optional backend cases additionally -require `timm`, `transformers` and `bioclip`. CI's `all` extra includes these. -Tests use randomly initialized offline models and check all classifier head families, -representative backbones, state preservation, masks and structured outputs. +Export tests use offline initialized models and require the `export` extra; +optional backbones need their own dependencies. See [export contracts](../docs/onnx.md). -`bash dev/check-onnx.sh [path/to/export-environment/bin/python]` exports a classifier -and compares predictions in a disposable environment containing ONNX Runtime and -its dependencies, with no PyTorch or mini_trainer. It explicitly installs the runtime -version from the export environment and needs registry access or cached packages. -It does not synchronize `.venv`. CI runs this in addition to the shared test harness. +`bash dev/check-onnx.sh [export-environment/bin/python]` exports a classifier and +checks predictions in a disposable ONNX Runtime environment without PyTorch or +mini_trainer. It installs the export environment's runtime version and needs cache +or registry access; the working environment is unchanged. ## Reproducible dataset benchmarks -The [benchmark progression](benchmarks/README.md) starts with a fast synthetic -classification task with a known oracle and independent train/validation/test -splits. Its runner uses the actual training, checkpoint and inference paths. -MNIST and hierarchical Blair have explicit real-data profiles; their test data must -remain separate from configuration and checkpoint selection. +Follow the [benchmark progression](benchmarks/README.md): synthetic oracle, +MNIST, then hierarchical Blair. Keep test splits separate from configuration and +checkpoint selection. A passing correctness profile is not a throughput claim. ## Optimizer step contract -`trainer._optimizer_step` preserves the successful-step gate previously supplied -by MuonAuxAdamW's `_step_count`. The scheduler and EMA averaging update advance only -after a completed step that AMP did not reject. EMA still receives the original -batch-based index (`batches_per_epoch * epoch + batch_index`); its update-rate and -distillation schedules have not been redefined. EMA's separate cache bug is not fixed. - -The trainer uses a temporary public optimizer post-step hook. Ordinary GradScaler -omits `optimizer.step()` on overflow, so that hook does not run. Native fused AdamW -and SGD enter `step()` even on overflow and skip inside the kernel: the hook captures -GradScaler's transient `optimizer.found_inf` tensor before it is removed. Only this -AMP-aware path reads the device flag for the Python scheduler/EMA decision. The -ordinary Muon/AdamW/SGD path adds no scaler-value readback or parameter comparison. - -A completed step is not defined by whether parameters changed: zero learning rate -or zero gradients still count. Scale equality and the optimizer's return value -cannot establish success. Temporary hooks are removed even if the step raises, -and no new counter enters optimizer checkpoints. MuonAuxAdamW retains its own counter. - -Custom optimizers must follow the ordinary Optimizer/GradScaler step contract or -the native `found_inf` AMP contract. The deprecated `step(..., grad_scaler=...)` -protocol is rejected before execution when scaling is enabled because its internal -skip cannot be observed reliably. Arbitrary custom internal no-ops are not inferred -by inspecting parameters. This boundary must be rechecked when PyTorch changes its -fused AMP contract. - -`tests/training/test_optimizer_steps.py` uses real GradScaler overflow, scale growth and -recovery on CPU and optionally CUDA, including native fused AdamW/SGD. It checks -parameters, optimizer state, scheduler state and EMA call indices, as well as -zero-LR steps, scale underflow and hook cleanup. Checkpoint regressions additionally -compare uninterrupted/resumed MuonAuxAdamW, AdamW and momentum SGD training. +Scheduler and EMA updates advance only after a successful optimizer step. +Zero learning rate or zero gradients still count; parameter changes, scale equality +and return values cannot determine success. Native fused AMP optimizers can enter +`step()` on overflow, so the trainer also observes their `found_inf` skip flag. +The deprecated `step(..., grad_scaler=...)` protocol is rejected with scaling enabled. + +[Optimizer tests](../tests/training/test_optimizer_steps.py) cover real overflow, +recovery, zero-LR updates and hook cleanup; checkpoint tests cover continuation. +For their CUDA cases: ```bash -bash dev/check.sh test tests/training/test_optimizer_steps.py tests/training/test_checkpoint_contract.py RUN_CUDA_TESTS=1 CUDA_VISIBLE_DEVICES=0 bash dev/check.sh test tests/training/test_optimizer_steps.py -k cuda ``` -The configured GPU benchmark workflow runs these CUDA regressions too. An explicitly -requested CUDA test fails when no device is available; ordinary CPU CI skips those -hardware cases. These are optimizer/AMP tests, not an EMA-functionality claim. - -References: [optimizer post-step hooks](https://docs.pytorch.org/docs/2.12/generated/torch.optim.Optimizer.register_step_post_hook.html) -and [GradScaler](https://docs.pytorch.org/docs/2.12/amp.html). - ### CUDA batch transfer lookahead `mt_train --cuda-prefetch` and `mt_predict --cuda-prefetch` opt into one-batch -transfer lookahead. Python loader builders accept `cuda_prefetch=True` with a CUDA -`device`. The returned object still inherits `DataLoader`, with the same sampler, -length, worker settings and repeated-epoch behavior; its batches are already on -the requested CUDA device. Shape, dtype and order are preserved. Model -preprocessing/augmentation stays on the caller's compute stream, so this works -independently of float32, AMP or INT8 model execution. - -The option defaults off, rejects CPU targets, and is bypassed for an already -CUDA-cached dataset. It stages one additional batch and records stream usage so -the allocator cannot recycle batch storage before consumption completes. It does -not increase worker counts or add CPU reader threads. Custom CPU hooks may run a -batch earlier; stochastic hooks sharing global RNG state can therefore change -their interleaving with caller code. Returned batches may outlive iteration; -callers using them on another CUDA stream must establish their own stream handoff. -See [PyTorch stream semantics](https://docs.pytorch.org/docs/main/notes/cuda.html#cuda-streams). - -This is an opt-in throughput/memory tradeoff. Actual gains depend on the balance -between transfer and compute; compare peak allocation as well as wall time using -[the transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes). +transfer lookahead; Python builders accept `cuda_prefetch=True`. It rejects CPU +targets and is bypassed for CUDA-cached data. Loader sampling/order are preserved; +preprocessing stays on the caller's compute stream. Custom CPU hooks may execute +earlier, changing interleaving if they share global RNG state. Callers moving a +batch to another CUDA stream must establish their own handoff. +Measure throughput and memory with the [transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes). ### Direct pinned cache batches -For a CUDA target with `cache="CPU"` and `num_workers=0`, the shared training -loader now gathers cached rows directly into pinned batch storage. This removes -the intermediate pageable batch and its second copy during pinning. Batches own -their storage: modifying one cannot change the cache, and keeping an older batch -cannot cause it to be overwritten by a later iteration. Sampling, label order, -shape and dtype are unchanged. - -This applies automatically with either ordinary transfer or `--cuda-prefetch`. -Raw `LazyDataset` users can request `pin_batches=True` for the same behavior. -Worker processes always use the ordinary gather path and DataLoader's parent-side -pinning; this option never initializes the CUDA pin allocator in a worker. CPU -training, CUDA-cached datasets and scalar indexing keep their existing behavior. +CUDA targets with `cache="CPU"` and `num_workers=0` gather directly into owned +pinned batches. Raw `LazyDataset` callers can use `pin_batches=True`. Workers use +ordinary gather and parent-side pinning; they must not initialize CUDA pin allocators. +Keeping or modifying a returned batch must not corrupt the cache or later batches. ### Direct collation of stacked batches -Repository loaders now retain the gathered batch tensors through collation, -avoiding creation of one image/label view per sample. Their batch sampler tags -index lists for this internal path; dataset identity, shuffle/drop-last behavior, -distributed sampler access and RNG consumption are preserved. - -Ordinary external `LazyDataset.__getitems__` calls still return actual sample -lists, including direct `torch.stack` compatibility. An external DataLoader that -reuses the repository batch sampler with its default collator materializes sample -views on demand. Tests cover image-only and image/label batches with both direct -loading and CPU caches, including spawned workers and CUDA prefetch. - -A one-thread cache benchmark with 4,096 uint8 RGB 28×28 images, batch size 128, -and seven alternating trials measured approximately 0.52 million samples/s before -this change and 2.22 million afterward. This isolates cached iteration; larger -images, decoding, transfer and model compute change the overall benefit. See the -[integrated measurements](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#larger-batches-and-direct-collation). +Repository loaders avoid splitting gathered batches into per-sample views. +External `LazyDataset.__getitems__` calls still return sample lists, and external +default collators remain supported. Preserve sampler identity, RNG consumption, +shuffle/drop-last behavior and worker compatibility; see [loader tests](../tests/data/test_loader.py). ### Model compilation -`mt_train --compile --compile-mode reduce-overhead` selects a PyTorch model -compilation mode. The Python training entry points accept `compile_mode`, and -`dev.benchmarks.training.run` accepts the same CLI flag and records it in success and -failure reports. An explicit mode requires `--compile`; omitting it preserves -ordinary `torch.compile(model)` behavior. Optimizer compilation remains separate. - -Supported modes are `default`, `reduce-overhead`, `max-autotune`, and -`max-autotune-no-cudagraphs`. PyTorch's CUDA graph modes can reduce launch overhead -for eligible graphs, but capture is not guaranteed and workspace caching can -increase memory. Measure both float and INT8 with the same mode, including -compilation time, later training phases, peak allocation and held-out quality. -See the [PyTorch compilation modes](https://docs.pytorch.org/docs/2.12/generated/torch.compile.html). +`--compile` optionally accepts `--compile-mode`: `default`, `reduce-overhead`, +`max-autotune` or `max-autotune-no-cudagraphs`. A mode requires compilation enabled. +Optimizer compilation is separate. Compare startup, steady-state throughput, +memory and held-out quality; graph capture and a speedup are not guaranteed. ### Optimizer compilation -`mt_train --compile-optimizer` opts into compiling optimizer updates independently -of model `--compile`. The benchmark runner accepts the same option and records it -in result and failure reports. It defaults off; compilation overhead and graph -breaks can outweigh any steady-state benefit, so measure the intended workload. - -The first real optimizer call initializes lazy state eagerly. Subsequent calls -use compilation with tensor learning rates, allowing scheduler changes without -specializing a graph for every numeric rate. AMP overflow handling and scheduler -advancement remain controlled by the trainer. MuonAuxAdamW compiles its child -optimizers while keeping its outer step counter in Python; Muon's compilation -preserves the explicit BF16 casts in its Newton-Schulz iterations. - +`--compile-optimizer` defaults off and compiles updates independently of the model. For custom training, call `mini_trainer.training.compilation.compile_optimizer` -after constructing the scheduler and restoring checkpoint state. Saved learning -rates remain ordinary scalars, so a checkpoint can resume without compilation. -Explicit `foreach=True` Adam/AdamW requires `capturable=True`; unsupported -combinations fail before the helper changes the optimizer. Default and explicit -`foreach=False` updates do not need that setting. - -Regression coverage compares eager and compiled SGD, AdamW, their native fused -variants, and MuonAuxAdamW on CUDA, including overflow skips, scheduler changes, -parameter updates and optimizer state. This does not establish support for every -custom optimizer or a real-workload INT8 speedup. Quantized update dispatch and -its performance remain a separate validation boundary. +after scheduler construction and checkpoint restoration. The first actual update +initializes state eagerly; later updates use tensor learning rates so scheduling +does not specialize every numeric rate. AMP skip decisions stay with the trainer. +Explicit foreach Adam/AdamW needs `capturable=True`; unsupported combinations fail +before mutation. Saved numeric learning rates permit eager checkpoint resume. ### Optimizer CUDA graphs -`mt_train --compile-optimizer --optimizer-cudagraphs` additionally requests CUDA -graph replay for optimizer updates. It requires parameters on one CUDA device -and the default Inductor backend. It is independent of model compilation; -`--compile --compile-mode reduce-overhead` can enable model graphs as well. -The benchmark runner accepts and records the same optimizer option. - -For custom training, call `compile_optimizer(optimizer, cudagraphs=True)` after -scheduler construction and checkpoint restoration. The first real update still -initializes state eagerly, under the trainer's AMP gating. Subsequent updates use -device-resident learning rates. Scheduler updates, overflow decisions and Muon's -outer step counter remain outside graph capture. Changing the graph setting of -an already compiled optimizer is rejected rather than silently ignored. - -Numeric rates retain float64 precision; explicitly supplied tensor rates retain -their dtype. Checkpoints save numeric values plus a `_mini_trainer_lr_dtype` -marker for non-default precision, allowing compiled restoration to recover that -choice. Ordinary eager loading still accepts the numeric rates. Native fused -SGD/Adam/AdamW tensor-rate kernels require an explicitly selected float32 tensor -rate (or its recorded checkpoint marker); unsupported rates fail before mutation. -The existing foreach/capturable restrictions still apply. - -INT8 updates use compiler-visible arithmetic and final storage copies during AOT -fake-tensor tracing. This avoids an opaque in-place operator carrying CPU scalar -inputs into CUDA graph partitions. The native row update remains available in -eager execution. Regression tests check actual optimizer-only replay, arithmetic, -AMP skips, rate precision, same-optimizer restoration and eager checkpoint resume. -Capture eligibility, extra gradient copies, graph workspace memory and first-use -compilation costs still depend on the optimizer and workload. Measure both float -and INT8 with the same options; enabling graphs alone is not evidence of a speedup. +`--compile-optimizer --optimizer-cudagraphs` requests optimizer graph replay on +one CUDA device with Inductor. For custom training use +`compile_optimizer(optimizer, cudagraphs=True)` after scheduler/checkpoint setup. +Scheduler updates, overflow decisions and Muon's outer counter remain outside +capture. Changing the graph setting on an already compiled optimizer is rejected. + +Numeric rates retain float64 precision; explicit tensor rates retain their dtype, +recorded in checkpoints with `_mini_trainer_lr_dtype` where needed. Native fused +SGD/Adam/AdamW tensor-rate kernels require explicitly selected float32 rates. +Do not silently coerce them. Foreach/capturable restrictions still apply. +See [compilation implementation](../mini_trainer/training/compilation.py) and +[optimizer tests](../tests/training/test_optimizer_steps.py) for exact contracts; +capture overhead and INT8 performance require separate workload evidence. ## Agent-only changes and CI -Material primarily for coding agents lives in [`.agents/`](../.agents/README.md), -with root [`AGENTS.md`](../AGENTS.md) as the entry point. Durable notes use the -[shared format](../.agents/notes/README.md); scratch work belongs in ignored -`.agents/local/`. Developer-facing documentation remains in `docs/` and `dev/`. - -Use separate `agent:` commits for agent instructions and notes. This prefix marks -purpose, not authorship, and does not disable checks. CI workflow changes, executable -helpers and application changes receive normal separate commits. - -The CI and dataset benchmark workflows skip pushes that change only `AGENTS.md`, -Markdown inside `.agents/`, or `.agents/.gitignore`. Other Markdown, code, scripts, -configuration and workflow changes still run the usual checks. On pull requests, -a small `scope` job compares the complete PR diff; agent-only changes skip costly -jobs while preserving job statuses. Mixed changes run checks regardless of commit -messages. Scheduled and manual benchmarks keep their existing behavior. - -`dev/ci_scope.py` uses Git and the Python standard library, with no environment -installation. Missing/unreadable/empty comparisons run checks conservatively; -renames inspect both old and new paths. If classification fails, downstream checks -still run unless the workflow was cancelled. The push patterns are also checked -against the classifier by `tests/core/test_ci_scope.py`. - -Do not use `[skip ci]` as an alternative: GitHub documents that workflow-level -skipping can leave [required PR checks pending](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore). -Agent-only edits need content/link review and `git diff --check`; changes to the -classifier or workflows need their focused checks. Release-tag, scheduled and -manual workflows are not disabled by agent commit messages. - -The first hosted agent-only PR still needs required-check verification under the -repository's actual branch-protection settings; local classifier tests do not -establish those hosted statuses. +Follow [agent workspace policy](../.agents/README.md) for file placement and separate +`agent:` commits. The prefix does not disable checks. CI classifies the entire diff: +only `AGENTS.md`, Markdown under `.agents/` and `.agents/.gitignore` qualify as +agent-only. Mixed or unreadable changes run checks; scheduled/manual jobs are +unchanged. Do not use `[skip ci]` to bypass required checks. + +[The classifier](ci_scope.py) and [its tests](../tests/core/test_ci_scope.py) own exact +path/rename handling. Required-check behavior on the first hosted agent-only PR +still needs verification under the actual branch-protection settings. ## Automatic CPU budgets -Defaults use the smallest detected process CPU count, affinity mask, visible Linux -cgroup quota (v1/v2 ancestors included) and positive `SLURM_CPUS_PER_TASK`. Malformed, -unavailable or unlimited quota data falls back to other signals; fractional quotas -round down. Explicit counts, including zero, are preserved. +Defaults use the smallest available process CPU count, affinity mask, visible +Linux cgroup quota (including ancestors) and positive `SLURM_CPUS_PER_TASK`. +Fractional quotas round down; unusable signals fall back to the others. Explicit +counts, including zero, are preserved. | Consumer | Automatic budget | Override | -| --- | --- | --- | -| Training DataLoader | Available CPUs minus 4, rounded down to even, bounded 0–16 | `--num_workers` | +|---|---|---| +| Training DataLoader | CPUs minus 4, rounded down to even, bounded 0–16 | `--num_workers` | | Prediction DataLoader | Same rule, capped at 32 | `--num_workers` | -| Training cache preparation | Same rule, capped at 16; zero uses serial preparation | `--cache-workers` / `cache_workers` | +| Training cache preparation | Same rule, capped at 16; zero is serial | `--cache-workers` / `cache_workers` | -CUDA-cached datasets force zero DataLoader workers. Limits describe available -resources, not competition from other jobs; set explicit per-rank budgets when -sharing an allocation. See the [Linux quota interface](https://docs.kernel.org/admin-guide/cgroup-v2.html#cpu-interface-files) -and [Slurm allocation setting](https://slurm.schedmd.com/sbatch.html#OPT_SLURM_CPUS_PER_TASK). - -CI runs on pull requests targeting `master` and on pushes to `master`. Feature -branches such as `quant` use PR checks, avoiding duplicate push/PR jobs. New -commits cancel superseded runs for the same PR or branch. The x86 quantization -job forces AVX2 to verify portability without relying on runner VNNI support. +CUDA-cached datasets force zero DataLoader workers. These limits do not measure +competition from other jobs; set explicit per-rank budgets when sharing resources. ## PR change statistics -`pr-change-summary.yml` maintains one bot comment per PR, with file and line counts -for the core module, tests, benchmark tooling, CI, packaging, and other areas. -Markdown is excluded from the headline except root `README.md`, whose onboarding -instructions are part of the user interface. Other Markdown remains visible in a -separate row. The workflow's `featureMarkdown` set is the explicit exception list; -add a path there when its content is itself a delivered feature. - -The workflow reads GitHub PR metadata only. It uses `pull_request_target` with -permission to comment, performs no checkout and never executes PR content. It -starts working once installed on the PR base branch. Counts use GitHub's PR diff, -classify renames by destination, and flag incomplete results above the API's -3,000-file limit. They measure change volume, not quality or development effort. +[The workflow](../.github/workflows/pr-change-summary.yml) reports PR changes by +content group. Only root `README.md` is included in its code headline; other Markdown +has a separate row. Its `featureMarkdown` set defines exceptions. + +It reads GitHub metadata without checking out or executing PR code, flags incomplete +diffs above 3,000 files and classifies renames by destination. Counts describe volume, +not quality or effort. From 429e7cc1ed95f34332d8cfa6fb5631f4ed01d227 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:55:37 +0200 Subject: [PATCH 111/221] docs: make benchmark entry point a concise workflow guide --- dev/benchmarks/README.md | 208 ++++++++++++++++----------------------- 1 file changed, 83 insertions(+), 125 deletions(-) diff --git a/dev/benchmarks/README.md b/dev/benchmarks/README.md index 99d1b2d..82cd714 100644 --- a/dev/benchmarks/README.md +++ b/dev/benchmarks/README.md @@ -1,16 +1,20 @@ -# Reproducible benchmark progression +# Benchmark workflows -Start with a synthetic oracle, then MNIST, then hierarchical Blair. CPU is the fast -continuous check; GPU profiles validate additional behavior. Birds and iNaturalist -2021 remain optional larger follow-ups. Notebook settings and timing claims are -references, not acceptance criteria. +Start with the synthetic CPU oracle, then GPU profiles, then MNIST and hierarchical +Blair. These exercise training, checkpoint reconstruction and inference. Notebook +timings are illustrations, not acceptance criteria. -See [visible results and coverage](../../docs/benchmarks.md) for initial observations, -known issues, reporting and storage limits. +| Task | Guide | +|---|---| +| Paired training, native INT8 and loading/capacity probes | [Training](training.md) | +| ONNX/TensorRT preparation, calibration, quality and resources | [Inference](inference.md) | +| Target execution, compact history and optional publishing | [Reporting](reporting.md) | +| Measured findings and limitations | [Findings](../../docs/benchmarks.md) | +| Unfinished qualification | [Quantization roadmap](../../docs/quantization-roadmap.md) | ## Shared pipeline commands -Use the existing environment; these commands never install or synchronize packages: +Use a prepared environment and a new output directory for each run: ```bash bash dev/check-benchmarks.sh cpu /tmp/benchmarks-cpu @@ -18,144 +22,98 @@ bash dev/check-benchmarks.sh gpu /tmp/benchmarks-gpu BENCHMARK_DATA_ROOT="$PWD/examples" \ BLAIR_CLASS_SPEC="$PWD/examples/blair/blair_model/class_spec.json" \ bash dev/check-benchmarks.sh real /tmp/benchmarks-real -bash dev/check.sh test tests/benchmarks/test_benchmark_synthetic.py tests/benchmarks/test_benchmark_datasets.py ``` -Each results directory must be new. Set `BENCHMARK_PYTHON` to use a different prepared -interpreter. CPU runs the synthetic float32 profile. GPU runs synthetic float32, -float16 AMP and bfloat16 AMP with CUDA caching. Real runs MNIST on CPU and CUDA, -then hierarchical Blair on CUDA. Profiles run sequentially, retain failures, and -return a nonzero exit code if any profile fails. No requested GPU silently falls -back to CPU. The real profile requires existing datasets and a saved Blair class -specification; it performs no downloads or online taxonomy queries. +`BENCHMARK_PYTHON` selects an alternative interpreter; otherwise the harness uses +`.venv/bin/python` without installing or synchronizing dependencies. + +| Profile | Workload | +|---|---| +| `cpu` | Synthetic float32 oracle | +| `gpu` | Synthetic float32, FP16 AMP and BF16 AMP with CUDA caching | +| `real` | MNIST on CPU/CUDA, then hierarchical Blair on CUDA | -Individual runs are configurable: +Profiles run sequentially, retain failures and return nonzero if any run fails. +A requested GPU never silently falls back to CPU. Real-data runs require existing +datasets and a reviewed Blair class specification; they do not download data or +query taxonomy online. + +For individual settings, use `python -m dev.benchmarks.training.run --help`: ```bash -.venv/bin/python -m dev.benchmarks.training.run --output /tmp/oracle \ - --seed 42 --threads 1 --device cpu .venv/bin/python -m dev.benchmarks.training.run --dataset mnist \ --data-root examples/mnist --output /tmp/mnist-amp --epochs 5 \ --device cuda:0 --dtype float16 --cache CUDA --allow-nondeterministic ``` -`--num-workers` defaults to zero and is always explicit in reports. CUDA caching -forces zero effective loader workers. Threads default to one. Cache modes are -`NONE`, `RAM` and `CUDA`. The CPU float32 profile and synthetic GPU profiles use -strict deterministic algorithms. Real GPU profiles explicitly allow nondeterministic -operations because CUDA adaptive-pooling backward lacks a deterministic implementation. -AMP, CUDA caching and algorithm determinism are separate report fields. +Default workers are zero and runtime threads one. CUDA caching forces zero loader +workers. Synthetic profiles use deterministic algorithms; real GPU profiles allow +nondeterminism because adaptive-pooling backward lacks a deterministic CUDA path. +AMP, caching and determinism are separate settings and report fields. ## Dataset and training contracts -The synthetic generator uses four balanced classes encoding two binary factors in -red and green channels of 8-by-8 RGB images. Intensities are 32 or 224 with bounded -noise of at most 16. Thresholding channel means at 128 is an exact 100% oracle; -uniform guessing achieves 25% in expectation. Blue contains nuisance noise. A parent -label encodes the red factor, ready for a future synthetic hierarchical profile. - -Independent streams keyed by seed, split, class and sample generate 128 training, -32 validation and 64 test images. The synthetic runner uses flat labels, a channel-mean -backbone and an unnormalized linear classifier. Fixed 12-epoch runs train with -MuonAuxAdamW at learning rate 0.1. The exact oracle quality gate fails if held-out -accuracy is below 100%. - -MNIST and Blair use a tiny randomly initialized convolutional backbone, five epochs -and learning rate 0.01 in the shared profile. MNIST uses 28-pixel inputs and a flat -head; Blair uses 64-pixel inputs and the normalized hierarchical head. Blair's -reviewed specification must exactly cover the training class names. It is included -in the manifest so mappings cannot change silently across runs. - -For real datasets, 20% of each class's unique training files become validation data, -using seeded shuffling. Byte-identical duplicates stay together. Training files -identical to supplied test files are excluded from the index and recorded; the -source files and official test split remain untouched. Conflicting cross-split -content fails validation. Hashes cover encoded file bytes, not perceptual duplicates. - -Every profile uses the actual mini_trainer training, checkpoint reconstruction and -inference loader. The final checkpoint is evaluated after a fixed epoch budget; -held-out labels are never used for checkpoint or hyperparameter selection. There -is no augmentation, EMA or regularization in this baseline. Real-data completion -has no quality acceptance threshold yet. Declare such thresholds and comparisons -before attempting improvements; do not tune against these test scores. +The [synthetic generator](data/synthetic.py) has independent seeded splits and an +exact 100% oracle. Its runner fails the quality gate below 100% held-out accuracy. +It is a correctness test; real-data profiles currently have no quality acceptance +threshold. Fix budgets and quality criteria before comparing changes. + +For real data, a seeded 20% of each class's unique training files forms validation. +Byte-identical duplicates stay together; training copies of test files are excluded +from the index and recorded without changing source files or the official test +split. Conflicting labels for identical content fail validation. Hashing detects +encoded-byte equality, not perceptual duplicates. Blair's reviewed class mapping +must exactly cover training classes and is retained in the manifest. + +The final checkpoint is evaluated after a fixed epoch budget; test labels never +select checkpoints or hyperparameters. Baseline profiles disable augmentation, +EMA and regularization. Exact model and optimizer recipes live in +[the runner](training/run.py) and [shared harness](../check-benchmarks.sh). ## Reproduction artifacts -Each run writes `report.json`, `predictions.npz` with sample paths and per-level -scores/targets, dataset/split manifests, and a normal training directory containing -resolved configuration and checkpoints. Synthetic images can be regenerated; -real images remain external. Scores retain the model's evaluation-forward semantics. -The report contains source, lockfile, dataset and checkpoint hashes, versions, -configuration, hardware, coverage flags, quality and synchronized training-call wall -time. Peak CUDA allocated memory covers training, not total device/process memory. - -Wall time includes initialization, training, validation, logging and checkpoint -writes. It excludes interpreter startup, inventory/generation and final inference. -It is not pure throughput or loader-wait time. Dedicated profiling and repeated, -matched experiments are still needed to establish speed improvements. - -Tests verify exact repeated CPU predictions within one environment, matching dataset -hashes, independent splits, oracle correctness, explicit GPU failure and taxonomy -contracts. They do not guarantee byte-identical checkpoints or cross-version/GPU -numerical identity. Reports explicitly mark unexercised features; do not infer full -module coverage from a passing profile. +Retain `report.json`, `predictions.npz`, dataset/split manifests and the training +directory with resolved configuration/checkpoints. Reports record source, +environment, input and model identities; scores retain evaluation-forward semantics. +Synthetic images are regenerable; real images remain external. + +Reported training-call wall time includes setup, training, validation, logging and +checkpoint writes, but excludes interpreter startup, data inventory and final +inference. CUDA allocated peak is not total process/device memory. Neither measure +is pure inference throughput. Cross-environment numerical identity and complete +feature coverage are not implied by a passing profile. ## Continuous execution and visible reporting -`.github/workflows/benchmarks.yml` runs the CPU oracle on pull requests, master pushes -and weekly. It uses a locked CPU environment and uploads results even on failure. -The Actions run page contains a readable summary and artifacts with 90-day retention. -The README links to that history. The source checkout is not modified to publish results. -These dataset artifacts still expire. A separate opt-in TensorRT publisher connects -compact records to draft storage and Pages; its [activation and live-verification -steps](reporting.md#opt-in-public-history-publisher) remain pending. - -GPU execution uses a configured self-hosted runner labeled `self-hosted`, `linux`, -`gpu`. It creates a disposable uv environment with an explicitly selected CUDA extra, -leaving the runner's existing environments alone. Enable it manually using the `gpu` -workflow input, or set repository variable `ENABLE_GPU_BENCHMARKS=true` for weekly -execution. Set `BENCHMARK_CUDA_BACKEND` for scheduled runs (default `cu130`). - -For real-data jobs, enable input `real_data` together with `gpu`, or set -`BENCHMARK_REAL_DATA=true`. Set repository variables `BENCHMARK_DATA_ROOT` and -`BLAIR_CLASS_SPEC` to stable dataset and specification paths on that runner, outside -the checkout. The workflow does not assume these resources already exist and cannot -validate GPU behavior on a CPU-only hosted runner. Local command validation does -not establish that the hosted GPU workflow has run successfully; retain the actual -workflow run and target-machine evidence when qualifying it. - -References: [Actions job summaries](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-commands#adding-a-job-summary) -and [artifact retention](https://github.com/actions/upload-artifact#retention-period). - -## Focused guides +[Dataset CI](../../.github/workflows/benchmarks.yml) runs the CPU oracle on PRs, +master pushes and weekly, with a locked CPU environment. Actions summaries and +artifacts include failures; artifacts expire after 90 days. -| Task | Guide | -| --- | --- | -| Native QT, representative training, capacity, loading, convergence and training predictions | [Training](training.md) | -| Input preparation, calibration, ONNX CPU/TensorRT builds, placement, quality and isolated resources | [Inference](inference.md) | -| Target workflow, compact CPU/GPU history, draft storage and Pages activation | [Reporting](reporting.md) | -| Current findings and their limits | [Benchmark findings](../../docs/benchmarks.md) | -| Ordered branch work, bottlenecks and hardware dependencies | [Quantization roadmap](../../docs/quantization-roadmap.md) | +GPU jobs require a self-hosted Linux runner labelled `gpu`. They install a +disposable environment with an explicitly selected CUDA extra. + +| Configuration | Purpose | +|---|---| +| Manual `gpu` / `ENABLE_GPU_BENCHMARKS=true` | Enable GPU jobs manually / weekly | +| Manual `cuda_backend` / `BENCHMARK_CUDA_BACKEND` | CUDA extra; default `cu130` | +| Manual `real_data` / `BENCHMARK_REAL_DATA=true` | Include real-data profiles; requires GPU job | +| `BENCHMARK_DATA_ROOT`, `BLAIR_CLASS_SPEC` | Existing dataset/specification paths outside checkout | +| Manual `qt` / `BENCHMARK_QT=true` | Include paired native INT8 profiles; requires GPU job | -Use the shared commands in these guides; they do not implicitly synchronize the -working environment. Historical experiments and rejected approaches are retained -in the [experiment archive](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). +A configured workflow is not evidence of a successful target run. The separate +[history publisher](reporting.md#opt-in-public-history-publisher) remains opt-in +and needs live qualification; it does not make ordinary dataset artifacts permanent. ## Source layout and command migration -| Package | Ownership | -| --- | --- | -| `training/` | Dataset training, native QT/PTQ probes, large heads, prediction adapter | -| `data/` | Dataset generation/indexing, loading, caching, reading and transfer probes | -| `inference/` | Input preparation, calibration, ONNX/TensorRT, paired quality/resources | -| `reporting/` | Summaries, immutable history, release storage | - -Development CLI modules now include their package: for example, -`dev.benchmarks.run` becomes `dev.benchmarks.training.run` and -`dev.benchmarks.cpu_deployment` becomes `dev.benchmarks.inference.cpu_deployment`. -The shared `dev/check-*.sh` entry points are unchanged. `models.py` stays at its -original import path because saved benchmark checkpoints name those classes. -`prepare_inputs.py` retains the old preprocessing-factory import for saved recipes; -`_int8_weight.py` retains the earlier probe compatibility import. -Source hashes change with this reorganization; historical reports keep their -original hashes and should not be relabeled as runs of the new revision. +| Package | Responsibility | +|---|---| +| `training/` | Dataset training, QT/PTQ probes, large heads, prediction adapter | +| `data/` | Generation/indexing, loading, caching, reading and transfers | +| `inference/` | Input preparation, ONNX/TensorRT, paired quality/resources | +| `reporting/` | Summaries, immutable history and storage | + +Development CLI modules use these package paths; shared `dev/check-*.sh` commands +are unchanged. Preserve `models.py` for saved checkpoint identities, +`prepare_inputs.py` for saved preprocessing factories and `_int8_weight.py` for +older probe imports. Historical source hashes must not be relabelled as new runs. From b631c52c74b5bae2bd1d3addc517af2095ef7f7b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 00:57:57 +0200 Subject: [PATCH 112/221] test: decouple runtime TTA contracts from exploratory collectors --- tests/releases/test_deployment.py | 72 +++++++------------------------ 1 file changed, 15 insertions(+), 57 deletions(-) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 575e45c..9503690 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -401,25 +401,6 @@ def test_noise_preserves_extent_channels_and_reproducibility(): SaltAndPepper(proportion=-0.1) -def test_whole_image_candidates_preserve_source_and_prepare_deterministically(): - from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy, pad, rotate - - image = np.random.default_rng(12).integers(0, 256, (3, 19, 31), dtype=np.uint8) - original = image.copy() - padded = pad(image, 0.08) - np.testing.assert_array_equal(padded[:, 2:21, 3:34], image) - rotated = rotate(image, 10) - assert rotated.shape[1] > image.shape[1] and rotated.shape[2] > image.shape[2] - for name in CANDIDATES: - policy = candidate_policy(name) - assert len(policy.transforms) == 3 - for transform in policy.transforms: - actual = preprocess(transform(image.copy())) - assert actual.shape == (3, 384, 384) and np.isfinite(actual).all() - np.testing.assert_array_equal(actual, preprocess(transform(image.copy()))) - np.testing.assert_array_equal(image, original) - - @pytest.mark.parametrize( ("options", "recipe"), [([], None), (["--tta"], "rotation30_pad25_3"), (["--tta", "d4"], "d4"), (["--tta", "none"], None)] ) @@ -440,46 +421,23 @@ def capture(*args, **kwargs): cli.run() -@pytest.mark.parametrize("degrees", [-30, -10, 10, 30]) -def test_composed_rotation_reproduces_existing_padded_rotation(degrees): - from dev.releases.mambo_v3.compact_tta import rotate_pad - from dev.releases.mambo_v3.tta_candidates import rotate - - image = np.random.default_rng(42).integers(0, 256, (3, 47, 83), dtype=np.uint8) - original = image.copy() - np.testing.assert_array_equal(rotate_pad(image, degrees, 0.08), rotate(image, degrees)) - np.testing.assert_array_equal(image, original) - - -@pytest.mark.parametrize("option", ["padded_scale", True, "rotation30_pad25_3", "wide_rotation_mixed_padding_5"]) -def test_builtin_tta_matches_qualified_evaluation_views(bundle, monkeypatch, option): +@pytest.mark.parametrize( + ("option", "settings"), + [ + ("padded_scale", [(0, 0.08), (0, 0.15)]), + (True, [(-30, 0.25), (30, 0.25)]), + ("rotation30_pad25_3", [(-30, 0.25), (30, 0.25)]), + ("wide_rotation_mixed_padding_5", [(-10, 0.15), (10, 0.15), (-30, 0.25), (30, 0.25)]), + ], +) +def test_named_tta_preserves_released_recipe(option, settings): + from deployment.mambo_deploy import EdgePad, RotatePad, View from deployment.mambo_deploy.augmentation import resolve_tta - from dev.releases.mambo_v3.compact_tta import policies - from dev.releases.mambo_v3.tta_candidates import candidate_policy - - recipe = "rotation30_pad25_3" if option is True else option - if recipe == "padded_scale": - transforms = candidate_policy(recipe).transforms - else: - views, _, recipes = policies() - transforms = [views[key] for key in recipes[recipe]] - source = np.random.default_rng(19).integers(0, 256, (3, 47, 83), dtype=np.uint8) - original = source.copy() - for transform, reference in zip(resolve_tta(option).transforms, transforms, strict=True): - np.testing.assert_array_equal(transform(source), reference(source)) - predictor = Predictor(bundle, tta=option, preprocess_workers=1) - observed = [] - def runtime(images, embeddings): - observed.append(images[0].copy()) - return np.ones((len(images), 3), np.float32), None - - monkeypatch.setattr(predictor, "_onnx", runtime) - result = predictor.predict(source) - np.testing.assert_array_equal(observed, [preprocess(transform(source)) for transform in transforms]) - assert result.metadata["tta"] == recipe - assert result.metadata["tta_views"] == len(transforms) - np.testing.assert_array_equal(source, original) + policy = resolve_tta(option) + expected = (View(), *(EdgePad(padding) if degrees == 0 else RotatePad(degrees, padding) for degrees, padding in settings)) + assert policy.transforms == expected + assert policy.name == ("rotation30_pad25_3" if option is True else option) @pytest.mark.parametrize( From c59e0c4899eaace95c515b1fbf0878d4ec62dc97 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:02:14 +0200 Subject: [PATCH 113/221] chore: retire superseded early TTA sweep tools --- dev/releases/mambo_v3/qualify_tta.py | 140 ------------------------ dev/releases/mambo_v3/tta_candidates.py | 64 ----------- dev/releases/mambo_v3/tta_charts.py | 121 -------------------- dev/releases/mambo_v3/tta_report.py | 64 ----------- docs/mambo-tta.md | 4 + 5 files changed, 4 insertions(+), 389 deletions(-) delete mode 100644 dev/releases/mambo_v3/qualify_tta.py delete mode 100644 dev/releases/mambo_v3/tta_candidates.py delete mode 100644 dev/releases/mambo_v3/tta_charts.py delete mode 100644 dev/releases/mambo_v3/tta_report.py diff --git a/dev/releases/mambo_v3/qualify_tta.py b/dev/releases/mambo_v3/qualify_tta.py deleted file mode 100644 index 7986340..0000000 --- a/dev/releases/mambo_v3/qualify_tta.py +++ /dev/null @@ -1,140 +0,0 @@ -"""Bounded real-image qualification of outer TTA; write canonical mini_metrics inputs.""" - -import argparse -import csv -import time -from concurrent.futures import ThreadPoolExecutor -from pathlib import Path - -import numpy as np - -from deployment.mambo_deploy import Predictor -from deployment.mambo_deploy.augmentation import PROFILES, resolve_tta -from deployment.mambo_deploy.results import Prediction, hierarchy -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.benchmark import timing -from dev.releases.mambo_v3.evaluate import runtime_settings -from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, write_json -from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy - - -def run(args): - args.output.mkdir(parents=True, exist_ok=False) - _, records = load_records(args.manifest, args.root, args.count, 20260923) - paths = [args.root / r["path"] for r in records] - write_json(args.output / "samples.json", records) - report = { - "status": "running", - "backend": args.backend, - "samples": len(records), - "sample_ids_sha256": file_hash(args.output / "samples.json"), - "runtime": runtime_settings(4, args.backend), - "profiles": {}, - "bundle_sha256": file_hash(args.bundle / "release.json"), - "runner_sha256": file_hash(__file__), - } - try: - if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): - raise ValueError("Image bytes changed") - p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="full", threads=4, batch_size=32) - selectors = {name: Predictor(args.bundle, model=name).selected for name in PRESETS} - for profile in args.profiles: - p.tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) - start = time.perf_counter() - outputs = [] - with ThreadPoolExecutor(max_workers=4) as pool: - for offset in range(0, len(paths), 32): - scores, _ = p._infer_batch(paths[offset : offset + 32], pool=pool) - if scores.dtype != np.float32 or not np.isfinite(scores).all(): - raise AssertionError("Invalid leaf scores") - outputs.append(scores) - raw = np.concatenate(outputs) - folder = args.output / profile - folder.mkdir() - hashes = {} - for preset, indices in selectors.items(): - result = Prediction(*hierarchy(raw, indices, p.bundle.classes)) - destination = folder / preset - destination.mkdir() - csv_path = destination / "mini_metric.csv" - with csv_path.open("w", newline="") as stream: - writer = csv.writer(stream) - writer.writerow(CSV_COLUMNS) - writer.writerows(canonical_rows(records, result)) - hashes[preset] = file_hash(csv_path) - # Public API: bounded batches, custom mask, same mean embedding independent of mask. - p._apply_class_mask(-1) - plain = p.predict(paths[:8]) - embedded, vectors = p.predict_with_embeddings(paths[:8]) - assert plain.labels == embedded.labels - assert vectors.shape == (8, 1280) and vectors.dtype == np.float32 and np.isfinite(vectors).all() - np.testing.assert_allclose(np.linalg.norm(vectors, axis=1), 1, atol=1e-4) - custom = [p.bundle.classes["labels"][0][i] for i in selectors["north_europe"][:3]] - p._apply_class_mask(custom) - limited, masked_vectors = p.predict_with_embeddings(paths[:8]) - assert all(item.label[0] in custom for item in limited) - np.testing.assert_array_equal(vectors, masked_vectors) - p._apply_class_mask(-1) - report["profiles"][profile] = { - "csv_sha256": hashes, - "elapsed_seconds": time.perf_counter() - start, - "prediction_embedding_agreement_first8": True, - "custom_list_first8": True, - "finite_leaf_scores": True, - "normalized_embeddings_first8": True, - } - write_json(args.output / "report.json", report) - print(profile, report["profiles"][profile]["elapsed_seconds"], flush=True) - report["status"] = "complete" - except Exception as error: - report.update(status="failed", error=str(error)) - raise - finally: - write_json(args.output / "report.json", report) - - -def benchmark(args): - args.output.mkdir(parents=True, exist_ok=False) - runtime = runtime_settings(4, args.backend) - _, records = load_records(args.manifest, args.root, 32, 20260923) - paths = [args.root / r["path"] for r in records] - if any(file_hash(path) != r["sha256"] for path, r in zip(paths, records, strict=True)): - raise ValueError("Image bytes changed") - p = Predictor(args.bundle, backend=args.backend, device="cuda:0", model="north_europe", threads=4, batch_size=32) - report = { - "status": "running", - "backend": args.backend, - "runtime": runtime, - "samples": records, - "cells": [], - "purpose": "one process; one warmup and three observations per profile; complete CPU results", - "bundle_sha256": file_hash(args.bundle / "release.json"), - "runner_sha256": file_hash(__file__), - } - try: - for profile in args.profiles: - p.tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) - p.predict(paths) - measured = timing(lambda: p.predict(paths), 3) - report["cells"].append( - {"profile": profile, "batch": len(paths), "images_per_second": len(paths) / measured["median_seconds"], **measured} - ) - print(profile, report["cells"][-1]["images_per_second"], flush=True) - report["status"] = "complete" - except Exception as error: - report.update(status="failed", error=str(error)) - raise - finally: - write_json(args.output / "report.json", report) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - for name in ("bundle", "manifest", "root", "output"): - parser.add_argument("--" + name, type=Path, required=True) - parser.add_argument("--backend", choices=["torch", "onnx"], required=True) - parser.add_argument("--count", type=int, default=1024) - parser.add_argument("--profiles", nargs="+", choices=(*PROFILES, *CANDIDATES), default=list(PROFILES)) - parser.add_argument("--timing-only", action="store_true") - args = parser.parse_args() - (benchmark if args.timing_only else run)(args) diff --git a/dev/releases/mambo_v3/tta_candidates.py b/dev/releases/mambo_v3/tta_candidates.py deleted file mode 100644 index 9da6998..0000000 --- a/dev/releases/mambo_v3/tta_candidates.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Literature-informed, extent-preserving candidate policies for bounded qualification. - -These use the public callable interface; they are not additional release defaults. -See docs/mambo-tta.md for sources, magnitudes and the distinction from policy tuning. -""" - -import hashlib -from functools import partial - -import numpy as np -from PIL import Image, ImageEnhance, ImageFilter - -from deployment.mambo_deploy import TTA, View - -CANDIDATES = ("brightness", "contrast", "gamma", "gaussian_noise", "padded_scale", "mild_blur", "padded_rotation") - - -def photometric(image, kind, factor): - if kind == "gamma": - return np.rint((image.astype(np.float32) / 255) ** factor * 255).astype(np.uint8) - pil = Image.fromarray(image.transpose(1, 2, 0)) - enhancer = ImageEnhance.Brightness if kind == "brightness" else ImageEnhance.Contrast - return enhancer(pil).enhance(factor) - - -def gaussian(image, seed): - fingerprint = int.from_bytes(hashlib.blake2b(np.ascontiguousarray(image).data, digest_size=8).digest(), "little") - rng = np.random.default_rng([seed, fingerprint]) - # Independent RGB sensor-like perturbations; sigma is 0.005 on [0,1]. - return np.rint(np.clip(image.astype(np.float32) + rng.normal(0, 0.005 * 255, image.shape), 0, 255)).astype(np.uint8) - - -def pad(image, fraction): - height, width = image.shape[1:] - y, x = max(1, int(np.ceil(height * fraction))), max(1, int(np.ceil(width * fraction))) - return np.pad(image, ((0, 0), (y, y), (x, x)), mode="edge") - - -def blur(image, radius): - return Image.fromarray(image.transpose(1, 2, 0)).filter(ImageFilter.GaussianBlur(radius)) - - -def rotate(image, degrees): - pil = Image.fromarray(image.transpose(1, 2, 0)).rotate( - degrees, resample=Image.Resampling.BILINEAR, expand=True, fillcolor=(124, 116, 104) - ) - # Keep the expanded canvas through the release recipe's center crop. - return pad(np.asarray(pil).transpose(2, 0, 1), 0.08) - - -def candidate_policy(name): - if name in ("brightness", "contrast", "gamma"): - transforms = [partial(photometric, kind=name, factor=factor) for factor in (0.9, 1.1)] - elif name == "gaussian_noise": - transforms = [partial(gaussian, seed=seed) for seed in (0, 1)] - elif name == "padded_scale": - transforms = [partial(pad, fraction=fraction) for fraction in (0.08, 0.15)] - elif name == "mild_blur": - transforms = [partial(blur, radius=radius) for radius in (0.25, 0.5)] - elif name == "padded_rotation": - transforms = [partial(rotate, degrees=degrees) for degrees in (-10, 10)] - else: - raise ValueError(f"Unknown candidate {name}") - return TTA((View(), *transforms), name=name) diff --git a/dev/releases/mambo_v3/tta_charts.py b/dev/releases/mambo_v3/tta_charts.py deleted file mode 100644 index da6edbc..0000000 --- a/dev/releases/mambo_v3/tta_charts.py +++ /dev/null @@ -1,121 +0,0 @@ -"""Compact comparison of bounded TTA quality and its measured GPU inference cost.""" - -import argparse -import json -from pathlib import Path - -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.evaluation_data import write_json - -ORDER = ( - "none", - "hflip", - "d4", - "padded_scale", - "padded_rotation", - "brightness", - "contrast", - "gamma", - "gaussian_noise", - "light_noise", - "mild_blur", - "five_crop", - "ten_crop", -) -LABELS = ( - "None", - "Horizontal flip", - "D4 rotations/reflections", - "Padded scale", - "Padded ±10° rotation", - "Brightness", - "Contrast", - "Gamma", - "Gaussian noise", - "Salt-and-pepper noise", - "Mild blur", - "Five crops", - "Ten crops", -) - - -def collect(quality, root): - metrics = json.loads(quality.read_text()) - data = { - "quality": [ - {"backend": row["backend"], "profile": row["profile"], "macro_accuracy": row["presets"]["north_europe"]["all"]["accuracy"]["0"]} - for row in metrics["variants"] - ], - "timing": [], - "sources_sha256": {str(quality): file_hash(quality)}, - } - samples = None - for backend in ("torch", "onnx"): - path = root / f"mambo-tta-timing-{backend}" / "report.json" - report = json.loads(path.read_text()) - if report["status"] != "complete" or {c["profile"] for c in report["cells"]} != set(ORDER): - raise ValueError("Incomplete TTA timing matrix") - if samples is not None and samples != report["samples"]: - raise ValueError("Different timing samples") - samples = report["samples"] - data["sources_sha256"][str(path)] = file_hash(path) - for cell in report["cells"]: - data["timing"].append({"backend": backend, **cell}) - return data - - -def render(data, output): - import matplotlib - - matplotlib.use("Agg") - import matplotlib.pyplot as plt - import numpy as np - - output.mkdir(parents=True, exist_ok=True) - plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-tta-v1", "axes.spines.top": False, "axes.spines.right": False}) - fig, axes = plt.subplots(1, 2, figsize=(12, 8), sharey=True) - y = np.arange(len(ORDER)) - for i, (backend, label, color) in enumerate((("torch", "PyTorch", "#098e92"), ("onnx", "ONNX", "#e8872e"))): - quality = [ - next(v["macro_accuracy"] for v in data["quality"] if v["backend"] == backend and v["profile"] == name) * 100 for name in ORDER - ] - speed = [next(v["images_per_second"] for v in data["timing"] if v["backend"] == backend and v["profile"] == name) for name in ORDER] - axes[0].scatter(quality, y + (i - 0.5) * 0.23, label=label, color=color, s=40) - axes[1].barh(y + (i - 0.5) * 0.3, speed, height=0.3, color=color, label=label) - axes[0].set( - yticks=y, yticklabels=LABELS, xlabel="Macro species accuracy (%)", title="Fixed 1,024-image qualification subset", xlim=(65, 83) - ) - axes[0].invert_yaxis() - axes[1].set(xlabel="End-to-end images / second", title="GPU · batch 32 · four preparation workers") - for ax in axes: - ax.grid(axis="x", alpha=0.2) - ax.set_axisbelow(True) - fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.57, 0.945), ncol=2, frameon=False) - fig.suptitle("TTA candidates: quality and inference cost · northern Europe", fontsize=15) - fig.text( - 0.02, - 0.02, - "Quality: pinned mini_metrics, all truth, threshold 0; 201 represented species. Exploratory subset, not full-set efficacy.\n" - "Speed: RTX 3080 Ti Laptop; one process per backend, one warmup + three observations per policy; decode and CPU results included.\n" - "Dots use a restricted accuracy axis for readability. All policies are opt-in; none changes the release default.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.11, 1, 0.90)) - svg = output / "mambo-tta-tradeoffs.svg" - fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-tta-tradeoffs.png", dpi=160, bbox_inches="tight") - plt.close(fig) - write_json(output / "mambo-tta-tradeoffs.json", data) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--quality", type=Path) - parser.add_argument("--root", type=Path) - parser.add_argument("--data", type=Path) - parser.add_argument("--output", type=Path, required=True) - args = parser.parse_args() - if not args.data and (not args.quality or not args.root): - parser.error("Supply --data or both --quality and --root") - render(json.loads(args.data.read_text()) if args.data else collect(args.quality, args.root), args.output) diff --git a/dev/releases/mambo_v3/tta_report.py b/dev/releases/mambo_v3/tta_report.py deleted file mode 100644 index 020de41..0000000 --- a/dev/releases/mambo_v3/tta_report.py +++ /dev/null @@ -1,64 +0,0 @@ -"""Compute pinned mini_metrics for completed TTA qualification and compact the results.""" - -import argparse -import json -from pathlib import Path - -from deployment.mambo_deploy.augmentation import resolve_tta -from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import METRIC_SCHEMA, REVISION, measure -from dev.releases.mambo_v3.tta_candidates import CANDIDATES, candidate_policy - - -def run(args): - result = {"purpose": "fixed-subset qualification; not full-data TTA efficacy", "revision": REVISION, "variants": []} - sample_hash = None - seen = set() - for root_parent in (args.root, *args.extra_root): - for backend in args.backends: - root = root_parent / f"mambo-tta-{backend}" - report = json.loads((root / "report.json").read_text()) - if report["status"] != "complete" or file_hash(root / "samples.json") != report["sample_ids_sha256"]: - raise ValueError("Incomplete or changed TTA qualification") - if sample_hash is not None and sample_hash != report["sample_ids_sha256"]: - raise ValueError("Sample populations differ") - sample_hash = report["sample_ids_sha256"] - result["sample_ids_sha256"] = sample_hash - result["samples"] = report["samples"] - for profile in report["profiles"]: - if (backend, profile) in seen: - raise ValueError("Duplicate backend/profile evidence") - seen.add((backend, profile)) - tta = candidate_policy(profile) if profile in CANDIDATES else resolve_tta(profile) - row = {"backend": backend, "profile": profile, "views": len(tta.transforms) if tta else 1, "presets": {}} - for preset, digest in report["profiles"][profile]["csv_sha256"].items(): - source = root / profile / preset / "mini_metric.csv" - if file_hash(source) != digest: - raise ValueError("Changed prediction CSV") - path = source.with_name("metrics.json") - metric = json.loads(path.read_text()) if path.exists() else measure(source) - if ( - metric["source_sha256"] != digest - or metric["mini_metrics_revision"] != REVISION - or metric["metric_schema"] != METRIC_SCHEMA - ): - raise ValueError("Stale metric file") - if not path.exists(): - write_json(path, metric) - row["presets"][preset] = {key: metric[key] for key in ("ranks", "all", "known", "source_sha256")} - result["variants"].append(row) - print(backend, profile, row["presets"]["north_europe"]["all"]["accuracy"]["0"], flush=True) - write_json(args.output, result) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--root", type=Path, required=True) - parser.add_argument("--extra-root", type=Path, action="append", default=[]) - parser.add_argument("--backends", nargs="+", default=["torch", "onnx"], choices=["torch", "onnx"]) - parser.add_argument("--output", type=Path, required=True) - args = parser.parse_args() - if args.output.exists(): - raise FileExistsError(args.output) - run(args) diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index 3afb33a..3e0ea47 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -68,3 +68,7 @@ TTA was selected using Flemming, including part of its reporting partition. Its benefit is domain-dependent; it is not a universal improvement or an independently validated recipe choice. Earlier crop/noise/reflection sweeps remain in [historical study results](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-tta.md). + +The early sweep runners and chart generator are retired; replay that completed +study from [its pinned source](https://github.com/asgersvenning/mini_trainer/tree/b631c52c74b5bae2bd1d3addc517af2095ef7f7b/dev/releases/mambo_v3). +The composed-study collectors and current release report generators remain maintained. From bfd54265f20e5c9f2aaeee0f84d22b194c0489ae Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:04:30 +0200 Subject: [PATCH 114/221] docs: consolidate release maintenance and provenance guide --- dev/releases/mambo_v3/README.md | 232 ++++++++++++-------------------- 1 file changed, 83 insertions(+), 149 deletions(-) diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index 0b70d3b..283a211 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -1,19 +1,25 @@ -# MAMBO_v3 release inputs +# MAMBO_v3 release maintenance -Input audit performed 23 September 2026. This page owns source identities, legacy -contracts and geographic reconstruction; [final qualification](final-qualification.md) -records the completed release preparation. Models, predictions and raw data remain -outside Git in ignored storage. +Start with the [deployment README](../../../deployment/README.md) for integration. +This directory maintains release inputs, qualification and reproducible evaluation. +Models, predictions and raw datasets stay outside Git. + +| Task | Maintained source | +| --- | --- | +| Build and qualify release artifacts | [Deployment qualification](deployment-qualification.md); [final qualification](final-qualification.md) records the completed candidate | +| Prepare publication | [Publication checklist](publication.md) | +| Evaluate or regenerate reports | [Evaluation workflow](evaluation.md), [UCloud runbook](ucloud-release.md), [evidence policy](evidence-policy.md) | +| Inspect or revise geographic presets | [Catalogue](../../../docs/model-presets.md), [definitions](preset-definitions.toml), [generated hashes/counts](preset-manifest.toml) | +| Integrate or migrate from V2 | [Integration details](../../../docs/mambo-integration.md) | +| Verify model identity and training provenance | [Inventory](inventory.toml), [model provenance](model-provenance.toml), audit below | ## Reproduce the audit `inventory.toml` pins 44 downloaded files by URL, relative path, size and SHA-256. -Download each URL to its corresponding path beneath an evidence root. Keep both -ONNX graphs with their adjacent `model.onnx.data`; a graph alone is incomplete. -Production files were checked against the published checksums; historical MAMBO -weights have newly observed hashes, not independent historical signatures. -`metadata_readback` identifies metadata hashed during this retrieval. These pins -establish reproducible inputs, not publisher authenticity. +Download each to its corresponding path beneath an evidence root. Keep both ONNX +graphs beside their `model.onnx.data` files. Production hashes were checked against +published checksums; legacy weight hashes were observed during retrieval, not +independently authenticated. `metadata_readback` identifies metadata hashed then. From the repository root, using the existing environment without synchronization: @@ -24,164 +30,92 @@ From the repository root, using the existing environment without synchronization bash dev/check.sh test tests/releases/test_mambo_inventory.py ``` -The audit checks every pinned file, safely reads checkpoint state on CPU, compares -all three ordered class mappings and both parent maps, recovers the region masks -from legacy weights and checks the committed lists. The standard ONNX manifest -must agree with the candidate mapping. It does not execute ONNX or build a model. -The legacy fixture extracts only the prediction container classes from the pinned -Git commit; it needs local Git history, but no old dependencies or backbone download. +The audit verifies pinned files, safely reads checkpoint state on CPU, compares +ordered class/parent mappings, recovers legacy masks and checks the ONNX manifest. +It does not execute models. The container fixture needs the pinned local Git +history, but neither old dependencies nor a backbone download. -Observed result: 44 files verified; all legacy/candidate class and parent mappings -identical; 12,632 species, 4,476 genera, 104 families. No additions, removals or -index remappings. This does not imply equal predictions: the backbone changes from -BioCLIP-2 to EfficientNetV2-S and preprocessing changes from 512 to 384 pixels. -The old files contain classifier weights and require a separately available -backbone; they are not standalone offline baseline bundles. +The September 23 audit verified all 44 files and identical V2/V3 mappings: +12,632 species, 4,476 genera and 104 families, with no index remapping. Predictions +are not equivalent: BioCLIP-2 becomes EfficientNetV2-S and input size changes +from 512 to 384. Legacy classifier weights need a separately available backbone. +Best epoch 30 is verified; the exact training revision and original +`initial_seed42.pt` hash remain unavailable. [Final qualification](final-qualification.md) +distinguishes the recovered initialization recipe from verified starting bytes. ## Regional scope and construction -The release-facing [preset catalogue](../../../docs/model-presets.md) defines every -preset, its geographic filter, species count and evidence threshold. It includes -Australia (including Tasmania), Tasmania-only, the requested overlapping American, -Asian, African, Mediterranean and Arctic regions, plus Oceania, Southeast Asia, -East Asia and the Middle East. The northern-European scope lists ambiguous -historical additions in parentheses. - -Presets aim to avoid most geographically nonsensical predictions while allowing -species that **can be found** in a region. They do not describe natural/native -distributions or where a species should occur. Introduced species, migrants and -vagrants are eligible; no establishment-status filter is applied. Exclusion does -not prove absence. Lists inherit metadata coverage and errors, sampling and -taxonomy. Changing allowed classes changes score normalization; confidence is -conditional on the selected list. The reconstruction details below concern the -two unchanged legacy presets; new filters and thresholds are defined in -[preset-definitions.toml](preset-definitions.toml). - -New V3 presets require **at least 3 regional metadata rows and at least -25 global rows**. Both minima are inclusive. This replaces the initial one-row -draft and is the selected V3 policy. The snapshot already -has at least 50 global rows for every model species, so the global gate currently -excludes nothing further. Australia changes from 1,907 to 1,874 species, Tasmania -from 401 to 274, and Japan from 974 to 697. V3 preserves these evaluated memberships; -counting distinct GBIF observations would require a future preset revision. Multiple -image rows are not necessarily independent occurrence evidence. A local Tasmania check gives 274 species with either three -rows or three distinct `gbifID` values. Both legacy lists remain unchanged. - -| Preset | Species | Construction and evidence | Limits | -| --- | ---: | --- | --- | -| `full` | 12,632 | Every species in the pinned model mapping | Global training vocabulary, not every Lepidoptera species | -| `europe` | 3,014 | Filter the pinned metadata by `continent == "EUROPE"`, count rows per `speciesKey`, retain counts **> 25**. Exact membership and retained count-table match. | Uses the metadata's continent assignment, not a union of entire countries. The upstream method that assigned continents is not established here. | -| `north_europe` | 1,977 | Filter `countryCode` to `DE DK EE FI LT LV NL NO PL SE`, count rows per `speciesKey`, retain counts **> 25**. Exact membership match to the weights and tagged `data/reduced.txt`. | This reconstructs the list but does not uniquely establish the original country expression: several additional countries leave membership unchanged. | - -The ordered files in `presets/` contain GBIF species IDs, one per line. Their -source-weight paths and hashes are in `inventory.toml`. Extraction uses each -weight's `cls2idx` and active indices, preserving model order rather than sorting -IDs or inferring a list from the new evaluation data. Keep these release-versioned -memberships fixed for backwards compatibility. Custom lists should resolve IDs -explicitly and report missing/duplicate IDs and excluded truth labels. +The [preset catalogue](../../../docs/model-presets.md) owns current geographic +scope, thresholds and membership rules. The details here explain how the unchanged +legacy lists were recovered; [construction.toml](construction.toml) pins the source +Parquet hash, filters and totals. Presets follow model order from each weight's +`cls2idx` and active indices, not sorted GBIF IDs. ### Reproduce construction from metadata -The user-identified Parquet is available locally even though the full image dataset -is not. [construction.toml](construction.toml) pins its SHA-256, byte size, geography -filters, counting rule and expected totals. Using the existing environment with -PyArrow available, run from the repository root: +With PyArrow installed in the existing environment, run: ```sh .venv/bin/python -m dev.releases.mambo_v3.reconstruct_presets \ examples/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet ``` -This reads only the geography/species columns after verifying the source hash and -compares reconstructed membership to the frozen lists. It does not alter their -model ordering. Count **metadata rows**, with no additional occurrence/image -deduplication, across **all existing splits `0`–`9`**, including held-out records. -Thus the historical README's phrase "training data" means the overall metadata -corpus for this reconstruction, not just the training partition. Preserve that -disclosure when reporting held-out metrics; the historical vocabulary selection -used those rows too. The script neither changes nor regenerates splits. - -Europe selects 2,079,617 rows covering 3,132 species before the strict threshold. -All 3,132 per-species counts exactly match `tmp/europe_training_data.csv`; the -minimum included count is 26. That retained table's SHA-256 is -`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`. -The reconstruction no longer depends on those unversioned CSV/list files. -The world count table also matches all 12,632 species' metadata row counts. - -The Europe filter includes records coded `TR` (743), `GE` (361), `AZ` (242), -`RU` (110,277) and `KZ` (13) **only when their continent field is `EUROPE`**; -it does not include all records from Turkey or the Caucasus. No Armenian records -pass this filter. Country-only selection cannot reproduce the preset using the -same >25-row rule: species `11470119` has 595 rows, all `ES`, and is included; -species `5145842` has 194 `ES` rows and is excluded (192 are `AFRICA`, two have -blank continent). Including all Spain would therefore force an unwanted species. - -The northern reconstruction uses **Germany, Denmark, Estonia, Finland, Lithuania, -Latvia, Netherlands, Norway, Poland and Sweden**. These select 768,497 rows and -2,291 species before thresholding. Removing any one of those ten countries -changes membership. Adding the **UK (`GB`) adds 29 species** absent from the -frozen list. Adding Ireland (`IE`), Iceland (`IS`), Åland (`AX`), Faroe Islands -(`FO`), Guernsey (`GG`), Isle of Man (`IM`), Jersey (`JE`) and Svalbard/Jan Mayen -(`SJ`), individually or all together, changes no selected species. Consequently -the final list cannot tell us whether Ireland or Iceland was originally included. -These are tested equivalent additions, not an exhaustive enumeration of all -possible filters. No original generation script was recovered. - -The source Parquet hash identifies the exact taxonomy/metadata snapshot used for -reproduction; it does not establish the original GBIF taxonomy retrieval date or -the upstream continent-assignment geometry. Keep those remaining provenance -limits explicit. Neither preset is a comprehensive regional checklist. -A future regenerated list should have its own revision and added/removed-ID report; -it must not silently replace these compatibility presets. Deployment documentation -and API preset metadata should expose count, membership, rule and provenance gaps. +The script verifies the Parquet hash and frozen memberships without changing +ordering or splits. Counts use metadata rows, without additional deduplication, +across **all existing splits 0–9, including held-out records**. Historical vocabulary +selection therefore used test rows too; retain this disclosure in evaluation. + +| Legacy preset | Reconstruction | Evidence / limit | +| --- | --- | --- | +| `europe` | `continent == "EUROPE"`; species with >25 rows | 3,014 species; membership and all 3,132 pre-threshold species counts match the retained historical table. | +| `north_europe` | `countryCode` in `DE DK EE FI LT LV NL NO PL SE`; species with >25 rows | 1,977 species; exact membership match, but the original country expression is not uniquely recoverable. | + +Europe cannot be reproduced as a union of entire countries with the same threshold. +For example, species `11470119` is included with 595 Spanish rows, while `5145842` +is excluded despite 194 Spanish rows (192 labelled AFRICA, two without continent). +Transcontinental countries contribute only their EUROPE-labelled records. The +original continent-assignment geometry and taxonomy retrieval date are unknown. + +For northern Europe, removing any of the ten countries changes membership; adding +the UK adds 29 unwanted species. Adding any or all `IE IS AX FO GG IM JE SJ` changes +nothing. These are tested equivalent additions, not a recovered original script or +an exhaustive list of possible filters. The catalogue marks this ambiguity. + +The historical Europe count-table SHA-256 is +`47e817d3e5009f929df4a8bc7404e4434c98232806596bc1585dd8c2b88e37d5`; +reconstruction no longer depends on that unversioned table. Published memberships +remain fixed; intentional changes require a new revision and added/removed-ID report. ## Compatibility boundary -Pinned baseline: MAMBO_v2, commit -`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, plus the observed weight hashes. -The tagged `mini_trainer/deploy.py`, `mini_trainer/classifier.py` and -`mini_trainer/hierarchical/model.py` establish these expectations: +The baseline is MAMBO_v2 commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d` plus +observed weight hashes. [compatibility.toml](compatibility.toml) captures its top-1 +container and archived CSV columns. The fixture qualifies that container only; +current input, masking, CLI and backend coverage is described in +[deployment qualification](deployment-qualification.md). -| Surface | Preserve / qualify | -| --- | --- | -| Python entry | `mini_trainer.deploy.Predictor(device="cuda", model=None, weights=None, class_mask=None, **kwargs)`; Europe default; `model` and `weights` mutually exclusive | -| Calls | `predict(x, **kwargs)` and `__call__`; path, NumPy, tensor or iterable; CHW/BCHW and grayscale handling; iterable stacked as one batch historically | -| Masks | Species ID lists or index masks; `-1` clears the mask; region selection is distinct from class ordering | -| Result | Iterable/indexable hierarchical prediction; top-1 item has native tuples `label`, `confidence`, `index`, ordered species/genus/family; `to_dict()` returns a list of dictionaries | -| Embeddings | `predict_with_embeddings` returns `(prediction, embeddings)`; new embedding dimension is model-specific, not BioCLIP-compatible | -| CLI | Restore `mambo_predict`, `--model`/`-M`, explicit weights and result-name convention; test parsing and exported rows before claiming compatibility | -| Top-k | Legacy ranks are independently ranked; they are not necessarily one ancestral path. `topk>1` warns as experimental; exceeding the smallest rank width raises. Legacy nested-result serialization is incomplete. Define supported behavior explicitly rather than perpetuating defects. | - -`compatibility.toml` contains a small captured top-1 fixture and archived evaluation -CSV columns. The executable fixture checks the original container behavior only. -Wrapper input/error, CLI, masking and both new backend integration checks are now -implemented; see [deployment qualification](deployment-qualification.md). The -archived CSV schema alone is not proof of complete legacy CLI equivalence. -The legacy probability-detection heuristic uses a batch-wide sum; do not enshrine -that defect as a new probability contract. Any shared core correction belongs on a -feature/master branch before merge into the release branch. +Keep these historical distinctions when interpreting compatibility: + +- V2 defaulted to Europe; portable V3 defaults to global. Embeddings and predictions + change with the model; [migration guidance](../../../docs/mambo-integration.md#moving-from-v2) + owns current calling conventions and output differences. +- Legacy ranks were independently ranked, not necessarily one ancestral path. + Top-k beyond one was experimental and nested-result serialization incomplete. +- The legacy probability heuristic used a batch-wide sum. This defect and an + archived CSV schema are not sufficient grounds for promising score or CLI parity. ## Evaluation handoff -Local Flemming has **58,640 images / 522 species**. Species-directory and filename -identities match every archived expert species-level prediction, with no missing -or extra JPEGs. This is membership evidence, not image-content checksum equality. -Both regional presets exclude 16 truth species / 8,042 images here. Preserve them -in evaluation and report all-image and in-vocabulary metrics separately; do not -silently drop unknown labels to improve accuracy. +Flemming contains 58,640 images / 522 species. Its species-directory and filename +identities match the archived expert predictions; this is membership evidence, +not image-content checksum equality. Both legacy regional lists exclude 16 truth +species / 8,042 images. Keep those rows visible in evaluation. -The original 632,913-image global-lepi test split was subsequently evaluated on -UCloud without resplitting. Preserve source identities when joining staged filenames; -numeric staging names are not original sample IDs. The full images remain on UCloud, -while retained prediction/confidence archives support local metric recomputation. +The 632,913-image global-lepi test split was evaluated on UCloud without resplitting. +Preserve original sample identities when joining numeric staging filenames. +Retained prediction/confidence archives support metric recomputation without images. Current results: [Flemming](../../../docs/mambo-deployment-evidence.md), -[in-domain](../../../docs/mambo-indomain-evidence.md) and -[HPC timings](../../../docs/mambo-hpc-evidence.md). Procedures and measurement -boundaries live in [evaluation.md](evaluation.md), [ucloud-release.md](ucloud-release.md) -and [evidence-policy.md](evidence-policy.md). Historical first-pass reports are not -the current default-TTA comparison. - -Best epoch 30 is verified. The exact training revision and original -`initial_seed42.pt` hash remain unavailable; [final qualification](final-qualification.md) -distinguishes recovered initialization recipe from verified starting bytes. +[in-domain](../../../docs/mambo-indomain-evidence.md), [HPC timings](../../../docs/mambo-hpc-evidence.md). +Use the workflows linked above; historical first-pass reports do not describe the +current default-TTA comparison. From efb6143cfab5ca75e7048ab57d555a050a0eaed8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:06:44 +0200 Subject: [PATCH 115/221] docs: separate qualification procedure from historical run detail --- .../mambo_v3/deployment-qualification.md | 115 +++++++----------- 1 file changed, 41 insertions(+), 74 deletions(-) diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index f952f76..07c9c5a 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -1,8 +1,8 @@ # Deployment qualification and report reproduction Current installed-package evidence is in [final qualification](final-qualification.md). -This page retains the build/check commands, TTA report reproduction and the scope -of earlier adapter checks. Consumer instructions are in +Use this page to reproduce runtime contracts and the promoted Flemming reports. +Consumer installation and configuration belong in [deployment/README.md](../../../deployment/README.md). ## Reproduce @@ -21,10 +21,10 @@ an existing destination. Model files stay outside Git. The bundle includes both ONNX graphs and their external data, native weights, one ordered vocabulary, parent mappings, preprocessing, preset lists/scopes, provenance and hashes. -In a disposable environment, install the deployment wheel with `[onnx]`. -For native qualification also install the matching training wheel with the -chosen CPU/CUDA dependencies. For GPU ONNX use `onnxruntime-gpu` instead of the -CPU runtime, and matching CUDA/cuDNN libraries. Then run: +Use disposable environments following the [runtime installation guide](../../../docs/mambo-integration.md#runtime-installation). +The default check below runs both backends, so install the matching training wheel +and chosen PyTorch backend too. Use `--backends onnx` for an ONNX-only check. +Do not install CPU and GPU ONNX Runtime packages together. ```sh python dev/releases/mambo_v3/qualify_bundle.py /path/to/bundle /path/to/flemming --device cpu --output cpu.json @@ -48,44 +48,23 @@ working directory, blocks Python socket connections, runs both API modes and the CLI, and verifies bundle contents remain unchanged. This is not an OS-level network isolation test; platform-native runtime networking is outside that guard. -## What the early checks established - -The September 23 adapter check used four deterministic images on CPU and an -RTX 3080 Ti Laptop. Both runtimes agreed on species/genus/family top-1 for -full/Europe/custom lists, with and without embeddings. Vectors were finite unit -1280-dimensional embeddings, unchanged by class masks. This qualifies execution -contracts, not representative accuracy or downstream embedding quality. - -The independent ONNX-only CPU install used Python 3.13.7, ORT 1.30.0, NumPy 2.5.3 -and Pillow 12.3.0. CPU backend comparison used PyTorch 2.12.0, ORT 1.29.0, -NumPy 2.4.6 and Pillow 12.2.0; CUDA used PyTorch cu130 and ORT GPU 1.30.0, -reusing existing NVIDIA libraries. It was not a clean GPU dependency-resolution -test. Local reports remain under -`local-evidence/mambo-v3/*deployment-qualification.json` and -`portable-install-qualification.json`. - -The original torchvision/NumPy resize comparison differed by at most one uint8 -level at rounding boundaries. Later full-dataset, installed-artifact and TTA -checks supersede this small initial qualification; see -[local evaluation](../../../docs/mambo-v3-evaluation.md), -[in-domain evidence](../../../docs/mambo-indomain-evidence.md) and -[final qualification](final-qualification.md). -The latter owns current package identities, notices and remaining limitations; -early checks do not certify the final wheels or untested operating systems. - -## Enabled-TTA promotion — 2026-09-24 - -The deployment default when TTA is requested is now `rotation30_pad25_3`: original, -−30° with 25% edge padding, +30° with 25% edge padding. Rotation expands the canvas -and uses bilinear interpolation and RGB (124,116,104) corner fill, exactly as in -the full-data study. TTA stays off when omitted. Explicit `padded_scale` is retained; -`wide_rotation_mixed_padding_5` is also available as an opt-in named profile. - -The [current deployment comparison](../../../deployment/README.md#release-comparison) -uses the full-study predictions, with macro metrics computed by pinned mini_metrics. -Support intersections are recomputed across the five displayed pipelines; do not -copy the eleven-pipeline exploratory tail scores into that table. Both threshold -settings use the same 52,788 reporting images, with 5,852 calibration images. +These four-image checks establish execution contracts, not representative accuracy, +embedding quality or broad platform support. Add `--tta rotation30_pad25_3` to +both runners to check the released enabled-TTA default; omission checks TTA off. +[Final qualification](final-qualification.md) owns installed artifact identities, +environments and results, including the promoted TTA checks. + +## Reproduce the promoted Flemming report + +Use the pinned [metric environment](evaluation.md#metrics) for quality processing +and a separately prepared runtime for timing. The commands below show the paths +used in the retained campaign; substitute your environment, dataset and bundle +paths. Run from the repository root, with fresh output directories. + +The five displayed pipelines need their own shared support intersection; do not +copy the eleven-pipeline exploratory tail scores. Both confidence settings use +the same 52,788 reporting images, with 5,852 separate calibration images. Full +metric semantics and results are in [deployment evidence](../../../docs/mambo-deployment-evidence.md). Reproduce the current quality tables and figure: @@ -119,33 +98,21 @@ CUDA_VISIBLE_DEVICES=0 /tmp/mambo-deploy-qualification-gpu/bin/python \ --render-speed /tmp/promoted-report/mambo-promoted-speed.json --output /tmp/promoted-report ``` -These commands use three fresh processes per backend/device, seven observations, -CPU batches 1/8 and GPU batches 1/8/32, without concurrent model workloads. They -reuse earlier V2 and single-view V3 timings; temperature/power differences between -campaigns remain a limitation. Timing does not reuse full-evaluation wall time. -Resource records retain host peak RSS. New runs cover northern Europe only; -earlier resource sweeps also covered other presets, so RSS is descriptive. - -The promoted transforms matched the full-study transforms byte-for-byte. -The installed ONNX-only wheel passed prediction/embedding API and CLI with TTA -against a relocated read-only bundle, Python socket calls blocked and unchanged -model hashes (`local-evidence/mambo-promoted-portable.json`). Python 3.14 was not -qualified in that offline environment. Timing observations and input hashes remain -in `docs/assets/mambo-promoted-speed.json`; current results are linked from the -deployment README rather than repeated here. - -## CUDA optimization compatibility probe — 2026-09-24 - -Each CUDA session now executes a synthetic batch-one input before its first user -prediction. Kernel-image/device-function incompatibility retries with ORT graph -optimizations disabled; no CPU-only fallback or retry of unrelated errors occurs. -The selected profile and initialization/probe timings are retained in reports. -A batch-one check does not establish every batch-dependent execution path. - -On the RTX 3080 Ti Laptop with ORT GPU 1.30.0, both optimized graphs ran, -including TTA and embeddings. Injecting an initial compatibility error exercised -real unoptimized CUDA recovery for both graphs. This qualified recovery mechanics, -not the B200 failure: there, the same wheel also failed an unfused standalone -Sigmoid. The [UCloud runbook](ucloud-release.md) records the separately qualified -ORT build used for that environment. Disabling graph optimizations is not a -general runtime/device compatibility fix. +The timing runner uses three fresh processes per backend/device, seven observations, +CPU batches 1/8 and GPU batches 1/8/32. Do not overlap model workloads. The report +combines these northern-Europe TTA timings with retained V2 and single-view V3 +measurements; campaign conditions can differ. RSS is a process high-water mark, +not per-request memory. [Evaluation](evaluation.md#timing-and-summary) defines the +measurement boundaries; [HPC evidence](../../../docs/mambo-hpc-evidence.md) owns +the later B200 measurements. + +## CUDA compatibility boundary + +The [integration guide](../../../docs/mambo-integration.md#runtime-installation) +describes the synthetic first-use probe and checked retry without graph optimizations. +On the RTX 3080 Ti Laptop with ORT GPU 1.30.0, both optimized graphs ran; +injecting a compatibility error exercised real unoptimized CUDA recovery for both. +That verifies recovery mechanics, not every batch-dependent path or GPU runtime. +On B200, that wheel also failed an unfused standalone Sigmoid: disabling graph +optimizations cannot repair missing device kernels. The [UCloud runbook](ucloud-release.md) +records the separately qualified runtime build. From b8d0f49be40c64bc1b06e4059e05ff22f4e65398 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:09:47 +0200 Subject: [PATCH 116/221] test: consolidate validation cases and decouple campaign counts --- tests/benchmarks/test_benchmark_synthetic.py | 59 ++++++-------------- tests/benchmarks/test_ucloud_comparison.py | 7 ++- 2 files changed, 20 insertions(+), 46 deletions(-) diff --git a/tests/benchmarks/test_benchmark_synthetic.py b/tests/benchmarks/test_benchmark_synthetic.py index 7f72b05..7bc20be 100644 --- a/tests/benchmarks/test_benchmark_synthetic.py +++ b/tests/benchmarks/test_benchmark_synthetic.py @@ -1,6 +1,7 @@ import csv import numpy as np +import pytest from PIL import Image from dev.benchmarks.data.synthetic import generate, oracle @@ -57,7 +58,6 @@ def test_synthetic_training_matches_oracle_and_repeats(tmp_path): def test_requested_gpu_profile_does_not_fall_back_to_cpu(tmp_path, monkeypatch): - import pytest import torch from dev.benchmarks.training.run import run @@ -72,7 +72,6 @@ def test_cli_retains_failure_report(tmp_path, monkeypatch): import json import sys - import pytest import torch from dev.benchmarks.training.run import main @@ -110,8 +109,6 @@ def test_cli_retains_failure_report(tmp_path, monkeypatch): def test_qt_profile_requires_cuda_before_creating_output(tmp_path): - import pytest - from dev.benchmarks.training.run import run with pytest.raises(ValueError, match="require CUDA"): @@ -119,46 +116,22 @@ def test_qt_profile_requires_cuda_before_creating_output(tmp_path): assert not (tmp_path / "qt").exists() -def test_compile_mode_requires_compilation_before_creating_outputs(tmp_path): - import pytest - +@pytest.mark.parametrize( + "options,error", + [ + ({"compile_mode": "reduce-overhead"}, "requires compile=True"), + ({"compile_mode": "invalid"}, "requires compile=True"), + ({"compile": True, "compile_mode": "invalid"}, "Unknown model compile mode"), + ({"optimizer_cudagraphs": True}, "requires compile_optimizer=True"), + ({"device": "cpu", "compile_optimizer": True, "optimizer_cudagraphs": True}, "require CUDA"), + ], +) +def test_invalid_compilation_fails_before_creating_outputs(tmp_path, options, error): from dev.benchmarks.training.run import run from mini_trainer.train import main - from mini_trainer.training.compilation import model_compile_options - - for mode in ("reduce-overhead", "invalid"): - with pytest.raises(ValueError, match="requires compile=True"): - run(tmp_path / "benchmark", compile_mode=mode) - with pytest.raises(ValueError, match="requires compile=True"): - main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), compile_mode=mode) - with pytest.raises(ValueError, match="Unknown model compile mode"): - model_compile_options(True, "invalid") - assert not list(tmp_path.iterdir()) - - -def test_optimizer_graphs_require_compilation_before_output(tmp_path): - import pytest - from dev.benchmarks.training.run import run - from mini_trainer.train import main - - with pytest.raises(ValueError, match="requires compile_optimizer=True"): - run(tmp_path / "benchmark", optimizer_cudagraphs=True) - with pytest.raises(ValueError, match="requires compile_optimizer=True"): - main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), optimizer_cudagraphs=True) - assert not list(tmp_path.iterdir()) - - -def test_optimizer_graphs_reject_cpu_before_output(tmp_path): - import pytest - - from dev.benchmarks.training.run import run - from mini_trainer.train import main - - with pytest.raises(ValueError, match="require CUDA"): - run(tmp_path / "benchmark", device="cpu", compile_optimizer=True, optimizer_cudagraphs=True) - with pytest.raises(ValueError, match="require CUDA"): - main( - input=str(tmp_path / "missing"), output=str(tmp_path / "train"), device="cpu", compile_optimizer=True, optimizer_cudagraphs=True - ) + with pytest.raises(ValueError, match=error): + run(tmp_path / "benchmark", **options) + with pytest.raises(ValueError, match=error): + main(input=str(tmp_path / "missing"), output=str(tmp_path / "train"), **options) assert not list(tmp_path.iterdir()) diff --git a/tests/benchmarks/test_ucloud_comparison.py b/tests/benchmarks/test_ucloud_comparison.py index 0aca648..a7edeb0 100644 --- a/tests/benchmarks/test_ucloud_comparison.py +++ b/tests/benchmarks/test_ucloud_comparison.py @@ -29,12 +29,13 @@ def config(tmp_path): @pytest.mark.parametrize("int8_variant", ["quant_int8", "quant_int8_combined"]) def test_launch_topology_and_paired_plan(harness, config, int8_variant): compare, _ = harness + config.update(gpus=4, global_batch_size=64, seeds=[3, 9], variants=["master_eager", "quant_eager", "quant_prefetch"]) compare.validate(config) runs = compare.plan(config) assert runs == compare.plan(config) - assert len(runs) == 18 - for seed in config["seeds"]: - assert sum(r["seed"] == seed for r in runs) == 6 + assert sorted((r["name"], r["seed"]) for r in runs) == sorted( + (f"{variant}_seed{seed}", seed) for seed in config["seeds"] for variant in config["variants"] + ) argv = compare.command(config, runs[0], Path(config["output"]) / "comparison.json") assert "--nproc-per-node=4" in argv assert argv[-3] == str(Path(config["output"]) / "comparison.json") From eb18707ed835f7c8f78ad0ba169e75bbdcc66963 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:13:37 +0200 Subject: [PATCH 117/221] docs: streamline DDP qualification and production handoff --- dev/ucloud/ddp.md | 319 +++++++++++++++++----------------------------- 1 file changed, 120 insertions(+), 199 deletions(-) diff --git a/dev/ucloud/ddp.md b/dev/ucloud/ddp.md index bbb177e..5a6c73d 100644 --- a/dev/ucloud/ddp.md +++ b/dev/ucloud/ddp.md @@ -1,29 +1,18 @@ # Four-GPU qualification and production handoff -Reusable procedure from the September training campaign. For its selected production -recipe, results and recovery lessons see the +This procedure uses the September campaign's pinned packages and four full B200s. +For measured results and next-run lessons see the [training post-mortem](../../docs/training-workflow-postmortem.md). +Select new package pins explicitly for a new campaign; qualification on this +profile does not establish other GPU topologies or full-dataset storage throughput. -Use one manually allocated UCloud node with **four full B200 GPUs**, the actual -Parquet and image storage, and internet access. `ddp.json` rejects devices below -140 GiB each, so this is not a continuation on the fractional-GPU job. +## Setup -The historical profile selects floating-point training on `quant`: FP16 AMP, model -compilation, figures, W&B, loss auditing and checkpoints. Optimizer compilation, -explicit CUDA prefetch, INT8 and EMA remain off. Qualification alone uses the -Python API. Production will use `mt_htrain` under `torchrun`. - -This campaign qualifies four ranks. It does not establish eight-rank scaling or -full-dataset I/O throughput. If eight GPUs become available later, qualify that -allocation separately. At the same per-GPU batch, four GPUs halve the global batch; -review the production batch and learning-rate schedule explicitly before training. - -## Setup and authentication - -Follow [the UCloud setup](README.md#fresh-job-setup) to install uv and clone the -reviewed harness revision. The profile's historical package pins are deliberate; -select new pins explicitly for a new campaign. Preparation hashes the harness, so -keep the checkout unchanged during a campaign. With a C++ compiler available: +Follow [UCloud setup](README.md#fresh-job-setup) to install uv and clone the reviewed +harness into the manually allocated node. Keep the checkout unchanged after +preparation hashes it. The node needs mounted images/Parquet, internet or prepared +caches, a C++ compiler, and four GPUs with at least 140 GiB each (`ddp.json` rejects +smaller devices). Launch one controller, not a second multi-task wrapper. ```bash cd /work/mini_trainer @@ -31,41 +20,41 @@ MT_TEMPLATE=dev/ucloud/ddp.json MT_CONFIG=/work/ddp-b32.json \ bash dev/ucloud/setup.sh \ /work/global_lepi/0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet -# Authenticate in the foreground before redirected workers start. +# Authenticate before redirected workers start; WANDB_ENTITY optionally selects a team. /work/venvs/mt-quant/bin/wandb login -# Optional: WANDB_ENTITY selects a team; otherwise use the authenticated default. export WANDB_PROJECT=mini-trainer-ddp nvidia-smi -L ``` -Authentication uses the existing W&B SDK, without a new login mechanism or -credentials in Git. Each trial uses one shared W&B run with rank labels and a -unique ID. Only rank zero uploads figures and controls the shared finish state. -See [W&B distributed logging](https://docs.wandb.ai/models/track/log/distributed-training). -The installed quant environment contains the pinned package and locked dependencies. +The profile enables FP16 AMP, model compilation, figures, W&B, finite-loss auditing +and checkpoints. Optimizer compilation, explicit CUDA prefetch, INT8 and EMA are +off. Each trial has one shared W&B run with rank labels; rank zero uploads figures +and finishes the run. Qualification uses the Python API; production uses `mt_htrain`. -## Baseline and batch sweep +## Baseline and resource selection -Preparation samples 32,768 training, 4,096 validation and 128 test images from the -**existing splits**, but builds the head from the **full source taxonomy**. It -preserves class order across trials. The subset is half the eight-GPU proposal, -keeping 256 training steps and 32 validation steps per rank at batch 32. -This tests production head/figure dimensions -without training on all six million rows. Read `prepare.log` for actual class -counts. The test split is reserved for later evaluation, not batch selection. +The [profile](ddp.json) samples 32,768 train / 4,096 validation / 128 test records +from their **existing splits**, with the **full source taxonomy** and fixed class +order. Test rows are reserved for later evaluation. This exercises full-head +training and diagnostics without scanning every image; short-run accuracy is not +a production selection criterion. -There is one **30-minute wall-clock budget** shared by baseline preparation and -all derived trials, including gaps between commands. Individual training workers -have a 600-second guard; initial preparation has a 900-second guard. Neither is -an expected duration. If the campaign expires, retain its results and review -before starting another qualification campaign in the same allocated job. -Figures and W&B stay enabled. Qualification deadlines stop child processes, not -the UCloud allocation. +| Control | Baseline / rule | +| --- | --- | +| Batch | 32 per GPU, 128 global; `scaling.py --batch` always means per GPU | +| Loader workers | 4 per rank; select using allocated CPU/RAM and observed loading latency | +| Epochs | 3 initially; derived trials plan at least 100 training steps after the first epoch | +| Shared deadline | 1,800 seconds from preparation, including operator gaps and derived trials | +| Child limits | Preparation 900 seconds; training 600 seconds; termination may add cleanup time | -Define this helper in the foreground terminal or tmux session: +These are limits, not ETAs or allocation extensions. Reserve time for restoration +and production; run only trials that change a decision. Derived trials reuse +verified preparation/starting weights and inherit the deadline. They need new +config/output paths; retain failed attempts instead of overwriting evidence. + +In the foreground terminal or tmux session, define: ```bash -cd /work/mini_trainer run_trial() { local cfg="$1" root rc=0 root=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["output"])' "$cfg") || return @@ -81,51 +70,59 @@ run_trial() { run_trial /work/ddp-b32.json ``` -The baseline is three epochs at 32 images per GPU (global batch 128), with four -loader workers per rank. Four GPUs are launched with `torchrun`, no Slurm. -Check all four ranks completed, losses passed, figures look correct in W&B, -and reserved GPU memory has headroom before increasing the batch: +Require four completed ranks, finite losses, correct W&B figures and memory +headroom. Then try a larger batch, using a fresh destination for each trial: ```bash python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-b64.json \ --output /work/results/global-lepi-ddp-4gpu-b64-1 --batch 64 run_trial /work/ddp-b64.json +``` + +Continue to 128 or 256 per GPU when memory and time justify it. Select warm +aggregate images/s at acceptable memory use (roughly 20% headroom); stop at OOM, +unstable losses/memory or no meaningful throughput gain. Global batch changes the +training recipe; learning rate is not automatically scaled. + +For a worker comparison, hold batch, sample and generated epoch horizon fixed. +Use a meaningful increase for the available resources: the production campaign +ultimately used 32 workers/rank, while storage probes favored much higher encoded +read concurrency. A DataLoader process and an outstanding file read are different +resources. A small cached subset cannot select production storage concurrency. -# Only after the 64/GPU result passes and has memory headroom: -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-b128.json \ - --output /work/results/global-lepi-ddp-4gpu-b128-1 --batch 128 -run_trial /work/ddp-b128.json +```bash +BATCH=64 # selected per-GPU batch +WORKERS=8 # candidate per-GPU worker count +python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-workers.json \ + --output /work/results/global-lepi-ddp-workers-1 --batch "$BATCH" --workers "$WORKERS" +run_trial /work/ddp-workers.json ``` -Derived trials reuse verified preparation and starting weights, and inherit the -original deadline. They do not scan/sample/build the taxonomy again. Do not edit -frozen configs or reuse a failed output directory. Stop increasing at an OOM, -failed loss check, unstable memory, or lack of throughput improvement. Consider -256/GPU only if 128/GPU still has substantial headroom and time remains. - -Select by **warm aggregate training images/second at an acceptable memory -footprint**, reserving roughly 20% GPU memory, rather than speed at fixed batch. -`scaling.py report` uses summed sample counts divided by the slowest rank's phase -time and excludes the first epoch, which includes cold compilation. It reports -peak reserved memory as a fraction of actual device capacity. W&B also records -`qualification/*` phase metrics; rank-level evidence remains in `phases-rank*.jsonl`. - -Loader wait measures host time obtaining batches, including worker startup, -loading and decoding; it is not a pure storage measurement and can overlap GPU -work. Compare it alongside throughput. If it is high across warm epochs, try -one matched trial with more loader workers instead of a broad matrix. The -repeated subset benefits from filesystem caches: these timings cannot certify -full-dataset distributed-I/O throughput for a 24-hour run. +### Interpret measurements + +- `scaling.py report` divides summed samples by the slowest rank's phase time, + excludes the first epoch (cold compilation), and reports warm-step sufficiency, + rank imbalance and peak reserved memory relative to device capacity. Failed or + incomplete runs are not qualified performance results. +- Trial generation can increase the epoch horizon: 256/GPU needs five epochs for + the warm-step target. This also changes the LR schedule; throughput trials are + not matched convergence comparisons. Restored trials keep their explicit horizon + and exclude their own first epoch from warm reporting. +- Loader wait includes worker startup, reading and decoding and can overlap GPU + work. `phases-rank*.jsonl` and `windows-rank*.jsonl` retain phase and 32-batch + windows, including partial final windows. Window-boundary CUDA synchronization + adds overhead; these are not pure storage timings. +- `components-rank*.jsonl` records host time for figures/checkpoints, including + logging costs. Figure time also appears inside validation time; do not add + overlapping measurements. Cached repeat epochs do not establish cold-file or + full-dataset throughput. ## Stability and checkpoint continuation -Reserve time for this gate instead of chasing every batch size. Set `BATCH` to -the selected **per-GPU** batch. Request a four-epoch scheduler horizon and preserve the generated horizon for -both the source and restored trial: +Use the selected `BATCH` and `WORKERS`. Preserve the **generated** scheduler horizon +for both source and restored trials; it may exceed the requested four epochs: ```bash -BATCH=64 # replace with the measured choice -WORKERS=4 # replace with the measured worker count python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-stability.json \ --output /work/results/global-lepi-ddp-4gpu-stability-1 --batch "$BATCH" --workers "$WORKERS" --epochs 4 run_trial /work/ddp-stability.json @@ -138,117 +135,50 @@ python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-restore.json \ run_trial /work/ddp-restore.json ``` -The restored run starts at epoch 2 (zero-based), trains the remaining epochs, -and uses a new output and W&B run. Each rank checks model, optimizer, scheduler -and scaler state against the source checkpoint **before any updates**. Require -four successful `restore-rank*.json` records, finite train/eval losses, stable -memory, and working figures/checkpoints after restoration. This tests state -restoration and continued execution, not bitwise reproduction of augmentation RNG. - -## Production handoff - -Keep qualification and production in the same allocated UCloud job, with the -qualified environment and warm caches. Do not apply automated benchmark -provisioning/cleanup to this allocation. Reserve time for qualification plus -production and checkpoint/finalization margin; check remaining lifetime before -launch and resolve any required extension while qualification runs. - -Prepare paths, full supplied splits/taxonomy, W&B authentication and the intended -learning-rate/epoch recipe in advance. Finalize batch/workers from measured -throughput and memory, not short qualification accuracy. Generate the reviewed -configuration and launch the public CLI using the commands below. Do not spend -the allocation finishing optional sweep points after a choice is supported. - -## Bounded resource-utilization decisions - -Run only the next informative trial; do not execute this as an unattended matrix. -Keep the initial 30-minute campaign and reserve time for checkpoint continuation. -A minimum campaign is baseline, one larger batch, one worker comparison, then -restoration. The time guards can expire before all gates finish; retain evidence -and review any additional campaign rather than silently extending its budget. - -Trial generation automatically raises the epoch count when needed to plan at least -100 training steps after the first epoch. At 256/GPU this subset requires five -rather than three epochs. `scaling.py report` exposes actual `warm_steps` and -`sufficient_warm_steps`; incomplete/failed runs are not performance-qualified merely -because their planned duration was sufficient. Changing the epoch horizon also -changes the learning-rate schedule, so these are throughput trials, not matched -convergence comparisons. - -After selecting a batch, hold batch, subset and epoch horizon fixed for a worker -comparison. Use the resource allocation and phase evidence to choose a meaningful -increase; the production campaign ultimately needed much higher I/O concurrency -than the initial 4–16 worker probes (see the post-mortem). A small cached subset -cannot select production storage concurrency by itself. +Restoration starts at zero-based epoch 2 with a new output/W&B run. Require four +successful `restore-rank*.json` records verifying model, optimizer, scheduler and +scaler **before updates**, then finite losses, stable memory and working figures +and checkpoints. This checks restoration and continued execution, not bitwise +reproduction of stochastic augmentation. Do not silently extend an expired +campaign budget to finish optional trials. -```bash -python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-workers.json \ - --output /work/results/global-lepi-ddp-workers-1 --batch "$BATCH" --workers "$WORKERS" -run_trial /work/ddp-workers.json -``` +## Separate broader storage pass -Use `--workers "$WORKERS"` for both stability and restoration trials once workers -are selected. Read the generated stability config's actual `epochs` and pass that -same value to the restore trial; automatic warm-step sizing may have increased it. -A restore run keeps its explicit horizon and excludes its own first epoch from warm -performance reporting because it starts a fresh compiled process. - -Reports retain per-rank phase records, training rank-time ratios, allocation peaks -and 32-batch timing windows (including a final partial window). Completed windows are also appended immediately -to `windows-rank*.jsonl` so a timeout retains them. Windows synchronize -CUDA at their boundaries, adding some overhead consistently across trials. They -measure rank-local elapsed time, not pure disk throughput. Figure and checkpoint -call durations are recorded separately in `components-rank*.jsonl`; figures are -also inside validation phase time, so do not add these overlapping totals. These -component measurements are host elapsed time and include backend logging costs. - -### Separate broader storage pass - -This is explicitly launched with its own budget. It requires fresh preparation, -selects 262,144 training / 8,192 validation / 128 test images, and excludes all image -identities in the baseline selection. The full taxonomy remains in use. The -baseline selection hash is checked, and `selection.json` records the new Parquet -hash and exclusion provenance; both are frozen in the preparation manifest. +This optional pass has its own 1,800-second budget and fresh preparation. It selects +262,144 train / 8,192 validation / 128 test images, excluding identities from the +baseline sample while retaining full taxonomy. The exclusion hash and selection +provenance are frozen. It runs one epoch, with the same 900-second preparation and +600-second worker guards: ```bash -BATCH=64 # selected batch -WORKERS=8 # selected worker count python3 dev/ucloud/scaling.py trial /work/ddp-b32.json /work/ddp-storage.json \ --output /work/results/global-lepi-ddp-4gpu-storage-1 \ --batch "$BATCH" --workers "$WORKERS" --storage run_trial /work/ddp-storage.json ``` -The worker runs one epoch with a 600-second guard; the separate campaign allows -1,800 seconds including preparation (up to 900 seconds) and operator gaps. These -are limits, not runtime estimates or UCloud allocation extensions. A timeout may -leave partial window/phase evidence and must not be reported as success. With only -one epoch there is no warm-epoch result: inspect successive windows and first-epoch -cost separately. Reads use actual dataset storage without explicit RAM caching; -do not flush shared caches. Disjoint images reduce reuse of the baseline sample -but do not establish cold-cache conditions or certify full-dataset production I/O. - -## Generate the production CLI configuration - -`production.py` verifies the starting weights and full-taxonomy preparation artifacts -and writes a new YAML file for the real `mt_htrain` CLI. It deliberately omits the -qualification `data_index`: the CLI parses the complete source Parquet and preserves -its supplied splits. The starting weights are the original pretrained initialization, -not a model trained on the qualification subset. Full metadata parsing/broadcast and -full validation have larger CPU/memory costs than qualification. - -Generate this only after the epoch horizon is reviewed from the broader storage -measurement and remaining allocation time. The generator requires an explicit epoch -count; it does not extrapolate the cached subset into a production schedule. It -retains the qualified LR 0.001, weight decay 0.01 and 0.25-epoch warmup; larger global -batches are not automatically assigned a linearly scaled learning rate. +There is no warm-epoch result for this pass: inspect successive windows and startup +separately. A timeout leaves partial evidence, not a successful run. Disjoint paths +reduce sample reuse but do not guarantee cold WEKA caches; never flush shared caches. + +## Generate and launch production + +Keep the qualified environment and allocation. Allow time for full metadata parsing, +validation, diagnostics, saving and finalization. Choose the full-data epoch/LR +schedule from storage evidence and remaining allocation time, not cached-subset +speed. Resolve any allocation extension before launch. + +`production.py` verifies preparation hashes and writes a new YAML for the public +CLI. It uses the **original pretrained initialization**, not subset-trained weights, +and omits the qualification `data_index` so the CLI parses the full Parquet with +its supplied splits/taxonomy. It retains LR 0.001, weight decay 0.01 and 0.25-epoch +warmup; no batch-dependent LR scaling is applied. ```bash -# Set these to the final measured/reviewed choices before running this block. : "${BATCH:?selected per-GPU batch}" : "${WORKERS:?selected per-GPU workers}" : "${EPOCHS:?reviewed full-data epoch horizon}" -PRODUCTION_OUTPUT=/work/results # user-confirmed persistent storage for this job +PRODUCTION_OUTPUT=/work/results /work/venvs/mt-quant/bin/python dev/ucloud/production.py \ /work/results/global-lepi-ddp-4gpu-b32-1 /work/production.yaml \ @@ -256,12 +186,10 @@ PRODUCTION_OUTPUT=/work/results # user-confirmed persistent storage for this jo --batch "$BATCH" --workers "$WORKERS" --epochs "$EPOCHS" ``` -Before launch, verify the generated YAML, available storage and the installed package -pin against the successful qualification. Keep the same four GPUs and environment. -The W&B project and shared run identity are set explicitly in YAML; `--wandb` is still -required to enable the backend. Also pass `--compile` explicitly: the pinned CLI -parser otherwise overrides YAML compilation with its false flag default. -No UCloud credentials are involved. +Review the YAML, persistent storage and installed pin against qualification. Keep +the same four GPUs; the generator rejects other topologies. Pass `--wandb` to enable +the configured backend and `--compile` because this pinned parser's false flag +default otherwise overrides YAML. Run in tmux and retain stdout/stderr: ```bash export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 TORCHINDUCTOR_COMPILE_THREADS=1 @@ -272,23 +200,16 @@ export TORCH_HOME=/work/.cache/torch /work/venvs/mt-quant/bin/mt_htrain --config /work/production.yaml --wandb --compile ``` -Run in tmux and retain stdout/stderr. The pinned CLI writes `checkpoint_last.pth` -after every completed epoch, `best.pt` after improvements, and numbered checkpoints -every five epochs (zero-based 0, 5, 10, ...). These writes are not guaranteed atomic: -if expiry interrupts a write, retain a previous intact numbered checkpoint. The -qualification harness forces more frequent numbered checkpoints; that override does -not carry over to the CLI. Do not assume a final `last.pt` exists after interruption. -The best score on resume is not persisted by the current training loop; archive prior -best artifacts before any separately reviewed resume into an existing output. - -The CLI does not inherit qualification-only finite-loss auditing or timing wrappers. -Inspect the epoch summary and checkpoints during production; the full-dataset run -has no harness wall-time guard and stops at its configured epoch horizon or when the -job/process is terminated. Evaluation/export are separate post-training activities. - -For held-out prediction after training, use the installed `mt_hpredict` CLI. -Pass completed prediction CSVs to the pinned `mini_metrics` package; the -[release evaluation runbook](../releases/mambo_v3/evaluation.md#metrics) documents -that metric environment. Export follows the [ONNX guide](../../docs/onnx.md). -Preserve class order, score semantics and preprocessing; a later master-versus-quant -training comparison remains a separate experiment. +The CLI does not inherit qualification-only finite-loss auditing, timing wrappers +or wall-time guards. Inspect epoch summaries/checkpoints during production. The +pinned CLI writes `checkpoint_last.pth` each completed epoch, `best.pt` after +improvements, and numbered checkpoints every five epochs (zero-based 0, 5, 10, …). +The harness's more frequent checkpoint override does not carry over. Writes are +not guaranteed atomic: retain an intact earlier checkpoint if expiry interrupts a +write, and do not assume `last.pt` exists. Best score is not persisted on resume; +archive previous best artifacts before resuming into an existing output. + +Held-out prediction uses `mt_hpredict`; pass its CSVs to the pinned +[mini_metrics environment](../releases/mambo_v3/evaluation.md#metrics). Follow the +[ONNX guide](../../docs/onnx.md) for export, preserving class order, preprocessing +and score semantics. Evaluation/export remain separate from training. From 19d37aca9a19bb4841eae9e12671f0511e475684 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 01:15:10 +0200 Subject: [PATCH 118/221] docs: simplify runnable uv installation instructions --- README.md | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 2e711fc..3eeca11 100644 --- a/README.md +++ b/README.md @@ -19,46 +19,42 @@ All code in `mini_trainer` should follow the following core principles: * All hyperparameters and system configuration should have smart defaults that are as general as possible * All functionality should be extendable to custom model architectures, loss functions, training regimes, data formats etc. -# Installation +## Installation -We recommend using `uv` for package and environment management. +Use [uv](https://docs.astral.sh/uv/getting-started/installation/) for environment +and package management. Choose a published package or a source checkout. -> See [Install uv](https://docs.astral.sh/uv/getting-started/installation/) for instructions. - -## PyPi +### PyPI ```bash -# Recommended installation (includes logging, visualization, and optional utilities) +uv venv --python 3.12 +source .venv/bin/activate uv pip install "mini_trainer[recommended]" --torch-backend=auto -# or standard pip -pip install "mini_trainer[recommended]" - -# Installation with all features (timm, transformers, BioCLIP, etc.) -uv pip install "mini_trainer[all]" --torch-backend=auto -# or standard pip -pip install "mini_trainer[all]" - -# Minimal installation (core training & inference loop only) -uv pip install mini_trainer --torch-backend=auto -# or standard pip -pip install mini_trainer ``` -## Local Installation +| Package choice | Includes | +| --- | --- | +| `mini_trainer` | Core training and inference | +| `mini_trainer[recommended]` | Core plus logging, visualization and optional utilities | +| `mini_trainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | -```bash -git clone ssh://git@github.com:asgersvenning/mini_trainer.git -cd mini_trainer +Substitute the desired package in the install command. Standard `pip install` also +works; select its PyTorch CPU/CUDA installation separately for your environment. -# Sync with recommended extras: -uv sync --extra recommended --extra [cpu/cu126/cu130/cu132] +### Local installation -# Or sync with all features (timm, transformers, BioCLIP): -uv sync --extra all --extra [cpu/cu126/cu130/cu132] +Choose one backend: `cpu`, `cu126`, `cu130` or `cu132`. The example selects CUDA 13.0; +change `TORCH_BACKEND` to match your intended environment before synchronizing. +```bash +git clone https://github.com/asgersvenning/mini_trainer.git +cd mini_trainer +TORCH_BACKEND=cu130 +uv sync --extra recommended --extra "$TORCH_BACKEND" source .venv/bin/activate ``` +Replace `recommended` with `all` for the additional backends/export tools above. Activate the environment, use its executables directly, or use `uv run --no-sync`. An implicit sync can replace the deliberately selected PyTorch backend. Select the backend explicitly whenever installing or synchronizing dependencies. From 595582c212e7f248b400f7a782857bc5bdfe5111 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 10:49:05 +0200 Subject: [PATCH 119/221] refactor: simplify utility annotation dispatch and test ownership --- mini_trainer/utils/_concurrent/threading.py | 24 ++++--------------- mini_trainer/utils/_core/misc.py | 6 +---- .../test_init.py => utils/test_core.py} | 17 +++++++++++++ 3 files changed, 23 insertions(+), 24 deletions(-) rename tests/{modeling/test_init.py => utils/test_core.py} (78%) diff --git a/mini_trainer/utils/_concurrent/threading.py b/mini_trainer/utils/_concurrent/threading.py index 91af8b7..310bdb8 100644 --- a/mini_trainer/utils/_concurrent/threading.py +++ b/mini_trainer/utils/_concurrent/threading.py @@ -2,15 +2,13 @@ import types from collections.abc import Callable, Iterable from functools import wraps -from typing import Annotated, Any, Concatenate, ParamSpec, TypeVar, cast, get_args, get_origin, get_type_hints, overload +from typing import Annotated, Any, Concatenate, ParamSpec, Union, cast, get_args, get_origin, get_type_hints, overload from tqdm.auto import tqdm from tqdm.contrib.concurrent import thread_map as _thread_map from mini_trainer import get_logger -X = TypeVar("X") # input value -R = TypeVar("R") # return value P = ParamSpec("P") @@ -27,22 +25,10 @@ def strip_annotated(t): t = get_args(t)[0] return t - def base(t): - t = strip_annotated(t) - o = get_origin(t) - return o or t - - def flatten_union(t): - t = strip_annotated(t) - o = get_origin(t) - if o in (types.UnionType, getattr(types, "NoneType", type(None)), None): - pass - if o is types.UnionType or o is getattr(__import__("typing"), "Union"): - return [base(x) for x in get_args(t)] - return [base(t)] - - out = flatten_union(ann) - return list(dict.fromkeys(out)) + ann = strip_annotated(ann) + members = get_args(ann) if get_origin(ann) in (types.UnionType, Union) else (ann,) + bases = (get_origin(t) or t for t in map(strip_annotated, members)) + return list(dict.fromkeys(bases)) def thread_map[X, R](func: Callable[[X], R], it: Iterable[X], **kwargs: Any) -> list[R]: diff --git a/mini_trainer/utils/_core/misc.py b/mini_trainer/utils/_core/misc.py index 681137f..353bd5f 100644 --- a/mini_trainer/utils/_core/misc.py +++ b/mini_trainer/utils/_core/misc.py @@ -1,7 +1,7 @@ import shutil from collections import OrderedDict from collections.abc import Callable, Iterable -from typing import Any, TypeVar, TypeVarTuple +from typing import Any import numpy as np import torch @@ -12,10 +12,6 @@ TERMINAL_WIDTH, _ = shutil.get_terminal_size() -X = TypeVar("X") -R = TypeVar("R") -Ks = TypeVarTuple("Ks") - def make_empty_ndarray(s: int) -> np.typing.NDArray[np.float64]: """Create a 1-dimensional array filled with ``np.nan``.""" diff --git a/tests/modeling/test_init.py b/tests/utils/test_core.py similarity index 78% rename from tests/modeling/test_init.py rename to tests/utils/test_core.py index 779b520..cb161e7 100644 --- a/tests/modeling/test_init.py +++ b/tests/utils/test_core.py @@ -1,5 +1,6 @@ import csv from collections import OrderedDict +from typing import Annotated, Union import pytest @@ -9,6 +10,7 @@ filter_ordered_dict, float_signif_decimal, increment_name_dir, + multithread_vectorize, recursive_dfs_attr, write_csv_from_dict, ) @@ -108,3 +110,18 @@ def test_cosine_schedule_with_warmup(): assert fn(i + 1) < fn(i) assert 0.0 < fn(i) < 1.0 assert fn(10) == 0.0 + + +@pytest.mark.parametrize( + "annotation", + [str | int, Union[str, int], Annotated[str | int, "identifier"]], # noqa: UP007 - legacy caller annotations +) +@pytest.mark.parametrize("threshold", [1, 100]) +def test_vectorize_preserves_scalars_and_ordered_iterables(annotation, threshold): + @multithread_vectorize(min_items_to_multithread=threshold, disable=True, max_workers=2) + def convert(value: annotation, factor=2): + return int(value) * factor + + assert convert("12") == convert(12) == 24 + assert convert(["3", 1, "2"], factor=3) == [9, 3, 6] + assert convert(iter(["3", 1, "2"]), factor=3) == [9, 3, 6] From b24a559b26849a57e83770335e6af00b08822807 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 10:57:49 +0200 Subject: [PATCH 120/221] docs: distinguish historical MAMBO evidence from current guidance --- docs/mambo-accelerated-deployment.md | 126 +++++++++------------------ docs/mambo-v3-evaluation.md | 92 +++++++------------ 2 files changed, 72 insertions(+), 146 deletions(-) diff --git a/docs/mambo-accelerated-deployment.md b/docs/mambo-accelerated-deployment.md index 8eccdfd..5413d93 100644 --- a/docs/mambo-accelerated-deployment.md +++ b/docs/mambo-accelerated-deployment.md @@ -1,28 +1,22 @@ -# Accelerated MAMBO deployment defaults +# Historical MAMBO preparation and precision comparison -The deployment adapter now uses existing mixed-precision facilities and faster, -pixel-preserving preparation. Model weights, standard ONNX graphs, presets and -prediction interfaces remain the same. +This study qualified faster preparation and mixed precision before the later +streaming and TTA work. It explains the precision choice; use the +[current deployment guide](../deployment/README.md) for integration defaults and +[current comparisons](../deployment/README.md#release-comparison) for adoption. +Weights, standard ONNX graphs, presets and prediction interfaces were unchanged. -| Execution | `precision="auto"` | Explicit reference | +| Execution | Automatic precision in this study | FP32 reference | |---|---|---| -| PyTorch CUDA | FP16 backbone autocast; FP32 classifier and embeddings | `precision="fp32"` disables autocast | -| ONNX CUDA | TF32 execution of the standard FP32 graph | `precision="fp32"` disables TF32 | -| CPU, either backend | FP32 | `precision="fp32"` | - -Native `precision="bf16"` is available on CUDA devices with native BF16 support. -It passed the 4,096-image qualification but is not the automatic choice or a -full-dataset baseline. FP16 has broader hardware support and showed smaller -sampled changes from FP32. ONNX does not inherit PyTorch autocast settings. -Native PyTorch respects caller TF32 flags; comparison runs explicitly disable -both matmul and cuDNN TF32 for its FP32 reference. - -The adapter keeps interpolation arithmetic unchanged, makes intermediate arrays -contiguous and computes only the retained crop. `threads` bounds ordered parallel -image preparation and ONNX CPU execution; use 1 for serial preparation. There is -no persistent worker service, new dependency, model conversion or additional -artifact to distribute. CPU preparation and model execution remain sequential; -more complex overlap is unnecessary for this increment. +| PyTorch CUDA | FP16 backbone; FP32 classifier and embeddings | Autocast disabled; matmul/cuDNN TF32 disabled | +| ONNX CUDA | TF32 execution of the standard FP32 graph | TF32 disabled | +| CPU, either backend | FP32 | FP32 | + +BF16 passed subset qualification but was not evaluated on the full dataset. +FP16 had broader hardware support and smaller sampled changes from FP32. +Preparation kept interpolation arithmetic while using contiguous arrays and +computing only the retained crop. These combined changes were measured together; +the study does not isolate their individual contributions. ## Qualification @@ -33,11 +27,6 @@ real images plus frozen synthetic edge cases. Outputs and normalized embeddings remain float32. Prediction/embedding modes agreed on the checked species labels; custom-list filtering and same-batch embedding equivalence passed. -The installed ONNX-only wheel also passed offline API/CLI inference with a relocated, -read-only bundle and no torch/training-package dependency. Runtime tests cover -precision routing, unsupported configurations, FP32 classifier execution under an -outer autocast context, original preprocessing pixels and ordered batching. - ## Full evaluation and timing Both accelerated backends completed all **58,640 Flemming images**, using the @@ -49,21 +38,11 @@ Known-truth results retain 50,598 images at species level; membership is checked separately at each rank. The [metric definitions](mambo-release-comparison.md#prediction-quality) explain the different macro denominators, including predicted-only classes in F1. -| Preset | v2 macro accuracy | v3 FP32 | v3 PyTorch FP16 | v3 ONNX TF32 | -|---|---:|---:|---:|---:| -| Northern Europe | 68.52% | 71.24% | 71.25% | 71.24% | -| Europe | 66.04% | 69.06% | 69.05% | 69.06% | -| Global | 57.21% | 58.03% | 58.01% | 58.03% | -| Updated northern Europe | — | 70.49% | 70.46% | 70.49% | -| Updated Europe | — | 68.88% | 68.86% | 68.88% | - -These are **macro species accuracies over all truth**. Northern-Europe macro-F1 -is 0.2575 for v2, 0.2545 for v3 FP32, and 0.2543 for both accelerated paths. -The updated northern-Europe list gives 0.2368 / 0.2365 for PyTorch / ONNX. -Broader occurrence coverage changes the candidate vocabulary; these lists were -not tuned to Flemming. No precision variant uniformly improves every score. Across all five presets, -three ranks and both truth populations, the largest macro-accuracy difference -from FP32 is below 0.094 percentage points. +Across five presets, three ranks and both truth populations, the largest +macro-accuracy difference from FP32 was below **0.094 percentage points**. +Northern-Europe macro-F1 over all truth was 0.2575 for v2, 0.2545 for v3 FP32, +and 0.2543 for both accelerated paths. No precision variant uniformly improved +every score. The figures and complete CSV retain the geographic comparisons. ![Macro-led species quality over all truth](assets/mambo-accelerated-quality-all.svg) @@ -89,12 +68,10 @@ Northern Europe, **images per second** (higher is better): | Original v3 ONNX FP32 | 9.64 | 9.71 | 30.4 | 42.8 | 42.4 | | Updated v3 ONNX auto | 10.08 | 10.81 | 46.7 | 114.1 | **111.3** | -At GPU batch 32, updated PyTorch is **3.06×** its original throughput and ONNX -is **2.62×**. Both exceed v2 here. Native batch-1 CPU throughput is lower in this -campaign (5.70 versus 6.74); this is not a uniform CPU speedup. Its trial medians -range from 5.45 to 6.45 images/s, and batch-8 results from 6.66 to 9.24. -ONNX CPU improves modestly. Batch 8 already approaches the new GPU throughput -limit, particularly for ONNX; larger batches are not always faster. +At GPU batch 32, PyTorch improved **3.06×** and ONNX **2.62×** over their original +pipelines. This was not a uniform CPU speedup: native batch-1 throughput fell +from 6.74 to 5.70 images/s. The early sequential pipeline plateaued around batch +8–32; that plateau is not a limit of the current streaming implementation. ![Peak host memory for the complete sweep](assets/mambo-accelerated-memory.svg) @@ -107,8 +84,9 @@ Host memory increases versus the previous v3 sweep, while remaining below v2. Native peak allocated GPU memory falls from 865 to **598 MiB** (v2: 1,936 MiB). These are PyTorch allocator counters, not total device memory; an equivalent ONNX allocator peak is unavailable. Host RSS includes loading and the entire batch -sweep. Startup excludes interpreter launch and explicit runtime setup. Reuse a -loaded predictor; native classifier initialization remains a separate core issue. +sweep. Startup excludes interpreter launch and explicit runtime setup. The native +startup cost included historical classifier initialization; see the +[FP32 report](mambo-v3-evaluation.md#startup-and-process-memory). These compare the combined adapter changes against the recorded pre-change pipeline on the same i7-12800H / RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, @@ -120,44 +98,20 @@ observations. All speed figures include decoding, preparation, inference and completed CPU results. Native CPU model threads were also explicitly set to four. The v2 CPU result requires its documented caller-side float32 input cast. -GPU scaling still saturates: preparation and execution remain sequential, and -classification/result handling also consume time. This increment removes major -avoidable costs without adding a streaming scheduler or changing model artifacts. - -In-domain evaluation has since [completed on UCloud](mambo-indomain-evidence.md). -[Final qualification](../dev/releases/mambo_v3/final-qualification.md) records current -platform limits and publication readiness. BF16 in this study has subset qualification only. The -[original FP32 comparison](mambo-release-comparison.md) remains available as the -pre-optimization reference. No new model artifacts or quantization are involved. - -## Reproduce +## Evidence and replay -Use the existing environment without dependency synchronization. The metrics -environment stays pinned as described in the [evaluation workflow](../dev/releases/mambo_v3/evaluation.md). +The [evidence JSON](assets/mambo-accelerated-comparison.json) contains the FP32 +reference, automatic-precision results and source hashes. Regenerate its figures +and metric CSV without images or new inference: ```sh -python -m dev.releases.mambo_v3.qualify_precision \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --output /path/to/new-native-qualification \ - --backend torch --precisions fp32 fp16 bf16 -python -m dev.releases.mambo_v3.qualify_precision \ - --bundle /path/to/bundle --manifest /path/to/flemming-manifest.json \ - --root /path/to/flemming --output /path/to/new-onnx-qualification \ - --backend onnx --precisions fp32 tf32 -python -m dev.releases.mambo_v3.run_local full --precision auto \ - --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ - --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ - --output /path/to/new-full-quality -/path/to/metrics-env/bin/python -m dev.releases.mambo_v3.metrics \ - --collection /path/to/new-full-quality -python -m dev.releases.mambo_v3.benchmark_acceleration \ - --python /path/to/gpu-env/bin/python --bundle /path/to/bundle \ - --manifest /path/to/flemming-manifest.json --root /path/to/flemming \ - --output /path/to/new-timings -python -m dev.releases.mambo_v3.acceleration_report \ - --reference docs/assets/mambo-release-comparison.json \ - --quality /path/to/new-full-quality --performance /path/to/new-timings \ - --output /path/to/charts +.venv/bin/python -m dev.releases.mambo_v3.acceleration_report \ + --data docs/assets/mambo-accelerated-comparison.json \ + --output /tmp/mambo-acceleration-figures ``` -Run timing processes sequentially, with no competing GPU or CPU qualification. +The [historical report](https://github.com/asgersvenning/mini_trainer/blob/595582c212e7f248b400f7a782857bc5bdfe5111/docs/mambo-accelerated-deployment.md#reproduce) +retains original collection commands. Replaying them with today's adapter measures +a different pipeline. For new collection use the +[evaluation workflow](../dev/releases/mambo_v3/evaluation.md); for current platform +coverage use [final qualification](../dev/releases/mambo_v3/final-qualification.md). diff --git a/docs/mambo-v3-evaluation.md b/docs/mambo-v3-evaluation.md index de8b152..36b885c 100644 --- a/docs/mambo-v3-evaluation.md +++ b/docs/mambo-v3-evaluation.md @@ -9,12 +9,9 @@ on all **58,640 Flemming images**, for species, genus and family, with all five lists below. This establishes same-model prediction agreement on this dataset; it is not a claim of numerical identity or improvement over MAMBO_v2. -For the subsequently measured MAMBO_v2 baseline and readable release-to-release -charts, see the [real-world comparison](mambo-release-comparison.md). - ## Quality and geographic filtering -| Preset | Species accuracy, all images | Species accuracy, known truth | Macro-F1, all | Genus accuracy | Family accuracy | +| Preset | Species micro accuracy, all | Species micro accuracy, known | Species macro-F1, all | Genus micro accuracy, all | Family micro accuracy, all | |---|---:|---:|---:|---:|---:| | Full | 58.43% | 67.72% | 0.0971 | 70.58% | 90.31% | | Europe, legacy | 68.95% | 79.91% | 0.1993 | 77.94% | 92.86% | @@ -25,8 +22,9 @@ charts, see the [real-world comparison](mambo-release-comparison.md). Both backends have the same values. There are 522 truth species; 16 species, covering 8,042 images, are absent from all five vocabularies. All-image accuracy keeps those examples; known-truth accuracy uses the remaining 50,598 images -(86.29% coverage). Genus and family truth are fully covered. Predictions use a -fixed zero threshold, without tuning or abstention. +(86.29% coverage). Family truth is fully covered; genus truth is fully covered +except for one image under legacy northern Europe. Predictions use a fixed zero +threshold, without tuning or abstention. Updated Europe adds 72 candidate species and updated northern Europe adds 222, with no removals. Those broader choices slightly reduce accuracy on Flemming; @@ -35,10 +33,11 @@ The [preset catalogue](model-presets.md) describes the occurrence filters and documented minimum metadata-row counts. This European dataset does not qualify the usefulness of every other geographic preset. -Macro-F1 follows the pinned `mini_metrics` implementation, including predicted-only -classes; it must not be read as accuracy. The retained JSON reports also contain -macro precision/recall, Theil's U, known-only and per-class results at every rank. -No metric-policy or threshold optimization was performed. +Metrics use `mini_metrics` at the revision below. Macro-F1 includes predicted-only +classes. [Retained comparison data](assets/mambo-release-comparison.json) includes +macro and micro metrics at all ranks; the +[metric definitions](mambo-release-comparison.md#prediction-quality) explain their +denominators. These results have no support truncation or threshold optimization. A separate seeded **256-image / 112-species** qualification found identical rank labels across PyTorch/ONNX × CPU/CUDA × predictions/embeddings, for all five @@ -46,14 +45,7 @@ lists. Embeddings were finite, normalized 1280-dimensional vectors. Supplying updated Europe as a custom class list preserved selection and order. This does not establish downstream embedding quality or full-dataset CPU/embedding accuracy. -## Choosing a runtime - -ONNX is the practical default for new integrations here: it needs no training -package, starts much faster, and uses less CPU process memory. Native PyTorch -remains compatible with existing callers and gives competitive warmed GPU -throughput. Embedding extraction adds little batched cost in this measurement; -small differences and single-image differences should be read alongside the -trial ranges, not as universal speed claims. +## Measurement environment Hardware: Intel Core i7-12800H and RTX 3080 Ti Laptop GPU (16 GB), Linux/WSL2, on AC power. Python 3.13.7, PyTorch 2.12.0+cu130, ONNX Runtime GPU 1.30.0, @@ -65,45 +57,32 @@ raw reports retain observed GPU temperatures, power and clocks. ## End-to-end latency and throughput -Laptop measurements; updated Europe, four CPU threads, three alternating-order trials. Batch latency includes image decoding, preprocessing, transfers, hierarchy reduction and optional embeddings. p95 is descriptive of the retained observations, not a service-level guarantee. - -| Backend | Device | Embeddings | Batch | Median ms | p95 ms | Images/s | Trial median range ms | -|---|---|---|---:|---:|---:|---:|---:| -| onnx | cpu | No | 1 | 114.8 | 134.6 | 8.7 | 105.1–124.6 | -| onnx | cpu | No | 8 | 829.4 | 904.7 | 9.6 | 772.6–864.6 | -| onnx | cpu | Yes | 1 | 108.0 | 119.1 | 9.3 | 99.4–113.2 | -| onnx | cpu | Yes | 8 | 812.2 | 891.5 | 9.8 | 759.7–851.0 | -| onnx | cuda:0 | No | 1 | 33.4 | 38.4 | 29.9 | 30.6–35.8 | -| onnx | cuda:0 | No | 8 | 194.5 | 211.8 | 41.1 | 181.0–202.4 | -| onnx | cuda:0 | No | 32 | 774.5 | 949.1 | 41.3 | 764.2–784.3 | -| onnx | cuda:0 | Yes | 1 | 33.9 | 35.5 | 29.5 | 33.3–34.2 | -| onnx | cuda:0 | Yes | 8 | 199.2 | 211.7 | 40.2 | 190.6–201.8 | -| onnx | cuda:0 | Yes | 32 | 775.9 | 1019.4 | 41.2 | 748.1–784.9 | -| torch | cpu | No | 1 | 156.1 | 174.7 | 6.4 | 155.8–160.8 | -| torch | cpu | No | 8 | 1013.9 | 1098.4 | 7.9 | 994.5–1078.9 | -| torch | cpu | Yes | 1 | 151.7 | 164.4 | 6.6 | 148.7–153.2 | -| torch | cpu | Yes | 8 | 1035.1 | 1120.3 | 7.7 | 1033.5–1036.3 | -| torch | cuda:0 | No | 1 | 35.3 | 48.1 | 28.3 | 33.2–41.3 | -| torch | cuda:0 | No | 8 | 178.3 | 194.9 | 44.9 | 170.8–192.5 | -| torch | cuda:0 | No | 32 | 724.5 | 921.8 | 44.2 | 717.8–746.3 | -| torch | cuda:0 | Yes | 1 | 38.7 | 54.0 | 25.8 | 37.5–50.9 | -| torch | cuda:0 | Yes | 8 | 190.4 | 202.6 | 42.0 | 184.6–198.5 | -| torch | cuda:0 | Yes | 32 | 737.7 | 905.9 | 43.4 | 722.2–744.8 | +Updated Europe, four CPU threads. Batch latency includes decoding, preparation, +transfers, hierarchy reduction and optional embeddings. Selected median timings: + +| Backend | Device / batch | Predictions, ms | With embeddings, ms | +|---|---|---:|---:| +| ONNX | CPU / 8 | 829.4 | 812.2 | +| PyTorch | CPU / 8 | 1013.9 | 1035.1 | +| ONNX | CUDA / 32 | 774.5 | 775.9 | +| PyTorch | CUDA / 32 | 724.5 | 737.7 | + +Embeddings added little batched cost in this experiment; small differences were +within trial variation. The [original tables](https://github.com/asgersvenning/mini_trainer/blob/595582c212e7f248b400f7a782857bc5bdfe5111/docs/mambo-v3-evaluation.md#end-to-end-latency-and-throughput) +retain every batch size, p95 and trial range. The subsequent +[FP32 release comparison](mambo-release-comparison.md) provides V2/V3 charts. ## Startup and process memory -Cold first image includes lazy load and first execution; RSS is the process high-water mark across the batch sweep. +Cold first image includes lazy load and first execution. RSS is the process +high-water mark across the batch sweep; these selected rows exclude embeddings. -| Backend | Device | Embeddings | Median cold first image s | Peak RSS range MiB | -|---|---|---|---:|---:| -| onnx | cpu | No | 0.37 | 573–591 | -| onnx | cpu | Yes | 0.38 | 562–582 | -| onnx | cuda:0 | No | 1.64 | 1461–1477 | -| onnx | cuda:0 | Yes | 1.69 | 1460–1463 | -| torch | cpu | No | 40.46 | 1569–1636 | -| torch | cpu | Yes | 40.10 | 1518–1571 | -| torch | cuda:0 | No | 41.78 | 1896–1899 | -| torch | cuda:0 | Yes | 41.80 | 1898–1900 | +| Backend | Device | Median cold first image, s | Peak host RSS range, MiB | +|---|---|---:|---:| +| ONNX | CPU | 0.37 | 573–591 | +| ONNX | CUDA | 1.64 | 1461–1477 | +| PyTorch | CPU | 40.46 | 1569–1636 | +| PyTorch | CUDA | 41.78 | 1896–1899 | Single-thread CPU batch-1 medians were 214 ms (ONNX) and 269 ms (PyTorch), or 225/268 ms with embeddings. Four threads improve this workload; the bounded @@ -119,8 +98,6 @@ First-call timings exclude runtime import/configuration (median approximately 0.86 s for PyTorch and 0.03 s for ONNX), lightweight predictor construction and Python interpreter startup. They are not cold-boot measurements. Native loading spent 36.9–39.4 s in spherical classifier initialization before restoring weights. -A loading optimization belongs on a separate core feature/fix branch, followed by -checkpoint regression checks and merge into the release branch. Native CUDA allocator peaks were approximately 865 MiB allocated / 1,348 MiB reserved across the batch sweep. ONNX has device-memory snapshots, not a matching @@ -149,11 +126,6 @@ a backend speed comparison. The dedicated benchmark uses matched boundaries. - Metric revision: `70cc69adc05362863439277048e06386c1f885e1`. - Runner implementation: `0de3e0d`, with startup instrumentation in `922a45f`. -Tests: **718 passed, 161 skipped, 1 expected failure** in the full repository -suite; static checks passed. The subsequent startup instrumentation was covered by -**39 passing focused release tests** and static checks. Skipped GPU/slow tests are -not implied to pass by that suite; actual GPU evidence is described separately above. - The rebuilt deployment wheel passed a fresh installed ONNX-only check with a relocated read-only bundle, API/CLI execution and Python network calls blocked. Installed CUDA prediction/embedding modes also passed independently of PyTorch; From 027e5b8a6e82b0356c28ea47672d1b69bdea0a7b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:03:05 +0200 Subject: [PATCH 121/221] docs: consolidate historical release comparison workflow --- dev/releases/mambo_v3/release-comparison.md | 204 ++++++++------------ 1 file changed, 84 insertions(+), 120 deletions(-) diff --git a/dev/releases/mambo_v3/release-comparison.md b/dev/releases/mambo_v3/release-comparison.md index 0177f4b..5d2d6f5 100644 --- a/dev/releases/mambo_v3/release-comparison.md +++ b/dev/releases/mambo_v3/release-comparison.md @@ -1,18 +1,17 @@ -# Compare MAMBO_v2 and MAMBO_v3 +# Historical V2/V3 comparison workflow -This comparison keeps northern Europe first, then Europe and global. It uses the -legacy geographic lists for the primary release comparison and separately shows -v3's updated Europe/northern-Europe lists. Full quality uses the existing Flemming -manifest, including out-of-vocabulary truth, and the same pinned metric policy. +Reproduce the original Flemming comparison of V2's published pipeline and V3 +FP32. It predates acceleration/TTA; use [current results](../../../deployment/README.md#release-comparison) +for adoption and the [UCloud runbook](ucloud-release.md) for a new campaign. +Run from the repository root. Replaying collection against today's adapter +measures a different pipeline; figures can be rebuilt directly from retained data. ## Historical model identity -The three MAMBO_v2 heads in `inventory.toml` have identical learned tensors and -metadata; only regional active indices differ. Their cached external BioCLIP-2 -backbone is also required. `legacy_evaluation.py` verifies every historical Python -source file against commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, validates head -hashes, checks shared parameters and pins both external backbone files by SHA-256. -The head hashes are observed retrieval hashes, not independent historical signatures. +The V2 runner verifies source commit `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`, +head hashes from [inventory.toml](inventory.toml), and external BioCLIP-2 hashes. +Heads share learned tensors and differ only by regional masks, allowing shared +features during collection. Head hashes record retrieval, not independent signatures. Export the original source without switching this release branch: @@ -21,25 +20,18 @@ mkdir -p /path/to/v2-source git archive 32b3cd661778356b2e8c4cff5b10fa9061aa6f5d mini_trainer | tar -x -C /path/to/v2-source ``` -Use a separate Python 3.13 environment. The measured environment reuses the -existing PyTorch 2.12.0+cu130 / torchvision 0.27.0 runtime and adds -`open_clip_torch==3.3.0`, `timm==1.0.25`, `huggingface_hub==0.36.2`, -`safetensors==0.6.2`, `ftfy==6.3.1`, `regex==2026.9.10`, and -`requests==2.34.2` with its dependencies. This is an isolated comparison environment, -not a recovered historical dependency lock or clean installation qualification. -Do not sync the repository environment or replace its CUDA wheels. +Use a separate runtime and preserve the existing CUDA environment. The original +comparison used Python 3.13, PyTorch 2.12.0+cu130 / torchvision 0.27.0 and +open_clip_torch 3.3.0; the historical runbook linked below retains the full version +list. This was a contemporary comparison environment, not V2's original lock. -The local offline Hugging Face cache points `imageomics/bioclip-2` to snapshot -`2957b322090f9cb17ae72c71981c7218a28d81e0`. Required files: - -| File | SHA-256 | -|---|---| -| `open_clip_config.json` | `1bf947e96e943fe50efd5c3e26c37f843a2fa3c358967719a68c8a6d17ce68c8` | -| `open_clip_model.safetensors` | `b7b2bf6fbc95799e42630e394cf95803892ab447c1a8ab629dbc82fbeaf7dfef` | - -Keep `HF_HUB_OFFLINE=1` and select that cache using `HF_HUB_CACHE`. No downloads -belong in startup timing. Run the original source first on `PYTHONPATH` and use -`python -P`; otherwise the current checkout can silently shadow it. +The offline Hugging Face cache must contain `imageomics/bioclip-2` snapshot +`2957b322090f9cb17ae72c71981c7218a28d81e0`. The runner's +[backbone verification](legacy_evaluation.py) pins both configuration and weights +by SHA-256. Download before timing, then set `HF_HUB_OFFLINE=1` and `HF_HUB_CACHE`. +Put the original source first on `PYTHONPATH` and use `python -P` so the current +checkout cannot shadow it. The [UCloud setup](ucloud-release.md#setup-with-uv) +automates source extraction and asset retrieval for that workflow. ## Qualification and full quality @@ -52,21 +44,15 @@ PYTHONPATH=/path/to/v2-source:/path/to/mini_trainer \ --output /path/to/new-qualification ``` -The 256-image qualification compares the shared-backbone collection path against -original API calls for every list and image. Full collection verifies the first -batch again. The original backbone and head computations remain unchanged; -features are reused across masks only after equality of the learned states is -established. Image bytes are checked against the manifest. Every original truth -label remains in the canonical CSVs. - -Replace `qualification` with `full` for the full dataset, using -`--output /path/to/v2-full-phase/v2-full` for the chart aggregator's directory layout. -Alternatively, use `release_comparison full` with the shared arguments shown below. -For every list, run the -pinned metric environment using `dev.releases.mambo_v3.metrics --source ... --output ...` -as described in [evaluation.md](evaluation.md). `compare_quality.compare` with -`presets=["north_europe", "europe", "full"]` verifies paired v2/v3 identities, -truth and coverage and produces accuracy changes and label agreement. +Qualification compares shared-backbone outputs with original API calls on 256 +images for each list. Full collection rechecks its first batch and verifies image +hashes. Replace `qualification` with `full`, using output +`/path/to/v2-full-phase/v2-full` for the chart aggregator's layout. + +Use the [pinned metric workflow](evaluation.md#metrics), retaining unknown truth. +[Metric definitions](../../../docs/mambo-release-comparison.md#prediction-quality) +cover macro/micro averages and all/known populations. Verify paired sample identity +and truth before interpreting changes. ## Speed and memory @@ -82,37 +68,25 @@ python -m dev.releases.mambo_v3.release_comparison benchmark \ --output /path/to/new-comparison-timings ``` -Do not overlap timing with other heavy work. Each configuration uses the same -seeded 32-image bank, four CPU threads, two warmups and seven observations per cell. -CPU batches are 1/8; GPU batches are 1/8/32. Calls include decoding, preprocessing, -hierarchy reduction and completed CPU results. Timings cover predictions only; -existing v3 embedding-mode evidence remains in the separate local report. - -The first unadapted v2 CPU attempt is retained as failed evidence: its bfloat16 -preprocessed input meets float32 convolution weights and raises -`RuntimeError: expected scalar type BFloat16 but found Float` in this environment. -The ancillary CPU benchmark uses `--cpu-float32`, a caller-side wrapper that casts -the original preprocessor's output to float32. It preserves its values and leaves -all historical source and learned weights unchanged. The orchestrator selects this -flag only for CPU, records it explicitly, and the CPU charts label the adapter. -It is not a shipped core fix. GPU and full quality use the original path. - -V2 uses the original public API for GPU timing: an initial 512-pixel resize, BioCLIP -preprocessing to 224 pixels, and CUDA float16 autocast. V3 uses the qualified -384-pixel recipe and FP32. Both disable TF32. This is the intended real-world comparison of the models and pipelines shipped -in the two versions. Their resolution and precision choices explain the results. V2 has no qualified ONNX -variant in this comparison. The original source's loader warnings and expensive -classifier initialization are preserved; no core fix is applied here. - -Reuse the unchanged earlier v3 global/updated-Europe results. The new v3 trials -add legacy Europe and both northern-Europe lists. Each plotted timing has three -trials; whiskers show trial-median range. RSS is the process high-water mark during -load and the batch sweep, using full-list-containing sweeps for all runtimes. -It is host memory, including initialization transients, not just weights or VRAM. -Native CUDA allocator peaks are separate; ONNX snapshots are not equivalent peaks. -Startup includes predictor construction and first completed call, with local cached -files. Process launch and explicit runtime setup are excluded; lazy imports during -model construction remain included. It is not a cold-boot measurement. +The historical protocol uses the same seeded 32-image bank, four CPU threads, +two warmups and seven observations per cell: CPU batches 1/8, GPU 1/8/32, +predictions only. Do not overlap trials with other heavy work. The added V3 trials +cover legacy Europe and both northern lists, complementing the original +global/updated-Europe sweep. Keep adapter revisions consistent across those inputs. + +Two distinctions are essential for interpreting the comparison: + +- V2 CPU needed `--cpu-float32` because its bfloat16 inputs met float32 weights. + The orchestrator selects this value-preserving input cast only for CPU; + historical source/weights and the CUDA path remain unchanged. +- V2 uses an initial 512-pixel resize, BioCLIP's 224-pixel preprocessing and CUDA + FP16 autocast; V3 uses 384 pixels and FP32. Both disable TF32. This compares + release pipelines, not isolated backbones. V2 has no qualified ONNX variant. + +[Shared timing boundaries](evaluation.md#timing-and-summary) define end-to-end, +startup and memory measurements. RSS uses full-list-containing sweeps; startup +includes construction and the first completed call with cached assets. Collection +wall time is not a backend speed comparison. ## Rebuild the charts @@ -123,54 +97,44 @@ python -m dev.releases.mambo_v3.comparison_charts \ --added-performance /path/to/new-comparison-timings --output /path/to/charts ``` -Aggregation rejects unfinished runs, changed CSVs, different quality populations -or metric revisions, mismatched timing image banks and missing timing trials. -The resulting compact JSON excludes image identities and per-class predictions; -it records measurement summaries and source hashes. Regenerate shareable SVGs from -that JSON alone with `comparison_charts --data /path/to/mambo-release-comparison.json ---output /path/to/charts`. Keep raw evidence outside Git; charts and compact source -data are intentional release documentation assets. - -In-domain comparison remains UCloud work using the original test split. This local -comparison neither changes thresholds/presets from test results nor publishes a -release. Core loading optimizations require a separate feature/fix branch. - -The local run retains full v2 quality under -`local-evidence/mambo-release-comparison-quality/v2-full/` and successful timing -trials under `local-evidence/mambo-release-comparison-performance-cpu-adapter/`. -The original unadapted CPU failure remains in -`local-evidence/mambo-release-comparison-performance/trial-0-v2-cpu/report.json`. -Earlier v3 quality and timing inputs remain under `local-evidence/mambo-v3/`. - -All 18 additional timing processes completed. An interrupted final v2 GPU trial -is retained separately and excluded; its successful replacement is -`trial-2-v2-cuda-0-retry1`. Every reported timing cell contains exactly three -successful trials. The original interrupted plan remains as `interrupted-plan.json`. - -The revised charts use images/second throughout, with a shared GPU vertical scale. -Predictive scores come exclusively from mini_metrics (`micro_accuracy`, rather -than its macro `accuracy` field). All/known populations and macro-F1 class support -are defined in the report. Old metric JSON is retained beside its replacement as -`metrics-before-mini-metrics-only.json`; all 13 full-data extractions preserve the -previous accuracy and F1 values. Component timings are reaggregated from existing -benchmark evidence; no inference rerun is needed for these reporting corrections. - -Run the metric integration regression with the pinned environment available: +Aggregation requires complete runs, unchanged metric inputs, matching populations, +metric revisions and image banks, and three timing trials per cell. It copies +`mini_metrics` scores at all ranks and both scopes; it computes no predictive +metrics. Keep raw predictions/observations outside Git and retain their hashes. + +To regenerate retained figures and the complete metric CSV without private inputs: ```sh -MAMBO_METRICS_PYTHON=/path/to/metrics-env/bin/python \ - bash dev/check.sh all tests/releases +.venv/bin/python -m dev.releases.mambo_v3.comparison_charts \ + --data docs/assets/mambo-release-comparison.json --output /tmp/mambo-fp32-figures ``` -It exercises imbalanced classes and excluded truth to distinguish micro accuracy, -macro accuracy, all/known filtering and macro-F1 through the real mini_metrics API. +## Evidence and regression coverage -The expanded baseline leads with macro accuracy/F1 and retains macro precision, -recall, micro accuracy, Theil U and coverage for all three ranks and both -all/known-truth scopes. `mambo-release-metrics.csv` contains the complete compact -baseline, including updated presets. All values are copied from pinned mini_metrics -outputs; no predictive metric is calculated by the chart renderer. +The original local evidence remains under: + +| Evidence | Ignored location | +| --- | --- | +| Full V2 quality | `local-evidence/mambo-release-comparison-quality/v2-full/` | +| Successful additional timings | `local-evidence/mambo-release-comparison-performance-cpu-adapter/` | +| Unadapted V2 CPU failure | `local-evidence/mambo-release-comparison-performance/trial-0-v2-cpu/report.json` | +| Original V3 quality and timings | `local-evidence/mambo-v3/` | + +These paths describe the retained local archive, not files shipped in the package. +Interrupted processes are excluded; each reported timing cell has three successful +trials. The [historical runbook](https://github.com/asgersvenning/mini_trainer/blob/b24a559b26849a57e83770335e6af00b08822807/dev/releases/mambo_v3/release-comparison.md) +retains individual retry and metric-migration details. Use the +[evidence policy](evidence-policy.md) when extending comparisons. + +For changes to metric extraction, the focused integration regression checks +imbalanced classes, excluded truth, macro/micro averages and F1 through the real +pinned `mini_metrics` API: + +```sh +MAMBO_METRICS_PYTHON=/path/to/metrics-env/bin/python \ + bash dev/check.sh test tests/releases/test_release_evaluation.py \ + -k pinned_metrics_distinguish_micro_macro_and_known_truth +``` -The [batch-scaling diagnosis](../../../docs/mambo-batch-scaling.md) provides the -sequential profiling workflow, controlled precision/layout/preprocessing probes, -recorded causes and boundaries for subsequent implementation. +For performance changes use the [pipeline review](../../../docs/mambo-inference-pipeline-review.md) +and [small speed check](speed-smoke.md), not a repeated full historical campaign. From 3820c4ebcd344cdc49ca7c33579dc9bda075db59 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:07:13 +0200 Subject: [PATCH 122/221] docs: clarify examples and retire reference-only scripts --- README.md | 3 + dev/releases/mambo_v3/README.md | 12 ++++ examples/.gitignore | 5 +- examples/README.md | 28 ++++++++ examples/apply_quality_filter.py | 112 ------------------------------- examples/run_notebook.py | 28 -------- 6 files changed, 45 insertions(+), 143 deletions(-) create mode 100644 examples/README.md delete mode 100644 examples/apply_quality_filter.py delete mode 100644 examples/run_notebook.py diff --git a/README.md b/README.md index 3eeca11..0800907 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,9 @@ Activate the environment, use its executables directly, or use `uv run --no-sync An implicit sync can replace the deliberately selected PyTorch backend. Select the backend explicitly whenever installing or synchronizing dependencies. +The [examples index](examples/README.md) describes dataset constructors and historical +notebook demonstrations. + ## Data loading on shared machines Defaults use process CPU availability, affinity, visible cgroup quotas and Slurm diff --git a/dev/releases/mambo_v3/README.md b/dev/releases/mambo_v3/README.md index 283a211..f5fe0bb 100644 --- a/dev/releases/mambo_v3/README.md +++ b/dev/releases/mambo_v3/README.md @@ -104,6 +104,18 @@ Keep these historical distinctions when interpreting compatibility: - The legacy probability heuristic used a batch-wide sum. This defect and an archived CSV schema are not sufficient grounds for promising score or CLI parity. +## Historical dataset quality filter + +The [retired filtering script](https://github.com/asgersvenning/mini_trainer/blob/027e5b8a6e82b0356c28ea47672d1b69bdea0a7b/examples/apply_quality_filter.py) +records this policy: retain images predicted as `Valid` or `Dead` with confidence +≥0.5, then retain species with ≥50 surviving images. It selects Parquet records by +matching filename stems to the selected image IDs. This dataset filter is separate +from the regional preset occurrence thresholds above. + +The script was labelled reference-only; its remote I/O is not a maintained rebuild +workflow, and it does not prove how the supplied Parquet bytes were produced. +Release construction uses the hashed metadata snapshot in `construction.toml`. + ## Evaluation handoff Flemming contains 58,640 images / 522 species. Its species-directory and filename diff --git a/examples/.gitignore b/examples/.gitignore index 80b7f80..7a25e35 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -17,8 +17,7 @@ !inat2021/construct.py !inat2021.ipynb -!run_notebook.py !resize_image_dir.py !create_combinations.py -!apply_quality_filter.py -!utils.py \ No newline at end of file +!utils.py +!README.md diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..2951f67 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,28 @@ +# Examples + +Use the [root installation guide](../README.md) first. Run dataset constructors +from the repository root in the existing environment: + +```sh +.venv/bin/python -m examples.mnist.construct +.venv/bin/python -m examples.blair.construct +``` + +| Example | Purpose | +| --- | --- | +| [MNIST notebook](mnist.ipynb) | Flat classification, a constructed long tail and prediction plots; constructor keeps at most 500 images per digit in each original split. | +| [Blair notebook](blair.ipynb) | Hierarchical specimen classification and visualization; constructor preserves training/testing folders. | +| [Bird dataset constructor](birds/construct.py) | Downloads the published train/valid/test archives through Hugging Face. | +| [iNaturalist constructor](inat2021/construct.py) | Downloads mini/full training and validation data, resolves GBIF taxonomy and writes a data index. | + +Constructors accept `--output_dir` and use a `.complete` marker; without it they +remove partial split directories before rebuilding. Use a dedicated destination. +The iNaturalist destination additionally appends `mini` or `full`. + +The notebooks are historical demonstrations with saved illustrations, not qualified +end-to-end workflows. They contain IPython shell cells, paths relative to +`examples/`, CUDA/Spark assumptions and manual inference code predating the current +API. Dataset construction above runs from the root; do not execute notebook cells +by concatenating them as plain Python. For maintained training/evaluation examples, +use the [benchmark workflow](../dev/benchmarks/training.md); for model integration, +use the [deployment guide](../deployment/README.md). diff --git a/examples/apply_quality_filter.py b/examples/apply_quality_filter.py deleted file mode 100644 index a24d2a7..0000000 --- a/examples/apply_quality_filter.py +++ /dev/null @@ -1,112 +0,0 @@ -"""Apply quality control model to gbifxdl parquet. -The model has been trained to infer if a given image contains -an image of an adult moth at a good resolution, -or one of a number of other "classes". - -Script included for reference on how quality filtering was done, -but is NOT intended to actually be run. -""" - -# # Create index of retained images from quality control -# Retains images that match the following heuristics: - -# 1) If the inferred quality class is "Valid" or "Dead" **and** the confidence is 50% or higher. -# 2) The actual class must have 50 or more images **after** applying the first heuristic. - -import csv -import os -from collections import Counter -from tempfile import tempdir - -import pyarrow -import pyarrow.compute as cp -import pyarrow.dataset as ds -from pyarrow.parquet import ParquetWriter -from pyremotedata.implicit_mount import IOHandler -from tqdm.auto import tqdm - -src = "quality/global_lepi.csv" -init_class_counts = Counter() -init_selected = [] -non_selected = [] - -with open(src) as f: - lines = f.readlines() - reader = csv.DictReader(lines) - for row in tqdm(reader, total=len(lines) - 1, desc="Selecting from predictions"): - path, pred, conf = row["path"], row["prediction"], row["confidence"] - if pred in ["Valid", "Dead"] and float(conf) >= 0.5: - init_selected.append(path) - init_class_counts.update([path.split("/")[0]]) - else: - non_selected.append(path) - -classes_with_enough_images = set([c for c, n in init_class_counts.items() if n >= 50]) -class_counts = Counter() -selected = [] -for proposed in init_selected: - if (cls := proposed.split("/")[0]) in classes_with_enough_images: - selected.append(proposed) - class_counts.update([cls]) - else: - non_selected.append(proposed) - -summary_str = "\n".join( - f"{lab:<20}: {{:>10}}" for lab in ["Total images", "Passed QC", "Enough per-class", "Removed", "Total classes", "Retained classes"] -).format(len(lines) - 1, len(init_selected), len(selected), len(non_selected), len(init_class_counts), len(class_counts)) -print(summary_str) - -with open("quality/selected_images.txt", "w") as f: - f.writelines(selected) - -with open("quality/non_selected_images.txt", "w") as f: - f.writelines(non_selected) - -# ## Apply selected index to parquet -# *Crucially this is done lazily on disk to avoid OOM on large parquet files!* - -# Original parquet is downloaded from ERDA and updated parquet is uploaded to ERDA if it doesn't exist. - -with IOHandler(user="On0rdRltgS", password="On0rdRltgS") as io: - io.cd("global_lepi") - src = io.pget("0032836-250426092105405_processing_metadata_postprocessed.parquet", tempdir) - if src is None: - raise RuntimeError("Remote parquet not downloaded?") - -dst = os.path.join(tempdir, "0032836-250426092105405_processing_metadata_postprocessed_quality_filtered.parquet") -if os.path.exists(dst): - os.remove(dst) -select_index = "quality/selected_images.txt" - -data = ds.dataset(src, format="parquet") -if not isinstance(data, ds.Dataset): - raise RuntimeError("...") - -with open(select_index) as f: - selected = [line.strip() for line in f.readlines()] - -selected_uuid = set([s.split("/")[1].split(".")[0] for s in selected]) - -scanner = ds.Scanner.from_dataset( - data, filter=cp.is_in(cp.list_element(cp.split_pattern(cp.field("filename"), ".", max_splits=1), 0), pyarrow.array(selected_uuid)) -) - -with ( - ParquetWriter(dst, scanner.dataset_schema, compression="ZSTD") as writer, - tqdm(total=scanner.count_rows(), desc="Writing parquet...") as pbar, -): - for batch in scanner.scan_batches(): - batch = batch.record_batch - writer.write_batch(batch) - pbar.update(batch.num_rows) - -with IOHandler(user="On0rdRltgS", password="On0rdRltgS") as io: - io.cd("global_lepi") - if os.path.basename(dst) not in io.ls(): - io.put(dst) - print("Updated parquet uploaded to ERDA!") - else: - print("Updated parquet already on ERDA!") - -os.remove(dst) -os.remove(src) diff --git a/examples/run_notebook.py b/examples/run_notebook.py deleted file mode 100644 index f1ef1ba..0000000 --- a/examples/run_notebook.py +++ /dev/null @@ -1,28 +0,0 @@ -import json -import sys - - -def run_notebook(notebook_path): - with open(notebook_path, encoding="utf-8") as nb_file: - notebook = json.load(nb_file) - - # Collect all code cell sources into a single string. - full_code = "" - for cell in notebook.get("cells", []): - if cell.get("cell_type") == "code": - # Each cell's source is a list of strings. We join them. - cell_code = "".join([line.replace("tqdm.notebook", "tqdm") for line in cell.get("source", [])]) - # Optionally, add a separator (e.g., a comment) between cells. - full_code += f"\n# Begin cell\n{cell_code}\n# End cell\n" - return full_code - - -if __name__ == "__main__": - if len(sys.argv) != 2: - print(f"Usage: {sys.argv[0]} ") - sys.exit(1) - - notebook_file = sys.argv[1] - code_to_run = run_notebook(notebook_file) - # Execute the combined notebook code under __main__ context. - exec(code_to_run, {"__name__": "__main__"}) From f88ee337f4b4d5c482c316f572253583912a7516 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:14:20 +0200 Subject: [PATCH 123/221] refactor: simplify notebook inference with checkpoint metadata --- examples/README.md | 15 ++-- examples/blair.ipynb | 191 +++++++++++-------------------------------- examples/mnist.ipynb | 160 +++++++++++++----------------------- 3 files changed, 118 insertions(+), 248 deletions(-) diff --git a/examples/README.md b/examples/README.md index 2951f67..5b979a9 100644 --- a/examples/README.md +++ b/examples/README.md @@ -19,10 +19,13 @@ Constructors accept `--output_dir` and use a `.complete` marker; without it they remove partial split directories before rebuilding. Use a dedicated destination. The iNaturalist destination additionally appends `mini` or `full`. -The notebooks are historical demonstrations with saved illustrations, not qualified -end-to-end workflows. They contain IPython shell cells, paths relative to -`examples/`, CUDA/Spark assumptions and manual inference code predating the current -API. Dataset construction above runs from the root; do not execute notebook cells -by concatenating them as plain Python. For maintained training/evaluation examples, -use the [benchmark workflow](../dev/benchmarks/training.md); for model integration, +Open notebooks with the existing environment's Python kernel, starting in the +repository root or `examples/`. The first cell constructs data from the root, then +sets `examples/` as the working directory. Choose either single-node or Spark +training; those cells retain their CUDA assumptions and are not a fresh training +qualification. Batched Python inference uses checkpoint mappings and actual image +paths, with CPU fallback. Saved plots are historical illustrations, not new results. + +For maintained training/evaluation benchmarks use the +[benchmark workflow](../dev/benchmarks/training.md); for MAMBO model integration, use the [deployment guide](../deployment/README.md). diff --git a/examples/blair.ipynb b/examples/blair.ipynb index 48b2ad4..bc2f165 100644 --- a/examples/blair.ipynb +++ b/examples/blair.ipynb @@ -18,7 +18,18 @@ "metadata": {}, "outputs": [], "source": [ - "!python -m examples.blair.construct" + "import os\n", + "from pathlib import Path\n", + "import subprocess\n", + "import sys\n", + "\n", + "ROOT = Path.cwd()\n", + "if ROOT.name == \"examples\":\n", + " ROOT = ROOT.parent\n", + "if not (ROOT / \"pyproject.toml\").is_file():\n", + " raise RuntimeError(\"Start this notebook in the repository root or examples directory.\")\n", + "subprocess.run([sys.executable, \"-m\", \"examples.blair.construct\"], cwd=ROOT, check=True)\n", + "os.chdir(ROOT / \"examples\")\n" ] }, { @@ -101,54 +112,16 @@ " --file blair/blair_model/predict/mini_metric.csv --optimal" ] }, - { - "cell_type": "markdown", - "id": "f958f767", - "metadata": {}, - "source": [ - "# Inference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "768dfb57", - "metadata": {}, - "outputs": [], - "source": [ - "# Test that all species can be resolved properly (they can)\n", - "import os\n", - "\n", - "from mini_trainer.integrations import name_to_id, resolve_id\n", - "\n", - "sp2cls = {}\n", - "\n", - "for species in os.listdir(\"blair/train\"):\n", - " id, rank, confidence = name_to_id(species)\n", - " result = resolve_id(id)\n", - " sp2cls[species] = result\n", - "\n", - "classes = {}\n", - "for cls in sp2cls.values():\n", - " for rank, (id, name) in cls.items():\n", - " if rank not in classes:\n", - " classes[rank] = []\n", - " classes[rank].append(name)\n", - "classes = {r: sorted(set(cs)) for r, cs in classes.items()}\n", - "print(\"Number of classes at rank:\")\n", - "for rank, cs in classes.items():\n", - " print(f\"{rank:<10}={len(cs):>4}\")\n", - "classes = {r: cs for r, cs in classes.items() if len(cs) > 1}\n", - "print(\"\\nIncluded ranks:\")\n", - "print(\", \".join(classes))" - ] - }, { "cell_type": "markdown", "id": "db880328", "metadata": {}, "source": [ - "# Manual model load" + "# Batched Python inference\n", + "\n", + "The checkpoint restores its hierarchy and label mappings; no fresh GBIF lookup is\n", + "needed. Labels are checkpoint keys, ordered from the leaf rank to its parents.\n", + "Saved figures are historical illustrations; rerun the display for current predictions.\n" ] }, { @@ -158,23 +131,35 @@ "metadata": {}, "outputs": [], "source": [ - "import json\n", - "\n", "import torch\n", "\n", "from mini_trainer.builders import BaseBuilder\n", + "from mini_trainer.modeling import classification_module, predict\n", "\n", - "with open(\"blair/blair_model/class_spec.json\") as f:\n", - " class_spec = json.load(f)\n", - "\n", - "cls2idx = class_spec[\"cls2idx\"]\n", - "idx2cls = {lvl: {v: k for k, v in data.items()} for lvl, data in cls2idx.items()}\n", - "\n", - "device, dtype = torch.device(\"cuda:0\"), torch.float32\n", - "\n", - "model, mproc = BaseBuilder.build_model(weights=\"blair/blair_model/weights/last.pt\", hidden=512, device=device, dtype=dtype)\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "model, preprocess = BaseBuilder.build_model(\n", + " weights=\"blair/blair_model/weights/last.pt\", device=device, dtype=torch.float32\n", + ")\n", "model.eval()\n", - "pass" + "\n", + "# Use actual files; filenames need not encode their class or be consecutive.\n", + "images = [\n", + " str(path)\n", + " for folder in sorted(Path(\"blair/test\").iterdir()) if folder.is_dir()\n", + " for path in [p for p in sorted(folder.iterdir())\n", + " if p.suffix.lower() in {\".png\", \".jpg\", \".jpeg\"}][:5]\n", + "]\n", + "images = images[:50]\n", + "if not images:\n", + " raise RuntimeError(\"Construct the test dataset before running inference.\")\n", + "loader = BaseBuilder.build_inference_dataloader(\n", + " images=images, batch_size=16, num_workers=0, device=device, dtype=torch.float32,\n", + " resize_size=classification_module(model).metadata[\"resize_size\"],\n", + ")\n", + "predictions = []\n", + "with torch.inference_mode():\n", + " for batch in loader:\n", + " predictions.extend(predict(model, preprocess(batch).to(device)))\n" ] }, { @@ -196,94 +181,18 @@ ], "source": [ "from matplotlib import pyplot as plt\n", - "from matplotlib.axes import Axes\n", "from PIL import Image\n", "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.logging import BaseResultCollector\n", - "\n", - "genera = classes[\"genus\"][:5]\n", - "species = []\n", - "for k, v in sp2cls.items():\n", - " g = v[\"genus\"][1]\n", - " if g not in genera:\n", - " continue\n", - " genera.remove(g)\n", - " species.append(k)\n", - "\n", - "images = []\n", - "labels = []\n", - "for sp in species:\n", - " spcls = sp2cls[sp]\n", - " s, g = sp, spcls[\"genus\"][1]\n", - " dir = os.path.join(\"blair\", \"test\", sp)\n", - " ims = [os.path.join(dir, f) for f in os.listdir(dir)][:10]\n", - " images.extend(ims)\n", - " labels.extend([(s, g)] * len(ims))\n", - "\n", - "ds = LazyDataset(mproc, images)\n", - "\n", - "fig, axs = plt.subplots(5, 10, figsize=(7.5, 5))\n", - "\n", - "for i, ax in enumerate(axs.flatten()):\n", - " tim = ds[i]\n", - " with torch.inference_mode():\n", - " prediction = model(tim.unsqueeze(0).to(device))[0]\n", - " pred_cls = idx2cls[prediction.argmax().item()]\n", - " label_cls = labels[i][0]\n", - " correct = pred_cls == label_cls\n", - " if not isinstance(ax, Axes):\n", - " raise TypeError()\n", - " ax.imshow(Image.open(images[i]))\n", - " ax.set_title(\n", - " \"\\n\".join(pred_cls.split(\" \")[:2]),\n", - " pad=0,\n", - " y=1.025,\n", - " fontdict={\"fontsize\": 5, \"fontweight\": \"bold\" if correct else \"normal\", \"color\": \"green\" if correct else \"red\"},\n", - " )\n", + "fig, axes = plt.subplots(5, 10, figsize=(10, 5))\n", + "for ax in axes.flat:\n", " ax.axis(\"off\")\n", - "\n", - "plt.tight_layout(pad=0)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "b5cae832", - "metadata": {}, - "source": [ - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fc19266e", - "metadata": {}, - "outputs": [], - "source": [ - "results = BaseResultCollector(model, idx2cls, cls2idx, True)\n", - "\n", - "species = list(sp2cls.keys())\n", - "images = []\n", - "labels = []\n", - "for sp in species:\n", - " spcls = sp2cls[sp]\n", - " s, g = sp, spcls[\"genus\"][1]\n", - " dir = os.path.join(\"blair\", \"test\", sp)\n", - " ims = [os.path.join(dir, f) for f in os.listdir(dir)][:10]\n", - " images.extend(ims)\n", - " labels.extend([(s, g)] * len(ims))\n", - "\n", - "ds = LazyDataset(mproc, images)\n", - "for b in range(len(ds) // 5):\n", - " bis = list(range(b * 5, b * 5 + 5))\n", - " with torch.inference_mode():\n", - " predictions = model(torch.stack([ds[i] for i in bis]).to(device))[0]\n", - " bims = [images[i] for i in bis]\n", - " results.collect(bims, predictions, labels=[labels[i][0] for i in bis])\n", - "results.evaluate()\n", - "pass" + "for ax, path, prediction in zip(axes.flat, images, predictions, strict=False):\n", + " label, confidence = prediction.label[0], prediction.confidence[0]\n", + " with Image.open(path) as image:\n", + " ax.imshow(image.convert(\"RGB\"))\n", + " ax.set_title(f\"{label} ({confidence:.1%})\", fontsize=6)\n", + "plt.tight_layout()\n", + "plt.show()\n" ] } ], diff --git a/examples/mnist.ipynb b/examples/mnist.ipynb index 491fe4c..968357a 100644 --- a/examples/mnist.ipynb +++ b/examples/mnist.ipynb @@ -19,7 +19,18 @@ "metadata": {}, "outputs": [], "source": [ - "!python -m examples.mnist.construct" + "import os\n", + "from pathlib import Path\n", + "import subprocess\n", + "import sys\n", + "\n", + "ROOT = Path.cwd()\n", + "if ROOT.name == \"examples\":\n", + " ROOT = ROOT.parent\n", + "if not (ROOT / \"pyproject.toml\").is_file():\n", + " raise RuntimeError(\"Start this notebook in the repository root or examples directory.\")\n", + "subprocess.run([sys.executable, \"-m\", \"examples.mnist.construct\"], cwd=ROOT, check=True)\n", + "os.chdir(ROOT / \"examples\")\n" ] }, { @@ -27,7 +38,10 @@ "id": "3f10b434", "metadata": {}, "source": [ - "# Create long-tail dataset" + "# Optional long-tail preparation\n", + "\n", + "This constructs a separate training directory and illustrates its distribution.\n", + "The training commands below use the original balanced `mnist/train` directory.\n" ] }, { @@ -170,7 +184,10 @@ "id": "669af305", "metadata": {}, "source": [ - "# Manual model loading" + "# Batched Python inference\n", + "\n", + "After training, restore the checkpoint and use the same loader/preprocessing path\n", + "as the CLI. This small demonstration uses CPU when CUDA is unavailable.\n" ] }, { @@ -183,13 +200,32 @@ "import torch\n", "\n", "from mini_trainer.builders import BaseBuilder\n", + "from mini_trainer.modeling import classification_module, predict\n", "\n", - "device, dtype = torch.device(\"cuda:0\"), torch.float32\n", - "\n", - "# mini_trainer.classifier.Classifier.build can equally be used\n", - "model, mproc = BaseBuilder.build_model(weights=\"mnist/mnist_model/weights/last.pt\", device=device, dtype=dtype)\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "model, preprocess = BaseBuilder.build_model(\n", + " weights=\"mnist/mnist_model/weights/last.pt\", device=device, dtype=torch.float32\n", + ")\n", "model.eval()\n", - "pass" + "\n", + "# Use actual files; filenames need not encode their class or be consecutive.\n", + "images = [\n", + " str(path)\n", + " for folder in sorted(Path(\"mnist/test\").iterdir()) if folder.is_dir()\n", + " for path in [p for p in sorted(folder.iterdir())\n", + " if p.suffix.lower() in {\".png\", \".jpg\", \".jpeg\"}][:5]\n", + "]\n", + "images = images[:50]\n", + "if not images:\n", + " raise RuntimeError(\"Construct the test dataset before running inference.\")\n", + "loader = BaseBuilder.build_inference_dataloader(\n", + " images=images, batch_size=16, num_workers=0, device=device, dtype=torch.float32,\n", + " resize_size=classification_module(model).metadata[\"resize_size\"],\n", + ")\n", + "predictions = []\n", + "with torch.inference_mode():\n", + " for batch in loader:\n", + " predictions.extend(predict(model, preprocess(batch).to(device)))\n" ] }, { @@ -197,8 +233,10 @@ "id": "cf590475", "metadata": {}, "source": [ - "## Manual inference with `mini_trainer` in Python\n", - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" + "## Display predictions\n", + "\n", + "Ground-truth digit labels come from the test folders. Saved figures are historical\n", + "illustrations; rerun this cell for the predictions of your loaded checkpoint.\n" ] }, { @@ -220,99 +258,19 @@ ], "source": [ "from matplotlib import pyplot as plt\n", - "from matplotlib.axes import Axes\n", - "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.modeling import predict\n", - "\n", - "images = [f\"mnist/test/{i % 10}/{i}.png\" for i in range(50)]\n", - "ds = LazyDataset(mproc, images)\n", + "from PIL import Image\n", "\n", - "fig, axs = plt.subplots(5, 10, figsize=(7.5, 5))\n", - "for i, ax in enumerate(axs.flatten()):\n", - " tim = ds[i]\n", - " with torch.inference_mode():\n", - " x = tim.unsqueeze(0).to(device)\n", - " prediction = predict(model, x, 3)[0]\n", - " if not isinstance(ax, Axes):\n", - " raise TypeError()\n", - " correct = prediction[0].label == str(i % 10)\n", - " ax.matshow(x[0, 0, ...].cpu())\n", - " ax.set_title(\n", - " f\"{prediction[0].label} ({prediction[0].confidence:.1%})\",\n", - " pad=0,\n", - " y=1.025,\n", - " fontdict={\"fontsize\": 8, \"color\": \"green\" if correct else \"red\"},\n", - " )\n", + "fig, axes = plt.subplots(5, 10, figsize=(10, 5))\n", + "for ax in axes.flat:\n", " ax.axis(\"off\")\n", - "\n", - "plt.tight_layout(pad=0)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "7ab0f44e", - "metadata": {}, - "source": [ - "*The manual inference for this demo is not implemented in the most optimal way for sake of simplicity*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9a4a2e1c", - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "from mini_trainer.data.io import LazyDataset\n", - "from mini_trainer.logging import BaseResultCollector\n", - "from mini_trainer.modeling import predict\n", - "\n", - "results = BaseResultCollector(model=model, verbose=True)\n", - "images = [f\"mnist/test/{(i + 1) % 10}/{i}.png\" for i in range(500)]\n", - "ds = LazyDataset(mproc, images)\n", - "for b in range(len(ds) // 5):\n", - " bis = list(range(b * 5, b * 5 + 5))\n", - " with torch.no_grad():\n", - " predictions = predict(model, torch.stack([ds[i] for i in bis]).to(device), 1)\n", - " bims = [images[i] for i in bis]\n", - " results.collect(bims, predictions, labels=[im.split(\"/\")[-2] for im in bims])\n", - "results.evaluate()\n", - "pass" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ddb5af3d", - "metadata": {}, - "outputs": [], - "source": [ - "r = {str(i): [] for i in range(10)}\n", - "for pred, lab in zip(results.preds, results.labels):\n", - " r[lab].append(pred == lab)\n", - "\n", - "pc_acc = {int(k): sum(v) / len(v) for k, v in r.items()}\n", - "\n", - "cls, acc = zip(*sorted(pc_acc.items()))\n", - "plt.scatter(REAL_FREQ, acc)\n", - "for f, a, c in zip(REAL_FREQ, acc, cls):\n", - " plt.text(f, a - 0.05, str(c))\n", - "\n", - "breaks = [(i * 4) / 100 for i in range(25)]\n", - "breaks = [br for br in breaks if br <= max(REAL_FREQ)]\n", - "plt.xticks(breaks, [f\"{br:.0%}\" for br in breaks])\n", - "plt.xlabel(\"Training Frequency\")\n", - "\n", - "breaks = [(i * 5) / 100 for i in range(21)]\n", - "plt.yticks(breaks, [f\"{br:.0%}\" for br in breaks])\n", - "plt.ylabel(\"Class accuracy\")\n", - "\n", - "plt.title(\"MNIST long-tailed accuracy\")\n", - "plt.show()" + "for ax, path, prediction in zip(axes.flat, images, predictions, strict=False):\n", + " label, confidence = prediction.label, prediction.confidence\n", + " correct = label == Path(path).parent.name\n", + " with Image.open(path) as image:\n", + " ax.imshow(image.convert(\"RGB\"))\n", + " ax.set_title(f\"{label} ({confidence:.1%})\", fontsize=8, color=\"green\" if correct else \"red\")\n", + "plt.tight_layout()\n", + "plt.show()\n" ] } ], From 985f917716baf966dfaa712829acea50c4e1abe5 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:18:08 +0200 Subject: [PATCH 124/221] fix: keep example cleanup within registered output paths --- examples/utils.py | 7 ++++ tests/examples/test_cleanup.py | 71 ++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 tests/examples/test_cleanup.py diff --git a/examples/utils.py b/examples/utils.py index 41aa9a1..6844955 100644 --- a/examples/utils.py +++ b/examples/utils.py @@ -37,6 +37,13 @@ def __exit__(self, exc_type, exc_val, exc_tb): # Use a running count since we don't know exactly how many files made it to disk with tqdm(desc="Cleaning up", unit="item") as pbar: for path in self.paths_to_clean: + if os.path.islink(path): + try: + os.remove(path) + pbar.update(1) + except OSError as e: + print(f"\nError deleting link {path}: {e}") + continue if not os.path.exists(path): continue diff --git a/tests/examples/test_cleanup.py b/tests/examples/test_cleanup.py new file mode 100644 index 0000000..a0fef18 --- /dev/null +++ b/tests/examples/test_cleanup.py @@ -0,0 +1,71 @@ +"""Dataset construction owns partial outputs, never successful or unregistered data.""" + +import pytest + +from examples.utils import CleanupOnFailure + + +def test_success_retains_registered_output(tmp_path): + output = tmp_path / "complete" + output.write_text("data") + with CleanupOnFailure() as cleanup: + cleanup.register(output) + assert output.read_text() == "data" + + +@pytest.mark.parametrize("error", [RuntimeError("failed"), KeyboardInterrupt(), SystemExit(1)]) +def test_failure_removes_only_registered_partial_outputs(tmp_path, error): + partial = tmp_path / "partial" + (partial / "nested").mkdir(parents=True) + (partial / "nested/image").write_text("partial") + file = tmp_path / "partial-file" + file.touch() + retained = tmp_path / "retained" + retained.write_text("keep") + with pytest.raises(type(error)) as raised, CleanupOnFailure() as cleanup: + for path in (partial, file, retained, tmp_path / "missing"): + cleanup.register(path) + cleanup.unregister(retained) + raise error + assert raised.value is error + assert not partial.exists() and not file.exists() + assert retained.read_text() == "keep" + + +def test_cleanup_error_does_not_mask_failure_or_skip_later_paths(tmp_path, monkeypatch, capsys): + from examples import utils + + blocked, removable = tmp_path / "blocked", tmp_path / "removable" + blocked.touch() + removable.touch() + remove = utils.os.remove + + def deny_one(path): + if path == blocked: + raise PermissionError("access denied") + remove(path) + + monkeypatch.setattr(utils.os, "remove", deny_one) + original = ValueError("construction failed") + with pytest.raises(ValueError) as raised, CleanupOnFailure() as cleanup: + cleanup.register(blocked) + cleanup.register(removable) + raise original + assert raised.value is original + assert blocked.exists() and not removable.exists() + assert "access denied" in capsys.readouterr().out + + +@pytest.mark.parametrize("dangling", [False, True]) +def test_registered_link_does_not_delete_its_target(tmp_path, dangling): + target = tmp_path / "outside" + target.mkdir() + data = target / "image" + data.write_text("keep") + link = tmp_path / "partial-link" + link.symlink_to(tmp_path / "missing" if dangling else target, target_is_directory=True) + with pytest.raises(RuntimeError), CleanupOnFailure() as cleanup: + cleanup.register(link) + raise RuntimeError("construction failed") + assert not link.is_symlink() + assert data.read_text() == "keep" From 3a2096a9bc82cbb00c2a266e77a93f3dbacad01c Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:19:08 +0200 Subject: [PATCH 125/221] refactor: delegate example cleanup to shutil --- examples/utils.py | 63 +++++++++++------------------------------------ 1 file changed, 15 insertions(+), 48 deletions(-) diff --git a/examples/utils.py b/examples/utils.py index 6844955..9fef885 100644 --- a/examples/utils.py +++ b/examples/utils.py @@ -31,54 +31,21 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - if exc_type is not None and self.paths_to_clean: - print("\nCleaning up partial/corrupted files due to interruption or failure...") - - # Use a running count since we don't know exactly how many files made it to disk - with tqdm(desc="Cleaning up", unit="item") as pbar: - for path in self.paths_to_clean: - if os.path.islink(path): - try: - os.remove(path) - pbar.update(1) - except OSError as e: - print(f"\nError deleting link {path}: {e}") - continue - if not os.path.exists(path): - continue - - if os.path.isdir(path): - # Walk the directory bottom-up so empty subdirectories can be removed - for root, dirs, files in os.walk(path, topdown=False): - # 1. Delete all files in the current folder - for name in files: - try: - os.remove(os.path.join(root, name)) - pbar.update(1) - except OSError as e: - print(f"\nError deleting file {name}: {e}") - - # 2. Delete all now-empty subdirectories in the current folder - for name in dirs: - try: - os.rmdir(os.path.join(root, name)) - pbar.update(1) - except OSError as e: - print(f"\nError deleting directory {name}: {e}") - - # 3. Finally, remove the top-level directory itself - try: - os.rmdir(path) - pbar.update(1) - except OSError as e: - print(f"\nError deleting root directory {path}: {e}") - else: - # Standard single-file deletion - try: - os.remove(path) - pbar.update(1) - except OSError as e: - print(f"\nError deleting file {path}: {e}") + if exc_type is None or not self.paths_to_clean: + return + print("\nCleaning up partial/corrupted files due to interruption or failure...") + + def report_error(function, path, error): + print(f"\nError deleting {path}: {error}") + + for path in tqdm(self.paths_to_clean, desc="Cleaning up", unit="path"): + try: + if os.path.isdir(path) and not os.path.islink(path): + shutil.rmtree(path, onexc=report_error) + elif os.path.lexists(path): + os.remove(path) + except OSError as error: + report_error(None, path, error) def download_with_progress(url, dst, max_workers=8): From 42f93b8f3a13b8304a3f4604a47542a6aa9af16d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:29:26 +0200 Subject: [PATCH 126/221] refactor: share release figure export mechanics --- dev/releases/mambo_v3/acceleration_report.py | 8 +++----- dev/releases/mambo_v3/comparison_charts.py | 8 +++----- dev/releases/mambo_v3/composed_report.py | 8 +++----- dev/releases/mambo_v3/defaults_report.py | 19 +++++++------------ dev/releases/mambo_v3/figure_export.py | 12 ++++++++++++ dev/releases/mambo_v3/frequency_comparison.py | 8 +++----- dev/releases/mambo_v3/promoted_report.py | 8 +++----- dev/releases/mambo_v3/tail_charts.py | 14 ++++---------- dev/releases/mambo_v3/threshold_report.py | 8 +++----- 9 files changed, 41 insertions(+), 52 deletions(-) create mode 100644 dev/releases/mambo_v3/figure_export.py diff --git a/dev/releases/mambo_v3/acceleration_report.py b/dev/releases/mambo_v3/acceleration_report.py index 5353b17..3dad3ac 100644 --- a/dev/releases/mambo_v3/acceleration_report.py +++ b/dev/releases/mambo_v3/acceleration_report.py @@ -13,6 +13,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import METRIC_SCHEMA +from .figure_export import save_figure + METRICS = ("accuracy", "precision", "recall", "f1", "micro_accuracy", "theilU", "coverage") @@ -142,11 +144,7 @@ def render(data, output): def save(fig, name, note): fig.text(0.02, 0.02, note, fontsize=9, color="#555555") - svg = output / f"{name}.svg" - fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) - plt.close(fig) + save_figure(fig, output, name) fig, axes = plt.subplots(2, 2, figsize=(12, 8)) for col, backend in enumerate(("torch", "onnx")): diff --git a/dev/releases/mambo_v3/comparison_charts.py b/dev/releases/mambo_v3/comparison_charts.py index 9e20fdb..1bd315b 100644 --- a/dev/releases/mambo_v3/comparison_charts.py +++ b/dev/releases/mambo_v3/comparison_charts.py @@ -14,6 +14,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import METRIC_SCHEMA +from .figure_export import save_figure + REGIONS = ("north_europe", "europe", "full") REGION_LABELS = ("Northern Europe", "Europe", "Global") MODELS = ("v2", "v3-torch", "v3-onnx") @@ -188,11 +190,7 @@ def charts(data, output): def save(fig, name, note): fig.text(0.02, 0.025, note, fontsize=9, color="#555555") - svg = output / f"{name}.svg" - fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=160) - plt.close(fig) + save_figure(fig, output, name) fig, axes = plt.subplots(2, 2, figsize=(12, 7.5)) axes = axes.ravel() diff --git a/dev/releases/mambo_v3/composed_report.py b/dev/releases/mambo_v3/composed_report.py index 1575740..55d7342 100644 --- a/dev/releases/mambo_v3/composed_report.py +++ b/dev/releases/mambo_v3/composed_report.py @@ -4,6 +4,8 @@ import json from pathlib import Path +from .figure_export import save_figure + SERIES = ( ("v2", "MAMBO v2", "#8064a2"), ("torch", "V3 single view", "#777777"), @@ -72,11 +74,7 @@ def render(data, output): fontsize=10, ) fig.tight_layout(rect=(0, 0.11, 1, 0.91)) - path = output / "mambo-composed-tta.svg" - fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) - path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-composed-tta.png", dpi=150, bbox_inches="tight") - plt.close(fig) + save_figure(fig, output, "mambo-composed-tta", dpi=150) def tables(data, output): diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py index 4e5621d..cf232c5 100644 --- a/dev/releases/mambo_v3/defaults_report.py +++ b/dev/releases/mambo_v3/defaults_report.py @@ -11,6 +11,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import REVISION +from .figure_export import save_figure + SERIES = ( ("v2", "MAMBO v2", "#8064a2"), ("torch", "V3 PyTorch", "#098e92"), @@ -84,13 +86,6 @@ def render(data, output): output.mkdir(parents=True, exist_ok=True) plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-defaults-v1", "axes.spines.top": False, "axes.spines.right": False}) - def save(fig, name): - svg = output / f"{name}.svg" - fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(output / f"{name}.png", dpi=160, bbox_inches="tight") - plt.close(fig) - for level, rank in enumerate(("species", "genus", "family")): for scope in ("all", "known"): fig, axes = plt.subplots(2, 2, figsize=(13, 8)) @@ -131,7 +126,7 @@ def save(fig, name): ) fig.tight_layout(rect=(0, 0.10, 1, 0.88)) suffix = "" if rank == "species" else f"-{rank}" - save(fig, f"mambo-defaults-quality{suffix}-{scope}") + save_figure(fig, output, f"mambo-defaults-quality{suffix}-{scope}") scores = {(r["model"], r["preset"]): r["scores"]["all"] for r in data["quality"]} rank_metrics = (("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1)) @@ -161,7 +156,7 @@ def save(fig, name): fontsize=9, ) fig.tight_layout(rect=(0, 0.09, 1, 0.96)) - save(fig, "mambo-defaults-ranks-all") + save_figure(fig, output, "mambo-defaults-ranks-all") fig, axes = plt.subplots(3, 2, figsize=(11, 9)) steps = (("full", "europe"), ("europe", "north_europe")) @@ -211,7 +206,7 @@ def save(fig, name): fontsize=9, ) fig.tight_layout(rect=(0, 0.10, 1, 0.89)) - save(fig, "mambo-defaults-regional-effect") + save_figure(fig, output, "mambo-defaults-regional-effect") fig, axes = plt.subplots(1, 2, figsize=(12, 5.5)) for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): @@ -253,7 +248,7 @@ def save(fig, name): fontsize=9, ) fig.tight_layout(rect=(0, 0.16, 1, 0.85)) - save(fig, "mambo-defaults-speed") + save_figure(fig, output, "mambo-defaults-speed") fig, axes = plt.subplots(1, 2, figsize=(11, 5)) for ax, device in zip(axes, ("cpu", "cuda:0"), strict=True): @@ -278,7 +273,7 @@ def save(fig, name): fontsize=9, ) fig.tight_layout(rect=(0, 0.12, 1, 0.93)) - save(fig, "mambo-defaults-memory") + save_figure(fig, output, "mambo-defaults-memory") with (output / "mambo-defaults-metrics.csv").open("w", newline="") as stream: writer = csv.writer(stream, lineterminator="\n") diff --git a/dev/releases/mambo_v3/figure_export.py b/dev/releases/mambo_v3/figure_export.py new file mode 100644 index 0000000..352e010 --- /dev/null +++ b/dev/releases/mambo_v3/figure_export.py @@ -0,0 +1,12 @@ +"""Shared SVG and PNG export for release reports.""" + + +def save_figure(fig, output, name, *, dpi=160): + """Save a figure without SVG timestamps or trailing whitespace, then close it.""" + import matplotlib.pyplot as plt + + svg = output / f"{name}.svg" + fig.savefig(svg, bbox_inches="tight", metadata={"Date": None}) + svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") + fig.savefig(output / f"{name}.png", bbox_inches="tight", dpi=dpi) + plt.close(fig) diff --git a/dev/releases/mambo_v3/frequency_comparison.py b/dev/releases/mambo_v3/frequency_comparison.py index 671a236..c6b4ef7 100644 --- a/dev/releases/mambo_v3/frequency_comparison.py +++ b/dev/releases/mambo_v3/frequency_comparison.py @@ -13,6 +13,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import REVISION, finite_json +from .figure_export import save_figure + BINS = { "training": [(0, 1), (1, 25), (25, 100), (100, 500), (500, 2000), (2000, 10000), (10000, None)], "flemming": [(1, 5), (5, 20), (20, 100), (100, 500), (500, None)], @@ -180,11 +182,7 @@ def render(args): ) fig.tight_layout(rect=(0, 0.08, 1, 0.91)) args.output.mkdir(parents=True, exist_ok=True) - svg = args.output / "mambo-frequency-accuracy.svg" - fig.savefig(svg, metadata={"Date": None}, bbox_inches="tight") - svg.write_text("\n".join(line.rstrip() for line in svg.read_text().splitlines()) + "\n") - fig.savefig(args.output / "mambo-frequency-accuracy.png", dpi=160, bbox_inches="tight") - plt.close(fig) + save_figure(fig, args.output, "mambo-frequency-accuracy") if __name__ == "__main__": diff --git a/dev/releases/mambo_v3/promoted_report.py b/dev/releases/mambo_v3/promoted_report.py index 8904f14..ecd9e4c 100644 --- a/dev/releases/mambo_v3/promoted_report.py +++ b/dev/releases/mambo_v3/promoted_report.py @@ -14,6 +14,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.tail_report import collect +from .figure_export import save_figure + def quality(source, output): data = json.loads(source.read_text()) @@ -180,11 +182,7 @@ def render_speed(data, output): fontsize=9, ) fig.tight_layout(rect=(0, 0.15, 1, 0.84)) - path = output / "mambo-promoted-speed.svg" - fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) - path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-promoted-speed.png", dpi=140, bbox_inches="tight") - plt.close(fig) + save_figure(fig, output, "mambo-promoted-speed", dpi=140) if __name__ == "__main__": diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index c00cf06..9007044 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -6,6 +6,8 @@ from dev.releases.mambo_v3.defaults_report import SERIES +from .figure_export import save_figure + def render(data, output): import matplotlib @@ -65,11 +67,7 @@ def render(data, output): ) fig.tight_layout(rect=(0, 0.10, 1, 0.92)) output.mkdir(parents=True, exist_ok=True) - path = output / "mambo-defaults-tail.svg" - fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) - path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-defaults-tail.png", dpi=160, bbox_inches="tight") - plt.close(fig) + save_figure(fig, output, "mambo-defaults-tail") def render_paired(data, output): @@ -144,11 +142,7 @@ def render_paired(data, output): ) fig.tight_layout(rect=(0, 0.10, 1, 0.91)) output.mkdir(parents=True, exist_ok=True) - path = output / "mambo-threshold-tail.svg" - fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) - path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") - fig.savefig(output / "mambo-threshold-tail.png", dpi=150, bbox_inches="tight") - plt.close(fig) + save_figure(fig, output, "mambo-threshold-tail", dpi=150) if __name__ == "__main__": diff --git a/dev/releases/mambo_v3/threshold_report.py b/dev/releases/mambo_v3/threshold_report.py index fac45ec..ca5aa61 100644 --- a/dev/releases/mambo_v3/threshold_report.py +++ b/dev/releases/mambo_v3/threshold_report.py @@ -15,6 +15,8 @@ from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import REVISION, finite_json +from .figure_export import save_figure + SOURCES = { "v2": "mambo-release-comparison-quality/v2-full", "torch": "mambo-accelerated-quality/torch-cuda-0-prediction", @@ -201,11 +203,7 @@ def save(fig, name): "Calibration/report split is image-level; TTA was previously selected using a subset of Flemming.", fontsize=9, ) - path = output / f"{name}.svg" - fig.savefig(path, bbox_inches="tight", metadata={"Date": None}) - path.write_text("\n".join(line.rstrip() for line in path.read_text().splitlines()) + "\n") - fig.savefig(output / f"{name}.png", dpi=140, bbox_inches="tight") - plt.close(fig) + save_figure(fig, output, name, dpi=140) fig, axes = plt.subplots(3, 2, figsize=(12, 10)) for level, rank in enumerate(RANKS): From d4d4ca720faf5d40ef859ce6d23a05b8173f7c87 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:34:38 +0200 Subject: [PATCH 127/221] test: consolidate dendrogram metadata coverage --- tests/utils/test_dendrogram.py | 45 ++++++++++++- tests/utils/test_plot.py | 113 ++------------------------------- 2 files changed, 51 insertions(+), 107 deletions(-) diff --git a/tests/utils/test_dendrogram.py b/tests/utils/test_dendrogram.py index 9a60131..1355348 100644 --- a/tests/utils/test_dendrogram.py +++ b/tests/utils/test_dendrogram.py @@ -1,4 +1,4 @@ -"""Large-tree plotting regressions; no network or model downloads.""" +"""Dendrogram metadata and rendering regressions; no network or model downloads.""" import io import sys @@ -7,10 +7,12 @@ import numpy as np import pytest +import torch from matplotlib import pyplot as plt from matplotlib import rc_context import mini_trainer.visualization.dendrogram as d +from mini_trainer.visualization import plot_probabilistic_dendrogram from mini_trainer.visualization._dendrogram_layout import linkage_layout pytestmark = pytest.mark.skipif(not d._HAS_DENDROGRAM_DEPS, reason="Optional dendrogram dependencies missing") @@ -24,6 +26,47 @@ def offline_labels(monkeypatch): d._resolve_labels.cache_clear() +@pytest.mark.parametrize( + "metadata", + [ + pytest.param({"idx2cls": dict(enumerate(("5219173", "2435261", "7429082", "9117798")))}, id="flat"), + pytest.param( + { + "cls2idx": { + "0": { + "Carnivora - Canidae - dog": 0, + "Carnivora - Felidae - cat": 1, + "Rodentia - Muridae - mouse": 2, + "Perissodactyla - Equidae - horse": 3, + } + } + }, + id="hierarchical-json", + ), + pytest.param( + { + "idx2cls": { + 0: {"order": "Carnivora", "species": "dog"}, + 1: {"order": "Carnivora", "species": "cat"}, + 2: {"order": "Rodentia", "species": "mouse"}, + 3: {"order": "Perissodactyla", "species": "horse"}, + } + }, + id="dictionary-labels", + ), + ], +) +def test_model_metadata_forms_render_offline(metadata, monkeypatch): + monkeypatch.setattr(d, "classification_module", lambda _: MagicMock(metadata=metadata)) + monkeypatch.setattr(d, "class_distance", lambda _: [torch.ones(4, 4) - torch.eye(4)]) + fig, info = plot_probabilistic_dendrogram(None)[0] + try: + assert isinstance(info, dict) and all(len(values) == 4 for values in info.values()) + assert len(fig.axes[0].texts) == 4 + finally: + plt.close(fig) + + def test_iterative_layout_matches_existing_newick_geometry(): from Bio import Phylo diff --git a/tests/utils/test_plot.py b/tests/utils/test_plot.py index 23e58df..145391e 100644 --- a/tests/utils/test_plot.py +++ b/tests/utils/test_plot.py @@ -1,126 +1,27 @@ -import importlib.util -from unittest.mock import MagicMock, patch - import numpy as np import pytest -import torch from mini_trainer.training import raw_confusion_matrix -from mini_trainer.visualization import plot_probabilistic_dendrogram from mini_trainer.visualization.plot import ( + MIN_DISPLAY_DIM_HEATMAP, _aggregate_matrix_max, _get_scaled_matrix_for_display, ) -has_dendrogram_deps = ( - importlib.util.find_spec("scipy") is not None - and importlib.util.find_spec("Bio") is not None - and importlib.util.find_spec("pycirclize") is not None -) - def test_raw_confusion_matrix(): - # 3 classes: 0, 1, 2 - labels = [0, 1, 2, 0] - preds = [0, 1, 0, 0] - - # Class 0: 2 instances. Both predicted as 0. Correct: 2. Total: 2. - # Class 1: 1 instance. Predicted as 1. Correct: 1. Total: 1. - # Class 2: 1 instance. Predicted as 0. Correct: 0. Total: 1. - - # Confusion matrix (normalized by row/true label) - # Row 0: 2/2 -> column 0=1.0 - # Row 1: 1/1 -> column 1=1.0 - # Row 2: 1 total. Pred 0. -> column 0=1.0 - - cm = raw_confusion_matrix(labels, preds, n_classes=3) - - assert cm.shape == (3, 3) - assert cm[0, 0] == 1.0 - assert cm[1, 1] == 1.0 - assert cm[2, 0] == 1.0 - assert cm[2, 2] == 0.0 + cm = raw_confusion_matrix([0, 1, 2, 0], [0, 1, 0, 0], n_classes=3) + np.testing.assert_array_equal(cm, [[1, 0, 0], [0, 1, 0], [1, 0, 0]]) def test_aggregate_matrix_max(): - mat = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) - # Aggregate 2x2 blocks by max - # Block (0,0): [[1,2],[5,6]] -> max 6 - # Block (0,1): [[3,4],[7,8]] -> max 8 - # Block (1,0): [[9,10],[13,14]] -> max 14 - # Block (1,1): [[11,12],[15,16]] -> max 16 - - agg = _aggregate_matrix_max(mat, (2, 2)) - expected = np.array([[6, 8], [14, 16]]) - np.testing.assert_array_equal(agg, expected) + mat = np.arange(1, 17).reshape(4, 4) + np.testing.assert_array_equal(_aggregate_matrix_max(mat, (2, 2)), [[6, 8], [14, 16]]) def test_get_scaled_matrix_for_display(): - # Create large matrix - mat = np.zeros((100, 100)) - scaled = _get_scaled_matrix_for_display(mat) - # Should scale up to meet MIN_DISPLAY_DIM_HEATMAP (500) - # 100 < 500. So upscaled by at least 5x5 blocks. - assert scaled.shape[0] >= 500 - assert scaled.shape[1] >= 500 - - -@pytest.mark.skipif(not has_dendrogram_deps, reason="Dendrogram dependencies (scipy, biopython, pycirclize) not installed") -def test_plot_probabilistic_dendrogram(monkeypatch): - import mini_trainer.visualization.dendrogram as dendrogram - - dendrogram._resolve_labels.cache_clear() - monkeypatch.setattr(dendrogram, "resolve_name_or_id", MagicMock(side_effect=ValueError("offline test labels"))) - mock_model = MagicMock() - mock_model_module = MagicMock() - - # 1. Test flat metadata dictionary - mock_model_module.metadata = {"idx2cls": {0: "5219173", 1: "2435261", 2: "7429082", 3: "9117798"}} - - dummy = torch.rand(4, 4) - dummy = dummy + dummy.T # Make it symmetric - dummy.fill_diagonal_(0) # Make diagonal zero - dummy = [dummy] - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) - - # 2. Test hierarchical metadata dictionary (e.g. from JSON) - mock_model_module.metadata = { - "cls2idx": { - "0": { - "Carnivora - Canidae - dog": 0, - "Carnivora - Felidae - cat": 1, - "Rodentia - Muridae - mouse": 2, - "Perissodactyla - Equidae - horse": 3, - } - } - } - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) - - # 3. Test pathological hierarchical metadata with unhashable dictionaries directly in idx2cls - mock_model_module.metadata = { - "idx2cls": { - 0: {"order": "Carnivora", "species": "dog"}, - 1: {"order": "Carnivora", "species": "cat"}, - 2: {"order": "Rodentia", "species": "mouse"}, - 3: {"order": "Perissodactyla", "species": "horse"}, - } - } - - with patch("mini_trainer.visualization.dendrogram.classification_module", return_value=mock_model_module): - with patch("mini_trainer.visualization.dendrogram.class_distance", return_value=dummy): - fig, clustering = plot_probabilistic_dendrogram(mock_model)[0] - assert fig is not None - assert isinstance(clustering, dict) and all(len(v) == 4 for v in clustering.values()) + scaled = _get_scaled_matrix_for_display(np.zeros((100, 100))) + assert min(scaled.shape) >= MIN_DISPLAY_DIM_HEATMAP @pytest.mark.parametrize("cmap_name", ["magma", "viridis"]) From 029ce2dc2bc18251be4be65cdac77c7b7b62c6db Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:40:50 +0200 Subject: [PATCH 128/221] refactor: retire unused contrastive loss prototype --- mini_trainer/modeling/contrastive.py | 96 ---------------------------- mini_trainer/trainer.py | 6 -- mini_trainer/training/loss.py | 78 ++++++---------------- 3 files changed, 20 insertions(+), 160 deletions(-) delete mode 100644 mini_trainer/modeling/contrastive.py diff --git a/mini_trainer/modeling/contrastive.py b/mini_trainer/modeling/contrastive.py deleted file mode 100644 index 1a78137..0000000 --- a/mini_trainer/modeling/contrastive.py +++ /dev/null @@ -1,96 +0,0 @@ -"""Author: Yonglong Tian (yonglong@mit.edu) -Date: May 07, 2020 -From: https://github.com/HobbitLong/SupContrast/blob/master/losses.py -""" - -import torch -import torch.nn as nn - -from .classifier import EmbeddingContext, SupervisionContext - - -class SupConLoss(nn.modules.loss._Loss): - """Supervised Contrastive Learning: https://arxiv.org/pdf/2004.11362.pdf. - It also supports the unsupervised contrastive loss in SimCLR. - """ - - def __init__( # noqa: D107 - self, temperature: float = 0.07, base_temperature: float = 0.07 - ): - super().__init__() - self.temperature = temperature - self.base_temperature = base_temperature - - def forward(self): - """Compute contrastive loss for model. - If both `labels` and `mask` are None, it degenerates to SimCLR unsupervised loss: - https://arxiv.org/pdf/2002.05709.pdf - - Args: - features: hidden vector of shape [bsz, n_views, ...]. - labels: ground truth of shape [bsz]. - mask: contrastive mask of shape [bsz, bsz], mask_{i,j}=1 if sample j - has the same class as sample i. Can be asymmetric. - - Returns: - A loss scalar. - """ - if not EmbeddingContext.active(): - raise RuntimeError("Contrastive loss cannot be computed when `EmbeddingContext` is not active.") - features = EmbeddingContext.get() - if features.ndim == 2: - features = features.unsqueeze(1) - assert features is not None - labels = SupervisionContext.get() - device = torch.device("cuda") if features.is_cuda else torch.device("cpu") - - if len(features.shape) < 3: - raise ValueError("`features` needs to be [bsz, n_views, ...],at least 3 dimensions are required") - if len(features.shape) > 3: - features = features.view(features.shape[0], features.shape[1], -1) - - batch_size = features.shape[0] - if labels is None: - mask = torch.eye(batch_size, dtype=torch.float32).to(device) - else: - labels = labels.contiguous().view(-1, 1) - if labels.shape[0] != batch_size: - raise ValueError("Num of labels does not match num of features") - mask = torch.eq(labels, labels.T).float().to(device) - - contrast_count = features.shape[1] - contrast_feature = torch.cat(torch.unbind(features, dim=1), dim=0) - - # compute logits - anchor_dot_contrast = torch.div(contrast_feature @ contrast_feature.T, self.temperature) - # for numerical stability - logits_max, _ = torch.max(anchor_dot_contrast, dim=1, keepdim=True) - logits = anchor_dot_contrast - logits_max.detach() - - # tile mask - mask = mask.repeat(contrast_count, contrast_count) - # mask-out self-contrast cases - logits_mask = torch.scatter(torch.ones_like(mask), 1, torch.arange(batch_size * contrast_count).view(-1, 1).to(device), 0) - mask = mask * logits_mask - - # # compute log_prob - # exp_logits = torch.exp(logits) * logits_mask - # log_prob = logits - torch.log(exp_logits.sum(1, keepdim=True)) - log_prob = logits - torch.logsumexp(logits + 1e-9 * (1 - mask), dim=1, keepdim=True) - - # compute mean of log-likelihood over positive - # modified to handle edge cases when there is no positive pair - # for an anchor point. - # Edge case e.g.:- - # features of shape: [4,1,...] - # labels: [0,1,1,2] - # loss before mean: [nan, ..., ..., nan] - mask_pos_pairs = mask.sum(1) - mask_pos_pairs = torch.where(mask_pos_pairs < 1e-6, 1, mask_pos_pairs) - mean_log_prob_pos = (mask * log_prob).sum(1) / mask_pos_pairs - - # loss - loss = -(self.temperature / self.base_temperature) * mean_log_prob_pos - loss = loss.view(contrast_count, batch_size).mean() - - return loss diff --git a/mini_trainer/trainer.py b/mini_trainer/trainer.py index 9777581..e82d3cb 100644 --- a/mini_trainer/trainer.py +++ b/mini_trainer/trainer.py @@ -28,10 +28,6 @@ save_on_master, ) -# from mini_trainer.contrastive import SupConLoss - -# contrastive_criterion = SupConLoss(temperature=25, base_temperature=25) - def _optimizer_step(optimizer: Optimizer, scaler: GradScaler) -> bool: """Step and update the scaler; report a completed, non-overflow optimizer step. @@ -134,8 +130,6 @@ def train_one_epoch( with autocast(device_type=device.type, dtype=dtype, enabled=dtype != torch.float32), SupervisionContext(target), EmbeddingContext(): logits = model(preprocess(augmentation(batch))) loss: list[torch.Tensor] | torch.Tensor = criterion(logits, target) - # TODO: Add optional contrastive path - # ctr_loss = contrastive_criterion() # If EMA is disabled ``distill_loss`` is ``0.0`` distill_loss = model_ema.teach(step=step, input=preprocess(batch), student=logits) if model_ema else 0.0 reg = regularizer(model) diff --git a/mini_trainer/training/loss.py b/mini_trainer/training/loss.py index c655ca9..10f75e4 100644 --- a/mini_trainer/training/loss.py +++ b/mini_trainer/training/loss.py @@ -8,10 +8,7 @@ class EvenCrossEntropyLoss(CrossEntropyLoss): - """A minimal wrapper around ``torch.nn.modules.loss.CrossEntropyLoss`` - that ensures that the size of the loss is more or less independent - from the number of classes. - """ + """Cross entropy divided by the log of the number of classes.""" def forward(self, input: torch.Tensor, target: torch.Tensor): max_CE = input.new_full((1,), input.size(1), requires_grad=False).log() @@ -19,34 +16,16 @@ def forward(self, input: torch.Tensor, target: torch.Tensor): class EMLACrossEntropy(torch.nn.CrossEntropyLoss): - """Entropy-Modulated Logit Adjusted (EMLA) Cross Entropy for Long-Tail Learning. - - This loss function dynamically applies the Logit Adjustment penalty proposed by - Menon et al. (2021) based on the model's instance-level confidence (Shannon Entropy). - - Standard Logit Adjustment applies a static penalty to rare classes to ensure - Fisher consistency for the balanced error. It enforces a large relative margin - between the logits of rare and dominant labels. However, applying this penalty - uniformly can disrupt early-stage feature learning or over-penalize genuinely ambiguous samples. - - This method introduces an instance-aware curriculum-learning gate: - 1. Calculates the exact Shannon Entropy of the raw logits using purely numerically - stable log-space arithmetic via the identity: log(softmax(z)) = z - LSE(z). - 2. Normalizes the entropy to a [0, 1] scale (where 0 is fully certain, 1 is uniform). - 3. Computes a 'confidence' score (1 - normalized_entropy) which is detached from the gradient. - 4. Scales the class prior penalty (tau * log(pi_y)) by this confidence score. - 5. Applies the modulated penalty to the raw logits before native Cross-Entropy normalization. - - Mechanics: - Unconfident predictions (e.g., early training or noisy samples) yield high entropy, - suppressing the penalty and allowing standard Empirical Risk Minimization (ERM). - Conversely, when the model becomes overconfident on a rare-attribute sample, - the low entropy triggers the full negative logit penalty, driving the softmax - probability to zero and generating a maximum-strength gradient to correct the boundary. - - References: - - Menon, A. K., Jain, H., Rawat, A. S., Veit, A., & Kumar, S. (2021). - Long-tail learning via logit adjustment. arXiv preprint arXiv:2007.07314. + """Cross entropy with a detached, entropy-gated class-frequency adjustment. + + Add ``(1 - H(softmax(input)) / log(C)) * adjustments`` to each sample's + logits, where ``C`` is its class count and ``adjustments`` contains centered + log class counts. Uncertain predictions receive less adjustment; uniform + counts produce no adjustment. The gate does not contribute gradients. + + Adapts logit adjustment from Menon et al. (2021), arXiv:2007.07314, with + this implementation's entropy gate. Quality trade-offs require evaluation + on the intended dataset; see docs/training-feature-validation.md. """ def __init__( @@ -54,30 +33,23 @@ def __init__( class_frequencies: list[int] | list[float] | np.ndarray | torch.Tensor, flatten: float = 0.0, weight: torch.Tensor | None = None, - ignore_index: int = -100, # Apparently `-100` is used instead of `None` in nn.CrossEntropy + ignore_index: int = -100, reduction: str = "mean", label_smoothing: float = 0.0, device: torch.types.Device = None, ) -> None: - """. - - Args: - class_frequencies: The raw frequency or count of each class in the training dataset. - flatten: Adjusts the weights (i.e. the inverse class frequencies, normalized) - such that they are a mixture of the uniform and the raw distribution with weight `flatten`. - weight: A manual rescaling weight given to each class. - ignore_index: Specifies a target value that is ignored and does not contribute to the input gradient. - reduction: Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. - label_smoothing: A float in [0.0, 1.0]. Specifies the amount of smoothing when computing the loss. - device: Device expected during training can optionally be passed, otherwise it will be inferred dynamically. + """Initialize adjustments from rounded class counts, clamped to at least one. + + ``flatten`` replaces counts ``c`` with ``flatten * sum(c) + + (1 - flatten) * c``; zero preserves counts and one makes them uniform. + ``device`` optionally fixes the adjustment device; otherwise forward + uses the input device. Other arguments pass through to CrossEntropyLoss. """ - # Initialize the parent nn.CrossEntropyLoss with all standard arguments super().__init__(weight=weight, ignore_index=ignore_index, reduction=reduction, label_smoothing=label_smoothing) self._device = device if isinstance(self._device, (int, str)): self._device = torch.device(self._device) - # Safely convert to a float tensor whether the input is a list or already a tensor if isinstance(class_frequencies, np.ndarray): class_frequencies = torch.from_numpy(class_frequencies) if isinstance(class_frequencies, (list, tuple)): @@ -94,19 +66,10 @@ def __init__( if self._device is not None: log_priors = log_priors.to(device=self._device) - # Register the base adjustments as a buffer so they move to the correct device self.register_buffer("adjustments", log_priors) def forward(self, input: torch.Tensor, target: torch.Tensor) -> torch.Tensor: - """. - - Args: - logits: Raw, unnormalized outputs of shape (Batch, Classes). - targets: Ground truth class indices of shape (Batch,). - - Returns: - The computed loss. - """ + """Apply the detached adjustment before cross entropy.""" # Uncertainty gate: 1.0 when confident, 0.0 when uncertain with torch.no_grad(): log_probs = input.log_softmax(dim=-1) @@ -129,8 +92,7 @@ def class_weight_distribution_regularization(W: torch.Tensor, sparse: bool = Tru W: Tensor of shape [num_classes, num_embeddings], typically the weights of the final linear layer. sparse: Use a sparse set of classes to compute the regularization over. - The size of the set will be equal to the square root of the number of classes. - Will use a random subset of classes each time. + Samples a bounded random subset on each call. Returns: A scalar tensor representing the regularization loss. From abc0949c75b83cdc0ee99876671974061a2fde4f Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:46:59 +0200 Subject: [PATCH 129/221] refactor: simplify backbone catalogue assembly --- mini_trainer/modeling/architectures/load.py | 120 +++++--------------- tests/modeling/test_architectures.py | 97 +++++++++------- 2 files changed, 82 insertions(+), 135 deletions(-) diff --git a/mini_trainer/modeling/architectures/load.py b/mini_trainer/modeling/architectures/load.py index b78e1f9..d36873f 100644 --- a/mini_trainer/modeling/architectures/load.py +++ b/mini_trainer/modeling/architectures/load.py @@ -16,11 +16,7 @@ class BackboneInfo(NamedTuple): - """Data container for a supported backbone model. - - Provides statically typed, attribute-based access (e.g. info.model) - and guaranteed ordering as a named tuple. - """ + """Backbone identifier, backend, dependency availability and blacklist status.""" model: str backend: str @@ -184,86 +180,43 @@ def get_model( def list_supported_backbones() -> list[BackboneInfo]: - """Generates a list of supported models, showing backend and availability status.""" + """List backend models, retaining unavailable examples and blacklist flags.""" + import torchvision + rows = [] blacklist = load_blacklist() - # 1. Torchvision - import torchvision + def append(backend, names, available, prefix=""): + rows.extend(BackboneInfo(prefix + name, backend, available, name in blacklist.get(backend, [])) for name in names) - tv_models = [] - if hasattr(torchvision.models, "list_models"): - tv_models = torchvision.models.list_models() - for m in tv_models: - rows.append( - BackboneInfo( - model=m, - backend="torchvision", - availability=True, - blacklisted=m in blacklist.get("torchvision", []), - ) - ) + tv_models = torchvision.models.list_models() if hasattr(torchvision.models, "list_models") else [] + append("torchvision", tv_models, True) - # 2. BioCLIP - has_open_clip = False try: import open_clip # noqa: F401 - - has_open_clip = True except ImportError: - pass - bioclip_versions = get_bioclip_models() - for version in bioclip_versions: - rows.append( - BackboneInfo( - model=f"bioclip:{version}", - backend="bioclip", - availability=has_open_clip, - blacklisted=version in blacklist.get("bioclip", []), - ) - ) + has_open_clip = False + else: + has_open_clip = True + append("bioclip", get_bioclip_models(), has_open_clip, "bioclip:") - # 3. Timm - has_timm = False try: import timm - - has_timm = True except ImportError: - pass - - if has_timm: - timm_models = timm.list_models() - for m in timm_models: - rows.append( - BackboneInfo( - model=f"timm:{m}", - backend="timm", - availability=True, - blacklisted=m in blacklist.get("timm", []), - ) - ) + timm_models = ["vit_tiny_patch16_224", "resnet10t", "efficientnet_b0", "convnext_tiny"] + has_timm = False else: - popular_timm = ["vit_tiny_patch16_224", "resnet10t", "efficientnet_b0", "convnext_tiny"] - for m in popular_timm: - rows.append( - BackboneInfo( - model=f"timm:{m}", - backend="timm", - availability=False, - blacklisted=m in blacklist.get("timm", []), - ) - ) - - # 4. Transformers - has_transformers = False + timm_models = timm.list_models() + has_timm = True + append("timm", timm_models, has_timm, "timm:") + try: from transformers.models.auto.configuration_auto import CONFIG_MAPPING from transformers.models.auto.modeling_auto import MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING - - has_transformers = True except ImportError: - pass + has_transformers = False + else: + has_transformers = True popular_transformers = { "vit": "google/vit-base-patch16-224", @@ -273,31 +226,12 @@ def list_supported_backbones() -> list[BackboneInfo]: "deit": "facebook/deit-tiny-patch16-224", "dinov2": "facebook/dinov2-base", } - if has_transformers: - supported_types = [] - for model_type, config_cls in CONFIG_MAPPING.items(): - if config_cls in MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING: - supported_types.append(model_type) - for m in sorted(supported_types): - repo = popular_transformers.get(m, f"google/{m}-base-patch16-224") - rows.append( - BackboneInfo( - model=f"hf-hub:{repo}", - backend="transformers", - availability=True, - blacklisted=repo in blacklist.get("transformers", []), - ) - ) + supported_types = sorted( + model_type for model_type, config_cls in CONFIG_MAPPING.items() if config_cls in MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING + ) + transformer_models = [popular_transformers.get(m, f"google/{m}-base-patch16-224") for m in supported_types] else: - for m, repo in sorted(popular_transformers.items()): - rows.append( - BackboneInfo( - model=f"hf-hub:{repo}", - backend="transformers", - availability=False, - blacklisted=repo in blacklist.get("transformers", []), - ) - ) - + transformer_models = [repo for _, repo in sorted(popular_transformers.items())] + append("transformers", transformer_models, has_transformers, "hf-hub:") return rows diff --git a/tests/modeling/test_architectures.py b/tests/modeling/test_architectures.py index 1e1a246..624892e 100644 --- a/tests/modeling/test_architectures.py +++ b/tests/modeling/test_architectures.py @@ -1,58 +1,69 @@ import importlib.util import os +import sys +from types import ModuleType import pytest import torch -from mini_trainer.modeling import get_model, list_supported_backbones +from mini_trainer.modeling import BackboneInfo, get_model, list_supported_backbones +from mini_trainer.modeling.architectures import load from mini_trainer.modeling.classifier import Classifier -# Skip all tests in this file if RUN_SLOW_TESTS is not 1 -pytestmark = pytest.mark.skipif( +slow = pytest.mark.skipif( os.environ.get("RUN_SLOW_TESTS") != "1", reason="Slow architecture tests skipped by default. Set RUN_SLOW_TESTS=1 to run.", ) -def test_list_supported_backbones(): - from mini_trainer.modeling import BackboneInfo - - backbones = list_supported_backbones() - assert isinstance(backbones, list) - assert len(backbones) > 0 - for b in backbones: - assert isinstance(b, BackboneInfo) - # Test attribute-based access - assert hasattr(b, "model") - assert isinstance(b.model, str) - assert isinstance(b.backend, str) - assert isinstance(b.availability, bool) - - # Test tuple sequence properties (ordering) - assert len(b) == 4 - assert b[0] == b.model - assert b[1] == b.backend - assert b[2] == b.availability - assert b[3] == b.blacklisted - - # Test unpacking (guaranteed ordering) - model, backend, availability, blacklisted = b - assert model == b.model - assert backend == b.backend - assert availability == b.availability - assert blacklisted == b.blacklisted - - # Test asdict support - d = b._asdict() - assert d["model"] == b.model - assert d["backend"] == b.backend - assert d["availability"] == b.availability - assert d["blacklisted"] == b.blacklisted - - backends = {b.backend for b in backbones} - assert "torchvision" in backends - - +@pytest.mark.parametrize("available", [False, True]) +def test_list_supported_backbones(available, monkeypatch): + import torchvision + + monkeypatch.setattr(torchvision.models, "list_models", lambda: ["shared", "tv-only"]) + monkeypatch.setattr(load, "get_bioclip_models", lambda: ["local", "blocked"]) + monkeypatch.setattr(load, "load_blacklist", lambda: {"timm": ["shared"], "bioclip": ["blocked"]}) + names = ( + "open_clip", + "timm", + "transformers", + "transformers.models", + "transformers.models.auto", + "transformers.models.auto.configuration_auto", + "transformers.models.auto.modeling_auto", + ) + modules = {name: ModuleType(name) for name in names} + modules["timm"].list_models = lambda: ["shared", "timm-only"] + supported, unsupported = object(), object() + modules[names[-2]].CONFIG_MAPPING = {"vit": supported, "not-an-image-model": unsupported, "swin": supported} + modules[names[-1]].MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING = {supported: object()} + for name, module in modules.items(): + monkeypatch.setitem(sys.modules, name, module if available else None) + + rows = list_supported_backbones() + assert all(isinstance(row, BackboneInfo) for row in rows) + assert rows[:4] == [ + ("shared", "torchvision", True, False), + ("tv-only", "torchvision", True, False), + ("bioclip:local", "bioclip", available, False), + ("bioclip:blocked", "bioclip", available, True), + ] + if available: + assert rows[4:] == [ + ("timm:shared", "timm", True, True), + ("timm:timm-only", "timm", True, False), + ("hf-hub:microsoft/swin-tiny-patch4-window7-224", "transformers", True, False), + ("hf-hub:google/vit-base-patch16-224", "transformers", True, False), + ] + else: + # Missing optional libraries still advertise examples, without promising availability. + assert {row.backend for row in rows[4:]} == {"timm", "transformers"} + for row in rows[4:]: + assert not row.availability and not row.blacklisted + assert row.model.startswith("timm:" if row.backend == "timm" else "hf-hub:") + + +@slow def test_torchvision_model(): model, classifier_name, preprocess_fn, embed_dim, _ = get_model("resnet18") assert classifier_name == "fc" @@ -73,6 +84,7 @@ def test_torchvision_model(): has_transformers = importlib.util.find_spec("transformers") is not None +@slow @pytest.mark.skipif(not has_timm, reason="timm package not installed") def test_timm_model(): # Explicit prefix @@ -97,6 +109,7 @@ def test_timm_model(): assert isinstance(embed_dim, int) +@slow @pytest.mark.skipif(not has_transformers, reason="transformers package not installed") def test_transformers_model(): # Load vit model offline to avoid hitting the internet From cc3f7c89d5cab2ee5c037a1831af2889534bfc7e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 11:53:58 +0200 Subject: [PATCH 130/221] docs: clarify backbone and classifier contracts --- .../modeling/architectures/bioclip.py | 2 +- mini_trainer/modeling/architectures/core.py | 21 +++++---- mini_trainer/modeling/architectures/load.py | 15 +++---- mini_trainer/modeling/architectures/timm.py | 2 +- .../modeling/architectures/torchvision.py | 2 +- .../modeling/architectures/transformers.py | 13 +----- mini_trainer/modeling/classifier.py | 45 ++++--------------- 7 files changed, 29 insertions(+), 71 deletions(-) diff --git a/mini_trainer/modeling/architectures/bioclip.py b/mini_trainer/modeling/architectures/bioclip.py index 27cada4..d9e31bd 100644 --- a/mini_trainer/modeling/architectures/bioclip.py +++ b/mini_trainer/modeling/architectures/bioclip.py @@ -50,7 +50,7 @@ def get_bioclip_model( def get_bioclip_models() -> list[str]: - """Dynamically fetches the list of BioCLIP model versions from Hugging Face.""" + """Discover BioCLIP versions on Hugging Face, falling back to known identifiers.""" fallback = ["bioclip", "bioclip-2", "bioclip-2.5-vith14", "bioclip-vit-b-16-inat-only"] try: from huggingface_hub import HfApi diff --git a/mini_trainer/modeling/architectures/core.py b/mini_trainer/modeling/architectures/core.py index 5b87240..a35215f 100644 --- a/mini_trainer/modeling/architectures/core.py +++ b/mini_trainer/modeling/architectures/core.py @@ -10,6 +10,7 @@ def _read_blacklist(): + """Use empty backend lists when the local blacklist is absent or unreadable.""" json_path = os.path.join(os.path.dirname(__file__), "blacklist.json") if os.path.exists(json_path): try: @@ -26,10 +27,7 @@ def _read_blacklist(): def resolve_embedding_dim( model: nn.Module, head_name: str, preprocess: Callable[[torch.Tensor], torch.Tensor], device: torch.device | None = None ) -> int: - """ - Attempts to resolve the embedding dimension using fast structural checks. - Falls back to a dummy forward pass only if all structural checks fail. - """ + """Infer feature width from model/head structure, falling back to a dummy pass.""" # timm standard if hasattr(model, "num_features") and isinstance(model.num_features, int): @@ -57,7 +55,7 @@ def resolve_embedding_dim( def _infer_via_dummy_pass(model: nn.Module, preprocess: Callable[[torch.Tensor], torch.Tensor], device: torch.device | None) -> int: - """The robust dummy pass fallback.""" + """Infer feature width from a preprocessed 224-pixel dummy image.""" if device is None: try: device = next(model.parameters()).device @@ -90,7 +88,7 @@ def _infer_via_dummy_pass(model: nn.Module, preprocess: Callable[[torch.Tensor], class Preprocess: def __init__(self, transform=None, func=None): - """Hook torchvision preprocessing function with load image from file to tensor.""" + """Decode image paths and apply the optional transform and postprocessor.""" self.transform = transform self.func = func @@ -117,7 +115,7 @@ def __repr__(self): def module_output_dim(module: nn.Module): - """Finds the output dimension by looking for the last parameter and returning the right-most size.""" + """Infer output width from the first dimension of the last non-scalar parameter.""" for param in reversed(list(module.parameters())): if param.ndim > 0: return param.shape[0] @@ -126,7 +124,7 @@ def module_output_dim(module: nn.Module): class WrappedEncoder(nn.Module): - """Barebones encoder wrapper.""" + """Wrap an encoder method, caching trainability for inference-mode selection.""" def __init__(self, encoder: nn.Module, encoder_method: str | None = None): # noqa: D107 super().__init__() @@ -142,11 +140,11 @@ def requires_grad_(self, requires_grad: bool = True): return self def get_extra_state(self): - """Standard PyTorch hook to save non-tensor state.""" + """Retain the selected encoder method in checkpoints.""" return {"encoder_method": self.encoder_method} def set_extra_state(self, state): - """Standard PyTorch hook to load non-tensor state.""" + """Restore the encoder method, defaulting older checkpoints to forward.""" if "encoder_method" in state: encoder_method = state["encoder_method"] else: @@ -167,7 +165,7 @@ def _inner(): class BackboneModel(nn.Module): - """A barebones wrapper for arbitrary encoder-only modules.""" + """Wrap an encoder with a replaceable linear classification head.""" def __init__(self, encoder: nn.Module, encoder_method: str | None = None): # noqa: D107 super().__init__() @@ -186,6 +184,7 @@ def forward(self, x): def infer_size_from_transform(transform: Any, fallback: int = 256, warn_on_fallback: bool = True) -> int: + """Infer preferred size from wrapper/crop/resize metadata, or return fallback.""" if transform is not None: # Unwrap common wrapper attributes if present for attr in ("transform", "processor"): diff --git a/mini_trainer/modeling/architectures/load.py b/mini_trainer/modeling/architectures/load.py index d36873f..b942ff5 100644 --- a/mini_trainer/modeling/architectures/load.py +++ b/mini_trainer/modeling/architectures/load.py @@ -86,7 +86,11 @@ def get_model( transform: Any = None, device: torch.device | None = None, ): - """Get torchvision, timm, transformers, or bioclip model and preprocessing function by name.""" + """Return (model, head path, preprocess, embedding width, preferred image size). + + Resolve backend-prefixed names through adapters, or inspect a supplied module. + Preprocessing combines the supplied/discovered transform with dtype conversion. + """ default_transform = transform preferred_size = None if isinstance(backbone_model, str): @@ -111,7 +115,6 @@ def get_model( if not isinstance(backbone_model, nn.Module): raise ValueError("backbone_model must be a string or a torch.nn.Module") - # Resolve Transform if default_transform is None: for attr in ("transforms", "default_transform", "preprocess_transform", "transform"): if hasattr(backbone_model, attr): @@ -125,20 +128,17 @@ def get_model( default_transform = val break - # Build the exact preprocess pipeline preprocess_pipeline = Preprocess( transform=default_transform, func=preprocess_dtype if preprocess_dtype is None else make_convert_dtype(preprocess_dtype), ) - # Resolve exact classifier name (using named_modules for exact paths like "head.fc") backbone_classifier_name = None - # 1. Try timm's native method first + # Prefer timm's exact classifier module before matching names. if hasattr(backbone_model, "get_classifier") and callable(backbone_model.get_classifier): try: timm_classifier = backbone_model.get_classifier() - # Search all modules to find the exact match for name, module in backbone_model.named_modules(): if module is timm_classifier: backbone_classifier_name = name @@ -146,7 +146,6 @@ def get_model( except Exception: pass - # 2. Fallback to name matching if backbone_classifier_name is None: if isinstance(classifier_name, str): classifier_name = [classifier_name] @@ -157,7 +156,6 @@ def get_model( backbone_classifier_name = name break - # If not found at top level, search deeply if backbone_classifier_name is None: for name, module in backbone_model.named_modules(): # We split by '.' so we match the local name (e.g., 'fc' in 'head.fc') @@ -168,7 +166,6 @@ def get_model( if backbone_classifier_name is None: raise AttributeError(f"No classifier found matching names {classifier_name}") - # Calculate embedding dimension using our robust resolver embedding_dim = resolve_embedding_dim( model=backbone_model, head_name=backbone_classifier_name, preprocess=preprocess_pipeline, device=device ) diff --git a/mini_trainer/modeling/architectures/timm.py b/mini_trainer/modeling/architectures/timm.py index 1a5c6fe..4691b39 100644 --- a/mini_trainer/modeling/architectures/timm.py +++ b/mini_trainer/modeling/architectures/timm.py @@ -23,7 +23,7 @@ def get_timm_model( resize_size: int | None = None, **kwargs: Any, ) -> tuple[Any, Any, int]: - """Load timm model and resolve its default transform.""" + """Return (backbone, transform, preferred size) using timm's model configuration.""" try: import timm from timm.data import create_transform, resolve_model_data_config diff --git a/mini_trainer/modeling/architectures/torchvision.py b/mini_trainer/modeling/architectures/torchvision.py index 34f3393..7d19e73 100644 --- a/mini_trainer/modeling/architectures/torchvision.py +++ b/mini_trainer/modeling/architectures/torchvision.py @@ -23,7 +23,7 @@ def get_torchvision_model( **kwargs: Additional arguments to pass to the model constructor. Returns: - The loaded model. + (Backbone, transform, None); the common loader infers size from the transform. """ weight_enum = torchvision.models.get_model_weights(model) diff --git a/mini_trainer/modeling/architectures/transformers.py b/mini_trainer/modeling/architectures/transformers.py index 6afb89b..a86d931 100644 --- a/mini_trainer/modeling/architectures/transformers.py +++ b/mini_trainer/modeling/architectures/transformers.py @@ -51,7 +51,7 @@ def get_transformers_model( resize_size: int | None = None, **kwargs: Any, ) -> tuple[Any, Any, int | None]: - """Load Hugging Face transformers classification model and resolve its default transform.""" + """Return (wrapped backbone, image processor, preferred size) for a Hugging Face model.""" try: from transformers import AutoConfig, AutoImageProcessor, AutoModelForImageClassification except ImportError as e: @@ -61,7 +61,6 @@ def get_transformers_model( ) raise - # 1. DRY Fallback with strict exception handling and state immutability def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: try: return hf_class.from_pretrained(model, **load_kwargs) @@ -81,23 +80,20 @@ def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: hub_keys = {"local_files_only", "revision", "cache_dir", "force_download", "proxies", "token"} hub_kwargs = {k: v for k, v in kwargs.items() if k in hub_keys} - # --- 1. Model / Config Loading --- if pretrained: hf_model = _load_with_fallback(AutoModelForImageClassification, **kwargs) else: config = _load_with_fallback(AutoConfig, **hub_kwargs) hf_model = AutoModelForImageClassification.from_config(config) - # --- 2. Classification Head Resolution --- classifier_name = None - # Semantic Search: Use tuples instead of lists for faster instantiation for name in ("classifier", "logits", "head"): if hasattr(hf_model, name): classifier_name = name break - # Structural Search: Reverse iterate to guarantee we grab the final layer, not an intermediate one + # Fall back to the last top-level Linear layer. if classifier_name is None: for name, child in reversed(list(hf_model.named_children())): if isinstance(child, torch.nn.Linear): @@ -107,24 +103,19 @@ def _load_with_fallback(hf_class: Any, **load_kwargs: Any) -> Any: if classifier_name is None: raise AttributeError(f"Could not structurally determine the classification head for {model}.") - # Assuming TransformersBackboneWrapper is defined elsewhere backbone_model = TransformersBackboneWrapper(hf_model, classifier_name) - # --- 3. Processor Loading --- if default_transform is None: default_transform = _load_with_fallback(AutoImageProcessor, backend="torchvision", **hub_kwargs) - # Safe structural type checking if resize_size is not None and getattr(default_transform, "size", None): if isinstance(default_transform.size, dict): for key in ("height", "width", "shortest_edge"): if key in default_transform.size: default_transform.size[key] = resize_size - # Assuming TransformersPreprocessor is defined elsewhere default_transform = TransformersPreprocessor(default_transform) - # --- 4. Preferred Size Resolution --- cfg = getattr(hf_model, "config", None) preferred_size = getattr(cfg, "image_size", None) if cfg is not None else None diff --git a/mini_trainer/modeling/classifier.py b/mini_trainer/modeling/classifier.py index 2e78fb7..f327ed5 100644 --- a/mini_trainer/modeling/classifier.py +++ b/mini_trainer/modeling/classifier.py @@ -28,7 +28,9 @@ from .context import EmbeddingContext -class Classifier(nn.Module): # noqa: D101 TODO +class Classifier(nn.Module): + """Classification head with optional hidden layer, normalization and class masking.""" + _version = 1 @classmethod @@ -69,9 +71,7 @@ def _normalize_layer(cls, layer: nn.Linear, orthogonal_init: bool = False): @staticmethod def extract_metadata(state: dict[str, Any]) -> dict[str, Any]: - """Scans the state dictionary for Classifier metadata. - Returns the config dict if found, otherwise None. - """ + """Return a copy of stored classifier metadata, or an empty dictionary.""" for key, value in state.items(): if key.endswith("._extra_state") and isinstance(value, dict): if "mini_trainer_version" in value: @@ -94,7 +94,6 @@ def __init__( # noqa: D107 **metadata, ): super().__init__() - # Input sanitization and checking if not isinstance(in_features, int) or not isinstance(out_features, int): raise TypeError( f"Supplied classification head input and output dimensions {in_features}x{out_features} " @@ -116,7 +115,6 @@ def __init__( # noqa: D107 if not isinstance(normalized, bool): raise TypeError(f"Normalized should be a `bool`, not `{normalized}` ({type(normalized)}).") - # Store metadata metadata.update( { "mini_trainer_version": self._version, @@ -131,16 +129,12 @@ def __init__( # noqa: D107 ) self._metadata = metadata - # Create one hidden layer self.hidden = hidden and nn.Linear(in_features, self.preclassification_size) - # Create a dropout layer (if hidden) self.dropout = hidden and nn.Dropout(p=droprate) - # Create a BatchNormalization layer self.batch_norm = nn.BatchNorm1d(self.preclassification_size) - # Create linear classification layer layer = nn.Linear(self.preclassification_size, out_features, bias=True) self.normalized = normalized self.linear = self._normalize_layer(layer, True) if self.normalized else layer @@ -149,7 +143,6 @@ def __init__( # noqa: D107 data=self._metadata["prior"], device=self.linear.weight.device, dtype=self.linear.weight.dtype ) - # Prepare class masking buffer if active_indices is not None: self.register_buffer("active_indices", active_indices, persistent=True) else: @@ -231,10 +224,8 @@ def preclassification(self, x: torch.Tensor) -> torch.Tensor: x = self.hidden(x) # type: ignore x = F.leaky_relu(x) if self.normalized: - # Output is unit vectors return F.normalize(x, 2, -1) else: - # Output is MVN return self.batch_norm(x) def forward(self, x: torch.Tensor) -> torch.Tensor: @@ -263,8 +254,6 @@ def set_extra_state(self, state: Any): UserWarning, ) - # Implement migration logic here if it becomes relevant - self._metadata.update(state) def _preprocess_metadata(self, cls2idx=None, **kwargs): @@ -471,7 +460,6 @@ def build( if v != kwargs[k]: get_logger().debug(f"Model configuration option '{k}' overridden by value stored in config: {kwargs[k]} ==> {v}") kwargs[k] = v - # Rebuild (and load) integrated backbone and classifier model_type_str = model_type if isinstance(model_type, str) else class_path(model_type) model = cls.load(model_type_str, head_name, architecture, state, device, dtype, **kwargs) return model, model_preprocess @@ -479,16 +467,13 @@ def build( @dataclass class PredictionItem: - """Simple data container. - Auto-converts inputs to native Python types on initialization. - """ + """Prediction record with native Python label, confidence and index values.""" label: str confidence: float index: int def __post_init__(self): - # Factory coercion: ensures native types immediately self.label = str(self.label) self.confidence = float(self.confidence) self.index = int(self.index) @@ -506,9 +491,7 @@ def to_dict(self): class BasePrediction[T: PredictionItem, I]: - """Standard PyTorch Prediction class. - Assumes inputs are Tensors. Subclass to handle other types. - """ + """Prediction container; subclasses define score processing and label mapping.""" ITEM_CLASS: type[T] = PredictionItem # type: ignore items: list[T] @@ -535,7 +518,6 @@ def __init__( # noqa: D107 for lab, conf, idx in zip(self.labels, self.confidence, self.indices) ] - # --- Standard Implementations (override) --- @property def idx2cls(self): raise NotImplementedError() @@ -549,7 +531,6 @@ def _translate(self): def _extract_confidence(self, raw_prediction: I): raise NotImplementedError() - # --- Convenience & Serialization (do not override) --- def __len__(self): return len(self.items) @@ -624,13 +605,7 @@ def _extract_confidence(self, raw_prediction): @contextmanager def bypass_submodule(model: nn.Module, submodule_path: str): - """Temporarily replaces a submodule with nn.Identity() for a forward pass. - - Args: - model: The parent PyTorch module. - submodule_path: The dotted path to the submodule (e.g., 'backbone.layer3.conv1'). - """ - # 1. Traverse the dotted path to find the direct parent of the target + """Replace a dotted-path submodule with Identity, restoring it on context exit.""" parts = submodule_path.split(".") parent = model for part in parts[:-1]: @@ -638,16 +613,13 @@ def bypass_submodule(model: nn.Module, submodule_path: str): target_name = parts[-1] - # 2. Keep a reference to the original submodule original_module = getattr(parent, target_name) try: - # 3. Swap in the no-op module setattr(parent, target_name, nn.Identity()) yield finally: - # 4. Guarantee restoration, even if an error is thrown during the yield setattr(parent, target_name, original_module) @@ -684,8 +656,7 @@ def backbone(model: nn.Module): def classification_module(model: nn.Module): - """Retrieve the classification module of a model created with `mini_trainer.classifier.Classifier.build()`.""" - # Unwrap torch.compile (OptimizedModule) and DDP wrappers + """Find the classification head, unwrapping torch.compile and DDP wrappers.""" if hasattr(model, "_orig_mod"): _orig = model._orig_mod assert isinstance(_orig, nn.Module) From e035a59673cb21badd2e43ac8cd24cdf473c7f13 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:01:23 +0200 Subject: [PATCH 131/221] docs: focus ONNX guide on export choices and contracts --- docs/onnx.md | 153 +++++++++++++++++++++++---------------------------- 1 file changed, 69 insertions(+), 84 deletions(-) diff --git a/docs/onnx.md b/docs/onnx.md index 7e2034b..e78ea3e 100644 --- a/docs/onnx.md +++ b/docs/onnx.md @@ -1,5 +1,8 @@ # ONNX export +Export your own checkpoint with `mt_export` or the Python API below. For the +ready-made MAMBO model, use the [deployment package](../deployment/README.md). + Install the optional `export` extra alongside the backend needed to reconstruct your model. For example, a disposable CPU development environment can use: @@ -92,32 +95,17 @@ outputs = session.run( ) ``` -The test matrix covers small offline instances from torchvision (ResNet, -EfficientNet, ViT), timm, Hugging Face Transformers and the OpenCLIP encoder wrapper -used by BioCLIP, plus every classifier head family. This is representative backend -coverage, not certification of every model in the catalog. Arbitrary custom -operators and data-dependent Python control flow remain subject to the -[PyTorch ONNX exporter's support](https://docs.pytorch.org/docs/stable/onnx_export.html). -The actual EfficientNetV2-S backbone with symmetric normalized flat/hierarchical -heads is also covered by offline dynamic-batch export tests. Trained Blair -checkpoints passed ONNX Runtime CPU parity on real images; see the -[deployment experiment](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#efficientnetv2-onnx-cpu-export-and-inference-quantization). -Local [CUDA placement checks](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-cuda-provider-placement) expose -CPU fallback for native integer heads and floating execution for calibrated -convolutions. Target GPU hardware, ARM execution and arbitrary spatial dimensions -remain unvalidated. -An initial signed MinMax INT8 recipe lost substantial accuracy and retained -floating convolutions. A follow-up unsigned Percentile recipe executed all -convolutions as QLinearConv and roughly halved warm local CPU inference latency, -with remaining quality losses measured through `mini_metrics`; see the -[calibration and metric results](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-activation-calibration-execution-coverage-and-macro-metrics). -It remains exploratory, with no agreed production quality gate or target-device -verification. Native CUDA QT checkpoint export is a separate path described below; -these floating-checkpoint PTQ experiments do not validate it. - -These local bundles are a foundation for Hugging Face hosting. Model cards, -evaluation attachments and Hub upload commands remain separate roadmap work. +## Choosing an export path + +| Checkpoint / purpose | Export path | Verification reference | +| --- | --- | --- | +| Floating checkpoint | Default export; calibration is a separate optional step | Model's floating evaluation forward | +| Native `cuda-int8-linear` checkpoint | `--reference-device cuda:0`; retains dynamic activation quantization | Native forward with autocast and TF32 disabled | +| Native checkpoint for static calibration | `--materialize-int8-training`; produces floating weights | Materialized floating forward, not the native quantized forward | +Integer weights or nodes do not establish integer execution on a chosen device. +Inspect the runtime profile and evaluate quality on that provider before selecting +a quantized recipe. Recorded results and their limits are linked below. ## Native INT8 training checkpoints @@ -131,46 +119,20 @@ CUDA_VISIBLE_DEVICES=0 .venv/bin/mt_export --weights native-int8-weights.pt \ --output native-int8-onnx --reference-device cuda:0 ``` -The Python API uses `export_onnx(model, float32_images, destination, -reference_device="cuda:0")`. Float32 inputs and a CUDA reference are required for -this backend. The CLI uses the scoped native-weight loader, retaining restricted -checkpoint loading. The export copy is frozen to let the exporter unpack integer -parameter storage; the caller's weights and gradient flags are preserved. - -The graph retains the training backend's dynamic symmetric row quantization, -including clipping, ties-to-even rounding and zero-row behavior. Its scaled INT8 -products lower to `MatMulInteger` with bounded INT32 partial accumulation and -floating row/column scales. Long contractions combine partial sums in INT64 -before converting and applying scales, preventing accumulator saturation. Activation codes are represented as unsigned codes with zero point 128; -this preserves the signed values exactly. Weights stay signed INT8. No calibration -set, floating-weight substitution or replacement classifier is used. Convolutions -remain floating, as they do in native QT training. This is distinct from the -static Percentile recipe that also quantizes convolutions. - -CUDA reference execution temporarily disables CUDA autocast and TF32 in cuDNN -and floating matrix products, restoring the caller settings afterward. Real trained images exposed a parity -failure with TF32 enabled; full-FP32 reference execution passed the original -rtol=1e-4/atol=1e-5 checks. The manifest records the reference device and TF32 choice. -This does not promise matching scores against AMP or TF32 evaluation of the same -checkpoint, whose rounding can change the subsequent integer activation codes. - -Tests cover normalized symmetric flat/hierarchical heads, EfficientNetV2-S, -active-class filtering, dynamic batches, checkpoint CLI loading and numerical -edge cases. Trained Blair checkpoints also passed checks on eight real validation -images at batches 1, 2, 4 and 8. An exported graph still needs runtime profiling -and quality evaluation on the intended provider. Local CUDA-provider execution -retains CPU MatMulInteger operations; it does not establish integer GPU execution. -Target GPU/ARM deployment, million-class export capacity and production performance -of this native path remain unverified. On the full Blair validation split, -top-1 predictions and the -requested macro metrics matched the full-FP32 CUDA reference, but some image -scores exceeded the strict export tolerance; see the -[full-validation results](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#native-onnx-full-validation-quality-and-numerical-limits). -Supply representative `verification_inputs` and evaluate deployment thresholds -separately; passing the default sample checks does not establish universal score -parity or confidence-threshold equivalence. The generic exporter does not -impose a model allowlist; configurations outside this tested coverage must pass -the same export and parity checks before a bundle is published. +The Python API requires float32 inputs and `reference_device="cuda:0"`. +The CLI retains restricted checkpoint loading. Export freezes only its private +copy; the caller's weights, gradient flags and precision settings are preserved. + +The graph retains native dynamic row quantization and scaled integer Linear +products (`MatMulInteger`), including overflow-safe accumulation. Convolutions +remain floating. No calibration data or floating-weight substitution is involved. +The CUDA reference temporarily disables autocast and TF32; the manifest records +this choice. This reference need not match AMP/TF32 scores, since rounding can +change subsequent integer activation codes. + +Supply representative `verification_inputs` and evaluate confidence thresholds +separately: the recorded full-validation results below show why passing a small +export sample does not establish parity for every input. ## Explicit materialization for deployment calibration @@ -184,17 +146,10 @@ mt_export --weights native-int8-last.pt --output materialized-onnx \ --input-shape 3 128 128 --materialize-int8-training ``` -The conversion checks the recorded native recipes, copies the state, materializes -INT8 weight representations, and removes the recipe that would restore native -training tensor types. It preserves class metadata, active-class masks and other -buffers. Normalized directions use signed integer codes, with magnitudes set to -zero for zero-scale rows. This follows the native effective-weight formula -and handles zero scales without introducing an ordinary weight-normalization -divide-by-zero. Compatible parameter ties are retained by normal model loading; -incompatible tied roles/views fail instead of silently loading different values -into one shared parameter. Undefined zero-code directions and invalid/nonfinite states fail. -The source checkpoint is never rewritten, and neither optimizers nor training -state are carried into this deployment artifact. +Conversion validates the native recipe, materializes effective weights and retains +class metadata, masks and buffers. Invalid states and incompatible parameter ties +fail explicitly. The source checkpoint is unchanged; optimizer/training state is +excluded from the deployment artifact. **Dynamic activation quantization is removed.** ONNX verification compares against the materialized floating model, not against the native training forward. Its @@ -207,11 +162,41 @@ it is not a training-memory optimization. Use the maintained [input preparation](../dev/benchmarks/inference.md#maintained-image-input-preparation) and [calibration](../dev/benchmarks/inference.md#maintained-onnx-calibration-command) -commands on this artifact. For the tested TensorRT recipe, choose signed symmetric -activations, signed per-channel weights and floating biases, with training-only -calibration data. Build and inspect a new engine for its destination device. -Compare native predictions, materialized predictions and the calibrated deployment -candidate on the same held-out samples using all five requested mini_metrics -metrics. Use a practical FP16 baseline for efficiency comparisons; successful -materialization/export alone does not establish acceptable quality, integer GPU -execution or a worthwhile cost reduction. +commands. Calibrate on training data and compare native, materialized and calibrated +predictions on the same held-out samples with `mini_metrics` (macro F1, recall, +precision, coverage and Theil's U). For efficiency, include a practical FP16 +baseline. The calibration guide describes the tested TensorRT recipe; build and +inspect its engine on the destination device. + +## Qualification evidence and limits + +Export tests cover representative offline torchvision, timm, Transformers and +OpenCLIP backbones, all classifier head families, active masks and dynamic batches. +They include EfficientNetV2-S flat/hierarchical heads and native INT8 numerical edge +cases. This is not certification of every catalogue model: custom operators and +control flow remain subject to the +[PyTorch exporter](https://docs.pytorch.org/docs/stable/onnx_export.html). + +The linked Blair experiments concern specific checkpoints and local x86 CPU/laptop +CUDA environments; they do not establish ARM support, large-vocabulary capacity or +performance on other GPUs. MAMBO has separate qualification in its deployment README. + +- [Floating export](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#efficientnetv2-onnx-cpu-export-and-inference-quantization): + trained checkpoints passed real-image CPU parity. Signed MinMax quantization + lost substantial quality and left many convolutions floating. +- [CPU calibration](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-activation-calibration-execution-coverage-and-macro-metrics): + unsigned Percentile quantization executed all convolutions as `QLinearConv` and + roughly halved warm inference latency, with measured quality losses. This was + exploratory, without a production acceptance gate. +- [Native full-validation comparison](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#native-onnx-full-validation-quality-and-numerical-limits): + top-1 predictions and the five reported metrics matched the full-FP32 CUDA + reference, but some scores exceeded export tolerance. Sample parity does not + establish confidence-threshold equivalence. +- [CUDA placement](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#onnx-cuda-provider-placement): + native integer heads fell back to CPU; calibrated convolutions ran in floating + point. The calibrated recipe also changed scores and one top-1 prediction versus + its CPU execution. CPU quality/speed results therefore cannot qualify that CUDA + deployment. + +Model cards, evaluation attachments and Hub upload commands remain separate +[roadmap work](roadmap.md). From b8c8fa5b4ec554079c967934e7123b89feaeb2b2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:05:34 +0200 Subject: [PATCH 132/221] docs: simplify native INT8 training integration guidance --- docs/quantized-training.md | 224 +++++++++++++++---------------------- 1 file changed, 88 insertions(+), 136 deletions(-) diff --git a/docs/quantized-training.md b/docs/quantized-training.md index 9dd7f51..700bacb 100644 --- a/docs/quantized-training.md +++ b/docs/quantized-training.md @@ -1,27 +1,26 @@ # CUDA INT8 training integration -The opt-in training path stores eligible Linear weights and saved linear inputs -in INT8 and uses integer matrix products for forward, input gradients and weight -gradients. It retains no floating-point master copy of those weights. Gradients, -optimizer state, biases, activation normalization, convolutions and auxiliary regularization -remain floating point. This is separate from fake-quantized QAT and x86 PTQ. - -Install the optional `quantization` extra while explicitly retaining the intended -PyTorch CUDA backend, as described in the README. The current implementation uses -TorchAO's experimental Triton kernels. It has been exercised on an RTX 3080 Ti; -CPU preparation and checkpoint inspection do not establish CPU execution support. -See the [validation audit](quantized-training-validation.md) for current tests, -measured training/loading benefits and the limits of those results. +This opt-in path stores eligible Linear weights and saved Linear inputs in INT8, +uses integer forward/backward matrix products and retains no floating master +weights. Gradients, optimizer state, biases, convolutions, activation normalization +and auxiliary regularization remain floating point. It is separate from +[x86 PTQ and fake-quantized QAT](quantization.md). + +Install the `quantization` extra with the intended PyTorch CUDA backend using the +[root installation guide](../README.md#installation). Execution uses TorchAO's +experimental Triton kernels; CPU preparation/inspection does not support CPU +inference. Local RTX 3080 Ti results are recorded in [benchmark findings](benchmarks.md). ```bash mt_train -i /path/to/data --device cuda --quantized-training --dtype float16 --cache cpu --cache-workers 0 ``` -`--quantized-training` prepares weights before building the optimizer and logs -coverage. `--cache-workers 0` makes cache construction synchronous; its selection -is separate from DataLoader workers. Ordinary training defaults are unchanged. +`--quantized-training` prepares weights before optimizer creation and logs coverage. +`--dtype float16` selects autocast; model parameters remain float32. The example +builds its CPU image cache synchronously; cache and DataLoader workers are separate +settings. Ordinary training defaults are unchanged. -The Python API also supports explicit module selection: +For explicit module selection: ```python import torch @@ -33,85 +32,35 @@ coverage = prepare_quantized_training(model) # in place, before optimizer creat optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3) ``` -The returned recipe lists quantized modules, skipped operations, remaining -floating-point parameters and physical versus reference weight storage. Automatic -selection covers ordinary `nn.Linear` modules, including their functional use by -Classifier heads. It preserves shared weights when every owner is selected. -Initial conversion of large weights processes row chunks of at most 4,194,304 -elements (or one row when wider), limiting the quantizer's floating temporaries. -This preserves deterministic INT8 codes and row scales; it does not reduce the -storage needed for source weights, validation, gradients or optimizer states. -Row-wise PyTorch weight normalization (`dim=0`) quantizes the direction parameter -while retaining its scalar magnitude per output row in floating point. Effective -normalized weights reuse the integer codes with new row scales; normalization -backward applies its Jacobian to the approximate Linear gradient. No floating -weight matrix is retained for this operation. Other parametrizations, normalization -dimensions and weights shared with an unselected operation stay floating point -and are reported. Explicit unsupported -selections and models with no eligible weights fail before changing weights. -Quantizing the hidden linear layer of a convolutional classifier does not make -its convolutions integer operations. - -CUDA execution supports batched inputs, bias, masked classifier rows, -single-sample inference and float16/bfloat16 autocast with float32 parameters. -Float32 optimizer parameters avoid the FP16 AdamW epsilon underflow discussed in -the developer probe. Eager SGD, AdamW and the repository's MuonAuxAdamW update -paths are covered; fused optimizer variants are not established. Quantized -regularization uses a differentiable floating view of the represented weights. - -Eager CUDA SGD/AdamW-style `add_` and `addcdiv_` updates fuse dequantization, -the weight update and stochastic requantization over the underlying storage -tensors. This kernel compiles on first use even when the outer optimizer is -eager. It retains INT8 codes and row scales, advances tensor version counters, -and preserves explicit intermediate precision casts. Scalar tensor weight decay -rescales rows without another stochastic rounding pass. CPU inspection/update -tests use the ordinary floating calculation and copy path. The fused row kernel -covers matching FP32/FP16/BF16 update tensors and rows up to 16,384 elements; -broadcasting, mixed dtypes and wider rows retain the ordinary update path. -No floating master weight is retained by either path. The new kernel uses CUDA -RNG seeds with Triton stochastic rounding, so exact trajectories differ from the -earlier floating update even when starting from the same seed. - -Matrix products reuse TorchAO's INT8 kernel with a separate local tuner. CUDA -graph timing avoids the default tuner's 256 MiB cache-flushing allocation, and -selected configurations are cached on disk. TorchAO's global operators and tuner -are unchanged. The explicit update and matrix operators provide fake execution -implementations for model compilation. - -`--compile-optimizer` supports tensor-learning-rate FMA updates and functional -stochastic requantization. Floating-to-INT8 copies use a fused row kernel for -matching CUDA FP32/FP16/BF16 tensors with at most 16,384 columns, returning fresh -codes/scales before the final storage mutation. Eager and compiled rounding can -follow different random trajectories even with a matching seed. Transient floating -updates remain; compilation compatibility does not imply a speedup. - -`--compile-optimizer --optimizer-cudagraphs` opts into optimizer graph replay. -During AOT fake-tensor tracing, updates expose floating arithmetic followed by -functional requantization and storage copies. Eager native updates are retained. -Expected failed kernel-tuning candidates release their exception tracebacks -promptly so temporary tensors do not outlive graph pool tracking during first -use; unexpected kernel errors still propagate. -Learning rates stay on CUDA during replay; checkpoints retain numeric values and -explicit non-default rate precision. This leaves the AMP gate, scheduler and -MuonAuxAdamW outer counter in their existing roles. The training loop explicitly -marks each graph iteration before the model runs, keeping backward gradient -buffers alive until the optimizer consumes them. Custom training loops must call -[`torch.compiler.cudagraph_mark_step_begin()`](https://docs.pytorch.org/docs/2.12/generated/torch.compiler.cudagraph_mark_step_begin.html) -before each training iteration when -combining compiled models with optimizer graph replay. See the -[optimizer graph requirements](../dev/README.md#optimizer-cuda-graphs), including -native fused float32-rate restrictions. The native fused optimizer tests use -floating parameters; they do not establish native fused updates of INT8 weights. +The returned recipe reports selected/skipped modules, remaining floating parameters +and physical/reference weight storage. Automatic selection covers `nn.Linear`, +including functional use by classifier heads. Shared weights are converted only +when all owners are selected. Explicit unsupported selections and models with no +eligible weights fail before mutation. + +| Feature | Contract | +| --- | --- | +| Row-wise weight normalization (`dim=0`) | INT8 direction, floating magnitude per output row; no retained floating weight matrix. Other parametrizations/dimensions stay floating and are reported. Initial zero directions are rejected. | +| Inputs and inference | Batched inputs, bias, masked classifier rows and single-sample CUDA inference are supported. | +| Precision | Float16/bfloat16 autocast with float32 parameters; retain float32 optimizer parameters to avoid FP16 AdamW epsilon underflow. | +| Optimizers | Eager SGD, AdamW and MuonAuxAdamW update paths have coverage. Native fused optimizer support for INT8 weights is not established. | +| Capacity | Preparation uses bounded row chunks, but source weights, validation, gradients and optimizer state still contribute to peak memory. Quantizing Linear layers does not quantize convolutions. | +| Unsupported | Native QT DDP/FSDP, checkpoint averaging, integer convolution training and quantized activation normalization are not established. `mt_train` rejects distributed native QT and EMA. | + +Updates stochastically requantize represented weights. CUDA row kernels fuse +eligible updates; unsupported shapes and dtype combinations use the ordinary path. +Neither retains a floating master weight. First use includes kernel compilation/tuning, so measure startup separately from steady-state training. +Eager, fused and compiled execution can follow different rounding trajectories +with the same seed. ## Checkpoints and inference -Prepared models include their recipe in `state_dict`. Ordinary `mt_train` -checkpoints retain INT8 parameter storage, and `Classifier.build(weights=...)` -restores the parameter types before loading weights. Known tensor classes are -allowed only within a scoped `weights_only=True` load. To resume through -`mt_train`, enable `--quantized-training` again so optimizer construction sees -the correct parameters. Existing stochastic-resume limitations still apply: -the trainer does not generally persist sampler or RNG state. +Prepared `state_dict`s include the quantization recipe and INT8 parameter storage. +`Classifier.build(weights=...)` restores parameter types before loading weights; +`load_training_weights` uses a scoped known-class allowlist with `weights_only=True`. +For `mt_train` checkpoint resume, enable `--quantized-training` again so optimizer +construction sees the correct parameters. General RNG/sampler state is not fully +checkpointed, so arbitrary stochastic continuation is not guaranteed identical. For a custom architecture outside `Classifier.build`: @@ -123,60 +72,63 @@ restore_quantized_training(model, state) model.load_state_dict(state) ``` -Use the same architecture and intended dtype. This restores model state; create -and restore optimizer/scheduler/scaler state in their normal order separately. -The same model supports CUDA inference with `eval()` and `inference_mode()`. -An opt-in [ONNX export path](onnx.md#native-int8-training-checkpoints) captures -the integer forward using a full-FP32 CUDA reference and verifies ONNX Runtime CPU -parity. Target-provider performance remains unverified. Checkpoint averaging, -DDP/FSDP, quantized activation normalization and integer convolution training -are not established for this path. Distributed training and -EMA are rejected by the training entry point. +Use the same architecture and intended dtype. This example restores model weights; +create and restore optimizer/scheduler/scaler state separately in their normal order. +The restored model supports CUDA inference with `eval()` and `inference_mode()`. + +The [ONNX guide](onnx.md#native-int8-training-checkpoints) distinguishes native +integer-forward export from materialization to floating weights for static +calibration. These have different numerical contracts; export success alone does +not establish integer execution or useful performance on the destination provider. ## Model compilation modes -Model compilation accepts `--compile --compile-mode reduce-overhead` (or -`compile=True, compile_mode="reduce-overhead"` in Python). This is opt-in and -independent of optimizer compilation. The benchmark runner records the selected -mode. See [compilation guidance](../dev/README.md#model-compilation) for the other -modes and measurement requirements; selecting a mode does not establish a speedup. +Model and optimizer compilation are independent, opt-in controls: -Embedding publication preserves context side effects across compilation, with -normalized weights beside their Linear consumer. Context remains shared, not -thread/task-local. AMP fusion can change rounding and INT8 activation bins; -eager and compiled trajectories are not promised to be bitwise identical. -Compiler cache keys include backend source and tensor metadata so hidden backward -changes invalidate cached graphs. +| Setting | Role | +| --- | --- | +| `--compile --compile-mode reduce-overhead` | Compile the model; Python equivalent: `compile=True, compile_mode="reduce-overhead"`. Other modes are in the [compilation guide](../dev/README.md#model-compilation). | +| `--compile-optimizer` | Compile updates with tensor learning rates and functional stochastic requantization. Transient floating updates remain. | +| `--compile-optimizer --optimizer-cudagraphs` | Request optimizer graph replay. Scheduler updates, AMP skip decisions and Muon's outer counter remain outside capture. | -## Evidence and remaining work +For custom loops, compile the optimizer after scheduler construction and checkpoint +restoration. When combining a compiled model with optimizer graph replay, call +`torch.compiler.cudagraph_mark_step_begin()` before each training iteration so +backward gradient buffers survive until the optimizer consumes them. `mt_train` +already marks this boundary. See [optimizer graph requirements](../dev/README.md#optimizer-cuda-graphs) +for device, learning-rate precision and optimizer restrictions; floating-parameter +fused-optimizer tests do not qualify INT8 weights. -See [current findings](benchmarks.md), [validation contracts](quantized-training-validation.md) -and [the roadmap](quantization-roadmap.md). These own measured benefits, negative -results and remaining hardware/quality work. Use [the training guide](../dev/benchmarks/training.md) -for reproducible commands. Kernel speedups do not establish real-model convergence -or end-to-end efficiency. +Embedding publication preserves context side effects across compilation, but +context remains shared rather than thread/task-local. AMP fusion can change INT8 +activation bins; compiled/eager trajectories need not be bitwise identical. +Compilation compatibility does not itself establish a speedup: compare startup, +steady-state throughput, memory and held-out quality for the intended workload. + +## Evidence and remaining work -Row-wise normalization tests cover represented-value forward/backward, signed -scales, zero magnitudes, saved storage, masked inference and checkpoint restoration. -Initial zero direction rows are rejected before mutation. Whole-run memory includes -initialization, gradients and optimizer storage as well as compressed parameters. +[Benchmark findings](benchmarks.md) own measured benefits and negative results; +the [validation contract](quantized-training-validation.md) owns required invariants; +the [quantization roadmap](quantization-roadmap.md) owns remaining qualification. +Use the [training benchmark guide](../dev/benchmarks/training.md) for commands. +Local kernel or synthetic-capacity gains do not establish real-model convergence +or end-to-end efficiency on HPC, desktop/Spark or ARM hardware. ## Large-class accumulator bounds -Input-gradient products contract over the output class count. For contractions -above 131,071, the backend now combines bounded INT32 dot products in INT64 before -converting and scaling the result. This prevents finite but saturated gradients -for large vocabularies. Shorter contractions keep the existing tuned kernel. -ONNX export also bounds integer partial products and combines them in INT64. -See the [arithmetic regression and limits](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#long-contraction-int8-accumulator-correctness). -A million-output Linear gradient test does not establish that a full million-class -EfficientNetV2 training configuration fits the available GPU; parameter, -initialization, gradient and optimizer storage still require separate measurement. +Contractions above 131,071 combine bounded INT32 dot products in INT64 before +scaling, preventing saturated input gradients at large output-class counts. ONNX +export also bounds integer partial products. See the +[arithmetic regression](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md#long-contraction-int8-accumulator-correctness). +A million-output Linear test does not establish that full million-class training +fits GPU memory; measure initialization, gradients and optimizer storage too. ## Implementation layout -Public APIs remain in `modeling.quantized_training` and `modeling.quantization` -(the separate PTQ/QAT backend). Private native INT8 code lives in -`modeling/_quantized_training/`: tensor dispatch in `__init__.py`, plus `matmul.py`, -`normalization.py`, `update.py` and ONNX translation in `onnx.py`. Keeping the backend -package at its original module path preserves serialized `TrainingWeight` identities. +Public integration is in [modeling/quantized_training.py](../mini_trainer/modeling/quantized_training.py); +`modeling.quantization` is the separate x86 PTQ/QAT backend. Private native code is +in [modeling/_quantized_training/](../mini_trainer/modeling/_quantized_training/): +tensor dispatch in `__init__.py`, with matrix, normalization, update and ONNX +operators in separate modules. Preserve this package path: checkpoints serialize +its `TrainingWeight` identity. Kernel eligibility, tuning and compiler-cache +invalidation details belong beside those implementations. From 5b95dd40373488b6627d9b0186b43aa377b14b38 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:09:57 +0200 Subject: [PATCH 133/221] docs: clarify training lifecycle and builder contracts --- mini_trainer/builders.py | 89 ++++++++++++++---------------------- mini_trainer/train.py | 98 ++++++++++++++-------------------------- 2 files changed, 70 insertions(+), 117 deletions(-) diff --git a/mini_trainer/builders.py b/mini_trainer/builders.py index a21c9f4..b9180bb 100644 --- a/mini_trainer/builders.py +++ b/mini_trainer/builders.py @@ -31,19 +31,10 @@ class BaseBuilder: - """The base builder used in the `mini_trainer` training pipeline. - - Subclass this builder and override the relevant functions to alter the `mini_trainer` training pipeline. - - Methods: - **`spec_model_dataloader`** : Parses or builds the model specification from the class index or input directory. - **`build_model`**: Builds the model. - **`build_dataloader`**: Builds the training and validation dataloaders. - **`build_augmentation`**: Builds the augmentation method(s). - **`build_optimizer`**: Builds the model optimizer method (e.g. SGD/ADAM). - **`build_criterion`**: Builds the optimization criterion (i.e. loss function). - **`build_lr_scheduler`**: Builds the learning rate scheduler (shape only, magnitude defined by optimizer). - **`build_logger`**: Builds the training diagnostics logger(s). + """Construction hooks for training and inference. + + Subclass and override individual methods to customize components while keeping + the entry point's construction, checkpoint and training lifecycle. """ def __init__(self): # noqa: D107 @@ -51,11 +42,10 @@ def __init__(self): # noqa: D107 @staticmethod def build_class_spec(path: str | None = None, dir: str | None = None, species: bool = False, *args, **kwargs): - """TODO. + """Load a class-specification dictionary or derive one from ``dir``. - Returns: - (extra_model_kwargs, extra_dataloader_kwargs): - Extra keyword arguments for the model and dataloader building functions. + ``dir`` accepts class directories or supported metadata Parquet files. + When ``path`` is supplied, write the resulting specification there. """ if args or kwargs: raise ValueError( @@ -69,15 +59,11 @@ def build_class_spec(path: str | None = None, dir: str | None = None, species: b def build_model( fine_tune: bool = False, cls: type[Classifier] = Classifier, fine_tune_dtype: torch.dtype = torch.bfloat16, **kwargs: Any ) -> tuple[nn.Module, Callable[[torch.Tensor], torch.Tensor]]: - """TODO. + """Build ``cls`` and return its model and preprocessing callable. - The mandatory keyword arguments depend on the class of `cls`, - but are likely to be ["model_type", "weights", "device", "dtype" and "num_classes"] - or a superset containing these. - - Returns: - (model, model_preprocess) (`tuple[torch.nn.Module, Callable[[torch.Tensor], torch.Tensor]]`): - The loaded model and an appropriate preprocessing function (e.g. RGB[0,1] normalizer). + Remaining keywords are forwarded to ``cls.build``. Fine-tuning freezes the + backbone parameters and converts it and preprocessing to ``fine_tune_dtype``; + it does not independently freeze running-statistic buffers. """ if fine_tune: kwargs["preprocess_dtype"] = fine_tune_dtype @@ -87,7 +73,6 @@ def build_model( _backbone.requires_grad_(False) _backbone.to(dtype=fine_tune_dtype) for param in _backbone.parameters(): - # param.to(dtype=fine_tune_dtype) param.requires_grad_(False) return model, model_preprocess @@ -112,10 +97,11 @@ def build_dataloader( hook: Callable[[torch.Tensor], torch.Tensor] | None = None, **kwargs, ): - """TODO. + """Return training labels followed by one loader per requested split. - Returns: - (train_label_cls, train_loader, validation_loader): The training and validation dataloaders. + Load ``data_index`` or derive metadata from ``input_dir`` on the primary + rank, then broadcast it. Split names select matching prefixes in metadata. + Remaining keywords pass to ``get_dataset_dataloader``. """ def _resolve_metadata(): @@ -199,16 +185,11 @@ def build_augmentation(dtype: torch.dtype): """ return tt.Compose( [ - # tt.AugMix(severity=3), SaltAndPepper(proportion=(0.001, 0.05), probability=0.75), tt.RandomHorizontalFlip(), tt.RandomVerticalFlip(), tt.RandomRotation(15), tt.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.9, 1.1)), - # # tt.RandomResizedCrop(size=(224, 224), scale=(0.9, 1.0)), - # tt.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1), - # # Convert back to tensor (in case some augmentations convert to PIL Image) - # tt.ToTensor() ] ) @@ -220,11 +201,12 @@ def parameter_groups( head_weight_decay: float, backbone_weight_decay: float, ) -> list[dict[str, Any]]: - """Groups all model parameters into 'head' and 'backbone'. + """Group trainable parameters by head/backbone, decay and Muon eligibility. - The 'head' is identified by the attribute name stored in `model._backbone_output_name`. - All other parameters are considered 'backbone'. - This method does not filter by requires_grad; it groups all parameters. + ``model._backbone_output_name`` identifies the head. Head parameter names + containing ``linear`` or ``layer`` select the no-Muon group; normalization + parameters, weight parametrizations and biases receive no weight decay. + Frozen parameters are excluded. """ if not hasattr(model, "_backbone_output_name"): raise AttributeError("Model does not have `_backbone_output_name` attribute to identify the head.") @@ -257,13 +239,11 @@ def parameter_groups( } n_params = 0 - for name, p in model.named_parameters(): # Iterate through all parameters the model exposes + for name, p in model.named_parameters(): if not p.requires_grad: continue grp_name = "head" if id(p) in head_module_param_ids else "backbone" - # Heuristic to detect last-layer-weights: - # Parameters in classification module with "linear" or "layer" in name - # If using the Muon optimizer it is important not to use it on the final layer(s)! + # Keep final classifier layers on the auxiliary optimizer, not Muon. if grp_name == "head" and ("linear" in name or "layer" in name): new_grp_name = f"{grp_name}_nomuon" if new_grp_name not in param_groups: @@ -298,10 +278,10 @@ def build_optimizer( backbone_weight_decay: float | None = None, **optimizer_kwargs, # Other optimizer_cls arguments (e.g., betas, eps for AdamW) ) -> torch.optim.Optimizer: - """Builds an optimizer with separate parameter groups for head and backbone. + """Construct the optimizer from named head/backbone parameter groups. - All parameters of the model are assigned to groups. - Requires `model` to have `_backbone_output_name` attribute. + Only trainable parameters participate; ``model._backbone_output_name`` + identifies the head. Forward remaining keywords to ``optimizer_cls``. """ head_lr = lr backbone_lr = backbone_lr or head_lr / 3 @@ -325,7 +305,7 @@ def build_optimizer( # Default LR for the optimizer itself (used if a group has no LR or if not using groups) if "lr" not in optimizer_kwargs: - optimizer_kwargs["lr"] = head_lr # A sensible default + optimizer_kwargs["lr"] = head_lr return optimizer_cls(params=final_params_for_optimizer, **optimizer_kwargs) @@ -411,10 +391,10 @@ def build_criterion( dtype: torch.dtype | None = None, **kwargs, ): - """TODO. + """Build smoothed cross entropy, or EMLA when weighted labels are supplied. - Returns: - The loss function for optimization (e.g. `torch.nn.CrossEntropyLoss` for classification). + Label smoothing defaults to ``1 / num_classes``. The EMLA branch counts + labels in class-index order, including zero-count classes. """ if label_smoothing is None: label_smoothing = 1 / num_classes @@ -450,11 +430,12 @@ def build_lr_scheduler( start_factor: float = 1e-4, pretrained_backbone: bool = True, ) -> torch.optim.lr_scheduler.LRScheduler: - """Only the *shape* of the LR curve is defined here; the *magnitude* should be set in the optimizer. - I suggest using `torch.optim.lr_scheduler.LambdaLR`. + """Build per-step cosine schedules with warmup for named parameter groups. - Returns: - The learning rate scheduler (shape only). + Head groups warm up from ``start_factor``. A pretrained backbone stays at + zero learning rate during head warmup, then starts its own cosine decay. + The optimizer supplies the base learning rates; both schedules end at + ``min_factor`` times those rates. """ warmup_steps = round(warmup_epochs * steps_per_epoch) head_schedule = cosine_schedule_with_warmup(epochs * steps_per_epoch, warmup_steps, start_factor, min_factor) @@ -477,7 +458,7 @@ def backbone_schedule(step: int): else: backbone_schedule = head_schedule - lr_lambdas = [] # [head_schedule for _ in optimizer.param_groups] + lr_lambdas = [] for grp in optimizer.param_groups: lr_lambdas.append(head_schedule if "head" in grp.get("name", "head") else backbone_schedule) diff --git a/mini_trainer/train.py b/mini_trainer/train.py index c787232..56fb089 100644 --- a/mini_trainer/train.py +++ b/mini_trainer/train.py @@ -67,7 +67,7 @@ def main( # noqa: D417 dataloader_builder_kwargs: dict[str, Any] = {"batch_size": 16, "train_proportion": 0.9, "resample": False}, augmentation_builder_kwargs: dict[str, Any] = {}, optimizer_builder_kwargs: dict[str, Any] = { - "optimizer_cls": MuonAuxAdamW, # torch.optim.AdamW + "optimizer_cls": MuonAuxAdamW, "lr": 0.001, "weight_decay": 0.01, }, @@ -82,43 +82,31 @@ def main( # noqa: D417 compile_mode: str | None = None, optimizer_cudagraphs: bool = False, ): - """Train a classifier. - - Args: - input: Path to a directory containing a subdirectory for each class, where - each subdirectory's name corresponds to the class name. - It is also possible to pass the path to a parquet as generated by `gbifxdl` instead of a directory. - output: Root directory for all created files and directories. - Default is current working directory ``'.'``. - checkpoint: Path to one or more checkpoint files for restarting training. - If multiple files are supplied, training is restarted from an 'average' - of checkpoint states. Default is ``None``. - class_spec: Path to a JSON file containing the mapping from class names to indices - and other important information necessary to construct compatible models and dataloaders. - If the file does not exist, it will be created based on subdirectories - found under `output` if it is set. Default is 'class_spec.json'. - epochs: Number of training epochs. Default is 15. - size: Size of the input image (width/height). Default is 256. - name: Name of the output model. If not provided, a descriptive name - will be inferred from other arguments. Default is ``None``. - device: Device used for training (e.g., ``'cuda'``, ``'cpu'``). Default is ``'cuda'``. - dtype: PyTorch data type for images during training and validation (e.g., ``'float16'``). - The model parameters are always stored in float32 with training AMP. - Default is ``'float16'``. - ema: Temporarily nonfunctional/unsupported EMA feature. Leave disabled (default=False). - seed: Initial seed for Python's random number generator to ensure reproducibility, - especially for train/validation splits. Default is ``None``. - builder: An object inheriting from ``mini_trainer.builders.BaseBuilder``. - This object is responsible for instantiating the model, dataloader, augmentation, - optimizer, scaler, EMA, criterion (loss function) and learning rate scheduler. - **kwargs: - Additional arguments are passed to the various builder methods. - See ``mini_trainer.builders.BaseBuilder`` for details. + """Build training components, restore optional state, and run the epoch loop. + + ``input`` is a class-directory dataset or a supported metadata Parquet. + ``class_spec`` loads an existing mapping or derives it from that input; when + omitted with ``output`` set, it is written under ``output/name``. Checkpoints + and final weights go in that run's ``weights`` directory. Without ``output``, + checkpoint, final-weight and resolved-config saving are disabled. + + ``size=None`` uses the model's resize metadata, falling back to 224. + ``dtype`` controls training autocast; the model is built in float32. + ``seed`` initializes Python, NumPy and PyTorch RNGs, but resume does not restore + general sampler/RNG state. EMA remains unsupported and should stay disabled. + + Supply a ``BaseBuilder`` subclass and the corresponding ``*_builder_kwargs`` + dictionaries to customize components. ``spec_model_dataloader_kwargs`` goes to + ``build_class_spec``. Quantized weights are prepared before optimizer creation; + checkpoint state is restored before optional optimizer compilation. Model + compilation is delegated to the training loop. + + Resume requires ``name`` and trusted checkpoint files. A list is averaged + before restoration; ``epochs`` is the total budget, not additional epochs. """ orig_args = locals() model_compile_options(compile, compile_mode) validate_optimizer_compilation(compile_optimizer, optimizer_cudagraphs, device) - # Prepare state if seed is not None: random.seed(seed) np.random.seed(seed) @@ -155,7 +143,6 @@ def main( # noqa: D417 setup_logging(verbose=verbose) log = get_logger() - # Dump resolved configuration using locals and normalized values dump_resolved_config( output_dir=output_dir, fn=main, @@ -172,8 +159,6 @@ def main( # noqa: D417 start_epoch: int = 0 - # Load additional information for model and dataloader instantiation - # e.g. number of classes, class-to-index dictionary if class_spec is None: if output_dir is None: class_spec = None @@ -187,20 +172,12 @@ def main( # noqa: D417 class_spec_data["resize_size"] = size with main_process_first(verbose=verbose): - # Prepare model - # Loading the model with a lower precision leads to instable training, instead we use `torch.autocast` to - # facilitate mixed precision training - # RE: Trying to disable again - perhaps this is why fastai is faster? - # RE RE: Using weights in fp32 seems to be the "correct" way, though it might be possible to squeeze some - # performance by following the pattern given in: - # https://github.com/fastai/fastai/blob/645e6b2c323dc4bf4d07a014881f46dcfecd2a57/nbs/18_callback.fp16.ipynb#L244, - # but it seems very cumbersome to implement the flexibility needed for this convoluted pattern. + # Keep parameters in float32; the training loop applies autocast. log.debug("Building model...") model_dtype = torch.float32 nn_model, model_preprocess = builder.build_model( device=device, dtype=model_dtype, - # train_labels=train_labels, # Disable prior on model - moved to loss function **{**class_spec_data, **model_builder_kwargs}, ) validate_type(nn_model, torch.nn.Module) @@ -233,7 +210,6 @@ def main( # noqa: D417 validate_type(train_loader, torch.utils.data.DataLoader) validate_type(val_loader, torch.utils.data.DataLoader) - # Prepare augmentation augmentation = builder.build_augmentation(dtype=dtype, **augmentation_builder_kwargs) validate_type(augmentation, (torchvision.transforms.Compose, torchvision.transforms.v2.Compose)) debug_augmentation(augmentation=augmentation, dataset=train_loader.dataset, output_dir=output_dir, strict=True) @@ -300,13 +276,11 @@ def main( # noqa: D417 prepare_compiled_optimizer(optimizer, cudagraphs=optimizer_cudagraphs) log.info("Optimizer updates compiled; scheduler and AMP step gating remain active.") - # Instantiate logger logger_output = None if get_rank() > 0 else output logger = builder.build_logger( train_loader=train_loader, val_loader=val_loader, epochs=epochs, output=logger_output, name=name, **logger_builder_kwargs ) - # Run training train( model=nn_model, model_ema=nn_model_ema, @@ -333,7 +307,6 @@ def main( # noqa: D417 del train_loader del val_loader - # Save result model nn_model.eval() if weight_output_dir is not None: last_weight_dst = os.path.abspath(os.path.join(weight_output_dir, "last.pt")) @@ -349,7 +322,6 @@ def main( # noqa: D417 def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 parser = ArgumentParser(prog="train", description=description, formatter_class=Formatter) - # Optional YAML config support cfg_args = parser.add_argument_group("Config [optional]") cfg_args.add_argument( "--config", @@ -396,7 +368,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 type=str, default=None, required=False, - help='Root directory for all created files and directories.\nDefault is current working directory (".").', + help="Run directory root; checkpoints and resolved config are not saved when omitted.", ) out_args.add_argument( "-n", @@ -447,7 +419,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 required=False, help="Path to a JSON file containing the class name to index mapping and other\n" "important information for constructing models and dataloaders.\n" - "If it doesn't exist, one will be created based on the directories found under `output` if it is set.", + "If absent, derive the mapping from the input dataset and save it at this path.", ) train_args = parser.add_argument_group("Training [optional]") @@ -489,7 +461,9 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 required=False, help="Number of warmup epochs (default=2.0).", ) - train_args.add_argument("--size", type=int, default=None, required=False, help="Size of the input images; width, height (default=256).") + train_args.add_argument( + "--size", type=int, default=None, required=False, help="Input image size; defaults to model resize metadata, falling back to 224." + ) train_args.add_argument( "--label_smoothing", type=float, @@ -530,7 +504,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 dest="dataloader_builder_kwargs.resample", default=None, required=False, - help=("Enable class-weighted oversampling at a rate slightly more uniform than the inverse log-frequency of the classes."), + help=("Request oversampling; currently unsupported by the default data loader."), ) train_args.add_argument( "--fine_tune", @@ -574,7 +548,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 default=None, required=False, help="Cache/Preload datasets for faster dataloading. " - 'Valid options are `None`, "disk", "cpu", "cuda" or "guess" (CUDA not supported yet).\n' + 'Valid options are `None`, "disk", "cpu", "cuda" or "guess".\n' "Mainly relevant for inefficiently stored training data or slow filesystems.", ) cfg_args.add_argument( @@ -624,8 +598,7 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 type=int, default=None, required=False, - help="Set the initial seed for the RNG in the core Python library `random`.\n" - "This is particularly important for reproducible train/validation splits.", + help="Initialize Python, NumPy and PyTorch RNGs.\nThis is particularly important for reproducible train/validation splits.", ) cfg_args.add_argument( "-v", @@ -648,14 +621,13 @@ def cli(description="Train a classifier", **extra_kwargs): # noqa: D103 name_val = cli_args.get("name") output_dir_val = os.path.abspath(os.path.join(output_val, name_val)) if (output_val and name_val) else None - # Build the three layers - defaults_full = defaults_from_function(main) # Defaults defined in the function signature - config_full = load_yaml_config(config_path, resume=resume, output_dir=output_dir_val) # Load arguments from config file - cli_full = restructure_cli_args(cli_args) # Manual CLI arguments + # Merge function defaults, YAML, then parsed CLI values. + defaults_full = defaults_from_function(main) + config_full = load_yaml_config(config_path, resume=resume, output_dir=output_dir_val) + cli_full = restructure_cli_args(cli_args) args = merge_dicts(defaults_full, config_full, cli_full) - # Validate required arguments if args.get("input") is None: raise SystemExit("error: the following arguments are required: --input (via CLI or config)") From 679de9878175c741fbce59b7590bf80e0e6cc5f9 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:14:08 +0200 Subject: [PATCH 134/221] test: simplify training smoke coverage and strengthen Muon checks --- tests/integration/test_integration_train.py | 162 ++++++-------------- tests/training/test_muon.py | 74 +++------ 2 files changed, 70 insertions(+), 166 deletions(-) diff --git a/tests/integration/test_integration_train.py b/tests/integration/test_integration_train.py index 9227bdd..1c4a06c 100644 --- a/tests/integration/test_integration_train.py +++ b/tests/integration/test_integration_train.py @@ -1,5 +1,3 @@ -import os - import torch import torchvision.transforms as tt from torch.utils.data import DataLoader, TensorDataset @@ -10,21 +8,14 @@ class MockBuilder(BaseBuilder): - @staticmethod - def class_spec(*args, **kwargs): - # Return a dummy spec - return {"num_classes": 2, "cls2idx": {"class_a": 0, "class_b": 1}} - @staticmethod def build_dataloader(batch_size, device, dtype, **kwargs): - # Create synthetic data - # Class 0: mean 0. Class 1: mean 1. + # Distinct class means provide a small learnable dataset. n = 20 c, h, w = 3, 5, 5 data_0 = torch.randn(n, c, h, w) data_1 = torch.randn(n, c, h, w) + 1.0 data = torch.cat([data_0, data_1]) - # labels need to be LongTensor labels = torch.cat([torch.zeros(n, dtype=torch.long), torch.ones(n, dtype=torch.long)]) dataset = TensorDataset(data, labels) @@ -36,12 +27,10 @@ def build_dataloader(batch_size, device, dtype, **kwargs): @staticmethod def build_augmentation(dtype): - # Must return torchvision.transforms.Compose return tt.Compose([]) @staticmethod def build_regularizer(*args, **kwargs): - # Disable regularization to avoid last_layer_weights dependency on Classifier class return lambda x: torch.tensor(0.0) @@ -64,97 +53,58 @@ def forward(self, x): def test_integration_train_cpu(tmp_path): - # Setup paths - input_dir = str(tmp_path / "data") - os.makedirs(input_dir, exist_ok=True) - # create dummy class dirs so validation passes if it checks - os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) - os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - - output_dir = str(tmp_path / "output") - - # Run training - args = { - "input": input_dir, - "output": output_dir, - "epochs": 2, - "device": "cpu", - # Use float32 to avoid potential half-precision issues on CPU - # (though modern torch often handles it, cleaner to use float32 for simple test) - "dtype": "float32", - "name": "test_run", - "builder": MockBuilder, - "model_builder_kwargs": {"model_type": TinyMockModel(), "pretrained": False}, - # Be verbose to see output if needed - "logger_builder_kwargs": {"verbose": True, "logger_cls": configure_loggers()}, - # Disable EMA explicitly - "ema": False, - "seed": 42, - } - - main(**args) - - # Check if files were created - run_dir = os.path.join(output_dir, "test_run") - assert os.path.exists(run_dir) - assert os.path.isdir(run_dir) - - # Check weights - weights_dir = os.path.join(run_dir, "weights") - assert os.path.exists(weights_dir) - assert os.path.exists(os.path.join(weights_dir, "last.pt")) - assert os.path.exists(os.path.join(weights_dir, "checkpoint_last.pth")) - - # Check config - assert os.path.exists(os.path.join(run_dir, "config.yaml")) - - # Check class spec - # MockBuilder.class_spec does not write to file, so this file won't exist unless we write it. - # assert os.path.exists(os.path.join(run_dir, "class_spec.json")) - - # Verify we can execute the model on the data - # (Checking if training actually did something is harder without asserting loss decrease, - # but successful execution covers most integration points) - - # Optional: Load best.pt if it exists (it should if validation ran) - # Note: best.pt is only saved if validation happens. - # MockBuilder returns val_loader, so validation should run. - best_weights_path = os.path.join(weights_dir, "best.pt") - assert os.path.exists(best_weights_path) - - # Test autoloading from a single .pt weights file without passing model_type or other args from mini_trainer.modeling import Classifier, classification_module - loaded_model, loaded_preprocess = Classifier.build(weights=best_weights_path) - cls_mod = classification_module(loaded_model) - assert isinstance(cls_mod, Classifier) - assert cls_mod.metadata["backbone_output_name"] == "fc" - assert cls_mod.metadata["backbone_class"] == "tests.integration.test_integration_train:TinyMockModel" - assert loaded_preprocess is not None - # Test that the custom preprocessing function runs - dummy_input = torch.randn(3, 5, 5) - processed = loaded_preprocess(dummy_input) + input_dir = tmp_path / "data" + for label in ("class_a", "class_b"): + (input_dir / label).mkdir(parents=True) + output_dir = tmp_path / "output" + main( + input=str(input_dir), + output=str(output_dir), + epochs=2, + device="cpu", + dtype="float32", + name="test_run", + builder=MockBuilder, + model_builder_kwargs={"model_type": TinyMockModel(), "pretrained": False}, + logger_builder_kwargs={"verbose": True, "logger_cls": configure_loggers()}, + ema=False, + seed=42, + ) + run_dir = output_dir / "test_run" + for artifact in ("config.yaml", "class_spec.json", "weights/last.pt", "weights/checkpoint_last.pth", "weights/best.pt"): + assert (run_dir / artifact).is_file(), artifact + + # Retain the import path: checkpoints reconstruct this shared test backbone. + loaded_model, preprocess = Classifier.build(weights=str(run_dir / "weights/best.pt")) + head = classification_module(loaded_model) + assert isinstance(head, Classifier) + assert head.metadata["backbone_output_name"] == "fc" + assert head.metadata["backbone_class"] == "tests.integration.test_integration_train:TinyMockModel" + processed = preprocess(torch.randn(3, 5, 5)) assert processed.shape == (3, 5, 5) + loaded_model.eval() + with torch.inference_mode(): + predictions = loaded_model(processed.unsqueeze(0)) + assert predictions.shape == (1, 2) + assert torch.isfinite(predictions).all() def test_integration_resume_train(tmp_path): from mini_trainer.config import load_yaml_config - input_dir = str(tmp_path / "data") - os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) - os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - - output_dir = str(tmp_path / "output") + input_dir = tmp_path / "data" + for label in ("class_a", "class_b"): + (input_dir / label).mkdir(parents=True) + output_dir = tmp_path / "output" run_name = "resume_test_run" - run_dir = os.path.join(output_dir, run_name) - - # 1. Fresh run with resume=True when no checkpoint exists yet - config_fresh = load_yaml_config(path=None, resume=True, output_dir=run_dir) - assert "checkpoint" not in config_fresh + run_dir = output_dir / run_name + assert "checkpoint" not in load_yaml_config(path=None, resume=True, output_dir=str(run_dir)) args = { - "input": input_dir, - "output": output_dir, + "input": str(input_dir), + "output": str(output_dir), "epochs": 1, "device": "cpu", "dtype": "float32", @@ -166,25 +116,13 @@ def test_integration_resume_train(tmp_path): "seed": 42, } main(**args) - - ckpt_path = os.path.join(run_dir, "weights", "checkpoint_last.pth") - assert os.path.exists(ckpt_path) - - # 2. Resumed run with resume=True when checkpoint exists - config_resumed = load_yaml_config(path=None, resume=True, output_dir=run_dir) - assert "checkpoint" in config_resumed - assert config_resumed["checkpoint"] == os.path.abspath(ckpt_path) - - # Run for 2 epochs using checkpoint - args_resume = args.copy() - args_resume["epochs"] = 2 - args_resume["checkpoint"] = config_resumed["checkpoint"] - - main(**args_resume) - - # Run directory should NOT be incremented to resume_test_run_1 - assert os.path.exists(run_dir) - assert not os.path.exists(os.path.join(output_dir, "resume_test_run_1")) + checkpoint = run_dir / "weights/checkpoint_last.pth" + assert checkpoint.is_file() + config = load_yaml_config(path=None, resume=True, output_dir=str(run_dir)) + assert config["checkpoint"] == str(checkpoint.resolve()) + main(**{**args, "epochs": 2, "checkpoint": config["checkpoint"]}) + assert run_dir.is_dir() + assert not (output_dir / "resume_test_run_1").exists() def test_integration_migration(tmp_path): @@ -206,14 +144,12 @@ def test_integration_migration(tmp_path): migrate_results(src_dir=src_dir, dst_dir=dst_dir, task_dir=task_dir, move=False) - # Check that dst_dir exists dst_config = dst_dir / "runs" / "combo1" / "config.yaml" assert dst_config.exists() content = dst_config.read_text(encoding="utf-8") assert str(dst_dir) in content assert str(src_dir) not in content - # Check that task file was updated task_content = task_file.read_text(encoding="utf-8") assert str(dst_dir) in task_content assert str(src_dir) not in task_content diff --git a/tests/training/test_muon.py b/tests/training/test_muon.py index bc86fd8..c0300bc 100644 --- a/tests/training/test_muon.py +++ b/tests/training/test_muon.py @@ -8,66 +8,34 @@ def test_to_scalar(): assert _to_scalar(0.5) == 0.5 assert _to_scalar(torch.tensor(0.5)) == 0.5 assert _to_scalar(torch.tensor([0.5])) == 0.5 - # Should keep other tensors as is (though function name implies scalar result, - # the code says "If it is not a tensor... kept as is". - # If tensor dim != 0 -> squeeze. - t = torch.randn(2) - assert _to_scalar(t).shape == (2,) + values = torch.tensor([0.25, 0.5]) + torch.testing.assert_close(_to_scalar(values), values) def test_zeropower_via_newtonschulz(): - # Needs 2D matrix - g = torch.eye(4) - out = _zeropower_via_newtonschulz(g, ns_coefficients=(3.4445, -4.7750, 2.0315), ns_steps=5, eps=1e-7) - assert out.shape == (4, 4) - # Check if close to identity (orthogonal of identity is identity) - # Note: Muon NS is quintic and coefficients are specific. - # But for Identity, it should likely remain Identity. - assert out.shape == (4, 4) - # Muon NS implementation scales singular values, so we don't expect exact Identity for Identity input. - # It produces something like US'V^T where S' is randomized/scaled. - # Just check it returns valid values. - assert torch.isfinite(out).all() + result = _zeropower_via_newtonschulz(torch.eye(4), ns_coefficients=(3.4445, -4.7750, 2.0315), ns_steps=5, eps=1e-7) + assert result.shape == (4, 4) + assert torch.isfinite(result).all() -def test_adjust_lr(): - # original: sqrt(max(1, A/B)) - lr = 0.1 - # Square: A=B=10. ratio=1. adjusted=0.1 - adj = _adjust_lr(lr, "original", torch.Size([10, 10])) - assert adj == 0.1 +@pytest.mark.parametrize( + "mode,shape,expected", + [("original", [10, 10], 0.1), ("original", [100, 10], 0.316227766), ("match_rms_adamw", [100, 10], 0.2)], +) +def test_adjust_lr(mode, shape, expected): + assert _adjust_lr(0.1, mode, torch.Size(shape)) == pytest.approx(expected) - # Rect: A=100, B=10. A/B=10. sqrt(10) ~ 3.16. - adj = _adjust_lr(lr, "original", torch.Size([100, 10])) - assert abs(adj - 0.1 * 3.16) < 0.01 - # match_rms_adamw - # 0.2 * sqrt(max(A, B)) - # A=100. 0.2 * 10 = 2.0. - adj = _adjust_lr(lr, "match_rms_adamw", torch.Size([100, 10])) - assert abs(adj - 0.1 * 2.0) < 1e-5 +def test_muon_rejects_nonmatrix_parameters(): + with pytest.raises(ValueError, match="only supports 2D"): + Muon([torch.ones(10)]) -def test_Muon_init(): - p = torch.randn(10, 10) - opt = Muon([p], lr=1e-3) - assert opt.defaults["lr"] == 1e-3 - - # Muon only supports 2D - p_bad = torch.randn(10) - with pytest.raises(ValueError): - Muon([p_bad]) - - -def test_Muon_step(): - p = torch.randn(10, 10, requires_grad=True) - opt = Muon([p], lr=0.1) - - loss = (p**2).sum() +def test_muon_step_reduces_quadratic_loss(): + parameter = torch.nn.Parameter(torch.eye(4)) + optimizer = Muon([parameter], lr=0.1, weight_decay=0) + loss = parameter.square().sum() loss.backward() - - # Step - opt.step() - - # Check if params changed - assert not torch.allclose(p, torch.zeros_like(p)) # well, they were random before. + optimizer.step() + assert torch.isfinite(parameter).all() + assert parameter.square().sum() < loss.detach() From 1e6cf52dd5347e19d09c0852df5bfe34888c6bbd Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:29:26 +0200 Subject: [PATCH 135/221] refactor: simplify composite optimizer routing and documentation --- mini_trainer/training/muon.py | 174 +++++++++------------------------- tests/training/test_muon.py | 22 +++++ 2 files changed, 68 insertions(+), 128 deletions(-) diff --git a/mini_trainer/training/muon.py b/mini_trainer/training/muon.py index a170ab4..e1014a1 100644 --- a/mini_trainer/training/muon.py +++ b/mini_trainer/training/muon.py @@ -1,6 +1,7 @@ -# Forward-compatibility with Muon optimizer (will be in PyTorch later) -# From: https://github.com/pytorch/pytorch/blob/main/torch/optim/_muon.py -"""Implementation of the Muon optimizer.""" +"""Muon and a composite Muon/AdamW optimizer. + +Adapted from https://github.com/pytorch/pytorch/blob/main/torch/optim/_muon.py. +""" import math from collections.abc import Callable, MutableMapping, Sequence @@ -10,22 +11,11 @@ import torch from torch import Tensor from torch.optim import AdamW -from torch.optim.optimizer import Optimizer, ParamsT, _disable_dynamo_if_unsupported, _params_doc +from torch.optim.optimizer import Optimizer, ParamsT, _disable_dynamo_if_unsupported def _to_scalar(x: float | torch.Tensor): - r"""This function converts a hyperparameter to a 0-dimension (scalar) tensor - if it is a nonzero-dimensions 1-element tensor. If it is not a tensor, it is - kept as is. - - Args: - x (float or Tensor): A hyperparameter of the optimizer. - If it is Tensor, it is needed to be 1-element. - - Returns: - float or Tensor: - a scalar tensor if x is Tensor otherwise Python scalar (float) value. - """ + """Squeeze tensor hyperparameters; leave non-tensors unchanged.""" if isinstance(x, torch.Tensor) and x.dim() != 0: return x.squeeze() else: @@ -44,16 +34,11 @@ def _to_scalar(x: float | torch.Tensor): def _zeropower_via_newtonschulz(grad: Tensor, ns_coefficients: tuple[float, float, float], ns_steps: int, eps: float) -> Tensor: - """Newton-Schulz iteration to compute the zeroth power / orthogonalization of G. We opt to use a - quintic iteration whose coefficients are selected to maximize the slope at zero. For the purpose - of minimizing steps, it turns out to be empirically effective to keep increasing the slope at - zero even beyond the point where the iteration no longer converges all the way to one everywhere - on the interval. This iteration therefore does not produce UV^T but rather something like US'V^T - where S' is diagonal with S_{ii}' ~ Uniform(0.5, 1.5), which turns out not to hurt model - performance at all relative to UV^T, where USV^T = G is the SVD. - - Implementation reference: https://github.com/KellerJordan/Muon/blob/master/muon.py - with suggestions by @jxbz, @leloykun, and @YouJiacheng. + """Approximate the matrix polar factor with a BF16 quintic iteration. + + The default finite iteration does not force every singular value to one. + Reference: https://github.com/KellerJordan/Muon/blob/master/muon.py, + with suggestions by @jxbz, @leloykun and @YouJiacheng. """ if ns_steps >= 100: raise ValueError("Number of steps must be less than 100 for computational efficiency") @@ -91,7 +76,26 @@ def _adjust_lr(lr: float, adjust_lr_fn: str | None, param_shape: torch.Size) -> return lr * adjusted_ratio -class Muon(Optimizer): # noqa: D101 +class Muon(Optimizer): + """Optimize dense real 2D parameters with momentum and Newton-Schulz updates. + + The momentum buffer interpolates toward the gradient with weight + ``1 - momentum``. Nesterov mode blends the current gradient with that buffer + before orthogonalization. Decoupled weight decay uses the base learning rate; + the orthogonalized update uses the shape-adjusted rate. + + ``adjust_lr_fn=None`` or ``"original"`` scales the update rate by + ``sqrt(max(1, rows / columns))``; ``"match_rms_adamw"`` uses + ``0.2 * sqrt(max(rows, columns))``. ``ns_coefficients`` and ``ns_steps`` control + the quintic iteration, and ``eps`` floors its normalization denominator. + Defaults are in the constructor signature. Use a separate optimizer for + non-matrix parameters, or ``MuonAuxAdamW`` for automatic routing. + + References: + https://kellerjordan.github.io/posts/muon/ + https://arxiv.org/pdf/2502.16982 + """ + def __init__( # noqa: D107 self, params: ParamsT, @@ -203,86 +207,6 @@ def step(self, closure=None): return loss -Muon.__doc__ = ( - r"""Implements Muon algorithm. - - .. math:: - \begin{aligned} - &\rule{110mm}{0.4pt} \\ - &\textbf{input} : \gamma \text{ (lr)},\ \lambda \text{ (weight decay)},\ - \mu \text{ (momentum)},\ \textit{nesterov}\in\{True,False\},\\ - &\hspace{13mm}(a,b,c)\ \text{ (NS coefficients)},\ - \varepsilon \text{ (epsilon)},\ k \text{ (NS steps)},\ - \theta_0 \text{ (params)},\ f(\theta) \text{ (objective)} \\ - &\textbf{initialize} : B_0 \leftarrow 0 \text{ (momentum buffer)} \\[-1.ex] - &\rule{110mm}{0.4pt} \\ - &\textbf{for}\ t=1\ \textbf{to}\ \ldots\ \textbf{do} \\[0.25ex] - &\hspace{5mm} g_t \leftarrow \nabla_{\theta} f_t(\theta_{t-1}) \\[0.25ex] - &\hspace{5mm} B_t \leftarrow \mu B_{t-1} + g_t \\[0.25ex] - &\hspace{5mm} \widetilde{B}_t \leftarrow - \begin{cases} - g_t + \mu B_t, & \text{if nesterov}=True \\ - B_t, & \text{if nesterov}=False - \end{cases} \\[1.0ex] - &\hspace{5mm} O_t \leftarrow \mathrm{NS}^{(a,b,c)}_{k}\!\big(\widetilde{B}_t;\ \varepsilon\big) \\[0.5ex] - &\hspace{5mm} \theta_t \leftarrow \theta_{t-1} - \gamma\,\lambda\,\theta_{t-1} - \quad\text{(decoupled weight decay)} \\[0.25ex] - - &\hspace{5mm} \gamma \leftarrow \mathrm{AdjustLR}\!\big(\gamma;\ \mathrm{shape}\!\big(\theta_t \big) \big) \\[0.25ex] - &\hspace{5mm} \theta_t \leftarrow \theta_t - \gamma\, O_t \\ - &\rule{110mm}{0.4pt} \\[-1.ex] - &\mathbf{return}\ \theta_t \\[-1.ex] - &\rule{110mm}{0.4pt}s - \end{aligned} - - Here, :math:`\mathrm{NS}^{(a,b,c)}_{k}(\cdot;\varepsilon)` denotes :math:`k` iterations of the - Newton–Schulz orthogonalization operator parameterized by coefficients :math:`(a,b,c)` - with numerical stabilization :math:`\varepsilon`. - - The purpose for :math:`\mathrm{AdjustLR}\!\big(\gamma;\ \mathrm{shape}\!\big(\theta_t \big) \big)` - is to make the orthogonalized update have a consistent :math:`RMS` across rectangular matrices. - - Keller's original implementation scales the update by :math:`\sqrt{\max\!\left(1, \frac{A}{B}\right)}`, - where :math:`A` and :math:`B` are dimension of the matrix being optimized. - - Moonshot's implementation also focuses on matching :math:`RMS` of AdamW. The adjustment is computed as: - :math:`\gamma \leftarrow {0.2}\gamma\,\sqrt{\max\!\left({A}, {B}\right)}` - The method is adopted from `Muon is Scalable for LLM Training`_. Research - results show that with this adjustment Muon can directly reuse the learning rate - and weight decay tuned for AdamW. - - We provide two options for the learning rate adjustment: "original", which follows Keller's - implementation, and "match_rms_adamw", which refers to Moonshot's implementation. This gives users the - flexibility to choose between the two. If `adjust_lr_fn` is not specified, the default is "original". - - For further details regarding the algorithm we refer to `Muon: An optimizer for hidden layers in neural networks`_ - and `Muon is Scalable for LLM Training`_. - """ # noqa: E501 - + rf""" - Args: - {_params_doc}. Note that Muon is an optimizer for 2D parameters of neural network hidden layers. Other - parameters, such as bias, and embedding, should be optimized by a standard method such as AdamW. - lr (float, Tensor, optional): learning rate (default: 1e-3). - weight_decay (float, optional): weight decay (L2 penalty). (default: 0.1) - momentum (float, optional): momentum factor (default: 0.95) - nesterov (bool, optional): enables Nesterov momentum. Only applicable - when momentum is non-zero - ns_coefficients (tuple of three floats, optional): coefficients \(a,b,c\) for the - Newton–Schulz orthogonalization polynomial (default: ({DEFAULT_A}, {DEFAULT_B}, {DEFAULT_C})) - eps (float, optional): term added to the denominator for numerical stability. (default: {EPS}) - ns_steps (int, optional): number of Newton–Schulz iteration steps. (default: {DEFAULT_NS_STEPS}) - adjust_lr_fn (str, optional): function to adjust learning rate. One of "original" and "match_rms_adamw". - If not specified, we will default to use "original". (default: None) - - .. _Muon\: An optimizer for hidden layers in neural networks: - https://kellerjordan.github.io/posts/muon/ - .. _Muon is Scalable for LLM Training: - https://arxiv.org/pdf/2502.16982 - - """ -) - - def _single_tensor_muon( params: list[Tensor], grads: list[Tensor], @@ -336,16 +260,11 @@ def muon( adjust_lr_fn: str | None, has_complex: bool, ): - r"""Functional API that performs Muon algorithm computation. - - See :class:`~torch.optim.Muon` for details. - """ + """Apply this module's Muon update; foreach execution is unsupported.""" if foreach is not None and foreach: raise RuntimeError("Foreach is not supported for Muon yet") - func = _single_tensor_muon - - func( + _single_tensor_muon( params, grads, muon_momentum_bufs, @@ -361,11 +280,16 @@ def muon( ) -# Mixed Muon-AdamW optimizer: -# - 2D parameters (i.e. matrices, such as dense layers) -> Muon -# - ND parameters (e.g. 1D parameters, such as biases) -> AdamW -# (Force AdamW by using "nomuon" in parameter group name) class MuonAuxAdamW(Optimizer): + """Route named groups to Muon for matrices and AdamW for other parameters. + + A group name containing ``nomuon`` forces all its parameters onto AdamW. + Exposed parameter groups reference the child groups, allowing schedulers to + update both optimizers. Checkpoints contain child states keyed by optimizer + name; the outer step counter tracks successful composite calls, not resume + history. Default Muon rate adjustment is ``match_rms_adamw``. + """ + def __init__(self, params: ParamsT, **kwargs): self._init = True self.opt_args = {"muon": {"adjust_lr_fn": "match_rms_adamw", "momentum": 0.95}, "adamw": {"betas": (0.9, 0.999)}} @@ -425,16 +349,10 @@ def add_param_group(self, param_group: dict[str, Any]) -> None: raise ValueError("param_group['params'] must be a non-empty sequence") base = {k: v for k, v in param_group.items() if k != "params"} - def _opt_check(opt): - match opt: - case "muon": - return lambda x: x.ndim == 2 - case "adamw": - return lambda x: x.ndim != 2 - case _: - raise NotImplementedError("Only Muon and AdamW are accepted optimizers for `MuonAuxAdamW`") - - grps = {opt: {"params": list(filter(_opt_check(opt), params)), **base} for opt in ["muon", "adamw"]} + grps = { + "muon": {"params": [p for p in params if p.ndim == 2], **base}, + "adamw": {"params": [p for p in params if p.ndim != 2], **base}, + } for name, grp in grps.items(): if len(grp["params"]) == 0: continue diff --git a/tests/training/test_muon.py b/tests/training/test_muon.py index c0300bc..f781f56 100644 --- a/tests/training/test_muon.py +++ b/tests/training/test_muon.py @@ -39,3 +39,25 @@ def test_muon_step_reduces_quadratic_loss(): optimizer.step() assert torch.isfinite(parameter).all() assert parameter.square().sum() < loss.detach() + + +@pytest.mark.parametrize("name,use_muon", [("head", True), ("head_nomuon", False)]) +def test_composite_routes_parameters_and_exposes_child_groups(name, use_muon): + from mini_trainer.training.muon import MuonAuxAdamW + + matrix = torch.nn.Parameter(torch.eye(4)) + bias = torch.nn.Parameter(torch.ones(4)) + optimizer = MuonAuxAdamW([{"name": name, "params": [matrix, bias]}], lr=0.01) + expected = {"muon": [matrix], "adamw": [bias]} if use_muon else {"adamw": [matrix, bias]} + assert list(optimizer.optimizers) == list(expected) + for child_name, parameters in expected.items(): + child = getattr(optimizer, child_name) + assert [id(p) for group in child.param_groups for p in group["params"]] == [id(p) for p in parameters] + assert all(any(group is exposed for exposed in optimizer.param_groups) for group in child.param_groups) + # Scheduler changes through the composite must reach every child optimizer. + scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.5) + (matrix.sum() + bias.sum()).backward() + optimizer.step() + scheduler.step() + assert optimizer._step_count == 1 + assert all(getattr(optimizer, child).param_groups[0]["lr"] == 0.005 for child in expected) From 32fcb6b2f5d0b8403c3dbb2b9c76082a48ea7ac1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:35:26 +0200 Subject: [PATCH 136/221] docs: consolidate deployment pipeline diagnostics --- dev/releases/mambo_v3/gpu-ceiling.md | 52 --------- dev/releases/mambo_v3/pipeline-probe.md | 145 ++++++++++++++---------- docs/mambo-inference-pipeline-review.md | 2 +- 3 files changed, 85 insertions(+), 114 deletions(-) delete mode 100644 dev/releases/mambo_v3/gpu-ceiling.md diff --git a/dev/releases/mambo_v3/gpu-ceiling.md b/dev/releases/mambo_v3/gpu-ceiling.md deleted file mode 100644 index 2dab05b..0000000 --- a/dev/releases/mambo_v3/gpu-ceiling.md +++ /dev/null @@ -1,52 +0,0 @@ -# Small full-B200 GPU throughput reference - -Run **Torch, no TTA** on the full B200. Reuse the working Torch environment and -completed compact speed-smoke report. No environment rebuild, parquet scan, -ONNX setup, MIG run or quality evaluation. - -After pulling the release branch, from the repository root: - -```sh -.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.gpu_ceiling \ - --baseline /work/mambo-speed/b200-full-compact/torch/report.json \ - --output /work/mambo-speed/b200-resident -``` - -The script checks and prepares the first 1,024 images from the prior streaming -sample once, then keeps compact uint8 images on the GPU. Each call includes the -actual deployed GPU interpolation/normalization, FP16 backbone, FP32 classifier -and global hierarchy logits. Outputs stay on-device. Image loading, H2D/D2H, -CPU prediction objects, embeddings and TTA are outside this timing boundary. - -It warms batches **256, 512 and 1,024**, then times approximately **20 seconds per -batch size**, synchronizing at block boundaries rather than after each inference. -It cycles slices of the resident bank. If a batch exhausts memory, smaller-batch -results are retained. Expect roughly **2–4 minutes** including model startup and -one short profiler capture; cold image storage can add time. Do not run another -GPU workload alongside it. - -The new output directory contains: - -- `summary.csv`: images/s and peak Torch allocated/reserved GPU memory per batch. -- `report.json`: exact timing windows, sample/weight provenance, runtime, device - and the fastest tested batch size. Memory peaks include the resident image bank. -- `gpu.csv`: utilization, power, GPU memory and SM clock samples every 200 ms. - Includes all visible-to-nvidia-smi devices; match the device identity in the report. -- `trace.json.gz`: eight inferences at the fastest batch size, captured separately - from throughput timing. Inspect with Perfetto or a Chrome trace viewer. If the - profiler is unavailable, its error is recorded without discarding timing results. - -Return this **one folder**. Read throughput together with the sustained telemetry -and kernel timeline: a throughput plateau and continuously occupied GPU with few -launch gaps support a practical bound for this implementation. High utilization -alone is insufficient, and this is not a theoretical hardware maximum. If 1,024 -is still markedly faster, the experiment establishes headroom, not a plateau. -Profiler timings must not replace the unprofiled throughput result. - -Compare batch 256 directly with the existing streaming batch 256; a faster larger -batch is an additional opportunity, not a like-for-like pipeline speedup. The old -prepared-input diagnostic still includes transfers and omits new GPU preprocessing, -so keep it separate. Do not subtract these timings as if they were serial phases. - -For a small local correctness check only, override `--batches 8 16 --seconds 1`. -No additional settings or campaign configuration are required. diff --git a/dev/releases/mambo_v3/pipeline-probe.md b/dev/releases/mambo_v3/pipeline-probe.md index 83d16f7..d6a94e0 100644 --- a/dev/releases/mambo_v3/pipeline-probe.md +++ b/dev/releases/mambo_v3/pipeline-probe.md @@ -1,19 +1,22 @@ -# Profile pipeline overhead without model execution +# Diagnose deployment pipeline costs -`pipeline_probe.py` substitutes fixed synthetic global species/genus/family scores -for backbone/head execution; it loads no model weights. Actual GPU preprocessing, -transfers, score validation and public result construction remain. +These optional tools isolate costs before changing the pipeline. Use the existing +CUDA environment from the [repository setup](../../../README.md#local-installation) +or [UCloud speed workflow](speed-smoke.md), run from the repository root, and choose +fresh output directories. They do not require another quality evaluation. -| Mode | Input boundary | Remaining work | +| Tool | Measured boundary | Use when | | --- | --- | --- | -| `resident` | Prepared uint8 batch already on GPU | GPU preprocessing and complete result path | -| `host` | Prepared pinned host batch | Above plus two-slot H2D staging | -| `stream` | Real image paths | Full preparation/transfer/result pipeline | +| `pipeline_probe` | Synthetic scores replace model execution; real preprocessing, transfers and public results remain | Locating non-model overhead and contention | +| `pipeline_stages` | Isolated preparation, result construction and CUDA operator trace | Inspecting a specific operation or allocation | +| `gpu_ceiling` | Resident inputs through the deployed Torch model; outputs stay on-device | Comparing streaming throughput with sustained model execution | -All modes use the same scores/vocabulary. Resident/host reuse one prepared image -batch; stream reads the selected files. Each has one excluded warmup and one timed -pass, verifies returned count including the partial tail, and asserts no real -model was instantiated. +Current decisions, failed approaches and remaining targets belong in the +[pipeline review](../../../docs/mambo-inference-pipeline-review.md); published +measurements and provenance belong in [HPC evidence](../../../docs/mambo-hpc-evidence.md). +Further throughput work is deferred for the release freeze. + +## Profile without model execution ```sh CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_probe \ @@ -24,63 +27,83 @@ CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_probe --count 1025 --batch-size 64 --workers 4 ``` -Use a fresh output and actual local paths. The report retains sample hashes, -settings, GPU identity, throughput, transfer/input counters, submission and -result-worker durations and caller waits. These overlap; do not sum them or equate -host waits with GPU idle time. - -This is a diagnostic, **not a B200 emulator**: removing model latency changes -overlap/backpressure and omits real forward dispatch. Laptop crops and four -workers do not reproduce large photos and 48 workers. Use the probe to identify -cost mechanisms, then qualify the combined change with the existing -[four-variant smoke](speed-smoke.md), not another full campaign. +Substitute actual local paths. No weights are loaded. All modes use the same fixed +synthetic species/genus/family scores and vocabulary: -## What the completed profiling changed +- `resident`: a prepared uint8 batch is already on the GPU. +- `host`: the same batch starts in pinned host memory and uses two-slot H2D staging. +- `stream`: real image paths exercise the complete preparation pipeline. -Native sampling located repeated NumPy iterator work in pixel gathering. The -200 Hz native-stack profile perturbed execution and was used for localization -only. Unprofiled comparisons drove the implementation decisions: +Each mode has one excluded warmup and one timed pass. The probe verifies result +count, including the partial tail, and that no model was instantiated. `report.json` +retains sample hashes, settings, GPU identity, throughput, transfer/input counters, +submission/result-worker durations and caller waits. -| Change | Evidence and interpretation | -| --- | --- | -| Gather whole RGB pixels with native `take` | Original 1,025-image mocked stream: 699 → 957 images/s at batch 64/four workers. Large contiguous and small/strided sources avoid different copying costs. | -| Reuse hierarchy plans, lazy vocabulary maps and score scratch | Resident submission 77 → 31 ms; result work 128 → 79 ms. File streaming did not improve further in that pass (957 → 928 images/s). | -| Reuse interpolation scratch, reduce top-1 scans, fuse Torch normalization | Isolated CPU preparation for 32 small/large decoded images: 60.6/65.6 → 35.0/37.7 ms; batch-256 result construction 31.8 → 18.2 ms; GPU finishing at batch 64: 3.95 → 2.32 ms. | -| Consider output-copy pooling | Packing ~44 µs versus ~0.66 ms D2H for 8.4 MiB at batch 64 did not justify further changes. Preserve ownership and stream synchronization. | - -These are local mechanism timings, not projected HPC gains. Final short -resident/host/stream observations were 12,110/15,055/1,068 images/s; the inverted -host/resident order illustrates noise in tiny timings, not a benefit from transfers. -[Current B200 evidence](../../../docs/mambo-hpc-evidence.md) subsequently qualified -the combined stack. The [pipeline review](../../../docs/mambo-inference-pipeline-review.md) -owns current architecture, failed approaches and remaining targets; no new speed -experiment is required by this document. +Removing model latency changes overlap and backpressure. This is **not an HPC +emulator**: laptop crops and four workers do not reproduce large photos and 48 +workers. Durations overlap; do not sum them or interpret host waits as GPU idle time. +Use a profile to locate expensive work and an unprofiled run to measure it. ## Isolate preparation and result stages -For work on these specific boundaries, `pipeline_stages.py` uses decoded -256-square/2048-square RGB and synthetic score matrices, excluding filesystem, -decode and model execution. Unprofiled CPU/CUDA measurements supply timings; a -separate CUDA trace records operators, allocations and strides. - ```sh CUDA_VISIBLE_DEVICES=0 .venv/bin/python -m dev.releases.mambo_v3.pipeline_stages \ --output local-evidence/pipeline-stages-new ``` -Inspect useful work before adding queues or workers: `events.get()` in an owner -thread is a blocking wait, not itself a CPU hotspot. Preserve geometry, rounding, -custom transforms, tie/NaN semantics, immutable raw scores and buffer lifetimes. -Native `take(mode="clip", out=...)` avoids the buffered output of `raise` mode -when indices have already been clamped; see -[NumPy's contract](https://numpy.org/doc/stable/reference/generated/numpy.take.html). -Cross-stream transfers require completion and lifetime handling, not simply -`non_blocking=True`; see [PyTorch stream semantics](https://docs.pytorch.org/docs/2.14/notes/cuda.html#cuda-streams). - -Raw ignored evidence: `local-evidence/pipeline-probe-initial/`, -`local-evidence/pipeline-profile/` (native profile and sequential probe reports), -and `local-evidence/pipeline-stages/` (stage traces and `gpu-unprofiled.json`). -The stage baseline was `c497a9d` on RTX 3080 Ti Laptop. These local paths are not -guarantees of availability elsewhere; retain inputs/provenance when transferring. -Use existing preprocessing/result/streaming tests for changed contracts and reserve -real target measurements for changes whose performance remains unresolved. +The probe uses decoded 256-square/2048-square RGB images and synthetic scores, +excluding filesystem, decoding and model execution. CPU stage timings go to +`report.json`; `trace.json` and `operators.txt` record CUDA operators, allocations +and strides. **CUDA trace timings are diagnostic, not unprofiled throughput.** + +Prior profiling justified native RGB gathering, reused interpolation/score scratch, +lazy vocabulary maps and fused normalization. Output-copy pooling did not justify +its added complexity. Native sampling perturbed execution and was used only to +locate costs. Detailed local evidence is ignored under +`local-evidence/pipeline-profile/` and `local-evidence/pipeline-stages/` (stage baseline +`c497a9d`, RTX 3080 Ti Laptop); these paths are not guaranteed on another checkout. +The linked HPC evidence qualifies the combined implementation. + +## Measure resident GPU throughput + +Reuse a completed Torch/no-TTA speed-smoke report and its working environment: + +```sh +.venv-mambo-runtime/bin/python -m dev.releases.mambo_v3.gpu_ceiling \ + --baseline /work/mambo-speed/b200-full-compact/torch/report.json \ + --output /work/mambo-speed/b200-resident +``` + +The probe verifies the bundle and first 1,024 sample images, prepares them once, +and keeps uint8 inputs on the GPU. Calls include deployed GPU preprocessing, +backbone, classifier and global hierarchy logits. Loading, H2D/D2H, CPU results, +embeddings and TTA are excluded; precision follows the baseline report. + +Batches 256, 512 and 1,024 each receive warmup and approximately 20 seconds of +sustained inference, synchronized at block boundaries. Smaller-batch results survive +an out-of-memory failure. Expect roughly 2–4 minutes plus cold-storage delays; +keep other GPU workloads idle. For a small local check, use `--batches 8 16 --seconds 1`. + +| Output | Interpretation | +| --- | --- | +| `summary.csv`, `report.json` | Throughput, timing windows, sample/bundle hashes, runtime/device and Torch allocated/reserved peaks, including the resident bank | +| `gpu.csv` | 200 ms utilization/power/memory/clock samples; match device identity because nvidia-smi may see other GPUs | +| `trace.json.gz` | Separate eight-call trace at the fastest batch; profiler failure is recorded without discarding timings | + +Return the complete folder. A throughput plateau plus continuously occupied kernels +supports a practical reference for this implementation, not a hardware maximum. +Compare matching batch sizes; the prepared-input smoke diagnostic has a different +boundary. Neither these timings nor the mocked modes are additive pipeline phases. + +## Qualify a change + +Inspect service demand and ownership before adding queues or workers. An owner +blocked in `events.get()` is waiting, not necessarily consuming CPU. Preserve +geometry, rounding, tie/NaN behavior, raw scores, custom transforms, ordering, +partial batches and buffer lifetimes. Cross-stream copies need completion and +lifetime handling as well as `non_blocking=True`. + +Use existing preprocessing/result/streaming tests for changed contracts, then the +[four-variant speed smoke](speed-smoke.md) when target throughput remains unresolved. +Do not infer HPC gains from isolated local timings or rerun a full evaluation +campaign for unchanged prediction behavior. diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index bd27f80..ec4aa5d 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -36,7 +36,7 @@ A resident-batch reference reached 3,667 / 3,781 / 3,818 images/s at batches 256 / 512 / 1,024 with almost continuous kernels. This justified prioritizing the host pipeline over ever-larger batches. It excludes transfer and CPU results, predates final normalization changes and is not a measured application ceiling. -See the [resident probe](../dev/releases/mambo_v3/gpu-ceiling.md). +See the [resident probe](../dev/releases/mambo_v3/pipeline-probe.md#measure-resident-gpu-throughput). ## Current implementation and ownership From e4762f635866e0494ed70439e9ae6305dd3e44da Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:38:47 +0200 Subject: [PATCH 137/221] fix: evaluate every observation at each hierarchy rank --- mini_trainer/hierarchical/integration.py | 2 +- tests/logging/test_collectors.py | 43 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/logging/test_collectors.py diff --git a/mini_trainer/hierarchical/integration.py b/mini_trainer/hierarchical/integration.py index eb89bf4..1b78846 100644 --- a/mini_trainer/hierarchical/integration.py +++ b/mini_trainer/hierarchical/integration.py @@ -349,7 +349,7 @@ def eval_label_fn(self, data: dict, outdir: str | None, save: bool, prefix: str results = {} for level in range(self._levels): lvl_results = named_confusion_matrix( - results={k: v[level] if k in ["preds", "confs", "labels"] else v for k, v in data.items()}, + results={k: [row[level] for row in v] if k in ("preds", "confs", "labels") else v for k, v in data.items()}, cls2idx=self.cls2idx[str(level)], verbose=self.verbose, ) diff --git a/tests/logging/test_collectors.py b/tests/logging/test_collectors.py new file mode 100644 index 0000000..3961df9 --- /dev/null +++ b/tests/logging/test_collectors.py @@ -0,0 +1,43 @@ +import json + +import pytest +import torch +from PIL import Image + +from mini_trainer.hierarchical.integration import HierarchicalResultCollector +from mini_trainer.logging import BaseResultCollector + + +@pytest.mark.parametrize("hierarchical", [False, True], ids=["flat", "hierarchical"]) +@pytest.mark.parametrize("count", [1, 5], ids=["single-observation", "multiple-observations"]) +def test_evaluation_preserves_observations_and_per_rank_support(tmp_path, hierarchical, count): + mappings = {"0": {"s1": 1, "s0": 0, "s2": 2}, "1": {"g1": 1, "g0": 0}} + labels = [("s0", "g0"), ("s1", "g0"), ("s2", "g1"), ("unknown", "g1"), ("s0", "g0")][:count] + species = torch.tensor([[8.0, 0.0, 0.0], [8.0, 0.0, 0.0], [0.0, 0.0, 8.0], [0.0, 8.0, 0.0], [8.0, 0.0, 0.0]])[:count] + genus = torch.tensor([[8.0, 0.0], [8.0, 0.0], [0.0, 8.0], [0.0, 8.0], [0.0, 8.0]])[:count] + cls = HierarchicalResultCollector if hierarchical else BaseResultCollector + collector = cls(cls2idx=mappings if hierarchical else mappings["0"], scientific_names=False) + collector.collect( + paths=[f"{i}.jpg" for i in range(count)], + predictions=[species, genus] if hierarchical else species, + labels=labels if hierarchical else [row[0] for row in labels], + ) + original = json.dumps(collector.data) + results = collector.evaluate(str(tmp_path), prefix="sample_", plot_conf_mat=True) + assert json.dumps(collector.data) == original + assert json.loads((tmp_path / "sample_eval_results.json").read_text()) == json.loads(json.dumps(results)) + ranks = list(results.values()) if hierarchical else [results] + species_result = ranks[0] + assert list(species_result["conf_mat"]) == ["s0", "s1", "s2"] + assert species_result["totals"] == ({"s0": 1, "s1": 0, "s2": 0} if count == 1 else {"s0": 2, "s1": 1, "s2": 1}) + assert species_result["conf_mat"]["s1"]["s0"] == (0 if count == 1 else 1) + assert species_result["micro"] == pytest.approx(1 if count == 1 else 3 / 4) + assert species_result["macro"] == pytest.approx(1 if count == 1 else 2 / 3) + if hierarchical: + assert ranks[1]["totals"] == ({"g0": 1, "g1": 0} if count == 1 else {"g0": 3, "g1": 2}) + assert ranks[1]["micro"] == pytest.approx(1 if count == 1 else 4 / 5) + assert ranks[1]["macro"] == pytest.approx(1 if count == 1 else 5 / 6) + for level in range(len(ranks)): + suffix = f"_level{level}" if hierarchical else "" + with Image.open(tmp_path / f"sample_confusion_matrix{suffix}.png") as image: + image.verify() From 69e3b795f8957bcc103ec9d879d40e3d85a09847 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:39:32 +0200 Subject: [PATCH 138/221] refactor: share collector evaluation and confusion plotting --- mini_trainer/hierarchical/integration.py | 24 ++++-------------------- mini_trainer/logging/collector.py | 24 +++++++++++------------- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/mini_trainer/hierarchical/integration.py b/mini_trainer/hierarchical/integration.py index 1b78846..065207c 100644 --- a/mini_trainer/hierarchical/integration.py +++ b/mini_trainer/hierarchical/integration.py @@ -20,8 +20,7 @@ parquet_to_class_spec_hierarchical, ) from mini_trainer.logging import BaseResultCollector -from mini_trainer.training import EMLACrossEntropy, named_confusion_matrix -from mini_trainer.visualization import plot_heatmap +from mini_trainer.training import EMLACrossEntropy from .loss import MultiLevelWeightedCrossEntropyLoss from .model import HierarchicalClassifier, HierarchicalPrediction @@ -348,23 +347,8 @@ def eval_label_fn(self, data: dict, outdir: str | None, save: bool, prefix: str results = {} for level in range(self._levels): - lvl_results = named_confusion_matrix( - results={k: [row[level] for row in v] if k in ("preds", "confs", "labels") else v for k, v in data.items()}, - cls2idx=self.cls2idx[str(level)], - verbose=self.verbose, - ) - results[level] = lvl_results - - if plot_conf_mat and save: - assert outdir is not None - dst = os.path.join(outdir, f"{prefix}confusion_matrix_level{level}.png") - classes = [k for k, v in sorted(self.cls2idx[str(level)].items(), key=lambda x: x[1])] - conf_mat = lvl_results["conf_mat"] - - conf_mat_arr = np.array([[conf_mat[g][p] for p in classes] for g in classes]).astype(np.float64) - arr = plot_heatmap(conf_mat_arr, "magma", percent=False) - from PIL.Image import fromarray - - fromarray(arr).save(dst) + rank_data = {k: [row[level] for row in v] if k in ("preds", "confs", "labels") else v for k, v in data.items()} + dst = os.path.join(outdir, f"{prefix}confusion_matrix_level{level}.png") if plot_conf_mat and save else None + results[level] = self._evaluate_labels(rank_data, self.cls2idx[str(level)], dst) return results diff --git a/mini_trainer/logging/collector.py b/mini_trainer/logging/collector.py index 176ff23..28ee051 100644 --- a/mini_trainer/logging/collector.py +++ b/mini_trainer/logging/collector.py @@ -237,21 +237,19 @@ def eval_label_fn(self, data: dict, outdir: str | None, save: bool, prefix: str ) if save and not isinstance(outdir, str): raise RuntimeError("Attempted to save evaluated results against labels without specifying an output directory.") - results = named_confusion_matrix( - results=data, - cls2idx=self.cls2idx, - verbose=self.verbose, - ) - if plot_conf_mat and save: - assert isinstance(outdir, str) - dst = os.path.join(outdir, f"{prefix}confusion_matrix.png") - classes = [k for k, v in sorted(self.cls2idx.items(), key=lambda x: x[1])] - conf_mat = results["conf_mat"] - conf_mat_arr = np.array([[conf_mat[g][p] for p in classes] for g in classes]).astype(np.float64) - arr = plot_heatmap(conf_mat_arr, "magma", percent=False) + dst = os.path.join(outdir, f"{prefix}confusion_matrix.png") if plot_conf_mat and save else None + return self._evaluate_labels(data, self.cls2idx, dst) + + def _evaluate_labels(self, data: dict, cls2idx: dict, dst: str | None): + """Evaluate one vocabulary and optionally save its count matrix.""" + results = named_confusion_matrix(data, cls2idx, verbose=self.verbose) + if dst is not None: from PIL.Image import fromarray - fromarray(arr).save(dst) + classes = sorted(cls2idx, key=cls2idx.get) + conf_mat = results["conf_mat"] + counts = np.array([[conf_mat[label][pred] for pred in classes] for label in classes], dtype=np.float64) + fromarray(plot_heatmap(counts, "magma", percent=False)).save(dst) return results def evaluate(self, outdir: str | None = None, prefix: str = "", **kwargs): From 494361c185c7560f2bd7a57aafea0fbe9b65710e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:43:08 +0200 Subject: [PATCH 139/221] docs: clarify prediction inputs outputs and runtime options --- mini_trainer/predict.py | 109 +++++++++++++++------------------------- 1 file changed, 41 insertions(+), 68 deletions(-) diff --git a/mini_trainer/predict.py b/mini_trainer/predict.py index 564c760..612391b 100644 --- a/mini_trainer/predict.py +++ b/mini_trainer/predict.py @@ -44,36 +44,35 @@ def main( # noqa: D417 collector_cls_kwargs: dict[str, Any] = {}, class_list: str | None = None, ): - """Predict with a classifier. + """Run inference and save collector output under ``output/name``. + + The default collector writes ``mini_metric.csv``; ``RawResultCollector`` + writes logits, labels and paths to ``predictions.pt``. Configuration is saved + alongside results. Only model, dataloader and collector keyword groups are + consumed; the other builder keyword groups remain for API compatibility. Args: - input: Path to a directory containing a subdirectory for each class, where - each subdirectory's name corresponds to the class name. - It is also possible to pass the path to a parquet as generated by `gbifxdl` instead of a directory. - weights: Path to model weight file. - output: Root directory for all created files and directories. - Default is current working directory ``'.'``. - name: Name of the output model. If not provided, a descriptive name - will be inferred from other arguments. Default is ``None``. - threshold: Confidence threshold. - class_list: UTF-8 file with one candidate class label per line (leaf labels - for hierarchical models). Restricts predictions, not input images or - ground truth. Blank lines and duplicate labels are ignored. - data_index: File containing metadata describing test set from training run to run inference on. - subsample: Subsampling multiplier (2 = 50%, 3 = 33.3%, etc.). - device: Device used for training (e.g., ``'cuda'``, ``'cpu'``). Default is ``'cuda'``. - dtype: PyTorch data type for images during training and validation (e.g., ``'bfloat16'``). - The model parameters are always stored in float32 with training AMP. - Default is ``'float16'``. - builder: An object inheriting from ``mini_trainer.builders.BaseBuilder``. - This object is responsible for instantiating the model, dataloader, augmentation, - optimizer, scaler, EMA, criterion (loss function) and learning rate scheduler. - **kwargs: - Additional arguments are passed to the various builder methods. - See ``mini_trainer.builders.BaseBuilder`` for details. + input: Image, image directory or gbifxdl Parquet. Labelled directories and + Parquet retain supplied test splits; mixed/root-level images are unlabelled. + weights: Trained model weights. + output: Parent directory for results. + name: Subdirectory name, sanitized and incremented to avoid collisions. + ``None`` uses the legacy API name ``train``; the CLI defaults to ``predict``. + threshold: Acceptance threshold recorded by the default CSV collector. + data_index: Metadata with path, label and split arrays. When supplied, + its test rows replace discovery from ``input``. + class_spec: Existing JSON file or dictionary of model-construction metadata. + subsample: Keep every Nth selected observation (2 keeps half). + device: Inference device. + dtype: CUDA autocast dtype and raw-logit output dtype. The default builder + loads float32 model parameters; the default loader supplies uint8 images. + builder: Supplies model/preprocessing and inference-loader hooks. + collector_cls: Collects batches and saves predictions. + class_list: UTF-8 file with one candidate label per line (leaf labels for + hierarchical models). Blank/duplicate lines are ignored; input images + and ground truth are retained independently of candidate filtering. """ orig_args = locals() - # Prepare state if name is None: name = "train" name = increment_name_dir(name, output) @@ -91,7 +90,6 @@ def main( # noqa: D417 dtype = getattr(torch, dtype.removeprefix("torch.").strip().lower()) assert isinstance(dtype, torch.dtype) - # Dump resolved configuration using locals and normalized values dump_resolved_config( output_dir=output_dir, fn=main, @@ -106,7 +104,6 @@ def main( # noqa: D417 verbose=collector_cls_kwargs.get("verbose", False), ) - # Prepare model if class_spec is None: class_spec = {} if isinstance(class_spec, str): @@ -134,7 +131,6 @@ def main( # noqa: D417 ) # Keep original metadata for resolving ground truth, including excluded labels. - # Prepare dataloader labels: list[int] | list[list[int]] | None = None if data_index is not None: _data_metadata = get_metadata(data_index, **metadata) @@ -151,15 +147,6 @@ def main( # noqa: D417 f"Expected `dataloader_builder` to return an objectsinheriting from `torch.utils.data.DataLoader`, but got `{type(loader)}." ) - # (could be used for test-time-augmentation at a later stage) - # Prepare augmentation - # augmentation = builder.build_augmentation(dtype=dtype, **augmentation_builder_kwargs) - # if not isinstance(augmentation, torchvision.transforms.Compose): - # raise TypeError( - # 'Expected `augmentation_builder` to return an objects' - # f'inheriting from `torchvision.transforms.Compose`, but got `{type(augmentation)}.' - # ) - collector = collector_cls(model=nn_model, **collector_cls_kwargs) idx = 0 @@ -189,13 +176,11 @@ def main( # noqa: D417 del loader, nn_model collector.save(os.path.join(output, name), threshold=threshold) - # collector.evaluate(os.path.join(output, name)) def cli(description="Classify images with a trained model", **extra_kwargs): # noqa: D103 parser = ArgumentParser(prog="predict", description=description, formatter_class=Formatter) - # Optional YAML config support cfg_args = parser.add_argument_group("Config [optional]") cfg_args.add_argument( "--config", @@ -224,8 +209,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help="Path to a directory containing a subdirectory for each class,\n" - "where the name of each subdirectory should correspond to the name of the class.", + help="Image file, image directory or gbifxdl Parquet; supplied test splits are retained.", ) mod_args = parser.add_argument_group("Model [optional]") mod_args.add_argument( @@ -243,7 +227,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="weights", default=None, required=False, - help="Model weights used to initialize model before training.", + help="Trained model weights.", ) out_args = parser.add_argument_group("Output [optional]") out_args.add_argument( @@ -252,7 +236,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=".", required=False, - help='Root directory for all created files and directories.\nDefault is current working directory (".").', + help='Parent directory for prediction results (default=".").', ) out_args.add_argument( "-n", "--name", type=str, default="predict", required=False, help='Name of the output predictions.\nDefault is "predict".' @@ -264,7 +248,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=float, default=None, required=False, - help="Confidence threshold for predictions.\nUsed for mini_metrics csv.\nDefault is 0 (always predict).", + help="Acceptance threshold for mini_metrics CSV output (default=0, always predict).", ) inf_args.add_argument( "-r", @@ -272,7 +256,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # action="store_true", default=False, required=False, - help="If True the raw unnormalized logits will be stored alongside the labels without any further processing. Default=False.", + help="Save raw logits, labels and paths to predictions.pt instead of prediction CSV.", ) inf_args.add_argument( "-D", @@ -280,10 +264,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help='JSON file containing three arrays with keys "path", "split" and "class".\n' - 'The arrays should all have equal lengths and can be considered "columns" in a table.\n' - 'The "split" column should contain values "train", "validation" or other,\n' - 'and the "class" column should contain the the class *names* (not indices) for each file/path.', + help='Metadata with "path", "label" and "split" arrays; only test rows are used. Overrides input discovery.', ) mod_args.add_argument( "-C", @@ -291,9 +272,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=str, default=None, required=False, - help="Path to a JSON file containing the class name to index mapping and other\n" - "important information for constructing models and dataloaders.\n" - "If it doesn't exist, one will be created based on the directories found under `output` if it is set.", + help="Existing JSON file with class mappings and other model-construction metadata.", ) inf_args.add_argument( "--batch_size", @@ -301,7 +280,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="dataloader_builder_kwargs.batch_size", default=None, required=False, - help="Number of images used in each mini-batch for training/validation (default=64).", + help="Images per inference batch (default=64).", ) cfg_args = parser.add_argument_group("Runtime [optional]") cfg_args.add_argument( @@ -315,16 +294,15 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=int, default=None, required=False, - help="Subsample the data for training and eval (useful for testing). Default is None (no subsampling).", + help="Keep every Nth selected image (default: all images).", ) - cfg_args.add_argument("--device", type=str, default=None, required=False, help='Device used for training (default="cuda").') + cfg_args.add_argument("--device", type=str, default=None, required=False, help='Inference device (default="cuda").') cfg_args.add_argument( "--dtype", type=str, default=None, required=False, - help="PyTorch data type used for storing images for training/validation (default=float16).\n" - "The model is always stored in float32, and training is done with autocasting.", + help="CUDA autocast and raw-logit output dtype (default=float16); default model parameters remain float32.", ) cfg_args.add_argument( "--num_workers", @@ -339,8 +317,7 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # type=int, default=None, required=False, - help="Set the initial seed for the RNG in the core Python library `random`.\n" - "This is particularly important for reproducible train/validation splits.", + help="Unsupported: the prediction API does not accept a seed.", ) cfg_args.add_argument( "-v", @@ -349,23 +326,19 @@ def cli(description="Classify images with a trained model", **extra_kwargs): # dest="collector_cls_kwargs.verbose", default=None, required=False, - help="Print training statistics in the terminal.", + help="Print the resolved configuration.", ) cli_args = vars(parser.parse_args()) if cli_args.pop("raw", False): cli_args["collector_cls"] = RawResultCollector - # Build the three layers - defaults_full = defaults_from_function(main) # Defaults defined in the function signature - config_full = { - k: v for k, v in load_yaml_config(cli_args.pop("config")).items() if k in defaults_full - } # Arguments passed from config (empty if no config) - cli_full = restructure_cli_args(cli_args) # Manual CLI arguments + defaults_full = defaults_from_function(main) + config_full = {k: v for k, v in load_yaml_config(cli_args.pop("config")).items() if k in defaults_full} + cli_full = restructure_cli_args(cli_args) args = merge_dicts(defaults_full, config_full, cli_full) - # Validate required arguments if args.get("input") is None: raise SystemExit("error: the following arguments are required: --input (via CLI or config)") From 7a60ac07df4e2f55092c4bccf72305c3db9e8fe2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:44:19 +0200 Subject: [PATCH 140/221] refactor: remove unused configuration nullifier --- mini_trainer/config.py | 13 ------------- tests/core/test_config.py | 7 ------- 2 files changed, 20 deletions(-) diff --git a/mini_trainer/config.py b/mini_trainer/config.py index f40fc0d..994d4cd 100644 --- a/mini_trainer/config.py +++ b/mini_trainer/config.py @@ -14,19 +14,6 @@ from mini_trainer import get_logger -def _nullify(d: dict[str, Any]): - """Recursively replaces all values in a dictionary with None. - - Recurses on nested dictionaries. - """ - for k, v in list(d.items()): - if isinstance(v, dict): - _nullify(v) - else: - d[k] = None - return d - - def _drop_none(d: dict[str, Any]) -> dict[str, Any]: """Recursively drop keys with value ``None`` and empty dicts.""" out: dict[str, Any] = {} diff --git a/tests/core/test_config.py b/tests/core/test_config.py index 855d1af..ace1653 100644 --- a/tests/core/test_config.py +++ b/tests/core/test_config.py @@ -2,7 +2,6 @@ from mini_trainer.config import ( _drop_none, - _nullify, _stringify_types, defaults_from_function, merge_dicts, @@ -10,12 +9,6 @@ ) -def test_nullify(): - d = {"a": 1, "b": {"c": 2, "d": {"e": 3}}} - expected = {"a": None, "b": {"c": None, "d": {"e": None}}} - assert _nullify(d) == expected - - def test_drop_none(): d = {"a": 1, "b": None, "c": {"d": 2, "e": None}, "f": {}} expected = {"a": 1, "c": {"d": 2}} From ef8ace744b1372275d101252b1d2a1be39a9cc5a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:48:01 +0200 Subject: [PATCH 141/221] refactor: share UCloud preparation verification and stabilize fixtures --- dev/ucloud/compare.py | 30 +++++++++++----------- tests/benchmarks/test_ucloud_comparison.py | 27 ++++++++++++------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/dev/ucloud/compare.py b/dev/ucloud/compare.py index 258bfc6..2d8c5ca 100644 --- a/dev/ucloud/compare.py +++ b/dev/ucloud/compare.py @@ -136,6 +136,19 @@ def plan(config): return runs +def verified_preparation(config, root): + """Verify prepared artifacts, the current harness and source Parquet.""" + manifest = json.loads((root / "prepared.json").read_text()) + for name, expected in manifest.items(): + if digest(root / name) != expected: + raise ValueError(f"Prepared artifact changed: {name}") + if name.endswith(".py") and digest(HERE / name) != expected: + raise ValueError(f"Harness changed after preparation: {name}") + if digest(config["parquet"]) != json.loads((root / "dataset.json").read_text())["parquet_sha256"]: + raise ValueError("Source Parquet changed") + return manifest + + def reuse_preparation(config, output): """Copy verified model/data artifacts; keep the new trial's budget and plan.""" source = Path(config["reuse_preparation"]) @@ -152,14 +165,7 @@ def reuse_preparation(config, output): ): if config.get(key) != original.get(key): raise ValueError(f"Cannot reuse preparation with different {key}") - manifest = json.loads((source / "prepared.json").read_text()) - for name, expected in manifest.items(): - if digest(source / name) != expected: - raise ValueError(f"Prepared artifact changed: {name}") - if name.endswith(".py") and digest(HERE / name) != expected: - raise ValueError(f"Harness changed after preparation: {name}") - if digest(config["parquet"]) != json.loads((source / "dataset.json").read_text())["parquet_sha256"]: - raise ValueError("Source Parquet changed") + manifest = verified_preparation(config, source) for name in manifest: if not name.endswith(".py") and name != "budget.json": shutil.copyfile(source / name, output / name) @@ -431,13 +437,7 @@ def run_stage(config, args, deadline=None): raise ValueError(f"Preparation is incomplete: {output}. Check the active process and prepare.log before starting a new attempt") if json.loads(config_path.read_text()) != config: raise ValueError("Configuration differs from the frozen preparation; use a new output directory") - for name, sha in json.loads((output / "prepared.json").read_text()).items(): - if digest(output / name) != sha: - raise ValueError(f"Prepared artifact changed: {name}") - if name.endswith(".py") and digest(HERE / name) != sha: - raise ValueError(f"Harness changed after preparation: {name}") - if digest(config["parquet"]) != json.loads((output / "dataset.json").read_text())["parquet_sha256"]: - raise ValueError("Source Parquet changed") + verified_preparation(config, output) if config.get("checkpoint"): source = json.loads((output / "resume-source.json").read_text()) if digest(config["checkpoint"]) != source["sha256"]: diff --git a/tests/benchmarks/test_ucloud_comparison.py b/tests/benchmarks/test_ucloud_comparison.py index a7edeb0..34dec41 100644 --- a/tests/benchmarks/test_ucloud_comparison.py +++ b/tests/benchmarks/test_ucloud_comparison.py @@ -20,10 +20,19 @@ def harness(monkeypatch): @pytest.fixture def config(tmp_path): - source = Path(__file__).resolve().parents[2] / "dev" / "ucloud" / "comparison.json" - value = json.loads(source.read_text()) - value.update(output=str(tmp_path / "output with spaces"), parquet=str(tmp_path / "data.parquet")) - return value + return dict( + output=str(tmp_path / "output with spaces"), + parquet=str(tmp_path / "data.parquet"), + environments={branch: {"python": sys.executable, "commit": pin * 40} for branch, pin in (("master", "a"), ("quant", "b"))}, + gpus=4, + global_batch_size=64, + num_workers_per_rank=0, + epochs=3, + size=32, + seeds=[42], + variants=["master_eager", "quant_eager"], + timeout_seconds=30, + ) @pytest.mark.parametrize("int8_variant", ["quant_int8", "quant_int8_combined"]) @@ -692,11 +701,10 @@ def test_resume_hook_verifies_restored_state_before_updates(harness, monkeypatch training.train(start_epoch=2, **objects) -def test_scaling_workers_warm_steps_and_separate_storage(harness, tmp_path): +def test_scaling_workers_warm_steps_and_separate_storage(harness, config, tmp_path): compare, _ = harness scaling = importlib.import_module("scaling") - cfg = json.loads((Path(__file__).resolve().parents[2] / "dev/ucloud/ddp.json").read_text()) - cfg["output"] = str(tmp_path / "baseline") + cfg = dict(config, mode="scaling", qualification={"seed": 42, "train": 32768, "validation": 4096, "test": 128}) Path(cfg["output"]).mkdir() compare.write_json(Path(cfg["output"]) / "prepared.json", {"qualification.parquet": "a" * 64}) base = tmp_path / "base.json" @@ -706,8 +714,9 @@ def test_scaling_workers_warm_steps_and_separate_storage(harness, tmp_path): assert derived["num_workers_per_rank"] == 8 storage = scaling.trial(base, tmp_path / "storage.json", tmp_path / "storage", 128, 3, workers=16, storage=True) assert "reuse_preparation" not in storage - assert storage["epochs"] == 1 and storage["timeout_seconds"] == 600 - assert storage["qualification"]["train"] == 262144 + assert storage["epochs"] == 1 + assert 0 < storage["timeout_seconds"] <= storage["budget_seconds"] + assert storage["qualification"]["train"] > cfg["qualification"]["train"] assert storage["exclude_qualification_sha256"] == "a" * 64 with pytest.raises(ValueError, match="num_workers"): scaling.trial(base, tmp_path / "invalid.json", tmp_path / "invalid", 64, 3, workers=-1) From bf2612ddb503829a73d199e7f1d5fabfef81e0d2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:52:35 +0200 Subject: [PATCH 142/221] fix: reject iNaturalist category collisions before renaming --- examples/inat2021/construct.py | 14 +++--- tests/examples/test_inat_constructor.py | 58 +++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 tests/examples/test_inat_constructor.py diff --git a/examples/inat2021/construct.py b/examples/inat2021/construct.py index 49ac220..b2676ab 100644 --- a/examples/inat2021/construct.py +++ b/examples/inat2021/construct.py @@ -87,19 +87,23 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): # Step 7/8: Renaming directories on disk print("\n[Step 7/8] Renaming directories on disk to GBIF IDs...") + renames = {} for dir_path in dirs_to_scan: subdirs = sorted(os.listdir(dir_path)) - for name in tqdm(subdirs, desc=f"Renaming {os.path.basename(dir_path)}"): + for name in tqdm(subdirs, desc=f"Checking {os.path.basename(dir_path)}"): full_path = os.path.join(dir_path, name) if not os.path.isdir(full_path): continue if name in dir_to_gbif_id: gbif_id = dir_to_gbif_id[name] new_path = os.path.join(dir_path, gbif_id) - if not os.path.exists(new_path): - os.rename(full_path, new_path) - elif full_path != new_path: - shutil.rmtree(full_path) + if full_path == new_path: + continue + if os.path.lexists(new_path) or new_path in renames: + raise FileExistsError(f"GBIF category destination conflicts: {new_path}; no directories renamed") + renames[new_path] = full_path + for new_path, full_path in tqdm(renames.items(), desc="Renaming categories"): + os.rename(full_path, new_path) # Build a lookup from category (GBIF key) to taxonomy list category_to_tax = {} diff --git a/tests/examples/test_inat_constructor.py b/tests/examples/test_inat_constructor.py new file mode 100644 index 0000000..690a4dd --- /dev/null +++ b/tests/examples/test_inat_constructor.py @@ -0,0 +1,58 @@ +import json + +import pytest + +from examples.inat2021.construct import build_data_index + + +def category(genus, prefix="00000"): + return f"{prefix}_Animalia_Arthropoda_Insecta_Lepidoptera_Family_{genus}_species" + + +def write_image(root, relative): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_bytes(relative.encode()) + + +@pytest.mark.parametrize("collision", ["directory", "file", "planned-target"]) +def test_taxonomy_collision_preserves_all_sources_before_renaming(tmp_path, collision): + taxonomy = {"Early species": ["101", "201"], "Late species": ["102", "202"]} + (tmp_path / "taxonomy_map.json").write_text(json.dumps(taxonomy)) + write_image(tmp_path, f"train_mini/{category('Early')}/first.jpg") + write_image(tmp_path, f"val/{category('Late')}/second.jpg") + if collision == "directory": + write_image(tmp_path, "val/102/existing.jpg") + elif collision == "file": + (tmp_path / "val/102").write_bytes(b"existing file") + else: + write_image(tmp_path, f"val/{category('Late', '00001')}/third.jpg") + (tmp_path / "data_index.json").write_text("previous index") + before = {path.relative_to(tmp_path): path.read_bytes() for path in tmp_path.rglob("*") if path.is_file()} + with pytest.raises(FileExistsError, match="102"): + build_data_index(str(tmp_path), "train_mini", "val") + after = {path.relative_to(tmp_path): path.read_bytes() for path in tmp_path.rglob("*") if path.is_file()} + assert after == before + + +@pytest.mark.parametrize("splits", [("train_mini", "val"), ("train_mini",), ("val",)]) +def test_index_retains_split_order_taxonomy_and_legacy_numeric_folders(tmp_path, splits): + taxonomy = ["101", "201", "301", "401", "501", "601", "701"] + (tmp_path / "taxonomy_map.json").write_text(json.dumps({"Known species": taxonomy})) + for split in splits: + write_image(tmp_path, f"{split}/{category('Known')}/b.PNG") + write_image(tmp_path, f"{split}/{category('Known')}/a.jpg") + write_image(tmp_path, f"{split}/999/unmapped.jpeg") + (tmp_path / split / category("Known") / "ignored.txt").write_text("not an image") + build_data_index(str(tmp_path), "train_mini", "val") + expected = {"path": [], "split": [], "label": []} + for split in splits: + expected["path"].extend(f"{split}/{name}" for name in ("101/a.jpg", "101/b.PNG", "999/unmapped.jpeg")) + expected["split"].extend(["train" if split == "train_mini" else "validation"] * 3) + expected["label"].extend([taxonomy, taxonomy, ["999", "999", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"]]) + result = json.loads((tmp_path / "data_index.json").read_text()) + assert result == expected + contents = [(tmp_path / name).read_bytes() for name in result["path"]] + build_data_index(str(tmp_path), "train_mini", "val") + assert json.loads((tmp_path / "data_index.json").read_text()) == expected + assert [(tmp_path / name).read_bytes() for name in result["path"]] == contents From 47163d98380021de3b14b9da50720fb55ca6161b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:55:17 +0200 Subject: [PATCH 143/221] refactor: consolidate iNaturalist split indexing --- examples/inat2021/construct.py | 53 ++++++++++------------------------ 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/examples/inat2021/construct.py b/examples/inat2021/construct.py index b2676ab..e316aea 100644 --- a/examples/inat2021/construct.py +++ b/examples/inat2021/construct.py @@ -16,12 +16,10 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): train_dir = os.path.join(base_dir, train_dir_name) val_dir = os.path.join(base_dir, val_dir_name) - # Check if directories exist if not os.path.exists(train_dir) and not os.path.exists(val_dir): print("Error: train or val directory does not exist.") return - # Load existing taxonomy map if it exists taxonomy_map = {} taxonomy_map_path = os.path.join(base_dir, "taxonomy_map.json") if os.path.exists(taxonomy_map_path): @@ -31,7 +29,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): except Exception: pass - # Step 5/8: Scanning and mapping category directories print("\n[Step 5/8] Scanning and mapping category directories...") dir_to_species = {} scientific_names = set() @@ -57,7 +54,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): if name not in taxonomy_map: scientific_names.add(name) - # Step 6/8: Resolving taxonomy via GBIF API print("\n[Step 6/8] Resolving taxonomy via GBIF API...") if scientific_names: print(f"Resolving taxonomy for {len(scientific_names)} species...") @@ -68,7 +64,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): labels = labels_from_taxonomy(tax) for species_name, tax_tuple in labels.items(): taxonomy_map[species_name] = list(tax_tuple) - # Save updated taxonomy map with open(taxonomy_map_path, "w") as f: json.dump(taxonomy_map, f, indent=2) except Exception as e: @@ -85,7 +80,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): gbif_id = taxonomy_map[species][0] dir_to_gbif_id[name] = gbif_id - # Step 7/8: Renaming directories on disk print("\n[Step 7/8] Renaming directories on disk to GBIF IDs...") renames = {} for dir_path in dirs_to_scan: @@ -111,7 +105,6 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): if tax_list: category_to_tax[tax_list[0]] = tax_list - # Step 8/8: Generating data_index.json print("\n[Step 8/8] Generating data_index.json...") paths = [] splits = [] @@ -119,35 +112,21 @@ def build_data_index(base_dir, train_dir_name, val_dir_name): img_exts = {".jpg", ".jpeg", ".png"} - # Process train - if os.path.exists(train_dir): - categories = sorted(os.listdir(train_dir)) - for category in tqdm(categories, desc="Indexing train"): - cat_dir = os.path.join(train_dir, category) - if os.path.isdir(cat_dir): - tax_list = category_to_tax.get(category) - if tax_list is None: - tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] - for f in sorted(os.listdir(cat_dir)): - if os.path.splitext(f)[1].lower() in img_exts: - paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) - splits.append("train") - labels.append(tax_list) - - # Process val - if os.path.exists(val_dir): - categories = sorted(os.listdir(val_dir)) - for category in tqdm(categories, desc="Indexing val"): - cat_dir = os.path.join(val_dir, category) - if os.path.isdir(cat_dir): - tax_list = category_to_tax.get(category) - if tax_list is None: - tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] - for f in sorted(os.listdir(cat_dir)): - if os.path.splitext(f)[1].lower() in img_exts: - paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) - splits.append("validation") - labels.append(tax_list) + for dir_path, split in ((train_dir, "train"), (val_dir, "validation")): + if not os.path.exists(dir_path): + continue + for category in tqdm(sorted(os.listdir(dir_path)), desc=f"Indexing {split}"): + cat_dir = os.path.join(dir_path, category) + if not os.path.isdir(cat_dir): + continue + tax_list = category_to_tax.get(category) + if tax_list is None: + tax_list = [category, category, "Unknown", "Unknown", "Unknown", "Unknown", "Unknown"] + for f in sorted(os.listdir(cat_dir)): + if os.path.splitext(f)[1].lower() in img_exts: + paths.append(os.path.relpath(os.path.join(cat_dir, f), base_dir)) + splits.append(split) + labels.append(tax_list) index_data = {"path": paths, "split": splits, "label": labels} @@ -184,7 +163,6 @@ def main(): os.makedirs(base_dir, exist_ok=True) - # URLs urls = { "mini": "https://ml-inat-competition-datasets.s3.amazonaws.com/2021/train_mini.tar.gz", "full": "https://ml-inat-competition-datasets.s3.amazonaws.com/2021/train.tar.gz", @@ -244,7 +222,6 @@ def main(): except OSError: pass - # Write sentinel with open(sentinel_path, "w") as f: f.write("complete") From 57d60d5280fff193dced0a1d30ce75f8e30ef402 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:57:23 +0200 Subject: [PATCH 144/221] refactor: share example archive extraction orchestration --- examples/utils.py | 107 ++++++++++---------------------- tests/examples/test_archives.py | 39 ++++++++++++ 2 files changed, 71 insertions(+), 75 deletions(-) create mode 100644 tests/examples/test_archives.py diff --git a/examples/utils.py b/examples/utils.py index 9fef885..394ddd9 100644 --- a/examples/utils.py +++ b/examples/utils.py @@ -132,89 +132,46 @@ def download_chunk(start_pos, end_pos): print("Download complete.") -def extract_tar(tar_path, extract_path): - """Extracts a tar archive using native tools if available, with a Python fallback.""" - print(f"Extracting {tar_path} to {extract_path}...") - os.makedirs(extract_path, exist_ok=True) - - # 1. Try using system native 'tar' command with real-time polling - if shutil.which("tar"): - print("Using system native 'tar' with real-time progress...") - try: - # -v forces verbose output (one line per file extracted) - process = subprocess.Popen( - ["tar", "-xvf", tar_path, "-C", extract_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 - ) - - # Track progress using a running count (tar doesn't know total files upfront) - with tqdm(desc="Extracting (Native)", unit="file") as pbar: - for line in process.stdout: +def _extract_native(command, success_codes=(0,)): + """Run an available extractor; let the caller use Python on failure.""" + if not shutil.which(command[0]): + return False + print(f"Using system native '{command[0]}' with real-time progress...") + try: + process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1) + with tqdm(desc="Extracting (Native)", unit="file") as pbar: + for line in process.stdout: + if line.strip() and not line.startswith("Archive:"): pbar.update(1) + process.wait() + if process.returncode not in success_codes: + raise subprocess.SubprocessError(f"{command[0]} failed with exit code {process.returncode}") + except Exception as error: + print(f"Native '{command[0]}' failed: {error}. Falling back to Python...") + return False + return True - process.wait() - if process.returncode != 0: - raise subprocess.SubprocessError(f"Tar failed with exit code {process.returncode}") - - print("Extraction complete.") - return - except Exception as e: - print(f"Native 'tar' failed: {e}. Falling back to Python tarfile...") - - # 2. Fallback to pure Python with iterative progress - print("Using pure Python tarfile fallback...") - # Opening with "r" allows Python to transparently auto-detect gz, bz2, or xz compression - with tarfile.open(tar_path, "r") as tar: - with tqdm(desc="Extracting (Python)", unit="file") as pbar: - for member in tar: - # filter="data" prevents directory traversal attacks (Requires Python 3.12+) - # Note: If you are using Python 3.11 or older, remove the filter="data" argument +def extract_tar(tar_path, extract_path): + """Extract TAR using native tools when available, otherwise Python's data filter.""" + print(f"Extracting {tar_path} to {extract_path}...") + os.makedirs(extract_path, exist_ok=True) + if not _extract_native(["tar", "-xvf", tar_path, "-C", extract_path]): + print("Using pure Python tarfile fallback...") + with tarfile.open(tar_path, "r") as tar: + for member in tqdm(tar, desc="Extracting (Python)", unit="file"): tar.extract(member, path=extract_path, filter="data") - pbar.update(1) - print("Extraction complete.") def extract_zip(zip_path, extract_path): - """Extracts a zip archive using native tools if available, with a Python fallback.""" + """Extract ZIP using native tools when available, with a Python fallback.""" print(f"Extracting {zip_path} to {extract_path}...") os.makedirs(extract_path, exist_ok=True) - - # 1. Try using system native 'unzip' command with real-time polling - if shutil.which("unzip"): - print("Using system native 'unzip' with real-time progress...") - try: - # -o : overwrite existing files without prompting (prevents hanging) - # -d : specify destination directory - process = subprocess.Popen( - ["unzip", "-o", zip_path, "-d", extract_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 - ) - - with tqdm(desc="Extracting (Native)", unit="file") as pbar: - for line in process.stdout: - # Filter out empty lines or the initial "Archive:" header - if line.strip() and not line.startswith("Archive:"): - pbar.update(1) - - process.wait() - # unzip returns 0 for success, 1 for non-fatal warnings (like an empty zip) - if process.returncode not in (0, 1): - raise subprocess.SubprocessError(f"Unzip failed with exit code {process.returncode}") - - print("Extraction complete.") - return - - except Exception as e: - print(f"Native 'unzip' failed: {e}. Falling back to Python zipfile...") - - # 2. Fallback to pure Python with total % progress - print("Using pure Python zipfile fallback...") - with zipfile.ZipFile(zip_path, "r") as zip_ref: - members = zip_ref.infolist() - # Because zips have a central directory, we can provide a 'total' for a 0-100% bar - with tqdm(total=len(members), desc="Extracting (Python)", unit="file") as pbar: - for member in members: - zip_ref.extract(member, path=extract_path) - pbar.update(1) - + # unzip's status 1 is a warning; -o permits overwriting without a prompt. + if not _extract_native(["unzip", "-o", zip_path, "-d", extract_path], success_codes=(0, 1)): + print("Using pure Python zipfile fallback...") + with zipfile.ZipFile(zip_path, "r") as archive: + for member in tqdm(archive.infolist(), desc="Extracting (Python)", unit="file"): + archive.extract(member, path=extract_path) print("Extraction complete.") diff --git a/tests/examples/test_archives.py b/tests/examples/test_archives.py new file mode 100644 index 0000000..6c522ee --- /dev/null +++ b/tests/examples/test_archives.py @@ -0,0 +1,39 @@ +"""Native extraction and Python fallback preserve the same dataset files.""" + +import shutil + +import pytest + +from examples import utils + + +@pytest.mark.parametrize("kind,tool", [("gztar", "tar"), ("zip", "unzip")]) +@pytest.mark.parametrize("backend", ["native", "python", "failed-native"]) +def test_extract_overwrites_files_and_preserves_nested_content(tmp_path, monkeypatch, kind, tool, backend): + source = tmp_path / "source" + (source / "nested/empty").mkdir(parents=True) + (source / "nested/image.bin").write_bytes(bytes(range(256))) + (source / "labels.txt").write_text("species\n") + archive = shutil.make_archive(str(tmp_path / "dataset"), kind, source) + output = tmp_path / "output" + output.mkdir() + (output / "labels.txt").write_text("stale") + (output / "unrelated.txt").write_text("keep") + if backend == "native": + if not shutil.which(tool): + pytest.skip(f"{tool} unavailable") + elif backend == "python": + monkeypatch.setattr(utils.shutil, "which", lambda _: None) + else: + monkeypatch.setattr(utils.shutil, "which", lambda name: name) + + def unavailable(*args, **kwargs): + raise OSError("native extractor failed") + + monkeypatch.setattr(utils.subprocess, "Popen", unavailable) + extract = utils.extract_tar if kind == "gztar" else utils.extract_zip + extract(archive, output) + assert (output / "nested/image.bin").read_bytes() == bytes(range(256)) + assert (output / "nested/empty").is_dir() + assert (output / "labels.txt").read_text() == "species\n" + assert (output / "unrelated.txt").read_text() == "keep" From d318a4a76a8fbfc1257e342a8d1205befcceb164 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 12:59:16 +0200 Subject: [PATCH 145/221] fix: publish example archives only after successful transfer --- examples/utils.py | 12 +++++++-- tests/examples/test_downloads.py | 45 ++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 tests/examples/test_downloads.py diff --git a/examples/utils.py b/examples/utils.py index 394ddd9..ba90d95 100644 --- a/examples/utils.py +++ b/examples/utils.py @@ -6,6 +6,7 @@ import shutil import subprocess import tarfile +import tempfile import time import urllib.request import zipfile @@ -49,8 +50,17 @@ def report_error(function, path, error): def download_with_progress(url, dst, max_workers=8): + """Publish a downloaded archive only after its transfer succeeds.""" print(f"Downloading {url} to {dst}...") + destination = os.path.abspath(dst) + with tempfile.TemporaryDirectory(dir=os.path.dirname(destination), prefix=".download-") as staging: + partial = os.path.join(staging, os.path.basename(destination)) + _download_to_file(url, partial, max_workers) + os.replace(partial, destination) + print("Download complete.") + +def _download_to_file(url, dst, max_workers): # 1. HEAD request to check size and range support req = urllib.request.Request(url, method="HEAD", headers={"User-Agent": "Mozilla/5.0"}) try: @@ -129,8 +139,6 @@ def download_chunk(start_pos, end_pos): f.write(buffer) pbar.update(len(buffer)) - print("Download complete.") - def _extract_native(command, success_codes=(0,)): """Run an available extractor; let the caller use Python on failure.""" diff --git a/tests/examples/test_downloads.py b/tests/examples/test_downloads.py new file mode 100644 index 0000000..96d0aa3 --- /dev/null +++ b/tests/examples/test_downloads.py @@ -0,0 +1,45 @@ +"""Failed downloads must not become reusable dataset archives.""" + +import io + +import pytest + +from examples import utils + + +@pytest.mark.parametrize("parallel", [False, True]) +@pytest.mark.parametrize("existing", [False, True]) +@pytest.mark.parametrize("error", [OSError, KeyboardInterrupt]) +def test_download_failure_preserves_destination_and_allows_retry(tmp_path, monkeypatch, parallel, existing, error): + destination = tmp_path / "images.tar.gz" + if existing: + destination.write_bytes(b"previous archive") + before = {p.name: p.read_bytes() for p in tmp_path.iterdir()} + payload = b"image bytes" * (1_000_000 if parallel else 3) + failed = True + + class Response(io.BytesIO): + def info(self): + return {"Content-Length": str(len(payload)), "Accept-Ranges": "bytes" if parallel else "none"} + + def read(self, size=-1): + if failed and self.tell(): + raise error("transfer interrupted") + return super().read(size) + + def open_url(request): + if request.get_method() == "HEAD": + return Response() + # A replacement must stay invisible until the entire transfer succeeds. + assert {p.name: p.read_bytes() for p in tmp_path.iterdir() if p.is_file()} == before + return Response(payload) + + monkeypatch.setattr(utils.urllib.request, "urlopen", open_url) + monkeypatch.setattr(utils.time, "sleep", lambda _: None) + with pytest.raises(error, match="transfer interrupted"): + utils.download_with_progress("https://example.invalid/images.tar.gz", destination) + assert {p.name: p.read_bytes() for p in tmp_path.iterdir()} == before + failed = False + utils.download_with_progress("https://example.invalid/images.tar.gz", destination) + assert list(tmp_path.iterdir()) == [destination] + assert destination.read_bytes() == payload From 86161c174fff1560a44eb5d3a210b30e98dd4c33 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:01:42 +0200 Subject: [PATCH 146/221] refactor: normalize explicit metadata labels before folder discovery --- mini_trainer/data/metadata.py | 30 +++++++++++------------------- tests/data/test_data.py | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/mini_trainer/data/metadata.py b/mini_trainer/data/metadata.py index 12d2c01..01b821b 100644 --- a/mini_trainer/data/metadata.py +++ b/mini_trainer/data/metadata.py @@ -344,9 +344,6 @@ def label_to_class_idx( return cls2idx_flat.get(str(label), None) if str(label) in cls2idx_flat else cls2idx_flat.get(label, None) -# TODO: Unfortunately, this function has some functionality for the hierarchical submodule -# even though the core mini_trainer module and the hierarchical submodule are -# supposed to be entirely compartmentalized. Difficulty to fix: very high. def create_metadata( directory: str | Path | dict | list[str | Path | dict], cls2idx: dict[str, int] | dict[str, dict[str, int]] | None = None, @@ -360,7 +357,13 @@ def create_metadata( seed: int | None = None, **kwargs, ) -> dict[str, list]: - """Create or generate dataset metadata / data index.""" + """Build path/class/split/label columns, optionally writing a JSON index. + + Lists and OrderedDict labels select and order class folders; ordinary dicts + remap labels on collected samples. Supplied splits are retained (validation + becomes test when explicitly requesting two splits); otherwise partition each + class using the requested proportions, minimum frequencies and seed. + """ if isinstance(directory, (str, Path)) and str(directory).endswith(".parquet"): return get_metadata_from_parquet(str(directory), cls2idx=cls2idx or {}) @@ -378,14 +381,8 @@ def create_metadata( labels = labels_from_taxonomy(tax) if isinstance(labels, list): - dir_str = str(directory) if isinstance(directory, (str, Path)) else "." - labels_map = OrderedDict([(lab[0] if isinstance(lab, (list, tuple)) else lab, lab) for lab in labels]) - samples = [ - (img, tuple(cls) if isinstance(cls, list) else cls, None) - for d, cls in labels_map.items() - for img in find_images(os.path.join(dir_str, str(d))) - ] - elif isinstance(labels, OrderedDict): + labels = OrderedDict((lab[0] if isinstance(lab, (list, tuple)) else lab, lab) for lab in labels) + if isinstance(labels, OrderedDict): dir_str = str(directory) if isinstance(directory, (str, Path)) else "." samples = [ (img, tuple(cls) if isinstance(cls, list) else cls, None) @@ -528,13 +525,8 @@ def parse_class_spec(path: str | None = None, dir: str | None = None, species: b else: raise TypeError(f'If `path` is not the path to a valid file, `dir` must be a valid directory, not "{dir}".') else: - cls2idx = { - cls: i - for i, cls in enumerate( - sorted(filter(lambda f: os.path.isdir(os.path.join(dir, f)), map(os.path.basename, os.listdir(dir)))) - ) - } - data = {"cls2idx": cls2idx, "num_classes": len(cls2idx)} + classes = sorted(name for name in os.listdir(dir) if os.path.isdir(os.path.join(dir, name))) + data = {"cls2idx": {cls: i for i, cls in enumerate(classes)}, "num_classes": len(classes)} if species: cls2idx = data["cls2idx"] assert isinstance(cls2idx, dict) diff --git a/tests/data/test_data.py b/tests/data/test_data.py index 4da2ff7..361d55f 100644 --- a/tests/data/test_data.py +++ b/tests/data/test_data.py @@ -169,3 +169,24 @@ def test_folder_resolution_uses_level_count_not_deepest_rank(tmp_path, monkeypat labels, paths = metadata_module.auto_find_images(str(tmp_path), cls2idx={"0": {"111": 0}, "1": {"222": 0}, "2": {"333": 0}}, labels={}) assert labels == [("1775152", "genus-id", "family-id")] assert paths == [str(folder / "image.jpg")] + + +@pytest.mark.parametrize("hierarchical", [False, True]) +def test_metadata_explicit_folder_labels_preserve_order_and_class_indices(tmp_path, hierarchical): + for name in ("b", "a", "unselected"): + (tmp_path / name).mkdir() + (tmp_path / name / "image.jpg").write_bytes(b"\xff\xd8\xff") + labels = [["b", "parent"], ["a", "parent"]] if hierarchical else ["b", "a"] + mapping = OrderedDict(zip(("b", "a"), labels)) + class_spec = {"0": {"a": 0, "b": 1}, "1": {"parent": 0}} if hierarchical else {"a": 0, "b": 1} + expected = { + "path": [str(tmp_path / name / "image.jpg") for name in ("b", "a")], + "class": [[1, 0], [0, 0]] if hierarchical else [1, 0], + "split": ["train", "train"], + "label": [("b", "parent"), ("a", "parent")] if hierarchical else labels, + } + for supplied in (labels, mapping): + result = metadata_module.create_metadata(tmp_path, cls2idx=class_spec, labels=supplied, train_proportion=1, seed=42) + assert result == expected + assert list(mapping) == ["b", "a"] + assert list(mapping.values()) == labels From e300c3a24176f148c385d2c29e29c4eb0407affd Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:04:14 +0200 Subject: [PATCH 147/221] refactor: simplify classifier prediction translation and retire dead scaffolding --- mini_trainer/modeling/classifier.py | 41 +++++++---------------------- tests/modeling/test_prediction.py | 25 ++++++++++++++++++ 2 files changed, 34 insertions(+), 32 deletions(-) create mode 100644 tests/modeling/test_prediction.py diff --git a/mini_trainer/modeling/classifier.py b/mini_trainer/modeling/classifier.py index f327ed5..bd9a884 100644 --- a/mini_trainer/modeling/classifier.py +++ b/mini_trainer/modeling/classifier.py @@ -3,29 +3,22 @@ from collections import OrderedDict, defaultdict from contextlib import contextmanager from dataclasses import dataclass -from typing import Any, TypeVar +from functools import lru_cache +from typing import Any import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from torch._prims_common import DeviceLikeType +from torch.nn.utils.parametrizations import weight_norm from mini_trainer import get_logger from mini_trainer.utils import class_path, cosine_to_zscore, dtype_to_string, import_class, string_to_dtype from .architectures import get_model -from .prior import prior_from_labels -from .quantized_training import load_training_weights, restore_quantized_training - -try: - from torch.nn.utils.parametrizations import weight_norm -except Exception: # fallback for older installs - from torch.nn.utils import weight_norm - -from functools import lru_cache - from .context import EmbeddingContext +from .quantized_training import load_training_weights, restore_quantized_training class Classifier(nn.Module): @@ -308,7 +301,6 @@ def load( raise NotImplementedError( "DEPRECATED: This method of logit adjustment is currently defunct. Please use EMLACrossEntropy instead." ) - kwargs["prior"] = prior_from_labels(train_labels, cls2idx=cls2idx) with device: architecture.add_module(architecture_output_name, cls(**kwargs)) for k, v in cfg.items(): @@ -486,10 +478,6 @@ def to_dict(self): return {"label": self.label, "confidence": self.confidence, "index": self.index} -T = TypeVar("T", bound=PredictionItem) -I = TypeVar("I") # noqa: E741 - - class BasePrediction[T: PredictionItem, I]: """Prediction container; subclasses define score processing and label mapping.""" @@ -572,22 +560,11 @@ def _process(self, raw_prediction): return torch.topk(raw_prediction, k) def _translate(self): - if self.idx2cls: - _idx2cls = self.idx2cls.copy() - - def fmt_idx(i: int | torch.Tensor): - if isinstance(i, torch.Tensor): - i = int(i.item()) - return _idx2cls[i] - - else: - - def fmt_idx(i: int | torch.Tensor): - if isinstance(i, torch.Tensor): - i = int(i.item()) - return str(i) - - return [[fmt_idx(i) for i in idxs] for idxs in self.indices] + indices = self.indices.tolist() + mapping = self.idx2cls + if mapping: + return [[mapping[i] for i in row] for row in indices] + return [[str(i) for i in row] for row in indices] def _extract_confidence(self, raw_prediction): if not ( diff --git a/tests/modeling/test_prediction.py b/tests/modeling/test_prediction.py new file mode 100644 index 0000000..1a8004c --- /dev/null +++ b/tests/modeling/test_prediction.py @@ -0,0 +1,25 @@ +import json +from contextlib import nullcontext + +import pytest +import torch + +from mini_trainer.modeling import Prediction + + +@pytest.mark.parametrize("mapping", [None, {}, {"cat": 1, "bird": 2, "dog": 0}]) +@pytest.mark.parametrize("topk", [1, 2]) +def test_prediction_labels_follow_score_indices(mapping, topk, tmp_path): + logits = torch.tensor([[-1.0, 3.0, 1.0], [2.0, -3.0, 0.0]]) + with pytest.warns(UserWarning, match="experimental") if topk == 2 else nullcontext(): + result = Prediction(logits, cls2idx=mapping, topk=topk) + labels = [["cat", "bird"], ["dog", "bird"]] if mapping else [["1", "2"], ["0", "2"]] + assert result.labels == [row[:topk] for row in labels] + assert result.indices.tolist() == [row[:topk] for row in [[1, 2], [0, 2]]] + torch.testing.assert_close(result.confidence, logits.softmax(-1).gather(-1, result.indices)) + if topk == 1: + path = tmp_path / "predictions.json" + result.save(path) + saved = json.loads(path.read_text()) + assert [item["label"] for item in saved["results"]] == [row[0] for row in labels] + assert [item["index"] for item in saved["results"]] == [1, 0] From 420bb36dae12490a1925d4510c5e1db24fd0bb6b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:06:56 +0200 Subject: [PATCH 148/221] refactor: centralize release metric revision checks --- dev/releases/mambo_v3/compact_tta_metrics.py | 7 ++----- dev/releases/mambo_v3/composed_metrics.py | 7 ++----- .../mambo_v3/family_precision_report.py | 7 ++----- dev/releases/mambo_v3/frequency_comparison.py | 7 ++----- dev/releases/mambo_v3/indomain_report.py | 7 ++----- dev/releases/mambo_v3/metrics.py | 13 +++++++++---- dev/releases/mambo_v3/tail_report.py | 7 ++----- dev/releases/mambo_v3/threshold_report.py | 7 ++----- tests/releases/test_release_evaluation.py | 17 +++++++++++++++++ 9 files changed, 40 insertions(+), 39 deletions(-) diff --git a/dev/releases/mambo_v3/compact_tta_metrics.py b/dev/releases/mambo_v3/compact_tta_metrics.py index dd2a77a..61d5db0 100644 --- a/dev/releases/mambo_v3/compact_tta_metrics.py +++ b/dev/releases/mambo_v3/compact_tta_metrics.py @@ -2,21 +2,18 @@ import argparse import csv -import importlib.metadata import json from pathlib import Path from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics def collect(root, study): from mini_metrics.data import MetricDF from mini_metrics.metrics import evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError("Require pinned mini_metrics") + require_pinned_metrics() report = json.loads((root / "report.json").read_text()) if report["status"] != "complete": raise ValueError("Incomplete inference") diff --git a/dev/releases/mambo_v3/composed_metrics.py b/dev/releases/mambo_v3/composed_metrics.py index 5327731..379e31f 100644 --- a/dev/releases/mambo_v3/composed_metrics.py +++ b/dev/releases/mambo_v3/composed_metrics.py @@ -2,7 +2,6 @@ import argparse import csv -import importlib.metadata import json from collections import Counter from pathlib import Path @@ -12,7 +11,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.composed_full import SHORTLIST from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from dev.releases.mambo_v3.tail_report import eligible_classes from dev.releases.mambo_v3.threshold_report import identity @@ -26,9 +25,7 @@ def collect(args): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall, OptimalConfidenceThreshold, evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError("Require pinned mini_metrics") + require_pinned_metrics() args.output.mkdir(parents=True, exist_ok=True) baseline = json.loads(args.baseline.read_text()) sources = {model: row["source"] for model, row in baseline["models"].items()} diff --git a/dev/releases/mambo_v3/family_precision_report.py b/dev/releases/mambo_v3/family_precision_report.py index d5c783b..66210bc 100644 --- a/dev/releases/mambo_v3/family_precision_report.py +++ b/dev/releases/mambo_v3/family_precision_report.py @@ -2,7 +2,6 @@ import argparse import csv -import importlib.metadata import json from collections import Counter from pathlib import Path @@ -11,7 +10,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from dev.releases.mambo_v3.threshold_report import identity @@ -59,9 +58,7 @@ def collect(study_path, taxonomy_path): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroF1, MacroPrecision, MacroRecall, evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError("Use the pinned mini_metrics environment") + require_pinned_metrics() study = json.loads(study_path.read_text()) taxonomy = json.loads(taxonomy_path.read_text()) result = {"revision": REVISION, "study_sha256": file_hash(study_path), "taxonomy": taxonomy, "models": {}} diff --git a/dev/releases/mambo_v3/frequency_comparison.py b/dev/releases/mambo_v3/frequency_comparison.py index c6b4ef7..90f2b6d 100644 --- a/dev/releases/mambo_v3/frequency_comparison.py +++ b/dev/releases/mambo_v3/frequency_comparison.py @@ -1,7 +1,6 @@ """Compare pinned mini_metrics accuracy by training and evaluation class support.""" import argparse -import importlib.metadata import json import tomllib from collections import Counter @@ -11,7 +10,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from .figure_export import save_figure @@ -54,9 +53,7 @@ def measure(args): from mini_metrics.data import MetricDF from mini_metrics.metrics import evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) - if provenance["vcs_info"]["commit_id"] != REVISION: - raise ValueError("Wrong mini_metrics revision") + require_pinned_metrics() training = json.loads(args.counts.read_text()) roots = {"v2": args.v2, "v3-torch": args.v3 / "torch-cuda-0-prediction", "v3-onnx": args.v3 / "onnx-cuda-0-prediction"} result = { diff --git a/dev/releases/mambo_v3/indomain_report.py b/dev/releases/mambo_v3/indomain_report.py index 2b4ca86..2e12846 100644 --- a/dev/releases/mambo_v3/indomain_report.py +++ b/dev/releases/mambo_v3/indomain_report.py @@ -2,7 +2,6 @@ import argparse import csv -import importlib.metadata import json from pathlib import Path @@ -11,7 +10,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.defaults_report import SERIES from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from dev.releases.mambo_v3.tail_charts import render_paired from dev.releases.mambo_v3.tail_report import collect as collect_tails from dev.releases.mambo_v3.threshold_report import identity @@ -22,9 +21,7 @@ def collect(root, output): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json")) - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError("Require pinned mini_metrics") + require_pinned_metrics() plan = json.loads((root / "full/plan.json").read_text()) if plan["status"] != "complete" or set(plan["completed"]) != {m for m, _, _ in SERIES}: raise ValueError("Require five completed models") diff --git a/dev/releases/mambo_v3/metrics.py b/dev/releases/mambo_v3/metrics.py index e2a25b8..ede4e88 100644 --- a/dev/releases/mambo_v3/metrics.py +++ b/dev/releases/mambo_v3/metrics.py @@ -27,14 +27,19 @@ def finite_json(value): return value -def measure(source): - from mini_metrics.data import MetricDF - from mini_metrics.metrics import evaluate_file - +def require_pinned_metrics(): + """Reject metric environments without the campaign's recorded Git revision.""" distribution = importlib.metadata.distribution("mini_metrics") provenance = json.loads(distribution.read_text("direct_url.json") or "{}") if provenance.get("vcs_info", {}).get("commit_id") != REVISION: raise ValueError(f"Require mini_metrics git revision {REVISION} in a separate environment") + + +def measure(source): + from mini_metrics.data import MetricDF + from mini_metrics.metrics import evaluate_file + + require_pinned_metrics() data = MetricDF.from_source(source) if np.any(data.threshold != 0) or not np.isfinite(data.confidence).all(): raise ValueError("Evaluation requires finite, unthresholded predictions") diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py index 49ff494..36de8e5 100644 --- a/dev/releases/mambo_v3/tail_report.py +++ b/dev/releases/mambo_v3/tail_report.py @@ -2,14 +2,13 @@ import argparse import csv -import importlib.metadata import json from collections import Counter from pathlib import Path from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from dev.releases.mambo_v3.threshold_report import identity @@ -26,9 +25,7 @@ def collect(study, *, full_dataset=False): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError("Require pinned mini_metrics") + require_pinned_metrics() metrics = {"accuracy": MacroAccuracy(), "precision": MacroPrecision(), "recall": MacroRecall(), "f1": MacroF1()} work = {} identities = {} diff --git a/dev/releases/mambo_v3/threshold_report.py b/dev/releases/mambo_v3/threshold_report.py index ca5aa61..7e6275d 100644 --- a/dev/releases/mambo_v3/threshold_report.py +++ b/dev/releases/mambo_v3/threshold_report.py @@ -3,7 +3,6 @@ import argparse import csv import hashlib -import importlib.metadata import json from pathlib import Path @@ -13,7 +12,7 @@ from dev.releases.mambo_v3.acceleration_report import METRICS from dev.releases.mambo_v3.defaults_report import SERIES from dev.releases.mambo_v3.evaluation_data import write_json -from dev.releases.mambo_v3.metrics import REVISION, finite_json +from dev.releases.mambo_v3.metrics import REVISION, finite_json, require_pinned_metrics from .figure_export import save_figure @@ -37,9 +36,7 @@ def collect(root, output): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroF1, OptimalConfidenceThreshold, evaluate_file - provenance = json.loads(importlib.metadata.distribution("mini_metrics").read_text("direct_url.json") or "{}") - if provenance.get("vcs_info", {}).get("commit_id") != REVISION: - raise ValueError(f"Require mini_metrics revision {REVISION}") + require_pinned_metrics() output.mkdir(parents=True, exist_ok=True) result = { "revision": REVISION, diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index af4d02f..f61d5fc 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -242,3 +242,20 @@ def test_matched_coverage_keeps_ties_and_does_not_use_truth(tmp_path): assert result["thresholds"] == [0.5, 0.5, 0.5] # A shared score must not be arbitrarily split to manufacture exact target coverage. assert result["coverage"] == {"0": 0.75, "1": 0.75, "2": 0.75} + + +@pytest.mark.parametrize("revision", [None, "", "different-revision", "pinned"]) +def test_metric_environment_requires_recorded_git_revision(monkeypatch, revision): + from types import SimpleNamespace + + from dev.releases.mambo_v3 import metrics + + commit = metrics.REVISION if revision == "pinned" else revision + metadata = json.dumps({"vcs_info": {"commit_id": commit}}) if revision is not None else None + distribution = SimpleNamespace(read_text=lambda name: metadata) + monkeypatch.setattr(metrics.importlib.metadata, "distribution", lambda name: distribution) + if revision == "pinned": + metrics.require_pinned_metrics() + else: + with pytest.raises(ValueError, match=metrics.REVISION): + metrics.require_pinned_metrics() From fdcfd0ca4d065c7b3a7c9987b2b4fe5aaaa6c442 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:10:02 +0200 Subject: [PATCH 149/221] test: consolidate UCloud plan routing scenarios --- tests/releases/test_ucloud_release.py | 70 ++++++++++----------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 633a1fe..172855a 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -10,19 +10,38 @@ CONFIG = Path("dev/releases/mambo_v3/ucloud_release.json") -def test_quality_plan_preserves_global_population_and_legacy_isolation(): +@pytest.mark.parametrize("phase", ["qualification", "full", "benchmark"]) +def test_plan_routes_runtime_loading_and_batch_controls(phase): config = configuration(CONFIG.resolve()) - plan = jobs(config, "qualification") - for job in plan: + config["qualification_count"] = 7 + legacy = {job["name"]: job["command"] for job in jobs(config, phase) if job["legacy"]} + config.update(onnx_python="/isolated/onnx/bin/python", decode_workers=16, prefetch_batches=2, v3_batch_size=256) + for job in jobs(config, phase): command = job["command"] - assert command[command.index("--presets") + 1] == "full" - assert command[command.index("--count") + 1] == "256" + interpreter = "onnx_python" if job["variant"].startswith("onnx") else "v2_python" if job["legacy"] else "v3_python" + assert command[0] == config[interpreter] if job["legacy"]: - assert "-P" in command and "--precision" not in command + assert "-P" in command and "--precision" not in command and "--prefetch-batches" not in command + if phase != "benchmark": + assert command == legacy[job["name"]] else: assert command[command.index("--precision") + 1] == "auto" assert command[command.index("--tta") + 1] == (RECIPE if job["variant"].endswith("tta") else "none") - assert all("--count" not in j["command"] for j in jobs(config, "full")) + worker_option = "--stream-workers" if phase == "benchmark" else "--decode-workers" + assert command[command.index(worker_option) + 1] == "16" + assert command[command.index("--prefetch-batches") + 1] == "2" + if phase == "benchmark": + assert command[command.index("--bank-size") + 1] == "256" + sizes = command[command.index("--batches") + 1 : command.index("--bank-size")] + assert ("256" in sizes) == (not job["legacy"] and job["device"] != "cpu") + else: + assert command[command.index("--presets") + 1] == "full" + if not job["legacy"]: + assert command[command.index("--batch-size") + 1] == "256" + if phase == "qualification": + assert command[command.index("--count") + 1] == "7" + else: + assert "--count" not in command def test_benchmark_bank_and_trials_match_across_backends(): @@ -217,15 +236,6 @@ def test_new_campaign_reuses_assets_and_preserves_existing_evidence(tmp_path, mo assert (output / "config.json").read_bytes() == before -@pytest.mark.parametrize("phase", ["qualification", "full", "benchmark"]) -def test_separate_onnx_interpreter_only_routes_onnx_jobs(phase): - config = configuration(CONFIG.resolve()) - config["onnx_python"] = "/isolated/onnx/bin/python" - for job in jobs(config, phase): - expected = config["onnx_python"] if job["variant"].startswith("onnx") else config["v2_python" if job["legacy"] else "v3_python"] - assert job["command"][0] == expected - - @pytest.mark.parametrize("tamper", [None, "manifest", "environment", "script", "csv", "samples"]) def test_reuse_completed_v2_only_when_evidence_matches(tmp_path, tamper): import copy @@ -274,31 +284,3 @@ def test_reuse_completed_v2_only_when_evidence_matches(tmp_path, tamper): result = reuse_v2(config, "full", job, frozen) assert result["source"] == str(source) assert (tmp_path / "new/full/v2/full/mini_metric.csv").read_text() == "original predictions" - - -def test_loading_controls_apply_only_to_v3_collection(): - config = configuration(CONFIG.resolve()) - config.update(decode_workers=16, prefetch_batches=2) - for phase in ("qualification", "full", "benchmark"): - for job in jobs(config, phase): - command = job["command"] - if phase != "benchmark" and not job["legacy"]: - assert command[command.index("--decode-workers") + 1] == "16" - assert command[command.index("--prefetch-batches") + 1] == "2" - elif job["legacy"]: - assert "--prefetch-batches" not in command - - -def test_large_v3_batch_preserves_v2_reuse_and_shared_timing_bank(): - config = configuration(CONFIG.resolve()) - original = jobs(config, "full")[0]["command"] - config["v3_batch_size"] = 256 - assert jobs(config, "full")[0]["command"] == original - for job in jobs(config, "full")[1:]: - c = job["command"] - assert c[c.index("--batch-size") + 1] == "256" - for job in jobs(config, "benchmark"): - c = job["command"] - assert c[c.index("--bank-size") + 1] == "256" - sizes = c[c.index("--batches") + 1 : c.index("--bank-size")] - assert ("256" in sizes) == (not job["legacy"] and job["device"] != "cpu") From 9753b07fb8ee3e66ac6b451a134d16bce935d493 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:13:49 +0200 Subject: [PATCH 150/221] test: consolidate streaming pixel contracts and exercise compact TTA --- tests/releases/test_streaming.py | 44 ++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tests/releases/test_streaming.py b/tests/releases/test_streaming.py index cb3562d..29a2c23 100644 --- a/tests/releases/test_streaming.py +++ b/tests/releases/test_streaming.py @@ -21,19 +21,41 @@ def inputs(tmp_path, count=9): @pytest.mark.parametrize("tta", [None, resolve_tta("rotation30_pad25_3")]) -def test_order_pixels_and_bounds(tmp_path, tta): +@pytest.mark.parametrize("compact", [False, True]) +def test_order_pixels_and_bounds(tmp_path, tta, compact): + if compact: + import torch + + from deployment.mambo_deploy.preprocessing import TorchPreprocess + + finish = TorchPreprocess(torch, "cpu") items = inputs(tmp_path) stats = {} batches = list( streaming.prepared_stream( - items, 2, tta=tta, read_workers=8, prepare_workers=3, read_window=8, prefetch_batches=2, encoded_budget=400, stats=stats + items, + 2, + tta=tta, + compact=compact, + read_workers=8, + prepare_workers=3, + read_window=8, + prefetch_batches=2, + encoded_budget=400, + stats=stats, ) ) assert [offset for offset, _ in batches] == [0, 2, 4, 6, 8] for offset, views in batches: expected = [streaming.prepare_image(p.read_bytes(), tta) for p, _ in items[offset : offset + len(views[0])]] + assert len(views) == len(expected[0]) for i, view in enumerate(views): - np.testing.assert_array_equal(view, np.stack([image[i] for image in expected])) + reference = np.stack([image[i] for image in expected]) + if compact: + assert view.dtype == np.uint8 and view.nbytes * 4 == reference.nbytes + np.testing.assert_allclose(finish(torch.from_numpy(view)).numpy(), reference, atol=1e-6) + else: + np.testing.assert_array_equal(view, reference) assert stats["peak_encoded_bytes"] <= 400 assert stats["peak_prepared_images"] <= 6 @@ -195,22 +217,6 @@ def test_cuda_deferred_download_retains_outputs_after_slot_reuse(): np.testing.assert_array_equal(sums, np.full(8, index * 128)) -@pytest.mark.parametrize("tta", [None, resolve_tta("rotation30_pad25_3")]) -def test_compact_stream_preserves_views_and_quarters_storage(tmp_path, tta): - import torch - - from deployment.mambo_deploy.preprocessing import TorchPreprocess - - finish = TorchPreprocess(torch, "cpu") - paths = inputs(tmp_path, 5) - for offset, views in streaming.prepared_stream(paths, 2, compact=True): - for index, view in enumerate(views): - assert view.dtype == np.uint8 - expected = np.stack([streaming.prepare_image(p.read_bytes(), tta)[index] for p, _ in paths[offset : offset + len(view)]]) - assert view.nbytes * 4 == expected.nbytes - np.testing.assert_allclose(finish(torch.from_numpy(view)).numpy(), expected, atol=1e-6) - - def test_ready_work_prioritizes_earliest_batch(tmp_path, monkeypatch): import time from concurrent.futures import ThreadPoolExecutor From 71b9c09ed6e4c9559dd93b7f4d5ec346d7924922 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:17:57 +0200 Subject: [PATCH 151/221] docs: focus rendering guides on contracts and reproducible evidence --- dev/benchmarks/reporting/confusion.md | 147 ++++++++++------------ dev/benchmarks/reporting/dendrogram.md | 162 ++++++++++--------------- 2 files changed, 124 insertions(+), 185 deletions(-) diff --git a/dev/benchmarks/reporting/confusion.md b/dev/benchmarks/reporting/confusion.md index 645c221..7d32e8f 100644 --- a/dev/benchmarks/reporting/confusion.md +++ b/dev/benchmarks/reporting/confusion.md @@ -1,85 +1,64 @@ # Whole-matrix confusion diagnostics -Confusion figures retain every model output index on both axes, including -prediction-only and unobserved classes, in the same order across epochs. Rows -are true classes and columns are predicted classes. Class names can be resolved -from the saved model/config classifier metadata. No taxonomy regrouping or -selected-pair view replaces the full matrix. - -The specialized reporting logic lives in `mini_trainer/logging/confusion.py`: -rank reduction, whole-matrix overviews, palette encoding and numerical artifacts. -The existing `visualization/plot.py` retains generic heatmap/colorbar rendering; -its byte-color mapping now uses bounded chunks with regression checks against -the previous RGB pixels. No new runtime dependencies or background service are -introduced. +Confusion figures keep every model output index on both axes, including +prediction-only and unobserved classes. Rows are truth and columns predictions; +resolve names from saved classifier metadata. Class order stays fixed across epochs. +[logging/confusion.py](../../../mini_trainer/logging/confusion.py) owns distributed +reduction, previews and numerical artifacts; generic heatmaps remain in +`visualization/plot.py`. ## Dashboard images and local detail -TensorBoard/W&B receive RGB previews with a matrix side of at most 1,536 pixels, -plus a 200-pixel legend and a 24-pixel caption. Each preview covers the entire -matrix. For N classes its block width is `ceil(N / 1536)`; a preview cell is the -arithmetic mean of the row-normalized probabilities in that block. Partial edge -blocks use their actual cell counts. This is an overview of probabilities, not -an aggregated or renormalized confusion matrix. The caption, `/overview_mean` -tag and metadata explicitly identify the reduction. Small images enlarge with -nearest-neighbor sampling; there are no cell borders or spatial smoothing. -Isolated errors may become less visible in the mean overview; native-resolution -images and numerical matrices retain them. - -Soft images use 128 positive logarithmic color levels over probabilities -`[1e-6, 1]`, plus dedicated black zero and magenta invalid/negative colors. Values -below the positive floor use the lowest positive color, never the zero color. -Hard images retain the 256-color magma mapping on the same fixed scale. Scales -remain comparable across epochs. Posterization changes displayed colors only; -raw values are retained. The full soft PNG is indexed (palette mode), without -dithering. The matching discrete colorbar is saved separately, so its text does -not expand the matrix palette. Dashboard previews include the legend. - -Each epoch saves the following under -`model/logs/figures/epoch-NNNN/Confusion_matrix_lvlL/` and -`Soft_confusion_matrix_lvlL/`: - -- `matrix.png`: one pixel per original class pair, without the old 5,000-class - maximum-pooling limit. The separate colorbar does not change matrix dimensions. -- `counts.npz` for hard matrices: exact integer COO arrays `rows`, `columns`, - `counts`, plus `shape`. Absent entries are zero. -- `probability_sums.npy` for soft matrices: the original accumulated float32 - probability sums, before normalization, clipping or posterization. -- `row_support.npy`: hard true-label counts or the soft row probability mass - used for normalization. Empty rows remain zero. -- `metadata.json`: original class indices, orientation, normalization, palette, - invalid-cell count and preview block shape; and `colorbar.png`. - -The soft NPY is deliberately uncompressed to avoid spending logging time -compressing high-entropy floats. It is about 100 MB for 5,000 classes and 400 MB -for 10,000 classes per saved epoch/level. Local storage therefore increases even -though dashboard traffic decreases. NumPy can inspect it with `mmap_mode='r'`. -Storage throughput on the production filesystem needs qualification. Accumulation -and exact matrix storage still scale quadratically with class count. Full-size -PNGs remain large decoded images; the bounded preview is what protects dashboard -responsiveness. This increment does not add a tile server or custom viewer. +TensorBoard/W&B receive an RGB whole-matrix preview with at most 1,536 cells per +side, plus a legend and caption. For N classes, block width is `ceil(N / 1536)`. +Each preview cell is the arithmetic mean of row-normalized probabilities in its +block; edge blocks use their actual counts. This is not a regrouped or renormalized +confusion matrix. The `/overview_mean` tag and metadata identify the reduction. +Small previews enlarge with nearest-neighbor sampling. Means may obscure isolated +errors; full-resolution images and numerical data retain them. + +Both palettes use a fixed logarithmic `[1e-6, 1]` probability scale across epochs: +soft images have 128 positive levels; hard images use 256-color magma. Black means +exact zero, magenta means invalid/negative, and positive values below the floor +use the lowest positive color. Soft PNGs use an indexed palette without dithering. +Rendering does not change raw values; a separate colorbar preserves the matrix palette. + +Each epoch writes beneath `model/logs/figures/epoch-NNNN/Confusion_matrix_lvlL/` +and `Soft_confusion_matrix_lvlL/`: + +| Artifact | Meaning | +| --- | --- | +| `matrix.png` | One pixel per original class pair, with no class-count pooling limit | +| `counts.npz` (hard) | Exact integer COO `rows`, `columns`, `counts` and `shape`; omitted entries are zero | +| `probability_sums.npy` (soft) | Accumulated float32 sums before normalization, clipping or palette mapping | +| `row_support.npy` | Hard truth counts or soft row probability mass used for normalization; empty rows stay zero | +| `metadata.json` | Class indices, orientation, normalization, palette, invalid-cell count and preview block shape | +| `colorbar.png` | Matching legend, also included in dashboard previews | + +Soft sums are uncompressed to avoid compression cost during logging: about 100 MB +at 5,000 classes or 400 MB at 10,000, per saved epoch/level. Inspect with NumPy +`mmap_mode='r'`. Accumulation/storage remain quadratic, and full PNGs are large when +decoded. Bounded previews reduce dashboard traffic; production storage throughput +still needs qualification. ## Distributed reporting -Every rank participates in confusion collection. Small shape descriptors allow -even a rank with no validation samples to participate; count and probability -matrices are summed onto rank zero in bounded chunks. NCCL uses temporary CUDA -chunks rather than placing the entire matrix on the GPU. Only rank zero renders, -writes artifacts and forwards preview images. Soft accumulation buffers are not -mutated, so repeated reporting does not double counts. Counts include validation -sampler padding, matching the samples actually reported; sample-ID deduplication -is outside this change. +All ranks participate, including ranks without validation samples. Shape descriptors +coordinate bounded reductions onto rank zero; NCCL uses temporary CUDA chunks. +Only rank zero renders, writes and forwards images. Soft buffers remain unchanged +across repeated reports. Counts include validation sampler padding; no sample-ID +deduplication is performed. -CPU two-process tests cover an empty rank, prediction-only classes and repeated -collection. CUDA/NCCL and live TensorBoard/W&B uploads remain target-job checks. +[CPU two-process tests](../../../tests/logging/test_confusion.py) cover an empty +rank, prediction-only classes and repeated collection. CUDA/NCCL and live dashboard +uploads require target-job checks. ## Reproduce rendering measurements -The benchmark uses seeded dense soft probabilities with 20 large diagonal blocks -and a diagonal signal. Timing includes normalization, image rendering and file -writes. The new path also writes the exact matrix and full-resolution PNG, which -the old path did not retain. RSS includes imports and the input matrix; it is not -training's peak memory. Run each case in a fresh process: +The seeded workload has dense soft probabilities, 20 diagonal blocks and a diagonal +signal. Timing includes normalization, rendering and file writes; the new path also +saves exact data and full-resolution PNGs absent from the old path. RSS includes +imports and inputs. Use a fresh process and output directory for each case: ```bash git show d521cef:mini_trainer/visualization/plot.py > /tmp/heatmap-before.py @@ -92,31 +71,29 @@ OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ # Repeat with --classes 10000 and new output directories. ``` -Representative local CPU results (decimal MB for file sizes): +Recorded local CPU results (decimal MB for file sizes): | Classes | Old/new seconds | Old/new peak RSS MiB | Old/new dashboard PNG MB | | --- | ---: | ---: | ---: | | 5,000 | 9.58 / 2.77 | 2,994 / 907 | 47.18 / 1.34 | | 10,000 | 12.12 / 6.62 | 3,236 / 1,258 | 33.00 / 1.11 | -The new full-resolution soft PNGs are 15.78 MB and 62.67 MB respectively. The old -10,000-class dashboard was already pooled to 5,000 cells per side; the new local -PNG preserves all 10,000. These are synthetic, host-specific measurements, -excluding distributed reduction and remote dashboard upload. +New full-resolution soft PNGs occupy 15.78 and 62.67 MB respectively. The old +10,000-class dashboard was pooled to 5,000 cells per side; new local PNGs preserve +all classes. These synthetic host-specific measurements exclude distributed +reduction and remote upload, and do not establish training peak memory. -The existing browser benchmark also accepts PNGs. With the disposable browser -environment described in [dendrogram.md](dendrogram.md), run: +For PNG browser measurements, use the disposable environment in +[dendrogram.md](dendrogram.md): ```bash /tmp/svg-browser-env/bin/python dev/benchmarks/reporting/svg_browser.py \ /tmp/confusion-before/dashboard.png /tmp/confusion-after/dashboard.png \ - --output /tmp/confusion-browser + --repeats 3 --output /tmp/confusion-browser ``` -For the final 5,000-class dashboard PNGs, headless Chromium's median decode plus -forced raster time (three interleaved runs per image/size, fresh contexts) was -1,132 ms before versus 52.6 ms after at a 1,200-pixel display, and 1,242 ms versus -170 ms at 4,800 pixels. This compares the old large dashboard image with the new -captioned whole-matrix preview; it does not imply that the full-resolution local -PNG is cheap to display. Timings exclude Python/browser startup, network transfer -and PNG encoding. Live TensorBoard/W&B end-to-end performance was not measured. +At 5,000 classes, headless Chromium's median decode plus forced raster time was +1,132 / 52.6 ms (old/new) at 1,200 pixels and 1,242 / 170 ms at 4,800 pixels. +These were three interleaved trials per image/size in fresh contexts, comparing the +old dashboard with the new captioned preview. Startup, network and PNG encoding +are excluded. This does not measure full-resolution PNG or live dashboard performance. diff --git a/dev/benchmarks/reporting/dendrogram.md b/dev/benchmarks/reporting/dendrogram.md index bb67bd1..3558907 100644 --- a/dev/benchmarks/reporting/dendrogram.md +++ b/dev/benchmarks/reporting/dendrogram.md @@ -1,57 +1,45 @@ # Dendrogram scaling and artifact validation -The renderer uses an iterative SciPy-linkage layout, retaining the original -right-child-first leaf order, distance-based radial positions and flat-cluster -assignments. It does not construct recursive BioPython/pyCirclize tree objects. -Same-color branches share paths; adjacent same-color taxonomy bands are merged. -Circular arcs use bounded chords or cubic Bezier segments instead of dense sampled -polylines. -Every leaf label remains present, including repeated display names. Single-class -levels render without attempting linkage. Taxonomy colors now follow stable -first-occurrence order rather than unordered set iteration. - -Training saves dendrogram SVGs with text elements instead of glyph outlines, -and retains all figure types under `model/logs/figures/epoch-NNNN/` even with the -default metrics-only logger. Matrix images are PNGs; dendrograms remain vector -SVGs. Rank zero owns local artifact writes. Existing external logging backends -still receive the figures. A failed export closes all created dendrogram figures. -Font appearance can depend on the SVG viewer's installed fonts. - -Species-name resolution uses at most eight concurrent lookups, reuses resolved -class lists across epochs (a bounded process-local cache), and falls back to the -original labels when the service or its disk cache is unavailable. GBIF HTTP -requests now have a ten-second socket timeout. This is not a hard total deadline -for taxonomy preparation. A cold large taxonomy still requires real API requests; -the subsequent epochs reuse the result. Logs distinguish label resolution, -per-level rendering and final export time. Pairwise model distances and Ward -linkage remain quadratic in class count; this change does not establish full -production-taxonomy memory capacity or multi-GPU figure latency. +Training retains dendrogram SVGs under `model/logs/figures/epoch-NNNN/`, including +with the metrics-only logger. Rank zero writes local artifacts and forwards figures +to configured logging backends; failed exports close created figures. Labels remain +selectable text, so their appearance depends on the viewer's installed fonts. + +The iterative SciPy-linkage renderer preserves right-child-first leaf order, +distance-based radii, cluster assignments and every label, including duplicate +display names. Singleton levels bypass linkage. Taxonomy colors follow stable +first-occurrence order; branches and adjacent taxonomy bands share paths by color. + +Name resolution uses at most eight concurrent lookups and a bounded process-local +cache across epochs, falling back to original labels on service/cache errors. +Cold taxonomies still require network requests. The current GBIF callers use the +process-wide socket default; there is no lookup or batch deadline. Logs separate +label resolution, rendering and export. Model distances and Ward linkage remain +quadratic in class count; production-taxonomy capacity needs separate qualification. -## Reproduce locally +## Bounded simplification and compact SVG export -Use the existing environment with the recommended plotting dependencies. Each -invocation is a fresh process and includes linkage, layout, render and SVG save. -Input distances are seeded synthetic values; model distance computation and -network name lookup are excluded. Both baseline and current renderer use SVG -text, so the comparison isolates layout/path changes. +Short arcs use chords with at most 0.02-point sagitta in figure space (0.027 CSS +pixels at native size, 0.11 at 4x zoom). Larger arcs use cubic segments of at most +45 degrees, with radial error below 0.006 points at the maximum figure size. +Endpoints remain exact; backend path simplification is disabled on branches. +These are bounded approximations, not guarantees at arbitrary magnification. -```bash -git show 863a85c:mini_trainer/visualization/dendrogram.py > /tmp/dendrogram-before.py -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ - --module-file /tmp/dendrogram-before.py --output /tmp/dendrogram-baseline -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ - --output /tmp/dendrogram-current -OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ - .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 1100 --deep \ - --output /tmp/dendrogram-deep -``` +`save_dendrogram_svg` rounds path coordinates to 0.001 points (maximum Euclidean +rounding error 0.00071 points), shares text styles and removes empty label wrappers. +Text, fonts, colors, positions and rotations are preserved. Geometry simplification +also applies to ordinary Matplotlib figures; markup compaction requires this exporter. +See [_dendrogram_layout.py](../../../mini_trainer/visualization/_dendrogram_layout.py) +and [_svg.py](../../../mini_trainer/visualization/_svg.py) for the implementation. + +## Recorded measurements -Representative local CPU measurements, Python 3.13, Matplotlib 3.10.9, -BioPython 1.87 and pyCirclize 1.10.1, from the same seeded workload: +These are historical local CPU measurements on seeded 3,422-class inputs with +Python 3.13, Matplotlib 3.10.9, BioPython 1.87 and pyCirclize 1.10.1. Each comparison +includes linkage, layout and SVG export, excluding model distances and name lookup. +They are separate paired measurements, not production training guarantees. -| 3,422 classes | Previous renderer | New renderer | +| First comparison | Recursive renderer | Iterative renderer | | --- | ---: | ---: | | Layout/render, including linkage | 18.38 s | 2.78 s | | Including SVG export | 24.53 s | 6.82 s | @@ -59,46 +47,10 @@ BioPython 1.87 and pyCirclize 1.10.1, from the same seeded workload: | SVG path elements | 20,529 | 27 | | Leaf labels | 3,422 | 3,422 | -In that first increment, path coordinates occupy 1,492,596 bytes (53%) and the 3,422 -text groups occupy 1,305,053 bytes (46%). Batching removes path-element overhead, -but retains the branch geometry. Matplotlib repeats the font-family list, style -and position/rotation attributes for each label. Shared text styles and lower -coordinate precision were not yet applied in that measurement; see the next -section for the subsequent optimization. -Gzip compresses this example to 769,175 bytes without changing its contents. +The 1,100-leaf comb tree previously raised `RecursionError`; the iterative renderer +exported all leaves in about 1.9 seconds with seven paths and no recursion-limit change. -The 1,100-leaf comb tree previously raised `RecursionError` during branch -coloring. The new renderer exported all leaves with seven SVG paths in about -1.9 seconds without changing Python's recursion limit. These are host-specific -single-process measurements, not production training performance promises. - -Regression checks cover deep trees, singleton levels, duplicate names, linkage -geometry and cluster identity, label-cache reuse and outages, SVG text retention, -figure cleanup after failure, and local saving without TensorBoard/W&B. - -## Bounded simplification and compact SVG export - -The next increment replaces short circular arcs with chords only when the -sagitta is at most 0.02 points in figure space (using the full figure width as a -conservative scale bound). This is at most 0.027 CSS pixels at native size, or -0.11 pixels at 4x zoom. Larger arcs retain cubic curves, now at most 45 degrees -per segment; their radial approximation error is below 0.006 points at the -maximum figure size. Branch endpoints, leaf order, cluster assignments and all -labels remain intact. Narrow taxonomy bands consequently become quadrilaterals. -Backend path simplification is disabled on the branch paths to keep it from -adding a second uncontrolled approximation. Magnification far beyond the design -scale can reveal these approximations; this is not exact analytic geometry. - -`save_dendrogram_svg` rounds path coordinates to 0.001 points (at most 0.00071 -points Euclidean rounding error), deduplicates identical text styles, and removes -empty per-label group wrappers. Label strings, fonts, colors, positions and -rotations remain unchanged. Ordinary returned Matplotlib figures benefit from -simpler geometry; training's SVG export additionally applies the markup changes. - -Like-for-like local CPU results for the same 3,422-class input, relative to the -iterative renderer introduced in `909cb09`: - -| Measurement | Before simplification | After simplification | +| Compaction comparison, relative to `909cb09` | Before | After | | --- | ---: | ---: | | Geometry vertices, including curve controls and bands | 63,719 | 28,980 | | Figure construction, including linkage | 2.70 s | 1.03 s | @@ -108,17 +60,26 @@ iterative renderer introduced in `909cb09`: | Chromium decode + raster, 1,200 px square | 329 ms | 252 ms | | Chromium decode + raster, 4,800 px square | 421 ms | 357 ms | -Browser values are medians of five interleaved before/after measurements, each -in a fresh browser context, using headless Chromium 151. They include SVG image -decode, canvas drawing and forced pixel readback, excluding process startup, -network transfer and PNG encoding. They do not measure interactive panning or -production dashboard integration. Rasterization alone improved more modestly -(189 to 177 ms at 1,200 px; 311 to 285 ms at 4,800 px); labels still cost work. -These timings are host-specific, not GPU training guarantees. +Browser values are medians of five interleaved trials per image/size in fresh +headless Chromium 151 contexts: decode, canvas draw and forced pixel readback. +Rasterization alone changed from 189 to 177 ms at 1,200 px and 311 to 285 ms at +4,800 px; labels still cost work. Startup, network and PNG encoding are excluded; +interactive panning and live dashboard integration were not measured. -Reproduce the figure benchmark with the prior layout and the current exporter: +## Reproduce locally + +Use the existing environment with plotting dependencies and a new output directory +per invocation. Both baseline paths export SVG text. Run each case in a fresh process: ```bash +git show 863a85c:mini_trainer/visualization/dendrogram.py > /tmp/dendrogram-before.py +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ + .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ + --module-file /tmp/dendrogram-before.py --output /tmp/dendrogram-baseline +OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ + .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 1100 --deep \ + --output /tmp/dendrogram-deep + git show 909cb09:mini_trainer/visualization/_dendrogram_layout.py > /tmp/layout-before.py OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ .venv/bin/python -m dev.benchmarks.reporting.dendrogram --classes 3422 \ @@ -128,8 +89,9 @@ OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 MPLBACKEND=Agg \ --output /tmp/svg-after ``` -Browser verification uses a disposable environment, without adding dependencies -to training. The benchmark saves raster images and all timing samples: +The current command measures the current checkout; reproducing an intermediate +historical result also requires its renderer revision. Browser verification uses +a disposable environment and retains raster images and all samples: ```bash uv venv /tmp/svg-browser-env @@ -140,7 +102,7 @@ uv pip install --python /tmp/svg-browser-env/bin/python playwright --output /tmp/svg-browser-results ``` -Regression tests check chord deviation, cubic radial error, unchanged endpoints, -text/style/transform retention, and export idempotence, alongside the existing -large/deep-tree and logging checks. Pixel comparisons complement those geometric -checks; they cannot establish visibility at arbitrary zoom levels. +[Regression tests](../../../tests/utils/test_dendrogram.py) cover geometry/error +bounds, deep and singleton trees, duplicate labels, cache behavior, SVG text/styles, +export idempotence and figure cleanup. Pixel comparisons complement geometric checks; +they cannot establish visibility at arbitrary zoom levels. From e717dc64c9041411eb0430df7da0300ba3936ab8 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:21:14 +0200 Subject: [PATCH 152/221] refactor: share benchmark subprocess stage execution --- dev/benchmarks/inference/_stage.py | 33 +++++++++++++++++++ dev/benchmarks/inference/cpu_deployment.py | 25 ++------------ dev/benchmarks/inference/inference_pair.py | 25 ++------------ .../inference/tensorrt_deployment.py | 24 ++------------ .../test_benchmark_tensorrt_deployment.py | 9 +++-- 5 files changed, 45 insertions(+), 71 deletions(-) create mode 100644 dev/benchmarks/inference/_stage.py diff --git a/dev/benchmarks/inference/_stage.py b/dev/benchmarks/inference/_stage.py new file mode 100644 index 0000000..b47f974 --- /dev/null +++ b/dev/benchmarks/inference/_stage.py @@ -0,0 +1,33 @@ +"""Logged subprocess stages shared by the inference comparison orchestrators.""" + +import json +import os +import subprocess +from pathlib import Path + +from .onnx_inference import file_hash + + +def run_stage(output, report, name, command, expected, *, env=None): + """Persist before launching; the caller owns final reporting and failure cleanup.""" + stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} + report["stages"].append(stage) + (output / "report.json").write_text(json.dumps(report, indent=2) + "\n") + with (output / stage["log"]).open("w") as log: + process = subprocess.run( + command, + cwd=Path(__file__).resolve().parents[3], + env={**os.environ, "PYTHONHASHSEED": "0", **(env or {})}, + stdout=log, + stderr=subprocess.STDOUT, + check=False, + ) + stage["returncode"] = process.returncode + if process.returncode: + raise RuntimeError(f"{name} failed with exit code {process.returncode}; see {output / stage['log']}") + path = output / name / "report.json" + result = json.loads(path.read_text()) + if result["status"] != expected: + raise RuntimeError(f"Unexpected {name} status: {result['status']}") + stage.update(status=expected, report_sha256=file_hash(path)) + return result diff --git a/dev/benchmarks/inference/cpu_deployment.py b/dev/benchmarks/inference/cpu_deployment.py index e8bc8ed..dfa02ef 100644 --- a/dev/benchmarks/inference/cpu_deployment.py +++ b/dev/benchmarks/inference/cpu_deployment.py @@ -1,12 +1,11 @@ """Compose CPU deployment quality, placement and isolated resource measurements.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from pathlib import Path +from ._stage import run_stage from .inference_pair import run_pair from .onnx_inference import file_hash @@ -40,27 +39,7 @@ def save(): def child(name, module, arguments, expected): command = [sys.executable, "-m", f"dev.benchmarks.inference.{module}", *map(str, arguments), "--output", str(output / name)] - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - process = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0"}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = process.returncode - if process.returncode: - raise RuntimeError(f"{name} failed; see {output / stage['log']}") - result_path = output / name / "report.json" - result = json.loads(result_path.read_text()) - if result["status"] != expected: - raise RuntimeError(f"Unexpected {name} status: {result['status']}") - stage.update(status=expected, report_sha256=file_hash(result_path)) - return result + return run_stage(output, report, name, command, expected) try: report["phase"] = "quality" diff --git a/dev/benchmarks/inference/inference_pair.py b/dev/benchmarks/inference/inference_pair.py index 42dd8e8..810244f 100644 --- a/dev/benchmarks/inference/inference_pair.py +++ b/dev/benchmarks/inference/inference_pair.py @@ -1,12 +1,11 @@ """Run paired held-out inference and mini_metrics evaluation in fresh processes.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from pathlib import Path +from ._stage import run_stage from .onnx_inference import file_hash @@ -81,27 +80,7 @@ def save(): try: for name, command, expected in commands: - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - result = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0"}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = result.returncode - if result.returncode: - stage["status"] = "failed" - raise RuntimeError(f"{name} failed with exit code {result.returncode}; see {output / stage['log']}") - child_path = output / name / "report.json" - child = json.loads(child_path.read_text()) - if child["status"] != expected: - raise RuntimeError(f"Unexpected {name} report status: {child['status']}") - stage.update(status=expected, report_sha256=file_hash(child_path)) + child = run_stage(output, report, name, command, expected) save() report.update(status="evaluated", levels=child["levels"], models=child["models"], undefined_metrics=child["undefined_metrics"]) lines = [ diff --git a/dev/benchmarks/inference/tensorrt_deployment.py b/dev/benchmarks/inference/tensorrt_deployment.py index 6c9b809..3d1bd1e 100644 --- a/dev/benchmarks/inference/tensorrt_deployment.py +++ b/dev/benchmarks/inference/tensorrt_deployment.py @@ -1,13 +1,12 @@ """Compose TensorRT held-out quality, inspection, paired latency and isolated memory.""" import json -import os -import subprocess import sys from argparse import ArgumentParser from collections import Counter from pathlib import Path +from ._stage import run_stage from .inference_pair import run_pair from .onnx_inference import file_hash @@ -83,26 +82,7 @@ def save(): def child(name, module, arguments): command = [sys.executable, "-m", f"dev.benchmarks.inference.{module}", *map(str, arguments), "--output", str(output / name)] - stage = {"name": name, "command": command, "status": "running", "log": f"{name}.log"} - report["stages"].append(stage) - save() - with (output / stage["log"]).open("w") as log: - process = subprocess.run( - command, - cwd=Path(__file__).resolve().parents[3], - env={**os.environ, "PYTHONHASHSEED": "0", "OMP_NUM_THREADS": str(threads)}, - stdout=log, - stderr=subprocess.STDOUT, - check=False, - ) - stage["returncode"] = process.returncode - if process.returncode: - raise RuntimeError(f"{name} failed; see {output / stage['log']}") - result = json.loads((output / name / "report.json").read_text()) - if result["status"] != "passed": - raise RuntimeError(f"Unexpected {name} status: {result['status']}") - stage.update(status="passed", report_sha256=file_hash(output / name / "report.json")) - return result + return run_stage(output, report, name, command, "passed", env={"OMP_NUM_THREADS": str(threads)}) def identity(role, engine_info): if engine_info["sha256"] != report["builds"][role]["engine"]["sha256"]: diff --git a/tests/benchmarks/test_benchmark_tensorrt_deployment.py b/tests/benchmarks/test_benchmark_tensorrt_deployment.py index dae020a..6766655 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_deployment.py +++ b/tests/benchmarks/test_benchmark_tensorrt_deployment.py @@ -1,4 +1,5 @@ import json +import subprocess from pathlib import Path from types import SimpleNamespace @@ -75,7 +76,7 @@ def child(command, **kwargs): return SimpleNamespace(returncode=0) monkeypatch.setattr(deployment, "run_pair", quality) - monkeypatch.setattr(deployment.subprocess, "run", child) + monkeypatch.setattr(subprocess, "run", child) return builds, manifest, inputs, calls, quality, child @@ -109,7 +110,7 @@ def test_mismatched_build_artifacts_fail_before_runtime(pipeline, tmp_path, arti assert report["status"] == "failed" and report["phase"] == "inspection" and not calls -@pytest.mark.parametrize("mutation", ["input", "engine", "process"]) +@pytest.mark.parametrize("mutation", ["input", "engine", "process", "status"]) def test_failed_or_changed_resource_stops_pipeline(pipeline, tmp_path, monkeypatch, mutation): builds, manifest, inputs, calls, _, child = pipeline @@ -121,12 +122,14 @@ def change(command, **kwargs): report["inputs"]["sha256"] = "changed" elif mutation == "engine": report["models"]["candidate"]["sha256"] = "changed" + elif mutation == "status": + report["status"] = "failed" else: return SimpleNamespace(returncode=17) path.write_text(json.dumps(report)) return result - monkeypatch.setattr(deployment.subprocess, "run", change) + monkeypatch.setattr(subprocess, "run", change) with pytest.raises((ValueError, RuntimeError)): deployment.evaluate(*builds, manifest, inputs, tmp_path / "result") result = json.loads((tmp_path / "result/report.json").read_text()) From 22b1931e6b1b484c71a45a06f6d74f276e3b7a35 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:24:26 +0200 Subject: [PATCH 153/221] refactor: remove obsolete private dataset cache helpers --- mini_trainer/data/io.py | 21 ------------------- tests/data/test_io.py | 7 ------- tests/data/test_loader.py | 7 ++----- .../test_integration_lazy_dataset.py | 17 +++++++-------- 4 files changed, 10 insertions(+), 42 deletions(-) diff --git a/mini_trainer/data/io.py b/mini_trainer/data/io.py index d4cad28..11e611f 100644 --- a/mini_trainer/data/io.py +++ b/mini_trainer/data/io.py @@ -1,4 +1,3 @@ -import hashlib import math import operator import os @@ -26,7 +25,6 @@ from ._workers import _default_worker_count T = TypeVar("T") -V = TypeVar("V") class CACHE_MODE(int, Enum): # noqa: D101 @@ -188,10 +186,6 @@ def make_read_and_resize_fn( return ReadAndResize(size, device, dtype, interpolation, **kwargs) -def _normalize_to_tuple(data): - return data if isinstance(data, (tuple, list)) else (data,) - - # From `flatbug`: https://github.com/darsa-group/flat-bug/blob/9093de0f89756b7f59e63f3bd7161f5574eb90ac/src/flat_bug/datasets.py#L42 def reweight(weights: list[float], target_sum: float | int): """Reweights the provided list of weights so that their sum equals the target sum. @@ -448,21 +442,6 @@ def __init__( # noqa: D107 raise ValueError("Dataset input sequences must have equal lengths.") self._init_cache(CACHE_MODE(cache)) - @staticmethod - def _hash_item(item): - if isinstance(item, str): - return item.encode("utf-8") - if isinstance(item, (list, tuple)): - str_item = next((e for e in item if isinstance(e, str)), str(item)) - return str_item.encode("utf-8") - return str(item).encode("utf-8") - - def _get_cache_hash(self) -> str: - s256 = hashlib.sha256(b"mini_trainer", usedforsecurity=False) - for item_hash in sorted(map(self._hash_item, zip(*self.items))): - s256.update(item_hash) - return s256.hexdigest() - def _init_cache(self, mode: CACHE_MODE): match mode: case CACHE_MODE.NONE: diff --git a/tests/data/test_io.py b/tests/data/test_io.py index 601fc45..501993a 100644 --- a/tests/data/test_io.py +++ b/tests/data/test_io.py @@ -6,7 +6,6 @@ from mini_trainer.data.io import ( CACHE_MODE, - _normalize_to_tuple, generate_indices, guess_cache_mode, is_image, @@ -69,9 +68,3 @@ def test_generate_indices(): assert len(indices) == 6 assert indices.count(0) == 2 assert indices.count(1) == 4 - - -def test_normalize_to_tuple(): - assert _normalize_to_tuple(1) == (1,) - assert _normalize_to_tuple([1]) == [1] - assert _normalize_to_tuple((1,)) == (1,) diff --git a/tests/data/test_loader.py b/tests/data/test_loader.py index eb154cf..ffcd6c3 100644 --- a/tests/data/test_loader.py +++ b/tests/data/test_loader.py @@ -499,9 +499,8 @@ def test_direct_batches_preserve_shuffled_sampling_and_rng(): assert torch.equal(torch.get_rng_state(), expected_rng) -@pytest.mark.parametrize("cache", ["none", "cpu"]) +@pytest.mark.parametrize("cache,labels", [("none", False), ("none", True), ("cpu", True)]) @pytest.mark.parametrize("workers", [0, 1]) -@pytest.mark.parametrize("labels", [False, True]) def test_default_collator_can_reuse_repository_batch_sampler(metadata, cache, workers, labels): if labels: datasets, loaders = get_dataset_dataloader( @@ -509,9 +508,7 @@ def test_default_collator_can_reuse_repository_batch_sampler(metadata, cache, wo ) dataset, optimized = datasets[0], loaders[0] else: - dataset, optimized = get_inference_dataloader( - metadata["path"], resize_size=4, cache=cache, cache_workers=0, batch_size=2, num_workers=0 - ) + dataset, optimized = get_inference_dataloader(metadata["path"], resize_size=4, batch_size=2, num_workers=0) external = torch.utils.data.DataLoader( dataset, batch_sampler=optimized.batch_sampler, diff --git a/tests/integration/test_integration_lazy_dataset.py b/tests/integration/test_integration_lazy_dataset.py index 96aac17..49ea472 100644 --- a/tests/integration/test_integration_lazy_dataset.py +++ b/tests/integration/test_integration_lazy_dataset.py @@ -81,11 +81,8 @@ def test_lazy_dataset_picklable(self, image_paths): from mini_trainer.data import get_dataset_dataloader - metadata = { - "path": image_paths, - "class": [0 if i % 2 == 0 else 1 for i in range(len(image_paths))], - "split": ["train" for _ in image_paths], - } + paths = image_paths[0] + metadata = {"path": paths, "class": [i % 2 for i in range(len(paths))]} datasets, loaders = get_dataset_dataloader( metadata, @@ -100,10 +97,12 @@ def test_lazy_dataset_picklable(self, image_paths): pickled = pickle.dumps(ds) unpickled = pickle.loads(pickled) - assert len(unpickled) == len(ds) - item = unpickled[0] - assert isinstance(item, tuple) - assert len(item) == 2 + assert len(unpickled) == len(ds) == len(paths) + for index in (0, len(paths) - 1): + item = unpickled[index] + assert isinstance(item, tuple) and len(item) == 2 + torch.testing.assert_close(item, ds[index]) + assert item[1].item() == index % 2 def test_lazy_dataset_caching_exception_propagation(self): paths = ["ok1.png", "fail.png", "ok2.png"] From 8f03e64586c9439e3b080bb52e81e1d9f965c893 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:26:43 +0200 Subject: [PATCH 154/221] fix: preserve figure ownership in augmentation previews --- mini_trainer/data/augmentation.py | 12 ++++---- tests/data/test_augmentation.py | 46 +++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/mini_trainer/data/augmentation.py b/mini_trainer/data/augmentation.py index 3d7ed6b..4babe17 100644 --- a/mini_trainer/data/augmentation.py +++ b/mini_trainer/data/augmentation.py @@ -19,9 +19,11 @@ def debug_augmentation( if output_dir is None or int(os.environ.get("RANK", 0)) > 0: return convert2fp32 = make_convert_dtype(torch.float32) + fig = None try: n = min(3, len(dataset)) - fig, axs = plt.subplots(3, n, figsize=(10, 5)) + fig = plt.figure(figsize=(10, 5)) + axs = fig.subplots(n, 3, squeeze=False) def prep_for_imshow(img_tensor): img_tensor = convert2fp32(img_tensor.permute(1, 2, 0)) @@ -40,9 +42,8 @@ def prep_for_imshow(img_tensor): for ax in axs[j, :]: ax.axis("off") - plt.tight_layout() - plt.savefig(os.path.join(output_dir, "example_augmentation.png")) - plt.close() + fig.tight_layout() + fig.savefig(os.path.join(output_dir, "example_augmentation.png")) except Exception as e: e_msg = ( "Error while attempting to create debug augmentation image." @@ -54,7 +55,8 @@ def prep_for_imshow(img_tensor): warnings.warn(e_msg, UserWarning) return False finally: - plt.close() + if fig is not None: + plt.close(fig) return True diff --git a/tests/data/test_augmentation.py b/tests/data/test_augmentation.py index 39c3886..2f91ff7 100644 --- a/tests/data/test_augmentation.py +++ b/tests/data/test_augmentation.py @@ -1,26 +1,44 @@ +import pytest import torch +from matplotlib import pyplot as plt from mini_trainer.data import SaltAndPepper, debug_augmentation, salt_and_pepper -def test_debug_augmentation(tmp_path): +@pytest.mark.parametrize("count", [1, 2, 5]) +def test_debug_augmentation(tmp_path, count): + dataset = torch.utils.data.TensorDataset(torch.zeros(count, 3, 10, 10), torch.arange(count)) + caller_figure = plt.figure() + before = plt.get_fignums() + try: + assert debug_augmentation(lambda image: image, dataset, output_dir=str(tmp_path)) is True + assert (tmp_path / "example_augmentation.png").exists() + assert plt.get_fignums() == before + finally: + plt.close(caller_figure) - # Mock dataset - class MockDataset(torch.utils.data.Dataset): - def __len__(self): - return 5 - def __getitem__(self, idx): - return torch.zeros((3, 10, 10)), 0 +@pytest.mark.parametrize("strict", [False, True]) +@pytest.mark.parametrize("failure", ["empty", "augmentation"]) +def test_debug_augmentation_failure_preserves_caller_figure(tmp_path, strict, failure): + dataset = torch.utils.data.TensorDataset(torch.zeros(0 if failure == "empty" else 3, 3, 10, 10)) - ds = MockDataset() + def broken(image): + raise ValueError("broken augmentation") - def aug(x): - return x - - ret = debug_augmentation(aug, ds, output_dir=str(tmp_path), strict=True) - assert ret is True - assert (tmp_path / "example_augmentation.png").exists() + caller_figure = plt.figure() + before = plt.get_fignums() + try: + if strict: + with pytest.raises(ValueError): + debug_augmentation(broken, dataset, str(tmp_path), strict=True) + else: + with pytest.warns(UserWarning, match="debug augmentation"): + assert debug_augmentation(broken, dataset, str(tmp_path), strict=False) is False + assert plt.get_fignums() == before + assert not (tmp_path / "example_augmentation.png").exists() + finally: + plt.close(caller_figure) def test_salt_and_pepper(): From ccaa349832cbc04d4c5de942b9913b77cf5e849a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:30:30 +0200 Subject: [PATCH 155/221] docs: consolidate MAMBO migration guidance --- deployment/README.md | 51 ++++++++++++++++++--------------------- docs/mambo-integration.md | 9 ++++--- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/deployment/README.md b/deployment/README.md index 27cea0e..093fab8 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -110,19 +110,6 @@ for comparable northern-European use. A custom `class_list=["GBIF_SPECIES_ID", . or UTF-8 file with one ID per line overrides the preset (`--class-list species.txt` in the CLI). Unknown IDs and empty lists fail; duplicates are removed. -### Integrating with V2 applications - -The `mini_trainer.deploy.Predictor` compatibility entry point retains native/CUDA -defaults, callable prediction, `class_mask` and native result containers. It needs -both release wheels. New integrations can use the smaller `mambo_deploy` interface -above, with CPU results independent of backend. Both download model assets automatically. - -Retain the legacy regional preset for comparison, and match species by taxon ID, -not numeric index. The V3 vocabulary, scores and embedding width can differ from V2; -existing thresholds and stored embeddings are not interchangeable. -[Migration details](../docs/mambo-integration.md#moving-from-v2) describe the remaining -compatibility boundaries. - ### Large image collections Use streaming for a large collection of paths, consuming results as they arrive: @@ -138,24 +125,31 @@ with closing(predictor.predict_stream(image_paths)) as batches: Input order is preserved. Add `embeddings=True` to receive `(result, vectors)` pairs. For in-memory inputs, split large collections into smaller `predict()` requests; -that method retains results for the whole request. The CLI writes results batch by batch. `batch_size` limits -model calls, not total request memory. [Streaming controls](../docs/mambo-integration.md#streaming-controls) -are available if the defaults do not fit your workload. +that method retains results for the whole request. The CLI writes results batch by +batch. `batch_size` limits model calls, not total request memory. +[Streaming controls](../docs/mambo-integration.md#streaming-controls) are available +if the defaults do not fit your workload. ## Changes from MAMBO V2 -- Global (`full`) is now the default scope. Select `europe` or `north_europe` to - retain those geographic restrictions; the legacy lists remain available. -- Install the model-generation package **`mambo-v3`**; its Python import remains - `mambo_deploy`. Maintenance releases of this package retain the V3 trained model. - Pin the package version for reproducible application builds. Use a separate - environment for V2 or an older deployment candidate. -- `mambo_predict` is owned by the deployment package alone and defaults to ONNX/CPU. - Existing native CLI workflows must specify `--backend torch --device cuda:0`. - The Python `mini_trainer.deploy.Predictor` facade retains native/CUDA defaults. -- V3 uses EfficientNetV2-S, adds ONNX, expanded regional presets, optional TTA and - streaming output. Raw inputs and result formats are documented above; old - preprocessed tensors, numeric class positions and embeddings need migration. +- **Installation:** use `mambo-v3` (Python import `mambo_deploy`). Its maintenance + releases retain the V3 trained model; pin the package version for reproducible + builds. Keep V2 or older deployment candidates in a separate environment. +- **Defaults:** global (`full`) scope and ONNX/CPU. Select `europe` or `north_europe` + to retain the V2 lists. Native CLI workflows must specify + `--backend torch --device cuda:0`; only the deployment package installs `mambo_predict`. +- **Existing Python callers:** `mini_trainer.deploy.Predictor` retains native/CUDA + defaults, callable prediction, `class_mask` and native result containers. Install + both release wheels. New integrations can use `mambo_deploy` for CPU results + independent of backend; both entry points download model assets automatically. +- **Model and features:** EfficientNetV2-S, ONNX, expanded presets, optional TTA and + streaming. Supply original pixels and match classes by GBIF ID rather than numeric + index. V3's vocabulary, scores and embedding width differ from V2; thresholds and + stored embeddings need migration. + +[Migration details](../docs/mambo-integration.md#moving-from-v2) cover compatibility +boundaries; [versioning](../docs/mambo-integration.md#versioning-and-model-identity) +explains how package, model and preset identities relate. ### Beyond Python @@ -202,6 +196,7 @@ to your accuracy and processing-budget requirements. The [complete evidence reference](../docs/mambo-deployment-evidence.md) retains exact metric tables, calibrated thresholds, timing ranges and limitations. + ### Complementary in-domain and HPC results The original global-lepi test split adds a comparison on general photographs using diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md index 44910fe..85c849d 100644 --- a/docs/mambo-integration.md +++ b/docs/mambo-integration.md @@ -16,7 +16,7 @@ locally until publication. Choose one runtime installation: | PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl' ./mambo_v3-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | For an environment with ONNX Runtime already provisioned, install the base -`mambo_deploy` wheel without extras. Do not install CPU and GPU ONNX Runtime +`mambo-v3` wheel without extras. Do not install CPU and GPU ONNX Runtime packages together. Use the application's dependency management to select and record versions; inference never installs or replaces runtime packages. If you use `uv run`, pass `--no-sync` to retain the installed environment. @@ -100,9 +100,10 @@ options belong to `predict_stream`, not the constructor or CLI: | `encoded_budget` | `256 * 1024**2` bytes | Encoded image buffer budget; a larger single file fails explicitly. | These budgets do not bound total process memory: model weights, decoded images, -prepared views and results also consume memory. `predict()` accumulates results for the whole input collection; submit bounded -requests there. The CLI streams predictions and embeddings to disk and publishes -the output directory only when the complete run succeeds. +prepared views and results also consume memory. `predict()` accumulates results +for the whole input collection; submit bounded requests there. The CLI streams +predictions and embeddings to disk and publishes the output directory only when +the complete run succeeds. For diagnostics, `stats={}` collects queue/buffer and wait statistics; `device_prefetch=False` disables device staging. These are not routine integration From 77880cf031bce1c01faf0261da7b68aef7951b2a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:33:33 +0200 Subject: [PATCH 156/221] test: consolidate deployment contracts and exercise stream defaults --- tests/releases/test_deployment.py | 104 +++++++++++------------------- 1 file changed, 39 insertions(+), 65 deletions(-) diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 9503690..2370649 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -2,7 +2,9 @@ import hashlib import json +import sys from pathlib import Path +from types import SimpleNamespace import numpy as np import pytest @@ -37,6 +39,19 @@ def bundle(tmp_path): return tmp_path +@pytest.fixture +def ort(monkeypatch): + runtime = SimpleNamespace( + SessionOptions=SimpleNamespace, + GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), + OrtValue=type("FakeOrtValue", (), {}), + get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], + InferenceSession=None, + ) + monkeypatch.setitem(sys.modules, "onnxruntime", runtime) + return runtime + + def test_mask_recomputes_parent_scores_and_normalization(): leaf = np.log(np.array([[0.1, 0.2, 0.7]], dtype=np.float32)) raw, labels, indices = hierarchy(leaf, [0, 2], CLASSES) @@ -173,10 +188,7 @@ def test_native_facade_preserves_container_and_shared_confidence(bundle, monkeyp @pytest.mark.parametrize(("precision", "use_tf32"), [("fp32", 0), ("auto", 1)]) -def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch, precision, use_tf32): - import sys - from types import SimpleNamespace - +def test_requested_cuda_rejects_cpu_only_session(bundle, monkeypatch, precision, use_tf32, ort): predictor = Predictor(bundle, device="cuda:0", precision=precision) monkeypatch.setattr(predictor.bundle, "profile", lambda key: bundle / "unused.onnx") captured = {} @@ -185,17 +197,7 @@ def session(path, sess_options, providers): captured["providers"] = providers return SimpleNamespace(disable_fallback=lambda: None, get_providers=lambda: ["CPUExecutionProvider"]) - monkeypatch.setitem( - sys.modules, - "onnxruntime", - SimpleNamespace( - SessionOptions=SimpleNamespace, - GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), - OrtValue=type("FakeOrtValue", (), {}), - get_available_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"], - InferenceSession=session, - ), - ) + ort.InferenceSession = session with pytest.raises(RuntimeError, match="refusing CPU-only fallback"): predictor._onnx(np.zeros((1, 3, 384, 384), dtype=np.float32), False) assert captured["providers"][0][1]["use_tf32"] == use_tf32 @@ -443,10 +445,7 @@ def test_named_tta_preserves_released_recipe(option, settings): @pytest.mark.parametrize( "failure", [None, "cudaErrorNoKernelImageForDevice", "cudaErrorInvalidDeviceFunction", "CUDA out of memory", "baseline"] ) -def test_cuda_probe_profiles_and_reuse(bundle, monkeypatch, failure): - import sys - from types import SimpleNamespace - +def test_cuda_probe_profiles_and_reuse(bundle, monkeypatch, failure, ort): p = Predictor(bundle, device="cuda:0") monkeypatch.setattr(p.bundle, "profile", lambda key: bundle / key) sessions, calls = [], [] @@ -468,17 +467,7 @@ def run(outputs, feed): run=run, disable_fallback=lambda: None, get_providers=lambda: ["CUDAExecutionProvider", "CPUExecutionProvider"] ) - monkeypatch.setitem( - sys.modules, - "onnxruntime", - SimpleNamespace( - SessionOptions=SimpleNamespace, - GraphOptimizationLevel=SimpleNamespace(ORT_ENABLE_ALL=99, ORT_DISABLE_ALL=0), - OrtValue=type("FakeOrtValue", (), {}), - get_available_providers=lambda: ["CUDAExecutionProvider"], - InferenceSession=create, - ), - ) + ort.InferenceSession = create batch = np.zeros((2, 3, 384, 384), dtype=np.float32) if failure in ("CUDA out of memory", "baseline"): with pytest.raises(RuntimeError, match="out of memory" if failure != "baseline" else "baseline compatibility"): @@ -505,10 +494,11 @@ def run(outputs, feed): @pytest.mark.parametrize("tta", ["none", "rotation30_pad25_3"]) -def test_streaming_api_matches_request(bundle, tmp_path, monkeypatch, tta): +@pytest.mark.parametrize("batch_size", [2, 129]) +def test_streaming_api_matches_request(bundle, tmp_path, monkeypatch, tta, batch_size): from PIL import Image - predictor = Predictor(bundle, batch_size=2, tta=tta) + predictor = Predictor(bundle, batch_size=batch_size, tta=tta) def infer(images, embeddings=False): values = images.mean(axis=(2, 3)) @@ -525,15 +515,26 @@ def infer(images, embeddings=False): np.testing.assert_array_equal(np.concatenate([v for _, v in observed]), vectors) np.testing.assert_array_equal(np.concatenate([r.indices for r, _ in observed]), expected.indices) np.testing.assert_array_equal(np.concatenate([r.confidence for r, _ in observed]), expected.confidence) + assert [len(result) for result, _ in observed] == [min(batch_size, len(paths) - start) for start in range(0, len(paths), batch_size)] + with pytest.raises(ValueError, match="read_window must cover"): + list(predictor.predict_stream(paths, read_window=1)) @pytest.mark.parametrize("topk", [1, 2]) -def test_top1_fast_path_preserves_stable_ties(topk): - raw = [np.array([[2, 2, -1], [-3, -3, -3], [0, 2, 1]], dtype=np.float32)] * 3 - labels = [["a", "b", "c"]] * 3 - result = Prediction(raw, labels, [np.arange(3)] * 3, topk) - expected = np.stack([np.argsort(-v, axis=1, kind="stable")[:, :topk] for v in raw], axis=-1) - np.testing.assert_array_equal(result.indices, expected) +@pytest.mark.parametrize( + "raw", + [ + pytest.param([[2, 2, -1], [-3, -3, -3], [0, 2, 1]], id="finite"), + pytest.param([[1, np.nan, 2], [np.nan, np.nan, np.nan], [np.inf, 2, -np.inf]], id="nonfinite"), + ], +) +def test_prediction_preserves_stable_ties_and_nonfinite_order(topk, raw): + raw = np.array(raw, dtype=np.float32) + with np.errstate(invalid="ignore"): + result = Prediction([raw] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk) + expected = np.argsort(-raw, axis=1, kind="stable")[:, :topk] + np.testing.assert_array_equal(result.indices, np.stack([expected] * 3, axis=-1)) + np.testing.assert_array_equal(np.isnan(result.confidence).any(axis=(1, 2)), ~np.isfinite(raw).all(axis=1)) @pytest.mark.parametrize("selected", [[0, 1, 2], [0, 2], [1]]) @@ -696,16 +697,6 @@ def test_square_gather_preserves_pixels_across_decoded_and_strided_layouts(): np.testing.assert_array_equal(target, expected) -@pytest.mark.parametrize("topk", [1, 2]) -def test_prediction_nonfinite_ordering_matches_stable_sort(topk): - raw = np.array([[1, np.nan, 2], [np.nan, np.nan, np.nan], [np.inf, 2, -np.inf]], dtype=np.float32) - with np.errstate(invalid="ignore"): - result = Prediction([raw] * 3, [["a", "b", "c"]] * 3, [np.arange(3)] * 3, topk) - expected = np.argsort(-raw, axis=1, kind="stable")[:, :topk] - np.testing.assert_array_equal(result.indices, np.stack([expected] * 3, axis=-1)) - assert np.isnan(result.confidence).all() - - @pytest.mark.parametrize("dtype", [np.float32, np.float64]) def test_cpu_interpolation_retains_reference_pixels_in_caller_storage(dtype): from deployment.mambo_deploy import preprocessing as p @@ -736,26 +727,9 @@ def test_default_scope_is_global_including_legacy_facade(bundle, monkeypatch): assert Predictor(bundle, model="europe").class_list == ["a", "b"] -def test_stream_window_default_accommodates_large_batches(bundle, monkeypatch): - predictor = Predictor(bundle, batch_size=256) - captured = {} - - def prepare(*args, **kwargs): - captured.update(kwargs) - yield from () - - monkeypatch.setattr(predictor, "prepared_batches", prepare) - assert list(predictor.predict_stream([])) == [] - assert captured["read_window"] == 256 - assert list(predictor.predict_stream([], read_window=1024)) == [] - assert captured["read_window"] == 1024 - - @pytest.mark.parametrize("embeddings", [False, True]) def test_cli_streams_ordered_results_and_publishes_only_complete_output(bundle, tmp_path, monkeypatch, embeddings): import csv - import sys - from types import SimpleNamespace from deployment.mambo_deploy import cli From 4555a0b027da53b41f97f3f4fc02685f92439d42 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:33:58 +0200 Subject: [PATCH 157/221] fix(deploy): name current package in missing-runtime guidance --- deployment/mambo_deploy/predictor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 3e1b104..2e082b3 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -169,7 +169,7 @@ def _onnx_api(self): try: import onnxruntime as ort except ImportError as error: - raise ImportError("Install mambo-deploy[onnx], or onnxruntime-gpu for CUDA") from error + raise ImportError("Install mambo-v3[onnx], or onnxruntime-gpu for CUDA") from error return ort @cached_property From 15f6255eb6f3012f8500680d0053b1546ad7f767 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:37:20 +0200 Subject: [PATCH 158/221] refactor: use standard iterator and file lifetimes in IO calibration --- dev/ucloud/calibrate_io.py | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/dev/ucloud/calibrate_io.py b/dev/ucloud/calibrate_io.py index 1ad7c96..3c6bdb7 100644 --- a/dev/ucloud/calibrate_io.py +++ b/dev/ucloud/calibrate_io.py @@ -27,6 +27,8 @@ import time import traceback from concurrent.futures import FIRST_COMPLETED, ThreadPoolExecutor, wait +from contextlib import nullcontext +from itertools import islice from pathlib import Path EXTENSIONS = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff"} @@ -92,16 +94,14 @@ def operation(item): size = os.stat(source).st_size else: size = 0 - target = open(Path(job["destination"]) / str(index), "xb") if job["mode"] == "stage" else None - try: - with open(source, "rb") as stream: - while chunk := stream.read(1024 * 1024): - if target is not None: - target.write(chunk) - size += len(chunk) - finally: - if target is not None: - target.close() + with ( + open(Path(job["destination"]) / str(index), "xb") if job["mode"] == "stage" else nullcontext() as target, + open(source, "rb") as stream, + ): + while chunk := stream.read(1024 * 1024): + if target is not None: + target.write(chunk) + size += len(chunk) return size, time.monotonic() - began rows, errors = [], [] @@ -140,7 +140,7 @@ def submit(item): journal.write(b"x") return pool.submit(operation, item) - pending = {submit(item) for item in list_next(items, job["workers"])} + pending = {submit(item) for item in islice(items, job["workers"])} while pending: done, pending = wait(pending, timeout=0.25, return_when=FIRST_COMPLETED) for future in done: @@ -161,16 +161,6 @@ def submit(item): snapshot(finished=True) -def list_next(iterator, count): - result = [] - for _ in range(count): - value = next(iterator, None) - if value is None: - break - result.append(value) - return result - - def stop(proc): """Do not launch another trial while an uninterruptible reader survives.""" try: From cb98210790f776972c1204aded6f0df7a58e4cef Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:43:02 +0200 Subject: [PATCH 159/221] refactor: delegate UCloud parity to verified ONNX export --- dev/ucloud/export_followup.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/dev/ucloud/export_followup.py b/dev/ucloud/export_followup.py index ab4ec4e..0111d9e 100644 --- a/dev/ucloud/export_followup.py +++ b/dev/ucloud/export_followup.py @@ -45,13 +45,12 @@ def main(): reader = make_read_and_resize_fn((config["size"], config["size"]), torch.device("cpu"), torch.uint8) with torch.inference_mode(): images = preprocess(torch.stack([reader(p) for p in paths])) - eager = model(images) destination = run / "onnx" export_onnx( model, images[:2], destination, - verification_inputs=[images[:1], images], + verification_inputs=[images], preprocessing={ "loader": "mini_trainer.data.io.make_read_and_resize_fn", "size": [config["size"], config["size"]], @@ -63,12 +62,10 @@ def main(): checkpoint_sha256=result["checkpoint_sha256"], ) manifest = json.loads((destination / "manifest.json").read_text()) + verification = manifest["verification"] + # Export already verified these inputs; retain ONNX outputs for later runtimes. session = ort.InferenceSession(str(destination / "model.onnx"), providers=["CPUExecutionProvider"]) outputs = session.run(None, {manifest["input"]["name"]: images.numpy()}) - if len(outputs) != len(eager): - raise ValueError("Output count differs") - for expected, actual in zip(eager, outputs, strict=True): - np.testing.assert_allclose(actual, expected.numpy(), rtol=1e-4, atol=1e-5) np.savez(destination / "validation-example.npz", images=images.numpy(), **{f"output_{i}": v for i, v in enumerate(outputs)}) write_json( destination / "real-image-parity.json", @@ -76,9 +73,7 @@ def main(): "status": "passed", "images": paths, "checkpoint_sha256": result["checkpoint_sha256"], - "provider": "CPUExecutionProvider", - "rtol": 1e-4, - "atol": 1e-5, + **{key: verification[key] for key in ("provider", "rtol", "atol")}, "scope": "Four validation images; dynamic-batch FP32 export parity, not held-out quality or target-GPU speed", }, ) From 664fbcb3baf159ad15b1a7dc54137878a11f7968 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:48:20 +0200 Subject: [PATCH 160/221] docs: clarify logger persistence and remove retired scaffolding --- mini_trainer/logging/core.py | 117 +++++---------------------- mini_trainer/logging/wandb.py | 2 +- tests/logging/test_logging_simple.py | 11 +-- tests/logging/test_tensorboard.py | 1 - 4 files changed, 22 insertions(+), 109 deletions(-) delete mode 100644 tests/logging/test_tensorboard.py diff --git a/mini_trainer/logging/core.py b/mini_trainer/logging/core.py index 50d55ae..8d2f5ab 100644 --- a/mini_trainer/logging/core.py +++ b/mini_trainer/logging/core.py @@ -187,10 +187,6 @@ def __bool__(self): @abstractmethod def __str__(self) -> str: ... - # @property - # @abstractmethod - # def data(self) -> list[float]: ... - @abstractmethod def update(self, value, *args, **kwargs): ... @@ -236,9 +232,9 @@ def update(self, name, values: float | int | list[float | int] | torch.Tensor | self.get(name).update(values) @abstractmethod - def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, **kwargs) -> None: ... - - """This function should close any new matplotlib.pyplot.Figures it creates!""" + def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, **kwargs) -> None: + """Record a figure; close any additional Matplotlib figures the backend creates.""" + ... def step(self): """This function may not be necessary for your logger.""" @@ -537,37 +533,19 @@ def compute_aligned_steps(target_length: int, origin_length: int, total_epochs: class MultiLogger: - """Multi-backend training/evaluation logger. - - Orchestrates one or more concrete loggers (e.g., terminal metrics, TensorBoard) - and provides a single interface for recording statistics, figures and - heterogeneous artifacts per step and per epoch. - - Args: - train_loader: Training dataloader; used to build aligned global steps. - val_loader: Validation dataloader; used to build aligned global steps. - epochs: Total number of epochs used to pre-compute global steps. - output: Directory to store serialized logs (JSON). - name: Base filename for the serialized log (auto-incremented). - statistics: Names of statistics to track and expose to backends. - private_statistics: Internal statistics not forwarded to backends. - logger_cls: Concrete logger classes to instantiate. - logger_cls_extra_kwargs: Per-logger extra keyword arguments. - logger_cls_stat_factory: Factories for statistic containers per logger. - canonical_statistic: Name of the main metric (used for returns and summaries). - clear_store_on_update: If True, clears transient storage at epoch/phase switch. - verbose: If True, prints summaries and progress information. + """Coordinate per-phase backends, summary CSVs and diagnostic figures. + + Loader lengths align training and validation steps across epochs. The first + public statistic is canonical; private statistics are not sent to backends. + Backend classes, kwargs and statistic factories are matched in order. + + Summaries and figures are saved under output/name/logs. Per-step history + accumulation is disabled to bound memory; save() remains a compatibility no-op. """ @staticmethod def _reset_cuda_memory_stats(): - """Reset CUDA peak memory stats on the current device. - - Notes: - This intentionally avoids synchronization to reduce performance - impact. As a result, memory statistics can be slightly biased - towards lower values, but remain consistent across steps. - """ + """Best-effort peak reset on the current CUDA device, without synchronization.""" if torch.cuda.is_available(): try: torch.cuda.reset_peak_memory_stats() @@ -760,19 +738,12 @@ def log_statistic(self, **kwargs): logger.add_stat(stat, stat_factory()) for logger in self.loggers: logger.update(stat, value) - # Disable for now to avoid OOM - # if isinstance(value, (torch.Tensor, np.ndarray)): - # value = value.tolist() - # if isinstance(value, (tuple, list)): - # self.statistics_storage[stat].extend(value) - # else: - # self.statistics_storage[stat].append(value) @property def data(self): return { "statistics": dict(self.statistics_storage), - "extra": dict(), # dict(self.heterogeneous_storage) + "extra": dict(), } def _store_summary(self): @@ -784,53 +755,8 @@ def _store_summary(self): return def save(self, fp: str | TextIO | None = None, encoding: str = "utf-8", **kwargs): - pass # Disable saving for now to avoid OOM - # ext = ".json" - # if self._start_time is None: - # warnings.warn("Attempting to save logs before starting the loggers is a no-op!") - # return - # if self._epoch is None: - # raise NotImplementedError( - # f'Saving logs while {self._epoch=} is not supported and probably not meaningful. - # 'If this happens you are probably doing something wrong!' - # ) - # if self._type is None: - # raise NotImplementedError( - # f'Saving logs while {self._type=} is not supported and probably not meaningful. ' - # 'If this happens you are probably doing something wrong!' - # ) - # if fp is None: - # if self.output_dir is None: - # return - # output_dir, name = self.output_dir, f'log_{self._type}_epoch{self._epoch}' - # elif isinstance(fp, TextIO): - # json.dump(self.data, fp, **kwargs) - # return - # elif isinstance(fp, str): - # output_dir, name = os.path.split(os.path.abspath(fp)) - # _, ext = os.path.splitext(name) - # - # if os.path.exists(os.path.join(output_dir, name)): - # name = increment_name_dir(name, output_dir) - # fp = os.path.join(output_dir, name + ext) - # - # temp_file_name = None - # try: - # with NamedTemporaryFile("w", encoding=encoding, suffix=".json", delete=False) as tmpfile: - # json.dump(self.data, tmpfile, **kwargs) - # tmpfile.flush() - # os.fsync(tmpfile.fileno()) - # temp_file_name = tmpfile.name - # - # shutil.move(temp_file_name, fp) - # self._last_save = time.time() # Assuming self._last_save is defined - # except Exception as e: - # if temp_file_name and os.path.exists(temp_file_name): - # try: - # os.remove(temp_file_name) - # except OSError: - # pass # Suppress error during cleanup - # raise + """Compatibility no-op; summaries and diagnostic figures are saved separately.""" + pass def finish(self): self._store_summary() @@ -918,15 +844,10 @@ def log_speed(self, start_time: float): self.log_statistic(**{"item/s": self._batch_size / (time.time() - start_time)}) def log_memory_use(self): - """Log per-batch peak CUDA memory usage (no sync). - - Notes: - Uses ``torch.cuda.max_memory_allocated()`` which reports the peak - allocation since the last reset. The logger resets the peak at the - end of each step and at phase boundaries, so this value reflects a - best-effort per-batch peak. No device synchronization is performed - to avoid performance impact, so values may be slightly under the - true peak but are consistent across steps. + """Record CUDA peak allocation since the last reset, or current CPU RSS, in MiB. + + CUDA peaks reset at step and phase boundaries without synchronization. + CPU memory is reported as zero when optional psutil is unavailable. """ MB = 1024.0**2 if torch.cuda.is_available(): diff --git a/mini_trainer/logging/wandb.py b/mini_trainer/logging/wandb.py index 5f83363..299fd92 100644 --- a/mini_trainer/logging/wandb.py +++ b/mini_trainer/logging/wandb.py @@ -169,7 +169,7 @@ def update(self, name: str, values): super().update(name, values) def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, epoch: int = 0, **kwargs): - """Add figure to wandb, queued to commit atomically with step().""" + """Log a rank-zero figure immediately with its epoch.""" if wandb is None: raise ImportError( "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " diff --git a/tests/logging/test_logging_simple.py b/tests/logging/test_logging_simple.py index c76cd03..bcd84c5 100644 --- a/tests/logging/test_logging_simple.py +++ b/tests/logging/test_logging_simple.py @@ -75,7 +75,6 @@ def test_Timer(): assert not t.running assert t.total >= 0.0 - # Test errors with pytest.raises(RuntimeError): t.stop() # already stopped @@ -83,7 +82,7 @@ def test_Timer(): with pytest.raises(RuntimeError): t.start() # already running with pytest.raises(RuntimeError): - _ = t.total # total is invalid while running? -> Code says: raise RuntimeError("Attempting to grab total of a running timer!") + _ = t.total assert "Timer[Running]" in str(t) t.stop() @@ -116,15 +115,9 @@ def test_compute_aligned_steps(): assert steps[0] == 0 assert steps[-1] == 9 - # Validation usually has fewer steps or different freq - # Origin 5, Target 10 + # Fewer validation steps retain the training endpoints, rounding ties to even. steps = compute_aligned_steps(10, 5, 1, 0) assert len(steps) == 5 - # linspace(0, 9, 5) -> 0, 2.25, 4.5, 6.75, 9 - # round: 0, 2, 4 (4.5 rounds to nearest even? or Up? Py3 round ties to even: 4). - # 6.75 -> 7. - # 9 -> 9. - # [0, 2, 4, 7, 9] assert steps == [0, 2, 4, 7, 9] diff --git a/tests/logging/test_tensorboard.py b/tests/logging/test_tensorboard.py deleted file mode 100644 index 4640904..0000000 --- a/tests/logging/test_tensorboard.py +++ /dev/null @@ -1 +0,0 @@ -# TODO From e47a5f55649b057d7a3c4c95db00b62345d7c97d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 13:52:43 +0200 Subject: [PATCH 161/221] refactor: centralize W&B initialization and dependency checks --- mini_trainer/logging/wandb.py | 59 +++++++--------- tests/logging/test_wandb.py | 123 ++++++++++++++++------------------ 2 files changed, 81 insertions(+), 101 deletions(-) diff --git a/mini_trainer/logging/wandb.py b/mini_trainer/logging/wandb.py index 299fd92..bdab689 100644 --- a/mini_trainer/logging/wandb.py +++ b/mini_trainer/logging/wandb.py @@ -20,6 +20,14 @@ wandb = None +def _require_wandb(): + if wandb is None: + raise ImportError( + "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " + "`uv sync --extra recommended`, or `uv add wandb`." + ) + + class WandbLogger(_Logger): """Weights & Biases logger.""" @@ -34,7 +42,6 @@ def __init__( run_id: str | None = None, ): """Wandb logger.""" - global wandb if steps is None: raise TypeError(f"Initializing {WandbLogger} with `steps=None` is invalid.") @@ -66,11 +73,7 @@ def __init__( if config and "input" in config: dataset = os.path.basename(config["input"]) - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + _require_wandb() if wandb.run is None: tags = [] if machine: @@ -88,33 +91,25 @@ def __init__( tags = [t for t in tags if t] - display_name = run_name or name + options = {} if is_dist_avail_and_initialized(): run_id = run_id or "".join(c if c.isalnum() or c in "-_" else "_" for c in name)[:64] - settings = wandb.Settings( + options["settings"] = wandb.Settings( mode="shared", x_primary=(get_rank() == 0), x_update_finish_state=(get_rank() == 0), x_label=f"rank_{get_rank()}", ) - wandb.init( - project=project, - name=display_name, - id=run_id, - dir=output, - config=config, - tags=tags if tags else None, - settings=settings, - ) - else: - wandb.init( - project=project, - name=display_name, - **({"id": run_id} if run_id is not None else {}), - dir=output, - config=config, - tags=tags if tags else None, - ) + if run_id is not None: + options["id"] = run_id + wandb.init( + project=project, + name=run_name or name, + dir=output, + config=config, + tags=tags if tags else None, + **options, + ) self._internal_step = 0 self._statistics: dict[str, _Statistic] = dict() @@ -170,11 +165,7 @@ def update(self, name: str, values): def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | str, epoch: int = 0, **kwargs): """Log a rank-zero figure immediately with its epoch.""" - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + _require_wandb() if get_rank() > 0 or wandb.run is None: return @@ -213,11 +204,7 @@ def add_figure(self, name: str, figure: plt.Figure | np.ndarray | torch.Tensor | def step(self): """Step wandb logger.""" - if wandb is None: - raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " - "`uv sync --extra recommended`, or `uv add wandb`." - ) + _require_wandb() if wandb.run is not None and self._current_step_logs: if get_rank() == 0: if self._internal_step < len(self.global_steps): diff --git a/tests/logging/test_wandb.py b/tests/logging/test_wandb.py index fe44579..3d6c415 100644 --- a/tests/logging/test_wandb.py +++ b/tests/logging/test_wandb.py @@ -1,4 +1,4 @@ -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock import pytest @@ -6,80 +6,73 @@ from mini_trainer.logging import BaseStatistic, WandbLogger -def test_wandb_logger_not_installed(): - with patch.object(wandb_module, "wandb", None): - with pytest.raises(ImportError, match="wandb is not installed"): - WandbLogger(steps=[0, 1], output=None) - - -def test_wandb_logger_init(): - mock_wandb = MagicMock() - mock_wandb.run = None - with ( - patch.object(wandb_module, "wandb", mock_wandb), - patch("socket.gethostname", return_value="dummy_host"), - patch("os.getcwd", return_value="CWD"), - ): - WandbLogger(steps=[0, 1], output="dummy_dir", name="test", project="test_proj") - mock_wandb.init.assert_called_once_with(project="test_proj", name="test", dir="dummy_dir", config=None, tags=["dummy_host", "CWD"]) - - # Test initialization with steps=None - with pytest.raises(TypeError): - WandbLogger(steps=None, output=None) +@pytest.fixture +def sdk(monkeypatch): + sdk = MagicMock() + monkeypatch.setattr(wandb_module, "wandb", sdk) + return sdk -def test_wandb_logger_add_stat(): - mock_wandb = MagicMock() - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 1], output=None) - logger.add_stat("loss", BaseStatistic) - assert "loss" in logger.statistics - assert isinstance(logger.statistics["loss"], BaseStatistic) +@pytest.mark.parametrize( + ("method", "kwargs"), + [("__init__", {"steps": [0], "output": None}), ("step", {}), ("add_figure", {"name": "plot", "figure": None})], +) +def test_wandb_logger_not_installed(monkeypatch, method, kwargs): + monkeypatch.setattr(wandb_module, "wandb", None) + with pytest.raises(ImportError, match="wandb is not installed"): + getattr(WandbLogger.__new__(WandbLogger), method)(**kwargs) -@pytest.mark.parametrize("rank", [0, 1]) -def test_distributed_trial_id_and_finish_owner(rank): - sdk = MagicMock() +@pytest.mark.parametrize("rank", [None, 0, 1], ids=["local", "primary", "secondary"]) +@pytest.mark.parametrize(("run_id", "run_name"), [(None, None), ("", "batch64"), ("shared-trial", "batch64")]) +def test_new_run_identity_and_finish_owner(sdk, monkeypatch, tmp_path, rank, run_id, run_name): sdk.run = None - with ( - patch.object(wandb_module, "wandb", sdk), - patch.object(wandb_module, "is_dist_avail_and_initialized", return_value=True), - patch.object(wandb_module, "get_rank", return_value=rank), - ): - WandbLogger(steps=[0, 1], output=None, name="model", run_name="batch64", run_id="shared-trial") - assert sdk.init.call_args.kwargs["id"] == "shared-trial" - assert sdk.init.call_args.kwargs["name"] == "batch64" - assert sdk.Settings.call_args.kwargs["x_update_finish_state"] is (rank == 0) - - -def test_wandb_logger_update_and_step(): - mock_wandb = MagicMock() - mock_wandb.run = MagicMock() - mock_wandb.run.step = 0 - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 10], output=None) - logger.add_stat("loss", BaseStatistic) + monkeypatch.setattr(wandb_module.socket, "gethostname", lambda: "host") + monkeypatch.setattr(wandb_module.os, "getcwd", lambda: "CWD") + monkeypatch.setattr(wandb_module, "is_dist_avail_and_initialized", lambda: rank is not None) + monkeypatch.setattr(wandb_module, "get_rank", lambda: rank) + WandbLogger(steps=[0, 1], output=str(tmp_path), name="model trial/1", project="project", run_name=run_name, run_id=run_id) + expected = dict(project="project", name=run_name or "model trial/1", dir=str(tmp_path), config=None, tags=["host", "CWD"]) + if rank is not None: + sdk.Settings.assert_called_once_with(mode="shared", x_primary=rank == 0, x_update_finish_state=rank == 0, x_label=f"rank_{rank}") + expected.update(id=run_id or "model_trial_1", settings=sdk.Settings.return_value) + else: + sdk.Settings.assert_not_called() + if run_id is not None: + expected["id"] = run_id + sdk.init.assert_called_once_with(**expected) + + +@pytest.mark.parametrize("distributed", [False, True]) +def test_existing_run_is_adopted(sdk, monkeypatch, distributed): + monkeypatch.setattr(wandb_module, "is_dist_avail_and_initialized", lambda: distributed) + WandbLogger(steps=[0, 1], output=None, run_id="must-not-replace-existing") + sdk.init.assert_not_called() + sdk.Settings.assert_not_called() + with pytest.raises(TypeError): + WandbLogger(steps=None, output=None) - logger.update("loss", 1.5) - assert logger._current_step_logs["loss/main"] == 1.5 - logger.step() - mock_wandb.log.assert_called_once_with({"loss/main": 1.5, "global_step": 0}) - assert logger._internal_step == 1 - assert logger._current_step_logs == {} +def test_wandb_logger_update_and_step(sdk): + logger = WandbLogger(steps=[0, 10], output=None) + logger.add_stat("loss", BaseStatistic) + assert isinstance(logger.statistics["loss"], BaseStatistic) + logger.update("loss", 1.5) + logger.step() + sdk.log.assert_called_once_with({"loss/main": 1.5, "global_step": 0}) + assert logger._internal_step == 1 + assert logger._current_step_logs == {} -def test_wandb_logger_add_figure(): +def test_wandb_logger_add_figure(sdk): import matplotlib.pyplot as plt - mock_wandb = MagicMock() - mock_wandb.run = MagicMock() - mock_wandb.run.step = 0 - with patch.object(wandb_module, "wandb", mock_wandb): - logger = WandbLogger(steps=[0, 10], output=None) - fig = plt.figure() - + logger = WandbLogger(steps=[0, 10], output=None) + fig = plt.figure() + try: logger.add_figure("my_plot", fig, epoch=1) logger.step() - mock_wandb.Image.assert_called_once_with(fig) - mock_wandb.log.assert_called_once_with({"my_plot/main": mock_wandb.Image.return_value, "epoch": 1}) + sdk.Image.assert_called_once_with(fig) + sdk.log.assert_called_once_with({"my_plot/main": sdk.Image.return_value, "epoch": 1}) + finally: + plt.close(fig) From dc1a04a58019478e1a2bf13dc3bb0baa8b033153 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:00:24 +0200 Subject: [PATCH 162/221] fix: close logger writers at phase boundaries --- mini_trainer/logging/core.py | 47 ++++++++++------ mini_trainer/logging/tensorboard.py | 7 +++ tests/logging/test_tensorboard.py | 84 +++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 tests/logging/test_tensorboard.py diff --git a/mini_trainer/logging/core.py b/mini_trainer/logging/core.py index 8d2f5ab..97529d8 100644 --- a/mini_trainer/logging/core.py +++ b/mini_trainer/logging/core.py @@ -7,6 +7,7 @@ from abc import ABC, abstractmethod from collections import defaultdict, deque from collections.abc import Callable, Iterator, Sequence +from contextlib import ExitStack from itertools import chain, repeat from pathlib import Path from tempfile import NamedTemporaryFile @@ -664,25 +665,39 @@ def update(self, epoch: int, type: str): self._start_time = time.time() self.eta = ETA(self.total_steps, 0.999) else: - self.save() - self._store_summary() + try: + self.save() + self._store_summary() + finally: + self._close_loggers() if self.clear_store_on_update: self.statistics_storage = defaultdict(list) self.heterogeneous_storage = defaultdict(list) self._epoch = epoch self._type = type self._reset_cuda_memory_stats() - self._current_loggers = [] self._soft_confusion_matrix = dict() - for cls, kwargs, stat_factory in zip( - self.logger_cls, - chain(self.logger_cls_extra_kwargs, repeat(dict())), - chain(self.logger_cls_stat_factory, repeat(BaseStatistic)), - ): - this_logger = cls(steps=self.steps, tag=type, name=self.name, output=self.output, **kwargs) - for stat in self.statistics: - this_logger.add_stat(stat, stat_factory()) - self._current_loggers.append(this_logger) + try: + for cls, kwargs, stat_factory in zip( + self.logger_cls, + chain(self.logger_cls_extra_kwargs, repeat(dict())), + chain(self.logger_cls_stat_factory, repeat(BaseStatistic)), + ): + this_logger = cls(steps=self.steps, tag=type, name=self.name, output=self.output, **kwargs) + self._current_loggers.append(this_logger) + for stat in self.statistics: + this_logger.add_stat(stat, stat_factory()) + except BaseException: + self._close_loggers() + raise + + def _close_loggers(self): + loggers, self._current_loggers = self._current_loggers, [] + with ExitStack() as stack: + for logger in loggers: + close = getattr(logger, "close", None) + if close is not None: + stack.callback(close) def step(self): """Advance one logging step. @@ -759,8 +774,11 @@ def save(self, fp: str | TextIO | None = None, encoding: str = "utf-8", **kwargs pass def finish(self): - self._store_summary() - self.save() + try: + self._store_summary() + self.save() + finally: + self._close_loggers() self._start_time = None self.eta = None self.statistics_storage = defaultdict(list) @@ -768,7 +786,6 @@ def finish(self): self._epoch = None self._type = None self._reset_cuda_memory_stats() - self._current_loggers: list[_Logger] = [] self._soft_confusion_matrix = dict() self._finished = True diff --git a/mini_trainer/logging/tensorboard.py b/mini_trainer/logging/tensorboard.py index 0c878f7..f65d0e8 100644 --- a/mini_trainer/logging/tensorboard.py +++ b/mini_trainer/logging/tensorboard.py @@ -74,6 +74,13 @@ def flush(self): self.writer.add_scalar(tag, value, self.global_steps[int(step)]) self.clear_buffer() + def close(self): + """Write remaining scalars and close the owned event writer.""" + try: + self.flush() + finally: + self.writer.close() + def update(self, name: str, values): """Add values to tensorboard.""" if isinstance(values, torch.Tensor): diff --git a/tests/logging/test_tensorboard.py b/tests/logging/test_tensorboard.py new file mode 100644 index 0000000..ded6bba --- /dev/null +++ b/tests/logging/test_tensorboard.py @@ -0,0 +1,84 @@ +"""Phase ownership contracts without the optional TensorBoard package or a server.""" + +import sys +from types import SimpleNamespace +from unittest.mock import Mock + +import pytest + +from mini_trainer.logging import MetricLogger, MultiLogger, TensorboardLogger + + +@pytest.fixture +def writers(monkeypatch): + created = [] + + def create(**kwargs): + writer = Mock(spec=["add_scalar", "close"]) + created.append(writer) + return writer + + monkeypatch.setitem(sys.modules, "torch.utils.tensorboard.writer", SimpleNamespace(SummaryWriter=create)) + return created + + +def make_logger(tmp_path, **kwargs): + return MultiLogger([0] * 5, [0] * 5, 1, str(tmp_path), "run", statistics=["loss"], **kwargs) + + +@pytest.mark.parametrize("boundary", ["phase", "finish"]) +def test_phase_boundary_flushes_partial_buffer_and_closes_writer(tmp_path, writers, boundary): + logger = make_logger(tmp_path, logger_cls=[MetricLogger, TensorboardLogger]) + logger.update(0, "train") + for value in (1.0, 3.0): + logger.log_statistic(loss=value) + logger.step() + writer = writers[0] + writer.add_scalar.assert_not_called() + if boundary == "phase": + logger.update(0, "eval") + assert len(writers) == 2 + writers[1].close.assert_not_called() + else: + logger.finish() + writer.add_scalar.assert_called_once_with("loss/train", 2.0, 1) + writer.close.assert_called_once() + if boundary == "phase": + logger.finish() + writers[1].close.assert_called_once() + writer.close.assert_called_once() + + +@pytest.mark.parametrize("failure", ["summary", "flush"]) +def test_finish_closes_all_backends_even_if_saving_fails(tmp_path, writers, monkeypatch, failure): + class OtherLogger(MetricLogger): + close = Mock() + + logger = make_logger(tmp_path, logger_cls=[OtherLogger, TensorboardLogger]) + logger.update(0, "train") + logger.log_statistic(loss=1.0) + if failure == "summary": + monkeypatch.setattr(logger, "_store_summary", Mock(side_effect=OSError("write failed"))) + else: + writers[0].add_scalar.side_effect = OSError("write failed") + with pytest.raises(OSError, match="write failed"): + logger.finish() + writers[0].close.assert_called_once() + OtherLogger.close.assert_called_once() + + +@pytest.mark.parametrize("failure", ["constructor", "statistic"]) +def test_partial_backend_initialization_closes_created_writer(tmp_path, writers, failure): + def fail(*args, **kwargs): + raise RuntimeError("initialization failed") + + options = {"logger_cls": [TensorboardLogger]} + if failure == "constructor": + options["logger_cls"].append(fail) + else: + options["logger_cls_stat_factory"] = [fail] + logger = make_logger(tmp_path, **options) + with pytest.raises(RuntimeError, match="initialization failed"): + logger.update(0, "train") + writers[0].close.assert_called_once() + assert logger.loggers == [] From d0eed16440ed9bdc1877dddef0d393ec412d910d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:05:30 +0200 Subject: [PATCH 163/221] refactor: clarify benchmark summaries and share failure fixture --- dev/benchmarks/reporting/summarize.py | 21 +++++---- dev/benchmarks/training.md | 8 ++-- tests/benchmarks/test_benchmark_datasets.py | 49 ++++++++------------- 3 files changed, 32 insertions(+), 46 deletions(-) diff --git a/dev/benchmarks/reporting/summarize.py b/dev/benchmarks/reporting/summarize.py index c1f31bb..2de736b 100644 --- a/dev/benchmarks/reporting/summarize.py +++ b/dev/benchmarks/reporting/summarize.py @@ -82,18 +82,17 @@ def summarize(directory: Path) -> str: lines.extend( [ "", - "Synthetic profiles require 100% oracle accuracy. Real-data runs marked `completed`", - "have no quality acceptance threshold yet; completion does not establish an improvement.", + "Synthetic runs require 100% oracle accuracy; real-data completion has no quality gate.", + "Compare matching hardware, data/configuration and measurement scopes. CPU results do not validate GPU behavior.", + "See JSON reports for provenance, errors and coverage.", "", - "Wall times include setup, training, validation, logging and checkpoints. Compare timings", - "only with matching hardware, dataset/configuration and timing scope. See JSON reports", - "for provenance, errors and explicit coverage flags. CPU results do not validate GPU behavior.", - "QT coverage counts quantized Linear modules; other operations may remain floating point.", - "Frozen backbone parameters do not imply evaluation mode: fine-tuning retains normal BatchNorm/dropout behavior.", - "Parameter bytes describe stored parameters. CUDA peaks cover training, excluding final held-out inference.", - "Older CUDA readings without a scope marker are unverified because logger resets could hide earlier peaks.", - "Later-epoch medians use timed training phases from epoch 3 onward, including loading, preprocessing and batch logging.", - "They exclude validation/figures/checkpoints, but may still include later compilation; they do not replace total wall time.", + "- Wall time: setup, training, validation, logging and checkpoints.", + "- Epoch 3+ median: loading, preprocessing and batch logging; excludes validation, figures and checkpoints.", + " Later compilation may still contribute; this does not replace wall time.", + "- CUDA peak: training allocations, excluding final held-out inference. Legacy readings without scope markers", + " are unverified because logger resets could hide earlier peaks.", + "- Parameter bytes: stored parameters. QT coverage: INT8 Linear modules; other operations may remain floating point.", + "- Frozen backbone: parameters frozen, normal training-mode BatchNorm/dropout retained.", ] ) return "\n".join(lines) + "\n" diff --git a/dev/benchmarks/training.md b/dev/benchmarks/training.md index 8dbed36..23c8329 100644 --- a/dev/benchmarks/training.md +++ b/dev/benchmarks/training.md @@ -68,10 +68,10 @@ arguments. These are focused diagnostics, not substitutes for paired training. | `training.large_head_training` | EfficientNetV2 large-head setup, steps and memory; `--frozen` evaluates the backbone | | `training.quantized_training` | Integer linear forward/backward and updates against floating compute | | `training.quantization` | Separate CPU PTQ/QAT behavior | -| `data.loader` | Cached loader throughput | -| `data.cache` | Cache construction and host/shared-memory costs | -| `data.reader` | Streaming image decode/resize | -| `data.transfer` | Host/device transfer and overlap | +| `data.loader` | Scalar vs batched fetching; optional pinned gathering | +| `data.cache` | CPU cache construction from repeated PNGs | +| `data.reader` | Real-image decode/resize with exact batch comparison | +| `data.transfer` | Pinned H2D/overlap with fixed ResNet18; optional backward | ```bash OMP_NUM_THREADS=1 .venv/bin/python -m dev.benchmarks.data.loader diff --git a/tests/benchmarks/test_benchmark_datasets.py b/tests/benchmarks/test_benchmark_datasets.py index 1d5a39f..c698b62 100644 --- a/tests/benchmarks/test_benchmark_datasets.py +++ b/tests/benchmarks/test_benchmark_datasets.py @@ -1,6 +1,10 @@ import csv import json +import os +import shlex import shutil +import subprocess +import sys from pathlib import Path import pytest @@ -75,23 +79,24 @@ def test_summary_preserves_failures_and_unmeasured_fields(tmp_path, fine_tune): assert "No reports produced" in summarize(Path(tmp_path / "missing")) -@pytest.mark.parametrize("mode", ["qt", "qt-large-batch", "qt-cudagraphs", "qt-optimizer-cudagraphs"]) -def test_shared_harness_records_process_failures(tmp_path, mode): - import os - import shlex - import subprocess - import sys - +@pytest.fixture +def failed_training_python(tmp_path): runner = tmp_path / "python-wrapper" runner.write_text( - '#!/usr/bin/env bash\nif [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' - + f'exec {shlex.quote(sys.executable)} "$@"\n' + "#!/usr/bin/env bash\n" + 'if [[ "$1" == "-c" && "$2" == "import mini_metrics" ]]; then exit 0; fi\n' + 'if [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' + f'exec {shlex.quote(sys.executable)} "$@"\n' ) runner.chmod(0o755) + return str(runner) + + +@pytest.mark.parametrize("mode", ["qt", "qt-large-batch", "qt-cudagraphs", "qt-optimizer-cudagraphs"]) +def test_shared_harness_records_process_failures(tmp_path, mode, failed_training_python): output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", mode, str(output)], - env={**os.environ, "BENCHMARK_PYTHON": str(runner), "BENCHMARK_DATA_ROOT": str(tmp_path)}, + env={**os.environ, "BENCHMARK_PYTHON": failed_training_python, "BENCHMARK_DATA_ROOT": str(tmp_path)}, capture_output=True, text=True, timeout=30, @@ -120,8 +125,6 @@ def test_shared_harness_records_process_failures(tmp_path, mode): def test_benchmark_retains_cuda_peaks_across_phase_resets(tmp_path): - import os - import torch from torch.utils.data import DataLoader @@ -280,26 +283,14 @@ def inspect_optimizer(model, *args, **kwargs): assert indices[0]["class"] == [labels[0] for labels in indices[1]["class"]] -def test_representative_profile_retains_training_and_quality_failures(tmp_path): - import os - import shlex - import subprocess - import sys - - runner = tmp_path / "python-wrapper" - runner.write_text( - "#!/usr/bin/env bash\n" - 'if [[ "$1" == "-c" ]]; then exit 0; fi\n' - 'if [[ "$1" == "-m" && "$2" == "dev.benchmarks.training.run" ]]; then exit 134; fi\n' + f'exec {shlex.quote(sys.executable)} "$@"\n' - ) - runner.chmod(0o755) +def test_representative_profile_retains_training_and_quality_failures(tmp_path, failed_training_python): output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", "qt-efficientnet", str(output)], env={ **os.environ, - "BENCHMARK_PYTHON": str(runner), - "BENCHMARK_METRICS_PYTHON": str(runner), + "BENCHMARK_PYTHON": failed_training_python, + "BENCHMARK_METRICS_PYTHON": failed_training_python, "BENCHMARK_DATA_ROOT": str(tmp_path), "BLAIR_CLASS_SPEC": str(tmp_path / "spec.json"), "BENCHMARK_HEAD": "hierarchical", @@ -365,10 +356,6 @@ def test_summary_renders_paired_metrics_without_treating_them_as_training(tmp_pa @pytest.mark.parametrize("seeds", [" ", "42 42", "-1"]) def test_representative_profile_rejects_invalid_seeds_before_output(tmp_path, seeds): - import os - import subprocess - import sys - output = tmp_path / "reports" result = subprocess.run( ["bash", "dev/check-benchmarks.sh", "qt-efficientnet", str(output)], From 94a0b8c4c060e3246b0287e791952408fb8d40e1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:09:05 +0200 Subject: [PATCH 164/221] docs: state benchmark duplicate validation boundary --- dev/benchmarks/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/benchmarks/README.md b/dev/benchmarks/README.md index 82cd714..f150264 100644 --- a/dev/benchmarks/README.md +++ b/dev/benchmarks/README.md @@ -61,8 +61,8 @@ threshold. Fix budgets and quality criteria before comparing changes. For real data, a seeded 20% of each class's unique training files forms validation. Byte-identical duplicates stay together; training copies of test files are excluded from the index and recorded without changing source files or the official test -split. Conflicting labels for identical content fail validation. Hashing detects -encoded-byte equality, not perceptual duplicates. Blair's reviewed class mapping +split. Remaining cross-split byte duplicates fail validation; within-split label +conflicts are not audited. Hashing is not perceptual. Blair's reviewed class mapping must exactly cover training classes and is retained in the manifest. The final checkpoint is evaluated after a fixed epoch budget; test labels never From d3ffb2cd50c9ad03cb1e94afef9ea22d09ce5802 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:12:52 +0200 Subject: [PATCH 165/221] refactor: share UCloud preparation plan arguments --- dev/releases/mambo_v3/ucloud_release.py | 29 ++++++++++--------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/dev/releases/mambo_v3/ucloud_release.py b/dev/releases/mambo_v3/ucloud_release.py index 3aeb8c8..89fea6f 100644 --- a/dev/releases/mambo_v3/ucloud_release.py +++ b/dev/releases/mambo_v3/ucloud_release.py @@ -76,9 +76,7 @@ def jobs(config, phase): bank_size = max(32, *config["cpu_batches"], *config["gpu_batches"], config.get("v3_batch_size", 1)) planned = [] for trial in range(3 if timing else 1): - variants = list(VARIANTS) - if trial == 1: - variants.reverse() + variants = VARIANTS[::-1] if trial == 1 else VARIANTS devices = config["timing_devices"] if timing else [config["quality_device"]] for device in devices: for variant in variants: @@ -101,25 +99,20 @@ def jobs(config, phase): module = "benchmark" if timing else "evaluate" interpreter = config.get("onnx_python", config["v3_python"]) if variant.startswith("onnx") else config["v3_python"] command = [interpreter, "-m", f"dev.releases.mambo_v3.{module}"] + preparation = [ + "--stream-workers" if timing else "--decode-workers", + str(config.get("decode_workers", config["threads"])), + "--prefetch-batches", + str(config.get("prefetch_batches", 2)), + ] if not timing: - command += [ - "collect", - "--decode-workers", - str(config.get("decode_workers", config["threads"])), - "--prefetch-batches", - str(config.get("prefetch_batches", 2)), - ] + command += ["collect", *preparation] if not config.get("device_prefetch", True): command.append("--no-device-prefetch") for key, default in (("read_workers", 32), ("read_window", 128), ("encoded_budget_mib", 256)): command += ["--" + key.replace("_", "-"), str(config.get(key, default))] if timing: - command += [ - "--stream-workers", - str(config.get("decode_workers", config["threads"])), - "--prefetch-batches", - str(config.get("prefetch_batches", 2)), - ] + command += preparation command += [ "--bundle", config["bundle"], @@ -311,11 +304,11 @@ def run(config, phase, resume=False): PYTHONPATH=f"{config['legacy_source']}:{ROOT}" if job["legacy"] else str(ROOT), ) print(job["name"], flush=True) - with (output / f"{job['name']}.log").open("w") as stream: + log = output / f"{job['name']}.log" + with log.open("w") as stream: try: subprocess.run(job["command"], cwd=ROOT, env=env, check=True, stdout=stream, stderr=subprocess.STDOUT) except subprocess.CalledProcessError: - log = output / f"{job['name']}.log" print(f"Job failed; log: {log}\n" + "\n".join(log.read_text(errors="replace").splitlines()[-25:]), flush=True) raise report = validated_report(directory) From d21daa08c550669a361c54e269297a938cd644ed Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:16:45 +0200 Subject: [PATCH 166/221] docs: consolidate historical family precision diagnosis --- docs/mambo-family-precision.md | 157 +++++++++++---------------------- 1 file changed, 53 insertions(+), 104 deletions(-) diff --git a/docs/mambo-family-precision.md b/docs/mambo-family-precision.md index f618281..d83b11b 100644 --- a/docs/mambo-family-precision.md +++ b/docs/mambo-family-precision.md @@ -1,124 +1,73 @@ -# Why calibrated family Macro-F1 favours V2 +# Rare-family sensitivity in the historical comparison -**The difference is driven by additional predicted-only families surviving V3's -confidence thresholds.** Their image counts are small, but each family receives -equal weight in macro precision and Macro-F1. It is not a larger V3 taxonomy: -V2 and V3 have identical genus/family mappings for all 12,632 model species, and -the shared northern-Europe species list spans 67 eligible families in both. -Flemming reporting truth contains 23 families. +**Historical padded-scale TTA evidence.** See the [deployment README](../deployment/README.md#release-comparison) +for the current rotation-and-padding comparison. -This audit uses the same 52,788 reporting images, all truth, and independently -calibrated family thresholds as the [threshold study](mambo-confidence-thresholds.md). -All precision, recall and F1 values and class weights come from pinned -`mini_metrics` revision `70cc69adc05362863439277048e06386c1f885e1`. -Counts below describe retained predictions, without reimplementing metrics. +V3's lower calibrated family macro precision and F1 came from **more predicted-only +families surviving rejection**, despite better recall. V2/V3 have identical parent +mappings for all 12,632 species; their shared northern-Europe list spans 67 families. +The 52,788-image Flemming reporting partition contains 23 truth families. -## Which families enter the average? +## Effect on the averages -At the calibrated thresholds, every pipeline predicts the **same 22 truth-present -families**. Gelechiidae is present in truth but has no accepted predictions in any -pipeline. In addition, V2 predicts 3 families absent from reporting truth; V3 predicts -7. Those extra families have zero precision and zero F1. +The [threshold study](mambo-confidence-thresholds.md) defines the shared all-truth +reporting partition, separate per-pipeline calibration and pinned `mini_metrics`. +At the calibrated thresholds, all five pipelines predict the same 22 truth-present +families; Gelechiidae has truth support but no accepted predictions. Each additional +predicted-only family contributes a zero-precision, zero-F1 group—even a singleton. -| Pipeline | Predicted-only families | Images assigned to them | Official macro precision | Precision over truth-present groups only | -|---|---:|---:|---:|---:| -| MAMBO v2 | 3 | 4 | 0.8413 | 0.9561 | -| V3 PyTorch | 7 | 31 | 0.7406 | 0.9762 | -| V3 ONNX | 7 | 31 | 0.7406 | 0.9762 | -| V3 PyTorch + TTA | 7 | 24 | 0.7394 | 0.9747 | -| V3 ONNX + TTA | 7 | 23 | 0.7395 | 0.9748 | +Precision and F1 cells show **official / truth-group diagnostic** scores. The diagnostic uses +`mini_metrics` to reaggregate its per-class outputs over truth-present families; +it changes the averaging domain, not predictions, thresholds or image rows. +It is explanatory, not a replacement benchmark. -The last column is a **diagnostic change to the averaging domain**, not a corrected -benchmark score. It reaggregates the package's existing per-class outputs over -truth-present families; it does not delete images, rerun predictions, or replace -the official metrics. At these operating points, all pipelines have the same 22 -active precision groups in that diagnostic. +| Pipeline | Predicted-only families / images | Macro precision | Macro-F1 | Macro recall | Coverage | +|---|---:|---:|---:|---:|---:| +| MAMBO v2 | 3 / 4 | 0.8413 / 0.9561 | 0.6545 / 0.7399 | 0.6467 | 77.44% | +| V3 PyTorch | 7 / 31 | 0.7406 / 0.9762 | 0.5807 / 0.7575 | 0.6535 | 73.06% | +| V3 ONNX | 7 / 31 | 0.7406 / 0.9762 | 0.5816 / 0.7586 | 0.6549 | 73.26% | +| V3 PyTorch + TTA | 7 / 24 | 0.7394 / 0.9747 | 0.6073 / 0.7921 | 0.7002 | 78.74% | +| V3 ONNX + TTA | 7 / 23 | 0.7395 / 0.9748 | 0.6065 / 0.7911 | 0.6987 | 78.47% | -The package's weights give the exact decomposition: +The package weights give the precision decomposition: -- V2: `0.956078 × 22 / (22 + 3) = 0.841349` macro precision. -- V3 PyTorch: `0.976235 × 22 / (22 + 7) = 0.740592` macro precision. +- V2: `0.956078 × 22 / (22 + 3) = 0.841349`. +- V3 PyTorch: `0.976235 × 22 / (22 + 7) = 0.740592`. -V3 has higher average precision within those shared truth-present groups. Its -lower official macro precision arises from the four additional zero-precision -groups. Even one accepted prediction can activate such a group; these are errors -relative to this dataset's labels, not evidence that the family cannot occur locally. +Macro-F1 averages per-family F1, not the harmonic mean of macro precision/recall. +Its domain includes all 23 truth families plus predicted-only families: 26 groups +for V2, 30 for V3. Recall is unaffected by removing predicted-only groups because +they have no truth support. -## Which extra families survive? +Bedelliidae accounts for 21 of V3's 31 accepted predicted-only cases (15 labelled +Erebidae, six Geometridae); the other six families have one or two cases each. +These are label-based errors, not expert-confirmed misidentifications or evidence +that a family cannot occur locally. The [per-family CSV](assets/mambo-family-precision.csv) +retains all five pipelines' counts and metric weights. -Accepted predictions into families absent from reporting truth: +## Why calibration changes the ranking -| Family | V2 | V3 PyTorch | V3 ONNX | PyTorch + TTA | ONNX + TTA | -|---|---:|---:|---:|---:|---:| -| Bedelliidae | 0 | 21 | 21 | 17 | 16 | -| Choreutidae | 0 | 2 | 2 | 2 | 2 | -| Coleophoridae | 0 | 2 | 2 | 1 | 1 | -| Cossidae | 0 | 1 | 1 | 1 | 1 | -| Opostegidae | 0 | 2 | 2 | 1 | 1 | -| Pieridae | 2 | 0 | 0 | 0 | 0 | -| Psychidae | 0 | 1 | 1 | 1 | 1 | -| Thyrididae | 1 | 0 | 0 | 0 | 0 | -| Tineidae | 1 | 2 | 2 | 1 | 1 | - -Bedelliidae contributes most V3 cases: without TTA, 15 are labelled Erebidae and -6 Geometridae. With PyTorch TTA, those counts fall to 13 and 4; ONNX TTA has 12 and -4. Each of the other six predicted-only V3 families has only one or two accepted -images. V2's four cases are two Nolidae → Pieridae, one Erebidae → Tineidae and -one Geometridae → Thyrididae. These are label-based confusions; image-level expert -review has not established whether every ground-truth annotation is correct. - -## How this affects F1 and the crossing - -Macro-F1 is an average of per-family F1 values, **not** the harmonic mean of the -reported macro precision and macro recall. Its active domain includes all 23 -truth families, even the one without accepted predictions, plus predicted-only -families: 26 groups for V2 and 30 for V3. - -| Pipeline | Official family Macro-F1 | F1 over the same 23 truth families only | Macro recall | -|---|---:|---:|---:| -| MAMBO v2 | 0.6545 | 0.7399 | 0.6467 | -| V3 PyTorch | 0.5807 | 0.7575 | 0.6535 | -| V3 ONNX | 0.5816 | 0.7586 | 0.6549 | -| V3 PyTorch + TTA | 0.6073 | 0.7921 | 0.7002 | -| V3 ONNX + TTA | 0.6065 | 0.7911 | 0.6987 | - -Again, the middle column is explanatory, not a substitute benchmark. Its ranking -favours V3, especially TTA; adding the zero-F1 predicted-only groups yields the -official ranking favouring V2. Recall is unchanged by this diagnostic because -predicted-only families have no true support. - -At threshold zero, the pattern is different: **V2 predicts 41 absent families, -V3 37**, with 408 versus 756 accepted images assigned to them (535 for either TTA -backend). Thresholding removes more of V2's low-confidence predicted-only groups, -leaving 3 versus 7. This explains why the ordering changes after calibration. -A common family threshold of **0.96** still leaves 3 such groups for V2, 8 for -ordinary V3 and 7 for TTA; the effect is not solely the choice of different -optimized threshold values. Within-truth averages also vary with operating point. - -At the calibrated operating points, V3 improves recall of represented families -while retaining a wider set of rare, confident false-family predictions. -The official macro metrics expose that weakness, with considerable sensitivity -to singleton predictions. Keep both official metrics and coverage; excluding -absent families from deployment or evaluation based on Flemming would hide the -failure mode and artificially tailor the system to this benchmark. +At threshold zero, V2 predicts **41 absent families / 408 images**, versus +**37 / 756** for ordinary V3 (535 images for either TTA backend). Calibration +removes more of V2's low-confidence groups, leaving 3 versus 7. A shared family +threshold of **0.96** still leaves 3 groups for V2, 8 for ordinary V3 and 7 for TTA: +separate optimized thresholds are not the sole cause. + +Keep full-support metrics, recall and coverage alongside [tail-truncated results](mambo-tail-metrics.md). +Truncation intentionally hides this rare-family failure mode. Removing absent +families from deployment based on Flemming would tailor the vocabulary to the test. ## Evidence and reproduction -The [per-family CSV](assets/mambo-family-precision.csv) contains family names, -truth counts, accepted prediction counts, and the package's P/R/F1 values and -weights for threshold zero, calibrated thresholds and the common 0.96 threshold. -A blank metric with zero weight means the package did not emit that class group. -The [JSON evidence](assets/mambo-family-precision.json) retains official scores, -diagnostic aggregations, false-positive confusion counts, input hashes, and the -name/taxonomy audit. Family names come from the pinned local metadata parquet. +The [JSON](assets/mambo-family-precision.json) retains official scores, diagnostic +aggregations, confusion counts, source hashes and the verified name/taxonomy audit. +The CSV covers threshold zero, calibrated thresholds and 0.96. A blank metric with +zero weight means the package did not emit that group. The [audit script](../dev/releases/mambo_v3/family_precision_report.py) uses public -per-class metric calls (`aggregate=False`) and the pinned package's own -`_aggregate_groups` implementation for diagnostic reaggregation. No data rows or -thresholds are chosen using the diagnostic to improve the official results. - -Prepare names and verify taxonomy using `.venv` (PyArrow/PyTorch), then collect -metrics using the existing pinned metrics environment: +per-class calls (`aggregate=False`) and the pinned package's `_aggregate_groups`. +Prepare names/taxonomy with PyArrow/PyTorch, then use the existing pinned metrics +environment; no inference is needed: ```python from pathlib import Path From 21f9cda8beb014a0edea1ef1f27143851b9b7ac0 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:21:22 +0200 Subject: [PATCH 167/221] docs: condense threshold and tail metric explanations --- docs/mambo-confidence-thresholds.md | 155 +++++++++++----------------- docs/mambo-tail-metrics.md | 78 ++++++-------- 2 files changed, 94 insertions(+), 139 deletions(-) diff --git a/docs/mambo-confidence-thresholds.md b/docs/mambo-confidence-thresholds.md index 8c41d2a..a03fcef 100644 --- a/docs/mambo-confidence-thresholds.md +++ b/docs/mambo-confidence-thresholds.md @@ -9,54 +9,45 @@ both V3 backends with padded-scale TTA. Deployment defaults remain threshold zer ## Method and interpretation -Every predictive metric, threshold selection and dataset split uses the existing -`mini_metrics` machinery at revision `70cc69adc05362863439277048e06386c1f885e1`, -the same revision as the unthresholded comparison. No metric is reimplemented. +Metrics, splitting and calibration use `mini_metrics` revision +`70cc69adc05362863439277048e06386c1f885e1`: -- `MetricDF.split((0.9, 0.1), strata=("label",), seed=42)` yields **5,852 calibration - images and 52,788 reporting images**. Splitting groups all ranks by image ID. - Identity hashes verify identical partitions and truth across all five pipelines. +- `MetricDF.split((0.9, 0.1), strata=("label",), seed=42)` groups ranks by image ID, + yielding **5,852 calibration / 52,788 reporting images**. Identity hashes verify + matching truth/partitions across pipelines. Both operating points below use the + reporting partition, including unknown truth—not the full 58,640-image population. - `OptimalConfidenceThreshold(crit=MacroF1, eps=0.01, use_quantiles=True, - n_bootstraps=0)` selects one threshold per rank and pipeline on calibration only. - The package uses its exact F1 curve and connected near-optimal plateau selector; - “optimized” means the package's tolerance-based selection, not necessarily the - exact maximizer. Explicit results match `evaluate_file(optimal=True, seed=42)`. -- Both threshold-zero and calibrated scores below use **the same reporting partition**, - including unknown truth. Do not compare these directly with full-58,640-image - scores as though thresholding were the only difference. Full-data threshold-zero - scores were separately recomputed and matched the existing comparison. -- Coverage is `mini_metrics` image-level acceptance fraction, separately at each rank: - `confidence >= threshold`. It is not vocabulary coverage. Thresholds are independent - per rank; these are simple rank metrics (`hierarchical=False`), not an enforced - species-to-family fallback policy. -- Macro accuracy averages accuracy among accepted predictions within truth taxa, - excluding taxa with no accepted predictions. Micro accuracy is accuracy among - all accepted images. Recall retains rejected truth as misses; Macro-F1 also - penalizes rejection and includes truth-supported or retained predicted-only taxa. - Precision uses the package's predicted-class averaging. Always interpret rising - accuracy/precision with coverage and recall, especially near total rejection. - -This is a single image-level split, not observation/site-level validation or a -threshold stability study. TTA was selected earlier using a subset of Flemming; -this split does not make the entire model/TTA selection independently validated. -Threshold values are specific to these pipelines, confidence definitions and this -preset. They are candidate operating points, not universal deployment defaults. + n_bootstraps=0)` fits each pipeline/rank on calibration only. Its exact F1 curve + and connected near-optimal plateau selector need not select the exact maximum. + Results match `evaluate_file(optimal=True, seed=42)`; full-data threshold-zero + checks separately reproduce the earlier comparison. +- Coverage is the fraction accepted at each rank (`confidence >= threshold`), + distinct from vocabulary coverage. Independent thresholds and + `hierarchical=False` do not implement species-to-family fallback. + +Macro accuracy averages accepted-prediction accuracy within truth taxa, excluding +those with no accepted predictions; micro accuracy averages all accepted images. +Recall counts rejection as misses. Macro-F1 penalizes rejection and includes +truth-supported and predicted-only taxa; precision averages predicted-class groups. +Interpret accuracy/precision together with recall and coverage. + +This single image-level split is not site/observation-level or stability validation. +Prior TTA selection used Flemming, so it is not independent model/TTA validation +either. Thresholds are specific to these pipelines, scores and preset; deployment +still defaults to zero. ## Effect on the model comparison -Calibration improves Macro-F1 for every pipeline at every rank, with reduced -coverage and recall. At species level, ordinary V3 moves ahead of V2 in Macro-F1; -with threshold zero, its F1 was slightly lower. TTA improves species and genus -Macro-F1 further. **Family reverses the unthresholded F1 ranking: V2 leads all V3 -variants after calibration** (0.6545 versus about 0.581 without TTA and 0.607 with -TTA). V3 + TTA retains more family recall than V2, so this is a trade-off rather -than uniform dominance. These operating points need not have equal coverage. -The [family-level audit](mambo-family-precision.md) traces the reversal to 7 -predicted-only families surviving V3 thresholds versus 3 for V2. Precision within -the same 22 truth-present predicted families is actually higher for V3. +Calibration raises Macro-F1 at every rank while lowering coverage and recall. +V3 overtakes V2 at species level; TTA further improves species/genus F1. At family +level the ranking reverses: V2 leads calibrated F1, while V3 + TTA retains more +recall. The [family audit](mambo-family-precision.md) explains how rare predicted-only +groups cause that reversal. Compare coverage alongside scores. ![Macro-F1 and coverage before and after calibration](assets/mambo-threshold-comparison.svg) +Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. + ### Species | Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | @@ -67,8 +58,6 @@ the same 22 truth-present predicted families is actually higher for V3. | V3 PyTorch + TTA | 0.7393 | 0.3001 → 0.5239 | 78.32% | 86.59% | 82.57% | 0.6695 | 0.6393 | | V3 ONNX + TTA | 0.8280 | 0.3011 → 0.5431 | 74.05% | 87.55% | 83.56% | 0.7363 | 0.6076 | -Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. - ### Genus | Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | @@ -79,8 +68,6 @@ Coverage at threshold zero is 100%; all other columns except the before/after F1 | V3 PyTorch + TTA | 0.8699 | 0.3601 → 0.6655 | 77.73% | 96.28% | 91.16% | 0.8167 | 0.7031 | | V3 ONNX + TTA | 0.8709 | 0.3605 → 0.6655 | 77.69% | 96.30% | 91.18% | 0.8169 | 0.7032 | -Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. - ### Family | Pipeline | Threshold | Macro-F1 zero → calibrated | Coverage | Macro accuracy | Micro accuracy | Macro precision | Macro recall | @@ -91,8 +78,6 @@ Coverage at threshold zero is 100%; all other columns except the before/after F1 | V3 PyTorch + TTA | 0.9648 | 0.2970 → 0.6073 | 78.74% | 99.56% | 99.82% | 0.7394 | 0.7002 | | V3 ONNX + TTA | 0.9665 | 0.2971 → 0.6065 | 78.47% | 99.56% | 99.83% | 0.7395 | 0.6987 | -Coverage at threshold zero is 100%; all other columns except the before/after F1 pair use calibrated thresholds. - ## TTA backend threshold sensitivity The selected species threshold differs substantially between PyTorch (0.7393) @@ -103,65 +88,51 @@ and ONNX (0.8280). Applying **each threshold to both backends** isolates the eff | 0.7393 | 0.5239 / 78.32% | 0.5238 / 78.30% | | 0.8280 | 0.5433 / 74.06% | 0.5431 / 74.05% | -Both thresholds are within 0.01 of each backend's calibration maximum Macro-F1 -(about 0.6347). The package's near-optimal selector chooses different operating -points, while performance at shared thresholds is almost identical. The apparent -ONNX advantage in the calibrated species table is therefore chiefly a threshold -selection effect, not evidence of a better ONNX model. We retain the actual selected -values rather than choosing a new winner using the reporting data. This check -illustrates why threshold stability deserves validation before setting defaults. +Both thresholds are within 0.01 of each backend's calibration maximum F1 +(about 0.6347). Shared-threshold results nearly coincide: the apparent ONNX +advantage chiefly reflects near-optimal threshold selection. Keep the selected +values rather than choosing a new winner on reporting data; validate threshold +stability before adopting defaults. ## Precision–recall and accuracy–coverage curves ![Five-pipeline precision–recall and accuracy–coverage curves](assets/mambo-threshold-curves.svg) -Left: macro precision versus macro recall for all five pipelines at each rank. -Right: accepted-image micro accuracy versus image coverage. ONNX curves are dashed. -Circles denote threshold -zero; stars denote the calibration-selected thresholds, evaluated on reporting data. -Comparing at similar coverage helps distinguish discrimination from more aggressive -rejection. The operating points optimize Macro-F1, not a common coverage target. - -These are **top-prediction rejection curves**, not one-vs-rest curves built from -every class probability, and no average-precision/AUC claim is made. Each plotted -point comes from `evaluate_file` on the reporting partition. The sampled grid uses -51 evenly spaced confidence thresholds, 21 calibration-confidence quantiles per -rank, and each selected threshold, with duplicates removed. Lines connect points -in threshold order without smoothing or a monotonic envelope; class membership -changes can make macro precision irregular. The optimizer itself uses the exact -calibration F1 curve, not this plotting grid. Undefined package results remain null. - -## Tail-truncated supplementary metrics - -The [tail-truncated comparison](mambo-tail-metrics.md) averages classes with more -than 5, 10 or 20 truth instances and accepted predictions, using a common class set -across all five pipelines, alongside an untruncated support >−1 baseline that retains -each model’s full class domain. It retains coverage/support counts and the full-support -comparison: excluding rare and predicted-only families changes the interpretation. +Left: macro precision/recall; right: accepted-image micro accuracy/coverage. +Dashed lines are ONNX; circles mark threshold zero, stars the calibrated points. +Similar coverage helps distinguish discrimination from stronger rejection; +calibration optimizes Macro-F1, not a shared coverage target. + +These are **top-prediction rejection curves**, not one-vs-rest PR curves or AP/AUC +estimates. Each point uses `evaluate_file` on reporting data. The grid combines +51 uniform thresholds, 21 calibration-confidence quantiles per rank and selected +thresholds, deduplicated. Lines follow threshold order without smoothing or a +monotonic envelope; changing class domains can make macro precision irregular. +Calibration uses the exact F1 curve, not this plotting grid. Undefined results stay null. + +The [tail comparison](mambo-tail-metrics.md) supplements full-support results with +common-class support >5/10/20 averages. Excluding rare and predicted-only families +changes the question; retain the untruncated comparison. ## Evidence and reproduction -The [metric table](assets/mambo-threshold-metrics.csv) contains all/known-truth -reporting scores before and after thresholding, calibration scores, threshold -values, Theil U and coverage. Known-only scores reuse thresholds calibrated on all -truth; they do not recalibrate on a different population. The [compact evidence](assets/mambo-threshold-comparison.json) -also retains every curve point, source CSV hashes, partition hashes and full-data -threshold-zero checks. Predictions and inference speed are unchanged. +The [CSV](assets/mambo-threshold-metrics.csv) retains all/known-truth reporting +scores, calibration scores, thresholds, Theil U and coverage. Known-only results +reuse all-truth calibration. The [JSON](assets/mambo-threshold-comparison.json) +retains curve points, source/partition hashes and full-data checks. + +Collect from the retained prediction directories in +[`SOURCES`](../dev/releases/mambo_v3/threshold_report.py), or regenerate charts +directly from committed evidence without predictions or inference: ```sh /path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.threshold_report \ --evidence local-evidence --output local-evidence/mambo-threshold-study .venv/bin/python -m dev.releases.mambo_v3.threshold_report \ - --data local-evidence/mambo-threshold-study/mambo-threshold-comparison.json \ + --data docs/assets/mambo-threshold-comparison.json \ --output /tmp/mambo-threshold-charts ``` -The collector uses the retained prediction directories named in `SOURCES` in -[the analysis script](../dev/releases/mambo_v3/threshold_report.py); those local -model outputs are not shipped in Git. The committed compact evidence can regenerate -the charts without predictions or model inference using `--data`. - -Before enabling calibrated thresholds in deployment, validate the intended -coverage/recall trade-off on the target workflow and define per-rank abstention or -fallback behavior. The current deployment CLI exposes one scalar threshold; these -three independently calibrated thresholds should not be silently substituted for it. +Before adoption, validate coverage/recall in the target workflow and define abstention +or fallback. The deployment CLI accepts one scalar threshold, not these three +independently calibrated rank thresholds. diff --git a/docs/mambo-tail-metrics.md b/docs/mambo-tail-metrics.md index 22f1996..1a069fb 100644 --- a/docs/mambo-tail-metrics.md +++ b/docs/mambo-tail-metrics.md @@ -3,33 +3,26 @@ **Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) contains the current rotation-and-padding default comparison. -These supplementary metrics summarize classes with **more than 5, 10 or 20** -truth instances **and accepted predictions**, at each taxonomic rank. Main results -use the intersection of qualifying classes across all five pipelines, so each -pipeline is averaged over the same classes. Exact-boundary counts do not qualify. -The **support >−1 baseline is untruncated**: it includes the union of truth and -accepted-prediction classes for each model, including zero-support classes in either -domain. It reproduces the original full-support metrics. Unlike the truncated rows, -it does not intersect class sets across models, which would hide model-specific -predicted-only families. Baseline class counts are listed in model-column order; -each metric retains mini_metrics’ own handling of undefined class groups. - -The dataset, legacy northern-Europe preset, 52,788-image reporting partition, -calibrated thresholds and pinned `mini_metrics` revision are unchanged from the -[threshold study](mambo-confidence-thresholds.md). Classes are selected from -reporting support; this is descriptive analysis, not independent validation. - -Per-class accuracy, precision, recall and F1 are computed on the **complete reporting -partition** using `mini_metrics`. Its own aggregator then averages the retained -class groups. No image rows are dropped: mistakes from excluded truth classes into -retained predictions still contribute false positives, and mistakes from retained -truth classes into excluded predictions still contribute false negatives. - -Positive-cutoff truncation excludes predicted-only classes and rare supported classes from the -average. It therefore intentionally hides the rare-family failure mode studied -[in the family audit](mambo-family-precision.md). Keep these results alongside the -full-support metrics. The class sets may differ between threshold zero and calibrated -thresholds; comparisons across those sections are not on a fixed class domain. +These metrics change the **class averaging domain**, not the evaluation images: + +- Support **>5, >10 or >20** requires strictly more than that many truth instances + **and accepted predictions**. Main tables intersect qualifying classes across all + five pipelines; exact-boundary counts do not qualify. +- Support **>−1** is the untruncated baseline: each model's union of truth and + accepted-prediction classes, including zero support in either domain. It does not + intersect models, which would hide model-specific predicted-only families. + Baseline class counts follow model-column order; undefined groups keep the + package's own treatment. + +The legacy northern-Europe preset, 52,788 reporting images, calibration and pinned +`mini_metrics` revision match the [threshold study](mambo-confidence-thresholds.md). +Per-class accuracy/precision/recall/F1 use that **complete partition**; the package's +aggregator then averages selected groups. Cross-domain mistakes still contribute +false positives/negatives. **No image rows are dropped or acceptance decisions changed.** + +Classes are selected using reporting support, so this is descriptive analysis. +Domains can differ between threshold zero and calibration. Positive cutoffs hide +the [rare-family failure mode](mambo-family-precision.md); retain full-support scores. ## Calibrated thresholds @@ -50,16 +43,10 @@ Macro-F1: full-support baseline, followed by the shared truncated class sets. | Family | 10 | 19 | 0.8021 | 0.8161 | 0.8174 | 0.8536 | 0.8524 | | Family | 20 | 15 | 0.8074 | 0.8138 | 0.8154 | 0.8548 | 0.8533 | -Within these commonly represented classes, V3 improves family Macro-F1 over V2, -and TTA improves it further. With support >5, all five pipelines are averaged over -19 families: F1 is 0.8021 for V2, 0.8161–0.8174 for ordinary V3 and 0.8524–0.8536 -with TTA. This is compatible with V2 leading the **full-support** family Macro-F1; -the averaging domains answer different questions. - -The TTA species backend ordering also changes in this view. Their separately -selected thresholds have different coverage; shared-threshold testing in the -[threshold study](mambo-confidence-thresholds.md#tta-backend-threshold-sensitivity) -shows closely aligned backend predictions. +V3 leads family F1 on these commonly represented classes, despite V2 leading full +support: the domains answer different questions. Separately calibrated TTA backends +also have different coverage; [shared-threshold results](mambo-confidence-thresholds.md#tta-backend-threshold-sensitivity) +show closely aligned predictions. ## Threshold zero @@ -80,14 +67,12 @@ shows closely aligned backend predictions. ## Coverage, complete results and reproduction -Truncating the averaging domain does not change which images the pipeline accepts. -The [CSV](assets/mambo-tail-metrics.csv) retains overall acceptance coverage, the -number of truth images and accepted predictions belonging to retained classes, -and macro accuracy/precision/recall/F1. These support counts are not interchangeable -with acceptance coverage. Positive cutoffs include both common-class and per-model class sets; -use the common sets for truncated comparisons. The >−1 baseline includes only -per-model sets, preserving all original class groups. The [JSON](assets/mambo-tail-metrics.json) -additionally records every retained class ID. Empty class domains produce null metrics. +The [CSV](assets/mambo-tail-metrics.csv) retains macro accuracy/precision/recall/F1, +overall acceptance coverage, and truth-image/accepted-prediction counts within +retained classes. Those support counts are not acceptance coverage. Positive +cutoffs include common and per-model domains; these tables use common domains. +The baseline remains per-model. The [JSON](assets/mambo-tail-metrics.json) also +records every class ID; empty domains yield null metrics. ```sh /path/to/pinned-metrics-env/bin/python -m dev.releases.mambo_v3.tail_report \ @@ -97,5 +82,4 @@ additionally records every retained class ID. Empty class domains produce null m [The collector](../dev/releases/mambo_v3/tail_report.py) verifies source hashes and reporting-partition identity, uses public per-class calls and the pinned package's -`_aggregate_groups` implementation, and retains the original thresholds. No deployment -default or existing headline metric is changed. +`_aggregate_groups` implementation, and retains the original thresholds. From 718abbb81c7a86a91b138d6e723c6517c305360e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:27:52 +0200 Subject: [PATCH 168/221] docs: consolidate inference pipeline decisions and evidence --- docs/mambo-inference-pipeline-review.md | 236 +++++++++++------------- 1 file changed, 107 insertions(+), 129 deletions(-) diff --git a/docs/mambo-inference-pipeline-review.md b/docs/mambo-inference-pipeline-review.md index ec4aa5d..f9c6f27 100644 --- a/docs/mambo-inference-pipeline-review.md +++ b/docs/mambo-inference-pipeline-review.md @@ -1,42 +1,33 @@ # V2/V3 inference pipeline: decisions and remaining limits -Review and implementation campaign: 25 September 2026. Initial review baseline -`0eb90b2`; V2 source `32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`. -Final measured stack: `503de96`. Further throughput work is **deferred for the -release freeze**. Current numbers and their provenance live in -[HPC evidence](mambo-hpc-evidence.md); this page explains the architectural decisions. +The 25 September 2026 review compared V3 `0eb90b2` with V2 +`32b3cd661778356b2e8c4cff5b10fa9061aa6f5d`; the final measured stack was `503de96`. +Further throughput work is **deferred for the release freeze**. +[HPC evidence](mambo-hpc-evidence.md) owns current timings, historical comparisons +and measurement provenance. This page retains implementation decisions and limits +needed for future performance work. ## What the evidence established -V3 initially moved work that V2 kept in PyTorch—AMP, hierarchy reduction, selection -and preprocessing—into an expensive portable CPU/NumPy path. Restoring AMP and native -hierarchy repaired regressions. Portable ONNX, audited regional lists, TTA and -standalone CPU integration remain useful additions independent of speed. - -V2 was not an ideal asynchronous reference: it read requests serially, transferred -per image and translated labels through scalar device reads. Its full-evaluation -harness also differed from the public API. Backbones, input resolution and precision -differ, so neither model-compute speedup nor implementation overhead can be inferred -from a single V2/V3 end-to-end ratio. - -The original UCloud campaign measured V2/V3 Torch/V3 ONNX CPU requests at 2.0/28.7/35.1 -images/s (batch 8, four runtime threads), and B200 requests at 539.5/480.7/442.2 -(batch 32). V3 initially trailed V2 on GPU while substantially improving measured CPU -performance. [Original request](assets/mambo-indomain-speed.csv) and -[streaming](assets/mambo-indomain-streaming-speed.csv) observations retain that -baseline; they are not current V3 timings. - -The 632,913-image Torch collection spent 549.3 s waiting for staged inputs across -875.7 s total. Background assembly was 647.2 s, model-stream intervals 212.9 s, -H2D 27.5 s and D2H 1.36 s. **These times overlap.** They target ready-batch delivery, -not bulk output bandwidth or CSV writing. Utilization samples are neither phase -timings nor SM occupancy; event intervals can include gaps in host submission. - -A resident-batch reference reached 3,667 / 3,781 / 3,818 images/s at batches -256 / 512 / 1,024 with almost continuous kernels. This justified prioritizing the -host pipeline over ever-larger batches. It excludes transfer and CPU results, -predates final normalization changes and is not a measured application ceiling. -See the [resident probe](../dev/releases/mambo_v3/pipeline-probe.md#measure-resident-gpu-throughput). +V3 initially lacked V2's AMP use and shifted hierarchy reduction, selection and +preprocessing into costly portable CPU/NumPy work. Restoring AMP and native +hierarchy repaired regressions. V2 itself read requests serially, transferred per +image and translated labels through scalar device reads; its evaluation harness +also differed from its public API. Different backbones, resolutions and precision +prevent attributing a V2/V3 end-to-end ratio solely to model or adapter efficiency. + +The original 632,913-image Torch collection spent 549.3 s waiting for staged inputs +across 875.7 s total. Background assembly took 647.2 s, model-stream intervals +212.9 s, H2D 27.5 s and D2H 1.36 s. **These times overlap:** ready-batch delivery, +rather than bulk output transfer or CSV writing, was the consequential target. +Utilization samples are neither phase timings nor SM occupancy, and event +intervals can include host-submission gaps. + +A [resident-batch reference](../dev/releases/mambo_v3/pipeline-probe.md#measure-resident-gpu-throughput) +reached 3,667 / 3,781 / 3,818 images/s at batches 256 / 512 / 1,024 with almost +continuous kernels. The small gain justified prioritizing the host pipeline over +larger batches. This reference excludes transfers and CPU results and predates the +final normalization changes; it is not an application throughput ceiling. ## Current implementation and ownership @@ -46,113 +37,100 @@ read → decode → prepare → H2D → inference → D2H → fo owns bounded batch storage owns device buffers/events owns completed results ``` -- **Input admission:** one owner reserves bytes in input order, dispatches admitted - reads and receives completion events. IO workers perform metadata/filesystem - work, not capacity waits. Read lookahead, encoded bytes and prepared batches are - bounded independently; slow earlier images cannot lose output alignment. -- **Preparation:** workers fill disjoint reusable batch slices. Serial stacking, - repeated future scans and polling were removed. Native Torch JPEG/PNG decoding - avoids full-resolution Pillow/NumPy round trips where supported; other formats - retain the portable fallback. -- **Backend-specific finishing:** Torch CUDA stages nearest-square uint8 and performs - batched interpolation/crop/normalization on device; its batch-256 input storage - is 108 MiB rather than 432 MiB float32. That is staging storage, not total memory. - CPU/standalone ONNX use portable FP32 preparation without requiring Torch. -- **TTA:** decode once, preserve geometry and logit-averaging semantics. Virtual - edge padding avoids materializing padded originals; custom transforms retain - full-resolution inputs and copy isolation. Default arbitrary rotation uses the - restored Pillow path; the attempted NumPy sampler was slower and was removed. -- **Completion:** Torch downloads use a dedicated stream; the bounded result worker - waits for completion while submission can proceed. CUDA events protect device - slot reuse and pinned-output lifetime. ONNX retains its synchronous output - boundary; I/O binding alone does not make it asynchronous. -- **Results:** reuse hierarchy/vocabulary plans, avoid repeated top-1 scans and full - normalized-probability matrices, retain public raw logits and optional embeddings. - Backend imports resolve at initialization/first use rather than per hot operation. - -Current contracts are in [streaming](../deployment/mambo_deploy/streaming.py), -[preparation](../deployment/mambo_deploy/preprocessing.py), -[transfers](../deployment/mambo_deploy/transfers.py), -[result completion](../deployment/mambo_deploy/result_worker.py) and -[predictor](../deployment/mambo_deploy/predictor.py). -Request and streaming still have distinct scheduling/collection costs. The public -raw-logit contract prevents simply dropping all large outputs. Per-view head work -and the shared core's embedding-context concurrency boundary also limit further -simplification; core changes require the separate feature-branch route. +- [Input admission](../deployment/mambo_deploy/streaming.py) has one owner reserving + bytes in input order and dispatching reads. IO workers perform filesystem work, + never capacity waits. Read lookahead, encoded bytes and prepared batches have + independent bounds; workers fill disjoint reusable batch slices and completion + events preserve output order without serial stacking or future polling. +- [Preparation](../deployment/mambo_deploy/preprocessing.py) uses native Torch + JPEG/PNG decoding where supported, with a portable fallback. Torch CUDA stages + nearest-square uint8 inputs and finishes interpolation/crop/normalization on + device: batch-256 input storage is 108 MiB versus 432 MiB float32, not total + memory. CPU and standalone ONNX prepare FP32 without requiring Torch. +- [TTA](../deployment/mambo_deploy/augmentation.py) decodes once and preserves + geometry and logit averaging. Virtual edge padding avoids allocating padded + originals; custom transforms retain full-resolution copy isolation. Arbitrary + rotation uses Pillow after the slower NumPy sampler was removed. +- [Transfers](../deployment/mambo_deploy/transfers.py) and + [result completion](../deployment/mambo_deploy/result_worker.py) separate Torch + submission from waiting: a dedicated download stream and bounded result worker + overlap completion with inference. Events protect device-slot reuse and pinned + output lifetime. ONNX retains a synchronous output boundary; I/O binding alone + does not make it asynchronous. +- [Prediction](../deployment/mambo_deploy/predictor.py) reuses hierarchy/vocabulary + plans, avoids repeated top-1 scans and normalized-probability matrices, and + retains public raw logits and optional embeddings. Backend imports resolve at + initialization/first use rather than per hot operation. + +Request and streaming retain different scheduling/collection costs. Raw-logit +outputs, per-view head work and the shared core's embedding-context concurrency +boundary constrain further simplification. Core changes require the separate +feature-branch route. ## Consequential negative results | Attempt | Observation | Durable lesson | | --- | --- | --- | -| Transfer overlap added to the early pipeline | No demonstrated B200 end-to-end gain; input delivery still dominated. | Asynchronous work can remain the limiting producer. Optimize service demands and ownership, not the number of queues. | -| Read workers waited for ordered admission/capacity (`0c6ace2`) | Torch streaming fell from 1,232.4 to 604.8 images/s. Admission-owner correction recovered 1,226.8. | Capacity waits must not occupy IO worker slots; local tests did not establish high-concurrency throughput. | -| NumPy rotation sampled only needed pixels (`0ac0422`) | Native decode improved non-TTA Torch to 1,826.6 images/s, but Torch/ONNX TTA fell 21–24% from the preceding run. | Fewer mathematical pixels can still mean more array passes, gathers and allocations than compiled interpolation. Restore the faster operator. | -| Increasing batch beyond 256 in the resident reference | Only ~4% gain by batch 1,024. | Model batch size did not explain the much larger streaming gap. | - -The final stack combines native decode, restored Pillow rotation, RGB gathers, -reused interpolation scratch, cheaper hierarchy/lazy maps and fused Torch -normalization. The [final measured table](mambo-hpc-evidence.md) reports -Torch/ONNX streaming of 1,975.7/996.5 images/s, and 623.9/396.1 with TTA. -Against the initial full-B200 smoke, gains were approximately 126%/21%/97%/31%. -They are combined-stack improvements, not isolated attribution to each patch. -Peak memory is not uniformly lower; ONNX+TTA reached 7.35 GiB host RSS. - -Matched imported baseline/compact reports agree on ordered sample identities, -bundle/class lists, benchmark settings and runtimes. The final run used a different -GPU UUID but the same full B200 model and 48-vCPU quota. Torch's three streaming -passes ranged 1,795–2,109 images/s; small median changes deserve less weight than -large request/ONNX/TTA gains. The prior preparation-run comparison came from the -operator's summary, not a complete imported archive. +| Early transfer overlap | No demonstrated B200 end-to-end gain; input delivery still dominated. | An asynchronous producer can remain the bottleneck. Improve service demands and ownership before adding queues. | +| IO workers waiting for ordered admission (`0c6ace2`) | Torch streaming fell from 1,232.4 to 604.8 images/s; moving admission to its owner recovered 1,226.8. | Capacity waits must not occupy IO worker slots. Local tests did not establish high-concurrency throughput. | +| NumPy rotation sampling only needed pixels (`0ac0422`) | Non-TTA Torch improved to 1,826.6 images/s with native decode, but Torch/ONNX TTA fell 21–24% from the preceding run. | Extra array passes, gathers and allocations can outweigh fewer sampled pixels. Restore the faster compiled operator. | + +Final gains reflect the combined stack, not isolated patch attribution. Imported +baseline/compact reports agree on sample order, bundle/lists, settings and runtimes; +the final run used another GPU UUID with the same full B200 model and 48-vCPU quota. +Torch's three streaming passes ranged 1,795–2,109 images/s. Small median changes +warrant less weight than large gains. The preparation-run comparison above came +from the operator's summary, not a complete imported archive. ## If performance work resumes -Overlapped steady-state throughput approaches the slowest service stage only when -its resources are sufficiently independent. Decode/postprocessing share CPU/GIL/ -memory bandwidth; transfers and kernels share memory fabrics. Outstanding IO -requests hide latency; they do not supply downstream compute capacity. Use the -actual CPU quota/NUMA placement and per-GPU demand, not host-wide counts. - -The final counters give different next targets: - -- **ONNX:** background input wait was 10.93 s across 12.50 s elapsed without TTA, - and 26.38 s across 30.71 s with TTA. Prioritize CPU preparation throughput and - contention before inference kernels; these are background waits, not GPU-idle - percentages or proof of storage latency. -- **Torch:** measured H2D averaged 2.6 ms/batch versus 52.4 ms transfer-worker elapsed, - which also includes slot availability/dispatch. Preparation-worker time was - 88.8 s across 6.30 s wall time, far from 48 workers continuously active. Examine - host submission, slot reuse and result completion under preparation load before - adding workers. The counters alone do not isolate those causes. - -Torch streaming is 53.9% of the earlier resident throughput; that is a throughput -ratio, not GPU utilization. GPU saturation/general HPC scalability is unproven. -Use the [mocked pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and one -representative timeline to distinguish non-model costs, then the existing +Throughput approaches the slowest stage's capacity only when stage resources are +sufficiently independent. Preparation and postprocessing share CPU/GIL/memory +bandwidth; transfers and kernels share memory fabrics. Outstanding IO hides +latency but supplies no downstream compute. Use actual CPU quota/NUMA placement +and per-GPU demand rather than host-wide CPU counts. + +The final counters identify two investigation priorities: + +- **ONNX preparation and contention:** background input wait was 10.93 s across + 12.50 s elapsed without TTA, and 26.38 s across 30.71 s with TTA. This points to the producer before + inference kernels; background waits are not GPU-idle percentages or proof of + storage latency. +- **Torch submission and buffer reuse under load:** H2D averaged 2.6 ms/batch + versus 52.4 ms transfer-worker elapsed, including slot availability/dispatch. + Preparation consumed 88.8 worker-seconds across 6.30 s wall time, far below 48 + continuously active workers. Inspect submission, slot reuse and result completion + before adding workers; these counters do not isolate their individual costs. + +Final Torch streaming was 53.9% of the earlier resident throughput, **not GPU +utilization**. Saturation and general HPC scalability remain unproven. Use the +[mocked pipeline probe](../dev/releases/mambo_v3/pipeline-probe.md) and one +representative timeline, then the existing [four-variant smoke](../dev/releases/mambo_v3/speed-smoke.md). Preserve ordering, -geometry, partial batches, embeddings, custom transforms, early close and bounded -buffer lifetimes. Do not reopen a quality campaign for unchanged numerical behavior. - -Use maintained backend mechanisms where they simplify responsibility: -[DataLoader](https://docs.pytorch.org/docs/main/data.html) for batch loading, -[torchvision transforms](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations) -for suitable native operations, and -[ORT I/O binding](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning) -with explicit completion ownership. [DALI](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html) -is an optional acceleration reference, not a release dependency. +geometry, partial batches, embeddings, custom transforms, early close and buffer +lifetimes. Unchanged numerical behavior does not require another quality campaign. + +Prefer maintained backend mechanisms when they simplify ownership: +[DataLoader](https://docs.pytorch.org/docs/main/data.html), +[torchvision native operations](https://docs.pytorch.org/vision/stable/transforms.html#performance-considerations) +and [ORT I/O binding](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#performance-tuning). +[DALI](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/pipeline.html) is an +optional acceleration reference, not a dependency. [Triton batching](https://docs.nvidia.com/deeplearning/triton-inference-server/user-guide/docs/user_guide/batcher.html) -combines independent requests; it does not fix an offline producer that cannot feed -the GPU. Preserve a bounded portable path for restricted installations. +combines independent requests; it cannot repair an underfed offline pipeline. +Keep a bounded portable path for restricted installations. ## Retained evidence Final archive SHA-256: `d51ee3105af4e37aa048bb16fed4c94a9cd87dfefd2a574bbe9e924aec7e6947`. -Local reports/archive and `gather-analysis.json` are under -`local-evidence/ucloud-speed-smoke-2026-09-25/`, with final reports in -`b200-full-gather/`. These ignored files are not a remote evidence service. -Earlier local mechanisms/prediction checks remain in `local-evidence/pipeline-review/`, -`compact-preparation/` and `stream-owner/`; they are not B200 timing substitutes. - -No new quality metrics came from the speed smoke. Public timing projections retain -raw repetitions, source hashes and execution scopes in the linked HPC evidence. -Installed release qualification is recorded [separately](../dev/releases/mambo_v3/final-qualification.md). +Ignored local reports and `gather-analysis.json` are under +`local-evidence/ucloud-speed-smoke-2026-09-25/`, final reports in `b200-full-gather/`. +Earlier mechanism checks are in `local-evidence/pipeline-review/`, +`compact-preparation/` and `stream-owner/`; they are not B200 timing substitutes or +remotely available evidence. + +The linked HPC page retains public timing repetitions, hashes and execution scopes. +The smoke produced no new quality metrics; +[installed release qualification](../dev/releases/mambo_v3/final-qualification.md) +is separate evidence. From 6f81b947cdf583b3f4a1f5ea3c01e96476e2d522 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:31:35 +0200 Subject: [PATCH 169/221] docs: tighten historical V2 V3 comparison interpretation --- docs/mambo-release-comparison.md | 138 ++++++++++++------------------- 1 file changed, 54 insertions(+), 84 deletions(-) diff --git a/docs/mambo-release-comparison.md b/docs/mambo-release-comparison.md index 571fcbc..8988533 100644 --- a/docs/mambo-release-comparison.md +++ b/docs/mambo-release-comparison.md @@ -1,24 +1,19 @@ # MAMBO_v2 → v3: real-world deployment comparison -The v3 figures below preserve the **original FP32 reference pipeline**. The -[accelerated-default comparison](mambo-accelerated-deployment.md) adds the updated -PyTorch FP16 / ONNX TF32 results and the complete-pipeline speed improvements. - -This compares the models and inference pipelines used by the two releases on the -same **58,640 Flemming images** and the same laptop. **Northern Europe is the lead -preset for Flemming**; Europe and global show how the result changes with a broader -candidate vocabulary. V3 is measured through both its native PyTorch and standard -ONNX deployment paths. +Historical comparison of V2 and the **original V3 FP32 pipeline** on the same +**58,640 Flemming images** and laptop. Northern Europe leads; Europe and global +show the effect of broader vocabularies. V3 includes PyTorch and standard ONNX. +The [acceleration study](mambo-accelerated-deployment.md) records subsequent +FP16/TF32 improvements; use the [deployment guide](../deployment/README.md#release-comparison) +for current adoption comparisons. ## Prediction quality ![Species, genus and family accuracy, plus species macro-F1 for all three lists](assets/mambo-release-quality.svg) -The comparison leads with **macro metrics**: each represented class has equal -weight. Northern-Europe macro species accuracy rises from **68.52% to 71.24%**, -while macro-F1 falls slightly from **0.2575 to 0.2545**. Europe macro accuracy also -improves. Global macro accuracy improves slightly even though micro accuracy falls, -so neither averaging policy alone describes the whole trade-off. +Macro metrics weight classes equally; micro accuracy weights images equally. +Northern-Europe macro accuracy improves while macro-F1 falls slightly. Global +macro accuracy improves despite lower micro accuracy: both views matter. | Preset | v2 macro accuracy | v3 macro accuracy | v2 macro-F1 | v3 macro-F1 | v2 micro accuracy | v3 micro accuracy | |---|---:|---:|---:|---:|---:|---:| @@ -26,19 +21,17 @@ so neither averaging policy alone describes the whole trade-off. | Europe | 66.04% | 69.06% | 0.2000 | 0.1993 | 66.96% | 68.95% | | Global | 57.21% | 58.03% | 0.0899 | 0.0971 | 59.36% | 58.43% | -The expanded baseline includes **macro accuracy, precision, recall and F1; micro -accuracy; Theil U; and prediction coverage** for every preset, all three ranks and -both all-truth and known-truth populations. The [complete CSV](assets/mambo-release-metrics.csv) -contains 48 rows / 336 scores, including updated European lists. These values are -also retained in the compact chart JSON, not just selected for plotting. +The [complete CSV](assets/mambo-release-metrics.csv) retains 48 rows / 336 scores: +macro accuracy, precision, recall and F1, micro accuracy, Theil U and coverage, +at all three ranks, both truth populations and including updated European lists. +The chart JSON also retains these complete results. ![Six species metrics over all Flemming truth](assets/mambo-release-species-all.svg) ![Six species metrics restricted to known truth](assets/mambo-release-species-known.svg) -The primary comparison uses identical legacy lists in both releases. Every -predictive metric is computed by pinned `mini_metrics` at commit -`70cc69adc05362863439277048e06386c1f885e1`; the chart extracts these fields: +Both releases use identical legacy lists. Predictive metrics come from +`mini_metrics` commit `70cc69adc05362863439277048e06386c1f885e1`: | Display | `metrics.json` source | Averaging and population | |---|---|---| @@ -47,36 +40,26 @@ predictive metric is computed by pinned `mini_metrics` at commit | Species macro-F1 | `all.f1["0"]` | Equal weight over the union of true and predicted species | | Known-truth accuracy | `known.micro_accuracy[rank]` | Micro, restricted to truth in the active preset vocabulary | -All calls use `threshold=0`, `optimal=False`, `simple=True`, -`hierarchical=False`; the main chart uses `known_only=False`. Every image receives -a prediction; no threshold is fitted. The class list limits predictions, **not the -evaluation population**. All 522 Flemming species remain in the main results, -including 8,042 images from 16 species outside the vocabulary. The known-only -species denominator is 50,598 images from 506 species for every compared list. -Known membership is determined separately at each taxonomic rank. - -The plain `accuracy` field in this mini_metrics revision is **macro** accuracy; -we explicitly extract both `accuracy` and `micro_accuracy`. Known-only metrics -are retained in the metric files. The original direct CSV accuracy calculation -has been replaced by mini_metrics; recomputation leaves the reported values unchanged. -Macro precision averages predicted classes; macro recall averages truth classes. -At threshold zero, macro accuracy equals macro recall. Theil U is the pinned -package's information-based association score and is not interchangeable with accuracy. - -Macro-F1 includes species predicted despite having no ground-truth images, but -excludes species with neither truth nor predictions. Thus its class denominator can -change between pipelines: northern Europe has 1,221 active classes for v2 and 1,308 -for v3, versus 522 ground-truth species. It is not a mean over just the 506 known -truth species, nor over every species in the preset. These results use the pinned -metric policy; lists and thresholds were not tuned to Flemming. +Calls use `threshold=0`, `optimal=False`, `simple=True`, `hierarchical=False`; +the main chart uses `known_only=False`. No predictions are rejected or thresholds +fitted. Lists limit predictions, **not evaluation truth**: all 522 species remain, +including 8,042 images from 16 species outside the vocabulary. Known-only species +results retain 50,598 images from 506 species for each list; membership is checked +separately at genus and family level. Lists were not tuned to Flemming. + +Macro precision averages predicted classes, recall averages truth classes, and +F1 averages their union. Predicted-only species therefore count in F1, whereas +classes with neither truth nor predictions do not: northern Europe has 1,221 +active classes for V2 and 1,308 for V3, rather than just the 506 known species or +every preset species. At threshold zero, macro accuracy equals macro recall. +Theil U is an information-based association score, not accuracy. ## Inference speed -The unadapted v2 CPU API failed here with `expected scalar type BFloat16 but found -Float`. Its CPU bars therefore show an explicitly labelled caller-side adapter: -`predictor.preproc = lambda x: original_preproc(x).float()`. It preserves the -preprocessed values while matching the model's input dtype. V2 GPU and all quality -measurements use the original published path unchanged. +V2's CPU API failed with `expected scalar type BFloat16 but found Float`. +CPU bars use the value-preserving caller adaptation +`predictor.preproc = lambda x: original_preproc(x).float()`. +V2 GPU and quality measurements use the unchanged published path. ![CPU and GPU throughput by model pipeline and region](assets/mambo-release-speed.svg) @@ -88,24 +71,18 @@ For northern Europe, the measured medians are: | v3 PyTorch | 6.74 | 27.1 | 46.6 | 44.5 | | v3 ONNX | 9.64 | 30.4 | 42.8 | 42.4 | -All speed columns and panels use **images per second; higher is better**. +All speeds are **images per second; higher is better**. V3 improves CPU throughput; +V2 leads GPU batches 1 and 32 in this historical FP32 comparison. -V3 substantially improves CPU inference. V2 retains lower single-image GPU latency -and higher batch-32 throughput; batch-8 throughput is much closer. The released -resolution, backbone and precision choices contribute to these practical trade-offs. - -Measurements include image decoding, preprocessing, classification and completed -CPU results. Each configuration has three fresh-process trials on the same seeded -image bank. Whiskers show the range of trial medians. The compact source data also -includes CPU batch-8 results and timings for the updated v3 lists. +Timings include decoding, preparation, classification and completed CPU results. +Three fresh-process trials use the same seeded image bank; whiskers span trial +medians. Source data also retains CPU batch 8 and updated-list timings. ### Why v3 throughput plateaus -The adapter sends each batch as one NCHW tensor to the backend; the benchmark sets -its batch limit to 32. It does not silently split batches into single-image calls. -However, it decodes and preprocesses each image serially on CPU, then runs the -model, with no CPU/GPU overlap. The existing three-trial northern-Europe timings -separate these boundaries: +This historical adapter passed whole NCHW batches, up to 32, but decoded and +prepared images serially before inference. Three-trial northern-Europe timings +separate preparation from backend execution: | Backend | Batch | CPU preparation, ms/batch | Prepared backend, ms/batch | End-to-end, images/s | |---|---:|---:|---:|---:| @@ -116,11 +93,10 @@ separate these boundaries: | ONNX | 8 | 134.5 | 50.6 | 42.8 | | ONNX | 32 | 559.4 | 180.6 | 42.4 | -These are separately timed medians, not additive profiler spans. Targeted profiling -and controlled interventions now identify the causes: non-contiguous, partly -float64 CPU interpolation, plus the FP32 backbone's large-batch throughput plateau. -The [batch-scaling diagnosis](mambo-batch-scaling.md) includes exact shape checks, -CUDA/ONNX placement evidence, pixel-preserving interventions and the next fixes. +These separately timed medians are not additive. The +[batch-scaling diagnosis](mambo-batch-scaling.md) retains shape/provider checks and +controlled interventions identifying non-contiguous, partly float64 interpolation +and strict FP32 execution. The linked acceleration study measures the resulting fixes. ## Memory and startup @@ -138,27 +114,21 @@ Native GPU allocator peaks during the batch sweep are: | v3 PyTorch | 865 MiB | 1,348 MiB | | v3 ONNX | Not measured comparably | Not measured comparably | -These native allocator counters exclude CUDA allocations outside PyTorch. ONNX -device snapshots are not comparable allocator peaks and are not presented as such. - -Host RSS includes model loading and the full batch sweep. Startup uses cached local -files and includes predictor construction, classifier initialization and the first -completed prediction; process launch and explicit runtime setup are excluded. -Keep a predictor alive across requests to amortize loading. CPU sweeps use batches -1/8; GPU sweeps add 32. RSS is host memory, not GPU VRAM. +GPU counters exclude allocations outside PyTorch; ONNX snapshots are not comparable +allocator peaks. Host RSS covers loading and the full sweep (CPU batches 1/8; +GPU also 32), not GPU VRAM. Startup uses cached assets and includes construction, +classifier initialization and the first completed prediction, excluding process +launch and explicit runtime setup. Reuse the predictor to amortize this cost. ## Updated v3 European lists ![Accuracy changes from legacy to updated European presets](assets/mambo-release-preset-delta.svg) -Updated northern Europe adds 222 candidate species, and updated Europe adds 72, -with no removals. Macro species accuracy changes from **71.24% to 70.49%** for -northern Europe and **69.06% to 68.88%** for Europe. Their micro species accuracies are 70.32% and 68.81%, compared -with 70.79% and 68.95% for the legacy lists. These are small costs for broader -occurrence coverage. Species macro-F1 also changes from **0.2545 to 0.2367** for -northern Europe, and **0.1993 to 0.1975** for Europe under the pinned policy. -The [preset catalogue](model-presets.md) explains geographic -scope and construction; select a preset for where it will be used. +Updated northern Europe adds 222 species and Europe adds 72, with no removals. +Their macro accuracy becomes **70.49% / 68.88%**, micro accuracy **70.32% / 68.81%** +and macro-F1 **0.2367 / 0.1975**, versus the legacy values above. Broader occurrence +eligibility costs some measured Flemming performance. The +[preset catalogue](model-presets.md) defines geographic scope and construction. ## Reproduce and interpret From f405df6dcddb59673d26092837b8266f66a6bee6 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:34:46 +0200 Subject: [PATCH 170/221] test: consolidate paired quality evaluation coverage --- .../test_benchmark_dataset_inference.py | 13 +---------- tests/benchmarks/test_benchmark_quality.py | 22 +++++++++---------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/tests/benchmarks/test_benchmark_dataset_inference.py b/tests/benchmarks/test_benchmark_dataset_inference.py index 9c925fd..11df173 100644 --- a/tests/benchmarks/test_benchmark_dataset_inference.py +++ b/tests/benchmarks/test_benchmark_dataset_inference.py @@ -88,6 +88,7 @@ def test_pair_pipeline_runs_real_children_and_preserves_evidence(example, tmp_pa assert report["stages"][0]["command"][0] == sys.executable assert all(level["prediction_changes"] == 0 for level in report["levels"]) assert all(value == 0 for level in report["levels"] for value in level["candidate_minus_baseline"].values()) + assert all(v == pytest.approx(1) for levels in report["models"]["candidate"]["metrics"].values() for v in levels.values()) assert (output / "candidate/scores-00001.npz").is_file() assert "Theil U delta" in (output / "summary.md").read_text() with pytest.raises(FileExistsError): @@ -213,18 +214,6 @@ def test_bundle_rejects_different_labels(example, tmp_path): pair_bundle(baseline, bundle) -def test_cpu_inference_to_real_mini_metrics(example, tmp_path): - pytest.importorskip("onnxruntime") - pytest.importorskip("mini_metrics") - from dev.benchmarks.inference.quality_compare import compare - - model, manifest, _ = example - collect(model, manifest, tmp_path / "baseline") - collect(model, manifest, tmp_path / "candidate", baseline_bundle=tmp_path / "baseline/evaluation.json") - result = compare(tmp_path / "candidate/comparison.json", tmp_path / "metrics") - assert all(v == pytest.approx(1) for levels in result["models"]["candidate"]["metrics"].values() for v in levels.values()) - - def test_cpu_collection_does_not_import_training_or_gpu_packages(example, tmp_path): pytest.importorskip("onnxruntime") model, manifest, _ = example diff --git a/tests/benchmarks/test_benchmark_quality.py b/tests/benchmarks/test_benchmark_quality.py index 927b16a..5d0dfc6 100644 --- a/tests/benchmarks/test_benchmark_quality.py +++ b/tests/benchmarks/test_benchmark_quality.py @@ -6,6 +6,13 @@ from dev.benchmarks.inference.quality_compare import COLUMNS, METRICS, compare, read_manifest, read_predictions +def write_predictions(path, rows): + with path.open("w", newline="") as stream: + writer = csv.DictWriter(stream, fieldnames=COLUMNS) + writer.writeheader() + writer.writerows(rows) + + @pytest.fixture def example(tmp_path): classes = [["001", "1"], ["alpha", "beta"]] @@ -40,10 +47,7 @@ def example(tmp_path): ) if mode == "candidate": rows.reverse() - with path.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(path, rows) manifest = tmp_path / "manifest.json" manifest.write_text(json.dumps(metadata)) return manifest, metadata @@ -84,10 +88,7 @@ def test_predictions_reject_mismatched_samples_and_policy(example, kind): rows[0]["confidence"] = "nan" else: artifact["sha256"] = "wrong" - with source.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(source, rows) with pytest.raises(ValueError): read_predictions(source, artifact, metadata) @@ -142,10 +143,7 @@ def test_undefined_theil_u_is_explicit_null_not_invalid_json(example, tmp_path): source = path.parent / metadata[mode]["path"] with source.open() as stream: rows = [r for r in csv.DictReader(stream) if r["instance_id"] == "0"] - with source.open("w", newline="") as stream: - writer = csv.DictWriter(stream, fieldnames=COLUMNS) - writer.writeheader() - writer.writerows(rows) + write_predictions(source, rows) report = compare(path, tmp_path / "undefined") assert report["models"]["baseline"]["metrics"]["theilU"]["0"] is None assert report["levels"][0]["candidate_minus_baseline"]["theilU"] is None From 6d51524f13bb2f3e14513cefd75036c85b68deea Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:37:53 +0200 Subject: [PATCH 171/221] test: assert resource contracts without incidental defaults --- tests/benchmarks/test_benchmark_calibration.py | 2 +- tests/benchmarks/test_benchmark_dataset_inference.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/benchmarks/test_benchmark_calibration.py b/tests/benchmarks/test_benchmark_calibration.py index 408d12f..58c7b46 100644 --- a/tests/benchmarks/test_benchmark_calibration.py +++ b/tests/benchmarks/test_benchmark_calibration.py @@ -131,7 +131,7 @@ def infer(source, target, *args, **kwargs): ) assert report["status"] == "passed" assert report == json.loads((output / "report.json").read_text()) - assert sessions == [(2, 1), (2, 1)] + assert set(sessions) == {(2, 1)} assert inference_paths and all(output in p.parents for p in inference_paths) assert {p.name: p.read_bytes() for p in model.parent.iterdir()} == original assert [b["sample_ids"] for b in report["batches"]] == [b["sample_ids"] for b in metadata["batches"]] diff --git a/tests/benchmarks/test_benchmark_dataset_inference.py b/tests/benchmarks/test_benchmark_dataset_inference.py index 11df173..a931a96 100644 --- a/tests/benchmarks/test_benchmark_dataset_inference.py +++ b/tests/benchmarks/test_benchmark_dataset_inference.py @@ -122,9 +122,10 @@ def test_cpu_deployment_composes_quality_placement_and_alternating_trials(exampl pytest.importorskip("mini_metrics") model, manifest, _ = example output = tmp_path / "deployment" - report = evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, trials=2, warmup=1, repeats=2, required_ops=["Add"]) + settings = {"threads": 2, "trials": 2, "warmup": 1, "repeats": 2} + report = evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, **settings, required_ops=["Add"]) assert report["status"] == "evaluated" - assert report["settings"] == {"threads": 1, "trials": 2, "warmup": 1, "repeats": 2} + assert report["settings"] == settings archived = archive(output / "report.json", tmp_path / "history", "cpu", "a" * 40, "CPU integration fixture") assert json.loads(archived.read_text())["comparison"]["requested_settings"] == report["settings"] assert [p["order"] for p in report["pairs"]] == [["baseline", "candidate"], ["candidate", "baseline"]] @@ -133,7 +134,8 @@ def test_cpu_deployment_composes_quality_placement_and_alternating_trials(exampl assert all(level["prediction_changes"] == 0 for level in report["quality"]["levels"]) assert any(op["op"] == "Add" for op in report["execution"]["candidate"]) summary = (output / "summary.md").read_text() - assert "Warm latency ratio" in summary and "Theil U delta" in summary + quality_summary = (output / "quality/summary.md").read_text() + assert quality_summary.strip() and quality_summary in summary with pytest.raises(FileExistsError): evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output) @@ -147,7 +149,6 @@ def test_cpu_deployment_missing_required_operation_stops_before_resource_trials( evaluate_cpu(model, model, manifest, tmp_path / "batch-0.npz", output, required_ops=["QLinearConv"]) report = json.loads((output / "report.json").read_text()) assert report["status"] == "failed" and report["phase"] == "placement" - assert report["settings"] == {"threads": 1, "trials": 3, "warmup": 3, "repeats": 31} assert report["pairs"] == [] and not list(output.glob("trial-*")) assert report["stages"][-1]["status"] == "failed" assert (output / "quality/summary.md").exists() From e21ce2975589f2c20557e19e6271ce042851419d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:40:22 +0200 Subject: [PATCH 172/221] test: scope ONNX dependency skips to model fixtures --- tests/benchmarks/test_benchmark_onnx.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/benchmarks/test_benchmark_onnx.py b/tests/benchmarks/test_benchmark_onnx.py index 25a1abd..ae0b4dc 100644 --- a/tests/benchmarks/test_benchmark_onnx.py +++ b/tests/benchmarks/test_benchmark_onnx.py @@ -7,12 +7,11 @@ from dev.benchmarks.inference.onnx_inference import require_operations, run -onnx = pytest.importorskip("onnx") -pytest.importorskip("onnxruntime") - @pytest.fixture def model_and_inputs(tmp_path): + onnx = pytest.importorskip("onnx") + pytest.importorskip("onnxruntime") graph = onnx.helper.make_graph( [ onnx.helper.make_node("MatMul", ["images", "weight"], ["raw_scores"]), @@ -150,7 +149,7 @@ def test_isolated_cpu_memory_probe_records_measurement_or_failure(model_and_inpu assert len(report["seconds"]) == 2 and report["median_seconds"] > 0 assert len(report["model_files"]) == 2 snapshots = list(report["memory"].values()) - assert len(snapshots) == 7 + assert {"before_runtime_import", "after_session", "after_measurement"} <= report["memory"].keys() assert all(s["resident_bytes"] > 0 and s["peak_resident_bytes"] > 0 and s["swap_bytes"] >= 0 for s in snapshots) peaks = [s["peak_resident_bytes"] for s in snapshots] assert peaks == sorted(peaks) From 22509e1638717d0899375e9abc13cdeaf7e6114b Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:43:55 +0200 Subject: [PATCH 173/221] test: share TensorRT timing and memory engine fixture --- tests/benchmarks/conftest.py | 33 +++++++++++++++++++ .../test_benchmark_tensorrt_memory.py | 27 ++------------- .../test_benchmark_tensorrt_pair.py | 28 ++-------------- 3 files changed, 37 insertions(+), 51 deletions(-) create mode 100644 tests/benchmarks/conftest.py diff --git a/tests/benchmarks/conftest.py b/tests/benchmarks/conftest.py new file mode 100644 index 0000000..e05bb41 --- /dev/null +++ b/tests/benchmarks/conftest.py @@ -0,0 +1,33 @@ +import os + +import numpy as np +import pytest + + +@pytest.fixture +def tensorrt_add_engine(tmp_path): + """Small shared engine for opt-in timing and memory tests.""" + if os.environ.get("RUN_CUDA_TESTS") != "1": + pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") + pytest.importorskip("tensorrt") + import torch + + assert torch.cuda.is_available(), "CUDA requested but unavailable" + onnx = pytest.importorskip("onnx") + from dev.benchmarks.inference.tensorrt_build import build + + graph = onnx.helper.make_graph( + [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], + "two-input", + [ + onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), + onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), + ], + [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], + ) + model, inputs = tmp_path / "model.onnx", tmp_path / "inputs.npz" + onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) + x, offset = np.arange(4, dtype=np.float32).reshape(2, 2), np.array([0.5, -0.5], dtype=np.float32) + np.savez(inputs, x=x, offset=offset) + build(model, inputs, tmp_path / "build", optimization=0) + return tmp_path / "build/model.engine", inputs, x, offset diff --git a/tests/benchmarks/test_benchmark_tensorrt_memory.py b/tests/benchmarks/test_benchmark_tensorrt_memory.py index 30eb7bf..caeca1a 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_memory.py +++ b/tests/benchmarks/test_benchmark_tensorrt_memory.py @@ -1,5 +1,4 @@ import json -import os import sys import numpy as np @@ -27,30 +26,8 @@ def test_invalid_settings_fail_before_output_creation(tmp_path, settings): @pytest.mark.parametrize("pinned", [False, True]) -def test_real_engine_memory_and_retained_failure(tmp_path, pinned): - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") - pytest.importorskip("tensorrt") - onnx = pytest.importorskip("onnx") - from dev.benchmarks.inference.tensorrt_build import build - - graph = onnx.helper.make_graph( - [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], - "two-input", - [ - onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), - onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), - ], - [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], - ) - model = tmp_path / "model.onnx" - onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) - inputs = tmp_path / "inputs.npz" - x = np.arange(4, dtype=np.float32).reshape(2, 2) - offset = np.array([0.5, -0.5], dtype=np.float32) - np.savez(inputs, x=x, offset=offset) - build(model, inputs, tmp_path / "build", optimization=0) - engine = tmp_path / "build/model.engine" +def test_real_engine_memory_and_retained_failure(tmp_path, pinned, tensorrt_add_engine): + engine, inputs, x, offset = tensorrt_add_engine result = measure(engine, inputs, tmp_path / "memory", runs=2, pinned=pinned) assert result["status"] == "passed" assert result == json.loads((tmp_path / "memory/report.json").read_text()) diff --git a/tests/benchmarks/test_benchmark_tensorrt_pair.py b/tests/benchmarks/test_benchmark_tensorrt_pair.py index 7cc00c5..ad749cf 100644 --- a/tests/benchmarks/test_benchmark_tensorrt_pair.py +++ b/tests/benchmarks/test_benchmark_tensorrt_pair.py @@ -1,5 +1,4 @@ import json -import os import numpy as np import pytest @@ -50,31 +49,8 @@ def execute(_): @pytest.mark.parametrize("pinned", [False, True]) -def test_real_engine_pair_preserves_named_outputs_and_failures(tmp_path, pinned): - if os.environ.get("RUN_CUDA_TESTS") != "1": - pytest.skip("Set RUN_CUDA_TESTS=1 in an explicitly prepared GPU environment") - pytest.importorskip("tensorrt") - import torch - - assert torch.cuda.is_available(), "CUDA requested but unavailable" - onnx = pytest.importorskip("onnx") - from dev.benchmarks.inference.tensorrt_build import build - - graph = onnx.helper.make_graph( - [onnx.helper.make_node("Add", ["x", "offset"], ["scores"])], - "two-input", - [ - onnx.helper.make_tensor_value_info("x", onnx.TensorProto.FLOAT, [2, 2]), - onnx.helper.make_tensor_value_info("offset", onnx.TensorProto.FLOAT, [2]), - ], - [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.FLOAT, [2, 2])], - ) - model, inputs = tmp_path / "model.onnx", tmp_path / "inputs.npz" - onnx.save(onnx.helper.make_model(graph, opset_imports=[onnx.helper.make_opsetid("", 18)], ir_version=10), model) - x, offset = np.arange(4, dtype=np.float32).reshape(2, 2), np.array([0.5, -0.5], dtype=np.float32) - np.savez(inputs, x=x, offset=offset) - build(model, inputs, tmp_path / "build", optimization=0) - engine = tmp_path / "build/model.engine" +def test_real_engine_pair_preserves_named_outputs_and_failures(tmp_path, pinned, tensorrt_add_engine): + engine, inputs, x, offset = tensorrt_add_engine output = tmp_path / "pair" report = benchmark(engine, engine, inputs, output, warmup=1, repeats=3, pinned=pinned) assert report["status"] == "passed" and len(report["trials"]) == 3 From 7aa4bb91f218719ba5ada3fa675f9d2b2df91848 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:46:43 +0200 Subject: [PATCH 174/221] test: group regional reconstruction with preset contracts --- tests/releases/test_mambo_construction.py | 39 ------------------ tests/releases/test_mambo_presets.py | 50 +++++++++++++++++++---- 2 files changed, 42 insertions(+), 47 deletions(-) delete mode 100644 tests/releases/test_mambo_construction.py diff --git a/tests/releases/test_mambo_construction.py b/tests/releases/test_mambo_construction.py deleted file mode 100644 index 7cb2b22..0000000 --- a/tests/releases/test_mambo_construction.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Regional selection must preserve row counts and the source geography field.""" - -import pytest - -from dev.releases.mambo_v3.reconstruct_presets import membership, region_counts - -pa = pytest.importorskip("pyarrow") - - -def test_continent_is_not_inferred_from_country_and_threshold_is_strict(): - table = pa.table( - { - "speciesKey": ["continental"] * 26 + ["boundary"] * 25 + ["island"] * 30, - "countryCode": ["ES"] * 81, - "continent": ["EUROPE"] * 51 + ["AFRICA"] * 30, - } - ) - counts = region_counts(table, "continent", ["EUROPE"]) - assert counts == {"continental": 26, "boundary": 25} - assert membership(counts, 25) == {"continental"} - assert membership(region_counts(table, "countryCode", ["ES"]), 25) == {"continental", "island"} - - -def test_country_union_counts_rows_across_splits_without_deduplication(): - table = pa.table( - { - "speciesKey": ["shared", "shared", "shared", "outside"], - "countryCode": ["DE", "NL", "DE", "GB"], - "set": ["0", "1", "1", "0"], - "gbifID": ["same", "other", "same", "third"], - } - ) - assert region_counts(table, "countryCode", ["DE", "NL"]) == {"shared": 3} - - -def test_missing_species_identity_fails(): - table = pa.table({"speciesKey": pa.array([None], type=pa.string()), "countryCode": ["DE"]}) - with pytest.raises(ValueError, match="null species"): - region_counts(table, "countryCode", ["DE"]) diff --git a/tests/releases/test_mambo_presets.py b/tests/releases/test_mambo_presets.py index ff8f80e..ef42563 100644 --- a/tests/releases/test_mambo_presets.py +++ b/tests/releases/test_mambo_presets.py @@ -1,4 +1,4 @@ -"""Behavioral contracts for deliberately overlapping deployment regions.""" +"""Legacy reconstruction and deliberately overlapping deployment region contracts.""" import tomllib @@ -6,27 +6,61 @@ from dev.releases.mambo_v3.audit import HERE from dev.releases.mambo_v3.build_presets import ordered_membership, select_region +from dev.releases.mambo_v3.reconstruct_presets import membership, region_counts pa = pytest.importorskip("pyarrow") -RULES = tomllib.loads((HERE / "preset-definitions.toml").read_text())["presets"] +DEFINITIONS = tomllib.loads((HERE / "preset-definitions.toml").read_text()) +RULES = DEFINITIONS["presets"] + + +def test_continent_is_not_inferred_from_country_and_threshold_is_strict(): + table = pa.table( + { + "speciesKey": ["continental"] * 26 + ["boundary"] * 25 + ["island"] * 30, + "countryCode": ["ES"] * 81, + "continent": ["EUROPE"] * 51 + ["AFRICA"] * 30, + } + ) + counts = region_counts(table, "continent", ["EUROPE"]) + assert counts == {"continental": 26, "boundary": 25} + assert membership(counts, 25) == {"continental"} + assert membership(region_counts(table, "countryCode", ["ES"]), 25) == {"continental", "island"} + + +def test_country_union_counts_rows_across_splits_without_deduplication(): + table = pa.table( + { + "speciesKey": ["shared", "shared", "shared", "outside"], + "countryCode": ["DE", "NL", "DE", "GB"], + "set": ["0", "1", "1", "0"], + "gbifID": ["same", "other", "same", "third"], + } + ) + assert region_counts(table, "countryCode", ["DE", "NL"]) == {"shared": 3} + + +def test_missing_species_identity_fails(): + table = pa.table({"speciesKey": pa.array([None], type=pa.string()), "countryCode": ["DE"]}) + with pytest.raises(ValueError, match="null species"): + region_counts(table, "countryCode", ["DE"]) @pytest.mark.parametrize("legacy", ["europe", "north_europe"]) def test_updated_european_lists_preserve_geography_and_legacy_membership(legacy): - definitions = tomllib.loads((HERE / "preset-definitions.toml").read_text()) updated = f"{legacy}_v3" descriptive = {"label", "scope", "minimum_regional_rows", "minimum_global_rows"} assert {k: v for k, v in RULES[legacy].items() if k not in descriptive} == { k: v for k, v in RULES[updated].items() if k not in descriptive } - assert RULES[updated].get("minimum_regional_rows", definitions["minimum_regional_rows"]) == 3 - assert RULES[updated].get("minimum_global_rows", definitions["minimum_global_rows"]) == 25 + assert RULES[updated].get("minimum_regional_rows", DEFINITIONS["minimum_regional_rows"]) == 3 + assert RULES[updated].get("minimum_global_rows", DEFINITIONS["minimum_global_rows"]) == 25 old = (HERE / "presets" / f"{legacy}.classes").read_text().splitlines() new = (HERE / "presets" / f"{updated}.classes").read_text().splitlines() - assert set(old) < set(new) - assert [label for label in new if label in set(old)] == old + old_members = set(old) + assert old_members < set(new) + assert [label for label in new if label in old_members] == old changes = tomllib.loads((HERE / "preset-updates.toml").read_text())["updates"][updated] - assert changes["added"] == [label for label in new if label not in set(old)] + assert changes["added"] == [label for label in new if label not in old_members] assert changes["removed"] == [] From 8ebe88a11c7b9b6a93b373f49605543df4cb6c4e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:55:27 +0200 Subject: [PATCH 175/221] docs: clarify research experiment workflow --- publication/experiments/README.md | 95 ++++++-------------- publication/experiments/config.template.yaml | 2 +- 2 files changed, 30 insertions(+), 67 deletions(-) diff --git a/publication/experiments/README.md b/publication/experiments/README.md index 8651c37..5824f13 100644 --- a/publication/experiments/README.md +++ b/publication/experiments/README.md @@ -1,77 +1,40 @@ -# Experiments +# Research experiments -## Configuration +## Generate a SLURM matrix -To configure and orchestrate an experiment with SLURM use the following recipe: +From the repository root, use the [installed environment](../../README.md#local-installation) +and copy [config.template.yaml](config.template.yaml) to a campaign configuration. -1) Create a configuration YAML file (**``**) following the template [config.template.yaml](./config.template.yaml). - - `name`: Set the experiment name (**``**), also used for the SLURM job name. - - `slurm`: Configure SBATCH arguments. - - `experiment`: Configure experiment matrix parameters for `mini_trainer`. - - `eval`: Configure evaluation datasets for specific experiment parameters. - - `args`: Configure fixed (shared) `mini_trainer` parameters used for all experiment matrix parameter combinations. -2) Create the SLURM array script for running the experiment matrix: `uv run orchestrate.py `. - *(Validate the correct construction of the experiment matrix in the file `slurm_jobs//tasks.txt`).* -3) Run the SLURM array script `sbatch slurm_jobs//array.sh`. - -## Notes - -Loose notes for the experiment configuration and matrix. - -## Template train command +| Configuration | Role | +| --- | --- | +| `name`, `output_dir` | Campaign name and shared output base; defaults to `slurm_jobs/`. | +| `stubs`, `slurm` | Installed training/prediction/metric commands and SBATCH settings. | +| `datasets`, `eval` | Dataset paths/indexes and training-to-evaluation dataset mappings. | +| `experiment` | Cartesian product of model, head, dataset and other axes. | +| `args` | `shared`, `train`, `eval` and `metrics` options; dictionaries select values by matrix axis. | ```sh -mt_htrain -i \ - -o \ - --model \ - --head \ - --dtype float16 \ - --batch_size 256 \ - --epochs \ - --warmup_epochs 0.1 \ - --class_weighted \ - --loss_weights [...] \ - --wandb +.venv/bin/python -m publication.experiments.orchestrate campaign.yaml ``` -## Experiment matrix - -- Datasets (2) - - global_lepi - - plantnet300k - -- Models (6) - - efficientnet_v2_[s/m/l] - - ViT_L_16 - - ViT_H_14 - - BioClip2 (finetune only and/or zero-shot) - -- Heads (6) - - Flat - - Bottom-up - - Top-down - - Independent - - Autoregressive (independent) - - Autoregressive (geometrically nested) - -### Table templates - -#### Global Lepidoptera - -| Model | Head | -|-------|------| -| ... | ... | - -#### Flemming eval +Inspect `train_tasks.txt`, `eval_tasks.txt`, `metric_tasks.txt` and `array.sh` in +`//` before submitting `sbatch //array.sh`. +Each array task runs training, prediction from `weights/last.pt`, then metrics; +a failed command stops that task. Results go under the campaign's `results/`. +Generation can resolve taxonomy while constructing evaluation combinations. -OOD test using model trained on Global Lepidoptera +The generated script assumes commands and dataset/output paths are available on +the compute node; it does not install or activate an environment. Use explicit +indexes for external evaluation datasets. Without one, evaluation only supports +the training dataset and reuses its generated `data_index.json`. -| Model | Head | -|-------|------| -| ... | ... | +## Research scope -#### Pl@ntNet300K +Proposed matrix: Global Lepidoptera and Pl@ntNet300K; EfficientNetV2 S/M/L, +ViT-L/16, ViT-H/14 and BioCLIP2 (fine-tuned or zero-shot); flat, bottom-up, +top-down, independent and autoregressive heads (independent or geometrically +nested). Flemming supplies out-of-domain evaluation for Global Lepidoptera. +These are planned comparisons, not recorded results. -| Model | Head | -|-------|------| -| ... | ... | +The separate [prototype-coordinate study](prototype_linearization/README.md) +contains its own reproduction workflow and evidence. diff --git a/publication/experiments/config.template.yaml b/publication/experiments/config.template.yaml index 5d38500..092cb11 100644 --- a/publication/experiments/config.template.yaml +++ b/publication/experiments/config.template.yaml @@ -2,7 +2,7 @@ name: # Optional custom base output directory (e.g., on Gefion persistent shared storage /dcai/projects/...) # Environment variables like $PROJECT, $USER, or $HOME are automatically expanded. -# Defaults to "slurm_jobs" if omitted (/results is appended automatically). +# Defaults to "slurm_jobs"; scripts go in / and results in /results/. # output_dir: /dcai/projects/$PROJECT/mini_trainer/experiments stubs: From 812c4e4bcbe05fdd941b3029ceabb957a36d48b3 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 14:58:26 +0200 Subject: [PATCH 176/221] docs: condense prototype coordinate findings --- docs/prototype-coordinate-study.md | 181 +++++++++++------------------ 1 file changed, 71 insertions(+), 110 deletions(-) diff --git a/docs/prototype-coordinate-study.md b/docs/prototype-coordinate-study.md index b83e319..c6b6b60 100644 --- a/docs/prototype-coordinate-study.md +++ b/docs/prototype-coordinate-study.md @@ -5,19 +5,14 @@ not a change to inference, classifier weights, or the prototype viewer. ## Decision -There is no universal winning “linearization” for this matrix. **Keep the original -weights as the general-purpose representation; offer PCA as task-specific -preprocessing, and full-rank PCA whitening as an optional metric transform.** -A stereographic export is convenient when an explicitly unconstrained spherical -chart and analytic inverse are required, but it did not generally improve the -classical tasks tested here. Its convenience should not be confused with an -empirical downstream advantage. - -The clearest improvement was **PCA before Gaussian naive Bayes**. Selecting the -number of components using validation data raised held-out family macro recall -from 73.89% to 81.00% on average. The three splits selected 256, 768 and 512 -components, respectively. This is evidence for task-specific decorrelation and -regularization, not a guarantee that a particular global dimension is optimal. +**Keep original weights as the general-purpose representation.** PCA helps +Gaussian naive Bayes; full-rank whitening offers a modest neighbour-prediction +improvement. Stereographic coordinates are useful when an unrestricted chart +with an analytic inverse is required, but did not generally improve these tasks. + +Validation-selected PCA raised held-out family macro recall from 73.89% to +81.00%, selecting 256, 768 and 512 components across the three splits. This +supports task-specific preprocessing, not one globally optimal dimension. ## Data and evaluation @@ -71,38 +66,27 @@ the proposed radial-warp idea implemented as a deliberately simple control. ## What the downstream evidence supports -1. **Linear family prediction:** original weights retain 95.40% micro accuracy. - Stereographic coordinates have the highest chart macro recall (80.15%), only - 0.34 percentage points above original weights, while losing micro accuracy. - This small, split-dependent trade-off does not justify declaring them superior. - Aggressive dimensional reduction loses discriminative information. -2. **Gaussian-model classification:** PCA is useful. Fixed 512-component PCA - reaches 81.07% macro recall; validation-selected PCA reaches 81.00%. Merely - applying log/stereographic coordinates leaves macro recall around 74%. - Whitening the PCA coordinates does not materially change Gaussian NB here: - its learned per-coordinate variances already absorb coordinate rescaling. -3. **Genus neighbour prediction:** full-rank whitening gives 79.77% versus 78.88% - for original weights. That modest improvement is a candidate for retrieval - workflows, not evidence that whitening preserves the original metric. Charts - remain around 79%; truncation and the tested kernel features generally lose. -4. **Clustering:** 32-PC mini-batch k-means gives mean held-out family ARI 0.170 - on original weights, 0.178 on log coordinates and 0.183 on stereographic - coordinates. This is a small coarse-clustering improvement, not an overall - winner or a validated species-clustering result. Cluster count is fixed to - the number of eligible families, not selected using test labels. -5. **Reconstruction and neighbourhoods:** original-space PCA at 128 dimensions - reconstructs at about 70° mean angular error; chart-PCA is roughly 78–81°. - Stereographic coordinates preserve about 84% of original ten-neighbour sets, - log coordinates about 89%, and the Lambert radial formula about 92%. - These are approximate coordinates, not geometry-preserving replacements. - -The covariance explains why simply removing a radial constraint does not rescue -low-dimensional PCA. On the first training split, two PCs explain **0.39%** of -variance, 32 explain **5.20%**, 128 explain **17.76%**, and 512 explain **54.42%**. -The information is spread across many dimensions. This does not mean that the -vectors lack useful taxonomic structure: the full-dimensional linear classifier -extracts it very well. A poor two-dimensional PCA picture and useful -high-dimensional linear prediction can coexist. +- **Linear family prediction:** stereographic macro recall exceeds the original + weights by 0.34 percentage points but loses micro accuracy. That small, + split-dependent trade-off does not establish superiority; aggressive dimension + reduction loses discriminative information. +- **Gaussian NB:** PCA helps; charts alone do not. Whitening does not materially + change Gaussian NB here because its learned coordinate variances absorb scaling. +- **Genus neighbours:** full-rank whitening modestly improves prediction by + changing the metric. Truncation and the tested kernel features generally lose. +- **Clustering:** 32-PC mini-batch k-means gives mean held-out family ARI 0.170 for + original weights, 0.178 for log coordinates and 0.183 for stereographic + coordinates. Cluster count is the number of eligible families, not selected + using test labels. This does not establish species-clustering performance. +- **Reconstruction and neighbourhoods:** PCA at 128 dimensions gives about 70° + mean angular reconstruction error in original space versus 78–81° for charts. + Original ten-neighbour overlap is about 84% for stereographic, 89% for log and + 92% for Lambert coordinates; none preserves the original geometry exactly. + +On the first training split, 2, 32, 128 and 512 PCs explain **0.39%, 5.20%, +17.76% and 54.42%** of variance. Information is spread across many dimensions: +a poor two-dimensional PCA view does not rule out useful high-dimensional +linear prediction. ## Principles, simplicity, cost and insertion/inversion @@ -117,74 +101,51 @@ high-dimensional linear prediction can coexist. | Nyström RBF features | Approximate nonlinear kernel feature space for linear tools; 512 training landmarks. | O(md + m²) with dense normalization; approximate learned preimage, no guaranteed inverse. | Five tested kernel widths give no overall advantage here. | | Radial quantile warp | Distribution-specific heuristic; radial normality does not imply multivariate Gaussianity. | O(d) plus quantile lookup; our clamped interpolation loses extreme held-out radii. | No demonstrated gain; do not promote this control into an export default. | -CPU observations on an Intel i7-12800H, with four BLAS threads: mean-anchor charts -fit in about 0.02 s and insert/invert one vector in roughly 11–23 μs. The 40-step -intrinsic-mean estimate takes about 5 s in a dedicated measurement and still has -mean-log residual norm 0.00034; it is not a converged global-mean claim. PCA fitting -ranges from about 0.4 s for this full-covariance solver to 2 s for the separate -randomized 512-component solver. Those timings use different algorithms and are -not a monotonic dimension-scaling comparison. PCA-512 insertion is about 0.2 ms. -Fast PNS-128 takes about 9.4 s including initial reduction and about 1.8 ms per -insertion. The narrow-kernel follow-up takes about 0.5 s including its fitted -preimage and about 1.1–1.2 ms per insertion. These are host-specific observations, -not deployment guarantees or carefully isolated throughput benchmarks. - -The PNS implementation follows the fast approximation in Monem, Dryden & George -(2025, §3.3), with three initializations and a bounded optimizer per subsphere. -All selected optimizer stages reported convergence, and held-out reduced-sphere -inversion passed. This does not certify globally optimal axes or establish how -full 1,279-dimensional PNS would perform. Its cost/state scales quadratically in -dimension, making it a higher-investment option than the demonstrated benefit -currently warrants. A known-small-circle numerical check validates the core -subsphere fit; this is not cross-validation against the authors' R package. - -Kernel widths 0.01, 0.1, 1, 5 and 20 were evaluated. Broad kernels were better; -narrow kernels largely failed to transfer beyond training landmarks. The table -shows γ=0.01 explicitly, not a claim of globally optimized kernels. At the same -512-coordinate count, PCA substantially outperforms this Nyström representation -for the linear family task. Approximate kernel preimages are not exact inverses. +CPU observations (Intel i7-12800H, four BLAS threads): mean-anchor charts fit +in about 0.02 s and insert/invert a vector in 11–23 μs. The 40-step intrinsic-mean +estimate takes about 5 s with residual mean-log norm 0.00034; this does not certify +a global mean. PCA fits take about 0.4 s for the full-covariance solver versus +2 s for randomized 512-component PCA, so these are not dimension-scaling timings. +PCA-512 insertion takes about 0.2 ms; PNS-128 takes 9.4 s to fit including reduction +and 1.8 ms per insertion. The narrow-kernel follow-up takes about 0.5 s including +preimage fitting and 1.1–1.2 ms per insertion. These are host-specific observations, +not isolated throughput benchmarks or deployment guarantees. + +Fast PNS uses Monem, Dryden & George (2025, §3.3), three initializations and a +bounded optimizer per subsphere. Selected stages reported convergence and +held-out reduced-sphere inversion passed; a known-small-circle check validates +the core fit. This does not certify global optima, agreement with the authors' R +package, or full 1,279-dimensional PNS, whose cost/state scales quadratically. + +Kernel widths 0.01, 0.1, 1, 5 and 20 were tested. Broad kernels transferred better; +narrow kernels largely failed beyond training landmarks. The table shows γ=0.01, +not globally optimized kernels. At 512 coordinates, PCA substantially outperformed +Nyström for linear family prediction; kernel preimages remain approximate. ## Recommended next use -- Retain the original matrix for linear classifiers, original angular similarity - and fidelity-sensitive work. -- For Gaussian or diagonal-covariance models, fit PCA on the analysis training - split and select the retained dimension using that task's validation data. - The tested 256–768 range is useful guidance, not a universal fixed setting. -- Consider full-rank whitening for an explicitly changed nearest-neighbour metric. -- Supply a stereographic companion only when consumers need its unrestricted chart - and analytic inverse. Save the anchor, row norms, transform conventions and - numerical error; do not label it a generally improved representation. -- Do not invest in full PNS, custom normalizing flows or autoencoders yet. The - reduced PNS experiment does not earn that escalation. Flows and autoencoders - are untested alternatives, not empirically rejected methods. -- Image embedding insertion, domain shift, calibrated densities and time-series - filtering need task-specific data before making performance claims. The present - evidence answers which approaches help the **available prototype tasks**. +- Fit PCA on analysis training data and choose dimension on validation data; + the observed 256–768 range is guidance, not a fixed default. +- Use whitening only when a changed neighbour metric is intended. A stereographic + companion should retain its anchor, row norms, conventions and numerical error. +- Reduced PNS results do not justify escalating to full PNS or custom flows and + autoencoders; the latter are untested, not empirically rejected. +- Image embeddings, domain shift, calibrated densities and time-series filtering + need their own data. These recommendations concern the available prototype tasks. ## Evidence and references -The [research directory](../publication/experiments/prototype_linearization/README.md) -contains the protocol, source references and executable scripts. The local study -bundle `/tmp/prototype-linearization-study-20260915` originally contained raw per-split results, -split indices, executed source, environment information, a comparison figure and -checksums. No model, dataset or large generated matrices are added to Git. - -Repository consolidation on 2026-09-23 confirmed that this temporary bundle is -no longer present at that path. The results above are retained from the original -study and were not independently reverified during consolidation. Reproducing -them requires the original input matching the recorded checksum and a fresh run -of the four stages; the scripts alone do not archive the raw evidence. - -Numerical checks: three focused tests pass for chart inversion and single-point -insertion, a known small-circle PNS fit with held-out inversion, and the radial -control's endpoint failure. Every benchmark stage completed on the real matrix. -The same comparison is not rerun merely for formatting/documentation edits. - -Foundational sources: - -- [Fletcher et al., 2004: Principal Geodesic Analysis](https://doi.org/10.1109/TMI.2004.831793). -- [Jung, Dryden & Marron, 2012: Analysis of Principal Nested Spheres](https://www.statistics.pitt.edu/sungkyu/papers/Biometrika-2012-Jung-551-68.pdf). -- [Monem, Dryden & George, 2025: Principal Nested Spheres for High-Dimensional Data](https://arxiv.org/html/2511.08398v1). -- [Williams & Seeger, 2000: Nyström approximation](https://proceedings.neurips.cc/paper/2000/file/19de10adbaa1b2ee13f77f679fa1483a-Paper.pdf). -- [Mika et al., 1998: Kernel PCA and the preimage problem](https://proceedings.neurips.cc/paper/1998/hash/226d1f15ecd35f784d2a20c3ecf56d7f-Abstract.html). +The [reproduction guide](../publication/experiments/prototype_linearization/README.md) +owns the protocol, source references and commands. The original local bundle +`/tmp/prototype-linearization-study-20260915` held per-split results, indices, +executed source, environment details, a figure and checksums. It was absent when +checked on 2026-09-23. **The numerical +results above are retained historical findings, not independently reverified +results.** Reproduction requires the checksum-matched input and four fresh stages; +the scripts do not archive the raw evidence. + +The original study recorded completion on the real matrix and three passing +numerical checks: chart inversion/insertion, a small-circle PNS fit with held-out +inversion, and radial endpoint failure. Documentation cleanup does not rerun or +extend that qualification. No model, dataset or large generated matrices are +tracked. From 3139851b5b341d57998dbc66c02d1839cc757998 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:01:40 +0200 Subject: [PATCH 177/221] docs: clarify repeated metric evaluation semantics --- publication/experiments/README.md | 5 +++ .../experiments/statistics/boot_metrics.py | 36 +++++++++++-------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/publication/experiments/README.md b/publication/experiments/README.md index 5824f13..451d179 100644 --- a/publication/experiments/README.md +++ b/publication/experiments/README.md @@ -38,3 +38,8 @@ These are planned comparisons, not recorded results. The separate [prototype-coordinate study](prototype_linearization/README.md) contains its own reproduction workflow and evidence. + +[boot_metrics.py](statistics/boot_metrics.py) repeats seeded `mini_metrics` +threshold calibration/evaluation and writes metrics by seed and rank. Its legacy +name does not imply bootstrap resampling: sampling is delegated to the installed +`mini_metrics`. Record that dependency revision when retaining results. diff --git a/publication/experiments/statistics/boot_metrics.py b/publication/experiments/statistics/boot_metrics.py index 3cbccf7..b4d1168 100644 --- a/publication/experiments/statistics/boot_metrics.py +++ b/publication/experiments/statistics/boot_metrics.py @@ -6,6 +6,8 @@ # ] # /// +"""Repeat seeded mini_metrics calibration/evaluation; no wrapper-level resampling.""" + import random from argparse import ArgumentParser from csv import DictWriter @@ -72,13 +74,13 @@ def main(file: str, dst: str, n: int, seed: int | None = None, combinations: str rng = random.Random(seed) seeds = [rng.getrandbits(64) for _ in range(n)] data = MetricDF.from_source(file) - cfg = {"combinations" : combinations} - results = combine(*(proc_one(data, seed, **cfg) for seed in tqdm(seeds, desc="Computing bootstrap iterations", unit="it"))) + cfg = {"combinations": combinations} + results = combine(*(proc_one(data, seed, **cfg) for seed in tqdm(seeds, desc="Evaluating calibration splits", unit="it"))) write_dict_to_csv(dst, results) def cli(): - parser = ArgumentParser("boot-metrics", description="Compute `mini-metric` bootstrap metrics for uncertainty quantification.") + parser = ArgumentParser("boot-metrics", description="Repeat mini_metrics threshold calibration and report metrics by seed and level.") parser.add_argument( "-i", "-I", @@ -90,10 +92,23 @@ def cli(): help="Input file with predictions and labels following the `mini-metric.MetricDF` specification.", ) parser.add_argument( - "-o", "-O", "--output", "--dst", type=str, required=True, dest="dst", help="Path of the combined bootstrap metric results." + "-o", + "-O", + "--output", + "--dst", + type=str, + required=True, + dest="dst", + help="Output CSV of metrics by evaluation seed and taxonomic level.", ) parser.add_argument( - "-n", "--n", type=int, default=100, required=False, dest="n", help="Number of bootstrap iterations. NB: Can be *VERY* slow!" + "-n", + "--n", + type=int, + default=100, + required=False, + dest="n", + help="Number of seeded evaluations; each recalibrates thresholds (default: 100).", ) parser.add_argument( "-s", @@ -103,11 +118,7 @@ def cli(): type=int, default=None, required=False, - help=( - "Set the global seed for the bootstrap procedure. " - "Each individual bootstrap iteration of calculating " - "the metrics will receive an independent seed set deterministically via the global seed." - ), + help="Global seed used to generate reproducible per-evaluation seeds.", ) parser.add_argument( "-C", @@ -115,10 +126,7 @@ def cli(): type=str, default=None, required=False, - help=( - "Path to a 'combinations' CSV file, which include leaf-to-higher order mappings. " - "Mainly useful if the model (outputs) are flat, but the labels/task is inherently hierarchical." - ), + help="Optional CSV mapping leaf classes to higher taxonomy ranks.", ) return vars(parser.parse_args()) From 14e8fb236c97b47a759a2a5c76d16d1474ee3c6e Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:04:50 +0200 Subject: [PATCH 178/221] fix: remove nonexistent core utility export --- mini_trainer/utils/_core/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mini_trainer/utils/_core/__init__.py b/mini_trainer/utils/_core/__init__.py index 174fec7..14e50ac 100644 --- a/mini_trainer/utils/_core/__init__.py +++ b/mini_trainer/utils/_core/__init__.py @@ -27,7 +27,6 @@ "string_to_device", "string_to_dtype", "make_empty_ndarray", - "get_logger", "setup_logging", "TQDM", "validate_type", From 955bee2d106427eacbd0403b10174ee7dc123765 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:08:04 +0200 Subject: [PATCH 179/221] test: verify complete normalized taxonomy key order --- tests/data/test_parquet.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/data/test_parquet.py b/tests/data/test_parquet.py index c0b417c..3f20653 100644 --- a/tests/data/test_parquet.py +++ b/tests/data/test_parquet.py @@ -16,8 +16,6 @@ def test_combine_dicts(): assert combined["b"] == [2, 4] -def test_get_keys(): - row = {k: str(i) for i, k in enumerate(KCOLUMNS)} - keys = get_keys(row) - assert len(keys) == len(KCOLUMNS) - assert keys[0] == "0" +def test_get_keys_normalizes_ids_in_taxonomic_order(): + row = {k: f" 00{i} " for i, k in reversed(list(enumerate(KCOLUMNS)))} + assert get_keys(row) == [str(i) for i in range(len(KCOLUMNS))] From e8772af8f9cc0534dbb2d12895610f64994934dd Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:11:35 +0200 Subject: [PATCH 180/221] refactor: use taxonomy mappings for membership tracking --- mini_trainer/integrations/gbif.py | 8 +++----- mini_trainer/integrations/parquet.py | 7 ++----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/mini_trainer/integrations/gbif.py b/mini_trainer/integrations/gbif.py index 5864d85..ca5eb76 100644 --- a/mini_trainer/integrations/gbif.py +++ b/mini_trainer/integrations/gbif.py @@ -346,13 +346,11 @@ def cls2idx_from_labels(labels: OrderedDict[str, tuple[str, ...]]): # noqa: D10 raise RuntimeError("Varying hierarchy levels found in image directory structure:", list(sorted(nlvl))) nlvl = list(nlvl)[0] cls2idx: dict[str, dict[str, int]] = {str(lvl): dict() for lvl in range(nlvl)} - classes = {str(lvl): set() for lvl in range(nlvl)} for lab in labels.values(): for lvl, cls in enumerate(lab): - if cls in classes[str(lvl)]: - continue - classes[str(lvl)].add(cls) - cls2idx[str(lvl)][cls] = len(classes[str(lvl)]) - 1 + mapping = cls2idx[str(lvl)] + if cls not in mapping: + mapping[cls] = len(mapping) return cls2idx diff --git a/mini_trainer/integrations/parquet.py b/mini_trainer/integrations/parquet.py index cde255e..6a1fafa 100644 --- a/mini_trainer/integrations/parquet.py +++ b/mini_trainer/integrations/parquet.py @@ -215,14 +215,11 @@ def parquet_to_class_spec_hierarchical( ) cls2idx: dict[str, dict[str, int]] = dict() for level in range(levels): - clss = set() this_cls2idx: dict[str, int] = dict() for _, comb in combs.items(): cls = comb[level] - if cls in clss: - continue - this_cls2idx[cls] = len(clss) - clss.add(cls) + if cls not in this_cls2idx: + this_cls2idx[cls] = len(this_cls2idx) cls2idx[str(level)] = this_cls2idx num_classes = [len(cls2idx[str(i)]) for i in range(len(cls2idx))] return {"cls2idx": cls2idx, "labels": combs, "num_classes": num_classes} From 16407bb6ad050050a0fce2e74c23abdd265a924d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:15:09 +0200 Subject: [PATCH 181/221] docs: clarify hierarchical integration contracts --- mini_trainer/hierarchical/integration.py | 93 ++++++------------------ mini_trainer/hierarchical/loss.py | 11 +-- mini_trainer/hierarchical/metric.py | 6 +- 3 files changed, 26 insertions(+), 84 deletions(-) diff --git a/mini_trainer/hierarchical/integration.py b/mini_trainer/hierarchical/integration.py index 065207c..77d1fe5 100644 --- a/mini_trainer/hierarchical/integration.py +++ b/mini_trainer/hierarchical/integration.py @@ -63,47 +63,17 @@ def parse_class_spec( label_fn: Callable[Concatenate[str, ...], OrderedDict[str, tuple[str, ...]]] = default_labels_from_directory_structure, **kwargs, ) -> dict[str, dict[str, dict[str, int]] | OrderedDict[str, tuple[str, ...]] | list[int]]: - """Construct class specification: - * class index (label string to index mapping) - * hierarchical labels (tuple of label strings leaf->root) - * number of (leaf) classes - from a precalculated class specification or a directory structure. - - If constructed from a directory structure, the hierarchy is constructed based on the names - and structure of the directories containing the training images. - - By default it assumed that labels can be parsed from the image path like: - ``` - image_path = <"[dir]/[root_label]>/[...]/[leaf_label]/[image_filename]"> - label = [<"leaf_label">, ..., <"root_label">] - labels = {<"[root_label]>/[...]/[leaf_label]"> : [<"leaf_label">, ..., <"root_label">] for image in images} - ``` - However, this behaviour can be modified by passing a function to `label_fn` that takes the root - directory containing all training images (and no other images), and computes an ordered dictionary - of all labels for all valid images in the directory, where the key should be the parent directory of images - with a given label. - The labels should be sorted first by the root label and last by the leaf label. - - Args: - path: Path to a precomputed class specification if it exists, otherwise one will be computed. - If path is not None, but doesn't exist yet, the computed class specification - will be stored in path for later use. - levels: If an integer, the hierarchy is truncated to the number of levels specified. - Otherwise all levels computed from ``label_fn`` are used. - dir: Root directory containing all training images (and no other images). - label_fn: A function which computes an ordered dictionary of labels for all images in ``dir``, - where the key should be the name of the directory containing all images which match a label. - **kwargs: Additional arguments passed to ``label_fn``. - - Returns: - (class specification): A dictionary containing information - used for constructing models and dataloaders. Structure: - * "cls2idx": [dict[str, dict[str, int]]] - * [str] <"hierarchy level">: - * [str] <"leaf label">: [int] <"leaf class index"> - * "labels": [OrderedDict[str, tuple[str, ...]]] - * [str] (<"label 1 image directory">) : [tuple[str, ...]] (<"leaf 1 label">, ..., <"root 1 label">) - * "num_classes": [int] + """Load a JSON class specification or build one from directories/Parquet. + + Returns a dictionary with ``cls2idx`` (per-rank label/index maps), ``labels`` (source keys + mapped to leaf-to-root sequences), and ``num_classes`` (per-rank counts). + An existing ``path`` is loaded; a missing one receives the generated JSON. + Loaded labels follow leaf-index order. + + For directories, ``label_fn(dir, levels=levels, **kwargs)`` supplies ordered + labels. Explicit ``levels`` truncates their sequences; Parquet defaults to + three ranks. When loading JSON, truncation restricts labels/index maps but + retains the stored ``num_classes`` list. """ if isinstance(levels, int): assert levels > 0 @@ -112,9 +82,6 @@ def parse_class_spec( if path is None or not os.path.exists(path): if dir is None or not os.path.isdir(dir): if isinstance(dir, str) and dir.endswith(".parquet"): - # TODO: For now we will just assume that there are three levels - # if not specified with parquet, but this should be determined - # automatically as it is in the other code branch! if levels is None: levels = 3 retval = parquet_to_class_spec_hierarchical(dir, levels=levels) @@ -156,28 +123,14 @@ def parse_class_spec( def sparse_masks_from_labels(labels: OrderedDict[str, tuple[str, ...]], cls2idx: dict[int | str, dict[str, int]]): - """Compute 'sparse masks' from labels (e.g. [species, genus, family]) and class indices. - - A sparse mask is an integer vector (1D tensor) with length equal to the number of classes - at some level (e.g. number of species) that maps each class to it's parent class - (e.g. a species to a genus), encoded such that the value in the mask at the index of a class - is the index of it's parent: - ``` - mask[child_idx] = parent_idx - ``` - - Args: - labels: Ordered dictionary of hierarchical labels (tuple of label strings leaf->root). - cls2idx: Dictionary of dictionaries, keys to the outer dictionary are hierarchy levels (integer), - while the nested dictionaries are class label to index mappings for each level in the hierarchy. - - Returns: - List of sparse masks for levels `{0, ..., N-2}` where `N` is the - number of layers in the hierarchy (e.g. 3 if [species, genus, family]). + """Return child-to-parent index tensors for adjacent hierarchy ranks. + + Each ``torch.long`` vector satisfies ``mask[child_idx] = parent_idx``. + Labels run leaf-to-root; ``cls2idx`` maps rank numbers to label/index maps. + Reject conflicting parents, unmapped children and unused top-rank classes. """ cls2idx = {str(k): v for k, v in cls2idx.items()} nlvl = len(cls2idx) - # Initialize masks with "empty" values (-1) masks = [[-1 for _ in range(len(cls2idx[str(lvl)]))] for lvl in range(nlvl - 1)] for lab in labels.values(): idx = [cls2idx[str(lvl)][cls] for lvl, cls in enumerate(lab)] @@ -208,18 +161,18 @@ def sparse_masks_from_labels(labels: OrderedDict[str, tuple[str, ...]], cls2idx: err_msg = f"Found {len(missing)} unused classes in top level: [{', '.join(map(str, missing))}]" raise ValueError(err_msg) - # Return masks converted to long tensors return [torch.tensor(mask, dtype=torch.long) for mask in masks] -class HierarchicalBuilder(BaseBuilder): # noqa: D101 +class HierarchicalBuilder(BaseBuilder): + """Adapt class metadata, parent mappings and losses for hierarchical training.""" + @staticmethod def build_class_spec(*args, path: str | None = None, dir: str | None = None, levels: int | None = None, species: bool = True, **kwargs): - """TODO. + """Return a hierarchical class specification for model and loader setup. - Returns: - (extra_model_kwargs, extra_dataloader_kwargs): - Extra keyword arguments for the model and dataloader building functions. + With ``species=True``, resolve directory labels through GBIF and reject + a custom ``label_fn``. Otherwise use the supplied/default directory parser. """ if species: if "label_fn" in kwargs: @@ -297,7 +250,6 @@ def __init__( super().__init__(model=model, idx2cls=idx2cls, cls2idx=cls2idx, scientific_names=scientific_names, *args, **kwargs) self._levels = None - # --- Overridden Hooks for Hierarchical Operations --- def _cls2idx_to_scientific(self, cls2idx: dict) -> dict: return cls2idx_to_names(cls2idx) @@ -315,7 +267,6 @@ def _get_evaluation_rows(self): for level in range(self._levels): yield i, path, level, labs[level], preds[level], confs[level] - # --- Overridden Base Attribute Extraction --- def _collect_base_attributes( self, paths: list[str], predictions: list[torch.Tensor] | HierarchicalPrediction, labels: list[tuple[str, ...]] | None = None ): diff --git a/mini_trainer/hierarchical/loss.py b/mini_trainer/hierarchical/loss.py index 4213dce..cc68ee2 100644 --- a/mini_trainer/hierarchical/loss.py +++ b/mini_trainer/hierarchical/loss.py @@ -22,15 +22,8 @@ def __init__( # noqa: D107 weights = [1] * self.n_levels self.weights = torch.tensor(weights).to(device=self.device, dtype=self.dtype) - # The adjustment: - # ls(L)=1-(1-ls(0))^(1/(L+1)), ls(0)=k - # is to avoid a situation where the model gives the target probability for the correct leaf class, - # e.g. if ls=0.1, the model predicts P(Correct_0 | Model, Data) = 1 - ls = 0.9, and distributes the remaining - # probability mass to the correct class siblings (i.e. other species in the correct genus), then the model must - # give a higher confidence for the correct parent (child): - # P(Correct_1 | Model, Data) > P(Correct_0 | Model, Data) - # (if it gives any confidence to the sibling classes), meaning that the model is encouraged NOT to give any - # confidence to the sibling classes, which is counter to the point of hierarchical learning + # Smoothing decreases toward the root: ls(i) = 1 - (1 - ls(0))**(1/(i+1)). + # Correct parents receive probability mass from multiple sibling classes. self.label_smoothing = [1 - (1 - label_smoothing) ** (1 / (i + 1)) for i in range(self.n_levels)] kwargs["label_smoothing"] = self.label_smoothing diff --git a/mini_trainer/hierarchical/metric.py b/mini_trainer/hierarchical/metric.py index 5aa72b0..e1bf3ae 100644 --- a/mini_trainer/hierarchical/metric.py +++ b/mini_trainer/hierarchical/metric.py @@ -5,7 +5,7 @@ def rank_error(predictions: list[str | int] | list[tuple[str | int, ...]], labels: list[int | str], progress: bool = False): - """Computes the rank error (LCA distance) between predictions and labels.""" + """Legacy mean rank-match index from GBIF-resolved labels.""" ranks = [] elements = zip(predictions, labels) if progress: @@ -18,7 +18,6 @@ def rank_error(predictions: list[str | int] | list[tuple[str | int, ...]], label if prediction == label: break ranks.append(level) - # return Counter(ranks) return sum(ranks) / len(ranks) @@ -28,8 +27,7 @@ def confusion_matrices( levels: int, progress: bool = False, ): - """TODO.""" - # cf_mats = [] + """Return sorted unique prediction/label hierarchy tuples (legacy name).""" pred_long, lab_long = [[[] for _ in range(levels)] for _ in range(2)] elements = zip(predictions, labels) if progress: From 2d9149cac33002b95d77ef8bd8f2957420f9af7d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:20:29 +0200 Subject: [PATCH 182/221] refactor: remove unused hierarchy cache scaffolding --- mini_trainer/hierarchical/model.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mini_trainer/hierarchical/model.py b/mini_trainer/hierarchical/model.py index 0a63b88..02183b8 100644 --- a/mini_trainer/hierarchical/model.py +++ b/mini_trainer/hierarchical/model.py @@ -19,12 +19,12 @@ class HierarchicalClassifier(Classifier): # noqa: D101 TODO def __init__( # noqa: D417 self, sparse_masks: list[torch.Tensor] | None = None, prior: list[torch.Tensor | list[float]] | None = None, **kwargs ): - """TODO. + """Aggregate leaf logits through child-to-parent maps. Args: - sparse_masks: Long-Tensors with parent indices for each element in layers n-1. - masks: DEPRECATED! Dense child-parent "log-adjacency" matrices. - kwargs: passed to `mini_trainer.classifier.Classifier`. + sparse_masks: Parent indices for each child, ordered from leaves upward. + prior: Per-rank biases, ordered from leaves upward. + kwargs: Passed to `mini_trainer.modeling.Classifier`. """ super().__init__(**kwargs) if not self.normalized: @@ -88,9 +88,7 @@ def num_masks(self): @property def masks(self): if self._dirty_cache["_masks"]: - masks = [] filter = self.active_indices - filters = [filter] self._dim_sizes = [] for i in range(self.num_masks): mask = getattr(self, f"mask_{i}") @@ -99,8 +97,6 @@ def masks(self): mask = mask[filter] filter, mask = mask.unique(sorted=False, return_inverse=True) setattr(self, f"_mask_{i}", mask.view_as(mask)) - masks.append(mask) - filters.append(filter) self._dim_sizes.append(int(mask.max().item() + 1)) setattr(self, f"_filter_{self.num_masks}", None if filter is None else filter.view_as(filter)) self._dirty_cache["_masks"] = False From 641f3a46fb92880186227afe7c86470cd5453e38 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:23:25 +0200 Subject: [PATCH 183/221] docs: clarify hierarchy decoder and mask contracts --- mini_trainer/hierarchical/transformer.py | 86 ++++++------------------ mini_trainer/hierarchical/utils.py | 65 +++++------------- 2 files changed, 38 insertions(+), 113 deletions(-) diff --git a/mini_trainer/hierarchical/transformer.py b/mini_trainer/hierarchical/transformer.py index 769ab2a..42a39d8 100644 --- a/mini_trainer/hierarchical/transformer.py +++ b/mini_trainer/hierarchical/transformer.py @@ -1,26 +1,15 @@ -""" -Autoregressive Transformer Decoders for Hierarchical Classification. - -This module implements modern transformer decoder architectures designed to ingest -visual backbone embeddings and autoregressively predict hierarchical class tokens. - -Architectural References: - - Transformer/Cross-Attention: "Attention Is All You Need" (Vaswani et al., 2017) - https://arxiv.org/abs/1706.03762 - - RMSNorm: "Root Mean Square Layer Normalization" (Zhang & Sennrich, 2019) - https://arxiv.org/abs/1910.07467 - - SwiGLU FeedForward: "GLU Variants Improve Transformer" (Shazeer, 2020) - https://arxiv.org/abs/2002.05202 - - FlashAttention (via PyTorch SDPA): "Fast and Memory-Efficient Exact Attention - with IO-Awareness" (Dao et al., 2022) - https://arxiv.org/abs/2205.14135 - -The primary implementation (`XADecoder`) utilizes a LLaMA/Mistral-style backbone -(RMSNorm + SwiGLU) extended with Cross-Attention to process external memory contexts. - -See reference implementation(s): - - https://github.com/meta-pytorch/torchtune/blob/bd2a0fc7c31430972728494fa01aaeeb0ebf1ba1/torchtune/modules/transformer.py - - https://github.com/huggingface/transformers/blob/f0e41a3ef4daf287c694a4731d50eefe9d57d48c/src/transformers/models/mistral/modular_mistral.py#L44 +"""Sequence-first decoders for autoregressive hierarchical classification. + +XADecoder combines cross-attention, RMSNorm and SwiGLU using PyTorch SDPA. +References: https://arxiv.org/abs/1706.03762 (attention), +https://arxiv.org/abs/1910.07467 (RMSNorm), +https://arxiv.org/abs/2002.05202 (SwiGLU), +https://arxiv.org/abs/2205.14135 (FlashAttention). +SDPA selects its backend; fused attention is not guaranteed. + +Implementation references: +- https://github.com/meta-pytorch/torchtune/blob/bd2a0fc7c31430972728494fa01aaeeb0ebf1ba1/torchtune/modules/transformer.py +- https://github.com/huggingface/transformers/blob/f0e41a3ef4daf287c694a4731d50eefe9d57d48c/src/transformers/models/mistral/modular_mistral.py#L44 """ from abc import ABC, abstractmethod @@ -43,16 +32,9 @@ def d_model(self) -> int: def forward( self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None, tgt_is_causal: bool = True ) -> torch.Tensor: - """ - Standard forward pass for training or stateless generation. - Expected shapes (assuming batch_first=False for compatibility): - tgt: (Seq, Batch, Dim) - memory: (Mem_Seq, Batch, Dim) - """ + """Decode tgt (sequence, batch, width) using memory (context, batch, width).""" pass - # Note: A .step() method here for KV-caching could be added in the future. - class RMSNorm(nn.Module): def __init__(self, dim: int, eps: float = 1e-6): @@ -69,10 +51,7 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: class XADecoderLayer(nn.Module): - """ - A modern decoder layer utilizing RMSNorm, SwiGLU (Gated MLP), - and native Scaled Dot Product Attention. - """ + """Self- and cross-attention with RMSNorm and a SwiGLU feed-forward block.""" def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): super().__init__() @@ -90,7 +69,6 @@ def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): self.cross_attn_kv = nn.Linear(d_model, 2 * d_model, bias=False) self.cross_attn_out = nn.Linear(d_model, d_model, bias=False) - # SwiGLU FeedForward hidden_dim = int(8 * d_model / 3) self.ff_w1 = nn.Linear(d_model, hidden_dim, bias=False) self.ff_w2 = nn.Linear(d_model, hidden_dim, bias=False) @@ -130,9 +108,7 @@ def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_is_causal: bool = class XADecoder(BaseDecoder): - """ - Standard sequence-to-sequence decoder stack utilizing gated MLPs and Cross-Attention. - """ + """Cross-attention decoder stack; tgt_mask is accepted but not applied.""" def __init__(self, d_model: int, num_layers: int = 4, nhead: int = 1, dropout: float = 0.1): super().__init__() @@ -152,7 +128,7 @@ def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tenso class DecoderLayer(nn.Module): - """A standard LLM-style self-attention layer (No Cross-Attention).""" + """Self-attention and SwiGLU with an explicit attention mask.""" def __init__(self, d_model: int, nhead: int, dropout: float = 0.1): super().__init__() @@ -180,7 +156,6 @@ def forward(self, x: torch.Tensor, attn_mask: torch.Tensor): qkv = self.attn_qkv(normed).chunk(3, dim=-1) q, k, v = [t.contiguous().transpose(0, 1).view(bsz, seq_len, self.nhead, -1).transpose(1, 2) for t in qkv] - # Note: We pass our custom boolean mask, so we set is_causal=False attn_out = F.scaled_dot_product_attention( q, k, v, attn_mask=attn_mask, is_causal=False, dropout_p=self.dropout.p if self.training else 0.0 ) @@ -196,11 +171,11 @@ def forward(self, x: torch.Tensor, attn_mask: torch.Tensor): return x -# Note: This doesn't work well at all, but I'll leave it here for reference class PrefixDecoder(BaseDecoder): - """ - Decoder-Only architecture. Prepends 'memory' to 'tgt', processes them - together, and slices the memory off before returning. + """Prepend memory to targets, then return only target outputs. + + Legacy limitation: the target mask permits future tokens, not past tokens. + Both tgt_mask and tgt_is_causal are ignored; this is not a causal decoder. """ def __init__(self, d_model: int, num_layers: int = 2, nhead: int = 8, dropout: float = 0.1): @@ -214,50 +189,31 @@ def d_model(self): return self._d_model def _generate_prefix_mask(self, mem_len: int, tgt_len: int, device: torch.device): - """ - Creates a mask where: - - Memory can see all Memory (bi-directional) - - Target can see all Memory - - Target can see past Target (causal) - - Target CANNOT see future Target - - Memory CANNOT see Target - """ + """Allow memory-to-memory, target-to-memory and strictly future target attention.""" tot_len = mem_len + tgt_len - # False means "do not attend" (mask out) in SDPA when using a boolean mask mask = torch.zeros(tot_len, tot_len, dtype=torch.bool, device=device) - # 1. Memory attends to memory mask[:mem_len, :mem_len] = True - # 2. Tgt attends to memory mask[mem_len:, :mem_len] = True - # 3. Tgt attends to tgt (causal - upper triangular) tgt_causal = torch.triu(torch.ones(tgt_len, tgt_len, dtype=torch.bool, device=device), diagonal=1) mask[mem_len:, mem_len:] = tgt_causal - # PyTorch SDPA expects the mask shape to broadcast with (bsz, nhead, seq, seq) - # So we reshape to (1, 1, seq, seq) return mask.view(1, 1, tot_len, tot_len) def forward(self, tgt: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None, tgt_is_causal: bool = True): mem_len = memory.size(0) tgt_len = tgt.size(0) - # 1. Concat memory and target sequence - # Shape: (mem_len + tgt_len, batch_size, d_model) full_seq = torch.cat([memory, tgt], dim=0) - # 2. Create the specialized prefix mask attn_mask = self._generate_prefix_mask(mem_len, tgt_len, device=tgt.device) - # 3. Pass through self-attention layers for layer in self.layers: full_seq = layer(full_seq, attn_mask=attn_mask) full_seq = self.final_norm(full_seq) - # 4. Slice off the memory to satisfy the API contract - # The head only wants the sequence corresponding to the hierarchical token decisions return full_seq[mem_len:] diff --git a/mini_trainer/hierarchical/utils.py b/mini_trainer/hierarchical/utils.py index b72ec22..6cafdb1 100644 --- a/mini_trainer/hierarchical/utils.py +++ b/mini_trainer/hierarchical/utils.py @@ -7,7 +7,7 @@ def leaf_to_parents(h): - """Construct the path from leaf-to-root for a specific leaf.""" + """Return a leaf-to-ancestor index mapping for each parent rank.""" l2p = [] p2c = None for lvl in h: @@ -24,57 +24,36 @@ def leaf_to_parents(h): def create_hierarchy(combinations: Iterable[list[str]], class_to_idx: list[dict[str, int]]) -> list[list[list[int]]]: - """Creates a hierarchy from the paths and class handles. + """Build parent-to-child index lists, ordered from the first parent rank upward. - The hierarchy is constructed based on the nodes found in the dataset. - TODO: The hierarchy should be constructed once and saved in a structured file. - - Arguments: - combinations: List of all leaf-to-root labels. - class_to_idx: A mapping from classes to indexes. - - Returns: - A list for each level of the hierarchy. - Each list contains a list for each node containing the indices of the children of that node. - Level 0 is the leaf level, and is not included. + Paths and class mappings are leaf-first. Only the first path for each leaf + contributes; repeated leaves are ignored. """ n_classes = [len(class_to_idx[level]) for level in range(len(class_to_idx))] - hierarchy = [[set() for _ in range(n)] for n in n_classes[1:]] # Create empty lists for each level - processed_leaves = [0] * n_classes[0] # Keep track of which leaves have been processed + hierarchy = [[set() for _ in range(n)] for n in n_classes[1:]] + processed_leaves = [0] * n_classes[0] - # Iterate over the combinations for components in combinations: - # Convert the class strings to indices indices = [class_to_idx[ctype][class_str] for ctype, class_str in enumerate(components)] - # Skip processed leaves (species in this case) - if processed_leaves[indices[0]] == 0: # If the leaf has not been processed yet + if processed_leaves[indices[0]] == 0: processed_leaves[indices[0]] = 1 else: - continue # Skip this leaf + continue - # Iterate over the indices and add them to the hierarchy for i in range(len(indices) - 1): - # Get the parent and child indices child = indices[i] parent = indices[i + 1] - hierarchy[i][parent].add(child) # Append the child to the parent's list + hierarchy[i][parent].add(child) return [[list(parent) for parent in level] for level in hierarchy] def create_mask_col(indices, height, zero=-100, **kwargs): - """Create an approximate logarithmic binary mask with the given indices. - - Arguments: - indices (list): list of indices to include in the mask. - height (int): Height of the mask (i.e. number of rows, also the 1+max(indices)). - zero (int): "Approximate zero" value. This is used to avoid numerical issues with log(0). - This should be a large negative number. Default: -100. - **kwargs: Keyword arguments to pass to torch.zeros(). Notably 'device' and 'dtype'. + """Return a (height, 1) additive mask: 0 at indices, ``zero`` elsewhere. - Returns: - An approximate logarithmic binary mask for the given indices. + ``zero`` defaults to -100 as a finite approximation to log(0). Keyword arguments + such as device and dtype are forwarded to torch.zeros. """ col = torch.zeros((height, 1), **kwargs, requires_grad=False) col += zero @@ -83,7 +62,7 @@ def create_mask_col(indices, height, zero=-100, **kwargs): def mask_islogarithmic(masks): - """Check if a mask is contains "logarithmic" zeros and ones.""" + """Detect values outside {0, 1}; reject lists mixing binary and additive masks.""" if isinstance(masks, list): response = [mask_islogarithmic(mask) for mask in masks] all_true = all(response) @@ -96,20 +75,11 @@ def mask_islogarithmic(masks): def mask_hierarchy(hierarchy, zero=-100, **kwargs): - """Create approximate logarithmic binary masks for the given hierarchy. - - Arguments: - hierarchy (list): list of lists of lists of indices. - The first level of the list corresponds to the levels of the hierarchy, - and each level contains a list of lists of indices for each node. - zero (int): "Approximate zero" value. This is used to avoid numerical issues with log(0). - **kwargs: Keyword arguments to pass to torch.zeros(). Notably 'device' and 'dtype'. + """Return one additive (children, parents) mask per hierarchy rank. - Returns: - list of masks for each level of the hierarchy. - Each mask has shape (n_nodes, n_child_nodes) and can be used to calculate the logits - for the nodes based on the child logits: - TODO: Add equation here (logarithmic matrix multiplication) + Entries are 0 for child-parent membership and ``zero`` otherwise (default -100). + Children must have contiguous indices and belong to exactly one parent. + Device and dtype keyword arguments are forwarded to torch.zeros. """ masks = [] for level in hierarchy: @@ -146,7 +116,6 @@ def batched_scatter_logsumexp(input: torch.Tensor, index: torch.Tensor, dim: int """ if dim_size is None: dim_size = int(index.max().item() + 1) - # Scaffold tensor - same size as output z = torch.zeros(shape_resize(input.shape, dim=dim, value=dim_size), dtype=input.dtype, device=input.device) index = index.expand_as(input) c = z.scatter_reduce(dim=dim, index=index, src=input, reduce="amax", include_self=False) From e60e06ae4f5fb7d4317d9eadb451c1ecba904bb2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:26:39 +0200 Subject: [PATCH 184/221] docs: focus model helper descriptions on supported contracts --- mini_trainer/modeling/checkpoint.py | 78 +++++++++-------------------- mini_trainer/modeling/context.py | 4 +- mini_trainer/modeling/ema.py | 7 ++- mini_trainer/modeling/mask.py | 12 ++--- mini_trainer/modeling/prior.py | 24 ++++----- 5 files changed, 41 insertions(+), 84 deletions(-) diff --git a/mini_trainer/modeling/checkpoint.py b/mini_trainer/modeling/checkpoint.py index f05766a..18ee78b 100644 --- a/mini_trainer/modeling/checkpoint.py +++ b/mini_trainer/modeling/checkpoint.py @@ -8,20 +8,16 @@ def average_checkpoints(inputs, map_location=None, weights_only=True): - """Loads checkpoints from inputs and returns a model with averaged weights. + """Average tensor entries under each checkpoint's ``model`` key. - Original implementation taken from: - https://github.com/pytorch/fairseq/blob/a48f235636557b8d3bc4922a6fa90f3a0fa57955/scripts/average_checkpoints.py#L16 - - Args: - inputs: An iterable of string paths of checkpoints to load from. - map_location: If not specified attempts a sensible default, otherwise passed directly to ``torch.load``. - weights_only: Passed to ``torch.load``. + Inputs must be a nonempty path sequence with identical ordered model keys. + Floating entries use arithmetic means; integer entries use floor division. + Other checkpoint fields, including optimizer state, come from the first input. + Non-tensor model metadata is not supported. Loading defaults to CPU; + map_location and weights_only are forwarded to torch.load. - Returns: - A dict of string keys mapping to various values. The 'model' key - from the returned dict should correspond to an OrderedDict mapping - string parameter names to torch Tensors. + Based on: + https://github.com/pytorch/fairseq/blob/a48f235636557b8d3bc4922a6fa90f3a0fa57955/scripts/average_checkpoints.py#L16 """ params_dict = OrderedDict() params_keys = None @@ -62,54 +58,22 @@ def average_checkpoints(inputs, map_location=None, weights_only=True): def store_model_weights(model, checkpoint_path, checkpoint_key="model", strict=True): - """This method can be used to prepare weights files for new models. It receives as - input a model architecture and a checkpoint from the training script and produces - a file with the weights ready for release. - - Examples: - from torchvision import models as M - - # Classification - model = M.mobilenet_v3_large(weights=None) - print(store_model_weights(model, './class.pth')) - - # Quantized Classification - model = M.quantization.mobilenet_v3_large(weights=None, quantize=False) - model.fuse_model(is_qat=True) - model.qconfig = torch.ao.quantization.get_default_qat_qconfig('qnnpack') - _ = torch.ao.quantization.prepare_qat(model, inplace=True) - print(store_model_weights(model, './qat.pth')) - - # Object Detection - model = M.detection.fasterrcnn_mobilenet_v3_large_fpn(weights=None, weights_backbone=None) - print(store_model_weights(model, './obj.pth')) - - # Segmentation - model = M.segmentation.deeplabv3_mobilenet_v3_large(weights=None, weights_backbone=None, aux_loss=True) - print(store_model_weights(model, './segm.pth', strict=False)) - - Args: - model: The model on which the weights will be loaded for validation purposes. - checkpoint_path: The path of the checkpoint we will load. - checkpoint_key: The key of the checkpoint where the model weights are stored. - Default: "model". - strict: whether to strictly enforce that the keys - in :attr:`state_dict` match the keys returned by this module's - :meth:`~torch.nn.Module.state_dict` function. Default: ``True`` - - Returns: - The location where the weights are saved. + """Validate checkpoint weights against a copy of model and save its state dict. + + Load checkpoint_path on CPU with weights_only=True, selecting checkpoint_key + (default ``model``) and forwarding strict to load_state_dict. For ``model_ema``, + remove the averaging counter and ``module.`` prefix before loading. + + Return the absolute path to ``weights-.pth`` beside the checkpoint. + The caller's model is unchanged. With strict=False, missing parameters retain + the supplied model's values. """ - # Store the new model next to the checkpoint_path checkpoint_path = os.path.abspath(checkpoint_path) output_dir = os.path.dirname(checkpoint_path) - # Deep copy to avoid side effects on the model object. model = copy.deepcopy(model) checkpoint = torch.load(checkpoint_path, map_location="cpu", weights_only=True) - # Load the weights to the model to validate that everything works - # and remove unnecessary weights (such as auxiliaries, etc.) if checkpoint_key == "model_ema": del checkpoint[checkpoint_key]["n_averaged"] torch.nn.modules.utils.consume_prefix_in_state_dict_if_present(checkpoint[checkpoint_key], "module.") @@ -120,7 +84,6 @@ def store_model_weights(model, checkpoint_path, checkpoint_key="model", strict=T sha256_hash = hashlib.sha256() with open(tmp_path, "rb") as f: - # Read and update hash string value in blocks of 4K for byte_block in iter(lambda: f.read(4096), b""): sha256_hash.update(byte_block) hh = sha256_hash.hexdigest() @@ -138,7 +101,12 @@ def set_weight_decay( norm_classes: list[type] | None = None, custom_keys_weight_decay: list[tuple[str, float]] | None = None, ): - """Set weight decay on parameter groups.""" + """Return trainable parameter groups with per-group weight decay. + + Custom keys take precedence over normalization-module and default decay. + A key containing a dot matches a full parameter path; other keys match local + parameter names. The first matching custom key wins. + """ if not norm_classes: norm_classes = [ torch.nn.modules.batchnorm._BatchNorm, diff --git a/mini_trainer/modeling/context.py b/mini_trainer/modeling/context.py index 77f6c0d..ec0a090 100644 --- a/mini_trainer/modeling/context.py +++ b/mini_trainer/modeling/context.py @@ -2,7 +2,7 @@ class SupervisionContext: - """Used for passing a target to the classification module.""" + """Process-global target passed to classifier heads; cleared on context exit.""" _target: torch.Tensor | None = None @@ -29,7 +29,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): class EmbeddingContext: - """Used for passing embeddings from the classification module to the criterion (or elsewhere).""" + """Process-global embedding handoff preserving gradients; nested contexts are rejected.""" # Dynamo can carry dictionary mutations out of a compiled graph. Assigning # a Tensor to a class attribute instead forces a graph break at publication. diff --git a/mini_trainer/modeling/ema.py b/mini_trainer/modeling/ema.py index 772a9d5..8f89e45 100644 --- a/mini_trainer/modeling/ema.py +++ b/mini_trainer/modeling/ema.py @@ -50,11 +50,10 @@ def distill_rate(self, step: int) -> float: return float(min(1.0, max(0.0, (step - self.distill_start) / max(1.0, self.total_steps - self.distill_start)))) def teach(self, step: int, input: torch.Tensor, student: torch.Tensor | list[torch.Tensor]): - """TODO. + """Return ramped KL distillation loss, or a zero tensor when disabled. - Returns: - KL-divergence between the model EMA and the ``student`` logits. - If the ``enabled=False``, ``0.0``. + The zero uses the student's dtype and device. See the class warning before + enabling this unsupported teacher. """ dr = self.distill_rate(step) if isinstance(student, (list, tuple)): diff --git a/mini_trainer/modeling/mask.py b/mini_trainer/modeling/mask.py index d17bc7f..8cb2f11 100644 --- a/mini_trainer/modeling/mask.py +++ b/mini_trainer/modeling/mask.py @@ -36,22 +36,18 @@ def restrict_class_labels(model: nn.Module, labels: list[str]) -> dict: def set_classification_mask(model: nn.Module, indices: list[int] | torch.Tensor | np.ndarray | None = None): - """Mask a selection of output features (classes). + """Retain selected output indices of a Classifier-built model. - Args: - model: A model created with `mini_trainer.classifier.Classifier.build()`. - indices: Indices to (reversibly) mask in forward pass. If None the mask is disabled. + Pass None to restore all classes. Indices refer to original weight rows. """ classification_module(model).set_active_features(indices) @contextmanager def mask_classifier(model: nn.Module, indices: list[int] | torch.Tensor | np.ndarray | None = None): - """Mask a selection of output features (classes). + """Temporarily select output indices, restoring the previous mask on exit. - Args: - model: A model created with `mini_trainer.classifier.Classifier.build()`. - indices: Indices to (reversibly) mask in forward pass. If None the mask is disabled. + Indices refer to original weight rows; None temporarily enables all classes. """ classifier = classification_module(model) orig_indices = classifier.active_indices diff --git a/mini_trainer/modeling/prior.py b/mini_trainer/modeling/prior.py index d2a2553..eecc118 100644 --- a/mini_trainer/modeling/prior.py +++ b/mini_trainer/modeling/prior.py @@ -5,18 +5,16 @@ def prior_logit_adjustment(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> list[float]: - """Computes dimension-independent biases based on Bayesian Logit Adjustment. - Formula: b_i = -C * log(K * p_i) + """Return mean-centered biases from b_i = -C * log(K * p_i). - Ref: https://arxiv.org/abs/2007.07314 + Frequencies are clamped below by eps before taking logs. + Reference: https://arxiv.org/abs/2007.07314 """ total_samples = sum(counts) ncls = len(counts) biases = [-C * math.log(ncls * max(c / total_samples, eps)) for c in counts] - # Optional but recommended: Center the biases so their mean is 0. - # This keeps the initial Softmax logits numerically stable. mean_bias = sum(biases) / ncls centered_biases = [b - mean_bias for b in biases] @@ -24,15 +22,14 @@ def prior_logit_adjustment(counts: list[int], C: float = 1.0, eps: float = 1e-7) def prior_ldam_shift(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> list[float]: - """Computes dimension-independent biases using LDAM generalization bounds. - Formula: b_i = C * (N_i^{-1/4} - N_max^{-1/4}) + """Return mean-centered biases from C * (N_i**(-1/4) - N_max**(-1/4)). - Ref: https://arxiv.org/abs/1906.07413 + Counts are clamped below by eps in the first term. + Reference: https://arxiv.org/abs/1906.07413 """ n_max = max(counts) biases = [C * ((max(c, eps) ** -0.25) - (n_max**-0.25)) for c in counts] - # Again, centering helps network initialization stability mean_bias = sum(biases) / len(biases) centered_biases = [b - mean_bias for b in biases] @@ -40,13 +37,10 @@ def prior_ldam_shift(counts: list[int], C: float = 1.0, eps: float = 1e-7) -> li def prior_scratch(counts: list[int], **kwargs): - """Computes dimension-independent biases using Z-scored negative log-frequencies. - Formula: b_i = -(log(N_i) - mu) / sigma + """Return negative standardized log-counts (sample standard deviation). - Note: This is an experimental ad-hoc method. It standardizes the log-counts - to have a mean of 0 and a variance of 1. While it correctly penalizes majority - classes, it can become numerically unstable if the dataset is perfectly balanced - (sigma approaches 0) and maps zero-counts to the same value as singletons (since log(1) == 0). + Experimental: zero counts map to log(1), and equal log-counts or a single + class cause division by zero. """ prior = [math.log(c) if c > 0 else 0 for c in counts] pmu = sum(prior) / len(prior) From 88aa6db233dec612868fe80851e917bd2725f680 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:31:53 +0200 Subject: [PATCH 185/221] test: decouple INT8 regressions from development benchmarks --- dev/benchmarks/training/quantized_training.py | 2 -- tests/quantization/test_quantized_training.py | 30 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/dev/benchmarks/training/quantized_training.py b/dev/benchmarks/training/quantized_training.py index 304b6f5..d30903c 100644 --- a/dev/benchmarks/training/quantized_training.py +++ b/dev/benchmarks/training/quantized_training.py @@ -14,8 +14,6 @@ import torch -from mini_trainer.modeling.quantized_training import IntegerLinear as IntegerLinear - def dependencies(): from mini_trainer.modeling._quantized_training import TrainingWeight, quantize_int8_rowwise, scaled_int8_mm diff --git a/tests/quantization/test_quantized_training.py b/tests/quantization/test_quantized_training.py index 3e332bd..2ae02b4 100644 --- a/tests/quantization/test_quantized_training.py +++ b/tests/quantization/test_quantized_training.py @@ -1,4 +1,4 @@ -"""CUDA numerical and saved-storage checks for the QT kernel prototype.""" +"""Native INT8 training arithmetic, storage and compiler regressions.""" import importlib.util import os @@ -6,7 +6,7 @@ import pytest import torch -from dev.benchmarks.training.quantized_training import IntegerLinear, dependencies +from mini_trainer.modeling.quantized_training import IntegerLinear, prepare_quantized_training @pytest.mark.parametrize("gradient_scale", [1.0, 1e-6]) @@ -18,10 +18,11 @@ def test_integer_training_gradients_and_saved_storage(gradient_scale): if not torch.cuda.is_available(): pytest.fail("CUDA requested but unavailable") torch.manual_seed(42) - weight_type, _, _ = dependencies() + from mini_trainer.modeling._quantized_training import TrainingWeight + inputs = torch.randn(32, 64, device="cuda", dtype=torch.float16, requires_grad=True) original_weight = torch.randn(64, 64, device="cuda", dtype=torch.float16) / 8 - weight = torch.nn.Parameter(weight_type.from_float(original_weight)) + weight = torch.nn.Parameter(TrainingWeight.from_float(original_weight)) grad_output = torch.randn(32, 64, device="cuda", dtype=torch.float16) * gradient_scale saved = [] @@ -172,10 +173,12 @@ def test_compiled_integer_parameter_gradients(): pytest.skip("Set RUN_CUDA_TESTS=1 for compiled INT8 gradient validation") if not torch.cuda.is_available(): pytest.fail("CUDA requested but unavailable") - from dev.benchmarks.training.quantized_training import Layer torch.manual_seed(42) - eager = torch.nn.Sequential(Layer(64, True, torch.float16), Layer(64, True, torch.float16)) + eager = torch.nn.Sequential(*(torch.nn.Linear(64, 64, bias=False, device="meta") for _ in range(2))) + for layer in eager: + layer.weight = torch.nn.Parameter(torch.randn(64, 64, device="cuda", dtype=torch.float16) / 8) + prepare_quantized_training(eager) compiled = torch.compile(copy.deepcopy(eager), fullgraph=True) # Ordinary training input does not require gradients. A small mean-reduced # loss exercises scale products below FP16's representable range. @@ -245,10 +248,8 @@ def test_dense_backward_graph_with_fresh_kernel_tuning(monkeypatch): ) assert result.returncode == 0, result.stdout + result.stderr return - from dev.benchmarks.models import DenseImageMLP from mini_trainer.modeling import Classifier, EmbeddingContext from mini_trainer.modeling._quantized_training import matmul - from mini_trainer.modeling.quantized_training import prepare_quantized_training torch._dynamo.reset() torch.manual_seed(42) @@ -262,8 +263,17 @@ def record_tuning(kernel, quantiles): return benchmark(kernel, quantiles) monkeypatch.setattr(matmul._kernel, "_do_bench", record_tuning) - raw = DenseImageMLP() - raw.fc = Classifier(2048, 10, hidden=False, normalized=False) + raw = torch.nn.Sequential( + torch.nn.AdaptiveAvgPool2d((28, 28)), + torch.nn.Flatten(), + torch.nn.Linear(3 * 28 * 28, 2048), + torch.nn.ReLU(), + torch.nn.Linear(2048, 2048), + torch.nn.ReLU(), + torch.nn.Linear(2048, 2048), + torch.nn.ReLU(), + Classifier(2048, 10, hidden=False, normalized=False), + ) raw.cuda() prepare_quantized_training(raw) model = torch.compile(raw, mode="reduce-overhead") From 2a3c2e930131c946ba2503359e8f21f0b97dc20d Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:36:33 +0200 Subject: [PATCH 186/221] refactor: share private model setup for graph capture --- mini_trainer/modeling/quantization.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/mini_trainer/modeling/quantization.py b/mini_trainer/modeling/quantization.py index 7fec446..e77aa70 100644 --- a/mini_trainer/modeling/quantization.py +++ b/mini_trainer/modeling/quantization.py @@ -19,7 +19,7 @@ from .classifier import Classifier from .context import EmbeddingContext, SupervisionContext -from .onnx import _flatten, _json_value, _structure +from .onnx import _copy_for_export, _flatten, _json_value, _structure def _backend(): @@ -155,13 +155,8 @@ def prepare_int8(model: nn.Module, example_input: torch.Tensor, *, qat=False, re if EmbeddingContext.active() or SupervisionContext.get() is not None: raise RuntimeError("Prepare outside embedding/supervision contexts.") backend, _, quantizer_cls, config_factory, _ = _backend() - while isinstance(model, (nn.DataParallel, nn.parallel.DistributedDataParallel)) or hasattr(model, "_orig_mod"): - model = model._orig_mod if hasattr(model, "_orig_mod") else model.module with torch.random.fork_rng(devices=[]): - model = copy.deepcopy(model).cpu().float().eval() - for module in model.modules(): - if isinstance(module, Classifier): - module._dirty_cache.clear() + model = _copy_for_export(model, torch.float32) # Populate masks and immutable evaluation caches outside strict capture. with torch.no_grad(): outputs = model(example_input) From 8bb20b2346b99829d3fb20d3a43730826951fb63 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:43:06 +0200 Subject: [PATCH 187/221] test: strengthen loss numerical and gradient contracts --- tests/training/test_loss.py | 75 ++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/tests/training/test_loss.py b/tests/training/test_loss.py index aa2c623..5a1e13a 100644 --- a/tests/training/test_loss.py +++ b/tests/training/test_loss.py @@ -1,40 +1,47 @@ +import pytest import torch from mini_trainer.training.loss import EvenCrossEntropyLoss, class_weight_distribution_regularization from mini_trainer.utils import kl_distill -def test_EvenCrossEntropyLoss(): - loss_fn = EvenCrossEntropyLoss() - input = torch.randn(4, 10) - target = torch.randint(0, 10, (4,)) - loss = loss_fn(input, target) - # loss is (1,) because of broadcasting with max_CE - assert loss.numel() == 1 - loss = loss.sum() # make scalar - assert loss > 0 - - # Check scaling - # Standard CE - ce = torch.nn.CrossEntropyLoss()(input, target) - expected = ce / torch.tensor(input.size(1)).float().log() - assert torch.allclose(loss, expected) - - -def test_kl_distill(): - logits = torch.randn(4, 10) - ema_logits = torch.randn(4, 10) - loss = kl_distill(logits, ema_logits, T=1.0) - assert loss >= 0 - - -def test_regularizations(): - W = torch.randn(10, 32) - - # class_weight_distribution_regularization - reg1 = class_weight_distribution_regularization(W, sparse=False) - assert reg1.numel() == 1 - - # Test sparse - reg4 = class_weight_distribution_regularization(W, sparse=True) - assert reg4.numel() == 1 +@pytest.mark.parametrize("reduction", ["mean", "sum", "none"]) +def test_even_cross_entropy_uniform_predictions(reduction): + logits = torch.zeros(3, 5, dtype=torch.float64, requires_grad=True) + loss = EvenCrossEntropyLoss(reduction=reduction)(logits, torch.tensor([0, 2, 4])) + expected = torch.ones(3 if reduction == "none" else 1, dtype=logits.dtype) + if reduction == "sum": + expected *= 3 + torch.testing.assert_close(loss, expected) + loss.sum().backward() + assert torch.isfinite(logits.grad).all() and logits.grad.norm() > 0 + + +@pytest.mark.parametrize("temperature", [1.0, 3.0]) +def test_distillation_matches_teacher_kl_without_teacher_gradients(temperature): + student = torch.tensor([[0.2, -0.8], [1.1, 0.4]], requires_grad=True) + teacher = torch.tensor([[1.4, -0.1], [-0.5, 0.8]], requires_grad=True) + expected = ( + torch.distributions.kl_divergence( + torch.distributions.Categorical(logits=teacher.detach() / temperature), + torch.distributions.Categorical(logits=student.detach() / temperature), + ).mean() + * temperature**2 + ) + loss = kl_distill(student, teacher, T=temperature) + torch.testing.assert_close(loss, expected) + loss.backward() + assert teacher.grad is None + assert torch.isfinite(student.grad).all() and student.grad.norm() > 0 + + +@pytest.mark.parametrize("sparse", [False, True]) +def test_regularization_penalizes_clustered_directions(sparse): + # 64 classes exceed the sampling threshold; 96 dimensions allow orthogonality. + orthogonal = torch.eye(64, 96) + torch.testing.assert_close(class_weight_distribution_regularization(orthogonal, sparse=sparse), torch.tensor(0.0)) + clustered = (orthogonal + 1).requires_grad_() + penalty = class_weight_distribution_regularization(clustered, sparse=sparse) + assert penalty.ndim == 0 and torch.isfinite(penalty) and penalty > 0 + penalty.backward() + assert torch.isfinite(clustered.grad).all() and clustered.grad.norm() > 0 From 73dd663a3cde3645539e2330fba4e4ae401c9173 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:45:48 +0200 Subject: [PATCH 188/221] docs: condense trainer contracts and remove obsolete notes --- mini_trainer/trainer.py | 92 ++++++++++++----------------------------- 1 file changed, 26 insertions(+), 66 deletions(-) diff --git a/mini_trainer/trainer.py b/mini_trainer/trainer.py index e82d3cb..24b4a1e 100644 --- a/mini_trainer/trainer.py +++ b/mini_trainer/trainer.py @@ -80,27 +80,16 @@ def train_one_epoch( device: torch.device = torch.device("cpu"), dtype: torch.dtype = torch.float32, ): - """Run one training epoch. - - Args: - model: Model under training. - model_ema: Exponential Moving Average model (``mini_trainer.builders.EMATeacher``) linked to ``model``. - criterion: Loss function; may return a scalar tensor or a list of tensors. - optimizer: Optimizer used for parameter updates. - scaler: AMP gradient scaler. - lr_scheduler: Learning rate scheduler stepped per batch. - data_loader: Dataloader yielding mini-batches of ``(inputs, targets)``. - epoch: Zero-based epoch index. - logger: Multi-backend logger used to record metrics and figures. - preprocess: Function applied to tensors before passing to the model. - augmentation: Training-time augmentation applied before preprocess. - regularizer: Callable that returns an extra scalar loss term from the model. - clip_grad_norm: Max gradient norm; disabled if ``None``. - device: Target device for training (e.g., ``cuda:0``). - dtype: AMP/autocast data type for forward pass. - - Raises: - RuntimeError: If non-finite loss persists across several steps or input shape is invalid. + """Run an epoch over ``(NCHW inputs, targets)`` batches and finish in eval mode. + + Apply augmentation before preprocessing. The criterion returns a scalar or + per-level losses; regularization and optional teacher distillation are added + before backward. Pass a disabled ``EMATeacher`` when EMA is unused. + + Scheduler and EMA updates follow successful optimizer steps only, including + AMP overflow gating. Non-finite criterion/distillation losses skip the batch; + five consecutive failures raise ``RuntimeError``. ``clip_grad_norm=None`` + disables clipping; ``dtype=float32`` disables autocast. """ log = get_logger() @@ -130,7 +119,6 @@ def train_one_epoch( with autocast(device_type=device.type, dtype=dtype, enabled=dtype != torch.float32), SupervisionContext(target), EmbeddingContext(): logits = model(preprocess(augmentation(batch))) loss: list[torch.Tensor] | torch.Tensor = criterion(logits, target) - # If EMA is disabled ``distill_loss`` is ``0.0`` distill_loss = model_ema.teach(step=step, input=preprocess(batch), student=logits) if model_ema else 0.0 reg = regularizer(model) @@ -173,11 +161,6 @@ def train_one_epoch( logger.stop_timing() logger.synchronize_between_processes() - # TODO: I don't think this is appropriate when use_buffers=True and using EMA (not SWA) - # if model_ema: - # with torch.no_grad(): - # copy_bn_buffers(model, model_ema.module) - model.eval() @@ -191,20 +174,11 @@ def evaluate( device: torch.device = torch.device("cpu"), dtype: torch.dtype = torch.float32, ): - """Evaluate the model for one validation epoch. - - Args: - model: Model in evaluation mode. - criterion: Loss function compatible with the model outputs/targets. - data_loader: Validation dataloader yielding mini-batches. - epoch: Zero-based epoch index. - logger: Logger used to record metrics and figures. - preprocess: Preprocess function applied to tensors before inference. - device: Target device for evaluation. - dtype: AMP/autocast data type for inference. - - Returns: - The most recent value of the canonical statistic recorded by the logger. + """Evaluate batches and return the logger's canonical scalar, or NaN if absent. + + Preprocess under inference mode and optional autocast, synchronize metrics, + and emit figures. Restore the incoming model training mode on normal return. + Warn if the distributed sample count differs from the dataset length. """ log = get_logger() @@ -230,7 +204,6 @@ def evaluate( logger.stop_timing() logger.synchronize_between_processes() - # gather the stats from all processes num_processed_samples = reduce_across_processes(num_processed_samples) if ( hasattr(data_loader.dataset, "__len__") @@ -280,30 +253,17 @@ def train( compile_mode: str | None = None, **kwargs, ): - """Full training loop across epochs with periodic evaluation and checkpointing. - - Args: - model: Model to train. - model_ema: Exponential Moving Average model (``AveragedModel``) linked to ``model``. - train_loader: Training dataloader. - val_loader: Validation dataloader. - criterion: Loss function. - optimizer: Optimizer instance. - scaler: Gradient scaler. - lr_scheduler: LR scheduler stepped every training batch. - logger: Logger used for metrics, summaries and figures. - epochs: Total number of epochs to run. - start_epoch: Initial epoch index when resuming from a checkpoint. - preprocess: Preprocess function applied prior to the model. - augmentation: Augmentation function used during training only. - regularizer: Callable returning an extra scalar loss term from the model. - device: Target device. - dtype: AMP/autocast data type for forward/eval passes. - output_dir: If provided, checkpoints are written here. - weight_store_rate: Store a snapshot every ``weight_store_rate`` epochs if set. - compile: Compile the model with PyTorch. - compile_mode: Optional PyTorch model compilation mode; requires compile=True. - **kwargs: Forwarded to lower-level helpers. + """Train from ``start_epoch`` up to the total ``epochs`` budget. + + Evaluate the teacher when enabled, otherwise the model, after each epoch. + ``compile_mode`` requires ``compile=True``; DDP wrapping precedes compilation. + Extra keyword arguments go to ``train_one_epoch`` (for example, clipping). + + When ``output_dir`` is set, save model/optimizer/scheduler/scaler and optional + EMA state in ``checkpoint_last.pth``. ``weight_store_rate`` adds snapshots at + zero-based epoch multiples. ``best.pt`` contains evaluation-model weights; + the canonical metric is maximized, with ties replacing the previous best. + Best-metric tracking restarts on each call. Close the logger on completion. """ log = get_logger() From 15fe8658480f0e52328306bf06558beab873b71a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:49:30 +0200 Subject: [PATCH 189/221] refactor: simplify colorbar tick selection --- mini_trainer/visualization/plot.py | 54 +++++++----------------------- tests/utils/test_plot.py | 14 ++++++++ 2 files changed, 26 insertions(+), 42 deletions(-) diff --git a/mini_trainer/visualization/plot.py b/mini_trainer/visualization/plot.py index 12f0f9f..1c16a2c 100644 --- a/mini_trainer/visualization/plot.py +++ b/mini_trainer/visualization/plot.py @@ -11,14 +11,12 @@ from mini_trainer.modeling import class_similarity -# --- Constants --- MIN_DISPLAY_DIM_HEATMAP = 500 MAX_DISPLAY_DIM_HEATMAP = 5000 COLORBAR_RENDER_DPI = 150 COLORBAR_TARGET_WIDTH_PIXELS = 200 # Approximate width for the colorbar image -# --- Helper: Matrix Aggregation --- def _aggregate_matrix_max(matrix: np.ndarray, block_shape: tuple[int, int]) -> np.ndarray: """Aggregates matrix by taking the maximum in blocks. @@ -37,11 +35,9 @@ def _aggregate_matrix_max(matrix: np.ndarray, block_shape: tuple[int, int]) -> n new_rows, new_cols = padded_matrix.shape target_rows, target_cols = new_rows // block_rows, new_cols // block_cols - # Efficient reshape and sum for block aggregation return padded_matrix.reshape(target_rows, block_rows, target_cols, block_cols).max(axis=3).max(axis=1) -# --- Helper: Matrix Scaling --- def _get_scaled_matrix_for_display(mat: np.ndarray) -> np.ndarray: """Resizes matrix: downscales then upscales to fit display dimension constraints.""" processed_mat = mat @@ -73,7 +69,6 @@ def _get_scaled_matrix_for_display(mat: np.ndarray) -> np.ndarray: return processed_mat.copy() if processed_mat is mat else processed_mat -# --- Helper: Heatmap Array Generation --- def _generate_heatmap_rgb_array(display_mat: np.ndarray, min_val_display: float | None, cmap_name: str, percent: bool): """Generates the RGB heatmap image array using Matplotlib colormaps, and returns norm info.""" @@ -108,18 +103,17 @@ def chunks(): return rgb, norm, norm_vmin, norm_vmax -# --- Helper: Colorbar Ticks --- def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks: int, percent: bool) -> tuple[list[float], list[str]]: """Generates tick values and labels for the colorbar.""" if not (norm_vmin > 0 and norm_vmax > 0 and norm_vmin < norm_vmax): return [], [] - num_decades = math.log10(norm_vmax / norm_vmin) if norm_vmin > 0 and norm_vmax > 0 else 1 + num_decades = math.log10(norm_vmax / norm_vmin) multipliers = [1, 2, 5] if num_decades < 2 else [1, 1.5, 2, 3, 5, 7] # Fewer for small ranges tick_cands = {norm_vmin, norm_vmax} - start_exp = math.floor(math.log10(norm_vmin)) if norm_vmin > 0 else 0 - end_exp = math.ceil(math.log10(norm_vmax)) if norm_vmax > 0 else 0 + start_exp = math.floor(math.log10(norm_vmin)) + end_exp = math.ceil(math.log10(norm_vmax)) for exp_val in range(start_exp, end_exp + 1): for m in multipliers: @@ -127,32 +121,17 @@ def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks if norm_vmin <= tick <= norm_vmax: # Ensure ticks are within actual data range tick_cands.add(tick) - # Filter again to be absolutely sure, then sort - sorted_ticks = sorted(list(t for t in tick_cands if norm_vmin <= t <= norm_vmax)) - - if len(sorted_ticks) > max_ticks: # Subsample if too many - indices = np.round(np.linspace(0, len(sorted_ticks) - 1, max_ticks)).astype(int) - final_ticks = [sorted_ticks[i] for i in sorted(list(set(indices)))] - # Ensure original vmin and vmax are considered if space allows - if max_ticks >= 1 and not np.isclose(final_ticks[0], norm_vmin): - final_ticks.insert(0, norm_vmin) - if max_ticks >= 2 and not np.isclose(final_ticks[-1], norm_vmax): - final_ticks.append(norm_vmax) - final_ticks = sorted(list(set(t for t in final_ticks if norm_vmin <= t <= norm_vmax)))[:max_ticks] - else: - final_ticks = sorted_ticks - - # Ensure at least two ticks (min/max) if possible, if list became empty by max_ticks=0 or 1 - if not final_ticks and len(sorted_ticks) >= 1: - final_ticks = [sorted_ticks[0]] - if len(sorted_ticks) > 1: - final_ticks.append(sorted_ticks[-1]) - final_ticks = sorted(list(set(final_ticks))) + final_ticks = sorted(tick_cands) + if max_ticks == 0: + # Preserve the legacy zero-limit fallback to both bounds. + final_ticks = [norm_vmin, norm_vmax] + elif len(final_ticks) > max_ticks: + indices = np.round(np.linspace(0, len(final_ticks) - 1, max_ticks)).astype(int) + final_ticks = [final_ticks[i] for i in indices] labels = [] for v_tick in final_ticks: val_fmt = v_tick * 100 if percent else v_tick - lab_str = "" if percent: if abs(val_fmt) < 0.01 and val_fmt != 0: lab_str = f"{val_fmt:.1e}%" @@ -170,7 +149,6 @@ def _get_colorbar_ticks_and_labels(norm_vmin: float, norm_vmax: float, max_ticks return final_ticks, labels -# --- Helper: Colorbar Array Generation --- def _generate_colorbar_rgb_array( norm_obj: mpl.colors.LogNorm, cmap_name_str: str, @@ -216,7 +194,6 @@ def _generate_colorbar_rgb_array( return img_rgb -# --- Main Plotting Function --- def plot_heatmap( mat: np.ndarray | torch.Tensor, cmap_name: str = "magma", @@ -228,7 +205,7 @@ def plot_heatmap( ): """Plots a high-resolution confusion matrix using NumPy and Matplotlib. - Returns a combined RGB NumPy array (heatmap + colorbar), or None for empty input. + Return an RGB uint8 array with an optional colorbar; empty input gives a gray image. """ if isinstance(mat, torch.Tensor): mat = mat.cpu().detach().float().numpy() @@ -237,10 +214,8 @@ def plot_heatmap( img = np.full((MIN_DISPLAY_DIM_HEATMAP, MIN_DISPLAY_DIM_HEATMAP + COLORBAR_TARGET_WIDTH_PIXELS, 3), (200, 200, 200), dtype=np.uint8) return img - # 1. Scale matrix for display display_mat = _get_scaled_matrix_for_display(mat) - # 2. Generate heatmap RGB array heatmap_rgb_array, norm_obj, vmin, vmax = _generate_heatmap_rgb_array(display_mat, min_val_display, cmap_name, percent) if not colorbar: @@ -252,18 +227,13 @@ def plot_heatmap( ) # Slightly different gray return np.hstack((heatmap_rgb_array, empty_cbar_space)) - # 3. Get colorbar ticks and labels tick_values, tick_labels = _get_colorbar_ticks_and_labels(vmin, vmax, max_colorbar_ticks, percent) - # 4. Generate colorbar RGB array colorbar_rgb_array = _generate_colorbar_rgb_array( norm_obj, cmap_name, tick_values, tick_labels, target_height_pixels=heatmap_rgb_array.shape[0], font_size_pt=font_size ) - # 5. Combine heatmap and colorbar - final_rgb_image = np.hstack((heatmap_rgb_array, colorbar_rgb_array)) - - return final_rgb_image + return np.hstack((heatmap_rgb_array, colorbar_rgb_array)) def plot_class_distance_matrix(model: nn.Module, **kwargs): diff --git a/tests/utils/test_plot.py b/tests/utils/test_plot.py index 145391e..ab1b002 100644 --- a/tests/utils/test_plot.py +++ b/tests/utils/test_plot.py @@ -5,6 +5,7 @@ from mini_trainer.visualization.plot import ( MIN_DISPLAY_DIM_HEATMAP, _aggregate_matrix_max, + _get_colorbar_ticks_and_labels, _get_scaled_matrix_for_display, ) @@ -48,3 +49,16 @@ def test_chunked_heatmap_matches_previous_rgb_pixels(cmap_name, percent): np.testing.assert_array_equal(actual, expected) np.testing.assert_array_equal(values, original) assert (actual_min, actual_max) == (vmin, vmax) + + +@pytest.mark.parametrize("limit", [0, 1, 2, 8]) +@pytest.mark.parametrize("percent", [False, True]) +def test_colorbar_ticks_are_ordered_bounded_and_labeled(limit, percent): + ticks, labels = _get_colorbar_ticks_and_labels(0.001, 1.0, limit, percent) + assert ticks == sorted(set(ticks)) + assert len(ticks) == len(labels) == (2 if limit == 0 else limit) + assert ticks[0] == 0.001 + assert all(0.001 <= tick <= 1.0 for tick in ticks) + if limit != 1: + assert ticks[-1] == 1.0 + assert all(label.endswith("%") == percent for label in labels) From 5839211ca039e5a726309c7e3c999fe09c0351fb Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:52:51 +0200 Subject: [PATCH 190/221] refactor: consolidate compatibility report output --- tests/README.md | 6 ++-- tests/utils/run_compatibility_tests.py | 46 ++++++++++---------------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/tests/README.md b/tests/README.md index b503f01..653e9fd 100644 --- a/tests/README.md +++ b/tests/README.md @@ -17,13 +17,13 @@ optional dependencies, expected failures or slow-backbone requirements. | `integration/` | Full training, lazy data and distributed integration | | `benchmarks/` | Dataset/evaluation orchestration, inference probes, provenance and report storage | | `releases/` | Deployment adapters, presets, streaming ownership, campaign evidence and packaging | -| `logging/` | Console, TensorBoard and W&B logging | +| `logging/` | Console, TensorBoard, W&B, confusion reports and figure ownership | | `utils/` | General device/plot helpers and the opt-in compatibility utility | Shared test builders and state assertions currently live in the integration and checkpoint modules that define their behavior. Imports and serialized test model -identifiers use those modules' new paths. Keep those paths importable for spawned -processes; avoid changing fixture semantics as part of directory cleanup. +identifiers use those modules. Keep them importable for spawned processes and +checkpoint reconstruction. These folders use ordinary pytest discovery, not custom collections. `dev/check.sh` only selects the existing environment, sets CPU/headless defaults and forwards diff --git a/tests/utils/run_compatibility_tests.py b/tests/utils/run_compatibility_tests.py index f629792..b02608b 100755 --- a/tests/utils/run_compatibility_tests.py +++ b/tests/utils/run_compatibility_tests.py @@ -84,7 +84,6 @@ def run_integration_test(model_name: str, online: bool, temp_dir: str) -> tuple[ os.makedirs(os.path.join(input_dir, "class_a"), exist_ok=True) os.makedirs(os.path.join(input_dir, "class_b"), exist_ok=True) - # Configure model_args model_args: dict[str, Any] = {"pretrained": False} if not online: model_args["local_files_only"] = True @@ -114,7 +113,6 @@ def run_integration_test(model_name: str, online: bool, temp_dir: str) -> tuple[ "seed": 42, } - # Redirect standard output/error to silence train prints sys.stdout.flush() sys.stderr.flush() @@ -363,36 +361,26 @@ def main_cli(): print(f" - {m}") print("-" * 60) - # Print blacklist updates - if not args.dry_run: - if added_to_blacklist or removed_from_blacklist: - print("Blacklist Updates:") - if added_to_blacklist: - print(" Added to blacklist:") - for m in sorted(added_to_blacklist): - print(f" - {m}") - if removed_from_blacklist: - print(" Removed from blacklist:") - for m in sorted(removed_from_blacklist): - print(f" - {m}") - else: - print("No blacklist changes detected.") - print("-" * 60) - # Save results once more to be safe - save_results(results) - else: + if args.dry_run: print("Dry-run mode: blacklist updates and result caching were skipped.") if added_to_blacklist or removed_from_blacklist: print("Pending Blacklist Updates (if run without --dry-run):") - if added_to_blacklist: - print(" Would add to blacklist:") - for m in sorted(added_to_blacklist): - print(f" - {m}") - if removed_from_blacklist: - print(" Would remove from blacklist:") - for m in sorted(removed_from_blacklist): - print(f" - {m}") - print("-" * 60) + elif added_to_blacklist or removed_from_blacklist: + print("Blacklist Updates:") + else: + print("No blacklist changes detected.") + + headings = ( + ("Would add to blacklist", "Would remove from blacklist") if args.dry_run else ("Added to blacklist", "Removed from blacklist") + ) + for heading, models in zip(headings, (added_to_blacklist, removed_from_blacklist), strict=True): + if models: + print(f" {heading}:") + for model in sorted(models): + print(f" - {model}") + print("-" * 60) + if not args.dry_run: + save_results(results) if __name__ == "__main__": From c2ab610c7883ca8d3c89ed1632862e88ea75952f Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 15:56:32 +0200 Subject: [PATCH 191/221] docs: reuse integration setup in publication handoff --- dev/releases/mambo_v3/publication.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index 0f6a113..72a8c37 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -59,20 +59,21 @@ The prepared README uses links to the planned `MAMBO_v3` tag, so those links bec publicly resolvable only after the reviewed tag exists. Do not silently retarget them to a moving branch. Review the GitHub-rendered README/figures before announcement. -## Intended consumer commands after publication +## Consumer checks after publication + +Follow the [deployment quick start](../../../deployment/README.md#quick-start), +replacing the local wheel with the published package: ```sh -uv venv --python 3.13 .venv -source .venv/bin/activate uv pip install 'mambo-v3[onnx]==0.3.0' mambo_predict -i images --name results ``` -Or an isolated CLI: `uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i images`. -Native users can install `mambo-v3[torch]==0.3.0` with an explicitly selected PyTorch -backend and pass `--backend torch --device cuda:0`. Offline users install the -provided wheels/dependencies and supply the extracted bundle with `--bundle`. -No repository checkout or dataset metadata is required for these consumer paths. +Also check the isolated CLI: +`uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i images`. +Native PyTorch and offline installation follow the same +[runtime guidance](../../../docs/mambo-integration.md); neither requires a +repository checkout or dataset metadata. ## Rollback and maintenance From 375435992a375701f704bad2bce8204d4b5c0dde Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:00:53 +0200 Subject: [PATCH 192/221] docs: consolidate training campaign lessons and acceptance --- docs/quantized-training-validation.md | 7 +- docs/training-workflow-postmortem.md | 183 ++++++++++++-------------- 2 files changed, 86 insertions(+), 104 deletions(-) diff --git a/docs/quantized-training-validation.md b/docs/quantized-training-validation.md index b65ea96..a95e82c 100644 --- a/docs/quantized-training-validation.md +++ b/docs/quantized-training-validation.md @@ -52,7 +52,6 @@ A few points of degradation may be acceptable when justified by a material speed/cost or memory benefit. Record the per-profile acceptance limits before qualification; integer execution alone is not acceptance. -The intended execution targets remain HPC GPU training on A40/A100/B300-class -systems with EPYC hosts, local training/fine-tuning and ONNX GPU inference on Spark -or the intended RTX desktop, and ONNX CPU inference on Raspberry Pi/ARM. -Support claims require evidence from the corresponding hardware and workload. +Target hardware and workload acceptance are maintained in the +[quantization roadmap](quantization-roadmap.md#supported-scope-and-decision-criteria). +Support claims require evidence from the corresponding target. diff --git a/docs/training-workflow-postmortem.md b/docs/training-workflow-postmortem.md index 2d2f6a0..2bcb84f 100644 --- a/docs/training-workflow-postmortem.md +++ b/docs/training-workflow-postmortem.md @@ -31,37 +31,32 @@ diagnostics separately rather than using the total source-row count as epoch siz ## Lessons that change the next run -**Prepare the whole workflow before allocation.** The successful training started -about 97 minutes after allocation began. It finished around 12:35 the next day; -test inference completed at 16:11, metrics around 16:44 and archive verification -at 17:13, shortly before 17:24 expiry. These timestamps locate critical-path costs, -not a causal profile or proof that all qualification time was waste. - -Commands were vulnerable to wrong working directories, missing YAML, torchrun -argument parsing, mixed checkout/package/PYTHONPATH identities and refused retries -into partial directories. One stage had weights/finite metrics but timed out during -remaining work. Record phase completion separately from process exit; a checkpoint -alone does not prove clean logger/export/teardown completion. Logs and atomic -completion records must survive terminal loss. - -**Separate storage latency from compute.** Cold workers waited in `D` state / -`folio_wait_bit_common`; one 211-second window spent 146–150 seconds waiting for -input, and initial test inference reached only 69/2,473 batches after 43 minutes. -Repeated reads of an expert subset fell from hundreds of seconds to below one -second on WEKA. A disjoint-sample sweep favored 512 readers (~117 images/s median -confirmation); a larger-file workload provisionally favored 64. These are evidence -for latency hiding and cache sensitivity, not universal reader defaults or a -filesystem-internal diagnosis. - -Production eventually stabilized near 650 training and 2,000–2,500 evaluation -images/s/GPU with 32 loader workers/rank. After staging, expert inference finished -in 2:49 and full test inference in 30:02. Separate encoded-byte read concurrency -from decode processes and CUDA transfer. Try meaningfully high bounded concurrency -when latency is evident, retaining errors, bytes, file sizes, sample coverage and -startup/drain costs. Disjoint paths are not guaranteed cold shared-cache data; -never clear shared caches to manufacture a benchmark. - -**Use the qualified floating compute baseline.** Four-GPU warmed qualification: +**Prepare evaluation and recovery before allocation.** Training started about +97 minutes after allocation and finished at 12:35 the next day. Test inference, +metrics and archive verification finished at 16:11, 16:44 and 17:13 respectively, +against a 17:24 expiry. These timestamps show critical-path costs, not their causes. + +Wrong working directories, missing YAML, torchrun parsing and mixed checkout/ +package/PYTHONPATH identities caused interventions. Partial directories complicated +retries; one stage saved weights and finite metrics but timed out afterward. +A checkpoint therefore cannot stand in for completion of logging, export or teardown. + +**Hide storage latency with bounded concurrency.** Cold workers waited in `D` +state / `folio_wait_bit_common`; a 211-second window spent 146–150 seconds waiting +for input. Initial test inference reached only 69/2,473 batches after 43 minutes. +Repeated expert-subset reads fell from hundreds of seconds to below one second on +WEKA. A disjoint-sample sweep favored 512 readers (~117 images/s median confirmation); +a larger-file workload provisionally favored 64. These support aggressive latency +hiding, not universal defaults or a filesystem-internal diagnosis. + +Production stabilized near 650 training and 2,000–2,500 evaluation images/s/GPU +with 32 loader workers/rank. After staging, expert inference finished in 2:49 and +full test inference in 30:02. Allocate encoded-byte readers, decode processes and +CUDA transfer separately. Report errors, bytes/file sizes, sample coverage and +startup/drain costs. Disjoint paths do not guarantee cold shared-cache data; never +clear shared caches to manufacture a benchmark. + +**Start from the qualified floating baseline.** Four-GPU warmed qualification: | Batch/rank | Aggregate images/s | Peak allocated bytes (reported maximum) | | --- | ---: | ---: | @@ -70,76 +65,64 @@ never clear shared caches to manufacture a benchmark. | 128 | 2,272.305 | 30,251,580,416 | | 256 | 2,517.928 | 59,508,456,960 | -128 → 256 gained ~10.8% throughput for nearly twice the allocation. Spare memory -invites a bounded test, not an assumption that larger global batches preserve -updates/schedule or improve convergence. Earlier single-GPU model compilation -reduced later-epoch time/allocation by roughly a third; optimizer compilation added -startup without steady-state gain, explicit prefetch had no convincing gain, and -combined INT8 runs timed out. Preserve these negative results; repeat only for a -changed mechanism/target. FP16 was tested, not proven superior to all BF16 recipes. - -**Qualify required diagnostics and lifecycle together.** At 12,632 species, -confusion generation took ~8–13 s and warmed dendrogram rendering ~12–13 s; first -label resolution took roughly a minute in one run. Keep full-head figures and W&B -in the topology smoke, along with validation and save/reload. Preserve whole-matrix -inspection and explicit hierarchy-level selection instead of disabling useful -figures. A separate storage probe answers cold-IO questions. - -**Triage warnings without expanding the campaign.** Early loss NaNs occurred in -both baselines and optional-feature trials; the final production audit was finite. -That weakens feature-specific attribution without proving harmlessness. Capture -first occurrence with sample/phase, dtype, features and finiteness; trigger bounded -replay only when needed. Compiler specialization, hierarchy scalar extraction and -DDP stride warnings merit changes when traces show meaningful repeated cost, not -simply to clean logs. EMA repair is separate work. - -**Keep inference and packaging responsibilities clear.** Discovery must not filter -truth by model vocabulary or depend on training partitions. Distinguish taxonomy -transport failures from rank/index mapping errors. Derive inference configuration -from weights where reliable, with explicit legacy overrides. Preflight the metrics -environment and export tools before training; overlap independent preparation within -resource budgets. Package a small deployment subset separately from evidence and -optional resume history, retaining ONNX external tensors and explicit omissions. -Checksums establish integrity, not quality or complete provenance. +128 → 256 gained ~10.8% throughput for nearly twice the allocation. Larger batches +also change update/schedule behavior; spare memory alone is not a convergence case. +Earlier single-GPU model compilation reduced later-epoch time/allocation by roughly +a third. Optimizer compilation added startup without steady-state gain, explicit +prefetch had no convincing gain, and combined INT8 runs timed out. Revisit these +negative results only for a changed mechanism or target. FP16 was tested, not +established as superior to all BF16 recipes. + +**Include diagnostics and failure handling in qualification.** At 12,632 species, +confusion generation took ~8–13 s, warmed dendrogram rendering ~12–13 s, and first +label resolution roughly a minute in one run. Include full-head figures, W&B, +validation and save/reload in the topology smoke; storage calibration is separate. +Keep whole-matrix inspection and hierarchy-level selection. + +Early loss NaNs occurred in both controls and optional-feature trials; the final +production audit was finite. This weakens feature-specific attribution without +proving harmlessness. Capture the first occurrence's sample, phase, dtype and +feature/finiteness state for bounded replay. Compiler specialization, hierarchy +scalar extraction and DDP stride warnings justify changes when traces establish +repeated cost. EMA repair remains separate. ## Next-run minimum (planned) -Build on existing `dev/ucloud` setup/comparison/scaling/production helpers and normal -CLIs. Use a small manifest referencing current outputs, not a new workflow engine. - -1. **Durable state/recovery:** resolved absolute commands, interpreters, package and - harness identities, input hashes, stage times/logs, exit cause and completion - checks. Reuse finished stages only when identities match; retain partial evidence. -2. **Preallocated preparation:** a tiny installed train → predict → mini_metrics → - export → package fixture verifies dependencies and paths before renting GPUs. - Keep W&B authentication interactive and secrets out of manifests. -3. **Separate qualification:** report startup, warm training, first-pass IO, - validation/figures and teardown. Use one relevant topology smoke plus bounded - storage calibration. Distinguish allocation deadline, stage limits and cleanup - reserve; preserve the configured learning-rate schedule. - -Acceptance includes interruption after preparation, failed child exit, timeout -after saving, logger teardown failure and completed-stage reuse. Keep normal CLI -execution, inspectable plans/status, explicit retry/resume, operator batch/worker -choices and a supported-checkpoint stop/continue decision. Do not promise -arbitrary-batch exact resume without RNG/sampler state. - -Next, improve bounded read/staging calibration. Only build the -[optional prepared dataset](roadmap.md#optional-dataset-preparation-for-scalable-loading) -when total preparation plus expected reuse pays off. Preserve bytes, labels, -splits/order and failures; do not silently turn a partial prototype into the default. - -Measure operator interventions, time to productive training, cold/warm throughput, -evaluation turnaround, repeated/failed stages and artifact size. Use tiny fixtures -for workflow contracts and target runs for hardware claims. Expand experiments only -when they change a decision; a production matrix is not a default test suite. -Unresolved PTQ/native integer and target-performance work belongs in the -[quantization roadmap](quantization-roadmap.md), not this operational plan. - -The completed campaign's hard-coded expert/test staging and evaluation launchers -are retained only in +Extend the existing `dev/ucloud` helpers and normal CLIs; use a small stage manifest, +not another workflow engine. This work is still planned: + +1. **Durable recovery:** record absolute commands, interpreter/package/harness + identities, input hashes, phase times/logs, exit cause and atomic completion + records. Keep plans/status inspectable and logs durable across terminal loss. + Reuse completed stages only when identities match. Preserve partial evidence, + explicit retry/resume, operator batch/worker overrides and checkpoint stop/ + continue controls. Do not promise arbitrary-batch exact resume without RNG and + sampler state. +2. **Preallocated preparation:** run a tiny installed train → predict → mini_metrics + → export → package fixture before renting GPUs. Keep authentication interactive. + Inference discovery must preserve all truth regardless of vocabulary or training + partition; distinguish taxonomy transport failures from mapping errors. Derive + configuration from weights with explicit legacy overrides. Separate deployment + assets, including ONNX external tensors, from evidence and optional resume history. +3. **Bounded qualification:** separate startup, warm training, first-pass IO, + validation/figures and teardown. Use one relevant topology smoke and storage + calibration; preserve the learning-rate schedule and distinguish allocation + deadline, stage limits and cleanup reserve. Overlap independent work within + resource budgets. + +Acceptance must exercise interruption after preparation, failed child exit, timeout +after saving, logger teardown failure and reuse of completed stages. Track operator +interventions, time to useful work, evaluation turnaround and repeated/failed work. +Use tiny fixtures for workflow contracts and target runs for hardware claims. + +Improve read/staging calibration before building the +[optional prepared dataset](roadmap.md#optional-dataset-preparation-for-scalable-loading). +Include preparation cost and expected reuse; preserve encoded bytes, labels, +splits/order and failures. PTQ/native integer and target-performance work belongs +in the [quantization roadmap](quantization-roadmap.md). + +The campaign-specific staging/evaluation launchers remain in [Git at 852bf71](https://github.com/asgersvenning/mini_trainer/tree/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/dev/ucloud). -They used a source overlay pinned to `0c572ca` and job-specific `/work` paths; -they are not maintained next-run infrastructure. The original 512-reader, -RAM-staging evidence above remains valid. New workflow work should use the public -CLIs and the recovery requirements here rather than revive those launchers. +They used a source overlay pinned to `0c572ca` and job-specific `/work` paths. +Use maintained CLIs for new work; retiring those launchers does not invalidate the +512-reader and RAM-staging evidence above. From 072c43af658ccf8006fd7fdc3a3e6d96c5d65544 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:07:29 +0200 Subject: [PATCH 193/221] refactor: simplify benchmark CLI option forwarding --- dev/benchmarks/training/run.py | 31 +------------------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/dev/benchmarks/training/run.py b/dev/benchmarks/training/run.py index 07d7194..4fa1d45 100644 --- a/dev/benchmarks/training/run.py +++ b/dev/benchmarks/training/run.py @@ -408,36 +408,7 @@ def main(): if args.output.exists(): parser.error("Output directory must be new.") try: - result = run( - args.output, - args.seed, - args.epochs, - device=args.device, - dtype=args.dtype, - cache=args.cache, - num_workers=args.num_workers, - dataset=args.dataset, - data_root=args.data_root, - class_spec=args.class_spec, - cuda_prefetch=args.cuda_prefetch, - quantized_training=args.quantized_training, - compile=args.compile, - compile_mode=args.compile_mode, - compile_optimizer=args.compile_optimizer, - optimizer_cudagraphs=args.optimizer_cudagraphs, - hidden=args.hidden, - backbone=args.backbone, - head=args.head, - normalized=args.normalized, - image_size=args.image_size, - pretrained=args.pretrained, - fine_tune=args.fine_tune, - batch_size=args.batch_size, - cache_workers=args.cache_workers, - model_profile=args.model_profile, - optimizer=args.optimizer, - learning_rate=args.learning_rate, - ) + result = run(**{key: value for key, value in vars(args).items() if key not in ("threads", "allow_nondeterministic")}) except Exception as error: args.output.mkdir(parents=True, exist_ok=True) failure = { From e80c170c99921374e49dac68ace7e9186c16e340 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:13:20 +0200 Subject: [PATCH 194/221] refactor: clarify release evaluation ownership and reporting scope --- dev/releases/mambo_v3/evaluate.py | 1 - dev/releases/mambo_v3/evaluation.md | 16 ++++++++++------ dev/releases/mambo_v3/qualify_precision.py | 4 ++-- dev/releases/mambo_v3/summarize.py | 4 ++-- tests/releases/test_release_evaluation.py | 2 +- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/dev/releases/mambo_v3/evaluate.py b/dev/releases/mambo_v3/evaluate.py index 3a4b9c0..dc84937 100644 --- a/dev/releases/mambo_v3/evaluate.py +++ b/dev/releases/mambo_v3/evaluate.py @@ -12,7 +12,6 @@ from deployment.mambo_deploy import Predictor from deployment.mambo_deploy.augmentation import DEFAULT_TTA, PROFILES -from deployment.mambo_deploy.preprocessing import prepare_batch as prepare_batch from deployment.mambo_deploy.result_worker import ResultWorker from deployment.mambo_deploy.results import Prediction from dev.benchmarks.inference.onnx_inference import file_hash diff --git a/dev/releases/mambo_v3/evaluation.md b/dev/releases/mambo_v3/evaluation.md index 8e011a2..e07618e 100644 --- a/dev/releases/mambo_v3/evaluation.md +++ b/dev/releases/mambo_v3/evaluation.md @@ -33,9 +33,10 @@ prediction runs, or `benchmark` for isolated timing trials, changing the output directory each time. Jobs are sequential; do not overlap timing with other work. The collector checks hashes and applies full, legacy Europe/northern Europe and -updated European lists to each inference batch. Qualification also checks a -custom list equivalent to updated Europe, prediction/embedding agreement and -1280-dimensional unit embeddings. Embeddings are written incrementally to NPY. +updated European lists to each inference batch. It checks custom-list equivalence +to updated Europe and, when requested, finite 1280-dimensional unit embeddings, +written incrementally to NPY. Use the comparison command below to check label +agreement between prediction and embedding collections; this is not automatic. Streaming controls and current ownership boundaries are described in the [pipeline review](../../../docs/mambo-inference-pipeline-review.md). @@ -78,12 +79,15 @@ changes the macro averaging domain. Those later analyses reuse predictions. `run_local benchmark` runs three alternating-order fresh-process trials per PyTorch/ONNX × CPU/CUDA × predictions/embeddings setting. Four-thread CPU uses batches 1/8; GPU adds 32; one-thread CPU adds batch-1 measurements. All cells use -the same seeded 32-image bank, two warmups and seven observations. Preserve raw -observations and trial ranges; this is a bounded sweep, not maximum throughput. +a seeded 32-image bank, two warmups and seven observations for request timings. +Each largest-batch cell also retains three streaming passes over a separate seeded +1,024-image selection. The summary below displays request timings; streaming +observations remain in the source reports. This is a bounded sweep, not maximum throughput. End-to-end timing covers decoding through completed CPU results, including hierarchy reduction and requested embeddings. Prepared-runtime timing omits image -preparation and hierarchy reduction but includes transfers. Runtime import/setup, +preparation and hierarchy reduction but includes transfers; it is a single-view +diagnostic even when request timing uses TTA. Runtime import/setup, predictor construction and lazy first call are separate; neither is cold-boot latency. Nested startup components must not be summed. Reports retain resolved precision, so FP32 reference runs and automatic-precision runs remain distinguishable. diff --git a/dev/releases/mambo_v3/qualify_precision.py b/dev/releases/mambo_v3/qualify_precision.py index 05538e1..c5535a5 100644 --- a/dev/releases/mambo_v3/qualify_precision.py +++ b/dev/releases/mambo_v3/qualify_precision.py @@ -10,10 +10,10 @@ import numpy as np from deployment.mambo_deploy import Predictor -from deployment.mambo_deploy.preprocessing import preprocess +from deployment.mambo_deploy.preprocessing import prepare_batch, preprocess from deployment.mambo_deploy.results import Prediction, hierarchy from dev.benchmarks.inference.onnx_inference import file_hash -from dev.releases.mambo_v3.evaluate import prepare_batch, runtime_settings +from dev.releases.mambo_v3.evaluate import runtime_settings from dev.releases.mambo_v3.evaluation_data import CSV_COLUMNS, PRESETS, canonical_rows, load_records, write_json diff --git a/dev/releases/mambo_v3/summarize.py b/dev/releases/mambo_v3/summarize.py index 15fc0f4..8869385 100644 --- a/dev/releases/mambo_v3/summarize.py +++ b/dev/releases/mambo_v3/summarize.py @@ -95,7 +95,7 @@ def summarize(quality, benchmarks, output): "# Local MAMBO release qualification", "", f"Full {report_dataset} evaluation: {report_samples:,} images / {report_species} truth species. " - "All predictions are unthresholded. Both backends use FP32 and the same release image recipe.", + "All predictions are unthresholded. See source reports for runtime precision and host details.", "", "## Full-dataset species results", "", @@ -113,7 +113,7 @@ def summarize(quality, benchmarks, output): "", "## End-to-end latency and throughput", "", - "Laptop measurements; updated Europe, four CPU threads, three alternating-order trials. " + "Updated Europe, four CPU threads, three alternating-order trials. " "Batch latency includes image decoding, preprocessing, transfers, hierarchy reduction and optional embeddings. " "p95 is descriptive of the retained observations, not a service-level guarantee.", "", diff --git a/tests/releases/test_release_evaluation.py b/tests/releases/test_release_evaluation.py index f61d5fc..3caba29 100644 --- a/tests/releases/test_release_evaluation.py +++ b/tests/releases/test_release_evaluation.py @@ -118,7 +118,7 @@ def test_threaded_preprocessing_is_byte_identical_and_ordered(tmp_path): from PIL import Image - from dev.releases.mambo_v3.evaluate import prepare_batch + from deployment.mambo_deploy.preprocessing import prepare_batch paths = [] for i in range(5): From cbcb5a3c8d99e0f1315bf27d8724571ac291ec06 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:17:21 +0200 Subject: [PATCH 195/221] refactor: retire superseded padded-scale report plots --- dev/releases/mambo_v3/defaults_report.py | 141 +---------------------- docs/mambo-deployment-defaults.md | 10 +- 2 files changed, 9 insertions(+), 142 deletions(-) diff --git a/dev/releases/mambo_v3/defaults_report.py b/dev/releases/mambo_v3/defaults_report.py index cf232c5..3a8cde1 100644 --- a/dev/releases/mambo_v3/defaults_report.py +++ b/dev/releases/mambo_v3/defaults_report.py @@ -1,4 +1,4 @@ -"""Release overview: V2, automatic V3 and the enabled-TTA default on full Flemming.""" +"""Historical padded-scale evidence: regional effect, complete metrics and provenance.""" import argparse import csv @@ -7,7 +7,7 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.acceleration_report import METRICS, aggregate -from dev.releases.mambo_v3.comparison_charts import REGION_LABELS, REGIONS, completed +from dev.releases.mambo_v3.comparison_charts import completed from dev.releases.mambo_v3.evaluation_data import write_json from dev.releases.mambo_v3.metrics import REVISION @@ -86,78 +86,8 @@ def render(data, output): output.mkdir(parents=True, exist_ok=True) plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-defaults-v1", "axes.spines.top": False, "axes.spines.right": False}) - for level, rank in enumerate(("species", "genus", "family")): - for scope in ("all", "known"): - fig, axes = plt.subplots(2, 2, figsize=(13, 8)) - for ax, (metric, title) in zip( - axes.flat, - ( - ("accuracy", "Macro accuracy (%)"), - ("f1", "Macro-F1"), - ("precision", "Macro precision"), - ("micro_accuracy", "Micro accuracy (%)"), - ), - strict=True, - ): - factor = 100 if "accuracy" in metric else 1 - for i, (model, label, color) in enumerate(SERIES): - values = [ - next(r for r in data["quality"] if (r["model"], r["preset"]) == (model, preset))["scores"][scope][metric][ - str(level) - ] - * factor - for preset in REGIONS - ] - bars = ax.bar(np.arange(3) + (i - 2) * 0.16, values, 0.16, label=label, color=color) - ax.bar_label(bars, fmt="%.1f" if factor == 100 else "%.3f", rotation=60, fontsize=8, padding=3) - upper = 105 if factor == 100 else min(1, max(bar.get_height() for bar in ax.patches) * 1.35) - ax.set(title=title, xticks=np.arange(3), xticklabels=REGION_LABELS, ylim=(0, upper)) - ax.grid(axis="y", alpha=0.15) - ax.set_axisbelow(True) - fig.suptitle(f"MAMBO release comparison · {rank} metrics · {scope} truth", fontsize=16) - fig.legend(*axes[0, 0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.95), ncol=3, frameon=False) - fig.text( - 0.02, - 0.015, - "All: 58,640 images. Known: species 50,598; genus 58,639–58,640 by preset; family 58,640.\n" - "TTA: original + two padded views; selected on a Flemming subset, not independently validated.\n" - "Same legacy vocabularies across releases; tables also retain updated European lists and both truth populations.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.10, 1, 0.88)) - suffix = "" if rank == "species" else f"-{rank}" - save_figure(fig, output, f"mambo-defaults-quality{suffix}-{scope}") - scores = {(r["model"], r["preset"]): r["scores"]["all"] for r in data["quality"]} rank_metrics = (("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1)) - labels = ["V2", "V3\nPyTorch", "V3\nONNX", "V3 PyTorch\n+ TTA", "V3 ONNX\n+ TTA"] - fig, axes = plt.subplots(3, 2, figsize=(11, 10)) - for level, rank in enumerate(("species", "genus", "family")): - for col, (metric, title, factor) in enumerate(rank_metrics): - ax = axes[level, col] - values = [scores[model, "north_europe"][metric][str(level)] * factor for model, _, _ in SERIES] - bars = ax.bar(range(5), values, color=[color for _, _, color in SERIES]) - ax.bar_label(bars, fmt="%.2f" if factor == 100 else "%.4f", padding=3, fontsize=9) - ax.set( - title=f"{rank.title()} · {title}", - xticks=range(5), - xticklabels=labels, - ylim=(0, 100 if factor == 100 else max(values) * 1.2), - ) - ax.grid(axis="y", alpha=0.15) - ax.set_axisbelow(True) - fig.suptitle("V2 vs V3 vs V3 + TTA · legacy northern Europe", fontsize=16) - fig.text( - 0.02, - 0.015, - "All truth: 58,640 images; 522 species / 322 genera / 23 families. Pinned mini_metrics; threshold 0.\n" - "Macro accuracy weights truth taxa equally; macro-F1 also includes predicted-only taxa. V3 uses automatic GPU precision.\n" - "TTA: original + two padded views; recipe selected on a subset of Flemming, not independently validated.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.09, 1, 0.96)) - save_figure(fig, output, "mambo-defaults-ranks-all") - fig, axes = plt.subplots(3, 2, figsize=(11, 9)) steps = (("full", "europe"), ("europe", "north_europe")) for level, rank in enumerate(("species", "genus", "family")): @@ -208,73 +138,6 @@ def render(data, output): fig.tight_layout(rect=(0, 0.10, 1, 0.89)) save_figure(fig, output, "mambo-defaults-regional-effect") - fig, axes = plt.subplots(1, 2, figsize=(12, 5.5)) - for ax, device, batches in zip(axes, ("cpu", "cuda:0"), ((1, 8), (1, 8, 32)), strict=True): - for model, label, color in SERIES: - rows = [ - next(r for r in data["speed"] if (r["model"], r["device"], r["preset"], r["batch"]) == (model, device, "north_europe", b)) - for b in batches - ] - values = np.array([r["images_per_second"] for r in rows]) - lo = np.array([r["trial_min_ips"] for r in rows]) - hi = np.array([r["trial_max_ips"] for r in rows]) - ax.errorbar( - range(len(batches)), - values, - yerr=[values - lo, hi - values], - marker="o", - capsize=3, - color=color, - label=label, - linestyle="--" if model.endswith("tta") else "-", - ) - ax.set( - title="CPU · FP32" if device == "cpu" else "GPU · automatic precision", - xlabel="Images per batch", - ylabel="End-to-end images / second", - xticks=range(len(batches)), - xticklabels=batches, - ylim=(0, None), - ) - ax.grid(axis="y", alpha=0.2) - fig.suptitle("Complete-pipeline throughput · northern Europe", fontsize=16) - fig.legend(*axes[0].get_legend_handles_labels(), loc="upper center", bbox_to_anchor=(0.5, 0.94), ncol=3, frameon=False) - fig.text( - 0.02, - 0.015, - "i7-12800H / RTX 3080 Ti Laptop, WSL2; four CPU/preparation threads; same image bank.\n" - "Three fresh processes × seven observations; bars show trial-median range. Decode through CPU results included.\n" - "V2 and unaugmented V3 reuse recorded measurements; laptop conditions vary between campaigns. V2 CPU uses input cast.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.16, 1, 0.85)) - save_figure(fig, output, "mambo-defaults-speed") - - fig, axes = plt.subplots(1, 2, figsize=(11, 5)) - for ax, device in zip(axes, ("cpu", "cuda:0"), strict=True): - values = [next(r for r in data["resources"] if (r["model"], r["device"]) == (m, device))["rss_mib"] for m, _, _ in SERIES] - bars = ax.bar(range(5), values, color=[color for _, _, color in SERIES]) - ax.bar_label(bars, fmt="%.0f", padding=3) - ax.set( - title="CPU execution" if device == "cpu" else "GPU execution", - ylabel="Peak host RSS (MiB)", - xticks=range(5), - xticklabels=["V2", "V3\ntorch", "V3\nONNX", "torch\n+ TTA", "ONNX\n+ TTA"], - ylim=(0, max(values) * 1.15), - ) - ax.grid(axis="y", alpha=0.2) - ax.set_axisbelow(True) - fig.suptitle("Process memory · median of three fresh processes", fontsize=15) - fig.text( - 0.02, - 0.02, - "Host memory, not GPU VRAM; includes loading and complete CPU 1/8 or GPU 1/8/32 batch sweep.\n" - "TTA retains original decoded images for each batch; memory depends on source dimensions.", - fontsize=9, - ) - fig.tight_layout(rect=(0, 0.12, 1, 0.93)) - save_figure(fig, output, "mambo-defaults-memory") - with (output / "mambo-defaults-metrics.csv").open("w", newline="") as stream: writer = csv.writer(stream, lineterminator="\n") writer.writerow(["variant", "preset", "scope", "rank", "images", *METRICS]) diff --git a/docs/mambo-deployment-defaults.md b/docs/mambo-deployment-defaults.md index 70a73a7..28cd154 100644 --- a/docs/mambo-deployment-defaults.md +++ b/docs/mambo-deployment-defaults.md @@ -74,10 +74,10 @@ sweep; PyTorch allocated GPU bytes are not total VRAM or an ONNX measurement. First use excludes interpreter launch and explicit runtime setup. V2 CPU used the documented float32 input cast. Use the current README for adoption decisions. -## Reproduce the historical presentation +## Reproduce the regional figure and metric table -All retired per-rank/regional, speed and memory plots can be regenerated from the -retained JSON without inference or recalculating metrics: +Regenerate the retained figure and complete exports without inference or +recalculating metrics: ```sh python -m dev.releases.mambo_v3.defaults_report \ @@ -85,6 +85,10 @@ python -m dev.releases.mambo_v3.defaults_report \ --output /tmp/mambo-historical-defaults ``` +Retired per-rank, speed and memory plots remain reproducible with the +[historical generator](https://github.com/asgersvenning/mini_trainer/blob/e80c170c99921374e49dac68ace7e9186c16e340/dev/releases/mambo_v3/defaults_report.py) +and retained JSON. + The [release comparison runbook](../dev/releases/mambo_v3/release-comparison.md) describes collecting new evidence. Pin `padded_scale` explicitly when reproducing this historical recipe; bare `tta=True` selects the current default. From 9e0cda066b0612026da9728dcb44eb488964991a Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:20:46 +0200 Subject: [PATCH 196/221] refactor: keep one maintained TTA selection narrative --- dev/releases/mambo_v3/composed_report.py | 57 +----------------------- docs/assets/mambo-composed-tta.svg | 6 +-- docs/mambo-composed-tta.md | 7 ++- 3 files changed, 10 insertions(+), 60 deletions(-) diff --git a/dev/releases/mambo_v3/composed_report.py b/dev/releases/mambo_v3/composed_report.py index 55d7342..578bf13 100644 --- a/dev/releases/mambo_v3/composed_report.py +++ b/dev/releases/mambo_v3/composed_report.py @@ -1,4 +1,4 @@ -"""Readable full-data composed-TTA report from pinned metric evidence.""" +"""Exploratory composed-TTA figure from retained metric evidence.""" import argparse import json @@ -9,7 +9,7 @@ SERIES = ( ("v2", "MAMBO v2", "#8064a2"), ("torch", "V3 single view", "#777777"), - ("torch-tta", "Current padded scale", "#098e92"), + ("torch-tta", "Previous padded scale", "#098e92"), ("torch:rotation30_pad15_3", "±30° / pad15 · 3 views", "#2d6cc0"), ("torch:rotation30_pad25_3", "±30° / pad25 · 3 views", "#e8872e"), ("torch:wide_rotation_mixed_padding_5", "Mixed padding · 5 views", "#98440b"), @@ -77,58 +77,6 @@ def render(data, output): save_figure(fig, output, "mambo-composed-tta", dpi=150) -def tables(data, output): - text = "# Full composed-TTA comparison\n\n" - text += ( - "All quality results below use the same **52,788 reporting images**, with thresholds fitted on\n" - "5,852 separate calibration images. Every model uses legacy northern Europe and all truth,\n" - "including out-of-vocabulary labels. Metrics come from pinned `mini_metrics`. Recipe selection\n" - "used this dataset, including a reporting subset; this is not independent validation.\n\n" - "Metric cells show **full support / common support >5**. The latter requires more than five\n" - "truth instances and accepted predictions in every compared pipeline, separately per operating\n" - "point. Classes can differ between operating points. No evaluation rows are dropped.\n\n" - ) - for scope, title in (("zero", "No confidence threshold"), ("optimized", "Recipe-specific calibrated thresholds")): - text += f"## {title}\n\n" - for level, rank in enumerate(("species", "genus", "family")): - k = str(level) - text += ( - f"### {rank.title()}\n\n| Pipeline | Macro accuracy: full / >5 | Macro-F1: full / >5 | Coverage |\n|---|---:|---:|---:|\n" - ) - for model, label, _ in SERIES: - point = data["models"][model]["operating_points"][scope] - full, tail = point["full"], point["tail"][k]["metrics"] - text += ( - f"| {label} | {full['accuracy'][k]:.2%} / {tail['accuracy']:.2%} " - f"| {full['f1'][k]:.4f} / {tail['f1']:.4f} | {full['coverage'][k]:.2%} |\n" - ) - text += "\n" - text += "![Calibrated, unthresholded and matched-coverage comparison](assets/mambo-composed-tta.svg)\n\n" - text += ( - "## Support excluded from the averaging domain\n\n" - "| Setting | Rank | Common classes | Truth images outside / % |\n|---|---|---:|---:|\n" - ) - for scope in ("zero", "optimized", "coverage_70", "coverage_80", "coverage_90"): - for k, rank in enumerate(("species", "genus", "family")): - row = data["models"]["torch"]["operating_points"][scope]["tail"][str(k)] - missing = 52788 - row["truth_images"] - text += f"| {scope} | {rank} | {row['class_count']} | {missing:,} / {missing / 52788:.2%} |\n" - text += ( - "\nPredicted-only classes have zero truth images and can still strongly affect macro-F1.\n" - "These are not rejection counts. Coverage is unchanged by support truncation.\n\n" - "## Evidence and interpretation\n\n" - "The [CSV](assets/mambo-composed-tta.csv) includes both backends, all ranks, macro accuracy,\n" - "precision, recall, F1, micro accuracy, Theil U, coverage, thresholds and retained-support counts.\n" - "The [JSON](assets/mambo-composed-tta.json) also records exact class sets, source hashes and\n" - "partition identities. Its ONNX entries include native-threshold comparisons to distinguish\n" - "backend differences from calibration differences.\n\n" - "Matched-coverage thresholds are selected from reporting confidence scores without using truth\n" - "labels; their realized coverage is computed by mini_metrics and may differ slightly because of\n" - "ties. They are diagnostic operating points, not deployment-calibrated thresholds.\n" - ) - (output / "mambo-composed-tta.md").write_text(text) - - if __name__ == "__main__": parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--data", type=Path, required=True) @@ -136,4 +84,3 @@ def tables(data, output): args = parser.parse_args() data = json.loads(args.data.read_text()) render(data, args.output) - tables(data, args.output) diff --git a/docs/assets/mambo-composed-tta.svg b/docs/assets/mambo-composed-tta.svg index 1bcad34..26277da 100644 --- a/docs/assets/mambo-composed-tta.svg +++ b/docs/assets/mambo-composed-tta.svg @@ -397,7 +397,7 @@ L 427.785521 187.007742 - Current padded scale + Previous padded scale @@ -1345,7 +1345,7 @@ L 427.785521 405.407742 - Current padded scale + Previous padded scale @@ -2245,7 +2245,7 @@ L 427.785521 623.807742 - Current padded scale + Previous padded scale diff --git a/docs/mambo-composed-tta.md b/docs/mambo-composed-tta.md index 5f70477..45b8298 100644 --- a/docs/mambo-composed-tta.md +++ b/docs/mambo-composed-tta.md @@ -33,7 +33,9 @@ Matched-coverage thresholds use reporting confidences without labels and retain ties. They are diagnostic operating points, distinct from thresholds optimized on the calibration split. Support >5 results in this study intersect eleven pipelines and therefore differ from the current five-pipeline comparison. -No rows are removed when truncating the class macro average. +No rows are removed when truncating the class macro average. Compare all three +ranks in the [exploratory figure](assets/mambo-composed-tta.svg) and +[complete metric table](assets/mambo-composed-tta.csv). ## Provenance @@ -44,7 +46,8 @@ Collection timings are not speed benchmarks: the native and ONNX jobs overlapped For replay, use [composed_full.py](../dev/releases/mambo_v3/composed_full.py), [composed_metrics.py](../dev/releases/mambo_v3/composed_metrics.py) and -[composed_report.py](../dev/releases/mambo_v3/composed_report.py). +[composed_report.py](../dev/releases/mambo_v3/composed_report.py) for the figure. +The CSV retains the full tables; this selection page is maintained separately. The [historical report](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-composed-tta.md) records exact commands and the native run's older nested precision-metadata caveat; its top-level `effective_precision=fp16` describes actual execution. From 9e6c41c93d17a5c0d44e5b23068c720bf328ad39 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:23:02 +0200 Subject: [PATCH 197/221] refactor: share UCloud measurement identity fields --- dev/releases/mambo_v3/ucloud_summary.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/dev/releases/mambo_v3/ucloud_summary.py b/dev/releases/mambo_v3/ucloud_summary.py index b824e06..64de2b6 100644 --- a/dev/releases/mambo_v3/ucloud_summary.py +++ b/dev/releases/mambo_v3/ucloud_summary.py @@ -64,18 +64,21 @@ def summarize(root, output): else: banks.add(bank_identity(directory, r)) for c in r["cells"]: + identity = { + "environment_id": data["environment_id"], + "variant": job["variant"], + "device": job["device"], + "trial": job["name"], + "preset": c["preset"], + "batch_size": c["batch_size"], + } if "streaming" in c: stream = c["streaming"] if len(stream["seconds"]) != 3 or any(v <= 0 for v in stream["seconds"]): raise ValueError("Require three positive streaming observations") data["streaming_speed"].append( { - "environment_id": data["environment_id"], - "variant": job["variant"], - "device": job["device"], - "trial": job["name"], - "preset": c["preset"], - "batch_size": c["batch_size"], + **identity, "images": stream["images"], "images_per_second": stream["images"] / statistics.median(stream["seconds"]), "seconds": stream["seconds"], @@ -86,12 +89,7 @@ def summarize(root, output): raise ValueError("Require seven positive completed observations") data["speed"].append( { - "environment_id": data["environment_id"], - "variant": job["variant"], - "device": job["device"], - "trial": job["name"], - "preset": c["preset"], - "batch_size": c["batch_size"], + **identity, "images_per_second": c["batch_size"] / statistics.median(seconds), "seconds": seconds, "peak_host_rss_mib": r["peak_rss_kib_linux"] / 1024, From 3839e544bd48d625ac3b47eec08c26380a687986 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:25:48 +0200 Subject: [PATCH 198/221] refactor: remove superseded UCloud preparation CLI --- dev/releases/mambo_v3/prepare_ucloud.py | 46 +------------------------ 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/dev/releases/mambo_v3/prepare_ucloud.py b/dev/releases/mambo_v3/prepare_ucloud.py index d2ce8cc..d12ae44 100644 --- a/dev/releases/mambo_v3/prepare_ucloud.py +++ b/dev/releases/mambo_v3/prepare_ucloud.py @@ -1,6 +1,5 @@ -"""Recover original UCloud test identities; verify-only works without the image dataset.""" +"""Recover original test identities from archived staging and truth for UCloud setup.""" -import argparse import csv import json import tomllib @@ -8,7 +7,6 @@ from dev.benchmarks.inference.onnx_inference import file_hash from dev.releases.mambo_v3.audit import HERE -from dev.releases.mambo_v3.evaluation_data import write_json def recover(metadata, staging, reference, test_set="0"): @@ -50,45 +48,3 @@ def recover(metadata, staging, reference, test_set="0"): if len(seen) != len(truth) * 3: raise ValueError("Incomplete archived predictions") return [{"path": name, "labels": labels, "split": "test"} for name, labels in sorted(truth.items())] - - -def main(): - parser = argparse.ArgumentParser(description=__doc__) - for name in ("metadata", "staging", "reference", "output"): - parser.add_argument(f"--{name}", type=Path, required=True) - parser.add_argument("--root", type=Path) - parser.add_argument("--verify-only", action="store_true") - parser.add_argument("--test-set", default="0") - args = parser.parse_args() - if args.output.exists(): - raise FileExistsError(args.output) - records = recover(args.metadata, args.staging, args.reference, args.test_set) - if len(records) != 632913: - raise ValueError("Expected 632,913 original test images") - provenance = {key: file_hash(getattr(args, key)) for key in ("metadata", "staging", "reference")} - provenance["test_set"] = args.test_set - if args.verify_only: - write_json( - args.output, - { - "status": "verified-identities-only", - "images": len(records), - "provenance": provenance, - "limitation": "Image existence and bytes not verified locally", - }, - ) - else: - if args.root is None: - parser.error("--root is required unless --verify-only") - for i, record in enumerate(records): - path = (args.root / record["path"]).resolve() - if not path.is_relative_to(args.root.resolve()): - raise ValueError("Unsafe original path") - record["sha256"] = file_hash(path) - if i % 10000 == 0: - print(f"Hashed {i}/{len(records)}", flush=True) - write_json(args.output, {"schema_version": 1, "dataset": "global-lepi-test", "provenance": provenance, "records": records}) - - -if __name__ == "__main__": - main() From e452fe4aa1b8286945196fc6db9f3688d0853762 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:31:20 +0200 Subject: [PATCH 199/221] refactor: retire superseded full-dataset tail chart --- .../mambo_v3/deployment-qualification.md | 2 +- dev/releases/mambo_v3/tail_charts.py | 66 +------------------ 2 files changed, 3 insertions(+), 65 deletions(-) diff --git a/dev/releases/mambo_v3/deployment-qualification.md b/dev/releases/mambo_v3/deployment-qualification.md index 07c9c5a..5f2abe1 100644 --- a/dev/releases/mambo_v3/deployment-qualification.md +++ b/dev/releases/mambo_v3/deployment-qualification.md @@ -71,7 +71,7 @@ Reproduce the current quality tables and figure: ```sh /tmp/mambo-release-metrics/bin/python -m dev.releases.mambo_v3.promoted_report \ --quality docs/assets/mambo-composed-tta.json --output /tmp/promoted-report -.venv/bin/python -m dev.releases.mambo_v3.tail_charts --paired \ +.venv/bin/python -m dev.releases.mambo_v3.tail_charts \ --data /tmp/promoted-report/mambo-promoted-tail.json --output /tmp/promoted-report ``` diff --git a/dev/releases/mambo_v3/tail_charts.py b/dev/releases/mambo_v3/tail_charts.py index 9007044..29cb4a6 100644 --- a/dev/releases/mambo_v3/tail_charts.py +++ b/dev/releases/mambo_v3/tail_charts.py @@ -1,4 +1,4 @@ -"""Plot full and truncated macro metrics, optionally comparing confidence settings.""" +"""Compare full and truncated macro metrics at both confidence settings.""" import argparse import json @@ -9,67 +9,6 @@ from .figure_export import save_figure -def render(data, output): - import matplotlib - - matplotlib.use("Agg") - import matplotlib.pyplot as plt - from matplotlib.lines import Line2D - - if data.get("population") != "full_dataset": - raise ValueError("Expected full-dataset results") - rows = {(r["model"], r["rank"], r["cutoff"], r["domain"]): r for r in data["rows"] if r["scope"] == "zero"} - plt.rcParams.update({"svg.fonttype": "none", "svg.hashsalt": "mambo-tail-v1", "axes.spines.top": False, "axes.spines.right": False}) - fig, axes = plt.subplots(3, 2, figsize=(12, 11)) - for level, rank in enumerate(("species", "genus", "family")): - retained = rows["v2", rank, 5, "common"] - total = retained["report_images"] - excluded = total - retained["truth_images_in_retained_classes"] - for col, (metric, title, factor) in enumerate((("accuracy", "Macro accuracy (%)", 100), ("f1", "Macro-F1", 1))): - ax = axes[level, col] - for i, (model, _, color) in enumerate(SERIES): - baseline = rows[model, rank, -1, "per_model"]["metrics"][metric] * factor - truncated = rows[model, rank, 5, "common"]["metrics"][metric] * factor - ax.plot([baseline, truncated], [i, i], color=color, alpha=0.5) - ax.scatter(baseline, i, facecolors="white", edgecolors=color, s=65, zorder=3) - ax.scatter(truncated, i, color=color, s=65, zorder=3) - ax.set( - title=( - f"{rank.title()} · {title}\n>5: {retained['class_count']} classes; " - f"{excluded:,} truth images outside ({excluded / total:.2%})" - ), - yticks=range(5), - yticklabels=[label for _, label, _ in SERIES] if col == 0 else [], - xlim=(0, factor), - ylim=(4.6, -0.6), - ) - ax.grid(axis="x", alpha=0.15) - fig.suptitle("Full support and tail-truncated metrics · legacy northern Europe", fontsize=15) - fig.legend( - handles=[ - Line2D( - [], [], marker="o", color="gray", markerfacecolor="white", linestyle="none", label="Full support (>−1; per-model classes)" - ), - Line2D([], [], marker="o", color="gray", linestyle="none", label="Support >5 in truth AND predictions (common classes)"), - ], - loc="upper center", - bbox_to_anchor=(0.5, 0.955), - ncol=2, - ) - fig.text( - 0.03, - 0.02, - "58,640 Flemming images; confidence threshold 0; pinned mini_metrics. TTA: padded scale.\n" - "No evaluation rows removed: FP/FN remain; only the macro averaging domain changes.\n" - "Outside counts refer to truth classes, not confidence rejection. Truncation excludes predicted-only classes.\n" - "Descriptive comparison; TTA was selected on a subset of the same dataset.", - fontsize=10, - ) - fig.tight_layout(rect=(0, 0.10, 1, 0.92)) - output.mkdir(parents=True, exist_ok=True) - save_figure(fig, output, "mambo-defaults-tail") - - def render_paired(data, output): import matplotlib @@ -149,6 +88,5 @@ def render_paired(data, output): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--data", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) - parser.add_argument("--paired", action="store_true", help="Compare both confidence settings on the reporting partition") args = parser.parse_args() - (render_paired if args.paired else render)(json.loads(args.data.read_text()), args.output) + render_paired(json.loads(args.data.read_text()), args.output) From 4f3b2bd37a7b53d4426bf2df23d2d7778298b769 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:34:06 +0200 Subject: [PATCH 200/221] docs: remove obsolete campaign navigation --- dev/worktrees.md | 5 ++--- docs/archive/benchmark-history.md | 11 ----------- 2 files changed, 2 insertions(+), 14 deletions(-) delete mode 100644 docs/archive/benchmark-history.md diff --git a/dev/worktrees.md b/dev/worktrees.md index b8c56eb..3677def 100644 --- a/dev/worktrees.md +++ b/dev/worktrees.md @@ -2,14 +2,13 @@ Use one Git worktree per active feature. Worktrees have independent tracked files, indexes and checked-out branches; commits, refs and Git configuration are shared. -The current prototype exploration starts from `quant`, whose diagnostic functions -are the reference for that work. Choose the base explicitly for other features. +Choose the base revision for the task explicitly. From the main checkout: ```bash git worktree list -git worktree add -b feature/my-feature .worktrees/my-feature quant +git worktree add -b feature/my-feature .worktrees/my-feature YOUR_BASE_REF ``` `/.worktrees/` is ignored on branches carrying this guide. For older branches, diff --git a/docs/archive/benchmark-history.md b/docs/archive/benchmark-history.md deleted file mode 100644 index 188a9c1..0000000 --- a/docs/archive/benchmark-history.md +++ /dev/null @@ -1,11 +0,0 @@ -# Historical benchmark notebook - -The detailed chronological notebook is preserved in [Git at `f5c69e7`](https://github.com/asgersvenning/mini_trainer/blob/f5c69e7cab2bfde8a5467026b293858b93e628f9/docs/archive/benchmark-history.md). -It includes exact local configurations, negative experiments and superseded results. -Use [current findings](../benchmarks.md) for conclusions and -[the roadmap](../quantization-roadmap.md) for remaining work. - -Raw evidence and final model retention are described in -[the artifact inventory](../quantization-artifacts.md). Old temporary paths require -restoration; historical commands use the former flat benchmark module paths. -Current commands live in [the benchmark guide](../../dev/benchmarks/README.md). From a89a4d08d5f71ba993d81dc378d4166220b88468 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:37:27 +0200 Subject: [PATCH 201/221] docs: clarify evidence scope and trim repeated preset prose --- dev/releases/mambo_v3/build_presets.py | 8 +------- docs/mambo-deployment-evidence.md | 4 ++-- docs/mambo-frequency-comparison.md | 4 ++-- docs/mambo-tta.md | 12 ++++++------ docs/model-presets.md | 4 ++-- 5 files changed, 13 insertions(+), 19 deletions(-) diff --git a/dev/releases/mambo_v3/build_presets.py b/dev/releases/mambo_v3/build_presets.py index 0a6421c..1b2190d 100644 --- a/dev/releases/mambo_v3/build_presets.py +++ b/dev/releases/mambo_v3/build_presets.py @@ -258,15 +258,9 @@ def build(metadata, evidence_root, write=False): "", "## Interpretation and reproducibility", "", - "Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. " - "Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. " - "Arctic uses latitude at least 60°N across all countries, including the boundary; " - "missing, malformed or out-of-range latitudes are excluded. This broad northern scope includes subarctic areas. " "Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation.", "", - "Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes " - "Australian records with blank or different state values. " - "Overlapping presets are expected; membership in one does not exclude another.", + "Blank geographic fields match no predicate unless another selected field matches.", "", "Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest:", "", diff --git a/docs/mambo-deployment-evidence.md b/docs/mambo-deployment-evidence.md index 63072ef..c7f6178 100644 --- a/docs/mambo-deployment-evidence.md +++ b/docs/mambo-deployment-evidence.md @@ -118,8 +118,8 @@ image-bank measurements; laptop conditions can vary between campaigns. The [timing evidence](assets/mambo-promoted-speed.json) retains trial ranges and process-memory measurements. The [earlier comparison](mambo-deployment-defaults.md) -and [frequency curves](mambo-frequency-comparison.md) use the previous -padded-scale TTA and remain historical evidence, not measurements of the new recipe. +uses the previous padded-scale TTA; the [frequency curves](mambo-frequency-comparison.md) +compare single-view models only. Neither measures the new recipe. The [loading study](mambo-loading-scaling.md) explains scheduling limits; `preprocess_workers` / `--preprocess-workers` tunes preparation separately from ONNX runtime `threads` and defaults to it. diff --git a/docs/mambo-frequency-comparison.md b/docs/mambo-frequency-comparison.md index e4afed4..100ec0f 100644 --- a/docs/mambo-frequency-comparison.md +++ b/docs/mambo-frequency-comparison.md @@ -1,7 +1,7 @@ # Accuracy versus class frequency -**Historical padded-scale TTA evidence.** The [deployment README](../deployment/README.md#release-comparison) -contains the current rotation-and-padding default comparison. +Single-view V2/V3 evidence. For the comparison including default TTA, see the +[deployment README](../deployment/README.md#release-comparison). ![Macro accuracy by training and evaluation frequency](assets/mambo-frequency-accuracy.svg) diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index 3e0ea47..de821a4 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -38,17 +38,17 @@ training-pipeline RNG or noise-placement equivalence. These are convenience profiles, not restrictions on the interface. `TTA` accepts an ordered finite sequence of arbitrary callables. `View` implements fractional crops, quarter-turn rotations and reflection; arbitrary rotations, scales, color -transforms or other policies can be supplied by a caller. Each callable receives +transforms or other policies can be supplied by a caller. Each custom callable receives its own uint8 RGB CHW copy of the decoded image. It can return a CHW array or PIL image accepted by the existing preprocessing function. Random custom transforms are the caller's responsibility; built-ins are deterministic. Give custom policies a descriptive name for output provenance. -For each image batch, the outer layer decodes once, prepares one view at a time, -and invokes the ordinary runtime. Runtime batches never grow by the view count. -It retains the decoded batch and the current prepared view, not all prepared views. -Host memory also depends on original image dimensions; use smaller batches for -large source images. Species logits are averaged in FP32, then the ordinary class mask, hierarchy and +Images are decoded once; each view uses ordinary inference with the configured +batch size. The request API prepares one view at a time; streaming buffers all +views of its prefetched batches. Memory therefore grows with source dimensions, +batch size and streaming prefetch; reduce those settings when needed. +Species logits are averaged in FP32, then the ordinary class mask, hierarchy and confidence normalization are applied. This is **logit averaging**, not voting or averaging already-normalized probabilities. Preset and custom-list semantics stay aligned. Output metadata records the policy name and view count. diff --git a/docs/model-presets.md b/docs/model-presets.md index 374316f..0868100 100644 --- a/docs/model-presets.md +++ b/docs/model-presets.md @@ -90,9 +90,9 @@ Rebuild the figure and exact shared-count/percentage table with `.venv/bin/pytho ## Interpretation and reproducibility -Mexico belongs to North and Central America; Costa Rica and Panama belong to Central and South America. Australia includes Tasmania; Tasmania-only uses the explicit state field and does not mean endemic-only. Arctic uses latitude at least 60°N across all countries, including the boundary; missing, malformed or out-of-range latitudes are excluded. This broad northern scope includes subarctic areas. Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. +Regional restrictions change score normalization; excluded truth labels must remain visible in evaluation. -Blank geographic fields match no predicate unless another selected field matches. The Tasmania preset excludes Australian records with blank or different state values. Overlapping presets are expected; membership in one does not exclude another. +Blank geographic fields match no predicate unless another selected field matches. Run from the repository root with the existing PyArrow environment and the previously downloaded model manifest: From abdf2746cb5b9d643db9f0318d927ab1a818ba5c Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:40:42 +0200 Subject: [PATCH 202/221] docs: focus x86 quantization guide on its supported API --- docs/quantization.md | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/docs/quantization.md b/docs/quantization.md index 67b744d..d8531d7 100644 --- a/docs/quantization.md +++ b/docs/quantization.md @@ -1,12 +1,12 @@ -# INT8 quantization: initial x86 backend +# x86 INT8 calibration and QAT -This is an opt-in Python API for **static INT8 weights and UINT8 activation storage**, -using TorchAO PT2E. Actual quantized training with reduced memory and training -time now has an initial [CUDA model integration](quantized-training.md); see the [QT/loader probes](../dev/benchmarks/training.md#capacity-and-bottleneck-probes). It supports post-training calibration (PTQ) and -quantization-aware training (QAT). QAT uses fake quantization with float32 master -parameters/gradients; it does not promise integer backward computation or reduced -training memory. Converted inference executes native oneDNN integer Conv/Linear -kernels. This is separate from float16/bfloat16 AMP. +The opt-in `mini_trainer.modeling.quantization` API uses TorchAO PT2E for +post-training calibration (PTQ) and quantization-aware training (QAT). +Converted inference executes oneDNN integer Conv/Linear kernels with static INT8 +weights and UINT8 activations. QAT uses fake quantization and float32 master +parameters/gradients; it does not promise reduced training memory or integer +backward computation. [Native CUDA INT8 training](quantized-training.md) has a +separate implementation and qualification scope. Install the optional dependency in an explicitly selected backend environment: @@ -15,9 +15,8 @@ uv sync --extra cpu --extra quantization # Existing CUDA environments: do not run a CPU sync; select their CUDA extra. ``` -The first verified backend is x86 CPU with PyTorch 2.12 and TorchAO 0.17. -TorchAO is imported lazily. Ordinary training, prediction, checkpoint formats and -ONNX export are unchanged. The new API is in `mini_trainer.modeling.quantization`. +The recorded x86 qualification uses PyTorch 2.12 and TorchAO 0.17. TorchAO is +loaded only when this API is used; ordinary training and prediction are unchanged. ## Calibration and inference @@ -107,7 +106,7 @@ and BatchNorm; arbitrary Python training branches are specialized by capture. Autoregressive teacher-forcing/sampling requires a separate training integration and is not currently a supported QAT claim. Capture failures propagate explicitly. -## Coverage and next increments +## Supported scope and validation Inputs currently have a fixed captured batch and image shape. All batches must match it; pad and slice final inference batches, or prepare a separate shape. @@ -115,16 +114,10 @@ The original model's parameters, modes and caches are preserved by preparation. Functional linears, weight parametrization, hierarchical aggregation and class masks are included in capture; this does not rely on a backbone allowlist. -Focused tests exercise flat, hierarchical, conditional and independent heads, -real gradients, exact controlled QAT/AdamW continuation, held-out-data isolation, -integer operator execution, checksums and artifact reload. A synthetic oracle -exercises QAT through the actual training loop and checks integer predictions. - -Still required: user-facing checkpoint/CLI integration, dynamic batch support, -MNIST/Blair reports, broader backbone/operator coverage, GPU quantization, -ONNX/runtime conversion, and lower-bit profiles. Model quality, artifact size, -memory and latency need measured comparisons; no speedup or quality benefit is -claimed by passing compatibility tests. EMA remains unsupported. +EMA remains unsupported. Model quality, memory and latency require measured +comparisons beyond compatibility checks. See the [quantization roadmap](quantization-roadmap.md) +for planned work and [benchmark findings](benchmarks.md) for retained measurements +and their separate backend/workload boundaries. Run focused checks without changing the installed environment: From 0b51a511fc2e3376e0b76dd81ec1732837ce272c Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:44:10 +0200 Subject: [PATCH 203/221] refactor: retire superseded full-population tail analysis --- dev/releases/mambo_v3/tail_report.py | 16 +- docs/assets/mambo-defaults-tail.csv | 106 - docs/assets/mambo-defaults-tail.json | 27695 ------------------------- 3 files changed, 7 insertions(+), 27810 deletions(-) delete mode 100644 docs/assets/mambo-defaults-tail.csv delete mode 100644 docs/assets/mambo-defaults-tail.json diff --git a/dev/releases/mambo_v3/tail_report.py b/dev/releases/mambo_v3/tail_report.py index 36de8e5..368bd93 100644 --- a/dev/releases/mambo_v3/tail_report.py +++ b/dev/releases/mambo_v3/tail_report.py @@ -21,7 +21,7 @@ def eligible_classes(truth, accepted_predictions, cutoff): } -def collect(study, *, full_dataset=False): +def collect(study): from mini_metrics.data import MetricDF from mini_metrics.metrics import MacroAccuracy, MacroF1, MacroPrecision, MacroRecall @@ -33,13 +33,12 @@ def collect(study, *, full_dataset=False): if file_hash(source["source"]) != source["source_sha256"]: raise ValueError("Changed predictions") data = MetricDF.from_source(source["source"]) - if not full_dataset: - data, _ = data.split((0.9, 0.1), strata=("label",), seed=42) + data, _ = data.split((0.9, 0.1), strata=("label",), seed=42) identities[model] = identity(data) - if not full_dataset and identity(data) != source["identities"]["report"]: + if identity(data) != source["identities"]["report"]: raise ValueError("Changed reporting partition") work[model] = {} - scopes = (("zero", 0),) if full_dataset else (("zero", 0), ("optimized", source["thresholds"])) + scopes = (("zero", 0), ("optimized", source["thresholds"])) for scope, threshold in scopes: df = data.with_threshold(threshold) groups = {name: metric(df, aggregate=False, verbose=0) for name, metric in metrics.items()} @@ -54,14 +53,14 @@ def collect(study, *, full_dataset=False): if len(set(identities.values())) != 1: raise ValueError("Model evaluation populations differ") result = { - "population": "full_dataset" if full_dataset else "reporting_partition", + "population": "reporting_partition", "identities": identities, "sources_sha256": {model: source["source_sha256"] for model, source in study["models"].items()}, "revision": REVISION, "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", "rows": [], } - for scope in ("zero",) if full_dataset else ("zero", "optimized"): + for scope in ("zero", "optimized"): for level, rank in enumerate(("species", "genus", "family")): for cutoff in (-1, 5, 10, 20): eligible = { @@ -106,9 +105,8 @@ def collect(study, *, full_dataset=False): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--study", type=Path, default=Path("docs/assets/mambo-threshold-comparison.json")) parser.add_argument("--output", type=Path, required=True) - parser.add_argument("--full-dataset", action="store_true", help="Use all source images at threshold zero only") args = parser.parse_args() - result = collect(json.loads(args.study.read_text()), full_dataset=args.full_dataset) + result = collect(json.loads(args.study.read_text())) args.output.mkdir(parents=True, exist_ok=True) write_json(args.output / "mambo-tail-metrics.json", result) with (args.output / "mambo-tail-metrics.csv").open("w", newline="") as stream: diff --git a/docs/assets/mambo-defaults-tail.csv b/docs/assets/mambo-defaults-tail.csv deleted file mode 100644 index 4020d17..0000000 --- a/docs/assets/mambo-defaults-tail.csv +++ /dev/null @@ -1,106 +0,0 @@ -model,scope,rank,cutoff,domain,class_count,truth_images_in_retained_classes,accepted_predictions_in_retained_classes,report_images,overall_coverage,accuracy,precision,recall,f1 -v2,zero,species,-1,per_model,1221,58640,58640,58640,1.0,0.6852063621352951,0.2742104381019442,0.6852063621352951,0.2575380033854696 -torch,zero,species,-1,per_model,1309,58640,58640,58640,1.0,0.7124755690715492,0.26342704573380454,0.7124755690715492,0.25428952382168746 -onnx,zero,species,-1,per_model,1309,58640,58640,58640,1.0,0.7123551106111988,0.26343028004895147,0.7123551106111988,0.25432102340018486 -torch-tta,zero,species,-1,per_model,1197,58640,58640,58640,1.0,0.7394942213066358,0.3045154257441184,0.7394942213066358,0.29354423320755 -onnx-tta,zero,species,-1,per_model,1193,58640,58640,58640,1.0,0.7398002960321982,0.30560509035336597,0.7398002960321982,0.2944363607025529 -v2,zero,species,5,per_model,332,49965,43906,58640,1.0,0.7804519827952229,0.8132613221595489,0.7804519827952229,0.767750987431369 -v2,zero,species,5,common,323,49771,43793,58640,1.0,0.7893403332535088,0.8209378703317131,0.7893403332535088,0.7761503968624853 -torch,zero,species,5,per_model,333,50028,44632,58640,1.0,0.7955403347220553,0.8148667864853998,0.7955403347220553,0.7836676630026933 -torch,zero,species,5,common,323,49771,44546,58640,1.0,0.8075564989092358,0.8206160162011501,0.8075564989092358,0.7934690725468392 -onnx,zero,species,5,per_model,333,50028,44645,58640,1.0,0.7959521085469712,0.8149813536593272,0.7959521085469712,0.7838792936205538 -onnx,zero,species,5,common,323,49771,44559,58640,1.0,0.8079810211497839,0.8207341303464063,0.8079810211497839,0.7936872551962122 -torch-tta,zero,species,5,per_model,335,49924,45758,58640,1.0,0.8233452008601031,0.8361083038702228,0.8233452008601031,0.8111919297581796 -torch-tta,zero,species,5,common,323,49771,45653,58640,1.0,0.8362560793198487,0.8424552838647043,0.8362560793198487,0.8212732179011305 -onnx-tta,zero,species,5,per_model,335,49924,45764,58640,1.0,0.8235925081132986,0.8360886919210944,0.8235925081132986,0.8112089254223764 -onnx-tta,zero,species,5,common,323,49771,45659,58640,1.0,0.836512574458612,0.8424349432982707,0.836512574458612,0.8212908449831922 -v2,zero,species,10,per_model,281,48752,43179,58640,1.0,0.8015233937799323,0.8489418368710229,0.8015233937799323,0.8047301032307933 -v2,zero,species,10,common,276,48569,43085,58640,1.0,0.8036358015042979,0.8491944063795561,0.8036358015042979,0.8060694564714563 -torch,zero,species,10,per_model,288,49474,44016,58640,1.0,0.8164188665527266,0.8504866560247468,0.8164188665527266,0.8174147604399674 -torch,zero,species,10,common,276,48569,43509,58640,1.0,0.8231034842915722,0.852620913533206,0.8231034842915722,0.8225526620461225 -onnx,zero,species,10,per_model,288,49474,44028,58640,1.0,0.8168949800377856,0.8506207534510775,0.8168949800377856,0.8176623311125982 -onnx,zero,species,10,common,276,48569,43521,58640,1.0,0.8236002983629384,0.8527608412824206,0.8236002983629384,0.8228109966610416 -torch-tta,zero,species,10,per_model,290,49491,45165,58640,1.0,0.8448147812478007,0.8686351477620251,0.8448147812478007,0.8430944324410347 -torch-tta,zero,species,10,common,276,48569,44545,58640,1.0,0.8500633958998807,0.8701711239397353,0.8500633958998807,0.8468123522603528 -onnx-tta,zero,species,10,per_model,290,49491,45171,58640,1.0,0.8451004637644232,0.8686124925794111,0.8451004637644232,0.843114065363469 -onnx-tta,zero,species,10,common,276,48569,44551,58640,1.0,0.8503635695586504,0.8701473195811916,0.8503635695586504,0.8468329810556643 -v2,zero,species,20,per_model,227,47718,42116,58640,1.0,0.8104473759200309,0.8578518423290517,0.8104473759200309,0.8156127676262825 -v2,zero,species,20,common,221,47442,41948,58640,1.0,0.8155338436417237,0.8608672123211786,0.8155338436417237,0.8199232466589719 -torch,zero,species,20,per_model,238,48599,43096,58640,1.0,0.8228758500302792,0.8709627588948129,0.8228758500302792,0.8324260662998175 -torch,zero,species,20,common,221,47442,42352,58640,1.0,0.8343864499962018,0.8780167850519418,0.8343864499962018,0.8425720959185982 -onnx,zero,species,20,per_model,238,48599,43106,58640,1.0,0.8232769173287262,0.871128430219949,0.8232769173287262,0.8326386862169237 -onnx,zero,species,20,common,221,47442,42364,58640,1.0,0.8348183686252988,0.8779740426087514,0.8348183686252988,0.8426753449878298 -torch-tta,zero,species,20,per_model,238,48571,44234,58640,1.0,0.8532633086198458,0.8867066977362028,0.8532633086198458,0.8577020245523158 -torch-tta,zero,species,20,common,221,47442,43414,58640,1.0,0.8607764714822107,0.8906618013155634,0.8607764714822107,0.8639878535451234 -onnx-tta,zero,species,20,per_model,238,48571,44235,58640,1.0,0.8533112891172909,0.8867157309673706,0.8533112891172909,0.8577134774255251 -onnx-tta,zero,species,20,common,221,47442,43415,58640,1.0,0.8608281427871516,0.8906715294106673,0.8608281427871516,0.8640001874085796 -v2,zero,genus,-1,per_model,698,58640,58640,58640,1.0,0.7890053947525617,0.3188818859364664,0.7890053947525617,0.3169285074452808 -torch,zero,genus,-1,per_model,716,58640,58640,58640,1.0,0.8053483819748223,0.3189366087734117,0.8053483819748223,0.3204124099108477 -onnx,zero,genus,-1,per_model,714,58640,58640,58640,1.0,0.805001260196705,0.3188298295664697,0.805001260196705,0.3212342539755369 -torch-tta,zero,genus,-1,per_model,684,58640,58640,58640,1.0,0.8303908427754559,0.3505904633143813,0.8303908427754559,0.3532089993367619 -onnx-tta,zero,genus,-1,per_model,683,58640,58640,58640,1.0,0.8304111700220072,0.35093141039439896,0.8304111700220072,0.35360877971608085 -v2,zero,genus,5,per_model,249,58447,50027,58640,1.0,0.8219266550615453,0.8127690860219302,0.8219266550615453,0.7906389901996281 -v2,zero,genus,5,common,248,58439,50013,58640,1.0,0.8227207141545352,0.814606288557733,0.8227207141545352,0.7919942060692015 -torch,zero,genus,5,per_model,249,58445,49813,58640,1.0,0.8371687635869385,0.8073826948942792,0.8371687635869385,0.7987426899052846 -torch,zero,genus,5,common,248,58439,49806,58640,1.0,0.8385283150530148,0.8089101596778391,0.8385283150530148,0.8001023843745056 -onnx,zero,genus,5,per_model,249,58445,49815,58640,1.0,0.8367198751831082,0.8068419286188611,0.8367198751831082,0.7982979243110807 -onnx,zero,genus,5,common,248,58439,49808,58640,1.0,0.8380776166152981,0.8083672128932459,0.8380776166152981,0.7996558253706477 -torch-tta,zero,genus,5,per_model,250,58457,50573,58640,1.0,0.8627747780438068,0.8368451276595528,0.8627747780438068,0.8294985728477161 -torch-tta,zero,genus,5,common,248,58439,50561,58640,1.0,0.8647931230280309,0.8362014055707858,0.8647931230280309,0.8302836995872716 -onnx-tta,zero,genus,5,per_model,250,58457,50578,58640,1.0,0.8628009595373644,0.8366096008903584,0.8628009595373644,0.8293435494948899 -onnx-tta,zero,genus,5,common,248,58439,50566,58640,1.0,0.8648195156626658,0.8359639793921624,0.8648195156626658,0.830127426046116 -v2,zero,genus,10,per_model,225,58236,49619,58640,1.0,0.8252783249476032,0.8350504050502193,0.8252783249476032,0.808013110047685 -v2,zero,genus,10,common,222,58195,49570,58640,1.0,0.824807504370962,0.83600915965762,0.824807504370962,0.8081287197161677 -torch,zero,genus,10,per_model,229,58287,49484,58640,1.0,0.8393961784927966,0.8310502469637352,0.8393961784927966,0.8162838077724298 -torch,zero,genus,10,common,222,58195,49396,58640,1.0,0.8435690095177734,0.8357508875265129,0.8435690095177734,0.8203775192436712 -onnx,zero,genus,10,per_model,229,58287,49488,58640,1.0,0.8394539373899418,0.8304974781117134,0.8394539373899418,0.8159503793944154 -onnx,zero,genus,10,common,222,58195,49400,58640,1.0,0.8436285896414052,0.8351806890260037,0.8436285896414052,0.820033577358242 -torch-tta,zero,genus,10,per_model,227,58252,50242,58640,1.0,0.872971488300815,0.8617786609173839,0.872971488300815,0.8511810260087067 -torch-tta,zero,genus,10,common,222,58195,50177,58640,1.0,0.8708612365358183,0.8620785961078308,0.8708612365358183,0.8500270973391464 -onnx-tta,zero,genus,10,per_model,227,58252,50248,58640,1.0,0.8730003225448212,0.8614328920388118,0.8730003225448212,0.8509289670806535 -onnx-tta,zero,genus,10,common,222,58195,50183,58640,1.0,0.8708907201997347,0.8617250396419035,0.8708907201997347,0.849769361408209 -v2,zero,genus,20,per_model,186,57097,48695,58640,1.0,0.8426420260480435,0.8630959679849289,0.8426420260480435,0.8367937129642364 -v2,zero,genus,20,common,182,56984,48586,58640,1.0,0.8445786450365945,0.8643626549359886,0.8445786450365945,0.8381676091588163 -torch,zero,genus,20,per_model,190,57639,48638,58640,1.0,0.8508484895699264,0.8654633778215377,0.8508484895699264,0.8430006758307964 -torch,zero,genus,20,common,182,56984,48209,58640,1.0,0.8568681861269765,0.868294149775848,0.8568681861269765,0.8478182354988681 -onnx,zero,genus,20,per_model,190,57639,48640,58640,1.0,0.8506988059950821,0.865078476895734,0.8506988059950821,0.8426656582962279 -onnx,zero,genus,20,common,182,56984,48211,58640,1.0,0.8567119230543369,0.8678923301280309,0.8567119230543369,0.8474684919188242 -torch-tta,zero,genus,20,per_model,191,57679,49466,58640,1.0,0.8757982151851574,0.8874148819339942,0.8757982151851574,0.8682678780741216 -torch-tta,zero,genus,20,common,182,56984,48969,58640,1.0,0.8814254761776787,0.889035213147546,0.8814254761776787,0.8724320940695854 -onnx-tta,zero,genus,20,per_model,191,57679,49469,58640,1.0,0.8758324841557825,0.8869192117831547,0.8758324841557825,0.8679852506887044 -onnx-tta,zero,genus,20,common,182,56984,48972,58640,1.0,0.8814614397677304,0.8885150318354011,0.8814614397677304,0.8721354906046694 -v2,zero,family,-1,per_model,64,58640,58640,58640,1.0,0.8440271040813301,0.2600743589223739,0.8440271040813301,0.2691037692533918 -torch,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8105098078966045,0.27535126159560075,0.8105098078966045,0.28044633693466975 -onnx,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8106416408810809,0.27563597431734277,0.8106416408810809,0.2807691734951072 -torch-tta,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.857176291043506,0.28541955682278985,0.857176291043506,0.29672977205202156 -onnx-tta,zero,family,-1,per_model,60,58640,58640,58640,1.0,0.8573137738657032,0.2853888893805401,0.8573137738657032,0.2967466662087087 -v2,zero,family,5,per_model,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 -v2,zero,family,5,common,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 -torch,zero,family,5,per_model,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 -torch,zero,family,5,common,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 -onnx,zero,family,5,per_model,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 -onnx,zero,family,5,common,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 -torch-tta,zero,family,5,per_model,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 -torch-tta,zero,family,5,common,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 -onnx-tta,zero,family,5,per_model,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 -onnx-tta,zero,family,5,common,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 -v2,zero,family,10,per_model,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 -v2,zero,family,10,common,20,58635,58035,58640,1.0,0.8706311696935296,0.8042967720810082,0.8706311696935296,0.8222431727219648 -torch,zero,family,10,per_model,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 -torch,zero,family,10,common,20,58635,57625,58640,1.0,0.8570862790810952,0.7593871181201356,0.8570862790810952,0.7830056774706758 -onnx,zero,family,10,per_model,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 -onnx,zero,family,10,common,20,58635,57629,58640,1.0,0.8572378870132431,0.7602412562853618,0.8572378870132431,0.7839741871519881 -torch-tta,zero,family,10,per_model,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 -torch-tta,zero,family,10,common,20,58635,57922,58640,1.0,0.8857527347000319,0.7937586704683698,0.8857527347000319,0.8201893161560646 -onnx-tta,zero,family,10,per_model,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 -onnx-tta,zero,family,10,common,20,58635,57922,58640,1.0,0.8859108399455587,0.7936666681416203,0.8859108399455587,0.8202399986261261 -v2,zero,family,20,per_model,17,58591,57945,58640,1.0,0.8805744853537323,0.8603318425866534,0.8805744853537323,0.8641945097882205 -v2,zero,family,20,common,17,58591,57945,58640,1.0,0.8805744853537323,0.8603318425866534,0.8805744853537323,0.8641945097882205 -torch,zero,family,20,per_model,17,58591,57498,58640,1.0,0.8772443619441458,0.8454930600394824,0.8772443619441458,0.8513978587998544 -torch,zero,family,20,common,17,58591,57498,58640,1.0,0.8772443619441458,0.8454930600394824,0.8772443619441458,0.8513978587998544 -onnx,zero,family,20,per_model,17,58591,57505,58640,1.0,0.8774227242172608,0.8454826219027971,0.8774227242172608,0.8514947560248236 -onnx,zero,family,20,common,17,58591,57505,58640,1.0,0.8774227242172608,0.8454826219027971,0.8774227242172608,0.8514947560248236 -torch-tta,zero,family,20,per_model,17,58591,57813,58640,1.0,0.903126466593875,0.8742034082733955,0.903126466593875,0.8819814890011932 -torch-tta,zero,family,20,common,17,58591,57813,58640,1.0,0.903126466593875,0.8742034082733955,0.903126466593875,0.8819814890011932 -onnx-tta,zero,family,20,per_model,17,58591,57813,58640,1.0,0.903312472765083,0.8740951702419255,0.903312472765083,0.8820411154365596 -onnx-tta,zero,family,20,common,17,58591,57813,58640,1.0,0.903312472765083,0.8740951702419255,0.903312472765083,0.8820411154365596 diff --git a/docs/assets/mambo-defaults-tail.json b/docs/assets/mambo-defaults-tail.json deleted file mode 100644 index c0c484f..0000000 --- a/docs/assets/mambo-defaults-tail.json +++ /dev/null @@ -1,27695 +0,0 @@ -{ - "population": "full_dataset", - "identities": { - "v2": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", - "torch": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", - "onnx": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", - "torch-tta": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165", - "onnx-tta": "0f6e02db8e7eaaabc9617dcb0af5e0a7def4886578e46b4f919316b4ca6e7165" - }, - "sources_sha256": { - "v2": "1381e2b24fa5a36574b4e1a0d9dfcfa41a5daabce6516e7451757f6ed96a5414", - "torch": "b6793f4f24ba092912a5d468a86f2f3402d1281a6e63190e623d1cadc13fc027", - "onnx": "b8624ec148e1d67d6685be4e79e35b990a7692e4109f306430ddfc015e3d543f", - "torch-tta": "98cb30415e962f816c9cd978c5463d7c674fca47f95491f93e829a06d8dce2fa", - "onnx-tta": "bc5674dfd2130a75c94433b9efce5fc9bca07b6ac7668708d4a101a9c605e0e5" - }, - "revision": "70cc69adc05362863439277048e06386c1f885e1", - "policy": "Strictly > cutoff in both truth and accepted predictions; preserve all per-class FP/FN; macro reaggregation only", - "rows": [ - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "10055273", - "10113008", - "10638451", - "10844862", - "10922411", - "10982815", - "11052757", - "11080751", - "11287091", - "11418741", - "11478679", - "11571523", - "11598540", - "11728049", - "11962292", - "12089608", - "12135372", - "12253343", - "1731598", - "1731826", - "1732063", - "1732416", - "1732452", - "1732565", - "1733258", - "1733484", - "1734453", - "1734704", - "1734826", - "1735532", - "1735855", - "1736377", - "1736412", - "1736447", - "1736727", - "1736906", - "1737491", - "1737524", - "1737542", - "1737552", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1738163", - "1738222", - "1738245", - "1738422", - "1738429", - "1739272", - "1739290", - "1739461", - "1739819", - "1739833", - "1739922", - "1739931", - "1739980", - "1740005", - "1740069", - "1740174", - "1740183", - "1740185", - "1740392", - "1741147", - "1741341", - "1741368", - "1741545", - "1741593", - "1741633", - "1741752", - "1742142", - "1742346", - "1743196", - "1743475", - "1743532", - "1743641", - "1743643", - "1743710", - "1743730", - "1743768", - "1743775", - "1743828", - "1744071", - "1744136", - "1744224", - "1744416", - "1744498", - "1744588", - "1744593", - "1744693", - "1744709", - "1744714", - "1744728", - "1744731", - "1744739", - "1744748", - "1744763", - "1744777", - "1744782", - "1744808", - "1744810", - "1744896", - "1745079", - "1745561", - "1745600", - "1745724", - "1745737", - "1746027", - "1746413", - "1746440", - "1746613", - "1746644", - "1746666", - "1746775", - "1746832", - "1746856", - "1746876", - "1746910", - "1747050", - "1748805", - "1748890", - "1749164", - "1749713", - "1749948", - "1751051", - "1751298", - "1751457", - "1758878", - "1759069", - "1759083", - "1759153", - "1759407", - "1759667", - "1759668", - "1760104", - "1760246", - "1760593", - "1760857", - "1760887", - "1760891", - "1761041", - "1761438", - "1761735", - "1761865", - "1762244", - "1762608", - "1763072", - "1763610", - "1764987", - "1765011", - "1765017", - "1765767", - "1765954", - "1766128", - "1766130", - "1766131", - "1766137", - "1766210", - "1766274", - "1766510", - "1766646", - "1766741", - "1766814", - "1767597", - "1767625", - "1767655", - "1768117", - "1768150", - "1768341", - "1768749", - "1768771", - "1768815", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770772", - "1770880", - "1771040", - "1771214", - "1771245", - "1771509", - "1771531", - "1771634", - "1771650", - "1771678", - "1771698", - "1771772", - "1772169", - "1772179", - "1772793", - "1772940", - "1772956", - "1773163", - "1773309", - "1773328", - "1774285", - "1775152", - "1775891", - "1776330", - "1776371", - "1776619", - "1776862", - "1777253", - "1778074", - "1778127", - "1778143", - "1778596", - "1779334", - "1779435", - "1779641", - "1779690", - "1780150", - "1780378", - "1781694", - "1782560", - "1782615", - "1782627", - "1782672", - "1782726", - "1782727", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783016", - "1783037", - "1783043", - "1784359", - "1784812", - "1784826", - "1785185", - "1785286", - "1785888", - "1785895", - "1786007", - "1786902", - "1786936", - "1787064", - "1787112", - "1787267", - "1787400", - "1787590", - "1787610", - "1787751", - "1787770", - "1787859", - "1788522", - "1788635", - "1788917", - "1789076", - "1789086", - "1789267", - "1789481", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789753", - "1789755", - "1789783", - "1789785", - "1789840", - "1789849", - "1789982", - "1790002", - "1790072", - "1790160", - "1790361", - "1790364", - "1790625", - "1790692", - "1790816", - "1791422", - "1792061", - "1792292", - "1792335", - "1792377", - "1792383", - "1792411", - "1792414", - "1792418", - "1792426", - "1793877", - "1793986", - "1794102", - "1794361", - "1794590", - "1795215", - "1795282", - "1795854", - "1795946", - "1795957", - "1796007", - "1796117", - "1796145", - "1796169", - "1796188", - "1796463", - "1796668", - "1796678", - "1797178", - "1797258", - "1797276", - "1797367", - "1797479", - "1798346", - "1798372", - "1798408", - "1798449", - "1798504", - "1798594", - "1798802", - "1798807", - "1798971", - "1798974", - "1798984", - "1799132", - "1799135", - "1799701", - "1799708", - "1799799", - "1800004", - "1800032", - "1801051", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1807206", - "1807969", - "1808752", - "1810099", - "1811789", - "1811896", - "1812394", - "1813114", - "1819145", - "1819268", - "1819873", - "1820039", - "1820372", - "1820406", - "1821856", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822787", - "1822796", - "1822819", - "1822830", - "1823726", - "1824113", - "1825064", - "1825077", - "1825083", - "1825156", - "1825176", - "1825539", - "1825971", - "1825983", - "1826022", - "1826033", - "1827125", - "1827645", - "1828162", - "1828637", - "1829322", - "1829363", - "1829533", - "1829776", - "1829785", - "1830122", - "1830125", - "1830131", - "1830144", - "1830191", - "1830380", - "1830410", - "1830457", - "1830632", - "1830838", - "1830843", - "1830937", - "1830962", - "1831002", - "1831009", - "1831128", - "1831136", - "1831168", - "1831643", - "1831752", - "1832819", - "1832853", - "1835031", - "1835156", - "1835393", - "1835407", - "1835433", - "1835457", - "1836899", - "1837172", - "1837420", - "1838838", - "1838911", - "1839851", - "1839893", - "1840297", - "1840301", - "1840345", - "1840346", - "1840360", - "1840478", - "1840483", - "1840596", - "1841158", - "1841159", - "1841261", - "1841296", - "1841675", - "1841813", - "1841821", - "1842196", - "1845270", - "1845962", - "1846112", - "1846141", - "1846219", - "1846604", - "1846729", - "1847097", - "1847407", - "1847956", - "1848202", - "1848356", - "1848426", - "1848657", - "1848864", - "1848920", - "1849284", - "1849630", - "1849924", - "1850008", - "1850238", - "1850246", - "1850279", - "1850506", - "1850522", - "1850538", - "1850781", - "1850971", - "1851555", - "1852150", - "1852177", - "1852311", - "1852430", - "1852956", - "1852978", - "1853064", - "1853587", - "1854202", - "1854237", - "1854347", - "1854792", - "1856289", - "1856384", - "1856595", - "1856686", - "1856701", - "1856730", - "1856768", - "1856867", - "1857577", - "1857626", - "1857828", - "1857829", - "1857878", - "1857924", - "1857978", - "1858074", - "1858113", - "1858531", - "1858698", - "1858762", - "1859046", - "1859100", - "1860408", - "1860671", - "1860688", - "1860983", - "1860987", - "1861395", - "1861644", - "1861862", - "1862578", - "1862580", - "1862719", - "1862837", - "1864161", - "1864358", - "1864377", - "1864652", - "1866568", - "1869489", - "1869803", - "1869852", - "1869976", - "1870202", - "1870249", - "1870250", - "1870450", - "1870988", - "1871252", - "1871407", - "1871698", - "1871826", - "1872315", - "1872368", - "1872901", - "1873048", - "1873079", - "1873411", - "1874211", - "1874375", - "1874743", - "1875008", - "1875120", - "1875327", - "1875827", - "1875865", - "1875869", - "1875918", - "1875952", - "1876329", - "1876409", - "1876542", - "1876623", - "1876854", - "1877941", - "1877988", - "1878470", - "1878490", - "1878862", - "1878879", - "1878895", - "1878907", - "1878939", - "1879252", - "1879452", - "1879630", - "1879735", - "1879765", - "1879970", - "1880040", - "1880064", - "1880138", - "1880139", - "1880140", - "1881151", - "1881834", - "1882158", - "1882210", - "1882905", - "1883161", - "1883386", - "1884212", - "1884255", - "1884273", - "1884280", - "1884312", - "1884332", - "1884370", - "1884403", - "1884465", - "1884970", - "1886084", - "1886579", - "1886587", - "1887108", - "1887173", - "1887177", - "1887290", - "1887701", - "1888579", - "1888733", - "1888743", - "1888759", - "1888826", - "1889287", - "1889833", - "1889942", - "1890187", - "1890534", - "1890576", - "1890656", - "1891059", - "1891326", - "1891386", - "1891426", - "1891473", - "1891493", - "1891494", - "1898286", - "1898544", - "1909398", - "1911112", - "1918868", - "1920496", - "1920712", - "1924494", - "1929270", - "1938214", - "1938810", - "1939432", - "1939677", - "1939680", - "1940807", - "1941377", - "1941437", - "1951557", - "1951649", - "1951713", - "1952014", - "1952062", - "1952130", - "1952229", - "1952449", - "1952532", - "1952806", - "1952812", - "1954563", - "1956440", - "1956524", - "1956599", - "1956710", - "1957266", - "1957300", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1957854", - "1958024", - "1958323", - "1959383", - "1959395", - "1959467", - "1959682", - "1959914", - "1959919", - "1960617", - "1961040", - "1961068", - "1961190", - "1962204", - "1962265", - "1962268", - "1962434", - "1962516", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1963463", - "1964191", - "1964195", - "1964471", - "1964637", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965795", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1966886", - "1967011", - "1967245", - "1967273", - "1967597", - "1967815", - "1968678", - "1968867", - "1969954", - "1970213", - "1970227", - "1970284", - "1971986", - "1972120", - "1972185", - "1972187", - "1972234", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975341", - "1975546", - "1975553", - "1975571", - "1975733", - "1975793", - "1975897", - "1975903", - "1976163", - "1977003", - "1977007", - "1977068", - "1978056", - "1978065", - "1978114", - "1978375", - "1978445", - "1978776", - "1978821", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1980521", - "1981696", - "1982406", - "1982500", - "1982525", - "1982529", - "1982541", - "1982542", - "1982592", - "1982636", - "1982671", - "1982746", - "1982791", - "1982838", - "1982885", - "1983000", - "1983052", - "1983170", - "1983260", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983558", - "1983648", - "1983694", - "1983705", - "1983755", - "1983888", - "1983896", - "1983922", - "1983997", - "1983999", - "1984117", - "1984942", - "1984949", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986171", - "1986220", - "1986452", - "1986522", - "1986575", - "1987527", - "1987578", - "1987744", - "1988593", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991179", - "1991371", - "1992066", - "1992504", - "1993419", - "4299368", - "4302252", - "4302268", - "4522322", - "4522795", - "4522922", - "4522933", - "4523522", - "4523556", - "4523560", - "4523564", - "4523880", - "4523883", - "4523885", - "4524054", - "4524070", - "4524072", - "4524221", - "4524376", - "4524393", - "4524403", - "4524421", - "4524426", - "4524636", - "4524638", - "4524740", - "4524793", - "4525068", - "4525078", - "4525177", - "4525189", - "4525266", - "4525273", - "4525354", - "4525443", - "4525500", - "4525505", - "4525510", - "4525530", - "4525540", - "4525547", - "4525562", - "4526048", - "4527339", - "4527342", - "4527972", - "4528539", - "4528593", - "4528658", - "4528692", - "4528694", - "4529064", - "4529248", - "4529566", - "4529630", - "4529931", - "4530151", - "4530424", - "4530632", - "4531284", - "4531402", - "4531506", - "4531517", - "4531687", - "4531690", - "4531708", - "4531968", - "4531975", - "4532022", - "4532057", - "4532088", - "4532095", - "4532097", - "4532122", - "4532160", - "4532239", - "4532253", - "4532293", - "4532297", - "4532357", - "4532405", - "4532408", - "4532412", - "4532471", - "4532500", - "4532508", - "4532516", - "4532532", - "4532544", - "4532696", - "4532886", - "4532888", - "4532890", - "4533115", - "4533128", - "4533136", - "4533202", - "4533273", - "4533360", - "4533431", - "4533433", - "4533442", - "4533446", - "4533661", - "4533671", - "4533714", - "4533952", - "4534011", - "4534038", - "4534052", - "4534057", - "4534166", - "4534207", - "4534225", - "4534245", - "4534290", - "4534299", - "4534389", - "4534398", - "4534408", - "4534458", - "4534463", - "4534485", - "4534486", - "4534533", - "4534538", - "4534540", - "4534686", - "4534719", - "4534767", - "4534779", - "4534782", - "4534872", - "4534909", - "4534914", - "4535827", - "5101394", - "5101678", - "5101745", - "5102287", - "5102931", - "5102951", - "5102982", - "5103176", - "5103451", - "5103736", - "5104442", - "5104558", - "5104759", - "5104891", - "5104903", - "5105339", - "5108761", - "5109506", - "5109523", - "5109599", - "5109614", - "5109821", - "5110200", - "5110213", - "5110644", - "5110670", - "5110885", - "5111574", - "5112155", - "5112254", - "5112283", - "5112291", - "5112345", - "5112362", - "5113036", - "5113078", - "5113084", - "5113234", - "5113847", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116416", - "5116475", - "5116609", - "5116669", - "5116698", - "5116850", - "5116941", - "5117049", - "5117089", - "5117189", - "5117399", - "5117400", - "5118892", - "5118904", - "5118996", - "5119143", - "5119245", - "5119513", - "5119808", - "5120396", - "5120675", - "5122037", - "5122293", - "5122439", - "5123042", - "5123221", - "5123339", - "5123394", - "5123461", - "5123922", - "5124007", - "5124029", - "5124143", - "5124233", - "5124911", - "5125689", - "5126052", - "5126212", - "5126217", - "5126680", - "5130682", - "5131910", - "5134098", - "5135513", - "5141493", - "5141677", - "5142870", - "5142971", - "5143048", - "5143129", - "5143147", - "5143380", - "5143453", - "5143477", - "5143651", - "5143675", - "5143697", - "5143944", - "5144190", - "5144426", - "5144534", - "5144543", - "5144677", - "5144721", - "5145009", - "5145136", - "5145269", - "5145409", - "5145870", - "5145965", - "5146342", - "5146379", - "5146412", - "5146496", - "5146510", - "5146559", - "5146611", - "5146677", - "5146837", - "5146946", - "5146961", - "5147038", - "5147039", - "5147062", - "5147171", - "5147193", - "5147208", - "5147232", - "5147245", - "5147478", - "5147608", - "5147638", - "5147681", - "5147827", - "5148247", - "5148248", - "5148286", - "5148394", - "5148424", - "5148436", - "5148462", - "5148475", - "5148486", - "5148487", - "5149414", - "5149438", - "5149474", - "5149499", - "5149665", - "5149746", - "5149768", - "5149839", - "5714973", - "5768880", - "5769028", - "5769062", - "5769068", - "5769072", - "5769164", - "5769191", - "5769272", - "5770913", - "5770942", - "5771259", - "5771350", - "5771982", - "5772063", - "5772129", - "5772172", - "5772176", - "5772178", - "5772180", - "5772186", - "5772196", - "5772199", - "5772202", - "5772205", - "5772206", - "5772210", - "5772269", - "5772309", - "5772349", - "5772351", - "5879654", - "5880147", - "5880533", - "5880545", - "5880550", - "5880552", - "5880559", - "5880563", - "5883985", - "5884571", - "5884851", - "6097214", - "6097225", - "6097228", - "6097236", - "6121184", - "6544687", - "7429212", - "7438067", - "7443518", - "7446048", - "7448174", - "7588222", - "7596232", - "7624468", - "7656811", - "7681733", - "7730078", - "7734292", - "7752082", - "7753668", - "7762841", - "7780930", - "7825213", - "7869346", - "7874258", - "7875265", - "7877231", - "7895336", - "7937573", - "7940536", - "7960566", - "7964262", - "7972792", - "7981386", - "7988195", - "7993353", - "8000103", - "8007222", - "8015895", - "8049830", - "8073674", - "8086347", - "8094357", - "8105817", - "8160782", - "8186212", - "8208583", - "8223165", - "8237343", - "8237987", - "8262357", - "8292872", - "8313553", - "8361848", - "8361973", - "8369868", - "8388883", - "8394261", - "8397564", - "8407461", - "8421569", - "8424972", - "8532380", - "8537359", - "8581601", - "8742426", - "8756768", - "8823068", - "8858121", - "8869900", - "8890502", - "9092175", - "9101339", - "9174377", - "9242559", - "9262981", - "9414984", - "9473121", - "9530977", - "9674732", - "9734171", - "9782192", - "9812211" - ], - "class_count": 1221, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.6852063621352951, - "precision": 0.2742104381019442, - "recall": 0.6852063621352951, - "f1": 0.2575380033854696 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "10055273", - "10113008", - "10450501", - "10580256", - "10638451", - "10787705", - "10844862", - "10915497", - "10982815", - "11080751", - "11287091", - "11418741", - "11478679", - "11571523", - "11576787", - "11598540", - "11728049", - "11962292", - "11992983", - "12089608", - "12135372", - "12253343", - "1730978", - "1731598", - "1731826", - "1731860", - "1732063", - "1732416", - "1732452", - "1732565", - "1732662", - "1732685", - "1733258", - "1733484", - "1734453", - "1734704", - "1734826", - "1735532", - "1735855", - "1736377", - "1736425", - "1736484", - "1736560", - "1736727", - "1736898", - "1736906", - "1737491", - "1737524", - "1737526", - "1737533", - "1737542", - "1737552", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1738163", - "1738222", - "1738245", - "1738317", - "1738700", - "1738794", - "1738839", - "1739272", - "1739290", - "1739461", - "1739605", - "1739819", - "1739833", - "1739922", - "1739980", - "1739999", - "1740005", - "1740069", - "1740116", - "1740174", - "1740185", - "1740374", - "1740482", - "1740623", - "1741056", - "1741147", - "1741341", - "1741368", - "1741545", - "1741551", - "1741615", - "1741633", - "1741634", - "1741667", - "1741752", - "1741756", - "1742142", - "1742185", - "1742263", - "1742346", - "1743196", - "1743475", - "1743532", - "1743641", - "1743710", - "1743730", - "1743768", - "1743775", - "1743828", - "1743862", - "1743867", - "1743898", - "1744071", - "1744136", - "1744180", - "1744224", - "1744498", - "1744542", - "1744588", - "1744709", - "1744728", - "1744731", - "1744739", - "1744742", - "1744748", - "1744782", - "1744808", - "1744810", - "1744896", - "1744901", - "1745079", - "1745131", - "1745558", - "1745579", - "1745600", - "1745634", - "1745737", - "1746027", - "1746174", - "1746440", - "1746613", - "1746666", - "1746775", - "1746832", - "1746856", - "1746876", - "1746910", - "1748203", - "1748321", - "1748456", - "1748805", - "1748890", - "1748942", - "1749070", - "1749164", - "1749608", - "1749869", - "1749948", - "1750097", - "1751207", - "1751216", - "1751298", - "1751299", - "1751368", - "1751457", - "1758878", - "1759055", - "1759069", - "1759079", - "1759083", - "1759153", - "1759407", - "1759620", - "1759673", - "1759686", - "1760104", - "1760246", - "1760593", - "1760857", - "1760887", - "1760891", - "1761041", - "1761438", - "1761735", - "1761865", - "1762244", - "1763072", - "1763610", - "1764531", - "1764987", - "1765011", - "1765017", - "1765044", - "1765767", - "1765954", - "1766128", - "1766130", - "1766131", - "1766137", - "1766210", - "1766274", - "1766410", - "1766418", - "1766510", - "1766646", - "1766741", - "1766814", - "1767597", - "1767625", - "1767655", - "1768117", - "1768150", - "1768341", - "1768702", - "1769057", - "1769103", - "1769505", - "1769519", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770772", - "1770880", - "1771040", - "1771204", - "1771214", - "1771245", - "1771385", - "1771391", - "1771509", - "1771531", - "1771650", - "1771678", - "1771698", - "1771772", - "1772169", - "1772179", - "1772793", - "1772940", - "1772956", - "1773163", - "1773309", - "1773328", - "1775152", - "1775891", - "1776330", - "1776619", - "1776862", - "1777253", - "1778074", - "1778127", - "1778143", - "1778517", - "1778596", - "1779435", - "1779690", - "1780150", - "1780378", - "1781008", - "1781694", - "1782560", - "1782615", - "1782627", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783016", - "1783037", - "1783043", - "1783855", - "1784359", - "1784812", - "1784826", - "1784853", - "1785185", - "1785286", - "1785888", - "1785895", - "1786007", - "1786902", - "1787064", - "1787112", - "1787267", - "1787400", - "1787504", - "1787590", - "1787610", - "1787697", - "1787770", - "1788425", - "1788522", - "1788635", - "1789086", - "1789267", - "1789481", - "1789553", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789753", - "1789755", - "1789783", - "1789785", - "1789849", - "1789982", - "1790002", - "1790072", - "1790160", - "1790361", - "1790364", - "1790692", - "1790816", - "1791422", - "1791784", - "1792061", - "1792335", - "1792377", - "1792379", - "1792383", - "1792411", - "1792414", - "1792418", - "1792426", - "1793877", - "1793986", - "1794102", - "1794590", - "1795215", - "1795854", - "1796007", - "1796117", - "1796145", - "1796169", - "1796217", - "1796463", - "1796668", - "1796678", - "1797178", - "1797258", - "1797276", - "1797367", - "1797479", - "1798346", - "1798372", - "1798449", - "1798504", - "1798594", - "1798802", - "1798807", - "1798971", - "1798974", - "1798984", - "1799132", - "1799135", - "1799701", - "1799708", - "1800004", - "1800032", - "1801051", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1807206", - "1807969", - "1808752", - "1810099", - "1811789", - "1811896", - "1812394", - "1813114", - "1814630", - "1819145", - "1819268", - "1819873", - "1820039", - "1820372", - "1820406", - "1821856", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822787", - "1822796", - "1822819", - "1822830", - "1823726", - "1824113", - "1825064", - "1825077", - "1825083", - "1825156", - "1825176", - "1825539", - "1825971", - "1825983", - "1826022", - "1826033", - "1827125", - "1827645", - "1828162", - "1828637", - "1829322", - "1829363", - "1829776", - "1829785", - "1830241", - "1830380", - "1830408", - "1830410", - "1830537", - "1830584", - "1830632", - "1830838", - "1830843", - "1830879", - "1830937", - "1830962", - "1831002", - "1831128", - "1831136", - "1831168", - "1831643", - "1831752", - "1831780", - "1832853", - "1833626", - "1835031", - "1835156", - "1835457", - "1836899", - "1837172", - "1837420", - "1837429", - "1838838", - "1838911", - "1838969", - "1839293", - "1839296", - "1839851", - "1839893", - "1840301", - "1840346", - "1840360", - "1840380", - "1840408", - "1840478", - "1840555", - "1840581", - "1841158", - "1841159", - "1841261", - "1841296", - "1841616", - "1841675", - "1841813", - "1845270", - "1845368", - "1845962", - "1845965", - "1846107", - "1846112", - "1846236", - "1846729", - "1847407", - "1847956", - "1848356", - "1848426", - "1848596", - "1848610", - "1848657", - "1848690", - "1848730", - "1848753", - "1848864", - "1848920", - "1849284", - "1849294", - "1849477", - "1849630", - "1849897", - "1850008", - "1850246", - "1850450", - "1850506", - "1850522", - "1850538", - "1850781", - "1850971", - "1851010", - "1851203", - "1851220", - "1851337", - "1851555", - "1852177", - "1852311", - "1852430", - "1852956", - "1852978", - "1853064", - "1853079", - "1853587", - "1853723", - "1854202", - "1854237", - "1854287", - "1854347", - "1854792", - "1856005", - "1856289", - "1856595", - "1856620", - "1856658", - "1856686", - "1856691", - "1856701", - "1856730", - "1856867", - "1857577", - "1857626", - "1857828", - "1857829", - "1857878", - "1857924", - "1857978", - "1858074", - "1858113", - "1858163", - "1858531", - "1858698", - "1858775", - "1859046", - "1859305", - "1860408", - "1860621", - "1860628", - "1860668", - "1860688", - "1860768", - "1860852", - "1860987", - "1861031", - "1861395", - "1861644", - "1862578", - "1862580", - "1862719", - "1862837", - "1864161", - "1864358", - "1864377", - "1864652", - "1866568", - "1867820", - "1869478", - "1869489", - "1869512", - "1869803", - "1869976", - "1870202", - "1870249", - "1870250", - "1870450", - "1870988", - "1871160", - "1871252", - "1871407", - "1871698", - "1871826", - "1872315", - "1872368", - "1872901", - "1873079", - "1873411", - "1874192", - "1874211", - "1874375", - "1875008", - "1875120", - "1875327", - "1875631", - "1875633", - "1875827", - "1875865", - "1875869", - "1875918", - "1875952", - "1876329", - "1876409", - "1876542", - "1876854", - "1877341", - "1877368", - "1877941", - "1877988", - "1878470", - "1878490", - "1878782", - "1878862", - "1878879", - "1878895", - "1878907", - "1878939", - "1879252", - "1879452", - "1879630", - "1879655", - "1879735", - "1879970", - "1880040", - "1880062", - "1880064", - "1880104", - "1880138", - "1880139", - "1880140", - "1880143", - "1881151", - "1881603", - "1881834", - "1882158", - "1882210", - "1882557", - "1882905", - "1883161", - "1883386", - "1884212", - "1884255", - "1884273", - "1884332", - "1884370", - "1884403", - "1884465", - "1884970", - "1886084", - "1886320", - "1886579", - "1886587", - "1887108", - "1887173", - "1887290", - "1887701", - "1888579", - "1888733", - "1888743", - "1888759", - "1888826", - "1889833", - "1889942", - "1890187", - "1890534", - "1890576", - "1890656", - "1890703", - "1890772", - "1891059", - "1891326", - "1891386", - "1891426", - "1891473", - "1891493", - "1891494", - "1911112", - "1918868", - "1920496", - "1920712", - "1926260", - "1939432", - "1939658", - "1939677", - "1940510", - "1940807", - "1941377", - "1951557", - "1951649", - "1951713", - "1952014", - "1952062", - "1952130", - "1952229", - "1952449", - "1952532", - "1952806", - "1952812", - "1954563", - "1956440", - "1956524", - "1956599", - "1957266", - "1957300", - "1957570", - "1957572", - "1957632", - "1957816", - "1957845", - "1957852", - "1958024", - "1958323", - "1959383", - "1959395", - "1959467", - "1959914", - "1959919", - "1960617", - "1961040", - "1961068", - "1961190", - "1962204", - "1962265", - "1962268", - "1962434", - "1962516", - "1962636", - "1962860", - "1962990", - "1963011", - "1963306", - "1963446", - "1963463", - "1964191", - "1964195", - "1964471", - "1964637", - "1964653", - "1964657", - "1965166", - "1965208", - "1965345", - "1965763", - "1965777", - "1965795", - "1965810", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1966886", - "1967011", - "1967245", - "1967273", - "1967597", - "1967815", - "1968678", - "1968867", - "1969291", - "1969954", - "1970213", - "1970227", - "1970284", - "1971888", - "1972120", - "1972185", - "1972187", - "1972234", - "1972250", - "1972278", - "1972342", - "1972377", - "1972434", - "1972449", - "1973414", - "1973467", - "1975341", - "1975546", - "1975553", - "1975571", - "1975793", - "1975897", - "1975903", - "1976163", - "1977003", - "1977007", - "1977068", - "1978056", - "1978065", - "1978114", - "1978375", - "1978445", - "1978776", - "1978821", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1980521", - "1981696", - "1982406", - "1982500", - "1982525", - "1982529", - "1982541", - "1982542", - "1982592", - "1982636", - "1982671", - "1982746", - "1982791", - "1982838", - "1982885", - "1983000", - "1983170", - "1983260", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983558", - "1983648", - "1983694", - "1983705", - "1983755", - "1983888", - "1983896", - "1983922", - "1983997", - "1983999", - "1984117", - "1984734", - "1984942", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986171", - "1986220", - "1986367", - "1986452", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988602", - "1988684", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991179", - "1991371", - "1992066", - "1992504", - "1993419", - "4299576", - "4302252", - "4302268", - "4522322", - "4522795", - "4522886", - "4522911", - "4522916", - "4522922", - "4523522", - "4523556", - "4523564", - "4523725", - "4523880", - "4523883", - "4523885", - "4524054", - "4524072", - "4524221", - "4524376", - "4524393", - "4524403", - "4524421", - "4524426", - "4524636", - "4524638", - "4524740", - "4524793", - "4524951", - "4525068", - "4525078", - "4525189", - "4525266", - "4525354", - "4525369", - "4525420", - "4525425", - "4525443", - "4525476", - "4525487", - "4525500", - "4525505", - "4525510", - "4525530", - "4525540", - "4525547", - "4525557", - "4525562", - "4525610", - "4526048", - "4526050", - "4527339", - "4527342", - "4527957", - "4527972", - "4528539", - "4528593", - "4528692", - "4528818", - "4529064", - "4529248", - "4529566", - "4529630", - "4530002", - "4530151", - "4530424", - "4531147", - "4531158", - "4531284", - "4531402", - "4531506", - "4531517", - "4531687", - "4531690", - "4531708", - "4531713", - "4531968", - "4531975", - "4532022", - "4532050", - "4532057", - "4532088", - "4532095", - "4532122", - "4532160", - "4532239", - "4532253", - "4532293", - "4532297", - "4532357", - "4532412", - "4532471", - "4532493", - "4532500", - "4532516", - "4532532", - "4532534", - "4532544", - "4532696", - "4532811", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533431", - "4533433", - "4533442", - "4533446", - "4533661", - "4533671", - "4533714", - "4533952", - "4534011", - "4534038", - "4534052", - "4534057", - "4534166", - "4534207", - "4534225", - "4534290", - "4534299", - "4534389", - "4534398", - "4534408", - "4534458", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534686", - "4534719", - "4534767", - "4534872", - "4534909", - "4534914", - "4535817", - "4535827", - "4536292", - "4536483", - "5101394", - "5101678", - "5101745", - "5102628", - "5102951", - "5102982", - "5103066", - "5103121", - "5103185", - "5103451", - "5103736", - "5103998", - "5104056", - "5104442", - "5104558", - "5104641", - "5104759", - "5104781", - "5104882", - "5104891", - "5104903", - "5105339", - "5109498", - "5109506", - "5109523", - "5109661", - "5109821", - "5110200", - "5110213", - "5110644", - "5110670", - "5110885", - "5111574", - "5112155", - "5112254", - "5112283", - "5112291", - "5112336", - "5112345", - "5112362", - "5113036", - "5113078", - "5113084", - "5113234", - "5113847", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116416", - "5116475", - "5116609", - "5116669", - "5116698", - "5116850", - "5116941", - "5117049", - "5117089", - "5117189", - "5117399", - "5117400", - "5118892", - "5118904", - "5118996", - "5119143", - "5119245", - "5119513", - "5120396", - "5120465", - "5120668", - "5120675", - "5120767", - "5121040", - "5121177", - "5121517", - "5121737", - "5122439", - "5123042", - "5123221", - "5123339", - "5123394", - "5123461", - "5123922", - "5124007", - "5124029", - "5124143", - "5124233", - "5124911", - "5125689", - "5126052", - "5126212", - "5126217", - "5126675", - "5126680", - "5134667", - "5142870", - "5142971", - "5143048", - "5143129", - "5143147", - "5143380", - "5143453", - "5143477", - "5143651", - "5143675", - "5143697", - "5143944", - "5143947", - "5144190", - "5144426", - "5144534", - "5144543", - "5144677", - "5144721", - "5145009", - "5145136", - "5145186", - "5145269", - "5145409", - "5145965", - "5146342", - "5146379", - "5146412", - "5146496", - "5146510", - "5146559", - "5146611", - "5146659", - "5146677", - "5146837", - "5146883", - "5146946", - "5146961", - "5147038", - "5147039", - "5147062", - "5147150", - "5147171", - "5147193", - "5147208", - "5147232", - "5147245", - "5147478", - "5147608", - "5147638", - "5147681", - "5147827", - "5147834", - "5148247", - "5148248", - "5148286", - "5148394", - "5148424", - "5148436", - "5148462", - "5148475", - "5148486", - "5148487", - "5149315", - "5149414", - "5149438", - "5149474", - "5149665", - "5149746", - "5149820", - "5149836", - "5149839", - "5714973", - "5768880", - "5769028", - "5769062", - "5769068", - "5769072", - "5769164", - "5769191", - "5769272", - "5769709", - "5770913", - "5770922", - "5770942", - "5771230", - "5771236", - "5771259", - "5771350", - "5771357", - "5771982", - "5772063", - "5772129", - "5772176", - "5772178", - "5772186", - "5772196", - "5772202", - "5772205", - "5772206", - "5772210", - "5772269", - "5772349", - "5772351", - "5804895", - "5879654", - "5880147", - "5880512", - "5880533", - "5880545", - "5880550", - "5880552", - "5880559", - "5880563", - "5883985", - "5884571", - "5884851", - "5976947", - "6097214", - "6097225", - "6097228", - "6097234", - "6097236", - "6121184", - "6544687", - "7429212", - "7438067", - "7443518", - "7446048", - "7448174", - "7466487", - "7588222", - "7596232", - "7624468", - "7624494", - "7656811", - "7661023", - "7681733", - "7725644", - "7730078", - "7734292", - "7752082", - "7753668", - "7761138", - "7780930", - "7825213", - "7874258", - "7875265", - "7877231", - "7895336", - "7921916", - "7937573", - "7940536", - "7960566", - "7964262", - "7972792", - "7976145", - "7981386", - "7993353", - "8000103", - "8007222", - "8015612", - "8015895", - "8049830", - "8086347", - "8094357", - "8105817", - "8186212", - "8200050", - "8208583", - "8223165", - "8237343", - "8237987", - "8244266", - "8253467", - "8262357", - "8292872", - "8313553", - "8329661", - "8345820", - "8361848", - "8361973", - "8388883", - "8394261", - "8397564", - "8407461", - "8421569", - "8424972", - "8532380", - "8537359", - "8581601", - "8632989", - "8691947", - "8708745", - "8742426", - "8756768", - "8856895", - "8858121", - "8890502", - "9101339", - "9242559", - "9262981", - "9400895", - "9473121", - "9530977", - "9674732", - "9734171", - "9812211" - ], - "class_count": 1309, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7124755690715492, - "precision": 0.26342704573380454, - "recall": 0.7124755690715492, - "f1": 0.25428952382168746 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "10055273", - "10113008", - "10450501", - "10580256", - "10638451", - "10787705", - "10844862", - "10915497", - "10982815", - "11080751", - "11287091", - "11418741", - "11478679", - "11571523", - "11576787", - "11598540", - "11728049", - "11962292", - "11992983", - "12089608", - "12135372", - "12253343", - "1730978", - "1731598", - "1731826", - "1731860", - "1732063", - "1732416", - "1732452", - "1732565", - "1732662", - "1732685", - "1733258", - "1733484", - "1734453", - "1734704", - "1734826", - "1735532", - "1735855", - "1736377", - "1736425", - "1736484", - "1736560", - "1736727", - "1736898", - "1736906", - "1737491", - "1737524", - "1737526", - "1737533", - "1737542", - "1737552", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1738163", - "1738222", - "1738245", - "1738317", - "1738700", - "1738794", - "1738839", - "1739272", - "1739290", - "1739461", - "1739605", - "1739819", - "1739833", - "1739922", - "1739980", - "1739999", - "1740005", - "1740069", - "1740116", - "1740174", - "1740185", - "1740374", - "1740482", - "1740623", - "1741056", - "1741147", - "1741341", - "1741368", - "1741545", - "1741551", - "1741615", - "1741633", - "1741634", - "1741667", - "1741752", - "1741756", - "1742142", - "1742185", - "1742263", - "1742346", - "1743196", - "1743475", - "1743532", - "1743641", - "1743710", - "1743730", - "1743768", - "1743775", - "1743828", - "1743862", - "1743867", - "1743898", - "1744071", - "1744136", - "1744180", - "1744224", - "1744498", - "1744542", - "1744588", - "1744709", - "1744728", - "1744731", - "1744739", - "1744742", - "1744748", - "1744782", - "1744808", - "1744810", - "1744896", - "1744901", - "1745079", - "1745131", - "1745558", - "1745579", - "1745600", - "1745634", - "1745737", - "1746027", - "1746174", - "1746440", - "1746613", - "1746666", - "1746775", - "1746832", - "1746856", - "1746876", - "1746910", - "1748203", - "1748321", - "1748456", - "1748805", - "1748890", - "1748942", - "1749070", - "1749164", - "1749608", - "1749869", - "1749948", - "1750097", - "1751207", - "1751216", - "1751298", - "1751299", - "1751368", - "1751457", - "1758878", - "1759055", - "1759069", - "1759079", - "1759083", - "1759153", - "1759407", - "1759620", - "1759673", - "1759686", - "1760104", - "1760246", - "1760593", - "1760857", - "1760887", - "1760891", - "1761041", - "1761438", - "1761735", - "1761865", - "1762244", - "1763072", - "1763610", - "1764531", - "1764987", - "1765011", - "1765017", - "1765044", - "1765767", - "1765954", - "1766128", - "1766130", - "1766131", - "1766137", - "1766210", - "1766274", - "1766410", - "1766418", - "1766510", - "1766646", - "1766741", - "1766814", - "1767597", - "1767625", - "1767655", - "1768117", - "1768150", - "1768341", - "1768702", - "1769057", - "1769103", - "1769505", - "1769519", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770772", - "1770880", - "1771040", - "1771204", - "1771214", - "1771245", - "1771385", - "1771391", - "1771509", - "1771531", - "1771650", - "1771678", - "1771698", - "1771772", - "1772169", - "1772179", - "1772793", - "1772940", - "1772956", - "1773163", - "1773309", - "1773328", - "1775152", - "1775891", - "1776330", - "1776619", - "1776862", - "1777253", - "1778074", - "1778127", - "1778143", - "1778517", - "1778596", - "1779435", - "1779690", - "1780150", - "1780378", - "1781008", - "1781694", - "1782560", - "1782615", - "1782627", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783016", - "1783037", - "1783043", - "1783855", - "1784359", - "1784812", - "1784826", - "1784853", - "1785185", - "1785286", - "1785888", - "1785895", - "1786007", - "1786902", - "1787064", - "1787112", - "1787267", - "1787400", - "1787504", - "1787590", - "1787610", - "1787697", - "1787770", - "1788425", - "1788522", - "1788635", - "1789086", - "1789267", - "1789481", - "1789553", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789753", - "1789755", - "1789783", - "1789785", - "1789849", - "1789982", - "1790002", - "1790072", - "1790160", - "1790361", - "1790364", - "1790692", - "1790816", - "1791422", - "1791784", - "1792061", - "1792335", - "1792377", - "1792379", - "1792383", - "1792411", - "1792414", - "1792418", - "1792426", - "1793877", - "1793986", - "1794102", - "1794590", - "1795215", - "1795854", - "1796007", - "1796117", - "1796145", - "1796169", - "1796217", - "1796463", - "1796668", - "1796678", - "1797178", - "1797258", - "1797276", - "1797367", - "1797479", - "1798346", - "1798372", - "1798449", - "1798504", - "1798594", - "1798802", - "1798807", - "1798971", - "1798974", - "1798984", - "1799132", - "1799135", - "1799701", - "1799708", - "1800004", - "1800032", - "1801051", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1807206", - "1807969", - "1808752", - "1810099", - "1811789", - "1811896", - "1812394", - "1813114", - "1814630", - "1819145", - "1819268", - "1819873", - "1820039", - "1820372", - "1820406", - "1821856", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822787", - "1822796", - "1822819", - "1822830", - "1823726", - "1824113", - "1825064", - "1825077", - "1825083", - "1825156", - "1825176", - "1825539", - "1825971", - "1825983", - "1826022", - "1826033", - "1827125", - "1827645", - "1828162", - "1828637", - "1829322", - "1829363", - "1829776", - "1829785", - "1830241", - "1830380", - "1830408", - "1830410", - "1830537", - "1830584", - "1830632", - "1830838", - "1830843", - "1830879", - "1830937", - "1830962", - "1831002", - "1831128", - "1831136", - "1831168", - "1831643", - "1831752", - "1831780", - "1832853", - "1833626", - "1835031", - "1835156", - "1835457", - "1836899", - "1837172", - "1837420", - "1837429", - "1838838", - "1838911", - "1838969", - "1839293", - "1839296", - "1839851", - "1839893", - "1840301", - "1840346", - "1840360", - "1840380", - "1840408", - "1840478", - "1840555", - "1840581", - "1841158", - "1841159", - "1841261", - "1841296", - "1841616", - "1841675", - "1841813", - "1845270", - "1845368", - "1845962", - "1845965", - "1846107", - "1846112", - "1846236", - "1846729", - "1847407", - "1847956", - "1848356", - "1848426", - "1848596", - "1848610", - "1848636", - "1848657", - "1848730", - "1848753", - "1848864", - "1848920", - "1849284", - "1849294", - "1849477", - "1849630", - "1849897", - "1850008", - "1850246", - "1850450", - "1850506", - "1850522", - "1850538", - "1850781", - "1850971", - "1851010", - "1851203", - "1851220", - "1851337", - "1851555", - "1852177", - "1852311", - "1852430", - "1852956", - "1852978", - "1853064", - "1853079", - "1853587", - "1853723", - "1854202", - "1854237", - "1854287", - "1854347", - "1854792", - "1856005", - "1856289", - "1856595", - "1856620", - "1856658", - "1856686", - "1856691", - "1856701", - "1856730", - "1856867", - "1857577", - "1857626", - "1857828", - "1857829", - "1857878", - "1857924", - "1857978", - "1858074", - "1858113", - "1858163", - "1858531", - "1858698", - "1858775", - "1859046", - "1859305", - "1860408", - "1860621", - "1860628", - "1860668", - "1860688", - "1860768", - "1860852", - "1860987", - "1861031", - "1861395", - "1861644", - "1862578", - "1862580", - "1862719", - "1862837", - "1864161", - "1864358", - "1864377", - "1864652", - "1866568", - "1867820", - "1869478", - "1869489", - "1869512", - "1869803", - "1869976", - "1870202", - "1870249", - "1870250", - "1870450", - "1870988", - "1871160", - "1871252", - "1871407", - "1871698", - "1871826", - "1872315", - "1872368", - "1872901", - "1873079", - "1873411", - "1874192", - "1874211", - "1874375", - "1875008", - "1875120", - "1875327", - "1875631", - "1875633", - "1875827", - "1875865", - "1875869", - "1875918", - "1875952", - "1876329", - "1876409", - "1876542", - "1876854", - "1877341", - "1877368", - "1877941", - "1877988", - "1878470", - "1878490", - "1878782", - "1878862", - "1878879", - "1878895", - "1878907", - "1878939", - "1879252", - "1879452", - "1879630", - "1879655", - "1879735", - "1879970", - "1880040", - "1880062", - "1880064", - "1880104", - "1880138", - "1880139", - "1880140", - "1880143", - "1881151", - "1881603", - "1881834", - "1882158", - "1882210", - "1882557", - "1882905", - "1883161", - "1883386", - "1884212", - "1884255", - "1884273", - "1884332", - "1884370", - "1884403", - "1884465", - "1884970", - "1886084", - "1886320", - "1886579", - "1886587", - "1887108", - "1887173", - "1887290", - "1887701", - "1888579", - "1888733", - "1888743", - "1888759", - "1888826", - "1889833", - "1889942", - "1890187", - "1890534", - "1890576", - "1890656", - "1890703", - "1890772", - "1891059", - "1891326", - "1891386", - "1891426", - "1891473", - "1891493", - "1891494", - "1911112", - "1918868", - "1920496", - "1920712", - "1926260", - "1939432", - "1939658", - "1939677", - "1940510", - "1940807", - "1941377", - "1951557", - "1951649", - "1951713", - "1952014", - "1952062", - "1952130", - "1952229", - "1952449", - "1952532", - "1952806", - "1952812", - "1954563", - "1956440", - "1956524", - "1956599", - "1957266", - "1957300", - "1957570", - "1957572", - "1957632", - "1957816", - "1957845", - "1957852", - "1958024", - "1958323", - "1959383", - "1959395", - "1959467", - "1959914", - "1959919", - "1960617", - "1961040", - "1961068", - "1961190", - "1962204", - "1962265", - "1962268", - "1962434", - "1962516", - "1962636", - "1962860", - "1962990", - "1963011", - "1963306", - "1963446", - "1963463", - "1964191", - "1964195", - "1964471", - "1964637", - "1964653", - "1964657", - "1965166", - "1965208", - "1965345", - "1965763", - "1965777", - "1965795", - "1965810", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1966886", - "1967011", - "1967245", - "1967273", - "1967597", - "1967815", - "1968678", - "1968867", - "1969291", - "1969954", - "1970213", - "1970227", - "1970284", - "1971888", - "1972120", - "1972185", - "1972187", - "1972234", - "1972250", - "1972278", - "1972342", - "1972377", - "1972434", - "1972449", - "1973414", - "1973467", - "1975341", - "1975546", - "1975553", - "1975571", - "1975793", - "1975897", - "1975903", - "1976163", - "1977003", - "1977007", - "1977068", - "1978056", - "1978065", - "1978114", - "1978375", - "1978445", - "1978776", - "1978821", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1980521", - "1981696", - "1982406", - "1982500", - "1982525", - "1982529", - "1982541", - "1982542", - "1982592", - "1982636", - "1982671", - "1982746", - "1982791", - "1982838", - "1982885", - "1983000", - "1983170", - "1983260", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983558", - "1983648", - "1983694", - "1983705", - "1983755", - "1983888", - "1983896", - "1983922", - "1983997", - "1983999", - "1984117", - "1984734", - "1984942", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986171", - "1986220", - "1986367", - "1986452", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988602", - "1988684", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991179", - "1991371", - "1992066", - "1992504", - "1993419", - "4299576", - "4302252", - "4302268", - "4522322", - "4522795", - "4522886", - "4522911", - "4522916", - "4522922", - "4523522", - "4523556", - "4523564", - "4523725", - "4523880", - "4523883", - "4523885", - "4524054", - "4524072", - "4524221", - "4524376", - "4524393", - "4524403", - "4524421", - "4524426", - "4524636", - "4524638", - "4524740", - "4524793", - "4524951", - "4525068", - "4525078", - "4525189", - "4525266", - "4525354", - "4525369", - "4525420", - "4525425", - "4525443", - "4525476", - "4525487", - "4525500", - "4525505", - "4525510", - "4525530", - "4525540", - "4525547", - "4525557", - "4525562", - "4525610", - "4526048", - "4526050", - "4527339", - "4527342", - "4527957", - "4527972", - "4528539", - "4528593", - "4528692", - "4528818", - "4529064", - "4529248", - "4529566", - "4529630", - "4530002", - "4530151", - "4530424", - "4531147", - "4531158", - "4531284", - "4531402", - "4531506", - "4531517", - "4531687", - "4531690", - "4531708", - "4531713", - "4531968", - "4531975", - "4532022", - "4532050", - "4532057", - "4532088", - "4532095", - "4532122", - "4532160", - "4532239", - "4532253", - "4532293", - "4532297", - "4532357", - "4532412", - "4532471", - "4532493", - "4532500", - "4532516", - "4532532", - "4532534", - "4532544", - "4532696", - "4532811", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533431", - "4533433", - "4533442", - "4533446", - "4533661", - "4533671", - "4533714", - "4533952", - "4534011", - "4534038", - "4534052", - "4534057", - "4534166", - "4534207", - "4534225", - "4534290", - "4534299", - "4534389", - "4534398", - "4534408", - "4534458", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534686", - "4534719", - "4534767", - "4534872", - "4534909", - "4534914", - "4535817", - "4535827", - "4536292", - "4536483", - "5101394", - "5101678", - "5101745", - "5102628", - "5102951", - "5102982", - "5103066", - "5103121", - "5103185", - "5103451", - "5103736", - "5103998", - "5104056", - "5104442", - "5104558", - "5104641", - "5104759", - "5104781", - "5104882", - "5104891", - "5104903", - "5105339", - "5109498", - "5109506", - "5109523", - "5109661", - "5109821", - "5110200", - "5110213", - "5110644", - "5110670", - "5110885", - "5111574", - "5112155", - "5112254", - "5112283", - "5112291", - "5112336", - "5112345", - "5112362", - "5113036", - "5113078", - "5113084", - "5113234", - "5113847", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116416", - "5116475", - "5116609", - "5116669", - "5116698", - "5116850", - "5116941", - "5117049", - "5117089", - "5117189", - "5117399", - "5117400", - "5118892", - "5118904", - "5118996", - "5119143", - "5119245", - "5119513", - "5120396", - "5120465", - "5120668", - "5120675", - "5120767", - "5121040", - "5121177", - "5121517", - "5121737", - "5122439", - "5123042", - "5123221", - "5123339", - "5123394", - "5123461", - "5123922", - "5124007", - "5124029", - "5124143", - "5124233", - "5124911", - "5125689", - "5126052", - "5126212", - "5126217", - "5126675", - "5126680", - "5134667", - "5142870", - "5142971", - "5143048", - "5143129", - "5143147", - "5143380", - "5143453", - "5143477", - "5143651", - "5143675", - "5143697", - "5143944", - "5143947", - "5144190", - "5144426", - "5144534", - "5144543", - "5144677", - "5144721", - "5145009", - "5145136", - "5145186", - "5145269", - "5145409", - "5145965", - "5146342", - "5146379", - "5146412", - "5146496", - "5146510", - "5146559", - "5146611", - "5146659", - "5146677", - "5146837", - "5146883", - "5146946", - "5146961", - "5147038", - "5147039", - "5147062", - "5147150", - "5147171", - "5147193", - "5147208", - "5147232", - "5147245", - "5147478", - "5147608", - "5147638", - "5147681", - "5147827", - "5147834", - "5148247", - "5148248", - "5148286", - "5148394", - "5148424", - "5148436", - "5148462", - "5148475", - "5148486", - "5148487", - "5149315", - "5149414", - "5149438", - "5149474", - "5149665", - "5149746", - "5149820", - "5149836", - "5149839", - "5714973", - "5768880", - "5769028", - "5769062", - "5769068", - "5769072", - "5769164", - "5769191", - "5769272", - "5769709", - "5770913", - "5770922", - "5770942", - "5771230", - "5771236", - "5771259", - "5771350", - "5771357", - "5771982", - "5772063", - "5772129", - "5772176", - "5772178", - "5772186", - "5772196", - "5772202", - "5772205", - "5772206", - "5772210", - "5772269", - "5772349", - "5772351", - "5804895", - "5879654", - "5880147", - "5880512", - "5880533", - "5880545", - "5880550", - "5880552", - "5880559", - "5880563", - "5883985", - "5884571", - "5884851", - "5976947", - "6097214", - "6097225", - "6097228", - "6097234", - "6097236", - "6121184", - "6544687", - "7429212", - "7438067", - "7443518", - "7446048", - "7448174", - "7466487", - "7588222", - "7596232", - "7624468", - "7624494", - "7656811", - "7661023", - "7681733", - "7725644", - "7730078", - "7734292", - "7752082", - "7753668", - "7761138", - "7780930", - "7825213", - "7874258", - "7875265", - "7877231", - "7895336", - "7921916", - "7937573", - "7940536", - "7960566", - "7964262", - "7972792", - "7976145", - "7981386", - "7993353", - "8000103", - "8007222", - "8015612", - "8015895", - "8049830", - "8086347", - "8094357", - "8105817", - "8186212", - "8200050", - "8208583", - "8223165", - "8237343", - "8237987", - "8244266", - "8253467", - "8262357", - "8292872", - "8313553", - "8329661", - "8345820", - "8361848", - "8361973", - "8388883", - "8394261", - "8397564", - "8407461", - "8421569", - "8424972", - "8532380", - "8537359", - "8581601", - "8632989", - "8691947", - "8708745", - "8742426", - "8756768", - "8856895", - "8858121", - "8890502", - "9101339", - "9242559", - "9262981", - "9400895", - "9473121", - "9530977", - "9674732", - "9734171", - "9812211" - ], - "class_count": 1309, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7123551106111988, - "precision": 0.26343028004895147, - "recall": 0.7123551106111988, - "f1": 0.25432102340018486 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "10055273", - "10113008", - "10312073", - "10450501", - "10580256", - "10638451", - "10844862", - "10915497", - "10982815", - "11287091", - "11418741", - "11478679", - "11571523", - "11598540", - "11728049", - "11962292", - "12089608", - "12135372", - "12253343", - "12318291", - "1730978", - "1731598", - "1731826", - "1731860", - "1732063", - "1732416", - "1732452", - "1732565", - "1732662", - "1732685", - "1733258", - "1733484", - "1734453", - "1734704", - "1734826", - "1735532", - "1735855", - "1736377", - "1736425", - "1736484", - "1736560", - "1736601", - "1736898", - "1737491", - "1737524", - "1737533", - "1737542", - "1737552", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1738163", - "1738222", - "1738245", - "1738317", - "1738794", - "1738839", - "1739272", - "1739290", - "1739381", - "1739449", - "1739451", - "1739461", - "1739819", - "1739833", - "1739922", - "1739999", - "1740005", - "1740069", - "1740116", - "1740183", - "1740185", - "1740374", - "1740482", - "1740623", - "1741147", - "1741341", - "1741368", - "1741545", - "1741593", - "1741633", - "1741667", - "1741752", - "1741756", - "1742142", - "1742263", - "1743196", - "1743475", - "1743532", - "1743641", - "1743710", - "1743775", - "1743828", - "1743862", - "1744071", - "1744136", - "1744180", - "1744224", - "1744542", - "1744588", - "1744709", - "1744728", - "1744731", - "1744739", - "1744748", - "1744782", - "1744808", - "1744810", - "1745079", - "1745558", - "1745634", - "1745737", - "1746027", - "1746174", - "1746440", - "1746613", - "1746666", - "1746775", - "1746832", - "1746856", - "1746876", - "1746910", - "1748203", - "1748321", - "1748456", - "1748805", - "1748942", - "1749070", - "1749164", - "1749596", - "1749948", - "1751051", - "1751207", - "1751216", - "1751299", - "1751368", - "1758878", - "1759055", - "1759069", - "1759079", - "1759083", - "1759153", - "1759407", - "1759620", - "1759661", - "1759667", - "1759673", - "1759686", - "1760104", - "1760246", - "1760593", - "1760857", - "1760887", - "1760891", - "1761041", - "1761111", - "1761438", - "1761735", - "1761865", - "1762244", - "1763072", - "1763610", - "1764531", - "1764987", - "1765011", - "1765017", - "1765044", - "1765767", - "1765954", - "1766128", - "1766130", - "1766137", - "1766210", - "1766274", - "1766410", - "1766418", - "1766510", - "1766646", - "1766741", - "1766814", - "1767597", - "1767625", - "1767655", - "1768117", - "1768150", - "1768341", - "1768702", - "1769057", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770772", - "1770880", - "1771040", - "1771214", - "1771245", - "1771385", - "1771391", - "1771509", - "1771531", - "1771678", - "1771698", - "1771772", - "1772169", - "1772179", - "1772793", - "1772940", - "1772956", - "1773163", - "1773309", - "1773328", - "1775152", - "1775891", - "1776330", - "1776619", - "1776862", - "1777253", - "1778074", - "1778143", - "1778517", - "1778596", - "1779435", - "1779690", - "1780150", - "1780378", - "1781694", - "1782560", - "1782615", - "1782627", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783016", - "1783037", - "1783043", - "1784359", - "1784812", - "1784826", - "1784853", - "1785185", - "1785286", - "1785888", - "1785895", - "1786007", - "1786902", - "1787064", - "1787112", - "1787267", - "1787400", - "1787504", - "1787590", - "1787610", - "1787770", - "1788425", - "1788522", - "1788635", - "1789076", - "1789086", - "1789267", - "1789481", - "1789553", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789753", - "1789755", - "1789783", - "1789785", - "1789849", - "1789982", - "1790002", - "1790072", - "1790160", - "1790361", - "1790364", - "1790692", - "1790816", - "1791422", - "1791784", - "1792061", - "1792379", - "1792383", - "1792411", - "1792418", - "1793877", - "1793986", - "1794102", - "1794590", - "1795215", - "1795854", - "1796007", - "1796117", - "1796145", - "1796169", - "1796463", - "1796668", - "1796678", - "1797178", - "1797258", - "1797276", - "1797367", - "1797479", - "1798346", - "1798372", - "1798449", - "1798504", - "1798594", - "1798802", - "1798807", - "1798971", - "1798974", - "1799132", - "1799135", - "1799701", - "1799708", - "1799799", - "1800004", - "1800032", - "1801051", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1807206", - "1807969", - "1808752", - "1810099", - "1811789", - "1811896", - "1812394", - "1813114", - "1819145", - "1819268", - "1819873", - "1820039", - "1820372", - "1820406", - "1821856", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822787", - "1822796", - "1822819", - "1822830", - "1823726", - "1824113", - "1825064", - "1825077", - "1825083", - "1825156", - "1825176", - "1825971", - "1825983", - "1826022", - "1826033", - "1827125", - "1827645", - "1828162", - "1828637", - "1829322", - "1829363", - "1829776", - "1830152", - "1830241", - "1830372", - "1830380", - "1830410", - "1830457", - "1830537", - "1830584", - "1830632", - "1830802", - "1830838", - "1830843", - "1830879", - "1830937", - "1830962", - "1831136", - "1831168", - "1831643", - "1831752", - "1831780", - "1832853", - "1833626", - "1835031", - "1835156", - "1835433", - "1835456", - "1835457", - "1836899", - "1837172", - "1837420", - "1837429", - "1837515", - "1838911", - "1838969", - "1839296", - "1839851", - "1839893", - "1840301", - "1840346", - "1840360", - "1840380", - "1840478", - "1840483", - "1840555", - "1841158", - "1841159", - "1841261", - "1841296", - "1841675", - "1841813", - "1845270", - "1845368", - "1845962", - "1845965", - "1846107", - "1846111", - "1846159", - "1846236", - "1846729", - "1847407", - "1847956", - "1848356", - "1848610", - "1848657", - "1848864", - "1848920", - "1849273", - "1849284", - "1849294", - "1849477", - "1849897", - "1850008", - "1850246", - "1850450", - "1850506", - "1850522", - "1850538", - "1850781", - "1850971", - "1851203", - "1851220", - "1851337", - "1851555", - "1852177", - "1852311", - "1852956", - "1852978", - "1853064", - "1853079", - "1853723", - "1854202", - "1854237", - "1854287", - "1854347", - "1856005", - "1856289", - "1856595", - "1856620", - "1856691", - "1856701", - "1856768", - "1856867", - "1857577", - "1857626", - "1857828", - "1857829", - "1857878", - "1857924", - "1857978", - "1858074", - "1858113", - "1858163", - "1858531", - "1858775", - "1859305", - "1860628", - "1860688", - "1860709", - "1860768", - "1860852", - "1860983", - "1860987", - "1861395", - "1861644", - "1862578", - "1862580", - "1862837", - "1864161", - "1864377", - "1864652", - "1867820", - "1869478", - "1869512", - "1869803", - "1869976", - "1870202", - "1870249", - "1870250", - "1870450", - "1870988", - "1871160", - "1871252", - "1871407", - "1871698", - "1872315", - "1872368", - "1872901", - "1873079", - "1873411", - "1873783", - "1874375", - "1875008", - "1875120", - "1875327", - "1875631", - "1875865", - "1875869", - "1875918", - "1876329", - "1876409", - "1876542", - "1877368", - "1877941", - "1877988", - "1878470", - "1878490", - "1878586", - "1878862", - "1878879", - "1878895", - "1878907", - "1878939", - "1879252", - "1879452", - "1879735", - "1879970", - "1880062", - "1880064", - "1880104", - "1880139", - "1880140", - "1880143", - "1881151", - "1881834", - "1882158", - "1882210", - "1882557", - "1882905", - "1883161", - "1883386", - "1884212", - "1884255", - "1884273", - "1884332", - "1884370", - "1884403", - "1884465", - "1884970", - "1886084", - "1886579", - "1886587", - "1887108", - "1887173", - "1887290", - "1887701", - "1888579", - "1888733", - "1888743", - "1888759", - "1888826", - "1889833", - "1889942", - "1890187", - "1890534", - "1890576", - "1890656", - "1890703", - "1890772", - "1891059", - "1891326", - "1891386", - "1891426", - "1891473", - "1891493", - "1892242", - "1902533", - "1918868", - "1920496", - "1920712", - "1926260", - "1939432", - "1939658", - "1939677", - "1940744", - "1940807", - "1941437", - "1951557", - "1951649", - "1951713", - "1952014", - "1952062", - "1952130", - "1952229", - "1952449", - "1952532", - "1952806", - "1952812", - "1956440", - "1956524", - "1956599", - "1957266", - "1957300", - "1957570", - "1957572", - "1957632", - "1957718", - "1957816", - "1957845", - "1957852", - "1958024", - "1958323", - "1959383", - "1959395", - "1959914", - "1959919", - "1960617", - "1961040", - "1961068", - "1961190", - "1962204", - "1962265", - "1962268", - "1962434", - "1962516", - "1962636", - "1962860", - "1962990", - "1963011", - "1963306", - "1963446", - "1963463", - "1964191", - "1964195", - "1964471", - "1964637", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965795", - "1965810", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1966886", - "1967011", - "1967245", - "1967273", - "1967597", - "1967815", - "1968678", - "1968867", - "1969291", - "1970213", - "1970227", - "1970284", - "1971858", - "1971888", - "1972120", - "1972185", - "1972187", - "1972234", - "1972250", - "1972278", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975341", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1977007", - "1977068", - "1978056", - "1978065", - "1978114", - "1978375", - "1978445", - "1978776", - "1978821", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1980521", - "1981696", - "1982406", - "1982500", - "1982525", - "1982529", - "1982541", - "1982542", - "1982592", - "1982636", - "1982671", - "1982746", - "1982791", - "1982838", - "1982885", - "1983000", - "1983170", - "1983260", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983558", - "1983648", - "1983694", - "1983705", - "1983755", - "1983888", - "1983896", - "1983922", - "1983997", - "1983999", - "1984117", - "1984734", - "1984942", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986171", - "1986220", - "1986367", - "1986452", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988602", - "1988684", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991179", - "1991371", - "1992066", - "1992504", - "1993419", - "4302252", - "4302268", - "4522322", - "4522795", - "4522911", - "4522916", - "4522922", - "4523522", - "4523560", - "4523725", - "4523880", - "4523883", - "4523885", - "4524054", - "4524070", - "4524072", - "4524376", - "4524393", - "4524403", - "4524421", - "4524426", - "4524636", - "4524638", - "4524740", - "4524793", - "4524890", - "4525078", - "4525189", - "4525354", - "4525420", - "4525425", - "4525487", - "4525500", - "4525505", - "4525510", - "4525530", - "4525540", - "4525547", - "4525562", - "4525610", - "4525859", - "4526048", - "4527339", - "4527342", - "4527957", - "4527972", - "4528692", - "4529064", - "4529248", - "4529566", - "4529630", - "4530002", - "4530151", - "4530424", - "4531145", - "4531147", - "4531284", - "4531402", - "4531506", - "4531517", - "4531687", - "4531690", - "4531708", - "4531968", - "4531975", - "4532022", - "4532050", - "4532057", - "4532095", - "4532122", - "4532239", - "4532253", - "4532293", - "4532297", - "4532357", - "4532405", - "4532412", - "4532471", - "4532493", - "4532500", - "4532516", - "4532534", - "4532544", - "4532696", - "4532811", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533431", - "4533433", - "4533442", - "4533446", - "4533661", - "4533671", - "4533952", - "4534038", - "4534052", - "4534057", - "4534166", - "4534207", - "4534225", - "4534290", - "4534299", - "4534389", - "4534398", - "4534408", - "4534458", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534686", - "4534719", - "4534762", - "4534767", - "4534872", - "4534909", - "4534914", - "4535817", - "4535827", - "4536292", - "4536483", - "5101678", - "5101745", - "5102951", - "5102982", - "5103066", - "5103121", - "5103451", - "5103736", - "5104056", - "5104442", - "5104558", - "5104641", - "5104781", - "5104891", - "5104903", - "5105088", - "5105339", - "5109523", - "5109661", - "5109821", - "5110200", - "5110213", - "5110644", - "5110670", - "5110871", - "5110885", - "5111574", - "5112155", - "5112254", - "5112283", - "5112291", - "5112336", - "5112345", - "5112362", - "5113036", - "5113078", - "5113234", - "5113847", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116416", - "5116475", - "5116609", - "5116669", - "5116698", - "5116850", - "5116941", - "5117049", - "5117089", - "5117189", - "5117399", - "5117400", - "5118892", - "5118904", - "5118996", - "5119143", - "5119245", - "5119513", - "5120396", - "5120465", - "5120668", - "5120675", - "5120767", - "5121040", - "5121177", - "5121517", - "5121737", - "5122439", - "5123221", - "5123339", - "5123394", - "5123461", - "5123582", - "5123922", - "5124007", - "5124029", - "5124143", - "5124233", - "5124911", - "5125689", - "5126212", - "5126217", - "5126675", - "5126680", - "5134667", - "5141501", - "5141677", - "5142870", - "5142971", - "5143048", - "5143129", - "5143147", - "5143380", - "5143453", - "5143477", - "5143651", - "5143675", - "5143697", - "5143944", - "5143947", - "5144190", - "5144426", - "5144534", - "5144543", - "5144677", - "5144721", - "5145009", - "5145136", - "5145186", - "5145269", - "5145409", - "5145965", - "5146342", - "5146379", - "5146412", - "5146496", - "5146510", - "5146559", - "5146677", - "5146837", - "5146883", - "5146946", - "5146961", - "5147038", - "5147039", - "5147062", - "5147150", - "5147171", - "5147193", - "5147208", - "5147232", - "5147245", - "5147478", - "5147608", - "5147638", - "5147681", - "5147827", - "5147834", - "5148248", - "5148286", - "5148394", - "5148424", - "5148436", - "5148462", - "5148475", - "5148486", - "5148487", - "5149315", - "5149414", - "5149438", - "5149474", - "5149499", - "5149665", - "5149746", - "5149820", - "5149839", - "5714973", - "5768880", - "5769028", - "5769062", - "5769068", - "5769072", - "5769191", - "5769272", - "5769709", - "5770913", - "5770942", - "5771230", - "5771259", - "5771350", - "5771357", - "5771982", - "5772063", - "5772129", - "5772176", - "5772178", - "5772186", - "5772196", - "5772202", - "5772205", - "5772206", - "5772210", - "5772269", - "5772349", - "5772351", - "5804895", - "5879654", - "5880147", - "5880512", - "5880533", - "5880545", - "5880550", - "5880552", - "5880559", - "5880563", - "5883985", - "5884571", - "5884851", - "6097214", - "6097225", - "6097228", - "6097234", - "6097236", - "6121184", - "6544687", - "7429212", - "7438067", - "7443518", - "7446048", - "7448174", - "7466487", - "7588222", - "7596232", - "7624468", - "7656811", - "7681733", - "7730078", - "7734292", - "7752082", - "7753668", - "7780930", - "7825213", - "7874258", - "7875265", - "7877231", - "7895336", - "7921916", - "7937573", - "7940536", - "7960566", - "7972792", - "7976145", - "7981386", - "7993353", - "8000103", - "8007222", - "8015895", - "8049830", - "8086347", - "8094357", - "8105817", - "8186212", - "8208583", - "8223165", - "8237343", - "8237987", - "8244266", - "8253467", - "8262357", - "8273859", - "8292872", - "8313553", - "8361848", - "8361973", - "8369868", - "8388883", - "8394261", - "8397564", - "8407461", - "8421569", - "8532380", - "8537359", - "8581601", - "8742426", - "8756768", - "8869900", - "8890502", - "9101339", - "9242559", - "9262981", - "9359597", - "9473121", - "9530977", - "9674732", - "9734171", - "9812211" - ], - "class_count": 1197, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7394942213066358, - "precision": 0.3045154257441184, - "recall": 0.7394942213066358, - "f1": 0.29354423320755 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "10055273", - "10113008", - "10312073", - "10450501", - "10580256", - "10638451", - "10844862", - "10915497", - "10982815", - "11287091", - "11418741", - "11478679", - "11571523", - "11598540", - "11728049", - "11962292", - "12089608", - "12135372", - "12253343", - "12318291", - "1730978", - "1731598", - "1731826", - "1731860", - "1732063", - "1732416", - "1732452", - "1732565", - "1732662", - "1732685", - "1733258", - "1733484", - "1734453", - "1734704", - "1734826", - "1735532", - "1735855", - "1736377", - "1736425", - "1736484", - "1736560", - "1736601", - "1736898", - "1737491", - "1737524", - "1737533", - "1737542", - "1737552", - "1737650", - "1737775", - "1737776", - "1737847", - "1738050", - "1738163", - "1738222", - "1738245", - "1738317", - "1738794", - "1738839", - "1739272", - "1739290", - "1739381", - "1739449", - "1739451", - "1739461", - "1739819", - "1739833", - "1739922", - "1739999", - "1740005", - "1740069", - "1740116", - "1740183", - "1740185", - "1740374", - "1740482", - "1740623", - "1741147", - "1741341", - "1741368", - "1741545", - "1741593", - "1741633", - "1741667", - "1741752", - "1741756", - "1742142", - "1742263", - "1743196", - "1743475", - "1743532", - "1743641", - "1743710", - "1743775", - "1743828", - "1743862", - "1744071", - "1744136", - "1744180", - "1744224", - "1744542", - "1744588", - "1744709", - "1744728", - "1744731", - "1744739", - "1744748", - "1744782", - "1744808", - "1744810", - "1745079", - "1745558", - "1745634", - "1745737", - "1746027", - "1746174", - "1746440", - "1746613", - "1746666", - "1746775", - "1746832", - "1746856", - "1746876", - "1746910", - "1748203", - "1748321", - "1748456", - "1748805", - "1748942", - "1749070", - "1749164", - "1749596", - "1749948", - "1751051", - "1751207", - "1751216", - "1751299", - "1751368", - "1758878", - "1759055", - "1759069", - "1759079", - "1759083", - "1759153", - "1759407", - "1759620", - "1759661", - "1759667", - "1759673", - "1759686", - "1760104", - "1760246", - "1760593", - "1760857", - "1760887", - "1760891", - "1761041", - "1761111", - "1761438", - "1761735", - "1761865", - "1762244", - "1763072", - "1763610", - "1764531", - "1764987", - "1765011", - "1765017", - "1765044", - "1765767", - "1765954", - "1766128", - "1766130", - "1766137", - "1766210", - "1766274", - "1766410", - "1766418", - "1766510", - "1766646", - "1766741", - "1766814", - "1767597", - "1767625", - "1767655", - "1768117", - "1768150", - "1768341", - "1768702", - "1769057", - "1769103", - "1769505", - "1769566", - "1769897", - "1769958", - "1770150", - "1770307", - "1770477", - "1770772", - "1770880", - "1771040", - "1771214", - "1771245", - "1771385", - "1771391", - "1771509", - "1771531", - "1771678", - "1771698", - "1771772", - "1772169", - "1772179", - "1772793", - "1772940", - "1772956", - "1773163", - "1773309", - "1773328", - "1775152", - "1775891", - "1776330", - "1776619", - "1776862", - "1777253", - "1778074", - "1778143", - "1778517", - "1778596", - "1779435", - "1779690", - "1780150", - "1780378", - "1781694", - "1782560", - "1782615", - "1782627", - "1782672", - "1782726", - "1782763", - "1782777", - "1782841", - "1782927", - "1782948", - "1783016", - "1783037", - "1783043", - "1784359", - "1784812", - "1784826", - "1784853", - "1785185", - "1785286", - "1785888", - "1785895", - "1786007", - "1786902", - "1787064", - "1787112", - "1787267", - "1787400", - "1787504", - "1787590", - "1787610", - "1787770", - "1788425", - "1788522", - "1788635", - "1789076", - "1789086", - "1789267", - "1789481", - "1789553", - "1789580", - "1789694", - "1789695", - "1789730", - "1789745", - "1789753", - "1789755", - "1789783", - "1789785", - "1789849", - "1789982", - "1790002", - "1790072", - "1790160", - "1790361", - "1790364", - "1790692", - "1790816", - "1791422", - "1791784", - "1792061", - "1792379", - "1792383", - "1792411", - "1792418", - "1793877", - "1793986", - "1794102", - "1794590", - "1795215", - "1795854", - "1796007", - "1796117", - "1796145", - "1796169", - "1796463", - "1796668", - "1796678", - "1797178", - "1797258", - "1797276", - "1797367", - "1797479", - "1798346", - "1798372", - "1798449", - "1798504", - "1798594", - "1798802", - "1798807", - "1798971", - "1798974", - "1799132", - "1799135", - "1799701", - "1799708", - "1799799", - "1800004", - "1800032", - "1801051", - "1801896", - "1802280", - "1803012", - "1803073", - "1804071", - "1804906", - "1807206", - "1807969", - "1808752", - "1810099", - "1811789", - "1811896", - "1812394", - "1813114", - "1819145", - "1819268", - "1819873", - "1820039", - "1820372", - "1820406", - "1821856", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822787", - "1822796", - "1822819", - "1822830", - "1823726", - "1824113", - "1825064", - "1825077", - "1825083", - "1825156", - "1825176", - "1825971", - "1825983", - "1826022", - "1826033", - "1827125", - "1827645", - "1828162", - "1828637", - "1829322", - "1829363", - "1829776", - "1830152", - "1830241", - "1830372", - "1830380", - "1830410", - "1830457", - "1830537", - "1830584", - "1830632", - "1830802", - "1830838", - "1830843", - "1830879", - "1830937", - "1830962", - "1831136", - "1831168", - "1831643", - "1831752", - "1831780", - "1832853", - "1833626", - "1835031", - "1835156", - "1835433", - "1835456", - "1835457", - "1836899", - "1837172", - "1837420", - "1837429", - "1837515", - "1838911", - "1838969", - "1839296", - "1839851", - "1839893", - "1840301", - "1840346", - "1840360", - "1840380", - "1840478", - "1840483", - "1840555", - "1841158", - "1841159", - "1841261", - "1841296", - "1841675", - "1841813", - "1845270", - "1845368", - "1845962", - "1845965", - "1846107", - "1846111", - "1846159", - "1846236", - "1846729", - "1847407", - "1847956", - "1848356", - "1848610", - "1848657", - "1848864", - "1848920", - "1849273", - "1849284", - "1849294", - "1849477", - "1849897", - "1850008", - "1850246", - "1850450", - "1850506", - "1850522", - "1850538", - "1850781", - "1850971", - "1851203", - "1851220", - "1851337", - "1851555", - "1852177", - "1852311", - "1852956", - "1852978", - "1853064", - "1853079", - "1853723", - "1854202", - "1854237", - "1854287", - "1854347", - "1856005", - "1856289", - "1856595", - "1856620", - "1856691", - "1856701", - "1856768", - "1856867", - "1857577", - "1857626", - "1857828", - "1857829", - "1857878", - "1857924", - "1857978", - "1858074", - "1858113", - "1858163", - "1858531", - "1858775", - "1859305", - "1860628", - "1860688", - "1860709", - "1860768", - "1860852", - "1860983", - "1860987", - "1861395", - "1861644", - "1862578", - "1862580", - "1862837", - "1864161", - "1864377", - "1864652", - "1867820", - "1869478", - "1869512", - "1869803", - "1869976", - "1870202", - "1870249", - "1870250", - "1870450", - "1870988", - "1871160", - "1871252", - "1871407", - "1871698", - "1872315", - "1872368", - "1872901", - "1873079", - "1873411", - "1873783", - "1874375", - "1875008", - "1875120", - "1875327", - "1875631", - "1875865", - "1875869", - "1875918", - "1876329", - "1876409", - "1876542", - "1877368", - "1877941", - "1877988", - "1878470", - "1878490", - "1878862", - "1878879", - "1878895", - "1878907", - "1878939", - "1879252", - "1879452", - "1879735", - "1879970", - "1880062", - "1880064", - "1880104", - "1880139", - "1880140", - "1880143", - "1881151", - "1881834", - "1882158", - "1882210", - "1882557", - "1882905", - "1883161", - "1883386", - "1884212", - "1884255", - "1884273", - "1884332", - "1884370", - "1884403", - "1884465", - "1884970", - "1886084", - "1886579", - "1886587", - "1887108", - "1887173", - "1887290", - "1887701", - "1888579", - "1888733", - "1888743", - "1888759", - "1888826", - "1889833", - "1889942", - "1890187", - "1890534", - "1890576", - "1890656", - "1890703", - "1890772", - "1891059", - "1891326", - "1891386", - "1891426", - "1891473", - "1891493", - "1892242", - "1902533", - "1918868", - "1920496", - "1920712", - "1926260", - "1939432", - "1939658", - "1939677", - "1940744", - "1940807", - "1941437", - "1951557", - "1951649", - "1951713", - "1952014", - "1952062", - "1952130", - "1952229", - "1952449", - "1952532", - "1952806", - "1952812", - "1956440", - "1956524", - "1956599", - "1957266", - "1957300", - "1957570", - "1957572", - "1957632", - "1957718", - "1957816", - "1957845", - "1957852", - "1958024", - "1958323", - "1959383", - "1959395", - "1959914", - "1959919", - "1960617", - "1961040", - "1961068", - "1961190", - "1962204", - "1962265", - "1962268", - "1962434", - "1962516", - "1962636", - "1962860", - "1962990", - "1963011", - "1963306", - "1963446", - "1963463", - "1964191", - "1964195", - "1964471", - "1964637", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965777", - "1965795", - "1965810", - "1965825", - "1965841", - "1965913", - "1965996", - "1966017", - "1966351", - "1966886", - "1967011", - "1967245", - "1967273", - "1967597", - "1967815", - "1968678", - "1968867", - "1969291", - "1970213", - "1970227", - "1970284", - "1971858", - "1971888", - "1972120", - "1972185", - "1972187", - "1972234", - "1972250", - "1972278", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975341", - "1975546", - "1975553", - "1975571", - "1975897", - "1975903", - "1976163", - "1977003", - "1977007", - "1977068", - "1978056", - "1978065", - "1978114", - "1978375", - "1978445", - "1978776", - "1978821", - "1978977", - "1979308", - "1979430", - "1979473", - "1979781", - "1980521", - "1981696", - "1982406", - "1982500", - "1982525", - "1982529", - "1982541", - "1982542", - "1982592", - "1982636", - "1982671", - "1982746", - "1982791", - "1982838", - "1982885", - "1983000", - "1983170", - "1983260", - "1983288", - "1983387", - "1983441", - "1983442", - "1983525", - "1983548", - "1983558", - "1983648", - "1983694", - "1983705", - "1983755", - "1983888", - "1983896", - "1983922", - "1983997", - "1983999", - "1984117", - "1984734", - "1984942", - "1984954", - "1985522", - "1986052", - "1986056", - "1986157", - "1986166", - "1986171", - "1986220", - "1986367", - "1986452", - "1986522", - "1986575", - "1987527", - "1987744", - "1988593", - "1988602", - "1988684", - "1988881", - "1989428", - "1990066", - "1990150", - "1990551", - "1991179", - "1991371", - "1992066", - "1992504", - "1993419", - "4302252", - "4302268", - "4522322", - "4522795", - "4522916", - "4522922", - "4523522", - "4523560", - "4523725", - "4523880", - "4523883", - "4523885", - "4524054", - "4524070", - "4524072", - "4524376", - "4524393", - "4524403", - "4524421", - "4524426", - "4524636", - "4524638", - "4524740", - "4524793", - "4524890", - "4525078", - "4525189", - "4525354", - "4525420", - "4525425", - "4525487", - "4525500", - "4525505", - "4525510", - "4525530", - "4525540", - "4525547", - "4525562", - "4525610", - "4525859", - "4526048", - "4527339", - "4527342", - "4527957", - "4527972", - "4528692", - "4529064", - "4529248", - "4529566", - "4529630", - "4530002", - "4530151", - "4530424", - "4531145", - "4531147", - "4531284", - "4531402", - "4531506", - "4531517", - "4531687", - "4531690", - "4531708", - "4531968", - "4531975", - "4532022", - "4532050", - "4532057", - "4532095", - "4532122", - "4532239", - "4532253", - "4532293", - "4532297", - "4532357", - "4532405", - "4532412", - "4532471", - "4532493", - "4532500", - "4532516", - "4532534", - "4532544", - "4532696", - "4532811", - "4532886", - "4532888", - "4532890", - "4533115", - "4533136", - "4533202", - "4533273", - "4533360", - "4533431", - "4533433", - "4533442", - "4533446", - "4533661", - "4533671", - "4533952", - "4534038", - "4534052", - "4534057", - "4534166", - "4534207", - "4534225", - "4534290", - "4534299", - "4534389", - "4534398", - "4534408", - "4534458", - "4534463", - "4534485", - "4534533", - "4534538", - "4534540", - "4534686", - "4534719", - "4534762", - "4534767", - "4534872", - "4534909", - "4534914", - "4535817", - "4535827", - "4536292", - "4536483", - "5101678", - "5101745", - "5102951", - "5102982", - "5103066", - "5103121", - "5103451", - "5103736", - "5104056", - "5104442", - "5104558", - "5104641", - "5104781", - "5104891", - "5104903", - "5105088", - "5105339", - "5109523", - "5109661", - "5109821", - "5110200", - "5110213", - "5110644", - "5110670", - "5110871", - "5110885", - "5111574", - "5112155", - "5112254", - "5112283", - "5112291", - "5112336", - "5112345", - "5112362", - "5113036", - "5113078", - "5113234", - "5113847", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5116416", - "5116475", - "5116609", - "5116669", - "5116698", - "5116850", - "5116941", - "5117049", - "5117089", - "5117189", - "5117399", - "5117400", - "5118892", - "5118904", - "5118996", - "5119143", - "5119245", - "5119513", - "5120396", - "5120465", - "5120668", - "5120675", - "5120767", - "5121040", - "5121177", - "5121517", - "5121737", - "5122439", - "5123221", - "5123339", - "5123394", - "5123461", - "5123582", - "5123922", - "5124007", - "5124029", - "5124143", - "5124233", - "5124911", - "5125689", - "5126212", - "5126217", - "5126675", - "5126680", - "5134667", - "5141501", - "5141677", - "5142870", - "5142971", - "5143048", - "5143129", - "5143147", - "5143380", - "5143453", - "5143477", - "5143651", - "5143675", - "5143697", - "5143944", - "5143947", - "5144190", - "5144426", - "5144534", - "5144543", - "5144677", - "5144721", - "5145009", - "5145136", - "5145186", - "5145269", - "5145409", - "5145965", - "5146342", - "5146379", - "5146412", - "5146496", - "5146510", - "5146559", - "5146677", - "5146837", - "5146883", - "5146946", - "5146961", - "5147038", - "5147039", - "5147062", - "5147150", - "5147171", - "5147193", - "5147208", - "5147232", - "5147245", - "5147478", - "5147608", - "5147638", - "5147681", - "5147827", - "5147834", - "5148248", - "5148286", - "5148394", - "5148424", - "5148436", - "5148462", - "5148475", - "5148486", - "5148487", - "5149315", - "5149414", - "5149438", - "5149474", - "5149499", - "5149665", - "5149746", - "5149820", - "5149839", - "5714973", - "5768880", - "5769028", - "5769062", - "5769068", - "5769072", - "5769191", - "5769272", - "5769709", - "5770913", - "5770942", - "5771230", - "5771259", - "5771350", - "5771357", - "5771982", - "5772063", - "5772129", - "5772176", - "5772178", - "5772186", - "5772196", - "5772202", - "5772205", - "5772206", - "5772210", - "5772269", - "5772349", - "5772351", - "5804895", - "5879654", - "5880147", - "5880512", - "5880533", - "5880545", - "5880550", - "5880552", - "5880559", - "5880563", - "5883985", - "5884571", - "5884851", - "6097214", - "6097225", - "6097228", - "6097234", - "6097236", - "6121184", - "6544687", - "7429212", - "7438067", - "7443518", - "7446048", - "7448174", - "7466487", - "7588222", - "7596232", - "7624468", - "7656811", - "7681733", - "7730078", - "7734292", - "7752082", - "7753668", - "7780930", - "7825213", - "7874258", - "7875265", - "7877231", - "7895336", - "7921916", - "7937573", - "7940536", - "7960566", - "7972792", - "7976145", - "7981386", - "7993353", - "8000103", - "8007222", - "8015895", - "8049830", - "8086347", - "8094357", - "8105817", - "8186212", - "8208583", - "8223165", - "8237343", - "8237987", - "8244266", - "8262357", - "8273859", - "8292872", - "8313553", - "8361848", - "8361973", - "8388883", - "8394261", - "8397564", - "8407461", - "8421569", - "8532380", - "8537359", - "8581601", - "8742426", - "8756768", - "8869900", - "8890502", - "9101339", - "9242559", - "9262981", - "9359597", - "9473121", - "9530977", - "9674732", - "9734171", - "9812211" - ], - "class_count": 1193, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7398002960321982, - "precision": 0.30560509035336597, - "recall": 0.7398002960321982, - "f1": 0.2944363607025529 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1737775", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1862580", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975571", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986052", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534299", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880545", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 332, - "truth_images_in_retained_classes": 49965, - "accepted_predictions_in_retained_classes": 43906, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7804519827952229, - "precision": 0.8132613221595489, - "recall": 0.7804519827952229, - "f1": 0.767750987431369 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 323, - "truth_images_in_retained_classes": 49771, - "accepted_predictions_in_retained_classes": 43793, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7893403332535088, - "precision": 0.8209378703317131, - "recall": 0.7893403332535088, - "f1": 0.7761503968624853 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1737775", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1781694", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1798974", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1862580", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 333, - "truth_images_in_retained_classes": 50028, - "accepted_predictions_in_retained_classes": 44632, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7955403347220553, - "precision": 0.8148667864853998, - "recall": 0.7955403347220553, - "f1": 0.7836676630026933 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 323, - "truth_images_in_retained_classes": 49771, - "accepted_predictions_in_retained_classes": 44546, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8075564989092358, - "precision": 0.8206160162011501, - "recall": 0.8075564989092358, - "f1": 0.7934690725468392 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1737775", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1781694", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1798974", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1862580", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963011", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 333, - "truth_images_in_retained_classes": 50028, - "accepted_predictions_in_retained_classes": 44645, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7959521085469712, - "precision": 0.8149813536593272, - "recall": 0.7959521085469712, - "f1": 0.7838792936205538 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 323, - "truth_images_in_retained_classes": 49771, - "accepted_predictions_in_retained_classes": 44559, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8079810211497839, - "precision": 0.8207341303464063, - "recall": 0.8079810211497839, - "f1": 0.7936872551962122 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1781694", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1798974", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975571", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118892", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7752082", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 335, - "truth_images_in_retained_classes": 49924, - "accepted_predictions_in_retained_classes": 45758, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8233452008601031, - "precision": 0.8361083038702228, - "recall": 0.8233452008601031, - "f1": 0.8111919297581796 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 323, - "truth_images_in_retained_classes": 49771, - "accepted_predictions_in_retained_classes": 45653, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8362560793198487, - "precision": 0.8424552838647043, - "recall": 0.8362560793198487, - "f1": 0.8212732179011305 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1765011", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1781694", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789783", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1798974", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959395", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967245", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975571", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118892", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7752082", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 335, - "truth_images_in_retained_classes": 49924, - "accepted_predictions_in_retained_classes": 45764, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8235925081132986, - "precision": 0.8360886919210944, - "recall": 0.8235925081132986, - "f1": 0.8112089254223764 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 5, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1743775", - "1744782", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771040", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1780150", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1786902", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822587", - "1822610", - "1822613", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1827125", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1839893", - "1841261", - "1845270", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884212", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1889942", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957816", - "1957845", - "1957852", - "1958024", - "1959383", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1972342", - "1972434", - "1972449", - "1973414", - "1973467", - "1975553", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1978977", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525510", - "4525540", - "4529566", - "4531284", - "4531517", - "4531687", - "4531690", - "4532297", - "4532357", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534485", - "4534538", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5113234", - "5114198", - "5114327", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5126212", - "5142870", - "5143048", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144190", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769068", - "5769072", - "5771350", - "5771982", - "5772063", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "7960566", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 323, - "truth_images_in_retained_classes": 49771, - "accepted_predictions_in_retained_classes": 45659, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.836512574458612, - "precision": 0.8424349432982707, - "recall": 0.836512574458612, - "f1": 0.8212908449831922 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1744782", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830410", - "1830937", - "1835156", - "1841261", - "1862580", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 281, - "truth_images_in_retained_classes": 48752, - "accepted_predictions_in_retained_classes": 43179, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8015233937799323, - "precision": 0.8489418368710229, - "recall": 0.8015233937799323, - "f1": 0.8047301032307933 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 276, - "truth_images_in_retained_classes": 48569, - "accepted_predictions_in_retained_classes": 43085, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8036358015042979, - "precision": 0.8491944063795561, - "recall": 0.8036358015042979, - "f1": 0.8060694564714563 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5771982", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 288, - "truth_images_in_retained_classes": 49474, - "accepted_predictions_in_retained_classes": 44016, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8164188665527266, - "precision": 0.8504866560247468, - "recall": 0.8164188665527266, - "f1": 0.8174147604399674 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 276, - "truth_images_in_retained_classes": 48569, - "accepted_predictions_in_retained_classes": 43509, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8231034842915722, - "precision": 0.852620913533206, - "recall": 0.8231034842915722, - "f1": 0.8225526620461225 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983441", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5771982", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 288, - "truth_images_in_retained_classes": 49474, - "accepted_predictions_in_retained_classes": 44028, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8168949800377856, - "precision": 0.8506207534510775, - "recall": 0.8168949800377856, - "f1": 0.8176623311125982 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 276, - "truth_images_in_retained_classes": 48569, - "accepted_predictions_in_retained_classes": 43521, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8236002983629384, - "precision": 0.8527608412824206, - "recall": 0.8236002983629384, - "f1": 0.8228109966610416 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5771982", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 290, - "truth_images_in_retained_classes": 49491, - "accepted_predictions_in_retained_classes": 45165, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8448147812478007, - "precision": 0.8686351477620251, - "recall": 0.8448147812478007, - "f1": 0.8430944324410347 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 276, - "truth_images_in_retained_classes": 48569, - "accepted_predictions_in_retained_classes": 44545, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8500633958998807, - "precision": 0.8701711239397353, - "recall": 0.8500633958998807, - "f1": 0.8468123522603528 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1737542", - "1739922", - "1741341", - "1742142", - "1743532", - "1746440", - "1746775", - "1746832", - "1746876", - "1758878", - "1759083", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766210", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789267", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1875869", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962204", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5103451", - "5104442", - "5104558", - "5105339", - "5109821", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146342", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5771982", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 290, - "truth_images_in_retained_classes": 49491, - "accepted_predictions_in_retained_classes": 45171, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8451004637644232, - "precision": 0.8686124925794111, - "recall": 0.8451004637644232, - "f1": 0.843114065363469 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1737491", - "1739922", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1746876", - "1758878", - "1759153", - "1760104", - "1761041", - "1762244", - "1763610", - "1766137", - "1766274", - "1767597", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1777253", - "1778074", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1783043", - "1785286", - "1785888", - "1785895", - "1787610", - "1789695", - "1789730", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1796678", - "1797258", - "1797479", - "1798807", - "1799132", - "1800004", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1826022", - "1828162", - "1828637", - "1830937", - "1835156", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1876329", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1891473", - "1891493", - "1951557", - "1951649", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1960617", - "1962265", - "1962434", - "1962636", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1965996", - "1966017", - "1967815", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1977003", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1982885", - "1983525", - "1983648", - "1983755", - "1983896", - "1984117", - "1985522", - "1986157", - "1986166", - "1986220", - "1986522", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4533273", - "4534166", - "4534207", - "4534290", - "4534398", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5104558", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5111574", - "5112283", - "5113078", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5772351", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 276, - "truth_images_in_retained_classes": 48569, - "accepted_predictions_in_retained_classes": 44551, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8503635695586504, - "precision": 0.8701473195811916, - "recall": 0.8503635695586504, - "f1": 0.8468329810556643 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1758878", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1778074", - "1782763", - "1782777", - "1782927", - "1782948", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1822610", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1862580", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 227, - "truth_images_in_retained_classes": 47718, - "accepted_predictions_in_retained_classes": 42116, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8104473759200309, - "precision": 0.8578518423290517, - "recall": 0.8104473759200309, - "f1": 0.8156127676262825 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 221, - "truth_images_in_retained_classes": 47442, - "accepted_predictions_in_retained_classes": 41948, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8155338436417237, - "precision": 0.8608672123211786, - "recall": 0.8155338436417237, - "f1": 0.8199232466589719 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1760104", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1797258", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 238, - "truth_images_in_retained_classes": 48599, - "accepted_predictions_in_retained_classes": 43096, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8228758500302792, - "precision": 0.8709627588948129, - "recall": 0.8228758500302792, - "f1": 0.8324260662998175 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 221, - "truth_images_in_retained_classes": 47442, - "accepted_predictions_in_retained_classes": 42352, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8343864499962018, - "precision": 0.8780167850519418, - "recall": 0.8343864499962018, - "f1": 0.8425720959185982 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1760104", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782672", - "1782763", - "1782777", - "1782927", - "1782948", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1797258", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822796", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973414", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5147608", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 238, - "truth_images_in_retained_classes": 48599, - "accepted_predictions_in_retained_classes": 43106, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8232769173287262, - "precision": 0.871128430219949, - "recall": 0.8232769173287262, - "f1": 0.8326386862169237 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 221, - "truth_images_in_retained_classes": 47442, - "accepted_predictions_in_retained_classes": 42364, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8348183686252988, - "precision": 0.8779740426087514, - "recall": 0.8348183686252988, - "f1": 0.8426753449878298 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1758878", - "1759153", - "1760104", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782672", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1797258", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 238, - "truth_images_in_retained_classes": 48571, - "accepted_predictions_in_retained_classes": 44234, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8532633086198458, - "precision": 0.8867066977362028, - "recall": 0.8532633086198458, - "f1": 0.8577020245523158 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 221, - "truth_images_in_retained_classes": 47442, - "accepted_predictions_in_retained_classes": 43414, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8607764714822107, - "precision": 0.8906618013155634, - "recall": 0.8607764714822107, - "f1": 0.8639878535451234 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1758878", - "1759153", - "1760104", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770307", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782672", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792411", - "1792418", - "1794590", - "1795215", - "1796145", - "1797258", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1821911", - "1822346", - "1822610", - "1822819", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887108", - "1887290", - "1888759", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983442", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531284", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534207", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5101678", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5144543", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7443518", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 238, - "truth_images_in_retained_classes": 48571, - "accepted_predictions_in_retained_classes": 44235, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8533112891172909, - "precision": 0.8867157309673706, - "recall": 0.8533112891172909, - "f1": 0.8577134774255251 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "species", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732063", - "1732416", - "1734453", - "1734704", - "1741341", - "1742142", - "1743532", - "1746775", - "1746832", - "1759153", - "1762244", - "1763610", - "1766274", - "1769103", - "1769566", - "1769897", - "1770477", - "1770880", - "1771214", - "1771509", - "1771698", - "1772169", - "1772179", - "1782763", - "1782777", - "1782927", - "1785286", - "1785888", - "1785895", - "1789695", - "1789745", - "1789785", - "1791422", - "1792383", - "1792418", - "1794590", - "1795215", - "1796145", - "1797479", - "1798807", - "1800032", - "1801896", - "1802280", - "1803073", - "1804071", - "1804906", - "1810099", - "1812394", - "1813114", - "1819145", - "1819873", - "1820039", - "1820372", - "1822346", - "1823726", - "1825064", - "1825077", - "1825156", - "1825971", - "1825983", - "1828162", - "1841261", - "1864377", - "1872368", - "1875008", - "1875327", - "1879252", - "1879970", - "1881151", - "1882210", - "1883161", - "1884255", - "1884370", - "1884403", - "1884465", - "1884970", - "1887290", - "1890187", - "1890576", - "1951557", - "1952014", - "1952532", - "1952806", - "1952812", - "1956599", - "1957570", - "1957572", - "1957845", - "1959914", - "1962265", - "1962434", - "1962990", - "1963306", - "1963446", - "1964653", - "1964657", - "1965166", - "1965208", - "1965763", - "1965841", - "1966017", - "1968678", - "1968867", - "1970213", - "1970284", - "1972187", - "1972250", - "1973467", - "1975897", - "1976163", - "1978114", - "1978445", - "1978776", - "1979308", - "1979473", - "1982500", - "1982525", - "1982541", - "1982636", - "1983525", - "1983648", - "1983755", - "1983896", - "1985522", - "1986157", - "1986166", - "1986220", - "1986575", - "1988593", - "1988881", - "1989428", - "1990150", - "1991371", - "1992066", - "4522322", - "4523522", - "4523885", - "4524054", - "4524376", - "4524421", - "4524426", - "4524636", - "4524638", - "4525078", - "4525540", - "4529566", - "4531517", - "4531690", - "4532297", - "4532544", - "4532886", - "4532890", - "4533136", - "4534290", - "4534540", - "4534719", - "4534872", - "4534909", - "5102951", - "5104442", - "5105339", - "5110200", - "5110213", - "5110670", - "5110885", - "5112283", - "5114198", - "5115771", - "5115777", - "5115874", - "5117400", - "5118996", - "5119245", - "5124007", - "5124143", - "5124233", - "5125689", - "5142870", - "5143129", - "5143147", - "5143380", - "5143651", - "5143675", - "5143697", - "5144426", - "5144534", - "5145009", - "5146379", - "5146412", - "5146559", - "5146961", - "5147208", - "5148424", - "5148436", - "5148462", - "5148486", - "5148487", - "5149438", - "5149665", - "5149746", - "5714973", - "5768880", - "5769072", - "5771350", - "5772196", - "5772210", - "5880533", - "5880552", - "5880559", - "5884851", - "6097214", - "7681733", - "7780930", - "8015895", - "8223165", - "8262357", - "8361848", - "8397564", - "8421569", - "8537359", - "9101339" - ], - "class_count": 221, - "truth_images_in_retained_classes": 47442, - "accepted_predictions_in_retained_classes": 43415, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8608281427871516, - "precision": 0.8906715294106673, - "recall": 0.8608281427871516, - "f1": 0.8640001874085796 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "11064851", - "11495707", - "12031311", - "12105049", - "1730815", - "1731584", - "1731817", - "1732062", - "1732397", - "1732442", - "1732496", - "1732661", - "1733242", - "1733338", - "1733574", - "1733840", - "1734388", - "1734683", - "1735487", - "1735814", - "1735869", - "1736266", - "1736359", - "1736409", - "1736444", - "1736460", - "1736725", - "1736895", - "1737021", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738143", - "1738215", - "1738242", - "1738265", - "1738583", - "1739000", - "1739060", - "1739418", - "1739446", - "1739724", - "1740664", - "1741141", - "1741338", - "1741540", - "1741585", - "1741717", - "1742061", - "1742345", - "1742419", - "1743188", - "1743467", - "1743485", - "1743516", - "1743637", - "1743690", - "1743723", - "1743762", - "1743811", - "1744049", - "1744133", - "1744237", - "1744240", - "1744587", - "1744691", - "1744761", - "1744928", - "1745076", - "1745086", - "1745549", - "1746012", - "1746399", - "1746437", - "1746600", - "1746749", - "1747044", - "1747242", - "1747949", - "1748277", - "1748799", - "1748889", - "1749137", - "1749712", - "1749732", - "1750339", - "1750759", - "1751227", - "1758873", - "1759029", - "1759152", - "1759405", - "1759552", - "1760088", - "1760588", - "1760738", - "1760849", - "1761017", - "1761401", - "1761728", - "1761857", - "1762232", - "1762605", - "1763285", - "1763597", - "1764920", - "1765763", - "1766123", - "1766265", - "1766366", - "1766624", - "1766708", - "1767590", - "1767644", - "1768106", - "1768136", - "1768222", - "1768302", - "1768411", - "1768691", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1770592", - "1771501", - "1772155", - "1772359", - "1772783", - "1772926", - "1775081", - "1775149", - "1775887", - "1775910", - "1776168", - "1776299", - "1776576", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778114", - "1778136", - "1778574", - "1778695", - "1779429", - "1779630", - "1779682", - "1780139", - "1780300", - "1781683", - "1782524", - "1782607", - "1782659", - "1783394", - "1784809", - "1785140", - "1785281", - "1785873", - "1785931", - "1786886", - "1786930", - "1787061", - "1787107", - "1787399", - "1787522", - "1788466", - "1788764", - "1788916", - "1789061", - "1789246", - "1789474", - "1789545", - "1789671", - "1789826", - "1789978", - "1790356", - "1790601", - "1790683", - "1790794", - "1791382", - "1791874", - "1792055", - "1792280", - "1792324", - "1792405", - "1793856", - "1793981", - "1794099", - "1794570", - "1795126", - "1795443", - "1795782", - "1796225", - "1796408", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798362", - "1798377", - "1798440", - "1798478", - "1798514", - "1798902", - "1799687", - "1799702", - "1799789", - "1799993", - "1800016", - "1801046", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1807965", - "1808720", - "1808961", - "1809069", - "1810097", - "1811612", - "1812976", - "1814095", - "1815226", - "1819125", - "1819252", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1824090", - "1824246", - "1825057", - "1825076", - "1825121", - "1825444", - "1825535", - "1825963", - "1826021", - "1826192", - "1827111", - "1827279", - "1827547", - "1827641", - "1828161", - "1828636", - "1829298", - "1829702", - "1830036", - "1830118", - "1830379", - "1830630", - "1830909", - "1831127", - "1831272", - "1831446", - "1831747", - "1832810", - "1833623", - "1835027", - "1835151", - "1835366", - "1835429", - "1836898", - "1837168", - "1837338", - "1839730", - "1840273", - "1841152", - "1841259", - "1841294", - "1841529", - "1842184", - "1842261", - "1843897", - "1845266", - "1845958", - "1846094", - "1846907", - "1847591", - "1847952", - "1848192", - "1848253", - "1848374", - "1848655", - "1848843", - "1849256", - "1849514", - "1849628", - "1849983", - "1850022", - "1850231", - "1850276", - "1850474", - "1850521", - "1850525", - "1850777", - "1850865", - "1851049", - "1851496", - "1852133", - "1852176", - "1852212", - "1852416", - "1852745", - "1852917", - "1853060", - "1853074", - "1853431", - "1853583", - "1853873", - "1854160", - "1854326", - "1854459", - "1854789", - "1855383", - "1856286", - "1856382", - "1856563", - "1856586", - "1856631", - "1856650", - "1856766", - "1856845", - "1857569", - "1857624", - "1857825", - "1857968", - "1858055", - "1858529", - "1858722", - "1859036", - "1859082", - "1859284", - "1860403", - "1860613", - "1860657", - "1861151", - "1861387", - "1861607", - "1861796", - "1862568", - "1862681", - "1863292", - "1863647", - "1864355", - "1864404", - "1864584", - "1866475", - "1867343", - "1869438", - "1869760", - "1869851", - "1869974", - "1870168", - "1870242", - "1870449", - "1870982", - "1871206", - "1871384", - "1871695", - "1871825", - "1872346", - "1872845", - "1873021", - "1873074", - "1873408", - "1873980", - "1874152", - "1874374", - "1874624", - "1874958", - "1875103", - "1875317", - "1875650", - "1875821", - "1875849", - "1875890", - "1876280", - "1876391", - "1876536", - "1876613", - "1876846", - "1877650", - "1877937", - "1878460", - "1878838", - "1879226", - "1879451", - "1879494", - "1879512", - "1879915", - "1881145", - "1881186", - "1881825", - "1882028", - "1882902", - "1883132", - "1883373", - "1884090", - "1884194", - "1884425", - "1884886", - "1884939", - "1886069", - "1886289", - "1886576", - "1887269", - "1887682", - "1888256", - "1888455", - "1888578", - "1888698", - "1889286", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1894469", - "1894779", - "1898261", - "1898474", - "1906451", - "1909334", - "1911078", - "1912583", - "1918607", - "1920481", - "1920704", - "1929153", - "1938213", - "1938238", - "1939401", - "1939616", - "1940447", - "1940500", - "1940797", - "1941316", - "1942857", - "1944007", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952118", - "1952222", - "1952300", - "1952446", - "1952526", - "1952736", - "1952801", - "1954555", - "1954587", - "1955508", - "1955900", - "1956434", - "1956522", - "1956545", - "1956709", - "1956900", - "1957281", - "1957545", - "1957620", - "1957829", - "1957999", - "1958023", - "1958238", - "1959381", - "1959409", - "1959668", - "1959888", - "1960592", - "1960966", - "1961066", - "1961188", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964175", - "1964392", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966883", - "1966929", - "1966982", - "1967196", - "1967242", - "1967263", - "1967583", - "1967722", - "1968199", - "1968665", - "1968854", - "1968975", - "1969918", - "1970179", - "1970226", - "1970279", - "1970574", - "1971819", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975336", - "1975542", - "1975570", - "1975729", - "1975783", - "1975885", - "1976155", - "1976515", - "1976949", - "1977104", - "1977419", - "1977775", - "1978019", - "1978112", - "1978364", - "1978506", - "1978749", - "1978814", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980511", - "1980718", - "1981690", - "1982367", - "1984922", - "1985507", - "1985969", - "1986081", - "1987269", - "1987509", - "1987555", - "1987711", - "1987792", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1990677", - "1991135", - "1991357", - "1991817", - "1991946", - "1993403", - "2278098", - "3255940", - "3255956", - "3256169", - "3256188", - "3256294", - "3256322", - "3256356", - "3256568", - "3256934", - "3256950", - "3257150", - "3257220", - "3257225", - "3257328", - "3257405", - "3257500", - "3257694", - "3257798", - "3257894", - "3261008", - "4301067", - "4301098", - "4301121", - "4301340", - "4302289", - "4404424", - "4404934", - "4405245", - "4405430", - "4405493", - "4405983", - "4406069", - "4406268", - "4406291", - "4406298", - "4406360", - "4406622", - "4406931", - "4407165", - "4407310", - "4407354", - "4408190", - "4408204", - "4524069", - "4524400", - "4524792", - "4525072", - "4525607", - "4527338", - "4533124", - "4533660", - "4534405", - "4534456", - "4534532", - "4687068", - "4687943", - "4689528", - "4706578", - "4706723", - "4709385", - "5102272", - "5104758", - "5105328", - "5110641", - "5114254", - "5115807", - "5116471", - "5119806", - "5123346", - "5123443", - "5130576", - "5135400", - "5144176", - "5146397", - "7236046", - "7236059", - "7236098", - "7354470", - "7384515", - "7396883", - "7494486", - "7510496", - "7721234", - "7739898", - "7742506", - "7786896", - "7852351", - "8057237", - "8107362", - "8249110", - "8317469", - "8331787", - "8379138", - "8407958", - "8494978", - "8782295", - "8875114", - "8875134", - "8875890", - "8903953", - "8921795", - "9005880", - "9021546", - "9061491", - "9065472", - "9073940", - "9077410", - "9078027", - "9078901", - "9095083", - "9108102", - "9118632", - "9146182", - "9151414", - "9181278", - "9183600", - "9210500", - "9220793", - "9605252" - ], - "class_count": 698, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.7890053947525617, - "precision": 0.3188818859364664, - "recall": 0.7890053947525617, - "f1": 0.3169285074452808 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "11064851", - "11495707", - "12031311", - "12105049", - "1730815", - "1730935", - "1731584", - "1731817", - "1731859", - "1732062", - "1732397", - "1732442", - "1732496", - "1732661", - "1733242", - "1733338", - "1733574", - "1733840", - "1734388", - "1734683", - "1735487", - "1735652", - "1735814", - "1735869", - "1736266", - "1736359", - "1736418", - "1736460", - "1736656", - "1736725", - "1736895", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738143", - "1738215", - "1738242", - "1738265", - "1738583", - "1738667", - "1739000", - "1739060", - "1739418", - "1739446", - "1739599", - "1739724", - "1740434", - "1740515", - "1740664", - "1741043", - "1741141", - "1741338", - "1741404", - "1741547", - "1741585", - "1741717", - "1742061", - "1742345", - "1742419", - "1743188", - "1743404", - "1743467", - "1743485", - "1743516", - "1743637", - "1743690", - "1743762", - "1743811", - "1744049", - "1744133", - "1744165", - "1744219", - "1744481", - "1744587", - "1744691", - "1744761", - "1744928", - "1745076", - "1745086", - "1745549", - "1746012", - "1746172", - "1746437", - "1746600", - "1746749", - "1747242", - "1747949", - "1748201", - "1748277", - "1748368", - "1748757", - "1748799", - "1748889", - "1748902", - "1749068", - "1749137", - "1749732", - "1750339", - "1751200", - "1751227", - "1755294", - "1758873", - "1759029", - "1759152", - "1759405", - "1759552", - "1760088", - "1760588", - "1760738", - "1760849", - "1761017", - "1761401", - "1761728", - "1761857", - "1762232", - "1763285", - "1763597", - "1764524", - "1764920", - "1765763", - "1765949", - "1766123", - "1766265", - "1766366", - "1766624", - "1766708", - "1767590", - "1767644", - "1768106", - "1768136", - "1768222", - "1768302", - "1768411", - "1768691", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1770592", - "1771363", - "1771501", - "1772155", - "1772359", - "1772783", - "1772926", - "1775081", - "1775149", - "1775633", - "1775887", - "1775910", - "1776168", - "1776299", - "1776576", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778136", - "1778497", - "1778574", - "1778695", - "1779429", - "1779682", - "1780139", - "1780300", - "1780913", - "1781683", - "1782524", - "1782607", - "1782659", - "1783394", - "1783845", - "1784356", - "1784809", - "1785140", - "1785281", - "1785873", - "1785931", - "1786886", - "1787061", - "1787107", - "1787399", - "1787496", - "1787522", - "1788411", - "1788466", - "1788764", - "1789061", - "1789246", - "1789474", - "1789545", - "1789671", - "1789826", - "1789978", - "1790356", - "1790683", - "1790794", - "1791382", - "1791769", - "1791874", - "1792055", - "1792324", - "1792405", - "1793856", - "1793981", - "1794099", - "1794570", - "1795126", - "1795782", - "1796225", - "1796408", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798362", - "1798377", - "1798440", - "1798478", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801046", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1807965", - "1808720", - "1808961", - "1809069", - "1810097", - "1811612", - "1812976", - "1814095", - "1814595", - "1815226", - "1819125", - "1819252", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1824090", - "1824246", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827279", - "1827547", - "1827641", - "1828161", - "1828636", - "1829298", - "1829702", - "1830036", - "1830118", - "1830379", - "1830507", - "1830535", - "1830581", - "1830630", - "1830873", - "1830909", - "1831127", - "1831272", - "1831446", - "1831747", - "1831776", - "1832810", - "1833623", - "1835027", - "1835151", - "1835429", - "1836898", - "1837168", - "1837338", - "1838964", - "1839730", - "1840273", - "1841152", - "1841259", - "1841294", - "1841529", - "1842261", - "1843855", - "1843897", - "1845266", - "1845958", - "1846094", - "1846636", - "1846907", - "1847591", - "1847952", - "1848217", - "1848253", - "1848374", - "1848582", - "1848655", - "1848677", - "1848843", - "1849256", - "1849474", - "1849514", - "1849628", - "1849663", - "1849983", - "1850022", - "1850231", - "1850276", - "1850474", - "1850521", - "1850525", - "1850777", - "1850865", - "1851201", - "1851334", - "1851496", - "1852064", - "1852176", - "1852212", - "1852416", - "1852745", - "1852917", - "1853060", - "1853074", - "1853583", - "1853721", - "1853873", - "1854160", - "1854280", - "1854326", - "1854459", - "1854789", - "1855383", - "1856000", - "1856286", - "1856563", - "1856586", - "1856615", - "1856631", - "1856650", - "1856845", - "1857569", - "1857624", - "1857825", - "1857968", - "1858055", - "1858529", - "1858722", - "1859036", - "1859082", - "1860403", - "1860613", - "1860657", - "1861151", - "1861387", - "1861607", - "1862568", - "1862681", - "1863292", - "1863647", - "1864153", - "1864355", - "1864404", - "1864584", - "1866475", - "1867810", - "1869438", - "1869504", - "1869760", - "1869974", - "1870168", - "1870242", - "1870449", - "1870982", - "1871157", - "1871206", - "1871384", - "1871695", - "1871825", - "1872346", - "1872845", - "1873074", - "1873408", - "1873980", - "1874152", - "1874374", - "1874958", - "1875103", - "1875317", - "1875600", - "1875650", - "1875821", - "1875849", - "1875890", - "1876280", - "1876391", - "1876536", - "1876846", - "1877292", - "1877650", - "1877937", - "1878460", - "1878757", - "1878838", - "1879226", - "1879451", - "1879494", - "1879512", - "1879915", - "1881145", - "1881186", - "1881601", - "1881825", - "1882028", - "1882413", - "1882902", - "1883132", - "1883373", - "1884090", - "1884194", - "1884425", - "1884886", - "1884939", - "1886069", - "1886289", - "1886576", - "1887269", - "1887682", - "1888256", - "1888578", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1894469", - "1894779", - "1895130", - "1906451", - "1911078", - "1912319", - "1913456", - "1918607", - "1920481", - "1920554", - "1920704", - "1939401", - "1939616", - "1940447", - "1940500", - "1940797", - "1941316", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952118", - "1952222", - "1952300", - "1952446", - "1952526", - "1952736", - "1952801", - "1954555", - "1954587", - "1955508", - "1955900", - "1956434", - "1956522", - "1956545", - "1956900", - "1957193", - "1957281", - "1957545", - "1957620", - "1957829", - "1957999", - "1958023", - "1958238", - "1959381", - "1959409", - "1959888", - "1960592", - "1960966", - "1961066", - "1961188", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964175", - "1964392", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966883", - "1966929", - "1966982", - "1967196", - "1967242", - "1967263", - "1967583", - "1967722", - "1968199", - "1968665", - "1968854", - "1968975", - "1969122", - "1970179", - "1970226", - "1970279", - "1970574", - "1971819", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975336", - "1975542", - "1975570", - "1975729", - "1975783", - "1975885", - "1976155", - "1976515", - "1976949", - "1977104", - "1977419", - "1977775", - "1978019", - "1978112", - "1978364", - "1978506", - "1978749", - "1978814", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980511", - "1980718", - "1981690", - "1982367", - "1984731", - "1984922", - "1985507", - "1985969", - "1986081", - "1986953", - "1987269", - "1987509", - "1987711", - "1987792", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1990677", - "1991135", - "1991357", - "1991817", - "1991946", - "1993403", - "2278098", - "3255940", - "3255956", - "3256169", - "3256188", - "3256294", - "3256322", - "3256568", - "3256934", - "3256950", - "3257150", - "3257152", - "3257220", - "3257225", - "3257328", - "3257405", - "3257500", - "3257694", - "3257798", - "3257894", - "3261008", - "4301067", - "4301098", - "4301121", - "4301340", - "4302289", - "4404424", - "4404729", - "4404934", - "4405245", - "4405430", - "4405493", - "4405983", - "4406069", - "4406268", - "4406291", - "4406298", - "4406360", - "4406622", - "4406931", - "4407138", - "4407165", - "4407310", - "4407354", - "4408190", - "4408204", - "4524069", - "4524400", - "4524792", - "4524913", - "4525072", - "4525607", - "4527338", - "4529834", - "4533124", - "4533660", - "4534405", - "4534456", - "4534532", - "4684145", - "4687068", - "4687943", - "4689528", - "4706578", - "4706723", - "4709385", - "5104758", - "5105328", - "5110641", - "5114254", - "5115807", - "5116471", - "5123346", - "5123443", - "5144176", - "5146397", - "7236046", - "7236091", - "7354470", - "7384515", - "7396883", - "7494486", - "7721234", - "7739898", - "7742506", - "7852351", - "8057237", - "8107362", - "8249110", - "8317469", - "8331787", - "8379138", - "8407958", - "8494978", - "8782295", - "8875890", - "8903953", - "8921795", - "8936210", - "9021546", - "9026655", - "9046214", - "9061491", - "9065472", - "9073940", - "9078027", - "9078901", - "9095083", - "9108102", - "9118632", - "9146182", - "9151414", - "9181278", - "9183600", - "9210500", - "9220793" - ], - "class_count": 716, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8053483819748223, - "precision": 0.3189366087734117, - "recall": 0.8053483819748223, - "f1": 0.3204124099108477 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "11064851", - "11495707", - "12031311", - "12105049", - "1730815", - "1730935", - "1731584", - "1731817", - "1731859", - "1732062", - "1732397", - "1732442", - "1732496", - "1732661", - "1733242", - "1733338", - "1733574", - "1733840", - "1734388", - "1734683", - "1735487", - "1735652", - "1735814", - "1735869", - "1736266", - "1736359", - "1736418", - "1736460", - "1736656", - "1736725", - "1736895", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738143", - "1738215", - "1738242", - "1738265", - "1738583", - "1738667", - "1739000", - "1739060", - "1739418", - "1739446", - "1739599", - "1739724", - "1740434", - "1740515", - "1740664", - "1741043", - "1741141", - "1741338", - "1741404", - "1741547", - "1741585", - "1741717", - "1742061", - "1742345", - "1742419", - "1743188", - "1743404", - "1743467", - "1743485", - "1743516", - "1743637", - "1743690", - "1743762", - "1743811", - "1744049", - "1744133", - "1744165", - "1744219", - "1744481", - "1744587", - "1744691", - "1744761", - "1744928", - "1745076", - "1745086", - "1745549", - "1746012", - "1746172", - "1746437", - "1746600", - "1746749", - "1747242", - "1747949", - "1748201", - "1748277", - "1748368", - "1748799", - "1748889", - "1748902", - "1749068", - "1749137", - "1749732", - "1750339", - "1751200", - "1751227", - "1755294", - "1758873", - "1759029", - "1759152", - "1759405", - "1759552", - "1760088", - "1760588", - "1760738", - "1760849", - "1761017", - "1761401", - "1761728", - "1761857", - "1762232", - "1763285", - "1763597", - "1764524", - "1764920", - "1765763", - "1765949", - "1766123", - "1766265", - "1766366", - "1766624", - "1766708", - "1767590", - "1767644", - "1768106", - "1768136", - "1768222", - "1768302", - "1768411", - "1768691", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1770592", - "1771363", - "1771501", - "1772155", - "1772359", - "1772783", - "1772926", - "1775081", - "1775149", - "1775633", - "1775887", - "1775910", - "1776168", - "1776299", - "1776576", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778136", - "1778497", - "1778574", - "1778695", - "1779429", - "1779682", - "1780139", - "1780300", - "1780913", - "1781683", - "1782524", - "1782607", - "1782659", - "1783394", - "1783845", - "1784356", - "1784809", - "1785140", - "1785281", - "1785873", - "1785931", - "1786886", - "1787061", - "1787107", - "1787399", - "1787496", - "1787522", - "1788411", - "1788466", - "1788764", - "1789061", - "1789246", - "1789474", - "1789545", - "1789671", - "1789826", - "1789978", - "1790356", - "1790683", - "1790794", - "1791382", - "1791769", - "1791874", - "1792055", - "1792324", - "1792405", - "1793856", - "1793981", - "1794099", - "1794570", - "1795126", - "1795782", - "1796225", - "1796408", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798362", - "1798377", - "1798440", - "1798478", - "1798514", - "1798902", - "1799687", - "1799702", - "1799993", - "1800016", - "1801046", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1807965", - "1808720", - "1808961", - "1809069", - "1810097", - "1811612", - "1812976", - "1814095", - "1814595", - "1815226", - "1819125", - "1819252", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1824090", - "1824246", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827279", - "1827547", - "1827641", - "1828161", - "1828636", - "1829298", - "1829702", - "1830036", - "1830118", - "1830379", - "1830507", - "1830535", - "1830581", - "1830630", - "1830873", - "1830909", - "1831127", - "1831272", - "1831446", - "1831747", - "1831776", - "1832810", - "1833623", - "1835027", - "1835151", - "1835429", - "1836898", - "1837168", - "1837338", - "1838964", - "1839730", - "1840273", - "1841152", - "1841259", - "1841294", - "1841529", - "1842261", - "1843855", - "1843897", - "1845266", - "1845958", - "1846094", - "1846636", - "1846907", - "1847591", - "1847952", - "1848217", - "1848253", - "1848374", - "1848582", - "1848655", - "1848677", - "1848843", - "1849256", - "1849474", - "1849514", - "1849628", - "1849663", - "1849983", - "1850022", - "1850231", - "1850276", - "1850474", - "1850521", - "1850525", - "1850777", - "1850865", - "1851201", - "1851334", - "1851496", - "1852064", - "1852176", - "1852212", - "1852416", - "1852745", - "1852917", - "1853060", - "1853074", - "1853583", - "1853721", - "1853873", - "1854160", - "1854280", - "1854326", - "1854459", - "1854789", - "1855383", - "1856000", - "1856286", - "1856563", - "1856586", - "1856615", - "1856631", - "1856650", - "1856845", - "1857569", - "1857624", - "1857825", - "1857968", - "1858055", - "1858529", - "1858722", - "1859036", - "1859082", - "1860403", - "1860613", - "1860657", - "1861151", - "1861387", - "1861607", - "1862568", - "1862681", - "1863292", - "1863647", - "1864153", - "1864355", - "1864404", - "1864584", - "1866475", - "1867810", - "1869438", - "1869504", - "1869760", - "1869974", - "1870168", - "1870242", - "1870449", - "1870982", - "1871157", - "1871206", - "1871384", - "1871695", - "1871825", - "1872346", - "1872845", - "1873074", - "1873408", - "1873980", - "1874152", - "1874374", - "1874958", - "1875103", - "1875317", - "1875600", - "1875650", - "1875821", - "1875849", - "1875890", - "1876280", - "1876391", - "1876536", - "1876846", - "1877292", - "1877650", - "1877937", - "1878460", - "1878757", - "1878838", - "1879226", - "1879451", - "1879494", - "1879512", - "1879915", - "1881145", - "1881186", - "1881601", - "1881825", - "1882028", - "1882413", - "1882902", - "1883132", - "1883373", - "1884090", - "1884194", - "1884425", - "1884886", - "1884939", - "1886069", - "1886289", - "1886576", - "1887269", - "1887682", - "1888256", - "1888578", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1894469", - "1894779", - "1895130", - "1906451", - "1911078", - "1912319", - "1913456", - "1918607", - "1920481", - "1920554", - "1920704", - "1939401", - "1939616", - "1940447", - "1940500", - "1940797", - "1941316", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952118", - "1952222", - "1952300", - "1952446", - "1952526", - "1952736", - "1952801", - "1954555", - "1954587", - "1955508", - "1955900", - "1956434", - "1956522", - "1956545", - "1956900", - "1957193", - "1957281", - "1957545", - "1957620", - "1957829", - "1957999", - "1958023", - "1958238", - "1959381", - "1959409", - "1959888", - "1960592", - "1960966", - "1961066", - "1961188", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964175", - "1964392", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966883", - "1966929", - "1966982", - "1967196", - "1967242", - "1967263", - "1967583", - "1967722", - "1968199", - "1968665", - "1968854", - "1968975", - "1969122", - "1970179", - "1970226", - "1970279", - "1970574", - "1971819", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975336", - "1975542", - "1975570", - "1975729", - "1975783", - "1975885", - "1976155", - "1976515", - "1976949", - "1977104", - "1977419", - "1977775", - "1978019", - "1978112", - "1978364", - "1978506", - "1978749", - "1978814", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980511", - "1980718", - "1981690", - "1982367", - "1984731", - "1984922", - "1985507", - "1985969", - "1986081", - "1986953", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1990677", - "1991135", - "1991357", - "1991817", - "1991946", - "1993403", - "2278098", - "3255940", - "3255956", - "3256169", - "3256188", - "3256294", - "3256322", - "3256568", - "3256934", - "3256950", - "3257150", - "3257152", - "3257220", - "3257225", - "3257328", - "3257405", - "3257500", - "3257694", - "3257798", - "3257894", - "3261008", - "4301067", - "4301098", - "4301121", - "4301340", - "4302289", - "4404424", - "4404729", - "4404934", - "4405245", - "4405430", - "4405493", - "4405983", - "4406069", - "4406268", - "4406291", - "4406298", - "4406360", - "4406622", - "4406931", - "4407138", - "4407165", - "4407310", - "4407354", - "4408190", - "4408204", - "4524069", - "4524400", - "4524792", - "4524913", - "4525072", - "4525607", - "4527338", - "4529834", - "4533124", - "4533660", - "4534405", - "4534456", - "4534532", - "4684145", - "4687068", - "4687943", - "4689528", - "4706578", - "4706723", - "4709385", - "5104758", - "5105328", - "5110641", - "5114254", - "5115807", - "5116471", - "5123346", - "5123443", - "5144176", - "5146397", - "7236046", - "7236091", - "7354470", - "7384515", - "7396883", - "7494486", - "7721234", - "7739898", - "7742506", - "7852351", - "8057237", - "8107362", - "8249110", - "8317469", - "8331787", - "8379138", - "8407958", - "8494978", - "8782295", - "8875890", - "8903953", - "8921795", - "8936210", - "9021546", - "9026655", - "9046214", - "9061491", - "9065472", - "9073940", - "9078027", - "9078901", - "9095083", - "9108102", - "9118632", - "9146182", - "9151414", - "9181278", - "9183600", - "9210500", - "9220793" - ], - "class_count": 714, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.805001260196705, - "precision": 0.3188298295664697, - "recall": 0.805001260196705, - "f1": 0.3212342539755369 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "11495707", - "12031311", - "12105049", - "1730935", - "1731584", - "1731817", - "1731859", - "1732062", - "1732397", - "1732442", - "1732496", - "1732661", - "1733242", - "1733338", - "1733840", - "1734388", - "1734683", - "1735487", - "1735631", - "1735814", - "1735869", - "1736266", - "1736359", - "1736418", - "1736460", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738143", - "1738215", - "1738242", - "1738265", - "1738583", - "1738667", - "1739000", - "1739060", - "1739336", - "1739418", - "1739446", - "1739724", - "1740434", - "1740515", - "1740664", - "1741141", - "1741338", - "1741404", - "1741540", - "1741585", - "1741717", - "1742061", - "1742419", - "1743188", - "1743467", - "1743485", - "1743516", - "1743637", - "1743690", - "1743762", - "1743811", - "1744049", - "1744133", - "1744165", - "1744219", - "1744481", - "1744587", - "1744691", - "1744761", - "1745076", - "1745086", - "1745549", - "1746012", - "1746172", - "1746437", - "1746600", - "1746749", - "1747242", - "1747949", - "1748201", - "1748277", - "1748368", - "1748757", - "1748799", - "1748902", - "1749068", - "1749137", - "1749732", - "1750339", - "1750759", - "1751200", - "1751227", - "1755294", - "1758873", - "1759029", - "1759152", - "1759405", - "1759552", - "1760088", - "1760588", - "1760738", - "1760849", - "1761017", - "1761094", - "1761401", - "1761728", - "1761857", - "1762232", - "1763285", - "1763597", - "1764524", - "1764920", - "1765763", - "1765949", - "1766123", - "1766265", - "1766366", - "1766624", - "1766708", - "1767590", - "1767644", - "1768106", - "1768136", - "1768222", - "1768302", - "1768411", - "1768691", - "1769051", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1770592", - "1771363", - "1771501", - "1772155", - "1772359", - "1772783", - "1772926", - "1775081", - "1775149", - "1775633", - "1775887", - "1775910", - "1776168", - "1776299", - "1776576", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778136", - "1778497", - "1778574", - "1778695", - "1779429", - "1779682", - "1780139", - "1780300", - "1780913", - "1781683", - "1782524", - "1782607", - "1782659", - "1783394", - "1784356", - "1784809", - "1785140", - "1785281", - "1785873", - "1785931", - "1786886", - "1787061", - "1787107", - "1787399", - "1787496", - "1787522", - "1788411", - "1788466", - "1789061", - "1789246", - "1789474", - "1789545", - "1789671", - "1789826", - "1789978", - "1790356", - "1790683", - "1790794", - "1791382", - "1791769", - "1791874", - "1792055", - "1792324", - "1792405", - "1793856", - "1793981", - "1794099", - "1794570", - "1795126", - "1795782", - "1796225", - "1796408", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798362", - "1798377", - "1798440", - "1798478", - "1798514", - "1798902", - "1799687", - "1799702", - "1799789", - "1799993", - "1800016", - "1801046", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1807965", - "1808720", - "1808961", - "1809069", - "1810097", - "1811612", - "1812976", - "1814095", - "1815226", - "1819125", - "1819252", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1824090", - "1824246", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827279", - "1827547", - "1827641", - "1828161", - "1828636", - "1829298", - "1829702", - "1830036", - "1830118", - "1830355", - "1830379", - "1830507", - "1830535", - "1830581", - "1830630", - "1830799", - "1830873", - "1830909", - "1831127", - "1831446", - "1831747", - "1831776", - "1832810", - "1833623", - "1835027", - "1835151", - "1835429", - "1836898", - "1837168", - "1837338", - "1839258", - "1839730", - "1840273", - "1841152", - "1841259", - "1841294", - "1841529", - "1842261", - "1843855", - "1843897", - "1845266", - "1845958", - "1846094", - "1846636", - "1846907", - "1847952", - "1848217", - "1848253", - "1848374", - "1848655", - "1848843", - "1849256", - "1849474", - "1849663", - "1849983", - "1850231", - "1850276", - "1850474", - "1850521", - "1850525", - "1850777", - "1850865", - "1851201", - "1851212", - "1851334", - "1851496", - "1852064", - "1852176", - "1852212", - "1852745", - "1852917", - "1853060", - "1853074", - "1853721", - "1853873", - "1854160", - "1854326", - "1854459", - "1855383", - "1856000", - "1856286", - "1856563", - "1856586", - "1856615", - "1856631", - "1856650", - "1856766", - "1856845", - "1857569", - "1857624", - "1857825", - "1857968", - "1858055", - "1858529", - "1858722", - "1859082", - "1860613", - "1860657", - "1860720", - "1861151", - "1861387", - "1861607", - "1862568", - "1862681", - "1863292", - "1863647", - "1864153", - "1864355", - "1864404", - "1864584", - "1867343", - "1867810", - "1869438", - "1869504", - "1869760", - "1869974", - "1870168", - "1870242", - "1870449", - "1870982", - "1871157", - "1871206", - "1871384", - "1871695", - "1872346", - "1872845", - "1873074", - "1873408", - "1873775", - "1873980", - "1874152", - "1874374", - "1874958", - "1875103", - "1875317", - "1875600", - "1875650", - "1875849", - "1875890", - "1876280", - "1876391", - "1876536", - "1877292", - "1877937", - "1878460", - "1878578", - "1878838", - "1879226", - "1879451", - "1879494", - "1879512", - "1879915", - "1881145", - "1881186", - "1881825", - "1882028", - "1882413", - "1882902", - "1883132", - "1883373", - "1884090", - "1884194", - "1884425", - "1884886", - "1884939", - "1886069", - "1886289", - "1886576", - "1887269", - "1887682", - "1888256", - "1888578", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1892238", - "1894469", - "1895130", - "1902519", - "1906451", - "1913456", - "1918607", - "1920481", - "1920554", - "1920704", - "1939401", - "1939616", - "1940133", - "1940447", - "1940500", - "1940797", - "1941316", - "1942857", - "1949704", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952118", - "1952222", - "1952300", - "1952446", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956434", - "1956522", - "1956545", - "1957193", - "1957281", - "1957545", - "1957620", - "1957829", - "1957999", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1961066", - "1962165", - "1962369", - "1962632", - "1962857", - "1962956", - "1962995", - "1963299", - "1963445", - "1964175", - "1964392", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966883", - "1966929", - "1966982", - "1967196", - "1967242", - "1967263", - "1967583", - "1967722", - "1968199", - "1968665", - "1968854", - "1968975", - "1969122", - "1970179", - "1970226", - "1970279", - "1970574", - "1971819", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975336", - "1975542", - "1975570", - "1975885", - "1976155", - "1976515", - "1976949", - "1977104", - "1977419", - "1977775", - "1978019", - "1978112", - "1978364", - "1978506", - "1978607", - "1978749", - "1978814", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980511", - "1980718", - "1981690", - "1982367", - "1984731", - "1984922", - "1985507", - "1985969", - "1986081", - "1986953", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1990677", - "1991135", - "1991357", - "1991817", - "1991946", - "1993403", - "2278098", - "3255940", - "3255956", - "3256169", - "3256188", - "3256294", - "3256322", - "3256568", - "3256934", - "3256950", - "3257150", - "3257152", - "3257220", - "3257225", - "3257328", - "3257405", - "3257500", - "3257694", - "3257798", - "3257894", - "3261008", - "4301098", - "4301121", - "4301340", - "4302289", - "4404424", - "4404729", - "4404934", - "4405245", - "4405430", - "4405493", - "4405983", - "4406069", - "4406268", - "4406291", - "4406298", - "4406360", - "4406622", - "4406931", - "4407138", - "4407165", - "4407310", - "4407354", - "4408190", - "4524069", - "4524400", - "4524792", - "4525072", - "4525607", - "4527338", - "4533124", - "4533660", - "4534405", - "4534456", - "4534532", - "4684145", - "4687068", - "4687943", - "4689528", - "4706578", - "4706723", - "4709385", - "5105328", - "5110641", - "5114254", - "5115807", - "5116471", - "5123346", - "5123443", - "5144176", - "5146397", - "7236046", - "7236091", - "7354470", - "7384515", - "7396883", - "7494486", - "7543161", - "7721234", - "7739898", - "7742506", - "7852351", - "8057237", - "8107362", - "8249110", - "8317469", - "8331787", - "8379138", - "8407958", - "8494978", - "8782295", - "8875890", - "8903953", - "8921795", - "8936210", - "9021546", - "9026655", - "9061491", - "9065472", - "9073940", - "9078901", - "9095083", - "9108102", - "9118632", - "9146182", - "9151414", - "9181278", - "9183600", - "9210500", - "9220793" - ], - "class_count": 684, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8303908427754559, - "precision": 0.3505904633143813, - "recall": 0.8303908427754559, - "f1": 0.3532089993367619 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "11495707", - "12031311", - "12105049", - "1730935", - "1731584", - "1731817", - "1731859", - "1732062", - "1732397", - "1732442", - "1732496", - "1732661", - "1733242", - "1733338", - "1733840", - "1734388", - "1734683", - "1735487", - "1735631", - "1735814", - "1735869", - "1736266", - "1736359", - "1736418", - "1736460", - "1737335", - "1737519", - "1737647", - "1737701", - "1738049", - "1738143", - "1738215", - "1738242", - "1738265", - "1738583", - "1738667", - "1739000", - "1739060", - "1739336", - "1739418", - "1739446", - "1739724", - "1740434", - "1740515", - "1740664", - "1741141", - "1741338", - "1741404", - "1741540", - "1741585", - "1741717", - "1742061", - "1742419", - "1743188", - "1743467", - "1743485", - "1743516", - "1743637", - "1743690", - "1743762", - "1743811", - "1744049", - "1744133", - "1744165", - "1744219", - "1744481", - "1744587", - "1744691", - "1744761", - "1745076", - "1745086", - "1745549", - "1746012", - "1746172", - "1746437", - "1746600", - "1746749", - "1747242", - "1747949", - "1748201", - "1748277", - "1748368", - "1748757", - "1748799", - "1748902", - "1749068", - "1749137", - "1749732", - "1750339", - "1750759", - "1751200", - "1751227", - "1755294", - "1758873", - "1759029", - "1759152", - "1759405", - "1759552", - "1760088", - "1760588", - "1760738", - "1760849", - "1761017", - "1761094", - "1761401", - "1761728", - "1761857", - "1762232", - "1763285", - "1763597", - "1764524", - "1764920", - "1765763", - "1765949", - "1766123", - "1766265", - "1766366", - "1766624", - "1766708", - "1767590", - "1767644", - "1768106", - "1768136", - "1768222", - "1768302", - "1768411", - "1768691", - "1769051", - "1769098", - "1769504", - "1769819", - "1769945", - "1770123", - "1770274", - "1770396", - "1770592", - "1771363", - "1771501", - "1772155", - "1772359", - "1772783", - "1772926", - "1775081", - "1775149", - "1775633", - "1775887", - "1775910", - "1776168", - "1776299", - "1776576", - "1776846", - "1776978", - "1777243", - "1777868", - "1778073", - "1778136", - "1778497", - "1778574", - "1778695", - "1779429", - "1779682", - "1780139", - "1780300", - "1780913", - "1781683", - "1782524", - "1782607", - "1782659", - "1783394", - "1784356", - "1784809", - "1785140", - "1785281", - "1785873", - "1785931", - "1786886", - "1787061", - "1787107", - "1787399", - "1787496", - "1787522", - "1788411", - "1788466", - "1789061", - "1789246", - "1789474", - "1789545", - "1789671", - "1789826", - "1789978", - "1790356", - "1790683", - "1790794", - "1791382", - "1791769", - "1791874", - "1792055", - "1792324", - "1792405", - "1793856", - "1793981", - "1794099", - "1794570", - "1795126", - "1795782", - "1796225", - "1796408", - "1796469", - "1796639", - "1797073", - "1798083", - "1798340", - "1798362", - "1798377", - "1798440", - "1798478", - "1798514", - "1798902", - "1799687", - "1799702", - "1799789", - "1799993", - "1800016", - "1801046", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1807965", - "1808720", - "1808961", - "1809069", - "1810097", - "1811612", - "1812976", - "1814095", - "1815226", - "1819125", - "1819252", - "1819372", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1824090", - "1824246", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827279", - "1827547", - "1827641", - "1828161", - "1828636", - "1829298", - "1829702", - "1830036", - "1830118", - "1830355", - "1830379", - "1830507", - "1830535", - "1830581", - "1830630", - "1830799", - "1830873", - "1830909", - "1831127", - "1831446", - "1831747", - "1831776", - "1832810", - "1833623", - "1835027", - "1835151", - "1835429", - "1836898", - "1837168", - "1837338", - "1839258", - "1839730", - "1840273", - "1841152", - "1841259", - "1841294", - "1841529", - "1842261", - "1843855", - "1843897", - "1845266", - "1845958", - "1846094", - "1846636", - "1846907", - "1847952", - "1848217", - "1848253", - "1848374", - "1848655", - "1848843", - "1849256", - "1849474", - "1849663", - "1849983", - "1850231", - "1850276", - "1850474", - "1850521", - "1850525", - "1850777", - "1850865", - "1851201", - "1851212", - "1851334", - "1851496", - "1852064", - "1852176", - "1852212", - "1852745", - "1852917", - "1853060", - "1853074", - "1853721", - "1853873", - "1854160", - "1854326", - "1854459", - "1855383", - "1856000", - "1856286", - "1856563", - "1856586", - "1856615", - "1856631", - "1856650", - "1856766", - "1856845", - "1857569", - "1857624", - "1857825", - "1857968", - "1858055", - "1858529", - "1858722", - "1859082", - "1860613", - "1860657", - "1860720", - "1861151", - "1861387", - "1861607", - "1862568", - "1862681", - "1863292", - "1863647", - "1864153", - "1864355", - "1864404", - "1864584", - "1867343", - "1867810", - "1869438", - "1869504", - "1869760", - "1869974", - "1870168", - "1870242", - "1870449", - "1870982", - "1871157", - "1871206", - "1871384", - "1871695", - "1872346", - "1872845", - "1873074", - "1873408", - "1873775", - "1873980", - "1874152", - "1874374", - "1874958", - "1875103", - "1875317", - "1875600", - "1875650", - "1875849", - "1875890", - "1876280", - "1876391", - "1876536", - "1877292", - "1877937", - "1878460", - "1878838", - "1879226", - "1879451", - "1879494", - "1879512", - "1879915", - "1881145", - "1881186", - "1881825", - "1882028", - "1882413", - "1882902", - "1883132", - "1883373", - "1884090", - "1884194", - "1884425", - "1884886", - "1884939", - "1886069", - "1886289", - "1886576", - "1887269", - "1887682", - "1888256", - "1888578", - "1888698", - "1889936", - "1890111", - "1890369", - "1891054", - "1891305", - "1891353", - "1892238", - "1894469", - "1895130", - "1902519", - "1906451", - "1913456", - "1918607", - "1920481", - "1920554", - "1920704", - "1939401", - "1939616", - "1940133", - "1940447", - "1940500", - "1940797", - "1941316", - "1942857", - "1949704", - "1951549", - "1951569", - "1951645", - "1952001", - "1952029", - "1952118", - "1952222", - "1952300", - "1952446", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956434", - "1956522", - "1956545", - "1957193", - "1957281", - "1957545", - "1957620", - "1957829", - "1957999", - "1958023", - "1959381", - "1959888", - "1960592", - "1960966", - "1961066", - "1962165", - "1962369", - "1962632", - "1962857", - "1962956", - "1962995", - "1963299", - "1963445", - "1964175", - "1964392", - "1964577", - "1964936", - "1965123", - "1965758", - "1965888", - "1965967", - "1966346", - "1966883", - "1966929", - "1966982", - "1967196", - "1967242", - "1967263", - "1967583", - "1967722", - "1968199", - "1968665", - "1968854", - "1968975", - "1969122", - "1970179", - "1970226", - "1970279", - "1970574", - "1971819", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975336", - "1975542", - "1975570", - "1975885", - "1976155", - "1976515", - "1976949", - "1977104", - "1977419", - "1977775", - "1978019", - "1978112", - "1978364", - "1978506", - "1978607", - "1978749", - "1978814", - "1978974", - "1979106", - "1979243", - "1979727", - "1980342", - "1980511", - "1980718", - "1981690", - "1982367", - "1984731", - "1984922", - "1985507", - "1985969", - "1986081", - "1986953", - "1987269", - "1987509", - "1987711", - "1988533", - "1988779", - "1988876", - "1989161", - "1989996", - "1990136", - "1990531", - "1990677", - "1991135", - "1991357", - "1991817", - "1991946", - "1993403", - "2278098", - "3255940", - "3255956", - "3256169", - "3256188", - "3256294", - "3256322", - "3256568", - "3256934", - "3256950", - "3257150", - "3257152", - "3257220", - "3257225", - "3257328", - "3257405", - "3257500", - "3257694", - "3257798", - "3257894", - "3261008", - "4301098", - "4301121", - "4301340", - "4302289", - "4404424", - "4404729", - "4404934", - "4405245", - "4405430", - "4405493", - "4405983", - "4406069", - "4406268", - "4406291", - "4406298", - "4406360", - "4406622", - "4406931", - "4407138", - "4407165", - "4407310", - "4407354", - "4408190", - "4524069", - "4524400", - "4524792", - "4525072", - "4525607", - "4527338", - "4533124", - "4533660", - "4534405", - "4534456", - "4534532", - "4684145", - "4687068", - "4687943", - "4689528", - "4706578", - "4706723", - "4709385", - "5105328", - "5110641", - "5114254", - "5115807", - "5116471", - "5123346", - "5123443", - "5144176", - "5146397", - "7236046", - "7236091", - "7354470", - "7384515", - "7396883", - "7494486", - "7543161", - "7721234", - "7739898", - "7742506", - "7852351", - "8057237", - "8107362", - "8249110", - "8317469", - "8331787", - "8379138", - "8407958", - "8494978", - "8782295", - "8875890", - "8903953", - "8921795", - "8936210", - "9021546", - "9026655", - "9061491", - "9065472", - "9073940", - "9078901", - "9095083", - "9108102", - "9118632", - "9146182", - "9151414", - "9181278", - "9183600", - "9210500", - "9220793" - ], - "class_count": 683, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8304111700220072, - "precision": 0.35093141039439896, - "recall": 0.8304111700220072, - "f1": 0.35360877971608085 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 249, - "truth_images_in_retained_classes": 58447, - "accepted_predictions_in_retained_classes": 50027, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8219266550615453, - "precision": 0.8127690860219302, - "recall": 0.8219266550615453, - "f1": 0.7906389901996281 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 248, - "truth_images_in_retained_classes": 58439, - "accepted_predictions_in_retained_classes": 50013, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8227207141545352, - "precision": 0.814606288557733, - "recall": 0.8227207141545352, - "f1": 0.7919942060692015 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 249, - "truth_images_in_retained_classes": 58445, - "accepted_predictions_in_retained_classes": 49813, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8371687635869385, - "precision": 0.8073826948942792, - "recall": 0.8371687635869385, - "f1": 0.7987426899052846 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 248, - "truth_images_in_retained_classes": 58439, - "accepted_predictions_in_retained_classes": 49806, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8385283150530148, - "precision": 0.8089101596778391, - "recall": 0.8385283150530148, - "f1": 0.8001023843745056 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967242", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 249, - "truth_images_in_retained_classes": 58445, - "accepted_predictions_in_retained_classes": 49815, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8367198751831082, - "precision": 0.8068419286188611, - "recall": 0.8367198751831082, - "f1": 0.7982979243110807 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 248, - "truth_images_in_retained_classes": 58439, - "accepted_predictions_in_retained_classes": 49808, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8380776166152981, - "precision": 0.8083672128932459, - "recall": 0.8380776166152981, - "f1": 0.7996558253706477 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 250, - "truth_images_in_retained_classes": 58457, - "accepted_predictions_in_retained_classes": 50573, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8627747780438068, - "precision": 0.8368451276595528, - "recall": 0.8627747780438068, - "f1": 0.8294985728477161 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 248, - "truth_images_in_retained_classes": 58439, - "accepted_predictions_in_retained_classes": 50561, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8647931230280309, - "precision": 0.8362014055707858, - "recall": 0.8647931230280309, - "f1": 0.8302836995872716 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1781683", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975570", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 250, - "truth_images_in_retained_classes": 58457, - "accepted_predictions_in_retained_classes": 50578, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8628009595373644, - "precision": 0.8366096008903584, - "recall": 0.8628009595373644, - "f1": 0.8293435494948899 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 5, - "domain": "common", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1743762", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1764920", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1780139", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1786886", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827111", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1871384", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879494", - "1879915", - "1881145", - "1881186", - "1882028", - "1883132", - "1884090", - "1884194", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1889936", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957620", - "1957829", - "1958023", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1978974", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1985969", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4407354", - "4408190", - "4525072", - "4533124", - "5105328", - "5114254", - "5115807", - "5144176", - "5146397", - "7384515", - "7396883", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 248, - "truth_images_in_retained_classes": 58439, - "accepted_predictions_in_retained_classes": 50566, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8648195156626658, - "precision": 0.8359639793921624, - "recall": 0.8648195156626658, - "f1": 0.830127426046116 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1744761", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 225, - "truth_images_in_retained_classes": 58236, - "accepted_predictions_in_retained_classes": 49619, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8252783249476032, - "precision": 0.8350504050502193, - "recall": 0.8252783249476032, - "f1": 0.808013110047685 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 222, - "truth_images_in_retained_classes": 58195, - "accepted_predictions_in_retained_classes": 49570, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.824807504370962, - "precision": 0.83600915965762, - "recall": 0.824807504370962, - "f1": 0.8081287197161677 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 229, - "truth_images_in_retained_classes": 58287, - "accepted_predictions_in_retained_classes": 49484, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8393961784927966, - "precision": 0.8310502469637352, - "recall": 0.8393961784927966, - "f1": 0.8162838077724298 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 222, - "truth_images_in_retained_classes": 58195, - "accepted_predictions_in_retained_classes": 49396, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8435690095177734, - "precision": 0.8357508875265129, - "recall": 0.8435690095177734, - "f1": 0.8203775192436712 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1744761", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830379", - "1830909", - "1835151", - "1839730", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 229, - "truth_images_in_retained_classes": 58287, - "accepted_predictions_in_retained_classes": 49488, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8394539373899418, - "precision": 0.8304974781117134, - "recall": 0.8394539373899418, - "f1": 0.8159503793944154 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 222, - "truth_images_in_retained_classes": 58195, - "accepted_predictions_in_retained_classes": 49400, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8436285896414052, - "precision": 0.8351806890260037, - "recall": 0.8436285896414052, - "f1": 0.820033577358242 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 227, - "truth_images_in_retained_classes": 58252, - "accepted_predictions_in_retained_classes": 50242, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.872971488300815, - "precision": 0.8617786609173839, - "recall": 0.872971488300815, - "f1": 0.8511810260087067 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 222, - "truth_images_in_retained_classes": 58195, - "accepted_predictions_in_retained_classes": 50177, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8708612365358183, - "precision": 0.8620785961078308, - "recall": 0.8708612365358183, - "f1": 0.8500270973391464 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "12105049", - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746437", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789246", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975542", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3257798", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 227, - "truth_images_in_retained_classes": 58252, - "accepted_predictions_in_retained_classes": 50248, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8730003225448212, - "precision": 0.8614328920388118, - "recall": 0.8730003225448212, - "f1": 0.8509289670806535 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 10, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1737335", - "1737519", - "1737701", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1747949", - "1758873", - "1759029", - "1759152", - "1760088", - "1761017", - "1762232", - "1763597", - "1766123", - "1766265", - "1767590", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777243", - "1777868", - "1778073", - "1778695", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1787522", - "1789545", - "1789671", - "1789978", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1796639", - "1797073", - "1798514", - "1798902", - "1799993", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826021", - "1826192", - "1827547", - "1828161", - "1828636", - "1830909", - "1835151", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1875849", - "1876280", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1951645", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959381", - "1959888", - "1960592", - "1962165", - "1962369", - "1962632", - "1962956", - "1962995", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1967722", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1972425", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1976949", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405245", - "4405430", - "4406069", - "4406622", - "4407165", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 222, - "truth_images_in_retained_classes": 58195, - "accepted_predictions_in_retained_classes": 50183, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8708907201997347, - "precision": 0.8617250396419035, - "recall": 0.8708907201997347, - "f1": 0.849769361408209 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1758873", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1778073", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 186, - "truth_images_in_retained_classes": 57097, - "accepted_predictions_in_retained_classes": 48695, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8426420260480435, - "precision": 0.8630959679849289, - "recall": 0.8426420260480435, - "f1": 0.8367937129642364 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 182, - "truth_images_in_retained_classes": 56984, - "accepted_predictions_in_retained_classes": 48586, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8445786450365945, - "precision": 0.8643626549359886, - "recall": 0.8445786450365945, - "f1": 0.8381676091588163 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759029", - "1759152", - "1760088", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 190, - "truth_images_in_retained_classes": 57639, - "accepted_predictions_in_retained_classes": 48638, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8508484895699264, - "precision": 0.8654633778215377, - "recall": 0.8508484895699264, - "f1": 0.8430006758307964 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 182, - "truth_images_in_retained_classes": 56984, - "accepted_predictions_in_retained_classes": 48209, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8568681861269765, - "precision": 0.868294149775848, - "recall": 0.8568681861269765, - "f1": 0.8478182354988681 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759029", - "1759152", - "1760088", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973405", - "1973909", - "1975292", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 190, - "truth_images_in_retained_classes": 57639, - "accepted_predictions_in_retained_classes": 48640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8506988059950821, - "precision": 0.865078476895734, - "recall": 0.8506988059950821, - "f1": 0.8426656582962279 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 182, - "truth_images_in_retained_classes": 56984, - "accepted_predictions_in_retained_classes": 48211, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8567119230543369, - "precision": 0.8678923301280309, - "recall": 0.8567119230543369, - "f1": 0.8474684919188242 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1758873", - "1759029", - "1759152", - "1760088", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 191, - "truth_images_in_retained_classes": 57679, - "accepted_predictions_in_retained_classes": 49466, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8757982151851574, - "precision": 0.8874148819339942, - "recall": 0.8757982151851574, - "f1": 0.8682678780741216 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 182, - "truth_images_in_retained_classes": 56984, - "accepted_predictions_in_retained_classes": 48969, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8814254761776787, - "precision": 0.889035213147546, - "recall": 0.8814254761776787, - "f1": 0.8724320940695854 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1758873", - "1759029", - "1759152", - "1760088", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770274", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789545", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1875650", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1967196", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301098", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9078901", - "9146182", - "9181278" - ], - "class_count": 191, - "truth_images_in_retained_classes": 57679, - "accepted_predictions_in_retained_classes": 49469, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8758324841557825, - "precision": 0.8869192117831547, - "recall": 0.8758324841557825, - "f1": 0.8679852506887044 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "genus", - "cutoff": 20, - "domain": "common", - "classes": [ - "1732062", - "1732397", - "1733840", - "1734388", - "1734683", - "1738583", - "1739724", - "1741338", - "1742061", - "1742419", - "1743516", - "1746749", - "1747242", - "1759152", - "1762232", - "1763597", - "1766123", - "1766265", - "1767644", - "1768222", - "1768411", - "1769098", - "1769504", - "1769819", - "1770396", - "1771501", - "1772155", - "1775910", - "1776168", - "1777868", - "1782659", - "1783394", - "1784809", - "1785281", - "1785873", - "1789671", - "1791382", - "1791874", - "1792324", - "1792405", - "1794570", - "1795126", - "1795782", - "1796225", - "1797073", - "1798514", - "1798902", - "1800016", - "1801758", - "1802269", - "1802997", - "1803951", - "1804905", - "1807195", - "1808961", - "1809069", - "1810097", - "1812976", - "1815226", - "1819125", - "1819865", - "1820270", - "1822307", - "1822545", - "1822778", - "1823714", - "1825057", - "1825076", - "1825121", - "1825444", - "1825963", - "1826192", - "1827547", - "1828161", - "1841259", - "1845266", - "1862568", - "1863647", - "1864355", - "1864404", - "1872346", - "1873980", - "1874958", - "1875317", - "1878838", - "1879226", - "1879915", - "1881145", - "1882028", - "1883132", - "1884090", - "1884425", - "1884939", - "1886289", - "1887269", - "1888698", - "1890111", - "1890369", - "1891353", - "1951549", - "1951569", - "1952001", - "1952300", - "1952526", - "1952736", - "1952801", - "1954587", - "1955508", - "1955900", - "1956545", - "1957545", - "1957829", - "1959888", - "1962165", - "1962369", - "1962956", - "1963299", - "1963445", - "1964577", - "1964936", - "1965123", - "1965758", - "1965967", - "1966929", - "1968199", - "1968665", - "1968854", - "1970179", - "1970279", - "1970574", - "1972114", - "1973909", - "1975885", - "1976155", - "1978112", - "1978364", - "1978506", - "1978749", - "1979243", - "1980342", - "1980718", - "1982367", - "1985507", - "1986081", - "1987269", - "1988533", - "1988779", - "1988876", - "1989161", - "1990136", - "1991357", - "1991946", - "3256294", - "3256322", - "3257220", - "3257225", - "3257328", - "3257694", - "3261008", - "4301340", - "4404424", - "4405430", - "4406069", - "4406622", - "4408190", - "4525072", - "4533124", - "5105328", - "5115807", - "5146397", - "7384515", - "7721234", - "7739898", - "7852351", - "8107362", - "8249110", - "8331787", - "8379138", - "8407958", - "8494978", - "9146182", - "9181278" - ], - "class_count": 182, - "truth_images_in_retained_classes": 56984, - "accepted_predictions_in_retained_classes": 48972, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8814614397677304, - "precision": 0.8885150318354011, - "recall": 0.8814614397677304, - "f1": 0.8721354906046694 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "3528", - "3530", - "3552", - "3553", - "3554", - "3556", - "3563", - "4300664", - "4300668", - "4525436", - "4525465", - "4527533", - "4528997", - "4532185", - "4538", - "4542", - "4554", - "4705755", - "4864", - "4865", - "4867", - "4870", - "5336", - "5338", - "5340", - "5343", - "5345", - "5473", - "5474", - "5481", - "5487", - "6166", - "6946", - "6950", - "6953", - "6954", - "7014", - "7015", - "7016", - "7017", - "7294", - "7297", - "8838", - "8839", - "8840", - "8841", - "8855", - "8860", - "8861", - "8863", - "8864", - "8865", - "8866", - "8868", - "8870", - "8871", - "8874", - "9408", - "9410", - "9412", - "9417", - "9541689", - "9689", - "9717" - ], - "class_count": 64, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8440271040813301, - "precision": 0.2600743589223739, - "recall": 0.8440271040813301, - "f1": 0.2691037692533918 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "3528", - "3530", - "3552", - "3553", - "3554", - "3556", - "3563", - "4300664", - "4300668", - "4525436", - "4525465", - "4527533", - "4528997", - "4532185", - "4538", - "4542", - "4554", - "4705755", - "4864", - "4865", - "4867", - "4870", - "5320", - "5336", - "5340", - "5343", - "5345", - "5474", - "5481", - "5487", - "6166", - "6946", - "6950", - "6954", - "7014", - "7015", - "7016", - "7017", - "7294", - "7297", - "8838", - "8839", - "8840", - "8841", - "8855", - "8860", - "8861", - "8863", - "8864", - "8865", - "8866", - "8868", - "8871", - "8874", - "9408", - "9410", - "9412", - "9541689", - "9689", - "9717" - ], - "class_count": 60, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8105098078966045, - "precision": 0.27535126159560075, - "recall": 0.8105098078966045, - "f1": 0.28044633693466975 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "3528", - "3530", - "3552", - "3553", - "3554", - "3556", - "3563", - "4300664", - "4300668", - "4525436", - "4525465", - "4527533", - "4528997", - "4532185", - "4538", - "4542", - "4554", - "4705755", - "4864", - "4865", - "4867", - "4870", - "5320", - "5336", - "5340", - "5343", - "5345", - "5474", - "5481", - "5487", - "6166", - "6946", - "6950", - "6954", - "7014", - "7015", - "7016", - "7017", - "7294", - "7297", - "8838", - "8839", - "8840", - "8841", - "8855", - "8860", - "8861", - "8863", - "8864", - "8865", - "8866", - "8868", - "8871", - "8874", - "9408", - "9410", - "9412", - "9541689", - "9689", - "9717" - ], - "class_count": 60, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8106416408810809, - "precision": 0.27563597431734277, - "recall": 0.8106416408810809, - "f1": 0.2807691734951072 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "3528", - "3530", - "3552", - "3553", - "3554", - "3556", - "4300664", - "4300668", - "4525436", - "4525465", - "4527533", - "4528997", - "4532185", - "4538", - "4542", - "4554", - "4705755", - "4864", - "4865", - "4867", - "4870", - "5320", - "5336", - "5338", - "5340", - "5343", - "5345", - "5474", - "5481", - "5487", - "6166", - "6946", - "6950", - "6953", - "6954", - "7014", - "7015", - "7016", - "7017", - "7294", - "7297", - "8838", - "8839", - "8840", - "8841", - "8855", - "8860", - "8861", - "8863", - "8864", - "8865", - "8866", - "8868", - "8871", - "8874", - "9408", - "9410", - "9412", - "9689", - "9717" - ], - "class_count": 60, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.857176291043506, - "precision": 0.28541955682278985, - "recall": 0.857176291043506, - "f1": 0.29672977205202156 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": -1, - "domain": "per_model", - "classes": [ - "3528", - "3530", - "3552", - "3553", - "3554", - "3556", - "4300664", - "4300668", - "4525436", - "4525465", - "4527533", - "4528997", - "4532185", - "4538", - "4542", - "4554", - "4705755", - "4864", - "4865", - "4867", - "4870", - "5320", - "5336", - "5338", - "5340", - "5343", - "5345", - "5474", - "5481", - "5487", - "6166", - "6946", - "6950", - "6953", - "6954", - "7014", - "7015", - "7016", - "7017", - "7294", - "7297", - "8838", - "8839", - "8840", - "8841", - "8855", - "8860", - "8861", - "8863", - "8864", - "8865", - "8866", - "8868", - "8871", - "8874", - "9408", - "9410", - "9412", - "9689", - "9717" - ], - "class_count": 60, - "truth_images_in_retained_classes": 58640, - "accepted_predictions_in_retained_classes": 58640, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8573137738657032, - "precision": 0.2853888893805401, - "recall": 0.8573137738657032, - "f1": 0.2967466662087087 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 58035, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8706311696935296, - "precision": 0.8042967720810082, - "recall": 0.8706311696935296, - "f1": 0.8222431727219648 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 58035, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8706311696935296, - "precision": 0.8042967720810082, - "recall": 0.8706311696935296, - "f1": 0.8222431727219648 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57625, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8570862790810952, - "precision": 0.7593871181201356, - "recall": 0.8570862790810952, - "f1": 0.7830056774706758 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57625, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8570862790810952, - "precision": 0.7593871181201356, - "recall": 0.8570862790810952, - "f1": 0.7830056774706758 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57629, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8572378870132431, - "precision": 0.7602412562853618, - "recall": 0.8572378870132431, - "f1": 0.7839741871519881 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57629, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8572378870132431, - "precision": 0.7602412562853618, - "recall": 0.8572378870132431, - "f1": 0.7839741871519881 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8857527347000319, - "precision": 0.7937586704683698, - "recall": 0.8857527347000319, - "f1": 0.8201893161560646 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8857527347000319, - "precision": 0.7937586704683698, - "recall": 0.8857527347000319, - "f1": 0.8201893161560646 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8859108399455587, - "precision": 0.7936666681416203, - "recall": 0.8859108399455587, - "f1": 0.8202399986261261 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 5, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8859108399455587, - "precision": 0.7936666681416203, - "recall": 0.8859108399455587, - "f1": 0.8202399986261261 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 58035, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8706311696935296, - "precision": 0.8042967720810082, - "recall": 0.8706311696935296, - "f1": 0.8222431727219648 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 58035, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8706311696935296, - "precision": 0.8042967720810082, - "recall": 0.8706311696935296, - "f1": 0.8222431727219648 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57625, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8570862790810952, - "precision": 0.7593871181201356, - "recall": 0.8570862790810952, - "f1": 0.7830056774706758 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57625, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8570862790810952, - "precision": 0.7593871181201356, - "recall": 0.8570862790810952, - "f1": 0.7830056774706758 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57629, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8572378870132431, - "precision": 0.7602412562853618, - "recall": 0.8572378870132431, - "f1": 0.7839741871519881 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57629, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8572378870132431, - "precision": 0.7602412562853618, - "recall": 0.8572378870132431, - "f1": 0.7839741871519881 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8857527347000319, - "precision": 0.7937586704683698, - "recall": 0.8857527347000319, - "f1": 0.8201893161560646 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8857527347000319, - "precision": 0.7937586704683698, - "recall": 0.8857527347000319, - "f1": 0.8201893161560646 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8859108399455587, - "precision": 0.7936666681416203, - "recall": 0.8859108399455587, - "f1": 0.8202399986261261 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 10, - "domain": "common", - "classes": [ - "3530", - "3552", - "3556", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8860", - "8863", - "8868", - "8874", - "9689", - "9717" - ], - "class_count": 20, - "truth_images_in_retained_classes": 58635, - "accepted_predictions_in_retained_classes": 57922, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8859108399455587, - "precision": 0.7936666681416203, - "recall": 0.8859108399455587, - "f1": 0.8202399986261261 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57945, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8805744853537323, - "precision": 0.8603318425866534, - "recall": 0.8805744853537323, - "f1": 0.8641945097882205 - } - }, - { - "model": "v2", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57945, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8805744853537323, - "precision": 0.8603318425866534, - "recall": 0.8805744853537323, - "f1": 0.8641945097882205 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57498, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8772443619441458, - "precision": 0.8454930600394824, - "recall": 0.8772443619441458, - "f1": 0.8513978587998544 - } - }, - { - "model": "torch", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57498, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8772443619441458, - "precision": 0.8454930600394824, - "recall": 0.8772443619441458, - "f1": 0.8513978587998544 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57505, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8774227242172608, - "precision": 0.8454826219027971, - "recall": 0.8774227242172608, - "f1": 0.8514947560248236 - } - }, - { - "model": "onnx", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57505, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.8774227242172608, - "precision": 0.8454826219027971, - "recall": 0.8774227242172608, - "f1": 0.8514947560248236 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57813, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.903126466593875, - "precision": 0.8742034082733955, - "recall": 0.903126466593875, - "f1": 0.8819814890011932 - } - }, - { - "model": "torch-tta", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57813, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.903126466593875, - "precision": 0.8742034082733955, - "recall": 0.903126466593875, - "f1": 0.8819814890011932 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "per_model", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57813, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.903312472765083, - "precision": 0.8740951702419255, - "recall": 0.903312472765083, - "f1": 0.8820411154365596 - } - }, - { - "model": "onnx-tta", - "scope": "zero", - "rank": "family", - "cutoff": 20, - "domain": "common", - "classes": [ - "3530", - "3552", - "4300668", - "4532185", - "5336", - "5343", - "5345", - "5474", - "6950", - "7015", - "7016", - "7294", - "8841", - "8863", - "8868", - "9689", - "9717" - ], - "class_count": 17, - "truth_images_in_retained_classes": 58591, - "accepted_predictions_in_retained_classes": 57813, - "report_images": 58640, - "overall_coverage": 1.0, - "metrics": { - "accuracy": 0.903312472765083, - "precision": 0.8740951702419255, - "recall": 0.903312472765083, - "f1": 0.8820411154365596 - } - } - ] -} From cf475f5648038c008d6897f7428622a7dd7011f1 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:51:20 +0200 Subject: [PATCH 204/221] docs: clarify distributed launcher scope and environment setup --- ddp/README.md | 38 +++++++++++++++++--------------------- ddp/spark.sh | 6 +++--- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/ddp/README.md b/ddp/README.md index ea53b65..6c4bfba 100644 --- a/ddp/README.md +++ b/ddp/README.md @@ -1,26 +1,22 @@ -# Using mini_trainer with DDP +# Distributed training launchers -`mini_trainer` has support for DDP training (and potentially inference in the future), here we include some helpful scripts for launching training jobs with DDP in two scenarios: +The trainer accepts torchrun or Slurm rank variables and selects NCCL for CUDA, +Gloo for CPU. These launchers are machine-specific examples. First select and +activate the environment using the [installation guide](../README.md#local-installation). -1. Dual NVIDIA DGX Spark with a direct QSFP connection: [./spark.sh](./spark.sh) -2. SLURM: [./slurm.sh](./slurm.sh) +- [Slurm](slurm.sh): adapt the allocation (currently two nodes, eight GPUs each), + reachable master address and training paths to your cluster, then submit with `sbatch`. +- [Dual DGX Spark](spark.sh): assumes one GPU per node, interface `enp1s0f1np1`, + an SSH worker alias and Python at `/.venv/bin/python`. It requires sudo, + exports the checkout and `~/.cache` over NFS, and mounts them on the worker. + Its cleanup uses a broad remote `pkill -f torchrun` and lazy unmounts: use only + on dedicated nodes where those processes and mounts belong to this run. -Our DDP support is currently limited to NCCL. - -## Launching dual DGX Spark +From the checkout root, with the environment active and training images available: ```sh -uv -qq run bash ../../ddp/spark.sh -w spkc \ - -m mini_trainer.train -i train -o . \ - --name mnist_model \ - --model efficientnet_b0 \ - --batch_size 256 \ - --epochs 5 \ - --warmup_epochs 1 \ - --lr 0.01 \ - --class_weighted \ - --size 27 \ - --cache CUDA \ - --output . \ - --verbose -``` \ No newline at end of file +bash ddp/spark.sh -w spkc -m mini_trainer.train -i /path/to/train -o /path/to/output +``` + +[nccl_sanity_check.py](nccl_sanity_check.py) is an optional torchrun diagnostic: +GPU/version telemetry and a 256 MiB all-reduce timing, separate from training speed. diff --git a/ddp/spark.sh b/ddp/spark.sh index d1fd969..e8b3f02 100644 --- a/ddp/spark.sh +++ b/ddp/spark.sh @@ -2,7 +2,7 @@ usage() { cat << EOF -Usage: uv run bash launch.sh -w [script arguments...] +Usage: bash ddp/spark.sh -w [arguments...] A launcher for two-node PyTorch Distributed Data Parallel (DDP) training over RoCE/NFS. @@ -10,7 +10,7 @@ Required Arguments: -w The SSH alias for the worker node (must exist in ~/.ssh/config) Example: - uv run bash launch.sh -w spkc -m mini_trainer.train -i train -o . --batch_size 32 + bash ddp/spark.sh -w spkc -m mini_trainer.train -i train -o . --batch_size 32 EOF exit 1 } @@ -62,7 +62,7 @@ fi # 3. Resolve the Python executable PYTHON_EXEC=$(command -v python) if [[ -z "$PYTHON_EXEC" ]]; then - echo "[Error] Could not resolve Python executable. Are you running via 'uv run'?" + echo "[Error] Could not resolve Python executable. Activate the checkout .venv first." exit 1 fi From 70da8a27d36d803dd69f05a795b0479ec9e8a536 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 16:57:58 +0200 Subject: [PATCH 205/221] docs: retire unused historical tail figure --- docs/assets/mambo-threshold-tail.svg | 3049 -------------------------- 1 file changed, 3049 deletions(-) delete mode 100644 docs/assets/mambo-threshold-tail.svg diff --git a/docs/assets/mambo-threshold-tail.svg b/docs/assets/mambo-threshold-tail.svg deleted file mode 100644 index d7b948e..0000000 --- a/docs/assets/mambo-threshold-tail.svg +++ /dev/null @@ -1,3049 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Species · Macro accuracy (%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Species · Macro-F1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 100.0% - - - 69.7% - - - 100.0% - - - 70.8% - - - 100.0% - - - 70.5% - - - 100.0% - - - 78.3% - - - 100.0% - - - 74.0% - - - Species · Acceptance coverage (%) - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Genus · Macro accuracy (%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Genus · Macro-F1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 100.0% - - - 69.8% - - - 100.0% - - - 75.8% - - - 100.0% - - - 75.4% - - - 100.0% - - - 77.7% - - - 100.0% - - - 77.7% - - - Genus · Acceptance coverage (%) - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - MAMBO v2 - - - - - - - - - - V3 PyTorch - - - - - - - - - - V3 ONNX - - - - - - - - - - V3 PyTorch + TTA - - - - - - - - - - V3 ONNX + TTA - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Family · Macro accuracy (%) - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - 0.2 - - - - - - - - - - - - - 0.4 - - - - - - - - - - - - - 0.6 - - - - - - - - - - - - - 0.8 - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Family · Macro-F1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 100.0% - - - 77.4% - - - 100.0% - - - 73.1% - - - 100.0% - - - 73.3% - - - 100.0% - - - 78.7% - - - 100.0% - - - 78.5% - - - Family · Acceptance coverage (%) - - - - V2 vs V3 vs V3 + TTA · matched reporting images · legacy northern Europe - - - Same 52,788 reporting images throughout; thresholds fitted on 5,852 separate images using mini_metrics Macro-F1. - Hollow → filled changes the averaging domain, not predictions. >5 requires truth AND accepted-prediction support in every pipeline. - Retained classes differ between confidence settings. No evaluation rows removed; per-class FP/FN remain intact. - Coverage is unchanged by class truncation. TTA: padded scale; recipe selection used the same dataset, so results remain descriptive. - - - - - - - Shape = confidence setting - - - - - - - - - - - Unthresholded - - - - - - - - - - - Calibrated - - - - - - - - Fill = averaging domain - - - - - - - - Full support - - - - - - - - - - - Truncated (support >5) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 55cd20b3c3cac9cab3d5a125a75aa12a12fbd698 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 17:03:22 +0200 Subject: [PATCH 206/221] docs: consolidate retired TTA sweep evidence --- docs/assets/mambo-tta-comparison.json | 14750 ------------------------ docs/assets/mambo-tta-tradeoffs.json | 479 - docs/assets/mambo-tta-tradeoffs.svg | 864 -- docs/mambo-tta.md | 8 +- 4 files changed, 4 insertions(+), 16097 deletions(-) delete mode 100644 docs/assets/mambo-tta-comparison.json delete mode 100644 docs/assets/mambo-tta-tradeoffs.json delete mode 100644 docs/assets/mambo-tta-tradeoffs.svg diff --git a/docs/assets/mambo-tta-comparison.json b/docs/assets/mambo-tta-comparison.json deleted file mode 100644 index a683d87..0000000 --- a/docs/assets/mambo-tta-comparison.json +++ /dev/null @@ -1,14750 +0,0 @@ -{ - "purpose": "fixed-subset qualification; not full-data TTA efficacy", - "revision": "70cc69adc05362863439277048e06386c1f885e1", - "variants": [ - { - "backend": "torch", - "profile": "none", - "views": 1, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5634765625, - "micro_accuracy_known": 0.6556818181818181, - "macro_accuracy_all": 0.6133457957593857, - "macro_accuracy_known": 0.642096379935607, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.705078125, - "micro_accuracy_known": 0.705078125, - "macro_accuracy_all": 0.7689213961488385, - "macro_accuracy_known": 0.7689213961488385, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90234375, - "micro_accuracy_known": 0.90234375, - "macro_accuracy_all": 0.8455210395754881, - "macro_accuracy_known": 0.8455210395754881, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6133457957593857, - "1": 0.7689213961488385, - "2": 0.8455210395754881 - }, - "precision": { - "0": 0.38386701130917067, - "1": 0.45490795001104267, - "2": 0.43558849573976716 - }, - "recall": { - "0": 0.6133457957593857, - "1": 0.7689213961488385, - "2": 0.8455210395754881 - }, - "f1": { - "0": 0.30159751090627007, - "1": 0.3978212838878371, - "2": 0.44111747137261753 - }, - "micro_accuracy": { - "0": 0.5634765625, - "1": 0.705078125, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9798422965375859, - "1": 0.9781684255190729, - "2": 0.8328995608878204 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.642096379935607, - "1": 0.7689213961488385, - "2": 0.8455210395754881 - }, - "precision": { - "0": 0.4064149716588741, - "1": 0.45490795001104267, - "2": 0.43558849573976716 - }, - "recall": { - "0": 0.642096379935607, - "1": 0.7689213961488385, - "2": 0.8455210395754881 - }, - "f1": { - "0": 0.3240682608216244, - "1": 0.3978212838878371, - "2": 0.44111747137261753 - }, - "micro_accuracy": { - "0": 0.6556818181818181, - "1": 0.705078125, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9867618399579154, - "1": 0.9781684255190729, - "2": 0.8328995608878204 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "88184708e72f198b2f9dc3394eafe9ca1caae8732dc8983f3f1310fa0d584200" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.673828125, - "micro_accuracy_known": 0.7840909090909091, - "macro_accuracy_all": 0.727382826371436, - "macro_accuracy_known": 0.761478896357597, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8404997671606066, - "macro_accuracy_known": 0.8404997671606066, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9306640625, - "micro_accuracy_known": 0.9306640625, - "macro_accuracy_all": 0.8740778323977335, - "macro_accuracy_known": 0.8740778323977335, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.727382826371436, - "1": 0.8404997671606066, - "2": 0.8740778323977335 - }, - "precision": { - "0": 0.5208990372105127, - "1": 0.5729516072863713, - "2": 0.48648631014856 - }, - "recall": { - "0": 0.727382826371436, - "1": 0.8404997671606066, - "2": 0.8740778323977335 - }, - "f1": { - "0": 0.4459376095229831, - "1": 0.5325071475461216, - "2": 0.48813451419939924 - }, - "micro_accuracy": { - "0": 0.673828125, - "1": 0.7783203125, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.9753358609531615, - "1": 0.9764597221533328, - "2": 0.867042461641923 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.761478896357597, - "1": 0.8404997671606066, - "2": 0.8740778323977335 - }, - "precision": { - "0": 0.5485367915780287, - "1": 0.5729516072863713, - "2": 0.48648631014856 - }, - "recall": { - "0": 0.761478896357597, - "1": 0.8404997671606066, - "2": 0.8740778323977335 - }, - "f1": { - "0": 0.4803844753604072, - "1": 0.5325071475461216, - "2": 0.48813451419939924 - }, - "micro_accuracy": { - "0": 0.7840909090909091, - "1": 0.7783203125, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.978953813750611, - "1": 0.9764597221533328, - "2": 0.867042461641923 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4adb392102116241723841675aa7c654225917b164a2863470f8b7f03e4c7c36" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.689453125, - "micro_accuracy_known": 0.8022727272727272, - "macro_accuracy_all": 0.7444257582219089, - "macro_accuracy_known": 0.779320715638561, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8587220718829114, - "macro_accuracy_known": 0.8587220718829114, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8755822798046276, - "macro_accuracy_known": 0.8755822798046276, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7444257582219089, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "precision": { - "0": 0.544861724758632, - "1": 0.6018770821938243, - "2": 0.4692384071547976 - }, - "recall": { - "0": 0.7444257582219089, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "f1": { - "0": 0.4714537876361763, - "1": 0.5690866270248979, - "2": 0.4708720140695067 - }, - "micro_accuracy": { - "0": 0.689453125, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9745455803070623, - "1": 0.9748839426636258, - "2": 0.8788292243597902 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.779320715638561, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "precision": { - "0": 0.5730387118876329, - "1": 0.6018770821938243, - "2": 0.4692384071547976 - }, - "recall": { - "0": 0.779320715638561, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "f1": { - "0": 0.5077906788590152, - "1": 0.5690866270248979, - "2": 0.4708720140695067 - }, - "micro_accuracy": { - "0": 0.8022727272727272, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9783702674919692, - "1": 0.9748839426636258, - "2": 0.8788292243597902 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8d9ce855aa1728931dd551db0f3b33eec1f57d68331756d0d74e7f096ab54682" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.673828125, - "micro_accuracy_known": 0.7840909090909091, - "macro_accuracy_all": 0.727382826371436, - "macro_accuracy_known": 0.761478896357597, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8404997671606066, - "macro_accuracy_known": 0.8404997671606066, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8720217086106892, - "macro_accuracy_known": 0.8720217086106892, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.727382826371436, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5185913344708133, - "1": 0.5754212262832953, - "2": 0.4381377787821555 - }, - "recall": { - "0": 0.727382826371436, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.4438784570853463, - "1": 0.5347445725358112, - "2": 0.44453406406960855 - }, - "micro_accuracy": { - "0": 0.673828125, - "1": 0.7783203125, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9746761516565939, - "1": 0.9749378584410026, - "2": 0.8643464250458442 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.761478896357597, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5440732642263254, - "1": 0.5754212262832953, - "2": 0.4381377787821555 - }, - "recall": { - "0": 0.761478896357597, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.476431757442951, - "1": 0.5347445725358112, - "2": 0.44453406406960855 - }, - "micro_accuracy": { - "0": 0.7840909090909091, - "1": 0.7783203125, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.980104391425599, - "1": 0.9749378584410026, - "2": 0.8643464250458442 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5d734e06e264cc472f92c6f8d789517eca9f1a6ea30404d2a91e4475baf1a54b" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.685546875, - "micro_accuracy_known": 0.7977272727272727, - "macro_accuracy_all": 0.7369630716547447, - "macro_accuracy_known": 0.771508215638561, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7822265625, - "micro_accuracy_known": 0.7822265625, - "macro_accuracy_all": 0.8453887385495781, - "macro_accuracy_known": 0.8453887385495781, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.875199379201428, - "macro_accuracy_known": 0.875199379201428, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7369630716547447, - "1": 0.8453887385495781, - "2": 0.875199379201428 - }, - "precision": { - "0": 0.5367841055341056, - "1": 0.5872092018109718, - "2": 0.4548694535217127 - }, - "recall": { - "0": 0.7369630716547447, - "1": 0.8453887385495781, - "2": 0.875199379201428 - }, - "f1": { - "0": 0.46220797844909955, - "1": 0.5494346893267166, - "2": 0.4554186696946595 - }, - "micro_accuracy": { - "0": 0.685546875, - "1": 0.7822265625, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9750182280188969, - "1": 0.9767525227713265, - "2": 0.8829844004396705 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.771508215638561, - "1": 0.8453887385495781, - "2": 0.875199379201428 - }, - "precision": { - "0": 0.5640922093218913, - "1": 0.5872092018109718, - "2": 0.4548694535217127 - }, - "recall": { - "0": 0.771508215638561, - "1": 0.8453887385495781, - "2": 0.875199379201428 - }, - "f1": { - "0": 0.4972739381266254, - "1": 0.5494346893267166, - "2": 0.4554186696946595 - }, - "micro_accuracy": { - "0": 0.7977272727272727, - "1": 0.7822265625, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9792636812373319, - "1": 0.9767525227713265, - "2": 0.8829844004396705 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f754f6ce3b4749c376f7a326192cb6cad07f66ab4421854d69288c7bbdfbbc36" - } - } - }, - { - "backend": "torch", - "profile": "hflip", - "views": 2, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5615234375, - "micro_accuracy_known": 0.6534090909090909, - "macro_accuracy_all": 0.6091451255139394, - "macro_accuracy_known": 0.6376988032724052, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7041015625, - "micro_accuracy_known": 0.7041015625, - "macro_accuracy_all": 0.772523051856739, - "macro_accuracy_known": 0.772523051856739, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9013671875, - "micro_accuracy_known": 0.9013671875, - "macro_accuracy_all": 0.8415025119082482, - "macro_accuracy_known": 0.8415025119082482, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6091451255139394, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "precision": { - "0": 0.383503109147439, - "1": 0.4643402764482904, - "2": 0.4046742937832088 - }, - "recall": { - "0": 0.6091451255139394, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "f1": { - "0": 0.2997544081281588, - "1": 0.40778881645336285, - "2": 0.4101173096873111 - }, - "micro_accuracy": { - "0": 0.5615234375, - "1": 0.7041015625, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9805015616924377, - "1": 0.9777968970149564, - "2": 0.8410168021297401 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6376988032724052, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "precision": { - "0": 0.4094303109371602, - "1": 0.4643402764482904, - "2": 0.4046742937832088 - }, - "recall": { - "0": 0.6376988032724052, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "f1": { - "0": 0.3244245524722784, - "1": 0.40778881645336285, - "2": 0.4101173096873111 - }, - "micro_accuracy": { - "0": 0.6534090909090909, - "1": 0.7041015625, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9861494891358263, - "1": 0.9777968970149564, - "2": 0.8410168021297401 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "189cda92192aa4274c9bdf88774480942de6ab19fff6cf45d4d5b8b58f54a5e1" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7239714356466123, - "macro_accuracy_known": 0.7579075966925473, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.779296875, - "micro_accuracy_known": 0.779296875, - "macro_accuracy_all": 0.8460648058835403, - "macro_accuracy_known": 0.8460648058835403, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8684376388563206, - "macro_accuracy_known": 0.8684376388563206, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7239714356466123, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "precision": { - "0": 0.5329789562289562, - "1": 0.5789691710292569, - "2": 0.4677678477278932 - }, - "recall": { - "0": 0.7239714356466123, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "f1": { - "0": 0.4499769594286163, - "1": 0.538938226884136, - "2": 0.4680864397151781 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.779296875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9736670675959799, - "1": 0.9760534959312177, - "2": 0.8610977665331919 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7579075966925473, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "precision": { - "0": 0.5577905794051627, - "1": 0.5789691710292569, - "2": 0.4677678477278932 - }, - "recall": { - "0": 0.7579075966925473, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "f1": { - "0": 0.4819315607331685, - "1": 0.538938226884136, - "2": 0.4680864397151781 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.779296875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9771410797584144, - "1": 0.9760534959312177, - "2": 0.8610977665331919 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "cf8b94061be53075f6bd6ab6922ee291d27ac0b7d49d3bfff4ac58474fd61029" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6953125, - "micro_accuracy_known": 0.8090909090909091, - "macro_accuracy_all": 0.7490054272359848, - "macro_accuracy_known": 0.7841150566376717, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7900390625, - "micro_accuracy_known": 0.7900390625, - "macro_accuracy_all": 0.8663721768751217, - "macro_accuracy_known": 0.8663721768751217, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8738845020040061, - "macro_accuracy_known": 0.8738845020040061, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7490054272359848, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "precision": { - "0": 0.5691669343612807, - "1": 0.6223680640347307, - "2": 0.48996999380632916 - }, - "recall": { - "0": 0.7490054272359848, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "f1": { - "0": 0.4878421471972997, - "1": 0.5895253154735276, - "2": 0.4894596044863183 - }, - "micro_accuracy": { - "0": 0.6953125, - "1": 0.7900390625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9737375400290177, - "1": 0.9745437130474148, - "2": 0.8705705052200974 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7841150566376717, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "precision": { - "0": 0.5949420677361854, - "1": 0.6223680640347307, - "2": 0.48996999380632916 - }, - "recall": { - "0": 0.7841150566376717, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "f1": { - "0": 0.52269966665244, - "1": 0.5895253154735276, - "2": 0.4894596044863183 - }, - "micro_accuracy": { - "0": 0.8090909090909091, - "1": 0.7900390625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9772388639732228, - "1": 0.9745437130474148, - "2": 0.8705705052200974 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "7790cda916fce5ee3b2e10378160bf1ba1383c457aad3339f064b838215f8cb7" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7239714356466123, - "macro_accuracy_known": 0.7579075966925473, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8453240651427995, - "macro_accuracy_known": 0.8453240651427995, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9248046875, - "micro_accuracy_known": 0.9248046875, - "macro_accuracy_all": 0.8667644156724759, - "macro_accuracy_known": 0.8667644156724759, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7239714356466123, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "precision": { - "0": 0.530553047026557, - "1": 0.5838835046627254, - "2": 0.4369691898770908 - }, - "recall": { - "0": 0.7239714356466123, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "f1": { - "0": 0.4478749957083243, - "1": 0.5432633692427183, - "2": 0.4422047830546245 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.7783203125, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9727774718765091, - "1": 0.9741674576985, - "2": 0.857522102743873 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7579075966925473, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "precision": { - "0": 0.5550931731104145, - "1": 0.5838835046627254, - "2": 0.4369691898770908 - }, - "recall": { - "0": 0.7579075966925473, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "f1": { - "0": 0.47948328149769953, - "1": 0.5432633692427183, - "2": 0.4422047830546245 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.7783203125, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9779509921966772, - "1": 0.9741674576985, - "2": 0.857522102743873 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "afafd70c5b4cbefff5790d421e55127497a3c542381f9a1790308aee5e0e5eec" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6923828125, - "micro_accuracy_known": 0.8056818181818182, - "macro_accuracy_all": 0.7424903834075083, - "macro_accuracy_known": 0.7772946201297352, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8576420181449631, - "macro_accuracy_known": 0.8576420181449631, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8707709909948831, - "macro_accuracy_known": 0.8707709909948831, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7424903834075083, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "precision": { - "0": 0.5587068602693603, - "1": 0.6091923159796464, - "2": 0.4724244574193488 - }, - "recall": { - "0": 0.7424903834075083, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "f1": { - "0": 0.4777957123182366, - "1": 0.5737266608760239, - "2": 0.4716963995052431 - }, - "micro_accuracy": { - "0": 0.6923828125, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9739043442268694, - "1": 0.9756713655030097, - "2": 0.871496008905084 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7772946201297352, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "precision": { - "0": 0.5836013565255443, - "1": 0.6091923159796464, - "2": 0.4724244574193488 - }, - "recall": { - "0": 0.7772946201297352, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "f1": { - "0": 0.5113941166899645, - "1": 0.5737266608760239, - "2": 0.4716963995052431 - }, - "micro_accuracy": { - "0": 0.8056818181818182, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9777746021348526, - "1": 0.9756713655030097, - "2": 0.871496008905084 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "753cf34759f44801850a63551ebdd5872162105016b9f9415d6cf544e6de9722" - } - } - }, - { - "backend": "torch", - "profile": "five_crop", - "views": 5, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.529296875, - "micro_accuracy_known": 0.615909090909091, - "macro_accuracy_all": 0.5813643479000902, - "macro_accuracy_known": 0.608615801707907, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.66015625, - "macro_accuracy_all": 0.7256026606965782, - "macro_accuracy_known": 0.7256026606965782, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.87109375, - "micro_accuracy_known": 0.87109375, - "macro_accuracy_all": 0.8203128497400256, - "macro_accuracy_known": 0.8203128497400256, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.5813643479000902, - "1": 0.7256026606965782, - "2": 0.8203128497400256 - }, - "precision": { - "0": 0.3539246258670719, - "1": 0.40628544132149896, - "2": 0.38287248076366676 - }, - "recall": { - "0": 0.5813643479000902, - "1": 0.7256026606965782, - "2": 0.8203128497400256 - }, - "f1": { - "0": 0.2713698750105877, - "1": 0.34802213759891104, - "2": 0.390237881759979 - }, - "micro_accuracy": { - "0": 0.529296875, - "1": 0.66015625, - "2": 0.87109375 - }, - "theilU": { - "0": 0.9748236916276373, - "1": 0.9703857848023797, - "2": 0.7926288771601431 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.608615801707907, - "1": 0.7256026606965782, - "2": 0.8203128497400256 - }, - "precision": { - "0": 0.3756394839728173, - "1": 0.40628544132149896, - "2": 0.38287248076366676 - }, - "recall": { - "0": 0.608615801707907, - "1": 0.7256026606965782, - "2": 0.8203128497400256 - }, - "f1": { - "0": 0.2913359273372394, - "1": 0.34802213759891104, - "2": 0.390237881759979 - }, - "micro_accuracy": { - "0": 0.615909090909091, - "1": 0.66015625, - "2": 0.87109375 - }, - "theilU": { - "0": 0.9834727095917797, - "1": 0.9703857848023797, - "2": 0.7926288771601431 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "256428ffb78393334963613d96d789a6c6a60ef9ec887668705f56a1f850b445" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6494140625, - "micro_accuracy_known": 0.7556818181818182, - "macro_accuracy_all": 0.6864679547220788, - "macro_accuracy_known": 0.7186461400996763, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7509765625, - "micro_accuracy_known": 0.7509765625, - "macro_accuracy_all": 0.8111129589394724, - "macro_accuracy_known": 0.8111129589394724, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.91015625, - "micro_accuracy_known": 0.91015625, - "macro_accuracy_all": 0.8502301735024017, - "macro_accuracy_known": 0.8502301735024017, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6864679547220788, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "precision": { - "0": 0.4694282106782107, - "1": 0.5333684296208269, - "2": 0.46691900718781665 - }, - "recall": { - "0": 0.6864679547220788, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "f1": { - "0": 0.38962188632761524, - "1": 0.48106734970677867, - "2": 0.47399147864357544 - }, - "micro_accuracy": { - "0": 0.6494140625, - "1": 0.7509765625, - "2": 0.91015625 - }, - "theilU": { - "0": 0.9751197291793138, - "1": 0.9685003685053799, - "2": 0.8284966930961688 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7186461400996763, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "precision": { - "0": 0.4989179218013084, - "1": 0.5333684296208269, - "2": 0.46691900718781665 - }, - "recall": { - "0": 0.7186461400996763, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "f1": { - "0": 0.42134237590754114, - "1": 0.48106734970677867, - "2": 0.47399147864357544 - }, - "micro_accuracy": { - "0": 0.7556818181818182, - "1": 0.7509765625, - "2": 0.91015625 - }, - "theilU": { - "0": 0.9777247222607772, - "1": 0.9685003685053799, - "2": 0.8284966930961688 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "9f019b7f1338c9e16b93b4272733ecab9d4596a6f594cce6b9d3a0bb8f7a7f48" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6650390625, - "micro_accuracy_known": 0.7738636363636363, - "macro_accuracy_all": 0.6996728719136418, - "macro_accuracy_known": 0.7324700377845937, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.763671875, - "micro_accuracy_known": 0.763671875, - "macro_accuracy_all": 0.8276382349281632, - "macro_accuracy_known": 0.8276382349281632, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9111328125, - "micro_accuracy_known": 0.9111328125, - "macro_accuracy_all": 0.85383785060624, - "macro_accuracy_known": 0.85383785060624, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6996728719136418, - "1": 0.8276382349281632, - "2": 0.85383785060624 - }, - "precision": { - "0": 0.49111882013952074, - "1": 0.5582610950725357, - "2": 0.4601804926385507 - }, - "recall": { - "0": 0.6996728719136418, - "1": 0.8276382349281632, - "2": 0.85383785060624 - }, - "f1": { - "0": 0.4136808201709315, - "1": 0.5120544331452002, - "2": 0.46467413341474983 - }, - "micro_accuracy": { - "0": 0.6650390625, - "1": 0.763671875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9743396036576268, - "1": 0.9714424257258611, - "2": 0.8399794998233961 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7324700377845937, - "1": 0.8276382349281632, - "2": 0.85383785060624 - }, - "precision": { - "0": 0.5147725480920845, - "1": 0.5582610950725357, - "2": 0.4601804926385507 - }, - "recall": { - "0": 0.7324700377845937, - "1": 0.8276382349281632, - "2": 0.85383785060624 - }, - "f1": { - "0": 0.44215291236257215, - "1": 0.5120544331452002, - "2": 0.46467413341474983 - }, - "micro_accuracy": { - "0": 0.7738636363636363, - "1": 0.763671875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9780483771504945, - "1": 0.9714424257258611, - "2": 0.8399794998233961 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "6518df0a44734b0a22940dfd23eaf8563c10f2dd72521af8a3ebe41d5a8d2083" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.646484375, - "micro_accuracy_known": 0.7522727272727273, - "macro_accuracy_all": 0.6839643850543301, - "macro_accuracy_known": 0.7160252156037519, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7470703125, - "micro_accuracy_known": 0.7470703125, - "macro_accuracy_all": 0.8075779954045089, - "macro_accuracy_known": 0.8075779954045089, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9052734375, - "micro_accuracy_known": 0.9052734375, - "macro_accuracy_all": 0.8464483991172489, - "macro_accuracy_known": 0.8464483991172489, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6839643850543301, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "precision": { - "0": 0.4658880017263703, - "1": 0.5257057521087325, - "2": 0.45979108437103 - }, - "recall": { - "0": 0.6839643850543301, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "f1": { - "0": 0.3863959918565985, - "1": 0.47348367305377786, - "2": 0.4659878669713518 - }, - "micro_accuracy": { - "0": 0.646484375, - "1": 0.7470703125, - "2": 0.9052734375 - }, - "theilU": { - "0": 0.9746054246842587, - "1": 0.9679591076324016, - "2": 0.8222229053522426 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7160252156037519, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "precision": { - "0": 0.4952058689717926, - "1": 0.5257057521087325, - "2": 0.45979108437103 - }, - "recall": { - "0": 0.7160252156037519, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "f1": { - "0": 0.41767265874023246, - "1": 0.47348367305377786, - "2": 0.4659878669713518 - }, - "micro_accuracy": { - "0": 0.7522727272727273, - "1": 0.7470703125, - "2": 0.9052734375 - }, - "theilU": { - "0": 0.9776412209536774, - "1": 0.9679591076324016, - "2": 0.8222229053522426 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "baddc6bcc91d0110edd232f95c03800c611b1db32727370d8734473009c0f327" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6611328125, - "micro_accuracy_known": 0.7693181818181818, - "macro_accuracy_all": 0.6956453902742199, - "macro_accuracy_known": 0.728253767943324, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7607421875, - "micro_accuracy_known": 0.7607421875, - "macro_accuracy_all": 0.8246852819752103, - "macro_accuracy_known": 0.8246852819752103, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9111328125, - "micro_accuracy_known": 0.9111328125, - "macro_accuracy_all": 0.8490705487907292, - "macro_accuracy_known": 0.8490705487907292, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6956453902742199, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "precision": { - "0": 0.4879724111866969, - "1": 0.5611634388877978, - "2": 0.4615299319959455 - }, - "recall": { - "0": 0.6956453902742199, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "f1": { - "0": 0.40906296151598653, - "1": 0.5122306689750561, - "2": 0.4650358026058972 - }, - "micro_accuracy": { - "0": 0.6611328125, - "1": 0.7607421875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9739383567747754, - "1": 0.970300140083669, - "2": 0.8375842132984603 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.728253767943324, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "precision": { - "0": 0.511423463774949, - "1": 0.5611634388877978, - "2": 0.4615299319959455 - }, - "recall": { - "0": 0.728253767943324, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "f1": { - "0": 0.4370672141449003, - "1": 0.5122306689750561, - "2": 0.4650358026058972 - }, - "micro_accuracy": { - "0": 0.7693181818181818, - "1": 0.7607421875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9775791299489568, - "1": 0.970300140083669, - "2": 0.8375842132984603 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "0db29b9e8bfffcb91b1023f04c20453793aec42c6c647cfafc250b2243aa31c6" - } - } - }, - { - "backend": "torch", - "profile": "ten_crop", - "views": 10, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.53125, - "micro_accuracy_known": 0.6181818181818182, - "macro_accuracy_all": 0.60343863844453, - "macro_accuracy_known": 0.6317248246216174, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.6689453125, - "micro_accuracy_known": 0.6689453125, - "macro_accuracy_all": 0.7429239407237405, - "macro_accuracy_known": 0.7429239407237405, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.8759765625, - "micro_accuracy_known": 0.8759765625, - "macro_accuracy_all": 0.8176955988576485, - "macro_accuracy_known": 0.8176955988576485, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.60343863844453, - "1": 0.7429239407237405, - "2": 0.8176955988576485 - }, - "precision": { - "0": 0.3656289623837701, - "1": 0.4202346151857552, - "2": 0.3204710902569391 - }, - "recall": { - "0": 0.60343863844453, - "1": 0.7429239407237405, - "2": 0.8176955988576485 - }, - "f1": { - "0": 0.2840043848761477, - "1": 0.36338535026066476, - "2": 0.3258295857387298 - }, - "micro_accuracy": { - "0": 0.53125, - "1": 0.6689453125, - "2": 0.8759765625 - }, - "theilU": { - "0": 0.9762496858852205, - "1": 0.9748713732141564, - "2": 0.8185167276713174 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6317248246216174, - "1": 0.7429239407237405, - "2": 0.8176955988576485 - }, - "precision": { - "0": 0.3867552278944684, - "1": 0.4202346151857552, - "2": 0.3204710902569391 - }, - "recall": { - "0": 0.6317248246216174, - "1": 0.7429239407237405, - "2": 0.8176955988576485 - }, - "f1": { - "0": 0.304694796578515, - "1": 0.36338535026066476, - "2": 0.3258295857387298 - }, - "micro_accuracy": { - "0": 0.6181818181818182, - "1": 0.6689453125, - "2": 0.8759765625 - }, - "theilU": { - "0": 0.985109077428969, - "1": 0.9748713732141564, - "2": 0.8185167276713174 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "14662d4aa23b4da4de15c0dd0bdd47a608305e29eb6287016de9de196b6b967f" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.7681818181818182, - "macro_accuracy_all": 0.7117364830935137, - "macro_accuracy_known": 0.7450991307385221, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.75390625, - "micro_accuracy_known": 0.75390625, - "macro_accuracy_all": 0.8194249310089767, - "macro_accuracy_known": 0.8194249310089767, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9091796875, - "micro_accuracy_known": 0.9091796875, - "macro_accuracy_all": 0.8571149511649796, - "macro_accuracy_known": 0.8571149511649796, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7117364830935137, - "1": 0.8194249310089767, - "2": 0.8571149511649796 - }, - "precision": { - "0": 0.4977664750110571, - "1": 0.5484536069577054, - "2": 0.4420363507892305 - }, - "recall": { - "0": 0.7117364830935137, - "1": 0.8194249310089767, - "2": 0.8571149511649796 - }, - "f1": { - "0": 0.4182302613679317, - "1": 0.49625357517655627, - "2": 0.44594584760858924 - }, - "micro_accuracy": { - "0": 0.66015625, - "1": 0.75390625, - "2": 0.9091796875 - }, - "theilU": { - "0": 0.9762931685998127, - "1": 0.9709708500223726, - "2": 0.840625656313752 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7450991307385221, - "1": 0.8194249310089767, - "2": 0.8571149511649796 - }, - "precision": { - "0": 0.5277803629595161, - "1": 0.5484536069577054, - "2": 0.4420363507892305 - }, - "recall": { - "0": 0.7450991307385221, - "1": 0.8194249310089767, - "2": 0.8571149511649796 - }, - "f1": { - "0": 0.4520071926401122, - "1": 0.49625357517655627, - "2": 0.44594584760858924 - }, - "micro_accuracy": { - "0": 0.7681818181818182, - "1": 0.75390625, - "2": 0.9091796875 - }, - "theilU": { - "0": 0.9787752837863699, - "1": 0.9709708500223726, - "2": 0.840625656313752 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8b819ced1f9471887e45d886dbd3551547d8ad3f10bb698c8a78324f32871ddb" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6796875, - "micro_accuracy_known": 0.7909090909090909, - "macro_accuracy_all": 0.7314062084977246, - "macro_accuracy_known": 0.7656908745210554, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7626953125, - "micro_accuracy_known": 0.7626953125, - "macro_accuracy_all": 0.8322399493239953, - "macro_accuracy_known": 0.8322399493239953, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9150390625, - "micro_accuracy_known": 0.9150390625, - "macro_accuracy_all": 0.8617810377922105, - "macro_accuracy_known": 0.8617810377922105, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7314062084977246, - "1": 0.8322399493239953, - "2": 0.8617810377922105 - }, - "precision": { - "0": 0.5236001240887235, - "1": 0.5638623197133835, - "2": 0.4680254975039965 - }, - "recall": { - "0": 0.7314062084977246, - "1": 0.8322399493239953, - "2": 0.8617810377922105 - }, - "f1": { - "0": 0.44724856491193016, - "1": 0.5201263495966478, - "2": 0.4700542219061204 - }, - "micro_accuracy": { - "0": 0.6796875, - "1": 0.7626953125, - "2": 0.9150390625 - }, - "theilU": { - "0": 0.9752831893435354, - "1": 0.9698132637565692, - "2": 0.847762302634304 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7656908745210554, - "1": 0.8322399493239953, - "2": 0.8617810377922105 - }, - "precision": { - "0": 0.5472812097812099, - "1": 0.5638623197133835, - "2": 0.4680254975039965 - }, - "recall": { - "0": 0.7656908745210554, - "1": 0.8322399493239953, - "2": 0.8617810377922105 - }, - "f1": { - "0": 0.4775271985236881, - "1": 0.5201263495966478, - "2": 0.4700542219061204 - }, - "micro_accuracy": { - "0": 0.7909090909090909, - "1": 0.7626953125, - "2": 0.9150390625 - }, - "theilU": { - "0": 0.9796516871847247, - "1": 0.9698132637565692, - "2": 0.847762302634304 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "102236694fd1ca9e73c7d04e4fdd5d4fa8cee005fcc2277ee6f1f76938815a03" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.65625, - "micro_accuracy_known": 0.7636363636363637, - "macro_accuracy_all": 0.7096747198377206, - "macro_accuracy_known": 0.7429407223301138, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7529296875, - "micro_accuracy_known": 0.7529296875, - "macro_accuracy_all": 0.818689195273241, - "macro_accuracy_known": 0.818689195273241, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9072265625, - "micro_accuracy_known": 0.9072265625, - "macro_accuracy_all": 0.8562264454370947, - "macro_accuracy_known": 0.8562264454370947, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7096747198377206, - "1": 0.818689195273241, - "2": 0.8562264454370947 - }, - "precision": { - "0": 0.4972589653145209, - "1": 0.5501384885606198, - "2": 0.41923313907865467 - }, - "recall": { - "0": 0.7096747198377206, - "1": 0.818689195273241, - "2": 0.8562264454370947 - }, - "f1": { - "0": 0.4162772324191029, - "1": 0.4959921727881662, - "2": 0.4237405614469208 - }, - "micro_accuracy": { - "0": 0.65625, - "1": 0.7529296875, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9751972485899153, - "1": 0.9710227259927404, - "2": 0.842218692444066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7429407223301138, - "1": 0.818689195273241, - "2": 0.8562264454370947 - }, - "precision": { - "0": 0.5255256648113792, - "1": 0.5501384885606198, - "2": 0.41923313907865467 - }, - "recall": { - "0": 0.7429407223301138, - "1": 0.818689195273241, - "2": 0.8562264454370947 - }, - "f1": { - "0": 0.44919644777330836, - "1": 0.4959921727881662, - "2": 0.4237405614469208 - }, - "micro_accuracy": { - "0": 0.7636363636363637, - "1": 0.7529296875, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9789208760981903, - "1": 0.9710227259927404, - "2": 0.842218692444066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "ad08d9ada009e6257b4adee6d18822c8282fccba25ac9034982c72e0e4c77e82" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.727693147439809, - "macro_accuracy_known": 0.76180376372605, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.759765625, - "micro_accuracy_known": 0.759765625, - "macro_accuracy_all": 0.8302264358104817, - "macro_accuracy_known": 0.8302264358104817, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9140625, - "micro_accuracy_known": 0.9140625, - "macro_accuracy_all": 0.860943275272093, - "macro_accuracy_known": 0.860943275272093, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.727693147439809, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "precision": { - "0": 0.5168657173480325, - "1": 0.5653516814155112, - "2": 0.437878914755703 - }, - "recall": { - "0": 0.727693147439809, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "f1": { - "0": 0.43964474540818893, - "1": 0.5186853820268305, - "2": 0.439343575066404 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.759765625, - "2": 0.9140625 - }, - "theilU": { - "0": 0.9757674277165843, - "1": 0.9704375019534383, - "2": 0.850375057622715 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.76180376372605, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "precision": { - "0": 0.5436081815276447, - "1": 0.5653516814155112, - "2": 0.437878914755703 - }, - "recall": { - "0": 0.76180376372605, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "f1": { - "0": 0.47191829187231765, - "1": 0.5186853820268305, - "2": 0.439343575066404 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.759765625, - "2": 0.9140625 - }, - "theilU": { - "0": 0.9791824399831869, - "1": 0.9704375019534383, - "2": 0.850375057622715 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "b0c907f76ede489782907ebd6390921e46592383dcd149c6e904ca7ccf96ec5b" - } - } - }, - { - "backend": "torch", - "profile": "d4", - "views": 8, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5751953125, - "micro_accuracy_known": 0.6693181818181818, - "macro_accuracy_all": 0.641266379365358, - "macro_accuracy_known": 0.6713257408981091, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7060546875, - "micro_accuracy_known": 0.7060546875, - "macro_accuracy_all": 0.7719404043737291, - "macro_accuracy_known": 0.7719404043737291, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9072265625, - "micro_accuracy_known": 0.9072265625, - "macro_accuracy_all": 0.8468611655625742, - "macro_accuracy_known": 0.8468611655625742, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.641266379365358, - "1": 0.7719404043737291, - "2": 0.8468611655625742 - }, - "precision": { - "0": 0.4045381076712669, - "1": 0.4702941297022569, - "2": 0.3918829546059463 - }, - "recall": { - "0": 0.641266379365358, - "1": 0.7719404043737291, - "2": 0.8468611655625742 - }, - "f1": { - "0": 0.32135803382917577, - "1": 0.41222158471469095, - "2": 0.39228952751507085 - }, - "micro_accuracy": { - "0": 0.5751953125, - "1": 0.7060546875, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9793161287014726, - "1": 0.9747919562993815, - "2": 0.8489799821290803 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6713257408981091, - "1": 0.7719404043737291, - "2": 0.8468611655625742 - }, - "precision": { - "0": 0.4309721672602559, - "1": 0.4702941297022569, - "2": 0.3918829546059463 - }, - "recall": { - "0": 0.6713257408981091, - "1": 0.7719404043737291, - "2": 0.8468611655625742 - }, - "f1": { - "0": 0.34765591821489106, - "1": 0.41222158471469095, - "2": 0.39228952751507085 - }, - "micro_accuracy": { - "0": 0.6693181818181818, - "1": 0.7060546875, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9847698178419181, - "1": 0.9747919562993815, - "2": 0.8489799821290803 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "7c69eb32350c36036c3cbc913978e1b4d86814fab7aca02abc2e623d5caa59b0" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7585867036083059, - "macro_accuracy_known": 0.7941454553399453, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7919921875, - "micro_accuracy_known": 0.7919921875, - "macro_accuracy_all": 0.8637428744037139, - "macro_accuracy_known": 0.8637428744037139, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8657818683382639, - "macro_accuracy_known": 0.8657818683382639, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7585867036083059, - "1": 0.8637428744037139, - "2": 0.8657818683382639 - }, - "precision": { - "0": 0.567236502444115, - "1": 0.613953073953074, - "2": 0.4743418234737222 - }, - "recall": { - "0": 0.7585867036083059, - "1": 0.8637428744037139, - "2": 0.8657818683382639 - }, - "f1": { - "0": 0.4870909513964597, - "1": 0.5760179600759407, - "2": 0.4708581534147482 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.7919921875, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9771099035335918, - "1": 0.9761834884274827, - "2": 0.8752121942441846 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7941454553399453, - "1": 0.8637428744037139, - "2": 0.8657818683382639 - }, - "precision": { - "0": 0.59884126984127, - "1": 0.613953073953074, - "2": 0.4743418234737222 - }, - "recall": { - "0": 0.7941454553399453, - "1": 0.8637428744037139, - "2": 0.8657818683382639 - }, - "f1": { - "0": 0.5266146874592691, - "1": 0.5760179600759407, - "2": 0.4708581534147482 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.7919921875, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9794730609767626, - "1": 0.9761834884274827, - "2": 0.8752121942441846 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8040b861c98b7420cff6e4ebff7b448c2a5c00d65320c359fb38fff6f62179ef" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7138671875, - "micro_accuracy_known": 0.8306818181818182, - "macro_accuracy_all": 0.7776770904913086, - "macro_accuracy_known": 0.8141307041080887, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7998046875, - "micro_accuracy_known": 0.7998046875, - "macro_accuracy_all": 0.8792673769282165, - "macro_accuracy_known": 0.8792673769282165, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9404296875, - "micro_accuracy_known": 0.9404296875, - "macro_accuracy_all": 0.8708708169482133, - "macro_accuracy_known": 0.8708708169482133, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7776770904913086, - "1": 0.8792673769282165, - "2": 0.8708708169482133 - }, - "precision": { - "0": 0.590415742163054, - "1": 0.650045643974489, - "2": 0.4973752870924152 - }, - "recall": { - "0": 0.7776770904913086, - "1": 0.8792673769282165, - "2": 0.8708708169482133 - }, - "f1": { - "0": 0.5137268116645758, - "1": 0.6200753418406837, - "2": 0.49302752231219377 - }, - "micro_accuracy": { - "0": 0.7138671875, - "1": 0.7998046875, - "2": 0.9404296875 - }, - "theilU": { - "0": 0.9769243920224615, - "1": 0.9716682328833156, - "2": 0.8916132518181294 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8141307041080887, - "1": 0.8792673769282165, - "2": 0.8708708169482133 - }, - "precision": { - "0": 0.6220901957274138, - "1": 0.650045643974489, - "2": 0.4973752870924152 - }, - "recall": { - "0": 0.8141307041080887, - "1": 0.8792673769282165, - "2": 0.8708708169482133 - }, - "f1": { - "0": 0.5549843559208244, - "1": 0.6200753418406837, - "2": 0.49302752231219377 - }, - "micro_accuracy": { - "0": 0.8306818181818182, - "1": 0.7998046875, - "2": 0.9404296875 - }, - "theilU": { - "0": 0.9797253575646723, - "1": 0.9716682328833156, - "2": 0.8916132518181294 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "03f0bd588de80c8db66c27338868a74c02cfc918f45c24d9c8aa797bc8d5d535" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7585867036083059, - "macro_accuracy_known": 0.7941454553399453, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.791015625, - "micro_accuracy_known": 0.791015625, - "macro_accuracy_all": 0.8604095410703805, - "macro_accuracy_known": 0.8604095410703805, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.931640625, - "micro_accuracy_known": 0.931640625, - "macro_accuracy_all": 0.8659249607879862, - "macro_accuracy_known": 0.8659249607879862, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7585867036083059, - "1": 0.8604095410703805, - "2": 0.8659249607879862 - }, - "precision": { - "0": 0.5692060736331571, - "1": 0.6206487897732138, - "2": 0.45820095845285647 - }, - "recall": { - "0": 0.7585867036083059, - "1": 0.8604095410703805, - "2": 0.8659249607879862 - }, - "f1": { - "0": 0.4886275159119059, - "1": 0.5817604713640435, - "2": 0.460793233661065 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.791015625, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9757524503255911, - "1": 0.9747375835422437, - "2": 0.8731833404456658 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7941454553399453, - "1": 0.8604095410703805, - "2": 0.8659249607879862 - }, - "precision": { - "0": 0.6032283853712427, - "1": 0.6206487897732138, - "2": 0.45820095845285647 - }, - "recall": { - "0": 0.7941454553399453, - "1": 0.8604095410703805, - "2": 0.8659249607879862 - }, - "f1": { - "0": 0.5302093269641105, - "1": 0.5817604713640435, - "2": 0.460793233661065 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.791015625, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9790038137752247, - "1": 0.9747375835422437, - "2": 0.8731833404456658 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "19497f2c5753a18d4be51a7fb2358da283c24aae38618e106326b042512cf17c" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.708984375, - "micro_accuracy_known": 0.825, - "macro_accuracy_all": 0.7677268417350898, - "macro_accuracy_known": 0.8037140374414221, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.79296875, - "micro_accuracy_known": 0.79296875, - "macro_accuracy_all": 0.8628356704965101, - "macro_accuracy_known": 0.8628356704965101, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.94140625, - "micro_accuracy_known": 0.94140625, - "macro_accuracy_all": 0.8710858707116541, - "macro_accuracy_known": 0.8710858707116541, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7677268417350898, - "1": 0.8628356704965101, - "2": 0.8710858707116541 - }, - "precision": { - "0": 0.581095209951593, - "1": 0.6291773261081851, - "2": 0.463933700196154 - }, - "recall": { - "0": 0.7677268417350898, - "1": 0.8628356704965101, - "2": 0.8710858707116541 - }, - "f1": { - "0": 0.5020076771423831, - "1": 0.5957326229821618, - "2": 0.4599044372158569 - }, - "micro_accuracy": { - "0": 0.708984375, - "1": 0.79296875, - "2": 0.94140625 - }, - "theilU": { - "0": 0.9770549805608238, - "1": 0.9735372521774825, - "2": 0.8945993887983792 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8037140374414221, - "1": 0.8628356704965101, - "2": 0.8710858707116541 - }, - "precision": { - "0": 0.614249437337124, - "1": 0.6291773261081851, - "2": 0.463933700196154 - }, - "recall": { - "0": 0.8037140374414221, - "1": 0.8628356704965101, - "2": 0.8710858707116541 - }, - "f1": { - "0": 0.5436833258600394, - "1": 0.5957326229821618, - "2": 0.4599044372158569 - }, - "micro_accuracy": { - "0": 0.825, - "1": 0.79296875, - "2": 0.94140625 - }, - "theilU": { - "0": 0.9798780772711632, - "1": 0.9735372521774825, - "2": 0.8945993887983792 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c38b7cd1d71cd9048a7faa02388b983d79c7fdcb8690329645a4ad15538bd090" - } - } - }, - { - "backend": "onnx", - "profile": "none", - "views": 1, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5615234375, - "micro_accuracy_known": 0.6534090909090909, - "macro_accuracy_all": 0.6124655814463357, - "macro_accuracy_known": 0.6411749055766326, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.705078125, - "micro_accuracy_known": 0.705078125, - "macro_accuracy_all": 0.7689213961488385, - "macro_accuracy_known": 0.7689213961488385, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9033203125, - "micro_accuracy_known": 0.9033203125, - "macro_accuracy_all": 0.8510765951310436, - "macro_accuracy_known": 0.8510765951310436, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6124655814463357, - "1": 0.7689213961488385, - "2": 0.8510765951310436 - }, - "precision": { - "0": 0.3818871026671538, - "1": 0.45335004607264867, - "2": 0.45287608745625396 - }, - "recall": { - "0": 0.6124655814463357, - "1": 0.7689213961488385, - "2": 0.8510765951310436 - }, - "f1": { - "0": 0.2999727816322662, - "1": 0.39650834235685417, - "2": 0.46046448034482446 - }, - "micro_accuracy": { - "0": 0.5615234375, - "1": 0.705078125, - "2": 0.9033203125 - }, - "theilU": { - "0": 0.9798598274637447, - "1": 0.9784885366291307, - "2": 0.8328319989828772 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6411749055766326, - "1": 0.7689213961488385, - "2": 0.8510765951310436 - }, - "precision": { - "0": 0.40420677705044283, - "1": 0.45335004607264867, - "2": 0.45287608745625396 - }, - "recall": { - "0": 0.6411749055766326, - "1": 0.7689213961488385, - "2": 0.8510765951310436 - }, - "f1": { - "0": 0.32221844927677257, - "1": 0.39650834235685417, - "2": 0.46046448034482446 - }, - "micro_accuracy": { - "0": 0.6534090909090909, - "1": 0.705078125, - "2": 0.9033203125 - }, - "theilU": { - "0": 0.9867823418942343, - "1": 0.9784885366291307, - "2": 0.8328319989828772 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "efd2c6e3976ba3132f67f254c2d1797ec3b0b0f7014600225a0ce8a2ce2d246d" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6728515625, - "micro_accuracy_known": 0.7829545454545455, - "macro_accuracy_all": 0.7270001244961968, - "macro_accuracy_known": 0.7610782553319559, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8404997671606066, - "macro_accuracy_known": 0.8404997671606066, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8732648242676523, - "macro_accuracy_known": 0.8732648242676523, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7270001244961968, - "1": 0.8404997671606066, - "2": 0.8732648242676523 - }, - "precision": { - "0": 0.5208630076662863, - "1": 0.5732660538695022, - "2": 0.4684374652974096 - }, - "recall": { - "0": 0.7270001244961968, - "1": 0.8404997671606066, - "2": 0.8732648242676523 - }, - "f1": { - "0": 0.4458096602932375, - "1": 0.5333440123117217, - "2": 0.46980213876084703 - }, - "micro_accuracy": { - "0": 0.6728515625, - "1": 0.7783203125, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9753695714909438, - "1": 0.9761396110432748, - "2": 0.8670784143304765 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7610782553319559, - "1": 0.8404997671606066, - "2": 0.8732648242676523 - }, - "precision": { - "0": 0.5484990286536678, - "1": 0.5732660538695022, - "2": 0.4684374652974096 - }, - "recall": { - "0": 0.7610782553319559, - "1": 0.8404997671606066, - "2": 0.8732648242676523 - }, - "f1": { - "0": 0.48024706364743264, - "1": 0.5333440123117217, - "2": 0.46980213876084703 - }, - "micro_accuracy": { - "0": 0.7829545454545455, - "1": 0.7783203125, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9789932372980398, - "1": 0.9761396110432748, - "2": 0.8670784143304765 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f607b67e4a1a2b1f9903fe0b68b05dd192b77e0d2a5cf835cef500c916db0b15" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6884765625, - "micro_accuracy_known": 0.8011363636363636, - "macro_accuracy_all": 0.7392023947895904, - "macro_accuracy_known": 0.7738525070453525, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8587220718829114, - "macro_accuracy_known": 0.8587220718829114, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8755822798046276, - "macro_accuracy_known": 0.8755822798046276, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7392023947895904, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "precision": { - "0": 0.5431057487758518, - "1": 0.6018770821938243, - "2": 0.4692384071547976 - }, - "recall": { - "0": 0.7392023947895904, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "f1": { - "0": 0.4692961110833382, - "1": 0.5690866270248979, - "2": 0.47087201406950674 - }, - "micro_accuracy": { - "0": 0.6884765625, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9748705890430734, - "1": 0.9748839426636258, - "2": 0.8788292243597902 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7738525070453525, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "precision": { - "0": 0.5712006219200464, - "1": 0.6018770821938243, - "2": 0.4692384071547976 - }, - "recall": { - "0": 0.7738525070453525, - "1": 0.8587220718829114, - "2": 0.8755822798046276 - }, - "f1": { - "0": 0.5054737107485856, - "1": 0.5690866270248979, - "2": 0.47087201406950674 - }, - "micro_accuracy": { - "0": 0.8011363636363636, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9787503562761231, - "1": 0.9748839426636258, - "2": 0.8788292243597902 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "237615dbf364b249e8a7b6a86bf11145222de517a45bf0cc7c81cd92aada488b" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6728515625, - "micro_accuracy_known": 0.7829545454545455, - "macro_accuracy_all": 0.7270001244961968, - "macro_accuracy_known": 0.7610782553319559, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8404997671606066, - "macro_accuracy_known": 0.8404997671606066, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8720217086106892, - "macro_accuracy_known": 0.8720217086106892, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7270001244961968, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5185555396467448, - "1": 0.5757477250983746, - "2": 0.4381377787821555 - }, - "recall": { - "0": 0.7270001244961968, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.4437512694581586, - "1": 0.5355944089881425, - "2": 0.44453406406960844 - }, - "micro_accuracy": { - "0": 0.6728515625, - "1": 0.7783203125, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9747098621943763, - "1": 0.9746177473309448, - "2": 0.8643464250458442 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7610782553319559, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5440358866379273, - "1": 0.5757477250983746, - "2": 0.4381377787821555 - }, - "recall": { - "0": 0.7610782553319559, - "1": 0.8404997671606066, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.47629565858073747, - "1": 0.5355944089881425, - "2": 0.44453406406960844 - }, - "micro_accuracy": { - "0": 0.7829545454545455, - "1": 0.7783203125, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9801438149730277, - "1": 0.9746177473309448, - "2": 0.8643464250458442 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "2d35b767abaa7375dd31e88a41a2365521bcd6d66ca763640621b3c2c9760ca8" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6865234375, - "micro_accuracy_known": 0.7988636363636363, - "macro_accuracy_all": 0.7375440199968872, - "macro_accuracy_known": 0.7721163959342413, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.783203125, - "micro_accuracy_known": 0.783203125, - "macro_accuracy_all": 0.8464998496606891, - "macro_accuracy_known": 0.8464998496606891, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.875199379201428, - "macro_accuracy_known": 0.875199379201428, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7375440199968872, - "1": 0.8464998496606891, - "2": 0.875199379201428 - }, - "precision": { - "0": 0.5385664617868008, - "1": 0.5872092018109717, - "2": 0.4548694535217127 - }, - "recall": { - "0": 0.7375440199968872, - "1": 0.8464998496606891, - "2": 0.875199379201428 - }, - "f1": { - "0": 0.46422249654321474, - "1": 0.5503623331115033, - "2": 0.4554186696946595 - }, - "micro_accuracy": { - "0": 0.6865234375, - "1": 0.783203125, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.975147341925548, - "1": 0.976857362686223, - "2": 0.8829844004396705 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7721163959342413, - "1": 0.8464998496606891, - "2": 0.875199379201428 - }, - "precision": { - "0": 0.5660535681812278, - "1": 0.5872092018109717, - "2": 0.4548694535217127 - }, - "recall": { - "0": 0.7721163959342413, - "1": 0.8464998496606891, - "2": 0.875199379201428 - }, - "f1": { - "0": 0.4995513216437478, - "1": 0.5503623331115033, - "2": 0.4554186696946595 - }, - "micro_accuracy": { - "0": 0.7988636363636363, - "1": 0.783203125, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9794146764025654, - "1": 0.976857362686223, - "2": 0.8829844004396705 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "e09a4f220edb40d8a91104ae63ebe1379858d4065288669e6fefb5be254e445c" - } - } - }, - { - "backend": "onnx", - "profile": "hflip", - "views": 2, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5595703125, - "micro_accuracy_known": 0.6511363636363636, - "macro_accuracy_all": 0.6072953997836166, - "macro_accuracy_known": 0.6357623716484736, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7041015625, - "micro_accuracy_known": 0.7041015625, - "macro_accuracy_all": 0.772523051856739, - "macro_accuracy_known": 0.772523051856739, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9013671875, - "micro_accuracy_known": 0.9013671875, - "macro_accuracy_all": 0.8415025119082482, - "macro_accuracy_known": 0.8415025119082482, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6072953997836166, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "precision": { - "0": 0.3825172399722529, - "1": 0.46272798382173375, - "2": 0.4042781382146394 - }, - "recall": { - "0": 0.6072953997836166, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "f1": { - "0": 0.2983049968783267, - "1": 0.40642039760620385, - "2": 0.4099302569872461 - }, - "micro_accuracy": { - "0": 0.5595703125, - "1": 0.7041015625, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9805015616924377, - "1": 0.9777968970149564, - "2": 0.8402286825966764 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6357623716484736, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "precision": { - "0": 0.4083116488854194, - "1": 0.46272798382173375, - "2": 0.4042781382146394 - }, - "recall": { - "0": 0.6357623716484736, - "1": 0.772523051856739, - "2": 0.8415025119082482 - }, - "f1": { - "0": 0.3228001380097893, - "1": 0.40642039760620385, - "2": 0.4099302569872461 - }, - "micro_accuracy": { - "0": 0.6511363636363636, - "1": 0.7041015625, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9861494891358263, - "1": 0.9777968970149564, - "2": 0.8402286825966764 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5011cb46c572c0ea1ce30d60a5aa5ddb994887c80e6704437796510acd55fdb4" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7239714356466123, - "macro_accuracy_known": 0.7579075966925473, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.779296875, - "micro_accuracy_known": 0.779296875, - "macro_accuracy_all": 0.8460648058835403, - "macro_accuracy_known": 0.8460648058835403, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8684376388563206, - "macro_accuracy_known": 0.8684376388563206, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7239714356466123, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "precision": { - "0": 0.5312082620222155, - "1": 0.5789691710292569, - "2": 0.4677678477278932 - }, - "recall": { - "0": 0.7239714356466123, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "f1": { - "0": 0.4486216071411806, - "1": 0.5389382268841362, - "2": 0.4680864397151782 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.779296875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9736670675959799, - "1": 0.9760534959312177, - "2": 0.8610977665331919 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7579075966925473, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "precision": { - "0": 0.5558605081961483, - "1": 0.5789691710292569, - "2": 0.4677678477278932 - }, - "recall": { - "0": 0.7579075966925473, - "1": 0.8460648058835403, - "2": 0.8684376388563206 - }, - "f1": { - "0": 0.48038194156682384, - "1": 0.5389382268841362, - "2": 0.4680864397151782 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.779296875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9771410797584144, - "1": 0.9760534959312177, - "2": 0.8610977665331919 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "82e5c9cf55640f612650135bb38f4b8edea95a5e7713292a62f2f94d191d0d94" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6953125, - "micro_accuracy_known": 0.8090909090909091, - "macro_accuracy_all": 0.7490054272359848, - "macro_accuracy_known": 0.7841150566376717, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7900390625, - "micro_accuracy_known": 0.7900390625, - "macro_accuracy_all": 0.8663721768751217, - "macro_accuracy_known": 0.8663721768751217, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8738845020040061, - "macro_accuracy_known": 0.8738845020040061, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7490054272359848, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "precision": { - "0": 0.5671628254374734, - "1": 0.6223680640347307, - "2": 0.48996999380632916 - }, - "recall": { - "0": 0.7490054272359848, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "f1": { - "0": 0.4862885097858432, - "1": 0.5895253154735276, - "2": 0.48945960448631837 - }, - "micro_accuracy": { - "0": 0.6953125, - "1": 0.7900390625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9737375400290177, - "1": 0.9745437130474148, - "2": 0.8705705052200974 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7841150566376717, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "precision": { - "0": 0.5927627927627929, - "1": 0.6223680640347307, - "2": 0.48996999380632916 - }, - "recall": { - "0": 0.7841150566376717, - "1": 0.8663721768751217, - "2": 0.8738845020040061 - }, - "f1": { - "0": 0.5209217766298131, - "1": 0.5895253154735276, - "2": 0.48945960448631837 - }, - "micro_accuracy": { - "0": 0.8090909090909091, - "1": 0.7900390625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9772388639732228, - "1": 0.9745437130474148, - "2": 0.8705705052200974 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c2edac6edc5b463015e0a8f407d7d0271d7bfb7d195e6e9f9a43990b3f717ee0" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7239714356466123, - "macro_accuracy_known": 0.7579075966925473, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7783203125, - "micro_accuracy_known": 0.7783203125, - "macro_accuracy_all": 0.8453240651427995, - "macro_accuracy_known": 0.8453240651427995, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9248046875, - "micro_accuracy_known": 0.9248046875, - "macro_accuracy_all": 0.8667644156724759, - "macro_accuracy_known": 0.8667644156724759, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7239714356466123, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "precision": { - "0": 0.5288020468713538, - "1": 0.5838835046627255, - "2": 0.4369691898770908 - }, - "recall": { - "0": 0.7239714356466123, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "f1": { - "0": 0.44653405260740103, - "1": 0.5432633692427185, - "2": 0.4422047830546245 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.7783203125, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9727774718765091, - "1": 0.9742803175973828, - "2": 0.857522102743873 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7579075966925473, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "precision": { - "0": 0.5531856364330592, - "1": 0.5838835046627255, - "2": 0.4369691898770908 - }, - "recall": { - "0": 0.7579075966925473, - "1": 0.8453240651427995, - "2": 0.8667644156724759 - }, - "f1": { - "0": 0.4779513860296556, - "1": 0.5432633692427185, - "2": 0.4422047830546245 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.7783203125, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9779509921966772, - "1": 0.9742803175973828, - "2": 0.857522102743873 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "39c9078fe6a24acf541564079008fd90b26dc15391aa1cd0b99d6482b625a69d" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6923828125, - "micro_accuracy_known": 0.8056818181818182, - "macro_accuracy_all": 0.7424903834075083, - "macro_accuracy_known": 0.7772946201297352, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8576420181449631, - "macro_accuracy_known": 0.8576420181449631, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8707709909948831, - "macro_accuracy_known": 0.8707709909948831, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7424903834075083, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "precision": { - "0": 0.5567736185383245, - "1": 0.6091923159796463, - "2": 0.4724244574193488 - }, - "recall": { - "0": 0.7424903834075083, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "f1": { - "0": 0.47629792011661193, - "1": 0.5737266608760239, - "2": 0.47169639950524317 - }, - "micro_accuracy": { - "0": 0.6923828125, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9739043442268694, - "1": 0.9759289974025427, - "2": 0.871496008905084 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7772946201297352, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "precision": { - "0": 0.5815020710704165, - "1": 0.6091923159796463, - "2": 0.4724244574193488 - }, - "recall": { - "0": 0.7772946201297352, - "1": 0.8576420181449631, - "2": 0.8707709909948831 - }, - "f1": { - "0": 0.5096837684736103, - "1": 0.5737266608760239, - "2": 0.47169639950524317 - }, - "micro_accuracy": { - "0": 0.8056818181818182, - "1": 0.787109375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9777746021348526, - "1": 0.9759289974025427, - "2": 0.871496008905084 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "91308603d84653d3a4c537a2a1f39eac075e876c884b113b2ae53d671d6ccf23" - } - } - }, - { - "backend": "onnx", - "profile": "five_crop", - "views": 5, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.529296875, - "micro_accuracy_known": 0.615909090909091, - "macro_accuracy_all": 0.5813643479000902, - "macro_accuracy_known": 0.608615801707907, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.66015625, - "macro_accuracy_all": 0.7256026606965782, - "macro_accuracy_known": 0.7256026606965782, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.8701171875, - "micro_accuracy_known": 0.8701171875, - "macro_accuracy_all": 0.8147572941844702, - "macro_accuracy_known": 0.8147572941844702, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.5813643479000902, - "1": 0.7256026606965782, - "2": 0.8147572941844702 - }, - "precision": { - "0": 0.35392462586707196, - "1": 0.4075918253771951, - "2": 0.3690999637281102 - }, - "recall": { - "0": 0.5813643479000902, - "1": 0.7256026606965782, - "2": 0.8147572941844702 - }, - "f1": { - "0": 0.2713698750105877, - "1": 0.349089690168233, - "2": 0.3752975852182212 - }, - "micro_accuracy": { - "0": 0.529296875, - "1": 0.66015625, - "2": 0.8701171875 - }, - "theilU": { - "0": 0.9748236916276373, - "1": 0.9698080417927888, - "2": 0.7928595346755765 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.608615801707907, - "1": 0.7256026606965782, - "2": 0.8147572941844702 - }, - "precision": { - "0": 0.3756394839728173, - "1": 0.4075918253771951, - "2": 0.3690999637281102 - }, - "recall": { - "0": 0.608615801707907, - "1": 0.7256026606965782, - "2": 0.8147572941844702 - }, - "f1": { - "0": 0.29133592733723945, - "1": 0.349089690168233, - "2": 0.3752975852182212 - }, - "micro_accuracy": { - "0": 0.615909090909091, - "1": 0.66015625, - "2": 0.8701171875 - }, - "theilU": { - "0": 0.9834727095917797, - "1": 0.9698080417927888, - "2": 0.7928595346755765 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "fc0cf8941cc0ed2c8d1cd3c1db0f43df2a0998b9da4664375e819d9ea439f034" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6494140625, - "micro_accuracy_known": 0.7556818181818182, - "macro_accuracy_all": 0.6864679547220788, - "macro_accuracy_known": 0.7186461400996763, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7509765625, - "micro_accuracy_known": 0.7509765625, - "macro_accuracy_all": 0.8111129589394724, - "macro_accuracy_known": 0.8111129589394724, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.91015625, - "micro_accuracy_known": 0.91015625, - "macro_accuracy_all": 0.8502301735024017, - "macro_accuracy_known": 0.8502301735024017, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6864679547220788, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "precision": { - "0": 0.4694282106782106, - "1": 0.5318897934798826, - "2": 0.46501598559523544 - }, - "recall": { - "0": 0.6864679547220788, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "f1": { - "0": 0.38962188632761535, - "1": 0.4798392220386532, - "2": 0.47312600706570296 - }, - "micro_accuracy": { - "0": 0.6494140625, - "1": 0.7509765625, - "2": 0.91015625 - }, - "theilU": { - "0": 0.9751197291793138, - "1": 0.9689413035535809, - "2": 0.8287543981297179 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7186461400996763, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "precision": { - "0": 0.49891792180130834, - "1": 0.5318897934798826, - "2": 0.46501598559523544 - }, - "recall": { - "0": 0.7186461400996763, - "1": 0.8111129589394724, - "2": 0.8502301735024017 - }, - "f1": { - "0": 0.4213423759075413, - "1": 0.4798392220386532, - "2": 0.47312600706570296 - }, - "micro_accuracy": { - "0": 0.7556818181818182, - "1": 0.7509765625, - "2": 0.91015625 - }, - "theilU": { - "0": 0.9777247222607772, - "1": 0.9689413035535809, - "2": 0.8287543981297179 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "9ea4cd4e65cd8c683840dc22b3b6a661a114c7564ece27571c18ec6f886a2eff" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6650390625, - "micro_accuracy_known": 0.7738636363636363, - "macro_accuracy_all": 0.6996728719136418, - "macro_accuracy_known": 0.7324700377845937, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.763671875, - "micro_accuracy_known": 0.763671875, - "macro_accuracy_all": 0.8276382349281632, - "macro_accuracy_known": 0.8276382349281632, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.912109375, - "micro_accuracy_known": 0.912109375, - "macro_accuracy_all": 0.8546508587363212, - "macro_accuracy_known": 0.8546508587363212, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6996728719136418, - "1": 0.8276382349281632, - "2": 0.8546508587363212 - }, - "precision": { - "0": 0.49111882013952074, - "1": 0.5582610950725357, - "2": 0.47864060684894144 - }, - "recall": { - "0": 0.6996728719136418, - "1": 0.8276382349281632, - "2": 0.8546508587363212 - }, - "f1": { - "0": 0.41368082017093166, - "1": 0.5120544331452003, - "2": 0.48353013053256666 - }, - "micro_accuracy": { - "0": 0.6650390625, - "1": 0.763671875, - "2": 0.912109375 - }, - "theilU": { - "0": 0.9743396036576268, - "1": 0.9714424257258611, - "2": 0.8399172279861942 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7324700377845937, - "1": 0.8276382349281632, - "2": 0.8546508587363212 - }, - "precision": { - "0": 0.5147725480920845, - "1": 0.5582610950725357, - "2": 0.47864060684894144 - }, - "recall": { - "0": 0.7324700377845937, - "1": 0.8276382349281632, - "2": 0.8546508587363212 - }, - "f1": { - "0": 0.4421529123625723, - "1": 0.5120544331452003, - "2": 0.48353013053256666 - }, - "micro_accuracy": { - "0": 0.7738636363636363, - "1": 0.763671875, - "2": 0.912109375 - }, - "theilU": { - "0": 0.9780483771504945, - "1": 0.9714424257258611, - "2": 0.8399172279861942 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "9ede1744f19a908ecc8ede34eff06cd3d72ae0df702a3b3744eb6c7c30a2649d" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.646484375, - "micro_accuracy_known": 0.7522727272727273, - "macro_accuracy_all": 0.6839643850543301, - "macro_accuracy_known": 0.7160252156037519, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7470703125, - "micro_accuracy_known": 0.7470703125, - "macro_accuracy_all": 0.8075779954045089, - "macro_accuracy_known": 0.8075779954045089, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9052734375, - "micro_accuracy_known": 0.9052734375, - "macro_accuracy_all": 0.8464483991172489, - "macro_accuracy_known": 0.8464483991172489, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6839643850543301, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "precision": { - "0": 0.46588800172637024, - "1": 0.5242695957669641, - "2": 0.45979108437103006 - }, - "recall": { - "0": 0.6839643850543301, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "f1": { - "0": 0.3863959918565987, - "1": 0.4722990514074956, - "2": 0.4659878669713519 - }, - "micro_accuracy": { - "0": 0.646484375, - "1": 0.7470703125, - "2": 0.9052734375 - }, - "theilU": { - "0": 0.9746054246842587, - "1": 0.9684000426806025, - "2": 0.8222229053522426 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7160252156037519, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "precision": { - "0": 0.4952058689717924, - "1": 0.5242695957669641, - "2": 0.45979108437103006 - }, - "recall": { - "0": 0.7160252156037519, - "1": 0.8075779954045089, - "2": 0.8464483991172489 - }, - "f1": { - "0": 0.4176726587402326, - "1": 0.4722990514074956, - "2": 0.4659878669713519 - }, - "micro_accuracy": { - "0": 0.7522727272727273, - "1": 0.7470703125, - "2": 0.9052734375 - }, - "theilU": { - "0": 0.9776412209536774, - "1": 0.9684000426806025, - "2": 0.8222229053522426 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "30ab0d74ef521fc7e68119c0299c2a5fe7359de7deb0cc3a43d22d5199fd5c6b" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6611328125, - "micro_accuracy_known": 0.7693181818181818, - "macro_accuracy_all": 0.6956453902742199, - "macro_accuracy_known": 0.728253767943324, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7607421875, - "micro_accuracy_known": 0.7607421875, - "macro_accuracy_all": 0.8246852819752103, - "macro_accuracy_known": 0.8246852819752103, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9111328125, - "micro_accuracy_known": 0.9111328125, - "macro_accuracy_all": 0.8490705487907292, - "macro_accuracy_known": 0.8490705487907292, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6956453902742199, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "precision": { - "0": 0.4879724111866969, - "1": 0.5611634388877977, - "2": 0.4615299319959455 - }, - "recall": { - "0": 0.6956453902742199, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "f1": { - "0": 0.40906296151598676, - "1": 0.5122306689750562, - "2": 0.4650358026058973 - }, - "micro_accuracy": { - "0": 0.6611328125, - "1": 0.7607421875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9739383567747754, - "1": 0.970300140083669, - "2": 0.8375842132984603 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.728253767943324, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "precision": { - "0": 0.511423463774949, - "1": 0.5611634388877977, - "2": 0.4615299319959455 - }, - "recall": { - "0": 0.728253767943324, - "1": 0.8246852819752103, - "2": 0.8490705487907292 - }, - "f1": { - "0": 0.4370672141449006, - "1": 0.5122306689750562, - "2": 0.4650358026058973 - }, - "micro_accuracy": { - "0": 0.7693181818181818, - "1": 0.7607421875, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9775791299489568, - "1": 0.970300140083669, - "2": 0.8375842132984603 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "51af7ed2f44539f298439e90c973f5a0efe767e27ddb223a539e737b61a5c2da" - } - } - }, - { - "backend": "onnx", - "profile": "ten_crop", - "views": 10, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.53125, - "micro_accuracy_known": 0.6181818181818182, - "macro_accuracy_all": 0.60343863844453, - "macro_accuracy_known": 0.6317248246216174, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.66796875, - "micro_accuracy_known": 0.66796875, - "macro_accuracy_all": 0.7426064804062802, - "macro_accuracy_known": 0.7426064804062802, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.876953125, - "micro_accuracy_known": 0.876953125, - "macro_accuracy_all": 0.8185086069877298, - "macro_accuracy_known": 0.8185086069877298, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.60343863844453, - "1": 0.7426064804062802, - "2": 0.8185086069877298 - }, - "precision": { - "0": 0.36610838960236547, - "1": 0.41887021708450267, - "2": 0.3393127537960845 - }, - "recall": { - "0": 0.60343863844453, - "1": 0.7426064804062802, - "2": 0.8185086069877298 - }, - "f1": { - "0": 0.28446650620972935, - "1": 0.36216024955193876, - "2": 0.3451490109373015 - }, - "micro_accuracy": { - "0": 0.53125, - "1": 0.66796875, - "2": 0.876953125 - }, - "theilU": { - "0": 0.9760683363716146, - "1": 0.9745672461273452, - "2": 0.817177110459985 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6317248246216174, - "1": 0.7426064804062802, - "2": 0.8185086069877298 - }, - "precision": { - "0": 0.387313828303676, - "1": 0.41887021708450267, - "2": 0.3393127537960845 - }, - "recall": { - "0": 0.6317248246216174, - "1": 0.7426064804062802, - "2": 0.8185086069877298 - }, - "f1": { - "0": 0.30523727617188695, - "1": 0.36216024955193876, - "2": 0.3451490109373015 - }, - "micro_accuracy": { - "0": 0.6181818181818182, - "1": 0.66796875, - "2": 0.876953125 - }, - "theilU": { - "0": 0.9848969941570566, - "1": 0.9745672461273452, - "2": 0.817177110459985 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "3502546f8e0d9ad37b3f1c735aa780b4f1b10ae8c3dcec3a8bb03efb0aa063e7" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.7681818181818182, - "macro_accuracy_all": 0.7129037238129932, - "macro_accuracy_known": 0.7463210858667272, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7529296875, - "micro_accuracy_known": 0.7529296875, - "macro_accuracy_all": 0.818684190268236, - "macro_accuracy_known": 0.818684190268236, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.908203125, - "micro_accuracy_known": 0.908203125, - "macro_accuracy_all": 0.8567603412359016, - "macro_accuracy_known": 0.8567603412359016, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7129037238129932, - "1": 0.818684190268236, - "2": 0.8567603412359016 - }, - "precision": { - "0": 0.49802447294707364, - "1": 0.5448076426734962, - "2": 0.44187827556880604 - }, - "recall": { - "0": 0.7129037238129932, - "1": 0.818684190268236, - "2": 0.8567603412359016 - }, - "f1": { - "0": 0.41871198362356904, - "1": 0.4923060359796284, - "2": 0.4457707565639457 - }, - "micro_accuracy": { - "0": 0.66015625, - "1": 0.7529296875, - "2": 0.908203125 - }, - "theilU": { - "0": 0.9762217677708296, - "1": 0.9717478802038781, - "2": 0.8378872795695889 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7463210858667272, - "1": 0.818684190268236, - "2": 0.8567603412359016 - }, - "precision": { - "0": 0.5280518070420351, - "1": 0.5448076426734962, - "2": 0.44187827556880604 - }, - "recall": { - "0": 0.7463210858667272, - "1": 0.818684190268236, - "2": 0.8567603412359016 - }, - "f1": { - "0": 0.45252563153108777, - "1": 0.4923060359796284, - "2": 0.4457707565639457 - }, - "micro_accuracy": { - "0": 0.7681818181818182, - "1": 0.7529296875, - "2": 0.908203125 - }, - "theilU": { - "0": 0.9786917824792701, - "1": 0.9717478802038781, - "2": 0.8378872795695889 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "42c1ac9b5e1d829c02774c703fa6361527dd355ff700f61ea60d43bd1190db16" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6796875, - "micro_accuracy_known": 0.7909090909090909, - "macro_accuracy_all": 0.7325734492172041, - "macro_accuracy_known": 0.7669128296492606, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.763671875, - "micro_accuracy_known": 0.763671875, - "macro_accuracy_all": 0.8333510604351063, - "macro_accuracy_known": 0.8333510604351063, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.916015625, - "micro_accuracy_known": 0.916015625, - "macro_accuracy_all": 0.8625940459222917, - "macro_accuracy_known": 0.8625940459222917, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7325734492172041, - "1": 0.8333510604351063, - "2": 0.8625940459222917 - }, - "precision": { - "0": 0.5238715681712424, - "1": 0.5620380443473664, - "2": 0.4699715742878861 - }, - "recall": { - "0": 0.7325734492172041, - "1": 0.8333510604351063, - "2": 0.8625940459222917 - }, - "f1": { - "0": 0.4477546600197871, - "1": 0.518772876751597, - "2": 0.471561161797031 - }, - "micro_accuracy": { - "0": 0.6796875, - "1": 0.763671875, - "2": 0.916015625 - }, - "theilU": { - "0": 0.9752117885145523, - "1": 0.970636789125353, - "2": 0.849650032544993 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7669128296492606, - "1": 0.8333510604351063, - "2": 0.8625940459222917 - }, - "precision": { - "0": 0.5475627413127413, - "1": 0.5620380443473664, - "2": 0.4699715742878861 - }, - "recall": { - "0": 0.7669128296492606, - "1": 0.8333510604351063, - "2": 0.8625940459222917 - }, - "f1": { - "0": 0.4780653249674853, - "1": 0.518772876751597, - "2": 0.471561161797031 - }, - "micro_accuracy": { - "0": 0.7909090909090909, - "1": 0.763671875, - "2": 0.916015625 - }, - "theilU": { - "0": 0.979568185877625, - "1": 0.970636789125353, - "2": 0.849650032544993 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "dcc8cf3fbcd17eced477e6b096083bad54a76d715d7ee8ba61400c6ef80bbe0b" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.65625, - "micro_accuracy_known": 0.7636363636363637, - "macro_accuracy_all": 0.7108419605572, - "macro_accuracy_known": 0.7441626774583187, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.751953125, - "micro_accuracy_known": 0.751953125, - "macro_accuracy_all": 0.8179484545325003, - "macro_accuracy_known": 0.8179484545325003, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90625, - "micro_accuracy_known": 0.90625, - "macro_accuracy_all": 0.8558718355080167, - "macro_accuracy_known": 0.8558718355080167, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7108419605572, - "1": 0.8179484545325003, - "2": 0.8558718355080167 - }, - "precision": { - "0": 0.4975161669606114, - "1": 0.5487093518726172, - "2": 0.41908174730608055 - }, - "recall": { - "0": 0.7108419605572, - "1": 0.8179484545325003, - "2": 0.8558718355080167 - }, - "f1": { - "0": 0.4167562407465394, - "1": 0.4940149311212579, - "2": 0.4235722356793009 - }, - "micro_accuracy": { - "0": 0.65625, - "1": 0.751953125, - "2": 0.90625 - }, - "theilU": { - "0": 0.9751258477609321, - "1": 0.971479645064188, - "2": 0.8394770876415069 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7441626774583187, - "1": 0.8179484545325003, - "2": 0.8558718355080167 - }, - "precision": { - "0": 0.5257962275819419, - "1": 0.5487093518726172, - "2": 0.41908174730608055 - }, - "recall": { - "0": 0.7441626774583187, - "1": 0.8179484545325003, - "2": 0.8558718355080167 - }, - "f1": { - "0": 0.44971174461039926, - "1": 0.4940149311212579, - "2": 0.4235722356793009 - }, - "micro_accuracy": { - "0": 0.7636363636363637, - "1": 0.751953125, - "2": 0.90625 - }, - "theilU": { - "0": 0.9788373747910906, - "1": 0.971479645064188, - "2": 0.8394770876415069 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "37c890da62315c60b58140cc632eb8a37978e0939a136a951d149d3ccd6b73b9" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7288603881592884, - "macro_accuracy_known": 0.7630257188542551, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.759765625, - "micro_accuracy_known": 0.759765625, - "macro_accuracy_all": 0.8302264358104817, - "macro_accuracy_known": 0.8302264358104817, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9140625, - "micro_accuracy_known": 0.9140625, - "macro_accuracy_all": 0.860943275272093, - "macro_accuracy_known": 0.860943275272093, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7288603881592884, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "precision": { - "0": 0.5171336701883326, - "1": 0.5662027452452983, - "2": 0.437878914755703 - }, - "recall": { - "0": 0.7288603881592884, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "f1": { - "0": 0.4401434197666639, - "1": 0.5189871549427112, - "2": 0.439343575066404 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.759765625, - "2": 0.9140625 - }, - "theilU": { - "0": 0.9756960268876012, - "1": 0.9706951338529712, - "2": 0.850375057622715 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7630257188542551, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "precision": { - "0": 0.5438878235858101, - "1": 0.5662027452452983, - "2": 0.437878914755703 - }, - "recall": { - "0": 0.7630257188542551, - "1": 0.8302264358104817, - "2": 0.860943275272093 - }, - "f1": { - "0": 0.4724513575658599, - "1": 0.5189871549427112, - "2": 0.439343575066404 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.759765625, - "2": 0.9140625 - }, - "theilU": { - "0": 0.9790989386760871, - "1": 0.9706951338529712, - "2": 0.850375057622715 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5ba81a12e0b26663034a3f333cdfa154be94ce1807c68bf0578d437693dabcef" - } - } - }, - { - "backend": "onnx", - "profile": "d4", - "views": 8, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.57421875, - "micro_accuracy_known": 0.6681818181818182, - "macro_accuracy_all": 0.6402713544897362, - "macro_accuracy_known": 0.6702840742314425, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.70703125, - "micro_accuracy_known": 0.70703125, - "macro_accuracy_all": 0.7726070710403958, - "macro_accuracy_known": 0.7726070710403958, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9072265625, - "micro_accuracy_known": 0.9072265625, - "macro_accuracy_all": 0.8468859199526105, - "macro_accuracy_known": 0.8468859199526105, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6402713544897362, - "1": 0.7726070710403958, - "2": 0.8468859199526105 - }, - "precision": { - "0": 0.4045381076712669, - "1": 0.47196183938205216, - "2": 0.3912983538152273 - }, - "recall": { - "0": 0.6402713544897362, - "1": 0.7726070710403958, - "2": 0.8468859199526105 - }, - "f1": { - "0": 0.32103123644355497, - "1": 0.41388511552455187, - "2": 0.3916713142546539 - }, - "micro_accuracy": { - "0": 0.57421875, - "1": 0.70703125, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9792061800168498, - "1": 0.9748618168983905, - "2": 0.8497734509263734 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6702840742314425, - "1": 0.7726070710403958, - "2": 0.8468859199526105 - }, - "precision": { - "0": 0.43097216726025595, - "1": 0.47196183938205216, - "2": 0.3912983538152273 - }, - "recall": { - "0": 0.6702840742314425, - "1": 0.7726070710403958, - "2": 0.8468859199526105 - }, - "f1": { - "0": 0.3473034083446149, - "1": 0.41388511552455187, - "2": 0.3916713142546539 - }, - "micro_accuracy": { - "0": 0.6681818181818182, - "1": 0.70703125, - "2": 0.9072265625 - }, - "theilU": { - "0": 0.9846412358771054, - "1": 0.9748618168983905, - "2": 0.8497734509263734 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5c99fe4670d831e1c63faca7d59e394137b74b898a7eeed02c661a566dd54fff" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7585867036083059, - "macro_accuracy_known": 0.7941454553399453, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.791015625, - "micro_accuracy_known": 0.791015625, - "macro_accuracy_all": 0.8634864641473037, - "macro_accuracy_known": 0.8634864641473037, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8657818683382639, - "macro_accuracy_known": 0.8657818683382639, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7585867036083059, - "1": 0.8634864641473037, - "2": 0.8657818683382639 - }, - "precision": { - "0": 0.567236502444115, - "1": 0.6131954981954981, - "2": 0.4743418234737222 - }, - "recall": { - "0": 0.7585867036083059, - "1": 0.8634864641473037, - "2": 0.8657818683382639 - }, - "f1": { - "0": 0.4870909513964596, - "1": 0.5755195886061406, - "2": 0.4708581534147483 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.791015625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9771099035335918, - "1": 0.9755592502306136, - "2": 0.8752121942441846 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7941454553399453, - "1": 0.8634864641473037, - "2": 0.8657818683382639 - }, - "precision": { - "0": 0.59884126984127, - "1": 0.6131954981954981, - "2": 0.4743418234737222 - }, - "recall": { - "0": 0.7941454553399453, - "1": 0.8634864641473037, - "2": 0.8657818683382639 - }, - "f1": { - "0": 0.5266146874592693, - "1": 0.5755195886061406, - "2": 0.4708581534147483 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.791015625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9794730609767626, - "1": 0.9755592502306136, - "2": 0.8752121942441846 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c5ec47de6ecc1c3a3832c6e018e5b717d82f9955c4058702827c378e215441c2" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7138671875, - "micro_accuracy_known": 0.8306818181818182, - "macro_accuracy_all": 0.7776770904913086, - "macro_accuracy_known": 0.8141307041080887, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7998046875, - "micro_accuracy_known": 0.7998046875, - "macro_accuracy_all": 0.8792673769282165, - "macro_accuracy_known": 0.8792673769282165, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.94140625, - "micro_accuracy_known": 0.94140625, - "macro_accuracy_all": 0.8731696675229259, - "macro_accuracy_known": 0.8731696675229259, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7776770904913086, - "1": 0.8792673769282165, - "2": 0.8731696675229259 - }, - "precision": { - "0": 0.590415742163054, - "1": 0.6508547054631623, - "2": 0.49756904526489676 - }, - "recall": { - "0": 0.7776770904913086, - "1": 0.8792673769282165, - "2": 0.8731696675229259 - }, - "f1": { - "0": 0.5137268116645758, - "1": 0.620508242273584, - "2": 0.4939041025478087 - }, - "micro_accuracy": { - "0": 0.7138671875, - "1": 0.7998046875, - "2": 0.94140625 - }, - "theilU": { - "0": 0.9769243920224615, - "1": 0.9719723599701269, - "2": 0.8942293128553218 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8141307041080887, - "1": 0.8792673769282165, - "2": 0.8731696675229259 - }, - "precision": { - "0": 0.6220901957274138, - "1": 0.6508547054631623, - "2": 0.49756904526489676 - }, - "recall": { - "0": 0.8141307041080887, - "1": 0.8792673769282165, - "2": 0.8731696675229259 - }, - "f1": { - "0": 0.5549843559208245, - "1": 0.620508242273584, - "2": 0.4939041025478087 - }, - "micro_accuracy": { - "0": 0.8306818181818182, - "1": 0.7998046875, - "2": 0.94140625 - }, - "theilU": { - "0": 0.9797253575646723, - "1": 0.9719723599701269, - "2": 0.8942293128553218 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "2305fcf78da614e2ac7ec39b55c155c6767030d132ce2715f6196a90247cda1d" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7585867036083059, - "macro_accuracy_known": 0.7941454553399453, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7900390625, - "micro_accuracy_known": 0.7900390625, - "macro_accuracy_all": 0.8601531308139704, - "macro_accuracy_known": 0.8601531308139704, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.931640625, - "micro_accuracy_known": 0.931640625, - "macro_accuracy_all": 0.8659249607879862, - "macro_accuracy_known": 0.8659249607879862, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7585867036083059, - "1": 0.8601531308139704, - "2": 0.8659249607879862 - }, - "precision": { - "0": 0.5692060736331571, - "1": 0.6198807406180677, - "2": 0.45820095845285647 - }, - "recall": { - "0": 0.7585867036083059, - "1": 0.8601531308139704, - "2": 0.8659249607879862 - }, - "f1": { - "0": 0.48862751591190584, - "1": 0.5812553651446515, - "2": 0.4607932336610651 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.7900390625, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9757524503255911, - "1": 0.9741133453453746, - "2": 0.8731833404456658 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7941454553399453, - "1": 0.8601531308139704, - "2": 0.8659249607879862 - }, - "precision": { - "0": 0.6032283853712427, - "1": 0.6198807406180677, - "2": 0.45820095845285647 - }, - "recall": { - "0": 0.7941454553399453, - "1": 0.8601531308139704, - "2": 0.8659249607879862 - }, - "f1": { - "0": 0.5302093269641107, - "1": 0.5812553651446515, - "2": 0.4607932336610651 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.7900390625, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9790038137752247, - "1": 0.9741133453453746, - "2": 0.8731833404456658 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c1908214e3139e3238c21d0f916ed5b122c01ccb3528b747bdf25b28ac082645" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.708984375, - "micro_accuracy_known": 0.825, - "macro_accuracy_all": 0.7677268417350898, - "macro_accuracy_known": 0.8037140374414221, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.79296875, - "micro_accuracy_known": 0.79296875, - "macro_accuracy_all": 0.8628356704965101, - "macro_accuracy_known": 0.8628356704965101, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9423828125, - "micro_accuracy_known": 0.9423828125, - "macro_accuracy_all": 0.8766414262672095, - "macro_accuracy_known": 0.8766414262672095, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7677268417350898, - "1": 0.8628356704965101, - "2": 0.8766414262672095 - }, - "precision": { - "0": 0.5831631644354065, - "1": 0.6321592091703092, - "2": 0.464109860492182 - }, - "recall": { - "0": 0.7677268417350898, - "1": 0.8628356704965101, - "2": 0.8766414262672095 - }, - "f1": { - "0": 0.5036270567460682, - "1": 0.598503472391381, - "2": 0.46168764250534716 - }, - "micro_accuracy": { - "0": 0.708984375, - "1": 0.79296875, - "2": 0.9423828125 - }, - "theilU": { - "0": 0.9765292396775955, - "1": 0.9729595091678918, - "2": 0.897968466499177 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8037140374414221, - "1": 0.8628356704965101, - "2": 0.8766414262672095 - }, - "precision": { - "0": 0.6165499970275252, - "1": 0.6321592091703092, - "2": 0.464109860492182 - }, - "recall": { - "0": 0.8037140374414221, - "1": 0.8628356704965101, - "2": 0.8766414262672095 - }, - "f1": { - "0": 0.545577692849099, - "1": 0.598503472391381, - "2": 0.46168764250534716 - }, - "micro_accuracy": { - "0": 0.825, - "1": 0.79296875, - "2": 0.9423828125 - }, - "theilU": { - "0": 0.9792632377578049, - "1": 0.9729595091678918, - "2": 0.897968466499177 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f218a2e185a66df60ccd1443f4f3355167c1e6c7193ddb8a421de1709c8a28a9" - } - } - }, - { - "backend": "torch", - "profile": "light_noise", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.55078125, - "micro_accuracy_known": 0.6409090909090909, - "macro_accuracy_all": 0.5982800921233757, - "macro_accuracy_known": 0.6263244714416589, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.69140625, - "micro_accuracy_known": 0.69140625, - "macro_accuracy_all": 0.7580807482301855, - "macro_accuracy_known": 0.7580807482301855, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.8984375, - "micro_accuracy_known": 0.8984375, - "macro_accuracy_all": 0.8051683136261664, - "macro_accuracy_known": 0.8051683136261664, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.5982800921233757, - "1": 0.7580807482301855, - "2": 0.8051683136261664 - }, - "precision": { - "0": 0.37136511965192165, - "1": 0.4466613507429834, - "2": 0.41728656897993305 - }, - "recall": { - "0": 0.5982800921233757, - "1": 0.7580807482301855, - "2": 0.8051683136261664 - }, - "f1": { - "0": 0.28936644147558, - "1": 0.389230601534748, - "2": 0.41400917998632486 - }, - "micro_accuracy": { - "0": 0.55078125, - "1": 0.69140625, - "2": 0.8984375 - }, - "theilU": { - "0": 0.9796759229512882, - "1": 0.9777050390583086, - "2": 0.8304762027245132 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6263244714416589, - "1": 0.7580807482301855, - "2": 0.8051683136261664 - }, - "precision": { - "0": 0.39189523809523813, - "1": 0.4466613507429834, - "2": 0.41728656897993305 - }, - "recall": { - "0": 0.6263244714416589, - "1": 0.7580807482301855, - "2": 0.8051683136261664 - }, - "f1": { - "0": 0.30980280628467527, - "1": 0.389230601534748, - "2": 0.41400917998632486 - }, - "micro_accuracy": { - "0": 0.6409090909090909, - "1": 0.69140625, - "2": 0.8984375 - }, - "theilU": { - "0": 0.9867823418942343, - "1": 0.9777050390583086, - "2": 0.8304762027245132 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "a14dc6f66ac2ee27d361e9993192ca137d25323d171dd5f838288262dd8cb934" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6591796875, - "micro_accuracy_known": 0.7670454545454546, - "macro_accuracy_all": 0.7066941759498712, - "macro_accuracy_known": 0.7398204654475213, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7646484375, - "micro_accuracy_known": 0.7646484375, - "macro_accuracy_all": 0.8198947503791194, - "macro_accuracy_known": 0.8198947503791194, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9248046875, - "micro_accuracy_known": 0.9248046875, - "macro_accuracy_all": 0.8316144395919204, - "macro_accuracy_known": 0.8316144395919204, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7066941759498712, - "1": 0.8198947503791194, - "2": 0.8316144395919204 - }, - "precision": { - "0": 0.5042094412240044, - "1": 0.5665973813064331, - "2": 0.43825556344944144 - }, - "recall": { - "0": 0.7066941759498712, - "1": 0.8198947503791194, - "2": 0.8316144395919204 - }, - "f1": { - "0": 0.42575784674450584, - "1": 0.5211979778793738, - "2": 0.4337807078924581 - }, - "micro_accuracy": { - "0": 0.6591796875, - "1": 0.7646484375, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9735097500570096, - "1": 0.9727261971483987, - "2": 0.8657064613349735 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7398204654475213, - "1": 0.8198947503791194, - "2": 0.8316144395919204 - }, - "precision": { - "0": 0.5253379776450247, - "1": 0.5665973813064331, - "2": 0.43825556344944144 - }, - "recall": { - "0": 0.7398204654475213, - "1": 0.8198947503791194, - "2": 0.8316144395919204 - }, - "f1": { - "0": 0.45370665419403977, - "1": 0.5211979778793738, - "2": 0.4337807078924581 - }, - "micro_accuracy": { - "0": 0.7670454545454546, - "1": 0.7646484375, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9774377634791895, - "1": 0.9727261971483987, - "2": 0.8657064613349735 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "a4ea502204f6c04d7c15457072f6f287b90e5958caf75db3641722db5a6641b3" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6806640625, - "micro_accuracy_known": 0.7920454545454545, - "macro_accuracy_all": 0.7310275201968053, - "macro_accuracy_known": 0.7652944352060306, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.8397377735642478, - "macro_accuracy_known": 0.8397377735642478, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8317364468516413, - "macro_accuracy_known": 0.8317364468516413, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7310275201968053, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "precision": { - "0": 0.5340657777944467, - "1": 0.5983671820603639, - "2": 0.45308418350617835 - }, - "recall": { - "0": 0.7310275201968053, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "f1": { - "0": 0.4581880127191281, - "1": 0.561039768420785, - "2": 0.442328851485267 - }, - "micro_accuracy": { - "0": 0.6806640625, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9732635179517282, - "1": 0.9713511969856635, - "2": 0.8715700789503066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7652944352060306, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "precision": { - "0": 0.557557705297067, - "1": 0.5983671820603639, - "2": 0.45308418350617835 - }, - "recall": { - "0": 0.7652944352060306, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "f1": { - "0": 0.48983331045199946, - "1": 0.561039768420785, - "2": 0.442328851485267 - }, - "micro_accuracy": { - "0": 0.7920454545454545, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9771498017995599, - "1": 0.9713511969856635, - "2": 0.8715700789503066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "855732b36869503efb9ebdff6da0d2eb0eb34e647ff07cb19a99f5201a5b147f" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6591796875, - "micro_accuracy_known": 0.7670454545454546, - "macro_accuracy_all": 0.7066941759498712, - "macro_accuracy_known": 0.7398204654475213, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7646484375, - "micro_accuracy_known": 0.7646484375, - "macro_accuracy_all": 0.8198947503791194, - "macro_accuracy_known": 0.8198947503791194, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9228515625, - "micro_accuracy_known": 0.9228515625, - "macro_accuracy_all": 0.8305863776983983, - "macro_accuracy_known": 0.8305863776983983, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7066941759498712, - "1": 0.8198947503791194, - "2": 0.8305863776983983 - }, - "precision": { - "0": 0.5069287359465932, - "1": 0.5697716845444118, - "2": 0.42954806681327823 - }, - "recall": { - "0": 0.7066941759498712, - "1": 0.8198947503791194, - "2": 0.8305863776983983 - }, - "f1": { - "0": 0.4275983109996368, - "1": 0.5237807081274264, - "2": 0.4268059402966388 - }, - "micro_accuracy": { - "0": 0.6591796875, - "1": 0.7646484375, - "2": 0.9228515625 - }, - "theilU": { - "0": 0.9721413160677382, - "1": 0.9710435774121716, - "2": 0.8635039416351868 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7398204654475213, - "1": 0.8198947503791194, - "2": 0.8305863776983983 - }, - "precision": { - "0": 0.528229126840238, - "1": 0.5697716845444118, - "2": 0.42954806681327823 - }, - "recall": { - "0": 0.7398204654475213, - "1": 0.8198947503791194, - "2": 0.8305863776983983 - }, - "f1": { - "0": 0.4557494874883961, - "1": 0.5237807081274264, - "2": 0.4268059402966388 - }, - "micro_accuracy": { - "0": 0.7670454545454546, - "1": 0.7646484375, - "2": 0.9228515625 - }, - "theilU": { - "0": 0.9772256802072771, - "1": 0.9710435774121716, - "2": 0.8635039416351868 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4759ea5533c354124d06d6c63dc4246b2511319b0578cb15ee2b2a9523781278" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7234303708086111, - "macro_accuracy_known": 0.7573411694402647, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.771484375, - "micro_accuracy_known": 0.771484375, - "macro_accuracy_all": 0.8264044402309145, - "macro_accuracy_known": 0.8264044402309145, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8356505719183113, - "macro_accuracy_known": 0.8356505719183113, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7234303708086111, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "precision": { - "0": 0.5315749363630721, - "1": 0.5870333969106291, - "2": 0.454276939025848 - }, - "recall": { - "0": 0.7234303708086111, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "f1": { - "0": 0.45333046228949975, - "1": 0.5441119185791008, - "2": 0.44442237587410865 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.771484375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9733142789269716, - "1": 0.9729723683192005, - "2": 0.8758419778179122 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7573411694402647, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "precision": { - "0": 0.5548049515038953, - "1": 0.5870333969106291, - "2": 0.454276939025848 - }, - "recall": { - "0": 0.7573411694402647, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "f1": { - "0": 0.48445144105486015, - "1": 0.5441119185791008, - "2": 0.44442237587410865 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.771484375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9773377473297942, - "1": 0.9729723683192005, - "2": 0.8758419778179122 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "362d0905f26cafb4ce7aa6bfd923f2e98bafa7994a4cf4d4a1aa415b48f4fef6" - } - } - }, - { - "backend": "onnx", - "profile": "light_noise", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5498046875, - "micro_accuracy_known": 0.6397727272727273, - "macro_accuracy_all": 0.597948417164835, - "macro_accuracy_known": 0.6259772492194366, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.6923828125, - "micro_accuracy_known": 0.6923828125, - "macro_accuracy_all": 0.7590331291825664, - "macro_accuracy_known": 0.7590331291825664, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.8984375, - "micro_accuracy_known": 0.8984375, - "macro_accuracy_all": 0.8051683136261664, - "macro_accuracy_known": 0.8051683136261664, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.597948417164835, - "1": 0.7590331291825664, - "2": 0.8051683136261664 - }, - "precision": { - "0": 0.37136511965192165, - "1": 0.4466613507429834, - "2": 0.41728656897993305 - }, - "recall": { - "0": 0.597948417164835, - "1": 0.7590331291825664, - "2": 0.8051683136261664 - }, - "f1": { - "0": 0.28923290873335167, - "1": 0.3895772048225278, - "2": 0.41400917998632486 - }, - "micro_accuracy": { - "0": 0.5498046875, - "1": 0.6923828125, - "2": 0.8984375 - }, - "theilU": { - "0": 0.9796759229512882, - "1": 0.9777050390583086, - "2": 0.8304762027245132 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6259772492194366, - "1": 0.7590331291825664, - "2": 0.8051683136261664 - }, - "precision": { - "0": 0.39189523809523813, - "1": 0.4466613507429834, - "2": 0.41728656897993305 - }, - "recall": { - "0": 0.6259772492194366, - "1": 0.7590331291825664, - "2": 0.8051683136261664 - }, - "f1": { - "0": 0.30966028576172006, - "1": 0.3895772048225278, - "2": 0.41400917998632486 - }, - "micro_accuracy": { - "0": 0.6397727272727273, - "1": 0.6923828125, - "2": 0.8984375 - }, - "theilU": { - "0": 0.9867823418942343, - "1": 0.9777050390583086, - "2": 0.8304762027245132 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "765f4c77f25ba8a09803627df78f34e58476a9ba778c7ba466761956b5e4b387" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.7681818181818182, - "macro_accuracy_all": 0.7074049080038868, - "macro_accuracy_known": 0.7405645130665689, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7646484375, - "micro_accuracy_known": 0.7646484375, - "macro_accuracy_all": 0.8198947503791194, - "macro_accuracy_known": 0.8198947503791194, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9248046875, - "micro_accuracy_known": 0.9248046875, - "macro_accuracy_all": 0.8317539957575575, - "macro_accuracy_known": 0.8317539957575575, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7074049080038868, - "1": 0.8198947503791194, - "2": 0.8317539957575575 - }, - "precision": { - "0": 0.5042094412240044, - "1": 0.5665973813064331, - "2": 0.44999679783808183 - }, - "recall": { - "0": 0.7074049080038868, - "1": 0.8198947503791194, - "2": 0.8317539957575575 - }, - "f1": { - "0": 0.4260688749147715, - "1": 0.5211979778793738, - "2": 0.44087968017792173 - }, - "micro_accuracy": { - "0": 0.66015625, - "1": 0.7646484375, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9735811508859927, - "1": 0.9727261971483987, - "2": 0.8646978424703992 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7405645130665689, - "1": 0.8198947503791194, - "2": 0.8317539957575575 - }, - "precision": { - "0": 0.5253379776450247, - "1": 0.5665973813064331, - "2": 0.44999679783808183 - }, - "recall": { - "0": 0.7405645130665689, - "1": 0.8198947503791194, - "2": 0.8317539957575575 - }, - "f1": { - "0": 0.45403706106650266, - "1": 0.5211979778793738, - "2": 0.44087968017792173 - }, - "micro_accuracy": { - "0": 0.7681818181818182, - "1": 0.7646484375, - "2": 0.9248046875 - }, - "theilU": { - "0": 0.9775212647862893, - "1": 0.9727261971483987, - "2": 0.8646978424703992 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d73c2c6a61ac53452147c70d0bf04fb1b22bb074a1fb05a8c4429e8462331460" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6806640625, - "micro_accuracy_known": 0.7920454545454545, - "macro_accuracy_all": 0.7310275201968053, - "macro_accuracy_known": 0.7652944352060306, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.8397377735642478, - "macro_accuracy_known": 0.8397377735642478, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8317364468516413, - "macro_accuracy_known": 0.8317364468516413, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7310275201968053, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "precision": { - "0": 0.5340657777944467, - "1": 0.5983671820603639, - "2": 0.45308418350617835 - }, - "recall": { - "0": 0.7310275201968053, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "f1": { - "0": 0.4581880127191281, - "1": 0.561039768420785, - "2": 0.442328851485267 - }, - "micro_accuracy": { - "0": 0.6806640625, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9732635179517282, - "1": 0.9713511969856635, - "2": 0.8715700789503066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7652944352060306, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "precision": { - "0": 0.557557705297067, - "1": 0.5983671820603639, - "2": 0.45308418350617835 - }, - "recall": { - "0": 0.7652944352060306, - "1": 0.8397377735642478, - "2": 0.8317364468516413 - }, - "f1": { - "0": 0.48983331045199946, - "1": 0.561039768420785, - "2": 0.442328851485267 - }, - "micro_accuracy": { - "0": 0.7920454545454545, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9771498017995599, - "1": 0.9713511969856635, - "2": 0.8715700789503066 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "ac0bb059bd16ff00e329fe3c83f985b01913c8781a873c3f8b7d738ca9d7b347" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.66015625, - "micro_accuracy_known": 0.7681818181818182, - "macro_accuracy_all": 0.7074049080038868, - "macro_accuracy_known": 0.7405645130665689, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7646484375, - "micro_accuracy_known": 0.7646484375, - "macro_accuracy_all": 0.8198947503791194, - "macro_accuracy_known": 0.8198947503791194, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9228515625, - "micro_accuracy_known": 0.9228515625, - "macro_accuracy_all": 0.8307259338640354, - "macro_accuracy_known": 0.8307259338640354, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7074049080038868, - "1": 0.8198947503791194, - "2": 0.8307259338640354 - }, - "precision": { - "0": 0.5069287359465932, - "1": 0.5697716845444118, - "2": 0.43533689690966904 - }, - "recall": { - "0": 0.7074049080038868, - "1": 0.8198947503791194, - "2": 0.8307259338640354 - }, - "f1": { - "0": 0.42791025395863846, - "1": 0.5237807081274264, - "2": 0.43152376139055 - }, - "micro_accuracy": { - "0": 0.66015625, - "1": 0.7646484375, - "2": 0.9228515625 - }, - "theilU": { - "0": 0.9722127168967214, - "1": 0.9710435774121716, - "2": 0.8619312297347159 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7405645130665689, - "1": 0.8198947503791194, - "2": 0.8307259338640354 - }, - "precision": { - "0": 0.528229126840238, - "1": 0.5697716845444118, - "2": 0.43533689690966904 - }, - "recall": { - "0": 0.7405645130665689, - "1": 0.8198947503791194, - "2": 0.8307259338640354 - }, - "f1": { - "0": 0.45608092688233554, - "1": 0.5237807081274264, - "2": 0.43152376139055 - }, - "micro_accuracy": { - "0": 0.7681818181818182, - "1": 0.7646484375, - "2": 0.9228515625 - }, - "theilU": { - "0": 0.9773091815143768, - "1": 0.9710435774121716, - "2": 0.8619312297347159 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "39fa981d3975e99fb5352e118f584180b4b55e3a27d51ecc2a4ec6e630c23746" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7234303708086111, - "macro_accuracy_known": 0.7573411694402647, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.771484375, - "micro_accuracy_known": 0.771484375, - "macro_accuracy_all": 0.8264044402309145, - "macro_accuracy_known": 0.8264044402309145, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8356505719183113, - "macro_accuracy_known": 0.8356505719183113, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7234303708086111, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "precision": { - "0": 0.5315749363630721, - "1": 0.5870333969106291, - "2": 0.454276939025848 - }, - "recall": { - "0": 0.7234303708086111, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "f1": { - "0": 0.45333046228949975, - "1": 0.5441119185791008, - "2": 0.44442237587410865 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.771484375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9733142789269716, - "1": 0.9729723683192005, - "2": 0.8758419778179122 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7573411694402647, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "precision": { - "0": 0.5548049515038953, - "1": 0.5870333969106291, - "2": 0.454276939025848 - }, - "recall": { - "0": 0.7573411694402647, - "1": 0.8264044402309145, - "2": 0.8356505719183113 - }, - "f1": { - "0": 0.48445144105486015, - "1": 0.5441119185791008, - "2": 0.44442237587410865 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.771484375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9773377473297942, - "1": 0.9729723683192005, - "2": 0.8758419778179122 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4163520fcb8ff2db51f208fe3c897d7d8a33ef167029e9ff6cf08ee3cd2d8b9c" - } - } - }, - { - "backend": "torch", - "profile": "brightness", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.564453125, - "micro_accuracy_known": 0.6568181818181819, - "macro_accuracy_all": 0.6183162410283385, - "macro_accuracy_known": 0.6472998148265419, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7021484375, - "micro_accuracy_known": 0.7021484375, - "macro_accuracy_all": 0.7693243600883878, - "macro_accuracy_known": 0.7693243600883878, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.904296875, - "micro_accuracy_known": 0.904296875, - "macro_accuracy_all": 0.8518896032611248, - "macro_accuracy_known": 0.8518896032611248, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6183162410283385, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "precision": { - "0": 0.3880250305250305, - "1": 0.4516077494746436, - "2": 0.47059001308503184 - }, - "recall": { - "0": 0.6183162410283385, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "f1": { - "0": 0.304404133638732, - "1": 0.39522707704691623, - "2": 0.47894868712219413 - }, - "micro_accuracy": { - "0": 0.564453125, - "1": 0.7021484375, - "2": 0.904296875 - }, - "theilU": { - "0": 0.9788721719654571, - "1": 0.9776673557201376, - "2": 0.8301641891930855 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6472998148265419, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "precision": { - "0": 0.4118499161182088, - "1": 0.4516077494746436, - "2": 0.47059001308503184 - }, - "recall": { - "0": 0.6472998148265419, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "f1": { - "0": 0.3278804671570309, - "1": 0.39522707704691623, - "2": 0.47894868712219413 - }, - "micro_accuracy": { - "0": 0.6568181818181819, - "1": 0.7021484375, - "2": 0.904296875 - }, - "theilU": { - "0": 0.9861901698381681, - "1": 0.9776673557201376, - "2": 0.8301641891930855 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "ea9e17724e91fa8a7a1fd89f21225b5c067af7ea831da580500264621b339db5" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7294239030393783, - "macro_accuracy_known": 0.7636156484943492, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.8404213357880577, - "macro_accuracy_known": 0.8404213357880577, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.931640625, - "micro_accuracy_known": 0.931640625, - "macro_accuracy_all": 0.8747512843621778, - "macro_accuracy_known": 0.8747512843621778, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8747512843621778 - }, - "precision": { - "0": 0.5294163250289078, - "1": 0.5768299761806256, - "2": 0.47452535059984774 - }, - "recall": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8747512843621778 - }, - "f1": { - "0": 0.4516098009678518, - "1": 0.5359895169230687, - "2": 0.4816003748813493 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.77734375, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9749195921932904, - "1": 0.9758357125606513, - "2": 0.8698011914185231 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8747512843621778 - }, - "precision": { - "0": 0.5577560074955907, - "1": 0.5768299761806256, - "2": 0.47452535059984774 - }, - "recall": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8747512843621778 - }, - "f1": { - "0": 0.4868157609635364, - "1": 0.5359895169230687, - "2": 0.4816003748813493 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.77734375, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9784480772656535, - "1": 0.9758357125606513, - "2": 0.8698011914185231 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "0256522b08c3a128fad8d9c63c34954acce621a4c2338dc7692ec63cf24b4d45" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6923828125, - "micro_accuracy_known": 0.8056818181818182, - "macro_accuracy_all": 0.7466012977108814, - "macro_accuracy_known": 0.7815982335410788, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8588238206905426, - "macro_accuracy_known": 0.8588238206905426, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.935546875, - "micro_accuracy_known": 0.935546875, - "macro_accuracy_all": 0.8772082960647901, - "macro_accuracy_known": 0.8772082960647901, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7466012977108814, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "precision": { - "0": 0.5483308787432499, - "1": 0.597375942443207, - "2": 0.4875648805802487 - }, - "recall": { - "0": 0.7466012977108814, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "f1": { - "0": 0.4731994993617266, - "1": 0.5646175682149087, - "2": 0.4895885600320747 - }, - "micro_accuracy": { - "0": 0.6923828125, - "1": 0.787109375, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9743492089164368, - "1": 0.9757817967832746, - "2": 0.8813345819108521 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7815982335410788, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "precision": { - "0": 0.5746031746031746, - "1": 0.597375942443207, - "2": 0.4875648805802487 - }, - "recall": { - "0": 0.7815982335410788, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "f1": { - "0": 0.5079607025155944, - "1": 0.5646175682149087, - "2": 0.4895885600320747 - }, - "micro_accuracy": { - "0": 0.8056818181818182, - "1": 0.787109375, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9786744434452747, - "1": 0.9757817967832746, - "2": 0.8813345819108521 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "b29a21bee2dcad0c6e7e2d5cd6d2bc96f8f9a5fbc0885f89ca9600cf6c7a6c1b" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7294239030393783, - "macro_accuracy_known": 0.7636156484943492, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.8404213357880577, - "macro_accuracy_known": 0.8404213357880577, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9287109375, - "micro_accuracy_known": 0.9287109375, - "macro_accuracy_all": 0.8735081687052146, - "macro_accuracy_known": 0.8735081687052146, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8735081687052146 - }, - "precision": { - "0": 0.5270298141186299, - "1": 0.5771907265413759, - "2": 0.44917961758061403 - }, - "recall": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8735081687052146 - }, - "f1": { - "0": 0.4494980303914683, - "1": 0.5362708108752487, - "2": 0.4575318257591758 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9739699360130293, - "1": 0.9743935370803344, - "2": 0.8676031507274039 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8735081687052146 - }, - "precision": { - "0": 0.5531514209349261, - "1": 0.5771907265413759, - "2": 0.44917961758061403 - }, - "recall": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8735081687052146 - }, - "f1": { - "0": 0.4827628758095473, - "1": 0.5362708108752487, - "2": 0.4575318257591758 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9792579897039164, - "1": 0.9743935370803344, - "2": 0.8676031507274039 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "fd220b613188b66977299b3e6c030460398f5f34099f4b8b253996e9ad570fa1" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6884765625, - "micro_accuracy_known": 0.8011363636363636, - "macro_accuracy_all": 0.7391386111437172, - "macro_accuracy_known": 0.7737857335410788, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7822265625, - "micro_accuracy_known": 0.7822265625, - "macro_accuracy_all": 0.8454904873572092, - "macro_accuracy_known": 0.8454904873572092, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8768253954615906, - "macro_accuracy_known": 0.8768253954615906, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7391386111437172, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "precision": { - "0": 0.5457256622785633, - "1": 0.5872092018109717, - "2": 0.455852200251995 - }, - "recall": { - "0": 0.7391386111437172, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "f1": { - "0": 0.46824913275817853, - "1": 0.5494891732794056, - "2": 0.4568076265665338 - }, - "micro_accuracy": { - "0": 0.6884765625, - "1": 0.7822265625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9742392602318141, - "1": 0.9767525227713265, - "2": 0.8877672927386754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7737857335410788, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "precision": { - "0": 0.5716997119132351, - "1": 0.5872092018109717, - "2": 0.455852200251995 - }, - "recall": { - "0": 0.7737857335410788, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "f1": { - "0": 0.5024339900483179, - "1": 0.5494891732794056, - "2": 0.4568076265665338 - }, - "micro_accuracy": { - "0": 0.8011363636363636, - "1": 0.7822265625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9788865267171871, - "1": 0.9767525227713265, - "2": 0.8877672927386754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8e173c924e1565d936a4f5cc6c3d70004ab4615f1df65f6073f759fbaf0b4abe" - } - } - }, - { - "backend": "torch", - "profile": "contrast", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5673828125, - "micro_accuracy_known": 0.6602272727272728, - "macro_accuracy_all": 0.6196075737316901, - "macro_accuracy_known": 0.648651678750363, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7041015625, - "micro_accuracy_known": 0.7041015625, - "macro_accuracy_all": 0.7684694057953135, - "macro_accuracy_known": 0.7684694057953135, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90234375, - "micro_accuracy_known": 0.90234375, - "macro_accuracy_all": 0.8456605957411253, - "macro_accuracy_known": 0.8456605957411253, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6196075737316901, - "1": 0.7684694057953135, - "2": 0.8456605957411253 - }, - "precision": { - "0": 0.3919487847222222, - "1": 0.4558982148455831, - "2": 0.46815163882835753 - }, - "recall": { - "0": 0.6196075737316901, - "1": 0.7684694057953135, - "2": 0.8456605957411253 - }, - "f1": { - "0": 0.3091710290229334, - "1": 0.4016737979134566, - "2": 0.47463956339683483 - }, - "micro_accuracy": { - "0": 0.5673828125, - "1": 0.7041015625, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9772835814572578, - "1": 0.9765631569763479, - "2": 0.8282929804304322 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.648651678750363, - "1": 0.7684694057953135, - "2": 0.8456605957411253 - }, - "precision": { - "0": 0.4129813947436899, - "1": 0.4558982148455831, - "2": 0.46815163882835753 - }, - "recall": { - "0": 0.648651678750363, - "1": 0.7684694057953135, - "2": 0.8456605957411253 - }, - "f1": { - "0": 0.3308754587571434, - "1": 0.4016737979134566, - "2": 0.47463956339683483 - }, - "micro_accuracy": { - "0": 0.6602272727272728, - "1": 0.7041015625, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9843018341000567, - "1": 0.9765631569763479, - "2": 0.8282929804304322 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d6f50f16d41a7f7b2e73ceb5421ff0f73aa0b303f694b0db4ef32b881cdddfd0" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7333145239763464, - "macro_accuracy_known": 0.7676886422877377, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.838827523488363, - "macro_accuracy_known": 0.838827523488363, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8802629987776895, - "macro_accuracy_known": 0.8802629987776895, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7333145239763464, - "1": 0.838827523488363, - "2": 0.8802629987776895 - }, - "precision": { - "0": 0.527456414259693, - "1": 0.5769673321847235, - "2": 0.47487129838085695 - }, - "recall": { - "0": 0.7333145239763464, - "1": 0.838827523488363, - "2": 0.8802629987776895 - }, - "f1": { - "0": 0.4519260772103862, - "1": 0.5340534806303646, - "2": 0.48285486972698133 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.7763671875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9751968216370304, - "1": 0.9751952881581867, - "2": 0.8648225268384022 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7676886422877377, - "1": 0.838827523488363, - "2": 0.8802629987776895 - }, - "precision": { - "0": 0.5573248494800219, - "1": 0.5769673321847235, - "2": 0.47487129838085695 - }, - "recall": { - "0": 0.7676886422877377, - "1": 0.838827523488363, - "2": 0.8802629987776895 - }, - "f1": { - "0": 0.4885041875969866, - "1": 0.5340534806303646, - "2": 0.48285486972698133 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.7763671875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9781268909653403, - "1": 0.9751952881581867, - "2": 0.8648225268384022 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "b0879b6d50873e70132aec38b33e71e98c8ccf10928f75c73285593a06e58dd9" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6943359375, - "micro_accuracy_known": 0.8079545454545455, - "macro_accuracy_all": 0.752995488315598, - "macro_accuracy_known": 0.7882921518303917, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7861328125, - "micro_accuracy_known": 0.7861328125, - "macro_accuracy_all": 0.8584998496606892, - "macro_accuracy_known": 0.8584998496606892, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.935546875, - "micro_accuracy_known": 0.935546875, - "macro_accuracy_all": 0.8831767563769762, - "macro_accuracy_known": 0.8831767563769762, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.752995488315598, - "1": 0.8584998496606892, - "2": 0.8831767563769762 - }, - "precision": { - "0": 0.5535755195549009, - "1": 0.6009100018068628, - "2": 0.4888496466827768 - }, - "recall": { - "0": 0.752995488315598, - "1": 0.8584998496606892, - "2": 0.8831767563769762 - }, - "f1": { - "0": 0.48214921171360525, - "1": 0.5676364116280896, - "2": 0.4919872603692013 - }, - "micro_accuracy": { - "0": 0.6943359375, - "1": 0.7861328125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9738976776196072, - "1": 0.9746861387960117, - "2": 0.8789252577524179 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7882921518303917, - "1": 0.8584998496606892, - "2": 0.8831767563769762 - }, - "precision": { - "0": 0.5821599862966769, - "1": 0.6009100018068628, - "2": 0.4888496466827768 - }, - "recall": { - "0": 0.7882921518303917, - "1": 0.8584998496606892, - "2": 0.8831767563769762 - }, - "f1": { - "0": 0.5196532554902477, - "1": 0.5676364116280896, - "2": 0.4919872603692013 - }, - "micro_accuracy": { - "0": 0.8079545454545455, - "1": 0.7861328125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9776125631060896, - "1": 0.9746861387960117, - "2": 0.8789252577524179 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f10c41c5854d8bf02e3ca2ff9073f38b4843af0a09906907d0ed19e834efcf91" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6748046875, - "micro_accuracy_known": 0.7852272727272728, - "macro_accuracy_all": 0.7333145239763464, - "macro_accuracy_known": 0.7676886422877377, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.838827523488363, - "macro_accuracy_known": 0.838827523488363, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8790198831207265, - "macro_accuracy_known": 0.8790198831207265, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7333145239763464, - "1": 0.838827523488363, - "2": 0.8790198831207265 - }, - "precision": { - "0": 0.5285493104345563, - "1": 0.5823939462097357, - "2": 0.4668429384179581 - }, - "recall": { - "0": 0.7333145239763464, - "1": 0.838827523488363, - "2": 0.8790198831207265 - }, - "f1": { - "0": 0.45252667781098677, - "1": 0.5388618434605654, - "2": 0.4763147474995116 - }, - "micro_accuracy": { - "0": 0.6748046875, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9739545159440054, - "1": 0.9729908415213692, - "2": 0.8622817914940196 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7676886422877377, - "1": 0.838827523488363, - "2": 0.8790198831207265 - }, - "precision": { - "0": 0.5565551191839851, - "1": 0.5823939462097357, - "2": 0.4668429384179581 - }, - "recall": { - "0": 0.7676886422877377, - "1": 0.838827523488363, - "2": 0.8790198831207265 - }, - "f1": { - "0": 0.48757352892731887, - "1": 0.5388618434605654, - "2": 0.4763147474995116 - }, - "micro_accuracy": { - "0": 0.7852272727272728, - "1": 0.7763671875, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9785961381668781, - "1": 0.9729908415213692, - "2": 0.8622817914940196 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "39e0a49e02181978cf8ccf119128e3e11d4e37d65e7a71b5bc1fdff4e3a9b9f9" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6904296875, - "micro_accuracy_known": 0.803409090909091, - "macro_accuracy_all": 0.7455328017484341, - "macro_accuracy_known": 0.7804796518303919, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.78125, - "micro_accuracy_known": 0.78125, - "macro_accuracy_all": 0.8451665163273558, - "macro_accuracy_known": 0.8451665163273558, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.935546875, - "micro_accuracy_known": 0.935546875, - "macro_accuracy_all": 0.8824392458446987, - "macro_accuracy_known": 0.8824392458446987, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7455328017484341, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "precision": { - "0": 0.5531855500821018, - "1": 0.5941586316025778, - "2": 0.47314272371396204 - }, - "recall": { - "0": 0.7455328017484341, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "f1": { - "0": 0.4796255524076116, - "1": 0.5566152643229424, - "2": 0.4751092613473271 - }, - "micro_accuracy": { - "0": 0.6904296875, - "1": 0.78125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9737102335680159, - "1": 0.9749939611792631, - "2": 0.8842953741962183 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7804796518303919, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "precision": { - "0": 0.5818549080281932, - "1": 0.5941586316025778, - "2": 0.47314272371396204 - }, - "recall": { - "0": 0.7804796518303919, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "f1": { - "0": 0.516941391083468, - "1": 0.5566152643229424, - "2": 0.4751092613473271 - }, - "micro_accuracy": { - "0": 0.803409090909091, - "1": 0.78125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9777340176762319, - "1": 0.9749939611792631, - "2": 0.8842953741962183 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "b940db5d8d6cc07e40d06248f0590aa7807d78689b0bd05b6bc08de20af4685a" - } - } - }, - { - "backend": "torch", - "profile": "gamma", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5615234375, - "micro_accuracy_known": 0.6534090909090909, - "macro_accuracy_all": 0.6142377324722179, - "macro_accuracy_known": 0.6430301261818532, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.705078125, - "micro_accuracy_known": 0.705078125, - "macro_accuracy_all": 0.7690586762861187, - "macro_accuracy_known": 0.7690586762861187, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9013671875, - "micro_accuracy_known": 0.9013671875, - "macro_accuracy_all": 0.8453059858120473, - "macro_accuracy_known": 0.8453059858120473, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6142377324722179, - "1": 0.7690586762861187, - "2": 0.8453059858120473 - }, - "precision": { - "0": 0.3831822695633437, - "1": 0.456476598114529, - "2": 0.4323704148205619 - }, - "recall": { - "0": 0.6142377324722179, - "1": 0.7690586762861187, - "2": 0.8453059858120473 - }, - "f1": { - "0": 0.3013920882061196, - "1": 0.399159414905154, - "2": 0.4388522670270817 - }, - "micro_accuracy": { - "0": 0.5615234375, - "1": 0.705078125, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9805163111583765, - "1": 0.9782892494572161, - "2": 0.8344086074000754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6430301261818532, - "1": 0.7690586762861187, - "2": 0.8453059858120473 - }, - "precision": { - "0": 0.40666790416790416, - "1": 0.456476598114529, - "2": 0.4323704148205619 - }, - "recall": { - "0": 0.6430301261818532, - "1": 0.7690586762861187, - "2": 0.8453059858120473 - }, - "f1": { - "0": 0.3245318677292838, - "1": 0.399159414905154, - "2": 0.4388522670270817 - }, - "micro_accuracy": { - "0": 0.6534090909090909, - "1": 0.705078125, - "2": 0.9013671875 - }, - "theilU": { - "0": 0.9862090914492778, - "1": 0.9782892494572161, - "2": 0.8344086074000754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "ae0a3dcd403da27e10a627798bd968ee37fc9292a71eba51399e75d3ae760075" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6767578125, - "micro_accuracy_known": 0.7875, - "macro_accuracy_all": 0.7295103466647064, - "macro_accuracy_known": 0.7637061441646145, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7802734375, - "micro_accuracy_known": 0.7802734375, - "macro_accuracy_all": 0.8420738412346808, - "macro_accuracy_known": 0.8420738412346808, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8738380242442564, - "macro_accuracy_known": 0.8738380242442564, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8738380242442564 - }, - "precision": { - "0": 0.5314203976164109, - "1": 0.5867950942840812, - "2": 0.4870695136221742 - }, - "recall": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8738380242442564 - }, - "f1": { - "0": 0.45315629657657325, - "1": 0.5457626885494473, - "2": 0.4888728278137216 - }, - "micro_accuracy": { - "0": 0.6767578125, - "1": 0.7802734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9742895975077354, - "1": 0.9744925867275461, - "2": 0.8636921811065637 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8738380242442564 - }, - "precision": { - "0": 0.5599565842597202, - "1": 0.5867950942840812, - "2": 0.4870695136221742 - }, - "recall": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8738380242442564 - }, - "f1": { - "0": 0.48859279520091015, - "1": 0.5457626885494473, - "2": 0.4888728278137216 - }, - "micro_accuracy": { - "0": 0.7875, - "1": 0.7802734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.977083484952786, - "1": 0.9744925867275461, - "2": 0.8636921811065637 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "2e86f4611b731ca781edcfc4fb8c12e324607ef1f68c333c52c761f4ffc11ac4" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.693359375, - "micro_accuracy_known": 0.8068181818181818, - "macro_accuracy_all": 0.7475169287325611, - "macro_accuracy_known": 0.7825567847668999, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7880859375, - "micro_accuracy_known": 0.7880859375, - "macro_accuracy_all": 0.8591850348458744, - "macro_accuracy_known": 0.8591850348458744, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8761554797812316, - "macro_accuracy_known": 0.8761554797812316, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7475169287325611, - "1": 0.8591850348458744, - "2": 0.8761554797812316 - }, - "precision": { - "0": 0.5504761904761905, - "1": 0.6044072594072594, - "2": 0.5064686502228765 - }, - "recall": { - "0": 0.7475169287325611, - "1": 0.8591850348458744, - "2": 0.8761554797812316 - }, - "f1": { - "0": 0.4750336819989257, - "1": 0.5719363697538292, - "2": 0.5085626120950416 - }, - "micro_accuracy": { - "0": 0.693359375, - "1": 0.7880859375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9742632627716996, - "1": 0.9740924117631742, - "2": 0.8730894877122698 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7825567847668999, - "1": 0.8591850348458744, - "2": 0.8761554797812316 - }, - "precision": { - "0": 0.5790183943613546, - "1": 0.6044072594072594, - "2": 0.5064686502228765 - }, - "recall": { - "0": 0.7825567847668999, - "1": 0.8591850348458744, - "2": 0.8761554797812316 - }, - "f1": { - "0": 0.5117580970170622, - "1": 0.5719363697538292, - "2": 0.5085626120950416 - }, - "micro_accuracy": { - "0": 0.8068181818181818, - "1": 0.7880859375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9773933524395068, - "1": 0.9740924117631742, - "2": 0.8730894877122698 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "7cbad6438283e87558827da171caf8eba2994e557c7463e160b686d2a7161a08" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6767578125, - "micro_accuracy_known": 0.7875, - "macro_accuracy_all": 0.7295103466647064, - "macro_accuracy_known": 0.7637061441646145, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7802734375, - "micro_accuracy_known": 0.7802734375, - "macro_accuracy_all": 0.8420738412346808, - "macro_accuracy_known": 0.8420738412346808, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.92578125, - "micro_accuracy_known": 0.92578125, - "macro_accuracy_all": 0.871781900457212, - "macro_accuracy_known": 0.871781900457212, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.871781900457212 - }, - "precision": { - "0": 0.5307644801850099, - "1": 0.5851717239875135, - "2": 0.4549268070221989 - }, - "recall": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.871781900457212 - }, - "f1": { - "0": 0.45239147392830564, - "1": 0.5439742699115127, - "2": 0.4617406838591272 - }, - "micro_accuracy": { - "0": 0.6767578125, - "1": 0.7802734375, - "2": 0.92578125 - }, - "theilU": { - "0": 0.9733374322783351, - "1": 0.9736734244458565, - "2": 0.8573981167641367 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.871781900457212 - }, - "precision": { - "0": 0.5572348547262042, - "1": 0.5851717239875135, - "2": 0.4549268070221989 - }, - "recall": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.871781900457212 - }, - "f1": { - "0": 0.4860776314779269, - "1": 0.5439742699115127, - "2": 0.4617406838591272 - }, - "micro_accuracy": { - "0": 0.7875, - "1": 0.7802734375, - "2": 0.92578125 - }, - "theilU": { - "0": 0.9778933973910489, - "1": 0.9736734244458565, - "2": 0.8573981167641367 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "be43d3883ff28d7648642b848cf2e72894ba88d4866350891d1aca082fba8230" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6904296875, - "micro_accuracy_known": 0.803409090909091, - "macro_accuracy_all": 0.7408834295617485, - "macro_accuracy_known": 0.7756123403224554, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7841796875, - "micro_accuracy_known": 0.7841796875, - "macro_accuracy_all": 0.8469628126236521, - "macro_accuracy_known": 0.8469628126236521, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.875772579178032, - "macro_accuracy_known": 0.875772579178032, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7408834295617485, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "precision": { - "0": 0.5516256157635467, - "1": 0.5975857725857726, - "2": 0.47155516926017454 - }, - "recall": { - "0": 0.7408834295617485, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "f1": { - "0": 0.47342150107639996, - "1": 0.5600088207579762, - "2": 0.47237289123012827 - }, - "micro_accuracy": { - "0": 0.6904296875, - "1": 0.7841796875, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9741326742333372, - "1": 0.9752980882660742, - "2": 0.8808206854269369 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7756123403224554, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "precision": { - "0": 0.580221763795771, - "1": 0.5975857725857726, - "2": 0.47155516926017454 - }, - "recall": { - "0": 0.7756123403224554, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "f1": { - "0": 0.5100264952854605, - "1": 0.5600088207579762, - "2": 0.47237289123012827 - }, - "micro_accuracy": { - "0": 0.803409090909091, - "1": 0.7841796875, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.977581297969741, - "1": 0.9752980882660742, - "2": 0.8808206854269369 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "74ca1c35bc9fc34310c1e7a8ee68365644ae4c1d5a2538a0c34777eb01ff5b13" - } - } - }, - { - "backend": "torch", - "profile": "gaussian_noise", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6064453125, - "micro_accuracy_known": 0.7056818181818182, - "macro_accuracy_all": 0.6570185437428171, - "macro_accuracy_known": 0.6878162879807617, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7275390625, - "micro_accuracy_known": 0.7275390625, - "macro_accuracy_all": 0.8009490997750077, - "macro_accuracy_known": 0.8009490997750077, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9111328125, - "micro_accuracy_known": 0.9111328125, - "macro_accuracy_all": 0.8513848870135886, - "macro_accuracy_known": 0.8513848870135886, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6570185437428171, - "1": 0.8009490997750077, - "2": 0.8513848870135886 - }, - "precision": { - "0": 0.419501287001287, - "1": 0.48706946289363867, - "2": 0.4309082949296677 - }, - "recall": { - "0": 0.6570185437428171, - "1": 0.8009490997750077, - "2": 0.8513848870135886 - }, - "f1": { - "0": 0.3396361173544347, - "1": 0.43771174773832555, - "2": 0.44206823612927365 - }, - "micro_accuracy": { - "0": 0.6064453125, - "1": 0.7275390625, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9815691113390748, - "1": 0.980693457451239, - "2": 0.8500065528057964 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6878162879807617, - "1": 0.8009490997750077, - "2": 0.8513848870135886 - }, - "precision": { - "0": 0.4453095238095239, - "1": 0.48706946289363867, - "2": 0.4309082949296677 - }, - "recall": { - "0": 0.6878162879807617, - "1": 0.8009490997750077, - "2": 0.8513848870135886 - }, - "f1": { - "0": 0.3664652136961781, - "1": 0.43771174773832555, - "2": 0.44206823612927365 - }, - "micro_accuracy": { - "0": 0.7056818181818182, - "1": 0.7275390625, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9862999206709946, - "1": 0.980693457451239, - "2": 0.8500065528057964 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "e71935d8594ce7e3c1bb92ef2d494e75f0de26a723d60cf6c613d678827bf892" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.685546875, - "micro_accuracy_known": 0.7977272727272727, - "macro_accuracy_all": 0.7374351993853172, - "macro_accuracy_known": 0.7720024743565039, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.783203125, - "micro_accuracy_known": 0.783203125, - "macro_accuracy_all": 0.8497848690302815, - "macro_accuracy_known": 0.8497848690302815, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9326171875, - "micro_accuracy_known": 0.9326171875, - "macro_accuracy_all": 0.8717584528209592, - "macro_accuracy_known": 0.8717584528209592, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7374351993853172, - "1": 0.8497848690302815, - "2": 0.8717584528209592 - }, - "precision": { - "0": 0.5434875510962468, - "1": 0.585491616074715, - "2": 0.5462405993973666 - }, - "recall": { - "0": 0.7374351993853172, - "1": 0.8497848690302815, - "2": 0.8717584528209592 - }, - "f1": { - "0": 0.46157906832629975, - "1": 0.541951872534005, - "2": 0.5278130382928162 - }, - "micro_accuracy": { - "0": 0.685546875, - "1": 0.783203125, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.9767870804136543, - "1": 0.9802727288675025, - "2": 0.8655864765618194 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7720024743565039, - "1": 0.8497848690302815, - "2": 0.8717584528209592 - }, - "precision": { - "0": 0.5748337245696401, - "1": 0.585491616074715, - "2": 0.5462405993973666 - }, - "recall": { - "0": 0.7720024743565039, - "1": 0.8497848690302815, - "2": 0.8717584528209592 - }, - "f1": { - "0": 0.49939647126479614, - "1": 0.541951872534005, - "2": 0.5278130382928162 - }, - "micro_accuracy": { - "0": 0.7977272727272727, - "1": 0.783203125, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.9792087415340989, - "1": 0.9802727288675025, - "2": 0.8655864765618194 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f725f398d16e76c789a0090b76a1e451670960d331e57bd14852370dafcdffb6" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.703125, - "micro_accuracy_known": 0.8181818181818182, - "macro_accuracy_all": 0.7539835338440992, - "macro_accuracy_known": 0.7893265119930414, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.79296875, - "micro_accuracy_known": 0.79296875, - "macro_accuracy_all": 0.8651618758707033, - "macro_accuracy_known": 0.8651618758707033, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8751481575271653, - "macro_accuracy_known": 0.8751481575271653, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7539835338440992, - "1": 0.8651618758707033, - "2": 0.8751481575271653 - }, - "precision": { - "0": 0.5672410922410921, - "1": 0.6088815991321016, - "2": 0.5078167955033551 - }, - "recall": { - "0": 0.7539835338440992, - "1": 0.8651618758707033, - "2": 0.8751481575271653 - }, - "f1": { - "0": 0.4876931989075745, - "1": 0.5734083180440451, - "2": 0.4913008766073878 - }, - "micro_accuracy": { - "0": 0.703125, - "1": 0.79296875, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9758840928856128, - "1": 0.9774621379883017, - "2": 0.8815016691622108 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7893265119930414, - "1": 0.8651618758707033, - "2": 0.8751481575271653 - }, - "precision": { - "0": 0.596999825571254, - "1": 0.6088815991321016, - "2": 0.5078167955033551 - }, - "recall": { - "0": 0.7893265119930414, - "1": 0.8651618758707033, - "2": 0.8751481575271653 - }, - "f1": { - "0": 0.5258695150590312, - "1": 0.5734083180440451, - "2": 0.4913008766073878 - }, - "micro_accuracy": { - "0": 0.8181818181818182, - "1": 0.79296875, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9790873150823245, - "1": 0.9774621379883017, - "2": 0.8815016691622108 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "01e2e41a96566ca4a8c288f736a22b38cbc27dbbebc9ebd2710b93997f6befcd" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.685546875, - "micro_accuracy_known": 0.7977272727272727, - "macro_accuracy_all": 0.7374351993853172, - "macro_accuracy_known": 0.7720024743565039, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7841796875, - "micro_accuracy_known": 0.7841796875, - "macro_accuracy_all": 0.8514515356969482, - "macro_accuracy_known": 0.8514515356969482, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8704905827739597, - "macro_accuracy_known": 0.8704905827739597, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7374351993853172, - "1": 0.8514515356969482, - "2": 0.8704905827739597 - }, - "precision": { - "0": 0.542787037037037, - "1": 0.5908045577996316, - "2": 0.5296432768315602 - }, - "recall": { - "0": 0.7374351993853172, - "1": 0.8514515356969482, - "2": 0.8704905827739597 - }, - "f1": { - "0": 0.46078640448288666, - "1": 0.5473574593213641, - "2": 0.517960752732796 - }, - "micro_accuracy": { - "0": 0.685546875, - "1": 0.7841796875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9768010992909993, - "1": 0.9785360316052701, - "2": 0.8616391329814392 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7720024743565039, - "1": 0.8514515356969482, - "2": 0.8704905827739597 - }, - "precision": { - "0": 0.5739863547758285, - "1": 0.5908045577996316, - "2": 0.5296432768315602 - }, - "recall": { - "0": 0.7720024743565039, - "1": 0.8514515356969482, - "2": 0.8704905827739597 - }, - "f1": { - "0": 0.4984180514240615, - "1": 0.5473574593213641, - "2": 0.517960752732796 - }, - "micro_accuracy": { - "0": 0.7977272727272727, - "1": 0.7841796875, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9796779887356367, - "1": 0.9785360316052701, - "2": 0.8616391329814392 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "849195739344f7b7f691c625f65d4496b5f978b447a82c1d3716c41ce9720495" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.69921875, - "micro_accuracy_known": 0.8136363636363636, - "macro_accuracy_all": 0.7461062535787594, - "macro_accuracy_known": 0.7810799842152637, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7890625, - "micro_accuracy_known": 0.7890625, - "macro_accuracy_all": 0.8538655795744067, - "macro_accuracy_known": 0.8538655795744067, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8745254487704887, - "macro_accuracy_known": 0.8745254487704887, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7461062535787594, - "1": 0.8538655795744067, - "2": 0.8745254487704887 - }, - "precision": { - "0": 0.5627232142857141, - "1": 0.6025671475486746, - "2": 0.4888507960286553 - }, - "recall": { - "0": 0.7461062535787594, - "1": 0.8538655795744067, - "2": 0.8745254487704887 - }, - "f1": { - "0": 0.48134152182268364, - "1": 0.5629103383961787, - "2": 0.47319868251346003 - }, - "micro_accuracy": { - "0": 0.69921875, - "1": 0.7890625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9757535043472505, - "1": 0.9781060555048576, - "2": 0.887834112188216 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7810799842152637, - "1": 0.8538655795744067, - "2": 0.8745254487704887 - }, - "precision": { - "0": 0.5920519480519479, - "1": 0.6025671475486746, - "2": 0.4888507960286553 - }, - "recall": { - "0": 0.7810799842152637, - "1": 0.8538655795744067, - "2": 0.8745254487704887 - }, - "f1": { - "0": 0.5187853310989861, - "1": 0.5629103383961787, - "2": 0.47319868251346003 - }, - "micro_accuracy": { - "0": 0.8136363636363636, - "1": 0.7890625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9789345953758336, - "1": 0.9781060555048576, - "2": 0.887834112188216 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f47dc117b157250ad6c50b33e07db8ebbc57776598f524bb06f1837e3c8ab363" - } - } - }, - { - "backend": "torch", - "profile": "padded_scale", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6083984375, - "micro_accuracy_known": 0.7079545454545455, - "macro_accuracy_all": 0.6669499186879391, - "macro_accuracy_known": 0.6982131961264363, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.740234375, - "micro_accuracy_known": 0.740234375, - "macro_accuracy_all": 0.8163789577060379, - "macro_accuracy_known": 0.8163789577060379, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8479662801440404, - "macro_accuracy_known": 0.8479662801440404, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6669499186879391, - "1": 0.8163789577060379, - "2": 0.8479662801440404 - }, - "precision": { - "0": 0.4364708703994419, - "1": 0.5067439148326214, - "2": 0.4842115297152765 - }, - "recall": { - "0": 0.6669499186879391, - "1": 0.8163789577060379, - "2": 0.8479662801440404 - }, - "f1": { - "0": 0.3532036739574734, - "1": 0.4547825015964639, - "2": 0.4843791657478431 - }, - "micro_accuracy": { - "0": 0.6083984375, - "1": 0.740234375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9816422474131364, - "1": 0.9800040672120581, - "2": 0.87391363290345 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6982131961264363, - "1": 0.8163789577060379, - "2": 0.8479662801440404 - }, - "precision": { - "0": 0.4633005721668513, - "1": 0.5067439148326214, - "2": 0.4842115297152765 - }, - "recall": { - "0": 0.6982131961264363, - "1": 0.8163789577060379, - "2": 0.8479662801440404 - }, - "f1": { - "0": 0.3815582044617631, - "1": 0.4547825015964639, - "2": 0.4843791657478431 - }, - "micro_accuracy": { - "0": 0.7079545454545455, - "1": 0.740234375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9852723215874596, - "1": 0.9800040672120581, - "2": 0.87391363290345 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "cbb6f01b4d836722ca0f7d2ed3eff92bc45fb1a439c532acc44b921362de319a" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7001953125, - "micro_accuracy_known": 0.8147727272727273, - "macro_accuracy_all": 0.7667568738562455, - "macro_accuracy_known": 0.802698602318257, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.798828125, - "micro_accuracy_known": 0.798828125, - "macro_accuracy_all": 0.8746073406102853, - "macro_accuracy_known": 0.8746073406102853, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.947265625, - "micro_accuracy_known": 0.947265625, - "macro_accuracy_all": 0.8888149192892535, - "macro_accuracy_known": 0.8888149192892535, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7667568738562455, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "precision": { - "0": 0.5807024505708717, - "1": 0.6306489543157549, - "2": 0.5383882427898227 - }, - "recall": { - "0": 0.7667568738562455, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "f1": { - "0": 0.504696621354642, - "1": 0.5965465365721195, - "2": 0.5418149517899491 - }, - "micro_accuracy": { - "0": 0.7001953125, - "1": 0.798828125, - "2": 0.947265625 - }, - "theilU": { - "0": 0.9760580484569257, - "1": 0.9784618583466062, - "2": 0.8922071716588353 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.802698602318257, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "precision": { - "0": 0.6066511702004402, - "1": 0.6306489543157549, - "2": 0.5383882427898227 - }, - "recall": { - "0": 0.802698602318257, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "f1": { - "0": 0.5409587030055907, - "1": 0.5965465365721195, - "2": 0.5418149517899491 - }, - "micro_accuracy": { - "0": 0.8147727272727273, - "1": 0.798828125, - "2": 0.947265625 - }, - "theilU": { - "0": 0.9795255977161335, - "1": 0.9784618583466062, - "2": 0.8922071716588353 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d3c685b1f5f33848c122d91eaa2487e4ac1b7577d4b907ba24fe9bdd2493289a" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.720703125, - "micro_accuracy_known": 0.8386363636363636, - "macro_accuracy_all": 0.7868714438529836, - "macro_accuracy_known": 0.8237560427835922, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.80859375, - "micro_accuracy_known": 0.80859375, - "macro_accuracy_all": 0.8859782374811823, - "macro_accuracy_known": 0.8859782374811823, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9482421875, - "micro_accuracy_known": 0.9482421875, - "macro_accuracy_all": 0.8924122215773433, - "macro_accuracy_known": 0.8924122215773433, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7868714438529836, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "precision": { - "0": 0.6029098124098125, - "1": 0.658480184510919, - "2": 0.4869479214022333 - }, - "recall": { - "0": 0.7868714438529836, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "f1": { - "0": 0.5327519750772313, - "1": 0.631791548560156, - "2": 0.4866169641277515 - }, - "micro_accuracy": { - "0": 0.720703125, - "1": 0.80859375, - "2": 0.9482421875 - }, - "theilU": { - "0": 0.9763493466551544, - "1": 0.978439571696028, - "2": 0.9049635740626394 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8237560427835922, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "precision": { - "0": 0.6307667448292449, - "1": 0.658480184510919, - "2": 0.4869479214022333 - }, - "recall": { - "0": 0.8237560427835922, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "f1": { - "0": 0.5724425923446524, - "1": 0.631791548560156, - "2": 0.4866169641277515 - }, - "micro_accuracy": { - "0": 0.8386363636363636, - "1": 0.80859375, - "2": 0.9482421875 - }, - "theilU": { - "0": 0.9798662629528586, - "1": 0.978439571696028, - "2": 0.9049635740626394 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "cc9c41b9c6a025b694d739c857670b1bf102b27bc6900ce26de38004610f0670" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7001953125, - "micro_accuracy_known": 0.8147727272727273, - "macro_accuracy_all": 0.7667568738562455, - "macro_accuracy_known": 0.802698602318257, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.798828125, - "micro_accuracy_known": 0.798828125, - "macro_accuracy_all": 0.8746073406102853, - "macro_accuracy_known": 0.8746073406102853, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9462890625, - "micro_accuracy_known": 0.9462890625, - "macro_accuracy_all": 0.8885998655258126, - "macro_accuracy_known": 0.8885998655258126, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7667568738562455, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "precision": { - "0": 0.5827471775095014, - "1": 0.6335959120462022, - "2": 0.5453938590940303 - }, - "recall": { - "0": 0.7667568738562455, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "f1": { - "0": 0.506324674971915, - "1": 0.5992704933601202, - "2": 0.5555219206262816 - }, - "micro_accuracy": { - "0": 0.7001953125, - "1": 0.798828125, - "2": 0.9462890625 - }, - "theilU": { - "0": 0.9752153553508828, - "1": 0.9778290861722726, - "2": 0.8896163281281433 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.802698602318257, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "precision": { - "0": 0.6066511702004402, - "1": 0.6335959120462022, - "2": 0.5453938590940303 - }, - "recall": { - "0": 0.802698602318257, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "f1": { - "0": 0.5409587030055907, - "1": 0.5992704933601202, - "2": 0.5555219206262816 - }, - "micro_accuracy": { - "0": 0.8147727272727273, - "1": 0.798828125, - "2": 0.9462890625 - }, - "theilU": { - "0": 0.9795255977161335, - "1": 0.9778290861722726, - "2": 0.8896163281281433 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d325bab19a8963d07437c39bac5eae2e0c4edec1351c633286bca0d9a5fbe889" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7138671875, - "micro_accuracy_known": 0.8306818181818182, - "macro_accuracy_all": 0.7763348411522016, - "macro_accuracy_known": 0.8127255368312111, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.80078125, - "micro_accuracy_known": 0.80078125, - "macro_accuracy_all": 0.8750309070338517, - "macro_accuracy_known": 0.8750309070338517, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.951171875, - "micro_accuracy_known": 0.951171875, - "macro_accuracy_all": 0.8930573828676659, - "macro_accuracy_known": 0.8930573828676659, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7763348411522016, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "precision": { - "0": 0.5956685863274311, - "1": 0.6400935973500224, - "2": 0.4878422547669985 - }, - "recall": { - "0": 0.7763348411522016, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "f1": { - "0": 0.5213717799875506, - "1": 0.6078415156177399, - "2": 0.4872362891815405 - }, - "micro_accuracy": { - "0": 0.7138671875, - "1": 0.80078125, - "2": 0.951171875 - }, - "theilU": { - "0": 0.9759950984057112, - "1": 0.9794779290735068, - "2": 0.911268120895833 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8127255368312111, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "precision": { - "0": 0.6230166189282731, - "1": 0.6400935973500224, - "2": 0.4878422547669985 - }, - "recall": { - "0": 0.8127255368312111, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "f1": { - "0": 0.5598373945920889, - "1": 0.6078415156177399, - "2": 0.4872362891815405 - }, - "micro_accuracy": { - "0": 0.8306818181818182, - "1": 0.80078125, - "2": 0.951171875 - }, - "theilU": { - "0": 0.9794519793613711, - "1": 0.9794779290735068, - "2": 0.911268120895833 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "22849d340ca95225e3491f5ab4f89bb3dd9fb0293629f209a41f7ed8dcab0279" - } - } - }, - { - "backend": "torch", - "profile": "mild_blur", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5732421875, - "micro_accuracy_known": 0.6670454545454545, - "macro_accuracy_all": 0.6217608361461465, - "macro_accuracy_known": 0.6509058753404972, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.716796875, - "micro_accuracy_known": 0.716796875, - "macro_accuracy_all": 0.7760047568204345, - "macro_accuracy_known": 0.7760047568204345, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90625, - "micro_accuracy_known": 0.90625, - "macro_accuracy_all": 0.8477748787805467, - "macro_accuracy_known": 0.8477748787805467, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6217608361461465, - "1": 0.7760047568204345, - "2": 0.8477748787805467 - }, - "precision": { - "0": 0.3923747042887668, - "1": 0.4729625378561548, - "2": 0.45276748958646207 - }, - "recall": { - "0": 0.6217608361461465, - "1": 0.7760047568204345, - "2": 0.8477748787805467 - }, - "f1": { - "0": 0.3098286263224549, - "1": 0.4144457423971506, - "2": 0.4602272886546586 - }, - "micro_accuracy": { - "0": 0.5732421875, - "1": 0.716796875, - "2": 0.90625 - }, - "theilU": { - "0": 0.9808773004478276, - "1": 0.978205854812268, - "2": 0.8352572065482408 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6509058753404972, - "1": 0.7760047568204345, - "2": 0.8477748787805467 - }, - "precision": { - "0": 0.4156998450267681, - "1": 0.4729625378561548, - "2": 0.45276748958646207 - }, - "recall": { - "0": 0.6509058753404972, - "1": 0.7760047568204345, - "2": 0.8477748787805467 - }, - "f1": { - "0": 0.33323086463322443, - "1": 0.4144457423971506, - "2": 0.4602272886546586 - }, - "micro_accuracy": { - "0": 0.6670454545454545, - "1": 0.716796875, - "2": 0.90625 - }, - "theilU": { - "0": 0.9865921099044167, - "1": 0.978205854812268, - "2": 0.8352572065482408 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "41ca22bea758197a8db0b33d9b5a455f400d67e108804f682da942e29a326654" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.677734375, - "micro_accuracy_known": 0.7886363636363637, - "macro_accuracy_all": 0.7337137504949759, - "macro_accuracy_known": 0.7681065825494279, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.83885455051539, - "macro_accuracy_known": 0.83885455051539, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9306640625, - "micro_accuracy_known": 0.9306640625, - "macro_accuracy_all": 0.8745362305987369, - "macro_accuracy_known": 0.8745362305987369, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "precision": { - "0": 0.5321559536906071, - "1": 0.5786134777401153, - "2": 0.48625507832424 - }, - "recall": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "f1": { - "0": 0.4559155966904529, - "1": 0.538010966674918, - "2": 0.488163755100861 - }, - "micro_accuracy": { - "0": 0.677734375, - "1": 0.77734375, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.9753369172766678, - "1": 0.9746607413592359, - "2": 0.86322146300684 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "precision": { - "0": 0.5605302905475915, - "1": 0.5786134777401153, - "2": 0.48625507832424 - }, - "recall": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "f1": { - "0": 0.4915588181246244, - "1": 0.538010966674918, - "2": 0.488163755100861 - }, - "micro_accuracy": { - "0": 0.7886363636363637, - "1": 0.77734375, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.9781961093647314, - "1": 0.9746607413592359, - "2": 0.86322146300684 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "6ef80ff81f1a7894b45c5b73a90e67e423afd814188490a10feb6ab0badf8069" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6962890625, - "micro_accuracy_known": 0.8102272727272727, - "macro_accuracy_all": 0.7528041989452045, - "macro_accuracy_known": 0.7880918957707609, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7880859375, - "micro_accuracy_known": 0.7880859375, - "macro_accuracy_all": 0.8586244742853139, - "macro_accuracy_known": 0.8586244742853139, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8755575254145912, - "macro_accuracy_known": 0.8755575254145912, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7528041989452045, - "1": 0.8586244742853139, - "2": 0.8755575254145912 - }, - "precision": { - "0": 0.5511089367253751, - "1": 0.60501332001332, - "2": 0.5056457479673166 - }, - "recall": { - "0": 0.7528041989452045, - "1": 0.8586244742853139, - "2": 0.8755575254145912 - }, - "f1": { - "0": 0.478667224092499, - "1": 0.5719566879373098, - "2": 0.5074951804108911 - }, - "micro_accuracy": { - "0": 0.6962890625, - "1": 0.7880859375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9755304799098776, - "1": 0.9747166499600433, - "2": 0.8723901240942663 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7880918957707609, - "1": 0.8586244742853139, - "2": 0.8755575254145912 - }, - "precision": { - "0": 0.5794760197986004, - "1": 0.60501332001332, - "2": 0.5056457479673166 - }, - "recall": { - "0": 0.7880918957707609, - "1": 0.8586244742853139, - "2": 0.8755575254145912 - }, - "f1": { - "0": 0.5156607903768262, - "1": 0.5719566879373098, - "2": 0.5074951804108911 - }, - "micro_accuracy": { - "0": 0.8102272727272727, - "1": 0.7880859375, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9787631407810776, - "1": 0.9747166499600433, - "2": 0.8723901240942663 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "01884b8962cc9ab966540e2d837d4c7da0ec65798cd091c6ef0a267dcd27922b" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.677734375, - "micro_accuracy_known": 0.7886363636363637, - "macro_accuracy_all": 0.7337137504949759, - "macro_accuracy_known": 0.7681065825494279, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.83885455051539, - "macro_accuracy_known": 0.83885455051539, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9287109375, - "micro_accuracy_known": 0.9287109375, - "macro_accuracy_all": 0.874106123071855, - "macro_accuracy_known": 0.874106123071855, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "precision": { - "0": 0.5339180594975297, - "1": 0.5815167532272796, - "2": 0.47167273756810363 - }, - "recall": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "f1": { - "0": 0.4573013583825211, - "1": 0.5405950591250958, - "2": 0.4792877241207191 - }, - "micro_accuracy": { - "0": 0.677734375, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9736912039665129, - "1": 0.9732162767702212, - "2": 0.8610713150038116 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "precision": { - "0": 0.5605302905475915, - "1": 0.5815167532272796, - "2": 0.47167273756810363 - }, - "recall": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "f1": { - "0": 0.4915588181246244, - "1": 0.5405950591250958, - "2": 0.4792877241207191 - }, - "micro_accuracy": { - "0": 0.7886363636363637, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9781961093647314, - "1": 0.9732162767702212, - "2": 0.8610713150038116 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4f934d1618e378ffa627b23c2ac65e69844b546ebeabf8a9ff3dc1abe654cbb0" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6943359375, - "micro_accuracy_known": 0.8079545454545455, - "macro_accuracy_all": 0.7469998871707434, - "macro_accuracy_known": 0.7820155068818719, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.78515625, - "micro_accuracy_known": 0.78515625, - "macro_accuracy_all": 0.8475133631742028, - "macro_accuracy_known": 0.8475133631742028, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8762274410949502, - "macro_accuracy_known": 0.8762274410949502, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7469998871707434, - "1": 0.8475133631742028, - "2": 0.8762274410949502 - }, - "precision": { - "0": 0.5503656752803511, - "1": 0.5955039230823984, - "2": 0.4710286751638461 - }, - "recall": { - "0": 0.7469998871707434, - "1": 0.8475133631742028, - "2": 0.8762274410949502 - }, - "f1": { - "0": 0.47623388901721003, - "1": 0.5585124530677456, - "2": 0.4717937931035682 - }, - "micro_accuracy": { - "0": 0.6943359375, - "1": 0.78515625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9755159345941234, - "1": 0.9763699588725825, - "2": 0.8824764932299821 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7820155068818719, - "1": 0.8475133631742028, - "2": 0.8762274410949502 - }, - "precision": { - "0": 0.5785969387755102, - "1": 0.5955039230823984, - "2": 0.4710286751638461 - }, - "recall": { - "0": 0.7820155068818719, - "1": 0.8475133631742028, - "2": 0.8762274410949502 - }, - "f1": { - "0": 0.5129236736305953, - "1": 0.5585124530677456, - "2": 0.4717937931035682 - }, - "micro_accuracy": { - "0": 0.8079545454545455, - "1": 0.78515625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9790867956707949, - "1": 0.9763699588725825, - "2": 0.8824764932299821 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "fa64b5c9c7801925d8369b5a78606c53a0cf28dae7900891a62afd32acfb2327" - } - } - }, - { - "backend": "torch", - "profile": "padded_rotation", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.626953125, - "micro_accuracy_known": 0.7295454545454545, - "macro_accuracy_all": 0.6894825951188874, - "macro_accuracy_known": 0.7218020917650853, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.75390625, - "micro_accuracy_known": 0.75390625, - "macro_accuracy_all": 0.8186366449343132, - "macro_accuracy_known": 0.8186366449343132, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9375, - "micro_accuracy_known": 0.9375, - "macro_accuracy_all": 0.8645416888485151, - "macro_accuracy_known": 0.8645416888485151, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6894825951188874, - "1": 0.8186366449343132, - "2": 0.8645416888485151 - }, - "precision": { - "0": 0.4509606109053623, - "1": 0.5272554605887939, - "2": 0.5304839392941253 - }, - "recall": { - "0": 0.6894825951188874, - "1": 0.8186366449343132, - "2": 0.8645416888485151 - }, - "f1": { - "0": 0.3704922818453067, - "1": 0.4730675278216979, - "2": 0.5146610023586723 - }, - "micro_accuracy": { - "0": 0.626953125, - "1": 0.75390625, - "2": 0.9375 - }, - "theilU": { - "0": 0.9864696739007237, - "1": 0.9838648937298985, - "2": 0.8875129848601512 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7218020917650853, - "1": 0.8186366449343132, - "2": 0.8645416888485151 - }, - "precision": { - "0": 0.4760108754294801, - "1": 0.5272554605887939, - "2": 0.5304839392941253 - }, - "recall": { - "0": 0.7218020917650853, - "1": 0.8186366449343132, - "2": 0.8645416888485151 - }, - "f1": { - "0": 0.3985048155665983, - "1": 0.4730675278216979, - "2": 0.5146610023586723 - }, - "micro_accuracy": { - "0": 0.7295454545454545, - "1": 0.75390625, - "2": 0.9375 - }, - "theilU": { - "0": 0.9888442520276529, - "1": 0.9838648937298985, - "2": 0.8875129848601512 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8d5e8e5f5ce18ec2325e7af134d0478a8d94f3a0eb3ebdd247cd0e401fc84092" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.712890625, - "micro_accuracy_known": 0.8295454545454546, - "macro_accuracy_all": 0.7719123421401505, - "macro_accuracy_known": 0.80809573317797, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8134765625, - "micro_accuracy_known": 0.8134765625, - "macro_accuracy_all": 0.8844011564041011, - "macro_accuracy_known": 0.8844011564041011, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.955078125, - "micro_accuracy_known": 0.955078125, - "macro_accuracy_all": 0.8991172880821792, - "macro_accuracy_known": 0.8991172880821792, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8991172880821792 - }, - "precision": { - "0": 0.5971263429003927, - "1": 0.650544413167566, - "2": 0.7230667004397573 - }, - "recall": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8991172880821792 - }, - "f1": { - "0": 0.5220924268702504, - "1": 0.6175385884403772, - "2": 0.7301143161018682 - }, - "micro_accuracy": { - "0": 0.712890625, - "1": 0.8134765625, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9796983137342548, - "1": 0.9853200869428569, - "2": 0.9004091093524909 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8991172880821792 - }, - "precision": { - "0": 0.6199776006843611, - "1": 0.650544413167566, - "2": 0.7230667004397573 - }, - "recall": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8991172880821792 - }, - "f1": { - "0": 0.5567898703212179, - "1": 0.6175385884403772, - "2": 0.7301143161018682 - }, - "micro_accuracy": { - "0": 0.8295454545454546, - "1": 0.8134765625, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9818061947009191, - "1": 0.9853200869428569, - "2": 0.9004091093524909 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5800310a5af4f08ead238feb7387f8a386306fd4c73751066ed4daf5f582385e" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.728515625, - "micro_accuracy_known": 0.8477272727272728, - "macro_accuracy_all": 0.7858937788827812, - "macro_accuracy_known": 0.8227325497679115, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8193359375, - "micro_accuracy_known": 0.8193359375, - "macro_accuracy_all": 0.8938961058990507, - "macro_accuracy_known": 0.8938961058990507, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.955078125, - "micro_accuracy_known": 0.955078125, - "macro_accuracy_all": 0.8939163424557017, - "macro_accuracy_known": 0.8939163424557017, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7858937788827812, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "precision": { - "0": 0.6238971458720955, - "1": 0.6953400558572973, - "2": 0.5980668832508124 - }, - "recall": { - "0": 0.7858937788827812, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "f1": { - "0": 0.550893852568599, - "1": 0.667193195303168, - "2": 0.5989997589031988 - }, - "micro_accuracy": { - "0": 0.728515625, - "1": 0.8193359375, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9785270264033544, - "1": 0.9794440649580853, - "2": 0.9080512895705167 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8227325497679115, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "precision": { - "0": 0.6489564935604769, - "1": 0.6953400558572973, - "2": 0.5980668832508124 - }, - "recall": { - "0": 0.8227325497679115, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "f1": { - "0": 0.5893105177635807, - "1": 0.667193195303168, - "2": 0.5989997589031988 - }, - "micro_accuracy": { - "0": 0.8477272727272728, - "1": 0.8193359375, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9804364063593483, - "1": 0.9794440649580853, - "2": 0.9080512895705167 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "a4fe4f9c8227d403646e89fbd3d15e5e9d3da49117101977b3ef906a82db17b1" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.712890625, - "micro_accuracy_known": 0.8295454545454546, - "macro_accuracy_all": 0.7719123421401505, - "macro_accuracy_known": 0.80809573317797, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8134765625, - "micro_accuracy_known": 0.8134765625, - "macro_accuracy_all": 0.8844011564041011, - "macro_accuracy_known": 0.8844011564041011, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.955078125, - "micro_accuracy_known": 0.955078125, - "macro_accuracy_all": 0.8992320898577799, - "macro_accuracy_known": 0.8992320898577799, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8992320898577799 - }, - "precision": { - "0": 0.5946379820193863, - "1": 0.6467656922886267, - "2": 0.7209311146140608 - }, - "recall": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8992320898577799 - }, - "f1": { - "0": 0.51975409950049, - "1": 0.6133830868572094, - "2": 0.7285496407376173 - }, - "micro_accuracy": { - "0": 0.712890625, - "1": 0.8134765625, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9802809101307122, - "1": 0.9862804202730304, - "2": 0.9010705188644093 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8992320898577799 - }, - "precision": { - "0": 0.6172370258644769, - "1": 0.6467656922886267, - "2": 0.7209311146140608 - }, - "recall": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8992320898577799 - }, - "f1": { - "0": 0.5540617360299274, - "1": 0.6133830868572094, - "2": 0.7285496407376173 - }, - "micro_accuracy": { - "0": 0.8295454545454546, - "1": 0.8134765625, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9824875251743693, - "1": 0.9862804202730304, - "2": 0.9010705188644093 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d11300eb48e6fcd1274f8609c9a5bdcb71f3bfc46c62a08a90a3689886320de6" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.724609375, - "micro_accuracy_known": 0.8431818181818181, - "macro_accuracy_all": 0.7816133790799933, - "macro_accuracy_known": 0.8182515062243679, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8154296875, - "micro_accuracy_known": 0.8154296875, - "macro_accuracy_all": 0.886118328121273, - "macro_accuracy_known": 0.886118328121273, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9560546875, - "micro_accuracy_known": 0.9560546875, - "macro_accuracy_all": 0.8941313962191426, - "macro_accuracy_known": 0.8941313962191426, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7816133790799933, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "precision": { - "0": 0.6198174189850105, - "1": 0.681502958140456, - "2": 0.5980321652758281 - }, - "recall": { - "0": 0.7816133790799933, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "f1": { - "0": 0.5453109659396796, - "1": 0.6485020586629996, - "2": 0.5990432558914093 - }, - "micro_accuracy": { - "0": 0.724609375, - "1": 0.8154296875, - "2": 0.9560546875 - }, - "theilU": { - "0": 0.9783879870872234, - "1": 0.9816632673398754, - "2": 0.9117838595208317 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8182515062243679, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "precision": { - "0": 0.6445375626212023, - "1": 0.681502958140456, - "2": 0.5980321652758281 - }, - "recall": { - "0": 0.8182515062243679, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "f1": { - "0": 0.5830756999224902, - "1": 0.6485020586629996, - "2": 0.5990432558914093 - }, - "micro_accuracy": { - "0": 0.8431818181818181, - "1": 0.8154296875, - "2": 0.9560546875 - }, - "theilU": { - "0": 0.98027380370052, - "1": 0.9816632673398754, - "2": 0.9117838595208317 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "0730f2b99cba832193e8e2a98a046e0cb217e607da6dd911d5cfd447a0f23120" - } - } - }, - { - "backend": "onnx", - "profile": "brightness", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.564453125, - "micro_accuracy_known": 0.6568181818181819, - "macro_accuracy_all": 0.6183162410283385, - "macro_accuracy_known": 0.6472998148265419, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7021484375, - "micro_accuracy_known": 0.7021484375, - "macro_accuracy_all": 0.7693243600883878, - "macro_accuracy_known": 0.7693243600883878, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.904296875, - "micro_accuracy_known": 0.904296875, - "macro_accuracy_all": 0.8518896032611248, - "macro_accuracy_known": 0.8518896032611248, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6183162410283385, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "precision": { - "0": 0.38802503052503046, - "1": 0.4516077494746436, - "2": 0.47059001308503184 - }, - "recall": { - "0": 0.6183162410283385, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "f1": { - "0": 0.30440413363873187, - "1": 0.39522707704691634, - "2": 0.4789486871221942 - }, - "micro_accuracy": { - "0": 0.564453125, - "1": 0.7021484375, - "2": 0.904296875 - }, - "theilU": { - "0": 0.9788721719654571, - "1": 0.9776673557201376, - "2": 0.8301641891930855 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6472998148265419, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "precision": { - "0": 0.4118499161182088, - "1": 0.4516077494746436, - "2": 0.47059001308503184 - }, - "recall": { - "0": 0.6472998148265419, - "1": 0.7693243600883878, - "2": 0.8518896032611248 - }, - "f1": { - "0": 0.32788046715703073, - "1": 0.39522707704691634, - "2": 0.4789486871221942 - }, - "micro_accuracy": { - "0": 0.6568181818181819, - "1": 0.7021484375, - "2": 0.904296875 - }, - "theilU": { - "0": 0.9861901698381681, - "1": 0.9776673557201376, - "2": 0.8301641891930855 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "7ce4c55575fdf5d685b8e9fed2c97ec7d3e96db25c16f2bc317ef2bd576f741a" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7294239030393783, - "macro_accuracy_known": 0.7636156484943492, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.8404213357880577, - "macro_accuracy_known": 0.8404213357880577, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9326171875, - "micro_accuracy_known": 0.9326171875, - "macro_accuracy_all": 0.8751058942912557, - "macro_accuracy_known": 0.8751058942912557, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8751058942912557 - }, - "precision": { - "0": 0.5294163250289079, - "1": 0.5753869747376242, - "2": 0.48736023867192746 - }, - "recall": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8751058942912557 - }, - "f1": { - "0": 0.45160980096785147, - "1": 0.5352862820426186, - "2": 0.4894029252721351 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.77734375, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.9749195921932904, - "1": 0.9759565364987944, - "2": 0.8707916416488142 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8751058942912557 - }, - "precision": { - "0": 0.5577560074955908, - "1": 0.5753869747376242, - "2": 0.48736023867192746 - }, - "recall": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8751058942912557 - }, - "f1": { - "0": 0.486815760963536, - "1": 0.5352862820426186, - "2": 0.4894029252721351 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.77734375, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.9784480772656535, - "1": 0.9759565364987944, - "2": 0.8707916416488142 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "8863302017f143771a3e1a993a0cb542030f5ccad8af09fe7c7a500ded1212fb" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6923828125, - "micro_accuracy_known": 0.8056818181818182, - "macro_accuracy_all": 0.7466012977108814, - "macro_accuracy_known": 0.7815982335410788, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.787109375, - "micro_accuracy_known": 0.787109375, - "macro_accuracy_all": 0.8588238206905426, - "macro_accuracy_known": 0.8588238206905426, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.935546875, - "micro_accuracy_known": 0.935546875, - "macro_accuracy_all": 0.8772082960647901, - "macro_accuracy_known": 0.8772082960647901, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7466012977108814, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "precision": { - "0": 0.54833087874325, - "1": 0.5991659241659242, - "2": 0.4875648805802487 - }, - "recall": { - "0": 0.7466012977108814, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "f1": { - "0": 0.4731994993617265, - "1": 0.5666242339543061, - "2": 0.4895885600320747 - }, - "micro_accuracy": { - "0": 0.6923828125, - "1": 0.787109375, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9743492089164368, - "1": 0.9752040537736837, - "2": 0.8813345819108521 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7815982335410788, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "precision": { - "0": 0.5746031746031747, - "1": 0.5991659241659242, - "2": 0.4875648805802487 - }, - "recall": { - "0": 0.7815982335410788, - "1": 0.8588238206905426, - "2": 0.8772082960647901 - }, - "f1": { - "0": 0.5079607025155944, - "1": 0.5666242339543061, - "2": 0.4895885600320747 - }, - "micro_accuracy": { - "0": 0.8056818181818182, - "1": 0.787109375, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9786744434452747, - "1": 0.9752040537736837, - "2": 0.8813345819108521 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "6c767dae66770d07fb96f4e5c2445fb795a2a7f544aadbbc7c8469476eee9b34" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.67578125, - "micro_accuracy_known": 0.7863636363636364, - "macro_accuracy_all": 0.7294239030393783, - "macro_accuracy_known": 0.7636156484943492, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.8404213357880577, - "macro_accuracy_known": 0.8404213357880577, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8738627786342926, - "macro_accuracy_known": 0.8738627786342926, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8738627786342926 - }, - "precision": { - "0": 0.52702981411863, - "1": 0.5738407665131803, - "2": 0.455366299921629 - }, - "recall": { - "0": 0.7294239030393783, - "1": 0.8404213357880577, - "2": 0.8738627786342926 - }, - "f1": { - "0": 0.44949803039146796, - "1": 0.5335719393755183, - "2": 0.4625762569996856 - }, - "micro_accuracy": { - "0": 0.67578125, - "1": 0.77734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9739699360130293, - "1": 0.9751385992153466, - "2": 0.8680294530908625 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8738627786342926 - }, - "precision": { - "0": 0.5531514209349262, - "1": 0.5738407665131803, - "2": 0.455366299921629 - }, - "recall": { - "0": 0.7636156484943492, - "1": 0.8404213357880577, - "2": 0.8738627786342926 - }, - "f1": { - "0": 0.4827628758095469, - "1": 0.5335719393755183, - "2": 0.4625762569996856 - }, - "micro_accuracy": { - "0": 0.7863636363636364, - "1": 0.77734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9792579897039164, - "1": 0.9751385992153466, - "2": 0.8680294530908625 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "259a97400256b4cd082e5fbb08f0b140d8c7d27b7048fccb1d987fd45d903ca8" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6884765625, - "micro_accuracy_known": 0.8011363636363636, - "macro_accuracy_all": 0.7391386111437172, - "macro_accuracy_known": 0.7737857335410788, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7822265625, - "micro_accuracy_known": 0.7822265625, - "macro_accuracy_all": 0.8454904873572092, - "macro_accuracy_known": 0.8454904873572092, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8768253954615906, - "macro_accuracy_known": 0.8768253954615906, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7391386111437172, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "precision": { - "0": 0.5457256622785633, - "1": 0.5872092018109718, - "2": 0.455852200251995 - }, - "recall": { - "0": 0.7391386111437172, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "f1": { - "0": 0.46824913275817837, - "1": 0.5494891732794056, - "2": 0.4568076265665339 - }, - "micro_accuracy": { - "0": 0.6884765625, - "1": 0.7822265625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9742392602318141, - "1": 0.9767525227713265, - "2": 0.8877672927386754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7737857335410788, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "precision": { - "0": 0.5716997119132351, - "1": 0.5872092018109718, - "2": 0.455852200251995 - }, - "recall": { - "0": 0.7737857335410788, - "1": 0.8454904873572092, - "2": 0.8768253954615906 - }, - "f1": { - "0": 0.5024339900483179, - "1": 0.5494891732794056, - "2": 0.4568076265665339 - }, - "micro_accuracy": { - "0": 0.8011363636363636, - "1": 0.7822265625, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9788865267171871, - "1": 0.9767525227713265, - "2": 0.8877672927386754 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "5a99be9f9525e7e393c04af599aa4aa1a2ca1f71132502aabde452e8abac9f4b" - } - } - }, - { - "backend": "onnx", - "profile": "contrast", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.56640625, - "micro_accuracy_known": 0.6590909090909091, - "macro_accuracy_all": 0.6192248718564508, - "macro_accuracy_known": 0.648251037724722, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7041015625, - "micro_accuracy_known": 0.7041015625, - "macro_accuracy_all": 0.7684694057953135, - "macro_accuracy_known": 0.7684694057953135, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9033203125, - "micro_accuracy_known": 0.9033203125, - "macro_accuracy_all": 0.8458756495045662, - "macro_accuracy_known": 0.8458756495045662, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6192248718564508, - "1": 0.7684694057953135, - "2": 0.8458756495045662 - }, - "precision": { - "0": 0.39090219304505014, - "1": 0.45272122380136304, - "2": 0.4681592226653051 - }, - "recall": { - "0": 0.6192248718564508, - "1": 0.7684694057953135, - "2": 0.8458756495045662 - }, - "f1": { - "0": 0.30835454161746234, - "1": 0.39899597259403363, - "2": 0.4747118873014382 - }, - "micro_accuracy": { - "0": 0.56640625, - "1": 0.7041015625, - "2": 0.9033203125 - }, - "theilU": { - "0": 0.9773172919950401, - "1": 0.9772033791964636, - "2": 0.8282624401249864 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.648251037724722, - "1": 0.7684694057953135, - "2": 0.8458756495045662 - }, - "precision": { - "0": 0.41182616203052175, - "1": 0.45272122380136304, - "2": 0.4681592226653051 - }, - "recall": { - "0": 0.648251037724722, - "1": 0.7684694057953135, - "2": 0.8458756495045662 - }, - "f1": { - "0": 0.3299506802881032, - "1": 0.39899597259403363, - "2": 0.4747118873014382 - }, - "micro_accuracy": { - "0": 0.6590909090909091, - "1": 0.7041015625, - "2": 0.9033203125 - }, - "theilU": { - "0": 0.9843412576474854, - "1": 0.9772033791964636, - "2": 0.8282624401249864 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "0170671b16f92de31bcb8ab956ad4e0a95f393a292b0c84bb2e81625e9eaed48" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.673828125, - "micro_accuracy_known": 0.7840909090909091, - "macro_accuracy_all": 0.7329318221011072, - "macro_accuracy_known": 0.7672880012620965, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.838827523488363, - "macro_accuracy_known": 0.838827523488363, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.931640625, - "micro_accuracy_known": 0.931640625, - "macro_accuracy_all": 0.8808574168602449, - "macro_accuracy_known": 0.8808574168602449, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7329318221011072, - "1": 0.838827523488363, - "2": 0.8808574168602449 - }, - "precision": { - "0": 0.5274203847154667, - "1": 0.5751911388275025, - "2": 0.4893141403945866 - }, - "recall": { - "0": 0.7329318221011072, - "1": 0.838827523488363, - "2": 0.8808574168602449 - }, - "f1": { - "0": 0.4517977437487192, - "1": 0.5325162973083407, - "2": 0.4919130847970722 - }, - "micro_accuracy": { - "0": 0.673828125, - "1": 0.7763671875, - "2": 0.931640625 - }, - "theilU": { - "0": 0.9752305321748128, - "1": 0.9756362232063878, - "2": 0.8678108446554775 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7672880012620965, - "1": 0.838827523488363, - "2": 0.8808574168602449 - }, - "precision": { - "0": 0.5572869563386805, - "1": 0.5751911388275025, - "2": 0.4893141403945866 - }, - "recall": { - "0": 0.7672880012620965, - "1": 0.838827523488363, - "2": 0.8808574168602449 - }, - "f1": { - "0": 0.48836588648781143, - "1": 0.5325162973083407, - "2": 0.4919130847970722 - }, - "micro_accuracy": { - "0": 0.7840909090909091, - "1": 0.7763671875, - "2": 0.931640625 - }, - "theilU": { - "0": 0.978166314512769, - "1": 0.9756362232063878, - "2": 0.8678108446554775 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "1d73cefc7dba54d440702638366ab83c33eda6d0f42da50c847d8722d93bd964" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.693359375, - "micro_accuracy_known": 0.8068181818181818, - "macro_accuracy_all": 0.7526127864403591, - "macro_accuracy_known": 0.787891510804751, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7861328125, - "micro_accuracy_known": 0.7861328125, - "macro_accuracy_all": 0.8584998496606892, - "macro_accuracy_known": 0.8584998496606892, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.882363748246895, - "macro_accuracy_known": 0.882363748246895, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7526127864403591, - "1": 0.8584998496606892, - "2": 0.882363748246895 - }, - "precision": { - "0": 0.5535377566305403, - "1": 0.6009100018068628, - "2": 0.4707050709009006 - }, - "recall": { - "0": 0.7526127864403591, - "1": 0.8584998496606892, - "2": 0.882363748246895 - }, - "f1": { - "0": 0.48201440085324226, - "1": 0.5676364116280895, - "2": 0.47351889197705443 - }, - "micro_accuracy": { - "0": 0.693359375, - "1": 0.7861328125, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9739313881573897, - "1": 0.9746861387960117, - "2": 0.878973670128657 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.787891510804751, - "1": 0.8584998496606892, - "2": 0.882363748246895 - }, - "precision": { - "0": 0.5821204574801698, - "1": 0.6009100018068628, - "2": 0.4707050709009006 - }, - "recall": { - "0": 0.787891510804751, - "1": 0.8584998496606892, - "2": 0.882363748246895 - }, - "f1": { - "0": 0.5195083909386035, - "1": 0.5676364116280895, - "2": 0.47351889197705443 - }, - "micro_accuracy": { - "0": 0.8068181818181818, - "1": 0.7861328125, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9776519866535184, - "1": 0.9746861387960117, - "2": 0.878973670128657 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "3e25a4a38f194e87496e204979e03829bef3c821cbc48f465af62a3d7254e839" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.673828125, - "micro_accuracy_known": 0.7840909090909091, - "macro_accuracy_all": 0.7329318221011072, - "macro_accuracy_known": 0.7672880012620965, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7763671875, - "micro_accuracy_known": 0.7763671875, - "macro_accuracy_all": 0.838827523488363, - "macro_accuracy_known": 0.838827523488363, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.927734375, - "micro_accuracy_known": 0.927734375, - "macro_accuracy_all": 0.8793744930498045, - "macro_accuracy_known": 0.8793744930498045, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7329318221011072, - "1": 0.838827523488363, - "2": 0.8793744930498045 - }, - "precision": { - "0": 0.5285132808903301, - "1": 0.5805785432422989, - "2": 0.4732703316874566 - }, - "recall": { - "0": 0.7329318221011072, - "1": 0.838827523488363, - "2": 0.8793744930498045 - }, - "f1": { - "0": 0.4523983443493198, - "1": 0.5372913996766249, - "2": 0.4815530694487088 - }, - "micro_accuracy": { - "0": 0.673828125, - "1": 0.7763671875, - "2": 0.927734375 - }, - "theilU": { - "0": 0.9739882264817878, - "1": 0.9734317765695701, - "2": 0.8626994912738378 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7672880012620965, - "1": 0.838827523488363, - "2": 0.8793744930498045 - }, - "precision": { - "0": 0.5565173562596243, - "1": 0.5805785432422989, - "2": 0.4732703316874566 - }, - "recall": { - "0": 0.7672880012620965, - "1": 0.838827523488363, - "2": 0.8793744930498045 - }, - "f1": { - "0": 0.48743567395075393, - "1": 0.5372913996766249, - "2": 0.4815530694487088 - }, - "micro_accuracy": { - "0": 0.7840909090909091, - "1": 0.7763671875, - "2": 0.927734375 - }, - "theilU": { - "0": 0.9786355617143068, - "1": 0.9734317765695701, - "2": 0.8626994912738378 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "d359546e8b23b10341ec17cc7c56dc263822ce3fc8943fb564d8451bd989e666" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.689453125, - "micro_accuracy_known": 0.8022727272727272, - "macro_accuracy_all": 0.7451500998731949, - "macro_accuracy_known": 0.780079010804751, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.78125, - "micro_accuracy_known": 0.78125, - "macro_accuracy_all": 0.8451665163273558, - "macro_accuracy_known": 0.8451665163273558, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.935546875, - "micro_accuracy_known": 0.935546875, - "macro_accuracy_all": 0.8824392458446987, - "macro_accuracy_known": 0.8824392458446987, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7451500998731949, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "precision": { - "0": 0.5531476569407604, - "1": 0.5941586316025779, - "2": 0.47314272371396204 - }, - "recall": { - "0": 0.7451500998731949, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "f1": { - "0": 0.4794907415472485, - "1": 0.5566152643229422, - "2": 0.4751092613473271 - }, - "micro_accuracy": { - "0": 0.689453125, - "1": 0.78125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9737439441057982, - "1": 0.9749939611792631, - "2": 0.8842953741962183 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.780079010804751, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "precision": { - "0": 0.5818152365083774, - "1": 0.5941586316025779, - "2": 0.47314272371396204 - }, - "recall": { - "0": 0.780079010804751, - "1": 0.8451665163273558, - "2": 0.8824392458446987 - }, - "f1": { - "0": 0.5167965265318238, - "1": 0.5566152643229422, - "2": 0.4751092613473271 - }, - "micro_accuracy": { - "0": 0.8022727272727272, - "1": 0.78125, - "2": 0.935546875 - }, - "theilU": { - "0": 0.9777734412236606, - "1": 0.9749939611792631, - "2": 0.8842953741962183 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "94611b9de35f8c83e79af9043f8d0f937c4bbacdafa44a38b0c5a08676219a01" - } - } - }, - { - "backend": "onnx", - "profile": "gamma", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5615234375, - "micro_accuracy_known": 0.6534090909090909, - "macro_accuracy_all": 0.6141808443556284, - "macro_accuracy_known": 0.6429705714347984, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.705078125, - "micro_accuracy_known": 0.705078125, - "macro_accuracy_all": 0.7690586762861187, - "macro_accuracy_known": 0.7690586762861187, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90234375, - "micro_accuracy_known": 0.90234375, - "macro_accuracy_all": 0.8461189939421286, - "macro_accuracy_known": 0.8461189939421286, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6141808443556284, - "1": 0.7690586762861187, - "2": 0.8461189939421286 - }, - "precision": { - "0": 0.38365196769042925, - "1": 0.456476598114529, - "2": 0.4333015824183962 - }, - "recall": { - "0": 0.6141808443556284, - "1": 0.7690586762861187, - "2": 0.8461189939421286 - }, - "f1": { - "0": 0.3019306606622903, - "1": 0.399159414905154, - "2": 0.43991081695457057 - }, - "micro_accuracy": { - "0": 0.5615234375, - "1": 0.705078125, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9798237660772963, - "1": 0.9782892494572161, - "2": 0.8353045799618541 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6429705714347984, - "1": 0.7690586762861187, - "2": 0.8461189939421286 - }, - "precision": { - "0": 0.40722797978895536, - "1": 0.456476598114529, - "2": 0.4333015824183962 - }, - "recall": { - "0": 0.6429705714347984, - "1": 0.7690586762861187, - "2": 0.8461189939421286 - }, - "f1": { - "0": 0.32516699289604, - "1": 0.399159414905154, - "2": 0.43991081695457057 - }, - "micro_accuracy": { - "0": 0.6534090909090909, - "1": 0.705078125, - "2": 0.90234375 - }, - "theilU": { - "0": 0.9853370880062943, - "1": 0.9782892494572161, - "2": 0.8353045799618541 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "34b9b0659cc44e54ea9916736d14d6d2ee7316403662deb2f252267564e2c8b5" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6767578125, - "micro_accuracy_known": 0.7875, - "macro_accuracy_all": 0.7295103466647064, - "macro_accuracy_known": 0.7637061441646145, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7802734375, - "micro_accuracy_known": 0.7802734375, - "macro_accuracy_all": 0.8420738412346808, - "macro_accuracy_known": 0.8420738412346808, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8732648242676523, - "macro_accuracy_known": 0.8732648242676523, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8732648242676523 - }, - "precision": { - "0": 0.531420397616411, - "1": 0.5867950942840812, - "2": 0.4870907120815545 - }, - "recall": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8732648242676523 - }, - "f1": { - "0": 0.4531562965765729, - "1": 0.5457626885494472, - "2": 0.4887087559716509 - }, - "micro_accuracy": { - "0": 0.6767578125, - "1": 0.7802734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9742895975077354, - "1": 0.9744925867275461, - "2": 0.8621675172969387 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8732648242676523 - }, - "precision": { - "0": 0.5599565842597202, - "1": 0.5867950942840812, - "2": 0.4870907120815545 - }, - "recall": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8732648242676523 - }, - "f1": { - "0": 0.48859279520090987, - "1": 0.5457626885494472, - "2": 0.4887087559716509 - }, - "micro_accuracy": { - "0": 0.7875, - "1": 0.7802734375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.977083484952786, - "1": 0.9744925867275461, - "2": 0.8621675172969387 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "53e27697e525c6fb7d44f1f491259c4e9ca0f02ca638b128ea97861cf0fd8d8b" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6943359375, - "micro_accuracy_known": 0.8079545454545455, - "macro_accuracy_all": 0.7483461161289127, - "macro_accuracy_known": 0.7834248403224554, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7890625, - "micro_accuracy_known": 0.7890625, - "macro_accuracy_all": 0.8602961459569857, - "macro_accuracy_known": 0.8602961459569857, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.93359375, - "micro_accuracy_known": 0.93359375, - "macro_accuracy_all": 0.8761554797812316, - "macro_accuracy_known": 0.8761554797812316, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7483461161289127, - "1": 0.8602961459569857, - "2": 0.8761554797812316 - }, - "precision": { - "0": 0.5523809523809525, - "1": 0.6071671099068359, - "2": 0.5064686502228765 - }, - "recall": { - "0": 0.7483461161289127, - "1": 0.8602961459569857, - "2": 0.8761554797812316 - }, - "f1": { - "0": 0.47694678582072514, - "1": 0.5750990141622918, - "2": 0.5085626120950417 - }, - "micro_accuracy": { - "0": 0.6943359375, - "1": 0.7890625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9742632627716996, - "1": 0.9740924117631742, - "2": 0.8730894877122698 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7834248403224554, - "1": 0.8602961459569857, - "2": 0.8761554797812316 - }, - "precision": { - "0": 0.5811162870945481, - "1": 0.6071671099068359, - "2": 0.5064686502228765 - }, - "recall": { - "0": 0.7834248403224554, - "1": 0.8602961459569857, - "2": 0.8761554797812316 - }, - "f1": { - "0": 0.5139374599574351, - "1": 0.5750990141622918, - "2": 0.5085626120950417 - }, - "micro_accuracy": { - "0": 0.8079545454545455, - "1": 0.7890625, - "2": 0.93359375 - }, - "theilU": { - "0": 0.9773933524395068, - "1": 0.9740924117631742, - "2": 0.8730894877122698 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "180051f31bf25e5c41d328f1d32b874d96d7da115f79bc3e816131c4fb608fcc" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6767578125, - "micro_accuracy_known": 0.7875, - "macro_accuracy_all": 0.7295103466647064, - "macro_accuracy_known": 0.7637061441646145, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7802734375, - "micro_accuracy_known": 0.7802734375, - "macro_accuracy_all": 0.8420738412346808, - "macro_accuracy_known": 0.8420738412346808, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9267578125, - "micro_accuracy_known": 0.9267578125, - "macro_accuracy_all": 0.8720217086106892, - "macro_accuracy_known": 0.8720217086106892, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5307644801850101, - "1": 0.5851717239875135, - "2": 0.45511022909489407 - }, - "recall": { - "0": 0.7295103466647064, - "1": 0.8420738412346808, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.4523914739283053, - "1": 0.5439742699115124, - "2": 0.46190078167653675 - }, - "micro_accuracy": { - "0": 0.6767578125, - "1": 0.7802734375, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9733374322783351, - "1": 0.9736734244458565, - "2": 0.859399562508141 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8720217086106892 - }, - "precision": { - "0": 0.5572348547262043, - "1": 0.5851717239875135, - "2": 0.45511022909489407 - }, - "recall": { - "0": 0.7637061441646145, - "1": 0.8420738412346808, - "2": 0.8720217086106892 - }, - "f1": { - "0": 0.4860776314779266, - "1": 0.5439742699115124, - "2": 0.46190078167653675 - }, - "micro_accuracy": { - "0": 0.7875, - "1": 0.7802734375, - "2": 0.9267578125 - }, - "theilU": { - "0": 0.9778933973910489, - "1": 0.9736734244458565, - "2": 0.859399562508141 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "70110574c273f56742a471b62a872259b1764aa8deae45f56962c339d255a420" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6904296875, - "micro_accuracy_known": 0.803409090909091, - "macro_accuracy_all": 0.7408834295617485, - "macro_accuracy_known": 0.7756123403224554, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7841796875, - "micro_accuracy_known": 0.7841796875, - "macro_accuracy_all": 0.8469628126236521, - "macro_accuracy_known": 0.8469628126236521, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.875772579178032, - "macro_accuracy_known": 0.875772579178032, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7408834295617485, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "precision": { - "0": 0.5516256157635469, - "1": 0.5975857725857726, - "2": 0.47155516926017454 - }, - "recall": { - "0": 0.7408834295617485, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "f1": { - "0": 0.4734215010763998, - "1": 0.5600088207579761, - "2": 0.4723728912301283 - }, - "micro_accuracy": { - "0": 0.6904296875, - "1": 0.7841796875, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9741326742333372, - "1": 0.9752980882660742, - "2": 0.8808206854269369 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7756123403224554, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "precision": { - "0": 0.5802217637957711, - "1": 0.5975857725857726, - "2": 0.47155516926017454 - }, - "recall": { - "0": 0.7756123403224554, - "1": 0.8469628126236521, - "2": 0.875772579178032 - }, - "f1": { - "0": 0.5100264952854606, - "1": 0.5600088207579761, - "2": 0.4723728912301283 - }, - "micro_accuracy": { - "0": 0.803409090909091, - "1": 0.7841796875, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.977581297969741, - "1": 0.9752980882660742, - "2": 0.8808206854269369 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "194b2630432d2be456327181e35e70a27f0a92c98a715ef1e9439a9b9ec5c71e" - } - } - }, - { - "backend": "onnx", - "profile": "gaussian_noise", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.60546875, - "micro_accuracy_known": 0.7045454545454546, - "macro_accuracy_all": 0.6545309815537624, - "macro_accuracy_known": 0.685212121314095, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7265625, - "micro_accuracy_known": 0.7265625, - "macro_accuracy_all": 0.8006316394575475, - "macro_accuracy_known": 0.8006316394575475, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9111328125, - "micro_accuracy_known": 0.9111328125, - "macro_accuracy_all": 0.8513848870135886, - "macro_accuracy_known": 0.8513848870135886, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6545309815537624, - "1": 0.8006316394575475, - "2": 0.8513848870135886 - }, - "precision": { - "0": 0.41837055576947757, - "1": 0.48698224852071004, - "2": 0.4309082949296677 - }, - "recall": { - "0": 0.6545309815537624, - "1": 0.8006316394575475, - "2": 0.8513848870135886 - }, - "f1": { - "0": 0.3380026963576196, - "1": 0.43751274823921404, - "2": 0.4420682361292737 - }, - "micro_accuracy": { - "0": 0.60546875, - "1": 0.7265625, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9815691113390748, - "1": 0.9800305538464384, - "2": 0.8500065528057964 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.685212121314095, - "1": 0.8006316394575475, - "2": 0.8513848870135886 - }, - "precision": { - "0": 0.4440408357075024, - "1": 0.48698224852071004, - "2": 0.4309082949296677 - }, - "recall": { - "0": 0.685212121314095, - "1": 0.8006316394575475, - "2": 0.8513848870135886 - }, - "f1": { - "0": 0.3646380634428373, - "1": 0.43751274823921404, - "2": 0.4420682361292737 - }, - "micro_accuracy": { - "0": 0.7045454545454546, - "1": 0.7265625, - "2": 0.9111328125 - }, - "theilU": { - "0": 0.9862999206709946, - "1": 0.9800305538464384, - "2": 0.8500065528057964 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c1a04168aec32b745922e861c532823265f846201f08cd0f44adf75cb4b13132" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6845703125, - "micro_accuracy_known": 0.7965909090909091, - "macro_accuracy_all": 0.7349476371962624, - "macro_accuracy_known": 0.7693983076898373, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7822265625, - "micro_accuracy_known": 0.7822265625, - "macro_accuracy_all": 0.8494674087128212, - "macro_accuracy_known": 0.8494674087128212, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9326171875, - "micro_accuracy_known": 0.9326171875, - "macro_accuracy_all": 0.8717584528209592, - "macro_accuracy_known": 0.8717584528209592, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7349476371962624, - "1": 0.8494674087128212, - "2": 0.8717584528209592 - }, - "precision": { - "0": 0.5411203703703703, - "1": 0.5829895151513189, - "2": 0.5462405993973666 - }, - "recall": { - "0": 0.7349476371962624, - "1": 0.8494674087128212, - "2": 0.8717584528209592 - }, - "f1": { - "0": 0.45927125296773524, - "1": 0.5395870324147068, - "2": 0.5278130382928162 - }, - "micro_accuracy": { - "0": 0.6845703125, - "1": 0.7822265625, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.976897029098277, - "1": 0.9802727288675025, - "2": 0.8655864765618194 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7693983076898373, - "1": 0.8494674087128212, - "2": 0.8717584528209592 - }, - "precision": { - "0": 0.5722319688109162, - "1": 0.5829895151513189, - "2": 0.5462405993973666 - }, - "recall": { - "0": 0.7693983076898373, - "1": 0.8494674087128212, - "2": 0.8717584528209592 - }, - "f1": { - "0": 0.49678406449595697, - "1": 0.5395870324147068, - "2": 0.5278130382928162 - }, - "micro_accuracy": { - "0": 0.7965909090909091, - "1": 0.7822265625, - "2": 0.9326171875 - }, - "theilU": { - "0": 0.9793373234989116, - "1": 0.9802727288675025, - "2": 0.8655864765618194 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c6bb08b5b09e71cf8acf65c13f5e35176145117e4aaa7b5c74b57e0862c47441" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7021484375, - "micro_accuracy_known": 0.8170454545454545, - "macro_accuracy_all": 0.7514959716550446, - "macro_accuracy_known": 0.7867223453263748, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7919921875, - "micro_accuracy_known": 0.7919921875, - "macro_accuracy_all": 0.8648444155532427, - "macro_accuracy_known": 0.8648444155532427, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8751481575271653, - "macro_accuracy_known": 0.8751481575271653, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7514959716550446, - "1": 0.8648444155532427, - "2": 0.8751481575271653 - }, - "precision": { - "0": 0.5646839223494275, - "1": 0.6061633777074048, - "2": 0.5289758286493282 - }, - "recall": { - "0": 0.7514959716550446, - "1": 0.8648444155532427, - "2": 0.8751481575271653 - }, - "f1": { - "0": 0.4852004989110314, - "1": 0.5707810457890382, - "2": 0.5109529116716834 - }, - "micro_accuracy": { - "0": 0.7021484375, - "1": 0.7919921875, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9759940415702356, - "1": 0.9774621379883017, - "2": 0.8815016691622108 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7867223453263748, - "1": 0.8648444155532427, - "2": 0.8751481575271653 - }, - "precision": { - "0": 0.5942127215849844, - "1": 0.6061633777074048, - "2": 0.5289758286493282 - }, - "recall": { - "0": 0.7867223453263748, - "1": 0.8648444155532427, - "2": 0.8751481575271653 - }, - "f1": { - "0": 0.5230604350758373, - "1": 0.5707810457890382, - "2": 0.5109529116716834 - }, - "micro_accuracy": { - "0": 0.8170454545454545, - "1": 0.7919921875, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9792158970471372, - "1": 0.9774621379883017, - "2": 0.8815016691622108 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "0405bf5f07ef0fc6de674f795de512316e5fbca542fc65e69cabe291de5ae5c6" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6845703125, - "micro_accuracy_known": 0.7965909090909091, - "macro_accuracy_all": 0.7349476371962624, - "macro_accuracy_known": 0.7693983076898373, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.783203125, - "micro_accuracy_known": 0.783203125, - "macro_accuracy_all": 0.8511340753794879, - "macro_accuracy_known": 0.8511340753794879, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8704905827739597, - "macro_accuracy_known": 0.8704905827739597, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7349476371962624, - "1": 0.8511340753794879, - "2": 0.8704905827739597 - }, - "precision": { - "0": 0.5404300479881875, - "1": 0.5858492698658453, - "2": 0.5296432768315602 - }, - "recall": { - "0": 0.7349476371962624, - "1": 0.8511340753794879, - "2": 0.8704905827739597 - }, - "f1": { - "0": 0.4584879561309747, - "1": 0.5427213874018971, - "2": 0.5179607527327961 - }, - "micro_accuracy": { - "0": 0.6845703125, - "1": 0.783203125, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9769110479756221, - "1": 0.9795975959887973, - "2": 0.8616391329814392 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7693983076898373, - "1": 0.8511340753794879, - "2": 0.8704905827739597 - }, - "precision": { - "0": 0.5713966588966588, - "1": 0.5858492698658453, - "2": 0.5296432768315602 - }, - "recall": { - "0": 0.7693983076898373, - "1": 0.8511340753794879, - "2": 0.8704905827739597 - }, - "f1": { - "0": 0.49581734115883674, - "1": 0.5427213874018971, - "2": 0.5179607527327961 - }, - "micro_accuracy": { - "0": 0.7965909090909091, - "1": 0.783203125, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9798065707004494, - "1": 0.9795975959887973, - "2": 0.8616391329814392 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "7abb665c1d6aa5d7fa4b3100bf1f26c3f18713d46a28e5674e613ed76b14ee0c" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7436186913897047, - "macro_accuracy_known": 0.7784758175485971, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7880859375, - "micro_accuracy_known": 0.7880859375, - "macro_accuracy_all": 0.8535481192569464, - "macro_accuracy_known": 0.8535481192569464, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8745254487704887, - "macro_accuracy_known": 0.8745254487704887, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7436186913897047, - "1": 0.8535481192569464, - "2": 0.8745254487704887 - }, - "precision": { - "0": 0.560199373867194, - "1": 0.5998890713373471, - "2": 0.4888507960286553 - }, - "recall": { - "0": 0.7436186913897047, - "1": 0.8535481192569464, - "2": 0.8745254487704887 - }, - "f1": { - "0": 0.47888447301192044, - "1": 0.5603515553766406, - "2": 0.47319868251346003 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.7880859375, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9758634530318733, - "1": 0.9781060555048576, - "2": 0.887834112188216 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7784758175485971, - "1": 0.8535481192569464, - "2": 0.8745254487704887 - }, - "precision": { - "0": 0.5893029675638372, - "1": 0.5998890713373471, - "2": 0.4888507960286553 - }, - "recall": { - "0": 0.7784758175485971, - "1": 0.8535481192569464, - "2": 0.8745254487704887 - }, - "f1": { - "0": 0.516019164439868, - "1": 0.5603515553766406, - "2": 0.47319868251346003 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.7880859375, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9790631773406463, - "1": 0.9781060555048576, - "2": 0.887834112188216 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "f24ad2ee6665be0dd7d31d08a781b3f19d0ef828ac88b25e5a5c70443b771112" - } - } - }, - { - "backend": "onnx", - "profile": "padded_scale", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6064453125, - "micro_accuracy_known": 0.7056818181818182, - "macro_accuracy_all": 0.6652441617583018, - "macro_accuracy_known": 0.6964274818407222, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7412109375, - "micro_accuracy_known": 0.7412109375, - "macro_accuracy_all": 0.8173313386584188, - "macro_accuracy_known": 0.8173313386584188, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9296875, - "micro_accuracy_known": 0.9296875, - "macro_accuracy_all": 0.8479662801440404, - "macro_accuracy_known": 0.8479662801440404, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6652441617583018, - "1": 0.8173313386584188, - "2": 0.8479662801440404 - }, - "precision": { - "0": 0.43402073033220573, - "1": 0.5068102982633171, - "2": 0.4842115297152765 - }, - "recall": { - "0": 0.6652441617583018, - "1": 0.8173313386584188, - "2": 0.8479662801440404 - }, - "f1": { - "0": 0.35089375236164183, - "1": 0.45505755746718773, - "2": 0.4843791657478432 - }, - "micro_accuracy": { - "0": 0.6064453125, - "1": 0.7412109375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.9816919778983844, - "1": 0.9803468597068008, - "2": 0.87391363290345 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6964274818407222, - "1": 0.8173313386584188, - "2": 0.8479662801440404 - }, - "precision": { - "0": 0.4605537205248188, - "1": 0.5068102982633171, - "2": 0.4842115297152765 - }, - "recall": { - "0": 0.6964274818407222, - "1": 0.8173313386584188, - "2": 0.8479662801440404 - }, - "f1": { - "0": 0.3789184247664976, - "1": 0.45505755746718773, - "2": 0.4843791657478432 - }, - "micro_accuracy": { - "0": 0.7056818181818182, - "1": 0.7412109375, - "2": 0.9296875 - }, - "theilU": { - "0": 0.985184887711333, - "1": 0.9803468597068008, - "2": 0.87391363290345 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "eac66683fb7f4e13ebecb6af3177ad2d19aeb2033c41350d70763b2e66a6749b" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7650511169266079, - "macro_accuracy_known": 0.8009128880325426, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.798828125, - "micro_accuracy_known": 0.798828125, - "macro_accuracy_all": 0.8746073406102853, - "macro_accuracy_known": 0.8746073406102853, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.947265625, - "micro_accuracy_known": 0.947265625, - "macro_accuracy_all": 0.8888149192892535, - "macro_accuracy_known": 0.8888149192892535, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7650511169266079, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "precision": { - "0": 0.5765313035783419, - "1": 0.6306489543157546, - "2": 0.5383882427898227 - }, - "recall": { - "0": 0.7650511169266079, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "f1": { - "0": 0.5007541407881484, - "1": 0.5965465365721194, - "2": 0.541814951789949 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.798828125, - "2": 0.947265625 - }, - "theilU": { - "0": 0.9761233547479233, - "1": 0.9784618583466062, - "2": 0.8922071716588353 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8009128880325426, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "precision": { - "0": 0.6021257476420521, - "1": 0.6306489543157546, - "2": 0.5383882427898227 - }, - "recall": { - "0": 0.8009128880325426, - "1": 0.8746073406102853, - "2": 0.8888149192892535 - }, - "f1": { - "0": 0.5364995883959854, - "1": 0.5965465365721194, - "2": 0.541814951789949 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.798828125, - "2": 0.947265625 - }, - "theilU": { - "0": 0.9796019716285629, - "1": 0.9784618583466062, - "2": 0.8922071716588353 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4db247754c578c947f732b83f0896213cf4341d7a9a2a05c09e2391d2aa72ea0" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.7197265625, - "micro_accuracy_known": 0.8375, - "macro_accuracy_all": 0.7861607117989678, - "macro_accuracy_known": 0.8230119951645444, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.80859375, - "micro_accuracy_known": 0.80859375, - "macro_accuracy_all": 0.8859782374811823, - "macro_accuracy_known": 0.8859782374811823, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9482421875, - "micro_accuracy_known": 0.9482421875, - "macro_accuracy_all": 0.8924122215773433, - "macro_accuracy_known": 0.8924122215773433, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7861607117989678, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "precision": { - "0": 0.6005959569818267, - "1": 0.658480184510919, - "2": 0.4869479214022333 - }, - "recall": { - "0": 0.7861607117989678, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "f1": { - "0": 0.5306972698918776, - "1": 0.6317915485601558, - "2": 0.4866169641277515 - }, - "micro_accuracy": { - "0": 0.7197265625, - "1": 0.80859375, - "2": 0.9482421875 - }, - "theilU": { - "0": 0.976414652946152, - "1": 0.978439571696028, - "2": 0.9049635740626394 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8230119951645444, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "precision": { - "0": 0.6282517220724769, - "1": 0.658480184510919, - "2": 0.4869479214022333 - }, - "recall": { - "0": 0.8230119951645444, - "1": 0.8859782374811823, - "2": 0.8924122215773433 - }, - "f1": { - "0": 0.5701003970490692, - "1": 0.6317915485601558, - "2": 0.4866169641277515 - }, - "micro_accuracy": { - "0": 0.8375, - "1": 0.80859375, - "2": 0.9482421875 - }, - "theilU": { - "0": 0.9799426368652879, - "1": 0.978439571696028, - "2": 0.9049635740626394 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "75057ab0c23ace04f5ec2b1a09bf8909febdff790493e68e833fb9374ec8934b" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6982421875, - "micro_accuracy_known": 0.8125, - "macro_accuracy_all": 0.7650511169266079, - "macro_accuracy_known": 0.8009128880325426, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.798828125, - "micro_accuracy_known": 0.798828125, - "macro_accuracy_all": 0.8746073406102853, - "macro_accuracy_known": 0.8746073406102853, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9462890625, - "micro_accuracy_known": 0.9462890625, - "macro_accuracy_all": 0.8885998655258126, - "macro_accuracy_known": 0.8885998655258126, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7650511169266079, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "precision": { - "0": 0.5785471472971473, - "1": 0.6335959120462021, - "2": 0.5453938590940303 - }, - "recall": { - "0": 0.7650511169266079, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "f1": { - "0": 0.5023591220086232, - "1": 0.59927049336012, - "2": 0.5555219206262815 - }, - "micro_accuracy": { - "0": 0.6982421875, - "1": 0.798828125, - "2": 0.9462890625 - }, - "theilU": { - "0": 0.9752806616418804, - "1": 0.9778290861722726, - "2": 0.8896163281281433 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8009128880325426, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "precision": { - "0": 0.6021257476420521, - "1": 0.6335959120462021, - "2": 0.5453938590940303 - }, - "recall": { - "0": 0.8009128880325426, - "1": 0.8746073406102853, - "2": 0.8885998655258126 - }, - "f1": { - "0": 0.5364995883959854, - "1": 0.59927049336012, - "2": 0.5555219206262815 - }, - "micro_accuracy": { - "0": 0.8125, - "1": 0.798828125, - "2": 0.9462890625 - }, - "theilU": { - "0": 0.9796019716285629, - "1": 0.9778290861722726, - "2": 0.8896163281281433 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "abf6ced35cbafeed58c1d07705a5951066c5ba11f5b69b869eef000343c861d0" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.712890625, - "micro_accuracy_known": 0.8295454545454546, - "macro_accuracy_all": 0.775624109098186, - "macro_accuracy_known": 0.8119814892121635, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.80078125, - "micro_accuracy_known": 0.80078125, - "macro_accuracy_all": 0.8750309070338517, - "macro_accuracy_known": 0.8750309070338517, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.951171875, - "micro_accuracy_known": 0.951171875, - "macro_accuracy_all": 0.8930573828676659, - "macro_accuracy_known": 0.8930573828676659, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.775624109098186, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "precision": { - "0": 0.5933974249172091, - "1": 0.6400935973500221, - "2": 0.4878422547669985 - }, - "recall": { - "0": 0.775624109098186, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "f1": { - "0": 0.5193747863503737, - "1": 0.6078415156177398, - "2": 0.4872362891815405 - }, - "micro_accuracy": { - "0": 0.712890625, - "1": 0.80078125, - "2": 0.951171875 - }, - "theilU": { - "0": 0.9760604046967088, - "1": 0.9794779290735068, - "2": 0.911268120895833 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8119814892121635, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "precision": { - "0": 0.6205494619820463, - "1": 0.6400935973500221, - "2": 0.4878422547669985 - }, - "recall": { - "0": 0.8119814892121635, - "1": 0.8750309070338517, - "2": 0.8930573828676659 - }, - "f1": { - "0": 0.5575643252952356, - "1": 0.6078415156177398, - "2": 0.4872362891815405 - }, - "micro_accuracy": { - "0": 0.8295454545454546, - "1": 0.80078125, - "2": 0.951171875 - }, - "theilU": { - "0": 0.9795283532738005, - "1": 0.9794779290735068, - "2": 0.911268120895833 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "aa69830d5e76007db3f08df389b19d17e1dfa6aa22e689325d9363dbf49ff526" - } - } - }, - { - "backend": "onnx", - "profile": "mild_blur", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.5732421875, - "micro_accuracy_known": 0.6670454545454545, - "macro_accuracy_all": 0.6217608361461465, - "macro_accuracy_known": 0.6509058753404972, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7158203125, - "micro_accuracy_known": 0.7158203125, - "macro_accuracy_all": 0.7756872965029742, - "macro_accuracy_known": 0.7756872965029742, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.90625, - "micro_accuracy_known": 0.90625, - "macro_accuracy_all": 0.8477748787805467, - "macro_accuracy_known": 0.8477748787805467, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6217608361461465, - "1": 0.7756872965029742, - "2": 0.8477748787805467 - }, - "precision": { - "0": 0.39135554921269206, - "1": 0.46963181575857627, - "2": 0.45276748958646207 - }, - "recall": { - "0": 0.6217608361461465, - "1": 0.7756872965029742, - "2": 0.8477748787805467 - }, - "f1": { - "0": 0.30910976640059284, - "1": 0.41152477824057, - "2": 0.4602272886546585 - }, - "micro_accuracy": { - "0": 0.5732421875, - "1": 0.7158203125, - "2": 0.90625 - }, - "theilU": { - "0": 0.9808773004478276, - "1": 0.978205854812268, - "2": 0.8352572065482408 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.6509058753404972, - "1": 0.7756872965029742, - "2": 0.8477748787805467 - }, - "precision": { - "0": 0.41456094134176324, - "1": 0.46963181575857627, - "2": 0.45276748958646207 - }, - "recall": { - "0": 0.6509058753404972, - "1": 0.7756872965029742, - "2": 0.8477748787805467 - }, - "f1": { - "0": 0.33240193213413666, - "1": 0.41152477824057, - "2": 0.4602272886546585 - }, - "micro_accuracy": { - "0": 0.6670454545454545, - "1": 0.7158203125, - "2": 0.90625 - }, - "theilU": { - "0": 0.9865921099044167, - "1": 0.978205854812268, - "2": 0.8352572065482408 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "46225d87b66c2d3c7076dc116de0f205947096a097cfa2df9e812b155752d362" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.677734375, - "micro_accuracy_known": 0.7886363636363637, - "macro_accuracy_all": 0.7337137504949759, - "macro_accuracy_known": 0.7681065825494279, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.83885455051539, - "macro_accuracy_known": 0.83885455051539, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9306640625, - "micro_accuracy_known": 0.9306640625, - "macro_accuracy_all": 0.8745362305987369, - "macro_accuracy_known": 0.8745362305987369, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "precision": { - "0": 0.5321559536906072, - "1": 0.5779328415692052, - "2": 0.48625507832424 - }, - "recall": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "f1": { - "0": 0.45591559669045273, - "1": 0.5362837292627527, - "2": 0.4881637551008611 - }, - "micro_accuracy": { - "0": 0.677734375, - "1": 0.77734375, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.9753369172766678, - "1": 0.9753009635793515, - "2": 0.86322146300684 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "precision": { - "0": 0.5605302905475916, - "1": 0.5779328415692052, - "2": 0.48625507832424 - }, - "recall": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.8745362305987369 - }, - "f1": { - "0": 0.4915588181246242, - "1": 0.5362837292627527, - "2": 0.4881637551008611 - }, - "micro_accuracy": { - "0": 0.7886363636363637, - "1": 0.77734375, - "2": 0.9306640625 - }, - "theilU": { - "0": 0.9781961093647314, - "1": 0.9753009635793515, - "2": 0.86322146300684 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "557aa53705f7f8e04a19c32164070906d127d05becd78c6198c26a2491063ab1" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6962890625, - "micro_accuracy_known": 0.8102272727272727, - "macro_accuracy_all": 0.7528041989452045, - "macro_accuracy_known": 0.7880918957707609, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7880859375, - "micro_accuracy_known": 0.7880859375, - "macro_accuracy_all": 0.8586244742853139, - "macro_accuracy_known": 0.8586244742853139, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9345703125, - "micro_accuracy_known": 0.9345703125, - "macro_accuracy_all": 0.8757973335680683, - "macro_accuracy_known": 0.8757973335680683, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7528041989452045, - "1": 0.8586244742853139, - "2": 0.8757973335680683 - }, - "precision": { - "0": 0.5511089367253752, - "1": 0.60501332001332, - "2": 0.5058534217725785 - }, - "recall": { - "0": 0.7528041989452045, - "1": 0.8586244742853139, - "2": 0.8757973335680683 - }, - "f1": { - "0": 0.478667224092499, - "1": 0.5719566879373098, - "2": 0.507670199889413 - }, - "micro_accuracy": { - "0": 0.6962890625, - "1": 0.7880859375, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9755304799098776, - "1": 0.9747166499600433, - "2": 0.8745174114576653 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7880918957707609, - "1": 0.8586244742853139, - "2": 0.8757973335680683 - }, - "precision": { - "0": 0.5794760197986005, - "1": 0.60501332001332, - "2": 0.5058534217725785 - }, - "recall": { - "0": 0.7880918957707609, - "1": 0.8586244742853139, - "2": 0.8757973335680683 - }, - "f1": { - "0": 0.5156607903768263, - "1": 0.5719566879373098, - "2": 0.507670199889413 - }, - "micro_accuracy": { - "0": 0.8102272727272727, - "1": 0.7880859375, - "2": 0.9345703125 - }, - "theilU": { - "0": 0.9787631407810776, - "1": 0.9747166499600433, - "2": 0.8745174114576653 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "c0128e2cd246ed8e5eb30b4d1106c6bb1f8aaebaa9f9a6a7fcde5c98c688c6b8" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.677734375, - "micro_accuracy_known": 0.7886363636363637, - "macro_accuracy_all": 0.7337137504949759, - "macro_accuracy_known": 0.7681065825494279, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.77734375, - "micro_accuracy_known": 0.77734375, - "macro_accuracy_all": 0.83885455051539, - "macro_accuracy_known": 0.83885455051539, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9287109375, - "micro_accuracy_known": 0.9287109375, - "macro_accuracy_all": 0.874106123071855, - "macro_accuracy_known": 0.874106123071855, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "precision": { - "0": 0.5339180594975297, - "1": 0.5808079118948686, - "2": 0.47167273756810363 - }, - "recall": { - "0": 0.7337137504949759, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "f1": { - "0": 0.45730135838252095, - "1": 0.5388386038217756, - "2": 0.4792877241207192 - }, - "micro_accuracy": { - "0": 0.677734375, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9736912039665129, - "1": 0.9738564989903369, - "2": 0.8610713150038116 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "precision": { - "0": 0.5605302905475916, - "1": 0.5808079118948686, - "2": 0.47167273756810363 - }, - "recall": { - "0": 0.7681065825494279, - "1": 0.83885455051539, - "2": 0.874106123071855 - }, - "f1": { - "0": 0.4915588181246242, - "1": 0.5388386038217756, - "2": 0.4792877241207192 - }, - "micro_accuracy": { - "0": 0.7886363636363637, - "1": 0.77734375, - "2": 0.9287109375 - }, - "theilU": { - "0": 0.9781961093647314, - "1": 0.9738564989903369, - "2": 0.8610713150038116 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "14086f52453775765c9b9babe2defa364fe67cad7b9acd0fed361c92d640c5bb" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6943359375, - "micro_accuracy_known": 0.8079545454545455, - "macro_accuracy_all": 0.7469998871707434, - "macro_accuracy_known": 0.7820155068818719, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.78515625, - "micro_accuracy_known": 0.78515625, - "macro_accuracy_all": 0.8475133631742028, - "macro_accuracy_known": 0.8475133631742028, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9375, - "micro_accuracy_known": 0.9375, - "macro_accuracy_all": 0.8770404492250314, - "macro_accuracy_known": 0.8770404492250314, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7469998871707434, - "1": 0.8475133631742028, - "2": 0.8770404492250314 - }, - "precision": { - "0": 0.5503656752803511, - "1": 0.594654999321666, - "2": 0.47125859874654236 - }, - "recall": { - "0": 0.7469998871707434, - "1": 0.8475133631742028, - "2": 0.8770404492250314 - }, - "f1": { - "0": 0.4762338890172099, - "1": 0.5565543737657069, - "2": 0.47213505392627914 - }, - "micro_accuracy": { - "0": 0.6943359375, - "1": 0.78515625, - "2": 0.9375 - }, - "theilU": { - "0": 0.9755159345941234, - "1": 0.9770101810926982, - "2": 0.8850303971986762 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7820155068818719, - "1": 0.8475133631742028, - "2": 0.8770404492250314 - }, - "precision": { - "0": 0.5785969387755102, - "1": 0.594654999321666, - "2": 0.47125859874654236 - }, - "recall": { - "0": 0.7820155068818719, - "1": 0.8475133631742028, - "2": 0.8770404492250314 - }, - "f1": { - "0": 0.5129236736305954, - "1": 0.5565543737657069, - "2": 0.47213505392627914 - }, - "micro_accuracy": { - "0": 0.8079545454545455, - "1": 0.78515625, - "2": 0.9375 - }, - "theilU": { - "0": 0.9790867956707949, - "1": 0.9770101810926982, - "2": 0.8850303971986762 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "a96dc56e72007031c95601ad61ae52aca00a1915a50754fc905602d789e56125" - } - } - }, - { - "backend": "onnx", - "profile": "padded_rotation", - "views": 3, - "presets": { - "full": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.6279296875, - "micro_accuracy_known": 0.7306818181818182, - "macro_accuracy_all": 0.6911409699115905, - "macro_accuracy_known": 0.7235382028761963, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.7548828125, - "micro_accuracy_known": 0.7548828125, - "macro_accuracy_all": 0.8219699782676466, - "macro_accuracy_known": 0.8219699782676466, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9365234375, - "micro_accuracy_known": 0.9365234375, - "macro_accuracy_all": 0.8641870789194371, - "macro_accuracy_known": 0.8641870789194371, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.6911409699115905, - "1": 0.8219699782676466, - "2": 0.8641870789194371 - }, - "precision": { - "0": 0.4522098092735212, - "1": 0.5272554605887939, - "2": 0.5082427926198062 - }, - "recall": { - "0": 0.6911409699115905, - "1": 0.8219699782676466, - "2": 0.8641870789194371 - }, - "f1": { - "0": 0.37218973066010475, - "1": 0.4743113089162254, - "2": 0.5144778903085138 - }, - "micro_accuracy": { - "0": 0.6279296875, - "1": 0.7548828125, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9864696739007237, - "1": 0.9841850048399564, - "2": 0.8849338442132999 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.7235382028761963, - "1": 0.8219699782676466, - "2": 0.8641870789194371 - }, - "precision": { - "0": 0.4773986622383124, - "1": 0.5272554605887939, - "2": 0.5082427926198062 - }, - "recall": { - "0": 0.7235382028761963, - "1": 0.8219699782676466, - "2": 0.8641870789194371 - }, - "f1": { - "0": 0.40040292647846387, - "1": 0.4743113089162254, - "2": 0.5144778903085138 - }, - "micro_accuracy": { - "0": 0.7306818181818182, - "1": 0.7548828125, - "2": 0.9365234375 - }, - "theilU": { - "0": 0.9888442520276529, - "1": 0.9841850048399564, - "2": 0.8849338442132999 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "4396183af33db05856bd225785c25e6bc68dadc2c8e3a05d5e9a3edeee01babb" - }, - "europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.712890625, - "micro_accuracy_known": 0.8295454545454546, - "macro_accuracy_all": 0.7719123421401505, - "macro_accuracy_known": 0.80809573317797, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8134765625, - "micro_accuracy_known": 0.8134765625, - "macro_accuracy_all": 0.8844011564041011, - "macro_accuracy_known": 0.8844011564041011, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9541015625, - "micro_accuracy_known": 0.9541015625, - "macro_accuracy_all": 0.8983042799520978, - "macro_accuracy_known": 0.8983042799520978, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8983042799520978 - }, - "precision": { - "0": 0.5967769675662186, - "1": 0.6498309325364402, - "2": 0.7205006342533562 - }, - "recall": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8983042799520978 - }, - "f1": { - "0": 0.5214694595648482, - "1": 0.6162228233704371, - "2": 0.7275784360193599 - }, - "micro_accuracy": { - "0": 0.712890625, - "1": 0.8134765625, - "2": 0.9541015625 - }, - "theilU": { - "0": 0.9799896119324835, - "1": 0.9856401980529147, - "2": 0.898587274213327 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8983042799520978 - }, - "precision": { - "0": 0.6195315872989173, - "1": 0.6498309325364402, - "2": 0.7205006342533562 - }, - "recall": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8983042799520978 - }, - "f1": { - "0": 0.5560058122966992, - "1": 0.6162228233704371, - "2": 0.7275784360193599 - }, - "micro_accuracy": { - "0": 0.8295454545454546, - "1": 0.8134765625, - "2": 0.9541015625 - }, - "theilU": { - "0": 0.9821468599376443, - "1": 0.9856401980529147, - "2": 0.898587274213327 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "433f0915f14a0d5098170c2c6b736b30539918ff77345a948d32e7a1437541fb" - }, - "north_europe": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.728515625, - "micro_accuracy_known": 0.8477272727272728, - "macro_accuracy_all": 0.7858937788827812, - "macro_accuracy_known": 0.8227325497679115, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8193359375, - "micro_accuracy_known": 0.8193359375, - "macro_accuracy_all": 0.8938961058990507, - "macro_accuracy_known": 0.8938961058990507, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.955078125, - "micro_accuracy_known": 0.955078125, - "macro_accuracy_all": 0.8939163424557017, - "macro_accuracy_known": 0.8939163424557017, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7858937788827812, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "precision": { - "0": 0.6238971458720955, - "1": 0.6953400558572972, - "2": 0.5980668832508124 - }, - "recall": { - "0": 0.7858937788827812, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "f1": { - "0": 0.5508938525685994, - "1": 0.667193195303168, - "2": 0.5989997589031987 - }, - "micro_accuracy": { - "0": 0.728515625, - "1": 0.8193359375, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9785270264033544, - "1": 0.9794440649580853, - "2": 0.9080512895705167 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8227325497679115, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "precision": { - "0": 0.6489564935604769, - "1": 0.6953400558572972, - "2": 0.5980668832508124 - }, - "recall": { - "0": 0.8227325497679115, - "1": 0.8938961058990507, - "2": 0.8939163424557017 - }, - "f1": { - "0": 0.5893105177635809, - "1": 0.667193195303168, - "2": 0.5989997589031987 - }, - "micro_accuracy": { - "0": 0.8477272727272728, - "1": 0.8193359375, - "2": 0.955078125 - }, - "theilU": { - "0": 0.9804364063593483, - "1": 0.9794440649580853, - "2": 0.9080512895705167 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "1f5b8f8268a5c8e2c6e7ef4c2f7b50a43d17f33dd0025b598da5d2115c3275d7" - }, - "europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.712890625, - "micro_accuracy_known": 0.8295454545454546, - "macro_accuracy_all": 0.7719123421401505, - "macro_accuracy_known": 0.80809573317797, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8134765625, - "micro_accuracy_known": 0.8134765625, - "macro_accuracy_all": 0.8844011564041011, - "macro_accuracy_known": 0.8844011564041011, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9541015625, - "micro_accuracy_known": 0.9541015625, - "macro_accuracy_all": 0.8984190817276987, - "macro_accuracy_known": 0.8984190817276987, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8984190817276987 - }, - "precision": { - "0": 0.5942999892264599, - "1": 0.64607665147976, - "2": 0.7183650484276597 - }, - "recall": { - "0": 0.7719123421401505, - "1": 0.8844011564041011, - "2": 0.8984190817276987 - }, - "f1": { - "0": 0.5191428838737127, - "1": 0.6120984549603107, - "2": 0.7260137606551089 - }, - "micro_accuracy": { - "0": 0.712890625, - "1": 0.8134765625, - "2": 0.9541015625 - }, - "theilU": { - "0": 0.9805722083289408, - "1": 0.9866005313830883, - "2": 0.8992486837252452 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8984190817276987 - }, - "precision": { - "0": 0.6168044169129475, - "1": 0.64607665147976, - "2": 0.7183650484276597 - }, - "recall": { - "0": 0.80809573317797, - "1": 0.8844011564041011, - "2": 0.8984190817276987 - }, - "f1": { - "0": 0.5532926475187895, - "1": 0.6120984549603107, - "2": 0.7260137606551089 - }, - "micro_accuracy": { - "0": 0.8295454545454546, - "1": 0.8134765625, - "2": 0.9541015625 - }, - "theilU": { - "0": 0.9828281904110945, - "1": 0.9866005313830883, - "2": 0.8992486837252452 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "83850e1bfed493df1ebed0fc8e2509f6ac9094dcda9d9662c18f16be5f1125bf" - }, - "north_europe_v3": { - "ranks": { - "species": { - "images": 1024, - "known_images": 880, - "list_coverage": 0.859375, - "truth_species_or_taxa": 201, - "micro_accuracy_all": 0.724609375, - "micro_accuracy_known": 0.8431818181818181, - "macro_accuracy_all": 0.7816133790799933, - "macro_accuracy_known": 0.8182515062243679, - "abstention_coverage": 1.0 - }, - "genus": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 150, - "micro_accuracy_all": 0.8154296875, - "micro_accuracy_known": 0.8154296875, - "macro_accuracy_all": 0.886118328121273, - "macro_accuracy_known": 0.886118328121273, - "abstention_coverage": 1.0 - }, - "family": { - "images": 1024, - "known_images": 1024, - "list_coverage": 1.0, - "truth_species_or_taxa": 15, - "micro_accuracy_all": 0.9560546875, - "micro_accuracy_known": 0.9560546875, - "macro_accuracy_all": 0.8941313962191426, - "macro_accuracy_known": 0.8941313962191426, - "abstention_coverage": 1.0 - } - }, - "all": { - "accuracy": { - "0": 0.7816133790799933, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "precision": { - "0": 0.6198174189850105, - "1": 0.6815029581404561, - "2": 0.5980321652758281 - }, - "recall": { - "0": 0.7816133790799933, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "f1": { - "0": 0.54531096593968, - "1": 0.6485020586629996, - "2": 0.5990432558914092 - }, - "micro_accuracy": { - "0": 0.724609375, - "1": 0.8154296875, - "2": 0.9560546875 - }, - "theilU": { - "0": 0.9783879870872234, - "1": 0.9816632673398754, - "2": 0.9117838595208317 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "known": { - "accuracy": { - "0": 0.8182515062243679, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "precision": { - "0": 0.6445375626212023, - "1": 0.6815029581404561, - "2": 0.5980321652758281 - }, - "recall": { - "0": 0.8182515062243679, - "1": 0.886118328121273, - "2": 0.8941313962191426 - }, - "f1": { - "0": 0.5830756999224906, - "1": 0.6485020586629996, - "2": 0.5990432558914092 - }, - "micro_accuracy": { - "0": 0.8431818181818181, - "1": 0.8154296875, - "2": 0.9560546875 - }, - "theilU": { - "0": 0.98027380370052, - "1": 0.9816632673398754, - "2": 0.9117838595208317 - }, - "coverage": { - "0": 1.0, - "1": 1.0, - "2": 1.0 - } - }, - "source_sha256": "3f96940479c36518495be2c13756837f522087fa7e0eccd6f6c93c51e87f4aa1" - } - } - } - ], - "sample_ids_sha256": "65ba22f9553bf6742d7a83402a5b2dc4e40accafece464ccb9f525127ee17b63", - "samples": 1024 -} diff --git a/docs/assets/mambo-tta-tradeoffs.json b/docs/assets/mambo-tta-tradeoffs.json deleted file mode 100644 index 46472d5..0000000 --- a/docs/assets/mambo-tta-tradeoffs.json +++ /dev/null @@ -1,479 +0,0 @@ -{ - "quality": [ - { - "backend": "torch", - "profile": "none", - "macro_accuracy": 0.7444257582219089 - }, - { - "backend": "torch", - "profile": "hflip", - "macro_accuracy": 0.7490054272359848 - }, - { - "backend": "torch", - "profile": "five_crop", - "macro_accuracy": 0.6996728719136418 - }, - { - "backend": "torch", - "profile": "ten_crop", - "macro_accuracy": 0.7314062084977246 - }, - { - "backend": "torch", - "profile": "d4", - "macro_accuracy": 0.7776770904913086 - }, - { - "backend": "onnx", - "profile": "none", - "macro_accuracy": 0.7392023947895904 - }, - { - "backend": "onnx", - "profile": "hflip", - "macro_accuracy": 0.7490054272359848 - }, - { - "backend": "onnx", - "profile": "five_crop", - "macro_accuracy": 0.6996728719136418 - }, - { - "backend": "onnx", - "profile": "ten_crop", - "macro_accuracy": 0.7325734492172041 - }, - { - "backend": "onnx", - "profile": "d4", - "macro_accuracy": 0.7776770904913086 - }, - { - "backend": "torch", - "profile": "light_noise", - "macro_accuracy": 0.7310275201968053 - }, - { - "backend": "onnx", - "profile": "light_noise", - "macro_accuracy": 0.7310275201968053 - }, - { - "backend": "torch", - "profile": "brightness", - "macro_accuracy": 0.7466012977108814 - }, - { - "backend": "torch", - "profile": "contrast", - "macro_accuracy": 0.752995488315598 - }, - { - "backend": "torch", - "profile": "gamma", - "macro_accuracy": 0.7475169287325611 - }, - { - "backend": "torch", - "profile": "gaussian_noise", - "macro_accuracy": 0.7539835338440992 - }, - { - "backend": "torch", - "profile": "padded_scale", - "macro_accuracy": 0.7868714438529836 - }, - { - "backend": "torch", - "profile": "mild_blur", - "macro_accuracy": 0.7528041989452045 - }, - { - "backend": "torch", - "profile": "padded_rotation", - "macro_accuracy": 0.7858937788827812 - }, - { - "backend": "onnx", - "profile": "brightness", - "macro_accuracy": 0.7466012977108814 - }, - { - "backend": "onnx", - "profile": "contrast", - "macro_accuracy": 0.7526127864403591 - }, - { - "backend": "onnx", - "profile": "gamma", - "macro_accuracy": 0.7483461161289127 - }, - { - "backend": "onnx", - "profile": "gaussian_noise", - "macro_accuracy": 0.7514959716550446 - }, - { - "backend": "onnx", - "profile": "padded_scale", - "macro_accuracy": 0.7861607117989678 - }, - { - "backend": "onnx", - "profile": "mild_blur", - "macro_accuracy": 0.7528041989452045 - }, - { - "backend": "onnx", - "profile": "padded_rotation", - "macro_accuracy": 0.7858937788827812 - } - ], - "timing": [ - { - "backend": "torch", - "profile": "none", - "batch": 32, - "images_per_second": 130.47672431460305, - "seconds": [ - 0.24525447100313613, - 0.2421915090017137, - 0.2553590109964716 - ], - "median_seconds": 0.24525447100313613, - "p95_seconds": 0.2543485569971381 - }, - { - "backend": "torch", - "profile": "hflip", - "batch": 32, - "images_per_second": 72.44973327692519, - "seconds": [ - 0.44685296500392724, - 0.4359808239969425, - 0.4416855460003717 - ], - "median_seconds": 0.4416855460003717, - "p95_seconds": 0.4463362231035717 - }, - { - "backend": "torch", - "profile": "five_crop", - "batch": 32, - "images_per_second": 31.012842672179232, - "seconds": [ - 0.9923711820010794, - 1.0318305979963043, - 1.068035869000596 - ], - "median_seconds": 1.0318305979963043, - "p95_seconds": 1.0644153419001667 - }, - { - "backend": "torch", - "profile": "ten_crop", - "batch": 32, - "images_per_second": 16.371648930481197, - "seconds": [ - 1.951216731002205, - 1.9545984729993506, - 1.9937593849972473 - ], - "median_seconds": 1.9545984729993506, - "p95_seconds": 1.9898432937974575 - }, - { - "backend": "torch", - "profile": "d4", - "batch": 32, - "images_per_second": 19.648783629371536, - "seconds": [ - 1.6410345309996046, - 1.5830615619997843, - 1.6285995409998577 - ], - "median_seconds": 1.6285995409998577, - "p95_seconds": 1.6397910319996298 - }, - { - "backend": "torch", - "profile": "light_noise", - "batch": 32, - "images_per_second": 48.12195636430361, - "seconds": [ - 0.727293746000214, - 0.6649771209995379, - 0.6605985319984029 - ], - "median_seconds": 0.6649771209995379, - "p95_seconds": 0.7210620835001464 - }, - { - "backend": "torch", - "profile": "brightness", - "batch": 32, - "images_per_second": 45.81318643614692, - "seconds": [ - 0.682609258001321, - 0.720042809000006, - 0.6984888519946253 - ], - "median_seconds": 0.6984888519946253, - "p95_seconds": 0.7178874132994679 - }, - { - "backend": "torch", - "profile": "contrast", - "batch": 32, - "images_per_second": 46.13355564044557, - "seconds": [ - 0.6878478029975668, - 0.6936382759959088, - 0.757374400003755 - ], - "median_seconds": 0.6936382759959088, - "p95_seconds": 0.7510007876029704 - }, - { - "backend": "torch", - "profile": "gamma", - "batch": 32, - "images_per_second": 47.904035785298944, - "seconds": [ - 0.6442106480026268, - 0.6811978339974303, - 0.6680021729989676 - ], - "median_seconds": 0.6680021729989676, - "p95_seconds": 0.679878267897584 - }, - { - "backend": "torch", - "profile": "gaussian_noise", - "batch": 32, - "images_per_second": 45.67379719812919, - "seconds": [ - 0.7022767930029659, - 0.6798076190025313, - 0.7006205299985595 - ], - "median_seconds": 0.7006205299985595, - "p95_seconds": 0.7021111667025253 - }, - { - "backend": "torch", - "profile": "padded_scale", - "batch": 32, - "images_per_second": 54.521301980119496, - "seconds": [ - 0.633180684002582, - 0.5869265560031636, - 0.5804513379989658 - ], - "median_seconds": 0.5869265560031636, - "p95_seconds": 0.6285552712026401 - }, - { - "backend": "torch", - "profile": "mild_blur", - "batch": 32, - "images_per_second": 46.119469432999075, - "seconds": [ - 0.6938501330005238, - 0.6882561009988422, - 0.7521999730015523 - ], - "median_seconds": 0.6938501330005238, - "p95_seconds": 0.7463649890014494 - }, - { - "backend": "torch", - "profile": "padded_rotation", - "batch": 32, - "images_per_second": 41.746439709954565, - "seconds": [ - 0.7837554289944819, - 0.7665324330009753, - 0.7130471830023453 - ], - "median_seconds": 0.7665324330009753, - "p95_seconds": 0.7820331293951313 - }, - { - "backend": "onnx", - "profile": "none", - "batch": 32, - "images_per_second": 101.13692345485899, - "seconds": [ - 0.3329214420009521, - 0.3164027430029819, - 0.29256366500339936 - ], - "median_seconds": 0.3164027430029819, - "p95_seconds": 0.33126957210115504 - }, - { - "backend": "onnx", - "profile": "hflip", - "batch": 32, - "images_per_second": 50.46836941544529, - "seconds": [ - 0.6613259239966283, - 0.5843208910009707, - 0.6340605090008467 - ], - "median_seconds": 0.6340605090008467, - "p95_seconds": 0.6585993824970501 - }, - { - "backend": "onnx", - "profile": "five_crop", - "batch": 32, - "images_per_second": 23.1981994885199, - "seconds": [ - 1.3837044419997255, - 1.3794173990027048, - 1.2910776900025667 - ], - "median_seconds": 1.3794173990027048, - "p95_seconds": 1.3832757377000235 - }, - { - "backend": "onnx", - "profile": "ten_crop", - "batch": 32, - "images_per_second": 11.938286229113231, - "seconds": [ - 2.704058483999688, - 2.641091776000394, - 2.6804517320051673 - ], - "median_seconds": 2.6804517320051673, - "p95_seconds": 2.701697808800236 - }, - { - "backend": "onnx", - "profile": "d4", - "batch": 32, - "images_per_second": 14.328338720285078, - "seconds": [ - 2.1106114759968477, - 2.272936913999729, - 2.233336370998586 - ], - "median_seconds": 2.233336370998586, - "p95_seconds": 2.2689768596996145 - }, - { - "backend": "onnx", - "profile": "light_noise", - "batch": 32, - "images_per_second": 37.46392826629067, - "seconds": [ - 0.8541549560031854, - 0.8520317189977504, - 0.8739216520043556 - ], - "median_seconds": 0.8541549560031854, - "p95_seconds": 0.8719449824042386 - }, - { - "backend": "onnx", - "profile": "brightness", - "batch": 32, - "images_per_second": 36.6971756587782, - "seconds": [ - 0.8695674160044291, - 0.911717947004945, - 0.8720017119994736 - ], - "median_seconds": 0.8720017119994736, - "p95_seconds": 0.9077463235043979 - }, - { - "backend": "onnx", - "profile": "contrast", - "batch": 32, - "images_per_second": 35.692965342059594, - "seconds": [ - 0.94651711100596, - 0.8929979009990348, - 0.8965352049999638 - ], - "median_seconds": 0.8965352049999638, - "p95_seconds": 0.9415189204053604 - }, - { - "backend": "onnx", - "profile": "gamma", - "batch": 32, - "images_per_second": 37.54438552985212, - "seconds": [ - 0.8325451659984537, - 0.8884012240014272, - 0.8523245100004715 - ], - "median_seconds": 0.8523245100004715, - "p95_seconds": 0.8847935526013316 - }, - { - "backend": "onnx", - "profile": "gaussian_noise", - "batch": 32, - "images_per_second": 36.57123727253824, - "seconds": [ - 0.8853307109966408, - 0.8665030389965978, - 0.8750045769993449 - ], - "median_seconds": 0.8750045769993449, - "p95_seconds": 0.8842980975969112 - }, - { - "backend": "onnx", - "profile": "padded_scale", - "batch": 32, - "images_per_second": 38.11493135440417, - "seconds": [ - 0.8444289379986003, - 0.8395659879970481, - 0.8376789320027456 - ], - "median_seconds": 0.8395659879970481, - "p95_seconds": 0.8439426429984451 - }, - { - "backend": "onnx", - "profile": "mild_blur", - "batch": 32, - "images_per_second": 36.05360949104674, - "seconds": [ - 0.9718045689951396, - 0.8875671659989166, - 0.8805470950028393 - ], - "median_seconds": 0.8875671659989166, - "p95_seconds": 0.9633808286955172 - }, - { - "backend": "onnx", - "profile": "padded_rotation", - "batch": 32, - "images_per_second": 34.722319916310404, - "seconds": [ - 0.9328059729959932, - 0.9215974070029915, - 0.9118571529979818 - ], - "median_seconds": 0.9215974070029915, - "p95_seconds": 0.931685116396693 - } - ], - "sources_sha256": { - "local-evidence/mambo-tta-expanded-comparison.json": "5197e197bbca7d1f68e3e764835921c680937503eb4c4196fe69f40ebfff6d58", - "local-evidence/mambo-tta-timing-torch/report.json": "414fbc1345091cd21aac5edc532ea34a6d334259d7db5c73b69a31600310f1d6", - "local-evidence/mambo-tta-timing-onnx/report.json": "85ac6551f6c3be769492177a2e3d16f70905f2b6459e38dc272870efd6554037" - } -} diff --git a/docs/assets/mambo-tta-tradeoffs.svg b/docs/assets/mambo-tta-tradeoffs.svg deleted file mode 100644 index c76d9f6..0000000 --- a/docs/assets/mambo-tta-tradeoffs.svg +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 66 - - - - - - - - - - - - - 68 - - - - - - - - - - - - - 70 - - - - - - - - - - - - - 72 - - - - - - - - - - - - - 74 - - - - - - - - - - - - - 76 - - - - - - - - - - - - - 78 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 82 - - - - Macro species accuracy (%) - - - - - - - - - - - - - - None - - - - - - - - - - Horizontal flip - - - - - - - - - - D4 rotations/reflections - - - - - - - - - - Padded scale - - - - - - - - - - Padded ±10° rotation - - - - - - - - - - Brightness - - - - - - - - - - Contrast - - - - - - - - - - Gamma - - - - - - - - - - Gaussian noise - - - - - - - - - - Salt-and-pepper noise - - - - - - - - - - Mild blur - - - - - - - - - - Five crops - - - - - - - - - - Ten crops - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fixed 1,024-image qualification subset - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 20 - - - - - - - - - - - - - 40 - - - - - - - - - - - - - 60 - - - - - - - - - - - - - 80 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - 120 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GPU · batch 32 · four preparation workers - - - - TTA candidates: quality and inference cost · northern Europe - - - Quality: pinned mini_metrics, all truth, threshold 0; 201 represented species. Exploratory subset, not full-set efficacy. - Speed: RTX 3080 Ti Laptop; one process per backend, one warmup + three observations per policy; decode and CPU results included. - Dots use a restricted accuracy axis for readability. All policies are opt-in; none changes the release default. - - - - - - - - - PyTorch - - - - - - - - ONNX - - - - - - - - - - - - diff --git a/docs/mambo-tta.md b/docs/mambo-tta.md index de821a4..160e9eb 100644 --- a/docs/mambo-tta.md +++ b/docs/mambo-tta.md @@ -66,9 +66,9 @@ and timings are in the [deployment comparison](../deployment/README.md#release-c TTA was selected using Flemming, including part of its reporting partition. Its benefit is domain-dependent; it is not a universal improvement or an -independently validated recipe choice. Earlier crop/noise/reflection sweeps -remain in [historical study results](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-tta.md). +independently validated recipe choice. In the early 1,024-image northern-Europe +sweep, cropping and salt-and-pepper noise reduced macro accuracy; padding gave +the largest gain. Complete results remain in [historical study results](https://github.com/asgersvenning/mini_trainer/blob/852bf712e85b8d1a6b9c9c6d31b3b5d807904303/docs/mambo-tta.md). -The early sweep runners and chart generator are retired; replay that completed -study from [its pinned source](https://github.com/asgersvenning/mini_trainer/tree/b631c52c74b5bae2bd1d3addc517af2095ef7f7b/dev/releases/mambo_v3). +The early sweep code and assets are retired; replay that completed study from [its pinned source](https://github.com/asgersvenning/mini_trainer/tree/b631c52c74b5bae2bd1d3addc517af2095ef7f7b/dev/releases/mambo_v3). The composed-study collectors and current release report generators remain maintained. From 461761f8c0be2eab2ac1909c72a416bc73a9dc23 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 17:08:32 +0200 Subject: [PATCH 207/221] docs: retire unused historical loading chart --- docs/assets/mambo-loading-scaling.svg | 870 -------------------------- 1 file changed, 870 deletions(-) delete mode 100644 docs/assets/mambo-loading-scaling.svg diff --git a/docs/assets/mambo-loading-scaling.svg b/docs/assets/mambo-loading-scaling.svg deleted file mode 100644 index 818807f..0000000 --- a/docs/assets/mambo-loading-scaling.svg +++ /dev/null @@ -1,870 +0,0 @@ - - - - - - - - image/svg+xml - - - Matplotlib v3.10.9, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 4 - - - - - - - - - - 8 - - - - Preparation workers - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 25 - - - - - - - - - - - - - 50 - - - - - - - - - - - - - 75 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - 125 - - - - - - - - - - - - - 150 - - - - - - - - - - - - - 175 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Torch · synchronous API - - - - - - - - - - - - - Batch 8 - - - - - - - - - Batch 32 - - - - - - - - - Batch 64 - - - - - - - - - - - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 4 - - - - - - - - - - 8 - - - - Preparation workers - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 25 - - - - - - - - - - - - - 50 - - - - - - - - - - - - - 75 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - 125 - - - - - - - - - - - - - 150 - - - - - - - - - - - - - 175 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Onnx · synchronous API - - - - - - - - - - - - - Batch 8 - - - - - - - - - Batch 32 - - - - - - - - - Batch 64 - - - - - - - - - - - - - - - - PyTorch - - - - - - - - - - ONNX - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - 50 - - - - - - - - - - - - - 100 - - - - - - - - - - - - - 150 - - - - - - - - - - - - - 200 - - - - End-to-end images / second - - - - - - - - - - - - - - - - - - - - - - 128.2 - - - 99.6 - - - 154.2 - - - 155.2 - - - Experimental stream · batch 32 - - - - - - - - - - Sequential - - - - - - One-batch lookahead - - - - - Loading and scheduling still limit GPU throughput - - - RTX 3080 Ti Laptop; automatic precision; northern Europe; runtime CPU threads fixed at 4. - Worker sweep: 3 ordered trials × 3 observations. Lookahead: 128 images, 4 workers, 5 repeats in one process; experimental, not the API default. - - - - - - - - - - - - - - From bd12619851e9a5d540d29a784666b202aaa65531 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 17:24:30 +0200 Subject: [PATCH 208/221] docs: clarify repository navigation and runtime contract ownership --- README.md | 14 +++-- dev/README.md | 142 +++++++++++++++++++++++++------------------------- 2 files changed, 82 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 0800907..2add8a2 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,17 @@ All code in `mini_trainer` should follow the following core principles: * All hyperparameters and system configuration should have smart defaults that are as general as possible * All functionality should be extendable to custom model architectures, loss functions, training regimes, data formats etc. +## Find your workflow + +| Task | Start here | +| --- | --- | +| Integrate the MAMBO release candidate | [Deployment API and CLI](deployment/README.md) | +| Prepare data or adapt an example | [Examples](examples/README.md) | +| Change the trainer or run checks | [Development guide](dev/README.md), [test map](tests/README.md) | +| Compare models, backends or training settings | [Benchmarks](dev/benchmarks/README.md) | +| Run on UCloud or reproduce research | [UCloud](dev/ucloud/README.md), [research experiments](publication/experiments/README.md) | +| Choose the next development task | [Roadmap](docs/roadmap.md) | + ## Installation Use [uv](https://docs.astral.sh/uv/getting-started/installation/) for environment @@ -59,9 +70,6 @@ Activate the environment, use its executables directly, or use `uv run --no-sync An implicit sync can replace the deliberately selected PyTorch backend. Select the backend explicitly whenever installing or synchronizing dependencies. -The [examples index](examples/README.md) describes dataset constructors and historical -notebook demonstrations. - ## Data loading on shared machines Defaults use process CPU availability, affinity, visible cgroup quotas and Slurm diff --git a/dev/README.md b/dev/README.md index 40e29e6..e4ce9ac 100644 --- a/dev/README.md +++ b/dev/README.md @@ -1,4 +1,4 @@ -# Development checks +# Development guide Use the existing uv environment from [installation](../README.md#local-installation). Checks never synchronize it; explicitly choose the PyTorch backend when installing @@ -11,7 +11,9 @@ dependencies. Start with the [roadmap](../docs/roadmap.md) for priorities. | Run training/inference experiments | [Benchmark commands](benchmarks/README.md) | | Compare branches on UCloud | [UCloud setup and execution](ucloud/README.md) | | Qualify native INT8 or PTQ/QAT | [Quantization roadmap](../docs/quantization-roadmap.md) | -| Prepare the MAMBO release | [Freeze contract](releases/mambo_v3/deployment-freeze.md) | +| Maintain the MAMBO release | [Release inputs and workflows](releases/mambo_v3/README.md) | +| Change loading or optimizer behavior | [Runtime contracts](#training-and-loading-contracts) | +| Reproduce publication experiments | [Research workflows](../publication/experiments/README.md) | From the repository root: @@ -88,17 +90,41 @@ Follow the [benchmark progression](benchmarks/README.md): synthetic oracle, MNIST, then hierarchical Blair. Keep test splits separate from configuration and checkpoint selection. A passing correctness profile is not a throughput claim. -## Optimizer step contract +## Agent-only changes and CI + +Follow [agent workspace policy](../.agents/README.md) for file placement and separate +`agent:` commits. The prefix does not disable checks. CI classifies the entire diff: +only `AGENTS.md`, Markdown under `.agents/` and `.agents/.gitignore` qualify as +agent-only. Mixed or unreadable changes run checks; scheduled/manual jobs are +unchanged. Do not use `[skip ci]` to bypass required checks. + +[The classifier](ci_scope.py) and [its tests](../tests/core/test_ci_scope.py) own exact +path/rename handling. Required-check behavior on the first hosted agent-only PR +still needs verification under the actual branch-protection settings. + +## PR change statistics + +[The workflow](../.github/workflows/pr-change-summary.yml) reports PR changes by +content group. Only root `README.md` is included in its code headline; other Markdown +has a separate row. Its `featureMarkdown` set defines exceptions. + +It reads GitHub metadata without checking out or executing PR code, flags incomplete +diffs above 3,000 files and classifies renames by destination. Counts describe volume, +not quality or effort. + +## Training and loading contracts + +These constraints matter when changing runtime behavior. The linked implementations +and tests own exact cases; benchmark commands are in the [training guide](benchmarks/training.md). -Scheduler and EMA updates advance only after a successful optimizer step. -Zero learning rate or zero gradients still count; parameter changes, scale equality -and return values cannot determine success. Native fused AMP optimizers can enter -`step()` on overflow, so the trainer also observes their `found_inf` skip flag. -The deprecated `step(..., grad_scaler=...)` protocol is rejected with scaling enabled. +### Optimizer step contract -[Optimizer tests](../tests/training/test_optimizer_steps.py) cover real overflow, -recovery, zero-LR updates and hook cleanup; checkpoint tests cover continuation. -For their CUDA cases: +Scheduler and EMA updates follow successful optimizer steps, including zero-LR or +zero-gradient updates. Parameter changes, scale equality and return values do not establish success. +Fused AMP optimizers may enter `step()` on overflow; the trainer observes their +`found_inf` skip flag. The deprecated `step(..., grad_scaler=...)` protocol is rejected +with scaling enabled. [Tests](../tests/training/test_optimizer_steps.py) cover overflow, +recovery and hook cleanup; checkpoint tests cover continuation. Run the CUDA cases with: ```bash RUN_CUDA_TESTS=1 CUDA_VISIBLE_DEVICES=0 bash dev/check.sh test tests/training/test_optimizer_steps.py -k cuda @@ -106,74 +132,58 @@ RUN_CUDA_TESTS=1 CUDA_VISIBLE_DEVICES=0 bash dev/check.sh test tests/training/te ### CUDA batch transfer lookahead -`mt_train --cuda-prefetch` and `mt_predict --cuda-prefetch` opt into one-batch -transfer lookahead; Python builders accept `cuda_prefetch=True`. It rejects CPU -targets and is bypassed for CUDA-cached data. Loader sampling/order are preserved; -preprocessing stays on the caller's compute stream. Custom CPU hooks may execute -earlier, changing interleaving if they share global RNG state. Callers moving a -batch to another CUDA stream must establish their own handoff. -Measure throughput and memory with the [transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes). +`mt_train --cuda-prefetch`, `mt_predict --cuda-prefetch` and Python `cuda_prefetch=True` opt into +one-batch transfer lookahead. CPU targets are rejected; CUDA-cached data bypasses it. +Sampling/order are preserved and preprocessing stays on the caller's compute stream. +CPU hooks may execute earlier, affecting shared RNG interleaving. Callers using +another CUDA stream own that handoff. Use the +[transfer probe](benchmarks/training.md#capacity-and-bottleneck-probes) to measure benefits. ### Direct pinned cache batches -CUDA targets with `cache="CPU"` and `num_workers=0` gather directly into owned -pinned batches. Raw `LazyDataset` callers can use `pin_batches=True`. Workers use -ordinary gather and parent-side pinning; they must not initialize CUDA pin allocators. -Keeping or modifying a returned batch must not corrupt the cache or later batches. +CUDA with `cache="CPU"` and `num_workers=0` gathers directly into owned pinned +batches (`LazyDataset(pin_batches=True)`). Workers use ordinary gather followed by +parent-side pinning; they must not initialize CUDA pin allocators. Retaining or +modifying a batch must not corrupt the cache or subsequent batches. ### Direct collation of stacked batches Repository loaders avoid splitting gathered batches into per-sample views. -External `LazyDataset.__getitems__` calls still return sample lists, and external -default collators remain supported. Preserve sampler identity, RNG consumption, -shuffle/drop-last behavior and worker compatibility; see [loader tests](../tests/data/test_loader.py). +External `LazyDataset.__getitems__` still returns sample lists for default collators. +Preserve sampler/RNG, shuffle/drop-last and worker behavior; see +[loader tests](../tests/data/test_loader.py). ### Model compilation -`--compile` optionally accepts `--compile-mode`: `default`, `reduce-overhead`, -`max-autotune` or `max-autotune-no-cudagraphs`. A mode requires compilation enabled. -Optimizer compilation is separate. Compare startup, steady-state throughput, -memory and held-out quality; graph capture and a speedup are not guaranteed. +`--compile-mode` requires `--compile`; choices are `default`, `reduce-overhead`, +`max-autotune` and `max-autotune-no-cudagraphs`. Optimizer compilation is separate. +Measure startup, warm throughput, memory and held-out quality; speedup is not guaranteed. ### Optimizer compilation -`--compile-optimizer` defaults off and compiles updates independently of the model. -For custom training, call `mini_trainer.training.compilation.compile_optimizer` -after scheduler construction and checkpoint restoration. The first actual update -initializes state eagerly; later updates use tensor learning rates so scheduling -does not specialize every numeric rate. AMP skip decisions stay with the trainer. -Explicit foreach Adam/AdamW needs `capturable=True`; unsupported combinations fail -before mutation. Saved numeric learning rates permit eager checkpoint resume. +`--compile-optimizer` defaults off. Custom training calls +`mini_trainer.training.compilation.compile_optimizer` after scheduler construction +and checkpoint restoration. The first real update initializes state eagerly; +subsequent updates use tensor learning rates without specializing each numeric rate. +AMP skip decisions stay with the trainer; saved scalar rates support eager resume. +Explicit foreach Adam/AdamW requires `capturable=True`; incompatible settings fail +before mutation. ### Optimizer CUDA graphs -`--compile-optimizer --optimizer-cudagraphs` requests optimizer graph replay on -one CUDA device with Inductor. For custom training use -`compile_optimizer(optimizer, cudagraphs=True)` after scheduler/checkpoint setup. -Scheduler updates, overflow decisions and Muon's outer counter remain outside -capture. Changing the graph setting on an already compiled optimizer is rejected. +`--compile-optimizer --optimizer-cudagraphs` requests Inductor replay on one CUDA +device; custom code uses `compile_optimizer(optimizer, cudagraphs=True)`. +Scheduler calls, overflow decisions and Muon's outer counter stay outside capture. +An already compiled optimizer cannot change its graph setting. -Numeric rates retain float64 precision; explicit tensor rates retain their dtype, -recorded in checkpoints with `_mini_trainer_lr_dtype` where needed. Native fused -SGD/Adam/AdamW tensor-rate kernels require explicitly selected float32 rates. -Do not silently coerce them. Foreach/capturable restrictions still apply. -See [compilation implementation](../mini_trainer/training/compilation.py) and -[optimizer tests](../tests/training/test_optimizer_steps.py) for exact contracts; -capture overhead and INT8 performance require separate workload evidence. +Numeric rates retain float64 precision; explicitly typed tensor rates retain their +dtype in checkpoints. Fused SGD/Adam/AdamW graph kernels require explicitly selected +float32 rates; never silently coerce them. Foreach/capturable restrictions still apply. +[Implementation](../mini_trainer/training/compilation.py) and +[tests](../tests/training/test_optimizer_steps.py) define the exact state contract; +graph overhead and INT8 performance need workload-specific evidence. -## Agent-only changes and CI - -Follow [agent workspace policy](../.agents/README.md) for file placement and separate -`agent:` commits. The prefix does not disable checks. CI classifies the entire diff: -only `AGENTS.md`, Markdown under `.agents/` and `.agents/.gitignore` qualify as -agent-only. Mixed or unreadable changes run checks; scheduled/manual jobs are -unchanged. Do not use `[skip ci]` to bypass required checks. - -[The classifier](ci_scope.py) and [its tests](../tests/core/test_ci_scope.py) own exact -path/rename handling. Required-check behavior on the first hosted agent-only PR -still needs verification under the actual branch-protection settings. - -## Automatic CPU budgets +### Automatic CPU budgets Defaults use the smallest available process CPU count, affinity mask, visible Linux cgroup quota (including ancestors) and positive `SLURM_CPUS_PER_TASK`. @@ -188,13 +198,3 @@ counts, including zero, are preserved. CUDA-cached datasets force zero DataLoader workers. These limits do not measure competition from other jobs; set explicit per-rank budgets when sharing resources. - -## PR change statistics - -[The workflow](../.github/workflows/pr-change-summary.yml) reports PR changes by -content group. Only root `README.md` is included in its code headline; other Markdown -has a separate row. Its `featureMarkdown` set defines exceptions. - -It reads GitHub metadata without checking out or executing PR code, flags incomplete -diffs above 3,000 files and classifies renames by destination. Counts describe volume, -not quality or effort. From c76c44f98418c347ab2b6c26cff3cb10074a90be Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:33:10 +0200 Subject: [PATCH 209/221] fix(packaging): use distinct minitrainer distribution identity --- README.md | 12 +- deployment/pyproject.toml | 2 +- .../mambo_v3/ucloud_env/pyproject.toml | 4 +- dev/releases/mambo_v3/ucloud_env/uv.lock | 36 +- dev/ucloud/setup.sh | 2 +- dev/ucloud/worker.py | 6 +- dev/wheel_smoke.py | 2 +- mini_trainer/integrations/parquet.py | 2 +- mini_trainer/logging/wandb.py | 2 +- .../modeling/architectures/bioclip.py | 2 +- mini_trainer/modeling/architectures/timm.py | 2 +- .../modeling/architectures/transformers.py | 4 +- mini_trainer/modeling/onnx.py | 7 +- mini_trainer/modeling/quantization.py | 2 +- mini_trainer/modeling/quantized_training.py | 2 +- mini_trainer/visualization/dendrogram.py | 2 +- pyproject.toml | 15 +- tests/export/test_onnx.py | 2 +- tests/quantization/test_quantization.py | 2 +- tests/quantization/test_quantized_training.py | 2 +- .../test_quantized_training_model.py | 2 +- uv.lock | 768 +++++++++--------- 22 files changed, 452 insertions(+), 428 deletions(-) diff --git a/README.md b/README.md index 2add8a2..cab203f 100644 --- a/README.md +++ b/README.md @@ -37,17 +37,21 @@ and package management. Choose a published package or a source checkout. ### PyPI +The distribution is `minitrainer`; Python imports remain `mini_trainer`. +The similarly named `mini-trainer` / `mini_trainer` PyPI project is unrelated. +Version 0.3.0 is prepared for publication; use the source installation below until published. + ```bash uv venv --python 3.12 source .venv/bin/activate -uv pip install "mini_trainer[recommended]" --torch-backend=auto +uv pip install "minitrainer[recommended]" --torch-backend=auto ``` | Package choice | Includes | | --- | --- | -| `mini_trainer` | Core training and inference | -| `mini_trainer[recommended]` | Core plus logging, visualization and optional utilities | -| `mini_trainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | +| `minitrainer` | Core training and inference | +| `minitrainer[recommended]` | Core plus logging, visualization and optional utilities | +| `minitrainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | Substitute the desired package in the install command. Standard `pip install` also works; select its PyTorch CPU/CUDA installation separately for your environment. diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index 2bd90b9..16257a7 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -11,7 +11,7 @@ license-files = ["LICENSE"] [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] -torch = ["mini_trainer>=0.3.0,<0.4"] +torch = ["minitrainer>=0.3.0,<0.4"] [project.scripts] mambo_predict = "mambo_deploy.cli:run" diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml index f4770b2..c1b55fb 100644 --- a/dev/releases/mambo_v3/ucloud_env/pyproject.toml +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -3,7 +3,7 @@ name = "mambo-ucloud-release" version = "0.1.0" requires-python = ">=3.13,<3.14" dependencies = [ - "mini_trainer[recommended,bioclip,timm]", + "minitrainer[recommended,bioclip,timm]", "mambo-v3", "mini_metrics", "torch==2.12.0", @@ -19,7 +19,7 @@ dependencies = [ package = false [tool.uv.sources] -mini_trainer = { path = "../../../.." } +minitrainer = { path = "../../../.." } mambo-v3 = { path = "../../../../deployment" } mini_metrics = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git", rev = "70cc69adc05362863439277048e06386c1f885e1" } torch = { index = "pytorch-cu130" } diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock index a9c683a..edff572 100644 --- a/dev/releases/mambo_v3/ucloud_env/uv.lock +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -414,7 +414,7 @@ dependencies = [ { name = "huggingface-hub" }, { name = "mambo-v3" }, { name = "mini-metrics" }, - { name = "mini-trainer", extra = ["bioclip", "recommended", "timm"] }, + { name = "minitrainer", extra = ["bioclip", "recommended", "timm"] }, { name = "onnxruntime-gpu", extra = ["cuda", "cudnn"] }, { name = "open-clip-torch" }, { name = "safetensors" }, @@ -428,7 +428,7 @@ requires-dist = [ { name = "huggingface-hub", specifier = "==0.36.2" }, { name = "mambo-v3", directory = "../../../../deployment" }, { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, - { name = "mini-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, + { name = "minitrainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], specifier = ">=1.27,<2" }, { name = "open-clip-torch", specifier = "==3.3.0" }, { name = "safetensors", specifier = "==0.6.2" }, @@ -448,7 +448,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "mini-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, + { name = "minitrainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, { name = "numpy", specifier = ">=2.4" }, { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, @@ -534,7 +534,7 @@ dependencies = [ ] [[package]] -name = "mini-trainer" +name = "minitrainer" version = "0.3.0" source = { directory = "../../../../" } dependencies = [ @@ -572,12 +572,12 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'notebook'" }, { name = "ipywidgets", marker = "extra == 'notebook'" }, { name = "matplotlib" }, - { name = "mini-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["export"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["notebook"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["recommended"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["timm"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["transformers"], marker = "extra == 'all'" }, { name = "numpy", specifier = ">=2.4.0" }, { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, @@ -593,16 +593,16 @@ requires-dist = [ { name = "tensorboard", marker = "extra == 'recommended'" }, { name = "timm", marker = "extra == 'timm'" }, { name = "torch", specifier = ">=2.11" }, - { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, { name = "torchvision" }, - { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, { name = "tqdm" }, { name = "transformers", marker = "extra == 'transformers'" }, { name = "wandb", marker = "extra == 'recommended'" }, diff --git a/dev/ucloud/setup.sh b/dev/ucloud/setup.sh index 4c5823b..061cece 100644 --- a/dev/ucloud/setup.sh +++ b/dev/ucloud/setup.sh @@ -58,7 +58,7 @@ for branch in "${branches[@]}"; do --index-strategy unsafe-first-match "$requirements" sha=$master_sha if [[ "$branch" == quant ]]; then sha=$quant_sha; fi - uv pip install --python "$env_dir/bin/python" --no-deps "mini_trainer @ git+$repo_url@$sha" + uv pip install --python "$env_dir/bin/python" --no-deps "git+$repo_url@$sha" uv pip check --python "$env_dir/bin/python" done diff --git a/dev/ucloud/worker.py b/dev/ucloud/worker.py index 2f02a6a..27f18de 100644 --- a/dev/ucloud/worker.py +++ b/dev/ucloud/worker.py @@ -88,7 +88,11 @@ def preflight(config, branch, *, verify=False): import mini_trainer - distribution = importlib.metadata.distribution("mini_trainer") + try: + distribution = importlib.metadata.distribution("minitrainer") + except importlib.metadata.PackageNotFoundError: + # Historical pinned comparison commits predate the distribution rename. + distribution = importlib.metadata.distribution("mini_trainer") direct = json.loads(distribution.read_text("direct_url.json") or "{}") commit = direct.get("vcs_info", {}).get("commit_id") if commit != config["environments"][branch]["commit"]: diff --git a/dev/wheel_smoke.py b/dev/wheel_smoke.py index 43a319d..8885962 100644 --- a/dev/wheel_smoke.py +++ b/dev/wheel_smoke.py @@ -48,7 +48,7 @@ def main(): importlib.import_module(f"mini_trainer.{module}") blacklist = importlib.resources.files("mini_trainer.modeling.architectures").joinpath("blacklist.json") assert isinstance(json.loads(blacklist.read_text()), dict) - for entry in importlib.metadata.distribution("mini_trainer").entry_points: + for entry in importlib.metadata.distribution("minitrainer").entry_points: if entry.group == "console_scripts": subprocess.run([str(Path(sys.executable).parent / entry.name), "--help"], check=True, timeout=60, capture_output=True) diff --git a/mini_trainer/integrations/parquet.py b/mini_trainer/integrations/parquet.py index 6a1fafa..4e9de8e 100644 --- a/mini_trainer/integrations/parquet.py +++ b/mini_trainer/integrations/parquet.py @@ -16,7 +16,7 @@ def _check_pyarrow(): if not _HAS_PYARROW: raise ImportError( - "Parquet integration requires the optional dependency: pyarrow. Install with `pip install mini_trainer[recommended]`." + "Parquet integration requires the optional dependency: pyarrow. Install with `pip install minitrainer[recommended]`." ) diff --git a/mini_trainer/logging/wandb.py b/mini_trainer/logging/wandb.py index bdab689..b9115a1 100644 --- a/mini_trainer/logging/wandb.py +++ b/mini_trainer/logging/wandb.py @@ -23,7 +23,7 @@ def _require_wandb(): if wandb is None: raise ImportError( - "wandb is not installed. Please install it using `uv pip install mini_trainer[recommended]`, " + "wandb is not installed. Please install it using `uv pip install minitrainer[recommended]`, " "`uv sync --extra recommended`, or `uv add wandb`." ) diff --git a/mini_trainer/modeling/architectures/bioclip.py b/mini_trainer/modeling/architectures/bioclip.py index d9e31bd..298a718 100644 --- a/mini_trainer/modeling/architectures/bioclip.py +++ b/mini_trainer/modeling/architectures/bioclip.py @@ -13,7 +13,7 @@ def get_bioclip_encoder(version: str = "bioclip-2", pretrained: bool = True): except ImportError as e: e.add_note( "The `open_clip` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[bioclip]`." + "Please install with `pip install minitrainer[bioclip]`." ) raise diff --git a/mini_trainer/modeling/architectures/timm.py b/mini_trainer/modeling/architectures/timm.py index 4691b39..9db7e7c 100644 --- a/mini_trainer/modeling/architectures/timm.py +++ b/mini_trainer/modeling/architectures/timm.py @@ -29,7 +29,7 @@ def get_timm_model( from timm.data import create_transform, resolve_model_data_config except ImportError as e: e.add_note( - "The `timm` module was not found in the current Python environment. Please install with `pip install mini-trainer[timm]`." + "The `timm` module was not found in the current Python environment. Please install with `pip install minitrainer[timm]`." ) raise diff --git a/mini_trainer/modeling/architectures/transformers.py b/mini_trainer/modeling/architectures/transformers.py index a86d931..89aa7d4 100644 --- a/mini_trainer/modeling/architectures/transformers.py +++ b/mini_trainer/modeling/architectures/transformers.py @@ -11,7 +11,7 @@ def __init__(self, preprocessor): except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[transformers]`." + "Please install with `pip install minitrainer[transformers]`." ) raise assert isinstance(preprocessor, TorchvisionBackend) @@ -57,7 +57,7 @@ def get_transformers_model( except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install mini-trainer[transformers]`." + "Please install with `pip install minitrainer[transformers]`." ) raise diff --git a/mini_trainer/modeling/onnx.py b/mini_trainer/modeling/onnx.py index 29e947c..1830f13 100644 --- a/mini_trainer/modeling/onnx.py +++ b/mini_trainer/modeling/onnx.py @@ -75,7 +75,7 @@ def _dependencies(): import onnxruntime import onnxscript # noqa: F401 except ImportError as error: - raise ImportError("ONNX export requires optional dependencies. Install mini_trainer[export].") from error + raise ImportError("ONNX export requires optional dependencies. Install minitrainer[export].") from error return onnx, onnxruntime @@ -267,7 +267,10 @@ def export_onnx( "classifiers": classifiers, "preprocessing": {"in_graph": False, "recipe": preprocessing, "requires_configuration": preprocessing is None}, "opset": opset_version, - "versions": {name: version(name) for name in ("mini_trainer", "torch", "torchvision", "onnx", "onnxscript", "onnxruntime")}, + "versions": { + name: version("minitrainer" if name == "mini_trainer" else name) + for name in ("mini_trainer", "torch", "torchvision", "onnx", "onnxscript", "onnxruntime") + }, "verification": { "provider": "CPUExecutionProvider", "reference_device": str(reference_device), diff --git a/mini_trainer/modeling/quantization.py b/mini_trainer/modeling/quantization.py index e77aa70..e115657 100644 --- a/mini_trainer/modeling/quantization.py +++ b/mini_trainer/modeling/quantization.py @@ -31,7 +31,7 @@ def _backend(): get_default_x86_inductor_quantization_config, ) except ImportError as error: - raise ImportError("INT8 quantization requires mini_trainer[quantization].") from error + raise ImportError("INT8 quantization requires minitrainer[quantization].") from error return quantize_pt2e, export_utils, X86InductorQuantizer, get_default_x86_inductor_quantization_config, lower_pt2e_quantized_to_x86 diff --git a/mini_trainer/modeling/quantized_training.py b/mini_trainer/modeling/quantized_training.py index 93475e9..cea5e15 100644 --- a/mini_trainer/modeling/quantized_training.py +++ b/mini_trainer/modeling/quantized_training.py @@ -12,7 +12,7 @@ def _backend(): try: from . import _quantized_training except ImportError as error: - raise ImportError("CUDA INT8 training requires mini_trainer[quantization] and a compatible CUDA/Triton installation.") from error + raise ImportError("CUDA INT8 training requires minitrainer[quantization] and a compatible CUDA/Triton installation.") from error return _quantized_training diff --git a/mini_trainer/visualization/dendrogram.py b/mini_trainer/visualization/dendrogram.py index 3d396ce..a45d068 100644 --- a/mini_trainer/visualization/dendrogram.py +++ b/mini_trainer/visualization/dendrogram.py @@ -44,7 +44,7 @@ def _check_deps(): if not _HAS_DENDROGRAM_DEPS: raise ImportError( "Dendrogram visualization requires optional dependencies: biopython and scipy. " - "Install them with: `uv pip install mini_trainer[recommended]` or `uv sync --extra recommended`." + "Install them with: `uv pip install minitrainer[recommended]` or `uv sync --extra recommended`." ) diff --git a/pyproject.toml b/pyproject.toml index c4a7f07..4435bd6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "mini_trainer" +name = "minitrainer" version = "0.3.0" default-optional-dependency-keys = ["recommended"] dependencies = [ @@ -87,12 +87,12 @@ recommended = [ "wandb", ] all = [ - "mini_trainer[recommended]", - "mini_trainer[notebook]", - "mini_trainer[timm]", - "mini_trainer[bioclip]", - "mini_trainer[transformers]", - "mini_trainer[export]", + "minitrainer[recommended]", + "minitrainer[notebook]", + "minitrainer[timm]", + "minitrainer[bioclip]", + "minitrainer[transformers]", + "minitrainer[export]", ] quantization = ["torchao>=0.17,<0.18"] export = ["onnx>=1.17", "onnxscript>=0.3", "onnxruntime>=1.20"] @@ -161,6 +161,7 @@ build-backend = "uv_build" [tool.uv.build-backend] module-root = "" +module-name = "mini_trainer" source-include = ["mini_trainer/modeling/architectures/blacklist.json"] [tool.pytest.ini_options] diff --git a/tests/export/test_onnx.py b/tests/export/test_onnx.py index 0355450..c030ad4 100644 --- a/tests/export/test_onnx.py +++ b/tests/export/test_onnx.py @@ -23,7 +23,7 @@ pytestmark = pytest.mark.skipif( any(importlib.util.find_spec(name) is None for name in ("onnx", "onnxscript", "onnxruntime")), - reason="Install mini_trainer[export] to run ONNX integration tests", + reason="Install minitrainer[export] to run ONNX integration tests", ) diff --git a/tests/quantization/test_quantization.py b/tests/quantization/test_quantization.py index fd8199f..f300595 100644 --- a/tests/quantization/test_quantization.py +++ b/tests/quantization/test_quantization.py @@ -15,7 +15,7 @@ from mini_trainer.trainer import train_one_epoch from tests.training.test_checkpoint_contract import assert_state_equal -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mini_trainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install minitrainer[quantization]") def model(head=Classifier, normalized=True): diff --git a/tests/quantization/test_quantized_training.py b/tests/quantization/test_quantized_training.py index 2ae02b4..757ad29 100644 --- a/tests/quantization/test_quantized_training.py +++ b/tests/quantization/test_quantized_training.py @@ -12,7 +12,7 @@ @pytest.mark.parametrize("gradient_scale", [1.0, 1e-6]) def test_integer_training_gradients_and_saved_storage(gradient_scale): if importlib.util.find_spec("torchao") is None: - pytest.skip("Install mini_trainer[quantization]") + pytest.skip("Install minitrainer[quantization]") if os.environ.get("RUN_CUDA_TESTS") != "1": pytest.skip("Set RUN_CUDA_TESTS=1 for the native INT8 training kernel test") if not torch.cuda.is_available(): diff --git a/tests/quantization/test_quantized_training_model.py b/tests/quantization/test_quantized_training_model.py index 65ae420..07ca247 100644 --- a/tests/quantization/test_quantized_training_model.py +++ b/tests/quantization/test_quantized_training_model.py @@ -9,7 +9,7 @@ from mini_trainer.modeling.quantized_training import load_training_weights, prepare_quantized_training, restore_quantized_training -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mini_trainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install minitrainer[quantization]") def test_selection_preserves_ties_and_reports_float_operations(): diff --git a/uv.lock b/uv.lock index 3ff2b37..ae76565 100644 --- a/uv.lock +++ b/uv.lock @@ -2,24 +2,60 @@ version = 1 revision = 3 requires-python = ">=3.12" resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", ] conflicts = [[ - { package = "mini-trainer", extra = "cpu" }, - { package = "mini-trainer", extra = "cu126" }, - { package = "mini-trainer", extra = "cu130" }, - { package = "mini-trainer", extra = "cu132" }, + { package = "minitrainer", extra = "cpu" }, + { package = "minitrainer", extra = "cu126" }, + { package = "minitrainer", extra = "cu130" }, + { package = "minitrainer", extra = "cu132" }, ]] [[package]] @@ -55,7 +91,7 @@ version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } wheels = [ @@ -125,7 +161,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ @@ -255,7 +291,7 @@ name = "click" version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ @@ -435,12 +471,12 @@ name = "cuda-bindings" version = "12.9.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-pathfinder", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-pathfinder", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/50/04/8a4d45dc154a8a32982658cc55be291e9778d1197834b15d33427e2f65c1/cuda_bindings-12.9.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea331bc47d9988cc61f0ecc5fa8df9dd188b4493ae1c6688bb1ee8ce8ba1af4", size = 7050347, upload-time = "2026-03-11T14:47:35.221Z" }, @@ -465,12 +501,12 @@ name = "cuda-bindings" version = "13.2.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-pathfinder", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-pathfinder" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" }, @@ -500,9 +536,9 @@ name = "cuda-toolkit" version = "12.6.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/ad/88/2dbc37975fffb874418b14380418a1b99cb36f2101fd1d08c54e06ee8c95/cuda_toolkit-12.6.3-py2.py3-none-any.whl", hash = "sha256:79d8605baeb6c2f695761e0efb54bc62dbc3c9e32eb0742df7669c07befaa8f7", size = 2288, upload-time = "2025-08-13T02:03:05.283Z" }, @@ -510,37 +546,37 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] curand = [ - { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] [[package]] @@ -548,9 +584,9 @@ name = "cuda-toolkit" version = "13.0.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, @@ -558,34 +594,34 @@ wheels = [ [package.optional-dependencies] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] [[package]] @@ -593,9 +629,9 @@ name = "cuda-toolkit" version = "13.2.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/bd/6a/f79c134fa8e6d5fe028584933be063ce7961b1a85ce217f261cdda176e48/cuda_toolkit-13.2.1-py2.py3-none-any.whl", hash = "sha256:646d0e3668ce6f78f2312bb9cc0f668b9cbfcbef187eaa6a39eb2ea6dbec2a31", size = 2612, upload-time = "2026-04-14T01:10:36.163Z" }, @@ -603,43 +639,43 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] [[package]] @@ -988,7 +1024,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, { name = "httpx" }, { name = "packaging" }, { name = "pyyaml" }, @@ -1039,7 +1075,7 @@ name = "ipykernel" version = "7.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, { name = "comm" }, { name = "debugpy" }, { name = "ipython" }, @@ -1063,12 +1099,12 @@ name = "ipython" version = "9.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, { name = "decorator" }, { name = "ipython-pygments-lexers" }, { name = "jedi" }, { name = "matplotlib-inline" }, - { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, { name = "prompt-toolkit" }, { name = "psutil" }, { name = "pygments" }, @@ -1416,7 +1452,7 @@ wheels = [ ] [[package]] -name = "mini-trainer" +name = "minitrainer" version = "0.3.0" source = { editable = "." } dependencies = [ @@ -1425,18 +1461,18 @@ dependencies = [ { name = "numpy" }, { name = "psutil" }, { name = "pyyaml" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, { name = "tqdm" }, ] @@ -1463,10 +1499,10 @@ bioclip = [ { name = "open-clip-torch" }, ] cpu = [ - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] cu126 = [ { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" } }, @@ -1524,12 +1560,12 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'notebook'" }, { name = "ipywidgets", marker = "extra == 'notebook'" }, { name = "matplotlib" }, - { name = "mini-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["export"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["notebook"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["recommended"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["timm"], marker = "extra == 'all'" }, - { name = "mini-trainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "minitrainer", extras = ["transformers"], marker = "extra == 'all'" }, { name = "numpy", specifier = ">=2.4.0" }, { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, @@ -1545,16 +1581,16 @@ requires-dist = [ { name = "tensorboard", marker = "extra == 'recommended'" }, { name = "timm", marker = "extra == 'timm'" }, { name = "torch", specifier = ">=2.11" }, - { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, { name = "torchvision" }, - { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mini-trainer", extra = "cpu" } }, - { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mini-trainer", extra = "cu126" } }, - { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mini-trainer", extra = "cu130" } }, - { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mini-trainer", extra = "cu132" } }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, { name = "tqdm" }, { name = "transformers", marker = "extra == 'transformers'" }, { name = "wandb", marker = "extra == 'recommended'" }, @@ -1703,12 +1739,12 @@ name = "nvidia-cublas" version = "13.1.1.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -1721,12 +1757,12 @@ name = "nvidia-cublas" version = "13.4.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d0/48/8571e55aaabbd112f06a39a71fbc3abf0b8a0d450921816a13a6d5e8fa0b/nvidia_cublas-13.4.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:705d7d214fbb20f134415ecadc488abf74f444c155a6555dec5687404afb18a9", size = 513051304, upload-time = "2026-04-13T09:49:32.758Z" }, @@ -1749,9 +1785,9 @@ name = "nvidia-cuda-cupti" version = "13.0.85" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, @@ -1764,9 +1800,9 @@ name = "nvidia-cuda-cupti" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/4e/e2/b7bbe4e39781024fcc698fa3d0a788cd9559d9cba5e23fdbcff0a27783e4/nvidia_cuda_cupti-13.2.75-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:003157a0ca04d34a1f83a764dcbe36eabceda5a771e9a2cc85a461b2765888b6", size = 11759634, upload-time = "2026-04-13T09:40:35.162Z" }, @@ -1791,9 +1827,9 @@ name = "nvidia-cuda-nvrtc" version = "13.0.88" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, @@ -1806,9 +1842,9 @@ name = "nvidia-cuda-nvrtc" version = "13.2.78" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/5f/96/237b40b171e06eb65905375c4ad5c96f78c2f861ac6e8ae7f650d95e1dfd/nvidia_cuda_nvrtc-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a9049031da08cbedd0c20e3470e5a978dc330af0e0326b3b05774718c665dc3e", size = 47019062, upload-time = "2026-04-13T09:45:33.875Z" }, @@ -1831,9 +1867,9 @@ name = "nvidia-cuda-runtime" version = "13.0.96" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, @@ -1846,9 +1882,9 @@ name = "nvidia-cuda-runtime" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/f1/40/56a70b5a4e0a2881a1b7c172fea8025ab6b3cfb2de61c743fb7974d1ded4/nvidia_cuda_runtime-13.2.75-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36e539e8deb01568025830c1454216c26ef4b4529507220b1d8ef739bf5c6439", size = 2339755, upload-time = "2026-04-13T09:37:53.791Z" }, @@ -1873,7 +1909,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, @@ -1886,8 +1922,8 @@ name = "nvidia-cudnn-cu13" version = "9.20.0.48" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -1900,12 +1936,12 @@ name = "nvidia-cufft" version = "12.0.0.61" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, @@ -1918,12 +1954,12 @@ name = "nvidia-cufft" version = "12.2.0.46" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/be/b1/6e36381739b51e692d91646298ad5685c562929b899331c2bb6e9722a176/nvidia_cufft-12.2.0.46-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e8f3a22c2745f95327b7639ba2868ea2cbd5d3131ebe6313394e24164054f41", size = 218244743, upload-time = "2026-04-13T09:51:24.75Z" }, @@ -1936,7 +1972,7 @@ name = "nvidia-cufft-cu12" version = "11.3.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/37/c50d2b2f2c07e146776389e3080f4faf70bcc4fa6e19d65bb54ca174ebc3/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6", size = 200164144, upload-time = "2024-11-20T17:40:58.288Z" }, @@ -1951,9 +1987,9 @@ name = "nvidia-cufile" version = "1.15.1.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, @@ -1965,9 +2001,9 @@ name = "nvidia-cufile" version = "1.17.1.22" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/fe/fd/4b4157512a131a51e1514d40d0199b1c5b7b10c6856db274ff22e5fe15be/nvidia_cufile-1.17.1.22-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bec33d7f1f12691dce330275246587569c2ed90b1ce43b0f94b3e1ce9268744b", size = 1226736, upload-time = "2026-04-13T09:52:40.142Z" }, @@ -1988,9 +2024,9 @@ name = "nvidia-curand" version = "10.4.0.35" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, @@ -2003,9 +2039,9 @@ name = "nvidia-curand" version = "10.4.2.55" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/ee/7c/7c2042b5badc251236bc1f23627d5554cf2ecff37e92ea0a9d39dfc20a61/nvidia_curand-10.4.2.55-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:342e40ddcaedc92aedc72839e0c10064096fceea2f1d0eb57951f86d2901f8c0", size = 62372157, upload-time = "2026-04-13T09:53:32.34Z" }, @@ -2030,14 +2066,14 @@ name = "nvidia-cusolver" version = "12.0.4.66" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" } }, + { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" } }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, @@ -2050,14 +2086,14 @@ name = "nvidia-cusolver" version = "12.2.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/94/21/21e5c491a8285a6ed039cbb8c60ec13ff3aff60c669e1caa4adaeb71f997/nvidia_cusolver-12.2.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9def09fcf300b9465cdf800142abf10149df28c4290bdf9e7b4a700480d31d7", size = 249744985, upload-time = "2026-04-13T09:54:33.757Z" }, @@ -2070,9 +2106,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparse-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/93/17/dbe1aa865e4fdc7b6d4d0dd308fdd5aaab60f939abfc0ea1954eac4fb113/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0", size = 157833628, upload-time = "2024-10-01T17:05:05.591Z" }, @@ -2087,12 +2123,12 @@ name = "nvidia-cusparse" version = "12.6.3.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" } }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, @@ -2105,12 +2141,12 @@ name = "nvidia-cusparse" version = "12.7.10.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/b5/09/9f1fa88dd305e838b71f2ca4e50064e7cbdf2e15cd6410d9e1b74066cc41/nvidia_cusparse-12.7.10.1-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80cc98b38fdcf054a80bd9782fe2e63c66f90e202cac269f641357ccac5fe7e3", size = 168860233, upload-time = "2026-04-13T09:55:48.891Z" }, @@ -2123,7 +2159,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/eb/eb/6681efd0aa7df96b4f8067b3ce7246833dd36830bb4cec8896182773db7d/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887", size = 216451147, upload-time = "2024-11-20T17:44:18.055Z" }, @@ -2176,9 +2212,9 @@ name = "nvidia-nvjitlink" version = "13.0.88" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, @@ -2191,9 +2227,9 @@ name = "nvidia-nvjitlink" version = "13.2.78" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/1e/b5/dae67f0c45516cfaff2d7fba873c7425c2866d4c9ede5c14a269d89ed79b/nvidia_nvjitlink-13.2.78-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:27964b6702aeceee05fc0ab47b4c97e3f8966bd47d05d9827e913c49a025656b", size = 41370766, upload-time = "2026-04-13T09:59:28.799Z" }, @@ -2234,9 +2270,9 @@ name = "nvidia-nvtx" version = "13.0.85" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, @@ -2249,9 +2285,9 @@ name = "nvidia-nvtx" version = "13.2.75" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/b0/cc/314eac684677dced22b913b5d1b3d03adcbe59d6c7332c5d04f864cdb079/nvidia_nvtx-13.2.75-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2d7c24fc582d841493c6dc2cf017c25e4428cf583a3bd9e9325a65f0ecc65f73", size = 153460, upload-time = "2026-04-13T09:46:23.256Z" }, @@ -2372,18 +2408,18 @@ dependencies = [ { name = "regex" }, { name = "safetensors" }, { name = "timm" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } @@ -2407,7 +2443,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } wheels = [ @@ -2466,7 +2502,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "ptyprocess" }, ] sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ @@ -2826,7 +2862,7 @@ name = "pytest" version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, @@ -2914,7 +2950,7 @@ name = "pyzmq" version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ @@ -3289,18 +3325,18 @@ dependencies = [ { name = "huggingface-hub" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/54/ece85b0eef3700c90db8271a43669b05a0ebbe2edb1962329c34374a297e/timm-1.0.27.tar.gz", hash = "sha256:315dfe63186ca9fb7ff941268941231fd5be259f2b4bb4afa28560ae1015cb9a", size = 2439861, upload-time = "2026-05-08T19:38:36.844Z" } wheels = [ @@ -3343,13 +3379,13 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", upload-time = "2026-05-12T16:20:12Z" }, @@ -3366,33 +3402,30 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", -] -dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ef/bb/285d643f254731294c9b595a007eac39db4600a98682d7bca688f42ca164/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", size = 88010197, upload-time = "2026-05-13T14:55:35.414Z" }, @@ -3426,20 +3459,20 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:b9d0e8eed0af9321ffb12b75f4aca371b071254f12cf75875d5a8e7cc8f52b51", upload-time = "2026-05-12T23:16:33Z" }, @@ -3473,32 +3506,29 @@ source = { registry = "https://download.pytorch.org/whl/cu126" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7b13d35e799c5b970403ba8ed7f33041ae5c1c0a2b6320ba3288082df3df3a45", upload-time = "2026-05-12T23:26:44Z" }, @@ -3525,33 +3555,30 @@ source = { registry = "https://download.pytorch.org/whl/cu130" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", -] -dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +dependencies = [ + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cb95bd4626150e41aeea2b60e4635a878ebe01e63f3344409f4b7353fdb7998c", upload-time = "2026-05-12T23:49:12Z" }, @@ -3578,32 +3605,29 @@ source = { registry = "https://download.pytorch.org/whl/cu132" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torch-2.12.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:21909235cbbc94a938d737f1721b53cc61316cd7787aa459b4d458b840fc0309", upload-time = "2026-05-13T00:07:47Z" }, @@ -3642,9 +3666,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", upload-time = "2026-05-12T16:20:37Z" }, @@ -3661,21 +3685,18 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra != 'extra-12-mini-trainer-cu130' and extra != 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c8/5cd91932f7f3671b0743dc4ae1a4c16b1d0b45bf4087976277d325bda718/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", size = 1758824, upload-time = "2026-05-13T14:57:15.227Z" }, @@ -3709,16 +3730,16 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'emscripten'", "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-12-mini-trainer-cpu') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1b06f42d48b62098114923d8a3fe9fa864182715db06584a515155db0aa8eb30", upload-time = "2026-05-12T16:20:36Z" }, @@ -3745,21 +3766,18 @@ source = { registry = "https://download.pytorch.org/whl/cu126" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-12-mini-trainer-cu126' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torchvision-0.27.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4bcd3ea7e9124fb40674dd143a3a28cbde63adc8de6d6ffe1d6810cd40032be", upload-time = "2026-05-12T16:20:41Z" }, @@ -3786,21 +3804,18 @@ source = { registry = "https://download.pytorch.org/whl/cu130" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-12-mini-trainer-cu130' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0a839a2921410b1135add4c3d90f784c9d1e9e9f3c7b401b216d356ddca23ab2", upload-time = "2026-05-12T16:20:44Z" }, @@ -3827,21 +3842,18 @@ source = { registry = "https://download.pytorch.org/whl/cu132" } resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version == '3.13.*' and sys_platform == 'emscripten'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version >= '3.14' and sys_platform == 'darwin'", - "python_full_version == '3.13.*' and sys_platform == 'darwin'", - "python_full_version < '3.13' and sys_platform == 'darwin'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra != 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132') or (extra != 'extra-12-mini-trainer-cpu' and extra != 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torchvision-0.27.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f60fb51914eb9d9e3bc38d164309fb20b55a3786d0348ec2fcd65855147b4a7a", upload-time = "2026-05-12T16:20:46Z" }, @@ -3883,7 +3895,7 @@ name = "tqdm" version = "4.67.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu126') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cpu' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu130') or (extra == 'extra-12-mini-trainer-cu126' and extra == 'extra-12-mini-trainer-cu132') or (extra == 'extra-12-mini-trainer-cu130' and extra == 'extra-12-mini-trainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } wheels = [ From ca101343879b72faa73445740adeca3533ba0313 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:33:10 +0200 Subject: [PATCH 210/221] ci: separate training publication and retain qualified wheels --- .github/workflows/publish.yml | 75 ++++++++++++++++++++++++++--------- dev/check-wheel.sh | 8 ++++ 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 356cce5..ec0232c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,27 +1,66 @@ -name: "Publish to PyPi" +name: Publish training package on: - push: - tags: - # Publish on any tag starting with a `v`, e.g., v0.1.0 - - v* + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: publish-training-${{ github.ref }} + cancel-in-progress: false jobs: - run: + prepare: + if: github.event_name == 'workflow_dispatch' || startsWith(github.event.release.tag_name, 'minitrainer-v') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - name: Validate release identity + env: + RELEASE_TAG: ${{ github.event.release.tag_name }} + run: | + python3 - <<'PY' + import os, tomllib + from pathlib import Path + project = tomllib.loads(Path('pyproject.toml').read_text())['project'] + assert project['name'] == 'minitrainer' + tag = os.environ['RELEASE_TAG'] + if tag: + assert tag == f"minitrainer-v{project['version']}", 'Tag and package version differ' + PY + - run: uv python install 3.13 + - name: Qualify and retain the wheel + run: WHEEL_OUTPUT_DIR="$PWD/dist" bash dev/check-wheel.sh 3.13 + - run: uv build --sdist --out-dir dist + - name: Record artifacts + run: sha256sum dist/* > dist/SHA256SUMS + - uses: actions/upload-artifact@v4 + with: + name: minitrainer-distributions + path: dist/ + if-no-files-found: error + + publish: + needs: prepare + if: github.event_name == 'release' && startsWith(github.event.release.tag_name, 'minitrainer-v') && !github.event.release.prerelease runs-on: ubuntu-latest - environment: - name: pypi + environment: pypi-training permissions: id-token: write contents: read steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Install uv - uses: astral-sh/setup-uv@v8.1.0 - - name: Install Python 3.14 - run: uv python install 3.14 - - name: Build - run: uv build - - name: Publish - run: uv publish \ No newline at end of file + - uses: actions/download-artifact@v4 + with: + name: minitrainer-distributions + path: dist/ + - name: Verify qualified artifact bytes + run: sha256sum --check dist/SHA256SUMS + - uses: astral-sh/setup-uv@v8.1.0 + - name: Publish qualified distributions + run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ dist/*.whl dist/*.tar.gz diff --git a/dev/check-wheel.sh b/dev/check-wheel.sh index d4a1597..c428cc4 100644 --- a/dev/check-wheel.sh +++ b/dev/check-wheel.sh @@ -4,6 +4,8 @@ set -euo pipefail cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." smoke_python="${1:-.venv/bin/python}" +wheel_output="${WHEEL_OUTPUT_DIR:-}" +if [[ -n "$wheel_output" ]]; then wheel_output="$(realpath -m "$wheel_output")"; fi smoke_dir="$(mktemp -d "${TMPDIR:-/tmp}/mini-trainer-wheel.XXXXXXXX")" trap 'rm -rf -- "$smoke_dir"' EXIT @@ -17,3 +19,9 @@ cd -- "$smoke_dir" # Make the custom test backbone importable for weights-only reconstruction. CUDA_VISIBLE_DEVICES="" MPLBACKEND=Agg MPLCONFIGDIR="$smoke_dir/matplotlib" "$smoke_dir/env/bin/python" -I -c \ 'import sys; sys.path.insert(0, "."); from smoke_fixture.check import main; main()' + +# Retain the exact installed and exercised wheel for publication preparation. +if [[ -n "$wheel_output" ]]; then + mkdir -p "$wheel_output" + cp "$smoke_dir"/dist/*.whl "$wheel_output/" +fi From fe9dec643dfd20ab572920c8eb6a50796e9ed8e7 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:39:54 +0200 Subject: [PATCH 211/221] feat(deploy): add reusable configuration and single-image Space demo --- deployment/demo/.gitignore | 1 + deployment/demo/README.md | 35 +++++++++ deployment/demo/app.py | 112 +++++++++++++++++++++++++++ deployment/demo/requirements.txt | 5 ++ deployment/mambo_deploy/predictor.py | 26 +++++++ tests/releases/test_deployment.py | 17 ++++ 6 files changed, 196 insertions(+) create mode 100644 deployment/demo/.gitignore create mode 100644 deployment/demo/README.md create mode 100644 deployment/demo/app.py create mode 100644 deployment/demo/requirements.txt diff --git a/deployment/demo/.gitignore b/deployment/demo/.gitignore new file mode 100644 index 0000000..c18dd8d --- /dev/null +++ b/deployment/demo/.gitignore @@ -0,0 +1 @@ +__pycache__/ diff --git a/deployment/demo/README.md b/deployment/demo/README.md new file mode 100644 index 0000000..880315a --- /dev/null +++ b/deployment/demo/README.md @@ -0,0 +1,35 @@ +--- +title: MAMBO V3 +emoji: 🦋 +colorFrom: green +colorTo: blue +sdk: gradio +sdk_version: "6.28.0" +python_version: "3.13" +app_file: app.py +suggested_hardware: cpu-basic +tags: + - image-classification + - biodiversity + - onnx +license: mit +--- + +# MAMBO V3 demonstration + +One image, configurable runtime, geographic/custom class list, TTA and hierarchical +predictions. The Space uses the release API on CPU and caches one predictor per backend +(two in total), reusing loaded runtimes when scope or TTA changes. It does not require GPU hosting. First predictions include loading. + +Uploaded images are processed on the server. Gradio's temporary upload cache is +cleaned every five minutes for files older than five minutes; the application does +not save images, collect feedback or use uploads for training. Do not upload +sensitive images. Prediction requests are serialized and the queue is bounded. + +The application code is MIT. Model weights are **CC BY-NC-SA 4.0**. See the +[release documentation](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md) +for integration, comparisons and limitations. Readable names are displayed when +provided in the accompanying `taxon-names.json`; GBIF IDs remain authoritative. + +The release workflow stages this directory with pinned dependency requirements +and optional taxon names. It uploads only that staged directory, not the repository. diff --git a/deployment/demo/app.py b/deployment/demo/app.py new file mode 100644 index 0000000..7235d1d --- /dev/null +++ b/deployment/demo/app.py @@ -0,0 +1,112 @@ +"""Single-image Space using the published MAMBO deployment API.""" + +import json +import os +import threading +import time +from functools import lru_cache +from pathlib import Path + +os.environ.setdefault("GRADIO_ANALYTICS_ENABLED", "False") + +import gradio as gr # noqa: E402 +from mambo_deploy import Predictor # noqa: E402 + +# Serial requests keep cached runtimes bounded and avoid competing CPU inference. +LOCK = threading.Lock() +NAMES_PATH = Path(__file__).with_name("taxon-names.json") +NAMES = json.loads(NAMES_PATH.read_text()) if NAMES_PATH.exists() else {} + + +@lru_cache(maxsize=2) +def predictor_for(backend): + if backend == "torch": + import torch + + torch.set_num_threads(2) + return Predictor(backend=backend, batch_size=1, threads=2) + + +def classify(image, backend, preset, custom, tta, topk): + if image is None: + raise gr.Error("Upload one moth or butterfly image first.") + labels = tuple(dict.fromkeys(custom.replace(",", " ").split())) if custom.strip() else () + try: + with LOCK: + predictor = predictor_for(backend) + predictor.configure(class_list=labels, tta=tta) if labels else predictor.configure(model=preset, tta=tta) + # The API returns one common K for all retained ranks. + available = min(map(len, predictor.hierarchy_plan(predictor.selected).labels)) + effective_k = min(int(topk), available) + started = time.perf_counter() + result = predictor.predict(image, topk=effective_k) + elapsed = time.perf_counter() - started + tables = [] + for rank in range(3): + tables.append( + [ + [ + k + 1, + NAMES.get(result.labels[0][k][rank], ""), + result.labels[0][k][rank], + round(float(result.confidence[0, k, rank]) * 100, 2), + ] + for k in range(effective_k) + ] + ) + scope = "custom class list" if labels else preset + details = ( + f"**{backend} · CPU · {scope} · TTA {'on' if tta else 'off'}** \n" + f"Prediction: **{elapsed:.2f} s** (includes model loading on first use; not a throughput benchmark)." + ) + if effective_k != int(topk): + details += f" Showing top-{effective_k}: the smallest retained rank has {available} classes." + return *tables, details + except (ValueError, RuntimeError, OSError, ImportError) as error: + raise gr.Error(str(error)) from error + + +def build_app(): + presets = Predictor().available_presets() + with gr.Blocks(title="MAMBO V3", delete_cache=(300, 300)) as app: + gr.Markdown( + "# MAMBO V3\nIdentify moths and butterflies at species, genus and family level. " + "Images are processed on this server. Uploads are temporary and are not used for training. " + "This classifies one individual; it does not detect animals or reliably reject unknown species." + ) + with gr.Row(): + image = gr.Image(type="pil", sources=["upload"], label="One individual", image_mode="RGB") + with gr.Column(): + backend = gr.Radio(["onnx", "torch"], value="onnx", label="Runtime") + preset = gr.Dropdown(list(presets), value="full", label="Geographic scope") + scope = gr.Markdown(presets["full"]["scope"]) + preset.change(lambda name: presets[name]["scope"], preset, scope, queue=False) + tta = gr.Checkbox(value=False, label="TTA — recommended recipe, about 3× more inference work") + topk = gr.Slider(1, 10, value=5, step=1, label="Candidates per rank") + with gr.Accordion("Custom species list", open=False): + custom = gr.Textbox(label="GBIF species IDs, separated by spaces, commas or newlines", lines=3) + gr.Markdown("When supplied, this replaces the geographic preset.") + run = gr.Button("Classify", variant="primary") + status = gr.Markdown() + tables = [ + gr.Dataframe( + headers=["Rank", "Name", "GBIF taxon ID", "Confidence (%)"], + datatype=["number", "str", "str", "number"], + interactive=False, + label=rank, + ) + for rank in ("Species", "Genus", "Family") + ] + gr.Markdown( + "Ranks are predicted independently; the winning IDs need not form one ancestral path. " + "TTA helps the evaluated monitoring crops but can hurt on other image domains. " + "Weights: **CC BY-NC-SA 4.0**; adapter: MIT. " + "[Integration, evidence and limitations](https://github.com/asgersvenning/mini_trainer/" + "blob/MAMBO_v3/deployment/README.md)." + ) + run.click(classify, [image, backend, preset, custom, tta, topk], [*tables, status], concurrency_limit=1, api_name=False) + return app.queue(max_size=8, default_concurrency_limit=1) + + +if __name__ == "__main__": + build_app().launch(share=False, max_file_size="20mb", enable_monitoring=False, run_history=False) diff --git a/deployment/demo/requirements.txt b/deployment/demo/requirements.txt new file mode 100644 index 0000000..cf3372b --- /dev/null +++ b/deployment/demo/requirements.txt @@ -0,0 +1,5 @@ +--extra-index-url https://download.pytorch.org/whl/cpu +gradio==6.28.0 +mambo-v3[onnx,torch]==0.3.0 +torch==2.14.0+cpu +torchvision==0.29.0+cpu diff --git a/deployment/mambo_deploy/predictor.py b/deployment/mambo_deploy/predictor.py index 2e082b3..906783c 100644 --- a/deployment/mambo_deploy/predictor.py +++ b/deployment/mambo_deploy/predictor.py @@ -164,6 +164,32 @@ def _apply_class_mask(self, mask): def available_presets(self): return {"full": {"count": len(self.bundle.classes["labels"][0]), "scope": "All model species"}, **self.bundle.regions} + def configure(self, *, model=None, class_list=None, tta=None): + """Change scope/TTA between calls while retaining loaded runtime sessions. + + Omitted options remain unchanged. ``model="full"`` resets a custom list; + ``tta=False`` disables augmentation. Invalid options leave state unchanged. + """ + if model is not None and class_list is not None: + raise ValueError("Choose a preset or a custom class list, not both") + with self._lock: + augmentation = self.tta if tta is None else resolve_tta(tta) + preset, labels = self.preset, None + if class_list is not None: + preset, labels = "custom", self._read_list(class_list) + elif model is not None: + preset = self._preset_name(model) + labels = ( + self.bundle.classes["labels"][0] + if preset == "full" + else self.bundle.file(self.bundle.regions[preset]["path"]).read_text().splitlines() + ) + if labels is not None: + self._select_labels(labels) + self._hierarchy_plans.clear() + self.preset, self.tta = preset, augmentation + return self + @cached_property def _onnx_api(self): try: diff --git a/tests/releases/test_deployment.py b/tests/releases/test_deployment.py index 2370649..3a9f3d3 100644 --- a/tests/releases/test_deployment.py +++ b/tests/releases/test_deployment.py @@ -775,3 +775,20 @@ def batches(items, **kwargs): assert not (tmp_path / "failed").exists() assert not list(tmp_path.glob(".mambo-results-*")) assert len(closed) == 2 + + +def test_reconfigure_keeps_runtime_and_rejects_invalid_state(bundle): + predictor = Predictor(bundle) + session = object() + predictor._sessions["onnx"] = session + predictor.configure(model="europe", tta=True) + assert predictor.class_list == ["a", "b"] and predictor.tta is not None + predictor.configure(class_list=["c"]) + assert predictor.preset == "custom" and predictor.class_list == ["c"] + assert predictor.tta is not None and predictor._sessions["onnx"] is session + with pytest.raises(ValueError, match="Unknown species"): + predictor.configure(class_list=["missing"], tta=False) + assert predictor.class_list == ["c"] and predictor.tta is not None + predictor.configure(model="full", tta=False) + assert predictor.class_list == ["a", "b", "c"] and predictor.tta is None + assert predictor._sessions["onnx"] is session From a634c0c07337205c2883cce01e622fb490e346ad Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:39:54 +0200 Subject: [PATCH 212/221] docs(release): prepare public installation and discovery metadata --- deployment/CITATION.cff | 10 ++++++++ deployment/README.md | 14 ++++++----- deployment/pyproject.toml | 8 +++++++ dev/releases/mambo_v3/MODEL_CARD.md | 18 ++++++++++++++- dev/releases/mambo_v3/deployment-freeze.md | 27 +++++++++++++++++++++- docs/mambo-integration.md | 17 +++++++++----- docs/roadmap.md | 2 +- 7 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 deployment/CITATION.cff diff --git a/deployment/CITATION.cff b/deployment/CITATION.cff new file mode 100644 index 0000000..1567f08 --- /dev/null +++ b/deployment/CITATION.cff @@ -0,0 +1,10 @@ +cff-version: 1.2.0 +message: "Please cite this release when using MAMBO V3 and identify the selected preset and runtime configuration." +title: "MAMBO V3: hierarchical moth and butterfly image classification" +type: software +authors: + - family-names: Svenning + given-names: Asger +version: 0.3.0 +repository-code: "https://github.com/asgersvenning/mini_trainer" +url: "https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v3" diff --git a/deployment/README.md b/deployment/README.md index 093fab8..8d672eb 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -1,4 +1,4 @@ -# MAMBO deployment — release candidate +# MAMBO V3 deployment Identify moths and butterflies from images, with species, genus and family predictions. V3 adds a standalone ONNX option alongside PyTorch: **no training @@ -10,7 +10,8 @@ including CPU, laptop GPU and server GPU measurements. (non-commercial, share-alike). Adapter code: MIT.** [Model notices](../dev/releases/mambo_v3/NOTICES.md) explain attribution and scope. -This candidate is not yet published; the examples use the supplied release wheels. +Publication is being prepared; the commands below target the public release. +Release reviewers can install the supplied wheels instead. Model files download automatically from public ERDA storage on first use and are verified and cached. Reuse one predictor across calls. @@ -22,7 +23,7 @@ is required. Install ONNX/CPU to start without a CUDA setup: ```sh uv venv --python 3.13 .venv source .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1 -uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]' +uv pip install 'mambo-v3[onnx]==0.3.0' ``` **Python** — supply images directly: @@ -47,7 +48,7 @@ This creates `output/predictions/predictions.json` and `mini_metric.csv`; `--embeddings` also writes `embeddings.npy`. Choose a new output name for each run. For a one-off command without installing into your application environment, replace `mambo_predict` with -`uvx --from './mambo_v3-0.3.0-py3-none-any.whl[onnx]' mambo_predict`. +`uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict`. | Interface | Inputs | Outputs | |---|---|---| @@ -57,7 +58,8 @@ For a one-off command without installing into your application environment, repl For an RGB HWC NumPy image, pass `image.transpose(2, 0, 1)`; convert OpenCV BGR to RGB first. Do not resize or normalize images yourself. Alpha is discarded and EXIF -orientation is not applied. Predictions at each rank are independent, so the three +orientation is not applied. `topk` cannot exceed the smallest retained rank; narrow custom lists may require `topk=1`. +Predictions at each rank are independent, so the three IDs need not form one ancestral path. CSV truth labels are inferred from parent folder names; arbitrary image folders do not supply evaluation ground truth. @@ -144,7 +146,7 @@ if the defaults do not fit your workload. independent of backend; both entry points download model assets automatically. - **Model and features:** EfficientNetV2-S, ONNX, expanded presets, optional TTA and streaming. Supply original pixels and match classes by GBIF ID rather than numeric - index. V3's vocabulary, scores and embedding width differ from V2; thresholds and + index. V2 and V3 share the ordered taxon vocabulary. Scores and embedding width change; thresholds and stored embeddings need migration. [Migration details](../docs/mambo-integration.md#moving-from-v2) cover compatibility diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index 16257a7..d406667 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -7,6 +7,14 @@ dependencies = ["numpy>=2.4", "pillow>=11"] readme = "README.md" license = "MIT" license-files = ["LICENSE"] +authors = [{name = "Asger Svenning"}] +keywords = ["image-classification", "biodiversity", "lepidoptera", "onnx", "pytorch"] + +[project.urls] +Documentation = "https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md" +Repository = "https://github.com/asgersvenning/mini_trainer" +Issues = "https://github.com/asgersvenning/mini_trainer/issues" +Changelog = "https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v3" [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] diff --git a/dev/releases/mambo_v3/MODEL_CARD.md b/dev/releases/mambo_v3/MODEL_CARD.md index 0f8b110..c270a63 100644 --- a/dev/releases/mambo_v3/MODEL_CARD.md +++ b/dev/releases/mambo_v3/MODEL_CARD.md @@ -1,3 +1,17 @@ +--- +license: cc-by-nc-sa-4.0 +library_name: onnx +pipeline_tag: image-classification +tags: + - biology + - lepidoptera + - moths + - butterflies + - pytorch + - onnx + - hierarchical-classification +--- + # MAMBO V3 Unpublished release candidate: EfficientNetV2-S trained on global-lepi in September @@ -12,7 +26,9 @@ ranks are predicted independently. Optional TTA uses `rotation30_pad25_3`. ## Intended use and evidence -Local moth/butterfly image classification and downstream integration. Both +Local moth/butterfly image classification and downstream integration. This is a +closed-vocabulary classifier for images of individual animals, not an animal +detector or a validated unknown-species rejection system. Both Flemming monitoring crops and the original global-lepi test split have completed V2/V3, backend and TTA comparisons. Their different domains produce different TTA responses; neither establishes accuracy for every deployment. Regional vocabulary diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index f0b4c6f..5ef0a49 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -1,10 +1,35 @@ # MAMBO V3 deployment freeze -25 September 2026. Release preparation only: packages, artifacts and tags have not +26 September 2026. Publication preparation is active after the packaging audit. +The previous candidate qualification is historical; the final candidate must be +rebuilt after the changes below. Release preparation only: packages, artifacts and tags have not been published. The selected weight license is **CC BY-NC-SA 4.0**; adapter code remains MIT. Final artifact identities and installed checks are recorded in [final qualification](final-qualification.md). +## Current publication preparation + +- Integrated the `minitrainer` distribution rename, retaining `mini_trainer` imports. + Both lockfiles preserve dependency versions. Isolated installed-wheel imports, + CLI, training, checkpoint reload and inference passed. +- Training publication now accepts `minitrainer-vVERSION` release events only; + manual dispatch prepares artifacts without publication. Model/demo workflows + and final publication-routing qualification remain to be completed. +- The CPU Space uses the release API with runtime, scope, custom-list, TTA and + top-K controls. Final staging, readable-name assets and installed-candidate + qualification remain pending. Browser reuse is assessed separately below. +- Complete publication documentation, model/Space staging, final rebuilt artifact + qualification and the human publishing handoff before calling this freeze ready. + +## Browser scope + +The existing prototype at `b174426` packages a WASM embedding explorer, including +prototype coordinates, a separate worker and a different EXIF/alpha policy. It +does not already supply the release preset/TTA interface. Integrating it would +require another browser preprocessing and configuration qualification effort. +This release preparation therefore delivers the Python-backed Space; WebGPU +remains an explicitly unqualified follow-up, reusing that prototype where useful. + ## Release contract - Distribution `mambo-v3`, version `0.3.0`; Python import `mambo_deploy`. diff --git a/docs/mambo-integration.md b/docs/mambo-integration.md index 85c849d..ce14650 100644 --- a/docs/mambo-integration.md +++ b/docs/mambo-integration.md @@ -6,17 +6,17 @@ additional steps for the default ONNX/CPU integration. ## Runtime installation -Use an activated Python 3.12+ environment. The candidate wheels must be supplied -locally until publication. Choose one runtime installation: +Use an activated Python 3.12+ environment. The commands target the prepared public release; reviewers can substitute the +supplied wheels before publication. Choose one runtime installation: | Environment | Installation | Predictor options / CLI | |---|---|---| -| CPU, without PyTorch | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx]'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | -| NVIDIA GPU, without the training package | `uv pip install './mambo_v3-0.3.0-py3-none-any.whl[onnx-cuda]'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | -| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto './mini_trainer-0.3.0-py3-none-any.whl' ./mambo_v3-0.3.0-py3-none-any.whl` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | +| CPU, without PyTorch | `uv pip install 'mambo-v3[onnx]==0.3.0'` | Defaults: `backend="onnx", device="cpu"` / `--backend onnx --device cpu` | +| NVIDIA GPU, without the training package | `uv pip install 'mambo-v3[onnx-cuda]==0.3.0'` | `backend="onnx", device="cuda:0"` / `--backend onnx --device cuda:0` | +| PyTorch CPU or NVIDIA GPU | `uv pip install --torch-backend=auto 'mambo-v3[torch]==0.3.0'` | `backend="torch", device="cpu"` or `device="cuda:0"` / `--backend torch --device cpu` or `--device cuda:0` | For an environment with ONNX Runtime already provisioned, install the base -`mambo-v3` wheel without extras. Do not install CPU and GPU ONNX Runtime +`mambo-v3==0.3.0` without extras. Do not install CPU and GPU ONNX Runtime packages together. Use the application's dependency management to select and record versions; inference never installs or replaces runtime packages. If you use `uv run`, pass `--no-sync` to retain the installed environment. @@ -81,6 +81,11 @@ release checkpoint. Keep the V2 runtime/assets separately if you still need to r V2. Preserving its calling conventions does not imply identical predictions or a shared embedding space. +For an interactive application, call `predictor.configure(model="north_europe", tta=True)` +to change scope and TTA while reusing loaded models. Omitted settings stay unchanged; +`class_list=[...]` selects custom species, `model="full"` resets the scope, and +`tta=False` disables TTA. Finish any active stream before reconfiguring. + ## Streaming controls `predict_stream(paths)` yields ordered prediction batches; `embeddings=True` yields diff --git a/docs/roadmap.md b/docs/roadmap.md index ae53194..f16a3e2 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -7,7 +7,7 @@ pages own procedures and evidence. Delivered work is context, not a new checklis | Area | Delivered | Remaining boundary | | --- | --- | --- | -| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Human publication review and publication, separately authorized. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | +| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Package identity and independently triggered publication automation, a small Space demo, and final candidate qualification are being completed. Public publication remains manual. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | | Training | Four-GPU UCloud production run completed; loader, optimizer-step and checkpoint safeguards implemented. | Before another production run, deliver the recovery/evaluation workflow below. | | Quantization | Merged opt-in native CUDA INT8 Linear training, x86 PTQ/QAT, checkpoint/export tools. | Useful target-machine trade-offs remain unqualified; [specialist roadmap](quantization-roadmap.md). | | Generic export | `mt_export`, manifests and CPU float32 ONNX qualification across representative heads/backbones. | Broader backend qualification and generic Hugging Face bundle integration; MAMBO packaging does not establish either for every model. | From 4623a724e6f9c7acc25886a12f1736d793cc89c3 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:54:52 +0200 Subject: [PATCH 213/221] feat(release): prepare independent model and Space publication workflows --- .github/workflows/ci.yml | 4 +- .github/workflows/publish-demo.yml | 63 + .github/workflows/publish-model.yml | 124 + deployment/README.md | 5 +- deployment/demo/README.md | 6 + deployment/demo/taxon-names.json | 17214 +++++++++++++++++ dev/releases/mambo_v3/MODEL_CARD.md | 23 +- dev/releases/mambo_v3/build_bundle.py | 22 +- dev/releases/mambo_v3/deployment-freeze.md | 9 +- dev/releases/mambo_v3/final-qualification.md | 123 +- dev/releases/mambo_v3/prepare_candidate.py | 15 +- dev/releases/mambo_v3/prepare_names.py | 42 + dev/releases/mambo_v3/publication.md | 195 +- dev/releases/mambo_v3/publication_assets.py | 120 + dev/releases/mambo_v3/publish_assets.py | 76 + dev/releases/mambo_v3/qualify_candidate.py | 101 + dev/releases/mambo_v3/qualify_demo.py | 52 + tests/releases/test_publication.py | 77 + 18 files changed, 18103 insertions(+), 168 deletions(-) create mode 100644 .github/workflows/publish-demo.yml create mode 100644 .github/workflows/publish-model.yml create mode 100644 deployment/demo/taxon-names.json create mode 100644 dev/releases/mambo_v3/prepare_names.py create mode 100644 dev/releases/mambo_v3/publication_assets.py create mode 100644 dev/releases/mambo_v3/publish_assets.py create mode 100644 dev/releases/mambo_v3/qualify_candidate.py create mode 100644 dev/releases/mambo_v3/qualify_demo.py create mode 100644 tests/releases/test_publication.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eaa0309..c4c9ab0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,14 +2,14 @@ name: CI on: push: - branches: ["master"] + branches: ["master", "release/mambo-v3"] # Only agent documents are exempt; source, public docs and workflow edits run checks. paths-ignore: - 'AGENTS.md' - '.agents/**/*.md' - '.agents/.gitignore' pull_request: - branches: ["master"] + branches: ["master", "release/mambo-v3"] permissions: contents: read diff --git a/.github/workflows/publish-demo.yml b/.github/workflows/publish-demo.yml new file mode 100644 index 0000000..fc2853b --- /dev/null +++ b/.github/workflows/publish-demo.yml @@ -0,0 +1,63 @@ +name: Prepare or update MAMBO demo + +on: + workflow_dispatch: + inputs: + publish: + description: Deploy the reviewed demo to Hugging Face + type: boolean + default: false + +permissions: + contents: read + +concurrency: + group: deploy-mambo-v3-space + cancel-in-progress: false + +jobs: + prepare: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow + - name: Stage only the demo + run: | + .venv-release/bin/python -c 'from pathlib import Path; from dev.releases.mambo_v3.publication_assets import stage_space; stage_space(Path("space"))' + - name: Check the installed public demo dependencies + env: + GRADIO_ANALYTICS_ENABLED: "False" + run: | + uv pip install --python .venv-release/bin/python -r space/requirements.txt + .venv-release/bin/python -c 'import runpy; app=runpy.run_path("space/app.py"); app["build_app"]()' + - uses: actions/upload-artifact@v4 + with: + name: mambo-v3-space + path: space/ + if-no-files-found: error + + publish: + needs: prepare + if: inputs.publish + runs-on: ubuntu-latest + environment: model-demo + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: mambo-v3-space + path: space/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - name: Deploy demo only + env: + HF_TOKEN: ${{ secrets.HF_TOKEN }} + HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} + run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets space space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish-model.yml b/.github/workflows/publish-model.yml new file mode 100644 index 0000000..a458299 --- /dev/null +++ b/.github/workflows/publish-model.yml @@ -0,0 +1,124 @@ +name: Prepare and publish MAMBO V3 + +on: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: publish-mambo-v3 + cancel-in-progress: false + +jobs: + prepare: + if: github.event_name == 'workflow_dispatch' || github.event.release.tag_name == 'MAMBO_v3' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow + - name: Build pinned candidate + run: | + .venv-release/bin/python -m dev.releases.mambo_v3.prepare_candidate \ + --source "$RUNNER_TEMP/mambo-inputs" --output "$RUNNER_TEMP/candidate" --download + - name: Qualify exact installed artifacts + run: .venv-release/bin/python -m dev.releases.mambo_v3.qualify_candidate "$RUNNER_TEMP/candidate" + - name: Stage public files + run: | + .venv-release/bin/python -m dev.releases.mambo_v3.publication_assets \ + "$RUNNER_TEMP/candidate" --output "$RUNNER_TEMP/publication" + - uses: actions/upload-artifact@v4 + with: + name: mambo-v3-candidate + path: ${{ runner.temp }}/candidate/ + if-no-files-found: error + retention-days: 30 + - uses: actions/upload-artifact@v4 + with: + name: mambo-v3-publication + path: ${{ runner.temp }}/publication/ + if-no-files-found: error + retention-days: 30 + + package: + needs: prepare + if: github.event_name == 'release' && github.event.release.tag_name == 'MAMBO_v3' && !github.event.release.prerelease + runs-on: ubuntu-latest + environment: pypi-model + permissions: + id-token: write + contents: read + steps: + - uses: actions/download-artifact@v4 + with: + name: mambo-v3-candidate + path: candidate/ + - run: cd candidate && sha256sum --check SHA256SUMS + - uses: astral-sh/setup-uv@v8.1.0 + - name: Require the intended training dependency to be public first + run: | + python3 - <<'PYTHON' + import json, urllib.request + from pathlib import Path + package = json.loads(Path('candidate/release-candidate.json').read_text())['training_distribution'] + with urllib.request.urlopen(f"https://pypi.org/pypi/{package['name']}/{package['version']}/json") as response: + metadata = json.load(response)['info'] + assert metadata['project_urls']['Repository'] == 'https://github.com/asgersvenning/mini_trainer' + PYTHON + - name: Publish deployment package only + run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ candidate/dist/mambo_v3-*.whl candidate/dist/mambo_v3-*.tar.gz + + assets: + needs: package + runs-on: ubuntu-latest + environment: model-assets + permissions: + contents: write + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: mambo-v3-publication + path: publication/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - name: Publish GitHub assets without replacing existing files + env: + GH_TOKEN: ${{ github.token }} + GH_REPOSITORY: ${{ github.repository }} + run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets github publication/github "$GH_REPOSITORY" + - name: Publish model and immutable Hugging Face revision + env: + HF_TOKEN: ${{ secrets.HF_TOKEN }} + HF_MODEL_REPO: ${{ vars.HF_MODEL_REPO }} + run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets model publication/model "$HF_MODEL_REPO" + + demo: + needs: assets + runs-on: ubuntu-latest + environment: model-demo + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - uses: actions/download-artifact@v4 + with: + name: mambo-v3-publication + path: publication/ + - uses: astral-sh/setup-uv@v8.1.0 + - run: uv venv --python 3.13 .venv-release + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - name: Deploy the reviewed Space + env: + HF_TOKEN: ${{ secrets.HF_TOKEN }} + HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} + run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets space publication/space "$HF_SPACE_REPO" diff --git a/deployment/README.md b/deployment/README.md index 8d672eb..b7c4a26 100644 --- a/deployment/README.md +++ b/deployment/README.md @@ -10,11 +10,12 @@ including CPU, laptop GPU and server GPU measurements. (non-commercial, share-alike). Adapter code: MIT.** [Model notices](../dev/releases/mambo_v3/NOTICES.md) explain attribution and scope. -Publication is being prepared; the commands below target the public release. -Release reviewers can install the supplied wheels instead. Model files download automatically from public ERDA storage on first use and are verified and cached. Reuse one predictor across calls. +[Package](https://pypi.org/project/mambo-v3/) · [Model card and weights](https://huggingface.co/asgersvenning/MAMBO-v3) · +[Try one image](https://huggingface.co/spaces/asgersvenning/MAMBO-v3) · [Citation](CITATION.cff) + ## Quick start Create an environment, or use your application's existing environment. Python 3.12+ diff --git a/deployment/demo/README.md b/deployment/demo/README.md index 880315a..e611a52 100644 --- a/deployment/demo/README.md +++ b/deployment/demo/README.md @@ -7,6 +7,8 @@ sdk: gradio sdk_version: "6.28.0" python_version: "3.13" app_file: app.py +models: + - asgersvenning/MAMBO-v3 suggested_hardware: cpu-basic tags: - image-classification @@ -30,6 +32,10 @@ The application code is MIT. Model weights are **CC BY-NC-SA 4.0**. See the [release documentation](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md) for integration, comparisons and limitations. Readable names are displayed when provided in the accompanying `taxon-names.json`; GBIF IDs remain authoritative. +This snapshot covers all 17,212 released taxa and is reconstructed from the pinned +global-lepi metadata by `dev/releases/mambo_v3/prepare_names.py`. Each ID uses its +most frequent metadata name (lexical tie-break); species names combine genus and +specific epithet. These are display names, not a new taxonomy or class mapping. The release workflow stages this directory with pinned dependency requirements and optional taxon names. It uploads only that staged directory, not the repository. diff --git a/deployment/demo/taxon-names.json b/deployment/demo/taxon-names.json new file mode 100644 index 0000000..97ae5d8 --- /dev/null +++ b/deployment/demo/taxon-names.json @@ -0,0 +1,17214 @@ +{ + "10000103": "Eucosma raracana", + "10000384": "Lexias dirtea", + "10002059": "Taniva albolineana", + "10003902": "Chrysolarentia phaedra", + "10004820": "Aloa marginata", + "10004969": "Tephronia lhommaria", + "10005133": "Notonagemia analis", + "10005632": "Orthaga thyrisalis", + "10010361": "Acatapaustus mesoleuca", + "10010700": "Hesychopa chionora", + "10014340": "Actias dubernardi", + "10017342": "Quasithosea obliquistriga", + "10017524": "Scieropepla", + "10017792": "Antaeotricha albulella", + "10018221": "Maxates calaina", + "10019169": "Cerberonoton rubescens", + "10021059": "Meritastis pyrosemana", + "10022517": "Mellea ordinaria", + "10023049": "Meritastis piperata", + "10023115": "Ardozyga stratifera", + "10023821": "Heteropsis perspicua", + "10025997": "Psalidostetha", + "10026605": "Nola pycnopasta", + "10032003": "Dasygaster padockina", + "10033898": "Clemensia ochreata", + "10034831": "Leptosteges vestaliella", + "10038125": "Papilio rumiko", + "10042504": "Termessa shepherdi", + "10043566": "Amiga arnaca", + "10043827": "Lexias pardalis", + "10044107": "Eucosma ochrocephala", + "10045595": "Haplochrois bipunctella", + "10046436": "Metasia polytima", + "10046510": "Oxeoschistus tauropolis", + "10046698": "Cenopis diluticostana", + "10047346": "Saturnia pyretorum", + "10048667": "Chrysolarentia leucozona", + "10049887": "Endoxyla secta", + "10053130": "Philenora irregularis", + "10053809": "Gazoryctra mathewi", + "10054019": "Psilalcis isombra", + "10055104": "Mycalesis janardana", + "10055273": "Oinophila v-flava", + "10056494": "Phostria leucoplagialis", + "10058263": "Hypomecis agoraea", + "10058481": "Nymphicula queenslandica", + "10059034": "Forsterinaria necys", + "10062202": "Chrysolarentia mecynata", + "10062933": "Olepa ricini", + "10063383": "Autoba quadrapex", + "10063575": "Glycythyma leonina", + "10065676": "Salma cinerascens", + "10066605": "Nola bifascialis", + "10067382": "Korscheltellus gracilis", + "10068024": "Agrochola macilenta", + "10068544": "Laothus gibberosa", + "10069243": "Dichocrocis clytusalis", + "10071588": "Agrotera amathealis", + "10072380": "Microlithosia shaowuica", + "10072800": "Achyra nigrirenalis", + "10073044": "Epiblema strenuana", + "10073321": "Catagramma lyca", + "10074808": "Scoliacma nana", + "10075196": "Ariconias glaphyra", + "10075732": "Chrysolarentia perornata", + "10078453": "Pagyris cymothoe", + "10078526": "Bracca matutinata", + "10078800": "Nisista serrata", + "10080502": "Meritastis ursina", + "10083877": "Genduara acedesta", + "10084195": "Syncirsodes primata", + "10085335": "Epidesmia tryxaria", + "10087308": "Arhopala democritus", + "10088253": "Perigramma vicina", + "10088502": "Nola zaplethes", + "10089194": "Eccymatoge aorista", + "10090105": "Aethes sexdentata", + "10090168": "Alophosoma emmelopis", + "10094256": "Nygmia marginata", + "10094594": "Termessa gratiosa", + "10095278": "Eugnosta sartana", + "10096855": "Hypena isogona", + "10097687": "Satyrus swaha", + "10097776": "Targalla plumbea", + "10098436": "Polypogon kurokoi", + "10099906": "Agamana sarmentosa", + "10100176": "Hygrochroa torrefacta", + "10103570": "Therinia transversaria", + "10106345": "Anania tertialis", + "10106475": "Brunia replana", + "10107015": "Conchylodes nolckenialis", + "10108671": "Speiredonia obscura", + "10108753": "Psilopygida walkeri", + "10109201": "Epidesmia hypenaria", + "10113008": "Agrochola helvola", + "10113190": "Icaricia lupini", + "10114575": "Vanessa abyssinica", + "10114865": "Capronnieria galesus", + "10115073": "Disphragis biundata", + "10116946": "Cigaritis syama", + "10117959": "Conogethes pluto", + "10118643": "Chloridea virescens", + "10118678": "Scioglyptis chionomera", + "10118849": "Polyacme subpulchra", + "10120854": "Strymon astiocha", + "10121804": "Agape chloropyga", + "10129011": "Salma ebenina", + "10129812": "Eudyaria zeta", + "10132475": "Chrysolarentia chrysocyma", + "10132596": "Grapholita interstinctana", + "10132775": "Echydna punctata", + "10132811": "Phazaca interrupta", + "10134558": "Endoxyla liturata", + "10134865": "Eugnosta erigeronana", + "10137001": "Eucosma ornatula", + "10137350": "Satyrus enervata", + "10141437": "Patania iopasalis", + "10142569": "Macrorrhinia endonephele", + "10143814": "Anemosella viridalis", + "10145421": "Symmoracma minoralis", + "10146436": "Metrioglypha phyllodes", + "10146771": "Dissomorphia australiaria", + "10153630": "Conchylis vacuana", + "10154280": "Crioa hades", + "10155026": "Porela cinerea", + "10155932": "Chorodna strixaria", + "10156181": "Herpetogramma cynaralis", + "10156470": "Digama marmorea", + "10157400": "Praxis marmarinopa", + "10159697": "Caleta roxus", + "10161728": "Leucogonia cosmopis", + "10164453": "Arrade leucocosmalis", + "10165457": "Sciota basilaris", + "10165831": "Prochoreutis inflatella", + "10166724": "Gonitis involuta", + "10167252": "Hypobapta tachyhalotaria", + "10171108": "Parapoynx tenebralis", + "10174151": "Neoalbertia constans", + "10174909": "Eucyclodes insperata", + "10175639": "Protuliocnemis partita", + "10175914": "Papilio", + "10176413": "Gazoryctra novigannus", + "10176954": "Aricoris indistincta", + "10177276": "Chrysolarentia squamulata", + "10177508": "Eudonia rectilinea", + "10178326": "Bastilla arctotaenia", + "10179389": "Elophila icciusalis", + "10180624": "Pyrausta ignealis", + "10183056": "Nephelomilta karenkonis", + "10184940": "Syneora adelphodes", + "10185271": "Dichelia cosmopis", + "10187154": "Rectiostoma xanthobasis", + "10188228": "Luxiaria ochrophara", + "10189661": "Cechetra subangustata", + "10189965": "Oeonistis altica", + "10190647": "Pararguda albida", + "10191275": "Cechetra minor", + "10191785": "Herpetogramma fluctuosalis", + "10193618": "Craspedortha porphyria", + "10194663": "Ochrogaster lunifer", + "10194727": "Eucosma tomonana", + "10196441": "Acraea dicaeus", + "10196956": "Halone coryphoea", + "10199372": "Fisera hypoleuca", + "10201273": "Apatura ambica", + "10202439": "Ancyloxypha nitedula", + "10203260": "Vanessula milca", + "10203493": "Anaxidia lozogramma", + "10203499": "Ischyja marapok", + "10205587": "Henricus umbrabasana", + "10208422": "Phycomorpha prasinochroa", + "10208792": "Peridrome subfascia", + "10208801": "Vanessa terpsichore", + "10209845": "Parapoynx dentizonalis", + "10210935": "Cyclophora turneri", + "10211808": "Faveria tritalis", + "10213314": "Etanna breviuscula", + "10214972": "Feigeria herilia", + "10217455": "Smyriodes trigramma", + "10221195": "Eusarca asteria", + "10222583": "Lomera lurida", + "10224300": "Lipogya exprimataria", + "10225227": "Etanna clopaea", + "10227418": "Conogethes semifascialis", + "10228568": "Limenitis daraxa", + "10229731": "Acleris bowmanana", + "10236521": "Diedra cockerellana", + "10240592": "Bryophilopsis leucopolia", + "10244305": "Ancylosis ulmiarrosorella", + "10245924": "Udea marmarina", + "10246305": "Hypsopygia binodulalis", + "10247309": "Saturnia anona", + "10247981": "Malacodea pulchraria", + "10248521": "Pseudodirphia menander", + "10248689": "Aloa costalis", + "10250149": "Godyris nero", + "10250474": "Statherotis pendulata", + "10256550": "Ophyx eurrhoa", + "10257673": "Deuterarcha xanthomela", + "10257899": "Anachloris uncinata", + "10259280": "Elophila nebulosalis", + "10259880": "Limenitis tracta", + "10263383": "Cyclophora obstataria", + "10264193": "Detounda leptoplasta", + "10265559": "Vanessa myrinna", + "10265841": "Euptychia eous", + "10266782": "Graphita griphe", + "10267561": "Synanthedon exitiosa", + "10267570": "Meyrickella torquesauria", + "10268303": "Eucyclodes pieroides", + "10268975": "Cerberonoton", + "10270464": "Macaldenia palumba", + "10271464": "Chimoptesis gerulae", + "10272567": "Amiga", + "10272611": "Eudocima discrepans", + "10274769": "Acyphas semiochrea", + "10274976": "Choristoneura houstonana", + "10277877": "Limenitis danava", + "10278292": "Pseudolycaena damo", + "10279983": "Salma nephelodes", + "10282389": "Bastilla amygdalis", + "10283055": "Notonagemia", + "10286565": "Synanthedon fulvipes", + "10288636": "Aenetus eximia", + "10288719": "Eusarca nemora", + "10290084": "Agrochola laevis", + "10295171": "Epiblema abruptana", + "10295290": "Letis hypnois", + "10295646": "Phelotis cognata", + "10302305": "Dirphiopsis multicolor", + "10302660": "Goboea copiosana", + "10304283": "Brymblia quadrimaculella", + "10304313": "Givira francesca", + "10307383": "Strymon lucena", + "10307487": "Endoxyla lichenea", + "10308365": "Tebenna gnaphaliella", + "10309234": "Vamuna remelana", + "10309331": "Neoscythris fissirostris", + "10309794": "Microsphecia tineiformis", + "10310599": "Ypsolopha canariella", + "10310835": "Lamprosema ranalis", + "10312073": "Agrochola lota", + "10312760": "Issoria cytheris", + "10321900": "Taygetina kerea", + "10322104": "Neoilliberis fusca", + "10327658": "Walshia miscecolorella", + "10329023": "Lophoruza pulcherrima", + "10330071": "Comparmustilia", + "10330198": "Eudocima jordani", + "10330376": "Elophila faulalis", + "10331171": "Synargis mycone", + "10333787": "Faunis faunula", + "10336328": "Arta epicoenalis", + "10340332": "Laspeyria concavata", + "10341059": "Chrysolarentia gypsomela", + "10341307": "Pararguda rufescens", + "10346267": "Ypsolopha falciferella", + "10348110": "Metasia dicealis", + "10348945": "Nacoleia mesochlora", + "10353400": "Catonephele mexicana", + "10355428": "Pseudexentera virginiana", + "10355898": "Holocola thalassinana", + "10356445": "Assara subarcuella", + "10357476": "Icaricia shasta", + "10358334": "Meritastis laganodes", + "10360329": "Bracca rotundata", + "10361029": "Choreutis periploca", + "10361239": "Cigaritis lohita", + "10363151": "Chrysolarentia lucidulata", + "10365587": "Catagramma pitheas", + "10365884": "Epiblema obfuscana", + "10366580": "Sciota vetustella", + "10366679": "Hileithia rehamalis", + "10368234": "Eloasa infrequens", + "10370026": "Aethes mymara", + "10370112": "Enispa parva", + "10371735": "Brahmaea hearseyi", + "10372377": "Nola argentea", + "10374414": "Theretra tibetiana", + "10375186": "Catagramma hydaspes", + "10375403": "Glycythyma chrysorycta", + "10376507": "Neptis leucoporus", + "10376685": "Alarodia slossoniae", + "10378302": "Mataeomera coccophaga", + "10378314": "Ectropis fractaria", + "10379201": "Eucyclodes fascinans", + "10379915": "Termessa congrua", + "10380465": "Pelochrista dorsisignatana", + "10381192": "Melanis", + "10383968": "Zeuxidia amethysta", + "10384044": "Kretania nichollae", + "10388627": "Epiblema brightonana", + "10392889": "Halone pteridaula", + "10394962": "Euthalia dunya", + "10395101": "Eucosma olivaceana", + "10395440": "Cisthene polyzona", + "10397209": "Orthospila tigrina", + "10398658": "Pararge schakra", + "10398979": "Chrysolarentia leucophanes", + "10399906": "Aloa lactinea", + "10400868": "Bastilla crameri", + "10401396": "Catagramma sorana", + "10402067": "Pennisetia marginatum", + "10403441": "Simplicia armatalis", + "10404426": "Idaea kendallaria", + "10407953": "Melanis xenia", + "10410048": "Sciota celtidella", + "10410699": "Caldubotys caldusalis", + "10411202": "Crasilogia gressitti", + "10411472": "Strymon eurytulus", + "10412261": "Cybdelis phaesyla", + "10413588": "Isa textula", + "10415847": "Forsterinaria neonympha", + "10416544": "Graphita", + "10422582": "Comibaena fuscidorsata", + "10423263": "Arippara disticha", + "10427568": "Agnippe prunifoliella", + "10432184": "Anania helvalis", + "10433914": "Orthaga atribasalis", + "10434798": "Chrysolarentia conifasciata", + "10435406": "Pararguda nasuta", + "10436020": "Cechetra lineosa", + "10436850": "Arawacus melibaeus", + "10437872": "Petrophila heppneri", + "10438474": "Cycloprorodes melanoxysta", + "10441062": "Acronicta insularis", + "10441857": "Metasia tiasalis", + "10442031": "Kretania eurypilus", + "10442122": "Cenopis directana", + "10442332": "Conobathra hemichlaena", + "10443878": "Anestia semiochrea", + "10444331": "Anania quebecensis", + "10445629": "Pelochrista similiana", + "10446295": "Elophila responsalis", + "10446574": "Lichnoptera pollux", + "10446580": "Epiblema tripartitana", + "10446898": "Pelochrista robinsonana", + "10448500": "Nola tornotis", + "10450442": "Henricus edwardsiana", + "10450446": "Rapdalus pardicolor", + "10450501": "Aproaerema cinctella", + "10451589": "Synanthedon scitula", + "10452421": "Lepidoscia characota", + "10454590": "Forsterinaria quantius", + "10454874": "Cyana meyricki", + "10455658": "Carminda paeon", + "10456933": "Chrysolarentia vicissata", + "10457796": "Chrysolarentia severata", + "10458175": "Ataboruza divisa", + "10458960": "Acossus populi", + "10462612": "Asthenoptycha encratopis", + "10462708": "Protonoceras mitis", + "10464411": "Margarosticha repetitalis", + "10464824": "Arcobara tergeminaria", + "10465059": "Episcada hymenaea", + "10469497": "Acossus centerensis", + "10469532": "Epiphyas ashworthana", + "10469564": "Bastilla absentimacula", + "10471477": "Chrysolarentia polycarpa", + "10474236": "Podotricha judith", + "10476233": "Meritastis polygraphana", + "10477629": "Hypochrosis hyadaria", + "10477747": "Mycalesis oculus", + "10480609": "Eilema plana", + "10481441": "Pelochrista derelicta", + "10482025": "Elophila ekthlipsis", + "10483734": "Epinotia albangulana", + "10484957": "Mesene", + "10487080": "Acraea ozomene", + "10489219": "Omiodes odontosticta", + "10494601": "Gibbalaria", + "10495733": "Vitacea polistiformis", + "10496181": "Lithilaria proestans", + "10498365": "Ardozyga catarrhacta", + "10502505": "Merodictya marmorata", + "10503464": "Pelochrista consobrinana", + "10503495": "Arsacia rectalis", + "10505033": "Epidesmia chilonaria", + "10506164": "Aplotelia diplographa", + "10508423": "Limenitis procris", + "10508467": "Heliodines unipunctella", + "10509408": "Synanthedon acerni", + "10510138": "Noctuelia rufofascialis", + "10510325": "Nola lucidalis", + "10510959": "Libido bipunctata", + "10511167": "Euptychia proba", + "10511237": "Callima argenticinctella", + "10512675": "Mcclungia cymo", + "10513366": "Glauconoe deductalis", + "10514620": "Isa schaefferana", + "10515719": "Heterogenea shurtleffi", + "10517417": "Hygrochroa pudefacta", + "10517500": "Poritia sumatrae", + "10518163": "Sciota uvinella", + "10521368": "Nacoleia rhoeoalis", + "10523304": "Syneora lithina", + "10526954": "Mimaglossa nauplialis", + "10527924": "Euselasia", + "10528420": "Chrysolarentia stereozona", + "10530208": "Chiasmia nora", + "10530383": "Cryptoptila immersana", + "10530515": "Casbia melanops", + "10531480": "Termessa laeta", + "10533589": "Oenochroma turneri", + "10534664": "Citheronia brissotii", + "10534945": "Sereda tautana", + "10535684": "Eusthenica treicleiota", + "10539598": "Epiblema desertana", + "10542548": "Diaethria pandama", + "10545267": "Eucopina tocullionana", + "10546013": "Lepidoscia protorna", + "10546538": "Lymantria subrosea", + "10547404": "Dirphiopsis epiolina", + "10547716": "Pelochrista cataclystiana", + "10548275": "Termessa nivosa", + "10548683": "Gastridiota adoxima", + "10549715": "Conchylis subfurcatana", + "10551407": "Manulea bicolor", + "10551923": "Omichlis hadromeres", + "10552471": "Necyria", + "10556366": "Anydraula pericompsa", + "10556522": "Agrodiaetus coelestina", + "10556853": "Calliteara pura", + "10558140": "Lycorea ilione", + "10560674": "Epyaxa subidaria", + "10560849": "Mecytha fasciata", + "10561589": "Sciota virgatella", + "10569879": "Salamis parhassus", + "10570752": "Icaricia saepiolus", + "10571987": "Ectropis excursaria", + "10572729": "Maxates centrophylla", + "10573187": "Aricoris chilensis", + "10573425": "Nola pleurosema", + "10573746": "Hypospila dochmotoma", + "10574156": "Comibaena nigromacularia", + "10574663": "Moeris rita", + "10575632": "Mythimna reversa", + "10577473": "Euthalia evelina", + "10579230": "Nacoleia amphicedalis", + "10580256": "Thyraylia nana", + "10581870": "Luthrodes pandava", + "10583848": "Thallogama", + "10584071": "Vitacea scepsiformis", + "10587253": "Meneris tulbaghia", + "10588642": "Hypsopygia intermedialis", + "10591617": "Periphoba arcaei", + "10592969": "Obeidia gigantearia", + "10593489": "Phtheochroa vitellinana", + "10594210": "Nacoleia glageropa", + "10594478": "Autosticha kyotensis", + "10595994": "Algia fasciata", + "10596756": "Sparganothis boweri", + "10597291": "Bondia comonana", + "10597823": "Mythimna convecta", + "10598038": "Eudocima aurantia", + "10598407": "Mormoscopa phricozona", + "10600208": "Heraclides pallas", + "10600368": "Catocala streckeri", + "10604375": "Cicinnus melsheimeri", + "10606547": "Cigaritis vulcanus", + "10606887": "Acropolitis rudisana", + "10607329": "Givira theodori", + "10610041": "Gonioterma mistrella", + "10610809": "Cotachena hicana", + "10613467": "Diathrausta ochreipennis", + "10615631": "Issoria lathonoides", + "10619048": "Fania nanus", + "10623003": "Chrysolarentia heliacaria", + "10624577": "Acropolitis canana", + "10625116": "Choreutis metallica", + "10626099": "Hypomecis externaria", + "10629052": "Metapercnia ductaria", + "10629470": "Trismelasmos donovani", + "10629533": "Euzora collucens", + "10632124": "Comibaena attenuata", + "10634980": "Microdes squamulata", + "10637588": "Notata modicus", + "10638244": "Memphis forreri", + "10638451": "Sunira circellaris", + "10638589": "Gypsonoma salicicolana", + "10639484": "Aglais caschmirensis", + "10639943": "Aenetus dulcis", + "10640865": "Pedois humerana", + "10643403": "Herpetogramma hipponalis", + "10643533": "Goniosema anguliscripta", + "10644798": "Phazaca decorata", + "10647358": "Agamana conjungens", + "10648791": "Lactura sapotearum", + "10650211": "Zelleria retiniella", + "10650351": "Synchlora expulsata", + "10653980": "Hypanartia trimaculata", + "10655790": "Elophila tinealis", + "10656625": "Argynnis hyperbius", + "10656713": "Deudorix livia", + "10657151": "Meranda holochrysa", + "10657453": "Iaspis andersoni", + "10658576": "Psalidostetha banksiae", + "10659737": "Coenotoca subaspersa", + "10661133": "Lychnuchus", + "10662329": "Euptychia rubricata", + "10670854": "Platycerota particolor", + "10671425": "Miltochrista acteola", + "10677299": "Agrocholorta", + "10679326": "Huangilene alikangiae", + "10683012": "Ataboruza stragulata", + "10684776": "Nacna buschmannferenci", + "10690739": "Ichneutica nullifera", + "10694777": "Gandaritis pseudolargetaui", + "10695966": "Eucosma grindeliana", + "10698858": "Matsumursine horishanella", + "10700540": "Ichneutica propria", + "10701190": "Aberrasine lichenshihi", + "10702885": "Harmandicrania harmandi", + "10703948": "Pyrisitia westwoodi", + "10706419": "Ichneutica arotis", + "10707366": "Abantiades argyrosticha", + "10707501": "Caleta decidia", + "10709446": "Cochylis hospes", + "10712554": "Elophos dilucidaria", + "10713577": "Chirgus fides", + "10714961": "Pheosidea elegans", + "10715410": "Syrichtus baeticus", + "10716234": "Ichneutica sulcana", + "10717680": "Neptis goochii", + "10717837": "Mangina argus", + "10722110": "Utetheisa inconstans", + "10730270": "Entometa fervens", + "10732033": "Ichneutica semivittata", + "10732353": "Chrysocraspeda faganaria", + "10737993": "Risoba yanagitai", + "10738407": "Doratoptera lutea", + "10741837": "Ichneutica mollis", + "10743044": "Diomea lignicolora", + "10744228": "Agrocholorta albirena", + "10746289": "Huangilene kutzscheri", + "10747908": "Ichneutica blenheimensis", + "10749137": "Corgatha atrifalcis", + "10751438": "Tetrernia teminitis", + "10754772": "Cyana bellissima", + "10755716": "Achrosis rufescens", + "10761559": "Byasa confusus", + "10765884": "Barsura albidorsalis", + "10766319": "Corgatha trichogyia", + "10769553": "Udea flavidalis", + "10773498": "Ampittia subvittatus", + "10776625": "Cochylis temerana", + "10776919": "Pelochrista matutina", + "10777718": "Thespea", + "10782264": "Ditrigona serratilinea", + "10785815": "Dichomeris parvisexafurca", + "10787705": "Pyralis cardinalis", + "10795141": "Sansarea formosana", + "10799294": "Ichneutica morosa", + "10800539": "Pheosidea", + "10806460": "Tochara creberrima", + "10807169": "Olethreutes micana", + "10807383": "Salebriaria simpliciella", + "10807787": "Zebronia perspicata", + "10812069": "Cyana linatula", + "10813849": "Bastilla acuta", + "10814936": "Ichneutica insignis", + "10817208": "Hypsopygia olinalis", + "10820762": "Laspeyria ruficeps", + "10820875": "Ashinagidae", + "10821201": "Miltochrista yueh", + "10822185": "Calliteara horishanella", + "10824750": "Ichneutica agorastis", + "10825466": "Luthrodes galba", + "10826443": "Oxacme cretacea", + "10830546": "Feigeria scops", + "10833593": "Abantiades atripalpis", + "10835385": "Comparmustilia gerontica", + "10835542": "Biston insularis", + "10836135": "Huangilene", + "10836231": "Cabardites", + "10838422": "Cochylis posterana", + "10840540": "Ichneutica moderata", + "10840565": "Ichneutica atristriga", + "10841562": "Aedia perdicipennis", + "10842267": "Neocalyptis liratana", + "10842838": "Herimba disconjuncta", + "10844862": "Argyroploce bipunctana", + "10848620": "Tamba cautiperas", + "10850393": "Ichneutica lignana", + "10850415": "Ichneutica omoplaca", + "10850929": "Antiblemma perva", + "10851228": "Feigeria magna", + "10851840": "Eudonia rakaiensis", + "10854079": "Kretania trappi", + "10855556": "Smerkata fusca", + "10857326": "Eudonia diphtheralis", + "10858809": "Leptomyrina lara", + "10860091": "Edessena hamada", + "10860751": "Minoa aedaea", + "10861282": "Trithyris rubrocinctalis", + "10864093": "Albinospila floresaria", + "10864524": "Stictane rectilinea", + "10864898": "Paraeschra", + "10866199": "Ichneutica lithias", + "10866411": "Spilarctia nydia", + "10867462": "Paraeschra georgica", + "10869347": "Cochylis hoffmanana", + "10873137": "Charaxes wakefieldi", + "10874367": "Matsumursine", + "10874844": "Teuloma", + "10874932": "Hileithia magualis", + "10876650": "Aberrasine", + "10879371": "Plebejidea loewi", + "10881384": "Rivula bioculalis", + "10882244": "Nudaria diaphanella", + "10882997": "Abantiades argentata", + "10883659": "Syntherata escarlata", + "10889719": "Nechesia albodentata", + "10891794": "Ichneutica mutans", + "10903022": "Smerkata", + "10904813": "Agrochola ruticilla", + "10906002": "Canesia", + "10907635": "Bastilla maturata", + "10915497": "Crambus alienellus", + "10922201": "Crambus turbatella", + "10922411": "Chrysocrambus craterellus", + "10926224": "Olene suisharyonis", + "10932946": "Orthocraspeda furva", + "10933525": "Enispa elataria", + "10942408": "Meganola brunellus", + "10955682": "Birthamula rufa", + "10956237": "Floridasura", + "10959264": "Protonoceras capitalis", + "10962816": "Lon", + "10963226": "Leptoligia lota", + "10965723": "Oberthueria", + "10967713": "Thoracolopha flexirena", + "10972780": "Chorsia albiscriptus", + "10976134": "Willema", + "10982648": "Bastilla arcuata", + "10982815": "Leptoligia macilenta", + "10987178": "Inouenola pallescens", + "10988070": "Belenois java", + "10988777": "Chirgus", + "10990846": "Hoodus", + "10994020": "Herimba formosa", + "10996761": "Harpyia formosicola", + "11008182": "Arhopala perimuta", + "11014495": "Oxyplax pallivitta", + "11016336": "Herminia terminalis", + "11024850": "Burnsius", + "11027113": "Chiothion", + "11033463": "Arctia testudinaria", + "11034779": "Magusa tenebrosa", + "11044778": "Cnaphalocrocis cochrusalis", + "11046092": "Erebia flavofasciata", + "11052757": "Oxypteryx atrella", + "11054256": "Thoracolopha verecunda", + "11055981": "Thespea virescens", + "11056379": "Patania deficiens", + "11057282": "Vernia", + "11059353": "Semidonta kosemponica", + "11064851": "Leptoligia", + "11070822": "Curvie", + "11080751": "Oxypteryx wilkella", + "11088003": "Olene baibarana", + "11093909": "Olethreutes palustrana", + "11095591": "Floridasura tricolor", + "11097510": "Rhesala punctilinea", + "11098546": "Chorodna moorei", + "11121180": "Heterolocha satoi", + "11135155": "Junonia stemosa", + "11140464": "Artona formosa", + "11141784": "Sphinx vanbuskirki", + "11142432": "Chorsia mollicula", + "11173690": "Evecliptopera illitata", + "11175615": "Clelea simplicior", + "11190148": "Menophra parahumeraria", + "11219489": "Junonia pacoma", + "11232431": "Cyana hamata", + "11287091": "Acanthophila alacella", + "11311045": "Taipsaphida curiosa", + "11322712": "Stauropus teikichiana", + "11332355": "Sesapa honbaensis", + "11368766": "Adrapsa geometroides", + "11372793": "Acraea encedon", + "11374171": "Leptomyrina gorgias", + "11375508": "Acraea serena", + "11378273": "Salamis duprei", + "11378618": "Leptomyrina henningi", + "11382064": "Cabardites limbata", + "11414590": "Nudaurelia cytherea", + "11417741": "Icaricia acmon", + "11418741": "Indalia lutarella", + "11419137": "Lexias panopus", + "11423843": "Burnsius adepta", + "11425145": "Limenitis asura", + "11425419": "Psolos", + "11428453": "Lepidoscia heliochares", + "11430021": "Pubitelphusa latifasciella", + "11431507": "Zyganisus propedia", + "11435704": "Ptilodon grisea", + "11437060": "Eublemma perversicolor", + "11442724": "Teenie", + "11449815": "Myrioblephara albibasis", + "11451126": "Chrysolarentia bichromata", + "11452421": "Acontia semiflava", + "11453492": "Amata polymita", + "11453841": "Torodora gemella", + "11457930": "Buzara latizona", + "11461056": "Diduga nantouensis", + "11462628": "Scioglyptis", + "11464362": "Nudaurelia wahlbergi", + "11464595": "Vagrans sinha", + "11465014": "Psilosticha pristis", + "11466090": "Acontia erastrioides", + "11467034": "Crithote pallivaga", + "11467944": "Phazaca leucocera", + "11468089": "Chrysolarentia microcyma", + "11468731": "Erinnyis oenotrus", + "11470119": "Lysandra albicans", + "11470672": "Acontia clausula", + "11470872": "Lon monticola", + "11477039": "Mimomiza cruentaria", + "11478679": "Loscopia scolopacina", + "11484123": "Givira anna", + "11486436": "Taxeotis", + "11487320": "Melanchra adjuncta", + "11491719": "Iotaphora", + "11494627": "Garudinia taioana", + "11495556": "Goniapteryx servia", + "11495707": "Indalia", + "11496990": "Nola tholera", + "11501104": "Kocakina fidelis", + "11503857": "Phazaca stolida", + "11505614": "Homaloxestis multidentalis", + "11507608": "Euclea mesoamericana", + "11508076": "Apantesis arge", + "11508257": "Arhopala trogon", + "11508404": "Eucosma radiatana", + "11508472": "Nola phaeogramma", + "11513018": "Indalia albicosta", + "11513188": "Eudocima hypermnestra", + "11516142": "Acraea issoria", + "11525418": "Charaxes narcaea", + "11527985": "Pedois", + "11528968": "Epiphthora calamogonus", + "11529292": "Gufria limosa", + "11529603": "Ceratomia amyntor", + "11533770": "Chrysocraspeda cyphosticha", + "11535847": "Acraea terpsicore", + "11539735": "Ichneutica chlorodonta", + "11543078": "Arhopala pseudomuta", + "11546465": "Junonia antilope", + "11548960": "Satoblephara owadai", + "11554226": "Arzecla tucumanensis", + "11554842": "Odontognophos perspersata", + "11555221": "Chiasmia fidoniata", + "11556078": "Termessa", + "11561676": "Pterourus eurymedon", + "11562243": "Furcula borealis", + "11562374": "Progonia kurosawai", + "11563728": "Culama suffusca", + "11566649": "Eublemma biangulata", + "11570545": "Teuloma tainebula", + "11571523": "Indalia pygmaeola", + "11572120": "Acraea momina", + "11573394": "Carminda griseldis", + "11576787": "Gelechia sestertiella", + "11590674": "Acontia leo", + "11591775": "Salma recurvalis", + "11594541": "Nola pleurochorda", + "11596224": "Mnesampela", + "11596898": "Nola paromoea", + "11598540": "Tephrina arenacearia", + "11601386": "Mygona", + "11608942": "Tanaecia iapis", + "11609422": "Buzara frontinus", + "11612469": "Eudocima kuehni", + "11615055": "Acontia exigua", + "11615549": "Eublemma abrupta", + "11619030": "Acontia altera", + "11623814": "Junonia tugela", + "11626773": "Acontia dama", + "11627464": "Acontia heonyx", + "11635419": "Gymnoscelis admixtaria", + "11636323": "Dysgonia constricta", + "11636481": "Zizina oxleyi", + "11638437": "Chrysolarentia plagiocausta", + "11642411": "Sthenopis pretiosus", + "11643393": "Rinaca fukudai", + "11644349": "Krananda falcata", + "11645316": "Kirinia eversmanni", + "11645405": "Grapholita tristrigana", + "11650277": "Xerodes albonotaria", + "11652557": "Lophophelma calaurops", + "11654024": "Nebula malvata", + "11654220": "Therinia", + "11654707": "Lon zabulon", + "11656384": "Arctornis jonasii", + "11660145": "Acontia obatra", + "11660632": "Minoa euthecta", + "11667300": "Sesia tibiale", + "11667997": "Aloeides thyra", + "11670751": "Rinaca japonica", + "11670842": "Burnsius communis", + "11673056": "Pareronia hippia", + "11688440": "Asthenoptycha sphaltica", + "11688586": "Phalanta eurytis", + "11690145": "Aponotoreas dascia", + "11693171": "Xylena germana", + "11698552": "Nola semograpta", + "11701883": "Dione vanillae", + "11701991": "Actinote neleus", + "11703980": "Asura zebrina", + "11706893": "Ardozyga thermochroa", + "11713256": "Acontia fasciatella", + "11713970": "Haploa lecontei", + "11714235": "Eublemma caffrorum", + "11715392": "Eudyaria", + "11716362": "Heraclides hectorides", + "11717028": "Polypogon biasalis", + "11720357": "Epyaxa agelasta", + "11720834": "Lycaena hypophlaeas", + "11725043": "Herminia undulata", + "11725616": "Lepidoneiva teuthras", + "11726907": "Junonia archesia", + "11728049": "Uncinus obductella", + "11728240": "Cissusa spadix", + "11729388": "Rinaca thibeta", + "11729494": "Burnsius orcynoides", + "11730078": "Dichomeris zonata", + "11731155": "Eublemma rufiplaga", + "11731502": "Manulea hokopo", + "11732472": "Hypena quadralis", + "11736162": "Miltochrista undulosa", + "11737872": "Piarosoma fushan", + "11738734": "Macroglossum mitchellii", + "11748480": "Brassolis", + "11749278": "Acontia tortricina", + "11753578": "Atrytonopsis quinteri", + "11753804": "Acontia phecolisca", + "11754729": "Micronola notonana", + "11754954": "Hemileuca peigleri", + "11756119": "Orthaga picta", + "11758730": "Hemihyalea ambigua", + "11760262": "Eutricha", + "11760445": "Ogyris", + "11760688": "Lexias canescens", + "11761541": "Anania murcialis", + "11763567": "Phlogophora insularis", + "11773446": "Oiketicus geyeri", + "11776315": "Lon taxiles", + "11780161": "Lophophleps triangularis", + "11781300": "Acontia bicolorata", + "11781335": "Eriopyga lunata", + "11783188": "Chloronycta tybo", + "11783346": "Phelotis", + "11783984": "Eteona", + "11794114": "Willema willemi", + "11794362": "Sphingognatha asclepiades", + "11797244": "Spodoptera abyssinia", + "11797637": "Agriades podarce", + "11799357": "Mesoptila compsodes", + "11802190": "Icaricia neurona", + "11807833": "Aberrasine shiou", + "11812181": "Arctia dejeani", + "11819666": "Eublemma baccatrix", + "11826016": "Microcalcarifera obscura", + "11828714": "Apochima juglansiaria", + "11832697": "Junonia vestina", + "11834445": "Lon hobomok", + "11836409": "Nola delograpta", + "11840028": "Povolnya quercinigrella", + "11840957": "Lexias aeetes", + "11841763": "Junonia cuama", + "11846897": "Blastesthia tessulatana", + "11854390": "Stagmatophora argyrostrepta", + "11856219": "Dasyboarmia subpilosa", + "11858666": "Ichneutica skelloni", + "11858774": "Traminda rubra", + "11859640": "Acontia idella", + "11860016": "Artona hainana", + "11860565": "Diduga taiwana", + "11869776": "Chorodna fulgurita", + "11871044": "Nola crucigera", + "11871190": "Teenie tinea", + "11873825": "Macrochilo morbidalis", + "11873966": "Garella glaucopasta", + "11874998": "Everes osiris", + "11879268": "Corades", + "11887065": "Acontia onagrus", + "11890681": "Syllectra erycata", + "11891668": "Herpetogramma aquilonalis", + "11892494": "Lon melane", + "11899754": "Eucosma formosana", + "11900897": "Amata nigriceps", + "11902924": "Trisuloides", + "11903902": "Laciniodes", + "11904618": "Culama anthracica", + "11904675": "Euclera meones", + "11905965": "Epicoma melanospila", + "11906255": "Spilonota constrictana", + "11907485": "Apantesis incorrupta", + "11907720": "Eichlinia", + "11907754": "Theretra japonica", + "11909090": "Heterallactis phlogozona", + "11919216": "Termessa discrepans", + "11922580": "Globia oblonga", + "11923027": "Eugnosta bimaculana", + "11950325": "Eichlinia gloriosa", + "11954157": "Macroglossum corythus", + "11954625": "Pseudokatha", + "11955428": "Macrobathra", + "11962292": "Collita griseola", + "11967675": "Achalarus lyciades", + "11968849": "Trithyris fenestrinalis", + "11971514": "Herminia subtriplex", + "11976273": "Hypena indicatalis", + "11992983": "Orthosia cruda", + "12006709": "Nephelomilta pusilla", + "12010643": "Macaria minorata", + "12017078": "Tumicla sagenaria", + "12018158": "Eichlinia calabaza", + "12021153": "Katha arizana", + "12021649": "Katha emberifera", + "12022449": "Pseudokatha rungsi", + "12031071": "Heliodines tripunctella", + "12031311": "Borkhausenia", + "12037602": "Barsine striata", + "12045866": "Euptychia hedemanni", + "12046692": "Pterophorus narbonea", + "12047421": "Phthorimaea", + "12057008": "Conchylis fuscicepsana", + "12060941": "Eichlinia snowii", + "12066849": "Cenopis mesospila", + "12075408": "Piarosoma extravagans", + "12076089": "Barea", + "12087490": "Eichlinia cucurbitae", + "12089608": "Katha depressa", + "12103087": "Schinia saturata", + "12105049": "Staurophora", + "12106417": "Fissicrambus mutabilis", + "12106975": "Mycalesis mara", + "12107129": "Cenopis ferreana", + "12116722": "Eupithecia scotodes", + "12125931": "Epatolmis", + "12126779": "Cenopis niveana", + "12135372": "Nyea lurideola", + "1214429": "Heteropsis", + "12148290": "Rivula inconspicua", + "12151997": "Indalia interposita", + "12152411": "Gymnobathra", + "12160125": "Indalia uniola", + "12165672": "Plebejus sephirus", + "12170988": "Curvie emesia", + "12171068": "Bellulia galsworthyi", + "12171522": "Vamuna alboluteola", + "12173621": "Burnsius burnsi", + "12174634": "Tharsalea xanthoides", + "12175154": "Troyus fantasos", + "12176367": "Aglaomorpha plagiata", + "12176559": "Macrobrochis staudingeri", + "12180031": "Cyme structa", + "12180041": "Oarisma minima", + "12180481": "Aeneanola", + "12181811": "Archonias flisa", + "12182061": "Macrobrochis prasena", + "12183285": "Nepita conferta", + "12183844": "Processine", + "12185456": "Tharsalea dorcas", + "12185656": "Siccia punctilinea", + "12188086": "Tharsalea nivalis", + "12188993": "Aeneanola acontioides", + "12191141": "Abaeis salome", + "12194283": "Feigeria buteo", + "12195040": "Celastrina asheri", + "12197284": "Epiblema mandana", + "12198522": "Polites otho", + "12199936": "Aberrasine aberrans", + "12200213": "Heraclides ponceana", + "12200261": "Canesia canescens", + "12203022": "Cyme quadrilineata", + "12205404": "Tharsalea dospassosi", + "12206130": "Pseudoadites", + "12206386": "Abaeis mexicana", + "12206694": "Oarisma aurantiaca", + "12208168": "Autochton potrillo", + "12208733": "Pseudoadites frigida", + "12209759": "Miltochrista conjunctana", + "12211009": "Heraclides rogeri", + "12211069": "Microsphecia brosiformis", + "12212066": "Tharsalea hyllus", + "12214821": "Ardices canescens", + "12214993": "Thalera pistasciaria", + "12216332": "Cyme pyraula", + "12217030": "Delineatia tairadiata", + "12219036": "Euphilotes allyni", + "12219250": "Pterourus palamedes", + "12222885": "Tharsalea editha", + "12223105": "Thorybes lyciades", + "12223349": "Pelochrista argentialbana", + "12225180": "Cornicornuta", + "12225687": "Macaria austrinata", + "12226416": "Archonias nimbice", + "12229237": "Gampola sinica", + "12229400": "Tharsalea helloides", + "12229940": "Pterourus rutulus", + "12231152": "Eudonia cleodoralis", + "12231344": "Heliopetes americanus", + "12231385": "Gibbalaria scabellana", + "12233602": "Tharsalea heteronea", + "12233808": "Polites egeremet", + "12233838": "Thorybes casica", + "12234544": "Abaeis albula", + "12234977": "Argynnis coronis", + "12235234": "Cornicornuta convexa", + "12236627": "Abaeis boisduvaliana", + "12239445": "Dahlica walshella", + "12239491": "Chiothion georgina", + "12242422": "Cyme euprepioides", + "12243973": "Polites premnas", + "12246183": "Fania", + "12247340": "Burnsius albezens", + "12247359": "Pterourus glaucus", + "12249986": "Ovipennis semilutea", + "12250854": "Tharsalea epixanthe", + "12251247": "Archonias teutila", + "12252340": "Burnsius philetas", + "12252570": "Carmenta armasata", + "12252926": "Hoodus pelopidas", + "12253343": "Manulea complana", + "12253844": "Pterourus canadensis", + "12257250": "Arctelene arcuata", + "12257418": "Tharsalea gorgon", + "12258146": "Vernia verna", + "12258652": "Junonia grisea", + "12258984": "Tharsalea dione", + "12259113": "Processine cruciata", + "12259151": "Anisogona placoxantha", + "12260643": "Delineatia", + "12262562": "Pterourus troilus", + "12263736": "Troyus phyllides", + "12265590": "Tharsalea mariposa", + "12266659": "Magna myops", + "12276630": "Phalonidia magdalenae", + "12286003": "Anastrus sempiternus", + "12301192": "Acraea lycoa", + "12318291": "Cauchas fibulella", + "12322536": "Prepona demophoon", + "12335869": "Prepona demophon", + "12353663": "Pyrrhopyge chalybea", + "12357826": "Acraea bonasia", + "12358748": "Acraea acerata", + "1369661": "Sosxetra", + "1555575": "Acantholena", + "1730471": "Xyleutes", + "1730519": "Xyleutes strix", + "1730543": "Xyleutes persona", + "1730685": "Morpheis", + "1730705": "Parahypopta", + "1730737": "Azygophleps", + "1730763": "Givira", + "1730815": "Cossus", + "1730935": "Zeuzera", + "1730948": "Zeuzera multistrigata", + "1730978": "Zeuzera pyrina", + "1731096": "Ptilomacra", + "1731097": "Ptilomacra senex", + "1731220": "Idioses", + "1731221": "Idioses littleri", + "1731226": "Dyspessa", + "1731263": "Dyspessa ulula", + "1731291": "Trigonocyttara", + "1731292": "Trigonocyttara clandestina", + "1731363": "Acossus", + "1731505": "Zyganisus", + "1731584": "Phragmataecia", + "1731598": "Phragmataecia castaneae", + "1731712": "Langsdorfia", + "1731748": "Cossula", + "1731750": "Cossula magnifica", + "1731800": "Prionoxystus", + "1731811": "Prionoxystus macmurtrei", + "1731812": "Prionoxystus robiniae", + "1731817": "Eriocrania", + "1731826": "Eriocrania semipurpurella", + "1731837": "Eriocrania cicatricella", + "1731859": "Dyseriocrania", + "1731860": "Dyseriocrania subpurpurella", + "1731862": "Dyseriocrania griseocapitella", + "1731885": "Chelepteryx", + "1731886": "Chelepteryx collesi", + "1731890": "Chelepteryx chalepteryx", + "1731891": "Anthela", + "1731906": "Anthela nicothoe", + "1731923": "Anthela repleta", + "1731926": "Anthela ferruginosa", + "1731927": "Anthela varia", + "1731980": "Anthela denticulata", + "1732001": "Anthela acuta", + "1732005": "Anthela ocellata", + "1732031": "Anthela excellens", + "1732033": "Anthela basigera", + "1732043": "Munychryia", + "1732044": "Munychryia senicula", + "1732047": "Nataxa", + "1732052": "Nataxa flavescens", + "1732062": "Poecilocampa", + "1732063": "Poecilocampa populi", + "1732072": "Poecilocampa alpina", + "1732085": "Bombycomorpha", + "1732087": "Bombycomorpha bifascia", + "1732089": "Trabala", + "1732114": "Trabala pallida", + "1732115": "Trabala vishnou", + "1732160": "Gloveria", + "1732397": "Macrothylacia", + "1732416": "Macrothylacia rubi", + "1732419": "Macrothylacia digramma", + "1732442": "Trichiura", + "1732452": "Trichiura crataegi", + "1732457": "Trichiura ilicis", + "1732496": "Gastropacha", + "1732508": "Gastropacha horishana", + "1732521": "Gastropacha populifolia", + "1732525": "Gastropacha pardale", + "1732565": "Gastropacha quercifolia", + "1732599": "Genduara", + "1732627": "Sena", + "1732658": "Mesocelis", + "1732660": "Mesocelis monticola", + "1732661": "Phyllodesma", + "1732662": "Phyllodesma ilicifolia", + "1732680": "Phyllodesma suberifolia", + "1732685": "Phyllodesma tremulifolia", + "1732697": "Phyllodesma kermesifolia", + "1732717": "Phyllodesma americana", + "1732761": "Paradoxopla", + "1732763": "Paradoxopla sinuata", + "1732814": "Metanastria", + "1732830": "Metanastria hyrtaca", + "1732834": "Syrastrena", + "1732842": "Syrastrena sumatrana", + "1732862": "Paralebeda", + "1732883": "Artace", + "1732901": "Artace cribrarius", + "1732944": "Gonometa", + "1732955": "Gonometa postica", + "1732969": "Pararguda", + "1732978": "Pararguda crenulata", + "1733135": "Kunugia", + "1733154": "Kunugia undans", + "1733155": "Kunugia divaricata", + "1733242": "Cosmotriche", + "1733243": "Cosmotriche discitincta", + "1733258": "Cosmotriche lobulina", + "1733338": "Dendrolimus", + "1733394": "Dendrolimus arizana", + "1733412": "Dendrolimus punctata", + "1733484": "Dendrolimus pini", + "1733502": "Pernattia", + "1733504": "Pernattia pusilla", + "1733507": "Pernattia chlorophragma", + "1733511": "Pernattia brevipennis", + "1733524": "Heteropacha", + "1733525": "Heteropacha rileyana", + "1733529": "Opsirhina", + "1733535": "Opsirhina lechriodes", + "1733574": "Eriogaster", + "1733617": "Psilogaster", + "1733620": "Psilogaster loti", + "1733670": "Streblote", + "1733755": "Streblote panda", + "1733831": "Bharetta", + "1733840": "Malacosoma", + "1734381": "Apotolype", + "1734384": "Apotolype brevicrista", + "1734388": "Euthrix", + "1734453": "Euthrix potatoria", + "1734489": "Somadasys", + "1734496": "Somadasys catacoides", + "1734505": "Lebeda", + "1734519": "Lebeda nobilis", + "1734548": "Tolype", + "1734683": "Lasiocampa", + "1734690": "Lasiocampa grandis", + "1734704": "Lasiocampa trifolii", + "1734794": "Lasiocampa serrula", + "1734826": "Lasiocampa quercus", + "1734849": "Porela", + "1734851": "Porela delineata", + "1734934": "Arguda", + "1735093": "Carposina", + "1735121": "Carposina sasakii", + "1735168": "Carposina rubophaga", + "1735193": "Carposina scirrhosella", + "1735256": "Bondia", + "1735272": "Sosineura", + "1735273": "Sosineura mimica", + "1735289": "Coscinoptycha", + "1735391": "Carposina eriphylla", + "1735398": "Carposina exochana", + "1735406": "Lotisma", + "1735408": "Lotisma trigonana", + "1735409": "Phycomorpha", + "1735487": "Opostega", + "1735532": "Opostega salaciella", + "1735586": "Opostegoides", + "1735631": "Fomoria", + "1735652": "Stigmella", + "1735814": "Ectoedemia", + "1735844": "Ectoedemia albifasciella", + "1735855": "Ectoedemia subbimaculella", + "1735869": "Etainia", + "1736266": "Schreckensteinia", + "1736271": "Schreckensteinia erythriella", + "1736314": "Xenotemna", + "1736315": "Xenotemna pallorana", + "1736354": "Arcesis", + "1736358": "Arcesis threnodes", + "1736359": "Lozotaenia", + "1736377": "Lozotaenia forsterana", + "1736388": "Corticivora", + "1736390": "Corticivora parva", + "1736409": "Strophedra", + "1736412": "Strophedra nitidana", + "1736418": "Spatalistis", + "1736425": "Spatalistis bifasciana", + "1736444": "Lozotaeniodes", + "1736447": "Lozotaeniodes formosana", + "1736460": "Grapholita", + "1736484": "Grapholita discretana", + "1736499": "Grapholita delineana", + "1736511": "Grapholita jungiella", + "1736528": "Grapholita funebrana", + "1736560": "Grapholita orobana", + "1736565": "Grapholita janthinana", + "1736601": "Grapholita compositella", + "1736612": "Crocidosema", + "1736623": "Crocidosema plebejana", + "1736656": "Choristoneura", + "1736725": "Gravitarmata", + "1736727": "Gravitarmata margarotana", + "1736758": "Gretchena", + "1736760": "Gretchena bolliana", + "1736793": "Lathronympha", + "1736800": "Lathronympha strigana", + "1736802": "Pseudexentera", + "1736803": "Pseudexentera costomaculana", + "1736807": "Pseudexentera spoliana", + "1736809": "Pseudexentera hodsoni", + "1736811": "Pseudexentera knudsoni", + "1736821": "Pseudexentera oregonana", + "1736826": "Pseudexentera haracana", + "1736830": "Choristis", + "1736834": "Amorbia", + "1736836": "Amorbia humerosana", + "1736860": "Amorbia cuneanum", + "1736895": "Gypsonoma", + "1736898": "Gypsonoma sociana", + "1736904": "Gypsonoma dealbana", + "1736905": "Gypsonoma minutana", + "1736906": "Gypsonoma aceriana", + "1736915": "Gypsonoma fasciolana", + "1736918": "Gypsonoma adjuncta", + "1736937": "Gypsonoma haimbachiana", + "1736939": "Gypsonoma substitutionis", + "1736945": "Gypsonoma oppressana", + "1736951": "Cryptophlebia", + "1736993": "Cryptophlebia repletana", + "1736995": "Cryptophlebia illepida", + "1737015": "Cryptophlebia ombrodelta", + "1737021": "Metendothenia", + "1737063": "Decodes", + "1737072": "Decodes basiplagana", + "1737084": "Metrioglypha", + "1737110": "Epiphyas", + "1737115": "Epiphyas asthenopis", + "1737131": "Epiphyas postvittana", + "1737177": "Epitymbia", + "1737182": "Epitymbia cosmota", + "1737187": "Epitymbia alaudana", + "1737228": "Pseudogalleria", + "1737231": "Pseudogalleria inimicella", + "1737303": "Neocalyptis", + "1737313": "Neocalyptis affinisana", + "1737335": "Clepsis", + "1737342": "Clepsis senecionana", + "1737368": "Clepsis pallidana", + "1737374": "Clepsis melaleucanus", + "1737403": "Clepsis virescana", + "1737413": "Clepsis siciliana", + "1737417": "Clepsis clemensiana", + "1737437": "Clepsis dumicolana", + "1737491": "Clepsis spectrana", + "1737497": "Clepsis rurinana", + "1737509": "Clepsis coriacana", + "1737519": "Hedya", + "1737524": "Hedya pruniana", + "1737526": "Hedya nubiferana", + "1737533": "Hedya dimidiana", + "1737542": "Hedya salicella", + "1737544": "Hedya separatana", + "1737551": "Hedya chionosema", + "1737552": "Hedya ochroleucana", + "1737647": "Pseudohermenias", + "1737650": "Pseudohermenias abietana", + "1737701": "Cydia", + "1737753": "Cydia nigricana", + "1737768": "Cydia populana", + "1737775": "Cydia splendana", + "1737776": "Cydia fagiglandana", + "1737783": "Cydia conicolana", + "1737847": "Cydia pomonella", + "1737893": "Cydia succedana", + "1737904": "Cydia caryana", + "1737924": "Cydia inquinatana", + "1737929": "Cydia membrosa", + "1737964": "Cydia latiferreana", + "1737968": "Cydia ingens", + "1737973": "Cydia albimaculana", + "1737978": "Cydia toreuta", + "1738021": "Isotenes", + "1738045": "Isotenes miserana", + "1738049": "Cymolomia", + "1738050": "Cymolomia hartigiana", + "1738065": "Planotortrix", + "1738081": "Planotortrix notophaea", + "1738143": "Isotrias", + "1738163": "Isotrias rectifasciana", + "1738189": "Dactylioglypha", + "1738192": "Dactylioglypha tonica", + "1738196": "Dipterina imbriferana", + "1738215": "Pseudosciaphila", + "1738218": "Pseudosciaphila duplex", + "1738222": "Pseudosciaphila branderiana", + "1738242": "Pseudargyrotoza", + "1738245": "Pseudargyrotoza conwagana", + "1738265": "Aethes", + "1738317": "Aethes rubigana", + "1738322": "Aethes triangulana", + "1738337": "Aethes margaritana", + "1738373": "Aethes williana", + "1738422": "Aethes smeathmanniana", + "1738429": "Aethes tesserana", + "1738514": "Aethes hartmanniana", + "1738583": "Agapeta", + "1738667": "Dichrorampha", + "1738687": "Dichrorampha simpliciana", + "1738700": "Dichrorampha petiverella", + "1738722": "Dichrorampha alpinana", + "1738777": "Dichrorampha plumbana", + "1738791": "Dichrorampha bittana", + "1738794": "Dichrorampha vancouverana", + "1738809": "Dichrorampha leopardana", + "1738839": "Dichrorampha acuminatana", + "1738881": "Retinia", + "1738883": "Retinia resinella", + "1738888": "Retinia gemistrigulana", + "1739000": "Rhopobota", + "1739034": "Rhopobota dietziana", + "1739042": "Rhopobota myrtillana", + "1739043": "Rhopobota ustomaculana", + "1739048": "Heliocosma", + "1739051": "Heliocosma argyroleuca", + "1739060": "Cnephasia", + "1739128": "Cnephasia incertana", + "1739151": "Cnephasia cupressivorana", + "1739220": "Cnephasia jactatana", + "1739272": "Cnephasia stephensiana", + "1739284": "Cnephasia asseclana", + "1739290": "Cnephasia longana", + "1739315": "Merophyas", + "1739316": "Merophyas divulsana", + "1739336": "Rhyacionia", + "1739337": "Rhyacionia pinicolana", + "1739362": "Rhyacionia rigidana", + "1739364": "Rhyacionia frustrana", + "1739377": "Rhyacionia pinivorana", + "1739381": "Rhyacionia buoliana", + "1739398": "Coelostathma", + "1739400": "Coelostathma discopunctana", + "1739418": "Ptycholoma", + "1739446": "Cochylidia", + "1739449": "Cochylidia rupicola", + "1739451": "Cochylidia subroseana", + "1739461": "Cochylidia implicitana", + "1739471": "Cochylidia heydeniana", + "1739550": "Ctenopseustis", + "1739553": "Ctenopseustis obliquana", + "1739567": "Ctenopseustis fraterna", + "1739599": "Sparganothis", + "1739605": "Sparganothis pilleriana", + "1739612": "Sparganothis unifasciana", + "1739617": "Sparganothis sulfureana", + "1739629": "Sparganothis pulcherrimana", + "1739646": "Sparganothis xanthoides", + "1739656": "Sparganothis tristriata", + "1739668": "Sparganothis distincta", + "1739677": "Sparganothis demissana", + "1739724": "Acleris", + "1739727": "Acleris curvalana", + "1739748": "Acleris ferrugana", + "1739767": "Acleris variana", + "1739770": "Acleris gloveranus", + "1739797": "Acleris bergmanniana", + "1739816": "Acleris comariana", + "1739819": "Acleris cristana", + "1739833": "Acleris variegana", + "1739867": "Acleris semipurpurana", + "1739884": "Acleris stadiana", + "1739919": "Acleris umbrana", + "1739922": "Acleris forsskaleana", + "1739924": "Acleris placidana", + "1739927": "Acleris chalybeana", + "1739931": "Acleris literana", + "1739954": "Acleris oxycoccana", + "1739956": "Acleris cervinana", + "1739964": "Acleris forbesana", + "1739973": "Acleris robinsoniana", + "1739980": "Acleris logiana", + "1739983": "Acleris celiana", + "1739999": "Acleris lipsiana", + "1740003": "Acleris flavivittana", + "1740005": "Acleris hyemana", + "1740037": "Acleris maximana", + "1740053": "Acleris aspersana", + "1740060": "Acleris caliginosana", + "1740069": "Acleris holmiana", + "1740116": "Acleris effractana", + "1740120": "Acleris rhombana", + "1740133": "Acleris maculidorsana", + "1740148": "Acleris macdunnoughi", + "1740155": "Acleris viburnana", + "1740163": "Acleris subnivana", + "1740174": "Acleris sparsana", + "1740183": "Acleris emargana", + "1740185": "Acleris laterana", + "1740225": "Acleris braunana", + "1740246": "Acleris albicomana", + "1740305": "Acleris maccana", + "1740370": "Acleris ptychogrammos", + "1740374": "Acleris notana", + "1740389": "Acleris nivisellana", + "1740392": "Acleris hastiana", + "1740400": "Acleris nigrolinea", + "1740434": "Adoxophyes", + "1740449": "Adoxophyes negundana", + "1740469": "Adoxophyes privatana", + "1740482": "Adoxophyes orana", + "1740515": "Lobesia", + "1740518": "Lobesia littoralis", + "1740524": "Lobesia aeolopa", + "1740533": "Lobesia bicinctana", + "1740567": "Lobesia reliquana", + "1740570": "Lobesia abscissana", + "1740586": "Lobesia transtrifera", + "1740623": "Lobesia botrana", + "1740664": "Cacoecimorpha", + "1740674": "Acroclita", + "1740762": "Acroclita subsequana", + "1740796": "Loboschiza", + "1740797": "Loboschiza koenigiana", + "1740814": "Dudua", + "1740828": "Dudua aprobola", + "1741043": "Ditula", + "1741056": "Ditula angustiorana", + "1741073": "Anisogona", + "1741074": "Anisogona similana", + "1741082": "Mictoneura", + "1741084": "Mictoneura flexanimana", + "1741128": "Ecdytolopha", + "1741130": "Ecdytolopha insiticiana", + "1741131": "Ecdytolopha mana", + "1741141": "Cochylimorpha", + "1741147": "Cochylimorpha straminea", + "1741253": "Cochylimorpha alternana", + "1741258": "Cochylimorpha decolorella", + "1741314": "Anopina", + "1741324": "Anopina triangulana", + "1741338": "Notocelia", + "1741340": "Notocelia trimaculana", + "1741341": "Notocelia uddmanniana", + "1741361": "Notocelia culminana", + "1741368": "Notocelia rosaecolana", + "1741383": "Episimus", + "1741398": "Episimus tyrius", + "1741400": "Episimus argutana", + "1741404": "Spilonota", + "1741540": "Olindia", + "1741545": "Olindia schumacherana", + "1741547": "Eriopsela", + "1741551": "Eriopsela quadrana", + "1741557": "Statherotis", + "1741585": "Cochylis", + "1741590": "Cochylis molliculana", + "1741593": "Cochylis atricapitana", + "1741615": "Cochylis pallidana", + "1741633": "Cochylis dubitana", + "1741634": "Cochylis flaviciliana", + "1741667": "Cochylis hybridella", + "1741717": "Endothenia", + "1741719": "Endothenia nubilana", + "1741747": "Endothenia hebesana", + "1741752": "Endothenia quadrimaculana", + "1741756": "Endothenia nigricostana", + "1741765": "Endothenia ustulana", + "1741805": "Platynota", + "1741812": "Platynota exasperatana", + "1741818": "Platynota semiustana", + "1741820": "Platynota stultana", + "1741823": "Platynota flavedana", + "1741824": "Platynota idaeusalis", + "1741826": "Platynota rostrana", + "1742045": "Sparganothoides", + "1742061": "Olethreutes", + "1742081": "Olethreutes malana", + "1742089": "Olethreutes atrodentana", + "1742091": "Olethreutes exoletum", + "1742106": "Olethreutes obsoletana", + "1742121": "Olethreutes astrologana", + "1742142": "Olethreutes schulziana", + "1742150": "Olethreutes furfuranum", + "1742168": "Olethreutes connectum", + "1742178": "Olethreutes permundana", + "1742180": "Olethreutes valdanum", + "1742185": "Olethreutes arcuella", + "1742198": "Olethreutes appendiceum", + "1742203": "Olethreutes concinnana", + "1742214": "Olethreutes osmundana", + "1742239": "Olethreutes tilianum", + "1742241": "Olethreutes nigranum", + "1742260": "Olethreutes bipartitana", + "1742263": "Olethreutes metallicana", + "1742268": "Olethreutes hamameliana", + "1742272": "Olethreutes merrickanum", + "1742273": "Olethreutes quadrifidum", + "1742287": "Olethreutes inornatana", + "1742293": "Olethreutes ferriferana", + "1742304": "Olethreutes punctanum", + "1742310": "Olethreutes griseoalbana", + "1742335": "Olethreutes fasciatana", + "1742345": "Ptycholomoides", + "1742346": "Ptycholomoides aeriferana", + "1742398": "Stictea", + "1742402": "Stictea mygindiana", + "1742419": "Eucosma", + "1743173": "Pyrgotis", + "1743182": "Pyrgotis pyramidias", + "1743184": "Pyrgotis plagiatana", + "1743188": "Eudemis", + "1743196": "Eudemis profundana", + "1743269": "Sereda", + "1743318": "Strepsicrates", + "1743319": "Strepsicrates ejectana", + "1743323": "Strepsicrates smithiana", + "1743343": "Eugnosta", + "1743404": "Eupoecilia", + "1743452": "Blastesthia", + "1743453": "Blastesthia turionella", + "1743459": "Eumarozia", + "1743461": "Eumarozia malachitana", + "1743467": "Gibberifera", + "1743475": "Gibberifera simplana", + "1743485": "Thiodia", + "1743516": "Epiblema", + "1743532": "Epiblema foenella", + "1743588": "Epiblema scutulana", + "1743604": "Epiblema grandaevana", + "1743613": "Epiblema turbidana", + "1743637": "Falseuncaria", + "1743641": "Falseuncaria degreyana", + "1743643": "Falseuncaria ruficiliana", + "1743651": "Catastega aceriella", + "1743652": "Evora", + "1743653": "Evora hemidesma", + "1743656": "Sonia", + "1743657": "Sonia paraplesiana", + "1743658": "Sonia constrictana", + "1743663": "Sonia canadana", + "1743673": "Tracholena", + "1743680": "Tracholena sulfurosa", + "1743690": "Zeiraphera", + "1743694": "Zeiraphera canadensis", + "1743710": "Zeiraphera isertana", + "1743714": "Zeiraphera ratzeburgiana", + "1743723": "Fulvoclysia", + "1743730": "Fulvoclysia nerminae", + "1743762": "Celypha", + "1743768": "Celypha cespitana", + "1743775": "Celypha striana", + "1743782": "Celypha flavipalpana", + "1743811": "Pandemis", + "1743825": "Pandemis limitata", + "1743828": "Pandemis cerasana", + "1743838": "Pandemis lamprosana", + "1743855": "Pandemis canadana", + "1743856": "Pandemis cinnamomeana", + "1743862": "Pandemis corylana", + "1743867": "Pandemis dumetana", + "1743898": "Pandemis heparana", + "1743926": "Henricus", + "1743994": "Cnesteboda", + "1743998": "Cnesteboda celligera", + "1744049": "Eulia", + "1744071": "Eulia ministrana", + "1744129": "Chimoptesis", + "1744130": "Chimoptesis pennsylvaniana", + "1744133": "Orthotaenia", + "1744136": "Orthotaenia undulana", + "1744165": "Syndemis", + "1744180": "Syndemis musculana", + "1744208": "Rudenia", + "1744212": "Rudenia leguminana", + "1744219": "Exapate", + "1744224": "Exapate congelatella", + "1744237": "Periclepsis", + "1744240": "Enarmonia", + "1744416": "Enarmonia formosana", + "1744481": "Phalonidia", + "1744498": "Phalonidia manniana", + "1744526": "Phalonidia contractana", + "1744542": "Phalonidia curvistrigana", + "1744587": "Syricoris", + "1744588": "Syricoris rivulana", + "1744593": "Syricoris lacunana", + "1744687": "Glyphidoptera", + "1744691": "Apotomis", + "1744693": "Apotomis lineana", + "1744699": "Apotomis inundana", + "1744700": "Apotomis removana", + "1744709": "Apotomis infida", + "1744714": "Apotomis semifasciana", + "1744724": "Apotomis albeolana", + "1744728": "Apotomis betuletana", + "1744731": "Apotomis capreana", + "1744739": "Apotomis turbidana", + "1744742": "Apotomis sororculana", + "1744748": "Apotomis sauciana", + "1744761": "Pammene", + "1744763": "Pammene rhediella", + "1744777": "Pammene populana", + "1744782": "Pammene aurita", + "1744789": "Pammene fasciana", + "1744808": "Pammene argyrana", + "1744810": "Pammene regiana", + "1744860": "Pammene giganteana", + "1744896": "Pammene aurana", + "1744901": "Pammene trauniana", + "1744928": "Eucosmomorpha", + "1744946": "Phaecasiophora", + "1744949": "Phaecasiophora niveiguttana", + "1744953": "Phaecasiophora confixana", + "1744993": "Harmologa", + "1744998": "Harmologa amplexana", + "1745011": "Pseudeulia", + "1745013": "Pseudeulia asinana", + "1745017": "Acroceuthes", + "1745019": "Acroceuthes metaxanthana", + "1745021": "Larisa", + "1745022": "Larisa subsolana", + "1745076": "Philedone", + "1745079": "Philedone gerningana", + "1745086": "Argyroploce", + "1745131": "Argyroploce arbutella", + "1745285": "Cryptaspasma", + "1745307": "Cryptaspasma querula", + "1745549": "Epinotia", + "1745558": "Epinotia solandriana", + "1745561": "Epinotia ramella", + "1745579": "Epinotia subocellana", + "1745600": "Epinotia bilunana", + "1745606": "Epinotia radicana", + "1745630": "Epinotia tetraquetrana", + "1745634": "Epinotia nisella", + "1745636": "Epinotia signatana", + "1745643": "Epinotia immundana", + "1745659": "Epinotia mercuriana", + "1745666": "Epinotia septemberana", + "1745669": "Epinotia medioviridana", + "1745675": "Epinotia solicitana", + "1745676": "Epinotia demarniana", + "1745678": "Epinotia abbreviana", + "1745705": "Epinotia tenerana", + "1745724": "Epinotia trigonella", + "1745725": "Epinotia fraternana", + "1745729": "Epinotia nonana", + "1745737": "Epinotia tedella", + "1745746": "Epinotia transmissana", + "1745756": "Epinotia cinereana", + "1745761": "Epinotia subviridis", + "1745762": "Epinotia granitana", + "1745771": "Epinotia maculana", + "1745781": "Epinotia thapsiana", + "1745787": "Epinotia nanana", + "1745788": "Epinotia rubiginosana", + "1745814": "Epinotia lindana", + "1745816": "Epinotia brunnichana", + "1745827": "Epinotia festivana", + "1745830": "Epinotia cruciana", + "1745894": "Cerace", + "1745895": "Cerace stipatana", + "1745922": "Piniphila", + "1745925": "Piniphila bifasciana", + "1745927": "Homona", + "1745947": "Homona coffearia", + "1745952": "Homona magnanima", + "1745957": "Homona spargotis", + "1745997": "Lorita", + "1746000": "Lorita scarificata", + "1746012": "Phtheochroa", + "1746027": "Phtheochroa inopiana", + "1746068": "Phtheochroa riscana", + "1746172": "Doloploca", + "1746174": "Doloploca punctulana", + "1746324": "Ebodina", + "1746327": "Ebodina elephantodes", + "1746399": "Epagoge", + "1746413": "Epagoge grotiana", + "1746437": "Aleimma", + "1746440": "Aleimma loeflingiana", + "1746461": "Epalxiphora", + "1746462": "Epalxiphora axenana", + "1746508": "Epichorista", + "1746512": "Epichorista siriana", + "1746562": "Paralobesia", + "1746586": "Paralobesia viteana", + "1746600": "Eana", + "1746613": "Eana osseana", + "1746644": "Eana incanana", + "1746666": "Eana argentana", + "1746689": "Eana penziana", + "1746694": "Zomaria", + "1746695": "Zomaria interruptolineana", + "1746712": "Gatesclarkeana", + "1746714": "Gatesclarkeana idia", + "1746749": "Archips", + "1746751": "Archips georgiana", + "1746754": "Archips strianus", + "1746763": "Archips cerasivorana", + "1746774": "Archips dissitana", + "1746775": "Archips oporana", + "1746831": "Archips alberta", + "1746832": "Archips podana", + "1746856": "Archips rosana", + "1746859": "Archips fervidana", + "1746876": "Archips xylosteana", + "1746881": "Archips rileyana", + "1746898": "Archips packardiana", + "1746910": "Archips crataegana", + "1746927": "Archips purpurana", + "1746949": "Archips grisea", + "1746994": "Zomariana", + "1747019": "Suleima", + "1747024": "Suleima helianthana", + "1747044": "Tortricodes", + "1747050": "Tortricodes alternella", + "1747067": "Leucotenes", + "1747068": "Leucotenes coprosmae", + "1747122": "Argyrotaenia", + "1747140": "Argyrotaenia franciscana", + "1747141": "Argyrotaenia ljungiana", + "1747147": "Argyrotaenia alisellana", + "1747150": "Argyrotaenia quercifoliana", + "1747155": "Argyrotaenia tabulana", + "1747160": "Argyrotaenia mariana", + "1747161": "Argyrotaenia quadrifasciana", + "1747163": "Argyrotaenia kimballi", + "1747166": "Argyrotaenia pinatubana", + "1747171": "Argyrotaenia juglandana", + "1747188": "Argyrotaenia occultana", + "1747189": "Argyrotaenia velutinana", + "1747195": "Cenopis", + "1747196": "Cenopis pettitana", + "1747209": "Apoctena", + "1747215": "Apoctena conditana", + "1747222": "Apoctena flavescens", + "1747242": "Tortrix", + "1747506": "Pelochrista", + "1747523": "Pelochrista scintillana", + "1747611": "Meritastis", + "1747625": "Arotrophora", + "1747639": "Arotrophora arcuatalis", + "1747644": "Sorolopha", + "1747672": "Sorolopha delochlora", + "1747723": "Bactra", + "1747738": "Bactra furfurana", + "1747740": "Bactra verutana", + "1747814": "Bactra noteraula", + "1747904": "Thrincophora", + "1747914": "Thrincophora impletana", + "1747924": "Thrincophora lignigerana", + "1747949": "Paramesia", + "1748099": "Holocola", + "1748103": "Holocola zopherana", + "1748108": "Barbara", + "1748109": "Barbara mappana", + "1748143": "Proteoteras", + "1748148": "Proteoteras naracana", + "1748149": "Proteoteras aesculana", + "1748151": "Proteoteras moffatiana", + "1748152": "Proteoteras crescentana", + "1748201": "Clavigesta", + "1748203": "Clavigesta purdeyi", + "1748277": "Aphelia", + "1748321": "Aphelia paleana", + "1748368": "Capua", + "1748425": "Capua intractana", + "1748442": "Capua paraloxa", + "1748456": "Capua vulgana", + "1748473": "Capua dura", + "1748486": "Capua euphona", + "1748518": "Capua semiferana", + "1748560": "Goditha", + "1748601": "Isodemis", + "1748605": "Isodemis serpentinana", + "1748645": "Catamacta", + "1748648": "Catamacta gavisana", + "1748661": "Catamacta lotinana", + "1748717": "Xerocnephasia", + "1748720": "Xerocnephasia rigana", + "1748748": "Syntozyga", + "1748751": "Syntozyga anconia", + "1748757": "Dichelia", + "1748777": "Amphithera", + "1748780": "Amphithera heteroleuca", + "1748799": "Roeslerstammia", + "1748805": "Roeslerstammia erxlebella", + "1748889": "Aspilapteryx", + "1748890": "Aspilapteryx tringipennella", + "1748902": "Parectopa", + "1748922": "Parectopa robiniella", + "1748942": "Parectopa ononidis", + "1749042": "Callisto", + "1749050": "Callisto denticulella", + "1749068": "Calybites", + "1749070": "Calybites phasianipennella", + "1749116": "Cyphosticha", + "1749124": "Cyphosticha panconita", + "1749137": "Parornix", + "1749164": "Parornix scoticella", + "1749286": "Neurobathra", + "1749287": "Neurobathra strigifinitella", + "1749401": "Cameraria", + "1749449": "Cameraria ohridella", + "1749505": "Macarostola", + "1749529": "Macarostola formosa", + "1749531": "Macarostola miniella", + "1749591": "Phyllocnistis populiella", + "1749596": "Phyllocnistis saligna", + "1749608": "Phyllocnistis labyrinthella", + "1749635": "Phyllocnistis unipunctella", + "1749656": "Phyllocnistis insignis", + "1749660": "Sauterina", + "1749661": "Sauterina hofmanniella", + "1749662": "Conopomorpha", + "1749664": "Conopomorpha cyanospila", + "1749712": "Gracillaria", + "1749713": "Gracillaria syringella", + "1749732": "Phyllonorycter", + "1749744": "Phyllonorycter ulmifoliella", + "1749760": "Phyllonorycter fitchella", + "1749846": "Phyllonorycter hilarella", + "1749869": "Phyllonorycter roboris", + "1749908": "Phyllonorycter kuhlweiniella", + "1749921": "Phyllonorycter corylifoliella", + "1749929": "Phyllonorycter maestingella", + "1749936": "Phyllonorycter platani", + "1749948": "Phyllonorycter harrisella", + "1749954": "Phyllonorycter klemannella", + "1749959": "Phyllonorycter coryli", + "1749975": "Phyllonorycter muelleriella", + "1750051": "Phyllonorycter trifasciella", + "1750076": "Phyllonorycter rajella", + "1750097": "Phyllonorycter joannisi", + "1750131": "Phyllonorycter messaniella", + "1750143": "Phyllonorycter quercifoliella", + "1750159": "Phyllonorycter leucographella", + "1750166": "Phyllonorycter issikii", + "1750288": "Phyllonorycter strigulatella", + "1750313": "Dialectica", + "1750326": "Dialectica scalariella", + "1750339": "Caloptilia", + "1750759": "Acrocercops", + "1750924": "Acrocercops astericola", + "1750934": "Acrocercops obscurella", + "1751024": "Acrocercops enchlamyda", + "1751051": "Acrocercops brongniardella", + "1751134": "Porphyrosela", + "1751146": "Porphyrosela minuta", + "1751163": "Marmara arbutiella", + "1751200": "Tinagma", + "1751207": "Tinagma ocnerostomella", + "1751216": "Tinagma perdicella", + "1751227": "Bucculatrix", + "1751236": "Bucculatrix cidarella", + "1751290": "Bucculatrix demaryella", + "1751298": "Bucculatrix nigricomella", + "1751299": "Bucculatrix ainsliella", + "1751336": "Bucculatrix angustata", + "1751368": "Bucculatrix ulmella", + "1751400": "Bucculatrix coronatella", + "1751457": "Bucculatrix thoracella", + "1751482": "Trosia", + "1751497": "Trosia semirufa", + "1751507": "Trosia fumosa", + "1751509": "Trosia misda", + "1751519": "Thoscora", + "1751524": "Thoscora ribbei", + "1751552": "Megalopyge", + "1751557": "Megalopyge pixidifera", + "1751572": "Megalopyge opercularis", + "1751575": "Megalopyge crispata", + "1751588": "Megalopyge lanata", + "1751590": "Megalopyge tharops", + "1751606": "Megalopyge undulata", + "1751609": "Megalopyge ravida", + "1751625": "Megalopyge albicollis", + "1751626": "Megalopyge defoliata", + "1751655": "Norape", + "1751670": "Norape virgo", + "1751684": "Norape tener", + "1751690": "Norape cretata", + "1751774": "Macara", + "1751785": "Macara alydda", + "1751789": "Podalia", + "1751846": "Heterogynis", + "1751852": "Heterogynis andalusica", + "1751979": "Perola", + "1751980": "Perola villosipes", + "1751986": "Perola sericea", + "1752034": "Perola repetita", + "1752035": "Hampsonella", + "1752100": "Phobetron", + "1752109": "Phobetron hipparchia", + "1752111": "Phobetron pithecium", + "1752158": "Phocoderma", + "1752161": "Phocoderma velutina", + "1752234": "Acharia", + "1752236": "Phrixolepia", + "1752277": "Adoneta", + "1752281": "Adoneta bicaudata", + "1752285": "Adoneta spinuloides", + "1752286": "Adoneta gemina", + "1752321": "Parapluda", + "1752327": "Parapluda invitabilis", + "1752361": "Susica", + "1752373": "Susica sinensis", + "1752382": "Hoyosia", + "1752383": "Hoyosia codeti", + "1752474": "Ulamia", + "1752477": "Ulamia dolabrata", + "1752482": "Cania", + "1752483": "Cania bilinea", + "1752492": "Cania bandura", + "1752494": "Cania heppneri", + "1752533": "Doratifera", + "1752534": "Doratifera casta", + "1752536": "Doratifera pinguis", + "1752537": "Doratifera quadriguttata", + "1752539": "Doratifera stenora", + "1752545": "Doratifera vulnerans", + "1752547": "Doratifera oxleyi", + "1752552": "Thosea", + "1752603": "Thosea sinensis", + "1752650": "Iraga", + "1752651": "Iraga rugosa", + "1752744": "Miresa", + "1752749": "Miresa fulgida", + "1752758": "Miresa kwangtungensis", + "1752775": "Miresa clarissa", + "1752804": "Micraphe", + "1752805": "Micraphe lateritia", + "1752820": "Prolimacodes", + "1752825": "Prolimacodes badia", + "1752832": "Prolimacodes trigona", + "1752848": "Scopelodes", + "1752849": "Scopelodes contracta", + "1752891": "Isochaetes", + "1752894": "Isochaetes beutenmuelleri", + "1752899": "Chalcocelis", + "1752903": "Chalcocelis albiguttatus", + "1752915": "Monoleuca", + "1752923": "Monoleuca semifascia", + "1752944": "Pseudanapaea", + "1752946": "Pseudanapaea denotata", + "1752947": "Pseudanapaea transvestita", + "1752965": "Alarodia", + "1753080": "Nagodopsis", + "1753081": "Nagodopsis shirakiana", + "1753104": "Tortricidia", + "1753105": "Tortricidia pallida", + "1753106": "Tortricidia flexuosa", + "1753111": "Tortricidia testacea", + "1753147": "Euclea", + "1753211": "Belippa", + "1753215": "Belippa horrida", + "1753224": "Parasa", + "1753395": "Parasa sinica", + "1753410": "Narosa", + "1753432": "Narosa nigrisigna", + "1753435": "Narosa corusca", + "1753458": "Parasoidea", + "1753461": "Parasoidea paroa", + "1753548": "Oxyplax", + "1753594": "Semyra", + "1753603": "Semyra bella", + "1753604": "Semyra finita", + "1753630": "Narosoideus", + "1753636": "Narosoideus flavidorsalis", + "1753657": "Natada", + "1753661": "Natada debella", + "1753668": "Natada nasoni", + "1753747": "Setora", + "1753759": "Setora postornata", + "1753802": "Monema", + "1753826": "Birthamula", + "1753830": "Sibine", + "1753833": "Sibine apicalis", + "1753864": "Sibine horrida", + "1753871": "Sibine nesea", + "1753896": "Comana", + "1753902": "Comana collaris", + "1753906": "Comana albibasis", + "1753921": "Packardia", + "1753922": "Packardia elegans", + "1753929": "Packardia geminata", + "1753981": "Lithacodes", + "1754133": "Thyrassia", + "1754135": "Thyrassia penangae", + "1754176": "Aglaope", + "1754183": "Aglaope infausta", + "1754253": "Pompelon", + "1754263": "Pompelon marginata", + "1754269": "Malthaca", + "1754270": "Malthaca dimidiata", + "1754315": "Sinica", + "1754329": "Rhagades", + "1754332": "Rhagades pruni", + "1754344": "Eterusia", + "1754368": "Eterusia aedea", + "1754380": "Eterusia taiwana", + "1754391": "Gynautocera", + "1754400": "Gynautocera rubriscutellata", + "1754412": "Harrisina", + "1754463": "Heteropan", + "1754465": "Heteropan submacula", + "1754508": "Pidorus", + "1754511": "Pidorus leno", + "1754516": "Pidorus gemina", + "1754535": "Pidorus atratus", + "1754609": "Piarosoma", + "1754618": "Turneriprocris", + "1754619": "Turneriprocris dolens", + "1754799": "Pollanisus", + "1754803": "Pollanisus subdolosa", + "1754806": "Pollanisus cupreus", + "1754814": "Pollanisus viridipulverulenta", + "1754857": "Clelea", + "1754901": "Erasmiphlebohecta", + "1754902": "Erasmiphlebohecta picturata", + "1754916": "Retina", + "1754919": "Retina rubrivitta", + "1754927": "Histia", + "1754933": "Histia flabellicornis", + "1755125": "Rhodopsona", + "1755131": "Rhodopsona rutila", + "1755149": "Soritia", + "1755233": "Chalcosia", + "1755237": "Chalcosia remota", + "1755248": "Chalcosia diana", + "1755253": "Chalcosia formosana", + "1755276": "Chalcosia thaivana", + "1755294": "Zygaena", + "1757647": "Trypanophora", + "1757652": "Trypanophora semihyalina", + "1757668": "Cyclosia", + "1757834": "Acoloithus", + "1757839": "Acoloithus falsarius", + "1757850": "Artona", + "1757853": "Artona martini", + "1757883": "Erasmia", + "1757993": "Phauda", + "1758003": "Phauda flammans", + "1758098": "Lactura", + "1758114": "Lactura calliphylla", + "1758146": "Lactura panopsia", + "1758313": "Dalcerides", + "1758439": "Alampla", + "1758440": "Alampla palaeodes", + "1758441": "Alampla arcifraga", + "1758446": "Imma", + "1758461": "Imma mylias", + "1758596": "Imma acosma", + "1758602": "Imma loxoscia", + "1758610": "Karana", + "1758613": "Karana gemmifera", + "1758620": "Nagadeba", + "1758625": "Nagadeba indecoralis", + "1758718": "Checupa", + "1758724": "Bityla", + "1758727": "Bityla defigurata", + "1758765": "Spragueia", + "1758767": "Spragueia guttata", + "1758771": "Spragueia funeralis", + "1758781": "Spragueia jaguaralis", + "1758783": "Spragueia magnifica", + "1758790": "Ponometia", + "1758812": "Balsa", + "1758827": "Chasmina", + "1758839": "Chasmina tibialis", + "1758850": "Chasmina pulchra", + "1758859": "Dyspyralis", + "1758860": "Dyspyralis puncticosta", + "1758861": "Dyspyralis nigellus", + "1758866": "Dyspyralis illocata", + "1758873": "Eupsilia", + "1758874": "Eupsilia quadrilinea", + "1758878": "Eupsilia transversa", + "1758879": "Eupsilia tristigmata", + "1758898": "Eupsilia devia", + "1758906": "Eupsilia vinulenta", + "1758916": "Eupsilia morrisoni", + "1758939": "Lophoptera", + "1759029": "Lacanobia", + "1759037": "Lacanobia nevadae", + "1759040": "Lacanobia radix", + "1759041": "Lacanobia atlantica", + "1759055": "Lacanobia contigua", + "1759069": "Lacanobia thalassina", + "1759079": "Lacanobia w-latinum", + "1759083": "Lacanobia oleracea", + "1759092": "Lacanobia subjuncta", + "1759097": "Lacanobia aliena", + "1759149": "Itmaharela", + "1759150": "Itmaharela basalis", + "1759152": "Atethmia", + "1759153": "Atethmia centrago", + "1759159": "Atethmia ambusta", + "1759176": "Eugraptoblemma", + "1759177": "Eugraptoblemma pictalis", + "1759329": "Catabena", + "1759338": "Catabena lineolata", + "1759351": "Oruza cariosa", + "1759394": "Oruza mira", + "1759405": "Opigena", + "1759407": "Opigena polygona", + "1759552": "Lithophane", + "1759553": "Lithophane baileyi", + "1759563": "Lithophane semiusta", + "1759573": "Lithophane disposita", + "1759585": "Lithophane dilatocula", + "1759597": "Lithophane semibrunnea", + "1759605": "Lithophane thaxteri", + "1759610": "Lithophane pexata", + "1759611": "Lithophane antennata", + "1759620": "Lithophane consocia", + "1759621": "Lithophane petulca", + "1759624": "Lithophane georgii", + "1759631": "Lithophane grotei", + "1759632": "Lithophane innominata", + "1759633": "Lithophane pertorrida", + "1759634": "Lithophane amanda", + "1759661": "Lithophane furcifera", + "1759667": "Lithophane socia", + "1759668": "Lithophane ornitopus", + "1759671": "Lithophane unimoda", + "1759673": "Lithophane leautieri", + "1759677": "Lithophane patefacta", + "1759678": "Lithophane hemina", + "1759686": "Lithophane lamda", + "1759688": "Lithophane bethunei", + "1759691": "Lithophane oriunda", + "1759694": "Lithophane fagina", + "1759711": "Abagrotis", + "1759719": "Abagrotis alternata", + "1759767": "Daddala", + "1759775": "Daddala lucilla", + "1759797": "Stibaera", + "1759799": "Stibaera thyatiroides", + "1759812": "Aegocera", + "1759878": "Azenia", + "1759881": "Azenia implora", + "1759882": "Lophoruza", + "1760088": "Mesoligia", + "1760104": "Mesoligia furuncula", + "1760135": "Platyja", + "1760140": "Platyja torsilinea", + "1760168": "Persectania", + "1760172": "Persectania ewingii", + "1760173": "Persectania aversa", + "1760175": "Persectania dyscrita", + "1760198": "Maguda", + "1760201": "Maguda suffusa", + "1760233": "Phytometra orgiae", + "1760244": "Phytometra sanctiflorentis", + "1760246": "Phytometra viridaria", + "1760257": "Phytometra ernestinana", + "1760260": "Nigetia", + "1760261": "Nigetia formosalis", + "1760285": "Cropia", + "1760309": "Cropia connecta", + "1760355": "Aleptina", + "1760361": "Aleptina inca", + "1760382": "Toxonprucha", + "1760384": "Toxonprucha clientis", + "1760385": "Toxonprucha crudelis", + "1760396": "Toxonprucha pardalis", + "1760397": "Toxonprucha excavata", + "1760398": "Toxonprucha repentis", + "1760400": "Toxonprucha volucris", + "1760401": "Perigrapha", + "1760447": "Phosphila", + "1760454": "Phosphila turbulenta", + "1760455": "Phosphila miselioides", + "1760583": "Diphthera", + "1760588": "Trachea", + "1760593": "Trachea atriplicis", + "1760620": "Trachea auriplena", + "1760678": "Eucirroedia", + "1760682": "Eucirroedia pampina", + "1760738": "Lasionycta", + "1760849": "Aporophyla", + "1760857": "Aporophyla australis", + "1760867": "Aporophyla chioleuca", + "1760887": "Aporophyla lueneburgensis", + "1760891": "Aporophyla nigra", + "1760893": "Aporophyla lutulenta", + "1760914": "Dinumma", + "1760927": "Dinumma deponens", + "1760928": "Eugnathia", + "1760939": "Eugnathia lunifera", + "1760943": "Eugnathia albicostalis", + "1760946": "Raphia", + "1760969": "Nechesia", + "1760970": "Nechesia albotentata", + "1761017": "Hada", + "1761041": "Hada plebeja", + "1761094": "Callistege", + "1761101": "Callistege triangula", + "1761102": "Callistege intercalaris", + "1761110": "Callistege diagonalis", + "1761111": "Callistege mi", + "1761132": "Gerra", + "1761143": "Gerra sevorsa", + "1761207": "Dierna", + "1761213": "Dierna strigata", + "1761351": "Goniocraspidum", + "1761353": "Goniocraspidum pryeri", + "1761385": "Tephriopis", + "1761387": "Tephriopis divulsa", + "1761388": "Calymma", + "1761392": "Calymma communimacula", + "1761401": "Axylia", + "1761438": "Axylia putris", + "1761439": "Axylia annularis", + "1761495": "Achatodes", + "1761498": "Achatodes zeae", + "1761539": "Goniocraspedon", + "1761550": "Proroblemma", + "1761553": "Proroblemma testa", + "1761561": "Acherdoa", + "1761563": "Acherdoa ferraria", + "1761571": "Esthlodora", + "1761572": "Esthlodora variabilis", + "1761573": "Esthlodora versicolor", + "1761728": "Mormo", + "1761735": "Mormo maura", + "1761750": "Dasypodia", + "1761751": "Dasypodia selenophora", + "1761752": "Dasypodia cymatodes", + "1761775": "Paradiopa", + "1761778": "Paradiopa postfusca", + "1761787": "Hecatesia", + "1761788": "Hecatesia fenestrata", + "1761789": "Hecatesia thyridion", + "1761797": "Acerra", + "1761798": "Acerra normalis", + "1761815": "Diatenes", + "1761820": "Diatenes aglossoides", + "1761829": "Lascoria", + "1761838": "Lascoria ambigualis", + "1761857": "Auchmis", + "1761865": "Auchmis detersa", + "1761889": "Anicla", + "1761892": "Anicla infecta", + "1762149": "Arcte", + "1762151": "Arcte coerula", + "1762194": "Dahlia", + "1762212": "Progonia", + "1762219": "Progonia oileusalis", + "1762225": "Psimada", + "1762226": "Psimada quadripennis", + "1762232": "Simyra", + "1762244": "Simyra albovenosa", + "1762271": "Simyra nervosa", + "1762280": "Caenurgia", + "1762286": "Caenurgia chloropha", + "1762293": "Condate", + "1762298": "Condate hypenoides", + "1762346": "Sesamia", + "1762383": "Sesamia nonagrioides", + "1762414": "Parallelia", + "1762474": "Parallelia bistriaris", + "1762605": "Protolampra", + "1762608": "Protolampra sobrina", + "1762609": "Protolampra brunneicollis", + "1762615": "Protolampra rufipectus", + "1762640": "Tiracola", + "1762657": "Tiracola plagiata", + "1762666": "Phyllophila", + "1762680": "Phyllophila obliterata", + "1762711": "Lesmone", + "1762841": "Artigisa", + "1762849": "Artigisa melanephele", + "1762852": "Artigisa impropria", + "1762885": "Ophyx", + "1762887": "Ophyx ochroptera", + "1762898": "Phalaenoides", + "1762900": "Phalaenoides tristifica", + "1762902": "Phalaenoides glycinae", + "1763072": "Acontia lucida", + "1763151": "Eulepidotis", + "1763156": "Eulepidotis hermura", + "1763163": "Eulepidotis juncida", + "1763184": "Eulepidotis julianata", + "1763199": "Eulepidotis rectimargo", + "1763223": "Eulepidotis testaceiceps", + "1763256": "Eulepidotis viridissima", + "1763285": "Cucullia", + "1763588": "Parolulis", + "1763589": "Parolulis renalis", + "1763591": "Ommatophora", + "1763597": "Cerapteryx", + "1763610": "Cerapteryx graminis", + "1763649": "Throana", + "1763650": "Throana pectinifer", + "1763693": "Trigonophora", + "1763697": "Trigonophora flammea", + "1763713": "Mimeusemia", + "1763727": "Mimeusemia vilemani", + "1763741": "Mimeusemia postica", + "1763761": "Trigonodes cephise", + "1763777": "Olulis", + "1763782": "Olulis puncticinctalis", + "1763804": "Hyposemansis", + "1763812": "Hyposemansis singha", + "1763951": "Ericeia", + "1763957": "Ericeia plaesiodes", + "1763976": "Ericeia inangulata", + "1763994": "Ericeia sobria", + "1764015": "Ercheia", + "1764021": "Ercheia niveostrigata", + "1764032": "Ercheia umbrosa", + "1764043": "Ercheia cyllaria", + "1764060": "Ercheia dubia", + "1764140": "Bryolymnia", + "1764158": "Pseudozarba", + "1764174": "Pseudozarba bipartita", + "1764178": "Pseudozarba orthopetes", + "1764187": "Donuca", + "1764234": "Chaetaglaea", + "1764238": "Chaetaglaea sericea", + "1764504": "Neeugoa", + "1764524": "Colobochyla", + "1764525": "Colobochyla interpuncta", + "1764531": "Colobochyla salicalis", + "1764537": "Adisura", + "1764553": "Adisura marginalis", + "1764638": "Chilkasa", + "1764640": "Chilkasa falcata", + "1764670": "Calliergis", + "1764673": "Calliergis ramosa", + "1764684": "Micrathetis", + "1764686": "Micrathetis dasarada", + "1764690": "Micrathetis canifimbria", + "1764691": "Micrathetis costiplaga", + "1764693": "Micrathetis triplex", + "1764709": "Oxicesta", + "1764716": "Oxicesta geographica", + "1764737": "Hermonassa", + "1764791": "Hermonassa cecilia", + "1764851": "Avatha", + "1764880": "Avatha chinensis", + "1764886": "Avatha discolor", + "1764916": "Oslaria", + "1764917": "Oslaria viridifera", + "1764920": "Caradrina", + "1764929": "Caradrina multifera", + "1764986": "Caradrina aspersa", + "1764987": "Caradrina gilva", + "1765010": "Caradrina albina", + "1765011": "Caradrina morpheus", + "1765017": "Caradrina kadenii", + "1765038": "Caradrina terrea", + "1765044": "Caradrina montana", + "1765069": "Caradrina proxima", + "1765073": "Caradrina germainii", + "1765092": "Phoberia", + "1765097": "Phoberia atomaris", + "1765154": "Oxythres", + "1765155": "Oxythres splendens", + "1765161": "Nephelodes", + "1765172": "Nephelodes minians", + "1765176": "Scolecocampa", + "1765182": "Scolecocampa liburna", + "1765207": "Spodoptera", + "1765494": "Burgena", + "1765508": "Burgena varia", + "1765601": "Alvaradoia", + "1765604": "Alvaradoia disjecta", + "1765652": "Sympis", + "1765653": "Sympis rufibasis", + "1765657": "Arasada", + "1765658": "Arasada pyraliformis", + "1765726": "Oxycnemis", + "1765733": "Oxycnemis fusimacula", + "1765751": "Tathorhynchus exsiccata", + "1765752": "Tathorhynchus fallax", + "1765763": "Melanchra", + "1765767": "Melanchra persicariae", + "1765769": "Melanchra pulverulenta", + "1765779": "Melanchra picta", + "1765798": "Melanchra assimilis", + "1765861": "Sarobides", + "1765863": "Sarobides inconclusa", + "1765877": "Thalatha", + "1765895": "Idalima", + "1765898": "Idalima affinis", + "1765949": "Dicycla", + "1765954": "Dicycla oo", + "1765960": "Iodopepla", + "1765962": "Iodopepla ualbum", + "1765996": "Hydrillodes nilgirialis", + "1765997": "Hydrillodes uliginosalis", + "1765999": "Hydrillodes lentalis", + "1766007": "Hydrillodes funestalis", + "1766022": "Hydrillodes torsivena", + "1766066": "Agoma", + "1766072": "Agoma trimenii", + "1766077": "Synthymia", + "1766086": "Synthymia fixa", + "1766123": "Amphipyra", + "1766128": "Amphipyra berbera", + "1766130": "Amphipyra livida", + "1766131": "Amphipyra perflua", + "1766137": "Amphipyra pyramidea", + "1766193": "Amphipyra glabella", + "1766205": "Amphipyra pyramidoides", + "1766210": "Amphipyra tragopoginis", + "1766234": "Hemibryomima", + "1766237": "Hemibryomima chryselectra", + "1766259": "Aroana", + "1766260": "Aroana baliensis", + "1766265": "Asteroscopus", + "1766274": "Asteroscopus sphinx", + "1766280": "Rachiplusia", + "1766285": "Rachiplusia nu", + "1766287": "Rachiplusia ou", + "1766366": "Oligia", + "1766392": "Oligia minuscula", + "1766410": "Oligia latruncula", + "1766418": "Oligia versicolor", + "1766489": "Oligia divesta", + "1766509": "Oligia modica", + "1766510": "Oligia fasciuncula", + "1766538": "Agamana", + "1766547": "Erebus", + "1766558": "Erebus terminitincta", + "1766560": "Erebus crepuscularis", + "1766570": "Erebus ephesperis", + "1766584": "Erebus albicincta", + "1766601": "Erebus gemmans", + "1766612": "Erebus walkeri", + "1766618": "Erebus hieroglyphica", + "1766624": "Anaplectoides", + "1766646": "Anaplectoides prasina", + "1766650": "Anaplectoides pressus", + "1766671": "Epidromia", + "1766708": "Chersotis", + "1766718": "Chersotis ocellina", + "1766721": "Chersotis margaritacea", + "1766741": "Chersotis cuprea", + "1766773": "Chersotis rectangula", + "1766784": "Chersotis fimbriola", + "1766814": "Chersotis multangula", + "1766838": "Litoprosopus", + "1766839": "Litoprosopus coachella", + "1766845": "Litoprosopus futilis", + "1766874": "Coxina", + "1766880": "Coxina cinctipalpis", + "1766883": "Singara", + "1766888": "Singara diversalis", + "1766892": "Pseudogyrtona fulvana", + "1766908": "Yepcalphis", + "1766910": "Yepcalphis dilectissima", + "1766914": "Pleromelloida", + "1766917": "Pleromelloida bonuscula", + "1766919": "Pleromelloida conserta", + "1766921": "Pleromelloida cinerea", + "1767029": "Litocala", + "1767031": "Litocala sexsignata", + "1767032": "Cymatophoropsis", + "1767044": "Cymatophoropsis formosana", + "1767046": "Magusa", + "1767052": "Magusa divaricata", + "1767093": "Chytonix", + "1767134": "Chytonix variegata", + "1767140": "Chytonix sensilis", + "1767142": "Chytonix palliatricula", + "1767210": "Axiocteta", + "1767215": "Axiocteta oenoplex", + "1767259": "Autoba dispar", + "1767293": "Autoba tristalis", + "1767302": "Autoba gayneri", + "1767304": "Bulia", + "1767307": "Bulia confirmans", + "1767320": "Bulia deducta", + "1767334": "Homorthodes", + "1767335": "Homorthodes communis", + "1767336": "Homorthodes furfurata", + "1767337": "Homorthodes fractura", + "1767338": "Homorthodes lindseyi", + "1767347": "Homorthodes hanhami", + "1767360": "Maliattha", + "1767368": "Maliattha signifera", + "1767381": "Maliattha amorpha", + "1767393": "Maliattha separata", + "1767430": "Maliattha ritsemae", + "1767483": "Cerma", + "1767484": "Cerma cora", + "1767496": "Ramphia", + "1767499": "Ramphia albizona", + "1767504": "Palpidia", + "1767508": "Palpidia pallidior", + "1767509": "Protoschinia", + "1767511": "Protoschinia scutosa", + "1767514": "Helia", + "1767566": "Bagisara", + "1767571": "Bagisara repanda", + "1767579": "Bagisara rectifascia", + "1767584": "Bagisara buxea", + "1767590": "Abrostola", + "1767597": "Abrostola triplasia", + "1767602": "Abrostola urentis", + "1767608": "Abrostola asclepiadis", + "1767612": "Abrostola microvalis", + "1767625": "Abrostola tripartita", + "1767628": "Abrostola ovalis", + "1767644": "Mythimna", + "1767655": "Mythimna turca", + "1767674": "Mythimna prominens", + "1767714": "Abacena", + "1767719": "Abacena mundula", + "1767752": "Episparis", + "1767755": "Episparis taiwana", + "1767758": "Episparis costistriga", + "1767779": "Episparis liturata", + "1767780": "Episparis tortuosalis", + "1767796": "Cyclodes", + "1767878": "Rhesala", + "1767883": "Rhesala moestalis", + "1767949": "Heraclia", + "1768042": "Heraclia africana", + "1768048": "Heraclia superba", + "1768106": "Macdunnoughia", + "1768117": "Macdunnoughia confusa", + "1768130": "Macronoctua", + "1768132": "Macronoctua onusta", + "1768136": "Xylocampa", + "1768150": "Xylocampa areola", + "1768165": "Cirrhophanus", + "1768172": "Cirrhophanus triangulifer", + "1768174": "Cirrhophanus dyari", + "1768190": "Arrade destituta", + "1768196": "Agnorisma bollii", + "1768199": "Agnorisma badinodis", + "1768201": "Agnorisma bugrai", + "1768212": "Rhanidophora phedonia", + "1768222": "Calamia", + "1768281": "Latebraria", + "1768283": "Latebraria amphipyroides", + "1768302": "Gortyna", + "1768308": "Gortyna borelii", + "1768341": "Gortyna flavago", + "1768411": "Thalpophila", + "1768432": "Hyperlopha", + "1768440": "Hyperlopha compactilis", + "1768459": "Chalciope delta", + "1768461": "Chalciope mygdon", + "1768462": "Chalciope alcyona", + "1768542": "Physetica", + "1768546": "Physetica sequens", + "1768554": "Physetica cucullina", + "1768557": "Physetica phricias", + "1768560": "Physetica caerulea", + "1768561": "Busseola", + "1768568": "Busseola submarginalis", + "1768579": "Artena", + "1768626": "Raparna conicephala", + "1768630": "Raparna crocophara", + "1768691": "Conistra", + "1768698": "Conistra albipuncta", + "1768702": "Conistra vaccinii", + "1768727": "Conistra staudingeri", + "1768729": "Conistra ligula", + "1768735": "Conistra torrida", + "1768741": "Conistra daubei", + "1768749": "Conistra rubiginosa", + "1768771": "Conistra rubiginea", + "1768815": "Conistra erythrocephala", + "1768819": "Conistra veronicae", + "1768896": "Ramadasa", + "1768898": "Ramadasa pavo", + "1768949": "Euplexidia", + "1768971": "Eutrichopidia", + "1768972": "Eutrichopidia latinus", + "1768999": "Elousa", + "1769000": "Elousa mima", + "1769008": "Acosmetia", + "1769024": "Lophoterges", + "1769029": "Lophoterges millierei", + "1769051": "Dasypolia", + "1769057": "Dasypolia templi", + "1769093": "Zonoplusia", + "1769095": "Zonoplusia ochreata", + "1769098": "Laspeyria", + "1769103": "Laspeyria flexula", + "1769110": "Prometopus", + "1769114": "Prometopus inassueta", + "1769165": "Euplocia", + "1769168": "Euplocia membliaria", + "1769189": "Diphtherocome", + "1769194": "Diphtherocome abbreviata", + "1769208": "Ipanica", + "1769209": "Ipanica cornigera", + "1769212": "Proteuxoa", + "1769225": "Proteuxoa restituta", + "1769245": "Proteuxoa chrysospila", + "1769250": "Proteuxoa capularis", + "1769260": "Proteuxoa tortisigna", + "1769271": "Proteuxoa porphyrescens", + "1769272": "Proteuxoa cinereicollis", + "1769283": "Proteuxoa bistrigula", + "1769293": "Proteuxoa tibiata", + "1769294": "Proteuxoa testaceicollis", + "1769298": "Proteuxoa nuna", + "1769302": "Proteuxoa comma", + "1769308": "Proteuxoa hydraecioides", + "1769310": "Proteuxoa amaurodes", + "1769311": "Crithote", + "1769330": "Phyprosopus", + "1769336": "Phyprosopus callitrichoides", + "1769393": "Tamba", + "1769410": "Tamba costinotata", + "1769425": "Tamba apicata", + "1769465": "Tamba lala", + "1769504": "Cosmia", + "1769505": "Cosmia pyralina", + "1769519": "Cosmia affinis", + "1769543": "Cosmia diffinis", + "1769566": "Cosmia trapezina", + "1769592": "Cosmia calami", + "1769735": "Hypopyra", + "1769737": "Hypopyra ossigera", + "1769739": "Hypopyra capensis", + "1769772": "Hypopyra vespertilio", + "1769812": "Copanarta", + "1769814": "Copanarta aurea", + "1769819": "Rivula", + "1769823": "Rivula striatura", + "1769827": "Rivula basalis", + "1769840": "Rivula cognata", + "1769841": "Rivula propinqualis", + "1769852": "Rivula niveipuncta", + "1769897": "Rivula sericealis", + "1769901": "Rivula aequalis", + "1769933": "Triocnemis", + "1769934": "Triocnemis saporis", + "1769943": "Rileyiana", + "1769944": "Rileyiana fovea", + "1769945": "Eurois", + "1769947": "Eurois astricta", + "1769958": "Eurois occulta", + "1769972": "Xenotrachea", + "1769978": "Xenotrachea albidisca", + "1770011": "Gonodonta", + "1770038": "Gonodonta sinaldus", + "1770044": "Gonodonta pyrgo", + "1770123": "Enargia", + "1770132": "Enargia infumata", + "1770144": "Enargia decolor", + "1770150": "Enargia paleacea", + "1770169": "Rhynchaglaea", + "1770172": "Rhynchaglaea scitula", + "1770260": "Pyrgion", + "1770263": "Pyrgion repanda", + "1770274": "Luperina", + "1770307": "Luperina testacea", + "1770353": "Luperina dumerilii", + "1770379": "Cutina", + "1770380": "Cutina arcuata", + "1770383": "Cutina albopunctella", + "1770384": "Cutina distincta", + "1770385": "Cutina aluticolor", + "1770396": "Ochropleura", + "1770416": "Ochropleura leucogaster", + "1770461": "Ochropleura implecta", + "1770477": "Ochropleura plecta", + "1770488": "Euchalcia", + "1770530": "Euchalcia variabilis", + "1770569": "Sedina", + "1770573": "Sedina buettneri", + "1770592": "Eucarta", + "1770658": "Metaponpneumata", + "1770659": "Metaponpneumata rogenhoferi", + "1770772": "Agrotis puta", + "1770773": "Agrotis simplonia", + "1770821": "Agrotis trux", + "1770828": "Agrotis gladiaria", + "1770849": "Agrotis infusa", + "1770869": "Agrotis cinerea", + "1770880": "Agrotis vestigialis", + "1770918": "Agrotis venerabilis", + "1770955": "Agrotis malefida", + "1771019": "Agrotis vancouverensis", + "1771040": "Agrotis segetum", + "1771055": "Agrotis volubilis", + "1771067": "Agrotis vetusta", + "1771143": "Agrotis lata", + "1771169": "Agrotis fatidica", + "1771203": "Agrotis porphyricollis", + "1771204": "Agrotis ripae", + "1771214": "Agrotis exclamationis", + "1771245": "Agrotis ipsilon", + "1771296": "Agrotis munda", + "1771308": "Agrotis interjectionis", + "1771356": "Heterorta", + "1771357": "Heterorta plutonis", + "1771363": "Amphipoea", + "1771385": "Amphipoea oculea", + "1771391": "Amphipoea crinanensis", + "1771441": "Amphipoea americana", + "1771448": "Cissusa", + "1771454": "Ctenusa", + "1771455": "Ctenusa pallida", + "1771501": "Tholera", + "1771509": "Tholera decimalis", + "1771531": "Tholera cespitis", + "1771541": "Hypersypnoides", + "1771549": "Plusiopalpa", + "1771555": "Plusiopalpa adrasta", + "1771562": "Drasteria", + "1771634": "Xanthia gilvago", + "1771650": "Xanthia ocellaris", + "1771675": "Xanthia rectilineata", + "1771678": "Xanthia icteritia", + "1771698": "Xanthia togata", + "1771772": "Polypogon tentacularia", + "1771779": "Polypogon gryphalis", + "1771838": "Cephena", + "1771839": "Cephena costata", + "1771845": "Hypsoropha", + "1771846": "Hypsoropha monilis", + "1771848": "Hypsoropha hormos", + "1771850": "Metallata", + "1771859": "Metallata absumens", + "1771866": "Olivenebula", + "1771871": "Eosphoropteryx", + "1771872": "Eosphoropteryx thyatyroides", + "1771881": "Chlumetia", + "1771903": "Chlumetia transversa", + "1771972": "Tinolius", + "1771975": "Tinolius hypsana", + "1771977": "Tinolius eburneigutta", + "1771980": "Sympistis", + "1771997": "Sympistis zetterstedti", + "1772013": "Sympistis heliophila", + "1772042": "Pseudeva", + "1772043": "Pseudeva purpurigera", + "1772053": "Thysania", + "1772092": "Xylostola", + "1772094": "Xylostola indistincta", + "1772151": "Narangodes", + "1772155": "Plusia", + "1772169": "Plusia putnami", + "1772179": "Plusia festucae", + "1772253": "Recoropha", + "1772255": "Recoropha canteneri", + "1772259": "Spiloloma", + "1772260": "Spiloloma lunilinea", + "1772349": "Sphingomorpha", + "1772352": "Sphingomorpha chlorea", + "1772359": "Lamprotes", + "1772374": "Cortyta canescens", + "1772421": "Psectraglaea", + "1772422": "Psectraglaea carnosa", + "1772425": "Spargaloma", + "1772427": "Spargaloma perditalis", + "1772428": "Spargaloma sexpunctata", + "1772445": "Cometaster", + "1772447": "Cometaster pyrula", + "1772455": "Xylomoia", + "1772462": "Xylomoia chagnoni", + "1772540": "Prionopterina", + "1772543": "Prionopterina grammatistis", + "1772660": "Neumichtis", + "1772668": "Neumichtis saliaris", + "1772688": "Prionofrontia", + "1772689": "Prionofrontia strigata", + "1772714": "Phalaenostola", + "1772716": "Phalaenostola larentioides", + "1772783": "Pechipogo", + "1772793": "Pechipogo strigilata", + "1772822": "Zethes insularis", + "1772826": "Plecoptera", + "1772926": "Euxoa", + "1772940": "Euxoa tritici", + "1772954": "Euxoa scandens", + "1772956": "Euxoa obelisca", + "1772977": "Euxoa ochrogaster", + "1773002": "Euxoa divergens", + "1773062": "Euxoa decora", + "1773069": "Euxoa obeliscoides", + "1773081": "Euxoa albipennis", + "1773163": "Euxoa nigricans", + "1773231": "Euxoa vitta", + "1773248": "Euxoa velleripennis", + "1773309": "Euxoa cursoria", + "1773313": "Euxoa tessellata", + "1773315": "Euxoa bostoniensis", + "1773328": "Euxoa recussa", + "1773377": "Euxoa culminicola", + "1773484": "Euxoa aquilina", + "1773510": "Euxoa pluralis", + "1773572": "Euxoa eruta", + "1773577": "Euxoa detersa", + "1773662": "Euxoa comosa", + "1773677": "Euxoa hollemani", + "1773728": "Euxoa messoria", + "1773740": "Psaphida", + "1773742": "Psaphida resumens", + "1773743": "Psaphida thaxterianus", + "1773744": "Psaphida grotei", + "1773746": "Psaphida electilis", + "1773781": "Chamaeclea", + "1773783": "Chamaeclea basiochrea", + "1773784": "Chamaeclea pernana", + "1773846": "Properigea", + "1773901": "Yigoga forcipula", + "1773904": "Yigoga signifera", + "1773983": "Allotria", + "1774068": "Heterormista", + "1774069": "Heterormista modesta", + "1774090": "Fishia", + "1774092": "Fishia discors", + "1774095": "Fishia yosemitae", + "1774237": "Neumoegenia", + "1774243": "Neumoegenia poetica", + "1774251": "Epiglaea", + "1774253": "Epiglaea apiata", + "1774254": "Epiglaea decliva", + "1774256": "Orthodes", + "1774262": "Orthodes cynica", + "1774268": "Orthodes furtiva", + "1774269": "Epimecia", + "1774272": "Epimecia ustula", + "1774283": "Valeria jaspidea", + "1774285": "Valeria oleagina", + "1774309": "Spaelotis", + "1774314": "Spaelotis clandestina", + "1774347": "Spaelotis ravida", + "1774357": "Cerathosia", + "1774358": "Cerathosia tricolor", + "1774366": "Eustrotia", + "1774470": "Eustrotia decissima", + "1774573": "Pilipectus", + "1774575": "Pilipectus taiwanus", + "1774576": "Pilipectus prunifera", + "1774583": "Asota egens", + "1774598": "Asota heliconia", + "1774600": "Asota speciosa", + "1774604": "Asota orbona", + "1774618": "Asota plana", + "1774626": "Asota ficus", + "1774635": "Asota producta", + "1774640": "Asota tortuosa", + "1774654": "Asota caricae", + "1774661": "Asota plaginota", + "1774682": "Asota canaraica", + "1774691": "Asota plagiata", + "1774702": "Asota subsimilis", + "1774712": "Asota iodamia", + "1774778": "Amyna", + "1774792": "Amyna bullula", + "1774797": "Amyna punctum", + "1774826": "Calesia zambesita", + "1774829": "Calesia dasyptera", + "1774846": "Ceroctena", + "1774853": "Cleonymia", + "1774859": "Cleonymia baetica", + "1774873": "Cleonymia diffluens", + "1774878": "Cleonymia yvanii", + "1774906": "Aon", + "1774907": "Aon noctuiformis", + "1774917": "Apina", + "1774918": "Apina callisto", + "1774929": "Gonodes liquida", + "1774940": "Paradelta", + "1774947": "Pseudenargia", + "1774959": "Pseudenargia ulicis", + "1774997": "Ugia purpurea", + "1775029": "Aseptis", + "1775046": "Aseptis adnixa", + "1775055": "Aseptis binotata", + "1775058": "Dasygaster", + "1775081": "Sideridis", + "1775089": "Sideridis maryx", + "1775112": "Sideridis lampra", + "1775118": "Sideridis rosea", + "1775144": "Caduca", + "1775148": "Caduca albopunctata", + "1775149": "Dichonia", + "1775172": "Dichonia convergens", + "1775234": "Gesonia", + "1775275": "Eremochroa", + "1775279": "Eremochroa alphitias", + "1775285": "Meropleon", + "1775290": "Meropleon diversicolor", + "1775291": "Meropleon ambifusca", + "1775298": "Amephana", + "1775299": "Amephana anarrhini", + "1775301": "Amephana aurita", + "1775310": "Leucochlaena", + "1775329": "Leucochlaena oditis", + "1775505": "Basilodes", + "1775508": "Basilodes pepita", + "1775509": "Basilodes chrysopis", + "1775624": "Hypoperigea", + "1775631": "Hypoperigea tonsa", + "1775633": "Ammoconia", + "1775663": "Annaphila", + "1775672": "Annaphila diva", + "1775680": "Annaphila decia", + "1775759": "Audea", + "1775784": "Hypocoena", + "1775791": "Hypocoena inquinata", + "1775796": "Ascalapha odorata", + "1775833": "Hadula", + "1775864": "Behrensia", + "1775866": "Behrensia conchiformis", + "1775887": "Coenobia", + "1775891": "Coenobia rufa", + "1775910": "Allophyes", + "1775913": "Allophyes alfaroi", + "1775959": "Daseochaeta", + "1775962": "Daseochaeta viridis", + "1775963": "Daseochaeta pulchra", + "1775969": "Sericaglaea", + "1775970": "Sericaglaea signata", + "1775975": "Euparthenos", + "1775980": "Euparthenos nubilis", + "1775986": "Blepharita", + "1776067": "Blepharita amica", + "1776094": "Alypiodes bimaculata", + "1776158": "Calydia", + "1776163": "Calydia osseata", + "1776166": "Lemmeria", + "1776167": "Lemmeria digitalis", + "1776168": "Eremobia", + "1776181": "Feredayia", + "1776182": "Feredayia grammosa", + "1776205": "Scotochrosta", + "1776207": "Scotochrosta pulla", + "1776246": "Cyligramma", + "1776265": "Cyligramma fluctuosa", + "1776268": "Cyligramma latona", + "1776299": "Polia", + "1776330": "Polia nebulosa", + "1776371": "Polia bombycina", + "1776391": "Andropolia", + "1776397": "Andropolia theodori", + "1776406": "Andropolia aedon", + "1776413": "Eremobina", + "1776415": "Eremobina claudens", + "1776454": "Alypia", + "1776459": "Alypia maccullochii", + "1776462": "Alypia langtonii", + "1776467": "Alypia disparata", + "1776470": "Alypia wittfeldii", + "1776472": "Alypia mariposa", + "1776473": "Alypia ridingsii", + "1776476": "Alypia octomaculata", + "1776498": "Anisoneura", + "1776576": "Euplexia", + "1776618": "Euplexia benesimilis", + "1776619": "Euplexia lucipara", + "1776846": "Dypterygia", + "1776861": "Dypterygia patina", + "1776862": "Dypterygia scabriuscula", + "1776871": "Dypterygia rozmani", + "1776879": "Fagitana", + "1776880": "Fagitana littera", + "1776978": "Celaena", + "1777014": "Metalectra", + "1777024": "Metalectra richardsi", + "1777034": "Metalectra diabolica", + "1777052": "Metalectra discalis", + "1777075": "Metalectra quadrisignata", + "1777101": "Ectopatria", + "1777120": "Ectopatria horologa", + "1777137": "Miodera", + "1777139": "Miodera stigmata", + "1777140": "Sigela", + "1777156": "Oxyodes", + "1777165": "Oxyodes tricolor", + "1777166": "Oxyodes scrobiculata", + "1777174": "Panula", + "1777179": "Panula inconstans", + "1777243": "Diloba", + "1777253": "Diloba caeruleocephala", + "1777260": "Aplectoides", + "1777261": "Aplectoides condita", + "1777277": "Autophila", + "1777289": "Autophila dilucida", + "1777463": "Eutelia furcata", + "1777471": "Eutelia pulcherrimus", + "1777500": "Eutelia affinis", + "1777517": "Eutelia adulatrix", + "1777560": "Oria", + "1777629": "Calyptra", + "1777631": "Calyptra thalictri", + "1777692": "Arytrura", + "1777695": "Arytrura musculus", + "1777724": "Xanthopastis", + "1777727": "Xanthopastis timais", + "1777728": "Xanthopastis moctezuma", + "1777730": "Xanthopastis regnatrix", + "1777734": "Azeta", + "1777737": "Azeta rhodogaster", + "1777760": "Gerrodes", + "1777863": "Buzara", + "1777868": "Cerastis", + "1777907": "Cidariplura", + "1777925": "Anticarsia", + "1777942": "Anticarsia gemmatalis", + "1777971": "Papaipema", + "1777974": "Papaipema appassionata", + "1777976": "Papaipema impecuniosa", + "1777980": "Papaipema insulidens", + "1777982": "Papaipema rigida", + "1777994": "Papaipema cataphracta", + "1777996": "Papaipema speciosissima", + "1778000": "Papaipema unimoda", + "1778006": "Papaipema lysimachiae", + "1778007": "Papaipema nepheleptena", + "1778013": "Papaipema arctivorens", + "1778015": "Papaipema inquaesita", + "1778024": "Papaipema furcata", + "1778031": "Papaipema nebris", + "1778033": "Papaipema baptisiae", + "1778034": "Papaipema eupatorii", + "1778037": "Papaipema cerussata", + "1778045": "Papaipema pterisii", + "1778049": "Papaipema nelita", + "1778073": "Charanyca", + "1778074": "Charanyca trigrammica", + "1778103": "Lepidodes", + "1778108": "Flammona", + "1778109": "Flammona trilineata", + "1778114": "Senta", + "1778127": "Senta flammea", + "1778136": "Eugraphe", + "1778143": "Eugraphe sigma", + "1778156": "Sinarella", + "1778332": "Hexorthodes", + "1778337": "Hexorthodes serrata", + "1778406": "Plecopterodes", + "1778430": "Plecopterodes moderata", + "1778497": "Standfussiana", + "1778517": "Standfussiana lucernea", + "1778524": "Standfussiana wiskotti", + "1778527": "Exyra", + "1778534": "Exyra semicrocea", + "1778544": "Argyrostrotis", + "1778548": "Argyrostrotis quadrifilaris", + "1778549": "Argyrostrotis sylvarum", + "1778551": "Argyrostrotis deleta", + "1778555": "Argyrostrotis anilis", + "1778574": "Chilodes", + "1778596": "Chilodes maritima", + "1778600": "Phyllodes", + "1778626": "Simplicia", + "1778686": "Zosteropoda", + "1778688": "Zosteropoda hirtipes", + "1778695": "Leucania", + "1779253": "Araeopteron", + "1779258": "Araeopteron ecphaea", + "1779269": "Araeopteron epiphracta", + "1779276": "Araeopteron canescens", + "1779334": "Naenia typica", + "1779380": "Lophocalama", + "1779382": "Lophocalama neuritis", + "1779398": "Apopestes", + "1779399": "Apopestes spectrum", + "1779429": "Brachionycha", + "1779430": "Brachionycha borealis", + "1779435": "Brachionycha nubeculosa", + "1779445": "Batracharta", + "1779456": "Batracharta divisa", + "1779611": "Hadennia", + "1779630": "Pyrrhia", + "1779633": "Pyrrhia exprimens", + "1779641": "Pyrrhia umbra", + "1779643": "Pyrrhia cilisca", + "1779666": "Elaphristis", + "1779671": "Elaphristis psoloessa", + "1779682": "Brachylomia", + "1779690": "Brachylomia viminalis", + "1779709": "Brachylomia populi", + "1779713": "Brachylomia algens", + "1779739": "Bendisodes", + "1779740": "Bendisodes aeolia", + "1779957": "Litholomia", + "1779959": "Litholomia napaea", + "1780042": "Vietteania", + "1780049": "Vietteania intestata", + "1780068": "Comocrus", + "1780072": "Comocrus behri", + "1780139": "Parascotia", + "1780149": "Parascotia nisseni", + "1780150": "Parascotia fuliginaria", + "1780194": "Hepatica", + "1780207": "Ulolonche", + "1780209": "Ulolonche orbiculata", + "1780213": "Ulolonche modesta", + "1780214": "Ulolonche disticha", + "1780215": "Ulolonche culea", + "1780269": "Heliolonche", + "1780272": "Heliolonche pictipennis", + "1780287": "Anachrostis marginata", + "1780300": "Elaphria", + "1780309": "Elaphria chalcedonia", + "1780313": "Elaphria georgei", + "1780326": "Elaphria fuscimacula", + "1780330": "Elaphria nucicolora", + "1780344": "Elaphria versicolor", + "1780378": "Elaphria venustula", + "1780390": "Elaphria agrotina", + "1780407": "Elaphria subobliqua", + "1780414": "Elaphria festivoides", + "1780437": "Elaphria grata", + "1780440": "Elaphria deltoides", + "1780450": "Elaphria exesa", + "1780615": "Paectes", + "1780617": "Paectes pygmaea", + "1780646": "Paectes abrostoloides", + "1780668": "Paectes oculatrix", + "1780676": "Paectes abrostolella", + "1780700": "Ischyja", + "1780705": "Ischyja ferrifracta", + "1780716": "Ischyja manlia", + "1780844": "Eucoptocnemis", + "1780852": "Eucoptocnemis fimbriaris", + "1780855": "Rhapsa", + "1780856": "Rhapsa suscitatalis", + "1780857": "Rhapsa scotosialis", + "1780860": "Rhapsa eretmophora", + "1780861": "Amphiongia", + "1780862": "Amphiongia chordophoides", + "1780869": "Cerocala scapulosa", + "1780897": "Cerocala vermiculosa", + "1780913": "Polymixis", + "1780926": "Polymixis flavicincta", + "1780928": "Polymixis dubia", + "1780954": "Polymixis xanthomista", + "1781008": "Polymixis polymita", + "1781016": "Polymixis rufocincta", + "1781027": "Hemeroplanis", + "1781029": "Hemeroplanis scopulepes", + "1781038": "Hemeroplanis parallela", + "1781044": "Glympis", + "1781086": "Abablemma", + "1781160": "Zotheca", + "1781226": "Telorta", + "1781233": "Telorta edentata", + "1781234": "Telorta divergens", + "1781248": "Sophta concavata", + "1781350": "Oglasa umbrosa", + "1781353": "Oglasa mediopallens", + "1781413": "Hypocala deflorata", + "1781420": "Hypocala andremona", + "1781421": "Hypocala subsatura", + "1781428": "Hypocala guttiventris", + "1781446": "Egnasia ephyrodalis", + "1781473": "Egnasia nagadeboides", + "1781503": "Pericyma mendax", + "1781531": "Pericyma cruegeri", + "1781546": "Elusa", + "1781598": "Britha biguttata", + "1781630": "Clytie", + "1781683": "Coenophila", + "1781692": "Coenophila opacifrons", + "1781694": "Coenophila subrosea", + "1781695": "Lithacodia", + "1781803": "Lithacodia postvittata", + "1781819": "Lithacodia musta", + "1781841": "Lithacodia formosana", + "1781924": "Palthis", + "1781944": "Palthis angulalis", + "1781946": "Palthis asopialis", + "1781971": "Renia", + "1782029": "Hormoschista", + "1782031": "Hormoschista latipalpis", + "1782041": "Doryodes", + "1782106": "Saroba", + "1782115": "Saroba pustulifera", + "1782167": "Sphragifera", + "1782168": "Sphragifera sigillata", + "1782177": "Sphragifera biplagiata", + "1782184": "Crioa", + "1782185": "Crioa acronyctoides", + "1782205": "Ptichodis", + "1782208": "Ptichodis herbarum", + "1782211": "Ptichodis basilans", + "1782214": "Ptichodis vinculum", + "1782249": "Cerynea discontenta", + "1782267": "Cerynea thermesialis", + "1782273": "Cerynea punctilinealis", + "1782277": "Cerynea trogobasis", + "1782279": "Cerynea ustula", + "1782289": "Cerynea igniaria", + "1782310": "Polypogon fractalis", + "1782317": "Atypha", + "1782319": "Atypha pulmonaris", + "1782325": "Sandava", + "1782326": "Sandava scitisignata", + "1782328": "Sandava xylistis", + "1782330": "Callyna", + "1782341": "Callyna jugaria", + "1782354": "Callyna monoleuca", + "1782414": "Cydosia", + "1782422": "Cydosia aurivitta", + "1782424": "Cydosia nobilitella", + "1782456": "Clavipalpula", + "1782457": "Clavipalpula aurariae", + "1782460": "Aucha", + "1782466": "Aucha vesta", + "1782507": "Tolpia conscitulana", + "1782522": "Choephora", + "1782523": "Choephora fungorum", + "1782524": "Phlogophora", + "1782542": "Phlogophora periculosa", + "1782543": "Phlogophora albovittata", + "1782560": "Phlogophora meticulosa", + "1782579": "Phlogophora scita", + "1782585": "Phlogophora iris", + "1782594": "Plagiomimicus", + "1782595": "Plagiomimicus pityochromus", + "1782607": "Ipimorpha", + "1782615": "Ipimorpha retusa", + "1782622": "Ipimorpha pleonectusa", + "1782627": "Ipimorpha subtusa", + "1782645": "Egybolis vaillantina", + "1782659": "Acronicta", + "1782672": "Acronicta rumicis", + "1782682": "Acronicta hasta", + "1782689": "Acronicta rubricoma", + "1782700": "Acronicta lepusculina", + "1782705": "Acronicta brumosa", + "1782706": "Acronicta clarescens", + "1782707": "Acronicta insita", + "1782708": "Acronicta perdita", + "1782709": "Acronicta superans", + "1782726": "Acronicta alni", + "1782727": "Acronicta euphorbiae", + "1782743": "Acronicta interrupta", + "1782744": "Acronicta retardata", + "1782745": "Acronicta grisea", + "1782747": "Acronicta ovata", + "1782757": "Acronicta pruinosa", + "1782762": "Acronicta betulae", + "1782763": "Acronicta aceris", + "1782776": "Acronicta increta", + "1782777": "Acronicta megacephala", + "1782803": "Acronicta vulpina", + "1782808": "Acronicta marmorata", + "1782809": "Acronicta radcliffei", + "1782819": "Acronicta mansueta", + "1782822": "Acronicta funeralis", + "1782826": "Acronicta dactylina", + "1782833": "Acronicta afflicta", + "1782837": "Acronicta vinnula", + "1782840": "Acronicta noctivaga", + "1782841": "Acronicta strigosa", + "1782853": "Acronicta innotata", + "1782870": "Acronicta tritona", + "1782871": "Acronicta fragilis", + "1782872": "Acronicta nervosa", + "1782878": "Acronicta tristis", + "1782921": "Acronicta morula", + "1782927": "Acronicta auricoma", + "1782928": "Acronicta modica", + "1782934": "Acronicta atristrigatus", + "1782948": "Acronicta psi", + "1782961": "Acronicta connecta", + "1782972": "Acronicta longa", + "1782978": "Acronicta impressa", + "1782993": "Acronicta lobeliae", + "1783002": "Acronicta lithospila", + "1783008": "Acronicta americana", + "1783013": "Acronicta impleta", + "1783016": "Acronicta tridens", + "1783035": "Acronicta tota", + "1783037": "Acronicta menyanthidis", + "1783043": "Acronicta leporina", + "1783045": "Acronicta cinerea", + "1783055": "Acronicta heitzmani", + "1783059": "Acronicta laetifica", + "1783087": "Ammopolia", + "1783090": "Ammopolia witzenmanni", + "1783166": "Tolpiodes", + "1783173": "Tolpiodes oligolasia", + "1783299": "Pseudosphetta", + "1783302": "Pseudosphetta moorei", + "1783311": "Thurberiphaga", + "1783313": "Thurberiphaga diffusa", + "1783337": "Dialithis", + "1783344": "Euscirrhopterus", + "1783363": "Pseudorgyia", + "1783365": "Pseudorgyia russula", + "1783367": "Trichordestra", + "1783371": "Trichordestra tacoma", + "1783372": "Trichordestra liquida", + "1783373": "Trichordestra lilacina", + "1783376": "Trichordestra prodeniformis", + "1783378": "Trichordestra legitima", + "1783394": "Xestia", + "1783651": "Metopta", + "1783652": "Metopta rectifasciata", + "1783713": "Bocula marginata", + "1783715": "Bocula odontosema", + "1783725": "Bocula diffisa", + "1783739": "Metopoceras", + "1783777": "Metopoceras felicina", + "1783783": "Cobubatha", + "1783811": "Cobubatha metaspilaris", + "1783838": "Leucocnemis", + "1783841": "Leucocnemis perfundis", + "1783842": "Leucocnemis nivalis", + "1783845": "Polychrysia", + "1783855": "Polychrysia moneta", + "1783861": "Polychrysia esmeralda", + "1783880": "Zebeeba", + "1783882": "Zebeeba falsalis", + "1783898": "Blasticorhinus ussuriensis", + "1783906": "Blasticorhinus rivulosa", + "1783931": "Sutyna", + "1783940": "Sutyna privata", + "1783955": "Meganephria", + "1783971": "Meganephria bimaculosa", + "1783988": "Lophotoma", + "1783991": "Lophotoma diagrapha", + "1784240": "Praxis", + "1784275": "Nocloa", + "1784276": "Nocloa pallens", + "1784278": "Nocloa cordova", + "1784281": "Nocloa rivulosa", + "1784282": "Nocloa alcandra", + "1784283": "Nocloa aliaga", + "1784342": "Cornutiplusia", + "1784349": "Cornutiplusia circumflexa", + "1784356": "Polyphaenis", + "1784359": "Polyphaenis sericata", + "1784395": "Ozarba", + "1784422": "Ozarba albocostaliata", + "1784461": "Ozarba aeria", + "1784513": "Ozarba punctigera", + "1784582": "Ozarba catilina", + "1784591": "Ozarba hemiochra", + "1784610": "Ozarba nebula", + "1784645": "Philogethes", + "1784646": "Philogethes metableta", + "1784686": "Psychomorpha", + "1784688": "Psychomorpha epimenis", + "1784696": "Argyrogramma", + "1784759": "Anadevidia", + "1784761": "Anadevidia peponis", + "1784776": "Sypna", + "1784804": "Sypna diversa", + "1784809": "Hoplodrina", + "1784812": "Hoplodrina respersa", + "1784824": "Hoplodrina superstes", + "1784826": "Hoplodrina blanda", + "1784853": "Hoplodrina ambigua", + "1784892": "Allagrapha", + "1784893": "Allagrapha aerea", + "1784936": "Anomis psamathodes", + "1784947": "Anomis fulvida", + "1784959": "Anomis illita", + "1785024": "Anomis erosa", + "1785072": "Anomis flava", + "1785105": "Anomis sabulifera", + "1785140": "Chrysodeixis", + "1785145": "Chrysodeixis eriosoma", + "1785149": "Chrysodeixis argentifera", + "1785162": "Chrysodeixis heberachis", + "1785166": "Chrysodeixis subsidens", + "1785168": "Chrysodeixis includens", + "1785181": "Chrysodeixis acuta", + "1785185": "Chrysodeixis chalcites", + "1785216": "Trissernis", + "1785217": "Trissernis prasinoscia", + "1785220": "Trissernis ochrochlora", + "1785279": "Chrysanympha", + "1785280": "Chrysanympha formosa", + "1785281": "Deltote", + "1785286": "Deltote bankiana", + "1785305": "Ctenoplusia", + "1785314": "Ctenoplusia albostriata", + "1785322": "Ctenoplusia adiaphora", + "1785329": "Ctenoplusia limbirena", + "1785331": "Ctenoplusia oxygramma", + "1785361": "Ctenoplusia accentifera", + "1785367": "Ctenoplusia agnata", + "1785398": "Pseudohermonassa", + "1785399": "Pseudohermonassa bicarnea", + "1785403": "Pseudohermonassa tenuicula", + "1785439": "Emarginea", + "1785448": "Autoplusia", + "1785462": "Autoplusia gammoides", + "1785723": "Clytoscopa", + "1785725": "Clytoscopa iorrhoda", + "1785726": "Feltia", + "1785728": "Feltia jaculifera", + "1785730": "Feltia tricosa", + "1785732": "Feltia herilis", + "1785733": "Feltia subgothica", + "1785742": "Peridrome", + "1785744": "Peridrome orbicularis", + "1785830": "Lopharthrum", + "1785832": "Lopharthrum comprimens", + "1785833": "Meterana", + "1785873": "Diachrysia", + "1785875": "Diachrysia balluca", + "1785883": "Diachrysia zosimi", + "1785886": "Diachrysia aereoides", + "1785887": "Diachrysia chryson", + "1785888": "Diachrysia chrysitis", + "1785895": "Diachrysia stenochrysis", + "1785909": "Panopoda", + "1785913": "Panopoda carneicosta", + "1785916": "Panopoda rufimargo", + "1785931": "Syngrapha", + "1785951": "Syngrapha epigaea", + "1785955": "Syngrapha viridisigma", + "1785964": "Syngrapha ignea", + "1785982": "Syngrapha celsa", + "1785992": "Syngrapha octoscripta", + "1785997": "Syngrapha rectangula", + "1786007": "Syngrapha diasema", + "1786017": "Syngrapha ain", + "1786031": "Metaxaglaea", + "1786035": "Metaxaglaea inulta", + "1786036": "Metaxaglaea viatica", + "1786134": "Rhynchina", + "1786190": "Rhynchina coniodes", + "1786211": "Hemeroblemma", + "1786217": "Hemeroblemma acron", + "1786219": "Hemeroblemma opigena", + "1786247": "Hemeroblemma mexicana", + "1786307": "Eutricopis", + "1786308": "Eutricopis nexilis", + "1786313": "Hamodes", + "1786317": "Hamodes propitia", + "1786329": "Trichoplusia", + "1786360": "Trichoplusia ni", + "1786447": "Dipterygina", + "1786448": "Dipterygina cupreotincta", + "1786452": "Dipterygina indica", + "1786454": "Pseudorthodes", + "1786455": "Pseudorthodes vecors", + "1786513": "Paradiarsia", + "1786514": "Paradiarsia littoralis", + "1786515": "Paradiarsia punicea", + "1786563": "Eueretagrotis", + "1786565": "Eueretagrotis sigmoides", + "1786566": "Eueretagrotis perattentus", + "1786567": "Eueretagrotis attentus", + "1786570": "Dyrzela", + "1786573": "Dyrzela plagiata", + "1786597": "Eudocima salaminia", + "1786601": "Episema", + "1786619": "Episema glaucina", + "1786651": "Episema tersa", + "1786658": "Episema grueneri", + "1786664": "Episema lederi", + "1786690": "Heminocloa", + "1786691": "Heminocloa mirabilis", + "1786710": "Rema", + "1786711": "Rema costimacula", + "1786730": "Hemieuxoa", + "1786733": "Hemieuxoa rudens", + "1786807": "Xerociris", + "1786808": "Xerociris wilsonii", + "1786859": "Adrapsa", + "1786886": "Antitype", + "1786902": "Antitype chi", + "1786909": "Redectis", + "1786912": "Redectis pygmaea", + "1786913": "Redectis vitrea", + "1786916": "Hemipachnobia", + "1786918": "Hemipachnobia monochromatea", + "1786930": "Epipsilia", + "1786936": "Epipsilia grisescens", + "1786955": "Grammodes", + "1786958": "Grammodes justa", + "1786980": "Grammodes stolida", + "1786984": "Grammodes latifera", + "1786985": "Grammodes bifasciata", + "1786990": "Grammodes oculicola", + "1787003": "Grammodes pulcherrima", + "1787009": "Grammodes geometrica", + "1787010": "Grammodes ocellata", + "1787011": "Edessena", + "1787061": "Epilecta", + "1787064": "Epilecta linogrisea", + "1787072": "Hypena trigonalis", + "1787079": "Hypena sagitta", + "1787090": "Hypena quinqualis", + "1787105": "Capis", + "1787106": "Capis curvata", + "1787107": "Athetis", + "1787112": "Athetis pallustris", + "1787165": "Athetis tenuis", + "1787185": "Athetis maculatra", + "1787213": "Athetis gluteosa", + "1787226": "Athetis reclusa", + "1787264": "Athetis leuconephra", + "1787267": "Athetis lepigone", + "1787279": "Athetis hospes", + "1787367": "Athetis bremusa", + "1787373": "Athetis erigida", + "1787381": "Athetis furvula", + "1787399": "Mesogona", + "1787400": "Mesogona oxalina", + "1787417": "Mesogona acetosellae", + "1787427": "Galgula", + "1787438": "Galgula partita", + "1787452": "Perasia", + "1787464": "Perasia garnoti", + "1787496": "Actebia", + "1787504": "Actebia praecox", + "1787506": "Actebia fennica", + "1787522": "Hadena", + "1787590": "Hadena compta", + "1787610": "Hadena perplexa", + "1787631": "Hadena irregularis", + "1787697": "Hadena caesia", + "1787751": "Hadena albimacula", + "1787770": "Hadena confusa", + "1787825": "Hadena magnolii", + "1787841": "Hadena capsincola", + "1787859": "Hadena bicruris", + "1787905": "Hadena sancta", + "1787996": "Goniapteryx", + "1788033": "Adelphagrotis", + "1788034": "Adelphagrotis stellaris", + "1788037": "Adelphagrotis indeterminata", + "1788044": "Eutrogia", + "1788045": "Eutrogia morosa", + "1788051": "Tricholita", + "1788063": "Tricholita signata", + "1788069": "Harrisimemna", + "1788070": "Harrisimemna trisignata", + "1788100": "Ophisma", + "1788138": "Leuconycta", + "1788139": "Leuconycta diphteroides", + "1788243": "Gabara", + "1788278": "Gabara subnivosella", + "1788312": "Syllectra", + "1788322": "Leucogonia", + "1788326": "Letis", + "1788372": "Letis specularis", + "1788411": "Mesapamea", + "1788425": "Mesapamea secalis", + "1788466": "Mamestra", + "1788485": "Mamestra configurata", + "1788522": "Mamestra brassicae", + "1788535": "Ophiusa", + "1788553": "Ophiusa tirhaca", + "1788635": "Catephia alchymista", + "1788663": "Ogdoconta", + "1788673": "Ogdoconta cinereola", + "1788677": "Ogdoconta tacna", + "1788678": "Pyreferra", + "1788679": "Pyreferra pettiti", + "1788680": "Pyreferra hesperidago", + "1788681": "Pyreferra citrombra", + "1788711": "Hyperstrotia pervertens", + "1788717": "Hyperstrotia nana", + "1788719": "Homophoberia", + "1788720": "Homophoberia cristata", + "1788724": "Aegle", + "1788734": "Aegle vespertinalis", + "1788764": "Conisania", + "1788807": "Anigraea", + "1788813": "Anigraea homochroa", + "1788844": "Metaemene", + "1788846": "Metaemene hampsoni", + "1788856": "Metaemene atrigutta", + "1788860": "Plusiodonta", + "1788881": "Plusiodonta arctipennis", + "1788891": "Plusiodonta compressipalpis", + "1788916": "Papestra", + "1788917": "Papestra biren", + "1788929": "Papestra quadrata", + "1788941": "Spirama", + "1788953": "Spirama retorta", + "1788986": "Spirama recessa", + "1789056": "Calliodes", + "1789057": "Calliodes pretiosissima", + "1789061": "Hecatera", + "1789071": "Hecatera cappa", + "1789073": "Hecatera weissi", + "1789076": "Hecatera dysodea", + "1789086": "Hecatera bicolorata", + "1789150": "Platypolia", + "1789155": "Platypolia anceps", + "1789189": "Caenurgina", + "1789190": "Caenurgina caerulea", + "1789191": "Caenurgina crassiuscula", + "1789193": "Caenurgina erechtea", + "1789210": "Xystopeplus", + "1789212": "Xystopeplus rufago", + "1789222": "Erygia", + "1789225": "Erygia apicalis", + "1789246": "Dryobotodes", + "1789250": "Dryobotodes monochroma", + "1789255": "Dryobotodes tenebrosa", + "1789267": "Dryobotodes eremita", + "1789286": "Dichagyris", + "1789403": "Dichagyris nigrescens", + "1789407": "Anoba", + "1789474": "Stilbia", + "1789481": "Stilbia anomala", + "1789491": "Stilbia philopalis", + "1789493": "Gracilodes", + "1789498": "Gracilodes caffra", + "1789503": "Xylotype", + "1789505": "Xylotype arcadia", + "1789512": "Hyposada fasciosa", + "1789530": "Hyposada hydrocampata", + "1789545": "Anarta", + "1789553": "Anarta melanopa", + "1789580": "Anarta myrtilli", + "1789602": "Prolophota", + "1789604": "Prolophota trigonifera", + "1789628": "Holocryptis", + "1789637": "Holocryptis phasianura", + "1789643": "Alophosoma", + "1789671": "Noctua", + "1789694": "Noctua interjecta", + "1789695": "Noctua pronuba", + "1789730": "Noctua comes", + "1789745": "Noctua fimbriata", + "1789753": "Noctua interposita", + "1789755": "Noctua orbona", + "1789783": "Noctua janthina", + "1789785": "Noctua janthe", + "1789793": "Polydesma", + "1789794": "Polydesma boarmoides", + "1789805": "Polydesma umbricola", + "1789826": "Archanara", + "1789840": "Archanara neurica", + "1789849": "Archanara dissoluta", + "1789953": "Brithys", + "1789957": "Brithys crini", + "1789978": "Agrochola", + "1789982": "Agrochola litura", + "1789984": "Agrochola blidaensis", + "1790002": "Agrochola helvola", + "1790013": "Agrochola bicolorago", + "1790023": "Agrochola haematidea", + "1790059": "Agrochola pistacinoides", + "1790062": "Agrochola nitida", + "1790072": "Agrochola macilenta", + "1790084": "Agrochola lota", + "1790151": "Agrochola decipiens", + "1790153": "Agrochola humilis", + "1790160": "Agrochola circellaris", + "1790228": "Melipotis", + "1790230": "Melipotis cellaris", + "1790240": "Melipotis acontioides", + "1790246": "Melipotis fasciolaris", + "1790248": "Melipotis famelica", + "1790257": "Melipotis indomita", + "1790258": "Melipotis jucunda", + "1790268": "Melipotis novanda", + "1790274": "Melipotis agrotoides", + "1790281": "Melipotis nigrobasis", + "1790287": "Melipotis perpendicularis", + "1790308": "Melipotis ochrodes", + "1790322": "Melanomma", + "1790328": "Carsina", + "1790331": "Carsina kanshireiensis", + "1790337": "Stiria", + "1790339": "Stiria dyari", + "1790343": "Stiria rugifrons", + "1790356": "Xylena", + "1790359": "Xylena thoracica", + "1790361": "Xylena vetusta", + "1790362": "Xylena cineritia", + "1790364": "Xylena exsoleta", + "1790369": "Xylena nupera", + "1790371": "Xylena curvimacula", + "1790376": "Xylena formosa", + "1790449": "Alapadna", + "1790450": "Alapadna pauropis", + "1790601": "Rhyacia", + "1790625": "Rhyacia simulans", + "1790671": "Rhyacia helvetina", + "1790683": "Tyta", + "1790692": "Tyta luctuosa", + "1790726": "Perigea", + "1790737": "Perigea xanthioides", + "1790784": "Tyrissa", + "1790787": "Tyrissa multilinea", + "1790791": "Mormoscopa", + "1790794": "Minucia", + "1790816": "Minucia lunaris", + "1790829": "Phaeolita", + "1790832": "Phaeolita pyramusalis", + "1790837": "Polygrammate", + "1790850": "Corgatha", + "1790876": "Corgatha tornalis", + "1790888": "Corgatha dictaria", + "1790900": "Corgatha dichionistis", + "1790910": "Corgatha figuralis", + "1790931": "Isogona", + "1790937": "Isogona texana", + "1790945": "Isogona tenuis", + "1790999": "Zurobata", + "1791010": "Zurobata vacillans", + "1791037": "Heterogramma", + "1791093": "Perciana", + "1791094": "Perciana taiwana", + "1791097": "Perciana marmorea", + "1791147": "Focillidia", + "1791151": "Focillidia texana", + "1791152": "Diomea", + "1791180": "Zale", + "1791315": "Hampsonodes", + "1791331": "Hampsonodes mastoides", + "1791371": "Eubolina", + "1791372": "Eubolina impartialis", + "1791378": "Eudesmeola", + "1791379": "Eudesmeola lawsoni", + "1791382": "Craniophora", + "1791384": "Craniophora pontica", + "1791422": "Craniophora ligustri", + "1791497": "Neochera", + "1791514": "Neochera dominia", + "1791585": "Anagrapha", + "1791590": "Anagrapha falcifera", + "1791592": "Admetovis", + "1791593": "Admetovis similaris", + "1791654": "Polytela", + "1791660": "Polytela gloriosae", + "1791678": "Crambodes", + "1791680": "Crambodes talidiformis", + "1791696": "Oraesia", + "1791698": "Oraesia excavata", + "1791715": "Oraesia emarginata", + "1791735": "Marathyssa basalis", + "1791736": "Marathyssa inficita", + "1791756": "Klugeana", + "1791758": "Klugeana philoxalis", + "1791769": "Graphiphora", + "1791784": "Graphiphora augur", + "1791792": "Cosmodes", + "1791793": "Cosmodes elegans", + "1791827": "Cruria", + "1791837": "Cruria synopla", + "1791843": "Lamprosticta", + "1791846": "Lamprosticta culta", + "1791861": "Neogalea", + "1791862": "Neogalea sunia", + "1791868": "Selambina", + "1791870": "Selambina trajiciens", + "1791874": "Herminia", + "1792055": "Egira", + "1792061": "Egira conspicillaris", + "1792072": "Egira dolosa", + "1792073": "Egira hiemalis", + "1792087": "Egira cognata", + "1792091": "Egira rubrica", + "1792095": "Egira simplex", + "1792096": "Egira crucialis", + "1792097": "Egira variabilis", + "1792099": "Egira curialis", + "1792199": "Nodaria", + "1792210": "Nodaria nodosalis", + "1792250": "Pindara", + "1792270": "Matigramma", + "1792276": "Matigramma pulverilinea", + "1792280": "Actinotia", + "1792292": "Actinotia polyodon", + "1792300": "Actinotia radiosa", + "1792316": "Nedra", + "1792318": "Nedra ramosula", + "1792324": "Photedes", + "1792335": "Photedes extrema", + "1792377": "Photedes fluxa", + "1792379": "Photedes captiuncula", + "1792383": "Photedes minima", + "1792405": "Autographa", + "1792411": "Autographa pulchrina", + "1792414": "Autographa bractea", + "1792418": "Autographa gamma", + "1792426": "Autographa jota", + "1792430": "Autographa californica", + "1792431": "Autographa mandarina", + "1792442": "Autographa ampla", + "1792449": "Autographa buraetica", + "1792456": "Autographa flagellum", + "1792465": "Autographa precationis", + "1792475": "Autographa excelsa", + "1792478": "Autographa bimaculata", + "1792485": "Autographa metallica", + "1792497": "Autographa mappa", + "1792517": "Autographa corusca", + "1792528": "Hypenagonia", + "1792541": "Hypenagonia obliquifascia", + "1792555": "Helicoverpa assulta", + "1792560": "Helicoverpa punctigera", + "1792564": "Helicoverpa zea", + "1792635": "Jodia", + "1792645": "Jodia croceago", + "1792687": "Lygniodes", + "1792695": "Lygniodes hypoleuca", + "1792712": "Nacna", + "1792752": "Diastema", + "1792764": "Dryobota", + "1792768": "Dryobota labecula", + "1792814": "Metachrostis paurograpta", + "1792816": "Dargida", + "1792817": "Dargida procinctus", + "1792825": "Celiptera", + "1792827": "Celiptera levina", + "1792831": "Celiptera frustulum", + "1792979": "Mycteroplus", + "1792984": "Peridroma", + "1792996": "Peridroma saucia", + "1793188": "Crocigrapha", + "1793189": "Crocigrapha normani", + "1793190": "Homoglaea", + "1793192": "Homoglaea hircina", + "1793201": "Brachygalea", + "1793212": "Brachygalea albolineata", + "1793222": "Episteme", + "1793238": "Episteme vetula", + "1793243": "Episteme lectrix", + "1793246": "Episteme adulatrix", + "1793290": "Thyas", + "1793320": "Agarista", + "1793366": "Anathix", + "1793368": "Anathix ralla", + "1793369": "Anathix puta", + "1793417": "Ufeus", + "1793419": "Ufeus satyricus", + "1793428": "Anoratha", + "1793429": "Anoratha sinuosa", + "1793452": "Bellura", + "1793453": "Bellura vulnifica", + "1793455": "Bellura gortynoides", + "1793515": "Bleptina parallela", + "1793533": "Bleptina venata", + "1793538": "Bleptina caradrinalis", + "1793542": "Bleptina sangamonia", + "1793565": "Macristis", + "1793566": "Macristis schausi", + "1793571": "Ulochlaena", + "1793585": "Stretchia", + "1793589": "Stretchia muricina", + "1793603": "Bertula", + "1793610": "Bertula retracta", + "1793613": "Bertula kosemponica", + "1793631": "Bertula abjudicalis", + "1793635": "Bertula hadenalis", + "1793646": "Bertula centralis", + "1793656": "Bertula albipunctata", + "1793660": "Zalissa", + "1793661": "Zalissa catocalina", + "1793684": "Apsarasa", + "1793689": "Apsarasa radians", + "1793697": "Spiramater", + "1793699": "Spiramater lutra", + "1793856": "Panolis", + "1793877": "Panolis flammea", + "1793887": "Lysimelia", + "1793892": "Lysimelia lucida", + "1793981": "Cryptocala", + "1793983": "Cryptocala acadiensis", + "1793986": "Cryptocala chardinyi", + "1794099": "Hillia", + "1794102": "Hillia iris", + "1794268": "Entomogramma pardus", + "1794273": "Entomogramma fautrix", + "1794349": "Bryonycta", + "1794351": "Bryonycta pineti", + "1794361": "Lasionycta imbecillus", + "1794423": "Austramathes", + "1794425": "Austramathes purpurea", + "1794496": "Diaphone", + "1794507": "Diaphone eumela", + "1794509": "Conservula", + "1794510": "Conservula anodonta", + "1794512": "Arugisa", + "1794518": "Arugisa lutea", + "1794529": "Cardepia", + "1794532": "Cardepia sociabilis", + "1794534": "Cardepia affinis", + "1794570": "Lycophotia", + "1794590": "Lycophotia porphyrea", + "1794599": "Lycophotia molothina", + "1794609": "Lycophotia erythrina", + "1794630": "Antiblemma", + "1794637": "Antiblemma perornata", + "1794807": "Eriopyga", + "1795041": "Tetanolita", + "1795042": "Tetanolita floridana", + "1795045": "Tetanolita palligera", + "1795049": "Tetanolita mynesalis", + "1795061": "Thysanoplusia", + "1795065": "Thysanoplusia intermixta", + "1795068": "Thysanoplusia orichalcea", + "1795072": "Antiophlebia", + "1795074": "Antiophlebia bracteata", + "1795103": "Australothis", + "1795110": "Australothis rubrescens", + "1795126": "Cryphia", + "1795180": "Cryphia pallida", + "1795215": "Cryphia algae", + "1795282": "Cryphia fraudatricula", + "1795443": "Pachetra", + "1795478": "Omphalophana", + "1795483": "Omphalophana serrata", + "1795542": "Pataeta carbo", + "1795578": "Ophthalmis", + "1795597": "Ophthalmis lincea", + "1795656": "Meyrickella", + "1795657": "Meyrickella ruptellus", + "1795782": "Apamea", + "1795788": "Apamea dubitans", + "1795802": "Apamea alia", + "1795812": "Apamea helva", + "1795854": "Apamea lateritia", + "1795862": "Apamea arabs", + "1795871": "Apamea devastator", + "1795896": "Apamea maillardi", + "1795900": "Apamea syriaca", + "1795930": "Apamea furva", + "1795946": "Apamea sublustris", + "1795957": "Apamea aquila", + "1795983": "Apamea inficita", + "1796007": "Apamea rubrirena", + "1796032": "Apamea zeta", + "1796035": "Apamea lignicolora", + "1796040": "Apamea vultuosa", + "1796051": "Apamea burgessi", + "1796100": "Apamea verbascoides", + "1796117": "Apamea sordens", + "1796139": "Apamea epomidion", + "1796145": "Apamea monoglypha", + "1796154": "Apamea impulsa", + "1796169": "Apamea crenata", + "1796180": "Apamea amputatrix", + "1796181": "Apamea cogitata", + "1796188": "Apamea unanimis", + "1796204": "Metria", + "1796209": "Parastichtis", + "1796217": "Parastichtis suspecta", + "1796225": "Arenostola", + "1796256": "Ulosyneda", + "1796257": "Ulosyneda valens", + "1796272": "Condica", + "1796274": "Condica confederata", + "1796276": "Condica cupentia", + "1796287": "Zelicodes", + "1796288": "Zelicodes linearis", + "1796302": "Amolita", + "1796310": "Amolita obliqua", + "1796312": "Amolita fessa", + "1796328": "Hypenula", + "1796338": "Hypenula cacuminalis", + "1796358": "Hypospila", + "1796408": "Calophasia", + "1796423": "Calophasia opalina", + "1796451": "Calophasia platyptera", + "1796463": "Calophasia lunula", + "1796469": "Rhizedra", + "1796523": "Pangrapta decoralis", + "1796639": "Hydraecia", + "1796678": "Hydraecia micacea", + "1796686": "Hydraecia medialis", + "1796782": "Ichneutica", + "1796791": "Ichneutica caraunias", + "1796837": "Heliothodes", + "1796842": "Heliothodes diminutiva", + "1796941": "Loxioda hampsoni", + "1796943": "Loxioda similis", + "1796957": "Phobolosia", + "1796958": "Phobolosia anfracta", + "1796971": "Serrodes", + "1796984": "Serrodes campana", + "1797004": "Sarbanissa", + "1797030": "Sarbanissa subflava", + "1797038": "Speiredonia", + "1797039": "Speiredonia spectans", + "1797073": "Catocala", + "1797111": "Catocala micronympha", + "1797121": "Catocala desdemona", + "1797122": "Catocala grynea", + "1797135": "Catocala relicta", + "1797137": "Catocala coccinata", + "1797146": "Catocala clintonii", + "1797178": "Catocala promissa", + "1797194": "Catocala illecta", + "1797198": "Catocala andromedae", + "1797206": "Catocala praeclara", + "1797210": "Catocala gracilis", + "1797218": "Catocala meskei", + "1797252": "Catocala crataegi", + "1797257": "Catocala cerogama", + "1797258": "Catocala nupta", + "1797259": "Catocala patala", + "1797275": "Catocala carissima", + "1797276": "Catocala elocata", + "1797285": "Catocala cara", + "1797290": "Catocala lineella", + "1797296": "Catocala verrilliana", + "1797299": "Catocala nivea", + "1797300": "Catocala parta", + "1797333": "Catocala nymphagoga", + "1797339": "Catocala amica", + "1797344": "Catocala helena", + "1797349": "Catocala conversa", + "1797365": "Catocala californica", + "1797367": "Catocala sponsa", + "1797373": "Catocala unijuga", + "1797374": "Catocala pacta", + "1797375": "Catocala ilia", + "1797379": "Catocala amestris", + "1797394": "Catocala sordida", + "1797409": "Catocala mira", + "1797429": "Catocala hymenaea", + "1797432": "Catocala amatrix", + "1797433": "Catocala connubialis", + "1797436": "Catocala briseis", + "1797440": "Catocala similis", + "1797445": "Catocala ultronia", + "1797454": "Catocala puerpera", + "1797464": "Catocala blandula", + "1797474": "Catocala herodias", + "1797475": "Catocala minuta", + "1797478": "Catocala alabamae", + "1797479": "Catocala fraxini", + "1797488": "Catocala semirelicta", + "1797507": "Catocala aholibah", + "1797521": "Catocala junctura", + "1797527": "Catocala coniuncta", + "1797542": "Catocala optata", + "1797556": "Catocala concumbens", + "1797586": "Achatia", + "1797587": "Achatia evicta", + "1797592": "Achatia confusa", + "1797593": "Achatia distincta", + "1797595": "Achatia mucens", + "1797601": "Achatia latex", + "1797726": "Semiothisops", + "1797727": "Semiothisops macariata", + "1797730": "Exsula", + "1797735": "Exsula albomaculata", + "1797793": "Eublemma ecthaemata", + "1797864": "Eublemma nigrivitta", + "1797903": "Eublemma recta", + "1797942": "Eublemma bolinia", + "1797965": "Eublemma apicimacula", + "1798007": "Pantydia", + "1798014": "Pantydia metaspila", + "1798018": "Pantydia capistrata", + "1798023": "Pantydia sparsa", + "1798025": "Pantydia diemeni", + "1798027": "Apospasta", + "1798060": "Apospasta rantaizanensis", + "1798083": "Diarsia", + "1798084": "Diarsia intermixta", + "1798089": "Tycracona", + "1798090": "Tycracona obliqua", + "1798097": "Hulodes", + "1798101": "Hulodes caranea", + "1798277": "Marimatha", + "1798288": "Marimatha nigrofimbria", + "1798308": "Achaea", + "1798329": "Homodes vivida", + "1798331": "Homodes crocea", + "1798335": "Homodes bracteigutta", + "1798340": "Trisateles", + "1798346": "Trisateles emortualis", + "1798362": "Hyppa", + "1798371": "Hyppa contrasta", + "1798372": "Hyppa rectilinea", + "1798375": "Hyppa xylinoides", + "1798377": "Euclidia", + "1798393": "Euclidia cuspidea", + "1798402": "Euclidia ardita", + "1798408": "Euclidia glyphica", + "1798417": "Derrima", + "1798419": "Derrima stellata", + "1798421": "Selenisa", + "1798427": "Selenisa sueroides", + "1798440": "Scoliopteryx", + "1798449": "Scoliopteryx libatrix", + "1798478": "Dysgonia", + "1798481": "Dysgonia torrida", + "1798488": "Dysgonia stuposa", + "1798504": "Dysgonia algira", + "1798509": "Meranda", + "1798511": "Meranda susialis", + "1798514": "Hypena", + "1798523": "Hypena iconicalis", + "1798529": "Hypena umbrifera", + "1798580": "Hypena taiwana", + "1798594": "Hypena rostralis", + "1798687": "Hypena subvittalis", + "1798700": "Hypena indicatalis", + "1798768": "Hypena pelodes", + "1798794": "Hypena longipennis", + "1798802": "Hypena obsitalis", + "1798807": "Hypena proboscidalis", + "1798823": "Hypena sinuosa", + "1798863": "Hypena cyanea", + "1798868": "Hypena gonospilalis", + "1798902": "Orthosia", + "1798916": "Orthosia gracilis", + "1798922": "Orthosia dalmatica", + "1798931": "Orthosia opima", + "1798971": "Orthosia populeti", + "1798974": "Orthosia gothica", + "1798984": "Orthosia cerasi", + "1799132": "Orthosia miniosa", + "1799135": "Orthosia incerta", + "1799163": "Trigonistis", + "1799165": "Trigonistis asthenopa", + "1799167": "Trigonistis demonias", + "1799180": "Zaleops", + "1799183": "Zaleops umbrina", + "1799416": "Dunira", + "1799417": "Dunira punctimargo", + "1799429": "Antaplaga", + "1799433": "Antaplaga plesioglauca", + "1799669": "Grotella", + "1799675": "Grotella binda", + "1799680": "Grotella tricolor", + "1799687": "Pseudeustrotia", + "1799695": "Pseudeustrotia semialba", + "1799701": "Pseudeustrotia candidula", + "1799702": "Hypenodes", + "1799703": "Hypenodes caducus", + "1799708": "Hypenodes humidalis", + "1799723": "Mecodina", + "1799743": "Mecodina praecipua", + "1799751": "Mecodina albodentata", + "1799757": "Mecodina bisignata", + "1799771": "Chrysoecia", + "1799774": "Chrysoecia scira", + "1799789": "Panemeria", + "1799799": "Panemeria tenebrata", + "1799821": "Pandesma submurina", + "1799868": "Lacinipolia", + "1799870": "Lacinipolia renigera", + "1799877": "Lacinipolia erecta", + "1799880": "Lacinipolia meditata", + "1799884": "Lacinipolia stricta", + "1799894": "Lacinipolia quadrilineata", + "1799900": "Lacinipolia laudabilis", + "1799901": "Lacinipolia davena", + "1799911": "Lacinipolia buscki", + "1799917": "Lacinipolia explicata", + "1799925": "Lacinipolia implicata", + "1799938": "Lacinipolia cuneata", + "1799944": "Lacinipolia strigicollis", + "1799956": "Lacinipolia patalis", + "1799957": "Lacinipolia olivacea", + "1799958": "Lacinipolia anguina", + "1799967": "Lacinipolia lorea", + "1799977": "Lacinipolia sareta", + "1799993": "Moma", + "1800004": "Moma alpium", + "1800016": "Panthea", + "1800017": "Panthea acronyctoides", + "1800024": "Panthea virginarius", + "1800028": "Panthea furcilla", + "1800032": "Panthea coenobita", + "1800085": "Lichnoptera", + "1800130": "Charadra dispulsa", + "1800140": "Charadra deridens", + "1800142": "Trichosea", + "1800149": "Trichosea champa", + "1800191": "Trisuloides sericea", + "1800236": "Macrochthonia", + "1800238": "Macrochthonia fervens", + "1800430": "Etanna", + "1800437": "Maceda", + "1800441": "Maceda mansueta", + "1800464": "Barasa", + "1800473": "Barasa cymatistis", + "1800482": "Beara", + "1800518": "Austrocarea", + "1800522": "Austrocarea iocephala", + "1800523": "Gabala", + "1800528": "Gabala argentata", + "1800539": "Gabala roseoretis", + "1800542": "Risoba", + "1800562": "Risoba obstructa", + "1800572": "Risoba prominens", + "1800639": "Neaxestis", + "1800642": "Neaxestis rhoda", + "1800662": "Acatapaustus", + "1800668": "Carea", + "1800686": "Carea angulata", + "1800691": "Carea unipunctata", + "1800696": "Carea internifusca", + "1800821": "Carea varipes", + "1800838": "Armactica", + "1800843": "Armactica conchidia", + "1800844": "Armactica columbina", + "1800845": "Xanthodes", + "1800870": "Garella", + "1800879": "Kerala", + "1800881": "Kerala lentiginosa", + "1800891": "Eligma", + "1800918": "Pardoxia", + "1800930": "Ariolica", + "1800934": "Ariolica argentea", + "1800952": "Baileya", + "1800963": "Baileya australis", + "1800985": "Paracrama", + "1800996": "Tympanistes", + "1801000": "Tympanistes rubidorsalis", + "1801001": "Tympanistes fusimargo", + "1801046": "Bena", + "1801051": "Bena bicolorana", + "1801072": "Siglophora", + "1801073": "Siglophora sanguinolenta", + "1801080": "Siglophora ferreilutea", + "1801082": "Iragaodes", + "1801084": "Iragaodes nobilis", + "1801085": "Bryophilopsis", + "1801146": "Selepa", + "1801170": "Selepa discigera", + "1801195": "Lamprothripa", + "1801196": "Lamprothripa scotia", + "1801203": "Westermannia", + "1801278": "Calathusa", + "1801303": "Calathusa hypotherma", + "1801305": "Calathusa mesospila", + "1801316": "Calathusa basicunea", + "1801431": "Uraba", + "1801432": "Uraba lugens", + "1801449": "Negeta", + "1801461": "Negeta contrariata", + "1801487": "Macrobarasa", + "1801490": "Macrobarasa xantholopha", + "1801501": "Ptisciana", + "1801503": "Ptisciana seminivea", + "1801516": "Lophothripa", + "1801519": "Lophothripa vitea", + "1801758": "Nola", + "1801787": "Nola vernalis", + "1801896": "Nola cucullatella", + "1801903": "Nola monozona", + "1801922": "Nola epicentra", + "1801990": "Giaura", + "1801993": "Giaura multipunctata", + "1802070": "Gadirtha", + "1802090": "Gadirtha impingens", + "1802109": "Nolathripa", + "1802113": "Nolathripa lactaria", + "1802118": "Melanographia", + "1802120": "Melanographia flexilineata", + "1802159": "Afrida", + "1802213": "Tyana", + "1802229": "Tyana falcata", + "1802234": "Sinna", + "1802244": "Sinna extrema", + "1802269": "Pseudoips", + "1802280": "Pseudoips prasinana", + "1802330": "Titulcia", + "1802337": "Titulcia confictella", + "1802660": "Maurilia", + "1802662": "Maurilia arcuata", + "1802702": "Maurilia iconica", + "1802775": "Ochthophora", + "1802776": "Ochthophora sericina", + "1802779": "Blenina", + "1802783": "Blenina senex", + "1802827": "Blenina quinaria", + "1802830": "Blenina lichenopa", + "1802833": "Blenina donans", + "1802850": "Blenina squamifera", + "1802864": "Pardasena", + "1802868": "Pardasena virgulana", + "1802886": "Ochrothripa", + "1802888": "Ochrothripa leptochroma", + "1802894": "Labanda", + "1802919": "Labanda semipars", + "1802935": "Hylophilodes", + "1802939": "Hylophilodes tsukusensis", + "1802978": "Nola hyalospila", + "1802997": "Earias", + "1802998": "Earias paralella", + "1803012": "Earias vernana", + "1803014": "Earias subviridis", + "1803021": "Earias smaragdina", + "1803022": "Earias cupreoviridis", + "1803025": "Earias biplaga", + "1803035": "Earias flavida", + "1803039": "Earias luteolaria", + "1803060": "Earias insulana", + "1803065": "Earias pudicana", + "1803073": "Earias clorana", + "1803078": "Earias vittella", + "1803091": "Earias chlorodes", + "1803108": "Earias roseifera", + "1803121": "Ptychoglene", + "1803127": "Ptychoglene coccinea", + "1803137": "Utetheisa", + "1803148": "Utetheisa lotrix", + "1803163": "Utetheisa pulchella", + "1803197": "Utetheisa pulchelloides", + "1803218": "Utetheisa ornatrix", + "1803250": "Antichloris", + "1803266": "Antichloris eriphia", + "1803300": "Curoba", + "1803302": "Curoba sangarida", + "1803306": "Cymaroa grisea", + "1803461": "Teulisna tumida", + "1803474": "Clemensia", + "1803544": "Rhodogastria amasis", + "1803545": "Rhodogastria similis", + "1803590": "Paralacydes vocula", + "1803593": "Paralacydes arborifera", + "1803615": "Ormetica", + "1803628": "Ormetica ameoides", + "1803699": "Haploa", + "1803780": "Heterallactis", + "1803781": "Heterallactis microchrysa", + "1803788": "Heterallactis euchrysa", + "1803812": "Pericallia", + "1803824": "Pericallia matronula", + "1803951": "Phragmatobia", + "1804071": "Phragmatobia fuliginosa", + "1804074": "Phragmatobia assimilans", + "1804120": "Eressa angustipenna", + "1804148": "Eressa geographica", + "1804182": "Eressa confinis", + "1804244": "Graphosia", + "1804246": "Graphosia stenopepla", + "1804321": "Lymire", + "1804331": "Lymire edwardsii", + "1804336": "Saenura", + "1804337": "Saenura flava", + "1804391": "Pygarctia", + "1804394": "Pygarctia murina", + "1804398": "Pygarctia abdominalis", + "1804401": "Pygarctia lorula", + "1804404": "Pygarctia pterygostigma", + "1804407": "Pygarctia flavidorsalis", + "1804409": "Pygarctia roseicapitis", + "1804414": "Damias", + "1804429": "Damias leptosema", + "1804430": "Damias procrena", + "1804474": "Mithuna", + "1804477": "Mithuna arizana", + "1804500": "Lycomorpha", + "1804512": "Lycomorpha pholus", + "1804513": "Lycomorpha splendens", + "1804521": "Scena", + "1804522": "Scena potentia", + "1804532": "Secusio strigata", + "1804552": "Aclytia", + "1804609": "Stenoscaptia", + "1804610": "Stenoscaptia venusta", + "1804645": "Asuridia", + "1804714": "Philenora", + "1804721": "Philenora chionastis", + "1804727": "Philenora aspectalella", + "1804742": "Philenora elegans", + "1804755": "Composia", + "1804759": "Composia fidelissima", + "1804760": "Composia credula", + "1804829": "Digama", + "1804905": "Cybosia", + "1804906": "Cybosia mesomella", + "1804961": "Apantesis", + "1804963": "Apantesis nais", + "1804969": "Apantesis vittata", + "1804971": "Apantesis carlotta", + "1804974": "Apantesis phalerata", + "1805025": "Schistophleps", + "1805043": "Schistophleps albida", + "1805044": "Schistophleps bipuncta", + "1805088": "Ocnogyna", + "1805110": "Ocnogyna boeticum", + "1805111": "Ocnogyna loewii", + "1805155": "Ocnogyna parasita", + "1805171": "Macrocneme", + "1805184": "Macrocneme leucostigma", + "1805197": "Macrocneme chrysitis", + "1805233": "Symphlebia", + "1805271": "Symphlebia perflua", + "1805340": "Garudinia", + "1805496": "Gampola", + "1805498": "Scaptesyle", + "1805505": "Scaptesyle equidistans", + "1805524": "Scaptesyle dichotoma", + "1805535": "Apaidia mesogona", + "1805536": "Crambidia", + "1805537": "Crambidia cephalica", + "1805540": "Crambidia casta", + "1805542": "Crambidia myrlosea", + "1805549": "Crambidia pallida", + "1805559": "Caeneressa", + "1805580": "Caeneressa diaphana", + "1805680": "Seirarctia", + "1805682": "Seirarctia echo", + "1805688": "Uranophora", + "1805691": "Uranophora leucotela", + "1805717": "Uranophora walkeri", + "1805749": "Eugoa", + "1805805": "Scaphidriotis", + "1805806": "Scaphidriotis xylogramma", + "1805917": "Cyanopepla", + "1805938": "Cyanopepla bella", + "1805955": "Cyanopepla submacula", + "1805976": "Cyanopepla similis", + "1805982": "Cyanopepla jucunda", + "1806046": "Eurata", + "1806064": "Eurata hermione", + "1806075": "Eurata hilaris", + "1806123": "Grammia", + "1806145": "Grammia virguncula", + "1806170": "Grammia virgo", + "1806176": "Grammia parthenice", + "1806539": "Phaloe", + "1806678": "Horama", + "1806687": "Horama oedippus", + "1806690": "Horama plumipes", + "1806702": "Horama panthalon", + "1806703": "Phaeophlebosia", + "1806704": "Phaeophlebosia furcifera", + "1806731": "Hypoprepia", + "1806737": "Hypoprepia fucosa", + "1806740": "Hypoprepia miniata", + "1806813": "Lobobasis", + "1806814": "Lobobasis niveimaculata", + "1806818": "Virbia", + "1806869": "Pareuchaetes", + "1806871": "Pareuchaetes pseudoinsulata", + "1806872": "Pareuchaetes insulata", + "1806878": "Pareuchaetes aurata", + "1806884": "Pronola", + "1806887": "Pronola magniplaga", + "1806903": "Amphicallia", + "1806913": "Amphicallia bellatrix", + "1806935": "Meteugoa", + "1806936": "Meteugoa ochrivena", + "1807195": "Thumatha", + "1807270": "Euerythra", + "1807271": "Euerythra phasma", + "1807273": "Euerythra trimaculata", + "1807288": "Bertholdia", + "1807352": "Argyroeides", + "1807353": "Argyroeides braco", + "1807355": "Argyroeides sanguinea", + "1807453": "Thallarcha", + "1807473": "Thallarcha sparsana", + "1807477": "Thallarcha leptographa", + "1807478": "Thallarcha staurocola", + "1807479": "Thallarcha chrysochares", + "1807480": "Thallarcha macilenta", + "1807483": "Thallarcha oblita", + "1807485": "Thallarcha partita", + "1807488": "Thallarcha phalarota", + "1807490": "Thallarcha rhaptophora", + "1807491": "Thallarcha albicollis", + "1807502": "Palaeosia", + "1807503": "Palaeosia bicosta", + "1807512": "Mydromera", + "1807514": "Mydromera notochloris", + "1807552": "Xanthoarctia", + "1807553": "Xanthoarctia pseudameoides", + "1807557": "Trichura", + "1807569": "Trichura cerberus", + "1807634": "Ceryx longipes", + "1807785": "Tipulodes", + "1807787": "Tipulodes ima", + "1807878": "Pyrrharctia", + "1807881": "Pyrrharctia isabella", + "1807924": "Teracotona rhodophaea", + "1807965": "Paidia", + "1807969": "Paidia rica", + "1808083": "Pagara", + "1808088": "Pagara simplex", + "1808097": "Amata", + "1808140": "Amata lucerna", + "1808145": "Amata edwardsi", + "1808161": "Amata grotei", + "1808166": "Amata mestralii", + "1808172": "Amata cerbera", + "1808180": "Amata passalis", + "1808195": "Amata nigricornis", + "1808221": "Amata wilemani", + "1808232": "Amata aperta", + "1808236": "Amata sperbius", + "1808286": "Amata germana", + "1808340": "Amata fouqueti", + "1808348": "Amata caspia", + "1808359": "Amata kuhlweini", + "1808381": "Amata cyssea", + "1808440": "Amata marjana", + "1808450": "Amata phegea", + "1808559": "Amata perixanthia", + "1808588": "Ectypia", + "1808590": "Ectypia bivittata", + "1808592": "Ectypia clio", + "1808646": "Cissura", + "1808648": "Cissura decora", + "1808720": "Parasemia", + "1808752": "Parasemia plantaginis", + "1808910": "Eucharia", + "1808961": "Lithosia", + "1809017": "Chamaita", + "1809019": "Chamaita hirta", + "1809035": "Gnamptonychia", + "1809063": "Cratoplastis", + "1809066": "Cratoplastis diluta", + "1809069": "Tyria", + "1809113": "Areas", + "1809115": "Areas galactina", + "1809124": "Syntomeida", + "1809127": "Syntomeida melanthus", + "1809135": "Syntomeida epilais", + "1809150": "Thyretes", + "1809158": "Thyretes caffra", + "1809159": "Thyretes hippotes", + "1809201": "Watsonarctia", + "1809210": "Watsonarctia deserta", + "1809226": "Ardices", + "1809244": "Ardices curvata", + "1809248": "Ardices glatignyi", + "1809292": "Carales", + "1809294": "Carales astur", + "1809299": "Carales arizonensis", + "1809304": "Dahana", + "1809305": "Dahana atripennis", + "1809307": "Neoblavia", + "1809308": "Neoblavia scoteola", + "1809346": "Phaloesia", + "1809348": "Phaloesia saucia", + "1809379": "Oeonistis", + "1809381": "Oeonistis delia", + "1809387": "Oeonistis entella", + "1809452": "Saurita", + "1809491": "Saurita temenus", + "1809499": "Saurita cassandra", + "1809585": "Siccia caffra", + "1809594": "Siccia taiwana", + "1809913": "Camptoloma", + "1809946": "Hesychopa", + "1809948": "Nephelomilta", + "1809950": "Leucanopsis", + "1810025": "Leucanopsis longa", + "1810097": "Atolmis", + "1810099": "Atolmis rubricollis", + "1810107": "Anaxita", + "1810121": "Anaxita decorata", + "1810140": "Eucereon", + "1810145": "Eucereon sylvius", + "1810172": "Eucereon tigrata", + "1810318": "Eucereon vestalis", + "1810463": "Hemipsilia", + "1810464": "Hemipsilia coavestis", + "1810465": "Cisseps", + "1810469": "Cisseps fulvicollis", + "1810505": "Arachnis", + "1810530": "Cosmosoma", + "1810734": "Hypocrisias", + "1810743": "Hypocrisias minima", + "1810746": "Heliosia", + "1810752": "Heliosia jucunda", + "1810819": "Hyaleucerea", + "1810824": "Hyaleucerea vulnerata", + "1810845": "Psychophasma", + "1810846": "Psychophasma erosa", + "1810849": "Hectobrocha", + "1810851": "Hectobrocha pentacyma", + "1810852": "Phoenicoprocta", + "1810866": "Phoenicoprocta sanguinea", + "1810867": "Phoenicoprocta teda", + "1810969": "Arctagyrta", + "1810973": "Hypercompe", + "1811019": "Hypercompe caudata", + "1811026": "Hypercompe abdominalis", + "1811079": "Hypercompe scribonia", + "1811081": "Hypercompe indecisa", + "1811122": "Hypercompe permaculata", + "1811436": "Eurylomia", + "1811439": "Eurylomia cordula", + "1811455": "Halone sejuncta", + "1811462": "Halone prosenes", + "1811465": "Halone consolatrix", + "1811507": "Euchaetes", + "1811612": "Nudaria", + "1811679": "Macrobrochis", + "1811686": "Macrobrochis gigas", + "1811694": "Robinsonia", + "1811814": "Spilosoma dubia", + "1811948": "Spilosoma virginica", + "1812026": "Spilosoma vestalis", + "1812105": "Spilosoma congrua", + "1812207": "Spilosoma vagans", + "1812262": "Spilosoma latipennis", + "1812339": "Spilosoma pteridis", + "1812394": "Spilosoma urticae", + "1812433": "Lambula", + "1812437": "Lambula obliquilinea", + "1812453": "Lambula pristina", + "1812465": "Lambula transcripta", + "1812492": "Chrysorabdia", + "1812500": "Chrysorabdia vilemani", + "1812534": "Mesothen", + "1812573": "Mesothen nomia", + "1812649": "Macaduma", + "1812658": "Macaduma toxophora", + "1812874": "Phaio", + "1812881": "Phaio acquiguttata", + "1812976": "Miltochrista", + "1813010": "Miltochrista ziczac", + "1813036": "Miltochrista undulata", + "1813114": "Miltochrista miniata", + "1813174": "Xanthetis luzonica", + "1813237": "Leptarctia", + "1813248": "Leptarctia californiae", + "1813262": "Conilepia", + "1813263": "Conilepia nigricosta", + "1813413": "Estigmene albida", + "1813415": "Estigmene acrea", + "1813460": "Galtara rostrata", + "1813468": "Galtara extensa", + "1814095": "Coscinia", + "1814174": "Ammalo", + "1814182": "Ammalo helops", + "1814314": "Halysidota", + "1814323": "Halysidota ruscheweyhi", + "1814336": "Halysidota davisii", + "1814338": "Halysidota tessellaris", + "1814357": "Halysidota cinctipes", + "1814359": "Halysidota schausi", + "1814365": "Halysidota harrisii", + "1814401": "Amastus", + "1814534": "Cymbalophora", + "1814538": "Cymbalophora oertzeni", + "1814552": "Cymbalophora pudica", + "1814563": "Poecilosoma", + "1814595": "Dysauxes", + "1814630": "Dysauxes ancilla", + "1814653": "Dysauxes famula", + "1814654": "Idalus", + "1814658": "Idalus agastus", + "1814665": "Idalus herois", + "1814692": "Idalus critheis", + "1814799": "Ctenucha", + "1814800": "Ctenucha brunnea", + "1814823": "Ctenucha vittigerum", + "1814827": "Ctenucha multifaria", + "1814838": "Ctenucha rubroscapus", + "1814843": "Ctenucha virginica", + "1814863": "Ctenucha venosa", + "1814877": "Ilemodes astriga", + "1814885": "Creatonotos", + "1814913": "Creatonotos gangis", + "1814928": "Creatonotos transiens", + "1814969": "Pseudoblabes", + "1814971": "Pseudoblabes oophora", + "1815226": "Pelosia", + "1815259": "Chrysaeglia", + "1815260": "Chrysaeglia magnifica", + "1815315": "Psichotoe duvauceli", + "1815337": "Scoliacma", + "1815338": "Scoliacma bicolora", + "1815371": "Nyridela", + "1815373": "Nyridela acroxantha", + "1815380": "Eudesmia", + "1815421": "Zobida", + "1815439": "Dysschema", + "1815670": "Padenia", + "1815680": "Padenia transversa", + "1815844": "Dycladia", + "1815856": "Dycladia lucetius", + "1815859": "Oxacme", + "1815923": "Ovipennis", + "1816024": "Nyctemera", + "1816029": "Nyctemera baulus", + "1816065": "Nyctemera coleta", + "1816110": "Nyctemera amicus", + "1816138": "Nyctemera carissima", + "1816246": "Nyctemera tripunctaria", + "1816264": "Nyctemera annulata", + "1816276": "Nyctemera albofasciata", + "1816292": "Nyctemera arctata", + "1816299": "Nyctemera adversata", + "1816362": "Nyctemera lacticinia", + "1816417": "Castulo", + "1816434": "Castulo doubledayi", + "1816564": "Apistosia", + "1816570": "Apistosia judas", + "1816634": "Amerila rubripes", + "1816648": "Amerila crokeri", + "1816673": "Amerila timolis", + "1816685": "Amerila bubo", + "1816775": "Sozusa scutellata", + "1816799": "Dinia", + "1816867": "Hyphoraia", + "1816881": "Hyphoraia aulica", + "1816956": "Euchromia", + "1817060": "Calamidia", + "1817065": "Calamidia hirta", + "1817084": "Leucotmemis", + "1817086": "Leucotmemis nexa", + "1817136": "Asura", + "1817160": "Asura bipars", + "1817171": "Asura cervicalis", + "1817217": "Asura lydia", + "1817669": "Lophocampa", + "1817690": "Lophocampa mixta", + "1817693": "Lophocampa ingens", + "1817696": "Lophocampa roseata", + "1817727": "Lophocampa argentata", + "1817729": "Lophocampa maculata", + "1817732": "Lophocampa caryae", + "1817734": "Lophocampa annulosa", + "1817749": "Lophocampa pura", + "1817786": "Hyphantria", + "1817797": "Hyphantria cunea", + "1817807": "Lepidoneiva", + "1817808": "Lepidoneiva erubescens", + "1817809": "Symmetrodes", + "1817810": "Symmetrodes sciocosma", + "1817848": "Chrysocale", + "1817852": "Chrysocale ignita", + "1817854": "Chrysocale regalis", + "1817864": "Chrysocale principalis", + "1817918": "Amsactoides", + "1817933": "Empyreuma", + "1817940": "Empyreuma pugione", + "1817973": "Pseudonaclia puella", + "1818216": "Tigrioides alterna", + "1818251": "Hyperphara", + "1818252": "Hyperphara clusia", + "1818401": "Diduga", + "1818413": "Diduga flavicostata", + "1818428": "Lerina", + "1818431": "Hemihyalea", + "1818454": "Hemihyalea edwardsii", + "1818463": "Hemihyalea labecula", + "1818477": "Laelia", + "1818650": "Orvasca", + "1818659": "Orvasca subnotata", + "1818989": "Perina", + "1818991": "Perina nuda", + "1819044": "Albarracina", + "1819050": "Albarracina warionis", + "1819057": "Medama diplaga", + "1819125": "Calliteara", + "1819128": "Calliteara angulata", + "1819145": "Calliteara pudibunda", + "1819170": "Penthophera morio", + "1819252": "Sphrageidus", + "1819268": "Sphrageidus similis", + "1819270": "Sphrageidus virguncula", + "1819276": "Locharna", + "1819280": "Locharna strigipennis", + "1819302": "Sarsina", + "1819310": "Sarsina purpurascens", + "1819320": "Hemerophanes libyra", + "1819337": "Artaxa guttata", + "1819362": "Artaxa olivata", + "1819372": "Arctornis", + "1819421": "Arctornis rutila", + "1819648": "Clethrogyna", + "1819668": "Clethrogyna turbata", + "1819685": "Somena scintillans", + "1819696": "Ocneria", + "1819699": "Ocneria rubea", + "1819785": "Ilema", + "1819852": "Numenes siletti", + "1819865": "Orgyia", + "1819873": "Orgyia antiqua", + "1819928": "Orgyia trigotephras", + "1819968": "Leptocneria", + "1819970": "Leptocneria reducta", + "1820039": "Leucoma salicis", + "1820080": "Arna", + "1820118": "Olene dudgeoni", + "1820137": "Olene mendosa", + "1820270": "Lymantria", + "1820275": "Lymantria marginata", + "1820282": "Lymantria bivittata", + "1820291": "Lymantria narindra", + "1820318": "Lymantria fuliginosa", + "1820352": "Lymantria grisea", + "1820372": "Lymantria monacha", + "1820383": "Lymantria nephrographa", + "1820393": "Lymantria plumbalis", + "1820401": "Lymantria lunata", + "1820406": "Lymantria dispar", + "1820414": "Lymantria iris", + "1820429": "Lymantria brunneiplaga", + "1820435": "Lymantria antennata", + "1820440": "Lymantria semicincta", + "1820450": "Lymantria mathura", + "1820451": "Lymantria ganara", + "1820458": "Lymantria ampla", + "1820477": "Lymantria concolor", + "1820478": "Lymantria brotea", + "1820536": "Dura", + "1820565": "Dura alba", + "1820573": "Naroma varipes", + "1820708": "Dasychira", + "1820711": "Dasychira atrivenosa", + "1820714": "Dasychira plagiata", + "1820722": "Dasychira vagans", + "1820753": "Dasychira olivacea", + "1820764": "Dasychira grisefacta", + "1820791": "Dasychira obliquata", + "1820802": "Dasychira octophora", + "1820888": "Dasychira chekiangensis", + "1820940": "Dasychira meridionalis", + "1820948": "Dasychira extorta", + "1821012": "Dasychira georgiana", + "1821051": "Dasychira manto", + "1821105": "Dasychira postfusca", + "1821113": "Dasychira basiflava", + "1821260": "Dasychira nachiensis", + "1821433": "Polymona", + "1821436": "Polymona rufifemur", + "1821441": "Acyphas", + "1821448": "Acyphas chionitis", + "1821455": "Euproctis kanshireia", + "1821464": "Euproctis lutea", + "1821468": "Euproctis fimbriata", + "1821478": "Euproctis purpureofasciata", + "1821479": "Euproctis subflava", + "1821505": "Euproctis baibarana", + "1821542": "Euproctis lucifuga", + "1821547": "Euproctis fasciata", + "1821581": "Euproctis straminicolor", + "1821651": "Euproctis inornata", + "1821684": "Euproctis aethiopica", + "1821856": "Euproctis chrysorrhoea", + "1821863": "Euproctis croceola", + "1821911": "Euproctis similis", + "1821920": "Euproctis magna", + "1821934": "Euproctis taiwana", + "1821940": "Euproctis piperita", + "1822003": "Euproctis edwardsii", + "1822017": "Euproctis quadrangularis", + "1822129": "Palasea", + "1822137": "Pida", + "1822141": "Pida decolorata", + "1822142": "Pida postalba", + "1822252": "Cascera", + "1822257": "Cascera muscosa", + "1822307": "Peridea", + "1822346": "Peridea anceps", + "1822481": "Dudusa", + "1822487": "Dudusa nobilis", + "1822490": "Dudusa sphingiformis", + "1822493": "Dudusa synopla", + "1822502": "Besaia sordida", + "1822545": "Furcula", + "1822587": "Furcula bifida", + "1822610": "Furcula furcula", + "1822613": "Furcula bicuspis", + "1822666": "Oligocentria", + "1822667": "Oligocentria semirufescens", + "1822778": "Clostera", + "1822784": "Clostera strigosa", + "1822787": "Clostera anastomosis", + "1822788": "Clostera apicalis", + "1822796": "Clostera curtula", + "1822805": "Clostera inclusa", + "1822819": "Clostera pigra", + "1822830": "Clostera anachoreta", + "1822848": "Clostera albosigma", + "1822852": "Clostera restitura", + "1822912": "Hylaeora", + "1822916": "Hylaeora eucalypti", + "1822917": "Hylaeora capucina", + "1823292": "Uropyia", + "1823294": "Uropyia meticulodina", + "1823440": "Lophontosia", + "1823444": "Lophontosia fusca", + "1823479": "Higena", + "1823488": "Trichiocercus", + "1823493": "Trichiocercus sparshalli", + "1823572": "Tensha", + "1823573": "Tensha striatella", + "1823574": "Somera", + "1823601": "Rhegmatophila", + "1823604": "Rhegmatophila alpina", + "1823616": "Micromelalopha", + "1823636": "Afilia", + "1823637": "Afilia oslari", + "1823667": "Ramesa", + "1823698": "Neodrymonia", + "1823706": "Neodrymonia basalis", + "1823714": "Harpyia", + "1823726": "Harpyia milhauseri", + "1824079": "Phryganidia", + "1824080": "Phryganidia californica", + "1824090": "Thaumetopoea", + "1824113": "Thaumetopoea processionea", + "1824117": "Thaumetopoea wilkinsoni", + "1824121": "Thaumetopoea herculeana", + "1824131": "Thaumetopoea pityocampa", + "1824174": "Crinodes", + "1824189": "Crinodes bellatrix", + "1824237": "Mesophalera", + "1824242": "Mesophalera sigmata", + "1824246": "Pygaera", + "1824253": "Ecnomodes", + "1824255": "Pseudhapigia", + "1824259": "Pseudhapigia brunnea", + "1824279": "Neola", + "1824280": "Neola semiaurata", + "1824326": "Benbowia", + "1824330": "Benbowia takamukuanus", + "1824336": "Acmeshachia", + "1824338": "Acmeshachia gigantea", + "1824350": "Liparopsis", + "1824354": "Liparopsis postalbida", + "1824384": "Shaka", + "1824390": "Shaka mushana", + "1824440": "Hyparpax", + "1824442": "Hyparpax aurora", + "1824449": "Hyparpax aurostriata", + "1824562": "Misogada", + "1824571": "Misogada unicolor", + "1824661": "Gonoclostera", + "1824666": "Gonoclostera timoniorum", + "1824749": "Oligoclona", + "1824751": "Oligoclona chrysolopha", + "1824762": "Chadisra", + "1824766": "Chadisra bipars", + "1824842": "Norracoides", + "1824845": "Norracoides basinotata", + "1824870": "Ursia", + "1824990": "Neocerura", + "1824997": "Neocerura liturata", + "1825057": "Pterostoma", + "1825064": "Pterostoma palpina", + "1825076": "Notodonta", + "1825077": "Notodonta dromedarius", + "1825082": "Notodonta griseotincta", + "1825083": "Notodonta torva", + "1825121": "Cerura", + "1825156": "Cerura vinula", + "1825176": "Cerura erminea", + "1825216": "Litodonta", + "1825218": "Litodonta hydromeli", + "1825235": "Destolmia", + "1825238": "Destolmia lineata", + "1825334": "Netria", + "1825336": "Netria viridescens", + "1825340": "Rosema", + "1825373": "Rosema deolis", + "1825391": "Rosema epigena", + "1825424": "Lochmaeus", + "1825428": "Lochmaeus manteo", + "1825430": "Lochmaeus bilineata", + "1825444": "Drymonia", + "1825535": "Leucodonta", + "1825539": "Leucodonta bicoloria", + "1825551": "Schizura", + "1825734": "Fentonia", + "1825783": "Cnethodonta", + "1825786": "Cnethodonta grisescens", + "1825887": "Pheosiopsis", + "1825919": "Gazalina", + "1825920": "Gazalina transversa", + "1825946": "Aglaosoma", + "1825950": "Aglaosoma variegata", + "1825951": "Ortholomia", + "1825956": "Ortholomia moluccana", + "1825963": "Pheosia", + "1825967": "Pheosia rimosa", + "1825971": "Pheosia gnoma", + "1825983": "Pheosia tremula", + "1826016": "Cynosarga", + "1826017": "Cynosarga ornata", + "1826020": "Chadisra acrobela", + "1826021": "Odontosia", + "1826022": "Odontosia carmelita", + "1826033": "Odontosia sieversii", + "1826045": "Nerice", + "1826048": "Nerice bidentata", + "1826053": "Dasylophia", + "1826058": "Dasylophia anguina", + "1826084": "Dasylophia thyatiroides", + "1826107": "Phalerodonta", + "1826108": "Phalerodonta manleyi", + "1826124": "Ginshachia", + "1826129": "Ginshachia elongata", + "1826153": "Datana", + "1826156": "Datana integerrima", + "1826163": "Datana contracta", + "1826164": "Datana ministra", + "1826167": "Datana major", + "1826169": "Datana perspicua", + "1826172": "Datana diffidens", + "1826173": "Datana angusii", + "1826175": "Datana drexelii", + "1826180": "Didugua", + "1826181": "Didugua argentilinea", + "1826192": "Stauropus", + "1826217": "Symmerista", + "1826222": "Symmerista albifrons", + "1826417": "Libido", + "1826511": "Semidonta", + "1826572": "Heterocampa", + "1826650": "Disphragis", + "1826772": "Disphragis tharis", + "1826821": "Pheraspis", + "1826823": "Pheraspis mesotypa", + "1827099": "Nadata", + "1827103": "Nadata gibbosa", + "1827111": "Gluphisia", + "1827112": "Gluphisia severa", + "1827113": "Gluphisia septentrionis", + "1827125": "Gluphisia crenata", + "1827132": "Gluphisia lintneri", + "1827133": "Gluphisia avimacula", + "1827142": "Anurocampa", + "1827145": "Anurocampa mingens", + "1827158": "Ellida", + "1827161": "Ellida caniplaga", + "1827279": "Ptilophora", + "1827342": "Periergos", + "1827349": "Periergos magna", + "1827405": "Tarsolepis", + "1827408": "Tarsolepis japonica", + "1827414": "Tarsolepis taiwana", + "1827428": "Paradestolmia", + "1827429": "Paradestolmia nigrolinea", + "1827482": "Neopheosia", + "1827484": "Neopheosia fasciata", + "1827506": "Sorama", + "1827507": "Sorama bicolor", + "1827539": "Euhampsonia", + "1827547": "Phalera", + "1827641": "Spatalia", + "1827645": "Spatalia argentina", + "1827649": "Spatalia dives", + "1827650": "Spatalia doerriesi", + "1827686": "Rachiades", + "1827687": "Rachiades lichenicolor", + "1827708": "Formofentonia", + "1827711": "Formofentonia orbifer", + "1827714": "Cargida", + "1827716": "Cargida pyrrha", + "1827772": "Anaphe", + "1827775": "Anaphe reticulata", + "1827798": "Epicoma", + "1827802": "Epicoma contristis", + "1827810": "Epicoma protrahens", + "1827826": "Epicoma melanosticta", + "1827827": "Archigargetta", + "1827829": "Archigargetta amydra", + "1828102": "Notela", + "1828105": "Notela jaliscana", + "1828161": "Ptilodon", + "1828162": "Ptilodon capucina", + "1828180": "Ptilodon saturata", + "1828267": "Theroa", + "1828268": "Theroa zethus", + "1828308": "Oenosandra", + "1828310": "Oenosandra boisduvalii", + "1828314": "Discophlebia", + "1828317": "Discophlebia lucasii", + "1828383": "Dumbletonius", + "1828394": "Wiseana", + "1828395": "Wiseana signata", + "1828400": "Wiseana copularis", + "1828402": "Wiseana cervinata", + "1828406": "Oncopera", + "1828424": "Oncopera rufobrunnea", + "1828425": "Cladoxycanus", + "1828426": "Cladoxycanus minos", + "1828435": "Fraus", + "1828455": "Fraus crocea", + "1828456": "Fraus simulans", + "1828463": "Oxycanus", + "1828471": "Oxycanus dirempta", + "1828491": "Oxycanus beltista", + "1828540": "Oxycanus antipoda", + "1828543": "Oxycanus silvanus", + "1828544": "Oxycanus australis", + "1828574": "Leto", + "1828636": "Hepialus", + "1828637": "Hepialus humuli", + "1828802": "Abantiades", + "1828825": "Aenetus", + "1828826": "Aenetus virescens", + "1828975": "Elhamma", + "1828976": "Elhamma australasiae", + "1829019": "Sthenopis", + "1829021": "Sthenopis purpurascens", + "1829029": "Sthenopis argenteomaculatus", + "1829282": "Philonome", + "1829287": "Philonome clemensella", + "1829298": "Lyonetia", + "1829322": "Lyonetia clerkella", + "1829363": "Lyonetia prunifoliella", + "1829391": "Leucoptera", + "1829472": "Acrolepia", + "1829533": "Acrolepia assectella", + "1829588": "Acrolepia autumnitella", + "1829593": "Eusthenica", + "1829612": "Glyphipterix impigritella", + "1829658": "Lepidotarphius", + "1829659": "Lepidotarphius perornatella", + "1829702": "Glyphipterix", + "1829703": "Glyphipterix meteora", + "1829776": "Glyphipterix simpliciella", + "1829785": "Glyphipterix thrasonella", + "1829799": "Glyphipterix haworthana", + "1829814": "Glyphipterix tungella", + "1829823": "Glyphipterix forsterella", + "1829866": "Glyphipterix chrysoplanetis", + "1829974": "Glyphipterix bergstraesserella", + "1830030": "Eucalantica", + "1830031": "Eucalantica polita", + "1830036": "Zelleria", + "1830098": "Comocritis", + "1830099": "Comocritis albicapilla", + "1830118": "Argyresthia", + "1830122": "Argyresthia retinella", + "1830125": "Argyresthia goedartella", + "1830131": "Argyresthia albistria", + "1830137": "Argyresthia calliphanes", + "1830144": "Argyresthia dilectella", + "1830147": "Argyresthia curvella", + "1830152": "Argyresthia brockeella", + "1830186": "Argyresthia arceuthina", + "1830191": "Argyresthia pruniella", + "1830194": "Argyresthia quadristrigella", + "1830202": "Argyresthia subreticulata", + "1830203": "Argyresthia alternatella", + "1830207": "Argyresthia abdominalis", + "1830221": "Argyresthia cupressella", + "1830229": "Argyresthia austerella", + "1830241": "Argyresthia conjugella", + "1830243": "Argyresthia pygmaeella", + "1830262": "Argyresthia sorbiella", + "1830266": "Argyresthia pulchella", + "1830271": "Argyresthia trifasciata", + "1830284": "Argyresthia thuiella", + "1830293": "Argyresthia aureoargentella", + "1830355": "Swammerdamia", + "1830361": "Swammerdamia caesiella", + "1830372": "Swammerdamia pyrella", + "1830374": "Swammerdamia compunctella", + "1830379": "Yponomeuta", + "1830380": "Yponomeuta evonymella", + "1830407": "Yponomeuta sedella", + "1830408": "Yponomeuta irrorella", + "1830410": "Yponomeuta plumbella", + "1830419": "Yponomeuta paurodes", + "1830435": "Yponomeuta pustulellus", + "1830437": "Yponomeuta fumigata", + "1830442": "Yponomeuta multipunctella", + "1830457": "Yponomeuta rorella", + "1830459": "Yponomeuta strigillata", + "1830497": "Pseudoswammerdamia", + "1830498": "Pseudoswammerdamia combinella", + "1830507": "Paraswammerdamia", + "1830533": "Parahyponomeuta", + "1830534": "Parahyponomeuta egregiella", + "1830535": "Euhyponomeuta", + "1830537": "Euhyponomeuta stannella", + "1830581": "Ocnerostoma", + "1830584": "Ocnerostoma friesei", + "1830630": "Scythropia", + "1830632": "Scythropia crataegella", + "1830657": "Atteva", + "1830669": "Atteva niphocosma", + "1830681": "Atteva aurea", + "1830799": "Cedestis", + "1830802": "Cedestis subfasciella", + "1830812": "Prays nephelomima", + "1830814": "Prays parilis", + "1830838": "Prays ruficeps", + "1830843": "Prays fraxinella", + "1830873": "Eidophasia", + "1830879": "Eidophasia messingiella", + "1830909": "Ypsolophus", + "1830937": "Ypsolophus sequella", + "1830962": "Ypsolophus sylvella", + "1831002": "Ypsolophus ustella", + "1831009": "Ypsolophus asperella", + "1831096": "Doxophyrtis", + "1831097": "Doxophyrtis hydrocosma", + "1831127": "Plutella", + "1831128": "Plutella incarnatella", + "1831136": "Plutella xylostella", + "1831168": "Plutella porrectella", + "1831270": "Leuroperna", + "1831272": "Rhigognostis", + "1831446": "Stathmopoda", + "1831458": "Stathmopoda auriferella", + "1831473": "Stathmopoda skelloni", + "1831499": "Stathmopoda melanochra", + "1831508": "Stathmopoda megathyma", + "1831565": "Stathmopoda aposema", + "1831631": "Stathmopoda stimulata", + "1831643": "Stathmopoda pedella", + "1831655": "Stathmopoda triselena", + "1831667": "Stathmopoda plumbiflua", + "1831720": "Heliodines", + "1831747": "Bedellia", + "1831752": "Bedellia somnulentella", + "1831773": "Euceratia", + "1831775": "Euceratia castella", + "1831776": "Ochsenheimeria", + "1831780": "Ochsenheimeria taurella", + "1831858": "Eurodachtha", + "1831861": "Eurodachtha pallicornella", + "1831863": "Eurodachtha canigella", + "1831868": "Lecithocera", + "1831890": "Lecithocera nigrana", + "1831974": "Lecithocera imprudens", + "1831999": "Lecithocera micromela", + "1832023": "Lecithocera terrigena", + "1832142": "Athymoris", + "1832143": "Athymoris martialis", + "1832151": "Torodora", + "1832233": "Lecitholaxa", + "1832235": "Lecitholaxa thiodora", + "1832247": "Tegenocharis", + "1832248": "Tegenocharis tenebrans", + "1832249": "Tisis", + "1832254": "Tisis mesozosta", + "1832349": "Nosphistica", + "1832512": "Crocanthes", + "1832518": "Crocanthes prasinopis", + "1832533": "Crocanthes perigrapta", + "1832553": "Crocanthes glycina", + "1832569": "Crocanthes micradelpha", + "1832608": "Deltoplastis", + "1832612": "Deltoplastis commatopa", + "1832635": "Scythropiodes", + "1832647": "Sarisophora", + "1832649": "Sarisophora leucoscia", + "1832673": "Homaloxestis", + "1832810": "Elachista", + "1832819": "Elachista bisulcella", + "1832853": "Elachista argentella", + "1832862": "Elachista biatomella", + "1832915": "Elachista adscitella", + "1832927": "Elachista apicipunctella", + "1832936": "Elachista pullicomella", + "1833096": "Elachista pollinariella", + "1833159": "Elachista humilis", + "1833468": "Martyringa", + "1833475": "Martyringa latipennis", + "1833476": "Hoplostega", + "1833477": "Hoplostega ochroma", + "1833495": "Decantha", + "1833497": "Decantha stonda", + "1833499": "Decantha stecia", + "1833500": "Decantha boreasella", + "1833518": "Gymnobathra parca", + "1833523": "Gymnobathra tholodella", + "1833525": "Gymnobathra hyetodes", + "1833531": "Gymnobathra flavidella", + "1833532": "Gymnobathra hamatella", + "1833535": "Gymnobathra omphalota", + "1833539": "Gymnobathra sarcoxantha", + "1833543": "Epicurica", + "1833560": "Hoplomorpha", + "1833562": "Hoplomorpha abalienella", + "1833568": "Olbonoma", + "1833578": "Leptocroca", + "1833600": "Leptocroca sanguinolenta", + "1833623": "Oecophora", + "1833626": "Oecophora bractella", + "1833627": "Oecophora staintoniella", + "1833651": "Leistomorpha", + "1833653": "Leistomorpha brontoscopa", + "1833663": "Chersadaula", + "1833664": "Chersadaula ochrogastra", + "1833778": "Thudaca", + "1833779": "Thudaca campylota", + "1833782": "Thudaca obliquella", + "1833794": "Thudaca haplonota", + "1833818": "Eulechria", + "1833834": "Eulechria rhymodes", + "1834019": "Eulechria atmospila", + "1834078": "Eulechria triferella", + "1834426": "Echiomima", + "1834428": "Echiomima mythica", + "1834431": "Ocystola", + "1834497": "Ocystola paulinella", + "1834515": "Agriophara", + "1834524": "Agriophara confertella", + "1834547": "Agriophara plagiosema", + "1834551": "Thymiatris", + "1834557": "Snellenia", + "1834588": "Goidanichiana", + "1834589": "Goidanichiana jourdheuillella", + "1834598": "Machimia", + "1834710": "Machimia tentoriferella", + "1834737": "Promalactis", + "1834775": "Promalactis mercedella", + "1834792": "Peritropha", + "1834793": "Peritropha oligodrachma", + "1834827": "Coesyra", + "1834850": "Coesyra hemiphragma", + "1834980": "Autosticha calceata", + "1835027": "Dafa", + "1835031": "Dafa oliviella", + "1835064": "Lichenaula", + "1835077": "Sphyrelata", + "1835082": "Sphyrelata amotella", + "1835084": "Hypertropha", + "1835086": "Hypertropha chlaenota", + "1835097": "Formokamaga", + "1835098": "Formokamaga flavopicta", + "1835118": "Tortricopsis", + "1835121": "Tortricopsis uncinella", + "1835123": "Tortricopsis euryphanella", + "1835128": "Tortricopsis pyroptis", + "1835151": "Harpella", + "1835156": "Harpella forficella", + "1835344": "Hapaloteucha", + "1835345": "Hapaloteucha paragramma", + "1835346": "Euprionocera", + "1835348": "Euprionocera geminipuncta", + "1835366": "Schiffermuelleria", + "1835393": "Schiffermuelleria schaefferella", + "1835396": "Schiffermuelleria procerella", + "1835407": "Schiffermuelleria amasiella", + "1835422": "Schiffermuelleria bruandella", + "1835429": "Semioscopis", + "1835430": "Semioscopis merriccella", + "1835432": "Semioscopis steinkellneriana", + "1835433": "Semioscopis oculella", + "1835436": "Semioscopis aurorella", + "1835438": "Semioscopis inornata", + "1835449": "Semioscopis megamicrella", + "1835451": "Semioscopis packardella", + "1835456": "Semioscopis strigulana", + "1835457": "Semioscopis avellanella", + "1835459": "Stoeberhinus", + "1835460": "Stoeberhinus testaceus", + "1835465": "Eupragia", + "1835467": "Eupragia hospita", + "1835499": "Polix", + "1835500": "Polix coloradella", + "1835546": "Chrysonoma", + "1835555": "Chrysonoma fascialis", + "1835599": "Chezala", + "1835609": "Chezala brachypepla", + "1835612": "Chezala privatella", + "1835635": "Chezala osteochroa", + "1835641": "Piloprepes", + "1835644": "Piloprepes antidoxa", + "1835688": "Inga", + "1835789": "Lophopepla", + "1835790": "Lophopepla igniferella", + "1835812": "Enchocrates", + "1835814": "Enchocrates glaucopis", + "1835818": "Bibarrambla", + "1835819": "Bibarrambla allenella", + "1835820": "Machetis", + "1835821": "Machetis aphrobola", + "1835828": "Machetis plagiozona", + "1835832": "Cryptophasa", + "1835848": "Cryptophasa flavolineata", + "1835862": "Cryptophasa irrorata", + "1835874": "Cryptophasa porphyritis", + "1835886": "Cryptophasa albacosta", + "1835897": "Cryptophasa epadelpha", + "1835908": "Cryptophasa rubescens", + "1835928": "Cryptophasa pultenae", + "1836103": "Brymblia", + "1836865": "Antipterna", + "1836870": "Nymphostola", + "1836871": "Nymphostola galactina", + "1836872": "Coeranica", + "1836873": "Coeranica isabella", + "1836898": "Hofmannophila", + "1836899": "Hofmannophila pseudospretella", + "1836903": "Vanicela", + "1836906": "Vanicela xenadelpha", + "1836907": "Vanicela disjunctella", + "1837045": "Hemibela", + "1837050": "Euphiltra", + "1837053": "Euphiltra eroticella", + "1837057": "Euphiltra epilecta", + "1837106": "Gonioterma", + "1837148": "Oxythecta", + "1837150": "Oxythecta acceptella", + "1837159": "Oxythecta hieroglyphica", + "1837168": "Endrosis", + "1837172": "Endrosis sarcitrella", + "1837338": "Depressaria", + "1837343": "Depressaria olerella", + "1837360": "Depressaria alienella", + "1837420": "Depressaria depressana", + "1837429": "Depressaria daucella", + "1837464": "Depressaria sordidatella", + "1837515": "Depressaria emeritella", + "1837568": "Enchronista", + "1837569": "Enchronista proximella", + "1837571": "Proteodes", + "1837572": "Proteodes profunda", + "1837645": "Ashinaga", + "1837646": "Ashinaga longimana", + "1837649": "Palimmeces", + "1837706": "Scieropepla polyxesta", + "1837723": "Phaeosaces", + "1837724": "Phaeosaces coarctatella", + "1837726": "Phaeosaces apocrypta", + "1837727": "Phaeosaces compsotypa", + "1837816": "Tingena", + "1837857": "Tingena clarkei", + "1837870": "Tingena hemimochla", + "1837894": "Tingena chloradelpha", + "1837898": "Mathildana", + "1837900": "Mathildana newmanella", + "1837967": "Barantola", + "1837968": "Barantola pulcherrima", + "1838028": "Antiopala", + "1838034": "Antiopala ebenospila", + "1838044": "Crepidosceles", + "1838053": "Eupselia", + "1838058": "Eupselia beatella", + "1838065": "Eupselia holoxantha", + "1838071": "Eupselia carpocapsella", + "1838074": "Telecrates", + "1838084": "Telecrates laetiorella", + "1838215": "Tisobarica", + "1838218": "Tisobarica eranna", + "1838224": "Tisobarica pyrrhella", + "1838242": "Epithymema", + "1838251": "Barea leucocephala", + "1838255": "Barea nymphica", + "1838276": "Barea eucapnodes", + "1838289": "Barea consignatella", + "1838297": "Barea melanodelta", + "1838304": "Barea confusella", + "1838308": "Barea exarcha", + "1838331": "Barea codrella", + "1838332": "Heteroteucha", + "1838333": "Heteroteucha dichroella", + "1838338": "Antaeotricha", + "1838360": "Antaeotricha haesitans", + "1838465": "Antaeotricha leucillana", + "1838512": "Antaeotricha humilis", + "1838584": "Antaeotricha schlaegeri", + "1838624": "Izatha", + "1838626": "Izatha huttoni", + "1838629": "Izatha attactella", + "1838633": "Izatha convulsella", + "1838635": "Izatha epiphanes", + "1838641": "Izatha peroneanella", + "1838649": "Izatha mesoschista", + "1838665": "Ymeldia", + "1838666": "Ymeldia janae", + "1838691": "Borkhausenia fuscescens", + "1838811": "Borkhausenia nefrax", + "1838838": "Borkhausenia italica", + "1838905": "Borkhausenia cinnamomea", + "1838911": "Borkhausenia minutella", + "1838956": "Tachystola", + "1838958": "Tachystola thiasotis", + "1838960": "Tachystola hemisema", + "1838964": "Luquetia", + "1838969": "Luquetia lobella", + "1838970": "Catoryctis", + "1838978": "Catoryctis subparallela", + "1839010": "Odites", + "1839094": "Odites kollarella", + "1839146": "Odites natalensis", + "1839258": "Exaeretia", + "1839293": "Exaeretia allisella", + "1839296": "Exaeretia ciniflonella", + "1839316": "Zonopetala", + "1839317": "Zonopetala decisana", + "1839323": "Zonopetala clerota", + "1839325": "Zonopetala divisella", + "1839333": "Zonopetala quadripustulella", + "1839361": "Atomotricha", + "1839370": "Atomotricha isogama", + "1839385": "Hieromantis", + "1839396": "Hieromantis ephodophora", + "1839399": "Eido", + "1839480": "Atheropla", + "1839494": "Atheropla decaspila", + "1839559": "Tyrolimnas", + "1839560": "Tyrolimnas anthraconesa", + "1839565": "Arignota", + "1839598": "Plectophila", + "1839600": "Plectophila pyrgodes", + "1839604": "Plectophila discalis", + "1839623": "Lamprystica", + "1839625": "Lamprystica purpurata", + "1839652": "Phylomictis", + "1839658": "Phylomictis maligna", + "1839706": "Eutorna", + "1839714": "Eutorna symmorpha", + "1839721": "Eutorna tricasis", + "1839730": "Pleurota", + "1839770": "Pleurota huebneri", + "1839851": "Pleurota aristella", + "1839878": "Pleurota honorella", + "1839893": "Pleurota bicostella", + "1839906": "Wingia", + "1840063": "Cryptolechia", + "1840223": "Garrha", + "1840257": "Compsotropha", + "1840258": "Compsotropha selenias", + "1840260": "Compsotropha strophiella", + "1840273": "Agonopterix", + "1840297": "Agonopterix heracliana", + "1840301": "Agonopterix propinquella", + "1840311": "Agonopterix canadensis", + "1840345": "Agonopterix angelicella", + "1840346": "Agonopterix alstroemeriana", + "1840360": "Agonopterix nervosa", + "1840371": "Agonopterix curvipunctosa", + "1840379": "Agonopterix curvilineella", + "1840380": "Agonopterix kaekeritziana", + "1840408": "Agonopterix ciliella", + "1840441": "Agonopterix robiniella", + "1840448": "Agonopterix atrodorsella", + "1840478": "Agonopterix subpropinquella", + "1840483": "Agonopterix yeatiana", + "1840485": "Agonopterix conterminella", + "1840520": "Agonopterix lythrella", + "1840543": "Agonopterix clemensella", + "1840553": "Agonopterix argillacea", + "1840555": "Agonopterix liturosa", + "1840566": "Agonopterix hypericella", + "1840570": "Agonopterix purpurea", + "1840581": "Agonopterix arenella", + "1840592": "Agonopterix pulvipennella", + "1840596": "Agonopterix ocellana", + "1840621": "Agonopterix scopariella", + "1840656": "Agonopterix thelmae", + "1840664": "Philobota", + "1840726": "Philobota arabella", + "1840774": "Philobota protecta", + "1840776": "Philobota lysizona", + "1840796": "Philobota stella", + "1840812": "Philobota productella", + "1840844": "Philobota impletella", + "1840974": "Philobota xiphostola", + "1841075": "Psilocorsis", + "1841081": "Psilocorsis cryptolechiella", + "1841084": "Psilocorsis quercicella", + "1841091": "Psilocorsis reflexella", + "1841093": "Compsistis", + "1841095": "Compsistis bifaciella", + "1841100": "Arachnographa", + "1841101": "Arachnographa micrastrella", + "1841152": "Batia", + "1841158": "Batia lambdella", + "1841159": "Batia lunaris", + "1841169": "Trachypepla", + "1841180": "Trachypepla anastrella", + "1841183": "Trachypepla conspicuella", + "1841188": "Trachypepla galaxias", + "1841215": "Trachypepla euryleucota", + "1841219": "Trachypepla contritella", + "1841220": "Ptyoptila", + "1841221": "Ptyoptila matutinella", + "1841259": "Carcina", + "1841261": "Carcina quercana", + "1841294": "Diurnea", + "1841296": "Diurnea fagella", + "1841301": "Archaereta", + "1841302": "Archaereta dorsivittella", + "1841303": "Lepidotarsa", + "1841459": "Enolmis", + "1841460": "Enolmis acanthella", + "1841475": "Parascythris", + "1841476": "Parascythris muelleri", + "1841486": "Eretmocera", + "1841529": "Scythris", + "1841616": "Scythris scopolella", + "1841675": "Scythris empetrella", + "1841706": "Scythris inertella", + "1841764": "Scythris fuscicomella", + "1841782": "Scythris trivinctella", + "1841813": "Scythris limbella", + "1841821": "Scythris cicadella", + "1841946": "Scythris sinensis", + "1841989": "Scythris knochella", + "1842040": "Eralea", + "1842043": "Eralea albalineella", + "1842085": "Pyroderces", + "1842097": "Pyroderces argyrogrammos", + "1842119": "Pyroderces aellotricha", + "1842124": "Pyroderces apparitella", + "1842184": "Sorhagenia", + "1842196": "Sorhagenia rhamniella", + "1842261": "Limnaecia", + "1842436": "Ithome", + "1842446": "Ithome erransella", + "1842479": "Cosmopterix", + "1842485": "Cosmopterix zieglerella", + "1842508": "Cosmopterix attenuatella", + "1842542": "Cosmopterix scribaiella", + "1842684": "Pancalia", + "1842690": "Pancalia nodosella", + "1842695": "Pancalia leuwenhoekella", + "1842699": "Stagmatophora", + "1842803": "Anatrachyntis", + "1842889": "Gisilia", + "1842986": "Haplochrois", + "1843000": "Euclemensia", + "1843313": "Macrobathra chrysotoxa", + "1843326": "Macrobathra bigerella", + "1843331": "Macrobathra desmotoma", + "1843362": "Macrobathra euryleuca", + "1843370": "Macrobathra alternatella", + "1843379": "Macrobathra arrectella", + "1843428": "Glaphyristis", + "1843429": "Glaphyristis marmarea", + "1843441": "Melanocinclis", + "1843444": "Melanocinclis lineigera", + "1843479": "Labdia", + "1843485": "Labdia deliciosella", + "1843564": "Labdia oxychlora", + "1843590": "Labdia chryselectra", + "1843602": "Labdia semicoccinea", + "1843855": "Metriotes", + "1843887": "Homaledra", + "1843888": "Homaledra heptathalama", + "1843889": "Homaledra sabalella", + "1843897": "Coleophora", + "1845266": "Ethmia", + "1845270": "Ethmia bipunctella", + "1845271": "Ethmia sphaerosticha", + "1845279": "Ethmia marmorea", + "1845314": "Ethmia bittenella", + "1845329": "Ethmia discostrigella", + "1845335": "Ethmia hagenella", + "1845368": "Ethmia terminella", + "1845385": "Ethmia delliella", + "1845442": "Ethmia hodgesella", + "1845448": "Ethmia longimaculella", + "1845455": "Ethmia semiombra", + "1845502": "Ethmia monticola", + "1845503": "Ethmia clytodoxa", + "1845513": "Ethmia semilugens", + "1845547": "Ethmia lineatonotella", + "1845548": "Ethmia candidella", + "1845565": "Ethmia dodecea", + "1845574": "Ethmia circumdatella", + "1845586": "Ethmia heptasema", + "1845604": "Ethmia zelleriella", + "1845605": "Ethmia mirusella", + "1845607": "Ethmia pusiella", + "1845616": "Ethmia sabiella", + "1845791": "Gerdana", + "1845793": "Gerdana caritella", + "1845807": "Symmoca", + "1845866": "Symmoca signatella", + "1845950": "Stibaromacha", + "1845952": "Stibaromacha ratella", + "1845958": "Oegoconia", + "1845962": "Oegoconia novimundi", + "1845965": "Oegoconia caradjai", + "1845981": "Symmocoides", + "1845982": "Symmocoides oxybiella", + "1846006": "Glyphidocera", + "1846035": "Glyphidocera lithodoxa", + "1846052": "Glyphidocera lactiflosella", + "1846094": "Mompha", + "1846099": "Mompha circumscriptella", + "1846103": "Mompha albocapitella", + "1846107": "Mompha locupletella", + "1846111": "Mompha subbistrigella", + "1846112": "Mompha epilobiella", + "1846133": "Mompha idaei", + "1846141": "Mompha conturbatella", + "1846149": "Mompha ochraceella", + "1846159": "Mompha propinquella", + "1846190": "Mompha brevivittella", + "1846210": "Mompha lacteella", + "1846219": "Mompha divisella", + "1846229": "Mompha eloisella", + "1846236": "Mompha raschkiella", + "1846239": "Triclonella", + "1846240": "Triclonella pergandeella", + "1846259": "Triclonella bicoloripennis", + "1846261": "Triclonella determinatella", + "1846311": "Frumenta", + "1846313": "Frumenta nundinella", + "1846350": "Holophysis", + "1846351": "Holophysis emblemella", + "1846370": "Epidola", + "1846374": "Epidola stigma", + "1846392": "Ornativalva", + "1846439": "Ornativalva erubescens", + "1846480": "Taygete", + "1846505": "Taygete attributella", + "1846510": "Telphusa", + "1846586": "Pexicopia", + "1846604": "Pexicopia malvella", + "1846636": "Monochroa", + "1846657": "Monochroa cytisella", + "1846715": "Monochroa lucidella", + "1846729": "Monochroa tenebrella", + "1846848": "Stegasta", + "1846849": "Stegasta bosqueella", + "1846858": "Stegasta variana", + "1846860": "Stegasta capitella", + "1846907": "Dichomeris", + "1846914": "Dichomeris aglaia", + "1846916": "Dichomeris juniperella", + "1846941": "Dichomeris punctidiscellus", + "1846945": "Dichomeris setosella", + "1846971": "Dichomeris juncidella", + "1846992": "Dichomeris ventrellus", + "1847013": "Dichomeris costarufoella", + "1847059": "Dichomeris copa", + "1847061": "Dichomeris limosellus", + "1847062": "Dichomeris oxycarpa", + "1847064": "Dichomeris vacciniella", + "1847066": "Dichomeris capnites", + "1847068": "Dichomeris inversella", + "1847097": "Dichomeris ustalella", + "1847111": "Dichomeris acuminatus", + "1847149": "Dichomeris inserrata", + "1847157": "Dichomeris sandycitis", + "1847225": "Dichomeris furia", + "1847249": "Dichomeris ligulella", + "1847260": "Dichomeris ochthophora", + "1847274": "Dichomeris bilobella", + "1847308": "Dichomeris ochripalpella", + "1847343": "Dichomeris flavocostella", + "1847392": "Dichomeris heriguronis", + "1847407": "Dichomeris marginella", + "1847426": "Dichomeris nonstrigella", + "1847457": "Dichomeris simpliciella", + "1847484": "Dichomeris kimballi", + "1847498": "Dichomeris punctipennella", + "1847533": "Isophrictis", + "1847568": "Isophrictis similiella", + "1847572": "Isophrictis striatella", + "1847591": "Anarsia", + "1847622": "Anarsia molybdota", + "1847639": "Anarsia epiula", + "1847641": "Anarsia patulella", + "1847866": "Sinoe", + "1847914": "Battaristis", + "1847919": "Battaristis vittella", + "1847930": "Battaristis nigratomella", + "1847944": "Battaristis concinnusella", + "1847952": "Parachronistis", + "1847956": "Parachronistis albiceps", + "1847974": "Agnippe", + "1848019": "Palumbina", + "1848113": "Untomia", + "1848114": "Untomia albistrigella", + "1848149": "Psoricoptera", + "1848150": "Psoricoptera gibbosella", + "1848192": "Ptocheuusa", + "1848202": "Ptocheuusa paupella", + "1848212": "Pseudochelaria pennsylvanica", + "1848213": "Pseudochelaria walsinghami", + "1848217": "Aproaerema", + "1848219": "Aproaerema anthyllidella", + "1848253": "Anacampsis", + "1848259": "Anacampsis paltodoriella", + "1848272": "Anacampsis fullonella", + "1848273": "Anacampsis populella", + "1848274": "Anacampsis agrimoniella", + "1848295": "Anacampsis levipedella", + "1848312": "Anacampsis niveopulvella", + "1848322": "Anacampsis tristrigella", + "1848325": "Anacampsis coverdalella", + "1848356": "Anacampsis blattariella", + "1848374": "Brachmia", + "1848378": "Brachmia dimidiella", + "1848426": "Brachmia inornatella", + "1848475": "Filatima", + "1848490": "Filatima albilorella", + "1848505": "Filatima neotrophella", + "1848582": "Recurvaria", + "1848596": "Recurvaria leucatella", + "1848610": "Recurvaria nanella", + "1848634": "Exoteleia", + "1848636": "Exoteleia dodecella", + "1848639": "Exoteleia pinifoliella", + "1848655": "Cosmardia", + "1848657": "Cosmardia moritzella", + "1848660": "Neofaculta", + "1848669": "Neofaculta ericetella", + "1848677": "Bryotropha", + "1848690": "Bryotropha terrella", + "1848713": "Bryotropha senectella", + "1848714": "Bryotropha affinis", + "1848717": "Bryotropha basaltinella", + "1848730": "Bryotropha similis", + "1848741": "Bryotropha domestica", + "1848753": "Bryotropha galbanella", + "1848843": "Metzneria", + "1848864": "Metzneria lappella", + "1848868": "Metzneria metzneriella", + "1848920": "Prolita sexpunctella", + "1849005": "Anisoplaca", + "1849007": "Anisoplaca cosmia", + "1849010": "Anisoplaca achyrota", + "1849103": "Apodia", + "1849104": "Apodia bifractella", + "1849117": "Calliprora", + "1849249": "Tituacia", + "1849256": "Carpatolechia", + "1849267": "Carpatolechia proximella", + "1849273": "Carpatolechia decorella", + "1849284": "Carpatolechia alburnella", + "1849294": "Carpatolechia fugitivella", + "1849449": "Deltophora", + "1849457": "Deltophora sella", + "1849470": "Deltophora glandiferella", + "1849474": "Nothris", + "1849477": "Nothris verbascella", + "1849498": "Xenolechia ontariensis", + "1849514": "Oxypteryx", + "1849528": "Stomopteryx", + "1849531": "Stomopteryx remissella", + "1849539": "Stomopteryx basalis", + "1849552": "Stomopteryx detersella", + "1849628": "Teleiopsis", + "1849630": "Teleiopsis diffinis", + "1849652": "Tricyanaula", + "1849656": "Tricyanaula aurantiaca", + "1849663": "Scrobipalpa", + "1849856": "Scrobipalpa atriplicella", + "1849897": "Scrobipalpa costella", + "1849924": "Scrobipalpa ocellatella", + "1849983": "Sophronia", + "1850008": "Sophronia semicostella", + "1850022": "Caryocolum", + "1850042": "Caryocolum pullatella", + "1850045": "Caryocolum cassella", + "1850076": "Caryocolum vicinella", + "1850077": "Caryocolum marmorea", + "1850106": "Caryocolum fraternella", + "1850144": "Symmetrischema", + "1850156": "Symmetrischema tangolias", + "1850184": "Symmetrischema striatella", + "1850224": "Faculta", + "1850225": "Faculta inaequalis", + "1850231": "Teleiodes", + "1850238": "Teleiodes vulgella", + "1850246": "Teleiodes luculella", + "1850276": "Gelechia", + "1850279": "Gelechia senticetella", + "1850302": "Gelechia nigra", + "1850321": "Gelechia lynceella", + "1850335": "Gelechia sororculella", + "1850386": "Gelechia muscosella", + "1850394": "Gelechia rhombella", + "1850450": "Gelechia sabinellus", + "1850463": "Ardozyga abruptella", + "1850474": "Pseudotelphusa", + "1850497": "Pseudotelphusa tessella", + "1850506": "Pseudotelphusa scalella", + "1850521": "Argolamprotes", + "1850522": "Argolamprotes micella", + "1850525": "Helcystogramma", + "1850533": "Helcystogramma lutatella", + "1850538": "Helcystogramma rufescens", + "1850570": "Helcystogramma triannulella", + "1850575": "Helcystogramma chambersella", + "1850585": "Helcystogramma melantherella", + "1850589": "Helcystogramma fernaldella", + "1850597": "Helcystogramma hystricella", + "1850633": "Helcystogramma hibisci", + "1850640": "Helcystogramma lamprostoma", + "1850669": "Theisoa", + "1850673": "Theisoa constrictella", + "1850689": "Stereomita", + "1850690": "Stereomita andropogonis", + "1850721": "Friseria", + "1850722": "Friseria cockerelli", + "1850729": "Friseria acaciella", + "1850762": "Macrenches", + "1850764": "Macrenches clerica", + "1850769": "Fascista", + "1850771": "Fascista cercerisella", + "1850773": "Fascista bimaculella", + "1850774": "Fascista quinella", + "1850777": "Platyedra", + "1850781": "Platyedra subcinerea", + "1850790": "Mesophleps", + "1850798": "Mesophleps adustipennis", + "1850865": "Chionodes", + "1850868": "Chionodes discoocellella", + "1850884": "Chionodes dentella", + "1850908": "Chionodes mediofuscella", + "1850922": "Chionodes mariona", + "1850923": "Chionodes thoraceochrella", + "1850962": "Chionodes fondella", + "1850971": "Chionodes viduella", + "1851000": "Chionodes continuella", + "1851002": "Chionodes pereyra", + "1851010": "Chionodes electella", + "1851011": "Chionodes lugubrella", + "1851038": "Chaliniastis", + "1851039": "Chaliniastis astrapaea", + "1851049": "Aristotelia", + "1851201": "Neofriseria", + "1851203": "Neofriseria peliella", + "1851212": "Aroga", + "1851213": "Aroga compositella", + "1851220": "Aroga velocella", + "1851237": "Aroga paraplutella", + "1851243": "Aroga morenella", + "1851293": "Arogalea", + "1851300": "Arogalea cristifasciella", + "1851305": "Epiphthora", + "1851334": "Chrysoesthia", + "1851337": "Chrysoesthia sexguttella", + "1851347": "Chrysoesthia drurella", + "1851406": "Coleotechnites", + "1851453": "Coleotechnites florae", + "1851462": "Coleotechnites atrupictella", + "1851496": "Hypatima", + "1851543": "Hypatima spathota", + "1851555": "Hypatima rhomboidella", + "1851662": "Gnorimoschema", + "1851670": "Gnorimoschema baccharisella", + "1851714": "Gnorimoschema gallaesolidaginis", + "1851750": "Gnorimoschema saphirinella", + "1851754": "Athrips", + "1851826": "Polyhymno", + "1851828": "Polyhymno acaciella", + "1851845": "Polyhymno luteostrigella", + "1852064": "Altenia", + "1852133": "Mirificarma", + "1852150": "Mirificarma mulinella", + "1852159": "Mirificarma interrupta", + "1852165": "Mirificarma eburnella", + "1852176": "Acompsia", + "1852177": "Acompsia cinerella", + "1852212": "Thiotricha", + "1852292": "Thiotricha atractodes", + "1852311": "Thiotricha subocellea", + "1852315": "Strobisia", + "1852320": "Strobisia proserpinella", + "1852327": "Coconympha", + "1852379": "Neodactylota", + "1852382": "Neodactylota liguritrix", + "1852416": "Stenolechia", + "1852430": "Stenolechia gemmella", + "1852499": "Walshia", + "1852745": "Blastobasis", + "1852751": "Blastobasis phycidella", + "1852787": "Blastobasis lacticolella", + "1852831": "Blastobasis adustella", + "1852832": "Blastobasis tarda", + "1852859": "Blastobasis scotia", + "1852897": "Holcocerina", + "1852901": "Holcocerina immaculella", + "1852917": "Batrachedra", + "1852956": "Batrachedra praeangusta", + "1852978": "Batrachedra pinicolella", + "1853060": "Blastodacna", + "1853064": "Blastodacna atra", + "1853074": "Chrysoclista", + "1853079": "Chrysoclista flavicaput", + "1853161": "Microcolona", + "1853190": "Microcolona limodes", + "1853220": "Azaleodes", + "1853222": "Azaleodes micronipha", + "1853239": "Arrhenophanes", + "1853242": "Arrhenophanes perspicilla", + "1853306": "Thyridopteryx", + "1853312": "Thyridopteryx ephemeraeformis", + "1853431": "Pachythelia", + "1853516": "Metura", + "1853563": "Conoeca", + "1853578": "Conoeca guildingi", + "1853583": "Sterrhopterix", + "1853587": "Sterrhopterix fusca", + "1853643": "Lomera", + "1853721": "Lypusa", + "1853723": "Lypusa maurella", + "1853850": "Ardiosteres", + "1853855": "Ardiosteres moretonella", + "1853873": "Narycia", + "1854016": "Hyalarcta", + "1854019": "Hyalarcta huebneri", + "1854021": "Hyalarcta nigrescens", + "1854023": "Lepidoscia", + "1854028": "Lepidoscia lainodes", + "1854108": "Cryptothelea", + "1854143": "Cryptothelea gloverii", + "1854160": "Psyche", + "1854202": "Psyche casta", + "1854237": "Bankesia conspurcatella", + "1854245": "Cebysa", + "1854249": "Cebysa leucotelus", + "1854255": "Penestoglossa", + "1854259": "Penestoglossa dardoinella", + "1854280": "Luffia", + "1854287": "Luffia ferchaultella", + "1854326": "Epichnopterix", + "1854347": "Epichnopterix plumella", + "1854387": "Eumeta", + "1854459": "Canephora", + "1854565": "Clania", + "1854610": "Placodoma", + "1854615": "Placodoma ragonoti", + "1854789": "Proutia", + "1854792": "Proutia betulina", + "1854815": "Bijugis", + "1854824": "Bijugis bombycella", + "1854845": "Taleporia", + "1854849": "Taleporia tubulosa", + "1854905": "Liothula", + "1854906": "Liothula omnivora", + "1854910": "Amydria", + "1854920": "Amydria effrentella", + "1854934": "Acrolophus", + "1855231": "Deuterotinea", + "1855235": "Deuterotinea paradoxella", + "1855241": "Deuterotinea casanella", + "1855355": "Xylesthia", + "1855358": "Xylesthia pruniramiella", + "1855383": "Oinophila", + "1855394": "Perissomastix", + "1855452": "Perissomastix agenjoi", + "1855624": "Coryptilum", + "1855630": "Coryptilum rutilella", + "1855745": "Machaeropteris", + "1855747": "Machaeropteris petalacma", + "1855776": "Anomalotinea", + "1855799": "Anomalotinea liguriella", + "1855800": "Moerarchis", + "1855804": "Moerarchis inconcisella", + "1855807": "Moerarchis australasiella", + "1855813": "Moerarchis clathrata", + "1855955": "Thisizima", + "1856000": "Niditinea", + "1856005": "Niditinea fuscella", + "1856086": "Myrmecozela", + "1856105": "Myrmecozela ataxella", + "1856274": "Lindera", + "1856286": "Euplocamus", + "1856289": "Euplocamus anthracinalis", + "1856344": "Parochmastis", + "1856348": "Parochmastis hilderi", + "1856367": "Isocorypha", + "1856368": "Isocorypha mediostriatella", + "1856373": "Sagephora", + "1856374": "Sagephora phortegella", + "1856382": "Montescardia", + "1856384": "Montescardia tessulatellus", + "1856393": "Hybroma", + "1856394": "Hybroma servulella", + "1856417": "Infurcitinea", + "1856503": "Infurcitinea atrifasciella", + "1856514": "Eschatotypa", + "1856516": "Eschatotypa derogatella", + "1856554": "Homostinea", + "1856555": "Homostinea curviliniella", + "1856563": "Adela", + "1856580": "Dyotopasta", + "1856581": "Dyotopasta yumaella", + "1856586": "Neurothaumasia", + "1856595": "Neurothaumasia ankerella", + "1856615": "Archinemapogon", + "1856620": "Archinemapogon yildizae", + "1856631": "Alucita", + "1856650": "Nemapogon", + "1856658": "Nemapogon nigralbella", + "1856663": "Nemapogon nevadella", + "1856668": "Nemapogon cloacella", + "1856686": "Nemapogon variatella", + "1856691": "Nemapogon koenigi", + "1856701": "Nemapogon granella", + "1856720": "Nemapogon multistriatella", + "1856730": "Nemapogon clematella", + "1856766": "Triaxomera", + "1856768": "Triaxomera fulvimitrella", + "1856772": "Triaxomera parasitella", + "1856845": "Morophaga", + "1856867": "Morophaga choragella", + "1856880": "Dryadaula", + "1856891": "Dryadaula terpsichorella", + "1856893": "Dryadaula pactolia", + "1856949": "Tinissa", + "1856971": "Tinissa indica", + "1857014": "Opogona", + "1857020": "Opogona stereodyta", + "1857033": "Opogona stenocraspeda", + "1857068": "Opogona sacchari", + "1857097": "Opogona protodoxa", + "1857143": "Opogona omoscopa", + "1857180": "Opogona comptella", + "1857207": "Crypsitricha", + "1857213": "Crypsitricha mesotypa", + "1857231": "Erechthias", + "1857233": "Erechthias capnitis", + "1857241": "Erechthias chionodira", + "1857258": "Erechthias simulans", + "1857267": "Erechthias atririvis", + "1857295": "Erechthias stilbella", + "1857315": "Erechthias diaphora", + "1857380": "Erechthias zebrina", + "1857385": "Erechthias fulguritella", + "1857410": "Erechthias terminella", + "1857569": "Trichophaga", + "1857577": "Trichophaga tapetzella", + "1857581": "Trichophaga bipartitella", + "1857624": "Tineola", + "1857626": "Tineola bisselliella", + "1857689": "Diachorisia", + "1857690": "Diachorisia velatella", + "1857773": "Nemaxera", + "1857782": "Reisserita", + "1857785": "Reisserita chrysopterella", + "1857808": "Scardiella", + "1857809": "Scardiella approximatella", + "1857825": "Monopis", + "1857828": "Monopis monachella", + "1857829": "Monopis crocicapitella", + "1857840": "Monopis meliorella", + "1857856": "Monopis weaverella", + "1857863": "Monopis laevigella", + "1857878": "Monopis obviella", + "1857882": "Monopis icterogastra", + "1857900": "Monopis argillacea", + "1857918": "Monopis dorsistrigella", + "1857924": "Monopis spilotella", + "1857935": "Monopis ethelella", + "1857938": "Monopis longella", + "1857945": "Monopis marginistrigella", + "1857948": "Monopis chrysogramma", + "1857968": "Scardia", + "1857973": "Scardia anatomella", + "1857978": "Scardia boletella", + "1858055": "Tinea", + "1858074": "Tinea semifulvella", + "1858100": "Tinea pallescentella", + "1858113": "Tinea trinotella", + "1858163": "Tinea pellionella", + "1858281": "Phereoeca", + "1858283": "Phereoeca uterella", + "1858294": "Mea", + "1858313": "Ateliotum", + "1858321": "Ateliotum hungaricellum", + "1858396": "Edosa", + "1858404": "Edosa xystidophora", + "1858411": "Edosa fraudulens", + "1858488": "Edosa purella", + "1858522": "Lysiphragma", + "1858523": "Lysiphragma epixyla", + "1858526": "Lysiphragma howesii", + "1858529": "Stenoptinea", + "1858531": "Stenoptinea cyaneimarmorella", + "1858556": "Pyloetis", + "1858557": "Pyloetis mimosae", + "1858614": "Anstenoptilia", + "1858615": "Anstenoptilia marmarodactyla", + "1858636": "Cnaemidophorus", + "1858637": "Cnaemidophorus rhododactyla", + "1858640": "Pselnophorus", + "1858658": "Dejongia", + "1858659": "Dejongia californicus", + "1858660": "Dejongia lobidactylus", + "1858672": "Lantanophaga", + "1858674": "Lantanophaga pusillidactylus", + "1858684": "Adaina", + "1858698": "Adaina microdactyla", + "1858706": "Adaina ambrosiae", + "1858716": "Hexadactilia", + "1858718": "Hexadactilia civilis", + "1858722": "Stenoptilia", + "1858762": "Stenoptilia zophodactylus", + "1858775": "Stenoptilia pterodactyla", + "1858778": "Stenoptilia bipunctidactyla", + "1858866": "Oxyptilus", + "1858873": "Oxyptilus pilosellae", + "1858921": "Megalorhipida", + "1858930": "Megalorhipida leucodactylus", + "1858971": "Cosmoclostis", + "1858973": "Cosmoclostis aglaodesma", + "1859036": "Emmelina", + "1859046": "Emmelina monodactyla", + "1859059": "Stangeia", + "1859061": "Stangeia xerodes", + "1859070": "Singularia", + "1859082": "Platyptilia", + "1859100": "Platyptilia calodactyla", + "1859161": "Platyptilia carduidactylus", + "1859177": "Platyptilia gonodactyla", + "1859284": "Amblyptilia", + "1859285": "Amblyptilia acanthadactyla", + "1859287": "Amblyptilia pica", + "1859305": "Amblyptilia punctidactyla", + "1859311": "Lioptilodes", + "1859451": "Diacrotricha", + "1859453": "Diacrotricha fasciola", + "1859454": "Hellinsia", + "1859471": "Hellinsia didactylites", + "1859480": "Hellinsia osteodactylus", + "1859488": "Hellinsia tephradactyla", + "1859503": "Marasmarcha", + "1859534": "Marasmarcha lunaedactyla", + "1859540": "Nippoptilia", + "1859547": "Exelastis", + "1859925": "Sphenarches", + "1859929": "Sphenarches ontario", + "1859932": "Sphenarches anisodactylus", + "1859936": "Oidaematophorus", + "1859952": "Oidaematophorus lithodactyla", + "1860010": "Stenoptilodes", + "1860026": "Stenoptilodes taprobanes", + "1860060": "Crombrugghia", + "1860063": "Crombrugghia distans", + "1860076": "Crombrugghia tristis", + "1860106": "Wockia", + "1860108": "Wockia asperipunctella", + "1860109": "Urodus", + "1860118": "Urodus parvula", + "1860181": "Brenthia", + "1860184": "Brenthia pavonacella", + "1860256": "Saptha", + "1860259": "Saptha exanthista", + "1860260": "Saptha libanota", + "1860261": "Saptha beryllitis", + "1860274": "Saptha divitiosa", + "1860403": "Prochoreutis", + "1860408": "Prochoreutis myllerana", + "1860411": "Tortyra", + "1860443": "Tortyra slossonia", + "1860613": "Lampronia", + "1860621": "Lampronia praelatella", + "1860628": "Lampronia oehlmanniella", + "1860657": "Incurvaria", + "1860659": "Incurvaria rupella", + "1860664": "Incurvaria corticella", + "1860668": "Incurvaria flavimitrella", + "1860671": "Incurvaria koerneriella", + "1860688": "Incurvaria pectinea", + "1860709": "Incurvaria luzella", + "1860711": "Incurvaria capitella", + "1860720": "Phylloporia", + "1860732": "Paraclemensia", + "1860736": "Paraclemensia acerifoliella", + "1860765": "Nemophora fasciella", + "1860768": "Nemophora degeerella", + "1860849": "Nemophora laurella", + "1860852": "Nemophora cupriacella", + "1860857": "Nemophora raddaella", + "1860974": "Adela caeruleella", + "1860979": "Adela croesella", + "1860983": "Adela cuprella", + "1860987": "Adela reaumurella", + "1860989": "Adela ridingsella", + "1860993": "Adela flammeusella", + "1860994": "Adela orientella", + "1860996": "Adela trigrapha", + "1861011": "Adela australis", + "1861030": "Adela septentrionella", + "1861031": "Adela violella", + "1861151": "Nematopogon", + "1861387": "Endromis", + "1861395": "Endromis versicolora", + "1861408": "Phryxus", + "1861428": "Basiothia", + "1861433": "Basiothia medea", + "1861448": "Psilogramma", + "1861451": "Psilogramma discistriga", + "1861456": "Psilogramma increta", + "1861457": "Psilogramma menephron", + "1861458": "Psilogramma casuarinae", + "1861476": "Unzela", + "1861479": "Unzela japix", + "1861483": "Acherontia", + "1861488": "Acherontia lachesis", + "1861494": "Acherontia styx", + "1861510": "Acherontia atropos", + "1861521": "Odontosida", + "1861522": "Odontosida pusillus", + "1861543": "Coelonia", + "1861544": "Coelonia fulvinotata", + "1861552": "Perigonia", + "1861559": "Perigonia lusca", + "1861578": "Rufoclanis", + "1861584": "Rufoclanis numosae", + "1861592": "Rufoclanis rosea", + "1861601": "Dolba", + "1861604": "Dolba hyloeus", + "1861607": "Agrius", + "1861644": "Agrius convolvuli", + "1861659": "Marumba", + "1861663": "Marumba saishiuana", + "1861665": "Marumba sperchius", + "1861673": "Marumba quercus", + "1861697": "Marumba echephron", + "1861705": "Marumba gaschkewitschii", + "1861714": "Marumba cristata", + "1861721": "Marumba dyras", + "1861757": "Sphecodina", + "1861759": "Sphecodina abbottii", + "1861768": "Cocytius", + "1861773": "Cocytius duponchel", + "1861783": "Cocytius lucifer", + "1861784": "Cocytius antaeus", + "1861796": "Hemaris", + "1861797": "Hemaris fuciformis", + "1861823": "Hemaris thetis", + "1861834": "Hemaris gracilis", + "1861836": "Hemaris diffinis", + "1861842": "Hemaris croatica", + "1861851": "Hemaris thysbe", + "1861862": "Hemaris tityus", + "1861878": "Ceratomia", + "1861887": "Ceratomia undulosa", + "1861892": "Ceratomia catalpae", + "1861893": "Ceratomia hageni", + "1861897": "Langia", + "1861930": "Acosmeryx", + "1861933": "Acosmeryx shervillii", + "1861936": "Acosmeryx sericeus", + "1861937": "Acosmeryx pseudonaga", + "1861938": "Acosmeryx castanea", + "1861949": "Acosmeryx naga", + "1861951": "Acosmeryx anceus", + "1861953": "Acosmeryx cinnamomea", + "1861958": "Acosmeryx miskini", + "1861962": "Euryglottis", + "1861967": "Euryglottis aper", + "1861971": "Daphnusa", + "1861975": "Daphnusa ocellaris", + "1861997": "Meganoton", + "1862008": "Meganoton nyctiphanes", + "1862020": "Gnathothlibus", + "1862026": "Gnathothlibus eras", + "1862031": "Callionima", + "1862033": "Callionima nomius", + "1862044": "Callionima falcifera", + "1862046": "Callionima grisescens", + "1862047": "Callionima inuus", + "1862049": "Callionima parce", + "1862058": "Dolbina", + "1862061": "Dolbina inexacta", + "1862066": "Dolbina formosana", + "1862072": "Dolbina tancrei", + "1862076": "Xylophanes", + "1862078": "Xylophanes anubus", + "1862083": "Xylophanes crotonis", + "1862087": "Xylophanes ceratomioides", + "1862088": "Xylophanes porcus", + "1862091": "Xylophanes zurcheri", + "1862094": "Xylophanes titana", + "1862096": "Xylophanes loelia", + "1862123": "Xylophanes chiron", + "1862129": "Xylophanes falco", + "1862139": "Xylophanes belti", + "1862163": "Xylophanes thyelia", + "1862181": "Xylophanes pluto", + "1862198": "Xylophanes tersa", + "1862207": "Xylophanes tyndarus", + "1862225": "Xylophanes pyrrhus", + "1862247": "Clanis", + "1862280": "Oryba", + "1862288": "Hippotion", + "1862293": "Hippotion celerio", + "1862311": "Hippotion eson", + "1862331": "Hippotion scrofa", + "1862363": "Hippotion rosetta", + "1862370": "Hippotion velox", + "1862391": "Daphnis", + "1862394": "Daphnis hypothous", + "1862401": "Daphnis nerii", + "1862403": "Daphnis placida", + "1862414": "Daphnis dohertyi", + "1862420": "Theretra", + "1862430": "Theretra clotho", + "1862433": "Theretra capensis", + "1862434": "Theretra tryoni", + "1862441": "Theretra margarita", + "1862449": "Theretra oldenlandiae", + "1862454": "Theretra pallicosta", + "1862455": "Theretra queenslandi", + "1862468": "Theretra boisduvalii", + "1862475": "Theretra nessus", + "1862481": "Theretra lucasi", + "1862516": "Theretra silhetensis", + "1862517": "Theretra alecto", + "1862521": "Theretra celata", + "1862526": "Theretra latreillii", + "1862542": "Protambulyx", + "1862547": "Protambulyx strigilis", + "1862551": "Protambulyx eurycles", + "1862560": "Amplypterus", + "1862568": "Smerinthus", + "1862569": "Smerinthus jamaicensis", + "1862572": "Smerinthus caecus", + "1862578": "Smerinthus ocellatus", + "1862580": "Smerinthus ocellata", + "1862595": "Smerinthus saliceti", + "1862624": "Smerinthus cerisyi", + "1862655": "Amphimoea", + "1862658": "Amphimoea walkeri", + "1862681": "Hyles", + "1862692": "Hyles tithymali", + "1862701": "Hyles vespertilio", + "1862719": "Hyles euphorbiae", + "1862757": "Hyles livornicoides", + "1862765": "Hyles livornica", + "1862774": "Hyles hippophaes", + "1862805": "Hyles annei", + "1862837": "Hyles gallii", + "1862841": "Hyles lineata", + "1862874": "Hyles euphorbiarum", + "1862894": "Hyles dahlii", + "1862914": "Lapara", + "1862916": "Lapara coniferarum", + "1862917": "Lapara bombycoides", + "1862922": "Cautethia", + "1862923": "Cautethia spuria", + "1862928": "Cautethia grotei", + "1862988": "Oligographa", + "1862989": "Oligographa juniperi", + "1863017": "Pachysphinx", + "1863021": "Pachysphinx occidentalis", + "1863025": "Pachysphinx modesta", + "1863031": "Cephonodes", + "1863034": "Cephonodes hylas", + "1863051": "Cephonodes kingii", + "1863074": "Darapsa", + "1863075": "Darapsa versicolor", + "1863080": "Darapsa choerilus", + "1863088": "Darapsa myron", + "1863091": "Amorpha", + "1863101": "Aleuron", + "1863109": "Aleuron chloroptera", + "1863132": "Nyceryx", + "1863143": "Nyceryx hyposticta", + "1863151": "Nyceryx riscus", + "1863163": "Isognathus", + "1863281": "Euchloron", + "1863282": "Euchloron megaera", + "1863292": "Mimas", + "1863349": "Pentateucha", + "1863351": "Angonyx", + "1863354": "Angonyx testacea", + "1863363": "Pseudosphinx", + "1863366": "Pseudosphinx tetrio", + "1863382": "Coequosa", + "1863384": "Coequosa triangularis", + "1863385": "Enpinanga", + "1863388": "Enpinanga borneensis", + "1863394": "Enpinanga assamensis", + "1863395": "Paonias", + "1863405": "Paonias astylus", + "1863407": "Paonias myops", + "1863411": "Neococytius", + "1863412": "Neococytius cluentius", + "1863413": "Madoryx", + "1863416": "Madoryx oiclus", + "1863426": "Madoryx plutonius", + "1863457": "Cechenena", + "1863467": "Cechenena helops", + "1863486": "Temnora", + "1863544": "Temnora pylas", + "1863583": "Paratrea", + "1863584": "Paratrea plebeja", + "1863638": "Lophostethus", + "1863640": "Lophostethus dumolinii", + "1863644": "Elibia", + "1863646": "Elibia dolichus", + "1863647": "Laothoe", + "1863693": "Amphion", + "1863697": "Hemeroplanes", + "1863699": "Hemeroplanes triptolemus", + "1863701": "Hemeroplanes ornatus", + "1863702": "Pachylioides", + "1863706": "Pachylioides resumens", + "1863713": "Adhemarius", + "1863714": "Adhemarius gannascus", + "1863724": "Adhemarius palmeri", + "1863732": "Adhemarius ypsilon", + "1863734": "Adhemarius dariensis", + "1863735": "Adhemarius sexoculata", + "1863742": "Adhemarius daphne", + "1863750": "Adhemarius eurysthenes", + "1863752": "Dahira", + "1863755": "Eupyrrhoglossum", + "1863757": "Eupyrrhoglossum sagra", + "1863825": "Deidamia", + "1863827": "Ampelophaga", + "1863829": "Ampelophaga rubiginosa", + "1863846": "Phyllosphingia", + "1863848": "Phyllosphingia dissimilis", + "1863852": "Pachylia", + "1863856": "Pachylia ficus", + "1863858": "Pachylia darceta", + "1863864": "Pachylia syces", + "1863877": "Eupanacra", + "1863880": "Eupanacra splendens", + "1863907": "Eupanacra regularis", + "1863909": "Eupanacra busiris", + "1863910": "Eupanacra mydon", + "1863924": "Eupanacra variolosa", + "1863936": "Batocnema", + "1863942": "Pergesa", + "1863944": "Pergesa acteus", + "1863953": "Tetrachroa", + "1863955": "Tetrachroa edwardsi", + "1863956": "Acosmerycoides", + "1863978": "Manduca sexta", + "1863982": "Manduca brontes", + "1864004": "Manduca florestan", + "1864008": "Manduca quinquemaculatus", + "1864021": "Manduca rustica", + "1864046": "Manduca occulta", + "1864058": "Manduca albiplaga", + "1864068": "Manduca hannibal", + "1864070": "Manduca muscosa", + "1864084": "Manduca diffissa", + "1864090": "Manduca jasminearum", + "1864098": "Manduca lefeburii", + "1864103": "Manduca paphus", + "1864106": "Manduca schausi", + "1864124": "Parum", + "1864126": "Parum colligata", + "1864132": "Megacorma", + "1864135": "Megacorma obliqua", + "1864141": "Cizara", + "1864153": "Proserpinus", + "1864156": "Proserpinus clarkiae", + "1864161": "Proserpinus proserpina", + "1864164": "Proserpinus terlooii", + "1864165": "Proserpinus flavofasciata", + "1864203": "Isoparce", + "1864204": "Isoparce cupressi", + "1864258": "Nephele", + "1864315": "Erinnyis", + "1864316": "Erinnyis ello", + "1864320": "Erinnyis alope", + "1864321": "Erinnyis lassauxi", + "1864328": "Erinnyis yucatana", + "1864329": "Erinnyis crameri", + "1864352": "Erinnyis obscura", + "1864355": "Deilephila", + "1864358": "Deilephila porcellus", + "1864377": "Deilephila elpenor", + "1864404": "Sphinx", + "1864537": "Enyo", + "1864562": "Pseudoclanis", + "1864576": "Pseudoclanis postica", + "1864584": "Macroglossum", + "1864652": "Macroglossum stellatarum", + "1864760": "Aellopos", + "1864782": "Callambulyx", + "1864793": "Callambulyx tatarinovii", + "1864796": "Callambulyx rubricosa", + "1864813": "Coloradia", + "1864888": "Coscinocera", + "1864897": "Coscinocera hercules", + "1864901": "Syssphinx", + "1864905": "Syssphinx molina", + "1865097": "Eacles", + "1865102": "Eacles oslari", + "1865107": "Eacles imperialis", + "1865108": "Eacles ormondei", + "1865120": "Eacles ducalis", + "1865132": "Eacles penelope", + "1865294": "Hemileuca", + "1865295": "Hemileuca lucina", + "1865299": "Hemileuca juno", + "1865313": "Hemileuca maia", + "1865319": "Hemileuca grotei", + "1865328": "Hemileuca nutalli", + "1865333": "Hemileuca electra", + "1865341": "Hemileuca eglanterina", + "1865345": "Hemileuca hera", + "1865347": "Hemileuca oliviae", + "1865348": "Hemileuca nevadensis", + "1865353": "Hemileuca tricolor", + "1865361": "Graellsia", + "1865411": "Rothschildia", + "1865543": "Citheronia", + "1865547": "Citheronia hamifera", + "1865555": "Citheronia regalis", + "1865557": "Citheronia phoronea", + "1865571": "Citheronia sepulcralis", + "1865572": "Citheronia bellavista", + "1865578": "Citheronia laocoon", + "1865590": "Citheronia splendens", + "1865591": "Archaeoattacus", + "1865593": "Archaeoattacus malayanus", + "1865647": "Actias", + "1865650": "Actias neidhoeferi", + "1865659": "Actias aliena", + "1865660": "Actias selene", + "1865666": "Actias ningpoana", + "1865668": "Actias luna", + "1865671": "Actias artemis", + "1865704": "Hyperchiria", + "1865709": "Hyperchiria nausica", + "1865711": "Hyperchiria incisa", + "1865750": "Adeloneivaia", + "1865764": "Adeloneivaia subangulata", + "1865826": "Rhescyntis", + "1865827": "Rhescyntis pseudomartii", + "1865837": "Rhescyntis hippodamia", + "1865838": "Hyalophora", + "1865839": "Hyalophora cecropia", + "1865842": "Hyalophora gloveri", + "1865853": "Hyalophora euryalus", + "1865856": "Hyalophora columbia", + "1865859": "Dryocampa", + "1865862": "Dryocampa rubicunda", + "1865866": "Procitheronia", + "1865869": "Procitheronia principalis", + "1865923": "Cricula", + "1865930": "Cricula trifenestrata", + "1865957": "Automeris", + "1865963": "Automeris hamata", + "1866003": "Automeris belti", + "1866006": "Automeris melanops", + "1866085": "Automeris io", + "1866100": "Automeris zugana", + "1866105": "Automeris jucunda", + "1866123": "Automeris zephyria", + "1866162": "Automeris illustris", + "1866164": "Automeris naranja", + "1866201": "Automeris postalbida", + "1866214": "Automeris cecrops", + "1866220": "Automeris liberia", + "1866221": "Loepa", + "1866237": "Loepa formosensis", + "1866248": "Gonimbrasia", + "1866249": "Gonimbrasia zambesina", + "1866252": "Gonimbrasia tyrrhea", + "1866262": "Gonimbrasia belina", + "1866293": "Arsenura", + "1866311": "Arsenura armida", + "1866330": "Arsenura polyodonta", + "1866333": "Callosamia", + "1866336": "Callosamia angulifera", + "1866338": "Callosamia securifera", + "1866341": "Callosamia promethea", + "1866345": "Samia", + "1866356": "Samia cynthia", + "1866416": "Usta", + "1866421": "Usta terpsichore", + "1866475": "Antheraea", + "1866491": "Antheraea formosana", + "1866496": "Antheraea godmani", + "1866530": "Antheraea assamensis", + "1866549": "Antheraea superba", + "1866550": "Antheraea oculea", + "1866556": "Antheraea pernyi", + "1866568": "Antheraea yamamai", + "1866570": "Antheraea polyphemus", + "1866573": "Antheraea paphia", + "1866597": "Eupackardia", + "1866601": "Eupackardia calleta", + "1866812": "Leucanella", + "1866838": "Leucanella viridescens", + "1866898": "Dysdaemonia", + "1866902": "Dysdaemonia boreas", + "1866912": "Epiphora", + "1866975": "Pselaphelia", + "1866980": "Pselaphelia flavivitta", + "1866984": "Argema", + "1867009": "Argema mimosae", + "1867014": "Argema mittrei", + "1867018": "Anisota", + "1867021": "Anisota peigleri", + "1867022": "Anisota stigma", + "1867029": "Anisota senatoria", + "1867032": "Anisota pellucida", + "1867037": "Anisota oslari", + "1867046": "Hylesia", + "1867108": "Hylesia nigricans", + "1867171": "Hylesia scortina", + "1867218": "Hylesia metabus", + "1867224": "Hylesia nanus", + "1867229": "Cicia", + "1867231": "Cicia crocata", + "1867268": "Titaea", + "1867280": "Pseudaphelia", + "1867295": "Pseudaphelia apollinaris", + "1867305": "Aurivillius", + "1867312": "Aurivillius fusca", + "1867343": "Aglia", + "1867412": "Adetomeris", + "1867426": "Adetomeris erythrops", + "1867481": "Copaxa", + "1867515": "Copaxa decrescens", + "1867525": "Copaxa lavendera", + "1867535": "Copaxa multifenestrata", + "1867545": "Polythysana", + "1867547": "Polythysana rubrescens", + "1867552": "Polythysana cinerascens", + "1867669": "Urota", + "1867673": "Urota sinope", + "1867674": "Ormiscodes", + "1867709": "Ormiscodes cinnamomea", + "1867722": "Ormiscodes amphinome", + "1867739": "Heniocha", + "1867744": "Heniocha marnois", + "1867749": "Heniocha bioculata", + "1867750": "Heniocha dyops", + "1867751": "Heniocha apollonia", + "1867761": "Copiopteryx", + "1867773": "Copiopteryx semiramis", + "1867780": "Psilopygida", + "1867783": "Opodiphthera", + "1867788": "Opodiphthera astrophela", + "1867810": "Saturnia", + "1867820": "Saturnia pavonia", + "1867928": "Saturnia pyri", + "1867983": "Rhodinia", + "1867991": "Rhodinia verecunda", + "1867993": "Rhodinia fugax", + "1867998": "Gynanisa", + "1868014": "Gynanisa maja", + "1868017": "Syntherata", + "1868025": "Syntherata janetta", + "1868048": "Bunaea", + "1868049": "Bunaea aslauga", + "1868060": "Bunaea alcinoe", + "1868162": "Lemonia", + "1868207": "Triuncina", + "1868211": "Triuncina brunnea", + "1868327": "Colla", + "1868334": "Colla rhodope", + "1868353": "Anticla", + "1868360": "Anticla antica", + "1868393": "Ocinara", + "1868409": "Ocinara albicollis", + "1868427": "Prismosticta", + "1868428": "Prismosticta fenestrata", + "1868470": "Ernolatia moorei", + "1868491": "Trilocha", + "1868497": "Penicillifera", + "1868499": "Penicillifera apicalis", + "1868520": "Andraca", + "1868527": "Andraca olivacea", + "1868532": "Olceclostera", + "1868535": "Olceclostera angelica", + "1868563": "Hygrochroa", + "1868575": "Hygrochroa firmiana", + "1868660": "Bombyx", + "1868834": "Ganisa", + "1868837": "Ganisa formosicola", + "1868875": "Phyllalia", + "1868884": "Phyllalia patens", + "1868887": "Eupterote", + "1868952": "Eupterote undata", + "1869041": "Poloma", + "1869043": "Poloma angulata", + "1869056": "Palirisa", + "1869057": "Palirisa cervina", + "1869176": "Apha", + "1869178": "Apha horishana", + "1869187": "Apha kantonensis", + "1869237": "Striphnopteryx", + "1869238": "Striphnopteryx edulis", + "1869255": "Jana", + "1869278": "Jana tantalus", + "1869286": "Jana eurymas", + "1869358": "Brahmaea", + "1869359": "Brahmaea certhia", + "1869363": "Brahmaea wallichii", + "1869438": "Epermenia", + "1869467": "Epermenia pontificella", + "1869478": "Epermenia chaerophyllellus", + "1869489": "Epermenia illigerella", + "1869504": "Phaulernis", + "1869512": "Phaulernis dentella", + "1869593": "Oxybia", + "1869595": "Oxybia transversella", + "1869643": "Alpheias", + "1869653": "Trachonitis", + "1869656": "Trachonitis cristella", + "1869664": "Dasypyga", + "1869666": "Dasypyga alternosquamella", + "1869690": "Orthaga", + "1869706": "Orthaga olivacea", + "1869707": "Orthaga rubridiscalis", + "1869714": "Orthaga seminivea", + "1869760": "Hypochalcia", + "1869803": "Hypochalcia ahenella", + "1869823": "Tlascala", + "1869825": "Tlascala reductella", + "1869851": "Apomyelois", + "1869852": "Apomyelois bistriatella", + "1869858": "Apomyelois ceratoniae", + "1869974": "Catastia", + "1869976": "Catastia marginea", + "1870004": "Thopeutis", + "1870017": "Thopeutis forbesellus", + "1870028": "Parachma", + "1870037": "Parachma ochracealis", + "1870168": "Anerastia", + "1870202": "Anerastia lotella", + "1870229": "Doloessa", + "1870237": "Doloessa viridis", + "1870242": "Aphomia", + "1870249": "Aphomia zelleri", + "1870250": "Aphomia sociella", + "1870267": "Aphomia terrenella", + "1870302": "Mapeta", + "1870308": "Mapeta xanthomelas", + "1870413": "Meroptera", + "1870415": "Meroptera pravella", + "1870421": "Tallula", + "1870426": "Tallula atrifascialis", + "1870449": "Etiella", + "1870450": "Etiella zinckenella", + "1870452": "Etiella behrii", + "1870459": "Etiella chrysoporella", + "1870504": "Cardamyla", + "1870506": "Cardamyla carinentalis", + "1870509": "Cardamyla didymalis", + "1870605": "Negalasa", + "1870607": "Negalasa fumalis", + "1870648": "Pterothrixidia", + "1870650": "Pterothrixidia rufella", + "1870697": "Patagoniodes", + "1870703": "Patagoniodes farinaria", + "1870714": "Pococera", + "1870721": "Pococera robustella", + "1870727": "Pococera asperatella", + "1870733": "Pococera maritimalis", + "1870751": "Pococera militella", + "1870777": "Pococera expandens", + "1870982": "Achroia", + "1870988": "Achroia grisella", + "1871131": "Alophia", + "1871157": "Salebriopsis", + "1871160": "Salebriopsis albicilla", + "1871167": "Endosimilis", + "1871171": "Endosimilis stilbealis", + "1871172": "Galasa", + "1871175": "Galasa nigrinodis", + "1871206": "Synaphe", + "1871212": "Synaphe moldavica", + "1871217": "Synaphe diffidalis", + "1871252": "Synaphe punctalis", + "1871264": "Synaphe predotalis", + "1871327": "Persicoptera", + "1871333": "Persicoptera aglaopa", + "1871366": "Zamagiria", + "1871379": "Zamagiria australella", + "1871384": "Hypsopygia", + "1871407": "Hypsopygia costalis", + "1871413": "Moodna", + "1871414": "Moodna ostrinella", + "1871419": "Moodna pallidostrinella", + "1871446": "Hypotia", + "1871451": "Hypotia corticalis", + "1871456": "Oreana", + "1871457": "Oreana unicolorella", + "1871504": "Philotis basalis", + "1871505": "Ambesa", + "1871509": "Ambesa laetella", + "1871553": "Atascosa", + "1871560": "Atascosa glareosella", + "1871596": "Chararica", + "1871597": "Chararica hystriculella", + "1871604": "Herculia", + "1871630": "Herculia pelasgalis", + "1871683": "Herculia rubidalis", + "1871695": "Pyla", + "1871698": "Pyla fusca", + "1871753": "Mittonia", + "1871754": "Mittonia hampsoni", + "1871761": "Glyptocera", + "1871763": "Glyptocera consobrinella", + "1871764": "Ematheudes", + "1871783": "Ematheudes punctellus", + "1871825": "Eccopisa", + "1871826": "Eccopisa effractella", + "1871885": "Oneida", + "1871890": "Oneida lunulalis", + "1871922": "Toripalpus", + "1871923": "Toripalpus trabalis", + "1871939": "Basacallis", + "1871940": "Basacallis tarachodes", + "1871986": "Toccolosida", + "1871988": "Toccolosida rubriceps", + "1872079": "Vitessa", + "1872094": "Vitessa suradeva", + "1872162": "Calguia", + "1872169": "Calguia defiguralis", + "1872196": "Acallis", + "1872200": "Acallis alticolalis", + "1872209": "Sosipatra", + "1872210": "Sosipatra rileyella", + "1872254": "Spectrotrota", + "1872255": "Spectrotrota fimbrialis", + "1872315": "Rhodophaea formosa", + "1872346": "Cataclysta", + "1872359": "Cataclysta angulata", + "1872361": "Cataclysta albidentata", + "1872368": "Cataclysta lemnata", + "1872446": "Arta", + "1872452": "Arta olivalis", + "1872456": "Arta statalis", + "1872465": "Eulogia", + "1872466": "Eulogia ochrifrontella", + "1872468": "Anemosa", + "1872470": "Anemosa exanthes", + "1872509": "Tosale", + "1872514": "Tosale oviplagalis", + "1872515": "Tosale aucta", + "1872602": "Bostra", + "1872732": "Ephestiopsis", + "1872735": "Ephestiopsis oenobarella", + "1872811": "Oenogenes", + "1872812": "Oenogenes fugalis", + "1872824": "Ptyomaxia", + "1872827": "Ptyomaxia trigonogramma", + "1872845": "Pyralis", + "1872848": "Pyralis regalis", + "1872850": "Pyralis pictalis", + "1872873": "Pyralis manihotalis", + "1872901": "Pyralis farinalis", + "1872904": "Pyralis lienigialis", + "1873021": "Cryptoblabes", + "1873048": "Cryptoblabes bistriga", + "1873049": "Cryptoblabes hemigypsa", + "1873051": "Cryptoblabes gnidiella", + "1873074": "Plodia", + "1873079": "Plodia interpunctella", + "1873212": "Lamoria", + "1873215": "Lamoria anella", + "1873222": "Lamoria idiolepida", + "1873259": "Cacotherapia", + "1873267": "Cacotherapia flexilinealis", + "1873280": "Heteromicta", + "1873285": "Heteromicta tripartitella", + "1873290": "Heteromicta pachytera", + "1873291": "Heteromicta poeodes", + "1873310": "Laetilia", + "1873319": "Laetilia coccidivora", + "1873335": "Neodavisia", + "1873372": "Callionyma", + "1873373": "Callionyma sarcodes", + "1873374": "Salebriaria", + "1873376": "Salebriaria annulosella", + "1873381": "Salebriaria pumilella", + "1873383": "Salebriaria ademptandella", + "1873384": "Salebriaria engeli", + "1873396": "Incarcha", + "1873398": "Incarcha aporalis", + "1873408": "Nephopterix", + "1873411": "Nephopterix angustella", + "1873417": "Nephopterix ochribasalis", + "1873583": "Tacoma", + "1873585": "Tacoma feriella", + "1873619": "Arescoptera", + "1873620": "Arescoptera idiotypa", + "1873642": "Streptopalpia", + "1873697": "Myelopsis alatella", + "1873750": "Epipaschia", + "1873753": "Epipaschia superatalis", + "1873755": "Asalebria", + "1873763": "Anemosella", + "1873768": "Mampava", + "1873773": "Mampava rhodoneura", + "1873775": "Sciota", + "1873776": "Sciota adelphella", + "1873780": "Sciota hostilis", + "1873783": "Sciota rhenella", + "1873830": "Tirathaba", + "1873843": "Tirathaba rufivena", + "1873878": "Cadra", + "1873890": "Cadra cautella", + "1873980": "Endotricha", + "1874141": "Gauna", + "1874146": "Gauna aegusalis", + "1874152": "Acrobasis", + "1874158": "Acrobasis indigenella", + "1874160": "Acrobasis angusella", + "1874168": "Acrobasis bithynella", + "1874179": "Acrobasis demotella", + "1874192": "Acrobasis repandana", + "1874204": "Acrobasis consociella", + "1874211": "Acrobasis tumidana", + "1874229": "Acrobasis porphyrella", + "1874248": "Acrobasis caryae", + "1874257": "Acrobasis exsulella", + "1874269": "Acrobasis obliqua", + "1874274": "Acrobasis tricolorella", + "1874279": "Acrobasis juglandis", + "1874280": "Acrobasis romanella", + "1874295": "Acrobasis sodalella", + "1874309": "Honora", + "1874317": "Honora mellinella", + "1874374": "Pima", + "1874375": "Pima boisduvaliella", + "1874450": "Macalla", + "1874513": "Macalla glastianalis", + "1874552": "Macalla zelleri", + "1874624": "Ancylosis", + "1874743": "Ancylosis oblitella", + "1874900": "Cabnia", + "1874901": "Cabnia myronella", + "1874935": "Locastra", + "1874937": "Locastra muscosalis", + "1874958": "Phycita", + "1875008": "Phycita roborella", + "1875103": "Oncocera", + "1875120": "Oncocera semirubella", + "1875195": "Bandera", + "1875196": "Bandera binotella", + "1875317": "Euzophera", + "1875319": "Euzophera ostricolorella", + "1875327": "Euzophera pinguis", + "1875376": "Euzophera cinerosella", + "1875407": "Euzophera semifuneralis", + "1875409": "Euzophera lunulella", + "1875429": "Euzophera fuliginosella", + "1875450": "Ortholepis", + "1875451": "Ortholepis pasadamia", + "1875477": "Ephestiodes", + "1875478": "Ephestiodes gilvescentella", + "1875483": "Ephestiodes infimella", + "1875485": "Ephestiodes mignonella", + "1875532": "Stericta", + "1875534": "Stericta carbonalis", + "1875554": "Stericta concisella", + "1875584": "Stericta bryomima", + "1875600": "Vitula", + "1875606": "Vitula broweri", + "1875607": "Vitula edmandsii", + "1875631": "Vitula serratilineella", + "1875633": "Vitula biviella", + "1875650": "Pempelia", + "1875680": "Pempelia malacella", + "1875682": "Pempelia ornatella", + "1875687": "Pempelia turturella", + "1875821": "Nyctegretis", + "1875827": "Nyctegretis lineana", + "1875830": "Nyctegretis triangulella", + "1875840": "Lacalma", + "1875844": "Lacalma albirufalis", + "1875849": "Selagia", + "1875865": "Selagia argyrella", + "1875869": "Selagia spadicella", + "1875885": "Varneria postremella", + "1875890": "Phycitodes", + "1875914": "Phycitodes mucidellus", + "1875918": "Phycitodes binaevella", + "1875940": "Phycitodes albatella", + "1875952": "Phycitodes maritima", + "1875958": "Phycitodes lacteella", + "1876062": "Hypsotropa", + "1876063": "Hypsotropa unipunctella", + "1876167": "Arctioblepsis", + "1876168": "Arctioblepsis rubida", + "1876280": "Myelois", + "1876329": "Myelois circumvoluta", + "1876357": "Myelois tetricella", + "1876391": "Zophodia", + "1876409": "Zophodia grossulariella", + "1876474": "Scenedra", + "1876479": "Scenedra decoratalis", + "1876511": "Eurhodope", + "1876512": "Eurhodope rosella", + "1876536": "Galleria", + "1876542": "Galleria mellonella", + "1876547": "Omphalocera", + "1876548": "Omphalocera munroei", + "1876549": "Omphalocera cariosa", + "1876588": "Orybina", + "1876592": "Orybina flaviplaga", + "1876613": "Elegia", + "1876623": "Elegia similella", + "1876663": "Clydonopteron", + "1876665": "Clydonopteron sacculana", + "1876846": "Assara", + "1876854": "Assara terebrella", + "1876876": "Assara holophragma", + "1876889": "Conobathra", + "1876920": "Hypargyria", + "1876922": "Hypargyria metalliferella", + "1876954": "Meyriccia", + "1876955": "Meyriccia latro", + "1876978": "Caudellia", + "1876987": "Caudellia nigrella", + "1876990": "Macrorrhinia", + "1877001": "Atheloca", + "1877002": "Atheloca subrufella", + "1877035": "Pseudarenipses insularum", + "1877036": "Glyptoteles", + "1877038": "Glyptoteles leucacrinella", + "1877266": "Cacozelia", + "1877274": "Elasmopalpus", + "1877282": "Elasmopalpus lignosella", + "1877292": "Dioryctria", + "1877310": "Dioryctria sylvestrella", + "1877321": "Dioryctria disclusa", + "1877338": "Dioryctria auranticella", + "1877341": "Dioryctria simplicella", + "1877345": "Dioryctria mendacella", + "1877353": "Dioryctria zimmermani", + "1877364": "Dioryctria clarioralis", + "1877365": "Dioryctria reniculelloides", + "1877368": "Dioryctria abietella", + "1877372": "Dioryctria amatella", + "1877401": "Addyme", + "1877406": "Addyme ferrorubella", + "1877430": "Salobrena", + "1877443": "Salobrena sincera", + "1877452": "Morosaphycita", + "1877453": "Morosaphycita oculiferella", + "1877472": "Loryma", + "1877491": "Satole", + "1877492": "Satole ligniperdalis", + "1877495": "Teliphasa", + "1877498": "Teliphasa nubilosa", + "1877536": "Tampa", + "1877537": "Tampa dimediatella", + "1877619": "Adelphia", + "1877632": "Lepidomys", + "1877643": "Lepidomys irrenosa", + "1877650": "Homoeosoma", + "1877771": "Canthelea", + "1877788": "Canthelea oegnusalis", + "1877937": "Aglossa", + "1877940": "Aglossa disciferalis", + "1877941": "Aglossa pinguinalis", + "1877975": "Aglossa costiferalis", + "1877986": "Aglossa brabanti", + "1877988": "Aglossa caprealis", + "1877995": "Aglossa cuprina", + "1878008": "Stemmatophora", + "1878067": "Stemmatophora combustalis", + "1878156": "Condylolomia", + "1878158": "Condylolomia participialis", + "1878171": "Curena", + "1878173": "Curena externalis", + "1878192": "Metallostichodes", + "1878197": "Metallostichodes nigrocyanella", + "1878317": "Psorosa", + "1878350": "Psorosa tergestella", + "1878365": "Peoria", + "1878370": "Peoria approximella", + "1878392": "Peoria tetradella", + "1878404": "Guastica", + "1878406": "Guastica semilutea", + "1878460": "Ephestia", + "1878470": "Ephestia elutella", + "1878471": "Ephestia woodiella", + "1878490": "Ephestia kuehniella", + "1878500": "Ephestia welseriella", + "1878522": "Epicrocis", + "1878578": "Gymnancyla", + "1878586": "Gymnancyla canella", + "1878610": "Eoophyla", + "1878626": "Eoophyla conjunctalis", + "1878653": "Obtusipalpis", + "1878656": "Obtusipalpis pardalis", + "1878661": "Ategumia", + "1878678": "Hahncappsia", + "1878688": "Hahncappsia mancalis", + "1878705": "Hahncappsia pergilvalis", + "1878743": "Aetholix", + "1878744": "Aetholix flavibasalis", + "1878750": "Saucrobotys", + "1878751": "Saucrobotys futilalis", + "1878753": "Saucrobotys fumoferalis", + "1878757": "Mecyna", + "1878782": "Mecyna flavalis", + "1878789": "Mecyna mustelinalis", + "1878798": "Mecyna lutealis", + "1878804": "Mecyna asinalis", + "1878808": "Anageshna", + "1878810": "Anageshna primordialis", + "1878812": "Archernis", + "1878826": "Archernis callixantha", + "1878835": "Neargyractis", + "1878837": "Neargyractis slossonalis", + "1878838": "Agriphila", + "1878845": "Agriphila cyrenaicellus", + "1878862": "Agriphila tristellus", + "1878879": "Agriphila straminella", + "1878895": "Agriphila inquinatella", + "1878904": "Agriphila tolli", + "1878907": "Agriphila deliella", + "1878937": "Agriphila vulgivagellus", + "1878939": "Agriphila selasella", + "1878951": "Agriphila trabeatellus", + "1878958": "Agriphila ruricolellus", + "1878989": "Cornifrons", + "1879001": "Cornifrons ulceratalis", + "1879048": "Trichaea", + "1879052": "Trichaea pilicornis", + "1879124": "Heterocnephes", + "1879125": "Heterocnephes lymphatalis", + "1879138": "Crypsiptya", + "1879141": "Crypsiptya coclesalis", + "1879158": "Liopasia", + "1879160": "Liopasia ochracealis", + "1879226": "Pleuroptya", + "1879227": "Pleuroptya balteata", + "1879252": "Pleuroptya ruralis", + "1879253": "Pleuroptya silicalis", + "1879271": "Eoparargyractis", + "1879272": "Eoparargyractis irroratalis", + "1879274": "Eoparargyractis plevie", + "1879334": "Crocidolomia", + "1879337": "Crocidolomia subhirsutalis", + "1879339": "Crocidolomia suffusalis", + "1879340": "Crocidolomia pavonana", + "1879347": "Abegesta", + "1879348": "Abegesta remellalis", + "1879355": "Nosophora", + "1879379": "Nosophora semitritalis", + "1879396": "Hellula", + "1879398": "Hellula rogatalis", + "1879405": "Hellula hydralis", + "1879408": "Hellula undalis", + "1879413": "Hellula phidilealis", + "1879422": "Palepicorsia", + "1879427": "Palepicorsia ustrinalis", + "1879428": "Hileithia", + "1879435": "Helvibotys", + "1879443": "Helvibotys helvialis", + "1879451": "Duponchelia", + "1879452": "Duponchelia fovealis", + "1879463": "Hydriris", + "1879465": "Hydriris chalybitis", + "1879471": "Hydriris ornatalis", + "1879487": "Cadarena", + "1879490": "Cadarena pudoraria", + "1879494": "Platytes", + "1879512": "Eudonia", + "1879534": "Eudonia murana", + "1879630": "Eudonia truncicolella", + "1879655": "Eudonia lineola", + "1879691": "Eudonia angustea", + "1879703": "Eudonia sudetica", + "1879731": "Eudonia lacustrata", + "1879735": "Eudonia delunella", + "1879765": "Eudonia mercurella", + "1879809": "Desmia", + "1879915": "Crambus", + "1879939": "Crambus unistriatellus", + "1879970": "Crambus perlella", + "1879975": "Crambus quinquareatus", + "1880011": "Crambus sparsellus", + "1880013": "Crambus bidens", + "1880019": "Crambus watsonellus", + "1880025": "Crambus saltuellus", + "1880040": "Crambus alienellus", + "1880044": "Crambus leachellus", + "1880049": "Crambus satrapellus", + "1880062": "Crambus hamella", + "1880064": "Crambus pascuella", + "1880078": "Crambus laqueatellus", + "1880083": "Crambus agitatellus", + "1880088": "Crambus whitmerellus", + "1880094": "Crambus ericella", + "1880104": "Crambus silvella", + "1880123": "Crambus girardellus", + "1880132": "Crambus praefectellus", + "1880133": "Crambus sperryellus", + "1880138": "Crambus heringiellus", + "1880139": "Crambus pratella", + "1880140": "Crambus lathoniellus", + "1880143": "Crambus uliginosellus", + "1880156": "Crambus albellus", + "1880172": "Omiodes", + "1880275": "Orocrambus corruptus", + "1880286": "Orocrambus angustipennis", + "1880293": "Orocrambus aethonellus", + "1880305": "Orocrambus vittellus", + "1880310": "Orocrambus cyclopicus", + "1880316": "Orocrambus apicellus", + "1880318": "Orocrambus flexuosellus", + "1880321": "Orocrambus vulgaris", + "1880350": "Orocrambus ramosellus", + "1880351": "Syntonarcha", + "1880352": "Syntonarcha vulnerata", + "1880353": "Syntonarcha iriastis", + "1880354": "Epipagis", + "1880379": "Epipagis forsythae", + "1880381": "Epipagis adipaloides", + "1880408": "Epipagis olesialis", + "1880411": "Epipagis fenestralis", + "1880423": "Vaxi", + "1880436": "Gadira", + "1880439": "Gadira acerella", + "1880444": "Paracymoriza", + "1880451": "Paracymoriza vagalis", + "1880464": "Paracymoriza cataclystalis", + "1880465": "Paracymoriza taiwanalis", + "1880501": "Sparagmia", + "1880505": "Sparagmia gonoptera", + "1880506": "Phostria", + "1880537": "Phostria dohrni", + "1880623": "Phostria temira", + "1880703": "Syllepis", + "1880711": "Clupeosoma", + "1880744": "Trithyris", + "1880792": "Titanio", + "1880818": "Titanio tarraconensis", + "1880848": "Nevrina", + "1880852": "Nevrina procopia", + "1880855": "Aethaloessa", + "1880858": "Aethaloessa calidalis", + "1880865": "Aethaloessa floridalis", + "1880878": "Ancylolomia", + "1880907": "Ancylolomia tentaculella", + "1880931": "Ancylolomia palpella", + "1880968": "Ancylolomia japonica", + "1880977": "Hednota", + "1880982": "Hednota pedionoma", + "1880986": "Hednota longipalpella", + "1881018": "Hednota grammellus", + "1881019": "Hednota relatalis", + "1881031": "Hednota bivittella", + "1881041": "Hednota pleniferellus", + "1881078": "Neoleucinodes", + "1881079": "Neoleucinodes elegantalis", + "1881085": "Hymenoptychis", + "1881089": "Hymenoptychis sordida", + "1881092": "Diasemiodes", + "1881094": "Diasemiodes janassialis", + "1881102": "Uresiphita", + "1881111": "Uresiphita reversalis", + "1881121": "Uresiphita quinquigera", + "1881122": "Uresiphita polygonalis", + "1881126": "Uresiphita gilvata", + "1881132": "Uresiphita ornithopteralis", + "1881135": "Diptychophora", + "1881139": "Diptychophora harlequinalis", + "1881145": "Nomophila", + "1881147": "Nomophila africana", + "1881151": "Nomophila noctuella", + "1881157": "Nomophila corticalis", + "1881166": "Nomophila nearctica", + "1881167": "Paliga", + "1881170": "Paliga damastesalis", + "1881178": "Antigastra", + "1881186": "Acentria", + "1881206": "Xanthocrambus", + "1881208": "Xanthocrambus saxonellus", + "1881226": "Scirpophaga", + "1881228": "Scirpophaga imparellus", + "1881293": "Scirpophaga incertulas", + "1881296": "Ulopeza", + "1881303": "Ulopeza conigeralis", + "1881319": "Agrioglypta", + "1881320": "Agrioglypta excelsalis", + "1881329": "Agrioglypta eurytusalis", + "1881336": "Agrioglypta itysalis", + "1881340": "Agrioglypta zelimalis", + "1881357": "Metasia", + "1881362": "Metasia suppandalis", + "1881393": "Metasia cuencalis", + "1881404": "Metasia ophialis", + "1881418": "Metasia ibericalis", + "1881424": "Metasia capnochroa", + "1881484": "Myrmidonistis", + "1881485": "Myrmidonistis hoplora", + "1881495": "Culladia", + "1881504": "Culladia cuneiferellus", + "1881515": "Culladia hastiferalis", + "1881521": "Argyria", + "1881601": "Metaxmeste", + "1881603": "Metaxmeste phrygialis", + "1881628": "Tetrernia", + "1881764": "Gonocausta", + "1881767": "Gonocausta sabinalis", + "1881804": "Azochis", + "1881822": "Azochis rufidiscalis", + "1881825": "Paratalanta", + "1881834": "Paratalanta pandalis", + "1881858": "Microthyris", + "1881870": "Lygropia", + "1881917": "Lygropia fusalis", + "1881955": "Lygropia rivulalis", + "1881964": "Lygropia distorta", + "1882019": "Discothyris", + "1882021": "Discothyris ferruginata", + "1882028": "Loxostege", + "1882089": "Loxostege allectalis", + "1882110": "Loxostege frustalis", + "1882158": "Loxostege turbidalis", + "1882165": "Loxostege aeruginalis", + "1882190": "Loxostege albiceralis", + "1882195": "Loxostege cereralis", + "1882210": "Loxostege sticticalis", + "1882213": "Tipanaea", + "1882215": "Tipanaea patulella", + "1882217": "Loxostegopsis", + "1882218": "Loxostegopsis polle", + "1882239": "Siga", + "1882249": "Omphisa", + "1882253": "Omphisa anastomosalis", + "1882263": "Tatobotys", + "1882266": "Tatobotys biannulalis", + "1882272": "Tatobotys janapalis", + "1882297": "Loxostege philocapna", + "1882309": "Ravanoa", + "1882310": "Ravanoa xiphialis", + "1882314": "Gyros", + "1882316": "Gyros muiri", + "1882354": "Hygraula", + "1882355": "Hygraula nitens", + "1882413": "Scoparia", + "1882437": "Scoparia basistrigalis", + "1882459": "Scoparia ambigualis", + "1882557": "Scoparia pyralella", + "1882729": "Scoparia ancipitella", + "1882752": "Prooedema", + "1882753": "Prooedema inscisalis", + "1882757": "Talanga", + "1882767": "Talanga sexpunctalis", + "1882771": "Talanga sabacusalis", + "1882773": "Talanga tolumnialis", + "1882784": "Oenobotys", + "1882785": "Oenobotys texanalis", + "1882786": "Oenobotys vinotinctalis", + "1882809": "Conchylodes", + "1882812": "Conchylodes ovulalis", + "1882816": "Conchylodes concinnalis", + "1882818": "Conchylodes salamisalis", + "1882819": "Conchylodes diphteralis", + "1882877": "Pygospila", + "1882884": "Pygospila tyres", + "1882900": "Ceratarcha", + "1882901": "Ceratarcha umbrosa", + "1882902": "Diplopseustis", + "1882905": "Diplopseustis perieresalis", + "1882925": "Herpetogramma", + "1882927": "Herpetogramma theseusalis", + "1882930": "Herpetogramma luctuosalis", + "1882941": "Herpetogramma bipunctalis", + "1882958": "Herpetogramma abdominalis", + "1882959": "Herpetogramma pertextalis", + "1882960": "Herpetogramma phaeopteralis", + "1882965": "Herpetogramma licarsisalis", + "1882977": "Herpetogramma aeglealis", + "1882979": "Herpetogramma thestealis", + "1883019": "Sericoplaga", + "1883020": "Sericoplaga externalis", + "1883022": "Margarosticha", + "1883024": "Margarosticha sphenotis", + "1883028": "Margarosticha euprepialis", + "1883035": "Ancylostomia", + "1883038": "Ancylostomia stercorea", + "1883044": "Neomusotima", + "1883045": "Neomusotima fuscolinealis", + "1883064": "Diasemiopsis", + "1883067": "Diasemiopsis ramburialis", + "1883116": "Zebronia", + "1883124": "Zebronia phenice", + "1883132": "Chilo", + "1883161": "Chilo phragmitella", + "1883168": "Chilo luteellus", + "1883364": "Trigonoorda", + "1883373": "Cynaeda", + "1883386": "Cynaeda dentalis", + "1883389": "Niphopyralis", + "1883394": "Niphopyralis chionesis", + "1883417": "Thliptoceras", + "1883458": "Thliptoceras xanthocraspia", + "1883459": "Agathodes", + "1883586": "Glaphyria", + "1883632": "Epascestria", + "1883634": "Epascestria pustulalis", + "1883698": "Dichocrocis", + "1883775": "Dichocrocis erixantha", + "1883828": "Xanthophysa", + "1883829": "Xanthophysa psychicalis", + "1883872": "Hemiscopis", + "1883873": "Hemiscopis sanguinea", + "1883881": "Hemiscopis violacea", + "1883885": "Dysallacta negatalis", + "1883890": "Neodactria", + "1883897": "Neodactria luteolellus", + "1883941": "Prophantis", + "1883943": "Prophantis adusta", + "1883950": "Pachynoa", + "1883951": "Pachynoa thoosalis", + "1883962": "Samea", + "1883968": "Samea multiplicalis", + "1883975": "Samea druchachalis", + "1883990": "Choristostigma", + "1883993": "Choristostigma plumbosignalis", + "1884001": "Choristostigma roseopennalis", + "1884002": "Bocchoris", + "1884051": "Bocchoris inspersalis", + "1884061": "Bocchoris trivitralis", + "1884090": "Nymphula", + "1884194": "Donacaula", + "1884212": "Donacaula mucronella", + "1884213": "Donacaula melinellus", + "1884225": "Meroctena", + "1884228": "Meroctena staintonii", + "1884229": "Meroctena tullalis", + "1884236": "Lipararchis", + "1884240": "Catoptria pyramidellus", + "1884254": "Catoptria staudingeri", + "1884255": "Catoptria pinella", + "1884273": "Catoptria margaritellus", + "1884274": "Catoptria conchella", + "1884280": "Catoptria fulgidella", + "1884312": "Catoptria lythargyrella", + "1884326": "Catoptria oregonicus", + "1884332": "Catoptria permutatellus", + "1884337": "Catoptria latiradiellus", + "1884365": "Catoptria mytilella", + "1884370": "Catoptria verellus", + "1884403": "Catoptria falsella", + "1884425": "Parapoynx", + "1884428": "Parapoynx allionealis", + "1884434": "Parapoynx villidalis", + "1884435": "Parapoynx obscuralis", + "1884437": "Parapoynx fluctuosalis", + "1884439": "Parapoynx badiusalis", + "1884449": "Parapoynx stagnalis", + "1884453": "Parapoynx seminealis", + "1884461": "Parapoynx crisonalis", + "1884464": "Parapoynx maculalis", + "1884465": "Parapoynx stratiotata", + "1884479": "Parapoynx diminutalis", + "1884486": "Glaucocharis", + "1884503": "Glaucocharis auriscriptella", + "1884531": "Glaucocharis dilatella", + "1884539": "Glaucocharis pyrsophanes", + "1884595": "Glaucocharis lepidella", + "1884607": "Glaucocharis elaina", + "1884610": "Glaucocharis leucoxantha", + "1884668": "Erpis", + "1884671": "Erpis macularis", + "1884679": "Lamprophaia", + "1884683": "Pantographa", + "1884685": "Pantographa limata", + "1884687": "Loxomorpha", + "1884699": "Carectocultus", + "1884703": "Carectocultus perstrialis", + "1884771": "Synclera", + "1884774": "Synclera traducalis", + "1884789": "Stegea", + "1884790": "Stegea eripalis", + "1884810": "Cangetta", + "1884816": "Cangetta hartoghialis", + "1884832": "Thysanoidma", + "1884835": "Thysanoidma octalis", + "1884842": "Pagyda", + "1884844": "Pagyda salvalis", + "1884858": "Pagyda auroralis", + "1884877": "Pagyda nebulosa", + "1884886": "Cydalima", + "1884890": "Cydalima laticostalis", + "1884895": "Botyodes", + "1884908": "Botyodes principalis", + "1884909": "Botyodes asialis", + "1884921": "Condylorrhiza", + "1884923": "Condylorrhiza vestigialis", + "1884933": "Deana", + "1884936": "Deana hybreasalis", + "1884939": "Schoenobius", + "1884970": "Schoenobius gigantella", + "1884996": "Dicymolomia", + "1884997": "Dicymolomia julianalis", + "1885001": "Dicymolomia metalliferalis", + "1885008": "Filodes", + "1885012": "Filodes fulvidorsalis", + "1885024": "Filodes costivitralis", + "1885027": "Pilocrocis", + "1885099": "Pilocrocis lauralis", + "1885158": "Pilocrocis ramentalis", + "1885190": "Crocidophora", + "1885202": "Crocidophora tuberculalis", + "1885229": "Crocidophora serratissimalis", + "1885256": "Notarcha", + "1885262": "Notarcha quaternalis", + "1885263": "Notarcha aurolinealis", + "1885564": "Strepsinoma", + "1885569": "Strepsinoma croesusalis", + "1885572": "Strepsinoma foveata", + "1885588": "Hyalobathra", + "1885605": "Hyalobathra archeleuca", + "1885623": "Hyalobathra illectalis", + "1885630": "Hyalobathra miniosalis", + "1885639": "Apilocrocis", + "1885642": "Apilocrocis brumalis", + "1885697": "Ptochostola", + "1885702": "Ptochostola microphaeellus", + "1885731": "Eustixia", + "1885739": "Autocharis", + "1885745": "Autocharis fessalis", + "1885763": "Autocharis hedyphaes", + "1885764": "Autocharis rubricostalis", + "1885792": "Bradina", + "1885826": "Bradina diagonalis", + "1885836": "Bradina admixtalis", + "1885916": "Camptomastix", + "1885919": "Camptomastix hisbonalis", + "1885924": "Eurrhypis", + "1885931": "Eurrhypis guttulalis", + "1885937": "Eurrhypis pollinalis", + "1885944": "Rhimphaliodes", + "1885945": "Rhimphaliodes macrostigma", + "1885946": "Syngamia", + "1885950": "Syngamia florella", + "1885994": "Syngamia falsidicalis", + "1886015": "Syngamia latimarginalis", + "1886069": "Heliothela", + "1886084": "Heliothela wulfeniana", + "1886088": "Heliothela ophideresana", + "1886102": "Stemorrhages", + "1886104": "Stemorrhages sericea", + "1886123": "Cryptographis nitidalis", + "1886207": "Cryptographis elealis", + "1886238": "Nothomastix", + "1886241": "Nothomastix pronaxalis", + "1886248": "Spoladea", + "1886251": "Spoladea recurvalis", + "1886261": "Fumibotys", + "1886262": "Fumibotys fumalis", + "1886268": "Raphiptera", + "1886289": "Ostrinia", + "1886292": "Ostrinia penitalis", + "1886320": "Ostrinia palustralis", + "1886362": "Ostrinia furnacalis", + "1886374": "Hymenia perspectalis", + "1886376": "Microcrambus", + "1886378": "Microcrambus elegans", + "1886398": "Microcrambus kimballi", + "1886400": "Microcrambus minor", + "1886419": "Microcrambus biguttellus", + "1886435": "Megastes", + "1886474": "Lipocosma", + "1886490": "Lipocosma sicalis", + "1886501": "Lipocosma polingi", + "1886505": "Parotis", + "1886526": "Parotis marginata", + "1886576": "Sitochroa", + "1886579": "Sitochroa palealis", + "1886583": "Sitochroa chortalis", + "1886587": "Sitochroa verticalis", + "1886591": "Tegostoma", + "1886648": "Tegostoma comparalis", + "1886649": "Perispasta", + "1886650": "Perispasta caeculalis", + "1886699": "Callibotys", + "1886700": "Callibotys carapina", + "1886711": "Cotachena", + "1886720": "Cotachena histricalis", + "1886725": "Maruca", + "1886726": "Maruca amboinalis", + "1886729": "Maruca vitrata", + "1886760": "Noctuelia", + "1886832": "Diatraea", + "1886868": "Diatraea evanescens", + "1886906": "Diatraea lisetta", + "1886921": "Parapediasia", + "1886929": "Parapediasia teterellus", + "1886935": "Parapediasia decorellus", + "1886948": "Occidentalia", + "1886950": "Atralata", + "1886951": "Atralata albofascialis", + "1886993": "Diathrausta", + "1887004": "Diathrausta harlequinalis", + "1887021": "Pseudopyrausta", + "1887024": "Pseudopyrausta santatalis", + "1887028": "Neocataclysta", + "1887031": "Neocataclysta magnificalis", + "1887032": "Corynophora", + "1887036": "Corynophora lativittalis", + "1887048": "Sameodes", + "1887052": "Sameodes iolealis", + "1887054": "Sameodes cancellalis", + "1887108": "Udea prunalis", + "1887119": "Udea profundalis", + "1887122": "Udea rubigalis", + "1887125": "Udea washingtonalis", + "1887126": "Udea daiclesalis", + "1887173": "Udea fulvalis", + "1887177": "Udea olivalis", + "1887178": "Udea inquinatalis", + "1887269": "Chrysoteuchia", + "1887285": "Chrysoteuchia topiarius", + "1887290": "Chrysoteuchia culmella", + "1887308": "Nephrogramma", + "1887309": "Nephrogramma reniculalis", + "1887335": "Scybalistodes", + "1887341": "Scybalistodes periculosalis", + "1887457": "Jativa", + "1887459": "Jativa castanealis", + "1887460": "Neargyria", + "1887462": "Neargyria argyraspis", + "1887463": "Petrophila", + "1887501": "Circobotys", + "1887509": "Circobotys aurealis", + "1887564": "Mimorista", + "1887565": "Mimorista subcostalis", + "1887573": "Sceliodes", + "1887580": "Sceliodes cordalis", + "1887584": "Ischnurges", + "1887585": "Ischnurges illustralis", + "1887586": "Ischnurges gratiosalis", + "1887632": "Ommatospila", + "1887634": "Ommatospila narcaeusalis", + "1887640": "Angustalius", + "1887682": "Diasemia", + "1887686": "Diasemia grammalis", + "1887691": "Diasemia accalis", + "1887694": "Diasemia monostigma", + "1887701": "Diasemia reticularis", + "1887721": "Syllepte", + "1887894": "Syllepte placophaea", + "1888009": "Syllepte obscuralis", + "1888027": "Syllepte taiwanalis", + "1888040": "Syllepte iophanes", + "1888041": "Piletocera", + "1888047": "Piletocera bufalis", + "1888092": "Piletocera aegimiusalis", + "1888123": "Piletocera macroperalis", + "1888256": "Calamochrous", + "1888291": "Micromartinia", + "1888292": "Micromartinia mnemusalis", + "1888299": "Microtheoris", + "1888306": "Microtheoris ophionalis", + "1888307": "Microtheoris vibicalis", + "1888308": "Polythlipta", + "1888324": "Polythlipta divaricata", + "1888334": "Chalcoela", + "1888336": "Chalcoela pegasalis", + "1888338": "Chalcoela iphitalis", + "1888342": "Noorda", + "1888346": "Noorda blitealis", + "1888406": "Aethiophysa", + "1888410": "Aethiophysa dualis", + "1888428": "Eoreuma", + "1888435": "Eoreuma densellus", + "1888451": "Drosophantis", + "1888454": "Drosophantis caeruleata", + "1888455": "Chrysocrambus", + "1888463": "Chrysocrambus dentuellus", + "1888484": "Chrysocrambus linetella", + "1888491": "Chrysocrambus craterellus", + "1888536": "Prorodes", + "1888537": "Prorodes mimica", + "1888562": "Diastictis", + "1888578": "Paracorsia", + "1888579": "Paracorsia repandalis", + "1888594": "Rhimphalea", + "1888618": "Metacrambus", + "1888619": "Metacrambus carectellus", + "1888623": "Metacrambus pallidellus", + "1888638": "Arthroschista hilaralis", + "1888639": "Arthroschista tricoloralis", + "1888641": "Steniodes", + "1888646": "Steniodes declivalis", + "1888688": "Neohelvibotys", + "1888695": "Neohelvibotys neohelvialis", + "1888698": "Pediasia", + "1888733": "Pediasia luteella", + "1888736": "Pediasia ribbeellus", + "1888743": "Pediasia aridella", + "1888759": "Pediasia contaminella", + "1888823": "Pediasia trisecta", + "1888826": "Pediasia fascelinella", + "1888885": "Cirrhochrista", + "1888891": "Cirrhochrista kosemponialis", + "1888893": "Cirrhochrista spissalis", + "1888906": "Cirrhochrista annulifera", + "1888911": "Cirrhochrista fumipalpis", + "1888913": "Cirrhochrista brizoalis", + "1888915": "Cirrhochrista grabczewskyi", + "1888926": "Cirrhochrista arcusalis", + "1888933": "Fissicrambus", + "1888946": "Fissicrambus profanellus", + "1888955": "Fissicrambus haytiellus", + "1888956": "Antiscopa", + "1888958": "Antiscopa epicomia", + "1889027": "Laniifera", + "1889028": "Laniifera cyclades", + "1889037": "Tyspanodes", + "1889039": "Tyspanodes striata", + "1889043": "Tyspanodes linealis", + "1889050": "Tyspanodes creaghi", + "1889053": "Tyspanodes hypsalis", + "1889065": "Nausinoe", + "1889071": "Nausinoe geometralis", + "1889074": "Nausinoe perspectata", + "1889233": "Rehimena", + "1889239": "Rehimena surusalis", + "1889242": "Rehimena cissophora", + "1889249": "Rehimena phrynealis", + "1889266": "Eurrhyparodes", + "1889267": "Eurrhyparodes lygdamis", + "1889270": "Eurrhyparodes nymphulalis", + "1889272": "Eurrhyparodes tricoloralis", + "1889277": "Eurrhyparodes bracteolalis", + "1889286": "Thisanotia", + "1889287": "Thisanotia chrysonuchella", + "1889295": "Rupela", + "1889327": "Rupela tinctella", + "1889343": "Mabra", + "1889356": "Mabra eryxalis", + "1889358": "Mabra nigriscripta", + "1889366": "Pseudargyria", + "1889370": "Pseudargyria interruptella", + "1889380": "Phenacodes", + "1889381": "Phenacodes aleuropa", + "1889530": "Pylartes", + "1889531": "Pylartes subcostalis", + "1889533": "Apogeshna", + "1889536": "Apogeshna stenialis", + "1889540": "Ghesquierellana", + "1889543": "Ghesquierellana hirtusalis", + "1889551": "Leucinodes", + "1889552": "Leucinodes orbonalis", + "1889563": "Leucinodes apicalis", + "1889716": "Palpita asiaticalis", + "1889717": "Palpita arsaltealis", + "1889721": "Palpita flegia", + "1889745": "Palpita atrisquamalis", + "1889760": "Palpita illibalis", + "1889765": "Palpita nigropunctalis", + "1889769": "Palpita pratti", + "1889828": "Palpita freemanalis", + "1889833": "Palpita vitrealis", + "1889838": "Palpita magniferalis", + "1889850": "Palpita quadristigmalis", + "1889870": "Palpita aenescentalis", + "1889875": "Palpita margaritacea", + "1889900": "Pseudobissetia", + "1889905": "Pseudobissetia terrestrellus", + "1889936": "Nascia", + "1889939": "Nascia acutellus", + "1889942": "Nascia cilialis", + "1890011": "Aediodina", + "1890012": "Aediodina quaternalis", + "1890021": "Panotima", + "1890024": "Panotima angularis", + "1890026": "Heortia", + "1890031": "Heortia vitessoides", + "1890044": "Gesneria", + "1890053": "Musotima", + "1890056": "Musotima ochropteralis", + "1890065": "Musotima nitidalis", + "1890086": "Portentomorpha", + "1890089": "Portentomorpha xanthialis", + "1890094": "Gargela", + "1890097": "Gargela renatusalis", + "1890111": "Calamotropha", + "1890187": "Calamotropha paludella", + "1890245": "Asciodes", + "1890247": "Asciodes gordialis", + "1890256": "Nymphicula", + "1890281": "Cnaphalocrocis", + "1890287": "Cnaphalocrocis trebiusalis", + "1890320": "Cnaphalocrocis medinalis", + "1890335": "Cnaphalocrocis poeyalis", + "1890343": "Cnaphalocrocis limbalis", + "1890345": "Euclasta", + "1890346": "Euclasta varii", + "1890365": "Cryptobotys", + "1890368": "Cryptobotys zoilusalis", + "1890369": "Pyrausta", + "1890374": "Pyrausta demantrialis", + "1890404": "Pyrausta merrickalis", + "1890410": "Pyrausta phoenicealis", + "1890417": "Pyrausta volupialis", + "1890487": "Pyrausta inornatalis", + "1890491": "Pyrausta generosa", + "1890508": "Pyrausta perrubralis", + "1890512": "Pyrausta signatalis", + "1890520": "Pyrausta niveicilialis", + "1890522": "Pyrausta ostrinalis", + "1890534": "Pyrausta aurata", + "1890540": "Pyrausta alpinalis", + "1890560": "Pyrausta semirubralis", + "1890576": "Pyrausta despicata", + "1890599": "Pyrausta onythesalis", + "1890622": "Pyrausta nexalis", + "1890629": "Pyrausta orphisalis", + "1890654": "Pyrausta rubricalis", + "1890656": "Pyrausta aerealis", + "1890670": "Pyrausta testalis", + "1890679": "Pyrausta cingulata", + "1890699": "Pyrausta porphyralis", + "1890701": "Pyrausta obfuscata", + "1890703": "Pyrausta nigrata", + "1890724": "Pyrausta limbopunctalis", + "1890730": "Pyrausta californicalis", + "1890737": "Pyrausta bicoloralis", + "1890772": "Pyrausta purpuralis", + "1890776": "Pyrausta virginalis", + "1890783": "Pyrausta nicalis", + "1890794": "Pyrausta pseudonythesalis", + "1890800": "Pyrausta acrionalis", + "1890802": "Pyrausta unifascialis", + "1890823": "Pyrausta coracinalis", + "1890854": "Pyrausta lethalis", + "1890876": "Pyrausta tyralis", + "1890885": "Pyrausta laticlavia", + "1890898": "Pyrausta sanguinalis", + "1890917": "Pyrausta grotei", + "1890934": "Pyrausta dapalis", + "1890936": "Pyrausta pseuderosnealis", + "1890957": "Pyrausta castalis", + "1890975": "Pyrausta acontialis", + "1891013": "Pyrausta falcatalis", + "1891030": "Hyalorista", + "1891035": "Hyalorista taeniolalis", + "1891043": "Leptosteges", + "1891047": "Lipocosmodes", + "1891048": "Lipocosmodes fuliginosalis", + "1891054": "Psammotis", + "1891059": "Psammotis pulveralis", + "1891073": "Colomychus", + "1891074": "Colomychus talis", + "1891127": "Phlyctaenomorpha", + "1891129": "Phlyctaenomorpha sinuosalis", + "1891152": "Euchromius", + "1891167": "Euchromius ocellea", + "1891171": "Euchromius anapiellus", + "1891177": "Euchromius superbella", + "1891186": "Euchromius gozmanyi", + "1891190": "Euchromius bella", + "1891217": "Euchromius cambridgei", + "1891231": "Sufetula", + "1891236": "Sufetula hemiophthalma", + "1891297": "Aphytoceros", + "1891299": "Aphytoceros lucusalis", + "1891305": "Agrotera", + "1891308": "Agrotera pictalis", + "1891326": "Agrotera nemoralis", + "1891339": "Agrotera basinotata", + "1891353": "Evergestis", + "1891366": "Evergestis desertalis", + "1891386": "Evergestis frumentalis", + "1891426": "Evergestis aenealis", + "1891438": "Evergestis subterminalis", + "1891453": "Evergestis sophialis", + "1891473": "Evergestis extimalis", + "1891484": "Evergestis unimacula", + "1891488": "Evergestis rimosalis", + "1891493": "Evergestis pallidata", + "1891494": "Evergestis limbata", + "1891506": "Pycnarmon", + "1891533": "Pycnarmon meritalis", + "1891583": "Pycnarmon cribrata", + "1891594": "Lamprosema", + "1891636": "Lamprosema tampiusalis", + "1891755": "Lamprosema victoriae", + "1891758": "Lamprosema commixta", + "1891889": "Lamprosema tristrialis", + "1891928": "Terastia", + "1891932": "Terastia meticulosalis", + "1891936": "Terastia egialealis", + "1892130": "Polygrammodes", + "1892131": "Polygrammodes elevata", + "1892153": "Polygrammodes sabelialis", + "1892193": "Polygrammodes flavidalis", + "1892230": "Polygrammodes ponderalis", + "1892238": "Ecpyrrhorrhoe", + "1892242": "Ecpyrrhorrhoe rubiginalis", + "1892245": "Ecpyrrhorrhoe diffusalis", + "1892295": "Chrysendeton", + "1892301": "Chrysendeton imitabilis", + "1892302": "Chrysendeton medicinalis", + "1892303": "Leucochroma", + "1892311": "Leucochroma corope", + "1892318": "Pseudoschinia", + "1892320": "Pseudoschinia elautalis", + "1892354": "Compacta", + "1892355": "Compacta hirtalis", + "1892404": "Lineodes", + "1892420": "Lineodes vulnifica", + "1892427": "Lineodes integra", + "1892433": "Lineodes interrupta", + "1892453": "Achyra", + "1892456": "Achyra coelatalis", + "1892458": "Achyra massalis", + "1892462": "Achyra affinitalis", + "1892476": "Achyra nudalis", + "1892477": "Achyra bifidalis", + "1892488": "Achyra rantalis", + "1892505": "Philaethria", + "1892509": "Philaethria wernickei", + "1892536": "Byblia", + "1892544": "Byblia anvatara", + "1892554": "Byblia anvatara", + "1892555": "Byblia ilithyia", + "1892615": "Paralethe", + "1892621": "Paralethe dendrophilus", + "1892625": "Elzunia", + "1892634": "Elzunia pavonii", + "1892653": "Phalanta", + "1892700": "Meneris", + "1892707": "Doxocopa", + "1892729": "Doxocopa laure", + "1892736": "Doxocopa laurentia", + "1892742": "Doxocopa pavon", + "1892746": "Doxocopa zunilda", + "1892759": "Doxocopa cyane", + "1892761": "Doxocopa linda", + "1892770": "Doxocopa agathina", + "1892804": "Eurytela", + "1892811": "Eurytela hiarbas", + "1892814": "Eurytela dryope", + "1892818": "Vagrans", + "1892821": "Vagrans egista", + "1892833": "Panyapedaliodes", + "1892837": "Panyapedaliodes drymaea", + "1892844": "Castilia", + "1892851": "Castilia myia", + "1892855": "Castilia perilla", + "1892856": "Castilia castilla", + "1892858": "Castilia eranites", + "1892863": "Castilia ofella", + "1892890": "Mestra", + "1892915": "Eteona tisiphone", + "1892917": "Dira", + "1892942": "Haywardella", + "1892944": "Haywardella edmondsii", + "1892952": "Polyura", + "1893128": "Arethusana", + "1893137": "Arethusana arethusa", + "1893171": "Idea", + "1893177": "Idea malabarica", + "1893204": "Idea blanchardii", + "1893241": "Idea stolli", + "1893266": "Idea leuconoe", + "1893282": "Anartia", + "1893309": "Dryas", + "1893327": "Childrena", + "1893329": "Childrena childreni", + "1893334": "Drucina", + "1893337": "Drucina leonata", + "1893338": "Zipaetis", + "1893341": "Zipaetis saitis", + "1893376": "Archeuptychia", + "1893377": "Archeuptychia cluena", + "1893378": "Pampasatyrus", + "1893381": "Pampasatyrus gyrtone", + "1893479": "Ceratinia", + "1893480": "Ceratinia tutia", + "1893521": "Pindis", + "1893525": "Mycalesis", + "1893526": "Mycalesis pitana", + "1893538": "Mycalesis junonia", + "1893546": "Mycalesis gotama", + "1893551": "Mycalesis ita", + "1893558": "Mycalesis anynana", + "1893562": "Mycalesis safitza", + "1893612": "Mycalesis anaxias", + "1893645": "Mycalesis orseis", + "1893660": "Mycalesis phidon", + "1893663": "Mycalesis fuscum", + "1893699": "Mycalesis sirius", + "1893787": "Mycalesis terminus", + "1893793": "Mycalesis mineus", + "1893901": "Mycalesis vulgaris", + "1893921": "Mycalesis sudra", + "1893923": "Mycalesis francisca", + "1893951": "Mycalesis visala", + "1893971": "Faunis", + "1893989": "Faunis phaon", + "1893993": "Faunis menado", + "1893998": "Faunis gracilis", + "1894002": "Faunis canens", + "1894012": "Faunis eumeus", + "1894053": "Dodonidia", + "1894054": "Dodonidia helmsii", + "1894055": "Zethera", + "1894057": "Zethera pimplea", + "1894060": "Zethera incerta", + "1894073": "Hypanartia", + "1894074": "Hypanartia dione", + "1894076": "Hypanartia paullus", + "1894082": "Hypanartia kefersteini", + "1894085": "Hypanartia bella", + "1894087": "Hypanartia godmanii", + "1894088": "Hypanartia lethe", + "1894097": "Clossiana", + "1894102": "Clossiana astarte", + "1894164": "Clossiana polaris", + "1894268": "Clossiana euphrosyne", + "1894293": "Clossiana bellona", + "1894298": "Clossiana chariclea", + "1894323": "Euptoieta", + "1894329": "Euptoieta hegesia", + "1894342": "Euptoieta claudia", + "1894349": "Euptoieta hortensia", + "1894354": "Discophora", + "1894417": "Ladoga", + "1894469": "Pararge", + "1894714": "Pararge petropolitana", + "1894779": "Aglais", + "1894840": "Aglais urticae", + "1894896": "Aglais milberti", + "1894922": "Cybdelis", + "1895036": "Euripus", + "1895037": "Euripus nyctelius", + "1895130": "Euphydryas", + "1895138": "Euphydryas phaeton", + "1895141": "Tisiphone", + "1895152": "Stibochiona", + "1895159": "Stibochiona nicea", + "1895168": "Greta", + "1895176": "Greta andromica", + "1895185": "Greta morgane", + "1895203": "Greta annette", + "1895235": "Chloreuptychia", + "1895250": "Chloreuptychia chlorimene", + "1895260": "Oeneis", + "1895438": "Elymnias", + "1895448": "Elymnias agondas", + "1895499": "Elymnias hypermnestra", + "1895527": "Elymnias caudata", + "1895609": "Elymnias malelas", + "1895667": "Elymnias nesaea", + "1895670": "Elymnias panthera", + "1895691": "Catoblepia", + "1895709": "Catoblepia berecynthia", + "1895732": "Eresia", + "1895733": "Eresia ithomioides", + "1895745": "Eresia pelonia", + "1895768": "Eresia clio", + "1895773": "Eresia polina", + "1895789": "Eresia nauplius", + "1895809": "Eresia lansdorfi", + "1895818": "Eresia levina", + "1895820": "Eresia phillyra", + "1895829": "Eresia datis", + "1895837": "Pseudohaetera", + "1895838": "Pseudohaetera hypaesia", + "1895859": "Argyronome", + "1895867": "Argyronome ruslana", + "1895875": "Argyronome laodice", + "1895882": "Thessalia", + "1895886": "Thessalia theona", + "1895904": "Thessalia leanira", + "1895908": "Melanitis", + "1895956": "Melanitis leda", + "1895984": "Melanitis zitenius", + "1895992": "Melanitis phedima", + "1896057": "Ragadia", + "1896061": "Ragadia crisilda", + "1896063": "Ragadia luzonia", + "1896073": "Ragadia makuta", + "1896080": "Dynastor", + "1896087": "Dynastor darius", + "1896104": "Abrota", + "1896105": "Abrota ganga", + "1896124": "Epityches", + "1896126": "Epityches eupompe", + "1896129": "Terinos", + "1896141": "Terinos clarissa", + "1896142": "Terinos terpander", + "1896152": "Terinos atlita", + "1896175": "Eunica", + "1896289": "Orsotriaena", + "1896304": "Orsotriaena medus", + "1896310": "Phystis", + "1896316": "Phystis simois", + "1896317": "Euphaedra", + "1896547": "Euphaedra harpalyce", + "1896600": "Euphaedra neophron", + "1896603": "Euphaedra medon", + "1896605": "Dircenna", + "1896614": "Dircenna klugii", + "1896628": "Dircenna dero", + "1896644": "Episcada", + "1896658": "Episcada salvinia", + "1896746": "Dryadula", + "1896749": "Dryadula phaetusa", + "1896752": "Dulcedo", + "1896754": "Dulcedo polita", + "1896755": "Catonephele", + "1896756": "Catonephele acontius", + "1896763": "Catonephele chromis", + "1896774": "Catonephele numilia", + "1896785": "Sasakia", + "1896799": "Aphantopus", + "1896841": "Aphantopus hyperantus", + "1896863": "Mygona irmina", + "1896874": "Oressinoma", + "1896876": "Oressinoma typhla", + "1896877": "Asterope", + "1896911": "Thaleropis", + "1896915": "Thaleropis ionia", + "1896917": "Hestinalis", + "1896922": "Hestinalis nama", + "1896928": "Coea", + "1896932": "Coea acheronta", + "1896957": "Charaxes jasius", + "1897636": "Colobura", + "1897643": "Dione", + "1897659": "Parantica", + "1897664": "Parantica sita", + "1897677": "Parantica nilgiriensis", + "1897685": "Parantica aglea", + "1897692": "Parantica agleoides", + "1897722": "Parantica cleona", + "1897747": "Parantica melaneus", + "1897770": "Parantica aspasia", + "1897792": "Parthenos", + "1897807": "Chersonesia", + "1897808": "Chersonesia intermedia", + "1897814": "Chersonesia rahria", + "1897817": "Chersonesia risa", + "1897825": "Callerebia", + "1897834": "Callerebia nirmala", + "1897852": "Callerebia styx", + "1897873": "Callerebia scanda", + "1897886": "Precis", + "1897904": "Precis ceryne", + "1897946": "Precis actia", + "1897965": "Precis pelarga", + "1897970": "Precis octavia", + "1897972": "Precis andremiaja", + "1897974": "Eryphanis", + "1897977": "Eryphanis automedon", + "1897980": "Eryphanis reevesii", + "1897985": "Eryphanis lycomedon", + "1897990": "Eryphanis aesacus", + "1898000": "Aterica", + "1898002": "Aterica galene", + "1898017": "Aterica rabena", + "1898018": "Catagramma", + "1898077": "Catagramma cynosura", + "1898133": "Catagramma pyracmon", + "1898143": "Catagramma astarte", + "1898174": "Catagramma texa", + "1898200": "Catagramma pygas", + "1898203": "Catagramma tolima", + "1898215": "Zeuxidia", + "1898234": "Zeuxidia aurelia", + "1898246": "Taygetina", + "1898248": "Helcyra", + "1898250": "Helcyra superba", + "1898261": "Vanessa", + "1898286": "Vanessa atalanta", + "1898290": "Vanessa vulcania", + "1898343": "Pierella", + "1898348": "Pierella lucia", + "1898350": "Pierella hyalinus", + "1898352": "Pierella hortona", + "1898358": "Pierella helvina", + "1898367": "Pierella lena", + "1898368": "Pierella nereis", + "1898370": "Pierella hyceta", + "1898374": "Pierella lamia", + "1898391": "Pierella luna", + "1898397": "Libytheana", + "1898402": "Libytheana carinenta", + "1898410": "Asterocampa", + "1898414": "Asterocampa leilia", + "1898416": "Asterocampa celtis", + "1898424": "Asterocampa idyja", + "1898431": "Asterocampa clyton", + "1898433": "Hestina", + "1898434": "Hestina persimilis", + "1898441": "Hestina assimilis", + "1898474": "Polygonia", + "1898521": "Polygonia egea", + "1898544": "Polygonia c-album", + "1898578": "Callizona", + "1898587": "Hamadryas", + "1898669": "Enodia", + "1898683": "Historis", + "1898686": "Historis odius", + "1898687": "Pedaliodes", + "1898789": "Pedaliodes peucestas", + "1898841": "Pedaliodes dejecta", + "1898848": "Pedaliodes palaepolis", + "1898853": "Methona", + "1898858": "Methona themisto", + "1898865": "Methona confusa", + "1898929": "Symbrenthia", + "1898946": "Symbrenthia brabira", + "1898958": "Symbrenthia niphanda", + "1898970": "Symbrenthia hippoclus", + "1898988": "Symbrenthia lilaea", + "1899046": "Vareuptychia", + "1899048": "Vareuptychia themis", + "1899063": "Batesia", + "1899069": "Hamanumida", + "1899071": "Hamanumida daedalus", + "1899077": "Henotesia", + "1899144": "Henotesia narcissus", + "1899164": "Henotesia narcissus", + "1899181": "Ethope", + "1899187": "Ethope himachala", + "1899194": "Catacroptera", + "1899198": "Catacroptera cloanthe", + "1899349": "Melitaea trivia", + "1899433": "Melitaea athalia", + "1899737": "Melitaea aetherie", + "1899818": "Melitaea arduinna", + "1899830": "Siproeta", + "1899832": "Podotricha", + "1899835": "Podotricha telesiphe", + "1899856": "Tithorea", + "1899873": "Tithorea tarricina", + "1899893": "Tithorea harmonia", + "1899908": "Oreixenica", + "1899913": "Dasyophthalma", + "1899922": "Dasyophthalma rusina", + "1899924": "Haematera", + "1899929": "Heteronympha", + "1899931": "Heteronympha mirifica", + "1899932": "Heteronympha banksii", + "1899940": "Heteronympha paradelpha", + "1899943": "Heteronympha cordace", + "1899947": "Heteronympha merope", + "1899950": "Heteronympha penelope", + "1899956": "Heteronympha solandri", + "1899985": "Auca", + "1899989": "Auca coctei", + "1899991": "Antirrhea", + "1899994": "Antirrhea philaretes", + "1900014": "Antirrhea archaea", + "1900021": "Hermeuptychia", + "1900024": "Hermeuptychia sosybius", + "1900026": "Hermeuptychia canthe", + "1900039": "Antanartia", + "1900053": "Antanartia dimorphica", + "1900055": "Antanartia schaeneia", + "1900063": "Lasippa", + "1900093": "Lasippa tiga", + "1900111": "Epiphile", + "1900112": "Epiphile hubneri", + "1900121": "Epiphile epimenes", + "1900131": "Epiphile adrasta", + "1900134": "Epiphile orea", + "1900140": "Heliconius", + "1900172": "Heliconius numatus", + "1900175": "Heliconius aliphera", + "1900195": "Heliconius ricini", + "1900197": "Heliconius antiochus", + "1900199": "Heliconius hecale", + "1900233": "Heliconius charithonia", + "1900249": "Heliconius doris", + "1900295": "Heliconius hewitsoni", + "1900303": "Heliconius melpomene", + "1900345": "Heliconius eleuchia", + "1900408": "Heliconius wallacei", + "1900485": "Heliconius cydno", + "1900523": "Heliconius besckei", + "1900565": "Heliconius atthis", + "1900578": "Heliconius pachinus", + "1900618": "Heliconius ismenius", + "1900626": "Heliconius hecalesia", + "1900632": "Heliconius ethilla", + "1900768": "Heliconius telesiphe", + "1900787": "Heliconius sara", + "1900825": "Heliconius clysonymus", + "1900830": "Heliconius sapho", + "1900872": "Heliconius erato", + "1900889": "Timelaea", + "1900890": "Timelaea albescens", + "1900897": "Timelaea maculata", + "1900916": "Praepedaliodes", + "1900918": "Praepedaliodes phanias", + "1900919": "Mynes", + "1900939": "Mynes geoffroyi", + "1900968": "Ectima", + "1900982": "Actinote", + "1901001": "Actinote anteas", + "1901153": "Actinote negra", + "1901189": "Actinote stratonice", + "1901205": "Prothoe", + "1901213": "Prothoe franck", + "1901256": "Myscelia", + "1901257": "Myscelia orsis", + "1901261": "Myscelia cyaniris", + "1901268": "Myscelia cyananthe", + "1901287": "Amathusia", + "1901337": "Metamorpha", + "1901363": "Parathyma", + "1901372": "Parathyma reta", + "1901399": "Parathyma selenophora", + "1901404": "Parathyma perius", + "1901411": "Parathyma pravara", + "1901427": "Parathyma kanwa", + "1901428": "Parathyma ranga", + "1901429": "Parathyma asura", + "1901435": "Parathyma nefte", + "1901463": "Parathyma opalina", + "1901470": "Calisto", + "1901530": "Godartiana", + "1901533": "Godartiana muscosa", + "1901577": "Argyrophorus", + "1901580": "Argyrophorus argenteus", + "1901581": "Tellervo", + "1901669": "Tellervo zoilus", + "1901729": "Poladryas", + "1901735": "Poladryas arachne", + "1901739": "Magneuptychia", + "1901744": "Magneuptychia libye", + "1901776": "Lachnoptera", + "1901781": "Lachnoptera anticlia", + "1901782": "Lachnoptera ayresii", + "1901786": "Pyrrhogyra", + "1901794": "Pyrrhogyra edocla", + "1901801": "Pyrrhogyra neaerea", + "1901804": "Pyrrhogyra crameri", + "1901810": "Pyrrhogyra otolais", + "1901823": "Damora", + "1901832": "Damora sagana", + "1901850": "Damora pandora", + "1901885": "Junonia", + "1902105": "Argyrophenga", + "1902106": "Argyrophenga janitae", + "1902108": "Argyrophenga antipodum", + "1902109": "Ortilia", + "1902110": "Ortilia dicoma", + "1902111": "Ortilia ithra", + "1902114": "Ortilia orthia", + "1902117": "Ortilia velica", + "1902118": "Ortilia gentina", + "1902143": "Hypodryas iduna", + "1902169": "Hypodryas cynthia", + "1902175": "Hypodryas gillettii", + "1902182": "Hypodryas intermedia", + "1902206": "Thyridia", + "1902211": "Thyridia psidii", + "1902221": "Geitoneura", + "1902233": "Geitoneura minyas", + "1902244": "Geitoneura klugii", + "1902248": "Geitoneura acantha", + "1902275": "Oleria", + "1902300": "Oleria vicina", + "1902346": "Oleria onega", + "1902378": "Oleria paula", + "1902384": "Oleria baizana", + "1902388": "Oleria padilla", + "1902399": "Zaretis", + "1902406": "Zaretis ellops", + "1902410": "Zaretis strigosus", + "1902425": "Dymasia", + "1902430": "Dymasia dymas", + "1902433": "Mechanitis", + "1902451": "Mechanitis messenoides", + "1902458": "Mechanitis lysimnia", + "1902479": "Mechanitis polymnia", + "1902502": "Mechanitis menapis", + "1902519": "Araschnia", + "1902533": "Araschnia levana", + "1902543": "Araschnia burejana", + "1902560": "Araschnia doris", + "1902562": "Penthema", + "1902568": "Penthema darlisa", + "1902572": "Penthema adelma", + "1902586": "Penthema formosanum", + "1902610": "Microtia", + "1902614": "Parataygetis", + "1902615": "Parataygetis lineata", + "1902619": "Cepheuptychia", + "1902620": "Cepheuptychia glaucina", + "1902623": "Cepheuptychia cephus", + "1902626": "Siderone", + "1902642": "Siderone galanthis", + "1902644": "Anthanassa", + "1902660": "Anthanassa hermas", + "1902670": "Anthanassa argentea", + "1902676": "Anthanassa tulcis", + "1902680": "Anthanassa ptolyca", + "1902692": "Anthanassa drusilla", + "1902699": "Anthanassa frisia", + "1902702": "Anthanassa ardys", + "1902703": "Anthanassa sitalces", + "1902704": "Anthanassa atronia", + "1902707": "Brenthis", + "1902749": "Brenthis ino", + "1902795": "Mcclungia", + "1902801": "Proterebia", + "1902813": "Callithomia", + "1902814": "Callithomia lenea", + "1902873": "Pteronymia", + "1902880": "Pteronymia cotytto", + "1902882": "Pteronymia ozia", + "1902885": "Pteronymia aletta", + "1902993": "Panacea", + "1903008": "Cassionympha", + "1903009": "Cassionympha cassius", + "1903019": "Hyposcada", + "1903028": "Hyposcada virginiana", + "1903193": "Euthalia", + "1903598": "Brassolis sophorae", + "1903601": "Temenis", + "1903607": "Temenis laothoe", + "1903625": "Euptychoides", + "1903634": "Euptychoides laccine", + "1903636": "Euptychoides albofasciata", + "1903637": "Pharneuptychia", + "1903646": "Pharneuptychia phares", + "1903653": "Capronnieria", + "1903656": "Bolboneura", + "1903658": "Bolboneura sylphis", + "1903659": "Pseudoneptis", + "1903661": "Pseudoneptis bugandensis", + "1903673": "Texola", + "1903683": "Texola elada", + "1904193": "Bebearia", + "1904206": "Bebearia orientis", + "1904271": "Thaumantis", + "1904272": "Thaumantis diores", + "1904281": "Thaumantis klugius", + "1904282": "Thaumantis noureddin", + "1904283": "Thaumantis odana", + "1904294": "Eueides", + "1904380": "Smyrna", + "1904382": "Smyrna blomfildia", + "1904688": "Cethosia", + "1904701": "Cethosia cyane", + "1904719": "Cethosia biblis", + "1904728": "Cethosia penthesilea", + "1904760": "Cethosia myrina", + "1904764": "Cethosia hypsea", + "1904798": "Cethosia cydippe", + "1904817": "Biblis", + "1904851": "Cyrestis", + "1904884": "Cyrestis acilia", + "1904887": "Cyrestis themire", + "1904888": "Cyrestis maenalis", + "1904916": "Cyrestis thyonneus", + "1904921": "Cyrestis lutea", + "1904922": "Cyrestis strigata", + "1904932": "Cyrestis heracles", + "1904938": "Cyrestis nivea", + "1904943": "Cyrestis cocles", + "1904948": "Cyrestis thyodamas", + "1904981": "Doleschallia", + "1904996": "Doleschallia bisaltide", + "1905071": "Dichorragia", + "1905079": "Dichorragia nesimachus", + "1905123": "Rhinopalpa", + "1905142": "Rhinopalpa polynice", + "1905150": "Speyeria", + "1905161": "Speyeria adiaste", + "1905162": "Speyeria idalia", + "1905172": "Speyeria cybele", + "1905187": "Speyeria mormonia", + "1905189": "Speyeria coronis", + "1905242": "Speyeria nokomis", + "1905257": "Speyeria egleis", + "1905267": "Speyeria callippe", + "1905281": "Speyeria zerene", + "1905297": "Speyeria edwardsii", + "1905299": "Speyeria hesperis", + "1905301": "Speyeria aphrodite", + "1905310": "Speyeria diana", + "1905317": "Speyeria hydaspe", + "1905319": "Pseudoscada", + "1905321": "Pseudoscada erruca", + "1905339": "Issoria", + "1905383": "Issoria lathonia", + "1905396": "Issoria eugenia", + "1905450": "Hypna", + "1905451": "Hypna clytemnestra", + "1906002": "Amauris", + "1906006": "Amauris ochlea", + "1906014": "Amauris albimaculata", + "1906030": "Amauris niavius", + "1906063": "Amauris tartarea", + "1906117": "Amauris echeria", + "1906139": "Pseudonympha", + "1906171": "Cymothoe", + "1906451": "Hyponephele", + "1906552": "Hyponephele lupinus", + "1906565": "Chloropoea", + "1906604": "Chloropoea boisduvalii", + "1906621": "Chloropoea lucretia", + "1906679": "Chloropoea eurytus", + "1906714": "Cosmosatyrus", + "1906715": "Cosmosatyrus leptoneuroides", + "1907130": "Anaea", + "1907153": "Anaea aidea", + "1907190": "Anaea ryphea", + "1907235": "Anaea andria", + "1907250": "Anaea pithyusa", + "1907272": "Anaea troglodyta", + "1907355": "Salamis", + "1907390": "Antillea", + "1907395": "Antillea pelops", + "1907398": "Neptidopsis", + "1907399": "Neptidopsis ophione", + "1907407": "Ypthima", + "1907430": "Ypthima pandocus", + "1907432": "Ypthima stellera", + "1907436": "Ypthima masakii", + "1907475": "Ypthima fasciata", + "1907498": "Ypthima multistriata", + "1907511": "Ypthima praenubila", + "1907534": "Ypthima lisandra", + "1907541": "Ypthima atra", + "1907547": "Ypthima tappana", + "1907569": "Ypthima sesara", + "1907576": "Ypthima ypthimoides", + "1907580": "Ypthima akragas", + "1907620": "Ypthima nikaea", + "1907625": "Ypthima argus", + "1907637": "Ypthima tabella", + "1907666": "Ypthima nynias", + "1907672": "Ypthima ceylonica", + "1907683": "Ypthima arctous", + "1907687": "Ypthima baldus", + "1907726": "Athesis", + "1907727": "Athesis clearista", + "1907997": "Occidryas", + "1908011": "Occidryas editha", + "1908044": "Occidryas anicia", + "1908052": "Occidryas colon", + "1908055": "Occidryas chalcedona", + "1908108": "Erebia merula", + "1908109": "Ithomia", + "1908123": "Ithomia diasia", + "1908138": "Ithomia drymo", + "1908144": "Ithomia terra", + "1908146": "Ithomia heraldica", + "1908148": "Ithomia patilla", + "1908150": "Ithomia iphianassa", + "1908168": "Ithomia agnosia", + "1908174": "Ithomia salapia", + "1908197": "Taygetis", + "1908199": "Taygetis rufomarginata", + "1908203": "Taygetis mermeria", + "1908204": "Taygetis thamyra", + "1908207": "Taygetis uncinata", + "1908217": "Taygetis tripunctata", + "1908256": "Taygetis inconspicua", + "1908258": "Taygetis uzza", + "1908262": "Taygetis echo", + "1908298": "Nessaea", + "1908299": "Nessaea obrinus", + "1908302": "Nessaea aglaura", + "1908309": "Nessaea hewitsonii", + "1908317": "Corades chelonis", + "1908337": "Corades enyo", + "1908339": "Corades medeba", + "1908348": "Pseudergolis", + "1908352": "Pseudergolis wedah", + "1908354": "Physcaeneura", + "1908356": "Physcaeneura panda", + "1908361": "Palaeonympha", + "1908367": "Palaeonympha opalina", + "1908573": "Cithaerias", + "1908577": "Cithaerias pireta", + "1908624": "Ideopsis", + "1908660": "Ideopsis vulgaris", + "1908700": "Ideopsis vitrea", + "1908702": "Ideopsis similis", + "1908707": "Ideopsis gaura", + "1908713": "Ideopsis juventa", + "1908757": "Anetia", + "1908769": "Amathuxidia", + "1908775": "Amathuxidia amythaon", + "1908788": "Coelites", + "1908800": "Tanaecia", + "1908818": "Tanaecia palguna", + "1908840": "Tanaecia jahnu", + "1908863": "Tanaecia cocytus", + "1908871": "Tanaecia lepidea", + "1908897": "Tanaecia trigerta", + "1908929": "Tanaecia julii", + "1908953": "Tanaecia pelea", + "1908962": "Tanaecia aruna", + "1908980": "Diaethria", + "1908995": "Diaethria astala", + "1909004": "Diaethria neglecta", + "1909019": "Diaethria clymena", + "1909025": "Diaethria eluina", + "1909039": "Diaethria candrena", + "1909064": "Diaethria anna", + "1909067": "Oxeoschistus", + "1909070": "Oxeoschistus puerta", + "1909106": "Baeotus", + "1909108": "Baeotus deucalion", + "1909115": "Thauria", + "1909123": "Thauria aliris", + "1909124": "Dynamine", + "1909128": "Dynamine postverta", + "1909135": "Dynamine aerata", + "1909155": "Dynamine tithia", + "1909170": "Dynamine dyonis", + "1909185": "Dynamine theseus", + "1909191": "Dynamine athemon", + "1909209": "Dynamine myrrhina", + "1909211": "Dynamine agacles", + "1909213": "Dynamine coenus", + "1909215": "Tirumala", + "1909216": "Tirumala hamata", + "1909217": "Lasiophila", + "1909241": "Lasiophila orbifera", + "1909276": "Eulaceura", + "1909281": "Eulaceura osteria", + "1909297": "Stichophthalma", + "1909319": "Stichophthalma howqua", + "1909334": "Argynnis", + "1909398": "Argynnis paphia", + "1909428": "Hypocysta", + "1909436": "Hypocysta irius", + "1909453": "Hypocysta euphemia", + "1909457": "Hypocysta metirius", + "1909462": "Perisama", + "1909489": "Perisama humboldtii", + "1909532": "Perisama cardases", + "1909573": "Perisama oppelii", + "1909588": "Kallima", + "1909607": "Kallima inachus", + "1909649": "Kallima horsfieldii", + "1909659": "Kallima sylvia", + "1909736": "Acraea aganice", + "1909799": "Neominois", + "1909800": "Neominois ridingsii", + "1909804": "Libythea", + "1909810": "Libythea myrrha", + "1909818": "Libythea laius", + "1909838": "Libythea celtis", + "1909854": "Libythea geoffroy", + "1909865": "Libythea lepita", + "1909876": "Pandita", + "1909879": "Pandita sinope", + "1909881": "Xanthotaenia", + "1909884": "Xanthotaenia busiris", + "1909888": "Morpho", + "1910363": "Neorina", + "1910371": "Neorina lowii", + "1910377": "Mazia", + "1910378": "Mazia amazonica", + "1910384": "Lycorea", + "1910496": "Hypolimnas anthedon", + "1910501": "Hypolimnas monteironis", + "1910576": "Hypolimnas deois", + "1910628": "Hypolimnas misippus", + "1910629": "Hypolimnas bolina", + "1910648": "Hypolimnas alimena", + "1910662": "Hypolimnas anomala", + "1910663": "Hypolimnas salmacis", + "1910682": "Vindula", + "1910706": "Vindula erota", + "1910753": "Vindula arsinoe", + "1910771": "Pseudodebis", + "1910773": "Pseudodebis valentina", + "1910782": "Aeria", + "1910796": "Yoma", + "1910809": "Yoma sabina", + "1910812": "Yoma algina", + "1911072": "Janatella", + "1911076": "Janatella leucodesma", + "1911077": "Janatella fellula", + "1911078": "Coenonympha", + "1911093": "Coenonympha oedippus", + "1911112": "Coenonympha tullia", + "1911122": "Coenonympha thyrsis", + "1911168": "Coenonympha hero", + "1911178": "Coenonympha haydeni", + "1911182": "Coenonympha corinna", + "1911198": "Coenonympha sunbecca", + "1911246": "Coenonympha california", + "1911278": "Coenonympha glycerion", + "1911298": "Coenonympha leander", + "1911300": "Coenonympha saadi", + "1911461": "Coenonympha pamphilus", + "1911503": "Coenonympha amaryllis", + "1911518": "Marpesia", + "1911573": "Satyrotaygetis", + "1911577": "Satyrotaygetis satyrina", + "1911580": "Ariadne", + "1911627": "Pseudochazara", + "1911633": "Pseudochazara pelopea", + "1911690": "Phaedyma", + "1911736": "Phaedyma columella", + "1911755": "Phaedyma shepherdi", + "1911763": "Fabriciana", + "1911932": "Manataria", + "1911939": "Manataria maculata", + "1911943": "Prepona", + "1911966": "Prepona amphimachus", + "1912003": "Prepona demophon", + "1912036": "Prepona demophoon", + "1912119": "Prepona laertes", + "1912138": "Sephisa", + "1912157": "Vanessula", + "1912162": "Hypothyris", + "1912319": "Boloria", + "1912325": "Boloria selene", + "1912372": "Boloria aquilonaris", + "1912395": "Boloria graeca", + "1912428": "Boloria alaskensis", + "1912470": "Boloria napaea", + "1912473": "Memphis", + "1912488": "Bicyclus", + "1912506": "Bicyclus cottrelli", + "1912583": "Satyrus", + "1913046": "Cupha", + "1913091": "Cupha prosope", + "1913105": "Cupha erymanthis", + "1913113": "Mellicta", + "1913175": "Mellicta aurelia", + "1913178": "Mellicta britomartis", + "1913328": "Mellicta celadussa", + "1913351": "Mellicta parthenoides", + "1913371": "Mellicta asteria", + "1913456": "Erebia", + "1914398": "Chlosyne", + "1914410": "Chlosyne californica", + "1914416": "Chlosyne erodyle", + "1914420": "Chlosyne poecile", + "1914421": "Chlosyne palla", + "1914424": "Chlosyne gaudialis", + "1914433": "Chlosyne narva", + "1914435": "Chlosyne endeis", + "1914439": "Chlosyne harrisii", + "1914440": "Chlosyne melanarge", + "1914442": "Chlosyne ehrenbergii", + "1914458": "Chlosyne nycteis", + "1914464": "Chlosyne acastus", + "1914465": "Chlosyne lacinia", + "1914477": "Chlosyne gabbii", + "1914484": "Chlosyne hoffmanni", + "1914496": "Chlosyne melitaeoides", + "1914498": "Chlosyne definita", + "1914500": "Chlosyne rosita", + "1914501": "Chlosyne janais", + "1914511": "Chlosyne hippodrome", + "1914692": "Harjesia", + "1914693": "Harjesia blanda", + "1914695": "Posttaygetis", + "1914697": "Posttaygetis penelea", + "1914701": "Neope goschkevitschii", + "1914708": "Neope pulaha", + "1914734": "Neope bremeri", + "1914749": "Neope armandii", + "1915017": "Pantoporia", + "1915031": "Pantoporia venilia", + "1915079": "Pantoporia cama", + "1915080": "Pantoporia hordonia", + "1915110": "Pantoporia paraka", + "1915140": "Pantoporia zeroca", + "1915144": "Pantoporia consimilis", + "1915154": "Pantoporia jina", + "1915160": "Pantoporia sandaka", + "1915189": "Consul", + "1915193": "Consul fabius", + "1915248": "Cirrochroa", + "1915262": "Cirrochroa aoris", + "1915270": "Cirrochroa orissa", + "1915275": "Cirrochroa thais", + "1915325": "Cirrochroa tyche", + "1915332": "Cirrochroa malaya", + "1915337": "Yphthimoides", + "1915339": "Yphthimoides renata", + "1915368": "Yphthimoides patricia", + "1915369": "Yphthimoides celmis", + "1915371": "Opsiphanes", + "1915396": "Opsiphanes cassina", + "1915401": "Opsiphanes cassiae", + "1915415": "Opsiphanes batea", + "1915417": "Opsiphanes fabricii", + "1915427": "Opsiphanes quiteria", + "1915430": "Opsiphanes boisduvalii", + "1915456": "Opsiphanes invirae", + "1915464": "Cercyonis", + "1915469": "Cercyonis sthenele", + "1915470": "Cercyonis oetus", + "1915487": "Cercyonis meadi", + "1915492": "Cercyonis pegala", + "1915497": "Pardopsis", + "1915499": "Pardopsis punctatissima", + "1915504": "Gyrocheilus", + "1915506": "Gyrocheilus patrobas", + "1915513": "Pagyris", + "1915529": "Acraea", + "1916334": "Melanargia", + "1916347": "Melanargia arge", + "1916352": "Melanargia ines", + "1916376": "Melanargia titea", + "1916410": "Melanargia russiae", + "1916412": "Melanargia larissa", + "1916458": "Melanargia lachesis", + "1916509": "Melanargia epimede", + "1916554": "Melanargia occitanica", + "1916665": "Haetera", + "1916677": "Hypoleria", + "1916700": "Hypoleria lavinia", + "1916701": "Hypoleria ocalea", + "1916752": "Herona", + "1916758": "Herona marathus", + "1916765": "Telenassa", + "1916772": "Telenassa teletusa", + "1916790": "Telenassa berenice", + "1916794": "Euploea", + "1917796": "Erites", + "1917818": "Tegosa", + "1917827": "Tegosa guatemalena", + "1917830": "Tegosa anieta", + "1917834": "Tegosa claudina", + "1917840": "Tegosa orobia", + "1917887": "Lymanopoda", + "1917911": "Lymanopoda caeruleata", + "1918025": "Symphaedra", + "1918026": "Symphaedra nais", + "1918071": "Caligo", + "1918076": "Caligo beltrao", + "1918077": "Caligo eurilochus", + "1918078": "Caligo illioneus", + "1918082": "Caligo uranus", + "1918086": "Caligo teucer", + "1918094": "Caligo telamonius", + "1918097": "Caligo brasiliensis", + "1918133": "Caligo atreus", + "1918149": "Caligo idomeneus", + "1918203": "Stygionympha", + "1918207": "Stygionympha wichgrafi", + "1918212": "Stygionympha vigilans", + "1918214": "Godyris", + "1918220": "Godyris zavaleta", + "1918262": "Pareuptychia", + "1918263": "Pareuptychia summandosa", + "1918268": "Pareuptychia hesionides", + "1918269": "Pareuptychia metaleuca", + "1918280": "Pareuptychia ocirrhoe", + "1918291": "Paramecera", + "1918293": "Paramecera xicaque", + "1918309": "Lethe", + "1918321": "Lethe confusa", + "1918394": "Lethe verma", + "1918395": "Lethe eurydice", + "1918406": "Lethe mekara", + "1918408": "Lethe sidonis", + "1918411": "Lethe diana", + "1918416": "Lethe mataja", + "1918467": "Lethe sicelis", + "1918495": "Lethe dura", + "1918497": "Lethe rohria", + "1918509": "Lethe hyrania", + "1918517": "Lethe baladeva", + "1918532": "Lethe minerva", + "1918533": "Lethe chandica", + "1918547": "Lethe drypetis", + "1918553": "Lethe syrcis", + "1918554": "Lethe europa", + "1918584": "Lebadea martha", + "1918594": "Megeuptychia", + "1918596": "Megeuptychia antonoe", + "1918599": "Heterosais", + "1918601": "Heterosais edessa", + "1918607": "Hipparchia", + "1918627": "Hipparchia autonoe", + "1918632": "Hipparchia fidia", + "1918667": "Hipparchia parisatis", + "1918669": "Hipparchia fagi", + "1918688": "Hipparchia wyssii", + "1918694": "Hipparchia cretica", + "1918733": "Hipparchia volgensis", + "1918736": "Hipparchia fatua", + "1918776": "Hipparchia aristaeus", + "1918789": "Hipparchia cypriensis", + "1918795": "Hipparchia miguelensis", + "1918843": "Hipparchia pellucida", + "1918854": "Hipparchia syriaca", + "1918859": "Hipparchia neomiris", + "1918868": "Hipparchia hermione", + "1918912": "Sallya", + "1918933": "Bia", + "1918940": "Phyciodes", + "1918964": "Phyciodes pallida", + "1918968": "Phyciodes pallescens", + "1918972": "Phyciodes graphica", + "1918984": "Phyciodes phaon", + "1918986": "Phyciodes batesii", + "1918988": "Phyciodes tharos", + "1918999": "Argyreuptychia", + "1919007": "Argyreuptychia labe", + "1919010": "Argyreuptychia penelope", + "1919016": "Pyronia", + "1919119": "Neophasia", + "1919124": "Archonias", + "1919125": "Archonias brassolis", + "1919127": "Anteos", + "1919128": "Anteos maerula", + "1919129": "Anteos menippe", + "1919130": "Anteos clorinde", + "1919144": "Ganyra", + "1919145": "Ganyra howarthi", + "1919146": "Ganyra phaloe", + "1919149": "Ganyra josephina", + "1919150": "Pareronia", + "1919151": "Pareronia valeria", + "1919160": "Pareronia tritaea", + "1919161": "Pareronia ceylanica", + "1919168": "Lieinix", + "1919173": "Lieinix nemesis", + "1919175": "Belenois", + "1919176": "Belenois java", + "1919181": "Belenois aurota", + "1919194": "Belenois thysa", + "1919210": "Belenois calypso", + "1919213": "Belenois creona", + "1919214": "Belenois zochalia", + "1919219": "Elphinstonia", + "1919221": "Elphinstonia penia", + "1919223": "Elphinstonia charlonia", + "1919227": "Pereute", + "1919233": "Pereute swainsoni", + "1919235": "Pereute charops", + "1919238": "Perrhybris", + "1919239": "Perrhybris pamela", + "1919243": "Dismorphia", + "1919245": "Dismorphia crisia", + "1919267": "Dismorphia thermesia", + "1919277": "Dismorphia medora", + "1919282": "Dismorphia amphione", + "1919287": "Dismorphia spio", + "1919289": "Dismorphia theucharila", + "1919305": "Ascia", + "1919315": "Euchloe", + "1919316": "Euchloe lotta", + "1919317": "Euchloe tagis", + "1919320": "Euchloe ausonia", + "1919326": "Euchloe olympia", + "1919327": "Euchloe ausonides", + "1919328": "Euchloe creusa", + "1919330": "Euchloe simplonia", + "1919333": "Euchloe belemia", + "1919338": "Euchloe hyantis", + "1919339": "Catopsilia", + "1919340": "Catopsilia pomona", + "1919342": "Catopsilia gorgophone", + "1919344": "Catopsilia scylla", + "1919346": "Catopsilia florella", + "1919348": "Catopsilia pyranthe", + "1919351": "Delias", + "1919381": "Delias nysa", + "1919407": "Delias ninus", + "1919412": "Delias eucharis", + "1919419": "Delias harpalyce", + "1919421": "Delias argenthona", + "1919432": "Delias nigrina", + "1919438": "Delias descombesi", + "1919444": "Delias ennia", + "1919534": "Delias pasithoe", + "1919540": "Delias mysis", + "1919551": "Delias belladonna", + "1919564": "Delias belisama", + "1919581": "Delias agostina", + "1919589": "Delias hyparete", + "1919626": "Delias aganippe", + "1919635": "Delias acalis", + "1919645": "Phoebis", + "1919646": "Phoebis philea", + "1919649": "Phoebis neocypris", + "1919652": "Phoebis agarithe", + "1919653": "Phoebis sennae", + "1919656": "Phoebis argante", + "1919659": "Nepheronia", + "1919660": "Nepheronia thalassina", + "1919663": "Nepheronia buquetii", + "1919665": "Nepheronia argia", + "1919675": "Enantia", + "1919696": "Anthocharis", + "1919697": "Anthocharis bambusarum", + "1919698": "Anthocharis euphenoides", + "1919700": "Anthocharis sara", + "1919701": "Anthocharis thoosa", + "1919702": "Anthocharis lanceolata", + "1919703": "Anthocharis belia", + "1919705": "Anthocharis cethura", + "1919706": "Anthocharis gruneri", + "1919711": "Anthocharis midea", + "1919712": "Anthocharis cardamines", + "1919716": "Anthocharis damone", + "1919719": "Anthocharis julia", + "1919720": "Anthocharis scolymus", + "1919721": "Cepora", + "1919728": "Cepora iudith", + "1919731": "Cepora nadina", + "1919741": "Cepora nerissa", + "1919744": "Cepora perimale", + "1919756": "Cepora timnatha", + "1919758": "Cepora aspasia", + "1919762": "Cepora fora", + "1919919": "Dixeia", + "1919924": "Dixeia charina", + "1919929": "Dixeia spilleri", + "1919930": "Dixeia pigea", + "1919936": "Pyrisitia", + "1919937": "Pyrisitia venusta", + "1919939": "Pyrisitia lisa", + "1919943": "Pyrisitia nise", + "1919945": "Pyrisitia leuce", + "1919947": "Pyrisitia proterpia", + "1919949": "Pyrisitia dina", + "1919950": "Hebomoia", + "1919951": "Hebomoia glaucippe", + "1919962": "Zegris", + "1919966": "Zegris eupheme", + "1920160": "Ixias", + "1920180": "Pinacopteryx", + "1920181": "Pinacopteryx eriphia", + "1920190": "Nathalis", + "1920192": "Nathalis iole", + "1920218": "Aporia crataegi", + "1920236": "Pontia", + "1920237": "Pontia callidice", + "1920247": "Pontia chloridice", + "1920258": "Pontia daplidice", + "1920259": "Pontia edusa", + "1920261": "Hesperocharis", + "1920266": "Hesperocharis paranensis", + "1920274": "Pseudopieris", + "1920275": "Pseudopieris nehemia", + "1920283": "Eurema", + "1920346": "Colotis", + "1920348": "Colotis eris", + "1920349": "Colotis etrida", + "1920353": "Colotis regina", + "1920356": "Colotis aurora", + "1920357": "Colotis fausta", + "1920359": "Colotis chrysonome", + "1920362": "Colotis danae", + "1920363": "Colotis ione", + "1920369": "Colotis phisadia", + "1920370": "Colotis euippe", + "1920374": "Colotis amata", + "1920377": "Colotis aurigineus", + "1920378": "Colotis evenina", + "1920379": "Colotis celimene", + "1920381": "Colotis vesta", + "1920390": "Colotis pallene", + "1920395": "Colotis evagore", + "1920401": "Colotis antevippe", + "1920404": "Colotis subfasciatus", + "1920405": "Colotis auxo", + "1920412": "Leptosia", + "1920425": "Leptophobia", + "1920426": "Leptophobia aripa", + "1920431": "Leptophobia eleone", + "1920437": "Leptophobia caesia", + "1920451": "Dercas", + "1920454": "Dercas verhuelli", + "1920460": "Itaballia", + "1920461": "Itaballia pandosia", + "1920463": "Itaballia demophile", + "1920465": "Prioneris", + "1920467": "Prioneris philonome", + "1920469": "Prioneris thestylis", + "1920472": "Prioneris sita", + "1920481": "Pieris", + "1920491": "Pieris mannii", + "1920494": "Pieris napi", + "1920496": "Pieris rapae", + "1920498": "Pieris balcana", + "1920502": "Pieris krueperi", + "1920506": "Pieris brassicae", + "1920509": "Pieris cheiranthi", + "1920512": "Pieris ergane", + "1920513": "Gandaca", + "1920515": "Gandaca harina", + "1920523": "Elodina", + "1920534": "Elodina queenslandica", + "1920535": "Elodina angulipennis", + "1920538": "Elodina walkeri", + "1920541": "Elodina parthia", + "1920551": "Pieriballia", + "1920552": "Pieriballia viardi", + "1920554": "Leptidea", + "1920570": "Aphrissa", + "1920571": "Aphrissa statira", + "1920574": "Aphrissa neleis", + "1920580": "Kricogonia", + "1920581": "Kricogonia lyside", + "1920583": "Mathania", + "1920586": "Mathania leucothea", + "1920621": "Abaeis nicippe", + "1920622": "Appias", + "1920682": "Melete", + "1920691": "Melete lycimnia", + "1920702": "Eroessa", + "1920704": "Gonepteryx", + "1920707": "Gonepteryx farinosa", + "1920709": "Gonepteryx cleopatra", + "1920711": "Gonepteryx aspasia", + "1920712": "Gonepteryx rhamni", + "1920718": "Gonepteryx amintha", + "1920723": "Mylothris", + "1920785": "Saletara", + "1920786": "Saletara panda", + "1920793": "Glutophrissa", + "1920795": "Glutophrissa epaphia", + "1920803": "Glutophrissa drusilla", + "1920808": "Zerene", + "1920809": "Zerene cesonia", + "1920810": "Zerene eurydice", + "1920814": "Eronia", + "1920815": "Eronia cleodora", + "1920816": "Eronia leda", + "1920834": "Elkalyce", + "1920844": "Elkalyce comyntas", + "1920851": "Elkalyce argiades", + "1920864": "Elkalyce alcetas", + "1920889": "Elkalyce amyntula", + "1920892": "Elkalyce decolorata", + "1920900": "Elkalyce comyntas", + "1920921": "Theritas", + "1920923": "Theritas mavors", + "1920925": "Caleta", + "1920934": "Rapala", + "1920957": "Rapala pheretima", + "1920991": "Rapala suffusa", + "1920996": "Rapala arata", + "1921009": "Rapala manea", + "1921010": "Rapala varuna", + "1921021": "Rapala dieneces", + "1921040": "Rapala caerulea", + "1921044": "Rapala iarbus", + "1921052": "Hypostrymon", + "1921053": "Hypostrymon critola", + "1921054": "Una", + "1921055": "Una usta", + "1921060": "Zintha", + "1921064": "Zintha hintza", + "1921065": "Luthrodes", + "1921088": "Surendra", + "1921092": "Surendra quercetorum", + "1921093": "Surendra vivarna", + "1921118": "Iaspis", + "1921120": "Tmolus", + "1921123": "Tmolus echion", + "1921138": "Pseudozizeeria", + "1921150": "Pseudozizeeria maha", + "1921156": "Taraka", + "1921163": "Taraka hamada", + "1921235": "Incisalia", + "1921239": "Incisalia eryphon", + "1921240": "Incisalia henrici", + "1921247": "Incisalia augustinus", + "1921248": "Incisalia lanoraieensis", + "1921255": "Incisalia niphon", + "1921257": "Catopyrops", + "1921262": "Catopyrops florinda", + "1921263": "Catopyrops ancyra", + "1921287": "Erysichton", + "1921300": "Erysichton lineata", + "1921439": "Agrodiaetus", + "1921466": "Agrodiaetus admetus", + "1921521": "Agrodiaetus humedasae", + "1921590": "Agrodiaetus fulgens", + "1921632": "Creon", + "1921633": "Creon cleobis", + "1921642": "Spalgis", + "1921650": "Spalgis lemolea", + "1921657": "Danis", + "1921895": "Neozephyrus", + "1921897": "Neozephyrus taiwanus", + "1921908": "Harkenclenus", + "1921910": "Harkenclenus titus", + "1921918": "Lamprospilus", + "1921987": "Stalachtis", + "1921992": "Stalachtis phlegia", + "1921993": "Stalachtis euterpe", + "1922015": "Stalachtis calliope", + "1922024": "Stalachtis susanna", + "1922028": "Mitoura", + "1922038": "Mitoura gryneus", + "1922039": "Mitoura gryneus", + "1922041": "Mitoura spinetorum", + "1922044": "Mitoura hesseli", + "1922049": "Mitoura gryneus", + "1922054": "Manto", + "1922057": "Manto hypoleuca", + "1922059": "Leptomyrina", + "1922063": "Leptomyrina phidias", + "1922064": "Leptomyrina hirundo", + "1922068": "Tajuria", + "1922085": "Tajuria jehana", + "1922111": "Tajuria maculatus", + "1922143": "Tajuria cippus", + "1922152": "Eooxylides", + "1922163": "Eooxylides tharis", + "1922191": "Laeosopis", + "1922197": "Laeosopis roboris", + "1922218": "Erora", + "1922219": "Erora quaderna", + "1922223": "Erora laeta", + "1922236": "Zizula", + "1922244": "Zizula hylax", + "1922270": "Chilades", + "1922285": "Chilades laius", + "1922288": "Chilades parrhasius", + "1922291": "Chilades eleusis", + "1922297": "Kretania", + "1922308": "Maculinea", + "1922311": "Maculinea arion", + "1922343": "Maculinea nausithous", + "1922454": "Electrostrymon", + "1922455": "Electrostrymon hugon", + "1922465": "Hemiolaus", + "1922468": "Hemiolaus caeculus", + "1922516": "Loxura", + "1922569": "Pseudophilotes", + "1922572": "Pseudophilotes abencerragus", + "1922584": "Pseudophilotes baton", + "1922635": "Pseudolycaena", + "1922637": "Pseudolycaena marsyas", + "1922672": "Habrodais", + "1922676": "Habrodais grunus", + "1922677": "Pseudonacaduba", + "1922679": "Pseudonacaduba sichela", + "1922682": "Axiocerses", + "1922689": "Axiocerses harpax", + "1922694": "Axiocerses amanga", + "1922701": "Axiocerses tjoane", + "1922712": "Japonica", + "1922735": "Pseudolucia", + "1922739": "Pseudolucia chilensis", + "1922740": "Ionolyce", + "1922745": "Ionolyce helicon", + "1922760": "Sithon", + "1922771": "Sithon nedymond", + "1922827": "Calycopis", + "1922849": "Calycopis bellera", + "1922851": "Calycopis cecrops", + "1922865": "Calycopis isobeon", + "1922867": "Calycopis caulonia", + "1922868": "Calycopis origo", + "1922888": "Cyanophrys", + "1922889": "Cyanophrys miserabilis", + "1922890": "Cyanophrys longula", + "1922918": "Vacciniina", + "1922937": "Vacciniina optilete", + "1922953": "Logania", + "1922993": "Semanga", + "1922994": "Semanga superba", + "1923013": "Iolana", + "1923019": "Iolana iolas", + "1923037": "Iolana debilitata", + "1923058": "Plebejus", + "1923457": "Thaduka", + "1923458": "Thaduka multicaudata", + "1923462": "Eicochrysops", + "1923465": "Eicochrysops hippocrates", + "1923473": "Eicochrysops messapus", + "1923487": "Yasoda", + "1923491": "Yasoda tripunctata", + "1923497": "Phaeostrymon", + "1923498": "Phaeostrymon alcestis", + "1923499": "Atlides", + "1923505": "Atlides halesus", + "1923510": "Allotinus", + "1923525": "Allotinus unicolor", + "1923621": "Heliophorus", + "1923649": "Heliophorus brahma", + "1923650": "Heliophorus sena", + "1923651": "Heliophorus epicles", + "1923668": "Heliophorus ila", + "1923675": "Chlorostrymon", + "1923678": "Chlorostrymon telea", + "1923679": "Chlorostrymon simaethis", + "1923699": "Hypochrysops", + "1923744": "Hypochrysops narcissus", + "1923782": "Hypochrysops delicia", + "1923795": "Pseudoaricia", + "1923796": "Pseudoaricia nicias", + "1923808": "Edales", + "1923809": "Edales pandava", + "1923835": "Miletus", + "1923883": "Miletus biggsii", + "1923917": "Miletus chinensis", + "1923996": "Arcas", + "1923997": "Arcas imperialis", + "1924035": "Antigius", + "1924044": "Antigius attilia", + "1924047": "Glaucopsyche", + "1924050": "Glaucopsyche piasus", + "1924057": "Glaucopsyche lycormas", + "1924077": "Glaucopsyche paphos", + "1924082": "Glaucopsyche melanops", + "1924097": "Glaucopsyche alexis", + "1924106": "Glaucopsyche lygdamus", + "1924171": "Echinargus", + "1924176": "Echinargus isola", + "1924181": "Megisba", + "1924193": "Megisba malaya", + "1924221": "Tharsalea", + "1924223": "Tharsalea rubidus", + "1924232": "Tharsalea arota", + "1924241": "Nordmannia", + "1924272": "Acytolepis", + "1924298": "Acytolepis puspa", + "1924315": "Discolampa", + "1924323": "Discolampa ethion", + "1924333": "Deudorix", + "1924362": "Deudorix diovis", + "1924390": "Deudorix epijarbas", + "1924392": "Deudorix diocles", + "1924417": "Deudorix elioti", + "1924429": "Deudorix dinochares", + "1924447": "Remelana", + "1924458": "Remelana jangala", + "1924494": "Loweia tityrus", + "1924511": "Philotes", + "1924513": "Philotes pallescens", + "1924518": "Philotes sonorensis", + "1924521": "Philotes bernardino", + "1924522": "Chrysoritis", + "1924548": "Psychonotis", + "1924558": "Psychonotis caelius", + "1924564": "Lampides", + "1924713": "Lampides boeticus", + "1924749": "Arawacus", + "1924754": "Arawacus separata", + "1924755": "Symbiopsis", + "1924759": "Symbiopsis lenitas", + "1924767": "Feniseca", + "1924770": "Feniseca tarquinius", + "1924772": "Phasis", + "1924798": "Lysandra", + "1924867": "Lysandra caelestissima", + "1925221": "Lysandra coridon", + "1925233": "Lysandra bellargus", + "1925355": "Phengaris", + "1925375": "Thersamonia", + "1925381": "Thersamonia thersamon", + "1925409": "Cyclyrius", + "1925410": "Cyclyrius webbianus", + "1925423": "Strymon", + "1925429": "Strymon melinus", + "1925454": "Strymon acaciae", + "1925458": "Strymon caryaevorus", + "1925498": "Strymon sylvinus", + "1925500": "Strymon kingi", + "1925501": "Strymon saepium", + "1925509": "Strymon acadica", + "1925515": "Strymon alea", + "1925542": "Zeltus", + "1925543": "Zeltus amasa", + "1925550": "Neolucia", + "1925555": "Neolucia agricola", + "1925584": "Anthene", + "1925609": "Anthene amarah", + "1925615": "Anthene definita", + "1925628": "Anthene lycaenoides", + "1925676": "Anthene lunulata", + "1925679": "Anthene philo", + "1925693": "Anthene livida", + "1925694": "Anthene larydas", + "1925711": "Anthene seltuttus", + "1925731": "Anthene emolus", + "1925743": "Anthene lycaenina", + "1925782": "Jalmenus", + "1925800": "Durbaniopsis", + "1925801": "Durbaniopsis saga", + "1925804": "Celastrina", + "1925877": "Celastrina lavendularis", + "1925918": "Celastrina argiolus", + "1925922": "Celastrina echo", + "1925960": "Helleia", + "1925962": "Helleia helle", + "1925996": "Euphilotes", + "1926001": "Euphilotes glaucon", + "1926009": "Euphilotes enoptes", + "1926044": "Agriades", + "1926054": "Agriades glandon", + "1926166": "Cupido lorquinii", + "1926260": "Cupido minimus", + "1926317": "Quercusia", + "1926324": "Quercusia quercus", + "1926384": "Tomares", + "1926385": "Tomares ballus", + "1926426": "Prosotas", + "1926436": "Prosotas dubiosa", + "1926437": "Prosotas lutea", + "1926446": "Prosotas aluta", + "1926448": "Prosotas nora", + "1926456": "Prosotas noreia", + "1926460": "Prosotas felderi", + "1926526": "Azanus", + "1926530": "Azanus moriqua", + "1926531": "Azanus natalensis", + "1926539": "Azanus mirza", + "1926546": "Azanus jesous", + "1926550": "Azanus ubaldus", + "1926552": "Udara", + "1926574": "Udara dilectus", + "1926588": "Ancema", + "1926593": "Ancema blanka", + "1926611": "Ancema ctesia", + "1926709": "Cigaritis", + "1926722": "Cigaritis acamas", + "1926780": "Neopithecops", + "1926800": "Neopithecops zalmora", + "1926814": "Crudaria", + "1926817": "Crudaria leroma", + "1926818": "Lycaeides", + "1926823": "Lycaeides anna", + "1926834": "Lycaeides melissa", + "1926861": "Lycaeides idas", + "1926956": "Arhopala", + "1926972": "Arhopala aedias", + "1927025": "Arhopala atosia", + "1927034": "Arhopala bazalus", + "1927217": "Arhopala birmana", + "1927219": "Arhopala eumolphus", + "1927242": "Arhopala abseus", + "1927272": "Arhopala epimuta", + "1927274": "Arhopala madytus", + "1927284": "Arhopala amantes", + "1927299": "Cyclargus", + "1927301": "Cyclargus ammon", + "1927302": "Cyclargus thomasi", + "1927305": "Actizera", + "1927313": "Actizera lucida", + "1927317": "Poritia", + "1927348": "Poritia hewitsoni", + "1927390": "Pithecops", + "1927393": "Pithecops corvus", + "1927405": "Aphnaeus", + "1927439": "Aphnaeus lohita", + "1927445": "Aphnaeus lilacinus", + "1927521": "Lepidochrysops", + "1927633": "Lepidochrysops patricia", + "1927696": "Bindahara", + "1927707": "Bindahara phocides", + "1927711": "Ticherra", + "1927717": "Ticherra acte", + "1927718": "Satyrium", + "1927884": "Theclinesthes", + "1927894": "Theclinesthes serpentata", + "1927895": "Theclinesthes sulpitius", + "1927897": "Theclinesthes miskini", + "1927900": "Theclinesthes onycha", + "1927901": "Sandia", + "1927903": "Nomiades", + "1927909": "Nomiades acis", + "1927916": "Aloeides", + "1927943": "Aloeides pierus", + "1927955": "Aloeides damarensis", + "1927979": "Aloeides aranda", + "1927984": "Hemiargus", + "1927988": "Hemiargus ceraunus", + "1927992": "Hemiargus ramon", + "1927996": "Hemiargus hanno", + "1928008": "Rekoa", + "1928009": "Rekoa meton", + "1928015": "Paralucia", + "1928018": "Paralucia pyrodiscus", + "1928054": "Zeritis", + "1928070": "Zeritis chrysaor", + "1928073": "Argiolaus", + "1928076": "Argiolaus silarus", + "1928213": "Ministrymon", + "1928214": "Ministrymon leda", + "1928215": "Ministrymon clytie", + "1928217": "Scolitantides", + "1928248": "Scolitantides orion", + "1928254": "Freyeria", + "1928328": "Sinthusa", + "1928349": "Sinthusa nasaka", + "1928361": "Sinthusa chandrana", + "1928373": "Petrelaea", + "1928376": "Petrelaea dana", + "1928382": "Petrelaea tombugensis", + "1928385": "Lachnocnema", + "1928389": "Lachnocnema bibulus", + "1928404": "Pratapa", + "1928419": "Pratapa deva", + "1928447": "Cyaniris", + "1928581": "Michaelus", + "1928584": "Michaelus ira", + "1928589": "Michaelus jebus", + "1928626": "Zesius", + "1928628": "Zesius chrysomallus", + "1928632": "Myrina", + "1928733": "Stugeta", + "1928746": "Stugeta bowkeri", + "1928753": "Sarthusia", + "1928754": "Sarthusia ophion", + "1928780": "Jamides", + "1928829": "Jamides phaseli", + "1928849": "Jamides alecto", + "1928908": "Jamides bochus", + "1928915": "Jamides celeno", + "1928917": "Pseudalmenus", + "1928923": "Pseudalmenus chlorinda", + "1928931": "Palaeochrysophanus", + "1928945": "Palaeochrysophanus hippothoe", + "1928960": "Palaeochrysophanus candens", + "1929039": "Panthiades", + "1929046": "Panthiades bitias", + "1929049": "Panthiades hebraeus", + "1929057": "Cupidopsis", + "1929059": "Cupidopsis jobates", + "1929128": "Callicista", + "1929129": "Callicista istapa", + "1929153": "Lycaena", + "1929270": "Lycaena dispar", + "1929402": "Lycaena thetis", + "1929659": "Lycaena virgaureae", + "1929697": "Lycaena phlaeas", + "1929768": "Thecla", + "1929772": "Thecla sylvinus", + "1929962": "Thecla melinus", + "1929966": "Thecla stagira", + "1930079": "Thecla herodotus", + "1930110": "Thecla betulae", + "1930146": "Thecla ziba", + "1930167": "Thecla cestri", + "1930178": "Thecla yojoa", + "1930179": "Thecla polybe", + "1930181": "Thecla demonassa", + "1930183": "Thecla sheridanii", + "1930263": "Thecla angelia", + "1930270": "Thecla celmus", + "1930288": "Thecla bebrycia", + "1930289": "Thecla thales", + "1930331": "Thecla tetra", + "1930361": "Thecla bathildis", + "1930391": "Thecla martialis", + "1930410": "Thecla cydrara", + "1930422": "Thecla marius", + "1930451": "Thecla ambrax", + "1930466": "Thecla badaca", + "1930481": "Thecla johnsoni", + "1930539": "Thecla cruenta", + "1930563": "Thecla azia", + "1930581": "Thecla maesites", + "1930621": "Thecla aetolus", + "1930653": "Thecla rufofusca", + "1930654": "Thecla lydus", + "1930660": "Thecla irus", + "1930678": "Thecla augustinus", + "1930728": "Thecla syllis", + "1930772": "Thecla una", + "1930779": "Thecla ecbatana", + "1930830": "Thecla strophius", + "1930832": "Thecla formosanum", + "1930893": "Tarucus", + "1930904": "Tarucus theophrastus", + "1930916": "Tarucus rosacea", + "1930923": "Tarucus thespis", + "1930931": "Tarucus sybaris", + "1930935": "Tarucus nara", + "1930950": "Chliaria", + "1930954": "Chliaria othona", + "1930968": "Chliaria kina", + "1931032": "Alaena", + "1931046": "Alaena amazoula", + "1931092": "Cheritra", + "1931109": "Cheritra freja", + "1931110": "Parrhasius", + "1931116": "Parrhasius m-album", + "1931119": "Parrhasius polibetes", + "1931122": "Parrhasius orgia", + "1931125": "Xamia", + "1931126": "Xamia xami", + "1931131": "Ginzia", + "1931132": "Ginzia ferrea", + "1931144": "Mahathala", + "1931148": "Mahathala ameria", + "1931173": "Tuttiola", + "1931179": "Tuttiola spini", + "1931187": "Philiris", + "1931189": "Philiris innotatus", + "1931306": "Evenus", + "1931309": "Oenomaus", + "1931310": "Oenomaus ortygnus", + "1931390": "Pentila", + "1931403": "Pentila pauli", + "1931437": "Pentila tropicalis", + "1931495": "Thestor", + "1931509": "Thestor callimachus", + "1931542": "Epidemia", + "1931553": "Epidemia dorcas", + "1931560": "Tongeia", + "1931561": "Tongeia fischeri", + "1931647": "Curetis", + "1931655": "Curetis saronis", + "1931656": "Curetis thetis", + "1931706": "Curetis acuta", + "1931729": "Curetis santana", + "1931735": "Curetis bulis", + "1931775": "Fixsenia", + "1931779": "Fixsenia pruni", + "1931784": "Fixsenia favonius", + "1931787": "Fixsenia favonius", + "1931788": "Fixsenia esculi", + "1931802": "Eumaeus", + "1931823": "Lucia", + "1931848": "Nacaduba", + "1931889": "Nacaduba biocellata", + "1931906": "Nacaduba sanaya", + "1931908": "Nacaduba pavana", + "1931943": "Nacaduba hermus", + "1931956": "Nacaduba kurava", + "1931958": "Nacaduba berenice", + "1931979": "Nacaduba calauria", + "1931997": "Nacaduba pactolus", + "1932020": "Nacaduba beroe", + "1932039": "Artipe", + "1932043": "Artipe eryx", + "1932052": "Icaricia", + "1932056": "Icaricia icarioides", + "1932134": "Catochrysops", + "1932159": "Catochrysops panormus", + "1932166": "Catochrysops strabo", + "1932169": "Brephidium", + "1932172": "Brephidium exilis", + "1932175": "Brephidium pseudofea", + "1932177": "Brephidium metophis", + "1932182": "Jacoona", + "1932189": "Jacoona anasuja", + "1932194": "Hypolycaena", + "1932206": "Hypolycaena sipylus", + "1932246": "Hypolycaena phorbas", + "1932273": "Hypolycaena erylus", + "1932287": "Hypolycaena thecloides", + "1932302": "Hypolycaena philippus", + "1932323": "Euchrysops", + "1932332": "Euchrysops malathana", + "1932354": "Euchrysops barkeri", + "1932378": "Callophrys", + "1932386": "Callophrys dumetorum", + "1932393": "Callophrys avis", + "1932406": "Callophrys fotis", + "1932409": "Callophrys affinis", + "1932411": "Callophrys rubi", + "1932414": "Callophrys viridis", + "1932417": "Callophrys polios", + "1932428": "Callophrys affinis", + "1932450": "Plebicula", + "1932473": "Plebicula dorylas", + "1932517": "Plebicula golgus", + "1932551": "Plebicula escheri", + "1932562": "Zizina", + "1932563": "Zizina otis", + "1932574": "Ocaria", + "1932576": "Ocaria ocrisia", + "1932578": "Castalius", + "1932580": "Castalius calice", + "1932607": "Castalius rosimon", + "1932629": "Castalius melaena", + "1932636": "Spindasis", + "1932749": "Cacyreus", + "1932751": "Cacyreus lingeus", + "1932752": "Cacyreus marshalli", + "1932753": "Cacyreus fracta", + "1932810": "Iraota", + "1932812": "Iraota rochana", + "1932814": "Iraota timoleon", + "1932850": "Flos", + "1932863": "Flos apidanus", + "1932878": "Dolymorpha", + "1932879": "Dolymorpha jada", + "1932880": "Uranothauma", + "1932882": "Uranothauma falkensteini", + "1932904": "Candalides", + "1932908": "Candalides xanthospilos", + "1932941": "Albulina", + "1932960": "Albulina orbitulus", + "1932963": "Leptotes", + "1932976": "Leptotes pirithous", + "1933012": "Horaga", + "1933028": "Horaga albimacula", + "1933044": "Horaga onyx", + "1933083": "Rathinda", + "1933084": "Rathinda amor", + "1933089": "Turanana", + "1933095": "Aricia agestis", + "1933126": "Aricia montensis", + "1933138": "Aricia artaxerxes", + "1933163": "Aricia morronensis", + "1933204": "Aricia cramera", + "1933256": "Chalybs", + "1933260": "Chalybs hassan", + "1933268": "Polyommatus", + "1933579": "Charana", + "1933583": "Charana dea", + "1933641": "Zizeeria", + "1933647": "Zizeeria karsandra", + "1933649": "Zizeeria knysna", + "1933677": "Talicada", + "1933679": "Talicada nyseus", + "1933756": "Eumedonia", + "1933793": "Eumedonia eumedon", + "1933795": "Amblypodia", + "1933844": "Amblypodia bazalus", + "1933845": "Amblypodia anita", + "1933942": "Drupadia", + "1933996": "Hypaurotis", + "1933998": "Hypaurotis crysalus", + "1933999": "Riodinidae", + "1934046": "Helicopis", + "1934172": "Necyria bellona", + "1934186": "Dodona", + "1934187": "Dodona adonira", + "1934188": "Dodona dipoea", + "1934192": "Dodona durga", + "1934211": "Dodona egeon", + "1934213": "Dodona deodata", + "1934221": "Dodona formosana", + "1934326": "Nelone", + "1934331": "Nelone cadmeis", + "1934442": "Cartea", + "1934447": "Cartea ucayala", + "1934515": "Nymula", + "1934570": "Nymula calyce", + "1934690": "Hamearis", + "1934693": "Hamearis lucina", + "1934713": "Parcella", + "1934715": "Parcella amarynthina", + "1934983": "Notheme", + "1934991": "Notheme erota", + "1935072": "Amarynthis", + "1935078": "Amarynthis meneria", + "1935294": "Juditha", + "1935295": "Juditha molpe", + "1935301": "Juditha caucana", + "1935340": "Riodina", + "1935343": "Riodina lysippus", + "1935346": "Riodina lysippoides", + "1935350": "Riodina lycisca", + "1935356": "Abisara", + "1935363": "Abisara savitri", + "1935372": "Abisara geza", + "1935377": "Abisara neophron", + "1935405": "Abisara bifasciata", + "1935408": "Abisara saturata", + "1935410": "Abisara echerius", + "1935454": "Abisara fylla", + "1935459": "Abisara burnii", + "1935498": "Melanis agyrtus", + "1935610": "Laxita", + "1935614": "Laxita thuisto", + "1935826": "Zemeros", + "1935838": "Zemeros emesoides", + "1935849": "Zemeros flegyas", + "1935852": "Emesis", + "1935853": "Emesis vulpina", + "1935869": "Emesis russula", + "1935872": "Emesis aurimna", + "1935878": "Emesis poeas", + "1935884": "Emesis rawsoni", + "1935888": "Emesis mandana", + "1935899": "Emesis muticum", + "1935901": "Emesis ocypore", + "1935904": "Emesis zela", + "1935912": "Emesis fastidiosa", + "1935916": "Emesis fatimella", + "1935925": "Emesis cypria", + "1935931": "Emesis wrighti", + "1935935": "Emesis tenedia", + "1935968": "Thisbe", + "1936026": "Mesene phareus", + "1936158": "Perophthalma", + "1936161": "Perophthalma tullius", + "1936231": "Zabuella", + "1936233": "Zabuella tenellus", + "1936309": "Crocozona", + "1936312": "Crocozona coecias", + "1936370": "Rhetus", + "1936378": "Rhetus periander", + "1936388": "Rhetus arcius", + "1936391": "Rhetus dysonii", + "1936473": "Aricoris", + "1936531": "Polystichtis", + "1936565": "Polystichtis emylius", + "1936566": "Polystichtis lucianus", + "1936609": "Hades", + "1936648": "Calociasma", + "1936649": "Calociasma lilina", + "1936810": "Euselasia eucerus", + "1936859": "Euselasia thucydides", + "1936964": "Heraclides", + "1936968": "Archon", + "1936969": "Archon apollinus", + "1936987": "Troides", + "1936988": "Troides aeacus", + "1936993": "Troides helena", + "1937011": "Troides amphrysus", + "1937037": "Troides rhadamantus", + "1937055": "Troides minos", + "1937063": "Parides", + "1937064": "Parides neophilus", + "1937090": "Parides anchises", + "1937109": "Parides childrenae", + "1937110": "Parides sesostris", + "1937124": "Parides montezuma", + "1937129": "Parides bunichus", + "1937136": "Parides eurimedes", + "1937144": "Parides iphidamas", + "1937155": "Parides agavus", + "1937162": "Parides photinus", + "1937165": "Parides proneus", + "1937167": "Parides erithalion", + "1937188": "Graphium", + "1937440": "Ornithoptera", + "1937444": "Ornithoptera priamus", + "1937474": "Ornithoptera richmondia", + "1937489": "Sericinus", + "1937490": "Sericinus montela", + "1937511": "Trogonoptera", + "1937514": "Trogonoptera brookiana", + "1937519": "Mimoides", + "1937527": "Mimoides thymbraeus", + "1937530": "Mimoides arianus", + "1937540": "Mimoides lysithous", + "1937555": "Byasa", + "1937556": "Byasa alcinous", + "1937566": "Byasa impediens", + "1937570": "Byasa polyeuctes", + "1937580": "Byasa dasarada", + "1937582": "Byasa mencius", + "1937592": "Atrophaneura", + "1937594": "Atrophaneura horishanus", + "1937613": "Atrophaneura chara", + "1937617": "Cressida", + "1937618": "Cressida cressida", + "1937642": "Papilio eurymedon", + "1937643": "Papilio echerioides", + "1937655": "Papilio anchisiades", + "1937665": "Papilio deiphobus", + "1937667": "Papilio dardanus", + "1937688": "Papilio ornythion", + "1937691": "Papilio rutulus", + "1937698": "Papilio anactus", + "1937699": "Papilio gigon", + "1937702": "Papilio nireus", + "1937707": "Papilio castor", + "1937711": "Papilio constantinus", + "1937712": "Papilio aegeus", + "1937722": "Papilio pilumnus", + "1937723": "Papilio bianor", + "1937739": "Papilio canadensis", + "1937745": "Papilio canopus", + "1937751": "Papilio zelicaon", + "1937754": "Papilio thaiwanus", + "1937758": "Papilio palamedes", + "1937769": "Papilio fuscus", + "1937792": "Papilio buddha", + "1937793": "Papilio torquatus", + "1937803": "Papilio multicaudata", + "1937816": "Papilio polyxenes", + "1937819": "Papilio xuthus", + "1937826": "Papilio nephelus", + "1937846": "Papilio cresphontes", + "1937847": "Papilio iswara", + "1937849": "Papilio phorcas", + "1937856": "Papilio euchenor", + "1937885": "Papilio thoas", + "1937892": "Papilio agenor", + "1937911": "Papilio paris", + "1937931": "Papilio crino", + "1937937": "Papilio ascalaphus", + "1937959": "Papilio ophidicephalus", + "1937966": "Papilio palinurus", + "1937974": "Papilio indra", + "1937975": "Papilio peranthus", + "1937988": "Papilio ulysses", + "1938007": "Papilio dialis", + "1938016": "Papilio glaucus", + "1938022": "Papilio astyalus", + "1938029": "Papilio dravidarum", + "1938050": "Papilio hospiton", + "1938052": "Papilio protenor", + "1938058": "Papilio macilentus", + "1938059": "Papilio garamas", + "1938069": "Papilio demoleus", + "1938074": "Papilio ambrax", + "1938081": "Papilio brevicauda", + "1938088": "Papilio polytes", + "1938104": "Papilio troilus", + "1938112": "Papilio androgeus", + "1938114": "Papilio helenus", + "1938122": "Papilio demolion", + "1938125": "Papilio demodocus", + "1938129": "Papilio alphenor", + "1938131": "Papilio alexanor", + "1938147": "Papilio polymnestor", + "1938148": "Papilio scamander", + "1938156": "Papilio liomedon", + "1938159": "Papilio andraemon", + "1938162": "Papilio demetrius", + "1938166": "Papilio delalandei", + "1938168": "Papilio maackii", + "1938174": "Papilio alcmenor", + "1938213": "Iphiclides", + "1938214": "Iphiclides podalirius", + "1938225": "Luehdorfia", + "1938226": "Luehdorfia chinensis", + "1938230": "Luehdorfia japonica", + "1938233": "Luehdorfia puziloi", + "1938238": "Parnassius", + "1938300": "Parnassius nomion", + "1938446": "Parnassius clodius", + "1938520": "Parnassius mnemosyne", + "1938612": "Parnassius stubbendorfii", + "1938796": "Parnassius glacialis", + "1938810": "Parnassius apollo", + "1938955": "Parnassius phoebus", + "1938975": "Parnassius smintheus", + "1939056": "Parnassius eversmanni", + "1939085": "Chilasa", + "1939086": "Chilasa clytia", + "1939129": "Protographium", + "1939130": "Protographium epidaus", + "1939131": "Protographium leosthenes", + "1939134": "Protographium marcellus", + "1939136": "Protographium philolaus", + "1939143": "Protographium asius", + "1939152": "Pachliopta", + "1939156": "Pachliopta polydorus", + "1939168": "Pachliopta aristolochiae", + "1939180": "Pachliopta pandiyana", + "1939215": "Pachliopta hector", + "1939221": "Losaria", + "1939225": "Losaria neptunus", + "1939297": "Battus", + "1939301": "Lamproptera", + "1939314": "Pharmacophagus antenor", + "1939330": "Eurytides", + "1939336": "Eurytides dolicaon", + "1939342": "Pterourus", + "1939401": "Tischeria", + "1939432": "Tischeria ekebladella", + "1939460": "Tischeria quercitella", + "1939497": "Petavia", + "1939510": "Petavia attenuata", + "1939519": "Pterodecta", + "1939520": "Pterodecta felderi", + "1939594": "Neopseustis", + "1939597": "Neopseustis meyricki", + "1939616": "Micropterix", + "1939647": "Micropterix ibericella", + "1939658": "Micropterix tunbergella", + "1939677": "Micropterix calthella", + "1939680": "Micropterix mansuetella", + "1939688": "Micropterix aureatella", + "1939717": "Micropterix schaefferi", + "1939833": "Paranthrene simulans", + "1939879": "Paranthrene tabaniformis", + "1939952": "Albuna", + "1939962": "Albuna fraxini", + "1939964": "Albuna pyramidalis", + "1940108": "Alcathoe", + "1940110": "Alcathoe caudata", + "1940133": "Pyropteron", + "1940158": "Pyropteron chrysidiformis", + "1940447": "Sesia", + "1940500": "Synanthedon", + "1940504": "Synanthedon conopiformis", + "1940510": "Synanthedon formicaeformis", + "1940517": "Synanthedon polygoni", + "1940546": "Synanthedon rileyana", + "1940575": "Synanthedon tipuliformis", + "1940580": "Synanthedon decipiens", + "1940601": "Synanthedon resplendens", + "1940604": "Synanthedon pictipes", + "1940609": "Synanthedon arkansasensis", + "1940612": "Synanthedon kathyae", + "1940639": "Synanthedon scoliaeformis", + "1940644": "Synanthedon vespiformis", + "1940694": "Synanthedon sapygaeformis", + "1940717": "Synanthedon andrenaeformis", + "1940744": "Synanthedon culiciformis", + "1940757": "Synanthedon bibionipennis", + "1940768": "Synanthedon spheciformis", + "1940797": "Pennisetia", + "1940807": "Pennisetia hylaeiformis", + "1940810": "Bembecia", + "1940838": "Bembecia ichneumoniformis", + "1941266": "Carmenta pyralidiformis", + "1941294": "Carmenta ithacae", + "1941299": "Carmenta bassiformis", + "1941309": "Podosesia", + "1941310": "Podosesia syringae", + "1941316": "Chamaesphecia", + "1941330": "Chamaesphecia aerifrons", + "1941348": "Chamaesphecia bibioniformis", + "1941377": "Chamaesphecia tenthrediniformis", + "1941437": "Chamaesphecia empiformis", + "1941561": "Castnia", + "1941570": "Castnia licus", + "1941674": "Synemon", + "1941683": "Synemon parthenoides", + "1941702": "Synemon theresa", + "1941713": "Synemon plana", + "1941716": "Castniomera", + "1941717": "Castniomera atymnius", + "1941719": "Castniomera atymnius", + "1941863": "Paysandisia", + "1941864": "Paysandisia archon", + "1941927": "Phycodes", + "1942052": "Arrhenes", + "1942060": "Arrhenes dschilus", + "1942067": "Arrhenes marnas", + "1942086": "Hyalothyrus", + "1942098": "Hyalothyrus neleus", + "1942128": "Staphylus", + "1942141": "Staphylus hayhurstii", + "1942170": "Staphylus vulgata", + "1942171": "Staphylus ceos", + "1942206": "Staphylus musculus", + "1942234": "Arnetta", + "1942244": "Arnetta vindhiana", + "1942250": "Tapena", + "1942251": "Tapena thwaitesi", + "1942255": "Odina", + "1942264": "Anastrus", + "1942324": "Milanion", + "1942327": "Milanion leucaspis", + "1942339": "Dardarina", + "1942341": "Dardarina dardaris", + "1942369": "Theagenes", + "1942370": "Theagenes dichrous", + "1942372": "Theagenes albiplaga", + "1942373": "Ampittia", + "1942378": "Ampittia dioscorides", + "1942383": "Ampittia virgata", + "1942404": "Mellana", + "1942416": "Mellana eulogius", + "1942442": "Niconiades", + "1942455": "Niconiades nikko", + "1942503": "Proteides", + "1942509": "Proteides mercurius", + "1942522": "Psolos fuligo", + "1942523": "Copaeodes", + "1942552": "Paches", + "1942558": "Paches loxus", + "1942608": "Ocybadistes", + "1942618": "Ocybadistes walkeri", + "1942621": "Ocybadistes ardea", + "1942623": "Ocybadistes flavovittata", + "1942628": "Suniana", + "1942636": "Suniana sunias", + "1942641": "Suniana lascivia", + "1942655": "Euschemon", + "1942669": "Stinga", + "1942670": "Stinga morrisoni", + "1942671": "Dispar", + "1942674": "Dispar compacta", + "1942686": "Xenophanes", + "1942692": "Thoressa", + "1942697": "Thoressa varia", + "1942715": "Thoressa masoni", + "1942755": "Sarangesa", + "1942762": "Sarangesa seineri", + "1942769": "Sarangesa purendra", + "1942790": "Sarangesa phidyle", + "1942793": "Sarangesa motozi", + "1942808": "Sarangesa dasahara", + "1942827": "Suastus", + "1942836": "Suastus everyx", + "1942846": "Xeniades", + "1942854": "Xeniades orchamus", + "1942857": "Heteropterus", + "1942876": "Pirdana", + "1942878": "Pirdana hyela", + "1942944": "Euphyes", + "1942945": "Euphyes conspicua", + "1942947": "Euphyes vestris", + "1942964": "Euphyes bimacula", + "1942967": "Euphyes dukesi", + "1942971": "Euphyes berryi", + "1942980": "Euphyes arpa", + "1942982": "Euphyes pilatka", + "1942994": "Euphyes dion", + "1942996": "Hesperopsis", + "1943046": "Piruna", + "1943054": "Piruna aea", + "1943066": "Piruna pirus", + "1943068": "Hesperilla", + "1943089": "Hesperilla ornata", + "1943090": "Hesperilla donnysa", + "1943096": "Hesperilla idothea", + "1943101": "Hesperilla picta", + "1943127": "Cogia", + "1943165": "Polythrix", + "1943205": "Pasma", + "1943211": "Parnara", + "1943212": "Parnara guttatus", + "1943223": "Parnara ganga", + "1943236": "Parnara bada", + "1943250": "Parnara amalia", + "1943307": "Pyroneura", + "1943308": "Pyroneura latoia", + "1943357": "Carcharodus", + "1943397": "Carcharodus floccifera", + "1943433": "Mooreana", + "1943469": "Trina", + "1943475": "Trina geometrina", + "1943497": "Caprona", + "1943505": "Caprona alida", + "1943519": "Caprona ransonnettii", + "1943555": "Panoquina", + "1943563": "Panoquina evansi", + "1943571": "Panoquina ocola", + "1943573": "Panoquina panoquin", + "1943588": "Panoquina panoquinoides", + "1943613": "Odontoptilum", + "1943619": "Odontoptilum angulata", + "1943625": "Odontoptilum pygela", + "1943627": "Yvretta", + "1943631": "Yvretta carus", + "1943654": "Megathymus", + "1943655": "Megathymus yuccae", + "1943673": "Megathymus streckeri", + "1943753": "Plastingia", + "1943757": "Plastingia naga", + "1943820": "Astraptes", + "1943823": "Astraptes fulgerator", + "1943824": "Astraptes alardus", + "1943830": "Astraptes alector", + "1943832": "Astraptes talus", + "1943901": "Astraptes anausis", + "1943934": "Zenis", + "1943936": "Zenis jebus", + "1943941": "Polites", + "1943942": "Polites baracoa", + "1943953": "Polites peckius", + "1943954": "Polites sabuleti", + "1943960": "Polites themistocles", + "1943962": "Polites vibex", + "1943964": "Polites mystic", + "1943990": "Polites origenes", + "1944003": "Spathilepia", + "1944004": "Spathilepia clonius", + "1944007": "Thymelicus", + "1944103": "Toxidia", + "1944106": "Toxidia doubledayi", + "1944113": "Toxidia parvulus", + "1944230": "Acada", + "1944234": "Acada biseriatus", + "1944270": "Urbanus", + "1944273": "Urbanus esmeraldus", + "1944275": "Urbanus viterboana", + "1944283": "Urbanus procne", + "1944286": "Urbanus dorantes", + "1944314": "Urbanus proteus", + "1944324": "Urbanus teleus", + "1944329": "Urbanus doryssus", + "1944335": "Urbanus tanna", + "1944343": "Urbanus simplicius", + "1944355": "Vehilius", + "1944361": "Vehilius stictomenes", + "1944374": "Vehilius clavicula", + "1944409": "Pyrrhopygopsis", + "1944421": "Pyrrhopygopsis socrates", + "1944441": "Sabera", + "1944456": "Sabera dobboe", + "1944462": "Sabera caesina", + "1944474": "Taractrocera", + "1944483": "Taractrocera ardonia", + "1944503": "Taractrocera ceramas", + "1944504": "Taractrocera maevius", + "1944520": "Taractrocera ina", + "1944521": "Taractrocera archias", + "1944523": "Taractrocera papyria", + "1944558": "Aguna", + "1944574": "Aguna asander", + "1944580": "Aguna megaeles", + "1944586": "Abraximorpha", + "1944591": "Abraximorpha davidii", + "1944617": "Trapezites", + "1944618": "Trapezites maheta", + "1944619": "Trapezites petalia", + "1944627": "Trapezites phigalia", + "1944629": "Trapezites phigalioides", + "1944631": "Trapezites symmomus", + "1944635": "Trapezites praxedes", + "1944638": "Trapezites eliena", + "1944742": "Lento", + "1944744": "Lento krexoides", + "1944767": "Timochares", + "1944769": "Timochares trifasciata", + "1944774": "Zographetus", + "1944778": "Zographetus satwa", + "1944792": "Synapte", + "1944798": "Synapte syraces", + "1944815": "Synapte malitiosa", + "1944831": "Atarnes", + "1944832": "Atarnes sallei", + "1944895": "Eagris", + "1944910": "Eagris nottoana", + "1944946": "Quadrus", + "1944973": "Viola", + "1944977": "Viola minor", + "1944985": "Choaspes", + "1945035": "Daimio", + "1945066": "Daimio tethys", + "1945078": "Zestusa", + "1945081": "Zestusa dorus", + "1945083": "Rachana", + "1945088": "Rachana jalindra", + "1945113": "Hasora", + "1945122": "Hasora khoda", + "1945137": "Hasora vitta", + "1945143": "Hasora schoenherr", + "1945173": "Hasora taminatus", + "1945225": "Hasora chromus", + "1945227": "Hasora badra", + "1945266": "Oriens", + "1945270": "Oriens paragola", + "1945274": "Oriens gola", + "1945286": "Oriens goloides", + "1945298": "Turesis", + "1945302": "Turesis lucas", + "1945307": "Sophista", + "1945312": "Sophista bifasciata", + "1945374": "Caicella calchas", + "1945378": "Caicella caicus", + "1945390": "Mimoniades", + "1945396": "Mimoniades versicolor", + "1945451": "Achlyodes", + "1945462": "Achlyodes busirus", + "1945476": "Achlyodes pallida", + "1945477": "Achlyodes tamenund", + "1945528": "Spialia", + "1945535": "Spialia mafa", + "1945569": "Spialia sertorius", + "1945571": "Spialia spio", + "1945587": "Spialia ferax", + "1945589": "Spialia phlomidis", + "1945605": "Spialia galba", + "1945660": "Tagiades", + "1945694": "Tagiades trebellius", + "1945710": "Tagiades cohaerens", + "1945715": "Tagiades japetus", + "1945738": "Tagiades litigiosa", + "1945742": "Tagiades gana", + "1945748": "Tagiades menaka", + "1945786": "Tagiades flesus", + "1945809": "Aeromachus", + "1945814": "Aeromachus pygmaeus", + "1945837": "Aeromachus jhora", + "1945854": "Pelopidas", + "1945856": "Pelopidas assamensis", + "1945863": "Pelopidas agna", + "1945874": "Pelopidas conjuncta", + "1945877": "Pelopidas thrax", + "1945878": "Pelopidas mathias", + "1945893": "Pelopidas lyelli", + "1945902": "Grais", + "1945949": "Baracus", + "1945956": "Celotes", + "1945957": "Celotes nessus", + "1945979": "Teniorhinus", + "1945980": "Teniorhinus harona", + "1946009": "Quedara", + "1946019": "Quedara monteithi", + "1946033": "Baoris", + "1946037": "Baoris fatuellus", + "1946051": "Baoris farri", + "1946052": "Gangara", + "1946058": "Gangara thyrsis", + "1946065": "Iton", + "1946067": "Iton semamora", + "1946071": "Calpodes", + "1946074": "Calpodes ethlius", + "1946077": "Systasea", + "1946078": "Systasea zampa", + "1946079": "Systasea pulverulenta", + "1946084": "Cobalus", + "1946097": "Cobalus virbius", + "1946099": "Choranthus", + "1946141": "Eetion", + "1946145": "Eetion elia", + "1946158": "Callimormus", + "1946163": "Callimormus radiola", + "1946167": "Callimormus corades", + "1946174": "Callimormus interpunctata", + "1946177": "Callimormus saturnus", + "1946263": "Atrytone", + "1946282": "Thespieus", + "1946290": "Thespieus aspernatus", + "1946310": "Thespieus dalman", + "1946327": "Thespieus macareus", + "1946331": "Perichares", + "1946333": "Perichares adela", + "1946375": "Badamia", + "1946413": "Astictopterus", + "1946432": "Astictopterus jama", + "1946463": "Nyctelius", + "1946469": "Nyctelius nyctelius", + "1946473": "Lotongus", + "1946486": "Lotongus calathus", + "1946490": "Thorybes", + "1946495": "Thorybes bathyllus", + "1946500": "Thorybes pylades", + "1946509": "Thorybes drusius", + "1946517": "Naevolus", + "1946520": "Naevolus orius", + "1946541": "Gorgythion", + "1946544": "Gorgythion vox", + "1946550": "Gorgythion begga", + "1946554": "Pellicia", + "1946577": "Pellicia arina", + "1946582": "Pellicia dimidiata", + "1946599": "Poanes", + "1946610": "Poanes viator", + "1946612": "Poanes yehl", + "1946618": "Poanes aaroni", + "1946628": "Poanes massasoit", + "1946630": "Lobocla", + "1946647": "Borbo", + "1946660": "Borbo lugens", + "1946661": "Borbo borbonica", + "1946695": "Borbo cinnara", + "1946718": "Oreisplanus", + "1946720": "Oreisplanus munionga", + "1946721": "Erionota", + "1946731": "Erionota acroleucus", + "1946737": "Erionota thrax", + "1946738": "Erionota torus", + "1946753": "Metardaris", + "1946756": "Metardaris cosinga", + "1946762": "Mesodina", + "1946763": "Mesodina halyzia", + "1946766": "Myscelus", + "1946802": "Ochlodes", + "1946810": "Ochlodes snowi", + "1946853": "Ochlodes agricola", + "1946865": "Ochlodes sylvanoides", + "1946900": "Arteurotia", + "1946901": "Arteurotia tractipennis", + "1946907": "Iambrix", + "1946916": "Iambrix stellifer", + "1946917": "Iambrix salsala", + "1946979": "Atrytonopsis", + "1946980": "Atrytonopsis loammi", + "1946981": "Atrytonopsis edwardsi", + "1946983": "Atrytonopsis pittacus", + "1946989": "Atrytonopsis cestus", + "1946991": "Atrytonopsis vierecki", + "1946992": "Atrytonopsis deva", + "1946995": "Atrytonopsis lunus", + "1946999": "Atrytonopsis hianna", + "1947018": "Onophas", + "1947021": "Onophas columbaria", + "1947024": "Cymaenes", + "1947037": "Cymaenes tripunctus", + "1947048": "Cymaenes alumna", + "1947049": "Cymaenes gisca", + "1947055": "Cymaenes trebius", + "1947108": "Coeliades", + "1947112": "Coeliades pisistratus", + "1947113": "Coeliades forestan", + "1947117": "Coeliades anchises", + "1947144": "Elbella", + "1947147": "Elbella scylla", + "1947191": "Metisella", + "1947272": "Carterocephalus", + "1947282": "Carterocephalus skada", + "1947306": "Carterocephalus silvicola", + "1947333": "Carterocephalus mandan", + "1947335": "Carterocephalus palaemon", + "1947353": "Mysoria", + "1947384": "Hyarotis", + "1947385": "Hyarotis adrastus", + "1947400": "Orses", + "1947402": "Orses cynisca", + "1947405": "Telicota", + "1947409": "Telicota bambusae", + "1947446": "Telicota ancilla", + "1947449": "Telicota ohara", + "1947456": "Telicota besta", + "1947459": "Telicota paceka", + "1947491": "Telicota augias", + "1947492": "Telicota colon", + "1947493": "Suada", + "1947496": "Suada swerga", + "1947504": "Codatractus", + "1947506": "Codatractus aminias", + "1947507": "Codatractus arizonensis", + "1947532": "Phocides", + "1947568": "Phocides lilea", + "1947577": "Phocides batabano", + "1947587": "Phocides pigmalion", + "1947588": "Phocides urania", + "1947597": "Phocides polybius", + "1947624": "Isoteinon", + "1947626": "Isoteinon lamprospilus", + "1947649": "Koruthaialos", + "1947661": "Koruthaialos sindu", + "1947673": "Koruthaialos rubecula", + "1947701": "Potanthus", + "1947703": "Potanthus trachala", + "1947727": "Potanthus pseudomaesa", + "1947740": "Potanthus flava", + "1947745": "Potanthus omaha", + "1947753": "Potanthus pava", + "1947765": "Potanthus confucius", + "1947775": "Potanthus serina", + "1947798": "Scobura", + "1947805": "Scobura isota", + "1947815": "Decinea", + "1947842": "Decinea percosius", + "1947844": "Cupitha", + "1947846": "Cupitha purreea", + "1947872": "Epargyreus", + "1947890": "Epargyreus tmolis", + "1947894": "Epargyreus cruza", + "1947915": "Epargyreus clarus", + "1947971": "Autochton", + "1947973": "Autochton zarex", + "1947976": "Autochton cincta", + "1947979": "Autochton longipennis", + "1947980": "Autochton neis", + "1948041": "Polyctor", + "1948042": "Polyctor cleta", + "1948046": "Polyctor polyctor", + "1948052": "Oligoria", + "1948054": "Oligoria maculata", + "1948058": "Caltoris", + "1948061": "Caltoris cormasa", + "1948062": "Caltoris cahira", + "1948073": "Caltoris ranrunna", + "1948088": "Caltoris kumara", + "1948143": "Chiomara", + "1948158": "Chiomara georgina", + "1948367": "Acleros", + "1948371": "Acleros mackenii", + "1948418": "Unkana", + "1948434": "Chioides", + "1948439": "Chioides zilpa", + "1948446": "Chioides albofasciatus", + "1948459": "Matapa", + "1948464": "Matapa sasivarna", + "1948465": "Matapa aria", + "1948519": "Cycloglypha", + "1948521": "Cycloglypha thrasibulus", + "1948624": "Ephyriades", + "1948630": "Ephyriades arcas", + "1948771": "Mastor tolteca", + "1948774": "Mastor vialis", + "1948779": "Mastor cassus", + "1948789": "Mastor fimbriata", + "1948799": "Mastor eos", + "1948800": "Mastor nysa", + "1948802": "Mastor aenus", + "1948803": "Mastor exoteria", + "1948804": "Mastor aesculapius", + "1948808": "Mastor reversa", + "1948809": "Mastor hegon", + "1948810": "Mastor celia", + "1948816": "Atalopedes", + "1948823": "Atalopedes mesogramma", + "1948826": "Atalopedes campestris", + "1948855": "Zopyrion", + "1948858": "Zopyrion satyrina", + "1948861": "Zopyrion evenor", + "1948865": "Zopyrion sandace", + "1948868": "Pythonides", + "1948883": "Pythonides lancea", + "1948890": "Pythonides jovianus", + "1948909": "Lychnuchoides", + "1948916": "Zophopetes dysmephila", + "1948936": "Pseudoborbo", + "1948941": "Pseudoborbo bevani", + "1948942": "Nascus", + "1948947": "Nascus phocus", + "1948964": "Platylesches", + "1948994": "Platylesches moritili", + "1949003": "Polytremis", + "1949008": "Polytremis lubricans", + "1949015": "Polytremis eltola", + "1949041": "Gesta", + "1949049": "Gesta invisus", + "1949053": "Psoralis", + "1949068": "Psoralis stacara", + "1949089": "Vettius", + "1949105": "Vettius phyllus", + "1949143": "Pyrrhopyge", + "1949219": "Pyrrhopyge charybdis", + "1949285": "Pyrrhopyge araxes", + "1949308": "Aides", + "1949322": "Aides dysoni", + "1949330": "Asbolis", + "1949331": "Asbolis capucinus", + "1949334": "Udaspes", + "1949336": "Udaspes folus", + "1949354": "Bibasis", + "1949366": "Bibasis gomata", + "1949404": "Bibasis sena", + "1949419": "Bibasis etelka", + "1949424": "Gegenes", + "1949446": "Lerodea", + "1949449": "Lerodea dysaules", + "1949451": "Lerodea eufala", + "1949466": "Lerodea arabus", + "1949486": "Noctuana", + "1949492": "Noctuana lactifera", + "1949496": "Moeris", + "1949512": "Moeris crispinus", + "1949515": "Moeris remus", + "1949517": "Agathymus", + "1949520": "Agathymus polingi", + "1949544": "Agathymus evansi", + "1949545": "Agathymus stephensi", + "1949549": "Agathymus aryxna", + "1949579": "Typhedanus", + "1949592": "Typhedanus undulatus", + "1949610": "Ebrietas", + "1949621": "Ebrietas anacreon", + "1949632": "Corticea", + "1949647": "Mylon", + "1949686": "Ancyloxypha", + "1949687": "Ancyloxypha arene", + "1949697": "Ancyloxypha numitor", + "1949704": "Pyrgus", + "1949715": "Pyrgus carlinae", + "1949784": "Pyrgus armoricanus", + "1949794": "Pyrgus alveus", + "1949850": "Pyrgus cinarae", + "1949852": "Pyrgus andromedae", + "1949877": "Pyrgus sidae", + "1949929": "Pyrgus serratulae", + "1949938": "Pyrgus malvoides", + "1949954": "Pyrgus onopordi", + "1950006": "Pyrgus centaureae", + "1950012": "Pseudocoladenia", + "1950013": "Pseudocoladenia fabia", + "1950015": "Antigonus", + "1950017": "Antigonus erosus", + "1950019": "Antigonus nearchus", + "1950024": "Antigonus liborius", + "1950034": "Polygonus", + "1950044": "Polygonus leo", + "1950046": "Pompeius", + "1950047": "Pompeius verna", + "1950052": "Pompeius pompeius", + "1950114": "Lerema", + "1950133": "Lerema accius", + "1950148": "Mucia", + "1950153": "Mucia zygia", + "1950154": "Gomalia", + "1950156": "Gomalia elma", + "1950166": "Ancistroides", + "1950169": "Ancistroides gemmifer", + "1950171": "Ancistroides nigrita", + "1950193": "Anthoptus", + "1950197": "Anthoptus epictetus", + "1950200": "Nisoniades", + "1950243": "Nisoniades macarius", + "1950257": "Chaetocneme", + "1950272": "Chaetocneme beata", + "1950299": "Hidari", + "1950302": "Hidari irava", + "1950334": "Achalarus", + "1950360": "Seseria", + "1950362": "Seseria formosana", + "1950380": "Wallengrenia", + "1950384": "Wallengrenia otho", + "1950396": "Wallengrenia egeremet", + "1950406": "Problema", + "1950408": "Problema byssus", + "1950409": "Problema bulenta", + "1950496": "Halpe", + "1950521": "Halpe porus", + "1950533": "Halpe hindu", + "1950566": "Nastra", + "1950567": "Nastra lherminier", + "1950578": "Nastra julia", + "1950585": "Netrocoryne", + "1950591": "Netrocoryne repanda", + "1950649": "Heliopyrgus", + "1950654": "Heliopyrgus domicella", + "1950763": "Celaenorrhinus", + "1950767": "Celaenorrhinus similis", + "1950856": "Celaenorrhinus fritzgaertneri", + "1950877": "Celaenorrhinus mokeezi", + "1950879": "Celaenorrhinus leucocera", + "1950936": "Celaenorrhinus ambareesa", + "1951061": "Tirynthia", + "1951062": "Tirynthia conflua", + "1951066": "Anisochoria", + "1951072": "Anisochoria sublimbata", + "1951093": "Heliopetes", + "1951097": "Heliopetes arsalte", + "1951103": "Heliopetes omrina", + "1951116": "Heliopetes ericetorum", + "1951121": "Heliopetes alana", + "1951125": "Heliopetes macaira", + "1951133": "Heliopetes laviana", + "1951144": "Cephrenes", + "1951157": "Cephrenes trichopepla", + "1951170": "Cephrenes augiades", + "1951213": "Pholisora", + "1951217": "Pholisora catullus", + "1951218": "Pholisora libya", + "1951289": "Hylephila", + "1951332": "Oarisma", + "1951340": "Oarisma garita", + "1951348": "Helias", + "1951358": "Psidopala", + "1951370": "Psidopala pennata", + "1951407": "Agnidra", + "1951412": "Agnidra scabiosa", + "1951430": "Oreta", + "1951448": "Oreta rosea", + "1951462": "Oreta insignis", + "1951492": "Oreta jaspidea", + "1951505": "Oreta griseotincta", + "1951507": "Oreta extensa", + "1951522": "Oreta fuscopurpurea", + "1951529": "Oreta loochooana", + "1951542": "Oreta brunnea", + "1951549": "Cilix", + "1951557": "Cilix glaucata", + "1951569": "Thyatira", + "1951627": "Deroca", + "1951631": "Deroca hidda", + "1951642": "Auzatellodes", + "1951645": "Tetheella", + "1951649": "Tetheella fluctuosa", + "1951655": "Euthyatira", + "1951657": "Euthyatira semicircularis", + "1951660": "Euthyatira pudens", + "1951664": "Microblepsis", + "1951671": "Microblepsis rugosa", + "1951675": "Microblepsis violacea", + "1951713": "Polyploca ridens", + "1951725": "Polyploca ruficollis", + "1951744": "Leucoblepsis", + "1951747": "Leucoblepsis fenestraria", + "1951782": "Eudeilinia", + "1951784": "Eudeilinia herminiata", + "1951788": "Nordstromia", + "1951791": "Nordstromia japonica", + "1951817": "Neotogaria", + "1951818": "Neotogaria saitonis", + "1951819": "Tridrepana", + "1951840": "Tridrepana arikana", + "1951844": "Tridrepana unispina", + "1951859": "Tridrepana fulvata", + "1951874": "Tridrepana lunulata", + "1951881": "Tridrepana flava", + "1951910": "Horipsestis", + "1951912": "Epipsestis", + "1951919": "Epipsestis dubia", + "1952001": "Falcaria", + "1952014": "Falcaria lacertinaria", + "1952029": "Habrosyne", + "1952032": "Habrosyne scripta", + "1952034": "Habrosyne indica", + "1952043": "Habrosyne gloriosa", + "1952052": "Habrosyne pterographa", + "1952062": "Habrosyne pyritoides", + "1952092": "Pseudothyatira", + "1952093": "Pseudothyatira cymatophoroides", + "1952118": "Cymatophorina", + "1952130": "Cymatophorina diluta", + "1952144": "Albara", + "1952147": "Albara reversaria", + "1952174": "Macrocilix", + "1952175": "Macrocilix maia", + "1952177": "Macrocilix mysticata", + "1952222": "Achlya", + "1952229": "Achlya flavicornis", + "1952259": "Phalacra", + "1952279": "Strepsigonia", + "1952281": "Strepsigonia diluta", + "1952300": "Tethea", + "1952419": "Cyclidia", + "1952446": "Sabra", + "1952449": "Sabra harpagula", + "1952453": "Gaurena", + "1952481": "Gaurena florens", + "1952526": "Ochropacha", + "1952532": "Ochropacha duplaris", + "1952547": "Ditrigona", + "1952551": "Ditrigona triangularia", + "1952607": "Horithyatira", + "1952611": "Horithyatira decorata", + "1952673": "Drapetodes", + "1952685": "Drapetodes mitaria", + "1952702": "Canucha", + "1952704": "Canucha specularis", + "1952727": "Ceranemota", + "1952730": "Ceranemota fasciata", + "1952736": "Drepana", + "1952801": "Watsonalla", + "1952806": "Watsonalla binaria", + "1952812": "Watsonalla cultraria", + "1952816": "Watsonalla uncinula", + "1952827": "Teldenia", + "1952857": "Teldenia specca", + "1952875": "Epicopeia", + "1952878": "Epicopeia mencia", + "1952883": "Epicopeia hainesii", + "1952907": "Psychostrophia", + "1952909": "Psychostrophia melanargia", + "1953000": "Cicinnus", + "1953102": "Lacosoma", + "1953124": "Lacosoma chiridota", + "1953159": "Alheita", + "1953166": "Alheita caudina", + "1953190": "Lyssa", + "1953192": "Lyssa menoetius", + "1953196": "Lyssa zampa", + "1953217": "Lyssa macleayi", + "1953325": "Pseudhyria", + "1953326": "Pseudhyria rubra", + "1953347": "Dysaethria", + "1953356": "Dysaethria scopocera", + "1953396": "Pseudomicronia", + "1953407": "Pseudomicronia advocataria", + "1953411": "Micronia", + "1953423": "Micronia aculeata", + "1953490": "Syngria", + "1953499": "Syngria druidaria", + "1953522": "Urania", + "1953540": "Epiplema", + "1953729": "Epiplema arcuata", + "1953948": "Phazaca", + "1953969": "Morphomima", + "1953970": "Morphomima fulvitacta", + "1953971": "Pterotosoma", + "1953975": "Chundana", + "1953996": "Trotorhombia", + "1953998": "Trotorhombia metachromata", + "1954024": "Rhombophylla", + "1954025": "Rhombophylla xylinopis", + "1954033": "Orudiza", + "1954037": "Orudiza protheclaria", + "1954038": "Acropteris", + "1954074": "Alcides", + "1954083": "Antiplecta", + "1954084": "Antiplecta triangularis", + "1954119": "Urapteroides", + "1954120": "Urapteroides astheniata", + "1954159": "Nothus", + "1954235": "Pasiphilodes", + "1954236": "Pasiphilodes testulata", + "1954313": "Microcalcarifera", + "1954338": "Pasiphila sandycias", + "1954344": "Pasiphila muscosata", + "1954346": "Pasiphila bilineolata", + "1954351": "Pasiphila lunata", + "1954353": "Pasiphila plinthina", + "1954356": "Pasiphila semochlora", + "1954359": "Pasiphila fumipalpata", + "1954382": "Axiodes bifasciata", + "1954391": "Psyra", + "1954478": "Xenochlorodes", + "1954490": "Xenochlorodes olympiaria", + "1954494": "Euchristophia", + "1954496": "Euchristophia cumulata", + "1954512": "Paranotoreas", + "1954514": "Paranotoreas brephosata", + "1954521": "Aporoctena", + "1954522": "Aporoctena scierodes", + "1954555": "Pseudopanthera", + "1954563": "Pseudopanthera macularia", + "1954587": "Alcis", + "1954875": "Collix", + "1954891": "Collix stellata", + "1954911": "Collix ghosha", + "1954921": "Microdes", + "1954924": "Sabulodes", + "1954930": "Sabulodes aegrotata", + "1954933": "Sabulodes edwardsata", + "1954992": "Sabulodes niveostriata", + "1954993": "Sabulodes spoliata", + "1955016": "Smyriodes", + "1955038": "Prasinocyma", + "1955039": "Prasinocyma rhodocosma", + "1955093": "Prasinocyma semicrocea", + "1955153": "Prasinocyma iosticta", + "1955199": "Prasinocyma albicosta", + "1955202": "Prasinocyma ocyptera", + "1955270": "Homodotis", + "1955271": "Homodotis megaspilata", + "1955272": "Homodotis falcata", + "1955304": "Oxymacaria", + "1955318": "Oxymacaria odontias", + "1955356": "Celerena", + "1955389": "Celerena signata", + "1955408": "Helastia", + "1955413": "Helastia semisignata", + "1955416": "Helastia corcularia", + "1955422": "Helastia cinerearia", + "1955475": "Compsoptera", + "1955479": "Compsoptera opacaria", + "1955484": "Compsoptera jourdanaria", + "1955495": "Spodolepis", + "1955497": "Spodolepis danbyi", + "1955498": "Spodolepis substriataria", + "1955508": "Hylaea", + "1955551": "Herochroma", + "1955552": "Herochroma cristata", + "1955581": "Herochroma baibarana", + "1955678": "Rhodometra", + "1955694": "Rhodometra sacraria", + "1955716": "Cusiala", + "1955725": "Cusiala boarmoides", + "1955730": "Chaetolopha", + "1955736": "Chaetolopha emporias", + "1955737": "Chaetolopha leucophragma", + "1955743": "Chaetolopha niphosticha", + "1955745": "Chaetolopha oxyntis", + "1955752": "Epyaxa", + "1955753": "Epyaxa rosearia", + "1955755": "Epyaxa lucidata", + "1955761": "Elvia", + "1955763": "Elvia glaucata", + "1955804": "Tasta", + "1955806": "Tasta argozana", + "1955843": "Nychiodes", + "1955856": "Nychiodes waltheri", + "1955898": "Chrysolarentia", + "1955899": "Chrysolarentia subrectaria", + "1955900": "Cabera", + "1955981": "Bracca", + "1955998": "Semaeopus", + "1956098": "Semaeopus ella", + "1956099": "Semaeopus nisa", + "1956214": "Eumacrodes", + "1956215": "Eumacrodes yponomeutaria", + "1956303": "Ozola", + "1956309": "Ozola japonica", + "1956364": "Aponotoreas", + "1956376": "Amblychia", + "1956384": "Amblychia angeronaria", + "1956415": "Anachloris", + "1956416": "Anachloris subochraria", + "1956434": "Ematurga", + "1956440": "Ematurga atomaria", + "1956462": "Ematurga amitaria", + "1956495": "Sirinopteryx", + "1956496": "Sirinopteryx rufivinctata", + "1956504": "Tacparia", + "1956505": "Tacparia detersata", + "1956510": "Tacparia atropunctata", + "1956522": "Melanthia", + "1956524": "Melanthia procellata", + "1956536": "Melanthia catenaria", + "1956545": "Erannis", + "1956597": "Erannis vancouverensis", + "1956599": "Erannis defoliaria", + "1956626": "Erannis tiliaria", + "1956629": "Erannis golda", + "1956639": "Erannis declinans", + "1956709": "Epirranthis", + "1956710": "Epirranthis diversata", + "1956715": "Zenophleps", + "1956716": "Zenophleps lignicolorata", + "1956824": "Neohipparchus", + "1956895": "Episauris", + "1956897": "Episauris kiliani", + "1956900": "Heliomata", + "1956904": "Heliomata cycladata", + "1956949": "Aeolochroma", + "1956955": "Aeolochroma turneri", + "1956958": "Aeolochroma metarhodata", + "1956963": "Aeolochroma quadrilinea", + "1956978": "Aeolochroma hypochromaria", + "1956983": "Aeolochroma viridicata", + "1957057": "Hypobapta", + "1957058": "Hypobapta diffundens", + "1957062": "Hypobapta barnardi", + "1957136": "Nadagara", + "1957161": "Nadagara vigaia", + "1957172": "Sibatania", + "1957174": "Sibatania arizana", + "1957193": "Larentia", + "1957266": "Larentia clavaria", + "1957281": "Thetidia", + "1957286": "Thetidia plusiaria", + "1957300": "Thetidia smaragdaria", + "1957327": "Calluga", + "1957333": "Calluga costalis", + "1957367": "Eumelea", + "1957368": "Eumelea ludovicata", + "1957413": "Eumelea rosalia", + "1957436": "Cingilia", + "1957441": "Cingilia catenaria", + "1957459": "Gonanticlea", + "1957460": "Gonanticlea aversa", + "1957508": "Metallochlora", + "1957523": "Metallochlora lineata", + "1957545": "Peribatodes", + "1957556": "Peribatodes abstersaria", + "1957565": "Peribatodes ilicaria", + "1957570": "Peribatodes secundaria", + "1957572": "Peribatodes rhomboidaria", + "1957579": "Peribatodes perversaria", + "1957583": "Peribatodes correptaria", + "1957611": "Peribatodes umbraria", + "1957620": "Scotopteryx", + "1957632": "Scotopteryx mucronata", + "1957673": "Scotopteryx coelinaria", + "1957706": "Scotopteryx moeniata", + "1957718": "Scotopteryx bipunctaria", + "1957746": "Scotopteryx luridata", + "1957791": "Scotopteryx coarctaria", + "1957816": "Scotopteryx chenopodiata", + "1957822": "Scotopteryx alfacaria", + "1957829": "Ennomos", + "1957845": "Ennomos alniaria", + "1957852": "Ennomos quercinaria", + "1957854": "Ennomos autumnaria", + "1957870": "Ennomos subsignaria", + "1957999": "Alsophila", + "1958023": "Parectropis", + "1958024": "Parectropis similaria", + "1958045": "Parectropis subflava", + "1958047": "Protoproutia", + "1958049": "Protoproutia laredoata", + "1958056": "Odontognophos", + "1958065": "Odontognophos dumetata", + "1958067": "Sicya", + "1958104": "Antepione", + "1958121": "Antepione thisoaria", + "1958143": "Plutodes", + "1958152": "Plutodes flavescens", + "1958158": "Plutodes costatus", + "1958163": "Plutodes exquisita", + "1958238": "Ourapteryx", + "1958241": "Ourapteryx changi", + "1958252": "Ourapteryx nivea", + "1958255": "Ourapteryx caecata", + "1958259": "Ourapteryx pallidula", + "1958260": "Ourapteryx ramosa", + "1958275": "Ourapteryx similaria", + "1958282": "Ourapteryx inspersa", + "1958290": "Ourapteryx sciticaudaria", + "1958305": "Ourapteryx clara", + "1958307": "Ourapteryx marginata", + "1958323": "Ourapteryx sambucaria", + "1958324": "Ourapteryx claretta", + "1958411": "Hyposidra", + "1958422": "Hyposidra apioleuca", + "1958454": "Hyposidra talaca", + "1958463": "Hyposidra infixaria", + "1958483": "Hyposidra aquilaria", + "1958489": "Episteira", + "1958507": "Narraga", + "1958515": "Narraga nelvae", + "1958528": "Narraga fimetaria", + "1959339": "Parosteodes", + "1959341": "Parosteodes fictiliaria", + "1959374": "Orthoclydon", + "1959379": "Orthoclydon praefectata", + "1959381": "Philereme", + "1959383": "Philereme vetulata", + "1959395": "Philereme transversata", + "1959409": "Dyscia", + "1959423": "Dyscia penulataria", + "1959436": "Dyscia lentiscaria", + "1959461": "Dyscia innocentaria", + "1959467": "Dyscia fagaria", + "1959473": "Dyscia distinctaria", + "1959486": "Tristrophis", + "1959494": "Tristrophis rectifascia", + "1959498": "Urolitha", + "1959500": "Urolitha bipunctifera", + "1959541": "Gueneria", + "1959543": "Gueneria similaria", + "1959593": "Stibaractis", + "1959595": "Stibaractis melanotoxa", + "1959635": "Ametris", + "1959637": "Ametris nitocris", + "1959643": "Acolutha", + "1959645": "Acolutha pictaria", + "1959652": "Acolutha pulchella", + "1959662": "Chlorodontopera", + "1959666": "Chlorodontopera taiwana", + "1959667": "Chlorodontopera discospilata", + "1959668": "Lythria", + "1959682": "Lythria purpuraria", + "1959735": "Lythria cruentaria", + "1959781": "Amphiclasta", + "1959782": "Amphiclasta lygaea", + "1959797": "Toulgoetia", + "1959799": "Toulgoetia cauteriata", + "1959834": "Palaeaspilates", + "1959839": "Palaeaspilates inoffensa", + "1959852": "Mellilla", + "1959858": "Mellilla xanthometata", + "1959873": "Chariaspilates", + "1959876": "Chariaspilates formosaria", + "1959888": "Plagodis", + "1959890": "Plagodis fervidaria", + "1959898": "Plagodis phlogosaria", + "1959914": "Plagodis dolabraria", + "1959917": "Plagodis serinaria", + "1959919": "Plagodis pulveraria", + "1959934": "Plagodis alcoolaria", + "1959948": "Plagodis reticulata", + "1959997": "Oulobophora", + "1960002": "Oulobophora externaria", + "1960003": "Chalastra", + "1960004": "Chalastra pellurgata", + "1960016": "Gandaritis", + "1960023": "Gandaritis fixseni", + "1960087": "Acrosemia", + "1960090": "Acrosemia vulpecularia", + "1960098": "Mixocera", + "1960105": "Mixocera frustratoria", + "1960106": "Mixocera latilineata", + "1960125": "Antictenia", + "1960128": "Antictenia punctunculus", + "1960162": "Acronyctodes", + "1960166": "Acronyctodes mexicanaria", + "1960170": "Tanaorhinus", + "1960181": "Tanaorhinus reciprocata", + "1960182": "Tanaorhinus formosana", + "1960193": "Euloxia", + "1960201": "Euloxia meandraria", + "1960225": "Opisthoxia", + "1960255": "Opisthoxia miletia", + "1960268": "Opisthoxia metargyria", + "1960315": "Opisthoxia molpadia", + "1960410": "Picromorpha", + "1960411": "Picromorpha pyrrhopa", + "1960422": "Problepsis", + "1960484": "Problepsis ocellata", + "1960500": "Euacidalia", + "1960503": "Euacidalia brownsvillea", + "1960519": "Monoctenia", + "1960521": "Monoctenia falernaria", + "1960524": "Monoctenia smerintharia", + "1960570": "Danala", + "1960571": "Danala lilacina", + "1960592": "Opisthograptis", + "1960595": "Opisthograptis punctilineata", + "1960617": "Opisthograptis luteolata", + "1960628": "Hesperumia", + "1960632": "Hesperumia sulphuraria", + "1960671": "Organopoda", + "1960686": "Organopoda carnearia", + "1960844": "Phthonosema", + "1960854": "Phthonosema tendinosaria", + "1960939": "Phrataria", + "1960940": "Phrataria transcissata", + "1960941": "Phrataria replicataria", + "1960943": "Hethemia", + "1960951": "Hethemia pistasciaria", + "1960958": "Metallolophia", + "1960963": "Metallolophia arenaria", + "1960966": "Chlorissa", + "1961013": "Chlorissa etruscaria", + "1961025": "Chlorissa albistrigulata", + "1961037": "Chlorissa cloraria", + "1961040": "Chlorissa viridata", + "1961048": "Phthonandria", + "1961052": "Phthonandria atrilineata", + "1961066": "Apocheima", + "1961068": "Apocheima hispidaria", + "1961117": "Discoglypha", + "1961126": "Discoglypha locupletata", + "1961145": "Eudulophasia", + "1961155": "Eudulophasia invaria", + "1961158": "Pogonopygia", + "1961162": "Pogonopygia nigralbata", + "1961179": "Corula", + "1961180": "Corula geometroides", + "1961188": "Hypoxystis", + "1961190": "Hypoxystis pluviaria", + "1961229": "Myrteta", + "1961252": "Myrteta angelica", + "1961264": "Besma", + "1961334": "Dyspteris", + "1961361": "Dyspteris abortivaria", + "1961371": "Crocota", + "1961383": "Philtraea", + "1961388": "Philtraea paucimacula", + "1961643": "Mixochlora", + "1961647": "Mixochlora vittata", + "1961716": "Philedia", + "1961718": "Philedia punctomacularia", + "1961719": "Melanodes", + "1962047": "Synchlora", + "1962051": "Synchlora frondaria", + "1962076": "Synchlora aerata", + "1962086": "Synchlora astraeoides", + "1962118": "Synchlora gerularia", + "1962120": "Synchlora pulchrifimbria", + "1962159": "Scioglyptis lyciaria", + "1962162": "Scioglyptis canescaria", + "1962165": "Selenia", + "1962204": "Selenia dentaria", + "1962265": "Selenia tetralunaria", + "1962268": "Selenia lunularia", + "1962369": "Dysstroma", + "1962432": "Dysstroma sobria", + "1962434": "Dysstroma truncata", + "1962447": "Dysstroma fumata", + "1962479": "Dysstroma brunneata", + "1962490": "Dysstroma hersiliata", + "1962516": "Dysstroma citrata", + "1962577": "Tephronia", + "1962584": "Tephronia sepiaria", + "1962632": "Ligdia", + "1962636": "Ligdia adustata", + "1962655": "Epiphryne", + "1962656": "Epiphryne verriculata", + "1962657": "Epiphryne undosata", + "1962659": "Epiphryne charidema", + "1962676": "Gasterocome", + "1962678": "Gasterocome pannosaria", + "1962688": "Sarisa", + "1962689": "Sarisa muriferata", + "1962704": "Melanolophia", + "1962722": "Melanolophia canadaria", + "1962727": "Melanolophia imitata", + "1962828": "Gastrophora", + "1962829": "Gastrophora henricaria", + "1962830": "Naxidia", + "1962839": "Naxidia punctata", + "1962840": "Dysbatus", + "1962841": "Dysbatus stenodesma", + "1962842": "Dysbatus singularis", + "1962857": "Apeira", + "1962860": "Apeira syringaria", + "1962893": "Lambdina", + "1962895": "Lambdina fervidaria", + "1962900": "Lambdina fiscellaria", + "1962925": "Lambdina pellucidaria", + "1962932": "Iulops", + "1962934": "Iulops argocrana", + "1962956": "Chesias", + "1962961": "Chesias isabella", + "1962972": "Chesias rufata", + "1962990": "Chesias legatella", + "1962995": "Orthonama", + "1963011": "Orthonama vittata", + "1963049": "Ceratonyx", + "1963052": "Ceratonyx satanaria", + "1963055": "Syncirsodes", + "1963058": "Hydatocapnia", + "1963095": "Iotaphora iridicolor", + "1963096": "Iotaphora admirabilis", + "1963165": "Microloxia", + "1963168": "Microloxia herbaria", + "1963199": "Synaxis", + "1963201": "Synaxis jubararia", + "1963207": "Synaxis triangulata", + "1963212": "Synaxis pallulata", + "1963296": "Tessarotis", + "1963297": "Tessarotis rubrata", + "1963299": "Thalera", + "1963306": "Thalera fimbrialis", + "1963418": "Prochasma", + "1963424": "Melanchroia", + "1963425": "Melanchroia aterea", + "1963433": "Melanchroia chephise", + "1963445": "Chloroclysta", + "1963446": "Chloroclysta siterata", + "1963463": "Chloroclysta miata", + "1963532": "Paralaea porphyrinaria", + "1963584": "Cinglis", + "1963587": "Cinglis andalusiaria", + "1963618": "Pimaphera", + "1963619": "Pimaphera sparsaria", + "1963627": "Aporandria", + "1963629": "Aporandria specularia", + "1963630": "Synnomos", + "1963633": "Synnomos firmamentaria", + "1963706": "Eilicrinia", + "1963709": "Eilicrinia trinotata", + "1963710": "Eilicrinia cordiaria", + "1963733": "Eilicrinia flava", + "1963753": "Adalbertia", + "1963755": "Adalbertia castiliaria", + "1963775": "Apodasmia", + "1963777": "Dithalama", + "1963782": "Dithalama cosmospila", + "1963826": "Chartographa", + "1963827": "Chartographa convexa", + "1963835": "Prochoerodes", + "1963848": "Prochoerodes lineola", + "1963854": "Prochoerodes forficaria", + "1963873": "Hypagyrtis", + "1963874": "Hypagyrtis piniata", + "1963879": "Hypagyrtis esther", + "1963892": "Hypagyrtis unipunctata", + "1963933": "Paragonia", + "1964020": "Krananda", + "1964024": "Krananda semihyalina", + "1964025": "Krananda oliveomarginata", + "1964029": "Krananda lucidaria", + "1964040": "Probole", + "1964041": "Probole amicaria", + "1964064": "Didymoctenia", + "1964066": "Didymoctenia exsuperata", + "1964067": "Sicyodes", + "1964076": "Sicyodes cambogiaria", + "1964095": "Ophthalmitis", + "1964113": "Ophthalmitis albosignaria", + "1964116": "Ophthalmitis herbidaria", + "1964131": "Pseudocoremia", + "1964137": "Pseudocoremia monacha", + "1964141": "Pseudocoremia productata", + "1964143": "Pseudocoremia rudisata", + "1964144": "Pseudocoremia leucelaea", + "1964151": "Pseudocoremia fenerata", + "1964153": "Pseudocoremia indistincta", + "1964155": "Pseudocoremia lactiflua", + "1964158": "Pseudocoremia suavis", + "1964174": "Pseudocoremia lupinata", + "1964175": "Catarhoe", + "1964189": "Catarhoe basochesiata", + "1964191": "Catarhoe rubidata", + "1964195": "Catarhoe cuculata", + "1964246": "Calleulype", + "1964247": "Calleulype whitelyi", + "1964299": "Thalassodes", + "1964305": "Thalassodes pilaria", + "1964316": "Thalassodes immissaria", + "1964331": "Thalassodes dorsilinea", + "1964392": "Lithostege", + "1964401": "Lithostege castiliaria", + "1964437": "Lithostege farinata", + "1964471": "Lithostege griseata", + "1964549": "Microcalicha", + "1964562": "Onycodes", + "1964565": "Onycodes rubra", + "1964577": "Epirrhoe", + "1964585": "Epirrhoe plebeculata", + "1964637": "Epirrhoe galiata", + "1964653": "Epirrhoe tristata", + "1964657": "Epirrhoe rivata", + "1964696": "Cathydata", + "1964698": "Cathydata batina", + "1964699": "Oenochlora", + "1964702": "Oenochlora imperialis", + "1964714": "Eugonobapta", + "1964715": "Eugonobapta nivosaria", + "1964733": "Alex", + "1964738": "Alex palparia", + "1964835": "Ekboarmia", + "1964836": "Ekboarmia atlanticaria", + "1964936": "Lobophora", + "1964995": "Mnesampela privata", + "1964996": "Mnesampela heliochrysa", + "1965018": "Stamnodes", + "1965024": "Stamnodes seiferti", + "1965038": "Stamnodes formosata", + "1965058": "Stamnodes gibbicostata", + "1965069": "Stamnodes albiapicata", + "1965078": "Stamnodes topazata", + "1965100": "Stamnodes affiliata", + "1965123": "Euphyia", + "1965166": "Euphyia unangulata", + "1965197": "Euphyia frustata", + "1965208": "Euphyia biangulata", + "1965345": "Euphyia molluginata", + "1965586": "Euphyia intermediata", + "1965633": "Fagivorina", + "1965640": "Fagivorina arenaria", + "1965641": "Syneora", + "1965643": "Syneora fractata", + "1965649": "Syneora hemeropa", + "1965650": "Syneora mundifera", + "1965663": "Glena", + "1965671": "Glena quinquelinearia", + "1965697": "Glena cribrataria", + "1965699": "Glena plumosaria", + "1965758": "Eulithis", + "1965763": "Eulithis testata", + "1965777": "Eulithis mellinata", + "1965794": "Eulithis serrataria", + "1965795": "Eulithis populata", + "1965797": "Eulithis explanata", + "1965805": "Eulithis diversilineata", + "1965807": "Eulithis destinata", + "1965810": "Eulithis pyropata", + "1965823": "Eulithis xylina", + "1965825": "Eulithis prunata", + "1965831": "Eulithis gracilineata", + "1965838": "Eulithis molliculata", + "1965841": "Eulithis pyraliata", + "1965861": "Eulithis flavibrunneata", + "1965865": "Eulithis propulsata", + "1965881": "Simena", + "1965887": "Simena luctifera", + "1965888": "Angerona", + "1965913": "Angerona prunaria", + "1965967": "Timandra", + "1965996": "Timandra griseata", + "1966017": "Timandra comae", + "1966069": "Sericoptera", + "1966088": "Sericoptera mahometaria", + "1966159": "Peratophyga", + "1966180": "Disclisioprocta", + "1966185": "Disclisioprocta stellata", + "1966193": "Exelis", + "1966195": "Exelis ophiurus", + "1966198": "Exelis pyrolaria", + "1966215": "Jankowskia", + "1966235": "Xylopteryx", + "1966255": "Xylopteryx arcuata", + "1966280": "Percnia", + "1966286": "Percnia fumidaria", + "1966302": "Percnia luridaria", + "1966310": "Percnia longitermen", + "1966340": "Platycerota", + "1966346": "Pachycnemia", + "1966351": "Pachycnemia hippocastanaria", + "1966358": "Pachycnemia tibiaria", + "1966360": "Synegiodes", + "1966362": "Synegiodes ornata", + "1966367": "Synegiodes hyriaria", + "1966853": "Antilurga", + "1966854": "Antilurga alhambrata", + "1966883": "Pungeleria", + "1966886": "Pungeleria capreolaria", + "1966927": "Cryphaea", + "1966929": "Geometra", + "1966975": "Zermizinga", + "1966977": "Zermizinga sinuata", + "1966978": "Zermizinga indocilisaria", + "1966982": "Rhodostrophia", + "1967003": "Rhodostrophia discopunctata", + "1967006": "Rhodostrophia calabra", + "1967011": "Rhodostrophia vibicaria", + "1967025": "Rhodostrophia pudorata", + "1967039": "Rhodostrophia bisinuata", + "1967123": "Episemasia", + "1967127": "Episemasia cervinaria", + "1967128": "Episemasia solitaria", + "1967196": "Siona", + "1967207": "Zerenopsis", + "1967209": "Zerenopsis lepida", + "1967210": "Apodrepanulatrix", + "1967212": "Apodrepanulatrix liberaria", + "1967220": "Odontoptila", + "1967226": "Odontoptila obrimo", + "1967234": "Homochlodes", + "1967240": "Homochlodes fritillaria", + "1967242": "Cepphis", + "1967245": "Cepphis advenaria", + "1967263": "Aspitates", + "1967265": "Aspitates ochrearia", + "1967273": "Aspitates gilvaria", + "1967324": "Aspitates collinaria", + "1967337": "Argyrotome", + "1967346": "Argyrotome prospectata", + "1967427": "Holochroa", + "1967433": "Holochroa dissociarius", + "1967435": "Argyrophora", + "1967438": "Argyrophora trofonia", + "1967444": "Pseudonadagara", + "1967445": "Pseudonadagara semicolor", + "1967447": "Artiora", + "1967452": "Artiora evonymaria", + "1967583": "Paradarisa", + "1967590": "Paradarisa comparataria", + "1967595": "Paradarisa chloauges", + "1967597": "Paradarisa consonaria", + "1967604": "Comostolopsis", + "1967606": "Comostolopsis stillata", + "1967660": "Pseudomiza", + "1967672": "Pseudomiza aurata", + "1967688": "Pseudomiza obliquaria", + "1967696": "Lobus", + "1967699": "Xenomusa", + "1967703": "Xenomusa metallica", + "1967715": "Eucyclodes", + "1967716": "Eucyclodes buprestaria", + "1967722": "Abraxas", + "1967803": "Abraxas pantaria", + "1967815": "Abraxas sylvata", + "1967873": "Abraxas grossulariata", + "1968101": "Chlenias", + "1968115": "Chlenias banksiaria", + "1968131": "Chlenias ochrocrana", + "1968135": "Borbacha", + "1968147": "Borbacha pardaria", + "1968166": "Nothomiza", + "1968182": "Nothomiza flavicosta", + "1968193": "Nothomiza formosa", + "1968199": "Acasis", + "1968205": "Acasis viridata", + "1968257": "Sestra", + "1968271": "Tetracis", + "1968301": "Wilemania", + "1968304": "Wilemania nitobei", + "1968306": "Phrygionis", + "1968313": "Phrygionis polita", + "1968315": "Phrygionis paradoxata", + "1968321": "Phrygionis platinata", + "1968324": "Phrygionis privignaria", + "1968362": "Milionia", + "1968363": "Milionia zonea", + "1968537": "Periclina", + "1968538": "Periclina apricaria", + "1968582": "Caripeta", + "1968643": "Phallaria", + "1968665": "Nothocasis", + "1968678": "Nothocasis sertata", + "1968683": "Athroolopha", + "1968686": "Athroolopha pennigeraria", + "1968722": "Somatina", + "1968730": "Somatina plynusaria", + "1968746": "Somatina rosacea", + "1968827": "Eucrostes", + "1968837": "Eucrostes indigenata", + "1968854": "Colotois", + "1968867": "Colotois pennaria", + "1968925": "Pleuroprucha", + "1968942": "Pleuroprucha insulsaria", + "1968950": "Anectropis", + "1968951": "Anectropis semifascia", + "1968975": "Tephrina", + "1968990": "Tephrina murinaria", + "1969102": "Acodia", + "1969104": "Acodia pauper", + "1969122": "Gnophos", + "1969291": "Gnophos obfuscata", + "1969339": "Gnophos furvata", + "1969357": "Gnophos caenosa", + "1969463": "Gnophos sartata", + "1969491": "Gnophos delitescens", + "1969566": "Cernia", + "1969568": "Cernia amyclaria", + "1969571": "Traminda", + "1969581": "Traminda mundissima", + "1969613": "Hypocometa", + "1969621": "Hypocometa clauda", + "1969918": "Triphosa", + "1969954": "Triphosa dubitata", + "1969958": "Triphosa sabaudiata", + "1969961": "Triphosa haesitata", + "1969978": "Triphosa californiata", + "1970019": "Synegia", + "1970034": "Synegia eumeleata", + "1970091": "Parepisparis", + "1970093": "Parepisparis lutosaria", + "1970094": "Parepisparis multicolora", + "1970108": "Parepisparis excusata", + "1970117": "Neoalcis", + "1970119": "Neoalcis californiaria", + "1970120": "Spaniocentra", + "1970136": "Spaniocentra hollowayi", + "1970142": "Xyridacma", + "1970145": "Xyridacma veronicae", + "1970148": "Xyridacma alectoraria", + "1970150": "Xyridacma ustaria", + "1970157": "Polyclysta", + "1970159": "Polyclysta hypogrammata", + "1970163": "Perigramma", + "1970179": "Cosmorhoe", + "1970213": "Cosmorhoe ocellata", + "1970226": "Selidosema", + "1970227": "Selidosema brunnearia", + "1970243": "Selidosema plumaria", + "1970259": "Selidosema taeniolaria", + "1970264": "Rhuma", + "1970265": "Rhuma subaurata", + "1970279": "Perconia", + "1970284": "Perconia strigillaria", + "1970314": "Trichopterigia", + "1970322": "Trichopterigia sanguinipunctata", + "1970403": "Epidesmia", + "1970435": "Psilalcis", + "1970436": "Psilalcis galsworthyi", + "1970460": "Taxeotis stereospila", + "1970463": "Taxeotis perlinearia", + "1970473": "Taxeotis reserata", + "1970485": "Taxeotis intextata", + "1970574": "Scopula", + "1971819": "Horisme", + "1971835": "Horisme intestinata", + "1971847": "Horisme corticata", + "1971852": "Horisme scorteata", + "1971858": "Horisme vitalbata", + "1971888": "Horisme tersata", + "1971986": "Horisme radicaria", + "1971994": "Nepytia", + "1971995": "Nepytia canosaria", + "1971998": "Nepytia phantasmaria", + "1971999": "Nepytia pellucidaria", + "1972010": "Nepytia semiclusaria", + "1972072": "Yashmakia", + "1972076": "Antitrygodes", + "1972094": "Antitrygodes divisaria", + "1972097": "Pityeja", + "1972101": "Pityeja histrionaria", + "1972114": "Perizoma", + "1972120": "Perizoma affinitata", + "1972185": "Perizoma albulata", + "1972187": "Perizoma blandiata", + "1972234": "Perizoma flavofasciata", + "1972250": "Perizoma alchemillata", + "1972278": "Perizoma minorata", + "1972342": "Perizoma bifaciata", + "1972374": "Perizoma lugdunaria", + "1972377": "Perizoma hydrata", + "1972404": "Circopetes", + "1972407": "Circopetes obtusata", + "1972425": "Operophtera", + "1972434": "Operophtera fagata", + "1972443": "Operophtera relegata", + "1972447": "Operophtera bruceata", + "1972449": "Operophtera brumata", + "1972454": "Operophtera occidentalis", + "1972461": "Gellonia", + "1972472": "Heterusia", + "1972604": "Gastrinodes", + "1972606": "Gastrinodes bitaeniaria", + "1972607": "Sarcinodes", + "1972613": "Sarcinodes yaeyamana", + "1972614": "Sarcinodes carnearia", + "1972616": "Sarcinodes mongaku", + "1972620": "Sarcinodes aequilinearia", + "1972631": "Sarcinodes yeni", + "1972689": "Lychnosea", + "1972691": "Lychnosea intermicata", + "1972702": "Gastrina", + "1972707": "Chrysocraspeda", + "1972754": "Chrysocraspeda sanguinea", + "1972791": "Declana", + "1972797": "Declana leptomera", + "1972800": "Declana floccosa", + "1972806": "Declana niveata", + "1972822": "Berta", + "1972901": "Cyneoterpna", + "1972903": "Cyneoterpna wilsoni", + "1972942": "Spargania magnoliata", + "1972997": "Cymatoplex", + "1973136": "Phaeoura", + "1973146": "Phaeoura mexicanaria", + "1973147": "Phaeoura quernaria", + "1973159": "Chlorosea", + "1973164": "Chlorosea banksaria", + "1973165": "Chlorosea margaretaria", + "1973166": "Drepanogynis", + "1973171": "Drepanogynis mixtaria", + "1973239": "Cyclothea", + "1973242": "Cyclothea disjuncta", + "1973243": "Glaucina", + "1973245": "Glaucina erroraria", + "1973295": "Heliothea", + "1973300": "Heliothea discoidaria", + "1973321": "Adactylotis", + "1973323": "Adactylotis gesticularia", + "1973327": "Adactylotis contaminaria", + "1973331": "Garaeus", + "1973338": "Garaeus specularis", + "1973358": "Garaeus apicata", + "1973392": "Heteralex", + "1973393": "Heteralex unilinea", + "1973397": "Heteralex aspersa", + "1973405": "Bupalus", + "1973414": "Bupalus piniaria", + "1973458": "Pterophorus divisata", + "1973466": "Pterophorus subaequaria", + "1973467": "Pterophorus chlorosata", + "1973483": "Mesothea", + "1973487": "Mesothea incertata", + "1973488": "Eucaterva", + "1973493": "Eucaterva variaria", + "1973530": "Laciniodes umbrosus", + "1973578": "Oospila", + "1973665": "Oospila venezuelata", + "1973718": "Larophylla", + "1973719": "Larophylla amimeta", + "1973722": "Itame", + "1973909": "Idaea", + "1975155": "Petelia", + "1975164": "Petelia medardaria", + "1975197": "Larerannis", + "1975198": "Larerannis orthogrammaria", + "1975208": "Idiodes", + "1975212": "Idiodes apicata", + "1975248": "Idiodes siculoides", + "1975249": "Idiodes rhacodes", + "1975278": "Maxates", + "1975285": "Neagathia", + "1975287": "Neagathia corruptata", + "1975292": "Trichopteryx", + "1975336": "Pareulype", + "1975341": "Pareulype berberata", + "1975361": "Tornos", + "1975365": "Tornos scolopacinaria", + "1975464": "Dasyboarmia", + "1975542": "Epione", + "1975546": "Epione repandaria", + "1975553": "Epione vespertaria", + "1975570": "Anticollix", + "1975571": "Anticollix sparsata", + "1975577": "Heterophleps", + "1975583": "Heterophleps taiwana", + "1975597": "Heterophleps variegata", + "1975607": "Heterophleps triguttaria", + "1975703": "Gonodontis", + "1975704": "Gonodontis orthotoma", + "1975711": "Gonodontis pallida", + "1975714": "Chrysochloroma", + "1975722": "Chrysochloroma megaloptera", + "1975729": "Archiearis", + "1975733": "Archiearis parthenias", + "1975741": "Archiearis infans", + "1975783": "Anticlea", + "1975793": "Anticlea derivata", + "1975804": "Xandrames", + "1975805": "Xandrames dholaria", + "1975806": "Xandrames latiferaria", + "1975885": "Biston", + "1975892": "Biston regalis", + "1975897": "Biston betularia", + "1975903": "Biston strataria", + "1975914": "Biston sinuata", + "1975964": "Biston marginata", + "1975979": "Biston robustum", + "1976058": "Erastria", + "1976073": "Erastria decrepitaria", + "1976118": "Rhinodia", + "1976123": "Rhinodia rostraria", + "1976141": "Authaemon", + "1976142": "Authaemon stenonipha", + "1976155": "Electrophaes", + "1976163": "Electrophaes corylata", + "1976211": "Corymica", + "1976212": "Corymica arnearia", + "1976213": "Corymica pryeri", + "1976224": "Corymica spatiosa", + "1976228": "Corymica deducta", + "1976240": "Planolocha", + "1976243": "Planolocha autoptis", + "1976245": "Lytrosis", + "1976248": "Lytrosis unitaria", + "1976250": "Xanthyris", + "1976255": "Xanthyris flaveolata", + "1976296": "Racotis", + "1976303": "Racotis maculata", + "1976311": "Racotis boarmiaria", + "1976321": "Plataea", + "1976333": "Plataea trilinearia", + "1976338": "Capusa", + "1976341": "Capusa cuculloides", + "1976342": "Capusa senilis", + "1976344": "Lyelliana", + "1976345": "Lyelliana dryophila", + "1976460": "Dindica", + "1976462": "Dindica taiwana", + "1976463": "Dindica kishidai", + "1976469": "Dindica polyphaenaria", + "1976470": "Dindica purpurata", + "1976483": "Dindica wilemani", + "1976496": "Polyacme", + "1976515": "Lycia", + "1976638": "Oxydia", + "1976651": "Oxydia vesulia", + "1976746": "Oxydia trychiata", + "1976854": "Anthometra", + "1976884": "Eccymatoge", + "1976890": "Eccymatoge callizona", + "1976891": "Eccymatoge morphna", + "1976925": "Heterostegania", + "1976928": "Heterostegania lunulosa", + "1976930": "Austrocidaria", + "1976933": "Austrocidaria bipartita", + "1976934": "Austrocidaria gobiata", + "1976939": "Austrocidaria callichlora", + "1976941": "Austrocidaria similata", + "1976949": "Rheumaptera", + "1976993": "Rheumaptera cervinalis", + "1977003": "Rheumaptera undulata", + "1977007": "Rheumaptera subhastata", + "1977054": "Rheumaptera prunivorata", + "1977068": "Rheumaptera hastata", + "1977104": "Venusia", + "1977179": "Thinopteryx", + "1977182": "Thinopteryx nebulosa", + "1977184": "Thinopteryx crocoptera", + "1977295": "Telenomeuta", + "1977297": "Telenomeuta punctimarginaria", + "1977298": "Sardocyrnia", + "1977300": "Sardocyrnia fortunaria", + "1977323": "Paradromulia", + "1977350": "Paradromulia ambigua", + "1977351": "Euchlaena", + "1977402": "Entomopteryx", + "1977419": "Cleora", + "1977757": "Tatosoma", + "1977759": "Tatosoma tipulata", + "1977764": "Tatosoma lestevata", + "1977767": "Tatosoma topea", + "1977773": "Tatosoma agrionata", + "1977775": "Theria", + "1977811": "Luxiaria", + "1977813": "Luxiaria emphatica", + "1977833": "Luxiaria amasa", + "1977863": "Luxiaria mitorrhaphes", + "1977864": "Hammaptera", + "1977960": "Therapis", + "1977962": "Therapis flavicaria", + "1977963": "Cataclysme", + "1977967": "Cataclysme riguata", + "1977971": "Cataclysme uniformata", + "1977986": "Heterarmia", + "1978010": "Heterarmia diorthogonia", + "1978014": "Chlorerythra", + "1978017": "Chlorerythra rubriplaga", + "1978019": "Jodis", + "1978034": "Jodis argentilineata", + "1978045": "Jodis rantaizanensis", + "1978056": "Jodis putata", + "1978065": "Jodis lactearia", + "1978075": "Arhodia", + "1978082": "Arhodia lasiocamparia", + "1978112": "Pterapherapteryx", + "1978114": "Pterapherapteryx sexalata", + "1978197": "Eusarca confusaria", + "1978245": "Hagnagora", + "1978268": "Hagnagora vittata", + "1978273": "Ischalis", + "1978274": "Ischalis gallaria", + "1978281": "Ischalis fortinata", + "1978282": "Ischalis variabilis", + "1978283": "Ischalis nelsonaria", + "1978364": "Ecliptopera", + "1978375": "Ecliptopera capitata", + "1978385": "Ecliptopera rectilinea", + "1978398": "Ecliptopera benigna", + "1978405": "Ecliptopera delecta", + "1978407": "Ecliptopera recordans", + "1978422": "Ecliptopera umbrosaria", + "1978424": "Ecliptopera muscicolor", + "1978445": "Ecliptopera silaceata", + "1978451": "Heterothera", + "1978455": "Leuciris", + "1978464": "Leuciris fimbriaria", + "1978481": "Trichodezia", + "1978493": "Trichodezia albovittata", + "1978494": "Trichodezia californiata", + "1978495": "Leptomiza", + "1978499": "Leptomiza calcearia", + "1978506": "Hypomecis", + "1978524": "Hypomecis transcissa", + "1978526": "Hypomecis umbrosaria", + "1978529": "Hypomecis percnioides", + "1978607": "Elophos", + "1978643": "Patalene", + "1978671": "Patalene olyzonaria", + "1978697": "Hastina", + "1978732": "Doratoptera", + "1978736": "Oar", + "1978749": "Campaea", + "1978751": "Campaea perlata", + "1978770": "Campaea honoraria", + "1978776": "Campaea margaritaria", + "1978784": "Dischidesia", + "1978789": "Dischidesia cinerea", + "1978814": "Deileptenia", + "1978821": "Deileptenia ribeata", + "1978835": "Chlorochlamys", + "1978893": "Casbia", + "1978904": "Casbia farinalis", + "1978915": "Casbia tanaoctena", + "1978919": "Casbia celidosema", + "1978937": "Casbia rectaria", + "1978948": "Pantherodes", + "1978958": "Pantherodes pardalaria", + "1978959": "Pantherodes unciaria", + "1978974": "Carsia", + "1978977": "Carsia sororiata", + "1978994": "Calletaera", + "1978996": "Calletaera basipuncta", + "1978999": "Calletaera subexpressa", + "1979019": "Phthonoloba", + "1979021": "Phthonoloba viridifasciata", + "1979040": "Palleopa", + "1979041": "Palleopa innotata", + "1979106": "Pelurga", + "1979213": "Loxaspilates", + "1979222": "Loxaspilates arrizanaria", + "1979229": "Loxaspilates montuosa", + "1979243": "Hydriomena", + "1979255": "Hydriomena renunciata", + "1979289": "Hydriomena perfracta", + "1979308": "Hydriomena impluviata", + "1979344": "Hydriomena speciosata", + "1979358": "Hydriomena manzanita", + "1979380": "Hydriomena albifasciata", + "1979427": "Hydriomena nubilofasciata", + "1979430": "Hydriomena ruberata", + "1979473": "Hydriomena furcata", + "1979475": "Hydriomena transfigurata", + "1979501": "Hydriomena irata", + "1979517": "Pareumelea", + "1979521": "Pareumelea eugeniata", + "1979554": "Lobogonia", + "1979561": "Lobogonia formosana", + "1979562": "Lobogonia aculeata", + "1979719": "Paleacrita", + "1979721": "Paleacrita merriccata", + "1979726": "Paleacrita vernata", + "1979727": "Arichanna", + "1979758": "Arichanna pryeraria", + "1979781": "Arichanna melanaria", + "1979787": "Arichanna marginata", + "1979801": "Arichanna picaria", + "1979806": "Arichanna refracta", + "1979822": "Arichanna fumigata", + "1980021": "Gabriola", + "1980025": "Gabriola dyari", + "1980033": "Poecilasthena", + "1980035": "Poecilasthena thalassias", + "1980041": "Poecilasthena anthodes", + "1980044": "Poecilasthena scoliota", + "1980055": "Poecilasthena schistaria", + "1980063": "Poecilasthena pulchraria", + "1980068": "Poecilasthena subpurpureata", + "1980239": "Dichorda", + "1980245": "Dichorda illustraria", + "1980247": "Dichorda rectaria", + "1980250": "Dichorda iridaria", + "1980263": "Agaraeus", + "1980269": "Agaraeus discolor", + "1980288": "Eubarnesia", + "1980290": "Eubarnesia ritaria", + "1980342": "Thera", + "1980462": "Chloraspilates bicoloraria", + "1980490": "Heliomystis", + "1980491": "Heliomystis electrica", + "1980504": "Orthofidonia", + "1980505": "Orthofidonia flavivenata", + "1980509": "Orthofidonia tinctaria", + "1980511": "Ascotis", + "1980521": "Ascotis selenaria", + "1980525": "Ascotis fortunata", + "1980532": "Ascotis selenaria", + "1980533": "Ascotis reciprocaria", + "1980556": "Aethaloida", + "1980559": "Aethaloida packardaria", + "1980650": "Myrioblephara", + "1980659": "Myrioblephara desumpta", + "1980694": "Myrioblephara simplaria", + "1980718": "Ectropis", + "1980811": "Ectropis excellens", + "1980821": "Ectropis bispinaria", + "1980827": "Ectropis bhurmitra", + "1980917": "Ectropis arizanensis", + "1981051": "Pareclipsis", + "1981063": "Pareclipsis umbrata", + "1981142": "Nemoria", + "1981144": "Nemoria darwiniata", + "1981160": "Nemoria lixaria", + "1981161": "Nemoria saturiba", + "1981162": "Nemoria bifilata", + "1981191": "Nemoria leptalea", + "1981202": "Nemoria mimosaria", + "1981209": "Nemoria pulcherrima", + "1981210": "Nemoria zygotaria", + "1981222": "Nemoria rubrifrontaria", + "1981252": "Nemoria astraea", + "1981258": "Nemoria unitaria", + "1981277": "Nemoria bistriaria", + "1981280": "Nemoria glaucomarginaria", + "1981281": "Nemoria pistaciaria", + "1981284": "Nemoria elfa", + "1981312": "Nemoria obliqua", + "1981325": "Hirasa", + "1981357": "Hirasa taiwana", + "1981449": "Atopophysa", + "1981457": "Atopophysa opulens", + "1981690": "Minoa", + "1981696": "Minoa murinata", + "1981717": "Dichordophora", + "1981718": "Dichordophora phoenix", + "1981744": "Evecliptopera", + "1981778": "Malacodea", + "1981855": "Obeidia", + "1981933": "Ninodes", + "1981937": "Ninodes watanabei", + "1981938": "Ninodes splendens", + "1981941": "Chloropteryx", + "1981951": "Chloropteryx nordicaria", + "1981959": "Chloropteryx tepperaria", + "1981973": "Chloropteryx opalaria", + "1981987": "Eutrapela", + "1981996": "Synopsia", + "1981998": "Synopsia sociaria", + "1982006": "Apithecia", + "1982007": "Apithecia viridata", + "1982017": "Dichromodes", + "1982024": "Dichromodes stilbiata", + "1982033": "Dichromodes anelictis", + "1982043": "Dichromodes usurpatrix", + "1982047": "Dichromodes consignata", + "1982055": "Dichromodes confluaria", + "1982071": "Dichromodes estigmaria", + "1982072": "Dichromodes poecilotis", + "1982085": "Dichromodes ainaria", + "1982100": "Dichromodes disputata", + "1982102": "Dichromodes atrosignata", + "1982103": "Dichromodes mesogonia", + "1982120": "Dichromodes indicataria", + "1982147": "Mictodoca", + "1982148": "Mictodoca toxeuta", + "1982199": "Pingasa", + "1982203": "Pingasa secreta", + "1982221": "Pingasa chlora", + "1982267": "Pingasa ruginaria", + "1982289": "Monocerotesa", + "1982291": "Monocerotesa virgata", + "1982367": "Eupithecia", + "1982406": "Eupithecia lariciata", + "1982447": "Eupithecia unicolor", + "1982458": "Eupithecia laquaearia", + "1982500": "Eupithecia icterata", + "1982525": "Eupithecia subumbrata", + "1982529": "Eupithecia lanceata", + "1982533": "Eupithecia cretaceata", + "1982541": "Eupithecia pusillata", + "1982542": "Eupithecia vulgata", + "1982592": "Eupithecia pimpinellata", + "1982613": "Eupithecia miserulata", + "1982636": "Eupithecia tantillaria", + "1982671": "Eupithecia virgaureata", + "1982746": "Eupithecia assimilata", + "1982770": "Eupithecia millefoliata", + "1982779": "Eupithecia pantellata", + "1982780": "Eupithecia interruptofasciata", + "1982790": "Eupithecia semigraphata", + "1982791": "Eupithecia conterminata", + "1982824": "Eupithecia palpata", + "1982838": "Eupithecia haworthiata", + "1982865": "Eupithecia melanolopha", + "1982867": "Eupithecia selinata", + "1982885": "Eupithecia succenturiata", + "1982898": "Eupithecia jejunata", + "1982918": "Eupithecia oxycedrata", + "1982924": "Eupithecia ericeata", + "1982951": "Eupithecia columbiata", + "1983000": "Eupithecia pulchellata", + "1983034": "Eupithecia gratiosata", + "1983039": "Eupithecia scopariata", + "1983052": "Eupithecia venosata", + "1983062": "Eupithecia orana", + "1983101": "Eupithecia cocciferata", + "1983111": "Eupithecia egenaria", + "1983170": "Eupithecia inturbata", + "1983260": "Eupithecia subfuscata", + "1983263": "Eupithecia graefii", + "1983288": "Eupithecia intricata", + "1983387": "Eupithecia insigniata", + "1983393": "Eupithecia unedonata", + "1983434": "Eupithecia subapicata", + "1983441": "Eupithecia satyrata", + "1983442": "Eupithecia dodoneata", + "1983491": "Eupithecia longidens", + "1983525": "Eupithecia centaureata", + "1983528": "Eupithecia ultimaria", + "1983548": "Eupithecia innotata", + "1983558": "Eupithecia plumbeolata", + "1983648": "Eupithecia linariata", + "1983705": "Eupithecia tripunctaria", + "1983709": "Eupithecia acutipennis", + "1983755": "Eupithecia indigata", + "1983756": "Eupithecia pauxillaria", + "1983799": "Eupithecia rotundopuncta", + "1983888": "Eupithecia phoeniceata", + "1983896": "Eupithecia absinthiata", + "1983922": "Eupithecia sinuosaria", + "1983967": "Eupithecia impurata", + "1983997": "Eupithecia abietaria", + "1983999": "Eupithecia simpliciata", + "1984033": "Eupithecia breviculata", + "1984073": "Eupithecia zelmira", + "1984110": "Eupithecia bolterii", + "1984117": "Eupithecia abbreviata", + "1984142": "Iridopsis", + "1984231": "Pero", + "1984651": "Protitame", + "1984654": "Protitame virginalis", + "1984667": "Heterolocha", + "1984731": "Odezia", + "1984734": "Odezia atrata", + "1984741": "Dysphania", + "1984909": "Fisera", + "1984913": "Fisera eribola", + "1984922": "Aplocera", + "1984942": "Aplocera plagiata", + "1984949": "Aplocera praeformata", + "1984954": "Aplocera efformata", + "1985058": "Pylargosceles", + "1985061": "Pylargosceles steganioides", + "1985146": "Agathia", + "1985152": "Agathia laetata", + "1985158": "Agathia carissima", + "1985167": "Agathia lycaenaria", + "1985181": "Agathia pisina", + "1985191": "Agathia visenda", + "1985192": "Agathia hemithearia", + "1985228": "Agathia prasinaspis", + "1985230": "Agathia magnificentia", + "1985258": "Pholodes", + "1985267": "Pholodes sinistraria", + "1985404": "Drepanulatrix", + "1985405": "Drepanulatrix monicaria", + "1985406": "Drepanulatrix bifilata", + "1985409": "Drepanulatrix quadraria", + "1985421": "Drepanulatrix carnearia", + "1985423": "Drepanulatrix falcataria", + "1985484": "Himeromima", + "1985485": "Himeromima aulis", + "1985486": "Dasyfidonia", + "1985487": "Dasyfidonia avuncularia", + "1985489": "Austroterpna", + "1985490": "Austroterpna paratorna", + "1985492": "Emmiltis", + "1985507": "Cleorodes", + "1985522": "Cleorodes lichenaria", + "1985570": "Dasycorsa", + "1985573": "Dasycorsa modesta", + "1985578": "Epimecis", + "1985628": "Rhodochlora", + "1985647": "Rhodochlora brunneipalpis", + "1985702": "Metabraxas", + "1985707": "Metabraxas rubrotincta", + "1985716": "Argyrocosma", + "1985728": "Glossotrophia", + "1985734": "Glossotrophia rufomixtaria", + "1985742": "Glossotrophia asellaria", + "1985760": "Glossotrophia confinaria", + "1985787": "Hypodoxa", + "1985809": "Hypodoxa bryophylla", + "1985816": "Hypodoxa emiliaria", + "1985826": "Hypodoxa muscosaria", + "1985925": "Blepharoctenucha", + "1985926": "Blepharoctenucha virescens", + "1985928": "Zeuctophlebia", + "1985931": "Zeuctophlebia squalidata", + "1985934": "Eubaphe", + "1985945": "Eubaphe mendica", + "1985952": "Eubaphe unicolor", + "1985956": "Eubaphe meridiana", + "1985969": "Lomographa", + "1985993": "Lomographa anoxys", + "1986004": "Lomographa vestaliata", + "1986009": "Lomographa claripennis", + "1986020": "Lomographa glomeraria", + "1986032": "Lomographa platyleucata", + "1986040": "Lomographa semiclarata", + "1986052": "Lomographa bimaculata", + "1986054": "Lomographa inamata", + "1986056": "Lomographa temerata", + "1986061": "Lomographa margarita", + "1986081": "Xanthorhoe", + "1986091": "Xanthorhoe lacustrata", + "1986101": "Xanthorhoe occulta", + "1986113": "Xanthorhoe labradorensis", + "1986157": "Xanthorhoe fluctuata", + "1986166": "Xanthorhoe spadicearia", + "1986171": "Xanthorhoe ferrugata", + "1986191": "Xanthorhoe annotinata", + "1986192": "Xanthorhoe defensaria", + "1986220": "Xanthorhoe montanata", + "1986223": "Xanthorhoe anaspila", + "1986367": "Xanthorhoe decoloraria", + "1986452": "Xanthorhoe biriviata", + "1986497": "Xanthorhoe packardata", + "1986508": "Xanthorhoe saturata", + "1986522": "Xanthorhoe quadrifasiata", + "1986575": "Xanthorhoe designata", + "1986604": "Xanthorhoe iberica", + "1986623": "Xanthorhoe abrasaria", + "1986645": "Sauris", + "1986650": "Sauris malaca", + "1986693": "Sauris lichenias", + "1986720": "Sauris melanosterna", + "1986772": "Catoria", + "1986774": "Catoria camelaria", + "1986779": "Catoria sublavaria", + "1986787": "Catoria olivescens", + "1986805": "Eudrepanulatrix", + "1986807": "Eudrepanulatrix rectifascia", + "1986845": "Niceteria", + "1986846": "Niceteria macrocosma", + "1986868": "Ecleora", + "1986877": "Ecleora solieraria", + "1986905": "Neuromelia", + "1986906": "Neuromelia selectata", + "1986930": "Abaciscus", + "1986936": "Abaciscus tristis", + "1986939": "Crypsiphona", + "1986942": "Crypsiphona ocultaria", + "1986953": "Eustroma", + "1986997": "Cladara", + "1986998": "Cladara atroliturata", + "1987067": "Cymatophora", + "1987141": "Thallophaga", + "1987145": "Thallophaga taylorata", + "1987146": "Thallophaga hyperborea", + "1987202": "Ziridava", + "1987203": "Ziridava xylinaria", + "1987204": "Ziridava kanshireiensis", + "1987269": "Cidaria", + "1987300": "Glenoides", + "1987301": "Glenoides texanaria", + "1987326": "Smicropus", + "1987330": "Smicropus laeta", + "1987346": "Fascellina", + "1987362": "Fascellina plagiata", + "1987377": "Fascellina chromataria", + "1987509": "Pseudoterpna", + "1987527": "Pseudoterpna pruinata", + "1987555": "Isturgia", + "1987578": "Isturgia limbaria", + "1987602": "Heterorachis devocata", + "1987626": "Metallaxis", + "1987629": "Metallaxis semiustus", + "1987632": "Sericosema", + "1987633": "Sericosema juturnaria", + "1987645": "Chemerina", + "1987650": "Chemerina caliginearia", + "1987660": "Megabiston", + "1987665": "Megabiston plumosaria", + "1987711": "Asthena", + "1987737": "Asthena anseraria", + "1987740": "Asthena undulata", + "1987744": "Asthena albulata", + "1987746": "Comostola", + "1987747": "Comostola leucomerata", + "1987766": "Comostola cedilla", + "1987767": "Comostola meritaria", + "1987775": "Comostola laesaria", + "1987776": "Comostola subtiliaria", + "1987785": "Comostola nereidaria", + "1987786": "Comostola enodata", + "1987787": "Comostola ocellulata", + "1987792": "Costaconvexa", + "1987820": "Oenochroma", + "1987849": "Asaphodes", + "1987855": "Asaphodes abrogata", + "1987861": "Xerodes", + "1987995": "Menophra", + "1988002": "Menophra taiwana", + "1988007": "Menophra nycthemeraria", + "1988019": "Menophra japygiaria", + "1988064": "Menophra abruptaria", + "1988224": "Tyloptera", + "1988225": "Tyloptera bella", + "1988251": "Zythos", + "1988257": "Zythos avellanea", + "1988282": "Tympanota", + "1988302": "Tympanota perophora", + "1988304": "Dilophodes", + "1988306": "Dilophodes elegans", + "1988350": "Chlorocoma", + "1988354": "Chlorocoma dichloraria", + "1988360": "Chlorocoma melocrossa", + "1988361": "Chlorocoma assimilis", + "1988362": "Chlorocoma cadmaria", + "1988370": "Chlorocoma tachypora", + "1988376": "Chlorocoma carenaria", + "1988382": "Chlorocoma stereota", + "1988384": "Chlorocoma vertumnaria", + "1988388": "Calamodes", + "1988390": "Calamodes occitanaria", + "1988399": "Derambila", + "1988420": "Derambila dentifera", + "1988485": "Lipomelia", + "1988487": "Lipomelia subusta", + "1988488": "Eufidonia", + "1988495": "Eufidonia notataria", + "1988503": "Coenocalpe", + "1988506": "Coenocalpe millierata", + "1988533": "Colostygia", + "1988593": "Colostygia pectinataria", + "1988602": "Colostygia multistrigaria", + "1988642": "Colostygia turbata", + "1988684": "Colostygia olivata", + "1988760": "Onychora", + "1988762": "Onychora agaritharia", + "1988779": "Lomaspilis", + "1988815": "Euphronarcha", + "1988820": "Euphronarcha luxaria", + "1988876": "Euchoeca", + "1988881": "Euchoeca nebulata", + "1988887": "Rikiosatoa", + "1988893": "Epicyme", + "1988894": "Epicyme rubropunctaria", + "1989045": "Stenoporpia", + "1989083": "Stenoporpia pulmonaria", + "1989084": "Stenoporpia excelsaria", + "1989161": "Chloroclystis", + "1989170": "Chloroclystis metallospora", + "1989181": "Chloroclystis catastreptes", + "1989282": "Chloroclystis insigillata", + "1989283": "Chloroclystis approximata", + "1989355": "Chloroclystis rubroviridis", + "1989377": "Chloroclystis filata", + "1989393": "Chloroclystis blanda", + "1989428": "Chloroclystis v-ata", + "1989522": "Chloroclystis mniochroa", + "1989538": "Chloroclystis pyrrholopha", + "1989580": "Nepheloleuca", + "1989582": "Nepheloleuca politia", + "1989594": "Rhoptria asperaria", + "1989902": "Ceratodalia", + "1989903": "Ceratodalia gueneata", + "1989927": "Heterostegane", + "1989942": "Heterostegane subtessellata", + "1989996": "Odontopera", + "1990043": "Odontopera bilinearia", + "1990050": "Odontopera arida", + "1990066": "Odontopera bidentata", + "1990088": "Odontopera albiguttulata", + "1990105": "Odontopera insulata", + "1990136": "Aethalura", + "1990150": "Aethalura punctulata", + "1990155": "Aethalura intertexta", + "1990163": "Thalaina", + "1990164": "Thalaina angulosa", + "1990165": "Thalaina inscripta", + "1990167": "Thalaina selenaea", + "1990178": "Thalaina clara", + "1990193": "Neoterpes", + "1990198": "Neoterpes trianguliferata", + "1990200": "Neoterpes edwardsata", + "1990247": "Psilosticha", + "1990255": "Psilosticha absorpta", + "1990256": "Psilosticha attacta", + "1990257": "Lobocleta", + "1990270": "Lobocleta plemyraria", + "1990331": "Lobocleta peralbata", + "1990335": "Lobocleta ossularia", + "1990356": "Archirhoe", + "1990357": "Archirhoe neomexicana", + "1990367": "Ciampa", + "1990371": "Ciampa arietaria", + "1990531": "Crocallis", + "1990533": "Crocallis dardoinaria", + "1990551": "Crocallis elinguaria", + "1990582": "Crocallis tusciaria", + "1990591": "Sphacelodes", + "1990594": "Sphacelodes vulneraria", + "1990677": "Aplasta", + "1990989": "Thyrinteina", + "1990998": "Thyrinteina arnobia", + "1991004": "Nematocampa", + "1991012": "Nematocampa resistaria", + "1991120": "Palpoctenidia", + "1991123": "Palpoctenidia phoenicosoma", + "1991135": "Hemistola", + "1991179": "Hemistola chrysoprasaria", + "1991234": "Hyperythra", + "1991276": "Esakiopteryx", + "1991277": "Esakiopteryx volitans", + "1991279": "Metarranthis", + "1991280": "Metarranthis indeclinata", + "1991281": "Metarranthis amyrisaria", + "1991289": "Metarranthis angularia", + "1991294": "Metarranthis homuraria", + "1991295": "Metarranthis refractaria", + "1991298": "Metarranthis obfirmaria", + "1991299": "Metarranthis duaria", + "1991303": "Metarranthis hypochraria", + "1991309": "Oenospila", + "1991310": "Oenospila flavifusata", + "1991325": "Metanema", + "1991357": "Hemithea", + "1991371": "Hemithea aestivaria", + "1991378": "Hemithea tritonaria", + "1991394": "Hemithea wuka", + "1991401": "Cyllopoda", + "1991405": "Cyllopoda claudicula", + "1991410": "Cyllopoda bipuncta", + "1991426": "Haematopis", + "1991429": "Haematopis grataria", + "1991462": "Idiochlora minuscula", + "1991466": "Idiochlora ussuriaria", + "1991467": "Chlorodes", + "1991468": "Chlorodes boisduvalaria", + "1991531": "Almeria", + "1991532": "Almeria kalischata", + "1991777": "Naxa", + "1991779": "Naxa textilis", + "1991783": "Naxa seriaria", + "1991817": "Stegania", + "1991843": "Hospitalia", + "1991846": "Hospitalia flavolineata", + "1991934": "Chorodna", + "1991945": "Chorodna ochreimacula", + "1991946": "Gymnoscelis", + "1992066": "Gymnoscelis rufifasciata", + "1992166": "Phrissogonus", + "1992167": "Phrissogonus laticostata", + "1992168": "Pterospoda", + "1992172": "Pterospoda nigrescens", + "1992205": "Macrosoma", + "1992267": "Hyblaea", + "1992268": "Hyblaea ibidias", + "1992277": "Hyblaea firmamentum", + "1992283": "Hyblaea constellata", + "1992301": "Hyblaea synaema", + "1992315": "Hyblaea puera", + "1992378": "Alucita huebneri", + "1992434": "Alucita phricodes", + "1992489": "Alucita pygmaea", + "1992504": "Alucita hexadactyla", + "1992537": "Homadaula", + "1992547": "Homadaula anisocentra", + "1992572": "Pseudothyris", + "1992573": "Pseudothyris sepulchralis", + "1992586": "Banisia", + "1992634": "Banisia myrsusalis", + "1992729": "Hexeris", + "1992732": "Kanshizeia", + "1992817": "Dysodia oculatana", + "1992877": "Canaea", + "1992883": "Canaea ryukyuensis", + "1992889": "Canaea hyalospila", + "1992906": "Aglaopus", + "1992907": "Aglaopus centiginosa", + "1992936": "Aglaopus pyrrhata", + "1992938": "Aglaopus loxomita", + "1992944": "Arniocera", + "1992956": "Arniocera erythropyga", + "1992969": "Arniocera auriguttata", + "1992973": "Herimba", + "1992975": "Morova", + "1992976": "Morova subfasciata", + "1993011": "Addaea", + "1993021": "Addaea subtessellata", + "1993034": "Pyrinioides", + "1993036": "Pyrinioides sinuosa", + "1993042": "Sonagara", + "1993043": "Sonagara strigipennis", + "1993044": "Oxycophina", + "1993045": "Oxycophina theorina", + "1993403": "Thyris", + "1993419": "Thyris fenestrella", + "1993451": "Striglina", + "1993496": "Striglina scitaria", + "1993564": "Hypolamprus", + "1993634": "Glanycus", + "1993637": "Glanycus insolitus", + "1993640": "Meskea", + "1993643": "Meskea dyspteraria", + "1994549": "Culama", + "2048233": "Dicranura", + "2080450": "Gerinia", + "2278098": "Triodia", + "3231212": "Erynnis", + "3255365": "Cycnus", + "3255832": "Plesiomorpha", + "3255940": "Manulea", + "3255943": "Barsine", + "3255956": "Rhyparia", + "3256113": "Numata", + "3256116": "Proxenus", + "3256119": "Xenoplia", + "3256169": "Patania", + "3256188": "Tebenna", + "3256294": "Macaria", + "3256322": "Agriopis", + "3256356": "Nebula", + "3256453": "Rhoptria", + "3256512": "Melinaea", + "3256568": "Denisia", + "3256584": "Endoxyla", + "3256657": "Arsacia", + "3256826": "Apatelodidae", + "3256934": "Polyploca", + "3256950": "Pharmacis", + "3257150": "Phigalia", + "3257152": "Cupido", + "3257220": "Catoptria", + "3257225": "Elophila", + "3257328": "Ypsolopha", + "3257351": "Talbotia", + "3257405": "Dasystoma", + "3257500": "Acanthophila", + "3257514": "Euchaetis", + "3257524": "Brunia", + "3257628": "Forsterinaria", + "3257649": "Penthesilea", + "3257662": "Ochrogaster", + "3257694": "Wittia", + "3257794": "Periphanes", + "3257798": "Macrochilo", + "3257809": "Erebus caprimulgus", + "3257836": "Megalographa", + "3257894": "Bryophila", + "3257930": "Zimmermannia", + "3258045": "Cleta", + "3258057": "Salvatgea", + "3258063": "Aglaomorpha", + "3258105": "Capys", + "3258127": "Diaphania", + "3258133": "Nepita", + "3258147": "Orthocraspeda", + "3261008": "Diaphora", + "3262002": "Tetragonus", + "3527": "Hyblaeidae", + "3528": "Incurvariidae", + "3529": "Lacturidae", + "3530": "Lasiocampidae", + "3531": "Lecithoceridae", + "3551": "Epipyropidae", + "3552": "Ethmiidae", + "3553": "Gelechiidae", + "3554": "Glyphipterigidae", + "3555": "Heliodinidae", + "3556": "Hepialidae", + "3558": "Heterogynidae", + "3563": "Endromidae", + "4299071": "Melanis pixe", + "4299095": "Doxocopa pavon", + "4299191": "Chlosyne damoetas", + "4299201": "Chlosyne eumeda", + "4299211": "Siproeta epaphus", + "4299213": "Siproeta stelenes", + "4299218": "Anthanassa texana", + "4299368": "Vanessa cardui", + "4299370": "Vanessa virginiensis", + "4299535": "Boloria eunomia", + "4299565": "Boloria chariclea", + "4299576": "Boloria frigga", + "4299597": "Boloria titania", + "4299599": "Boloria freija", + "4299778": "Euptychia pertepida", + "4299802": "Lethe creola", + "4299804": "Lethe anthedon", + "4299870": "Papilio appalachiensis", + "4299871": "Papilio victorinus", + "4300000": "Celastrina lucia", + "4300011": "Celastrina neglectamajor", + "4300012": "Celastrina serotina", + "4300259": "Udara blackburni", + "4300267": "Strephonota", + "4300268": "Strephonota tephraeus", + "4300277": "Callophrys mossii", + "4300363": "Callophrys muiri", + "4300384": "Strymon albata", + "4300393": "Strymon bazochii", + "4300399": "Strymon acis", + "4300406": "Rekoa palegon", + "4300486": "Ziegleria", + "4300662": "Xyloryctidae", + "4300664": "Autostichidae", + "4300668": "Peleopodidae", + "4301036": "Cosmopterix pulchrimella", + "4301044": "Acronicta oblinita", + "4301052": "Bellura densa", + "4301055": "Bellura obliqua", + "4301067": "Helotropha", + "4301068": "Helotropha reniformis", + "4301071": "Oligia bridghamii", + "4301081": "Oligia chlorostigma", + "4301098": "Ceramica", + "4301121": "Sunira", + "4301148": "Euxoa auxiliaris", + "4301238": "Lycophotia phyllophora", + "4301242": "Diarsia esurialis", + "4301249": "Diarsia rosaria", + "4301255": "Diarsia jucunda", + "4301281": "Parabagrotis", + "4301282": "Parabagrotis formalis", + "4301283": "Parabagrotis sulinaris", + "4301304": "Amyna natalis", + "4301305": "Feralia", + "4301306": "Feralia comstocki", + "4301307": "Feralia jocosa", + "4301308": "Targalla", + "4301309": "Targalla delatrix", + "4301310": "Hypena strigatus", + "4301312": "Homophoberia apicosa", + "4301340": "Diacrisia", + "4301348": "Paonias excaecata", + "4301355": "Panoquina errans", + "4301426": "Choranthus vitellius", + "4301744": "Copaeodes aurantiaca", + "4301749": "Copaeodes minima", + "4301876": "Antigonus emorsa", + "4301897": "Pholisora mejicanus", + "4301934": "Timochares ruptifasciata", + "4301942": "Grais stigmaticus", + "4301945": "Ephyriades brunnea", + "4302008": "Piruna polingii", + "4302101": "Thorybes confusis", + "4302199": "Archips semiferanus", + "4302202": "Archips argyrospila", + "4302220": "Anavitrinella", + "4302221": "Anavitrinella pampinaria", + "4302229": "Protoboarmia", + "4302230": "Protoboarmia porcelaria", + "4302240": "Besma quercivoraria", + "4302252": "Orthonama obstipata", + "4302268": "Spargania luctuata", + "4302274": "Cladara limitaria", + "4302289": "Epirrita", + "4302319": "Vaxi critica", + "4302333": "Microcrambus croesus", + "4302388": "Fulgoraecia exigua", + "4302389": "Dalcerides ingenita", + "4404325": "Odice", + "4404424": "Pennithera", + "4404729": "Nyctobrya", + "4404732": "Kuchleria", + "4404934": "Cauchas", + "4405001": "Kirinia", + "4405135": "Schinia", + "4405245": "Griposia", + "4405258": "Casilda", + "4405430": "Crypsedra", + "4405439": "Megaspilates", + "4405493": "Meganola", + "4405533": "Artimelia", + "4405981": "Canararctia", + "4405983": "Globia", + "4406051": "Acanthovalva", + "4406069": "Camptogramma", + "4406074": "Glacies", + "4406145": "Gillmeria", + "4406268": "Coranarta", + "4406291": "Coptotriche", + "4406298": "Paracolax", + "4406360": "Apterogenum", + "4406481": "Conogethes", + "4406516": "Gazoryctra", + "4406551": "Apochima", + "4406622": "Comibaena", + "4406889": "Hypercallia", + "4406931": "Hypatopa", + "4407138": "Stenolechiodes", + "4407165": "Longalatedes", + "4407218": "Resapamea", + "4407310": "Anorthoa", + "4407354": "Litoligia", + "4407363": "Faveria", + "4407476": "Dioszeghyana", + "4407554": "Honeyania", + "4407697": "Digrammia", + "4407786": "Boudinotiana", + "4408085": "Eurranthis", + "4408190": "Heterogenea", + "4408204": "Euplagia", + "4408275": "Minois", + "4522322": "Heterogenea asella", + "4522753": "Adscita statices", + "4522795": "Lampronia morosa", + "4522886": "Cauchas rufimitrella", + "4522890": "Cauchas rufifrontella", + "4522891": "Cauchas fibulella", + "4522896": "Cauchas leucocerella", + "4522911": "Nematopogon adansoniella", + "4522916": "Nematopogon swammerdamella", + "4522919": "Nematopogon robertella", + "4522922": "Nematopogon metaxella", + "4522933": "Incurvaria masculella", + "4522974": "Boudinotiana puella", + "4523461": "Casilda consecraria", + "4523486": "Kuchleria insignata", + "4523515": "Phaiogramma", + "4523519": "Phaiogramma faustinata", + "4523522": "Comibaena bajularia", + "4523556": "Epirrita christyi", + "4523560": "Epirrita autumnata", + "4523564": "Epirrita dilutata", + "4523707": "Triphosa tauteli", + "4523725": "Rheumaptera cervinalis", + "4523880": "Pasiphila debiliata", + "4523883": "Pasiphila chloerata", + "4523885": "Pasiphila rectangulata", + "4524052": "Pennithera ulicata", + "4524054": "Pennithera firmata", + "4524069": "Lampropteryx", + "4524070": "Lampropteryx otregiata", + "4524072": "Lampropteryx suffumata", + "4524221": "Costaconvexa polygrammata", + "4524223": "Costaconvexa centrostrigaria", + "4524320": "Scotopteryx angularia", + "4524376": "Camptogramma bilineata", + "4524393": "Phibalapteryx virgata", + "4524400": "Aleucis", + "4524403": "Aleucis distinctata", + "4524421": "Ennomos fuscantaria", + "4524424": "Ennomos quercaria", + "4524426": "Ennomos erosaria", + "4524513": "Menophra harterti", + "4524541": "Eurranthis plummistaria", + "4524568": "Tephronia oranaria", + "4524588": "Nychiodes notarioi", + "4524636": "Hypomecis roboraria", + "4524638": "Hypomecis punctinalis", + "4524712": "Apochima flabellaria", + "4524740": "Phigalia pilosaria", + "4524792": "Psodos", + "4524793": "Psodos quadrifaria", + "4524822": "Glacies coracina", + "4524890": "Elophos vittaria", + "4524902": "Elophos dilucidaria", + "4524913": "Charissa", + "4524914": "Charissa glaucinaria", + "4524922": "Charissa variegata", + "4524929": "Charissa mucidaria", + "4524951": "Charissa obscurata", + "4524955": "Charissa ambiguata", + "4524961": "Charissa predotae", + "4524962": "Charissa onustaria", + "4524998": "Megaspilates mundataria", + "4525034": "Acanthovalva inconspicuaria", + "4525068": "Heliomata glarearia", + "4525072": "Chiasmia", + "4525078": "Chiasmia clathrata", + "4525091": "Isturgia famula", + "4525093": "Isturgia spodiaria", + "4525097": "Isturgia catalaunaria", + "4525103": "Isturgia miniosaria", + "4525111": "Neognopharmia", + "4525132": "Pterophorus convergata", + "4525177": "Prochoreutis sehestediana", + "4525189": "Coptotriche marginea", + "4525266": "Eriogaster lanestris", + "4525268": "Eriogaster catax", + "4525270": "Eriogaster rimicola", + "4525273": "Eriogaster arbusculae", + "4525354": "Orthotelia sparganella", + "4525364": "Cedestis gysseleniella", + "4525369": "Yponomeuta cagnagellus", + "4525420": "Paraswammerdamia conspersella", + "4525425": "Paraswammerdamia albicapitella", + "4525436": "Praydidae", + "4525443": "Rhigognostis senilella", + "4525448": "Rhigognostis schmaltzella", + "4525465": "Argyresthiidae", + "4525476": "Argyresthia spinosella", + "4525487": "Argyresthia bonnetella", + "4525500": "Ypsolopha horridella", + "4525503": "Ypsolopha lucella", + "4525505": "Ypsolopha mucronella", + "4525510": "Ypsolopha parenthesella", + "4525530": "Ypsolopha nemorella", + "4525540": "Ypsolopha dentella", + "4525547": "Ypsolopha vittella", + "4525557": "Ypsolopha alpella", + "4525562": "Ypsolopha scabrella", + "4525607": "Korscheltellus", + "4525610": "Phymatopus hecta", + "4525641": "Acossus terebra", + "4525713": "Microsphecia", + "4525777": "Synanthedon myopaeformis", + "4525803": "Synanthedon stomoxiformis", + "4525846": "Bembecia uroceriformis", + "4525859": "Pyropteron chrysidiforme", + "4525884": "Pyropteron triannuliformis", + "4526048": "Narycia duplicella", + "4526050": "Diplodoma laichartingella", + "4526094": "Dahlica triquetrella", + "4527338": "Pseudopostega", + "4527339": "Pseudopostega crepusculella", + "4527342": "Pseudopostega auritella", + "4527355": "Cilix hispanica", + "4527533": "Stathmopodidae", + "4527903": "Pseudotelphusa paripunctella", + "4527957": "Stenolechiodes pseudogemmellus", + "4527972": "Altenia scriptella", + "4528100": "Phthorimaea absoluta", + "4528529": "Helcystogramma albinervis", + "4528539": "Brachmia blandella", + "4528547": "Dichomeris derasella", + "4528593": "Diurnea lipsiella", + "4528658": "Oecophora geoffrella", + "4528692": "Borkhausenia tinctella", + "4528694": "Borkhausenia unitella", + "4528702": "Tachystola acroxantha", + "4528813": "Mompha jurassicella", + "4528818": "Mompha langiella", + "4528997": "Lypusidae", + "4529032": "Hypercallia citrinalis", + "4529064": "Depressaria radiella", + "4529186": "Agonopterix alstromeriana", + "4529248": "Chrysoclista linneela", + "4529566": "Ethmia quadrillella", + "4529630": "Hypatopa binotella", + "4529738": "Anatrachyntis badia", + "4529834": "Phiaris", + "4529900": "Celypha aurofasciana", + "4529908": "Celypha rufana", + "4529915": "Celypha rurestrana", + "4529931": "Metendothenia atropunctana", + "4530002": "Cydia strobilella", + "4530138": "Bactra lancealana", + "4530151": "Notocelia cynosbatella", + "4530214": "Zeiraphera griseana", + "4530406": "Gypsonoma nitidulana", + "4530424": "Endothenia gentianaeana", + "4530608": "Clepsis peritana", + "4530632": "Periclepsis cinctana", + "4530947": "Asalebria geminella", + "4530951": "Asalebria florella", + "4531145": "Acrobasis suavella", + "4531147": "Acrobasis advenella", + "4531158": "Acrobasis marmorea", + "4531185": "Ectomyelois", + "4531237": "Sciota divisella", + "4531242": "Ortholepis betulae", + "4531246": "Dioryctria schuetzeella", + "4531264": "Sciota fumella", + "4531284": "Pempelia palumbella", + "4531365": "Hypotia infulalis", + "4531376": "Hypotia miegi", + "4531402": "Hypsopygia glaucinalis", + "4531409": "Hypsopygia incarnatalis", + "4531417": "Stemmatophora brunnealis", + "4531425": "Stemmatophora borgialis", + "4531427": "Bostra caesarealis", + "4531429": "Stemmatophora fuscolimbalis", + "4531506": "Agriphila geniculea", + "4531517": "Agriphila latistria", + "4531643": "Ancylolomia disparalis", + "4531670": "Angustalius malacellus", + "4531687": "Acentria ephemerella", + "4531690": "Nymphula nitidulata", + "4531708": "Donacaula forficella", + "4531713": "Metaxmeste schrankiana", + "4531968": "Calamochrous acutella", + "4531975": "Paratalanta hyalinalis", + "4532022": "Evergestis forficalis", + "4532024": "Evergestis isatidalis", + "4532050": "Udea hamalis", + "4532057": "Udea accolalis", + "4532088": "Udea decrepitalis", + "4532095": "Udea lutealis", + "4532097": "Udea nebulalis", + "4532122": "Cydalima perspectalis", + "4532125": "Conogethes punctiferalis", + "4532146": "Botyodes diniasalis", + "4532150": "Stenia bruguieralis", + "4532155": "Stenia aetnaealis", + "4532160": "Stenia punctalis", + "4532185": "Erebidae", + "4532203": "Eublemma ostrina", + "4532206": "Eublemma parva", + "4532208": "Eublemma baccalix", + "4532216": "Eublemma scitula", + "4532236": "Eublemma candidana", + "4532239": "Eublemma purpurina", + "4532253": "Eublemma minutata", + "4532260": "Eublemma polygramma", + "4532264": "Eublemma pura", + "4532266": "Eublemma cochylioides", + "4532269": "Honeyania ragusana", + "4532273": "Odice suava", + "4532283": "Odice jucunda", + "4532293": "Calliteara abietis", + "4532297": "Calliteara fascelina", + "4532351": "Hypena obesalis", + "4532352": "Hypena lividalis", + "4532357": "Hypena crassalis", + "4532366": "Zekelita antiqualis", + "4532395": "Lygephila procax", + "4532405": "Lygephila pastinum", + "4532408": "Lygephila viciae", + "4532412": "Lygephila craccae", + "4532453": "Pandesma robusta", + "4532461": "Catocala eutychea", + "4532471": "Catocala fulminea", + "4532473": "Catocala nymphaea", + "4532493": "Euclidia mi", + "4532500": "Pechipogo plumigeralis", + "4532508": "Zanclognatha lunalis", + "4532510": "Zanclognatha zelleralis", + "4532516": "Paracolax tristalis", + "4532532": "Euplagia quadripunctaria", + "4532534": "Callimorpha dominula", + "4532544": "Diacrisia sannio", + "4532549": "Canararctia rufescens", + "4532562": "Chelis", + "4532565": "Chelis maculosa", + "4532608": "Ocnogyna zoraida", + "4532614": "Artimelia latreillii", + "4532696": "Eucarta virgo", + "4532700": "Condica viscosa", + "4532811": "Nyctobrya muralis", + "4532886": "Deltote uncula", + "4532888": "Deltote deceptoria", + "4532890": "Deltote pygarga", + "4532908": "Thysanoplusia daubei", + "4532986": "Olivenebula xanthochloris", + "4533115": "Agrochola lychnidis", + "4533122": "Orbona", + "4533123": "Orbona fragariae", + "4533124": "Tiliacea", + "4533125": "Tiliacea sulphurago", + "4533128": "Tiliacea citrago", + "4533136": "Tiliacea aurago", + "4533202": "Apterogenum ypsillon", + "4533211": "Atethmia algirica", + "4533255": "Aporophyla canescens", + "4533273": "Griposia aprilina", + "4533285": "Polymixis lichenea", + "4533325": "Polymixis trisignata", + "4533344": "Mniotype occidentalis", + "4533345": "Mniotype solieri", + "4533347": "Mniotype adusta", + "4533360": "Mniotype satura", + "4533362": "Mniotype spinosa", + "4533431": "Diarsia brunnea", + "4533433": "Diarsia mendica", + "4533442": "Diarsia florida", + "4533444": "Diarsia dahlii", + "4533446": "Diarsia rubi", + "4533660": "Eugnorisma", + "4533661": "Eugnorisma depuncta", + "4533663": "Eugnorisma arenoflavida", + "4533671": "Eugnorisma glareosa", + "4533695": "Agrotis schawerdai", + "4533714": "Agrotis bigramma", + "4533720": "Agrotis catalaunensis", + "4533882": "Dichagyris candelisequa", + "4533924": "Dichagyris musiva", + "4533937": "Eucoptocnemis optabilis", + "4533952": "Lacanobia suasa", + "4533957": "Lasionycta calberlai", + "4534011": "Conisania luteago", + "4534017": "Conisania andalusica", + "4534038": "Coranarta cordigera", + "4534046": "Sideridis turbida", + "4534052": "Sideridis rivularis", + "4534057": "Sideridis reticulata", + "4534086": "Hadena filograna", + "4534162": "Anarta odontites", + "4534166": "Anarta trifolii", + "4534170": "Anarta pugnax", + "4534194": "Anarta sodae", + "4534198": "Anarta farnhami", + "4534207": "Ceramica pisi", + "4534225": "Lasionycta proxima", + "4534245": "Caradrina clavipalpis", + "4534250": "Caradrina rebeli", + "4534252": "Caradrina flavirena", + "4534257": "Caradrina selini", + "4534275": "Caradrina flava", + "4534290": "Hoplodrina octogenaria", + "4534299": "Charanyca ferruginea", + "4534360": "Dioszeghyana schmidtii", + "4534389": "Helotropha leucostigma", + "4534398": "Longalatedes elymi", + "4534405": "Denticucullus", + "4534408": "Denticucullus pygmina", + "4534456": "Lenisa", + "4534458": "Lenisa geminipuncta", + "4534463": "Celaena haworthii", + "4534485": "Apamea illyria", + "4534486": "Apamea lithoxylaea", + "4534525": "Phragmatiphila nexa", + "4534532": "Lateroligia", + "4534533": "Lateroligia ophiogramma", + "4534538": "Litoligia literosa", + "4534540": "Crypsedra gemmea", + "4534661": "Heliocheilus", + "4534663": "Schinia cardui", + "4534669": "Schinia cognata", + "4534675": "Heliothis nubigera", + "4534681": "Heliothis peltigera", + "4534683": "Heliothis incarnata", + "4534685": "Heliothis adaucta", + "4534686": "Heliothis viriplaca", + "4534691": "Amphipyra effusa", + "4534719": "Allophyes oxyacanthae", + "4534757": "Pardoxia graellsii", + "4534762": "Meganola strigula", + "4534766": "Meganola kolbi", + "4534767": "Meganola albula", + "4534769": "Meganola togatulalis", + "4534773": "Nola cicatricalis", + "4534776": "Nola harouni", + "4534778": "Nola subchlamydula", + "4534779": "Nola aerugula", + "4534782": "Nola confusalis", + "4534787": "Nola thymula", + "4534788": "Nola chlamitulalis", + "4534792": "Nola desmotes", + "4534796": "Garella nilotica", + "4534798": "Garella musculana", + "4534826": "Cerura iberica", + "4534869": "Euhampsonia cristata", + "4534872": "Ptilodon cucullina", + "4534909": "Notodonta ziczac", + "4534914": "Notodonta tritophus", + "4534947": "Euteliidae", + "4535092": "Pseudophilotes bavius", + "4535106": "Tarucus balkanica", + "4535162": "Turanana panagea", + "4535172": "Phengaris teleius", + "4535271": "Gonepteryx cleobule", + "4535280": "Euchloe eversi", + "4535285": "Euchloe hesperidum", + "4535307": "Pieris bryoniae", + "4535386": "Carcharodus baeticus", + "4535396": "Syrichtus proto", + "4535510": "Minois dryas", + "4535539": "Hipparchia tamadabae", + "4535581": "Satyrus persephone", + "4535592": "Pseudochazara hippolyte", + "4535596": "Pseudochazara anthelea", + "4535614": "Pararge achine", + "4535618": "Kirinia climene", + "4535620": "Kirinia roxelana", + "4535627": "Pararge paramegaera", + "4535630": "Pararge deidamia", + "4535632": "Pararge megera", + "4535636": "Pararge maera", + "4535689": "Proterebia afra", + "4535754": "Ypthima asterope", + "4535809": "Euphydryas aurinia", + "4535817": "Euphydryas maturna", + "4535819": "Euphydryas desfontainii", + "4535827": "Aglais io", + "4535884": "Bucculatrix bechsteinella", + "4535904": "Bucculatrix frangutella", + "4536292": "Platyptilia isodactylus", + "4536472": "Gillmeria pallidactyla", + "4536483": "Gillmeria ochrodactyla", + "4538": "Adelidae", + "4542": "Alucitidae", + "4547": "Anthelidae", + "4554": "Batrachedridae", + "4571921": "Enchoria", + "4572392": "Myrtartona", + "4572640": "Catapaecilma", + "4573369": "Pachyodes", + "4573720": "Catacometes", + "4574082": "Catabenoides", + "4575600": "Pilostibes", + "4575996": "Goboea", + "4576037": "Cryptoptila", + "4576177": "Thema", + "4577617": "Theila", + "4618976": "Mellea", + "4684017": "Axinoptera", + "4684087": "Tanaoctenia", + "4684088": "Symmoracma", + "4684145": "Thyraylia", + "4684219": "Maroga", + "4684220": "Maroga melanostigma", + "4684253": "Lophophleps", + "4684258": "Lipogya", + "4684330": "Stictane", + "4684520": "Scoliocheta", + "4684521": "Scoliocheta ergatis", + "4684590": "Prepocosma", + "4684591": "Prepocosma schalidota", + "4684781": "Psaroxantha", + "4684789": "Psaroxantha calligenes", + "4684879": "Prionocris", + "4684888": "Prionocris protoxantha", + "4684892": "Merocroca", + "4684893": "Merocroca automima", + "4684910": "Thymiatris cephalochra", + "4684924": "Eusemocosma", + "4684925": "Eusemocosma pruinosa", + "4684951": "Cosmaresta", + "4684958": "Cosmaresta anarrecta", + "4684986": "Cryptolechia schistopa", + "4685065": "Crepidosceles timalphes", + "4685097": "Acantholena siccella", + "4685116": "Piloprepes anassa", + "4685138": "Eulechria sigmophora", + "4685219": "Eulechria marmorata", + "4685271": "Eulechria basiplaga", + "4685299": "Epithymema incomposita", + "4685306": "Epithymema helias", + "4685431": "Hemibela callista", + "4685448": "Hemibela oxyptera", + "4685468": "Pilostibes stigmatias", + "4685485": "Epicurica laetiferanus", + "4685556": "Tymbophora", + "4685557": "Tymbophora peltastis", + "4685566": "Tachystola stenoptera", + "4685576": "Tachystola oxytora", + "4685588": "Agriophara velitata", + "4685595": "Agriophara discobola", + "4685628": "Ageletha", + "4685629": "Ageletha elaeodes", + "4685631": "Ageletha hemiteles", + "4685645": "Garrha atripunctatella", + "4685650": "Garrha repandula", + "4685653": "Garrha costimacula", + "4685655": "Garrha rufa", + "4685662": "Garrha phoenopis", + "4685669": "Garrha ocellifera", + "4685678": "Garrha pudica", + "4685683": "Garrha idiosema", + "4685777": "Syncometes", + "4685778": "Syncometes vilis", + "4685802": "Arignota stercorata", + "4685809": "Acmotoma", + "4685810": "Acmotoma magniferella", + "4685893": "Barea meridarcha", + "4685945": "Leistarcha", + "4685946": "Leistarcha scitissimella", + "4685972": "Lepidotarsa habrodelta", + "4685979": "Syringoseca", + "4685980": "Syringoseca rhodoxantha", + "4685981": "Syringoseca mimica", + "4686015": "Thema chlorochyta", + "4686016": "Thema protogramma", + "4686018": "Thema macroscia", + "4686022": "Thema peloxantha", + "4686027": "Thema stasiastica", + "4686029": "Thema psammoxantha", + "4686039": "Catacometes phanozona", + "4686042": "Philobota xanthastis", + "4686055": "Philobota mucida", + "4686111": "Philobota curvilinea", + "4686133": "Philobota cretacea", + "4686164": "Philobota thiocrossa", + "4686190": "Philobota baryptera", + "4686214": "Philobota transversella", + "4686264": "Philobota cirrhocephala", + "4686266": "Philobota philostaura", + "4686308": "Rectiostoma", + "4686350": "Scatochresis", + "4686355": "Scatochresis innumera", + "4686368": "Olbonoma triptycha", + "4686384": "Acanthodela", + "4686385": "Acanthodela erythrosema", + "4686386": "Acanthodela protophaes", + "4686483": "Antipterna trilicella", + "4686517": "Isomoralla", + "4686531": "Isomoralla gephyrota", + "4686532": "Isomoralla eriscota", + "4686617": "Heteroteucha distephana", + "4686620": "Heteroteucha anthodora", + "4686621": "Heteroteucha occidua", + "4686628": "Heteroteucha translatella", + "4686655": "Oligoloba", + "4686656": "Oligoloba severa", + "4686696": "Cirrograpta", + "4686697": "Cirrograpta sporadica", + "4686699": "Aeolothapsa", + "4686702": "Aeolothapsa malacella", + "4686743": "Palimmeces variegata", + "4686843": "Delexocha", + "4686844": "Delexocha ochrocausta", + "4686897": "Lichenaula onychodes", + "4686905": "Lichenaula onychotypa", + "4686907": "Lichenaula calligrapha", + "4686913": "Lichenaula arisema", + "4686955": "Pycnocera", + "4686956": "Pycnocera hypoxantha", + "4687068": "Katha", + "4687117": "Trotocraspeda", + "4687205": "Nacoleia", + "4687228": "Glaucocharis chrysochyta", + "4687250": "Haritalodes", + "4687253": "Metoeca", + "4687264": "Deuterarcha", + "4687288": "Trigonoorda gavisalis", + "4687385": "Mentaxya", + "4687388": "Neoligia", + "4687389": "Eudocima materna", + "4687398": "Aplotelia", + "4687438": "Coenotoca", + "4687494": "Dictyestra", + "4687531": "Bagada", + "4687545": "Tripudia", + "4687565": "Neumichtis nigerrima", + "4687661": "Acronicta psorallina", + "4687681": "Athetis thoracica", + "4687701": "Macaldenia", + "4687726": "Anterastria", + "4687791": "Microxyla", + "4687817": "Thalatha bryochlora", + "4687827": "Thalatha guttalis", + "4687851": "Enigmogramma", + "4687877": "Protodeltote", + "4687906": "Craniophora nodyna", + "4687930": "Cruria donowani", + "4687933": "Mocis frugalis", + "4687934": "Mocis alterna", + "4687935": "Mocis trifasciata", + "4687937": "Mataeomera", + "4687943": "Shargacucullia", + "4687984": "Niphonyx", + "4687991": "Anticarsia irrorata", + "4688049": "Proteuxoa sanguinipuncta", + "4688073": "Thoracolopha", + "4688075": "Proteuxoa florescens", + "4688092": "Proteuxoa hypochalchis", + "4688098": "Proteuxoa rubripuncta", + "4688136": "Cosmophila", + "4688142": "Heliothis punctifera", + "4688148": "Chloridea", + "4688166": "Condica aroana", + "4688169": "Condica dolorosa", + "4688172": "Condica illecta", + "4688298": "Striacosta", + "4688408": "Basistriga", + "4688465": "Sphingognatha", + "4688500": "Rapdalus", + "4688528": "Euclera", + "4688533": "Anydraula", + "4688624": "Demonarosa", + "4688641": "Metapercnia", + "4688690": "Rusicada", + "4688714": "Argentostiria", + "4688717": "Ardozyga", + "4688727": "Syntomoides", + "4688768": "Lineostriastiria", + "4688971": "Sesapa", + "4688975": "Periphoba", + "4689025": "Tristeirometa", + "4689059": "Mesoptila", + "4689117": "Paraspilarctia", + "4689138": "Olepa", + "4689300": "Mimaglossa", + "4689316": "Omichlis", + "4689394": "Myrtartona coronias", + "4689458": "Neoalbertia", + "4689527": "Stoermeriana", + "4689528": "Loscopia", + "4689548": "Mangina", + "4689585": "Epicallia", + "4689628": "Leptostales", + "4689644": "Carminda", + "4689667": "Glauconoe", + "4689708": "Cyme", + "4689751": "Echydna", + "4689790": "Elasmia", + "4689905": "Trapezites lutea", + "4689912": "Pasma tasmanicus", + "4689929": "Suastus gremius", + "4689963": "Toxidia rietmanni", + "4690079": "Iphiclides feisthamelii", + "4692485": "Papilio hermosanus", + "4692504": "Papilio epycides", + "4693382": "Papilio dehaanii", + "4693675": "Ornithoptera euphorion", + "4694313": "Eurytides phaon", + "4695593": "Synargis", + "4695668": "Allodontoides", + "4695709": "Aenetus ligniveren", + "4695719": "Dumbletonius unimaculata", + "4695734": "Salbia", + "4695875": "Sewa", + "4695897": "Darisa", + "4695929": "Pelagodes", + "4695998": "Neoscythris", + "4696040": "Lithilaria", + "4696100": "Macrurocampa", + "4696103": "Tochara", + "4696201": "Thysanoptyx", + "4696228": "Gastridiota", + "4699245": "Colotis annae", + "4701136": "Hesperocharis costaricensis", + "4701298": "Phoebis trite", + "4701336": "Phoebis virgo", + "4702047": "Algia", + "4702183": "Syntypistis", + "4702229": "Microlithosia", + "4702252": "Albinospila", + "4702368": "Isa", + "4702379": "Phlossa", + "4702515": "Hesudra", + "4702564": "Trilocha varians", + "4702588": "Coryphista", + "4702599": "Hydriomena rixata", + "4702603": "Hydriomena deltoidata", + "4702609": "Hydriomena hemizona", + "4702630": "Lassaba", + "4702642": "Satoblephara", + "4702651": "Eriplatymetra", + "4702731": "Xanthorhoe semifissata", + "4702781": "Descoreba", + "4702783": "Gellonia pannularia", + "4702784": "Gellonia dejectaria", + "4702805": "Perixera", + "4702831": "Peratostega", + "4702862": "Orthocabera", + "4702877": "Plesanemma", + "4702878": "Plesanemma fucata", + "4702889": "Lophosis", + "4702891": "Eumacaria", + "4702892": "Asaphodes aegrota", + "4702893": "Asaphodes beata", + "4702911": "Asaphodes clarata", + "4702912": "Asaphodes chlamydota", + "4702939": "Hypochrosis", + "4702953": "Stamnoctenis", + "4702961": "Chalastra aristarcha", + "4703000": "Eloasa", + "4703014": "Hulda", + "4703048": "Merodictya", + "4703184": "Salma", + "4703248": "Harutaea", + "4703308": "Orthospila", + "4703444": "Rhagastis", + "4703460": "Neogurelca", + "4703479": "Cizara ardeniae", + "4703509": "Agape", + "4703670": "Nisista", + "4703719": "Visiana", + "4704034": "Taipsaphida", + "4704072": "Ammatho", + "4704098": "Arcobara", + "4704221": "Kallimoides", + "4704279": "Mycalesis perseus", + "4704315": "Lexias", + "4704316": "Lexias aeropa", + "4704352": "Hypocysta pseudirius", + "4704356": "Hypocysta adiante", + "4704380": "Paryphthimoides", + "4704400": "Oreixenica lathoniella", + "4704401": "Oreixenica correae", + "4704404": "Oreixenica kershawi", + "4704407": "Oreixenica orichora", + "4704499": "Argynnina", + "4704500": "Argynnina hobartia", + "4704501": "Argynnina cyrila", + "4704582": "Trigrammia", + "4704716": "Chabula", + "4704719": "Protonoceras", + "4704752": "Arippara", + "4704946": "Isocentris", + "4704959": "Niphograpta", + "4705037": "Craspedortha", + "4705066": "Pirascca", + "4705103": "Glyphipterix achlyoessa", + "4705145": "Uliura", + "4705151": "Chorsia", + "4705534": "Oxytenis", + "4705537": "Ofatulena", + "4705623": "Mnesiloba", + "4705630": "Rinaca", + "4705637": "Pseudodirphia", + "4705641": "Dirphiopsis", + "4705666": "Nudaurelia", + "4705755": "Depressariidae", + "4705796": "Ruttellerona", + "4705852": "Trismelasmos", + "4705876": "Protuliocnemis", + "4705882": "Pseudocollix", + "4705945": "Euzora", + "4705978": "Cycloprorodes", + "4705981": "Laothus", + "4706535": "Vamuna", + "4706578": "Agnoea", + "4706585": "Celenna", + "4706694": "Churinga", + "4706723": "Collita", + "4706738": "Cypoides", + "4706892": "Vitacea", + "4706983": "Lophophelma", + "4707000": "Quasithosea", + "4707050": "Warreniplema", + "4707100": "Crasilogia", + "4707419": "Oiketicus", + "4707431": "Entometa", + "4707529": "Anaxidia", + "4707641": "Micronidia", + "4707685": "Mimomiza", + "4707698": "Glycythyma", + "4707710": "Acropolitis", + "4707748": "Taniva", + "4707821": "Gymnandrosoma", + "4707834": "Conchylis", + "4707848": "Zomariana doxasticana", + "4707896": "Strepsicrates macropetana", + "4707900": "Strepsicrates infensa", + "4708040": "Callidrepana", + "4708154": "Diedra", + "4708174": "Tumicla", + "4708183": "Leuroperna sera", + "4708197": "Dissomorphia", + "4708288": "Parapercnia", + "4708342": "Stathmopoda horticola", + "4708365": "Mesastrape", + "4708407": "Asthenoptycha", + "4708493": "Aloa", + "4708566": "Popoudina", + "4708587": "Lemyra", + "4708592": "Cyana", + "4708606": "Anestia", + "4708611": "Cisthene", + "4708626": "Eospilarctia", + "4708638": "Notata", + "4708646": "Goniosema", + "4708648": "Arctelene", + "4708684": "Feigeria", + "4708698": "Mecytha", + "4708709": "Achrosis", + "4708713": "Duomitus", + "4708745": "Gonitis", + "4708885": "Michaelophorus", + "4708919": "Plebejidea", + "4708927": "Paralucia aurifer", + "4708972": "Hypochrysops apelles", + "4708973": "Hypochrysops ignita", + "4708977": "Hypochrysops pythias", + "4708984": "Neolucia hobartensis", + "4708995": "Euchrysops cnejus", + "4709030": "Jamides aleuas", + "4709051": "Nacaduba cyanea", + "4709095": "Hypolycaena danis", + "4709100": "Everes", + "4709102": "Everes lacturnus", + "4709103": "Denivia", + "4709107": "Arhopala micale", + "4709111": "Arhopala centaurus", + "4709133": "Candalides heathi", + "4709146": "Sahulana", + "4709147": "Sahulana scintillata", + "4709187": "Ariconias", + "4709268": "Amphitorna", + "4709287": "Neoilliberis", + "4709303": "Chalcidica", + "4709333": "Acratodes", + "4709385": "Nyea", + "4709474": "Detounda", + "4864": "Bedelliidae", + "4865": "Blastobasidae", + "4866": "Brahmaeidae", + "4867": "Bucculatricidae", + "4868": "Callidulidae", + "4870": "Choreutidae", + "4871": "Copromorphidae", + "5101371": "Morpheis pyracmon", + "5101374": "Morpheis xylotribus", + "5101394": "Cossus cossus", + "5101502": "Culama australis", + "5101527": "Langsdorfia franckii", + "5101556": "Gloveria arizonensis", + "5101559": "Gloveria gargamelle", + "5101590": "Sena prompta", + "5101640": "Paralebeda femorata", + "5101678": "Malacosoma castrensis", + "5101717": "Malacosoma alpicola", + "5101745": "Malacosoma neustria", + "5101763": "Malacosoma disstria", + "5101811": "Malacosoma constricta", + "5102207": "Euthrix isocyma", + "5102242": "Euthrix laeta", + "5102272": "Odonestis", + "5102287": "Odonestis pruni", + "5102300": "Odonestis bheroba", + "5102304": "Tolype laricis", + "5102324": "Tolype velleda", + "5102335": "Tolype distincta", + "5102365": "Tolype dayi", + "5102396": "Tolype notialis", + "5102423": "Bondia nigella", + "5102424": "Bondia crescentella", + "5102432": "Coscinoptycha improbana", + "5102628": "Choristoneura hebenstreitella", + "5102635": "Choristoneura fractivittana", + "5102637": "Choristoneura occidentalis", + "5102642": "Choristoneura diversana", + "5102651": "Choristoneura conflictana", + "5102666": "Choristoneura fumiferana", + "5102668": "Choristoneura pinus", + "5102671": "Choristoneura rosaceana", + "5102678": "Choristoneura parallela", + "5102683": "Choristis discotypa", + "5102693": "Aethes atomosana", + "5102735": "Aethes argentilimitana", + "5102773": "Aethes angustana", + "5102782": "Aethes angulatana", + "5102807": "Aethes promptana", + "5102809": "Aethes biscana", + "5102830": "Aethes seriatana", + "5102931": "Agapeta zoegana", + "5102951": "Agapeta hamana", + "5102982": "Ptycholoma lecheana", + "5103061": "Spilonota mortuana", + "5103066": "Spilonota ocellana", + "5103083": "Ancylis metamelana", + "5103100": "Ancylis albacostana", + "5103118": "Ancylis muricana", + "5103121": "Ancylis laetana", + "5103154": "Ancylis divisana", + "5103166": "Ancylis platanana", + "5103176": "Ancylis badiana", + "5103181": "Ancylis achatana", + "5103183": "Ancylis nubeculana", + "5103185": "Ancylis mitterbacheriana", + "5103201": "Ancylis burgessiana", + "5103227": "Ancylis comptana", + "5103394": "Eucosma giganteana", + "5103451": "Eucosma cana", + "5103502": "Eucosma obumbratana", + "5103613": "Eucosma pupillana", + "5103736": "Eucosma metzneriana", + "5103948": "Eucosma conterminana", + "5103998": "Eupoecilia ambiguella", + "5104056": "Epiblema roborana", + "5104063": "Epiblema scudderiana", + "5104088": "Epiblema chromata", + "5104093": "Epiblema luctuosissima", + "5104116": "Epiblema otiosana", + "5104157": "Syndemis afflictana", + "5104442": "Tortrix viridana", + "5104558": "Paramesia gnomana", + "5104597": "Aphelia ferrugana", + "5104641": "Dichelia histrionana", + "5104758": "Euspilapteryx", + "5104759": "Euspilapteryx auroguttella", + "5104772": "Caloptilia betulicola", + "5104781": "Caloptilia rufipennella", + "5104797": "Caloptilia hemidactylella", + "5104815": "Caloptilia belfragella", + "5104822": "Caloptilia xanthopharella", + "5104829": "Caloptilia falconipennella", + "5104882": "Caloptilia robustella", + "5104891": "Caloptilia stigmatella", + "5104903": "Caloptilia azaleella", + "5104927": "Caloptilia semifascia", + "5104940": "Caloptilia alchimiella", + "5104948": "Caloptilia violacella", + "5104986": "Caloptilia rhoifoliella", + "5105031": "Caloptilia fraxinella", + "5105054": "Caloptilia suberinella", + "5105057": "Caloptilia serotinella", + "5105068": "Caloptilia blandella", + "5105081": "Caloptilia adelosema", + "5105088": "Caloptilia populetorum", + "5105106": "Caloptilia cuculipennella", + "5105120": "Caloptilia bimaculatella", + "5105124": "Caloptilia packardella", + "5105158": "Caloptilia elongella", + "5105193": "Podalia thanatos", + "5105194": "Podalia albescens", + "5105212": "Podalia walkeri", + "5105217": "Podalia orsilochus", + "5105218": "Podalia habitus", + "5105227": "Podalia tympania", + "5105259": "Altha melanopsis", + "5105328": "Apoda", + "5105336": "Apoda rectilinea", + "5105339": "Apoda limacodes", + "5105344": "Apoda y-inversa", + "5105352": "Apoda latomia", + "5105365": "Euclea delphinii", + "5105367": "Euclea norba", + "5105369": "Euclea incisa", + "5105376": "Euclea nanina", + "5105379": "Euclea zygia", + "5105380": "Euclea buscki", + "5105447": "Parasa wellesca", + "5105458": "Parasa pastoralis", + "5105467": "Parasa shirakii", + "5105469": "Parasa indetermina", + "5105491": "Parasa minima", + "5105508": "Parasa chloris", + "5105547": "Parasa lepida", + "5105553": "Parasa flora", + "5105560": "Parasa consocia", + "5105570": "Parasa darma", + "5105584": "Parasa latistriga", + "5105588": "Monema rubriceps", + "5105603": "Lithacodes fasciola", + "5105642": "Sinica sinica", + "5105649": "Harrisina metallica", + "5105656": "Harrisina americana", + "5105671": "Harrisina coracina", + "5105929": "Zygaena lavandulae", + "5106115": "Zygaena laeta", + "5106160": "Zygaena centaureae", + "5106249": "Zygaena punctum", + "5106539": "Zygaena oxytropis", + "5106894": "Zygaena hilaris", + "5107076": "Zygaena graslini", + "5107128": "Zygaena angelicae", + "5107219": "Zygaena filipendulae", + "5107640": "Zygaena nevadensis", + "5107644": "Zygaena viciae", + "5107829": "Zygaena minos", + "5108318": "Cyclosia papilionaris", + "5108334": "Cyclosia panthona", + "5108335": "Cyclosia pieridoides", + "5108346": "Erasmia pulchella", + "5108349": "Erasmia sangaica", + "5108416": "Balsa labecula", + "5108417": "Balsa tristrigella", + "5108419": "Balsa malana", + "5108421": "Lophoptera vittigera", + "5108435": "Lophoptera squammigera", + "5108440": "Lophoptera phaeobasis", + "5108619": "Aegocera rectilinea", + "5108636": "Aegocera venulia", + "5108637": "Setagrotis", + "5108640": "Setagrotis pallidicollis", + "5108660": "Callopistria latreillei", + "5108665": "Callopistria floridensis", + "5108670": "Callopistria cordata", + "5108671": "Callopistria maillardi", + "5108705": "Callopistria duplicans", + "5108724": "Callopistria rivularis", + "5108737": "Callopistria pulchrilinea", + "5108752": "Callopistria exotica", + "5108761": "Callopistria juventina", + "5108787": "Callopistria placodoides", + "5108794": "Callopistria repleta", + "5108796": "Callopistria phaeogona", + "5108808": "Disticta atava", + "5108951": "Diphthera festiva", + "5108957": "Raphia frater", + "5108958": "Raphia hybris", + "5109196": "Dahlia capnobela", + "5109259": "Acontia trimaculata", + "5109270": "Acontia clerana", + "5109299": "Acontia aprica", + "5109345": "Acontia transfigurata", + "5109349": "Acontia thapsina", + "5109369": "Acontia quadriplaga", + "5109385": "Acontia marmoralis", + "5109407": "Acontia guttifera", + "5109413": "Acontia cretata", + "5109418": "Acontia nivipicta", + "5109437": "Acontia detrita", + "5109498": "Cucullia chamomillae", + "5109506": "Cucullia lucifuga", + "5109523": "Cucullia umbratica", + "5109535": "Cucullia intermedia", + "5109554": "Cucullia balsamitae", + "5109566": "Cucullia asteroides", + "5109596": "Cucullia convexipennis", + "5109599": "Cucullia absinthii", + "5109614": "Cucullia asteris", + "5109646": "Cucullia calendulae", + "5109651": "Cucullia laetifica", + "5109661": "Cucullia verbasci", + "5109670": "Cucullia fraudatrix", + "5109722": "Cucullia lactucae", + "5109766": "Ommatophora luminosa", + "5109782": "Donuca rubropicta", + "5109784": "Donuca castalia", + "5109786": "Donuca spectabilis", + "5109787": "Donuca orbigera", + "5109788": "Donuca lanipes", + "5109796": "Bocana manifestalis", + "5109821": "Staurophora celsia", + "5109829": "Spodoptera pulchella", + "5109830": "Spodoptera depravata", + "5109843": "Spodoptera cilium", + "5109845": "Spodoptera ornithogalli", + "5109848": "Spodoptera mauritia", + "5109850": "Spodoptera eridania", + "5109852": "Spodoptera praefica", + "5109855": "Spodoptera frugiperda", + "5109870": "Spodoptera umbraculata", + "5109872": "Spodoptera picta", + "5109881": "Spodoptera dolichos", + "5109882": "Spodoptera litura", + "5109898": "Spodoptera pecten", + "5109931": "Spodoptera littoralis", + "5109943": "Spodoptera pectinicornis", + "5109954": "Spodoptera latifascia", + "5109958": "Spodoptera albula", + "5110012": "Fodina contigua", + "5110013": "Fodina ostorius", + "5110044": "Epidromia rotundata", + "5110120": "Mythimna sinuosa", + "5110190": "Cyclodes omma", + "5110200": "Calamia tridens", + "5110211": "Thalpophila vitalba", + "5110213": "Thalpophila matura", + "5110232": "Artena dotata", + "5110256": "Euplexidia exotica", + "5110258": "Euplexidia pallidivirens", + "5110282": "Enispa vinacea", + "5110297": "Drasteria graphica", + "5110299": "Drasteria ingeniculata", + "5110305": "Drasteria mirifica", + "5110326": "Thysania zenobia", + "5110327": "Thysania agrippina", + "5110333": "Plusia contexta", + "5110341": "Plusia nichollae", + "5110356": "Plusia venusta", + "5110374": "Pseudanarta", + "5110377": "Pseudanarta crocea", + "5110390": "Sosxetra grata", + "5110397": "Plecoptera siderogramma", + "5110417": "Plecoptera recta", + "5110447": "Plecoptera oculata", + "5110490": "Plecoptera reflexa", + "5110492": "Allotria elonympha", + "5110533": "Ceroctena amynta", + "5110546": "Gesonia obeditalis", + "5110593": "Ammoconia senex", + "5110641": "Nonagria", + "5110644": "Nonagria typhae", + "5110670": "Eremobia ochroleuca", + "5110723": "Polia nimbosa", + "5110728": "Polia piniae", + "5110752": "Polia nugatis", + "5110754": "Polia imbrifera", + "5110756": "Polia purpurissata", + "5110765": "Anisoneura salebrosa", + "5110769": "Anisoneura aluco", + "5110818": "Oria musculosa", + "5110837": "Calyptra minuticornis", + "5110858": "Cerastis faceta", + "5110863": "Cerastis tenebrifera", + "5110871": "Cerastis leucographa", + "5110885": "Cerastis rubricosa", + "5110891": "Lepidodes gallopavo", + "5110981": "Phyllodes imperialis", + "5110986": "Phyllodes eyndhovii", + "5110993": "Phyllodes consobrina", + "5111007": "Simplicia mistacalis", + "5111044": "Simplicia discosticta", + "5111054": "Simplicia extinctalis", + "5111064": "Leucania abdominalis", + "5111076": "Leucania scirpicola", + "5111139": "Leucania ursula", + "5111141": "Leucania incognita", + "5111147": "Leucania joannisi", + "5111195": "Leucania stenographa", + "5111214": "Leucania dasycnema", + "5111249": "Leucania uda", + "5111343": "Leucania linda", + "5111360": "Leucania commoides", + "5111372": "Leucania insueta", + "5111397": "Leucania multilinea", + "5111481": "Leucania putrescens", + "5111501": "Leucania zeae", + "5111513": "Leucania punctosa", + "5111521": "Leucania pseudargyria", + "5111528": "Leucania imperfecta", + "5111535": "Leucania yu", + "5111546": "Leucania subpunctata", + "5111568": "Leucania adjuta", + "5111574": "Leucania comma", + "5111600": "Leucania diatrecta", + "5111643": "Luceria oculalis", + "5111830": "Hepatica irrorata", + "5111956": "Zotheca tranquilla", + "5111967": "Elusa semipecten", + "5111974": "Elusa ustula", + "5111980": "Elusa antennata", + "5112051": "Renia salusalis", + "5112053": "Renia flavipunctalis", + "5112060": "Renia discoloralis", + "5112068": "Renia adspergillus", + "5112078": "Renia factiosalis", + "5112080": "Renia sobrialis", + "5112130": "Eudryas unio", + "5112131": "Eudryas grata", + "5112153": "Xestia dilucida", + "5112155": "Xestia sexstrigata", + "5112160": "Xestia ochreago", + "5112191": "Xestia oblata", + "5112199": "Xestia praevia", + "5112229": "Xestia infimatis", + "5112233": "Xestia normaniana", + "5112254": "Xestia agathina", + "5112283": "Xestia xanthographa", + "5112291": "Xestia baja", + "5112302": "Xestia badicollis", + "5112336": "Xestia castanea", + "5112345": "Xestia stigmatica", + "5112377": "Xestia smithii", + "5112388": "Xestia kermesina", + "5112407": "Praxis edwardsii", + "5112410": "Praxis porphyretica", + "5112414": "Argyrogramma verruca", + "5112440": "Penicillaria jocosatrix", + "5112457": "Meterana levis", + "5112460": "Meterana pansicolor", + "5112461": "Meterana alcyone", + "5112464": "Meterana stipata", + "5112465": "Meterana decorata", + "5112467": "Meterana dotata", + "5112469": "Meterana ochthistis", + "5112474": "Meterana coeleno", + "5112475": "Meterana vitiosa", + "5112480": "Meterana tartaraea", + "5112481": "Meterana diatmeta", + "5112500": "Adrapsa ablualis", + "5112531": "Ophisma gravata", + "5112542": "Ophisma tropicalis", + "5112626": "Anoba pohli", + "5112798": "Melanomma auricinctaria", + "5112843": "Heterogramma circumflexalis", + "5112892": "Zale aeruginosa", + "5112900": "Zale intenta", + "5112908": "Zale undularis", + "5112911": "Zale bethunei", + "5112915": "Zale phaeocapna", + "5112917": "Zale lunata", + "5112923": "Zale horrida", + "5112927": "Zale edusina", + "5112940": "Zale minerea", + "5112944": "Zale helata", + "5112947": "Zale obliqua", + "5112959": "Zale unilineata", + "5112960": "Zale coracias", + "5112961": "Zale metatoides", + "5112963": "Zale calycanthata", + "5112968": "Zale duplicata", + "5112990": "Zale galbanata", + "5113001": "Schrankia capnophanes", + "5113030": "Schrankia taenialis", + "5113036": "Schrankia costaestrigalis", + "5113078": "Herminia grisealis", + "5113082": "Herminia fentoni", + "5113084": "Herminia tarsicrinalis", + "5113148": "Herminia annulata", + "5113234": "Herminia tarsipennalis", + "5113330": "Nodaria externalis", + "5113352": "Pindara illibata", + "5113365": "Diastema tigris", + "5113370": "Mycteroplus puniceago", + "5113385": "Thyas honesta", + "5113394": "Agarista agricola", + "5113847": "Aedia funesta", + "5113853": "Aedia leucomelas", + "5113925": "Hypospila bolinoides", + "5113950": "Achaea janata", + "5113951": "Orthosia carnipennis", + "5113985": "Orthosia transparens", + "5114011": "Orthosia pulchella", + "5114021": "Orthosia behrensiana", + "5114039": "Orthosia praeses", + "5114043": "Orthosia garmani", + "5114081": "Orthosia mys", + "5114083": "Orthosia rubescens", + "5114096": "Orthosia pacifica", + "5114107": "Orthosia alurina", + "5114128": "Orthosia hibisci", + "5114151": "Orthosia revicta", + "5114159": "Orthosia erythrolita", + "5114189": "Colocasia flavicornis", + "5114192": "Colocasia propinquilinea", + "5114198": "Colocasia coryli", + "5114254": "Nycteola", + "5114295": "Nycteola frigidana", + "5114303": "Nycteola indica", + "5114311": "Nycteola asiatica", + "5114316": "Nycteola siculana", + "5114317": "Nycteola cinereana", + "5114327": "Nycteola revayana", + "5114340": "Nycteola metaspilella", + "5114353": "Nycteola polycyma", + "5114394": "Xanthodes transversa", + "5114400": "Xanthodes intersepta", + "5114409": "Xanthodes albago", + "5114425": "Eligma narcissus", + "5114431": "Baileya ophthalmica", + "5114435": "Baileya levitans", + "5114436": "Baileya dormitans", + "5114439": "Baileya doubledayi", + "5114465": "Westermannia elliptica", + "5114515": "Westermannia gloriosa", + "5114892": "Clemensia umbrata", + "5114903": "Clemensia albata", + "5114912": "Cycnia tenera", + "5114915": "Cycnia oregonensis", + "5114921": "Cycnia collaris", + "5114923": "Haploa reversa", + "5114930": "Haploa contigua", + "5114934": "Haploa clymene", + "5114946": "Haploa confusa", + "5114949": "Gnophaela discreta", + "5114950": "Gnophaela latipennis", + "5114956": "Gnophaela vermiculata", + "5115046": "Aclytia heber", + "5115166": "Eugoa brunnea", + "5115167": "Eugoa grisea", + "5115198": "Eugoa formosicola", + "5115213": "Automolis", + "5115381": "Automolis lateritia", + "5115406": "Phaloe cruenta", + "5115500": "Bertholdia trigona", + "5115701": "Eucharia festiva", + "5115771": "Lithosia quadra", + "5115777": "Tyria jacobaeae", + "5115807": "Arctia", + "5115854": "Arctia virginalis", + "5115872": "Arctia flavia", + "5115874": "Arctia caja", + "5116095": "Camptoloma carum", + "5116128": "Arachnis picta", + "5116134": "Arachnis dilecta", + "5116145": "Cosmosoma auge", + "5116198": "Cosmosoma xanthosticta", + "5116238": "Cosmosoma telephus", + "5116252": "Cosmosoma achemon", + "5116293": "Cosmosoma myrodora", + "5116332": "Euchaetes zella", + "5116338": "Euchaetes bolteri", + "5116353": "Euchaetes egle", + "5116358": "Euchaetes antica", + "5116395": "Nudaria suffusa", + "5116397": "Nudaria mollis", + "5116412": "Nudaria ranruna", + "5116416": "Nudaria mundana", + "5116423": "Robinsonia dewitzi", + "5116471": "Setina", + "5116475": "Setina irrorella", + "5116504": "Argina astrea", + "5116698": "Eilema caniola", + "5116843": "Eilema pulverea", + "5117189": "Coscinia cribraria", + "5117200": "Coscinia striata", + "5117245": "Amastus coccinator", + "5117347": "Amastus thalassina", + "5117348": "Amastus aconia", + "5117361": "Poecilosoma eone", + "5117399": "Pelosia obtusa", + "5117400": "Pelosia muscerda", + "5117413": "Eudesmia lunaris", + "5117414": "Eudesmia menea", + "5117430": "Dysschema howardi", + "5117462": "Dysschema leucophaea", + "5117463": "Dysschema sacrifica", + "5117553": "Dysschema centenaria", + "5117685": "Dinia eagrus", + "5117687": "Dinia mena", + "5117776": "Euchromia folletii", + "5117779": "Euchromia polymena", + "5117791": "Euchromia lethe", + "5117805": "Euchromia amoena", + "5117941": "Agylla separata", + "5118046": "Lerina incarnata", + "5118171": "Laelia obsoleta", + "5118223": "Aroa discalis", + "5118291": "Orgyia australis", + "5118327": "Orgyia definita", + "5118348": "Orgyia postica", + "5118396": "Leucoma clara", + "5118422": "Arna bipunctapex", + "5118459": "Furcula modesta", + "5118474": "Furcula cinerea", + "5118509": "Furcula scolopendrina", + "5118524": "Furcula occidentalis", + "5118565": "Somera viridifusca", + "5118582": "Harpyia microsticta", + "5118798": "Ecnomodes sagittaria", + "5118828": "Ursia noctuiformis", + "5118829": "Disparia", + "5118837": "Disparia wilemani", + "5118841": "Disparia diluta", + "5118859": "Pterostoma gigantina", + "5118892": "Drymonia ruficornis", + "5118904": "Drymonia obliterata", + "5118934": "Schizura unicornis", + "5118944": "Schizura ipomaeae", + "5118949": "Schizura badia", + "5118974": "Fentonia baibarana", + "5118978": "Fentonia ocypete", + "5118996": "Stauropus fagi", + "5119000": "Stauropus sikkimensis", + "5119009": "Heterocampa astartoides", + "5119011": "Heterocampa biundata", + "5119013": "Heterocampa umbrata", + "5119016": "Heterocampa obliqua", + "5119026": "Heterocampa guttivitta", + "5119039": "Heterocampa subrotata", + "5119046": "Heterocampa averna", + "5119050": "Heterocampa astarte", + "5119143": "Ptilophora plumigera", + "5119181": "Phalera assimilis", + "5119183": "Phalera lydenburgi", + "5119193": "Phalera bucephaloides", + "5119211": "Phalera obscura", + "5119223": "Phalera flavescens", + "5119239": "Phalera grotei", + "5119245": "Phalera bucephala", + "5119338": "Leto venus", + "5119346": "Abantiades labyrinthicus", + "5119349": "Abantiades barcas", + "5119350": "Abantiades hyalinatus", + "5119353": "Abantiades latipennis", + "5119354": "Abantiades marcidus", + "5119361": "Abantiades hydrographus", + "5119482": "Zelleria haimbachi", + "5119506": "Zelleria oleastrella", + "5119513": "Zelleria hepariella", + "5119806": "Orophia", + "5119808": "Orophia ferrugella", + "5119868": "Snellenia lineata", + "5119880": "Durrantia", + "5119890": "Durrantia piperatella", + "5119893": "Callima formosella", + "5119895": "Callima argenticinctella", + "5119905": "Inga sparsiciliella", + "5119961": "Inga obscuromaculella", + "5119969": "Inga cretacea", + "5120053": "Wingia aurata", + "5120058": "Wingia rectiorella", + "5120063": "Wingia lambertella", + "5120278": "Eretmocera impactella", + "5120341": "Limnaecia tetraplanetis", + "5120343": "Limnaecia scoliosema", + "5120357": "Limnaecia cirrhozona", + "5120368": "Limnaecia cirrhosema", + "5120379": "Limnaecia camptosema", + "5120396": "Limnaecia phragmitella", + "5120453": "Euclemensia bassettella", + "5120465": "Metriotes lutarea", + "5120577": "Coleophora trifolii", + "5120668": "Coleophora alticolella", + "5120675": "Coleophora mayrella", + "5120767": "Coleophora laricella", + "5121040": "Coleophora salicorniae", + "5121046": "Coleophora discordella", + "5121177": "Coleophora alcyonipennella", + "5121244": "Coleophora lixella", + "5121517": "Coleophora serratella", + "5121613": "Coleophora deauratella", + "5121737": "Coleophora otidipennella", + "5121847": "Telphusa longifasciella", + "5121850": "Telphusa perspicua", + "5122013": "Tituacia deviella", + "5122037": "Aristotelia ericinella", + "5122062": "Aristotelia elegantella", + "5122086": "Aristotelia rubidella", + "5122113": "Aristotelia brizella", + "5122121": "Aristotelia corallina", + "5122131": "Aristotelia roseosuffusella", + "5122206": "Athrips mouffetella", + "5122293": "Pachythelia villosella", + "5122307": "Metura elongatus", + "5122430": "Eumeta variegatus", + "5122439": "Canephora hirsuta", + "5122455": "Clania lewinii", + "5122526": "Acrolophus piger", + "5122538": "Acrolophus texanella", + "5122556": "Acrolophus walsinghami", + "5122571": "Acrolophus mycetophagus", + "5122574": "Acrolophus propinqua", + "5122581": "Acrolophus heppneri", + "5122620": "Acrolophus laticapitana", + "5122646": "Acrolophus mortipennella", + "5122647": "Acrolophus arcanella", + "5122668": "Acrolophus mora", + "5122683": "Acrolophus panamae", + "5122691": "Acrolophus cressoni", + "5122696": "Acrolophus griseus", + "5122702": "Acrolophus popeanella", + "5122779": "Lindera tessellatella", + "5122798": "Euplocamus ophisa", + "5122876": "Tinea apicimaculella", + "5122969": "Tinea occidentella", + "5123018": "Mea bipunctella", + "5123042": "Geina didactyla", + "5123046": "Geina periscelidactylus", + "5123118": "Pterophorus furcatalis", + "5123137": "Pterophorus innotatalis", + "5123180": "Pterophorus lacteipennis", + "5123221": "Pterophorus pentadactyla", + "5123276": "Pterophorus monospilalis", + "5123339": "Tebenna micalis", + "5123346": "Choreutis", + "5123394": "Choreutis diana", + "5123419": "Choreutis sexfasciella", + "5123443": "Anthophila", + "5123449": "Anthophila achyrodes", + "5123461": "Anthophila fabriciana", + "5123474": "Anthophila nemorana", + "5123485": "Anthophila xanthogramma", + "5123489": "Anthophila amethystodes", + "5123542": "Anthophila albertiana", + "5123582": "Phylloporia bistrigella", + "5123615": "Phryxus caicus", + "5123636": "Agrius cingulata", + "5123663": "Agrius godarti", + "5123674": "Langia zenzeroides", + "5123676": "Clanis undulosa", + "5123685": "Clanis bilineata", + "5123701": "Oryba kadeni", + "5123704": "Oryba achemenides", + "5123707": "Amplypterus panopus", + "5123709": "Amplypterus mansoni", + "5123775": "Amorpha juglandis", + "5123784": "Isognathus scyron", + "5123801": "Isognathus caricae", + "5123811": "Ambulyx", + "5123815": "Ambulyx japonica", + "5123824": "Ambulyx tattina", + "5123837": "Ambulyx substrigilis", + "5123852": "Ambulyx dohertyi", + "5123870": "Ambulyx pryeri", + "5123876": "Ambulyx sericeipennis", + "5123884": "Ambulyx canescens", + "5123889": "Ambulyx kuangtungensis", + "5123890": "Ambulyx ochracea", + "5123922": "Mimas tiliae", + "5123954": "Eumorpha satellitia", + "5123956": "Eumorpha anchemolus", + "5123961": "Eumorpha phorbas", + "5123968": "Eumorpha typhon", + "5123971": "Eumorpha labruscae", + "5123979": "Eumorpha vitis", + "5123980": "Eumorpha analis", + "5123983": "Eumorpha fasciatus", + "5123991": "Eumorpha triangulum", + "5123996": "Eumorpha capronnieri", + "5123999": "Eumorpha pandorus", + "5124000": "Eumorpha achemon", + "5124007": "Laothoe populi", + "5124029": "Laothoe amurensis", + "5124049": "Amphion floridensis", + "5124050": "Deidamia inscriptum", + "5124071": "Nephele accentifera", + "5124080": "Nephele subvaria", + "5124088": "Nephele comma", + "5124093": "Nephele vau", + "5124109": "Nephele argentifera", + "5124118": "Sphinx dollii", + "5124119": "Sphinx poecila", + "5124121": "Sphinx morio", + "5124136": "Sphinx perelegans", + "5124143": "Sphinx ligustri", + "5124147": "Sphinx vashti", + "5124151": "Sphinx maurorum", + "5124172": "Sphinx libocedrus", + "5124199": "Sphinx luscitiosa", + "5124200": "Sphinx chersis", + "5124208": "Sphinx drupiferarum", + "5124219": "Sphinx canadensis", + "5124232": "Sphinx kalmiae", + "5124233": "Sphinx pinastri", + "5124249": "Enyo gorgon", + "5124250": "Enyo lugubris", + "5124268": "Enyo ocypete", + "5124300": "Macroglossum mediovitta", + "5124304": "Macroglossum fritzei", + "5124305": "Macroglossum passalus", + "5124332": "Macroglossum pyrrhosticta", + "5124348": "Macroglossum divergens", + "5124352": "Macroglossum trochilus", + "5124374": "Macroglossum sitiene", + "5124415": "Macroglossum bombylans", + "5124423": "Macroglossum errans", + "5124433": "Macroglossum saga", + "5124442": "Aellopos clavipes", + "5124443": "Aellopos fadus", + "5124448": "Aellopos tantalus", + "5124450": "Aellopos titan", + "5124452": "Aellopos ceculus", + "5124468": "Coloradia pandora", + "5124512": "Graellsia isabellae", + "5124542": "Rothschildia arethusa", + "5124557": "Rothschildia lebeau", + "5124589": "Rothschildia cinctus", + "5124595": "Rothschildia erycina", + "5124597": "Rothschildia jacobaeae", + "5124598": "Rothschildia hesperus", + "5124607": "Rothschildia speculifer", + "5124670": "Attacus", + "5124673": "Attacus taprobanis", + "5124716": "Attacus atlas", + "5124813": "Epiphora mythimnia", + "5124873": "Titaea tamerlan", + "5124880": "Aglia japonica", + "5124911": "Aglia tau", + "5125075": "Lemonia balcanica", + "5125104": "Lemonia dumi", + "5125118": "Epia muscosa", + "5125130": "Oberthueria formosibia", + "5125306": "Alophia combustella", + "5125525": "Semnia auritalis", + "5125545": "Neodavisia melusina", + "5125569": "Endotricha minialis", + "5125591": "Endotricha puncticostalis", + "5125596": "Endotricha theonalis", + "5125600": "Endotricha ignealis", + "5125602": "Endotricha mesenterialis", + "5125629": "Endotricha pyrosalis", + "5125633": "Endotricha olivacealis", + "5125635": "Endotricha repandalis", + "5125689": "Endotricha flammealis", + "5125780": "Tegulifera zonalis", + "5125916": "Cacozelia elegans", + "5125917": "Cacozelia basiochrealis", + "5125939": "Adelphia petrella", + "5125943": "Homoeosoma vagella", + "5126000": "Homoeosoma deceptorium", + "5126013": "Homoeosoma electella", + "5126052": "Homoeosoma sinuella", + "5126204": "Duponchelia lanceolalis", + "5126212": "Platytes alpinella", + "5126217": "Platytes cerusella", + "5126229": "Eudonia strigalis", + "5126231": "Eudonia minualis", + "5126240": "Eudonia atmogramma", + "5126241": "Eudonia feredayi", + "5126259": "Eudonia leptalea", + "5126284": "Eudonia dinodes", + "5126287": "Eudonia melanaegis", + "5126292": "Eudonia chlamydota", + "5126315": "Eudonia steropaea", + "5126332": "Eudonia asterisca", + "5126344": "Eudonia submarginalis", + "5126352": "Eudonia heterosalis", + "5126357": "Eudonia legnota", + "5126365": "Eudonia spenceri", + "5126376": "Eudonia aphrodes", + "5126381": "Eudonia cataxesta", + "5126396": "Eudonia cymatias", + "5126397": "Eudonia characta", + "5126398": "Eudonia bisinualis", + "5126404": "Eudonia echo", + "5126434": "Eudonia aspidota", + "5126445": "Eudonia octophora", + "5126449": "Eudonia trivirgata", + "5126454": "Eudonia periphanes", + "5126458": "Eudonia colpota", + "5126494": "Desmia bajulalis", + "5126517": "Desmia funeralis", + "5126533": "Desmia deploralis", + "5126585": "Omiodes simialis", + "5126635": "Omiodes diemenalis", + "5126637": "Omiodes indicata", + "5126663": "Syllepis hortalis", + "5126668": "Antigastra morysalis", + "5126675": "Anania funebris", + "5126680": "Anania verbascalis", + "5126697": "Argyria auratella", + "5126718": "Argyria nivalis", + "5126721": "Argyria lacteella", + "5126726": "Argyria critica", + "5126729": "Argyria gonogramma", + "5126751": "Microthyris anormalis", + "5126756": "Siga liris", + "5126785": "Scoparia cinereomedia", + "5126798": "Scoparia crocospila", + "5126834": "Scoparia subfusca", + "5126843": "Scoparia spelaea", + "5126866": "Scoparia exilis", + "5126870": "Scoparia chalicodes", + "5126889": "Scoparia indistinctalis", + "5126892": "Scoparia basalis", + "5126905": "Scoparia minusculalis", + "5126916": "Scoparia acharis", + "5126922": "Scoparia exhibitalis", + "5126946": "Scoparia ustimacula", + "5126958": "Scoparia penumbralis", + "5126963": "Scoparia biplagialis", + "5127020": "Scoparia oxygona", + "5127024": "Scoparia tetracycla", + "5127039": "Scoparia chiasta", + "5127044": "Scoparia ochrophara", + "5127045": "Scoparia halopis", + "5127054": "Scoparia rotuellus", + "5127089": "Agathodes monstralis", + "5127090": "Agathodes designalis", + "5127094": "Agathodes musivalis", + "5127097": "Agathodes ostentalis", + "5127107": "Glaphyria fulminalis", + "5127116": "Glaphyria sesquistrialis", + "5127118": "Glaphyria invisalis", + "5127130": "Glaphyria glaphyralis", + "5127132": "Glaphyria basiflavalis", + "5127170": "Eustixia pupula", + "5127203": "Raphiptera argillaceellus", + "5127209": "Megastes praxiteles", + "5127222": "Occidentalia comptulatalis", + "5127325": "Petrophila confusalis", + "5127335": "Petrophila daemonalis", + "5127336": "Petrophila fulicalis", + "5127337": "Petrophila kearfottalis", + "5127339": "Petrophila jaliscalis", + "5127350": "Petrophila canadensis", + "5127353": "Petrophila santafealis", + "5127354": "Petrophila hodgesi", + "5127355": "Petrophila cappsi", + "5127357": "Petrophila bifascialis", + "5127378": "Diastictis fracturalis", + "5127380": "Diastictis ventralis", + "5127394": "Rhimphalea sceletalis", + "5127521": "Gesneria centuriella", + "5127530": "Euclasta maceratalis", + "5127562": "Glyphodes extorris", + "5127592": "Glyphodes actorionalis", + "5127595": "Glyphodes cosmarcha", + "5127609": "Glyphodes duplicalis", + "5127629": "Glyphodes canthusalis", + "5127631": "Glyphodes sibillalis", + "5127638": "Glyphodes microta", + "5127644": "Glyphodes stolalis", + "5127656": "Glyphodes pyloalis", + "5127669": "Glyphodes bivitralis", + "5127675": "Glyphodes bicolor", + "5127680": "Glyphodes grandisalis", + "5127683": "Glyphodes crithealis", + "5127688": "Glyphodes quadrimaculalis", + "5127698": "Glyphodes caesalis", + "5127748": "Phalanta alcippe", + "5127805": "Mestra amymone", + "5127814": "Mestra hersilia", + "5127822": "Dira clytus", + "5127835": "Polyura agrarius", + "5127867": "Polyura dolon", + "5127893": "Polyura eudamippus", + "5127916": "Polyura hebe", + "5127932": "Polyura athamas", + "5127955": "Polyura nepenthes", + "5127971": "Polyura delphis", + "5127992": "Polyura arja", + "5127998": "Polyura jalysus", + "5128005": "Anartia fatima", + "5128007": "Anartia jatrophae", + "5128011": "Anartia amathea", + "5128034": "Dryas iulia", + "5128045": "Melinaea lilis", + "5128067": "Melinaea ludovica", + "5128118": "Melinaea menophilus", + "5128161": "Discophora timora", + "5128169": "Discophora lepida", + "5128182": "Discophora sondaica", + "5128224": "Tisiphone abeona", + "5128225": "Tisiphone helena", + "5128232": "Oeneis alberta", + "5128250": "Oeneis chryxus", + "5128266": "Oeneis uhleri", + "5128323": "Oeneis norna", + "5128326": "Oeneis melissa", + "5128353": "Oeneis tarpeia", + "5128357": "Oeneis jutta", + "5128363": "Oeneis macounii", + "5128380": "Oeneis nevadensis", + "5128398": "Eunica norica", + "5128423": "Eunica margarita", + "5128432": "Eunica bechina", + "5128433": "Eunica malvina", + "5128438": "Eunica pusilla", + "5128446": "Eunica eburnea", + "5128475": "Eunica tatila", + "5128488": "Eunica monima", + "5128491": "Eunica alcmena", + "5128519": "Sasakia charonda", + "5128545": "Asterope boisduvali", + "5128569": "Charaxes affinis", + "5128587": "Charaxes psaphon", + "5128597": "Charaxes brutus", + "5128644": "Charaxes bernardus", + "5128663": "Charaxes nitebis", + "5128825": "Charaxes pelias", + "5128984": "Charaxes castor", + "5129000": "Charaxes marmax", + "5129025": "Charaxes solon", + "5129091": "Charaxes candiope", + "5129190": "Charaxes cithaeron", + "5129251": "Colobura dirce", + "5129257": "Dione glycera", + "5129266": "Parthenos tigrina", + "5129293": "Vanessa indica", + "5129374": "Polygonia faunus", + "5129378": "Polygonia l-album", + "5129387": "Polygonia haroldi", + "5129405": "Polygonia gracilis", + "5129417": "Polygonia c-aureum", + "5129430": "Polygonia comma", + "5129432": "Polygonia progne", + "5129451": "Polygonia interrogationis", + "5129473": "Hamadryas iphthime", + "5129479": "Hamadryas arete", + "5129480": "Hamadryas chloe", + "5129481": "Hamadryas februa", + "5129489": "Hamadryas amphinome", + "5129496": "Hamadryas feronia", + "5129502": "Hamadryas epinome", + "5129515": "Hamadryas atlantis", + "5129517": "Hamadryas atlantis", + "5129520": "Hamadryas laodamia", + "5129524": "Hamadryas arinome", + "5129531": "Hamadryas glauconome", + "5129535": "Hamadryas guatemalena", + "5129544": "Enodia portlandia", + "5129636": "Batesia hypochlora", + "5129913": "Melitaea arcesia", + "5130277": "Amathusia phidippus", + "5130296": "Metamorpha elissa", + "5130314": "Calisto confusa", + "5130322": "Calisto obscura", + "5130326": "Calisto herophile", + "5130330": "Calisto nubila", + "5130335": "Junonia chorimene", + "5130347": "Junonia elgiva", + "5130369": "Junonia atlites", + "5130392": "Junonia oenone", + "5130393": "Junonia gregorii", + "5130396": "Junonia artaxia", + "5130400": "Junonia nigrosuffusa", + "5130439": "Junonia erigone", + "5130444": "Junonia iphita", + "5130448": "Junonia natalica", + "5130456": "Junonia villida", + "5130464": "Junonia orithya", + "5130467": "Junonia sophia", + "5130471": "Junonia almana", + "5130476": "Junonia hedonia", + "5130487": "Junonia rhadama", + "5130502": "Junonia goudotii", + "5130514": "Junonia coenia", + "5130521": "Junonia lemonias", + "5130528": "Junonia evarete", + "5130542": "Junonia hierta", + "5130548": "Junonia genoveva", + "5130557": "Nica flavilla", + "5130559": "Microtia elva", + "5130562": "Panacea procilla", + "5130574": "Panacea prola", + "5130576": "Nymphalis", + "5130587": "Nymphalis xanthomelas", + "5130682": "Nymphalis antiopa", + "5130696": "Nymphalis californica", + "5130748": "Euthalia adonia", + "5130775": "Euthalia lubentina", + "5130813": "Euthalia monina", + "5130814": "Euthalia aconthea", + "5130851": "Euthalia phemius", + "5130904": "Euthalia alpheda", + "5130908": "Euthalia formosana", + "5130944": "Euthalia anosia", + "5130971": "Euthalia patala", + "5131058": "Euthalia recta", + "5131088": "Neptis", + "5131096": "Neptis rivularis", + "5131142": "Neptis sappho", + "5131192": "Neptis taiwana", + "5131256": "Neptis ida", + "5131293": "Neptis pryeri", + "5131339": "Neptis hylas", + "5131347": "Neptis saclava", + "5131372": "Neptis leucoporos", + "5131407": "Neptis harita", + "5131442": "Neptis laeta", + "5131443": "Neptis nata", + "5131467": "Neptis miah", + "5131493": "Neptis praslini", + "5131495": "Neptis clinia", + "5131520": "Neptis soma", + "5131540": "Neptis serena", + "5131555": "Neptis ananta", + "5131565": "Neptis jumbah", + "5131585": "Neptis alwina", + "5131593": "Neptis thisbe", + "5131597": "Eueides procula", + "5131608": "Eueides isabella", + "5131637": "Eueides vibilia", + "5131910": "Apatura iris", + "5131951": "Biblis aganisa", + "5131957": "Sesia hyperia", + "5131972": "Limenitis", + "5131982": "Limenitis iphicleola", + "5132003": "Limenitis malea", + "5132008": "Limenitis justina", + "5132078": "Limenitis alala", + "5132079": "Limenitis eulalia", + "5132084": "Limenitis arthemis", + "5132137": "Limenitis cytherea", + "5132154": "Limenitis dudu", + "5132183": "Limenitis populi", + "5132191": "Limenitis helmanni", + "5132221": "Limenitis gelania", + "5132225": "Limenitis zina", + "5132238": "Limenitis doerriesi", + "5132239": "Limenitis lycorias", + "5132246": "Limenitis lorquini", + "5132252": "Limenitis corcyra", + "5132254": "Limenitis pithys", + "5132283": "Limenitis thessalia", + "5132289": "Limenitis zea", + "5132317": "Limenitis fessonia", + "5132346": "Limenitis leucophthalma", + "5132347": "Limenitis phylaca", + "5132360": "Limenitis serpa", + "5132374": "Limenitis mesentina", + "5132398": "Limenitis archippus", + "5132429": "Limenitis cocala", + "5132440": "Limenitis syma", + "5132446": "Limenitis melanthe", + "5132461": "Limenitis weidemeyerii", + "5132479": "Limenitis sydyi", + "5132483": "Limenitis plesaure", + "5132505": "Limenitis arthemis", + "5132523": "Pseudonympha detecta", + "5132529": "Pseudonympha magoides", + "5132540": "Pseudonympha magus", + "5132545": "Cymothoe alcimeda", + "5132550": "Cymothoe caenis", + "5132591": "Cymothoe egesta", + "5132713": "Cymothoe herminia", + "5132839": "Salamis cacta", + "5132917": "Euptychia westwoodii", + "5132940": "Euptychia gemma", + "5132956": "Euptychia pyracmon", + "5132973": "Euptychia areolatus", + "5133008": "Euptychia terrestris", + "5133009": "Euptychia cymela", + "5133035": "Anetia thirza", + "5133051": "Coelites epiminthia", + "5133087": "Danaus", + "5133088": "Danaus plexippus", + "5133142": "Morpho amathonte", + "5133251": "Morpho polyphemus", + "5133255": "Morpho achilles", + "5133265": "Morpho helenor", + "5133366": "Morpho aega", + "5133451": "Morpho deidamia", + "5133503": "Morpho epistrophus", + "5133523": "Morpho menelaus", + "5133565": "Lycorea halia", + "5133568": "Lycorea isabella", + "5133581": "Aeria eurimedia", + "5133589": "Aeria olena", + "5133591": "Marpesia orsilochus", + "5133595": "Marpesia chiron", + "5133609": "Marpesia merops", + "5133610": "Marpesia camillus", + "5133615": "Marpesia themistocles", + "5133621": "Marpesia petreus", + "5133622": "Marpesia crethon", + "5133623": "Marpesia furcula", + "5133634": "Marpesia marcella", + "5133635": "Marpesia berania", + "5133637": "Marpesia harmonia", + "5133687": "Ariadne merione", + "5133689": "Ariadne ariadne", + "5133693": "Sephisa princeps", + "5133695": "Sephisa chandra", + "5133736": "Hypothyris euclea", + "5133786": "Hypothyris ninonia", + "5133864": "Boloria epithore", + "5133920": "Boloria sipora", + "5133990": "Boloria caucasica", + "5134098": "Satyrus briseis", + "5134301": "Satyrus actaea", + "5134469": "Erebia euryale", + "5134517": "Erebia discoidalis", + "5134543": "Erebia alberganus", + "5134559": "Erebia fasciata", + "5134569": "Erebia eriphyle", + "5134583": "Erebia palarica", + "5134607": "Erebia gorgone", + "5134621": "Erebia zapateri", + "5134659": "Erebia montanus", + "5134661": "Erebia youngi", + "5134667": "Erebia embla", + "5134682": "Erebia ligea", + "5134686": "Erebia epistygne", + "5134687": "Erebia vidleri", + "5134693": "Erebia mancinus", + "5134759": "Erebia epipsodea", + "5134810": "Erebia theano", + "5134815": "Erebia manto", + "5134837": "Erebia melampus", + "5134884": "Erebia nivalis", + "5135026": "Erebia niphonica", + "5135191": "Erebia aethiops", + "5135355": "Erebia rossii", + "5135400": "Maniola", + "5135513": "Maniola jurtina", + "5135546": "Maniola telmessia", + "5135573": "Acraea esebria", + "5135643": "Acraea violae", + "5135839": "Acraea andromacha", + "5135944": "Acraea rahira", + "5136059": "Acraea igola", + "5136113": "Acraea horta", + "5136200": "Acraea cabira", + "5136306": "Acraea neobule", + "5136372": "Haetera piera", + "5136514": "Euploea eleusina", + "5136594": "Euploea sylvester", + "5136681": "Euploea mulciber", + "5136713": "Euploea core", + "5136752": "Euploea klugii", + "5136790": "Euploea algea", + "5136866": "Euploea eyndhovii", + "5136868": "Euploea darchia", + "5136939": "Euploea tulliolus", + "5137022": "Euploea climena", + "5137085": "Euploea eunice", + "5137086": "Euploea hewitsonii", + "5137128": "Euploea eichhorni", + "5137156": "Euploea radamanthus", + "5137166": "Euploea midamus", + "5137257": "Euploea corinna", + "5137291": "Euploea crameri", + "5137330": "Euploea phaenareta", + "5137388": "Erites argentina", + "5137397": "Sallya natalensis", + "5137408": "Bia actorion", + "5137511": "Neophasia menapia", + "5137512": "Neophasia terlooii", + "5137540": "Ascia monuste", + "5137553": "Enantia lina", + "5137573": "Colias heos", + "5137578": "Colias erate", + "5137582": "Colias palaeno", + "5137588": "Colias lesbia", + "5137593": "Colias dimera", + "5137595": "Colias hecla", + "5137601": "Colias occidentalis", + "5137605": "Colias fieldii", + "5137608": "Colias vauthierii", + "5137612": "Colias croceus", + "5137615": "Colias harfordii", + "5137626": "Colias behrii", + "5137636": "Colias tyche", + "5137659": "Colias scudderi", + "5137663": "Colias electo", + "5137664": "Colias interior", + "5137672": "Colias philodice", + "5137674": "Colias alexandra", + "5137677": "Colias chrysotheme", + "5137679": "Colias meadii", + "5137682": "Colias aurorina", + "5137689": "Colias nastes", + "5137693": "Colias canadensis", + "5137694": "Colias eurytheme", + "5137695": "Colias phicomone", + "5137700": "Colias gigantea", + "5137706": "Colias hyale", + "5137708": "Colias myrmidone", + "5137711": "Colias pelidne", + "5137714": "Colias christina", + "5137747": "Ixias marianne", + "5137748": "Ixias pyrene", + "5137763": "Aporia agathon", + "5137790": "Pontia glauconome", + "5137791": "Pontia occidentalis", + "5137799": "Pontia helice", + "5137800": "Pontia protodice", + "5137802": "Pontia beckerii", + "5137803": "Pontia sisymbrii", + "5137808": "Eurema blanda", + "5137817": "Eurema mexicana", + "5137819": "Eurema daira", + "5137823": "Eurema andersoni", + "5137827": "Eurema floricola", + "5137828": "Eurema brigitta", + "5137832": "Eurema laeta", + "5137833": "Eurema alitha", + "5137842": "Eurema herla", + "5137847": "Eurema sari", + "5137849": "Eurema hecabe", + "5137850": "Eurema smilax", + "5137851": "Eurema elathea", + "5137854": "Eurema puella", + "5137858": "Eurema simulatrix", + "5137861": "Leptosia nina", + "5137863": "Leptosia alcesta", + "5137882": "Pieris oleracea", + "5137889": "Pieris melete", + "5137890": "Pieris virginiensis", + "5137891": "Pieris canidia", + "5137894": "Pieris marginalis", + "5137902": "Leptidea duponcheli", + "5137903": "Leptidea sinapis", + "5137908": "Leptidea morsei", + "5137912": "Leptidea amurensis", + "5137920": "Appias indra", + "5137926": "Appias libythea", + "5137929": "Appias melania", + "5137932": "Appias olferna", + "5137935": "Appias lalage", + "5137938": "Appias lyncida", + "5137945": "Appias nero", + "5137946": "Appias albina", + "5137949": "Appias paulina", + "5137955": "Appias zarinda", + "5137969": "Eroessa chiliensis", + "5137988": "Mylothris rueppellii", + "5137996": "Mylothris chloris", + "5137998": "Mylothris agathina", + "5138069": "Danis danis", + "5138200": "Loxura atymnus", + "5138257": "Logania marmorata", + "5138298": "Plebejus sephirus", + "5138387": "Plebejus saepiolus", + "5138492": "Plebejus hesperica", + "5138543": "Plebejus amandus", + "5138561": "Plebejus argus", + "5138602": "Plebejus lupini", + "5138681": "Nordmannia ilicis", + "5138701": "Phasis thero", + "5138732": "Jalmenus evagoras", + "5138743": "Jalmenus icilius", + "5138841": "Cupido cissus", + "5138921": "Cupido nubifer", + "5138929": "Cupido nisa", + "5138967": "Ogyris amaryllis", + "5138984": "Ogyris olane", + "5139026": "Satyrium semiluna", + "5139029": "Satyrium calanus", + "5139034": "Sandia mcfarlandi", + "5139040": "Freyeria trochylus", + "5139050": "Freyeria putli", + "5139064": "Cyaniris neglecta", + "5139156": "Cyaniris semiargus", + "5139188": "Myrina dermaptera", + "5139201": "Myrina silenus", + "5139309": "Lycaena panava", + "5139339": "Lycaena asabinus", + "5139346": "Lycaena heteronea", + "5139357": "Lycaena edna", + "5139524": "Lycaena tama", + "5139540": "Lycaena editha", + "5139578": "Lycaena cyna", + "5139673": "Lycaena boldenarum", + "5139700": "Lycaena mariposa", + "5139864": "Evenus regalis", + "5139897": "Eumaeus childrenae", + "5139898": "Eumaeus godartii", + "5139908": "Eumaeus toxea", + "5139909": "Eumaeus atala", + "5139914": "Lucia limbaria", + "5139915": "Lucia epeus", + "5139928": "Cycnus phaleros", + "5139954": "Spindasis ella", + "5139990": "Spindasis vulcanus", + "5140006": "Spindasis natalensis", + "5140033": "Leptotes cassius", + "5140054": "Leptotes cassius", + "5140056": "Leptotes trigemmatus", + "5140063": "Leptotes marina", + "5140214": "Polyommatus icarus", + "5140244": "Polyommatus eros", + "5140436": "Polyommatus daphnis", + "5140443": "Polyommatus ottomana", + "5140534": "Drupadia ravindra", + "5140561": "Drupadia theda", + "5140603": "Helicopis gnidus", + "5140627": "Helicopis cupido", + "5140969": "Thisbe irenea", + "5140980": "Thisbe lycorias", + "5141085": "Hades noctula", + "5141144": "Graphium eurous", + "5141154": "Graphium evemon", + "5141163": "Graphium macareus", + "5141170": "Graphium colonna", + "5141172": "Graphium ramaceus", + "5141177": "Graphium eurypylus", + "5141179": "Graphium antiphates", + "5141185": "Graphium chironides", + "5141187": "Graphium agamemnon", + "5141188": "Graphium milon", + "5141195": "Graphium antheus", + "5141197": "Graphium bathycles", + "5141198": "Graphium androcles", + "5141199": "Graphium cloanthus", + "5141202": "Graphium arycles", + "5141207": "Graphium meyeri", + "5141212": "Graphium sarpedon", + "5141215": "Graphium agetes", + "5141216": "Graphium policenes", + "5141226": "Graphium doson", + "5141229": "Graphium megarus", + "5141230": "Graphium rhesus", + "5141233": "Graphium xenocles", + "5141234": "Graphium porthaon", + "5141236": "Graphium delesserti", + "5141242": "Graphium nomius", + "5141248": "Graphium leonidas", + "5141250": "Graphium angolanus", + "5141252": "Graphium weiskei", + "5141254": "Graphium aristeus", + "5141261": "Zerynthia", + "5141262": "Zerynthia polyxena", + "5141288": "Zerynthia cretica", + "5141291": "Zerynthia cerisy", + "5141297": "Zerynthia rumina", + "5141305": "Zerynthia deyrollei", + "5141311": "Lamproptera meges", + "5141317": "Lamproptera curius", + "5141321": "Battus ingenuus", + "5141324": "Battus polydamas", + "5141331": "Battus crassus", + "5141333": "Battus laodamas", + "5141340": "Battus polystictus", + "5141342": "Battus philenor", + "5141344": "Tetragonus catamitus", + "5141493": "Sesia apiformis", + "5141501": "Sesia bembeciformis", + "5141581": "Phycodes minor", + "5141590": "Phycodes limata", + "5141643": "Odina hieroglyphica", + "5141650": "Euschemon rafflesia", + "5141662": "Xenophanes tryxus", + "5141677": "Heteropterus morpheus", + "5141697": "Hesperopsis alpheus", + "5141743": "Cogia hippalus", + "5141763": "Polythrix octomaculata", + "5141795": "Mooreana trichoneura", + "5141913": "Quadrus lugubris", + "5141924": "Choaspes benjaminii", + "5142001": "Baracus hampsoni", + "5142006": "Syrichtus alta", + "5142032": "Syrichtus tessellum", + "5142042": "Syrichtus cribrellum", + "5142061": "Atrytone logan", + "5142062": "Atrytone arogos", + "5142067": "Badamia exclamationis", + "5142086": "Myscelus epigona", + "5142130": "Metisella malgacha", + "5142160": "Metisella metis", + "5142166": "Mysoria affinis", + "5142175": "Mysoria amra", + "5142176": "Mysoria barcastus", + "5142213": "Unkana ambasa", + "5142228": "Hesperia", + "5142249": "Hesperia attalus", + "5142254": "Hesperia nevada", + "5142267": "Hesperia viridis", + "5142269": "Hesperia sassacus", + "5142273": "Hesperia leonardus", + "5142278": "Hesperia lindseyi", + "5142283": "Hesperia colorado", + "5142298": "Hesperia metea", + "5142300": "Hesperia juba", + "5142314": "Hesperia meskei", + "5142317": "Hesperia columbia", + "5142319": "Hesperia uncas", + "5142322": "Hesperia woodgatei", + "5142328": "Hesperia pahaska", + "5142338": "Gegenes nostrodamus", + "5142352": "Gegenes pumilio", + "5142358": "Lychnuchus celsus", + "5142372": "Pyrgus ruralis", + "5142394": "Pyrgus carthami", + "5142424": "Pyrgus communis", + "5142436": "Pyrgus oileus", + "5142499": "Pyrgus maculatus", + "5142583": "Pyrgus scriptura", + "5142599": "Pyrgus melotis", + "5142691": "Notocrypta", + "5142725": "Notocrypta curvifascia", + "5142729": "Notocrypta feisthamelii", + "5142730": "Notocrypta paralysos", + "5142749": "Notocrypta waigensis", + "5142822": "Hylephila signata", + "5142825": "Hylephila fasciolata", + "5142829": "Helias phalaenoides", + "5142842": "Thyatira mexicana", + "5142870": "Thyatira batis", + "5142903": "Falcaria bilineata", + "5142948": "Phalacra strigata", + "5143007": "Tethea consimilis", + "5143048": "Tethea ocularis", + "5143049": "Tethea oberthueri", + "5143076": "Cyclidia orciferaria", + "5143080": "Cyclidia substigmaria", + "5143107": "Drepana arcuata", + "5143116": "Drepana pallida", + "5143129": "Drepana falcataria", + "5143147": "Drepana curvatula", + "5143232": "Urania fulgens", + "5143234": "Urania leilus", + "5143241": "Acropteris ciniferaria", + "5143249": "Acropteris iphiata", + "5143266": "Acropteris leptaliata", + "5143279": "Alcides metaurus", + "5143284": "Nothus empedocles", + "5143285": "Nothus lunus", + "5143303": "Psyra conferta", + "5143311": "Psyra matsumurai", + "5143315": "Psyra spurcataria", + "5143338": "Alcis taiwanensis", + "5143354": "Alcis admissaria", + "5143368": "Alcis ectogramma", + "5143380": "Alcis repandata", + "5143384": "Alcis maculata", + "5143437": "Alcis pallens", + "5143453": "Alcis deversata", + "5143477": "Alcis jubata", + "5143506": "Alcis inchoata", + "5143511": "Alcis plebeia", + "5143525": "Alcis semiusta", + "5143575": "Alcis scortea", + "5143586": "Microdes epicryptis", + "5143651": "Hylaea fasciaria", + "5143657": "Cabera erythemaria", + "5143675": "Cabera exanthemata", + "5143697": "Cabera pusaria", + "5143703": "Cabera variolaria", + "5143944": "Alsophila aceraria", + "5143947": "Alsophila aescularia", + "5143952": "Alsophila pometaria", + "5143960": "Sicya morsicaria", + "5143964": "Sicya macularia", + "5144027": "Episteira nigrilinearia", + "5144092": "Problepsis vulgaris", + "5144093": "Problepsis albidior", + "5144115": "Problepsis sancta", + "5144129": "Problepsis clemens", + "5144176": "Mesoleuca", + "5144190": "Mesoleuca albicillata", + "5144196": "Mesoleuca gratulata", + "5144204": "Melanodes anthracitaria", + "5144227": "Selenia kentaria", + "5144318": "Selenia alciphearia", + "5144345": "Prochasma squalida", + "5144353": "Apodasmia rufonigraria", + "5144363": "Paragonia cruraria", + "5144381": "Phigalia denticulata", + "5144386": "Phigalia titea", + "5144407": "Phigalia strigataria", + "5144424": "Lobophora nivigerata", + "5144426": "Lobophora halterata", + "5144431": "Timandra convectaria", + "5144438": "Timandra synthaca", + "5144457": "Timandra amaturaria", + "5144472": "Timandra correspondens", + "5144499": "Jankowskia taiwanensis", + "5144505": "Cryphaea xylina", + "5144534": "Geometra papilionaria", + "5144543": "Siona lineata", + "5144553": "Lobus lithinopa", + "5144554": "Sestra humeraria", + "5144558": "Sestra flexata", + "5144564": "Tetracis crocallata", + "5144575": "Tetracis cachexiata", + "5144583": "Caripeta aequaliaria", + "5144588": "Caripeta piniata", + "5144593": "Caripeta divisata", + "5144596": "Caripeta angustiorata", + "5144597": "Caripeta aretaria", + "5144633": "Phallaria ophiusaria", + "5144677": "Scopula nigropunctata", + "5144691": "Scopula nigrinotata", + "5144721": "Scopula incanata", + "5144729": "Scopula ancellata", + "5144782": "Scopula decorata", + "5144787": "Scopula tessellaria", + "5144805": "Scopula ornata", + "5144806": "Scopula emissaria", + "5144864": "Scopula propinquaria", + "5144870": "Scopula ordinata", + "5144880": "Scopula submutata", + "5144900": "Scopula marginepunctata", + "5144935": "Scopula cacuminaria", + "5144936": "Scopula yamanei", + "5144937": "Scopula rubraria", + "5144942": "Scopula optivata", + "5144953": "Scopula junctaria", + "5144976": "Scopula sublinearia", + "5145009": "Scopula immutata", + "5145075": "Scopula opicata", + "5145078": "Scopula plantagenaria", + "5145079": "Scopula lydia", + "5145136": "Scopula ternata", + "5145139": "Scopula benitaria", + "5145186": "Scopula rubiginata", + "5145238": "Scopula aemulata", + "5145255": "Scopula luridata", + "5145260": "Scopula immorata", + "5145269": "Scopula virgulata", + "5145396": "Scopula addictaria", + "5145409": "Scopula floslactata", + "5145422": "Scopula perlata", + "5145466": "Scopula compensata", + "5145468": "Scopula inscriptata", + "5145495": "Scopula desita", + "5145502": "Scopula minorata", + "5145503": "Scopula hypochra", + "5145521": "Scopula limboundata", + "5145522": "Scopula flaccidaria", + "5145547": "Scopula quadrilineata", + "5145560": "Scopula umbilicata", + "5145624": "Scopula fibulata", + "5145713": "Scopula lautaria", + "5145729": "Scopula subpunctaria", + "5145735": "Scopula mecysma", + "5145842": "Scopula guancharia", + "5145870": "Perizoma sagittata", + "5145965": "Perizoma taeniata", + "5145998": "Perizoma custodiata", + "5146030": "Perizoma curvilinea", + "5146038": "Perizoma fasciaria", + "5146062": "Perizoma seriata", + "5146082": "Perizoma costiguttata", + "5146091": "Perizoma epictata", + "5146179": "Heterusia atalantata", + "5146253": "Heterusia quadruplicaria", + "5146262": "Gastrina cristaria", + "5146282": "Berta rugosivalva", + "5146294": "Cymatoplex halcyone", + "5146303": "Hydrelia bicolorata", + "5146305": "Hydrelia inornata", + "5146326": "Hydrelia condensata", + "5146335": "Hydrelia sericea", + "5146342": "Hydrelia sylvata", + "5146379": "Hydrelia flammeolaria", + "5146389": "Hydrelia albifera", + "5146397": "Plemyria", + "5146412": "Plemyria rubiginata", + "5146420": "Idaea carvalhoi", + "5146426": "Idaea pilosata", + "5146434": "Idaea impexa", + "5146440": "Idaea predotaria", + "5146456": "Idaea uniformis", + "5146472": "Idaea philocosma", + "5146476": "Idaea distinctaria", + "5146483": "Idaea phaeocrossa", + "5146496": "Idaea sylvestraria", + "5146497": "Idaea pervertipennis", + "5146508": "Idaea craspedota", + "5146510": "Idaea laevigata", + "5146525": "Idaea figuraria", + "5146528": "Idaea nitidata", + "5146559": "Idaea aversata", + "5146566": "Idaea costiguttata", + "5146567": "Idaea sugillata", + "5146578": "Idaea costaria", + "5146598": "Idaea violacearia", + "5146599": "Idaea rufaria", + "5146601": "Idaea camparia", + "5146608": "Idaea violacea", + "5146611": "Idaea humiliata", + "5146651": "Idaea joannisiata", + "5146659": "Idaea serpentata", + "5146677": "Idaea dimidiata", + "5146693": "Idaea calunetaria", + "5146719": "Idaea nephelota", + "5146720": "Idaea hispanaria", + "5146746": "Idaea paraula", + "5146752": "Idaea macrospila", + "5146762": "Idaea aureolaria", + "5146763": "Idaea vacillata", + "5146774": "Idaea attenuaria", + "5146786": "Idaea urcitana", + "5146805": "Idaea inversata", + "5146815": "Idaea helianthemata", + "5146820": "Idaea asceta", + "5146832": "Idaea bonifata", + "5146833": "Idaea sericeata", + "5146837": "Idaea subsericeata", + "5146842": "Idaea macilentaria", + "5146852": "Idaea rhodogrammaria", + "5146856": "Idaea inductata", + "5146862": "Idaea dilutaria", + "5146880": "Idaea halmaea", + "5146883": "Idaea pallidata", + "5146894": "Idaea intermedia", + "5146899": "Idaea lutulentaria", + "5146908": "Idaea eugeniata", + "5146920": "Idaea subsaturata", + "5146927": "Idaea lusohispanica", + "5146937": "Idaea eretmopus", + "5146946": "Idaea deversaria", + "5146961": "Idaea biselata", + "5147002": "Idaea typicata", + "5147018": "Idaea gemmata", + "5147030": "Idaea consanguinaria", + "5147038": "Idaea rubraria", + "5147039": "Idaea seriata", + "5147041": "Idaea consanguiberica", + "5147043": "Idaea ostrinaria", + "5147046": "Idaea trypheropa", + "5147058": "Idaea longaria", + "5147062": "Idaea muricata", + "5147071": "Idaea bigladiata", + "5147099": "Idaea alyssumata", + "5147109": "Idaea trissorma", + "5147114": "Idaea scintillularia", + "5147121": "Idaea punctatissima", + "5147139": "Idaea celtima", + "5147145": "Idaea belemiata", + "5147150": "Idaea inquinata", + "5147155": "Idaea litigiosaria", + "5147160": "Idaea coercita", + "5147165": "Idaea alicantaria", + "5147171": "Idaea moniliata", + "5147179": "Idaea basinta", + "5147193": "Idaea fuscovenosa", + "5147208": "Idaea straminata", + "5147211": "Idaea demissaria", + "5147212": "Idaea incisaria", + "5147214": "Idaea ptyonopoda", + "5147225": "Idaea pseliota", + "5147232": "Idaea trigeminata", + "5147245": "Idaea emarginata", + "5147259": "Idaea sardoniata", + "5147287": "Idaea deitanaria", + "5147306": "Idaea chotaria", + "5147319": "Idaea infirmaria", + "5147354": "Idaea ochrata", + "5147395": "Idaea fractilineata", + "5147415": "Idaea elongaria", + "5147437": "Idaea cervantaria", + "5147441": "Idaea degeneraria", + "5147478": "Idaea rusticata", + "5147492": "Idaea obsoletaria", + "5147498": "Idaea egenaria", + "5147513": "Idaea incalcarata", + "5147516": "Idaea politaria", + "5147522": "Idaea simplex", + "5147534": "Idaea flaveolaria", + "5147560": "Idaea efflorata", + "5147608": "Trichopteryx carpinata", + "5147638": "Trichopteryx polycommata", + "5147681": "Lycia hirtaria", + "5147703": "Lycia ypsilon", + "5147713": "Lycia ursaria", + "5147794": "Anthometra plumularia", + "5147819": "Venusia lineata", + "5147827": "Venusia cambrica", + "5147834": "Venusia blomeri", + "5147838": "Venusia comptaria", + "5147858": "Venusia pearsalli", + "5147868": "Euchlaena marginaria", + "5147871": "Euchlaena johnsonaria", + "5147879": "Euchlaena amoenaria", + "5147883": "Euchlaena muzaria", + "5147894": "Euchlaena madusaria", + "5147898": "Euchlaena serrata", + "5147899": "Euchlaena irraria", + "5147909": "Euchlaena tigrinaria", + "5147917": "Cleora injectaria", + "5147923": "Cleora displicata", + "5147930": "Cleora goldfinchi", + "5147968": "Cleora fraterna", + "5148043": "Cleora contiguata", + "5148055": "Cleora alienaria", + "5148066": "Cleora decisaria", + "5148096": "Cleora scriptaria", + "5148097": "Cleora illustraria", + "5148115": "Cleora leucophaea", + "5148184": "Cleora sublunaria", + "5148214": "Cleora repetita", + "5148223": "Cleora sabulata", + "5148247": "Theria rupicapraria", + "5148248": "Theria primaria", + "5148252": "Hastina subfalcaria", + "5148264": "Oar reaumuraria", + "5148277": "Chlorochlamys phyllinaria", + "5148280": "Chlorochlamys appellaria", + "5148286": "Pelurga comitata", + "5148379": "Thera contractata", + "5148394": "Thera vetustata", + "5148424": "Thera britannica", + "5148436": "Thera variata", + "5148462": "Thera juniperata", + "5148475": "Thera cupressata", + "5148486": "Thera cognata", + "5148487": "Thera obeliscata", + "5148520": "Eutrapela clemataria", + "5148531": "Iridopsis humaria", + "5148544": "Iridopsis larvaria", + "5148576": "Iridopsis emasculatum", + "5148593": "Iridopsis validaria", + "5148719": "Pero morrisonaria", + "5148743": "Pero honestaria", + "5148753": "Pero behrensaria", + "5148766": "Pero ancetaria", + "5148850": "Pero mizon", + "5148934": "Pero radiosaria", + "5148952": "Pero meskaria", + "5148954": "Pero zalissaria", + "5149012": "Heterolocha coccinea", + "5149081": "Dysphania percota", + "5149136": "Dysphania subrepleta", + "5149174": "Dysphania militaris", + "5149182": "Dysphania numana", + "5149203": "Dysphania sagana", + "5149222": "Epimecis puellaria", + "5149237": "Epimecis hortaria", + "5149307": "Eustroma semiatrata", + "5149308": "Eustroma melancholica", + "5149315": "Eustroma reticulata", + "5149317": "Cymatophora approximaria", + "5149369": "Oenochroma vinaria", + "5149370": "Oenochroma infantilis", + "5149371": "Oenochroma pallida", + "5149387": "Oenochroma vetustaria", + "5149414": "Lomaspilis opis", + "5149438": "Lomaspilis marginata", + "5149474": "Aplasta ononaria", + "5149499": "Entephria caesiata", + "5149569": "Entephria cyanata", + "5149609": "Hyperythra lutea", + "5149630": "Metanema determinata", + "5149631": "Metanema inatomaria", + "5149659": "Cyclophora porata", + "5149664": "Cyclophora maderensis", + "5149665": "Cyclophora punctaria", + "5149667": "Cyclophora suppunctaria", + "5149704": "Cyclophora pendularia", + "5149713": "Cyclophora packardi", + "5149717": "Cyclophora lennigiaria", + "5149746": "Cyclophora albipunctata", + "5149753": "Cyclophora nanaria", + "5149768": "Cyclophora annularia", + "5149777": "Cyclophora myrtaria", + "5149780": "Cyclophora albiocellaria", + "5149782": "Cyclophora dataria", + "5149784": "Cyclophora ruficiliaria", + "5149787": "Cyclophora puppillaria", + "5149811": "Cyclophora coecaria", + "5149819": "Cyclophora pendulinaria", + "5149820": "Cyclophora quercimontaria", + "5149836": "Stegania cararia", + "5149839": "Stegania trimaculata", + "5149843": "Stegania dilectaria", + "5149873": "Gymnoscelis lophopus", + "5149880": "Gymnoscelis derogata", + "5149929": "Gymnoscelis subpumilata", + "5149940": "Gymnoscelis spodias", + "5149941": "Gymnoscelis ischnophylla", + "5149986": "Gymnoscelis tristrigosa", + "5150002": "Macrosoma lucivittata", + "5150027": "Macrosoma rubedinaria", + "5150053": "Hexeris enhydris", + "5150092": "Thyris maculata", + "5318": "Dalceridae", + "5320": "Douglasiidae", + "5333": "Palaephatidae", + "5336": "Pyralidae", + "5338": "Roeslerstammiidae", + "5339": "Sematuridae", + "5340": "Sesiidae", + "5343": "Tortricidae", + "5345": "Ypsolophidae", + "5430609": "Bustilloxia", + "5430630": "Cleoceris", + "5473": "Lycaenidae", + "5474": "Limacodidae", + "5481": "Pieridae", + "5487": "Gracillariidae", + "5714299": "Danaus gilippus", + "5714302": "Danaus eresimus", + "5714312": "Limenitis basiloides", + "5714333": "Limenitis weidemeyerii", + "5714356": "Polygonia satyrus", + "5714361": "Polygonia oreas", + "5714367": "Vanessa tameamea", + "5714369": "Vanessa annabella", + "5714410": "Boloria kriemhild", + "5714507": "Erebia pawloskii", + "5714558": "Sesia hyllus", + "5714572": "Sesia helloides", + "5714575": "Sesia epixanthe", + "5714600": "Sesia rubidus", + "5714618": "Lycaena cupreus", + "5714679": "Plebejus acmon", + "5714680": "Plebejus argyrognomon", + "5714689": "Plebejus fridayi", + "5714747": "Satyrium edwardsii", + "5714755": "Satyrium behrii", + "5714788": "Satyrium liparops", + "5714819": "Eurema boisduvaliana", + "5714914": "Pieris angelika", + "5714951": "Xestia perquiritata", + "5714973": "Xestia c-nigrum", + "5714984": "Xestia elimata", + "5714994": "Xestia dolosa", + "5715004": "Xestia speciosa", + "5715009": "Cerastis salicarum", + "5715010": "Cerastis fishii", + "5715013": "Cerastis enigmatica", + "5715127": "Hylephila phyleus", + "5715275": "Plemyria georgii", + "5715276": "Mesoleuca ruficillata", + "5715277": "Anticlea vasiliata", + "5715278": "Anticlea multiferata", + "5715280": "Malacosoma americana", + "5715281": "Malacosoma californica", + "5734138": "Soritia strandi", + "5734146": "Andraca theae", + "5734212": "Nosophora taihokualis", + "5734235": "Mesophalera speratus", + "5734268": "Tongeia hainani", + "5734291": "Loepa mirandula", + "5734305": "Nordstromia semililacina", + "5734326": "Horipsestis aenea", + "5734335": "Alcis taiwanovariegata", + "5734344": "Chlorissa arcana", + "5734345": "Lomographa percnosticta", + "5734349": "Hydatocapnia gemina", + "5734362": "Micronidia intermedia", + "5734379": "Lassaba parvalbidaria", + "5734388": "Heterothera sororcula", + "5734390": "Aethalura duplicata", + "5734396": "Deileptenia rimosaria", + "5734398": "Xenoplia trivialis", + "5734405": "Psilalcis pulveraria", + "5734420": "Entomopteryx rubridisca", + "5734422": "Cyclophora taiwana", + "5734448": "Percnia suffusa", + "5734451": "Menophra anaplagiata", + "5734481": "Antipercnia", + "5734482": "Antipercnia cordiforma", + "5734515": "Chorodna creataria", + "5734519": "Hypomecis obliquisigna", + "5734528": "Rikiosatoa fucataria", + "5734535": "Lophophelma taiwana", + "5734539": "Biston perclara", + "5734542": "Amblychia moltrechti", + "5734543": "Amblychia sauteri", + "5734556": "Phrixolepia inouei", + "5734560": "Narosoideus vulpina", + "5734569": "Papilio hopponis", + "5734640": "Athymoris subtrigona", + "5734645": "Nosphistica bisinuata", + "5734655": "Lymantria umbrifera", + "5734657": "Lymantria sugii", + "5734665": "Potanthus motzui", + "5734713": "Rhagastis binoculata", + "5734719": "Pentateucha inouei", + "5734720": "Phaudidae", + "5734744": "Mythimna subplacida", + "5734817": "Callopistria delicata", + "5734845": "Xestia yamanei", + "5734891": "Arguda horishana", + "5734897": "Bharetta owadai", + "5734900": "Amsactoides solitaria", + "5734901": "Eospilarctia formosana", + "5768597": "Bustilloxia saturata", + "5768880": "Cidaria fulvata", + "5769028": "Cleora cinctaria", + "5769062": "Agriopis leucophaearia", + "5769068": "Agriopis marginaria", + "5769072": "Agriopis aurantiaria", + "5769164": "Choreutis pariana", + "5769191": "Malacosoma castrense", + "5769272": "Pharmacis fusconebulosa", + "5769709": "Stigmella aurella", + "5770913": "Dafa sulphurella", + "5770922": "Denisia stipella", + "5770942": "Denisia similella", + "5771227": "Ancylis obtusana", + "5771229": "Ancylis selenana", + "5771230": "Ancylis tineana", + "5771232": "Ancylis unguicella", + "5771236": "Ancylis geminana", + "5771239": "Ancylis myrtillana", + "5771241": "Ancylis subarcuana", + "5771243": "Ancylis unculana", + "5771249": "Ancylis diminutana", + "5771255": "Ancylis sparulana", + "5771256": "Ancylis uncella", + "5771258": "Ancylis upupana", + "5771259": "Ancylis apicella", + "5771350": "Eucosma campoliliana", + "5771357": "Spilonota laricana", + "5771877": "Diaphania indica", + "5771880": "Stenia stigmosalis", + "5771982": "Macrochilo cribrumalis", + "5772063": "Acontia trabealis", + "5772129": "Lamprotes caureum", + "5772169": "Mythimna unipuncta", + "5772171": "Mythimna languida", + "5772172": "Mythimna l-album", + "5772176": "Mythimna ferrago", + "5772178": "Mythimna albipuncta", + "5772180": "Mythimna litoralis", + "5772186": "Mythimna sicula", + "5772196": "Mythimna pallens", + "5772199": "Mythimna conigera", + "5772202": "Mythimna pudorina", + "5772205": "Mythimna straminea", + "5772206": "Mythimna vitellina", + "5772210": "Mythimna impura", + "5772222": "Leucania loreyi", + "5772269": "Ammoconia caecimacula", + "5772309": "Chloantha hyperici", + "5772349": "Xestia ditrapezium", + "5772351": "Xestia triangulum", + "5772446": "Polia hepatica", + "5772702": "Polyommatus nivescens", + "5772749": "Polyommatus fabressei", + "5772890": "Boloria dia", + "5772948": "Erebia montana", + "5792081": "Idea iasonia", + "5792092": "Lycaena bleusei", + "5802248": "Euchaetis metallota", + "5802256": "Euchaetis rhizobola", + "5802257": "Euchaetis inceptella", + "5802259": "Euchaetis habrocosma", + "5802331": "Eudonia philerga", + "5802333": "Eudonia sabulosella", + "5802339": "Glyphodes onychinalis", + "5802396": "Mythimna separata", + "5802625": "Zerynthia cassandra", + "5803065": "Graphium macleayanus", + "5803588": "Colias poliographus", + "5804166": "Talbotia naganum", + "5804895": "Leptidea sinapis", + "5804932": "Pieris erutae", + "5805036": "Pieris pseudorapae", + "5805407": "Pieris latouchei", + "5805954": "Eurema mandarina", + "5806127": "Apoda biguttata", + "5806132": "Chlorochlamys chloroleucaria", + "5806166": "Phalanta phalantha", + "5806167": "Danaus genutia", + "5806175": "Vanessa itea", + "5806176": "Vanessa gonerilla", + "5806177": "Vanessa kershawi", + "5806244": "Rothschildia orizaba", + "5806333": "Clania ignobilis", + "5806352": "Endoxyla cinereus", + "5806353": "Endoxyla encalypti", + "5806361": "Aristotelia paradesma", + "5806391": "Jalmenus ictinus", + "5806412": "Leptotes plinius", + "5879654": "Korscheltellus lupulina", + "5880040": "Choreutis basalis", + "5880041": "Choreutis ophiosema", + "5880063": "Kearfottia albifasciella", + "5880147": "Dasystoma salicella", + "5880257": "Elachista albifrontella", + "5880258": "Elachista canapennella", + "5880367": "Stamnodes marmorata", + "5880392": "Comibaena procumbaria", + "5880478": "Parapercnia giraffata", + "5880512": "Macaria artesiaria", + "5880533": "Macaria liturata", + "5880539": "Macaria abydata", + "5880545": "Macaria alternata", + "5880550": "Macaria notata", + "5880552": "Macaria wauaria", + "5880559": "Macaria brunneata", + "5880563": "Macaria signaria", + "5881397": "Danaus ismare", + "5881400": "Danaus erippus", + "5881551": "Apatura chrysolora", + "5881748": "Paryphthimoides poltys", + "5881946": "Ypthima huebneri", + "5882039": "Clossiana improba", + "5882965": "Satyrium w-album", + "5883052": "Arhopala japonica", + "5883255": "Udara albocaerulea", + "5883881": "Hadula trifolii", + "5883914": "Mythimna radiata", + "5883925": "Mythimna decisissima", + "5883985": "Shargacucullia scrophulariae", + "5884188": "Eudocima phalonia", + "5884243": "Thyas juno", + "5884245": "Achaea lienardi", + "5884247": "Achaea serva", + "5884258": "Mocis latipes", + "5884571": "Rhyparia purpurata", + "5884851": "Elophila nymphaeata", + "5884888": "Ectomyelois ceratoniae", + "5885399": "Rhagastis mongoliana", + "5885428": "Callidrepana patrana", + "5925238": "Dione juno", + "5925317": "Orgyia leucostigma", + "5976899": "Axia", + "5976910": "Axia margarita", + "5976937": "Penthesilea sacculalis", + "5976947": "Caloptilia jurateae", + "5977179": "Erynnis persius", + "5977185": "Erynnis telemachus", + "5977197": "Erynnis meridianus", + "5977203": "Erynnis zarucco", + "5977207": "Erynnis brizo", + "5977208": "Erynnis juvenalis", + "5977214": "Erynnis propertius", + "5977216": "Erynnis horatius", + "5977220": "Erynnis baptisiae", + "5977235": "Erynnis afranius", + "5977247": "Erynnis marloyi", + "5977250": "Erynnis icelus", + "5977251": "Erynnis martialis", + "5977257": "Erynnis montanus", + "5977259": "Erynnis tristis", + "5977260": "Erynnis funeralis", + "5977261": "Erynnis lucilius", + "5977262": "Erynnis pacuvius", + "6007566": "Epia", + "6097214": "Diaphora mendica", + "6097224": "Elachista freyerella", + "6097225": "Elachista subalbidella", + "6097228": "Elachista maculicerusella", + "6097233": "Lycia zonaria", + "6097234": "Aphelia viburnana", + "6097235": "Epiblema sticticana", + "6097236": "Triodia sylvina", + "6097254": "Idia calvaria", + "6097260": "Periphanes delphinii", + "6097269": "Wheeleria spilodactylus", + "6099041": "Rhagastis castor", + "6100725": "Danaus affinis", + "6100726": "Danaus melanippus", + "6106647": "Cypoides chinensis", + "6106708": "Theretra indistincta", + "6106744": "Acosmeryx formosana", + "6106759": "Neogurelca hyas", + "6106943": "Samia wangi", + "6112449": "Cyana puella", + "6112472": "Cyana pretoriae", + "6112547": "Popoudina linea", + "6112606": "Nola pascua", + "6112610": "Nola fraterna", + "6112613": "Nola ceylonica", + "6112634": "Nola tineoides", + "6112661": "Nola taeniata", + "6113873": "Eutricha capensis", + "6113959": "Stoermeriana aculeata", + "6115283": "Dysgonia angularis", + "6115388": "Trigonodes hyppasia", + "6115426": "Hypena perspicua", + "6115437": "Hypena conscitalis", + "6115504": "Pericyma atrifusa", + "6115772": "Eublemma rivula", + "6115793": "Eublemma minima", + "6115820": "Eublemma anachoresis", + "6115822": "Eublemma accedens", + "6115830": "Eublemma roseana", + "6115946": "Amyna axis", + "6115953": "Amyna stricta", + "6115973": "Eutelia callichroma", + "6116073": "Acantholipes trimeni", + "6116076": "Acantholipes trajecta", + "6116341": "Mentaxya ignicollis", + "6116368": "Mentaxya albifrons", + "6116413": "Pandesma quenavadi", + "6116440": "Heliothis scutuligera", + "6116646": "Mocis undata", + "6116659": "Mocis conveniens", + "6116661": "Mocis mayeri", + "6116669": "Mocis mutuaria", + "6116674": "Mocis proverai", + "6116699": "Erebus macrops", + "6116754": "Ophiusa dianaris", + "6116898": "Vittaplusia", + "6116899": "Vittaplusia vittata", + "6117055": "Achaea catella", + "6117124": "Achaea echo", + "6117485": "Eudocima apta", + "6118530": "Isturgia deerraria", + "6119299": "Chiasmia subcurvaria", + "6119323": "Chiasmia simplicilinea", + "6119359": "Chiasmia turbulentata", + "6119488": "Chiasmia furcata", + "6120803": "Nacoleia charesalis", + "6120861": "Autocharis jacobsalis", + "6120980": "Lamprophaia ablactalis", + "6121010": "Metoeca foedalis", + "6121184": "Udea ferrugalis", + "6121218": "Salbia haemorrhoidalis", + "6121912": "Lymantria modesta", + "6122092": "Orgyia dubia", + "6122103": "Palasea albimacula", + "6122301": "Laelia fusca", + "6122364": "Cifuna locuples", + "6122527": "Azygophleps inclusa", + "6132546": "Choreutis orthogona", + "6132685": "Spindasis syama", + "6132711": "Dysaethria flavistriga", + "6132712": "Dysaethria quadricaudata", + "6132715": "Dysaethria cretacea", + "6132723": "Pterotosoma castanea", + "6132725": "Phazaca theclata", + "6132726": "Phazaca kosemponicola", + "6132728": "Warreniplema fumicosta", + "6132729": "Chundana emarginata", + "6132749": "Sesamia nigropunctata", + "6132762": "Bagada poliomera", + "6132781": "Niphonyx segregata", + "6132796": "Cruxoruza", + "6132797": "Cruxoruza decorata", + "6132805": "Edessena gentiusalis", + "6132809": "Sypnoides simplex", + "6132824": "Mecodina subcostalis", + "6132825": "Mecodina cineracea", + "6132826": "Plusiodonta coelonota", + "6132841": "Dysgonia praetermissa", + "6132850": "Dysgonia simillima", + "6132861": "Dypterygia subfusca", + "6132868": "Platyja umminia", + "6132869": "Platyja acerces", + "6132880": "Callopistria nobilior", + "6132915": "Eudocima homaena", + "6132916": "Eudocima tyrannus", + "6132917": "Eudocima okurai", + "6132931": "Agrotis taiwana", + "6132936": "Ophiusa trapezium", + "6132938": "Hadennia hisbonalis", + "6132943": "Mythimna pulchra", + "6132950": "Diomea discoinsigna", + "6132953": "Cidariplura gladiata", + "6132957": "Tiracola aureata", + "6132966": "Hypersypnoides punctosa", + "6132967": "Hypersypnoides submarginata", + "6132971": "Adrapsa quadrilinealis", + "6132974": "Adrapsa simplex", + "6132979": "Speiredonia mutabilis", + "6132989": "Dictyestra dissectus", + "6133001": "Diarsia formosensis", + "6133002": "Diarsia nigrosigna", + "6133006": "Diarsia sinuosa", + "6133007": "Diarsia canescens", + "6133010": "Diarsia subtincta", + "6133011": "Thysanoplusia reticulata", + "6133013": "Oglasa costimacula", + "6133026": "Acronicta gigasa", + "6133029": "Sinarella nigrisigna", + "6133033": "Blasticorhinus bifasciata", + "6133046": "Hypena amica", + "6133051": "Hypena albopunctalis", + "6133058": "Simplicia bimarginata", + "6133069": "Hydrillodes gravatalis", + "6133075": "Microxyla confusa", + "6133081": "Paracolax sugii", + "6133083": "Paracolax pryeri", + "6133117": "Eoophyla gibbosalis", + "6133139": "Elophila nigralbalis", + "6133140": "Elophila difflualis", + "6133141": "Elophila turbata", + "6133154": "Chabula acamasalis", + "6133158": "Isocentris filalis", + "6133181": "Hyalobathra coenostolalis", + "6133182": "Hyalobathra brevialis", + "6133225": "Clupeosoma cinerea", + "6133232": "Haritalodes derogata", + "6133241": "Spilarctia clava", + "6133242": "Spilarctia wilemani", + "6133244": "Spilarctia fumida", + "6133248": "Spilarctia postrubida", + "6133252": "Thysanoptyx incurvata", + "6133262": "Notata parva", + "6133263": "Taicallimorpha", + "6133264": "Taicallimorpha albipuncta", + "6133266": "Lemyra fallaciosa", + "6133269": "Lemyra alikangensis", + "6133270": "Lemyra nigricosta", + "6133271": "Lemyra imparilis", + "6133292": "Syntomoides imaon", + "6133297": "Amerila astreus", + "6133311": "Cyana subalba", + "6133312": "Cyana quadripartita", + "6133313": "Cyana formosana", + "6133315": "Cyana propinqua", + "6133317": "Cyana sanguinea", + "6133325": "Hesudra divisa", + "6133340": "Paraspilarctia magna", + "6133343": "Coconympha cyanorma", + "6133397": "Exelastis pumilio", + "6133441": "Arippara indicator", + "6133481": "Phlossa conjuncta", + "6133497": "Orthocabera tinagmaria", + "6133498": "Orthocabera sericea", + "6133500": "Krananda latimarginaria", + "6133501": "Hemistola simplex", + "6133502": "Microcalicha melanosticta", + "6133509": "Tanaorhinus viridiluteata", + "6133513": "Psilalcis menoides", + "6133516": "Yashmakia suffusa", + "6133517": "Harutaea flavizona", + "6133518": "Opisthograptis moelleri", + "6133519": "Tanaoctenia haliaria", + "6133520": "Darisa lampasaria", + "6133523": "Perixera absconditaria", + "6133525": "Perixera illepidaria", + "6133528": "Perixera decretaria", + "6133534": "Xerodes contiguaria", + "6133540": "Mesastrape fulguraria", + "6133542": "Peratostega deletaria", + "6133546": "Calletaera postvittata", + "6133548": "Entomopteryx combusta", + "6133552": "Palaeaspilates ocularia", + "6133559": "Maxates thetydaria", + "6133560": "Hypomecis cineracea", + "6133562": "Pelagodes antiquadraria", + "6133575": "Hypochrosis baenzigeri", + "6133582": "Luxiaria obliquata", + "6133585": "Pareclipsis serrulata", + "6133586": "Uliura infausta", + "6133591": "Comostola pyrrhogona", + "6133593": "Neohipparchus vallata", + "6133595": "Comibaena pictipennis", + "6133596": "Comibaena cassidara", + "6133597": "Comibaena subdelicata", + "6133604": "Lophophleps purpurea", + "6133607": "Trotocraspeda divaricata", + "6133614": "Eustroma contorta", + "6133619": "Plesiomorpha flaviceps", + "6133620": "Axinoptera anticostalis", + "6133635": "Ruttellerona pseudocessaria", + "6133637": "Pachyodes subtrita", + "6133643": "Traminda aventiaria", + "6133644": "Rikiosatoa mavi", + "6133648": "Oxymacaria temeraria", + "6133659": "Argyrocosma inductaria", + "6133667": "Chiasmia intermediaria", + "6133670": "Chiasmia emersaria", + "6133673": "Chiasmia eleonora", + "6133674": "Chiasmia perfusaria", + "6133675": "Chiasmia inchoata", + "6133676": "Herochroma supraviridaria", + "6133680": "Syntypistis comatus", + "6133681": "Syntypistis viridipicta", + "6133684": "Syntypistis umbrosa", + "6133687": "Syntypistis cyanea", + "6133688": "Syntypistis subgeneris", + "6133691": "Euhampsonia formosana", + "6133692": "Mesophalera bruno", + "6133700": "Stauropus alternus", + "6133720": "Ramesa albistriga", + "6133742": "Higena trichosticha", + "6133750": "Semidonta basalis", + "6133753": "Hexafrenum", + "6133769": "Hypolamprus ypsilon", + "6133777": "Beara tortriciformis", + "6133780": "Paracrama angulata", + "6133803": "Meganola triangulalis", + "6133806": "Narangodes confluens", + "6133809": "Nola marginata", + "6133811": "Nola fasciata", + "6133813": "Nola lucidalis", + "6133814": "Nola formosalesa", + "6133858": "Vindula deione", + "6134023": "Calliteara taiwana", + "6134027": "Calliteara arizana", + "6134035": "Ilema kosemponica", + "6165": "Oenosandridae", + "6166": "Opostegidae", + "6196939": "Fraus pteromela", + "6197138": "Nygmia icilia", + "6197200": "Calliteara horsfieldii", + "6198302": "Amata huebneri", + "6201790": "Dicranura ulmi", + "6205994": "Quadrus ulucida", + "6207059": "Pyrausta augustalis", + "6214734": "Stamnodes tessellata", + "6214843": "Isturgia focularia", + "6219423": "Tortrix constrictana", + "6221746": "Speyeria aglaja", + "6228464": "Callizona acesta", + "6229058": "Melitaea deione", + "6231906": "Oeneis glacialis", + "6544581": "Bombyx mandarina", + "6544637": "Ourapteryx yerburii", + "6544687": "Anorthoa munda", + "6757561": "Kearfottia", + "6929": "Immidae", + "6946": "Eriocraniidae", + "6947": "Eriocottidae", + "6948": "Eupterotidae", + "6949": "Galacticidae", + "6950": "Geometridae", + "6951": "Hedylidae", + "6953": "Hesperiidae", + "6954": "Epermeniidae", + "6956": "Epicopeiidae", + "7014": "Nepticulidae", + "7015": "Noctuidae", + "7016": "Notodontidae", + "7017": "Nymphalidae", + "7207679": "Aporia leucodice", + "7236046": "Ancylis", + "7236053": "Charaxes", + "7236059": "Valeria", + "7236069": "Nica", + "7236091": "Nemophora", + "7236092": "Pieris", + "7236098": "Naenia", + "7294": "Drepanidae", + "7297": "Elachistidae", + "7345742": "Mythimna albomarginata", + "7345777": "Pheosiopsis cinerea", + "7345801": "Lophophelma iterans", + "7345811": "Obeidia lucifera", + "7345813": "Obeidia tigrata", + "7345819": "Descoreba simplex", + "7345829": "Celenna festivaria", + "7345843": "Demonarosa rufotessellata", + "7346227": "Spilarctia alba", + "7346231": "Aglaomorpha histrio", + "7346236": "Pogonopygia pavida", + "7346237": "Tristeirometa decussata", + "7346240": "Eucyclodes semialba", + "7346249": "Chiasmia monticolaria", + "7346252": "Psilalcis breta", + "7346256": "Pseudocollix hyperythra", + "7346263": "Micromelalopha baibarana", + "7346271": "Hexafrenum leucodera", + "7346273": "Hexafrenum maculifer", + "7346276": "Syntypistis perdix", + "7346284": "Netria multispinae", + "7346286": "Allodontoides tenebrosa", + "7346301": "Tirumala limniace", + "7346328": "Limenitis sulpitia", + "7346335": "Limenitis dudu", + "7346340": "Neope muirheadii", + "7346344": "Vanessa canace", + "7346346": "Polyura narcaeus", + "7346351": "Bibasis jaina", + "7346354": "Lobocla bifasciatus", + "7346356": "Pseudocoladenia dan", + "7346381": "Lymantria sinica", + "7346382": "Calliteara grotei", + "7346384": "Calliteara lunulata", + "7346401": "Neogurelca himachala", + "7346407": "Zizeeria maha", + "7346417": "Catapaecilma major", + "7346426": "Rapala nissa", + "7346430": "Spalgis epius", + "7346434": "Tongeia filicaudis", + "7346444": "Zizina otis", + "7346446": "Ophiusa disjungens", + "7350238": "Clepsis persicana", + "7354189": "Lysandra hispana", + "7354470": "Uncinus", + "7362601": "Varneria", + "7372375": "Streptopalpia minusculalis", + "7383338": "Condica imitata", + "7384515": "Colocasia", + "7387466": "Agrodiaetus damon", + "7388922": "Mythimna congrua", + "7389824": "Ochlodes sylvanus", + "7390086": "Udara akasa", + "7396517": "Cissusa indiscreta", + "7396883": "Acontia", + "7398419": "Psectrotarsia suavis", + "7400814": "Feltia subterranea", + "7408690": "Arhopala atrax", + "7410701": "Zygaena purpuralis", + "7428726": "Boloria thore", + "7429212": "Agriopis bajaria", + "7431428": "Pyrausta subsequalis", + "7438067": "Apamea remissa", + "7443518": "Cyclophora linearia", + "7444489": "Perigrapha rorida", + "7446048": "Anania stachydalis", + "7448174": "Korscheltellus fusconebulosus", + "7466487": "Clepsis consimilana", + "7472845": "Alucita montana", + "7480993": "Hemeroblemma dolosa", + "7494486": "Bankesia", + "7507369": "Nebula ibericata", + "7509928": "Erebia triarius", + "7510496": "Apatura", + "7514692": "Eusarca", + "7535296": "Idia", + "7535515": "Arctagyrta semivitrea", + "7541913": "Perizoma parallelolineata", + "7543006": "Cnaphalocrocis trapezalis", + "7543161": "Entephria", + "7551965": "Jordanita", + "7555991": "Colostygia aqueata", + "7558165": "Schinia cupes", + "7560807": "Hyperstrotia secta", + "7562564": "Noctuelia floralis", + "7566147": "Carmenta", + "7568341": "Polyphagozerra", + "7586742": "Zygaena rubicundus", + "7588222": "Aphelia unitana", + "7588628": "Calesia", + "7589577": "Tripudia rectangula", + "7593392": "Leucania phragmitidicola", + "7596232": "Wittia sororcula", + "7598729": "Achaea delunaris", + "7598945": "Maliattha synochitis", + "7603634": "Chiomara mithrax", + "7611914": "Eudocima procus", + "7622059": "Pyronia tithonus", + "7623903": "Pharmacis carna", + "7624468": "Drymonia velitaris", + "7624494": "Perizoma verberata", + "7628188": "Ategumia ebulealis", + "7633472": "Hesperia comma", + "7634721": "Polyommatus thersites", + "7641205": "Merrifieldia", + "7642240": "Merrifieldia baliodactylus", + "7642610": "Danaus chrysippus", + "7646066": "Micropterix aruncella", + "7654770": "Cleoceris scoriacea", + "7656811": "Coscinia striata", + "7657419": "Macaria loricaria", + "7657803": "Orgyia recens", + "7659598": "Gnophaela", + "7661023": "Eupoecilia angustana", + "7661785": "Phoebis marcellina", + "7664111": "Polyommatus ripartii", + "7664771": "Polymixis argillaceago", + "7672864": "Hemeroplanis habitalis", + "7673242": "Bostra obsoletalis", + "7674502": "Zygaena loti", + "7680748": "Satyrium abdominalis", + "7681733": "Acasis viretata", + "7683096": "Pyrgus cacaliae", + "7689966": "Condica albigera", + "7700512": "Erebia pluto", + "7700568": "Scopula inductata", + "7701550": "Drasteria cailino", + "7704040": "Eudryas", + "7704258": "Dipterina", + "7712384": "Bryophila ravula", + "7712938": "Ladoga camilla", + "7714017": "Pharmacophagus", + "7716829": "Mocis disseverans", + "7717385": "Enigmogramma basigera", + "7717983": "Ptilocephala plumifera", + "7721234": "Eilema", + "7725644": "Amphipoea fucosa", + "7726809": "Corticea corticea", + "7728366": "Coenonympha arcania", + "7729420": "Strotihypera", + "7733971": "Hypolimnas", + "7734292": "Schreckensteinia festaliella", + "7738295": "Erebia pandrose", + "7739898": "Anania", + "7741315": "Crocota tinctaria", + "7742506": "Heliothis", + "7744105": "Semnia", + "7752082": "Eupithecia tenuiata", + "7753668": "Scopula emutaria", + "7761138": "Zygaena trifolii", + "7762841": "Nymphalis polychloros", + "7764232": "Saturnia pavoniella", + "7767114": "Nemophora metallica", + "7768584": "Mythimna riparia", + "7768674": "Melitaea diamina", + "7769543": "Entephria flavicinctata", + "7769987": "Apaidia", + "7772509": "Dysodia", + "7776011": "Smyrna karwinskii", + "7777102": "Marmara", + "7778368": "Zygaena osterodensis", + "7779226": "Tripudia quadrifera", + "7780930": "Arenostola phragmitidis", + "7785540": "Isogona scindens", + "7786896": "Colias", + "7791190": "Erebia oeme", + "7791558": "Erebia meolans", + "7797515": "Acleris roscidana", + "7798382": "Erebia pronoe", + "7799370": "Boloria pales", + "7800469": "Thalatha melanophrica", + "7803585": "Isognathus rimosa", + "7809779": "Fabriciana adippe", + "7825945": "Abablemma brimleyana", + "7841677": "Cyclopis", + "7842819": "Cechetra", + "7851302": "Nemophora ochsenheimerella", + "7852351": "Pasiphila", + "7854318": "Melanargia galathea", + "7864212": "Diaphania costata", + "7867379": "Melitaea varia", + "7869346": "Pachetra sagittigera", + "7870336": "Zygaena rhadamanthus", + "7874258": "Thumatha senex", + "7875265": "Pygaera timon", + "7876391": "Paranthrene", + "7877231": "Thiodia citrana", + "7881632": "Mastor", + "7882824": "Condica mobilis", + "7895336": "Oligia strigilis", + "7903078": "Zygaena carniolica", + "7905361": "Emmiltis pygmaearia", + "7908344": "Epatolmis luctifera", + "7909858": "Zygaena erythrus", + "7911151": "Spragueia apicalis", + "7917033": "Hadena silenes", + "7918000": "Ulochlaena hirta", + "7919880": "Idaea circuitaria", + "7921916": "Xestia alpicola", + "7922810": "Omphalophana antirrhinii", + "7924383": "Eudocima serpentifera", + "7934873": "Melitaea phoebe", + "7937573": "Drymonia querna", + "7940299": "Erebia lefebvrei", + "7940536": "Agrotis clavis", + "7946946": "Oiketicus kirbyi", + "7955974": "Zygaena exulans", + "7958169": "Depressaria badiella", + "7960566": "Perizoma didymata", + "7961640": "Nemophora minimella", + "7963991": "Altha", + "7964262": "Eucosmomorpha albersana", + "7964910": "Capys alpheus", + "7969922": "Eutelia", + "7972792": "Lacanobia splendens", + "7973517": "Lycia pomonaria", + "7973780": "Psectrotarsia", + "7975250": "Eucosma aspidiscana", + "7976131": "Ypthima nareda", + "7976145": "Paraswammerdamia nebulella", + "7981372": "Euchloe crameri", + "7981386": "Bryophila domestica", + "7988195": "Idaea contiguaria", + "7988274": "Pyronia cecilia", + "7990739": "Cleta filacearia", + "7993353": "Eupithecia valerianata", + "7996464": "Itame vincularia", + "8000103": "Spilarctia lutea", + "8001799": "Limenitis reducta", + "8007222": "Apamea anceps", + "8008237": "Duomitus ceramicus", + "8014296": "Scopula imitaria", + "8015612": "Depressaria albipunctella", + "8015895": "Eupithecia nanata", + "8016522": "Maculinea alcon", + "8016905": "Catocala dilecta", + "8021109": "Basistriga flammatra", + "8023645": "Deudorix antalus", + "8025": "Cimeliidae", + "8026858": "Eupithecia pygmaeata", + "8028211": "Scolecocampa atrosignata", + "8035998": "Hipparchia statilinus", + "8038357": "Setina roscida", + "8043500": "Xestia ashworthii", + "8045644": "Mythimna anderreggii", + "8047165": "Erebia gorge", + "8047343": "Agrochola laevis", + "8048904": "Zygaena romeo", + "8049830": "Pararge aegeria", + "8050639": "Schinia chrysellus", + "8057237": "Phyllocnistis", + "8067894": "Idaea mediaria", + "8073674": "Thymelicus acteon", + "8078362": "Fabriciana niobe", + "8086347": "Rhopobota naevana", + "8094357": "Cacoecimorpha pronubana", + "8095945": "Eumorpha", + "8102790": "Zygaena occitanica", + "8103163": "Eublemma amoena", + "8105817": "Rhizedra lutosa", + "8107362": "Cyclophora", + "8108800": "Helicoverpa armigera", + "8109173": "Pyrgus malvae", + "8109351": "Helicoverpa", + "8111395": "Zygaena sarpedon", + "8130866": "Chalcidica minea", + "8133328": "Nephele hespera", + "8133678": "Thymelicus lineola", + "8137978": "Erebia cassioides", + "8138711": "Apatura ilia", + "8140883": "Brenthis daphne", + "8141741": "Autophila cataphanes", + "8146570": "Diaphania elegans", + "8148822": "Epicallia villica", + "8150089": "Wiseana umbraculatus", + "8150450": "Hypena minualis", + "8150836": "Acosmetia caliginosa", + "8158342": "Zygaena transalpina", + "8160782": "Anticlea badiata", + "8162538": "Epinotia pygmaeana", + "8165185": "Setina aurita", + "8167638": "Erebia epiphron", + "8167743": "Trigonophora jodea", + "8168644": "Melitaea cinxia", + "8172949": "Scotopteryx peribolata", + "8176911": "Hipparchia semele", + "8177591": "Baniana ostia", + "8177775": "Zizina otis", + "8178238": "Dasychira tephra", + "8178453": "Edosa varians", + "8178582": "Caicella", + "8178854": "Carcharodus lavatherae", + "8180900": "Gerinia honoraria", + "8186212": "Cydia amplana", + "8189761": "Brenthis hecate", + "8193562": "Clytie illunaris", + "8194136": "Hymenia", + "8200050": "Merrifieldia leucodactyla", + "8201251": "Zygaena ephialtes", + "8203799": "Hyperstrotia", + "8203812": "Colias alfacariensis", + "8208583": "Hyponephele lycaon", + "8213918": "Abaeis", + "8214814": "Erebia mnestra", + "8215326": "Acleris abietana", + "8218441": "Udea numeralis", + "8219149": "Oncocera faecella", + "8222049": "Euxoa temera", + "8223165": "Ostrinia nubilalis", + "8225376": "Papilio machaon", + "8233062": "Erebia tyndarus", + "8237343": "Macaria carbonaria", + "8237987": "Spilosoma lubricipeda", + "8244266": "Nycteola degenerana", + "8247566": "Myscelia ethusa", + "8249110": "Hydrelia", + "8253467": "Leucania obsoleta", + "8254441": "Leucoptera spartifoliella", + "8262258": "Erebia melas", + "8262357": "Eupithecia exiguata", + "8270406": "Erynnis tages", + "8271010": "Diurnea fagella", + "8273661": "Thymelicus sylvestris", + "8273859": "Coleophora striatipennella", + "8277078": "Carcharodus alceae", + "8292351": "Parahypopta caestrum", + "8292872": "Syngrapha interrogationis", + "8295666": "Erebia neoridas", + "8296807": "Charadra", + "8298764": "Erebia pharte", + "8299504": "Mocis diffluens", + "8304206": "Bryophila vandalusiae", + "8312017": "Satyrus ferula", + "8313553": "Eudemis porphyrana", + "8314088": "Erebia medusa", + "8314432": "Idiochlora", + "8317469": "Palpita", + "8319926": "Aporia", + "8322165": "Arhopala athada", + "8324720": "Samea castellalis", + "8325294": "Scoparia pyralella", + "8326103": "Laelia coenosa", + "8329661": "Archiearis notha", + "8331687": "Lesmone formularis", + "8331787": "Pterophorus", + "8331960": "Zophopetes", + "8338704": "Paralaea", + "8345567": "Melanis aegates", + "8345820": "Notocelia incarnatana", + "8345991": "Sigela brauneata", + "8348761": "Zygaena fausta", + "8352161": "Spodoptera exigua", + "8355390": "Catocala adultera", + "8356768": "Lycaena alciphron", + "8361848": "Epirrhoe alternata", + "8361973": "Orgyia antiquoides", + "8363507": "Metachrostis velox", + "8363558": "Syrichtus", + "8363709": "Naarda xanthonephra", + "8366158": "Idaea filicata", + "8367663": "Dione moneta", + "8369868": "Epinotia crenana", + "8379138": "Xanthia", + "8379616": "Lesmone hinna", + "8384839": "Dialithis gemmifera", + "8388883": "Colostygia aptata", + "8389051": "Gonodes", + "8389961": "Strymon bubastus", + "8393082": "Melitaea didyma", + "8393221": "Eucarta amethystina", + "8394261": "Eupithecia irriguata", + "8396242": "Coenonympha dorus", + "8396912": "Bellulia", + "8397564": "Drymonia dodonaea", + "8402212": "Polyphagozerra coffeae", + "8404037": "Pyronia bathseba", + "8405656": "Condica sutor", + "8406574": "Glyphodes", + "8407240": "Heterorachis", + "8407461": "Arctornis l-nigrum", + "8407958": "Agrotis", + "8411753": "Evergestis politalis", + "8414310": "Lycia alpina", + "8416348": "Lemonia taraxaci", + "8420632": "Aethes rutilana", + "8421569": "Ectropis crepuscularia", + "8424964": "Protodeltote muscosula", + "8424972": "Phtheochroa rugosana", + "8425580": "Diaphania hyalinata", + "8426357": "Zygaena lonicerae", + "8429622": "Cyclopis caecutiens", + "8439879": "Saturnia jonasii", + "8440999": "Schinia volupia", + "8445010": "Auca barrosi", + "8452092": "Cyana dudgeoni", + "8485254": "Cydia marita", + "8491927": "Strotihypera macroplaga", + "8494978": "Udea", + "8501203": "Visiana brujata", + "8503184": "Scythropiodes issikii", + "8526388": "Cyana alborosea", + "8532380": "Anania perlucidalis", + "8537359": "Anania coronata", + "8543494": "Cyana peregrina", + "8546322": "Promalactis suzukiella", + "8548427": "Marpesia eleuchea", + "8549720": "Apatura schrencki", + "8551997": "Schinia albafascia", + "8559137": "Sinoe chambersi", + "8562506": "Schinia miniana", + "8574752": "Promalactis albisquama", + "8581601": "Xanthia icteritia", + "8604089": "Amphitorna purpureofascia", + "8624848": "Cyana perornata", + "8632989": "Macaria fusca", + "8636720": "Stegosatyrus", + "8643155": "Ginzia frivaldszkyi", + "8643309": "Stegosatyrus periphas", + "8647523": "Schinia tertia", + "8659047": "Aricia", + "8669164": "Cirrochroa emalea", + "8679775": "Danielithosia", + "8691947": "Phiaris siderana", + "8697176": "Callima", + "8708745": "Lasionycta proxima", + "8710303": "Lintneria", + "8720118": "Orgyia pseudotsugata", + "8723161": "Argina amanda", + "8725248": "Herpetogramma sphingealis", + "8727750": "Tirumala erato", + "8728355": "Tathorhynchus", + "8729319": "Megalographa biloba", + "8734090": "Thisizima fasciaria", + "8734154": "Gymnandrosoma punctidiscanum", + "8741260": "Macrosaccus robiniella", + "8741750": "Cosmophila flava", + "8742426": "Bryophila raptricula", + "8744407": "Wheeleria", + "8751100": "Feralia major", + "8755207": "Acontia cuta", + "8756768": "Catocala electa", + "8757056": "Naarda", + "8761810": "Schinia regina", + "8763986": "Eresia mylitta", + "8766106": "Bastilla", + "8766638": "Hypsopygia nostralis", + "8774985": "Cisthene plumbea", + "8775810": "Ennomos magnaria", + "8779506": "Glyphipterix circumscriptella", + "8781370": "Schinia sordida", + "8782295": "Aedia", + "8782891": "Japonica lutea", + "8786726": "Blasticorhinus", + "8787356": "Argina", + "8790054": "Hellinsia chamelai", + "8792353": "Lychnuchoides ozias", + "8793278": "Tetracis cervinaria", + "8793324": "Erastria cruentaria", + "8793873": "Hypena laceratalis", + "8793973": "Zenophleps obscurata", + "8793999": "Pseudochelaria", + "8797017": "Aproaerema simplexella", + "8797666": "Alpheias pectinalis", + "8802610": "Elaphria alapallida", + "8803817": "Pseudopelosia", + "8805966": "Zanclognatha jacchusalis", + "8806645": "Cycnia", + "8810143": "Boloria napaea", + "8810582": "Tigrioides", + "8810912": "Ambulyx moorei", + "8814442": "Disticta", + "8818378": "Tripudia balteata", + "8820198": "Plataea blanchardaria", + "8823068": "Anania terrealis", + "8825450": "Lamprospilus collucia", + "8825467": "Caveana senuri", + "8828146": "Bibasis oedipodea", + "8828194": "Arthroschista", + "8831819": "Gonitis mesogona", + "8832": "Bombycidae", + "8832257": "Dahlica", + "8832485": "Mycalesis perseoides", + "8833": "Brachodidae", + "8833509": "Euchrysops osiris", + "8834": "Carposinidae", + "8834672": "Hieromantis arcuata", + "8834745": "Caveana", + "8836": "Castniidae", + "8837162": "Drasteria caucasica", + "8837974": "Arawacus ellida", + "8838": "Coleophoridae", + "8839": "Cosmopterigidae", + "8840": "Cossidae", + "8840017": "Arawacus leucogyna", + "8841": "Crambidae", + "8843351": "Cryptographis", + "8843927": "Conchylis oenotherana", + "8844327": "Hypodryas", + "8846776": "Ministrymon janevicroy", + "8847500": "Hermeuptychia intricata", + "8849480": "Lintneria istar", + "8851663": "Entephria infidaria", + "8855": "Momphidae", + "8856": "Neopseustidae", + "8856895": "Anania crocealis", + "8858121": "Anania hortulata", + "8860": "Plutellidae", + "8861": "Psychidae", + "8863": "Pterophoridae", + "8864": "Saturniidae", + "8865": "Schreckensteiniidae", + "8865876": "Digama culta", + "8866": "Scythrididae", + "8868": "Sphingidae", + "8869900": "Aethes cnicana", + "8870": "Thyrididae", + "8871": "Tischeriidae", + "8871600": "Triodia amasinus", + "8872": "Uraniidae", + "8872165": "Macrochilo hypocritalis", + "8873": "Urodidae", + "8874": "Yponomeutidae", + "8874140": "Catocala lacrymosa", + "8874633": "Bastilla joviana", + "8875": "Zygaenidae", + "8875114": "Chloantha", + "8875134": "Callopistria", + "8875890": "Catephia", + "8876855": "Niphograpta albiguttalis", + "8877458": "Syssphinx hubbardi", + "8881513": "Salvatgea xanthosoma", + "8883183": "Gadirtha fusca", + "8890502": "Globia sparganii", + "8895291": "Hypocala", + "8896182": "Teulisna", + "8897869": "Brunia antica", + "8903953": "Lygephila", + "8904480": "Strymon mulucha", + "8905759": "Zanclognatha dentata", + "8908724": "Cisthene striata", + "8912441": "Pharmacis aemilianus", + "8913017": "Atlides neora", + "8915575": "Cerocala", + "8916247": "Zobida similipuncta", + "8918036": "Chlosyne gorgone", + "8919882": "Pseudarenipses", + "8921795": "Spilarctia", + "8924506": "Afrida ydatodes", + "8928010": "Britha", + "8928353": "Tripudia luxuriosa", + "8929537": "Gnamptonychia ventralis", + "8930863": "Agnorisma", + "8931287": "Penicillaria", + "8933773": "Ctenucha rubriceps", + "8934672": "Entomogramma", + "8935025": "Paralacydes", + "8936210": "Callimorpha", + "8941801": "Doxocopa kallina", + "8941993": "Macaria adonis", + "8943174": "Acontia libedis", + "8944338": "Hemerophanes", + "8946062": "Cortyta", + "8951523": "Chrysoritis thysbe", + "8951618": "Euchlaena obtusaria", + "8952756": "Myelopsis", + "8952983": "Pangrapta", + "8955497": "Lycia florentina", + "8955545": "Trigonodes", + "8955839": "Ischnurges lancinalis", + "8956567": "Proserpinus lucidus", + "8956729": "Synanthedon acerrubri", + "8958353": "Izatha katadiktya", + "8961830": "Vanessa altissima", + "8963517": "Chloronycta", + "8963926": "Drasteria inepta", + "8964772": "Jordanita chloros", + "8964866": "Bicyclus dorothea", + "8968124": "Amerila", + "8968321": "Mocis marcida", + "8970409": "Asota", + "8974541": "Raparna", + "8978064": "Sypnoides", + "8978362": "Tirumala septentrionis", + "8978428": "Rhodogastria", + "8979264": "Audea watusi", + "8981028": "Zebronia discordens", + "8981907": "Pseudonaclia", + "8982056": "Phragmatiphila", + "8982591": "Mycalesis mucianus", + "8983556": "Dysallacta", + "8983629": "Numenes", + "8986624": "Chionodes sevir", + "8986756": "Terastia africana", + "8992509": "Anachrostis", + "8992718": "Arawacus sito", + "8997448": "Xanthetis", + "8997710": "Yigoga", + "8998296": "Schinia unimacula", + "9000709": "Tegulifera", + "9002107": "Plebejus samuelis", + "9002818": "Oruza", + "9004359": "Atteva wallengreni", + "9005880": "Zanclognatha", + "9007213": "Deltophora polliniferens", + "9008379": "Doryodes latistriga", + "9015218": "Acrolophus plumifrontella", + "9016382": "Eresia eunice", + "9017206": "Papilio tereas", + "9020610": "Orocrambus", + "9021546": "Prays", + "9022399": "Catocala neogama", + "9023222": "Ancylis diminuatana", + "9026388": "Bleptina", + "9026655": "Phymatopus", + "9028122": "Dasyophthalma creusa", + "9029051": "Luceria", + "9036372": "Secusio", + "9036849": "Pseudogyrtona", + "9038042": "Acontia candefacta", + "9040133": "Cenopis saracana", + "9040198": "Galtara", + "9042018": "Schinia ligeae", + "9042695": "Melitaea", + "9044302": "Ernolatia", + "9044770": "Estigmene", + "9046185": "Arrade", + "9046214": "Diplodoma", + "9046977": "Adscita", + "9050611": "Daimio phisara", + "9051758": "Zanclognatha laevigata", + "9051888": "Epiblema glenni", + "9053308": "Epiplema amorata", + "9053842": "Ceryx", + "9055772": "Egybolis", + "9059321": "Rhesalides", + "9059564": "Lineodes fontella", + "9059730": "Chalciope", + "9060128": "Hyposada", + "9060267": "Perigrapha sellingi", + "9061491": "Phytometra", + "9062262": "Maliattha concinnimacula", + "9065472": "Schrankia", + "9068729": "Baniana", + "9068968": "Bibasis harisa", + "9069808": "Bocana", + "9069966": "Bryophila tephrocharis", + "9072828": "Actinote pellenea", + "9073940": "Prolita", + "9077304": "Axiodes", + "9077410": "Geina", + "9078027": "Stenia", + "9078901": "Euproctis", + "9080469": "Artaxa", + "9086331": "Marpesia corinna", + "9087922": "Charaxes varanes", + "9090334": "Eressa", + "9092175": "Agrochola lunosa", + "9092234": "Ugia", + "9093819": "Rhanidophora", + "9095083": "Mniotype", + "9095230": "Cifuna", + "9099004": "Psichotoe", + "9100030": "Anania fuscalis", + "9101339": "Anania lancealis", + "9103399": "Macrosaccus", + "9105656": "Maliattha subblandula", + "9106541": "Enispa", + "9108102": "Rhodophaea", + "9110918": "Macaria transitaria", + "9111044": "Catastega", + "9111269": "Penthophera", + "9111961": "Loryma egregialis", + "9112567": "Aroa", + "9113409": "Pindis squamistriga", + "9114044": "Givira arbeloides", + "9118632": "Eublemma", + "9119424": "Marathyssa", + "9119710": "Gastrinodes argoplaca", + "9121178": "Naroma", + "9122734": "Attevidae", + "9123440": "Numata bipunctella", + "9123839": "Egnasia", + "9128871": "Acantholipes", + "9130093": "Tolpia", + "9131390": "Cerynea", + "9135821": "Globia algae", + "9135886": "Cisthene subjecta", + "9136607": "Bocula", + "9136904": "Mycalesis subdita", + "9137617": "Ascalapha", + "9137631": "Pseudoterpna coronillaria", + "9137965": "Anania luctualis", + "9141856": "Sozusa", + "9146182": "Spilosoma", + "9146244": "Paranthrene robiniae", + "9148810": "Enargia fausta", + "9151414": "Orthotelia", + "9154466": "Agylla", + "9155713": "Povolnya", + "9155721": "Xenolechia", + "9156165": "Leucoblepsis taiwanensis", + "9156458": "Denivia hemon", + "9157410": "Arawacus togarna", + "9159662": "Glyphidocera juniperella", + "9163604": "Cymaroa", + "9163659": "Schinia diffusa", + "9167802": "Zekelita", + "9168716": "Fulgoraecia", + "9174377": "Xylena solidaginis", + "9175037": "Leucania farcta", + "9175687": "Mocis", + "9176043": "Goditha bumeliana", + "9176590": "Olene", + "9177092": "Medama", + "9177300": "Sophta", + "9178932": "Batocnema coquerelii", + "9179511": "Pataeta", + "9180373": "Pandesma", + "9181278": "Leucoma", + "9181627": "Elophila obliteralis", + "9182266": "Chloraspilates", + "9182336": "Triodia adriaticus", + "9183339": "Ilemodes", + "9183600": "Spargania", + "9183738": "Polyacme dissimilis", + "9184825": "Micronola", + "9185656": "Consul excellens", + "9185801": "Pericyma", + "9186977": "Homodes", + "9188678": "Anomis", + "9189318": "Hydrillodes", + "9189502": "Autoba", + "9190731": "Heliconius hortense", + "9192882": "Catoblepia amphirhoe", + "9194811": "Scopula divisaria", + "9197007": "Euptychia", + "9197112": "Manduca", + "9198767": "Pseudopelosia plumosa", + "9199756": "Eudocima", + "9203611": "Fodina", + "9203720": "Halone", + "9205220": "Zethes", + "9206138": "Autosticha", + "9208233": "Hamadryas fornax", + "9208918": "Hermeuptychia hermybius", + "9209436": "Metachrostis", + "9210500": "Phibalapteryx", + "9211050": "Siccia", + "9211520": "Oglasa", + "9211630": "Loxioda", + "9212903": "Ptilocephala", + "9213204": "Microdes villosata", + "9216200": "Aegle kaekeritziana", + "9217680": "Teracotona", + "9218657": "Somena", + "9219266": "Amata fortunei", + "9219529": "Marpesia zerynthia", + "9220793": "Polypogon", + "9220953": "Chiasmia aestimaria", + "9228024": "Leucinodes laisalis", + "9230208": "Philotis", + "9230236": "Nygmia", + "9233420": "Dargida rubripennis", + "9234402": "Amblychia subrubida", + "9235027": "Phytometra rhodarialis", + "9235225": "Virbia ferruginosa", + "9236138": "Catocala agrippina", + "9237031": "Lophosis labeculata", + "9237599": "Phalaenostola metonalis", + "9237621": "Iridopsis pergracilis", + "9238900": "Hypena baltimoralis", + "9239301": "Meganola spodia", + "9240216": "Diastema cnossia", + "9240357": "Catocala umbrosa", + "9240588": "Syssphinx heiligbrodti", + "9241105": "Schinia luxa", + "9241669": "Photedes inops", + "9242559": "Aphelia paleana", + "9242609": "Sympistis perscripta", + "9243117": "Orthodes detracta", + "9243264": "Patalene aenetusaria", + "9243319": "Macaria sulphurea", + "9243764": "Callopistria japonibia", + "9243875": "Hypena abalienalis", + "9244066": "Heliothis phloxiphaga", + "9244973": "Sympistis chionanthi", + "9245604": "Zimmermannia bosquella", + "9247563": "Cisthene liberomacula", + "9247947": "Schinia thoreaui", + "9248329": "Dichagyris variabilis", + "9248830": "Heliocheilus lupata", + "9249036": "Hypenodes fractilinea", + "9249651": "Neognopharmia stevenaria", + "9250744": "Feltia geniculata", + "9251088": "Macaria multilineata", + "9251096": "Euploea lewinii", + "9252524": "Catocala retecta", + "9253819": "Peridea basitriens", + "9254017": "Zanclognatha lituralis", + "9254157": "Sympistis dentata", + "9255102": "Schinia nundina", + "9255328": "Hamadryas laodamia", + "9255512": "Macrurocampa marthesia", + "9256436": "Drasteria pallescens", + "9256638": "Condica morsa", + "9256786": "Rindgeria ornata", + "9257793": "Goniocraspedon variegata", + "9257908": "Calyptra canadensis", + "9259786": "Macaria marcescaria", + "9260167": "Sinpunctiptilia", + "9261296": "Macaria truncataria", + "9261458": "Schinia argentifascia", + "9262981": "Anarsia innoxiella", + "9262994": "Troyus", + "9264326": "Melanolophia signataria", + "9266866": "Danielithosia immaculata", + "9267364": "Garella vallata", + "9268082": "Athetis brunneolineosa", + "9272461": "Macaria bitactata", + "9273409": "Catocala judith", + "9273963": "Coryphista meadii", + "9274899": "Eumacaria madopata", + "9276279": "Barsine fuscozonata", + "9277294": "Cepphis armataria", + "9277330": "Memphis moruus", + "9278311": "Neeugoa kanshireiensis", + "9278398": "Virbia opella", + "9279670": "Drasteria ochracea", + "9281181": "Digrammia ocellinata", + "9281907": "Schinia regia", + "9282469": "Mesapamea fractilinea", + "9283228": "Drasteria adumbrata", + "9283948": "Properigea albimacula", + "9284849": "Elaphria cyanympha", + "9287097": "Paradelta quadralis", + "9288185": "Schinia suetus", + "9288386": "Macrochilo louisiana", + "9288596": "Cisthene packardii", + "9288979": "Enchoria lacteata", + "9289753": "Plagiomimicus tepperi", + "9289908": "Catocala habilis", + "9290866": "Cisthene subrufa", + "9291075": "Macrochilo absorptalis", + "9291092": "Ilexia intractata", + "9291297": "Schinia florida", + "9292394": "Hypena degesalis", + "9294363": "Lipararchis tranquillalis", + "9297059": "Polygrammate hebraeicum", + "9298735": "Zanclognatha atrilineella", + "9299326": "Arcobara multilineata", + "9301336": "Hyperstrotia flaviguttata", + "9305011": "Hemeroplanis incusalis", + "9305798": "Athetis tarda", + "9306367": "Azenia obtusa", + "9307098": "Leptostales ferruminaria", + "9307254": "Acontia tetragona", + "9307713": "Iridopsis vellivolata", + "9308082": "Ecliptopera atricolorata", + "9308930": "Loxomorpha flavidissimalis", + "9309575": "Trigrammia quadrinotaria", + "9310286": "Gerrodes minatea", + "9310369": "Dahira obliquifascia", + "9310510": "Catocala subnata", + "9310626": "Herminia tarsipennalis", + "9311081": "Macaria oweni", + "9312545": "Catocala palaeogama", + "9313634": "Nola triquetrana", + "9314022": "Hypena madefactalis", + "9315577": "Cisthene tenuifascia", + "9315833": "Churinga virago", + "9320776": "Ozarba propera", + "9320916": "Plagodis kuetzingi", + "9321500": "Stamnoctenis pearsalli", + "9322646": "Fishia illocata", + "9323382": "Drasteria edwardsii", + "9324570": "Zanclognatha pedipilalis", + "9325654": "Fascionycta fasciata", + "9327042": "Drasteria grandirena", + "9327259": "Condica vecors", + "9328683": "Bryolymnia viridata", + "9329292": "Feltia mollis", + "9329912": "Gufria", + "9330467": "Macaria lorquinaria", + "9331464": "Ocneria atlantica", + "9332369": "Drepanulatrix unicalcararia", + "9332506": "Catocala macula", + "9332550": "Megalopyge basalis", + "9334318": "Arzecla", + "9334639": "Acontia augustipennis", + "9334851": "Cisthene conjuncta", + "9336001": "Catephia linteola", + "9337858": "Cucullia eulepis", + "9338769": "Photedes defecta", + "9339487": "Macaria promiscuata", + "9340070": "Catocala vidua", + "9340110": "Kocakina", + "9340452": "Metria amella", + "9342344": "Striacosta albicosta", + "9343385": "Asuridia inouei", + "9344456": "Catocala innubens", + "9345545": "Isogona snowi", + "9345724": "Barsura", + "9347308": "Barsine sauteri", + "9348210": "Cobubatha orthozona", + "9350484": "Catocala antinympha", + "9350900": "Cosmosoma stilbosticta", + "9352348": "Digrammia pallorata", + "9352978": "Digrammia mellistrigata", + "9353360": "Hypena eductalis", + "9354496": "Lesmone detrahens", + "9354669": "Alypiodes geronimo", + "9355107": "Syssphinx bisecta", + "9355953": "Checupa stegeri", + "9356491": "Biston suppressaria", + "9356770": "Mythimna consanguis", + "9357385": "Junonia neildi", + "9357810": "Fascionycta", + "9358521": "Hypena humuli", + "9359597": "Fomoria septembrella", + "9359871": "Idia forbesii", + "9361954": "Asterope leprieuri", + "9362190": "Oligia obtusa", + "9362560": "Macrochilo litophora", + "9362785": "Schinia trifascia", + "9363692": "Heliocheilus toralis", + "9363893": "Eusarca packardaria", + "9366016": "Macaria bisignata", + "9366762": "Ponometia venustula", + "9367471": "Catocala residua", + "9367674": "Psaphida rolandi", + "9368026": "Pseudeustrotia carneola", + "9368382": "Synchlora faseolaria", + "9368398": "Macaria pustularia", + "9368974": "Zanclognatha marcidilinea", + "9369576": "Euxoa bochus", + "9370070": "Peratophyga crista", + "9370312": "Iridopsis ephyraria", + "9370933": "Idaea obfusaria", + "9372988": "Buzara onelia", + "9373309": "Schinia citrinellus", + "9373686": "Cosmia praeacuta", + "9374443": "Abablemma bilineata", + "9374637": "Callopistria mollissima", + "9377268": "Apamea niveivenosa", + "9379595": "Idia scobialis", + "9379855": "Stathmopoda fusciumeraris", + "9381852": "Mythimna oxygala", + "9382044": "Matigramma obscurior", + "9382415": "Protitame subalbaria", + "9384861": "Helia agna", + "9385576": "Nola cereella", + "9387353": "Idia rotundalis", + "9387782": "Acontia lanceolata", + "9388726": "Chrysoecia thoracica", + "9389851": "Phoenicoprocta hampsonii", + "9390065": "Hemeroplanis historialis", + "9390293": "Schinia arcigera", + "9391442": "Eusarca fundaria", + "9391467": "Orgyia vetusta", + "9392058": "Macaria graphidaria", + "9392076": "Macaria exauspicata", + "9392084": "Ectima thecla", + "9392614": "Abablemma duomaculata", + "9394138": "Virbia aurantiaca", + "9395000": "Mylon maimon", + "9395261": "Feralia deceptiva", + "9395422": "Drasteria scrupulosa", + "9396180": "Vanessa carye", + "9396755": "Sympistis apis", + "9399145": "Drasteria divergens", + "9399288": "Psaphida grandis", + "9400545": "Rusicada privata", + "9400895": "Etainia sericopeza", + "9400916": "Rhesalides curvata", + "9400977": "Macaria bicolorata", + "9402536": "Macaria varadaria", + "9403481": "Digrammia continuata", + "9404919": "Acontia expolita", + "9406020": "Catocala flebilis", + "9406822": "Resapamea passer", + "9406984": "Cisthene angelus", + "9407": "Mimallonidae", + "9407200": "Idia aemula", + "9408": "Micropterigidae", + "9409": "Megalopygidae", + "9409309": "Orthodes goodelli", + "9410": "Lyonetiidae", + "9410076": "Catocala maestosa", + "9410414": "Agrochola purpurea", + "9410573": "Biston bengaliaria", + "9412": "Tineidae", + "9413168": "Macaria pallipennata", + "9414744": "Dryadaulidae", + "9414984": "Nebula ablutaria", + "9415435": "Neoligia crytora", + "9415669": "Acratodes suavata", + "9416645": "Catocala angusi", + "9417": "Papilionidae", + "9417594": "Virbia immaculata", + "9418549": "Anicla illapsa", + "9419734": "Macaria colata", + "9420824": "Lymantria xylina", + "9423248": "Argyrostrotis flavistriaria", + "9423863": "Leptostales rubromarginaria", + "9424082": "Neoligia subjuncta", + "9424441": "Phalaenostola eumelusalis", + "9424464": "Iridopsis obliquaria", + "9424681": "Schinia mitis", + "9424853": "Epiplema dryopterata", + "9425857": "Hypena deceptalis", + "9426054": "Notodonta scitipennis", + "9426252": "Meganola minuscula", + "9426771": "Egira alternans", + "9428900": "Macaria fissinotata", + "9432438": "Idia julia", + "9432644": "Cisthene barnesii", + "9432810": "Resapamea stipata", + "9433772": "Plagiomimicus spumosum", + "9434954": "Eudesmia arida", + "9436173": "Digrammia curvata", + "9438677": "Macaria aemulataria", + "9438913": "Bryolymnia semifascia", + "9440183": "Dysgonia hamatilis", + "9440644": "Drasteria howlandii", + "9442902": "Agriopis dira", + "9443159": "Zanclognatha obscuripennis", + "9445489": "Ponometia elegantula", + "9446281": "Haematera pyrame", + "9446902": "Lygephila victoria", + "9447614": "Lacanobia grandis", + "9448761": "Digrammia colorata", + "9449132": "Dichagyris grotei", + "9451208": "Opostegoides gephyraea", + "9451320": "Mocis texana", + "9452274": "Cisthene unifascia", + "9452497": "Idia majoralis", + "9452702": "Schinia gaurae", + "9453490": "Digrammia gnophosaria", + "9454052": "Elasmia packardii", + "9454291": "Nola minna", + "9454444": "Macaria subcessaria", + "9455404": "Catocala obscura", + "9456004": "Macaria granitata", + "9456735": "Papaipema leucostigma", + "9457004": "Alypiodes", + "9457324": "Melanis electron", + "9457757": "Euscirrhopterus cosyra", + "9460510": "Idia denticulalis", + "9463067": "Syntomeida ipomoeae", + "9463442": "Sympistis augustus", + "9465978": "Cobubatha dividua", + "9468297": "Catocala badia", + "9468667": "Besma endropiaria", + "9469139": "Ziegleria hesperitis", + "9469300": "Idaea furciferata", + "9469928": "Zanclognatha cruralis", + "9471709": "Cerma cerintha", + "9473121": "Blastobasis glandulella", + "9473918": "Cosmophila lyona", + "9474256": "Schinia rivulosa", + "9474405": "Macaria ulsterata", + "9476708": "Sympistis occata", + "9477531": "Heterophleps refusaria", + "9478331": "Loscopia velata", + "9478424": "Spilarctia subcarnea", + "9478718": "Arawacus lincoides", + "9479525": "Eriplatymetra coloradaria", + "9480768": "Macrochilo orciferalis", + "9481002": "Schinia cumatilis", + "9483647": "Catocala luctuosa", + "9484411": "Schinia accessa", + "9485070": "Schinia walsinghami", + "9485481": "Earias huegeliana", + "9486293": "Kamalia tattakana", + "9486411": "Anterastria teratophora", + "9488551": "Schinia niveicosta", + "9488754": "Iridopsis fragilaria", + "9488783": "Zanclognatha protumnusalis", + "9489399": "Macaria coortaria", + "9490756": "Mniotype tenera", + "9491341": "Virbia ostenta", + "9492499": "Cepphis decoloraria", + "9492640": "Cobubatha lixiva", + "9493016": "Proteuxoa tetronycha", + "9493317": "Vamuna alboluteora", + "9494431": "Digrammia atrofasciata", + "9494526": "Ophiusa parcemacula", + "9495306": "Sympistis atricollaris", + "9496267": "Pubitelphusa", + "9496311": "Proxenus miranda", + "9496896": "Argentostiria koebelei", + "9497623": "Leptostales pannaria", + "9498206": "Idia americalis", + "9499599": "Hypena sordidula", + "9500553": "Orthosia segregata", + "9500945": "Euscirrhopterus gloveri", + "9502606": "Sewa taiwana", + "9502724": "Macaria pinistrobata", + "9503548": "Catabenoides terminellus", + "9504222": "Thyas coronata", + "9506719": "Acontia terminimaculata", + "9508913": "Bastilla fulvotaenia", + "9511345": "Bagisara tristicta", + "9511749": "Protodeltote albidula", + "9512631": "Auzatellodes arizana", + "9513830": "Lintneria eremitus", + "9514086": "Rindgeria", + "9516038": "Digrammia neptaria", + "9516680": "Digrammia muscariata", + "9517291": "Peridea ferruginea", + "9519191": "Nymphicula yoshiyasui", + "9519321": "Euphydryas aurinia", + "9520799": "Panopoda repanda", + "9522383": "Schrankia macula", + "9523379": "Digrammia subminiata", + "9524458": "Paracymoriza nigra", + "9525172": "Plagiomimicus navia", + "9526331": "Cisthene deserta", + "9527919": "Hypena manalis", + "9529506": "Ataboruza", + "9530135": "Macaria distribuaria", + "9530200": "Arctia parthenos", + "9530271": "Schinia jaguarina", + "9530319": "Photedes panatela", + "9530406": "Anania mysippusalis", + "9530928": "Schinia lynx", + "9530977": "Etainia decentella", + "9531432": "Syssphinx blanchardi", + "9532702": "Macaria occiduaria", + "9533271": "Hypena bijugalis", + "9533293": "Phigalia plumogeraria", + "9533506": "Schinia snowi", + "9534291": "Digrammia pallidata", + "9534429": "Schinia mortua", + "9534690": "Phalaenostola hanhami", + "9535420": "Cirrhochrista spinuella", + "9536457": "Trichosea diffusa", + "9538525": "Isturgia dislocaria", + "9538684": "Tripudia flavofasciata", + "9539128": "Plusia magnimacula", + "9539292": "Dargida diffusa", + "9541133": "Limenitis iphiclus", + "9541689": "Meessiidae", + "9541734": "Virbia laeta", + "9541908": "Apamea scoparia", + "9544337": "Iridopsis defectaria", + "9544558": "Schinia meadi", + "9544823": "Garella ruficirra", + "9545331": "Digrammia irrorata", + "9545480": "Schinia siren", + "9545713": "Hypena atomaria", + "9546514": "Palumbina guerinii", + "9546910": "Lesmone griseipennis", + "9547140": "Leuconycta lepidula", + "9547311": "Catocala ulalume", + "9547535": "Syssphinx bicolor", + "9547676": "Aseptis marina", + "9547681": "Therinia lactucina", + "9548726": "Photedes includens", + "9548993": "Biston panterinaria", + "9549172": "Xanthia ocellaris", + "9549475": "Catocala nebulosa", + "9550265": "Orthodes majuscula", + "9550689": "Neope", + "9551316": "Heliothis oregonica", + "9551544": "Quadrus cerialis", + "9552253": "Schinia errans", + "9552466": "Idia diminuendis", + "9552703": "Cisthene faustinula", + "9553692": "Caenurgia togataria", + "9554074": "Catocala epione", + "9555094": "Cisthene picta", + "9556427": "Heliocheilus julia", + "9558288": "Magna", + "9558845": "Operophtera danbyi", + "9558873": "Macaria aequiferaria", + "9559336": "Rusicada combinans", + "9559671": "Xylophanes crenulatus", + "9560018": "Properigea tapeta", + "9560404": "Catocala robinsoni", + "9560782": "Drasteria sabulosa", + "9561820": "Peridea angulosa", + "9562175": "Sympistis dinalda", + "9563355": "Nebula tophaceata", + "9563837": "Vanessa braziliensis", + "9564041": "Harmandicrania", + "9564612": "Drasteria petricola", + "9564779": "Feralia februalis", + "9565980": "Virbia costata", + "9568710": "Orgyia detrita", + "9571514": "Chrysoecia atrolinea", + "9573163": "Schinia gracilenta", + "9574801": "Nola cilicoides", + "9574939": "Macaria ribearia", + "9577234": "Comibaena mariae", + "9577379": "Schinia sanguinea", + "9577547": "Eupithecia ravocostaliata", + "9578319": "Acosmerycoides harterti", + "9579309": "Nola clethrae", + "9579730": "Hypena scabra", + "9581695": "Leptostales laevitaria", + "9581976": "Acronicta fallax", + "9585354": "Inouenola", + "9586329": "Callopistria granitosa", + "9586705": "Cryptaspasma sordida", + "9588105": "Virbia rubicundaria", + "9589234": "Condica videns", + "9590057": "Colobura annulata", + "9590066": "Idaea tacturata", + "9590272": "Amblyptilia falcatalis", + "9590907": "Schinia obscurata", + "9591877": "Schinia pulchripennis", + "9592714": "Synchlora bistriaria", + "9593098": "Pseudeustrotia indeterminata", + "9593393": "Epyaxa sodaliata", + "9593475": "Psaphida styracis", + "9594509": "Schinia hulstia", + "9595155": "Schinia acutilinea", + "9596498": "Leucania amygdalina", + "9597741": "Heliocheilus paradoxus", + "9599150": "Cisthene martini", + "9600123": "Sansarea", + "9601788": "Macrochilo bivittata", + "9601813": "Ilexia", + "9602019": "Schinia fulleri", + "9604825": "Catocala muliercula", + "9605252": "Loweia", + "9605631": "Xylomoia indirecta", + "9606779": "Syssphinx montana", + "9607036": "Catocala piatrix", + "9607447": "Drasteria hudsonica", + "9607541": "Kamalia", + "9608673": "Hypena edictalis", + "9610059": "Iridopsis dataria", + "9610080": "Simplicia cornicalis", + "9610447": "Neoligia exhausta", + "9611624": "Catocala dejecta", + "9612009": "Platypolia mactata", + "9616055": "Anicla digna", + "9616438": "Macaria metanemaria", + "9616658": "Sympistis badistriga", + "9617411": "Protuliocnemis biplagiata", + "9617496": "Hammaptera parinotata", + "9618068": "Catocala insolabilis", + "9619088": "Leptostales crossii", + "9620499": "Pirascca sagaris", + "9621086": "Anavitrinella atristrigaria", + "9621113": "Hypena californica", + "9621271": "Bastilla solomonensis", + "9622117": "Egira perlubens", + "9622322": "Metria bilineata", + "9622725": "Catocala serena", + "9622955": "Melanis smithiae", + "9623131": "Xanthia tatago", + "9623220": "Hampsonella arizana", + "9624918": "Macaria octolineata", + "9625112": "Sympistis sectiloides", + "9626037": "Nola pustulata", + "9626500": "Hypena palparia", + "9627567": "Scopula caricaria", + "9627917": "Idia lubricalis", + "9629365": "Lineostriastiria hachita", + "9629450": "Mnesiloba eupitheciata", + "9630748": "Glympis concors", + "9630930": "Sympistis toddi", + "9632824": "Macaria evagaria", + "9633562": "Sympistis greyi", + "9633615": "Deltote bellicula", + "9634178": "Oxytenis modestia", + "9634575": "Schinia bina", + "9635978": "Dysgonia propyrrha", + "9636267": "Emarginea percara", + "9636442": "Drasteria fumosa", + "9637664": "Zanclognatha theralis", + "9645309": "Singularia alternaria", + "9663271": "Eugoa cernyi", + "9673208": "Katha magnata", + "9674732": "Patania ruralis", + "9675443": "Nhambikuara", + "9675743": "Hellinsia balanotes", + "9686431": "Hellinsia inquinatus", + "9689": "Oecophoridae", + "9689122": "Adaina montanus", + "9700261": "Michaelophorus indentatus", + "9717": "Nolidae", + "9724183": "Semioscopis strigulana", + "9734171": "Agnoea josephinae", + "9740944": "Besaia", + "9745549": "Nhambikuara cerradensis", + "9746673": "Hellinsia elliottii", + "9748079": "Hellinsia homodactylus", + "9749806": "Nippoptilia cinctipedalis", + "9752950": "Oidaematophorus eupatorii", + "9754232": "Ammatho cuneonotatus", + "9755262": "Gisilia thoracista", + "9759340": "Sinpunctiptilia emissalis", + "9759554": "Lebadea", + "9760511": "Lioptilodes albistriolatus", + "9762611": "Chinasa", + "9768621": "Platyptilia celidotus", + "9776414": "Acharia stimulea", + "9777614": "Pselnophorus belfragei", + "9778438": "Oligocentria lignicolor", + "9782192": "Ancylosis cinnamomella", + "9790007": "Nemaxera betulinella", + "9792270": "Chinasa costalis", + "9801765": "Amblyptilia repletalis", + "9803522": "Condica capensis", + "9804158": "Oeneis bore", + "9805848": "Dryobotodes roboris", + "9807789": "Disphragis guttivitta", + "9812211": "Dysstroma latefasciata", + "9816676": "Agriades pyrenaica", + "9819403": "Antigastra catalaunalis", + "9826405": "Anisogona simana", + "9830270": "Lipogya eutheta", + "9833933": "Eucyclodes metaspila", + "9835867": "Epicrocis metallopa", + "9836014": "Daphnis moorei", + "9837762": "Parapoynx polydectalis", + "9840570": "Genduara punctigera", + "9849625": "Eucosma ochroterminana", + "9851221": "Termessa conographa", + "9851261": "Hypatopa punctiferella", + "9851867": "Dynamine artemisia", + "9852545": "Cyme reticulata", + "9856663": "Jamides elpis", + "9857679": "Salma pyrastis", + "9858922": "Arescoptera haplocala", + "9859868": "Acatapaustus leucospila", + "9860684": "Phalonidia memoranda", + "9860902": "Lysimelia lenis", + "9864281": "Samea baccatalis", + "9867272": "Aricoris erostratus", + "9867379": "Glyphidoptera insignana", + "9868978": "Aproaerema polychromella", + "9875111": "Chloridea subflexa", + "9875141": "Scioglyptis loxographa", + "9875420": "Maxates orthodesma", + "9878063": "Caldubotys", + "9880359": "Eloasa callidesma", + "9880932": "Sparganothoides lentiginosana", + "9882683": "Discophlebia celaena", + "9883140": "Euhampsonia splendida", + "9883274": "Acatapaustus metallopa", + "9883856": "Brahmaea japonica", + "9884308": "Lamprosema haedulalis", + "9885192": "Eucosma parmatana", + "9890366": "Mataeomera mesotaenia", + "9893740": "Eublemma inconspicua", + "9893936": "Kanshizeia hemicycla", + "9894093": "Nola infantula", + "9895629": "Eido trimaculella", + "9896144": "Cenopis reticulatana", + "9899724": "Coequosa australasiae", + "9900218": "Theila siennata", + "9902073": "Kallimoides rumia", + "9904499": "Kretania modica", + "9905626": "Eucopina", + "9906229": "Heterostegane insulata", + "9906979": "Antheraea rosieri", + "9909775": "Cryptoptila australana", + "9910243": "Mataeomera ligata", + "9911298": "Hulda impudens", + "9913863": "Tebenna onustana", + "9914882": "Actias maenas", + "9915028": "Erebia neriene", + "9916153": "Caleta elna", + "9918092": "Bocula sejuncta", + "9919915": "Timandra stueningi", + "9921001": "Syntypistis pallidifascia", + "9923283": "Dysgonia senex", + "9925669": "Hermeuptychia harmonia", + "9927378": "Cyana malayensis", + "9930604": "Synanthedon novaroensis", + "9932090": "Protuliocnemis castalaria", + "9935660": "Eudocima iridescens", + "9935837": "Elophila gyralis", + "9939530": "Rhuma argyraspis", + "9941073": "Acharia hyperoche", + "9942354": "Caloptilia triadicae", + "9943941": "Thallogama corticola", + "9944922": "Hypsopygia thymetusalis", + "9948031": "Ofatulena duodecemstriata", + "9950697": "Pedois lewinella", + "9952043": "Dichelia clarana", + "9952367": "Syneora euboliaria", + "9953708": "Phalonidia lepidana", + "9953996": "Aethes baloghi", + "9954885": "Polyommatus celina", + "9956017": "Brunia dorsalis", + "9957790": "Hyalobathra crenulata", + "9958147": "Epiblema carolinana", + "9958241": "Rhigognostis interrupta", + "9959898": "Anaxidia lactea", + "9960072": "Nola pygmaeodes", + "9960252": "Genduara subnotata", + "9960318": "Aricoris signata", + "9962269": "Hypochrosis binexata", + "9963153": "Polyura schreiber", + "9964857": "Euptychia pompilia", + "9967126": "Erebia parmenio", + "9967251": "Corgatha dipyra", + "9967529": "Conogethes haemactalis", + "9968404": "Euthalia nais", + "9969513": "Calguia deltophora", + "9971153": "Epiblema boxcana", + "9971850": "Sciota subcaesiella", + "9972403": "Actias sinensis", + "9973217": "Calliprora sexstrigella", + "9975134": "Idiodes pellophanes", + "9975698": "Laothus barajo", + "9976926": "Syneora acrotypa", + "9977181": "Ardozyga nyctias", + "9981187": "Eunica cuvierii", + "9983244": "Saturnia japonica", + "9983957": "Corgatha drosera", + "9985020": "Termessa zonophanes", + "9987116": "Oenochroma quardrigramma", + "9988287": "Consul electra", + "9989156": "Phytometra laevis", + "9991710": "Epinotia johnsonana", + "9994384": "Arhopala major", + "9998920": "Argyresthia oreasella", + "9999965": "Euthalia teuta" +} diff --git a/dev/releases/mambo_v3/MODEL_CARD.md b/dev/releases/mambo_v3/MODEL_CARD.md index c270a63..88970ca 100644 --- a/dev/releases/mambo_v3/MODEL_CARD.md +++ b/dev/releases/mambo_v3/MODEL_CARD.md @@ -14,11 +14,26 @@ tags: # MAMBO V3 -Unpublished release candidate: EfficientNetV2-S trained on global-lepi in September +EfficientNetV2-S trained on global-lepi in September 2026. Predicts 12,632 species, 4,476 genera and 104 families, identified by GBIF taxon IDs. Native PyTorch and standard floating-point ONNX artifacts share this vocabulary. No quantized model is included. Embeddings have 1,280 dimensions and unit length. +[Try one image](https://huggingface.co/spaces/asgersvenning/MAMBO-v3) · +[Python package](https://pypi.org/project/mambo-v3/) · +[Integration and comparison figures](https://github.com/asgersvenning/mini_trainer/blob/MAMBO_v3/deployment/README.md) + +```python +from mambo_deploy import Predictor +result = Predictor().predict("moth.jpg") +print(result[0].label, result[0].confidence) +``` + +Install with `uv pip install 'mambo-v3[onnx]==0.3.0'`. The package downloads verified +weights from ERDA automatically. For a Hub snapshot, use its `bundle/` directory +with `Predictor(bundle="/path/to/snapshot/bundle")`; this is not a Transformers +`from_pretrained` model. `CITATION.cff` identifies the release citation. + Use the release README for installation, input/output formats and configuration. Global is the default. Region presets and custom class lists constrain eligible species; they are permissive occurrence filters, not native-range maps. Taxonomic @@ -58,9 +73,9 @@ can be loaded without retraining or downloading an initialization model. vocabulary and documentation. `PRESET_DEFINITIONS.toml` and `PRESET_UPDATES.toml` record list construction. Read `NOTICES.md` for code, model and source-data boundaries. -## Publication status +## License -The candidate weights are prepared under **CC BY-NC-SA 4.0**: attribution, +The model weights use **CC BY-NC-SA 4.0**: attribution, non-commercial use and share-alike terms for distributed adaptations. See `MODEL_LICENSE.txt` and `NOTICES.md` for the terms and upstream attribution. -The adapter code remains MIT-licensed. This candidate has not been published. +The adapter code remains MIT-licensed. diff --git a/dev/releases/mambo_v3/build_bundle.py b/dev/releases/mambo_v3/build_bundle.py index a45c1f0..33eb619 100644 --- a/dev/releases/mambo_v3/build_bundle.py +++ b/dev/releases/mambo_v3/build_bundle.py @@ -12,6 +12,16 @@ from dev.releases.mambo_v3.audit import HERE, sha256 from dev.releases.mambo_v3.package_download_metadata import distribution_readme +INPUTS = { + "models/pytorch/best.pt": "models/pytorch/best.pt", + "models/onnx/model.onnx": "models/onnx-fp32/model.onnx", + "models/onnx/model.onnx.data": "models/onnx-fp32/model.onnx.data", + "models/onnx/manifest.json": "models/onnx-fp32/manifest.json", + "models/onnx-embedding/model.onnx": "viewer/browser-model/model.onnx", + "models/onnx-embedding/model.onnx.data": "viewer/browser-model/model.onnx.data", + "models/onnx-embedding/manifest.json": "viewer/browser-model/manifest.json", +} + def build(source, destination): if destination.exists(): @@ -24,21 +34,13 @@ def build(source, destination): raise ValueError("Preset manifest is stale; rebuild presets first") files = {item["path"]: item for item in inventory["artifacts"]} production = inventory["production"] - copies = { - "models/pytorch/best.pt": "models/pytorch/best.pt", - "models/onnx/model.onnx": "models/onnx-fp32/model.onnx", - "models/onnx/model.onnx.data": "models/onnx-fp32/model.onnx.data", - "models/onnx/manifest.json": "models/onnx-fp32/manifest.json", - "models/onnx-embedding/model.onnx": "viewer/browser-model/model.onnx", - "models/onnx-embedding/model.onnx.data": "viewer/browser-model/model.onnx.data", - "models/onnx-embedding/manifest.json": "viewer/browser-model/manifest.json", - } + destination.parent.mkdir(parents=True, exist_ok=True) with tempfile.TemporaryDirectory(prefix="mambo-bundle-", dir=destination.parent) as temp: root = Path(temp) / "bundle" root.mkdir() origins = {} - for target, relative in copies.items(): + for target, relative in INPUTS.items(): item = files[f"{production}/{relative}"] path = source / item["path"] if path.stat().st_size != item["size"] or sha256(path) != item["sha256"]: diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 5ef0a49..620a650 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -13,11 +13,12 @@ remains MIT. Final artifact identities and installed checks are recorded in Both lockfiles preserve dependency versions. Isolated installed-wheel imports, CLI, training, checkpoint reload and inference passed. - Training publication now accepts `minitrainer-vVERSION` release events only; - manual dispatch prepares artifacts without publication. Model/demo workflows - and final publication-routing qualification remain to be completed. + manual dispatch prepares artifacts without publication. Model and demo publication + have separate workflows, environment gates and verified upload inventories. - The CPU Space uses the release API with runtime, scope, custom-list, TTA and - top-K controls. Final staging, readable-name assets and installed-candidate - qualification remain pending. Browser reuse is assessed separately below. + top-K controls and names for all 17,212 taxa. Runtime reuse is qualified on a + real image; final installed-candidate qualification is recorded with its artifacts. + Browser reuse is assessed separately below. - Complete publication documentation, model/Space staging, final rebuilt artifact qualification and the human publishing handoff before calling this freeze ready. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index f0bf9f0..bc7d2b7 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -1,72 +1,51 @@ -# MAMBO V3 installed-candidate qualification - -25 September 2026. **Ready for publication review; nothing published.** -Candidate source: `97521aca80b714a3c728c5782a9fa2f13eed652e`. -Local artifacts: `local-evidence/mambo-v3-release-candidate-final/`. - -The review set contains the standalone deployment wheel/source distribution, -matching training wheel, compressed offline model bundle, public evidence, -qualification records, `release-candidate.json` and `SHA256SUMS`. -Weights use CC BY-NC-SA 4.0; adapter code remains MIT. No tags, uploads or public -pointers were changed. - -## Verified boundaries - -| Check | Evidence | -|---|---| -| Clean ONNX-only install | Python 3.13.7, ONNX Runtime 1.30.0, NumPy 2.5.3, Pillow 12.3.0; torch and mini_trainer absent. | -| Offline and relocation | Read-only relocated bundle, Python socket connections blocked, prediction/embedding API and streaming CLI with default TTA; bundle bytes unchanged. | -| Automatic downloads | Installed global-default predictor retrieved public ERDA assets, produced predictions and unit embeddings, then reused them with downloads prohibited. | -| Native CPU | Installed PyTorch 2.14.0+cu130; four real images, global/regional/custom lists, prediction and embedding modes. | -| Laptop CUDA | RTX 3080 Ti Laptop; installed Torch 2.14.0+cu130 and ORT GPU 1.30.0; same four-image contracts with default TTA. Both ONNX graphs used optimized profiles without failed probes. | -| CLI ownership | With both release wheels installed, only mambo-v3 registers mambo_predict, targeting mambo_deploy.cli:run. | -| Source contracts | Global defaults, streaming window, incremental output ordering, embedding file shape, error cleanup, cache/offline behavior and output provenance are covered by focused tests. Nine cache/download tests passed after the final metadata update. | -| Packaging/static | Minimal installed training-wheel check passed; standalone wheel and sdist built; Ruff/format and import contracts passed. | -| Final notice-bearing wheel | Installed outside the checkout; all 17 payload files match its archive. Offline metadata bootstrap, global default, sole CLI owner, license identifiers/text and expanded/embedded bundle agreement passed. | - -## Artifact identities and evidence reuse - -| Artifact | SHA-256 | -|---|---| -| `mambo_v3-0.3.0-py3-none-any.whl` | `6e84e3ee5478771926bf4e18eb92c695ac44921f7d306ad522f4ec2f0b9fc511` | -| `mini_trainer-0.3.0-py3-none-any.whl` | `0cf47254f962803b786c50310ca4ee40fe4710beaa0a9534386b73cd08f6883e` | -| Bundle `release.json` | `3ec2f0483f3412f11fdae4f33b8f95cabb29032cf060df79733d7854b236974e` | - -The manifest covers 129 files, including qualification records. `SHA256SUMS` also -covers the manifest itself. All inventory hashes passed; all 45 compressed bundle -files match the expanded bundle. The source distribution's module payloads match -the wheel. - -Execution qualification used source `0bfb5d7a7ac04afdaa392a8494191d8a160954ac`. -`qualification/validation.json` binds those retained reports to the current wheels: -the training wheel is identical, and deployment runtime payloads are identical. -Only the embedded descriptor, README in wheel metadata and checksum record changed. -All model files, preprocessing and class-list bytes remain unchanged. Current -installed metadata checks cover the new notices/license and selected preset policy. -This is evidence reuse, not a claim that inference was rerun after documentation edits. -The earlier wheels and raw reports remain under -`local-evidence/mambo-v3-release-candidate/`. - -## Scope and provenance limits - -Existing Flemming, global-lepi, laptop and B200 evidence remains the source for -published model comparisons. No quality or speed campaign was rerun. Four-image -runtime checks do not establish general accuracy, embedding quality or arbitrary -platform compatibility. Windows/macOS and other accelerators were not newly qualified. - -The checkpoint and best epoch 30 are verified. The retained materials do not identify -the exact training Git revision; the packaging checkout is not a substitute. -Preparation source reconstructs the starting checkpoint recipe: torchvision DEFAULT -EfficientNetV2-S (ImageNet-1K) and a new normalized hierarchical head, seed 42. -The original starting-file hash and run-specific preparation manifest are absent. -The model card and notices disclose this limitation without asserting a verified -initial-file identity. - -All 25 geographic lists retain evaluated membership: updated lists require at least -3 regional / 25 global metadata rows; legacy lists are unchanged. Reconstruction -from the pinned Parquet confirmed all counts and memberships. Any future distinct- -observation counting or membership change requires an identified preset revision. - -[Publication and rollback handoff](publication.md) describes the separate human -publication step. Package ownership and authenticated uploads are publisher actions; -no public release was created by this preparation. +# MAMBO V3 installed-artifact qualification + +Publication remains an owner action. The current preparation path builds the +candidate from a clean committed checkout, qualifies its installed wheels, and +only then stages public files. The authoritative source revision and artifact +hashes are the candidate's `release-candidate.json` and `SHA256SUMS`. + +## Current candidate records + +Local output: `local-evidence/mambo-v3-publication-candidate/`. The corresponding +Action output is `mambo-v3-candidate`; the explicit upload set is +`mambo-v3-publication`. A manifest with `qualification != "passed"` cannot be +staged. Inspect these retained records rather than treating this page as a +completion marker: + +| Record | What it establishes | +| --- | --- | +| `qualification/validation.json` | Exact installed wheel hashes, source identity, fixture type and completed contract checks | +| `qualification/download.json` | Actual pinned ERDA downloads through the installed ONNX-only package, global defaults, embeddings and offline cache reuse | +| `qualification/cpu-none.json` | PyTorch/ONNX global, regional/custom-list and embedding contracts on four images | +| `qualification/cpu-rotation30_pad25_3.json` | The same contracts with the default TTA recipe | +| `qualification/demo.json` | UI construction and real model calls through both backends, dynamic preset/custom/TTA controls, top-K and runtime reuse | +| `qualification/environment.txt` | Resolved runtime versions in the isolated qualification environment | +| `publication/*/publication.json` | Exact staged file inventory for GitHub, the Hub model or the Space | + +The CLI check writes JSON, evaluation CSV and unit embeddings using TTA and cached +offline weights. The ONNX-only installation is checked before installing Torch or +the training package. Dependency consistency is checked after installing both +backends. Qualification leaves the working development environment unchanged. + +## Evidence reuse and limits + +The prior September 25 candidate (`97521ac`) qualified offline/read-only bundle +use and laptop RTX 3080 Ti CUDA execution, including embeddings and TTA. Its +runtime execution reference was `0bfb5d7`. Those records remain historical and are +not relabelled as measurements of the newly built packages. The package identity +migration preserves `mini_trainer` imports; the new `configure()` interface changes +scope/TTA without replacing model sessions. Current installed CPU qualification +covers that interface. + +Trained weights, graphs, preprocessing, preset membership and evaluation policy +are unchanged. Existing Flemming/in-domain accuracy and laptop/B200 measurements +remain applicable within their documented boundaries; no full quality or speed +campaign is repeated. Synthetic CI images establish runtime contracts only; local +qualification can supply retained real images. Neither establishes new accuracy +or universal Windows/macOS/edge/CUDA compatibility. + +Training revision and original initialization-file identity remain unavailable; +see the model card's provenance limits. The Space is qualified locally; public +hosting, credentials, registry installation and live cross-links require the +owner's publication and post-publication checks in [the handoff](publication.md). diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py index 39dac24..c8f5ae3 100644 --- a/dev/releases/mambo_v3/prepare_candidate.py +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -10,7 +10,8 @@ import tomllib from pathlib import Path -from dev.releases.mambo_v3.build_bundle import build +from deployment.mambo_deploy.download import fetch_file +from dev.releases.mambo_v3.build_bundle import INPUTS, build from dev.releases.mambo_v3.package_download_metadata import distribution_readme, package ROOT = Path(__file__).resolve().parents[3] @@ -22,6 +23,14 @@ def digest(path): return hashlib.file_digest(stream, "sha256").hexdigest() +def fetch_inputs(source): + inventory = tomllib.loads((HERE / "inventory.toml").read_text()) + needed = {f"{inventory['production']}/{name}" for name in INPUTS.values()} + for item in inventory["artifacts"]: + if item["path"] in needed: + fetch_file(item["url"], source / item["path"], size=item["size"], sha256=item["sha256"]) + + def prepare(source, output): if output.exists(): raise FileExistsError(f"Choose a new output directory: {output}") @@ -63,6 +72,7 @@ def prepare(source, output): "distribution": "mambo-v3", "package_version": tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"]["version"], "model_id": "MAMBO_v3", + "training_distribution": {key: tomllib.loads((ROOT / "pyproject.toml").read_text())["project"][key] for key in ("name", "version")}, "publication_performed": False, "qualification": "Pending final installed-artifact checks; see qualification records alongside this manifest", "owner_decisions": [], @@ -86,5 +96,8 @@ def prepare(source, output): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--source", type=Path, required=True, help="Verified input inventory directory") parser.add_argument("--output", type=Path, required=True, help="New local artifact directory") + parser.add_argument("--download", action="store_true", help="Fetch only pinned release inputs from ERDA") args = parser.parse_args() + if args.download: + fetch_inputs(args.source.resolve()) prepare(args.source.resolve(), args.output.resolve()) diff --git a/dev/releases/mambo_v3/prepare_names.py b/dev/releases/mambo_v3/prepare_names.py new file mode 100644 index 0000000..2f1e471 --- /dev/null +++ b/dev/releases/mambo_v3/prepare_names.py @@ -0,0 +1,42 @@ +"""Recover display-only taxon names from the pinned preset metadata; never change IDs.""" + +import argparse +import json +import tomllib +from collections import Counter, defaultdict +from pathlib import Path + +import pyarrow as pa +import pyarrow.parquet as pq + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest + + +def prepare(metadata, output): + expected = tomllib.loads((HERE / "construction.toml").read_text())["source"] + if digest(metadata) != expected["sha256"]: + raise ValueError("Metadata differs from pinned preset source") + descriptor = json.loads((ROOT / "deployment/mambo_deploy/default_bundle.json").read_text()) + classes = json.loads(descriptor["metadata"]["classes.json"])["labels"] + eligible = set().union(*map(set, classes)) + counts = defaultdict(Counter) + columns = ["speciesKey", "genusKey", "familyKey", "genus", "specificEpithet", "family"] + for batch in pq.ParquetFile(metadata).iter_batches(batch_size=262144, columns=columns): + grouped = pa.Table.from_batches([batch]).group_by(columns).aggregate([("speciesKey", "count")]).to_pylist() + for row in grouped: + species = " ".join(str(row[key]) for key in ("genus", "specificEpithet") if row[key]) + for key, name in (("speciesKey", species), ("genusKey", row["genus"]), ("familyKey", row["family"])): + label = str(row[key]) + if label in eligible and name: + counts[label][str(name)] += row["speciesKey_count"] + names = {label: sorted(options, key=lambda name: (-options[name], name))[0] for label, options in sorted(counts.items())} + output.write_text(json.dumps(names, ensure_ascii=False, indent=2) + "\n") + print(f"Display names: {len(names)}/{len(eligible)}; sha256={digest(output)}") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("metadata", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + prepare(args.metadata, args.output) diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index 72a8c37..cfba219 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -1,86 +1,135 @@ -# MAMBO V3 publication handoff +# Publish MAMBO V3 -**Preparation only. No command in this document has published this release.** -The package target is `mambo-v3==0.3.0`; the model tag target is `MAMBO_v3`. -The Python import remains `mambo_deploy`. A future generation gets a separate -package, so upgrading this package cannot select a different trained model. +Preparation does not publish anything. The owner performs the steps below after +reviewing the candidate and its qualification records. Packages and weights have +separate identities: training **`minitrainer==0.3.0`** (Python `mini_trainer`), +deployment **`mambo-v3==0.3.0`** (Python `mambo_deploy`), model **`MAMBO_v3`**. +`mini-trainer` on PyPI is an unrelated project; never publish or install it here. -## Local candidate +## 1. Configure accounts and environments -The prepared review set is `local-evidence/mambo-v3-release-candidate-final/`. -Its manifest includes qualification records, and its checksum list includes the -manifest itself. See [final qualification](final-qualification.md) for the exact -source commit, wheel hashes and evidence-reuse scope. +Claim/create the PyPI projects `minitrainer` and `mambo-v3`. The names had no public +project during preparation, but this does not reserve them. Create pending trusted +publishers with owner `asgersvenning`, repository `mini_trainer` and these settings: -From a clean, committed release checkout: +| Project | Workflow filename | GitHub environment | +| --- | --- | --- | +| `minitrainer` | `publish.yml` | `pypi-training` | +| `mambo-v3` | `publish-model.yml` | `pypi-model` | + +Create those GitHub environments plus `model-assets` and `model-demo`, with owner +review before public writes. No PyPI API token is needed. Create the Hugging Face +model repository and Gradio Space, both named `asgersvenning/MAMBO-v3` in their +respective namespaces. Choose CPU Basic initially; the demo does not need a GPU. + +- `model-assets`: variable `HF_MODEL_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` + with write access limited to that model repository. +- `model-demo`: variable `HF_SPACE_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` + with write access limited to that Space. + +These are the destinations linked in the public documentation. If using another +namespace, update those public links before final preparation as well as the +variables. Do not put tokens in source, release assets or CLI arguments. + +## 2. Review and prepare without publishing + +Make the reviewed workflow changes available on the repository's default branch +before using manual Actions dispatch. Push the release source through the normal +review/merge process; no release tag is needed for preparation. + +Run **Prepare and publish MAMBO V3** (`publish-model.yml`) manually on the intended +release revision. Manual dispatch only downloads pinned inputs, builds artifacts, +qualifies installed CPU runtimes and uploads downloadable Action artifacts; +it does not run any publication job. Download and review: + +- `mambo-v3-candidate`: exact wheels, source distribution, offline bundle, evidence, + source/hash manifest and `qualification/` results. +- `mambo-v3-publication`: the explicit GitHub, model and Space upload directories. + +The CLI equivalent, from a clean committed checkout with NumPy/Pillow and uv: ```sh -.venv/bin/python -m dev.releases.mambo_v3.prepare_candidate \ - --source local-evidence/mambo-v3 \ - --output local-evidence/mambo-v3-release-candidate +python -m dev.releases.mambo_v3.prepare_candidate \ + --source local-evidence/mambo-v3 --output local-evidence/mambo-v3-publication-candidate --download +python -m dev.releases.mambo_v3.qualify_candidate \ + local-evidence/mambo-v3-publication-candidate +python -m dev.releases.mambo_v3.publication_assets \ + local-evidence/mambo-v3-publication-candidate --output local-evidence/mambo-v3-publication-assets ``` -The command creates a relocatable model bundle and archive, standalone deployment -wheel and source distribution, matching training wheel, release README, public -comparison evidence, checksums and source-commit inventory. It never tags or uploads. -The output directory must be new. A failed preparation has no completion manifest; -inspect the failure, then use a fresh destination. The inventory is not a claim that -qualification or owner decisions have passed. - -## Before any publication - -- Review the selected CC BY-NC-SA 4.0 weight license, MIT code license and upstream - notices in `NOTICES.md`, `MODEL_CARD.md` and `model-provenance.toml`. Training epoch - 30 is verified; initialization is reconstructed from source. The missing starting - checkpoint hash and training Git revision remain explicit provenance limitations. -- Qualify these exact installed artifacts, record wheel/bundle hashes and actual - runtime versions, and verify the README examples and single CLI owner. -- Confirm PyPI ownership/availability of `mambo-v3` and access to publish the matching - `mini_trainer` dependency. This cannot be assumed from local package construction. -- Review the concrete source commit, release notes/changelog, artifacts, documented - limitations, model notices and validation record. Do not overwrite old model assets. - -## Intended distribution - -PyPI hosts the small Python package; GitHub Releases is the discovery/migration -entry point and can attach wheels and the evidence archive. Existing immutable -ERDA URLs provide automatic verified downloads of the standard model weights. -The relocatable bundle archive is an optional offline download; its size/location -should be checked before selecting a GitHub versus ERDA attachment. - -After approval, a human publisher can create the `MAMBO_v3` tag at the reviewed -commit, publish the exact built distributions, upload any new offline bundle under -an immutable path, and attach `RELEASE_README.md`, `SHA256SUMS` and the artifact -manifest. Use the organization's normal authenticated publishing process; no tokens -or credentials belong in this repository. Test downloading the published assets -and compare their hashes before announcing the release or updating default pointers. - -The prepared README uses links to the planned `MAMBO_v3` tag, so those links become -publicly resolvable only after the reviewed tag exists. Do not silently retarget them -to a moving branch. Review the GitHub-rendered README/figures before announcement. - -## Consumer checks after publication - -Follow the [deployment quick start](../../../deployment/README.md#quick-start), -replacing the local wheel with the published package: +Use a new output directory after a failed attempt. Qualification creates a separate +CPU environment; it never synchronizes the working `.venv`. CI uses synthetic +images for runtime contracts, not accuracy. Local qualification can use +`--dataset /path/to/flemming` for four retained real images. Existing model quality +and timing evidence is reused, with its original environment and methodology. + +Review CC BY-NC-SA 4.0 weight terms, MIT code terms, attribution and the disclosed +missing original training revision/initial-checkpoint hash. Review the rendered +README figures, demo controls and public-file inventories. No photographs, private +prediction archives, credentials or datasets belong in the upload directories. + +## 3. Publish training, then the model + +At the reviewed commit, create and **publish a GitHub Release** with tag +`minitrainer-v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: +`publish.yml` builds, installs and exercises the wheel, then publishes the exact +retained wheel and the source distribution to PyPI. Model/Space jobs do not run. +Verify `minitrainer==0.3.0` is publicly available under the intended ownership. + +Then publish the GitHub Release tagged **`MAMBO_v3`** at the reviewed model commit. +The model workflow prepares and qualifies its candidate before the public gates: + +1. `pypi-model` publishes only `mambo-v3` distributions. It first checks that the + intended `minitrainer` version is public and points to this repository. +2. `model-assets` attaches the offline bundle, deployment distributions, evidence, + inventory and checksums to GitHub; it uploads the model repository and creates + an immutable Hugging Face `v0.3.0` tag at that upload's commit. +3. `model-demo` deploys the staged Space after package/model publication succeeds. + +Prereleases prepare artifacts but do not publish packages or activate the demo. +Training versions and model versions need not advance together. Future trained +models use separate model-generation packages; V3 maintenance retains its weights +and existing preset identities. Introduce a distinct reviewed release identity +before publishing a future model or maintenance version; never reuse `MAMBO_v3` +or an existing package version for different bytes. + +## 4. Verify public integration + +From a fresh environment outside the checkout: ```sh +uv venv --python 3.13 .venv-mambo +source .venv-mambo/bin/activate uv pip install 'mambo-v3[onnx]==0.3.0' -mambo_predict -i images --name results +mambo_predict -i moth.jpg -o output --name onnx +uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i moth.jpg -o output --name isolated ``` -Also check the isolated CLI: -`uvx --from 'mambo-v3[onnx]==0.3.0' mambo_predict -i images`. -Native PyTorch and offline installation follow the same -[runtime guidance](../../../docs/mambo-integration.md); neither requires a -repository checkout or dataset metadata. - -## Rollback and maintenance - -Retain MAMBO V2 and its documented pinned environment/assets unchanged. If V3 needs -to be withdrawn, stop recommending the affected package version; preserve immutable -assets for existing pins and publish a corrective version rather than replacing -bytes. Applications can revert their environment lock or switch to their retained -V2 environment; no input-image migration is needed. Do not reuse V3 embeddings or -confidence thresholds with V2. Keeping both runtimes in separate environments avoids -CLI/import conflicts and makes rollback a deliberate application decision. +Also follow the documented native installation, check cache/offline reuse and +compare downloaded assets against GitHub's `SHA256SUMS`. Open the model page and +Space; try both runtimes, a regional preset, a custom list and TTA. Confirm figures, +citation and cross-links resolve. These are post-publication checks, not claims +that public endpoints were exercised during local preparation. + +## Demo updates and recovery + +For a UI-only update, dispatch **Prepare or update MAMBO demo** (`publish-demo.yml`) +on a reviewed revision. The default `publish=false` builds/checks a staged Space +without public writes. Set `publish=true` and approve `model-demo` to deploy it. +This workflow uploads no package or model weights. It requires the public package +release to exist and pins that package and its CPU runtime dependencies. + +For partial publication, rerun the failed jobs from the same workflow run so they +reuse the prepared artifacts. PyPI skips identical existing distributions; GitHub +compares existing asset bytes and refuses replacements; Hugging Face compares the +recorded immutable revision and refuses a different payload. Do not rebuild and +silently replace already-published files. A different release payload needs a new +reviewed version/identity. If Space upload succeeded but tag creation failed, +retrying records the same payload and revision. + +Retain the reviewed Action artifacts externally before their 30-day expiry. To +withdraw a defective release, stop recommending it and publish a corrective +version; preserve immutable assets for existing pins. Revert an application to its +retained V2 environment if needed. V3 embeddings and thresholds do not transfer to +V2. Remote account configuration, publication and final live endpoint checks remain +owner tasks; preparation never performs those writes. diff --git a/dev/releases/mambo_v3/publication_assets.py b/dev/releases/mambo_v3/publication_assets.py new file mode 100644 index 0000000..b025b16 --- /dev/null +++ b/dev/releases/mambo_v3/publication_assets.py @@ -0,0 +1,120 @@ +"""Stage/verify explicit public release files; never upload or publish anything.""" + +import argparse +import json +import shutil +import subprocess +import tarfile +import tomllib +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest + + +def verify(candidate, *, qualified=True): + manifest = json.loads((candidate / "release-candidate.json").read_text()) + project = tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"] + source = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + if (manifest["distribution"], manifest["package_version"], manifest["model_id"], manifest["source_commit"]) != ( + project["name"], + project["version"], + "MAMBO_v3", + source, + ): + raise ValueError("Candidate identity differs from the checked-out release") + bundle = json.loads((candidate / "mambo-v3-bundle/release.json").read_text()) + if any(bundle[key] != manifest[key] for key in ("model_id", "package_version", "distribution")): + raise ValueError("Bundle and package release identities differ") + for relative, entry in manifest["files"].items(): + path = candidate / relative + if not path.resolve().is_relative_to(candidate.resolve()) or path.is_symlink(): + raise ValueError(f"Invalid candidate path: {relative}") + if path.stat().st_size != entry["size"] or digest(path) != entry["sha256"]: + raise ValueError(f"Candidate integrity mismatch: {relative}") + actual = {p.relative_to(candidate).as_posix() for p in candidate.rglob("*") if p.is_file()} + if actual != set(manifest["files"]) | {"release-candidate.json", "SHA256SUMS"}: + raise ValueError("Candidate contains unaccounted or missing files") + if qualified and manifest["qualification"] != "passed": + raise ValueError("Installed-artifact qualification is not complete") + return manifest + + +def seal(candidate): + manifest = json.loads((candidate / "release-candidate.json").read_text()) + manifest["files"] = { + path.relative_to(candidate).as_posix(): {"size": path.stat().st_size, "sha256": digest(path)} + for path in sorted(candidate.rglob("*")) + if path.is_file() and path.name not in {"release-candidate.json", "SHA256SUMS"} + } + (candidate / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + (candidate / "SHA256SUMS").write_text( + "".join(f"{entry['sha256']} {name}\n" for name, entry in manifest["files"].items()) + + f"{digest(candidate / 'release-candidate.json')} release-candidate.json\n" + ) + + +def stage_space(output, source=None, version=None): + source = source or subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip() + version = version or tomllib.loads((ROOT / "deployment/pyproject.toml").read_text())["project"]["version"] + output.mkdir(parents=True, exist_ok=False) + for name in ("app.py", "README.md", "requirements.txt", "taxon-names.json"): + shutil.copyfile(ROOT / "deployment/demo" / name, output / name) + (output / "publication.json").write_text( + json.dumps( + { + "source_commit": source, + "model_id": "MAMBO_v3", + "package_version": version, + "files": {p.name: digest(p) for p in sorted(output.iterdir()) if p.is_file()}, + }, + indent=2, + ) + + "\n" + ) + return output + + +def stage(candidate, output): + manifest = verify(candidate) + output.mkdir(parents=True, exist_ok=False) + model, space, github = (output / name for name in ("model", "space", "github")) + model.mkdir() + github.mkdir() + shutil.copytree(candidate / "mambo-v3-bundle", model / "bundle") + stage_space(space, manifest["source_commit"], manifest["package_version"]) + shutil.copyfile(HERE / "MODEL_CARD.md", model / "README.md") + for name in ("MODEL_LICENSE.txt", "NOTICES.md"): + shutil.copyfile(HERE / name, model / name) + shutil.copyfile(ROOT / "deployment/CITATION.cff", model / "CITATION.cff") + shutil.copyfile(candidate / "release-candidate.json", model / "release-candidate.json") + # GitHub gets the offline bundle, public evidence and deployment distributions. + # The training wheel is installed for qualification but has its own publication. + for name in ("mambo-v3-bundle.tar.gz", "RELEASE_README.md", "release-candidate.json"): + shutil.copyfile(candidate / name, github / name) + for path in (candidate / "dist").glob("mambo_v3-*"): + shutil.copyfile(path, github / path.name) + with tarfile.open(github / "mambo-v3-evidence.tar.gz", "w:gz") as archive: + for name in ("evidence", "qualification", "publication.md", "evidence-policy.md", "model-provenance.toml"): + archive.add(candidate / name, arcname=name) + (github / "SHA256SUMS").write_text("".join(f"{digest(p)} {p.name}\n" for p in sorted(github.iterdir()) if p.is_file())) + for folder in (model, space, github): + (folder / "publication.json").unlink(missing_ok=True) + payload = { + "source_commit": manifest["source_commit"], + "model_id": manifest["model_id"], + "package_version": manifest["package_version"], + "files": {p.relative_to(folder).as_posix(): digest(p) for p in sorted(folder.rglob("*")) if p.is_file()}, + } + (folder / "publication.json").write_text(json.dumps(payload, indent=2) + "\n") + return output + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("candidate", type=Path) + parser.add_argument("--output", type=Path) + args = parser.parse_args() + if args.output: + stage(args.candidate.resolve(), args.output.resolve()) + else: + verify(args.candidate.resolve()) diff --git a/dev/releases/mambo_v3/publish_assets.py b/dev/releases/mambo_v3/publish_assets.py new file mode 100644 index 0000000..bda33b0 --- /dev/null +++ b/dev/releases/mambo_v3/publish_assets.py @@ -0,0 +1,76 @@ +"""Explicit publication entry point; workflows call it only after human release gates.""" + +import argparse +import json +import os +import subprocess +import tempfile +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import digest + + +def verified_payload(folder): + payload = json.loads((folder / "publication.json").read_text()) + paths = {p.relative_to(folder).as_posix() for p in folder.rglob("*") if p.is_file()} + if paths != set(payload["files"]) | {"publication.json"}: + raise ValueError("Staged publication file set differs from its inventory") + for relative, expected in payload["files"].items(): + path = folder / relative + if not path.resolve().is_relative_to(folder.resolve()) or path.is_symlink() or digest(path) != expected: + raise ValueError(f"Staged publication integrity mismatch: {relative}") + return payload + + +def github(folder, repository, tag): + verified_payload(folder) + release = json.loads(subprocess.check_output(["gh", "api", f"repos/{repository}/releases/tags/{tag}"], text=True)) + existing = {item["name"]: item for item in release["assets"]} + for path in sorted(folder.iterdir()): + if not path.is_file(): + raise ValueError("GitHub release assets must be flat files") + if asset := existing.get(path.name): + with tempfile.TemporaryFile() as stream: + subprocess.run( + ["gh", "api", "-H", "Accept: application/octet-stream", f"repos/{repository}/releases/assets/{asset['id']}"], + stdout=stream, + check=True, + ) + stream.seek(0) + import hashlib + + if hashlib.file_digest(stream, "sha256").hexdigest() != digest(path): + raise ValueError(f"Refusing to replace published asset: {path.name}") + else: + subprocess.run(["gh", "release", "upload", tag, str(path), "--repo", repository], check=True) + + +def hub(folder, repository, kind): + from huggingface_hub import HfApi, hf_hub_download + + payload = verified_payload(folder) + api = HfApi(token=os.environ["HF_TOKEN"]) + tag = f"v{payload['package_version']}" if kind == "model" else f"source-{payload['source_commit']}" + # Account/repository creation is a separate owner task, not implicit here. + tags = {ref.name for ref in api.list_repo_refs(repository, repo_type=kind).tags} + if tag in tags: + existing = Path(hf_hub_download(repository, "publication.json", repo_type=kind, revision=tag, token=api.token)) + if json.loads(existing.read_text()) != payload: + raise ValueError(f"Refusing to replace published {kind} revision: {tag}") + print(f"Already published: {repository}@{tag}") + return + commit = api.upload_folder(repo_id=repository, repo_type=kind, folder_path=folder, commit_message=f"Publish {tag}") + api.create_tag(repo_id=repository, repo_type=kind, tag=tag, revision=commit.oid) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("kind", choices=("github", "model", "space")) + parser.add_argument("folder", type=Path) + parser.add_argument("repository") + parser.add_argument("--tag", default="MAMBO_v3") + args = parser.parse_args() + if args.kind == "github": + github(args.folder.resolve(), args.repository, args.tag) + else: + hub(args.folder.resolve(), args.repository, args.kind) diff --git a/dev/releases/mambo_v3/qualify_candidate.py b/dev/releases/mambo_v3/qualify_candidate.py new file mode 100644 index 0000000..59d11ef --- /dev/null +++ b/dev/releases/mambo_v3/qualify_candidate.py @@ -0,0 +1,101 @@ +"""Qualify exact installed candidate wheels in an isolated CPU environment.""" + +import argparse +import json +import os +import subprocess +import tempfile +from pathlib import Path + +from dev.releases.mambo_v3.prepare_candidate import HERE, ROOT, digest +from dev.releases.mambo_v3.publication_assets import seal, verify + + +def qualify(candidate, dataset=None): + manifest = verify(candidate, qualified=False) + reports = candidate / "qualification" + reports.mkdir(exist_ok=False) + deployment = next((candidate / "dist").glob("mambo_v3-*.whl")) + training = next((candidate / "dist").glob("minitrainer-*.whl")) + with tempfile.TemporaryDirectory(prefix="mambo-installed-") as directory: + work = Path(directory) + env = {**os.environ, "CUDA_VISIBLE_DEVICES": "", "GRADIO_ANALYTICS_ENABLED": "False", "MAMBO_CACHE": str(work / "cache")} + env.pop("PYTHONPATH", None) + env.pop("MAMBO_BUNDLE", None) + env.pop("MAMBO_OFFLINE", None) + subprocess.run(["uv", "venv", "--python", "3.13", str(work / "env")], check=True) + python = work / "env/bin/python" + + def run(*args): + subprocess.run([str(python), "-I", *map(str, args)], cwd=work, env=env, check=True) + + subprocess.run(["uv", "pip", "install", "--python", str(python), f"{deployment}[onnx]"], check=True) + run( + "-c", + "import importlib.util; assert importlib.util.find_spec('torch') is None; " + "assert importlib.util.find_spec('mini_trainer') is None", + ) + if dataset is None: + dataset = work / "images" + run( + "-c", + f"from pathlib import Path; from PIL import Image; p=Path({str(dataset)!r}); " + "[(p/str(i)).mkdir(parents=True) for i in range(4)]; " + "[Image.new('RGB',(96+i*7,80+i*11),(30+i*45,100,150)).save(p/str(i)/'fixture.jpg') for i in range(4)]", + ) + fixture_kind = "synthetic integration fixtures; no accuracy claim" + else: + dataset = dataset.resolve() + fixture_kind = "four retained real images; no new accuracy benchmark" + image = next(dataset.glob("*/*.jpg")) + run(HERE / "check_download_install.py", image, reports / "download.json") + env["MAMBO_OFFLINE"] = "1" + subprocess.run( + [str(python.parent / "mambo_predict"), "-i", str(image), "-o", str(work / "cli"), "--name", "smoke", "--tta", "--embeddings"], + cwd=work, + env=env, + check=True, + ) + run( + "-c", + f"import json,numpy as np; from pathlib import Path; p=Path({str(work / 'cli/smoke')!r}); " + "assert len(json.loads((p/'predictions.json').read_text())['results'])==1; " + "assert np.load(p/'embeddings.npy').shape==(1,1280); assert (p/'mini_metric.csv').is_file()", + ) + subprocess.run( + ["uv", "pip", "install", "--python", str(python), "--torch-backend", "cpu", str(training), f"{deployment}[torch]"], check=True + ) + for tta in ("none", "rotation30_pad25_3"): + run(HERE / "qualify_bundle.py", candidate / "mambo-v3-bundle", dataset, "--tta", tta, "--output", reports / f"cpu-{tta}.json") + subprocess.run(["uv", "pip", "install", "--python", str(python), "gradio==6.28.0"], check=True) + run(HERE / "qualify_demo.py", ROOT / "deployment/demo/app.py", image, reports / "demo.json") + subprocess.run(["uv", "pip", "check", "--python", str(python)], check=True) + packages = subprocess.check_output(["uv", "pip", "freeze", "--python", str(python)], text=True) + (reports / "environment.txt").write_text(packages) + (reports / "validation.json").write_text( + json.dumps( + { + "source_commit": manifest["source_commit"], + "fixture_kind": fixture_kind, + "wheel_sha256": {p.name: digest(p) for p in (deployment, training)}, + "onnx_without_torch": True, + "automatic_download_and_offline_cache": True, + "cli_tta_embeddings": True, + "cpu_backends_presets_custom_tta_embeddings": True, + }, + indent=2, + ) + + "\n" + ) + manifest["qualification"] = "passed" + (candidate / "release-candidate.json").write_text(json.dumps(manifest, indent=2) + "\n") + seal(candidate) + verify(candidate) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("candidate", type=Path) + parser.add_argument("--dataset", type=Path, help="Optional retained image directory; otherwise use synthetic fixtures") + args = parser.parse_args() + qualify(args.candidate.resolve(), args.dataset) diff --git a/dev/releases/mambo_v3/qualify_demo.py b/dev/releases/mambo_v3/qualify_demo.py new file mode 100644 index 0000000..0e93e51 --- /dev/null +++ b/dev/releases/mambo_v3/qualify_demo.py @@ -0,0 +1,52 @@ +"""Check the staged single-image UI with installed runtimes; never launch a server.""" + +import argparse +import json +import runpy +from pathlib import Path + +from PIL import Image + + +def qualify(app_path, image_path, output): + demo = runpy.run_path(str(app_path)) + interface = demo["build_app"]() + if not interface.blocks: + raise AssertionError("Empty demo interface") + records = [] + with Image.open(image_path) as source: + image = source.convert("RGB") + for backend in ("onnx", "torch"): + predictor = demo["predictor_for"](backend) + custom = predictor.class_list[0] + runtime = None + for preset, labels, tta in (("full", "", False), ("north_europe", "", True), ("full", custom, False)): + tables = demo["classify"](image, backend, preset, labels, tta, 5) + if not all(table and all(0 <= row[3] <= 100 and row[2] for row in table) for table in tables[:3]): + raise AssertionError("Missing predictions, taxon IDs or valid confidences") + current = predictor._torch_model if backend == "torch" else predictor._sessions["onnx"] + if runtime is not None and current is not runtime: + raise AssertionError("Changing demo configuration reloaded the runtime") + runtime = current + records.append( + { + "backend": backend, + "preset": preset, + "custom": bool(labels), + "tta": tta, + "rows": [len(table) for table in tables[:3]], + "status": tables[-1], + } + ) + if demo["predictor_for"].cache_info().currsize != 2: + raise AssertionError("Unexpected runtime cache size") + output.write_text(json.dumps({"controls": records, "runtime_reuse": True, "ui_constructed": True}, indent=2) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("app", type=Path) + parser.add_argument("image", type=Path) + parser.add_argument("output", type=Path) + args = parser.parse_args() + qualify(args.app, args.image, args.output) diff --git a/tests/releases/test_publication.py b/tests/releases/test_publication.py new file mode 100644 index 0000000..b864b5f --- /dev/null +++ b/tests/releases/test_publication.py @@ -0,0 +1,77 @@ +"""Publication must reject changed bytes and must not repeat immutable Hub uploads.""" + +import json +import sys +from types import SimpleNamespace + +import pytest + +from dev.releases.mambo_v3.prepare_candidate import digest +from dev.releases.mambo_v3.publish_assets import hub, verified_payload + + +@pytest.fixture +def payload(tmp_path): + (tmp_path / "README.md").write_text("Public model card") + data = { + "source_commit": "a" * 40, + "package_version": "0.3.0", + "model_id": "MAMBO_v3", + "files": {"README.md": digest(tmp_path / "README.md")}, + } + (tmp_path / "publication.json").write_text(json.dumps(data)) + return tmp_path + + +def test_modified_or_uninventoried_file_cannot_be_published(payload): + verified_payload(payload) + (payload / "README.md").write_text("Unreviewed change") + with pytest.raises(ValueError, match="integrity"): + verified_payload(payload) + (payload / "private.txt").write_text("Not a release input") + with pytest.raises(ValueError, match="file set"): + verified_payload(payload) + + +def test_hub_retry_checks_identity_without_reupload(payload, monkeypatch, tmp_path): + remote = tmp_path / "remote.json" + remote.write_bytes((payload / "publication.json").read_bytes()) + # Keep simulated remote state outside the local publication inventory. + remote_state = remote.read_text() + remote.unlink() + calls = [] + api = SimpleNamespace( + token="unused", + list_repo_refs=lambda *a, **kw: SimpleNamespace(tags=[SimpleNamespace(name="v0.3.0")]), + upload_folder=lambda **kw: calls.append(kw), + create_tag=lambda **kw: calls.append(kw), + ) + + def download(*a, **kw): + destination = tmp_path.parent / f"{tmp_path.name}-remote.json" + destination.write_text(remote_state) + return str(destination) + + monkeypatch.setenv("HF_TOKEN", "unused") + monkeypatch.setitem(sys.modules, "huggingface_hub", SimpleNamespace(HfApi=lambda **kw: api, hf_hub_download=download)) + hub(payload, "owner/model", "model") + assert calls == [] + remote_state = json.dumps({"different": "release"}) + with pytest.raises(ValueError, match="Refusing to replace"): + hub(payload, "owner/model", "model") + assert calls == [] + + +def test_hub_tags_exact_uploaded_commit(payload, monkeypatch): + calls = [] + api = SimpleNamespace( + token="unused", + list_repo_refs=lambda *a, **kw: SimpleNamespace(tags=[]), + upload_folder=lambda **kw: SimpleNamespace(oid="reviewed-upload-commit"), + create_tag=lambda **kw: calls.append(kw), + ) + monkeypatch.setenv("HF_TOKEN", "unused") + monkeypatch.setitem(sys.modules, "huggingface_hub", SimpleNamespace(HfApi=lambda **kw: api, hf_hub_download=None)) + hub(payload, "owner/model", "model") + assert calls[0]["revision"] == "reviewed-upload-commit" + assert calls[0]["tag"] == "v0.3.0" From 3060c6df1aa3343199655f4d9e8b3159c52825ec Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:56:47 +0200 Subject: [PATCH 214/221] docs(packaging): make renamed distribution instructions publication-ready --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index cab203f..3ad466b 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,6 @@ and package management. Choose a published package or a source checkout. The distribution is `minitrainer`; Python imports remain `mini_trainer`. The similarly named `mini-trainer` / `mini_trainer` PyPI project is unrelated. -Version 0.3.0 is prepared for publication; use the source installation below until published. ```bash uv venv --python 3.12 From e208f24b3665708f09d8b86c6afb7434d792c034 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 18:57:19 +0200 Subject: [PATCH 215/221] fix(release): qualify demo against the complete offline candidate --- dev/releases/mambo_v3/qualify_candidate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/releases/mambo_v3/qualify_candidate.py b/dev/releases/mambo_v3/qualify_candidate.py index 59d11ef..69e5bee 100644 --- a/dev/releases/mambo_v3/qualify_candidate.py +++ b/dev/releases/mambo_v3/qualify_candidate.py @@ -68,6 +68,7 @@ def run(*args): for tta in ("none", "rotation30_pad25_3"): run(HERE / "qualify_bundle.py", candidate / "mambo-v3-bundle", dataset, "--tta", tta, "--output", reports / f"cpu-{tta}.json") subprocess.run(["uv", "pip", "install", "--python", str(python), "gradio==6.28.0"], check=True) + env["MAMBO_BUNDLE"] = str(candidate / "mambo-v3-bundle") run(HERE / "qualify_demo.py", ROOT / "deployment/demo/app.py", image, reports / "demo.json") subprocess.run(["uv", "pip", "check", "--python", str(python)], check=True) packages = subprocess.check_output(["uv", "pip", "freeze", "--python", str(python)], text=True) From 0976974e83f8c746c5018ed0e8b8323d5f20d596 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 19:06:58 +0200 Subject: [PATCH 216/221] fix: handle untouched custom list in release demo --- deployment/demo/app.py | 3 ++- dev/releases/mambo_v3/deployment-freeze.md | 12 ++++++------ dev/releases/mambo_v3/qualify_demo.py | 2 +- docs/roadmap.md | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/deployment/demo/app.py b/deployment/demo/app.py index 7235d1d..2ff2ff7 100644 --- a/deployment/demo/app.py +++ b/deployment/demo/app.py @@ -30,6 +30,7 @@ def predictor_for(backend): def classify(image, backend, preset, custom, tta, topk): if image is None: raise gr.Error("Upload one moth or butterfly image first.") + custom = custom or "" labels = tuple(dict.fromkeys(custom.replace(",", " ").split())) if custom.strip() else () try: with LOCK: @@ -84,7 +85,7 @@ def build_app(): tta = gr.Checkbox(value=False, label="TTA — recommended recipe, about 3× more inference work") topk = gr.Slider(1, 10, value=5, step=1, label="Candidates per rank") with gr.Accordion("Custom species list", open=False): - custom = gr.Textbox(label="GBIF species IDs, separated by spaces, commas or newlines", lines=3) + custom = gr.Textbox(value="", label="GBIF species IDs, separated by spaces, commas or newlines", lines=3) gr.Markdown("When supplied, this replaces the geographic preset.") run = gr.Button("Classify", variant="primary") status = gr.Markdown() diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 620a650..942ff89 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -1,9 +1,8 @@ # MAMBO V3 deployment freeze -26 September 2026. Publication preparation is active after the packaging audit. -The previous candidate qualification is historical; the final candidate must be -rebuilt after the changes below. Release preparation only: packages, artifacts and tags have not -been published. The selected weight license is **CC BY-NC-SA 4.0**; adapter code +26 September 2026. Publication preparation is implemented; installed-candidate +records and hashes gate the publisher handoff. Packages, artifacts and tags have +not been published. The selected weight license is **CC BY-NC-SA 4.0**; adapter code remains MIT. Final artifact identities and installed checks are recorded in [final qualification](final-qualification.md). @@ -19,8 +18,9 @@ remains MIT. Final artifact identities and installed checks are recorded in top-K controls and names for all 17,212 taxa. Runtime reuse is qualified on a real image; final installed-candidate qualification is recorded with its artifacts. Browser reuse is assessed separately below. -- Complete publication documentation, model/Space staging, final rebuilt artifact - qualification and the human publishing handoff before calling this freeze ready. +- Publication documentation, explicit model/Space staging and installed qualification + are implemented. Follow the ordered handoff for account setup and public release; + inspect the candidate records before approving its artifacts. ## Browser scope diff --git a/dev/releases/mambo_v3/qualify_demo.py b/dev/releases/mambo_v3/qualify_demo.py index 0e93e51..6489aa1 100644 --- a/dev/releases/mambo_v3/qualify_demo.py +++ b/dev/releases/mambo_v3/qualify_demo.py @@ -20,7 +20,7 @@ def qualify(app_path, image_path, output): predictor = demo["predictor_for"](backend) custom = predictor.class_list[0] runtime = None - for preset, labels, tta in (("full", "", False), ("north_europe", "", True), ("full", custom, False)): + for preset, labels, tta in (("full", None, False), ("north_europe", "", True), ("full", custom, False)): tables = demo["classify"](image, backend, preset, labels, tta, 5) if not all(table and all(0 <= row[3] <= 100 and row[2] for row in table) for table in tables[:3]): raise AssertionError("Missing predictions, taxon IDs or valid confidences") diff --git a/docs/roadmap.md b/docs/roadmap.md index f16a3e2..88c1c16 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,13 +1,13 @@ # Repository roadmap -Updated 25 September 2026. This is the cross-campaign priority map; specialist +Updated 26 September 2026. This is the cross-campaign priority map; specialist pages own procedures and evidence. Delivered work is context, not a new checklist. ## Current state and next delivery | Area | Delivered | Remaining boundary | | --- | --- | --- | -| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Package identity and independently triggered publication automation, a small Space demo, and final candidate qualification are being completed. Public publication remains manual. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | +| MAMBO V3 | PyTorch/ONNX adapter, presets/custom lists, embeddings, TTA, Flemming/in-domain comparisons and laptop/B200 timings; installed release candidate qualified. | Renamed training distribution, independent publication Actions and a small Space demo are prepared; installed-candidate records gate publication. Account setup, publication and live endpoint checks remain owner tasks. See [final qualification](../dev/releases/mambo_v3/final-qualification.md) and [publication handoff](../dev/releases/mambo_v3/publication.md). Do not restart completed release experiments. | | Training | Four-GPU UCloud production run completed; loader, optimizer-step and checkpoint safeguards implemented. | Before another production run, deliver the recovery/evaluation workflow below. | | Quantization | Merged opt-in native CUDA INT8 Linear training, x86 PTQ/QAT, checkpoint/export tools. | Useful target-machine trade-offs remain unqualified; [specialist roadmap](quantization-roadmap.md). | | Generic export | `mt_export`, manifests and CPU float32 ONNX qualification across representative heads/backbones. | Broader backend qualification and generic Hugging Face bundle integration; MAMBO packaging does not establish either for every model. | From 86abc56e50b30b7dc1552eb0aa26363f019c3341 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 19:10:41 +0200 Subject: [PATCH 217/221] fix(release): exclude build sidecar from artifact inventory --- dev/releases/mambo_v3/prepare_candidate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/releases/mambo_v3/prepare_candidate.py b/dev/releases/mambo_v3/prepare_candidate.py index c8f5ae3..8ac15ab 100644 --- a/dev/releases/mambo_v3/prepare_candidate.py +++ b/dev/releases/mambo_v3/prepare_candidate.py @@ -52,6 +52,7 @@ def prepare(source, output): package(bundle, stage / "mambo_deploy/default_bundle.json") subprocess.run(["uv", "build", "--project", str(stage), "--wheel", "--sdist", "--out-dir", str(dist)], check=True) subprocess.run(["uv", "build", "--wheel", "--out-dir", str(dist)], cwd=ROOT, check=True) + (dist / ".gitignore").unlink(missing_ok=True) # Build sidecar, omitted by Actions artifact upload. (output / "RELEASE_README.md").write_text(distribution_readme()) for name in ("publication.md", "evidence-policy.md", "model-provenance.toml"): shutil.copyfile(HERE / name, output / name) From 7d5da8e87b282ee632d8b860e4a331df624df529 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 19:20:41 +0200 Subject: [PATCH 218/221] ci: route release preparation and publication by product hierarchy --- .github/model-releases.toml | 8 ++ .github/workflows/ci.yml | 4 +- .github/workflows/publish-demo.yml | 49 +++++++++--- .github/workflows/publish-model.yml | 83 ++++++++++++++------ .github/workflows/publish.yml | 40 +++++----- dev/release_route.py | 82 +++++++++++++++++++ dev/releases/README.md | 46 +++++++++++ dev/releases/mambo_v3/deployment-freeze.md | 5 +- dev/releases/mambo_v3/final-qualification.md | 4 +- dev/releases/mambo_v3/publication.md | 35 +++++---- tests/releases/test_release_route.py | 61 ++++++++++++++ 11 files changed, 346 insertions(+), 71 deletions(-) create mode 100644 .github/model-releases.toml create mode 100644 dev/release_route.py create mode 100644 dev/releases/README.md create mode 100644 tests/releases/test_release_route.py diff --git a/.github/model-releases.toml b/.github/model-releases.toml new file mode 100644 index 0000000..7f69604 --- /dev/null +++ b/.github/model-releases.toml @@ -0,0 +1,8 @@ +# Routing is shared; preparation and artifact semantics belong to each model. +[models.mambo-v3] +project = "deployment" +module = "dev.releases.mambo_v3" +# Preserve the tag already used throughout this release's public documentation. +# Omit these two fields for the standard models/PRODUCT/vVERSION convention. +tag = "MAMBO_v3" +tag_version = "0.3.0" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c4c9ab0..7a72b73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,14 +2,14 @@ name: CI on: push: - branches: ["master", "release/mambo-v3"] + branches: ["master", "release/**"] # Only agent documents are exempt; source, public docs and workflow edits run checks. paths-ignore: - 'AGENTS.md' - '.agents/**/*.md' - '.agents/.gitignore' pull_request: - branches: ["master", "release/mambo-v3"] + branches: ["master", "release/**"] permissions: contents: read diff --git a/.github/workflows/publish-demo.yml b/.github/workflows/publish-demo.yml index fc2853b..6f11d2d 100644 --- a/.github/workflows/publish-demo.yml +++ b/.github/workflows/publish-demo.yml @@ -1,8 +1,14 @@ -name: Prepare or update MAMBO demo +name: Prepare or update model demo on: + push: + branches: ["release/demos/**"] workflow_dispatch: inputs: + product: + description: Model distribution name, e.g. mambo-v3 + type: string + required: true publish: description: Deploy the reviewed demo to Hugging Face type: boolean @@ -12,11 +18,31 @@ permissions: contents: read concurrency: - group: deploy-mambo-v3-space + group: prepare-demo-${{ github.ref }} cancel-in-progress: false jobs: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + env: + RELEASE_PRODUCT: ${{ inputs.product }} + run: python3 dev/release_route.py demos + prepare: + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: route + if: needs.route.outputs.enabled == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -27,7 +53,7 @@ jobs: - run: uv pip install --python .venv-release/bin/python numpy pillow - name: Stage only the demo run: | - .venv-release/bin/python -c 'from pathlib import Path; from dev.releases.mambo_v3.publication_assets import stage_space; stage_space(Path("space"))' + .venv-release/bin/python -c 'import os; from pathlib import Path; from importlib import import_module; stage_space=import_module(os.environ["RELEASE_MODULE"]+".publication_assets").stage_space; stage_space(Path("space"))' - name: Check the installed public demo dependencies env: GRADIO_ANALYTICS_ENABLED: "False" @@ -36,22 +62,27 @@ jobs: .venv-release/bin/python -c 'import runpy; app=runpy.run_path("space/app.py"); app["build_app"]()' - uses: actions/upload-artifact@v4 with: - name: mambo-v3-space + name: model-space path: space/ if-no-files-found: error publish: - needs: prepare - if: inputs.publish + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: [route, prepare] + if: github.event_name == 'workflow_dispatch' && inputs.publish runs-on: ubuntu-latest - environment: model-demo + concurrency: + group: deploy-space-${{ needs.route.outputs.product }} + cancel-in-progress: false + environment: model-demo-${{ needs.route.outputs.product }} steps: - uses: actions/checkout@v6 with: persist-credentials: false - uses: actions/download-artifact@v4 with: - name: mambo-v3-space + name: model-space path: space/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release @@ -60,4 +91,4 @@ jobs: env: HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} - run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets space space "$HF_SPACE_REPO" + run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish-model.yml b/.github/workflows/publish-model.yml index a458299..0150079 100644 --- a/.github/workflows/publish-model.yml +++ b/.github/workflows/publish-model.yml @@ -1,20 +1,46 @@ -name: Prepare and publish MAMBO V3 +name: Prepare and publish model on: + push: + branches: ["release/models/**"] release: types: [published] workflow_dispatch: + inputs: + product: + description: Model distribution name, e.g. mambo-v3 + type: string + required: true permissions: contents: read concurrency: - group: publish-mambo-v3 + group: publish-model-${{ github.ref }} cancel-in-progress: false jobs: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + env: + RELEASE_PRODUCT: ${{ inputs.product }} + run: python3 dev/release_route.py models + prepare: - if: github.event_name == 'workflow_dispatch' || github.event.release.tag_name == 'MAMBO_v3' + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: route + if: needs.route.outputs.enabled == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -25,39 +51,42 @@ jobs: - run: uv pip install --python .venv-release/bin/python numpy pillow - name: Build pinned candidate run: | - .venv-release/bin/python -m dev.releases.mambo_v3.prepare_candidate \ - --source "$RUNNER_TEMP/mambo-inputs" --output "$RUNNER_TEMP/candidate" --download + .venv-release/bin/python -m ${RELEASE_MODULE}.prepare_candidate \ + --source "$RUNNER_TEMP/model-inputs" --output "$RUNNER_TEMP/candidate" --download - name: Qualify exact installed artifacts - run: .venv-release/bin/python -m dev.releases.mambo_v3.qualify_candidate "$RUNNER_TEMP/candidate" + run: .venv-release/bin/python -m ${RELEASE_MODULE}.qualify_candidate "$RUNNER_TEMP/candidate" - name: Stage public files run: | - .venv-release/bin/python -m dev.releases.mambo_v3.publication_assets \ + .venv-release/bin/python -m ${RELEASE_MODULE}.publication_assets \ "$RUNNER_TEMP/candidate" --output "$RUNNER_TEMP/publication" - uses: actions/upload-artifact@v4 with: - name: mambo-v3-candidate + name: model-candidate path: ${{ runner.temp }}/candidate/ if-no-files-found: error retention-days: 30 - uses: actions/upload-artifact@v4 with: - name: mambo-v3-publication + name: model-publication path: ${{ runner.temp }}/publication/ if-no-files-found: error retention-days: 30 package: - needs: prepare - if: github.event_name == 'release' && github.event.release.tag_name == 'MAMBO_v3' && !github.event.release.prerelease + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + RELEASE_PRODUCT: ${{ needs.route.outputs.product }} + needs: [route, prepare] + if: github.event_name == 'release' && !github.event.release.prerelease runs-on: ubuntu-latest - environment: pypi-model + environment: pypi-model-${{ needs.route.outputs.product }} permissions: id-token: write contents: read steps: - uses: actions/download-artifact@v4 with: - name: mambo-v3-candidate + name: model-candidate path: candidate/ - run: cd candidate && sha256sum --check SHA256SUMS - uses: astral-sh/setup-uv@v8.1.0 @@ -72,12 +101,15 @@ jobs: assert metadata['project_urls']['Repository'] == 'https://github.com/asgersvenning/mini_trainer' PYTHON - name: Publish deployment package only - run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ candidate/dist/mambo_v3-*.whl candidate/dist/mambo_v3-*.tar.gz + run: uv publish --trusted-publishing always --check-url https://pypi.org/simple/ candidate/dist/"${RELEASE_PRODUCT//-/_}"-*.whl candidate/dist/"${RELEASE_PRODUCT//-/_}"-*.tar.gz assets: - needs: package + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + RELEASE_TAG: ${{ needs.route.outputs.tag }} + needs: [route, package] runs-on: ubuntu-latest - environment: model-assets + environment: model-assets-${{ needs.route.outputs.product }} permissions: contents: write steps: @@ -86,7 +118,7 @@ jobs: persist-credentials: false - uses: actions/download-artifact@v4 with: - name: mambo-v3-publication + name: model-publication path: publication/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release @@ -95,24 +127,29 @@ jobs: env: GH_TOKEN: ${{ github.token }} GH_REPOSITORY: ${{ github.repository }} - run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets github publication/github "$GH_REPOSITORY" + run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets github publication/github "$GH_REPOSITORY" --tag "$RELEASE_TAG" - name: Publish model and immutable Hugging Face revision env: HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_MODEL_REPO: ${{ vars.HF_MODEL_REPO }} - run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets model publication/model "$HF_MODEL_REPO" + run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets model publication/model "$HF_MODEL_REPO" demo: - needs: assets + env: + RELEASE_MODULE: ${{ needs.route.outputs.module }} + needs: [route, assets] runs-on: ubuntu-latest - environment: model-demo + concurrency: + group: deploy-space-${{ needs.route.outputs.product }} + cancel-in-progress: false + environment: model-demo-${{ needs.route.outputs.product }} steps: - uses: actions/checkout@v6 with: persist-credentials: false - uses: actions/download-artifact@v4 with: - name: mambo-v3-publication + name: model-publication path: publication/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release @@ -121,4 +158,4 @@ jobs: env: HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} - run: .venv-release/bin/python -m dev.releases.mambo_v3.publish_assets space publication/space "$HF_SPACE_REPO" + run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space publication/space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ec0232c..7fece5f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,6 +1,8 @@ name: Publish training package on: + push: + branches: ["release/packages/**"] release: types: [published] workflow_dispatch: @@ -13,27 +15,29 @@ concurrency: cancel-in-progress: false jobs: + route: + runs-on: ubuntu-latest + outputs: + enabled: ${{ steps.route.outputs.enabled }} + product: ${{ steps.route.outputs.product }} + module: ${{ steps.route.outputs.module }} + tag: ${{ steps.route.outputs.tag }} + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - id: route + run: python3 dev/release_route.py packages + prepare: - if: github.event_name == 'workflow_dispatch' || startsWith(github.event.release.tag_name, 'minitrainer-v') + needs: route + if: needs.route.outputs.enabled == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: persist-credentials: false - uses: astral-sh/setup-uv@v8.1.0 - - name: Validate release identity - env: - RELEASE_TAG: ${{ github.event.release.tag_name }} - run: | - python3 - <<'PY' - import os, tomllib - from pathlib import Path - project = tomllib.loads(Path('pyproject.toml').read_text())['project'] - assert project['name'] == 'minitrainer' - tag = os.environ['RELEASE_TAG'] - if tag: - assert tag == f"minitrainer-v{project['version']}", 'Tag and package version differ' - PY - run: uv python install 3.13 - name: Qualify and retain the wheel run: WHEEL_OUTPUT_DIR="$PWD/dist" bash dev/check-wheel.sh 3.13 @@ -42,13 +46,13 @@ jobs: run: sha256sum dist/* > dist/SHA256SUMS - uses: actions/upload-artifact@v4 with: - name: minitrainer-distributions + name: training-distributions path: dist/ if-no-files-found: error publish: - needs: prepare - if: github.event_name == 'release' && startsWith(github.event.release.tag_name, 'minitrainer-v') && !github.event.release.prerelease + needs: [route, prepare] + if: github.event_name == 'release' && !github.event.release.prerelease runs-on: ubuntu-latest environment: pypi-training permissions: @@ -57,7 +61,7 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - name: minitrainer-distributions + name: training-distributions path: dist/ - name: Verify qualified artifact bytes run: sha256sum --check dist/SHA256SUMS diff --git a/dev/release_route.py b/dev/release_route.py new file mode 100644 index 0000000..2b9923e --- /dev/null +++ b/dev/release_route.py @@ -0,0 +1,82 @@ +"""Resolve release intent from branch/tag identity; never authorize publication on push.""" + +import argparse +import json +import os +import re +import tomllib +from pathlib import Path + + +def products(root, kind): + if kind == "packages": + project = tomllib.loads((root / "pyproject.toml").read_text())["project"] + return {project["name"]: {"project": "."}} + return tomllib.loads((root / ".github/model-releases.toml").read_text())["models"] + + +def resolve(root, kind, event_name, ref, event, selected=None): + entries = products(root, kind) + tag = event.get("release", {}).get("tag_name", "") + category = "models" if kind == "demos" else kind + if event_name == "release": + if kind == "demos": + return {"enabled": "false"} + prefix = f"{category}/" + if tag.startswith(prefix): + parts = tag.split("/") + if len(parts) != 3: + raise ValueError("Expected category/product/vVERSION release tag") + selected = parts[1] + else: + selected = next((name for name, item in entries.items() if item.get("tag") == tag), None) + if selected is None: + return {"enabled": "false"} + elif event_name == "push": + prefix = f"refs/heads/release/{kind}/" + if not ref.startswith(prefix): + return {"enabled": "false"} + selected = ref.removeprefix(prefix) + elif event_name == "workflow_dispatch": + if kind == "packages" and not selected: + selected = next(iter(entries)) + else: + return {"enabled": "false"} + if selected not in entries or not re.fullmatch(r"[a-z0-9][a-z0-9-]*", selected): + raise ValueError(f"Unknown {kind} product: {selected!r}") + entry = entries[selected] + project_path = (root / entry["project"] / "pyproject.toml").resolve() + if not project_path.is_relative_to(root.resolve()): + raise ValueError("Project must be inside the repository") + project = tomllib.loads(project_path.read_text())["project"] + if project["name"] != selected: + raise ValueError("Release product differs from distribution name") + version = project["version"] + expected = entry.get("tag", f"{category}/{selected}/v{version}") + if "tag" in entry and entry.get("tag_version") != version: + raise ValueError("Explicit release tag must be reviewed for the new package version") + if event_name == "release" and tag != expected: + raise ValueError(f"Tag does not match checked-out release: expected {expected!r}") + module = entry.get("module", "") + if kind != "packages" and not re.fullmatch(r"[a-z_]\w*(?:\.[a-z_]\w*)+", module): + raise ValueError("Model needs a valid preparation module") + return {"enabled": "true", "product": selected, "version": version, "tag": expected, "module": module} + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("kind", choices=("packages", "models", "demos")) + args = parser.parse_args() + result = resolve( + Path(__file__).resolve().parents[1], + args.kind, + os.environ["GITHUB_EVENT_NAME"], + os.environ["GITHUB_REF"], + json.loads(Path(os.environ["GITHUB_EVENT_PATH"]).read_text()), + os.environ.get("RELEASE_PRODUCT"), + ) + with Path(os.environ["GITHUB_OUTPUT"]).open("a") as stream: + for key, value in result.items(): + if "\n" in value or "\r" in value: + raise ValueError("Invalid multiline release metadata") + stream.write(f"{key}={value}\n") diff --git a/dev/releases/README.md b/dev/releases/README.md new file mode 100644 index 0000000..a6a50cd --- /dev/null +++ b/dev/releases/README.md @@ -0,0 +1,46 @@ +# Release preparation and publication + +Branches select preparation; publishing a GitHub Release selects publication. +A branch push or tag push never publishes packages, weights or a hosted demo. +Ordinary CI covers `master` and every `release/**` branch. + +| Product | Preparation branch | GitHub Release tag | Workflow | +| --- | --- | --- | --- | +| Training package | `release/packages/minitrainer` | `packages/minitrainer/vVERSION` | `publish.yml` | +| Model package and assets | `release/models/PRODUCT` | `models/PRODUCT/vVERSION` | `publish-model.yml` | +| Demo only | `release/demos/PRODUCT` | No package/model release | `publish-demo.yml` | + +Manual dispatch also prepares a selected revision; model/demo dispatch requires +`product`. Only a non-prerelease GitHub Release can reach package/model publication. +Demo-only publication requires manual `publish=true`. Human environment approvals +remain the last gate. Release routing uses the tag, not `target_commitish`: the +latter may be a commit SHA and does not reliably identify a branch. + +[The resolver](../release_route.py) checks product and version against the +checked-out `pyproject.toml`. [Model descriptors](../../.github/model-releases.toml) +select each model's project and preparation module. Future models add a descriptor +and their necessary release-specific preparation; the publication workflows do +not need another model-name condition. An explicit tag override requires a matching +`tag_version`, preventing accidental reuse for a maintenance version. + +**MAMBO V3 keeps `MAMBO_v3` as its explicit release tag**, preserving prepared +public links. Its existing `release/mambo-v3` branch still receives CI and can use +manual preparation with `product=mambo-v3`; no branch rename is required. Use +`release/models/mambo-v3` for automatic model preparation on push. These are the +same product, not two independently publishable release identities. + +Each model module owns `prepare_candidate`, `qualify_candidate`, +`publication_assets` and `publish_assets`, using the command interfaces shown in +the workflows. This keeps model-specific input inventories, fixture policy, bundle +layout and immutable-upload handling with the release that knows those contracts. +Demo staging exports `stage_space(output)` and its pinned requirements. Shared +workflows orchestrate these steps and retain their exact qualified artifacts. + +Training uses `pypi-training`. Model environments are scoped per product: +`pypi-model-PRODUCT`, `model-assets-PRODUCT` and `model-demo-PRODUCT`. Configure +model/Space destinations and narrowly scoped credentials there. Both demo paths +share a per-product deployment concurrency group. A future model needs its own +accounts/environments; it cannot inherit another model's destinations implicitly. + +Use [the MAMBO V3 handoff](mambo_v3/publication.md) for concrete accounts, +artifact review, publication order, endpoint checks and safe retries. diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 942ff89..2f0c110 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -11,9 +11,10 @@ remains MIT. Final artifact identities and installed checks are recorded in - Integrated the `minitrainer` distribution rename, retaining `mini_trainer` imports. Both lockfiles preserve dependency versions. Isolated installed-wheel imports, CLI, training, checkpoint reload and inference passed. -- Training publication now accepts `minitrainer-vVERSION` release events only; +- Training publication now accepts `packages/minitrainer/vVERSION` release events only; manual dispatch prepares artifacts without publication. Model and demo publication - have separate workflows, environment gates and verified upload inventories. + have separate workflows, per-product environment gates and verified upload inventories. + [Hierarchical branch/tag routing](../README.md) is shared across releases. - The CPU Space uses the release API with runtime, scope, custom-list, TTA and top-K controls and names for all 17,212 taxa. Runtime reuse is qualified on a real image; final installed-candidate qualification is recorded with its artifacts. diff --git a/dev/releases/mambo_v3/final-qualification.md b/dev/releases/mambo_v3/final-qualification.md index bc7d2b7..0504b25 100644 --- a/dev/releases/mambo_v3/final-qualification.md +++ b/dev/releases/mambo_v3/final-qualification.md @@ -8,8 +8,8 @@ hashes are the candidate's `release-candidate.json` and `SHA256SUMS`. ## Current candidate records Local output: `local-evidence/mambo-v3-publication-candidate/`. The corresponding -Action output is `mambo-v3-candidate`; the explicit upload set is -`mambo-v3-publication`. A manifest with `qualification != "passed"` cannot be +Action output is `model-candidate`; the explicit upload set is +`model-publication`. A manifest with `qualification != "passed"` cannot be staged. Inspect these retained records rather than treating this page as a completion marker: diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index cfba219..c382029 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -15,16 +15,16 @@ publishers with owner `asgersvenning`, repository `mini_trainer` and these setti | Project | Workflow filename | GitHub environment | | --- | --- | --- | | `minitrainer` | `publish.yml` | `pypi-training` | -| `mambo-v3` | `publish-model.yml` | `pypi-model` | +| `mambo-v3` | `publish-model.yml` | `pypi-model-mambo-v3` | -Create those GitHub environments plus `model-assets` and `model-demo`, with owner +Create those GitHub environments plus `model-assets-mambo-v3` and `model-demo-mambo-v3`, with owner review before public writes. No PyPI API token is needed. Create the Hugging Face model repository and Gradio Space, both named `asgersvenning/MAMBO-v3` in their respective namespaces. Choose CPU Basic initially; the demo does not need a GPU. -- `model-assets`: variable `HF_MODEL_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` +- `model-assets-mambo-v3`: variable `HF_MODEL_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` with write access limited to that model repository. -- `model-demo`: variable `HF_SPACE_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` +- `model-demo-mambo-v3`: variable `HF_SPACE_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` with write access limited to that Space. These are the destinations linked in the public documentation. If using another @@ -33,18 +33,23 @@ variables. Do not put tokens in source, release assets or CLI arguments. ## 2. Review and prepare without publishing +[Shared routing conventions](../README.md) use `release/packages/**`, +`release/models/**` and `release/demos/**` for automatic preparation. The existing +`release/mambo-v3` branch can stay in place and use manual preparation; it has no +special publication permission. `MAMBO_v3` is an explicit descriptor tag override. + Make the reviewed workflow changes available on the repository's default branch before using manual Actions dispatch. Push the release source through the normal review/merge process; no release tag is needed for preparation. -Run **Prepare and publish MAMBO V3** (`publish-model.yml`) manually on the intended -release revision. Manual dispatch only downloads pinned inputs, builds artifacts, +Run **Prepare and publish model** (`publish-model.yml`) manually on the intended +release revision with `product=mambo-v3`. Manual dispatch only downloads pinned inputs, builds artifacts, qualifies installed CPU runtimes and uploads downloadable Action artifacts; it does not run any publication job. Download and review: -- `mambo-v3-candidate`: exact wheels, source distribution, offline bundle, evidence, +- `model-candidate`: exact wheels, source distribution, offline bundle, evidence, source/hash manifest and `qualification/` results. -- `mambo-v3-publication`: the explicit GitHub, model and Space upload directories. +- `model-publication`: the explicit GitHub, model and Space upload directories. The CLI equivalent, from a clean committed checkout with NumPy/Pillow and uv: @@ -71,7 +76,7 @@ prediction archives, credentials or datasets belong in the upload directories. ## 3. Publish training, then the model At the reviewed commit, create and **publish a GitHub Release** with tag -`minitrainer-v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: +`packages/minitrainer/v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: `publish.yml` builds, installs and exercises the wheel, then publishes the exact retained wheel and the source distribution to PyPI. Model/Space jobs do not run. Verify `minitrainer==0.3.0` is publicly available under the intended ownership. @@ -79,12 +84,12 @@ Verify `minitrainer==0.3.0` is publicly available under the intended ownership. Then publish the GitHub Release tagged **`MAMBO_v3`** at the reviewed model commit. The model workflow prepares and qualifies its candidate before the public gates: -1. `pypi-model` publishes only `mambo-v3` distributions. It first checks that the +1. `pypi-model-mambo-v3` publishes only `mambo-v3` distributions. It first checks that the intended `minitrainer` version is public and points to this repository. -2. `model-assets` attaches the offline bundle, deployment distributions, evidence, +2. `model-assets-mambo-v3` attaches the offline bundle, deployment distributions, evidence, inventory and checksums to GitHub; it uploads the model repository and creates an immutable Hugging Face `v0.3.0` tag at that upload's commit. -3. `model-demo` deploys the staged Space after package/model publication succeeds. +3. `model-demo-mambo-v3` deploys the staged Space after package/model publication succeeds. Prereleases prepare artifacts but do not publish packages or activate the demo. Training versions and model versions need not advance together. Future trained @@ -113,9 +118,9 @@ that public endpoints were exercised during local preparation. ## Demo updates and recovery -For a UI-only update, dispatch **Prepare or update MAMBO demo** (`publish-demo.yml`) -on a reviewed revision. The default `publish=false` builds/checks a staged Space -without public writes. Set `publish=true` and approve `model-demo` to deploy it. +For a UI-only update, dispatch **Prepare or update model demo** (`publish-demo.yml`) +on a reviewed revision with `product=mambo-v3`. The default `publish=false` builds/checks a staged Space +without public writes. Set `publish=true` and approve `model-demo-mambo-v3` to deploy it. This workflow uploads no package or model weights. It requires the public package release to exist and pins that package and its CPU runtime dependencies. diff --git a/tests/releases/test_release_route.py b/tests/releases/test_release_route.py new file mode 100644 index 0000000..4010b90 --- /dev/null +++ b/tests/releases/test_release_route.py @@ -0,0 +1,61 @@ +"""Branch preparation must not confuse products or accept mismatched release versions.""" + +import pytest + +from dev.release_route import resolve + + +@pytest.fixture +def repo(tmp_path): + (tmp_path / "pyproject.toml").write_text('[project]\nname="minitrainer"\nversion="0.3.0"\n') + (tmp_path / "deployment").mkdir() + (tmp_path / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.0"\n') + (tmp_path / ".github").mkdir() + (tmp_path / ".github/model-releases.toml").write_text( + '[models.mambo-v3]\nproject="deployment"\nmodule="dev.releases.mambo_v3"\ntag="MAMBO_v3"\ntag_version="0.3.0"\n' + ) + return tmp_path + + +@pytest.mark.parametrize("kind,product", [("packages", "minitrainer"), ("models", "mambo-v3"), ("demos", "mambo-v3")]) +def test_branch_and_manual_preparation_select_only_the_requested_product(repo, kind, product): + result = resolve(repo, kind, "push", f"refs/heads/release/{kind}/{product}", {}) + assert result["enabled"] == "true" and result["product"] == product + assert resolve(repo, kind, "push", "refs/heads/master", {}) == {"enabled": "false"} + assert resolve(repo, kind, "push", f"refs/tags/{result['tag']}", {}) == {"enabled": "false"} + assert resolve(repo, kind, "workflow_dispatch", "refs/heads/master", {}, product) == result + + +@pytest.mark.parametrize( + "kind,tag,enabled", + [ + ("packages", "packages/minitrainer/v0.3.0", "true"), + ("models", "MAMBO_v3", "true"), + ("packages", "MAMBO_v3", "false"), + ("models", "packages/minitrainer/v0.3.0", "false"), + ("models", "unrelated-release", "false"), + ("demos", "MAMBO_v3", "false"), + ], +) +def test_release_routes_are_independent(repo, kind, tag, enabled): + assert resolve(repo, kind, "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}})["enabled"] == enabled + + +def test_mismatched_or_unknown_product_release_is_rejected(repo): + for tag in ("packages/minitrainer/v0.4.0", "packages/another/v0.3.0"): + with pytest.raises(ValueError): + resolve(repo, "packages", "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}}) + (repo / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.1"\n') + with pytest.raises(ValueError, match="Explicit release tag"): + resolve(repo, "models", "release", "refs/tags/MAMBO_v3", {"release": {"tag_name": "MAMBO_v3"}}) + + +def test_future_model_uses_convention_without_workflow_changes(repo): + (repo / "future").mkdir() + (repo / "future/pyproject.toml").write_text('[project]\nname="another-model"\nversion="1.2.0"\n') + with (repo / ".github/model-releases.toml").open("a") as stream: + stream.write('[models.another-model]\nproject="future"\nmodule="dev.releases.another_model"\n') + tag = "models/another-model/v1.2.0" + result = resolve(repo, "models", "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}}) + assert result["product"] == "another-model" and result["module"] == "dev.releases.another_model" + assert resolve(repo, "demos", "push", "refs/heads/release/demos/another-model", {})["product"] == "another-model" From 8afddcc11ad383b605bddb09057f7442224c0174 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 20:19:55 +0200 Subject: [PATCH 219/221] fix(packaging): adopt accepted mt-trainer distribution name --- README.md | 10 +- deployment/pyproject.toml | 2 +- dev/releases/README.md | 2 +- dev/releases/mambo_v3/deployment-freeze.md | 4 +- dev/releases/mambo_v3/publication.md | 16 +- dev/releases/mambo_v3/qualify_candidate.py | 2 +- .../mambo_v3/ucloud_env/pyproject.toml | 4 +- dev/releases/mambo_v3/ucloud_env/uv.lock | 54 +- dev/ucloud/worker.py | 2 +- dev/wheel_smoke.py | 2 +- mini_trainer/integrations/parquet.py | 2 +- mini_trainer/logging/wandb.py | 2 +- .../modeling/architectures/bioclip.py | 3 +- mini_trainer/modeling/architectures/timm.py | 4 +- .../modeling/architectures/transformers.py | 4 +- mini_trainer/modeling/onnx.py | 4 +- mini_trainer/modeling/quantization.py | 2 +- mini_trainer/modeling/quantized_training.py | 2 +- mini_trainer/visualization/dendrogram.py | 2 +- pyproject.toml | 14 +- tests/export/test_onnx.py | 2 +- tests/quantization/test_quantization.py | 2 +- tests/quantization/test_quantized_training.py | 2 +- .../test_quantized_training_model.py | 2 +- tests/releases/test_release_route.py | 10 +- uv.lock | 624 +++++++++--------- 26 files changed, 388 insertions(+), 391 deletions(-) diff --git a/README.md b/README.md index 3ad466b..f502020 100644 --- a/README.md +++ b/README.md @@ -37,20 +37,20 @@ and package management. Choose a published package or a source checkout. ### PyPI -The distribution is `minitrainer`; Python imports remain `mini_trainer`. +The distribution is `mt-trainer`; Python imports remain `mini_trainer`. The similarly named `mini-trainer` / `mini_trainer` PyPI project is unrelated. ```bash uv venv --python 3.12 source .venv/bin/activate -uv pip install "minitrainer[recommended]" --torch-backend=auto +uv pip install "mt-trainer[recommended]" --torch-backend=auto ``` | Package choice | Includes | | --- | --- | -| `minitrainer` | Core training and inference | -| `minitrainer[recommended]` | Core plus logging, visualization and optional utilities | -| `minitrainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | +| `mt-trainer` | Core training and inference | +| `mt-trainer[recommended]` | Core plus logging, visualization and optional utilities | +| `mt-trainer[all]` | Recommended extras plus notebooks, model backends and ONNX export | Substitute the desired package in the install command. Standard `pip install` also works; select its PyTorch CPU/CUDA installation separately for your environment. diff --git a/deployment/pyproject.toml b/deployment/pyproject.toml index d406667..7a6ff11 100644 --- a/deployment/pyproject.toml +++ b/deployment/pyproject.toml @@ -19,7 +19,7 @@ Changelog = "https://github.com/asgersvenning/mini_trainer/releases/tag/MAMBO_v3 [project.optional-dependencies] onnx = ["onnxruntime>=1.20"] onnx-cuda = ["onnxruntime-gpu[cuda,cudnn]>=1.21,<2"] -torch = ["minitrainer>=0.3.0,<0.4"] +torch = ["mt-trainer>=0.3.0,<0.4"] [project.scripts] mambo_predict = "mambo_deploy.cli:run" diff --git a/dev/releases/README.md b/dev/releases/README.md index a6a50cd..89334b9 100644 --- a/dev/releases/README.md +++ b/dev/releases/README.md @@ -6,7 +6,7 @@ Ordinary CI covers `master` and every `release/**` branch. | Product | Preparation branch | GitHub Release tag | Workflow | | --- | --- | --- | --- | -| Training package | `release/packages/minitrainer` | `packages/minitrainer/vVERSION` | `publish.yml` | +| Training package | `release/packages/mt-trainer` | `packages/mt-trainer/vVERSION` | `publish.yml` | | Model package and assets | `release/models/PRODUCT` | `models/PRODUCT/vVERSION` | `publish-model.yml` | | Demo only | `release/demos/PRODUCT` | No package/model release | `publish-demo.yml` | diff --git a/dev/releases/mambo_v3/deployment-freeze.md b/dev/releases/mambo_v3/deployment-freeze.md index 2f0c110..dce83ed 100644 --- a/dev/releases/mambo_v3/deployment-freeze.md +++ b/dev/releases/mambo_v3/deployment-freeze.md @@ -8,10 +8,10 @@ remains MIT. Final artifact identities and installed checks are recorded in ## Current publication preparation -- Integrated the `minitrainer` distribution rename, retaining `mini_trainer` imports. +- Integrated the `mt-trainer` distribution rename, retaining `mini_trainer` imports. Both lockfiles preserve dependency versions. Isolated installed-wheel imports, CLI, training, checkpoint reload and inference passed. -- Training publication now accepts `packages/minitrainer/vVERSION` release events only; +- Training publication now accepts `packages/mt-trainer/vVERSION` release events only; manual dispatch prepares artifacts without publication. Model and demo publication have separate workflows, per-product environment gates and verified upload inventories. [Hierarchical branch/tag routing](../README.md) is shared across releases. diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index c382029..a49a592 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -2,19 +2,19 @@ Preparation does not publish anything. The owner performs the steps below after reviewing the candidate and its qualification records. Packages and weights have -separate identities: training **`minitrainer==0.3.0`** (Python `mini_trainer`), +separate identities: training **`mt-trainer==0.3.0`** (Python `mini_trainer`), deployment **`mambo-v3==0.3.0`** (Python `mambo_deploy`), model **`MAMBO_v3`**. `mini-trainer` on PyPI is an unrelated project; never publish or install it here. ## 1. Configure accounts and environments -Claim/create the PyPI projects `minitrainer` and `mambo-v3`. The names had no public -project during preparation, but this does not reserve them. Create pending trusted -publishers with owner `asgersvenning`, repository `mini_trainer` and these settings: +Configure pending trusted publishers for `mt-trainer` and `mambo-v3`. The owner +confirmed PyPI accepts `mt-trainer`; a pending publisher does not reserve its name +until publication. Use owner `asgersvenning`, repository `mini_trainer` and these settings: | Project | Workflow filename | GitHub environment | | --- | --- | --- | -| `minitrainer` | `publish.yml` | `pypi-training` | +| `mt-trainer` | `publish.yml` | `pypi-training` | | `mambo-v3` | `publish-model.yml` | `pypi-model-mambo-v3` | Create those GitHub environments plus `model-assets-mambo-v3` and `model-demo-mambo-v3`, with owner @@ -76,16 +76,16 @@ prediction archives, credentials or datasets belong in the upload directories. ## 3. Publish training, then the model At the reviewed commit, create and **publish a GitHub Release** with tag -`packages/minitrainer/v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: +`packages/mt-trainer/v0.3.0`. A tag push alone does not publish. Approve `pypi-training`: `publish.yml` builds, installs and exercises the wheel, then publishes the exact retained wheel and the source distribution to PyPI. Model/Space jobs do not run. -Verify `minitrainer==0.3.0` is publicly available under the intended ownership. +Verify `mt-trainer==0.3.0` is publicly available under the intended ownership. Then publish the GitHub Release tagged **`MAMBO_v3`** at the reviewed model commit. The model workflow prepares and qualifies its candidate before the public gates: 1. `pypi-model-mambo-v3` publishes only `mambo-v3` distributions. It first checks that the - intended `minitrainer` version is public and points to this repository. + intended `mt-trainer` version is public and points to this repository. 2. `model-assets-mambo-v3` attaches the offline bundle, deployment distributions, evidence, inventory and checksums to GitHub; it uploads the model repository and creates an immutable Hugging Face `v0.3.0` tag at that upload's commit. diff --git a/dev/releases/mambo_v3/qualify_candidate.py b/dev/releases/mambo_v3/qualify_candidate.py index 69e5bee..b59cb72 100644 --- a/dev/releases/mambo_v3/qualify_candidate.py +++ b/dev/releases/mambo_v3/qualify_candidate.py @@ -16,7 +16,7 @@ def qualify(candidate, dataset=None): reports = candidate / "qualification" reports.mkdir(exist_ok=False) deployment = next((candidate / "dist").glob("mambo_v3-*.whl")) - training = next((candidate / "dist").glob("minitrainer-*.whl")) + training = next((candidate / "dist").glob("mt_trainer-*.whl")) with tempfile.TemporaryDirectory(prefix="mambo-installed-") as directory: work = Path(directory) env = {**os.environ, "CUDA_VISIBLE_DEVICES": "", "GRADIO_ANALYTICS_ENABLED": "False", "MAMBO_CACHE": str(work / "cache")} diff --git a/dev/releases/mambo_v3/ucloud_env/pyproject.toml b/dev/releases/mambo_v3/ucloud_env/pyproject.toml index c1b55fb..4d4deff 100644 --- a/dev/releases/mambo_v3/ucloud_env/pyproject.toml +++ b/dev/releases/mambo_v3/ucloud_env/pyproject.toml @@ -3,7 +3,7 @@ name = "mambo-ucloud-release" version = "0.1.0" requires-python = ">=3.13,<3.14" dependencies = [ - "minitrainer[recommended,bioclip,timm]", + "mt-trainer[recommended,bioclip,timm]", "mambo-v3", "mini_metrics", "torch==2.12.0", @@ -19,7 +19,7 @@ dependencies = [ package = false [tool.uv.sources] -minitrainer = { path = "../../../.." } +mt-trainer = { path = "../../../.." } mambo-v3 = { path = "../../../../deployment" } mini_metrics = { git = "https://github.com/GuillaumeMougeot/mini_metrics.git", rev = "70cc69adc05362863439277048e06386c1f885e1" } torch = { index = "pytorch-cu130" } diff --git a/dev/releases/mambo_v3/ucloud_env/uv.lock b/dev/releases/mambo_v3/ucloud_env/uv.lock index edff572..f9adbec 100644 --- a/dev/releases/mambo_v3/ucloud_env/uv.lock +++ b/dev/releases/mambo_v3/ucloud_env/uv.lock @@ -414,7 +414,7 @@ dependencies = [ { name = "huggingface-hub" }, { name = "mambo-v3" }, { name = "mini-metrics" }, - { name = "minitrainer", extra = ["bioclip", "recommended", "timm"] }, + { name = "mt-trainer", extra = ["bioclip", "recommended", "timm"] }, { name = "onnxruntime-gpu", extra = ["cuda", "cudnn"] }, { name = "open-clip-torch" }, { name = "safetensors" }, @@ -428,7 +428,7 @@ requires-dist = [ { name = "huggingface-hub", specifier = "==0.36.2" }, { name = "mambo-v3", directory = "../../../../deployment" }, { name = "mini-metrics", git = "https://github.com/GuillaumeMougeot/mini_metrics.git?rev=70cc69adc05362863439277048e06386c1f885e1" }, - { name = "minitrainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, + { name = "mt-trainer", extras = ["recommended", "bioclip", "timm"], directory = "../../../../" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], specifier = ">=1.27,<2" }, { name = "open-clip-torch", specifier = "==3.3.0" }, { name = "safetensors", specifier = "==0.6.2" }, @@ -448,7 +448,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "minitrainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, + { name = "mt-trainer", marker = "extra == 'torch'", specifier = ">=0.3.0,<0.4" }, { name = "numpy", specifier = ">=2.4" }, { name = "onnxruntime", marker = "extra == 'onnx'", specifier = ">=1.20" }, { name = "onnxruntime-gpu", extras = ["cuda", "cudnn"], marker = "extra == 'onnx-cuda'", specifier = ">=1.21,<2" }, @@ -534,7 +534,16 @@ dependencies = [ ] [[package]] -name = "minitrainer" +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "mt-trainer" version = "0.3.0" source = { directory = "../../../../" } dependencies = [ @@ -572,12 +581,12 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'notebook'" }, { name = "ipywidgets", marker = "extra == 'notebook'" }, { name = "matplotlib" }, - { name = "minitrainer", extras = ["bioclip"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["export"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["notebook"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["recommended"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["timm"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["transformers"], marker = "extra == 'all'" }, { name = "numpy", specifier = ">=2.4.0" }, { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, @@ -593,16 +602,16 @@ requires-dist = [ { name = "tensorboard", marker = "extra == 'recommended'" }, { name = "timm", marker = "extra == 'timm'" }, { name = "torch", specifier = ">=2.11" }, - { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, - { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, - { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, - { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, { name = "torchvision" }, - { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, - { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, - { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, - { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "tqdm" }, { name = "transformers", marker = "extra == 'transformers'" }, { name = "wandb", marker = "extra == 'recommended'" }, @@ -617,15 +626,6 @@ dev = [ { name = "ruff", specifier = ">=0.14.5" }, ] -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, -] - [[package]] name = "narwhals" version = "2.26.0" diff --git a/dev/ucloud/worker.py b/dev/ucloud/worker.py index 27f18de..b9546c1 100644 --- a/dev/ucloud/worker.py +++ b/dev/ucloud/worker.py @@ -89,7 +89,7 @@ def preflight(config, branch, *, verify=False): import mini_trainer try: - distribution = importlib.metadata.distribution("minitrainer") + distribution = importlib.metadata.distribution("mt-trainer") except importlib.metadata.PackageNotFoundError: # Historical pinned comparison commits predate the distribution rename. distribution = importlib.metadata.distribution("mini_trainer") diff --git a/dev/wheel_smoke.py b/dev/wheel_smoke.py index 8885962..7c962d9 100644 --- a/dev/wheel_smoke.py +++ b/dev/wheel_smoke.py @@ -48,7 +48,7 @@ def main(): importlib.import_module(f"mini_trainer.{module}") blacklist = importlib.resources.files("mini_trainer.modeling.architectures").joinpath("blacklist.json") assert isinstance(json.loads(blacklist.read_text()), dict) - for entry in importlib.metadata.distribution("minitrainer").entry_points: + for entry in importlib.metadata.distribution("mt-trainer").entry_points: if entry.group == "console_scripts": subprocess.run([str(Path(sys.executable).parent / entry.name), "--help"], check=True, timeout=60, capture_output=True) diff --git a/mini_trainer/integrations/parquet.py b/mini_trainer/integrations/parquet.py index 4e9de8e..8aee718 100644 --- a/mini_trainer/integrations/parquet.py +++ b/mini_trainer/integrations/parquet.py @@ -16,7 +16,7 @@ def _check_pyarrow(): if not _HAS_PYARROW: raise ImportError( - "Parquet integration requires the optional dependency: pyarrow. Install with `pip install minitrainer[recommended]`." + "Parquet integration requires the optional dependency: pyarrow. Install with `pip install mt-trainer[recommended]`." ) diff --git a/mini_trainer/logging/wandb.py b/mini_trainer/logging/wandb.py index b9115a1..5b71c2b 100644 --- a/mini_trainer/logging/wandb.py +++ b/mini_trainer/logging/wandb.py @@ -23,7 +23,7 @@ def _require_wandb(): if wandb is None: raise ImportError( - "wandb is not installed. Please install it using `uv pip install minitrainer[recommended]`, " + "wandb is not installed. Please install it using `uv pip install mt-trainer[recommended]`, " "`uv sync --extra recommended`, or `uv add wandb`." ) diff --git a/mini_trainer/modeling/architectures/bioclip.py b/mini_trainer/modeling/architectures/bioclip.py index 298a718..b79bd7c 100644 --- a/mini_trainer/modeling/architectures/bioclip.py +++ b/mini_trainer/modeling/architectures/bioclip.py @@ -12,8 +12,7 @@ def get_bioclip_encoder(version: str = "bioclip-2", pretrained: bool = True): import open_clip except ImportError as e: e.add_note( - "The `open_clip` module was not found in the current Python environment. " - "Please install with `pip install minitrainer[bioclip]`." + "The `open_clip` module was not found in the current Python environment. Please install with `pip install mt-trainer[bioclip]`." ) raise diff --git a/mini_trainer/modeling/architectures/timm.py b/mini_trainer/modeling/architectures/timm.py index 9db7e7c..98d1f23 100644 --- a/mini_trainer/modeling/architectures/timm.py +++ b/mini_trainer/modeling/architectures/timm.py @@ -28,9 +28,7 @@ def get_timm_model( import timm from timm.data import create_transform, resolve_model_data_config except ImportError as e: - e.add_note( - "The `timm` module was not found in the current Python environment. Please install with `pip install minitrainer[timm]`." - ) + e.add_note("The `timm` module was not found in the current Python environment. Please install with `pip install mt-trainer[timm]`.") raise backbone_model = timm.create_model(model, pretrained=pretrained, **kwargs) diff --git a/mini_trainer/modeling/architectures/transformers.py b/mini_trainer/modeling/architectures/transformers.py index 89aa7d4..4e2d33c 100644 --- a/mini_trainer/modeling/architectures/transformers.py +++ b/mini_trainer/modeling/architectures/transformers.py @@ -11,7 +11,7 @@ def __init__(self, preprocessor): except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install minitrainer[transformers]`." + "Please install with `pip install mt-trainer[transformers]`." ) raise assert isinstance(preprocessor, TorchvisionBackend) @@ -57,7 +57,7 @@ def get_transformers_model( except ImportError as e: e.add_note( "The `transformers` module was not found in the current Python environment. " - "Please install with `pip install minitrainer[transformers]`." + "Please install with `pip install mt-trainer[transformers]`." ) raise diff --git a/mini_trainer/modeling/onnx.py b/mini_trainer/modeling/onnx.py index 1830f13..530e6b6 100644 --- a/mini_trainer/modeling/onnx.py +++ b/mini_trainer/modeling/onnx.py @@ -75,7 +75,7 @@ def _dependencies(): import onnxruntime import onnxscript # noqa: F401 except ImportError as error: - raise ImportError("ONNX export requires optional dependencies. Install minitrainer[export].") from error + raise ImportError("ONNX export requires optional dependencies. Install mt-trainer[export].") from error return onnx, onnxruntime @@ -268,7 +268,7 @@ def export_onnx( "preprocessing": {"in_graph": False, "recipe": preprocessing, "requires_configuration": preprocessing is None}, "opset": opset_version, "versions": { - name: version("minitrainer" if name == "mini_trainer" else name) + name: version("mt-trainer" if name == "mini_trainer" else name) for name in ("mini_trainer", "torch", "torchvision", "onnx", "onnxscript", "onnxruntime") }, "verification": { diff --git a/mini_trainer/modeling/quantization.py b/mini_trainer/modeling/quantization.py index e115657..887c391 100644 --- a/mini_trainer/modeling/quantization.py +++ b/mini_trainer/modeling/quantization.py @@ -31,7 +31,7 @@ def _backend(): get_default_x86_inductor_quantization_config, ) except ImportError as error: - raise ImportError("INT8 quantization requires minitrainer[quantization].") from error + raise ImportError("INT8 quantization requires mt-trainer[quantization].") from error return quantize_pt2e, export_utils, X86InductorQuantizer, get_default_x86_inductor_quantization_config, lower_pt2e_quantized_to_x86 diff --git a/mini_trainer/modeling/quantized_training.py b/mini_trainer/modeling/quantized_training.py index cea5e15..da75db0 100644 --- a/mini_trainer/modeling/quantized_training.py +++ b/mini_trainer/modeling/quantized_training.py @@ -12,7 +12,7 @@ def _backend(): try: from . import _quantized_training except ImportError as error: - raise ImportError("CUDA INT8 training requires minitrainer[quantization] and a compatible CUDA/Triton installation.") from error + raise ImportError("CUDA INT8 training requires mt-trainer[quantization] and a compatible CUDA/Triton installation.") from error return _quantized_training diff --git a/mini_trainer/visualization/dendrogram.py b/mini_trainer/visualization/dendrogram.py index a45d068..8d5d3f3 100644 --- a/mini_trainer/visualization/dendrogram.py +++ b/mini_trainer/visualization/dendrogram.py @@ -44,7 +44,7 @@ def _check_deps(): if not _HAS_DENDROGRAM_DEPS: raise ImportError( "Dendrogram visualization requires optional dependencies: biopython and scipy. " - "Install them with: `uv pip install minitrainer[recommended]` or `uv sync --extra recommended`." + "Install them with: `uv pip install mt-trainer[recommended]` or `uv sync --extra recommended`." ) diff --git a/pyproject.toml b/pyproject.toml index 4435bd6..ce4f84d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "minitrainer" +name = "mt-trainer" version = "0.3.0" default-optional-dependency-keys = ["recommended"] dependencies = [ @@ -87,12 +87,12 @@ recommended = [ "wandb", ] all = [ - "minitrainer[recommended]", - "minitrainer[notebook]", - "minitrainer[timm]", - "minitrainer[bioclip]", - "minitrainer[transformers]", - "minitrainer[export]", + "mt-trainer[recommended]", + "mt-trainer[notebook]", + "mt-trainer[timm]", + "mt-trainer[bioclip]", + "mt-trainer[transformers]", + "mt-trainer[export]", ] quantization = ["torchao>=0.17,<0.18"] export = ["onnx>=1.17", "onnxscript>=0.3", "onnxruntime>=1.20"] diff --git a/tests/export/test_onnx.py b/tests/export/test_onnx.py index c030ad4..d53f625 100644 --- a/tests/export/test_onnx.py +++ b/tests/export/test_onnx.py @@ -23,7 +23,7 @@ pytestmark = pytest.mark.skipif( any(importlib.util.find_spec(name) is None for name in ("onnx", "onnxscript", "onnxruntime")), - reason="Install minitrainer[export] to run ONNX integration tests", + reason="Install mt-trainer[export] to run ONNX integration tests", ) diff --git a/tests/quantization/test_quantization.py b/tests/quantization/test_quantization.py index f300595..2b8c1ec 100644 --- a/tests/quantization/test_quantization.py +++ b/tests/quantization/test_quantization.py @@ -15,7 +15,7 @@ from mini_trainer.trainer import train_one_epoch from tests.training.test_checkpoint_contract import assert_state_equal -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install minitrainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mt-trainer[quantization]") def model(head=Classifier, normalized=True): diff --git a/tests/quantization/test_quantized_training.py b/tests/quantization/test_quantized_training.py index 757ad29..e591ad4 100644 --- a/tests/quantization/test_quantized_training.py +++ b/tests/quantization/test_quantized_training.py @@ -12,7 +12,7 @@ @pytest.mark.parametrize("gradient_scale", [1.0, 1e-6]) def test_integer_training_gradients_and_saved_storage(gradient_scale): if importlib.util.find_spec("torchao") is None: - pytest.skip("Install minitrainer[quantization]") + pytest.skip("Install mt-trainer[quantization]") if os.environ.get("RUN_CUDA_TESTS") != "1": pytest.skip("Set RUN_CUDA_TESTS=1 for the native INT8 training kernel test") if not torch.cuda.is_available(): diff --git a/tests/quantization/test_quantized_training_model.py b/tests/quantization/test_quantized_training_model.py index 07ca247..f66a23e 100644 --- a/tests/quantization/test_quantized_training_model.py +++ b/tests/quantization/test_quantized_training_model.py @@ -9,7 +9,7 @@ from mini_trainer.modeling.quantized_training import load_training_weights, prepare_quantized_training, restore_quantized_training -pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install minitrainer[quantization]") +pytestmark = pytest.mark.skipif(importlib.util.find_spec("torchao") is None, reason="Install mt-trainer[quantization]") def test_selection_preserves_ties_and_reports_float_operations(): diff --git a/tests/releases/test_release_route.py b/tests/releases/test_release_route.py index 4010b90..f1ce1c1 100644 --- a/tests/releases/test_release_route.py +++ b/tests/releases/test_release_route.py @@ -7,7 +7,7 @@ @pytest.fixture def repo(tmp_path): - (tmp_path / "pyproject.toml").write_text('[project]\nname="minitrainer"\nversion="0.3.0"\n') + (tmp_path / "pyproject.toml").write_text('[project]\nname="mt-trainer"\nversion="0.3.0"\n') (tmp_path / "deployment").mkdir() (tmp_path / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.0"\n') (tmp_path / ".github").mkdir() @@ -17,7 +17,7 @@ def repo(tmp_path): return tmp_path -@pytest.mark.parametrize("kind,product", [("packages", "minitrainer"), ("models", "mambo-v3"), ("demos", "mambo-v3")]) +@pytest.mark.parametrize("kind,product", [("packages", "mt-trainer"), ("models", "mambo-v3"), ("demos", "mambo-v3")]) def test_branch_and_manual_preparation_select_only_the_requested_product(repo, kind, product): result = resolve(repo, kind, "push", f"refs/heads/release/{kind}/{product}", {}) assert result["enabled"] == "true" and result["product"] == product @@ -29,10 +29,10 @@ def test_branch_and_manual_preparation_select_only_the_requested_product(repo, k @pytest.mark.parametrize( "kind,tag,enabled", [ - ("packages", "packages/minitrainer/v0.3.0", "true"), + ("packages", "packages/mt-trainer/v0.3.0", "true"), ("models", "MAMBO_v3", "true"), ("packages", "MAMBO_v3", "false"), - ("models", "packages/minitrainer/v0.3.0", "false"), + ("models", "packages/mt-trainer/v0.3.0", "false"), ("models", "unrelated-release", "false"), ("demos", "MAMBO_v3", "false"), ], @@ -42,7 +42,7 @@ def test_release_routes_are_independent(repo, kind, tag, enabled): def test_mismatched_or_unknown_product_release_is_rejected(repo): - for tag in ("packages/minitrainer/v0.4.0", "packages/another/v0.3.0"): + for tag in ("packages/mt-trainer/v0.4.0", "packages/another/v0.3.0"): with pytest.raises(ValueError): resolve(repo, "packages", "release", f"refs/tags/{tag}", {"release": {"tag_name": tag}}) (repo / "deployment/pyproject.toml").write_text('[project]\nname="mambo-v3"\nversion="0.3.1"\n') diff --git a/uv.lock b/uv.lock index ae76565..a8aaad7 100644 --- a/uv.lock +++ b/uv.lock @@ -2,60 +2,60 @@ version = 1 revision = 3 requires-python = ">=3.12" resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform == 'emscripten' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132'", ] conflicts = [[ - { package = "minitrainer", extra = "cpu" }, - { package = "minitrainer", extra = "cu126" }, - { package = "minitrainer", extra = "cu130" }, - { package = "minitrainer", extra = "cu132" }, + { package = "mt-trainer", extra = "cpu" }, + { package = "mt-trainer", extra = "cu126" }, + { package = "mt-trainer", extra = "cu130" }, + { package = "mt-trainer", extra = "cu132" }, ]] [[package]] @@ -91,7 +91,7 @@ version = "4.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/14/2c5dd9f512b66549ae92767a9c7b330ae88e1932ca57876909410251fe13/anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc", size = 231622, upload-time = "2026-03-24T12:59:09.671Z" } wheels = [ @@ -161,7 +161,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pycparser", marker = "implementation_name != 'PyPy' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ @@ -291,7 +291,7 @@ name = "click" version = "8.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } wheels = [ @@ -476,7 +476,7 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-pathfinder", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-pathfinder", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/50/04/8a4d45dc154a8a32982658cc55be291e9778d1197834b15d33427e2f65c1/cuda_bindings-12.9.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea331bc47d9988cc61f0ecc5fa8df9dd188b4493ae1c6688bb1ee8ce8ba1af4", size = 7050347, upload-time = "2026-03-11T14:47:35.221Z" }, @@ -546,37 +546,37 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-runtime-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufft-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufile-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-cupti-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-curand-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusolver-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvtx-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -594,34 +594,34 @@ wheels = [ [package.optional-dependencies] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.0.96", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufft", version = "12.0.0.61", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufile", version = "1.15.1.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.0.35", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.0.4.66", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.6.3.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.0.85", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -639,43 +639,43 @@ wheels = [ [package.optional-dependencies] cublas = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cudart = [ - { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-runtime", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufft = [ - { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufft", version = "12.2.0.46", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cufile = [ - { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cufile", version = "1.17.1.22", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'aarch64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (platform_machine == 'x86_64' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cupti = [ - { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-cupti", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] curand = [ - { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-curand", version = "10.4.2.55", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusolver = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusolver", version = "12.2.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] cusparse = [ - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvjitlink = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvrtc = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] nvtx = [ - { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvtx", version = "13.2.75", source = { registry = "https://pypi.org/simple" }, marker = "(platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (platform_machine == 'AMD64' and sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform != 'linux' and sys_platform != 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] [[package]] @@ -1024,7 +1024,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "httpx" }, { name = "packaging" }, { name = "pyyaml" }, @@ -1075,7 +1075,7 @@ name = "ipykernel" version = "7.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "appnope", marker = "sys_platform == 'darwin' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "comm" }, { name = "debugpy" }, { name = "ipython" }, @@ -1099,12 +1099,12 @@ name = "ipython" version = "9.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "decorator" }, { name = "ipython-pygments-lexers" }, { name = "jedi" }, { name = "matplotlib-inline" }, - { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (sys_platform == 'win32' and extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "pexpect", marker = "(sys_platform != 'emscripten' and sys_platform != 'win32') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'emscripten' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (sys_platform == 'win32' and extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "prompt-toolkit" }, { name = "psutil" }, { name = "pygments" }, @@ -1452,7 +1452,57 @@ wheels = [ ] [[package]] -name = "minitrainer" +name = "ml-dtypes" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" }, + { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" }, + { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" }, + { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" }, + { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, + { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, + { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, + { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7a/97dc35667b7c9db33c5344c673cd27f87e34771875ea7100138726132ac9/ml_dtypes-0.6.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:84fa136b8602c8c39e3b6cb24918960cd6f36cade7a70376f56770729cd56510", size = 562551, upload-time = "2026-08-13T14:14:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/db/48/77f0ede10558d0d935da2e3276ed7e9c8cc2bad3463b9a0b66b03fc60be2/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317be9967fb84b0ce4e80e6b1bf71213d21971621cf6f1e501a63602a95297bf", size = 360334, upload-time = "2026-08-13T14:14:16.079Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b1/1831dd8c9b06c013085d31a2ac4f03392d43bd36bfc6ff591a08bcedc1cf/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f490c003369ce60e514a0c3b12374f05274c101fee1bead6740ec8a564032b0", size = 409966, upload-time = "2026-08-13T14:14:17.477Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ad/9c32c53f823dda3742df19a79c10bc198365937873ea125ba65747440c23/ml_dtypes-0.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:d574c2b28921dc72e869df248f1a278f6eee176a1f237c8642e1a71eb15f3977", size = 457224, upload-time = "2026-08-13T14:14:18.608Z" }, + { url = "https://files.pythonhosted.org/packages/41/3d/dd98205418a13353d41c52bf5326d8cbec515aace46174e23c6ea01c2978/ml_dtypes-0.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:f4adb4af61516510d786cf8c01851a66f6d3ddfa79e1144deaa5b40d8507231e", size = 568378, upload-time = "2026-08-13T14:14:19.843Z" }, + { url = "https://files.pythonhosted.org/packages/65/36/32e7beef3281fed74883451477ad976364323206dbfaa95e948ba788dac7/ml_dtypes-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3e169214e0d80ff1c038e1b3017e33c23e43bdf948d42d31de8283111c7e2fa3", size = 590177, upload-time = "2026-08-13T14:14:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a2/99b3d9b3c984b3bd1e81d8244f1fa2f812e44060d853205b2df6271aa17c/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573b11f3c327e17ef3826d266e676cf1149a1f3016f822a05f2306c55d8246bf", size = 363142, upload-time = "2026-08-13T14:14:22.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fb/8091c0aee7f2712de99c7fd4b1642382644dec6a4962effe4f5b9d16a973/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b76fa1d3f92967d58289ac47ab7458ede66e6f3527fff3e59142aee57d9307cd", size = 430645, upload-time = "2026-08-13T14:14:23.737Z" }, + { url = "https://files.pythonhosted.org/packages/c4/6f/962d2c589513b5930d05b6eae5fbd22ad8bbcf26bb763449f3d8f912360f/ml_dtypes-0.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3be9911d953f97cddded4b9961d7b650473b7e55806d20f6176f8356dfe7b38e", size = 465667, upload-time = "2026-08-13T14:14:25.04Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ca/bcb25e246edd19af5fa1cf6267040bd9977a7afca846e6cfd4a52078b44f/ml_dtypes-0.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e74266ca8e97874a937b7646378c178025650a236584f7474d10d8086a6edea3", size = 572706, upload-time = "2026-08-13T14:14:26.296Z" }, + { url = "https://files.pythonhosted.org/packages/12/42/46cb442648e3c774d8cb25f2e1e41d496cdcc91fbe9c2a6f75c0b8df7af6/ml_dtypes-0.6.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b1b503864fada3f74fabf8d9fee7b4c1cbe956301e6fdece975d5f77c2fce958", size = 562550, upload-time = "2026-08-13T14:14:27.542Z" }, + { url = "https://files.pythonhosted.org/packages/07/56/844eff5af7a2d1a09d75df12c70225c3a6b6a771f95876b2bf5f7d10ad44/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6ad60af4102789a5c09824004beade2f7f28cd1cd581ee5c170d9dc2fbb00e", size = 360332, upload-time = "2026-08-13T14:14:28.767Z" }, + { url = "https://files.pythonhosted.org/packages/b6/29/b7165a3a76364a5baa6aa4ee82a0adf73a3c014b8cd126120b62cc087992/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4f1b9329a251e4affe3bb58f4d3e2db22a714396fd7ffb40d0b5db423c24d17", size = 409964, upload-time = "2026-08-13T14:14:30.023Z" }, + { url = "https://files.pythonhosted.org/packages/c8/2e/f61c54a0544b6a170ac1bb89bcf406af53fb2deffc5476b6d2d3df5ba13e/ml_dtypes-0.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:488c99ab181a2f59d9ec3b12c5fa11ec904e92be2c4ba18cded54dd7501208fe", size = 457249, upload-time = "2026-08-13T14:14:31.213Z" }, + { url = "https://files.pythonhosted.org/packages/63/00/bee1bc9faa02a46e7a851019fd23f47ca1f906609edbec8b6ba5decc3cc3/ml_dtypes-0.6.0-cp315-cp315-win_arm64.whl", hash = "sha256:de9d14748dbf3968951436ef514a29c9d1fe438aa680d110134ee2f7a9f9df18", size = 568381, upload-time = "2026-08-13T14:14:32.548Z" }, + { url = "https://files.pythonhosted.org/packages/72/f7/9a5edede28f73185fd51d75030ef7f11d76997bab3a92427d986e54fe2eb/ml_dtypes-0.6.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e25bb3b0ad1217b60626e4ed45b10ca170c41d99fbe44a12bebc1e07ec4aad55", size = 589877, upload-time = "2026-08-13T14:14:33.695Z" }, + { url = "https://files.pythonhosted.org/packages/fd/81/d5924a141b850b606eb027493c9c3ca3c665cca5163af3f5b6e5e3345503/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f1ce979d31a357e95aa81812f20412c8c954fa43c44ee3ead1e1c8a78575ef", size = 362788, upload-time = "2026-08-13T14:14:34.996Z" }, + { url = "https://files.pythonhosted.org/packages/59/8f/3298e3f334832bc28dd144af6b99cdc93502a8687e71922ea68b0a319929/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2d6149f3a57f405bcad5fb41e03218b8373936253f23e1ca84c0108abbc3392", size = 430823, upload-time = "2026-08-13T14:14:36.44Z" }, + { url = "https://files.pythonhosted.org/packages/93/d2/f2dbf118f42ce4c325a139c9236737f436b7f8e00cd18701c99ef2405e6f/ml_dtypes-0.6.0-cp315-cp315t-win_amd64.whl", hash = "sha256:ce7563e0b1a4482cbc1b4a6272145e54e4489e54fe7428f94908c3d87103abfa", size = 465119, upload-time = "2026-08-13T14:14:37.776Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ff/bda40387b5c5c64254595f4d81a12351770856acc5de4e6d43606a31f161/ml_dtypes-0.6.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f6cb525101b6b903779188c1e9e9490c343b455ab822883e02cf01e5547338d2", size = 572666, upload-time = "2026-08-13T14:14:38.993Z" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "mt-trainer" version = "0.3.0" source = { editable = "." } dependencies = [ @@ -1461,18 +1511,18 @@ dependencies = [ { name = "numpy" }, { name = "psutil" }, { name = "pyyaml" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "tqdm" }, ] @@ -1499,10 +1549,10 @@ bioclip = [ { name = "open-clip-torch" }, ] cpu = [ - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] cu126 = [ { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" } }, @@ -1560,12 +1610,12 @@ requires-dist = [ { name = "ipykernel", marker = "extra == 'notebook'" }, { name = "ipywidgets", marker = "extra == 'notebook'" }, { name = "matplotlib" }, - { name = "minitrainer", extras = ["bioclip"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["export"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["notebook"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["recommended"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["timm"], marker = "extra == 'all'" }, - { name = "minitrainer", extras = ["transformers"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["bioclip"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["export"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["notebook"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["recommended"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["timm"], marker = "extra == 'all'" }, + { name = "mt-trainer", extras = ["transformers"], marker = "extra == 'all'" }, { name = "numpy", specifier = ">=2.4.0" }, { name = "onnx", marker = "extra == 'export'", specifier = ">=1.17" }, { name = "onnxruntime", marker = "extra == 'export'", specifier = ">=1.20" }, @@ -1581,16 +1631,16 @@ requires-dist = [ { name = "tensorboard", marker = "extra == 'recommended'" }, { name = "timm", marker = "extra == 'timm'" }, { name = "torch", specifier = ">=2.11" }, - { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, - { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, - { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, - { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, + { name = "torch", marker = "extra == 'cpu'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torch", marker = "extra == 'cu126'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torch", marker = "extra == 'cu130'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torch", marker = "extra == 'cu132'", specifier = ">=2.11", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "torchao", marker = "extra == 'quantization'", specifier = ">=0.17,<0.18" }, { name = "torchvision" }, - { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "minitrainer", extra = "cpu" } }, - { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "minitrainer", extra = "cu126" } }, - { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "minitrainer", extra = "cu130" } }, - { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "minitrainer", extra = "cu132" } }, + { name = "torchvision", marker = "extra == 'cpu'", index = "https://download.pytorch.org/whl/cpu", conflict = { package = "mt-trainer", extra = "cpu" } }, + { name = "torchvision", marker = "extra == 'cu126'", index = "https://download.pytorch.org/whl/cu126", conflict = { package = "mt-trainer", extra = "cu126" } }, + { name = "torchvision", marker = "extra == 'cu130'", index = "https://download.pytorch.org/whl/cu130", conflict = { package = "mt-trainer", extra = "cu130" } }, + { name = "torchvision", marker = "extra == 'cu132'", index = "https://download.pytorch.org/whl/cu132", conflict = { package = "mt-trainer", extra = "cu132" } }, { name = "tqdm" }, { name = "transformers", marker = "extra == 'transformers'" }, { name = "wandb", marker = "extra == 'recommended'" }, @@ -1605,56 +1655,6 @@ dev = [ { name = "ruff", specifier = ">=0.14.5" }, ] -[[package]] -name = "ml-dtypes" -version = "0.6.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/12/72/307d7c4bd0600601c7133fba5cb78af7db968152951c1cd473abb1cda782/ml_dtypes-0.6.0.tar.gz", hash = "sha256:5e60251d32ced5598972e4d5e06a2f044341f9291402551a3f6f0ec44f9299b0", size = 3032327, upload-time = "2026-08-13T14:14:40.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/84/6a/441eb053b078954f7fea284dfb288701884d0a1404d39babb858e1649023/ml_dtypes-0.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5359c588cc62de6f78d7430f06b65853d884955494d86d6ad90b6dd64a3f3a08", size = 565447, upload-time = "2026-08-13T14:14:01.737Z" }, - { url = "https://files.pythonhosted.org/packages/ed/cf/87e8a6c57eed63a91782a0d229856ddf73e138ce004dd71e2799a9dcdb33/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:37da32aa97749251025666d62372775019594577b9c9e9cfda83bed48d778fdb", size = 360227, upload-time = "2026-08-13T14:14:02.938Z" }, - { url = "https://files.pythonhosted.org/packages/c7/f9/7d76c1eae866f5d4636401b31b6d6dd90e4b4ced1fa7cfdfcca9c60e4bd3/ml_dtypes-0.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b4a480aa8fd54a1805b8ac10f3f91763926a74f73c0c364c10f9231854f4170", size = 409890, upload-time = "2026-08-13T14:14:04.248Z" }, - { url = "https://files.pythonhosted.org/packages/ba/db/9c61ec2760b5cbfb1c6558d5c991a6d8fd3271053c32db20506a9a90272b/ml_dtypes-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2a3e9d53925597fbffafd2a37048dadeddd0bdaba58058f6ae0869ed709a184d", size = 439333, upload-time = "2026-08-13T14:14:05.501Z" }, - { url = "https://files.pythonhosted.org/packages/6a/57/780ca3e5ab135b9fbdd8e5441abf5f801b30398371b691291e05ab9834c0/ml_dtypes-0.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:6eaed129a4afe90694b8685e2f9b6294849f5eda4af9a15be83a4326eeebd775", size = 552268, upload-time = "2026-08-13T14:14:06.866Z" }, - { url = "https://files.pythonhosted.org/packages/50/51/fd1582b8f5ed8a9e7be0e161a6ea0dff70cb280479a12178df0b3a72700e/ml_dtypes-0.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:084dfe51a7ad58b171f05115f8226ed4233a454a1611371947e806e76f0c638d", size = 565468, upload-time = "2026-08-13T14:14:08.5Z" }, - { url = "https://files.pythonhosted.org/packages/d2/22/20fd70ca6ed12446cb92d5b2a7745bd185f9d8b8cdeeadad976574398e6b/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:28d676428b104bb9717b0928bc5c5129f2d6b51b6727587cc4289e7bf8713cb5", size = 360232, upload-time = "2026-08-13T14:14:09.873Z" }, - { url = "https://files.pythonhosted.org/packages/89/a5/da8ae6c6f1babe4b68e3e55d43d39b529e29774f10e0910671a6b8c86eb8/ml_dtypes-0.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26b1f1fa4f0435a2946859823f6e2bf06796f1e9f10f5a05b08a5e3c8f46ff69", size = 410169, upload-time = "2026-08-13T14:14:11.036Z" }, - { url = "https://files.pythonhosted.org/packages/e2/55/4561acefa00fa4bcbfb82ca6a48578b41f372cd7dd7cdd6eb4720abc2e5f/ml_dtypes-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:fb87f46b4f7ad7b5d3ad8f4b452b024bd4229d44c8ff934798c1fe656210387a", size = 439357, upload-time = "2026-08-13T14:14:12.172Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5d/6a01538e507ef0ed5e879985b13a92467bf8960696fb1131f8b8cadc60ff/ml_dtypes-0.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:57ed0d6b4ac5e7868361303a9c57fbcf63b768236ee14456f585dfcf260d0292", size = 552278, upload-time = "2026-08-13T14:14:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7a/97dc35667b7c9db33c5344c673cd27f87e34771875ea7100138726132ac9/ml_dtypes-0.6.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:84fa136b8602c8c39e3b6cb24918960cd6f36cade7a70376f56770729cd56510", size = 562551, upload-time = "2026-08-13T14:14:14.774Z" }, - { url = "https://files.pythonhosted.org/packages/db/48/77f0ede10558d0d935da2e3276ed7e9c8cc2bad3463b9a0b66b03fc60be2/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:317be9967fb84b0ce4e80e6b1bf71213d21971621cf6f1e501a63602a95297bf", size = 360334, upload-time = "2026-08-13T14:14:16.079Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b1/1831dd8c9b06c013085d31a2ac4f03392d43bd36bfc6ff591a08bcedc1cf/ml_dtypes-0.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f490c003369ce60e514a0c3b12374f05274c101fee1bead6740ec8a564032b0", size = 409966, upload-time = "2026-08-13T14:14:17.477Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ad/9c32c53f823dda3742df19a79c10bc198365937873ea125ba65747440c23/ml_dtypes-0.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:d574c2b28921dc72e869df248f1a278f6eee176a1f237c8642e1a71eb15f3977", size = 457224, upload-time = "2026-08-13T14:14:18.608Z" }, - { url = "https://files.pythonhosted.org/packages/41/3d/dd98205418a13353d41c52bf5326d8cbec515aace46174e23c6ea01c2978/ml_dtypes-0.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:f4adb4af61516510d786cf8c01851a66f6d3ddfa79e1144deaa5b40d8507231e", size = 568378, upload-time = "2026-08-13T14:14:19.843Z" }, - { url = "https://files.pythonhosted.org/packages/65/36/32e7beef3281fed74883451477ad976364323206dbfaa95e948ba788dac7/ml_dtypes-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:3e169214e0d80ff1c038e1b3017e33c23e43bdf948d42d31de8283111c7e2fa3", size = 590177, upload-time = "2026-08-13T14:14:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a2/99b3d9b3c984b3bd1e81d8244f1fa2f812e44060d853205b2df6271aa17c/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573b11f3c327e17ef3826d266e676cf1149a1f3016f822a05f2306c55d8246bf", size = 363142, upload-time = "2026-08-13T14:14:22.463Z" }, - { url = "https://files.pythonhosted.org/packages/0c/fb/8091c0aee7f2712de99c7fd4b1642382644dec6a4962effe4f5b9d16a973/ml_dtypes-0.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b76fa1d3f92967d58289ac47ab7458ede66e6f3527fff3e59142aee57d9307cd", size = 430645, upload-time = "2026-08-13T14:14:23.737Z" }, - { url = "https://files.pythonhosted.org/packages/c4/6f/962d2c589513b5930d05b6eae5fbd22ad8bbcf26bb763449f3d8f912360f/ml_dtypes-0.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:3be9911d953f97cddded4b9961d7b650473b7e55806d20f6176f8356dfe7b38e", size = 465667, upload-time = "2026-08-13T14:14:25.04Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ca/bcb25e246edd19af5fa1cf6267040bd9977a7afca846e6cfd4a52078b44f/ml_dtypes-0.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e74266ca8e97874a937b7646378c178025650a236584f7474d10d8086a6edea3", size = 572706, upload-time = "2026-08-13T14:14:26.296Z" }, - { url = "https://files.pythonhosted.org/packages/12/42/46cb442648e3c774d8cb25f2e1e41d496cdcc91fbe9c2a6f75c0b8df7af6/ml_dtypes-0.6.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b1b503864fada3f74fabf8d9fee7b4c1cbe956301e6fdece975d5f77c2fce958", size = 562550, upload-time = "2026-08-13T14:14:27.542Z" }, - { url = "https://files.pythonhosted.org/packages/07/56/844eff5af7a2d1a09d75df12c70225c3a6b6a771f95876b2bf5f7d10ad44/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c6ad60af4102789a5c09824004beade2f7f28cd1cd581ee5c170d9dc2fbb00e", size = 360332, upload-time = "2026-08-13T14:14:28.767Z" }, - { url = "https://files.pythonhosted.org/packages/b6/29/b7165a3a76364a5baa6aa4ee82a0adf73a3c014b8cd126120b62cc087992/ml_dtypes-0.6.0-cp315-cp315-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4f1b9329a251e4affe3bb58f4d3e2db22a714396fd7ffb40d0b5db423c24d17", size = 409964, upload-time = "2026-08-13T14:14:30.023Z" }, - { url = "https://files.pythonhosted.org/packages/c8/2e/f61c54a0544b6a170ac1bb89bcf406af53fb2deffc5476b6d2d3df5ba13e/ml_dtypes-0.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:488c99ab181a2f59d9ec3b12c5fa11ec904e92be2c4ba18cded54dd7501208fe", size = 457249, upload-time = "2026-08-13T14:14:31.213Z" }, - { url = "https://files.pythonhosted.org/packages/63/00/bee1bc9faa02a46e7a851019fd23f47ca1f906609edbec8b6ba5decc3cc3/ml_dtypes-0.6.0-cp315-cp315-win_arm64.whl", hash = "sha256:de9d14748dbf3968951436ef514a29c9d1fe438aa680d110134ee2f7a9f9df18", size = 568381, upload-time = "2026-08-13T14:14:32.548Z" }, - { url = "https://files.pythonhosted.org/packages/72/f7/9a5edede28f73185fd51d75030ef7f11d76997bab3a92427d986e54fe2eb/ml_dtypes-0.6.0-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:e25bb3b0ad1217b60626e4ed45b10ca170c41d99fbe44a12bebc1e07ec4aad55", size = 589877, upload-time = "2026-08-13T14:14:33.695Z" }, - { url = "https://files.pythonhosted.org/packages/fd/81/d5924a141b850b606eb027493c9c3ca3c665cca5163af3f5b6e5e3345503/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31f1ce979d31a357e95aa81812f20412c8c954fa43c44ee3ead1e1c8a78575ef", size = 362788, upload-time = "2026-08-13T14:14:34.996Z" }, - { url = "https://files.pythonhosted.org/packages/59/8f/3298e3f334832bc28dd144af6b99cdc93502a8687e71922ea68b0a319929/ml_dtypes-0.6.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2d6149f3a57f405bcad5fb41e03218b8373936253f23e1ca84c0108abbc3392", size = 430823, upload-time = "2026-08-13T14:14:36.44Z" }, - { url = "https://files.pythonhosted.org/packages/93/d2/f2dbf118f42ce4c325a139c9236737f436b7f8e00cd18701c99ef2405e6f/ml_dtypes-0.6.0-cp315-cp315t-win_amd64.whl", hash = "sha256:ce7563e0b1a4482cbc1b4a6272145e54e4489e54fe7428f94908c3d87103abfa", size = 465119, upload-time = "2026-08-13T14:14:37.776Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ff/bda40387b5c5c64254595f4d81a12351770856acc5de4e6d43606a31f161/ml_dtypes-0.6.0-cp315-cp315t-win_arm64.whl", hash = "sha256:f6cb525101b6b903779188c1e9e9490c343b455ab822883e02cf01e5547338d2", size = 572666, upload-time = "2026-08-13T14:14:38.993Z" }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, -] - [[package]] name = "nest-asyncio" version = "1.6.0" @@ -1744,7 +1744,7 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.0.88", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/a7/a1/0bd24ee8c8d03adac032fd2909426a00c88f8c57961b1277ded97f91119f/nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5", size = 542848918, upload-time = "2026-04-08T18:46:22.985Z" }, @@ -1762,7 +1762,7 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cuda-nvrtc", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d0/48/8571e55aaabbd112f06a39a71fbc3abf0b8a0d450921816a13a6d5e8fa0b/nvidia_cublas-13.4.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:705d7d214fbb20f134415ecadc488abf74f444c155a6555dec5687404afb18a9", size = 513051304, upload-time = "2026-04-13T09:49:32.758Z" }, @@ -1909,7 +1909,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/fa/41/e79269ce215c857c935fd86bcfe91a451a584dfc27f1e068f568b9ad1ab7/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9132cc3f8958447b4910a1720036d9eff5928cc3179b0a51fb6d167c6cc87d8", size = 705026878, upload-time = "2025-06-06T21:52:51.348Z" }, @@ -1922,8 +1922,8 @@ name = "nvidia-cudnn-cu13" version = "9.20.0.48" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/56/c5/83384d846b2fd17c44bd499b36c75a45ed4f095fbbb2252294e89cea5c5c/nvidia_cudnn_cu13-9.20.0.48-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1", size = 444574296, upload-time = "2026-03-09T19:28:27.751Z" }, @@ -1959,7 +1959,7 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/be/b1/6e36381739b51e692d91646298ad5685c562929b899331c2bb6e9722a176/nvidia_cufft-12.2.0.46-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e8f3a22c2745f95327b7639ba2868ea2cbd5d3131ebe6313394e24164054f41", size = 218244743, upload-time = "2026-04-13T09:51:24.75Z" }, @@ -1972,7 +1972,7 @@ name = "nvidia-cufft-cu12" version = "11.3.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/37/c50d2b2f2c07e146776389e3080f4faf70bcc4fa6e19d65bb54ca174ebc3/nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d16079550df460376455cba121db6564089176d9bac9e4f360493ca4741b22a6", size = 200164144, upload-time = "2024-11-20T17:40:58.288Z" }, @@ -2091,9 +2091,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas", version = "13.4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse", version = "12.7.10.1", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/94/21/21e5c491a8285a6ed039cbb8c60ec13ff3aff60c669e1caa4adaeb71f997/nvidia_cusolver-12.2.0.1-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c9def09fcf300b9465cdf800142abf10149df28c4290bdf9e7b4a700480d31d7", size = 249744985, upload-time = "2026-04-13T09:54:33.757Z" }, @@ -2106,9 +2106,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.1.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-cublas-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparse-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/93/17/dbe1aa865e4fdc7b6d4d0dd308fdd5aaab60f939abfc0ea1954eac4fb113/nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0ce237ef60acde1efc457335a2ddadfd7610b892d94efee7b776c64bb1cac9e0", size = 157833628, upload-time = "2024-10-01T17:05:05.591Z" }, @@ -2146,7 +2146,7 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink", version = "13.2.78", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/b5/09/9f1fa88dd305e838b71f2ca4e50064e7cbdf2e15cd6410d9e1b74066cc41/nvidia_cusparse-12.7.10.1-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80cc98b38fdcf054a80bd9782fe2e63c66f90e202cac269f641357ccac5fe7e3", size = 168860233, upload-time = "2026-04-13T09:55:48.891Z" }, @@ -2159,7 +2159,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "nvidia-nvjitlink-cu12", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/eb/eb/6681efd0aa7df96b4f8067b3ce7246833dd36830bb4cec8896182773db7d/nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d25b62fb18751758fe3c93a4a08eff08effedfe4edf1c6bb5afd0890fe88f887", size = 216451147, upload-time = "2024-11-20T17:44:18.055Z" }, @@ -2408,18 +2408,18 @@ dependencies = [ { name = "regex" }, { name = "safetensors" }, { name = "timm" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "tqdm" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/1f/2bc9795047fa2c1ad2567ef78ce6dfc9a7b763fa534acee09a94da2a5b8f/open_clip_torch-3.3.0.tar.gz", hash = "sha256:904b1a9f909df8281bb3de60ab95491cd2994a509177ea4f9d6292a84fe24d6d", size = 1503380, upload-time = "2026-02-27T00:32:46.74Z" } @@ -2443,7 +2443,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" } wheels = [ @@ -2862,7 +2862,7 @@ name = "pytest" version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, @@ -2950,7 +2950,7 @@ name = "pyzmq" version = "27.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cffi", marker = "implementation_name == 'pypy' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/04/0b/3c9baedbdf613ecaa7aa07027780b8867f57b6293b6ee50de316c9f3222b/pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540", size = 281750, upload-time = "2025-09-08T23:10:18.157Z" } wheels = [ @@ -3325,18 +3325,18 @@ dependencies = [ { name = "huggingface-hub" }, { name = "pyyaml" }, { name = "safetensors" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torchvision", version = "0.27.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/08/54/ece85b0eef3700c90db8271a43669b05a0ebbe2edb1962329c34374a297e/timm-1.0.27.tar.gz", hash = "sha256:315dfe63186ca9fb7ff941268941231fd5be259f2b4bb4afa28560ae1015cb9a", size = 2439861, upload-time = "2026-05-08T19:38:36.844Z" } wheels = [ @@ -3379,13 +3379,13 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", upload-time = "2026-05-12T16:20:12Z" }, @@ -3411,21 +3411,21 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ef/bb/285d643f254731294c9b595a007eac39db4600a98682d7bca688f42ca164/torch-2.12.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b41339df93d491435e790ff8bcbae1c0ce777175889bfd1281d119862793e6a2", size = 88010197, upload-time = "2026-05-13T14:55:35.414Z" }, @@ -3466,13 +3466,13 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "filelock", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torch-2.12.0%2Bcpu-cp312-cp312-linux_s390x.whl", hash = "sha256:b9d0e8eed0af9321ffb12b75f4aca371b071254f12cf75875d5a8e7cc8f52b51", upload-time = "2026-05-12T23:16:33Z" }, @@ -3515,20 +3515,20 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-bindings", version = "12.9.6", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "12.6.3", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu12", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torch-2.12.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:7b13d35e799c5b970403ba8ed7f33041ae5c1c0a2b6320ba3288082df3df3a45", upload-time = "2026-05-12T23:26:44Z" }, @@ -3564,21 +3564,21 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "filelock", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.0.2", source = { registry = "https://pypi.org/simple" }, extra = ["cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cublas", version = "13.1.1.3", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.12.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cb95bd4626150e41aeea2b60e4635a878ebe01e63f3344409f4b7353fdb7998c", upload-time = "2026-05-12T23:49:12Z" }, @@ -3614,20 +3614,20 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "filelock", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "fsspec", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "jinja2", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "networkx", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "setuptools", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "sympy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "typing-extensions", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "cuda-bindings", version = "13.2.0", source = { registry = "https://pypi.org/simple" }, marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "cuda-toolkit", version = "13.2.1", source = { registry = "https://pypi.org/simple" }, extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "filelock", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "fsspec", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "jinja2", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "networkx", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cudnn-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-cusparselt-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nccl-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "nvidia-nvshmem-cu13", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "setuptools", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "sympy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "triton", marker = "(sys_platform == 'linux' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "typing-extensions", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torch-2.12.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:21909235cbbc94a938d737f1721b53cc61316cd7787aa459b4d458b840fc0309", upload-time = "2026-05-13T00:07:47Z" }, @@ -3666,9 +3666,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform == 'darwin'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform == 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", upload-time = "2026-05-12T16:20:37Z" }, @@ -3694,9 +3694,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra != 'extra-11-minitrainer-cu130' and extra != 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0", source = { registry = "https://pypi.org/simple" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra != 'extra-10-mt-trainer-cu130' and extra != 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c8/5cd91932f7f3671b0743dc4ae1a4c16b1d0b45bf4087976277d325bda718/torchvision-0.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1a6dd742a150645126df9e0b2e449874c1d635897c773b322c2e067e98382dfe", size = 1758824, upload-time = "2026-05-13T14:57:15.227Z" }, @@ -3737,9 +3737,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-11-minitrainer-cpu') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cpu", source = { registry = "https://download.pytorch.org/whl/cpu" }, marker = "(sys_platform != 'darwin' and extra == 'extra-10-mt-trainer-cpu') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cpu/torchvision-0.27.0%2Bcpu-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1b06f42d48b62098114923d8a3fe9fa864182715db06584a515155db0aa8eb30", upload-time = "2026-05-12T16:20:36Z" }, @@ -3775,9 +3775,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-11-minitrainer-cu126' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu126", source = { registry = "https://download.pytorch.org/whl/cu126" }, marker = "extra == 'extra-10-mt-trainer-cu126' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu126/torchvision-0.27.0%2Bcu126-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a4bcd3ea7e9124fb40674dd143a3a28cbde63adc8de6d6ffe1d6810cd40032be", upload-time = "2026-05-12T16:20:41Z" }, @@ -3813,9 +3813,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-11-minitrainer-cu130' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu130", source = { registry = "https://download.pytorch.org/whl/cu130" }, marker = "extra == 'extra-10-mt-trainer-cu130' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu130/torchvision-0.27.0%2Bcu130-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0a839a2921410b1135add4c3d90f784c9d1e9e9f3c7b401b216d356ddca23ab2", upload-time = "2026-05-12T16:20:44Z" }, @@ -3851,9 +3851,9 @@ resolution-markers = [ "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "pillow", marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, - { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra != 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132') or (extra != 'extra-11-minitrainer-cpu' and extra != 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "numpy", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "pillow", marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, + { name = "torch", version = "2.12.0+cu132", source = { registry = "https://download.pytorch.org/whl/cu132" }, marker = "(extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra != 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132') or (extra != 'extra-10-mt-trainer-cpu' and extra != 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132')" }, ] wheels = [ { url = "https://download-r2.pytorch.org/whl/cu132/torchvision-0.27.0%2Bcu132-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f60fb51914eb9d9e3bc38d164309fb20b55a3786d0348ec2fcd65855147b4a7a", upload-time = "2026-05-12T16:20:46Z" }, @@ -3895,7 +3895,7 @@ name = "tqdm" version = "4.67.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu126') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cpu' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu130') or (extra == 'extra-11-minitrainer-cu126' and extra == 'extra-11-minitrainer-cu132') or (extra == 'extra-11-minitrainer-cu130' and extra == 'extra-11-minitrainer-cu132')" }, + { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu126') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cpu' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu130') or (extra == 'extra-10-mt-trainer-cu126' and extra == 'extra-10-mt-trainer-cu132') or (extra == 'extra-10-mt-trainer-cu130' and extra == 'extra-10-mt-trainer-cu132')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } wheels = [ From 333fc02724e1c7827328ea5b75738861f11888dc Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 20:39:56 +0200 Subject: [PATCH 220/221] ci: use Hugging Face trusted publishing for model and demo --- .github/workflows/publish-demo.yml | 16 +++++++++--- .github/workflows/publish-model.yml | 30 ++++++++++++++++----- dev/releases/mambo_v3/publication.md | 39 +++++++++++++++++++++++----- 3 files changed, 70 insertions(+), 15 deletions(-) diff --git a/.github/workflows/publish-demo.yml b/.github/workflows/publish-demo.yml index 6f11d2d..fa18f09 100644 --- a/.github/workflows/publish-demo.yml +++ b/.github/workflows/publish-demo.yml @@ -76,6 +76,9 @@ jobs: group: deploy-space-${{ needs.route.outputs.product }} cancel-in-progress: false environment: model-demo-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: read steps: - uses: actions/checkout@v6 with: @@ -86,9 +89,16 @@ jobs: path: space/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release - - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' - name: Deploy demo only env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} - run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space space "$HF_SPACE_REPO" + HF_OIDC_RESOURCE: spaces/${{ vars.HF_SPACE_REPO }} + shell: bash + run: | + : "${HF_SPACE_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space space "$HF_SPACE_REPO" diff --git a/.github/workflows/publish-model.yml b/.github/workflows/publish-model.yml index 0150079..aa24b78 100644 --- a/.github/workflows/publish-model.yml +++ b/.github/workflows/publish-model.yml @@ -111,6 +111,7 @@ jobs: runs-on: ubuntu-latest environment: model-assets-${{ needs.route.outputs.product }} permissions: + id-token: write contents: write steps: - uses: actions/checkout@v6 @@ -122,7 +123,7 @@ jobs: path: publication/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release - - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' - name: Publish GitHub assets without replacing existing files env: GH_TOKEN: ${{ github.token }} @@ -130,9 +131,16 @@ jobs: run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets github publication/github "$GH_REPOSITORY" --tag "$RELEASE_TAG" - name: Publish model and immutable Hugging Face revision env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_MODEL_REPO: ${{ vars.HF_MODEL_REPO }} - run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets model publication/model "$HF_MODEL_REPO" + HF_OIDC_RESOURCE: ${{ vars.HF_MODEL_REPO }} + shell: bash + run: | + : "${HF_MODEL_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets model publication/model "$HF_MODEL_REPO" demo: env: @@ -143,6 +151,9 @@ jobs: group: deploy-space-${{ needs.route.outputs.product }} cancel-in-progress: false environment: model-demo-${{ needs.route.outputs.product }} + permissions: + id-token: write + contents: read steps: - uses: actions/checkout@v6 with: @@ -153,9 +164,16 @@ jobs: path: publication/ - uses: astral-sh/setup-uv@v8.1.0 - run: uv venv --python 3.13 .venv-release - - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=0.36,<2' + - run: uv pip install --python .venv-release/bin/python numpy pillow 'huggingface-hub>=1.19,<2' - name: Deploy the reviewed Space env: - HF_TOKEN: ${{ secrets.HF_TOKEN }} HF_SPACE_REPO: ${{ vars.HF_SPACE_REPO }} - run: .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space publication/space "$HF_SPACE_REPO" + HF_OIDC_RESOURCE: spaces/${{ vars.HF_SPACE_REPO }} + shell: bash + run: | + : "${HF_SPACE_REPO:?Set the repository variable in this GitHub environment}" + HF_TOKEN="$(.venv-release/bin/hf auth token)" + test -n "$HF_TOKEN" + echo "::add-mask::$HF_TOKEN" + export HF_TOKEN + .venv-release/bin/python -m ${RELEASE_MODULE}.publish_assets space publication/space "$HF_SPACE_REPO" diff --git a/dev/releases/mambo_v3/publication.md b/dev/releases/mambo_v3/publication.md index a49a592..09d573f 100644 --- a/dev/releases/mambo_v3/publication.md +++ b/dev/releases/mambo_v3/publication.md @@ -22,14 +22,41 @@ review before public writes. No PyPI API token is needed. Create the Hugging Fac model repository and Gradio Space, both named `asgersvenning/MAMBO-v3` in their respective namespaces. Choose CPU Basic initially; the demo does not need a GPU. -- `model-assets-mambo-v3`: variable `HF_MODEL_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` - with write access limited to that model repository. -- `model-demo-mambo-v3`: variable `HF_SPACE_REPO=asgersvenning/MAMBO-v3`; secret `HF_TOKEN` - with write access limited to that Space. +All four GitHub environments use trusted publishing; **none needs a stored token +or secret**. Set only these environment variables: + +| GitHub environment | Variable | Value | +| --- | --- | --- | +| `model-assets-mambo-v3` | `HF_MODEL_REPO` | `asgersvenning/MAMBO-v3` | +| `model-demo-mambo-v3` | `HF_SPACE_REPO` | `asgersvenning/MAMBO-v3` | + +In each Hugging Face repository's **Settings → Trusted Publishers**, register +GitHub Actions with `repository=asgersvenning/mini_trainer` and the workflow below. +The Space needs two registrations because either workflow can deploy it: + +| Hugging Face settings | `workflow` claim | +| --- | --- | +| [Model](https://huggingface.co/asgersvenning/MAMBO-v3/settings) | `publish-model.yml` | +| [Space](https://huggingface.co/spaces/asgersvenning/MAMBO-v3/settings) | `publish-model.yml` | +| Same Space | `publish-demo.yml` | + +Leave the optional branch claim unset: model publication runs from a release tag, +and demo updates run from a reviewed manually selected revision. Keep GitHub +**required-reviewer environment gates** enabled; restrict allowed deployment +branches/tags there to the reviewed release refs. Repository and workflow claims +must both match; do not authorize the whole GitHub repository without a workflow. + +The publishing jobs use the official `hf auth token` exchange with +`huggingface-hub>=1.19`: a short-lived, destination-scoped token is masked and passed +only to the upload process. Preparation jobs cannot request OIDC credentials. +GitHub release uploads use the automatic `github.token`; no personal token is +needed. See [Hugging Face trusted publishing](https://huggingface.co/docs/hub/trusted-publishers). These are the destinations linked in the public documentation. If using another -namespace, update those public links before final preparation as well as the -variables. Do not put tokens in source, release assets or CLI arguments. +namespace, update those public links as well as the variables and publisher +registrations. The variables and registrations are non-secret configuration; +keep account recovery codes securely backed up. Remove any obsolete `HF_TOKEN` +environment secrets and revoke tokens created solely for these workflows. ## 2. Review and prepare without publishing From 5e1ab95b4eccb1e3e6d25199e5f1bb441d64dbc2 Mon Sep 17 00:00:00 2001 From: asgersvenning Date: Sat, 26 Sep 2026 21:08:24 +0200 Subject: [PATCH 221/221] fix: update benchmark package metadata and isolate legacy archive test --- dev/benchmarks/training/run.py | 4 +-- tests/benchmarks/test_benchmark_synthetic.py | 2 ++ tests/releases/test_ucloud_release.py | 29 ++++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/dev/benchmarks/training/run.py b/dev/benchmarks/training/run.py index 4fa1d45..93eb57f 100644 --- a/dev/benchmarks/training/run.py +++ b/dev/benchmarks/training/run.py @@ -341,9 +341,9 @@ def run( "versions": { name: version(name) for name in ( - ("torch", "torchvision", "numpy", "mini_trainer", "torchao") + ("torch", "torchvision", "numpy", "mt-trainer", "torchao") if quantization_recipe - else ("torch", "torchvision", "numpy", "mini_trainer") + else ("torch", "torchvision", "numpy", "mt-trainer") ) }, "dataset_manifest_sha256": hashlib.sha256(manifest_path.read_bytes()).hexdigest(), diff --git a/tests/benchmarks/test_benchmark_synthetic.py b/tests/benchmarks/test_benchmark_synthetic.py index 7bc20be..d459cf2 100644 --- a/tests/benchmarks/test_benchmark_synthetic.py +++ b/tests/benchmarks/test_benchmark_synthetic.py @@ -34,6 +34,8 @@ def test_synthetic_training_matches_oracle_and_repeats(tmp_path): second = run(tmp_path / "second", cache="RAM", cache_workers=0) finally: torch.set_num_threads(threads) + assert "mt-trainer" in first["versions"] + assert "mini_trainer" not in first["versions"] assert first["cache"] == second["cache"] == "CPU" assert len(first["phase_measurements"]) == 24 assert [phase["phase"] for phase in first["phase_measurements"]] == ["train", "eval"] * 12 diff --git a/tests/releases/test_ucloud_release.py b/tests/releases/test_ucloud_release.py index 172855a..686aec1 100644 --- a/tests/releases/test_ucloud_release.py +++ b/tests/releases/test_ucloud_release.py @@ -160,15 +160,32 @@ def test_setup_rejects_wrong_metadata_before_downloads(tmp_path, monkeypatch): def test_legacy_archive_uses_repository_root_from_any_working_directory(tmp_path, monkeypatch): import subprocess - from dev.releases.mambo_v3.setup_ucloud_release import COMMIT, HERE, prepare_legacy_source - + from dev.releases.mambo_v3 import setup_ucloud_release as setup + + repository = tmp_path / "repository" + package = repository / "mini_trainer" + package.mkdir(parents=True) + expected = b"# Pinned legacy package\n" + (package / "__init__.py").write_bytes(expected) + (package / "deploy.py").write_text("# Legacy deployment\n") + subprocess.run(["git", "init", str(repository)], check=True, capture_output=True) + subprocess.run(["git", "add", "mini_trainer"], cwd=repository, check=True) + subprocess.run( + ["git", "-c", "user.name=Test", "-c", "user.email=test@example.org", "-c", "commit.gpgsign=false", "commit", "-m", "Legacy"], + cwd=repository, + check=True, + capture_output=True, + ) + commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=repository, text=True).strip() + monkeypatch.setattr(setup, "HERE", repository / "dev/releases/mambo_v3") + monkeypatch.setattr(setup, "COMMIT", commit) + (package / "__init__.py").write_text("# Uncommitted change must not be exported\n") monkeypatch.chdir(tmp_path) - source = tmp_path / "legacy" / COMMIT - prepare_legacy_source(source) - expected = subprocess.check_output(["git", "show", f"{COMMIT}:mini_trainer/__init__.py"], cwd=HERE.parents[2]) + source = tmp_path / "legacy" / commit + setup.prepare_legacy_source(source) assert (source / "mini_trainer/__init__.py").read_bytes() == expected assert (source / "mini_trainer/deploy.py").is_file() - prepare_legacy_source(source) # Reuse the completed extraction on setup retries. + setup.prepare_legacy_source(source) # Reuse the completed extraction on setup retries. def test_configuration_preserves_virtual_environment_interpreter(tmp_path):